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wABCfgAAgRBhAwFfAwEAYAHAAE2sATTAAEKAA8AAQoDAAELOAAAAAQEBwABCgwAAACJfAwEAAABgAcAATawBPgFJwABCkiEWwABCoYHAAEKXwABJqnCBSD0cwABCuIHAAEKuwABJqmUBAAGCwABCwcAASf4AgUo/TsAAQtjAAELgAACAnWEDAltgA8AATl1gAcAATawBNMAAQuIDwABC4sAAQ0wAAAACAgLAAELjAAAAJFsAwABC9QAAAIERYAPAAE5dAABgAcAATawBPgFJwABDBCEWwABDE4HAAEMJwABJqnCBSD0cwABDKoHAAEMgwABJqmgCAAKDwABDOMAASn6EwABDP8AASogAgUs/PgJOwABDZQAAAIEHXQPAAE0/AV0DgSIBXwMBAAEWwABDZR4Ak80BAV0DwABNBAFdA4EiAV8DAQABgMAAQ2XAAEmCAIEIwABNJkUAAAEcwABDZYQAwABK5YEJAAAAAMAATUEAPgJOwABDWwAAAG9dA4EiAV8DAQABFsAAQ26EAMAASuWBCsAATUM+AT0cwABDfYXAAEN2wABLSICJAgFgAcAATawBgsAAQ4LAAEnQAYCdg8AAQ5TAAEpNgTVKwABDqAEWwABDuYHAAEOvwABJqm+BRwaBMRDAAEaCwABGkMAAR70AAYESAAAAAQPAAEaawABHvQAAAQAABCFgA8AATe8BWwICAsAARqcAAACBE10DwABNBAFfAwEAAMAARroAAACA2mEDAV8DAQBdA4EeAVsAAF0DgSIBWwE+Ak7AAEbXwABG4AAAgQhdA8AATT8BXwMBAAEWwABG64DAAEbiwABL6IEIwABNJkrAAEb5AR7AAEcAgTQBAAE0wABHCAPAAEcIwABHuAAAAAAAAABdA4EeAWADwABK2AE+BEnAAEcTIRzAAEchgsAARxjAAEwfgQkAAAAAwABNQUrAAEctASo/TsAAR0XAAEdMAACA5l0DgR4BWwEcwABHVIHAAEdOwABL/W4BAAEWwABHXoLAAEdVwABMH4EKwABNQwAAScAAR24lwABHeQCDwABHcsAATKVdA4EiAVtKwABHhAEcwABHkhTAAEeLwABMpQMBXQOBIgFbgIkBAWADwABK2AFqwABHl2EDAVtgA8AASthJAIE1P0rAAEemASkABoEzEMAASADAAEgMwABIHQABgRQBAAAAAQPA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AABzXQOCXgFfAwEAAE6m8ab3AACBn2ADwABOcQEfpv3AAE6IAAAAAE+nD6cUAAABgaBhAwBcAAOnHagoAAAAAAAAAFwBPgQ9HKcuhacowACavoGhAAAAAMAATn9Opz8AAAA7XwMBAABJp0shHKdbgadPwACaY4CMAQABKwDAAE38PgFLPgE9j6d+wACbDRynkIGnhcAAmmNuAQABNaeRAAABAGADwABMogGDp5HAAJqcNaehAAABAGADwABMogGLp6HAAJqcHKehFKeRwACbTQgAgQ0BAAGUAMAATcgUp5HAAJtNCAAAAAEBp7BbAae3AAABaVsAAae6AAABgPlgA8AATl0APgI9HKfUhKfJwACarYCLAgACFKfdwACbnggAFKfgwACbpwkAAIJzSqfuAD89HKgZhKgOwACarYCCAQABh6gdwACbDQCCck+oL6g0AAABgaJhAwBcAAOoRqjEAAAAAAAAAFwBPgJAHKhegqhYwACaj4CMAQABKwDAAE38qFioZQA9iqhuwACajx6oeoUKAgACgKiJwACaVjSokQOokai9AAAAAQEBqJgAAACBiGADhQcAAGABwABNrAE+AT0cqLKGqKnAAJrbbgAAAAAAAD2MqMvAAJqtHqjcgmoFAV8DAQAABYD7KXo0qRcDqRepXgAAAAAAAABgAcAATawBPgI9HKkshakmwACavm0AAAAAwABOfT0cqVGHqT/AAJv+bgAAAAAAgLM0qXEDqXGpyQAAAAAAAABgAcAATawBPgM9HKmGgqmAwACaj4GMAAAAAIUNPYqpmsAAmo8rPRypuIWpssAAmr6BowAAAADAAE5+ezSp3QOp3arnAAAAAAAAAGABwABNrAE+BEAcqfmCqfPAAJqPgIwBAAErAMAATfyp86oAAE6qFqoeAACBpGADwABLdAEWqiaFqiDAAJq+gaTAAE6DPRyqP4WqOcAAmr5tAAAAAMAATn09iqpSwACajx6qXoUJAgACHKprgKpkwACaVoEGAQABFKptwACdWAgAAMAAS4o0qnYDqnaq2wAAAAAAAABgAcAATawBPgM9iqqHwACajys9HKqzh6qhwACb/m4AAAAAAD0cqsyGqsPAAJrbbgAAAAAAAHw0qvsDqvurcwAAAAAAAABdA4GRAWABwABNrAE+A0mrCiEcqxSCqw7AAJqPgIwBAAErAMAATfw9HKsjgqsdwACaj4GMAAAAAIUNPz2KqzfAAJqPK0qrTwEaq12BJUqregEWq4yEq4HAAJqtQIJgBoHiBLHfseeycQQBgaUAAAABA7H+snEAAAEAAAQhYAPAAE3vAVsCAgKyDQAAAIFjXQOB1gFbALIfAAAAgaZhAwFdA4IcAV8DAQBdA4IcAVsAAF0DgdYBXwMBAAE+AUqyQQEfskyE1gICW18DAQACgLJdwACek4GyZcAAnqEABoHkBLObs6yz8gABgacAAAABA7O6s/IAAAIAAAQgYAPAAE3vAVsAAAQhYAPAAE3vAVsBAQGzxQAAAIFjXQOB1gFfAwEAAABdA4HWAV8DAgABSrPWAR+z2pSKAQJfAwEAXwMCAAGAs+vAAJ8dAAaCBQS0M7Q8tFABAICUAAAAAQO0SLRQAAAAAAAAAGADwABK2AFKtEsBKgaB5QS4crh8uUcAAIGoAAAAAQO4jblHAAAAAgAAAribAAAAemEDAV0Dgg8BXwMAAFwBagBgAcAATawCuNQAAAB8YQMBXQOCDwFfAwAAXAFqAGABwABNrAJdA4HWAV8DAAABPgFKuQkBH7kUg/QDAV8DAAADLoC5MMAAn52BuTrAAJ+6AAaB5gS/s7/JwABAIgACgakAAAABA7/PwABAIgAAAAQBAb/VAAAAgJxhAwFfAwAAXAADv/YAAACAnWADwABMmAFqAGABwABNrALAAEAEAAAAgJ5hAwBcAWoAYAHAAE2sAsAAQBMAAABBYAPAAErYAWoAYAHAAE2sAl0Dgg8BXwMAAAAGgecEwABCSMAAQlLAAEKcAACBqgAAAAEDwABCV8AAQpwAAAABAQHAAEJdAAAAgRthAwFfAwAAYAPAAErYAABdA4HWAV8DAAABPgFKwABCcgEfwABCfYRGAgFfAwAAAi6AwABCk8AAoKwABoHoBMAAR5DAAEeawABH6QAAgasAAAABA8AAR6DAAEfpAAABAAAEIGADwABN7wFbAQEBwABHowAAAIGsYQMBXwMAAF8DAQAAAF0DgdYBXwMBAAE+AUrAAEe7AR/AAEfGhE8CAl8DAABfAwEAAi6AwABH3cAAoSIABoHpBMAASWTAAEluwABO6QAAga0AAAABA8AASXnAAE7pAAABAAAEgWdgA8AATe8BWwEBAcAASYYAAACBrGEDAV8DAABdA4EeAV8DAQAAAF0DgdYBXwMBAAE+BU7AAEm3AAAAc10DgoYBXwMBAABOwABJ3QAAAC9dA4IPAV8DAAAAT8AASfDAAEn1AAABemEDAFwAA8AASf3AAEzBAAAAAAAAAFwBPgROwABKDsAAShIAAYCCYQMBXwMBAFwBFsAASh+BwABKFMAAocOAgoJyQCIlwABKPACBwABKMcAAocNdA4KJAV8DAQABJcAASmwAgcAASmHAAKHDXQOAtAFbwABKMcAASokATsAASpjAAEqhAAGAi2EDAmADwABN72ADwABOXVwBFsAASq6BwABKo8AAocOA1QGDHz2KwABKv8AAodYcwABK0y6BqQMAATTAAEraA8AAStrAAEyNAAAAAQEBwABK3QAAAICDXwMAAAAAYAHAAE2sAT4DTsAASvoAAACBrl0DgR4BXwMBAABLPgE9j8AASxzAAKLiHMAASy6AwABLJ8AAoZtuAQABhsAASy/AAKLJAAABAcAAS0FbAcAAS0gAAAFpWwABwABLSwAAAYD5YAPAAE5dAD4CPRzAAEtlgcAAS1rAAKHDgIsCAAIUwABLbsAAoycIABTAAEtxwACjMgkAAIJzSsAAS38AScAAS5klwABLpgCHwABLncAAouJdA4EiAV8DAQA+Aj0cwABLzYLAAEvAwACh1oGvAAAAAIIVPRzAAEwkHMAAS/gUwABL4MAAouIHAV0DgSIBXwMBAICJAgFcAYTAAEv9wACiDwGAnYXAAEwLwACicIE1gRwBAAEWwABMPoLAAEwxwACh1oGwghYAgTc+AT0cwABMbYHAAExiwAChw4CCAQABJsAATHEBh8AATHHAAKLiXwMBAACCcgKAnYXAAEyYwACicICeFsAATLWBwABMqsAAocOAjYJ0geZJwABMyBbAAEzRLoCUggU+AT2JwABM5sAAocMmwABM5gEewABM94JrAwFfAwEAAAN6g8AATSrAAKHtfDTAAE1IA8AATUjAAE17AAAAAAAAAGABwABNrAE+AT0cwABNZoLAAE1ZwACh1oGMAAAAAIIRgPspXQOChgFfAwEAPgE9icAATafAAKHDJsAATacBHsAATbiCagUBXwMBAAAFeoPAAE3hwACh7YCzNMAATf4DwABN/sAATjAAAAAAAAAAYAHAAE2sAT4BPRzAAE4cgsAATg/AAKHWga8AAAAAghV7NMAATkYDwABORsAA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jMAAzGHAAM3nKT2LwADMg8AAzdiGwADMjMAAzjQ/HsAAzK5SAgAChcAAzMXAAM38gsAAzNPAAM2zAAADgJ0WwADNAILAAMz5wADNs2sBgbqAnjTAAM0gA8AAzSDAAM7FAAAAAAAAAGABwABNrAE+AknAAM0vhMAAzTPAAM3nPgI9HMAAzVWCwADNTsAAzbOA+AEBAAGDwADNX8AAzdgAgbhKwADNdAA/Sz4CScAAzaQhHMAAza+BwADNqMAAzYyAjAEAASsAwABN/D4CPR7AAM3ITwMBXwMAAAOBwADN1cAAzYwWwADN5ILAAM3dwADNs4D4AYG4FsAAzfaCwADN78AAzbNrAYG6AErAAM4VAD89MMAAzjcewADOUpb8AAAAAAEBwADOa1sBwADOcgAAAWlbAAHAAM51AAABgPlgA8AATl0APgE9HsAAzoZDAwADgsAAzqHAAM2zhsAAzqnAANCVh8AAzqzAANCgAEEpgeZKwADO6QGCwADO8MAAzbMGggIEwADRVMAA0V7AANQHAACB3AAAAAEDwADRZ8AA1AcAAAABAQHAANFsAAAAgd1gA8AATKIAAF0DgSIBXwMAAAE+Bz0ewADRh8AAS8oCAAKAwADRlMAA0RIngd0APR7AANG0wABL4AIAAoDAANHFwADREieB3QBOwADR5cAA0ewAAG9dA4GRAV8DAAABH8AA0fKBxQABXwMAAAAATsAA0hcAAAAvXQOCDwFbAE7AANItwADSOgAAgd5gA8AATKIBkz2KwADSQ8AA0YkcwADSVy6BqQQAATTAANJnA8AA0mfAANMaAAAAAQEBwADSagAAACJfAwAAAABgAcAATawBPgJJwADSfRzAANKHgMAA0oHAANESgIwBAAGDwADSisAA0ZkAwABNxj4CPR7AANKmUwMAA4LAANK2wADRiYHAANLEwADRZITAANLMwADR1gBKwADS4AA/PYvAANL+wADRmRzAANMLg8AA0v7AANGZgQ0BAAGUAMAATcgDgJ0WwADTNIHAANMtwADRZGsBgbqAnjTAANNUA8AA01TAANPSAAAAAAAAAGABwABNrAE+AT0cwADTaoHAANNjwADRZGsBAQABH8AA04zAAEv0BQAFgMAA053AANESLieB3SuDwADTucAA0ZkAAIG6QSmB5krAANP2AYHAANP9wADRZAaCAwTAANkrwADZNcAA428AAIEeAAAAAQPAANk8wADjbwAAAAIBAcAA2UYAAACBH2ADwABLdAABwADZVwAAAIEgYQMBXQOCHAFfAwAAXAFqAGABwABNrAJdA4HWAV8DAAABPgxOwADZlQAAAHNdA4KGAV8DAAAATsAA2e0AAAAvXQOCDwFfAwAAAE7AANoFAAAAgYhgA4UHAE7AANoVAAAATmADhV8ATsAA2i4AAACBHl4DAAAAAAABVwMJAFwAT8AA2jzAANpBAAABgJxhAwFfAwAAXAADwADaR8AA224AAAABAQHAANpKAAAAgINfAwAAAABcAT4DPRzAANpfhMAA2lnAANNzgYwAAAAAhQ09jMAA2m/AANNzHMAA2nyFwADad8AA04KB3wIAAoDAANqIwADTD4bAANqTwADTkACFfT0cwADbXoLAANtTwADTTYCCAQABFMAA22LAANPNCAAAgnJPwADbdcAA23oAAAGAnWEDAltgA8AATl1cAAPAANuBwADcpQAAAAICAsAA24IAAAAkWwDAANuUAAAAMWADwABOXQAAXAE+BD0cwADbroTAANuowADTc4GMAAAAAIUNQCIlwADb0ACCwADbxcAA001dA4KJAVsBJcAA2/0AgsAA2/LAANNNXQOAtAFbwADbxcAA3BoAPRzAANwugsAA3CPAANNNgNUBAgACFMAA3DjAANR0CQAUwADcP8AA1H4KAACDHz2MwADcc8AA03McwADcgIXAANx7wADTgoHfAgACgMAA3IzAANMPhsAA3JfAANOQAIV9T8AA3KzAANyxAAABgJ5hAwBcAAPAANy3wADc8AAAAAAAAABcAT4CPRzAANzIhMAA3MLAANNzgYwAAAAAhQ09HMAA3OOCwADc2MAA002AjQAAAACCdE/AANz3wADc/AAAAXphAwBcAAPAAN0EwADhGQAAAAAAAABcAT4EPY3AAN3pwADTghrAAN31hWVJwADeBBzAAN4SgcAA3gjAANMggIwBAAErAMAATfw+AT2OwADeJcAA05A0wADeLwPAAN4vwADepQAAAAAAAABgAcAATawBPgE9HMAA3kmCwADePsAA002AiwIAAh/AAN5lgUECAAIngeCAwADeicAA0w8AKwCCcz4DTsAA3yvAAN8/AACB4V4DAAEBAV0DghwBXwMAAAABVwMcAltdA4IcAV8DAABbARzA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AVsAAFwBPgE9HMAASJGAwABIiMABRueAzwECAAIWwABInC4kg5UWwABIoy4xg5YAgycAAAFGwAABRyYAAAABAoObBsAASNTAAEjawABJ4oOCVwAAAWADwABN7wABXQODhQFbAAEFg6MGwABJBMAASQrAAEkYAQAAA8AASRbAAEkYAAAAAAAAAGADg5sBPwEJAcAASQrAAE4FAAAAAAMGg50GwABJHMAASSHAAElgAACCVAAAAAEDwABJKMAASWAAAAABAQHAAEk4AAAgglBdA4MjAVsAAFwBPgE9HMAASVGAwABJSMABR7mA0QEAAAAAgygGg58GwABJZcAASXfAAEmDAQCAwgAAAAEDwABJfMAASYMAAAAAAAAAXQODhQFbAUrAAEl/ASsGg6EGwABJiMAASZHAAEngAgCAwgAAAAEDwABJlcAASeAAAAABAQHAAEmkAAAAgIpdA4OFAVsAAFwBPgE9MMAASa0fwABJt8AATD4BAAEnglgAAAABR5IAAUfmAAFIHAABSG4AAAADAoOkBsAAShfAAEomwABRjweCWQABAAAEIWADwABN7wFbAWADwABN7wAABASDpwbAAEp1wABKiwaCWgEAYAPAAEyiAWrAAEqKYAPAAEyiGgSDqAbAAErawABK7gaCWwEAYAPAAEyiAWrAAErtYAPAAEyiFASDqQbAAEt2wABLiQaCBQEAYAPAAEyiAWrAAEuIYAPAAEyiTASDqgbAAE2hwABNvBiArgEAYAPAAEyiAWrAAE2qYAPAAEyiGgEFg7YAAAAABAAAAwAAAAAAAAAAAF0Dg6QBXwMAAAE/AQkBAMAATgUAAAAABwaDrAbAAE3BwABNysAATdEBAoDjAAAAAQPAAE3RwABN0QAAAAAAAABgA8AAStgABoOtBsAATdbAAE3fwABOCAEAdwAAAAEDwABN68AATggAAAAAAAAAYAPAAErYAUrAAE3uARzAAE31FsAATe4ugK4Bg6qAjAEAAWrAAE34YAPAAEyiFADAAE3GBoOvBsAATgzAAE4VwABOQgEAglwBAAAAAQPAAE4lwABOQgAAAAAAAABgA8AAStgBSsAATigBHMAATi8WwABOKC6ArgGDqoFeAQABasAATjJgA8AATKIUAMAATdMGg7EGwABPE8AATxjAAFC6AACCMgAAAAEDwABPIMAAULoAAAABAQHA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wAChscACGZNuBQAFFsAAociCwAChucACGP5OhSSDwAChzsACGWYugMAAoeTAAhjZgcAAoe7AAhjoAAAGhd8JwACh+cAAof/AAKNtAACCsAAAAAEDwACiEsAAo20AAAACAgLAAKIcAAAAWWADwABLdADAAKIrAAAAUGEDAWADhQdcAABgA4UHAT4FTsAAokXAAKJUAACC1V0DhSIBXgMABQUFYAOFX2ADhU5gA4VfYAPAAEt0YQMBYAOFB1wAAVcDKABgA4UHARbAAKJbLoK2AYW+QCEcwACii4LAAKJ8wAIab4CMAQABKwDAAE38wACifMAAopIATsAAoqbAAKK1AACC6mADhU4BHsAAordVAQABFsAAotaCwACix8ACGm9OhSQATsAAovzAAKMEAACC2F4DAAUFBWADhV9gA4VOYAOFX2ADwABLdGEDAWADhQdcAAFXAygAYAOFBwEWwACjFYLAAKMGwAIab4K8hSVKwACjIwEcwACjMYTAAKMqwAIbCG4FAAUWwACjQYLAAKMywAIab06FJIPAAKNHwAIa2y6AwACjXcACGkaBwACjZ8ACGlUAAAaF4AnAAKNywACjd8AApJkAAIK+AAAAAQPAAKN8wACkmQAAAAEBAcAAo4QAAABdYAPAAE6JAABcAT4FTsAAo5TAAKOjAACC1V0DhSIBXgMABAQEYAOFX2ADhU5gA4VfYAPAAE6JAAFXAykAXAEWwACjqi6C4QGFv0AhHMAAo8yBwACjvcACG9SAjAEAASsAwABN/MAAo73AAKPTAE7AAKPnwACj9gAAgupgA4VOAR7AAKP4VQEAARbAAKQXgcAApAjAAhvUToUkAE7AAKQvwACkNwAAgtheAwAEBARgA4VfYAOFTmADhV9gA8AATokAAVcDKQBcARbAAKRIgcAApDnAAhvUgryFJUrAAKRWARzAAKRkg8AApF3AAhxibgQABBbAAKR0gcAApGXAAhvUToUkgsAApHrAAhw1LoDAAKSQwAIbvwAAAAAB/I4AAf0aAAH9YAAB/fsAAf7AAAH/rwACAIgAAgGfAAIC9AACA54AAgSCAAIFoAACBzoAAgifAAIKJwACC60AAg2FAAIPrwACEWUAAhNnAAIVtQACF3IAAhiyAAIaHwACG5gAAhzeAAAAGQKF4wnAALKvwACytcAAx9yDguwAAAFgA4WbAAAC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A4WbAABgA4VOAT4CScAAZXEcwABlgRbAAGV6gMAAZXXAAksTTYWtgIwBAAErAMAATfxKwABligErP0rAAGWZARbAAGWsFsAAZaWAwABloMACSxNNha2C5AGFqwZWCcAApJ7AAKSjwAClpwABgywBAAAAAQPAAKS7wAClpwAAAAUFBcAApMYAAABMYAOFXwDAAKTZAAAATWADhU4AwACk5gAAAE5gA4VfAMAApOwAAAAkWwDAAKT+AAAAMWADwABOXQAAXAE+AT0ewAClDkoBAAE0wAClLQPAAKUtwAClpAAAAAAAAABgAcAATawBPgM9IxzAAKU8g8AApTbAAkvFgIwBAAErAMAATfyLwAClNsACS8UfwAClRMAAS8EAAAAAKwFbScAApVscwAClaoTAAKVfwAJLz4CMAQABKwDAAE38PTDAAKVzg8AApXnAAkvFPz0ewAClhFcCAAKDwACljcACS8WEwACllMACS88AAAZXCqMqozajegAFgy0BAmqjNmADk/omaqM2YAOUCIMBAAABA6M+o3oAAAACAgKjRgAAACRgA8AATe8Ao1gAAAAxYAPAAE5dAABcAAZYCcAApejAAKXqwACmtAABgy8BAAAAAQPAAKX1wACmtAAAAQAABENgA8AATe8BWwQEBMAApfsAAABMYAOFXwDAAKYOAAAATWADhU4AwACmGwAAAE5gA4VfAMAApiMAAABQYQMAXwMAAAAAXwMAAAE+A0nAAKYsHMAApj4awACmNYVjgIwBAAGCwACmQcACTSMAwABN/ErAAKZHARzAAKZPg8AApk7AAk0wbgAAAAAAP07AAKZbwACmXwAAgzBgA4VfAR7AAKZmhYEBAAGCwACmbcACTSMATD4BSsAApoABHMAApoiDwACmh8ACTTBuAAAAAAA+AT0ewACmo4WCAQABhMAApqrAAk2IAAZZCcAAprfAAKa5wACnogABgzEBAAAAAQPAAKbMwACnogAAAgAABENgA8AATe8BWwAABCFgA8AATe8BWwUFBcAAptcAAABMYAOFXwDAAKbqAAAATWADhU4AwACm9wAAAE5gA4VfAMAApv8AAABQYQMBXwMBAF8DAAAAwACnCwAAAEVfAwEAAABfAwAAAT4DScAApxQcwACnJhrAAKcdhWOAjAEAAYLAAKcpwAJOOgDAAE38SsAApy8BHMAApzeDwACnNsACTkduAQABhMAApzjAAk5bAAA/TsAAp0bAAKdKAACDMGADhV8BHsAAp1GFgQEAAYLAAKdYwAJOOgBMPgFKwACnawEcwACnc4PAAKdywAJOR24BAAGEwACndMACTlsAAD4BPR7AAKeRhYIBAAGFwACnmMACTrkABloJwACnpcAAp6fAAKi5AAGDMgEAAAABA8AAp8DAAKi5AAADAAAEQ2ADwABN7wFbAAAER2ADwABN7wFbAAAESGADwABN7wFbBgYGwACnxgAAAExgA4VfAMAAp9kAAABNYAOFTgDAAKfmAAAATmADhV8AwACn8gAAAFBhAwJfAwEAXwMCAF8DAAAAwACoCgAAAElfAwEAAMAAqBMAAABKXwMCAAAAXwMAAAE+A0nAAKgdHMAAqC8awACoJoVjgIwBAAGCwACoMsACT4AAwABN/ErAAKg4ARzAAKhAg8AAqD/AAk+NbgIAAoTAAKhBwAJPpYXAAKhHwAJPsgAAP07AAKhWwACoWgAAgzBgA4VfAR7AAKhhhYEBAAGCwACoaMACT4AATD4BSsAAqHsBHMAAqIODwACogsACT41uAgAChMAAqITAAk+lhcAAqIrAAk+yAAA+AT0ewACoqIWCAQABhsAAqK/AAlAZAAZbCcAAqLzAAKjMwACpKgABgzMBAAAAAQPAAKjkwACpKgAAAQAABENgA8AATe8BWwQEBMAAqO8AAABMYAOFXwDAAKkCAAAATWADhU4AwACpDwAAAE5gA4VfAMAAqRcAAABQYQMAXwMAAAAAXgMAAAAAAAFXAxsBXwMAAF8DAAABPgFKwACpIAGDwACpJ8ACUN4GXAnAAKktwACpRcAAqbAAAYM0AQAAAAEDwACpZcAAqbAAAAIAAARDYAPAAE3vAVsAAAQhYAPAAE3vAVsEBATAAKlwAAAATGADhV8AwACpgwAAAE1gA4VOAMAAqZAAAABOYAOFXwDAAKmYAAAAUGEDAV8DAQBfAwAAAABeAwABAQFfAwEAAAFXAxwCXwMAAF8DAQBfAwAAAT4BSsAAqaYBg8AAqa3AAlF7Bl0JwACps8AAqdHAAKpNAAGDNQEAAAABA8AAqffAAKpNAAADAAAEQ2ADwABN7wFbAAAER2ADwABN7wFbAAAESGADwABN7wFbBAQEwACqAgAAAExgA4VfAMAAqhUAAABNYAOFTgDAAKoiAAAATmADhV8AwACqKgAAAFBhAwJfAwEAXwMCAF8DAAAAAF4DAAICAl8DAQBfAwIAAAFXAx0DXwMAAF8DAQBfAwIAXwMAAAE+AUrAAKpDAYPAAKpKwAJSMAZeCcAAqlDAAKpbwACq0QABgzYBAAAAAQPAAKptwACq0QAAAAUFBcAAqnMAAABMYAOFXwDAAKqGAAAATWADhU4AwACqkwAAAE5gA4VfAMAAqqgAAAAkYAPAAE3vAMAAqroAAAAxYAPAAE5dAABgA4UUAUrAAKrNASsGXwnAAKrUwACq2cAArH8AAYM3AQAAAAEDwACq78AArH8AAAAEBATAAKr6AAAATGADhV8AwACrDQAAAE1gA4VOAMAAqxoAAABOYAOFXwDAAKslAAAAUGEDAFwAAFwBPgJJwACrLiEewACrM8AARnUCAAJqwACrPWADheM6gsAAq0jAAlM5AD4DTsAAq1rAAKtqAACDOGADwABK2AEhHMAAq3dqwACrbWADheM6gYEBAAGCwACrh8ACUzkAha9JwACrkoTAAKuWwAJTgT4BPYvAAKuvwAJTRhzAAKu4gsAAq7PAAlM5gq8BAAGDwACrzMACU0YAhXg+AT2LwACr48ACU0YcwACr7ILAAKvnwAJTOYLLAQFcAYPAAKv5wAJTRgCFdT2KwACsTMACUzlqwACsU2ADheM6Pz0ewACsZEkBAAGDwACse8ACU0YABmAJwACsgsAArIjAAK10AAGDOQEAAAABA8AArJjAAK10AAAABQUFwACsngAAAExgA4VfAMAArLEAAABNYAOFTgDAAKy+AAAATmADhV8AwACs0QAAAFlgA8AAS3QAwACs4AAAABthAwBcAABgA4UHAT4CScAArPAhHsAArPXAAEZ1AgACasAArP9gA4XjOoLAAK0KwAJUhAA+AT2MwACtF8ACVKAcwACtJ4LAAK0iwAJUhILLAQFcAYTAAK00wAJUoACFdT9KwACtRQEewACtUoUPAgACg8AArV/AAlSRhMAArWnAAlSgAAZhCcAArXfAAK19wACu0gABgzoBAAAAAQPAAK2VwACu0gAAAAUFBcAArZsAAABMYAOFXwDAAK2uAAAATWADhU4AwACtuwAAAE5gA4VfAMAArc4AAABZYAPAAEt0AMAArd0AAAAbYQMBYAOFB1wAAGADhQcBPgJJwACt+CEewACt/cAARnUCAAJqwACuB2ADheM6gsAArhLAAlVsAD4BPYzAAK5YwAJViBzAAK5ogsAArmPAAlVsgswBAltgA4UHAYTAAK6KwAJViACFdj9KwACumwEewACuqIUQAgACg8AArr3AAlV5hMAArsfAAlWIAAZiCcAArtXAAK7awACvNwABgzsBAAAAAQPAAK7kwACvNwAAAAQEBMAAruoAAABMYAOFXwDAAK79AAAATWADhU4AwACvCgAAAE5gA4VfAMAArxcAAABdYAPAAE6JAABcAT4BPR7AAK8hk9MBAAGDwACvMMACVmkABmMJwACvOsAArz/AAK93AAGDPAEAAAABA8AAr0vAAK93AAAAAQEBwACvUwAAAF1gA8AATokAAFwBPgE9HMAAr2oawACvYoVlgr4BAAGAwACvcMACVrkAhX8GZAnAAK96wACvf8AAsqwAAYM9AQAAAAEDwACviMAAsqwAAAAFBQXAAK+OAAAATGADhV8AwACvoQAAAE1gA4VOAMAAr64AAABOYAOFXwDAAK/KAAAAX2ADhSgAwACv3QAAAGBdA8AATXgCW1sAAGADhV8BPgU9G8AAsI2Tw2rAALCbYQMBYAPAAE6JXIMKScAAsKwcwACwvoPAALCwwAJXOYCMAQABKwDAAE38PgE9i8AAsM3AAlc5asAAsONgA4U9gwxJwACxASElwACxEwCDwACxBcACVzlgA4U9PgE9MMAAsTEfwACxO8AAS9EBAAEkwACxSAIngz4ngz8AP07AALGpAAAAg0BdA8AATXgCW1sAScAAsbUcwACxxITAALG5wAJXRoCMAQABKwDAAE38PgFJwACx0yXAALHcAILAALHXwAJXLGADhZs+AT2NwACx7sACV+oWwACx/hTAALH5wAJXLAIBYAOFm4LlAYWsPgE9jcAAshfAAlfqHsAAsiaJDQACW1sAAD4BPY3AALJGwAJX6h7AALJViQ8BAltbAYTAALJiwAJXRgBKwACydQEfwACygIXiAwADJsAAsowBgsAAsozAAlcsYAOFm4PAALKSwAJXOYXAALKhwAJX6gAGZwnAAM8lwADPJ8AA1aoAAYNBAAAAAQPAAM8ywADVqgAAAQAABENgA8AATe8BWwQBAcAAzzUAAACDQmEDAF8DAAAAA8AAz0YAAABgXQPAAE14AltbAWoAYAHAAE2sAsAA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XwMBAAEcrBWDrA7AAonSgtEBAAGFrBbAAooaAMAATVVDrCIhHKwvhqwpwAKKU4CMAQABKwDAAE38PgJJrEAiHKxNgqxEwAKJsICMAQABFqxWhqxQwAKKU4IchmQAwABNxgAerGLAAEZ1AgACFqxyhqxswAKKU4LShmKArHfAAomMAD4BSqyHARaslIasjsACilMihmM/PY6sqcACilMWrLeGrLHAAopTgMKGZU6szazTAAGDamADwABMogEWrNUug2GGFYYtTqzvrPUAACJfAwEAARys/4Gs98ACiZhuAAAAAABJrQccrRGHrQvAAosRgIwBAAEWrRQug2GGFYYtAMAATcY+AT0crTAug2eGFQYABoOtOsACidKFrUPAAooahK1KwAKJ+oCtUsACiYwUrVfAAosrCACCrV7AAomwAIZAPgE9HK2ALoEMAgACgK2BwAKJjBStiMACiysIAACGWUqtmQEUraDAAosrCAAGhlsXra6tsLAZAACDbAAAAAEDrbawGQAAAAEBAa2+AAAAgtJgA8AATe8AAF8DAQABPgdOrc+t2AABghxgA8AATKIBHq3awABGdgEAAYCt68ACi+4ATq37rgMAAYNkXQPAAE1GAV0DhmACXwMAAF8DAQABFq4FLoNghhWGLE6uGa4fAAGB3WADwABMogEcriqBriHAAowFgKEBAAEcrjwWrjWCri3AAowngcjAAE12gQYBAAGUAMAATckAwABMuk6uSq5QAACDGV0DhmACXwMAAF8DAQABHK5Zgq5SwAKMJ4LRAQABg65awAKMTwDAAE1VTq56roMAAIDBXQOGYAJfAwAAXwMBAAErQ66PIRyunISulsACjJGAjAEAASsAwABN/D4ETq6zrrgAAYDCXQOGYAJfAwAAXwMBAAEWrsCErrrAAoyRgMKGZUmuzCIcrtmBrtDAAowFgIwBAAEWruKErtzAAoyRghyGZADAAE3GAB6u7sAARnUCAAIWrv6ErvjAAoyRgtKGYoCvA8ACi+4APgQ9HK8TLoNthhUDAAOEryDAAoyRha8nwAKMw4OvMcACjE8Ahj89F69BLoNfhhUcr04Wr0Eug1+GFYYrgQYBAAGUAMAATcmGKz0Xr1oug2GGFRyvlByvjxavfC6DYYYVhi2BDQEAAZQAwABNyIChAQABaq+WYAPAAEyigzgAwABMuoYtSq+4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gIwBAAErAMAATfw+A07AAECCwABAhgAAgtJfAwAAARbAAECOgsAAQIjAAp8ugtKG2knAAECZHMAAQJ0ugpiGFQIAAoPAAEClwAKfioDAAECqwAKetgCGoUrAAECzAYPAAEC6wAKfij89isAAQMXAAp8uFsAAQNOCwABAzcACny6AwobcSsAAQOMBKwaGuBfAAED3wABA/cAAQcUBAIHCAAAAAQPAAEEDwABBxQAAAAAAAABfAwAAAT4CRcAAQQkBwABBEsAAQRQAAINmYAPAAEyiAZMBHMAAQRuAwABBGcACoDyAuwEAARbAAEEmFsAAQR0ug2CGFYacgcjAAE12AMAATdABiMAAQS7AAqA8HMAAQS+AwABBLsACoDyBDQEAAZQAwABNyD4CTsAAQT/AAEFFAACDGV0DhtgBXwMAAAEcwABBTxbAAEFHLoNghhWGnILRAQABgMAAQVDAAqA8AMAATVVJwABBWiEcwABBZIHAAEFewAKgpoCMAQABKwDAAE38PgFKwABBdwEWwABBhIHAAEF+wAKgpoLShto/PTDAAEGbHsAAQbaW/AAAAAAGhrkXwABBysAAQdDAAEMxAQCB1QAAAAEDwABB1cAAQzEAAAAAAAAAXwMAAAE+AkXAAEHbAcAAQeTAAEHmAACDZmADwABMogEcwABB+BbAAEHxFsAAQegug2CGFYacgcjAAE12gQYBAAGUAMAATckBHMAAQf+AwABB/cACoWCBXgEAAZMAwABN0wGIwABCBcACoWAcwABCBoDAAEIFwAKhYIEGAQABlADAAE3JPgJOwABCFsAAQhwAAIMZXQOG2AFfAwAAARzAAEImFsAAQh4ug2CGFYacgtEBAAGAwABCJ8ACoWAAwABNVUnAAEIxIRzAAEI7gcAAQjXAAqHagIwBAAErAMAATfw+A07AAEJSwABCXAAAg4xdA4bYAV8DAAABFsAAQmSBwABCXsACodqAwobcQ8AAQnIhHMAAQoOCwABCecACojaAjAEAASsAwABN/D4CPYnAAEKYwAKh2oLAAEKgwAKiNj2KwABCtcACojYWwABCy4LAAELBwAKiNoDChtxKwABC4wEWwABC8IHAAELqwAKh2oLShto/PTDAAEMHHsAAQyKW/AAAAAAGhqwXwABDQcAAQ0bAAESPAACAggAAAAEDwABDScAARI8AAAABAQHAAENMAAAggbxfAwAAAABgA8AAStgBPgZOwABDYcAAQ2oAAYIcYAPAAEyiARzAAENsLoN5hhUBAAGAwABDdsACov8AhqJOwABDisAAQ5AAAYHdYAPAAEyiARzAAEObgcAAQ5LAAqMYgKEBAAEcwABDrhbAAEOnFsAAQ54ug2CGFYacgcjAAE12gQYBAAGUAMAATckAwABMuk7AAEPJwABDzwAAgxldA4bYAV8DAAABHMAAQ9kWwABD0S6DYIYVhpyC0QEAAYLAAEPawAKjRQDAAE1VQ8AAQ+YhHMAAQ/ODwABD7cACo5iAjAEAASsAwABN/D4CScAARAQcwABECC6CmIYVAgACFsAARBaDwABEEMACo5iC0obagMAARBvAAqL/AIahSsAARCUBKj89i8AARDnAAqOYFsAAREeDwABEQcACo5iAwobcPRzAAERXLoNnhhUDAAOAwABEYcACov+BwABEasACoxiCwABEdMACo0UAhqZKwABEgAEpBoatF8AARJTAAESZwABE8gAAg2sAAAABA8AARJ/AAETyAAAAAQEBwABErAAAIIONXQPAAE0EAV8DAAAAAFwBPgE+Ak7AAETMAAAAgQddA8AATT8BXwMAAAEWwABEzB4Ak80BAV0DwABNBAFfAwAAAYDAAETMwAKkoQCBCMAATSZFAAABHMAARMyBAMACpL6BCQAAAADAAE1BAD4CTsAARMIAAACC/F8DAAABFsAARNWBAMACpL6BCsAATUM+AT0cwABE3S6AggEAAYLAAEThwAKlFwCGrAaGpBfAAET3wABE/MAAR3wAAIOOhhUAAAABA8AARQPAAEd8AAAAAgICwABFCwAAAIL8YAPAAE3vAMAARRcAAACCHGADwABMogAAYAPAAErYAT4FTsAARS3AAEUzAAGB3WADwABMogEcwABFPoHAAEU1wAKliYChAQABHMAARVEWwABFShbAAEVBLoNghhWGnIHIwABNdoEGAQABlADAAE3JAMAATLpOwABFbMAARXIAAIMZXQOG2AFfAwAAARzAAEV8FsAARXQug2CGFYacgtEBAAGCwABFfcACpaQAwABNVU7AAEWawABFowAAgMFdA4bYAV8DAAABK0PAAEWvIRzAAEW8g8AARbbAAqX3gIwBAAErAMAATfw+A0nAAEXNHMAARdEugpiGFQIAAhbAAEXfg8AARdnAAqX3gtKG2oDAAEXkwAKleQCGoT4FTsAARgjAAEYNAACAwl0DhtgBXwMAAAEcwABGFYPAAEYPwAKl94NsAAAAAIbeScAARiccwABGNITAAEYrwAKmMoCMAQABKwDAAE38PgE9HMAARlEWwABGSS6DYIYVhpyBDAIAAoLAAEZSwAKlpIXAAEZbwAKmnQDAAE1WPgE9F8AARoWEwABGfMACpjKAwoXAAEaMwAKmnYbcPRfAAEakLoNfhhUcwABGsRbAAEakLoNfhhWGnYEGAQABlADAAE3Jhp09F8AARr0ug2GGFRzAAEb3HMAARvIWwABG3y6DYYYVhp6BDQEAAZQAwABNyIChAQABasAARvlgA8AATKKDOADAAEy6hp5KwABHGwEpPz2MwABHNsACpjKDwABHQcACpfc9i8AAR07AAqX3FsAAR1yDwABHVsACpfeAwobcSsAAR2wBKgaGrhfAAEeBwABHhsAAR8EAAINsAAAAAQPAAEeMwABHwQAAAAEBAcAAR5QAAACC/GADwABN7wAAYAPAAErYAUrAAEefARzAAEefLoOOhhUCAAKAwABHp8ACqAgcwABHry6DeYYVAQABgMAAR7nAAqgIAIaiAIakBoavF8AAR8bAAEfLwABIWAAAg48AAAABA8AAR9TAAEhYAAAAAQEBwABH5gAAAIOQXQPAAE0EAWADwABN7wAAXAE+AT4CTsAASBMAAACBB10DwABNPwFgA8AATe8BFsAASBMeAJPNAQFdA8AATQQBYAPAAE3vAYDAAEgTwAKofwCBCMAATSZFAAABHMAASBOBAMACqJ6BCQAAAADAAE1BAD4CTsAASAkAAACC/GADwABN7wEWwABIJIEAwAKonoEKwABNQz4BPRzAAEgsLoOOhhUCAAKCwABINMACqPscwABIPC6DeYYVAQABgsAASEbAAqj7AIaiAIakBoalF8AASF3AAEhiwABMHQAAg5GGFQAAAAEDwABIbsAATB0AAAACAgLAAEh0AAAAgRthAwFfAwAAYAPAAErYAMAASIoAAACDkmADwABK2AAAXAE+Ak7AAEikwABIqwAAgchgA8AATKIBFsAASLYWwABIrS6DYIYVhpyByMAATXZFwABIwgHAAEjLwABI0QAAgd1gA8AATKIBkwEcwABI3IPAAEjWwAKp14C7AQABgsAASN7AAqmnAMAATdABi8AASObAAqnXHMAASOuDwABI5sACqdeBDQEAAZQAwABNyD4DTsAASQjAAEkOAACDGV0DhtgBXwMAAAEcwABJGBbAAEkQLoNghhWGnILRAQABg8AASRnAAqnXAMAATVVOwABJOMAASUEAAIDBXQOG2AFfAwAAAStDwABJTyEcwABJXITAAElWwAKqM4CMAQABKwDAAE38PgROwABJc8AASYUAAIOTYAPAAEyiARbAAEmHLoNhhhWGnk7AAEmowABJswAAg5RgA8AAStgBHMAASbmAwABJtcACqXpuAQABFsAAScCEwABJusACqjOC0obaAABJwABJziEcwABJ5IbAAEnSwAKqp4CMAQABFsAASecug2GGFYaeAMAATcY+AT0wwABKBx/AAEoRwABMRQEAAS4AP0nAAEpGHMAASlWHwABKSsACqseAjAEAAYHAAEpYwAKpkQDAAE38PgVOwABKhcAASooAAIDCXQOG2AFfAwAAARzAAEqShMAASozAAqozg2wAAAAAht5JwABKphzAAEqzhcAASqrAAqpugIwBAAErAMAATfw+AT0cwABK0hbAAErKLoNghhWGnIEMAgACg8AAStPAAqnXFMAAStzAAqtqCAAAwABNVj4BPRfAAEsKhcAASwHAAqpugMIUwABLEcACq2oIAIbcPRfAAEstLoNfhhUcwABLOhbAAEstLoNfhhWGnYEGAQABlADAAE3Jhp09F8AAS0gug2GGFRzAAEuEHMAAS38WwABLbC6DYYYVhp6BDQEAAZQAwABNyIChAQABasAAS4ZgA8AATKKDOADAAEy6hp49jMAAS6rAAqozFMAAS7LAAqtqCAA+Aj2NwABL08ACqm6EwABL3sACqjM9jMAAS+/AAqozFsAAS/2EwABL98ACqjOAwobcBoawF8AATCLAAEwnwABMawAAg5UAAAABA8AATDLAAExrAAAAAQEBwABMOAAAAIEbYQMBXwMAAGADwABK2AAAXAE+AT0cwABMTy6DkYYVAgACgMAATFzAAqzhKQCGpQaGsRfAAExwwABMdcAATLoAAIOWAAAAAQPAAEyAwABMugAAAAEBAcAATIYAAACBG2EDAV8DAABgA8AAStgAAFwBPgE9HMAATJ0ug5GGFQIAAoDAAEyqwAKtPyoAhqUGhrIXwABMv8AATMTAAE2IAACA5wAAAAEDwABMycAATYgAAAAAAAAAXAE+Aj0XwABM0i6DYIYVHsAATOHAAEaPAQFdA4bYAV8DAAABasAATOZgA8AATKIcAIacScAATP4cwABNEBbAAE0CLoNfhhWGnYKMAQABkwDAAE3SPgI9F8AATR0ug1+GFZOGnT0XwABNNi6DYYYVHMAATWQcwABNXxbAAE1MLoNhhhWGnoENAQABlADAAE3IgKEBAAFqwABNZmADwABMooM4AMAATLqGnj8GhqYXwABNjcAATZLAAE9mAACDZ4YVAAAAAQPAAE2bwABPZgAAAAMDA8AATZ4AACCC0l8DAAAAwABNpwAAAIIcYAPAAEyiAMAATbUAAACB3WADwABMogAAXAE+Bj0cwABNyhbAAE3CLoNghhWGnIEMAgACgsAATcvAAq6PH8AATdiG4AMBXwMAAAOAwABN6cACrnGBwABN7sACrn8cwABOABbAAE34LoNghhWGnILRAQABgsAATgHAAq6PAMAATVUAAMAATVZOwABOEsAATh4AAINwYAPAAEyiARzAAE4uFsAATiAug1+GFYadgQ0BAAGUAMAATcg9F8AATjcug1+GFYPAAE5HwAKvD4adTsAATlzAAE5jAACByGADwABMogEWwABObhbAAE5lLoNghhWGnIHIwABNdknAAE7YHMAATu8cwABO6YPAAE7dwAKvD4NxAQABlQDAAEy+gowBAAEcwABPABzAAE76hMAATvPAAq9Vg3EBAAGUAMAATL6BDQEAAYTAAE8CwAKvVQDAAE3IAMAATdI9HMAATwsug3KGFQAAAACGpz89F8AATxoug2GGFRzAAE9IHMAAT0MWwABPMC6DYYYVhp6BDQEAAZQAwABNyIChAQABasAAT0pgA8AATKKDOADAAEy6hp4GhqcXwABPa8AAT3DAAFGPAACDcoYVAAAAAQPAAE93wABRjwAAAAAAAABcAT4GTsAAT4TAAE+OAACDdGADwABMogEWwABPmRbAAE+QLoNghhWGnIHIwABNdk7AAE+pwABPswAAg3VgA8AATKIBHMAAT7+AwABPtcACsGODcQEAAZQAwABMvk7AAE/OwABP2QAAg3NdA8AATUYBWwEWwABP2y6DYIYVhpxOwABP7sAAT/kAAIN2XQPAAE1GAVsBHsAAT//AAEaPAQFdA4bYAV8DAAABgcAAUBbAArCO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TKIBkwEcn9mBn9fAAuI8gLsBAAGAn9vAAuITAMAATdABiZ/kwALiPByf5oGf5MAC4jyBDQEAAZUAwABNyD4BPRyf+C6BDAIAAiaf/gUcn/4Wn/kug6SGFYb+gtEBAAGBn//AAuI8AMAATVVfAwAAJqAKBRygChagBS6DpIYVhv6C0QEAARygDYGgC8AC4jyBDQEAAZQAwABNyADAAE1VXwMBAACHlAaHVBigIKAlobEAAIPmhhUAAAABA6AsobEAAAAEBASgLwAAIILSXwMAAACgNgAAICJfAwEAAKBBAAAAg+dgA8AATKIAoFIAAACDZmADwABMogAAXAE+AUmgWxygaRagXy6DpYYVhv+AjAEAARagchagbC6DpIYVhv6ByMAATXYAwABNxj4CPRyggi6D4YYVAAAAAIeNPRygly6BDAIAAoCgmMAC4w2BoJ/AAuMZAIeUPgZAIhygwpSBWwEAAYKgxcAC4yQAwABN0QAcoOCCoNTAAuMkgLsBAAEcoOWUg3EBAAE3IADAAEy+AMAATdCgwKDrAE6g/qEEAAGB3WADwABMogEcoRAWoQYug6WGFYb/g8UBAAGUAMAATL9AHKE5HKEqhKEkwALj4oChAQABgqEswALjJADAAEy6gIwBAAGTAMAATcahI6E9AD0coUwWoUYug4OGFYb8gQwCAAKDoU3AAuMyHKFegqFSwALjJICmAQABhKFgwALj4gDAAEy7AMAATVY9HKFyFqFtLoOkhhWG/oEMAgACNaFzAAABAGADwABMogEWoXMug6WGFYb/NaFzAAABAGADwABMogEXoXMug6WGFRyhfIWhc8AC5IaBDQEAAZQAwABNyIcGhaFzwALkhoChgsAC4w0AwABNVj0coZIWoY0ug6SGFYb+gQwCAAI1oZMAAAEAYAPAAEyiARahky6DpYYVhv81oZMAAAEAYAPAAEyiARehky6DpYYVHKGchaGTwALk8YENAQABlADAAE3IhwaFoZPAAuTxgaGiwALjGQDAAE1WBodVGKIwojSlNgAAg+iGFQAAAAEDokulNgAAAAQEBKJOAAAggtJfAwAAAKJXAAAAg8FgA8AATKIAomUAAACD52ADwABMogCidgAAAIPDYAPAAEyiAABgA8AATKIBPgdOooyilQABg8hgA8AATKIBHKKcg6KXwALlj4EGAQABlADAAE3JTqKvoroAAYPpYAPAAEyiARyiwYOivMAC5Y+DxQEAAZQAwABMv06iz6LRAACDZmADwABMogEeot2HFQIAAoGi6cAC5XOEovPAAuWoAE6jBqMTAACD6mADwABMogEcoxWUg+sAAAAAwABMxU6jIaMmAACD7GADwABMogEcoy4Woygug4OGFYb8gtEBAAGGoy/AAuXyAMAATVVDozchHKNDFKM+wALmNwgAgIwBAAFqo1BgA8AATKIaAMAATcY+A0mjZhyjbxSjasAC5jcIAICMAQABaqN8YAPAAEyiFADAAE3GPgFJo5Uco6aHo5nAAuYZgLsBAAGTAMAATdA+AT2Po7fAAuYZhqPGwALl8j8+Ak6j9KP6AAGDGWADwABMogEcpAiCo/zAAuWBgKMBAAEUpArAAuY3CAAAwABMvEmkGBykIhSkHMAC5twJAIC7AQABhaQkwALlzQDAAE3QPgJOpEakSAABg81gA8AATKIBHKRQFKRKwALm3AkAg3EBAAGUAMAATL5JpGAcpGQugpiGFQIAAoCkbMAC5WccpHYWpHEug6SGFYb+gtEBAAEUpHfAAucrCgAAwABNVQCHiz4BSqSKARykkxSkkcAC5ysKAIENAQABlADAAE3IPz89jqS8wALl8h6kyocWAgAChqTVwALl8oSk2MAC5agAPRWk6cAC5jcIHKT2FqTwLoODhhWG/ILRAQABhqT3wALl8gDAAE1VSqUFASMcpRmHpQzAAuYZgV4BAAGTAMAATdMcpSCHpSHAAuYZg+sAAAAAwABMxRylMIalMcAC5fKD6wAAAADAAEzFAWADwABMogaHWBilO6VJpskDAIEMAAAAAQOlTKbJAAAAAgICpU8AACCC0l8DAAAApVYAACAiXwMBAAAAXAE+BU6lbaVyAAGDw2ADwABMogEWpXsWpXQug4OGFYb8gcjAAE12TqWRpZoAAYPBYAPAAEyiARylnC6DeYYVAQABgKWmwALoVACHik6luqXGAAGD52ADwABMogEepdKHFAMAA4Ol38AC6JQWpekug6OGFYb9gqX0wALocQBOpgmmCwABg81gA8AATKIBHKYNLoPohhUEAASApiXAAuhUg6YqwALolISmNMAC6LmCpkHAAuhxAIeRSaZMHKZShaZQwALo6oKMAQABkwDAAE3SPgE9HKZkFqZfLoOkhhWG/oEMAgAChaZlwALo6oGmasAC6GAAwABNVj4CTqaOppAAAYNmYAPAAEyiARymkoWmk8AC6OqD6wAAAADAAEzFPRymnC6D5oYVBAAEgKakwALoVIGmqcAC6GCEprDAAui5hqa9wALpZgCHkAaHWRimzqbQqUQAAINoAAAAAQOm26lEAAAAAgICpt4AACCC0l8DAAAApuUAACCDaWEDAF8DAQAAAF8DAQABPgpOpwGnBgABg8NgA8AATKIBFqcPFqcILoODhhWG/IHIwABNdk6nJacuAAGDwWADwABMogEcpzAug3mGFQEAAYCnOsAC6dEAh4pOp06nWgABg+dgA8AATKIBHqdmhxQDAAODp3PAAuoYFqd9LoOjhhWG/YKniMAC6fUATqedp58AAYPNYAPAAEyiARynoS6D6IYVBAAEgKe5wALp0YOnvsAC6hiEp8jAAuo9gqfVwALp9QCHkUmn4Byn5oWn5MAC6m6CjAEAAZMAwABN0j4BSqfzASan8wUcp/8Wp/oug6SGFYb+gtEBAAGFqADAAupuAMAATVVfAwEAP06oQ6hLAACD0F0DwABNRgFbARaoTS6DpIYVhv5OqFyoaAAAg9FgA8AATKIBFqhqLoPOhhWHnU6oe6iBAAAiXwMBAAEcqIuBqIPAAundbgAAAAAASaiTHKiXLoPPhhUCAAKGqKjAAurth6ixwALrCQCHjD4BPRyoyy6BDAIAAoCozMAC6dEUqNPAAusjCAAAh5Q+Ak6o96j5AAGDZmADwABMogEcqPuFqPzAAupug+sAAAAAwABMxT0cqQUug+aGFQQABICpDcAC6dEUqRLAAusjCACEqRnAAuo9FKkmwALrgAkAAIeQSqk0ARSpO8AC6yMIAAaHWhipSalLrPUAAINsAAAAAQOpUaz1AAAAAQEBqVkAAACC0mADwABN7wAAXwMBAAE+CU6pbqlzAAGDw2ADwABMogEWqXwWqXUug4OGFYb8gcjAAE12TqmSqZsAAYPIYAPAAEyiARypooGpncAC7BOBBgEAAZQAwABNyU6ptanAAAGD6WADwABMogEcqceBqcLAAuwTg8UBAAGUAMAATL9Oqdup5AABg8FgA8AATKIBHKnmLoN5hhUBAAGAqfDAAuv8AIeKTqoEqhAAAYPnYAPAAEyiAR6qHIcUAwADhKopwALsgBaqMy6Do4YVhv2Bqj7AAuwTAE6qTapPAACDZmADwABMogEeqluHFQIAAoSqZ8AC7ICCqnHAAuw2AE6qhKqJAACD7GADwABMogEcqpEWqosug4OGFYb8gtEBAAGGqpLAAuzWAMAATVVDqpohHKqmh6qhwALs/YCMAQABaqqzYAPAAEyiGgDAAE3GPgNJqskhHKrSh6rNwALs/YCMAQABaqrfYAPAAEyiFADAAE3GPgJOqwKrCAABgxlgA8AATKIBHKsWhasKwALspYCjAQABh6sYwALs/QDAAEy8SasmHKswFKsqwALtcwgAgLsBAAGDqzLAAuxbAMAATdA+Ak6rVKtWAAGDzWADwABMogEcq14Uq1jAAu1zCACDcQEAAZQAwABMvkmrbhyrci6CmIYVAgACgKt6wALr/ByrhBarfy6DpIYVhv6C0QEAARSrhcAC7cAJAADAAE1VAIeLPgY9HKueFquYLoODhhWG/IEMAgAChqufwALs1mqrrmADwABMohQAwABNVj0eq9OHGAIAAhar4S6DpIYVhv4Uq+jAAu3ACQAATqv6rAAAACJfAwEAASar+gUcrAcWrAIug6SGFYb+gtEBAAEcrAoUrAjAAu3ACQCBDQEAAZQAwABNyADAAE1VXwMBAD0erCaHGAIAAhasNC6DpIYVhv4crD0UrDvAAu3ACQCBDQEAAZQAwABNyAA9F6xRLoOmhhUcrE8WrFEug6aGFYcAgQ0BAAGUAMAATciHB0qsawEUrHLAAu5nCgA/Pz89jqydwALs1h6sq4cWAgAChqy2wALs1oKsucAC7DYAPY+sysAC7P0crNcWrNEug4OGFYb8gtEBAAGGrNjAAuzWAMAATVVKrOYBKwaHVhitOK0/sCcAAIPthhUAAAABA61OsCcAAAABAQGtVgAAAILSYAPAAE3vAABgA8AATe8BPglOrWutcAABg8NgA8AATKIBFq15Fq1yLoODhhWG/IHIwABNdk6tj62YAAGDyGADwABMogEcrZ+BrZrAAu+JgQYBAAGUAMAATclOrbKtvQABg+lgA8AATKIBHK3Ega2/wALviYPFAQABlADAAEy/Tq3YreEAAYPBYAPAAEyiARyt4y6DeYYVAQABgK3twALvcACHik6uAa4NAAGD52ADwABMogEerhmHFAMAA4SuJsAC7/YWrjAug6OGFYb9ga47wALviQBOrkquTAAAg2ZgA8AA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g6WGFYb/g8UBAAGUAMAATL9AHKE5HKEqhKEkwANdPoChAQABgqEswANcgADAAEy6gIwBAAGTAMAATcahI6E9AD0coUwWoUYug4OGFYb8gQwCAAKDoU3AA1yOHKFegqFSwANcgICmAQABhKFgwANdPgDAAEy7AMAATVY9HKFyFqFtLoOkhhWG/oEMAgACNaFzAAABAGADwABMogEWoXMug6WGFYb/NaFzAAABAGADwABMogEXoXMug6WGFRyhfIWhc8ADXeKBDQEAAZQAwABNyIcGhaFzwANd4oChgsADXGkAwABNVj0coZIWoY0ug6SGFYb+gQwCAAI1oZMAAAEAYAPAAEyiARahky6DpYYVhv81oZMAAAEAYAPAAEyiARehky6DpYYVHKGchaGTwANeTYENAQABlADAAE3IhwaFoZPAA15NgaGiwANcdQDAAE1WBoglGKIwojSlNgAAg+iGFQAAAAEDokulNgAAAAQEBKJOAAAggtJfAwAAAKJXAAAAg8FgA8AATKIAomUAAACD52ADwABMogCidgAAAIPDYAPAAEyiAABgA8AATKIBPgdOooyilQABg8hgA8AATKIBHKKcg6KXwANe64EGAQABlADAAE3JTqKvoroAAYPpYAPAAEyiARyiwYOivMADXuuDxQEAAZQAwABMv06iz6LRAACDZmADwABMogEeot2HFQIAAoGi6cADXs+EovPAA18EAE6jBqMTAACD6mADwABMogEcoxWUg+sAAAAAwABMxU6jIaMmAACD7GADwABMogEcoy4Woygug4OGFYb8gtEBAAGGoy/AA19OAMAATVVDozchHKNDFKM+wANfkwgAgIwBAAFqo1BgA8AATKIaAMAATcY+A0mjZhyjbxSjasADX5MIAICMAQABaqN8YAPAAEyiFADAAE3GPgFJo5Uco6aHo5nAA191gLsBAAGTAMAATdA+AT2Po7fAA191hqPGwANfTj8+Ak6j9KP6AAGDGWADwABMogEcpAiCo/zAA17dgKMBAAEUpArAA1+TCAAAwABMvEmkGBykIhSkHMADYDgJAIC7AQABhaQkwANfKQDAAE3QPgJOpEakSAABg81gA8AATKIBHKRQFKRKwANgOAkAg3EBAAGUAMAATL5JpGAcpGQugpiGFQIAAoCkbMADXsMcpHYWpHEug6SGFYb+gtEBAAEUpHfAA2CHCgAAwABNVQCHiz4BSqSKARykkxSkkcADYIcKAIENAQABlADAAE3IPz89jqS8wANfTh6kyocWAgAChqTVwANfToSk2MADXwQAPRWk6cADX5MIHKT2FqTwLoODhhWG/ILRAQABhqT3wANfTgDAAE1VSqUFASMcpRmHpQzAA191gV4BAAGTAMAATdMcpSCHpSHAA191g+sAAAAAwABMxRylMIalMcADX06D6wAAAADAAEzFAWADwABMogaIKBilO6VJpskDAIEMAAAAAQOlTKbJAAAAAgICpU8AACCC0l8DAAAApVYAACAiXwMBAAAAXAE+BU6lbaVyAAGDw2ADwABMogEWpXsWpXQug4OGFYb8gcjAAE12TqWRpZoAAYPBYAPAAEyiARylnC6DeYYVAQABgKWmwANhsACHik6luqXGAAGD52ADwABMogEepdKHFAMAA4Ol38ADYfAWpekug6OGFYb9gqX0wANhzQBOpgmmCwABg81gA8AATKIBHKYNLoPohhUEAASApiXAA2Gwg6YqwANh8ISmNMADYhWCpkHAA2HNAIeRSaZMHKZShaZQwANiRoKMAQABkwDAAE3SPgE9HKZkFqZfLoOkhhWG/oEMAgAChaZlwANiRoGmasADYbwAwABNVj4CTqaOppAAAYNmYAPAAEyiARymkoWmk8ADYkaD6wAAAADAAEzFPRymnC6D5oYVBAAEgKakwANhsIGmqcADYbyEprDAA2IVhqa9wANiwgCHkAaIKRimzqbQqUQAAINoAAAAAQOm26lEAAAAAgICpt4AACCC0l8DAAAApuUAACCDaWEDAF8DAQAAAF8DAQABPgpOpwGnBgABg8NgA8AATKIBFqcPFqcILoODhhWG/IHIwABNdk6nJacuAAGDwWADwABMogEcpzAug3mGFQEAAYCnOsADYy0Ah4pOp06nWgABg+dgA8AATKIBHqdmhxQDAAODp3PAA2N0Fqd9LoOjhhWG/YKniMADY1EATqedp58AAYPNYAPAAEyiARynoS6D6IYVBAAEgKe5wANjLYOnvsADY3SEp8jAA2OZgqfVwANjUQCHkUmn4Byn5oWn5MADY8qCjAEAAZMAwABN0j4BSqfzASan8wUcp/8Wp/oug6SGFYb+gtEBAAGFqADAA2PKAMAATVVfAwEAP06oQ6hLAACD0F0DwABNRgFbARaoTS6DpIYVhv5OqFyoaAAAg9FgA8AATKIBFqhqLoPOhhWHnU6oe6iBAAAiXwMBAAEcqIuBqIPAA2M5bgAAAAAASaiTHKiXLoPPhhUCAAKGqKjAA2RJh6ixwANkZQCHjD4BPRyoyy6BDAIAAoCozMADYy0UqNPAA2R/CAAAh5Q+Ak6o96j5AAGDZmADwABMogEcqPuFqPzAA2PKg+sAAAAAwABMxT0cqQUug+aGFQQABICpDcADYy0UqRLAA2R/CACEqRnAA2OZFKkmwANk3AkAAIeQSqk0ARSpO8ADZH8IAAaIKhipSalLrPUAAINsAAAAAQOpUaz1AAAAAQEBqVkAAACC0mADwABN7wAAXwMBAAE+CU6pbqlzAAGDw2ADwABMogEWqXwWqXUug4OGFYb8gcjAAE12TqmSqZsAAYPIYAPAAEyiARypooGpncADZW+BBgEAAZQAwABNyU6ptanAAAGD6WADwABMogEcqceBqcLAA2Vvg8UBAAGUAMAATL9Oqdup5AABg8FgA8AATKIBHKnmLoN5hhUBAAGAqfDAA2VYAIeKTqoEqhAAAYPnYAPAAEyiAR6qHIcUAwADhKopwANl3BaqMy6Do4YVhv2Bqj7AA2VvAE6qTapPAACDZmADwABMogEeqluHFQIAAoSqZ8ADZdyCqnHAA2WSAE6qhKqJAACD7GADwABMogEcqpEWqosug4OGFYb8gtEBAAGGqpLAA2YyAMAATVVDqpohHKqmh6qhwANmWYCMAQABaqqzYAPAAEyiGgDAAE3GPgNJqskhHKrSh6rNwANmWYCMAQABaqrfYAPAAEyiFADAAE3GPgJOqwKrCAABgxlgA8AATKIBHKsWhasKwANmAYCjAQABh6sYwANmWQDAAEy8SasmHKswFKsqwANmzwgAgLsBAAGDqzLAA2W3AMAATdA+Ak6rVKtWAAGDzWADwABMogEcq14Uq1jAA2bPCACDcQEAAZQAwABMvkmrbhyrci6CmIYVAgACgKt6wANlWByrhBarfy6DpIYVhv6C0QEAARSrhcADZxwJAADAAE1VAIeLPgY9HKueFquYLoODhhWG/IEMAgAChqufwANmMmqrrmADwABMohQAwABNVj0eq9OHGAIAAhar4S6DpIYVhv4Uq+jAA2ccCQAATqv6rAAAACJfAwEAASar+gUcrAcWrAIug6SGFYb+gtEBAAEcrAoUrAjAA2ccCQCBDQEAAZQAwABNyADAAE1VXwMBAD0erCaHGAIAAhasNC6DpIYVhv4crD0UrDvAA2ccCQCBDQEAAZQAwABNyAA9F6xRLoOmhhUcrE8WrFEug6aGFYcAgQ0BAAGUAMAATciHB0qsawEUrHLAA2fDCgA/Pz89jqydwANmMh6sq4cWAgAChqy2wANmMoKsucADZZIAPY+sysADZlkcrNcWrNEug4OGFYb8gtEBAAGGrNjAA2YyAMAATVVKrOYBKwaIJhitOK0/sCcAAIPthhUAAAABA61OsCcAAAABAQGtVgAAAILSYAPAAE3vAABgA8AATe8BPglOrWutcAABg8NgA8AATKIBFq15Fq1yLoODhhWG/IHIwABNdk6tj62YAAGDyGADwABMogEcrZ+BrZrAA2jlgQYBAAGUAMAATclOrbKtvQABg+lgA8AATKIBHK3Ega2/wANo5YPFAQABlADAAEy/Tq3YreEAAYPBYAPAAEyiARyt4y6DeYYVAQABgK3twANozACHik6uAa4NAAGD52ADwABMogEerhmHFAMAA4SuJsADaVIWrjAug6OGFYb9ga47wANo5QBOrkquTAAAg2ZgA8AATKIBHq5YhxUCAAKErmTAA2lSgq5uwANpCABOroGuhgAAg+xgA8AATKIBHK6OFq6ILoODhhWG/ILRAQABhq6PwANpqADAAE1VQ66XIRyuo4eunsADac+AjAEAAWqusGADwABMohoAwABNxj4DSa7GIRyuz4euysADac+AjAEAAWqu3GADwABMohQAwABNxj4CTq7/rwUAAYMZYAPAAEyiARyvE4WvB8ADaXeAowEAAYevFcADac8AwABMvEmvIxyvLRSvJ8ADakUIAIC7AQABg68vwANpLQDAAE3QPgJOr1GvUwABg81gA8AATKIBHK9bFK9VwANqRQgAg3EBAAGUAMAATL5Jr2scr28ugpiGFQIAAoCvd8ADaMwcr4EWr3wug6SGFYb+gtEBAAEUr4LAA2qSCQAAwABNVQCHiz4BSq+VARyvoRavnC6DpIYVhv6C0QEAARyvpBSvosADapIJAIENAQABlADAAE3IAMAATVU/Pz89jq/OwANpqB6v3IcWAgAChq/nwANpqIKv6sADaQgAPY+v+8ADac8csAgWsAIug4OGFYb8gtEBAAGGsAnAA2moAMAATVVKsBcBFrAeLoOkhhWG/gaIKxiwLLAxsHMAAILpAAAAAQOwPLBzAAAAAQEBsEQAAACC0mADwABN7wAAYAPAAErYAUqwTAEhHrBNwABGdQIAAhawVy6DpIYVhv4csF4ug+2GFQEAAYCwbsADa5cAh5IABogsGLB4sIOw+wMAgtEAAAABA7CFsPsAAAABAQGwjQAAAILSYAPAAE3vAABfAwEAAT4CTrCcsJ4AAIGKYAPAAE3vARywoC6D7YYVAQABgLCwwANr+QCHkkqwugEjHrDBwABGdQIAAhawyy6DpIYVhv6BsNLAA2wQACsesN6TzQEBXwMBAAGBsPXAA2wQAAFfAwEABogtGLEAsQWx3AAAg2UAAAABA7ESsdwAAAABAQGxGgAAACJgA8AATe8AAGADwABK2AE+Aj4CTrE1AAAAgQddA8AATT8BXwMBAAEWsTUeAJPNAQFdA8AATQQBXwMBAAEWsTUugQGHogCBCMAATSZFAAABHLE1gQDAA2ymgQkAAAAAwABNQQA+Ak6xMAAAAIGKXwMBAAEWsT2BAMADbKaBCsAATUM+AUmxkxyxmYKxl8ADbPiAjAEAAYCxnMADbIwAwABN/D4BSrGtASk/SrHMASoGiC4YseGx5rKcAACBEgAAAAEDse2ynAAAAAEBAbHzAAAAUGEDAl8DAABfAwEAXAAAXAE+A06yELITAACD7l0DwABNPwFfAwAAARayGhayFS6DY4ehgQjAAE0mTrIssi8AAIPvXQPAAE0/AV8DAQABFrI4FrIxLoEBh6KBCMAATSZDskYcslCBsk3AA212gQkAAAAAwABNQT4CPRyyZ4KyZMADbZyBCQAAAADAAE1BPRyyeoCyecADbV1uAgACFrJ+gbJ7wANtdoEKwABNQxayioKyh8ADbZyBCsAATUMAAAaINRiyobKxsvUBAINjAAAAAQOytrL1AAAAAAAAAF0DwABNBAFfAwAAAUqyvwEfssOIagUBXwMAAAUuFrLdLoOkhhWG/hay5C6DpYYVhv8csu+Vg+sAAAAAwABMxZUABog2GLL5swmzTwEAgQEAAAABA7MQs08AAAAAAAAAXQPAAE0EAV8DAQABSrMZAR+zHYhqBQFfAwEABS4Wszcug6SGFYb+FrM+LoOlhhWG/xyzSZSD6wAAAADAAEzFlQAAAANV3QADVgwAA1ZFAANWbAADVrEAA1cJAANXSAADV3oAA1hwAANYxgADWt4AA1xKAANepAADYZMAA2MQAANlOwADaK0AA2t6AANr3AADbG8AA21AAANuIAADbn8AA27eAAAAFwKINxi0hLSKt4I3g/sAAgAABINaYAPAAE3vAVsAAASDXWADwABN7wFbAV0DiBkCXwMAAF8DAQAAAWADhwoEBIg8GI8Hjx4Gg7iGFQBgA8AATKIBao8dYAPAAEyiTASIPRiPM49nBoO5hhUAYAPAAEyiAWqPS2ADwABMolQEiD4Yj8KP0gaDuoYVAGADwABMogFqj9FgA8AATKIaBIg/GI/nj/gGg7uGFQBgA8AATKIBao/3YAPAAEyiFAEFiDkAAAAABAAAAwAAAAAAAQEBAAAAAIOnYAPAAEyiAABdA4g3Al8DAABfAwEAAT8BCQAAiBsBAAGAAMADcBEACQaIQhiQpJCvkW0AAYO8hhUAAAABA5DDkW0AAAABAQGQyAAAAIO9YAPAAEyiAABgA8AATKIBPgJOkN2Q5wAAg75gA8AATKIBHJD9FpDzgJDpwANwXoO/wABM2IEGAQABlQDAAE3JSpEGASMakRaTvhyRQByRK5SDcQEAARyRMjcggQYBAAGBkTTAA3B3AMAATckAwABMvoEGAQABlADAAE3JHJFmHJFRlINxAQABHJFYNx6BBgEAAYGRWsADcHcAwABNyQDAAEy+gQYBAAGUAMAATckBYAPAAEyiBohDGJFykX2SbgABg8CGFQAAAAEDkYmSbgAAAAMDA5GOAAAAg8FgA8AATKIAkZwAAACDwmADwABMogCRqgAAAIPDYAPAAEyiAABgA8AATKIBPgJOkcCRywABg8RgA8AATKIBHJHWgJHNwANxOIChAQABgZHYwANxRgDAAEy6SpIpASMckjyDkjHAA3FtgIwBAAGTAMAATcYckkqCkkXAA3FUg8UBAAGUAMAATL8ckl2DklLAA3Ftg8YBAAEckmWCkmDAA3FUg8UBAAGUAMAATL8AwABNygFgA8AATKIGiEQYkoiSk5NUAAGDx4YVAAAAAQOSnpNUAAAAAgICkqMAAACDwWADwABMogCSsQAAAIPIYAPAAEyiAABgA8AATKIBPgJOksuSzQABg2ZgA8AATKIBHJLYgJLPwANyFYChAQABgZLawANyIwDAAEy6SpMwARyTRhyTQRyTO4KTOcADcjyDcQEAAZQAwABMvoENAQABgpNDwANyPADAAE3IgKEBAAGBk0jAA3IjAMAATLoGiEUYk1mTZJOZAAGDyYYVAAAAAQOTbpOZAAAAAgICk3MAAACDZmADwABMogCTegAAAIPIYAPAAEyiAABgA8AATKIBSpOHARyTjxyTioCTiMADcsaBDQEAAZQAwABNyIChAQABgZORwANy1ADAAEy6BohGGJPXk+OUMAABg8qGFQAAAAEDk+2UMAAAAAICApPzAAAAO10DwABNRgFbAJQAAAAAg8tgA8AATe8AAGADwABK2AFKlBUBHpQVwABGdQIAAoGUH8ADc0WAlCvAA3M2AAaIRxiUNJRAlHgAAYPMhhUAAAABA5RNlHgAAAACAgKUUwAAADtdA8AATUYBWwCUXQAAAIPNYAPAAEyiAABcAT4BPRyUaoCUZsADc5eBDAIAAoGUa8ADc6aAlHDAA3OXAMAATVYGiEsYlPqVApUnAQCDzoYVAAAAAQOVDJUnAAAAAAAAAGADwABMogFKlQ8BHJUZFpUPLoOlhhWG/4ENAQABFpUbLoOmhhWHAADAAE3IBohIGJUrlTCVoQAAg8+GFQAAAAEDlUCVoQAAAAICApVGAAAAg9BdA8AATUYBWwCVUwAAAIPRYAPAAEyiAABgA8AAStgBSpVpASIhHpVqwABGdQIAAhaVdC6DpIYVhv6AlXvAA3RHAAEhHJWSFpWILoPOhhWHHICMAQABgZWVwAN0VwDAAE3GBohMGJWmla6VtAECgcgAAAABA5W0lbQAAAAAAAAAYAPAAEyiAAAAA3A/AANxGQADcfYAA3KnAANzFwADc3gAA3PcAAN0KAADdK8AA3TUAAAACQKITRi0hLSKt4IDg/wAAgAABINaYAPAAE3vAVsAAASDXWADwABN7wFbAV0DiDcCXwMAAF8DAQAAAV0DiVUCXwMAAF8DAQADBIhQGLUutTcJg5yGFQBbAASIURi1QbVICYOdhhUAWwAEiFIYtVK1WwmDeoYVAFsAAQWIWxi2w7bDt4AAAAADtt63gAAAAAMDA7bkAAAEg5xbALb0AAAEg51bALb9AAAAg3tbAABdA4hNAl8DAABfAwEAAT8ECAGIUIAAwAN1kQgBiFGBAMADdZoIAIhSIyEctyWCtxzAA3WjgIwBAAErAMAATfyCtzDAA3WjFrdOH7c/jEcAAV8DAAAAAIEbjEUBWwkAt1yIOQEAAWq3bGADwABMolQABQaIVRi1qbWttccAAIN5hhUAAAABA7W2tccAAAABAQG1twAAAGlbAABgA8AATKIBSrW9ASa1vQUctb0ug52GFQEAAYC1xcADdj0AiFFgA8AATKIGiFYYtcu10LX0AACCmIYVAAAAAQO117X0AAAAAgICtdgAAACDiFsAtdwAAACDiVsAAGADwABK2AFKteMBJrXjBRy14y6DnIYVAgACgLXtwAN2j4G18cADdpgAiFBgA8AAStgGiFcYtfm1/rZCAACC6QAAAAEDtgm2QgAAAAEBAbYRAAAAg/1gA8AATe8AAGADwABK2AFKthcBIya2FwUcthcug3qGFQEAAYC2IcADdvAAiFJgA8AAStgdtiyC6QEAAYC2OMADdvAAh5cqAWADwABK2AaIWBi2RrZRtn8DAILRAAAAAQO2U7Z/AAAAAQEBtlsAAACD/WADwABN7wAAXwMBAAFKtmEBIya2YQUctmEug3qGFQEAAYC2a8ADd2EAiFJgA8AAStgdtnWC0QEAAYC2dsADd2EAh5grAV8DAQAGiFkYtoO2hba+AACDbAAAAAEDtou2vgAAAAEBAbaTAAAAg/1gA8AATe8AAF8DAQABSraZASMmtpkFHLaZLoN6hhUBAAGAtqPAA3fOAIhSYAPAAErYHbaug2wBAAGAtrXAA3fOAIeWKwFfAwEAAAADdh4AA3ZwAAN20wADd0QAA3exAAN4HgAAAAUCiFwYt/q4ALm5A4P+AAEAAASBZ2ADwABN7wFbAV0DwABNBAFfAwAAAAAFBIhfGLg8uEIJg/+GFQBgA4cKAASIYBi4UbhWCYOkhhUAXQPAAE1GAVsABIhhGLhkuGgJhACGFQBgA8AATKIABIhiGLh2uH0JhAGGFQBgA8AATKIABIhjGLiLuJAJhAKGFQBgA8AATKIAAQWIahi4lbiVuOoAAAADuKW46gAAAAUFBbiyAAAEg/9gA4cKALi/AAAEg6RdA8AATUYBWwC4ywAABIQAYAPAAEyiALjWAAAEhAFgA8AATKIAuOQAAASEAmADwABMogAAXQOIXAFfAwAAAT8GCAGIX4AAwAN46AgBiGCBAMADePQIAYhhggDAA3kECAGIYoMAwAN5EggBiGOEAMADeSAJAbiVwABNLgAAAAAEBohlGLjvuP+5TQEAgQgAAAABA7kIuU0AAAAAAAAAXQPAAE0/AV8DAAABSrkRAR+5FYh4BQFfAwAABRa5KS6D/4YViF8WuTEug6SGFYhgFrk4LoQAhhWIYRa5Pi6EAYYViGIWuUcuhAKGFYhjAAaIZhi5UrlauXEBAIHIAAAAAQO5YblxAAAAAAAAAGADwABMogFKuWQBFrlrFrlkLoP/hhWIX4HIhx0GiGcYuXW5frmUAQCA4wAAAAEDuYa5lAAAAAAAAABgA8AAStgBSrmJARy5kBa5iS6ByIhmgIwBAAGTAMAATcYGiGgYuZi5obm3AQCDYgAAAAEDuay5twAAAAAAAABgA8AAStgBSrmvASEWubAugOOIZwAAA3l6AAN55wADeiEAA3pgAAN6kgAAAAQCiGsYuby5wryoA4QDAAEAAASBZ2ADwABN7wFbAWADwABN7wABXQPAAE0/AV8DAAAHBIhuGLoBugcJg/+GFQBgA4cKAASIbxi6FrobCYOkhhUAXQPAAE1GAVsABIhwGLopui0JhACGFQBgA8AATKIABIhxGLo1ujwYhAGGFQBgA8AATKIABIhyGLpKuk8JhAKGFQBgA8AATKIABIhzGLpdumYJg86GFQBgA8AATKIABIh0GLpsunNYgQoAXwMAAAErAQWIeBi6eLp4uw0AAAADuoi7DQAAAAUFBbqaAAAAhARgA4cKALqmAAAEg6RdA8AATUYBWwC6sgAABIQAYAPAAEyiALq9AAAEhAFgA8AATKIAussAAASEAmADwABMogAAXQOIawFfAwAAAT8HCAGIb4EAwAN7kQgBiHCCAMADe6EIAYhxgwDAA3uvCAGIcoQAwAN7vQgAiG6AuuPAA3uFCACIcxa7BIC6/sADe4WDzoYVhxwJAbp4wABOBQAAAAABBoh2GLsSuxe8pgAAgQkAAAABA7sfvKYAAAAAAAAAYAPAAErYAT4DSbsoHLszFrssLoP/hhWIboPPhhUCAAIWu0Qug6SGFYhvFrtLLoPOhhWIcwCHGT4BPTC7Xx+7acAATEUBAAEWu4Uug/+GFYhuAD9Eu5g+AT0Xu6MuhAGGFRy7qxa7oy6EAYYViHGBDQEAARa7ri6EAoYViHIAwABNyIhxIhy7yha7wi6EAYYViHGAuwEAARa7zC6EAIYViHAAwABN0AAeu96HFwIAAha76S6DpIYViG8cu/UWu/Aug6SGFYhvgtEBAAEWu/YuhAGGFYhxAMAATVUASbwGHLwSFrwKLoQBhhWIcYC7AQABFrwULoQAhhWIcADAAE3QPgI9F7wiLoEKHrwsk80BAV8DAAABHLxIFrxDLoOkhhWIb4LRAQABFrxJLoQBhhWIcQDAAE1VAIh0SrxaASk+Aj0XvHougQoriHRKvJABKgAAA3wsAAN9mAAAAAECiHkYvOa87MAAUGE3hAUAAAFgA4bvAAFgA4cKBASIfhiPB48eBoO4hhUAYAPAAEyiAWqPHWADwABMokwEiH8YjzOPZwaDuYYVAGADwABMogFqj0tgA8AATKJUBIiAGI/Cj9IGg7qGFQBgA8AATKIBao/RYAPAAEyiGgSIgRiP54/4BoO7hhUAYAPAAEyiAWqP92ADwABMohQBBYh7AAAAAAQAAAMAAAAAAAEBAQAAAACDp2ADwABMogAAYAOIeQE/AQkAAIb4AQABgADAA35SAAkGiIQYkKSQr5FtAAGDvIYVAAAAAQOQw5FtAAAAAQEBkMgAAACDvWADwABMogAAYAPAAEyiAT4CTpDdkOcAAIO+YAPAAEyiARyQ/RaQ84CQ6cADfpaDv8AATNiBBgEAAZUAwABNyUqRBgEjGpEWk74ckUAckSuUg3EBAAEckTI3IIEGAQABgZE0wAN+rwDAAE3JAMAATL6BBgEAAZQAwABNyRyRZhyRUZSDcQEAARyRWDcegQYBAAGBkVrAA36vAMAATckAwABMvoEGAQABlADAAE3JAWADwABMogaIhRiRcpF9km4AAYPAhhUAAAABA5GJkm4AAAADAwORjgAAAIPBYAPAAEyiAJGcAAAAg8JgA8AATKIAkaoAAACDw2ADwABMogAAYAPAAEyiAT4CTpHAkcsAAYPEYAPAAEyiARyR1oCRzcADf3CAoQEAAYGR2MADf34AwABMukqSKQEjHJI8g5IxwAN/pYCMAQABkwDAAE3GHJJKgpJFwAN/jIPFAQABlADAAEy/HJJdg5JSwAN/pYPGAQABHJJlgpJgwAN/jIPFAQABlADAAEy/AMAATcoBYAPAAEyiBoiGGJKIkpOTVAABg8eGFQAAAAEDkp6TVAAAAAICApKjAAAAg8FgA8AATKIAkrEAAACDyGADwABMogAAYAPAAEyiAT4CTpLLks0AAYNmYAPAAEyiARyS2ICSz8ADgE2AoQEAAYGS2sADgFsAwABMukqTMAEck0Yck0EckzuCkznAA4B0g3EBAAGUAMAATL6BDQEAAYKTQ8ADgHQAwABNyIChAQABgZNIwAOAWwDAAEy6BoiHGJNZk2STmQABg8mGFQAAAAEDk26TmQAAAAICApNzAAAAg2ZgA8AATKIAk3oAAACDyGADwABMogAAYAPAAEyiAUqThwEck48ck4qAk4jAA4D+gQ0BAAGUAMAATciAoQEAAYGTkcADgQwAwABMugaIiBiT15PjlDAAAYPKhhUAAAABA5PtlDAAAAACAgKT8wAAADtdA8AATUYBWwCUAAAAAIPLYAPAAE3vAABgA8AAStgBSpQVAR6UFcAARnUCAAKBlB/AA4F9gJQrwAOBbgAGiIkYlDSUQJR4AAGDzIYVAAAAAQOUTZR4AAAAAgIClFMAAAA7XQPAAE1GAVsAlF0AAACDzWADwABMogAAXAE+AT0clGqAlGbAA4HPgQwCAAKBlGvAA4HegJRwwAOBzwDAAE1WBoiNGJT6lQKVJwEAg86GFQAAAAEDlQyVJwAAAAAAAABgA8AATKIBSpUPARyVGRaVDy6DpYYVhv+BDQEAARaVGy6DpoYVhwAAwABNyAaIihiVK5UwlaEAAIPPhhUAAAABA5VAlaEAAAACAgKVRgAAAIPQXQPAAE1GAVsAlVMAAACD0WADwABMogAAYAPAAErYAUqVaQEiIR6VasAARnUCAAIWlXQug6SGFYb+gJV7wAOCfwABIRyVkhaViC6DzoYVhxyAjAEAAYGVlcADgo8AwABNxgaIjhiVppWulbQBAoHIAAAAAQOVtJW0AAAAAAAAAGADwABMogAAAAN+dwADf1EAA4AuAAOA3wADgU8AA4GwAAOCFAADgmAAA4LnAAODDAAAAAkCiI8YvOa87MAAUGE3hAYAAAFgA4h5AAFgA4cgAAEFiJEAAAAABAAAAwAAAAAAAQEBAAAAAIOnYAPAAEyiAABgA4iPAT8BCQAAiHsBAAGAAMADg2oAAgaIlBiV3pXilfwAAIN5hhUAAAABA5XrlfwAAAABAQGV7AAAAGlbAABgA8AATKIBSpXyARaV9ICV8sADg66CHMAATgIGiJUYlgCWBZYgAACCmIYVAAAAAQOWDJYgAAAAAgIClg0AAACDiFsAlhEAAACDiVsAAGADwABK2AFKlhgBHJYbgJYYwAOD8YCMAQABgZYewAOD+gDAAE38AAADg48AA4PSAAOEKgAAAAICiJYYvOa87MAAUGE3hAcAAQAABIFnYAPAAE3vAVsBYAOIjwABXQOLbwFfAwAAAAEFiJgAAAAABAAAAwAAAAAAAQEBAAAAAIOnYAPAAEyiAABdA4iWAV8DAAABPwEJAACIkQEAAYAAwAOEfgAsBoiaGoS7hMCEzAACgIIAAAABA4TDhMwAAAABAQGExgAAICJfAwAAAABgA8AAStgABoibGoTRhNaE7gACgcQAAAABA4TehO4AAAABAQGE5gAAAIG8YAPAAE3vAABgA8AAStgABoicGoTzhPWFCwACg4sAAAABA4T7hQsAAAABAQGFAwAAAIG8YAPAAE3vAABfAwAAAAaInRqFEIUVhSkAAoNsAAAAAQOFG4UpAAAAAQEBhSMAAAAiYAPAAE3vAABgA8AAStgABojAGoUuhT6FRgECgQgAAAABA4VGhUYAAAAAAAAAXQPAAE0/AV8DAAAABoieGoVLhVKFWQACgcsAAAABA4VXhVkAAAAAAAAAXQPAAE46AV8DAAAABojBGoVehWaFbAECgcgAAAABA4VshWwAAAAAAAAAYAPAAEyiAAaIwhqFcYV6hZABAIDjAAAAAQOFgoWQAAAAAAAAAGADwABK2AFKhYUBHIWMFoWFLoHIi5iAjAEAAZMAwABNxgaIwxqFlYWehbcBAINiAAAAAQOFqYW3AAAAAAAAAGADwABK2AFKhawBIRyFsxaFrC6ByIuYgIwBAAGTAMAATcYGiJ8ahbyFw4XoAACByQAAAAEDhcqF6AAAAQAABENgA8AATe8BWwAAAABdA8AATjoBXwMBAAFKhdABHoXUwABORAECXwMAAF8DAQABLgAGiKAaheyF+IZQAACECAAAAAEDhgKGUAAAAAEBAYYPAAAggh1dA8AATQQBXwMAAAAAXQPAAE0EAV8DAAABSoYfAR6GFpbHAgFfAwAAAi6AhkrAA4bRAAaIoRqGVYZhho0AAIQJAAAAAQOGbYaNAAABAAAEIWADwABN7wFbAAAAAF0DwABNBAFfAwEAAUqGcwEfhnOW7wEBXwMBAAEuAAaIohqGkoaXhrwAAIDnAAAAAQOGnIa8AAAAAAAAAFwBPgE9HIalLoOPAQABHIavLoHKAAAAAIuDAIt7BoijGobBhsaHFQAAg2sAAAABA4bMhxUAAAABAQGG2QAAIIETXQPAAE0EAV8DAAAAAFwBPgE+Ak6G+wAAAIEHXQPAAE0/AV8DAAABFob7HgCTzQEBXQPAAE0EAV8DAAABgIb7wAOHqgCBCMAATSZFAAABHIb7gQDAA4fFgQkAAAAAwABNQQA+Ak6G8AAAAIG8XwMAAAEWhxGBAMADh8WBCsAATUM9HIcFLoCCAQABgocJwAOIFgCLcQaIpBqHGocfh34AAIOPAAAAAQOHKId+AAAAAQEBhzoAAACBE10DwABNBAFgA8AATe8AAFwBPgE+Ak6HYQAAAIEHXQPAAE0/AWADwABN7wEWh2EeAJPNAQFdA8AATQQBYAPAAE3vAYCHYcADiGIAgQjAAE0mRQAAARyHYYEAwAOIf4EJAAAAAMAATUEAPgJOh1YAAACBvGADwABN7wEWh3qBAMADiH+BCsAATUM9HIdrLoNsAQABgodywAOI1ACLdAaIpRqHg4eIiK4AAIQKAAAAAQOHkYiuAAAAAQEBh6MAAACBE10DwABNBAFgA8AATe8AAFwBPgNOiD6IRwAAhAtdA8AATjoBXwMAAAEciEkugcsAAAAAi3U+Ak6IZwAAAIEHXQPAAE0/AWADwABN7wEWiGceAJPNAQFdA8AATQQBYAPAAE3vAYCIZ8ADiSIAgQjAAE0mRQAAARyIZ4IAwAOJYIEJAAAAAMAATUEAPgJOiGIAAACD/WADwABN7wEWiHGCAMADiWCBCsAATUM+AT0ciIKBiHnAA4k9g2wBAAGDiInAA4m1AMAATkk9HIiXLoOPAQABgYihwAOJPQCLewaIphqIs4i4iWMAAIOVAAAAAQOIw4ljAAAAAQEBiMkAAACBG2EDAV8DAABgA8AAStgAAFwBPgNOiOWI7gAAhAtdA8AATUYBWwExiPBbAD4CTokKAAAAgQddA8AATT8BXwMAAAEWiQoeAJPNAQFdA8AATQQBXwMAAAEuAIEIwABNJkUAAAEciQqCAMADilWBCQAAAADAAE1BAD4CToj/AAAAgbxfAwAAARaJEIIAwAOKVYEKwABNQz4BSYkYHIkggIkcwAOKIW4BAAGDiSHAA4qgAAA9HIk0gYkrwAOKPICCAQABg4k4wAOKoADAAE1XPz0ciUwug48BAAGBiVbAA4o8AIt7BoinGoloiW2KGQAAg5YAAAABA4l4ihkAAAABAQGJfgAAAIEbYQMBXwMAAGADwABK2AAAXAE+A06JmomjAACEC10DwABNRgFbATGJpVsAPgJOib8AAACBB10DwABNPwFfAwAAARaJvx4Ak80BAV0DwABNBAFfAwAAAS4AgQjAAE0mRQAAARyJv4IAwAOLWYEJAAAAAMAATUEAPgJOibQAAACBvF8DAAABFonFggDAA4tZgQrAAE1DPgFJic0hHInWgInSwAOLJW4BAAGDidfAA4ukAAA9HInqgYnhwAOLQICCAQABg4nuwAOLpADAAE1XPz0cigIug48BAAGBigzAA4tAAIt7BoioGooeiiOKpgAAg54AAAABA4ouiqYAAAABAQGKQAAAAIIdXQPAAE0EAWADwABN7wAAYAPAAErYAT4CPgJOil4AAACBB10DwABNPwFgA8AATe8BFopeHgCTzQEBXQPAAE0EAWADwABN7wGAil7AA4wqAIEIwABNJkUAAAEcil6BAMADjEyBCQAAAADAAE1BAD4CTopZAAAAg/1gA8AATe8BFoplgQDAA4xMgQrAAE1DPgFJim0hHIpyLoHEAQABgop7wAOMoQCLckqKfwEqP0qKlwEpBoipGoqrirKK7QAAhAwAAAABA4q3iu0AAAABAQGKvwAAIIIdXQPAAE46AV8DAAAAAF0DwABOOgFfAwAAAT4BSorMATWK0wAAAQBdA8AATjoBXwMAAAEcitMugcsAAAAAi3U1itwAAAEAXAEcityBitPAA40mg2sBAAGAiuPAA4z/AMAATkiBitPAA40mBoiqGoryivmLrQAAhA0AAAABA4sFi60AAAABAQGLEgAAAIIdXQPAAE46AWADwABN7wAAXQPAAE46AV8DAAABPgNOiyaLLQAAgOZdA8AATjoBXwMAAAEciy8ugcsAAAAAi3U+Ak6LTgAAAIEHXQPAAE0/AV8DAAABFotOHgCTzQEBXQPAAE0EAV8DAAABLgCBCMAATSZFAAABHItOggDAA43UgQkAAAAAwABNQQA+Ak6LQwAAAIG8XwMAAAEWi1SCAMADjdSBCsAATUM+AUmLXCEci2eAi2HAA42MgcQBAAGDi3DAA44fAMAATkY9HIuBgYt6wAONsYNsAQABg4uIwAOOHwDAAE5JP0qLnAGBi6PAA42xBoirGouyi7mM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AQABasAARPJgA8AATKIaAMAATcY+A0nAAEUIHMAARREUwABFDMADql0IAICMAQABasAARR5gA8AATKIUAMAATcY+AUnAAEU3HMAARUiHwABFO8ADqjmAuwEAAZMAwABN0D4BPY/AAEVZwAOqOYbAAEVowAOqCD8+Ak7AAEWWwABFmAABg81gA8AATKIBHMAARaaFwABFmsADqcuAowEAARTAAEWowAOqXQgAAMAATLxJwABFtiIcwABFvBTAAEW6wAOrJgkAgLsBAAGDwABFvsADqXEAwABN0AAcwABFzC6CmIYVAgACgMAARdTAA6kAHMAARd4WwABF2S6DpIYVhvSC0QEAARTAAEXfwAOrJgkAAMAATVUAhyQ+AUrAAEXwASo/PY7AAEYWwAOqCB7AAEYkhxYCAAKGwABGL8ADqgiCwABGMsADqUQAPRXAAEZDwAOqXQgcwABGUBbAAEZKLoODhhWG8oLRAQABhsAARlHAA6oIAMAATVVJwABGXxzAAEZtFsAARmMug6WGFYb1gIwBAAEWwABGdhbAAEZwLoOkhhWG9IHIwABNdgDAAE3GPgI9HMAARoYug+GGFQAAAACIyz0cwABGly6AggEAAYDAAEabwAOpAACI0T4FTsAARr7AAEbNAAGEGGADwABMogEjHMAARt2HwABG0MADqjmBXgEAAZMAwABN04fAAEblwAOqOYbAAEb0wAOqCAFgA8AATKJAIhzAAEcGlIFbAQABhcAARwnAA6nLAMAATdEAHMAARySFwABHGMADqcuAuwEAARzAAEcplINxAQABNyAAwABMvgDAAE3QwABHBMAARy8AQBzAAEdZHMAAR0yFwABHQMADqcuAoQEAARbAAEdOLoOlhhWG9QDAAEy6gIwBAAGTAMAATcbAAEc/wABHXQA9HMAAR2wWwABHZi6Dg4YVhvKBDAIAAhTAAEdtwAOsigkAHMAAR4uFwABHf8ADqcuApgEAARbAAEeNLoOlhhWG9QDAAEy7AMAATVY9HMAAR6MWwABHni6DpIYVhvSBDAIAAjXAAEekAAABAGADwABMogEWwABHpC6DpYYVhvU1wABHpAAAAQBgA8AATKIBF8AAR6Qug6WGFRzAAEetFMAAR6TAA63ACgCBDQEAAZQAwABNyIb1FMAAR6TAA63ACgCAwABHs8ADqQAAwABNVkrAAEfCASkGiM0YwABIFMAASBvAAErcAACEGYYVAAAAAQPAAEgowABK3AAAAAEBAcAASDAAAACC0mADwABN7wAAYAPAAE3vAT4JTsAASEXAAEhKAAGDw2ADwABMogEWwABIUxbAAEhMLoODhhWG8oHIwABNdk7AAEhpwABIcgABg8hgA8AATKIBHMAASHmBwABIdMADrnaBBgEAAZQAwABNyU7AAEiMwABIlwABg+lgA8AATKIBHMAASJ6BwABImcADrnaDxQEAAZQAwABMv07AAEiywABIuwABg8FgA8AATKIBHMAASL0ug3mGFQEAAYDAAEjHwAOuWwCHI07AAEjbwABI5wABg+dgA8AATKIBHsAASPOHFAMAA4TAAEkAwAOu+xbAAEkKLoOjhhWG84HAAEkVwAOudgBOwABJJMAASSYAAINmYAPAAEyiAR7AAEkyhxUCAAKEwABJPsADrvuCwABJSMADrqEATsAASVvAAElgAACD7GADwABMogEcwABJaBbAAEliLoODhhWG8oLRAQABhsAASWnAA69lAMAATVVDwABJcSEcwABJfYfAAEl4wAOvloCMAQABasAASYpgA8AATKIaAMAATcY+A0nAAEmgIRzAAEmph8AASaTAA6+WgIwBAAFqwABJtmADwABMohQAwABNxj4CTsAASdnAAEnbAAGDzWADwABMogEcwABJ6YXAAEndwAOvKICjAQABh8AASevAA6+WAMAATLxJwABJ+SIcwABJ/xTAAEn9wAOwJggAgLsBAAGDwABKAcADrs4AwABN0AAcwABKDy6CmIYVAgACgMAAShfAA65bHMAASiEWwABKHC6DpIYVhvSC0QEAARTAAEoiwAOwJggAAMAATVUAhyQ+AUrAAEozARzAAEo/FsAASjoug6SGFYb0gtEBAAEUwABKQMADsCYIAADAAE1VPz89jsAASoPAA69lHsAASpGHFgIAAobAAEqcwAOvZYLAAEqfwAOuoQA9j8AASrDAA6+WHMAASr0WwABKty6Dg4YVhvKC0QEAAYbAAEq+wAOvZQDAAE1VSsAASswBFsAAStMug6SGFYb0BojSGMAASuHAAErjwABLRQAAg4sAAAABA8AASunAAEtFAAAAAQEBwABK8QAAAILSYAPAAE3vAABfAwAAAT4CTsAASwDAAEsCAACEGmADwABN7wEcwABLBC6E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vF8DAAABFp+vggDABBrVgQrAAE1DPgRAIhyfyhafwy6ByMAATXaAjAEAAYGfzcAEGrkAwABNxgEwn9Mfn9nAAExFAQABLgCfvp/7AD0XoAkugcgcoBSBoBLABBq5gQ0BAAGUAMAATcjAAE10PRygIy6BDAIAAoGgJMAEGrmDoCnABBsmAMAATVY9iaA4wAQauRygOYGgOMAEGrmBDQEAAZQAwABNyAaJwyKgSqBPoQ0AAINsAAAAAQOgVaENAAAAAQEBoF0AAACBvGADwABN7wAAYAPAAErYAT4CRaBsAaB1oHcAAINmYAPAAEyiAZMBHKB+gaB8wAQcC4C7AQABFqCFLoHIwABNdgDAAE3QAYmgjcAEHAscoI6BoI3ABBwLgQ0BAAGUAMAATcg+AUmgmhygphygoi6C0QEAAYGgo8AEHAsAwABNVYCMAQABgKCpwAQb7wDAAE38PgI9HKDBLoRThhUCAAKBoMvABBwLHKDQgaDOwAQcC4ENAQABlADAAE3IAIoMSqDeASk/SqD9ASoGicUioY6hk6KrAACEU4YVAAAAAQOhnKKrAAAAAgICoaEAAABtYAPAAEyiAKGsAAAAhFRgA8AATKIAAFwBPgdOobuhwgAAgchgA8AATKIBFqHJLoHIwABNdkAcod6TgVsBAAGAoeHABBzcAMAATdGh3KHmAEAcofqAofTABBzcgLsBAAGBofzABBzpAMAATdCh9KH/AEAcohGBog3ABBzpgVsBAAGCohTABBz9AMAATdGiDaIaAE6iJaIqAACDw2ADwABMogEcojCBoizABBzpgQYBAAGAojLABBzcAMAATclFoj0BokaiSAAAg2ZgA8AATKIBgaJKwAQc6QEcolGEok/ABB2igLsBAAGColPABBz9AMAATdABjKJbwAQdohyiXISiW8AEHaKBDQEAAZQAwABNyD4BPRyibC6BDAIAAhyib4SibcAEHaKBBgEAAYOiccAEHXQAwABNyRyifS6C0QEAAYSifsAEHaIAwABNVQDAAE1WPReikS6ByByioYKimsAEHP2BBgEAAYOio8AEHXQAwABNycAATXQGicgiorCitaL1AACDlQAAAAEDosCi9QAAAAEBAaLGAAAAgRthAwFfAwAAYAPAAErYAABcAT4BPRyi3S6EVYYVAgACgKLlwAQedSoAig0Gickiovqi/6M+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AAGEslnABGRkAMAATdI+AT0csnEuhFOGFQIAAoWye8AEZKSBsobABGO6AIoMPz4GTrKrsrEAAIRvYAPAAEyiARyywISys8AEZGSBBgEAAYOywsAEZDkAwABNyU6y2rLkAACDdWADwABMogEcsvIWsusugcjAAE12gQ0BAAGFsvTABGUxAMAATchOswWzDwAAhG5gA8AATKIBHLMXgLMRwARjrYENAQABhLMZwARkZADAAE3IPRezRy6ByIazUMAEZVzAAE10PRyzZi6EWAQABIezb8AEZYqGs3rABGVcLoGzi8AEY7oAihw9HLOcLoRYAwADgLOlwARjrYezrMAEZYqCs7fABGPIAIocBooeIrPSs9a0jgAAhHAAAAABA7PdtI4AAAACAQKz5QAAIIG8YAPAAE3vALPzAAAAbWADwABMogFqs/tgA8AATKIaAGADwABMogE+A0m0BRy0D4G0CcAEZjaAuwEAAZMAwABN0D2JtBTABGY2kz9FtCMBtCy0LgAAg2ZgA8AATKIBgbQwwARmNgEctDmCtDfABGZ9gLsBAAEWtEAugcjAAE12AMAATdABirRIwARmfRy0SYK0SMAEZn2BDQEAAZQAwABNyD4BSbRVHLRhHLRdLoLRAQABgrRewARmfQDAAE1VgIwBAAGAtGTABGYoAMAATfxKtG0BgrR0wARmfT9KtIEBHLSIlIPrAAAAAMAATMUGih8itJO0l7VTAACEcQAAAAEDtKG1UwAAAAIBArSnAAAAgRthAwFfAwAAYAPAAErYALS9AAAAbWADwABMogFqtMVgA8AATKIaAGADwABMogE+A0m0zxy02YG008AEZ02AuwEAAZMAwABN0D2JtN7ABGdNkz9FtO0BtPa0+AAAg2ZgA8AATKIBgbT6wARnTQEctQOCtQHABGeUgLsBAAEWtQougcjAAE12AMAATdABirUSwARnlBy1E4K1EsAEZ5SBDQEAAZQAwABNyD4BSbUfHLUngLUjwARnOG4BAAEctSwugtEBAAGCtS3ABGeUAMAATVUAAEq1MgGCtTnABGeUP0q1RgEctU2Ug+sAAAAAwABMxQaKICK1WLVctjUAAIRyAAAAAQO1Z7Y1AAAAAgECtW8AACCBvGADwABN7wC1fQAAAG1gA8AATKIBagBgAcAATawCAGADwABMogE+A0m1iyIctZWBtY/ABGhZgIwBAAErAMAATcYBHLWmgbWgwARoWYFeAQABFrWuLoHIwABNdgDAAE3TPYm1tsAEaFkctcoWtcMugcjAAE12gQYBAAGUAMAATck/RbXTAbXctd4AAINmYAPAAEyiAYG14MAEaFkBHLXpgrXnwARo1oFeAQABkwDAAE3TAYq178AEaNYctfCCte/ABGjWgQYBAAGUAMAATck+AUm1/By2CBy2BC6C0QEAAYK2BcAEaNYAwABNVYCMAQABgLYLwARoSwDAAE38SrYUAYK2G8AEaNY/SrYoARy2L5SD6wAAAADAAEzFBoohIrY6tj63GwAAhHMAAAABA7ZMtxsAAAACAQK2UgAAAIEbYQMBXwMAAGADwABK2AC2aAAAAG1gA8AATKIBagBgAcAATawCAGADwABMogE+A0m2diIctoCBtnrABGmdgIwBAAErAMAATcYBHLaRgbaLwARpnYFeAQABFraZLoHIwABNdgDAAE3TPYm2ocAEaZ0ctrUWtq4ugcjAAE12gQYBAAGUAMAATck/Rba+AbbHtskAAINmYAPAAEyiAYG2y8AEaZ0BHLbUgrbSwARqGoFeAQABkwDAAE3TAYq22sAEahocttuCttrABGoagQYBAAGUAMAATck+AUm25xy274C268AEaYhuAQABHLb0LoLRAQABgrb1wARqGgDAAE1VAABKtvoBgrcBwARqGj9Ktw4BHLcVlIPrAAAAAMAATMUGiiIityC3JbhfAACEdAAAAAEDtyu4XwAAAAICArcwAAAAgd1gA8AATKIAtzkAACCBvF8DAAAAAFwBPgY9HrdWwABLygIAAoC3Y8AEasgngd0APR63g8AAS90EAASAt5jABGrIkxa3oi6ByMAATXYngd0ASbe4HLfCgLe8wARqyICMAQABFrfKLoHIwABNdgDAAE3GPgI9HLfaLoCCAQABgbfewARq1gCKCEq37gA/PRe4BS6ByBy4Cxa4BS6ByMAATXaBDQEAAZQAwABNyMAATXQ9HLgTLoRYBAAEHLgigLgcwARqyIENAQABlADAAE3IFrgsLoHIwABNdi6AuDrABGrIAIocPRy4Si6BDAIAAoC4S8AEasiBuFTABGrWAMAATVYGiiMiuGS4ZrjOAACEdQAAAAEDuG64zgAAAAEBAbhzAAAAgd1gA8AATKIAAF8DAAABPgNOuIK4iQAA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RgFbgcjAAE12TsAARb7AAEXEAACEqV0DizMBXwMBAAEfwABFxotgAQFfAwEAARzAAEXagcAARdPABMBAgQ0BAAGUAMAATcgAQBzAAEYBFsAARfoWwABF84LAAEXtwATAcoP/hhWLN4HIwABNdoKMAQABgcAARgPABMBAAMAATdLAAEXtwABGCQBFwABGEgHAAEYbwABGHQAAg2ZgA8AATKIBkwEcwABGJIPAAEYiwATA94C7AQABgcAARibABMBAAMAATdABi8AARi7ABMD3HMAARi+DwABGLsAEwPeBDQEAAZQAwABNyD4BPRzAAEZJFsAARkOCwABGPcAEwHKD/4YVizeBDAIAAoPAAEZKwATA9ybAAEZXBRzAAEZXFMAARk/ABMACAAFdA8AATUYBW4LRAQABg8AARljABMD3AMAATVVfAwEAAMAATVY9F8AARnCCwABGasAEwHKEtoYVgcAARnjABMBAizlKwABGhgGCwABGjcAEwHI+BU7AAEarwABGtAAAhLhgA8AATKIBasAARrZgA8AATKIcScAARs8lwABG3ACAwABG08AEwAJdA5WYAVs+AT2JwABHAsAEweQWwABHFhTAAEcNwATAAgABXQOVmAFbgciVmj9OwABHOcAAR0AAAIDmXQOLMwFfAwEAAR/AAEdCi2ABAV8DAQABgcAAR0/ABMHkAD4CTsAAR3YAAACBB10DwABNPwFbARbAAEd2HgCTzQEBXQPAAE0EAVsBgMAAR3bABMACAIEIwABNJkUAAAEcwABHdoMAwATCdoEJAAAAAMAATUEAPgJOwABHawAAAYG8WwEWwABHgIMAwATCdoEKwABNQz4BPRzAAEeRgsAAR4rABMJFhJgBAAEmwABHmQWEwABHmcAEwslfAwEAAItUSsAAR7EBgsAAR7jABMJFBos9I8AASGzAAEh0wABIwAQBhCEAAAABA8AASIDAAEjAAAABAAAEgWdgA8AATe8BWwEBAcAASI0AAACBE10DwABNBAFfAwEAAABdA4szAV8DAQABSsAASKABNcAASKAAAAEAXQOLMwFfAwEAAR/AAEigi2AAAV8DAQAAADXAAEiwAAABAFwBHMAASLCBwABIoMAEw3uDawEAAYDAAEi3wATDVACLRIHAAEigwATDewaLPyPAAEjfwABI6MAASQ8AAIHJAAAAAQPAAEjvwABJDwAAAQAABENgA8AATe8BWwAAAABdA4q0AV8DAQABSsAASPUBHsAASPuKvQECXwMAAF8DAQABLgAGi1kjwABJE8AASSPAAElKAQCBCAAAAAEDwABJLMAASUoAAAAAAAAAXQPAAE0/AV8DAAABSsAASS8BH8AASS+LbgEBXwMAAAEuAAaLQCPAAElPwABJVMAASjMAAIESAAAAAQPAAElbwABKMwAAAAEBAcAASWEAAABQYQMBXwMAAFwAAFwBPgJOwABJecAASYsAAIOTYAPAAEyiARbAAEmNLoNhhhWLOkXAAEmlAcAASa7AAEmwAACDZmADwABMogEWwABJsi6EtYYVizgBIRzAAEm7gsAASbnABMTUgIwBAAEWwABJvi6EtoYVizkAwABNxgGKwABJxcAExNQcwABJ0RzAAEnMgsAAScrABMTUgQ0BAAGUAMAATciAoQEAARzAAEniFsAASdsWwABJ1C6D/4YVizeByMAATXaBBgEAAZQAwABNyQDAAEy6PgI9HMAASfGAwABJ8MAExJhuAQABHMAASfgWwABJ8i6D/4YVizeC0QEAAYLAAEn5wATE1ADAAE1VAAA9HMAASgQuhLmGFQEAAYHAAEoXwATErwCLSgaLWiPAAEo4wABKQcAASloBAIDjAAAAAQPAAEpJwABKWgAAAAAAAABgA8AAStgBSsAASkwBHMAASlIWwABKTC6EtYYViziAjAEAARbAAEpVLoS2hhWLOQDAAE3GBotbI8AASl/AAEpnwABKlgEAgcgAAAABA8AASm7AAEqWAAAAAAAAAGADwABMogFKwABKcQEcwABKgRzAAEp4FsAASnIuhLaGFYs5gQYBAAEWwABKei6EtYYVizgAwABNyYChAQABHMAASpIWwABKixbAAEqELoP/hhWLN4HIwABNdoEGAQABlADAAE3JAMAATLoGi1wjwABKm8AASqHAAEsFAQCBwgAAAAEDwABKp8AASwUAAAAAAAAAXwMAAAE+AknAAEqtHMAASrcWwABKsS6EtYYViziAjAEAARbAAEq6LoS2hhWLOQDAAE3GPTDAAErBHsAAStyW/AAAAAA/SsAASu0BHMAASvoWwABK9C6D/4YVizeC0QEAARbAAEr7LoS1hhWLOADAAE1VBotdI8AASwrAAEsQwABLjwEAgdUAAAABA8AASxXAAEuPAAAAAAAAAF8DAAABPgJJwABLGxzAAEslFsAASx8uhLWGFYs4gIwBAAEWwABLKC6EtoYVizkAwABNxj0wwABLLx7AAEtKlvwAAAAAP0rAAEtbARzAAEtoFsAAS2Iug/+GFYs3gtEBAAEcwABLdRzAAEtwFsAAS2ouhLaGFYs5gQYBAAGUAMAATcmAoQEAARzAAEuGFsAAS38WwABLeC6D/4YVizeByMAATXaBBgEAAZQAwABNyQDAAEy6AMAATVUGi14jwABLlMAAS5rAAEw5AQCB1wAAAAEDwABLocAATDkAAAAAAAAAXwMAAAE+A0nAAEunHMAAS7EWwABLqy6EtYYViziAjAEAARbAAEu0LoS2hhWLOQDAAE3GPTDAAEu7HsAAS9aW/AAAAAA/ScAAS+ccwABL8hbAAEvrLoHIi1uCjAEAAZQAwABN0j0wwABL9x7AAEwSlv0AAAAAP0rAAEwhARzAAEwuFsAATCgug/+GFYs3gtEBAAEWwABMLy6EtYYVizgAwABNVQaLQSPAAEw+wABMQMAATMAAAIHcAAAAAQPAAExJwABMwAAAAAEBAcAATE4AAACB3WADwABMogAAXwMAAAE+Aj0ewABMZsAAS94CAAKAwABMdsAEySEuAErAAEyIARzAAEyVFsAATI8ug/+GFYs3gtEBAAEcwABMphzAAEydFsAATJcuhLWGFYs4gQ0BAAGAwABMn8AEySEAwABNyIChAQABHMAATLcWwABMsBbAAEypLoP/hhWLN4HIwABNdoEGAQABlADAAE3JAMAATLoAwABNVQaLQiPAAEzFwABMzcAATZUAAIHKAAAAAQPAAEzTwABNlQAAAAEAAAHAAEzaAAAAhA9gA8AAStgBasAATOVgA8AAStiD+10DwABNRgFfAwAAAT4ETsAATPoAAACERl0DwABNRgFfAwAAAEnAAE0EgMAATQjABMn0PgE9icAATRrABMogNcAATSQAAAEAXQPAAE1GAV8DAAABMcAATSRfAwAAADXAAE0oAAABAFwBF8AATSiCwABNJMAEylCByBbAAE0xLoHIi1vAAE10gsAATSTABMpQPgE9icAATUzABMogHsAATVPAAEaPAQFfAwAAARbAAE1bLoHIi1sAPRzAAE1uLoS6hhUBAAGBwABNe8AEyiAAi05KwABNhgGBwABNjcAEyiAGi0MjwABNtsAATbvAAE3dAACAggAAAAEDwABNvsAATd0AAAABAQHAAE3BAAAgIl8DAAAAAFwBPgE9HMAATc4ugNSGFQEAAYDAAE3TwATLFwCLSwaLRCPAAE3iwABN58AAUa0AAINrAAAAAQPAAE3twABRrQAAAAEBAcAATfoAACCBE10DwABNBAFfAwAAAABcAT4BScAATgolwABOFwCAwABODsAEy2pdA8AATUYBXwMAAD4FTsAATjPAAE44AACERl0DwABNRgFfAwAAARTAAE46wATLagABXQPAAE1GAV8DAABOwABOTsAATlcAAIS7YAPAAEyiARbAAE5egcAATlnABMumgcjAAE12TsAATnDAAE53AACByGADwABMogEWwABOfi6ByItbScAATowcwABOohzAAE6Xg8AATpDABMv9gQ0BAAGCwABOmcAEy9UAwABNyIFeAQABFsAATqwWwABOpS6D/4YVizeByMAATXYAwABN0z4DPRzAAE6+LoS8hhUBAAEcwABOzoPAAE7HwATL/YENAQABgsAATtDABMvVAMAATcgAi089HMAATy8WwABPKC6D/4YVizeEWAQABIPAAE84wATL/RzAAE9Hg8AAT0DABMv9gQ0BAAGCwABPScAEy9UAwABNyIHAAE9TwATLppMAwABNaz0XwABPZS6EtoYVHMAAT2sWwABPZS6EtoYVizmBDQEAAYLAAE9uwATL1QDAAE3Iizk+Ak7AAE/KwABP0wAAhL1gA8AATKIBHMAAT+MWwABP3BbAAE/VLoP/hhWLN4HIwABNdoEGAQABFsAAT+UuhLaGFYs5AMAATclJwABP9BzAAFABgsAAT/jABMvVgLsBAAGEwABQA8AEzR4AwABN0D4CPRzAAFAgFsAAUBkug/+GFYs3hFgEAAQWwABQKS6EtoYVizkcwABQNhbAAFAwLoS2hhWLOYENAQABgsAAUDjABMvVAMAATciBwABQQsAEy6aTAMAATWs9F8AAUFYuhLaGFRzAAFBcFsAAUFYuhLaGFYs5gQ0BAAGCwABQX8AEy9UAwABNyIs5PgROwABQiMAAUJEAAIS+YAPAAEyiARzAAFCcgsAAUJPABMvVgQYBAAGEwABQnsAEzR4AwABNyT0cwABQuRbAAFCyLoP/hhWLN4RYBAAEFsAAUMIuhLaGFYs5HMAAUM8WwABQyS6E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ogE+AkAcwABkahbAAGRjgMAAZFzABON1gcjAAE12gV4BAAEWwABkbS6ByItbAMAATdPAAGRcwABkcwBJwABkehzAAGSEFsAAZH4uhLWGFYs4gVsBAAEWwABkhy6EtoYVizkAwABN0T4DTsAAZJrAAGShAACByGADwABMogEcwABkqRbAAGSjLoS2hhWLOYEGAQABFsAAZKsuhLWGFYs4AMAATck9HMAAZL+AwABkuMAE43WEWAQABJOBwABky8AE4/oWwABk0y6D/4YVizcWwABk2y6EtYYVizgAwABNa0rAAGTpAYHAAGTwwATj+j4ETsAAZQ/AAGUdAACEzGADwABMogEcwABlLRbAAGUmFsAAZR8ug/+GFYs3gcjAAE12gQYBAAEWwABlLy6EtYYVizgAwABNyT0cwABlQ4DAAGU8wATjdYRYBAAEk4HAAGVPwATkgRbAAGVeLoP/hhWLNxbAAGVmLoS1hhWLOADAAE1rPRzAAGV7gMAAZXTABON1hFgEAASBwABlhMAE5IEcwABloYHAAGWTwATkgYENAQABFsAAZaMuhLaGFYs5AMAATcgWwABlqi6D/4YVizeTAMAATWtKwABlvAEcwABlyRbAAGXDLoS2hhWLOYENAQABgcAAZcvABOSBAMAATcgGi08jwABmFcAAZhrAAGefAACEvIYVAAAAAQPAAGYiwABnnwAAAAEBAcAAZicAAACEzWADwABMogAAXAE+B0AcwABmVYDAAGZFwATlp4FeAQABFsAAZlgugciLWwDAAE3TwABmRcAAZl4APYjAAGbHwATlpxzAAGbXgMAAZsfABOWngQ0BAAEcwABm6oDAAGbawATlp4PFAQABlADAAEy/AMAATchOwABm+MAAZwQAAITOYAPAAEyiAR7AAGcGi0kBAAGAwABnFMAE5acATsAAZzLAAGc7AACEyl0DwABNRgFfAwAAAR7AAGc9wABGjwEBXwMAAAGBwABnRcAE5iQAPRfAAGdXLoS2hhUcwABnXy6EuoYVAQABgsAAZ2zABOZMAItOizk9F8AAZ3sug/+GFYLAAGeEwATmTIs3PRfAAGeSLoS1hhWTizgAAAS/zgAEwyAABMPPAATEJwAExHEABMXHAATGIwAExrUABMdPAATILwAEyPoABMnMAATK8AAEy0MABM+tAATRQwAE01sABNO5AATU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gbxfAwAAARaHEYEAwATtxoEKwABNQz0chwUugIIBAAGChwnABO4XAItxBot7Gocahx+HfgAAg48AAAABA4coh34AAAABAQGHOgAAAIETXQPAAE0EAWADwABN7wAAXAE+AT4CTodhAAAAgQddA8AATT8BYAPAAE3vARaHYR4Ak80BAV0DwABNBAFgA8AATe8BgIdhwATuYwCBCMAATSZFAAABHIdhgQDABO6AgQkAAAAAwABNQQA+Ak6HVgAAAIG8YAPAAE3vARaHeoEAwATugIEKwABNQz0ch2sug2wBAAGCh3LABO7VAIt0Bot8GoeDh4iIrgAAhAoAAAABA4eRiK4AAAABAQGHowAAAIETXQPAAE0EAWADwABN7wAAXAE+A06IPohHAACEC10DwABOOgFfAwAAARyISS6BywAAAACLdT4CTohnAAAAgQddA8AATT8BYAPAAE3vARaIZx4Ak80BAV0DwABNBAFgA8AATe8BgIhnwATvIwCBCMAATSZFAAABHIhnggDABO9hgQkAAAAAwABNQQA+Ak6IYgAAAIP9YAPAAE3vARaIcYIAwATvYYEKwABNQz4BPRyIgoGIecAE7z6DbAEAAYOIicAE77YAwABOST0ciJcug48BAAGBiKHABO8+AIt7Bot9GoiziLiJYwAAg5UAAAABA4jDiWMAAAABAQGIyQAAAIEbYQMBXwMAAGADwABK2AAAXAE+A06I5YjuAACEC10DwABNRgFbATGI8FsAPgJOiQoAAACBB10DwABNPwFfAwAAARaJCh4Ak80BAV0DwABNBAFfAwAAAS4AgQjAAE0mRQAAARyJCoIAwATwVoEJAAAAAMAATUEAPgJOiP8AAACBvF8DAAABFokQggDABPBWgQrAAE1DPgFJiRgciSCAiRzABPAibgEAAYOJIcAE8KEAAD0ciTSBiSvABPA9gIIBAAGDiTjABPChAMAATVc/PRyJTC6DjwEAAYGJVsAE8D0Ai3sGi34aiWiJbYoZAACDlgAAAAEDiXiKGQAAAAEBAYl+AAAAgRthAwFfAwAAYAPAAErYAABcAT4DTomaiaMAAIQLXQPAAE1GAVsBMYmlWwA+Ak6JvwAAAIEHXQPAAE0/AV8DAAABFom/HgCTzQEBXQPAAE0EAV8DAAABLgCBCMAATSZFAAABHIm/ggDABPFagQkAAAAAwABNQQA+Ak6JtAAAAIG8XwMAAAEWicWCAMAE8VqBCsAATUM+AUmJzSEcidaAidLABPEmbgEAAYOJ18AE8aUAAD0cieqBieHABPFBgIIBAAGDie7ABPGlAMAATVc/PRyKAi6DjwEAAYGKDMAE8UEAi3sGi38aih6KI4qmAACDngAAAAEDii6KpgAAAAEBAYpAAAAAgh1dA8AATQQBYAPAAE3vAABgA8AAStgBPgI+Ak6KXgAAAIEHXQPAAE0/AWADwABN7wEWil4eAJPNAQFdA8AATQQBYAPAAE3vAYCKXsAE8isAgQjAAE0mRQAAARyKXoEAwATyTYEJAAAAAMAATUEAPgJOilkAAACD/WADwABN7wEWimWBAMAE8k2BCsAATUM+AUmKbSEcinIugcQBAAGCinvABPKiAItySop/ASo/SoqXASkGi4AaiquKsortAACEDAAAAAEDireK7QAAAAEBAYq/AAAggh1dA8AATjoBXwMAAAAAXQPAAE46AV8DAAABPgFKiswBNYrTAAABAF0DwABOOgFfAwAAARyK0y6BywAAAACLdTWK3AAAAQBcARyK3IGK08AE8yeDawEAAYCK48AE8wAAwABOSIGK08AE8ycGi4EaivKK+YutAACEDQAAAAEDiwWLrQAAAAEBAYsSAAAAgh1dA8AATjoBYAPAAE3vAABdA8AATjoBXwMAAAE+A06LJostAACA5l0DwABOOgFfAwAAARyLLy6BywAAAACLdT4CTotOAAAAgQddA8AATT8BXwMAAAEWi04eAJPNAQFdA8AATQQBXwMAAAEuAIEIwABNJkUAAAEci06CAMAE89WBCQAAAADAAE1BAD4CTotDAAAAgbxfAwAAARaLVIIAwATz1YEKwABNQz4BSYtcIRyLZ4CLYcAE842BxAEAAYOLcMAE9CAAwABORj0ci4GBi3rABPOyg2wBAAGDi4jABPQgAMAATkk/SoucAYGLo8AE87IGi4Iai7KLuYxqAACEDgAAAAEDi8OMagAAAAEBAYvQAAAAgh1dA8AATjoBYAPAAE3vAABdA8AATjoBXwMAAAE+A06L5IvrAACA5l0DwABOOgFfAwAAARyL7S6BywAAAACLdT4CTowMAAAAgQddA8AATT8BXwMAAAEWjAweAJPNAQFdA8AATQQBXwMAAAEuAIEIwABNJkUAAAEcjAyCAMAE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AAAAAQEBhg8AACCCHV0DwABNBAFfAwAAAABdA8AATQQBXwMAAAFKhh8BHoYWlscCAV8DAAACLoCGSsAFCkIABourGoZVhmGGjQAAhAkAAAABA4Ztho0AAAEAAAQhYAPAAE3vAVsAAAAAXQPAAE0EAV8DAQABSoZzAR+Gc5bvAQFfAwEAAS4ABousGoaShpeGvAAAgOcAAAABA4achrwAAAAAAAAAXAE+AT0chqUug48BAAEchq8ugcoAAAAAi4MAi3sGi60ahsGGxocVAACDawAAAAEDhsyHFQAAAAEBAYbZAAAggRNdA8AATQQBXwMAAAAAXAE+AT4CTob7AAAAgQddA8AATT8BXwMAAAEWhvseAJPNAQFdA8AATQQBXwMAAAGAhvvABQsbAIEIwABNJkUAAAEchvuBAMAFCzaBCQAAAADAAE1BAD4CTobwAAAAgbxfAwAAARaHEYEAwAULNoEKwABNQz0chwUugIIBAAGChwnABQuHAItxBouuGocahx+HfgAAg48AAAABA4coh34AAAABAQGHOgAAAIETXQPAAE0EAWADwABN7wAAXAE+AT4CTodhAAAAgQddA8AATT8BYAPAAE3vARaHYR4Ak80BAV0DwABNBAFgA8AATe8BgIdhwAUL0wCBCMAATSZFAAABHIdhgQDABQvwgQkAAAAAwABNQQA+Ak6HVgAAAIG8YAPAAE3vARaHeoEAwAUL8IEKwABNQz0ch2sug2wBAAGCh3LABQxFAIt0BouvGoeDh4iIrgAAhAoAAAABA4eRiK4AAAABAQGHowAAAIETXQPAAE0EAWADwABN7wAAXAE+A06IPohHAACEC10DwABOOgFfAwAAARyISS6BywAAAACLdT4CTohnAAAAgQddA8AATT8BYAPAAE3vARaIZx4Ak80BAV0DwABNBAFgA8AATe8BgIhnwAUMkwCBCMAATSZFAAABHIhnggDABQzRgQkAAAAAwABNQQA+Ak6IYgAAAIP9YAPAAE3vARaIcYIAwAUM0YEKwABNQz4BPRyIgoGIecAFDK6DbAEAAYOIicAFDSYAwABOST0ciJcug48BAAGBiKHABQyuAIt7BouwGoiziLiJYwAAg5UAAAABA4jDiWMAAAABAQGIyQAAAIEbYQMBXwMAAGADwABK2AAAXAE+A06I5YjuAACEC10DwABNRgFbATGI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AACBygAAAAEDq96snAAAAAEAAAGr5QAAAIQPYAPAAErYAWqr8GADwABK2IP7XQPAAE1GAV8DAAABPgROrAWsDAAAgOZdA8AATUYBXwMAAAEjgKwOwAUw/DWsHQAAAQBdA8AATUYBXwMAAAExrB1fAwAAADWsIQAAAQBcAResIYGsHcAFMUGByBasKi6ByJWawABNdIGsHcAFMUEerDTAAEaPAQFfAwAAARasPC6ByJWaAAFdA8AATUYBXwMAAE6sTaxPAACDZmADwABMogGTPgJOrGoAAACBB10DwABNPwFfAwAAARasah4Ak80BAV0DwABNBAFfAwAAAS4AgQjAAE0mRQAAARysaoMAwAUxuoEJAAAAAMAATUEAPgJOrF8AAACBvF8DAAABFqyFgwDABTG6gQrAAE1DPRysdoGscMAFMSSBDAIAAjWsdwAAAQBgA8AATKIBgqx3wAUxpzWseAAAAQBgA8AATKIBiqx4wAUxpxyseIWsd8AFMjGBDQEAAZQAwABNyIWsd8AFMjGErH7ABTIFAMAATVZKrIsBgaySwAUxJAaL6hqsoaytrPkAAIGrAAAAAQOss6z5AAABAAAEIWADwABN7wFbAQEBrLYAAABQYQMBXwMAAF8DAQAAAF0DwABNBAFfAwEAAUqszQEfrM2V7wICXwMAAF8DAQACLoCs98AFMrYABov/Gqz+rQSt1gEAgdcAAAABA60LrdYAAAAAAAAAXwMAAAE+BUmtERytHBatFS6ByJWagowBAAGUAMAATdI9MK0hHq08lv0AAAAAP06tV61aAACEEF0DwABNPwFfAwAAARatXC6BCMAATlZJrWohHK1ygK1vwAUzP4EJAAAAAMAATUE9MK1+Hq2ZlvwAAAAAP06trK2zAACA5l8DAAABFq24gK21wAUzP4EKwABNQ0qtxQGBrczABTOEBovrGq3breKuIQAAgO8AAAABA63qriEAAAAAAAAAYAPAAE6JAUqt8AEerf2JQgMAAy4nhBEnhBIABovsGq4mrjKuZwAAgaoAAAABA643rmcAAAABAQGuPQAAAFBhAwFfAwAAYAPAAErYAABdA8AATQQBXwMAAAFKrk4BH65OlhECAV8DAAACLoCuZcAFNAIABovtGq5srniuwgAAgbMAAAABA66BrsIAAAEAAAQhYAPAAE3vAVsBAQGujgAAAFBh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AwAAARaJEIIAwAWkmYEKwABNQz4BSYkYHIkggIkcwAWkZW4BAAGDiSHABaTkAAA9HIk0gYkrwAWkgICCAQABg4k4wAWk5ADAAE1XPz0ciUwug48BAAGBiVbABaSAAIt7Boz5GoloiW2KGQAAg5YAAAABA4l4ihkAAAABAQGJfgAAAIEbYQMBXwMAAGADwABK2AAAXAE+A06JmomjAACEC10DwABNRgFbATGJpVsAPgJOib8AAACBB10DwABNPwFfAwAAARaJvx4Ak80BAV0DwABNBAFfAwAAAS4AgQjAAE0mRQAAARyJv4IAwAWlnYEJAAAAAMAATUEAPgJOibQAAACBvF8DAAABFonFggDABaWdgQrAAE1DPgFJic0hHInWgInSwAWlaW4BAAGDidfABaXoAAA9HInqgYnhwAWlhICCAQABg4nuwAWl6ADAAE1XPz0cigIug48BAAGBigzABaWEAIt7Boz6GooeiiOKpgAAg54AAAABA4ouiqYAAAABAQGKQAAAAIIdXQPAAE0EAWADwABN7wAAYAPAAErYAT4CPgJOil4AAACBB10DwABNPwFgA8AATe8BFopeHgCTzQEBXQPAAE0EAWADwABN7wGAil7ABaZuAIEIwABNJkUAAAEcil6BAMAFppCBCQAAAADAAE1BAD4CTopZAAAAg/1gA8AATe8BFoplgQDABaaQgQrAAE1DPgFJim0hHIpyLoHEAQABgop7wAWm5QCLckqKfwEqP0qKlwEpBoz7GoqrirKK7QAAhAwAAAABA4q3iu0AAAABAQGKvwAAIIIdXQPAAE46AV8DAAAAAF0DwABOOgFfAwAAAT4BSorMATWK0wAAAQBdA8AATjoBXwMAAAEcitMugcsAAAAAi3U1itwAAAEAXAEcityBitPABadqg2sBAAGAiuPABadDAMAATkiBitPABadqBoz8GoryivmLrQAAhA0AAAABA4sFi60AAAABAQGLEgAAAIIdXQPAAE46AWADwABN7wAAXQPAAE46AV8DAAABPgNOiyaLLQAAgOZdA8AATjoBXwMAAAEciy8ugcsAAAAAi3U+Ak6LTgAAAIEHXQPAAE0/AV8DAAABFotOHgCTzQEBXQPAAE0EAV8DAAABLgCBCMAATSZFAAABHItOggDABagYgQkAAAAAwABNQQA+Ak6LQwAAAIG8XwMAAAEWi1SCAMAFqBiBCsAATUM+AUmLXCEci2eAi2HABafQgcQBAAGDi3DABahjAMAATkY9HIuBgYt6wAWn9YNsAQABg4uIwAWoYwDAAE5JP0qLnAGBi6PABaf1Boz9Gouyi7mMagAAhA4AAAABA4vDjGoAAAABAQGL0AAAAIIdXQPAAE46AWADwABN7wAAXQPAAE46AV8DAAABPgNOi+SL6wAAgOZdA8AATjoBXwMAAAEci+0ugcsAAAAAi3U+Ak6MDAAAAIEHXQPAAE0/AV8DAAABFowMHgCTzQEBXQPAAE0EAV8DAAABLgCBCMAATSZFAAABHIwMggDABaksgQkAAAAAwABNQQA+Ak6MAQAAAIG8XwMAAAEWjBKCAMAFqSyBCsAATUM+AUmMGhyMJICMHsAFqOSBxAEAAYOMLcAFqXcAwABORj0cjD6BjDfABakJg2wBAAGDjEXABal3AMAATkk/SoxZAYGMYMAFqQkGjP4ajG+Md407AACBygAAAAEDjH2NOwAAAAEAAAGMhAAAAIQPYAPAAErYAWqMj2ADwABK2IP7XQPAAE1GAV8DAAABPgROjKSMqwAAgOZdA8AATUYBXwMAAAEjgIytwAWp+DWMvAAAAQBdA8AATUYBXwMAAAExjLxfAwAAADWMwAAAAQBcAReMwIGMvMAFqj2ByBaMyS6ByIuYwABNdIGMvMAFqj0ejNPAAEaPAQFfAwAAARaM2y6ByIuYAAFdA8AATUYBXwMAAE6M7IzuAACDZmADwABMogGTPgJOjQkAAACBB10DwABNPwFfAwAAARaNCR4Ak80BAV0DwABNBAFfAwAAAS4AgQjAAE0mRQAAARyNCYMAwAWqtoEJAAAAAMAATUEAPgJOjP4AAACBvF8DAAABFo0kgwDABaq2gQrAAE1DPRyNFYGND8AFqiCBDAIAAjWNFgAAAQBgA8AATKIBgo0WwAWqozWNFwAAAQBgA8AATKIBio0XwAWqoxyNF4WNFsAFqy2BDQEAAZQAwABNyIWNFsAFqy2EjR3ABasBAMAATVZKjSoBgY0xwAWqIAaM/xqNQI1MjZgAAIGrAAAAAQONUo2YAAABAAAEIWADwABN7wFbAQEBjVUAAABQYQMBXwMAAF8DAQAAAF0DwABNBAFfAwEAAUqNbAEfjWyV7wICXwMAAF8DAQACLoCNlsAFq7IABo0WGo2djaOOdQEAgdcAAAABA42qjnUAAAAAAAAAXwMAAAE+BUmNsByNuxaNtC6ByIuYgowBAAGUAMAATdI9MI3AHo3blv0AAAAAP06N9o35AACEEF0DwABNPwFfAwAAARaN+y6BCIuXSY4JIRyOEYCODsAFrDuBCQAAAADAAE1BPTCOHR6OOJb8AAAAAD9OjkuOUgAAgOZfAwAAARaOV4COVMAFrDuBCsAATUNKjmQBgY5rwAWsfgaNABqOeo6BjsAAAIDvAAAAAQOOiY7AAAAAAAAAAGADwABOiQFKjo8BHo6ciUIDAAMuJ4QRJ4QSAAaNARqPHY8pj14AAIGqAAAAAQOPLo9eAAAAAQEBjzQAAABQYQMBXwMAAGADwABK2AAAXQPAAE0EAV8DAAABSo9FAR+PRZYRAgFfAwAAAi6Aj1zABaz8AAaNAhqPY49vj7kAAIGzAAAAAQOPeI+5AAABAAAEIWADwABN7wFbAQEBj4UAAABQYQMBXwMAAF0DwABNBAFfAwEAAABdA8AATQQBXwMBAAFKj5wBH4+cliUCAl8DAABfAwEAAi6Aj7fABa1fAAaNAxqPvo/DkAoAAIESAAAAAQOPypAKAAAAAQEBj9AAAABQYQMBXwMAAFwAAFwBPgE+Ak6P9gAAAIEHXQPAAE0/AV8DAAABFo/2HgCTzQEBXQPAAE0EAV8DAAABLgCBCMAATSZFAAABHI/2gQDABa3WgQkAAAAAwABNQQA+Ak6P6wAAAIG8XwMAAAEWkAaBAMAFrdaBCsAATUM9HI/9gI/8wAWtv24BAAGCj/7ABa4hAAAGjQQakA+QEZFDAACBuQAAAAEDkBeRQwAAAAEBAZAaAAAggbphAwJfAwAAXwMAAF8DAAAAAF8DAAABPgVOkEmQUgAAgQhdA8AATT8BXwMAAAEWkFkugQiLl0mQZyEckHWBkGzABa6RgQkAAAAAwABNQT4BPTCQiR6QpJb8AAAAAD9OkL2QwwAAIl8DAAABFpDOgZDFwAWukYEKwABNQ0OQ2xyQ64GQ4sAFrpGBCQAAAADAAE1BPgE9ipD/wAWu1hyRDoCRB8AFrnFuAgACgpEPwAWu1haRH4GRFsAFrpGBCsAATUMAAEqRMwGCkTrABa7WBo0FGpFIkUqR+gAAgb0AAAABA5FRkfoAAAEAAAQhYAPAAE3vAVsCAgKRVAAAAIG+XwMBAACRZAAAAIG6YQMCXwMBAF8DAABfAwEAAABfAwEAAT4DTpGTkZkAACJfAwEAAYCRm8AFr24+Ak6RvwAAAIEHXQPAAE0/AV8DAAABFpG/HgCTzQEBXQPAAE0EAV8DAAABLgCBCMAATSZFAAABHJG/gwDABa+wgQkAAAAAwABNQQA+Ak6RtAAAAIG8XwMAAAEWkeSDAMAFr7CBCsAATUM9ipHFwAWvmhyR1IGRzcAFr3puAgACgpHVwAWvmoSR3MAFr/sAAEqR6gGCkfHABa+aBo0GGpH/kgSSewAAgccAAAABA5IJknsAAAABAQGSDwAAAFBhAwFfAwAAYAPAAErYAABgA8AAStgBPgI+Ak6SNQAAAIEHXQPAAE0/AV8DAAABFpI1HgCTzQEBXQPAAE0EAV8DAAABLgCBCMAATSZFAAABHJI1gQDABbCFgQkAAAAAwABNQQA+Ak6SKgAAAIG8XwMAAAEWkjuBAMAFsIWBCsAATUM+AUmSQyEckkmAkkjABbBkbgEAAYKSSsAFsNAAAEqSVAEqP0qSbAEpBo0HGpKAkoeUegAAgb8AAAABA5KLlHoAAAABAAGSlAAAAIHAYAPAAE6JAWqSoGADwABOiWIAYAPAAE6JAT4FTpK3ksAAAIEIXQPAAE0/AV8DAAABFpLHLoEIi5dJktUhHJLjgZLawAWxU4EJAAAAAMAATUFKku8BJwA/TpMLkxIAAIHBYAPAAE7TAR+TFMAATvIAAAAASZMoIhyTNoCTLMAFsTCAjAEAASsAwABOmAEck0uAk0HABbEwgIwBAAEnAADAAE6YPgFEk1o+AT0ck26Ck2fABbGPgcMBAAEWk32Bk3TABbFTgQrAAE1DAMAATucck5+Bk5bABbFTgQkAAAAAwABNQT4CPRyTxoKTv8AFsY+BwwEAARaT1YGTzMAFsVOBCsAATUMAwABO50OT5RyT9YGT7MAFsVOBCQAAAADAAE1BPgI9HJQSgpQLwAWxj4HDAQABgJQYwAWxMADAAE7nPRyUM4KULMAFsY+BwwEAARaUQoGUOcAFsVOBCsAATUMAwABO50qUXgEclGyClGXABbGPgO8AAAAAwABO7AaNCBqUf5SElP4AAIEOAAAAAQOUh5T+AAAAAQEBlI0AAACBG2EDAV8DAABgA8AAStgAAGADwABK2AE+Aj4CTpS2AAAAgQddA8AATT8BXwMAAAEWlLYeAJPNAQFdA8AATQQBXwMAAAEuAIEIwABNJkUAAAEclLaBAMAFsvGBCQAAAADAAE1BAD4CTpSrAAAAgbxfAwAAARaUvIEAwAWy8YEKwABNQz4BSZTEHJTMgJTIwAWyz24BAAGClM3ABbM8AABKlNcBKT9KlO4BKgaNCRqVA5UPlUQAAIHPAAAAAQOVE5VEAAAAAQEBlRgAAACEE2ADwABMogAAXQPAAE0EAV8DAAABPgFKlSEBHpUoljkCAV8DAAACLoCVPsAFs5sABo0KGpVJlVWVpAAAgdAAAAABA5VelaQAAAABAQGVZAAAAIEbYQMBXwMAAGADwABK2AAAXQPAAE0EAV8DAAABPgFKlXkBH5WAllcCAV8DAAACLoCVm8AFs+4ABo0LGpWplbWV6gAAgdEAAAABA5W5leoAAAABAQGVvgAAAIQTYAPAAEyiAABdA8AATQQBXwMAAAE+AUqVxwEelc6WagIBXwMAAAIugJXkwAW0SAAGjQwale+V+5ZKAACB0gAAAAEDlgSWSgAAAAEBAZYKAAAAgRthAwFfAwAAYAPAAErYAABdA8AATQQBXwMAAAE+AUqWHwEfliaWjwIBXwMAAAIugJZBwAW0mwAGjRcalk+WVZbjAQCBwgAAAAEDlluW4wAAAAAAAABfAwAAAT4DTpZtlnAAAIQQXQPAAE0/AV8DAAABFpZyLoEIi5dJloAhHJaIgJaFwAW0/oEJAAAAAMAATUE+AT0wlpwelreW/AAAAAA/SpbOARaW2ICW1cAFtP6BCsAATUMGjRgaluiW7pfGAQCB1QAAAAEDlvOXxgAAAAAAAABfAwAAAT4FTpcFlwgAAIQQXQPAAE0/AV8DAAABFpcKLoEIi5dJlxghHJcggJcdwAW1fIEJAAAAAMAATUE+AT0wlzQel0+W/AAAAAA/TpdoAAAAgOZfAwAAAESXdD4BPYmXf8AFtcEWl4uAl4jABbV8gQrAAE1DHJekgJehwAW1fIEJAAAAAMAATUFKl7UBgZe8wAW1wQaNDRqXy5fNmKAAAIHYAAAAAQOX15igAAAAAgEBl90AAACBG2EDAV8DAABgA8AAStgAAZfvAAAggdlhAwBfAwAAAWoAYAHAAE2sAl8DAAABPgM+Ak6YEgAAAIEHXQPAAE0/AV8DAAABFpgSHgCTzQEBXQPAAE0EAV8DAAABLgCBCMAATSZFAAABHJgSggDABbZegQkAAAAAwABNQQA+Ak6YBwAAAIG8XwMAAAEWmBiCAMAFtl6BCsAATUM+AUmYIByYKICYJMAFtiZuAQABg5gpwAW2qQAASpgzAYOYOsAFtqk/SZhNIRyYWIGYUcAFtjyAjAEAASsAwABN/EqYYQEcmG6BmGjABbY8bgAAAAAAPz0wmHYemJGW/AAAAAAGjQ4amKWYp5n/AACB2gAAAAEDmLCZ/wAAAAIBAZi2AAAAgRthAwFfAwAAYAPAAErYAAGYyAAAIIHZYQMAXwMAAAFqAGABwABNrAJfAwAAAT4GTpjbAAAAgOZfAwAAAE6Y7Jj6AACEFGADwABK2AEqPgJOmRkAAACBB10DwABNPwFfAwAAARaZGR4Ak80BAV0DwABNBAFfAwAAAS4AgQjAAE0mRQAAARyZGYQAwAW3moEJAAAAAMAATUEAPgJOmQ4AAACBvF8DAAABFpkfhADABbeagQrAAE1DPgFJmSccmS+AmSvABbdEbgEAAYWZMMAFt+UAAD4CPYqZRMAFt3qFmU3ABbflPYuZXsAFt4cpP0mZhoOZisAFt4dKmZkBgpmgwAW3ej9JmawhHJm3gZmwwAW3WoCMAQABKwDAAE38SpnAARyZzYGZx8AFt1puAAAAAAA/PTCZ1R6Z8Jb8AAAAAAaNDxqaBJoGm7cAAIHbAAAAAQOaEZu3AAAAAgEBmhcAAACBG2EDAV8DAABgA8AAStgAAZopAAAggdlhAwBfAwAAAWoAYAHAAE2sAl8DAAABPgZOmjwAAACA5l8DAAAATppNmlsAAIQUYAPAAErYASo+Ak6aegAAAIEHXQPAAE0/AV8DAAABFpp6HgCTzQEBXQPAAE0EAV8DAAABLgCBCMAATSZFAAABHJp6hADABbj7gQkAAAAAwABNQQA+Ak6abwAAAIG8XwMAAAEWmoCEAMAFuPuBCsAATUM+AUmaiByakICajMAFuKVuAQABhZqRwAW5RgAAPgNJmqWDmqnABbjoPgE9MJrEHprflv0AAAAAPz2KmvzABbjbhZsFwAW5Rj2LmxbABbjoKT9Jmz6Dm0LABbjoSptRAYKbWMAFuNs/SZtkIRybb4GbaMAFuLuAjAEAASsAwABN/EqbeAEcm4WBm3/ABbi7bgAAAAAAPz0wm40em6iW/AAAAAAGjRAam7ybvp0DAACB3AAAAAEDm8edAwAAAAEBAZvMAAAAgd1gA8AATKIAAF8DAAABPgU9HpvnwABLygIAAoCb9MAFuiAngd0APR6cFMAAS+ACAAKAnCXABbogJ4HdAE6cPpxLAACB3mADwABMogGTPgJOnGYAAACBB10DwABNPwFfAwAAARacZh4Ak80BAV0DwABNBAFfAwAAAS4AgQjAAE0mRQAAARycZoIAwAW6doEJAAAAAMAATUEAPgJOnFsAAACBvF8DAAABFpxsggDABbp2gQrAAE1DPgJJnHQcnH6AnHjABboggIwBAAGBnIHABbpjAMAATcZKnI8Bg5yWwAW6wT89iZylwAW6YxycsYGcpcAFumOBDQEAAZQAwABNyD0wnL8fnNDAAEv0BQAFgJzWwAW6IC4ngd0rgZzywAW6YwAAAAWe7AAFnxwABZ9PAAWfgAAFn7IABZ/cAAWgBgAFoCsABaBqAAWgqgAFoPgABaFOAAWhlgAFodEABaKJAAWjSQAFpEgABaVMAAWmUQAFpyYABaezAAWoxwAFqdoABauJAAWr7gAFrKYABazfAAWtNgAFraIABa5UAAWvRQAFsEcABbETAAWysgAFs34ABbPRAAW0KwAFtH4ABbTYAAW1VgAFtgkABbcnAAW4iAAFugMABbtHAAAALAKNGRbAAE5swABOcsAAZ3MDhQ8AAQAABIFnYAPAAE3vAVsBXQOM6AFfAwAAAAAEBI0cFsAATujAAE7tWIThhhUAXQOMGwFfAwAAASsEjR0WwABPCcAATykJhOKGFQBdA4wbAV8DAAABH8AATxKMIQEBXwMAAAErAASNHhbAAE88wABPRxiE44YVAF4DAAICAl8DAABfAwAAAAFXA8AARj0BXwMAAGADwABMogAEjR8WwABPVsAAT18Yg3qGFQBeAwABAQFbAAFXA4YZAVtgA8AAStgAAQWNQBbAAFOowABTqMAAVFsAAAADwABTtMAAVFsAAAACAALAAFO6AAAAhFphAwJfAwAAXwMAAGADwABMogFqAGABwABNrALAAFPYAAAAhB9hAwFbYAPAAErYAWoAYAHAAE2sAgBdA40ZAV8DAAABPwMIAI0eNcAAVAkAAAEAYQMCXwMAAF8DAABgA8AATKIBgMAAVAnABbz3IxzAAFQJgsAAVAnABb1KgIwBAAErAMAATfwewABUFIYmAAFfAwAAAACCwABUCcAFvUoBYQMCXwMAAF8DAABgA8AATKIIAI0fNcAAVD4AAAEAYQMBW2ADwABK2AGBwABUPsAFvRsjHMAAVD6CwABUPsAFvbaAjAEAASsAwABN/DTAAFRNA8AAVE3AAFRaAAAAAQEBwABUTgAAAIGKWwAAYAPAAErYAUrAAFRUASXAAFRWAIPAAFRUwAW+AF8DAACCwABUPsAFvbYBYQMBW2ADwABK2AkBwABTqIzqAAAAABsGjSEWwABWhMAAVozAAFelBAGCwAAAAAEDwABWncAAV6UAAAEAAASBZ2ADwABN7wFbAwEDwABWpwAAAIETXQPAAE0EAVsAwABWvAAAAIRaYQMCXwMBAF8DAQBgA8AATKIBagBgAcAATawCwABW2gAAAIQfYQMBW2ADwABK2AFqAGABwABNrAIAXQONGQFfAwEAAT4DTsAAVwvAAFcSAACA5l0DjRkBXwMBAAEfwABXFI1AAgFfAwEAAoHAAFckwAW+k4LAAFctwAW+twA+Ak7AAFdUAAAAgQddA8AATT8BWwEWwABXVB4Ak80BAV0DwABNBAFbAYDAAFdUwAW+gQCBCMAATSZFAAABHMAAV1SEAMAFvxyBCQAAAADAAE1BAD4CTsAAV0kAAAGBvFsBFsAAV16EAMAFvxyBCsAATUM+Ak7AAFdowABXagAAaV8DAQABJsAAV2gFhcAAV2zABb9vXwMBAD0cwABXgoPAAFd7wAW+4oCCAQABhsAAV4bABb+OAI0rSsAAV5QBg8AAV5vABb7iBo0iFsAAWIjAAFiQwABZOgQBhCEAAAABA8AAWJ/AAFk6AAABAAAEgWdgA8AATe8BWwMBA8AAWKwAAACBE10DwABNBAFfAwEAAMAAWMUAAACEWmEDAl8DAQBfAwEAYAPAAEyiAWoAYAHAAE2sAsAAWOMAAACEH2EDAVtgA8AAStgBagBgAcAATawCAF0DjRkBXwMBAAFKwABZBwE1wABZBwAAAQBdA40ZAV8DAQABH8AAWQeNQAIBXwMBAAKBwABZFMAFwCmCwABZHcAFwE0ANcAAWSoAAAEAXAEcwABZKoPAAFkHwAXAfINrAQABgMAAWTHABcAUAI0tg8AAWQfABcB8Bo0lFsAAWT/AAFlGwABZoQAAg5iGFQAAAAEDwABZUMAAWaEAAAEAAAQhYAPAAE3vAVsAAAAAXQPAAE46AV8DAQABSsAAWVwBH8AAWVyNQAIBXwMBAAI0wABZbAPAAFlswABZlQAAAAICAsAAWW8AAAA2XwMBAADAAFl0AAAAN18DAQAAAGADwABMogFKwABZegEcwABZei6E44YVAgACJsAAWYgAgMAAWYbABcFMXwMAACbAAFmQAIHAAFmOwAXBWV8DAAAAjR4WwABZly6DeoYVjR8ABo0pFsAAWabAAFmtwABZ4wAAgckAAAABA8AAWbTAAFnjAAABAAAEQ2ADwABN7wFbAAAAAF0DwABOOgFfAwEAAUrAAFm6AR7AAFm+wABORAICXwMAAF8DAQABLgGEFhbAAFnbLoOYhhWNJQaNJhbAAFnnwABZ68AAWhYAAITkhhUAAAABA8AAWfPAAFoWAAAAAgICwABZ9gAAIIOIXwMAAADAAFn8AAAgg4lfAwAAAABgA8AATKIBSsAAWgMBHMAAWgMuhOOGFQIAAoDAAFoPwAXCSoHAAFoTwAXCWACNHgaNOBbAAFowwABaQMAAWmoBAIEIAAAAAQPAAFpJwABaagAAAAAAAABdA8AATT8BXwMAAAFKwABaTAEfwABaTIy3AQFfAwAAAS4ABo05FsAAWm/AAFp3wABahwEAgcgAAAABA8AAWn7AAFqHAAAAAAAAAGADwABMogFKwABagQEWwABagS6Ci4YVjCoGjToWwABai8AAWpTAAFqsAQCA4wAAAAEDwABanMAAWqwAAAAAAAAAYAPAAErYAUrAAFqfARzAAFqlFsAAWp8uhOGGFY0cgIwBAAErAMAATfwGjTsWwABasMAAWrnAAFrUAQCDYgAAAAEDwABaxMAAWtQAAAAAAAAAYAPAAErYAUrAAFrHASEcwABazRbAAFrHLoThhhWNHICMAQABKwDAAE38Bo08FsAAWtnAAFrfwABbPQEAgcIAAAABA8AAWuXAAFs9AAAAAAAAAF8DAAABPgJJwABa6xzAAFr2FsAAWu8ugouGFYwqgIwBAAGTAMAATcY9MMAAWvwewABbF5b8AAAAAD9KwABbKAEWwABbNhbAAFsvLoQ+hhWMM4LSjB0GjT0WwABbQsAAW0jAAFukAQCB1QAAAAEDwABbTcAAW6QAAAAAAAAAXwMAAAE+AknAAFtTHMAAW14WwABbVy6Ci4YVjCqAjAEAAZMAwABNxj0wwABbZB7AAFt/lvwAAAAAP0rAAFuQARbAAFudFsAAW5cuhO2GFYw0gtKMHQaNPhbAAFupwABbr8AAXEcBAIHXAAAAAQPAAFu2wABcRwAAAAAAAABfAwAAAT4DScAAW7wcwABbxxbAAFvALoKLhhWMKoCMAQABkwDAAE3GPTDAAFvNHsAAW+iW/AAAAAA/ScAAW/kcwABcBBbAAFv9LoKLhhWMKoKMAQABlADAAE3SPTDAAFwJHsAAXCSW/QAAAAA/SsAAXDMBFsAAXEAWwABcOi6E4YYVjRyC0owdBo0qFsAAXFvAAFxgwABctAAAgcQAAAABA8AAXGjAAFy0AAAAAQEBwABccAAAAIG8YAPAAE3vAABgA8AAStgBPgFKwABcfwEiHMAAXIYug3qGFQEAAYDAAFyQwAXFlQCNHwAcwABcrBzAAFycLoTnhhUBAAEmwABcowGAwABco8AFxZVfAwAAAIw7gIwBAAGTAMAATcYGjSsWwABcucAAXL7AAF1cAACAggAAAAEDwABcwcAAXVwAAAABAQHAAFzEAAAggbxfAwAAAABgA8AAStgBPgROwABc18AAXN8AAIRaYAPAAEyiARzAAFzhLoTnhhUBAAGAwABc6MAFxioAjDtJwABc9hzAAF0CgcAAXPrABcZDgIwBAAGTAMAATcZKwABdCAEqPz0cwABdGi6E7IYVAgACH8AAXSaMIQEBXwMAAAGAwABdNcAFxioAgcAAXT/ABcZDAIw/SsAAXU0BKQaNLBbAAF1hwABdZsAAXc4AAINsAAAAAQPAAF1swABdzgAAAAEBAcAAXXQAAACC/GADwABN7wAAYAPAAErYAT4CScAAXYIhHMAAXYcug3qGFQEAAYDAAF2RwAXG9QCNH0rAAF2aASo/SsAAXawBIRzAAF3DHMAAXbMug46GFQEAASbAAF27AYDAAF27wAXG9V8DAAAAjD6AjAEAASsAwABN/AaNLRbAAF3TwABd2MAAXp8AAINrAAAAAQPAAF3ewABenwAAAAEBAcAAXesAACCBE10DwABNBAFfAwAAAABcAT4BPgJOwABeDQAAAIEHXQPAAE0/AV8DAAABFsAAXg0eAJPNAQFdA8AATQQBXwMAAAGAwABeDcAFx5cAgQjAAE0mRQAAARzAAF4NgQDABce0gQkAAAAAwABNQQA+Ak7AAF4CAAAAgbxfAwAAARbAAF4XgQDABce0gQrAAE1DPgJOwABeI8AAXisAAIRaYAPAAEyiARzAAF4tLoTnhhUBAAGCwABeNMAFyA0AjDtJwABeRCEcwABeUIPAAF5IwAXIL4CMAQABkwDAAE3GPgE9HMAAXmAuhOyGFQIAAh/AAF5sjCEBAV8DAAABgsAAXnvABcgNAIPAAF6FwAXILwCMPz8GjS4WwABepMAAXqnAAF8vAACDjwAAAAEDwABessAAXy8AAAABAQHAAF7EAAAAgRNdA8AATQQBYAPAAE3vAABcAT4BPgJOwABe6wAAAIEHXQPAAE0/AWADwABN7wEWwABe6x4Ak80BAV0DwABNBAFgA8AATe8BgMAAXuvABcjWAIEIwABNJkUAAAEcwABe64EAwAXI9YEJAAAAAMAATUEAPgJOwABe4AAAAIG8YAPAAE3vARbAAF71gQDABcj1gQrAAE1DPgFJwABe/RzAAF8BLoN6hhUBAAGCwABfC8AFyVIAjR89HMAAXxUug46GFQEAASbAAF8dAYLAAF8dwAXJUl8DAAAAjD4/Bo0vFsAAXzTAAF85wABiRQAAhAoAAAABA8AAX0LAAGJFAAAAAQEBwABfVAAAAIETXQPAAE0EAWADwABN7wAAXAE+BE7AAF+0wABfvgAAhRBdA40ZAV8DAAABH8AAX8CNQAIBXwMAAAIWwABf0C6E44YVjR4WwABf3S6DeoYVjR8ATsAAX/HAAGADAACDk2ADwABMogEWwABgBS6DYYYVjCs+Ak7AAGAzAAAAgQddA8AATT8BYAPAAE3vARbAAGAzHgCTzQEBXQPAAE0EAWADwABN7wGAwABgM8AFyd8AgQjAAE0mRQAAARzAAGAzgwDABcpcgQkAAAAAwABNQQA+Ak7AAGApAAAAgvxgA8AATe8BFsAAYD2DAMAFylyBCsAATUM+AknAAGBFIRzAAGBbgsAAYEnABco6gIwBAAEWwABgXi6DYYYVjCsAwABNxj4BPTDAAGCyH8AAYLjAAExFAQABLgA/ScAAYRciHMAAYRsug3qGFQEAAYTAAGElwAXKuQCNHwAcwABhPxzAAGEwLoTnhhUBAAEmwABhNwGEwABhN8AFyrlfAwAAAIw7gIwBAAGTAMAATcY+AT0cwABhWYHAAGFPwAXJ/ICCAQABFsAAYWMWwABhXS6E4YYVjRyC0owdAI0rP0nAAGG/IRzAAGHUFsAAYc2BwABhw8AFyfyCi4YVjCqAjAEAARbAAGHXLoKLhhWMKgDAAE3GPgM9F8AAYecuhOGGFRbAAGH5gcAAYe/ABcn8hOGGFY0cjRw9F8AAYgYugouGFRbAAGIZgcAAYg/ABcn8gouGFYwqjCo9F8AAYicug2GGFRzAAGI5FsAAYicug2GGFYwrgQ0BAAGUAMAATciMKz8GjTAWwABiSsAAYkzAAGLkAACDiwAAAAEDwABiUsAAYuQAAAABAQHAAGJaAAAAgvxgA8AATe8AAF8DAAABPgRJwABiaCEcwABibS6DeoYVAQABgMAAYnfABcxpAI0fSsAAYoABKz9OwABilcAAYpoAAIToYAPAAEyiARzAAGKcLoTnhhUBAAEmwABiowGAwABio8AFzGlfAwAAAIw7ScAAYrAhHMAAYrmBwABitMAFzKmAjAEAAZMAwABNxkrAAGK/ASs/SsAAYtABFsAAYt0WwABi1y6E4YYVjRyC0owdBo0xFsAAYunAAGLwwABjwAAAhA0AAAABA8AAYvzAAGPAAAAAAQEBwABjCQAAAIIdXQPAAE46AWADwABN7wAAXQPAAE46AV8DAAABPgNOwABjHcAAYyQAAIDmXQPAAE46AV8DAAABH8AAYyaNQAIBXwMAAAIWwABjNi6E44YVjR4WwABjQy6DeoYVjR8APgJOwABjZQAAAIEHXQPAAE0/AV8DAAABFsAAY2UeAJPNAQFdA8AATQQBXwMAAAEuAIEIwABNJkUAAAEcwABjZYIAwAXNsYEJAAAAAMAATUEAPgJOwABjWgAAAIG8XwMAAAEWwABja4IAwAXNsYEKwABNQz4BScAAY3McwABjfYDAAGN3wAXNSIHEAQABg8AAY4bABc4CAMAATkY9HMAAY5eBwABjkMAFzW+AggEAAYPAAGObwAXOAgDAAE5HP0rAAGOvAYHAAGO2wAXNbwaNMhbAAGPFwABjzMAAZJsAAIQOAAAAAQPAAGPWwABkmwAAAAEBAcAAY+MAAACCHV0DwABOOgFgA8AATe8AAF0DwABOOgFfAwAAAT4DTsAAY/fAAGP+AACA5l0DwABOOgFfAwAAAR/AAGQAjUACAV8DAAACFsAAZBAuhOOGFY0eFsAAZB0ug3qGFY0fAD4CTsAAZD8AAACBB10DwABNPwFfAwAAARbAAGQ/HgCTzQEBXQPAAE0EAV8DAAABLgCBCMAATSZFAAABHMAAZD+CAMAFzwuBCQAAAADAAE1BAD4CTsAAZDQAAACBvF8DAAABFsAAZEWCAMAFzwuBCsAATUM+AUnAAGRNIRzAAGRYgMAAZFLABc6igcQBAAGDwABkYcAFz1wAwABORj0cwABkcoHAAGRrwAXOyYCCAQABg8AAZHbABc9cAMAATkc/SsAAZIoBgcAAZJHABc7JBo0zFsAAZKDAAGSnwABk4wAAhAwAAAABA8AAZKzAAGTjAAAAAQEBwABktAAAIIIdXQPAAE46AV8DAAAAAF0DwABOOgFfAwAAAT4BSsAAZMEBNcAAZMgAAAEAXQONGQFfAwAAARzAAGTILoURhhUAAAAAjSc1wABk0gAAAQBcARzAAGTSgcAAZMjABdAog2sBAAGAwABk2cAFz/0AjS2BwABkyMAF0CgGjScWwABk6MAAZPjAAGWHAACFEYYVAAAAAQPAAGT+wABlhwAAAAAAAABdA40ZAV8DAAABPgROwABlC8AAZQ8AAITWXQONGQFfAwAAAR/AAGURjUACAV8DAAACFsAAZSEuhOOGFY0eFsAAZS4ug3qGFY0fAD0XwABlQoDAAGU+wAXQtIKLhhUWwABlSy6Ci4YVjCqMKj0XwABlW4DAAGVXwAXQtIThhhUcwABlYy6FB4YVAQABFsAAZW0uhOGGFY0cAI0ojRxKwABleQGAwABlgMAF0LQGjSgWwABmFsAAZijAAGbjAACFB4YVAAAAAQPAAGYxwABm4wAAAAEBAcAAZkQAACCE6l0DjBsBXwMAAAAAXQOMGwFfAwAAAT4CScAAZlAcwABmWYDAAGZUwAXRe4CMAQABKwDAAE38SsAAZmIBKz9KwABmcwE1wABmegAAAQBdA4wbAV8DAAABH8AAZnqMIQEBXwMAAAEWwABmkYDAAGaMwAXRe4LSjB0ANcAAZp4AAAEAXAEXwABmnoHAAGZ6wAXRyITbHMAAZqUuhQeGFQEAARbAAGa0gMAAZq/ABdF7hNuMHgCNKIweNcAAZsIAAAEAXAEXwABmwoHAAGZ6wAXRyITcHMAAZsouhQeGFQEAARbAAGbZgMAAZtTABdF7hNyMHwCNKIwfgcAAZnrABdHIBo00FsAAZujAAGbtwABnBwAAgOcAAAABA8AAZvLAAGcHAAAAAAAAAFwBPgE9HMAAZvsuhO6GFQAAAACMQAaNNRbAAGcMwABnE8AAZyYAAIHLAAAAAQPAAGcYwABnJgAAAAAAAABdA8AATjoBXwMAAAFKwABnHgEcwABnHi6FEYYVAAAAAI0nBo02FsAAZyvAAGcywABncQAAgO8AAAABA8AAZzrAAGdxAAAAAAAAAGADwABOiQFKwABnQAEewABnTYlCAwADLieEESeEEgAAAAW+TQAFv+AABcDiAAXBtwAFwiEABcKWAAXC4AAFwyEABcNyAAXDxAAFxEEABcS+AAXFbgAFxgMABcbOAAXHcAAFyK8ABcm4AAXMQgAFzSEABc57AAXP1gAF0H0ABdFSAAXSggAF0r8ABdMJAAXTUAAAABsAAgSGHBeGE4Y4BoUShhUAYAPAAEyiAWqGLmADwABMooM4BIYdHZ8EnxoFhROGFQBdA8AATUYBWwExnxhbAAcGhiAYgeKCCYKZAAGFFIYVAWqB42ADwABKn4KlAAABA4IXgpkAAAABAQGCHQAAAIONXQPAAE1GAVsAAFwBPgJOgjSCOwABgchgA8AATKIBFoJFgII9wAXULoHIwABNdkWCTwGCWIJaAACDZmADwABMogGTARyCYYKCX8AF1GeAuwEAAYGCY8AF1EQAwABN0AGKgm3ABdRnHIJrgoJtwAXUZ4ENAQABlADAAE3IPgE9HIKBHIJ9gIJ2wAXULoLRAQABgoJ+wAXUZwDAAE1Vg+SGFQAAAAAABoYhFYFIgU2BawABhRWGFQAAAAEDgVuBawAAAAICAoFcAAAANlsAgV8AAAA3WwAAYAPAAErYAUqBZQEcgWeAgWXABdT5gIwBAAGBgWrABdUBAMAATfwGhiIVgbSBuIHZAAGFFoYVAAAAAQOByIHZAAAAAQEBgckAAAA2WwAAYAPAAEyiAUqBzwEWgdGAgc/ABdVPghzAAE4CBoYjHZ9cn2GgBQABhReGFQAAAAEDn3SgBQAAAAEBAZ98AAAAg/1gA8AATe8AAGADwABK2AE+AkWfgwGfjJ+OAACDZmADwABMogGTARyflYGfk8AF1a6AuwEAARafqRqfl4YdgcjAAE12AMAATdABiZ+xwAXVrhyfsoGfscAF1a6BDQEAAZQAwABNyD4BSZ+8Hp/AwABGdQIAAoCfysAF1ZIcn94an82GHYLRAQABgZ/fwAXVrgDAAE1VAEqf5AEpP0qf9wEqBoYkHaBRoFau2wABhRiGFQAAAAEDoG2u2wAAAAICAqB3AAAAhCJdA8AATQQBWwCgjgAAAIQuXQPAAE1GAWADwABOiQAAXAE+D06jlqOdAACByGADwABMogGTTqOoo64AAIGbYAPAAEyiAZNOo76jwQAAhBBdA8AATT8BWwEWo8yAo8PABdZYgQjAAE0mQ6RPIhykXYKkVsAF1oOAuwEAAWqkX2ADwABMooQfAMAATdABHKR0g6RuwAXWlIC7AQABaqR2YAPAAEyiTADAAE3QPgVJpIchHKSPhKSMwAXWpYEJAAAAAMAATUFKpJsAP06krqSzAACAwmADwABOiQEkpMQBFqS7hKS4wAXWpYEKwABNQz0cpNCBpMrABdZogIIBAAGFpNTABdcoAMAATVc9iqTfwAXWgxyk5oKk38AF1oOBDQEAARyk9Rak7oWk6cAF1yiByMAATo2BDQEAAWqk92ADwABMohYAwABNyADAAE3IPYulBcAF1pQcpQqDpQXABdaUgQ0BAAGUAMAATchOpRwAAACFGWADwABOiQBOpTgAAACFGmADwABOiQBOpc0AAACFG2ADwABN7wBOpeMAAACFHGADwABN7wBJpe8hHKX3hKX0wAXWpYEJAAAAAMAATUE+A0mmCRymE4OmDcAF1pSBWwEAARymIGqmFmADwABMokyBDQEAAWqmImADwABMohYAwABNyADAAE3RSqYtAD89jqY5wAXX1xymUIGmSsAF1miELwAAAADAAE1lPY2mYsAF18gcpnyBpnbABdZohC8AAAAAwABNZT4DPY+mmcAF1+YWpqqEpqfABdalgQrAAE1DPYumt8AF1pQcpryDprfABdaUgQ0BAAGUAMAATchJpsQhHKbMhKbJwAXWpYEJAAAAAMAATUE+BEmm4Bym6oOm5MAF1pSBWwEAARym92qm7WADwABMokyBDQEAAZQAwABNyADAAE3RPgI9HKcMgacGwAXWaICCAQABJKceAYenEsAF1+YAwABNV0qnKQA/PY6nP8AF19ckp14Bh6dSwAXX5j2Np2bABdfIHKeAgad6wAXWaIQvAAAAAMAATWU9iqeUwAXWgxynm4KnlMAF1oOBDQEAARyntBanrYannsAF19eByMAATo2BDQEAAWqntmADwABMohYAwABNyADAAE3IPgc9FafTwAXX9QgWp+GEp97ABdalgQrAAE1DPYun8MAF1pQcp/WDp/DABdaUgQ0BAAGUAMAATchAHKhUg6hOwAXWlIC7AQABaqhWYAPAAEyihCIAwABN0KhOqF4AQ6hnHKhxhKhuwAXWpYEJAAAAAMAATUE+BD2PqIfABdfmFKiVwAXX9QgAPRWop8AF1/UIFqi1hKiywAXWpYEKwABNQz2LqMbABdaUHKjLg6jGwAXWlIENAQABlADAAE3ISajXHKjhg6jbwAXWlIKMAQABaqjjYAPAAEyihCIAwABN0j4DQ6pzIhyqgYKqesAF1oOCjAEAARyqnhyqj2qqg2ADwABMooQfgQYBAAFqqpFgA8AATKJMAMAATcmBBgEAAWqqoGADwABMohYAwABNyQDAAE3SAByqwIOqusAF1pSCjAEAAWqqwmADwABMokwAwABN0j4CPYqq28AF1oMcquKCqtvABdaDgQYBAAEcqv8WqvgcquuBquXABdZohC8AAAAAwABNZYHIwABOjYENAQABaqsBYAPAAEyiFgDAAE3IAMAATck9i6sXwAXWlByrHIOrF8AF1pSBBgEAAZQAwABNyT0cqzyBqzbABdZogIIBAAEnhC0AwABNV0qrUgA/PY2rcsAF18gkq5QBh6uIwAXX5j2Oq5zABdfXJKu4ARSrr8AF1/UIAD2Kq8DABdaDHKvHgqvAwAXWg4ENAQABHKv7HKvgFqvZhqvKwAXX14HIwABOjYENAQABFqv0haviwAXXyIHIwABOjQDAAE3IgQ0BAAEcq/+Vg8YBAAFqrAFgA8AATKIWAMAATcoAwABNyADAAE3ITqyBAAAAhR1gA8AATokASayMHKyWg6yQwAXWlIKMAQABHKylFqyegayYwAXWaIHIwABNdoENAQABaqynYAPAAEyiFgDAAE3IAMAATdI+Aj0VrLjABdwfCSeELT2KrM3ABdaDHKzUgqzNwAXWg4ENAQABHKzkaqzXYAPAAEyiTIENAQABaqzmYAPAAEyiFgDAAE3IAMAATcg/Q62VIhyto4KtnMAF1oOCjAEAAWqtpWADwABMooQfAMAATdIAHK3BFq26ga20wAXWaIHIwABNdoKMAQABaq3DYAPAAEyiTADAAE3SPgI9iq3UwAXWgxyt24Kt1MAF1oOBBgEAARyt+Bat8Ryt5IGt3sAF1miELwAAAADAAE1lgcjAAE6NgQ0BAAFqrfpgA8AATKIWAMAATcgAwABNyUmuCByuFBSuDMAF3B8JAICMAQABKwDAAE6YPgI9Fa4lwAXcHwknhC09iq48wAXWgxyuQ4KuPMAF1oOBDQEAARyuU2quRmADwABMokyBDQEAAWquVWADwABMohYAwABNyADAAE3IP0muayEcrncUrm/ABdwfCQCAjAEAASsAwABOmD4BPRyujIGuhsAF1miAggEAARSukMAF3B8JAADAAE1XPz0crqaBrqDABdZogIIBAAGFrqrABdfIAMAATVc9HK7Gga7AwAXWaICCAQABhq7KwAXX1wDAAE1XBoYlFpijmKeY6AABhR6GFQAAAAEDmLaY6AAAAAICApi/AAAANlsAmMoAAAA3WwAAYAPAAEyiAUqY0AEemNvAAErnAgACJpjjBYCY48AF3k1dA8AASuQBWyaY5gWBmObABd5VXQPAAErkAVsABoYmFpjrmPmaGQABhR+GFQAAAAEDmQuaGQAAAQAABINaYAPAAE3vAVsAAAAAXgMAAgICXwMAAF8DAAAAAVcDwABGPQFfAwAAYAPAAEyiAT4DTplumXYAAIRaYAPAAE3vAWqZg2EDAl0DwABK5AFbXQPAAErkAVtgA8AATKKEJUmZjiWZmgCAmZLABd7sXgMAAgICXwMAAF8DAAAAAVcDwABGPQFfAwAAYAPAAEyiPgFKmbIBFJm5wAXe7AABXgMAAgICXwMAAF8DAAAAAVcDwABGPQFfAwAAYAPAAEyiP0qaAQFqmghhAwJbW2ADwABMooQqEBQVFhcYGRobHB0eHyAhIiMABd+NAAJiZgACd+sAAoQzAAKOeAACj5sAApEVAAKTZgAClTQAApimAAKZsgACmr0AArQFAAK12QACvS4AAr6rAALCbwACw3UAAsaKAALMDQACzPoAAs3nAALcCwAC9ecAAvuSAAL8qwAC/bAAAxd+AAMltQADP6QAA0ViAANGjgADRx0AA1VUAANvQwADdQEAA3g7AAN6qwADfaUAA4M5AAOEOwADobwAA7d3AAO4gQADulIAA78VAAPArQADyHwAA81BAAPhtwAD5XMAA+gmAAPwCwAD9XUAA/9LAAQBwAAEBJgABDpoAAQ7GAAEcOoABHZzAASEnQAEh/kABIrTAASMpAAEj/0ABJhxAASb6QAEnP8ABKEGAASjFAAEpRcABKgAAASrEwAErE0ABLtkAAS9yQAE51EABOpLAAUHvQAFJS0ABSXdAAVC/gAFSIEABUk4AAVJ5AAFV2UABVgFAAVmOwAFepoABYGDAAWEgAAFhlQABYdQAAWIkAAFigUABZ6JAAW8AAAF08UAAABhAAXUBAAF1NoABdUwAAXVcwAF1jkABd4uAAXemgAF340AAAAHAAIGjUGFICQAAAWB+wAAk7cAAQEDhSEDhSKCOAAAnIYAAQEChSOFJIg1AAABAACISgAAnIYAAIhkAACTtwABAQKFJYUmAA0AhScAhSgAhSkAhSoAhSsAhSwAhS0AhS4AhS8AhTAAhTEAhTIAhTMAVwKNaCWGyobQiRsDhTQAAAFdA4/MAl0DwABNRgFgA8AATKJgA8AATe8AAAIEjWslhzOHOwmFNY1BAGEDAmADwABN72ADwABN71sABI1sJYdKh1kJhTaNQQBgA8AAStgAAQWNcSWHXodeh5MAAAADh26HkwAAAAICAod0AAAEhTVhAwJgA8AATe9gA8AATe9bAIeDAAAEhTZgA8AAStgAAGADjWgBPwMIAY1rgADABeI6CAGNbIEAwAXiUgkBh16P1QAAAAACBo1uJYeYh5+IjQAAgawAAAABA4emiI0AAAABAQGHsQAAIIU3XQPAAE1GAWADwABMogAAYAPAAE3vAT4GTofCh8kAAIU4YAOOewEeh+COkgIAAhaH7i6FNY1BjWsWh/guhTaNQY1sAD0XiBWBiA7ABeLEhTmAiB3ABeKkjn49F4gvgYgowAXixIU6FohAgIg6wAXipIHIwABNdo5/PRyIU4GITMAF4sSFOwEAAZMAjiA9HIhogYhhwAXixICNAAAAAI4RSoh1ARaIg4GIfMAF4sSA5o4xBo1vJYiSiKWJGQAAhTwAAAABA4i7iRkAAAABAQGIyQAAIDxdA8AATlcBYAPAAE3vAABgA49kAT4BSojVAR+I4I6YAwADFoj1LoU1jUGNa4CI/8AF43kWiQUuhTaNQY1sAAAABeKHAAXjXAAF470AAAACAo1yJYnSieGLrweFPQAAAWADwABN7wAAAAEFjYIAAAAABAAAAwAAAAAAAAAAAGADjXIBPwEJAQDAAE4FAAAAAAwGjXQlifOJ+IoUAACFPgAAAAEDigSKFAAAAAEBAYoMAAAAImADwABOiQAAXAE+AAaNdSWKGIodijYAAIU/AAAAAQOKKYo2AAAAAQEBii4AAAAiYAPAAE25AABcAT4ABo12JYo6ij+KVwAAhUAAAAABA4pJilcAAAABAQGKTwAAACJgA8AAStgAAFwBPgAGjXcliluKYIpuAACFQQAAAAEDimqKbgAAAAAAAABcAT4ABo14JYpyineKhgAAhUIAAAABA4qCioYAAAAAAAAAXAE+AAaNeSWKioqPip8AAIVDAAAAAQOKm4qfAAAAAAAAAFwBPgAGjXoliqOKqIq5AACFRAAAAAEDirWKuQAAAAAAAABcAT4ABo17JYq9isKKzwAAhUUAAAABA4rLis8AAAAAAAAAXAE+AAaNfCWK04rYiuYAAIVGAAAAAQOK4ormAAAAAAAAAFwBPgAGjX0liuqK74r/AACFRwAAAAEDivuK/wAAAAAAAABcAT4ABo1+JYsDiwiLFAAAhUgAAAABA4sQixQAAAAAAAAAXAE+AAaNgCWLo4uni60BAoDmAAAAAQOLrYutAAAAAAAAAFsAAAAF5A8ABeQ+AAXkbQAF5JwABeS+AAXk4AAF5QIABeUkAAXlRgAF5WgABeWKAAXlrAAF5cwAAAAMAo2DJYyZjJ+TqAOFSQAAAWADjXIAAAQEjYUljcSNzhiBEQBdA8AATUYBWwExjcxbAASNhiWOCI4YGIVKAFsBKwSNhyWOUY5UGILSAGADwABOiQErBI2IJY6DjogYIgBbASsBBY2aAAAAAAQAAAMAAAAAAAAAAABgA42DAT8BCQEAjYIAAAAADgaNiiWO047Yjz4AAIVLAAAAAQOO5Y8+AAAAAAAAAFwBPgJJju4ljwMAFo7yLoVKjYZdA8AATXgCW1s9HI8RFo8LLoERjYWAggEAARaPFS6C0o2HAMAATVc/PRyPJRaPHy6BEY2FgIIBAAEWjykuhUqNhgDAAE1XBo2LJY+Uj5mQMAAAhUwAAAABA4+lkDAAAAAAAAAAXAE+Az0Xj64uIhaPti6FSo2GjYg9F4/MLoVKHI/lFo/fLoERjYWELwAAAADAAE1ljYZJj/clkAwAFo/7LoVKjYZdA8AATXgCW1s9F5AULoLSJpAUBRyQIBaQGi6BEY2FhC8AAAAAwABNZWADwABOiY2HPwaNjCWQNZA6kHEAAIU+AAAAAQOQRpBxAAAAAQEBkE4AAAAiYAPAAE6JAABcAT4BPReQYC4igJBowAXnso2IBo2NJZB2kHuQrwAAhT8AAAABA5CHkK8AAAABAQGQjAAAACJgA8AATbkAAFwBPgE9F5CeLiKAkKbABefwjYgGjY4lkLSQuZDsAACFQAAAAAEDkMOQ7AAAAAEBAZDJAAAAImADwABK2AAAXAE+AT0XkNsuIoCQ48AF6C6NiAaNjyWQ8ZD2kR4AAIVBAAAAAQORAJEeAAAAAAAAAFwBPgE9F5EOLiIrjYgGjZAlkSORKJF7AACFQgAAAAEDkTORewAAAAAAAABcAT4CPRyRPC6FSwAAAACNij0XkVEuhUoykXVgA8AATolbAI2GBo2RJZGAkYWRuwAAhUMAAAABA5GRkbsAAAAAAAAAXAE+Aj0XkZougtImkZoFFpGgLiKNiGADwABOiY2HPReRqy4iK42IBo2SJZHAkcWSJwAAhUQAAAABA5HSkicAAAAAAAAAXAE+A06R35HjAACBq10DwABNeAJbWwEmkd8FFpHlLoVKjYZdA8AATXgCW1s9HJH+gJH7wAXpJYEMAgACFpH/LoLSjYcWkgYuIo2IAMAATY09F5IRLoLSF5IXLiIrjYiNhwaNkyWSLJIxklUAAIVFAAAAAQOSOpJVAAAAAAAAAFwBPgE9HJJDLoVMAAAAAI2LBo2UJZJakl+SoAAAhUYAAAABA5JpkqAAAAAAAAAAXAE+Aj0cknIuhUsAAAAAjYo9F5KHLoVKMZKaWwCNhgaNlSWSpZKqkvAAAIVHAAAAAQOStpLwAAAAAAAAAFwBPgI9HJLQFpK/LoVKjYaAggEAARaS1C4ijYgAAD0XkuAuIiuNiAaNliWS9ZL6kx0AAIVIAAAAAQOTApMdAAAAAAAAAFwBPgE9HJMLLoVMAAAAAI2LBo2YJZNfk2OTpgEAgOYAAAABA5Nqk6YAAAAAAAAAWwE+AkAck4gWk3cuhUqNhoCMAQABKwDAAE38k3eTjwBKk5YBFpOdLiKNiAAABeaNAAXnBAAF55UABefTAAXoEQAF6E8ABeh6AAXovQAF6QIABemBAAXpsAAF6e0ABeoyAAXqYQAF6qoAAAAOAo2bJZOrk7GVTgOFTQAAAWADjYMAAAEEjZ0llA6UFQmFTgBhAwJgA8AATe9gA8AATe9bAAEFjaQllBmUGZQ7AAAAA5QtlDsAAAABAQGUMwAABIVOYQMCYAPAAE3vYAPAAE3vWwAAYAONmwE/AggBjZ2AAMAF6zgJAZQZjZoAAAAAAwaNnyWUQJRFlL0AAIVHAAAAAQOUUZS9AAAAAAAAAFwBPgNOlF+UZAAAhEZdA8AATUYBWwEmlF8FFpRmLoVKjYZdA8AATUYBWz0XlHwuIhyUhC6FTgIAAhaUkYCUjMAF65CByMAATXYWlJkuIo2IAI2djYg9HZSrhUcAAAAAjZUGjaAllMKUx5UXAACFRAAAAAEDlNSVFwAAAAAAAABcAT4CPReU3S4iHJTlLoVOAgACFpTtLoLSjYcWlPIuIo2IAI2djYg9HZUEhUQAAAAAjZIGjaIllRyVIJVMAQCA5gAAAAEDlSeVTAAAAAAAAABbAT4BSpUtARyVNC6FTgIAAisWlUIuIo2IAI2dAAAF620ABevsAAXsPQAF7HcAAAADAo2lJZZQllacWQOFTwAAAWADwABN7wAABASNpyWWeZaJBoVQAGADwABMogFqlodgA8AATKJUBI2oJZaelrIGhVEAYAPAAEyiAWqWsWADwABMooQtBI2pJZbAlsQYhEYAYAOsFwAEjaollsyW1hiByABgA8AATKIBkwEFjbUlltqW2pc8AAAAA5bnlzwAAAABAQGW7AAAAIS3YAPAAEyiAABgA42lAT8CCACNqR6XEKwbAQABHpcaja8BAAGAlyvABe0eAAAJAZbawABOBQAAAAAGBo2sJZdBl0mXYAEAhLgAAAABA5dSl2AAAAAAAAAAYAPAAEyiAUqXVQEWl1oWl1UuhEaNqYHIwABNdgaNryWY0pjdmb8AAYVSjUEAAAABA5jtmb8AAAABAQGY8gAAAIVQYAPAAEyiAABgA8AATKIBPgQ9iJkFwAXttxyZEYCZBcAF7beBDQEAAWqZFGADwABMooQtAMAATchJmSocmTqAmS7ABe23gLsBAAGAmTzABe23AMAATdBKmUkBgJlQwAXttz89iJlhwAXttxyZgRyZfICZcMAF7beBDQEAAZYAwABNyIChAQABHJmDloDYAAAAAMAATL0AwABMukqZqQGAmbDABe23Bo2wJZnsmfGa3QAAhVMAAAABA5n/mt0AAAABAQGaBAAAAITOYAPAAEyiAABcAT4FTpohmiYAAIRGYAOsFwEWmi0uhEaNqUmaNxyaR4CaO8AF7oCBWwEAARaaT4GaSsAF7pSByMAATXYAwABN0UqaVwA/TpptmnUAAIVUYAOsFwEemnusGwEAAYCahcAF7oAAPRyan4Kal8AF7taEWAQABJMWmrCBmqvABe6UgcjAAE12gZq4wAXulJMAwABNaz0XmssuhEaCmtLABe7WjakGjbElmuKa6ZtLAACFVQAAAAEDmvKbSwAAAAAAAABgA8AATokBPgJOmwKbCQAAgOZgA8AATokBHpsPwABOsQMAAxabJC6ERo2pkxabLS6ByI2qAEqbOgGAm0HABe9ZBo2yJZv6m/6cIgAAhVYAAAABA5wGnCIAAAAAAAAAYAPAAE25AUqcDAEenBDAAE3kAQABHJwWLoVVAAAAAI2xAAaNsyWcJpwtnFcAAIVXAAAAAQOcOJxXAAAAAAAAAGADwABLUAFKnD4BHpxFwABLbgEAARycSy6FVQAAAACNsQAAAAXtXgAF7ZgABe5jAAXvMQAF748ABe/PAAXwDwAAAAYCjbYlnTCdP8AAsHIHhVgAAQAABCFgA8AATe8BWwFgA8AATe8AAFYEjbglowGjDgaFWQBgA8AATKIBaqMNYAPAAEyiGgSNuSWjI6MzBoVaAGADwABMogFqozJgA8AATKIUBI26JaNIo1kGhVsAYAPAAEyiAWqjWGADwABMohYEjbslo26jfQaFXABgA8AATKIBaqN8YAPAAEyiTASNvCWjrKPBBoVdAGADwABMogFqo8BgA8AATKIcBI29JaPqo/4GhV4AYAPAAEyiAWqj/WADwABMohgEjb4lpCekNgaFXwBgA8AATKIBaqQ1YAPAAEyiGgSNvyWkS6RaBoVgAGADwABMogFqpFlgA8AATKIYBI3AJaRvpH0GhWEAYAPAAEyiAWqke2ADwABMooQwBI3BJaUkpS0GhWIAYAPAAEyiAWqlLGADwABMohoEjcIlpUKlUAaFYwBgA8AATKIBaqVOYAPAAEyiVASNwyWlZaV0BoVkAGADwABMogFqpXJgA8AATKJUBI3EJaXbpgoGhWUAYAPAAEyiAWql/WADwABMohoEjcUlph+mTAaFZgBgA8AATKIBaqZBYAPAAEyihDMEjcYlpmKmmAaFZwBgA8AATKIBaqaLYAPAAEyiFASNxyWmrablBoVoAGADwABMogFqptpgA8AATKKENgSNyCWm+qc0BoVpAGADwABMogFqpydgA8AATKKEOQSNySWnSqeCBoVqAGADwABMogFqp3VgA8AATKJOBI3KJaeXp88GhWsAYAPAAEyiAWqnxGADwABMooQ8BI3LJafkqB4GhWwAYAPAAEyiAWqoEWADwABMooQ/BI3MJagzqGsGhW0AYAPAAEyiAWqoYGADwABMooRCBI3NJaiAqLwGhW4AYAPAAEyiAWqor2ADwABMooRFBI3OJalNqXQGhW8AYAPAAEyiAWqpaWADwABMooQzBI3PJampqbkGhXAAYAPAAEyiAWqptWADwABMohwEjdAlqc6p2AaFcQBgA8AATKIBaqnUYAPAAEyihEgEjdElqe2p+waFcgBgA8AATKIBaqn3YAPAAEyihEsEjdIlqhCqJgaFcwBgA8AATKIBaqoiYAPAAEyihE4EjdMlqjuqSwaFdABgA8AATKIBaqpHYAPAAEyihDAEjdQlqmCqbAaFdQBgA8AATKIBaqpoYAPAAEyibwSN1SWqgaqNBoV2AGADwABMogFqqolgA8AATKKEUQSN1iWqoqqtBoV3AGADwABMogFqqqlgA8AATKKEVASN1yWqwqrOBoV4AGADwABMogFqqspgA8AATKKEVwSN2CWq46rvBoV5AGADwABMogFqqutgA8AATKKEWgSN2SWrBKsXBoV6AGADwABMogFqqxNgA8AATKKEXQSN2iWrLKs4BoV7AGADwABMogFqqzRgA8AATKKEYASN2yWrTataBoV8AGADwABMogFqq1ZgA8AATKKEYwSN3CWrb6t8BoV9AGADwABMogFqq3hgA8AATKKEZgSN3SWrkaudBoV+AGADwABMogFqq5lgA8AATKKEaQSN3iWrsqu/BoV/AGADwABMogFqq7tgA8AATKKEbASN3yWr1KvjBoWAAGADwABMogFqq99gA8AATKKEbwSN4CWr+KwIBoWBAGADwABMogFqrARgA8AATKKEcgSN4SWsHawsBoWCAGADwABMogFqrChgA8AATKKEdQSN4iWsQaxOBoWDAGADwABMogFqrEpgA8AATKKEeASN4yWsY6xwBoWEAGADwABMogFqrGxgA8AATKKEewSN5CWshaySBoWFAGADwABMogFqrI5gA8AATKKEfgSN5SWsp6y0BoWGAGADwABMogFqrLBgA8AATKKEgQSN5iWsyazWBoWHAGADwABMogFqrNJgA8AATKKEhASN5yWs66z4BoWIAGADwABMogFqrPRgA8AATKKEhwSN6CWtDa0aBoWJAGADwABMogFqrRZgA8AATKKEigSN6SWtL608BoWKAGADwABMogFqrThgA8AATKKEjQSN6iWtUa1eBoWLAGADwABMogFqrVpgA8AATKKEkASN6yWtc62ABoWMAGADwABMogFqrXxgA8AATKKEkwSN7CWtla2iBoWNAGADwABMogFqrZ5gA8AATKKElgSN7SWtt63EBoWOAGADwABMogFqrcBgA8AATKKEmQSN7iWuBq4UBoWPAGADwABMogFqrhNgA8AATKIaBI3vJa4prjsGhZAAYAPAAEyiAWquOmADwABMohQEjfAlrlCuYwaFkQBgA8AATKIBaq5iYAPAAEyiFgSN8SWueK6LBoWSAGADwABMogFqropgA8AATKJMBI3yJa6grrAGhZMAYAPAAEyiAWqur2ADwABMokwEjfMlrxGvHQaFlABgA8AATKIBaq8cYAPAAEyiGgSN9CWvSK9UBoWVAGADwABMogFqr1NgA8AATKIYBI31Ja+Gr5MGhZYAYAPAAEyiAWqvkmADwABMohwEjfYlr8yv2AaFlwBgA8AATKIBaq/WYAPAAEyihDAEjfclr/uwDQaFmABgA8AATKIBarALYAPAAEyiVASN+CWwSLBSBoWZAGADwABMogFqsFBgA8AATKKEnASN+SWwfLCLBoWaAGADwABMogFqsIlgA8AATKKEnwSN+iWwxrDWBoWbAGADwABMogFqsNRgA8AATKKEMwSN+yWxBLEUBoWcAGADwABMogFqsRJgA8AATKJvBI38JbFtsXoGhZ0AYAPAAEyiAWqxeWADwABMohoEjf0lsbGxvwaFngBgA8AATKIBarG+YAPAAEyiGASN/iWx4rHsBoWfAGADwABMogFqsepgA8AATKJUBI3/JbIjsjgGhaAAYAPAAEyiAWqyN2ADwABMohYEjgAlsm2yggaFoQBgA8AATKIBarKBYAPAAEyihC0EjgElstmy6waFogBgA8AATKIBarLpYAPAAEyihDAEjgIlswCzEgaFowBgA8AATKIBarMRYAPAAEyiFgSOAyWzJ7MzBoWkAGADwABMogFqszJgA8AATKIaBI4EJbNis24GhaUAYAPAAEyiAWqzbWADwABMohgEjgUls52zqgaFpgBgA8AATKIBarOpYAPAAEyiHASOBiWz2rPmBoWnAGADwABMogFqs+RgA8AATKKEMASOByW0ErQlBoWoAGADwABMogFqtCRgA8AATKIYBI4IJbSDtJMGhakAYAPAAEyiAWq0kmADwABMokwEjgkltKy0tAmBYQBgA41yAASOCiW03bTyGIE4AGADwABMogFqtOVgA8AATKIaBI4LJbUAtRAYhaoAXQPAAE1GAWADwABMogExtQ5gA8AATKIABI4MJbuDu5wYhasAYAPAAEyiAWq7kmADwABMohoEjg0lvHW8ghiBwQBbASsBBY43JbyHvIe8qAAAAAO8mbyoAAAAAQEBvJ8AAASBYWADjXIAAF0DjbYBXwMAAAE/AggBjgmAAMAF+kgJAbyHwABOBQAAAAAlBo4PJb15vX69rgAAhawAAAABA72Hva4AAAABAQG9jAAAAIE4YAPAAEyiAABcAT4BPRy9oBa9mS6Fqo4LgIIBAAGAvaTABfqVAMAATVcGjhAlve298b44AACFrQAAAAEDvf2+OAAAAAAAAABgA8AATKIBPgFKvgYBHL4UFr4NLoWqjguELwAAAADAAE1lBo4RJcAAQFXAAEBawABDcgAAgI0AAAABA8AAQF/AAENyAAAAAAAAAFwBPgJJwABAaCEcwABAeRbAAEBsLoWrjgyAjAEAAWrAAEB8YAPAAEyiGgDAAE3GPgJOwABAlMAAQKAAAIWuYAPAAEyiARzAAECvFsAAQKIuhauODIChAQABasAAQLFgA8AATKJMAMAATLpJwABAxRzAAEDVgMAAQMnABftfgIwBAAFqwABA2GADwABMohYAwABNxj4ETsAAQPfAAEEAAACFr2ADwABMogEcwABBDxbAAEECLoWrjgyAoQEAARzAAEERasAAQRJgA8AATKJMgNgAAAAAwABMvQDAAEy6TsAAQfTAAEH7AACBwWADjaUBJsAAQfQFFsAAQgIugcGODWADjaU9F8AAQhcugcErjg09HMAAQi4uhbAEAASBwABCQMAF+8OTk4LAAEJQwAX8CwCOLUnAAEJmHMAAQnaAwABCasAF+1+AjAEAAWrAAEJ5YAPAAEyiFADAAE3GPgE9HMAAQpMuhbECAAIWwABCmC6FOo4yJ4WyAI4vPgJAHMAAQuSAwABC2MAF+1+AjAEAAWrAAELnYAPAAEyiTADAAE3GwABC2MAAQvYAPRzAAEMBLoWxAQABFsAAQwYuhTqOMgCOLz9JwABDOiEcwABDRBbAAEM+LoE4jgqAjAEAAWrAAENHYAPAAEyihDMAwABNxj4BPRzAAENaLoWxAQABFsAAQ18uhTqOMgCOLz8GjjElwABEQcAAREzAAERzAQCA5gAAAAEDwABEU8AARHMAAAAAAAAAYAPAAE3vAT4BSsAARFkBFsAARGkWwABEYC6BYY4JgOaNgAaONSXAAESgwABEqcAARLgCAoU5AAAAAQPAAESuwABEuAAAAAEBAcAARLEAACCBY18DAAAAAFwABo4yJcAARSvAAEUzwABFOwEChToAAAABA8AARTvAAEU7AAAAAAAAAGADwABMogAGjjMlwABFv8AARcXAAEXKAQKFOQAAAAEDwABFysAARcoAAAAAAAAAXwMAAAAGjhIlwABGr8AARrPAAEbFAAKFswAAAAEDwABGusAARsUAAAABAQHAAEa/AAAAgd1gA8AATKIAAGADwABMogAGjhMlwABHb8AAR3TAAEe1AAKFtAAAAAEDwABHg8AAR7UAAAAEBATAAEeIAAAAbWADwABMogDAAEeTAAAAhFRgA8AATKIAwABHogAAAIF5XQPAAE1GAWADwABMogDAAEeuAAAAhBdgA8AATKIAAFwABo4UJcAASObAAEjrwABI+AAChbUAAAABA8AASPbAAEj4AAAAAAAAAFwABo4VJcAASWzAAElxwABJjgAChbYAAAABA8AASYDAAEmOAAAAAQEBwABJhQAAAIW3YAPAAEyiAABcAAaOFiXAAEoZwABKHsAASkIAAoW4AAAAAQPAAEouwABKQgAAAAICAsAASjMAAABtYAPAAEyiAMAASj4AAACEVGADwABMogAAXAAGjhclwABKjcAASpTAAEqfAAKFuQAAAAEDwABKncAASp8AAAAAAAAAYAPAAE6JAAaOGCXAAEzrwABM8sAATRkAAoVVAAAAAQPAAEz7wABNGQAAAAMDA8AATQAAAABtYAPAAEyiAMAATQsAAACEVGADwABMogDAAE0UAAAAhbpgA8AATKIAAGADwABOiQAGjhklwABOWsAATl7AAE76AACFVgAAAAEDwABOZsAATvoAAAACAgLAAE5rAAAAbWADwABMogDAAE52AAAAhFRgA8AATKIAAGADwABNuQE+AUrAAE7E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gMAAbwXABhcmAI4vPz2KwABvGsAGF9YcwABvIILAAG8awAYX1oCmAQABasAAbyNgA8AATKKEMwDAAEy7PYjAAG8+wAYXJhzAAG9JLoXUAQABgMAAb1TABhcmAI4iQsAAb2kAAcAAb31qwABvfWADwABMooSQAD4EScAAb48hHMAAb64cwABvmoLAAG+UwAYX1oChAQABasAAb5xgA8AATKIYAMAATLqAjAEAAZMAwABNxkrAAG+0ARzAAG+7LoWxAQABgMAAb8DABhcmAI4vPz2KwABv1cAGF9YcwABv24LAAG/VwAYX1oCmAQABasAAb95gA8AATKKEMwDAAEy7PYjAAG/5wAYXJhzAAHAELoXVAQABgMAAcA7ABhcmAI4hQsAAcCMAAcAAcDdqwABwN2ADwABMooRpAD4FScAAcEghHMAAcFKCwABwTMAGF9aAjAEAAWrAAHBVYAPAAEyihDwAwABNxkrAAHBnARzAAHBuLoWxAQABgMAAcHPABhcmAI4vPz0cwABwkRbAAHCILoFhjgmFQwAAAACNeT2KwABwq8AGF9ZqwABws2ADwABMooQ/PYjAAHDRwAYXJhzAAHDZgMAAcNHABhcmgQ0BAAGUAMAATchCwABw5wABwABw+2rAAHD7YAPAAEyihFcAPgJJwABxDBzAAHEWgsAAcRDABhfWgIwBAAFqwABxGWADwABMooRCAMAATcY+Az0cwABxRBbAAHE7LoFhjgmFRAAAAACNej2KwABxYcAGF9ZqwABxaWADwABMooRFPYjAAHGJwAYXJhzAAHGRgMAAcYnABhcmgQ0BAAGUAMAATchJwABxphzAAHGwgsAAcarABhfWgIwBAAFqwABxs2ADwABMooQ2AMAATcY+Az0cwABx3RbAAHHULoFhjgmFRwAAAACNfT2KwABx+cAGF9ZqwAByAWADwABMooQ5PYjAAHIgwAYXJhzAAHIogMAAciDABhcmgQ0BAAGUAMAATcg+AUrAAHJLARzAAHJSLoWxAQABgMAAclfABhcmAI4vQsAAcngAAcAAcoxqwAByjGADwABMooR1AD4EScAAcqAcwAByqoLAAHKkwAYX1oCMAQABasAAcq1gA8AATKIUAMAATcY+AT0cwABy1xbAAHLOLoFhjgmFSAAAAACNfknAAHL0HMAAcv6CwABy+MAGF9aAjAEAAWrA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gcAAiMPABjEyAMAATcY+AknAAIjSHMAAiN+AwACI1sAGMReCjAEAAYLAAIjhwAYxUADAAE3SPgE9HMAAiPQuhbgCAAKCwACJBcAGMVCAwACJDMAGMRcAjhY/SsAAiSkBHMAAiTAuhdwBAAFqwACJPGADwABMohoAjiY/TsAAiVrAAIlfAACFwGADwABMogEcwACJYS6FswEAATXAAIlpAAABAGADwABMogGAwACJacAGMRc1wACJcQAAAQBgA8AATKIBiMAAiXHABjEXHMAAiXGDwACJacAGMieBDQEAAZQAwABNyIPAAIlpwAYyJwCOEknAAIl8HMAAiYWDwACJgMAGMgiCjAEAAWrAAImHYAPAAEyihHIAwABN0kLAAImSAD9JwACJohzAAImrg8AAiabABjIIgLsBAAFqwACJrWADwABMom8AwABN0D4BSsAAib4BJsAAib4FHMAAicUuhbEBAAEcwACJ04DAAInKwAYxF4EGAQABlADAAE3JAI4vYAPAAEyiP0nAAIoHHMAAihCDwACKC8AGMgiAjAEAAWrAAIoTYAPAAEyihFEAwABNxj4ETsAAiijAAIo2AACF3mADwABMogEcwACKQYDAAIo4wAYxF4EGAQABlADAAE3JScAAik4cwACKYITAAIpSwAYzQIKMAQABgsAAimLABjFQAMAATdI+AT0cwACKdS6FuAIAAoLAAIqGwAYxUITAAIqNwAYzQACOFj89HMAAirgWwACKry6BYY4JhT4BAAEcwACKxS6FuQAAAACOFwCNdErAAIrbAYDAAIriwAYxFz9JwACK+iEcwACLA4PAAIr+wAYyCICMAQABasAAiwZgA8AATKKEcgDAAE3GPgFCwACLGwA/ScAAi0scwACLXBzAAItYgMAAi0/ABjEXgQYBAAGUAMAATcmCjAEAAYLAAItewAYxUADAAE3SPgE9HMAAi28uhbgCAAKCwACLgMAGMVAcwACLkIDAAIuHwAYxF4EGAQABlADAAE3JAI4WP0nAAIukHMAAi7GAwACLqMAGMReAjAEAAYHAAIu0wAYxMgDAAE3GSsAAi7kBHMAAi8AuhdwBAAFqwACLzGADwABMohgAjiY/PYjAAIvfwAYxFxzAAIvqLoXEAQABgMAAi/zABjEXAI4pScAAjA0cwACMGoDAAIwRwAYxF4CMAQABgcAAjB3ABjEyAMAATcZKwACMIgGAwACMKcAGMRc/PYrAAIw5wAYxUIDAAIxBwAYxF0rAAIxVARzAAIxclIPrAAAAAMAATMUGjiklwACNn8AAjaPAAJMAAACFxAAAAAEDwACNtMAAkwAAAAABAQHAAI25AAAAhbxgA8AATKIAAGADwABMogE+Bk7AAI3NwACN0gAAhcBgA8AATKIBHMAAjdQuhbMBAAE1wACN3AAAAQBgA8AATKIBgMAAjdzABjV4NcAAjeQAAAEAYAPAAEyiAYjAAI3kwAY1eBzAAI3kgcAAjdzABjWygQ0BAAGUAMAATciBwACN3MAGNbIAjhJOwACN8cAAjfgAAIHIYAPAAEyiARbAAI36LoU6jjJBR8AAjgiBwACOEMAGNZMIAcAAjiNqwACOI2ADwABMooR7AD4CPYnAAI4zwAY1k2rAAI46YAPAAEyiHELAAI5NAAHAAI5fasAAjl9gA8AATKKEgQA+Aj2JwACOb8AGNZNqwACOdmADwABMooQwQsAAjokAAcAAjptqwACOm2ADwABMooSHAD4CPYnAAI6rwAY1k2rAAI6yYAPAAEyihEtCwACOwwABwACO1WrAAI7VYAPAAEyihIoAPgI9icAAjuXABjWTasAAjuxgA8AATKKETkLAAI8FAAHAAI8XasAAjxdgA8AATKKEkAA+Aj2JwACPJ8AGNZNqwACPLmADwABMooRIQsAAjzsAA8AAj01qwACPTWADwABMooRgwACPX2rAAI9fYAPAAEyihHLAAI91asAAj3VgA8AATKKEUQA+AULAAI+EAAHAAI+WasAAj5ZgA8AATKKEkwA+BU7AAI+qwACPswAAhd9gA8AATKIBHMAAj76AwACPtcAGNXiBBgEAAZQAwABNyU7AAI/PwACP1QAAImADwABMogGTRcAAj+IBwACP68AAj+0AAINmYAPAAEyiAZMBHMAAj/SFwACP8sAGN8iAuwEAAZcAwABN0AGNwACP+cAGN8gcwACP+oXAAI/5wAY3yIENAQABlADAAE3IPgVJwACQChzAAJAXgMAAkA7ABjV4gIwBAAGCwACQGsAGNgkAwABNxkrAAJAiARzAAJApLoXFAgAChcAAkDzABjfIhMAAkD/ABjevAI4nPz2JwACQUcAGNZMcwACQWC6FswEAATXAAJBgAAABAGADwABMogGAwACQYMAG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bAAAAAQEBMAAl2UAAACBOGADwABMogDAAJdwAAAAbWADwABMogDAAJd7AAAAhFRgA8AATKIAwACXjgAAAIHBYAONpQAAYAPAAEyiAT4EScAAl5wcwACXpoDAAJegwAY/o4CMAQABasAAl6lgA8AATKIYAMAATcY+Aj0cwACXxBbAAJe7LoFhjgmFPwEAAZMAjXVKwACX2wGCwACX4sAGP8I/ScAAl/EcwACX+YLAAJf1wAY/woKMAQABgcAAl/vABj+zAMAATdI+AT0cwACYCi6F4wQABIPAAJgZwAY/0oHAAJghwAY/s4LAAJgowAY/wpMAjis/ScAAmDscwACYRYDAAJg/wAY/o4CMAQABasAAmEhgA8AATKIcAMAATcY+Ak7AAJhfwACYZQAAImADwABNuQEcwACYboPAAJhnwAY/0oVWAAAAAI2yPRzAAJiJFsAAmIAugWGOCYU/AQABhMAAmJbABkC+AI11ScAAmKkiHMAAmLOAwACYrcAGP6OAjAEAAWrAAJi2YAPAAEyiVADAAE3GARzAAJjNgMAAmMfABj+jgIwBAAFqwACY0GADwABMooQzAMAATcY+AT0cwACY7hbAAJjlLoFhjgmFPwEAARzAAJkCg8AAmPvABj/ShVcAAAAAjbMAjXU+AT0cwACZJS6FsQIAAhbAAJkqLoU6jjInheYAji9KwACZXgGCwACZZcAGP8IGji4lwACZccAAmXXAAK97AACF1gAAAAEDwACZgMAAr3sAAAACAgLAAJmFAAAAhcBgA8AATKIAwACZjwAAAIW8YAPAAEyiAABgA8AATKIBPhBOwACaHsAAmiQAAG1gA8AATKIBgcAAmibABkHrTsAAmjjAAJo/AACByGADwABMogEWwACaQS6FOo4yTsAAmw/AAJsYAACF52ADwABMogGTTsAAmyjAAJs0AACF6GADwABLUAEoAAAAAAAAAABOwACbncAAm6IAAIXpYAPAAEyiAZROwACbsMAAm7kAAIXqYAPAAErYASpJwACcnxzAAJyogMAAnKPABkHbgIwBAAFqwACcq2ADwABMooRaAMAATcY+BD2OwACcusAGQnIcwACcwZSD6wAAAADAAEzFPYnAAJzLwAZB6xzAAJzTgcAAnMvABkHrgQ0BAAGUAMAATchJwACc3RzAAJzqgcAAnOHABkHrgIwBAAGDwACc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jAEAAYPAAKR2wAZCIgDAAE3GSsAApH4BHMAApIUuheICAAJqwACklmADwABMolSCwACkpcAGQgYAjio/PYjAAKS1wAZB2xzAAKS8LoWzAQABgcAApMTABkHrAI4SPRXAAKTXwAZDdwgcwACk5IDAAKTfwAZB24CjAQABasAApOZgA8AATKKEYwDAAEy8HMAApQMUwACk/cAGQ3cIAIFbAQABNwkAwABN0T9JwAClFBzAAKUmHMAApR6AwAClGcAGQduApgEAATcgAMAATLuAjAEAAWrAAKUpYAPAAEyihH4AwABNxj4NScAApTkhh8AApT7ABkKHPgM9j8AApVLABkKHKT2NwACla8AGQlUjHMAApYOEwAClesAGQkCAjAEAAZMAwABNxigAAAAAAAAAABzAAKWRHMAApZuEwAClksAGQkCF7wAAAADAAE3fg+sAAAAAwABLYwFgA8AAS1A9jMAApa/ABkJAkz89icAApcvABkHrHMAApdOBwACly8AGQeuBDQEAAZQAwABNyEnAAKXdHMAApeqBwACl4cAGQeuAjAEAAYPAAKXtwAZCIgDAAE3GSsAApfUBHMAApfwuheICAAJqwACmDWADwABMooScgsAAphTABkIGAI4qPz2IwACmIsAGQdscwACmKS6FswEAAYHAAKYxwAZB6wCOEk7AAKZGwACmTgAAhfBgA8AATKIBlE7AAKZdwACmZgAAhfFgA8AATKIBk0nAAKZxHMAApoYcwACmgRzAAKZ8gMAApnfABkHbgQ0BAAGUAMAATciApgEAAZUAwABMu4CMAQABNy4AwABNxj4EPRXAAKakwAZMKAkcwACmszcsgQYBAAGAwACmtcAGQdsAwABNyT2JwACm4MAGQescwACm6IHAAKbgwAZB64ENAQABlADAAE3IScAApvQcwACnAYHAAKb4wAZB64CMAQABg8AApwTABkIiAMAATcZKwACnDAEcwACnEy6F4gIAAmrAAKckYAPAAEyihJ+CwACnMMAGQgYAjio/PYjAAKdAwAZB2xzAAKdHLoWzAQABgcAAp0/ABkHrAI4SPz0VwACnaMAGQ3cIHMAAp3WAwACncMAGQduAowEAAWrAAKd3YAPAAEyihGMAwABMvEnAAKeFHMAAp48UwACnicAGQ3cIAIKMAQABNwkAwABN0j4BPRzAAKeeLoWxAgAC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Bfp4AAX6xQAF+wUABf04AAX9ggAF/boABf3pAAX+FgAF/lUABf7FAAX+7wAF/ykABf9yAAX/oQAF//8ABgCPAAYBHwAGA6MABg2kAAYRewAGFbEABhb/AAYisAAGJM0ABicyAAYpTgAGK7AABi93AAYv9wAGMPAABjVRAAY7ZgAGPNEABj53AAY/fAAGQbQABlPLAAZUsgAAACUCjjglwACwscAAsLfAALTPA4YSAAABXQONtgFgA8AATokAAAIEjjolwACw98AAsPxYhTkAYAPAAE6JASsEjjslwACxBMAAsQwYhToAYAPAAEyiASsBBY5GJcAAsRHAALERwACxTAAAAAPAALEiwACxTAAAAAEBAcAAsTEAAACBYWADjXIAAGADjjgBPwEJAMAAsT2ONwEAAYDAALFDwAZVxgAIBo49JcAAsVHAALFVwACxiAAAhbMAAAABA8AAsVzAALGIAAAAAQEBwACxYQAAAIW8YAPAAEyiAABgA8AATKIBSsAAsW4BHMAAsXQWwACxbi6FOY46hdABAAGAwACxf8AGVhkAwABOlwaOPiXAALGNwACxlMAAsegAAIVVAAAAAQPAALGdwACx6AAAAAMDA8AAsaIAAABtYAPAAEyiAMAAsa0AAACEVGADwABMogDAALG2AAAAhbpgA8AATKIAAGADwABOiQE+AUrAALHCARzAALHPFsAAsckuhTmOOoYTAgACgMAAsdnABlaAgcAAseDABlaPAMAATp8Gjj8lwACx7cAAsfLAALIqAACFtQAAAAEDwACx/cAAsioAAAAAAAAAXAE+AT0XwACyCy6BwR/AALIYwABO8gAAAACODQaOQCXAALIvwACyNMAAsrMAAIW4AAAAAQPAALJEwACyswAAAAICAsAAskkAAABtYAPAAEyiAMAAslQAAACEVGADwABMogAAXAE+Ak7AALJswACycwAAgcFgA8AATtMBJsAAsmwFFsAAsnougcGODWADwABO0z0cwACyjYLAALKGwAZXeoHDAQABHMAAspkWwACyky6FOY46hhMCAAKAwACyo8AGV1WBwACyqsAGV2QAwABOnwDAAE7nBo5BJcAAsrjAALK9wACzKgAAhbYAAAABA8AAsszAALMqAAAAAQEBwACy0QAAAIW3YAPAAEyiAABcAT4CTsAAsu7AALL1AACBwWADwABO0wEmwACy7gUWwACy/C6BwY4NYAPAAE7TPRzAALMPgcAAswjABlgkhhQBAAGAwACzHcAGWA4AwABO6AaOQiXAALMvwACzNsAAs6MAAIW5AAAAAQPAALM/wACzowAAAAAAAABgA8AATokBPgNOwACzVcAAs1wAAIHBYAPAAE7TASbAALNVBRbAALNjLoHBjg1gA8AATtM9F8AAs3QugcErjg1KwACzhwEcwACzlYDAALOOwAZYoYDvAAAAAMAATuwGjkMlwACzqMAAs63AALRxAACFtAAAAAEDwACzvMAAtHEAAAAEBATAALPBAAAAbWADwABMogDAALPMAAAAhFRgA8AATKIAwACz1gAAAIF5XQPAAE1GAVsAwACz4gAAAIQXYAPAAEyiAABcAT4CTsAAs/TAALP7AACByGADwABMogEcwAC0AYHAALP9wAZZKoEGAQABgMAAtAPABlkbAMAATclFwAC0DgHAALQXwAC0GQAAg2ZgA8AATKIBkwEcwAC0IIXAALQewAZZnIC7AQABhMAAtCLABlliAMAATdABjcAAtCrABlmcHMAAtCuFwAC0KsAGWZyBDQEAAZQAwABNyD4BPRzAALQ9gsAAtDfABlk6gQwCAAIcwAC0RYPAALQ+wAZZTIENAQABhcAAtEfABlmcAMAATcgcwAC0UhbAALRMLoU5jjqF0AEAARzAALRjgMAAtF3ABlkbgQ0BAAGFwAC0ZcAGWZwAwABNyADAAE6XAMAATVYGjkQlwAC0dsAAtH3AALTNAACFVwAAAAEDwAC0iMAAtM0AAAACAgLAALSNAAAAbWADwABMogDAALSYAAAAhFRgA8AATKIAAGADwABLUAE+AUrAALSjAR7AALSqjVwDAAMWwAC0ty6FOY46gMAAtL7ABlqSgcAAtMXABlqhAAAABlXyAAZWWQAGVuoABlcuAAZX5wAGWG8ABlj0AAZaawAGWugAAAAIAo5HJcAAtiLAALYowAC6VgOGFQAAAWADkWIAAAMEjkolwAC2dsAAtn0YhhaNQQBgA444AASOSyXAALaqwAC2sgmFNY1BAGEDAmADwABN72ADwABN71sABI5MJcAAtsnAALbOCYHjjUEAXQPAAE5XAWADwABN7wABBY5VJcAAttPAALbTwAC3LgAAAAPAALbpwAC3LgAAAAICAsAAtu8AAASFNWEDAmADwABN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gcjAAE12Q8AA0ZscwADRq4HAANGiwAZuyoC7AQABgsAA0a3ABm7aAMAATdBBPgZOwADRvsAA0cMAAIXAYAPAAEyiARzAANHJgMAA0cXABm6zgtEBAAGBwADRysAGbsoAwABNVUnAANHbHMAA0eSFwADR38AGcQSBWwEAAWrAANHnYAPAAEyihKIAwABN0T4EScAA0fwcwADSBoPAANIAwAZwlICMAQABhMAA0gnABnCyAMAATcY+Az0XwADSHy6ByIPAANIowAZwlI5tPRzAANI5LoS/jUEAAAAAjnY9jMAA0kzABnCyFsAA0l4WwADSVy6BwY5sgcjAAE12Pz0cwADSfhbAANJ4LoHBjmyBDAIAAjXAANJ/AAABAGADwABMogGDwADSf8AGcJQ1wADShAAAAQBgA8AATKIBi8AA0oTABnCUHMAA0oSGwADSf8AGceeBDQEAAZQAwABNyIbAANJ/wAZx54XAANKKwAZxBADAAE1WPYnAANKYwAZuyhzAANKggcAA0pjABm7KgQ0BAAGUAMAATchCwADSrAA/PRfAANLELoHIg8AA0s3ABnCUjm1JwADS2hzAANL5HMAA0uSFwADS38AGcQSAoQEAAWrAANLmYAPAAEyihfQAwABMuoCMAQABasAA0vxgA8AATKJ1AMAATcY+AUnAANMUFsAA0xguhhyOcD4CPRzAANM0LoY2AQABN8AA//0AjnM9icAA01PABm7KHMAA01uBwADTU8AGbsqBDQEAAZQAwABNyD4BPTDAANN6H8AA04TAAEx9AwADJ4ZDgMAA08nABm6zgcAA08/ABm7KAEnAANPxHMAA0/qFwADT9cAGcQSAuwEAATeA4ADAAE3QPgE9icAA1DLABm7KHMAA1D0uhjIGAAaAwADUWsAGbrMcwADUaYHAANRgwAZuyoENAQABlADAAE3IgsAA1G7ABm7alJQcwADUfoXAANR5wAZxBIChAQABasAA1IBgA8AATKKEQgDAAEy6AI5yScAA1J0cwADUpoXAANShwAZxBIC7AQABN4DwAMAATdA+AT2JwADU4MAGbsocwADU6y6GMgYABoDAANUIwAZusxzAANUXgcAA1Q7ABm7KgQ0BAAGUAMAATciCwADVHMAGbtqVlRzAANUshcAA1SfABnEEgKEBAAFqwADVLmADwABMolEAwABMugCOcknAANVNHMAA1VaFwADVUcAGcQSAuwEAATeA+ADAAE3QPgE9icAA1Y/ABm7KHMAA1ZouhjIGAAaAwADVt8AGbrMcwADVxoHAANW9wAZuyoENAQABlADAAE3IgsAA1cvABm7alpYcwADV24XAANXWwAZxBIChAQABasAA1d1gA8AATKKF8QDAAEy6AI5yPgFJwADWBRbAANYJLoYcjnA+Aj0cwADWJS6GNgEAATfAAP/9AI5zPYnAANZEwAZuyhzAANZMgcAA1kTABm7KgQ0BAAGUAMAATcg+AT0wwADWax/AANZ1wABMfQMAAyTAANavAieGRIXAANaqwAZxBIDAANaxwAZus4HAANa3wAZuygA9i8AA1trABnCUFsAA1uIugciObT2MwADW8MAGcLIWwADXAhbAANb7LoHBjmyByMAATXY9F8AA1xQugciDwADXHcAGcJSObQaOeCXAANcrwADXMsAA2pMAAIDvAAAAAQPAANc6wADakwAAAAAAAABgA8AATokBPgJJwADXQyEcwADXVBbAANdHLoWrjm6AjAEAAWrAANdXYAPAAEyiGgDAAE3GPgFJwADXaxbAANdvLoYcjnA+Aj0XwADXiS6Fq2rAANeYYAPAAEyiGo5uPRzAANesLoY2AQABN8AA//0AjnM+CE7AANfcwADX7gAAhkJgA8AATKIBHMAA1/4WwADX8S6Fq45ugKEBAAFqwADYAGADwABMokwAwABMuk7AANgbwADYIwAAhjRgA8AATKIBHMAA2EUcwADYMxbAANgmLoWrjm6DxQEAAWrAANg2YAPAAEyiFgDAAEy/gKEBAAFqwADYR2ADwABMokwAwABMuk7AANhhwADYZwAAImADwABMogEcwADYdhbAANhpLoWrjm6DxQEAAWrAANh5YAPAAEyiGADAAEy/TsAA2JLAANigAACGRWADwABMogEcwADYvhzAANi0gMAA2KLABnZJgQYBAAGBwADYtsAGdoIAwABNyYENAQABlADAAE3ITsAA2NDAANjXAACBY10DwABNRgFbAR7AANjdrBsBAAGDwADY58AGdw4AQ8AA2P8cwADZFIPAANkGwAZ3DoKMAQABlADAAE3SPgM9i8AA2SXABncOHMAA2TKDwADZJcAGdw6BBgEAAZQAwABNyT0cwADZRoTAANlAwAZ3U4EMAgACg8AA2UfABncOHMAA2WVqwADZWGADwABMonWApgEAARzAANlugsAA2WjABnbWgKEBAAFqwADZcGADwABMooX4AMAATLoAwABMuwDAAE1WPYrAANmQwAZ21hzAANmWgsAA2ZDABnbWg8UBAAE3BgDAAEy/PRzAANm1hMAA2a/ABndTgQwCAAKTHMAA2cGCwADZu8AGdtaApgEAARzAANnKN4PAg8UBAAEcwADZ4IDAANnOwAZ2SYEGAQABlADAAE3JAMAATL8AwABMuwDAAE1WPTDAANnvH8AA2fnAAEx9AwADJ4Y/hMAA2jPABndTFsAA2kKEwADaO8AGd1OByMAATXYAP0rAANpdAR7AANpowABOsQMAAxbAANp9LoHBjmyTFsAA2ogugciObQAAAAZjcgAGZ8oABmuAAAZtbgAGbowABnWsAAZ4/gAAAAYCjnslwADa0cAA2tfAAODBA4ZGAAABXQONtgFdA8AATUYBYAPAAEyiAAADBI59JcAA2xzAANsqCYYcAGADwABK2AAEjn4lwADbOMAA2z1YhTkAXQPAAE1GAWADwABMogErBI5/JcAA20XAANtNGIU6AGADwABMogErAQWOiiXAANtSwADbUsAA3EwAAAADwADbYcAA3EwAAAACAgLAANtwAAAAgWFgA41yAMAA238AAASGHGADwABK2AAAYAOOewE+AT0XwADb8i6FqxzAANwsasAA3BxgA8AATKJMgKYBAAFqwADcQWADwABMooQwAMAATLuODAIIAY59gQDABnnJCQDAANuXjjcBAAGAwADbncAGebsACAaOgSXAANxRwADcVcAA3H0AAIWzAAAAAQPAANxcwADcfQAAAAEBAcAA3GEAAACFvGADwABMogAAYAPAAEyiAUrAANxuARzAANxzFsAA3G4uhTmOfoLRAQABgMAA3HTABnpcAMAATVUGjoIlwADcgsAA3InAAN2yAACFVQAAAAEDwADcksAA3bIAAAADAwPAANyXAAAAbWADwABMogDAANyiAAAAhFRgA8AATKIAwADcqwAAAIW6YAPAAEyiAABgA8AATokBPgVJwADc2hzAANzjgsAA3N7ABnrigVsBAAFqwADc5mADwABMooSiAMAATdE+AUrAANz8AR7AAN0HwABOsQMAAxbAAN0cLoU5jn6AwADdI8AGesOBwADdKsAGetIAPz0cwADdOi6FtQAAAACOg0nAAN1NHMAA3VeAwADdUcAGesOAuwEAAYHAAN1ZwAZ60gDAAE3QPRzAAN1eLoW4AgACgMAA3W/ABnrDgcAA3XbABnrSAI6EP07AAN2HwADdjgAAgOZgA8AATokBHMAA3ZAuhbkAAAAAjoZKwADdoQGDwADdqMAGe7AGjoMlwADdt8AA3bzAAN4HAACFtQAAAAEDwADdx8AA3gcAAAAAAAAAXAE+AT0XwADd1S6BwR/AAN3ijnoBAAEWwADd9C6GHI59AI4NBo6EJcAA3gzAAN4RwADejgAAhbgAAAABA8AA3iHAAN6OAAAAAgICwADeJgAAAG1gA8AATKIAwADeMQAAAIRUYAPAAEyiAABcAT4CTsAA3k7AAN5VAACBwWADjlYBJsAA3k4FFsAA3lwugcGODWADjlY9HMAA3m+CwADeaMAGfHiGGAMAAxbAAN54LoU5jn6AwADef8AGfFOBwADehsAGfGIAjncGjoUlwADek8AA3pjAAN8IAACFtgAAAAEDwADep8AA3wgAAAABAQHAAN6sAAAAhbdgA8AATKIAAFwBPgJOwADezsAA3tUAAIHBYAOOVgEmwADezgUWwADe3C6BwY4NYAOOVj0cwADe74HAAN7owAZ9DYY2AQABgMAA3vvABnz3AI5zBo6GJcAA3w3AAN8UwADfhgAAhbkAAAABA8AA3x3AAN+GAAAAAAAAAGADwABOiQE+A07AAN84wADfPwAAgcFgA45WASbAAN84BRbAAN9GLoHBjg1gA45WPRfAAN9XLoHBK44NSsAA32oBHMAA33iAwADfccAGfYSA7wAAAACOeAaOhyXAAN+LwADfkMAA4CsAAIW0AAAAAQPAAN+fwADgKwAAAAQEBMAA36QAAABtYAPAAEyiAMAA368AAACEVGADwABMogDAAN+5AAAAgXldA8AATUYBWwDAAN/FAAAAhBdgA8AATKIAAFwBPgJOwADf18AA394AAIHIYAPAAEyiARzAAN/kgcAA3+DABn4HgQYBAAGAwADf5sAGffgAwABNyT0cwADf+ILAAN/xwAZ+F4RYBAAEg8AA4AHABn4pHMAA4BCDwADgCcAGfimBDQEAAYTAAOASwAZ+PwDAAE3IFsAA4BouhTmOfoDAAOAhwAZ9+ADAAE1rBo6IJcAA4DDAAOA3wADgvwAAhVcAAAABA8AA4ELAAOC/AAAAAgICwADgRwAAAG1gA8AATKIAwADgUgAAAIRUYAPAAEyiAABgA8AAS1ABPgJOwADgZMAA4GsAAIZHYAPAAE6JARzAAOBtLoVVAwADgMAA4HfABn7wgcAA4H7ABn7/N38AjoJKwADgjgEewADglY1cAwADgsAA4KLABn8akxbAAOC0gsAA4K3ABn8agcjAAE6NAAAABno1AAZ6nAAGe+AABnwsAAZ80AAGfVIABn3RAAZ+yQAGf34AAAAIAo6LJcAA4X7AAOGEwADlewOGSAAAAWADj28AAAIEjo4lwADh0sAA4dkJhhaNQQBgA457AASOjyXAAOHwwADh9QmB441BAF0DwABOVwFgA8AATe8AAQWOmCXAAOH6wADh+sAA4nEAAAADwADiDsAA4nEAAAADAwPAAOIPAAAAhU5bAMAA4h0AAASB410DwABOVwFgA8AATe8AwADiKQAAAIYcYAPAAErYAABgA46LAT8DCAGOj4EAwAaAKQgAjo4ewADiS46SAgACgMAA4lnABoAegsAA4mLABoBAAAkBwADh+o91AAAAAAUGjpIlwADidsAA4o3AAOOlAAGGF41BAAAAAQPAAOKawADjpQAAAAICAsAA4psAAACFTlsAwADiqQAAAIYcYAPAAErYAABgA457AT4DTsAA4tIAAACBYWADjYMAScAA4uAcwADi7IDAAOLkwAaAuYCMAQABKwDAAE38PgE9isAA4v3ABoDdH8AA4wyNmgAAAAA+AT2KwADjNcAGgN0fwADjRI2kAQABJsAA41kFgMAA41nABoC5YQMCYAPAAE3vYAPAAE3vWwBKwADjbQEfwADjeI6KAgACgsAA44jABoDdgcAA45LABoDEAAaOlCXAAOOqwADjr8AA5CkAAIYYAAAAAQPAAOO3wADkKQAAAAQEBMAA48IAAACFOV0DwABNRgFgA8AATKIAwADjzQAAAG1gA8AATKIAwADj2AAAAIRUYAPAAEyiAMAA4+IAAACGGWADwABK2AAAXAE+Aj0cwADj8C6GSY1BAwADgMAA4/rABoGggcAA5AHABoG3gsAA5AjABoHGAI6TScAA5BKDwADkFsAGgdY9HMAA5B4ugI0AAAAAjpY/Bo6VJcAA5C7AAOQzwADkcwAAgIIAAAABA8AA5DbAAORzAAAAAQEBwADkQQAAIIU5XQPAAE1GAWADwABMogAAXAE+AT0cwADkTi6GSY1BAwADgMAA5FjABoJckxbAAORogMAA5GLABoJcgcjAAE12AI6TBo6TJcAA5HjAAOR9wADlAQAAhkmNQQAAAAEDwADkhsAA5QEAAAADAwPAAOSRAAAAhTldA8AATUYBYAPAAEyiAMAA5JwAAABtYAPAAEyiAMAA5KcAAACEVGADwABMogAAXAE+Az0XwADkuhbAAOSyLoYWjUGOjoU5gMAA5MLABoLQjn49F8AA5NUWwADkzS6GFo1Bjo6FOoLAAOTgwAaC9o5/PRzAAOTxFsAA5OkuhhaNQY6OhTsBAAGBwADk98AGgucAjiAGjpYlwADlBsAA5QvAAOV5AACAjQAAAAEDwADlEMAA5XkAAAAAAAAAXAE+BD0cwADlIRbAAOUZLoYWjUGOjoCNAAAAAI4RTsAA5TLAAOU6AACGGmADwABN7wEWwADlRBbAAOU8LoYWjUGOjoDmjjE9HMAA5VYWwADlUC6B441Bjo+AggEAAYDAAOVawAaDswDAAE5ZPRzAAOVuFsAA5WgugeONQY6PgI0AAAAAwABOWgAABoCQAAaBeQAGgjUABoKnAAaDbAAGhBwAAAAFAo6ZJoM3gz2JaIOGSgAAAWADj+AAAAEEjpwmg2iDdQmGS41BAGADwABK2AABBY6lJoVZhV+FpQEAAAOFaYWlAAAAAQAAAYVwAAAAhkxgA8AAStgBaoV/YAPAAErYP2ADjpkBPwIIAI6cgIWZwAaEfwkBhV+P7AAAAAAFBo6eJoXUhd+F8QEAhk0AAAABA4XkhfEAAAAAAAAAYAPAAE6JAUqF5wEnhk4GjqImhfaGAIYwAACGTwAAAAEDhgaGMAAAAAEBAYYOAAAggWNgA8AATokAAGADrBcBSoYZARyGIRaGGS6GUI6fgawBAAGAhinABoT9AI6rBo6jJoeUh5uIpAAAhlEAAAABA4ehiKQAAAACAQGHrAAAIIZSXQPAAE1GAWADwABMogABh7kAAACGTGADwABK2AFqAGABwABNrAJgA8AATokBPgI9IxyH24GHzsAGhWKAjAEAASsAwABN/ImHzsAGhWIWh98uhkuNQY6cKwFgA8AASthJh/KBh/bABoViPgFKiAwBHIg6aogZYAOOyoYagawBAAGAiELABoVMAI7DPgFKiF0BHIiMaohqYAOOyoYngawBAAGAiJTABoVMAI7DBo6fJoipiLqI2QEAhlAAAAABA4jCiNkAAAAAAAAAYAOOsAFKiMUBaojLYAOOsIYzBo6gJojeiO+JZgEAhlMAAAABA4j3iWYAAAAAAAAAYAOOygFKiPoBIxaI+i6GS41BjpxqiRZgA47KhhpqiUVgA47KhicBYAOOygAABoS0AAaE4AAGhS8ABoX+AAaGLgAGhncAAAAFAo6mJoneieSPG4OGVAAAAV0Dj8wCYAPAAE6JXQPAAE1GAWADwABMogAAAQSOqSaKLYo4CYZVjUEAYAPAAEyiAAEFjq8mij2KQ4pqAQAAA4pYimoAAAABAQGKXgAABIZVYAPAAEyiAABgA46mAT8CCAGOqYAAwAaG7QkBikOP1QAAAAADBo6rJos1iz+NQQAAgawAAAABA4tGjUEAAAADAQOLTgAAIIZHYAPAAE6JAItbAAAAbWADwABMogFqi2NgA8AATKIai2oAAACEVGADwABMogFqAGABwABNrAIAYAOsFwE+Bk6LeouHAACGVmADwABMogEWi5CAi4nABoc1gcjAAE6NPYqLnMAGh1oei63AAEvfAwADgYu9wAaHQ4KLxMAGh1qDi8nABod6AE6L4IvnAACByGADwABMogEci+2Ci+nABodagQYBAAGBi+/ABodDAMAATclOi/6MBQAAgOZgA6wXAR6MB6wbAQABhIwRwAaHwgBFjB4BjCeMKQAAg2ZgA8AATKIBkwEcjDCGjC7ABogOgLsBAAGEjDLABofCAMAATdABjow6wAaIDhyMO4aMOsAGiA6BDQEAAZQAwABNyD4DToxLjFQAAIZXYAPAAEyiARyMXYCMVsAGhzWF0AEAARyMboGMaMAGh0OBDQEAAYaMcMAGiA4AwABNyADAAE6XSYx6IRyMmByMiIeMf8AGiFqAoQEAARyMihaMiy6GVY1BjqmA2AAAAADAAEy9AMAATLqAjAEAAZMAwABNxj4BPTCMqB+MvMAAS9IDAAOAjM/ABoc1J4ZHJ4ZYAD89HI0WhY0QwAaH7YEMAgACho0XwAaIDoeNHMAGiFoAwABNVkqNMAGFjTfABoftBo6sJo3PjeSOkwAAhTwAAAABA436jpMAAAABAQGOCwAAIDxdA8AATlcBXQPAAE1GAWADwABMogAAYAORLwE+AUqOFwEfjh6OvAIAAhaOOC6GVY1BjqkjJY5SAICOTcAGiT9gA49kFI5qwAaJPwABYAOPZB+OhI9+AQABgI6JwAaJPwABYAOPZAAGjq0mjtaO6I8ZAACBuAAAAAEDjuyPGQAAAAEBAY78AAAgQF0DgdYBYAPAAE6JAABdA4HWAV0DwABNRgFgA8AATKIBSo8HAR2PDYG4AQABgI8SwAaJyACP0gAABocYAAaJIgAGiasABooEAAAAAwKOsCaPYY9nj8CDhlkAAAFgA46mAAAAAQWOsiaPlo+cj74BAAADj6iPvgAAAAAAAABgA46wAT8BCQCPrY6vAQABao+zYAPAAEyihKIAAAAABopnAAAAAAKOsyaQEpAYkssDhloAAAFgA5FiAAACBI62JpBwkHUJgeONQQBgA49kAASOtyaQg5COCYZVjUEAYAPAAEyiAAEFjrwmkJOQk5DKAAAAA5CskMoAAAACAgKQsgAABIZVYAPAAEyiAJDEAAAEgeNgA49kAABgA46zAT8DCAGOt4AAwAaKyAgBjraBAMAGitYJAZCTkWQAAAAAAgaOuSaQz5DUkPMAAICNAAAAAQOQ2ZDzAAAAAAAAAFwBPgE9HJDoFpDiLoHjjUGOtoCNAAAAAI+VBo66JpD4kP2SyQAAhhgAAAABA5EFkskAAAAEBASRDQAAAIFjYAPAAE6JAJEZAAAAbWADwABMogCRJAAAAIRUYAPAAEyiAJEuAAAAhhlgA8AAStgAAFwBPgQ9HpFHwABL3wMAA4GRV8AGi2yCkV7ABot5FpFqgJFjwAaLXoHIwABOjQBFkXcBkYCRggAAg2ZgA8AATKIBgZGEwAaLbAEckY2EkYvABovIgLsBAAGCkY/ABot5AMAATdABjJGUwAaLyByRlYSRlMAGi8iBDQEAAZQAwABNyD4CTpGlka4AAIZXYAPAAEyiARyRt4CRsMAGi16F0AEAAYSRwsAGi8gAwABOl0mRzCEckeockdqFkdHABowagKEBAAEckdwWkd0uhlWNQY63gNgAAAAAwABMvQDAAEy6gIwBAAGTAMAATcY+AT0wkfofkgDAAEvRAQABJJJaAyeGW4WSUMAGjBonhlwAPz0cknUWkm8ugeONQY62gIIBAAEckooWkoCAknnABotehl3AAE6RhGECAAKBkpLABotsgpKZwAaLeQDAAE1pAI+USZKkg5KowAaLhz4BPRySuC6AjQAAAACOuT8AAAaLCQAGi0EABoz/AAAAAgKOvSaTKJM3m2WHhl4AAAFdA4/MAl0DwABNRgFgA8AATKJgA8AATokAAAIEjsAmk4GTjgmGS41BAGADwABK2AAEjsEmk5yTpwmGVY1BAGADwABMogABBY7JJpWhlaeV4gEAAAOVvJXiAAAAAgIClcIAAASGS2ADwABK2ACV1gAABIZVYAPAAEyiAABgA469AT8DCAGOwIAAwAaNfggBjsGBAMAGjYwJAZWnj9UAAAAABAaOwyaW75b2mOgAAIGsAAAAAQOW/ZjoAAAAAwEDlwgAACCGUl0DwABNRgFgA8AATKIAlxQAAABtYAPAAEyiAWqXHGADwABMohqXIwAAAIRUYAPAAEyiAWoAYAHAAE2sAgBgA8AATokBPgVOlzOXPQAAhl9gA8AATKIBFpdFgJc/wAaN3oHIwABNdj0el1zAAEvfAwADgZdswAaN84KXc8AGjgqDl3jABo4sAD0jHJeMgpeIwAaOCoCMAQABKwDAAE3GipeIwAaOCoOXkMAGjiwrAWADwABMokWXoAGXqZerAACDZmADwABMogGBl63ABo3zARyXtoSXtMAGjp2AuwEAAYKXuMAGjgoAwABN0AGMl73ABo6dHJe+hJe9wAaOnYENAQABlADAAE3IPgJOl86X0wAAhmBgA8AATKIBHJfagJfVwAaN3oLRAQABhJfbwAaOnQDAAE1VSZflIRyX/xyX74WX6sAGju+AoQEAARyX8RaX8i6GVY1BjsGA2AAAAADAAEy9AMAATLqAjAEAAZMAwABNxj4CSZgPIRaYFC6GS41BjsA+AT0wmC8fmDXAAEx9AQABJJhkAieGYYWYX8AGju8AP0qYeQEcmIAuhmKNQQMAA4CYkMAGjd6BmJfABo3zgpiewAaOCgCOxT9KmLYBHpjEwABOsQMAA4CY0sAGjd6BmNnABo3zgpjgwAaOCgAGjsUmmO2Y9JoQAACGYo1BAAAAAQOZA5oQAAAAAwMDmQ4AAACGUl0DwABNRgFgA8AATKIAmRkAAABtYAPAAEyiAJkkAAAAhFRgA8AATKIAAGADwABOiQE+A06ZM5k6AACBwWADwABO0wEfmTzAAE7yAAAAAEWZUAGZWZlbAACDZmADwABMogGBmV3ABpAGARyZZoSZZMAGkEqAuwEAAYKZaMAGkBMAwABN0AGMmW3ABpBKHJluhJltwAaQSoENAQABlADAAE3IPgNOmX6ZhAAAImADwABMogEcmYuAmYbABo/xgtEBAAGEmYzABpBKAMAATVVJmZYhHJmxHJmhhZmbwAaQnIChAQABHJmjFpmkLoZVjUGOwYDYAAAAAMAATL0AwABMuoCMAQABkwDAAE3GPY2Zt8AGkJw3wAD//T89HJnUg5nNwAaQLIYUAQABhZniwAaQnADAAE7oSpn0ARyaAoOZ+8AGkCyA7wAAAADAAE7sBo7GJpqgmrOa3AAChTwAAAABA5rJmtwAAAABAQGa1wAAIDxdA8AATlcBYAPAAE6JAABgA49kAAaOxyabIJsvm2MAAIG4AAAAAQObM5tjAAAAAQEBm0YAACBAXQOB1gFdA8AATUYBYAPAAEyiAABdA4HWAWADwABOiQFKm1EBHZtXgbgBAAGAm1zABpGYAI/SAAAGjcEABo/SAAaRRAAGkXsABpHUAAAABAKOyiabaJtunwGDhmMAAAFgA469AAAAAQWOziabnZujm/QBAAADm6+b9AAAAAEAAAGbtgAAAIZMYAPAAErYAWqbxWADwABK2D9gA47KAT8BCQCb1Y7JAgACgJvbwAaSHmqb6WADwABMooSiAAEGjswmnIScl57/AACFPAAAAAEDnK2e/wAAAAEBAZy7AAAgPF0DwABOVwFgA8AATokAAGADj2QBPgNOnNwAAACGZGADkS8ASZzsJZz1AICc8MAGkndgA5EvPgE9iZ0WwAaSlBSdI8AGkncAAWADkS8+AT2JnTzABpKUH51ekYwBAAGAnWPABpJ3AEmeWBaeXC6GS41BjsA+AUqecwEfnnqO2AEAARyepIGemcAGkpSGGwEAASoAkTkAPgFKnssBH57SjuIBAAGBnurABpKUAAAABpJaAAaTKAAAAAECjs8mnwSfCqI4A4ZlAAABYAOPbwAAAQSO0iafX59oGIZmjUEAYAOPZAABBY7YJp9sn2yfmgAAAAOfip+aAAAAAQEBn5AAAASGZmADj2QAAGADjs8BPwIIAY7SgADABpN4CQGfbI91AAAAAAMGjtQmn5+fpJ/HAACAjQAAAAEDn6mfxwAAAAAAAABcAT4BPRyfvBafsi6GZo1BjtKAjQAAAACPlQaO1SafzJ/RoBoAAICCAAAAAQOf1KAaAAAAAQEBn98AACCBY10DwABNRgFgA8AATKIAAFwBPgE9HJ/tLoYYBAAEgJ/2wAaT9pMWoAiAoAHABpP2gcjAAE12KgCO1gaO1iagH6AkojYAAIYYAAAAAQOgLKI2AAAABAQEoDcAAACBY10DwABNRgFgA8AATKIAoEMAAABtYAPAAEyiAKBOAAAAhFRgA8AATKIAoFgAAACGGWADwABK2AAAXAE+Az0eoHHAAEvfAwADgaCBwAaUaIKgiMAGlHUWoJSAoI3ABpRTgcjAAE12AEWgoQGgqqCsAACDZmADwABMogGBoK7ABpRoARygt4SgtcAGlMSAuwEAAYKgucAGlHUAwABN0AGMoL7ABpTEHKC/hKC+wAaUxIENAQABlADAAE3IPgFJoMshHKDpHKDaHKDWgKDQwAaUU4LRAQABhKDXwAaUxADAAE1VgKEBAAEcoNxqoN1gA8AATKKEooDYAAAAAMAATL0AwABMuoCMAQABkwDAAE3GPgNJoPkcoP+EoP3ABpTEgowBAAGBoQHABpRoAMAATdI9HKESFqEILoZmjUGO0oYYBAAEgKEbwAaUU4GhI8AGlGiEoSrABpTEKgCPbD89HKFwFqFmLoZmjUGO0oCCAQABaqF0XQPAAE1GAWADwABMooZIAI+UPYmhnMAGlGgcoaaEoaTABpTEgQ0BAAGUAMAATcg/SaG9HKHHgaHBwAaUaIC7AQABgqHJwAaUdQDAAE3QPgE9HKHgFqHWLoZmjUGO0oYYBAAEgKHpwAaUU4Gh8cAGlGiCofjABpR1g6H9wAaUgwCPbEmiEYOiFcAGlIM+AT0coiUugI0AAAAAjtQ/AAAGk6EABpPZAAaUNgAGlmYAAAADAo7ZJqI7okGlGwOGZwAAAWADj28AAAEEjtwmooGihhiB441BAF0DwABOVwFbAAEFjuImooqiiqKtAAAAA6Khoq0AAAABAQGipwAABIHjXQPAAE5XAVsAAGADjtkBPwIIAY7cgADABpbCCQGiio91AAAAAAMGjt4morKit6LWAACAjQAAAAEDoryi1gAAAAAAAABcAT4BPRyiyxaixS6B441BjtyAjQAAAADAAE5aBo7fJqLbouCj0gAAgIIAAAABA6Ljo9IAAAABAQGi7gAAIIFjXQPAAE1GAWADwABMogAAXAE+AkWi/AGjBaMHAACDZmADwABMogGTARyjDoGjDMAGl2SAuwEAARajF4CjEMAGl0aByMAATXYAwABN0AGJox/ABpdkHKMggaMfwAaXZIENAQABlADAAE3IPgFJoywhHKNKHKM7HKM3gKMxwAaXRoLRAQABgaM4wAaXZADAAE1VgKEBAAEcoz1qoz5gA8AATKKEooDYAAAAAMAATL0AwABMuoCMAQABkwDAAE3GPgE9MKNaH6NgwABMfQEAASeGaAA/PRyjrRajpy6B441BjtyAggEAAR6juMAATrEBAAGAo8bABpdGAADAAE5ZBo7gJqPXo9ylGQAAhhgAAAABA6PkpRkAAAAEBASj7wAAAIFjXQPAAE1GAWADwABMogCj+wAAAG1gA8AATKIApAYAAACEVGADwABMogCkEAAAAIYZYAPAAErYAABcAT4ETqQkpCsAAYHIYAPAAEyiARakNICkLcAGmGaByMAATXY9HqRLwABL3wMAA4GkW8AGmHuCpGLABpiIhKRnwAaYqgBJpHQcpH6BpHjABph7gLsBAAGCpIDABpiIAMAATdA+AkmkjSIhHKSXgaSRwAaYe4CMAQABkwDAAE3GASEcpKOCpJ/ABpiIgIwBAAGEpKbABpiqAMAATcY+AT2IpLjABphmHKTIgKTBwAaYZoRhAgACgaTQwAaYe4Kk18AGmIgAwABNaT89HKTrLoCCAQABgKTvwAaYZgCO3z9JpQKDpQbABpiWPRylDi6AjQAAAACO3j8AAAaW7wAGlykABphJAAaZmwAAAAMCjuMnisuK0aFEg4ZpAAABXQOPrQJdA8AATUYBYAPAAEyiYAPAAE6JAAABBI7mJ4sWix4JhmqNQQBgA47yAAIFjvAniyKLKItYAQAAA4szi1gAAAAAAAAAYAOO4wE/AggAjuZqi0lgA47yhlYJAYsoj7cAAAAABY7xJ4tci2KLogGGawADi3WLogAAAAAAAABgA47jAT8CCACO5mqLi2ADjvKGXgkBi2KPtwAAAAAFBo7oJ4uni7mLzAEAhlAAAAABA4vBi8wAAAAAAAAAYAOO8gFKi8QBFovELoZqjUGO5gaO6SeL0YvjjAMBAIZTAAAAAQOL64wDAAAAAAAAAGADjzUBSovuAWqL9GADjzWGZwaO6yeNNI0+jXAAAIZRAAAAAQONRI1wAAAAAQEBjUwAACCGbGADwABOiQAAYAOsFwFKjVgBHI1gFo1YLoZTjumBrAEAAYCNaMAGmt0AjzcGjuwnj9GP2J6iAACGbQAAAAEDj+GeogAAAAMBA4/pAAAAgWNgA8AATokAj/YAAABtYAPAAEyiAWqP/mADwABMohqQBQAAAIRUYAPAAEyiAWoAYAHAAE2sAgBgA8AATokBPg09ipARwAabUR6QIsAAS98DAAOBkDLABps6gpA5wAabURaQRYCQPsAGmyyByMAATo0ATpCSAAAAgcFgA8AATtMATpCikK0AAIZuYAPAAEyiAYGQr8AGmzpOkL6QxwAAhm9gA8AATokBapDYYAPAAE6JhmxOkPGRAQAAhnFdA8AATUYBYAPAAEyiARqREo9ETpEskTkAAIZyYAPAAEyiARyRO5SD6wAAAADAAEzFTpFHkV8AAIZzYAPAAEyiARyRYZSD6wAAAADAAEzFTpFtkXoAAIZ0YAPAAEyiAZNFkYMBkYyRjgAAg2ZgA8AATKIBgZGQwAabOgEckZkUkZfABpxRCgCAuwEAAYKRm8AGm1EAwABN0ABBPgZOka2RtgAAhdpgA8AATKIBFJG4wAacUQoATpHFkcoAAIXAYAPAAEyiARyR04CRzMAGmyyF0AEAATWR3gAAAQBgA8AATKIBFJHewAacUQoANZHfAAABAGADwABMogEVkd/ABpxRChyR3xSR3sAGnMIMAIENAQABlADAAE3IFJHewAacwgwAAMAATpdOke6R+wAAhnVgA8AATKIBFJH9wAacowwASZJVHJJeFJJZwAacowwAgIwBAAFqkmFgA8AATKKGbwDAAE3GPgFJknQckn4cknoUknjABpxRCgCBDQEAAZUAwABNyIFbAQABgpKBwAabUQDAAE3RPgM9FZKSwAacowwekpmTzwIAAoCSpsAGmywUkq7ABpxRCgAAPRWS0MAGnFEKHJLSFJLQwAacUQoAgQ0BAAGVAMAATchJk2Qck20Uk2jABpyjDACAjAEAAWqTcGADwABMooZvAMAATcY9FZN5wAacowwck4CUg+sAAAAAwABMxT8+AT0VlBPABpyjDByUGpSD6wAAAADAAEzFP0mUeiIclICTgVsBAAEUlIPABpyjDAAAwABN0QAclJAUlIvABpyjDACBWwEAATd/AMAATdE+A06UppSsAAAiYAPAAEyiARyUvYaUrsAGm+WC0QEAARSUvsAGnKMMAADAAE1VSZTNHJTXFJTRwAaeUQ4AgV4BAAGTAMAATdM+Aj0VlOnABpyjDByU+YWU8MAGm8qF0AEAARSVBMAGnlEOAADAAE6XSZUWHJUfFJUawAacowwAgIwBAAEUlSLABp0UDQAAwABNxkKVMAA/SZVJHJVTFJVNwAaeUQ4AgIwBAAFqlWVgA8AATKKGcgDAAE3GPgNJlbMclcSHlbfABpwBgLsBAAGTAMAATdA+Aj2Plh/ABpwBHJZENZYvAAABAGADwABMogE1li8AAAEAYAPAAE7TAYOWL8AGm6QjHJYvFJYvwAafPw8AgIwBAAErAMAATfwrFpY3FJYvwAafPw8AgcjAAE7uAWADwABMoiMcli8Uli/ABp8xDwCAjAEAASsAwABNxpMUli/ABp8xDwABYAPAAEyigQ0BAAEcllAUlkfABpyKCwCBBgEAAYSWUsAGm7MAwABNyQDAAE3IPRWWa8AGnB8IFJaFwAacigsAPz0VlqXABpw9CRyWsRSWpcAGnD0JAIENAQABlADAAE3ISZb4HJcJFJb8wAadFA0AgIwBAAFqlwxgA8AATKKGdADAAE3GQpcUAD8/SZcwIRyXOhSXNMAGnlEOAICMAQABapdMYAPAAEyihncAwABNxj4FPSMcl2mDl2LABpukgIwBAAErAMAATfyLl2LABpukH5dtwABO8gAAAAArAWADwABO0z0cl46Dl4fABpukgcMBAAEcl5uAl5TABpsshhMCAAKEl6XABpuzFJexwAacigsAAMAATp8AwABO5z0cl86Dl8fABpukhhQBAAEUl9zABpyjDAAAwABO6D2Ml+3ABpuzFJf6wAacUQoAQpgHAD8/PTCYKR+YL8AATH0DAAMnhnaAmFbABpssFJhewAacigsAAEmYcyEcmH6DmHfABpukgIwBAAErAMAATfw+Az0cmJaDmI/ABpukgcMBAAEcmKOAmJzABpsshhMCAAKEmK3ABpuzgpi5wAabUQDAAE6fAMAATudJmMYcmNeHmMrABpwBgV4BAAGTAMAATdM+AT0emZCO7gYABoCZnsAGmywUmabABpwfCACCmb/ABptRh5nEwAacARSZ3sAGnD0JABaZ84OZ7MAGm6SByMAATu4APgNOmlSaXgAAhndgA8AATKIBHJp6HJp1HJpwFpppg5piwAabpIHIwABO7oEGAQABlADAAE3JhngBAAGXAMAATcuBDQEAAZQAwABNyEmahxyalRSai8AGocoKAICMAQABlADAAE3GPgE9MJriH5rowABMfQMAAyeGeYCbG8AGmyyCmyPABptRAD9Dmzscm0wUm0LABqHKCgCAuwEAAZcAwABN0D4CPRybZIObXcAGm6SBwwEAASeGegDAAE7nPRWbesAGocoKHJuDFJt6wAahygoAgQ0BAAGUAMAATchKm58BHJutgJumwAabLIRqAwADgZu6wAabOoKbwcAGm1Ecm82Dm8bABpukgO8AAAAAwABO7ADAAE6rP06cJJwrAACByGADwABMogEcnDGCnC3ABptRgQYBAAGBnDPABps6AMAATclJnD4cnE+HnELABpwBgV4BAAGTAMAATdM+AT0enF2O7gYABoCca8AGmywUnHPABpwfCACCnIzABptRh5yRwAacARScqcAGnD0JABSct8AGouAKAAA+A06dDJ0WAACGd2ADwABMogEcnR8UnRjABqLgCgCGeAEAAZcAwABNy0mdKhydOBSdLsAGo2ELAICMAQABlADAAE3GPgE9MJ2BH52HwABMfQMAAyeGeYCdusAGmyyCncLABptRAD9JndYcneQUndrABqNhCwCCjAEAAZQAwABN0j4BPYieOMAGmywcnkiAnkHABpsshGoDAAOCnlXABptRgp5awAabUSMcnmoUnmDABqNhCwCAjAEAAZUAwABNxieAjCeGegFgA8AATokAwABOqz9KnpEBgJ6YwAabLAaO7ieep56zoUIAAYZ7jUEAAAABA57AoUIAAAAGBgaeyAAAAIFjYAPAAE6JAJ7UAAAAhnxgA8AATKIAnuUAAACGfWADwABMogCe+gAAAIZyYAPAAEyiAJ8MAAAAhnRgA8AATKIAnx4AAACByGADwABMogAAXAE+A0mfLCEcnzscnzeFnzDABqSghngBAAGXAMAATcuAjAEAAZMAwABNxj4BPTCfSR+fT8AATH0DAAMkn14DJ4Z+J4Z/hZ+8wAakoICfz8AGpFqCn+HABqR2AD9Jn/chHKAXHKAIg5/7wAakhIENAQABhKAKwAakkgDAAE3IgIwBAAGFoBrABqSgAMAATcY+AT0woCofoDDAAEx9AwADJ4aAgKB5wAakWoGggcAGpGgAP0mgmRygqoSgncAGpJKCjAEAAZUAwABN0j4BPTCgtx+gvcAATH0DAAMnhoGAoRrA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CACCjAEAAZMAwABN0j4BPRWu2MAGrF4JHK7lFK7YwAasXgkAgQ0BAAGXAMAATcg/Tq8OrxUAADlgA6wXARyvFy6GjwEAARSvJMAGrF4JAACPCz0XrzcugK6NQR6vSI8NCAAIFq9ULoaLjUGPBYCvX8AGqsOBr2bABqrYgq9twAaq5YOvcsAGqvMUr3rABqzJCgCTFq+FLoCujUGPBACPBEmvkhyvoxSvlsAGrF4JAIKMAQABkwDAAE3SSq+oARSvr8AGrMkKAD9KsCoBKwaPDSewPrBJttYAAYaUAAAAAQOwVLbWAAAACAgIsFwAAACGb2ADwABOiQCwcAAAAIZSXQPAAE1GAWADwABMogCwewAAAG1gA8AATKIAsIYAAACEVGADwABMogCwlgAAAIYZYAPAAErYALCoAAAAOWADrBcAsLQAAACGlWADwABMogCwxQAAAIE4YAPAAEyiAABgA8AATKIBPghOsNaw2wAAhbpgA8AATKIBHrDdjwkBAAGHsOjABq3nAE6xMrFAAACGlmADwABMogEcsUSWgQYBAAEesUaPCgEAAYexUsAGrecAAMAATclOskSySwAAhpdgA8AATKIBk0WyVAGyXbJfAACDZmADwABMogGCsmHABq2lARyyahSyaMAGrmILAIC7AQABg7JswAatsgDAAE3QARWyccAGrmILHLJyFLJxwAauYgsAgQ0BAAGUAMAATcg+BU6ygrKHAACGYGADwABMogEcso6BsonABq2QgtEBAAEUso/ABq5iCwAAwABNVT0VspnABq5OChyyoBSymcAGrk4KAICmAQABFLKjwAauuQwAAMAATLs9FbKvwAauAAgcssscssMcsr0UsrjABq4ACACDcQEAATcIAMAATL6ApgEAARSyxcAGrrkMAADAAEy7gKEBAAE3wP///wDAAEy6PRWy/8AGriAJHLMMFLL/wAauIAkAgQYBAAGUAMAATclJsxYcsygUsxrABq4gCQCAjAEAAZMAwABNxj4GPRyzPoWzOMAGrc6BDAIAAjWzPwAAAQBgA8AATKIBhrM/wAat2TWzSgAAAQBgA8AATKIBjrNKwAat2RyzShSzP8AGr6MNAIENAQABlADAAE3IFLM/wAavow0AHLNZgLNQwAatgoXQAQABHLNxHLNqFLNlwAauAAgAg8UBAAE3EgDAAEy/gKEBAAFq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R8AGwSmAjAEAAYLAAEZQwAbBRADAAE3GSsAARlUBHsAARlysGwEAAZMAP07AAEZywABGegAAhlNgA487AR/AAEZ8j1gAAAAATsAARpbAAEadAACBwWADrBcBHMAARqeDwABGn8AGwdyGUQMAA4DAAEauwAbBGYHAAEa1wAbBKYLAAEa8wAbBRACPVD0cwABGzoPAAEbGwAbB3ICNAgACgMAARtTABsEZgsAARtvABsFEAI9VSsAARuUBhMAARuzABsH5Bo84J8AARvvAAEcQwABHZgAAhTwAAAABA8AARybAAEdmAAAAAQEBwABHNwAAIDxdA8AATlcBXQPAAE1GAWADwABMogAAYAORLwE+AUrAAEdDAR/AAEdKj2MBAAGAwABHXcAGwpoAAAAGwPIABsJzAAbC2QAAAAICjzsnwABHssAAR7jAAHf+A4aiAAABYAPAAE3vAAALBI8+J8AASBjAAEgnBoaIjUEAYAPAAEyiAWrAAEgmYAPAAEyiFgSPPyfAAEh3wABIhQaGiY1BAGADwABMogFqwABIhGADwABMokwEj0AnwABIxsAASNMGhqONQQBgA8AATKIBasAASNFgA8AATKKGdwSPQSfAAEkUwABJIQaGpI1BAGADwABMogFqwABJH2ADwABMooZyBI9CJ8AASWjAAEl1BoaljUEAYAPAAEyiAWrAAEltYAPAAEyihncEj0MnwABJisAASZcGhqaNQQBgA8AATKIBasAASY9gA8AATKKGcgSPRCfAAEtFwABNqAWGp41BAF0DwABNRgFgA8AATKIBHsAAS2GsEgEAATHAAEtqYAPAAEyigIBqwABLcGADwABMooZ3asAAS3RgA8AATKKGd2rAAEt4YAPAAEyihndqwABLfGADwABMooZ3asAAS4BgA8AATKKGd2rAAEuEYAPAAEyihndqwABLiGADwABMooZ3asAAS4xgA8AATKKGd2rAAEuQYAPAAEyihndqwABLlGADwABMooZ3asAAS5hgA8AATKKGd2rAAEucYAPAAEyihndqwABLoGADwABMooZ3asAAS6RgA8AATKKGd2rAAEuoYAPAAEyihndqwABLrGADwABMooZ3asAAS7dgA8AATKKGd2rAAEu7YAPAAEyihndqwABLv2ADwABMooZ3asAAS8NgA8AATKKGd2rAAEvHYAPAAEyihndqwABLy2ADwABMooZ3asAAS89gA8AATKKGd2rAAEvTYAPAAEyihndqwABL12ADwABMooZ3asAAS9tgA8AATKKGd2rAAEvfYAPAAEyihndqwABL42ADwABMooZ3asAAS+dgA8AATKKGd2rAAEvrYAPAAEyihndqwABL72ADwABMooZ3asAAS/NgA8AATKKGd2rAAEv+YAPAAEyihndqwABMAmADwABMooZ3asAATAZgA8AATKKGd2rAAEwKYAPAAEyihndqwABMDmADwABMooZ3asAATBJgA8AATKKGcmrAAEwWYAPAAEyihndqwABMGmADwABMooZ3asAATB5gA8AATKKGd2rAAEwiYAPAAEyihndqwABMJmADwABMooZ3Nz5qwABMLmADwABMooZ3Nz5qwABMNmADwABMooZ3Nz83NDc1NzY3Nzc4Nzk3Ojc7Nzw3PWrAAExtYAPAAEyihndqwABMcWADwABMooZ3asAATHVgA8AATKKGd2rAAEx5YAPAAEyihnJqwABMfWADwABMooZ3asAATIFgA8AATKKGd2rAAEyMYAPAAEyihneTlJWWlzcFNwY3BzcINwk3CjcLNww3DTcONw83EDcRNxI3EzcUNxU3FjcXNxg3GWrAAEz/YAPAAEyihndqwABNA2ADwABMooZ3asAATQdgA8AATKKGd2rAAE0LYAPAAEyihnc3P2rAAE0aYAPAAEyihnc3GjcbNxw3HTceNx83IDchNyI3IzckNyU3JjcnNyg3KTcqNys3LDctNy43LzcwNzE3MjczasAATY1gA8AATKKGd2rAAE2RYAPAAEyihndqwABNlWADwABMooZ3asAATZlgA8AATKKGd2rAAE2dYAPAAEyihncABI9FJ8AATdjAAE3sBoaojUEAYAPAAEyiAWrAAE3oYAPAAEyihm8Ej0YnwABOCcAAThcGhqmNQQBgA8AATKIBasAAThNgA8AATKKGfASPRyfAAE40wABOQgaGqo1BAGADwABMogFqwABOPmADwABMooQiBI9IJ8AAUa7AAFG4GICujUEAYAPAAEyiAZMBBY9YAAAAAAQAAAMAAAAAAAAAAABgA487AT8BCQEAwABOBQAAAAAMBo9LJ8AAUgPAAFIOwABSkgABhquNQQAAAAEDwABSI8AAUpIAAAACAgLAAFIoAAAAgZtgA8AATKIAwABS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AIE4YAPAAEyiAABgA8AATKIBPglAIR7AAFsyj1ABAAGFwABbQsAGz7oAwABbMcAAW0gATsAAW8jAAFvNAACFumADwABMogEewABbz49NAQABhcAAW9rABs+6AE7AAFvqwABb8AAAgZtgA8AATKIBHsAAW/KPTAEAAYXAAFv+wAbPugBOwABc5sAAXO0AAIa0YAPAAEyiAZNBRcAAXPYBwABc/8AAXQEAAINmYAPAAEyiAYHAAF0DwAbPfgEcwABdDBTAAF0KwAbQXwkAgLsBAAGCwABdDsAGz40AwABN0AEVwABdE8AG0F8JHMAAXRQUwABdE8AG0F8JAIENAQABlADAAE3IQT4FTsAAXSTAAF0pAACFwGADwABMogEcwABdMYDAAF0rwAbPboXQAQABFMAAXTzABtBfCQAAwABOlz0VwABdRsAG0EQIHMAAXU0UwABdRsAG0EQIAICmAQABFMAAXVDABtDJCgAAwABMu07AAF1gwABdZQAAhrVgA8AATKIBHMAAXXcawABdZ49EgtEBAAEcwABdfRTAAF14wAbQyQoAgKEBAAFqwABdf2ADwABMooSiAMAATLoAwABNVUnAAF2RHMAAXZoUwABdlcAG0TALAIFeAQABkwDAAE3TPgQ9jsAAXarABs/0HMAAXdUcwABdzRzAAF24hsAAXbPABs/0g3EBAAFqwABdu2ADwABMok4AwABMvoCmAQABFMAAXc/ABtEwCwAAwABMu4ChAQABN8D///8AwABMuj2PwABd6cAG0BwcwABd/RzAAF34h8AAXfLABtAcgQ0BAAGUAMAATciAoQEAAZYAwABMuknAAF4KHMAAXhSHwABeDsAG0ByAjAEAAZMAwABNxj4FQBzAAF46HMAAXjaEwABeLcAGz6qBDQEAAZYAwABNyIFbAQABFsAAXkSDwABePcAGz52ByMAATXYAwABN0cAAXi3AAF5KAD0cwABeXYPAAF5XwAbPnYEMAgACNcAAXl4AAAEAYAPAAEyiAYTAAF5ewAbPqjXAAF5mAAABAGADwABMogGMwABeZsAGz6ocwABeZhTAAF5ewAbSrAwAgQ0BAAGUAMAATcgUwABeXsAG0qwMABzAAF55HMAAXnKGwABebcAGz/SDxQEAATcQAMAATL+AoQEAAWrAAF57YAPAAEyihn8AwABMugDAAE1WPRzAAF6Zg8AAXpPABs+dgQwCAAI1wABemgAAAQBgA8AATKIBhMAAXprABs+qNcAAXqIAAAEAYAPAAEyiAYzAAF6iwAbPqhzAAF6iFMAAXprABtNTDACBDQEAAZQAwABNyBTAAF6awAbTUwwAHMAAXrQcwABerobAAF6pwAbP9IPFAQABNwgAwABMv4ChAQABasAAXrZgA8AATKKGfwDAAEy6AMAATVY9HMAAXtSDwABezsAGz52BDAIAAjXAAF7VAAABAGADwABMogGEwABe1cAGz6o1wABe3QAAAQBgA8AATKIBjMAAXt3ABs+qHMAAXt0UwABe1cAG0/oMAIENAQABlADAAE3IFMAAXtXABtP6DAAcwABe6IbAAF7jwAbP9IChAQABasAAXupgA8AATKKGfwDAAEy6AMAATVY9jsAAXwLABs/0kz9CwABfHgFJwABfNSIcwABfPhTAAF85wAbRMAsAgIwBAAFqwABfQWADwABMooZyAMAATcYAHMAAX1OHwABfTcAG0ByCjAEAAZQAwABN0j4GScAAX2IiHMAAX20UwABfZsAG0EQIAIC7AQABkwDAAE3QARzAAF97FMAAX3TABtBECACCjAEAAWrAAF99YAPAAEyihKIAwABN0kLAAF+HAD9JwABflhzAAF+gh8AAX5rABtAcgIwBAAGWAMAATcY+A0nAAF+yIRzAAF/EHMAAX7yGwABft8AGz/SAoQEAAZYAwABMuoCMAQABkwDAAE3GPgE9MMAAX9gfwABf3sAATH0DAAMnhraAwABgEcAGz24UwABgGMAG0F8JAAA/PRzAAGA4g8AAYDLABs+dgQwCAAI1wABgOQAAAQBgA8AATKIBhMAAYDnABs+qNcAAYEEAAAEAYAPAAEyiAYzAAGBBwAbPqhzAAGBBFMAAYDnABtW3DACBDQEAAZQAwABNyBTAAGA5wAbVtwwAHMAAYEyGwABgR8AGz/SDxQEAATcKAMAATL8AwABNVj0cwABgY4PAAGBdwAbPnYEMAgACNcAAYGQAAAEAYAPAAEyiAYTAAGBkwAbPqjXAAGBsAAABAGADwABMogGMwABgbMAGz6ocwABgbBTAAGBkwAbWQgwAgQ0BAAGUAMAATcgUwABgZMAG1kIMABzAAGB3hsAAYHLABs/0g8UBAAGVAMAATL8AwABNVj4CScAAYJghHMAAYKocwABgoobAAGCdwAbP9IChAQABNw8AwABMuoCMAQABkwDAAE3GPgE9MMAAYL4fwABgxMAATH0DAAMnhraAwABg98AGz24UwABg/sAG0F8JAAA/PRzAAGEeg8AAYRjABs+dgQwCAAI1wABhHwAAAQBgA8AATKIBhMAAYR/ABs+qNcAAYScAAAEAYAPAAEyiAYzAAGEnwAbPqhzAAGEnFMAAYR/ABtcrDACBDQEAAZQAwABNyBTAAGEfwAbXKwwAHMAAYTKGwABhLcAGz/SDxQEAAZcAwABMvwDAAE1WTsAAYobAAGKWAACGrWADwABMogEcwABipBzAAGKbloEGAQABh8AAYp3ABtAcAMAATcmDxgEAAZYAwABNyknAAGKxHMAAYroUwABitcAG0MkKAICMAQABasAAYr1gA8AATKKGbwDAAE3GPRXAAGLMwAbXoQwcwABi3BTAAGLMwAbXoQwAgQ0BAAGVAMAATcg/PY3AAGLqwAbPuh7AAGLyj04BAAEUwABjBsAG16EMAABKwABjIAEewABjJ49TBAAEgMAAYzXABs9uHMAAYz4UwABjPMAG0F8JAIENAQABlADAAE3IgsAAY0PABs+NhcAAY0jABs+6AD89MMAAY14fwABjZMAATH0DAAMnhreAwABjicAGz24UwABjkMAG0F8JAABJwABjniIcwABjqRTAAGOiwAbQRAgAgV4BAAGTAMAATdMAHMAAY7gUwABjscAG0EQIAIFbAQABasAAY7tgA8AATKKEogDAAE3RPgFKwABjzQEewABj1I9LAgACh8AAY+rABtAchsAAY/HABs/0AD9OwABkRQAAAINmYAPAAEyiAEFFwABkTAEAAAABAGADwABMogEVwABkUcAG2TIJgcAAZFXABs9+ARzAAGReFMAAZFzABtkyCQCAuwEAAYLAAGRgwAbPjQDAAE3QARXAAGRlwAbZMgkcwABkZhTAAGRlwAbZMgkAgQ0BAAGUAMAATcg+Ak7AAGR2wABkewAAhcBgA8AATKIBHMAAZIOAwABkfcAGz26F0AEAARTAAGSOwAbZMgkAAMAATpdJwABkmCIcwABkoRTAAGScwAbZtQsAgLsBAAGTAMAATdABHMAAZK0UwABkqMAG2bULAIKMAQABasAAZK9gA8AATKKEogDAAE3SQsAAZLkAPz0wwABkyh/AAGTQwABMfQMA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yQAAAIctYAPAAEyiAWq21mADwABMooctAGADkDwBPwQIAJBAHrb9kEYBAAGAtwnABxlmAAgAkEGBtynABxl9CACQQoK3TMAHGZMJAbaJj9UAAAAABAaQRi63W7dsuKwAAYcujUEAAAABA7d3uKwAAAABAQG3fwAAAIZHYAPAAE6JAABdA8AATUYBYAPAAEyiAT4ESbeNHLeYgLeRwAcaCICMAQABKwDAAE6YSrehASs/SbeyFre9gLe2wAcaCIDjwABOj0q3xgEet82sGwEAAZMAP0E+AkW39wG4ALgCAACDZmADwABMogGTARy4CYG4B8AHGm6AuwEAARa4EoC4C8AHGgiByMAATo0AwABN0AGJuBrABxpuHLgbgbgawAcaboENAQABlADAAE3IPgFJuCkcuEIcuDSAuC3ABxoIhdABAAGBuD/ABxpuAMAATpeBXgEAATeAgADAAE3TQrhLAD9KuGsBFrh5gLhywAcaCIZdwABOkUq4jgEcuJpquJVgA5GmhpeGTwEAAYC4ocAHGggAj68GkEcuuOG467y3AACBrAAAAAEDuPK8twAAAAEBAbj6AAAggvxgA8AATe8AAF0DwABNRgFgA8AATKIBPglOuQy5EgAAhlJdA8AATUYBXQPAAE1GAWADwABMogExuR9dA8AATUYBYAPAAEyiAE+5s7m4AAABhy9hAwNgA6wXYAPAAEyiYAPAAEyiXAADucC6ugAAAAMDA7nLAAAAhTlgA6wXALnWAAAAbWADwABMogC54QAAAIRUYAPAAEyiAABcAT4CSbnuIhy5+IS58sAHG8mCjAEAAZMAwABN0gEcugOFuf/ABxvWgLsBAAEWuguDugXABxu9gcjAAE12AMAATdA+Ak66IbooAACByGADwABMogEcui6FuirABxvWgQYBAAGEujDABxvJAMAATck9i7o/wAcbvR66XawdAwADFrpog7piwAcbvYHBq9ocuoQWunaDunDABxu9hp2r2IENAQABhLqGwAcbyQDAAE3IhrqNwAccKgA/PRy6qoG6pMAHG2WAggEAAYO6rsAHG70AwABNVz0eutaQygUABYC66cAHG0UWuvEuhyuNQZBAFrr6LochjUGQQRa7CC6HLI1BkEKCuxXABxuWAEm7JBy7NRa7LoG7KMAHG2WByMAATXaAjAEAAZQAwABNxkq7OwEcu0eB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AwMDwABSkwAAAIdKYAPAAE6JAMAAUqMAAABtYAPAAEyiAMAAUq4AAACEVGADwABMogAAXAAGkIouwABTBcAAUwrAAFMlAAKGFAAAAAEDwABTF8AAUyUAAAABAQHAAFMcAAAAhbdgA8AATKIAAFwABpCLLsAAU1PAAFNYwABTbwACh0wAAAABA8AAU2PAAFNvAAAAAQEBwABTaAAAAITBYAPAAE25AABcAAaQjC7AAFOVwABToMAAU8sAAYdNAAAAAQPAAFOowABTywAAAAEBAcAAU60AAACEhGADwABMogAAYAPAAEyiAUrAAFOzASMcwABTtYDAAFOzwAcr+IC7AQABNwoAwABN0BzAAFO/NzCBDQEAAYDAAFPBwAcr+ADAAE3IHMAAU8g3V4ENAQABgMAAU8rAByv4AMAATcgBYAPAAEyiBpCNLsAAVB/AAFQkwABZjAAAh04AAAABA8AAVDbAAFmMAAAAAQEBwABUPgAAAID5YAPAAE6JAABcAT4ETsAAVEvAAFRSAACEF2ADwABMogGTTsAAVGHAAFRoAAGByGADwABMogEWwABUbIDAAFRqwAcsk4HIwABOjUXAAFR4AcAAVIHAAFSDAACDZmADwABMogGTARzAAFSKg8AAVIjAByzrgLsBAAGCwABUjMAHLL4AwABN0AGLwABUlMAHLOscwABUlYPAAFSUwAcs64ENAQABlADAAE3IQT4DTsAAVKXAAFSuAACFt2ADwABMogEcwABUsoDAAFSwwAcsk4XQAQABg8AAVL3AByzrAMAATpdJwABUxxzAAFTUhMAAVMvABy1IgowBAAFqwABU1mADwABMooRyAMAATdJCwABU4QA/ScAAVPEcwABU/oTAAFT1wActSIC7AQABNyAAwABN0D4EScAAVQ4cwABVFIPAAFUSwAcs64KMAQABgcAAVRbAByypAMAATdI9HMAAVR4uh0sDAAOAwABVL8AHLJOBwABVMsAHLKmDwABVOsAHLOsAkIk/PYnAAFVGwAcsqRzAAFVRg8AAVU/AByzrgQ0BAAGUAMAATcg9HMAAVV4uhhQBAAFqwABVbGADwABMooRyAJCKQUfAAFWAhMAAVYjABy1IBgHAAFWjasAAVaNgA8AATKIcAD4CPRzAAFW6LoYUAQABasAAVchgA8AATKKEewCQikLAAFXdAQHAAFXzasAA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PxzAAEJJg8AAQkPAB77vgowBAAFqwABCS2ADwABMooXrAMAATdI+AknAAEJpIRbAAEJuLoU2jUGR6z4BPTDAAEKNH8AAQpPAAEx9AwADJMAAQqIDJ4fHJ4fIHMAAQvmDwABC88AHvu+GOgEAATcQAMAATNCAwABDHsAHvrgcwABDSBzAAEM7hsAAQznAB79ggQYBAAGFwABDPcAHvyIAwABNyYEGAQABlADAAE3JAD89i8AAQ2TAB77vasAAQ2xgA8AATKKHZj9JwABDnyIhFsAAQ6Quh7qNQZHtASEcwABDv4PAAEO5wAe+74CMAQABasAAQ8JgA8AATKKHiwDAAE3GPgE9HMAAQ/MWwABD5y6Hm41BkeyGFAEAAYPAAEQBwAe+7wDAAE74Pz0XwABEGy6Huo1BKpHtP0FDwABERRzAAEROhsAAREzAB79ggLsBAAGCwABEUMAHvtsAwABN0D4ETsAARGjAAERxAACHt2ADwABMogEewABEc41iAwADgMAARIrAB764hsAARJXAB79ggsAARJjAB77bAEnAAESrHMAARLiHwABEr8AHw7eCjAEAAZMAwABN0j4FPRfAAETJLoe6jUEqke1AHMAARQIcwABE94bAAET1wAe/YIENAQABh8AARPnAB8O3AMAATciBWwEAAYLAAEUFwAe+2wDAAE3RwABE9cAARQ0APRzAAEUmFsAARRouh5uNQZHsgcMBAAEewABFM8AATrEDAAOAwABFQcAHvriGwABFTMAHv2AcwABFUYbAAEVPwAe/YIENAQABh8AARVPAB8O3AMAATcgAAMAATvU9jsAARWrAB79gHMAARWyGwABFasAHv2CBDQEAAYfAAEVvwAfDtwDAAE3IScAARYMcwABFiYbAAEWHwAe/YICMAQABgsAARYzAB77bAMAATcZCwABFlgI/P07AAEWzwABFuAAAh8RgA8AATKIBHMAARcOAwABFusAHvriC0QEAATXAAEXEAAABAGADwABMogGGwABFxMAHv2A1wABFxQAAAQBgA8AATKIBjsAARcXAB79gHMAARcUUwABFxMAHxT4IAIENAQABlADAAE3IFMAARcTAB8U+CAAAwABNVUnAAEc7HMAAR0QUwABHP8AHxRcIAIC7AQABkwDAAE3QPgJJwABHjSEWwABHki6FNo1Bkes+AT0wwABHsR/AAEe3wABMfQMAAyTAAEgTAieHyRzAAEgAHMAAR/kUwABH+sAHxRcIAIPrAAAAAMAATMWGOgEAATcQAMAATNCAwABIJcAHvrgcwABIQobAAEhAwAe/YIEGAQABlADAAE3JAD89HMAASGoWwABIXi6Hm41BkeyGFAEAAWrAAEh4YAPAAEyih2YAwABO+D4JQBzAAEjBFMAASLzAB8UXCACCjAEAAWrAAEjDYAPAAEyihKIAwABN0sAASLzAAEjSAEnAAEjfHMAASPEcwABI6RTAAEjkwAfFFwgAgKEBAAE3gOAAwABMuoCMAQABN4DAAMAATcY+Az2LwABJCMAHvu8cwABJFRTAAEkQwAfFFwgAgKEBAAE3HwDAAEy6PYzAAEkpwAe/CI3AAEk5wAe/IpRCwABJVQE/ScAASXocwABJjBzAAEmEFMAASX/AB8UXCACAoQEAATeA8ADAAEy6gIwBAAE3gOAAwABNxj4DPYvAAEmjwAe+7xzAAEmwFMAASavAB8UXCACAoQEAATcPAMAATLo9jMAAScTAB78IjcAASdTAB78ilULAAEnwAT9JwABKXSIcwABKbxzAAEpnFMAASmLAB8UXCACAoQEAATeA+ADAAEy6gIwBAAE3gPAAwABNxgAcwABKfxTAAEp6wAfFFwgAgLsBAAE3gPUAwABN0D4DPYvAAEqVwAe+7xzAAEqiFMAASp3AB8UXCACAoQEAATcHAMAATLo9jMAASrbAB78IjcAASsbAB78ilkLAAEriAT9JwABLByEWwABLDC6FNo1Bkes+AT0wwABLKx/AAEsxwABMfQMAAyTAAEuCAieHxRzAAEtvFMAAS2rAB8UXCACGOgEAATcQAMAATNCAwABLlMAHvrgcwABLsYbAAEuvwAe/YIEGAQABlADAAE3JAD89i8AAS83AB77vasAAS9VgA8AATKKHZj2MwABMAMAHvwiNwABMEMAHvyKTPRfAAEwqLoe6jUEqke09HMAATFsWwABMTy6Hm41BkeyGFAEAAYPAAExpwAe+7wDAAE74QsAATIkAScAATJ8cwABMsYTAAEyjwAe/CIKMAQABkwDAAE3SPgM9F8AATL4ugpGNQYPAAEzHwAe+75HuPRfAAEzULoe9jUGEwABM5cAHvwiR7z0XwABM+i6Hvo1BhcAATQjAB78ikfA/AAAHvUoAB72LAAe9ugAHvpcAB8lQAAAABAAWBI1DJoKegrIGhvUAYAOOmQFqgqZgA46Zho8EjUUmgr+C0AaHyo1BAGADwABMogFqgsxgA8AATKKEogSNUieDg4OZBofLAGADjuMBaoOMYAOO44eRBI1TJ4WkhcUGh8wAYAOO4wFqhbxgA47jh5oEjUYniOeI+gaHzY1BAGADwABMogFqiPZgA8AATKKGdASNVC2EvYTWBofOAGADj/8BaoTKYAOP/4ejBI1VLolPiWEGh88AYAOQIQFqiVZgA5Ahh6wEjVYvgo2CowaG5wBgA5DqAWqClmADkOqGhwSNRy+CsILCBofQjUEAYAPAAEyiAWqCvmADwABMooZ/BI1IMIEjgSsGh9GNQQBgA8AATKIBaoEpYAPAAEyihEsEjUkwgTeBPwaH0o1BAGADwABMogFqgT1gA8AATKKETgSNVzKBP4FnBofTAGADwABMogFqgWFgA8AATKKHZgSNWDKBsIHQBofUAGADwABMogFqgcpgA8AATKKHiwSNWTKDZ4N5BoYzAGADkaYBaoNuYAORpoaXBI1KMrSQtKYGh9WNQQBgA8AATKIBarSiYAPAAEyihKIEjUsytLy00waH1o1BAGADwABMogFqtM5gA8AATKKF4QSNTDK06rUEBofXjUEAYAPAAEyiAWq0/mADwABMooXlBI1NMrUbtTYGh9iNQQBgA8AATKIBarUuYAPAAEyihesEjU4ytX61mgaH2Y1BAGADwABMogFqtZRgA8AATKKHtwSNTzK1prXDBofajUEAYAPAAEyiAWq1vmADwABMooYHBI1QMrXPtesGh9uNQQBgA8AATKIBarXlYAPAAEyihfsEjVEytfe2EwaH3I1BAGADwABMogFqtg1gA8AATKKGAQwGjVwlwADgxMAA4MvAAOEQAAWH3Y1BAWoAYAOUCIfAAAABA8AA4NfAAOEQAAAAAwMDwADg3wAAAIFjYAPAAE6JAMAA4OsAAABtYAPAAEyiAMAA4PYAAACEVGADwABMogAAYAPAAEtQAAaNYyeGhoaNhsIAAYffAAAAAQOGmYbCAAAAAQEBhqQAAACGUl0DwABNRgFgA8AATKIAAGADwABOiQFKhq4BHIa1aoauYAOO44eRhk8BAAGAhrzAB8yDAI+vBo1kJ4dEh0uHhgABh+AAAAABA4dah4YAAAABAQGHZQAAAIZSXQPAAE1GAWADwABMogAAYAPAAE6JAUqHbwEch3lqh29gA47jh5qGTwEAAYCHgMAHzNwAj68GjWUniHKIfIiwAAGH4QAAAAEDiIiIsAAAAAEBAYiQAAAAgWNgA8AATokAAGADrBcBSoibARyIomqIm2ADjuOHkYZRAQABgIipwAfNNQCO6waNZi6LlYucjBMAAYfiAAAAAQOLpowTAAAAAgEBi64AAAAiYAPAAE3vAAGLvQAAAIciYQMBYAPAAE3vYAPAAE3vAWoAYAHAAE2sAmADwABOiQFKi+cBHIvsaovnYAOQIYeshk8CAAGAi/PAB82FAYcigYwHwAfNk5AoBo1nLo4kjiyOngABh+MAAAABA442jp4AAAACAQGOPgAAAIFjYAPAAE6JAAGOTgAAAIVOYQMCYAPAAE3vYAPAAE3vYAPAAE3vAWoAYAHAAE2sAlsBSo55ARyOfmqOeWADkCGHrIZRAgABgI6FwAfN/wGFToGOlsAHzg6QJwaNXSWCtIK7hDkAAYfkjUEBaoK7YAOT+iYAAAEDgsWEOQAAAAICAoLNAAAAgWNgA8AATokAgtUAAACFTmEDAltbWwAAWwE+CE6DAQAAAIFhYAONgwBJgw0cgxmBgxHAB86TgIwBAAErAMAATfw+AT2KgyjAB86nH4M3jZoAAAAAPgE9ioNcwAfOpx+Da42kAQABgYOAwAfOkwBOg5SDmwAAhThgA444AR+DoY5GAQABgoOzwAfOpwA9F4PHg4PAwAfO+YU5gIPPwAfOhY46PReD4IOD2cAHzvmFOhaD8oCD68AHzoWByMAATo2OOz0chAODg/zAB875hTsBAAGTAI4gPRyEFoOED8AHzvmAjQAAAACOEUqEIQEWhDGChCjAB86ngOaNmAaNXi7AAE1WwABNXsAATZQAAYfljUEAAAABA8AATXHAAE2UAAAAAQEBwABNegAAAIL8WwAAWwFKwABNhQEcwABNjIDAAE2FwAfPrYfmAAAAAAAGjV8ytha2G7Z4AAGH541BAAAAAQO2K7Z4AAAAAQEBtjAAAACGV2ADwABMogAAYAPAAErYAUq2QQEctmIctkuAtkLAB8/1gKEBAAFqtk1gA8AATKKHtwDAAEy6gIwBAAFqtmVgA8AATKKF+wDAAE3GBo1gMrZ6tn+23AABh+iNQQAAAAEDto+23AAAAAEBAbaUAAAAhldgA8AATKIAAGADwABK2AFKtqUBHLbGHLavgLamwAfQZYChAQABaraxYAPAAEyih7cAwABMuoCMAQABarbJYAPAAEyihgEAwABNxgaNYTK23rbit2gAAYfpjUEAAAABA7b3t2gAAAACAgK2/AAAAIfqYAPAAEyiALcGAAAAh+tgA8AATKIAAGADwABMogFKtxMBHLdEHLcbN8ABAACBDQEAARy3PRy3JIC3H8AH0NWAoQEAAWq3JmADwABMooYHAMAATLqDcQEAATcKAMAATL4AwABNyICmAQABHLdQgbdLwAfQ44ChAQABardSYAPAAEyihgcAwABMugDAAEy7Bo1iJcAA5X7AAOWJwADnwQABh+yNQQFqwADliWADk/omAAABA8AA5Z/AAOfBAAAAAwMDwADlqgAAAIftXQPAAE1GAWADwABMogDAAOW1AAAAgsBgA8AATKIAwADlvwAAAIegYAPAAEyiAABgA8AATKIBPgROwADl08AA5dYAAYfuYAPAAEyiAYLAAOXYwAfRw0nAAOYMJcAA5hYAgMAA5hDAB9GcYAOsFz4BScAA5ioiIhzAAOYzgcAA5i7AB9GzgV4BAAGTAMAATdMAHMAA5j6DwADmO8AH0d6BXgEAAZMAwABN0wAcwADmSYPAAOZGwAfR3oFbAQABFsAA5lIUwADmTMAH0ZwAAWADrBeByMAATXYAwABN0T4CRcAA5mIBwADma8AA5m0AAINmYAPAAEyiAYHAAOZvwAfRswEcwADmd4TAAOZ1wAfSiYC7AQABg8AA5nnAB9HeAMAATdABjMAA5n3AB9KJHMAA5n6EwADmfcAH0omBDQEAAZQAwABNyD4CTsAA5pLAAOaXAAGHxGADwABMogEcwADmnhTAAOaZwAfRnAABYAOsF4LRAQABhMAA5p/AB9KJAMAATVVJwADmqyEcwADmyBzAAOa1hcAA5rDAB9LtgKEBAAFqwADmt2ADwABMooSiAMAATLqAjAEAAYXAAObLwAfS7QDAAE3GSsAA5tEBHMAA5tqEwADm2MAH0omBBgEAAYHAAObcwAfRswDAAE3JP0rAAObwARzAAOb6g8AA5vfAB9HegQYBAAGBwADm/MAH0bMAwABNyT8/RcAA5zEBwADnOsAA5zwAAINmYAPAAEyiAYHAAOc+wAfRswEcwADnRoTAAOdEwAfTwYC7AQABg8AA50jAB9HeAMAATdABjMAA50zAB9PBHMAA502EwADnTMAH08GBDQEAAZQAwABNyD4CTsAA513AAOdiAAGHxGADwABMogEcwADnaYDAAOdkwAfRnILRAQABhMAA52rAB9PBAMAATVVJwADnciEcwADnjxzAAOd8hcAA53fAB9QlgKEBAAFqwADnfmADwABMooSiAMAATLqAjAEAAYXAAOeSwAfUJQDAAE3GSsAA55gBHMAA56GEwADnn8AH08GBBgEAAYHAAOejwAfRswDAAE3JP0rAAOevARzAAOe5g8AA57bAB9HegQYBAAGBwADnu8AH0bMAwABNyQ8kJSYnKCkqKywtLi8wMTIAB9TrAAXhwgAF484ABeYFAAXq6wAF7IwABfAwAAZVTwAGWxEABl+YAAZ5HwAGf6cABoQ5AAaGlAAGihkABopwAAaNEAAGke0ABpM1AAaWewAGmbAABqW5AAanzQAGuSQABrpcAAa8hgAGvpMABsCJAAbC6gAG5ewABunOAAbrSAAG7JYABu3DAAbykwAG89YABvUpAAb3HgAG+UsABvsSAAb8jAAG/5kABwF1AAcFfwAHCCIABw1NAAcPTAAHENkABxFqAAcVJwAHGJQAByBEAAcidgAHJaIAByevAAc9TgAHRI0AB0luAAdQzgAHUkkAB1/oAAdnaQAHayQAB21/AAdt1gAHbxAAB3SJAAd3HAAHfiEAB4PKAAeE1wAHhukAB4eZAAeJ7wAHjuwAB48yAAeQ3AAHk98AB5VDAAeXVQAHmZYAB51IAAefIQAHotEAB6+hAAexfwAHtgwAB7whAAfJaQAAAFcAB8v+AAfMZgAHzL8AB80YAAfNaAAHzeIAB85eAAfPhAAHz9YAB9BGAAfQtgAH0WkAB9TrAAAADAACBpH6h+8zAAAGgf0AAJO3AAEBAQOCIgAAAQABAQKA9ILDgkoAAJfSAAEBAYfwglcAAAEAAIJsAACNQQAAgoMAAJfSAAEBA4fxh/KH8AAEAIfzAIf0AIf1AIf2A5H8NI9vh/cAAF4DAAICAmADwABOiV0DwABNeAJgA8AATolgA8AATokAAVcDkfwAXQOBIgFgA5ImAAKPkwAAAIf4YAPAAE6JAI+vAAAAh/ldA8AATXgCYAPAAE6JYAPAAE6JAACR/TWBtYf6AAEAAAEhYAPAAE3vAVteAwAAAAAAAVcDkf0BXwMAAF8DAAAAAACR/jWCEIf7AABeAwAAAAAAAVcDkf4AXQOBIgFbAAAADgKSHzaBr4HPgoUDh/wBaoGwYAPAAEqfAwABYAPAAE3vAAFgA5I8AAADBpIhNoHvgfeCIgQFAAFqAGADlAiHzAAAAQOB/4IiAAAAAQEBggcAAACH/mADwABOiQAAYAOSHwAGkiM2giaCMYJNAQSH/gFqAGADlAiH2AAAAQOCN4JNAAAAAAAAAGADwABOiQAGkiU2glGCWYKDAASIAAFqAGADlAiH5AAAAQOCZIKDAAAAAAAAAGADkjwAAAAH19IAB9gKAAfYNwAH2GIAAAADApImNIG1gbuN3wOIAgAAAWADwABN7wAACwSSKDSCJoIsCYDmAGADwABOiQAEkik0gomCkgmIAwBgA8AATKIABJIqNILigu0JiAQAYAPAAE6JAASSKzSHIIc+BogFAWqHBmADwABKi4c0YAPAAEyiAWqHMWADwABMooftBJIsNIeCh6IGiAYBaodoYAPAAEqLhzRgA8AATKIBaoeUYAPAAEyih/MEki00h++IFQaIBwFqh9VgA8AASouHNGADwABMogFqiARgA8AATKKH8wSSLjSIYoiIBogIAWqISGADwABKi4c0YAPAAEyiAWqId2ADwABMoof5BJIvNIjIiN4GiAkAYAPAAEyiAWqI2GADwABMooftBJIwNIkUiSsGiAoAYAPAAEyiAWqJJWADwABMoofzBJIxNIlqiYQGiAsAYAPAAEyiAWqJfmADwABMoofzBJIyNInDid0GiAwAYAPAAEyiAWqJ12ADwABMoof5AgWSOjSDzYPNhIAAgOYAA4PshIAAAAABAQGD9AAAAIDmYAPAAE6JAABgA5ImAT4BPR6EXsAAS8oCAAKAhGvAB9n/J4DmAAQIAJIogIQNwAfZ/wgAkikrCACSKisJAYPNwABOBQAAAAAFkjs0hdWF1YbSACQAA4XzhtIAAAACAgKF+AAAAIgDYAPAAEyiAIYKAAAAiARgA8AATokAAGADkiYBPgI9HoZ1kjYBAAGAhojAB9plAD0ehqbAAEvKAgACgYazwAfacyeIBAAECACSKCsIAJIpgIZCwAfaZQgAkiqBhmPAB9pzCQGF1cAATgUAAAAABAaSNTSJ4onwip4AAYgNkfoAAAABA4oBip4AAAABAQGKBgAAAIgDYAPAAEyiAABgA8AATokBPgM9HooXkjYBAAGAiirAB9r4AEmKOhyKSICKPsAH2viAjAEAAWqKS2ADwABMooftAMAATcY+AUqKYgEniA4/SoqFASeIDwaSNjSKo4qqi+MAAYgQkfoAAAABA4q8i+MAAAABAQGKwQAAAIgDYAPAAEyiAABbAT4EPR6K4MAAS8oCAAKAiu3AB9tzJ4gDAEmLChyLGICLDsAH23OAjAEAAWqLG2ADwABMooftAMAATcZKiyoAP0mLNiIci0WAizvAB9tzgV4BAAFqi0hgA8AATKKH+QDAAE3TAByLaYCLX8AH23OBWwEAAWqLbGADwABMoofzAMAATdE+AUqLiAA/PTCLmh+LpMAAS9IDAAOAi7jAB9tzJ4gDJ4gRAAaSODSMH4wkjF0AAIgSAAAAAQOMK4xdAAAAAAAAAGADwABK2AFKjDEBIiEcjDwWjDIuiAOSKYCMAQABKwDAAE3GACEcjFUWjEkuiASSKoCMAQABKwDAAE6YBpI3NIymjK2N3QAAiBOR+gAAAAEDjLaN3QAAAAAAAABgA8AATokBPgFJjL8hHIzKFozDLoDmkiiAjAEAASsAwABOmD4BSozbARaM4i6A5pIoPgNAIRyNDhaNBC6IA5IpgIwBAAErAMAATcaNBI0VAEAhHI0xFo0lLogEkiqAjAEAASsAwABOmI0ljTgASo1BARyNTWqNSGADkCGHrIZPAQABMo1UYAPAAE6JYAPAAE3vAyeGtRaNZi6IA5IpJ4EiHo2EkjUBAAEWjZYuiAOSKQAnOzKNsmADwABOiWADwABOiQEniBQWjb4uiASSKgCQKAAAB9rZAAfbVAAH3CkAB9yCAAfdcwAAAAQCkjw3gUuBWoMGB4gVAWqBWmADk/omAAFgA8AATe8AAAEEkj43gcOB1QaIFgBgA8AATKIBaoHTYAPAAEyicgAEBpJANoEqgTKBbAQBAAFqgTJgA5P6JgAAAQOBOYFsAAAAAQEBgUEAAACH/mADwABOiQAAYAOSPAE+AUqBTgEegVmSIQEAAYCBYsAH3fAABpJCN4IcgieCLAECh/4AAAABA4IsgiwAAAAAAAAAYAPAAE6JAAaSRTeCkoKagqcAAogAAAAAAQOCpYKnAAAAAAAAAGADkjwABpJDNoFwgYyBqgEBiBcBaoGMYAOT+iYAAAEDgZeBqgAAAAAAAABgA5I8AUqBmgEegZqSCQAAAAAAAAfdzAAH3hoAB94/AAfeYgAH3poAAAAEApJGN4RkhHOFmweIGAAAAWADwABN7wAAAgSSSDeEqISsCYZNAGADwABOiQAEkkk3hOKE7QmIGQBgA8AATokAAQWSTjeE8oTyhYcAAAADhPiFhwAAAAICAoT+AAAEhk1gA8AATokAhQkAAASIGWADwABOiQAAYAOSRgE+AUmFHCIchSYWhSEuhk2SSICMAQABJ4gaAMAATpgBHIU3FoUyLoZNkkiBxAEAASeF+ADAAE6mPgE9MIVOH4VYwABL0QEAASeIGwA/AwgBkkiAAMAH3wsIAZJJgQDAB98ZCQGE8sAATgUAAAAAAQaSTDeFjIWQhZkAAogckfoAAAABA4WXhZkAAAAAAAAAXQPAAE14AltbAAAAB9+bAAffxQAAAAECkk83hhOGGYkCA4gdAAABYAOSRgAAAwSSUTeGP4ZCCYgeAGADwABLUAAEklI3hlOGVgmIHwBgA8AAS1AABJJUN4ZihmgYgpGR+gBgA8AAS1ABKwEFkl03hwiHCIgeAAAAA4cNiB4AAAAEBASHFQAAAIZNYAPAAE6JAIciAAAAiBlgA8AATokAhzQAAASIHmADwABLUACHPgAABIgfYAPAAEtQAABgA5JPAT4EPR6HeMAAS8oCAAIWh4UuiB6SUSeIHgA9HoekwABLygIAAhaHsS6IH5JSJ4gfAEmHwiEch8wWh8guiB6SUYC7AQABFofOLogfklIAwABN0D0wh9Qfh97AAEvRAQABJ4ggAD89F4gOLoKRkfoWiBcuiB6SUZJUAwgBklGCAMAH4FoIAZJSgwDAB+BoCQCHS5JOAgACgIdRwAfgPoGHV8AH4EwAAwaSVjeGbIZ3hoYBACIAAAABA4Z9hoYAAAAAAAAAYAPAAEtQAUqGgAEWhoAugpGR+pJUBpJYN4aKho6HAwIAIgAAAAEDhpOHAwAAAAEBAYabAAAAgYpgA8AAS1AAAFwBPgJJhqQchqqAhqjAB+FvgLsBAAEWhqwuiB6SUQDAAE3QPgE9iIa5wAfhbxaGvS6IHpJRSYbNHIbTgIbRwAfhb4KMAQABFobVLogfklIAwABN0j4BPYiG4sAH4W8WhuYuiB+SUj89F4b1LoKRkfqAhv7AB+FvklQGkls3iCOIJ4kAAACIHJH6AAAAAQOILokAAAAAAAAAAF0DwABNeAJbWwE+Ak6IO4g/AACBq10DwABNeAJgA8AATolgA8AATe8BMohBYAPAAE6JYAPAAE3vByeF2SeIHSeA3CSIdQIniCEWiHAuhk2SSCeGTRaIhS6GTZJIJ4gZFoigLogZkkknIhaIvC4iklYniB4WiNAuiB6SUSeIHxaI4i6IH5JSSojyAYCI+cAH4iQAAAfhIQAH4VMAB+H3AAfiqAAAAAMCkl43iTGJN4q5A4giAAABYAOSRgAAAQSSYTeJoYmtGIKRkfoAYAPAAEtQASgAAAAAAAAAAAEFkmo3iVKJUomVAAAAA4lZiZUAAAACAgKJYQAAAIZNYAPAAE6JAIluAAAAiBlgA8AATokAAGADkl4BPwEJAIl9kk4CAAKAiYPAB+MLgYmJwAfjGQADBpJjN4mxibyJywEAIgAAAAEDicKJywAAAAAAAABgA8AAS1ABSonFARaJxS6CkZH6kmEGkmU3ic+J04n3AgAiAAAAAQOJ2In3AAAAAQEBieAAAACBimADwABLUAAAXAE+AT0XiekugpGR+oCJ8sAH45aSYQaSaDeJ/IoAircAAIgckfoAAAABA4oHircAAAAAAAAAXQPAAE14AltbAT4CTooUihgAAIGrXQPAAE14AmADwABOiWADwABN7wEyihpgA8AATolgA8AATe8FJ4XZJ4giJ4DcJIpQAieIIRaKSy6GTZJIJ4ZNFopgLoZNkkgniBkWinsuiBmSSSciFoqXLiKSY0qKqQGAirDAB+PoAAAH40gAB+N6AAfjuwAH5FYAAAADApJrN4q8isKPvAOIIwAAAWADwABN7wAAAQSSbjeK74sTBYgkkfoAXQPAAE14AmADwABOiWADkkYBHor+wABNfwACYAPAAE6JYAOSRgAAAQWSdgAAAAAEAAADAAAAAAAAAAAAYAOSawE/AQkBAMAATgUAAAAABAaScDeLVotijEoAAYglAAAAAQOLaoxKAAAAAQEBi3IAAACIJmADkkYAAFwBPgM9HouOwABLygIAAoCLm8AH5P4niCYASYuyIRyLzByLvhqLtpJugtEBAAEWi8aAi7/AB+T+hk2SSADAAE2MgIwBAAErAMAATfw+AT0wi90fi+fAAEvRAQABJ4gnAD89HIwwGowokm6BDAIAAhaMOICMMcAH5P6GTZJIgIxAwAfk/gDAAE2NBpJxN4yTjJ+NEQABiCgAAAABA4ypjREAAAABAQGMsQAAAIgmYAOSRgAAXAE+Aj0ejM3AAEvKAgACgIzawAflsSeIJgA9HIz6Gozxkm6DbAEAARaNCICNAcAH5bGGTZJIAMAATZUGknM3jUuNpY49AAGIKZH6AWqNTGADwABKn4f/AAABA42xjj0AAAABAQGNuQAAAIDcYAPAAE6JAABgA8AATokBPgNOjceNzgAAiCZgA5JGARyN2BqN0JJugtEBAAGAjdnAB+YjAMAATYxJjeIcje2BjebAB+Y8gIwBAAErAMAATfw+AUqN/gErP0qOFQEcjiFqjhxgA5Ahh6yGTwEAARyOL4GOKMAH5jyIHJH6AAAAAJJMAJAoBpJ0N453jtGPugABiCqR+gFqjnhgA8AASp+H/wAAAQOO3o+6AAAAAAAAAGADwABOiQE+BE6O647zAACIK10DwABNRgFbATGO9VsAPgJOjxkAAACBB10DwABNPwFgA5JGARaPGR4Ak80BAV0DwABNBAFgA5JGARaPGRqPEJJugQHAAE2bAIEIwABNJkUAAAEcjxmBAMAH5vyBCQAAAADAAE1BAD4CTo8GAAAAiCZgA5JGARaPIYEAwAfm/IEKwABNQz4BPRyPMYCPKcAH5uOAggEAARyPPIKPNcAH51SIHJH6AAAAAJJMAMAATVdOj1aPWgAAgatdA8AATXgCYAPAAE6JYAPAAE3vATKPXGADwABOiWADwABN7wInhdkniCwniCuAj4vAB+bjSo+fARyPq2qPpmADkCGHrIZPAQABgY+ywAfnmwCQKAAAB+ThAAfllAAH5fkAB+auAAfn9gAAAAQCknc4gguCEYUyA4gtAAABYAPAAE3vAAADBJJ5OIK0gtwJiC4AYAPAAEyiAR6Cw5IPAAAAAASSejiDbIOUCYgvAGADwABMogEeg3uSEAAAAAAEkns4hAOEDAmIMABgA8AATwoAAQWSfziEEYQRhDQAAAADhCSENAAAAAEBAYQqAAAEiDBgA8AATwoAAGADkncBPwIIAZJ7gADAB+iMCQGEEcAATgUAAAAAAQaSfTiEOYRAhTAAAIDvAAAAAQOESIUwAAAAAAAAAGADwABOiQE+AUmEUSEchF8WhFUuiDCSe4CMAQABKwDAAE8xPgFKhHABJIRwByeIMRaEky6ILpJ5J4ZcFoShLogvknonhx0niDIWhMkuiDCSez4BSoToASSFJgQniDEWhQsuiC6SeSeGXBaFGS6IL5J6AAAH6LkAB+lIAAAAAQKSgDiF84X5jYYDiDMAAAFgA8AATe8AAAABBZKGAAAAAAQAAAMAAAAAAAAAAABgA5KAAT8BCQEAwABOBQAAAAADBpKCOIZsho+IsAABiDQAAAABA4aWiLAAAgAAAAAAXQOBIgFgA5J3AT4OTgAAAAGINV0DaAFgA5J3AR+Gn3UAAWADkncAAE4AAAAAiDZdA4EeAWADkncATgAAAACIN1sATgAAAACIOFsATgAAAACIOVsATgAAAACHgmADwABMogGTTgAAAACHg1sATgAAAACIOlsAT4aPAAAAAIg7WwADhpaIsAQAAAMAAwAAAACIPFsAAAAAAIg9WwAAAAAAiD5bAABbAUs+A0E+CU6G8Ib8AAGIP2ADmL4BHocCmMAAAAAATocthzoAAYhAXQOBQgFgA8AATwoBHodAgUQAAWADwABPCgAAPReHYhSHVsAH6mEMAILYNIdsA4dsh5MAAAABAQGHcQAAAIDrYAPAAE8KAABcAUqHeQEch4YUh3nAB+p4DQBlAQABFIePwAfquA4AAIFKmMI9HofSkg0BAAEWh+0Uh+HAB+phDACIQZjGAE2IOgI1AAAAAABbAR6IOjgEAAQWiE0UiEDAB+p4DQBvgUeDAMAH6feEAMAH6gAUAMAH6iwIAAArTog0iDgAAIDrYAPAAE8KAR6ITZPNAQFgA8AATwoBFADAB+o/CQAAPRyIfBSIcMAH6mEMAICNAAAAAJjEPYmIicAH6d0fiJSSfwEAARSIqMAH6z4OAABCAAA9HgA7AgACgADAB+nBgQDAB+ndAEqIsAADAQBbAQAAAACIPVsAAQAAAACIPlsAPgE9HACAAMAH6cFoAgACFADAB+uzDAAUAMAH67wNAACBSz2KAMAH6e4eADwBAAEUAMAH6iwIAAA9iwDAB+n3HgA2AQABFADAB+osCAAAPYwAwAfqAB4ANwEAARQAwAfqLAgAAD0chpaAAMAH6cFtAQABFADAB+osCAAAAEoAARYAgADAB+nBb4FHBpKDOImUibeMOQABiEIAAAABA4nHjDkAAgABAAABidUAAACIQ2ADwABK2AFqid1gA8AAStg/XQOBIgFgA5J3AT4OTgAAAAGINV0DaAFgA5J3AR+J63UAAWADkncAAE4AAAAAiDZdA4EeAWADkncATgAAAACIN1sATgAAAACIOFsATgAAAACIOVsATgAAAACHgmADwABMogGTTgAAAACHg1sATgAAAACIOlsAT4m3AAAAAIg7WwADiceMOQQAAAMAAwAAAACIPFsAAAAAAIg9WwAAAAAAiD5bAABbAUs+A0E+Cj0eif/AAEvKAgACgIoMwAfsbCeIQwBOim6KegABiD9gA5i+AR6KgJjAAAAAAE6Kq4q4AAGIQF0DgUIBYAPAAE8KAR6KvoFEAAFgA8AATwoAAD0XiuAUitTAB+1HDQCC2DSK6gOK6osRAAAAAQEBiu8AAACA62ADwABPCgAAXAFKivcBHIsEFIr3wAftXg4AZQEAARSLDcAH7Z4PAACBSpjCPR6LUJIOAgACFotuFItiwAftRw0AiEGYxoCLeMAH7GwATYvDAjUAAAAAAFsBHovDOAQABBaL1hSLycAH7V4OAG+BR4QAwAfsx4UAwAfs0BQAwAfs/AkAACtOi72LwQAAgOtgA8AATwoBHovWk80BAWADwABPCgEUAMAH7Q8KAAA9HIwFFIv5wAftRw0AgI0AAAAAmMQ9iowSwAfsrR+MHZJ/AQABFIwxwAfuKw8AAEIAAD0eADsCAAKBAMAH7JGCAMAH7K0ASow5AAMBAFsBAAAAAIg9WwABAAAAAIg+WwA+AT0cAIEAwAfskWgCAAIUAMAH7qANABQAwAfuqQ4AAIFLPYsAwAfsvh4APAEAARQAwAfs/AkAAD2MAMAH7MceADYBAAEUAMAH7PwJAAA9jQDAB+zQHgA3AQABFADAB+z8CQAAPRyJx4EAwAfskW0BAAEUAMAH7PwJAAAASgABFgCBAMAH7JFvgUcGkoQ4jOWM842EAAGIRAAAAAEDjP+NhAAAAAEBAY0IAAAAiEVgA5h5AABgA8AATokBPgI9Ho0lwABLygIAAoCNMsAH71gniEUASo1LAR6NUpIRAQABFo10gI1swAfvWIhGmIkAAAAH6ZYAB+xOAAfvOwAH758AAAADApKHNYWYhZ6KTwOIRwAAAWADwABN7wAABQSSijWGGIYiBohIkfoAYAPAAEyiAWqGIWADwABMooRIBJKLNYY3hkEGhAKR+gBgA8AATKIBaoY/YAPAAEyihEsEkow1hlaGXwaE0JH6AGADwABMogFqhl1gA8AATKKIEQSSjTWGboZzCYhJkfoAYAPAAEyiAASSjjWGp4apCYDcAGADwABMogABBZKVNYauhq6GyQCAipH6AAOGtIbJAAAAAgIChroAAASISWADwABMogCGxgAABIDcYAPAAEyiAABgA5KHAT8DCAGSjYAAwAfwcQgBko6BAMAH8H8JAYauwABOBQAAAAADBpKQNYeuh7qIBgABiEoAAAABA4e/iAYAAAABAAABh8UAAACA3GADwABMogFqAGABwABNrAJgA5KHAT4BSofQAR+H25KVAgACaofiYAPAAEyihEg1h+oAAAEAYAPAAEyiAYCH6sAH8NQjHIfqgYfqwAfxCoCMAQABKwDAAE3GHofwkhQAAAAAgYfqwAfxCgFgA8AATKIABpKRNYj6iQaJKwABiEsAAAABA4kKiSsAAAABAQGJDwAAAIDcYAPAAEyiAABgA5KHAUqJFgEfiRqSlQIAAmqJIWADwABMooRLgIkowAfxaQAGkpI1ih6KKopNAAGEVAAAAAEDii2KTQAAAAEBAYoyAAAAgNxgA8AATKIAAGADkocBSoo5AR+KPZKVAgACaopEYAPAAEyiiBGAikrAB/G5AAAAB/C2AAfxTAAH8ZwAB/HsAAAAAwKSljWMg4yJlcEDiEwAAAFgA8AATe8AAAEEkpk1laCVvwWITZH6AF0DwABNRgFgA5K+AR6VrcAASD4BAWADkr4BkwABBZKiAAAAAAQAAAMAAAAAAAAAAABgA5KWAT8BCQEAwABOBQAAAAAFBpKbNY2MjZiPcAABiE4AAAABA42hj3AAAAADAQGNqQAAAIZNYAPAAE6JAAKNtAAAAIhPXQPAAE14AltbAWoAYAHAAE2sAo3EAAAAiFBgA5KHAWoAYAHAAE2sAlwBPghJjdEhao3WYAPAAErYg/tKjeQAPz0ejf7AAEvKAgACgI4LwAfyiSeGTQBJjh4hHo4jkhMAAAAAPgI9HI56Go5zkpmAggEAASsAwABNV0qOiwA/To6hjqcAAIhRYAOSvgEfjq2SzQEAAYCOusAH8okASY7FIRyO04GOycAH8piAjAEAASsAwABN/D4BPReO6oOO5MAH8x6IUpH6gY73wAfymJLDP0mPDCEcjxWCjxDAB/KygIwBAAErAMAATfw+AT0XjyyDjybAB/MeiFCCjzPAB/Kykso/PRyPShqPQ5KZgIIBAAGDj07AB/MeAMAATVc9HI9gg49awAfzHohTkfoAAAAAkscGkpw1j7OPv5FAAAGIVAAAAAEDj8mRQAAAAAAAAABcAT4FSY/SIWqP12ADwABK2IP7PgFKj+0AP0mP/xyQERaQChqQA5KZgcjAAE12gIwBAAGTAMAATcY+AT0wkB8fkCnAAEw+AQABJ4hVAD9OkJGQlwAAiFFgA5K+ARyQoBqQmZKZhC8AAAAAwABNZUmQshyQvICQtsAH9D2AjAEAASsAwABN/D4BSpEKAD89HJE0gJEuwAf0PYhWAAAAAJLIBpKdNZFikW6S9wABiFcAAAABA5F5kvcAAAACAQGRgQAAAIZNYAPAAE6JAAGRjAAAAIhPXQPAAE14AltbAWoAYAHAAE2sAlwBPgZJkZ4hapGjYAPAAErYg/tKkbEAPz0ekcvAAEvKAgACgJHYwAf0qyeGTQBJkeshHpHwkhMAAAAAPgFKki0AP06SQwAAAIhYXQPAAE14AltbAEmSWSEckmeBkl3AB/S6gIwBAAErAMAATfw+AT2KknjAB/UXHpKPiVkBAltbAYGSmMAH9LoAPz0ekq6SGAMAAyeIWYCSysAH9KsektCSEgEAAYKS4cAH9RcAAAaSnjWTi5OUlHkAAYhaAAAAAQOTn5R5AAABAAAEIWADwABN7wFbBAICk6cAAACGTWADwABOiQCTxQAAAIK8XgMAAAAAAAFXA5H9AV8DAABfAwAAAAKT2gAAAIhPXQPAAE14AltbAWoAYAHAAE2sApPqAAAAiFBgA5KHAWoAYAHAAE2sAl8DAAABPgI9HpP3kpsDAAGAlAHAB/WrAohPgpQSwAf114hQg5QjwAf18Uw+AUqUOgEclEmBlEHAB/W5bgAAAAAAPgE9HpRjkpwAAAAABpKgNZVYlWeVfgEBiFsAAAABA5VrlX4AAAAAAAAAYAPAAEyiAUqVbgEelW6SFQAAAAAAAAfybAAH89AAB/SOAAf1ggAH9lMAB/aFAAAABQKSozWXIpcooVIDiFwAAAFgA8AATe8AAAMEkqY1oQ2hFAmIXZH6AGADkqMABJKnNaEioSkJiF6R+gBgA8AATKIABJKoNaFFoVAJiE2R+gBdA8AATUYBYAOSsQExoU5gA5KxAAIFkq81mGGYYZjEAAAAA5htmMQAAAABAAABmHwAAABNYAOSowFqAGABwABNrAJgA5KjAT4AAwgAkqaAmJfAB/cfCACSpx6YsZIUAAAAAAkBmGHAAE4FAAAAAAWSsDWaL5ovmroAiF8AA5pGmroAAAABAQGaSwAAAIhgYAPAAEyiAABgA5KjAT4BPR6amMAAS8oCAAKAmqXAB/d4J4hgAAMIAJKmKwgAkqeAmn3AB/d4CQGaL8AATgUAAAAABAaSqjWbMZs2nIQAAG0AAAABA5s7nIQAAAACAQGbQwAAAIZNYAPAAE6JAAGbTgAAAIhPXQPAAE14AltbAWoAYAHAAE2sAlwBPgVJm2AhaptlYAPAAErYg/tKm3MAPz0em43AAEvKAgACgJuawAf33ieGTQBOm7GbtwAAiFFgA5KxAR+bvZK9AgACgJvLwAf33hab0S6IXpH6kqcAPRyb5hab3y6ITZH6kqiAggEAAYKb6sAH+DYAwABNVz0cm/yCm/bAB/g2iGGR+gEAAVIDTpwDAAABAF0DwABNeAJbWwEynANbWwBJnAshHJwZgZwPwAf37YCMAQABKwDAAE38PgJOnCUAAACBB10DwABNPwFdA8AATZ8CW1sBFpwlHgCTzQEBXQPAAE0EAV0DwABNnwJbWwEWnCWBnCXAB/ftg9rAAE2ZAIEIwABNJkUAAAEcnCWEAMAH+MOBCQAAAADAAE1BAD4CTpwlAAABAF0DwABNnwJbWwEWAIQAwAf4w4EKwABNQz0cnCWDnAPAB/iRgQwCAAIWnCWFnCXAB/kngtLAAE2hFpwlhZwlwAf5JyLAAE2iAMAATY0/SZw2IRycQhacOi6IXZH6kqaAjAEAASsAwABN/D0cnFWDnAPAB/iRgQwCAAIniGIcnGcWnF8WnFcuiF2R+pKmiF6R+pKnhjoBAAE3EADAAEzQAMAATY0/g5wDwAf4kQCSuQaSqzWc45zoni0AAIhjAAAAAQOc754tAAAAAgEBnPcAAACGTWADwABOiQABnQIAAACIT10DwABNeAJbWwFqAGABwABNrAJcAT4FSZ0UIWqdGWADwABK2IP7Sp0nAD89Hp1BwABLygIAAoCdTsAH+fgnhk0ATp1lAAAAiFhdA8AATXgCW1sASZ17IRydiYGdf8AH+geAjAEAASsAwABN/D4BPYqdmsAH+lAenbGJWQECW1sBgZ26wAf6BwA/PR6d0JIWBQAFFp3qLohekfqSpyeEEyeIWYCeAMAH+fgengaSEgEAAYKeF8AH+lAAAAaSrDWen56kn7YAAIhWAAAAAQOeqp+2AAAAAQAAAZ6wAAAAiE9dA8AATXgCW1sBagBgAcAATawCXAE+BEmewiFqnsdgA8AAStiD+z4BSp7dAD9Jnu8cnwEWnvoWnvMuiE2R+pKogcjAAE12gIwBAAGTAMAATcY+AT0wnw8fnxnAAEw+AQABJ4hkAD9On3mffwAAiFFgA5KxARyfiBafgS6ITZH6kqiELwAAAADAAE1lPRyfoIGfmsAH+1SIZZH6AQABgJ+owAf65gCSugaSrTWgIaAloPUAAIhmAAAAAQOgKaD1AAAAAAAAAGADwABMogE+A0mgMhygRBagPRagNi6ITZH6kqiByMAATXaCjAEAAZMAwABN0j4BPTCgUR+gW8AATD4BAAEkoGUCJ4hnJ4hoAD9OoNig2gAAiGlgA8AATKIBFqDcLohekfqSp0qg6QGAoPDAB/v8AAAH98IAB/nbAAf6yAAH+5QAB/wgAAAABAKSsTWhwaHHo9gDiGoAAAFgA8AATe8AAAMEkrM1og6iHwmIawBgA8AATokBJ4hZBJK0NaJPolMJhk0AYAPAAE6JAASStjWigqKJCYhekfoAYAPAAEyiAAEFkr01oo6ijqK0AICKkfoAA6KborQAAAACAgKioQAABIZNYAPAAE6JAKKsAAAEiF5gA8AATKIAAGADkrEBPwMIAZK0gADAB/ysCAGStoEAwAf8ugkBoo7AAE4FAAAAAAIGkrk1otSi2aNEAACIYZH6AAAAAQOi36NEAAAAAQEBouQAAACIT10DwABNeAJbWwAAXAE+AT0eovWSFgUABRajBi6IXpH6krYnNxajFC6Ia5KzFqMeLoZNkrQeoySSEgEAAYCjNcAH/RAAAAaSujWjZaNqo9YAAIhlkfoAAAABA6Nxo9YAAAABAQGjdgAAAIhPXQPAAE14AltbAABcAT4BPR6jh5IWBQAFFqOYLohekfqStidpFqOmLohrkrMWo7Auhk2StB6jtpISAQABgKPHwAf9ewAAAAAH/PEAB/1cAAf9xwAAAAICkr41pEykUqfdA4hsAAABYAPAAE3vAAAEBJLANaSYpKkJiGsAYAPAAE6JASeIWQSSwTWk2aTdCYZNAGADwABOiQAEksM1pVKlXBiIUpH6AF0DwABNeAJbWwErBJLENaWhpaYYiG2R+gBgA5KHASsBBZLNNaWrpaulwgCAipH6AAOlt6XCAAAAAQEBpb0AAASGTWADwABOiQAAYAOSvgE/AggBksGAAMAH/mMJAaWrwABOBQAAAAADBpLHNaXnpeymSQAAiFOR+gAAAAEDpfamSQAAAAAAAABcAT4BPR6l/5IWBQAFkyeIbhamGC6Ia5LAFqYiLoZNksEepiiSEgEAARamOS6IUpH6ksMAAAaSyDWmpqarp60AAIhWAAAAAQOmsaetAAAAAAAAAFwBPgI9HqbakhYFAAWTJ4FnFqbzLohrksAWpv0uhk2SwR6nA5ISAQABFqcULohSkfqSwwAASacmIRynMBanKi6IbZH6ksSAjAEAASsAwABN/D4BPR6nQZIXBQAFFqdSLohrksAkp2kBFqdlFqdfLohtkfqSxIDcko4Wp3EWp2suiG2R+pLEiEmR+pKNFqd+Fqd4LohtkfqSxIDcko4ep4ySEgEAASsAAD8Gkso1p7Knu6fbAgCIUAAAAAEDp7+n2wAAAAEBAafFAAAAUGADkocAAFwBPgE9F6fOLohtkfqAp9bAB//JksQAAAf+kAAH/uUAB/+sAAf/6wAAAAMAAgSSATmGD4YmBIhvkfoAYAPAAEyiAZMEkgI1gQ6BagaIcJH6AGADwABK2AFqgSdgA8AAStiD+xoGkgU5himGKYbDAAWIcZH6AWoAYAOUCIgXAAABA4YthsMAAAAICAiGNQAAAIEiYAPAAE6JAIZCAAAAiHNgA8AATKIAhlEAAACIdGADwABMogCGZQAAAIh1YAPAAEyiAIZzAAAAhk1gA8AATokAhoIAAABOYAOFXwCGjwAAACRgA8AATe8AhqEAAAAxYAPAAE5dAABbAAaSBjmITYiXj6sAAYh2kfoBaohOYAPAAEqfh/8AAAEDiKSPqwAAAAcHB4jCAAAAgtheAwACAgJgA8AAToldA8AATXgCYAPAAE6JYAPAAE6JAAFXA5H8AF0DgSIBYAOSJgCI1gAAAIf4YAPAAE6JAIjvAAAAiHddA8AATUYBYAPAAE6JAIkPAAAAiHhdA8AATUYBYAPAAE6JAIktAAAAiHlgA5itAIlDAAAAgNxgA8AATe8AiVAAAACIemADwABK2AAAWwE+Bk6JZ4lyAACH+V0DwABNeAJgA8AATolgA8AATokBMomEYAPAAE6JYAPAAE6JAEWJigGJk4mVAACDZmADwABMogGTARyJnBSJmsAIAcUIAIC7AQABFomsgomewAgBPYHIwABNdgDAAE3QARWJtMAIAcUIHIm1FIm0wAgBxQgAgQ0BAAGUAMAATcg+AT0cicmHib/ACAGVgQwCAAIcideCicrACAE9gtEBAAEUidjACAHFCAAAwABNVRyJ7YOJ3sAIAVKC0QEAARSJ7sAIAcUIAADAAE1VAMAATY1OifwAAACIe1sASz4BPRWKEsAIAm4IHIokgIodwAgA+G4CAAKBiiXACAEvh4otwAgBlQAAAQGKPlsBikUAAAFpWwABikgAAAFqYAPAAE5dAD4ETopWimMAAIh8YAPAAE6JASMcimkUimbACAKwCgCAjAEAASsAwABN/CSKeQEUinbACAKnCQAkioQDFIp9wAgCpwkAJ4dkFIqBwAgCsAoAAWADwABOiT0ViorACAJuCB+KmZI7AgACaoraYAPAAEyih/MUiuvACALACwAAPR6K/pIHBAAEhIsMwAgBZ4WLF8AIAXMmixsFFIsbwAgCbggAYAOSJoaLJcAIAYEASos5AEmLRyEli1QAFItLwAgCbggAXQOBIgFbPgM9FYtmwAgCbggfi3WSOwIAAmqLtmADwABMoofzJ4h9AD0ei/6SBwQABISMDMAIAWeFjBfACAFzJowbBRSMG8AIAm4IAGADkiaGjCXACAGBAEqMOQA/PRyPGRyNXxyMUBSMR8AIAm4IAIEaAQABNIxbA4xbjV0AAAACAgKMXAAAAGlbAIxfAAAAalsAAGADkiYBPgJOjLqMxwAAiHxgA8AATokBIxyMzRSMysAIBAoKAICMAQABKwDAAE38JIzdARSM2sAIBAIJACSM6AMUjOHACAQCCQAnh2QUjOXACAQKCgABYAPAAE6JSozuAR+M+ZI7AgACao06YAPAAEyih/MUjUvACAQbCwAAAACAiQEAATSNZAONZI8XAAAAAQEBjWUAAACIe1sAAGABwABNrAE+AkmN8SEljf4AFI31wAgEpQkAYAOSJj4BPRWOJMAIBKUJH44zkjsCAAJqjnZgA8AATKKH8yeIfgA/PR6O3ZIHBAAEhI7rwAgBZ4WO9sAIAXMmjvoFFI76wAgEpQkAYAOSJoaPBMAIAYEAAACBGgEAATSPJAOPJI+oAAAAAgICjyUAAABpWwCPKAAAAGpbAABgAcAATawBPgAAAAaSBzmP3Y/dkz0AAYh/kfoAAAABA4/qkz0AAAAEBASP9AAAAIh5YAOYrQCQBgAAAIDcYAPAAE3vAJAjAAAAiHtgA5ImAJA2AAAAiHpgA8AAStgAAFsBPglAIRyQWoCQUMAIBXCAjAEAASsAmLCQUJBhAEmQZhyQbYGQasAIBXyAjAEAASsAwABN/D4DSZB8g5CAwAgFlj4BPR6Ql8AARncBAAEniIAAPz0ckP6AkPTACAVwiIEBAAErAJivSpEOAD9AIRyRJoGRI8AIBXyAjAEAASsAwABN/JEjkS0ATpE/kUIAAIiCYAPAAE7TAR+RSMAATvIAAAAAPRyRXYSRWsAIBi+BwwEAASeIgwDAAE7nSZF7HJGIgpF/wAgFiogSAAAAAJI4PgJJkZmDkZ3ACAWWPgE9HpG0wABGdwEAASSR7gIniISBkevACAV8AD89HJH+hJH7wAgGL4HDAQABJ4iFAMAATuc+AkmSIIOSJMAIBZY+AT0ekjvAAEZ3AQABJJJvAieIhoGSbMAIBXwAPz0ckn+EknzACAYvgcMBAAEniIcAwABO5z0ckpyEkpnACAYvgcMBAAEkkrwCHJKugpKlwAgFiogTkfoAAAAAkjcnh1gAwABO50mSwSWSyACBksXACAV8YAPAAE6JPgE9HJLchJLZwAgGL4HDAQABJJLvAyeIiBSS6sAIBXwBAWADwABOiSeIiQDAAE7nPgE9HJMEhJMBwAgGL4HDAQABJJMVAyeIioGTEcAIBXwnhBIAwABO5z0ckyiAkx7ACAVwiIEBAAEckzCEky3ACAYvgO8AAAAAwABO7ACYrwaSCDaCvILEgvQABYiLkfoBagBgA5QIiCMAAAEDgtKC9AAAAAAAAABgA5I8AAaSCTaC94L/gysABYiNkfoBagBgA5QIiC8AAAEDgw2DKwAAAAAAAABgA5I8AAaSGTmC24Lngy4ABYiPAmqC52ADk/omaoLnYAOUCIg7AAABA4Lvgy4AAAACAAACgvYAAACIkWADwABK2AFqgvxgA8AAStiD+4MJAAAAgSJgA8AATokBagBgAcAATawCYAPAAErYAAaSGjmDMYM/g3AABYiSAmqDP2ADk/omaoM/YAOUCIhHAAABA4NGg3AAAAABAQGDTgAAAIL8YAPAAE3vAABgA8AATe8ABpIbOYNzg3+GCAABiJQBaoN/YAOT+iYAAAEDg4KGCAAAAAgBAYOKAAAAgSJgA8AATokAB4OhAAAAiJVgA8AASuoBagBgAcAATawCg68AAACIdGADwABMogFqAGABwABNrAKDxwAAAIh1YAPAAEyiAWqDzmADwABMohqD3AAAAIZNYAPAAE6JAWqD4mADwABOiWKD7wAAAE5gA4VfAWoAYAHAAE2sAoQAAAAAJGADwABN7wFqAGABwABNrAKEFgAAADFgA8AATl0BagBgAcAATawCXAE+BUmEJyElhDMAgIQrwAgI5GADwABOiT4BPTCERR+ET8AAS9IDAAOAhGPACAjkJ4EiJ4iWAD89IxyEl4GEksAICPOAjAEAASsAwABLKImEksAICPMfhJ/AAEtJAAAAACsBYAPAAErqSYSxISWEugCBhLXACAjzYAPAAErqPgE9MITOH4TYwABL0gMAA4GE7MAICPMniJUniJcAP0mFFxyFKoKFG8AICQqAjAEAASsAwABNxj4BPYqFOcAICQo1hUoAAAEAYAPAAEyiARqFSpIBNYVdAAABAGADwABMogEbhV2SARyFXRSFSsAIClEIAIENAQABlADAAE3IFIVKwAgKUQgAPgE9G4VwkgEchZWChYbACAkKgQ0BAAGUAMAATcg9HoWgkgUIAAiAhaXACAjkFoWzgYWuwAgI84iYwABLOYKFy8AICQqDhdvACAkhhIXiwAgJOYWF6MAICVGGhfTACAllh4X7wAgJewAGkhw0kmOSaJQeAAGImQAAAAEDknmUHgAAAAICApKBAAAAh/hgA8AATokAkqEAAACC2F4DAAICAmADwABOiV0DwABNeAJgA8AATolgA8AATokAAVcDkfwAXQOBIgFgA5ImAABcAT4FPR6SvMAAS8oCAAKAksnACAsbJ4f4AEmS3iEckuqAkuPACAsbiJoBAAEniJsAwABOmz4BPTCTBB+TDsAAS9IDAAOAkyLACAsbJ4f4J4icAD9Jk1MhHJNwHpNXkgsBAAGAk2jACAsbAICMAQABKwDAAE38PgE9MJN/H5OJwABL0QEAASSTvgIniJ2Ak7fACAsbAD89HpPVwABLygIAAoGT4sAICykngtgAPR6T+ZIMAgACgJQMwAgLG4GUFMAICykABpId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AQOsX6yZAAAAAwMDrFwAAAGJZF0Dk08BYAOTeACsZAAAAIHdYAPAAEyiAKxvAAAAImADwABMogAAXAFKrHkBHqx5kvQDAAOArIbACEf4gayMwAhICYKsk8AISBcABpMvPKyerLKs8wCBAYmMAWqssmADk/omAAABA6y9rPMAAAACAgKssgAAAYlkXQOTTwFgA5N4AKzCAAAAgRNgA8AATKIAAGADrEoBSqzPASaszwUerM+S3QIAAoCs5MAISG+BrOrACEiAAGADrEoGkzA7ALelAACBAYmNAAAAAQMAAAAAAAEBAbelAAABiWRdA5NPAWADk3gAAGEDAWADwABMomADrEoBSrelATS3pQMAAAAAAAEBAbe1AAAAgchgA8AATKIAAGADrEoBSrelAR63pZMvAgACgLelwAhI0YG3pcAISQEABpMxPK0nrTitVQCBAYmOAWqtOGADk/omAAABA60+rVUAAAABAQGtOAAAAYlkXQOTTwFgA5N7AABgA8AATKIBSq1BAR6tQZLoAgACgK1NwAhJVpMABpMyPK1arWetlwCBAYmPAWqtZ2ADk/omAAABA61srZcAAAACAgKtZwAAAYlkXQOTTwFgA5N7AK1xAAAAImADwABMogAAXAFKrXsBHq17kvUDAAOArYjACEmqk4GtkcAISbsABpMzPK2crbKt2wCBAYmQAWqtsmADk/omAAABA620rdsAAAACAgKtsgAAAYlkXQOTTwFgA5N7AK25AAAAgd1gA8AATKIAAGADwABMogFKrcMBHq3DkugCAAKArc/ACEoNga3VwAhKHgAGkzQ8reCt8q4vAIEBiZEBaq3yYAOT+iYAAAEDrfWuLwAAAAMDA63yAAABiWRdA5NPAWADk3sArfoAAACB3WADwABMogCuBQAAACJgA8AATKIAAFwBSq4PAR6uD5L1AwADgK4cwAhKdYGuIsAISoaCrinACEqUAAaTNTsAu94AAIEBiZIAAAABAwAAAAAAAQEBu94AAAGJZF0Dk08BYAOTewAAYQMBYAPAAEyiYAOsXgFKu94BNLveAwAAAAAAAQEBu+4AAACByGADwABMogAAYAOsXgFKu94BHrvekzYCAAKAu97ACErggbvewAhLEAAGkzY8rjSuSK6JAIEBiZMBaq5IYAOT+iYAAAEDrlOuiQAAAAICAq5IAAABiWRdA5NP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IUKbn5u0BonsAGADwABMogFqm7FgA8AATKKLggSUIkKbyZvfBontAGADwABMogFqm9xgA8AATKKLhgSUI0Kb9Jv/BonuAGADwABMogFqm/xgA8AATKKLigSUJEKcFJwqBonvAGADwABMogFqnCdgA8AATKKLigSUJUKcWpxoBonwAGADwABMogFqnGVgA8AATKKLjgSUJkKcfZyOBonxAGADwABMogFqnItgA8AATKKLkgSUJ0Kco5yxBonyAGADwABMogFqnK5gA8AATKKLlgSUKEKcxpzdBonzAGADwABMogFqnNpgA8AATKKLmgSUKUKdAp0ZBon0AWqc4mADlA1nYAPAAEyiAWqdFmADwABMooueBJQqQp0unT4GifUAYAPAAEyiAWqdO2ADwABMoouiBJQrQp1TnWUGifYAYAPAAEyiAWqdYmADwABMooumBJQsQp16nY8GifcAYAPAAEyiAWqdjGADwABMoouqBJQtQp2knbMGifgAYAPAAEyiAWqdsGADwABMoouuBJQuQp3IndYGifkAYAPAAEyiAWqd02ADwABMoouyBJQvQp3rngEGifoAYAPAAEyiAWqd/mADwABMoou2BJQwQp4WnikGifsAYAPAAEyiAWqeJmADwABMoou6BJQxQp4+nl8GifwAYAPAAEyiAWqeXGADwABMoou+BJQyQp50nogGif0AYAPAAEyiAWqehWADwABMoovCBJQzQp6dnqsGif4AYAPAAEyiAWqeqGADwABMoovGBJQ0Qp7AnsoGif8AYAPAAEyiAWqex2ADwABMoovKBJQ1Qp7fnvMGigAAYAPAAEyiAWqe8GADwABMoovOBJQ2Qp8InyAGigEAYAPAAEyiAWqfHWADwABMoovSBJQ3Qp81n1AGigIAYAPAAEyiAWqfTWADwABMoovWBJQ4Qp9ln3wGigMAYAPAAEyiAWqfeWADwABMoovaBJQ5Qp+Rn6sGigQAYAPAAEyiAWqfqGADwABMooveBJQ6Qp/An+IGigUAYAPAAEyiAWqf32ADwABMooviBJQ7Qp/3oA4GigYAYAPAAEyiAWqgC2ADwABMoovmBJQ8QqAzoEsGigcBaqATYAOUDWdgA8AATKIBaqBIYAPAAEyii+oElD1CoHCgiQaKCAFqoFBgA5QNZ2ADwABMogFqoIZgA8AATKKL7gSUPkKgrqC6BooJAWqgjmADlA1nYAPAAEyiAWqgt2ADwABMoovyBJQ/QqDfoPUGigoBaqC/YAOUDWdgA8AATKIBaqDyYAPAAEyii/YElEBCoQqhHwaKCwBgA8AATKIBaqEcYAPAAEyii/oElEFCoUShXgaKDAFqoSRgA5QNZ2ADwABMogFqoVtgA8AATKKL/gSUQkKhg6GYBooNAWqhY2ADlA1nYAPAAEyiAWqhlWADwABMoowCBJRDQqG9od4Gig4BaqGdYAOUDWdgA8AATKIBaqHbYAPAAEyijAYElERCogOiKAaKDwFqoeNgA5QNZ2ADwABMogFqoiVgA8AATKKMCgSURUKiTaJtBooQAWqiLWADlA1nYAPAAEyiAWqiamADwABMoowOBJRGQqKSoqsGihEBaqJyYAOUDWdgA8AATKIBaqKoYAPAAEyijBIElEdCosCi2QaKEgBgA8AATKIBaqLWYAPAAEyijBYElEhCou6jAgaKEwBgA8AATKIBaqL/YAPAAEyijBoElElCoxejJwaKFABgA8AATKIBaqMkYAPAAEyijB4ElEpCozyjVAaKFQBgA8AATKIBaqNRYAPAAEyijCIElEtCo2mjfQaKFgBgA8AATKIBaqN6YAPAAEyijCYElExCo5KjrwaKFwBgA8AATKIBaqOsYAPAAEyijCoElE1Co9Sj7waKGAFqo7RgA5QNZ2ADwABMogFqo+xgA8AATKKMLgSUTkKkFKQtBooZAWqj9GADlA1nYAPAAEyiAWqkKmADwABMoowyBJRPQqRSpGQGihoBaqQyYAOUDWdgA8AATKIBaqRhYAPAAEyijDYElFBCpImkmgaKGwFqpGlgA5QNZ2ADwABMogFqpJdgA8AATKKMOgSUUUKkv6TiBoocAWqkn2ADlA1nYAPAAEyiAWqk32ADwABMoow+BJRSQqUapToGih0AYAPAAEyiAWqlN2ADwABMooxCBJRTQqV3pYsGih4BaqVAYAPAAEqLjElgA8AATKIBaqWCYAPAAEyihCIElFRCpdCl+AaKIAFqpZBgA8AASouMWWADwABMogFqpeZgA8AATKKEfgSUVUKmLaY0BooiAWql/WADwABKi4xpYAPAAEyiAWqmMmADwABMootaBJRWQqZupn8GiiQBaqY5YAPAAEqLjHlgA8AATKIBaqZ4YAPAAEyii14ElFdCprqmzQaKJgFqpoRgA8AASouMiWADwABMogFqpsVgA8AATKKLYgSUWEKnG6dWBoooAWqm0mADwABKi4yZYAPAAEyiAWqnO2ADwABMootmBJRZQqeSp6gGiioBaqdbYAPAAEqLjKlgA8AATKIBaqefYAPAAEyii2oElFpCp+eoAwaKLAFqp61gA8AASouMuWADwABMogFqp/dgA8AATKKLbgSUW0KoRKhkBoouAWqoCGADwABKi4zJYAPAAEyiAWqoVmADwABMootyBJRcQqimqMgGijABaqhpYAPAAEqLjNlgA8AATKIBaqi5YAPAAEyii4IElF1CqQupLwaKMgFqqM1gA8AASouM6WADwABMogFqqR9gA8AATKKLhgSUXkKpZ6l0Boo0AWqpNGADwABKi4z5YAPAAEyiAWqpb2ADwABMoouKBJRfQqm3qdsGijYBaql5YAPAAEqLjQlgA8AATKIBaqnLYAPAAEyii4oElGBCqhaqKgaKOAFqqeBgA8AASouNGWADwABMogFqqiJgA8AATKKLjgSUYUKqaKqCBoo6AWqqL2ADwABKi40pYAPAAEyiAWqqd2ADwABMoouSBJRiQqq9qtEGijwBaqqHYAPAAEqLjTlgA8AATKIBaqrJYAPAAEyii5YElGNCqxWrOwaKPgFqqtZgA8AASouNSWADwABMogFqqypgA8AATKKLmgSUZEKreKuQBopAAWqrQGADwABKi41ZYAPAAEyiAWqrhmADwABMoouiBJRlQqvPq+oGikIBaquVYAPAAEqLjWlgA8AATKIBaqveYAPAAEyii6YElGZCrCysTgaKRAFqq+9gA8AASouNeWADwABMogFqrD9gA8AATKKLqgSUZ0KsiqyfBopGAWqsU2ADwABKi42JYAPAAEyiAWqslmADwABMoouuBJRoQqzarO4GikgBaqykYAPAAEqLjZlgA8AATKIBaqzmYAPAAEyii7IElGlCrTGtVgaKSgFqrPNgA8AASouNqWADwABMogFqrUZgA8AATKKLtgSUakKtlq20BopMAWqtW2ADwABKi425YAPAAEyiAWqtp2ADwABMoou6BJRrQq4Crj0Gik4Baq25YAPAAEqLjclgA8AATKIBaq4iYAPAAEyii74ElGxCrn6ungaKUAFqrkJgA8AASouN2WADwABMogFqrpBgA8AATKKLwgSUbUKu2a7sBopSAWquo2ADwABKi43pYAPAAEyiAWqu5GADwABMoovGBJRuQq8jry4GilQBaq7xYAPAAEqLjflgA8AATKIBaq8qYAPAAEyii8oElG9Cr2+vjwaKVgFqrzNgA8AASouOCWADwABMogFqr4FgA8AATKKLzgSUcEKv1K/8BopYAWqvlGADwABKi44ZYAPAAEyiAWqv6mADwABMoovSBJRxQrBEsHQGiloBarABYAPAAEqLjilgA8AATKIBarBfYAPAAEyii9YElHJCsLiw4AaKXAFqsHlgA8AASouOOWADwABMogFqsM9gA8AATKKL2gSUc0KxJ7FUBopeAWqw5WADwABKi45JYAPAAEyiAWqxQGADwABMooveBJR0QrGjsecGimABarFZYAPAAEqLjllgA8AATKIBarHLYAPAAEyii+IElHVCsiuyUQaKYgFqsexgA8AASouOaWADwABMogFqskBgA8AATKKL5gSUdkKyk7K1BopkAWqyVmADwABKi455YAPAAEyiAWqypmADwABMoov6BJR3QrL7syYGimYBarK6YAPAAEqLjolgA8AATKIBarMTYAPAAEyijBYElHhCs2ezhwaKaAFqsytgA8AASouOmWADwABMogFqs3lgA8AATKKMGgSUeUKzxLPcBopqAWqzjGADwABKi46pYAPAAEyiAWqz0mADwABMooweBJR6QrQhtEkGimwBarPhYAPAAEqLjrlgA8AATKIBarQ3YAPAAEyijCIElHtCtIq0qgaKbgFqtE5gA8AASouOyWADwABMogFqtJxgA8AATKKMJgSUfEK09LUoBopwAWq0r2ADwABKi47ZYAPAAEyiAWq1EWADwABMoowqBJR9QrV1ta8GinIBarUtYAPAAEqLjulgA8AATKIBarWVYAPAAEyijEIBBZR/AAAAAAQAAAMAAAAAAAAAAABgA5QSAT8BCQEAwABOBQAAAAAAAAAIcXEAAAAAApSAR4EygTiDHgMGAAIAAAQgYAPAAE3vAVsAAAQhYAPAAE3vAVsBXQOB1gFfAwEAAAABBJSDR4FvgXYJgmmTtwBdA4HWAV8DAAAAAQWUikeBeoF6gZIAAAADgYSBkgAAAAEBAYGKAAAEgmldA4HWAV8DAAAAAF0DlIACXwMAAF8DAQABPwIIAZSDgADACHHeCQGBeoIMAAAAAAMGlIVHgZaB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AEAcohGBog3ACJ9ogVsBAAGCohTACJ98AMAATdGiDaIaAE6iJaIqAACDw2ADwABMogEcojCBoizACJ9ogQYBAAGAojLACJ9bAMAATclFoj0BokaiSAAAg2ZgA8AATKIBgaJKwAifaAEcolGEok/ACKAhgLsBAAGColPACJ98AMAATdABjKJbwAigIRyiXISiW8AIoCGBDQEAAZQAwABNyD4BPRyibC6BDAIAAhyib4SibcAIoCGBBgEAAYOiccAIn/MAwABNyRyifS6C0QEAAYSifsAIoCEAwABNVQDAAE1WPReikS6ByByioYKimsAIn3yBBgEAAYOio8AIn/MAwABNycAATXQGlQgiorCitaL1AACDlQAAAAEDosCi9QAAAAEBAaLGAAAAgRthAwFfAwEAYAPAAErYAABcAT4BPRyi3S6EVYYVAgACgKLlwAig9CoAig0GlQkiovqi/6M+AACDlgAAAAEDowqjPgAAAAEBAaMQAAAAgRthAwFfAwEAYAPAAErYAABcAT4BPRyjJy6EVYYVAgACgKMvwAihQikAig0GlQYio0OjSKU9AACEVYYVAAAAAQOjT6U9AAAAAgICo1UAAACBG2EDAV8DAQBgA8AAStgAo2sAAACEVmADwABK2AAAXAE+BE6jiaOSAACEV10DwABNRgFfAwEAATGjl18DAQAATqOjo6oAAIHIYAPAAEyiARajsS6ByMAATXZFo70Bo8ajyAAAg2ZgA8AATKIBkwEco8+Eo83ACKH1gLsBAAGDo9HACKHYAMAATdABjKPZwAih9Ryj2oSj2cAIofWBDQEAAZQAwABNyD4DTqPqo/IAAIG8XwMBAAEco/gugtEBAAGEo/nACKH1AMAATVVJpAMcpBUcpAuApAfACKGSbgEAAYWkDMAIokEAAICMAQABgaQYwAihpwDAAE38PgE9HKQ7gqQywAihu4CCAQABhaQ/wAiiQQDAAE1XP0mkVyEcpGKDpFvACKHYgIwBAAEWpGougcjAAE12AMAATcY+AT0wpHwfpILAAExFAQABLgA/SaS3IRykyxakxIKku8AIobuByMAATXaAjAEAARak0y6ByMAATXYAwABNxj4CPRyk6C6EWAMAA5MWpP2CpPTACKG7gcjAAE12gqUFwAihuwCKHD0XpRsugcgWpS2CpSTACKG7gcjAAE12wABNdD8G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VgEctemCtefACLTTgV4BAAGTAMAATdMBirXvwAi00xy18IK178AItNOBBgEAAZQAwABNyT4BSbX8HLYIHLYELoLRAQABgrYFwAi00wDAAE1VgIwBAAGAtgvACLRIAMAATfxKthQBgrYbwAi00z9KtigBHLYvlIPrAAAAAMAATMUGlRoitjq2PrcbAACEcwAAAAEDtky3GwAAAAIBArZSAAAAgRthAwFfAwEAYAPAAErYALZoAAAAbWADwABMogFqAGABwABNrAIAYAPAAEyiAT4DSbZ2Ihy2gIG2esAItZqAjAEAASsAwABNxgEctpGBtovACLWagV4BAAEWtpkugcjAAE12AMAATdM9ibahwAi1mhy2tRa2ri6ByMAATXaBBgEAAZQAwABNyT9Ftr4Btse2yQAAg2ZgA8AATKIBgbbLwAi1mgEcttSCttLACLYXgV4BAAGTAMAATdMBirbawAi2Fxy224K22sAItheBBgEAAZQAwABNyT4BSbbnHLbvgLbrwAi1hW4BAAEctvQugtEBAAGCtvXACLYXAMAATVUAAEq2+gGCtwHACLYXP0q3DgEctxWUg+sAAAAAwABMxQaVGyK3ILcluF8AAIR0AAAAAQO3K7hfAAAAAgICtzAAAACB3WADwABMogC3OQAAIIG8XwMBAAAAXAE+Bj0et1bAAEvKAgACgLdjwAi2xSeB3QA9HreDwABL3QQABIC3mMAItsWTFreiLoHIwABNdieB3QBJt7gct8KAt7zACLbFgIwBAAEWt8ougcjAAE12AMAATcY+Aj0ct9ougIIBAAGBt97ACLbTAIoISrfuAD89F7gFLoHIHLgLFrgFLoHIwABNdoENAQABlADAAE3IwABNdD0cuBMuhFgEAAQcuCKAuBzACLbFgQ0BAAGUAMAATcgWuCwugcjAAE12LoC4OsAItsUAihw9HLhKLoEMAgACgLhLwAi2xYG4VMAIttMAwABNVgaVHCK4ZLhmuM4AAIR1AAAAAQO4brjOAAAAAQEBuHMAAACB3WADwABMogAAXwMBAAE+A064griJAACA5l8DAQABHLiPLoLRAQABgLiQwAi36ADAAE1VPRy4nC6EU4YVAgACgLimwAi36By4s4C4rcAIt+iBDQEAAZQAwABNyACKDEq4vQGBuMTACLf/BpUdIrjTuNi8RwAAhHYAAAABA7jh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tsAAR70AAAAAAAAAYAPAAErYAUrAAEe5ASkGlqBDwABHwsAAR8rAAEfVAQCByAAAAAEDwABH0cAAR9UAAAAAAAAAYAPAAEyiAUrAAEfUAZMGlqFDwABH2sAAR+DAAEgWAQCBwgAAAAEDwABH5sAASBYAAAAAAAAAXwMAAAE+AT0wwABH7B7AAEgHlvwAAAAABpaiQ8AASBvAAEghwABIVgEAgdUAAAABA8AASCbAAEhWAAAAAAAAAF8DAAABPgE9MMAASCwewABIR5b8AAAAAAaWo0PAAEhbwABIYcAASJgBAIHXAAAAAQPAAEhowABImAAAAAAAAABfAwAAAT4BPTDAAEhuHsAASImW/AAAAAAGlqZDwABIncAASJ/AAEjuAACB3AAAAAEDwABIqMAASO4AAAABAQHAAEitAAAAgd1gA8AATKIAAF8DAAABPgE9MMAASLofwABIxMAAS+gEAASAwABI1cAJKiOTkyeB3QAGlqdDwABI88AASPjAAEkZAACBxAAAAAEDwABJAMAASRkAAAABAQHAAEkIAAAAgbxgA8AATe8AAGADwABK2AFKwABJFAEqBpaoQ8AASR7AAEkjwABJRgAAgccAAAABA8AASSjAAElGAAAAAQEBwABJLgAAAIEbYQMBXwMAAGADwABK2AAAYAPAAErYAUrAAElCASkGlqlDwABJS8AASVDAAElyAACBDgAAAAEDwABJU8AASXIAAAABAQHAAElZAAAAgRthAwFfAwAAYAPAAErYAABgA8AAStgBSsAASW0BKgaWqkPAAEl3wABJecAASgEAAIHYAAAAAQPAAEmDwABKAQAAAAIBAcAASYkAAACBG2EDAV8DAABgA8AAStgAAcAASZ0AACCB2WEDAF8DAAABagBgAcAATawCXwMAAAE+AknAAEmuIRzAAEm5gcAASbLACSt7gIwBAAErAMAATfxKwABJwgEcwABJz4HAAEnJwAkre24AAAAAAD89MMAASdcewABJ8pb8AAAAAAaWq0PAAEoGwABKCMAASo8AAIHaAAAAAQPAAEoRwABKjwAAAAIBAcAAShcAAACBG2EDAV8DAABgA8AAStgAAcAASisAACCB2WEDAF8DAAABagBgAcAATawCXwMAAAE+AknAAEo8IRzAAEpHgcAASkDACSwmgIwBAAErAMAATfxKwABKUAEcwABKXYHAAEpXwAksJm4AAAAAAD89MMAASmUewABKgJb8AAAAAAaWrEPAAEqUwABKlsAASx8AAIHbAAAAAQPAAEqhwABLHwAAAAIBAcAASqcAAACBG2EDAV8DAABgA8AAStgAAcAASrsAACCB2WEDAF8DAAABagBgAcAATawCXwMAAAE+AknAAErMIRzAAErXgcAAStDACSzRgIwBAAErAMAATfxKwABK4AEcwABK7YHAAErnwAks0W4AAAAAAD89MMAASvUewABLEJb8AAAAAAaWrUPAAEskwABLK8AAS04AAIG/AAAAAQPAAEsvwABLTgAAAAEAAcAASzgAAACBwGADwABOiQFqwABLRGADwABOiWIAYAPAAE6JAUrAAEtMAScABpauQ8AAS1PAAEtfwABLggAAgaoAAAABA8AAS2TAAEuCAAAAAQEBwABLagAAAIEbYQMBXwMAAGADwABK2AAAXQPAAE0EAV8DAAABSsAAS34BLgaWr0PAAEuHwABLk8AAS8MAAIGrAAAAAQPAAEuZwABLwwAAAQAABCFgA8AATe8BWwEBAcAAS5wAAABQYQMBXwMAAF8DAQAAAF0DwABNBAFfAwEAAUrAAEutAR/AAEuxlrkAAV8DAQAAAAaWsEPAAEvIwABLysAATCAAAIG5AAAAAQPAAEvQwABMIAAAAAEBAcAAS9MAACCBumEDAl8DAABfAwAAXwMAAAAAXwMAAAE+AT0wwABL9h7AAEwRlvwAAAAABpaxQ8AATCXAAEwnwABMgwAAgb0AAAABA8AATC7AAEyDAAABAAAEIWADwABN7wFbAgICwABMMQAAAIG+XwMBAADAAExBAAAAgbphAwJfAwEAXwMAAF8DAQAAAF8DAQABPgFKwABMbAGAwABMc8AJLtcGlrJDwABMiMAATJTAAEzqAACB0QAAAAEDwABMmMAATOoAAAABAQHAAEydAAAAgZtgA8AATKIAAF0DwABNBAFfAwAAAT4CPR7AAEy1wABL4AIAAoDAAEzGwAkvPCeBmwBKwABM2wEuBpazQ8AATO/AAEz7wABNIgAAgdIAAAABA8AATQTAAE0iAAAAAQEBwABNCgAAAIEbYQMBXwMAAGADwABK2AAAXQPAAE0EAV8DAAABSsAATR4BLgaWtEPAAE0nwABNM8AATYkAAIHPAAAAAQPAAE03wABNiQAAAAEBAcAATTwAAACBm2ADwABMogAAXQPAAE0EAV8DAAABPgI9HsAATVTAAEvgAgACgMAATWXACS/1J4GbAErAAE16AS4GlrVDwABNjsAATZrAAE3BAACB0AAAAAEDwABNo8AATcEAAAABAQHAAE2pAAAAgRthAwFfAwAAYAPAAErYAABdA8AATQQBXwMAAAFKwABNvQEuBpa2Q8AATcbAAE3OwABOEAAAgcoAAAABA8AATdTAAE4QAAAAAQAAAcAATdsAAACED2ADwABK2AFqwABN5WADwABK2IP7XQPAAE1GAV8DAAABSsAATe8BI4DAAE3vwAkwrzHAAE39XwMAAAAewABOBsAARo8BAV8DAAABkwABXQPAAE1GAV8DAAAGlrdDwABOFcAAThzAAE4zAACBywAAAAEDwABOIcAATjMAAAAAAAAAXQPAAE46AV8DAAABSsAATicBHsAATiuJYAABXwMAAAAAAAAJKEcACSiSAAko0AAJKQYACSk8AAkpfAAJKbwACSn8AAkqXAAJKqIACSrvAAkrPAAJK+cACSySAAktPQAJLZAACS3iAAkuSwAJLqQACS8VAAkvfAAJL84ACTA1AAkwhwAJMRAACTFZAAAAGQKWukPAAE5awABOYMAATtiDCAABAAAEgWdgA8AATe8BWwFgA8AATe8AAV0DwABNPwFfAwAAAAEFlsBDwABOjMAATpLAAE6hAQAAA8AATp/AAE6hAAAAAAAAAF0DlroBXwMAAAE/AQkBwABOksAATgUAAAAAAgaWvEPAAE6lwABOqsAATr0AAIEJAAAAAQPAAE6ywABOvQAAAAAAAABgA8AAStgBSsAATrgBKgaWvkPAAE7BwABOx8AATtYBAIEKAAAAAQPAAE7PwABO1gAAAAAAAABfAwAAAUrAAE7SASsAAAkyOwAJMnEACTKlAAAAAgKWwUPAAE7bwABO4cAAVBYDirQAAQAABIFnYAPAAE3vAVsBXQPAAE0EAV8DAAAAAAIElsRDwABPIcAATycJhD6TtwBdA8AATQQBXwMAAAAElsVDwABPPcAAT0QJhtqTtwBdA8AATQQBXwMAAAABBZbSQ8AAT0jAAE9IwABPdQAAAAPAAE9awABPdQAAAAICAsAAT2AAAASEPl0DwABNBAFfAwAAAMAAT20AAASG2l0DwABNBAFfAwAAAABdA5bBAV8D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TckAwABNVYWI0MAJZ6IAAIKMAQABkwDAAE3SPgI9HIjlgIjkwAlm8oEMAgAChojmwAlnyxyI7ICI68AJZvKC0QEAARyI74aI7cAJZ8uBBgEAAZQAwABNyQDAAE1VAMAATVY9joj9wAlnyxyI/oaI/cAJZ8uBBgEAAZQAwABNyT0ciRGAiRDACWbygQwCAAKGiRLACWfLhYkXwAlnogDAAE1WBpeXS4koiTSv0gABiueTtwAAAAEDiUqv0gAAAQAABIFnYAPAAE3vAVsEBASJWgAAADZdA8AATUYBXwMAAACJYQAAAITbYAPAAEyiAIlrAAAAhNxgA8AATKIAiXYAAACEWmEDAl8DAABfAwAAYAPAAEyiAABcAT4oQByJoxyJnIKJlsAJaSKBBgEAAYGJnsAJaRQAwABNyYKMAQABaomlYAPAAEyibwDAAE3SiZaJvgBOigKKCAAAiuhgA8AATKIBHIodHIoYHIoRgooLwAlpIoEGAQABgYoTwAlpFADAAE3JgQ0BAAGUAMAATciGkgEAATcGAMAATc1OiiuKMgAAiulgA8AATKIBHIo5gYo0wAlpFIENAQABhIo7wAlphwDAAE3ITopKilEAAIrqYAPAAEyiARyKWYKKU8AJaSKBBgEAAYSKW8AJaYcAwABNyU6KaopxAACK62ADwABMogEcioIcinmBinTACWkUgQ0BAAGCinvACWkiAMAATciGkgEAAZUAwABNzU6KoYqoAACK7GADwABMogEcirGHiqrACWolgQYBAAGEirPACWmHAMAATclOisKKyQAAiu1gA8AATKIBHIrSh4rLwAlqJYENAQABhIrUwAlphwDAAE3ITorkiugAAIruXwMAAAEciuuAiurACWkCgtEBAAGFiuzACWnPAMAATVVOiv2LAQAAiu9fAwAAARyLBICLA8AJaQKC0QEAARSLBcAJal4IAADAAE1VTosWixoAAIrwXwMAAAEcix2AixzACWkCgtEBAAGHix7ACWolAMAATVVOiy+LMwAAivFfAwAAARyLNoCLNcAJaQKC0QEAARSLN8AJaokJAADAAE1VTotIi0wAAIryXwMAAAEci0+Ai07ACWkCgtEBAAGGi1DACWn6AMAATVVJi5sci7Eci6aDi5/ACWkwbgIAAhSLp8AJarQKABSLrMAJat0LAAAAgowBAAGTAMAATdI+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mEkrPRu56JhKkwaYZFO6WLpluzsAAYCSl9IAAAABA7ptuzsAAAADAwO6eQAAAIuLYAPAAEyiALqMAAAAG2EDAWADhQdcALqoAAAAHmADwABK2AAAYAOFBwE+Akm6uYK6vcAJx2Y+AUq60AEeutuYaAIAAoC668AJx0mBuvnACcdXAD9Kuw4BHrsZmGcCAAKAuyDACcdJgbsuwAnHVwAAAAm07QAJtWcACba0AAm3EQAJt28ACbeuAAm4agAJuKwACbjfAAm5agAJuhAACbrPAAm7WgAJvLUACb3JAAm/bAAJxAAACcTzAAnFmgAJxf0ACcavAAnHKgAJx74AAAAWAphyUYLNgtODzQOLoQAAAWADwABN7wABYAPAAExrAQSYdFGDR4NOCYEiAGADwABOiQABBZh4UYNSg26DkQAAAWqDU2ADwABKnwMDg4ODkQAAAAEBAYOJAAAEgSJgA8AATokAAGADmHIBPwIIAZh0gADACch0CQGDbsAATgUAAAAAAQaYdlGDlYOcg8sAAIDvAAAAAQODpIPLAAAAAAAAAGADwABOiQFKg6oBJIPLAieLohaDwy6BIph0AAAJyKEACcjZAAAAAQKYeVGKeIp+wABe5gOH8QFqin5gA5P6JgABYAPAAE3vAAAQBJh8UqLdowMFi6OX0gBgA5h5AR6i75iUAAAAAASYfVKjFKMzBYukl9IAYAPAAE8KAR6jH5iWAAAAAASYflK8/70JBoull9IAYAPAAEyiAWq9CGADwABMohQEmH9SvRq9JQaLppfSAGADwABMogFqvSRgA8AATKIWBJiAUr02vT8Gi6eX0gBgA8AATKIBar0+YAPAAEyiTASYgVK9UL1ZBouol9IAYAPAAEyiAWq9WGADwABMohgEmIJSvWq9dwaLqZfSAGADwABMogFqvXZgA8AATKKELQSYg1K9iL2VBouql9IAYAPAAEyiAWq9lGADwABMok4EmIRSvaa9tAaLq5fSAGADwABMogFqvbNgA8AATKKF8QSYhVK9xb3TBousl9IAYAPAAEyiAWq90mADwABMohwEmIZSveS99AaLrZfSAGADwABMogFqvfNgA8AATKKESASYh1GK3YrqBoFVAGADwABMogFqiulgA8AATKIaBJiIUYtNi2AGi64AYAPAAEyiAWqLX2ADwABMohQEmIlRjSCNKwmIRgBg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A8AATUYBWwE1wABFagAAAQBdA8AATUYBWwEewABFasAARo8BAVsBlwA1wABFegAAAQBcARzAAEV6gcAARWrACebNgQwCAAKTkwDAAE1WNcAARa0AAAEAXAEcwABFrYHAAEVqwAnmzYEMAgAClGrAAEWzYAPAAEyihEgAwABNVjXAAEXIAAABAFwBHMAARciBwABFasAJ5s2BDAIAApUWwABFzi6LsJiLAMAATVY1wABF6gAAAQBcARzAAEXqgcAARWrACebNgQwCAAKWgMAARfDACeahAMAATVaBwABFasAJ5s09HsAARgSYkgIAAhbAAEYNLohGmImBwABGGsAJ5rcABpihUsAARifAAEY1wABHGgAAi/ABasAARjVgA5P6JgAAAQPAAEY5wABHGgAAAAEAAAHAAEY/AAAAi/FgA8AATKIBasAARklgA8AATKIUXAE+Ak7AAEZlwABGaQAAgvddA8AATUYBWwE1wABGbwAAAQBdA8AATUYBWwEewABGb8AARo8BAVsBlwA1wABGfwAAAQBcARzAAEZ/gcAARm/ACegvgQwCAAKTkwDAAE1WNcAARrIAAAEAXAEcwABGsoHAAEZvwAnoL4EMAgAClGrAAEa4YAPAAEyiGADAAE1WNcAARsYAAAEAXAEcwABGxoHAAEZvwAnoL4EMAgAClRbAAEbMLouwmIsAwABNVjXAAEboAAABAFwBHMAARuiBwABGb8AJ6C+BDAIAApaAwABG7sAJ5/gAwABNVoHAAEZvwAnoLz0ewABG/JiSAgACFsAARwUuiEaYiYHAAEcSwAnoGQAGmKJSwABHH8AARy3AAEhEAACL8gFqwABHLWADk/omAAABA8AARzHAAEhEAAAAAwEBwABHOwAAAIvtYAOYrQACwABHUQAAAIh7YAPAAE3vAWoAYAHAAE2sAsAAR18AAACL8WADwABMogFqwABHaWADwABMohpcAT4CTsAAR3/AAEeDAACC910DwABNRgFbATXAAEeJAAABAF0DwABNRgFbAR7AAEeJwABGjwEBWwE3BQA1wABHmQAAAQBcARzAAEeZg8AAR4nACem3gQwCAAKTkwDAAE1WNcAAR8wAAAEAXAEcwABHzIPAAEeJwAnpt4EMAgAClGrAAEfSYAPAAEyiTADAAE1WNcAAR+AAAAEAXAEcwABH4IPAAEeJwAnpt4EMAgAClYDAAEfmwAnpWADAAE1WNcAAR/sAAAEAXAEcwABH+4PAAEeJwAnpt4EMAgACloLAAEgBwAnpgADAAE1WNcAASBIAAAEAXAEcwABIEoPAAEeJwAnpt4EMAgACl4HAAEgYwAnpZwDAAE1Wg8AAR4nACem3PR7AAEgmmJICAAIWwABILy6IRpiJg8AASDzACemhAAaYo1LAAEhJwABIV8AASRUAAIvzAWrAAEhXYAOT+iYAAAEDwABIZ8AASRUAAAABAQHAAEhxAAAAi5JgA5itAABcAT4CTsAASIHAAEiFAACC910DwABNRgFbATXAAEiLAAABAF0DwABNRgFbAR7AAEiLwABGjwEBWwGWADXAAEibAAABAFwBHMAASJuBwABIi8AJ6zeBDAIAApOTAMAATVY1wABIzgAAAQBcARzAAEjOgcAASIvACes3gQwCAAKUasAASNRgA8AATKKF8QDAAE1WNcAASOcAAAEAXAEcwABI54HAAEiLwAnrN4EMAgAClYDAAEjtwAnrDQDAAE1WgcAASIvACes3PR7AAEj3mJICAAIWwABJAC6IRpiJgcAASQ3ACeshAAaYpFLAAEkawABJKMAASekAAIv0AWrAAEkoYAOT+iYAAAEDwABJO8AASekAAAABAQHAAElFAAAAi5JgA5itAABcAT4CTsAASVXAAElZAACC910DwABNRgFbATXAAElfAAABAF0DwABNRgFbAR7AAElfwABGjwEBWwGWADXAAElvAAABAFwBHMAASW+BwABJX8AJ7F2BDAIAApOTAMAATVY1wABJogAAAQBcARzAAEmigcAASV/ACexdgQwCAAKUasAASahgA8AATKIcAMAATVY1wABJuwAAAQBcARzAAEm7gcAASV/ACexdgQwCAAKVgMAAScHACewzAMAATVaBwABJX8AJ7F09HsAAScuYkgIAAhbAAEnULohGmImBwABJ4cAJ7EcABpiqUcAAXATAAFwPwABe5AEAi/UAAAABA8AAXBbAAF7kAAAAAAAAAF0DgdYBWwE+BU7AAFwtAAAAc10Dgl4BWwBOwABcTAAAAIuSYAOYvgBPwABcVsAAXFsAAAGBA2EDAVtcAAPAAFxmwABdcwAAAAEBAcAAXGcAAACBIlsAAFwBPgVOwABcfcAAXIkAAIv2XQPAAE1GAVsBJsAAXH0Fg8AAXIvA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A8AASthKoigBJqIoBYOiL8AKBcdgA8AATKIGmSRWoj6iRaKDAACMIAAAAAEDok+igwAAAAAAAABgA8AAS1ABPgFKolgBHKJzHKJtHqJgmSIBAAE3BwCDxQEAAZYAwABMv4X4AQABaqJ1YAPAAEtQhNMAwABNzAaZJVaiiKKNorwAAIwhAAAAAQOilaK8AAAAAAAAAGADwABK2AE+AUqingEWorIeoqWZIgEAAZQAjCzAAEzWAAAKBLoACgT3AAoGggAKBt4ACgccAAAABAKZKFeCw4LJhUIDjC0AAAFgA8AATe8AAAABBZkvAAAAAAQAAAMAAAAAAAAAAABgA5koAT8BCQEAwABOBQAAAAAEBpkqV4MrgzaD3AABgboAAAABA4M9g9wAAAACAgKDQgAAAIwuYAPAAEyiAINMAAAAImADwABMogAAYAPAAEyiAT4DPYiDWcAKB5Mcg2s33////4ChAQABHINzgINuwAoHk4ENAQABgYN1wAoHoQDAAE3IAMAATLo9iIOBwAoHkxyDkzff////gKEBAAEcg5uAg5bACgeTgQ0BAAEcg7Icg6o3wAf//4ChAQABgIOswAoHkwDAAEy6g3EBAAE3CgDAAEy+AMAATcgAwABMukqDvwEcg8uAg8bACgeTgKMBAAEcg9OAg87ACgeTg8UBAAE3BgDAAEy/AMAATLwGmStXg+GD7IScAAGIVgAAAAEDg/KEnAAAAAEBAYP3AAAAjC5gA8AATKIAAGADwABMogE+Az2IhAPACgiOHIQVN9////+AoQEAARyEHYCEGMAKCI6BDQEAARyENByELDfD////gKEBAAGAhC7ACgiOAMAATLqDcQEAAZYAwABMvgDAAE3IAMAATLo9iIRAwAoIjhyETICER8AKCI6AowEAARyEVICET8AKCI6DxQEAATcLAMAATL8AwABMvEqEYAEchHI33////4ChAQABHIR6gIR1wAoIjoENAQABHISRHISJN7//gKEBAAGAhIvACgiOAMAATLqDcQEAATcPAMAATL4AwABNyADAAEy6BpksV4ShhKyE3AABjC8AAAABA4SxhNwAAAACAgKEsgAAADZbAIS1AAAAN1sAAGADwABMogFKhLsBHoS7mSsBAAEehMKZKgIAAh6EypkqAgACkyaE1QWAhNXACgmaYAPAAEyiACaE2QWBhNnACgmiYAPAAEyiAAAGmS1XhOGE7IVAAAGMMAAAAAEDhPGFQAAAAAQEBITyAAAANlsAhPUAAAA3WwCE+AAAAIuPWwCE+wAAAIPNWwAAYAPAAEyiAUqFBwEehQeZKwEAAR6FDpkqAgACHoUWmSoCAAIehR6ZKgIAAh6FJpkqAgACkyaFMQWAhTHACgoRYAPAAEyiACaFNQWBhTXACgoZYAPAAEyiACaFOQWChTnACgohYAPAAEyiACaFPQWDhT3ACgoqYAPAAEyiAAAAAAoHdgAKCHEACgl9AAoJ9AAKCrEAAAAEApkwWIE9gUOKAYOMMQABAAAEIWADwABNuQFgA8AATbkBYAPAAE3vAAACBJkyWIFkgWUJhIQAXwMAAAAEmTNYgXGBcgmMMgBfAwAAAAEFmUBYgXeBfYGzAQAAA4GCgbMAAAACAgKBhQAAAISEXwMAAACBigAAAIwyXwMAAAAAXQOZMAFfAwAAAT8DCACZMoCBnsAKCy8IAJkzgYGywAoLOwkBgX3AAE4FAAAAAAkGmTVYgbiBv4HcAACA7wAAAAEDgceB3AAAAAAAAABgA8AATokBSoHNASSB3AUnjDMWgdUuhISZMieEMRaB2S6MMpkzJ4QoBpk2WILCgtCDngMAgIwAAAABA4LSg54AAAABAQGC2wAAAIIdWwAAYAPAAErYAUqDcAEiIiWDdgCAg3DACgvaXQOZMAFgA8AATbkAHIOEFoOCLoSEmTKAjAEAARaDjRSDh8AKC9oAAV0DmTABYAPAAE25hISZMgDAAE3GAByDlBaDki6MMpkzgIwBAAEWg50Ug5fACgvaAAFdA5kwAWADwABNuYwymTMAwABNxgaZPViDo4Org+QBAIIcAAAAAQODtIPkAAAAAAAAAGADwABMogFKg7cBHoPHmSwCAAIWg88Wg80uhISZMoIcwABN5xaD2xaD2S6MMpkzghzAAE3nAAaZN1iEXYRvhLQDAIENAAAAAQOEcIS0AAAAAQEBhHoAACCCHV0DmTABXwMAAAAAXQOZMAFfAwAAAT4BSoSHAR+EjplAAgFfAwAAAiaEmQEchJkWhJcuhISZMoENAQABFoShgISbwAoM2oSEmTIAwABNyF8DAAAmhKYBHISmFoSkLowymTOBDQEAARaEroCEqMAKDNqMMpkzAMAATchfAwAAAAaZOFiFNIVGhYsDAIEGAAAAAQOFR4WLAAAAAQEBhVEAACCCHV0DmTABXwMAAAAAXQOZMAFfAwAAAT4BSoVeAR+FZZlAAgFfAwAAAiaFcAEchXAWhW4uhISZMoEGAQABFoV4gIVywAoNfISEmTIAwABNyV8DAAAmhX0BHIV9FoV7LowymTOBBgEAARaFhYCFf8AKDXyMMpkzAMAATclfAwAAAAaZOViHMIdCh48DAIPGAAAAAQOHQ4ePAAAAAQEBh1IAAACMNGADwABNuQAAXQOZMAFfAwAAAT4BSodgAR+HZ5lAAgFfAwAAAiaHcwEch3MWh3EuhISZMoPGAQABgId1wAoOHgDAAE3KXwMAACaHgQEch4EWh38ujDKZM4PGAQABgIeDwAoOHgDAAE3KXwMAAAAGmT5Yh/WIAIggAQCMNQAAAAEDiAqIIAAAAAAAAABgA8AAS1ABSogNAR6IDZkCAQABHIgYHIgUFogSLoSEmTKDxgEAARaIFi6EhJkyAMAATcqBDQEAARyIHBaIGi6MMpkzg8YBAAEWiB4ujDKZMwDAAE3KAMAATcgABpk6WIhciGOI2gAAjDYAAAABA4htiNoAAAABAQGIdwAAIIIdXQOZMAFfAwAAAABgA8AAS1ABPgNOiIiIiwAAjDdgA8AATbkBHIiPFoiNLoSEmTKBBgEAARaIl4CIkcAKDyiEhJkyAMAATclOiKKIpQAAjDhgA8AATbkBHIipFoinLowymTOBBgEAARaIsYCIq8AKDyiMMpkzAMAATclKiLgBHoi/mQIBAAEciMwciMeBiMTACg9Eg8YBAAGBiMnACg9EAMAATcqBDQEAARyI0YKIzsAKD3eDxgEAAYKI08AKD3cAwABNygDAAE3IAAaZO1iJhYmHif8AAIw5AAAAAQOJmIn/AAAAAQEBiaIAACCCHV0DmTABXwMAAAAAXwMAAAE+A06Js4m2AACMN2ADwABNuQEciboWibguhISZMoEGAQABFonCgIm8wAoQFoSEmTIAwABNyU6JzYnQAACMOGADwABNuQEcidQWidIujDKZM4EGAQABFoncgInWwAoQFowymTMAwABNyUqJ4wEmieMBHInyHIntgYnqwAoQMIPGAQABgYnvwAoQMADAAE3KgQ0BAAEcifeCifTAChBjg8YBAAGCifnAChBjAMAATcoAwABNyF8DAAAAAAoLdwAKC70ACgxpAAoMvQAKDV8ACg4BAAoOkgAKDwsACg/5AAoQ5AAAAAkCmUFZgf6CDYYJB4NMAWqCDWADk/omAAFgA8AATe8AAAAABQaZQ1aUCZQRlUEEAQABapQRYAOT+iYAAAEDlBeVQQAAAAEAAZQdAAAAjCRgA8AATKIBagBgAcAATawCAGADmUEBPgJOlC6UNAAAgThgA6xKAR6UPpkSAQABIxyUT4CUSsAKEViAjAEAASsAwABNxh6UYpkUAAAAAICUcMAKEVgBYAPAAEyiAEqUxQE1lNAAAAEAYAOZBQEflNCZGgEAAYGU48AKEXgANZTyAAABAFwBHJTygpTQwAoRwIwcmN4AAAAAmRE1lQcAAAEAXAEclQeClNDAChHAjByY3gAAAACZETWVHAAAAQBcARyVHIKU0MAKEcCMHJjeAAAAAJkRNZUxAAABAFwBHJUxgpTQwAoRwIwcmN4AAAAAmRGClNDAChHABplEVpVPlVeViwQBjDoBapVXYAOT+iYAAAEDlWSViwAAAAAAAABgA5lBAT4BSpVtAR+VeJknAAAAAAaZRlmFE4UXhScAAoReAAAAAQOFHoUnAAAAAQEBhSMAAACIH2ADwABMogAAYAPAAEyiAAaZR1mFuIW/hcsAAowgAAAAAQOFyYXLAAAAAAAAAGADwABLUAAGmUhZhfiF/YYHAAKMIQAAAAEDhgWGBwAAAAAAAABgA8AAStgAAAAKETQAChJWAAoSkAAKEsMAChLoAAoTDQAAAAUCmUlag1uDao90h4w7AAEAAAQhYAPAAE25AWADwABNuQFgA8AATe8AAAABBZlfWoOMg5KDogEAAAODoIOiAAAAAAAAAF0DmUkBXwMAAAE/AQkBg5LAAE4FAAAAABIGmUtag9CD1oPaAQKE2wAAAAEDg9qD2gAAAAAAAABfAwAAAAaZTFqEB4QNhBABAow8AAAAAQOEEIQQAAAAAAAAAF8DAAAABplNWoQ3hD2EQgECjD0AAAABA4RChEIAAAAAAAAAXwMAAAAGmU5ahGqEcIR2AQKMPgAAAAEDhHaEdgAAAAAAAABfAwAAAAaZT1qEpYSrhMABAITcAAAAAQOEsYTAAAAAAAAAAF8DAAABSoS0ASaEtAEchLkWhLQuhNuZS4ENAQABFoS7Low9mU0AwABNyF8DAAAGmVBahPCE9oUMAQCMPwAAAAEDhP2FDAAAAAAAAABfAwAAAUqFAAEmhQABHIUEFoUALow8mUyBDQEAARaFBi6MPplOAMAATchfAwAABplXWoURhRiFXgAAgO8AAAABA4UghV4AAAAAAAAAYAPAAE6JAT4BSoUpASSFWggnjEAWhT0uhNuZSyeEMRaFRC6MPJlMJ4xBFoVKLow9mU0njEIWhVMujD6ZTgaZWFqFY4VxhowDAICMAAAAAQOFc4aMAAAAAQEBhXwAAACCHVsAAGADwABK2AFKhgYBIiIiIiWGDACAhgbAChUjXQOZYAFgA8AATbkAHIYnFoYiLoTbmUuAjAEAARaGMBSGKsAKFSMAAV0DmWABYAPAAE25hNuZYgDAAE3GAByGQhaGPi6MPJlMgIwBAAEWhksUhkXAChUjAAFdA5lgAWADwABNuYw8mWMAwABNxgAchl4WhlguhNyZT4CMAQABFoZnFIZhwAoVIwABXQOZYAFgA8AATbmE3JlPAMAATcYAHIZ9FoZ2Low/mVCAjAEAARaGhhSGgMAKFSMAAV0DmWABYAPAAE25jD+ZUADAAE3GBplRWoaRhpmG/wEAghwAAAABA4aihv8AAAAAAAAAYAPAAEyiAUqGpQEehrWZLQQABBaGxxaGwi6E25lLghzAAE3nFobVFobRLow8mUyCHMAATecWhuUWht8uhNyZT4IcwABN5xaG9haG7y6MP5lQghzAAE3nAAaZWVqIE4ggiYUAAIQNAAAAAQOILImFAAAAAQEBiDoAACCCHV0DmWABXwMAAAAAXQOZYAFfAwAAAT4ETohLiE4AAIxDXwMAAAEeiFCY+QIBXwMAAAIWiFQuhNuZSxaIYICIWsAKFqmE25liAE6Ib4hyAACMRGADwABNuQEeiHSY+AIBYAPAAE25AhyIfRaIeC6E25lLgQ0BAAEWiH8ujD2ZTQDAAE3IHIiRFoiMgIiGwAoWqYTbmWKBDQEAARaImYCIk8AKFqmMPZlkAMAATcgASYimHIitgYiqwAoWyIFbAQABgoiwwAoW+QDAAE3RPgNOiMCIwwAAjEVfAwAAAR6IxZj5AgFfAwAAAhaIyS6MPJlMFojUgIjOwAoWqYw8mWMATojkiOcAAIxGYAPAAE25AR6I6Zj4AgFgA8AATbkCHIjxFojtLow8mUyBDQEAARaI8y6MPplOAMAATcgciQUWiQGAiPvAChapjDyZY4ENAQABFokNgIkHwAoWqYw+mWUAwABNyABJiR0ciSSDiSHAChd+gVsBAAGEiSfAChevAMAATdE+AUqJNQEfiTyZaQQBXwMAAASBiUnAChbIg4lNwAoXfiaJVAEciVSCiVHAChb5gQYBAAGBiVbAChbIAMAATclfAwAAJoldARyJXYSJWsAKF6+BBgEAAYOJX8AKF34AwABNyV8DAAAAPz9KiXYBKwaZWlqJu4nAiooAAIxHAAAAAQOJyoqKAAAAAQEBidoAAACCHV0DmWABYAPAAE25AABgA8AAStgBPgFKiecBIiIiHIn0FonvLoTbmUuBWwEAARyKAhaJ/YCJ98AKGLyE25ligQ0BAAEWigqAigTAChi8jD2ZZADAAE3IAMAATdEAHIomFoohgIobwAoYvITbmWKBWwEAARyKLhaKKS6E25lLgQ0BAAEWijAujD2ZTQDAAE3IAMAATdEAHIpFFopBLow8mUyBWwEAARyKUhaKToCKSMAKGLyMPJljgQ0BAAEWilqAilTAChi8jD6ZZQDAAE3IAMAATdEAHIp2FopygIpswAoYvIw8mWOBWwEAARyKfRaKeS6MPJlMgQ0BAAEWin8ujD6ZTgDAAE3IAMAATdEGmVtaituK6IwwAACMSAAAAAEDivOMMAAAAAEBAYsBAAAggh1dA5lgAV8DAAAAAF0DmWABXwMAAAE+BU6LEosYAACE3GADwABNuQEeixqY+QIBYAPAAE25AhyLKBaLIy6E25lLgQ0BAAEWiy8ujD2ZTQDAAE3IHItBFos8gIs2wAoZ7ITbmWKBDQEAARaLSYCLQ8AKGeyMPZlkAMAATcgATotZi2AAAIw/YAPAAE25AR6LYpj5AgFgA8AATbkCHItvFotrLow8mUyBDQEAARaLdi6MPplOAMAATcgci4gWi4SAi37AChnsjDyZY4ENAQABFouQgIuKwAoZ7Iw+mWUAwABNyABOi6KLpwAAhNtfAwAAAR6LqZj4AgFfAwAAAhaLsi6E25lLFou+gIu4wAoZ7ITbmWIATovNi9EAAIw8XwMAAAEei9OY+AIBXwMAAAIWi9wujDyZTBaL54CL4cAKGeyMPJljAEqL8gEfi/mZaQQBXwMAAASDjAbAChrVhIwMwAobBiaMFwEcjBeBjBHAChoLgQYBAAGDjBnAChrVAMAATclfAwAAJowmARyMJoKMH8AKGnCBBgEAAYSMKMAKGwYAwABNyV8DAAAABplcWoxtjHKNTwAAjEkAAAABA4yDjU8AAAABAQGMkwAAAIxKXQOZYAFgA8AATbkAAGADwABK2AE+AUqMogEiIiIcjK4WjKkuhNuZS4FbAQABFoy5gIyxwAobuITbmWIAwABN0QAcjNYcjM4WjMkuhNuZS4ENAQABFozQLow9mU0AwABNyIFeAQABHIzmFozhgIzZwAobuITbmWKBDQEAARaM8ICM6MAKG7iMPZlkAMAATcgAwABN0wAcjQUWjQEujDyZTIFbAQABFo0QgI0IwAobuIw8mWMAwABN0QAcjSwcjSMWjR8ujDyZTIENAQABFo0lLow+mU4AwABNyIFeAQABHI07Fo03gI0vwAobuIw8mWOBDQEAARaNRYCNPcAKG7iMPpllAMAATcgAwABN0waZXVqNmo2fjkkAAIxLAAAAAQONrI5JAAAAAQEBjbgAAACMSl0DmTABYAPAAE25AABgA8AAStgBPgFKjccBIiIiHI3YFo3WgI3OwAoc6ISEmTKBXgEAARaN2y6E25lLAMAATdMAHI31Fo3zgI3rwAoc6ISEmTKBWwEAARyN/RaN+C6E25lLgQ0BAAEWjf8ujD2ZTQDAAE3IAMAATdEAHI4aFo4YgI4QwAoc6IwymTOBXgEAARaOHS6MPJlMAMAATdMAHI42Fo40gI4swAoc6IwymTOBWwEAARyOPRaOOS6MPJlMgQ0BAAEWjj8ujD6ZTgDAAE3IAMAATdEGmVJajk6OW46DAQCMTAAAAAEDjmOOgwAAAAAAAABdA5kwAV8DAAABSo5mAR+OZplAAgFfAwAAAhaOdC6E25lLFo5/Low8mUwABplTWo6HjpSOygEAjE0AAAABA46djsoAAAAAAAAAXQOZMAFfAwAAAUqOoAEfjqCZQAIBXwMAAAImjrMBHI6zFo6uLoTbmUuBDQEAARaOui6MPZlNAMAATchfAwAAFo7GLow8mUwABplUWo7OjtuPKAEAjE4AAAABA47njygAAAAAAAAAXQOZMAFfAwAAAUqO8AEfjvCZQAIBXwMAAAImjwMBHI8DFo7+LoTbmUuBDQEAARaPCi6MPZlNAMAATchfAwAAJo8aARyPGhaPFi6MPJlMgQ0BAAEWjyEujD6ZTgDAAE3IXwMAAAAGmVVajyyPOY9yAQCMTwAAAAEDj0SPcgAAAAAAAABdA5kwAV8DAAABSo9HAR+PR5lAAgFfAwAAAhaPVS6E25lLJo9kARyPZBaPYC6MPJlMgQ0BAAEWj2sujD6ZTgDAAE3IXwMAAAAAAAoThwAKE6oAChPNAAoT8AAKFBMAChRfAAoUqwAKFQYAChYWAAoWjAAKGJ8AChnPAAobmwAKHMsACh3FAAoeDgAKHnQACh73AAofXQAAABICmWBaj9OP2ZXog4xQAAEAAAQhYAPAAE25AWADwABNuQFdA5lJAV8DAAAAAAQEmWJakBiQHAmE2wBfAwAAAASZY1qQKJArCYw8AF8DAAAABJlkWpA3kDwJjD0AXwMAAAAEmWVakEiQTgmMPgBfAwAAAAEFmWlakleSXZMXAQAAA5JmkxcAAAAEBASSbAAABITbXwMAAACSdwAABIw8XwMAAACSfgAAAIw9XwMAAACShwAAAIw+XwMAAAAAXQOZYAFfAwAAAT8FCAGZYoAAwAogOAgBmWOBAMAKIEQIAJlkJpKiASMckquCkqXACiBQgLsBAAGTAMAATdAckrkckrKCkrPACiBQg+sAAAAAwABNzoPGAQABkwDAAE3KgpK/wAogUAFgA8AATblfAwAACACZZSaS8gEjHJL8g5L1wAogXIC7AQABkwDAAE3QHJMLHJMDg5MEwAogXIPrAAAAAMAATc6DxgEAAZMAwABNyoOTEcAKIFwBYAPAAE25XwMAAAkBkl2ZXwAAAAABBplnWpT7lQOV5gQBjFEAAAABA5UXleYAAAEAAAQhYAPAAE25AVsCAgKVIQAAADZdA5kwAV8DAQAAlS0AAAA3XQOZMAFfAwEAAABdA5lgAV8DAQABPgVOlTiVPQAAhNtfAwEAAR6VP5j4AgFfAwEAAhaVRYCVQ8AKIWGEhJkyFpVKgZVIwAohcYSEmTIATpVUlVoAAIw9XwMBAAEmlVQBHJVqHpVcmPkCAV8DAQACFpVigJVgwAohYYSEmTIWlWeBlWXACiFxhISZMgCBBgEAAYKVbMAKIY8AwABNyV8DAQBOlXiVfAAAjDxfAwEAAR6Vfpj4AgFfAwEAAhaVhICVgsAKIWGMMpkzFpWJgZWHwAohcYwymTMATpWTlZoAAIw+XwMBAAEmlZMBHJWqHpWcmPkCAV8DAQACFpWigJWgwAohYYwymTMWlaeBlaXACiFxjDKZMwCBBgEAAYSVrMAKIhkAwABNyV8DAQBKlbUBH5W8mWkEAV8DAQAEgpXJwAohj4SVz8AKIhmDldTACiHGhZXbwAoiUAAAAAohOAAKIs8AAAABAplqWpZNllOgigOMUgABAAAEIWADwABNuQFgA8AATbkBXQOZSQFfAwAAAAFdA5lgAV8DAAAEBJlsWpcqly5YhNsAXwMAAAAEmW1al7GXtFiMPABfAwAAAASZb1qXupfAWIxTmN4AXwMAAAAEmXBal8aXzViMVJjeAF8DAAAAAQWZelqZ3pnemqEAAAADme6aoQAAAAQEBJn0AAAEhNtfAwAAAJn/AAAEjDxfAwAAAJoGAAAAjD1fAwAAAJoPAAAAjD5fAwAAAABdA5lqAV8DAAABPwUIAZlsgADACiNzCAGZbYEAwAojfwgAmW8jHJo0gpouwAoji4C7AQABkwDAAE3QHpo7mPcBAV8DAAABgppLwAojiwCCmlTACiOLAV8DAAAIAJlwIxyaeoOac8AKI5eAuwEAAZMAwABN0B6agZj3AQFfAwAAAYOakcAKI5cAg5qbwAojlwFfAwAACQGZ3plfAAAAAAUGmXJanI2clZ2GBAGMUQAAAAEDnLCdhgAAAQAABCFgA8AATbkBWwICApy6AAAANl0DmTABXwMBAACcxgAAADddA5kwAV8DAQAAAF0DmWoBXwMBAAE+BU6c0ZzWAACE218DAQABHpzYmPgCAV8DAQACFpzegJzcwAokbISEmTIWnOOBnOHACiR8hISZMgBOnO2c8wAAjD1fAwEAASac7QEcnQMenPWY+QIBXwMBAAIWnPuAnPnACiRshISZMhadAIGc/sAKJHyEhJkyAIEGAQABgp0FwAokmgDAAE3JXwMBAE6dEZ0VAACMPF8DAQABHp0XmPgCAV8DAQACFp0dgJ0bwAokbIwymTMWnSKBnSDACiR8jDKZMwBOnSydMwAAjD5fAwEAASadLAEcnUMenTWY+QIBXwMBAAIWnTuAnTnACiRsjDKZMxadQIGdPsAKJHyMMpkzAIEGAQABhJ1FwAolJADAAE3JXwMBAEqdTgEfnVWZegQBXwMBAASCnWnACiSahJ1vwAolJIOddMAKJNGFnXvACiVbAAaZdFqdi52RnaABAIw9AAAAAQOdl52gAAAAAAAAAF8DAAABSp2aARadmi6MU5jemW8GmXdanqOep58BAgCMPQAAAAEDnqyfAQAAAAEBAZ6vAAAgjD1fAwAAAABcAT4CSZ68HJ7GgJ7AwAomKIC7AQABkwDAAE3QPYiey8AKJigentOY9wEBXwMAAAGAnuPACiYoAD89F57vLoxTmN6AnvjACiYomW8GmXVanwafDJ8dAQCMPgAAAAEDnxOfHQAAAAAAAABfAwAAAUqfFgEWnxYujFSY3plwBpl4WqAjoCegiAIAjD4AAAABA6AtoIgAAAABAQGgMAAAIIw+XwMAAAAAXAE+AkmgPhygSYCgQsAKJs6AuwEAAZMAwABN0D2IoE7ACibOHqBXmPcBAV8DAAABgKBnwAomzgA/PRegdC6MVJjegKB+wAomzplwAAAKJEMACiXaAAomCwAKJoAACiaxAAonJgAAAAUACASY4FWCW4JwBmkAYAPAAEtQAWqCX2ADwABLUJDGBJjhVYNcg3QGjFYAYAPAAEtQAWqDY2ADwABLUJDPBJjiVYRchHQGjFgAYAPAAEtQAWqEYmADwABLUJDYBJjjVYShhLsGjFoAYAPAAEtQAWqEqWADwABLUJDhBJjkVYTphQQGjFwAYAPAAEtQAWqE8mADwABLUJDqBJjlVYUphUAGjF4AYAPAAEtQAWqFLmADwABLUJDzBJjmVYVohYQGjGAAYAPAAEtQAWqFcmADwABLUJD8BJjnVYWqhcQGjGIAYAPAAEtQAWqFsmADwABLUJEFGwaY6laJJIlgi4UAAYxkmN4BaoklYAPAAEqfkREAAAEDiWqLhQAAAAICAolyAAAAjGZgA8AAS1AAiX8AAACF8WADwABLUAAAYAPAAEtQAT4ISYmNHImagYmRwAoobYCMAQABKAAAAAAAAAAAAMAATcY+AUqJqAEoAAAAAAAA8D8/SYnsHIn5gYnwwAoobYCMAQABKAAAAAAAAPA/AMAATcZKigEBgIoIwAooXz9JihAcih2BihTACihtgIwBAAEoAAAAAAAAAEAAwABNxkqKJQEcijGAiizACihfg8YBAAGAijPACihfAMAAS18/SYo7HIpIgYo/wAoobYCMAQABKAAAAAAAAAhAAMAATcZKilABHIpjHIpcgIpXwAooX4PGAQABgIpewAooXwDAAEtfg8YBAAGAimXACihfAMAAS18/SYpuHIp3gIpywAooX4CMAQABKAAAAAAAAPA/AMAATcZKin8BKAAAAAAAAPA/P0mKjiIWipeAipLACihfjGfAAE3oARaKqYGKoMAKKG2MZ8AATeg+AUqKtgFqisRgA8AAS1CRJD9Jis8iIRyK2YCK1MAKKF+AjAEAARyK3GqK5GADwABLUITKg+sAAAAAwABLYwDAAE3GAByK+4GK8sAKKG2AjAEAASgAAAAAAADgPwDAAE3GPgJJiwocixOAiw7ACihfgIwBAAEoAAAAAAAAAAAAwABNxj4BSosjASgAAAAAAAAAAD9KizkBHotAmQIBAAGAi0XACihfAD9Ki1IBHotZmOsCAAIci2OAi17ACihfhe8AAAAAwABN3xyLeIGLb8AKKG2F7wAAAADAAE3fAAaY61aLiIuPi8kABYxpmN4BagBgA5QIkTAAAAEDi5OLyQAAAAICAoubAAAAjGZgA8AAS1AAi6gAAACF8WADwABLUAAAYAPAAEtQAAaY7FaLzIvQjRAAAYxrmN4AAAABA4vXjRAAAAACAgKL3AAAAIxmYAPAAEyiAIvmAAAAhfFgA8AATKIAAGADwABMogE+A06MGYwgAACA5mADwABMogGUQ4wnIRyMN4GMLsAKKx2AjAEAAZMAwABNxj4DSYxDHIxWHIxRgYxIwAorHYChAQABlADAAEy6gIwBAAGUAMAATcY+AT2KjGTACis2HIxrgoxkwAorNoPGAQABgIxuwAorDwDAAE3KPz2JjH7ACisdHIyHgYx+wAorHYPFAQABlADAAEy/SYzMIRyM2YGM0MAKKx2AjAEAAZMAwABNxj4BPYiM58AKKw8cjOyAjOfACisPg8YBAAGAjO/ACisPAMAATco/So0BAYKNCMAKKzYGmO1WkfGR+JImAAWMbJjeAWoAYAOUCJE8AAABA5H+kiYAAAACAgKSBgAAADZgA8AAS1AAkhAAAAA3YAPAAEtQAABgA8AAS1AABpjuVpIoki+STwAFjG6Y3gFqAGADlAiRSAAAAQOSM5JPAAAAAQEBkjsAAACEhGADwABLUAAAYAPAAEtQAAaY71aSUZJYkngABYxwmN4BagBgA5QIkVQAAAEDklySeAAAAAEBAZJkAAAAhIRgA8AAS1AAAGADwABLUAAGmPBWknqSgZKhAAWMcpjeAWoAYAOUCJFgAAABA5KFkqEAAAABAQGSjQAAAISEYAPAAEtQAABgA8AAS1AABpjxVpKjkqqSzAAFjHSY3gFqAGADlAiRbAAAAQOSr5LMAAAAAQEBkrcAAACEhGADwABLUAAAYAPAAEtQAAaY8laSzpLVkvcABYx2mN4BagBgA5QIkXgAAAEDktqS9wAAAAEBAZLiAAAAhIRgA8AAS1AAAGADwABLUAAGmPNWkvmTAJMiAAWMeJjeAWoAYAOUCJGEAAABA5MFkyIAAAABAQGTDQAAAISEYAPAAEtQAABgA8AAS1AABpj0VpMkkyuTTQAFjHqY3gFqAGADlAiRkAAAAQOTMJNNAAAAAQEBkzgAAACEhGADwABLUAAAYAPAAEtQAAaY9VaTT5NWk3YABYx8mN4BagBgA5QIkZwAAAEDk1qTdgAAAAEBAZNiAAAAhIRgA8AAS1AAAGADwABLUAAGmPZWk3iTf5OfAAWIcZjeAWoAYAOUCJGoAAABA5ODk58AAAABAQGTiwAAAISEYAPAAEtQAABgA8AAS1AABpj4VoJ3gpyFEgABiB4CaoKcYAOT+iZqgpxgA8AASp+CugAAAQOCroUSAAABAAAEIWADwABNuQFgA8AATbkCAgKCsQAAADZfAwAAAIK2AAAAN18DAAAAAF8DAAABPgRJgr0cgsOAgsHACi7DgowBAAGBgsXACi7OAMAATdJKgsgBgYLPwAouzj9JgtQcgtqAgtjACi7DgLsBAAGBgtzACi7OAMAATdBKgt8BgILmwAouwz9JguslgvEAgYLvwAouzmADwABLUD4DSYOEJYOKAICDiMAKLsNgA8AAS1A+AUmDnRyDoxSDocAKLsMAAV8DAAFgA8AAS1CAjAEAASgAAAAAAAAAAADAAE3GPgJOhGaEaAAAhBNgA8AATbkBHIR2HIRyHIRtFIRrwAouwwABXwMAAWADwABLUIENAQABFIRvwAouzgEBXwMAAWADwABLUADAAEtdg8YBAAEUhHTACi7DAAFfAwABYAPAAEtQAMAAS1+DxgEAARSEeMAKLs4BAV8DAAFgA8AAS1AAwABLX0qEgwEmhIMBgoSKwAovkF8DAAA/P0mEwyIiHITJgITHwAouw4CMAQABkwDAAE3GABaE0xSE0cAKLs4BAV8DAAFgA8AAS1CMf8AATekBFoTjFIThwAouzgEBXwMAAWADwABLUIxnwABN6EqE6gEUhPHACi7OAQFfAwABYAPAAEtQP0qE+AGAhP/ACi7DP0qFCAGAhQ/ACi7DBpj5VoUVhTqHxgABiB8CaoU6YAOT+iZqhTpgA8AASp+CugAAAQOFTIfGAAABAAAEIWADwABNuQFgA8AATbkCAgKFTwAAADZfAwAAAIVUAAAAN18DAAAAAF8DAAABPgVJhVschWGAhV/ACjDrgowBAAGBhWPACjD2AMAATdJKhWYBgIVtwAow6z9JhXIchXiAhXbACjDrgLsBAAGBhXrACjD2AMAATdBKhX0BgYWEwAow9j9JhYklhY8AgYWNwAow9mADwABLUD4DSYYiJYYoAICGJsAKMOtgA8AAS1A+AUmGOxyGQRSGP8AKMOsAAV8DAAFgA8AAS1CAjAEAASgAAAAAAAAAAADAAE3GPgJOhwOHBQAAhBNgA8AATbkBHIcJFIcHwAow6wABXwMAAWADwABLUIENAQABFIcLwAow9gEBXwMAAWADwABLUADAAEtdSocWASaHFgGChx3ACjG4XwMAAD8/SYdIFodOFIdMwAow9gEBXwMAAWADwABLUIxnwABN6EqHVQEUh1zACjD2AQFfAwABYAPAAEtQP0qHYwGAh2rACjDrP0mHlCIch5qBh5jACjD2gIwBAAGTAMAATcYAFoekgIeiwAow64x/wABN6UqHsAGBh7fACjD2P0qHvAGAh8PACjDrBpj6Vo0TjXGNqgABjIADao1xYAOT+iZqjXFgA8AASp+REWqNcWADwABKn5G0AAABA412jaoAAAACAgKNewAAADZgA8AATbkAjYIAAAA3YAPAAE25AABgA8AAS1ABSo2IAR6NiJjtAgACHI2RgI2PwAoyzoXvAAAAAMAATd8cjZ+BjZ3ACjLbhe8AAAAAwABN3wAGmPtWiEaIbYkhAAGMggJqiG1gA5P6JmqIbWADwABKn4K6AAABA4hwiSEAAAACAgKIdQAAAISEYAPAAE25AIh8AAAAhfFgA8AATbkAAGADwABNuQE+AkmIiiIiJYiRAICIj8AKM1VgA8AATKIAJYimAIGIncAKM2NgA8AATKIAHIi7FIiywAozYwEBYAPAAEyigV4BAAGTAMAATdM+AUqIyAEeiM+Y7AIAAhSI18AKM1UAAWADwABMohSI2sAKM2MBAWADwABMogA/SojrAR6I8pjqAgACHIj/gIj9wAozVYXvAAAAAMAATd8ciRSBiQvACjNjhe8AAAAAwABN3wAGmPxWjayOCo42AAGMgwNqjgpgA5P6JmqOCmADwABKn5ERao4KYAPAAEqfkbQAAAEDjg2ONgAAAAEBAY4SAAAAjIRgA8AATbkAAGADwABLUAFKjh4BHo4emO4BAAEcjiuAjiPACjRfhe8AAAAAwABN3wAGmP1WjjiOlo7CAAGMhQNqjpZgA5P6JmqOlmADwABKn5ERao6WYAPAAEqfkbQAAAEDjpmOwgAAAAEBAY6eAAAAjIRgA8AATbkAAGADwABLUAFKjqoBHo6qmO8BAAEcjreAjq/ACjTRhe8AAAAAwABN3wAGmP5WjsSPIo9OAAGMhgNqjyJgA5P6JmqPImADwABKn5ERao8iYAPAAEqfkbQAAAEDjyWPTgAAAAEBAY8qAAAAjIRgA8AATbkAAGADwABLUAFKjzYBHo82mPABAAEcj0OAjzvACjVDhe8AAAAAwABN3wAGmP9Wj1CPro/QAAGMhwNqj65gA5P6JmqPrmADwABKn5ERao+uYAPAAEqfkbQAAAEDj7KP0AAAAAEBAY+3AAAAhIRgA8AATbkAAGADwABLUAFKj70BHo+9mPEBAAEcj8WAj8PACjW1he8AAAAAwABN3wAGmQBWj9KQMJBSAAGMiANqkDBgA5P6JmqQMGADwABKn5ERapAwYAPAAEqfkbQAAAEDkDSQUgAAAAEBAZA5AAAAhIRgA8AATbkAAGADwABLUAFKkD8BHpA/mPIBAAEckEeAkEXACjYnhe8AAAAAwABN3wAGmQFWkFSQspDUAAGMiQNqkLJgA5P6JmqQsmADwABKn5ERapCyYAPAAEqfkbQAAAEDkLaQ1AAAAAEBAZC7AAAAhIRgA8AATbkAAGADwABLUAFKkMEBHpDBmPMBAAEckMmAkMfACjaZhe8AAAAAwABN3wAGmQJWkNaRNJFWAAGMigNqkTRgA5P6JmqRNGADwABKn5ERapE0YAPAAEqfkbQAAAEDkTiRVgAAAAEBAZE9AAAAhIRgA8AATbkAAGADwABLUAFKkUMBHpFDmPQBAAEckUuAkUnACjcLhe8AAAAAwABN3wAGmQNWkViRgpGiAAGMiwJqkYJgA5P6JmqRgmADwABKn4K6AAABA5GFkaIAAAABAQGRigAAAISEYAPAAE25AABgA8AAS1ABSpGQAR6RkJj1AQABHJGXgJGVwAo3coXvAAAAAMAATd8ABpkEVpGkkc6R7gABiJQCapHOYAOT+iZqkc5gA8AASp+CugAAAQOR0ZHuAAAAAQEBkdYAAACEhGADwABNuQAAYAPAAEtQAUqR3AEekdyY9gEAARyR44CR4cAKN9mF7wAAAADAAE3fAAaY91qhGKEaoWsAAYyMmN4AAAABA6E1oWsAAAEAAAQhYAPAAE25AWADwABNuQEBAaE4AAAAIl8DAAAAAF8DAAABPgJAHKFQgKFKwAo4QIC7AQABkwDAAE3QoUqhUwBKoVgBJqFYARyhZhyhX4ChYMAKOECD6wAAAADAAE3Og8YBAAGTAMAATcpfAwAABlVWV1hZWgAKOJwACf69AAoEIwAKBzUACgrKAAoREQAKEyoACh+uAAoi3AAKJ0MAAAAIAAooNQAKKqUACirwAAosFAAKLF0ACiyaAAos1wAKLRQACi1RAAotjgAKLcsACi4IAAouRQAKLoIACjCqAAoykwAKMyUACjQkAAo0lgAKNQgACjV6AAo17AAKNl4ACjbQAAo3QgAKN6kACjgQAAo4nAAAABsAAgaZe4yNWwAABoH9AACTt4NJAIIjAACTtwABAQEDgkgAAAEAAQEBgPSCagAAhhUAAQEChB6ElYnsAAABAAEBAYD0ig0AAJO3AAEBAQwAAAAtApmPXIFagWCB2gOMjgAAAWADwABLowAAAQSZklyBlIGYCYyPmXsAYAPAAE6JAAEFmZZcgZyBnIG7AAAAA4GwgbsAAAABAQGBtgAABIyPYAPAAE6JAABgA5mPAT8CCAGZkoAAwAo53AkBgZzAAEuvAAAAAAEGmZRcgb+BxoHYAACA7wAAAAEDgc6B2AAAAAAAAABgA8AATokBSoHUARaB1C6Mj5l7mZIAAAo6CQAKOjwAAAABApmXXIlPiVWNOgOMkAAAAWADm7YAAAUEmZlciY2JvgmMkQBgA5wUAR+Jn5udAQABJ4ySAASZmlyJ04n+CYyTAGADnBQBH4nim50BAAEnjJQABJmbXIoTikAJjJUAYAOcFAEfiiObnQEAASeMlgAEmZ1cikmKUxiMl5l7AFsBKwSZnlyMHowmGIyYmXsAYAObyAErAQWZqAAAAAAEAAADAAAAAAAAAAAAYAOZlwE/AQkBAJvEAAAAAAUGmaBcileKc4u+AQCMmQAAAAEDin2LvgAAAAAAAABdA8AATXgCYAPAAE8KYAOb9QE+AkmKgyIcipMWiogujJeZe5mdgIwBAAErAMAATfwBGoqfmX4+BD0Xiq8ujJeZex6KwMAATX8AAmADwABPCmADm/UAAJmdPgJOivsAAACBB10DwABNPwFbARaK+x4Ak80BAV0DwABNBAFbAR6K+5mkAAAAAACBCMAATSZFAAABHIr7gADACjt7gQkAAAAAwABNQQA+Ak4AAAABAFsBFosQgADACjt7gQrAAE1DPgJOivQAAACMmmADm/UBJorhBYGK9MAKO8hgA5v1PRyLJBaLGi6Ml5l7mZ2BDAIAAhaLKYKLJcAKO+GA65v3goswwAo74QAAPReLQy6Ml5l7H4tUirMBAmADwABPCmADm/UBJot8BRaLfC6Ml5l7mZ1dA8AATXgCYAPAAE8KYAOb9QCZnT0bi4+Zfio/SoupASaLqQUWi7AujJeZe5mdXQPAAE14AmADwABPCmADm/UGmaRci8OL2IwLAAWMm5l7AWoAYAOUCJHJAAABA4vpjAsAAAAAAAAAXQPAAE1GAVsABpmhXIwqjDyMpAEAiEUAAAABA4xEjKQAAAAAAAAAYAObyAE+A06MToxQAACDZmADm8gBFoxSLoyYmXuZnkmMYCEcjGaAjGTACjzlgIwBAAErAJvOSoxvAYCMdsAKPOU/Sox9AReMhC6MmJl7HoyPmaUAAAAAmZ4GmaVcjKmMvoztAAWMnZl7AWoAYAOUCJHVAAABA4zNjO0AAAAAAAAAYAObyAAGmaZcjPKM+Y04AACA7wAAAAEDjQGNOAAAAAAAAABgA8AATokBSo0HASSNOAMnjJ8WjSwWjSQuiEWZoYvAm8ongPEAAAo7AgAKPI4ACjy/AAo9NgAKPWMACj2lAAAABQKZqVyNPY1DjrcDjKAAAAFgA8AATe8AAWADnHADBJmrXI4gjiQJXQBgA8AATKIABJmsXI4yjjgJjKEAYAPAAEyiAASZrVyOR45QCYyiAGADwABPCgABBZmyXI1xjXGN0wCAipl7AAONgo3TAAAAAwMDjYMAAACMo1sAjZMAAARdYAPAAEyiAI2eAAAEjKFgA8AATKIAAGADmakBPwQIAZmrgQDACj48CAGZrIIAwAo+SQgAma0ejcPAAE84AQABJo3JBYCNycAKPjNgA8AATokACQGNccAATgUAAAAAAQaZr1yOVY5cjrUAAIDvAAAAAQOOZI61AAAAAAAAAGADwABOiQE+AUqObQEjHI57Fo50LoyhmayAjAEAAZMAwABNxiSOlQMWjoQujKKZrSeLFxaOjy5dmaskjrEFFo6ZLoyima0nixcWjqQuXZmrJ4sXFo6qLoyhmawBYAPAAE6JAAAKPqAACj8gAAAAAQKZs1yOuo7AkPADjKQAAAFgA5vFAAFgA5vIAgSZtVyPCI8RCYvAAGADwABOiQAEmbZcjymPNAmMpQBgA5v1AAEFmcBcjzmPOY9rAICKmXsAA49Jj2sAAAACAgKPTwAABIvAYAPAAE6JAI9fAAAEjKVgA5v1AABgA5mzAT8DCAGZtYAAwAo/iAgBmbaBAMAKP5YJAY85m8cAAAAABAaZuFyPcI95j4oBAIymAAAAAQOPg4+KAAAAAAAAAGADwABK2AFKj4YBKQaZulyPj4+Wj8MAAIDvAAAAAQOPno/DAAAAAAAAAGADwABOiQFKj6QBJI/DAyeMpxaPuC6LwJm1J4DxBpm7XI/Ij96QoQAAjKgAAAABA4/lkKEAAgABAQGP6gAAAIDrYAPAAE8KAABdA4EiAWADm/UBPg1OAAAAAYg1XQNoAWADm/UBH4/1dQABYAOb9QAATgAAAACINl0DgR4BYAOb9QBOAAAAAIg3WwBOAAAAAIg4WwBOAAAAAIg5WwBOAAAAAIeCYAPAAEyiAZNOAAAAAIeDWwBPj94AAAAAiDtbAAOP5ZChBAAAAwADAAAAAIg8WwAAAAAAiD1bAAAAAACIPlsAAFsBSz4DQT4ETo//kAYAAIDmYAOb9QEekAiZvQEAARyQFYCQEcAKQEuA7wAAAADAAE8yAEmQJhyQMRSQKsAKQP4MAICMAQABKwCb+z4BPTCQXR6QZ8AATG0BAAEkkIMCJ4ypgJB/wApASwA/PYqQkMAKQIMUkJfACkD+DABCAAA9HgA7AgACgQDACkBnggDACkCDAEqQoQADAQBbAQAAAACIPVsAAQAAAACIPlsAPgE9HACBAMAKQGdoAgACFADACkGRDAAUAMAKQZoNAACBSz2LAMAKQJQeADwBAAEUAMAKQMkIAAA9jADACkCdHgA2AQABFADACkDJCAAAPY0AwApAph4ANwEAARQAwApAyQgAAD0cj+WBAMAKQGdtAQABFADACkDJCAAAAEoAARYAgQDACkBnb4FHBpm9XJCmkLuQ7gAFjKqZewFqAGADlAiR4QAAAQOQw5DuAAAAAQEBkMsAAACA62ADwABOiQAAYAOb9QAAAAo/yQAKP/MACkAuAApCLAAKQmcAAAAEApnBXJDzkPmWOgOMrAAAAWADwABN7wABYAOcRQYEmcNckUCRRQmMrQBgA5vSAASZxFyRVpFgCYyuAGADwABO+wAEmcVckW+RdwmMrwBgA8AAStgABJnGXJGGkY4JjLAAYAPAAErYAASZx1yRnZGnCYyxAGADwABK2AAEmclckbGRuAmCIZl7AFsAAQWZ4FyRvZG9ki8AAAADkc+SLwAAAAYGBpHVAAAEjK1gA5vSAJHhAAAEjK5gA8AATvsAkfIAAASMr2ADwABK2ACSAQAABIywYAPAAErYAJIWAAAEjLFgA8AAStgAkicAAASCIVsAAGADmcEBPwcIAZnDgADACkMjCAGZxIEAwApDLwgBmcWCAMAKQz0IAZnGgwDACkNLCAGZx4QAwApDWQgBmcmFAMAKQ2cJAZG9wABOBQAAAAAUBpnLXJI0kj2SUAEAjLIAAAABA5JJklAAAAAAAAAAYAPAAErYAUqSTAEpBpnMXJJUkl2SdQEAjLMAAAABA5JtknUAAAAAAAAAYAPAAErYAUqScAEqBpnNXJJ5koKSlQEAjLQAAAABA5KNkpUAAAAAAAAAYAPAAErYAUqSkAEqBpnOXJKZkqKSuAEAjLUAAAABA5KwkrgAAAAAAAAAYAPAAErYAUqSswEqBpnPXJK8ksWS4AEAjLYAAAABA5LYkuAAAAAAAAAAYAPAAErYAUqS2wEqBpnQXJLkku2TDQEAjLcAAAABA5MFkw0AAAAAAAAAYAPAAErYAUqTCAEqBpnRXJMRkxqTNwEAjLgAAAABA5MvkzcAAAAAAAAAYAPAAErYAUqTMgEqBpnSXJM7k0STVwEAjLkAAAABA5NPk1cAAAAAAAAAYAPAAErYAUqTUgEqBpnTXJNbk2SThQEAjLoAAAABA5N9k4UAAAAAAAAAYAPAAErYAUqTgAEqBpnUXJOJk5KTpQEAjLsAAAABA5Odk6UAAAAAAAAAYAPAAErYAUqToAEqBpnVXJOpk7KTzAEAjLwAAAABA5PEk8wAAAAAAAAAYAPAAErYAUqTxwEqBpnWXJPRk9qT7wEAjL0AAAABA5Pjk+8AAAAAAAAAYAPAAErYAUqT5gEhFpPnLoyvmcUGmddck/OT/JQnAQCMvgAAAAEDlAaUJwAAAAAAAABgA8AAStgBSpQJARyUGB6UCZmBAQABFpQMLoyumcQAiJoBAAEngIoAwABOmwaZ2FyULJQ3lHABAIy/AAAAAQOURZRwAAAAAAAAAGADwABO+wFKlEgBHpRImYQCAAIWlF4ujK2ZwxaUZS6MrpnEAAaZ2VyUdJR/lJ4BAIzAAAAAAQOUj5SeAAAAAAAAAGADwABO+wFKlJIBapSZYAPAAE77keoGmdpclKOUspTMAQCMwQAAAAEDlL2UzAAAAAAAAABgA5wUAUqUwAEmlMAFFpTIFpTALoIhmXuZyYXZAGADnBQGmdtclNCU6pWyAQCH+QAAAAEDlPWVsgAAAAAAAABdA8AATUYBYAOcZwE+AkmU+xaU/y6Mr5nFSpUJAWqVEF0DwABNRgFgA5xnke0/SpUvAR+VOokHAQFgA5xnATGVemADnGcBH5V/mfcCAAIuJpWkBRaVpC6CIZl7mclgA5xcAAAGmdxclbeVypXaAQCMwgAAAAEDldOV2gAAAAAAAABgA5xwAUqV1gErBpndXJXelfeWGwEAjMMAAAABA5YAlhsAAAAAAAAAXQPAAE1GAWADm+UBSpYDAWqWA10DwABNRgFgA5vlkfMGmd5clh+WKpY4AQCBYwAAAAEDljGWOAAAAAAAAABgA8AATokBSpY0ASsAAApDwQAKQ+sACkQVAApEPwAKRGkACkSTAApEvQAKROcACkURAApFOwAKRWUACkWPAApFwQAKRgsACkZNAApGgQAKRsAACkdBAApHaQAKR6cACkfRAAAAFAKZ4VyWPZZDmUUDjMQAAAFgA8AATe8AAWADnGcCBJnjXJaUlpkJjK0AYAOb0gAEmeVclrKWuQmCIZl7AGADnFwAAQWZ91yWvpa+lvEAAAADlteW8QAAAAICApbdAAAEjK1gA5vSAJbpAAAEgiFgA5xcAABgA5nhAT8DCAGZ44AAwApIhAgBmeWBAMAKSJAJAZa+wABOBQAAAAAPBpnnXJb2lwGXIQEAjK4AAAABA5cMlyEAAAAAAAAAYAPAAE77AUqXDwEWlxcWlw8ugiGZe5nljK6b1AaZ6FyXJZcwl2kBAIy/AAAAAQOXPpdpAAAAAAAAAGADwABO+wFKl0EBHpdBmYQCAAIWl1cujK2Z4xaXXi6MrpnnAAaZ6VyXbZd8l5ABAIXZAAAAAQOXgZeQAAAAAAAAAGADnBQBSpeEARaXjBaXhC6CIZl7meWF2ZxeBpnqXJeVl56XsQEAjMUAAAABA5epl7EAAAAAAAAAYAPAAErYAUqXrAEqBpnrXJe1l76XzgEAjMYAAAABA5fGl84AAAAAAAAAYAPAAErYAUqXyQEqBpnsXJfSl9uX7AEAjLAAAAABA5fkl+wAAAAAAAAAYAPAAErYAUqX5wEqBpntXJfwl/mYDAEAjLEAAAABA5gEmAwAAAAAAAAAYAPAAErYAUqYBwEqBpnuXJgQmBmYKQEAjMcAAAABA5ghmCkAAAAAAAAAYAPAAErYAUqYJAEqBpnvXJgtmDaYRQEAjMgAAAABA5g+mEUAAAAAAAAAYAPAAErYAUqYQQEpBpnwXJhJmFKYZAEAjL4AAAABA5hcmGQAAAAAAAAAYAPAAErYAUqYXwEqBpnxXJhomHGYiwEAjLwAAAABA5iDmIsAAAAAAAAAYAPAAErYAUqYhgEqBpnyXJiPmJiYsAEAjMkAAAABA5iomLAAAAAAAAAAYAPAAErYAUqYqwEqBpnzXJi0mMeY2wEAjMoAAAABA5jUmNsAAAAAAAAAYAOb5QFKmNcBKwaZ9FyY35jymQIBAIzCAAAAAQOY+5kCAAAAAAAAAGADnHABSpj+ASsGmfVcmQaZH5lDAQCMwwAAAAEDmSiZQwAAAAAAAABdA8AATUYBYAOb5QFKmSsBapkrXQPAAE1GAWADm+WR8wAACkjFAApI/wAKSUEACkl5AApJowAKSc0ACkn3AApKIQAKSksACkp1AApKnwAKSskACkrzAApLGwAKS0MACkuBAAAADwKZ+FyZSJlXoVoHjMsAAAFgA5vFAAFgA5vdAQSZ+1yaLJo2CYzMmXsAWwABBZoHXJpumm6ajgCAipl7AAOafZqOAAAAAQEBmoMAAASMzFsAAGADmfgBPwIIAZn7gADACkwNCQGabpvHAAAAAAcGmf5cmZCZkJnKAAKMzZl7AAAAAQOZl5nKAAAABAQEmZgAAACMzlsAmaMAAACMz1sAmbEAAACIT1sAmbwAAACM0FsAAFsABpn/XJnOmc6Z8gACjNGZewAAAAEDmduZ8gAAAAICApncAAAAjM5bAJnnAAAAjNJbAABbAAaaAFyZ9pn2miEAAozTmXsAAAABA5oDmiEAAAADAwOaBAAAAIzOWwCaDwAAAIzUWwCaGwAAACJbAABbAAaaAVyak5qincwAAIzVAAAAAQOaqJ3MAAAAAwIDmrAAAACM1mADwABO+wCaygAAAIzXXQPAAE1GAVsAmvsAAACM2F0DwABNeAJgA8AATvtbAWoAYAHAAE2sAgBgA5vlAT4KTpsWmy0AAIzZYAPAAEyiARabQ4GbL8AKTRSByMAATXZOm1ObZQAAjNpgA8AATKIBIyEcm3aCm2fACk0kgIwBAAErAMAATfwWm4+Cm4DACk0kgcjAAE2ckwFgA8AATKJOm6ObsAAAjNtgA8AATKIBHJvJg5uywApNTIENAQABhJvLwApNbADAAE3ITpvnm/EAAIhPXQPAAE1GAVsBHpv3wABGjwEBWwGFm/zACk2rAD0cnBmGnA/ACk3WhFgDAAOTg5wlwApNTIGcPcAKTRQAwABNa06cXJxiAACM3F0DwABNRgFbAR6caMAARo8BAVsBhJxtwApNbABOnImclwAAjN1gA8AATKIBg5yZwApNTE6cuZzDAACM3mADwABMogGTSZzMHJzihJzQwApNbIKMAQABkwDAAE3SPgE9HJz+gpzvwApNJIESAQABNJ0GA50GnXAAAAACAgKdBwAAAIZNYAPAAE77AJ0NAAAAIlsAAGABwABNrAE+Aj0cnSeGnR7ACk3WgQwCAAI1nSgAAAEAYAPAAEyiARSdKMAKTkQIADWdNQAAAQBgA8AATKIBFZ01wApORAgcnTUUnSjACk7UDACBDQEAAZQAwABNyBSdKMAKTtQMABSdO8AKTrELAADAAE1WPRydT4edSsAKTh+BDAIAAjWdUAAAAQBgA8AATKIBFJ1QwApOWwkANZ1ZAAABAGADwABMogEVnVnACk5bCRydWRSdUMAKTz8MAIENAQABlADAAE3IFJ1QwApPPwwAHp1fmYEBAAEUnWLACk6jCgAAAMAATVYAwABNlz9KnX4BHp2FmYwBAAEcnZIujM2ZewQABBadmi6MzJl7mfsenaaZgQEAAYCdqcAKTQYAhp22wApN1oedwcAKTh8Amf4ABpoCXJ3RneCeRAAAjN8AAAABA53onkQAAAABAQGd8AAAAIzWYAPAAE77AABgA5vlAT4BSp4CAR6eCZmMAQABHJ4WLozRmXsCAAIWniQujMyZe5n7Hp4wmYEBAAGAnjPAClAIAACZ/wAGmgNcnkmeWJ7dAACM4AAAAAEDnmCe3QAAAAICAp5oAAAAjNZgA8AATvsAnnwAAAAiWwAAYAOb5QE+Aj0cno4ujNOZewMAAxaenC6MzJl7mfsenqiZgQEAAYCeq8AKUHAAgZ64wApQfgCaAEqexAEensuZjAEAAYGe08AKUH4ABpoEXJ7inuKhWAAAjOEAAAABA57qoVgAAAABAQGe9gAAAIziYAPAAEzaAABbAT4ESZ8IFp8XgJ8MwApQ74zjwABM6D4BSp8pARafshyfQC6M1QMAAxafUoCfR8AKUO+M1sAATOQWn2mAn17AClDvjNfAAEzmFp+XgJ+MwApQ74zYwABM5wCaAYzOm+k/SZ/HFp/WgJ/LwApQ74yvwABM6T4BSp/oARagFByf9C6M3wEAARagCICf/cAKUO+M1sAATOQAmgKMzpvpP0mgKRagOICgLcAKUO+MvcAATOo+BU6gTqBYAACM5GADwABOiQEeoFqZgQEAARagaICgXcAKUO+M1sAATOQATqB/oIwAAIzlYAPAAE77AR6gjpmCAQABHKCbgaCRwApRsoYTAgACkxyguRagsoGgqMAKUbKByMAATo2BBgEAAZQAwABNyQDAAE6fAE6gyqDOAABFWwEcoO4WoNuAoNDAClDvjNfAAEzmgtEBAAGTAMAATVU9FqEaHKD+LozgAgACgqEHwApR24OhFcAKUicAmgOMzpvpSqErAYOhMsAKUic/PTChQSeM5gAACkwzAApMeQAKTK0ACkzpAApP6wAKUFMAClDSAApSgwAAAAcCmghcoV2hY6sFA4znAAABYAOZ+AABYAOb5QEEmgtcoemh7hiISZl7AGADnCEBKwEFmh5coaehp6HYAICKmXsAA6G4odgAAAABAQGhuQAAAIzOWwAAYAOaCAE/AQkAocyaBwEAAYChzsAKUvMADQaaDVyh8qICoucBAIXZAAAAAQOiB6LnAAAAAAAAAGADnCEBPgNOohGiEwAAivNgA5whARaiFS6ISZl7mgtJoiAhHKImgKIkwApTPICMAQABKwCcLUqiLwGAojbAClM8P0qioQEXoqguiEmZeyai1QAeorCZjgEAASaivAUeoryaGwEAARaiyS6MzpoPAGADwABPBwBgA5whmgsGmg5coyWjLqNCAQCM6AAAAAEDozujQgAAAAAAAABgA8AAStgBSqM+ASkGmg9co0ejS6NiAQCMzgAAAAEDo1WjYgAAAAAAAABbAUqjWAEWo1gujMyZe5n7BpoSXKNno26jsQAAgO8AAAABA6N2o7EAAAAAAAAAYAPAAE6JAUqjfAEko7ECJ4zpHqOXwABLqAEAARajpC6MzJl7mfsABpoTXKO2o8SkIgMAgIwAAAABA6PGpCIAAAABAQGjxwAAAIIdWwAAYAPAAErYAT4BSqPUASIlo+EAgKPbwApUamADmggAHqP3wABGdQIAAhakAS6MzJl7mfsWpBMUpA3AClRqAAFgA5oIjMyZe5n7AAaaEFykJ6QvpPsBAIIcAAAAAQOkOKT7AAAAAAAAAGADwABMogE+AUqkxwEcpOsepM7AAEZ2AQABFqTfLozMmXuZ+wCAowEAATf2NjY2AMAATLwGmhRcpQClD6VuAACM3wAAAAEDpRelbgAAAAEBAaUfAAAAjNZgA8AATvsAAGADm+UBPgFKpTEBHqU4mYwBAAEcpUAujNGZewIAAhalTi6MzJl7mfsepVqZgQEAAYClXcAKVSwAAJoZAAaaFVylc6WCpfwAAIzgAAAAAQOliqX8AAAAAgICpZIAAACM1mADwABO+wClpgAAAEVbAABgA5vlAT4CPRylsS6M05l7AwADFqW/LozMmXuZ+x6ly5mBAQABgKXOwApVlACBpdvAClWiAJoaSqXlAR6l7JmMAQABgaX0wApVogAGmhZcpjmmSKmvAACM1QAAAAEDpk6prwAAAAMCA6ZWAAAAjNZgA8AATvsApnAAAACM110DwABNRgFbAKahAAAAjNhdA8AATXgCYAPAAE77WwFqAGABwABNrAIAYAOb5QE+C06mvKbTAACM2WADwABMogEcpvAWpumBptXAClYhgcjAAE12gQ0BAAGUAMAATchOpwqnHAAAjNpgA8AATKIBIyEcpy2Cpx7AClYxgIwBAAErAMAATfwWp0aCpzfAClYxgcjAAE2ckwFgA8AATKJOp1qnZwAAjNtgA8AATKIBHKeAg6dpwApWWYENAQABhKeCwApWhwDAAE3ITqeep6gAAIhPXQPAAE1GAVsBHqeuwABGjwEBWwGFp7PAClbGAD0cp8+Gp8bAClbxgQwCAAKTFqfVLozMmXuZ+wDAAE1WPRyn/Ian8sAKVvGEWAMAA5SDqAjAClZZgaggwApWIQDAAE1rTqg/qEUAAIzcXQPAAE1GAVsBHqhLwABGjwEBWwGEqFDAClaHAE6obKh6AACM3WADwABMogGDqHzAClZZTqicqKYAAIzeYAPAAEyiAZNJqK8cqMWEqLPAClaHgowBAAGTAMAATdI+AT0cqOGCqNLAClYxgRIBAAE0qOkDqOmpUwAAAAICAqjqAAAAhk1gA8AATvsAqPAAAAAiWwAAYAHAAE2sAT4CPRypCoapAcAKVvGBDAIAAjWpCwAAAQBgA8AATKIBFKkLwApXfwgANakYAAABAGADwABMogEVqRjACld/CBypGBSpC8AKWA8MAIENAQABlADAAE3IFKkLwApYDwwAFKkewApX7AsAAMAATVY9HKkyh6ktwApXWoEMAgACNakzAAABAGADwABMogEUqTPACleWCQA1qTwAAAEAYAPAAEyiARWpPMAKV5YJHKk8FKkzwApYegwAgQ0BAAGUAMAATcgUqTPAClh6DAAeqUKZgQEAARSpRcAKV94KAAAAwABNVgDAAE2XP0qpYQEeqWiZjAEAARypdS6MzZl7BAAEFql9LozMmXuZ+x6piZmBAQABgKmMwApWEwCGqZnAClbxh6mkwApXWgCaGAAGmhhcqbSptKoTAASMzZl7AWoAYAOUCJH8AAABA6m7qhMAAAAEBASpvAAAAIzOWwCpxwAAAIzPWwCp1QAAAIhPWwCp4AAAAIzQWwAAWwAGmhlcqhiqGKphAASM0Zl7AWoAYAOUCJIIAAABA6olqmEAAAACAgKqJgAAAIzOWwCqMQAAAIzSWwAAWwAGmhpcqmaqZqq8AASM05l7AWoAYAOUCJIUAAABA6pzqrwAAAADAwOqdAAAAIzOWwCqfwAAAIzUWwCqiwAAACJbAABbAAaaG1yqwarIqwMABYztmXsBagBgA5QIkiAAAAEDqtSrAwAAAAEBAarVAAAAjM5bAABbAAAAClMWAApTsAAKU9oAClQIAApUTQAKVL0AClUPAApVdwAKVfYAClkmAApZdAAKWbAACln0AApaJwAAAA0Cmh9cqwirDq1yA4zvAAABYAOaCAABYAOb7gEEmiJcq5SrnRiM8Jl7AGADnEUBKwEFmixcq1KrUquCAICKmXsAA6tiq4IAAAABAQGrYwAAAIzOWwAAYAOaHwE/AQkAq3aaHgEAAYCreMAKWq8ABAaaJFyroauyrCcBAIK8AAAAAQOru6wnAAAAAAAAAGADnEUBPgNOq8WrxwAAUGADnEUBFqvJLozwmXuaIkmr2CEcq96Aq9zAClr4gIwBAAErAJxZSqvnAYCr7sAKWvg/Sqv1ASar9QUXq/wujPCZeyar/AUerAiaKQEAARasGS6MzpoPAGADnEWaImADnEUGmiZcrCysO6zZAACM8QAAAAEDrECs2QAAAAIBAqxPAAAAjNddA8AATUYBWwCsgAAAAIzYXQPAAE14AmADwABO+1sBagBgAcAATawCAGADm+UBPgFKrJcBHKyjLozVAwADaqyqYAPAAE77kimArLHAClt9gazGwApbjQCaFgaaJ1ys3qzlrSkAAIDvAAAAAQOs7a0pAAAAAAAAAGADwABOiQFKrPMBJK0pAyeM8h6tDsAAS6gBAAEWrRsujMyZe5n7ACeA8QaaKVytLq01rXAABYzzmXsBagBgA5QIki8AAAEDrUWtcAAAAAEBAa1GAAAAjM5bAABbAAAAClrSAApbYAAKW90AClwlAApcWAAAAAQCmi1crXWthK2tB4z1AAABYAPAAE3vAAAAAQWaMgAAAAAEAAADAAAAAAAAAAAAYAOaLQE/AQkBAMAATgUAAAAAAQaaMFytlK2drasBAoz2mXsAAAABA62rrasAAAAAAAAAYAPAAE8HAAAAClyyAApc2QAAAAECmjNcrbCttsAAXsQDjPcAAAFgA5n4AAJgA5whYAOaLRIEmjZcrgyuGgmM9pl7AGADwABPBwAEmjdcriWuMBiM+Jl7AGADwABO+wAEmjhcrkauTBiM+Zl7AGADm9IABJpGXK5brmUJjLsAYAPAAErYAASaOVyudK5+CYz6mXsAYAPAAErYAASaOlyvOq9YCYz7mXsAYAPAAErYAASaO1yvaK99CYz8mXsAYAPAAErYAASaR1yvjK+SCYz9AGADwABK2AAEmjxcr5uvqBiM/pl7AGADwABPBwAEmj1csxuzKRiM/5l7AGADwABO+wErBJo+XLVMtWAYjQCZewBgA5ozASsEmj9ct7G3wRiNAZl7AFsBKwSaQFy74bvnGI0CmXsAYAOcIQErBJpBXL1KvV4YjQOZewBbASsEmkJcwABA7cAAQQMYjQSZewBbASsEmkNcwABFUcAARV4YjQWZewBdA8AATXgCYAPAAE77YAOb0gErBJpEXMAASVzAAElqGI0GmXsAXQPAAE1GAWADnDgBKwSaRVzAAEwawABMKBiNB5l7AF0DwABNRgFgA5wUASsBBZp6XK+tr62xPgCAipl7AAOvu7E+AAAACQkJr8MAAACMzlsAr9QAAACNCFsAr/AAAACMrmADwABOiQCwBwAABIz5YAOb0gCwGgAABIy7YAPAAErYALAxAAAEjPpgA8AAStgAsEgAAASM+2ADwABK2ACwcwAABIz8YAPAAErYALCVAAAEjP1gA8AAStgAAGADmjMBPwoIAZo4gwDACl7SCAGaRoQAwApe3ggBmjmFAMAKXuwIAZo6hgDACl76CAGaO4cAwApfCAgBmkcUAMAKXxYIAAgAmjcesLiZgwEAAYKwvsAKXsQACACaNiaw5wWBsOnACl67YAPAAE8HCACaPCaxEwWBsRXACl67YAPAAE8HCQCxMpoHAQABgLE0wApesgAsBppJXLFDsUyxdgEAjQkAAAABA7FdsXYAAAAAAAAAYAPAAErYAUqxYAEhFrFhLoz8mXuaOwaaSlyxerGDsjMBAI0IAAAAAQOxkbIzAAAAAAAAAGADwABPBwE+AkmxlyEWsZwujQmaST4BPTCxth+xwMAATDABAAEnjQoAP0qyGgEWsiEujPaZe5o2BppLXLI4skOzDwEAjK4AAAABA7JOsw8AAAAAAAAAYAPAAE77AT4DTrKpsqsAAIQTYAPAAE77ARayrS6M+Jl7mjdJsr4hHLLEgLLCwApgbICMAQABKwDAAE8GSrLNAYCy1MAKYGw/SrLcARey4y6M+Jl7FrL2Lo0LmXuaU5o3BppMXLMtszizygEAjL8AAAABA7NGs8oAAAAAAAAAYAPAAE77AT4DTrNQs1IAAIQTYAPAAE77ARazVC6M/5l7mj1Js2ghHLNugLNswApg6oCMAQABKwDAAE8GSrN3AYCzfsAKYOo/SrOGARezjS6M/5l7HrOemYQCAAIWs7QujK2aTRazuy6MrppLAJo9BppNXLPPs+W0mgEAjK0AAAABA7PrtJoAAAAAAAAAYAOb0gE+BE6z9bP3AACD/WADm9IBFrP5Loz5mXuaOEm0BSEctAuAtAnACmF1gIwBAAErAMAATfxKtBQBgLQbwAphdT9OtCe0KwAAgOtgA8AATokBHrQ6mmkBAAEWtEYujMyZe5n7AEq0VwEXtF4ujPmZexy0hha0fR60Z5mLAAAAAIyZm76C0QEAAR60i8AATzgBAAGBtJHACmGyAADAAE2MmjgGmk5ctJ+0qLTTAQCMvgAAAAEDtLK00wAAAAAAAABgA8AAStgBSrS1ARy0xB60tZmBAQABFrS4LoyumksAiJoBAAEngIoAwABOmwaaT1y02LThtPMBAIyxAAAAAQO07LTzAAAAAAAAAGADwABK2AFKtO8BKQaaUFy0+LULtToBAIzCAAAAAQO1FLU6AAAAAAAAAGADnHABPgFKtRoBHrUhmYYBAAEWtSsujMyZe5n7AAaaUly1ZLV1t2gBAI0MmXsAAAABA7WFt2gAAAAAAAAAYAOaMwE+Akm1ixy1pBa1jy6NAJl7mj6AjAEAASsAmmQ+BU61urXEAACNDWADwABPBwEjFrXGLo0Oml0eteiaagEAARa18y6M9pl7mjYAHrYPmmsBAAEWtiYujPaZe5o2AAFgA8AATwdJtj0ctkuAtkHACmMEgIwBAAErAMAATfw+AUq2gwErP062orayAACND2ADmjMBJrbLAB62tJmOAQABgLbAwApjBABgA5ozPRe28oG24sAKY2qM/pl7FrcCLoz+mXuaPJo8PRe3Fy6NAJl7gbcuwApjapo+P0q3SQEWt1AujQCZe5o+BppVXLdtt323qAEAjRAAAAABA7eIt6gAAAAAAAAAYAOcIQE+AUq3jgEWt5UujQyZe5pSBppWXLfFt9u6TAEAjREAAAABA7frukwAAAAAAAAAXQPAAE1GAWADnCEBPgdOt/W39wAAg2ZbARa3+S6NAZl7mj9JuA8hHLgVgLgTwApkK4CMAQABKwDAAE38SrgeASa4HgWAuCXACmQrXQPAAE1GAWADnCE/TrgxuEAAAI0SXQPAAE1GAVsBIxa4Qi6NDppdHrhimmwBAAEWuHQujPaZe5o2AB64jpptAQABFrisLoz2mXuaNgABXQPAAE1GAVtJuMEWuMUujPuZe5o6PgE9ibjtwApkdBy5DYG4/sAKZHSEYQIAApMcuS4WuSeBuRjACmR0gcjAAE12gQYBAAGUAMAATckAwABNaT9OuUK5UwAAjRNdA8AATUYBYAOcIQEeuVnAAEg+AQFgA5whAZMAPgJOuYwAAACBB10DwABNPwFbARa5jB4Ak80BAV0DwABNBAFbAYG5jMAKZHQAgQjAAE0mRQAAARy5jIMAwAplMIEJAAAAAMAATUEAPgJOuXsAAACNFFsBFrmcgwDACmUwgQrAAE1DPgE9HLm1grmkwAplCYCCAQABJrnUAB65uZmOAQABJrnFBYS5xcAKZXtgA8AATwcAYAOcIQDAAE1XSrnvARe59i6NAZl7H7oViQcBAWADnCEBgro3wAplCQCaPwaaU1y6Ubpcu9ABAI0LmXsAAAABA7pyu9AAAAAAAAAAYAPAAE77AT4ETrp8uoMAAI0VXQPAAE1GAWADnCEBHrqJwABIPgEBYAOcIQGTAE66prqsAACNFmADmjMBLkO6uCEcuuIeur+abgEAARa60oG6zMAKZj2M9pl7mjYAgIwBAAErAMAATfw+Aj0cuvqAuvPACmYYgIIBAAEWuwSBuv7ACmY9jReaVwDAAE1XPYm7EsAKZj0muysAFrsggbsawApmPY0QmlVgA5ozSrtGAR67TZmCAQABHLt7HLtoHrtQmYEBAAEWu1mBu1PACmY9jL+aTACBDQEAASeNGADAAE6egQ0BAAEcu8Ecu5UWu4yAu4XACmYYhHnAAE13gasBAWADwABOiQE0u5kDu5m7vwAAAAEBAbumAAAAhIFgA5whAABgA8AATokBSrusAR67rJmBAQABFruxgruvwApnI4y/m9UAAMAATQ+BvwEAASeEMQDAAE0YAMAATp4ABppXXLvru/u9QQEAjRcAAAABA7wBvUEAAAAAAAAAYAOcIQE+BE68C7wNAACEgWADnCEBFrwPLo0CmXuaQEm8GyEcvCGAvB/ACmeQgIwBAAErAJwtSrwqAYC8McAKZ5A/Trw+vEgAAI0ZYAPAAE8HAR68SppvAgACFrxjLoz2mXuaNha8cy6M/pl7mjwASbyHHLyVgbyLwApny4CMAQABKwDAAE38PgFKvNkBF7zgLo0CmXsumkA+AUq9AgEXvQkujQKZeya9KQAevRKZjgEAAYG9HsAKZ8sAYAOcIZpABppYXL1ivYDAAEDkAQCNGgAAAAEDvY7AAEDkAAAAAAAAAF0DwABNeAJgA8AATvtgA5xFAT4GTr2YvZoAAISBWwEWvZwujQOZe5pBSb22IRy9vIC9usAKaH+AjAEAASsAwABN/D2AvcXACmh/P0690b3YAACA5l0DwABNeAJgA8AATvtgA5xFAR693sAATX8AAmADwABO+2ADnEUAAE6+A74LAACNG2ADm/UBJr4YABa+Ei6MrZpNYAOb9T0cvkIWvjsWvi4ujRyaWoEBwABNm4ESAQABNL5KA75KwABAfgAAAAEBAb5LAAAAjR1gA5vSAABgAcAATawBPgJJvlkiIiW+YgCDvl3ACmktYAOcRQAWvnoUvnXACmktAwFgA5xFjLCcSgAhFr6MFL6HwAppLQMBYAOcRYy1nFE+AT0cvquBvqXACmi2gQwCAAIWvrEUvqzACmktAwFgA5xFjK6b1BS+v8AKaS0DAWADnEUAwABNjT9JvtMiJb7cAIO+18AKaS1gA5xcABa+9hS+8cAKaS0DAWADnFyMsJxfPgNOvw6/GQAAjNJgA8AATvsBFr8gFL8bwAppLQMBYAOcXIyum9Q9HL86gb80wApotoEMAgAChL87wApp5h+/WZngBgAGLoS/csAKaeYpKSoUv5HACmktAwFgA5xcAADAAE2NSb+gIRa/qhS/pcAKaS0DAWADnFyMyJxgPgJOv8O/zgAAjNRgA8AATvsBHr/QmYoCAAIWv98Uv9rACmktAwFgA5xcjK6b1IK/68AKaOYAPRzAAEAFgb//wApotoEMAgAChcAAQAbACmphH8AAQBiZ4AYABi6FwABAQMAKamEqKSoUwABAYMAKaS0DAWADnFwAAMAATY0/PwDAAE0USsAAQIUBF8AAQIwujQOZex/AAECvirMBAmADwABO+2ADnEUBgcAAQNnACmi2AJpBBppZXMAAQQfAAEElwABFLQEAjR4AAAABA8AAQTXAAEUtAAAAAAAAAF0DwABNeAJgA8AATvtgA5xFAT4ITsAAQT/AAEFBAACEgVsBFsAAQUMujQSZe5pCScAAQV8hHMAAQWWAwABBY8AKa0+AjAEAASsAwABN/ErAAEFuASbAAEFuBYDAAEF1wAprT10DwABNeAJgA8AATvtgA5xFP07AAEGBwABBiAAAgOZdA8AATXgCYAPAAE77YAOcRQEewABBjsAATX8AAmADwABO+2ADnEUAAE7AAEGzwABBuwAAjRtgA5v1ASbAAEHIABbAAEHCLoytmk1gA5v1TsAAQeLAAEHmAACNH2ADnCEBFsAAQegujRCaVUnAAEH4IRzAAEIAg8AAQfzACmwMgIwBAAErAJwtPgE9HMAAQhiBwABCEcAKa7CDawEAARbAAEIjg8AAQh/ACmwMjR6cKADAAE2UPz0cwABCUxbAAEJMFsAAQj8ujRyaWoEBwABNm4ESAQABNMAAQlsDwABCW8AARMUAAAABAQHAAEJcAAAAjR1gA5vSAABgAcAATawBPgJJwABCaiIiIiXAAEJzAITAAEJuwApspmADnEUAIRbAAEKWFMAAQpHACmymBAFgA5xFjLCcSgAhFsAAQrIUwABCrcAKbKYEAWADnEWMtZxRACEWwABC0xTAAELOwApspgQBYAOcRYy7nEs+AT0cwABC74HAAELpwAprsIEMAgACFsAAQvUUwABC8MAKbKYEAWADnEWMrpvUFMAAQwPACmymBAFgA5xFAMAATY0/ScAAQxciJcAAQyAAhMAAQxvACmymYAOcXAAhFsAAQzsUwABDNsAKbKYEAWADnFyMsJxfPgNOwABDU8AAQ14AAIzSYAPAAE77ARbAAENlFMAAQ2DACmymBAFgA5xcjK6b1D0cwABDf4HAAEN5wAprsIEMAgAChcAAQ4DACm2gH8AAQ56Z4AYABi6FwABDt8AKbaApKioUwABD18AKbKYEAWADnFwAAMAATY1JwABD5iEWwABD8BTAAEPrwApspgQBYAOcXIzInGA+Ak7AAEQJwABEFAAAjNRgA8AATvsBHsAARBaZigIAAhbAAEQlFMAARCDACmymBAFgA5xcjK6b1ILAAEQxwApr5gA9HMAAREuBwABERcAKa7CBDAIAAobAAERMwApuNR/AAERemeAGAAYuhsAARIbACm41KioqFMAARKfACmymBAFgA5xcAADAAE2NPz8AwABNFErAAETMARfAAETTLo0EmXsfwABE+IqzAQJgA8AATvtgA5xFAYHAAEUiwAprsACaQgaaWlzAAEViwABFhcAASG0BAI0cAAAAAQPAAEWSwABIbQAAAAAAAABdA8AATXgCYAPAAE77YAOb0gE+Ck7AAEWcwABFngAAg81dA8AATXgCYAPAAE77YAOb0gEWwABFoC6NBZl7mkNJwABFsyEcwABFuYDAAEW3wApvMYCMAQABKwDAAE38SsAARcIBgMAARcnACm8xP07AAEXVwABF2wAAjSBdA8AATXgCYAPAAE77YAOb0gEewABF4cAATX8AAmADwABO+2ADm9IAAE7AAEYMwABGFAAAjSFdA8AATUYBWwEewABGFppwAwAD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AQPAAGh6wABomwAAAAAAAABgA8AAStgBSsAAaH0BHMAAaIwewABofZmBAQABFsAAaIAujK6aoACImgEAASeAigDAAE6bBpqjXMAAaKDAAGizwABo4gEAjMIAAAABA8AAaLzAAGjiAAAAAAAAAGADnHABPgFKwABowgEewABoyZmGAQABFsAAaNMujMyZe5qcAAaapFzAAGjnwABpAMAAaT4BAIzDAAAAAQPAAGkJwABpPgAAAAAAAABdA8AATUYBYAOb5QE+AUrAAGkPAR7AAGkWmYgBAAEewABpJJmHAQABFsAAaS4ujMyZe5qcAAAGmqdcwABpQ8AAaVHAAGnAAwCAjAAAAAEDwABpU8AAacAAAAABAQHAAGlUAAAAgh1bAABgA8AAStgBPgFKwABpYQEiHMAAaXkWwABpbS6NMcAATgOAjAEAARbAAGmCgMAAaXzACpCajTHAAE4DAMAATfwAHMAAaakWwABpni6MzJl7mpyAjAEAARbAAGmygMAAaazACpCajMyZewAAwABN/AaapVzAAGnFwABpzcAAaewBAIIcAAAAAQPAAGnWwABp7AAAAAAAAABgA8AATKIBSsAAadkBFsAAaeQWwABp2S6MrpqgghzAAE8EAAAKjnsACo68AAqPbQAKj8kACpAVAAqQcwAKkRQACpFeAAAABwKaq1zAAGnxwABp98AAcwsDjWIAAAFgA5qZAAJgA5w4YAOaLQIEmq5cwABq28AAauEYjPmZewBgA5vSAASar1zAAGvtwABr+BiNY5l7AGADnBQBKwEFmshcwABqWcAAalnAAGrEAICKmXsAA8AAam7AAGrEAAAAAwMDwABqbwAAAIzOWwDAAGqBAAAAjK5gA8AATokAwABqkgAABIz5YAOb0gAAYAOaqwE/AggBmq6CAMAKkhgJAMAAaqiaqgIAAoDAAGqqwAqR/R7AAGq1mYIBAAGBwABquMAKkggAABIGmrFcwABq5cAAavvAAGueAQCMrQAAAAEDwABrAcAAa54AAAAAAAAAYAOb0gE+A07AAGsLwABrDQAAg/1gA5vSARbAAGsPLoz5mXuarknAAGsbIRzAAGshgMAAax/ACpKSgIwBAAErAMAATfxKwABrKgGAwABrMcAKkpI/SsAAazgBF8AAaz8ujPmZexbAAGuHJsAAa28AHsAAa0maxAEAARbAAGtj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+QAKxfwACsZSAArGnAAKxuYACscsAArHcAAAABoCm1lcwAChR8AAoU3AAKXwA42xAAABYAOamQABYAOcXAYEm1tcwAChrsAAobMJjK0AYAOb0gAEm1xcwAChwsAAocoJjLAAYAPAAErYAASbXVzAAKHZwACh4AmMyABgA8AAStgABJteXMAAoe/AAKH2CYzHAGADwABK2AAEm19cwACiBcAAohYJjLwAYAPAAErYAASbYVzAAKSXwACknBiISZl7AGADnBQAAQWbbVzAAKIbwACiG8AAotYAgIqZewADwACiLMAAotYAAAAICAjAAKItAAAAjM5bAMAAoj8AAACMrmADwABOiQDAAKJQAAAEjK1gA5vSAMAAolwAAASISWADnBQAwACibgAABIywYAPAAErYAMAAon0AAASMyGADwABK2ADAAKKLAAAEjMdgA8AAStgAwACimQAABIy8YAPAAErYAABgA5tZAT8HCAGbW4IAwArIywgBm2GDAMAKyNkIAZtchADACsjnCAGbXYUAwArI9wgBm16GAMAKyQcIAZtfhwDACskXCQDAAKK6mqoCAAKAwACivMAKyLAewACix5mCAQABgcAAosrACsi7AAAFBptjXMAAotvAAKLkwACjCAEAjLEAAAABA8AAou/AAKMIAAAAAAAAAGADwABK2AFKwACi8gElwACi+AAWwACi8i6MrZtbYAOb9QabZVzAAKMNwACjFsAApIcBAIz+mXsAAAABA8AAoyTAAKSHAAAAAAAAAGADwABPBwE+Ak7AAKMwwACjMgABg/1gA5vSARbAAKM0Loytm1tJwACjdSXAAKN7AIDAAKN5wArKEmADmjM+AUrAAKOUARbAAKOdFMAAo5vACsoSAAFgA5ozjP6Ze5o8ScAAo7clwACjvQCAwACju8AKyhJgA5sjPgFKwACj1wEWwACj4BTAAKPewArKEgABYAObI4z+mXubJknAAKP6JcAApAAAgMAAo/7ACsoSYAOa5j4BSsAApBsBFsAApCQUwACkIsAKyhIAAWADmuaM/pl7mvM+AT0wwACkRh/AAKRQwABMMAEAASTAAKR8AieNshbAAKR1Loytm1sABptmXMAApKDAAKSvwAClOQEAhdkAAAABA8AApLTAAKU5AAAAAAAAAGADnBQBPgNOwACkvsAApMAAAIrzYAOcFAEWwACkwi6ISZl7m2FJwACkzSEcwACk04DAAKTRwArLM4CMAQABKwDAAE38SsAApNwBgMAApOPACsszP0rAAKTqARfAAKTxLohJmXsewACk+ZmOAQABJsAApQUFHsAApQWbagIAAhbAAKUaLozMmXuanBbAAKUmLoz+mXubZQBgA8AATwcAm2EGm2hcwAClPsAApUXAAKWSAACA7wAAAAEDwAClTcAApZIAAAAAAAAAYAPAAE6JAUrAAKVZASTAAKWSAyeNsx7AAKV8m7sBAAEWwAClhC6MrpqgACeA8QabalzAAKWXwAClnsAApe4ABY20mXsBagBgA5QIlCcAAAEDwAClssAApe4AAAACAgLAAKWzAAAAjM5bAMAApb4AAACNRVsAAFsAAAAKyZUACsneAArLAwAKy8sACswhAArMawAAAAUCm25cwACl88AApfnAAKyRA422AAABYAObWQABYAOcZwcEm3FcwACmS8AAplQJhNGZewBgA8AATKIABJt2XMAApmPAAKZtCYzFAGADwABK2AAEm3dcwACmfMAApoMJjMYAYAPAAErYAASbclzAAKaSwACmpQmNt5l7AF0DwABNRgFbAASbc1zAAKjGwACo3BiNuJl7AGADwABN7wAEm3RcwACo78AAqPwYjbmZewBgA5vlASsEm3VcwACrJ8AAqywYiEmZewBgA5wUASsBBZuEXMAApqrAAKaqwACougCAipl7AAPAAKa8wACougAAAAkJCcAApsQAAACMzlsAwACm3AAAAIyuYAPAAE6JAMAApwAAAACMrWADm9IAwACnEgAABITRYAPAAEyiAMAApygAAASMxWADwABK2ADAAKc/AAAEjMZgA8AAStgAwACnUwAAAIzIYAPAAErYAMAAp2cAAASNuGADwABN7wDAAKeKAAAEjbddA8AATUYBWwAAYAObbgE/BggBm3GDAMAKzaMIAZt2hADACs2zCAGbd4UAwArNwwgBm3OHAMAKzeMIAZtyFADACs3zCAAJAMAAp62bbQgACIDAAKe8wArNeoHAAKfTwArNhYLAAKfrwArNlSsqhsAAqFjACs3TKioABwabeVzAAKkAwACpE8AAqcwBAIzKAAAAAQPAAKkgwACpzAAAAAAAAABgA5vlAT4DScAAqSYhFsAAqSsujMWbdj4BSsAAqT8BKz9JwACpVhzAAKloFsAAqVoujbmZe5t0gIwBAAErAJvrPgE9F8AAqXkujbmZex7AAKmJmYwBAAEWwACpkS6NuJl7m3MAm3Q/SsAAqbQBFsAAqbsujbmZe5t0Bpt6XMAAqdHAAKnawACqCwEAjMkAAAABA8AAqerAAKoLAAAAAAAAAGADwABK2AFKwACp7QEhHMAAqgQWwACp7S6NuJl7m3OAjAEAASsAwABN/Aabe1zAAKoQwACqI8AAqnoBAIzCAAAAAQPAAKoswACqegAAAAAAAABgA5xwAT4BPTDAAKoyH8AAqjzAAEwwAQABJ426AAabfFzAAKp/wACqmMAAqxcBAIzDAAAAAQPAAKqhwACrFwAAAAAAAABdA8AATUYBYAOb5QE+A07AAKqrwACqrQAAhIFdA8AATUYBWwEWwACqry6Nt5l7m3JJwACqyBzAAKrOgMAAqszACs/lgIwBAAErAMAATXBKwACq1wFqwACq3l0DwABNRgFgA5vlkfM/SsAAqvwBHsAAqwOZiAEAAYDAAKsRwArP5QAGm31cwACrMMAAqz/AAKveAQCF2QAAAAEDwACrRMAAq94AAAAAAAAAYAOcFAE+A07AAKtOwACrUAAAivNgA5wUARbAAKtSLohJmXubdUnAAKtdIRzAAKtjgMAAq2HACtCHgIwBAAErAMAATfxKwACrbAGAwACrc8AK0Ic/SsAAq3oBF8AAq4EuiEmZex7AAKuJmY4BAAEewACrnpuBAwADFsAAq7QujMyZe5qcFsAAq8AuhNGZe5txFsAAq8sujP6Ze5tlAACbdQabf1zAAKvjwACr6sAArCAAAIDvAAAAAQPAAKvywACsIAAAAAAAAABgA8AATokBSsAAq/gBJMAArCADJ427HsAArA+ZgQEAARbAAKwSLoyumqAAJ4DxBpuBXMAArCXAAKwxwACsjwAFjbyZewFqAGADlAiUMwAAAQPAAKxGwACsjwAAAAMDA8AArEcAAACMzFsAwACsUwAAAITRWwDAAKxeAAAAjUVbAABgA8AATwcAAAAKznYACs8XAArPaQAKz64ACtBXAArRHwAK0XUACtHPAAAABwKbhVzAAKyUwACsmsAAscUDjb4AAAFgA5vFAAJgA5wUYAOb0gEEm4dcwACs+sAArQQJjK4AYAPAAE77AAEFm51cwACtCcAArQnAAK1CAICKmXsAA8AArR3AAK1CAAAAAQEBwACtJQAAAIZNYAPAAE6JAABgA5uFAT8CCACbhx7AAK06mYIBAAGAwACtPcAK0lYACQHAAK0Jm8cAAAAAEQabiVzAAK1HwACtUMAArWIBAIy+AAAAAQPAAK1awACtYgAAAAAAAABgA8AAStgBSsAArV0BKgabilzAAK1mwACtb8AArYEBAIyxAAAAAQPAAK16wACtgQAAAAAAAABgA8AAStgBSsAArX0BKQabi1zAAK2GwACtnMAArakBAIytAAAAAQPAAK2iwACtqQAAAAAAAABgA5vSAUrAAK2lASsGm4xcwACtrsAArcHAAK3RAQCMwgAAAAEDwACtysAArdEAAAAAAAAAYAOccAFKwACtzQErBpuNXMAArdXAAK3uwACuEgEAjMMAAAABA8AArffAAK4SAAAAAAAAAF0DwABNRgFgA5vlAUrAAK36AWrAAK36XQPAAE1GAWADm+WR8wabjlzAAK4XwACuIMAArkoBAI0JAAAAAQPAAK4xwACuSgAAAAAAAABgA8AAStgBSsAArjQBHMAArj8WwACuNC6MrpuHgIwBAAFqwACuQmADwABO+5Q8AMAATwYGm49cwACuTsAArlfAAK7XAQCNCAAAAAEDwACuZcAArtcAAAAAAAAAYAPAAE8HAT4CScAArmscwACuehbAAK5vLoyum4eAjAEAAWrAAK59YAPAAE77lDwAwABPBkrAAK6HAS1bPz0wwACumx/AAK6lwABMMAEAASeNvwAGm5BcwACu3MAArvnAAK8mAQCNKAAAAAEDwACvB8AAryYAAAAAAAAAXQPAAE1GAWADnDgBSsAArwoBasAArwpdA8AATUYBYAOcOJI4BpuRXMAAryrAAK8/wACvZAEAjS4AAAABA8AAr03AAK9kAAAAAAAAAF0DwABNRgFgA5wUAUrAAK9QAWrAAK9QXQPAAE1GAWADnBSSPgabklzAAK9pwACvcsAAr48BAI0OAAAAAQPAAK+IwACvjwAAAAAAAABgA8AAStgBSsAAr4sBKQabk1zAAK+TwACvosAAr70BAI0sAAAAAQPAAK+2wACvvQAAAAAAAABgA5wUAUrAAK+5AS4Gm5RcwACvwsAAr83AAK/oAQCMvwAAAAEDwACv28AAr+gAAAAAAAAAYAPAAE77AUrAAK/eARbAAK/eLoyum4cGm5dcwACv7cAAr/vAALB7AwCAjAAAAAEDwACv/cAAsHsAAAABAQHAAK/+AAAAgh1bAABgA8AAStgBPgJJwACwCyElwACwFQCAwACwD8AK1fFgA5uFPgFKwACwNQEqP0rAALBNARzAALBkFsAAsFkujK6bh4CMAQABFsAAsG2AwACwZ8AK1fGMrgAAwABPBgablVzAALCAwACwiMAAsKcBAIIcAAAAAQPAALCRwACwpwAAAAAAAABgA8AATKIBSsAAsJQBFsAAsJ8WwACwlC6MrpuHghzAAE8EBpuYXMAAsKzAALCzwACw5AAAgO8AAAABA8AAsLvAALDkAAAAAAAAAGADwABOiQFKwACwwQEkwACw5AMnjcAewACw05mBAQABFsAAsNYujK6bhwAngPEGm5lcwACw6cAAsO7AALFSAACNMgAAAAEDwACw+cAAsVIAAAABAQHAALEFAAAAgh1gA5wUAABgA8AAStgBPgFKwACxEgEiHMAAsSQWwACxGS6MrpuHgIwBAAFqwACxJ2ADwABO+5Q8AMAATwYBJcAAsTkAgMAAsTPACtcgYAObhQabmlzAALFXwACxXMAAscMAAI0zAAAAAQPAALFqwACxwwAAAAEBAcAAsXYAAACCHWADnBQAAGADwABK2AE+AUrAALGDASIcwACxlRbAALGKLoyum4eAjAEAAWrAALGYYAPAAE77lDwAwABPBgElwACxqgCAwACxpMAK16BgA5uFAAAK0pMACtLJAArS/wAK0zMACtNnAArTswAK1A4ACtSJAArU1QAK1SEACtVXAArViwAK1coACtZZAArWowAK1vkACtd5AArX+QAAABECm55cwACxyMAAsc7AALmQA43BAAABYAPAAE3vAAADBJuhXMAAse/AALIZBI3CmXsAYAObtgEfwACyCpmoAAAAAASbolzAALShwAC0zwSNw5l7AF0DwABMgwFgA5ozAR/AALS5wABMlwEBYAOaMwEnjcQABJujXMAAtO7AALUdBI3FmXsAXQPAAEyDAWADnBQBH8AAtQjAAEyXAQFgA5wUASeNxgABBZuvAAAAAAQAAAMAAAAAAAAAAABgA5ueAT8BCQEAwABOBQAAAAAIBpulXMAAsh3AALIxwACybAABjccAAAABA8AAskTAALJsAAAAAAAAAGADm7YBPgFKwACyTQEawACyVJuhBpumXMAAsqLAALK4wACzTgABjcgAAAABA8AAsr/AALNOAAAAAQEBwACyyAAAAIzOWwAAYAOb5QE+AUrAALLZASMlwACy6gCAwACy4MAK2XZgA8AATJgfwACzBJosAQABFMAAsxXACtl2AAFgA8AATJgAH8AAsy6aHgEAAYDAALNAwArZdgABYAOaCAabqFzAALNTwACzZ8AAs7IABY3JmXsBagBgA5QIlEMAAAEDwACzfMAAs7IAAAABAQHAALOCAAAAgtJgA8AATwcAAGADmjMABpupXMAAs7bAALPIwAC0EQAFjcuZewFqAGADlAiUTwAAAQPAALPcwAC0EQAAAAEBAcAAs+IAAACC0mADwABPBwAAYAOcFAAGm6pcwAC0FcAAtCHAALR/AAWNzZl7AWoAYAOUCJRbAAABA8AAtDjAALR/AAAAAgICwAC0PgAAAILSYAPAAE8HAMAAtEMAAACNLlsAAGADwABPBwAGm6xcwAC1IsAAtTXAALZ0AAGNzwAAAAEDwAC1QcAAtnQAAAABAQHAALVHAAAAgtJgA8AATwcAAGADnCEBPgNOwAC1VsAAtWIAAI3QYAOaMwEcwAC1dRrAALVkm6KC0QEAAYDAALV2wAra4wDAAEyQScAAtYAcwAC1kIHAALWEwAra/ICMAQABKwCaZD4DPYnAALWhwAra/B7AALWvm6gBAAGAwAC1xcAK2uMAPRzAALXiGsAAtdGbooEMAgACgMAAtePACtrjgcAAterACtr8AMAATJFJwAC1/SEWwAC2DoHAALYCwAra/Iz6mXuaOT4BPRzAALY3GsAAtiSbo4EMAgACgMAAtjjACtrjgcAAtj/ACtr8AMAATJE/P0rAALZeAYHAALZlwAra/AabrVzAALZ5wAC2i8AAuFYAAY3RAAAAAQPAALaWwAC4VgAAAAIBAsAAtpwAAACC0mADwABPBwDAALatAAAAjS5dA8AATUYBYAPAAE8HAWoAYAHAAE2sAgBgA5wUAT4EScAAtsMhHMAAttWBwAC2x8AK3B6AjAEAASsAwABNcD4BPYjAALbmwArcDh7AALbsm6sCAAKAwAC2/cAK3A6BwAC3AsAK3B4AP07AALcgwAC3KwAAjdJgA5wUARzAALdAGsAAty2bo4LRAQABgMAAt0HACtwOAMAATJBJwAC3SxzAALdagsAAt0/ACtyQgIwBAAErAMAATfw+Az2KwAC3a8AK3JAewAC3eJupAQABgMAAt43ACtwOAD0cwAC3rBrAALeZm6OBDAIAAoDAALetwArcDoLAALe0wArckADAAEyRScAAt8YiJcAAt9UAgsAAt8rACtyQYAOaMwAhFsAAt/QUwAC36cAK3JACAWADmjOM+pl7mjk+AT0cwAC4GxrAALgKm6KBDAIAAoDAALgcwArcDhTAALgjwArckAIBYAOaMwDAAEyRPz9KwAC4QQGCwAC4SMAK3JAGm6tcwAC4W8AAuGfAALmOAAGN05l7AAAAAQPAALh3wAC5jgAAAAICAsAAuH0AAACC0mADwABPBwDAALiNAAAAjS5dA8AATUYBYAPAAE8HAABgA8AATwcBPgJJwAC4ohbAALi0gcAAuKbACt3XgOPAAE0oPgE9MMAAuMUfwAC4z8AAS9IDAAOBwAC448AK3dcnjS4njdQAP0rAALlAAR7AALlHm6oCAAKAwAC5X8AK3cccwAC5coHAALlkwArd14HKAQAAAYQPKsAATRoAAAAK2RMACtlPAArZ2gAK2iEACtpoAAravAAK2+cACt2eAAreawAAAAgCm7BdgQyBLIHHA43VAWqBDWADwABKnwMAAWADwABN7wAAAAACBpuzXYFBgUmBiQQBi1+ZewAAAAEDgWmBiQAAAAAAAABgA5uwAT4BPTCBcieLYAabtV2BjoGcgcUDBICMAWoAYAOUCJRnAAABA4GegcUAAAABAQGBnwAAAIIdWwAAYAPAAErYAAAACt65AAre5wAK3x0AAAACApu2W4w2jEWTlAeN1wFqjEVgA5P6JgABYAPAAE3vAAAAAQWbxAAAAAAEAAADAAAAAAAAAAAAYAObtgE/AQkBAMAATgUAAAAACQabuV6KeoqBitEABY3YmXsBagBgA5QIlHMAAAEDioyK0QAAAAICAoqUAAAAhk1gA8AATokAiqsAAACMmmADm7AAAFsABpu+W43Djd+N6AECjJkAAAABA43ojegAAAAAAAAAXQPAAE14AmADwABPCmADm/UABpu6XoZJhmCIVgAAjdoBaoZgYAOT+iYAAAEDhmuIVgAAAAEBAYZzAAAAgOpgA8AATvsAAGADm/UBPgROhoqGlQAAjdtdA8AATQQBYAOb9QEchrAWhqkWhp8ujJmbvoEBwABNm4GqAQABNIa2A4a2htwAAAABAQGGtwAAAIyaYAOb9QAAYAPAAErYAUqGvwEchs4WhsOBhr/ACuBijK6b1ICMAQABgIbRwArgEADAAE8GAMAATRBJhuMchvkWhvKBhufACuAngcjAAE0ngIwBAAGUAMAATcY+AUqHBwEWhxmBhw7ACuAngdfAAE0sP0mHKxyHQRaHOoGHL8AK4CeByMAATSeCjAEAAZQAwABN0j4CTodSh1cAAI3cXQPAAE1GAWADwABOiQEch4Uch2SBh1nACuAngasBAWADwABOiQE0h2gDh2iHgwAAAAEBAYdpAAAAjJpgA5v1AABgA8AATokBSodxARyHeRaHdYKHccAK4TmA65v3gO8AAAAAwABPMgDAAE0PgcoAAAAAwABNGj0wh5Ueh5/AAExtAQABJIeoBSeN3SeA8R6H3Zu7AQABgIflwArgEAAnjd6Ch/bACuD9AD89MIgIHogSwABMbQEAASSIUQMnjd8eiDqbuwEAAYCIQsAK4BAAJ4DxAAabv1uPQI9Sj1kBAohFAAAAAQOPWY9ZAAAAAAAAAGADm8gABpvAW4+Rj6CPqwECjJEAAAABA4+rj6sAAAAAAAAAYAOcFAAGm8Fbj+CP74/3AQKMkwAAAAEDj/eP9wAAAAAAAABgA5wUAAabwluQLZBMkFUBAoyVAWqQLmADlA2UfwAAAQOQVZBVAAAAAAAAAGADnBQABpu7XohbiHKI2QABiw4BaohyYAOT+iYAAAEDiHmI2QAAAAEBAYiBAAAAiw9gA8AATvsAAGADwABOiQE+AUqIjwEeiKaXqgEAASaIwgCAiLvACuKSYAOXmgAGm7xeiN6I9Yp1AAGN4QFqiPVgA5P6JgAAAQOI/op1AAAAAgECiQYAAACGTWADwABOiQCJGwAAAI0bYAOb9QFqAGABwABNrAIAYAPAAE77AT4DSYkrIiIhHIk4gYkwwAri+YCMAQABKwCb+wAhJYlLAIGJQ8AK4vlgA5rmASIiHIl4FolxgIlswAri64HIwABOjYKMAQABkwDAAE3SAByJiRyJhYCJgcAK4uuC0QEAAZMAwABOloCMAQABJ4CKAMAATpgAHImdgYmVwAri+YCMAQABKwCb+z4BPTCJsB+JusAAS9EBAAGBicjACuL5AD9JidwhHInogYngwAri+YCMAQABKwCb+z4BPYiJ+cAK4usmifkFHooAm7kCAAKAigzACuLrJoouBRaKLiaKGwCBihPACuL5YAOa5ozMmXuZ+2ADm7AAYAPAAE6JP0qKRQEfilCXrwEAAYCKbMAK4usAAAAK33cACt+7AArf6wAK4dgACuH7AAriHgAK4kEACuJtAArixgAK5CYAAAAJApvFW5sLmxqbIgeN4gAAAWADwABN7wAAAAEFm8cAAAAABAAAAwAAAAAAAAAAAGADm8UBPwEJAQDAAE4FAAAAAAAAAArklAAAAAACm8hbm1ibZ6DGB43jAAABYAPAAE3vAAFgA5vFAAEFm9EAAAAABAAAAwAAAAAAAAAAAGADm8gBPwEJAQDAAE4FAAAAAAUGm8pbm96b6ZvyAQKLwAAAAAEDm/Kb8gAAAAAAAABgA8AATokABpvLW5xEnE2cVgECjKYAAAABA5xWnFYAAAAAAAAAYAPAAErYAAabzFucmJyqnLUBAoylAAAAAQOctZy1AAAAAAAAAGADm/UABpvOW53jnfGd+gMCgIwAAAABA53znfoAAAABAQGd9AAAAIIdWwAAYAPAAErYAAabz1ugnqC0oMQAAoyoAAAAAQOgu6DEAAAAAQEBoMAAAACA62ADwABPCgAAXQOBIgFgA5v1AAAACuTiAArlBwAK5SwACuVPAArlfQAK5bMAAAAFApvSW6EboSq0nweN5AAAAWADwABN7wABYAObxQABBZvcAAAAAAQAAAMAAAAAAAAAAABgA5vSAT8BCQEAwABOBQAAAAAHBpvUW6JgomuidQECjK4AAAABA6J1onUAAAAAAAAAYAPAAE77AAab1Vul4aXspfkBAoy/AAAAAQOl+aX5AAAAAAAAAGADwABO+wAGm9ZbqUGpV6lcAQKMrQAAAAEDqVypXAAAAAAAAABgA5vSAAab11uqXqpnqnABAoy+AAAAAQOqcKpwAAAAAAAAAGADwABK2AAGm9hbqwKrC6sVAQKMsQAAAAEDqxWrFQAAAAAAAABgA8AAStgABpvZW7GtscCxyAECjMIAAAABA7HIscgAAAAAAAAAYAOccAAGm9pbtHy0lbSdAQKMwwAAAAEDtJ20nQAAAAAAAABdA8AATUYBYAOb5QAAAArmFQAK5joACuZfAArmggAK5qcACubMAArm7wAK5xkAAAAHApvdW7ZXtmbAAEhQB43lAAABYAPAAE3vAAFgA5vFAAEFm+QAAAAABAAAAwAAAAAAAAAAAGADm90BPwEJAQDAAE4FAAAAAAQGm99buqm6uLshAAKM1QAAAAEDur67IQAAAAMCA7rGAAAAjNZgA8AATvsAuuAAAACM110DwABNRgFbALsRAAAAjNhdA8AATXgCYAPAAE77WwFqAGABwABNrAIAYAOb5QAGm+BbwABBrcAAQbzAAEHWAAKM3wAAAAEDwABBxMAAQdYAAAABAQHAAEHMAAAAjeZgA8AATvsAAGADm+UABpvhW8AARZvAAEWqwABF0wACjOAAAAABA8AARbLAAEXTAAAAAgICwABFugAAAI3mYAPAAE77AMAARc0AAAAiWwAAYAOb5QAGm+JbwABIL8AASC/AAEhOAAKM4QAAAAEDwABIN8AASE4AAAABAQHAAEhDAAAAjOJgA8AATNoAAFsAAAAK54UACuflAAroIgAK6GkACuijAAAABAKb5VvAAEiiwABIscAAToIHjecAAAFgA8AATe8AAWADm90AAQWb7QAAAAAEAAADAAAAAAAAAAAAYAOb5QE/AQkBAMAATgUAAAAABAab51vAAEnPwABJ38AASeMBAoXZAAAAAQPAAEnjwABJ4wAAAAAAAABgA5whAAab6FvAAEu7wABLxMAAS9ABAozoAAAAAQPAAEvQwABL0AAAAAAAAABgA8AAStgABpvpW8AATNrAAEzmwABM7wECjM4AAAABA8AATO/AAEzvAAAAAAAAAFsABpvrW8AATmnAAE53wABOgAMCgIwAAAABA8AATnnAAE6AAAAAAQEBwABOegAAAIIdWwAAYAPAAErYAAAACukHAArpNAAK6WMACumNAArpxwAAAAQCm+5bwABPHMAATyvAAFbJB43oAAABYAPAAE3vAAFgA5vlAAEFm/QAAAAABAAAAwAAAAAAAAAAAGADm+4BPwEJAQDAAE4FAAAAAAIGm/BbwABS/MAAUw3AAFMVAQKCvAAAAAEDwABTFcAAUxUAAAAAAAAAYAOcRQAGm/JbwABWY8AAVnLAAFbHAAKM8QAAAAEDwABWd8AAVscAAAACAQLAAFaGAAAAjNddA8AATUYBWwDAAFa3AAAAjNhdA8AATXgCYAPAAE77WwFqAGABwABNrAIAYAOb5QAAAArqKwAK6lgACuq4AAAAAgKb9VvAAFdbwABXasAAWwwHjekAAAFgA8AATe8AAmADm9Jg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G2EDAWADwABMomADwABK2AABnzwAACCB2WEDAGADwABMogFqAGABwABNrAJgA8AATKIBPgdOn1GfWAAAgOZbAStOn2mfdwAAhBRgA8AAStgBKk6fiJ+MAACOH2ADwABMogEWn5MugcjAAE12RZ+fAZ+on6oAAINmYAPAAEyiAZMBHJ+xhZ+vwAsjnIC7AQABhJ+zwAsjfwDAAE3QAY2fusALI5wcn7iFn7rACyOcgQ0BAAGUAMAATcg+Ak6fyZ/RAACBvGADwABMogEcn9cugtEBAAGFn9jACyOcAMAATVVJn+Icn+qAn+bACyMmbgEAAYaf68ALI+gAAD4DSZ//g6ADwAsjbj4BPTCgHh6gOZb9AAAAAD89iqBWwAsjYoagX8ALI+g9i6BwwAsjbik/SaCYg6CcwAsjbkqgqwEmoKsFgqCywAsjYmADwABMoj9JoL4hHKDJgaDCwAsjPoCMAQABKwDAAE38SqDSARyg34Gg2cALIz5uAAAAAAA/PTCg5x6hApb8AAAAAAac2GChFqEaoUsAAIHcAAAAAQOhI6FLAAAAAQEBoSgAAACB3WADwABMogAAYAPAAEyiAT4BSqE1ARyhQC6C0QEAAYChQcALJNMAwABNVQac2WChUKFVoa0AAICCAAAAAQOhWKGtAAAAAQEBoV0AACAiYAPAAEyiAABcAT4BPTChah+hdMAATDABAAEnisUABpzaYKGyobeiHAAAg2sAAAABA6G9ohwAAAABAQGhzAAAICJdA8AATQQBYAPAAEyiAABcAT4BPTCh2R+h48AATDABAAEnisUABpzbYKIhoiaikQAAhHQAAAABA6IsopEAAAACAgKiMQAAAIHdYAPAAEyiAKI8AAAgImADwABMogAAXAE+AT0wokkfolPAAEwwAQABJ44gAAac3GCilqKboxQAAIR2AAAAAQOipKMUAAAAAgICoqkAAACB3WADwABMogCivgAAIIEBXQPAAE0EAWADwABMogAAXAE+AT0woswfotbAAEwwAQABJ44gAAac3WCjGaMeo3gAAIRZAAAAAQOjIqN4AAAAAQABoygAAACEWmEDAmADwABMomADwABMomADwABMogFqAGABwABNrAIAXAE+AT0eo0uXkgIBYAPAAEyiAi41o1YAAAEAYQMCYAPAAEyiYAPAAEyiYAPAAEyiAYCjVsALJlAj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TVYAAAsPLQALD1IACw93AAsPmgALD+IACxA+AAsQjgALEQEACxGLAAsSoAALE+IACxUEAAsV2QALFyQACxeBAAsX1wALGDUACxiLAAsY6QALGSkACxlvAAsaBwALGkcACxqtAAsa7wALG7EACxzhAAsd3wALHkgACx64AAsfkgALIGsACyGyAAsjCQALJLYACyUEAAslRQALJY0ACyXcAAsmMwALJwEACyhIAAsptAALKe0ACyo0AAsqfwALKsoACystAAsrpwALLDMACyzQAAstugAAADMCnOlgqieqLbR/R44hAAEAAASOIl0DwABNRgFgA8AATKIBXQPAAE1GAWADwABMogFgA5yyAAFdA8AATUYBYAPAAEyiAAADBpzsYKqNqpmqsAACjiOchgAAAAEDqqSqsAAAAAEBAaqpAAAAgchgA8AATKIAAF8DAAAABpztYKq1qrqzfwAAhFgAAAABA6rCs38AAAAEAwSqxwAAAG1gA8AATKIAqtIAAACEVGADwABMogCq5QAAIILAXQPAAE0EAWADwABMogCq8AAAAIRnYAPAAEyiAWqq/GADwABMohoAXAE+C0mrGyIiHKshk4KMAQABgKsjwAsvJQDAAE3SARyrMoCrLMALLyWCjAEAAYGrNMALLzIAwABN0gEcqz+BqzvACy8ygowBAAEWq0EugcjAAE12AMAATdI+Aj0eq1zAAEvfAwADgKtswAsvJYGrc8ALLzIWq3gugcjAAE12AEAqq6CrpQA/SauyHKvAg6u2wAsvVYC7AQABkwDAAE3QPgE9MKvNH6vewABL6AQABIOr5MALL1WTKyeEZwA/TqwXrB0AAYGbYAPAAEyiARysI4GsH8ALLzKBBgEAAYCsJcALLyUAwABNyUmsMBysThysQRasOoKsNcALL0CByMAATSeBBgEAAYOsQ8ALL1UAwABNyYC7AQABhKxQwAswLADAAE3QPgE9MKxfHqx6lv4AAAAAP0msjxysmYSsk8ALMCyAjAEAAZMAwABNxkqsnwA/SaysJay1AIKssMALL0BgA5ydPgJOrTytTAABjiRgA5ydASatUwCCrU7ACy9AYAOcnUmtbBytiBatdS6OFJy0gIwBAAEWrZuFrYvACzDTjhScoADAAE3GPgFJrbkiHK3EhK2+wAswLIC7AQABNwoAwABN0AAhHK3lFq3eha3OwAsw04HBnKKAjAEAARat7S6BwZy2AJ3uPgI9Hq4Ik+oFAAUmrhIAgq4NwAsvQF0DwABNRgFgA8AATKKDriDACy9VLoCuMcALLyWErjjACzAsAEquSgBJrmEcrncWrnEWrmougcGctoOknIad5o4WnIYGAAYcrqkcrpSAro7ACy8lg8YBAAEWrpYujhSctADAAE3KgQ0BAAEWrrAuhp2ctQDAAE3IHK7RhK7LwAswLIPGAQABFq7TLo4UnLQAwABNyhavChavA4Wu88ALMNOBwZyig6Schp3mHK88HK8ng68dwAsvVYPGAQABFq8pLo4UnLQAwABNyoENAQABFq9Oha8+wAsw04adnKEAwABNyB6vcZP3AQABLgAer5KT9wEAAYKvmMALL0AAAJytPgFKr6wAP0mvyxyv5hav34Wvz8ALMNOBwZyigIwBAAEWr+4ugcGctgCd7j4FTrDEsM8AAY4lXQPAAE1GAWADwABMogEmsNYAgrDRwAsvQF0DwABNRgFgA8AATKJOsPKw/QABjiZfAwAAARyw/y6OI5yGAQABhLELwAswLACc7EWxGwGxJLEmAACDZmADwABMogGTARyxLRSxK8ALMusIAIC7AQABhLEvwAswLADAAE3QARWxNsALMusIHLE3FLE2wAsy6wgAgQ0BAAGUAMAATcg+AT0csVGHsUfACzLFgQwCAAIUsVLACzLrCAAcsWGGsVfACzKWgtEBAAEcsWyDsWLACy9VgQ0BAAEUsW7ACzLrCAAAwABNyADAAE1VAMAATVZFsYQBsY2xjwAAg2ZgA8AATKIBgLGRwAsvJQEcsZoUsZjACzOOCACAuwEAAYGxnMALLzIAwABN0AEVsaHACzOOCByxohSxocALM44IAIENAQABlADAAE3IPgE9HLG2LoEMAgACFLG3wAszjggAHLHGh7G8wAsyxYLRAQABHLHJFLHHwAszjggAgQYBAAGAscvACy8lAMAATckAwABNVQDAAE1WSrHlAD8/TrIFAAAAhGhdA8AATUYBWwBOshgAAACEaWADwABMogBJsiglsjEAgrIswAsvQF0DwABNRgFgA8AATKI+Aj2NskfACzQ0FLJTwAsvQAIBXQPAAE1GAWADwABMoj2Osl/ACzRFg7JswAsvVT4CPY2yisALNDQcsqscspuCspbACy9AgdEBAAGDsqDACy9V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H2ADwABLUAA1uSoAAAEAXAEXuSqCuR/ACzuygciBuTPACzt3wABNdDW5RwAAAQBcARy5R4K5H8ALO7KEWAMAA5MWuVgugcjAAE12LgDAAE1rNbluAAABAFwBHLlugrkfwAs7soRYAwADFrl8LoHIwABNdoG5hMALO3eAuZHACztQAMAATWuCuR/ACzuyBp0AYLmguaW6RAAAgcQAAAABA7mtukQAAAABAQG5tQAAAIG8YAPAAE3vAABgA8AAStgBPgNOuci5zAAAjh9gA8AATKIBFrnTLoHIwABNdkW53wG56LnqAACDZmADwABMogGTARy58YK578ALPKiAuwEAAYG588ALPIsAwABN0AGKufrACzyoHLn4grn6wAs8qIENAQABlADAAE3IPgFJugUcuhEcug0ugtEBAAGCug7ACzyoAMAATVWAjAEAAYC6FMALPHIAwABNxkq6HQEpP0q6NAEqBp0BYLpJuk67NwAAhFwAAAABA7pVuzcAAAABAAG6XgAAAIRdYAOZQQFqAGABwABNrAIAXAE+Az0jHLp0gLptwAs9R4CMAQABKwDAAE38iLptwAs9Rx66fJlDAAAAACsBYAOZQU66jrqQAACDZmADwABMogEWupcugcjAAE12Q7qjHLqsgbqqwAs9j4KMAQABlADAAE3SPgVOur26wQAAgQtgA8AATKIBHLrKgLrDwAs9R4ReAQABgbrSwAs9jwCZRj2JutzACz2PHLregbrcwAs9j4EGAQABlADAAE3JTrruuvIAAIRfYAPAAEtQARy6+C6C0QEAAYG6+cALPY8AwABNVT0cuwcugQwCAAKBuwjACz2PHLsRLoLRAQABgrsSwAs9wwDAAE1VAMAATVY9HLsiLoEMAgACgrsjwAs9w4O7KsALPgkAwABNVgadAmC7PLtNu5YAAIGqAAAAAQO7UruWAAAAAQEBu1gAAABQYQMBYAPAAEtQYAPAAErYAABdA8AATQQBYAPAAEtQAUq7dAEfu3iWEQIBYAPAAEtQAi6Au5TACz6SAAadA2C7m7usu+IAAIHPAAAAAQO7sLviAAAAAQEBu7UAAACEE2ADwABMogAAXQPAAE0EAWADwABLUAFKu7sBH7u/lcwDAWADwABLUAMuk4C74MALPu8ABp0EYLvnu/i8TwAAgdAAAAABA7wBvE8AAAABAQG8BwAAAIEbYQMBYAPAAEtQYAPAAErYAABdA8AATQQBYAPAAEtQAUq8JgEfvCqWVwIBYAPAAEtQAi6AvErACz9FAAadBWC8VLxlvJ4AAIHRAAAAAQO8abyeAAAAAQEBvG4AAACEE2ADwABMogAAXQPAAE0EAWADwABLUAFKvHQBH7x4lcwDAWADwABLUAMugLyWwAs/oysABp0GYLyjvLS9CwAAgdIAAAABA7y9vQsAAAABAQG8wwAAAIEbYQMBYAPAAEtQYAPAAErYAABdA8AATQQBYAPAAEtQAUq84gEfvOaWjwIBYAPAAEtQAi6AvQbACz/5AAac9GC9EL0lvVcBAIR5AAAAAQO9Lr1XAAAAAAAAAF0DwABNBAFgA8AAS1ABSr0xAR+9NZd9AQFgA8AAS1ABLgAGnQdgvVy9bb2VAACEYAAAAAEDvXK9lQAAAAAAAABdA8AATXgCYAPAAEyiYAPAAEtQAUq9eAEfvXyXcwEBYAPAAEtQAS4ABp0IYL2avau+QQAAhGMAAAABA72zvkEAAAACAQK9uAAAAG1gA8AATKIAvcQAAACEVGADwABMogFqAGABwABNrAIAXQPAAE0EAWADwABLUAE+Aj0evdvAAEvfAwADgL3rwAtA3YG98sALQOoWvfwugcjAAE12AEq+CQEfvhSVzAMBYAPAAEtQAy6AvjLAC0Ddgb45wAtA6gAGnPVgvka+W76LAQCBCAAAAAEDvmS+iwAAAAAAAABdA8AATT8BYAPAAEtQAUq+ZwEfvmunTQEBYAPAAEtQAS4ABp0JYL6Qvp2++wAAgcoAAAABA76jvvsAAAABAAABvqoAAACED2ADwABK2AFqvrRgA8AAStiD+10DwABNRgFgA8AAS1ABPgFKvsEBHr7MwABNTAIBYAPAAEtQAS4BhA+Avu7AC0G2Bp0KYL8Avwy/PwAAgcsAAAABA78Rvz8AAAAAAAAAXQPAAE46AWADwABLUAE+AUq/GgEevyWJYgEBYAPAAEtQAS4ABp0LYL9Ev0m/xAAAgRIAAAABA79Qv8QAAAABAQG/VgAAAFBhAwFgA8AAS1BcAABcAT4CTr9zv3cAAI4fYAPAAEyiARa/fi6ByMAATXZFv4oBv5O/lQAAg2ZgA8AATKIBkwEcv5yCv5rAC0KRgLsBAAGBv57AC0J0AMAATdABir+jwAtCkRy/pIK/o8ALQpGBDQEAAZQAwABNyD4BPRy/sYC/sMALQl1uAQABHL+2LoLRAQABgr+3wAtCkQDAAE1VAAAGnQxgv8m/0MAAQNoAAIG5AAAAAQO/1sAAQNoAAAABAQG/3gAAIIG6YQMCYAPAAEtQYAPAAEtQYAPAAEtQAABgA8AAS1ABPgVOwABAD8AAQBMAAI4fYAPAAEyiARbAAEAaLoHIwABNdknAAEAmHMAAQC6BwABAKsALQ0uAjAEAAZMAwABNxj0wwABANB7AAEBPlvwAAAAAP07AAEBkwABAagAAImADwABLUAEcwABAcC6C0QEAAZMAwABNVUXAAEB5AcAAQILAAECEAACDZmADwABMogGUARzAAECLg8AAQInAC0PEgLsBAAGBwABAjcALQ0sAwABN0AGLwABAlMALQ8QcwABAkoPAAECUwAtDxIENAQABlADAAE3IPgE9isAAQJ/AC0ObHMAAQK6AwABAp8ALQyNuAgACgsAAQK/AC0ObHMAAQLougtEBAAGDwABAu8ALQ8QAwABNVQAASsAAQMoBgsAAQNHAC0ObBp0NYMAAQN/AAEDhwABBuwAAgb0AAAABA8AAQOjAAEG7AAABAAAEIWADwABN7wFbAgICwABA6wAAAIG+XwMAAADAAED7AAAAgbphAwJfAwAAYAPAAEtQXwMAAAAAXwMAAAE+A07AAEEuwABBMgAAjh9gA8AATKIBFsAAQTkugcjAAE12RcAAQUUBwABBTsAAQVAAAINmYAPAAEyiAZMBHMAAQVeDwABBVcALRPiAuwEAAYLAAEFZwAtE0wDAAE3QAYvAAEFgwAtE+BzAAEFeg8AAQWDAC0T4gQ0BAAGUAMAATcg+AT2IwABBa8ALRKEcwABBgYHAAEF6wAtEr24CAAKAwABBgsALRKEcwABBlC6C0QEAAYPAAEGVwAtE+ADAAE1VAABKwABBpAGAwABBq8ALRKEGnQ5gwABBwMAAQczAAEIXAACBqwAAAAEDwABB0sAAQhcAAAEAAAQhYAPAAE3vAVsBAQHAAEHVAAAAUGEDAWADwABLUF8DAAAAAF0DwABNBAFfAwAAAUrAAEHxAR7AAEH1leACAmADwABLUF8DAAACLoDAAEIVwAtF1QAGnQ9gwABCHMAAQijAAEKAAACBswAAAAEDwABCMcAAQoAAAAEAAAQhYAPAAE3vAVsBAQHAAEI+AAAAUGEDAWADwABLUF0DwABNBAFfAwAAAABdA8AATQQBXwMAAAFKwABCWgEfwABCXpYlAgJgA8AAS1BfAwAAAi6AwABCfsALRlAABp0QYMAAQoXAAEKKwABDJwAAgccAAAABA8AAQo/AAEMnAAAAAQEBwABClQAAAFBhAwFgA8AAS1BgA8AAStgAAGADwABK2AE+A07AAEKywABCtgAAjh9gA8AATKIBFsAAQr0ugcjAAE12RcAAQskBwABC0sAAQtQAAINmYAPAAEyiAZMBHMAAQtuCwABC2cALRw6AuwEAAYHAAELdwAtG6QDAAE3QAYrAAELkwAtHDhzAAELigsAAQuTAC0cOgQ0BAAGUAMAATcg+AUnAAELvIRzAAEL1gMAAQvTAC0bGbgEAARzAAEL6LoLRAQABgsAAQvvAC0cOAMAATVUAAErAAEMAASo/SsAAQxgBKQadEWDAAEMswABDMcAAQ8sAAIEOAAAAAQPAAEM0wABDywAAAAEBAcAAQzoAAABQYQMBYAPAAEtQYAPAAErYAABgA8AAStgBPgNOwABDV8AAQ1sAAI4fYAPAAEyiARbAAENiLoHIwABNdkXAAENuAcAAQ3fAAEN5AACDZmADwABMogGTARzAAEOAgsAAQ37AC0gagLsBAAGBwABDgsALR/UAwABN0AGKwABDicALSBocwABDh4LAAEOJwAtIGoENAQABlADAAE3IPgFJwABDlBzAAEOZgMAAQ5jAC0fSbgEAARzAAEOeLoLRAQABgsAAQ5/AC0gaAMAATVUAAErAAEOkASk/SsAAQ7sBKgadEmDAAEPQwABD18AARPQAAIHYAAAAAQPAAEPhwABE9AAAAAIBAcAAQ+cAAACBG2EDAWADwABLUGADwABK2AABwABEBQAAIIHZYQMAYAPAAEtQAWoAYAHAAE2sAmADwABLUAE+BE7AAEQawABEHgAAjh9gA8AATKIBFsAARCUugcjAAE12RcAARDEBwABEOsAARDwAAINmYAPAAEyiAZMBHMAAREODwABEQcALSUKAuwEAAYLAAERFwAtJHQDAAE3QAYvAAERMwAtJQhzAAERKg8AAREzAC0lCgQ0BAAGUAMAATcg+Ak7AAERbwABEYwAAgbxgA8AAS1ABHMAARGkugtEBAAGDwABEasALSUIAwABNVUnAAER0HMAARHyAwABEeMALSN1uAQABhMAARH3AC0meAABKwABEhwGEwABEjsALSZ4/ScAARKEhHMAARKyBwABEpcALSPeAjAEAASsAwABN/ErAAES1ARzAAETCgcAARLzAC0j3bgAAAAAAPz0wwABEyh7AAETllvwAAAAABp0TYMAARPnAAEUAwABGMwAAgdoAAAABA8AARQnAAEYzAAAAAgEBwABFDwAAAIEbYQMBYAPAAEtQYAPAAErYAAHAAEUtAAAggdlhAwBgA8AAS1ABagBgAcAATawCYAPAAEtQAT4ETsAARULAAEVGAACOH2ADwABMogEWwABFTS6ByMAATXZFwABFWQHAAEViwABFZAAAg2ZgA8AATKIBHMAARWqCwABFZsALSq6BBgEAAZQAwABNyQEcwABFcYPAAEVvwAtK04FeAQABkwDAAE3TAYvAAEV5wAtK0xzAAEV3g8AARXnAC0rTgQYBAAGUAMAATck+Ak7AAEWIwABFkAAAgbxgA8AAS1ABHMAARZYugtEBAAGDwABFl8ALStMAwABNVUnAAEWhHMAARamAwABFpcALSm5uAQABhMAARarAC0s/AAA+AUrAAEW+AYTAAEXFwAtLPz9JwABF4CEcwABF64HAAEXkwAtKiICMAQABKwDAAE38SsAARfQBHMAARgGBwABF+8ALSohuAAAAAAA/PTDAAEYJHsAARiSW/AAAAAAGnRRgwABGOMAARj/AAEhDAACB2wAAAAEDwABGSsAASEMAAAACAQHAAEZQAAAAgRthAwFgA8AAS1BgA8AAStgAAcAARm4AACCB2WEDAGADwABLUAFqAGABwABNrAJgA8AAS1ABPgdOwABGg8AARooAAIDmWwErTsAARpvAAEapAACEFGADwABK2AEqTsAARrrAAEa+AACOH2ADwABMogEWwABGxS6ByMAATXZFwABG0QHAAEbawABG3AAAg2ZgA8AATKIBkwEcwABG44XAAEbhwAtMm4C7AQABhMAARuXAC0x2AMAATdABjcAARuzAC0ybHMAARuqFwABG7MALTJuBDQEAAZQAwABNyD4CTsAARvvAAEcDAACBvGADwABLUAEcwABHCS6C0QEAAYXAAEcKwAtMmwDAAE1VScAARxQcwABHHIDAAEcYwAtMEW4BAAGGwABHHcALTPcAAD4DScAARzGDwABHNcALTGE+AT0wwABHUB7AAEdrlv0AAAAAPz2KwABHiMALTFGGwABHkcALTPc9i8AAR6LAC0xhKT9JwABHyoPAAEfOwAtMYUrAAEfdASbAAEfdBYLAAEfkwAtMUWADwABLUD9JwABH8CEcwABH+4HAAEf0wAtMK4CMAQABKwDAAE38SsAASAQBHMAASBGBwABIC8ALTCtuAAAAAAA/PTDAAEgZHsAASDSW/AAAAAAGnRVgwABISMAASE/AAEiAAACB3AAAAAEDwABIWMAASIAAAAABAQHAAEhdAAAAgd1gA8AATKIAAGADwABLUAE+AUrAAEhqARzAAEh1LoLRAQABgMAASHbAC04kAMAATVUGnRZgwABIhcAASIrAAEjlAACAggAAAAEDwABIjcAASOUAAAABAQHAAEiVAAAgImADwABLUAAAXAE+AT0wwABIoh/AAEiswABMMAEAASeKxQAGnRdgwABI6sAASO/AAElXAACDawAAAAEDwABI9cAASVcAAAABAQHAAEkHAAAgIl0DwABNBAFgA8AAS1AAAFwBPgE9MMAASRQfwABJHsAATDABAAEnisUABp0YYMAASVzAAElhwABJzwAAhHQAAAABA8AASWfAAEnPAAAAAgICwABJbAAAAIHdYAPAAEyiAMAASXoAACAiYAPAAEtQAABcAT4BPTDAAEmHH8AASZHAAEwwAQABJ44gAAadGWDAAEnUwABJ2cAASlUAAIR2AAAAAQPAAEniwABKVQAAAAICAsAASecAAACB3WADwABMogDAAEn/AAAggQFdA8AATQQBYAPAAEtQAABcAT4BPTDAAEoNH8AAShfAAEwwAQABJ44gAAadGmDAAEpawABKX8AASr8AAIRZAAAAAQPAAEpjwABKvwAAAAEAAcAASmkAAACEWmEDAmADwABLUGADwABLUGADwABMogFqAGABwABNrAIAXAE+AT0ewABKkpeSAgFgA8AAS1ACLjXAAEqdAAABAGEDAmADwABLUGADwABLUGADwABMogGAwABKncALT/cjHMAASp2BwABKncALUDeAjAEAASsAwABN/GrAAEqzYQMCXQPAAErkAVtdA8AASuQBW2ADwABMooQlgcAASp3AC1A3AWEDAmADwABLUGADwABLUGADwABMogAGnRtgwABKxMAASsjAAEvGAACEcAAAAAEDwABKz8AAS8YAAAACAQLAAErXAAAggbxgA8AAS1AAwABK5QAAAG1gA8AATKIBasAASu1gA8AATKIaAGADwABMogE+A0nAAEr3HMAASwGBwABK+8ALUO+BXgEAARbAAEsJLoHIwABNdgDAAE3TPgFKwABLGQEcwABLIJSD6wAAAADAAEzFScAASy8cwABLOYHAAEszwAtQ74C7AQABkwDAAE3QPgE9icAAS0bAC1Dvkz9FwABLWwHAAEtkwABLZgAAg2ZgA8AATKIBgcAAS2jAC1DvARzAAEtxgsAAS2/AC1GHgLsBAAEWwABLeC6ByMAATXYAwABN0AGKwABLgMALUYccwABLgYLAAEuAwAtRh4ENAQABlADAAE3IPgFJwABLjRzAAEuZHMAAS5UugtEBAAGCwABLlsALUYcAwABNVYCMAQABgMAAS5zAC1DfAMAATcZKwABLpQGCwABLrMALUYc/SsAAS7kBHMAAS8CUg+sAAAAAwABMxQadHGDAAEvLwABLz8AATOoAAIRyAAAAAQPAAEvawABM6gAAAAIBAsAAS+IAACCBvGADwABLUADAAEvwAAAAbWADwABMogFqwABL+GABwABNrAIAYAPAAEyiAT4DScAATAUiHMAATA+BwABMCcALUoCAjAEAASsAwABNxgEcwABMIIHAAEwawAtSgIFeAQABFsAATCgugcjAAE12AMAATdM+AT2JwABMOMALUoAcwABMTBbAAExFLoHIwABNdoEGAQABlADAAE3JScAATFwcwABMZoHAAExgwAtSgIC7AQABkwDAAE3QPgFKwABMcwEcwABMepSD6wAAAADAAEzFP0XAAEyIAcAATJHAAEyTAACDZmADwABMogGBwABMlcALUoABHMAATJ6CwABMnMALU06BXgEAAZMAwABN0wGKwABMpMALU04cwABMpYLAAEykwAtTToEGAQABlADAAE3JPgFJwABMsRzAAEy9HMAATLkugtEBAAGCwABMusALU04AwABNVYCMAQABgMAATMDAC1JwAMAATcZKwABMyQGCwABM0MALU04/SsAATN0BHMAATOSUg+sAAAAAwABMxQadHWDAAEzvwABM9sAATVEAAIQvAAAAAQPAAE0AwABNUQAAAAAAAABgA8AAS1ABPgE9MMAATQkfwABNE8AATDABAAEniscABp0eYMAATVbAAE1dwABNvwAAhHUAAAAB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+RbAAGbzFsAAZuwugcGdMIOknIad5o4WnIYGAAYcwABnKxzAAGcWgMAAZxDAC22Gg8YBAAEWwABnGC6OFJ0uAMAATcqBDQEAARbAAGcyLoadnS8AwABNyBzAAGdThMAAZ03AC26/g8YBAAEWwABnVS6OFJ0uAMAATcoWwABnjBbAAGeFhcAAZ3XAC2+QgcGcooOknIad5hzAAGe+HMAAZ6mDwABnn8ALbbqDxgEAARbAAGerLo4UnS4AwABNyoENAQABFsAAZ9CFwABnwMALb5CGnZyhAMAATcgewABn85P3AQABLgAewABoFJP3AQABgsAAaBrAC22lAACcrT4BSsAAaC4AP0nAAGhNHMAAaGgWwABoYYXAAGhRwAtvkIHBnKKAjAEAARbAAGhwLoHBnTAAne4+BU7AAGlGwABpUQABjiVdA8AATUYBYAOsnQEmwABpWACCwABpU8ALbaVdA8AATUYBYAOsnU7AAGl6wABphQABjiZgA6x8ARzAAGmHLo4jnIYBAAGEwABpk8ALbr8AnThFwABpowHAAGmswABprgAAg2ZgA8AATKIBkwEcwABptRTAAGmzwAtyHggAgLsBAAGEwABpt8ALbr8AwABN0AEVwABpvsALch4IHMAAab8UwABpvsALch4IAIENAQABlADAAE3IPgE9HMAAadmHwABpz8ALce6BDAIAAhTAAGnawAtyHggAHMAAaemGwABp38ALcbuC0QEAARzAAGn0g8AAaerAC226gQ0BAAEUwABp9sALch4IAADAAE3IAMAATVUAwABNVkXAAGoMAcAAahXAAGoXAACDZmADwABMogGAwABqGcALbYYBHMAAaiIUwABqIMALcuMIAIC7AQABgcAAaiTAC22VAMAATdABFcAAainAC3LjCBzAAGoqFMAAainAC3LjCACBDQEAAZQAwABNyD4BPRzAAGo+LoEMAgACFMAAaj/AC3LjCAAcwABqTofAAGpEwAtx7oLRAQABHMAAalEUwABqT8ALcuMIAIEGAQABgMAAalPAC22GAMAATckAwABNVQDAAE1WSsAAam0APz9OwABqjQAAAIRoXQPAAE1GAVsATsAAaqAAAACEaWADwABMogBJwABqsCXAAGq5AILAAGq0wAttpV0DwABNRgFgA6ydPgI9jcAAatXAC3OrFMAAauHAC22lAgFdA8AA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AAAAYAOsnQE+AknAAIEQHMAAgRsWwACBFC6ByMAATXaCjAEAAZMAwABN0krAAIEgARzAAIErLoLRAQABHMAAgTMWwACBLC6ByMAATXaBBgEAAZQAwABNyQDAAE1VPz0wwACBPR7AAIFYlvwAAAAABp01YMAAgWzAAIF6wACCEQEAgdcAAAABA8AAgYHAAIIRAAAAAAAAAGADrJ0BPgNJwACBhxzAAIGSFsAAgYsugcjAAE12gIwBAAGUAMAATcZKwACBmAEcwACBoy6C0QEAAZMAwABNVT9JwACBrBzAAIG3FsAAgbAugcjAAE12gIwBAAGTAMAATcY9MMAAgb0ewACB2Jb8AAAAAD89MMAAgekewACCBJb9AAAAAAadYWDAAIIWwACCJMAAgxMAAIRhAAAAAQPAAIIrwACDEwAAAAIBAsAAgjAAAABtYAPAAEyiAMAAgjwAAACEVGADwABMogFqAGABwABNrAIAYAOsfAE+BT2JwACCSMALjfUewACCWcAAS98DAAOAwACCacALjeaBwACCcMALjfUWwACCei6ByMAATXYATsAAgovAAIKSAACByGADwABMogEcwACCmIHAAIKUwAuN9YEGAQABgMAAgprAC43mAMAATclOwACCs8AAgroAAIDmYAOsfAEcwACCvC6OI5yGAQABgsAAgsjAC45MAJ04PRzAAILcg8AAgtXAC46BhFgEAASTgsAAgujAC45MLoDAAIL2wAuN5gDAAE1rSsAAgwIBg8AAgwnAC46BBp1iYMAAgxjAAIMdwACDngAAhHgAAAABA8AAgyPAAIOeAAAAAgICwACDKAAAAIHdYAPAAEyiAMAAg0MAACCEIl0DwABNBAFgA6ydAABcAT4CTsAAg1nAAINdAAGEVGADwABMogEcwACDbxbAAINogcAAg1/AC48egcjAAE0ngQ0BAAGAwACDccALjw4AwABNyD0cwACDfC6EWAMAA4DAAIOFwAuPDoLAAIOMwAuPOYHAAIORwAuPHgCdQQadY2DAAIOjwACDqMAAhGMAAIRlAAAAAQPAAIOxwACEYwAAAAMCA8AAg7YAAABtYAPAAEyiAMAAg8EAAACEVGADwABMogDAAIPRAAAgin5gA6ydAWoAYAHAAE2sAgBcAT4CPR7AAIPuwABL3wMAA4DAAIP+wAuPyYHAAIQFwAuP2BbAAIQPLoHIwABNdgBFwACEHAHAAIQlwACEJwAAg2ZgA8AATKIBgMAAhCnAC4/JARzAAIQyg8AAhDDAC5A2gLsBAAGBwACENMALj9gAwABN0AGLwACEO8ALkDYcwACEOYPAAIQ7wAuQNoENAQABlADAAE3IPgE9HMAAhEougQwCAAKDwACES8ALkDaCwACEUMALj+gAwABNVgAAC2OJAAtjuAALY+cAC2QUAAtkUwALZKkAC2URAAtlbQALZfgAC2aeAAtn7wALaXMAC2rJAAtr0AALbV8AC3T6AAt1YwALdccAC3YxAAt2lQALdv8AC3dJAAt3mQALeEsAC3iVAAt5CwALeVcAC3pDAAt7rQALfN8AC31WAAt91AALft4AC3/nAAuBcAALgwsAC4UUAAuFcgALhcEAC4YXAAuGdgALht0AC4dxAAuJAAALiroAC4r/AAuLVAALi60AC4wGAAuMfwALjRMAC42/AAuO5wALj6IAC5C8AAAANgKdaWDAAIRowACEd8AArBIHjisAAAFgA8AATe8AAV0DwABNRgFgA63IAAEFnaUAAAAABAAAAwAAAAAAAAAAAGADnWkBPwEJAQDAAE4FAAAAADYGnWtgwACEpsAAhK7AAITAAQKOFAAAAAEDwACEwMAAhMAAAAAAAAAAYAPAAEyiAAadbGDAAITEwACEzMAAhNkBAoadAAAAAQPAAITZwACE2QAAAAAAAABgA8AATKIABp1tYMAAhN3AAITtwACE8wECgcEAAAABA8AAhPPAAITzAAAAAAAAAGADneMABp11YMAAhPjAAIUEwACFGwACjiOchgAAAAEDwACFD8AAhRsAAAABAQHAAIUUAAAAgchgA8AATKIAAGADrIcABp12YMAAhSDAAIUswACFXAAAhAkAAAABA8AAhTjAAIVcAAABAAAEIWADwABN7wFbAAAAAF0DwABNBAFfAwAAAUrAAIU+AR/AAIVClu8BAV8DAAABLgAGnXdgwACFYcAAhXPAAIXbAACECAAAAAEDwACFfcAAhdsAAAABAQHAAIWQAAAggh1dA8AATQQBYAOtyAAAXQPAAE0EAWADrcgBSsAAhaABHsAAhaSWxwIBYAOtyAIugMAAhdXAC5M2AAadeGDAAIXgwACF6MAAhhQAAIHJAAAAAQPAAIXvwACGFAAAAQAABENgA8AATe8BWwAAAABdA8AATUYBXwMAAAFKwACF9QEewACF+sAATVEBAmADrchfAwAAAS4ABp2iYMAAhhjAAIYhwACGjgIAgcIAAAABA8AAhibAAIaOAAAAAQEBwACGLwAAICJgA63IAABcAT4CScAAhjwcwACGTBbAAIZFLoHIwABNdoCMAQABkwDAAE3GPTDAAIZSH8AAhlzAAEv0AgACky4APz0cwACGfy6BDAIAApOAwACGhcALk/oAwABNVgado2DAAIaTwACGnMAAhxYCAIHVAAAAAQPAAIagwACHFgAAAAEBAcAAhqkAACAiYAOtyAAAXAE+AknAAIa2HMAAhsYWwACGvy6ByMAATXaAjAEAAZMAwABNxj0wwACGzB/AAIbWwABL9AIAApMuAD89HMAAhvkugQwCAAIcwACHBhbAAIb/LoHIwABNdoEGAQABlADAAE3JgMAAhw3AC5SFAMAATVYGnXlgwACHG8AAhx/AAIfcAACEcQAAAAEDwACHKcAAh9wAAAACAQLAAIcvAAAAgRthAwFgA63IYAPAAErYAMAAh0sAAABtYAPAAEyiAWrAAIdTYAPAAEyiGgBgA8AATKIBPgNJwACHXRzAAIdngcAAh2HAC5VCgLsBAAGTAMAATdA9icAAh2zAC5VCkz9FwACHewHAAIeEwACHhgAAg2ZgA8AATKIBgcAAh4jAC5VCARzAAIeRgsAAh4/AC5WXgLsBAAEWwACHky6ByMAATXYAwABN0AGKwACHm8ALlZccwACHnILAAIebwAuVl4ENAQABlADAAE3IPgFJwACHqBzAAIewgMAAh6zAC5UrbgEAARzAAIe1LoLRAQABgsAAh7bAC5WXAMAATVUAAErAAIe7AYLAAIfCwAuVlz9KwACHzwEcwACH1pSD6wAAAADAAEzFBp16YMAAh+HAAIflwACIyAAAhHMAAAABA8AAh/PAAIjIAAAAAgECwACH+QAAAIEbYQMBYAOtyGADwABK2ADAAIgVAAAAbWADwABMogFqAGABwABNrAIAYAPAAEyiAT4DScAAiCMiHMAAiC2BwACIJ8ALlpOAjAEAASsAwABNxgEcwACIPoHAAIg4wAuWk4FeAQABFsAAiEYugcjAAE12AMAATdM9icAAiE7AC5aTHMAAiGIWwACIWy6ByMAATXaBBgEAAZQAwABNyT9FwACIawHAAIh0wACIdgAAg2ZgA8AATKIBgcAAiHjAC5aTARzAAIiBgsAAiH/AC5cmgV4BAAGTAMAATdMBisAAiIfAC5cmHMAAiIiCwACIh8ALlyaBBgEAAZQAwABNyT4BScAAiJQcwACInIDAAIiYwAuWfG4BAAEcwACIoS6C0QEAAYLAAIiiwAuXJgDAAE1VAABKwACIpwGCwACIrsALlyY/SsAAiLsBHMAAiMKUg+sAAAAAwABMxQade2DAAIjNwACI5MAAib8DAIENAAAAAQPAAIjlwACJvwAAAAEBAcAAiPQAACCCHV0DwABNRgFgA63IAABdA8AATUYBYAOtyAE+Ak7AAIkFwACJEQAAjh5gA8AATKIBHMAAiR8WwACJGC6ByMAATXaBDQEAARbAAIkngMAAiSHAC5gAgcjAAE12AMAATchKwACJMwE1wACJQwAAAQBdA8AATUYBYAOtyAExwACJQ2ADrcgANcAAiU4AAAEAXAEXwACJToLAAIlDwAuYboHIgcAAiVfAC5glwABNdDXAAIlrAAABAFwBHMAAiWuCwACJQ8ALmG6EWAMAA5MWwACJfC6ByMAATXYuAMAATWs1wACJkgAAAQBcARzAAImSgsAAiUPAC5huhFgDAAMWwACJoC6ByMAATXaBwACJqMALmCWAwACJtcALmAAAwABNa4LAAIlDwAuYbgadfGDAAInEwACJycAAimgAAIHEAAAAAQPAAInRwACKaAAAAAEBAcAAidkAAACBvGADwABN7wAAYAPAAErYAT4DTsAAiezAAInwAACOH2ADwABMogEWwACJ9y6ByMAATXZFwACKAwHAAIoMwACKDgAAg2ZgA8AATKIBkwEcwACKFYLAAIoTwAuZloC7AQABgcAAihfAC5lxAMAATdABisAAih7AC5mWHMAAihyCwACKHsALmZaBDQEAAZQAwABNyD4BScAAiikcwACKNRzAAIoxLoLRAQABgsAAijLAC5mWAMAATVWAjAEAAYDAAIo4wAuZVgDAAE38SsAAikEBKT9KwACKWAEqBp19YMAAim3AAIpywACLWwAAhFwAAAABA8AAinnAAItbAAAAAQABwACKggAAAIRdYAOZQQFqAGABwABNrAIAXAE+Az0jHMAAipiAwACKkcALml2AjAEAASsAwABN/IjAAIqRwAuaXR7AAIqgmUMAAAAAKwFgA5lBTsAAirLAAIq0AACDZmADwABMogEWwACKuy6ByMAATXZDwACKxxzAAIrQgcAAis7AC5qvgowBAAGUAMAATdI+BU7AAIrhwACK5QAAgQtgA8AATKIBHMAAiu6AwACK58ALml2EXgEAAYHAAIr2wAuarwCZRj2JwACLAMALmq8cwACLAoHAAIsAwAuar4EGAQABlADAAE3JTsAAixLAAIsWAACEX2ADrcgBHMAAixwugtEBAAGBwACLHcALmq8AwABNVT0cwACLKy6BDAIAAoHAAIsswAuarxzAAIs1LoLRAQABgsAAizbAC5rvAMAATVUAwABNVj0cwACLRi6BDAIAAoLAAItHwAua74PAAItOwAubRQDAAE1WBp1+YMAAi2DAAItlwACURAAAhFgAAAABA8AAi23AAJREAAAABAMEwACLcgAAAG1gA8AATKIAwACLfQAAAIRUYAPAAEyiAMAAi5QAACCCwF0DwABNBAFgA63IAMAAi6UAAACEZ2ADwABMogFqwACLsWADwABMohoAXAE+C0nAAIvQIiIcwACL1pOCjAEAAYDAAIvYwAub7ADAAE3SARzAAIvngMAAi+HAC5vsgowBAAGBwACL6cALm/sAwABN0gEcwACL9IHAAIvwwAub+4KMAQABFsAAi/YugcjAAE12AMAATdI+Aj0ewACMEcAAS98DAAOAwACMIcALm+yBwACMKMALm/sWwACMLS6ByMAATXYAQCrAAIxVwACMWgA/ScAAjGccwACMdYPAAIxrwAucIIC7AQABkwDAAE3QPgE9MMAAjIIfwACMk8AAS+gEAASDwACMmcALnCCTKyeEZwA/TsAAjMzAAIzSAAGBm2ADwABMogEcwACM2IHAAIzUwAub+4EGAQABgMAAjNrAC5vsAMAATclJwACM5RzAAI0DHMAAjPYWwACM74LAAIzqwAucC4HIwABNJ4EGAQABg8AAjPjAC5wgAMAATcmAuwEAAYTAAI0FwAudJQDAAE3QPgE9MMAAjRQewACNL5b+AAAAAD9JwACNRBzAAI1OhMAAjUjAC50lgIwBAAGTAMAATcZKwACNVAA/ScAAjWElwACNagCCwACNZcALnAtgA5ydPgJOwACN9cAAjgUAAY4kYAOcnQEmwACODACCwACOB8ALnAtgA5ydScAAjiUcwACOQRbAAI4uLo4UnWuAjAEAARbAAI5U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FsAApPYugcjAAE12AMAATdABisAApP7AC7akHMAApP+CwACk/sALtqSBDQEAAZQAwABNyD4BScAApQscwAClFxzAAKUTLoLRAQABgsAApRTAC7akAMAATVWAjAEAAYDAAKUawAu1/gDAAE38SsAApSMBgsAApSrAC7akP0rAAKU3ARzAAKU+lIPrAAAAAMAATMUGnZlgwAClScAApU3AAKZpAACEcgAAAAEDwAClWMAApmkAAAACAQLAAKVhAAAggbxgA63IAMAApW8AAABtYAPAAEyiAWrAAKV3YAHAAE2sAgBgA8AATKIBPgNJwAClhCIcwACljoHAAKWIwAu3m4CMAQABKwDAAE3GARzAAKWfgcAApZnAC7ebgV4BAAEWwAClpy6ByMAATXYAwABN0z4BPYnAAKW3wAu3mxzAAKXLFsAApcQugcjAAE12gQYBAAGUAMAATclJwACl2xzAAKXlgcAApd/AC7ebgLsBAAGTAMAATdA+AUrAAKXyARzAAKX5lIPrAAAAAMAATMU/RcAApgcBwACmEMAAphIAAINmYAPAAEyiAYHAAKYUwAu3mwEcwACmHYLAAKYbwAu4aYFeAQABkwDAAE3TAYrAAKYjwAu4aRzAAKYkgsAApiPAC7hpgQYBAAGUAMAATck+AUnAAKYwHMAApjwcwACmOC6C0QEAAYLAAKY5wAu4aQDAAE1VgIwBAAGAwACmP8ALt40AwABN/ErAAKZIAYLAAKZPwAu4aT9KwACmXAEcwACmY5SD6wAAAADAAEzFBp2aYMAApm7AAKZ2wACm0QAAhC8AAAABA8AApoDAAKbRAAAAAAAAAGADrcgBPgE9MMAApokfwACmk8AATDABAAEniscABp2bYMAAptbAAKbewACnQAAAhHUAAAABA8AApubAAKdAAAAAAQEBwACm6wAAAIHdYAPAAEyiAABgA63IAT4BPTDAAKb4H8AApwLAAEwwAQABJ4rHAAadnGDAAKdFwACnSsAAp8AAAIOVAAAAAQPAAKdVwACnwAAAAAEBAcAAp1sAAACBG2EDAWADrchgA8AAStgAAFwBPgE9MMAAp3gfwACngsAATDABAAEniscABp2dYMAAp8XAAKfKwACoQAAAg5YAAAABA8AAp9XAAKhAAAAAAQEBwACn2wAAAIEbYQMBYAOtyGADwABK2AAAXAE+AT0wwACn+B/AAKgCwABMMAEAASeKxwAGnXBgwACoRcAAqFHAAKirAQCBwgAAAAEDwACoV8AAqKsAAAAAAAAAYAOtyAE+AknAAKhdHMAAqGgWwACoYS6ByMAATXaCjAEAAZMAwABN0krAAKhtARzAAKh4LoLRAQABkwDAAE1VPz0wwACogR7AAKiclvwAAAAABp1xYMAAqLDAAKi8wACpHgEAgdUAAAABA8AAqMHAAKkeAAAAAAAAAGADrcgBPgJJwACoxxzAAKjSFsAAqMsugcjAAE12gowBAAGTAMAATdJKwACo1wEcwACo4i6C0QEAARzAAKjqFsAAqOMugcjAAE12gQYBAAGUAMAATckAwABNVT89MMAAqPQewACpD5b8AAAAAAadcmDAAKkjwACpL8AAqcYBAIHXAAAAAQPAAKk2wACpxgAAAAAAAABgA63IAT4DScAAqTwcwACpRxbAAKlALoHIwABNdoCMAQABlADAAE3GSsAAqU0BHMAAqVgugtEBAAGTAMAATVU/ScAAqWEcwACpbBbAAKllLoHIwABNdoCMAQABkwDAAE3GPTDAAKlyHsAAqY2W/AAAAAA/PTDAAKmeHsAAqbmW/QAAAAAGnZ5gwACpy8AAqdfAAKrEAACEYQAAAAEDwACp3sAAqsQAAAACAQLAAKnjAAAAbWADwABMogDAAKnvAAAAhFRgA8AATKIBagBgAcAATawCAGADrIcBPgU9icAAqfvAC7xbHsAAqgzAAEvfAwADgMAAqhzAC7xMgcAAqiPAC7xbFsAAqi0ugcjAAE12AE7AAKo+wACqRQAAgchgA8AATKIBHMAAqkuBwACqR8ALvFuBBgEAAYDAAKpNwAu8TADAAE3JTsAAqmTAAKprAACA5mADrIcBHMAAqm0ujiOchgEAAYLAAKp5wAu8sgCddT0cwACqjYPAAKqGwAu854RYBAAEk4LAAKqZwAu8si6AwACqp8ALvEwAwABNa0rAAKqzAYPAAKq6wAu85wadn2DAAKrJwACqzsAAq00AAIR4AAAAAQPAAKrUwACrTQAAAAICAsAAqtkAAACB3WADwABMogDAAKryAAAghCJdA8AATQQBYAOtyAAAXAE+Ak7AAKsIwACrDAABhFRgA8AATKIBHMAAqx4WwACrF4HAAKsOwAu9hIHIwABNJ4ENAQABgMAAqyDAC710AMAATcg9HMAAqysuhFgDAAOAwACrNMALvXSCwACrO8ALvZ+BwACrQMALvYQAnX4GnaBgwACrUsAAq1fAAKwQAACEZQAAAAEDwACrYMAArBAAAAADAgPAAKtlAAAAbWADwABMogDAAKtwAAAAhFRgA8AATKIAwACrfgAAIIp+YAOtyAFqAGABwABNrAIAXAE+Aj0ewACrm8AAS98DAAOAwACrq8ALvi+BwACrssALvj4WwACrvC6ByMAATXYARcAAq8kBwACr0sAAq9QAAINmYAPAAEyiAYDAAKvWwAu+LwEcwACr34PAAKvdwAu+nIC7AQABgcAAq+HAC74+AMAATdABi8AAq+jAC76cHMAAq+aDwACr6MALvpyBDQEAAZQAwABNyD4BPRzAAKv3LoEMAgACg8AAq/jAC76cgsAAq/3AC75OAMAATVYAAAuR7wALkh4AC5JNAAuSegALkrkAC5MPAAuTdwALk9MAC5ReAAuVBAALllUAC5fZAAuZLwALmjYAC5vFAAujYAALo8kAC6QtAAuklwALpPsAC6VlAAulrwALpf8AC6axAAum+wALp3EAC6e9AAuoqQALqhMAC6tFAAurvAALrDoAC61EAAuuTQALr9YAC7FxAAuzegALs9gAC7QnAAu0fQALtNwAC7VDAAu11wALt2YAC7kgAAu5ZQALuboAC7oTAAu6bAALuuUAC7t5AAu8JQALvU0AC74IAAu/IgAAADYCnaZgwACsFcAArCTAANRvB44sAAABYAPAAE3vAAFdA8AATUYBYAOu7AABBZ3iAAAAAAQAAAMAAAAAAAAAAABgA52mAT8BCQEAwABOBQAAAAA2Bp2oYMAArFfAAKxfwACscQECjhQAAAABA8AArHHAAKxxAAAAAAAAAGADwABMogAGnalgwACsdcAArH3AAKyKAQKGnQAAAAEDwACsisAArIoAAAAAAAAAYAPAAEyiAAadqmDAAKyOwACsnsAArKQBAoHBAAAAAQPAAKykwACspAAAAAAAAABgA53jAAadsmDAAKypwACst8AArM4AAo4jnIYAAAABA8AArMLAAKzOAAAAAQEBwACsxwAAAIHIYAPAAEyiAABgA6ySAAads2DAAKzTwACs38AArQ8AAIQJAAAAAQPAAKzrwACtDwAAAQAABCFgA8AATe8BWwAAAABdA8AATQQBXwMAAAFKwACs8QEfwACs9ZbvAQFfAwAAAS4ABp20YMAArRTAAK0owACtlAAAhAgAAAABA8AArTLAAK2UAAAAAQEBwACtRwAAIIIdXQPAAE0EAWADruwAAF0DwABNBAFgA67sAUrAAK1XAR7AAK1blscCAWADruwCLoDAAK2OwAvBnAAGnbVgwACtmcAAraHAAK3PAACByQAAAAEDwACtqMAArc8AAAEAAARDYAPAAE3vAVsAAAAAXQPAAE1GAV8DAAABSsAAra4BHsAArbPAAE1RAQJgA67sXwMAAAEuAAad32DAAK3TwACt3MAArksCAIHCAAAAAQPAAK3hwACuSwAAAAEBAcAArewAACAiYAOu7AAAXAE+AknAAK35HMAArgkWwACuAi6ByMAATXaAjAEAAZMAwABNxj0wwACuDx/AAK4ZwABL9AIAApMuAD89HMAArjwugQwCAAKTgMAArkLAC8JgAMAATVYGneBgwACuUMAArlnAAK7VAgCB1QAAAAEDwACuXcAArtUAAAABAQHAAK5oAAAgImADruwAAFwBPgJJwACudRzAAK6FFsAArn4ugcjAAE12gIwBAAGTAMAATcY9MMAArosfwACulcAAS/QCAAKTLgA/PRzAAK64LoEMAgACHMAArsUWwACuvi6ByMAATXaBBgEAAZQAwABNyYDAAK7MwAvC6wDAAE1WBp22YMAArtrAAK7ewACvnQAAhHEAAAABA8AArujAAK+dAAAAAgECwACu7gAAAIEbYQMBYAOu7GADwABK2ADAAK8MAAAAbWADwABMogFqwACvFGADwABMohoAYAPAAEyiAT4DScAArx4cwACvKIHAAK8iwAvDqIC7AQABkwDAAE3QPYnAAK8twAvDqJM/RcAArzwBwACvRcAAr0cAAINmYAPAAEyiAYHAAK9JwAvDqAEcwACvUoLAAK9QwAvD/YC7AQABFsAAr1QugcjAAE12AMAATdABisAAr1zAC8P9HMAAr12CwACvXMALw/2BDQEAAZQAwABNyD4BScAAr2kcwACvcYDAAK9twAvDkW4BAAEcwACvdi6C0QEAAYLAAK93wAvD/QDAAE1VAABKwACvfAGCwACvg8ALw/0/SsAAr5ABHMAAr5eUg+sAAAAAwABMxQadt2DAAK+iwACvpsAAsIsAAIRzAAAAAQPAAK+0wACwiwAAAAIBAsAAr7oAAACBG2EDAWADruxgA8AAStgAwACv2AAAAG1gA8AATKIBagBgAcAATawCAGADwABMogE+A0nAAK/mIhzAAK/wgcAAr+rAC8T5gIwBAAErAMAATcYBHMAAsAGBwACv+8ALxPmBXgEAARbAALAJLoHIwABNdgDAAE3TPYnAALARwAvE+RzAALAlFsAAsB4ugcjAAE12gQYBAAGUAMAATck/RcAAsC4BwACwN8AAsDkAAINmYAPAAEyiAYHAALA7wAvE+QEcwACwRILAALBCwAvFjIFeAQABkwDAAE3TAYrAALBKwAvFjBzAALBLgsAAsErAC8WMgQYBAAGUAMAATck+AUnAALBXHMAAsF+AwACwW8ALxOJuAQABHMAAsGQugtEBAAGCwACwZcALxYwAwABNVQAASsAAsGoBgsAAsHHAC8WMP0rAALB+ARzAALCFlIPrAAAAAMAATMUGnbhgwACwkMAAsKnAALGIAwCBDQAAAAEDwACwqsAAsYgAAAABAQHAALC7AAAggh1dA8AATUYBYAOu7AAAXQPAAE1GAWADruwBPgJOwACwzMAAsNgAAI4eYAPAAEyiARzAALDmFsAAsN8ugcjAAE12gQ0BAAEWwACw7oDAALDowAvGZoHIwABNdgDAAE3ISsAAsPoBNcAAsQwAAAEAXQPAAE1GAWADruwBMcAAsQxgA67sADXAALEXAAABAFwBF8AAsReCwACxDMALxtSByIHAALEgwAvGi8AATXQ1wACxNAAAAQBcARzAALE0gsAAsQzAC8bUhFgDAAOTFsAAsUUugcjAAE12LgDAAE1rNcAAsVsAAAEAXAEcwACxW4LAALEMwAvG1IRYAwADFsAAsWkugcjAAE12gcAAsXHAC8aLgMAAsX7AC8ZmAMAATWuCwACxDMALxtQGnblgwACxjcAAsZLAALIxAACBxAAAAAEDwACxmsAAsjEAAAABAQHAALGiAAAAgbxgA8AATe8AAGADwABK2AE+A07AALG1wACxuQAAjh9gA8AATKIBFsAAscAugcjAAE12RcAAscwBwACx1cAAsdcAAINmYAPAAEyiAZMBHMAAsd6CwACx3MALx/yAuwEAAYHAALHgwAvH1wDAAE3QAYrAALHnwAvH/BzAALHlgsAAsefAC8f8gQ0BAAGUAMAATcg+AUnAALHyHMAAsf4cwACx+i6C0QEAAYLAALH7wAvH/ADAAE1VgIwBAAGAwACyAcALx7wAwABN/ErAALIKASk/SsAAsiEBKgadumDAALI2wACyO8AAsyQAAIRcAAAAAQPAALJCwACzJAAAAAEAAcAAsksAAACEXWADmUEBagBgAcAATawCAFwBPgM9IxzAALJhgMAAslrAC8jDgIwBAAErAMAATfyIwACyWsALyMMewACyaZlDAAAAACsBYAOZQU7AALJ7wACyfQAAg2ZgA8AATKIBFsAAsoQugcjAAE12Q8AAspAcwACymYHAALKXwAvJFYKMAQABlADAAE3SPgVOwACyqsAAsq4AAIELYAPAAEyiARzAALK3gMAAsrDAC8jDhF4BAAGBwACyv8ALyRUAmUY9icAAssnAC8kVHMAAssuBwACyycALyRWBBgEAAZQAwABNyU7AALLbwACy3wAAhF9gA67sARzAALLlLoLRAQABgcAAsubAC8kVAMAATVU9HMAAsvQugQwCAAKBwACy9cALyRUcwACy/i6C0QEAAYLAALL/wAvJVQDAAE1VAMAATVY9HMAAsw8ugQwCAAKCwACzEMALyVWDwACzF8ALyasAwABNVgadu2DAALMpwACzLsAAvBcAAIRYAAAAAQPAALM2wAC8FwAAAAQDBMAAszsAAABtYAPAAEyiAMAAs0YAAACEVGADwABMogDAALNfAAAggsBdA8AATQQBYAOu7ADAALNwAAAAhGdgA8AATKIBasAAs3xgA8AATKIaAFwBPgtJwACzmyIiHMAAs6GTgowBAAGAwACzo8ALylIAwABN0gEcwACzsoDAALOswAvKUoKMAQABgcAAs7TAC8phAMAATdIBHMAAs7+BwACzu8ALymGCjAEAARbAALPBLoHIwABNdgDAAE3SPgI9HsAAs9zAAEvfAwADgMAAs+zAC8pSgcAAs/PAC8phFsAAs/gugcjAAE12AEAqwAC0IMAAtCUAP0nAALQyHMAAtECDwAC0NsALyoaAuwEAAZMAwABN0D4BPTDAALRNH8AAtF7AAEvoBAAEg8AAtGTAC8qGkysnhGcAP07AALSXwAC0nQABgZtgA8AATKIBHMAAtKOBwAC0n8ALymGBBgEAAYDAALSlwAvKUgDAAE3JScAAtLAcwAC0zhzAALTBFsAAtLqCwAC0tcALynGByMAATSeBBgEAAYPAALTDwAvKhgDAAE3JgLsBAAGEwAC00MALy4sAwABN0D4BPTDAALTfHsAAtPqW/gAAAAA/ScAAtQ8cwAC1GYTAALUTwAvLi4CMAQABkwDAAE3GSsAAtR8AP0nAALUsJcAAtTUAgsAAtTDAC8pxYAOcnT4CTsAAtcLAALXSAAGOJGADnJ0BJsAAtdkAgsAAtdTAC8pxYAOcnUnAALXyHMAAtg4WwAC1+y6OFJ2ogIwBAAEWwAC2IYXAALYRwAvMXI4UnKAAwABNxj4BScAAtj8iHMAAtkqEwAC2RMALy4uAuwEAATcKAMAATdAAIRzAALZrFsAAtmSFwAC2VMALzFyBwZyigIwBAAEWwAC2cy6BwZ2qAJ3uPgI9HsAAto6T6gUABSbAALaYAILAALaTwAvKcV0DwABNRgFgA67sg8AAtqzAC8qGLoDAALa9wAvKUoTAALbEwAvLiwBKwAC21gBJwAC27RzAALcDFsAAtv0WwAC29i6BwZ2qg6Schp3mjhachgYABhzAALc1HMAAtyCAwAC3GsALylKDxgEAARbAALciLo4UnagAwABNyoENAQABFsAAtzwuhp2dqQDAAE3IHMAAt12EwAC3V8ALy4uDxgEAARbAALdfLo4UnagAwABNyhbAALeWFsAAt4+FwAC3f8ALzFyBwZyig6Schp3mHMAAt8gcwAC3s4PAALepwAvKhoPGAQABFsAAt7UujhSdqADAAE3KgQ0BAAEWwAC32oXAALfKwAvMXIadnKEAwABNyB7AALf9k/cBAAEuAB7AALgek/cBAAGCwAC4JMALynEAAJytPgFKwAC4OAA/ScAAuFccwAC4chbAALhrhcAAuFvAC8xcgcGcooCMAQABFsAAuHougcGdqgCd7j4FTsAAuVDAALlbAAGOJV0DwABNRgFgA67sASbAALliAILAALldwAvKcV0DwABNRgFgA67sTsAAuYTAALmPAAGOJmADrJIBHMAAuZEujiOchgEAAYTAALmdwAvLiwCdskXAALmtAcAAubbAALm4AACDZmADwABMogGTARzAALm/FMAAub3AC87qCACAuwEAAYTAALnBwAvLiwDAAE3QARXAALnIwAvO6ggcwAC5yRTAALnIwAvO6ggAgQ0BAAGUAMAATcg+AT0cwAC544fAALnZwAvOuoEMAgACFMAAueTAC87qCAAcwAC584bA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wABNVUnAAMiEHMAAyIyAwADIiMAL3/5uAQABhsAAyI3AC+DeAAA+A0nAAMihg8AAyKXAC+BIPgE9MMAAyMAewADI25b9AAAAAD89isAAyPjAC+A4hsAAyQHAC+DePYvAAMkSwAvgSCk/ScAAyTqDwADJPsAL4EhKwADJTQEmwADJTQWCwADJVMAL4DhgA67sP0nAAMlgIRzAAMlrgcAAyWTAC+AWgIwBAAErAMAATfxKwADJdAEcwADJgYHAAMl7wAvgFm4AAAAAAD89MMAAyYkewADJpJb8AAAAAAadz2DAAMm4wADJwsAAyfMAAIHcAAAAAQPAAMnLwADJ8wAAAAEBAcAAydAAAACB3WADwABMogAAYAOu7AE+AUrAAMndARzAAMnoLoLRAQABgMAAyenAC+IHAMAATVUGndBgwADJ+MAAyf3AAMpbAACAggAAAAEDwADKAMAAylsAAAABAQHAAMoLAAAgImADruwAAFwBPgE9MMAAyhgfwADKIsAATDABAAEnisUABp3RYMAAymDAAMplwADK0AAAg2sAAAABA8AAymvAAMrQAAAAAQEBwADKgAAAICJdA8AATQQBYAOu7AAAXAE+AT0wwADKjR/AAMqXwABMMAEAASeKxQAGndJgwADK1cAAytrAAMtLAACEdAAAAAEDwADK4MAAy0sAAAACAgLAAMrlAAAAgd1gA8AATKIAwADK9gAAICJgA67sAABcAT4BPTDAAMsDH8AAyw3AAEwwAQABJ44gAAad02DAAMtQwADLVcAAy9QAAIR2AAAAAQPAAMtewADL1AAAAAICAsAAy2MAAACB3WADwABMogDAAMt+AAAggQFdA8AATQQBYAOu7AAAXAE+AT0wwADLjB/AAMuWwABMMAEAASeOIAAGndRgwADL2cAAy97AAMx/AACEWQAAAAEDwADL4sAAzH8AAAABAAHAAMvoAAAAhFphAwJgA67sYAOu7GADwABMogFqAGABwABNrAIAXAE+AknAAMwSHMAAzB6AwADMFsAL49CAjAEAASsAwABN/D4BPTDAAMwvJ44qPz0ewADMaJeSAgFgA67sAi6AwADMc8AL49AABp3VYMAAzITAAMyIwADNiQAAhHAAAAABA8AAzI/AAM2JAAAAAgECwADMmgAAIIG8YAOu7ADAAMyoAAAAbWADwABMogFqwADMsGADwABMohoAYAPAAEyiAT4DScAAzLocwADMxIHAAMy+wAvkcoFeAQABFsAAzMwugcjAAE12AMAATdM+AUrAAMzcARzAAMzjlIPrAAAAAMAATMVJwADM8hzAAMz8gcAAzPbAC+RygLsBAAGTAMAATdA+AT2JwADNCcAL5HKTP0XAAM0eAcAAzSfAAM0pAACDZmADwABMogGBwADNK8AL5HIBHMAAzTSCwADNMsAL5QqAuwEAARbAAM07LoHIwABNdgDAAE3QAYrAAM1DwAvlChzAAM1EgsAAzUPAC+UKgQ0BAAGUAMAATcg+AUnAAM1QHMAAzVwcwADNWC6C0QEAAYLAAM1ZwAvlCgDAAE1VgIwBAAGAwADNX8AL5GQAwABN/ErAAM1oAYLAAM1vwAvlCj9KwADNfAEcwADNg5SD6wAAAADAAEzFBp3WYMAAzY7AAM2SwADOsAAAhHIAAAABA8AAzZ3AAM6wAAAAAgECwADNqAAAIIG8YAOu7ADAAM22AAAAbWADwABMogFqwADNvmABwABNrAIAYAPAAEyiAT4DScAAzcsiHMAAzdWBwADNz8AL5gGAjAEAASsAwABNxgEcwADN5oHAAM3gwAvmAYFeAQABFsAAze4ugcjAAE12AMAATdM+AT2JwADN/sAL5gEcwADOEhbAAM4LLoHIwABNdoEGAQABlADAAE3JScAAziIcwADOLIHAAM4mwAvmAYC7AQABkwDAAE3QPgFKwADOOQEcwADOQJSD6wAAAADAAEzFP0XAAM5OAcAAzlfAAM5ZAACDZmADwABMogGBwADOW8AL5gEBHMAAzmSCwADOYsAL5s+BXgEAAZMAwABN0wGKwADOasAL5s8cwADOa4LAAM5qwAvmz4EGAQABlADAAE3JPgFJwADOdxzAAM6DHMAAzn8ugtEBAAGCwADOgMAL5s8AwABNVYCMAQABgMAAzobAC+XzAMAATfxKwADOjwGCwADOlsAL5s8/SsAAzqMBHMAAzqqUg+sAAAAAwABMxQad12DAAM61wADOv8AAzxoAAIQvAAAAAQPAAM7JwADPGgAAAAAAAABgA67sAT4BPTDAAM7SH8AAztzAAEwwAQABJ4rHAAad2GDAAM8fwADPKcAAz4sAAIR1AAAAAQPAAM8xwADPiwAAAAEBAcAAzzYAAACB3WADwABMogAAYAOu7AE+AT0wwADPQx/AAM9NwABMMAEAASeKxwAGndlgwADPkMAAz5XAANANAACDlQAAAAEDwADPoMAA0A0AAAABAQHAAM+mAAAAgRthAwFgA67sYAPAAErYAABcAT4BPTDAAM/FH8AAz8/AAEwwAQABJ4rHAAad2mDAANASwADQF8AA0I8AAIOWAAAAAQPAANAiwADQjwAAAAEBAcAA0CgAAACBG2EDAWADruxgA8AAStgAAFwBPgE9MMAA0EcfwADQUcAATDABAAEniscABp2tYMAA0JTAANCiwADQ/AEAgcIAAAABA8AA0KjAAND8AAAAAAAAAGADruwBPgJJwADQrhzAANC5FsAA0LIugcjAAE12gowBAAGTAMAATdJKwADQvgEcwADQyS6C0QEAAZMAwABNVT89MMAA0NIewADQ7Zb8AAAAAAadrmDAANEBwADRD8AA0XEBAIHVAAAAAQPAANEUwADRcQAAAAAAAABgA67sAT4CScAA0RocwADRJRbAANEeLoHIwABNdoKMAQABkwDAAE3SSsAA0SoBHMAA0TUugtEBAAEcwADRPRbAANE2LoHIwABNdoEGAQABlADAAE3JAMAATVU/PTDAANFHHsAA0WKW/AAAAAAGna9gwADRdsAA0YTAANIbAQCB1wAAAAEDwADRi8AA0hsAAAAAAAAAYAOu7AE+A0nAANGRHMAA0ZwWwADRlS6ByMAATXaAjAEAAZQAwABNxkrAANGiARzAANGtLoLRAQABkwDAAE1VP0nAANG2HMAA0cEWwADRui6ByMAATXaAjAEAAZMAwABNxj0wwADRxx7AANHilvwAAAAAPz0wwADR8x7AANIOlv0AAAAABp3bYMAA0iDAANIuwADTHQAAhGEAAAABA8AA0jXAANMdAAAAAgECwADSOgAAAG1gA8AATKIAwADSRgAAAIRUYAPAAEyiAWoAYAHAAE2sAgBgA6ySAT4FPYnAANJSwAvqwR7AANJjwABL3wMAA4DAANJzwAvqsoHAANJ6wAvqwRbAANKELoHIwABNdgBOwADSlcAA0pwAAIHIYAPAAEyiARzAANKigcAA0p7AC+rBgQYBAAGAwADSpMAL6rIAwABNyU7AANK9wADSxAAAgOZgA6ySARzAANLGLo4jnIYBAAGCwADS0sAL6xgAnbI9HMAA0uaDwADS38AL602EWAQABJOCwADS8sAL6xgugMAA0wDAC+qyAMAATWtKwADTDAGDwADTE8AL600GndxgwADTIsAA0yfAANOoAACEeAAAAAEDwADTLcAA06gAAAACAgLAANMyAAAAgd1gA8AATKIAwADTTQAAIIQiXQPAAE0EAWADruwAAFwBPgJOwADTY8AA02cAAYRUYAPAAEyiARzAANN5FsAA03KBwADTacAL6+qByMAATSeBDQEAAYDAANN7wAvr2gDAAE3IPRzAANOGLoRYAwADgMAA04/AC+vagsAA05bAC+wFgcAA05vAC+vqAJ27Bp3dYMAA063AANOywADUbQAAhGUAAAABA8AA07vAANRtAAAAAwIDwADTwAAAAG1gA8AATKIAwADTywAAAIRUYAPAAEyiAMAA09sAACCKfmADruwBagBgAcAATawCAFwBPgI9HsAA0/jAAEvfAwADgMAA1AjAC+yVgcAA1A/AC+ykFsAA1BkugcjAAE12AEXAANQmAcAA1C/AANQxAACDZmADwABMogGAwADUM8AL7JUBHMAA1DyDwADUOsAL7QKAuwEAAYHAANQ+wAvspADAAE3QAYvAANRFwAvtAhzAANRDg8AA1EXAC+0CgQ0BAAGUAMAATcg+AT0cwADUVC6BDAIAAoPAANRVwAvtAoLAANRawAvstADAAE1WAAALwFUAC8CEAAvAswALwOAAC8EfAAvBdQALwd0AC8I5AAvCxAALw2oAC8S7AAvGPwALx5UAC8icAAvKKwAL0cYAC9IvAAvSkwAL0v0AC9NhAAvTywAL1BUAC9RlAAvVFwAL1WEAC9XXAAvWIwAL1w8AC9h5AAvZqwAL2iIAC9qgAAvbqgAL3LMAC948AAvf1wAL4eAAC+I+AAvijQAL4uMAC+NCAAvjqQAL5D0AC+XMAAvnhgAL58sAC+ggAAvoeQAL6NIAC+lLAAvp3wAL6osAC+uzAAvsbgAL7YgAAAA2Ap3jYMAA1HLAANSSwADsOgOOLQFqwADUc2ADwABKnwMAAWADwABN7wABYAOrwAEEneZgwADUycAA1M4Jg6SchgBgA54AAAEFnf9gwADU08AA1NPAANTqAAAAA8AA1N7AANTqAAAAAQEBwADU5AAABIOkYAOeAAAAYAOd4wE/AggBneaAAMAL7tIJAcAA1NPAAE4FAAAAABMGnelgwADVC8AA1RPAANVCBAGOLpyGAWrAANTwYAPAAEqfAwAAAQPAANUjwADVQgAAAAEBAcAA1SQAAAA7WwAAYAOd4wFKwADVLQEfwADVMZ3/AQABJsAA1T0FgMAA1T3AC+82YAOeAAAGnetgwADVZMAA1WzAANWQAQCOGQAAAAEDwADVesAA1ZAAAAAAAAAAYAPAAEyiAUrAANV9ARbAANWDFsAA1X0ug6Schp3mjhmeBAad7GDAANWUwADVnMAA1bYBAIIcAAAAAQPAANWlwADVtgAAAAAAAABgA8AATKIBSsAA1agBFsAA1a4WwADVqC6DpJyGneaCHMAATgIGne5gwADVusAA1cjAANYZAwCAjAAAAAEDwADVysAA1hkAAAABAQHAANXSAAAAgh1gA8AATe8AAGADwABK2AFKwADV4gEiJcAA1ekAgMAA1ePAC/AnYAOd4wAewADV/MAARnUCAAIWwADWBi6DpJyGneYWwADWExTAANYNwAvwJwABYAOd44OknIad5gAGne9gwADWHsAA1ifAANcTAACOLwAAAAEDwADWMcAA1xMAAAACAALAANY3AAAAhp1gA8AATKIBasAA1kdgA8AATKIawADWTgAAAIHIYAPAAEyiAWoAYAHAAE2sAgBgA6vxAT4DPSMcwADWZIHAANZdwAvw0ICMAQABKwDAAE3GicAA1l3AC/DQHMAA1nsWwADWbS6OGZ3rgQYBAAGAwADWfcAL8LQAwABNySsBYAPAAEyiPR7AANaQnJsDAAMWwADWpxbAANahLoOknIad5o4ZngSAwADWtsAL8LSBwADWxcAL8NAASsAA1tIBHsAA1t2roAMAAxbAANbyLoOknIad5oDAANb5wAvwtIHAANcIwAvw0AAGnfBgwADXGMAA1yHAANhKAACOMAAAAAEDwADXK8AA2EoAAAACAALAANcxAAAAhp1gA8AATKIBasAA10FgA8AATKIawADXSAAAAIHIYAPAAEyiAWoAYAHAAE2sAgBgA6wNAT4DPSMcwADXXoHAANdXwAvx5ICMAQABKwDAAE3GicAA11fAC/HkHMAA14ccwADXdhbAANdoLo4ZneuBBgEAAYDAANd4wAvxyADAAE3JhpIBAAFqwADXk2ADwABMohQAwABNzSsBYAPAAEyiPR7AANeonJsDAAMWwADXwi6OGZ3rgMAA19HAC/HIHMAA1+eBwADX4MAL8eSDxgEAAWrAANfyYAPAAEyiFADAAE3KAErAANgIAR7AANgTp54DAAMWwADYKS6DpJyGneaAwADYMMAL8ciBwADYP8AL8eQABp3xYMAA2E/AANhZwADZjgAAjjEAAAABA8AA2GTAANmOAAAAAgACwADYagAAAIadYAPAAEyiAWrAANh6YAPAAEyiGsAA2IEAAACByGADwABMogFqAGABwABNrAIAYAOsFwE+Az0jHMAA2JeBwADYkMAL8yOAjAEAASsAwABNxonAANiQwAvzIxzAANjIHMAA2LcWwADYqS6OGZ3rgQYBAAGAwADYucAL8wcAwABNyYaSAQABasAA2NVgA8AATKIUAMAATc0rAWADwABMoj0ewADY6pybAwADFsAA2QQujhmd64DAANkTwAvzBxzAANkpgcAA2SLAC/Mjg8YBAAFqwADZNWADwABMohQAwABNygBKwADZSwEewADZVqftAwADFsAA2W0ug6Schp3mgMAA2XTAC/MHgcAA2YPAC/MjAAad8mDAANmTwADZpMAA2vQAAI4yAAAAAQPAANm2wADa9AAAAAIAAsAA2bwAAACGnWADwABMogFqwADZzGADwABMohrAANnTAAAAgchgA8AATKIBagBgAcAATawCAGADrCIBPgM9IxzAANnpgcAA2eLAC/RigIwBAAErAMAATcaJwADZ4sAL9GIcwADaEhzAANoBFsAA2fMujhmd64EGAQABgMAA2gPAC/RGAMAATcmGkgEAAWrAANouYAPAAEyiFADAAE3NKwFgA8AATKI9HsAA2kOcmwMAAxbAANpULo4ZneuAwADaY8AL9EYcwADagYHAANp6wAv0YoPGAQABasAA2pRgA8AATKIUAMAATcoASsAA2qoBHsAA2rWoPAMAAxbAANrTLoOknIad5oDAANrawAv0RoHAANrpwAv0YgAGnfNgwADa+cAA2wPAANx9AACOMwAAAAEDwADbDsAA3H0AAAACAALAANsUAAAAhp1gA8AATKIBasAA2yRgA8AATKIawADbKwAAAIHIYAPAAEyiAWoAYAHAAE2sAgBgA6wsAT4EPSMcwADbQYHAANs6wAv1oYCMAQABKwDAAE3GicAA2zrAC/WhHMAA23IcwADbYRbAANtTLo4ZneuBBgEAAYDAANtjwAv1hQDAAE3JhpIBAAFqwADbf2ADwABMohYAwABNzSsBYAPAAEyiPR7AANuUnJsDAAMWwADbri6OGZ3rgMAA273AC/WFHMAA29OBwADbzMAL9aGDxgEAAWrAANvfYAPAAEyiFgDAAE3KAD0ewADb9ZycAgACgMAA3AvAC/WFasAA3CRgA8AATKIWAErAANw6AR7AANxFqIsDAAMWwADcXC6DpJyGneaAwADcY8AL9YWBwADccsAL9aEABp30YMAA3ILAANyNwADeDAAAjjQAAAABA8AA3JnAAN4MAAAAAgACwADcnwAAAIadYAPAAEyiAWrAANyvYAPAAEyiGsAA3LYAAACByGADwABMogFqAGABwABNrAIAYAOsNgE+BD0jHMAA3MyBwADcxcAL9wGAjAEAASsAwABNxonAANzFwAv3ARzAANz9HMAA3OwWwADc3i6OGZ3rgQYBAAGAwADc7sAL9uUAwABNyYaSAQABasAA3QtgA8AATKIWAMAATc0rAWADwABMoj0ewADdIJybAwADFsAA3Toujhmd64DAAN1JwAv25RzAAN1fgcAA3VjAC/cBg8YBAAFqwADdbGADwABMohYAwABNygA9HsAA3YKcnAIAAoDAAN2YwAv25WrAAN2yYAPAAEyiFgBKwADdyAEewADd06jbAwADFsAA3esug6Schp3mgMAA3fLAC/blgcAA3gHAC/cBAAad9WDAAN4RwADeG8AA35UAAI41AAAAAQPAAN4mwADflQAAAAIAAsAA3iwAAACGnWADwABMogFqwADePGADwABMohrAAN5DAAAAgchgA8AATKIBagBgAcAATawCAGADrEABPgQ9IxzAAN5ZgcAA3lLAC/hhgIwBAAErAMAATcaJwADeUsAL+GEcwADeihzAAN55FsAA3msujhmd64EGAQABgMAA3nvAC/hFAMAATcmGkgEAAWrAAN6XYAPAAEyiGADAAE3NKwFgA8AATKI9HsAA3qycmwMAAxbAAN7GLo4ZneuAwADe1cAL+EUcwADe64HAAN7kwAv4YYPGAQABasAA3vdgA8AATKIYAMAATcoAPR7AAN8NnJwCAAKAwADfI8AL+EVqwADfPGADwABMohgASsAA31IBHsAA312pKwMAAxbAAN90LoOknIad5oDAAN97wAv4RYHAAN+KwAv4YQAGnfZgwADfmsAA36XAAOEkAACONgAAAAEDwADfscAA4SQAAAACAALAAN+3AAAAhp1gA8AATKIBasAA38dgA8AATKIawADfzgAAAIHIYAPAAEyiAWoAYAHAAE2sAgBgA6xKAT4EPSMcwADf5IHAAN/dwAv5wYCMAQABKwDAAE3GicAA393AC/nBHMAA4BUcwADgBBbAAN/2Lo4ZneuBBgEAAYDAAOAGwAv5pQDAAE3JhpIBAAFqwADgI2ADwABMohgAwABNzSsBYAPAAEyiPR7AAOA4nJsDAAMWwADgUi6OGZ3rgMAA4GHAC/mlHMAA4HeBwADgcMAL+cGDxgEAAWrAAOCEYAPAAEyiGADAAE3KAD0ewADgmpycAgACgMAA4LDAC/mlasAA4MpgA8AATKIYAErAAODgAR7AAODrqXoDAAMWwADhAy6DpJyGneaAwADhCsAL+aWBwADhGcAL+cEABp33YMAA4SnAAOEzwADirQAAjjcAAAABA8AA4T7AAOKtAAAAAgACwADhRAAAAIadYAPAAEyiAWrAAOFUYAPAAEyiGsAA4VsAAACByGADwABMogFqAGABwABNrAIAYAOsVAE+BD0jHMAA4XGBwADhasAL+yGAjAEAASsAwABNxonAAOFqwAv7IRzAAOGiHMAA4ZEWwADhgy6OGZ3rgQYBAAGAwADhk8AL+wUAwABNyYaSAQABasAA4a9gA8AATKIcAMAATc0rAWADwABMoj0ewADhxJybAwADFsAA4d4ujhmd64DAAOHtwAv7BRzAAOIDgcAA4fzAC/shg8YBAAFqwADiD2ADwABMohwAwABNygA9HsAA4iWcnAIAAoDAAOI7wAv7BWrAAOJUYAPAAEyiHABKwADiagEewADidanJAwADFsAA4owug6Schp3mgMAA4pPAC/sFgcAA4qLAC/shAAad+GDAAOKywADivcAA5DwAAI44AAAAAQPAAOLJwADkPAAAAAIAAsAA4s8AAACGnWADwABMogFqwADi32ADwABMohrAAOLmAAAAgchgA8AATKIBagBgAcAATawCAGADrF4BPgQ9IxzAAOL8gcAA4vXAC/yBgIwBAAErAMAATcaJwADi9cAL/IEcwADjLRzAAOMcFsAA4w4ujhmd64EGAQABgMAA4x7AC/xlAMAATcmGkgEAAWrAAOM7YAPAAEyiHADAAE3NKwFgA8AATKI9HsAA41CcmwMAAxbAAONqLo4ZneuAwADjecAL/GUcwADjj4HAAOOIwAv8gYPGAQABasAA45xgA8AATKIcAMAATcoAPR7AAOOynJwCAAKAwADjyMAL/GVqwADj4mADwABMohwASsAA4/gBHsAA5AOqGAMAAxbAAOQbLoOknIad5oDAAOQiwAv8ZYHAAOQxwAv8gQAGnflgwADkQcAA5E3AAOXQAACOOQAAAAEDwADkWsAA5dAAAAACAALAAORgAAAAhp1gA8AATKIBasAA5HBgA8AATKIawADkdwAAAIHIYAPAAEyiAWoAYAHAAE2sAgBgA6xoAT4EPSMcwADkjYHAAOSGwAv94YCMAQABKwDAAE3GicAA5IbAC/3hHMAA5L4cwADkrRbAAOSfLo4ZneuBBgEAAYDAAOSvwAv9xQDAAE3JhpIBAAFqwADkzWADwABMohgAwABNzSsBYAPAAEyiPR7AAOTinJsDAAMWwADk8y6OGZ3rgMAA5QLAC/3FHMAA5SCBwADlGcAL/eGDxgEAAWrAAOUuYAPAAEyiGADAAE3KAD0ewADlRJycAgACgMAA5VrAC/3FasAA5XVgA8AATKIYAErAAOWLAR7AAOWWqmcDAAMWwADlry6DpJyGneaAwADltsAL/cWBwADlxcAL/eEABp36YMAA5dXAAOXhwADnZAAAjjoAAAABA8AA5e7AAOdkAAAAAgACwADl9AAAAIadYAPAAEyiAWrAAOYEYAPAAEyiGsAA5gsAAACByGADwABMogFqAGABwABNrAIAYAOscgE+BD0jHMAA5iGBwADmGsAL/0GAjAEAASsAwABNxonAAOYawAv/QRzAAOZSHMAA5kEWwADmMy6OGZ3rgQYBAAGAwADmQ8AL/yUAwABNyYaSAQABasAA5mFgA8AATKIcAMAATc0rAWADwABMoj0ewADmdpybAwADFsAA5ocujhmd64DAAOaWwAv/JRzAAOa0gcAA5q3AC/9Bg8YBAAFqwADmwmADwABMohwAwABNygA9HsAA5ticnAIAAoDAAObuwAv/JWrAAOcJYAPAAEyiHABKwADnHwEewADnKqq2AwADFsAA50Mug6Schp3mgMAA50rAC/8lgcAA51nAC/9BAAad+2DAAOdpwADnd8AA6QQAAI47AAAAAQPAAOeGwADpBAAAAAIAAsAA54wAAACGnWADwABMogFqwADnnGADwABMohrAAOejAAAAgchgA8AATKIBagBgAcAATawCAGADrHwBPgQ9IxzAAOe5gcAA57LADAChgIwBAAErAMAATcaJwADnssAMAKEcwADn6hzAAOfZFsAA58sujhmd64EGAQABgMAA59vADACFAMAATcmGkgEAAWrAAOf7YAPAAEyiVADAAE3NKwFgA8AATKI9HsAA6BCcmwMAAxbAAOghLo4ZneuAwADoMMAMAIUcwADoToHAAOhHwAwAoYPGAQABasAA6F5gA8AATKJUAMAATcoAPR7AAOh0nJwCAAKAwADoisAMAIVqwADop2ADwABMolQASsAA6L0BHsAA6MirAAMAAxbAAOjjLoOknIad5oDAAOjqwAwAhYHAAOj5wAwAoQAGnfxgwADpCcAA6RXAAOqYAACOPAAAAAEDwADpIsAA6pgAAAACAALAAOkoAAAAhp1gA8AATKIBasAA6ThgA8AATKIawADpPwAAAIHIYAPAAEyiAWoAYAHAAE2sAgBgA6yHAT4EPSMcwADpVYHAAOlOwAwCAYCMAQABKwDAAE3GicAA6U7ADAIBHMAA6YYcwADpdRbAAOlnLo4ZneuBBgEAAYDAAOl3wAwB5QDAAE3JhpIBAAFqwADplWADwABMolQAwABNzSsBYAPAAEyiPR7AAOmqnJsDAAMWwADpuy6OGZ3rgMAA6crADAHlHMAA6eiBwADp4cAMAgGDxgEAAWrAAOn2YAPAAEyiVADAAE3KAD0ewADqDJycAgACgMAA6iLADAHlasAA6j1gA8AATKJUAErAAOpTAR7AAOpeq0oDAAMWwADqdy6DpJyGneaAwADqfsAMAeWBwADqjcAMAgEABp39YMAA6p3AAOqrwADsOAAAjj0AAAABA8AA6rrAAOw4AAAAAgACwADqwAAAAIadYAPAAEyiAWrAAOrQYAPAAEyiGsAA6tcAAACByGADwABMogFqAGABwABNrAIAYAOskgE+BD0jHMAA6u2BwADq5sAMA2GAjAEAASsAwABNxonAAOrmwAwDYRzAAOseHMAA6w0WwADq/y6OGZ3rgQYBAAGAwADrD8AMA0UAwABNyYaSAQABasAA6y9gA8AATKJUAMAATc0rAWADwABMoj0ewADrRJybAwADFsAA61Uujhmd64DAAOtkwAwDRRzAAOuCgcAA63vADANhg8YBAAFqwADrkmADwABMolQAwABNygA9HsAA66icnAIAAoDAAOu+wAwDRWrAAOvbYAPAAEyiVABKwADr8QEewADr/KuUAwADFsAA7Bcug6Schp3mgMAA7B7ADANFgcAA7C3ADANhAAAAC+8BAAvvagAL77QAC/AAAAvwjQAL8aEAC/LgAAv0HwAL9V4AC/a+AAv4HgAL+X4AC/reAAv8PgAL/Z4AC/7+AAwAXgAMAb4ADAMeAAwEfgAAABMCngBgwADsPcAA7EzAAPogB44+AAABYAOcnQAAAAEFniUAAAAABAAAAwAAAAAAAAAAAGADngABPwEJAQCcsQAAAAAgBp4CYMAA7HLAAOx6wADsjAECjhQAAAABA8AA7IzAAOyMAAAAAAAAAGADwABMogAGngNgwADs1MAA7NzAAOz8AQCGnQAAAAEDwADs6sAA7PwAAAAAAAAAYAPAAEyiAT4BSsAA7PABkwaeBGDAAO0BwADtCcAA7UMBAI4ZAAAAAQPAAO0XwADtQwAAAAAAAABgA8AATKIBPgFKwADtHQEcwADtKxbAAO0kLoHIngaDxgEAARbAAO0tLo4UngIAwABNygaeBWDAAO1IwADtWMAA7XcBAIHBAAAAAQPAAO1fwADtdwAAAAAAAABgA53jAUrAAO1iAR/AAO1mnf8BAAEuAAaeBmDAAO2xwADuC8AA7isBBIHIA2rAAO2yYAPAAEqfg3JqwADt5mADwABKn4K6agBgA5QIlMsAAAEDwADuEsAA7isAAAAAAAAAYAPAAEyiAAaeCWDAAO5QwADuiMAA7r4ABI5AnIYCasAA7lFgA8AASp+DcmoAYAOUCJTXAAABA8AA7pDAAO6+AAAAAQEBwADulQAAAIadYAPAAEyiAABgA8AATKIABp4KYMAA7sLAAO7HwADvCAAEjkKchgFqAGADlAiU4wAAAQPAAO7PwADvCAAAAAICAsAA7tQAAACGnWADwABMogDAAO7nAAAAImADwABMogAAXAAGngtgwADvDcAA70XAAO99AASORJyGAmrAAO8OYAPAAEqfg3JqAGADlAiU7wAAAQPAAO9OwADvfQAAAAEBAcAA71MAAACGnWADwABMogAAYAPAAEyiAAaeDGDAAO+BwADvhsAA78kABI5GnIYBagBgA5QIlPsAAAEDwADvj8AA78kAAAACAgLAAO+UAAAAhp1gA8AATKIAwADvpwAAACJgA8AATKIAAFwABp4NYMAA787AAPAGwADwPgAEjkichgJqwADvz2ADwABKn4NyagBgA5QIlQcAAAEDwADwD8AA8D4AAAABAQHAAPAUAAAAhp1gA8AATKIAAGADwABMogAGng5gwADwQsAA8EfAAPCKAASOSpyGAWoAYAOUCJUTAAABA8AA8FDAAPCKAAAAAgICwADwVQAAAIadYAPAAEyiAMAA8GgAAAAiYAPAAEyiAABcAAaeD2DAAPCPwADwx8AA8QEABI5MnIYCasAA8JBgA8AASp+DcmoAYAOUCJUfAAABA8AA8NHAAPEBAAAAAQEBwADw1gAAAIadYAPAAEyiAABgA8AATKIABp4QYMAA8QXAAPEKwADxTwAEjk6chgFqAGADlAiVKwAAAQPAAPEUwADxTwAAAAICAsAA8RkAAACGnWADwABMogDAAPEsAAAAImADwABMogAAXAAGnhFgwADxVMAA8VjAAPGQAASOUJyGAWoAYAOUCJU3AAABA8AA8WHAAPGQAAAAAQEBwADxZgAAAIadYAPAAEyiAABgA8AATKIABp4SYMAA8ZTAAPGZwADx3AAEjlKchgFqAGADlAiVQwAAAQPAAPGiwADx3AAAAAICAsAA8acAAACGnWADwABMogDAAPG6AAAAImADwABMogAAXAAGnhNgwADx4cAA8eXAAPIfAASOVJyGAWoAYAOUCJVPAAABA8AA8e/AAPIfAAAAAQEBwADx9AAAAIadYAPAAEyiAABgA8AATKIABp4UYMAA8iPAAPIowADybQAEjlachgFqAGADlAiVWwAAAQPAAPIywADybQAAAAICAsAA8jcAAACGnWADwABMogDAAPJKAAAAImADwABMogAAXAAGnhVgwADycsAA8nbAAPKuAASOWJyGAWoAYAOUCJVnAAABA8AA8n/AAPKuAAAAAQEBwADyhAAAAIadYAPAAEyiAABgA8AATKIABp4WYMAA8rLAAPK3wADy+gAEjlqchgFqAGADlAiVcwAAAQPAAPLAwADy+gAAAAICAsAA8sUAAACGnWADwABMogDAAPLYAAAAImADwABMogAAXAAGnhdgwADy/8AA8wPAAPM9AASOXJyGAWoAYAOUCJV/AAABA8AA8w3AAPM9AAAAAQEBwADzEgAAAIadYAPAAEyiAABgA8AATKIABp4YYMAA80HAAPNG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2IGe0sAMUH5uAAAAAAA/PTCe4B6e+5b8AAAAAAaekmCfD58ToREAAIHbAAAAAQOfHqERAAAAAgEBnyQAAACBG2EDAWADwABMomADwABK2AABnzwAACCB2WEDAGADwABMogFqAGABwABNrAJgA8AATKIBPgdOn1GfWAAAgOZbAStOn2mfdwAAhBRgA8AAStgBKk6fiJ+MAACOH2ADwABMogEWn5MugcjAAE12RZ+fAZ+on6oAAINmYAPAAEyiAZMBHJ+xhZ+vwAxSM4C7AQABhJ+zwAxSFgDAAE3QAY2fusAMUjMcn7iFn7rADFIzgQ0BAAGUAMAATcg+Ak6fyZ/RAACBvGADwABMogEcn9cugtEBAAGFn9jADFIzAMAATVVJn+Icn+qAn+bADFG9bgEAAYaf68AMUn8AAD4DSZ//g6ADwAxSBT4BPTCgHh6gOZb9AAAAAD89iqBWwAxR+YagX8AMUn89i6BwwAxSBSk/SaCYg6CcwAxSBUqgqwEmoKsFgqCywAxR+WADwABMoj9JoL4hHKDJgaDCwAxR1YCMAQABKwDAAE38SqDSARyg34Gg2cAMUdVuAAAAAAA/PTCg5x6hApb8AAAAAAaek2ChFqEaoUsAAIHcAAAAAQOhI6FLAAAAAQEBoSgAAACB3WADwABMogAAYAPAAEyiAT4BSqE1ARyhQC6C0QEAAYChQcAMU2oAwABNVQaelGChUKFVoa0AAICCAAAAAQOhWKGtAAAAAQEBoV0AACAiYAPAAEyiAABcAT4BPTChah+hdMAATDABAAEnisUABp6VYKGyobeiHAAAg2sAAAABA6G9ohwAAAABAQGhzAAAICJdA8AATQQBYAPAAEyiAABcAT4BPTCh2R+h48AATDABAAEnisUABp6WYKIhoiaikQAAhHQAAAABA6IsopEAAAACAgKiMQAAAIHdYAPAAEyiAKI8AAAgImADwABMogAAXAE+AT0wokkfolPAAEwwAQABJ44gAAael2CilqKboxQAAIR2AAAAAQOipKMUAAAAAgICoqkAAACB3WADwABMogCivgAAIIEBXQPAAE0EAWADwABMogAAXAE+AT0woswfotbAAEwwAQABJ44gAAaemGCjGaMeo3gAAIRZAAAAAQOjIqN4AAAAAQABoygAAACEWmEDAmADwABMomADwABMomADwABMogFqAGAB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AICCAAAAAQOhWKGtAAAAAQEBoV0AACAiYAPAAEyiAABcAT4BPTChah+hdMAATDABAAEnisUABp7kYKGyobeiHAAAg2sAAAABA6G9ohwAAAABAQGhzAAAICJdA8AATQQBYAPAAEyiAABcAT4BPTCh2R+h48AATDABAAEnisUABp7lYKIhoiaikQAAhHQAAAABA6IsopEAAAACAgKiMQAAAIHdYAPAAEyiAKI8AAAgImADwABMogAAXAE+AT0wokkfolPAAEwwAQABJ44gAAae5mCilqKboxQAAIR2AAAAAQOipKMUAAAAAgICoqkAAACB3WADwABMogCivgAAIIEBXQPAAE0EAWADwABMogAAXAE+AT0woswfotbAAEwwAQABJ44gAAae52CjGaMeo3gAAIRZAAAAAQOjIqN4AAAAAQABoygAAACEWmEDAmADwABMomADwABMomADwABMogFqAGABwABNrAIAXAE+AT0eo0uXkgIBYAPAAEyiAi41o1YAAAEAYQMCYAPAAEyiYAPAAEyiYAPAAEyiAYCjVsAMgHkjHKNWgaNWwAyAtYCMAQABKwDAAE38aqNsYQMCXQPAAErkAVtdA8AASuQBW2ADwABMooQlgaNWwAyAtQFhAwJgA8AATKJgA8AATKJgA8AATKIABp7oYKN9o4GkfAAAhHAAAAABA6OIpHwAAAACAQKjjQAAIIG8YAPAAEyiAKObAAAAbWADwABMogFqo6NgA8AATKIaAGADwABMogE+A0mjrRyjt4GjscAMgVWBXgEAARajvy6ByMAATXYAwABN0z4BSqPPARyj1pSD6wAAAADAAEzFSaPlHKPvgaPpwAyBVYC7AQABkwDAAE3QPgE9iaP8wAyBVZM/RaQRAaQapBwAAINmYAPAAEyiAYGkHsAMgVUBHKQngqQlwAyB04C7AQABFqQuLoHIwABNdgDAAE3QAYqkNsAMgdMcpDeCpDbADIHTgQ0BAAGUAMAATcg+AUmkQxykTxykSy6C0QEAAYKkTMAMgdMAwABNVYCMAQABgKRSwAyBRwDAAE3GSqRbAYKkYsAMgdM/SqRvARykdpSD6wAAAADAAEzFBp7pYKSBpIWlnQAAhHIAAAABA6SQpZ0AAAACAQKklQAAIIG8YAPAAEyiAKSjAAAAbWADwABMogFqpKtgAcAATawCAGADwABMogE+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o8AMofEcmbKAmavADKGJbgIAAoKZs8AMofEcmb4ugtEBAAGDmb/ADKISAMAATVUAAEqZzgGCmdXADKHxBp8pYJnjmeWavAAAgb0AAAABA5nsmrwAAAEAAAQhYAPAAE3vAVsCAgKZ7wAAAIG+XwMAAACZ/wAAAIG6YQMCXwMAAGADwABMol8DAAAAAF8DAAABPgNOmi+aMwAAjh9gA8AATKIBFpo6LoHIwABNdkWaRgGaT5pRAACDZmADwABMogGTARyaWIOaVsAMoxCAuwEAAYKaWsAMovMAwABN0AGLmmHADKMQHJpfg5phwAyjEIENAQABlADAAE3IPgE9iJpswAyixRyagoGae8AMotFuAgACgJqDwAyixRyalS6C0QEAAYOalsAMoxAAwABNVQAASpqlAYCarMAMosUGnypgmsGazZsMAACBqwAAAAEDmtObDAAAAQAABCFgA8AATe8BWwEBAZrWAAAAUGEDAWADwABMol8DAAAAAF0DwABNBAFfAwAAAUqa6QEemu2V4AICYAPAAEyiXwMAAAIugJsKwAyjwwAGnytgmxGbHZtvAACBswAAAAEDmyabbwAAAQAABCFgA8AATe8BWwEBAZszAAAAUGEDAWADwABMol0DwABNBAFfAwAAAABdA8AATQQBXwMAAAFKm0wBH5tQliUCAmADwABMol8DAAACLoCbbcAMpCwABp8sYJt0m3mcEwAAgccAAAABA5t+nBMAAAABAQGbhAAAAFBhAwFgA8AATKJgA8AAStgAAGADwABK2AE+A06bnpuiAACOH2ADwABMogEWm6kugcjAAE12RZu1AZu+m8AAAINmYAPAAEyiAZMBHJvHgpvFwAykzoC7AQABgZvJwAyksQDAAE3QAYqb0MAMpM4cm86Cm9DADKTOgQ0BAAGUAMAATcg+AUmb2yEcm+GAm+DADKSQbgEAARyb5i6C0QEAAYKb58AMpM4AwABNVQAASpvsASo/SpwEASkGny1gnBicHZy0AACBDgAAAAEDnCCctAAAAAEBAZwmAAAAUGEDAWADwABMomADwABK2AAAYAPAAErYAT4DTpxAnEQAAI4fYAPAAEyiARacSy6ByMAATXZFnFcBnGCcYgAAg2ZgA8AATKIBkwEcnGmCnGfADKWogLsBAAGBnGvADKWLAMAATdABipxywAylqByccIKccsAMpaiBDQEAAZQAwABNyD4BSZx9HJyCgJyBwAylam4BAAEcnIcugtEBAAGCnIjADKWoAMAATVUAAEqcjQEpP0qcpAEqBp8uYJy5nL2d1AAAgdgAAAABA5zHndQAAAACAQGczQAAAIEbYQMBYAPAAEyiYAPAAErYAAGc5QAAIIHZYQMAYAPAAEyiAWoAYAHAAE2sAmADwABMogE+BE6c+pz+AACOH2ADwABMogEWnQUugcjAAE12RZ0RAZ0anRwAAINmYAPAAEyiAZMBHJ0jg50hwAymnIC7AQABgp0lwAymfwDAAE3QAYudLMAMppwcnSqDnSzADKacgQ0BAAGUAMAATcg+Ak6dO51DAACBvGADwABMogEcnUkugtEBAAGDnUrADKacAMAATVVJnVQcnVyAnVjADKZDbgEAAYSdXcAMpugAAEqdZwGEnW7ADKboP0mdgSEcnYyBnYXADKZbgIwBAAErAMAATfxKnZUBHJ2igZ2cwAymW24AAAAAAD89MJ2qHp3FlvwAAAAABp8vYJ3Znd2fCgAAgdoAAAABA53mnwoAAAACAQGd7AAAAIEbYQMBYAPAAEyiYAPAAErYAAGeBAAAIIHZYQMAYAPAAEyiAWoAYAHAAE2sAmADwABMogE+BE6eGZ4dAACOH2ADwABMogEWniQugcjAAE12RZ4wAZ45njsAAINmYAPAAEyiARyeQYKePcAMp8aBBgEAAZQAwABNyQEcnkiDnkbADKfjgV4BAAGTAMAATdMBi55QwAyn4xyeToOeUMAMp+OBBgEAAZQAwABNyT4CTp5fnmcAAIG8YAPAAEyiARyebS6C0QEAAYOebsAMp+MAwABNVUmeeByegICefMAMp4puAQABhJ6BwAyoPQAAPgFKnpUBhJ6cwAyoPT9JnrchHJ7CgZ67wAynooCMAQABKwDAAE38Sp7LARye2IGe0sAMp6JuAAAAAAA/PTCe4B6e+5b8AAAAAAafMGCfD58ToREAAIHbAAAAAQOfHqERAAAAAgEBnyQAAACBG2EDAWADwABMomADwABK2AABnzwAACCB2WEDAGADwABMogFqAGABwABNrAJgA8AATKIBPgdOn1GfWAAAgOZbAStOn2mfdwAAhBRgA8AAStgBKk6fiJ+MAACOH2ADwABMogEWn5MugcjAAE12RZ+fAZ+on6oAAINmYAPAAEyiAZMBHJ+xhZ+vwAypV4C7AQABhJ+zwAypOgDAAE3QAY2fusAMqVccn7iFn7rADKlXgQ0BAAGUAMAATcg+Ak6fyZ/RAACBvGADwABMogEcn9cugtEBAAGFn9jADKlXAMAATVVJn+Icn+qAn+bADKjhbgEAAYaf68AMqaMAAD4DSZ//g6ADwAypKT4BPTCgHh6gOZb9AAAAAD89iqBWwAypHYagX8AMqaM9i6BwwAypKSk/SaCYg6CcwAypKUqgqwEmoKsFgqCywAypHWADwABMoj9JoL4hHKDJgaDCwAyo+YCMAQABKwDAAE38SqDSARyg34Gg2cAMqPluAAAAAAA/PTCg5x6hApb8AAAAAAafMWChFqEaoUsAAIHcAAAAAQOhI6FLAAAAAQEBoSgAAACB3WADwABMogAAYAPAAEyiAT4BSqE1ARyhQC6C0QEAAYChQcAMqo4AwABNVQafMmChUKFVoa0AAICCAAAAAQOhWKGtAAAAAQEBoV0AACAiYAPAAEyiAABcAT4BPTChah+hdMAATDABAAEnisUABp8zYKGyobeiHAAAg2sAAAABA6G9ohwAAAABAQGhzAAAICJdA8AATQQBYAPAAEyiAABcAT4BPTCh2R+h48AATDABAAEnisUABp80YKIhoiaikQAAhHQAAAABA6IsopEAAAACAgKiMQAAAIHdYAPAAEyiAKI8AAAgImADwABMogAAXAE+AT0wokkfolPAAEwwAQABJ44gAAafNWCilqKboxQAAIR2AAAAAQOipKMUAAAAAgICoqkAAACB3WADwABMogCivgAAIIEBXQPAAE0EAWADwABMogAAXAE+AT0woswfotbAAEwwAQABJ44gAAafNmCjGaMeo3gAAIRZAAAAAQOjIqN4AAAAAQABoygAAACEWmEDAmADwABMomADwABMomADwABMogFqAGABwABNrAIAXAE+AT0eo0uXkgIBYAPAAEyiAi41o1YAAAEAYQMCYAPAAEyiYAPAAEyiYAPAAEyiAYCjVsAMrAsjHKNWgaNWwAysR4CMAQABKwDAAE38aqNsYQMCXQPAAErkAVtdA8AASuQBW2ADwABMooQlgaNWwAysRwFhAwJgA8AATKJgA8AATKJgA8AATKIABp83YKN9o4GkfAAAhHAAAAABA6OIpHwAAAACAQKjjQAAIIG8YAPAAEyiAKObAAAAbWADwABMogFqo6NgA8AATKIaAGADwABMogE+A0mjrRyjt4GjscAMrOeBXgEAARajvy6ByMAATXYAwABN0z4BSqPPARyj1pSD6wAAAADAAEzFSaPlHKPvgaPpwAys54C7AQABkwDAAE3QPgE9iaP8wAys55M/RaQRAaQapBwAAINmYAPAAEyiAYGkHsAMrOcBHKQngqQlwAytZYC7AQABFqQuLoHIwABNdgDAAE3QAYqkNsAMrWUcpDeCpDbADK1lgQ0BAAGUAMAATcg+AUmkQxykTxykSy6C0QEAAYKkTMAMrWUAwABNVYCMAQABgKRSwAys2QDAAE3GSqRbAYKkYsAMrWU/SqRvARykdpSD6wAAAADAAEzFBp84YKSBpIWlnQAAhHIAAAABA6SQpZ0AAAACAQKklQAAIIG8YAPAAEyiAKSjAAAAbWADwABMogFqpKtgAcAATawCAGADwABMogE+A0mkuCIcpMKBpLzADK4ugIwBAAErAMAATcYBHKTTgaTNwAyuLoFeAQABFqTbLoHIwABNdgDAAE3TPgE9iaTrwAyuLhyk/xak+C6ByMAATXaBBgEAAZQAwABNyUmlDxylGYGlE8AMri6AuwEAAZMAwABN0D4BSqUmARylLZSD6wAAAADAAEzFP0WlOwGlRKVGAACDZmADwABMogGBpUjADK4uARylUYKlT8AMrtqBXgEAAZMAwABN0wGKpVfADK7aHKVYgqVXwAyu2oEGAQABlADAAE3JPgFJpWQcpXAcpWwugtEBAAGCpW3ADK7aAMAATVWAjAEAAYClc8AMriAAwABNxkqlfAGCpYPADK7aP0qlkAEcpZeUg+sAAAAAwABMxQafOWCloqWmpgEAAIQvAAAAAQOlsKYBAAAAAAAAAGADwABMogE+AT0wpbkfpcPAAEwwAQABJ4rHAAafOmCmBqYKpmwAAIR1AAAAAQOmEqZsAAAAAQEBphcAAACB3WADwABMogAAYAPAAEyiAT4BPTCmJB+mLsAATDABAAEniscABp87YKZxpnam6AAAg5UAAAABA6aBpugAAAABAQGmhwAAAIEbYQMBYAPAAEyiYAPAAErYAABcAT4BPTCmoB+mqsAATDABAAEniscABp88YKbtpvKnZAAAg5YAAAABA6b9p2QAAAABAQGnAwAAAIEbYQMBYAPAAEyiYAPAAErYAABc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2IGe0sAM1hZuAAAAAAA/PTCe4B6e+5b8AAAAAAafgmCfD58ToREAAIHbAAAAAQOfHqERAAAAAgEBnyQAAACBG2EDAWADwABMomADwABK2AABnzwAACCB2WEDAGADwABMogFqAGABwABNrAJgA8AATKIBPgdOn1GfWAAAgOZbAStOn2mfdwAAhBRgA8AAStgBKk6fiJ+MAACOH2ADwABMogEWn5MugcjAAE12RZ+fAZ+on6oAAINmYAPAAEyiAZMBHJ+xhZ+vwAzXy4C7AQABhJ+zwAzXrgDAAE3QAY2fusAM18scn7iFn7rADNfLgQ0BAAGUAMAATcg+Ak6fyZ/RAACBvGADwABMogEcn9cugtEBAAGFn9jADNfLAMAATVVJn+Icn+qAn+bADNdVbgEAAYaf68AM2BcAAD4DSZ//g6ADwAzXnT4BPTCgHh6gOZb9AAAAAD89iqBWwAzXkYagX8AM2Bc9i6BwwAzXnSk/SaCYg6CcwAzXnUqgqwEmoKsFgqCywAzXkWADwABMoj9JoL4hHKDJgaDCwAzXbYCMAQABKwDAAE38SqDSARyg34Gg2cAM121uAAAAAAA/PTCg5x6hApb8AAAAAAafg2ChFqEaoUsAAIHcAAAAAQOhI6FLAAAAAQEBoSgAAACB3WADwABMogAAYAPAAEyiAT4BSqE1ARyhQC6C0QEAAYChQcAM2QIAwABNVQafhGChUKFVoa0AAICCAAAAAQOhWKGtAAAAAQEBoV0AACAiYAPAAEyiAABcAT4BPTChah+hdMAATDABAAEnisUABp+FYKGyobeiHAAAg2sAAAABA6G9ohwAAAABAQGhzAAAICJdA8AATQQBYAPAAEyiAABcAT4BPTCh2R+h48AATDABAAEnisUABp+GYKIhoiaikQAAhHQAAAABA6IsopEAAAACAgKiMQAAAIHdYAPAAEyiAKI8AAAgImADwABMogAAXAE+AT0wokkfolPAAEwwAQABJ44gAAafh2CilqKboxQAAIR2AAAAAQOipKMUAAAAAgICoqkAAACB3WADwABMogCivgAAIIEBXQPAAE0EAWADwABMogAAXAE+AT0woswfotbAAEwwAQABJ44gAAafiGCjGaMeo3gAAIRZAAAAAQOjIqN4AAAAAQABoygAAACEWmEDAmADwABMomADwABMomADwABMogFqAGAB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DOgxCACBBgEAAYCxy8AM48gAwABNyQDAAE1VAMAATVZKseUAPz9OsgUAAACEaF0DwABNRgFbAE6yGAAAAIRpYAPAAEyiAEmyKCWyMQCCsizADOPjXQPAAE1GAWADwABMoj4CPY2yR8AM6NcUslPADOPjAgFdA8AATUYBYAPAAEyiPY6yX8AM6OiDsmzADOP4PgI9jbKKwAzo1xyyqxyym4KylsAM4+OB0QEAAYOyoMAM4/gAwABNHoHKAQAAAYQPKsAATRo9jrLKwAzo6JNJsuQcsvscsvOGsujADOjogQ0BAAGEsvXADOTPAMAATciCjAEAARazB4Wy/cAM6NeByMAATXYAwABN0j4BPTCzFx6zMpb+AAAAAD89HrNMk+oFAAWFs1HADOjXhrNcwAzo6C6As27ADOPIhLN1wAzkzwAGn6Vgs4SzkLR9AACEYQAAAAEDs5e0fQAAAAIBArOcAAAAbWADwABMogCzqAAAAIRUYAPAAEyiAWoAYAHAAE2sAgBgA6w2AT4FPYmztMAM6hoes8XAAEvfAwADgLPVwAzqDYGz3MAM6hoWs+YugcjAAE12AE6z97P+AACByGADwABMogEctASBtADADOoagQYBAAGAtAbADOoNAMAATclOtB20JAAAgOZgA6w2ARy0Ji6OI5yGAQABgrQywAzqZQCc7D0ctEaDtD/ADOqQhFgEAASTgrRSwAzqZS6AtGDADOoNAMAATWtKtGwBg7RzwAzqkAAADOMOAAzjeAAM46sADOnwAAzq4gAAAAQCn6hgwAEQ+cABERnAARcbA46HAWrAARD6YAPAAEqfAwABYAOfnwABYAOsNgAACQafq2DAARGNwAERlcABEdAEAYtfnIYAAAABA8ABEbDAARHQAAAAAAAAAGADn6gBPgE9MMABEbkni2AGn61gwAESBcABEkbAARLjAwCC0QFqwAESBmADwABKn4NyAAABA8ABEkjAARLjAAAAAQEBwAESTQAAAIHdYAPAAEyiAABgA8AATKIBPgJJwAESWiIcwAESZIDAARJewAzrmIC7AQABkwDAAE3QARzAARJxgMABEmvADOuYgV4BAAEWwAESdC6ByJ4GAMAATdM+AT0wwAEShB/AARKOwABL9AMAA4DAARKfwAzrmC4ngd0AP0rAARLAARzAARLHLo6InIYBAAGAwAES2cAM65gAn7IGn65gwAES6MABEvbAAROqAwCBDAAAAAEDwAES+cABE6oAAAACAgLAARL+AAAAgd1gA8AATKIAwAETCQAAICJgA8AATKIAAFwBPgJJwAETFiIcwAETIIDAARMawAzsXYC7AQABkwDAAE3QARzAARMtgMABEyfADOxdgV4BAAEWwAETMC6ByJ4GAMAATdM+AT0wwAETQB/AARNKwABL9AMAA4DAARNbwAzsXS4ngd0APz0cwAETfC6OiZyGAgACgMABE47ADOxdHsABE5WclwEAAYHAAROfwAzsbQAAn7MGn69gwAETr8ABE7TAARVVAACEWAAAAAEDwAETvMABFVUAAAAEAwTAARPBAAAAbWADwABMogDAARPMAAAAhFRgA8AATKIAwAET2gAAIIQiXQPAAE0EAVsAwAET6QAAAIRnYAPAAEyiAWrAARP1YAPAAEyiGgBcAT4BScABE/8lwAEUDACCwAEUA8AM7VpgA5P9PgQ9icABFCLADO1KHsABFDPAAEvfAwADgMABFEPADO07gcABFErADO1KFsABFFQugcieBgBOwAEUZ8ABFG4AAIHIYAPAAEyiARzAARR0gcABFHDADO1KgQYBAAGAwAEUdsAM7TsAwABNyU7AARSHwAEUkQAAjnVgA8AATKIBHMABFKYWwAEUmC6GnZy1gQ0BAAEcwAEUroDAARSowAztO4PGAQABasABFLtgA8AATKIWAMAATcoAwABNyD0cwAEU0i6OdJyGBAAEFMABFODADO1aAgFgA5P9hcABFOrADO4QhMABFPXADO3bg8ABFP3ADO1sAJ4jPgE9HcABFSKEWAQABIDAARUrwAztO4HAARUywAztSibAARU3AYLAARU3wAztWl0DwABNBAFgA8AATKKDwAEVQcAM7WwAnO0Gn7ZgwAEVj8ABFZfAARXVAQCOFAAAAAEDwAEVqsABFdUAAAAAAAAAYAPAAEyiAT4BSsABFbABasABFcJgA8AATKIWBp+xYMABFfnAARYEwAEWQwAAjiOchgAAAAEDwAEWD8ABFkMAAAABAQHAARYUAAAAgchgA8AATKIAAGADrDYBPgFKwAEWIgEewAEWLaw6AQABgMABFjjADO9OAAafsmDAARZIwAEWTMABFqgAAI6InIYAAAABA8ABFl3AARaoAAAAAQEBwAEWYgAAAIHdYAPAAEyi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YAPAAEyiAKI8AAAgImADwABMogAAXAE+AT0wokkfolPAAEwwAQABJ44gAAaf2WCilqKboxQAAIR2AAAAAQOipKMUAAAAAgICoqkAAACB3WADwABMogCivgAAIIEBXQPAAE0EAWADwABMogAAXAE+AT0woswfotbAAEwwAQABJ44gAAaf2mCjGaMeo3gAAIRZAAAAAQOjIqN4AAAAAQABoygAAACEWmEDAmADwABMomADwABMomADwABMogFqAGABwABNrAIAXAE+AT0eo0uXkgIBYAPAAEyiAi41o1YAAAEAYQMCYAPAAEyiYAPAAEyiYAPAAEyiAYCjVsANCPMjHKNWgaNWwA0JL4CMAQABKwDAAE38aqNsYQMCXQPAAErkAVtdA8AASuQBW2ADwABMooQlgaNWwA0JLwFhAwJgA8AATKJgA8AATKJgA8AATKIABp/bYKN9o4GkfAAAhHAAAAABA6OIpHwAAAACAQKjjQAAIIG8YAPAAEyiAKObAAAAbWADwABMogFqo6NgA8AATKIaAGADwABMogE+A0mjrRyjt4GjscANCc+BXgEAARajvy6ByMAATXYAwABN0z4BSqPPARyj1pSD6wAAAADAAEzFSaPlHKPvgaPpwA0Jz4C7AQABkwDAAE3QPgE9iaP8wA0Jz5M/RaQRAaQapBwAAINmYAPAAEyiAYGkHsANCc8BHKQngqQlwA0KTYC7AQABFqQuLoHIwABNdgDAAE3QAYqkNsANCk0cpDeCpDbADQpNgQ0BAAGUAMAATcg+AUmkQxykTxykSy6C0QEAAYKkTMANCk0AwABNVYCMAQABgKRSwA0JwQDAAE3GSqRbAYKkYsANCk0/SqRvARykdpSD6wAAAADAAEzFBp/cYKSBpIWlnQAAhHIAAAABA6SQpZ0AAAACAQKklQAAIIG8YAPAAEyiAKSjAAAAbWADwABMogFqpKtgAcAATawCAGADwABMogE+A0mkuCIcpMKBpLzADQsWgIwBAAErAMAATcYBHKTTgaTNwA0LFoFeAQABFqTbLoHIwABNdgDAAE3TPgE9iaTrwA0LFhyk/xak+C6ByMAATXaBBgEAAZQAwABNyUmlDxylGYGlE8ANCxaAuwEAAZMAwABN0D4BSqUmARylLZSD6wAAAADAAEzFP0WlOwGlRKVGAACDZmADwABMogGBpUjADQsW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AwCC0QAAAAEDwAEZZsABGgAAAAABAQHAARlrAAAAgd1gA8AATKIAAGADwABMogE+AknAARl4IhzAARmCgMABGXzADRn/gLsBAAGTAMAATdABHMABGY+AwAEZicANGf+BXgEAARbAARmSLoHIngYAwABN0z4BPTDAARmiH8ABGazAAEv0AwADgMABGb3ADRn/LieB3QA/SsABGd4BHMABGeUujo2chgEAAYDAARn2wA0Z/wCgAwagAGDAARoFwAEaE8ABGsUDAIEMAAAAAQPAARoWwAEaxQAAAAICAsABGhsAAACB3WADwABMogDAARomAAAgImADwABMogAAXAE+AknAARozIhzAARo9gMABGjfADRrEgLsBAAGTAMAATdABHMABGkqAwAEaRMANGsSBXgEAARbAARpNLoHIngYAwABN0z4BPTDAARpdH8ABGmfAAEv0AwADgMABGnjADRrELieB3QA/PRzAARqZLo6OnIYCAAKAwAEaqsANGsQewAEasZyYAQABgcABGrrADRrUAACgBAagB2DAARr7wAEbA8ABG0ABAI4UAAAAAQPAARsWwAEbQAAAAAAAAABgA8AATKIBPgFKwAEbHAFqwAEbLWADwABMohgGoAJgwAEbZMABG27AARusAACOI5yGAAAAAQPAARt5wAEbrAAAAAEBAcABG34AAACByGADwABMogAAYAOsQAE+AUrAARuMAR7AARuXrEQBAAGAwAEbocANG+cABqADYMABG7HAARu1wAEcDgAAjo2chgAAAAEDwAEbxcABHA4AAAABAQHAARvKAAAAgd1gA8AATKIAAGADwABMogE+AUrAARvXARzAARveLo5QnIYBAAEcwAEb7oDAARvowA0cQoPGAQABasABG/pgA8AATKIYAMAATcoAnhEGoARgwAEcE8ABHBjAARx8AACOjpyGAAAAAQPAARwowAEcfAAAAAICAsABHC0AAACB3WADwABMogDAARw4AAAAImADwABMogAAXAE+AT0cwAEcRS6OUpyGAgACHMABHFWAwAEcT8ANHL+DxgEAAWrAARxhYAPAAEyiGADAAE3KgcABHHLADRzPAJ4SBqAFYMABGG/AARhvAAAQhGoAnKqcqgEDAAAAAAADAwMAAAAAbWADwABMogAAAAAAhFRgA8AATKIAAAAAIIQiXQPAAE0EAVsAAFwB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wABK2AE+A06cQJxEAACOH2ADwABMogEWnEsugcjAAE12RZxXAZxgnGIAAINmYAPAAEyiAZMBHJxpgpxnwA0vJYC7AQABgZxrwA0vCADAAE3QAYqccsANLyUcnHCCnHLADS8lgQ0BAAGUAMAATcg+AUmcfRycgoCcgcANLuduAQABHJyHLoLRAQABgpyIwA0vJQDAAE1VAABKnI0BKT9KnKQBKgagI2CcuZy9ndQAAIHYAAAAAQOcx53UAAAAAgEBnM0AAACBG2EDAWADwABMomADwABK2AABnOUAACCB2WEDAGADwABMogFqAGABwABNrAJgA8AATKIBPgROnPqc/gAAjh9gA8AATKIBFp0FLoHIwABNdkWdEQGdGp0cAACDZmADwABMogGTARydI4OdIcANMBmAuwEAAYKdJcANL/wAwABN0AGLnSzADTAZHJ0qg50swA0wGYENAQABlADAAE3IPgJOnTudQwAAgbxgA8AATKIBHJ1JLoLRAQABg51KwA0wGQDAAE1VSZ1UHJ1cgJ1YwA0vwG4BAAGEnV3ADTBlAABKnWcBhJ1uwA0wZT9JnYEhHJ2MgZ2FwA0v2ICMAQABKwDAAE38Sp2VARydooGdnMANL9huAAAAAAA/PTCdqh6dxZb8AAAAAAagJGCd2Z3dnwoAAIHaAAAAAQOd5p8KAAAAAgEBnewAAACBG2EDAWADwABMomADwABK2AABngQAACCB2WEDAGADwABMogFqAGABwABNrAJgA8AATKIBPgROnhmeHQAAjh9gA8AATKIBFp4kLoHIwABNdkWeMAGeOZ47AACDZmADwABMogEcnkGCnj3ADTFDgQYBAAGUAMAATckBHJ5Ig55GwA0xYIFeAQABkwDAAE3TAYueUMANMWAcnk6DnlDADTFggQYBAAGUAMAATck+Ak6eX55nAACBvGADwABMogEcnm0ugtEBAAGDnm7ADTFgAMAATVVJnngcnoCAnnzADTEHbgEAAYSegcANMboAAD4BSp6VAYSenMANMbo/SZ63IRyewoGeu8ANMR+AjAEAASsAwABN/EqeywEcntiBntLADTEfbgAAAAAAPz0wnuAenvuW/AAAAAAGoCVgnw+fE6ERAACB2wAAAAEDnx6hEQAAAAIBAZ8kAAAAgRthAwFgA8AATKJgA8AAStgAAZ88AAAggdlhAwBgA8AA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AACBG2EDAWADwABMomADwABK2AAAXAE+AT0wpqAfpqrAAEwwAQABJ4rHAAagMWCm7abyp2QAAIOWAAAAAQOm/adkAAAAAQEBpwMAAACBG2EDAWADwABMomADwABK2AAAXAE+AT0wpxwfpybAAEwwAQABJ4rHAAagPGCnaadxp8sBAIHCAAAAAQOnd6fLAAAAAAAAAGADwABMogE+AkmnfRyniBangS6ByMAATXaCjAEAAZMAwABN0kqnjQEcp5gugtEBAAGTAMAATVU/PTCnoR6nvJb8AAAAAAagPWCn0KfYqDoBAIHVAAAAAQOn3ag6AAAAAAAAAGADwABMogE+Akmn4xyn7han5y6ByMAATXaCjAEAAZMAwABN0kqn8wEcp/4ugtEBAAEcqAYWp/8ugcjAAE12gQYBAAGUAMAATckAwABNVT89MKgQHqgrlvwAAAAABqA+YKg/qEeo3gEAgdcAAAABA6hOqN4AAAAAAAAAYAPAAEyiAT4DSahUHKhfFqhYLoHIwABNdoCMAQABlADAAE3GSqhlARyocC6C0QEAAZMAwABNVT9JqHkcqIQWqH0ugcjAAE12gIwBAAGTAMAATcY9MKiKHqillvwAAAAAPz0wqLYeqNGW/QAAAAAGoDJgqOOo6KljAACEeAAAAAEDqO6pYwAAAAICAqjzAAAAgd1gA8AATKIAqQgAACCEIl0DwABNBAFgA8AATKIAAFwBPgJOqR6pIgABhFRgA8AATKIBHKk0FqktgakkwA07loHIwABNJ4ENAQABgKk2wA07iADAAE3IPRypQS6EWAMAA4CpSsANO4iCqVHADTuxgalWwA07lgDAAE1rBqAzYKloqW2qIgAAhGUAAAABA6l2qiIAAAADAgOpewAAAG1gA8AATKIAqYYAAACEVGADwABMogCpkAAAIIp+YAPAAEyiAWoAYAHAAE2sAgBcAT4CPR6prcAAS98DAAOAqb3ADTwlganEwA08Mhapzi6ByMAATXYARanbAankqeYAAINmYAPAAEyiAYCp6MANPCUBHKnxg6nvwA08hIC7AQABganzwA08MgDAAE3QAYup+sANPIQcqfiDqfrADTyEgQ0BAAGUAMAATcg+AT0cqgkugQwCAAKDqgrADTyEgqoPwA08QADAAE1WAAANHfsADR5lAA0eigANHq8ADR7SAA0fGgANH3YADR/GAA0gOQANIMMADSHYAA0jGgANJDwADSURAA0mXAANJrkADScPAA0nbQANJ8MADSghAA0oYQANKKcADSk/AA0pfwANKeUADSonAA0q6QANLBkADS0XAA0tgAANLfAADS7KAA0vowANMOoADTJBAA0z7gANNDwADTR9AA00xQANNRQADTVrAA02OQANN4AADTjsAA05JQANOWwADTm3AA06AgANOmUADTrfAA07awANPAgADTzyAAAANAKgQmDAAR24wAEd2MABIfs3jpAAAAFgA6AIAAFdA5zpAWADrEoAAQWgSgAAAAAEAAADAAAAAAAAAAAAYAOgQgE/AQkAAKA1AAAAAAQGoERgwAEd2MABHdgAABCEagCcqpyqAQMAAAAAAAMDAwAAAABtYAPAAEyiAAAAAACEVGADwABMogAAAAAghCJdA8AATQQBWwAAXAFKAAEdAIRqAwADgADADT43gQDADT5DggDADT5QAJyqBqBGYKqNqpmqsAACjiOchgAAAAEDqqSqsAAAAAEBAaqpAAAAgchgA8AATKIAAGADrEoABqBHYKq1qrqzfwAAhFgAAAABA6rCs38AAAAEAwSqxwAAAG1gA8AATKIAqtIAAACEVGADwABMogCq5QAAIILAXQPAAE0EAWADwABMogCq8AAAAIRnYAPAAEyiAWqq/GADwABMohoAXAE+C0mrGyIiHKshk4KMAQABgKsjwA0+0QDAAE3SARyrMoCrLMANPtGCjAEAAYGrNMANPt4AwABN0gEcqz+BqzvADT7egowBAAEWq0EugcjAAE12AMAATdI+Aj0eq1zAAEvfAwADgKtswA0+0YGrc8ANPt4Wq3gugcjAAE12AEAqq6CrpQA/SauyHKvAg6u2wA0/AYC7AQABkwDAAE3QPgE9MKvNH6vewABL6AQABIOr5MANPwGTKyeEZwA/TqwXrB0AAYGbYAPAAEyiARysI4GsH8ANPt6BBgEAAYCsJcANPtEAwABNyUmsMBysThysQRasOoKsNcANPuyByMAATSeBBgEAAYOsQ8ANPwEAwABNyYC7AQABhKxQwA0/2ADAAE3QPgE9MKxfHqx6lv4AAAAAP0msjxysmYSsk8ANP9iAjAEAAZMAwABNxkqsnwA/SaysJay1AIKssMANPuxgA5ydPgJOrTytTAABjiRgA5ydASatUwCCrU7A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HKf+LoLRAQABHKgGFqf/LoHIwABNdoEGAQABlADAAE3JAMAATVU/PTCoEB6oK5b8AAAAAAagj2CoP6hHqN4BAIHXAAAAAQOoTqjeAAAAAAAAAGADwABMogE+A0moVByoXxaoWC6ByMAATXaAjAEAAZQAwABNxkqoZQEcqHAugtEBAAGTAMAATVU/Sah5HKiEFqh9LoHIwABNdoCMAQABkwDAAE3GPTCoih6opZb8AAAAAD89MKi2HqjRlv0AAAAABqCDYKjjqOipYwAAhHgAAAABA6juqWMAAAACAgKo8wAAAIHdYAPAAEyiAKkIAAAghCJdA8AATQQBYAPAAEyiAABcAT4CTqkeqSIAAYRUYAPAAEyiARypNBapLYGpJMANaCuByMAATSeBDQEAAYCpNsANaB0AwABNyD0cqUEuhFgDAAOAqUrADWgdgqlRwA1oRoGpVsANaCsAwABNawaghGCpaKltqiIAAIRlAAAAAQOpdqoiAAAAAwIDqXsAAABtYAPAAEyiAKmGAAAAhFRgA8AATKIAqZAAACCKfmADwABMogFqAGABwABNrAIAXAE+Aj0eqa3AAEvfAwADgKm9wA1ouoGpxMANaMcWqc4ugcjAAE12AEWp2wGp5KnmAACDZmADwABMogGAqejADWi6ARyp8YOp78ANaRmAuwEAAYGp88ANaMcAwABN0AGLqfrADWkZHKn4g6n6wA1pGYENAQABlADAAE3IPgE9HKoJLoEMAgACg6oKwA1pGYKqD8ANaNUAwABNVgAADUqQAA1K+gANSx8ADUtEAA1LZwANS68ADUwLAA1MWwANTM4ADU1YAA1ObQANT68ADVDRAA1RpgANUvEADVNOAA1TpAANVAIADVRYAA1UtgANVPYADVU8AA1V1AANVhQADVZ6AA1WvAANV34ADViuAA1ZrAANWhUADVqFAA1bXwANXDgADV1/AA1e1gANYIMADWDRAA1hEgANYVoADWGpAA1iAAANYs4ADWQVAA1lgQANZboADWYBAA1mTAANZpcADWb6AA1ndAANaAAADWidAA1phwAAADQCoJNgwAEjL8ABI0/AASdYN46VAAABYAOgWQABXQOc6QFgA6xUAAEFoJsAAAAABAAAAwAAAAAAAAAAAGADoJMBPwEJAACghgAAAAAEBqCVYMABI0/AASNPAAAQhGoAnKqcqgED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TawCAGADrFQBPgU9ibO0wA1xuB6zxcAAS98DAAOAs9XADXGrgbPcwA1xuBaz5i6ByMAATXYATrP3s/4AAIHIYAPAAEyiARy0BIG0AMANcbiBBgEAAYC0BsANcasAwABNyU60HbQkAACA5mADrFQBHLQmLo4jnIYBAAGCtDLADXIDAJzsPRy0RoO0P8ANci6EWAQABJOCtFLADXIDLoC0YMANcasAwABNa0q0bAGDtHPADXIuAAANaqwADWsWAA1rSQANcY4ADXKAAAAABAKgnGDAASMvwAEjT8ABJ1gDjpYBasABIzBgA8AASp8DAAFgA6CTAAFgA6xUAAAIBqCfYMABI8DAASPIwAEkAgQBi1+chgAAAAEDwAEj4sABJAIAAAAAAAAAYAOgnAE+AT0wwAEj6yeLYAagoWDAASQ3wAEkRMABJOADAILRAAAAAQPAASRGwAEk4AAAAAEBAcABJEsAAACB3WADwABMogAAYAPAAEyiAT4CScABJFgiHMABJGKAwAEkXMANcymAuwEAAZMAwABN0AEcwAEkb4DAASRpwA1zKYFeAQABFsABJHIugcieBgDAAE3TPgE9MMABJIIfwAEkjMAAS/QDAAOAwAEkncANcykuJ4HdAD9KwAEkvgEcwAEkxS6Ol5yGAQABgMABJNbADXMpAKClBqCiYMABJOXAASTzwAElmwMAgQwAAAABA8ABJPbAASWbAAAAAgICwAEk+wAAAIHdYAPAAEyiAMABJQYAACAiYAPAAEyiAABcAT4CScABJRMiHMABJR2AwAElF8ANc+6AuwEAAZMAwABN0AEcwAElKoDAASUkwA1z7oFeAQABFsABJS0ugcieBgDAAE3TPgE9MMABJT0fwAElR8AAS/QDAAOAwAElWMANc+4uJ4HdAD89HMABJXkujpichgIAAoDAASWKwA1z7oHAASWRwA1z/gCgpgagqWDAASXVwAEl3cABJhoBAI4UAAAAAQPAASXwwAEmGgAAAAAAAABgA8AATKIBPgFKwAEl9gFqwAEmB2ADwABMohwGoKRgwAEmPsABJkjAASaGAACOI5yGAAAAAQPAASZTwAEmhgAAAAEBAcABJlgAAACByGADwABMogAAYAOsVAE+AUrAASZmAR7AASZxrFgBAAGAwAEme8ANdQYABqClYMABJovAASaPwAEm6AAAjpechgAAAAEDwAEmn8ABJugAAAABAQHAASakAAAAgd1gA8AATKIAAGADwABMogE+AUrAASaxARzAASa4Lo5YnIYBAAEcwAEmyIDAASbCwA11YYPGAQABasABJtRgA8AATKIcAMAATcoAnhUGoKZgwAEm7cABJvLAASdWAACOmJyGAAAAAQPAAScCwAEnVgAAAAICAsABJwcAAACB3WADwABMogDAAScSAAAAImADwABMogAAXAE+AT0cwAEnHy6OWpyGAgACHMABJy+AwAEnKcANdd6DxgEAAWrAASc7YAPAAEyiHADAAE3KgcABJ0zADXXuAJ4WBqCnYMABI0/AASNPAAAQhGoAnKqcqgEDAAAAAAADAwMAAAAAbWADwABMogAAAAAAhFRgA8AATKIAAAAAIIQiXQPAAE0EAVsAAFwBSgABHQCEagMAA4AAwA12YIEAwA12bIIAwA12eQCcqgAADXLIAA1zAgANc8cADXSaAA103QANdTgADXW1AA12QAANdqoAAAAIAqCqYMABKJLAASiywAEsyjeOmQAAAWADngAAAWADnLIAAQWg1wAAAAAEAAADAAAAAAAAAAAAYAOgqgE/AQkAAJ4lAAAAADQGoKxgwAEossABKLIAABCEagCcqpyqAQMAAAAAAAMDAwAAAABtYAPAAEyiAAAAAACEVGADwABMogAAAAAghCJdA8AATQQBWwAAXAFKAAEdAIRqAwADgADADXc6gQDADXdGggDADXdTAJyqBqDZYI46jkKOVAECjhQAAAABA45UjlQAAAAAAAAAYAPAAEyiAAag2mCOWI5gjm0BAoadAAAAAQOObY5tAAAAAAAAAGADwABMogAGoNtgjnGOgY6HAQKBwQAAAAEDjoeOhwAAAAAAAABgA53jAAagrWCOjI6YjsgAAIQJAAAAAQOOpI7IAAABAAAEIWADwABN7wFbAAAAAF0DwABNBAFfAwAAAUqOqgEfjq6W7wEBXwMAAAEuAAagrmCOzY7bjzsAAIQIAAAAAQOO5Y87AAAAAQEBjvQAACCCHV0DwABNBAFgA8AATKIAAF0DwABNBAFgA8AATKIBSo8EAR6PCJbHAgFgA8AATKICLoCPNcANeFYABqCvYI9Aj0iPcAAAgckAAAABA49Pj3AAAAEAAARDYAPAAE3vAVsAAAAAXQPAAE1GAV8DAAABSo9VAR6PWsAATVEBAmADwABMol8DAAABLgAGoOJgj3SPfY/mAgCBwgAAAAEDj4KP5gAAAAEBAY+HAAAgImADwABMogAAXAE+AkmPlByPpBaPnS6ByMAATXaAjAEAAZMAwABNxj0wj6ofj7TAAEv0AgACky4APz0cj9cugQwCAAKTgI/dwA15AgDAAE1WBqDjYI/rj/SQagIAgdUAAAABA4/4kGoAAAABAQGP/QAAICJgA8AATKIAAFwBPgJJkAockBoWkBMugcjAAE12gIwBAAGTAMAATcY9MJAgH5AqwABL9AIAApMuAD89HJBNLoEMAgACHJBaFpBTLoHIwABNdoEGAQABlADAAE3JgJBhwA15dQDAAE1WBqCwYJBvkHORLAAAhHEAAAABA5B9kSwAAAACAQKQgwAAAIEbYQMBYAPAAEyiYAPAAErYAJCbAAAAbWADwABMogFqkKNgA8AATKIaAGADwABMogE+A0mQrRyQt4GQscANehaAuwEAAZMAwABN0D2JkLzADXoWkz9FkMsBkNSQ1gAAg2ZgA8AATKIBgZDYwA16FgEckOGCkN/ADXpdgLsBAAEWkOMugcjAAE12AMAATdABipDrwA16XRyQ7IKQ68ANel2BDQEAAZQAwABNyD4BSZD4HJEAgJD8wA15/24BAAEckQUugtEBAAGCkQbADXpdAMAATVUAAEqRCwGCkRLADXpdP0qRHwEckSaUg+sAAAAAwABMxQagsWCRMZE1khQAAIRzAAAAAQORQ5IUAAAAAgECkUkAAACBG2EDAWADwABMomADwABK2ACRYQAAAG1gA8AATKIBagBgAcAATawCAGADwABMogE+A0mRbyIckXmBkXPADXsrgIwBAAErAMAATcYBHJGKgZGEwA17K4FeAQABFpGSLoHIwABNdgDAAE3TPYmRmsANeyscka4WkacugcjAAE12gQYBAAGUAMAATck/RZG3AZHAkcIAAINmYAPAAEyiAYGRxMANeysBHJHNgpHLwA17qIFeAQABkwDAAE3TAYqR08ANe6gckdSCkdPADXuogQYBAAGUAMAATck+AUmR4ByR6ICR5MANexRuAQABHJHtLoLRAQABgpHuwA17qADAAE1VAABKkfMBgpH6wA17qD9KkgcBHJIOlIPrAAAAAMAATMUGoLJgkhmSLJL/AwCBDQAAAAEDki2S/wAAAAEBAZI4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XQPAAE0EAV8DAAABSptMAR+bUJYlAgJgA8AATKJfAwAAAi6Am23ADYbIAAagw2CbdJt5nBMAAIHHAAAAAQObfpwTAAAAAQEBm4QAAABQYQMBYAPAAEyiYAPAAErYAABgA8AAStgBPgNOm56bogAAjh9gA8AATKIBFpupLoHIwABNdkWbtQGbvpvAAACDZmADwABMogGTARybx4KbxcANh2qAuwEAAYGbycANh00AwABN0AGKm9DADYdqHJvOgpvQwA2HaoENAQABlADAAE3IPgFJm9shHJvhgJvgwA2HLG4BAAEcm+YugtEBAAGCm+fADYdqAMAATVUAAEqb7AEqP0qcBAEpBqDEYJwYnB2ctAAAgQ4AAAABA5wgnLQAAAABAQGcJgAAAFBhAwFgA8AATKJgA8AAStgAAGADwABK2AE+A06cQJxEAACOH2ADwABMogEWnEsugcjAAE12RZxXAZxgnGIAAINmYAPAAEyiAZMBHJxpgpxnwA2IRIC7AQABgZxrwA2IJwDAAE3QAYqccsANiEQcnHCCnHLADYhEgQ0BAAGUAMAATcg+AUmcfRycgoCcgcANiAZuAQABHJyHLoLRAQABgpyIwA2IRADAAE1VAABKnI0BKT9KnKQBKgagxWCcuZy9ndQAAIHYAAAAAQOcx53UAAAAAgEBnM0AAACBG2EDAWADwABMomADwABK2AABnOUAACCB2WEDAGADwABMogFqAGABwABNrAJgA8AATKIBPgROnPqc/gAAjh9gA8AATKIBFp0FLoHIwABNdkWdEQGdGp0cAACDZmADwABMogGTARydI4OdIcANiTiAuwEAAYKdJcANiRsAwABN0AGLnSzADYk4HJ0qg50swA2JOIENAQABlADAAE3IPgJOnTudQwAAgbxgA8AATKIBHJ1JLoLRAQABg51KwA2JOADAAE1VSZ1UHJ1cgJ1YwA2I324BAAGEnV3ADYmEAABKnWcBhJ1uwA2JhD9JnYEhHJ2MgZ2FwA2I94CMAQABKwDAAE38Sp2VARydooGdnMANiPduAAAAAAA/PTCdqh6dxZb8AAAAAAagxmCd2Z3dnwoAAIHaAAAAAQOd5p8KAAAAAgEBnewAAACBG2EDAWADwABMomADwABK2AABngQAACCB2WEDAGADwABMogFqAGABwABNrAJgA8AATKIBPgROnhmeHQAAjh9gA8AATKIBFp4kLoHIwABNdkWeMAGeOZ47AACDZmADwABMogEcnkGCnj3ADYpigQYBAAGUAMAATckBHJ5Ig55GwA2Kf4FeAQABkwDAAE3TAYueUMANin8cnk6DnlDADYp/gQYBAAGUAMAATck+Ak6eX55nAACBvGADwABMogEcnm0ugtEBAAGDnm7ADYp/AMAATVVJnngcnoCAnnzADYombgEAAYSegcANitkAAD4BSp6VAYSenMANitk/SZ63IRyewoGeu8ANij6AjAEAASsAwABN/EqeywEcntiBntLADYo+bgAAAAAAPz0wnuAenvuW/AAAAAAGoMdgnw+fE6ERAACB2wAAAAEDnx6hEQAAAAIBAZ8kAAAAgRthAwFgA8AATKJgA8AAStgAAZ88AAAggdlhAwBgA8AATKIBagBgAcAATawCYAPAAEyiAT4HTp9Rn1gAAIDmWwErTp9pn3cAAIQUYAPAAErYASpOn4ifjAAAjh9gA8AATKIBFp+TLoHIwABNdkWfnwGfqJ+qAACDZmADwABMogGTARyfsYWfr8ANi/OAuwEAAYSfs8ANi9YAwABN0AGNn7rADYvzHJ+4hZ+6wA2L84ENAQABlADAAE3IPgJOn8mf0QAAgbxgA8AATKIBHJ/XLoLRAQABhZ/YwA2L8wDAAE1VSZ/iHJ/qgJ/mwA2LfW4BAAGGn+vADYw/AAA+A0mf/4OgA8ANi8U+AT0woB4eoDmW/QAAAAA/PYqgVsANi7mGoF/ADYw/PYugcMANi8UpP0mgmIOgnMANi8VKoKsBJqCrBYKgssANi7lgA8AATKI/SaC+IRygyYGgwsANi5WAjAEAASsAwABN/Eqg0gEcoN+BoNnADYuVbgAAAAAAPz0woOceoQKW/AAAAAAGoMhgoRahGqFLAACB3AAAAAEDoSOhSwAAAAEBAaEoAAAAgd1gA8AATKIAAGADwABMogE+AUqhNQEcoUAugtEBAAGAoUHADY0qAMAATVUGoMlgoVChVaGtAACAggAAAAEDoVihrQAAAAEBAaFdAAAgImADwABMogAAXAE+AT0woWofoXTAAEwwAQABJ4rFAAagymChsqG3ohwAAINrAAAAAQOhvaIcAAAAAQEBocwAACAiXQPAAE0EAWADwABMogAAXAE+AT0wodkfoePAAEwwAQABJ4rFAAagy2CiIaImopEAAIR0AAAAAQOiLKKRAAAAAgICojEAAACB3WADwABMogCiPAAAICJgA8AATKIAAFwBPgE9MKJJH6JTwABMMAEAASeOIAAGoMxgopaim6MUAACEdgAAAAEDoqSjFAAAAAICAqKpAAAAgd1gA8AATKIAor4AACCBAV0DwABNBAFgA8AATKIAAFwBPgE9MKLMH6LWwABMMAEAASeOIAAGoM1goxmjHqN4AACEWQAAAAEDoyKjeAAAAAEAAaMoAAAAhFphAwJgA8AATKJgA8AATKJgA8AATKIBagBgAcAATawCAFwBPgE9HqNLl5ICAWADwABMogIuNaNWAAABAGEDAmADwABMomADwABMomADwABMogGAo1bADY6nIxyjVoGjVsANjuOAjAEAASsAwABN/GqjbGEDAl0DwABK5AFbXQPAAErkAVtgA8AATKKEJYGjVsANjuMBYQMCYAPAAEyiYAPAAEyiYAPAAEyiAAagzmCjfaOBpHwAAIRwAAAAAQOjiKR8AAAAAgECo40AACCBvGADwABMogCjmwAAAG1gA8AATKIBaqOjYAPAAEyiGgBgA8AATKIBPgNJo60co7eBo7HADY+DgV4BAAEWo78ugcjAAE12AMAATdM+AUqjzwEco9aUg+sAAAAAwABMxUmj5Ryj74Gj6cANj4OAuwEAAZMAwABN0D4BPYmj/MANj4OTP0WkEQGkGqQcAACDZmADwABMogGBpB7ADY+DARykJ4KkJcANkAGAuwEAARakLi6ByMAATXYAwABN0AGKpDbADZABHKQ3gqQ2wA2QAYENAQABlADAAE3IPgFJpEMcpE8cpEsugtEBAAGCpEzADZABAMAATVWAjAEAAYCkUsANj3UAwABNxkqkWwGCpGLADZABP0qkbwEcpHaUg+sAAAAAwABMxQagz2CkgaSFpZ0AAIRyAAAAAQOkkKWdAAAAAgECpJUAACCBvGADwABMogCkowAAAG1gA8AATKIBaqSrYAHAAE2sAgBgA8AATKIBPgNJpLgiHKTCgaS8wA2QyoCMAQABKwDAAE3GARyk04GkzcANkMqBXgEAARak2y6ByMAATXYAwABN0z4BPYmk68ANkMocpP8WpPgugcjAAE12gQYBAAGUAMAATclJpQ8cpRmBpRPADZDKgLsBAAGTAMAATdA+AUqlJgEcpS2Ug+sAAAAAwABMxT9FpTsBpUSlRgAAg2ZgA8AATKIBgaVIwA2QygEcpVGCpU/ADZF2gV4BAAGTAMAATdMBiqVXwA2RdhylWIKlV8ANkXaBBgEAAZQAwABNyT4BSaVkHKVwHKVsLoLRAQABgqVtwA2RdgDAAE1VgIwBAAGApXPADZC8AMAATcZKpXwBgqWDwA2Rdj9KpZABHKWXlIPrAAAAAMAATMUGoNBgpaKlpqYBAACELwAAAAEDpbCmAQAAAAAAAABgA8AATKIBPgE9MKW5H6XDwABMMAEAASeKxwAGoNFgpgamCqZsAACEdQAAAAEDphKmbAAAAAEBAaYXAAAAgd1gA8AATKIAAGADwABMogE+AT0wpiQfpi7AAEwwAQABJ4rHAAag0mCmcaZ2pugAAIOVAAAAAQOmgaboAAAAAQEBpocAAACBG2EDAWADwABMomADwABK2AAAXAE+AT0wpqAfpqrAAEwwAQABJ4rHAAag02Cm7abyp2QAAIOWAAAAAQOm/adkAAAAAQEBpwMAAACBG2EDAWADwABMomADwABK2AAAXAE+AT0wpxwfpybAAEwwAQABJ4rHAAag3mCnaadxp8sBAIHCAAAAAQOnd6fLAAAAAAAAAGADwABMogE+AkmnfRyniBangS6ByMAATXaCjAEAAZMAwABN0kqnjQEcp5gugtEBAAGTAMAATVU/PTCnoR6nvJb8AAAAAAag32Cn0KfYqDoBAIHVAAAAAQOn3ag6AAAAAAAAAGADwABMogE+Akmn4xyn7han5y6ByMAATXaCjAEAAZMAwABN0kqn8wEcp/4ugtEBAAEcqAYWp/8ugcjAAE12gQYBAAGUAMAATckAwABNVT89MKgQHqgrlvwAAAAABqDgYKg/qEeo3gEAgdcAAAABA6hOqN4AAAAAAAAAYAPAAEyiAT4DSahUHKhfFqhYLoHIwABNdoCMAQABlADAAE3GSqhlARyocC6C0QEAAZMAwABNVT9JqHkcqIQWqH0ugcjAAE12gIwBAAGTAMAATcY9MKiKHqillvwAAAAAPz0wqLYeqNGW/QAAAAAGoNRgqOOo6KljAACEeAAAAAEDqO6pYwAAAAICAqjzAAAAgd1gA8AATKIAqQgAACCEIl0DwABNBAFgA8AATKIAAFwBPgJOqR6pIgABhFRgA8AATKIBHKk0FqktgakkwA2UtYHIwABNJ4ENAQABgKk2wA2UpwDAAE3IPRypQS6EWAMAA4CpSsANlKeCqVHADZTQgalWwA2UtQDAAE1rBqDVYKloqW2qIgAAhGUAAAABA6l2qiIAAAADAgOpewAAAG1gA8AATKIAqYYAAACEVGADwABMogCpkAAAIIp+YAPAAEyiAWoAYAHAAE2sAgBcAT4CPR6prcAAS98DAAOAqb3ADZVEganEwA2VURapzi6ByMAATXYARanbAankqeYAAINmYAPAAEyiAYCp6MANlUQBHKnxg6nvwA2Vo4C7AQABganzwA2VUQDAAE3QAYup+sANlaMcqfiDqfrADZWjgQ0BAAGUAMAATcg+AT0cqgkugQwCAAKDqgrADZWjgqoPwA2VXwDAAE1WAAANdxoADXeEAA13qQANd84ADXfxAA14OQANeJUADXjlAA15WAANeeIADXr3AA18OQANfVsADX4wAA1/ewANf9gADYAuAA2AjAANgOIADYFAAA2BgAANgcYADYJeAA2CngANgwQADYNGAA2ECAANhTgADYY2AA2GnwANhw8ADYfpAA2IwgANigkADYtgAA2NDQANjVsADY2cAA2N5AANjjMADY6KAA2PWAANkJ8ADZILAA2SRAANkosADZLWAA2TIQANk4QADZP+AA2UigANlScADZYRAAAANAKg5GDAASiSwAEossABLMo3jpoAAAFgA6CqAAFdA5zpAWADrF4AAQWg7AAAAAAEAAADAAAAAAAAAAAAYAOg5AE/AQkAAKDXAAAAAAQGoOZgwAEossABKLIAABCEagCcqpyqAQMAAAAAAAMDAwAAAABtYAPAAEyiAAAAAACEVGADwABMogAAAAAghCJdA8AATQQBWwAAXAFKAAEdAIRqAwADgADADZdWgQDADZdiggDADZdvAJyqBqDoYKqNqpmqsAACjiOchgAAAAEDqqSqsAAAAAEBAaqpAAAAgchgA8AATKIAAGADrF4ABqDpYKq1qrqzfwAAhFgAAAABA6rCs38AAAAEAwSqxwAAAG1gA8AATKIAqtIAAACEVGADwABMogCq5QAAIILAXQPAAE0EAWADwABMogCq8AAAAIRnYAPAAEyiAWqq/GADwABMohoAXAE+C0mrGyIiHKshk4KMAQABgKsjwA2X8ADAAE3SARyrMoCrLMANl/CCjAEAAYGrNMANl/0AwABN0gEcqz+B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AT4BPTDAASlSJ4tgBqDyYMABKZ7AASmrwAEqSAMAgtEAAAABA8ABKa3AASpIAAAAAQEBwAEpsgAAAIHdYAPAAEyiAABgA8AATKIBPgJJwAEpvyIcwAEpyYDAASnDwA2fs4C7AQABkwDAAE3QARzAASnWgMABKdDADZ+zgV4BAAEWwAEp2S6ByJ4GAMAATdM+AT0wwAEp6R/AASnzwABL9AMAA4DAASoEwA2fsy4ngd0AP0rAASolARzAASosLo6cnIYBAAGAwAEqPsANn7MAoPYGoPNgwAEqTcABKlvAASsEAwCBDAAAAAEDwAEqXsABKwQAAAACAgLAASpjAAAAgd1gA8AATKIAwAEqbgAAICJgA8AATKIAAFwBPgJJwAEqeyIcwAEqhYDAASp/wA2geIC7AQABkwDAAE3QARzAASqSgMABKozADaB4gV4BAAEWwAEqlS6ByJ4GAMAATdM+AT0wwAEqpR/AASqvwABL9AMAA4DAASrAwA2geC4ngd0APz0cwAEq4S6OnZyGAgACgMABKvPADaB4gcABKvrADaCIAKD3BqD6YMABKz7AAStGwAErhAEAjhQAAAABA8ABK1nAASuEAAAAAAAAAGADwABMogE+AUrAAStfAWrAAStxYAPAAEyiHAag9WDAASuowAErs8ABK/IAAI4jnIYAAAABA8ABK77AASvyAAAAAQEBwAErwwAAAIHIYAPAAEyiAABgA6xeAT4BSsABK9EBHsABK9ysYgEAAYDAASvnwA2hkAAGoPZgwAEr98ABK/vAASxXAACOnJyGAAAAAQPAASwMwAEsVwAAAAEBAcABLBEAAACB3WADwABMogAAYAPAAEyiAT4BSsABLB4BHMABLCUujlychgEAARzAASw2gMABLDDADaHrg8YBAAFqwAEsQ2ADwABMohwAwABNygCeFwag92DAASxcwAEsYcABLMgAAI6dnIYAAAABA8ABLHLAASzIAAAAAgICwAEsdwAAAIHdYAPAAEyiAMABLIIAAAAiYAPAAEyiAABcAT4BPRzAASyPLo5enIYCAAIcwAEsoIDAASyawA2iaIPGAQABasABLK1gA8AATKIcAMAATcqBwAEsvsANongAnhgGoPhgwAEossABKLIAABCEagCcqpyqAQMAAAAAAAMDAwAAAABtYAPAAEyiAAAAAACEVGADwABMogAA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AE3vAABgA8AAStgBPgNOuci5zAAAjh9gA8AATKIBFrnTLoHIwABNdkW53wG56LnqAACDZmADwABMogGTARy58YK578ANqjiAuwEAAYG588ANqhsAwABN0AGKufrADao4HLn4grn6wA2qOIENAQABlADAAE3IPgFJugUcuhEcug0ugtEBAAGCug7ADao4AMAATVWAjAEAAYC6FMANqgIAwABNxkq6HQEpP0q6NAEqBqEFYLpJuk67NwAAhFwAAAABA7pVuzcAAAABAAG6XgAAAIRdYAOZQQFqAGABwABNrAIAXAE+Az0jHLp0gLptwA2q14CMAQABKwDAAE38iLptwA2q1x66fJlDAAAAACsBYAOZQU66jrqQAACDZmADwABMogEWupcugcjAAE12Q7qjHLqsgbqqwA2rH4KMAQABlADAAE3SPgVOur26wQAAgQtgA8AATKIBHLrKgLrDwA2q14ReAQABgbrSwA2rHwCZRj2JutzADasfHLregbrcwA2rH4EGAQABlADAAE3JTrruuvIAAIRfYAPAAEtQARy6+C6C0QEAAYG6+cANqx8AwABNVT0cuwcugQwCAAKBuwjADasfHLsRLoLRAQABgrsSwA2rUwDAAE1VAMAATVY9HLsiLoEMAgACgrsjwA2rU4O7KsANq5kAwABNVgahBmC7PLtNu5YAAIGqAAAAAQO7UruWAAAAAQEBu1gAAABQYQMBYAPAAEtQYAPAAErYAABdA8AATQQBYAPAAEtQAUq7dAEfu3iWEQIBYAPAAEtQAi6Au5TADawiAAahB2C7m7usu+IAAIHPAAAAAQO7sLviAAAAAQEBu7UAAACEE2ADwABMogAAXQPAAE0EAWADwABLUAFKu7sBH7u/lcwDAWADwABLUAMuk4C74MANrH8ABqEIYLvnu/i8TwAAgdAAAAABA7wBvE8AAAABAQG8BwAAAIEbYQMBYAPAAEtQYAPAAErYAABdA8AATQQBYAPAAEtQAUq8JgEfvCqWVwIBYAPAAEtQAi6AvErADazVAAahCWC8VLxlvJ4AAIHRAAAAAQO8abyeAAAAAQEBvG4AAACEE2ADwABMogAAXQPAAE0EAWADwABLUAFKvHQBH7x4lcwDAWADwABLUAMugLyWwA2tMysABqEKYLyjvLS9CwAAgdIAAAABA7y9vQsAAAABAQG8wwAAAIEbYQMBYAPAAEtQYAPAAErYAABdA8AATQQBYAPAAEtQAUq84gEfvOaWjwIBYAPAAEtQAi6AvQbADa2JAAahLWC9EL0lvVcBAIR5AAAAAQO9Lr1XAAAAAAAAAF0DwABNBAFgA8AAS1ABSr0xAR+9NZd9AQFgA8AAS1ABLgAGoQtgvVy9bb2VAACEYAAAAAEDvXK9lQAAAAAAAABdA8AATXgCYAPAAEyiYAPAAEtQAUq9eAEfvXyXcwEBYAPAAEtQAS4ABqEMYL2avau+QQAAhGMAAAABA72zvkEAAAACAQK9uAAAAG1gA8AATKIAvcQAAACEVGADwABMogFqAGABwABNrAIAXQPAAE0EAWADwABLUAE+Aj0evdvAAEvfAwADgL3rwA2ubYG98sANrnoWvfwugcjAAE12AEq+CQEfvhSVzAMBYAPAAEtQAy6AvjLADa5tgb45wA2uegAGoS5gvka+W76LAQCBCAAAAAEDvmS+iwAAAAAAAABdA8AATT8BYAPAAEtQAUq+ZwEfvmunTQEBYAPAAEtQAS4ABqENYL6Qvp2++wAAgcoAAAABA76jvvsAAAABAAABvqoAAACED2ADwABK2AFqvrRgA8AAStiD+10DwABNRgFgA8AAS1ABPgFKvsEBHr7MwABNTAIBYAPAAEtQAS4BhA+Avu7ADa9GBqEOYL8Avwy/PwAAgcsAAAABA78Rvz8AAAAAAAAAXQPAAE46AWADwABLUAE+AUq/GgEevyWJYgEBYAPAAEtQAS4ABqEPYL9Ev0m/xAAAgRIAAAABA79Qv8QAAAABAQG/VgAAAFBhAwFgA8AAS1BcAABcAT4CTr9zv3cAAI4fYAPAAEyiARa/fi6ByMAATXZFv4oBv5O/lQAAg2ZgA8AATKIBkwEcv5yCv5rADbAhgLsBAAGBv57ADbAEAMAATdABir+jwA2wIRy/pIK/o8ANsCGBDQEAAZQAwABNyD4BPRy/sYC/sMANr+1uAQABHL+2LoLRAQABgr+3wA2wIQDAAE1VAAAGoRBgv8m/0MAAQNoAAIG5AAAAAQO/1sAAQNoAAAABAQG/3gAAIIG6YQMCYAPAAEtQYAPAAEtQYAPAAEtQAABgA8AAS1ABPgVOwABAD8AAQBMAAI4fYAPAAEyiARbAAEAaLoHIwABNdknAAEAmHMAAQC6BwABAKsANsNuAjAEAAZMAwABNxj0wwABANB7AAEBPlvwAAAAAP07AAEBkwABAagAAImADwABLUAEcwABAcC6C0QEAAZMAwABNVUXAAEB5AcAAQILAAECEAACDZmADwABMogGUARzAAECLg8AAQInADbFUgLsBAAGBwABAjcANsNsAwABN0AGLwABAlMANsVQcwABAkoPAAECUwA2xVIENAQABlADAAE3IPgE9isAAQJ/ADbErHMAAQK6AwABAp8ANsLNuAgACgsAAQK/ADbErHMAAQLougtEBAAGDwABAu8ANsVQAwABNVQAASsAAQMoBgsAAQNHADbErBqERYMAAQN/AAEDhwABBuwAAgb0AAAABA8AAQOjAAEG7AAABAAAEIWADwABN7wFbAgICwABA6wAAAIG+XwMAAADAAED7AAAAgbphAwJfAwAAYAPAAEtQXwMAAAAAXwMAAAE+A07AAEEuwABBMgAAjh9gA8AATKIBFsAAQTkugcjAAE12RcAAQUUBwABBTsAAQVAAAINmYAPAAEyiAZMBHMAAQVeDwABBVcANsoiAuwEAAYLAAEFZwA2yYwDAAE3QAYvAAEFgwA2yiBzAAEFeg8AAQWDADbKIgQ0BAAGUAMAATcg+AT2IwABBa8ANsjEcwABBgYHAAEF6wA2yP24CAAKAwABBgsANsjEcwABBlC6C0QEAAYPAAEGVwA2yiADAAE1VAABKwABBpAGAwABBq8ANsjEGoRJgwABBwMAAQczAAEIXAACBqwAAAAEDwABB0sAAQhcAAAEAAAQhYAPAAE3vAVsBAQHAAEHVAAAAUGEDAWADwABLUF8DAAAAAF0DwABNBAFfAwAAAUrAAEHxAR7AAEH1leACAmADwABLUF8DAAACLoDAAEIVwA2zZQAGoRNgwABCHMAAQijAAEKAAACBswAAAAEDwABCMcAAQoAAAAEAAAQhYAPAAE3vAVsBAQHAAEI+AAAAUGEDAWADwABLUF0DwABNBAFfAwAAAABdA8AATQQBXwMAAAFKwABCWgEfwABCXpYlAgJgA8AAS1BfAwAAAi6AwABCfsANs+AABqEUYMAAQoXAAEKKwABDJwAAgccAAAABA8AAQo/AAEMnAAAAAQEBwABClQAAAFBhAwFgA8AAS1BgA8AAStgAAGADwABK2AE+A07AAEKywABCtgAAjh9gA8AATKIBFsAAQr0ugcjAAE12RcAAQskBwABC0sAAQtQAAINmYAPAAEyiAZMBHMAAQtuCwABC2cANtJ6AuwEAAYHAAELdwA20eQDAAE3QAYrAAELkwA20nhzAAELigsAAQuTADbSegQ0BAAGUAMAATcg+AUnAAELvIRzAAEL1gMAAQvTADbRWbgEAARzAAEL6LoLRAQABgsAAQvvADbSeAMAATVUAAErAAEMAASo/SsAAQxgBKQahFWDAAEMswABDMcAAQ8sAAIEOAAAAAQPAAEM0wABDywAAAAEBAcAAQzoAAABQYQMBYAPAAEtQYAPAAErYAABgA8AAStgBPgNOwABDV8AAQ1sAAI4fYAPAAEyiARbAAENiLoHIwABNdkXAAENuAcAAQ3fAAEN5AACDZmADwABMogGTARzAAEOAgsAAQ37ADbWqgLsBAAGBwABDgsANtYUAwABN0AGKwABDicANtaocwABDh4LAAEOJwA21qoENAQABlADAAE3IPgFJwABDlBzAAEOZgMAAQ5jADbVibgEAARzAAEOeLoLRAQABgsAAQ5/ADbWqAMAATVUAAErAAEOkASk/SsAAQ7sBKgahFmDAAEPQwABD18AARPQAAIHYAAAAAQPAAEPhwABE9AAAAAIBAcAAQ+cAAACBG2EDAWADwABLUGADwABK2AABwABEBQAAIIHZYQMAYAPAAEtQAWoAYAHAAE2sAmADwABLUAE+BE7AAEQawABEHgAAjh9gA8AATKIBFsAARCUugcjAAE12RcAARDEBwABEOsAARDwAAINmYAPAAEyiAZMBHMAAREODwABEQcANttKAuwEAAYLAAERFwA22rQDAAE3QAYvAAERMwA220hzAAERKg8AAREzADbbSgQ0BAAGUAMAATcg+Ak7AAERbwABEYwAAgbxgA8AAS1ABHMAARGkugtEBAAGDwABEasANttIAwABNVUnAAER0HMAARHyAwABEeMANtm1uAQABhMAARH3ADbcuAABKwABEhwGEwABEjsANty4/ScAARKEhHMAARKyBwABEpcANtoeAjAEAASsAwABN/ErAAES1ARzAAETCgcAARLzADbaHbgAAAAAAPz0wwABEyh7AAETllvwAAAAABqEXYMAARPnAAEUAwABGMwAAgdoAAAABA8AARQnAAEYzAAAAAgEBwABFDwAAAIEbYQMBYAPAAEtQYAPAAErYAAHAAEUtAAAggdlhAwBgA8AAS1ABagBgAcAATawCYAPAAEtQAT4ETsAARULAAEVGAACOH2ADwABMogEWwABFTS6ByMAATXZFwABFWQHAAEViwABFZAAAg2ZgA8AATKIBHMAARWqCwABFZsANuD6BBgEAAZQAwABNyQEcwABFcYPAAEVvwA24Y4FeAQABkwDAAE3TAYvAAEV5wA24YxzAAEV3g8AARXnADbhjgQYBAAGUAMAATck+Ak7AAEWIwABFkAAAgbxgA8AAS1ABHMAARZYugtEBAAGDwABFl8ANuGMAwABNVUnAAEWhHMAARamAwABFpcANt/5uAQABhMAARarADbjPAAA+AUrAAEW+AYTAAEXFwA24zz9JwABF4CEcwABF64HAAEXkwA24GICMAQABKwDAAE38SsAARfQBHMAARgGBwABF+8ANuBhuAAAAAAA/PTDAAEYJHsAARiSW/AAAAAAGoRhgwABGOMAARj/AAEhDAACB2wAAAAEDwABGSsAASEMAAAACAQHAAEZQAAAAgRthAwFgA8AAS1BgA8AAStgAAcAARm4AACCB2WEDAGADwABLUAFqAGABwABNrAJgA8AAS1ABPgdOwABGg8AARooAAIDmWwErTsAARpvAAEapAACEFGADwABK2AEqTsAARrrAAEa+AACOH2ADwABMogEWwABGxS6ByMAATXZFwABG0QHAAEbawABG3AAAg2ZgA8AATKIBkwEcwABG44XAAEbhwA26K4C7AQABhMAARuXADboGAMAATdABjcAARuzADborHMAARuqFwABG7MANuiuBDQEAAZQAwABNyD4CTsAARvvAAEcDAACBvGADwABLUAEcwABHCS6C0QEAAYXAAEcKwA26KwDAAE1VScAARxQcwABHHIDAAEcYwA25oW4BAAGGwABHHcANuocAAD4DScAARzGDwABHNcANufE+AT0wwABHUB7AAEdrlv0AAAAAPz2KwABHiMANueGGwABHkcANuoc9i8AAR6LADbnxKT9JwABHyoPAAEfOwA258UrAAEfdASbAAEfdBYLAAEfkwA254WADwABLUD9JwABH8CEcwABH+4HAAEf0wA25u4CMAQABKwDAAE38SsAASAQBHMAASBGBwABIC8ANubtuAAAAAAA/PTDAAEgZHsAASDSW/AAAAAAGoRlgwABISMAASE/AAEiAAACB3AAAAAEDwABIWMAASIAAAAABAQHAAEhdAAAAgd1gA8AATKIAAGADwABLUAE+AUrAAEhqARzAAEh1LoLRAQABgMAASHbADbu0AMAATVUGoRpgwABIhcAASIrAAEjlAACAggAAAAEDwABIjcAASOUAAAABAQHAAEiVAAAgImADwABLUAAAXAE+AT0wwABIoh/AAEiswABMMAEAASeKxQAGoRtgwABI6sAASO/AAElXAACDawAAAAEDwABI9cAASVcAAAABAQHAAEkHAAAgIl0DwABNBAFgA8AAS1AAAFwBPgE9MMAASRQfwABJHsAATDABAAEnisUABqEcYMAASVzAAElhwABJzwAAhHQAAAABA8AASWfAAEnPAAAAAgICwABJbAAAAIHdYAPAAEyiAMAASXoAACAiYAPAAEtQAABcAT4BPTDAAEmHH8AASZHAAEwwAQABJ44gAAahHWDAAEnUwABJ2cAASlUAAIR2AAAAAQPAAEniwABKVQAAAAICAsAASecAAACB3WADwABMogDAAEn/AAAggQFdA8AATQQBYAPAAEtQAABcAT4BPTDAAEoNH8AAShfAAEwwAQABJ44gAAahHmDAAEpawABKX8AASr8AAIRZAAAAAQPAAEpjwABKvwAAAAEAAcAASmkAAACEWmEDAmADwABLUGADwABLUGADwABMogFqAGABwABNrAIAXAE+AT0ewABKkpeSAgFgA8AAS1ACLjXAAEqdAAABAGEDAmADwABLUGADwABLUGADwABMogGAwABKncANvYcjHMAASp2BwABKncANvceAjAEAASsAwABN/GrAAEqzYQMCXQPAAErkAVtdA8AASuQBW2ADwABMooQlgcAASp3ADb3HAWEDAmADwABLUGADwABLUGADwABMogAGoR9gwABKxMAASsjAAEvGAACEcAAAAAEDwABKz8AAS8YAAAACAQLAAErXAAAggbxgA8AAS1AAwABK5QAAAG1gA8AATKIBasAASu1gA8AATKIaAGADwABMogE+A0nAAEr3HMAASwGBwABK+8ANvn+BXgEAARbAAEsJLoHIwABNdgDAAE3TPgFKwABLGQEcwABLIJSD6wAAAADAAEzFScAASy8cwABLOYHAAEszwA2+f4C7AQABkwDAAE3QPgE9icAAS0bADb5/kz9FwABLWwHAAEtkwABLZgAAg2ZgA8AATKIBgcAAS2jADb5/ARzAAEtxgsAAS2/ADb8XgLsBAAEWwABLeC6ByMAATXYAwABN0AGKwABLgMANvxccwABLgYLAAEuAwA2/F4ENAQABlADAAE3IPgFJwABLjRzAAEuZHMAAS5UugtEBAAGCwABLlsANvxcAwABNVYCMAQABgMAAS5zADb5vAMAATcZKwABLpQGCwABLrMANvxc/SsAAS7kBHMAAS8CUg+sAAAAAwABMxQahIGDAAEvLwABLz8AATOoAAIRyAAAAAQPAAEvawABM6gAAAAIBAsAAS+IAACCBvGADwABLUADAAEvwAAAAbWADwABMogFqwABL+GABwABNrAIAYAPAAEyiAT4DScAATAUiHMAATA+BwABMCcANwBCAjAEAASsAwABNxgEcwABMIIHAAEwawA3AEIFeAQABFsAATCgugcjAAE12AMAATdM+AT2JwABMOMANwBAcwABMTBbAAExFLoHIwABNdoEGAQABlADAAE3JScAATFwcwABMZoHAAExgwA3AEIC7AQABkwDAAE3QPgFKwABMcwEcwABMepSD6wAAAADAAEzFP0XAAEyIAcAATJHAAEyTAACDZmADwABMogGBwABMlcANwBABHMAATJ6CwABMnMANwN6BXgEAAZMAwABN0wGKwABMpMANwN4cwABMpYLAAEykwA3A3oEGAQABlADAAE3JPgFJwABMsRzAAEy9HMAATLkugtEBAAGCwABMusANwN4AwABNVYCMAQABgMAATMDADcAAAMAATcZKwABMyQGCwABM0MANwN4/SsAATN0BHMAATOSUg+sAAAAAwABMxQahIWDAAEzvwABM9sAATVEAAIQvAAAAAQPAAE0AwABNUQAAAAAAAABgA8AAS1ABPgE9MMAATQkfwABNE8AATDABAAEniscABqEiYMAATVbAAE1dwABNvwAAhHUAAAABA8AATWXAAE2/AAAAAQEBwABNagAAAIHdYAPAAEyiAABgA8AAS1ABPgE9MMAATXcfwABNgcAATDABAAEniscABqEjYMAATcTAAE3JwABOPgAAg5UAAAABA8AATdTAAE4+AAAAAQEBwABN2gAAAIEbYQMBYAPAAEtQYAPAAErYAABcAT4BPTDAAE32H8AATgDAAEwwAQABJ4rHAAahJGDAAE5DwABOSMAATr0AAIOWAAAAAQPA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AFixwA3NGAgAgLsBAAGEwABYtcANybMAwABN0AEVwABYvMANzRgIHMAAWL0UwABYvMANzRgIAIENAQABlADAAE3IPgE9HMAAWNeHwABYzcANzOiBDAIAAhTAAFjYwA3NGAgAHMAAWOeGwABY3cANzLGC0QEAARzAAFjyg8AAWOjADciugQ0BAAEUwABY9MANzRgIAADAAE3IAMAATVUAwABNVkXAAFkKAcAAWRPAAFkVAACDZmADwABMogGAwABZF8ANyHgBHMAAWSAUwABZHsANzd0IAIC7AQABgcAAWSLADciHAMAATdABFcAAWSfADc3dCBzAAFkoFMAAWSfADc3dCACBDQEAAZQAwABNyD4BPRzAAFk8LoEMAgACFMAAWT3ADc3dCAAcwABZTIfAAFlCwA3M6ILRAQABHMAAWU8UwABZTcANzd0IAIEGAQABgMAAWVHADch4AMAATckAwABNVQDAAE1WSsAAWWsAPz9OwABZiwAAAIRoXQPAAE1GAVsATsAAWZ4AAACEaWADwABMogBJwABZriXAAFm3AILAAFmywA3Il10DwABNRgFgA8AAS1A+Aj2NwABZ0MANzqUUwABZ3MANyJcCAV0DwABNRgFgA8AAS1A9jsAAWejADc64g8AAWfXADciuPgI9jcAAWhPADc6lHMAAWjQcwABaJILAAFofwA3Il4HRAQABg8AAWinADciuAMAATR6BygEAAAGEDyrAAE0aPY7AAFpTwA3OuJNJwABabRzAAFqEHMAAWnyGwABaccANzriBDQEAAYTAAFp+wA3JswDAAE3IgowBAAEWwABakIXAAFqGwA3OpYHIwABNdgDAAE3SPgE9MMAAWqAewABau5b+AAAAAD89HsAAWtWT6gUABYXAAFrawA3OpYbAAFrlwA3OuC6AwABa98ANyHiEwABa/sANybMABqE7YMAAWw3AAFsZwABcBgAAhGEAAAABA8AAWyDAAFwGAAAAAgECwABbJQAAAG1gA8AATKIAwABbMQAAAIRUYAPAAEyiAWoAYAHAAE2sAgBgA6xoAT4FPYnAAFs9wA3QLh7AAFtOwABL3wMAA4DAAFtewA3QH4HAAFtlwA3QLhbAAFtvLoHIwABNdgBOwABbgMAAW4cAAIHIYAPAAEyiARzAAFuNgcAAW4nADdAugQYBAAGAwABbj8AN0B8AwABNyU7AAFumwABbrQAAgOZgA6xoARzAAFuvLo4jnIYBAAGCwABbu8AN0IUAnSk9HMAAW8+DwABbyMAN0LqEWAQABJOCwABb28AN0IUugMAAW+nADdAfAMAATWtKwABb9QGDwABb/MAN0LoAAA3HqAANyBIADchRAA3P+AAN0SAAAAAEAqE+YMABLg3AAS4twAEynQOOoAFqwAEuDmADwABKnwMAAWADoTUAAWADrGgAAAgGoUFgwAEuqsABLrLAAS7uBAGLX5yGAAAAAQPAAS7OwAEu7gAAAAAAAABgA6E+AT4BPTDAAS7XJ4tgBqFDYMABLyPAAS9qwAEwCAMAgtEBasABLyRgA8AASp+REQAAAQPAAS9swAEwCAAAAAEBAcABL3EAAACB3WADwABMogAAYAPAAEtQAT4CScABL34iHMABL4iAwAEvgsAN0daAuwEAAZMAwABN0AEcwAEvlYDAAS+PwA3R1oFeAQABFsABL5gugcieBgDAAE3TPgE9MMABL6gfwAEvssAAS/QDAAOAwAEvw8AN0dYuJ4HdAD9KwAEv5AEcwAEv6y6OoZyGAQABgMABL/7ADdHWAKFHBqFEYMABMA3AATAbwAEwyAMAgQwAAAABA8ABMB7AATDIAAAAAgICwAEwIwAAAIHdYAPAAEyiAMABMDEAACAiYAPAAEtQAABcAT4CScABMD4iHMABMEiAwAEwQsAN0puAuwEAAZMAwABN0AEcwAEwVYDAATBPwA3Sm4FeAQABFsABMFgugcieBgDAAE3TPgE9MMABMGgfwAEwcsAAS/QDAAOAwAEwg8AN0psuJ4HdAD89HMABMKQujqKchgIAAoDAATC3wA3Sm4HAATC+wA3SqwChSAahS2DAATECwAExCsABMUkBAI4UAAAAAQPAATEdwAExSQAAAAAAAABgA8AATKIBPgFKwAExIwFqwAExNmADwABMohgGoUZgwAExbcABMXnAATG5AACOI5yGAAAAAQPAATGEwAExuQAAAAEBAcABMYkAAACByGADwABMogAAYAOsaAE+AUrAATGXAR7AATGirGwBAAGAwAExrsAN07MABqFHYMABMb7AATHFwAEyJAAAjqGchgAAAAEDwAEx18ABMiQAAAABAQHAATHcAAAAgd1gA8AATKIAAGADwABLUAE+AUrAATHpARzAATHwLo5gnIYBAAEc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BqFkYMAAQhzAAEIowABCgAAAgbMAAAABA8AAQjHAAEKAAAABAAAEIWADwABN7wFbAQEBwABCPgAAAFBhAwFgA8AAS1BdA8AATQQBXwMAAAAAXQPAAE0EAV8DAAABSsAAQloBH8AAQl6WJQICYAPAAEtQXwMAAAIugMAAQn7ADeYDAAahZWDAAEKFwABCisAAQycAAIHHAAAAAQPAAEKPwABDJwAAAAEBAcAAQpUAAABQYQMBYAPAAEtQYAPAAErYAABgA8AAStgBPgNOwABCssAAQrYAAI4fYAPAAEyiARbAAEK9LoHIwABNdkXAAELJAcAAQtLAAELUAACDZmADwABMogGTARzAAELbgsAAQtnADebBgLsBAAGBwABC3cAN5pwAwABN0AGKwABC5MAN5sEcwABC4oLAAELkwA3mwYENAQABlADAAE3IPgFJwABC7yEcwABC9YDAAEL0wA3meW4BAAEcwABC+i6C0QEAAYLAAEL7wA3mwQDAAE1VAABKwABDAAEqP0rAAEMYASkGoWZgwABDLMAAQzHAAEPLAACBDgAAAAEDwABDNMAAQ8sAAAABAQHAAEM6AAAAUGEDAWADwABLUGADwABK2AAAYAPAAErYAT4DTsAAQ1fAAENbAACOH2ADwABMogEWwABDYi6ByMAATXZFwABDbgHAAEN3wABDeQAAg2ZgA8AATKIBkwEcwABDgILAAEN+wA3nzYC7AQABgcAAQ4LADeeoAMAATdABisAAQ4nADefNHMAAQ4eCwABDicAN582BDQEAAZQAwABNyD4BScAAQ5QcwABDmYDAAEOYwA3nhW4BAAEcwABDni6C0QEAAYLAAEOfwA3nzQDAAE1VAABKwABDpAEpP0rAAEO7ASoGoWdgwABD0MAAQ9fAAET0AACB2AAAAAEDwABD4cAARPQAAAACAQHAAEPnAAAAgRthAwFgA8AAS1BgA8AAStgAAcAARAUAACCB2WEDAGADwABLUAFqAGABwABNrAJgA8AAS1ABPgROwABEGsAARB4AAI4fYAPAAEyiARbAAEQlLoHIwABNdkXAAEQxAcAARDrAAEQ8AACDZmADwABMogGTARzAAERDg8AAREHADej1gLsBAAGCwABERcAN6NAAwABN0AGLwABETMAN6PUcwABESoPAAERMwA3o9YENAQABlADAAE3IPgJOwABEW8AARGMAAIG8YAPAAEtQARzAAERpLoLRAQABg8AARGrADej1AMAATVVJwABEdBzAAER8gMAARHjADeiQbgEAAYTAAER9wA3pUQAASsAARIcBhMAARI7ADelRP0nAAEShIRzAAESsgcAARKXADeiqgIwBAAErAMAATfxKwABEtQEcwABEwoHAAES8wA3oqm4AAAAAAD89MMAARMoewABE5Zb8AAAAAAahaGDAAET5wABFAMAARjMAAIHaAAAAAQPAAEUJwABGMwAAAAIBAcAARQ8AAACBG2EDAWADwABLUGADwABK2AABwABFLQAAIIHZYQMAYAPAAEtQAWoAYAHAAE2sAmADwABLUAE+BE7AAEVCwABFRgAAjh9gA8AATKIBFsAARU0ugcjAAE12RcAARVkBwABFYsAARWQAAINmYAPAAEyiARzAAEVqgsAARWbADephgQYBAAGUAMAATckBHMAARXGDwABFb8AN6oaBXgEAAZMAwABN0wGLwABFecAN6oYcwABFd4PAAEV5wA3qhoEGAQABlADAAE3JPgJOwABFiMAARZAAAIG8YAPAAEtQARzAAEWWLoLRAQABg8AARZfADeqGAMAATVVJwABFoRzAAEWpgMAARaXADeohbgEAAYTAAEWqwA3q8gAAPgFKwABFvgGEwABFxcAN6vI/ScAAReAhHMAAReuBwABF5MAN6juAjAEAASsAwABN/ErAAEX0ARzAAEYBgcAARfvADeo7bgAAAAAAPz0wwABGCR7AAEYklvwAAAAABqFpYMAARjjAAEY/wABIQwAAgdsAAAABA8AARkrAAEhDAAAAAgEBwABGUAAAAIEbYQMBYAPAAEtQYAPAAErYAAHAAEZuAAAggdlhAwBgA8AAS1ABagBgAcAATawCYAPAAEtQAT4HTsAARoPAAEaKAACA5lsBK07AAEabwABGqQAAhBRgA8AAStgBKk7AAEa6wABGvgAAjh9gA8AATKIBFsAARsUugcjAAE12RcAARtEBwABG2sAARtwAAINmYAPAAEyiAZMBHMAARuOFwABG4cAN7E6AuwEAAYTAAEblwA3sKQDAAE3QAY3AAEbswA3sThzAAEbqhcAARuzADexOgQ0BAAGUAMAATcg+Ak7AAEb7wABHAwAAgbxgA8AAS1ABHMAARwkugtEBAAGFwABHCsAN7E4AwABNVUnAAEcUHMAARxyAwABHGMAN68RuAQABhsAARx3ADeyqAAA+A0nAAEcxg8AARzXADewUPgE9MMAAR1AewABHa5b9AAAAAD89isAAR4jADewEhsAAR5HADeyqPYvAAEeiwA3sFCk/ScAAR8qDwABHzsAN7BRKwABH3QEmwABH3QWCwABH5MAN7ARgA8AAS1A/ScAAR/AhHMAAR/uBwABH9MAN696AjAEAASsAwABN/ErAAEgEARzAAEgRgcAASAvADevebgAAAAAAPz0wwABIGR7AAEg0lvwAAAAABqFqYMAASEjAAEhPwABIgAAAgdwAAAABA8AASFjAAEiAAAAAAQEBwABIXQAAAIHdYAPAAEyiAABgA8AAS1ABPgFKwABIagEcwABIdS6C0QEAAYDAAEh2wA3t1wDAAE1VBqFrYMAASIXAAEiKwABI5QAAgIIAAAABA8AASI3AAEjlAAAAAQEBwABIlQAAICJgA8AAS1AAAFwBPgE9MMAASKIfwABIrMAATDABAAEnisUABqFsYMAASOrAAEjvwABJVwAAg2sAAAABA8AASPXAAElXAAAAAQEBwABJBwAAICJdA8AATQQBYAPAAEtQAABcAT4BPTDAAEkUH8AASR7AAEwwAQABJ4rFAAahbWDAAElcwABJYcAASc8AAIR0AAAAAQPAAElnwABJzwAAAAICAsAASWwAAACB3WADwABMogDAAEl6AAAgImADwABLUAAAXAE+AT0wwABJhx/AAEmRwABMMAEAASeOIAAGoW5gwABJ1MAASdnAAEpVAACEdgAAAAEDwABJ4sAASlUAAAACAgLAAEnnAAAAgd1gA8AATKIAwABJ/wAAIIEBXQPAAE0EAWADwABLUAAAXAE+AT0wwABKDR/AAEoXwABMMAEAASeOIAAGoW9gwABKWsAASl/AAEq/AACEWQAAAAEDwABKY8AASr8AAAABAAHAAEppAAAAhFphAwJgA8AAS1BgA8AAS1BgA8AATKIBagBgAcAATawCAFwBPgE9HsAASpKXkgIBYAPAAEtQAi41wABKnQAAAQBhAwJgA8AAS1BgA8AAS1BgA8AATKIBgMAASp3ADe+qIxzAAEqdgcAASp3ADe/qgIwBAAErAMAATfxqwABKs2EDAl0DwABK5AFbXQPAAErkAVtgA8AATKKEJYHAAEqdwA3v6gFhAwJgA8AAS1BgA8AAS1BgA8AATKIABqFwYMAASsTAAErIwABLxgAAhHAAAAABA8AASs/AAEvGAAAAAgECwABK1wAAIIG8YAPAAEtQAMAASuUAAABtYAPAAEyiAWrAAErtYAPAAEyiGgBgA8AATKIBPgNJwABK9xzAAEsBgcAASvvADfCigV4BAAEWwABLCS6ByMAATXYAwABN0z4BSsAASxkBHMAASyCUg+sAAAAAwABMxUnAAEsvHMAASzmBwABLM8AN8KKAuwEAAZMAwABN0D4BPYnAAEtGwA3wopM/RcAAS1sBwABLZMAAS2YAAINmYAPAAEyiAYHAAEtowA3wogEcwABLcYLAAEtvwA3xOoC7AQABFsAAS3gugcjAAE12AMAATdABisAAS4DADfE6HMAAS4GCwABLgMAN8TqBDQEAAZQAwABNyD4BScAAS40cwABLmRzAAEuVLoLRAQABgsAAS5bADfE6AMAATVWAjAEAAYDAAEucwA3wkgDAAE3GSsAAS6UBgsAAS6zADfE6P0rAAEu5ARzAAEvAlIPrAAAAAMAATMUGoXFgwABLy8AAS8/AAEzqAACEcgAAAAEDwABL2sAATOoAAAACAQLAAEviAAAggbxgA8AAS1AAwABL8AAAAG1gA8AATKIBasAAS/hgAcAATawCAGADwABMogE+A0nAAEwFIhzAAEwPgcAATAnADfIzgIwBAAErAMAATcYBHMAATCCBwABMGsAN8jOBXgEAARbAAEwoLoHIwABNdgDAAE3TPgE9icAATDjADfIzHMAATEwWwABMRS6ByMAATXaBBgEAAZQAwABNyUnAAExcHMAATGaBwABMYMAN8jOAuwEAAZMAwABN0D4BSsAATHMBHMAATHqUg+sAAAAAwABMxT9FwABMiAHAAEyRwABMkwAAg2ZgA8AATKIBgcAATJXADfIzARzAAEyegsAATJzADfMBgV4BAAGTAMAATdMBisAATKTADfMBHMAATKWCwABMpMAN8wGBBgEAAZQAwABNyT4BScAATLEcwABMvRzAAEy5LoLRAQABgsAATLrADfMBAMAATVWAjAEAAYDAAEzAwA3yIwDAAE3GSsAATMkBgsAATNDADfMBP0rAAEzdARzAAEzklIPrAAAAAMAATMUGoXJgwABM78AATPbAAE1RAACELwAAAAEDwABNAMAATVEAAAAAAAAA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wABMohoAXAE+C0nAAFKYIiIcwABSnpOCjAEAAYDAAFKgwA36mwDAAE3SARzAAFKvgMAAUqnADfqbgowBAAGBwABSscAN+qoAwABN0gEcwABSvIHAAFK4wA36qoKMAQABFsAAUr4ugcjAAE12AMAATdI+Aj0ewABS2cAAS98DAAOAwABS6cAN+puBwABS8MAN+qoWwABS9S6ByMAATXYAQCrAAFMdwABTIgA/ScAAUy8cwABTPYPAAFMzwA360YC7AQABkwDAAE3QPgE9MMAAU0ofwABTW8AAS+gEAASDwABTYcAN+tGTKyeEZwA/TsAAU5TAAFOaAAGBm2ADwABMogEcwABToIHAAFOcwA36qoEGAQABgMAAU6LADfqbAMAATclJwABTrRzAAFPLHMAAU74WwABTt4LAAFOywA36uoHIwABNJ4EGAQABg8AAU8DADfrRAMAATcmAuwEAAYTAAFPNwA371gDAAE3QPgE9MMAAU9wewABT95b+AAAAAD9JwABUDBzAAFQWhMAAVBDADfvWgIwBAAGTAMAATcZKwABUHAA/ScAAVCklwABUMgCCwABULcAN+rpgA5ydPgJOwABUvMAAVMwAAY4kYAOcnQEmwABU0wCCwABUzsAN+rpgA5ydScAAVOwcwABVCBbAAFT1Lo4UnPGAjAEAARbAAFUbhcAAVQvADfynjhScoADAAE3GPgFJwABVOSIcwABVRITAAFU+wA371oC7AQABNwoAwABN0AAhHMAAVWUWwABVXoXAAFVOwA38p4HBnKKAjAEAARbAAFVtLoHBnPMAne4+Aj0ewABViJPqBQAFJsAAVZIAgsAAVY3ADfq6XQPAAE1GAWADwABLUIPAAFWjwA360S6AwABVtMAN+puEwABVu8AN+9YASsAAVc0AScAAVeQcwABV+hbAAFX0FsAAVe0ugcGc84OknIad5o4WnIYGAAYcwABWLBzAAFYXgMAAVhHADfqbg8YBAAEWwABWGS6OFJzxAMAATcqBDQEAARbAAFYzLoadnPIAwABNyBzAAFZUhMAAVk7ADfvWg8YBAAEWwABWVi6OFJzxAMAATcoWwABWjRbAAFaGhcAAVnbADfyngcGcooOknIad5hzAAFa/HMAAVqqDwABWoMAN+tGDxgEAARbAAFasLo4UnPEAwABNyoENAQABFsAAVtGFwABWwcAN/KeGnZyhAMAATcgewABW9JP3AQABLgAewABXFZP3AQABgsAAVxvADfq6AACcrT4BSsAAVy8AP0nAAFdOHMAAV2kWwABXYoXAAFdSwA38p4HBnKKAjAEAARbAAFdxLoHBnPMAne4+BU7AAFhHwABYUgABjiVdA8AATUYBYAPAAEtQASbAAFhZAILAAFhUwA36ul0DwABNRgFgA8AAS1BOwABYeMAAWIMAAY4mYAOscgEcwABYhS6OI5yGAQABhMAAWJHADfvWAJ0pRcAAWKEBwABYqsAAWKwAAINmYAPAAEyiAZMBHMAAWLMUwABYscAN/zsIAIC7AQABhMAAWLXADfvWAMAATdABFcAAWLzADf87CBzAAFi9FMAAWLzADf87CACBDQEAAZQAwABNyD4BPRzAAFjXh8AAWM3ADf8LgQwCAAIUwABY2MAN/zsIABzAAFjnhsAAWN3ADf7UgtEBAAEcwABY8oPAAFjowA360YENAQABFMAAWPTADf87CAAAwABNyADAAE1VAMAATVZFwABZCgHAAFkTwABZFQAAg2ZgA8AATKIBgMAAWRfADfqbARzAAFkgFMAAWR7ADgAACACAuwEAAYHAAFkiwA36qgDAAE3QARXAAFknwA4AAAgcwABZKBTAAFknwA4AAAgAgQ0BAAGUAMAATcg+AT0cwABZPC6BDAIAAhTAAFk9wA4AAAgAHMAAWUyHwABZQsAN/wuC0QEAARzAAFlPFMAAWU3ADgAACACBBgEAAYDAAFlRwA36mwDAAE3JAMAATVUAwABNVkrAAFlrAD8/TsAAWYsAAACEaF0DwABNRgFbAE7AAFmeAAAAhGlgA8AATKIAScAAWa4lwABZtwCCwABZssAN+rpdA8AATUYBYAPAAEtQPgI9jcAAWdDADgDIFMAAWdzADfq6AgFdA8AATUYBYAPAAEtQPY7AAFnowA4A24PAAFn1wA360T4CPY3AAFoTwA4AyBzAAFo0HMAAWiSCwABaH8AN+rqB0QEAAYPAAFopwA360QDAAE0egcoBAAABhA8qwABNGj2OwABaU8AOANuTScAAWm0cwABahBzAAFp8hsAAWnHADgDbgQ0BAAGEwABafsAN+9YAwABNyIKMAQABFsAAWpCFwABahsAOAMiByMAATXYAwABN0j4BPTDAAFqgHsAAWruW/gAAAAA/PR7AAFrVk+oFAAWFwABa2sAOAMiGwABa5cAOANsugMAAWvfADfqbhMAAWv7ADfvWAAahjGDAAFsNwABbGcAAXAYAAIRhAAAAAQPAAFsgwABcBgAAAAIBAsAAWyUAAABtYAPAAEyiAMAAWzEAAACEVGADwABMogFqAGABwABNrAIAYAOscgE+BT2JwABbPcAOAlEewABbTsAAS98DAAOAwABbXsAOAkKBwABbZcAOAlEWwABbby6ByMAATXYATsAAW4DAAFuHAACByGADwABMogEcwABbjYHAAFuJwA4CUYEGAQABgMAAW4/ADgJCAMAATclOwABbpsAAW60AAIDmYAOscgEcwABbry6OI5yGAQABgsAAW7vADgKoAJ0pPRzAAFvPg8AAW8jADgLdhFgEAASTgsAAW9vADgKoLoDAAFvpwA4CQgDAAE1rSsAAW/UBg8AAW/zADgLdAAAN+csADfo1AA36dAAOAhsADgNDAAAABAKhj2DAATPgwAE0AMABOHADjqUBasABM+FgA8AASp8DAAFgA6GGAAFgA6xyAAAIBqGSYMABNH3AATSFwAE0wQQBi1+chgAAAAEDwAE0ocABNMEAAAAAAAAAYAOhjwE+AT0wwAE0qieLYAahlGDAATT2wAE1PcABNdsDAILRAWrAATT3YAPAAEqfkREAAAEDwAE1P8ABNdsAAAABAQHAATVEAAAAgd1gA8AATKIAAGADwABLUAE+AknAATVRIhzAATVbgMABNVXADgP5gLsBAAGTAMAATdABHMABNWiAwAE1YsAOA/mBXgEAARbAATVrLoHIngYAwABN0z4BPTDAATV7H8ABNYXAAEv0AwADgMABNZbADgP5LieB3QA/SsABNbcBHMABNb4ujqachgEAAYDAATXRwA4D+QChmAahlWDAATXgwAE17sABNpsDAIEMAAAAAQPAATXxwAE2mwAAAAICAsABNfYAAACB3WADwABMogDAATYEAAAgImADwABLUAAAXAE+AknAATYRIhzAATYbgMABNhXADgS+gLsBAAGTAMAATdABHMABNiiAwAE2IsAOBL6BXgEAARbAATYrLoHIngYAwABN0z4BPTDAATY7H8ABNkXAAEv0AwADgMABNlbADgS+LieB3QA/PRzAATZ3Lo6nnIYCAAKAwAE2isAOBL6BwAE2kcAOBM4AoZkGoZxgwAE21cABNt3AATccAQCOFAAAAAEDwAE28MABNxwAAAAAAAAAYAPAAEyiAT4BSsABNvYBasABNwlgA8AATKIcBqGXYMABN0DAATdMwAE3jAAAjiOchgAAAAEDwAE3V8ABN4wAAAABAQHAATdcAAAAgchgA8AATKIAAGADrHIBPgFKwAE3agEewAE3dax2AQABgMABN4HADgXWAAahmGDAATeRwAE3mMABN/cAAI6mnIYAAAABA8ABN6rAATf3AAAAAQEBwAE3rwAAAIHdYAPAAEyiAABgA8AAS1ABPgFKwAE3vAEcwAE3wy6OZJyGAQABHMABN9WAwAE3z8AOBjGDxgEAAWrAATfjYAPAAEyiHADAAE3KAJ4bBqGZYMABN/zAATgBwAE4bgAAjqechgAAAAEDwAE4E8ABOG4AAAACAgLAATgYAAAAgd1gA8AATKIAwAE4JgAAACJgA8AAS1AAAFwBPgE9HMABODMujmachgIAAhzAAThFgMABOD/ADgaug8YBAAFqwAE4U2ADwABMohwAwABNyoHAAThkwA4GvgCeHAahmmDAATQAwAE0AAAAEIRqAJyqnKoBAwAAAAAAAwMDAAAAAG1gA8AATKIAAAAAAIRUYAPAAEyiAAAAACCEIl0DwABNBAFbAABcAUoAAR0AhGoDAAOAAMAOBzCBAMAOBzyCAMAOB0kAnKoAAA4DiwAOA8UADgSXAA4FagAOBa0ADgYIAA4GhQAOBxAADgd6AAAACAKhnWDAATnCwAE54sABPiA3jqgAAAFgA54AAAFgA50sAAEFoc4AAAAABAAAAwAAAAAAAAAAAGADoZ0BPwEJAACeJQAAAAA3BqGfYMABOeLAATniAAAQhGoAnKqcqgEDAAAAAAADAwMAAAAAbWADwABMogAAAAAAhFRgA8AATKIAAAAAIIQiXQPAAE0EAVsAAFwBSgABHQCEagMAA4AAwA4ICoEAwA4IFoIAwA4IIwCcqgah0GDAAFxNwABcVcAAXGcBAo4UAAAAAQPAAFxnwABcZwAAAAAAAABgA8AATKIABqHRYMAAXGvAAFxzwABcgAEChp0AAAABA8AAXIDAAFyAAAAAAAAAAGADwABMogAGodJgwABchMAAXJTAAFyaAQKBwQAAAAEDwABcmsAAXJoAAAAAAAAAYAOd4wAGoaFgwABcn8AAXK3AAFzEAAKOI5yGAAAAAQPAAFy4wABcxAAAAAEBAcAAXL0AAACByGADwABMogAAYAOsfAAGoaJgwABcycAAXNXAAF0FAACECQAAAAEDwABc4cAAXQUAAAEAAAQhYAPAAE3vAVsAAAAAXQPAAE0EAV8DAAABSsAAXOcBH8AAXOuW7wEBXwMAAAEuAAaho2DAAF0KwABdHsAAXYoAAIQIAAAAAQPAAF0owABdigAAAAEBAcAAXT0AACCCHV0DwABNBAFgA6ydAABdA8AATQQBYAOsnQFKwABdTQEewABdUZbHAgFgA6ydAi6AwABdhMAOCZsABqGkYMAAXY/AAF2XwABdxQAAgckAAAABA8AAXZ7AAF3FAAABAAAEQ2ADwABN7wFbAAAAAF0DwABNRgFfAwAAAUrAAF2kAR7AAF2pwABNUQECYAOsnV8DAAABLgAGodlgwABdycAAXdLAAF5BAgCBwgAAAAEDwABd18AAXkEAAAABAQHAAF3iAAAgImADrJ0AAFwBPgJJwABd7xzAAF3/FsAAXfgugcjAAE12gIwBAAGTAMAATcY9MMAAXgUfwABeD8AAS/QCAAKTLgA/PRzAAF4yLoEMAgACk4DAAF44wA4KXwDAAE1WBqHaYMAAXkbAAF5PwABeywIAgdUAAAABA8AAXlPAAF7LAAAAAQEBwABeXgAAICJgA6ydAABcAT4CScAAXmscwABeexbAAF50LoHIwABNdoCMAQABkwDAAE3GPTDAAF6BH8AAXovAAEv0AgACky4APz0cwABeri6BDAIAAhzAAF67FsAAXrQugcjAAE12gQYBAAGUAMAATcmAwABewsAOCuoAwABNVgahpWDAAF7QwABe1MAAX5MAAIRxAAAAAQPAAF7ewABfkwAAAAIBAsAAXuQAAACBG2EDAWADrJ1gA8AAStgAwABfAgAAAG1gA8AATKIBasAAXwpgA8AATKIaAGADwABMogE+A0nAAF8UHMAAXx6BwABfGMAOC6eAuwEAAZMAwABN0D2JwABfI8AOC6eTP0XAAF8yAcAAXzvAAF89AACDZmADwABMogGBwABfP8AOC6cBHMAAX0iCwABfRsAOC/yAuwEAARbAAF9KLoHIwABNdgDAAE3QAYrAAF9SwA4L/BzAAF9TgsAAX1LADgv8gQ0BAAGUAMAATcg+AUnAAF9fHMAAX2eAwABfY8AOC5BuAQABHMAAX2wugtEBAAGCwABfbcAOC/wAwABNVQAASsAAX3IBgsAAX3nADgv8P0rAAF+GARzAAF+NlIPrAAAAAMAATMUGoaZgwABfmMAAX5zAAGCBAACEcwAAAAEDwABfqsAAYIEAAAACAQLAAF+wAAAAgRthAwFgA6ydYAPAAErYAMAAX84AAABtYAPAAEyiAWoAYAHAAE2sAgBgA8AATKIBPgNJwABf3CIcwABf5oHAAF/gwA4M+ICMAQABKwDAAE3GARzAAF/3gcAAX/HADgz4gV4BAAEWwABf/y6ByMAATXYAwABN0z2JwABgB8AODPgcwABgGxbAAGAULoHIwABNdoEGAQABlADAAE3JP0XAAGAkAcAAYC3AAGAvAACDZmADwABMogGBwABgMcAODPgBHMAAYDqCwABgOMAODYuBXgEAAZMAwABN0wGKwABgQMAODYscwABgQYLAAGBAwA4Ni4EGAQABlADAAE3JPgFJwABgTRzAAGBVgMAAYFHADgzhbgEAARzAAGBaLoLRAQABgsAAYFvADg2LAMAATVUAAErAAGBgAYLAAGBnwA4Niz9KwABgdAEcwABge5SD6wAAAADAAEzFBqGnYMAAYIbAAGCfwABhfgMAgQ0AAAABA8AAYKDAAGF+AAAAAQEBwABgsQAAIIIdXQPAAE1GAWADrJ0AAF0DwABNRgFgA6ydAT4CTsAAYMLAAGDOAACOHmADwABMogEcwABg3BbAAGDVLoHIwABNdoENAQABFsAAYOSAwABg3sAODmWByMAATXYAwABNyErAAGDwATXAAGECAAABAF0DwABNRgFgA6ydATHAAGECYAOsnQA1wABhDQAAAQBcARfAAGENgsAAYQLADg7TgciBwABhFsAODorAAE10NcAAYSoAAAEAXAEcwABhKoLAAGECwA4O04RYAwADkxbAAGE7LoHIwABNdi4AwABNazXAAGFRAAABAFwBHMAAYVGCwABhAsAODtOEWAMAAxbAAGFfLoHIwABNdoHAAGFnwA4OioDAAGF0wA4OZQDAAE1rgsAAYQLADg7TBqGoYMAAYYPAAGGIwABiJwAAgcQAAAABA8AAYZDAAGInAAAAAQEBwABhmAAAAIG8YAPAAE3vAABgA8AAStgBPgNOwABhq8AAYa8AAI4fYAPAAEyiARbAAGG2LoHIwABNdkXAAGHCAcAAYcvA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wA4W6QgAgLsBAAGEwABpt8AOE4oAwABN0AEVwABpvsAOFukIHMAAab8UwABpvsAOFukIAIENAQABlADAAE3IPgE9HMAAadmHwABpz8AOFrmBDAIAAhTAAGnawA4W6QgAHMAAaemGwABp38AOFoaC0QEAARzAAGn0g8AAaerADhKFgQ0BAAEUwABp9sAOFukIAADAAE3IAMAATVUAwABNVkXAAGoMAcAAahXAAGoXAACDZmADwABMogGAwABqGcAOElEBHMAAaiIUwABqIMAOF64IAIC7AQABgcAAaiTADhJgAMAATdABFcAAainADheuCBzAAGoqFMAAainADheuCACBDQEAAZQAwABNyD4BPRzAAGo+LoEMAgACFMAAaj/ADheuCAAcwABqTofAAGpEwA4WuYLRAQABHMAAalEUwABqT8AOF64IAIEGAQABgMAAalPADhJRAMAATckAwABNVQDAAE1WSsAAam0APz9OwABqjQAAAIRoXQPAAE1GAVsATsAAaqAAAACEaWADwABMogBJwABqsCXAAGq5AILAAGq0wA4ScF0DwABNRgFgA6ydPgI9jcAAatXADhh2FMAAauHADhJwAgFdA8AATUYBYAOsnT2OwABq7cAOGImDwABq+sAOEoU+Aj2NwABrGMAOGHYcwABrORzAAGspgsAAayTADhJwgdEBAAGDwABrLsAOEoUAwABNHoHKAQAAAYQPKsAATRo9jsAAa1jADhiJk0nAAGtyHMAAa4kcwABrgYbAAGt2wA4YiYENAQABhMAAa4PADhOKAMAATciCjAEAARbAAGuVhcAAa4vADhh2gcjAAE12AMAATdI+AT0wwABrpR7AAGvAlv4AAAAAPz0ewABr2pPqBQAFhcAAa9/ADhh2hsAAa+rADhiJLoDAAGv8wA4SUYTAAGwDwA4TigAGoatgwABsEsAAbCbAAGx1AACBqgAAAAEDwABsK8AAbHUAAAABAQHAAGwxAAAAUGEDAWADrJ1gA8AAStgAAF0DwABNBAFgA6ydAUrAAGxQAR/AAGxUlhECAWADrJ0CLoDAAGxzwA4Z7AAGoaxgwABsesAAbI7AAGzHAACBzwAAAAEDwABsksAAbMcAAAABAQHAAGyXAAAAhBNgA8AATKIAAF0DwABNBAFgA6ydAUrAAGydAR/AAGyhlcwDAWADrJ0DLpOAwABs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AYtfnIYAAAABA8ABOmjAATqIAAAAAAAAAGADodsBPgE9MMABOnEni2AGoeBgwAE6jcABOs7AATtuAwCC0QFqwAE6jmADwABKn5XJAAABA8ABOtDAATtuAAAAAQEBwAE61QAAAIHdYAPAAEyiAABgA6ydAT4CScABOuIiHMABOuyAwAE65sAONwmAuwEAAZMAwABN0AEcwAE6+YDAATrzwA43CYFeAQABFsABOvwugcieBgDAAE3TPgE9MMABOwwfwAE7FsAAS/QDAAOAwAE7J8AONwkuJ4HdAD9KwAE7SAEcwAE7Ty6OqpyGAQABgMABO2TADjcJAKHkBqHhYMABO3PAATuBwAE8MwMAgQwAAAABA8ABO4TAATwzAAAAAgICwAE7iQAAAIHdYAPAAEyiAMABO5oAACAiYAOsnQAAXAE+AknAATunIhzAATuxgMABO6vADjfMgLsBAAGTAMAATdABHMABO76AwAE7uMAON8yBXgEAARbAATvBLoHIngYAwABN0z4BPTDAATvRH8ABO9vAAEv0AwADgMABO+zADjfMLieB3QA/PRzAATwNLo6rnIYCAAKAwAE8IsAON8yBwAE8KcAON9wAoeUGoehgwAE8bcABPHXAATy2AQCOFAAAAAEDwAE8iMABPLYAAAAAAAAAYAPAAEyiAT4BSsABPI4BasABPKNgA8AATKJUBqHjYMABPNrAATzowAE9KgAAjiOchgAAAAEDwAE888ABPSoAAAABAQHAATz4AAAAgchgA8AATKIAAGADrHwBPgFKwAE9BgEewAE9EayAAQABgMABPR/ADjjiAAah5GDAAT0vwAE9OcABPZ4AAI6qnIYAAAABA8ABPU3AAT2eAAAAAQEBwAE9UgAAAIHdYAPAAEyiAABgA6ydAT4BSsABPV8BHMABPWYujmichgEAARzAAT16gMABPXTADjk9g8YBAAFqwAE9imADwABMolQAwABNygCeHQah5WDAAT2jwAE9qMABPh4AAI6rnIYAAAABA8ABPbzAAT4eAAAAAgICwAE9wQAAAIHdYAPAAEyiAMABPdIAAAAiYAOsnQAAXAE+AT0cwAE93y6OapyGAgACHMABPfOAwAE97cAOObiDxgEAAWrAAT4DYAPAAEyiVADAAE3KgcABPhTADjnIAJ4eBqHmYMABOeLAATniAAAQhGoAnKqcqgED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AIjClIPrAAAAAMAATMUGofNgwACIzcAAiOTAAIm/AwCBDQAAAAEDwACI5cAAib8AAAABAQHAAIj0AAAggh1dA8AATUYBYAOtyAAAXQPAAE1GAWADrcgBPgJOwACJBcAAiREAAI4eYAPAAEyiARzAAIkfFsAAiRgugcjAAE12gQ0BAAEWwACJJ4DAAIkhwA5BbYHIwABNdgDAAE3ISsAAiTMBNcAAiUMAAAEAXQPAAE1GAWADrcgBMcAAiUNgA63IADXAAIlOAAABAFwBF8AAiU6CwACJQ8AOQduByIHAAIlXwA5BksAATXQ1wACJawAAAQBcARzAAIlrgsAAiUPADkHbhFgDAAOTFsAAiXwugcjAAE12LgDAAE1rNcAAiZIAAAEAXAEcwACJkoLAAIlDwA5B24RYAwADFsAAiaAugcjAAE12gcAAiajADkGSgMAAibXADkFtAMAATWuCwACJQ8AOQdsGofRgwACJxMAAicnAAIpoAACBxAAAAAEDwACJ0cAAimgAAAABAQHAAInZAAAAgbxgA8AATe8AAGADwABK2AE+A07AAInswACJ8AAAjh9gA8AATKIBFsAAifcugcjAAE12RcAAigMBwACKDMAAig4AAINmYAPAAEyiAZMBHMAAihWCwACKE8AOQwOAuwEAAYHAAIoXwA5C3gDAAE3QAYrAAIoewA5DAxzAAIocgsAAih7ADkMDgQ0BAAGUAMAATcg+AUnAAIopHMAAijUcwACKMS6C0QEAAYLAAIoywA5DAwDAAE1VgIwBAAGAwACKOMAOQsMAwABN/ErAAIpBASk/SsAAilgBKgah9WDAAIptwACKcsAAi1sAAIRcAAAAAQPAAIp5wACLWwAAAAEAAcAAioIAAACEXWADmUEBagBgAcAATawCAFwBPgM9IxzAAIqYgMAAipHADkPKgIwBAAErAMAATfyIwACKkcAOQ8oewACKoJlDAAAAACsBYAOZQU7AAIqywACKtAAAg2ZgA8AATKIBFsAAirsugcjAAE12Q8AAisccwACK0IHAAIrOwA5EHIKMAQABlADAAE3SPgVOwACK4cAAiuUAAIELYAPAAEyiARzAAIrugMAAiufADkPKhF4BAAGBwACK9sAORBwAmUY9icAAiwDADkQcHMAAiwKBwACLAMAORByBBgEAAZQAwABNyU7AAIsSwACLFgAA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ggAAAAEDwAChycAAoiIAAAABAQHAAKHSAAAgImADrcgAAFwBPgE9MMAAod8fwACh6cAATDABAAEnisUABqIMYMAAoifAAKIswACilQAAg2sAAAABA8AAojLAAKKVAAAAAQEBwACiRQAAICJdA8AATQQBYAOtyAAAXAE+AT0wwACiUh/AAKJcwABMMAEAASeKxQAGog1gwACimsAAop/AAKMOAACEdAAAAAEDwACipcAAow4AAAACAgLAAKKqAAAAgd1gA8AATKIAwACiuQAAICJgA63IAABcAT4BPTDAAKLGH8AAotDAAEwwAQABJ44gAAaiDmDAAKMTwACjGMAAo5UAAIR2AAAAAQPAAKMhwACjlQAAAAICAsAAoyYAAACB3WADwABMogDAAKM/AAAggQFdA8AATQQBYAOtyAAAXAE+AT0wwACjTR/AAKNXwABMMAEAASeOIAAGog9gwACjmsAAo5/AAKQ8AACEWQAAAAEDwACjo8AApDwAAAABAAHAAKOpAAAAhFphAwJgA63IYAOtyGADwABMogFqAGABwABNrAIAXAE+AknAAKPPHMAAo9uAwACj08AOXteAjAEAASsAwABN/D4BPTDAAKPsJ44qPz0ewACkJZeSAgFgA63IAi6AwACkMMAOXtcABqIQYMAApEHAAKRFwAClRAAAhHAAAAABA8AApEzAAKVEAAAAAgECwACkVQAAIIG8YAOtyADAAKRjAAAAbWADwABMogFqwACka2ADwABMohoAYAPAAEyiAT4DScAApHUcwACkf4HAAKR5wA5feYFeAQABFsAApIcugcjAAE12AMAATdM+AUrAAKSXARzAAKSelIPrAAAAAMAATMVJwACkrRzAAKS3gcAApLHADl95gLsBAAGTAMAATdA+AT2JwACkxMAOX3mTP0XAAKTZAcAApOLAAKTkAACDZmADwABMogGBwACk5sAOX3kBHMAApO+CwACk7cAOYBGAuwEAARbAAKT2LoHIwABNdgDAAE3QAYrAAKT+wA5gERzAAKT/gsAApP7ADmARgQ0BAAGUAMAATcg+AUnAAKULHMAApRccwAClEy6C0QEAAYLAAKUUwA5gEQDAAE1VgIwBAAGAwAClGsAOX2sAwABN/ErAAKUjAYLAAKUqwA5gET9KwAClNwEcwAClPpSD6wAAAADAAEzFBqIRYMAApUnAAKVNwACmaQAAhHIAAAABA8AApVjAAKZpAAAAAgECwAClYQAAIIG8YAOtyADAAKVvAAAAbWADwABMogFqwACld2ABwABNrAIAYAPAAEyiAT4DScAApYQiHMAApY6BwACliMAOYQiAjAEAASsAwABNxgEcwACln4HAAKWZwA5hCIFeAQABFsAApacugcjAAE12AMAATdM+AT2JwAClt8AOYQgcwAClyxbAAKXELoHIwABNdoEGAQABlADAAE3JScAApdscwACl5YHAAKXfwA5hCIC7AQABkwDAAE3QPgFKwACl8gEcwACl+ZSD6wAAAADAAEzFP0XAAKYHAcAAphDAAKYSAACDZmADwABMogGBwACmFMAOYQgBHMAAph2CwACmG8AOYdaBXgEAAZMAwABN0wGKwACmI8AOYdYcwACmJILAAKYjwA5h1oEGAQABlADAAE3JPgFJwACmMBzAAKY8HMAApjgugtEBAAGCwACmOcAOYdYAwABNVYCMAQABgMAApj/ADmD6AMAATfxKwACmSAGCwACmT8AOYdY/SsAAplwBHMAApmOUg+sAAAAAwABMxQaiEmDAAKZuwACmdsAAptEAAIQvAAAAAQPAAKaAwACm0QAAAAAAAABgA63IAT4BPTDAAKaJH8AAppPAAEwwAQABJ4rHAAaiE2DAAKbWwACm3sAAp0AAAIR1AAAAAQPAAKbmwACnQAAAAAEBAcAApusAAACB3WADwABMogAAYAOtyAE+AT0wwACm+B/AAKcCwABMMAEAASeKxwAGohRgwACnRcAAp0rAAKfAAACDlQAAAAEDwACnVcAAp8AAAAABAQHAAKdbAAAAgRthAwFgA63IYAPAAErYAABcAT4BPTDAAKd4H8AAp4LAAEwwAQABJ4rHAAaiFWDAAKfFwACnysAAqEAAAIOWAAAAAQPAAKfVwACoQAAAAAEBAcAAp9sAAACBG2EDAWADrchgA8AAStgAAFwBPgE9MMAAp/gfwACoAsAATDABAAEniscABqIhYMAAqEXAAKhRwACoqwEAgcIAAAABA8AAqFfAAKirAAAAAAAAAGADrcgBPgJJwACoXRzAAKhoFsAAqGEugcjAAE12gowBAAGTAMAATdJKwACobQEcwACoeC6C0QEAAZMAwABNVT89MMAAqIEewAConJb8AAAAAAaiImDAAKiwwACovMAA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neMABqI5YMAArKnAAKy3wACszgACjiOchgAAAAEDwACswsAArM4AAAABAQHAAKzHAAAAgchgA8AATKIAAGADrJIABqI6YMAArNPAAKzfwACtDwAAhAkAAAABA8AArOvAAK0PAAABAAAEIWADwABN7wFbAAAAAF0DwABNBAFfAwAAAUrAAKzxAR/AAKz1lu8BAV8DAAABLgAGojtgwACtFMAArSjAAK2UAACECAAAAAEDwACtMsAArZQAAAABAQHAAK1HAAAggh1dA8AATQQBYAOu7AAAXQPAAE0EAWADruwBSsAArVcBHsAArVuWxwIBYAOu7AIugMAArY7ADm+rAAaiPGDAAK2ZwACtocAArc8AAIHJAAAAAQPAAK2owACtzwAAAQAABENgA8AATe8BWwAAAABdA8AATUYBXwMAAAFKwACtrgEewACts8AATVEBAmADruxfAwAAAS4ABqJxYMAArdPAAK3cwACuSwIAgcIAAAABA8AAreHAAK5LAAAAAQEBwACt7AAAICJgA67sAABcAT4CScAArfkcwACuCRbAAK4CLoHIwABNdoCMAQABkwDAAE3GPTDAAK4PH8AArhnAAEv0AgACky4APz0cwACuPC6BDAIAApOAwACuQsAOcG8AwABNVgaicmDAAK5QwACuWcAArtUCAIHVAAAAAQPAAK5dwACu1QAAAAEBAcAArmgAACAiYAOu7AAAXAE+AknAAK51HMAAroUWwACufi6ByMAATXaAjAEAAZMAwABNxj0wwACuix/AAK6VwABL9AIAApMuAD89HMAArrgugQwCAAIcwACuxRbAAK6+LoHIwABNdoEGAQABlADAAE3JgMAArszADnD6AMAATVYGoj1gwACu2sAArt7AAK+dAACEcQAAAAEDwACu6MAAr50AAAACAQLAAK7uAAAAgRthAwFgA67sYAPAAErYAMAArwwAAABtYAPAAEyiAWrAAK8UYAPAAEyiGgBgA8AATKIBPgNJwACvHhzAAK8ogcAAryLADnG3gLsBAAGTAMAATdA9icAAry3ADnG3kz9FwACvPAHAAK9FwACvRwAAg2ZgA8AATKIBgcAAr0nADnG3ARzAAK9SgsAAr1DADnIMgLsBAAEWwACvVC6ByMAATXYAwABN0AGKwACvXMAOcgwcwACvXYLAAK9cwA5yDIENAQABlADAAE3IPgFJwACvaRzAAK9xgMAAr23ADnGgbgEAARzAAK92LoLRAQABgsAAr3fADnIMAMAATVUAAErAAK98AYLAAK+DwA5yDD9KwACvkAEcwACvl5SD6wAAAADAAEzFBqI+YMAAr6LAAK+mwACwiwAAhHMAAAABA8AAr7TAALCLAAAAAgECwACvugAAAIEbYQMBYAOu7GADwABK2ADAAK/YAAAAbWADwABMogFqAGABwABNrAIAYAPAAEyiAT4DScAAr+YiHMAAr/CBwACv6sAOcwiAjAEAASsAwABNxgEcwACwAYHAAK/7wA5zCIFeAQABFsAAsAkugcjAAE12AMAATdM9icAAsBHADnMIHMAAsCUWwACwHi6ByMAATXaBBgEAAZQAwABNyT9FwACwLgHAALA3wACwOQAAg2ZgA8AATKIBgcAAsDvADnMIARzAALBEgsAAsELADnObgV4BAAGTAMAATdMBisAAsErADnObHMAAsEuCwACwSsAOc5uBBgEAAZQAwABNyT4BScAAsFccwACwX4DAALBbwA5y8W4BAAEcwACwZC6C0QEAAYLAALBlwA5zmwDAAE1VAABKwACwagGCwACwccAOc5s/SsAAsH4BHMAAsIWUg+sAAAAAwABMxQaiP2DAALCQwACwqcAAsYgDAIENAAAAAQPAALCqwACxiAAAAAEBAcAAsLsAACCCHV0DwABNRgFgA67sAABdA8AATUYBYAOu7AE+Ak7AALDMwACw2AAAjh5gA8AATKIBHMAAsOYWwACw3y6ByMAATXaBDQEAARbAALDugMAAsOjADnR1gcjAAE12AMAATchKwACw+gE1wACxDAAAAQBdA8AATUYBYAOu7AExwACxDGADruwANcAAsRcAAAEAXAEXwACxF4LAALEMwA5044HIgcAAsSDADnSawABNdDXAALE0AAABAFwBHMAAsTSCwACxDMAOdOOEWAMAA5MWwACxRS6ByMAATXYuAMAATWs1wACxWwAAAQBcARzAALFbgsAAsQzADnTjhFgDAAMWwACxaS6ByMAATXaBwACxccAOdJqAwACxfsAOdHUAwABNa4LAALEMwA504waiQGDAALGNwACxksAAsjEAAIHEAAAAAQPAALGawACyMQAAAAEBAcAAsaIAAACBvGADwABN7wAAYAPAAErYAT4DTsAAsbXAALG5AACOH2ADwABMogEWwACxwC6ByMAATXZFwACxzAHAALHVwACx1wAAg2ZgA8AATKIBkwEcwACx3oLAALHcwA52C4C7AQABgcAAseDADnXmAMAATdABisAAsefADnYLHMAAseWCwACx58AOdguBDQEAAZQAwABNyD4BScAAsfIcwACx/hzAALH6LoLRAQABgsAAsfvADnYLAMAATVWAjAEAAYDAALIBwA51ywDAAE38SsAAsgoBKT9KwACyIQEqBqJBYMAAsjbAALI7wACzJAAAhFwAAAABA8AAskLAALMkAAAAAQABwACySwAAAIRdYAOZQQFqAGABwABNrAIAXAE+Az0jHMAAsmGAwACyWsAOdtKAjAEAASsAwABN/IjAALJawA520h7AALJpmUMAAAAAKwFgA5lBTsAAsnvAALJ9AACDZmADwABMogEWwACyhC6ByMAATXZDwACykBzAALKZgcAAspfADnckgowBAAGUAMAATdI+BU7AALKqwACyrgAAgQtgA8AATKIBHMAAsreAwACysMAOdtKEXgEAAYHAALK/wA53JACZRj2JwACyycAOdyQcwACyy4HAALLJwA53JIEGAQABlADAAE3JTsAAstvAALLfAACEX2ADruwBHMAAsuUugtEBAAGBwACy5sAOdyQAwABNVT0cwACy9C6BDAIAAoHAALL1wA53JBzAALL+LoLRAQABgsAAsv/ADndkAMAATVUAwABNVj0cwACzDy6BDAIAAoLAALMQwA53ZIPAALMXwA53ugDAAE1WBqJCYMAAsynAALMuwAC8FwAAhFgAAAABA8AAszbAALwXAAAABAMEwACzOwAAAG1gA8AATKIAwACzRgAAAIRUYAPAAEyiAMAAs18AACCCwF0DwABNBAFgA67sAMAAs3AAAACEZ2ADwABMogFqwACzfGADwABMohoAXAE+C0nAALObIiIcwACzoZOCjAEAAYDAALOjwA54YQDAAE3SARzAALOygMAAs6zADnhhgowBAAGBwACztMAOeHAAwABN0gEcwACzv4HAALO7wA54cIKMAQABFsAAs8EugcjAAE12AMAATdI+Aj0ewACz3MAAS98DAAOAwACz7MAOeGGBwACz88AOeHAWwACz+C6ByMAATXYAQCrAALQgwAC0JQA/ScAAtDIcwAC0QIPAALQ2wA54lYC7AQABkwDAAE3QPgE9MMAAtE0fwAC0XsAAS+gEAASDwAC0ZMAOeJWTKyeEZwA/TsAAtJfAALSdAAGBm2ADwABMogEcwAC0o4HAALSfwA54cIEGAQABgMAAtKXADnhhAMAATclJwAC0sBzAALTOHMAAtMEWwAC0uoLAALS1wA54gIHIwABNJ4EGAQABg8AAtMPADniVAMAATcmAuwEAAYTAALTQwA55mgDAAE3QPgE9MMAAtN8ewAC0+pb+AAAAAD9JwAC1DxzAALUZhMAAtRPADnmagIwBAAGTAMAATcZKwAC1HwA/ScAAtSwlwAC1NQCCwAC1MMAOeIBgA5ydPgJOwAC1wsAAtdIAAY4kYAOcnQEmwAC12QCCwAC11MAOeIBgA5ydScAAtfIcwAC2DhbAALX7Lo4UnaiAjAEAARbAALYhhcAAthHADnprjhScoADAAE3GPgFJwAC2PyIcwAC2SoTAALZEwA55moC7AQABNwoAwABN0AAhHMAAtmsWwAC2ZIXAALZUwA56a4HBnKKAjAEAARbAALZzLoHBnaoAne4+Aj0ewAC2jpPqBQAFJsAAtpgAgsAAtpPADniAXQPAAE1GAWADruyDwAC2rMAOeJUugMAAtr3ADnhhhMAAtsTADnmaAErAALbWAEnAALbtHMAAtwMWwAC2/RbAALb2LoHBnaqDpJyGneaOFpyGBgAGHMAAtzUcwAC3IIDAALcawA54YYPGAQABFsAAtyIujhSdqADAAE3KgQ0BAAEWwAC3PC6GnZ2pAMAATcgcwAC3XYTAALdXwA55moPGAQABFsAAt18ujhSdqADAAE3KFsAAt5YWwAC3j4XAALd/wA56a4HBnKKDpJyGneYcwAC3yBzAALezg8AAt6nADniVg8YBAAEWwAC3tS6OFJ2oAMAATcqBDQEAARbAALfahcAAt8rADnprhp2coQDAAE3IHsAAt/2T9wEAAS4AHsAAuB6T9wEAAYLAALgkwA54gAAAnK0+AUrAALg4AD9JwAC4VxzAALhyFsAAuGuFwAC4W8AOemuBwZyigIwBAAEWwAC4ei6BwZ2qAJ3uPgVOwAC5UMAAuVsAAY4lXQPAAE1GAWADruwBJsAAuWIAgsAAuV3ADniAXQPAAE1GAWADruxOwAC5hMAAuY8AAY4mYAOskgEcwAC5kS6OI5yGAQABhMAAuZ3ADnmaAJ2yRcAAua0BwAC5tsAAubgAAINmYAPAAEyiAZMBHMAAub8UwAC5vcAOfPkIAIC7AQABhMAAucHADnmaAMAATdABFcAAucjADnz5CBzAALnJFMAAucjADnz5CACBDQEAAZQAwABNyD4BPRzAALnjh8AAudnADnzJgQwCAAIUwAC55MAOfPkIABzAALnzhsAAuenADnyWgtEBAAEcwAC5/oPAALn0wA54lYENAQABFMAAugDADnz5CAAAwABNyADAAE1VAMAATVZFwAC6FgHAALofwAC6IQAAg2ZgA8AATKIBgMAAuiPADnhhARzAALosFMAAuirADn2+CACAuwEAAYHAALouwA54cADAAE3QARXAALozwA59vggcwAC6NBTAALozwA59vggAgQ0BAAGUAMAATcg+AT0cwAC6SC6BDAIAAhTAALpJwA59vggAHMAAuliHwAC6TsAOfMmC0QEAARzAALpbFMAAulnADn2+CACBBgEAAYDAALpdwA54YQDAAE3JAMAATVUAwABNVkrAALp3AD8/TsAAupcAAACEaF0DwABNRgFbAE7AALqqAAAAhGlgA8AATKIAScAAurolwAC6wwCCwAC6vsAOeIBdA8AATUYBYAOu7D4CPY3AALrfwA5+hhTAALrrwA54gAIBXQPAAE1GAWADruw9jsAAuvfADn6Zg8AAuwTADniVPgI9jcAAuyLADn6GHMAAu0McwAC7M4LAALsuwA54gIHRAQABg8AAuzjADniVAMAATR6BygEAAAGEDyrAAE0aPY7AALtiwA5+mZNJwAC7fBzAALuTHMAAu4uGwAC7gMAOfpmBDQEAAYTAALuNwA55mgDAAE3IgowBAAEWwAC7n4XAALuVwA5+hoHIwABNdgDAAE3SPgE9MMAAu68ewAC7ypb+AAAAAD89HsAAu+ST6gUABYXAALvpwA5+hobAALv0wA5+mS6AwAC8BsAOeGGEwAC8DcAOeZoABqJDYMAAvBzAALwwwAC8fwAAgaoAAAABA8AAvDXAALx/AAAAAQEBwAC8OwAAAFBhAwFgA67sYAPAAErYAABdA8AATQQBYAOu7AFKwAC8WgEfwAC8XpYRAgFgA67sAi6AwAC8fcAOf/wABqJEYMAAvITAALyYwAC80QAAgc8AAAABA8AAvJzAALzRAAAAAQEBwAC8oQAAAIQTYAPAAEyiAABdA8AATQQBYAOu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wADCxcAOhrscwADC1y6C0QEAAYPAAMLYwA6HEADAAE1VAABKwADC5wGAwADC7sAOhrsGok9gwADDA8AAww/AAMNgAACBqwAAAAEDwADDFcAAw2AAAAEAAAQhYAPAAE3vAVsBAQHAAMMYAAAAUGEDAWADruxfAwAAAABdA8AATQQBXwMAAAFKwADDNwEewADDO5XgAgJgA67sXwMAAAIugMAAw17ADoftAAaiUGDAAMNlwADDccAAw88AAIGzAAAAAQPAAMN6wADDzwAAAQAABCFgA8AATe8BWwEBAcAAw4cAAABQYQMBYAOu7F0DwABNBAFfAwAAAABdA8AATQQBXwMAAAFKwADDpgEfwADDqpYlAgJgA67sXwMAAAIugMAAw83ADohkAAaiUWDAAMPUwADD2cAAxHkAAIHHAAAAAQPAAMPewADEeQAAAAEBAcAAw+QAAABQYQMBYAOu7GADwABK2AAAYAPAAErYAT4DTsAAxATAAMQIAACOH2ADwABMogEWwADEDy6ByMAATXZFwADEGwHAAMQkwADEJgAAg2ZgA8AATKIBkwEcwADELYLAAMQrwA6JHIC7AQABgcAAxC/ADoj3AMAATdABisAAxDbADokcHMAAxDSCwADENsAOiRyBDQEAAZQAwABNyD4BScAAxEEhHMAAxEeAwADERsAOiNZuAQABHMAAxEwugtEBAAGCwADETcAOiRwAwABNVQAASsAAxFIBKj9KwADEagEpBqJSYMAAxH7AAMSDwADFIAAAgQ4AAAABA8AAxIbAAMUgAAAAAQEBwADEjAAAAFBhAwFgA67sYAPAAErYAABgA8AAStgBPgNOwADErMAAxLAAAI4fYAPAAEyiARbAAMS3LoHIwABNdkXAAMTDAcAAxMzAAMTOAACDZmADwABMogGTARzAAMTVgsAAxNPADoomgLsBAAGBwADE18AOigEAwABN0AGKwADE3sAOiiYcwADE3ILAAMTewA6KJoENAQABlADAAE3IPgFJwADE6RzAAMTugMAAxO3ADongbgEAARzAAMTzLoLRAQABgsAAxPTADoomAMAATVUAAErAAMT5ASk/SsAAxRABKgaiU2DAAMUlwADFL8AAxlIAAIHYAAAAAQPAAMU5wADGUgAAAAIBAcAAxT8AAACBG2EDAWADruxgA8AAStgAAcAAxWMAACCB2WEDAGADruwBagBgAcAATawCYAOu7AE+BE7AAMV4wADFfAAAjh9gA8AATKIBFsAAxYMugcjAAE12RcAAxY8BwADFmMAAxZoAAINmYAPAAEyiAZMBHMAAxaGDwADFn8AOi0iAuwEAAYLAAMWjwA6LIwDAAE3QAYvAAMWqwA6LSBzAAMWog8AAxarADotIgQ0BAAGUAMAATcg+Ak7AAMW5wADFwQAAgbxgA67sARzAAMXHLoLRAQABg8AAxcjADotIAMAATVVJwADF0hzAAMXagMAAxdbADorpbgEAAYTAAMXbwA6LpAAASsAAxeUBhMAAxezADoukP0nAAMX/IRzAAMYKgcAAxgPADosBgIwBAAErAMAATfxKwADGEwEcwADGIIHAAMYawA6LAW4AAAAAAD89MMAAxigewADGQ5b8AAAAAAaiVGDAAMZXwADGYcAAx5oAAIHaAAAAAQPAAMZqwADHmgAAAAIBAcAAxnAAAACBG2EDAWADruxgA8AAStgAAcAAxpQAACCB2WEDAGADruwBagBgAcAATawCYAOu7AE+BE7AAMapwADGrQAAjh9gA8AATKIBFsAAxrQugcjAAE12RcAAxsABwADGycAAxssAAINmYAPAAEyiARzAAMbRgsAAxs3ADoysgQYBAAGUAMAATckBHMAAxtiDwADG1sAOjNGBXgEAAZMAwABN0wGLwADG4MAOjNEcwADG3oPAAMbgwA6M0YEGAQABlADAAE3JPgJOwADG78AAxvcAAIG8YAOu7AEcwADG/S6C0QEAAYPAAMb+wA6M0QDAAE1VScAAxwgcwADHEIDAAMcMwA6Mcm4BAAGEwADHEcAOjT0AAD4BSsAAxyUBhMAAxyzADo09P0nAAMdHIRzAAMdSgcAAx0vADoyKgIwBAAErAMAATfxKwADHWwEcwADHaIHAAMdiwA6Mim4AAAAAAD89MMAAx3AewADHi5b8AAAAAAaiVWDAAMefwADHqcAAybMAAIHbAAAAAQPAAMe0wADJswAAAAIBAcAAx7oAAACBG2EDAWADruxgA8AAStgAAcAAx94AACCB2WEDAGADruwBagBgAcAATawCYAOu7AE+B07AAMfzwADH+gAAgOZbAStOwADIC8AAyBkAAIQUYAPAAErYASpOwADIKsAAyC4AAI4fYAPAAEyiARbAAMg1LoHIwABNdkXAAMhB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YMAAzrXAAM6/wADPGgAAhC8AAAABA8AAzsnAAM8aAAAAAAAAAGADruwBPgE9MMAAztIfwADO3MAATDABAAEniscABqJfYMAAzx/AAM8pwADPiwAAhHUAAAABA8AAzzHAAM+LAAAAAQEBwADPNgAAAIHdYAPAAEyiAABgA67sAT4BPTDAAM9DH8AAz03AAEwwAQABJ4rHAAaiYGDAAM+QwADPlcAA0A0AAIOVAAAAAQPAAM+gwADQDQAAAAEBAcAAz6YAAACBG2EDAWADruxgA8AAStgAAFwBPgE9MMAAz8UfwADPz8AATDABAAEniscABqJhYMAA0BLAANAXwADQjwAAg5YAAAABA8AA0CLAANCPAAAAAQEBwADQKAAAAIEbYQMBYAOu7GADwABK2AAAXAE+AT0wwADQRx/AANBRwABMMAEAASeKxwAGom1gwADQlMAA0KLAAND8AQCBwgAAAAEDwADQqMAA0PwAAAAAAAAAYAOu7AE+AknAANCuHMAA0LkWwADQsi6ByMAATXaCjAEAAZMAwABN0krAANC+ARzAANDJLoLRAQABkwDAAE1VPz0wwADQ0h7AANDtlvwAAAAABqJuYMAA0QHAANEPwADRcQEAgdUAAAABA8AA0RTAANFxAAAAAAAAAGADruwBPgJJwADRGhzAANElFsAA0R4ugcjAAE12gowBAAGTAMAATdJKwADRKgEcwADRNS6C0QEAARzAANE9FsAA0TYugcjAAE12gQYBAAGUAMAATckAwABNVT89MMAA0UcewADRYpb8AAAAAAaib2DAANF2wADRhMAA0hsBAIHXAAAAAQPAANGLwADSGwAAAAAAAABgA67sAT4DScAA0ZEcwADRnBbAANGVLoHIwABNdoCMAQABlADAAE3GSsAA0aIBHMAA0a0ugtEBAAGTAMAATVU/ScAA0bYcwADRwRbAANG6LoHIwABNdoCMAQABkwDAAE3GPTDAANHHHsAA0eKW/AAAAAA/PTDAANHzHsAA0g6W/QAAAAAGomJgwADSIMAA0i7AANMdAACEYQAAAAEDwADSNcAA0x0AAAACAQLAANI6AAAAbWADwABMogDAANJGAAAAhFRgA8AATKIBagBgAcAATawCAGADrJIBPgU9icAA0lLADpjQHsAA0mPAAEvfAwADgMAA0nPADpjBgcAA0nrADpjQFsAA0oQugcjAAE12AE7AANKVwADSnAAAgchgA8AATKIBHMAA0qKBwADSnsAOmNCBBgEAAYDAANKkwA6YwQDAAE3JTsAA0r3AANLEAACA5mADrJIBHMAA0sYujiOchgEAAYLAANLSwA6ZJwCdsj0cwADS5oPAANLfwA6ZXIRYBAAEk4LAANLywA6ZJy6AwADTAMAOmMEAwABNa0rAANMMAYPAANMTwA6ZXAaiY2DAANMiwADTJ8AA06gAAIR4AAAAAQPAANMtwADTqAAAAAICAsAA0zIAAACB3WADwABMogDAANNNAAAghCJdA8AATQQBYAOu7AAAXAE+Ak7AANNjwADTZwABhFRgA8AATKIBHMAA03kWwADTcoHAANNpwA6Z+YHIwABNJ4ENAQABgMAA03vADpnpAMAATcg9HMAA04YuhFgDAAOAwADTj8AOmemCwADTlsAOmhSBwADTm8AOmfkAnbsGomRgwADTrcAA07LAANRtAACEZQAAAAEDwADTu8AA1G0AAAADAgPAANPAAAAAbWADwABMogDAANPLAAAAhFRgA8AATKIAwADT2wAAIIp+YAOu7AFqAGABwABNrAIAXAE+Aj0ewADT+MAAS98DAAOAwADUCMAOmqSBwADUD8AOmrMWwADUGS6ByMAATXYARcAA1CYBwADUL8AA1DEAAINmYAPAAEyiAYDAANQzwA6apAEcwADUPIPAANQ6wA6bEYC7AQABgcAA1D7ADpqzAMAATdABi8AA1EXADpsRHMAA1EODwADURcAOmxGBDQEAAZQAwABNyD4BPRzAANRULoEMAgACg8AA1FXADpsRgsAA1FrADprDAMAATVYAAA5t+gAObmQADm6TAA5uwgAObu8ADm8uAA5vhAAOb+wADnBIAA5w0wAOcXkADnLKAA50TgAOdaQADnarAA54OgAOf9UADoA+AA6AogAOgQwADoFwAA6B2gAOgiQADoJ0AA6DJgAOg3AADoPmAA6EMgAOhR4ADoaIAA6HugAOiDEADoivAA6JuQAOisIADoxLAA6N5gAOj+8ADpBNAA6QnAAOkPIADpFRAA6RuAAOkkwADpPbAA6VlQAOldoADpYvAA6WiAAOluEADpdaAA6X7gAOmJoADpnCAA6afQAOm5cAAAA3AqJzYMABROzAAUUMwAFJSgOOsQFqwAFE7WADwABKnwMAAWAD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AgFgA8AATKICLjWjVgAAAQBhAwJgA8AATKJgA8AATKJgA8AATKIBgKNWwA64jyMco1aBo1bADrjLgIwBAAErAMAATfxqo2xhAwJdA8AASuQBW10DwABK5AFbYAPAAEyihCWBo1bADrjLAWEDAmADwABMomADwABMomADwABMogAGoqVgo32jgaR8AACEcAAAAAEDo4ikfAAAAAIBAqONAAAggbxgA8AATKIAo5sAAABtYAPAAEyiAWqjo2ADwABMohoAYAPAAEyiAT4DSaOtHKO3gaOxwA65a4FeAQABFqO/LoHIwABNdgDAAE3TPgFKo88BHKPWlIPrAAAAAMAATMVJo+Uco++Bo+nADrlrgLsBAAGTAMAATdA+AT2Jo/zADrlrkz9FpBEBpBqkHAAAg2ZgA8AATKIBgaQewA65awEcpCeCpCXADrnpgLsBAAEWpC4ugcjAAE12AMAATdABiqQ2wA656RykN4KkNsAOuemBDQEAAZQAwABNyD4BSaRDHKRPHKRLLoLRAQABgqRMwA656QDAAE1VgIwBAAGApFLADrldAMAATcZKpFsBgqRiwA656T9KpG8BHKR2lIPrAAAAAMAATMUGoqZgpIGkhaWdAACEcgAAAAEDpJClnQAAAAIBAqSVAAAggbxgA8AATKIApKMAAABtYAPAAEyiAWqkq2ABwABNrAIAYAPAAEyiAT4DSaS4IhykwoGkvMAOurKAjAEAASsAwABNxgEcpNOBpM3ADrqygV4BAAEWpNsugcjAAE12AMAATdM+AT2JpOvADrqyHKT/FqT4LoHIwABNdoEGAQABlADAAE3JSaUPHKUZgaUTwA66soC7AQABkwDAAE3QPgFKpSYBHKUtlIPrAAAAAMAATMU/RaU7AaVEpUYAAINmYAPAAEyiAYGlSMAOurIBHKVRgqVPwA67XoFeAQABkwDAAE3TAYqlV8AOu14cpViCpVfADrtegQYBAAGUAMAATck+AUmlZBylcBylbC6C0QEAAYKlbcAOu14AwABNVYCMAQABgKVzwA66pADAAE3GSqV8AYKlg8AOu14/SqWQARyll5SD6wAAAADAAEzFBqKnYKWipaamAQAAhC8AAAABA6WwpgEAAAAAAAAAYAPAAEyiAT4BPTCluR+lw8AATDABAAEniscABqKoYKYGpgqmbAAAhHUAAAABA6YSpmwA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BAKjE2DAAUykwAFMxMABUD8DjrkBasABTKVgA8AASp8DAAFgA6MKAAFgA6wXAAAGBqMWYMABTT7AAU1GwAFNiQQBi1+chgAAAAEDwAFNacABTYkAAAAAAAAAYAOjEwE+AT0wwAFNcieLYAajGGDAAU2+wAFN/8ABTpQDAILRAWrAAU2/YAPAAEqfg3IAAAEDwAFOAcABTpQAAAABAQHAAU4GAAAAgd1gA8AATKIAAGADwABMogE+AknAAU4TIhzAAU4dgMABThfADvUigLsBAAGTAMAATdABHMABTiqAwAFOJMAO9SKBXgEAARbAAU4tLoHIngYAwABN0z4BPTDAAU49H8ABTkfAAEv0AwADgMABTljADvUiLieB3QA/SsABTnkBHMABToAujkSchgEAAYDAAU6KwA71IgCeCwajGWDAAU6ZwAFOp8ABT1IDAIEMAAAAAQPAAU6qwAFPUgAAAAICAsABTq8AAACB3WADwABMogDAAU66AAAgImADwABMogAAXAE+AknAAU7HIhzAAU7RgMABTsvADvXngLsBAAGTAMAATdABHMABTt6AwAFO2MAO9eeBXgEAARbAAU7hLoHIngYAwABN0z4BPTDAAU7xH8ABTvvAAEv0AwADgMABTwzADvXnLieB3QA/PRzAAU8tLo5GnIYCAAKAwAFPN8AO9ecewAFPPpyUAQABgcABT0fADvX3AACeDAajHmDAAU+MwAFPlMABT9EBAI4UAAAAAQPAAU+nwAFP0QAAAAAAAABgA8AATKIBPgFKwAFPrQFqwAFPvmADwABMohQGoxtgwAFP9cABT//AAVA9AACOI5yGAAAAAQPAAVAKwAFQPQAAAAEBAcABUA8AAACByGADwABMogAAYAOsFwE+AUrAAVAdAR7AAVAorBsBAAGAwAFQMsAO9woABqMcYMABTMTAAUzEAAAQhGoAnKqcqgEDAAAAAAADAwMAAAAAbWADwABMogAAAAAAhFRgA8AATKIAAAAAIIQiXQPAAE0EAVsAAFwBSgABHQCEagMAA4AAwA73XIEAwA73aIIAwA73dQCcqgAADvS0AA707gAO9cAADvaeAA724QAO9zwADvemAAAABgKjH2DAAVBCwAFQYsABVA43jroAAAFgA54AAAFgA5yyAAEFo0wAAAAABAAAAwAAAAAAAAAAAGADox8BPwEJAACe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yRyZloOZmMAPXcmBDQEAAZQAwABNyD4BPYqZo8APXagcmbKAmavAD11AbgIAAoKZs8APXagcmb4ugtEBAAGDmb/AD13JAMAATVUAAEqZzgGCmdXAD12oBqPVYJnjmeWavAAAgb0AAAABA5nsmrwAAAEAAAQhYAPAAE3vAVsCAgKZ7wAAAIG+XwMAAACZ/wAAAIG6YQMCXwMAAGADwABMol8DAAAAAF8DAAABPgNOmi+aMwAAjh9gA8AATKIBFpo6LoHIwABNdkWaRgGaT5pRAACDZmADwABMogGTARyaWIOaVsAPXseAuwEAAYKaWsAPXqoAwABN0AGLmmHAD17HHJpfg5phwA9ex4ENAQABlADAAE3IPgE9iJpswA9efByagoGae8APXohuAgACgJqDwA9efByalS6C0QEAAYOalsAPXscAwABNVQAASpqlAYCarMAPXnwGo9ZgmsGazZsMAACBqwAAAAEDmtObDAAAAQAABCFgA8AATe8BWwEBAZrWAAAAUGEDAWADwABMol8DAAAAAF0DwABNBAFfAwAAAUqa6QEemu2V4AICYAPAAEyiXwMAAAIugJsKwA9fegAGo9dgmxGbHZtvAACBswAAAAEDmyabbwAAAQAABCFgA8AATe8BWwEBAZszAAAAUGEDAWADwABMol0DwABNBAFfAwAAAABdA8AATQQBXwMAAAFKm0wBH5tQliUCAmADwABMol8DAAACLoCbbcAPX+MABqPYYJt0m3mcEwAAgccAAAABA5t+nBMAAAABAQGbhAAAAFBhAwFgA8AATKJgA8AAStgAAGADwABK2AE+A06bnpuiAACOH2ADwABMogEWm6kugcjAAE12RZu1AZu+m8AAAINmYAPAAEyiAZMBHJvHgpvFwA9ghYC7AQABgZvJwA9gaADAAE3QAYqb0MAPYIUcm86Cm9DAD2CFgQ0BAAGUAMAATcg+AUmb2yEcm+GAm+DAD2BHbgEAARyb5i6C0QEAAYKb58APYIUAwABNVQAASpvsASo/SpwEASkGo9lgnBicHZy0AACBDgAAAAEDnCCctAAAAAEBAZwmAAAAUGEDAWADwABMomADwABK2AAAYAPAAErYAT4DTpxAnEQAAI4fYAPAAEyiARacSy6ByMAATXZFnFcBnGCcYgAAg2ZgA8AATKIBkwEcnGmCnGfAD2FfgLsBAAGB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cSaB0QEAAYOyoMAPcTsAwABNHoHKAQAAAYQPKsAATRo9jrLKwA92K5NJsuQcsvscsvOGsujAD3YrgQ0BAAGEsvXAD3ISAMAATciCjAEAARazB4Wy/cAPdhqByMAATXYAwABN0j4BPTCzFx6zMpb+AAAAAD89HrNMk+oFAAWFs1HAD3YahrNcwA92Ky6As27AD3ELhLN1wA9yEgAGo/9gs4SzkLR9AACEYQAAAAEDs5e0fQAAAAIBArOcAAAAbWADwABMogCzqAAAAIRUYAPAAEyiAWoAYAHAAE2sAgBgA6w2AT4FPYmztMAPd10es8XAAEvfAwADgLPVwA93UIGz3MAPd10Ws+YugcjAAE12AE6z97P+AACByGADwABMogEctASBtADAD3ddgQYBAAGAtAbAD3dQAMAATclOtB20JAAAgOZgA6w2ARy0Ji6OI5yGAQABgrQywA93qACc7D0ctEaDtD/AD3fThFgEAASTgrRSwA93qC6AtGDAD3dQAMAATWtKtGwBg7RzwA930wAAD3BRAA9wuwAPcO4AD3czAA94JQAAAAQCpAJgwAFYWcABWHnAAVyuA47CAWrAAVhaYAPAAEqfAwABYAOj+QABYAOsNgAACAakBWDAAVj2wAFY/sABWUIEAYtfnIYAAAABA8ABWSLAAVlCAAAAAAAAAGADpAIBPgE9MMABWSsni2AGpAdgwAFZd8ABWYTAAVohAwCC0QAAAAEDwAFZhsABWiEAAAABAQHAAVmLAAAAgd1gA8AATKIAAGADwABMogE+AknAAVmYIhzAAVmigMABWZzAD3jOgLsBAAGTAMAATdABHMABWa+AwAFZqcAPeM6BXgEAARbAAVmyLoHIngYAwABN0z4BPTDAAVnCH8ABWczAAEv0AwADgMABWd3AD3jOLieB3QA/SsABWf4BHMABWgUujoichgEAAYDAAVoXwA94zgCkCwakCGDAAVomwAFaNMABWugDAIEMAAAAAQPAAVo3wAFa6AAAAAICAsABWjwAAACB3WADwABMogDAAVpHAAAgImADwABMogAAXAE+AknAAVpUIhzAAVpegMABWljAD3mTgLsBAAGTAMAATdABHMABWmuAwAFaZcAPeZOBXgEAARbAAVpuLoHIngYAwABN0z4BPTDAAVp+H8ABWojAAEv0AwADgMABWpnAD3mTLieB3QA/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D50SggDAD50fAJyqBqROYKqNqpmqsAACjiOchgAAAAEDqqSqsAAAAAEBAaqpAAAAgchgA8AATKIAAGADrEAABqRPYKq1qrqzfwAAhFgAAAABA6rCs38AAAAEAwSqxwAAAG1gA8AATKIAqtIAAACEVGADwABMogCq5QAAIILAXQPAAE0EAWADwABMogCq8AAAAIRnYAPAAEyiAWqq/GADwABMohoAXAE+C0mrGyIiHKshk4KMAQABgKsjwA+doADAAE3SARyrMoCrLMAPnaCCjAEAAYGrNMAPna0AwABN0gEcqz+BqzvAD52tgowBAAEWq0EugcjAAE12AMAATdI+Aj0eq1zAAEvfAwADgKtswA+doIGrc8APna0Wq3gugcjAAE12AEAqq6CrpQA/SauyHKvAg6u2wA+d0IC7AQABkwDAAE3QPgE9MKvNH6vewABL6AQABIOr5MAPndCTKyeEZwA/TqwXrB0AAYGbYAPAAEyiARysI4GsH8APna2BBgEAAYCsJcAPnaAAwABNyUmsMBysThysQRasOoKsNcAPnbuByMAATSeBBgEAAYOsQ8APndAAwABNyYC7AQABhKxQwA+epwDAAE3QPgE9MKxfHqx6lv4AAAAAP0msjxysmYSsk8APnqeAjAEAAZMAwABNxkqsnwA/SaysJay1AIKssMAPnbtgA5ydPgJOrTytTAABjiRgA5ydASatUwCCrU7AD527YAOcnUmtbBytiBatdS6OFJy0gIwBAAEWrZuFrYvAD59OjhScoADAAE3GPgFJrbkiHK3EhK2+wA+ep4C7AQABNwoAwABN0AAhHK3lFq3eha3OwA+fToHBnKKAjAEAARat7S6BwZy2AJ3uPgI9Hq4Ik+oFAAUmrhIAgq4NwA+du10DwABNRgFgA8AATKKDriDAD53QLoCuMcAPnaCErjjAD56nAEquSgBJrmEcrncWrnEWrmougcGctoOknIad5o4WnIYGAAYcrqkcrpSAro7AD52gg8YBAAEWrpYujhSctADAAE3KgQ0BAAEWrrAuhp2ctQDAAE3IHK7RhK7LwA+ep4PGAQABFq7TLo4UnLQAwABNyhavChavA4Wu88APn06BwZyig6Schp3mHK88HK8ng68dwA+d0IPGAQABFq8pLo4UnLQAwABNyoENAQABFq9Oha8+wA+fToadnKEAwABNyB6vcZP3AQABLgAer5KT9wEAAYKvmMAPnbsAAJytPgFKr6wAP0mvyxyv5hav34Wvz8APn06BwZyigIwBAAEWr+4ugcGctgCd7j4FTrDEsM8AAY4lXQPAAE1GAWADwABMogEmsNYAgrDRwA+du10DwABNRgFgA8AATKJOsPKw/QABjiZgA6xAARyw/y6OI5yGAQABhLELwA+epwCc7EWxGwGxJLEmAACDZmADwABMogGTARyxLRSxK8APoWYIAIC7AQABhLEvwA+epwDAAE3QARWxNsAPoWYIHLE3FLE2wA+hZggAgQ0BAAGUAMAATcg+AT0csVGHsUfAD6FAgQwCAAIUsVLAD6FmCAAcsWGGsVfAD6ERgtEBAAEcsWyDsWLAD53QgQ0BAAEUsW7AD6FmCAAAwABNyADAAE1VAMAATVZFsYQBsY2xjwAAg2ZgA8AATKIBgLGRwA+doAEcsZoUsZjAD6IJCACAuwEAAYGxnMAPna0AwABN0AEVsaHAD6IJCByxohSxocAPogkIAIENAQABlADAAE3IPgE9HLG2LoEMAgACFLG3wA+iCQgAHLHGh7G8wA+hQILRAQABHLHJFLHHwA+iCQgAgQYBAAGAscvAD52gAMAATckAwABNVQDAAE1WSrHlAD8/TrIFAAAAhGhdA8AATUYBWwBOshgAAACEaWADwABMogBJsiglsjEAgrIswA+du10DwABNRgFgA8AATKI+Aj2NskfAD6KvFLJTwA+duwIBXQPAAE1GAWADwABMoj2Osl/AD6LAg7JswA+d0D4CPY2yisAPoq8csqscspuCspbAD527gdEBAAGDsqDAD53QAMAATR6BygEAAAGEDyrAAE0aPY6yysAPosCTSbLkHLL7HLLzhrLowA+iwIENAQABhLL1wA+epwDAAE3IgowBAAEWsweFsv3AD6KvgcjAAE12AMAATdI+AT0wsxceszKW/gAAAAA/PR6zTJPqBQAFhbNRwA+ir4azXMAPosAugLNuwA+doISzdcAPnqcABqRQYLOEs5C0fQAAhGEAAAABA7OXtH0AAAACAQKznAAAAG1gA8AATKIAs6gAAACEVGADwABMogFqAGABwABNrAIAYAOsQAE+BT2Js7TAD6PyHrPFwABL3wMAA4Cz1cAPo+WBs9zAD6PyFrPmLoHIwABNdgBOs/ez/gAAgchgA8AATKIB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A8AAS1BfAwAAAi6AwABCFcAQPskABqVsYMAAQhzAAEIowABCgAAAgbMAAAABA8AAQjHAAEKAAAABAAAEIWADwABN7wFbAQEBwABCPgAAAFBhAwFgA8AAS1BdA8AATQQBXwMAAAAAXQPAAE0EAV8DAAABSsAAQloBH8AAQl6WJQICYAPAAEtQXwMAAAIugMAAQn7AED9EAAalbWDAAEKFwABCisAAQycAAIHHAAAAAQPAAEKPwABDJwAAAAEBAcAAQpUAAABQYQMBYAPAAEtQYAPAAErYAABgA8AAStgBPgNOwABCssAAQrYAAI4fYAPAAEyiARbAAEK9LoHIwABNdkXAAELJAcAAQtLAAELUAACDZmADwABMogGTARzAAELbgsAAQtnAEEACgLsBAAGBwABC3cAQP90AwABN0AGKwABC5MAQQAIcwABC4oLAAELkwBBAAoENAQABlADAAE3IPgFJwABC7yEcwABC9YDAAEL0wBA/um4BAAEcwABC+i6C0QEAAYLAAEL7wBBAAgDAAE1VAABKwABDAAEqP0rAAEMYASkGpW5gwABDLMAAQzHAAEPLAACBDgAAAAEDwABDNMAAQ8sAAAABAQHAAEM6AAAAUGEDAWADwABLUGADwABK2AAAYAPAAErYAT4DTsAAQ1fAAENbAACOH2ADwABMogEWwABDYi6ByMAATXZFwABDbgHAAEN3wABDeQAAg2ZgA8AATKIBkwEcwABDgILAAEN+wBBBDoC7AQABgcAAQ4LAEEDpAMAATdABisAAQ4nAEEEOHMAAQ4eCwABDicAQQQ6BDQEAAZQAwABNyD4BScAAQ5QcwABDmYDAAEOYwBBAxm4BAAEcwABDni6C0QEAAYLAAEOfwBBBDgDAAE1VAABKwABDpAEpP0rAAEO7ASoGpW9gwABD0MAAQ9fAAET0AACB2AAAAAEDwABD4cAARPQAAAACAQHAAEPnAAAAgRthAwFgA8AAS1BgA8AAStgAAcAARAUAACCB2WEDAGADwABLUAFqAGABwABNrAJgA8AAS1ABPgROwABEGsAARB4AAI4fYAPAAEyiARbAAEQlLoHIwABNdkXAAEQxAcAARDrAAEQ8AACDZmADwABMogGTARzAAERDg8AAREHAEEI2gLsBAAGCwABERcAQQhEAwABN0AGLwABETMAQQjYcwABESoPAAERMwBBCNoENAQABlADAAE3IPgJOwABEW8AARGMAAIG8YAPAAEtQARzAAERpLoLRAQABg8AARGrAEEI2AMAATVVJwABEdBzAAER8gMAARHjAEEHRbgEAAYTAAER9wBBCkgAASsAARIcBhMAARI7AEEKSP0nAAEShIRzAAESsgcAARKXAEEHrgIwBAAErAMAATfxKwABEtQEcwABEwoHAAES8wBBB624AAAAAAD89MMAARMoewABE5Zb8AAAAAAalcGDAAET5wABFAMAARjMAAIHaAAAAAQPAAEUJwABGMwAAAAIBAcAARQ8AAACBG2EDAWADwABLUGADwABK2AABwABFLQAAIIHZYQMAYAPAAEtQAWoAYAHAAE2sAmADwABLUAE+BE7AAEVCwABFRgAAjh9gA8AATKIBFsAARU0ugcjAAE12RcAARVkBwABFYsAARWQAAINmYAPAAEyiARzAAEVqgsAARWbAEEOigQYBAAGUAMAATckBHMAARXGDwABFb8AQQ8eBXgEAAZMAwABN0wGLwABFecAQQ8ccwABFd4PAAEV5wBBDx4EGAQABlADAAE3JPgJOwABFiMAARZAAAIG8YAPAAEtQARzAAEWWLoLRAQABg8AARZfAEEPHAMAATVVJwABFoRzAAEWpgMAARaXAEENibgEAAYTAAEWqwBBEMwAAPgFKwABFvgGEwABFxcAQRDM/ScAAReAhHMAAReuBwABF5MAQQ3yAjAEAASsAwABN/ErAAEX0ARzAAEYBgcAARfvAEEN8bgAAAAAAPz0wwABGCR7AAEYklvwAAAAABqVxYMAARjjAAEY/wABIQwAAgdsAAAABA8AARkrAAEhDAAAAAgEBwABGUAAAAIEbYQMBYAPAAEtQYAPAAErYAAHAAEZuAAAggdlhAwBgA8AAS1ABagBgAcAATawCYAPAAEtQAT4HTsAARoPAAEaKAACA5lsBK07AAEabwABGqQAAhBRgA8AAStgBKk7AAEa6wABGvgAAjh9gA8AATKIBFsAARsUugcjAAE12RcAARtEBwABG2sAARtwAAINmYAPAAEyiAZMBHMAARuOFwABG4cAQRY+AuwEAAYTAAEblwBBFagDAAE3QAY3AAEbswBBFjxzAAEbqhcAARuzAEEWPgQ0BAAGUAMAATcg+Ak7AAEb7wABHAwAAgbxgA8AAS1ABHMAARwku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P0rAAEO7ASoGpcBgwABD0MAAQ9fAAET0AACB2AAAAAEDwABD4cAARPQAAAACAQHAAEPnAAAAgRthAwFgA8AAS1BgA8AAStgAAcAARAUAACCB2WEDAGADwABLUAFqAGABwABNrAJgA8AAS1ABPgROwABEGsAARB4AAI4fYAPAAEyiARbAAEQlLoHIwABNdkXAAEQxAcAARDrAAEQ8AACDZmADwABMogGTARzAAERDg8AAREHAEHRMgLsBAAGCwABERcAQdCcAwABN0AGLwABETMAQdEwcwABESoPAAERMwBB0TIENAQABlADAAE3IPgJOwABEW8AARGMAAIG8YAPAAEtQARzAAERpLoLRAQABg8AARGrAEHRMAMAATVVJwABEdBzAAER8gMAARHjAEHPnbgEAAYTAAER9wBB0qAAASsAARIcBhMAARI7AEHSoP0nAAEShIRzAAESsgcAARKXAEHQBgIwBAAErAMAATfxKwABEtQEcwABEwoHAAES8wBB0AW4AAAAAAD89MMAARMoewABE5Zb8AAAAAAalwWDAAET5wABFAMAARjMAAIHaAAAAAQPAAEUJwABGMwAAAAIBAcAARQ8AAACBG2EDAWADwABLUGADwABK2AABwABFLQAAIIHZYQMAYAPAAEtQAWoAYAHAAE2sAmADwABLUAE+BE7AAEVCwABFRgAAjh9gA8AATKIBFsAARU0ugcjAAE12RcAARVkBwABFYsAARWQAAINmYAPAAEyiARzAAEVqgsAARWbAEHW4gQYBAAGUAMAATckBHMAARXGDwABFb8AQdd2BXgEAAZMAwABN0wGLwABFecAQdd0cwABFd4PAAEV5wBB13YEGAQABlADAAE3JPgJOwABFiMAARZAAAIG8YAPAAEtQARzAAEWWLoLRAQABg8AARZfAEHXdAMAATVVJwABFoRzAAEWpgMAARaXAEHV4bgEAAYTAAEWqwBB2SQAAPgFKwABFvgGEwABFxcAQdkk/ScAAReAhHMAAReuBwABF5MAQdZKAjAEAASsAwABN/ErAAEX0ARzAAEYBgcAARfvAEHWSbgAAAAAAPz0wwABGCR7AAEYklvwAAAAABqXCYMAARjjAAEY/wABIQwAAgdsAAAABA8AARkrAAEhDAAAAAgEBwABGUAAAAIEbYQMBYAPAAEtQYAPAAErYAAHAAEZuAAAg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THqUg+sAAAAAwABMxT9FwABMiAHAAEyRwABMkwAAg2ZgA8AATKIBgcAATJXAEH2KARzAAEyegsAATJzAEH5YgV4BAAGTAMAATdMBisAATKTAEH5YHMAATKWCwABMpMAQfliBBgEAAZQAwABNyT4BScAATLEcwABMvRzAAEy5LoLRAQABgsAATLrAEH5YAMAATVWAjAEAAYDAAEzAwBB9egDAAE3GSsAATMkBgsAATNDAEH5YP0rAAEzdARzAAEzklIPrAAAAAMAATMUGpctgwABM78AATPbAAE1RAACELwAAAAEDwABNAMAATVEAAAAAAAAAYAPAAEtQAT4BPTDAAE0JH8AATRPAAEwwAQABJ4rHAAalzGDAAE1WwABNXcAATb8AAIR1AAAAAQPAAE1lwABNvwAAAAEBAcAATWoAAACB3WADwABMogAAYAPAAEtQAT4BPTDAAE13H8AATYHAAEwwAQABJ4rHAAalzWDAAE3EwABNycAATj4AAIOVAAAAAQPAAE3UwABOPgAAAAEBAcAATdoAAACBG2EDAWADwABLUGADwABK2AAAXAE+AT0wwABN9h/AAE4AwABMMAEAASeKxwAGpc5gwABOQ8AATkjAAE69AACDlgAAAAEDwABOU8AATr0AAAABAQHAAE5ZAAAAgRthAwFgA8AAS1BgA8AAStgAAFwBPgE9MMAATnUfwABOf8AATDABAAEniscABqXZYMAATsLAAE7NwABPJwEAgcIAAAABA8AATtPAAE8nAAAAAAAAAGADwABLUAE+AknAAE7ZHMAATuQWwABO3S6ByMAATXaCjAEAAZMAwABN0krAAE7pARzAAE70LoLRAQABkwDAAE1VPz0wwABO/R7AAE8YlvwAAAAABqXaYMAATyzAAE83wABPmQEAgdUAAAABA8AATzzAAE+ZAAAAAAAAAGADwABLUAE+AknAAE9CHMAAT00WwABPRi6ByMAATXaCjAEAAZMAwABN0krAAE9SARzAAE9dLoLRAQABHMAAT2UWwABPXi6ByMAATXaBBgEAAZQAwABNyQDAAE1VPz0wwABPbx7AAE+KlvwAAAAABqXbYMAAT57AAE+pwABQQAEAgdcAAAABA8AAT7DAAFBAAAAAAAAAAGADwABLUAE+A0nAAE+2HMAAT8EWwABPui6ByMAATXaAjAEAAZQAwABNxkrA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TXYAwABN0z2JwACITsAQyz0cwACIYhbAAIhbLoHIwABNdoEGAQABlADAAE3JP0XAAIhrAcAAiHTAAIh2AACDZmADwABMogGBwACIeMAQyz0BHMAAiIGCwACIf8AQy9CBXgEAAZMAwABN0wGKwACIh8AQy9AcwACIiILAAIiHwBDL0IEGAQABlADAAE3JPgFJwACIlBzAAIicgMAAiJjAEMsmbgEAARzAAIihLoLRAQABgsAAiKLAEMvQAMAATVUAAErAAIinAYLAAIiuwBDL0D9KwACIuwEcwACIwpSD6wAAAADAAEzFBqZMYMAAiM3AAIjkwACJvwMAgQ0AAAABA8AAiOXAAIm/AAAAAQEBwACI9AAAIIIdXQPAAE1GAWADrcgAAF0DwABNRgFgA63IAT4CTsAAiQXAAIkRAACOHmADwABMogEcwACJHxbAAIkYLoHIwABNdoENAQABFsAAiSeAwACJIcAQzKqByMAATXYAwABNyErAAIkzATXAAIlDAAABAF0DwABNRgFgA63IATHAAIlDYAOtyAA1wACJTgAAAQBcARfAAIlOgsAAiUPAEM0YgciBwACJV8AQzM/AAE10NcAAiWsAAAEAXAEcwACJa4LAAIlDwBDNGIRYAwADkxbAAIl8LoHIwABNdi4AwABNazXAAImSAAABAFwBHMAAiZKCwACJQ8AQzRiEWAMAAxbAAImgLoHIwABNdoHAAImowBDMz4DAAIm1wBDMqgDAAE1rgsAAiUPAEM0YBqZNYMAAicTAAInJwACKaAAAgcQAAAABA8AAidHAAIpoAAAAAQEBwACJ2QAAAIG8YAPAAE3vAABgA8AAStgBPgNOwACJ7MAAifAAAI4fYAPAAEyiARbAAIn3LoHIwABNdkXAAIoDAcAAigzAAIoOAACDZmADwABMogGTARzAAIoVgsAAihPAEM5AgLsBAAGBwACKF8AQzhsAwABN0AGKwACKHsAQzkAcwACKHILAAIoewBDOQIENAQABlADAAE3IPgFJwACKKRzAAIo1HMAAijEugtEBAAGCwACKMsAQzkAAwABNVYCMAQABgMAAijjAEM4AAMAATfxKwACKQQEpP0rAAIpYASoGpk5gwACKbcAAinLAAItbAACEXAAAAAEDwACKecAAi1sAAAABAAHAAIqCAAAAhF1gA5lBAWoAYAHAAE2sAgBc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pMTAEOq2kz9FwACk2QHAAKTiwACk5AAAg2ZgA8AATKIBgcAApObAEOq2ARzAAKTvgsAApO3AEOtOgLsBAAEWwACk9i6ByMAATXYAwABN0AGKwACk/sAQ604cwACk/4LAAKT+wBDrToENAQABlADAAE3IPgFJwAClCxzAAKUXHMAApRMugtEBAAGCwAClFMAQ604AwABNVYCMAQABgMAApRrAEOqoAMAATfxKwAClIwGCwAClKsAQ604/SsAApTcBHMAApT6Ug+sAAAAAwABMxQamamDAAKVJwAClTcAApmkAAIRyAAAAAQPAAKVYwACmaQAAAAIBAsAApWEAACCBvGADrcgAwAClbwAAAG1gA8AATKIBasAApXdgAcAATawCAGADwABMogE+A0nAAKWEIhzAAKWOgcAApYjAEOxFgIwBAAErAMAATcYBHMAApZ+BwAClmcAQ7EWBXgEAARbAAKWnLoHIwABNdgDAAE3TPgE9icAApbfAEOxFHMAApcsWwAClxC6ByMAATXaBBgEAAZQAwABNyUnAAKXbHMAApeWBwACl38AQ7EWAuwEAAZMAwABN0D4BSsAApfIBHMAApfmUg+sAAAAAwABMxT9FwACmBwHAAKYQwACmEgAAg2ZgA8AATKIBgcAAphTAEOxFARzAAKYdgsAAphvAEO0TgV4BAAGTAMAATdMBisAApiPAEO0THMAApiSCwACmI8AQ7ROBBgEAAZQAwABNyT4BScAApjAcwACmPBzAAKY4LoLRAQABgsAApjnAEO0TAMAATVWAjAEAAYDAAKY/wBDsNwDAAE38SsAApkgBgsAApk/AEO0TP0rAAKZcARzAAKZjlIPrAAAAAMAATMUGpmtgwACmbsAApnbAAKbRAACELwAAAAEDwACmgMAAptEAAAAAAAAAYAOtyAE+AT0wwACmiR/AAKaTwABMMAEAASeKxwAGpmxgwACm1sAApt7AAKdAAACEdQAAAAEDwACm5sAAp0AAAAABAQHAAKbrAAAAgd1gA8AATKIAAGADrcgBPgE9MMAApvgfwACnAsAATDABAAEniscABqZtYMAAp0XAAKdKwACnwAAAg5UAAAABA8AAp1XAAKfAAAAAAQEBwACnWwAAAIEbYQMBYAOtyGADwABK2AAAXAE+AT0wwACneB/AAKeCwABMMAEAASeKxwAGpm5gwACn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A8AATKIAAAAAAIRUYAPAAEyiAAAAACCEIl0DwABNBAFbAABcAUoAAR0AhGoDAAOAAMAQ+UqBAMAQ+VaCAMAQ+WMAnKoGpsFgwACsV8AArF/AAKxxAQKOFAAAAAEDwACsccAArHEAAAAAAAAAYAPAAEyiAAamwmDAAKx1wACsfcAArIoBAoadAAAAAQPAAKyKwACsigAAAAAAAABgA8AATKIABqbDYMAArI7AAKyewACspAECgcEAAAABA8AArKTAAKykAAAAAAAAAGADneMABqaSYMAArKnAAKy3wACszgACjiOchgAAAAEDwACswsAArM4AAAABAQHAAKzHAAAAgchgA8AATKIAAGADrJIABqaTYMAArNPAAKzfwACtDwAAhAkAAAABA8AArOvAAK0PAAABAAAEIWADwABN7wFbAAAAAF0DwABNBAFfAwAAAUrAAKzxAR/AAKz1lu8BAV8DAAABLgAGppRgwACtFMAArSjAAK2UAACECAAAAAEDwACtMsAArZQAAAABAQHAAK1HAAAggh1dA8AATQQBYAOu7AAAXQPAAE0EAWADruwBSsAArVcBHsAArVuWxwIBYAOu7AIugMAArY7AEPrbAAamlWDAAK2ZwACtocAArc8AAIHJAAAAAQPAAK2owACtzwAAAQAABENgA8AATe8BWwAAAABdA8AATUYBXwMAAAFKwACtrgEewACts8AATVEBAmADruxfAwAAAS4ABqbKYMAArdPAAK3cwACuSwIAgcIAAAABA8AAreHAAK5LAAAAAQEBwACt7AAAICJgA67sAABcAT4CScAArfkcwACuCRbAAK4CLoHIwABNdoCMAQABkwDAAE3GPTDAAK4PH8AArhnAAEv0AgACky4APz0cwACuPC6BDAIAApOAwACuQsAQ+58AwABNVgamy2DAAK5QwACuWcAArtUCAIHVAAAAAQPAAK5dwACu1QAAAAEBAcAArmgAACAiYAOu7AAAXAE+AknAAK51HMAAroUWwACufi6ByMAATXaAjAEAAZMAwABNxj0wwACuix/AAK6VwABL9AIAApMuAD89HMAArrgugQwCAAIcwACuxRbAAK6+LoHIwABNdoEGAQABlADAAE3JgMAArszAEPwqAMAATVYGppZgwACu2sAArt7AAK+dAACEcQAAAAEDwACu6MAAr50AAAACAQLAAK7uAAAAgRthAwFgA67sYAPAAErYAMAArwwAAABtYAPAAEyiAWrAAK8UYAPAAEyiGgBgA8AATKIBPgNJwACvHhzAAK8ogcAAryLAEPzngLsBAAGTAMAATdA9icAAry3AEPznkz9FwACvPAHAAK9FwACvRwAAg2ZgA8AATKIBgcAAr0nAEPznARzAAK9SgsAAr1DAEP08gLsBAAEWwACvVC6ByMAATXYAwABN0AGKwACvXMAQ/TwcwACvXYLAAK9cwBD9PIENAQABlADAAE3IPgFJwACvaRzAAK9xgMAAr23AEPzQbgEAARzAAK92LoLRAQABgsAAr3fAEP08AMAATVUAAErAAK98AYLAAK+DwBD9PD9KwACvkAEcwACvl5SD6wAAAADAAEzFBqaXYMAAr6LAAK+mwACwiwAAhHMAAAABA8AAr7TAALCLAAAAAgECwACvugAAAIEbYQMBYAOu7GADwABK2ADAAK/YAAAAbWADwABMogFqAGABwABNrAIAYAPAAEyiAT4DScAAr+YiHMAAr/CBwACv6sAQ/jiAjAEAASsAwABNxgEcwACwAYHAAK/7wBD+OIFeAQABFsAAsAkugcjAAE12AMAATdM9icAAsBHAEP44HMAAsCUWwACwHi6ByMAATXaBBgEAAZQAwABNyT9FwACwLgHAALA3wACwOQAAg2ZgA8AATKIBgcAAsDvAEP44ARzAALBEgsAAsELAEP7LgV4BAAGTAMAATdMBisAAsErAEP7LHMAAsEuCwACwSsAQ/suBBgEAAZQAwABNyT4BScAAsFccwACwX4DAALBbwBD+IW4BAAEcwACwZC6C0QEAAYLAALBlwBD+ywDAAE1VAABKwACwagGCwACwccAQ/ss/SsAAsH4BHMAAsIWUg+sAAAAAwABMxQammGDAALCQwACwqcAAsYgDAIENAAAAAQPAALCqwACxiAAAAAEBAcAAsLsAACCCHV0DwABNRgFgA67sAABdA8AATUYBYAOu7AE+Ak7AALDMwACw2AAAjh5gA8AATKIBHMAAsOYWwACw3y6ByMAATXaBDQEAARbAALDugMAAsOjAEP+lgcjAAE12AMAATchKwACw+gE1wACxDAAAAQBdA8AATUYBYAOu7AExwACxDGADruwANcAAsRcAAAEAXAEXwACxF4LAALEMwBEAE4HIgcAAsSDAEP/KwABNdDXAALE0AAABAFwBHMAAsTSCwACxDMARABOEWAMAA5MWwACxRS6ByMAATXYuAMAATWs1wACxWwAAAQBcARzAALFbgsAAsQzAEQAThFgDAAMWwACxaS6ByMAATXaBwACxccAQ/8qAwACxfsAQ/6UAwABNa4LAALEMwBEAEwammWDAALGNwACxksAAsjEAAIHEAAAAAQPAALGawACyMQAAAAEBAcAAsaIAAACBvGADwABN7wAAYAPAAErYAT4DTsAAsbXAALG5AACOH2ADwABMogEWwACxwC6ByMAATXZFwACxzAHAALHVwACx1wAAg2ZgA8AATKIBkwEcwACx3oLAALHcwBEBO4C7AQABgcAAseDAEQEWAMAATdABisAAsefAEQE7HMAAseWCwACx58ARATuBDQEAAZQAwABNyD4BScAAsfIcwACx/hzAALH6LoLRAQABgsAAsfvAEQE7AMAATVWAjAEAAYDAALIBwBEA+wDAAE38SsAAsgoBKT9KwACyIQEqBqaaYMAAsjbAALI7wACzJAAAhFwAAAABA8AAskLAALMkAAAAAQABwACySwAAAIRdYAOZQQFqAGABwABNrAIAXAE+Az0jHMAAsmGAwACyWsARAgKAjAEAASsAwABN/IjAALJawBECAh7AALJpmUMAAAAAKwFgA5lBTsAAsnvAALJ9AACDZmADwABMogEWwACyhC6ByMAATXZDwACykBzAALKZgcAAspfAEQJUgowBAAGUAMAATdI+BU7AALKqwACyrgAAgQtgA8AATKIBHMAAsreAwACysMARAgKEXgEAAYHAALK/wBECVACZRj2JwACyycARAlQcwACyy4HAALLJwBECVIEGAQABlADAAE3JTsAAstvAALLfAACEX2ADruwBHMAAsuUugtEBAAGBwACy5sARAlQAwABNVT0cwACy9C6BDAIAAoHAALL1wBECVBzAALL+LoLRAQABgsAAsv/AEQKUAMAATVUAwABNVj0cwACzDy6BDAIAAoLAALMQwBEClIPAALMXwBEC6gDAAE1WBqabYMAAsynAALMuwAC8FwAAhFgAAAABA8AAszbAALwXAAAABAMEwACzOwAAAG1gA8AATKIAwACzRgAAAIRUYAPAAEyiAMAAs18AACCCwF0DwABNBAFgA67sAMAAs3AAAACEZ2ADwABMogFqwACzfGAD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AMIrAAAAgb5fAwAAAMAAwjsAAACBumEDAl8DAABgA67sXwMAAAAAXwMAAAE+A07AAMJxwADCdQAAjh9gA8AATKIBFsAAwnwugcjAAE12RcAAwogBwADCkcAAwpMAAINmYAPAAEyiAZMBHMAAwpqDwADCmMAREkCAuwEAAYLAAMKcwBESGwDAAE3QAYvAAMKjwBESQBzAAMKhg8AAwqPAERJAgQ0BAAGUAMAATcg+AT2IwADCrsAREescwADCxIHAAMK9wBER+W4CAAKAwADCxcAREescwADC1y6C0QEAAYPAAMLYwBESQADAAE1VAABKwADC5wGAwADC7sAREesGpqhgwADDA8AAww/AAMNgAACBqwAAAAEDwADDFcAAw2AAAAEAAAQhYAPAAE3vAVsBAQHAAMMYAAAAUGEDAWADruxfAwAAAABdA8AATQQBXwMAAAFKwADDNwEewADDO5XgAgJgA67sXwMAAAIugMAAw17AERMdAAamqWDAAMNlwADDccAAw88AAIGzAAAAAQPAAMN6wADDzwAAAQAABCFgA8AATe8BWwEBAcAAw4cAAABQYQMBYAOu7F0DwABNBAFfAwAAAABdA8AATQQBXwMAAAFKwADDpgEfwADDqpYlAgJgA67sXwMAAAIugMAAw83AEROUAAamqmDAAMPUwADD2cAAxHkAAIHHAAAAAQPAAMPewADEeQAAAAEBAcAAw+QAAABQYQMBYAOu7GADwABK2AAAYAPAAErYAT4DTsAAxATAAMQIAACOH2ADwABMogEWwADEDy6ByMAATXZFwADEGwHAAMQkwADEJgAAg2ZgA8AATKIBkwEcwADELYLAAMQrwBEUTIC7AQABgcAAxC/AERQnAMAATdABisAAxDbAERRMHMAAxDSCwADENsARFEyBDQEAAZQAwABNyD4BScAAxEEhHMAAxEeAwADERsARFAZuAQABHMAAxEwugtEBAAGCwADETcARFEwAwABNVQAASsAAxFIBKj9KwADEagEpBqarYMAAxH7AAMSDwADFIAAAgQ4AAAABA8AAxIbAAMUgAAAAAQEBwADEjAAAAFBhAwFgA67sYAPAAErYAABgA8AAStgBPgNOwADErMAAxLAAAI4fYAPAAEyiARbAAMS3LoHIwABNdkXAAMTDAcAAxMzAAMTOAACDZmADwABMogGTARzAAMTVgsAAxNPAERVWgLsBAAGBwADE18ARFTEAwABN0AGKwADE3sARFVYcwADE3ILAAMTewBEVVoENAQABlADAAE3IPgFJwADE6RzAAMTugMAAxO3AERUQbgEAARzAAMTzLoLRAQABgsAAxPTAERVWAMAATVUAAErAAMT5ASk/SsAAxRABKgamrGDAAMUlwADFL8AAxlIAAIHYAAAAAQPAAMU5wADGUgAAAAIBAcAAxT8AAACBG2EDAWADruxgA8AAStgAAcAAxWMAACCB2WEDAGADruwBagBgAcAATawCYAOu7AE+BE7AAMV4wADFfAAAjh9gA8AATKIBFsAAxYMugcjAAE12RcAAxY8BwADFmMAAxZoAAINmYAPAAEyiAZMBHMAAxaGDwADFn8ARFniAuwEAAYLAAMWjwBEWUwDAAE3QAYvAAMWqwBEWeBzAAMWog8AAxarAERZ4gQ0BAAGUAMAATcg+Ak7AAMW5wADFwQAAgbxgA67sARzAAMXHLoLRAQABg8AAxcjAERZ4AMAATVVJwADF0hzAAMXagMAAxdbAERYZbgEAAYTAAMXbwBEW1AAASsAAxeUBhMAAxezAERbUP0nAAMX/IRzAAMYKgcAAxgPAERYxgIwBAAErAMAATfxKwADGEwEcwADGIIHAAMYawBEWMW4AAAAAAD89MMAAxigewADGQ5b8AAAAAAamrWDAAMZXwADGYcAAx5oAAIHaAAAAAQPAAMZqwADHmgAAAAIBAcAAxnAAAACBG2EDAWADruxgA8AAStgAAcAAxpQAACCB2WEDAGADruwBagBgAcAATawCYAOu7AE+BE7AAMapwADGrQAAjh9gA8AATKIBFsAAxrQugcjAAE12RcAAxsABwADGycAAxssAAINmYAPAAEyiARzAAMbRgsAAxs3AERfcgQYBAAGUAMAATckBHMAAxtiDwADG1sARGAGBXgEAAZMAwABN0wGLwADG4MARGAEcwADG3oPAAMbgwBEYAYEGAQABlADAAE3JPgJOwADG78AAxvcAAIG8YAOu7AEcwADG/S6C0QEAAYPAAMb+wBEYAQDAAE1VScAAxwgcwADHEIDAAMcMwBEXom4BAAGEwADHEcARGG0AAD4BSsAAxyUBhMAAxyzAERhtP0nAAMdHIRzAAMdSgcAAx0vAERe6gIwBAAErAMAATfxKwADHWwEcwADHaIHAAMdiwBEXum4AAAAAAD89MMAAx3AewADHi5b8AAAAAAamrmDAAMefwADHqcAAybMAAIHbAAAAAQPAAMe0wADJswAAAAIBAcAAx7oAAACBG2EDAWADruxgA8AAStgAAcAAx94AACCB2WEDAGADruwBagBgAcAATawCYAOu7AE+B07AAMfzwADH+gAAgOZbAStOwADIC8AAyBkAAIQUYAPAAErYASpOwADIKsAAyC4AAI4fYAPAAEyiARbAAMg1LoHIwABNdkXAAMhBAcAAyErAAMhMAACDZmADwABMogGTARzAAMhThcAAyFHAERnBgLsBAAGEwADIVcARGZwAwABN0AGNwADIXMARGcEcwADIWoXAAMhcwBEZwYENAQABlADAAE3IPgJOwADIa8AAyHMAAIG8YAOu7AEcwADIeS6C0QEAAYXAAMh6wBEZwQDAAE1VScAAyIQcwADIjIDAAMiIwBEZPW4BAAGGwADIjcARGh0AAD4DScAAyKGDwADIpcARGYc+AT0wwADIwB7AAMjblv0AAAAAPz2KwADI+MARGXeGwADJAcARGh09i8AAyRLAERmHKT9JwADJOoPAAMk+wBEZh0rAAMlNASbAAMlNBYLAAMlUwBEZd2ADruw/ScAAyWAhHMAAyWuBwADJZMARGVWAjAEAASsAwABN/ErAAMl0ARzAAMmBgcAAyXvAERlVbgAAAAAAPz0wwADJiR7AAMmklvwAAAAABqavYMAAybjAAMnCwADJ8wAAgdwAAAABA8AAycvAAMnzAAAAAQEBwADJ0AAAAIHdYAPAAEyiAABgA67sAT4BSsAAyd0BHMAAyegugtEBAAGAwADJ6cARG0YAwABNVQamsGDAAMn4wADJ/cAAylsAAICCAAAAAQPAAMoAwADKWwAAAAEBAcAAygsAACAiYAOu7AAAXAE+AT0wwADKGB/AAMoiwABMMAEAASeKxQAGprFgwADKYMAAymXAAMrQAACDawAAAAEDwADKa8AAytAAAAABAQHAAMqAAAAgIl0DwABNBAFgA67sAABcAT4BPTDAAMqNH8AAypfAAEwwAQABJ4rFAAamsmDAAMrVwADK2sAAy0sAAIR0AAAAAQPAAMrgwADLSwAAAAICAsAAyuUAAACB3WADwABMogDAAMr2AAAgImADruwAAFwBPgE9MMAAywMfwADLDcAA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AMAATVU/ScAA0bYcwADRwRbAANG6LoHIwABNdoCMAQABkwDAAE3GPTDAANHHHsAA0eKW/AAAAAA/PTDAANHzHsAA0g6W/QAAAAAGprtgwADSIMAA0i7AANMdAACEYQAAAAEDwADSNcAA0x0AAAACAQLAANI6AAAAbWADwABMogDAANJGAAAAhFRgA8AATKIBagBgAcAATawCAGADrJIBPgU9icAA0lLAESQAHsAA0mPAAEvfAwADgMAA0nPAESPxgcAA0nrAESQAFsAA0oQugcjAAE12AE7AANKVwADSnAAAgchgA8AATKIBHMAA0qKBwADSnsARJACBBgEAAYDAANKkwBEj8QDAAE3JTsAA0r3AANLEAACA5mADrJIBHMAA0sYujiOchgEAAYLAANLSwBEkVwCdsj0cwADS5oPAANLfwBEkjIRYBAAEk4LAANLywBEkVy6AwADTAMARI/EAwABNa0rAANMMAYPAANMTwBEkjAamvGDAANMiwADTJ8AA06gAAIR4AAAAAQPAANMtwADTqAAAAAICAsAA0zIAAACB3WADwABMogDAANNNAAAghCJdA8AATQQBYAOu7AAAXAE+Ak7AANNjwADTZwABhFRgA8AATKIBHMAA03kWwADTcoHAANNpwBElKYHIwABNJ4ENAQABgMAA03vAESUZAMAATcg9HMAA04YuhFgDAAOAwADTj8ARJRmCwADTlsARJUSBwADTm8ARJSkAnbsGpr1gwADTrcAA07LAANRtAACEZQAAAAEDwADTu8AA1G0AAAADAgPAANPAAAAAbWADwABMogDAANPLAAAAhFRgA8AATKIAwADT2wAAIIp+YAOu7AFqAGABwABNrAIAXAE+Aj0ewADT+MAAS98DAAOAwADUCMARJdSBwADUD8ARJeMWwADUGS6ByMAATXYARcAA1CYBwADUL8AA1DEAAINmYAPAAEyiAYDAANQzwBEl1AEcwADUPIPAANQ6wBEmQYC7AQABgcAA1D7AESXjAMAATdABi8AA1EXAESZBHMAA1EODwADURcARJkGBDQEAAZQAwABNyD4BPRzAANRULoEMAgACg8AA1FXAESZBgsAA1FrAESXzAMAATVYAABD5KgAQ+ZQAEPnDABD58gAQ+h8AEPpeABD6tAAQ+xwAEPt4ABD8AwAQ/KkAEP36ABD/fgARANQAEQHbABEDagARCwUAEQtuABEL0gARDDwAEQygABENCgARDVQAEQ2kABEOVgARDqAAEQ8WABEPYgAREE4AERG4ABES6gARE2EAERPfABEU6QARFfIAERd7ABEZFgARGx8AERt9ABEbzAARHCIAERyBABEc6AARHXwAER8LABEgxQARIQoAESFfABEhuAARIhEAESKKABEjHgARI8oAESTyABElrQARJscAAAA3AqbMYMABf3zAAX+cwAGD7gOO2gFqwAF/fWADwABKnwMAAWADpo4AAWADrJIAAAgGps9gwAGABcABgA3AAYBUBAGLX5yGAAAAAQPAAYA0wAGAVAAAAAAAAABgA6bMAT4BPTDAAYA9J4tgBqbRYMABgInAAYCcwAGBPAMAgtEAAAABA8ABgJ7AAYE8AAAAAQEBwAGAowAAAIHdYAPAAEyiAABgA67sAT4CScABgLAiHMABgLqAwAGAtMARKDyAuwEAAZMAwABN0AEcwAGAx4DAAYDBwBEoPIFeAQABFsABgMougcieBgDAAE3TPgE9MMABgNofwAGA5MAAS/QDAAOAwAGA9cARKDwuJ4HdAD9KwAGBFgEcwAGBHS6OspyGAQABgMABgTLAESg8AKbVBqbSYMABgUHAAYFPwAGCAQMAgQwAAAABA8ABgVLAAYIBAAAAAgICwAGBVwAAAIHdYAPAAEyiAMABgWgAACAiYAOu7AAAXAE+AknAAYF1IhzAAYF/gMABgXnAESj/gLsBAAGTAMAATdABHMABgYyAwAGBhsARKP+BXgEAARbAAYGPLoHIngYAwABN0z4BPTDAAYGfH8ABganAAEv0AwADgMABgbrAESj/LieB3QA/PRzAAYHbLo6znIYCAAKAwAGB8MARKP+BwAGB98ARKQ8AptYGptlgwAGCO8ABgkPAAYKEAQCOFAAAAAEDwAGCVsABgoQAAAAAAAAAYAPAAEyiAT4BSsABglwBasABgnFgA8AATKJUBqbUYMABgqjAAYK2wAGC+AAAjiOchgAAAAEDwAGCwcABgvgAAAABAQHAAYLGAAAAgchgA8AATKIAAGADrJIBPgFKwAGC1AEewAGC36yWAQABgMABgu3AESoVAAam1WDAAYL9wAGDB8ABg2wAAI6ynIYAAAABA8ABgxvAAYNsAAAAAQEBwAGDIAAAAIHdYAPAAEyiAABgA67sAT4B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pxhgwAGhSMABoXjAAaHCAACPKwFqwAGhSWADwABKn5isAAABA8ABoYHAAaHCAAAAAQEBwAGhhwAAAISEYAPAAErYAABgA63IAT4CPR7AAaGQnJoCAAKAwAGhncARP9MnhIQASsABoaoBHMABobEujyychgEAAYDAAaG8wBE/0wCnEQanEWDAAaHHwAGh+8ABoicABI8snIYCasABochgA8AASp+V+WoAYAOUCJjCAAABA8ABogXAAaInAAAAAQEBwAGiCwAAAISEYAPAAErYAABgA63IAAanGWDAAaIswAGiXMABoqYAAI8uAWrAAaItYAPAAEqfmKwAAAEDwAGiZcABoqYAAAABAQHAAaJrAAAAjDJgA8AAStgAAGADrcgBPgI9HsABonScmgIAAoDAAaKBwBFAqieMMgBKwAGijgEcwAGilS6PL5yGAQABgMABoqDAEUCqAKcSBqcSYMABoqvAAaLfwAGjCwAEjy+chgJqwAGirGADwABKn5X5agBgA5QImM4AAAEDwAGi6cABowsAAAABAQHAAaLvAAAAjDJgA8AAStgAAGADrcgABqcaYMABoxDAAaNAwAGjigAAjzEBasABoxFgA8AASp+YrAAAAQPAAaNJwAGjigAAAAEBAcABo08AAACO9WADwABK2AAAYAOtyAE+Aj0ewAGjWJyaAgACgMABo2XAEUGBJ471AErAAaNyARzAAaN5Lo8ynIYBAAGAwAGjhMARQYEApxMGpxNgwAGjj8ABo8PAAaPvAASPMpyGAmrAAaOQYAPAAEqflflqAGADlAiY2gAAAQPAAaPNwAGj7wAAAAEBAcABo9MAAACO9WADwABK2AAAYAOtyAAGpxtgwAGj9MABpCTAAaRuAACPNAFqwAGj9WADwABKn5isAAABA8ABpC3AAaRuAAAAAQEBwAGkMwAAAI73YAPAAErYAABgA63IAT4CPR7AAaQ8nJoCAAKAwAGkScARQlgnjvcASsABpFYBHMABpF0ujzWchgEAAYDAAaRowBFCWACnFAanFGDAAaRzwAGkp8ABpNMABI81nIYCasABpHRgA8AASp+V+WoAYAOUCJjmAAABA8ABpLHAAaTTAAAAAQEBwAGktwAAAI73YAPAAErYAABgA63IAAanHGDAAaTYwAGlEMABpV8ABI83AmrAAaTZYAPAAEqflclqAGADlAiY8gAAAQPAAaUWwAGlXwAAAAICAsABpSEAAACPOWADrJ0AwAGlNgAAAI86YAOsnQAAYAOsnQAAABE4HwAROGIAETilABE46AAROSsAETluABE5pQAROdwAEToTABE6SgAROoEAETrTABE7MwARO7YAETwKABE8jQARPOEAET1kABE9uAARPjsAET6PABE+0wARPxcAET9bABE/nwARQCIAEUB2ABFA+QARQU0AEUHQABFCJAARQqcAEUL7ABFDWQAAACECpylgwAGou8ABqNvAAa8/A487AWrAAai8YAPAAEqfAwABYAPAAE3vAAFgA67sAAEFp0AAAAAABAAAAwAAAAAAAAAAAGADpykBPwEJAQDAAE4FAAAAABIGpytgwAGo/8ABqRLAAak7AwSBDQFqAGADlAiY/gAAAQPAAakTwAGpOwAAAAEBAcABqR4AAACCHWADruwAAGADruwABqcsYMABqT/AAamAwAGpnQMEg+sCasABqUBgA8AASp+WQWoAYAOUCJkKAAABA8ABqYHAAamdAAAAAAAAAGADruwABqctYMABqaHAAam0wAGp3QMEgQYBagBgA5QImRYAAAEDwAGptcABqd0AAAABAQHAAanAAAAAgh1gA67sAABgA67sAAanLmDAAanhwAGp9MABqh0DBIPGAWoAYAOUCJkiAAABA8ABqfXAAaodAAAAAQEBwAGqAAAAAIIdYAOu7AAAYAOu7AAGpy9gwAGqIcABqjTAAapdAwSF+AFqAGADlAiZLgAAAQPAAao1wAGqXQAAAAEBAcABqkAAAACCHWADruwAAGADruwABqcwYMABqmHAAaqZwAGqwQAEju0CasABqmJgA8AASp+WQWoAYAOUCJk6AAABA8ABqp7AAarBAAAAAQEBwAGqpgAAAID5YAPAAEtQAABgA67sAAanMWDAAarFwAGq/cABqxkABI7vAmrAAarGYAPAAEqflkFqAGADlAiZRgAAAQPAAasAwAGrGQAAAAAAAABgA67sAAanMmDAAasdwAGrJ8ABq3cABI7xAWoAYAOUCJlSAAABA8ABqyzAAat3AAAAAgICwAGrNwAAAIshYAOu7ADAAatNAAAAiyJgA67sAABgA67sAAanPGDAAat7wAGrvcABq9YBBISEAmrAAat8YAPAAEqfkRFqAGADlAiZXgAAAQPAAau/wAGr1gAAAAAAAABgA8AAS1AABqc9YMABq9rAAawcwAGsNQEEjDICasABq9tgA8AASp+REWoAYAOUCJlqAAABA8ABrB7AAaw1AAAAAAAAAGADwABLUAAGpz5gwAGsOcABrEHAAaxoAQSO+QFqAGADlAiZdgAAAQPAAaxKwAGsaAAAAAAAAABgA8AATKIABqczYMABrG3AAayVwAGs2QAAjv8BasABrG5gA8AASp+CugAAAQPAAayawAGs2QAAAAEBAcABrKIAAACEhGADwABLUAAAYAOu7AE+Aj0ewAGsq5yaAgACgMABrLjAEUdjJ4SEAErAAazFARzAAazMLo8AnIYBAAGAwAGs08ARR2MApzUGpzVgwAGs3sABrRbAAa0+AASPAJyGAmrAAazfYAPAAEqflkFqAGADlAiZggAAAQPAAa0cwAGtPgAAAAEBAcABrSQAAACEhGADwABLUAAAYAOu7AAGpzdgwAGtQ8ABrWvAAa2vAACPAgFqwAGtRGADwABKn4K6AAABA8ABrXDAAa2vAAAAAQEBwAGteAAAAIwyYAPAAEtQAABgA67sAT4CPR7AAa2BnJoCAAKAwAGtjsARSDonjDIASsABrZsBHMABraIujwOchgEAAYDAAa2pwBFIOgCnNganNmDAAa20wAGt7MABrhQABI8DnIYCasABrbVgA8AASp+WQWoAYAOUCJmOAAABA8ABrfLAAa4UAAAAAQEBwAGt+gAAAIwyYAPAAEtQAABgA67sAAanOGDAAa4ZwAGuUcABrnwABIgeAmrAAa4aYAPAAEqflkFqAGADlAiZmgAAAQPAAa5UwAGufAAAAAEBAcABrl8AAACCHWADruwAAGADruwABqc5YMABroDAAa64wAGu4wAEiB8CasABroFgA8AASp+WQWoAYAOUCJmmAAABA8ABrrvAAa7jAAAAAQEBwAGuxgAAAIIdYAOu7AAAYAOu7AAGpzpgwAGu58ABrx/AAa89AASMigJqwAGu6GADwABKn5ZBagBgA5QImbIAAAEDwAGvI8ABrz0AAAAAAAAAYAOu7AAAABFEPQARRIAAEUTCABFFBQARRUgAEUWLABFF3QARRh8AEUZwABFGtAARRvgAEUcvABFHsgARSAYAEUiJABFI3QARSS0AEUl9ABFJvwAAABICp0FgwAGvQsABr0jAAbGVA49MAAEAAASBZ2AD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Sp+CugAAAQPAAbXtwAG2wAAAAAEBAcABtfIAAACB3WADwABMogAAYAPAAEyiAT4CScABtf8iHMABtgmAwAG2A8ARd/aAuwEAAZMAwABN0AEcwAG2FoDAAbYQwBF39oFeAQABFsABthkugcinVQDAAE3TPgE9MMABtikfwAG2M8AAS/QDAAOAwAG2RMARd/YuJ4HdAD9KwAG2ZQEcwAG2gBbAAbZsLo9RnIanU45AnIYBAAEcwAG2lxbAAbaJLoadnLWBDQEAARzAAbaggMABtprAEXf2g8YBAAFqwAG2q2ADwABMohQAwABNygDAAE3IAJ4JBqehYMABtsXAAbbxwAG32wMAgQwBasABtsZgA8AASp+CugAAAQPAAbb0wAG32wAAAAICAsABtvkAAACB3WADwABMogDAAbcEAAAgImADwABMogAAXAE+AknAAbcRIhzAAbcbgMABtxXAEXkHgLsBAAGTAMAATdABHMABtyiAwAG3IsAReQeBXgEAARbAAbcrLoHIp1UAwABN0z4BPTDAAbc7H8ABt0XAAEv0AwADgMABt1bAEXkHLieB3QA/PRzAAbeCFsABt3cuj1GchqdTjkKchgIAAhzAAbeiFsABt5Quhp2ctYENAQABHMABt6uAwAG3pcAReQeDxgEAAWrAAbe2YAPAAEyiFADAAE3KAMAATcgewAG3yJyTAQABgcABt9DAEXkXAACeCganpmDAAbgRwAG4GcABuFUBAI4UAAAAAQPAAbgswAG4VQAAAAAAAABgA8AATKIBPgFKwAG4MgFqwAG4QmADwABMohQGp6NgwAG4ecABuILAAbi/AACOI5yGAAAAAQPAAbiNwAG4vwAAAAEBAcABuJIAAACByGADwABMogAAYAOsDQE+AUrAAbigAR7AAbirrBEBAAGAwAG4tMARemkABqekYMABtFvAAbRbAAAQhGoAnKqcqgEDAAAAAAADAwMAAAAAbWADwABMogAAAAAAhFRgA8AATKIAAAAAIIQiXQPAAE0EAVsAAFwBSgABHQCEagMAA4AAwBF6u4EAwBF6x4IAwBF61ACcqgAAEXdQABF3wgAReNMAEXn9ABF6QAARepsAEXsFAAAABgKnp2DAAbjEwAG45MABvVg3j1oAAAFgA6dOAAFgA5yyAAEFp9QAAAAABAAAAwAAAAAAAAAAAGADp6cBPwEJ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9cARnUoAwABNyIKMAQABFrMHhbL9wBGhUoHIwABNdgDAAE3SPgE9MLMXHrMylv4AAAAAPz0es0yT6gUABYWzUcARoVKGs1zAEaFjLoCzbsARnEOEs3XAEZ1KAAan52CzhLOQtH0AAIRhAAAAAQOzl7R9AAAAAgECs5wAAABtYAPAAEyiALOoAAAAhFRgA8AATKIBagBgAcAATawCAGADrBcBPgU9ibO0wBGilR6zxcAAS98DAAOAs9XAEaKIgbPcwBGilRaz5i6ByMAATXYATrP3s/4AAIHIYAPAAEyiARy0BIG0AMARopWBBgEAAYC0BsARoogAwABNyU60HbQkAACA5mADrBcBHLQmLo4jnIYBAAGCtDLAEaLgAJzsPRy0RoO0P8ARowuEWAQABJOCtFLAEaLgLoC0YMARoogAwABNa0q0bAGDtHPAEaMLAAARm4kAEZvzABGcJgARomsAEaNdAAAABAKn6mDAAbjEwAG45MABvVgDj1wBasABuMVgA8AASp8DAAFgA6fhAAFgA6wXAAAGBqftYMABuaPAAbmrwAG6HgQFgIqchgJqwAG5cWADwABKn5odagBgA5QImjMAAAEDwAG5vMABuh4AAAADAwPAAbnIAAAAgcFgA54AAMABudQAAACGnWADwABMogDAAbnnAAAAgchgA8AATKIAAGADp+oABqfvYMABuk/AAbp6wAG7UQMAgtEBasABulBgA8AASp+CugAAAQPAAbp8wAG7UQAAAAEBAcABuoEAAACB3WADwABMogAAYAPAAEyiAT4CScABuo4iHMABupiAwAG6ksARpEuAuwEAAZMAwABN0AEcwAG6pYDAAbqfwBGkS4FeAQABFsABuqgugcinVQDAAE3TPgE9MMABurgfwAG6wsAAS/QDAAOAwAG608ARpEsuJ4HdAD9KwAG69AEcwAG7DxbAAbr7Lo9RnIanU45EnIYBAAEcwAG7JxbAAbsZLoadnLWBDQEAARzAAbswgMABuyrAEaRLg8YBAAFqwAG7PGADwABMohQAwABNygDAAE3IAJ4LBqfwYMABu1bAAbuCwAG8bwMAgQwBasABu1dgA8AASp+CugAAAQPAAbuFwAG8bwAAAAICAsABu4oAAACB3WADwABMogDAAbuVAAAgImADwABMogAAXAE+AknAAbuiIhzAAbusgMABu6bAEaVc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qOipYwAAhHgAAAABA6juqWMAAAACAgKo8wAAAIHdYAPAAEyiAKkIAAAghCJdA8AATQQBYAPAAEyiAABcAT4CTqkeqSIAAYRUYAPAAEyiARypNBapLYGpJMARxV2ByMAATSeBDQEAAYCpNsARxU8AwABNyD0cqUEuhFgDAAOAqUrAEcVPgqlRwBHFeIGpVsARxV0AwABNawaoIWCpaKltqiIAAIRlAAAAAQOpdqoiAAAAAwIDqXsAAABtYAPAAEyiAKmGAAAAhFRgA8AATKIAqZAAACCKfmADwABMogFqAGABwABNrAIAXAE+Aj0eqa3AAEvfAwADgKm9wBHF7IGpxMARxfkWqc4ugcjAAE12AEWp2wGp5KnmAACDZmADwABMogGAqejAEcXsARyp8YOp78ARxkuAuwEAAYGp88ARxfkAwABN0AGLqfrAEcZLHKn4g6n6wBHGS4ENAQABlADAAE3IPgE9HKoJLoEMAgACg6oKwBHGS4KqD8ARxgcAwABNVgAAEafCABGoLAARqFEAEah2ABGomQARqOEAEak9ABGpjQARqgAAEaqKABGrnwARrOEAEa4DABGu2AARsCMAEbCAABGw1gARsTQAEbGKABGx6AARsigAEbJuABGzBgARs0YAEbOsABGz7gARtLAAEbXgABG23gARt0cAEbe3ABG4kQARuWoAEbqxABG8CAARvbUAEb4DABG+RAARvowAEb7bABG/MgARwAAAEcFHABHCswARwuwAEcMzABHDfgARw8kAEcQsABHEpgARxTIAEcXPABHGuQAAADQCqDBgwAG9W8ABvXvAAcItN49fAAABYAOn9gABXQOc6QFgA6wiAAEFqDgAAAAABAAAAwAAAAAAAAAAAGADqDABPwEJAACoIwAAAAAEBqgyYMABvXvAAb17AAAQhGoAnKqcqgEDAAAAAAADAwMAAAAAbWADwABMogAAAAAAhFRgA8AATKIAAAAAIIQiXQPAAE0EAVsAAFwBSgABHQCEagMAA4AAwBHH/oEAwBHICoIAwBHIFwCcqgaoNGCqjaqZqrAAAo4jnIYAAAABA6qkqrAAAAABAQGqqQAAAIHIYAPAAEyiAABgA6wiAAaoNWCqtaq6s38AAIRYAAAAAQOqwrN/AAAABAMEqscAAABtYAPAAEyiAKrSAAAAhFRgA8AATKIAquUAACCCwF0D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wABNrAIAXAE+Aj0eqa3AAEvfAwADgKm9wBIgc4GpxMASIIAWqc4ugcjAAE12AEWp2wGp5KnmAACDZmADwABMogGAqejAEiBzARyp8YOp78ASINKAuwEAAYGp88ASIIAAwABN0AGLqfrAEiDSHKn4g6n6wBIg0oENAQABlADAAE3IPgE9HKoJLoEMAgACg6oKwBIg0oKqD8ASII4AwABNVgAAEgJJABICswASAtgAEgL9ABIDIAASA2gAEgPEABIEFAASBIcAEgURABIGJgASB2gAEgiKABIJXwASCqoAEgsHABILXQASC7sAEgwRABIMbwASDK8AEgz1ABINjQASDc0AEg4zABIOdQASDzcAEhBnABIRZQASEc4AEhI+ABITGAASE/EAEhU4ABIWjwASGDwAEhiKABIYywASGRMAEhliABIZuQASGocAEhvOABIdOgASHXMAEh26ABIeBQASHlAAEh6zABIfLQASH7kAEiBWABIhQAAAADQCqM9gwAHIfcAByJ3AAc7XN49nAAABYAOolQABXQOc6QFgA6w2AAEFqNcAAAAABAAAAwAAAAAAAAAAAGADqM8BPwEJAACowgAAAAAEBqjRYMAByJ3AAcidAAAQhGoAnKqcqgEDAAAAAAADAwMAAAAAbWADwABMogAAAAAAhFRgA8AATKIAAAAAIIQiXQPAAE0EAVsAAFwBSgABHQCEagMAA4AAwBIihYEAwBIikYIAwBIingCcqgao02CqjaqZqrAAAo4jnIYAAAABA6qkqrAAAAABAQGqqQAAAIHIYAPAAEyiAABgA6w2AAao1GCqtaq6s38AAIRYAAAAAQOqwrN/AAAABAMEqscAAABtYAPAAEyiAKrSAAAAhFRgA8AATKIAquUAACCCwF0DwABNBAFgA8AATKIAqvAAAACEZ2ADwABMogFqqvxgA8AATKIaAFwBPgtJqxsiIhyrIZOCjAEAAYCrI8ASIx8AwABN0gEcqzKAqyzAEiMfgowBAAGBqzTAEiMsAMAATdIBHKs/gas7wBIjLIKMAQABFqtBLoHIwABNdgDAAE3SPgI9HqtcwABL3wMAA4CrbMASIx+Bq3PAEiMsFqt4LoHIwABNdgBAKqugq6UAP0mrshyrwIOrtsASI0+AuwEAAZMAwABN0D4BPTCrzR+r3sAAS+gEAASDq+TAEiNPkysnhGcAP06sF6wdAAGBm2ADwABMogEcrCOBrB/AEiMsgQYBAAGArCXAEiMfAMAATclJrDAcrE4crEEWrDqCrDXAEiM6gcjAAE0ngQYBAAGDrEPAEiNPAMAATcmAuwEAAYSsUMASJCYAwABN0D4BPTCsXx6sepb+AAAAAD9JrI8crJmErJPAEiQmgIwBAAGTAMAATcZKrJ8AP0msrCWstQCCrLDAEiM6YAOcnT4CTq08rUwAAY4kYAOcnQEmrVMAgq1OwBIjOmADnJ1JrWwcrYgWrXUujhSctICMAQABFq2bha2LwBIkzY4UnKAAwABNxj4BSa25IhytxIStvsASJCaAuwEAATcKAMAATdAAIRyt5Rat3oWtzsASJM2BwZyigIwBAAEWre0ugcGctgCd7j4CPR6uCJPqBQAFJq4SAIKuDcASIzpdA8AATUYBYAPAAEyig64gwBIjTy6ArjHAEiMfhK44wBIkJgBKrkoASa5hHK53Fq5xFq5qLoHBnLaDpJyGneaOFpyGBgAGHK6pHK6UgK6OwBIjH4PGAQABFq6WLo4UnLQAwABNyoENAQABFq6wLoadnLUAwABNyByu0YSuy8ASJCaDxgEAARau0y6OFJy0AMAATcoWrwoWrwOFrvPAEiTNgcGcooOknIad5hyvPByvJ4OvHcASI0+DxgEAARavKS6OFJy0AMAATcqBDQEAARavToWvPsASJM2GnZyhAMAATcger3GT9wEAAS4AHq+Sk/cBAAGCr5jAEiM6AACcrT4BSq+sAD9Jr8scr+YWr9+Fr8/AEiTNgcGcooCMAQABFq/uLoHBnLYAne4+BU6wxLDPAAGOJV0DwABNRgFgA8AATKIBJrDWAIKw0cASIzpdA8AATUYBYAPAAEyiTrDysP0AAY4mYAOsNgEcsP8ujiOchgEAAYSxC8ASJCYAnOxFsRsBsSSxJgAAg2ZgA8AATKIBkwEcsS0UsSvAEiblCACAuwEAAYSxL8ASJCYAwABN0AEVsTbAEiblCByxNxSxNsASJuUIAIENAQABlADAAE3IPgE9HLFRh7FHwBImv4EMAgACFLFSwBIm5QgAHLFhhrFXwBImkILRAQABHLFsg7FiwBIjT4ENAQABFLFuwBIm5QgAAMAATcgAwABNVQDAAE1WRbGEAbGNsY8AAINmYAPAAEyiAYCxkcASIx8BHLGaFLGYwBIniAgAgLsBAAGBsZzAEiMsAMAATdABFbGhwBIniAgcsaIUsaHAEieICACBDQEAAZQAwABNyD4BPRyxti6BDAIAAhSxt8ASJ4gIAByxxoexvMASJr+C0QEAARyxyRSxx8ASJ4gIAIEGAQABgLHLwBIjHwDAAE3JAMAATVUAwABNVkqx5QA/P06yBQAAAIRoXQPAAE1GAVsATrIYAAAAhGlgA8AATKIASbIoJbIxAIKyLMASIzpdA8AATUYBYAPAAEyiPgI9jbJHwBIoLhSyU8ASIzoCAV0DwABNRgFgA8AATKI9jrJfwBIoP4OybMASI08+Aj2NsorAEiguHLKrHLKbgrKWwBIjOoHRAQABg7KgwBIjTwDAAE0egcoBAAABhA8qwABNGj2OssrAEig/k0my5Byy+xyy84ay6MASKD+BDQEAAYSy9cASJCYAwABNyIKMAQABFrMHhbL9wBIoLoHIwABNdgDAAE3SPgE9MLMXHrMylv4AAAAAPz0es0yT6gUABYWzUcASKC6Gs1zAEig/LoCzbsASIx+Es3XAEiQmAAao1WCzhLOQtH0AAIRhAAAAAQOzl7R9AAAAAgECs5wAAABtYAPAAEyiALOoAAAAhFRgA8AATKIBagBgAcAATawCAGADrDYBPgU9ibO0wBIpcR6zxcAAS98DAAOAs9XAEilkgbPcwBIpcRaz5i6ByMAATXYATrP3s/4AAIHIYAPAAEyiARy0BIG0AMASKXGBBgEAAYC0BsASKWQAwABNyU60HbQkAACA5mADrDYBHLQmLo4jnIYBAAGCtDLAEim8AJzsPRy0RoO0P8ASKeeEWAQABJOCtFLAEim8LoC0YMASKWQAwABNa0q0bAGDtHPAEinnAAASImUAEiLPABIjAgASKUcAEio5AAAABAKo2GDAAch9wAHIncABztcDj2gBasAByH5gA8AASp8DAAFgA6jPAAFgA6w2AAAHBqjbYMAByWDAAclowAHJ3QQFgIqchgJqwAHJLWADwABKn5qJagBgA5QImp8AAAEDwAHJesAByd0AAAADAwPAAcmGAAAAgcFgA54AAMAByZIAAACGnWADwABMogDAAcmlAAAAgchgA8AATKIAAGADqNgABqjdYMAByg7AAco5wAHLEgMAgtEBasAByg9gA8AASp+CugAAAQPAAco7wAHLEgAAAAEBAcABykAAAACB3WADwABMogAAYAPAAEyiAT4CScAByk0iHMAByleAwAHKUcASKyeAuwEAAZMAwABN0AEcwAHKZIDAAcpewBIrJ4FeAQABFsABymcugcinVQDAAE3TPgE9MMAByncfwAHKgcAAS/QDAAOAwAHKksASKycuJ4HdAD9KwAHKswEcwAHKzhbAAcq6Lo9RnIanU45MnIYBAAEcwAHK5xbAAcrZLoadnLWBDQEAARzAAcrwgMAByurAEisng8YBAAFqwAHK/WADwABMohYAwABNygDAAE3IAJ4PBqjeYMAByxfAActDwAHMMwMAgQwBasAByxhgA8AASp+CugAAAQPAActGwAHMMwAAAAICAsABy0sAAACB3WADwABMogDAActWAAAgImADwABMogAAXAE+AknAActjIhzAActtgMABy2fAEiw4gLsBAAGTAMAATdABHMABy3qAwAHLdMASLDiBXgEAARbAAct9LoHIp1UAwABN0z4BPTDAAcuNH8ABy5fAAEv0AwADgMABy6jAEiw4LieB3QA/PRzAAcvUFsABy8kuj1GchqdTjk6chgIAAhzAAcv2FsABy+guhp2ctYENAQABHMABy/+AwAHL+cASLDiDxgEAAWrAAcwMYAPAAEyiFgDAAE3KAMAATcgewAHMHpyXAQABgcABzCjAEixIAACeEAao32DAAcw4wAHMPcABzekAAIRYAAAAAQPAAcxFwAHN6QAAAAQDBMABzEoAAABtYAPAAEyiAMABzFUAAACEVGADwABMogDAAcxjAAAghCJdA8AATQQBWwDAAcxyAAAAhGdgA8AATKIBasABzH5gA8AATKIaAFwBPgFJwAHMiCXAAcyVAILAAcyMwBItdGADk/0+BD2JwAHMq8ASLWQewAHMvMAAS98DAAOAwAHMzMASLVWBwAHM08ASLWQWwAHM3S6ByKdVAE7AAczwwAHM9wAAgchgA8AATKIBHMABzP2BwAHM+cASLWSBBgEAAYDAAcz/wBItVQDAAE3JTsABzRDAAc0aAACOdWADwABMogEcwAHNLxbAAc0hLoadnLWBDQEAARzAAc03gMABzTHAEi1Vg8YBAAFqwAHNRGADwABMohYAwABNygDAAE3IPRzAAc1mFsABzVsuj1GchqdTjnSchgQABBTAAc10wBItdAIBYAOT/YXAAc1+wBIuKoTAAc2JwBIt9YPAAc2RwBIthgCeIz4BPR3AAc22hFgEAASAwAHNv8ASLVWBwAHNxsASLWQmwAHNywGCwAHNy8ASLXRdA8AATQQBYAPAAEyig8ABzdXAEi2GAJztBqjkYMABziDAAc4owAHOZgEAjhQAAAABA8ABzjvAAc5mAAAAAAAAAGADwABMogE+AUrAAc5BAWrAAc5TYAPAAEyiFgao4WDAAc6LwAHOlsABztUAAI4jnIYAAAABA8ABzqHAAc7VAAAAAQEBwAHOpgAAAIHIYAPAAEyiAABgA6w2AT4BSsABzrQBHsABzr+sOgEAAYDAAc7KwBIvcwAGqOJgwAHIncAByJ0AABCEagCcqpyqAQMAAAAAAAMDAwAAAABtYAPAAEyiAAAAAACEVGADwABMogAAAAAghCJdA8AATQQBWwAAXAFKAAEdAIRqAwADgADAEi/FgQDAEi/RggDAEi/eAJyqAAASKoEAEirzABIsBAASLS4AEi8HABIvSgASL6UAEjAPAAAABwKo5WDAAc7awAHO+sAB0243j2oAAAFgA6dOAAFgA5yyAAEFqRIAAAAABAAAAwAAAAAAAAAAAGADqOUBPwEJAACnVwAAAAA0BqjnYMABzvrAAc76AAAQhGoAnKqcqgEDAAAAAAADAwMAAAAAbWADwABMogAAAAAAhFRgA8AATKIAAAAAIIQiXQPAAE0EAVsAAFwBSgABHQCEagMAA4AAwBIwm4EAwBIwp4IAwBIwtACcqgapFGCOOo5CjlQBAo4UAAAAAQOOVI5UAAAAAAAAAGADwABMogAGqRVgjliOYI5tAQKGnQAAAAEDjm2ObQAAAAAAAABgA8AATKIABqkWYI5xjoGOhwECgcEAAAABA46HjocAAAAAAAAAYAOd4wAGqOhgjoyOmI7IAACECQAAAAEDjqSOyAAAAQAABCFgA8AATe8BWwAAAABdA8AATQQBXwMAAAFKjqoBH46ulu8BAV8DAAABLgAGqOlgjs2O2487AACECAAAAAEDjuWPOwAAAAEBAY70AAAggh1dA8AATQQBYAPAAEyiAABdA8AATQQBYAPAAEyiAUqPBAEejwiWxwIBYAPAAEyiAi6AjzXAEjG3AAao6mCPQI9Ij3AAAIHJAAAAAQOPT49wAAABAAAEQ2ADwABN7wFbAAAAAF0DwABNRgFfAwAAAUqPVQEej1rAAE1RAQJgA8AATKJfAwAAAS4ABqkdYI90j32P5gIAgcIAAAABA4+Cj+YAAAABAQGPhwAAICJgA8AATKIAAFwBPgJJj5Qcj6QWj50ugcjAAE12gIwBAAGTAMAATcY9MI+qH4+0wABL9AIAApMuAD89HI/XLoEMAgACk4CP3cASMmMAwABNVgapHmCP64/0kGoCAIHVAAAAAQOP+JBqAAAAAQEBj/0AACAiYAPAAEyiAABcAT4CSZAKHJAaFpATLoHIwABNdoCMAQABkwDAAE3GPTCQIB+QKsAAS/QCAAKTLgA/PRyQTS6BDAIAAhyQWhaQUy6ByMAATXaBBgEAAZQAwABNyYCQYcASMtYAwABNVgao62CQb5BzkSwAAIRxAAAAAQOQfZEsAAAAAgECkIMAAACBG2EDAWADwABMomADwABK2ACQmwAAAG1gA8AATKIBapCjYAPAAEyiGgBgA8AATKIBPgNJkK0ckLeBkLHAEjN3gLsBAAGTAMAATdA9iZC8wBIzd5M/RZDLAZDUkNYAAINmYAPAAEyiAYGQ2MASM3cBHJDhgpDfwBIzvoC7AQABFpDjLoHIwABNdgDAAE3QAYqQ68ASM74ckOyCkOvAEjO+gQ0BAAGUAMAATcg+AUmQ+ByRAICQ/MASM2BuAQABHJEFLoLRAQABgpEGwBIzvgDAAE1VAABKkQsBgpESwBIzvj9KkR8BHJEmlIPrAAAAAMAATMUGqOxgkTGRNZIUAACEcwAAAAEDkUOSFAAAAAIBApFJAAAAgRthAwFgA8AATKJgA8AAStgAkWEAAABtYAPAAEyiAWoAYAHAAE2sAgBgA8AATKIBPgNJkW8iHJF5gZFzwBI0jICMAQABKwDAAE3GARyRioGRhMASNIyBXgEAARaRki6ByMAATXYAwABN0z2JkZrAEjSMHJGuFpGnLoHIwABNdoEGAQABlADAAE3JP0WRtwGRwJHCAACDZmADwABMogGBkcTAEjSMARyRzYKRy8ASNQmBXgEAAZMAwABN0wGKkdPAEjUJHJHUgpHTwBI1CYEGAQABlADAAE3JPgFJkeAckeiAkeTAEjR1bgEAARyR7S6C0QEAAYKR7sASNQkAwABNVQAASpHzAYKR+sASNQk/SpIHARySDpSD6wAAAADAAEzFBqjtYJIZkiyS/wMAgQ0AAAABA5Itkv8AAAABAQGSOAAAIIIdXQPAAE1GAWADwABMogAAXQPAAE1GAWADwABMogE+Ak6SSZJVAACOHmADwABMogEckmMWklwugcjAAE12gQ0BAAEWkmuAkmXAEjW3gcjAAE12AMAATchKkncBNZKDAAABAF0DwABNRgFgA8AATKIBMZKDYAPAAEyiADWSjgAAAQBcAReSjoKSg8ASNhmByIGSl8ASNd7AAE10NZKrAAABAFwBHJKrgpKDwBI2GYRYAwADkxaSvC6ByMAATXYuAMAATWs1ktIAAAEAXAEcktKCkoPAEjYZhFgDAAMWkuAugcjAAE12gZLowBI13oCS9cASNbcAwABNa4KSg8ASNhkGqO5gkwSTCZOoAACBxAAAAAEDkxGTqAAAAAEBAZMZAAAAgbxgA8AATe8AAGADwABK2AE+A06TLJMwAACOH2ADwABMogEWkzcugcjAAE12RZNDAZNMk04AAINmYAPAAEyiAZMBHJNVgpNTwBI3D4C7AQABgZNXwBI28gDAAE3QAYqTXsASNw8ck1yCk17AEjcPgQ0BAAGUAMAATcg+AUmTaRyTdRyTcS6C0QEAAYKTcsASNw8AwABNVYCMAQABgJN4wBI22QDAAE3GSpOBASk/SpOYASoGqO9gk62TspSbAACEXAAAAAEDk7mUmwAAAAEAAZPCAAAAhF1gA5lBAWoAYAHAAE2sAgBcAT4DPSMck9iAk9HAEjeugIwBAAErAMAATfyIk9HAEjeuHpPgmUMAAAAAKwFgA5lBTpPyk/QAAINmYAPAAEyiARaT+y6ByMAATXZDlAcclBCBlA7AEjf2gowBAAGUAMAATdI+BU6UIZQlAACBC2ADwABMogEclC6AlCfAEjeuhF4BAAGBlDbAEjf2AJlGPYmUQMASN/YclEKBlEDAEjf2gQYBAAGUAMAATclOlFKUVgAAhF9gA8AATKIBHJRcLoLRAQABgZRdwBI39gDAAE1VPRyUay6BDAIAAoGUbMASN/YclHUugtEBAAGClHbAEjgqAMAATVUAwABNVj0clIYugQwCAAKClIfAEjgqg5SOwBI4cADAAE1WBqjwYJSglK6U6wAAgaoAAAABA5SzlOsAAAABAQGUuQAAAFBhAwFgA8AATKJgA8AAStgAAF0DwABNBAFgA8AATKIBSpTMAR+U0JYRAgFgA8AATKICLoCU6cASOPkABqjxYJTwlP6VMQAAgc8AAAABA5UClTEAAAABAQGVBwAAAIQTYAPAAEyiAABdA8AATQQBYAPAAEyiAUqVDQEflRGVzAMBYAPAAEyiAy6TgJUvwBI5VgAGqPJglTaVRJWVAACB0AAAAAEDlU2VlQAAAAEBAZVTAAAAgRthAwFgA8AATKJgA8AAStgAAF0DwABNBAFgA8AATKIBSpVvAR+Vc5ZXAgFgA8AATKICLoCVkMASOawABqjzYJWalaiV3gAAgdEAAAABA5Wsld4AAAABAQGVsQAAAIQTYAPAAEyiAABdA8AATQQBYAPAAEyiAUqVtwEflbuVzAMBYAPAAEyiAy6AldbAEjoKKwAGqPRgleOV8ZZCAACB0gAAAAEDlfqWQgAAAAEBAZYAAAAAgRthAwFgA8AATKJgA8AAStgAAF0DwABNBAFgA8AATKIBSpYcAR+WIJaPAgFgA8AATKICLoCWPcASOmAABqkXYJZHllmWiAEAhHkAAAABA5ZilogAAAAAAAAAXQPAAE0EAWADwABMogFKlmUBH5Zpl30BAWADwABMogEuAAao9WCWjZablsAAAIRgAAAAAQOWoJbAAAAAAAAAAF0DwABNeAJgA8AATKJgA8AATKIBSpamAR+WqpdzAQFgA8AATKIBLgAGqPZglsWW05dmAACEYwAAAAEDltuXZgAAAAIBApbgAAAAbWADwABMogCW7AAAAIRUYAPAAEyiAWoAYAHAAE2sAgBdA8AATQQBYAPAAEyiAT4CPR6XA8AAS98DAAOAlxPAEjtEgZcawBI7URaXJC6ByMAATXYASpcxAR+XPJXMAwFgA8AATKIDLoCXV8ASO0SBl17AEjtRAAapGGCXa5d9l6oBAIEIAAAAAQOXhpeqAAAAAAAAAF0DwABNPwFgA8AATKIBSpeJAR+XjadNAQFgA8AATKIBLgAGqPdgl6+XuZgUAACBygAAAAEDl7+YFAAAAAEAAAGXxgAAAIQPYAPAAErYAWqX0GADwABK2IP7XQPAAE1GAWADwABMogE+AUqX3QEel+jAAE1MAgFgA8AATKIBLgGED4CYB8ASPB0GqPhgmBmYIphSAACBywAAAAEDmCeYUgAAAAAAAABdA8AATjoBYAPAAEyiAT4BSpgwAR6YO4liAQFgA8AATKIBLgAGqPlgmFeYXJjUAACBEgAAAAEDmGOY1AAAAAEBAZhpAAAAUGEDAWADwABMolwAAFwBPgJOmIOYhwAAjh9gA8AATKIBFpiOLoHIwABNdkWYmgGYo5ilAACDZmADwABMogGTARyYrIKYqsASPPiAuwEAAYGYrsASPNsAwABN0AGKmLPAEjz4HJi0gpizwBI8+IENAQABlADAAE3IPgE9HJjBgJjAwBI8xG4BAAEcmMYugtEBAAGCmMfAEjz4AMAATVUAAAao+mCY2Zjdmd4AAIG5AAAAAQOY45neAAAAAQEBmOgAACCBumEDAmADwABMomADwABMomADwABMogAAYAPAAEyiAT4FTpkTmRcAAI4fYAPAAEyiARaZHi6ByMAATXZJmSocmTKBmS7AEj2ugIwBAAGTAMAATcY9MJk4HplTlvwAAAAAP06ZaJluAAAiYAPAAEyiARyZdC6C0QEAAZMAwABNVUWZfQGZhpmIAACDZmADwABMogGUARyZj4OZjcASPg+AuwEAAYGZkcASPa4AwABN0AGLmZjAEj4PHJmWg5mYwBI+D4ENAQABlADAAE3IPgE9ipmjwBI97hyZsoCZq8ASPYZuAgACgpmzwBI97hyZvi6C0QEAAYOZv8ASPg8AwABNVQAASpnOAYKZ1cASPe4GqPtgmeOZ5Zq8AACBvQAAAAEDmeyavAAAAQAABCFgA8AATe8BWwICApnvAAAAgb5fAwAAAJn/AAAAgbphAwJfAwAAYAPAAEyiXwMAAAAAXwMAAAE+A06aL5ozAACOH2ADwABMogEWmjougcjAAE12RZpGAZpPmlEAAINmYAPAAEyiAZMBHJpYg5pWwBI/DYC7AQABgppawBI+8ADAAE3QAYuaYcASPw0cml+DmmHAEj8NgQ0BAAGUAMAATcg+AT2ImmzAEj7CHJqCgZp7wBI+zm4CAAKAmoPAEj7CHJqVLoLRAQABg5qWwBI/DQDAAE1VAABKmqUBgJqswBI+wgao/GCawZrNmwwAAIGrAAAAAQOa05sMAAABAAAEIWADwABN7wFbAQEBmtYAAABQYQMBYAPAAEyiXwMAAAAAXQPAAE0EAV8DAAABSprpAR6a7ZXgAgJgA8AATKJfAwAAAi6AmwrAEj/AAAao/WCbEZsdm28AAIGzAAAAAQObJptvAAABAAAEIWADwABN7wFbAQEBmzMAAABQYQMBYAPAAEyiXQPAAE0EAV8DAAAAAF0DwABNBAFfAwAAAUqbTAEfm1CWJQICYAPAAEyiXwMAAAIugJttwBJAKQAGqP5gm3SbeZwTAACBxwAAAAEDm36cEwAAAAEBAZuEAAAAUGEDAWADwABMomADwABK2AAAYAPAAErYAT4DTpuem6IAAI4fYAPAAEyiARabqS6ByMAATXZFm7UBm76bwAAAg2ZgA8AATKIBkwEcm8eCm8XAEkDLgLsBAAGBm8nAEkCuAMAATdABipvQwBJAyxybzoKb0MASQMuBDQEAAZQAwABNyD4BSZvbIRyb4YCb4MASQI1uAQABHJvmLoLRAQABgpvnwBJAywDAAE1VAABKm+wBKj9KnAQBKQao/2CcGJwdnLQAAIEOAAAAAQOcIJy0AAAAAQEBnCYAAABQYQMBYAPAAEyiYAPAAErYAABgA8AAStgBPgNOnECcRAAAjh9gA8AATKIBFpxLLoHIwABNdkWcVwGcYJxiAACDZmADwABMogGTARycaYKcZ8ASQaWAuwEAAYGca8ASQYgAwABN0AGKnHLAEkGlHJxwgpxywBJBpYENAQABlADAAE3IPgFJnH0cnIKAnIHAEkFnbgEAARychy6C0QEAAYKciMASQaUAwABNVQAASpyNASk/SpykASoGqQBgnLmcvZ3UAACB2AAAAAEDnMed1AAAAAIBAZzNAAAAgRthAwFgA8AATKJgA8AAStgAAZzlAAAggdlhAwBgA8AATKIBagBgAcAATawCYAPAAEyiAT4ETpz6nP4AAI4fYAPAAEyiARadBS6ByMAATXZFnREBnRqdHAAAg2ZgA8AATKIBkwEcnSODnSHAEkKZgLsBAAGCnSXAEkJ8AMAATdABi50swBJCmRydKoOdLMASQpmBDQEAAZQAwABNyD4CTp07nUMAAIG8YAPAAEyiARydSS6C0QEAAYOdSsASQpkAwABNVUmdVBydXICdWMASQkBuAQABhJ1dwBJC5QAASp1nAYSdbsASQuU/SZ2BIRydjIGdhcASQliAjAEAASsAwABN/EqdlQEcnaKBnZzAEkJYbgAAAAAAPz0wnaoencWW/AAAAAAGqQFgndmd3Z8KAACB2gAAAAEDneafCgAAAAIBAZ3sAAAAgRthAwFgA8AATKJgA8AAStgAAZ4EAAAggdlhAwBgA8AATKIBagBgAcAATawCYAPAAEyiAT4ETp4Znh0AAI4fYAPAAEyiARaeJC6ByMAATXZFnjABnjmeOwAAg2ZgA8AATKIBHJ5Bgp49wBJDw4EGAQABlADAAE3JARyeSIOeRsASQ+CBXgEAAZMAwABN0wGLnlDAEkPgHJ5Og55QwBJD4IEGAQABlADAAE3JPgJOnl+eZwAAgbxgA8AATKIBHJ5tLoLRAQABg55uwBJD4ADAAE1VSZ54HJ6AgJ58wBJDh24BAAGEnoHAEkQ6AAA+AUqelQGEnpzAEkQ6P0metyEcnsKBnrvAEkOfgIwBAAErAMAATfxKnssBHJ7YgZ7SwBJDn24AAAAAAD89MJ7gHp77lvwAAAAABqkCYJ8PnxOhEQAAgdsAAAABA58eoREAAAACAQGfJAAAAIEbYQMBYAPAAEyiYAPAAErYAAGfPAAAIIHZYQMAYAPAAEyiAWoAYAHAAE2sAmADwABMogE+B06fUZ9YAACA5lsBK06faZ93AACEFGADwABK2AEqTp+In4wAAI4fYAPAAEyiARafky6ByMAATXZFn58Bn6ifqgAAg2ZgA8AATKIBkwEcn7GFn6/AEkVUgLsBAAGEn7PAEkU3AMAATdABjZ+6wBJFVByfuIWfusASRVSBDQEAAZQAwABNyD4CTp/Jn9EAAIG8YAPAAEyiARyf1y6C0QEAAYWf2MASRVQAwABNVUmf4hyf6oCf5sASRN5uAQABhp/rwBJFoAAAPgNJn/+DoAPAEkUmPgE9MKAeHqA5lv0AAAAAPz2KoFbAEkUahqBfwBJFoD2LoHDAEkUmKT9JoJiDoJzAEkUmSqCrASagqwWCoLLAEkUaYAPAAEyiP0mgviEcoMmBoMLAEkT2gIwBAAErAMAATfxKoNIBHKDfgaDZwBJE9m4AAAAAAD89MKDnHqEClvwAAAAABqkDYKEWoRqhSwAAgdwAAAABA6EjoUsAAAABAQGhKAAAAIHdYAPAAEyiAABgA8AATKIBPgFKoTUBHKFALoLRAQABgKFBwBJGiwDAAE1VBqkEYKFQoVWhrQAAgIIAAAABA6FYoa0AAAABAQGhXQAAICJgA8AATKIAAFwBPgE9MKFqH6F0wABMMAEAASeKxQAGqQVgobKht6IcAACDawAAAAEDob2iHAAAAAEBAaHMAAAgIl0DwABNBAFgA8AATKIAAFwBPgE9MKHZH6HjwABMMAEAASeKxQAGqQZgoiGiJqKRAACEdAAAAAEDoiyikQAAAAICAqIxAAAAgd1gA8AATKIAojwAACAiYAPAAEyiAABcAT4BPTCiSR+iU8AATDABAAEnjiAABqkHYKKWopujFAAAhHYAAAABA6KkoxQAAAACAgKiqQAAAIHdYAPAAEyiAKK+AAAggQFdA8AATQQBYAPAAEyiAABcAT4BPTCizB+i1sAATDABAAEnjiAABqkIYKMZox6jeAAAhFkAAAABA6Mio3gAAAABAAGjKAAAAIRaYQMCYAPAAEyiYAPAAEyiYAPAAEyiAWoAYAHAAE2sAgBcAT4BPR6jS5eSAgFgA8AATKICLjWjVgAAAQBhAwJgA8AATKJgA8AATKJgA8AATKIBgKNWwBJICCMco1aBo1bAEkhEgIwBAAErAMAATfxqo2xhAwJdA8AASuQBW10DwABK5AFbYAPAAEyihCWBo1bAEkhEAWEDAmADwABMomADwABMomADwABMogAGqQlgo32jgaR8AACEcAAAAAEDo4ikfAAAAAIBAqONAAAggbxgA8AATKIAo5sAAABtYAPAAEyiAWqjo2ADwABMohoAYAPAAEyiAT4DSaOtHKO3gaOxwBJI5IFeAQABFqO/LoHIwABNdgDAAE3TPgFKo88BHKPWlIPrAAAAAMAATMVJo+Uco++Bo+nAEkjkgLsBAAGTAMAATdA+AT2Jo/zAEkjkkz9FpBEBpBqkHAAAg2ZgA8AATKIBgaQewBJI5AEcpCeCpCXAEkligLsBAAEWpC4ugcjAAE12AMAATdABiqQ2wBJJYhykN4KkNsASSWKBDQEAAZQAwABNyD4BSaRDHKRPHKRLLoLRAQABgqRMwBJJYgDAAE1VgIwBAAGApFLAEkjWAMAATcZKpFsBgqRiwBJJYj9KpG8BHKR2lIPrAAAAAMAATMUGqQpgpIGkhaWdAACEcgAAAAEDpJClnQAAAAIBAqSVAAAggbxgA8AATKIApKMAAABtYAPAAEyiAWqkq2ABwABNrAIAYAPAAEyiAT4DSaS4IhykwoGkvMASSiuAjAEAASsAwABNxgEcpNOBpM3AEkorgV4BAAEWpNsugcjAAE12AMAATdM+AT2JpOvAEkorHKT/FqT4LoHIwABNdoEGAQABlADAAE3JSaUPHKUZgaUTwBJKK4C7AQABkwDAAE3QPgFKpSYBHKUtlIPrAAAAAMAATMU/RaU7AaVEpUYAAINmYAPAAEyiAYGlSMASSisBHKVRgqVPwBJK14FeAQABkwDAAE3TAYqlV8ASStccpViCpVfAEkrXgQYBAAGUAMAATck+AUmlZBylcBylbC6C0QEAAYKlbcASStcAwABNVYCMAQABgKVzwBJKHQDAAE3GSqV8AYKlg8ASStc/SqWQARyll5SD6wAAAADAAEzFBqkLYKWipaamAQAAhC8AAAABA6WwpgEAAAAAAAAAYAPAAEyiAT4BPTCluR+lw8AATDABAAEniscABqkMYKYGpgqmbAAAhHUAAAABA6YSpmwAAAABAQGmFwAAAIHdYAPAAEyiAABgA8AATKIBPgE9MKYkH6YuwABMMAEAASeKxwAGqQ1gpnGmdqboAACDlQAAAAEDpoGm6AAAAAEBAaaHAAAAgRthAwFgA8AATKJgA8AAStgAAFwBPgE9MKagH6aqwABMMAEAASeKxwAGqQ5gpu2m8qdkAACDlgAAAAEDpv2nZAAAAAEBAacDAAAAgRthAwFgA8AATKJgA8AAStgAAFwBPgE9MKccH6cmwABMMAEAASeKxwAGqRlgp2mncafLAQCBwgAAAAEDp3enywAAAAAAAABgA8AATKIBPgJJp30cp4gWp4EugcjAAE12gowBAAGTAMAATdJKp40BHKeYLoLRAQABkwDAAE1VPz0wp6Eep7yW/AAAAAAGqRpgp9Cn2Kg6AQCB1QAAAAEDp92oOgAAAAAAAABgA8AATKIBPgJJp+Mcp+4Wp+cugcjAAE12gowBAAGTAMAATdJKp/MBHKf+LoLRAQABHKgGFqf/LoHIwABNdoEGAQABlADAAE3JAMAATVU/PTCoEB6oK5b8AAAAAAapG2CoP6hHqN4BAIHXAAAAAQOoTqjeAAAAAAAAAGADwABMogE+A0moVByoXxaoWC6ByMAATXaAjAEAAZQAwABNxkqoZQEcqHAugtEBAAGTAMAATVU/Sah5HKiEFqh9LoHIwABNdoCMAQABkwDAAE3GPTCoih6opZb8AAAAAD89MKi2HqjRlv0AAAAABqkPYKjjqOipYwAAhHgAAAABA6juqWMAAAACAgKo8wAAAIHdYAPAAEyiAKkIAAAghCJdA8AATQQBYAPAAEyiAABcAT4CTqkeqSIAAYRUYAPAAEyiARypNBapLYGpJMASThaByMAATSeBDQEAAYCpNsASTggAwABNyD0cqUEuhFgDAAOAqUrAEk4IgqlRwBJOMYGpVsASThYAwABNawapEGCpaKltqiIAAIRlAAAAAQOpdqoiAAAAAwIDqXsAAABtYAPAAEyiAKmGAAAAhFRgA8AATKIAqZAAACCKfmADwABMogFqAGABwABNrAIAXAE+Aj0eqa3AAEvfAwADgKm9wBJOpYGpxMASTrIWqc4ugcjAAE12AEWp2wGp5KnmAACDZmADwABMogGAqejAEk6lARyp8YOp78ASTwSAuwEAAYGp88ASTrIAwABN0AGLqfrAEk8EHKn4g6n6wBJPBIENAQABlADAAE3IPgE9HKoJLoEMAgACg6oKwBJPBIKqD8ASTsAAwABNVgAAEjB7ABIw5QASMQoAEjEvABIxUgASMZoAEjH2ABIyRgASMrkAEjNDABI0WAASNZoAEja8ABI3kQASONwAEjk5ABI5jwASOe0AEjpDABI6oQASOuEAEjsnABI7vwASO/8AEjxlABI8pwASPWkAEj6ZABI/lwASQAAAEkBwABJBSgASQiMAEkNqABJEwQASRm4AEka8ABJG/QASR0UAEkeUABJH6wASSLkAEkoAABJLbAASS6UAEkvsABJMNwASTIIAEkzlABJNXwASTesAEk6IABJPcgAAADQCqR9gwAHO2sABzvrAAdNuN49rAAABYAOo5QABXQOc6QFgA6xAAAEFqScAAAAABAAAAwAAAAAAAAAAAGADqR8BPwEJAACpEgAAAAAEBqkhYMABzvrAAc76AAAQhGoAnKqcqgEDAAAAAAADAwMAAAAAbWADwABMogAAAAAAhFRgA8AATKIAAAAAIIQiXQPAAE0EAVsAAFwBSgABHQCEagMAA4AAwBJQt4EAwBJQw4IAwBJQ0ACcqgapI2CqjaqZqrAAAo4jnIYAAAABA6qkqrAAAAABAQGqqQAAAIHIYAPAAEyiAABgA6xAAAapJGCqtaq6s38AAIRYAAAAAQOqwrN/AAAABAMEqscAAABtYAPAAEyiAKrSAAAAhFRgA8AATKIAquUAACCCwF0DwABNBAFgA8AATKIAqvAAAACEZ2ADwABMogFqqvxgA8AATKIaAFwBPgtJqxsiIhyrIZOCjAEAAYCrI8ASUVEAwABN0gEcqzKAqyzAElFRgowBAAGBqzTAElFeAMAATdIBHKs/gas7wBJRXoKMAQABFqtBLoHIwABNdgDAAE3SPgI9HqtcwABL3wMAA4CrbMASUVGBq3PAElFeFqt4LoHIwABNdgBAKqugq6UAP0mrshyrwIOrtsASUYGAuwEAAZMAwABN0D4BPTCrzR+r3sAAS+gEAASDq+TAElGBkysnhGcAP06sF6wdAAGBm2ADwABMogEcrCOBrB/AElFegQYBAAGArCXAElFRAMAATclJrDAcrE4crEEWrDqCrDXAElFsgcjAAE0ngQYBAAGDrEPAElGBAMAATcmAuwEAAYSsUMASUlgAwABN0D4BPTCsXx6sepb+AAAAAD9JrI8crJmErJPAElJYgIwBAAGTAMAATcZKrJ8AP0msrCWstQCCrLDAElFsYAOcnT4CTq08rUwAAY4kYAOcnQEmrVMAgq1OwBJRbGADnJ1JrWwcrYgWrXUujhSctICMAQABFq2bha2LwBJS/44UnKAAwABNxj4BSa25IhytxIStvsASUliAuwEAATcKAMAATdAAIRyt5Rat3oWtzsASUv+BwZyigIwBAAEWre0ugcGctgCd7j4CPR6uCJPqBQAFJq4SAIKuDcASUWxdA8AATUYBYAPAAEyig64gwBJRgS6ArjHAElFRhK44wBJSWABKrkoASa5hHK53Fq5xFq5qLoHBnLaDpJyGneaOFpyGBgAGHK6pHK6UgK6OwBJRUYPGAQABFq6WLo4UnLQAwABNyoENAQABFq6wLoadnLUAwABNyByu0YSuy8ASUliDxgEAARau0y6OFJy0AMAATcoWrwoWrwOFrvPAElL/gcGcooOknIad5hyvPByvJ4OvHcASUYGDxgEAARavKS6OFJy0AMAATcqBDQEAARavToWvPsASUv+GnZyhAMAATcger3GT9wEAAS4AHq+Sk/cBAAGCr5jAElFsAACcrT4BSq+sAD9Jr8scr+YWr9+Fr8/AElL/gcGcooCMAQABFq/uLoHBnLYAne4+BU6wxLDPAAGOJV0DwABNRgFgA8AATKIBJrDWAIKw0cASUWxdA8AATUYBYAPAAEyiTrDysP0AAY4mYAOsQAEcsP8ujiOchgEAAYSxC8ASUlgAnOxFsRsBsSSxJgAAg2ZgA8AATKIBkwEcsS0UsSvAElUXCACAuwEAAYSxL8ASUlgAwABN0AEVsTbAElUXCByxNxSxNsASVRcIAIENAQABlADAAE3IPgE9HLFRh7FHwBJU8YEMAgACFLFSwBJVFwgAHLFhhrFXwBJUwoLRAQABHLFsg7FiwBJRgYENAQABFLFuwBJVFwgAAMAATcgAwABNVQDAAE1WRbGEAbGNsY8AAINmYAPAAEyiAYCxkcASUVEBHLGaFLGYwBJVuggAgLsBAAGBsZzAElFeAMAATdABFbGhwBJVuggcsaIUsaHAElW6CACBDQEAAZQAwABNyD4BPRyxti6BDAIAAhSxt8ASVboIAByxxoexvMASVPGC0QEAARyxyRSxx8ASVboIAIEGAQABgLHLwBJRUQDAAE3JAMAATVUAwABNVkqx5QA/P06yBQAAAIRoXQPAAE1GAVsATrIYAAAAhGlgA8AATKIASbIoJbIxAIKyLMASUWxdA8AATUYBYAPAAEyiPgI9jbJHwBJWYBSyU8ASUWwCAV0DwABNRgFgA8AATKI9jrJfwBJWcYOybMASUYE+Aj2NsorAElZgHLKrHLKbgrKWwBJRbIHRAQABg7KgwBJRgQDAAE0egcoBAAABhA8qwABNGj2OssrAElZxk0my5Byy+xyy84ay6MASVnGBDQEAAYSy9cASUlgAwABNyIKMAQABFrMHhbL9wBJWYIHIwABNdgDAAE3SPgE9MLMXHrMylv4AAAAAPz0es0yT6gUABYWzUcASVmCGs1zAElZxLoCzbsASUVGEs3XAElJYAAapJWCzhLOQtH0AAIRhAAAAAQOzl7R9AAAAAgECs5wAAABtYAPAAEyiALOoAAAAhFRgA8AATKIBagBgAcAATawCAGADrEABPgU9ibO0wBJXox6zxcAAS98DAAOAs9XAEleWgbPcwBJXoxaz5i6ByMAATXYATrP3s/4AAIHIYAPAAEyiARy0BIG0AMASV6OBBgEAAYC0BsASV5YAwABNyU60HbQkAACA5mADrEABHLQmLo4jnIYBAAGCtDLAElfuAJzsPRy0RoO0P8ASWBmEWAQABJOCtFLAElfuLoC0YMASV5YAwABNa0q0bAGDtHPAElgZAAASUJcAElEBABJRNAASV3kAElhrAAAABAKpKGDAAc7awAHO+sAB024Dj2wBasABzttgA8AASp8DAAFgA6kfAAFgA6xAAAAGBqkrYMABz7nAAc/BwAHQNAQFgIqchgJqwAHPh2ADwABKn5qtagBgA5QImsMAAAEDwAHP0sAB0DQAAAADAwPAAc/eAAAAgcFgA54AAMABz+oAAACGnWADwABMogDAAc/9AAAAgchgA8AATKIAAGADqSgABqktYMAB0GXAAdCQwAHRZwMAgtEBasAB0GZgA8AASp+CugAAAQPAAdCSwAHRZwAAAAEBAcAB0JcAAACB3WADwABMogAAYAPAAEyiAT4CScAB0KQiHMAB0K6AwAHQqMASWVmAuwEAAZMAwABN0AEcwAHQu4DAAdC1wBJZWYFeAQABFsAB0L4ugcinVQDAAE3TPgE9MMAB0M4fwAHQ2MAAS/QDAAOAwAHQ6cASWVkuJ4HdAD9KwAHRCgEcwAHRJRbAAdERLo9RnIanU45QnIYBAAEcwAHRPRbAAdEvLoadnLWBDQEAARzAAdFGgMAB0UDAEllZg8YBAAFqwAHRUmADwABMohgAwABNygDAAE3IAJ4RBqkuYMAB0WzAAdGYwAHShQMAgQwBasAB0W1gA8AASp+CugAAAQPAAdGbwAHShQAAAAICAsAB0aAAAACB3WADwABMogDAAdGrAAAgImADwABMogAAXAE+AknAAdG4IhzAAdHCgMAB0bzAElpqgLsBAAGTAMAATdABHMAB0c+AwAHRycASWmqBXgEAARbAAdHSLoHIp1UAwABN0z4BPTDAAdHiH8AB0ezAAEv0AwADgMAB0f3AElpqLieB3QA/PRzAAdIpFsAB0h4uj1GchqdTjlKchgIAAhzAAdJKFsAB0jwuhp2ctYENAQABHMAB0lOAwAHSTcASWmqDxgEAAWrAAdJfYAPAAEyiGADAAE3KAMAATcgewAHScZyYAQABgcAB0nrAElp6AACeEgapM2DAAdK7wAHSw8AB0wABAI4UAAAAAQPAAdLWwAHTAAAAAAAAAABgA8AATKIBPgFKwAHS3AFqwAHS7WADwABMohgGqTBgwAHTJMAB0y7AAdNsAACOI5yGAAAAAQPAAdM5wAHTbAAAAAEBAcAB0z4AAACByGADwABMogAAYAOsQAE+AUrAAdNMAR7AAdNXrEQBAAGAwAHTYcASW8wABqkxYMABzvrAAc76AAAQhGoAnKqcqgEDAAAAAAADAwMAAAAAbWADwABMogAAAAAAhFRgA8AATKIAAAAAIIQiXQPAAE0EAVsAAFwBSgABHQCEagMAA4AAwBJcHoEAwBJcKoIAwBJcNwCcqgAAElizABJZJQASWjYAEltgABJbowASW/4AElxoAAAABgKpNGDAAdNxwAHTkcAB2BM3j24AAAFgA6dOAAFgA5yyAAEFqWEAAAAABAAAAwAAAAAAAAAAAGADqTQBPwEJAACnVwAAAAA0Bqk2YMAB05HAAdORAAAQhGoAnKqcqgEDAAAAAAADAwMAAAAAbWADwABMogAAAAAAhFRgA8AATKIAAAAAIIQiXQPAAE0EAVsAAFwBSgABHQCEagMAA4AAwBJc8IEAwBJc/IIAwBJdCQCcqgapY2COOo5CjlQBAo4UAAAAAQOOVI5UAAAAAAAAAGADwABMogAGqWRgjliOYI5tAQKGnQAAAAEDjm2ObQAAAAAAAABgA8AATKIABqllYI5xjoGOhwECgcEAAAABA46HjocAAAAAAAAAYAOd4wAGqTdgjoyOmI7IAACECQAAAAEDjqSOyAAAAQAABCFgA8AATe8BWwAAAABdA8AATQQBXwMAAAFKjqoBH46ulu8BAV8DAAABLgAGqThgjs2O2487AACECAAAAAEDjuWPOwAAAAEBAY70AAAggh1dA8AATQQBYAPAAEyiAABdA8AATQQBYAPAAEyiAUqPBAEejwiWxwIBYAPAAEyiAi6AjzXAEl4MAAapOWCPQI9Ij3AAAIHJAAAAAQOPT49wAAABAAAEQ2ADwABN7wFbAAAAAF0DwABNRgFfAwAAAUqPVQEej1rAAE1RAQJgA8AATKJfAwAAAS4ABqlsYI90j32P5gIAgcIAAAABA4+Cj+YAAAABAQGPhwAAICJgA8AATKIAAFwBPgJJj5Qcj6QWj50ugcjAAE12gIwBAAGTAMAATcY9MI+qH4+0wABL9AIAApMuAD89HI/XLoEMAgACk4CP3cASXrgAwABNVgapbWCP64/0kGoCAIHVAAAAAQOP+JBqAAAAAQEBj/0AACAiYAPAAEyiAABcAT4CSZAKHJAaFpATLoHIwABNdoCMAQABkwDAAE3GPTCQIB+QKsAAS/QCAAKTLgA/PRyQTS6BDAIAAhyQWhaQUy6ByMAATXaBBgEAAZQAwABNyYCQYcASXysAwABNVgapOmCQb5BzkSwAAIRxAAAAAQOQfZEsAAAAAgECkIMAAACBG2EDAWADwABMomADwABK2ACQmwAAAG1gA8AATKIBapCjYAPAAEyiGgBgA8AATKIBPgNJkK0ckLeBkLHAEl/MgLsBAAGTAMAATdA9iZC8wBJfzJM/RZDLAZDUkNYAAINmYAPAAEyiAYGQ2MASX8wBHJDhgpDfwBJgE4C7AQABFpDjLoHIwABNdgDAAE3QAYqQ68ASYBMckOyCkOvAEmATgQ0BAAGUAMAATcg+AUmQ+ByRAICQ/MASX7VuAQABHJEFLoLRAQABgpEGwBJgEwDAAE1VAABKkQsBgpESwBJgEz9KkR8BHJEmlIPrAAAAAMAATMUGqTtgkTGRNZIUAACEcwAAAAEDkUOSFAAAAAIBApFJAAAAgRthAwFgA8AATKJgA8AAStgAkWEAAABtYAPAAEyiAWoAYAHAAE2sAgBgA8AATKIBPgNJkW8iHJF5gZFzwBJg4YCMAQABKwDAAE3GARyRioGRhMASYOGBXgEAARaRki6ByMAATXYAwABN0z2JkZrAEmDhHJGuFpGnLoHIwABNdoEGAQABlADAAE3JP0WRtwGRwJHCAACDZmADwABMogGBkcTAEmDhARyRzYKRy8ASYV6BXgEAAZMAwABN0wGKkdPAEmFeHJHUgpHTwBJhXoEGAQABlADAAE3JPgFJkeAckeiAkeTAEmDKbgEAARyR7S6C0QEAAYKR7sASYV4AwABNVQAASpHzAYKR+sASYV4/SpIHARySDpSD6wAAAADAAEzFBqk8YJIZkiyS/wMAgQ0AAAABA5Itkv8AAAABAQGSOAAAIIIdXQPAAE1GAWADwABMogAAXQPAAE1GAWADwABMogE+Ak6SSZJVAACOHmADwABMogEckmMWklwugcjAAE12gQ0BAAEWkmuAkmXAEmIMgcjAAE12AMAATchKkncBNZKDAAABAF0DwABNRgFgA8AATKIBMZKDYAPAAEyiADWSjgAAAQBcAReSjoKSg8ASYm6ByIGSl8ASYjPAAE10NZKrAAABAFwBHJKrgpKDwBJiboRYAwADkxaSvC6ByMAATXYuAMAATWs1ktIAAAEAXAEcktKCkoPAEmJuhFgDAAMWkuAugcjAAE12gZLowBJiM4CS9cASYgwAwABNa4KSg8ASYm4GqT1gkwSTCZOoAACBxAAAAAEDkxGTqAAAAAEBAZMZAAAAgbxgA8AATe8AAGADwABK2AE+A06TLJMwAACOH2ADwABMogEWkzcugcjAAE12RZNDAZNMk04AAINmYAPAAEyiAZMBHJNVgpNTwBJjZIC7AQABgZNXwBJjRwDAAE3QAYqTXsASY2Qck1yCk17AEmNkgQ0BAAGUAMAATcg+AUmTaRyTdRyTcS6C0QEAAYKTcsASY2QAwABNVYCMAQABgJN4wBJjLgDAAE3GSpOBASk/SpOYASoGqT5gk62TspSbAACEXAAAAAEDk7mUmwAAAAEAAZPCAAAAhF1gA5lBAWoAYAHAAE2sAgBcAT4DPSMck9iAk9HAEmQDgIwBAAErAMAATfyIk9HAEmQDHpPgmUMAAAAAKwFgA5lBTpPyk/QAAINmYAPAAEyiARaT+y6ByMAATXZDlAcclBCBlA7AEmRLgowBAAGUAMAATdI+BU6UIZQlAACBC2ADwABMogEclC6AlCfAEmQDhF4BAAGBlDbAEmRLAJlGPYmUQMASZEsclEKBlEDAEmRLgQYBAAGUAMAATclOlFKUVgAAhF9gA8AATKIBHJRcLoLRAQABgZRdwBJkSwDAAE1VPRyUay6BDAIAAoGUbMASZEsclHUugtEBAAGClHbAEmR/AMAATVUAwABNVj0clIYugQwCAAKClIfAEmR/g5SOwBJkxQDAAE1WBqk/YJSglK6U6wAAgaoAAAABA5SzlOsAAAABAQGUuQAAAFBhAwFgA8AATKJgA8AAStgAAF0DwABNBAFgA8AATKIBSpTMAR+U0JYRAgFgA8AATKICLoCU6cASZU4ABqlAYJTwlP6VMQAAgc8AAAABA5UClTEAAAABAQGVBwAAAIQTYAPAAEyiAABdA8AATQQBYAPAAEyiAUqVDQEflRGVzAMBYAPAAEyiAy6TgJUvwBJlqwAGqUFglTaVRJWVAACB0AAAAAEDlU2VlQAAAAEBAZVTAAAAgRthAwFgA8AATKJgA8AAStgAAF0DwABNBAFgA8AATKIBSpVvAR+Vc5ZXAgFgA8AATKICLoCVkMASZgEABqlCYJWalaiV3gAAgdEAAAABA5Wsld4AAAABAQGVsQAAAIQTYAPAAEyiAABdA8AATQQBYAPAAEyiAUqVtwEflbuVzAMBYAPAAEyiAy6AldbAEmZfKwAGqUNgleOV8ZZCAACB0gAAAAEDlfqWQgAAAAEBAZYAAAAAgRthAwFgA8AATKJgA8AAStgAAF0DwABNBAFgA8AATKIBSpYcAR+WIJaPAgFgA8AATKICLoCWPcASZrUABqlmYJZHllmWiAEAhHkAAAABA5ZilogAAAAAAAAAXQPAAE0EAWADwABMogFKlmUBH5Zpl30BAWADwABMogEuAAapRGCWjZablsAAAIRgAAAAAQOWoJbAAAAAAAAAAF0DwABNeAJgA8AATKJgA8AATKIBSpamAR+WqpdzAQFgA8AATKIBLgAGqUVglsWW05dmAACEYwAAAAEDltuXZgAAAAIBApbgAAAAbWADwABMogCW7AAAAIRUYAPAAEyiAWoAYAHAAE2sAgBdA8AATQQBYAPAAEyiAT4CPR6XA8AAS98DAAOAlxPAEmeZgZcawBJnphaXJC6ByMAATXYASpcxAR+XPJXMAwFgA8AATKIDLoCXV8ASZ5mBl17AEmemAAapZ2CXa5d9l6oBAIEIAAAAAQOXhpeqAAAAAAAAAF0DwABNPwFgA8AATKIBSpeJAR+XjadNAQFgA8AATKIBLgAGqUZgl6+XuZgUAACBygAAAAEDl7+YFAAAAAEAAAGXxgAAAIQPYAPAAErYAWqX0GADwABK2IP7XQPAAE1GAWADwABMogE+AUqX3QEel+jAAE1MAgFgA8AATKIBLgGED4CYB8ASaHIGqUdgmBmYIphSAACBywAAAAEDmCeYUgAAAAAAAABdA8AATjoBYAPAAEyiAT4BSpgwAR6YO4liAQFgA8AATKIBLgAGqUhgmFeYXJjUAACBEgAAAAEDmGOY1AAAAAEBAZhpAAAAUGEDAWADwABMolwAAFwBPgJOmIOYhwAAjh9gA8AATKIBFpiOLoHIwABNdkWYmgGYo5ilAACDZmADwABMogGTARyYrIKYqsASaU2AuwEAAYGYrsASaTAAwABN0AGKmLPAEmlNHJi0gpizwBJpTYENAQABlADAAE3IPgE9HJjBgJjAwBJpGW4BAAEcmMYugtEBAAGCmMfAEmlNAMAATVUAAAapSWCY2Zjdmd4AAIG5AAAAAQOY45neAAAAAQEBmOgAACCBumEDAmADwABMomADwABMomADwABMogAAYAPAAEyiAT4FTpkTmRcAAI4fYAPAAEyiARaZHi6ByMAATXZJmSocmTKBmS7AEmoDgIwBAAGTAMAATcY9MJk4HplTlvwAAAAAP06ZaJluAAAiYAPAAEyiARyZdC6C0QEAAZMAwABNVUWZfQGZhpmIAACDZmADwABMogGUARyZj4OZjcASamSAuwEAAYGZkcASagMAwABN0AGLmZjAEmpkHJmWg5mYwBJqZIENAQABlADAAE3IPgE9ipmjwBJqQxyZsoCZq8ASadtuAgACgpmzwBJqQxyZvi6C0QEAAYOZv8ASamQAwABNVQAASpnOAYKZ1cASakMGqUpgmeOZ5Zq8AACBvQAAAAEDmeyavAAAAQAABCFgA8AATe8BWwICApnvAAAAgb5fAwAAAJn/AAAAgbphAwJfAwAAYAPAAEyiXwMAAAAAXwMAAAE+A06aL5ozAACOH2ADwABMogEWmjougcjAAE12RZpGAZpPmlEAAINmYAPAAEyiAZMBHJpYg5pWwBJrYoC7AQABgppawBJrRQDAAE3QAYuaYcASa2Icml+DmmHAEmtigQ0BAAGUAMAATcg+AT2ImmzAEmsXHJqCgZp7wBJrI24CAAKAmoPAEmsXHJqVLoLRAQABg5qWwBJrYgDAAE1VAABKmqUBgJqswBJrFwapS2CawZrNmwwAAIGrAAAAAQOa05sMAAABAAAEIWADwABN7wFbAQEBmtYAAABQYQMBYAPAAEyiXwMAAAAAXQPAAE0EAV8DAAABSprpAR6a7ZXgAgJgA8AATKJfAwAAAi6AmwrAEmwVAAapTGCbEZsdm28AAIGzAAAAAQObJptvAAABAAAEIWADwABN7wFbAQEBmzMAAABQYQMBYAPAAEyiXQPAAE0EAV8DAAAAAF0DwABNBAFfAwAAAUqbTAEfm1CWJQICYAPAAEyiXwMAAAIugJttwBJsfgAGqU1gm3SbeZwTAACBxwAAAAEDm36cEwAAAAEBAZuEAAAAUGEDAWADwABMomADwABK2AAAYAPAAErYAT4DTpuem6IAAI4fYAPAAEyiARabqS6ByMAATXZFm7UBm76bwAAAg2ZgA8AATKIBkwEcm8eCm8XAEm0ggLsBAAGBm8nAEm0DAMAATdABipvQwBJtIBybzoKb0MASbSCBDQEAAZQAwABNyD4BSZvbIRyb4YCb4MASbOJuAQABHJvmLoLRAQABgpvnwBJtIADAAE1VAABKm+wBKj9KnAQBKQapTmCcGJwdnLQAAIEOAAAAAQOcIJy0AAAAAQEBnCYAAABQYQMBYAPAAEyiYAPAAErYAABgA8AAStgBPgNOnECcRAAAjh9gA8AATKIBFpxLLoHIwABNdkWcVwGcYJxiAACDZmADwABMogGTARycaYKcZ8ASbfqAuwEAAYGca8ASbd0AwABN0AGKnHLAEm36HJxwgpxywBJt+oENAQABlADAAE3IPgFJnH0cnIKAnIHAEm28bgEAARychy6C0QEAAYKciMASbfoAwABNVQAASpyNASk/SpykASoGqU9gnLmcvZ3UAACB2AAAAAEDnMed1AAAAAIBAZzNAAAAgRthAwFgA8AATKJgA8AAStgAAZzlAAAggdlhAwBgA8AATKIBagBgAcAATawCYAPAAEyiAT4ETpz6nP4AAI4fYAPAAEyiARadBS6ByMAATXZFnREBnRqdHAAAg2ZgA8AATKIBkwEcnSODnSHAEm7ugLsBAAGCnSXAEm7RAMAATdABi50swBJu7hydKoOdLMASbu6BDQEAAZQAwABNyD4CTp07nUMAAIG8YAPAAEyiARydSS6C0QEAAYOdSsASbu4AwABNVUmdVBydXICdWMASbpVuAQABhJ1dwBJvOgAASp1nAYSdbsASbzo/SZ2BIRydjIGdhcASbq2AjAEAASsAwABN/EqdlQEcnaKBnZzAEm6tbgAAAAAAPz0wnaoencWW/AAAAAAGqVBgndmd3Z8KAACB2gAAAAEDneafCgAAAAIBAZ3sAAAAgRthAwFgA8AATKJgA8AAStgAAZ4EAAAggdlhAwBgA8AATKIBagBgAcAATawCYAPAAEyiAT4ETp4Znh0AAI4fYAPAAEyiARaeJC6ByMAATXZFnjABnjmeOwAAg2ZgA8AATKIBHJ5Bgp49wBJwGIEGAQABlADAAE3JARyeSIOeRsAScDWBXgEAAZMAwABN0wGLnlDAEnA1HJ5Og55QwBJwNYEGAQABlADAAE3JPgJOnl+eZwAAgbxgA8AATKIBHJ5tLoLRAQABg55uwBJwNQDAAE1VSZ54HJ6AgJ58wBJv3G4BAAGEnoHAEnCPAAA+AUqelQGEnpzAEnCPP0metyEcnsKBnrvAEm/0gIwBAAErAMAATfxKnssBHJ7YgZ7SwBJv9G4AAAAAAD89MJ7gHp77lvwAAAAABqlRYJ8PnxOhEQAAgdsAAAABA58eoREAAAACAQGfJAAAAIEbYQMBYAPAAEyiYAPAAErYAAGfPAAAIIHZYQMAYAPAAEyiAWoAYAHAAE2sAmADwABMogE+B06fUZ9YAACA5lsBK06faZ93AACEFGADwABK2AEqTp+In4wAAI4fYAPAAEyiARafky6ByMAATXZFn58Bn6ifqgAAg2ZgA8AATKIBkwEcn7GFn6/AEnGpgLsBAAGEn7PAEnGMAMAATdABjZ+6wBJxqRyfuIWfusAScamBDQEAAZQAwABNyD4CTp/Jn9EAAIG8YAPAAEyiARyf1y6C0QEAAYWf2MAScakAwABNVUmf4hyf6oCf5sAScTNuAQABhp/rwBJx9QAAPgNJn/+DoAPAEnF7PgE9MKAeHqA5lv0AAAAAPz2KoFbAEnFvhqBfwBJx9T2LoHDAEnF7KT9JoJiDoJzAEnF7SqCrASagqwWCoLLAEnFvYAPAAEyiP0mgviEcoMmBoMLAEnFLgIwBAAErAMAATfxKoNIBHKDfgaDZwBJxS24AAAAAAD89MKDnHqEClvwAAAAABqlSYKEWoRqhSwAAgdwAAAABA6EjoUsAAAABAQGhKAAAAIHdYAPAAEyiAABgA8AATKIBPgFKoTUBHKFALoLRAQABgKFBwBJy4ADAAE1VBqlTYKFQoVWhrQAAgIIAAAABA6FYoa0AAAABAQGhXQAAICJgA8AATKIAAFwBPgE9MKFqH6F0wABMMAEAASeKxQAGqVRgobKht6IcAACDawAAAAEDob2iHAAAAAEBAaHMAAAgIl0DwABNBAFgA8AATKIAAFwBPgE9MKHZH6HjwABMMAEAASeKxQAGqVVgoiGiJqKRAACEdAAAAAEDoiyikQAAAAICAqIxAAAAgd1gA8AATKIAojwAACAiYAPAAEyiAABcAT4BPTCiSR+iU8AATDABAAEnjiAABqlWYKKWopujFAAAhHYAAAABA6KkoxQAAAACAgKiqQAAAIHdYAPAAEyiAKK+AAAggQFdA8AATQQBYAPAAEyiAABcAT4BPTCizB+i1sAATDABAAEnjiAABqlXYKMZox6jeAAAhFkAAAABA6Mio3gAAAABAAGjKAAAAIRaYQMCYAPAAEyiYAPAAEyiYAPAAEyiAWoAYAHAAE2sAgBcAT4BPR6jS5eSAgFgA8AATKICLjWjVgAAAQBhAwJgA8AATKJgA8AATKJgA8AATKIBgKNWwBJ0XSMco1aBo1bAEnSZgIwBAAErAMAATfxqo2xhAwJdA8AASuQBW10DwABK5AFbYAPAAEyihCWBo1bAEnSZAWEDAmADwABMomADwABMomADwABMogAGqVhgo32jgaR8AACEcAAAAAEDo4ikfAAAAAIBAqONAAAggbxgA8AATKIAo5sAAABtYAPAAEyiAWqjo2ADwABMohoAYAPAAEyiAT4DSaOtHKO3gaOxwBJ1OYFeAQABFqO/LoHIwABNdgDAAE3TPgFKo88BHKPWlIPrAAAAAMAATMVJo+Uco++Bo+nAEnU5gLsBAAGTAMAATdA+AT2Jo/zAEnU5kz9FpBEBpBqkHAAAg2ZgA8AATKIBgaQewBJ1OQEcpCeCpCXAEnW3gLsBAAEWpC4ugcjAAE12AMAATdABiqQ2wBJ1txykN4KkNsASdbeBDQEAAZQAwABNyD4BSaRDHKRPHKRLLoLRAQABgqRMwBJ1twDAAE1VgIwBAAGApFLAEnUrAMAATcZKpFsBgqRiwBJ1tz9KpG8BHKR2lIPrAAAAAMAATMUGqVlgpIGkhaWdAACEcgAAAAEDpJClnQAAAAIBAqSVAAAggbxgA8AATKIApKMAAABtYAPAAEyiAWqkq2ABwABNrAIAYAPAAEyiAT4DSaS4IhykwoGkvMASdoCAjAEAASsAwABNxgEcpNOBpM3AEnaAgV4BAAEWpNsugcjAAE12AMAATdM+AT2JpOvAEnaAHKT/FqT4LoHIwABNdoEGAQABlADAAE3JSaUPHKUZgaUTwBJ2gIC7AQABkwDAAE3QPgFKpSYBHKUtlIPrAAAAAMAATMU/RaU7AaVEpUYAAINmYAPAAEyiAYGlSMASdoABHKVRgqVPwBJ3LIFeAQABkwDAAE3TAYqlV8ASdywcpViCpVfAEncsgQYBAAGUAMAATck+AUmlZBylcBylbC6C0QEAAYKlbcASdywAwABNVYCMAQABgKVzwBJ2cgDAAE3GSqV8AYKlg8ASdyw/SqWQARyll5SD6wAAAADAAEzFBqlaYKWipaamAQAAhC8AAAABA6WwpgEAAAAAAAAAYAPAAEyiAT4BPTCluR+lw8AATDABAAEniscABqlbYKYGpgqmbAAAhHUAAAABA6YSpmwAAAABAQGmFwAAAIHdYAPAAEyiAABgA8AATKIBPgE9MKYkH6YuwABMMAEAASeKxwAGqVxgpnGmdqboAACDlQAAAAEDpoGm6AAAAAEBAaaHAAAAgRthAwFgA8AATKJgA8AAStgAAFwBPgE9MKagH6aqwABMMAEAASeKxwAGqV1gpu2m8qdkAACDlgAAAAEDpv2nZAAAAAEBAacDAAAAgRthAwFgA8AATKJgA8AAStgAAFwBPgE9MKccH6cmwABMMAEAASeKxwAGqWhgp2mncafLAQCBwgAAAAEDp3enywAAAAAAAABgA8AATKIBPgJJp30cp4gWp4EugcjAAE12gowBAAGTAMAATdJKp40BHKeYLoLRAQABkwDAAE1VPz0wp6Eep7yW/AAAAAAGqWlgp9Cn2Kg6AQCB1QAAAAEDp92oOgAAAAAAAABgA8AATKIBPgJJp+Mcp+4Wp+cugcjAAE12gowBAAGTAMAATdJKp/MBHKf+LoLRAQABHKgGFqf/LoHIwABNdoEGAQABlADAAE3JAMAATVU/PTCoEB6oK5b8AAAAAAapamCoP6hHqN4BAIHXAAAAAQOoTqjeAAAAAAAAAGADwABMogE+A0moVByoXxaoWC6ByMAATXaAjAEAAZQAwABNxkqoZQEcqHAugtEBAAGTAMAATVU/Sah5HKiEFqh9LoHIwABNdoCMAQABkwDAAE3GPTCoih6opZb8AAAAAD89MKi2HqjRlv0AAAAABqleYKjjqOipYwAAhHgAAAABA6juqWMAAAACAgKo8wAAAIHdYAPAAEyiAKkIAAAghCJdA8AATQQBYAPAAEyiAABcAT4CTqkeqSIAAYRUYAPAAEyiARypNBapLYGpJMASemuByMAATSeBDQEAAYCpNsASel0AwABNyD0cqUEuhFgDAAOAqUrAEnpdgqlRwBJ6hoGpVsASemsAwABNawapX2CpaKltqiIAAIRlAAAAAQOpdqoiAAAAAwIDqXsAAABtYAPAAEyiAKmGAAAAhFRgA8AATKIAqZAAACCKfmADwABMogFqAGABwABNrAIAXAE+Aj0eqa3AAEvfAwADgKm9wBJ6+oGpxMASewcWqc4ugcjAAE12AEWp2wGp5KnmAACDZmADwABMogGAqejAEnr6ARyp8YOp78ASe1mAuwEAAYGp88ASewcAwABN0AGLqfrAEntZHKn4g6n6wBJ7WYENAQABlADAAE3IPgE9HKoJLoEMAgACg6oKwBJ7WYKqD8ASexUAwABNVgAAElzQABJdOgASXV8AEl2EABJdpwASXe8AEl5LABJemwASXw4AEl+YABJgrQASYe8AEmMRABJj5gASZTEAEmWOABJl5AASZkIAEmaYABJm9gASZzYAEmd8ABJoFAASaFQAEmi6ABJo/AASab4AEmruABJr7AASbFUAEmzFABJtnwASbngAEm+/ABJxFgAScsMAEnMRABJzUgASc5oAEnPpABJ0QAASdQ4AEnZVABJ3wQASd/oAEnhBABJ4jAASeNcAEnk6ABJ5tAASekAAEnrdABJ7xwAAADQCqW5gwAHTccAB05HAAdgTN49vAAABYAOpNAABXQOc6QFgA6xKAAEFqXYAAAAABAAAAwAAAAAAAAAAAGADqW4BPwEJAACpYQAAAAAEBqlwYMAB05HAAdORAAAQhGoAnKqcqgEDAAAAAAADAwMAAAAAbWADwABMogAAAAAAhFRgA8AATKIAAAAAIIQiXQPAAE0EAVsAAFwBSgABHQCEagMAA4AAwBJ9DIEAwBJ9GIIAwBJ9JQCcqgapcmCqjaqZqrAAAo4jnIYAAAABA6qkqrAAAAABAQGqqQAAAIHIYAPAAEyiAABgA6xKAAapc2Cqtaq6s38AAIRYAAAAAQOqwrN/AAAABAMEqscAAABtYAPAAEyiAKrSAAAAhFRgA8AATKIAquUAACCCwF0DwABNBAFgA8AATKIAqvAAAACEZ2ADwABMogFqqvxgA8AATKIaAFwBPgtJqxsiIhyrIZOCjAEAAYCrI8ASfaYAwABN0gEcqzKAqyzAEn2mgowBAAGBqzTAEn2zAMAATdIBHKs/gas7wBJ9s4KMAQABFqtBLoHIwABNdgDAAE3SPgI9HqtcwABL3wMAA4CrbMASfaaBq3PAEn2zFqt4LoHIwABNdgBAKqugq6UAP0mrshyrwIOrtsASfdaAuwEAAZMAwABN0D4BPTCrzR+r3sAAS+gEAASDq+TAEn3WkysnhGcAP06sF6wdAAGBm2ADwABMogEcrCOBrB/AEn2zgQYBAAGArCXAEn2mAMAATclJrDAcrE4crEEWrDqCrDXAEn3BgcjAAE0ngQYBAAGDrEPAEn3WAMAATcmAuwEAAYSsUMASfq0AwABN0D4BPTCsXx6sepb+AAAAAD9JrI8crJmErJPAEn6tgIwBAAGTAMAATcZKrJ8AP0msrCWstQCCrLDAEn3BYAOcnT4CTq08rUwAAY4kYAOcnQEmrVMAgq1OwBJ9wWADnJ1JrWwcrYgWrXUujhSctICMAQABFq2bha2LwBJ/VI4UnKAAwABNxj4BSa25IhytxIStvsASfq2AuwEAATcKAMAATdAAIRyt5Rat3oWtzsASf1SBwZyigIwBAAEWre0ugcGctgCd7j4CPR6uCJPqBQAFJq4SAIKuDcASfcFdA8AATUYBYAPAAEyig64gwBJ91i6ArjHAEn2mhK44wBJ+rQBKrkoASa5hHK53Fq5xFq5qLoHBnLaDpJyGneaOFpyGBgAGHK6pHK6UgK6OwBJ9poPGAQABFq6WLo4UnLQAwABNyoENAQABFq6wLoadnLUAwABNyByu0YSuy8ASfq2DxgEAARau0y6OFJy0AMAATcoWrwoWrwOFrvPAEn9UgcGcooOknIad5hyvPByvJ4OvHcASfdaDxgEAARavKS6OFJy0AMAATcqBDQEAARavToWvPsASf1SGnZyhAMAATcger3GT9wEAAS4AHq+Sk/cBAAGCr5jAEn3BAACcrT4BSq+sAD9Jr8scr+YWr9+Fr8/AEn9UgcGcooCMAQABFq/uLoHBnLYAne4+BU6wxLDPAAGOJV0DwABNRgFgA8AATKIBJrDWAIKw0cASfcFdA8AATUYBYAPAAEyiTrDysP0AAY4mYAOsSgEcsP8ujiOchgEAAYSxC8ASfq0AnOxFsRsBsSSxJgAAg2ZgA8AATKIBkwEcsS0UsSvAEoFsCACAuwEAAYSxL8ASfq0AwABN0AEVsTbAEoFsCByxNxSxNsASgWwIAIENAQABlADAAE3IPgE9HLFRh7FHwBKBRoEMAgACFLFSwBKBbAgAHLFhhrFXwBKBF4LRAQABHLFsg7FiwBJ91oENAQABFLFuwBKBbAgAAMAATcgAwABNVQDAAE1WRbGEAbGNsY8AAINmYAPAAEyiAYCxkcASfaYBHLGaFLGYwBKCDwgAgLsBAAGBsZzAEn2zAMAATdABFbGhwBKCDwgcsaIUsaHAEoIPCACBDQEAAZQAwABNyD4BPRyxti6BDAIAAhSxt8ASgg8IAByxxoexvMASgUaC0QEAARyxyRSxx8ASgg8IAIEGAQABgLHLwBJ9pgDAAE3JAMAATVUAwABNVkqx5QA/P06yBQAAAIRoXQPAAE1GAVsATrIYAAAAhGlgA8AATKIASbIoJbIxAIKyLMASfcFdA8AATUYBYAPAAEyiPgI9jbJHwBKCtRSyU8ASfcECAV0DwABNRgFgA8AATKI9jrJfwBKCxoOybMASfdY+Aj2NsorAEoK1HLKrHLKbgrKWwBJ9wYHRAQABg7KgwBJ91gDAAE0egcoBAAABhA8qwABNGj2OssrAEoLGk0my5Byy+xyy84ay6MASgsaBDQEAAYSy9cASfq0AwABNyIKMAQABFrMHhbL9wBKCtYHIwABNdgDAAE3SPgE9MLMXHrMylv4AAAAAPz0es0yT6gUABYWzUcASgrWGs1zAEoLGLoCzbsASfaaEs3XAEn6tAAapdGCzhLOQtH0AAIRhAAAAAQOzl7R9AAAAAgECs5wAAABtYAPAAEyiALOoAAAAhFRgA8AATKIBagBgAcAATawCAGADrEoBPgU9ibO0wBKD+B6zxcAAS98DAAOAs9XAEoPrgbPcwBKD+Baz5i6ByMAATXYATrP3s/4AAIHIYAPAAEyiARy0BIG0AMASg/iBBgEAAYC0BsASg+sAwABNyU60HbQkAACA5mADrEoBHLQmLo4jnIYBAAGCtDLAEoRDAJzsPRy0RoO0P8AShG6EWAQABJOCtFLAEoRDLoC0YMASg+sAwABNa0q0bAGDtHPAEoRuAAASfOwAEn1WABJ9iQASg84AEoTAAAAABAKpd2DAAdNxwAHTkcAB2BMDj3ABasAB03JgA8AASp8DAAFgA6luAAFgA6xKAAAGBql6YMAB1FTAAdRcwAHU0QQFgIqchgJqwAHUIWADwABKn5rRagBgA5QImucAAAEDwAHUbsAB1NEAAAADAwPAAdR6AAAAgcFgA54AAMAB1IYAAACGnWADwABMogDAAdSZAAAAgchgA8AATKIAAGADqXcABql8YMAB1QLAAdUtwAHWBgMAgtEBasAB1QNgA8AASp+CugAAAQPAAdUvwAHWBgAAAAEBAcAB1TQAAACB3WADwABMogAAYAPAAEyiAT4CScAB1UEiHMAB1UuAwAHVRcASha6AuwEAAZMAwABN0AEcwAHVWIDAAdVSwBKFroFeAQABFsAB1VsugcinVQDAAE3TPgE9MMAB1WsfwAHVdcAAS/QDAAOAwAHVhsASha4uJ4HdAD9KwAHVpwEcwAHVwhbAAdWuLo9RnIanU45UnIYBAAEcwAHV2xbAAdXNLoadnLWBDQEAARzAAdXkgMAB1d7AEoWug8YBAAFqwAHV8WADwABMohgAwABNygDAAE3IAJ4TBql9YMAB1gvAAdY3wAHXJwMAgQwBasAB1gxgA8AASp+CugAAAQPAAdY6wAHXJwAAAAICAsAB1j8AAACB3WADwABMogDAAdZKAAAgImADwABMogAAXAE+AknAAdZXIhzAAdZhgMAB1lvAEoa/gLsBAAGTAMAATdABHMAB1m6AwAHWaMAShr+BXgEAARbAAdZxLoHIp1UAwABN0z4BPTDAAdaBH8AB1ovAAEv0AwADgMAB1pzAEoa/LieB3QA/PRzAAdbIFsAB1r0uj1GchqdTjlachgIAAhzAAdbqFsAB1twuhp2ctYENAQABHMAB1vOAwAHW7cAShr+DxgEAAWrAAdcAYAPAAEyiGADAAE3KAMAATcgewAHXEpyZAQABgcAB1xzAEobPAACeFAapgmDAAdddwAHXZcAB16MBAI4UAAAAAQPAAdd4wAHXowAAAAAAAABgA8AATKIBPgFKwAHXfgFqwAHXkGADwABMohgGqX9gwAHXx8AB19LAAdgRAACOI5yGAAAAAQPAAdfdwAHYEQAAAAEBAcAB1+IAAACByGADwABMogAAYAOsSgE+AUrAAdfwAR7AAdf7rE4BAAGAwAHYBsASiCEABqmAYMAB05HAAdORAAAQhGoAnKqcqgEDAAAAAAADAwMAAAAAbWADwABMogAAAAAAhFRgA8AATKIAAAAAIIQiXQPAAE0EAVsAAFwBSgABHQCEagMAA4AAwBKIc4EAwBKIf4IAwBKIjACcqgAAEoUIABKFegAShosAEoe1ABKH+AASiFMAEoi9AAAABgKpg2DAAdgWwAHYNsAB3KA3j3IAAAFgA6dOAAFgA5yyAAEFqbAAAAAABAAAAwAAAAAAAAAAAGADqYMBPwEJAACnVwAAAAA0BqmFYMAB2DbAAdg2AAAQhGoAnKqcqgEDAAAAAAADAwMAAAAAbWADwABMogAAAAAAhFRgA8AATKIAAAAAIIQiXQPAAE0EAVsAAFwBSgABHQCEagMAA4AAwBKJRYEAwBKJUYIAwBKJXgCcqgapsmCOOo5CjlQBAo4UAAAAAQOOVI5UAAAAAAAAAGADwABMogAGqbNgjliOYI5tAQKGnQAAAAEDjm2ObQAAAAAAAABgA8AATKIABqm0YI5xjoGOhwECgcEAAAABA46HjocAAAAAAAAAYAOd4wAGqYZgjoyOmI7IAACECQAAAAEDjqSOyAAAAQAABCFgA8AATe8BWwAAAABdA8AATQQBXwMAAAFKjqoBH46ulu8BAV8DAAABLgAGqYdgjs2O2487AACECAAAAAEDjuWPOwAAAAEBAY70AAAggh1dA8AATQQBYAPAAEyiAABdA8AATQQBYAPAAEyiAUqPBAEejwiWxwIBYAPAAEyiAi6AjzXAEophAAapiGCPQI9Ij3AAAIHJAAAAAQOPT49wAAABAAAEQ2ADwABN7wFbAAAAAF0DwABNRgFfAwAAAUqPVQEej1rAAE1RAQJgA8AATKJfAwAAAS4ABqm7YI90j32P5gIAgcIAAAABA4+Cj+YAAAABAQGPhwAAICJgA8AATKIAAFwBPgJJj5Qcj6QWj50ugcjAAE12gIwBAAGTAMAATcY9MI+qH4+0wABL9AIAApMuAD89HI/XLoEMAgACk4CP3cASiw0AwABNVgapvGCP64/0kGoCAIHVAAAAAQOP+JBqAAAAAQEBj/0AACAiYAPAAEyiAABcAT4CSZAKHJAaFpATLoHIwABNdoCMAQABkwDAAE3GPTCQIB+QKsAAS/QCAAKTLgA/PRyQTS6BDAIAAhyQWhaQUy6ByMAATXaBBgEAAZQAwABNyYCQYcASi4AAwABNVgapiWCQb5BzkSwAAIRxAAAAAQOQfZEsAAAAAgECkIMAAACBG2EDAWADwABMomADwABK2ACQmwAAAG1gA8AATKIBapCjYAPAAEyiGgBgA8AATKIBPgNJkK0ckLeBkLHAEowhgLsBAAGTAMAATdA9iZC8wBKMIZM/RZDLAZDUkNYAAINmYAPAAEyiAYGQ2MASjCEBHJDhgpDfwBKMaIC7AQABFpDjLoHIwABNdgDAAE3QAYqQ68ASjGgckOyCkOvAEoxogQ0BAAGUAMAATcg+AUmQ+ByRAICQ/MASjApuAQABHJEFLoLRAQABgpEGwBKMaADAAE1VAABKkQsBgpESwBKMaD9KkR8BHJEmlIPrAAAAAMAATMUGqYpgkTGRNZIUAACEcwAAAAEDkUOSFAAAAAIBApFJAAAAgRthAwFgA8AATKJgA8AAStgAkWEAAABtYAPAAEyiAWoAYAHAAE2sAgBgA8AATKIBPgNJkW8iHJF5gZFzwBKNNoCMAQABKwDAAE3GARyRioGRhMASjTaBXgEAARaRki6ByMAATXYAwABN0z2JkZrAEo02HJGuFpGnLoHIwABNdoEGAQABlADAAE3JP0WRtwGRwJHCAACDZmADwABMogGBkcTAEo02ARyRzYKRy8ASjbOBXgEAAZMAwABN0wGKkdPAEo2zHJHUgpHTwBKNs4EGAQABlADAAE3JPgFJkeAckeiAkeTAEo0fbgEAARyR7S6C0QEAAYKR7sASjbMAwABNVQAASpHzAYKR+sASjbM/SpIHARySDpSD6wAAAADAAEzFBqmLYJIZkiyS/wMAgQ0AAAABA5Itkv8AAAABAQGSOAAAIIIdXQPAAE1GAWADwABMogAAXQPAAE1GAWADwABMogE+Ak6SSZJVAACOHmADwABMogEckmMWklwugcjAAE12gQ0BAAEWkmuAkmXAEo5hgcjAAE12AMAATchKkncBNZKDAAABAF0DwABNRgFgA8AATKIBMZKDYAPAAEyiADWSjgAAAQBcAReSjoKSg8ASjsOByIGSl8ASjojAAE10NZKrAAABAFwBHJKrgpKDwBKOw4RYAwADkxaSvC6ByMAATXYuAMAATWs1ktIAAAEAXAEcktKCkoPAEo7DhFgDAAMWkuAugcjAAE12gZLowBKOiICS9cASjmEAwABNa4KSg8ASjsMGqYxgkwSTCZOoAACBxAAAAAEDkxGTqAAAAAEBAZMZAAAAgbxgA8AATe8AAGADwABK2AE+A06TLJMwAACOH2ADwABMogEWkzcugcjAAE12RZNDAZNMk04AAINmYAPAAEyiAZMBHJNVgpNTwBKPuYC7AQABgZNXwBKPnADAAE3QAYqTXsASj7kck1yCk17AEo+5gQ0BAAGUAMAATcg+AUmTaRyTdRyTcS6C0QEAAYKTcsASj7kAwABNVYCMAQABgJN4wBKPgwDAAE3GSpOBASk/SpOYASoGqY1gk62TspSbAACEXAAAAAEDk7mUmwAAAAEAAZPCAAAAhF1gA5lBAWoAYAHAAE2sAgBcAT4DPSMck9iAk9HAEpBYgIwBAAErAMAATfyIk9HAEpBYHpPgmUMAAAAAKwFgA5lBTpPyk/QAAINmYAPAAEyiARaT+y6ByMAATXZDlAcclBCBlA7AEpCggowBAAGUAMAATdI+BU6UIZQlAACBC2ADwABMogEclC6AlCfAEpBYhF4BAAGBlDbAEpCgAJlGPYmUQMASkKAclEKBlEDAEpCggQYBAAGUAMAATclOlFKUVgAAhF9gA8AATKIBHJRcLoLRAQABgZRdwBKQoADAAE1VPRyUay6BDAIAAoGUbMASkKAclHUugtEBAAGClHbAEpDUAMAATVUAwABNVj0clIYugQwCAAKClIfAEpDUg5SOwBKRGgDAAE1WBqmOYJSglK6U6wAAgaoAAAABA5SzlOsAAAABAQGUuQAAAFBhAwFgA8AATKJgA8AAStgAAF0DwABNBAFgA8AATKIBSpTMAR+U0JYRAgFgA8AATKICLoCU6cASkaMABqmPYJTwlP6VMQAAgc8AAAABA5UClTEAAAABAQGVBwAAAIQTYAPAAEyiAABdA8AATQQBYAPAAEyiAUqVDQEflRGVzAMBYAPAAEyiAy6TgJUvwBKSAAAGqZBglTaVRJWVAACB0AAAAAEDlU2VlQAAAAEBAZVTAAAAgRthAwFgA8AATKJgA8AAStgAAF0DwABNBAFgA8AATKIBSpVvAR+Vc5ZXAgFgA8AATKICLoCVkMASklYABqmRYJWalaiV3gAAgdEAAAABA5Wsld4AAAABAQGVsQAAAIQTYAPAAEyiAABdA8AATQQBYAPAAEyiAUqVtwEflbuVzAMBYAPAAEyiAy6AldbAEpK0KwAGqZJgleOV8ZZCAACB0gAAAAEDlfqWQgAAAAEBAZYAAAAAgRthAwFgA8AATKJgA8AAStgAAF0DwABNBAFgA8AATKIBSpYcAR+WIJaPAgFgA8AATKICLoCWPcASkwoABqm1YJZHllmWiAEAhHkAAAABA5ZilogAAAAAAAAAXQPAAE0EAWADwABMogFKlmUBH5Zpl30BAWADwABMogEuAAapk2CWjZablsAAAIRgAAAAAQOWoJbAAAAAAAAAAF0DwABNeAJgA8AATKJgA8AATKIBSpamAR+WqpdzAQFgA8AATKIBLgAGqZRglsWW05dmAACEYwAAAAEDltuXZgAAAAIBApbgAAAAbWADwABMogCW7AAAAIRUYAPAAEyiAWoAYAHAAE2sAgBdA8AATQQBYAPAAEyiAT4CPR6XA8AAS98DAAOAlxPAEpPugZcawBKT+xaXJC6ByMAATXYASpcxAR+XPJXMAwFgA8AATKIDLoCXV8ASk+6Bl17AEpP7AAaptmCXa5d9l6oBAIEIAAAAAQOXhpeqAAAAAAAAAF0DwABNPwFgA8AATKIBSpeJAR+XjadNAQFgA8AATKIBLgAGqZVgl6+XuZgUAACBygAAAAEDl7+YFAAAAAEAAAGXxgAAAIQPYAPAAErYAWqX0GADwABK2IP7XQPAAE1GAWADwABMogE+AUqX3QEel+jAAE1MAgFgA8AATKIBLgGED4CYB8ASlMcGqZZgmBmYIphSAACBywAAAAEDmCeYUgAAAAAAAABdA8AATjoBYAPAAEyiAT4BSpgwAR6YO4liAQFgA8AATKIBLgAGqZdgmFeYXJjUAACBEgAAAAEDmGOY1AAAAAEBAZhpAAAAUGEDAWADwABMolwAAFwBPgJOmIOYhwAAjh9gA8AATKIBFpiOLoHIwABNdkWYmgGYo5ilAACDZmADwABMogGTARyYrIKYqsASlaKAuwEAAYGYrsASlYUAwABN0AGKmLPAEpWiHJi0gpizwBKVooENAQABlADAAE3IPgE9HJjBgJjAwBKVbm4BAAEcmMYugtEBAAGCmMfAEpWiAMAATVUAAAapmGCY2Zjdmd4AAIG5AAAAAQOY45neAAAAAQEBmOgAACCBumEDAmADwABMomADwABMomADwABMogAAYAPAAEyiAT4FTpkTmRcAAI4fYAPAAEyiARaZHi6ByMAATXZJmSocmTKBmS7AEpZYgIwBAAGTAMAATcY9MJk4HplTlvwAAAAAP06ZaJluAAAiYAPAAEyiARyZdC6C0QEAAZMAwABNVUWZfQGZhpmIAACDZmADwABMogGUARyZj4OZjcASlrmAuwEAAYGZkcASllgAwABN0AGLmZjAEpa5HJmWg5mYwBKWuYENAQABlADAAE3IPgE9ipmjwBKWmByZsoCZq8ASljBuAgACgpmzwBKWmByZvi6C0QEAAYOZv8ASlrkAwABNVQAASpnOAYKZ1cASlpgGqZlgmeOZ5Zq8AACBvQAAAAEDmeyavAAAAQAABCFgA8AATe8BWwICApnvAAAAgb5fAwAAAJn/AAAAgbphAwJfAwAAYAPAAEyiXwMAAAAAXwMAAAE+A06aL5ozAACOH2ADwABMogEWmjougcjAAE12RZpGAZpPmlEAAINmYAPAAEyiAZMBHJpYg5pWwBKXt4C7AQABgppawBKXmgDAAE3QAYuaYcASl7ccml+DmmHAEpe3gQ0BAAGUAMAATcg+AT2ImmzAEpdsHJqCgZp7wBKXeG4CAAKAmoPAEpdsHJqVLoLRAQABg5qWwBKXtwDAAE1VAABKmqUBgJqswBKXbAapmmCawZrNmwwAAIGrAAAAAQOa05sMAAABAAAEIWADwABN7wFbAQEBmtYAAABQYQMBYAPAAEyiXwMAAAAAXQPAAE0EAV8DAAABSprpAR6a7ZXgAgJgA8AATKJfAwAAAi6AmwrAEphqAAapm2CbEZsdm28AAIGzAAAAAQObJptvAAABAAAEIWADwABN7wFbAQEBmzMAAABQYQMBYAPAAEyiXQPAAE0EAV8DAAAAAF0DwABNBAFfAwAAAUqbTAEfm1CWJQICYAPAAEyiXwMAAAIugJttwBKY0wAGqZxgm3SbeZwTAACBxwAAAAEDm36cEwAAAAEBAZuEAAAAUGEDAWADwABMomADwABK2AAAYAPAAErYAT4DTpuem6IAAI4fYAPAAEyiARabqS6ByMAATXZFm7UBm76bwAAAg2ZgA8AATKIBkwEcm8eCm8XAEpl1gLsBAAGBm8nAEplYAMAATdABipvQwBKZdRybzoKb0MASmXWBDQEAAZQAwABNyD4BSZvbIRyb4YCb4MASmTduAQABHJvmLoLRAQABgpvnwBKZdQDAAE1VAABKm+wBKj9KnAQBKQapnWCcGJwdnLQAAIEOAAAAAQOcIJy0AAAAAQEBnCYAAABQYQMBYAPAAEyiYAPAAErYAABgA8AAStgBPgNOnECcRAAAjh9gA8AATKIBFpxLLoHIwABNdkWcVwGcYJxiAACDZmADwABMogGTARycaYKcZ8ASmk+AuwEAAYGca8ASmjIAwABN0AGKnHLAEppPHJxwgpxywBKaT4ENAQABlADAAE3IPgFJnH0cnIKAnIHAEpoRbgEAARychy6C0QEAAYKciMASmk8AwABNVQAASpyNASk/SpykASoGqZ5gnLmcvZ3UAACB2AAAAAEDnMed1AAAAAIBAZzNAAAAgRthAwFgA8AATKJgA8AAStgAAZzlAAAggdlhAwBgA8AATKIBagBgAcAATawCYAPAAEyiAT4ETpz6nP4AAI4fYAPAAEyiARadBS6ByMAATXZFnREBnRqdHAAAg2ZgA8AATKIBkwEcnSODnSHAEptDgLsBAAGCnSXAEpsmAMAATdABi50swBKbQxydKoOdLMASm0OBDQEAAZQAwABNyD4CTp07nUMAAIG8YAPAAEyiARydSS6C0QEAAYOdSsASm0MAwABNVUmdVBydXICdWMASmupuAQABhJ1dwBKbjwAASp1nAYSdbsASm48/SZ2BIRydjIGdhcASmwKAjAEAASsAwABN/EqdlQEcnaKBnZzAEpsCbgAAAAAAPz0wnaoencWW/AAAAAAGqZ9gndmd3Z8KAACB2gAAAAEDneafCgAAAAIBAZ3sAAAAgRthAwFgA8AATKJgA8AAStgAAZ4EAAAggdlhAwBgA8AATKIBagBgAcAATawCYAPAAEyiAT4ETp4Znh0AAI4fYAPAAEyiARaeJC6ByMAATXZFnjABnjmeOwAAg2ZgA8AATKIBHJ5Bgp49wBKcbYEGAQABlADAAE3JARyeSIOeRsASnIqBXgEAAZMAwABN0wGLnlDAEpyKHJ5Og55QwBKcioEGAQABlADAAE3JPgJOnl+eZwAAgbxgA8AATKIBHJ5tLoLRAQABg55uwBKcigDAAE1VSZ54HJ6AgJ58wBKcMW4BAAGEnoHAEpzkAAA+AUqelQGEnpzAEpzkP0metyEcnsKBnrvAEpxJgIwBAAErAMAATfxKnssBHJ7YgZ7SwBKcSW4AAAAAAD89MJ7gHp77lvwAAAAABqmgYJ8PnxOhEQAAgdsAAAABA58eoREAAAACAQGfJAAAAIEbYQMBYAPAAEyiYAPAAErYAAGfPAAAIIHZYQMAYAPAAEyiAWoAYAHAAE2sAmADwABMogE+B06fUZ9YAACA5lsBK06faZ93AACEFGADwABK2AEqTp+In4wAAI4fYAPAAEyiARafky6ByMAATXZFn58Bn6ifqgAAg2ZgA8AATKIBkwEcn7GFn6/AEp3+gLsBAAGEn7PAEp3hAMAATdABjZ+6wBKd/hyfuIWfusASnf6BDQEAAZQAwABNyD4CTp/Jn9EAAIG8YAPAAEyiARyf1y6C0QEAAYWf2MASnf4AwABNVUmf4hyf6oCf5sASnYhuAQABhp/rwBKeSgAAPgNJn/+DoAPAEp3QPgE9MKAeHqA5lv0AAAAAPz2KoFbAEp3EhqBfwBKeSj2LoHDAEp3QKT9JoJiDoJzAEp3QSqCrASagqwWCoLLAEp3EYAPAAEyiP0mgviEcoMmBoMLAEp2ggIwBAAErAMAATfxKoNIBHKDfgaDZwBKdoG4AAAAAAD89MKDnHqEClvwAAAAABqmhYKEWoRqhSwAAgdwAAAABA6EjoUsAAAABAQGhKAAAAIHdYAPAAEyiAABgA8AATKIBPgFKoTUBHKFALoLRAQABgKFBwBKfNQDAAE1VBqmiYKFQoVWhrQAAgIIAAAABA6FYoa0AAAABAQGhXQAAICJgA8AATKIAAFwBPgE9MKFqH6F0wABMMAEAASeKxQAGqaNgobKht6IcAACDawAAAAEDob2iHAAAAAEBAaHMAAAgIl0DwABNBAFgA8AATKIAAFwBPgE9MKHZH6HjwABMMAEAASeKxQAGqaRgoiGiJqKRAACEdAAAAAEDoiyikQAAAAICAqIxAAAAgd1gA8AATKIAojwAACAiYAPAAEyiAABcAT4BPTCiSR+iU8AATDABAAEnjiAABqmlYKKWopujFAAAhHYAAAABA6KkoxQAAAACAgKiqQAAAIHdYAPAAEyiAKK+AAAggQFdA8AATQQBYAPAAEyiAABcAT4BPTCizB+i1sAATDABAAEnjiAABqmmYKMZox6jeAAAhFkAAAABA6Mio3gAAAABAAGjKAAAAIRaYQMCYAPAAEyiYAPAAEyiYAPAAEyiAWoAYAHAAE2sAgBcAT4BPR6jS5eSAgFgA8AATKICLjWjVgAAAQBhAwJgA8AATKJgA8AATKJgA8AATKIBgKNWwBKgsiMco1aBo1bAEqDugIwBAAErAMAATfxqo2xhAwJdA8AASuQBW10DwABK5AFbYAPAAEyihCWBo1bAEqDuAWEDAmADwABMomADwABMomADwABMogAGqadgo32jgaR8AACEcAAAAAEDo4ikfAAAAAIBAqONAAAggbxgA8AATKIAo5sAAABtYAPAAEyiAWqjo2ADwABMohoAYAPAAEyiAT4DSaOtHKO3gaOxwBKhjoFeAQABFqO/LoHIwABNdgDAAE3TPgFKo88BHKPWlIPrAAAAAMAATMVJo+Uco++Bo+nAEqGOgLsBAAGTAMAATdA+AT2Jo/zAEqGOkz9FpBEBpBqkHAAAg2ZgA8AATKIBgaQewBKhjgEcpCeCpCXAEqIMgLsBAAEWpC4ugcjAAE12AMAATdABiqQ2wBKiDBykN4KkNsASogyBDQEAAZQAwABNyD4BSaRDHKRPHKRLLoLRAQABgqRMwBKiDADAAE1VgIwBAAGApFLAEqGAAMAATcZKpFsBgqRiwBKiDD9KpG8BHKR2lIPrAAAAAMAATMUGqahgpIGkhaWdAACEcgAAAAEDpJClnQAAAAIBAqSVAAAggbxgA8AATKIApKMAAABtYAPAAEyiAWqkq2ABwABNrAIAYAPAAEyiAT4DSaS4IhykwoGkvMASotWAjAEAASsAwABNxgEcpNOBpM3AEqLVgV4BAAEWpNsugcjAAE12AMAATdM+AT2JpOvAEqLVHKT/FqT4LoHIwABNdoEGAQABlADAAE3JSaUPHKUZgaUTwBKi1YC7AQABkwDAAE3QPgFKpSYBHKUtlIPrAAAAAMAATMU/RaU7AaVEpUYAAINmYAPAAEyiAYGlSMASotUBHKVRgqVPwBKjgYFeAQABkwDAAE3TAYqlV8ASo4EcpViCpVfAEqOBgQYBAAGUAMAATck+AUmlZBylcBylbC6C0QEAAYKlbcASo4EAwABNVYCMAQABgKVzwBKixwDAAE3GSqV8AYKlg8ASo4E/SqWQARyll5SD6wAAAADAAEzFBqmpYKWipaamAQAAhC8AAAABA6WwpgEAAAAAAAAAYAPAAEyiAT4BPTCluR+lw8AATDABAAEniscABqmqYKYGpgqmbAAAhHUAAAABA6YSpmwAAAABAQGmFwAAAIHdYAPAAEyiAABgA8AATKIBPgE9MKYkH6YuwABMMAEAASeKxwAGqatgpnGmdqboAACDlQAAAAEDpoGm6AAAAAEBAaaHAAAAgRthAwFgA8AATKJgA8AAStgAAFwBPgE9MKagH6aqwABMMAEAASeKxwAGqaxgpu2m8qdkAACDlgAAAAEDpv2nZAAAAAEBAacDAAAAgRthAwFgA8AATKJgA8AAStgAAFwBPgE9MKccH6cmwABMMAEAASeKxwAGqbdgp2mncafLAQCBwgAAAAEDp3enywAAAAAAAABgA8AATKIBPgJJp30cp4gWp4EugcjAAE12gowBAAGTAMAATdJKp40BHKeYLoLRAQABkwDAAE1VPz0wp6Eep7yW/AAAAAAGqbhgp9Cn2Kg6AQCB1QAAAAEDp92oOgAAAAAAAABgA8AATKIBPgJJp+Mcp+4Wp+cugcjAAE12gowBAAGTAMAATdJKp/MBHKf+LoLRAQABHKgGFqf/LoHIwABNdoEGAQABlADAAE3JAMAATVU/PTCoEB6oK5b8AAAAAAapuWCoP6hHqN4BAIHXAAAAAQOoTqjeAAAAAAAAAGADwABMogE+A0moVByoXxaoWC6ByMAATXaAjAEAAZQAwABNxkqoZQEcqHAugtEBAAGTAMAATVU/Sah5HKiEFqh9LoHIwABNdoCMAQABkwDAAE3GPTCoih6opZb8AAAAAD89MKi2HqjRlv0AAAAABqmtYKjjqOipYwAAhHgAAAABA6juqWMAAAACAgKo8wAAAIHdYAPAAEyiAKkIAAAghCJdA8AATQQBYAPAAEyiAABcAT4CTqkeqSIAAYRUYAPAAEyiARypNBapLYGpJMASpsCByMAATSeBDQEAAYCpNsASprIAwABNyD0cqUEuhFgDAAOAqUrAEqaygqlRwBKm24GpVsASpsAAwABNawaprmCpaKltqiIAAIRlAAAAAQOpdqoiAAAAAwIDqXsAAABtYAPAAEyiAKmGAAAAhFRgA8AATKIAqZAAACCKfmADwABMogFqAGABwABNrAIAXAE+Aj0eqa3AAEvfAwADgKm9wBKnT4GpxMASp1wWqc4ugcjAAE12AEWp2wGp5KnmAACDZmADwABMogGAqejAEqdPARyp8YOp78ASp66AuwEAAYGp88ASp1wAwABN0AGLqfrAEqeuHKn4g6n6wBKnroENAQABlADAAE3IPgE9HKoJLoEMAgACg6oKwBKnroKqD8ASp2oAwABNVgAAEoklABKJjwASibQAEonZABKJ/AASikQAEoqgABKK8AASi2MAEovtABKNAgASjkQAEo9mABKQOwASkYYAEpHjABKSOQASkpcAEpLtABKTSwASk4sAEpPRABKUaQASlKkAEpUPABKVUQASlhMAEpdDABKYQQASmKoAEpkaABKZ9AASms0AEpwUABKdawASnxgAEp9mABKfpwASn+8AEqA+ABKglQASoWMAEqKqABKkFgASpE8AEqSWABKk4QASpSwAEqWPABKmCQASppUAEqcyABKoHAAAADQCqb1gwAHYFsAB2DbAAdygN49zAAABYAOpgwABXQOc6QFgA6xUAAEFqcUAAAAABAAAAwAAAAAAAAAAAGADqb0BPwEJAACpsAAAAAAEBqm/YMAB2DbAAdg2AAAQhGoAnKqcqgEDAAAAAAADAwMAAAAAbWADwABMogAAAAAAhFRgA8AATKIAAAAAIIQiXQPAAE0EAVsAAFwBSgABHQCEagMAA4AAwBKpYYEAwBKpbYIAwBKpegCcqgapwWCqjaqZqrAAAo4jnIYA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YAPAAErYAT4DTsAAQ1fAAENbAACOH2ADwABMogEWwABDYi6ByMAATXZFwABDbgHAAEN3wABDeQAAg2ZgA8AATKIBkwEcwABDgILAAEN+wBLzv4C7AQABgcAAQ4LAEvOaAMAATdABisAAQ4nAEvO/HMAAQ4eCwABDicAS87+BDQEAAZQAwABNyD4BScAAQ5QcwABDmYDAAEOYwBLzd24BAAEcwABDni6C0QEAAYLAAEOfwBLzvwDAAE1VAABKwABDpAEpP0rAAEO7ASoGqjxgwABD0MAAQ9fAAET0AACB2AAAAAEDwABD4cAARPQAAAACAQHAAEPnAAAAgRthAwFgA8AAS1BgA8AAStgAAcAARAUAACCB2WEDAGADwABLUAFqAGABwABNrAJgA8AAS1ABPgROwABEGsAARB4AAI4fYAPAAEyiARbAAEQlLoHIwABNdkXAAEQxAcAARDrAAEQ8AACDZmADwABMogGTARzAAERDg8AAREHAEvTngLsBAAGCwABERcAS9MIAwABN0AGLwABETMAS9OccwABESoPAAERMwBL054ENAQABlADAAE3IPgJOwABEW8AARGMAAIG8YAPAAEtQARzAAERpLoLRAQABg8AARGrAEvTnAMAATVVJwABEdBzAAER8gMAARHjAEvSCbgEAAYTAAER9wBL1QwAASsAARIcBhMAARI7AEvVDP0nAAEShIRzAAESsgcAARKXAEvScgIwBAAErAMAATfxKwABEtQEcwABEwoHAAES8wBL0nG4AAAAAAD89MMAARMoewABE5Zb8AAAAAAaqPWDAAET5wABFAMAARjMAAIHaAAAAAQPAAEUJwABGMwAAAAIBAcAARQ8AAACBG2EDAWADwABLUGADwABK2AABwABFLQAAIIHZYQMAYAPAAEtQAWoAYAHAAE2sAmADwABLUAE+BE7AAEVCwABFRgAAjh9gA8AATKIBFsAARU0ugcjAAE12RcAARVkBwABFYsAARWQAAINmYAPAAEyiARzAAEVqgsAARWbAEvZTgQYBAAGUAMAATckBHMAARXGDwABFb8AS9niBXgEAAZMAwABN0wGLwABFecAS9ngcwABFd4PAAEV5wBL2eIEGAQABlADAAE3JPgJOwABFiMAARZAAAIG8YAPAAEtQARzAAEWWLoLRAQABg8AARZfAEvZ4AMAATVVJwABF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gbxgA8AAS1AAwABL8AAAAG1gA8AATKIBasAAS/hgAcAATawCAGADwABMogE+A0nAAEwFIhzAAEwPgcAATAnAEv4lgIwBAAErAMAATcYBHMAATCCBwABMGsAS/iWBXgEAARbAAEwoLoHIwABNdgDAAE3TPgE9icAATDjAEv4lHMAATEwWwABMRS6ByMAATXaBBgEAAZQAwABNyUnAAExcHMAATGaBwABMYMAS/iWAuwEAAZMAwABN0D4BSsAATHMBHMAATHqUg+sAAAAAwABMxT9FwABMiAHAAEyRwABMkwAAg2ZgA8AATKIBgcAATJXAEv4lARzAAEyegsAATJzAEv7zgV4BAAGTAMAATdMBisAATKTAEv7zHMAATKWCwABMpMAS/vOBBgEAAZQAwABNyT4BScAATLEcwABMvRzAAEy5LoLRAQABgsAATLrAEv7zAMAATVWAjAEAAYDAAEzAwBL+FQDAAE3GSsAATMkBgsAATNDAEv7zP0rAAEzdARzAAEzklIPrAAAAAMAATMUGqkdgwABM78AATPbAAE1RAACELwAAAAEDwABNAMAATVEAAAAAAAAAYAPAAEtQAT4BPTDAAE0JH8AATRPAAEwwAQABJ4rHAAaqSGDAAE1WwABNXcAATb8AAIR1AAAAAQPAAE1lwABNvwAAAAEBAcAATWoAAACB3WADwABMogAAYAPAAEtQAT4BPTDAAE13H8AATYHAAEwwAQABJ4rHAAaqSWDAAE3EwABNycAATj4AAIOVAAAAAQPAAE3UwABOPgAAAAEBAcAATdoAAACBG2EDAWADwABLUGADwABK2AAAXAE+AT0wwABN9h/AAE4AwABMMAEAASeKxwAGqkpgwABOQ8AATkjAAE69AACDlgAAAAEDwABOU8AATr0AAAABAQHAAE5ZAAAAgRthAwFgA8AAS1BgA8AAStgAAFwBPgE9MMAATnUfwABOf8AATDABAAEniscABqpVYMAATsLAAE7NwABPJwEAgcIAAAABA8AATtPAAE8nAAAAAAAAAGADwABLUAE+AknAAE7ZHMAATuQWwABO3S6ByMAATXaCjAEAAZMAwABN0krAAE7pARzAAE70LoLRAQABkwDAAE1VPz0wwABO/R7AAE8YlvwAAAAABqpWYMAATyzAAE83wABPmQEAgdUAAAABA8AATzzAAE+ZAAAAAAAA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iRzAAELigsAAQuTAEySJgQ0BAAGUAMAATcg+AUnAAELvIRzAAEL1gMAAQvTAEyRBbgEAARzAAEL6LoLRAQABgsAAQvvAEySJAMAATVUAAErAAEMAASo/SsAAQxgBKQaqimDAAEMswABDMcAAQ8sAAIEOAAAAAQPAAEM0wABDywAAAAEBAcAAQzoAAABQYQMBYAPAAEtQYAPAAErYAABgA8AAStgBPgNOwABDV8AAQ1sAAI4fYAPAAEyiARbAAENiLoHIwABNdkXAAENuAcAAQ3fAAEN5AACDZmADwABMogGTARzAAEOAgsAAQ37AEyWVgLsBAAGBwABDgsATJXAAwABN0AGKwABDicATJZUcwABDh4LAAEOJwBMllYENAQABlADAAE3IPgFJwABDlBzAAEOZgMAAQ5jAEyVNbgEAARzAAEOeLoLRAQABgsAAQ5/AEyWVAMAATVUAAErAAEOkASk/SsAAQ7sBKgaqi2DAAEPQwABD18AARPQAAIHYAAAAAQPAAEPhwABE9AAAAAIBAcAAQ+cAAACBG2EDAWADwABLUGADwABK2AABwABEBQAAIIHZYQMAYAPAAEtQAWoAYAHAAE2sAmADwABLUAE+BE7AAEQawABEHgAAjh9gA8AATKIBFsAARCUugcjAAE12RcAARDEBwABEOsAARDwAAINmYAPAAEyiAZMBHMAAREODwABEQcATJr2AuwEAAYLAAERFwBMmmADAAE3QAYvAAERMwBMmvRzAAERKg8AAREzAEya9gQ0BAAGUAMAATcg+Ak7AAERbwABEYwAAgbxgA8AAS1ABHMAARGkugtEBAAGDwABEasATJr0AwABNVUnAAER0HMAARHyAwABEeMATJlhuAQABhMAARH3AEycZAABKwABEhwGEwABEjsATJxk/ScAARKEhHMAARKyBwABEpcATJnKAjAEAASsAwABN/ErAAES1ARzAAETCgcAARLzAEyZybgAAAAAAPz0wwABEyh7AAETllvwAAAAABqqMYMAARPnAAEUAwABGMwAAgdoAAAABA8AARQnAAEYzAAAAAgEBwABFDwAAAIEbYQMBYAPAAEtQYAPAAErYAAHAAEUtAAAggdlhAwBgA8AAS1ABagBgAcAATawCYAPAAEtQAT4ETsAARULAAEVGAACOH2ADwABMogEWwABFTS6ByMAATXZFwABFWQHAAEViwABFZAAAg2ZgA8AATKIBHMAARWqCwABFZsATKCmBBgEAAZQAwABNyQEcwABFcYPAAEVvwBMoToFeAQABkwDAAE3TAYvAAEV5wBMoThzAAEV3g8AARXnAEyhOgQYBAAGUAMAATck+Ak7AAEWIwABFkAAAgbxgA8AAS1ABHMAARZYugtEBAAGDwABFl8ATKE4AwABNVUnAAEWhHMAARamAwABFpcATJ+luAQABhMAARarAEyi6AAA+AUrAAEW+AYTAAEXFwBMouj9JwABF4CEcwABF64HAAEXkwBMoA4CMAQABKwDAAE38SsAARfQBHMAARgGBwABF+8ATKANuAAAAAAA/PTDAAEYJHsAARiSW/AAAAAAGqo1gwABGOMAARj/AAEhDAACB2wAAAAEDwABGSsAASEMAAAACAQHAAEZQAAAAgRthAwFgA8AAS1BgA8AAStgAAcAARm4AACCB2WEDAGADwABLUAFqAGABwABNrAJgA8AAS1ABPgdOwABGg8AARooAAIDmWwErTsAARpvAAEapAACEFGADwABK2AEqTsAARrrAAEa+AACOH2ADwABMogEWwABGxS6ByMAATXZFwABG0QHAAEbawABG3AAAg2ZgA8AATKIBkwEcwABG44XAAEbhwBMqFoC7AQABhMAARuXAEynxAMAATdABjcAARuzAEyoWHMAARuqFwABG7MATKhaBDQEAAZQAwABNyD4CTsAARvvAAEcDAACBvGADwABLUAEcwABHCS6C0QEAAYXAAEcKwBMqFgDAAE1VScAARxQcwABHHIDAAEcYwBMpjG4BAAGGwABHHcATKnIAAD4DScAARzGDwABHNcATKdw+AT0wwABHUB7AAEdrlv0AAAAAPz2KwABHiMATKcyGwABHkcATKnI9i8AAR6LAEyncKT9JwABHyoPAAEfOwBMp3ErAAEfdASbAAEfdBYLAAEfkwBMpzGADwABLUD9JwABH8CEcwABH+4HAAEf0wBMppoCMAQABKwDAAE38SsAASAQBHMAASBGBwABIC8ATKaZuAAAAAAA/PTDAAEgZHsAASDSW/AAAAAAGqo5gwABISMAASE/AAEiAAACB3AAAAAEDwABIWMAASIAAAAABAQHAAEhdAAAAgd1gA8AATKIAAGADwABLUAE+AUrAAEhqARzAAEh1LoLRAQABgMAASHbAEyufAMAATVUGqo9gwABIhcAASIrAAEjlAACAggAAAAEDwABIjcAASOUAAAABAQHAAEiVAAAgImADwABLUAAAXAE+AT0wwABIoh/AAEiswABMMAEAASeKxQAGqpBgwABI6sAASO/AAElXAACDawAAAAEDwABI9cAASVcAAAABAQHAAEkHAAAgIl0DwABNBAFgA8AAS1AAAFwBPgE9MMAASRQfwABJHsAATDABAAEnisUABqqRYMAASVzAAElhwABJzwAAhHQAAAABA8AASWfAAEnPAAAAAgICwABJbAAAAIHdYAPAAEyiAMAASXoAACAiYAPAAEtQAABcAT4BPTDAAEmHH8AASZHAAEwwAQABJ44gAAaqkmDAAEnUwABJ2cAASlUAAIR2AAAAAQPAAEniwABKVQAAAAICAsAASecAAACB3WADwABMogDAAEn/AAAggQFdA8AATQQBYAPAAEtQAABcAT4BPTDAAEoNH8AAShfAAEwwAQABJ44gAAaqk2DAAEpawABKX8AASr8AAIRZAAAAAQPAAEpjwABKvwAAAAEAAcAASmkAAACEWmEDAmADwABLUGADwABLUGADwABMogFqAGABwABNrAIAXAE+AT0ewABKkpeSAgFgA8AAS1ACLjXAAEqdAAABAGEDAmADwABLUGADwABLUGADwABMogGAwABKncATLXIjHMAASp2BwABKncATLbKAjAEAASsAwABN/GrAAEqzYQMCXQPAAErkAVtdA8AASuQBW2ADwABMooQlgcAASp3AEy2yAWEDAmADwABLUGADwABLUGADwABMogAGqpRgwABKxMAASsjAAEvGAACEcAAAAAEDwABKz8AAS8YAAAACAQLAAErXAAAggbxgA8AAS1AAwABK5QAAAG1gA8AATKIBasAASu1gA8AATKIaAGADwABMogE+A0nAAEr3HMAASwGBwABK+8ATLmqBXgEAARbAAEsJLoHIwABNdgDAAE3TPgFKwABLGQEcwABLIJSD6wAAAADAAEzFScAASy8cwABLOYHAAEszwBMuaoC7AQABkwDAAE3QPgE9icAAS0bAEy5qkz9FwABLWwHAAEtkwABLZgAAg2ZgA8AATKIBgcAAS2jAEy5qARzAAEtxgsAAS2/AEy8CgLsBAAEWwABLeC6ByMAATXYAwABN0AGKwABLgMATLwIcwABLgYLAAEuAwBMvAoENAQABlADAAE3IPgFJwABLjRzAAEuZHMAAS5UugtEBAAGCwABLlsATLwIAwABNVYCMAQABgMAAS5zAEy5aAMAATcZKwABLpQGCwABLrMATLwI/SsAAS7kBHMAAS8CUg+sAAAAAwABMxQaqlWDAAEvLwABLz8AATOoAAIRyAAAAAQPAAEvawABM6gAAAAIBAsAAS+IAACCBvGADwABLUADAAEvwAAAAbWADwABMogFqwABL+GABwABNrAIAYAPAAEyiAT4DScAATAUiHMAATA+BwABMCcATL/uAjAEAASsAwABNxgEcwABMIIHAAEwawBMv+4FeAQABFsAATCgugcjAAE12AMAATdM+AT2JwABMOMATL/scwABMTBbAAExFLoHIwABNdoEGAQABlADAAE3JScAATFwcwABMZoHAAExgwBMv+4C7AQABkwDAAE3QPgFKwABMcwEcwABMepSD6wAAAADAAEzFP0XAAEyIAcAATJHAAEyTAACDZmADwABMogGBwABMlcATL/sBHMAATJ6CwABMnMATMMmBXgEAAZMAwABN0wGKwABMpMATMMkcwABMpYLAAEykwBMwyYEGAQABlADAAE3JPgFJwABMsRzAAEy9HMAATLkugtEBAAGCwABMusATMMkAwABNVYCMAQABgMAATMDAEy/rAMAATcZKwABMyQGCwABM0MATMMk/SsAATN0BHMAATOSUg+sAAAAAwABMxQaqlmDAAEzvwABM9sAATVEAAIQvAAAAAQPAAE0AwABNUQAAAAAAAABgA8AAS1ABPgE9MMAATQkfwABNE8AATDABAAEniscABqqXYMAATVbAAE1dwABNvwAAhHUAAAABA8AATWXAAE2/AAAAAQEBwABNagAAAIHdYAPAAEyiAABgA8AAS1ABPgE9MMAATXcfwABNgcAATDABAAEniscABqqYYMAATcTAAE3JwABOPgAAg5UAAAABA8AATdTAAE4+AAAAAQEBwABN2gAAAIEbYQMBYAPAAEtQYAPAAErYAABcAT4BPTDAAE32H8AATgDAAEwwAQABJ4rHAAaqmWDAAE5DwABOSMAATr0AAIOWAAAAAQPAAE5TwABOvQAAAAEBAcAATlkAAACBG2EDAWADwABLUGADwABK2AAAXAE+AT0wwABOdR/AAE5/wABMMAEAASeKxwAGqqRgwABOwsAATs3AAE8nAQCBwgAAAAEDwABO08AATycAAAAAAAAAYAPAAEtQAT4CScAATtkcwABO5BbAAE7dLoHIwABNdoKMAQABkwDAAE3SSsAATukBHMAATvQugtEBAAGTAMAATVU/PTDAAE79HsAATxiW/AAAAAAGqqVgwABPLMAATzfAAE+ZAQCB1QAAAAEDwABPPMAAT5kAAAAAAAAAYAPAAEtQAT4CScAAT0IcwABPTRbAAE9GLoHIwABNdoKMAQABkwDAAE3SSsAAT1IBHMAAT10ugtEBAAEcwABPZRbAAE9eLoHIwABNdoEGAQABlADAAE3JAMAATVU/PTDAAE9vHsAAT4qW/AAAAAAGqqZgwABPnsAAT6nAAFBAAQCB1wAAAAEDwABPsMAAUEAAAAAAAAAAYAPAAEtQAT4DScAAT7YcwABPwRbAAE+6LoHIwABNdoCMAQABlADAAE3GSsAAT8cBHMAAT9IugtEBAAGTAMAATVU/ScAAT9scwABP5hbAAE/fLoHIwABNdoCMAQABkwDAAE3GPTDAAE/sHsAAUAeW/AAAAAA/PTDAAFAYHsAAUDOW/QAAAAAGqppgwABQRcAAUErAAFDIAACEeAAAAAEDwABQUMAAUMgAAAACAgLAAFBVAAAAgd1gA8AATKIAwABQbQAAIIQiXQPAAE0EAWADwABLUAAAXAE+Ak7AAFCDwABQhwABhFRgA8AATKIBHMAAUJkWwABQkoHAAFCJwBM0yoHIwABNJ4ENAQABgMAAUJvAEzS6AMAATcg9HMAAUKYuhFgDAAOAwABQr8ATNLqCwABQtsATNOeBwABQu8ATNMoAwABNawaqm2DAAFDNwABQ0sAAUYoAAIRlAAAAAQPAAFDbwABRigAAAAMCA8AAUOAAAABtYAPAAEyiAMAAUOsAAACEVGADwABMogDAAFD4AAAgin5gA8AAS1ABagBgAcAATawCAFwBPgI9HsAAURXAAEvfAwADgMAAUSXAEzV5gcAAUSzAEzWIFsAAUTYugcjAAE12AEXAAFFDAcAAUUzAAFFOAACDZmADwABMogGAwABRUMATNXkBHMAAUVmDwABRV8ATNeiAuwEAAYHAAFFbwBM1iADAAE3QAYvAAFFiwBM16BzAAFFgg8AAUWLAEzXogQ0BAAGUAMAATcg+AT0cwABRcS6BDAIAAoPAAFFywBM16ILAAFF3wBM1mADAAE1WAAATE48AExP5ABMUHgATFEMAExRmABMUrgATFQoAExVaABMVzQATFlcAExdsABMYrgATGdAAExqlABMb8AATHE0AExyjABMdAQATHVcAEx21ABMd9QATHjsAEx7TABMfEwATH3kAEx+7ABMgfQATIekAEyMdABMjmAATJBoAEyUmABMmMQATJ8IAEyllABMreAATK9gAEywpABMsgQATLOIAEy1LABMuMwATL8QAEzGAABMxxwATMh4AEzJ5ABMy1AATM08AEzPlABM0kwATNVIAEzZuAAAANAKqqmDAAeXwwAHmEMAB6qA3j38AAAFgA6pwAAFdA50mAWADrHIAAQWqsgAAAAAEAAADAAAAAAAAAAAAYAOqqgE/AQkAAKqdAAAAAAQGqqxgwAHmEMAB5hAAABCEagCcqpyqAQMAAAAAAAMDAwAAAABtYAPAAEyiAAAAAACEVGADwABMogAAAAAghCJdA8AATQQBWwAAXAFKAAEdAIRqAwADgADAEzezgQDAEze/ggDAEzfMAJyqBqquYMAAUgHAAFINwABSJAACjiOchgAAAAEDwABSGMAAUiQAAAABAQHAAFIdAAAAgchgA8AATKIAAGADrHIABqqvYMAAUinAAFIuwABbCAAAhFgAAAABA8AAUjbAAFsIAAAABAMEwABSOwAAAG1gA8AATKIAwABSRgAAAIRUYAPAAEyiAMAAUlwAACCCwF0DwABNBAFgA8AAS1AAwABSbQAAAIRnYAPAAEyiAWrAAFJ5YAPAAEyiGgBcAT4LScAAUpgiIhzAAFKek4KMAQABgMAAUqDAEzhjAMAATdIBHMAAUq+AwABSqcATOGOCjAEAAYHAAFKxwBM4cgDAAE3SARzAAFK8gcAAUrjAEzhygowBAAEWwABSvi6ByMAATXYAwABN0j4CPR7AAFLZwABL3wMAA4DAAFLpwBM4Y4HAAFLwwBM4chbAAFL1LoHIwABNdgBAKsAAUx3AAFMiAD9JwABTLxzAAFM9g8AAUzPAEziZgLsBAAGTAMAATdA+AT0wwABTSh/AAFNbwABL6AQABIPAAFNhwBM4mZMrJ4RnAD9OwABTlMAAU5oAAYGbYAPAAEyiARzAAFOggcAAU5zAEzhygQYBAAGAwABTosATOGMAwABNyUnAAFOtHMAAU8scwABT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bgEAARzAAGBaLoLRAQABgsAAYFvAE0sGAMAATVUAAErAAGBgAYLAAGBnwBNLBj9KwABgdAEcwABge5SD6wAAAADAAEzFBqrJYMAAYIbAAGCfwABhfgMAgQ0AAAABA8AAYKDAAGF+AAAAAQEBwABgsQAAIIIdXQPAAE1GAWADrJ0AAF0DwABNRgFgA6ydAT4CTsAAYMLAAGDOAACOHmADwABMogEcwABg3BbAAGDVLoHIwABNdoENAQABFsAAYOSAwABg3sATS+CByMAATXYAwABNyErAAGDwATXAAGECAAABAF0DwABNRgFgA6ydATHAAGECYAOsnQA1wABhDQAAAQBcARfAAGENgsAAYQLAE0xOgciBwABhFsATTAXAAE10NcAAYSoAAAEAXAEcwABhKoLAAGECwBNMToRYAwADkxbAAGE7LoHIwABNdi4AwABNazXAAGFRAAABAFwBHMAAYVGCwABhAsATTE6EWAMAAxbAAGFfLoHIwABNdoHAAGFnwBNMBYDAAGF0wBNL4ADAAE1rgsAAYQLAE0xOBqrKYMAAYYPAAGGIwABiJwAAgcQAAAABA8AAYZDAAGInAAAAAQEBwABhmAAAAIG8YAPAAE3vAABgA8AAStgBPgNOwABhq8AAYa8AAI4fYAPAAEyiARbAAGG2LoHIwABNdkXAAGHCAcAAYcvAAGHNAACDZmADwABMogGTARzAAGHUgsAAYdLAE012gLsBAAGBwABh1sATTVEAwABN0AGKwABh3cATTXYcwABh24LAAGHdwBNNdoENAQABlADAAE3IPgFJwABh6BzAAGH0HMAAYfAugtEBAAGCwABh8cATTXYAwABNVYCMAQABgMAAYffAE002AMAATfxKwABiAAEpP0rAAGIXASoGqstgwABiLMAAYjHAAGMaAACEXAAAAAEDwABiOMAAYxoAAAABAAHAAGJBAAAAhF1gA5lBAWoAYAHAAE2sAgBcAT4DPSMcwABiV4DAAGJQwBNOPYCMAQABKwDAAE38iMAAYlDAE049HsAAYl+ZQwAAAAArAWADmUFOwABiccAAYnMAAINmYAPAAEyiARbAAGJ6LoHIwABNdkPAAGKGHMAAYo+BwABijcATTo+CjAEAAZQAwABN0j4FTsAAYqDAAGKkAACBC2ADwABMogEcwABirYDAAGKmwBNOPYReAQABgcAAYrXAE06PAJlGPYnAAGK/wBNOjxzAAGLBgcAAYr/AE06PgQYBAAGUAMAATclOwABi0cAAYtUAAIRfYAOsnQEcwABi2y6C0QEAAYHAAGLcwBNOjwDAAE1VPRzAAGLqLoEMAgACgcAAYuvAE06PHMAAYvQugtEBAAGCwABi9cATTs8AwABNVQDAAE1WPRzAAGMFLoEMAgACgsAAYwbAE07Pg8AAYw3AE08lAMAATVYGqsxgwABjH8AAYyTAAGwNAACEWAAAAAEDwABjLMAAbA0AAAAEAwTAAGMxAAAAbWADwABMogDAAGM8AAAAhFRgA8AATKIAwABjVQAAIILAXQPAAE0EAWADrJ0AwABjZgAAAIRnYAPAAEyiAWrAAGNyYAPAAEyiGgBcAT4LScAAY5EiIhzAAGOXk4KMAQABgMAAY5nAE0/MAMAATdIBHMAAY6iAwABjosATT8yCjAEAAYHAAGOqwBNP2wDAAE3SARzAAGO1gcAAY7HAE0/bgowBAAEWwABjty6ByMAATXYAwABN0j4CPR7AAGPSwABL3wMAA4DAAGPiwBNPzIHAAGPpwBNP2xbAAGPuLoHIwABNdgBAKsAAZBbAAGQbAD9JwABkKBzAAGQ2g8AAZCzAE1AAgLsBAAGTAMAATdA+AT0wwABkQx/AAGRUwABL6AQABIPAAGRawBNQAJMrJ4RnAD9OwABkjcAAZJMAAYGbYAPAAEyiARzAAGSZgcAAZJXAE0/bgQYBAAGAwABkm8ATT8wAwABNyUnAAGSmHMAAZMQcwABktxbAAGSwgsAAZKvAE0/rgcjAAE0ngQYBAAGDwABkucATUAAAwABNyYC7AQABhMAAZMbAE1EFAMAATdA+AT0wwABk1R7AAGTwlv4AAAAAP0nAAGUFHMAAZQ+EwABlCcATUQWAjAEAAZMAwABNxkrAAGUVAD9JwABlIiXAAGUrAILAAGUmwBNP62ADnJ0+Ak7AAGW4wABlyAABjiRgA5ydASbAAGXPAILAAGXKwBNP62ADnJ1JwABl6BzAAGYEFsAAZfEujhSdLoCMAQABFsAAZheFwABmB8ATUdaOFJygAMAATcY+AUnAAGY1IhzAAGZAhMAAZjrAE1EFgLsBAAE3CgDAAE3QACEcwABmYRbAAGZahcAAZkrAE1HWgcGcooCMAQABFsAAZmkugcGdMACd7j4CPR7AAGaEk+oFAAUmwABmjgCCwABmicATT+tdA8AATUYBYAOsnYPAAGaiwBNQAC6AwABms8ATT8yEwABmusATUQUASsAAZswAScAAZuMcwABm+RbAAGbzFsAAZuwugcGdMIOknIad5o4WnIYGAAYcwABnKxzAAGcWgMAAZxDAE0/Mg8YBAAEWwABnGC6OFJ0uAMAATcqBDQEAARbAAGcyLoadnS8AwABNyBzAAGdThMAAZ03AE1EFg8YBAAEWwABnVS6OFJ0uAMAATcoWwABnjBbAAGeFhcAAZ3XAE1HWgcGcooOknIad5hzAAGe+HMAAZ6mDwABnn8ATUACDxgEAARbAAGerLo4UnS4AwABNyoENAQABFsAAZ9CFwABnwMATUdaGnZyhAMAATcgewABn85P3AQABLgAewABoFJP3AQABgsAAaBrAE0/rAACcrT4BSsAAaC4AP0nAAGhNHMAAaGgWwABoYYXAAGhRwBNR1oHBnKKAjAEAARbAAGhwLoHBnTAAne4+BU7AAGlGwABpUQABjiVdA8AATUYBYAOsnQEmwABpWACCwABpU8ATT+tdA8AATUYBYAOsnU7AAGl6wABphQABjiZgA6x8ARzAAGmHLo4jnIYBAAGEwABpk8ATUQUAnThFwABpowHAAGmswABprgAAg2ZgA8AATKIBkwEcwABptRTAAGmzwBNUZAgAgLsBAAGEwABpt8ATUQUAwABN0AEVwABpvsATVGQIHMAAab8UwABpvsATVGQIAIENAQABlADAAE3IPgE9HMAAadmHwABpz8ATVDSBDAIAAhTAAGnawBNUZAgAHMAAaemGwABp38ATVAGC0QEAARzAAGn0g8AAaerAE1AAgQ0BAAEUwABp9sATVGQIAADAAE3IAMAATVUAwABNVkXAAGoMAcAAahXAAGoXAACDZmADwABMogGAwABqGcATT8wBHMAAaiIUwABqIMATVSkIAIC7AQABgcAAaiTAE0/bAMAATdABFcAAainAE1UpCBzAAGoqFMAAainAE1UpCACBDQEAAZQAwABNyD4BPRzAAGo+LoEMAgACFMAAaj/AE1UpCAAcwABqTofAAGpEwBNUNILRAQABHMAAalEUwABqT8ATVSkIAIEGAQABgMAAalPAE0/MAMAATckAwABNVQDAAE1WSsAAam0APz9OwABqjQAAAIRoXQPAAE1G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g8EAAACEVGADwABMogDAAIPRAAAgin5gA6ydAWoAYAHAAE2sAgBcAT4CPR7AAIPuwABL3wMAA4DAAIP+wBNyD4HAAIQFwBNyHhbAAIQPLoHIwABNdgBFwACEHAHAAIQlwACEJwAAg2ZgA8AATKIBgMAAhCnAE3IPARzAAIQyg8AAhDDAE3J8gLsBAAGBwACENMATch4AwABN0AGLwACEO8ATcnwcwACEOYPAAIQ7wBNyfIENAQABlADAAE3IPgE9HMAAhEougQwCAAKDwACES8ATcnyCwACEUMATci4AwABNVgAAE0VlABNFzwATRf4AE0YtABNGWgATRpkAE0bvABNHVwATR7MAE0g+ABNI5AATSjUAE0u5ABNNDwATThYAE0+lABNXQAATV6kAE1gNABNYdwATWNsAE1lFABNZjwATWd8AE1qRABNa2wATW1EAE1udABNciQATXfMAE18lABNfnAATYBoAE2EkABNiLQATY7YAE2VRABNnWgATZ7gAE2gHABNoXQATaLwAE2kjABNptwATa0YAE20AABNtRQATbZoAE23zABNuTAATbsUAE29ZABNwBQATcS0AE3HoABNzAgAAADcCqv1gwAHqo8AB6sPAAe8UA4+DAWrAAeqkYAPAAEqfAwABYAOqvwABYAOsfAAABgarAGDAAet1wAHrfcAB6/gEBYCKnIYCasAB6z9gA8AASp+bhWoAYAOUCJubAAABA8AB65LAAev4AAAAAwMDwAHrngAAAIHBYAOeAADAAeuqAAAAhp1gA8AATKIAwAHrwwAAAIHIYAPAAEyiAABgA6r9AAarAmDAAewpwAHsPMAB7RsDAILRAAAAAQPAAew+wAHtGwAAAAEBAcAB7EMAAACB3WADwABMogAAYAOsnQE+AknAAexQIhzAAexagMAB7FTAE3SvgLsBAAGTAMAATdABHMAB7GeAwAHsYcATdK+BXgEAARbAAexqLoHIp1UAwABN0z4BPTDAAex6H8AB7ITAAEv0AwADgMAB7JXAE3SvLieB3QA/SsAB7LYBHMAB7NEWwAHsvS6PUZyGp1OOaJyGAQABHMAB7O0WwAHs3y6GnZ0vgQ0BAAEcwAHs9oDAAezwwBN0r4PGAQABasAB7QZgA8AATKJUAMAATcoAwABNyACeHQarA2DAAe0gwAHtLsAB7h8DAIEMAAAAAQPA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HMAAihWCwACKE8ATgBuAuwEAAYHAAIoXwBN/9gDAAE3QAYrAAIoewBOAGxzAAIocgsAAih7AE4AbgQ0BAAGUAMAATcg+AUnAAIopHMAAijUcwACKMS6C0QEAAYLAAIoywBOAGwDAAE1VgIwBAAGAwACKOMATf9sAwABN/ErAAIpBASk/SsAAilgBKgarFWDAAIptwACKcsAAi1sAAIRcAAAAAQPAAIp5wACLWwAAAAEAAcAAioIAAACEXWADmUEBagBgAcAATawCAFwBPgM9IxzAAIqYgMAAipHAE4DigIwBAAErAMAATfyIwACKkcATgOIewACKoJlDAAAAACsBYAOZQU7AAIqywACKtAAAg2ZgA8AATKIBFsAAirsugcjAAE12Q8AAisccwACK0IHAAIrOwBOBNIKMAQABlADAAE3SPgVOwACK4cAAiuUAAIELYAPAAEyiARzAAIrugMAAiufAE4DihF4BAAGBwACK9sATgTQAmUY9icAAiwDAE4E0HMAAiwKBwACLAMATgTSBBgEAAZQAwABNyU7AAIsSwACLFgAAhF9gA63IARzAAIscLoLRAQABgcAAix3AE4E0AMAATVU9HMAAiysugQwCAAKBwACLLMATgTQcwACLNS6C0QEAAYLAAIs2wBOBdADAAE1VAMAATVY9HMAAi0YugQwCAAKCwACLR8ATgXSDwACLTsATgcoAwABNVgarFmDAAItgwACLZcAAlEQAAIRYAAAAAQPAAIttwACURAAAAAQDBMAAi3IAAABtYAPAAEyiAMAAi30AAACEVGADwABMogDAAIuUAAAggsBdA8AATQQBYAOtyADAAIulAAAAhGdgA8AATKIBasAAi7FgA8AATKIaAFwBPgtJwACL0CIiHMAAi9aTgowBAAGAwACL2MATgnEAwABN0gEcwACL54DAAIvhwBOCcYKMAQABgcAAi+nAE4KAAMAATdIBHMAAi/SBwACL8MATgoCCjAEAARbAAIv2LoHIwABNdgDAAE3SPgI9HsAAjBHAAEvfAwADgMAAjCHAE4JxgcAAjCjAE4KAFsAAjC0ugcjAAE12AEAqwACMVcAAjFoAP0nAAIxnHMAAjHWDwACMa8ATgqWAuwEAAZMAwABN0D4BPTDAAIyCH8AAjJPAAEvoBAAEg8AAjJnAE4KlkysnhGcAP07AAIzMwACM0gAB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LgAGqyBgwACYasAAmG/AAJjrAACBEgAAAAEDwACYdsAAmOsAAAABAQHAAJh8AAAAUGEDAWADrchcAABcAT4CTsAAmJrAAJieAACOH2ADwABMogEWwACYpS6ByMAATXZFwACYsQHAAJi6wACYvAAAg2ZgA8AATKIBkwEcwACYw4LAAJjBwBOOpYC7AQABgcAAmMXAE46AAMAATdABisAAmMrAE46lHMAAmMuCwACYysATjqWBDQEAAZQAwABNyD4BPRzAAJjYgMAAmNfAE45pbgEAARzAAJjdLoLRAQABgsAAmN7AE46lAMAATVUAAAarIWDAAJjwwACY+MAAmgUAAIG5AAAAAQPAAJj+wACaBQAAAAEBAcAAmQcAACCBumEDAmADrchgA63IYAOtyAAAYAOtyAE+BU7AAJk6wACZPgAAjh9gA8AATKIBFsAAmUUugcjAAE12ScAAmVEcwACZWYHAAJlVwBOPd4CMAQABkwDAAE3GPTDAAJlfHsAAmXqW/AAAAAA/TsAAmY/AAJmVAAAiYAOtyAEcwACZmy6C0QEAAZMAwABNVUXAAJmkAcAAma3AAJmvAACDZmADwABMogGUARzAAJm2g8AAmbTAE4/ugLsBAAGBwACZuMATj3cAwABN0AGLwACZv8ATj+4cwACZvYPAAJm/wBOP7oENAQABlADAAE3IPgE9isAAmcrAE4/HHMAAmdmAwACZ0sATj1VuAgACgsAAmdrAE4/HHMAAmeUugtEBAAGDwACZ5sATj+4AwABNVQAASsAAmfUBgsAAmfzAE4/HBqsiYMAAmgrAAJoMwACa5wAAgb0AAAABA8AAmhPAAJrnAAABAAAEIWADwABN7wFbAgICwACaFgAAAIG+XwMAAADAAJomAAAAgbphAwJfAwAAYAOtyF8DAAAAAF8DAAABPgNOwACaWsAAml4AAI4fYAPAAEyiARbAAJplLoHIwABNdkXAAJpxAcAAmnrAAJp8AACDZmADwABMogGTARzAAJqDg8AAmoHAE5EggLsBAAGCwACahcATkPsAwABN0AGLwACajMATkSAcwACaioPAAJqMwBORIIENAQABlADAAE3IPgE9iMAAmpfAE5DLHMAAmq2BwACapsATkNluAgACgMAAmq7AE5DLHMAAmsAugtEBAAGDwACawcATkSAAwABNVQAASsAAmtABgMAA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oCDAE5h8AMAATdABjcAAoCfAE5ihHMAAoCWFwACgJ8ATmKGBDQEAAZQAwABNyD4CTsAAoDbAAKA+AACBvGADrcgBHMAAoEQugtEBAAGFwACgRcATmKEAwABNVUnAAKBPHMAAoFeAwACgU8ATmB1uAQABhsAAoFjAE5j9AAA+A0nAAKBsg8AAoHDAE5hnPgE9MMAAoIsewACgppb9AAAAAD89isAAoMPAE5hXhsAAoMzAE5j9PYvAAKDdwBOYZyk/ScAAoQWDwAChCcATmGdKwAChGAEmwAChGAWCwAChH8ATmFdgA63IP0nAAKErIRzAAKE2gcAAoS/AE5g1gIwBAAErAMAATfxKwAChPwEcwAChTIHAAKFGwBOYNW4AAAAAAD89MMAAoVQewAChb5b8AAAAAAarKmDAAKGDwAChi8AAobwAAIHcAAAAAQPAAKGUwAChvAAAAAEBAcAAoZkAAACB3WADwABMogAAYAOtyAE+AUrAAKGmARzAAKGxLoLRAQABgMAAobLAE5omAMAATVUGqytgwAChwcAAocbAAKIiAACAggAAAAEDwAChycAAoiIAAAABAQHAAKHSAAAgImADrcgAAFwBPgE9MMAAod8fwACh6cAATDABAAEnisUABqssYMAAoifAAKIswACilQAAg2sAAAABA8AAojLAAKKVAAAAAQEBwACiRQAAICJdA8AATQQBYAOtyAAAXAE+AT0wwACiUh/AAKJcwABMMAEAASeKxQAGqy1gwACimsAAop/AAKMOAACEdAAAAAEDwACipcAAow4AAAACAgLAAKKqAAAAgd1gA8AATKIAwACiuQAAICJgA63IAABcAT4BPTDAAKLGH8AAotDAAEwwAQABJ44gAAarLmDAAKMTwACjGMAAo5UAAIR2AAAAAQPAAKMhwACjlQAAAAICAsAAoyYAAACB3WADwABMogDAAKM/AAAggQFdA8AATQQBYAOtyAAAXAE+AT0wwACjTR/AAKNXwABMMAEAASeOIAAGqy9gwACjmsAAo5/AAKQ8AACEWQAAAAEDwACjo8AApDwAAAABAAHAAKOpAAAAhFphAwJgA63IYAOtyGADwABMogFqAGABwABNrAIAXAE+AknAAKPPHMAAo9uAwACj08ATm++AjAEAASsAwABN/D4BPTDAAKPsJ44qPz0ewACkJZeSAgFgA63IAi6AwACkMMATm+8ABqswYMAApEHAAKRFwAClRAAAhHAAAAABA8AApEzAAKVEAAAAAgECwACkVQAAIIG8YAOtyADAAKRjAAAAbWADwABMogFqwACka2ADwABMohoAYAPAAEyiAT4DScAApHUcwACkf4HAAKR5wBOckYFeAQABFsAApIcugcjAAE12AMAATdM+AUrAAKSXARzAAKSelIPrAAAAAMAATMVJwACkrRzAAKS3gcAApLHAE5yRgLsBAAGTAMAATdA+AT2JwACkxMATnJGTP0XAAKTZAcAApOLAAKTkAACDZmADwABMogGBwACk5sATnJEBHMAApO+CwACk7cATnSmAuwEAARbAAKT2LoHIwABNdgDAAE3QAYrAAKT+wBOdKRzAAKT/gsAApP7AE50pgQ0BAAGUAMAATcg+AUnAAKULHMAApRccwAClEy6C0QEAAYLAAKUUwBOdKQDAAE1VgIwBAAGAwAClGsATnIMAwABN/ErAAKUjAYLAAKUqwBOdKT9KwAClNwEcwAClPpSD6wAAAADAAEzFBqsxYMAApUnAAKVNwACmaQAAhHIAAAABA8AApVjAAKZpAAAAAgECwAClYQAAIIG8YAOtyADAAKVvAAAAbWADwABMogFqwACld2ABwABNrAIAYAPAAEyiAT4DScAApYQiHMAApY6BwACliMATniCAjAEAASsAwABNxgEcwACln4HAAKWZwBOeIIFeAQABFsAApacugcjAAE12AMAATdM+AT2JwAClt8ATniAcwAClyxbAAKXELoHIwABNdoEGAQABlADAAE3JScAApdscwACl5YHAAKXfwBOeIIC7AQABkwDAAE3QPgFKwACl8gEcwACl+ZSD6wAAAADAAEzFP0XAAKYHAcAAphDAAKYSAACDZmADwABMogGBwACmFMATniABHMAAph2CwACmG8ATnu6BXgEAAZMAwABN0wGKwACmI8ATnu4cwACmJILAAKYjwBOe7oEGAQABlADAAE3JPgFJwACmMBzAAKY8HMAApjgugtEBAAGCwACmOcATnu4AwABNVYCMAQABgMAApj/AE54SAMAATfxKwACmSAGCwACmT8ATnu4/SsAAplwBHMAApmOUg+sAAAAAwABMxQarMmDAAKZuwACmdsAAptEAAIQvAAAAAQPAAKaAwACm0QAAAAAAAABgA63IAT4BPTDAAKaJH8AAppPAAEwwAQABJ4rHAAarM2DAAKbWwACm3sAAp0AAAIR1AAAAAQPAAKbmwACnQAAAAAEBAcAApusAAACB3WADwABMogAAYAOtyAE+AT0wwACm+B/AAKcCwABMMAEAASeKxwAGqzRgwACnRcAAp0rAAKfAAACDlQAAAAEDwACnVcAAp8AAAAABAQHAAKdbAAAAgRthAwFgA63IYAPAAErYAABcAT4BPTDAAKd4H8AAp4LAAEwwAQABJ4rHAAarNWDAAKfFwACnysAAqEAAAIOWAAAAAQPAAKfVwACoQAAAAAEBAcAAp9sAAACBG2EDAWADrchgA8AAStgAAFwBPgE9MMAAp/gfwACoAsAATDABAAEniscABqtBYMAAqEXAAKhRwACoqwEAgcIAAAABA8AAqFfAAKirAAAAAAAAAGADrcgBPgJJwACoXRzAAKhoFsAAqGEugcjAAE12gowBAAGTAMAATdJKwACobQEcwACoeC6C0QEAAZMAwABNVT89MMAAqIEewAConJb8AAAAAAarQmDAAKiwwACovMAAqR4BAIHVAAAAAQPAAKjBwACpHgAAAAAAAABgA63IAT4CScAAqMccwACo0hbAAKjLLoHIwABNdoKMAQABkwDAAE3SSsAAqNcBHMAAqOIugtEBAAEcwACo6hbAAKjjLoHIwABNdoEGAQABlADAAE3JAMAATVU/PTDAAKj0HsAAqQ+W/AAAAAAGq0NgwACpI8AAqS/AAKnGAQCB1wAAAAEDwACpNsAAqcYAAAAAAAAAYAOtyAE+A0nAAKk8HMAAqUcWwACpQC6ByMAATXaAjAEAAZQAwABNxkrAAKlNARzAAKlYLoLRAQABkwDAAE1VP0nAAKlhHMAAqWwWwACpZS6ByMAATXaAjAEAAZMAwABNxj0wwACpch7AAKmNlvwAAAAAPz0wwACpnh7AAKm5lv0AAAAABqs2YMAAqcvAAKnXwACqxAAAhGEAAAABA8AAqd7AAKrEAAAAAgECwACp4wAAAG1gA8AATKIAwACp7wAAAIRUYAPAAEyiAWoAYAHAAE2sAgBgA6yHAT4FPYnAAKn7wBOi4B7AAKoMwABL3wMAA4DAAKocwBOi0YHAAKojwBOi4BbAAKotLoHIwABNdgBOwACqPsAAqkUAAIHIYAPAAEyiARzAAKpLgcAAqkfAE6LggQYBAAGAwACqTcATotEAwABNyU7AAKpkwACqawAAgOZgA6yHARzAAKptLo4jnIYBAAGCwACqecATozcAnXU9HMAAqo2DwACqhsATo2yEWAQABJOCwACqmcATozcugMAAqqfAE6LRAMAATWtKwACqswGDwACqusATo2wGqzdgwACqycAAqs7AAKtNAACEeAAAAAEDwACq1MAAq00AAAACAgLAAKrZAAAAgd1gA8AATKIAwACq8gAAIIQiXQPAAE0EAWADrcgAAFwBPgJOwACrCMAAqwwAAYRUYAPAAEyiARzAAKseFsAAqxeBwACrDsATpAmByMAATSeBDQEAAYDAAKsgwBOj+QDAAE3IPRzAAKsrLoRYAwADgMAAqzTAE6P5gsAAqzvAE6QkgcAAq0DAE6QJAJ1+Bqs4YMAAq1LAAKtXwACsEAAAhGUAAAABA8AAq2DAAKwQAAAAAwIDwACrZQAAAG1gA8AATKIAwACrcAAAAIRUYAPAAEyiAMAAq34AACCKfmADrcgBagBgAcAATawCAFwBPgI9HsAAq5vAAEvfAwADgMAAq6vAE6S0gcAAq7LAE6TDFsAAq7wugcjAAE12AEXAAKvJAcAAq9LAAKvUAACDZmADwABMogGAwACr1sATpLQBHMAAq9+DwACr3cATpSGAuwEAAYHAAKvhwBOkwwDAAE3QAYvAAKvowBOlIRzAAKvmg8AAq+jAE6UhgQ0BAAGUAMAATcg+AT0cwACr9y6BDAIAAoPAAKv4wBOlIYLAAKv9wBOk0wDAAE1WAAATeAoAE3h0ABN4owATeNIAE3j/ABN5PgATeZQAE3n8ABN6WAATeuMAE3uJABN82gATfl4AE3+0ABOAuwATgkoAE4nlABOKTgATirIAE4scABOLgAATi+oAE4w0ABOMhAATjTYAE42AABON9gATjkIAE48uABOQmAATkcoAE5JBABOSvwATk8kAE5TSABOWWwATl/YAE5n/ABOaXQATmqwAE5sCABObYQATm8gAE5xcABOd6wATn6UAE5/qABOgPwAToJgAE6DxABOhagATof4AE6KqABOj0gATpI0AE6WnAAAANwKrR2DAAe8XwAHvN8AB82oDj4YBasAB7xhgA8AASp8DAAFgA6sJAAFgA6yHAAAGBqtKYMAB7+HAAe/pwAHwYAQFgIqchgJqwAHvrWADwABKn5upagBgA5QIm78AAAEDwAHv/MAB8GAAAAADAwPAAfAIAAAAgcFgA54AAMAB8BQAAACGnWADwABMogDAAfAnAAAAgchgA8AATKIAAGADq0cABqtMYMAB8JHAAfCiwAHxfQMAgtEAAAABA8AB8KTAAfF9AAAAAQEBwAHwqQAAAIHdYAPAAEyiAABgA63IAT4CScAB8LYiHMAB8MCAwAHwusATp1SAuwEAAZMAwABN0AEcwAHwzYDAAfDHwBOnVIFeAQABFsAB8NAugcinVQDAAE3TPgE9MMAB8OAfwAHw6sAAS/QDAAOAwAHw+8ATp1QuJ4HdAD9KwAHxHAEcwAHxNxbAAfEjLo9RnIanU45snIYBAAEcwAHxURbAAfFDLoadnWyBDQEAARzAAfFagMAB8VTAE6dUg8YBAAFqwAHxaGADwABMolQAwABNygDAAE3IAJ4fBqtNYMAB8YLAAfGQwAHyewMAgQwAAAABA8AB8ZPAAfJ7AAAAAgICwAHxmAAAAIHdYAPAAEyiAMAB8acAACAiYAOtyAAAXAE+AknAAfG0IhzAAfG+gMAB8bjAE6hWgLsBAAGTAMAATdABHMAB8cuAwAHxxcATqFaBXgEAARbAAfHOLoHIp1UAwABN0z4BPTDAAfHeH8AB8ejAAEv0AwADgMAB8fnAE6hWLieB3QA/PRzAAfIlFsAB8houj1GchqdTjm6chgIAAhzAAfJIFsAB8jouhp2dbIENAQABHMAB8lGAwAHyS8ATqFaDxgEAAWrAAfJfYAPAAEyiVADAAE3KAMAATciBwAHyccATqGYAniAGq1JgwAHyscAB8rnAAfL4AQCOFAAAAAEDwAHyzMAB8vgAAAAAAAAAYAPAAEyiAT4BSsAB8tIBasAB8uVgA8AATKJUBqtPYMAB8xzAAfMowAHzaAAAjiOchgAAAAEDwAHzM8AB82gAAAABAQHAAfM4AAAAgchgA8AATKIAAGADrIcBPgFKwAHzRgEewAHzUayLAQABgMAB813AE6mrAAarUGDAAe83wAHvNwAAEIRqAJyqnKoBAwAAAAAAAwMDAAAAAG1gA8AATKIAAAAAAIRUYAPAAEyiAAAAACCEIl0DwABNBAFbAABcAUoAAR0AhGoDAAOAAMATqf2BAMATqgmCAMATqhYAnKoAABOmuwATpy0AE6gvABOpPwATqYIAE6ndABOqRwAAAAYCq1NgwAHzbcAB843AAffeN4+IAAABYAOnTgABYAOdpgABBauEAAAAAAQAAAMAAAAAAAAAAABgA6tTAT8BCQAAp1cAAAAANwarVWDAAfONwAHzjQAAEIRqAJyqnKoBAwAAAAAAAwMDAAAAAG1gA8AATKIAAAAAAIRUYAPAAEyiAAAAACCEIl0DwABNBAFbAABcAUoAAR0AhGoDAAOAAMATqs+BAMATqtuCAMATqugAnKoGq4ZgwACsV8AArF/AAKxxAQKOFAAAAAEDwACsccAArHEAAAAAAAAAYAPAAEyiAAarh2DAAKx1wACsfcAArIoBAoadAAAAAQPAAKyKwACsigAAAAAAAABgA8AATKIABquIYMAArI7AAKyewACspAECgcEAAAABA8AArKTAAKykAAAAAAAAAGADneMABqtXYMAArKnAAKy3wACszgACjiOchgAAAAEDwACswsAArM4AAAABAQHAAKzHAAAAgchgA8AATKIAAGADrJIABqtYYMAArNPAAKzfwACtDwAAhAkAAAABA8AArOvAAK0PAAABAAAEIWADwABN7wFbAAAAAF0DwABNBAFfAwAAAUrAAKzxAR/AAKz1lu8BAV8DAAABLgAGq1lgwACtFMAArSjAAK2UAACECAAAAAEDwACtMsAArZQAAAABAQHAAK1HAAAggh1dA8AATQQBYAOu7AAAXQPAAE0EAWADruwBSsAArVcBHsAArVuWxwIBYAOu7AIugMAArY7AE6xgAAarWmDAAK2ZwACtocAArc8AAIHJAAAAAQPAAK2owACtzwAAAQAABENgA8AATe8BWwAAAABdA8AATUYBXwMAAAFKwACtrgEewACts8AATVEBAmADruxfAwAAAS4ABquPYMAArdPAAK3cwACuSwIAgcIAAAABA8AAreHAAK5LAAAAAQEBwACt7AAAICJgA67sAABcAT4CScAArfkcwACuCRbAAK4CLoHIwABNdoCMAQABkwDAAE3GPTDAAK4PH8AArhnAAEv0AgACky4APz0cwACuPC6BDAIAApOAwACuQsATrSQAwABNVgarkGDAAK5QwACuWcAArtUCAIHVAAAAAQPAAK5dwACu1QAAAAEBAcAArmgAACAiYAOu7AAAXAE+AknAAK51HMAAroUWwACufi6ByMAATXaAjAEAAZMAwABNxj0wwACuix/AAK6VwABL9AIAApMuAD89HMAArrgugQwCAAIcwACuxRbAAK6+LoHIwABNdoEGAQABlADAAE3JgMAArszAE62vAMAATVYGq1tgwACu2sAArt7AAK+dAACEcQAAAAEDwACu6MAAr50AAAACAQLAAK7uAAAAgRthAwFgA67sYAPAAErYAMAArwwAAABtYAPAAEyiAWrAAK8UYAPAAEyiGgBgA8AATKIBPgNJwACvHhzAAK8ogcAAryLAE65sgLsBAAGTAMAATdA9icAAry3AE65skz9FwACvPAHAAK9FwACvRwAAg2ZgA8AATKIBgcAAr0nAE65sARzAAK9SgsAAr1DAE67BgLsBAAEWwACvVC6ByMAATXYAwABN0AGKwACvXMATrsEcwACvXYLAAK9cwBOuwYENAQABlADAAE3IPgFJwACvaRzAAK9xgMAAr23AE65VbgEAARzAAK92LoLRAQABgsAAr3fAE67BAMAATVUAAErAAK98AYLAAK+DwBOuwT9KwACvkAEcwACvl5SD6wAAAADAAEzFBqtcYMAAr6LAAK+mwACwiwAAhHMAAAABA8AAr7TAALCLAAAAAgECwACvugAAAIEbYQMBYAOu7GADwABK2ADAAK/YAAAAbWADwABMogFqAGABwABNrAIAYAPAAEyiAT4DScAAr+YiHMAAr/CBwACv6sATr72AjAEAASsAwABNxgEcwACwAYHAAK/7wBOvvYFeAQABFsAAsAkugcjAAE12AMAATdM9icAAsBHAE6+9HMAAsCUWwACwHi6ByMAATXaBBgEAAZQAwABNyT9FwACwLgHAALA3wACwOQAAg2ZgA8AATKIBgcAAsDvAE6+9ARzAALBEgsAAsELAE7BQgV4BAAGTAMAATdMBisAAsErAE7BQHMAAsEuCwACwSsATsFCBBgEAAZQAwABNyT4BScAAsFccwACwX4DAALBbwBOvpm4BAAEcwACwZC6C0QEAAYLAALBlwBOwUADAAE1VAABKwACwagGCwACwccATsFA/SsAAsH4BHMAAsIWUg+sAAAAAwABMxQarXWDAALCQwACwqcAAsYgDAIENAAAAAQPAALCqwACxiAAAAAEBAcAAsLsAACCCHV0DwABNRgFgA67sAABdA8AATUYBYAOu7AE+Ak7AALDMwACw2AAAjh5gA8AATKIBHMAAsOYWwACw3y6ByMAATXaBDQEAARbAALDugMAAsOjAE7EqgcjAAE12AMAATchKwACw+gE1wACxDAAAAQBdA8AATUYBYAOu7AExwACxDGADruwANcAAsRcAAAEAXAEXwACxF4LAALEMwBOxmIHIgcAAsSDAE7FPwABNdDXAALE0AAABAFwBHMAAsTSCwACxDMATsZiEWAMAA5MWwACxRS6ByMAATXYuAMAATWs1wACxWwAAAQBcARzAALFbgsAAsQzAE7GYhFgDAAMWwACxaS6ByMAATXaBwACxccATsU+AwACxfsATsSoAwABNa4LAALEMwBOxmAarXmDAALGNwACxksAAsjEAAIHEAAAAAQPAALGawACyMQAAAAEBAcAAsaIAAACBvGADwABN7wAAYAPAAErYAT4DTsAAsbXAALG5AACOH2ADwABMogEWwACxwC6ByMAATXZFwACxzAHAALHVwACx1wAAg2ZgA8AATKIBkwEcwACx3oLAALHcwBOywIC7AQABgcAAseDAE7KbAMAATdABisAAsefAE7LAHMAAseWCwACx58ATssCBDQEAAZQAwABNyD4BScAAsfIcwACx/hzAALH6LoLRAQABgsAAsfvAE7LAAMAATVWAjAEAAYDAALIBwBOygADAAE38SsAAsgoBKT9KwACyIQEqBqtfYMAAsjbAALI7wACzJAAAhFwAAAABA8AAskLAALMkAAAAAQABwACySwAAAIRdYAOZQQFqAGABwABNrAIAXAE+Az0jHMAAsmGAwACyWsATs4eAjAEAASsAwABN/IjAALJawBOzhx7AALJpmUMAAAAAKwFgA5lBTsAAsnvAALJ9AACDZmADwABMogEWwACyhC6ByMAATXZDwACykBzAALKZgcAAspfAE7PZgowBAAGUAMAATdI+BU7AALKqwACyrgAAgQtgA8AATKIBHMAAsreAwACysMATs4eEXgEAAYHAALK/wBOz2QCZRj2JwACyycATs9kcwACyy4HAALLJwBOz2YEGAQABlADAAE3JTsAAstvAALLfAACEX2ADruwBHMAAsuUugtEBAAGBwACy5sATs9kAwABNVT0cwACy9C6BDAIAAoHAALL1wBOz2RzAALL+LoLRAQABgsAAsv/AE7QZAMAATVUAwABNVj0cwACzDy6BDAIAAoLAALMQwBO0GYPAALMXwBO0bwDA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wADG/S6C0QEAAYPAAMb+wBPJhgDAAE1VScAAxwgcwADHEIDAAMcMwBPJJ24BAAGEwADHEcATyfIAAD4BSsAAxyUBhMAAxyzAE8nyP0nAAMdHIRzAAMdSgcAAx0vAE8k/gIwBAAErAMAATfxKwADHWwEcwADHaIHAAMdiwBPJP24AAAAAAD89MMAAx3AewADHi5b8AAAAAAarc2DAAMefwADHqcAAybMAAIHbAAAAAQPAAMe0wADJswAAAAIBAcAAx7oAAACBG2EDAWADruxgA8AAStgAAcAAx94AACCB2WEDAGADruwBagBgAcAATawCYAOu7AE+B07AAMfzwADH+gAAgOZbAStOwADIC8AAyBkAAIQUYAPAAErYASpOwADIKsAAyC4AAI4fYAPAAEyiARbAAMg1LoHIwABNdkXAAMhBAcAAyErAAMhMAACDZmADwABMogGTARzAAMhThcAAyFHAE8tGgLsBAAGEwADIVcATyyEAwABN0AGNwADIXMATy0YcwADIWoXAAMhcwBPLRoENAQABlADAAE3IPgJOwADIa8AAyHMAAIG8YAOu7AEcwADIeS6C0QEAAYXAAMh6wBPLRgDAAE1VScAAyIQcwADIjIDAAMiIwBPKwm4BAAGGwADIjcATy6IAAD4DScAAyKGDwADIpcATyww+AT0wwADIwB7AAMjblv0AAAAAPz2KwADI+MATyvyGwADJAcATy6I9i8AAyRLAE8sMKT9JwADJOoPAAMk+wBPLDErAAMlNASbAAMlNBYLAAMlUwBPK/GADruw/ScAAyWAhHMAAyWuBwADJZMATytqAjAEAASsAwABN/ErAAMl0ARzAAMmBgcAAyXvAE8rabgAAAAAAPz0wwADJiR7AAMmklvwAAAAABqt0YMAAybjAAMnCwADJ8wAAgdwAAAABA8AAycvAAMnzAAAAAQEBwADJ0AAAAIHdYAPAAEyiAABgA67sAT4BSsAAyd0BHMAAyegugtEBAAGAwADJ6cATzMsAwABNVQardWDAAMn4wADJ/cAAylsAAICCAAAAAQPAAMoAwADKWwAAAAEBAcAAygsAACAiYAOu7AAAXAE+AT0wwADKGB/AAMoiwABMMAEAASeKxQAGq3ZgwADKYMAAymXAAMrQAACDawAAAAEDwADKa8AAytAAAAABAQHAAMqAAAAgIl0DwABNBAFg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VT89MMAA0UcewADRYpb8AAAAAAarjWDAANF2wADRhMAA0hsBAIHXAAAAAQPAANGLwADSGwAAAAAAAABgA67sAT4DScAA0ZEcwADRnBbAANGVLoHIwABNdoCMAQABlADAAE3GSsAA0aIBHMAA0a0ugtEBAAGTAMAATVU/ScAA0bYcwADRwRbAANG6LoHIwABNdoCMAQABkwDAAE3GPTDAANHHHsAA0eKW/AAAAAA/PTDAANHzHsAA0g6W/QAAAAAGq4BgwADSIMAA0i7AANMdAACEYQAAAAEDwADSNcAA0x0AAAACAQLAANI6AAAAbWADwABMogDAANJGAAAAhFRgA8AATKIBagBgAcAATawCAGADrJIBPgU9icAA0lLAE9WFHsAA0mPAAEvfAwADgMAA0nPAE9V2gcAA0nrAE9WFFsAA0oQugcjAAE12AE7AANKVwADSnAAAgchgA8AATKIBHMAA0qKBwADSnsAT1YWBBgEAAYDAANKkwBPVdgDAAE3JTsAA0r3AANLEAACA5mADrJIBHMAA0sYujiOchgEAAYLAANLSwBPV3ACdsj0cwADS5oPAANLfwBPWEYRYBAAEk4LAANLywBPV3C6AwADTAMAT1XYAwABNa0rAANMMAYPAANMTwBPWEQargWDAANMiwADTJ8AA06gAAIR4AAAAAQPAANMtwADTqAAAAAICAsAA0zIAAACB3WADwABMogDAANNNAAAghCJdA8AATQQBYAOu7AAAXAE+Ak7AANNjwADTZwABhFRgA8AATKIBHMAA03kWwADTcoHAANNpwBPWroHIwABNJ4ENAQABgMAA03vAE9aeAMAATcg9HMAA04YuhFgDAAOAwADTj8AT1p6CwADTlsAT1smBwADTm8AT1q4AnbsGq4JgwADTrcAA07LAANRtAACEZQAAAAEDwADTu8AA1G0AAAADAgPAANPAAAAAbWADwABMogDAANPLAAAAhFRgA8AATKIAwADT2wAAIIp+YAOu7AFqAGABwABNrAIAXAE+Aj0ewADT+MAAS98DAAOAwADUCMAT11mBwADUD8AT12gWwADUGS6ByMAATXYARcAA1CYBwADUL8AA1DEAAINmYAPAAEyiAYDAANQzwBPXWQEcwADUPIPAANQ6wBPXxoC7AQABgcAA1D7AE9doAMAATdABi8AA1EXAE9fGHMAA1EOD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AZMAwABN0AEcwAISdxzAAhJzgMACEmjAE/djgQ0BAAGWAMAATciBXgEAARbAAhJ6LoHIq6gAwABN0z4BPTDAAhKKH8ACEpTAAEvoBAAEgMACEqXAE/djkxzAAhK7FsACErQugcirqIEGAQABlwDAAE3JJ4+OAD9JwAIS2R7AAhLdwABGdQIAAoLAAhLnwBP3gmrAAhL2YAOr55wYAD4CPRzAAhMQFsACEwUuj1GchqumjmKchgIAAhzAAhMqFsACExwuhp2rp4ENAQABgMACEyzAE/djAMAATciBwAITOMAT93MAnhpKwAITRgA/PRzAAhNgGsACE1ici4EMAgACk4HAAhNmwBP3cwDAAE1WPRzAAhN8FsACE3Euj1GchqumjlachgIAAhzAAhOVFsACE4cuhp2rp4ENAQABgMACE5fAE/djAMAATcgewAITo5yQAQABHMACE7cawAITr5yJgtEBAAGTAMAATVUAAJ4UBqu8YMACE8XAAhPqwAIVkQAAj6IBasACE8ZgA8AASp+CugAAAQPAAhP0wAIVkQAAAAIBAsACE/kAAACPjmADwABMogDAAhQNAAAAj5NgA6vnAWrAAhQdYAOr55wQAGADwABLUAE+BEnAAhQpIhzAAhQ4gMACFC3AE/lagLsBAAGTAMAATdABHMACFE4cwAIUSoDAAhQ/wBP5WoENAQABNwcAwABNyIFeAQABFsACFFEugcirqADAAE3TPgE9MMACFGEfwAIUa8AAS+gEAASAwAIUfMAT+VqTHMACFJIWwAIUiy6ByKuogQYBAAE3CADAAE3JJ4+OAD9JwAIUsB7AAhS0wABGdQIAAoHAAhS+wBP5amrAAhTNYAOr55wYAD4BSsACFNwBHMACFO4WwAIU4y6PUZyGq6aOZJyGAQABHMACFQgWwAIU+i6GnaungQ0BAAGAwAIVCsAT+VoAwABNyACeGz89HMACFSkawAIVIZyKgQwCAAKTHsACFTeckQEAARzAAhVOFsACFUMuj1GchqumjlychgEAARzAAhVnFsACFVkuhp2rp4ENAQABgMACFWnAE/laAMAATcgAnhcAAMAATVZKwAIVewEcwAIVihrAAhWCnIyC0QEAAZMAwABNVQarvWDAAhWWwAIVucACF3QAAI+jAWrAAhWXYAPAAEqfgroAAAEDwAIVw8ACF3QAAAADAgPAAhXIAAAAj45gA8AATKIAwAIV2wAAACJgA8AAS1AAwAIV6gAAAI+TYAOr5wFqwAIV+mADq+ecEABcAT4EScACFgYiHMACFhWAwAIWCsAT+zuAuwEAAZMAwABN0AEcwAIWKxzAAhYngMACFhzAE/s7gQ0BAAE3BwDAAE3IgV4BAAEWwAIWLi6ByKuoAMAATdM+AT0wwAIWPh/AAhZIwABL6AQABIDAAhZZwBP7O5McwAIWbxbAAhZoLoHIq6iBBgEAATcIAMAATcknj44AP0nAAhaNHsACFpHAAEZ1AgACgsACFpvAE/taasACFqpgA6vnnBgAPgI9HMACFsQWwAIWuS6PUZyGq6aOZpyGAgACHMACFt4WwAIW0C6GnaungQ0BAAGAwAIW4MAT+zsAwABNyIHAAhbswBP7SwCeHErAAhb6AD89HMACFxQawAIXDJyMgQwCAAKTgcACFxrAE/tLAMAATVY9HMACFzAWwAIXJS6PUZyGq6aOXpyGAgACHMACF0kWwAIXOy6GnaungQ0BAAGAwAIXS8AT+zsAwABNyB7AAhdXnJEBAAEcwAIXaxrAAhdjnIqC0QEAAZMAwABNVQAAnhgGq75gwAIXecACF4PAAhjLAACPpAAAAAEDwAIXj8ACGMsAAAACAQLAAheUAAAAj45gA8AATKIAwAIXqAAAAI+TYAOr5wFqwAIXuGADq+ecEABgA6ydAT4CScACF8QiHMACF9OAwAIXyMAT/SeAuwEAAZMAwABN0AEcwAIX6RzAAhflgMACF9rAE/0ngQ0BAAGWAMAATciBXgEAARbAAhfsLoHIq6gAwABN0z4BPTDAAhf8H8ACGAbAAEvoBAAEgMACGBfAE/0nkxzAAhgtFsACGCYugcirqIEGAQABlwDAAE3JJ4+OAD9KwAIYjAEcwAIYnhbAAhiTLo9RnIarpo5onIYBAAEcwAIYuhbAAhisLoadq6eBDQEAAYDAAhi8wBP9JwDAAE3IAJ4dBqu/YMACGNDAAhjVwAIaNAAAj6UAAAABA8ACGOHAAho0AAAAAwIDwAIY5gAAAI+OYAPAAEyiAMACGPwAAAAiYAOsnQDAAhkRAAAAj5NgA6vnAWrAAhkhYAOr55wQAFwBPgJJwAIZLSIcwAIZPIDAAhkxwBP+UYC7AQABkwDAAE3QARzAAhlSHMACGU6AwAIZQ8AT/lGBDQEAAZYAwABNyIFeAQABFsACGVUugcirqADAAE3TPgE9MMACGWUfwAIZb8AAS+gEAASAwAIZgMAT/lGTHMACGZYWwAIZjy6ByKuogQYBAAGXAMAATcknj44APz0cwAIaABbAAhn1Lo9RnIarpo5qnIYCAAIcwAIaHBbAAhoOLoadq6eBDQEAAYDAAhoewBP+UQDAAE3IgcACGirAE/5hAJ4eBqumYMACGjnAAhqPwAIaugEEj1GchgNqwAIaOmADwABKn5m+asACGmNgA8AASp+CumoAYAOUCJnTAAABA8ACGprAAhq6AAAAAAAAAGADngAABqunYMACGr/AAhsZwAIbSwEEhp0DasACGsBgA8AASp+DcmrAAhr0YAPAAEqfgrpqAGADlAiZ3wAAAQPAAhsnwAIbSwAAAAAAAABgA8AATKIABquoYMACG1DAAhuqwAIbzgEEgcgDasACG1FgA8AASp+DcmrAAhuFYAPAAEqfgrpqAGADlAiZ6wAAAQPAAhuxwAIbzgAAAAAAAABgA8AATKIAAAAT3T4AE92wABPd+gAT3jsAE95zABPfaQAT4G0AE+FjABPiZwAT5BEAE+WVABPnLgAT6LIAE+pcABPr4AAT7XkAE+79ABPwqQAT8i8AE/PKABP1UAAT9y8AE/kmABP7BwAT/QAAE/4qABP/YgAT/7MAFAAEABQAVQAAAB0Cq8Bfgu+C/rcgB4tBAAABYAPAAE3vAAAAAQWr1AAAAAAEAAADAAAAAAAAAAAAYAOrwAE/AQkBAMAATgUAAAAAEAarwl+DUINYg2UBAo4ZAAAAAQODZYNlAAAAAAAAAGADwABMogAGq8RfheSF7oYeAAKOMQAAAAEDhfmGHgAAAAIAAoX/AAAAhp1gA8AATKIBaoYPYAPAAEyiGoYWAAAAgchgA8AATKIBagBgAcAATawCAGADrBcABqvFX4ibiKSI0wACjjAAAAABA4iuiNMAAAACAAKItAAAAIadYAPAAEyiAWqIxGADwABMohqIywAAAIHIYAPAAEyiAWoAYAHAAE2sAgBgA6wNAAarxl+LYItxi6gAAo4yAAAAAQOLg4uoAAAAAgACi4kAAACGnWADwABMogFqi5lgA8AATKIai6AAAACByGADwABMogFqAGABwABNrAIAYAOsIgAGq8dfjwyPF49IAAKONAAAAAEDjyOPSAAAAAIAAo8pAAAAhp1gA8AATKIBao85YAPAAEyiGo9AAAAAgchgA8AATKIBagBgAcAATawCAGADrDYABqvIX5KqkrSS5AACjjMAAAABA5K/kuQAAAACAAKSxQAAAIadYAPAAEyiAWqS1WADwABMohqS3AAAAIHIYAPAAEyiAWoAYAHAAE2sAgBgA6wsAAaryV+WXJZnlpgAAo42AAAAAQOWc5aYAAAAAgAClnkAAACGnWADwABMogFqlolgA8AATKIalpAAAACByGADwABMogFqAGABwABNrAIAYAOsSgAGq8pfmg6aGJpIAAKONQAAAAEDmiOaSAAAAAIAApopAAAAhp1gA8AATKIBapo5YAPAAEyiGppAAAAAgchgA8AATKIBagBgAcAATawCAGADrEAABqvLX53Cnc2d/gACjjgAAAABA53Znf4AAAACAAKd3wAAAIadYAPAAEyiAWqd72ADwABMohqd9gAAAIHIYAPAAEyiAWoAYAHAAE2sAgBgA6xeAAarzF+hdqGAobAAAo43AAAAAQOhi6GwAAAAAgACoZEAAACGnWADwABMogFqoaFgA8AATKIaoagAAACByGADwABMogFqAGABwABNrAIAYAOsVAAGq81fpS+lO6VtAAKOPAAAAAEDpUilbQAAAAIAAqVOAAAAhp1gA8AATKIBaqVeYAPAAEyiGqVlAAAAgchgA8AATKIBagBgAcAATawCAGADrIcABqvOX6jnqPOpJQACjjkAAAABA6kAqSUAAAACAAKpBgAAAIadYAPAAEyiAWqpFmADwABMohqpHQAAAIHIYAPAAEyiAWoAYAHAAE2sAgBgA6xoAAarz1+soaytrN8AAo46AAAAAQOsuqzfAAAAAgACrMAAAACGnWADwABMogFqrNBgA8AATKIarNcAAACByGADwABMogFqAGABwABNrAIAYAOscgAGq9BfsGKwcLCkAAKOOwAAAAEDsH+wpAAAAAIAArCFAAAAhp1gA8AATKIBarCVYAPAAEyiGrCcAAAAgchgA8AATKIBagBgAcAATawCAGADrHwABqvRX7QntDW0aQACjj0AAAABA7REtGkAAAACAAK0SgAAAIadYAPAAEyiAWq0WmADwABMohq0YQAAAIHIYAPAAEyiAWoAYAHAAE2sAgBgA6ySAAar0l+25rbvtx4AAo4vAAAAAQO2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q9IGq/lfwABOgcAAToXAAE6cAAKPjQAAAAEDwABOjMAATpwAAAABAQHAAE6RAAAAj45gA8AATKIAAGADwABMogAGq/pfwABQIsAAUCfAAFBJAAKPjwAAAAEDwABQLsAAUEkAAAACAgLAAFAzAAAAj45gA8AATKIAwABQQwAAACJgA8AATKIAAFwABqv7X8AAUZjAAFGcwABRtAACj5AAAAABA8AAUaTAAFG0AAAAAQEBwABRqQAAAI+OYAPAAEyiAABgA8AATKIABqv8X8AAUy/AAFM0wABTVwACj5EAAAABA8AAUzzAAFNXAAAAAgICwABTQQAAAI+OYAPAAEyiAMAAU1EAAAAiYAPAAEyiAABcAAar/V/AAFTtwABU8cAAVScAAo+SAAAAAQPAAFT5wABVJwAAAAIBAsAAVP4AAACPjmADwABMogDAAFUSAAAAj5NgA6vnAWrAAFUiYAOr55wQAGADwABMogAGq/5fwABW38AAVuTAAFclAAKPlQAAAAEDwABW7MAAVyUAAAADAgPAAFbxAAAAj45gA8AATKIAwABXAQAAACJgA8AATKIAwABXEAAAAI+TYAOr5wFqwABXIGADq+ecEABcAAar/1/AAFifwABYo8AAWNoAAo+WAAAAAQPAAFiswABY2gAAAAIBAsAAWLEAAACPjmADwABMogDAAFjFAAAAj5NgA6vnAWrAAFjVYAOr55wQAGADwABMogAGrABfwABae8AAWoDAAFrCAAKPlwAAAAEDwABaicAAWsIAAAADAgPAAFqOAAAAj45gA8AATKIAwABangAAACJgA8AATKIAwABarQAAAI+TYAOr5wFqwABavWADq+ecEABcAAasAV/AAFxZwABcXcAAXJMAAo+YAAAAAQPAAFxlwABckwAAAAIBAsAAXGoAAACPjmADwABMogDAAFx+AAAAj5NgA6vnAWrAAFyOYAOr55wQAGADwABMogAGrAJfwABeTcAAXlLAAF6TAAKPmQAAAAEDwABeWsAAXpMAAAADAgPAAF5fAAAAj45gA8AATKIAwABebwAAACJgA8AATKIAwABefgAAAI+TYAOr5wFqwABejmADq+ecEABcAAasA1/AAGAOwABgEsAAYEkAAo+aAAAAAQPAAGAbwABgSQAAAAIBAsAAYCAAAACPjmADwABMogDAAGA0AAAAj5NgA6vnAWrAAGBEYAOr55wQAGADwABMogAGrARfwABh7MAAYfHAAGIzAAKPmwAAAAEDwABh+sAAYjMAAAADAgPAAGH/AAAAj45gA8AATKIAwABiDwAAACJgA8AATKIAwABiHgAAAI+TYAOr5wFqwABiLmADq+ecEABcAAasBV/AAGPLwABjz8AAZAUAAo+cAAAAAQPAAGPXwABkBQAAAAIBAsAAY9wAAACPjmADwABMogDAAGPwAAAAj5NgA6vnAWrAAGQAYAOr55wQAGADwABMogAGrAZfwABlwcAAZcbAAGYHAAKPnQAAAAEDwABlzsAAZgcAAAADAgPAAGXTAAAAj45gA8AATKIAwABl4wAAACJgA8AATKIAwABl8gAAAI+TYAOr5wFqwABmAmADq+ecEABcAAasB1/AAGeDwABnh8AAZ74AAo+eAAAAAQPAAGeQwABnvgAAAAIBAsAAZ5UAAACPjmADwABMogDAAGepAAAAj5NgA6vnAWrAAGe5YAOr55wQAGADwABMogAGrAhfwABpY8AAaWjAAGmqAAKPnwAAAAEDwABpccAAaaoAAAADAgPAAGl2AAAAj45gA8AATKIAwABphgAAACJgA8AATKIAwABplQAAAI+TYAOr5wFqwABppWADq+ecEABcAAasCV/AAGr9wABrBMAAazwAAo+gAAAAAQPAAGsOwABrPAAAAAIBAsAAaxMAAACPjmADwABMogDAAGsnAAAAj5NgA6vnAWrAAGs3YAOr55wQAGADwABLUAAGrApfwABuzcAAbtLAAG8YAAKPoQAAAAEDwABu3MAAbxgAAAADAgPAAG7hAAAAj45gA8AATKIAwABu9AAAACJgA8AAS1AAwABvAwAAAI+TYAOr5wFqwABvE2ADq+ecEABcAAasC1/AAHBswABwc8AAcKsAAo+iAAAAAQPAAHB9wABwqwAAAAIBAsAAcIIAAACPjmADwABMogDAAHCWAAAAj5NgA6vnAWrAAHCmYAOr55wQAGADwABLUAAGrAxfwAByAMAAcgXAAHJLAAKPowAAAAEDwAByD8AAcksAAAADAgPAAHIUAAAAj45gA8AATKIAwAByJwAAACJgA8AAS1AAwAByNgAAAI+TYAOr5wFqwAByRmADq+ecEABcAAAAFAlNABQJ7gAUCp4AFAs+ABQM0gAUDREAFA1aABQNmQAUDeIA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AMAATc0ATsAAzI7AAMyZAACPu2ADwABMogEcwADMqRzAAMyggsAAzJzAFChcgQYBAAGBwADMosAUKEEAwABNyYPGAQABg8AAzKvAFCh+AMAATcpJwADMvCEcwADM3RzAAMzLhMAAzMDAFCj3hngBAAFqwADMzWADwABMohYAwABNy4CMAQABkwDAAE3GPgE9MMAAzOsfwADM8cAAS9EBAAEcwADNNCePvIENAQABJMAAzVIBasAAzUJgA8AATKIWAMAATp4AP0rAAM1fARzAAM1yFsAAzWuAwADNZsAUKDSBwavajjQCAAIcwADNkhbAAM2EgMAAzX/AFCg0hp2r2IENAQABHMAAzZqBwADNlMAUKEGDxgEAAYPAAM2cwBQofgDAAE3KAMAATcgcwADNvITAAM2xwBQo94aSAQABasAAzb9gA8AATKIWAMAATc0Aq8cGrD9fwADQ+8AA0QbAANEjAAKEYQAAAAEDwADRDcAA0SMAAAACAQLAANESAAAAbWADwABMogDAANEeAAAAhFRgA8AATKIBagBgAcAATawCAGADrDYAAAAUJjcAFCaVABQnYgAUKAIAFCpCABQqlwAAAAUCrEBfwADS8MAA0v/AAOUSB4muAWrAANL/YAOT+iYAAWADwABN7wACXQPAAE1GAWADwABMomADq90BBKxCX8AA5P3AAOUQBo+0AGADwABMogFqwADlD2ADwABMohgABQasRGDAARdwwAEXeMABF68EBQADasABF3hgA5P6JmrAARd4YAPAAEqfnNpqwAEXeGADlAic8AAAAQPAAReBwAEXrwAAAAEBAcABF4YAAACByGADwABMogAAYAOsQAAGrEVgwAEXvcABF8XAARhKBAGMAAFqwAEXxWADk/omAAABA8ABF9fAARhKAAAAAQEBwAEX4gAAAIETXQPAAE1GAWADwABMogAAYAOsQAE+AUrAARfyATXAARf9AAABAGADrEABHsABF/2sRAEAARbAARgQgMABGAfAFCuigcjAAE12ADXAARggAAABAFwBHMABGCCBwAEX/cAUK8iEWAMAA5MWwAEYNYDAARgswBQrooHIwABNdoDAARg9wBQrogDAAE1rgcABF/3AFCvIBqxGX8AA24bAANuOwADcFQQBj7AAAAABA8AA25zAANwVAAAAAwEDwADbqAAAAIHBYAOrwADAANu7AAAAhp1gA8AATKIBasAA28tgA8AATKIawADb0gAAAIHIYAPAAEyiAWoAYAHAAE2sAgBgA6xAAT4BSsAA2+EBHMAA2++AwADb6MAULGWONQIAAoHAANv7wBQsc4LAANwKwBQsjwCrygasR1/AAN93wADff8AA4ZoEAY+xAWrAAN9oYAOUDZR/AAABA8AA35TAAOGaAAAAAwEDwADfnwAAADtgA6vVAMAA36oAAABtYAPAAEyiAWrAAN+yYAPAAEyiGsAA37kAAACEVGADwABMogFqAGABwABNrAIAYAOsQAE+BU7AAN/JwADf1QAAj7JgA8AATKIBFsAA39yAwADf18AULRCOFKvXPYrAAN/0wBQtOB7AAOAFwABL3wMAA4HAAOAewBQtHYLAAOAlwBQtOBzAAOA9FsAA4C+AwADgKsAULRCOGavZhpIBAAGDwADgQMAULVoAwABNzQBOwADgVsAA4GEAAI+7YAPAAEyiARzAAOBxHMAA4GiCwADgZMAULTiBBgEAAYHAAOBqwBQtHQDAAE3Jg8YBAAGDwADgc8AULVoAwABNyknAAOCEIRzAAOClHMAA4JOEwADgiMAULdOGeAEAAWrAAOCVYAPAAEyiGADAAE3LgIwBAAGTAMAATcY+AT0wwADgsx/AAOC5wABL0QEAARzAAOD8J4+8gQ0BAAEkwADhGgFqwADhCmADwABMohgAwABOngA/SsAA4ScBHMAA4ToWwADhM4DAAOEuwBQtEIHBq9qONQIAAhzAAOFZFsAA4UuAwADhRsAULRCGnavYgQ0BAAEcwADhYYHAAOFbwBQtHYPGAQABg8AA4WPAFC1aAMAATcoAwABNyBzAAOGDhMAA4XjAFC3ThpIBAAFqwADhhmADwABMohgAwABNzQCrygasSV/AAOTAwADkysAA5OcAAoRhAAAAAQPAAOTRwADk5wAAAAIBAsAA5NYAAABtYAPAAEyiAMAA5OIAAACEVGADwABMogFqAGABwABNrAIAYAOsQAAAABQrEwAUK3EAFCw+ABQs3gAULx4AFC9zAAAABQKsSl/AAOaewADmrcAA+OYHg0oBasAA5q1gA5P6JgABYAPAAE3vAAJdA8AATUYBYAPAAEyiYAOr3QEErExfwAD40cAA+OQGj7QAYAPAAEyiAWrAAPjjYAPAAEyiGAAFBqxOYMABHNXAARzdwAEdFgQFAANqwAEc3WADk/omasABHN1gA8AASp+c/mrAARzdYAOUCJ0UAAABA8ABHOfAAR0WAAAAAQEBwAEc7AAAAIHIYAPAAEyiAABgA6xKAAasT2DAAR0kwAEdLMABHbMEAYwAAWrAAR0sYAOT+iYAAAEDwAEdP8ABHbMAAAABAQHAAR1KAAAAgRNdA8AATUYBYAPAAEyiAABgA6xKAT4BSsABHVoBNcABHWUAAAEAYAOsSgEewAEdZaxOAQABFsABHXmAwAEdcMAUMH6ByMAATXYANcABHYkAAAEAXAEcwAEdiYHAAR1lwBQwpIRYAwADkxbAAR2egMABHZXAFDB+gcjAAE12gMABHabAFDB+AMAATWuBwAEdZcAUMKQGrFBfwADvU8AA71vAAO/kBAGPsAAAAAEDwADvasAA7+QAAAADAQPAAO92AAAAgcFgA6vAAMAA74kAAACGnWADwABMogFqwADvmWADwABMohrAAO+gAAAAgchgA8AATKIBagBgAcAATawCAGADrEoBPgFKwADvrwEcwADvvYDAAO+2wBQxQY42AgACgcAA78rAFDFPgsAA79nAFDFrAKvJBqxRX8AA80bAAPNOwAD1awQBj7EBasAA8zdgA5QNlH8AAAEDwADzZMAA9WsAAAADAQPAAPNvAAAAO2ADq9UAwADzegAAAG1gA8AATKIBasAA84JgA8AATKIawADziQAAAIRUYAPAAEyiAWoAYAHAAE2sAgBgA6xKAT4FTsAA85nAAPOlAACPsmADwABMogEWwADzrIDAAPOnwBQx7I4Uq9c9isAA88TAFDIUHsAA89XAAEvfAwADgcAA8+7AFDH5gsAA8/XAFDIUHMAA9A0WwADz/4DAAPP6wBQx7I4Zq9mGkgEAAYPAAPQQwBQyNgDAAE3NAE7AAPQmwAD0MQAAj7tgA8AATKIBHMAA9EEcwAD0OILAAPQ0wBQyFIEGAQABgcAA9DrAFDH5AMAATcmDxgEAAYPAAPRDwBQyNgDAAE3KScAA9FQhHMAA9HUcwAD0Y4TAAPRYwBQyr4Z4AQABasAA9GVgA8AATKIYAMAATcuAjAEAAZMAwABNxj4BPTDAAPSDH8AA9InAAEvRAQABHMAA9Mwnj7yBDQEAASTAAPTqAWrAAPTaYAPAAEyiGADAAE6eAD9KwAD09wEcwAD1ChbAAPUDgMAA9P7AFDHsgcGr2o42AgACHMAA9SoWwAD1HIDAAPUXwBQx7Iadq9iBDQEAARzAAPUygcAA9SzAFDH5g8YBAAGDwAD1NMAUMjYAwABNygDAAE3IHMAA9VSEwAD1ScAUMq+GkgEAAWrAAPVXYAPAAEyiGADAAE3NAKvJBqxTX8AA+JPAAPiewAD4uwAChGEAAAABA8AA+KXAAPi7AAAAAgECwAD4qgAAAG1gA8AATKIAwAD4tgAAAIRUYAPAAEyiAWoAYAHAAE2sAgBgA6xKAAAAFC/vABQwTQAUMRoAFDG6ABQz+gAUNE8AAAAFAqxUX8AA+pvAAPqqwAEMvgePwAFqwAD6qmADk/omAAFgA8AATe8AAl0DwABNRgFgA8AATKJgA6vdAQSsVl/AAQypwAEMvAaPtABgA8AATKIBasABDLtgA8AATKIcAAUGrFhgwAEiUMABIljAASKPBAUAA2rAASJYYAOT+iZqwAEiWGADwABKn50iasABIlhgA5QInTgAAAEDwAEiYcABIo8AAAABAQHAASJmAAAAgchgA8AATKIAAGADrFQABqxZYMABIp3AASKlwAEjKgQBjAABasABIqVgA5P6JgAAAQPAASK3wAEjKgAAAAEBAcABIsIAAACBE10DwABNRgFgA8AATKIAAGADrFQBPgFKwAEi0gE1wAEi3QAAAQBgA6xUAR7AASLdrFgBAAEWwAEi8IDAASLnwBQ1WoHIwABNdgA1wAEjAAAAAQBcARzAASMAgcABIt3AFDWAhFgDAAOTFsABIxWAwAEjDMAUNVqByMAATXaAwAEjHcAUNVoAwABNa4HAASLdwBQ1gAasWl/AAQMxwAEDOcABA8AEAY+wAAAAAQPAAQNHwAEDwAAAAAMBA8ABA1MAAACBwWADq8AAwAEDZgAAAIadYAPAAEyiAWrAAQN2YAPAAEyiGsABA30AAACByGADwABMogFqAGABwABNrAIAYAOsVAE+AUrAAQOMARzAAQOagMABA5PAFDYdjjcCAAKBwAEDpsAUNiuCwAEDtcAUNkcAq8wGrFtfwAEHI8ABByvAAQlGBAGPsQFqwAEHFGADlA2UfwAAAQPAAQdAwAEJRgAAAAMBA8ABB0sAAAA7YAOr1QDAAQdWAAAAbWADwABMogFqwAEHXmADwABMohrAAQdlAAAAhFRgA8AATKIBagBgAcAATawCAGADrFQBPgVOwAEHdcABB4EAAI+yYAPAAEyiARbAAQeIgMABB4PAFDbIjhSr1z2KwAEHoMAUNvAewAEHscAAS98DAAOBwAEHysAUNtWCwAEH0cAUNvAcwAEH6RbAAQfbgMABB9bAFDbIjhmr2YaSAQABg8ABB+zAFDcSAMAATc0ATsABCALAAQgNAACPu2ADwABMogEcwAEIHRzAAQgUgsABCBDAFDbwgQYBAAGBwAEIFsAUNtUAwABNyYPGAQABg8ABCB/AFDcSAMAATcpJwAEIMCEcwAEIURzAAQg/hMABCDTAFDeLhngBAAFqwAEIQWADwABMohwAwABNy4CMAQABkwDAAE3GPgE9MMABCF8fwAEIZcAAS9EBAAEcwAEIqCePvIENAQABJMABCMYBasABCLZgA8AATKIcAMAATp4AP0rAAQjTARzAAQjmFsABCN+AwAEI2sAUNsiBwavajjcCAAIcwAEJBRbAAQj3gMABCPLAFDbIhp2r2IENAQABHMABCQ2BwAEJB8AUNtWDxgEAAYPAAQkPwBQ3EgDAAE3KAMAATcgcwAEJL4TAAQkkwBQ3i4aSAQABasABCTJgA8AATKIcAMAATc0Aq8wGrF1fwAEMbMABDHbAAQyTAAKEYQAAAAEDwAEMfcABDJMAAAACAQLAAQyCAAAAbWADwABMogDAAQyOAAAAhFRgA8AATKIBagBgAcAATawCAGADrFQAAAAUNMsAFDUpABQ19gAUNpYAFDjWABQ5KwAAAAUCrF5fwAEOVMABDmPAASCeB4/CAWrAAQ5jYAOT+iYAAWADwABN7wACXQPAAE1GAWADwABMomADq90BBKxgX8ABIInAASCcBo+0AGADwABMogFqwAEgm2ADwABMohwABQasYmDAASevwAEnt8ABJ/AEBQADasABJ7dgA5P6JmrAASe3YAPAAEqfnUZqwAEnt2ADlAidXAAAAQPAASfBwAEn8AAAAAEBAcABJ8YAAACByGADwABMogAAYAOsXgAGrGNgwAEn/sABKAbAASiNBAGMAAFqwAEoBmADk/omAAABA8ABKBnAASiNAAAAAQEBwAEoJAAAAIETXQPAAE1GAWADwABMogAAYAOsXgE+AUrAASg0ATXAASg/AAABAGADrF4BHsABKD+sYgEAARbAAShTgMABKErAFDo2gcjA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AE3KScABMAchHMABMCgcwAEwFoTAATALwBRBQ4Z4AQABasABMBhgA8AATKIYAMAATcuAjAEAAZMAwABNxj4BPTDAATA2H8ABMDzAAEvRAQABHMABMH8nj7yBDQEAASTAATCdAWrAATCNYAPAAEyiGADAAE6eAD9KwAEwqgEcwAEwvRbAATC2gMABMLHAFECAgcGr2o45AgACHMABMN4WwAEw0IDAATDLwBRAgIadq9iBDQEAARzAATDmgcABMODAFECNg8YBAAGDwAEw6MAUQMoAwABNygDAAE3IHMABMQiEwAEw/cAUQUOGkgEAAWrAATELYAPAAEyiGADAAE3NAKvOBqxxX8ABNErAATRWwAE0cwAChGEAAAABA8ABNF3AATRzAAAAAgECwAE0YgAAAG1gA8AATKIAwAE0bgAAAIRUYAPAAEyiAWoAYAHAAE2sAgBgA6xoAAAAFD6DABQ+4QAUP64AFEBOABRCjgAUQuMAAAAFAqxyX8ABNa3AATW8wAFHgwePxgFqwAE1vGADk/omAAFgA8AATe8AAl0DwABNRgFgA8AAS1BgA6viAQSsdF/AAUduwAFHgQaPtABgA8AATKIBasABR4BgA8AATKIcAAUGrHZgwAEy9sABMv7AATM5BAUAA2rAATL+YAOT+iZqwAEy/mADwABKn52OasABMv5gA5QInaQAAAEDwAEzCcABMzkAAAABAQHAATMOAAAAgchgA8AATKIAAGADrHIABqx3YMABM0fAATNPwAEz2wQBjAABasABM09gA5P6JgAAAQPAATNjwAEz2wAAAAEBAcABM3EAAACBE10DwABNRgFgA8AAS1AAAGADrHIBPgFKwAEzgQE1wAEzjAAAAQBgA6xyAR7AATOMrHYBAAEWwAEzoYDAATOYwBRD7oHIwABNdgA1wAEzsQAAAQBcARzAATOxgcABM4zAFEQUhFgDAAOTFsABM8aAwAEzvcAUQ+6ByMAATXaAwAEzzsAUQ+4AwABNa4HAATOMwBREFAaseF/AAT3mwAE97sABPnkEAY+wAAAAAQPAAT3+wAE+eQAAAAMBA8ABPgoAAACBwWADq8AAwAE+HQAAAIadYAPAAEyiAWrAAT4tYAPAAEyiGsABPjQAAACByGADwABMogFqAGABwABNrAIAYAOscgE+AUrAAT5DARzAAT5RgMABPkrAFESxjjoCAAKBwAE+X8AURL+CwAE+bsAURNsAq88GrHlfwAFB3cABQeXAAUQEBAGPsQFqwAFBzmADlA2UfwAAAQPAAUH8wAFEBAAAAAMBA8ABQgcAAAA7YAOr1QDAAUISAAAAbWADwABMogFqwAFCGmADwABMohrAAUIhAAAAhFRgA8AATKIBagBgAcAATawCAGADrHIBPgVOwAFCMcABQj0AAI+yYAPAAEyiARbAAUJEgMABQj/AFEVcjhSr1z2KwAFCXMAURYQewAFCbcAAS98DAAOBwAFChsAURWmCwAFCjcAURYQcwAFCpRbAAUKXgMABQpLAFEVcjhmr2YaSAQABg8ABQqjAFEWmAMAATc0ATsABQr7AAULJAACPu2ADwABMogEcwAFC2RzAAULQgsABQszAFEWEgQYBAAGBwAFC0sAURWkAwABNyYPGAQABg8ABQtvAFEWmAMAATcpJwAFC7CEcwAFDDRzAAUL7hMABQvDAFEYfhngBAAFqwAFC/WADwABMohwAwABNy4CMAQABkwDAAE3GPgE9MMABQxsfwAFDIcAAS9EBAAEcwAFDZCePvIENAQABJMABQ4IBasABQ3JgA8AATKIcAMAATp4AP0rAAUOPARzAAUOiFsABQ5uAwAFDlsAURVyBwavajjoCAAIcwAFDwxbAAUO1gMABQ7DAFEVchp2r2IENAQABHMABQ8uBwAFDxcAURWmDxgEAAYPAAUPNwBRFpgDAAE3KAMAATcgcwAFD7YTAAUPiwBRGH4aSAQABasABQ/BgA8AATKIcAMAATc0Aq88GrHtfwAFHL8ABRzvAAUdYAAKEYQAAAAEDwAFHQsABR1gAAAACAQLAAUdHAAAAbWADwABMogDAAUdTAAAAhFRgA8AATKIBagBgAcAATawCAGADrHIAAAAUQ18AFEO9ABREigAURSoAFEdqABRHvwAAAAUCrHxfwAFIacABSHjAAVt+B4/IAWrAAUh4YAOT+iYAAWADwABN7wACXQPAAE1GAWADrJ1gA6vVAQSsfl/AAVtowAFbfAaPtABgA8AATKIBasABW3pgA8AATKJUAAYGrIBgwAE4zcABONXAATkUBAUAA2rAATjVYAOT+iZqwAE41WADwABKn52yasABONVgA5QIncgAAAEDwAE44sABORQAAAABAQHAATjnAAAAgchgA8AATKIAAGADrHwABqyBYMABOSLAATkqwAE5vQQBjAABasABOSpgA5P6JgAAAQPAATlAwAE5vQAAAAEBAcABOVEAAACBE10DwABNRgFgA6ydAABgA6x8AT4BSsABOWEBNcABOWwAAAEAYAOsfAEewAE5bKyAAQABFsABOYOAwAE5esAUSMiByMAATXYANcABOZMAAAEAXAEcwAE5k4HAATlswBRI7IRYAwADkxbAATmogMABOZ/AFEjIgcjAAE12gMABObDAFEjIAMAATWuBwAE5bMAUSOwGrIJfwAFQusABUMLAAVFRBAGPsAAAAAEDwAFQ1MABUVEAAAADAQPAAVDgAAAAgcFgA6vAAMABUPMAAACGnWADwABMogFqwAFRA2ADwABMohrAAVEKAAAAgchgA8AATKIBagBgAcAATawCAGADrHwBPgFKwAFRGQEcwAFRJ4DAAVEgwBRJiY47AgACgcABUTfAFEmXgsABUUbAFEmzAKvQBqyDX8ABVLnAAVTBwAFW5AQBj7EBasABVKpgA5QNlH8AAAEDwAFU2sABVuQAAAADAQPAAVTlAAAAO2ADq9UAwAFU8AAAAG1gA8AATKIBasABVPhgA8AATKIawAFU/wAAAIRUYAPAAEyiAWoAYAHAAE2sAgBgA6x8AT4FTsABVQ/AAVUbAACPsmADwABMogEWwAFVIoDAAVUdwBRKNI4Uq9c9isABVTrAFEpcHsABVUvAAEvfAwADgcABVWTAFEpBgsABVWvAFEpcHMABVYMWwAFVdYDAAVVwwBRKNI4Zq9mGkgEAAYPAAVWGwBRKfgDAAE3NAE7AAVWcwAFVpwAAj7tgA8AATKIBHMABVbccwAFVroLAAVWqwBRKXIEGAQABgcABVbDAFEpBAMAATcmDxgEAAYPAAVW5wBRKfgDAAE3KScABVcohHMABVescwAFV2YTAAVXOwBRK94Z4AQABasABVdtgA8AATKJUAMAATcuAjAEAAZMAwABNxj4BPTDAAVX5H8ABVf/AAEvRAQABHMABVkInj7yBDQEAASTAAVZgAWrAAVZQYAPAAEyiVADAAE6eAD9KwAFWbQEcwAFWgBbAAVZ5gMABVnTAFEo0gcGr2o47AgACHMABVqMWwAFWlYDAAVaQwBRKNIadq9iBDQEAARzAAVargcABVqXAFEpBg8YBAAGDwAFWrcAUSn4AwABNygDAAE3IHMABVs2EwAFWwsAUSveGkgEAAWrAAVbQYAPAAEyiVADAAE3NAKvQBqyFX8ABV8XAAVfewAFX9gMCgQ0AAAABA8ABV9/AAVf2AAAAAQEBwAFX8AAAIIIdXQPAAE1GAWADrJ0AAF0DwABNRgFgA6ydAAashl/AAVsnwAFbNcABW1IAAoRhAAAAAQPAAVs8wAFbUgAAAAIBAsABW0EAAABtYAPAAEyiAMABW00AAACEVGADwABMogFqAGABwABNrAIAYAOsfAAAABRIOQAUSJcAFEliABRKAgAUTEIAFEyLABRM4AAAAAYCrIdfwAFcYsABXHHAAW9DB4/KAWrAAVxxYAOT+iYAAWADwABN7wACXQPAAE1GAWADrchgA6vVAQSsiV/AAW8twAFvQQaPtABgA8AATKIBasABbz9gA8AATKJUAAYGrItgwAE+ecABPoHAAT68BAUAA2rAAT6BYAOT+iZqwAE+gWADwABKn53WasABPoFgA5QInewAAAEDwAE+jMABPrwAAAABAQHAAT6RAAAAgchgA8AATKIAAGADrIcABqyMYMABPsrAAT7SwAE/XwQBjAABasABPtJgA5P6JgAAAQPAAT7mwAE/XwAAAAEBAcABPvUAAACBE10DwABNRgFgA63IAABgA6yHAT4BSsABPwUBNcABPxAAAAEAYAOshwEewAE/EKyLAQABFsABPyWAwAE/HMAUTe2ByMAATXYANcABPzUAAAEAXAEcwAE/NYHAAT8QwBROEYRYAwADkxbAAT9KgMABP0HAFE3tgcjAAE12gMABP1LAFE3tAMAATWuBwAE/EMAUThEGrI1fwAFkmcABZKHAAWUsBAGPsAAAAAEDwAFkscABZSwAAAADAQPAAWS9AAAAgcFgA6vAAMABZNAAAACGnWADwABMogFqwAFk4GADwABMohrAAWTnAAAAgchgA8AATKIBagBgAcAATawCAGADrIcBPgFKwAFk9gEcwAFlBIDAAWT9wBROro48AgACgcABZRLAFE68gsABZSHAFE7YAKvNBqyOX8ABaJPAAWibwAFqugQBj7EBasABaIRgA5QNlH8AAAEDwAFossABaroAAAADAQPAAWi9AAAAO2ADq9UAwAFoyAAAAG1gA8AATKIBasABaNBgA8AATKIawAFo1wAAAIRUYAPAAEyiAWoAYAHAAE2sAgBgA6yHAT4FTsABaOfAAWjzAACPsmADwABMogEWwAFo+oDAAWj1wBRPWY4Uq9c9isABaRLAFE+BHsABaSPAAEvfAwADgcABaTzAFE9mgsABaUPAFE+BHMABaVsWwAFpTYDAAWlIwBRPWY4Zq9mGkgEAAYPAAWlewBRPowDAAE3NAE7AAWl0wAFpfwAAj7tgA8AATKIBHMABaY8cwAFphoLAAWmCwBRPgYEGAQABgcABaYjAFE9mAMAATcmDxgEAAYPAAWmRwBRPowDAAE3KScABaaIhHMABacMcwAFpsYTAAWmmwBRQHIZ4AQABasABabNgA8AATKJUAMAATcuAjAEAAZMAwABNxj4BPTDAAWnRH8ABadfAAEvRAQABHMABahonj7yBDQEAASTAAWo4AWrAAWooYAPAAEyiVADAAE6eAD9KwAFqRQEcwAFqWBbAAWpRgMABakzAFE9ZgcGr2o48AgACHMABankWwAFqa4DAAWpmwBRPWYadq9iBDQEAARzAAWqBgcABanvAFE9mg8YBAAGDwAFqg8AUT6MAwABNygDAAE3IHMABaqOEwAFqmMAUUByGkgEAAWrAAWqmYAPAAEyiVADAAE3NAKvNBqyQX8ABa5XAAWuswAFrwgMCgQ0AAAABA8ABa63AAWvCAAAAAQEBwAFrvAAAIIIdXQPAAE1GAWADrcgAAF0DwABNRgFgA63IAAaskV/AAW7uwAFu+sABbxcAAoRhAAAAAQPAAW8BwAFvFwAAAAIBAsABbwYAAABtYAPAAEyiAMABbxIAAACEVGADwABMogFqAGABwABNrAIAYAOshwAAABRNXgAUTbwAFE6HABRPJwAUUWcAFFGwABRSBQAAAAYCrJJfwAFwKcABcDjAAYNHB4/MAWrAAXA4YAOT+iYAAWADwABN7wACXQPAAE1GAWADruxgA6vVAQSslF/AAYMxwAGDRQaPtABgA8AATKIBasABg0NgA8AATKJUAAYGrJZgwAFD98ABQ//AAUQ+BAUAA2rAAUP/YAOT+iZqwAFD/2ADwABKn536asABQ/9gA5QInhAAAAEDwAFEDMABRD4AAAABAQHAAUQRAAAAgchgA8AATKIAAGADrJIABqyXYMABREzAAURUwAFE5wQBjAABasABRFRgA5P6JgAAAQPAAURqwAFE5wAAAAEBAcABRHsAAACBE10DwABNRgFgA67sAABgA6ySAT4BSsABRIsBNcABRJYAAAEAYAOskgEewAFElqyWAQABFsABRK2AwAFEpMAUUxKByMAATXYANcABRL0AAAEAXAEcwAFEvYHAAUSWwBRTNoRYAwADkxbAAUTSgMABRMnAFFMSgcjAAE12gMABRNrAFFMSAMAATWuBwAFElsAUUzYGrJtfwAFzkcABc6rAAXPCAwKBDQAAAAEDwAFzq8ABc8IAAAABAQHAAXO8AAAggh1dA8AATUYBYAOu7AAAXQPAAE1GAWADruwABqyYX8ABeZTAAXmcwAF6KwQBj7AAAAABA8ABea7AAXorAAAAAwEDwAF5ugAAAIHBYAOrwADAAXnNAAAAhp1gA8AATKIBasABed1gA8AATKIawAF55AAAAIHIYAPAAEyiAWoAYAHAAE2sAgBgA6ySAT4BSsABefMBHMABegGAwAF5+sAUVByOPQIAAoHAAXoRwBRUKoLAAXogwBRURgCr0QasmV/AAX2UwAF9nMABf78EAY+xAWrAAX2FYAOUDZR/AAABA8ABfbXAAX+/AAAAAwEDwAF9wAAAADtgA6vVAMABfcsAAABtYAPAAEyiAWrAAX3TYAPAAEyiGsABfdoAAACEVGADwABMogFqAGABwABNrAIAYAOskgE+BU7AAX3qwAF99gAAj7JgA8AATKIBFsABff2AwAF9+MAUVMeOFKvXPYrAAX4VwBRU7x7AAX4mwABL3wMAA4HAAX4/wBRU1ILAAX5GwBRU7xzAAX5eFsABflCAwAF+S8AUVMeOGavZhpIBAAGDwAF+YcAUVREAwABNzQBOwAF+d8ABfoIAAI+7YAPAAEyiARzAAX6SHMABfomCwAF+hcAUVO+BBgEAAYHAAX6LwBRU1ADAAE3Jg8YBAAGDwAF+lMAUVREAwABNyknAAX6lIRzAAX7GHMABfrSEwAF+qcAUVYqGeAEAAWrAAX62YAPAAEyiVADAAE3LgIwBAAGTAMAATcY+AT0wwAF+1B/AAX7awABL0QEAARzAAX8dJ4+8gQ0BAAEkwAF/OwFqwAF/K2ADwABMolQAwABOngA/SsABf0gBHMABf1sWwAF/VIDAAX9PwBRUx4HBq9qOPQIAAhzAAX9+FsABf3CAwAF/a8AUVMeGnavYgQ0BAAEcwAF/hoHAAX+AwBRU1IPGAQABg8ABf4jAFFURAMAATcoAwABNyBzAAX+ohMABf53AFFWKhpIBAAFqwAF/q2ADwABMolQAwABNzQCr0QasnF/AAYLwwAGC/sABgxsAAoRhAAAAAQPAAYMFwAGDGwAAAAIBAsABgwoAAABtYAPAAEyiAMABgxYAAACEVGADwABMogFqAGABwABNrAIAYAOskgAAABRSgwAUUuEAFFOsABRT9QAUVJUAFFbVABRXKgAAAAYCrJ1fwAGD/MABhAvAAbAMB4/OAWrAAYQLYAOT+iYAAWADwABN7wAAgQAErJ9fwAGLocABi6sGj88AYAPAAEyiAWrAAYuoYAPAAEyiGgSsoF/AAYvAwAGLywaP0ABgA8AATKIBasABi8dgA8AATKJyBKyhX8ABi+DAAYvrBo/RAGADwABMogFqwAGL52ADwABMonUErKJfwAGMAMABjAsGj9IAYAPAAEyiAWrAAYwHYAPAAEyihfQErKNfwAGMIMABjCsGj9MAYAPAAEyiAWrAAYwnYAPAAEyiVASspF/AAYxAwAGMSwaP1ABgA8AATKIBasABjEdgA8AATKKEHwSspV/AAYxgwAGMawaP1QBgA8AATKIBasABjGdgA8AATKKeGQSspl/AAYyAwAGMiwaP1gBgA8AATKIBasABjIdgA8AATKKLegSsp1/AAYygwAGMqwaP1wBgA8AATKIBasABjKdgA8AATKJvBKyoX8ABjMDAAYzLBo/YAGADwABMogFqwAGMx2ADwABMop4dBKypX8ABjODAAYzrBo/ZAGADwABMogFqwAGM52ADwABMop4gBKyqX8ABjQDAAY0LBo/aAGADwABMogFqwAGNB2ADwABMop4kBKyrX8ABjSDAAY0rBo/bAGADwABMogFqwAGNJ2ADwABMooRjBKysX8ABjUDAAY1LBo/cAGADwABMogFqwAGNR2ADwABMop4oBKytX8ABjWDAAY1rBo/dAGADwABMogFqwAGNZ2ADwABMop4rBKyuX8ABjYDAAY2LBo/eAGADwABMogFqwAGNh2ADwABMop4vBKyvX8ABjaDAAY2qBo/fAGADwABMogFqwAGNp2ADwABMohgErLBfwAGNv8ABjcoGj+AAYAPAAEyiAWrAAY3GYAPAAEyinjMErLFfwAGN38ABjeoGj+EAYAPAAEyiAWrAAY3mYAPAAEyinjYErLJfwAGN/8ABjgoGj+IAYAPAAEyiAWrAAY4GYAPAAEyinjoErLNfwAGOH8ABjioGj+MAYAPAAEyiAWrAAY4mYAPAAEyihJwErLRfwAGOP8ABjkoGj+QAYAPAAEyiAWrAAY5GYAPAAEyinj4ErLVfwAGOX8ABjmoGj+UAYAPAAEyiAWrAAY5mYAPAAEyinkEErLZfwAGOf8ABjooGj+YAYAPAAEyiAWrAAY6GYAPAAEyinkUErLdfwAGOn8ABjqoGj+cAYAPAAEyiAWrAAY6mYAPAAEyinkkErLhfwAGOv8ABjsoGj+gAYAPAAEyiAWrAAY7GYAPAAEyihCIErLlfwAGO38ABjuoGj+kAYAPAAEyiAWrAAY7mYAPAAEyinkwErLpfwAGO/8ABjwoGj+oAYAPAAEyiAWrAAY8GYAPAAEyinlAErLtfwAGPH8ABjyoGj+sAYAPAAEyiAWrAAY8mYAPAAEyinlQErLxfwAGPP8ABj0oGj+wAYAPAAEyiAWrAAY9GYAPAAEyihJAErL1fwAGPX8ABj2oGj+0AYAPAAEyiAWrAAY9mYAPAAEyinlcErL5fwAGPf8ABj4oGj+4AYAPAAEyiAWrAAY+GYAPAAEyinlsErL9fwAGPn8ABj6kGj+8AYAPAAEyiAWrAAY+mYAPAAEyiHASswF/AAY++wAGPyQaP8ABgA8AATKIBasABj8VgA8AATKKeXwSswV/AAY/ewAGP6QaP8QBgA8AATKIBasABj+VgA8AATKKeYgSswl/AAY/+wAGQCQaP8gBgA8AATKIBasABkAVgA8AATKKLWgSsw1/AAZAewAGQKQaP8wBgA8AATKIBasABkCVgA8AATKKEnwSsxF/AAZA+wAGQSQaP9ABgA8AATKIBasABkEVgA8AATKKeZgSsxV/AAZBewAGQaQaP9QBgA8AATKIBasABkGVgA8AATKKeaQSsxl/AAZB+wAGQiQaP9gBgA8AATKIBasABkIVgA8AATKKebQSsx1/AAZCewAGQqQaP9wBgA8AATKIBasABkKVgA8AATKKecQSsyF/AAZC+wAGQyQaP+ABgA8AATKIBasABkMVgA8AATKKedASsyV/AAZDewAGQ6QaP+QBgA8AATKIBasABkOVgA8AATKKedwSsyl/AAZD+wAGRCQaP+gBgA8AATKIBasABkQVgA8AATKKeewSsy1/AAZEewAGRKQaP+wBgA8AATKIBasABkSVgA8AATKKefwSszF/AAZE+wAGRSQaP/ABgA8AATKIBasABkUVgA8AATKKeggSszV/AAZFewAGRaQaP/QBgA8AATKIBasABkWVgA8AATKKehQSszl/AAZF+wAGRiQaP/gBgA8AATKIBasABkYVgA8AATKKeiQSsz1/AAZGewAGRqAaP/wBgA8AATKIBasABkaVgA8AATKKEMASs0F/AAZG9wAGRyAaQAABgA8AATKIBasABkcRgA8AATKKejQSs0V/AAZHdwAGR6AaQAQBgA8AATKIBasABkeRgA8AATKKekASs0l/AAZH9wAGSCAaQAgBgA8AATKIBasABkgRgA8AATKKLagSs01/AAZIdwAGSKAaQAwBgA8AATKIBasABkiRgA8AATKKEMwSs1F/AAZI9wAGSSAaQBABgA8AATKIBasABkkRgA8AATKKEcgSs1V/AAZJdwAGSaAaQBQBgA8AATKIBasABkmRgA8AATKKelASs1l/AAZJ9wAGSiAaQBgBgA8AATKIBasABkoRgA8AATKKemASs11/AAZKdwAGSqAaQBwBgA8AATKIBasABkqRgA8AATKKEVwSs2F/AAZK9wAGSyAaQCABgA8AATKIBasABksRgA8AATKKEhASs2V/AAZLdwAGS6AaQCQBgA8AATKIBasABkuRgA8AATKKenASs2l/AAZL9wAGTCAaQCgBgA8AATKIBasABkwRgA8AATKKeoASs21/AAZMdwAGTKAaQCwBgA8AATKIBasABkyRgA8AATKKepASs3F/AAZM9wAGTSAaQDABgA8AATKIBasABk0RgA8AATKKepwSs3V/AAZNdwAGTaAaQDQBgA8AATKIBasABk2RgA8AATKKeqgSs3l/AAZN9wAGTiAaQDgBgA8AATKIBasABk4RgA8AATKKergSs31/AAZOdwAGTpwaQDwBgA8AATKIBasABk6RgA8AATKIUBKzgX8ABk7zAAZPHBpAQAGADwABMogFqwAGTw2ADwABMop6yBKzhX8ABk9zAAZPnBpARAGADwABMogFqwAGT42ADwABMop61BKziX8ABk/zAAZQHBpASAGADwABMogFqwAGUA2ADwABMop65BKzjX8ABlBzAAZQnBpATAGADwABMogFqwAGUI2ADwABMooQ5BKzkX8ABlDzAAZRHBpAUAGADwABMogFqwAGUQ2ADwABMop69BKzlX8ABlFzAAZRnBpAVAGADwABMogFqwAGUY2ADwABMop7ABKzmX8ABlHzAAZSHBpAWAGADwABMogFqwAGUg2ADwABMop7EBKznX8ABlJzAAZSnBpAXAGADwABMogFqwAGUo2ADwABMop7IBKzoX8ABlLzAAZTHBpAYAGADwABMogFqwAGUw2ADwABMooR4BKzpX8ABlNzAAZTnBpAZAGADwABMogFqwAGU42ADwABMop7LBKzqX8ABlPzAAZUHBpAaAGADwABMogFqwAGVA2ADwABMop7PBKzrX8ABlRzAAZUnBpAbAGADwABMogFqwAGVI2ADwABMop7TBKzsX8ABlTzAAZVHBpAcAGADwABMogFqwAGVQ2ADwABMop7WBKztX8ABlVzAAZVnBpAdAGADwABMogFqwAGVY2ADwABMop7ZBKzuX8ABlXzAAZWHBpAeAGADwABMogFqwAGVg2ADwABMop7dBKzvX8ABlZzAAZWmBpAfAGADwABMogFqwAGVo2ADwABMooQtBKzwX8ABlbvAAZXGBpAgAGADwABMogFqwAGVwmADwABMooRsBKzxX8ABldvAAZXmBpAhAGADwABMogFqwAGV4mADwABMop7hBKzyX8ABlfvAAZYGBpAiAGADwABMogFqwAGWAmADwABMop7lBKzzX8ABlhvAAZYmBpAjAGADwABMogFqwAGWImADwABMop7pBKz0X8ABljvAAZZGBpAkAGADwABMogFqwAGWQmADwABMop7sBKz1X8ABllvAAZZmBpAlAGADwABMogFqwAGWYmADwABMop7vBKz2X8ABlnvAAZaGBpAmAGADwABMogFqwAGWgmADwABMop7zBKz3X8ABlpvAAZamBpAnAGADwABMogFqwAGWomADwABMooZvBKz4X8ABlrvAAZbGBpAoAGADwABMogFqwAGWwmADwABMooR+BKz5X8ABltvAAZbmBpApAGADwABMogFqwAGW4mADwABMop73BKz6X8ABlvvAAZcGBpAqAGADwABMogFqwAGXAmADwABMop77BKz7X8ABlxvAAZcmBpArAGADwABMogFqwAGXImADwABMop7/BKz8X8ABlzvAAZdGBpAsAGADwABMogFqwAGXQmADwABMooSTBKz9X8ABl1vAAZdmBpAtAGADwABMogFqwAGXYmADwABMop8CBKz+X8ABl3vAAZeGBpAuAGADwABMogFqwAGXgmADwABMop8GBKz/X8ABl5vAAZelBpAvAGADwABMogFqwAGXomADwABMooRIBK0AX8ABl7rAAZfFBpAwAGADwABMogFqwAGXwWADwABMop8KBK0BX8ABl9rAAZflBpAxAGADwABMogFqwAGX4WADwABMop8NBK0CX8ABl/rAAZgFBpAyAGADwABMogFqwAGYAWADwABMooteBK0DX8ABmBrAAZglBpAzAGADwABMogFqwAGYIWADwABMop8RBK0EX8ABmDrAAZhFBpA0AGADwABMogFqwAGYQWADwABMop8UBK0FX8ABmFrAAZhlBpA1AGADwABMogFqwAGYYWADwABMop8XBK0GX8ABmHrAAZiFBpA2AGADwABMogFqwAGYgWADwABMop8bBK0HX8ABmJrAAZilBpA3AGADwABMogFqwAGYoWADwABMop8fBK0IX8ABmLrAAZjFBpA4AGADwABMogFqwAGYwWADwABMop8iBK0JX8ABmNrAAZjlBpA5AGADwABMogFqwAGY4WADwABMop8lBK0KX8ABmPrAAZkFBpA6AGADwABMogFqwAGZAWADwABMop8pBK0LX8ABmRrAAZklBpA7AGADwABMogFqwAGZIWADwABMooRmBK0MX8ABmTrAAZlFBpA8AGADwABMogFqwAGZQWADwABMop8tBK0NX8ABmVrAAZllBpA9AGADwABMogFqwAGZYWADwABMop8wBK0OX8ABmXrAAZmFBpA+AGADwABMogFqwAGZgWADwABMop80BK0PX8ABmZrAAZmkBpA/AGADwABMogFqwAGZoWADwABMooROBK0QX8ABmbnAAZnEBpBAAGADwABMogFqwAGZwGADwABMop84BK0RX8ABmdnAAZnkBpBBAGADwABMogFqwAGZ4GADwABMop87BK0SX8ABmfnAAZoEBpBCAGADwABMogFqwAGaAGADwABMootuBK0TX8ABmhnAAZokBpBDAGADwABMogFqwAGaIGADwABMooQ2BK0UX8ABmjnAAZpEBpBEAGADwABMogFqwAGaQGADwABMooR1BK0VX8ABmlnAAZpkBpBFAGADwABMogFqwAGaYGADwABMop8/BK0WX8ABmnnAAZqEBpBGAGADwABMogFqwAGagGADwABMop9DBK0XX8ABmpnAAZqkBpBHAGADwABMogFqwAGaoGADwABMooRaBK0YX8ABmrnAAZrEBpBIAGADwABMogFqwAGawGADwABMop9HBK0ZX8ABmtnAAZrkBpBJAGADwABMogFqwAGa4GADwABMop9KBK0aX8ABmvnAAZsEBpBKAGADwABMogFqwAGbAGADwABMop9OBK0bX8ABmxnAAZskBpBLAGADwABMogFqwAGbIGADwABMooZ0BK0cX8ABmznAAZtEBpBMAGADwABMogFqwAGbQGADwABMooSZBK0dX8ABm1nAAZtkBpBNAGADwABMogFqwAGbYGADwABMooZEBK0eX8ABm3nAAZuEBpBOAGADwABMogFqwAGbgGADwABMop9SBK0fX8ABm5nAAZujBpBPAGADwABMogFqwAGboGADwABMohYErSBfwAGbuMABm8MGkFAAYAPAAEyiAWrAAZu/YAPAAEyin1YErSFfwAGb2MABm+MGkFEAYAPAAEyiAWrAAZvfYAPAAEyin1kErSJfwAGb+MABnAMGkFIAYAPAAEyiAWrAAZv/YAPAAEyin10ErSNfwAGcGMABnCMGkFMAYAPAAEyiAWrAAZwfYAPAAEyin2EErSRfwAGcOMABnEMGkFQAYAPAAEyiAWrAAZw/YAPAAEyin2QErSVfwAGcWMABnGMGkFUAYAPAAEyiAWrAAZxfYAPAAEyin2cErSZfwAGceMABnIMGkFYAYAPAAEyiAWrAAZx/YAPAAEyin2sErSdfwAGcmMABnKMGkFcAYAPAAEyiAWrAAZyfYAPAAEyihFEErShfwAGcuMABnMMGkFgAYAPAAEyiAWrAAZy/YAPAAEyihHsErSlfwAGc2MABnOMGkFkAYAPAAEyiAWrAAZzfYAPAAEyin28ErSpfwAGc+MABnQMGkFoAYAPAAEyiAWrAAZz/YAPAAEyii34ErStfwAGdGMABnSMGkFsAYAPAAEyiAWrAAZ0fYAPAAEyin3MErSxfwAGdOMABnUMGkFwAYAPAAEyiAWrAAZ0/YAPAAEyihIoErS1fwAGdWMABnWMGkF0AYAPAAEyiAWrAAZ1fYAPAAEyin3YErS5fwAGdeMABnYMGkF4AYAPAAEyiAWrAAZ1/YAPAAEyin3oErS9fwAGdmMABnaIGkF8AYAPAAEyiAWrAAZ2fYAPAAEyiTgStMF/AAZ23wAGdwgaQYABgA8AATKIBasABnb5gA8AATKKffgStMV/AAZ3XwAGd4gaQYQBgA8AATKIBasABnd5gA8AATKKfgQStMl/AAZ33wAGeAgaQYgBgA8AATKIBasABnf5gA8AATKKfhQStM1/AAZ4XwAGeIgaQYwBgA8AATKIBasABnh5gA8AATKKERQStNF/AAZ43wAGeQgaQZABgA8AATKIBasABnj5gA8AATKKfiQStNV/AAZ5XwAGeYgaQZQBgA8AATKIBasABnl5gA8AATKKfjAStNl/AAZ53wAGeggaQZgBgA8AATKIBasABnn5gA8AATKKfkAStN1/AAZ6XwAGeogaQZwBgA8AATKIBasABnp5gA8AATKKflAStOF/AAZ63wAGewgaQaABgA8AATKIBasABnr5gA8AATKKEgQStOV/AAZ7XwAGe4gaQaQBgA8AATKIBasABnt5gA8AATKKflwStOl/AAZ73wAGfAgaQagBgA8AATKIBasABnv5gA8AATKKfmwStO1/AAZ8XwAGfIgaQawBgA8AATKIBasABnx5gA8AATKKfnwStPF/AAZ83wAGfQgaQbABgA8AATKIBasABnz5gA8AATKKfogStPV/AAZ9XwAGfYgaQbQBgA8AATKIBasABn15gA8AATKKfpQStPl/AAZ93wAGfggaQbgBgA8AATKIBasABn35gA8AATKKfqQStP1/AAZ+XwAGfoQaQbwBgA8AATKIBasABn55gA8AATKKESwStQF/AAZ+2wAGfwQaQcABgA8AATKIBasABn71gA8AATKKfrQStQV/AAZ/WwAGf4QaQcQBgA8AATKIBasABn91gA8AATKKfsAStQl/AAZ/2wAGgAQaQcgBgA8AATKIBasABn/1gA8AATKKLYgStQ1/AAaAWwAGgIQaQcwBgA8AATKIBasABoB1gA8AATKKftAStRF/AAaA2wAGgQQaQdABgA8AATKIBasABoD1gA8AATKKftwStRV/AAaBWwAGgYQaQdQBgA8AATKIBasABoF1gA8AATKKfugStRl/AAaB2wAGggQaQdgBgA8AATKIBasABoH1gA8AATKKfvgStR1/AAaCWwAGgoQaQdwBgA8AATKIBasABoJ1gA8AATKKfwgStSF/AAaC2wAGgwQaQeABgA8AATKIBasABoL1gA8AATKKfxQStSV/AAaDWwAGg4QaQeQBgA8AATKIBasABoN1gA8AATKKfyAStSl/AAaD2wAGhAQaQegBgA8AATKIBasABoP1gA8AATKKfzAStS1/AAaEWwAGhIQaQewBgA8AATKIBasABoR1gA8AATKKEaQStTF/AAaE2wAGhQQaQfABgA8AATKIBasABoT1gA8AATKKf0AStTV/AAaFWwAGhYQaQfQBgA8AATKIBasABoV1gA8AATKKf0wStTl/AAaF2wAGhgQaQfgBgA8AATKIBasABoX1gA8AATKKf1wStT1/AAaGWwAGhoAaQfwBgA8AATKIBasABoZ1gA8AATKKf2wStUF/AAaG1wAGhwAaQgABgA8AATKIBasABobxgA8AATKKf3gStUV/AAaHVwAGh4AaQgQBgA8AATKIBasABodxgA8AATKKf4QStUl/AAaH1wAGiAAaQggBgA8AATKIBasABofxgA8AATKKLcgStU1/AAaIVwAGiIAaQgwBgA8AATKIBasABohxgA8AATKKEPAStVF/AAaI1wAGiQAaQhABgA8AATKIBasABojxgA8AATKKf5QStVV/AAaJVwAGiYAaQhQBgA8AATKIBasABolxgA8AATKKf6AStVl/AAaJ1wAGigAaQhgBgA8AATKIBasABonxgA8AATKKf7AStV1/AAaKVwAGioAaQhwBgA8AATKIBasABopxgA8AATKKEXQStWF/AAaK1wAGiwAaQiABgA8AATKIBasABorxgA8AATKKEhwStWV/AAaLVwAGi4AaQiQBgA8AATKIBasABotxgA8AATKKf8AStWl/AAaL1wAGjAAaQigBgA8AATKIBasABovxgA8AATKKf9AStW1/AAaMVwAGjIAaQiwBgA8AATKIBasABoxxgA8AATKKf+AStXF/AAaM1wAGjQAaQjABgA8AATKIBasABozxgA8AATKKf+wStXV/AAaNVwAGjYAaQjQBgA8AATKIBasABo1xgA8AATKKf/gStXl/AAaN1wAGjgAaQjgBgA8AATKIBasABo3xgA8AATKKgAgStX1/AAaOVwAGjnwaQjwBgA8AATKIBasABo5xgA8AATKJMBK1gX8ABo7TAAaO/BpCQAGADwABMogFqwAGju2ADwABMoqAGBK1hX8ABo9TAAaPfBpCRAGADwABMogFqwAGj22ADwABMoqAJBK1iX8ABo/TAAaP/BpCSAGADwABMogFqwAGj+2ADwABMoqANBK1jX8ABpBTAAaQfBpCTAGADwABMogFqwAGkG2ADwABMooQ/BK1kX8ABpDTAAaQ/BpCUAGADwABMogFqwAGkO2ADwABMoqARBK1lX8ABpFTAAaRfBpCVAGADwABMogFqwAGkW2ADwABMoqAUBK1mX8ABpHTAAaR/BpCWAGADwABMogFqwAGke2ADwABMoqAYBK1nX8ABpJTAAaSfBpCXAGADwABMogFqwAGkm2ADwABMoqAcBK1oX8ABpLTAAaS/BpCYAGADwABMogFqwAGku2ADwABMoqAfBK1pX8ABpNTAAaTfBpCZAGADwABMogFqwAGk22ADwABMoqAiBK1qX8ABpPTAAaT/BpCaAGADwABMogFqwAGk+2ADwABMoqAmBK1rX8ABpRTAAaUfBpCbAGADwABMogFqwAGlG2ADwABMooZ8BK1sX8ABpTTAAaU/BpCcAGADwABMogFqwAGlO2ADwABMooSNBK1tX8ABpVTAAaVfBpCdAGADwABMogFqwAGlW2ADwABMoqAqBK1uX8ABpXTAAaV/BpCeAGADwABMogFqwAGle2ADwABMoqAuBK1vX8ABpZTAAaWeBpCfAGADwABMogFqwAGlm2ADwABMooXxBK1wX8ABpbPAAaW+BpCgAGADwABMogFqwAGlumADwABMoqAyBK1xX8ABpdPAAaXeBpChAGADwABMogFqwAGl2mADwABMoqA1BK1yX8ABpfPAAaX+BpCiAGADwABMogFqwAGl+mADwABMoqA5BK1zX8ABphPAAaYeBpCjAGADwABMogFqwAGmGmADwABMoqA9BK10X8ABpjPAAaY+BpCkAGADwABMogFqwAGmOmADwABMoqBABK11X8ABplPAAaZeBpClAGADwABMogFqwAGmWmADwABMoqBDBK12X8ABpnPAAaZ+BpCmAGADwABMogFqwAGmemADwABMoqBHBK13X8ABppPAAaaeBpCnAGADwABMogFqwAGmmmADwABMoqBLBK14X8ABprPAAaa+BpCoAGADwABMogFqwAGmumADwABMoqBOBK15X8ABptPAAabeBpCpAGADwABMogFqwAGm2mADwABMoqBRBK16X8ABpvPAAab+BpCqAGADwABMogFqwAGm+mADwABMoqBVBK17X8ABpxPAAaceBpCrAGADwABMogFqwAGnGmADwABMoqBZBK18X8ABpzPAAac+BpCsAGADwABMogFqwAGnOmADwABMoqBcBK19X8ABp1PAAadeBpCtAGADwABMogFqwAGnWmADwABMoqBfBK1+X8ABp3PAAad+BpCuAGADwABMogFqwAGnemADwABMoqBjBK1/X8ABp5PAAaedBpCvAGADwABMogFqwAGnmmADwABMoogRBK2AX8ABp7LAAae9BpCwAGADwABMogFqwAGnuWADwABMoqBnBK2BX8ABp9LAAafdBpCxAGADwABMogFqwAGn2WADwABMoqBqBK2CX8ABp/LAAaf9BpCyAGADwABMogFqwAGn+WADwABMootmBK2DX8ABqBLAAagdBpCzAGADwABMogFqwAGoGWADwABMoqBuBK2EX8ABqDLAAag9BpC0AGADwABMogFqwAGoOWADwABMooRvBK2FX8ABqFLAAahdBpC1AGADwABMogFqwAGoWWADwABMoqBxBK2GX8ABqHLAAah9BpC2AGADwABMogFqwAGoeWADwABMoqB1BK2HX8ABqJLAAaidBpC3AGADwABMogFqwAGomWADwABMooRUBK2IX8ABqLLAAai9BpC4AGADwABMogFqwAGouWADwABMoqB5BK2JX8ABqNLAAajdBpC5AGADwABMogFqwAGo2WADwABMoqB8BK2KX8ABqPLAAaj9BpC6AGADwABMogFqwAGo+WADwABMoqCABK2LX8ABqRLAAakdBpC7AGADwABMogFqwAGpGWADwABMoqCEBK2MX8ABqTLAAak9BpC8AGADwABMogFqwAGpOWADwABMooSWBK2NX8ABqVLAAaldBpC9AGADwABMogFqwAGpWWADwABMoqCHBK2OX8ABqXLAAal9BpC+AGADwABMogFqwAGpeWADwABMoqCLBK2PX8ABqZLAAamcBpC/AGADwABMogFqwAGpmWADwABMolEErZBfwAGpscABqbwGkMAAYAPAAEyiAWrAAam4YAPAAEyioI8ErZFfwAGp0cABqdwGkMEAYAPAAEyiAWrAAanYYAPAAEyioJIErZJfwAGp8cABqfwGkMIAYAPAAEyiAWrAAan4YAPAAEyii3YErZNfwAGqEcABqhwGkMMAYAPA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2gBgA8AATKIBasABtf9gA8AATKKeJASt1l/AAbYYwAG2IwaP2wBgA8AATKIBasABth9gA8AATKKEYwSt11/AAbY4wAG2QwaP3ABgA8AATKIBasABtj9gA8AATKKeKASt2F/AAbZYwAG2YwaP3QBgA8AATKIBasABtl9gA8AATKKeKwSt2V/AAbZ4wAG2gwaP3gBgA8AATKIBasABtn9gA8AATKKeLwSt2l/AAbaYwAG2ogaP3wBgA8AATKIBasABtp9gA8AATKIYBK3bX8ABtrfAAbbCBo/gAGADwABMogFqwAG2vmADwABMop4zBK3cX8ABttfAAbbiBo/hAGADwABMogFqwAG23mADwABMop42BK3dX8ABtvfAAbcCBo/iAGADwABMogFqwAG2/mADwABMop46BK3eX8ABtxfAAbciBo/jAGADwABMogFqwAG3HmADwABMooScBK3fX8ABtzfAAbdCBo/kAGADwABMogFqwAG3PmADwABMop4+BK3gX8ABt1fAAbdiBo/lAGADwABMogFqwAG3XmADwABMop5BBK3hX8ABt3fAAbeCBo/mAGADwABMogFqwAG3fmADwABMop5FBK3iX8ABt5fAAbeiBo/nAGADwABMogFqwAG3nmADwABMop5JBK3jX8ABt7fAAbfCBo/oAGADwABMogFqwAG3vmADwABMooQiBK3kX8ABt9fAAbfiBo/pAGADwABMogFqwAG33mADwABMop5MBK3lX8ABt/fAAbgCBo/qAGADwABMogFqwAG3/mADwABMop5QBK3mX8ABuBfAAbgiBo/rAGADwABMogFqwAG4HmADwABMop5UBK3nX8ABuDfAAbhCBo/sAGADwABMogFqwAG4PmADwABMooSQBK3oX8ABuFfAAbhiBo/tAGADwABMogFqwAG4XmADwABMop5XBK3pX8ABuHfAAbiCBo/uAGADwABMogFqwAG4fmADwABMop5bBK3qX8ABuJfAAbihBo/vAGADwABMogFqwAG4nmADwABMohwEretfwAG4tsABuMEGj/AAYAPAAEyiAWrAAbi9YAPAAEyinl8ErexfwAG41sABuOEGj/EAYAPAAEyiAWrAAbjdYAPAAEyinmIEre1fwAG49sABuQEGj/IAYAPAAEyiAWrAAbj9YAPAAEyii1oEre5fwAG5FsABuSEGj/MAYAPAAEyiAWrAAbkdYAPAAEyihJ8Ere9fwAG5NsABuUEGj/QAYAPAAEyiAWrAAbk9YAPAAEyinmYErfBfwAG5VsABuWEGj/UAYAPAAEyiAWrAAbldYAPAAEyinmkErfFfwAG5dsABuYEGj/YAYAPAAEyiAWrAAbl9YAPAAEyinm0ErfJfwAG5lsABuaEGj/cAYAPAAEyiAWrAAbmdYAPAAEyinnEErfNfwAG5tsABucEGj/gAYAPAAEyiAWrAAbm9YAPAAEyinnQErfRfwAG51sABueEGj/kAYAPAAEyiAWrAAbndYAPAAEyinncErfVfwAG59sABugEGj/oAYAPAAEyiAWrAAbn9YAPAAEyinnsErfZfwAG6FsABuiEGj/sAYAPAAEyiAWrAAbodYAPAAEyinn8ErfdfwAG6NsABukEGj/wAYAPAAEyiAWrAAbo9YAPAAEyinoIErfhfwAG6VsABumEGj/0AYAPAAEyiAWrAAbpdYAPAAEyinoUErflfwAG6dsABuoEGj/4AYAPAAEyiAWrAAbp9YAPAAEyinokErfpfwAG6lsABuqAGj/8AYAPAAEyiAWrAAbqdYAPAAEyihDAErftfwAG6tcABusAGkAAAYAPAAEyiAWrAAbq8YAPAAEyino0ErfxfwAG61cABuuAGkAEAYAPAAEyiAWrAAbrcYAPAAEyinpAErf1fwAG69cABuwAGkAIAYAPAAEyiAWrAAbr8YAPAAEyii2oErf5fwAG7FcABuyAGkAMAYAPAAEyiAWrAAbscYAPAAEyihDMErf9fwAG7NcABu0AGkAQAYAPAAEyiAWrAAbs8YAPAAEyihHIErgBfwAG7VcABu2AGkAUAYAPAAEyiAWrAAbtcYAPAAEyinpQErgFfwAG7dcABu4AGkAYAYAPAAEyiAWrAAbt8YAPAAEyinpgErgJfwAG7lcABu6AGkAcAYAPAAEyiAWrAAbucYAPAAEyihFcErgNfwAG7tcABu8AGkAgAYAPAAEyiAWrAAbu8YAPAAEyihIQErgRfwAG71cABu+AGkAkAYAPAAEyiAWrAAbvcYAPAAEyinpwErgVfwAG79cABvAAGkAoAYAPAAEyiAWrAAbv8YAPAAEyinqAErgZfwAG8FcABvCAGkAsAYAPAAEyiAWrAAbwcYAPAAEyinqQErgdfwAG8NcABvEAGkAwAYAPAAEyiAWrAAbw8YAPAAEyinqcErghfwAG8VcABvGAGkA0AYAPAAEyiAWrAAbxcYAPAAEyinqoErglfwAG8dcABvIAGkA4AYAPAAEyiAWrAAbx8YAPAAEyinq4ErgpfwAG8lcABvJ8GkA8AYAPAAEyiAWrAAbycYAPAAEyiFASuC1/AAby0wAG8vwaQEABgA8AATKIBasABvLtgA8AATKKesgSuDF/AAbzUwAG83waQEQBgA8AATKIBasABvNtgA8AATKKetQSuDV/AAbz0wAG8/waQEgBgA8AATKIBasABvPtgA8AATKKeuQSuDl/AAb0UwAG9HwaQEwBgA8AATKIBasABvRtgA8AATKKEOQSuD1/AAb00wAG9PwaQFABgA8AATKIBasABvTtgA8AATKKevQSuEF/AAb1UwAG9XwaQFQBgA8AATKIBasABvVtgA8AATKKewASuEV/AAb10wAG9fwaQFgBgA8AATKIBasABvXtgA8AATKKexASuEl/AAb2UwAG9nwaQFwBgA8AATKIBasABvZtgA8AATKKeyASuE1/AAb20wAG9vwaQGABgA8AATKIBasABvbtgA8AATKKEeASuFF/AAb3UwAG93waQGQBgA8AATKIBasABvdtgA8AATKKeywSuFV/AAb30wAG9/waQGgBgA8AATKIBasABvftgA8AATKKezwSuFl/AAb4UwAG+HwaQGwBgA8AATKIBasABvhtgA8AATKKe0wSuF1/AAb40wAG+PwaQHABgA8AATKIBasABvjtgA8AATKKe1gSuGF/AAb5UwAG+XwaQHQBgA8AATKIBasABvltgA8AATKKe2QSuGV/AAb50wAG+fwaQHgBgA8AATKIBasABvntgA8AATKKe3QSuGl/AAb6UwAG+ngaQHwBgA8AATKIBasABvptgA8AATKKELQSuG1/AAb6zwAG+vgaQIABgA8AATKIBasABvrpgA8AATKKEbASuHF/AAb7TwAG+3gaQIQBgA8AATKIBasABvtpgA8AATKKe4QSuHV/AAb7zwAG+/gaQIgBgA8AATKIBasABvvpgA8AATKKe5QSuHl/AAb8TwAG/HgaQIwBgA8AATKIBasABvxpgA8AATKKe6QSuH1/AAb8zwAG/PgaQJABgA8AATKIBasABvzpgA8AATKKe7ASuIF/AAb9TwAG/XgaQJQBgA8AATKIBasABv1pgA8AATKKe7wSuIV/AAb9zwAG/fgaQJgBgA8AATKIBasABv3pgA8AATKKe8wSuIl/AAb+TwAG/ngaQJwBgA8AATKIBasABv5pgA8AATKKGbwSuI1/AAb+zwAG/vgaQKABgA8AATKIBasABv7pgA8AATKKEfgSuJF/AAb/TwAG/3gaQKQBgA8AATKIBasABv9pgA8AATKKe9wSuJV/AAb/zwAG//gaQKgBgA8AATKIBasABv/pgA8AATKKe+wSuJl/AAcATwAHAHgaQKwBgA8AATKIBasABwBpgA8AATKKe/wSuJ1/AAcAzwAHAPgaQLABgA8AATKIBasABwDpgA8AATKKEkwSuKF/AAcBTwAHAXgaQLQBgA8AATKIBasABwFpgA8AATKKfAgSuKV/AAcBzwAHAfgaQLgBgA8AATKIBasABwHpgA8AATKKfBgSuKl/AAcCTwAHAnQaQLwBgA8AATKIBasABwJpgA8AATKKESASuK1/AAcCywAHAvQaQMABgA8AATKIBasABwLlgA8AATKKfCgSuLF/AAcDSwAHA3QaQMQBgA8AATKIBasABwNlgA8AATKKfDQSuLV/AAcDywAHA/QaQMgBgA8AATKIBasABwPlgA8AATKKLXgSuLl/AAcESwAHBHQaQMwBgA8AATKIBasABwRlgA8AATKKfEQSuL1/AAcEywAHBPQaQNABgA8AATKIBasABwTlgA8AATKKfFASuMF/AAcFSwAHBXQaQNQBgA8AATKIBasABwVlgA8AATKKfFwSuMV/AAcFywAHBfQaQNgBgA8AATKIBasABwXlgA8AATKKfGwSuMl/AAcGSwAHBnQaQNwBgA8AATKIBasABwZlgA8AATKKfHwSuM1/AAcGywAHBvQaQOABgA8AATKIBasABwblgA8AATKKfIgSuNF/AAcHSwAHB3QaQOQBgA8AATKIBasABwdlgA8AATKKfJQSuNV/AAcHywAHB/QaQOgBgA8AATKIBasABwflgA8AATKKfKQSuNl/AAcISwAHCHQaQOwBgA8AATKIBasABwhlgA8AATKKEZgSuN1/AAcIywAHCPQaQPABgA8AATKIBasABwjlgA8AATKKfLQSuOF/AAcJSwAHCXQaQPQBgA8AATKIBasABwllgA8AATKKfMASuOV/AAcJywAHCfQaQPgBgA8AATKIBasABwnlgA8AATKKfNASuOl/AAcKSwAHCnAaQPwBgA8AATKIBasABwplgA8AATKKETgSuO1/AAcKxwAHCvAaQQABgA8AATKIBasABwrhgA8AATKKfOASuPF/AAcLRwAHC3AaQQQBgA8AATKIBasABwthgA8AATKKfOwSuPV/AAcLxwAHC/AaQQgBgA8AATKIBasABwvhgA8AATKKLbgSuPl/AAcMRwAHDHAaQQwBgA8AATKIBasABwxhgA8AATKKENgSuP1/AAcMxwAHDPAaQRABgA8AATKIBasABwzhgA8AATKKEdQSuQF/AAcNRwAHDXAaQRQBgA8AATKIBasABw1hgA8AATKKfPwSuQV/AAcNxwAHDfAaQRgBgA8AATKIBasABw3hgA8AATKKfQwSuQl/AAcORwAHDnAaQRwBgA8AATKIBasABw5hgA8AATKKEWgSuQ1/AAcOxwAHDvAaQSABgA8AATKIBasABw7hgA8AATKKfRwSuRF/AAcPRwAHD3AaQSQBgA8AATKIBasABw9hgA8AATKKfSgSuRV/AAcPxwAHD/AaQSgBgA8AATKIBasABw/hgA8AATKKfTgSuRl/AAcQRwAHEHAaQSwBgA8AATKIBasABxBhgA8AATKKGdASuR1/AAcQxwAHEPAaQTABgA8AATKIBasABxDhgA8AATKKEmQSuSF/AAcRRwAHEXAaQTQBgA8AATKIBasABxFhgA8AATKKGRASuSV/AAcRxwAHEfAaQTgBgA8AATKIBasABxHhgA8AATKKfUgSuSl/AAcSRwAHEmwaQTwBgA8AATKIBasABxJhgA8AATKIWBK5LX8ABxLDAAcS7BpBQAGADwABMogFqwAHEt2ADwABMop9WBK5MX8ABxNDAAcTbBpBRAGADwABMogFqwAHE12ADwABMop9ZBK5NX8ABxPDAAcT7BpBSAGADwABMogFqwAHE92ADwABMop9dBK5OX8ABxRDAAcUbBpBTAGADwABMogFqwAHFF2ADwABMop9hBK5PX8ABxTDAAcU7BpBUAGADwABMogFqwAHFN2ADwABMop9kBK5QX8ABxVDAAcVbBpBVAGADwABMogFqwAHFV2ADwABMop9nBK5RX8ABxXDAAcV7BpBWAGADwABMogFqwAHFd2ADwABMop9rBK5SX8ABxZDAAcWbBpBXAGAD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AEyiAWrAAcvUYAPAAEyin/AEroVfwAHL7cABy/gGkIoAYAPAAEyiAWrAAcv0YAPAAEyin/QEroZfwAHMDcABzBgGkIsAYAPAAEyiAWrAAcwUYAPAAEyin/gErodfwAHMLcABzDgGkIwAYAPAAEyiAWrAAcw0YAPAAEyin/sErohfwAHMTcABzFgGkI0AYAPAAEyiAWrAAcxUYAPAAEyin/4ErolfwAHMbcABzHgGkI4AYAPAAEyiAWrAAcx0YAPAAEyioAIEropfwAHMjcABzJcGkI8AYAPAAEyiAWrAAcyUYAPAAEyiTASui1/AAcyswAHMtwaQkABgA8AATKIBasABzLNgA8AATKKgBgSujF/AAczMwAHM1waQkQBgA8AATKIBasABzNNgA8AATKKgCQSujV/AAczswAHM9waQkgBgA8AATKIBasABzPNgA8AATKKgDQSujl/AAc0MwAHNFwaQkwBgA8AATKIBasABzRNgA8AATKKEPwSuj1/AAc0swAHNNwaQlABgA8AATKIBasABzTNgA8AATKKgEQSukF/AAc1MwAHNVwaQlQBgA8AATKIBasABzVNgA8AATKKgFASukV/AAc1swAHNdwaQlgBgA8AATKIBasABzXNgA8AATKKgGASukl/AAc2MwAHNlwaQlwBgA8AATKIBasABzZNgA8AATKKgHASuk1/AAc2swAHNtwaQmABgA8AATKIBasABzbNgA8AATKKgHwSulF/AAc3MwAHN1waQmQBgA8AATKIBasABzdNgA8AATKKgIgSulV/AAc3swAHN9waQmgBgA8AATKIBasABzfNgA8AATKKgJgSull/AAc4MwAHOFwaQmwBgA8AATKIBasABzhNgA8AATKKGfASul1/AAc4swAHONwaQnABgA8AATKIBasABzjNgA8AATKKEjQSumF/AAc5MwAHOVwaQnQBgA8AATKIBasABzlNgA8AATKKgKgSumV/AAc5swAHOdwaQngBgA8AATKIBasABznNgA8AATKKgLgSuml/AAc6MwAHOlgaQnwBgA8AATKIBasABzpNgA8AATKKF8QSum1/AAc6rwAHOtgaQoABgA8AATKIBasABzrJgA8AATKKgMgSunF/AAc7LwAHO1gaQoQBgA8AATKIBasABztJgA8AATKKgNQSunV/AAc7rwAHO9gaQogBgA8AATKIBasABzvJgA8AATKKgOQSunl/AAc8LwAHPFgaQowBgA8AATKIBasABzxJgA8AATKKgPQSun1/AAc8rwAHPNgaQpABgA8AATKIBasABzzJgA8AATKKgQASuoF/AAc9LwAHPVgaQpQBgA8AATKIBasABz1JgA8AATKKgQwSuoV/AAc9rwAHPdgaQpgBgA8AATKIBasABz3JgA8AATKKgRwSuol/AAc+LwAHPlgaQpwBgA8AATKIBasABz5JgA8AATKKgSwSuo1/AAc+rwAHPtgaQqABgA8AATKIBasABz7JgA8AATKKgTgSupF/AAc/LwAHP1gaQqQBgA8AATKIBasABz9JgA8AATKKgUQSupV/AAc/rwAHP9gaQqgBgA8AATKIBasABz/JgA8AATKKgVQSupl/AAdALwAHQFgaQqwBgA8AATKIBasAB0BJgA8AATKKgWQSup1/AAdArwAHQNgaQrABgA8AATKIBasAB0DJgA8AATKKgXASuqF/AAdBLwAHQVgaQrQBgA8AATKIBasAB0FJgA8AATKKgXwSuqV/AAdBrwAHQdgaQrgBgA8AATKIBasAB0HJgA8AATKKgYwSuql/AAdCLwAHQlQaQrwBgA8AATKIBasAB0JJgA8AATKKIEQSuq1/AAdCqwAHQtQaQsABgA8AATKIBasAB0LFgA8AATKKgZwSurF/AAdDKwAHQ1QaQsQBgA8AATKIBasAB0NFgA8AATKKgagSurV/AAdDqwAHQ9QaQsgBgA8AATKIBasAB0PFgA8AATKKLZgSurl/AAdEKwAHRFQaQswBgA8AATKIBasAB0RFgA8AATKKgbgSur1/AAdEqwAHRNQaQtABgA8AATKIBasAB0TFgA8AATKKEbwSusF/AAdFKwAHRVQaQtQBgA8AATKIBasAB0VFgA8AATKKgcQSusV/AAdFqwAHRdQaQtgBgA8AATKIBasAB0XFgA8AATKKgdQSusl/AAdGKwAHRlQaQtwBgA8AATKIBasAB0ZFgA8AATKKEVASus1/AAdGqwAHRtQaQuABgA8AATKIBasAB0bFgA8AATKKgeQSutF/AAdHKwAHR1QaQuQBgA8AATKIBasAB0dFgA8AATKKgfASutV/AAdHqwAHR9QaQugBgA8AATKIBasAB0fFgA8AATKKggASutl/AAdIKwAHSFQaQuwBgA8AATKIBasAB0hFgA8AATKKghASut1/AAdIqwAHSNQaQvABgA8AATKIBasAB0jFgA8AATKKElgSuuF/AAdJKwAHSVQaQvQBgA8AATKIBasAB0lFgA8AATKKghwSuuV/AAdJqwAHSdQaQvgBgA8AATKIBasAB0nFgA8AATKKgiwSuul/AAdKKwAHSlAaQvwBgA8AATKIBasAB0pFgA8AATKJRBK67X8AB0qnAAdK0BpDAAGADwABMogFqwAHSsGADwABMoqCPBK68X8AB0snAAdLUBpDBAGADwABMogFqwAHS0GADwABMoqCSBK69X8AB0unAAdL0BpDCAGADwABMogFqwAHS8GADwABMoot2BK6+X8AB0wnAAdMUBpDDAGADwABMogFqwAHTEGADwABMooRCBK6/X8AB0ynAAdM0BpDEAGADwABMogFqwAHTMGADwABMoqCWBK7AX8AB00nAAdNUBpDFAGADwABMogFqwAHTUGADwABMoqCZBK7BX8AB02nAAdN0BpDGAGADwABMogFqwAHTcGADwABMoqCdBK7CX8AB04nAAdOUBpDHAGADwABMogFqwAHTkGADwABMooRgBK7DX8AB06nAAdO0BpDIAGADwABMogFqwAHTsGADwABMoqChBK7EX8AB08nAAdPUBpDJAGADwABMogFqwAHT0GADwABMoqCkBK7FX8AB0+nAAdP0BpDKAGADwABMogFqwAHT8GADwABMooY8BK7GX8AB1AnAAdQUBpDLAGADwABMogFqwAHUEGADwABMooX4BK7HX8AB1CnAAdQ0BpDMAGADwABMogFqwAHUMGADwABMooSiBK7IX8AB1EnAAdRUBpDNAGADwABMogFqwAHUUGADwABMooZABK7JX8AB1GnAAdR0BpDOAGADwABMogFqwAHUcGADwABMooZ/AB4GrsxgwAGXOsABl3bAAZfCAAWQ25yGAmrAAZc7YAPAAEqflflqAGADlAig5wAAAQPAAZeGwAGXwgAAAAQEBMABl4sAAACEhGADwABMogDAAZeSAAAAjDJgA8AATKIAwAGXmQAAAI71YAPAAEyiAMABl6AAAACO92ADwABMogAAYAOnAgAGrs1gwAGYvsABmPrAAZlMAAWQ3ZyGAmrAAZi/YAPAAEqflflqAGADlAig8wAAAQPAAZkLwAGZTAAAAAQEBMABmREA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FoOXLoOknIavCo4yAgACgIOwwBS8VIGDv8AUvGwAq8YABq8RYYPMg9eEWwAAjjQAAAABA4PjhFsAAAACAAKD6QAAAIadYAPAAEyiAWqD+WADwABMohqEAAAAAIHIYAPAAEyiAWoAYAHAAE2sAgBgA6w2AUqEEgEfhBavuQEAARyENxaEMS6DpJyGrwqONAIAAoCERMAUvNaBhFPAFLzuAKvHAAavEmGEYIRqhOsAAI4zAAAAAQOEdYTrAAAAAgAChHsAAACGnWADwABMogFqhItgA8AATKIahJIAAACByGADwABMogFqAGABwABNrAIAYAOsLAFKhKQBH4Sor9MBAAEchMgWhMIug6Schq8KjjMCAAKAhNTAFL1YgYTjwBS9cACryAAGrxNhhPCE+4V/AACONgAAAAEDhQeFfwAAAAIAAoUNAAAAhp1gA8AATKIBaoUdYAPAAEyiGoUkAAAAgchgA8AATKIBagBgAcAATawCAGADrEoBSoU2AR+FOq/tAQABHIVbFoVVLoOknIavCo42AgACgIVowBS92oGFd8AUvfIAq8kABq8UYYWEhY6GDwAAjjUAAAABA4WZhg8AAAACAAKFnwAAAIadYAPAAEyiAWqFr2ADwABMohqFtgAAAIHIYAPAAEyiAWoAYAHAAE2sAgBgA6xAAUqFyAEfhcywBwEAARyF7BaF5i6DpJyGrwqONQIAAoCF+MAUvlyBhgfAFL50AKvKAAavFWGGFIYfhqMAAI44AAAAAQOGK4ajAAAAAgAChjEAAACGnWADwABMogFqhkFgA8AATKIahkgAAACByGADwABMogFqAGABwABNrAIAYAOsXgFKhloBH4ZesCEBAAEchn8Whnkug6Schq8KjjgCAAKAhozAFL7egYabwBS+9gCrywAGrxZhhqiGsoczAACONwAAAAEDhr2HMwAAAAIAAobDAAAAhp1gA8AATKIBaobTYAPAAEyiGobaAAAAgchgA8AATKIBagBgAcAATawCAGADrFQBSobsAR+G8LA7AQABHIcQFocKLoOknIavCo43AgACgIccwBS/YIGHK8AUv3gAq8wABq8XYYc4h0SH1gAAjjwAAAABA4dRh9YAAAACAAKHVwAAAIadYAPAAEyiAWqHZ2ADwABMohqHbgAAAIHIYAPAAEyiAWoAYAHAAE2sAgBgA6yHAUqHgAEfh4SwVQEAARyHsRaHqy6DpJyGrwqOPAIAAoCHv8AUv+KBh87AFL/6AKvNAAavGGGH24fniHkAAI45AAAAAQOH9Ih5AAAAAgACh/oAAACGnWADwABMogFqiApgA8AATKIaiBEAAACByGADwABMogFqAGABwABNrAIAYAOsaAFKiCMBH4gnsKMBAAEciFQWiE4ug6Schq8KjjkCAAKAiGLAFMBkgYhxwBTAfACrzgAGrxlhiH6IiokcAACOOgAAAAEDiJeJHAAAAAIAAoidAAAAhp1gA8AATKIBaoitYAPAAEyiGoi0AAAAgchgA8AATKIBagBgAcAATawCAGADrHIBSojGAR+IyrC9AQABHIj3FojxLoOknIavCo46AgACgIkFwBTA5oGJFMAUwP4Aq88ABq8aYYkhiS+JxwAAjjsAAAABA4k+iccAAAACAAKJRAAAAIadYAPAAEyiAWqJVGADwABMohqJWwAAAIHIYAPAAEyiAWoAYAHAAE2sAgBgA6x8AUqJbQEfiXGwbwEAARyJoBaJmi6DpJyGrwqOOwIAAoCJsMAUwWiBib/AFMGAAKvQAAavG2GJzInainIAAI49AAAAAQOJ6YpyAAAAAgACie8AAACGnWADwABMogFqif9gA8AATKIaigYAAACByGADwABMogFqAGABwABNrAIAYAOskgFKihgBH4ocsIkBAAEciksWikUug6Schq8Kjj0CAAKAilvAFMHqgYpqwBTCAgCr0QAGrxxhineKgIr+AACOLwAAAAEDioqK/gAAAAIAAoqQAAAAhp1gA8AATKIBaoqgYAPAAEyiGoqnAAAAgchgA8AATKIBagBgAcAATawCAGADq/EBSoq5AR+Kva9AAQABHIrcForWLoOknIavCo4vAgACgIrnwBTCbIGK9sAUwoQAq9IAAAAUuvkAFLszABS7tQAUvDcAFLy5ABS9OwAUvb0AFL4/ABS+wQAUv0MAFL/FABTARwAUwMkAFMFLABTBzQAUwk8AFMLRAAAAEAKvH2GLMIs2lKIDkOsAAAFgA8AATe8AAWADq/EBBK8iYYt2i3sJg6SchgBgA6vxAAEFr0Bhi4CLgIu2AAAAA4uYi7YAAAABAQGLogAAADtgA6vxAABgA68fAT8CCACvIoCLssAUw2MJAYuAwABOBQAAAAAZBq8kYYu7i7+L8wAAj40AAAABA4vGi/MAAAABAQGLywAAAI+OYAPAAEyiAABgA8AATKIBSovaARyL4BaL2i6DpJyGryKPjQEAAYCL6MAUw6sAq/kGryVhi/iL/YwxAACPjwAAAAEDjASMMQAAAAICAowJAAAAj45gA8AATKIAjBkAAAAiYAPAAEyiAABcAUqMIwEcjCMukOychgAAAACvOQavJmGMNow6jHAAAI+QAAAAAQOMQoxwAAAAAQEBjEcAAACPjmADwABMogAAYAPAAEyiAUqMVgEcjFwWjFYug6Schq8ij5ABAAGAjGXAFMRLAKv7Bq8nYYx1jHqMrwAAj5EAAAABA4yCjK8AAAACAgKMhwAAAI+OYAPAAEyiAIyXAAAAImADwABMogAAXAFKjKEBHIyhLpDsnIYAAAAArzkGryhhjLSMuI0aAACPkgAAAAEDjMCNGgAAAAIBAozFAAAAj45gA8AATKIAjNkAAACPk2ADq+cBaozpYAOr55wQAGADwABMogFKjPgBHIz+Foz4LoOknIavIo+SAgACgI0HwBTE64GNE8AUxPkAq/0GrylhjR+NJI19AACPlQAAAAEDjSyNfQAAAAMCA40xAAAAj45gA8AATKIAjUEAAAAiYAPAAEyiAI1QAAAAj5NgA6vnAWqNYGADq+ecEABcAUqNbwEcjW8ukOychgAAAACvOQavKmGNgo2GjeoAAI+WAAAAAQONj43qAAAAAgECjZQAAACPjmADwABMogCNqAAAAI+TYAOr5wFqjbhgA6vnnBAAYAPAAEyiAUqNxwEcjc0Wjccug6Schq8ij5YCAAKAjdfAFMW8gY3jwBTFygCr/wavK2GN7430jk4AAI+XAAAAAQON/Y5OAAAAAwIDjgIAAACPjmADwABMogCOEgAAACJgA8AATKIAjiEAAACPk2ADq+cBao4xYAOr55wQAFwBSo5AARyOQC6Q7JyGAAAAAK85Bq8sYY5TjleOuQAAj5gAAAABA45fjrkAAAACAQKOZAAAAI+OYAPAAEyiAI54AAAAj5NgA6vnAWqOiGADq+ecEABgA8AATKIBSo6XARyOnRaOly6DpJyGryKPmAIAAoCOpsAUxo2BjrLAFMabAKwBBq8tYY6+jsOPHAAAj5kAAAABA47LjxwAAAADAgOO0AAAAI+OYAPAAEyiAI7gAAAAImADwABMogCO7wAAAI+TYAOr5wFqjv9gA6vnnBAAXAFKjw4BHI8OLpDsnIYAAAAArzkGry5hjyGPJY+JAACPmgAAAAEDjy6PiQAAAAIBAo8zAAAAj45gA8AATKIAj0cAAACPk2ADq+cBao9XYAOr55wQAGADwABMogFKj2YBHI9sFo9mLoOknIavIo+aAgACgI92wBTHXoGPgsAUx2wArAMGry9hj46Pk4/tAACPmwAAAAEDj5yP7QAAAAMCA4+hAAAAj45gA8AATKIAj7EAAAAiYAPAAEyiAI/AAAAAj5NgA6vnAWqP0GADq+ecEABcAUqP3wEcj98ukOychgAAAACvOQavMGGP8o/2kFgAAI+cAAAAAQOP/pBYAAAAAgECkAMAAACPjmADwABMogCQFwAAAI+TYAOr5wFqkCdgA6vnnBAAYAPAAEyiAUqQNgEckDwWkDYug6Schq8ij5wCAAKAkEXAFMgvgZBRwBTIPQCsBQavMWGQXZBikLsAAI+dAAAAAQOQapC7AAAAAwIDkG8AAACPjmADwABMogCQfwAAACJgA8AATKIAkI4AAACPk2ADq+cBapCeYAOr55wQAFwBSpCtARyQrS6Q7JyGAAAAAK85Bq8yYZDAkMSRKAAAj54AAAABA5DNkSgAAAACAQKQ0gAAAI+OYAPAAEyiAJDmAAAAj5NgA6vnAWqQ9mADq+ecEABgA8AATKIBSpEFARyRCxaRBS6DpJyGryKPngIAAoCRFcAUyQCBkSHAFMkOAKwHBq8zYZEtkTKRjAAAj58AAAABA5E7kYwAAAADAgORQAAAAI+OYAPAAEyiAJFQAAAAImADwABMogCRXwAAAI+TYAOr5wFqkW9gA6vnnBAAXAFKkX4BHJF+LpDsnIYAAAAArzkGrzRhkZGRmJH+AACPoAAAAAEDkaKR/gAAAAIBApGnAAAAj45gA8AATKIAkbsAAACPk2ADq+cBapHLYAOr55wQAGADwABLUAFKkdoBHJHgFpHaLoOknIavIo+gAgACgJHrwBTJ0YGR98AUyd8ArAkGrzVhkgOSCJJmAACPoQAAAAEDkhKSZgAAAAMCA5IXAAAAj45gA8AATKIAkioAAAAiYAPAAEtQAJI5AAAAj5NgA6vnAWqSSWADq+ecEABcAUqSWAEcklgukOychgAAAACvOQavNmGSa5JyktgAAI+iAAAAAQOSfJLYAAAAAgECkoEAAACPjmADwABMogCSlQAAAI+TYAOr5wFqkqVgA6vnnBAAYAPAAEtQAUqStAEckroWkrQug6Schq8ij6ICAAKAksXAFMqigZLRwBTKsACsCwavN2GS3ZLik0AAAI+jAAAAAQOS7JNAAAAAAwIDkvEAAACPjmADwABMogCTBAAAACJgA8AAS1AAkxMAAACPk2ADq+cBapMjYAOr55wQAFwBSpMyARyTMi6Q7JyGAAAAAK85Bq87YZNFk02TewEAjhQAAAABA5Ngk3sAAAAAAAAAYAPAAEyiAUqTYwEWk2kWk2Mug6Schq8ijhSr1wavPGGTgJOIk6wBAIadAAAAAQOTlpOsAAAAAAAAAGADwABMogFKk5kBFpOfFpOZLoOknIavIoadq9gGrz1hk7GTuZPdAQCOGQAAAAEDk8eT3QAAAAAAAABgA8AATKIBSpPKARaT0BaTyi6DpJyGryKOGavZBq8+YZPik/GUJwEAgcEAAAABA5P4lCcAAAAAAAAAYAOrwAFKk/sBH5P/rx4BAAEWlCAWlBoug6Schq8igcGr2gAGrzlhlCyUMZSgAACQ7JyGAAAAAQOUPZSgAAAAAAAAAFwBPgE9MJRGH5RQwABMMAEAASeQ7QAAABTDjgAUw+EAFMQuABTEgQAUxM4AFMU9ABTFnwAUxg4AFMZwABTG3wAUx0EAFMewABTIEgAUyIEAFMjjABTJUgAUybQAFMojABTKhQAUyvQAFMtWABTLkAAUy8oAFMwEABTMRQAUzHsAAAAZAq9BYZSllLSXfQeQ7gADAAAEkO9gA8AATe8BWwAABJDwXQPAAE1GAV8DAAABXQPAAE1GAVsAAASQ8WADq9UBYAOr1QFgA8AATe8AAAABBa9RAAAAAAQAAAMAAAAAAAAAAABdA69BA18DAABfAwEAXwMCAAE/AQkBAMAATgUAAAAACgavRGGU/5UFlQoBAoRCnIYAAAABA5UKlQoAAAAAAAAAXwMBAAAGr0VhlQ6VFZUrAQCDpJyGAAAAAQOVG5UrAAAAAAAAAF8DAgABSpUeASaVJQAWlR8uhEKchq9EXwMCAAavRmGVMJU4lU4BAIHIAAAAAQOVP5VOAAAAAAAAAGADwABMogFKlUIBFpVIFpVCLoRCnIavRIHIwABNdgavTGGVU5VelXsDAILRAAAAAQOVYJV7AAAAAQEBlWUAAACB3WADwABMogAAXwMAAAFKlW8BHJV0FpVvLoRCnIavRILRAQABgJV1wBTOIwDAAE1VBq9HYZWAlYiVtgEAjhQAAAABA5WblbYAAAAAAAAAYAPAAEyiAUqVngEWlaQWlZ4ug6Schq9FjhSr1wavSGGVu5XDlecBAIadAAAAAQOV0ZXnAAAAAAAAAGADwABMogFKldQBFpXaFpXULoOknIavRYadq9gGr0lhleyV9JYYAQCOGQAAAAEDlgKWGAAAAAAAAABgA8AATKIBSpYFARaWCxaWBS6DpJyGr0WOGavZBq9KYZYdliyWYgEAgcEAAAABA5YzlmIAAAAAAAAAYAOrwAFKljYBH5Y6rx4BAAEWllsWllUug6Schq9FgcGr2gAGr05hlmeWaZaAAAKOI5yGAAAAAQOWdJaAAAAAAQEBlnkAAACByGADwABMogAAXwMBAAAGr09hloWWh5d7AACEYQAAAAEDlo6XewAAAAIBApaTAAAAbWADwABMogCWnwAAAIRUYAPAAEyiAWoAYAHAAE2sAgBfAwEAAT4FPYmWq8AUz6UelrzAAEvfAwADgJbMwBTPmIGW08AUz6UWltgugcivRgBOlumW9wAAkPJgA8AATKIBHJb9gZb5wBTPpYEGAQABgJb/wBTPmADAAE3JTpcMlxMAAIDmXwMBAAEclxUujiOchgEAAYKXIcAUz+4Ar049HJc8g5c1wBTQGYRYBAAEk4KXSMAUz+4Wl1cuhEKchq9EgJdewBTPmADAAE1rSpdqAYOXccAU0BkAABTNagAUzY8AFM3KABTOBgAUzlkAFM6TABTOzQAUzwcAFM9IABTPewAU0HQAAAAKAq9SYZe+l8SY5jeQ8wAAAV0Dlz8BYAPAAEyiAAFdA69BA2ADwABMomADrBdgA6wXAAEFr1QAAAAABAAAAwAAAAAAAAAAAGADr1IBPwEJAACXQQAAAAAKBq9XYZT/lQWVCgEChEKchgAAAAEDlQqVCgAAAAAAAABgA6wXAAavWGGVDpUVlSsBAIOknIYAAAABA5UblSsAAAAAAAAAYAOsFwFKlR4BJpUlABaVHy6EQpyGr0RgA6wXBq9ZYZUwlTiVTgEAgcgAAAABA5U/lU4AAAAAAAAAYAPAAEyiAUqVQgEWlUgWlUIuhEKchq9EgcjAAE12Bq9fYZVTlV6VewMAgtEAAAABA5VglXsAAAABAQGVZQAAAIHdYAPAAEyiAABgA8AATKIBSpVvARyVdBaVby6EQpyGr0SC0QEAAYCVdcAU0bUAwABNVQavWmGVgJWIlbYBAI4UAAAAAQOVm5W2AAAAAAAAAGADwABMogFKlZ4BFpWkFpWeLoOknIavRY4Uq9cGr1thlbuVw5XnAQCGnQAAAAEDldGV5wAAAAAAAABgA8AATKIBSpXUARaV2haV1C6DpJyGr0WGnavYBq9cYZXslfSWGAEAjhkAAAABA5YClhgAAAAAAAAAYAPAAEyiAUqWBQEWlgsWlgUug6Schq9Fjhmr2QavXWGWHZYslmIBAIHBAAAAAQOWM5ZiAAAAAAAAAGADq8ABSpY2AR+WOq8eAQABFpZbFpZVLoOknIavRYHBq9oABq9hYZZnlmmWgAACjiOchgAAAAEDlnSWgAAAAAEBAZZ5AAAAgchgA8AATKIAAGADrBcABq9iYZaFloeXewAAhGEAAAABA5aOl3sAAAACAQKWkwAAAG1gA8AATKIAlp8AAACEVGADwABMogFqAGABwABNrAIAYAOsFwE+BT2JlqvAFNM5Hpa8wABL3wMAA4CWzMAU0yyBltPAFNM5FpbYLoHIr0YATpbplvcAAJDyYAPAAEyiARyW/YGW+cAU0zmBBgEAAYCW/8AU0ywAwABNyU6XDJcTAACA5mADrBcBHJcVLo4jnIYBAAGClyHAFNOCAK9OPRyXPIOXNcAU062EWAQABJOCl0jAFNOCFpdXLoRCnIavRICXXsAU0ywAwABNa0qXagGDl3HAFNOtAAAU0PwAFNEhABTRXAAU0ZgAFNHtABTSJwAU0mEAFNKbABTS3AAU0w8AFNQIAAAACgKvY2GXvpfEmOYDkPQAAAFgA69SAAFgA6wXAQSvZmGYaJhtCYRCnIYAYAOsFwABBa9rYZhxmHGYqQAAAAOYipipAAAAAQEBmJUAAACERmADrBcAAGADr2MBPwIIAK9mgJilwBTUgAkBmHGvVAAAAAABBq9pYZiumLiY5AAAjiOchgAAAAEDmMOY5AAAAAEBAZjIAAAAgchgA8AATKIAAGADrBcBSpjTAR6Y06wbAQABgJjdwBTUyQAAABTUqgAU1PEAAAABAq9sYZkmmSyaRTeQ9QAAAV0Dlz8BYAPAAEyiAAFdA69BA2ADwABMomADrA1gA6wNAAEFr24AAAAABAAAAwAAAAAAAAAAAGADr2wBPwEJAACXQQAAAAAKBq9xYZT/lQWVCgEChEKchgAAAAEDlQqVCgAAAAAAAABgA6wNAAavcmGVDpUVlSsBAIOknIYAAAABA5UblSsAAAAAAAAAYAOsDQFKlR4BJpUlABaVHy6EQpyGr0RgA6wNBq9zYZUwlTiVTgEAgcgAAAABA5U/lU4AAAAAAAAAYAPAAEyiAUqVQgEWlUgWlUIuhEKchq9EgcjAAE12Bq95YZVTlV6VewMAgtEAAAABA5VglXsAAAABAQGVZQAAAIHdYAPAAEyiAABgA8AATKIBSpVvARyVdBaVby6EQpyGr0SC0QEAAYCVdcAU1g4AwABNVQavdGGVgJWIlbYBAI4UAAAAAQOVm5W2AAAAAAAAAGADwABMogFKlZ4BFpWkFpWeLoOknIavRY4Uq9cGr3VhlbuVw5XnAQCGnQAAAAEDldGV5wAAAAAAAABgA8AATKIBSpXUARaV2haV1C6DpJyGr0WGnavYBq92YZXslfSWGAEAjhkAAAABA5YClhgAAAAAAAAAYAPAAEyiAUqWBQEWlgsWlgUug6Schq9Fjhmr2Qavd2GWHZYslmIBAIHBAAAAAQOWM5ZiAAAAAAAAAGADq8ABSpY2AR+WOq8eAQABFpZbFpZVLoOknIavRYHBq9oABq97YZZnlmmWgAACjiOchgAAAAEDlnSWgAAAAAEBAZZ5AAAAgchgA8AATKIAAGADrA0ABq98YZaFloeXewAAhGEAAAABA5aOl3sAAAACAQKWkwAAAG1gA8AATKIAlp8AAACEVGADwABMogFqAGABwABNrAIAYAOsDQE+BT2JlqvAFNeSHpa8wABL3wMAA4CWzMAU14WBltPAFNeSFpbYLoHIr0YATpbplvcAAJDyYAPAAEyiARyW/YGW+cAU15KBBgEAAYCW/8AU14UAwABNyU6XDJcTAACA5mADrA0BHJcVLo4jnIYBAAGClyHAFNfbAK9OPRyXPIOXNcAU2AaEWAQABJOCl0jAFNfbFpdXLoRCnIavRICXXsAU14UAwABNa0qXagGDl3HAFNgGAAAU1VUAFNV6ABTVtQAU1fEAFNZGABTWgAAU1roAFNb0ABTXNQAU12gAFNhhAAAACgKvfWGZJpksmkUDkPYAAAFgA69sAAFgA6wNAQSvgGGZy5nQCYRCnIYAYAOsDQABBa+FYZnUmdSaCgAAAAOZ7JoKAAAAAQEBmfYAAACERmADrA0AAGADr30BPwIIAK+AgJoGwBTY2QkBmdSvbgAAAAABBq+DYZoPmhiaQwAAjiOchgAAAAEDmiOaQwAAAAEBAZooAAAAgchgA8AATKIAAGADrA0BSpozAR6aM6wRAQABgJo8wBTZIgAAABTZAwAU2UoAAAABAq+GYZqNmpOb9DeQ9wAAAV0Dlz8BYAPAAEyiAAFdA69BA2ADwABMomADrCJgA6wiAAEFr4gAAAAABAAAAwAAAAAAAAAAAGADr4YBPwEJAACXQQAAAAAKBq+LYZT/lQWVCgEChEKchgAAAAEDlQqVCgAAAAAAAABgA6wiAAavjGGVDpUVlSsBAIOknIYAAAABA5UblSsAAAAAAAAAYAOsIgFKlR4BJpUlABaVHy6EQpyGr0RgA6wiBq+NYZUwlTiVTgEAgcgAAAABA5U/lU4AAAAAAAAAYAPAAEyiAUqVQgEWlUgWlUIuhEKchq9EgcjAAE12Bq+TYZVTlV6VewMAgtEAAAABA5VglXsAAAABAQGVZQAAAIHdYAPAAEyiAABgA8AATKIBSpVvARyVdBaVby6EQpyGr0SC0QEAAYCVdcAU2mcAwABNVQavjmGVgJWIlbYBAI4UAAAAAQOVm5W2AAAAAAAAAGADwABMogFKlZ4BFpWkFpWeLoOknIavRY4Uq9cGr49hlbuVw5XnAQCGnQAAAAEDldGV5wAAAAAAAABgA8AATKIBSpXUARaV2haV1C6DpJyGr0WGnavYBq+QYZXslfSWGAEAjhkAAAABA5YClhgAAAAAAAAAYAPAAEyiAUqWBQEWlgsWlgUug6Schq9Fjhmr2QavkWGWHZYslmIBAIHBAAAAAQOWM5ZiAAAAAAAAAGADq8ABSpY2AR+WOq8eAQABFpZbFpZVLoOknIavRYHBq9oABq+VYZZnlmmWgAACjiOchgAAAAEDlnSWgAAAAAEBAZZ5AAAAgchgA8AATKIAAGADrCIABq+WYZaFloeXewAAhGEAAAABA5aOl3sAAAACAQKWkwAAAG1gA8AATKIAlp8AAACEVGADwABMogFqAGABwABNrAIAYAOsIgE+BT2JlqvAFNvrHpa8wABL3wMAA4CWzMAU296BltPAFNvrFpbYLoHIr0YATpbplvcAAJDyYAPAAEyiARyW/YGW+cAU2+uBBgEAAYCW/8AU294AwABNyU6XDJcTAACA5mADrCIBHJcVLo4jnIYBAAGClyHAFNw0AK9OPRyXPIOXNcAU3F+EWAQABJOCl0jAFNw0FpdXLoRCnIavRICXXsAU294AwABNa0qXagGDl3HAFNxfAAAU2a4AFNnTABTaDgAU2koAFNqfABTa2QAU2xMAFNtNABTbjgAU28EAFNy6AAAACgKvl2GajZqTm/QDkPgAAAFgA6+GAAFgA6wiAQSvmmGbWptfCYRCnIYAYAOsIgABBa+fYZtjm2ObqQAAAAObg5upAAAAAQEBm5UAAACERmADrCIAAGADr5cBPwIIAK+agJulwBTdMgkBm2OviAAAAAABBq+dYZuum7+b8gAAjiOchgAAAAEDm8qb8gAAAAEBAZvPAAAAgchgA8AATKIAAGADrCIBSpvaAR6b2qwmAQABgJvrwBTdewAAABTdXAAU3aMAAAABAq+gYZw2nDydZzeQ+QAAAV0Dlz8BYAPAAEyiAAFdA69BA2ADwABMomADrDZgA6w2AAEFr6IAAAAABAAAAwAAAAAAAAAAAGADr6ABPwEJAACXQQAAAAAKBq+lYZT/lQWVCgEChEKchgAAAAEDlQqVCgAAAAAAAABgA6w2AAavpmGVDpUVlSsBAIOknIYAAAABA5UblSsAAAAAAAAAYAOsNgFKlR4BJpUlABaVHy6EQpyGr0RgA6w2Bq+nYZUwlTiVTgEAgcgAAAABA5U/lU4AAAAAAAAAYAPAAEyiAUqVQgEWlUgWlUIuhEKchq9EgcjAAE12Bq+tYZVTlV6VewMAgtEAAAABA5VglXsAAAABAQGVZQAAAIHdYAPAAEyiAABgA8AATKIBSpVvARyVdBaVby6EQpyGr0SC0QEAAYCVdcAU3sAAwABNVQavqGGVgJWIlbYBAI4UAAAAAQOVm5W2AAAAAAAAAGADwABMogFKlZ4BFpWkFpWeLoOknIavRY4Uq9cGr6lhlbuVw5XnAQCGnQAAAAEDldGV5wAAAAAAAABgA8AATKIBSpXUARaV2haV1C6DpJyGr0WGnavYBq+qYZXslfSWGAEAjhkAAAABA5YClhgAAAAAAAAAYAPAAEyiAUqWBQEWlgsWlgUug6Schq9Fjhmr2Qavq2GWHZYslmIBAIHBAAAAAQOWM5ZiAAAAAAAAAGADq8ABSpY2AR+WOq8eAQABFpZbFpZVLoOknIavRYHBq9oABq+vYZZnlmmWgAACjiOchgAAAAEDlnSWgAAAAAEBAZZ5AAAAgchgA8AATKIAAGADrDYABq+wYZaFloeXewAAhGEAAAABA5aOl3sAAAACAQKWkwAAAG1gA8AATKIAlp8AAACEVGADwABMogFqAGABwABNrAIAYAOsNgE+BT2JlqvAFOBEHpa8wABL3wMAA4CWzMAU4DeBltPAFOBEFpbYLoHIr0YATpbplvcAAJDyYAPAAEyiARyW/YGW+cAU4ESBBgEAAYCW/8AU4DcAwABNyU6XDJcTAACA5mADrDYBHJcVLo4jnIYBAAGClyHAFOCNAK9OPRyXPIOXNcAU4LiEWAQABJOCl0jAFOCNFpdXLoRCnIavRICXXsAU4DcAwABNa0qXagGDl3HAFOC4AAAU3gcAFN4sABTeZwAU3qMAFN74ABTfMgAU32wAFN+mABTf5wAU4BoAFOETAAAACgKvsWGcNpw8nWcDkPoAAAFgA6+gAAFgA6w2AQSvtGGc5ZzqCYRCnIYAYAOsNgABBa+5YZzunO6dKAAAAAOdCJ0oAAAAAQEBnRQAAACERmADrDYAAGADr7EBPwIIAK+0gJ0kwBThiwkBnO6vogAAAAABBq+3YZ0tnTidZQAAjiOchgAAAAEDnUOdZQAAAAEBAZ1IAAAAgchgA8AATKIAAGADrDYBSp1TAR6dU6w6AQABgJ1ewBTh1AAAABThtQAU4fwAAAABAq+6YZ2ona6e0DeQ+wAAAV0Dlz8BYAPAAEyiAAFdA69BA2ADwABMomADrCxgA6wsAAEFr7wAAAAABAAAAwAAAAAAAAAAAGADr7oBPwEJAACXQQAAAAAKBq+/YZT/lQWVCgEChEKchgAAAAEDlQqVCgAAAAAAAABgA6wsAAavwGGVDpUVlSsBAIOknIYAAAABA5UblSsAAAAAAAAAYAOsLAFKlR4BJpUlABaVHy6EQpyGr0RgA6wsBq/BYZUwlTiVTgEAgcgAAAABA5U/lU4AAAAAAAAAYAPAAEyiAUqVQgEWlUgWlUIuhEKchq9EgcjAAE12Bq/HYZVTlV6VewMAgtEAAAABA5VglXsAAAABAQGVZQAAAIHdYAPAAEyiAABgA8AATKIBSpVvARyVdBaVby6EQpyGr0SC0QEAAYCVdcAU4xkAwABNVQavwmGVgJWIlbYBAI4UAAAAAQOVm5W2AAAAAAAAAGADwABMogFKlZ4BFpWkFpWeLoOknIavRY4Uq9cGr8NhlbuVw5XnAQCGnQAAAAEDldGV5wAAAAAAAABgA8AATKIBSpXUARaV2haV1C6DpJyGr0WGnavYBq/EYZXslfSWGAEAjhkAAAABA5YClhgAAAAAAAAAYAPAAEyiAUqWBQEWlgsWlgUug6Schq9Fjhmr2QavxWGWHZYslmIBAIHBAAAAAQOWM5ZiAAAAAAAAAGADq8ABSpY2AR+WOq8eAQABFpZbFpZVLoOknIavRYHBq9oABq/JYZZnlmmWgAACjiOchgAAAAEDlnSWgAAAAAEBAZZ5AAAAgchgA8AATKIAAGADrCwABq/KYZaFloeXewAAhGEAAAABA5aOl3sAAAACAQKWkwAAAG1gA8AATKIAlp8AAACEVGADwABMogFqAGABwABNrAIAYAOsLAE+BT2JlqvAFOSdHpa8wABL3wMAA4CWzMAU5JCBltPAFOSdFpbYLoHIr0YATpbplvcAAJDyYAPAAEyiARyW/YGW+cAU5J2BBgEAAYCW/8AU5JAAwABNyU6XDJcTAACA5mADrCwBHJcVLo4jnIYBAAGClyHAFOTmAK9OPRyXPIOXNcAU5RGEWAQABJOCl0jAFOTmFpdXLoRCnIavRICXXsAU5JAAwABNa0qXagGDl3HAFOURAAAU4mAAFOKFABTiwAAU4vwAFONRABTjiwAU48UAFOP/ABTkQAAU5HMAFOVsAAAACgKvy2GdqJ2untADkPwAAAFgA6+6AAFgA6wsAQSvzmGeUp5XCYRCnIYAYAOsLAABBa/TYZ5bnluekwAAAAOedJ6TAAAAAQEBnn8AAACERmADrCwAAGADr8sBPwIIAK/OgJ6PwBTl5AkBnluvvAAAAAABBq/RYZ6YnqKezgAAjiOchgAAAAEDnq2ezgAAAAEBAZ6yAAAAgchgA8AATKIAAGADrCwBSp69AR6evawwAQABgJ7HwBTmLQAAABTmDgAU5lUAAAABAq/UYZ8SnxigQzeQ/QAAAV0Dlz8BYAPAAEyiAAFdA69BA2ADwABMomADrEpgA6xKAAEFr9YAAAAABAAAAwAAAAAAAAAAAGADr9QBPwEJAACXQQAAAAAKBq/ZYZT/lQWVCgEChEKchgAAAAEDlQqVCgAAAAAAAABgA6xKAAav2mGVDpUVlSsBAIOknIYAAAABA5UblSsAAAAAAAAAYAOsSgFKlR4BJpUlABaVHy6EQpyGr0RgA6xKBq/bYZUwlTiVTgEAgcgAAAABA5U/lU4AAAAAAAAAYAPAAEyiAUqVQgEWlUgWlUIuhEKchq9EgcjAAE12Bq/hYZVTlV6VewMAgtEAAAABA5VglXsAAAABAQGVZQAAAIHdYAPAAEyiAABgA8AATKIBSpVvARyVdBaVby6EQpyGr0SC0QEAAYCVdcAU53IAwABNVQav3GGVgJWIlbYBAI4UAAAAAQOVm5W2AAAAAAAAAGADwABMogFKlZ4BFpWkFpWeLoOknIavRY4Uq9cGr91hlbuVw5XnAQCGnQAAAAEDldGV5wAAAAAAAABgA8AATKIBSpXUARaV2haV1C6DpJyGr0WGnavYBq/eYZXslfSWGAEAjhkAAAABA5YClhgAAAAAAAAAYAPAAEyiAUqWBQEWlgsWlgUug6Schq9Fjhmr2Qav32GWHZYslmIBAIHBAAAAAQOWM5ZiAAAAAAAAAGADq8ABSpY2AR+WOq8eAQABFpZbFpZVLoOknIavRYHBq9oABq/jYZZnlmmWgAACjiOchgAAAAEDlnSWgAAAAAEBAZZ5AAAAgchgA8AATKIAAGADrEoABq/kYZaFloeXewAAhGEAAAABA5aOl3sAAAACAQKWkwAAAG1gA8AATKIAlp8AAACEVGADwABMogFqAGABwABNrAIAYAOsSgE+BT2JlqvAFOj2Hpa8wABL3wMAA4CWzMAU6OmBltPAFOj2FpbYLoHIr0YATpbplvcAAJDyYAPAAEyiARyW/YGW+cAU6PaBBgEAAYCW/8AU6OkAwABNyU6XDJcTAACA5mADrEoBHJcVLo4jnIYBAAGClyHAFOk/AK9OPRyXPIOXNcAU6WqEWAQABJOCl0jAFOk/FpdXLoRCnIavRICXXsAU6OkAwABNa0qXagGDl3HAFOlqAAAU5rkAFObeABTnGQAU51UAFOeqABTn5AAU6B4AFOhYABTomQAU6MwAFOnFAAAACgKv5WGfEp8YoEMDkP4AAAFgA6/UAAFgA6xKAQSv6GGfwZ/GCYRCnIYAYAOsSgABBa/tYZ/Kn8qgBAAAAAOf5KAEAAAAAQEBn/AAAACERmADrEoAAGADr+UBPwIIAK/ogKAAwBTqPQkBn8qv1gAAAAABBq/rYaAJoBSgQQAAjiOchgAAAAEDoB+gQQAAAAEBAaAkAAAAgchgA8AATKIAAGADrEoBSqAvAR6gL6xOAQABgKA6wBTqhgAAABTqZwAU6q4AAAABAq/uYaCEoIqhrDeQ/wAAAV0Dlz8BYAPAAEyiAAFdA69BA2ADwABMomADrEBgA6xAAAEFr/AAAAAABAAAAwAAAAAAAAAAAGADr+4BPwEJAACXQQAAAAAKBq/zYZT/lQWVCgEChEKchgAAAAEDlQqVCgAAAAAAAABgA6xAAAav9GGVDpUVlSsBAIOknIYAAAABA5UblSsAAAAAAAAAYAOsQAFKlR4BJpUlABaVHy6EQpyGr0RgA6xABq/1YZUwlTiVTgEAgcgAAAABA5U/lU4AAAAAAAAAYAPAAEyiAUqVQgEWlUgWlUIuhEKchq9EgcjAAE12Bq/7YZVTlV6VewMAgtEAAAABA5VglXsAAAABAQGVZQAAAIHdYAPAAEyiAABgA8AATKIBSpVvARyVdBaVby6EQpyGr0SC0QEAAYCVdcAU68sAwABNVQav9mGVgJWIlbYBAI4UAAAAAQOVm5W2AAAAAAAAAGADwABMogFKlZ4BFpWkFpWeLoOknIavRY4Uq9cGr/dhlbuVw5XnAQCGnQAAAAEDldGV5wAAAAAAAABgA8AATKIBSpXUARaV2haV1C6DpJyGr0WGnavYBq/4YZXslfSWGAEAjhkAAAABA5YClhgAAAAAAAAAYAPAAEyiAUqWBQEWlgsWlgUug6Schq9Fjhmr2Qav+WGWHZYslmIBAIHBAAAAAQOWM5ZiAAAAAAAAAGADq8ABSpY2AR+WOq8eAQABFpZbFpZVLoOknIavRYHBq9oABq/9YZZnlmmWgAACjiOchgAAAAEDlnSWgAAAAAEBAZZ5AAAAgchgA8AATKIAAGADrEAABq/+YZaFloeXewAAhGEAAAABA5aOl3sAAAACAQKWkwAAAG1gA8AATKIAlp8AAACEVGADwABMogFqAGABwABNrAIAYAOsQAE+BT2JlqvAFO1PHpa8wABL3wMAA4CWzMAU7UKBltPAFO1PFpbYLoHIr0YATpbplvcAAJDyYAPAAEyiARyW/YGW+cAU7U+BBgEAAYCW/8AU7UIAwABNyU6XDJcTAACA5mADrEABHJcVLo4jnIYBAAGClyHAFO2YAK9OPRyXPIOXNcAU7cOEWAQABJOCl0jAFO2YFpdXLoRCnIavRICXXsAU7UIAwABNa0qXagGDl3HAFO3DAAAU6xIAFOs3ABTrcgAU664AFOwDABTsPQAU7HcAFOyxABTs8gAU7SUAFO4eAAAACgKv/2GghKCKoawDkQAAAAFgA6/uAAFgA6xAAQSwAmGhLqEzCYRCnIYAYAOsQAABBbAHYaE3oTehbwAAAAOhUKFvAAAAAQEBoVsAAACERmADrEAAAGADr/8BPwIIALACgKFrwBTulgkBoTev8AAAAAABBrAFYaF0oX6hqgAAjiOchgAAAAEDoYmhqgAAAAEBAaGOAAAAgchgA8AATKIAAGADrEABSqGZAR6hmaxEAQABgKGjwBTu3wAAABTuwAAU7wcAAAABArAIYaHuofSjHzeRAQAAAV0Dlz8BYAPAAEyiAAFdA69BA2ADwABMomADrF5gA6xeAAEFsAoAAAAABAAAAwAAAAAAAAAAAGADsAgBPwEJAACXQQAAAAAKBrANYZT/lQWVCgEChEKchgAAAAEDlQqVCgAAAAAAAABgA6xeAAawDmGVDpUVlSsBAIOknIYAAAABA5UblSsAAAAAAAAAYAOsXgFKlR4BJpUlABaVHy6EQpyGr0RgA6xeBrAPYZUwlTiVTgEAgcgAAAABA5U/lU4AAAAAAAAAYAPAAEyiAUqVQgEWlUgWlUIuhEKchq9EgcjAAE12BrAVYZVTlV6VewMAgtEAAAABA5VglXsAAAABAQGVZQAAAIHdYAPAAEyiAABgA8AATKIBSpVvARyVdBaVby6EQpyGr0SC0QEAAYCVdcAU8CQAwABNVQawEGGVgJWIlbYBAI4UAAAAAQOVm5W2AAAAAAAAAGADwABMogFKlZ4BFpWkFpWeLoOknIavRY4Uq9cGsBFhlbuVw5XnAQCGnQAAAAEDldGV5wAAAAAAAABgA8AATKIBSpXUARaV2haV1C6DpJyGr0WGnavYBrASYZXslfSWGAEAjhkAAAABA5YClhgAAAAAAAAAYAPAAEyiAUqWBQEWlgsWlgUug6Schq9Fjhmr2QawE2GWHZYslmIBAIHBAAAAAQOWM5ZiAAAAAAAAAGADq8ABSpY2AR+WOq8eAQABFpZbFpZVLoOknIavRYHBq9oABrAXYZZnlmmWgAACjiOchgAAAAEDlnSWgAAAAAEBAZZ5AAAAgchgA8AATKIAAGADrF4ABrAYYZaFloeXewAAhGEAAAABA5aOl3sAAAACAQKWkwAAAG1gA8AATKIAlp8AAACEVGADwABMogFqAGABwABNrAIAYAOsXgE+BT2JlqvAFPGoHpa8wABL3wMAA4CWzMAU8ZuBltPAFPGoFpbYLoHIr0YATpbplvcAAJDyYAPAAEyiARyW/YGW+cAU8aiBBgEAAYCW/8AU8ZsAwABNyU6XDJcTAACA5mADrF4BHJcVLo4jnIYBAAGClyHAFPHxAK9OPRyXPIOXNcAU8hyEWAQABJOCl0jAFPHxFpdXLoRCnIavRICXXsAU8ZsAwABNa0qXagGDl3HAFPIcAAAU72sAFO+QABTvywAU8AcAFPBcABTwlgAU8NAAFPEKABTxSwAU8X4AFPJ3AAAACgKwGWGh7qH0ox8DkQIAAAFgA7AIAAFgA6xeAQSwHGGinaKiCYRCnIYAYAOsXgABBbAhYaKmoqai4AAAAAOiwKLgAAAAAQEBoswAAACERmADrF4AAGADsBkBPwIIALAcgKLcwBTy7wkBoqawCgAAAAABBrAfYaLlovCjHQAAjiOchgAAAAEDovujHQAAAAEBAaMAAAAAgchgA8AATKIAAGADrF4BSqMLAR6jC6xiAQABgKMWwBTzOAAAABTzGQAU82AAAAABArAiYaNgo2akiDeRAwAAAV0Dlz8BYAPAAEyiAAFdA69BA2ADwABMomADrFRgA6xUAAEFsCQAAAAABAAAAwAAAAAAAAAAAGADsCIBPwEJAACXQQAAAAAKBrAnYZT/lQWVCgEChEKchgAAAAEDlQqVCgAAAAAAAABgA6xUAAawKGGVDpUVlSsBAIOknIYAAAABA5UblSsAAAAAAAAAYAOsVAFKlR4BJpUlABaVHy6EQpyGr0RgA6xUBrApYZUwlTiVTgEAgcgAAAABA5U/lU4AAAAAAAAAYAPAAEyiAUqVQgEWlUgWlUIuhEKchq9EgcjAAE12BrAvYZVTlV6VewMAgtEAAAABA5VglXsAAAABAQGVZQAAAIHdYAPAAEyiAABgA8AATKIBSpVvARyVdBaVby6EQpyGr0SC0QEAAYCVdcAU9H0AwABNVQawKmGVgJWIlbYBAI4UAAAAAQOVm5W2AAAAAAAAAGADwABMogFKlZ4BFpWkFpWeLoOknIavRY4Uq9cGsCthlbuVw5XnAQCGnQAAAAEDldGV5wAAAAAAAABgA8AATKIBSpXUARaV2haV1C6DpJyGr0WGnavYBrAsYZXslfSWGAEAjhkAAAABA5YClhgAAAAAAAAAYAPAAEyiAUqWBQEWlgsWlgUug6Schq9Fjhmr2QawLWGWHZYslmIBAIHBAAAAAQOWM5ZiAAAAAAAAAGADq8ABSpY2AR+WOq8eAQABFpZbFpZVLoOknIavRYHBq9oABrAxYZZnlmmWgAACjiOchgAAAAEDlnSWgAAAAAEBAZZ5AAAAgchgA8AATKIAAGADrFQABrAyYZaFloeXewAAhGEAAAABA5aOl3sAAAACAQKWkwAAAG1gA8AATKIAlp8AAACEVGADwABMogFqAGABwABNrAIAYAOsVAE+BT2JlqvAFPYBHpa8wABL3wMAA4CWzMAU9fSBltPAFPYBFpbYLoHIr0YATpbplvcAAJDyYAPAAEyiARyW/YGW+cAU9gGBBgEAAYCW/8AU9fQAwABNyU6XDJcTAACA5mADrFQBHJcVLo4jnIYBAAGClyHAFPZKAK9OPRyXPIOXNcAU9nWEWAQABJOCl0jAFPZKFpdXLoRCnIavRICXXsAU9fQAwABNa0qXagGDl3HAFPZ1AAAU88QAFPPpABT0JAAU9GAAFPS1ABT07wAU9SkAFPVjABT1pAAU9dcAFPbQAAAACgKwM2GjYKNmpIgDkQQAAAFgA7AiAAFgA6xUAQSwNmGkCqQPCYRCnIYAYAOsVAABBbA7YaQTpBOkSwAAAAOkLKRLAAAAAQEBpDcAAACERmADrFQAAGADsDMBPwIIALA2gKRHwBT3SAkBpBOwJAAAAAABBrA5YaRQpFqkhgAAjiOchgAAAAEDpGWkhgAAAAEBAaRqAAAAgchgA8AATKIAAGADrFQBSqR1AR6kdaxYAQABgKR/wBT3kQAAABT3cgAU97kAAAABArA8YaTLpNGmDTeRBQAAAV0Dlz8BYAOtyAABXQOvQQNgA63IYAOsh2ADrIcAAQWwPgAAAAAEAAADAAAAAAAAAAAAYAOwPAE/AQkAAJdBAAAAAAoGsEFhlP+VBZUKAQKEQpyGAAAAAQOVCpUKAAAAAAAAAGADrIcABrBCYZUOlRWVKwEAg6SchgAAAAEDlRuVKwAAAAAAAABgA6yHAUqVHgEmlSUAFpUfLoRCnIavRGADrIcGsENhlTCVOJVOAQCByAAAAAEDlT+VTgAAAAAAAABgA8AATKIBSpVCARaVSBaVQi6EQpyGr0SByMAATXYGsElhlVOVXpV7AwCC0QAAAAEDlWCVewAAAAEBAZVlAAAAgd1gA8AATKIAAGADrcgBSpVvARyVdBaVby6EQpyGr0SC0QEAAYCVdcAU+NIAwABNVQawRGGVgJWIlbYBAI4UAAAAAQOVm5W2AAAAAAAAAGADwABMogFKlZ4BFpWkFpWeLoOknIavRY4Uq9cGsEVhlbuVw5XnAQCGnQAAAAEDldGV5wAAAAAAAABgA8AATKIBSpXUARaV2haV1C6DpJyGr0WGnavYBrBGYZXslfSWGAEAjhkAAAABA5YClhgAAAAAAAAAYAPAAEyiAUqWBQEWlgsWlgUug6Schq9Fjhmr2QawR2GWHZYslmIBAIHBAAAAAQOWM5ZiAAAAAAAAAGADq8ABSpY2AR+WOq8eAQABFpZbFpZVLoOknIavRYHBq9oABrBLYZZnlmmWgAACjiOchgAAAAEDlnSWgAAAAAEBAZZ5AAAAgchgA8AATKIAAGADrIcABrBMYZaFloeXewAAhGEAAAABA5aOl3sAAAACAQKWkwAAAG1gA8AATKIAlp8AAACEVGADwABMogFqAGABwABNrAIAYAOshwE+BT2JlqvAFPpUHpa8wABL3wMAA4CWzMAU+keBltPAFPpUFpbYLoHIr0YATpbplvcAAJDyYAPAAEyiARyW/YGW+cAU+lSBBgEAAYCW/8AU+kcAwABNyU6XDJcTAACA5mADrIcBHJcVLo4jnIYBAAGClyHAFPqdAK9OPRyXPIOXNcAU+siEWAQABJOCl0jAFPqdFpdXLoRCnIavRICXXsAU+kcAwABNa0qXagGDl3HAFPrIAAAU+BkAFPg+ABT4eQAU+LUAFPkIABT5QgAU+XwAFPm2ABT59wAU+ioAFPsjAAAACgKwTWGky6TRpg0DkQYAAAFgA7A8AAFgA6yHAQSwUGGlh6WMCYRCnIYAYAOshwABBbBVYaWQpZClzAAAAAOlq6XMAAAAAQEBpbgAAACERmADrIcAAGADsE0BPwIIALBQgKXIwBT7mwkBpZCwPgAAAAABBrBTYaXRpd2mCwAAjiOchgAAAAEDpeimCwAAAAEBAaXtAAAAgchgA8AATKIAAGADrIcBSqX4AR6l+KyLAQABgKYEwBT75AAAABT7xQAU/AwAAAABArBWYaZSplinqjeRBwAAAV0Dlz8BYAOsnQABXQOvQQNgA6ydYAOsfGADrHwAAQWwWAAAAAAEAAADAAAAAAAAAAAAYAOwVgE/AQkAAJdBAAAAAAoGsFthlP+VBZUKAQKEQpyGAAAAAQOVCpUKAAAAAAAAAGADrHwABrBcYZUOlRWVKwEAg6SchgAAAAEDlRuVKwAAAAAAAABgA6x8AUqVHgEmlSUAFpUfLoRCnIavRGADrHwGsF1hlTCVOJVOAQCByAAAAAEDlT+VTgAAAAAAAABgA8AATKIBSpVCARaVSBaVQi6EQpyGr0SByMAATXYGsGNhlVOVXpV7AwCC0QAAAAEDlWCVewAAAAEBAZVlAAAAgd1gA8AATKIAAGADrJ0BSpVvARyVdBaVby6EQpyGr0SC0QEAAYCVdcAU/SUAwABNVQawXmGVgJWIlbYBAI4UAAAAAQOVm5W2AAAAAAAAAGADwABMogFKlZ4BFpWkFpWeLoOknIavRY4Uq9cGsF9hlbuVw5XnAQCGnQAAAAEDldGV5wAAAAAAAABgA8AATKIBSpXUARaV2haV1C6DpJyGr0WGnavYBrBgYZXslfSWGAEAjhkAAAABA5YClhgAAAAAAAAAYAPAAEyiAUqWBQEWlgsWlgUug6Schq9Fjhmr2QawYWGWHZYslmIBAIHBAAAAAQOWM5ZiAAAAAAAAAGADq8ABSpY2AR+WOq8eAQABFpZbFpZVLoOknIavRYHBq9oABrBlYZZnlmmWgAACjiOchgAAAAEDlnSWgAAAAAEBAZZ5AAAAgchgA8AATKIAAGADrHwABrBmYZaFloeXewAAhGEAAAABA5aOl3sAAAACAQKWkwAAAG1gA8AATKIAlp8AAACEVGADwABMogFqAGABwABNrAIAYAOsfAE+BT2JlqvAFP6nHpa8wABL3wMAA4CWzMAU/pqBltPAFP6nFpbYLoHIr0YATpbplvcAAJDyYAPAAEyiARyW/YGW+cAU/qeBBgEAAYCW/8AU/poAwABNyU6XDJcTAACA5mADrHwBHJcVLo4jnIYBAAGClyHAFP7wAK9OPRyXPIOXNcAU/xuEWAQABJOCl0jAFP7wFpdXLoRCnIavRICXXsAU/poAwABNa0qXagGDl3HAFP8bAAAU/GwAFPyRABT8zAAU/QgAFP1bABT9lQAU/c8AFP4JABT+SgAU/n0AFP92AAAACgKwZ2GmUqZYp6oDkQgAAAFgA7BWAAFgA6x8AQSwamGnHKchCYRCnIYAYAOsfAABBbBvYaclpyWnZQAAAAOnQqdlAAAAAQEBp1EAAACERmADrHwAAGADsGcBPwIIALBqgKdhwBT/7gkBpyWwWAAAAAABBrBtYadqp3inqAAAjiOchgAAAAEDp4OnqAAAAAEBAaeIAAAAgchgA8AATKIAAGADrHwBSqeTAR6nk6yAAQABgKehwBUANwAAABUAGAAVAF8AAAABArBwYafvp/WpRzeRCQAAAV0Dlz8BYAOu7AABXQOvQQNgA67sYAOskmADrJIAAQWwcgAAAAAEAAADAAAAAAAAAAAAYAOwcAE/AQkAAJdBAAAAAAoGsHVhlP+VBZUKAQKEQpyGAAAAAQOVCpUKAAAAAAAAAGADrJIABrB2YZUOlRWVKwEAg6SchgAAAAEDlRuVKwAAAAAAAABgA6ySAUqVHgEmlSUAFpUfLoRCnIavRGADrJIGsHdhlTCVOJVOAQCByAAAAAEDlT+VTgAAAAAAAABgA8AATKIBSpVCARaVSBaVQi6EQpyGr0SByMAATXYGsH1hlVOVXpV7AwCC0QAAAAEDlWCVewAAAAEBAZVlAAAAgd1gA8AATKIAAGADruwBSpVvARyVdBaVby6EQpyGr0SC0QEAAYCVdcAVAXgAwABNVQaweGGVgJWIlbYBAI4UAAAAAQOVm5W2AAAAAAAAAGADwABMogFKlZ4BFpWkFpWeLoOknIavRY4Uq9cGsHlhlbuVw5XnAQCGnQAAAAEDldGV5wAAAAAAAABgA8AATKIBSpXUARaV2haV1C6DpJyGr0WGnavYBrB6YZXslfSWGAEAjhkAAAABA5YClhgAAAAAAAAAYAPAAEyiAUqWBQEWlgsWlgUug6Schq9Fjhmr2Qawe2GWHZYslmIBAIHBAAAAAQOWM5ZiAAAAAAAAAGADq8ABSpY2AR+WOq8eAQABFpZbFpZVLoOknIavRYHBq9oABrB/YZZnlmmWgAACjiOchgAAAAEDlnSWgAAAAAEBAZZ5AAAAgchgA8AATKIAAGADrJIABrCAYZaFloeXewAAhGEAAAABA5aOl3sAAAACAQKWkwAAAG1gA8AATKIAlp8AAACEVGADwABMogFqAGABwABNrAIAYAOskgE+BT2JlqvAFQL6Hpa8wABL3wMAA4CWzMAVAu2BltPAFQL6FpbYLoHIr0YATpbplvcAAJDyYAPAAEyiARyW/YGW+cAVAvqBBgEAAYCW/8AVAu0AwABNyU6XDJcTAACA5mADrJIBHJcVLo4jnIYBAAGClyHAFQNDAK9OPRyXPIOXNcAVA26EWAQABJOCl0jAFQNDFpdXLoRCnIavRICXXsAVAu0AwABNa0qXagGDl3HAFQNuAAAVAL8AFQDkABUBHwAVAVsAFQGuABUB6AAVAiIAFQJcABUCnQAVAtAAFQPJAAAACgKwgWGn76f1qUcDkQoAAAFgA7BwAAFgA6ySAQSwhGGouai+CYRCnIYAYAOskgABBbCJYajCqMKpAgAAAAOo36kCAAAAAQEBqO4AAACERmADrJIAAGADsIEBPwIIALCEgKj+wBUEQQkBqMKwcgAAAAABBrCHYakHqRWpRQAAjiOchgAAAAEDqSCpRQAAAAEBAaklAAAAgchgA8AATKIAAGADrJIBSqkwAR6pMKyWAQABgKk+wBUEigAAABUEawAVBLIAAAABArCKYamKqZCqyjeRCwAAAV0Dlz8BYAPAAEtQAAFdA69BA2ADwABLUGADrGhgA6xoAAEFsIwAAAAABAAAAwAAAAAAAAAAAGADsIoBPwEJAACXQQAAAAAKBrCPYZT/lQWVCgEChEKchgAAAAEDlQqVCgAAAAAAAABgA6xoAAawkGGVDpUVlSsBAIOknIYAAAABA5UblSsAAAAAAAAAYAOsaAFKlR4BJpUlABaVHy6EQpyGr0RgA6xoBrCRYZUwlTiVTgEAgcgAAAABA5U/lU4AAAAAAAAAYAPAAEyiAUqVQgEWlUgWlUIuhEKchq9EgcjAAE12BrCXYZVTlV6VewMAgtEAAAABA5VglXsAAAABAQGVZQAAAIHdYAPAAEyiAABgA8AAS1ABSpVvARyVdBaVby6EQpyGr0SC0QEAAYCVdcAVBc8AwABNVQawkmGVgJWIlbYBAI4UAAAAAQOVm5W2AAAAAAAAAGADwABMogFKlZ4BFpWkFpWeLoOknIavRY4Uq9cGsJNhlbuVw5XnAQCGnQAAAAEDldGV5wAAAAAAAABgA8AATKIBSpXUARaV2haV1C6DpJyGr0WGnavYBrCUYZXslfSWGAEAjhkAAAABA5YClhgAAAAAAAAAYAPAAEyiAUqWBQEWlgsWlgUug6Schq9Fjhmr2QawlWGWHZYslmIBAIHBAAAAAQOWM5ZiAAAAAAAAAGADq8ABSpY2AR+WOq8eAQABFpZbFpZVLoOknIavRYHBq9oABrCZYZZnlmmWgAACjiOchgAAAAEDlnSWgAAAAAEBAZZ5AAAAgchgA8AATKIAAGADrGgABrCaYZaFloeXewAAhGEAAAABA5aOl3sAAAACAQKWkwAAAG1gA8AATKIAlp8AAACEVGADwABMogFqAGABwABNrAIAYAOsaAE+BT2JlqvAFQdTHpa8wABL3wMAA4CWzMAVB0aBltPAFQdTFpbYLoHIr0YATpbplvcAAJDyYAPAAEyiARyW/YGW+cAVB1OBBgEAAYCW/8AVB0YAwABNyU6XDJcTAACA5mADrGgBHJcVLo4jnIYBAAGClyHAFQecAK9OPRyXPIOXNcAVB8eEWAQABJOCl0jAFQecFpdXLoRCnIavRICXXsAVB0YAwABNa0qXagGDl3HAFQfHAAAVBRYAFQU7ABUFdgAVBbIAFQYHABUGQQAVBnsAFQa1ABUG9gAVBykAFQgiAAAACgKwm2GpiqmQqsoDkQwAAAFgA7CKAAFgA6xoAQSwnmGqRKpJCYRCnIYAYAOsaAABBbCjYapNqk2qiQAAAAOqaKqJAAAAAQEBqnUAAACERmADrGgAAGADsJsBPwIIALCegKqFwBUImgkBqk2wjAAAAAABBrChYaqOqpqqyAAAjiOchgAAAAEDqqWqyAAAAAEBAaqqAAAAgchgA8AATKIAAGADrGgBSqq1AR6qtaxsAQABgKrBwBUI4wAAABUIxAAVCQsAAAABArCkYasNqxOsTTeRDQAAAV0Dlz8BYAPAAEtQAAFdA69BA2ADwABLUGADrHJgA6xyAAEFsKYAAAAABAAAAwAAAAAAAAAAAGADsKQBPwEJAACXQQAAAAAKBrCpYZT/lQWVCgEChEKchgAAAAEDlQqVCgAAAAAAAABgA6xyAAawqmGVDpUVlSsBAIOknIYAAAABA5UblSsAAAAAAAAAYAOscgFKlR4BJpUlABaVHy6EQpyGr0RgA6xyBrCrYZUwlTiVTgEAgcgAAAABA5U/lU4AAAAAAAAAYAPAAEyiAUqVQgEWlUgWlUIuhEKchq9EgcjAAE12BrCxYZVTlV6VewMAgtEAAAABA5VglXsAAAABAQGVZQAAAIHdYAPAAEyiAABgA8AAS1ABSpVvARyVdBaVby6EQpyGr0SC0QEAAYCVdcAVCigAwABNVQawrGGVgJWIlbYBAI4UAAAAAQOVm5W2AAAAAAAAAGADwABMogFKlZ4BFpWkFpWeLoOknIavRY4Uq9cGsK1hlbuVw5XnAQCGnQAAAAEDldGV5wAAAAAAAABgA8AATKIBSpXUARaV2haV1C6DpJyGr0WGnavYBrCuYZXslfSWGAEAjhkAAAABA5YClhgAAAAAAAAAYAPAAEyiAUqWBQEWlgsWlgUug6Schq9Fjhmr2Qawr2GWHZYslmIBAIHBAAAAAQOWM5ZiAAAAAAAAAGADq8ABSpY2AR+WOq8eAQABFpZbFpZVLoOknIavRYHBq9oABrCzYZZnlmmWgAACjiOchgAAAAEDlnSWgAAAAAEBAZZ5AAAAgchgA8AATKIAAGADrHIABrC0YZaFloeXewAAhGEAAAABA5aOl3sAAAACAQKWkwAAAG1gA8AATKIAlp8AAACEVGADwABMogFqAGABwABNrAIAYAOscgE+BT2JlqvAFQusHpa8wABL3wMAA4CWzMAVC5+BltPAFQusFpbYLoHIr0YATpbplvcAAJDyYAPAAEyiARyW/YGW+cAVC6yBBgEAAYCW/8AVC58AwABNyU6XDJcTAACA5mADrHIBHJcVLo4jnIYBAAGClyHAFQv1AK9OPRyXPIOXNcAVDCCEWAQABJOCl0jAFQv1FpdXLoRCnIavRICXXsAVC58AwABNa0qXagGDl3HAFQwgAAAVCW8AFQmUABUJzwAVCgsAFQpgABUKmgAVCtQAFQsOABULTwAVC4IAFQx7AAAACgKwtWGrDasTrE0DkQ4AAAFgA7CkAAFgA6xyAQSwuGGrx6vMCYRCnIYAYAOscgABBbC9YavQq9CsDAAAAAOr66wMAAAAAQEBq/gAAACERmADrHIAAGADsLUBPwIIALC4gKwIwBUM8wkBq9CwpgAAAAABBrC7YawRrB2sSwAAjiOchgAAAAEDrCisSwAAAAEBAawtAAAAgchgA8AATKIAAGADrHIBSqw4AR6sOKx2AQABgKxEwBUNPAAAABUNHQAVDWQAAAABAAQEnIlgwAIdpcACHcEFkQ+chgBgA6xKAR7AAh20rE4BAAGVAAScimDAAh3JwAId+AWREJyGAGADrF4BHsACHdisZAEAARbAAh3xGsACHeiciYHBq9oABJyLYMACHgDAAh4wBZERnIYAYAOsaAEewAIeD6xuAQABFsACHikawAIeIJyJgcGr2gAEnIxgwAIeOMACHmgFkRKchgBgA6xyAR7AAh5HrHgBAAEWwAIeYRrAAh5YnImBwavaAA4GnI9gwAIb08ACG/PAAhxIAAGRE5yGAWrAAhvUYAPAAEqfgroAAAEDwAIb/sACHEgAAAABAQHAAhwDAAAAImADwABMogAAYAPAAEyiAT4BSsACHA4BHMACHC0cwAIcJxzAAhwdgMACHBfAFQ5jgKEBAAE3wAD/AADAAEy6g8UBAAE3CADAAEy/gKYBAAEcwAIcQRzAAhw3gMACHDHAFQ5jgKEBAAE3gP8AwABMuoNxAQABNwgAwABMvgDAAEy7BpyQYMACHEvAAhxrwAIdIAABkRSchgFqwAIcTGADwABKn4K6AAABA8ACHHbAAh0gAAAAAQEBwAIcewAAACJgA8AATKIAAGADwABMogE+Az2IwAIchsAVDyEcwAIcqhzAAhykHMACHJaAwAIckMAVDyGAoQEAATmRFQDAAEy6g8UBAAE3CADAAEy/gKYBAAEcwAIcwhzAAhy0gMACHK7AFQ8hgKEBAAE3wP8A/wDAAEy6g3EBAAE3CADAAEy+AMAATLs9iMACHMvAFQ8hHMACHPAcwAIc6RzAAhzbgMACHNXAFQ8hgKEBAAE5kRYAwABMuoPFAQABNxAAwABMv4CmAQABHMACHQgcwAIc+oDAAhz0wBUPIYChAQABN8AA//8AwABMuoNxAQABNxAAwABMvgDAAEy7SsACHRIBgMACHRnAFQ8hBpyRYMACHSPAAh1DwAIdnAABkRechgFqwAIdJGADwABKn4K6AAABA8ACHU7AAh2cAAAAAQEBwAIdUwAAACJgA8AATKIAAGADwABMogE+AUrAAh1eARzAAh2AHMACHXkewAIdZpyQAQABgMACHXLAFRBlAINxAQABNyAAwABMvoCmAQABHsACHYKckAEAARzAAh2UgMACHY7AFRBlg8UBAAE3IADAAEy/AADAAEy7BpySYMACHonAAh6pwAIfFgABkRichgFqwAIeimADwABKn4K6AAABA8ACHq/AAh8WAAAAAgICwAIetAAAACJgA8AATKIAwAIevwAAAITFYAPAAEyiAABgA8AATKIBPgM9iMACHsnAFRETHMACHs+AwAIeycAVEROAoQEAAYHAAh7SwBURIgDAAEy6ScACHtocwAIe5IDAAh7ewBURE4KMAQABHMACHuyBwAIe58AVESKDxQEAAZQAwABMvwDAAE3SPYjAAh7zwBURExzAAh75gMACHvPAFRETgQYBAAEcwAIfAYHAAh78wBURIoENAQABlADAAE3IAMAATck/SsACHwgBgMACHw/AFRETBpyTYMACHxnAAh85wAIfbAABkRmchgFqwAIfGmADwABKn4K6AAABA8ACH0DAAh9sAAAAAQEBwAIfRQAAACJgA8AATKIAAGADwABMogE+AUrAAh9QAR7AAh9XnJICAAKAwAIfXsAVEh43gP8ABpyUYMACH2/AAh+PwAIfvAABkRqchgFqwAIfcGADwABKn4K6AAABA8ACH5fAAh+8AAAAAQEBwAIfnAAAACJgA8AATKIAAGADwABMogE+AUrAAh+nARzAAh+0gMACH67AFRKKgKEBAAE3gP8AwABMugaclWDAAh+/wAIf9cACIF4AAZEbnIYBasACH8BgA8AASp+DcgAAAQPAAiAEwAIgXgAAAAEBAcACIAkAAAAiYAPAAEyiAABgA8AATKIBPgNJwAIgFBzAAiAegMACIBjAFRL6gLsBAAGTAMAATdBKwAIgIwGTP0nAAiAvHMACIDmAwAIgM8AVEvqCjAEAATeA/wDAAE3SSsACIEEBN4D/P0rAAiBQAYDAAiBXwBUS+gaclmDAAiBhwAIggcACILcAAZEcnIYBasACIGJgA8AASp+CugAAAQPAAiCJwAIgtwAAAAEBAcACII4AAAAiYAPAAEyiAABgA8AATKIBPgFKwAIgmQEewAIgoJySAgACgMACIKfAFROoN8AA//8ABpyXYMACILrAAiDawAIhCgABkR2chgFqwAIgu2ADwABKn4K6AAABA8ACIOPAAiEKAAAAAQEBwAIg6AAAACJgA8AATKIAAGADwABMogE+AUrAAiDzARzAAiEAgMACIPrAFRQWgKEBAAE3wAD//wDAAEy6BpyYYMACIQ3AAiEtwAIhZwABkR6chgFqwAIhDmADwABKn4K6AAABA8AC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ABVUcwAVV0UAFVgQABVYagAVWKsAFVjsABVZHwAVWYgAFVpiABVaowAAABMCsdtqi9aL3JwbA5H1AAABYAPAAE3vAAFgA7rnDgSx3mqMHYw1BpH2sMsAYAPAAEyiAWqMNGADwABMohoEsd9qjEqMYgaR97DLAGADwABMogFqjGFgA8AATKIUBLHgaox3jIoGkfiwywBgA8AATKIBaoyJYAPAAEyiFgSx4WqMn4yyBpH5sMsAYAPAAEyiAWqMsWADwABMokwEseJqjMeM2gaR+rDLAGADwABMogFqjNlgA8AATKIYBLHjaozvjQMGkfuwywBgA8AATKIBao0BYAPAAEyiVASx52qNII1hBJH8AGADsdsBHo1Gsf0BAAFqjUxgA8AATKIaAASx6GqNfY2+BJH9AGADsdsBHo2jsf0BAAFqjalgA8AATKIUAASx6WqN2o4LBJH+AGADsdsBHo31sf0BAAFqjftgA8AATKIWAASx6mqOJ45YBJH/AGADsdsBHo5Csf0BAAFqjkhgA8AATKJMAASx62qOao5xCYjJAGADwABOiQAEseRqjoKOhwmSALDLAGADwABOiQAEseVqjpuOowmSAbDLAGADrBcABLHmao6xjroJkgKwywBgA8AATKIAAQWx/2qT2pPalC8AAAADk+qULwAAAAQDBJPwAAAEiMlgA8AATokAk/4AAASSAGADwABOiQCUCgAABJIBYAOsFwCUIAAABJICYAPAAEyiAWqULGADwABMohoAYAOx2wE/BQgBseuAAMAVXMgIAbHkgQDAFVzWCAGx5YIAwBVc5AgBseaDAMAVXPAJAZPawABOBQAAAAAOBrHtao6/jtePQwEAhdkAAAABA47cj0MAAAAAAAAAYAO60wFKjt8BIxyO7xaO6BaO3y6SAbDLseWByMAATXaAjAEAAWqO8mADwABMohgAwABNxmqPHmADutOi62qPP2ADutOi8wFgA7rTBrHuao9Ij1OPegEAj6wAAAABA49Yj3oAAAAAAAAAYAPAAE6JAUqPWwEjIRyPYRaPWy6SALDLseSAjAEAASsAwABOmBaPay6SALDLseQWj3MuiMmx6wFgA8AATokGse9qj3+PjY+7AQCSAwAAAAEDj5iPuwAAAAAAAABgA6wXAUqPmwEej5+sHAEAARaPsi6SAbDLseUABrHwao/Aj8mRAwEA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LgoAFMAARODAFYSXDQAAwABNjT0cwABFeBTAAEVxwBWBLgoAkncCAAACgcM0wABFiwPAAEWLwABJVQAAAAAAAABgAcAATawBPgg9HMAARaIUwABFnMAVhJcNAIGMAAAAAIUNPRzAAEXDh8AARbjAFYBhg2wBAAEUwABFysAVgS4KAADAAE2VTsAARw3AAEcVAACSeGADtD4BHMAARx4UwABHF8AVgS4KAJJ5AAAAALKVScAARzwhHMAAR1IWwABHSBTAAEdAwBWFhA4AiAO0QoCMAQABkwDAAE3GPgQ9HMAAR28UwABHaMAVgS4KAICNAAAAALJ1ScAAR4YcwABHkIbAAEeKwBWAVoCMAQABKwDAAE38PY7AAEeZwBWAVhTAAEehwBWFhA4AP0nAAEe4FsAAR8eHwABHvMAVgGGA48AATZ09HMAAR9sUwABH0MAVgH8IAG4AAAAAAD9KwABH7QA/PRzAAEgWFMAASA/AFYEuCgCSegIAAAKRViqBwyqydD0cwABIVYTAAEhLwBWAAmUBAAEUwABIXsAVgS4KAACBSj0cwABIfofAAEhzwBWAYYESAQABNMAASIYDwABIhsAASScAAAACAgLAAEiHAAAAgPlbAMAASIoAAACK81sAAGABwABNrAE+BD0cwABInxTAAEidwBWG0RAAgYwAAAAAAD0cwABIuRTAAEi3wBWGxg8AgI0AAAAAAD0cwABI0hTAAEjQwBWGxg8AkncAAAAAAD0cwABI8RTAAEjvwBWGxg8AknoCAAACkVYqgcMqAADAAE2XPRzAAElBh8AASTbAFYBhgOcAAAAAwABNliQ0wABJXgPAAElewABKXAAAAAICAsAASV8AAABpWwDAAEliAAAAalsAAGABwABNrAE+BT0cwABJehTAAEl0wBWElw0AgYwAAAAAhQ09HMAASZcUwABJkMAVgS4KAICNAAAAALJ1ScAASdkcwABJ44bAAEndwBWAVoCMAQABKwDAAE38PY7AAEnswBWAVhTAAEn0wBWHfw4APz0cwABKDofAAEoDwBWAYYNsAQABFMAAShXAFYEuCgAAwABNlUnAAEoqFsAASjmHwABKLsAVgGGA48AATZ09HMAASk0UwABKQsAVgH8IAG4AAAAAAD+ycz0cwABKcBTAAEppwBWBLgoAknoCAAACkVYqgcMpsnRPwABKscAA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kkeyRz4BPRzAAIGOLpKXAwADHMAAgZouknkAAAAAspUrJwAAsn4/ScAAgdIhFsAAgdcugI6yRj4BScAAgm0hHMAAgnmDwACCccAVuAOAjAEAASsAwABN/D0cwACCiYPAAIKCwBW4A24AAAAAAD8/P0nAAIKpIRbAAIKuLpKPsp0+Aj0XwACCwy6SUxzAAILJFsAAgsMuklOyU4ENAQABlADAAE3IslM9HMAAgtMukqoBAAFqwACC4GADwABMohwAsnI/BrJyasAAgwTAAIMJwACERAAAkqoAAAABA8AAgxXAAIREAAAAAQEBwACDGgAAAJK4YAPAAEyiAABcAT4BScAAgzAiIRbAAIM1LpJHskcAIRbAAINDLoCOskY+AkAhHMAAg2YWwACDXC6STbJNgIwBAAErAMAATfzAAINcwACDbQBJwACDkhzAAIOdFsAAg5YuklOyU4CMAQABgMAAg6DAFbqiAMAATcY+A0AcwACDyBbAAIPBLpJTslOAuwEAARzAAIPNlINxAQABasAAg9BgA8AATKIcAMAATL4AwABN0MAAg8HAAIPdAD0cwACD6C6SuQEAARzAAIQVHMAAg/6Ug3EBAAFqwACEAWADwABMoogRAMAATL6ApgEAARbAAIQXLpJTslMAwABMuwCyeT0XwACEKC6SU5OyUz8/BrJzasAAhEnAAIROwACFUgAAkncAAAABA8AAhFnAAIVSAAAABQAABcAAhFsAAACRVlsBagBgAcAATawCwACEYQAAAIHDWwFqAGABwABNrALAAIRoAAAAJFsBagBgAcAATawCwACEbwAAAJK6WwFqAGABwABNrALAAIR3AAAAkrtbAWoAYAHAAE2sAlwBPgU9HMAAhJYWwACEiS6STLJMgQwCAAJqwACEl2ADwABMohqAwACEpMAVu94AwABNVj0cwACEuxbAAISuLpJMskyBDAIAAmrAAIS8YAPAAEyiFIHAAITKwBW78gDAAE1WPRzAAITiFsAAhNUukkyyTIEMAgACasAAhONgA8AATKIWgsAAhPHAFbwGAMAATVY9HMAAhQkWwACE/C6STLJMgQwCAAJqwACFCmADwABMokyDwACFGcAVvBkAwABNVj0cwACFMhbAAIUlLpJMskyBDAIAAmrAAIUzYAPAAEyiGITAAIVFwBW8LQDAAE1WBrJ0asAAhVfAAIVc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okEAAACSYWADrBcAwACiSwAAAIuSYAPAAEyiAMAAolYAAACSimADwABK2ADAAKJvAAAAkotgA8AAStgAwACifgAAAJKMYAPAAEyiAABbAAaykWrAAKKpwACiqcAAougABJKrAWoAYAOUCKQ/AAABA8AAorXAAKLoAAAAAQEBwACixAAAAJGeYAOyHAAAWwAGspJqwACi7MAAovDAAKMXAASSrgFqAGADlAikSwAAAQPAAKL9wACjFwAAAAAAAABgA8AATKIABrKTasAAoxvAAKMgwACjUwAEkrABagBgA5QIpFcAAAEDwACjM8AAo1MAAAAAAAAAXQPAAE1GAVsABrKUasAAo1fAAKNbwACjigAEkpsBagBgA5QIpGMAAAEDwACjbMAAo4oAAAAAAAAAYAPAAEyiAAaylWrAAKOOwACjlsAAo78ABJJ5AWoAYAOUCKRvAAABA8AAo6TAAKO/AAAAAAAAAGADtD4ABrKWasAAo8PAAKPDwACkBgAEksgBagBgA5QIpHsAAAEDwACj0sAApAYAAAACAgLAAKPXAAAAksdgA8AATKIAwACj4wAAAJLuYAPAAEyiAABbAAayl2rAAKQKwACkEsAApG4ABJLNAWoAYAOUCKSHAAABA8AApCTAAKRuAAAAAwMDwACkKQAAAIh1YAPAAEyiAMAApDQAAACSx2ADwABMogDAAKRGAAAAO2ADrBcAAGADtD4ABrKYasAApHLAAKR6wACkygAEksoBagBgA5QIpJMAAAEDwACkicAApMoAAAADAwPAAKSOAAAAksdgA8AATKIAwACkmgAAAJLuYAPAAEyiAMAApKQAAAAiWwAAYAO0PgAGsplqwACkzsAApNbAAKUyAASSzwFqAGADlAiknwAAAQPAAKTowAClMgAAAAMDA8AApO0AAACIdWADwABMogDAAKT4AAAAksdgA8AATKIAwAClCgAAADtgA6wXAABgA7Q+AAaymmrAAKU2wAClPsAApbIABJLXAWoAYAOUCKSrAAABA8AApVHAAKWyAAAAAwMDwAClXAAAAJJhYAOsFwDAAKVsAAAAktVgA6wXAMAApYUAAACS1mADwABMogAAYAO0PgAGsptqwACltsAApbvAAKYxAASS2QFqAGADlAiktwAAAQPAAKXPwACmMQAAAAMDA8AApdoAAACSYWADrBcAwACl6gAA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AIV6krs0wACszgPAAKzOwACtXgAAAAAAAABgAcAATawBPgI9HMAArOUWwACs2S6AwLDLsreAjQAAAACCdEnAAKz0IRzAAK0HFsAArPgukvawy7K4gIwBAAErAMAATfw+Aj0cwACtKRbAAK0aLpL2sMuyuICNAAAAAJi7PRfAAK06LpL2sMsrsrg/snNKwACtZQEcwACtfxbAAK14FsAArWwugMCwy7K3QIJggakEAAGAwACthsAV3TsDgJ2BwACtn8AV3U6AnoLAAK2wwBXdZ0GDwACtx8AV3X6B5gayxGrAAK3ewACt5sAArfoBAIuSAAAAAQPAAK3rwACt+gAAAAAAAABgA8AATKIBSsAAre4BFsAArfYWwACt7i6S9bDLsraLkrKmBrLFasAArf/AAK4TwACuLQEAiMkAAAABA8AArhvAAK4tAAAAAAAAAGADuucBSsAArh4BFsAAriYWwACuHi6S9bDLsraIybKoBrK9asAArjLAAK5KwACvEwAAgI0AAAABA8AArk/AAK8TAAAAAAAAAF0DgSIBYAO7CwE+AUrAAK5YARzAAK5vHMAArmcWwACuXy6S9bDLsraAjQAAAACydYCJAQFgA7sLATTAAK6FA8AAroXAAK8OAAAAAQEBwACuhgAAAICKWwAAYAOyswE+AknAAK6RIRzAAK6kFsAArpUukvawy7K4gIwBAAErAMAATfw+Aj0cwACuxhbAAK63LpL2sMuyuICNAAAAAJi7PRfAAK7XLpL2sMsrsrg/SsAArvwBLgCBNQayv2rAAK8YwACvHcAAr18AAIvrsMsAAAABA8AAryPAAK9fAAAAAAAAAFwBPgE9HMAArzQWwACvLC6S9bDLsraSegIAAAKRViqBwyqydAaywGrAAK9kwACvacAAr6sAAJL9sMsAAAABA8AAr3DAAK+rAAAAAAAAAFwBPgE9HMAAr4EWwACveS6S9bDLsraSegIAAAKRVimBwyqydAaywWrAAK+wwACvtcAAsDQAAJL6sMsAAAABA8AAr8/AALA0AAAAAAAAAFwBPgFJwACv2BbAAK/oFsAAr9wugMCwy7K3gIaCaD4BPRzAAK/9LpL9sMsAAAAAssA+AT0cwACwIxbAALAbLpL1sMuytoCNAAAAALJ1BrLCasAAsDnAALA+wACwrAAAkvuwywAAAAEDwACwUcAAsKwAAAAAAAAAXAE+AUnAALBaFsAAsGoWwACwXi6AwLDLsreAgYJnPgE9HMAAsHwui+uwywAAAACyvz4BPRzAALCZLpL9sMsAAAAAssAGsshqwACwscAAsLrAALDnAgCM+bDLAAAAAQPAALDAwACw5wAAAAEBAcAAsMEAAACMrVsAAFwBPgE9F8AAsNYWwACwzi6S9bDLsraMrYDAALDewBXkW7JbAAAV26IAFd0UABXhQAAV4YoAFeHSABXisQAV4v8AFeNNABXjxAAV5DIAFeSKAAAACgKyy2rAALDswACw8sAAxwMDkv4AAAFdA4HWAWADu2IAAWADu30FBLLOasAAsUnAALFQCZL1sMsAYAOyHAAEss9qwACxdcAAsYAYgMCwywBdA4JeAWADu2IBKwSy0GrAALGJwACxohiS/7DLAGADwABK2AEpBLLRasAAsavAALHFGJMAsMsAYAPAAErYASkEstJqwACyBsAAsiMYkwGwywBgA8AAStgBKgEFsvVqwAC2ecAAtnnAALoPAAAAA8AAtoPAALoPAAAAAQEBwAC2iQAABJL1YAOyHAAAYAOyywE+A07AALacwAC2oQAATmADhV8BGsAAtqiFZT0XwAC2tS6AwLDLHsAAtseCagUBYAO7YgAFgPspehbAALb/LpL6sMuy43wWwAC3LS6S+rDLsuOAsxbAALdaLpL7sMuy4nsWwAC3gS6S+7DLsuKyzz0cwAC3oxbAALebLpL1sMuyzpJ3BQAABZFWNMAAt74DwAC3vsAAt+gAAAAAAAAAXAFKwAC3xAEcwAC30BbAALfELoDAsMuyz4CCAQABasAAt+NgA7tiolgAgnKBwzTAALf5A8AAt/nAALjOAAAAAAAAAGABwABNrAE+Aj0XwAC4eC6TAiqy8T0cwAC4qhbAALieLoDAsMuyz4CCAQABasAAuL1gA7tipMMAgnKSujTAALjgA8AAuODAALkQAAAAAAAAAFwBSsAAuOYBHMAAuPIWwAC45i6AwLDLss+AggEAAWrAALkFYAO7YqTLAIJykrs0wAC5JQPAALklwAC5hAAAAAAAAABgAcAATawBPgI9HMAAuUAWwAC5NC6AwLDLss+AggEAAWrAALlTYAO7YqTTAIJyPRzAALlyFsAAuWYugMCwy7LPgI0AAAAAgnQkHMAAuZqBwAC5lcAV5Z2CzgECW1sBNMAAubQDwAC5tMAAugkAAAACAgLAALm1AAAAaVsAwAC5uAAAAGpbAABgAcAATawBPgI9HMAAudQWwAC5yC6AwLDLss+AiwIAAoLAALndwBXngCbAALngBYPAALngwBXnimADwABOXQCCcz0cwAC59xbAALnvLpL1sMuyzoCNAAAAALJ1AIV6snMCCAGyzoAAwBXlhgkBwAC2eYIMAAAAABoGstRqwACyKMAAskHAALPEAAGSfQAAAAEDwACySMAAs8QAAAAEBATAALJQAAAAj6xbAMAAsloAAACLkmADwABMogDAALJgAAAAkm9bAMAAsngAAACBHmADwABLdAAAXQOBIgFgA7t9AT4BSsAAsocBHMAAstEewACynLJjBAAEgMAAsqTAFeg0gcAAsqrAFeg/gsAAsrDAFehPg8AAsr/AFehaAICJAQFgA7t9ATTAALLWA8AAstbAALO/AAAAAQEBwACy1wAAAJGeYAOyHAAAYAOyywE+AknAALLnIWrAALLyYAPAAErYPz4BPR7AALM0uE4EAAQcwACzWYTAALNSwBXozpKbAAAAALKUasAAs25gA8AATomkwBbAALOBhMAAs3rAFejOiMmyqIHAALOKwBXoPwA/SsAAs58BH8AAs6ay9QEAAYTAALOxwBXozgAAgTUGstVqwACzycAAs/PAALZ0AAGSbgAAAAEDwACz/8AAtnQAAAADAwPAALQHAAAAj6xbAMAAtBEAAACLkmADwABMogDAALQXAAAAkm9bAABdA4EiAV0Du3MBYAOyywE+AUrAALQsARzAALRyHsAAtEGyYgMAA4DAALROwBXph4HAALRUwBXpkoLAALRawBXpogCAiQEBXQO7cwFgA7LLATTAALR3A8AAtHfAALZvAAAAAQEBwAC0lgAAAJMDXQO7cwFgA7IcAABdA7tzAWADsssBPgJOwAC0w8AAtMcAAZF8XQOBIgFgA7LLARzAALTlFsAAtN6DwAC008AV6hKRnrt1gIkBAWADsssBNMAAtOoDwAC06sAAtgQAAAABAQHAALT5AAAAkwRgA7IcAABgA7LLAT4CScAAtREhasAAtRxgA8AAStg/PgE9HsAAtWC4TgQABBzAALV+hMAAtXHAFep9kpsAAAAAspRqwAC1oWADwABOiaTAFsAAtbqEwAC1rcAV6n2IybKogcAAtcPAFemS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wADRAAPAANEAwADRWgAAAAIBAsAA0QEAAAAkWwDAANEJAAAAMVsBagBgAcAATawCAGABwABNrAE+Aj0cwADRJxbAANEgLpGeswmR4wAAAACzOT0cwADROi6A0gIAAoHAANE/wBYAG4LAANFGwBYAJQCzEoCeNMAA0WQDwADRZMAA0YAAAAAAAAAAYAHAAE2sAT4BPRzAANFxLoDSAAAAALMSQSmB5rMIP0rAANGiASbAANGiARbAANG5FsAA0akukxCzDW+BR10DgSIBYAO7kwazEGrAANHIwADR18AA0iQAAICNAAAAAQPAANHcwADSJAAAAAAAAABdA4EiAWADu5MBPgI9HMAA0ewWwADR5S6RnrMJkxOwywAAAACzSUrAANIBAR7AANIMgSsBAWADu5MBFsAA0hkukZ6zCQAGsxFqwADSKcAA0i7AANP0AACBwwAAAAEDwADSM8AA0/QAAAAAAAAAXAE+BEnAANI8HMAA0k0WwADSQC4vswiAjAEAASsAwABN/ErAANJWAD9AIRzAANJwFsAA0mkugcGzC4CMAQABKwDAAE1wwADSacAA0ncAPRfAANKgLoQXHMAA0qcWwADSoC6EF7MKgQ0BAAEcwADSsRbAANKqLpGeswmTFLDLAwADFsAA0rgugcGzCxbAANLALoQXswocwADS1hbAANLPFsAA0sgugcGzC4HIwABNdoEGAQABFsAA0tguhBezCgDAAE3JALNGAMAATcizCknAANLlHMAA0vAWwADS6S6EF7MKgLsBAAEWwADS+RbAANLyLoHBswuByMAATXYAwABN0D4CScAA0wkhFsAA0w4ui7uzDD4CPRfAANMgLou7KbMMPRzAANNEFsAA0zcuL7MIga8AAAAAghU/PRzAANNiFsAA01sukZ6zCZMVsMsAAAAAs0c+Aj0XwADTii6BwSuzC0nAANOfFsAA06Mui7uzDD4CPRfAANO1Lou7KrMMPRzAANPaFsAA080uL7MIgbAAAAAAghY/BrMSasAA0/nAANP+wADU+QAAgNIAAAABA8AA1ALAANT5AAAAAgACwADUBAAAACRbAWoAYAHAAE2sAsAA1AsAAAAxWwFqAGABwABNrAIAXAE+AUnAANQeIRzAANQyFsAA1CIukxCzDYCMAQABKwDAAE38PgJJwADUQyEcwADUTYDAANRHwBYDKYCMAQABKwDAAE38PgE9HMAA1HAWwADUYC6TELMNaAIAAoDAANR+wBYDKSbAANSFBYHAANSFwBYDPGADwABOXQCBSz4BPRzAANS5FsAA1KkukxCzDWUBAAEWwADUwi6RnrMJAIFKPRfAANTZLpMQK7MNPwazE2rAANT+wADVA8AA1Z0AAIGjAAAAAQPAANUHwADVnQAAAAAAAABcAT4FScAA1RAcwADVIRbAANUULi+zCICMAQABKwDAAE38SsAA1SoAPz0cwADVQxbAANU2Li+zCIGMAAAAAIIRPRfAANVRLi8rswg9F8AA1Woui7sqsww9HMAA1YUWwADVfi6RnrMJkxawywAAAACzSAAAFf5GABYA2AAWAUUAFgMCABYD/AAWBJUAAAAFArMWasAA1aLAANWowADudwOTFwAAAV0DgdYBYAOsFwABYAO7kwgEsxlqwADV6sAA1e4YkxKwywBgA7t9AASzGmrAANYlwADWNBiTGLDLAGADwABK2AEqBLMbasAA1oLAANaNGIDAsMsAXQOCXgFgA6wXASsEsxxqwADWlsAA1q8YkxmwywBgA8AAStgBKgSzHWrAANbJwADW0hiTGrDLAGADswYBKwSzHmrAANbdwADW4hiB47DLAGADt4YBKwSzH2rAANbqwADW9xiCCrDLAFsBKwSzIGrAANb/wADXCxiTG7DLAFsBKwEFs09qwADXEMAA1xDAANk9AAAAA8AA1xfAANk9AAAAAQEBwADXHQAABJMSYAO7fQAAYAOzFgE+BT0XwADXKS6AwLDLHsAA1zuCagUBYAOsFwAFgPspehbAANd+LpL6sMuzQXwWwADXrC6S+rDLs0GAsxbAANfZLpL7sMuzQnsWwADYAC6S+7DLs0KzGz0XwADYGi6TGrDLH8AA2CqzFQEAAS4Asx09F8AA2EsugeOwyx7AANhXt4oBAAEWwADYXi6TGrDLsx0Asx49F8AA2K4WwADYqS6TErDLsxmTCyq7fz0XwADZHxbAANkaLpMSsMuzGZMCKruAAggBsxmAAMAWBb0JAcAA1xCCDAAAAAAlBrMjasAA2ULAANlKwADZmAQBkwWwywAAAAEDwADZXMAA2ZgAAAAAAAAAYAOzFgE+AUrAANllAR/AANlws08BAAEewADZfLLmAAAAAAAGsyRqwADZncAA2aXAANn7BAGTB7DLAAAAAQPAANm2wADZ+wAAAAEAAcAA2bwAAACTCGADwABMogFqAGABwABNrAIAYAOzFgE+AUrAANnHAR/AANnSs08BAAEewADZ3rLnAQABgMAA2fPAFgcgAAAGsydqwADbBsAA2xjAANtFAQCRwrDLAAAAAQPAANsmwADbRQAAAAAAAABgA7IcAUrAANspARbAANs+JsAA2y8AFsAA2youkxKwy7MZYAOyy5L1sMuyzgazL2rAANtKwADbaMAA3EQAAIGpAAAAAQPAANtuwADcRAAAAAQBAcAA23QAAACAnGEDAWADrBdcAAPAANudAAAAgJ1gA8AATJgBagBgAcAATawCwADbqwAAAICeYQMAXAFqAGABwABNrALAANu6AAAAQWADwABK2AFqAGABwABNrAJdA4IPAWADrBcBPgFKwADb0AEcwADb6hbAANvjFsAA29cugMCwy7MbQIJggakEAAGAwADb8cAWB+MDgJ2BwADcCsAWB/aAnoLAANwbwBYID0GDwADcMsAWCCaB5gazKGrAANxJwADcVsAA3HABAJHqAAAAAQPAANxfwADccAAAAAAAAABgA4/gAUrAANxiARbAANxoFsAA3GIugeOwy7Mekeq3iAazS2rAANx1wADcfsAA3LcCAJHqAAAAAQPAANyGwADctwAAAAEBAcAA3JAAAAAiYAOP4AAAXAE+AT0XwADcoxbAANydLoHjsMuzHpHqgMAA3K7AFgkJt4gGszBqwADcvMAA3MHAANzmAACBwwAAAAEDwADcxsAA3OYAAAABAQHAANzOAAAAkxxgA8AATe8AAFwBSsAA3NYBHMAA3NwWwADc1i6B47DLsx6BwwEAAYDAANziwBYJYQC3jQazMWrAANzrwADc8MAA3SAAAIeRAAAAAQPAANz3wADdIAAAAAEAAcAA3QAAAACTHGADwABN7wFqwADdBmADwABOiWIAXAFKwADdDgEcwADdFBbAAN0OLoHjsMuzHoeRAQABgMAA3RzAFgnDALePBrMyasAA3SXAAN0qwADdZgAAhhQAAAABA8AA3TfAAN1mAAAAAQEBwADdPAAAAIW3YAPAAEyiAABcAUrAAN1JARzAAN1PFsAA3UkugeOwy7MehhQBAAGAwADdXcAWCjEAt5AGszNqwADda8AA3XDAAN22AACEMAAAAAEDwADdeMAA3bYAAAACAQLA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AABgA7oDAT4CSYS/HITIFoTDLpMSsMuze4CMAQABKwDAAE38PgE9MITZH4TjwABMPgEAASeTLwA/SoUtARaFORaFNC6TErDLs3uTLrptBrN9bIVRhVyGAgEAkzAAAAABA4VthgIAAAAAAAAAYAPAAE6JAT4CSYVzHIV8FoV3LpMSsMuze4CMAQABKwDAAE38PgE9MIWNH4WXwABMPgEAASeTMQA/SoXiARaF7haF6S6TErDLs3uTMLpuAAAWLMoAFi0EABYtoAAWLgoAFi52AAAABAKzgmyHg4ejj18DkzIBaoeEYAPAAEqfAwABYAOwvwABYAO6iwMEs4RsiMiI1wWTMwFqiJxgA8AASp8DYAPAAEyiARyI0TcIg8YBAAE3hAAAwABNygSzhWyJCIkiBZM0AWqI3GADwABKnwNgA8AATKIBHIkcNwqDxgEAATeEAADAAE3KBLOGbI9Wj10YkzUBao8eYAPAAEqfpQhdA8AATUYBYAO6dgErAQWzmWyJJ4knij4AgIqwywADiTqKPgAAAAAAAABgA7OCAT4CPReJQy6TNR6JUcAARo8BAWADunYBaol4YAPAAEyiGACzhkWJigGJk4mVAACDZmADwABMogGTARyJnICJmsAWL4CAuwEAAWqJr2ADwABMohgAwABN0AGIib7AFi+AHIm8gIm+wBYvgIENAQABlADAAE3IPgE9HInQFonJLpM1s4aBDAIAAoCJ0cAWL4Afidq6igEAASMeiga6RAEAAYCKGcAWL4AAGooes4Uaii+zhAFgA8AATKIAAMAATVYBCQGJJ7DBAAAAAA0Gs4hsikOKSIsfAASSfQFqAGADlAilHQAAAQOKT4sfAAAABgYGil4AAACTOGADwABOiQCKfgAAAJM5YAO6sACKkgAAAJM6YAPAAErYAIqoAAAAkyxgA8AAStgAis0AAACTLWADwABK2ACK9wAAAJM7YAOsFwAAXAAGs4lsiySLKYtbAACR4wAAAAEDizCLWwAAAAAAAABcAT4CPReLOS6TNSuzhj0ci00ukzywywAAAACziwazi2yLYItli40ABJM8sMsBagBgA5QIpSkAAAEDi22LjQAAAAAAAABcAAazjWyLkouXi8IABJM+AWoAYAOUCKU1AAABA4ugi8IAAAAAAAAAXAAGs45si8eLzIv7AACTQAAAAAEDi9eL+wAA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hIYAwABNaQC0CQa0unHAAElhwABJZsAASW8AAICNAAAAAQPAAElrwABJbwAAAAAAAABcAT4AAAAWg9UAFoQ5ABaFqgAWhdYAAAADArS9ccAASXTAAEl6wABLBQOT/QAAAWADtMUAAAABBbTAccAASaPAAEmjwABLAwCAirDLAAPAAEm1wABLAwAAAAgICMAASdAAAAA8YAOPZADAAEnhAAAAkX9gA8AAStgAwABJ8QAAAIh1YAPAAEyiAMAASgIAAACRemADwABMogDAAEoYAAAAkYBgA8AATKIAwABKLAAAAJGBYAPAAEyiAMAASkYAAACRe10DwABNRgFgA8AATKIAwABKXQAAAJF8YAPAAErYAABgA7S9AT8BCQDAAEpqtNECAAKAwABKfcAWhi4ewABKnbSyBwAHgcAASsXAFoY7gsAASsvAFoZLg8AAStLAFoZbhMAASt7AFoZrhcAASujAFoZ7hsAASvLAFoaLh8AASv7AFoaiAAAAAAAWhxoAAAAAArTBccAASwjAAEsOwABL/gOT/gAAAWADtMUAAAABBbTEccAASzfAAEs3wABL/ACAirDLAAPAAEtJwABL/AAAAAQEBMAAS2QAAAA8YAOPZADAAEtuAAAAkXpgA8AATKIAwABLhAAAAJF7XQPAAE1GAWADwABMogDAAEuVAAAAkXxgA8AAStgAAGADtMEBPwEJAMAAS6K00QIAAoDAAEuowBaHZh7AAEvItLMDAAOBwABL38AWh3OCwABL68AWh4ODwABL98AWh5oAAAAAABaH7gAAAAACtMVxwABMAcAATAfAAFHGA5P/AAABYAOPZAAABAS0yHHAAExGwABMTQmEVbDLAGADtKoABLTJccAATGrAAExvCYHjsMsAYAOPZAAEtMpxwABMeMAATIcYkxiwywBgA8AAStgBKgS0y3HAAEyQwABMnRiUALDLAGADwABK2AEpAQW00XHAAEyiwABMosAATMcAAAADwABMrcAATMcAAAACAgLAAEyzAAAEgeNgA49kAMAATL8AAASEVWADtKoAAGADtMUBPwMIAbTJgADAFoiZCAG0yIEAwBaIpwkBwABMoo9uAAAAAAMGtM1xwABMzMAATNHAAE0UAACAggAAAAEDwABM1MAATRQAAAABAQHAAEzfAAAgO10DwABNRgFgA8AATKIAAFwBPgE9HMAA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AWADwABMogAGtYd3wABCZsAAQm3AAEKwAAKUiQAAAAEDwABCdsAAQrAAAAACAAACwABCgQAAAIcHYAO1TgFqwABCkGADtU6oTsAAQqAAAACR6mADj+ABasAAQqpgA5GmhpdgA7eGAAa1iHfAAENowABDesAAQ4cAApSKAAAAAQPAAEOFwABDhwAAAAAAAABdA4EiAWADrBcABrWJd8AARB7AAEQowABEOQACk1gAAAABA8AARDfAAEQ5AAAAAAAAAGADrBcABrWKd8AARQnAAEUYwABFPwAClIsAAAABA8AARSTAAEU/AAAAAQAAAcAARS8AAACR6mADj+ABasAARTlgA5GmhpddA4EiAWADwABOiQAGtYt3wABF78AARfbAAEYhAAKUjAAAAAEDwABGBsAARiEAAAABAAABwABGEQAAAJHqYAOP4AFqwABGG2ADkaaGl2ADwABOiQAGtYx3wABG+8AARxDAAEc2AAKUjQAAAAEDwABHG8AARzYAAAABAAABwABHJgAAAJHqYAOP4AFqwABHMGADkaaGl10DgSIBXQPAAE1GAWADwABOiQAGtY13wABH68AAR/jAAEgiAAKUjgAAAAEDwABIB8AASCIAAAABAAABwABIEgAAAJHqYAOP4AFqwABIHGADkaaGl10DwABNRgFgA8AATokABrWOd8AASo/AAEqcwABK8wAClI8AAAABA8AASqjAAErzAAAAAwEBwABKswAAAIZSXQPAAE1GAWADwABMogACwABKygAAAIcHYAO1TgFqwABK2WADtU6oTsAASuUAAACHbmADwABK2AFqwABK7GADwABK2D9dA4EiAWADtW4ABrWPd8AATSbAAE0rwABNhgAClJAAAAABA8AATTvAAE2GAAAAAwEBwABNRgAAAIZSXQPAAE1GAWADwABMogACwABNXQAAAIcHYAO1TgFqwABNbGADtU6oTsAATXgAAACHbmADwABK2AFqwABNf2ADwABK2D9cAAa1kHfAAE/7wABQCMAAUIUAApSRAAAAAQPAAFAVwABQhQAAAAQBAcAAUB0AAACUkmADwABOiQADwABQNwAAAIcHYAO1TgFqwABQRmADtU6oTsAAUFwAAACR6mADj+ABasAAUGZgA5GmhpfAAFB3AAAAh25gA8AAStgBasAAUH5gA8AAStg/XQOBIgFgA7VuAAa1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wABDLwAAAAICAsAAQlkAAACGUl0DwABNRgFgA8AATKIAwABCaQAAAJHqYAOP4AAAYAPAAE6JAT4BSz4BSsAAQoUBHMAAQpWBwABCjMAXBFGGUQEAAYDAAEKcwBcEOgCPsAABwABCqlsBwABCsQAAAYCKWwAAPgE9MMAAQrwfwABCxrXAAgACJMAAQx4DJ5TuFsAAQxeBwABDDsAXBFGGTY/nJ4DxFsAAQyAukWi16QAGtht4wABDNMAAQ0PAAET5AACUiwAAAAEDwABDT8AARPkAAAABAAABwABDWgAAAJHqYAOP4AFqwABDZGADkaaGl10DgSIBYAPAAE6JAT4CTsAARCzAAEQyAACBEWADwABOXQEawABEP8AATmRKwABETAEcwABEYRzAAERTLpSKAAAAALYZgIkBAWADwABOiQE0wABEZgPAAERmwABE9AAAAAEBAcAARGcAAACGUmADrBcAAF0DgR4BYAPAAE6JAT4BSz4BSsAARIQBHMAARIsulO2wywIAAoLAAESWwBcFhIDAAESdwBcFCAC2AgABwABEsFsBwABEtwAAAWlbAAA+AUrAAETEAR7AAETPgSwCAWADwABOiQKDwABE3MAXBdSBwABE38AXBTAAAIE1BrYceMAARP7AAEUFwABFYQAAlIwAAAABA8AARRXAAEVhAAAAAQAAAcAARSAAAACR6mADj+ABasAARSpgA5GmhpdgA8AATokBSsAARToBHMAARToulO2wywIAAhzAAEVFLpNYAAAAALYagMAARVjAFwY1ALYCBrYdeMAARWbAAEV7wABF7gAAlI0AAAABA8AARYbAAEXuAAAAAQAAAcAARZEAAACR6mADj+ABasAARZtgA5GmhpddA4EiAV0DwABNRgFgA8AATokBSsAARasBHMAARcwcwABFqy6UiwEAAAGR6oDAAEXCwBcGqrYbgIkBAV0DwABNRgFgA8AATokBFsAAReZqwABF12ADkRKpzoGskRUAgTUGth54wABF88AARgDAAEZ2AACUjgAAAAEDwABGD8AARnYAAAABAAABwABGGgAAAJHqYAOP4AFqwABGJGADkaaGl10DwABNRgFgA8AATokBSsAARjQBHMAARklqwABGOmADkRKpzoGsAQABHMAARlEulIwBAAABkeqAwABGbMAXB0u2HACRFQa2H3jAAEZ7wABG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AAEBAYgLAAAAiSRgA8AATKIAAGADtigBSogdAR6IIbEnAQABgIg6wBcOwAAGtix4wABMLsAATDLAAEw+AAKRTgAAAAEDwABMPMAATD4AAAAAAAAAYAPAAEyiAAa2LXjAAExCwABMRsAATE0AAoCNAAAAAQPAAExLwABMTQAAAAAAAABgA8AATKIABrYueMAATFHAAExRwABMWwACkVQAAAABA8AATFnAAExbAAAAAAAAAFsABrYveMAATF/AAExfwABMbgACkVYAAAABA8AATGPAAExuAAAAAQEBwABMaAAAAIZSYAPAAEyiAABbAAa2MHjAAExywABMcsAATKAAApFYAAAAAQPAAEx6wABMoAAAAAMDA8AATIUAAACBwV0DwABNRgFgA8AATKIAwABMkQAAAG1gA8AATKIAwABMnAAAAIRUYAPAAEyiAABbAAa2MXjAAEykwABMpMAATLgAAodwAAAAAQPAAEytwABMuAAAAAEBAcAATLIAAAAiYAPAAEyiAABbAAa2MnjAAEy8wABMvMAATOsAApFbAAAAAQPAAEzFwABM6wAAAAMDA8AATNAAAACBwV0DwABNRgFgA8AATKIAwABM3AAAAG1gA8AATKIAwABM5wAAAIRUYAPAAEyiAABbAAa2M3jAAEzvwABM78AATPkAAoW8AAAAAQPAAEz3wABM+QAAAAAAAABbAAa2NHjAAEz9wABM/cAATRYAApFeAAAAAQPAAE0IwABNFgAAAAEBAcAATQ0AAACFvGADwABMogAAWwAGtjV4wABNGsAATRrAAE0uAAKRYAAAAAEDwABNIsAATS4AAAABAQHAAE0nAAAAgchgA8AATKIAAFsABrY2eMAATTLAAE0ywABNOgACgcgAAAABA8AATTjAAE06AAAAAAAAAFsABrY3eMAATT7AAE0+wABNRQACh24AAAABA8AATUPAAE1FAAAAAAAAAFsABrY4eMAATUnAAE1JwABNawACkWQAAAABA8AATU3AAE1rAAAAAwMDwABNUgAAAJFkYAPAAEyiAMAATVwAAABtYAPAAEyiAMAATWcAAACEVGADwABMogAAWwAAABcOnAAXDugAFw8XABcPRgAXD3AAFw+qABcQCgAXEEMAFxCjABcQzQAXEQcAFxFBABcRawAXEZUAFxHuAAAADgK2OXjAAE1wwABNdsAAgCoD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lMAAS98DAAOBwABZpMAXG+CCwABZq8AXG/sWwABZt4DAAFmwwBcbyYHIwABNdgBJwABZxBzAAFnMgsAAWcjAFxv7gIwBAAGBwABZz8AXG+AAwABNxj4BSsAAWd4BHsAAWemBKwEBYAPAAEyiAZMAP07AAFoIwABaDwAAgchgA8AATKIBHMAAWhWCwABaEcAXG/uBBgEAAYHAAFoXwBcb4ADAAE3JSsAAWiIBHMAAWlwcwABaKS6U+7DLAgACasAAWj5gA8AATKKe6THAAFpMWwIrg8AAWlPAFx09ALZKgIkBAWADwABMogE0wABaYQPAAFphwABblgAAAAEBAcAAWmIAAACIe1sAAGADwABMogE+BknAAFp0HsAAWnixAwEAAYTAAFqJwBcdyQA+AT0wwABanh7AAFqksQQDAAOEwABau8AXHcknlQEWwABa2C6RaLZBAD9OwABa8cAAWvYAAJFWYAPAAEyiASbAAFrxBRzAAFsAhMAAWvjAFx3JgtEBAAGUAABgA8AATKJOwABbFcAAWxoAADtdA8AATUYBYAPAAEyiASbAAFsVBRzAAFskhMAAWxzAFx3JgtEBAAGVAABdA8AATUYBYAPAAEyiPRzAAFs2gMAAWy/AFxvJhFgDAAOBwABbP8AXG+AcwABbTIHAAFtGwBcb4IENAQABhcAAW07AFx4iAMAATciGwABbVMAXHlgAwABNaz0cwABbbxbAAFthLpGosMu2P5KsAQABhcAAW3fAFx4iALdISsAAW4QBhcAAW4vAFx4iAIE1BrZTeMAAW6DAAFukwABd2gAAk4kAAAABA8AAW7DAAF3aAAAAAwEDwABbuwAAAIHBXQPAAE1GAWADwABMogDAAFvIAAAAbWADwABMogFqwABb0GADwABMohrAAFvXAAAAhFRgA8AATKIBagBgAcAATawCAGADwABMogE+CD0cwABb4y6TlLDLAAAAALZLScAAW/oiIiElwABcBgCAwABb/8AXH0JdA8AATUYBWwEiIRzAAFwjgcAAXB3AFx9ZgIwBAAErAMAATcYAISXAAFw2AIHAAFwwwBcfWWADwABMogEiIRzAAFxRgsAAXE3AFx90gIwBAAErAMAATcYAISXAAFxiAILAAFxewBcfdGADwABMoj4BPTDAAFx1H8AAXH/AAEvRAAAAAD89isAAXJrAFx90HsAAXKvAAEvfAwADgcAAXLvAFx9ZgsAAXMLAFx90FsAAXM6AwABcx8AXH0KByMAATXYAScAAXNscwABc44LAAFzfwBcfdICMAQABgcAAXObAFx9ZAMAATcY+AUrAAFz1AZM/TsAAXQ3AAF0UAACA5lsBHMAAXRsWwABdFi6UULDLtkCRWAMAA4DAAF0kwBcfQoHAAF0swBcfWYLAAF0zwBcfdAC2MEnAAF09JcAAXUgAg8AAXUHAFyCxYAO0Pj4BPTDAAF1cH8AAXWa1wAMAAyeVARbAAF2NLpFotkEUwABdk8AXILEDAWADtD4APz0cwABdtBbAAF2mLpGosMu2P5KsAQABJsAAXbwFg8AAXbzAFyCxYAPAAEyiALdISsAAXckBJsAAXckFg8AAXdDAFyCxYAPAAEyiBrZUeMAAXd/AAF34wABfRwAAh3AAAAABA8AAXgHAAF9HAAAAAQEBwABeBgAAACJgA8AATKIAAF0DgSIBYAO1lQE+Aj0ewABeIcAAS8oCAAKAwABeLsAXIawnIgBKwABeQwEcwABefRzAAF5KLpT7sMsCAAJqwABeX2ADwABMooQ/McAAXm5bAiuAwABedcAXIawAtkqAiQEBYAO1lQE0wABeggPAAF6CwABfQgAAAAEBAcAAXoMAAACIe1sAAGADtjkBPgNJwABelR7AAF6ZsQMBAAGBwABeqsAXIjcAPgE9MMAAXr8ewABexbEEAwADgcAAXtzAFyI3J5UCFsAAXvoukWi2QQA/PRzAAF8dFsAAXw8ukaiwy7Y/kqYBAAGUALdKSsAAXzABLgCBNQa2VXjAAF9MwABfUMAAYHgAAJSWAAAAAQPAAF9dwABgeAAAAAEBAcAAX2IAAAAiYAPAAEyiAABgA8AATKIBPgY9HMAAX28uk5SwywAAAAC2Sz0ewABflMAAS8oCAAKAwABfocAXItknIgBOwABfusAAX8EAAIDmWwEcwABfyBbAAF/DLpRQsMu2QIdwAQABgMAAX9LAFyLZALYxScAAX94lwABf6QCBwABf4sAXIx1gA7Q+PgE9MMAAX/0fwABgB7XAAwADJ5UCFsAAYC8ukWi2QRTAAGA1wBcjHQEBYAO0PgA/PRzAAGBWFsAAYEgukaiwy7Y/kqYBAAGUALdKSsAAYGcBJsAAYGcFgcAAYG7AFyMdYAPAAEyiBrZWeMAAYH3AAGCWwABkggAAkVsAAAABA8AAYJ/AAGSCAAAAAwEDwABgqgAAAIHBXQPAAE1GAWADwABMogDAAGC9AAAAbWADwABMogFqwABgxWADwABMohrAAGDMAAAAhFRgA8AATKIBagBgAcAATawCAF0DgSIBYAO1lQE+C0nAAGDYIiIhJcAAYOQAgMAAYN3AFyPyXQPAAE1GAVsBIiEcwABhAYHAAGD7wBckCYCMAQABKwDAAE3GACElwABhFACBwABhDsAXJAlgA8AATKIBIiEcwABhL4LAAGErwBckJICMAQABKwDAAE3GACElwABhQACCwABhPMAXJCRgA8AATKI+AT0wwABhUx/AAGFdwABL0QEAASeVAwA/PYrAAGGYwBckJB7AAGGpwABL3wMAA4HAAGG5wBckCYLAAGHAwBckJBbAAGHMgMAAYcXAFyPygcjAAE12AEnAAGHZHMAAYeGCwABh3cAXJCSAjAEAAYHAAGHkwBckCQDAAE3GPgFKwABh8wEewABh/oErAQFgA7WVAS4AP07AAGIsAAAAgOZgA7RHAEs+AT2LwABiRMAXJWUewABiTbEFAwADgMAAYnDAFyPygcAAYnjAFyQJgsAAYn/AFyQkAAABwABii1sBwABikgAAAWlbAAA+AUrAAGKdAR7AAGKogSwBAWADtZUBhMAAYrXAFyWuAE7AAGLJwABi0QAAlLldA8AATUYBWwEewABi18AARo8BAVsBlwA9HMAAYuuEwABi5MAXJdqBDAIAApMrAMAATVY9HMAAYwKEwABi+8AXJdqBDAIAApQWwABjD4PAAGMIwBclZYHBtEkAwABNVj0cwABjIoTAAGMbwBcl2oEMAgAClRbAAGMvg8AAYyjAFyVlbbRKAMAATVY9HMAAY0GEwABjOsAXJdqBDAIAApYcwABjS4LAAGNHwBckJIEGAQABHMAAY1SBwABjTsAXJAmBBgEAARbAAGNdg8AAY1bAFyVlbbRKAMAATckAwABNyQDAAE1WSsAAY2kBHMAAY50cwABjcC6U+7DLAgACasAAY4VgA8AATKKERYTAAGOUwBcl2gC2SoCJAQFgA7WVATTAAGOiA8AAY6LAAGR9AAAAAQEBwABjowAAAIh7WwAAYAO2OQE+A0nAAGO1HsAAY7mxAwEAAYXAAGPKwBcnGQA+AT0wwABj3x7AAGPlsQQDAAOFwABj/MAXJxknlQQWwABkGi6RaLZBAD89HMAAZD0WwABkLy6RqLDLtj+SpgEAARzAAGRKgsAAZEbAFyQkgQYBAAEcwABkU4HAAGRNwBckCYEGAQABFsAAZFyDwABkVcAXJWVttEoAwABNyQDAAE3JALdKSsAAZGsBLgCBNQa2V3jAAGSHwABkjMAAZ58AAJOLAAAAAQPAAGSZwABnnwAAAAMBA8AAZKQAAACBwV0DwABNRgFgA8AATKIAwABksQAAAG1gA8AATKIBasAAZLlgA8AATKIawABkwAAAAIRUYAPAAEyiAWoAYAHAAE2sAgBcAT4IPRzAAGTMLpOUsMsAAAAAtktJwABk4yIiISXAAGTvAIDAAGTowBcn+10DwABNRgFbASIhHMAAZQyBwABlBsAXKBKAjAEAASsAwABNxgAhJcAAZR8AgcAAZRnAFygSYAPAAEyiASIhHMAAZTqCwABlNsAXKC2AjAEAASsAwABNxgAhJcAAZUsAgsAAZUfAFygtYAPAAEyiPgE9MMAAZV4fwABlaMAAS9EBAAEnk54APz2KwABlp8AXKC0ewABluMAAS98DAAOBwABlyMAXKBKCwABlz8AXKC0WwABl24DAAGXUwBcn+4HIwABNdgBJwABl6BzAAGXwgsAAZezAFygtgIwBAAGBwABl88AXKBIAwABNxj4BSsAAZgIAP07AAGYkwABmMwAAkqJgA7RHAR7AAGY9sQUDAAOAwABmYMAXJ/uBwABmaMAXKBKCwABmb8AXKC0ATsAAZn3AAGaEAACA5lsBHMAAZosWwABmhi6UULDLtkCRWwMAAxbAAGakg8AAZpXAFylngcG0SRbAAGa7g8AAZqzAFylnbbRKHMAAZs6CwABmysAXKC2BBgEAARzAAGbXgcAAZtHAFygSgQYBAAEWwABm6IPAAGbZwBcpZ220SgDAAE3JAMAATckAtjJJwABm9SXAAGcAAITAAGb5wBcpn2ADtD4+AT0wwABnFB/AAGcetcADAAMnlQQWwABnRi6RaLZBFMAAZ0zAFymfBAFgA7Q+AD89HMAAZ20WwABnXy6RqLDLtj+SpgEAARzAAGd6gsAAZ3bAFygtgQYBAAEcwABng4HAAGd9wBcoEoEGAQABFsAAZ5SDwABnhcAXKWdttEoAwABNyQDAAE3JALdKBrZYeMAAZ6TAAGe9wABohwAAh0kAAAABA8AAZ8jAAGiHAAAAAgEBwABn0AAAAIZHYAPAAE6JAAHAAGfoAAAAkepgA4/gAWrAAGfyYAORpoaXXQOBIgFgA7WVAT4DPR7AAGgNwABLygIAAoHAAGgawBcrBSeR6gBOwABoOcAAaD4AADtdA8AATUYBYAPAAEyiARzAAGhJgcAAaEDAFysFhk8BAAGAwABoUMAXKvQAj69KwABoXQEcwABoZC6RWwMAA4LAAGhuwBcrRZMWwABofILAAGh3wBcrRYHIwABNdgC2Vga2WXjAAGiMwABokcAAaVYAAJSXAAAAAQPAAGigwABpVgAAAAIBAcAAaKgAAACGR2ADwABOiQABwABougAAAJHqYAOP4AFqwABoxGADkaaGl1wBPgM9HsAAaN/AAEvKAgACgcAAaOzAFyvnJ5HqAE7AAGkLwABpEAAAO10DwABNRgFgA8AATKIBHMAAaRuBwABpEsAXK+eGTwEAAYDAAGkiwBcr1gCPrz0cwABpLy6TiwMAA4LAAGk9wBcsH5MWwABpS4LAAGlGwBcsH4HIwABNdgC2Vwa2WnjAAGlbwABpZ8AAalYAAIW8AAAAAQPAAGlvwABqVgAAAAAAAABdA4EiAWADwABMogE+AUrAAGl4ARzAAGmqHMAAaX8ulPuwywIAAmrAAGmUYAPAAEyiHDHAAGmiWwErALZKgIkBAWADwABMogE0wABprwPAAGmvwABqUQAAAAEBAcAAabAAAACIe1sAAF0DgR4BYAPAAEyiAT4CScAAacIewABpxrEDAQABgMAAadfAFy0IAD4BPTDAAGnsHsAAafKxBAMAA4DAAGoJwBctCCeVBRbAAGomLpFotkEAP0rAAGo7ASbAAGo7BYDAAGpCwBctCF0DgR4BYAPAAEyiAIE1BrZbeMAAalvAAGpfwABrJwAAlJgAAAABA8AAamvAAGsnAAAAAAAAAGADwABMogE+BD0cwABqdC6TlLDLAAAAALZLTsAAao/AAGqWAACA5lsBHMAAap0WwABqmC6UULDLtkCFvAAAAAC2M0nAAGqtJcAAargAgMAAarHAFy3LYAO0Pj4BPTDAAGrMH8AAata1wAMAAyeVBRbAAGr9LpFotkEUwABrA8AXLcsAAWADtD4AP0rAAGsWASbAAGsWBYDAAGsdwBcty2ADwABMoga2XHjAAGsswABrRcAAbFgAAJFeAAAAAQPAAGtQwABsWAAAAAEBAcAAa1UAAACFvGADwABMogAAXQOBIgFgA7WVAT4BSsAAa2UBHMAAa60cwABrbC6U+7DLAgACasAAa4FgA8AATKKESDHAAGuSWwIrgMAAa5nAFy58ALZKgIkBAWADtZUBNMAAa7IDwABrssAAbFMAAAABAQHAAGuzAAAAiHtbAABgA7Y5AT4CScAAa8UewABrybEDAQABgcAAa9rAFy7vAD4BPTDAAGvvHsAAa/WxBAMAA4HAAGwMwBcu7yeVBhbAAGwsLpFotkEAP0rAAGxBAS4AgTUGtl14wABsXcAAbGLAAG00AACUmQAAAAEDwABsccAAbTQAAAABAQHAAGx2AAAAhbxgA8AATKIAAFwBPgM9HMAAbIYuk5SwywAAAAC2S07AAGyhwABsqAAAgOZbARzAAGyvFsAAbKoulFCwy7ZAkV4BAAGAwABsu8AXL3YAtjRJwABsyiXAAGzVAIHAAGzOwBcvnWADtD4+AT0wwABs6R/AAGzztcADAAMnlQYWwABtHS6RaLZBFMAAbSPAFy+dAQFgA7Q+AD8Gtl54wABtOcAAbVLAAG5PAACRYAAAAAEDwABtWsAAbk8AAAABAQHAAG1fAAAAgchgA8AATKIAAF0DgSIBYAO1lQE+AUrAAG1tARzAAG2nHMAAbXQulPuwywIAAmrAAG2JYAPAAEyihEsxwABtl1sCK4DAAG2ewBcwPAC2SoCJAQFgA7WVATTAAG2sA8AAbazAAG5KAAAAAQEBwABtrQAAAIh7WwAAYAO2OQE+AknAAG2/HsAAbcOxAwEAAYHAAG3UwBcwrwA+AT0wwABt6R7AAG3vsQQDAAOBwABuBsAXMK8nlQcWwABuIy6RaLZBAD9KwABuOAEuAIE1BrZfeMAAblTAAG5ZwABvHgAAlJoAAAABA8AAbmXAAG8eAAAAAQEBwABuagAAAIHIYAPAAEyiAABcAT4DPRzAAG54LpOUsMsAAAAAtktOwABuk8AAbpoAAIDmWwEcwABuoRbAAG6cLpRQsMu2QJFgAQABgMAAbqrAFzE2ALY1ScAAbrclwABuwgCBwABuu8AXMV1gA7Q+PgE9MMAAbtYfwABu4LXAAwADJ5UHFsAAbwcukWi2QRTAAG8NwBcxXQEBYAO0PgA/BrZgeMAAbyPAAG8vwABwGAAAgcgAAAABA8AAbzXAAHAYAAAAAAAAAF0DgSIBYAPAAEyiAT4BSsAAbz4BHMAAb24cwABvRS6U+7DLAgACasAAb1pgA8AATKKIETHAAG9mWwErALZKgIkBAWADwABMogE0wABvcwPAAG9zwABwEwAAAAEBAcAAb3QAAACIe1sAAF0DgR4BYAPAAEyiAT4CScAAb4YewABvirEDAQABgMAAb5vAFzJaAD4BPTDAAG+wHsAAb7axBAMAA4DAAG/NwBcyWieVCBbAAG/oLpFotkEAP0rAAG/9ASbAAG/9BYDAAHAEwBcyWl0DgR4BYAPAAEyiAIE1BrZheMAAcB3AAHAhwABw4wAAlH4AAAABA8AAcCvAAHDjAAAAAAAAAGADwABMogE+BD0cwABwNC6TlLDLAAAAALZLTsAAcE/AAHBWAACA5lsBHMAAcF0WwABwWC6UULDLtkCByAAAAAC2NknAAHBrJcAAcHYAgMAAcG/AFzMdYAO0Pj4BPTDAAHCKH8AAcJS1wAMAAyeVCBbAAHC5LpFotkEUwABwv8AXMx0AAWADtD4AP0rAAHDSASbAAHDSBYDAAHDZwBczHWADwABMoga2YnjAAHDowABxAcAAceMAAIduAAAAAQPAAHEGwABx4wAAAAAAAABdA4EiAWADtZUBPgFKwABxDwEcwABxPhzAAHEWLpT7sMsCAAJqwABxK2ADwABMooQ5McAAcTZbASsAtkqAiQEBYAO1lQE0wABxQwPAAHFDwABx3gAAAAEBAcAAcUQAAACIe1sAAGADtjkBPgJJwABxVh7AAHFasQMBAAGAwABxa8AXNCgAPgE9MMAAcYAewABxhrEEAwADgMAAcZ3AFzQoJ5UJFsAAcbcukWi2QQA/SsAAccwBLgCBNQa2Y3jAAHHowABx7cAAcpkAAJSbAAAAAQPAAHH2wABymQAAAAAAAABcAT4DPRzAAHH/LpOUsMsAAAAAtktOwAByGsAAciEAAIDmWwEcwAByKBbAAHIjLpRQsMu2QIduAAAAALY3ScAAcjUlwAByQACAwAByOcAXNMZgA7Q+PgE9MMAAclQfwAByXrXAAwADJ5UJFsAAcoIukWi2QRTAAHKIwBc0xgABYAO0PgA/BrZIeMAAc3DAAHN0wABzmwAAlQqwywAAAAEDwABzgsAAc5sAAAABAQHAAHOMAAAAlQtgA7VfAABgA8AATKIBSsAAc5MBFsAAc5aAwABzk8AXNV6ISbDLtWoGtmR4wABzoMAAc7nAAHX5AACRZAAAAAEDwABzvcAAdfkAAAADAAPAAHPPAAAAhwdgA7VfAWrAAHPfYAO1X6jGwABz7gAAAG1gA8AATKIBasAAc/ZgA8AATKIawABz/QAAAIRUYAPAAEyiAWrAAHQDYAPAAEyihnIAXQOBIgFgA7WVAT4EScAAdA4iIiElwAB0GACAwAB0E8AXNbVgA7VfASElwAB0MACBwAB0KsAXNc5gA8AATKIBISXAAHRBAILAAHQ9wBc16WADwABMoj4BPTDAAHRTH8AAdF3AAEvRAAAAAD9JwAB0eCIiHMAAdIOBwAB0fcAXNc6AuwEAAZMAwABN0AEcwAB0kILAAHSMwBc16YC7AQABHMAAdJKUg+sAAAAAwABMxQDAAE3QASIhHMAAdJ+CwAB0m8AXNemAjAEAARzAAHSilIPrAAAAAMAATMUAwABNxgAcwAB0sIHAAHSqwBc1zoFeAQABgsAAdLPAFzXpAMAATdM+AT0wwAB0wh/AAHTMwABL0QAAAAA/TsAAdOvAAHTwAACRZGADwABMogEcwAB08i6VCrDLAQABgMAAdQHAFzW1ALZISsAAdQwBHMAAdVUcwAB1Ey6U+7DLAgACasAAdShgA8AATKKEPDHAAHUyWwQrg8AAdTnAFzcfgcAAdT/AFzXOgsAAdUbAFzXpALZKgIkBAWADtZUBNMAAdVoDwAB1WsAAdfQAAAABAQHAAHVbAAAAiHtbAABgA7Y5AT4CScAAdW0ewAB1cbEDAQABhMAAdYLAFzezAD4BPTDAAHWXHsAAdZ2xBAMAA4TAAHW0wBc3syeVDBbAAHXNLpFotkEAP0rAAHXiAS4AgTUGtmV4wAB1/sAAdhfAAHfKAACUnQAAAAEDwAB2HcAAd8oAAAACAALAAHYjAAAAbWADwABMogFqwAB2K2ADwABMohrAAHYyAAAAhFRgA8AATKIBasAAdjhgA8AATKKGcgBdA4EiAWADtZUBPgNJwAB2QyIhJcAAdk4AgMAAdkjAFzg6YAPAAEyiASElwAB2XwCBwAB2W8AXOFVgA8AATKI+AT0wwAB2cR/AAHZ7wABL0QAAAAA/ScAAdpYcwAB2oIDAAHaawBc4OoCMAQABgcAAdqPAFzhVAMAATcY+AT0wwAB2sB/AAHa6wABL0QAAAAA/SsAAdtUBHMAAdyQcwAB23C6U+7DLAgACasAAdvFgA8AATKKEPDHAAHb7WwQrasAAdwJgA8AATKIagMAAdw7AFzg6gcAAdxXAFzhVALZKgIkBAWADtZUBNMAAdykDwAB3KcAAd8UAAAABAQHAAHcqAAAAiHtbAABgA7Y5AT4CScAAdzwewAB3QLEDAQABgsAAd1HAFzlvAD4BPTDAAHdmHsAAd2yxBAMAA4LAAHeDwBc5byeVDRbAAHeeLpFotkEAP0rAAHezAS4AgTUGtmZ4wAB3z8AAd9TAAHnTAACUnAAAAAEDwAB33MAAedMAAAADAAPAAHfuAAAAhwdgA7VfAWrAAHf+YAO1X6jGwAB4DQAAAG1gA8AATKIBasAAeBVgA8AATKIawAB4HAAAAIRUYAPAAEyiAWrAAHgiYAPAAEyihnIAXAE+Bj0cwAB4LS6TlLDLAAAAALZLScAAeEQiIiElwAB4TgCAwAB4ScAXOfZgA7VfASElwAB4ZgCBwAB4YMAXOg9gA8AATKIBISXAAHh3AILAAHhzwBc6KmADwABMoj4BPTDAAHiJH8AAeJPAAEvRAAAAAD9JwAB4riIiHMAAeLmBwAB4s8AXOg+AuwEAAZMAwABN0AEcwAB4xoLAAHjCwBc6KoC7AQABHMAAeMiUg+sAAAAAwABMxQDAAE3QASIhHMAAeNWCwAB40cAXOiqAjAEAARzAAHjYlIPrAAAAAMAATMUAwABNxgAcwAB45oHAAHjgwBc6D4FeAQABgsAAeOnAFzoqAMAATdM+AT0wwAB4+B/AAHkCwABL0QAAAAA/TsAAeSHAAHkmAACRZGADwABMogEcwAB5KC6VCrDLAQABgMAAeTfAFzn2ALZITsAAeUbAAHlNAACA5lsBHMAAeVQWwAB5Ty6UULDLtkCRZAMAA4PAAHlZwBc7aYHAAHlfwBc6D4LAAHlmwBc6KgC2OEnAAHlwJcAAeXsAhMAAeXTAFzuWYAO0Pj4BPTDAAHmPH8AAeZm1wAMAAyeVDBbAAHm8LpFotkEUwAB5wsAXO5YEAWADtD4APwa2Z3jAAHnYwAB53cAAe08AAJSeAAAAAQPAAHnnwAB7TwAAAAIAAsAAee0AAABtYAPAAEyiAWrAAHn1YAPAAEyiGsAAefwAAACEVGADwABMogFqwAB6AmADwABMooZyAFwBPgU9HMAAeg0uk5SwywAAAAC2S0nAAHokIiElwAB6LwCAwAB6KcAXPEdgA8AATKIBISXAAHpAAIHAAHo8wBc8YmADwABMoj4BPTDAAHpSH8AAelzAAEvRAAAAAD9JwAB6dxzAAHqBgMAAenvAFzxHgIwBAAGBwAB6hMAXPGIAwABNxj4BPTDAAHqRH8AAepvAAEvRAAAAAD9OwAB6usAAesEAAIDmWwEcwAB6yBbAAHrDLpRQsMu2QJFkAwADasAAes1gA8AATKIagMAAetnAFzxHgcAAeuDAFzxiALY4ScAAeuolwAB69QCCwAB67sAXPRtgA7Q+PgE9MMAAewkfwAB7E7XAAwADJ5UNFsAAezgukWi2QRTAAHs+wBc9GwIBYAO0PgA/BrZJeMAAfIbAAHyKwAB8qQAAk02wywAAAAEDwAB8ksAAfKkAAAAAAAAAYAPAAEyiAUrAAHyYARzAAHydFsAAfJgulFCwy7ZAkU4AAAAAtiwGtkp4wAB8rsAAfLXAAH8zAACU+7DLAAAAAQPAAHy+wAB/MwAAAAMCAsAAfMMAAACUuWADwABMogDAAHzRAAAAO10DwABNRgFbAAHAAHzdAAAAlPxgA8AAStgBasAAfOlgA8AAStg/XQOBIgFbAT4GScAAfPcWwAB8+y6SurZDPgFKwAB9CwEewAB9FoEsAQFbAR/AAH0ntcACAAInlQ4WwAB9Si6RaLZBAAA/ScAAfVwWwAB9YC6U9LDLtj0+Ak7AAH1+wAB9ggAAgvdgA8AATokBJ5UPSsAAfbUBHsAAfcCBLAEBWwEfwAB90bXAAgACg8AAfeXAFz64FsAAfeoukWi2QQAAP0nAAH38gsAAfgDAFz5DPgE9F8AAfnwukroptkM/PRfAAH6VLpT0sMsptj09HMAAfraBwAB+ssAXPjGBDAIAApMcwAB+vC6TTbDLAAAAALZJAMAATVZKwAB+zAEcwAB+9x7AAH7et/kCAAKAwAB+6MAXPiGBwAB+8cAXPjEAgRwBAAE0wAB/BAPAAH8EwAB/LgAAAAAAAABgAcAATawBPgE9F8AAfw8ulPSwyyq2PQCBNwa2S3jAAH84wAB/PcAAgCgAAJOUsMsAAAABA8AAf0zAAIAoAAAAAAAAAFwBPgJJwAB/VRbAAH9ZLpT0sMu2PT4BPTDAAH9zH8AAf321wAIAAieVDxbAAH/HLpFotkEAP0nAAH/YFsAAf9wukrq2Qz4BPTDAAH/sH8AAf/a1wAIAAieVDhbAAIAZLpFotkEAPwAAFxPQABcUKAAXFLcAFxXcABcW1QAXF/UAFxjdABcabwAXG6IAFx8bABchhQAXIrIAFyPLABcn1AAXKs0AFyuvABcshAAXLYgAFy5VABcvTwAXMBUAFzEPABcx1QAXMtoAFzOnABc0iAAXNTUAFzWOABc4EwAXOc8AFzwgABc9qAAXPfgAFz+wABdAQAAAACICtmp5gbqBwIV9g5UQAAABYAPAAE3vAAAKBLZseYHmghQGk1YAYAO2agFqgfNgA7ZqqdkEtm15gkeCUgaVEQFqghlgA8AASoup5GADtmoBaoJOYAO2aqnZBLZueYJkgpcGlRMAYAO2agFqgnZgA7ZqqfEEtm95gs+C5AaVFAFqgpxgA8AASoup/GADtmoBaoLbYAO2aqnxBLZweYL2gyQGlRYAYAO2agFqgwNgA7ZqqgkEtnF5g1eDYgaVFwFqgylgA8AASouqFGADtmoBaoNeYAO2aqoJBLZyeYN0g6YGifkAYAO2agFqg4VgA7ZqqiEEtnN5g92D8QaKSAFqg6tgA8AASouNmWADtmoBaoPpYAO2aqohBLZ1eYQDhJ8GlRmwywBdA8AATUYBYAO2agFqhA9dA8AATUYBYAO2aqopBLZ2eYSthLIJiEmwywBgA8AATKIAAQW2fXmEt4S9hOcBgZOwywADhNuE5wAAAAEBAYThAAAEiElgA8AATKIAAGADtmoBPwIIAbZ2gADAF0JBCQGEvcAATgUAAAAAAga2eXmE7IUIhSwAAZUasMsAAAABA4UPhSwAAAABAQGFFAAAAIXZYAPAAEyiAABgA7ZqAUqFHQEchSZqhR1dA8AATUYBYAO2aqopgtEBAAGAhSfAF0KNAMAATVUGtnp5hTCFN4V7AACA7wAAAAEDhT+FewAAAAAAAABgA8AATokBSoVFARyFdGqFRV0DwABNRgFgA8AATomqQ4LRAQABFoV1LohJsMu2dgDAAE1VAAAXQm4AF0LJABdDGwAAAAICtn55hlSGWpqPg5UbAWqGWmADk/omAAFgA8AATe8AAA0EtoF5hqiGsQaISbDLAGADwABMogFqhrBgA8AATKIaBLaCeYbChtIGlRywywBgA8AATKIBaobRYAPAAEyiFAS2g3mG44b0BpUdsMsAYAPAAEyiAWqG82ADwABMohYEtoR5hwWHFgaVHrDLAGADwABMogFqhxVgA8AATKJMBLaFeYcnhzAGka2wywBgA8AATKIBaocvYAPAAEyiGAS2hnmHQYdKBpUfsMsAYAPAAEyiAWqHSWADwABMooQtBLaHeYdch4oGlSCwywBgA7Z+AWqHbmADtn6qUwS2iHmIS4hSCZUhAGADwABK6gAEtol5iLqIwgmVIgBgA8AASuoABLaKeYmPiZcJlSMAYAPAAErqAAS2i3mKQYpFCYXZAGADtmoABLaMeYsHiwsJhwcAYAPAAEyiAAS2jXmLT4tTCYPDAGADwABMogACBbaZeYtYi1iLvQCBk7DLAAOLaou9AAAABgYGi3AAAASVIWADwABK6gCLfgAABJUiYAPAAErqAIuNAAAElSNgA8AASuoAi5wAAASF2WADtmoAi60AAASHB2ADwABMogCLuAAABIPDYAPAAEyiAABgA7Z+AT8HCAG2iIAAwBdEsAgBtomBAMAXRL4IAbaKggDAF0TMCAG2i4MAwBdE2ggBtoyEAMAXROYIAbaNhQDAF0T0CQGLWMAATgUAAAAABbaaeYvCi8iMgAGVJLDLAAOL4oyAAAAAAAAAAGADtn4BPwcIALaIKwgAtokrCAC2iisIALaLaoxTYAO2aqohCAC2jJMIALaNHIx+lIPrAAAAAMAATMUJAYvIwABOBQAAAAAHBraQeoElgTWBdAAFlSWwywJqgTVgA5P6JmqBNWADlAiqbwAAAQOBPoF0AAAAAgICgUoAAACRkWADuCsAgVwAAACRaGADwABOiQAAWwAGtpN5jgSOFI7TAAGVJwAAAAEDjhyO0wAAAAEBAY4kAAAAkWhgA8AATokAAGADtn4BPgNOjkKOTAABlANgA7h4ARqOWrh9SY5nHI51gY5rwBdGNoCMAQABKwDAAE38PgFKjoYBHo6NtpEBAAGAjp/AF0YfAD9KjrABHI7BgY63wBdGNpUnAQABgI7KwBdGHwC4iQa2kXmO2I7okV8AAZUosMsAAAABA475kV8AAAABAQGPAQAAAJFoYAPAAE6JAABgA7Z+AT4ESY8/Go9MuMo+AT2Ij1/AF0azHo93tsoBAAGAj5PAF0azAD9Oj6iPrQAAO1sBHo+vtpACAAIaj8S4LoCP0MAXRrMASY/bJY/kAIGP38AXRu1gA7Q+So/wAWqQAGADtn6qUz9KkA8BH5AatpkGAAYfkDrAAEtKAQABJpBiBRyQYoGQXsAXRu2C0QEAAWqQY2ADwABMohQAAGADwABMogAfkH/AAEtKAQABJpCnBRyQp4GQo8AXRu2C0QEAAWqQqGADwABMohYAAGADwABMogAfkMXAAEtKAQABJpDtBRyQ7YGQ6cAXRu2C0QEAAWqQ7mADwABMokwAAGADwABMogAekRy2eQEAASaRKAUckSiBkSTAF0btgtEBAAFqkSlgA8AATKIaAABgA8AATKIAJpE+BRyRPoGROsAXRu2C0QEAAWqRP2ADwABMohgAAGADwABMoiaRUwUckVOBkU/AF0btgtEBAAFqkVRgA8AATKKELQAAYAPAAEyiAAa2lHmSJZI9kugAAZUpAAAAAQOSQZLoAAAAAQEBkkkAAACRaGADwABOiQAAXQOBIgFgA7Z+AT4DTpJnknEAAZQDYAO4eAEakn+4fUmSjBySmoGSkMAXSHqAjAEAASsAwABN/D4BSpKrAR6SsraSAQABgJK4wBdIXgA/SpLJARyS2oGS0MAXSHqVKQEAAYCS38AXSF4AuIgGtpJ5ku2TBZY2AAGVKrDLAAAAAQOTCpY2AAAAAQEBkxIAAACRaGADwABOiQAAXQOBIgFgA7Z+AT4CSZNQGpNduMo+AT2Ik3DAF0j3HpOItsoBAAGAk6TAF0j3AD9Kk7UBHJQFHpPCte4CAAJqk+RgA8AATKKENjGT7lsCK4CT9cAXSPcAgIkBAWADtn4BNJQKA5QKljEAAAABAQGUCwAAAIh7WwAAYAO2fgE+A0mUHR6UIbEDAQABgZQywBdJdAA+AUqURwFqlFdgA7Z+qlM/TpS4lL0AADtdA8AATUYBWwEmlLgFHJTHgZS/wBdJdILRAQABlAAAXQPAAE1GAVtKlNIBH5TdtpkGAAYflP/AAEtKAQABJpUnBRyVJ4KVI8AXSamC0QEAAWqVKGADwABMohQAwABNVWADwABMogAflUbAAEtKAQABJpVuBRyVboKVasAXSamC0QEAAWqVb2ADwABMohYAwABNVWADwABMogAflY7AAEtKAQABJpW2BRyVtoKVssAXSamC0QEAAWqVt2ADwABMokwAwABNVWADwABMogAelee2eQEAASaV8wUclfOCle/AF0mpgtEBAAFqlfRgA8AATKIaAMAATVVgA8AATKIAJpYLBRyWC4KWB8AXSamC0QEAAWqWDGADwABMohgAwABNVWADwABMoiaWIgUcliKClh7AF0mpgtEBAAFqliNgA8AATKKELQDAAE1VYAPAAEyiAACBNQa2lXmWO5ZClvQAAIDvAAAAAQOWSpb0AAAAAAAAAGADwABOiQFKllABJJb0DCeVKxaWZC6F2baLJ5UsFpZ8LpUhtognlS0WlpgulSK2iSeVLhaWtS6VI7aKJ5UvHJbPLpUwAAAAALaWJ5UxFpbtLoPDto0GtpZ5mJOYmpqNAACVMAAAAAEDmKSajQAAAAAAAABgA8AATokBPghOmLGYvQAAlTJgA8AATKIBHJjEFpi/LocHtoyAoQEAATeP/wDAAEy6TpjVmNsAAJUzXQPAAE1GAWADwABOiQFqmN1dA8AATUYBYAPAAE6JqpBOmSWZLAAAgOZdA8AATUYBWwExmS5bAEmZNiEcmVAcmUeAmTvAF0udgKEBAAE3iAAAwABMuoCMAQABkwDAAE3GPRyZXYKZVsAXS+6AggEAASeVPADAAE1XP0mZcSEcmYscmYKAmXbAF0udgKEBAAE3hAAAwABMuoCMAQABkwDAAE3GPRyZmIKZkcAXS+6AggEAASeVPQDAAE1XP0mZrCEcmcYcmb2AmbHAF0udgKEBAAE3ggAAwABMuoCMAQABkwDAAE3GPRyZ04KZzMAXS+6AggEAASeVPgDAAE1XPz01mekAAAEAXQPAAE1GAVsBgpnpwBdL7jWZ+AAAAQBcARyZ+IOZ6cAXTMyAggEAARyaAYGZ/MAXS8WC0QEAARyaFRyaD4CaA8AXS52DxQEAATcGAMAATL+AoQEAATcHAMAATLoAwABNVQDAAE1XNZolAAABAFwBHJolg5npwBdMzICCAQABHJougZopwBdLxYLRAQABHJpCHJo8gJowwBdLnYPFAQABlgDAAEy/gKEBAAE3BwDAAEy6AMAATVUAwABNVzWaUgAAAQBcARyaUoOZ6cAXTMyAggEAARyaW4GaVsAXS8WC0QEAARyaaICaXMAXS52AoQEAATcHAMAATLoAwABNVQDAAE1Xg5npwBdMzEqadQEcmoOCmnzAF0vugb8AAAAAwABNGAAAF0W1ABdGAgAXRpQAF0hBABdI2AAXSwIAF0t1ABdN8wAAAAcCtpt5oMOg0sAAeI4HlT8BaqDSYAOT+iYAAWADwABN7wAABAS2nnmg7qDzGJGqsMsAYAPAAE6JASsEtp95oQGhCRiUGbDLAGADrBcBKwS2oHnAAE54wABOwQWVQLDLAGADwABOGQEewABOoMAATjIBAAEnlUEABLahecAAaJHAAGj/BZVCsMsAYAPAAE4ZASMawABoqrjKHsAAaMDAAE4yAQABJ5VDAB7AAGjqwABOMgEAASeVRAABYAPAAE4ZAQW22AAAAAAEAAADAAAAAAAAAAAAYAO2mwE/AQkBAMAATgUAAAAAMQa2o3mhDqEZoR0BApFoAAAAAQOhHaEdAAAAAAAAAGADwABOiQAGtqR5ofWh/aIWAQCA6wAAAAEDogGiFgAAAAAAAABgA8AATwoBSqIEAR6iCMAAT4ABAAEWohEukWi2owAGtq15pKSksaS5AAKUMQAAAAEDpLekuQAAAAAAAABdA4EiAWADwABK2AAGtq55px2nIqcuAAKUNQAAAAEDpyynLgAAAAAAAABgA8AAStgABraveajZqPKpCAAClBIAAAABA6j4qQgAAAABAQGpAAAAAJQTYAPAAE6JAABdA4EiAWADtpsABraweapvqoCqmgAClBQAAAABA6qKqpoAAAABAQGqkgAAAJQTYAPAAE6JAABgA7abAAa2sXmvka+gsOgAAJQQAAAAAQOvtLDoAAAAAAAAAF0DgSIBYAPAAE6JAT4BSq+9ARywIR6vyrXuAgACaq/1YAPAAEyiTjGwD1sCKxawFi6UGbDLtp8AgIkBAWADwABOiQE0sCYDsCaw4wAAAAEBAbAnAAAAiHtbAABdA4EeAWADwABOiQE+AkmwOR6wPbEDAQABgLBOwBdQhAA+AT0wsGMesGmxBAMAA4CwjcAXUIQnlUUWsLgukWi2owA/SrDNASawzQWAsNTAF1CEXQOBHgFgA8AATokAgTUGtrJ5td615baiAACUEQAAAAEDtf22ogAAAAAAAABgA8AATokBPgNOtgq2EQAAgOZbAR62E7bEAgACGrY0uC4WtkAulBmwy7afAD0etk+2yQMAA4C2XcAXURYnlUUWtoYukWi2owBKtpEBJraRBYC2mMAXURZgA8AATokGtrN5uE24Xrh7AACVKQAAAAEDuGK4ewAAAAAAAABdA4EiAWADtn4BSrhoAR64cbaUAQABFrh2LpFotqMABra0eboSuhu6QAAAlScAAAABA7ojukAAAAAAAAAAYAO2fgFKuikBHroytpMBAAEWujsukWi2owAGtrV5vaa9v74FAACUwwAAAAEDvcW+BQAAAAEAAAG9zAAAAJFsYAPAAErYAWq912ADwABK2D9dA4EiAWADtpsBSr3oARy96C6UPbDLAQAAAZFsgL37wBdR/La5Bra2ecAAQPHAAED2wABBPgAAlMgAAAABA8AAQQDAAEE+AAAAAQAAAcAAQQcAAACRbGADwABK2AFqwABBEmADwABK2D9cAUrAAEEdARzAAEEdLpQ/sMsBAAABkWyAwABBNMAXUmG2uga2t3nAAEeBwABHmcAASUYAAIGfAAAAAQPAAEeewABJRgAAAAIAAALAAEerAAAAkWlgA8AATKIBasAAR8NgA8AATKJRwABHzQAAAJFsYAPAAErYAWrAAEfYYAPAAErYP10DgdYBYAO22QE+BE7AAEgzwABIPwABlUZgA8AATokBHsAASEG2ygEAARbAAEhdLpFotqMATsAASHrAAEiEAAGUA2ADuHgBGsAASJK4fUnAAEifHMAASK2DwABIo8AXUzaAjAEAASsAwABN/D4BSsAASL4BHsAASNi3JgMAA4LAAEjfwBdTDYDAAEjswBdSyIHAAEj0wBdS5AA/SsAASQoBHMAASRuDwABJEcAXUzaVRwMAA4LAAEkjwBdTDYDAAEkwwBdSyIHAAEk4wBdS5AC4jga2uXnAAElLwABJZMAASYQAApQ9sMsAAAABA8AASWvAAEmEAAAAAQAAAcAASXIAAACRbGADwABK2AFqwABJfWADwABK2D9dA4EiAWADtpsABra6ecAASYjAAEmNwABJsQAClD+wywAAAAEDwABJmMAASbEAAAABAAABwABJnwAAAJFsYAPAAErYAWrAAEmqYAPAAErYP1wABra7ecAASbbAAEnKwABLLgABlUiwywAAAAEDwABJ1MAASy4AAAACAgLAAEncAAAAlUlgA8AATokAwABJ6gAAAJVKYAPAAE6JAABdA4EiAWADwABK2AE+AUrAAEn3ARzAAEpUHsAASgS17gIAAmrAAEovYAPAAEyihDMxwABKPlsDK4DAAEpFwBdUk4HAAEpMwBdUowCAiQEBYAPAAErYATTA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AWqDlGADwABMop/bBLfYfYOrg8AGlg8AYAPAAEyiAWqDvmADwABMolEEt9l9g9WD7QaWEABgA8AATKIBaoPrYAPAAEyiVAS32n2EAoQQBpYRAGADwABMogFqhA5gA8AATKKEOQS3232EJYQ2BpYSAGADwABMogFqhDRgA8AATKKfYQS33H2ES4RdBpYTAGADwABMogFqhFtgA8AATKKEPwS33X2EcoR/BpYUAGADwABMogFqhH1gA8AATKKEnAS33n2ElISlBpYVAGADwABMogFqhKNgA8AATKKe6QS3332EuoTMBpYWAGADwABMogFqhMpgA8AATKKERQS34H2E4YT0BpYXAGADwABMogFqhPJgA8AATKKgPQS34X2FCYUcBpYYAGADwABMogFqhRpgA8AATKKEnwS34n2FMYVEBpYZAGADwABMogFqhUJgA8AATKKfEQS3432FWYVsBpYaAGADwABMogFqhWpgA8AATKKftAS35H2FgYWOBpYbAGADwABMogFqhYxgA8AATKKgbgS35X2Fo4W1BpYcAGADwABMogFqhbNgA8AATKKEMwS35n2FyoXXBpYdAGADwABMogFqhdVgA8AATKKENgS3532F7IX5BpYeAGADwABMogFqhfdgA8AATKKEPAS36H2GDoYfBpYfAGADwABMogFqhh1gA8AATKKEQgS36X2GNIZNBpYgAGADwABMogFqhktgA8AATKJvBLfqfYZihnoGliEAYAPAAEyiAWqGeGADwABMop7IBLfrfYaPhqMGliIAYAPAAEyiAWqGoWADwABMooRRBLfsfYa4hswGliMAYAPAAEyiAWqGymADwABMoqAcBLftfYbhhvUGliQAYAPAAEyiAWqG82ADwABMop5JBLfufYcKhyIGliUAYAPAAEyiAWqHIGADwABMooZvBLfvfYc3h04GliYAYAPAAEyiAWqHTGADwABMop+UBLfwfYdjh3kGlicAYAPAAEyiAWqHd2ADwABMoqBLBLfxfYeOh6QGligAYAPAAEyiAWqHomADwABMop5xBLfyfYe5h80GlikAYAPAAEyiAWqHy2ADwABMop8fBLfzfYfih/cGlioAYAPAAEyiAWqH9WADwABMop/CAQW3+wAAAAAEAAADAAAAAAAAAAAAYAO3wQE/AQkBAMAATgUAAAAABAa39meJLok6itsA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AQOG449JAAABAAAEQ2ADwABN7wFbFAEBhuYAAACDQmEDAF8DAAAAE4cqAAAAlARhAwFgA8AATolgA7TSAWoAYAHAAE2sAodWAAAAlAhhAwBgA7TSAWoAYAHAAE2sAoeHAAAAlAlhAwFgA8AATolcAWoAYAHAAE2sAoe3AAAAlA1hAwBgA7TSAWoAYAHAAE2sAof6AAAAlHxhAwFgA8AATolgA7VuAWoAYAHAAE2sAohBAAAAlSlhAwFgA8AAToldA4EiAWADtn4BagBgAcAATawCiGcAAACVJ2EDAWADwABOiWADtn4BagBgAcAATawCiLgAAACVTWEDAmADwABOiWADwABOiV0DgSIBYAPAAErYAWoAYAHAAE2sAojqAAAAlVNhAwJgA8AATolgA8AATolgA8AAStgBagBgAcAATawCiTYAAACVdGEDAmADwABOiWADwABK2F0DgSIBYAO2agFqAGABwABNrAKJdAAAAJVwYQMCYAPAAE6JYAPAAErYYAO2agFqAGABwABNrAKJ2wAAAJVHYQMDYAPAAE6JYAPAAEyiYAPAAErYXQOB1gFgA7bZAWoAYAHAAE2sAon6AAAAlVVhAwBgA8AAStgBagBgAcAATawCijkAAACWMGEDAWADwABOiWADt/wBagBgAcAATawCisUAAACWcl4DAAIEAltgA8AATKICkm9bAIEeYAPAAEt0AABdA4EiAWADu5MBagBgAcAATawCi0EAAACWc14DAAIDAltgA8AATKIBkm9bAABdA4EiAV0Du3MBYAO7kwFqAGABwABNrAKL3wAAAJZ0XgMAAgUCW2ADwABMogOSgmADwABMogCShGADwABK2ACSg2ADwABK2AAAXQOBIgFgA7sUAWoAYAHAAE2sAowsAAAAg0NgA4UoAWoAYAHAAE2sAoxOAAAAgJ1gA8AATJgBagBgAcAATawCXwMAAAE+Ak6Maox0AACUA2ADuHgBH4x6uL4RABGBjKbAF+xggoy9wBfsfoOM2MAX7JaEjPPAF+yxhY0gwBfsyYaNRcAX7OeHjVHAF+0KFI18wBftKAgAFI2QwBftUwkAFI2owBfteQoAFI26wBftogsAFI3twBftxgwAFI38wBft9Q0AFI4lwBfuDw4AFI5IwBfuLQ8AFI5dwBfuYxAAFI6OwBfulREAAEqOqwEcjsBqjrJeAwEA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AF0DgdYBXQPAAE1GAWADwABMogAGuVOAhcAARdjAAEXuwABF9AECke8AAAABA8AARfTAAEX0AAAAAAAAAF0DgdYBXQPAAE1GAWADwABMogAGuVSAhcAARkvAAEZWwABGWwECke0AAAABA8AARlvAAEZbAAAAAAAAAGADt4YABrlVgIXAAEaYwABGoMAARqMBApH0AAAAAQPAAEajwABGowAAAAAAAABgA8AATKIABrlbgIXAAEjzwABI+MAASSwAAovwAAAAAQPAAEj8wABJLAAAAAEAAcAASQwAAACRmmADuWYBasAASSNgA7lmot8AYAPAAErYAAAAGC4HABguMgAYL2cAGDCXABgxwgAYMmAAGDKcABgy2AAYMwYAGDM2ABgzfwAAAAoCuV6AhcAASbvAAEnBwABM6gOW7gAAAWADwABN7wAABAS5YICFwABKXMAASmQJkd8AYAPAAEyiAAS5YYCFwABLX8AAS2UJke4AWwAEuWKAhcAATF/AAExlCZHvAFsABLljgIXAAEygwABMowmR9ABgA8AATKIAAQW5ZYCFwABMqMAATKjAAEzoAAAAA8AATLXAAEzoAAAABAQEwABMuwAABJH0YAPAAEyiAMAATMUAAASR32ADwABMogDAAEzUAAAEke5bAMAATOEAAASR71sAAGADuV4BPwUIAbljgADAGDRKCAG5YIEAwBg0WggBuWGCAMAYNGoIAbligwDAGDR1CQHAAEyowABOBQAAAAAAAAAYNL8AAAAAArlmgIXAAE4YwABOHsAAY9WDlu8AAAFgA8AATe8AADwEuWiAhcAATkvAAE52BpbwAGADuWYBasAATlpgA7lmrNcEuWmAhcAATpXAAE7ABpbxAGADuWYBasAATqRgA7lmrOYEuWqAhcAATt/AAE8MBpbyAGADuWYBasAATu9gA7lmrbQEuWuAhcAATyvAAE9WBpb0AGADuWYBasAATzpgA7lmrcMEuWyAhcAAT3XAAE+iBpb2AGADuWYBasAAT4VgA7lmrdIEuW2AhcAAT8HAAE/uBpb4AGADuWYBasAAT9FgA7lmreIEuW6AhcAAUA3AAFA4Bpb6AGADuWYBasAAUBxgA7lmrfEEuW+AhcAAUFfAAFCCBpb8AGADuWYBasAAUGZgA7lmrgEEuXCAhcAAUKHAAFDOBpb+AGADuWYBasAAULFgA7lmrhAEuXGAhcAAUO3AAFEbBpcAAGADuWYBasAAUP1gA7lmrPUEuXKAhcAAUTrAAFFoBpcBAGADuWYBasAAUUpgA7lmriAEuXOAhcAAUYfAAFG1BpcDAGADuWYBasAAUZdgA7lmrQUEuXSAhcAAUdTAAFICBpcEAGADuWYBasAAUeRgA7lmrjAEuXWAhcAAUiHAAFJPBpcGAGADuWYBasAAUjFgA7lmrkAEuXaAhcAAUm7AAFKcBpcIAGADuWYBasAAUn5gA7lmot8EuXeAhcAAUrvAAFLpBpcJAGADuWYBasAAUstgA7lmrlAEuXiAhcAAUwjAAFM2BpcLAGADuWYBasAAUxhgA7lmrmAEuXmAhcAAU1XAAFODBpcNAGADuWYBasAAU2VgA7lmrnAEuXqAhcAAU6LAAFPQBpcPAGADuWYBasAAU7JgA7lmroAEuXuAhcAAU+/AAFQdBpcRAGADuWYBasAAU/9gA7lmrpAEuXyAhcAAVDzAAFRqBpcTAGADuWYBasAAVExgA7lmrqAEuX2AhcAAVInAAFS1BpcVAGADuWYBasAAVJhgA7lmrrAEuX6AhcAAVNTAAFUCBpcXAGADuWYBasAAVORgA7lmrsAEuX+AhcAAVSHAAFVPBpcZAGADuWYBasAAVTFgA7lmrtAEuYCAhcAAVW7AAFWgBpcbAGADuWYBasAAVYBgA7lmruAEuYGAhcAAVb/AAFXtBpcdAGADuWYBasAAVc9gA7lmrvAEuYKAhcAAVgzAAFY8BpcfAGADuWYBasAAVh1gA7lmrRUEuYOAhcAAVlvAAFaJBpcgAGADuWYBasAAVmtgA7lmrwAEuYSAhcAAVqjAAFbUBpciAGADuWYBasAAVrdgA7lmrxAEuYWAhcAAVxjAAFcnBpbRAWrAAFbaYAPAAEqLryBgA7lmAWrAAFchYAO5ZqzXBLmGgIXAAFdqwABXeQaW0gFqwABXLGADwABKi68wYAO5ZgFqwABXc2ADuWas5gS5h4CFwABXvcAAV84GlvMBasAAV35gA8AASouvQGADuWYBasAAV8dgA7lmrbQEuYiAhcAAWBHAAFggBpb1AWrAAFfTYAPAAEqLr1BgA7lmAWrAAFgaYAO5Zq3DBLmJgIXAAFhkwABYdQaW9wFqwABYJWADwABKi69gYAO5ZgFqwABYbmADuWat0gS5ioCFwABYucAAWMoGlvkBasAAWHpgA8AASouvcGADuWYBasAAWMNgA7lmreIEuYuAhcAAWQ3AAFkcBpb7AWrAAFjPYAPAAEqLr4BgA7lmAWrAAFkWYAO5Zq3xBLmMgIXAAFlfwABZbgaW/QFqwABZIWADwABKi6+QYAO5ZgFqwABZaGADuWauAQS5jYCFwABZssAAWcMGlv8BasAAWXNgA8AASouvoGADuWYBasAAWbxgA7lmrhAEuY6AhcAAWgfAAFoYBpbTAWrAAFnIYAPAAEqLr7BgA7lmAWrAAFoRYAO5Zqz1BLmPgIXAAFpcwABabQaXAgFqwABaHWADwABKi6/AYAO5ZgFqwABaZmADuWauIAS5kICFwABascAAWsIGltQBasAAWnJgA8AASouv0GADuWYBasAAWrtgA7lmrQUEuZGAhcAAWwbAAFsXBpcFAWrAAFrHYAPAAEqLr+BgA7lmAWrAAFsQYAO5Zq4wBLmSgIXAAFtbwABbbAaXBwFqwABbHGADwABKi6/wYAO5ZgFqwABbZWADuWauQAS5k4CFwABbsMAAW8EGkfIBasAAW3FgA8AASouwAGADuWYBasAAW7pgA7lmot8EuZSAhcAAXAXAAFwWBpcKAWrAAFvGYAPAAEqLsBBgA7lmAWrAAFwPYAO5Zq5QBLmVgIXAAFxawABcawaXDAFqwABcG2ADwABKi7AgYAO5ZgFqwABcZGADuWauYAS5loCFwABcr8AAXMAGlw4BasAAXHBgA8AASouwMGADuWYBasAAXLlgA7lmrnAEuZeAhcAAXQTAAF0VBpcQAWrAAFzFYAPAAEqLsEBgA7lmAWrAAF0OYAO5Zq6ABLmYgIXAAF1ZwABdagaXEgFqwABdGmADwABKi7BQYAO5ZgFqwABdY2ADuWaukAS5mYCFwABdrsAAXb8GlxQBasAAXW9gA8AASouwYGADuWYBasAAXbhgA7lmrqAEuZqAhcAAXgLAAF4RBpcWAWrAAF3EYAPAAEqLsHBgA7lmAWrAAF4LYAO5Zq6wBLmbgIXAAF5VwABeZgaXGAFqwABeFmADwABKi7CAYAO5ZgFqwABeX2ADuWauwAS5nICFwABeqsAAXrsGlxoBasAAXmtgA8AASouwkGADuWYBasAAXrRgA7lmrtAEuZ2AhcAAXwHAAF8WBpccAWrAAF7AYAPAAEqLsKBg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AAABA75avtcAAAADAAADvmgAAACTK2ADwABK2AFqvnlgA8AAStiD+76KAAAAkyxgA8AAStgBar6kYAPAAErYP762AAAAky1gA8AAStgBar7QYAPAAErYP1wABrn/gIfAAEA9wABAUcAAQGABApMuAAAAAQPAAEBgwABAYAAAAAAAAABgA7oDAAa6AICHwABBdsAAQYHAAEGRAQKTMAAAAAEDwABBkcAAQZEAAAAAAAAAYAPAAE6JAAAAGFcLABhYYAAYWgQAGFtWABhcqAAYXRIAGF1AABhdcAAAAAcCugOAh8AAQgjAAEIxwABDtgeXVwNqwABCMWADk/omasAAQjFgA8AASp8DasAAQjFgA8AASp8DAAFgA8AATe8AAAAACAa6BmyCUYJZgowEAYCKsMsDaoJZYAOT+iZqgllgA8AASp8DaoJZYAPAAEqfAwAAAQOCaoKMAAAAAAAAAGADugMBSoJwAR+CdLPFAAAAAAa6CICHwABCusAAQsjAAELLAQKTdAAAAAEDwABCy8AAQssAAAAAAAAAYAOsFwAGugmAh8AAQwHAAEMMwABDDwECk3cAAAABA8AAQw/AAEMPAAAAAAAAAGADwABOiQAGugqAh8AAQzzAAENKwABDTgECk3oAAAABA8AAQ07AAENOAAAAAAAAAGADrBcABroLgIfAAENTwABDXsAAQ2UBApN7AAAAAQPAAENlwABDZQAAAAAAAABgA8AATokABroMgIfAAENpwABDdMAAQ3oBApN9AAAAAQPAAEN6wABDegAAAAAAAABgA8AATokABroNgIfAAEN+wABDi8AAQ5gBApN/AAAAAQPAAEOYwABDmAAAAAAAAABgA8AASuoABroOgIfAAEOcwABDqcAAQ7QBApOCAAAAAQPAAEO0wABDtAAAAAAAAABgA8AASuoAAAAYXdkAGF4nABheVQAYXoUAGF6zABhe4wAYXxMAGF9DABhfcwAAAAgCug+Ah8AAQ7nAAEO/wABFuAOXWAAAAWADwABN7wAABwS6EYCHwABD1sAAQ+YYl1kAYAPAAErYASoEuhKAh8AARCDAAEQwGJdaAGADwABK2AEpBLoTgIfAAERuwABEfxiXWwBgA8AAStgBKQS6FICHwABE/8AARSEYl1wAYAPAAErYASoEuhWAh8AARSrAAEVMGJddAGADwABK2AEqBLoWgIfAAEVVwABFdhiXXgBgA8AAStgBKgS6F4CHwABFf8AARaIYl18AYAPAAErYASoBBboZgIfAAEWnwABFp8AARbYAAAADwABFtMAARbYAAAAAAAAAYAO6DwE/AQkBwABFp8AATgUAAAAAAAAAGGCmAAAAAAK6GoCHwABFu8AARcHAAJjIA5dgAAABXQOB1gFgA7tiAAFgA7n3JQS6HICHwABGOMAARk0Gl2EAYAPAAEyiAWrAAEZKYAPAAEyii14Euh2Ah8AARmLAAEZ3BpdiAGADwABMogFqwABGdGADwABMootiBLoegIfAAEaMwABGngaXYwBgA8AATKIBasAARptgA8AATKKLZgS6H4CHwABHEMAARyMGl2QAYAPAAEyiAWrAAEciYAPAAEyiGgS6IICHwABHOMAAR0wGl2UAYAPAAEyiAWrAAEdLYAPAAEyiFAS6IYCHwABHYcAAR3QGl2YAYAPAAEyiAWrAAEdzYAPAAEyiFgS6IoCHwABHicAAR50Gl2cAYAPAAEyiAWrAAEecYAPAAEyiTAS6I4CHwABHssAAR8EGl2gAYAPAAEyiAWrAAEfAYAPAAEyiGAS6JYCHwABIX8AASGYYkvWwywBgA7t9AAS6JoCHwABIjMAASMgJl2mwywBdA4FCAWADuhoBHsAASKuBRAABYAO6GgAABLongIfAAEjtwABI+BiAwLDLAF0Dgl4BYAO7YgErBLoogIfAAEkTwABJGhiB67DLAF0DgdYBYAO7YgErBLopgIfAAElBwABJVBiXarDLAF0Dgg8BYAO7YgAEuiqAh8AASWLAAElvGJdrsMsAXQPAAE1GAWADwABMogAEuiuAh8AASXfAAEmNGJdssMsAYAPAAEyiAZMEujyAh8AASafAAEmuCYjJAGADuucABLo9gIfAAEm9wABJxgmTOgBgA8AAStgABLo+gIfAAEnawABJ4RiTOQBgA7qwAAS6P4CHwABJ8MAASggJkywAYAPAAErYAAS6QICHwABKF8AASi8Jky0AYAPAAErYAAS6QYCHwABKQsAASlIJl1AAYAPAAEyYAAS6LICHwABKW8AASnQYl22wywBgA8AATKIBasAASmVgA8AATKKLXgS6LYCHwABKfcAASpcYkwCwywBgA8AAStgBKQS6LoCHwABKoMAASrkYkv+wywBgA8AAStgBKQS6L4CHwABKwcAAStAYl26wywBgA8AATKIBkwS6MICHwABK2cAASvIYl2+wywBgA8AAStgBKgS6MYCHwABK+8AASxQYl3CwywBgA8AAStgBKgS6MoCHwABLSsAAS2QYl3GwywBgA8AAStgBKgS6M4CHwABLmsAAS60Yl3KwywBgA8AAStgBKgS6NICHwABL6MAAS/wYl3OwywBgA8AAStgBKgS6NYCHwABMbsAATKAYlKSwywBdA4FCAWADufcBHsAATISBRAABYAO59wAABLo2gIfAAEyywABM1RiXdLDLAGADug8BH8AATMa6GQAAAAAEujeAh8AATN7AAEz0GJd1sMsAYAPAAErYASkEujiAh8AATP3AAE0TGJd2sMsAYAPAAErYASoEujmAh8AATRzAAE0xGJd3sMsAYAPAAErYASoEujqAh8AATUTAAE1pGJd4sMsAYAO6iwEewABNWLqOAAAAAAS6O4CHwABNdMAATYUYl3mwywBgA8AATokBKwEFunWAh8AAUhnAAFIZwABbcAAAAAPAAFIpwABbcAAAAAsLC8AAUjYAAASIyWADuucAwABSSQAAAJd6YAPAAEyiAMAAUmMAAASTOmADwABK2ADAAFJ5AAAEkzlgA7qwAMAAUo0AAASS9WADu30AwABSoQAABJdqXQOCDwFgA7tiAMAAUsEAAASXa10DwABNRgFgA8AATKIAwABS2wAABJMsYAPAAErYAMAAUwAAAASTLWADwABK2ADAAFMlAAAEl1BgA8AATJgAwABTSgAAAJdJXQPAAE1GAWADwABOiQAAYAO6GgE+Cj0jHMAAU2wWwABTZC6TObo+gIwBAAErAMAATfwXwABTZC6TORrAAFOAurS6PisBYAO6sD0XwABTlC6AwLDLHsAAU6aCagUBYAO7YgAFgPspehbAAFPuLpL6sMu6UoCzFsAAVBsukvuwy7pRexbAAFRCLpL7sMu6UXwWwABUaS6S+rDLulK6Jz0XwABUii6B67DLFsAAVKAWwABUlC6AwLDLuidAgmC6KD0cwABVQxbAAFU1Lpd4sMu6OpNFAAAAALqWPRzAAFVmFsAAVU8ul3iwy7o6k0oBAAEWwABViC6Xe7DLulAAuplJwABVriEcwABVwxbAAFWyLpdQukGAjAEAASsAwABMnT4BPRzAAFXiFsAAVdQul3iwy7o6k0gBAAEWwABWAS6XfLDLukgAupg/PRfAAFYuFsAAViYukvWwy7olkwspu389F8AAVlQWwABWTC6S9bDLuiWTAiq7gEnAAFZ0HMAAVowWwABWeC6XarDLuimAjAEAASsAwABN/D4BPRfAAFb6LpdqsMscwABXGBbAAFcQLpL1sMu6JYGpAwABFsAAVx8ul32wy7pJAoCdFsAAV0Qul36wy7pNgJ4WwABXWi6Xf7DLukyB5ropPgRJwABXfBbAAFeUFsAAV4Aul2qwy7opgIGCGT4CPRzAAFewFsAAV6gukvWwy7olgI0AAAAAu4c9MMAAV8EfwABXy8AAS9EBAAEnl4AAP07AAFizwABYtQAAgPlbARbAAFi3LpL1sMu6JUnAAFjrJsAAWPkFFsAAWPkWwABY8RTAAFjvwBhoQgsAkvWwywCSSQBgA8AAStg+AT0cwABZGC6XfbDLAQABasAAWThgA7tipMsAukk/PTXAAFlTAAABAF0Dgg8BYAO7YgEWwABZUy6XarDLuik1wABZcQAAAQBcARzAAFlxFMAAWVPAGGirDACAnAEAARbAAFl4Lpd9sMu6SQCCEjXAAFmUAAABAFwBHMAAWZQUwABZU8AYaKsMAICdAQABFsAAWZwul36wy7pNAIITNcAAWbQAAAEAXAEcwABZtBTAAFlTwBhoqwwAgJ4BAAEWwABZuy6Xf7DLukwAghQUwABZU8AYaKsMAEs+A07AAFnkwABZ9QAAk2pgA6wXAR7AAFoRusEBAAEUwABaLMAYZgMKAAA9HMAAWlUWwABaRy6XeLDLujqSfQYABhbAAFpwFsAAWmguiMm6PI+suvMWwABagC6TObo+FsAAWpMukzq6PSIWwABaqC6TLLo/ARbAAFrELpMtukAWwABa6C6TLbpAFMAAWwzAGGllCwAAupA9HMAAWyUul4GwywAAAAC6TwEBwABbP1sBwABbRgAAAWlbAAHAAFtJAAABgPlgA8AATl0APgE9HMAAW1Qul36wywIAAhTAAFthwBhqEQsAFMAAW2TAGGocDAAAuk0KCAG6PIAAwBhlXwgBuj2CAMAYZX0IAbo+gwDAGGWNCAG6JYQAwBhlmwgBuimFAMAYZakIAboqhgDAGGW8CAG6P4cAwBhl0wgBukAUAMAYZeMIAAgBukEUAMAYZfMJAAkBwABSGYIMAAAAAC0GukSAh8AAR/vAAEgHwABIUAABl4KwywAAAAEDwABIGcAASFAAAAABAQHAAEgeAAAAl4NgA8AATKIAAGADwABK2AFKwABIMwEcwABIPoDAAEgzwBhq64FeAQABasAASEFgA8AATKIWAMAATdMGulyAh8AATYrAAE2qwABSFAABkn0AAAABA8AATbHAAFIUAAAACwICwABN3AAAAI+sWwDAAE3mAAAAl3pgA8AATKIACcAATgEAAACTOmADwABK2AFqAGABwABNrALAAE4iAAAAkzlgA7qwAWoAYAHAAE2sAsAATjsAAACRnmADu30BagBgAcAATawCwABObAAAAC9dA4IPAWADu2IBagBgAcAATawCwABOigAAAJdVXQPAAE1GAWADwABMogFqAGABwABNrALAAE6jAAAAkyxgA8AAStgBasAATr1gA8AAStg/wABOzwAAAJMtYAPAAErYAWrAAE7pYAPAAErYP8AATvsAAACXUGEDAWADugNgA8AAStgBagBgAcAATawCwABPPQAAAJdJXQPAAE1GAWADwABOiQFqAGABwABNrAJdA4EiAWADuhoBPgU9HsAAT1i6RQYABoDAAE9mwBhrVYHAAE9swBhrYILAAE97wBhrcYfAAE+GwBhr8xTAAE+owBhsDwgAFMAAT8LAGGwrCQAAScAAT9klwABP4gCAwABP3cAYa1VgA7rnPYjAAE/2wBhrVRbAAFACgMAAT/3AGGtVj6wAP07AAFAcwABQJAAAiMlgA7rnARbAAFAthMAAUCbAGGuhiMm7j0nAAFA6IRzAAFBDgMAAUD7AGGtVgIwBAAErAMAATfw+AT0VwABQVMAYbPILHsAAUG66/gIAAhTAAFCAwBhs8gsAJsAAUIkFgMAAUInAGGtVYAPAAE6JAD9KwABQmgEWwABSChbAAFHuH8AAUKW6dQsACxTAAFDDwBhs8gsAgcAAUNjAGGtggsAAUPPAGGtxg8AAUQrAGGuKhMAAUR/AGGuhhcAAUTPAGGu4hsAAUU3AGGvTh8AAUWfAGGvzFMAAUY3AGGwPCAAUwABRs8AYbCsJABTAAFHRwBhsSwoAAJdpsMu6Jm+BRwa6XYCHwABbdcAAW5jAAFyEAACBqQAAAAEDwABbnsAAXIQAAAAEAQHAAFukAAAAgJxhAwFgA7tiXAADwABb0QAAAICdYAPAAEyYAWoAYAHA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AGhaLpdysMu6Mz4BPTDAAGhvH8AAaHm7zQEAASeXjAA/ScAAaLQhHMAAaMAWwABouC6XbbDLuiyAjAEAAWrAAGjDYAPAAEyii2IAwABNxj4BSsAAaNwBKz9OwABo98AAaP4AAIDmYAOsFwEcwABpJxzAAGkVFsAAaQ4WwABpAC6XeLDLujqTNbqegtEBAAFqwABpFmADwABMohoAwABNVZFWAQABgMAAaSzAGHgzALp/PRzAAGk5LpeNsMsAAAAAulNKwABpUAGBwABpV8AYeTIGumKAh8AAabDAAGm0wABs7wAAgcMAAAABA8AAabnAAGzvAAAAAwEDwABpxAAAADtdA8AATUYBYAPAAEyiAMAAac8AAACEF2ADwABMogFqAGABwABNrALAAGnbAAAAhlJgA8AATKIBagBgAcAATawCAGADwABMogE+CknAAGnpIiEcwABp84LAAGntwBh6AICMAQABKwDAAE3GACIhJcAAagUAgsAAaf/AGHoAYAPAAEyiARzAAGoWgsAAahDAGHoAgLsBAAGTAMAATdA+AT0wwABqJB/AAGouwABL0QEAASTAAGqFAyeXjoLAAGp+wBh6ACeEKAA/ScAAapIiIRzAAGqdgcAAapbAGHnngIwBAAErAMAATcYAIiElwABqsACBwABqqcAYeedgA8AATKIBHMAAasKBwABqu8AYeeeAuwEAAZMAwABN0D4BPTDAAGrQH8AAatrAAEvRAQABJMAAazQDJ5ePgcAAayzAGHnnJ4QoAD9JwABrQRbAAGtFLpdzsMu6ND4CPRzAAGtnFsAAa1sugMCwy7ongIsBAAEfwABrdLvNAQABJ5eQAACCc0rAAGuqAZM/ScAAa74hHMAAa8oWwABrwi6XbbDLuiyAjAEAAWrAAGvNYAPAAEyii2IAwABNxkrAAGveAZM/PSMcwABr84HAAGvswBh554CMAQABKwDAAE3GicAAa+zAGHnnkysBYAPAAEyiPSMcwABsBILAAGv+wBh6AICMAQABKwDAAE3GisAAa/7AGHoAHMAAbBQWwABsDYDAAGwIwBh50YHIwABNdoEGAQABgcAAbBbAGHnnAMAATckrAWADwABMok7AAGwnwABsLwAAl5FgA8AATKIBHMAAbGEcwABsThbAAGxHFsAAbDkul3iwy7o6kzW6noLRAQABasAAbE9gA8AA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YAPAAEyiGgAAAMAATca6Ek7AAJQ5wACUQAAAgcFgA7p2ARzAAJRGgsAAlELAGJbygtEBAAFqwACUR2ADwABMohQAwABNVU7AAJRkwACUbgAAl6VgA8AATKIBHMAAlHWEwACUcMAYmZpuAQABasAAlHZgA8AATKIUAABJwACUjyEcwACUnRTAAJSTwBicRwgAgIwBAAEWwACUp4fAAJSgwBicEW26eQDAAE3GPgM9F8AAlL+GwACUuMAYmq+XWSm6EUnAAJTYHMAAlOgWwACU44fAAJTcwBicEZehuoeAjAEAAZMAwABNxj4BPRfAAJUBhsAAlPrAGJqvl10puhU/PRfAAJU9h8AAlTbAGJwRbRTAAJVFwBicRwgAunk/PY/AAJVewBicERzAAJVrgsAAlWfAGJbygtEBAAFqwACVbGADwABMohYAwABNVT0VwACVhMAYnEcIHMAAlZWEwACVkMAYmZpuAQABasAAlZZgA8AATKIWAABJwACVriEcwACVvBTAAJWywBicRwgAgIwBAAEWwACVxofAAJW/wBicEW26eQDAAE3GPgM9F8AAld6GwACV18AYmq+XWSm6EUnAAJX3HMAAlgcWwACWAofAAJX7wBicEZehuoeAjAEAAZMAwABNxj4BPRfAAJYghsAAlhnAGJqvl14puhY/PRfAAJZbh8AAllTAGJwRbRTAAJZjwBicRwgAunk/PY/AAJZ8wBicERzAAJaJgsAAloXAGJbygtEBAAFqwACWimADwABMokwAwABNVU7AAJanwACWrwAAl6ZgA8AATKIBHMAAlrSFwACWscAYmh5uAQABasAAlrVgA8AATKJMAABJwACWziEcwACW2hTAAJbSwBieSAkAgIwBAAEWwACW5IfAAJbdwBicEYRUunoAwABNxj4DPRfAAJb6hsAAlvPAGJqvl1kpuhFJwACXExzAAJclFsAAlx6HwACXF8AYnBGByLqFgIwBAAGTAMAATcY+AT0XwACXPobAAJc3wBiar5dfKboXPz0XwACXe4fAAJd0wBicEYRUFMAAl4HAGJ5ICQC6ej89j8AAl5jAGJwRHMAAl6WCwACXocAYlvKC0QEAAWrAAJemYAPAAEyiGgDAAE1VPRXAAJe+wBieSAkcwACXy4XAAJfIwBiaHm4BAAFqwACXzGADwABMohoAAEnAAJfkIRzAAJfw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wBisEga6gYCHwACh68AAoe/AAKQSAACXngAAAAEDwACh/sAApBIAAAABAQHAAKIJAAAAl7BhAwFgA8AATKJdA8AATUYBYAPAAEyiAABgA8AATKIBPgROwACiK8AAojMAAJeRYAPAAEyiAZNOwACiQMAAokgAAJevYAPAAEyiARbAAKJKLperuohBQ8AAopEcwACioILAAKKYwBiuAIKMAQABkwDAAE3SPgdOwACjAMAAowoAAJeuXQPAAE1GAWADwABMogEcwACjE4DAAKMMwBitwG4BAAGCwACjFMAYrgAAAEnAAKMkIhzAAKMyg8AAoyjAGK4/gIwBAAErAMAATXABHMAAo04WwACjR4PAAKM9wBiuP4HIwABNdoCMAQABkwDAAE3GQsAAo1QAP07AAKNlwACjaQAAjh9gA8AATKIBFsAAo3WDwACja8AYrj+ByMAATXY9HMAAo4gWwACjgy47uniEWAMAAxbAAKORLoRUunocwACjmhbAAKOWLoRUunqBDQEAAYTAAKOcwBiuwgDAAE3Ig8AAo6HAGK4/AMAATWs9HMAAo7Mul6kBAAGEwACjvsAYrsIAun49icAAo8rAGK3rHMAAo9KBwACjysAYreuBDQEAAYTAAKPVwBiuwgDAAE3IPYrAAKPgwBiuABbAAKPqLperuohKwACkAAGBwACkB8AYresGuoKAh8AApBfAAKQcwACloQAAl58AAAABA8AApCjAAKWhAAAAAQEBwACkMwAAAJGeYAO7fQAAYAPAAErYAT4BQ8AApHgpPgVOwACkkcAApJkAAJevYAPAAEyiARbAAKSbLpequoZJwACkrxzAAKS7gcAApLPAGK/mgIwBAAGTAMAATcZKwACkwQEqP07AAKTZwACk3wAAhlJgA8AATKIBHMAApOiAwACk4cAYr8WBwwMAAxbAAKTuLju6eBbAAKT0Lm26eYHAAKT7wBiv5gC7hj0cwAClCy6XqAEAAYLAAKUYwBiwKgC6fUnAAKUmHMAApTCCwAClKsAYsCqAuwEAAYHAAKUywBiv5gDAAE3QPgFKwAClhAEpPwAAGKIpABij1wAYpYsAGKXjABimoQAYp0kAGKgkABipRgAYq2oAGK2YABivnQAYsLYAAAALArqLgIfAAKWmwACltcAAqWkHl7EBasAApbVgA5P6JgABYAPAAE3vAAAAAA4Guo5sgbaBvoHsBAGAirDLAWqBvmADk/omAAABA4HNgewAAAAAAAAAYAO6iwFKgdMBH4HXs5kAAAAABrqQgIfAAKXuwACl88AApqwAApJ9AAAAAQPAAKX6wACmrAAAAAYGBsAApgkAAACTOGADwABOiQDAAKYpAAAAkzlgA7qwAMAApj0AAACTOmADwABK2ADAAKZTAAAAkyxgA8AAStgAwACmeAAAAJMtYAPAAErYAMAApqIAAACTO2ADrBcAAFwABrqRgIfAAKawwACmtcAApr4AApHjAAAAAQPAAKa8wACmvgAAAAAAAABcAAa6koCHwACmwsAApsfAAKbSAAKTPgAAAAEDwACm0MAAptIAAAAAAAAAXAAGupOAh8AAptbAAKbdwACm7wACkzAAAAABA8AApu3AAKbvAAAAAAAAAGADwABOiQAGupSAh8AApvPAAKb4wACnBQACk0AAAAABA8AApwPAAKcFAAAAAAAAAFwABrqVgIfAAKcJwACnDsAAp3MAApMqAAAAAQPAAKcZwACncwAAAAMDA8AApx8AAACTK2ADwABK2ADAAKc1AAAAkyxgA8AAStgAwACnWgAAAJMtYAPAAErYAABcAAa6loCHwACnd8AAp3zAAKeCAAKTRQAAAAEDwACngMAAp4IAAAAAAAAAXAAGup2Ah8AAp4bAAKeawACnqQECky4AAAABA8AAp6nAAKepAAAAAAAAAGADugMABrqXgIfAAKetwACnscAAp88AApNBAAAAAQPAAKe+wACnzwAAAAEBAcAAp8MAAACTQmADwABMogAAYAPAAEyiAAa6mICHwACn08AAp9jAAKgJAAKTSAAAAAEDwACn9sAAqAkAAAABAQHAAKgAAAAAG2ADwABMmAAAXAAGupmAh8AAqA3AAKgSwACoVgACk0oAAAABA8AAqDPAAKhWAAAAAQEBwACoPQAAAJNMYAPAAEyYAABcAAa6m4CHwACpM8AAqTfAAKlBAAKTTbDLAAAAAQPAAKk/wACpQQAAAAAAAABgA8AATKIABrqegIfAAKlGwACpYMAAqWcBApM1AAAAAQPAAKlnwACpZwAAAAAAAABdA8AATUYBYAO6dgAAABixFwAYsVEAGLHYABiyAwAYsi4AGLJeABiyiQAYsuQAGLMPABizPQAYs30AGLO3ABiz8gAYtCQAGLRZAAAADgK6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A4EiAWADuwsAAAAYz5EAGNBSABjQeAAY0JwAGNDFAAAABAK7FICJpVSlY7BGB5ffAWqlY2ADk/omAAFgA8AATe8AAV0DgdYBYAO7kwABBbseAAAAAAQAAAMAAAAAAAAAAABgA7sUAT8BCQEAwABOBQAAAAAFBrsWgIms0qzuroAAAYG4AAAAAQOs8q6AAAAABQICrPMAAACIyVsArQAAAACLkmADwABMogADrREAAACSgmADwABMogFqrRpgA8AATKIarSIAAACSg2ADwABK2AFqrSpgA8AAStg/rTYAAACShGADwABK2AFqrT5gA8AAStg/XQOBIgFgA7sUAT4DTq1erWgAAZQDYAO4eAEarXa4fUmtgxytkYWth8AY0byAjAEAASsAwABN/D4BSq2iAR6ttrsYBQACgK28wBjRT4GtxcAY0VgDkoKCrd7AGNFnkoODre/AGNF/koSErf/AGNGXP0quEgEcriOFrhnAGNG8lnQFAAKArjTAGNFPga49wBjRWAOSgoKuVMAY0WeSg4OuZcAY0X+ShISudcAY0Ze4kwa7GGrAAMckwADHScAAx+0AAYKrsMsBasAAx0lgA5P6JgAAAQPAAMdOwADH7QAAAAUCAsAAx08AAACIyVsAwADHXAAAAIuSYAPAAEyiAAPAAMdtAAAAkoJgA8AATKIBasAAx3ZgA8AATKIawADHfgAAAJKDYAPAAErYAWrAAMeGYAPAAErYP8AAx5IAAACShGADwABK2AFqwADHmmADwABK2D9dA4EiAWADuxQBPgFKwADHqAEewADHvbL7BQAFgMAAx8LAGNKRgcAAx8vAGNKcgsAAx9HAGNKtg8AAx9rAGNLJhMAAx+LAGNLlAAa7G4CJrz6vRq9KAQKLkgAAAAEDr0qvSgAAAAAAAABgA8AATKIABrscgImvia+dr6QBAojJAAAAAQOvpK+kAAAAAAAAAGADuucABrsZgImwKLA9sEQAAoCNAAAAAQOwQrBEAAAAAAAAAF0DgSIBYAO7FAAAABjRMQAY0l4AGNNLABjTcQAY05UAGNO+AAAABQK7H4CJsN2w47Lsg5fgAAABYAPAAE3vAAAHBLshgImxFLE4BpKdAGADux8BarEkYAO7H6OaBLsigImxWbF6BoiBAGADux8BarFmYAO7H6OiBLsjgImxm7G8BpfhAGADux8BarGo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QaTAAEGzwABB+QEBmAYAAAABA8AAQb3AAEH5AAAAAAAAAGADwABMogFKwABBxgEewABBxrtUAQABFsAAQfNqwABB6GADuzmx14HduzsABrtbgInAAEInwABCNsAAQo4BAZgHAAAAAQPAAEJNwABCjgAAAAAAAABgA8AATKIBSsAAQlYBHsAAQla7VAEAARbAAEKIasAAQnhgA7s5seaB3bs7AAa7XICJwABCv8AAQs7AAEMWAQGYCAAAAAEDwABC2MAAQxYAAAAAAAAAYAPAAEyiAUrAAELhAR7AAELhu1QBAAEWwABDEGrAAEMDYAO7ObH1gd27OwAGu12AicAAQ0bAAENVwABDrwEBmAkAAAABA8AAQ2zAAEOvAAAAAAAAAGADwABMogFKwABDdQEewABDdbtUAQABFsAAQ6lqwABDl2ADuzmyBIHduzsABrtegInAAEPfwABD7sAARDQBAZgKAAAAAQPAAEP3wABENAAAAAAAAABgA8AATKIBSsAARAABHsAARAC7VAEAARbAAEQuasAARCJgA7s5shOB3bs7AAa7X4CJwABEZMAARHPAAES5AQGYCwAAAAEDwABEfMAARLkAAAAAAAAAYAPAAEyiAUrAAESFAR7AAESFu1QBAAEWwABEs2rAAESnYAO7ObIjgd27OwAGu1Rqg/SECITfAAGYDLDLAWqECGADk/omAAABA4QXhN8AAAABAQGEHAAAAILSYAPAAEyiAABgA8AATKIBPgNJhCcchC+AhCvAGN1mgowBAAEWhEpqhENdA8AATUYBYAO7ObIvgcjAAE12AMAATdI+AT0whFofhG7AAEvSAgACgIR0wBjdZieC0gA/PTWEiwAAAQBdA8AATUYBYAPAAEyiARqEi7tNNYSZAAABAGADwABMogGAhJnAGN1mIxyEnhyEmIGEi8AY3cyC0QEAAYKEmcAY3eYAwABNVYCMAQABKwDAAE3GHISYgYSLwBjdzIEMAgACgoSZwBjd5h6EortTAQABgIS4wBjdZgAAwABNVisBYAPAAEyiSoTCARyE1hqEybtNgtEBAAGAhNfAGN1mAMAATVUAABjZJAAY2WEAGNplABja7AAY20EAGNuWABjb6wAY3EAAGNyVABjc6gAY3T8AGN50AAAACwK7YoCJwABFFsAARRzAAEh8g5gNAAABYAPAAE3vAAAJBLtkgInAAEVLwABFawaRVgBgA7tiAWrAAEVYYAO7YqJYBLtlgInAAEWLwABFrAaBwwBgA7tiAWrAAEWZYAO7YqTDBLtmgInAAEXMwABF8gaYDgBgA7tiAWrAAEXfYAO7YqTLBLtngInAAEYSwABGNAaSugBgA7tiAWrAAEYhYAO7YqTTBLtogInAAEZ3wABGggaUYwFqwABGOmADwABKi6hBYAO7YgFqwABGfmADu2KiWAS7aYCJwABGxcAARtIGlGUBasAARodgA8AASouoWWADu2IBasAARs1gA7tipMMEu2qAicAARxrAAEcyBpgPAWrAAEbXYAPAAEqLslJgA7tiAWrAAEcoYAO7YqTLBLtrgInAAEd2wABHhQaYEQFqwABHN2ADwABKi7JiYAO7YgFqwABHf2ADu2Kk0wS7bYCJwABHlMAAR5oJgpGwywBgA8AATKIAAQW7coCJwABHn8AAR6XAAEfCAYCKsMsAA8AAR7XAAEfCAAAAAQEBwABHuwAABIKRYAPAAEyiAABgA7tiAT8CCAG7bYAAwBjgRgkBwABHpcAATgUAAAAAAQa7b4CJwABHxsAAR83AAEh6AACA7wAAAAEDwABH1cAASHoAAAAAAAAAYAPAAE6JAT4BSsAAR94BHMAASG5qwABH5V0DwABNRgFgA8AATomye4LRAQABFsAASG8ugpGwy7ttAMAATVUAABjgdwAY4N4AAAABArtzgInAAEkWwABJHMAATAwDmBcAAQAABCBgA8AATe8BWwFgA8AATe8AAAIEu3WAicAASmnAAEpvCZGeAF0DgSIBXwMAAAAEu3eAicAASonAAEqSCYIfsMsAYQMAXAABBbt8gInAAEqXwABKl8AAS1cAgIqwywADwABKp8AAS1cAAAACAAACwABKswAAAJGeXQOBIgFfAwAAAWoAYAHAAE2sAsAASssAAAB8YQMAXAFqAGABwABNrAJdA7tzAV8DAAABPwUMAEAhHMAASuyAwABK5cAY4XKAjAEAASsAwABN/MAASuXAAErzAAwAQCEcwABLDoHAAEsFwBjhjoCMAQABKwDAAE38wABLBcAASxUACAC7dYDAAEsuwBjhcggAu3eBwABLT8AY4Y4JAcAASpfAAE4FAAAAAAEGu3mAicAAS+fAAEvswABMCgAAgYwAAAABA8AAS/LAAEwKAAAAAAAAAFwBPgE9HMAAS/sugh+wywAAAAC7dwAAGOIlABjiYwAAAAECu32AicAATSLAAE0xwABgpAeYGAFqwABNMWADk/omAAFgA8AATe8AAV0DgdYBYAO7YgIEu3+AicAATeDAAE3xGJMLAGADwABK2AErBLuAgInAAE7uwABPABiTAgBgA8AAStgBKwEFu5IAAAAABAAAAwAAAAAAAAAAAGADu30BPwEJAQDAAE4FAAAAAA4Gu4JqghqCPILEAAGSfQFqgjxgA5P6JgAAAQOCQ4LEAAAABAICgkQAAACPrFsAgk4AAACLkmADwABMogACglsAAACSb1sBagBgAcAATawCgnMAAACBHmADwABLdAFqAGABwABNrAJdA4EiAWADu30BPgFKgoMBHoKVstQEAASAgp3AGOMigYKjwBjjK4KCqcAY4zqDgrjAGONMAAa7g2qCyYL7g3IAAZJuAWqC+2ADk/omAAABA4MHg3IAAAADAgKDCAAAAI+sWwCDEgAAAIuSYAPAAEyiAAGDHwAAAJJvWwFqAGABwABNrAJdA4EiAV0Du3MBYAO7fQE+AUqDNQEeg0ey1QMAA4CDVMAY472Bg1rAGOPGgoNgwBjj1QAGu4SAicAAVVrAAFVewABVaQACklIAAAABA8AAVWfAAFVpAAAAAAAAAGADwABMogAGu4WAicAAVpvAAFalwABWtAACkVYAAAABA8AAVqnAAFa0AAAAAQABwABWrwAAAI4fYAPAAEyiAWoAYAHAAE2sAgBgA6wXAAa7hoCJwABYO8AAWD/AAFhvAAKBwwAAAAEDwABYRMAAWG8AAAADAQPAAFhPAAAAgcFdA8AATUYBYAPAAEyiAMAAWFwAAACEF2ADwABMogFqAGABwABNrALAAFhoAAAAgZtgA8AATKIBagBgAcAATawCAGADwABMogAGu42AicAAWOnAAFjxwABY9QECi5IAAAABA8AAWPXAAFj1AAAAAAAAAGADwABMogAGu46AicAAWX7AAFmGwABZkAECkq8AAAABA8AAWZDAAFmQAAAAAAAAAGADwABMogAGu4+AicAAWh/AAFozwABaOgECiMkAAAABA8AAWjrAAFo6AAAAAAAAAGADuucABruQgInAAFrQwABa5MAAWvEBApKxAAAAAQPAAFrxwABa8QAAAAAAAABgA7rnAAa7h4CJwABcM8AAXEXA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AAEDwABs28AAbP4AAAACAgLAAGzpAAAAksdgA7ssAMAAbPYAAACTDGADwABK2AAAYAPAAErYAAa7nICJwABuTsAAbljAAG58AAKSywAAAAEDwABuZMAAbnwAAAABAQHAAG51AAAAksdgA7tKAABgA6wXAAa7nYCJwABvfMAAb4HAAG+lAAKSzgAAAAEDwABvjcAAb6UAAAABAQHAAG+eAAAAksdgA7tKAABcAAa7oICJwABwH8AAcCfAAHArAQKLkgAAAAEDwABwK8AAcCsAAAAAAAAAYAPAAEyiAAa7oYCJwABwtMAAcLzAAHDGAQKSrwAAAAEDwABwxsAAcMYAAAAAAAAAYAPAAEyiAAa7ooCJwABxVcAAcWnAAHFwAQKIyQAAAAEDwABxcMAAcXAAAAAAAAAAYAO65wAGu6OAicAAcgbAAHIawAByJwECkrEAAAABA8AAcifAAHInAAAAAAAAAGADuucABruegInAAHIswAByM8AAcjoAAoCNAAAAAQPAAHI4wAByOgAAAAAAAABdA4EiAVsABrukgInAAHI/wABySsAAck4BAoDSAAAAAQPAAHJOwAByTgAAAAAAAABdA4EiAVsAAAAY56sAGOjfABjp6QAY6v0AGOyaABjsxQAY7RMAGO1PABjtiAAY7bgAGO3oABjuFgAY7kQAGO50ABjupAAAAA4Cu6eAicAAcwHAAHMHwABzfAOYHQAAAWADwABN7wAAAwS7qYCJwABzHsAAcyIYOwBgA6wXAAS7qoCJwABzNsAAcz0YiMkAYAO65wAEu6uAicAAc0XAAHNJGIuSAGADwABMogABBbutgInAAHNOwABzTsAAc3oAAAADwABzVsAAc3oAAAADAwPAAHNcAAAEO2ADrBcAwABzZwAABIjJYAO65wDAAHN1AAAEi5JgA8AATKIAAGADu6cBPwQIAbupgADAGO9sCAG7qoEAwBjveQgBu6uCAMAY74cJAcAAc07AAE4FAAAAAAAAABjvzAAAAAACu66AicAAdUvAAHVawACCqweYHgFqwAB1WmADk/omAAFdA4HWAWADu2IAAAYEu7CAicAAdhbAAHYnGJMLAGADwABK2AErBLuxgInAAHctwAB3PxiTAgBgA8AAStgBKwS7soCJwAB30MAAd+EYkyQAYAPAAErYASsEu7OAicAAePrAAHkHGJMlAGAD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4YCLjVWNXI2FAAWYLrDLAWoAYAOUCLLOAAABA41ljYUAAAABAQGNagAAAJMIYAPAAEyiAABbAAa74oCLjYmNkI3JAAWYMLDLAWoAYAOUCLLaAAABA42kjckAAAABAQGNqQAAAJMIYAPAAEyiAABbAAa744CKh8KHyY3IAACYMgAAAAEDh9WNyAAAAAIAAAKH5wAAAJHqYAOP4AFqh/FgA7xPrayIBgAAAJgzYAPAAErYAWqIFmADwABK2D9gA8AATokBPgROiFqIXwABXV0DwABNRgFgA8AATKIBMYhmYAPAAEyiAE6ItIjAAACYNGADwABK2AEiIhqIy7jKAByI8h6I4bESAQABGojrsRgAgIwBAAFqiP9gA7w1suYAwABN/AAhFokVLpg2u+dJiSOBiSfAGPuQPgNOiUMAAACGYGADwABMogBBRIlPPgM9jIlcwBj8JByJYy6UlQAAAAC75EmJexyJhISJf8AY/CSAuwEAAZMAwABN0D4BQomVAD89HImzgomuwBj7soCCAQABhIm3wBj8JADAAE1XIiEcidKEic3AGPwkgIwBAAFqidVgA8AATKKESwDAAE3GACEiHInihIndwBj8JICMAQABaonlYAPAAEyihE4AwABNxgCDievAGPvSSYoAFooJgooEwBj7soDjwABNKD4BSoocASs/SYo8g4pAwBj70j4BQUOKmCk+BE6Ks4q4AACGYGADwABMogEciroulJUAAAAAu+RJitIcituEitbAGP0BgLsBAAGTAMAATdA+AkmK7BaK9YKK8MAY+7KA48AATShKiv4BKz9CixUAP0mLLiIcizeEizLAGP0BgIwBAAFqizpgA8AATKKESwDAAE3GARyLRYSLQMAY/QGAjAEAAWqLSGADwABMooROAMAATcZCi0wAPz0ci2CCi1vAGPuygIIBAAGEi2TAGP0BAMAATVc+AUFDi+ApPgVOi/uMAAAAhmBgA8AATKIBHIwCLpSVAAAAALvkSYwaHIwjhIwewBj9woCMAQABaowmYAPAAEyihEsAwABNxkKMKgA/SYw5HIxChIw9wBj9woCMAQABaoxFYAPAAEyihE4AwABNxj4BRIxVPgM9jIxmwBj9whyMbS6UlQAAAAC75EmMiRyMkoSMjcAY/cKAjAEAAWqMlWADwABMooRLAMAATcZCjJkAPz0cjLiCjLPA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wABGfxzAAEaMFMAARoPAGSwLDACAjAEAASsAwABN/D4BSsAARp8BHMAARwccwABGuhTAAEamwBkr8AsAgb0CAVsCHsAARsO0BwAAAAA0wABG0wPAAEbTwABG+AAAAAICAsAARtQAAACT9VsAwABG3QAAADtdA8AATUYBYAPAAEyiAABbAUrAAEbmATXAAEbmAAABAFsBFMAARubAGSyFDQA1wABG7wAAAQBcARzAAEbvFMAARubAGSywDwCAggEAARTAAEbzwBkskA4AAAAUwABG5sAZLLAPAACB8ICJAQFbATTAAEcMA8AARwzAAEcsAAAAAQEBwABHDQAAAJP1WwAAWwFKwABHGQEcwABHIRTAAEcZwBktGg0Ak7AAAAAAAACBNT4BSsAAR0YBHMAAR98cwABHcBzAAEdUFMAAR03AGSvwCwCBtgEBYAPAAE6JARbAAEdnFMAAR17AGSwLDACGU4/mAIHugb0CAVsCH8AAR3nAAE7yAAAAADTAAEeVA8AAR5XAAEfdAAAAAgICwABHlgAAAI4BWwDAAEebAAAAO2ADwABOiQAAWwE+Aj0cwABHsRTAAEetwBktsw0AgcMBAAEUwABHt8AZLb4OAAAASsAAR8gBFMAAR8/AGS2zDQAAgfCAiQEBWwE0wABH5APAAEfkwABH+QAAAAEBAcAAR+UAAACIglsAAGADwABOiQFKwABH7AEcwABH7xTAAEfswBkuIw0AgO8AAAAAwABN/QCBNU7AAEgWwABIHQAAke5dA4EiAVsBHMAASCkUwABIH8AZK7gKAG4CAAIWwABILBTAAEgqwBkrTggAke65UobAAEg0wBkqtAAATsAASFDAAEhXAACR710DgSIBWwEcwABIYxTAAEhZwBkruAoAbgIAAhbAAEhmFMAASGTAGStOCACR77lTh8AASG7AGSrCAABKwABIhAEcwABItR7AAEiSgS8BAVsBMcAASJddA4EiAVsDFsAASJoUwABImMAZK04IAJHfuVEUwABIpMAZLloLABTAAEiswBkuoQwAAICJAQFgA7leATTAAEi6A8AASLrAAEkQAAAAAQEBwABIuwAAAIDmXQPAAE1GAVsAAGADuV4BPgFKwABIywEfwABI1rllBAAEFMAASOTAGStqCQAmwABI7wUcwABI7xTAAEjpwBkvUQ0AgtEBAAGTAMAATVVg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g77IwBn0Pga+/oCdvta+4r8tAASasb4gAWoAYAOUCLgmAAABA77yvy0AAAABAQG/AAAAAJquYAPAAEISAABgA8AAQWAABr8RgJ3AAECWwABArcAAQmsAAJqzAAAAAQPAAEC8wABCawAAAAIBAcAAQM4AAACarmADwABCIQABwABA8wAAAJqTYAO+3QFqAGABwABNrAJgA77dAT4HQCEcwABBFoDAAEEPwBn09YCMAQABKwDAAEIvwABBD8AAQR0AQBzAAEErLpqLviACAAKBwABBSsAZ9QYnmrMAvvbAAEErwABBZgBOwABBgMAAQY0AAZqvYAPAAEI2ARzAAEGWgMAAQY/AGfT1mrS+IAAAAADAAEItQCEcwABBxoLAAEG5wBn1b4CMAQABKwDAAE38wABBucAAQc0ATsAAQfHAAEH3AAGahWADvt0BH8AAQhC+4AEAARzAAEISLpq1viABAAGCwABCI8AZ9W8Avv8AQBzAAEI+LpqOviABAAGDwABCTsAZ9cEAvvfAAEI+wABCVABKwABCWwGDwABCYsAZ9cEGvv+AncAAQnDAAEJ8wABCxwAEmrW+IAFqAGADlAi4MgAAAQPAAEKMwABCxwAAAAEBAcAAQpoAAACarmADwABCNgAAYAPAAEFgAAa/EoCdwABEN8AARFHAAEW3AACatwAAAAEDwABEY8AARbcAAAACAQHAAER1AAAAmq5gA8AAQiEAAcAARJ0AAACak2ADvuEBagBgAcAATawCYAO+4QE+BEAcwABEuS6ai74gAgACgcAARNjAGfarJ5q3AL72wABEucAARPcATsAARR7AAEUkAAGahWADvuEBH8AARUi+5AEAARzAAEVKLpq4viABAAEcwABFZYDAAEVewBn2mpq0viAAAAAAwABCLQC/AABAHMAARYoumo6+IAEAAYLAAEWawBn28AC+98AARYrAAEWgAErAAEWnAYLAAEWuwBn28Aa/AICdwABFvMAARcjAAEYZAASauL4gAWoAYAOUCLg+AAABA8AARdvAAEYZAAAAAQEBwABF6QAAAJquYAPAAEI2AABgA8AAQWAABr8TgJ3AAEeJwABHn8AASU0AAJq6AAAAAQPAAEetwABJTQAAAAQDA8AAR7oAAACau2ADwABCQQDAAEfLAAAAmrxgA7+BAMAAR+MAAACavWADwABASQABwABICgAAAJqTYAO+5QFqAGABwABNrAJgA77lAT4EQBzAAEgmLpqLviACAAKDwABIRcAZ+AknmroAvvbAAEgmwABIYABOwABIg8AASIkAAZqFYAO+5QEfwABIob7oAQABHMAASKMumr6+IAYABoDAAEi8wBn32hbAAEjNgcAASMTAGffqhNu/gxbAAEjcgcAASNPAGffqhNy/hRbAAEjsgcAASOPAGffqjDy/hBbAAEj6gcAASPHAGffqjD+/hhbAAEkMgsAASQLAGff4gd3AAEBLAL8BAEAcwABJIC6ajr4gAQABhMAASTDAGfhOAL73wABJIMAASTYASsAAST0BhMAASUTAGfhOBr8BgJ3AAElSwABJXsAASisABJq+viABagBgA5QIuEoAAAEDwABJbcAASisAAAAGBgbAAEl8AAAAmrtgA8AAQkEAwABJkQAAAJrAYAPAAEtQAMAASawAAACawWADwABLUADAAEnIAAAAmsJgA8AAS1AAwABJ4gAAAJrDYAPAAEtQAMAASfwAAACavWADwABMogAAYAPAAEFgAAa/FICdwABNUcAATWrAAE9XAACaxAAAAAEDwABNe8AAT1cAAAAGAAAGwABNhwAAAJFoYAPAAEFkAWoAYAHAAE2sAsAATZgAAACaxWADwABLUAFqAGABwABNrALAAE2tAAAAmsZgA8AAQC0BagBgAcAATawCwABNvgAAAJrHYAPAAEAtAWoAYAHAAE2sAsAATdQAAACam2ADwABApAFqwABN6GADwABApLfLwABOCwAAAJqTYAO+6QFqAGABwABNrAJgA77pAT4EQBzAAE4nLpqLviACAAKFwABORsAZ+lUnmsQAvvbAAE4nwABOZABOwABOisAATpAAAZqFYAO+6QEfwABOq77sAQABHMAATq0umsi+IAUABYDAAE7JwBn51IHAAE7PwBn57RbAAE7ggsAATtrAGfoGIsAAQC81wABO5wAAAQBgA8AATKIBNcAATucAAAEAYAPAAEAtAYPAAE7nwBn6HyMcwABO54bAAE7nwBn6+ICMAQABKwDAAEBDKxbAAE70hsAATufAGfr4IsAAQC8BYAPAAEyiIxzAAE7nhsAATufAGfrogIwBAAErAMAATcY5msmGwABO58AZ+ugBYAPAAEyiFsAATxaEwABPCcAZ+jiB3cAAQKYAvwIAQBzAAE8q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YAPAAErYAWrAAGLOYAPAAErYP1wBPgJAIRzAAGLugcAAYufAGgI8gIwBAAErAL9VwABi58AAYvUBJ5riPRzAAGMYLprjviAGAAYWwABjK4HAAGMkwBoCPIw3v0MWwABjNoHAAGMvwBoCPIw4v0SCwABjOsAaAlWDwABjQcAaAnKAwABjScAaAiuEwABjVMAaAo8AvwcGvweAncAAY2TAAGNpwABj6gAEmuO+IAFqAGADlAi4kgAAAQPAAGN0wABj6gAAAAYGBsAAY3wAAACMN2ADwABLUADAAGOHAAAAjDhgA8AAS1AAwABjkgAAAIw9YAPAAEtQAMAAY6AAAACMPmADwABLUADAAGOsAAAAmuBgA8AATKIAwABjvAAAAJrhYAPAAErYAABcAAa/GoCdwABnbMAAZ3HAAGhqAACa5QAAAAEDwABngMAAaGoAAAAEAQHAAGeKAAAAmuZgA8AATKIAA8AAZ58AAACEF2ADvzwBasAAZ69gA788uArAAGfAAAAAjD1gA8AAS1ABasAAZ8hgA8AAS1C4AcAAZ9gAAACMPmADwABLUAFqwABn4WADwABLULgBXAE+AkAhHMAAZ/+BwABn+MAaA/uAjAEAASsAv1XAAGf4wABoBgEnmuI9HMAAaCkumue+IAUABRbAAGhBgcAAaDrAGgP7jDe/QxbAAGhMgcAAaEXAGgP7jDi/RILAAGhQwBoEFIPAAGhXwBoEMYDAAGhfwBoD6gC/CAa/CICdwABob8AAaHTAAGjvAASa574gAWoAYAOUCLieAAABA8AAaITAAGjvAAAABQUFwABojAAAAIw3YAPAAEtQAMAAaJcAAACMOGADwABLUADAAGiiAAAAjD1gA8AAS1AAwABosAAAAIw+YAPAAEtQAMAAaLwAAACa5mADwABMogAAXAAGvxuAncAAaV/AAGlkwABqVgAAmukAAAABA8AAaXHAAGpWAAAABQAABcAAaX8AAACEF2ADvzwBasAAaY9gA788uArAAGmgAAAAjD1gA8AAS1ABasAAaahgA8AAS1C4AcAAabgAAACMPmADwABLUAFqwABpwWADwABLULgBwABp1AAAAJrqYAO/IgFqAGABwABNrALAAGnoAAAAmutgA8AAStgBasAAafZgA8AAStiD+1wBPgE9HMAAagcumuy+IAYABhbAAGodgMAAahbAGgV1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IwEWuyMumwi+IL8tBr9fgJ67U7teu2sBAIw+AAAAAQO7ZbtrAAAAAAAAAGADwABLUAFKu2gBFrtoLpsJviC/Lga/YICevbi9w76FAQCbIQAAAAEDvc++hQAAAAAAAABgA8AAS1ABPgRJvdUhHL3gFr3ZLow+v1+AjAEAASgAAAAAAAAAAADAAE3GSr3uARy9+xa99S6MPb9ehfgBAAEWvf0ujD6/XwDAAEthP0m+CRy+Exa+DS6MPb9egowBAAEoAAAAAAAAAAAAwABN0kq+IAFqvi5gA8AAS1CEyj9JvjwcvkYWvkAujD2/XoC7AQABKAAAAAAAAAAAAMAATdBKvlMBar5hYAPAAEtQhME/Sr53ASgAAAAAAAAAAAa/YYCewABAgcAAQIrAAECyAQCA4wAAAAEDwABAksAAQLIAAAAAAAAAYAPAAErYAUrAAECVASIcwABAmxbAAECVLow9v16BWwEAASgAAAAAAAAAAADAAE3RARzAAECsFsAAQKUujD6/X4FbAQABKAAAAAAAAAAAAMAATdEGv2eAnsAARIHAAESVwABFdgMAgQYAAAABA8AARJbAAEV2AAAAAQEBwABEogAAAIIdYAO/KgAAYAO/KgE+A0nAAESvJcAARLkAgMAARLPAGiB3YAO/WUrAAETIAR/AAETPv1gCAAIcwABE3BbAAETWLow9v16BBgEAARbAAETkFMAARN7AGiB3AAFgA79ZjD2/XgDAAEteHMAARPIWwABE6y6MPr9fgQYBAAEWwABE+hTAAET0wBogdwABYAO/WYw+v18AwABLXgA/ScAARQclwABFEQCAwABFC8AaIHdgA788SsAARSIBH8AARSm/ewIAAhzAAEU0FsAARS4ujD2/XoEGAQABFsAARTwUwABFNsAaIHcAAWADvzyMN79DAMAAS14cwABFRxbAAEVALow+v1+BBgEAARbAAEVPFMAARUnAGiB3AAFgA788jDi/RADAAEteAD89MMAARVgfwABFXsAAS9EBAAGAwABFbMAaIHcABr9ogJ7AAEcZwABHJ8AAR2MDAIENAAAAAQPAAEcowABHYwAAAAEBAcAARzAAAACCHWADvzwAAGADv1kBSsAARzoBH8AARzq/ewIAAhzAAEdFFsAARz8ujD2/XoENAQABFsAAR02AwABHR8AaIemMN79DAMAAS10cwABHWBbAAEdRLow+v1+BDQEAARbAAEdggMAAR1rAGiHpjDi/RADAAEtdAAa/aYCewABIPMAASErAAEiGAwCDxgAAAAEDwABIS8AASIYAAAABAQHAAEhTAAAAmxdgA8AAS1AAAGADv1kBSsAASF8BH8AASF+/ewIAAhzAAEhqFsAASGQujD2/XoPGAQABgMAASGzAGiKMAMAAS18cwABIfBbAAEh1Low+v1+DxgEAAYDAAEh+wBoijADAAEtfAAa/aoCewABJVsAASWTAAEmgAwCF+AAAAAEDwABJZcAASaAAAAABAQHAAEltAAAAmxdgA8AAS1AAAGADv1kBSsAASXkBH8AASXm/ewIAAhzAAEmEFsAASX4ujD2/XoX4AQABgMAASYbAGiMfAMAAS2EcwABJlhbAAEmPLow+v1+F+AEAAYDAAEmYwBojHwDAAEthAAa/a4CewABKm8AASqnAAEsCAwCGkgAAAAEDwABKq8AASwIAAAABAQHAAEqzAAAAmxdgA8AAS1AAAGADv1kBSsAASr8BH8AASr+/ewIAAhzAAErXHMAASssWwABKxS6MPb9ehpIBAAGAwABKzsAaI7IAwABLYoXvAAAAAMAATd8cwABK9xzAAErrFsAASuQujD6/X4aSAQABgMAASu7AGiOyAMAAS2KF7wAAAADAAE3fAAa/bICewABL3MAAS+rAAEwmAwCGeAAAAAEDwABL68AATCYAAAABAQHAAEvzAAAAmxdgA8AAS1AAAGADv1kBSsAAS/8BH8AAS/+/ewIAAhzAAEwKFsAATAQujD2/XoZ4AQABgMAATAzAGiRjAMAAS2AcwABMHBbAAEwVLow+v1+GeAEAAYDAAEwewBokYwDAAEtgAAa/YoCewABMb8AATHrAAEytAQCbIgAAAAEDwABMh8AATK0AAAAAAAAAYAPAAEtQAUrAAEyKAR7AAEyKmPgCAWADwABLUAIcwABMmRbAAEyTLow9v16O7wAAAADAAEtkHMAATKcWwABMoC6MPr9fju8AAAAAwABLZAAGv2OAnsAATPfAAE0CwABNNAEAmyMAAAABA8AATQ7AAE00AAAAAAAAAGADwABLUAFKwABNEQEewABNEZj5AgFgA8AAS1ACHMAATSAWwABNGi6MPb9eju8AAAAAwABLZBzAAE0uFsAATScujD6/X47vAAAAAMAAS2QA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z4UAwBpkAQgBv9CGAMAaZB4IAb/RhwDAGmQ7CAG/0hQAwBpkWAgACAG/0xQAwBpkdQkACAG/1BQAwBpkkgoACAG/1RQAwBpkrwsADABAIRzAAK0sgMAArSfAGmNwgIwBAAErAMAATcbAAK0nwACtMwAMAEAhHMAArUiBwACtRMAaY42AjAEAASsAwABNxsAArUTAAK1PAAwAQCEcwACtZoLAAK1gwBpjqoCMAQABKwDAAE3GwACtYMAArW0ADABAIRzAAK2Fg8AArX7AGmPHgIwBAAErAMAATcbAAK1+wACtjAAMAEAhHMAAraeEwACtncAaY+SAjAEAASsAwABNxsAArZ3AAK2uAAwAQCEcwACtyYXAAK2/wBpkAYCMAQABKwDAAE3GwACtv8AArdAADABAIRzAAK3rhsAAreHAGmQegIwBAAErAMAATcbAAK3hwACt8gAMAEAhHMAArg2HwACuA8AaZDuAjAEAASsAwABNxsAArgPAAK4UAAwAQCEcwACuLxTAAK4lwBpkWAgAgIwBAAErAMAATcbAAK4lwACuNgAMAEAhHMAArlEUwACuR8AaZHUJAICMAQABKwDAAE3GwACuR8AArlgADABAIRzAAK5zFMAArmnAGmSSCgCAjAEAASsAwABNxsAArmnAAK56AAwAQCEcwACulRTAAK6LwBpkrwsAgIwBAAErAMAATcbAAK6LwACunAAJAcAAq+bAAE4FAAAAACAGv9mAnsAArqLAAK6ywACvgwEAmqO+IAAAAAEDwACuu8AAr4MAAAAAAAAAYAOsaAFKwACuvgEewACuyqxtAQABMcAArttgA8AAS1AMFsAAruEuhNu/yhbAAK7rLow8v8sWwACu9C6E3L/MFsAArv8ujD+/zRbAAK8LLptBv84WwACvGi6bQr/PFsAArykum0O/0BbAAK84LptEv9EWwACvRy6bRb/SFsAAr1Yum0a/0xbAAK9lLptHv9QWwACvdC6bSL/VAAa/2oCewACxlcAAsaDAALHTAQCbUQAAAAEDwACxqcAAsdMAAAAAAAAAYAO/swFKwACxrAEfwACxs7/HAgACFsAAsb4um0G/zhbAALHJLptCv88ABr/bgJ7AALJ4wACyg8AAsrYBAJtSAAAAAQPAALKMwACytgAAAAAAAABgA7+zAUrAALKPAR/AALKWv8cCAAIWwACy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v8oAwABN0AEcwADXRBbAANdBgMAA1zvAGoDkjDe/Q4FeAQABFsAA10cuhNy/zADAAE3TARzAANdZFsAA11aAwADXUMAagOSMOL9EgLsBAAEWwADXWy6MPL/LAMAATdABHMAA12sWwADXaIDAANdiwBqA5Iw4v0SBXgEAARbAANduLow/v80AwABN00rAANd8ASo/TsAA17PAANe6AAGbamADv8gBHMAA17wum2gAAAAAv/ZOwADX1gAAAISEYAPAAEtQAE7AANfkAAAAjDJgA8AAS1AATsAA1/IAAACbSmADwABLUABOwADYBgAAAJtLYAPAAEtQAEnAANh/IhzAANiMFsAA2ImAwADYg8AagOSMN79DgLsBAAEcwADYkxbAANiOLoTbv8qBDQEAARbAANicgcAA2JXAGoG8m0G/zgDAAEtdAMAATdAAHMAA2LoWwADYt4DAANixwBqA5Iw4v0SAuwEAARzAANjAFsAA2LwujDy/y4ENAQABFsAA2MmBwADYwsAagbybQr/PAMAAS10AwABN0D4EPYrAANjcwBqB3BzAANjwHMAA2OkWwADY5oDAANjgwBqA5Iw3v0OBBgEAARbAANjrLoTbv8oAwABLXoEGAQABFsAA2PmBwADY8sAagbybQb/OAMAAS149i8AA2QrAGoHtHMAA2R0cwADZFxbAANkUgMAA2Q7AGoDkjDi/RIEGAQABFsAA2RkujDy/ywDAAEtegQYBAAEWwADZJoHAANkfwBqBvJtCv88AwABLXj2MwADZN8Aagf4WwADZSIHAANlBwBqBvJtBv849jcAA2VnAGoIPFsAA2WqBwADZY8AagbybQr/PScAA2YAiHMAA2Y0WwADZioDAANmEwBqA5Iw3v0OCjAEAARzAANmVFsAA2Y8uhNy/zIEGAQABFsAA2Z6BwADZl8AagbybQ7/QAMAAS14AwABN0gAcwADZwxbAANnAgMAA2brAGoDkjDi/RIC7AQABHMAA2ckWwADZxS6MPL/LgQ0BAAEWwADZ0oHAANnLwBqBvJtEv9EAwABLXQDAAE3QPgQ9isAA2eXAGoHcHMAA2focwADZ8hbAANnvgMAA2enAGoDkjDe/Q4EGAQABFsAA2fQuhNy/zADAAEtegQ0BAAEWwADaA4HAANn8wBqBvJtDv9AAwABLXT2LwADaFMAage0cwADaJxzAANohFsAA2h6AwADaGMAagOSMOL9EgQYBAAEWwADaIy6MPL/LAMAAS16BBgEAARbAANowgcAA2inAGoG8m0S/0QDAAEtePYzAANpBwBqB/hbAANpSgcAA2kvAGoG8m0O/0D2NwADaY8Aagg8WwADadIHAANptwBqBvJtEv9FJwADaiiIcwADalxbAANqUgMAA2o7AGoDkjDe/Q4KMAQABHMAA2p8WwADamS6E3L/MgQYBAAEWwADaqIHAANqhwBqBvJtFv9IAwABLXgDAAE3SABzAANrNFsAA2sqAwADaxMAagOSMOL9EgowBAAEcwADa1hbAANrPLow/v82BBgEAARbAANrfgcAA2tjAGoG8m0a/0wDAAEteAMAATdI+BD2KwADa8sAagdwcwADbBxzAANr/FsAA2vyAwADa9sAagOSMN79DgQYBAAEWwADbAS6E3L/MAMAAS16BDQEAARbAANsQgcAA2wnAGoG8m0W/0gDAAEtdPYvAANshwBqB7RzAANs3HMAA2y4WwADbK4DAANslwBqA5Iw4v0SBBgEAARbAANswLow/v80AwABLXoENAQABFsAA20CBwADbOcAagbybRr/TAMAAS109jMAA21HAGoH+FsAA22KBwADbW8AagbybRb/SPY3AANtzwBqCDxbAANuEgcAA233AGoG8m0a/00nAANuaIhzAANunFsAA26SAwADbnsAagOSMN79DgLsBAAEcwADbrhbAANupLoTbv8qBDQEAARbAANu3gcAA27DAGoG8m0e/1ADAAEtdAMAATdAAHMAA29wWwADb2YDAANvTwBqA5Iw4v0SCjAEAARzAANvlFsAA294ujD+/zYEGAQABFsAA2+6BwADb58AagbybSL/VAMAAS14AwABN0j4EPYrAANwBwBqB3BzAANwVHMAA3A4WwADcC4DAANwFwBqA5Iw3v0OBBgEAARbAANwQLoTbv8oAwABLXoEGAQABFsAA3B6BwADcF8AagbybR7/UAMAAS149i8AA3C/AGoHtHMAA3EUcwADcPBbAANw5gMAA3DPAGoDkjDi/RIEGAQABFsAA3D4ujD+/zQDAAEtegQ0BAAEWwADcToHAANxHwBqBvJtIv9UAwABLXT2MwADcX8Aagf4WwADccIHAANxpwBqBvJtHv9Q9jcAA3IHAGoIPFsAA3JKBwADci8Aagbyb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APwHAAAAAAAAAGADwABLUAFKwAD7/gEcwAD8BBbAAPv+LoKRviDAAEAHgtEBAAGVAMAATVUGwABADoCewAD8ycAA/NTAAPzjAQCbdgAAAAEDwAD818AA/OMAAAAAAAAAYAPAAEtQAUrAAPzaARzAAPzgFsAA/NougpG+IMAAQAeC0QEAAZYAwABNVQAAGpneABqcewAanNEAGp0nABqdfQAandMAAAAFAsAAQBGAn4C4gL6A24ObewAAAWADwABN7wAAAAEFwABAE4CfgMmAz4DZAQAAA4DXgNkAAAAAAAAAYAPAAEARAT8BCQGAz8AATgUAAAAAAAAAGp4/AAAAAALAAEAUgJ+Bg4GJgykDm3wAAAFgA8AATe8AAAABBcAAQBkAAAAABAAAAwAAAAAAAAAAAGADwABAFAE/AQkBAMAATgUAAAAAAgbAAEAWgJ+BloGhgmcAAYG6AAAAAQOBqIJnAAAAAgICga0AAACMLmADwABMogCBugAAAIP9YAPAAE3vAABgA8AATKIBPgRAISWBzACBgcrAGp6+XQPAAE0EAVuByoHYAD2Igd/AGp6wHIHxN9////+AoQEAARyB+YCB9MAanrCBDQEAARaB/YGB+8Aanr6CHMAATgIAwABNyADAAEy6PYiCDMAanrAcgh433////4ChAQABHIImgIIhwBqesIENAQABHII9HII1N8AH//+AoQEAAYCCN8AanrAAwABMuoNxAQABNwoAwABMvgDAAE3IAMAATLpKgkoBHIJWgIJRwBqesICjAQABHIJegIJZwBqesIPFAQABNwYAwABMvwDAAEy8BsAAQBeAn4JsgneDJwABiFYAAAABA4J9gycAAAABAQGCggAAAIwuYAPAAEyiAABgA8AATKIBPgM9iIKOwBqf0hyCoDff////gKEBAAEcgqiAgqPAGp/SgQ0BAAEcgr8cgrc3w////4ChAQABgIK5wBqf0gDAAEy6g3EBAAGWAMAATL4AwABNyADAAEy6PYiCy8Aan9IcgteAgtLAGp/SgKMBAAEcgt+AgtrAGp/Sg8UBAAE3CwDAAEy/AMAATLxKgusBHIL9N9////+AoQEAARyDBYCDAMAan9KBDQEAARyDHByDFDe//4ChAQABgIMWwBqf0gDAAEy6g3EBAAE3DwDAAEy+AMAATcgAwABMugAAGp6QABqfsgAaoMEAAAACAsAAQBqAoIQDhAmNhAObfQAAAWADwABN7wAAAAAHBsAAQB2AoIR+hIaEowQBgIq+IAAAAAEDhJmEowAAAAAAAABgA8AAQBoBSoSfASsGwABAH4CghZuFq4YlAAGbfgAAAAEDhbuGJQAAAAEBAYXDAAAAhk1gA8AATokAAGADmK0BPgJAIRyF24CF1sAaoT+AjAEAASsAwABOmIXWheIBJ5t/SoYDAR6GCsAAQCMBAAGAhhzAGqE/AAbAAEAggKCIlYihiWwAAZuAAAAAAQOItYlsAAAAAgICiL8AAACLkmADmK0AiMwAAACGTWADwABOiQAAYAPAAErYAT4DQCEciOSAiN/AGqGqgIwBAAErAJiwiN+I6wEnm4FAIRyJGIGJE8AaobaAjAEAASsAwABOmIkTiR8BJ5t/SolAAR6JR8AAQCQCAAKAiV3AGqGqgYljwBqhtgAGwABAIYCgi5eLo4wnAAGbggAAAAEDi7iMJwAAAAEBAYvAAAAAhk1gA8AATokAAGADwABK2AE+AkAhHIvYgIvTwBqiR4CMAQABKwDAAE6Yi9OL3wEnm39KjAABHowHwABAJQEAAYCMHsAaokcABsAAQCOAoIwsjDyMkwAFm4O+IAFqAGADlAi5rwAAAQOMTYyTAAAAAQEBjFUAAACGTWADwABOiQAAYAOYrQAGwABAJICgjJeMo40RAAWbhb4gAWoAYAOUCLm7AAABA4y4jREAAAACAgKMwgAAAIuSYAOYrQCMzwAAAIZNYAPAAE6JAABgA8AAStgABsAAQCWAoI0VjSGNggAFm4e+IAFqAGADlAi5xwAAAQONN42CAAAAAQEBjT8AAACGTWADwABOiQAAYAPAAErYAAAAGqDwABqhHwAaoYoAGqInABqilAAaotIAGqMeABqjXgAAAAcCwABAJoChgeKB6IKAA5kAAAABYAPAAE3vAAAAAQXAAEAsAAAAAAQAAAMAAAAAAAAAAABgA8AAQCYBPwEJAQDAAE4FAAAAAAIGwABAKYChgfSCAIIyAAWZAb4gAWoAYAOUCLUWAAABA4IMgjIAAAABAQGCFAAAAID5YAPAAE6JAABcAAbAAEAqgKGCNoJCgn4ABZuJviABagBgA5QIudMAAAEDglOCfgAAAAEBAYJbAAAAgPlgA8AATokAAFwAAAAao8sAGqQGABqkQQAAAAICwABALYCbjayNsrKpg5uLAAABYAPAAE3vAAABBMAAQC+Am5c9l0IJIgBgA8AATKIAAwXAAEBGgJuQWZB7kKgBAAFqkFpgA8AASp8DA5CAkKgAAAABAQGQhQAAACJgA8AATKIAAGADwABALQE/AggAwABALxyQnICQlsAapKmAoQEAATmRHwDAAEy6CQGQe8AATgUAAAAABcAAQEeAm5Jpkm+TLgGbjAADkn2TLgAAAAQEBJKCAAAANmADwABMogCSiQAAAIhpYAPAAEyiAJKQAAAAm41gA8AATKIAkpcAAAA3YAPAAEyiAABgA8AAQC0BPwIIAMAAQC8ckyIckwAckt4ckrwckrUckq2AkqvAGqUFgKEBAAE3gP8AwABMuoNxAQABNxgAwABMvoCmAQABHJLXHJLPgZLNwBqlEoChAQABN4D/AMAATLqDcQEAATcQAMAATL4AwABMu4CmAQABHJL5HJLxgpLvwBqlIIChAQABN4D/AMAATLqDcQEAATcIAMAATL4AwABMu4CmAQABHJMbHJMTg5MRwBqlLoChAQABN4D/AMAATLqDcQEAAZMAwABMvgDAAEy7gKEBAAE5kR8AwABMugkBkm/AAE4FAAAAAAXAAEBIgJuVFJUaljIBm44AA5UoljIAAAAEBASVLQAAAIhpYAPAAEyiAJU0AAAAm41gA8AATKIAlTsAAAA3YAPAAEyiAJVFAAAAm49gA8AAS1AAAGADwABALQE/AggAwABALxyWJhyV8ByVuhyVhByVfRyVdRyVbxyVaIOVYMAapmqDxgEAATeA/wDAAEtfhpIBAAGUAMAAS2KAoQEAATeA/wDAAEy6g3EBAAE3GADAAEy+gKYBAAEclbMclauAlZbAGqZBgKEBAAE3gP8AwABMuoNxAQABNxAAwABMvgDAAEy7gKYBAAEclekcleGBlczAGqZPgKEBAAE3gP8AwABMuoNxAQABNwgAwABMvgDAAEy7gKYBAAEclh8clheClgLAGqZdgKEBAAE3gP8AwABMuoNxAQABkwDAAEy+AMAATLuAoQEAATmRHwDAAEy6CQGVGsAATgUAAAAAEgbAAEAxgJuX95f/mCIBAJqpAAAAAQOYBZgiAAAAAAAAAGADwABMogFKmAgBHJgdHJgUOZrJgKEBAAEWmBYuIsAAQC8AwABMuoPFAQABNxgAwABMvwbAAEAygJuY05jemPUBAJuPAAAAAQOY5pj1AAAAAAAAAGADwABLUAFKmOkBHJjvFpjpLpqpwABAMYX4AQABN4D/AMAATcwGwABAM4CbmTGZOZlaAQCbkAAAAAEDmT2ZWgAAAAAAAABgA8AATKIBSplAARyZVRyZTDfA/wAAgKEBAAEWmU4uIsAAQC8AwABMuoPFAQABNxAAwABMvwbAAEA0gJuZmJmgmcIBAJuRAAAAAQOZppnCAAAAAAAAAGADwABMogFKmakBHJm+HJm1N8AA/wCAoQEAARaZty4iwABALwDAAEy6g8UBAAE3CADAAEy/BsAAQDWAm5n/mgeaKAEAm5IAAAABA5oMmigAAAAAAAAAYAPAAEyiAUqaDwEcmiQcmhs3gP+AoQEAARaaHS4iwABALwDAAEy6g8UBAAGTAMAATL8GwABAOICbmuqa8Js1AACbkwAAAAEDmvmbNQAAAAEBAZr+AAAANmADwABMogAAYAPAAEAtAT4BSpsHAR+bFMAAQEcEAASAmx3AGqk6FpsgLpuQwABAMxabJS6bkcAAQDQWmywum5LAAEA1AAbAAEA5gJucCZwPnI4AAJuUAAAAAQOcGpyOAAAAAQEBnCIAAACbj2ADwABLUAAAYAPAAEAtAT4CQCIcnECAnDjAGqmlgV4BAAEoAAAAAAAAAAAAwABN0wAcnFKAnErAGqmlgVsBAAEoAAAAAAAA8D8AwABN0Zw4nFgASpxfARycZi6bkwEAARycghycdygAAAAAAOBvQIPGAQABgJx5wBqppQDAAEtfm5UAAAAAwABLZQDAAEA4BsAAQDqAm51OnVSdmQAAm5YAAAABA51bnZkAAAABAQGdYAAAAIhpYAPAAEyiAABgA8AAQC0BPgFKnWkBH512wABARwQABBadfy6aqcAAQDGAnYbAGqpbFp2JLpuRwABANBadkC6bksAAQDUABsAAQDuAm55bnmGepgAAm5cAAAABA55qnqYAAAABAQGebwAAAJuNYAPAAEyiAABgA8AAQC0BPgFKnngBH56FwABARwQABBaeji6aqcAAQDEWnpUum5DAAEAzgJ6awBqqxxaenS6bksAAQDUABsAAQDyAm59nn22fsgAAm5gAAAABA591n7IAAAABAQGfegAAADdgA8AATKIAAGADwABALQE+AUqfgwEfn5DAAEBHBAAEFp+ZLpqpwABAMRafoC6bkMAAQDMWn6Uum5HAAEA0gJ+swBqrMwAGwABAPoCbn/WgA6CxAAGbmb4gAAAAAQOgG6CxAAAAAQEBoCMAAACbmmADwABLUAAAYAPAAEtQAT4CSaA0HKBCgKA4wBqroIFbAQABKCMVxhaCHKQ/AMAATdFKoFQBHKBlgKBbwBqroIX4AQABKNejcD0K1ylAAMAAS2E/SqByASagpAAeoHmY+wIAAhyglhygjYCgg8Aaq6CBDQEAASgpXI/C9SisPwDAAEtdhfgBAAEo4XoUrkfh8D8AwABLYSgzMzMzMzMDQABgA8AAS1AGwABAP4Cbob2hxKMAAACbmwAAAAEDodSjAAAAAAAAAABgA8AAS1ABPgROoiqiLAABQ2ADwABLUAEeoi7AAEA+AQABHKJLFqJHLpuQwABAM4X4AQABN4D/AMAATcwATqJlomcAAZucYAPAAEtQAR6iacAAQD4BAAEcoogWooIum5HAAEA0hfgBAAE3gP8AwABNzABOoqKipAABiG5gA8AAS1ABHqKmwABAPgEAARyixBaivy6bksAAQDWF+AEAATeA/wDAAE3MAEqi0QEcovAcouMcot8ovJaQD3o2yz+DxgEAAYCi4cAarHgAwABLX4ENAQABHKLsKKUsQxzr4uY/g8YBAAGBou7AGqysAMAAS18AwABLXYENAQABHKL5KF1txf6ye7I/g8YBAAGCovvAGqzhAMAAS18AwABLXQbAAEBAgJun+agGqg0AAZsYAAAAAQOoCqoNAAAAAwMDqBEAAAA2YAPAAEAtAKgaAAAAN2ADwABALQCoJAAAAIrzYAPAAEtQAABgA8AAQC0BPgVAIRyoNoKoNMAarcSAjAEAASsAwABNxqg0qD0ASahEIhyoSoCoSMAaraqAjAEAASsAwABAQwAcqFeBqFXAGq23gIwBAAErAMAAQENKqGYBKz9JqHccqH2AqHvAGq2qgIwBAAErAMAAQENKqIwBHqiTvmgCAAKBqJ/AGq23gqiiwBqtxAA/SaiqHKiwgaiuwBqtt4CMAQABKwDAAEBDSqi/AR6oxr5oAgACgKjSwBqtqhyo2SgAAAAAAADwP4EGAQABgqjbwBqtxADAAEteAD9KqOMBH6jwwABARwQABCapNgAcqSgcqSAeqQC+dQMAAxapDYCpC8AaraqaqcAAQDEWqRaBqRTAGq23mqnAAEAxgqkdwBqtxACbnQAAAADAAE3ejvECAAKTN4D/AMAATd1gA8AATKImqXYAHKloHKlgHqlEvnUDAAMWqVGAqU/AGq2qm5DAAEAzFqlYgalWwBqtt5uQwABAM4KpXcAarcQAm50AAAAAwABN3o7xAgACkzeA/wDAAE3dYAPAAEyiJqm6AByprByppB6phL51AwADFqmRgKmPwBqtqpuRwABANBapmoGpmMAarbebkcAAQDSCqaHAGq3EAJudAAAAAMAATd6O8QIAApM3gP8AwABN3WADwABMoiap/AAcqe4cqeYeqci+dQMAAxap1YCp08AaraqbksAAQDUWqd2BqdvAGq23m5LAAEA1gqnjwBqtxACbnQAAAADAAE3ejvECAAKTN4D/AMAATd1gA8AATKIABsAAQEGAm6wZrCawMQABm54AAAABA6wwsDEAAAACAgKsNwAAAJufYAPAAEAtAKxJAAAAm6BgA8AAQC0AAGADwABALQE+BU6sZaxrAAGaqWADwABMogEWrHiArG3AGrA6mqnAAEAxSayDHKyNgqyHwBqwYYCMAQABkwDAAE3GPgFKrMQBgazLwBqwSD9OrOus9AABm6FgA8AATKIBHKz7N4D/gQYBAAGCrP3AGrBhAMAATclOrQytFgAAm6JgA8AATKIBFq0jga0YwBqwSJqpwABAMUmtLhytPIStMsAasM6AjAEAATeA/wDAAE3GPgFKrWcBH610wABARwQABDeA/xytyRytrBytm4KtlcAasGGDxgEAARatqICtncAasDqbkMAAQDMAwABNyoENAQABHK23g62uwBqwp4PGAQABFq3Ega25wBqwSJuQwABAMwDAAE3KAMAATciGkgEAATeA/wDAAE3NHK4THK30HK3hgq3bwBqwYYPGAQABFq3ugK3jwBqwOpuRwABANADAAE3KgQ0BAAEcrf+DrfbAGrCng8YBAAEWrgyBrgHAGrBIm5HAAEA0AMAATcoAwABNyIaSAQABN4D/AMAATc0crlscrj0criuCriXAGrBhg8YBAAEWrjiAri3AGrA6m5LAAEA1AMAATcqBDQEAARyuSIOuP8AasKeDxgEAARauVYGuSsAasEibksAAQDUAwABNygDAAE3IhpIBAAE3gP8AwABNzQA+BD2MrpDAGrDOHK6zHK6nhK6dwBqw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TKIAwACMkwAABIb9YAPAAE6JAABgA8AAQIsBPwMIAMAAQI2AAMAawGMIAMAAQI+BAMAawHMJAADAAE4FAAAAAAEGwABAlYCbwACMk8AAjJPAAJLqAACA7wAAAAEDwACMk8AAkuoAAAAAAAAAYAPAAE6JAUoAAQ8ALsAAQI8AABrAsQAawO0AAAABAsAAQJiAm8AAk4HAAJOGwACVywub8AAAAWADwABN7wAABQTAAECagJvAAJOGwACThgmB3QBgA8AATKIABMAAQJyAm8AAk4bAAJOGCYb9viAAYAPAAE6JAATAAECdgJvAAJOGwACThgaBAQBdA8AATUYBYAPAAECYAWoAXQPAAE1GAWADwABAmL27BMAAQJ6Am8AAlKvAAJSrBoRmAGADwABAmAFqAGADwABAmL2UBMAAQJ+Am8AAlcPAAJXDBpvzAGADwABAmAFqAGADwABAmL2pAQXAAECjgJvAAJOGwACThsAAlcsBAAADwACThsAAlcsAAAACAgLAAJOGAAAEgd1gA8AATKIAwACThgAABIb9YAPAAE6JAABgA8AAQJgBPwMIAMAAQJqAAMAawfIIAMAAQJyBAMAawgIJAADAAE4FAAAAAAEGwABAoYCbwACThsAAk4bAAJXLAACA7wAAAAEDwACThsAAlcsAAAAAAAAAYAPAAE6JAUoAAQ8ALsAAQJwAABrCQAAawnwAAAABAsAAQKSAm8AAlf7AAJYDwACiVQub9AAAAWADwABN7wAABwTAAECmgJvAAJYDwACWAwmB3QBgA8AATKIABMAAQKiAm8AAlgPAAJYDCYb9viAAYAPAAE6JAATAAECpgJvAAJYDwACWAwaBAQBdA8AATUYBYAPAAECkAWoAXQPAAE1GAWADwABApL3xBMAAQKqAm8AAmEDAAJhABpvhAGADwABApAFqAGADwABApLfLBMAAQKuAm8AAmqDAAJqgBpv3AGADwABApAFqAGADwABApL3KBMAAQKyAm8AAndLAAJ3SBpv4AGADwABApAFqAGADwABApLe2BMAAQK2Am8AAoj3AAKI9Bpv5AGADwABApAFqAGADwABApL3fAQXAAECxgJvAAJYDwACWA8AAolUBAAADwACWA8AAolUAAAACAgLAAJYDAAAEgd1gA8AATKIAwACWAwAABIb9YAPAAE6JAABgA8AAQKQBPwMIAMAAQKaAAMAaw8kIAMAAQKiBAMAaw9kJAADAAE4FAAAAAAEGwABAr4CbwACWA8AAlgPAAKJVAACA7wAAAAEDwACWA8AAolUAAAAAAAAAYAPAAE6JAUoAAQ8ALsAAQKgAABrEFwAaxFMAAAABAsAAQLKAm8AAo9zAAKPiwADpigOb+gAAAWADwABN7wAAJwTAAEC1gJvAAKa2wACm1wmDpL4gAGADq/EBHsAApr6r9QEAAWrAAKbHYAPAAEyinn8ABMAAQLaAm8AApuzAAKcCBpv7viAAYAPAAEyiAWrAAKcBYAPAAEyiGgTAAEC3gJvAAKcXwACnJwab/L4gAGADwABMogFqwACnJmADwABMohQEwABAuICbwACnPMAAp1AGm/2+IABgA8AATKIBasAAp09gA8AATKIWBMAAQLmAm8AAp2XAAKd1Bpv+viAAYAPAAEyiAWrAAKd0YAPAAEyiTATAAEC6gJvAAKeKwACnoAab/74gAGADwABMogFqwACnn2ADwABMohgEwABAu4CbwACntcAAp8kGnAC+IABgA8AATKIBasAAp8hgA8AATKKELQTAAEC8gJvAAKfewACn8wacAb4gAGADwABMogFqwACn8mADwABMok4EwABAvYCbwACoCMAAqCMGnAK+IABgA8AATKIBasAAqCJgA8AATKKF8QTAAEC+gJvAAKg4wACoUAacA74gAGADwABMogFqwACoT2ADwABMohwEwABAv4CbwACoZcAAqHoGnAS+IABgA8AATKIBasAAqHlgA8AATKKESATAAEDAgJvAAKiPwACorgacBb4gAGADwABMogFqwACorGADwABMooRLBMAAQMGAm8AAqMPAAKjeBpwGviAAYAPAAEyiAWrAAKjcYAPAAEyiiBEEwABAwoCbwACo88AAqQoGnAe+IABgA8AATKIBasAAqQhgA8AATKKEMATAAEDDgJvAAKkfwACpMQacCL4gAGADwABMogFqwACpL2ADwABMooROBMAAQMSAm8AAqUfAAKl0BpwJviAAYAPAAEyiAWrAAKlwYAPAAEyiGgTAAEDFgJvAAKmJwACpqgacCr4gAGADwABMogFqwACppmADwABMohgEwABAxoCbwACpv8AAqegGnAu+IABgA8AATKIBasAAqeRgA8AATKIcBMAAQMeAm8AAqf3AAKoeBpwMviAAYAPAAEyiAWrAAKoaYAPAAEyihDAEwABAyICbwACqM8AAqmAGnA2+IABgA8AATKIBasAAqlxgA8AATKJUBMAAQMmAm8AAqnXAAKqeBpwOviAAYAPAAEyiAWrAAKqaYAPAAEyihJwEwABAyoCbwACqs8AAqt4GnA++IABgA8AATKIBasAAqtpgA8AATKKEnwTAAEDLgJvAAKrzwACrKgacEL4gAGADwABMogFqwACrJmADwABMooQzBMAAQMyAm8AAqz/AAKtwBpwRviAAYAPAAEyiAWrAAKtsYAPAAEyibwTAAEDNgJvAAKuFwACrsAacEr4gAGADwABMogFqwACrrGADwABMop5JBMAAQM6Am8AAq8XAAKwCBpwTviAAYAPAAEyiAWrAAKv+YAPAAEyinnEEwABAz4CbwACsF8AArEwGnBS+IABgA8AATKIBasAArEhgA8AATKKEVwTAAEDQgJvAAKxhwACsjgacFb4gAGADwABMogFqwACsimADwABMooRjBMAAQNGAm8AArKPAAKzGBpwWviAAYAPAAEyiAWrAAKzCYAPAAEyinlQEwABA0oCbwACtHMAArTAGnBe+IABgA8AATKIBasAArS5gA8AATKKefwTAAEDTgJvAAK2HwACtjxicGL4gAF0DwABNRgFbASsEwABA1ICbwACtpMAArbUGnBm+IABgA8AATKIBasAArbRgA8AATKIaBMAAQNWAm8AArcrAAK3gBpwaviAAYAPAAEyiAWrAAK3fYAPAAEyiFATAAEDWgJvAAK31wACuCwacG74gAGADwABMogFqwACuCmADwABMohYEwABA14CbwACuIMAArjEGnBy+IABgA8AATKIBasAArjBgA8AATKJMBMAAQNiAm8AAsTPAALFOBpwdviAAYAPAAEyiAWrAALFEYAPAAEyivgEEwABA2YCbwAC0dcAAtKEFnB6+IABgA8AATKIBFsAAtJxqwAC0lGADwABASboegd3AAEBLBMAAQNqAm8AAxB/AAMQ+BpwfviAAYAPAAEtQAWrAAMQ7YAPAAEtQvgUEwABA24CbwADh0cAA4egEnCEAYAPAAErYASoBBcAAQQGAm8AArsLAAK7CwACvBQAAAAPAAK7HwACvBQAAAAAAAABgA8AAQLIBPgFJwACu0BrAAK7UwABA2z4BPRfAAK7tLpwiviApwABA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wADQ58AA0VMBAJwwAAAAAQPAAND1wADRUwAAAAAAAABgA8AAQHABPgFKwADQ+wEcwADRFmrAANEQXQPAAE1GAWADwABAcLzngtEBAAEcwADRHRbAANEXLoOkviDAAEC1j5gCAAJqwADRJmADwABMom9qwADRPWADq+ecGACsAQDAAE1VBsAAQPeAm8AA0VfAANFbwADSCAIAnDAAAAABA8AA0WjAANIIAAAAAQEBwADRdwAAACJgA8AAQHAAAFwBPgNAIRzAANGRgMAA0YvAGtm6gIwBAAErAMAATfzAANGLwADRmABOwADRqcAA0bEAAYZsYAPAAEyiARbAANG5gMAA0bPAGtm6gd3AAEByPRzAANHKFsAA0cQug6S+IMAAQLWPmQMAA2rAANHTYAPAAEyib4HAANHqwBrZ82rAANHzYAOr55wYAKwCBsAAQOeAm8AA043AANOYwADT/gEAmrsAAAABA8AA05/AANP+AAAAAAAAAGADwABCQQE+AknAANOlHMAA07IWwADTqS6cGL4gwABA04CMAQABKwDAAE1wSsAA08EBKz9KwADT0gEmwADT8QAcwADT4RbAANPZLpwYviDAAEDTgtEBAAFqwADT4mADwABMohoAwABNVWADwABCQQbAAED4gJvAANQCwADUBsAA1HMCAJq7AAAAAQPAANQMwADUcwAAAAEBAcAA1BQAAAAiYAPAAEJBAABcAT4CPSMcwADUKhbAANQhLpwYviDAAEDTgIwBAAErAMAATXAXwADUIS6cGL4gHsAA1C7AAEaPAQFbAWrAANQ8YAPAAEyiTADAAEDTKwFdA8AATUYBWz0cwADUWBbAANRQLpwYviDAAEDTgQwCAAJqwADUWWADwABMohqAwADUasAa2xoAwABNVgbAAEDogJvAANVTwADVY8AA1hABAJwxAAAAAQPAANVvwADWEAAAAAAAAABgA8AAQfsBPgJJwADVdSIcwADVghbAANV5LpwYviDAAEDTgIwBAAErAMAATXABHMAA1aocwADVlRbAANWNLpwYviDAAEDTgtEBAAFqwADVlmADwABMohQAwABNVYCMAQABKwDAAE38PgFKwADVuwErP0rAANXSASbAANX+ABbAANX2HMAA1eEWwADV2S6cGL4gwABA04LRAQABasAA1eJgA8AATKIUAMAATVWcMgBgA8AAQfsGwABA+YCbwADWFcAA1hnAANgLAgCcMQAAAAEDwADWJMAA2AsAAAABAQHAANYxAAAAImADwABB+wAAXAE+Ak7AANZRwADWXgABmq9gA8AAQhIBNcAA1mAAAAEAYAPAAEH7AYDAANZgwBrcvCMcwADWYIHAANZgwBrc5YCMAQABKwDAAEIHKxzAANZngcAA1mDAGtzlmrC+IAAAAADAAEIJAWADwABCEknAANaDHMAA1pSBwADWh8Aa3NGAjAEAASsAwABN/D4BScAA1qUhHMAA1rIWwADWqS6cGL4gwABA04CMAQABKwDAAE1wPgE9HMAA1s0WwADWxS6cGL4gwABA04EMAgACasAA1s5gA8AATKIUKwDAAE1WPz4BScAA1wUcwADXEhbAANcJLpwYviDAAEDTgIwBAAErAMAATXA+Aj0XwADXJS6cGL4gHsAA1zDAAEaPAQFbAWrAANc+YAPAAEyiTADAAEDTPRzAANdeFsAA11YunBi+IMAAQNOBDAIAAmrAANdfYAPAAEyiFIHAANd1wBrc0QDAAE1WScAA15AhHMAA17o1wADXnAAAAQBbARzAANecFsAA15QunBi+IMAAQNOC0QEAAWrAANedYAPAAEyiFADAAE1VIxzAANecgsAA15zAGt46gIwBAAErAMAATfwrFsAA17KCwADXnMAa3jqcMgABW4CMAQABgMAA173AGty8AMAATfw+AT0cwADX1hbAANfOLpwYviDAAEDTgQwCAAJqwADX12ADwABMohSBwADX7cAa3NEAwABNVj8GwABA6YCbwADaN8AA2kfAANrsAQCcMwAAAAEDwADaU8AA2uwAAAAAAAAAYAPAAEIhAT4CScAA2lkiHMAA2mYWwADaXS6cGL4gwABA04CMAQABKwDAAE1wARzAANqOHMAA2nkWwADacS6cGL4gwABA04LRAQABasAA2npgA8AATKIWAMAATVWAjAEAASsAwABN/ErAANqdASs/SsAA2q4BJsAA2toAFsAA2tIcwADavRbAANq1LpwYviDAAEDTgtEBAAFqwADavmADwABMohYAwABNVZwyAGADwABCIQbAAED6gJvAANrxwADa9cAA3FECAJwzAAAAAQPAANsAwADcUQAAAAEBAcAA2w0AAAAiYAPAAEIhAABcAT4BScAA2xocwADbJIDAANsewBrf64CMAQABKwDAAEIvPgFJwADbNSEcwADbQhbAANs5LpwYviDAAEDTgIwBAAErAMAATXA+AT0cwADbXRbAANtVLpwYviDAAEDTgQwCAAJqwADbXmADwABMohYrAMAATVY/PgI9IxzAANueFsAA25UunBi+IMAAQNOAjAEAASsAwABNcBfAANuVLpwYviAewADbosAARo8BAVsBasAA27BgA8AATKJMAMAAQNMrAV0DwABNRgFbScAA28YhHMAA2/A1wADb0gAAAQBbARzAANvSFsAA28ounBi+IMAAQNOC0QEAAWrAANvTYAPAAEyiFgDAAE1VIxzAANvSgcAA29LAGuDRgIwBAAErAMAATfwrFsAA2+iBwADb0sAa4NGcMgABW4CMAQABgMAA2/PAGt/rAMAATfw+AT0cwADcDBbAANwELpwYviDAAEDTgQwCAAJqwADcDWADwABMohYcwADcKYDAANwjwBrf65q0viAAAAAAwABCLQDAAE1WPwbAAEDqgJvAAN1iwADda8AA3cMBAJw0AAAAAQPAAN14wADdwwAAAAAAAABgA8AAStgBPgFKwADdfgEcwADduxzAAN2LFsAA3YUug6S+IMAAQLWPmAIAAmrAAN2UYAPAAEyihGNqwADdqWADq+ecGACsAYCMAQABlADAAE3GBsAAQPuAm8AA3cfAAN3LwADeMgIAnDQAAAABA8AA3dfAAN4yAAAAAQEBwADd3QAAACJgA8AAStgAAFwBPgE9HMAA3fAWwADd6i6DpL4gwABAtY+ZAwADasAA3flgA8AATKKEYyOAwADeDsAa4jOUkwFgA8AATKJqwADeHWADq+ecGACsAgbAAEDsgJvAAN43wADeQMAA3o4BAJwiviAAAAABA8AA3kjAAN6OAAAAAAAAAGADwABK2AE+AUrAAN5OARzAAN6GHMAA3lsWwADeVS6DpL4gwABAtY+YAgACasAA3mRgA8AATKKeVGrAAN50YAOr55wYAKwBgIwBAAGUAMAATcYGwABA/YCbwADeksAA3pbAAN7zAgCcIr4gAAAAAQPAAN6dwADe8wAAAAEBAcAA3qMAAAAiYAPAAErYAABcAT4BPRzAAN62FsAA3rAug6S+IMAAQLWPmQMAA2rAAN6/YAPAAEyinlQjgMAA3s/AGuM5lJMBYAPAAEyiasAA3t5gA6vnnBgArAIGwABA/4CbwADh7cAA4gDAAOmIAACA7wFqwADh7mADwABN76vxAAABA8AA4gjAAOmIAAAAAAAAAGADwABOiQE+EE7AAOIkwADiKwABgOZgA8AATtMBH8AA4i3AAE7yAAAAAE7AAOJIwADiUgAAnDVgA8AATokBJwA9HMAA4mOAwADiXMAa49aBwwEAASecNgDAAE7nScAA4ngcwADighbAAOJ8LpwkwABA4ICMAQABasAA4pNgA8AAQJi9qQDAAE38PgU9HMAA4qqAwADio8Aa49aBwwEAASTAAOK4ARbAAOKyLpwkwABA4ADAAE7nScAA4sEhHMAA4tEWwADixS6cJcAAQOGAjAEAASgAAAAAAAAAAADAAE3GPRzAAOLogMAA4uHAGuPWgcMBAAEkwADjEgInhx0cwADi/hbAAOLyLpwlwABA4ZsMAQABlADAAE3gAMAATuc9HMAA4y+AwADjKMAa49aBwwEAASecNwDAAE7nScAA40khHMAA41cWwADjTS6cJsAAQOKAjAEAAWrAAONkYAPAAEB+vPoAwABN/D0cwADjeYDAAONywBrj1oHDAQABJMAA44wCJ4cdFsAA44IunCbAAEDiAMAATuc/ScAA45UcwADjpBbAAOOZLpwnwABA44CMAQABasAA47JgA8AAQIu9RwDAAE38PgFJwADjwyEcwADj2BbAAOPHLpwowABA5ICMAQABasAA49tgA8AAS1C+BQDAAE3GPRzAAOQHgMAA5ADAGuPWgcMBAAEkwADkSAQnhx0WwADkEC6cJ8AAQOMnnDgcwADkNBbAAOQjLpwowABA5JsMAQABlADAAE3gAMAATuc/PgE9HMAA5GmAwADkYsAa49aBwwEAASTAAOR9AieHHRbAAORyLpwnwABA4wDAAE7nPYnAAOSOwBrj9yecOT9JwADkqiEcwADkuhbAAOSuLpwjwABA3YCMAQABKQDAAE38PgI9HMAA5NKAwADky8Aa49aBwwEAASTAAOTzAoHAAOTbwBrj9yecOgDAAE7nPYnAAOT8wBrj9yecOT9JwADlGCEcwADlIhbAAOUcLprGwABA3oCMAQABasAA5StgA8AAQC2+cgDAAEBDPgJJwADlSiEcwADlVBbAAOVOLprGwABA3oCMAQABKwDAAEBDPRzAAOVsgMAA5WXAGuPWgcMBAAEkwADlhAKBwADldMAa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QZmAm8ABIcrAASHSwAEiCQQBgsAAAAABA8ABIdvAASIJAAAAAQEBwAEh4QAAAIFjYAPAAEFkAABgA8AAQWQBPgFKwAEh7wEcwAEh/YDAASH2wBr8W4URviAAAAAAwABBaAbAAEFogJvAASINwAEiEsABIi4ABIURviABagBgA5QIwABAQAAAAQPAASIYwAEiLgAAAAAAAABgA8AAQWQABsAAQZuAm8ABIrzAASLNwAEi/AEAnHcAAAABA8ABItbAASL8AAAAAAAAAGADwABBRQFKwAEi2QEcwAEi7GrAASLmXQPAAE1GAWADwABBRb+kgtEBAAEcwAEi7S6ceL4gAAAAAMAAQWkAwABNVQbAAEGdgJvAASMAwAEjBMABIz0CAJx3AAAAAQPAASMMwAEjPQAAAAEBAcABIxoAAAAiYAPAAEFFAABcAUrAASMkARzAASMkLpx5viABAAEWwAEjN4DAASMxwBr9aoHdwABBRwDAAEFqBsAAQWmAm8ABI0LAASNGwAEjbgAEnHi+IAFqAGADlAjAAEBOAAABA8ABI1LAASNuAAAAAAAAAGADwABMogAGwABBaoCbwAEjcsABI3fAASOrAASceb4gAWoAYAOUCMAAQFwAAAEDwAEjg8ABI6sAAAABAQHAASOIAAAAnHdgA8AATKIAAFwABsAAQXyAm8ABI+XAASPqwAEkGQAEnHwBagBgA5QIwABAagAAAQPAASPwwAEkGQAAAAICAsABI/gAAACEhGADwABLUADAASQCAAAAjDJgA8AAS1AAAFwABsAAQX2Am8ABJGbAASRrwAEkrAAEnH4BagBgA5QIwABAeAAAAQPAASR5wAEkrAAAAAICAsABJIEAAACMN2ADwABLUADAASSMAAAAjDhgA8AAS1AAAFwABsAAQX6Am8ABJQXAASUKwAElOQAEnIABagBgA5QIwABAhgAAAQPAASUQwAElOQAAAAICAsABJRgAAACEhGADwABLUADAASUiAAAAjDJgA8AAS1AAAFwABsAAQX+Am8ABJbfAASW8wAEl/QAEnIIBagBgA5QIwABAlAAAAQPAASXKwAEl/QAAAAICAsABJdIAAACMN2ADwABLUADAASXdAAAAjDhgA8AAS1AAAFwABsAAQYCAm8ABJpTAASaZwAEm9gAEnIQBagBgA5QIwABAogAAAQPAASaqwAEm9gAAAAQEBMABJrIAAACMRGADwABLUADAASa9AAAAjEZgA8AAS1AAwAEmyAAAAJyGYAPAAEtQAMABJtMAAACch2ADwABLUAAAXAAGwABBgYCbwAEn18ABJ9zAAShJAASciAFqAGADlAjAAECwAAABA8ABJ/XAAShJAAAABAQEwAEn/QAAAIxEYAPAAEtQAMABKAgAAACMRmADwABLUADAASgTAAAAnIZgA8AAS1AAwAEoHgAAAJyHYAPAAEtQAABcAAbAAEGCgJvAASjpwAEo7sABKU0ABJyKAWoAYAOUCMAAQL4AAAEDwAEo9cABKU0AAAAGBgbAASj9AAAAjERgA8AAS1AAwAEpCAAAAIxGYAPAAEtQAMABKRMAAACchmADwABLUADAASkeAAAAnIdgA8AAS1AAwAEpKQAAAJyMYAPAAEtQAMABKTQAAACcjWADwABLUAAAXAAGwABBg4CbwAEqOMABKj3AASqsAAScjgFqAGADlAjAAEDMAAABA8ABKkzAASqsAAAABgYGwAEqVAAAAIxEYAPAAEtQAMABKl8AAACMRmADwABLUADAASpqAAAAnIZgA8AAS1AAwAEqdQAAAJyHYAPAAEtQAMABKoAAAACcjGADwABLUADAASqLAAAAnI1gA8AAS1AAAFwABsAAQYSAm8ABK+zAASvxwAEsRAAEnJABagBgA5QIwABA2gAAAQPAASv4wAEsRAAAAAUFBcABLAAAAACMRGADwABLUADAASwLAAAAjEZgA8AAS1AAwAEsFgAAAJyGYAPAAEtQAMABLCEAAACch2ADwABLUADAASwsAAAAjvdgA8AAS1AAAFwABsAAQYWAm8ABLc3AAS3SwAEuNQAEnJIBagBgA5QIwABA6AAAAQPAAS3hwAEuNQAAAAUFBcABLekAAACMRGADwABLUADAAS30AAAAjEZgA8AAS1AAwAEt/wAAAJyGYAPAAEtQAMABLgoAAACch2ADwABLUADAAS4VAAAAjvdgA8AAS1AAAFwABsAAQYaAm8ABMV7AATFjwAEyLwAAnJQAAAABA8ABMWjAATIvAAAABAQEwAExbgAAAJqaYAO/gQDAATF7AAAAnJVgA8AAS1AAwAExjgAAAJyWYAPAAEtQAMABMZ8AAACcl2ADwABK2AAAXAE+AkAewAExub5jAQABgMABMcbAGwLfAMABMbnA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jD5gA8AATKIAAF0DgSIBYAPAAEEjAT4CScACivEiHMACivuAwAKK9cAboVmBWwEAAZMAwABN0QEcwAKLCoHAAosDwBuhaYFbAQABkwDAAE3RPTDAAosWHsACixzAAExtAQABJ5pjAD9KwAKLSAEewAKLT75uAQFgA8AAQSMBNMACi2ADwAKLYMACi6UAAAABAQHAAotyAAAAG14DAAEBAWADwABBIwABVwO+JwFgA8AAQSNcAABgA8AATokBSsACi38BHMACi38ummS+IAMAA4DAAouIwBuhWYHAAouPwBuhaYLAAouXwBuiAgDAAELYAAbAAELYgJvAAouvwAKLtsACjAkABJpkviABagBgA5QIwABGVAAAAQPAAou+wAKMCQAAAAMDA8ACi8MAAACMPWADwABMogDAAovOAAAAjD5gA8AATKIAwAKL5wAAABteAwABAQFgA8AAQSMAAVcDvicBYAPAAEEjXAAAYAPAAE6JAAbAAELZgJvAAoyBwAKMhsACjKgABJpmAWoAYAOUCMAARmIAAAEDwAKMjcACjKgAAAAAAAAAXAAGwABC24CbwAKNf8ACjYfAAo2+AQSd/gFqAGADlAjAAEZwAAABA8ACjZzAAo2+AAAAAAAAAGADwABMogAAABuhLwAbomEAG6LiABujGQAbo1UAAAAEAsAAQt+Am8ACjpjAAo6ewAKTXgOeAAAAAWADsMIAAAABBcAAQueAm8ACj3fAAo+TwAKPtwAAAWrAAo94YAPAAEqfAwPAAo+iwAKPtwAAAAAAAABgA8AAQt8BPgE9HMACj6cumoK+IAAAAADAAELiAQkBwAKPk7DEAAAAAAMGwABC4oCbwAKPu8ACj8DAAo/zAASagr4gAWoAYAOUCMAARn4AAAEDwAKPzMACj/MAAAAAAAAAXAAGwABC5YCbwAKRfMACkYXAApG1AQSdeQFqAGADlAjAAEaMAAABA8ACkZHAApG1AAAAAAAAAGADwABK2AAGwABC44CbwAKTIMACkyjAApNcAASeAwFqAGADlAjAAEaaAAABA8ACkzTAApNcAAAAAAAAAGADwABC1AAAABuj6wAbpCQAG6RgABuknAAAAAMCwABC6ICbwAKTtsACk7zAAq5Sg54FAAABYAPAAE3vAAAJBMAAQuuAm8AClqjAApbDBpwdviAAYAPAAEyiAWrAApa5YAPAAEyivgEEwABC7ICbwAKW/MAClxEGnga+IABgA8AATKIBasAClw9gA8AATKJUBMAAQu2Am8AClybAApc8BpwKviAAYAPAAEyiAWrAApc4YAPAAEyiGgTAAELugJvAApdRwAKXYwaeB74gAGADwABMogFqwAKXX2ADwABMohgEwABC74CbwAKXeMACl4oGngi+IABgA8AATKIBasACl4ZgA8AATKIcBMAAQvCAm8ACl5/AApe0Bp4JviAAYAPAAEyiAWrAApewYAPAAEyihDAEwABC8YCbwAKYcMACmHUJmsYAYAPAAEAtAATAAELygJvAApmowAKZrgmEFwBgA788AATAAELzgJvAApoSwAKaHAmeCgBgA8AAS1AAAQXAAEMCgJvAApVMwAKVUsAClpIBAAADwAKVWMAClpIAAAADAAADwAKVZAAABJrGYAPAAEAtAWrAApVyYAPAAEAtvnLAApWSAAAEhBdgA788AWrAApWiYAO/PLgKwAKVsQAABJ4KYAPAAEtQAWrAApW+YAPAAEtQuAFgA8AAQugBPwcIAcAAQvGAAMAbpjgIAcAAQvKBAMAbplUIAcAAQvOCAMAbpm4MAEAhHMACldeAwAKV0cAbpjiAjAEAASsAwABAQ8ACldHAApXeASeeCwwAQCEcwAKWFYHAApYOwBumVYCMAQABKwC/VcAClg7AApYcASeeDAwAQBzAApZYgsAClk3AG6ZugV4BAAEoAAAAAAAAAAAAwABN08AClk3AApZeASeeDQkBwAKVUsAATgUAAAAACgbAAEL1gJvAApsywAKbQMACm4sAAZ4OAAAAAQPAAptUwAKbiwAAAAEBAcACm1wAAACbIGADwABLUAAAYAPAAEtQAT4BSsACm2oBHMACm4IcwAKbeIDAAptxwBuncYPGAQABKCgPC7WmeeI/AMAAS1+BDQEAASgAAAAAAADgPwDAAEtdBsAAQv+Am8ACnAXAApwQwAKcPQEAng8AAAABA8ACnBrAApw9AAAAAAAAAGADwABLUAFKwAKcHQEewAKcHcAAQvUBAAEWwAKcMi6eCsAAQvMABsAAQvaAm8ACnkzAAp5SwAKezAAAnhAAAAABA8ACnlnAAp7MAAAAAAAAAGADwABAsgE+AUrAAp5iATXAAp5pAAABAGADwABAsgEfwAKeacAAQQEAAAAANcACnnkAAAEAXAEXwAKeeYDAAp5pwBuoVprGFsACnoEumsbAAELxwABA7zXAAp6PAAABAFwBF8ACno+AwAKeacAbqFacKR/AAp6nwABB+gIAAmrAAp62YAPAAEHfvhEWwAKevi6eD8AAQv8AwABA9oDAAp5pwBuoVgbAAEL3gJvAAp8xwAKfOMACn8UAAI7tAAAAAQPAAp89wAKfxQAAAAEBAcACn0UAAACMNGADwABLUAAAYAPAAELoAT4BSsACn1MBH8ACn1rAAEMCAwAAA5rGFsACn28umsbAAELxhBccwAKfixbAAp+ELoQXwABC8oPGAQABgMACn43AG6kVAL9PngocwAKfshbAAp+nLp4KwABC84PGAQABgMACn7TAG6kVAMAAS18GwABC+ICbwAKjx8ACo9XAAqVbAAGbGAAAAAEDwAKj2cACpVsAAAADAwPAAqPhAAAANmADwABC6ADAAqPrAAAAN2ADwABC6ADAAqP1AAAAivNgA8AAS1AAAGADwABC6AE+BUAhHMACpAeCwAKkBcAbqeKAjAEAASsAwABNxsACpAXAAqQOAEnAAqQVIhzAAqQbgMACpBnAG6nEgIwBAAErAMAAQvoAHMACpCiBwAKkJsAbqdOAjAEAASsAwABC+krAAqQ3ASs/ScACpEgcwAKkToDAAqRMwBupxICMAQABKwDAAEL6SsACpF0BHMACpGaBwAKkZMAbqdOO7QEAAYLAAqRswBup4gDAAEL3P0nAAqR0HMACpHqBwAKkeMAbqdOAjAEAASsAwABC+krAAqSJARzAAqSSgMACpJDAG6nEju0BAAEcwAKknCgAAAAAAADwP4EGAQABgsACpJ7AG6niAMAAS14AwABC9z9KwAKkpgEfwAKkrcAAQwIDAAADmsYewAKkyMAAQEADAAMWwAKkz4DAAqTNwBupxJrGwABC8RbAAqTYgcACpNbAG6nTmsbAAELxgsACpN/AG6niAIQXHsACpPi/VAMAAxbAAqT/gMACpP3AG6nEhBfAAELyFsACpQmBwAKlB8AbqdOEF8AAQvKCwAKlEcAbqeIAngoewAKlJ751AwADFsACpTSAwAKlMsAbqcSeCsAAQvMWwAKlQoHAAqVAwBup054KwABC84LAAqVOwBup4gAGwABC+YCbwAKmEMACpiTAAqhZAAGeEQAAAAEDwAKmLMACqFkAAAADAwPAAqY6AAAANl0DwABNRgFgA8AAQugAwAKmSgAAADddA8AATUYBYAPAAELoAMACplQAAACK82ADwABLUAAAXQPAAE1GAWADwABC6AE+CkAhHMACpmaCwAKmZMAbrCqAjAEAASsAwABNxsACpmTAAqZtAEnAAqZ0IhzAAqZ6gMACpnjAG6v+gIwBAAErAMAATXAAHMACpoeBwAKmhcAbrBSAjAEAASsAwABNcErAAqaWASs/PSMcwAKmqYDAAqanwBur/oCMAQABKwDAAE1wiMACpqfAG6v+McACprVgA8AAQugAKwFdA8AATUYBYAPAAELoPSMcwAKmv4HAAqa9wBusFICMAQABKwDAAE1wicACpr3AG6wUMcACpstgA8AAQugAKwFdA8AATUYBYAPAAELoTsACpubAAqbtAAGA5l0DwABNRgFgA8AAQugBMcACpvdgA8AAQugATsACpwnAAqcWAAGeEmADwABMogEewAKnGJj4AgFgA8AATKICFsACpyOAwAKnIcAbq/6ByMAATXYWwAKnLYHAAqcrwBusFIHIwABNdgBFwAKnOgHAAqdDwAKnRQAAg2ZgA8AATKIBkwEcwAKnTIXAAqdKwButqIC7AQABhMACp07AG61WAMAATdABjcACp1zAG62oHMACp16FwAKnXMAbraiBDQEAAZQAwABNyD0cwAKncYPAAqdqwButL4CCAQABHsACp3zAAEL4AwADHMACp4KAwAKngcAbq/6C0QEAAYXAAqeDwButqADAAE1VHMACp4iBwAKnh8AbrBSC0QEAAYXAAqeJwButqADAAE1VgsACp43AG6wqAADAAE1XRcACp5YBwAKnn8ACp6EAAINmYAPAAEyiAYTAAqejwButVgEcwAKns4XAAqexwBuueIC7AQABFsACp7eAwAKntcAbq/6ByMAATXYAwABN0AGNwAKnv8AbrngcwAKnwYXAAqe/wBuueIENAQABlADAAE3IPRzAAqfUg8ACp83AG60vgIIBAAEcwAKn3RzAAqfZgMACp9jAG6v+gtEBAAGFwAKn2sAbrngAwABNVY7tAQABHMACp+coAAAAAAAA8D+BBgEAAYLAAqfpwBusKgDAAEteAMAAQvcAwABNV0XAAqfyAcACp/vAAqf9AACDZmADwABMogGEwAKn/8AbrVYBHMACqA+FwAKoDcAbr1SAuwEAARbAAqgTgcACqBHAG6wUgcjAAE12AMAATdABjcACqBvAG69UHMACqB2FwAKoG8Abr1SBDQEAAZQAwABNyD0cwAKoMIPAAqgpwButL4CCAQABHMACqDkcwAKoNYHAAqg0wBusFILRAQABhcACqDbAG69UAMAATVWO7QEAAYLAAqg/wBusKgDAAEL3AMAATVdKwAKoSAGDwAKoT8AbrS8GwABC+oCbwAKoXsACqHjAAqlJAwCAjAFqwAKoX2ADwABN76vxAAABA8ACqHrAAqlJAAAAAQEBwAKogwAAAIIdWwAAYAPAAErYAT4CScACqJAewAKolMAARnUCAAIugMACqKTAG7BYAErAAqiyASk/SsACqMMBIiIiJcACqNAAgMACqMrAG7BYYAPAAELoABzAAqjxFsACqOsUwAKo5cAbsFgAAWADwABC6JrGwABC8YCMAQABFsACqPQumsbAAELxAMAAQEMAHMACqRIWwAKpCxTAAqkFwBuwWAABYAPAAELohBfAAELygIwBAAEWwAKpFS6EF8AAQvIAv1UAHMACqTgWwAKpLRTAAqknwBuwWAABYAPAAELongrAAELzgIwBAAEWwAKpOy6eCsAAQvMAwABNxgbAAEMAgJvAAqlOwAKpYsACqZMBAIIcAWrAAqlPYAPAAE3vq/EAAAEDwAKpa8ACqZMAAAAAAAAAYAPAAEyiAUrAAqluAR7AAqluvjwDAAMWwAKpeS6axsAAQvEWwAKpgC6EF8AAQvIWwAKpiC6eCsAAQvMABsAAQvyAm8ACqlLAAqpiwAKuAAABnhO+IAAAAAEDwAKqcMACrgAAAAABAQHAAqp+AAAAnhRdA8AATUYBYAPAAELoAABgA6vxAT4GScACqo0cwAKqmYDAAqqRwBux9YCMAQABKwDAAE1wSsACqqgBHsACqq+r9QEAAZMAP07AAqrLwAKq1QABhl9gA8AATKIBHMACquYWwAKq34DAAqrXwBux9YHIwABNdoPGAQABasACquhgA8AATKJUAMAATcpOwAKrDcACqxkAAZ4VYAOr8QEewAKrG6v1AQABgcACqyTAG7JGAE7AAqs5wAKrRgAAnhZgA8AATKIBk0XAAqtPAcACq1jAAqtkAACeF2ADwABMogGTARzAAqt1hMACq2nAG7LJgLsBAAEWwAKrf4DAAqt3wBux9YHIwABNdgDAAE3QAYzAAquJwBuyyRzAAquHhMACq4nAG7LJgQ0BAAGUAMAATchBPgdOwAKrq8ACq7IAAZ4YYAPAAELoARzAAqu7gMACq7TAG7H1gtEBAAGEwAKrvMAbsskAwABNVUnAAqvQHMACq9uFwAKr1MAbszGAjAEAASsAwABC+kLAAqvsAD89i8ACq/zAG7KvHMACrBeEwAKsC8AbssmDxgEAAWrAAqwZYAPAAEyiVADAAE3KPRzAAqw+gsACrDLAG7KJj5kDAAMcwAKsVWrAAqxHYAPAAEyiGoENAQABg8ACrFfAG7KvAMAATcgcwAKsgBbAAqx6FsACrHSFwAKsbcAbszGaxsAAQvEiwABAL4CjAQABasACrIlgA8AATKK+AQDAAEy8asACrJlgA6vnnBgArAI9HMACrL+CwAKss8AbsomPoQMAAxzAAqzUasACrMpgA8AATKIYgQ0BAAGDwAKs1sAbsq8AwABNyBbAAqz6FsACrPOFwAKs7MAbszGEF8AAQvKMN79DasACrP5gA6vnnBgArAo9HMACrSSCwAKtGMAbsomPoQMAAxzAAq05asACrS9gA8AATKIcgQ0BAAGDwAKtO8Absq8AwABNyBbAAq1fFsACrViFwAKtUcAbszGEF8AAQvKMOL9EasACrWNgA6vnnBgArAo9HMACrYmCwAKtfcAbsomPoQMAAxzAAq2hasACrZRgA8AATKKEMIENAQABg8ACraPAG7KvAMAATcgWwAKtwIXAAq25wBuzMZ4KwABC82rAAq3MYAOr55wYAKwKSsACreoBgsACrfHAG7KJBsAAQv2Am8ACrgXAAq4YwAKuUAAAgO8BasACrgZgA8AATe+r8QAAAQPAAq4gwAKuUAAAAAAAAABgA8AATokBSsACriYBJMACrlAHJ54ZFsACrjMumsbAAELxJ4QxFsACrjsuhBfAAELyJ4QxFsACrkQungrAAELzJ4QoAAAbp0cAG6fKABuoGwAbqOsAG6maABur1AAbsCEAG7FVABuxyQAbtWgAG7XjAAAACgLAAEMDgKKBKoEwhBIDnhoAAAFgA8AATe8AAAEEwABDBoCigoOCigmZEb4gAGADwABMogABBcAAQw2AooILgguCdACeGwADgieCdAAAAAEBAYItAAAEmRFgA8AATKIAAGADwABDAwE/AwgBwABDBoAAwBu2ZQwAQCEcgk2AgkXAG7ZlgIwBAAErAMAATcaCRYJUASeeHAkBggvAAE4FAAAAAAMGwABDCICigwSDCIMgAACeHQAAAAEDgxODIAAAAAAAAABgA8AATKIBSoMZARaDGS6ZEb4gwABDBgbAAEMJgKKDJYM/g9sDAICMAWqDJmADwABN76vxAAABA4NBg9sAAAABAQGDSgAAAIIdWwAAYAPAAErYAT4CSYNXIRyDZxaDWy6NMcAATgOAjAEAARaDcICDasAbtxqNMcAATgMAwABN/EqDgwEqP0qDlQEiJYOiAICDnMAbtxpgA8AAQwMAHIPNFoPFFIO/wBu3GgABYAPAAEMDmRG+IMAAQwaAjAEAARaD0C6ZEb4gwABDBgDAAE3GBsAAQwuAooPgg/SEEAEAghwBaoPhYAPAAE3vq/EAAAEDg/2EEAAAAAAAAABgA8AATKIBSoQAARaECBaEAC6ZEb4gwABDBoIcwABN5wAAG7a3ABu27wAbt6gAG7f0AAAAAwLAAEMOgKKEsoS4iysDnh4AAAFgA8AATe8AAAIEwABDEYCihXiFqgSeH74gAF0DwABNeAJgA8AATJhgA8AAQwMBMoWoYAPAAEyYYAPAAEMDAATAAEMSgKKF04YGBJ4gviAAXQPAAE14AmADwABDA2ADwABMmAEyhgRgA8AAQwNgA8AATJgAAAMGwABDFYCihSuFM4VOBAGAir4gAAAAAQOFRIVOAAAAAAAAAGADwABDDgFKhUoBKwbAAEMXgKKHqYe/iOQAAZ4hAAAAAQOH0IjkAAAAAQEBh9oAAAAbYAPAAEyYAABgA8AAQwMBPgJAIRyH+oCH8cAbuOCAjAEAASsAwABMnYfxiAEBJ54iSogoARyIPRqIL8AAQxGDaAIAAoCIScAbuOA0iFMDiFOI3wAAAAAAAABgA8AAQwMBPgJOiGiIbwABiPFgA8AATKIBHohxvl8BAAGAiITAG7jgAEqIlQEjIRyIo4GInMAbuUmAjAEAASsAwABNxh+IvMAAQw0BAAGBiMrAG7lJACsBYAPAAEMDAMAATZMGwABDGICiikKKUospAAGeIwAAAAEDimeLKQAAAAEBAYp3AAAAiPFgA8AAQwMAAGADwABMmAE+AkAhHIqTgIqMwBu5woCMAQABKwDAAEMJioyKmgEnniRKir8BHIrVGorGwABDEoNoAgACgIrqwBu5wjSK8gOK8oskAAAAAAAAAGADwABMmAFKivgBHor4vmABAAEcixaAiw/AG7nCnh0AAAAAwABDCAAAwABNkwAAG7iRABu4wAAbuaIAG7pPAAAAAwLAAEMZgKOA74D0hFoLniUAAAFgA8AATe8AAAoEwABDG4CjgPSA9AmB3QBgA8AATKIABMAAQx2Ao4D0gPQJhv2+IABgA8AATokABMAAQx6Ao4D0gPQGgQEAXQPAAE1GAWADwABDGQFqAF0DwABNRgFgA8AAQxnAAEdHBMAAQx+Ao4FUgVQGgYwAYAPAAEMZAWoAYAPAAEMZwABGqATAAEMggKOCHYIdBoCCAGADwABDGQFqAGADwABDGcAARr8EwABDIYCjgvuC+waDbABgA8AAQxkBagBgA8AAQxnAAEbWBMAAQyKAo4Npg2kGni0AYAPAAEMZAWoAYAPAAEMZwABG7QTAAEMjgKODp4OnBp4uAGADwABDGQFqAGADwABDGcAARwQEwABDJICjhA+EDwaVgABgA8AAQxkBagBgA8AAQxnAAEcbBMAAQyWAo4RWhFYGni8AYAPAAEMZAWoAYAPAAEMZwABHMwEFwABDKYCjgPSA9IRaAQAAA4D0hFoAAAACAgKA9AAABIHdYAPAAEyiAID0AAAEhv1gA8AATokAAGADwABDGQE/AwgAwABDG4AAwBu76AgAwABDHYEAwBu79gkAAMAATgUAAAAAAQbAAEMngKOA9ID0hFoAAIDvAAAAAQOA9IRaAAAAAAAAAGADwABOiQFKAAEPAC7AAEMdAAAbvDIAG7xkAAAAAQLAAEMqgKOEfYSChZ4LnjAAAAFgA8AATe8AAAgEwABDLICjhIKEggmB3QBgA8AATKIABMAAQy6Ao4SChIIJhv2+IABgA8AATokABMAAQy+Ao4SChIIGgQEAXQPAAE1GAWADwABDKgFqAF0DwABNRgFgA8AAQyrAAEfeBMAAQzCAo4S8hLwGnjYAYAPAAEMqAWoAYAPAAEMqwABHbgTAAEMxgKOE6oTqBp43AGADwABDKgFqAGADwABDKsAAR4UEwABDMoCjhRqFGgaeOABgA8AAQyoBagBgA8AAQyrAAEecBMAAQzOAo4VihWIGnjkAYAPAAEMqAWoAYAPAAEMqwABHswTAAEM0gKOFloWWBocCAGADwABDKgFqAGADwABDKsAAR8oBBcAAQziAo4SChIKFngEAAAOEgoWeAAAAAgIChIIAAASB3WADwABMogCEggAABIb9YAPAAE6JAABgA8AAQyoBPwMIAMAAQyyAAMAbvbEIAMAAQy6BAMAbvb8JAADAAE4FAAAAAAEGwABDNoCjhIKEgoWeAACA7wAAAAEDhIKFngAAAAAAAABgA8AATokBSgABDwAuwABDLgAAG737ABu+LQAAAAECwABDOYCjhc2F0oasC546AAABYAPAAE3vAAAGBMAAQzuAo4XShdIJgd0AYAPAAEyiAATAAEM9gKOF0oXSCYb9viAAYAPAAE6JAATAAEM+gKOF0oXSBoEBAF0DwABNRgFgA8AAQzkBagBdA8AATUYBYAPAAEM5wABIPwTAAEM/gKOGIYYhBpvhAGADwABDOQFqAGADwABDOcAAR/0EwABDQICjhnOGcwaePgBgA8AAQzkBagBgA8AAQznAAEgUBMAAQ0GAo4akhqQGhwIAYAPAAEM5AWoAYAPAAEM5wABIKwEFwABDRYCjhdKF0oasAQAAA4XShqwAAAACAgKF0gAABIHdYAPAAEyiAIXSAAAEhv1gA8AATokAAGADwABDOQE/AwgAwABDO4AAwBu/NggAwABDPYEAwBu/RAkAAMAATgUAAAAAAQbAAENDgKOF0oXShqwAAIDvAAAAAQOF0oasAAAAAAAAAGADwABOiQFKAAEPAC7AAEM9AAAbv4AAG7+yAAAAAQLAAENGgKOG3YbjqJqDnj8AAAFgA8AATe8AABwEwABDSICjiq2KtgmeQABgA8AAS3QABMAAQ0mAo4sIiw4JitgAYAPAAEMZAATAAENKgKOLbYtxCZmTAGADwABDKgAEwABDS4Cji8OLzQmeQQBgA8AAQzkABMAAQ0yAo4wpjC8JnkIAYAPAAEyiAATAAENNgKOM6oz7CZ5DAGADwABMogAEwABDToCjjXmNggmeRABgA8AAS1AABMAAQ0+Ao44AjgkJnkUAYAPAAEtQAATAAENQgKOOZo50CZ5GAGADwABLUAAEwABDUYCjjtGO3wmeRwBgA8AAS1AABMAAQ1KAo5AYkB8JnkgAYAPAAEyiAATAAENTgKOQ1pDeCZ5JAGADwABK2AAEwABDVICjkmOSbgmeSgBgA8AAStgABMAAQ1WAo5Ook7AJnksAYAPAAEtQAATAAENWgKOUjZSYCZ5MAGADwABLUAAEwABDV4CjlXGVfAmeTQBgA8AAS1AABMAAQ1iAo5aWlp4JmxAAYAPAAEtQAATAAENZgKOXV5diCZ5OAGADwABLUAAEwABDWoCjmRWZGQmDwwBgA8AAS1AABMAAQ1uAo5l8mYcJnk8AYAPAAEtQAATAAENcgKOZ6pn1CZ5QAGADwABLUAAEwABDXYCjmoGaigmeUQBgA8AAS1AABMAAQ16Ao5sWmx8JnlIAYAPAAEtQAATAAENfgKOf6J/zCZ5TAGADwABLUAAEwABDYICjocihzAmeVABgA8AAS1AABMAAQ2GAo6IaoiYJnlUAYAPAAEyiAATAAENigKOiv6LLCZ5WAGADwABLUAAEwABDY4Cjo2SjcAmeVwBgA8AAS1AAAQXAAENogKOHM4c5ilgBAAADh0SKWAAAABwAAByHUAAABJ5AYAPAAEt0AWqHZWADwABLdICIh3QAAASK2GADwABDGQFqh4tgA8AAQxnAAEaoh5wAAASZk2ADwABDKgFqh7VgA8AAQyrAAEduh8UAAASeQWADwABDOQFqAGABwABNrAKH2gAABJ5CYAPAAEyiAWqH42ADwABMohqH7wAABJ5DYAPAAEyiAWqIA2ADwABMohqIDwAABJ5EYAPAAEtQAWqIG2ADwABLULgBiCkAAASeRWADwABLUAFqiDVgA8AAS1C4AYhDAAAEnkZgA8AAS1ABaohUYAPAAEtQuAGIYgAABJ5HYAPAAEtQAWqIc2ADwABLULgBiIEAAASeSGADwABMogFqiItgA8AATKIaiJcAAASeSWADwABK2AFqiKJgA8AAStg/iLIAAASeSmADwABK2AFqiMBgA8AAStg/iNAAAASeS2ADwABLUAFqiNtgA8AAS1C4AYjpAAAEnkxgA8AAS1ABaoj3YAPAAEtQuAGJBQAABJ5NYAPAAEtQAWqJE2ADwABLULgBiSEAAASbEGADwABLUAFqiSxgA8AAS1C4AYk6AAAEnk5gA8AAS1ABaolIYAPAAEtQuAGJVgAABIPDYAPAAEtQAWqJXWADwABLULgBiWsAAASeT2ADwABLUAFqiXlgA8AAS1C4AYmHAAAEnlBgA8AAS1ABaomVYAPAAEtQuAGJowAABJ5RYAPAAEtQAWqJr2ADwABLULgBib0AAASeUmADwABLUAFqiclgA8AAS1C4AYnXAAAEnlNgA8AAS1ABaonlYAPAAEtQuAGJ8wAABJ5UYAPAAEtQAWqJ+mADwABLULgBiggAAASeVWADwABMogFqihdgA8AATKIaiiMAAASeVmADwABLUAFqijJgA8AAS1C4AYpAAAAEnldgA8AAS1ABaopPYAPAAEtQuAFgA8AAQ0YBPx0IAcAAQ0iAAMAbwmAIAcAAQ0mBAMAbwnkIAcAAQ0qCAMAbwpQIAcAAQ0uDAMAbwq8IAcAAQ0yEAMAbwsYIAcAAQ02FAMAbwt4IAcAAQ06GAMAbwvYIAcAAQ0+HAMAbww8IAcAAQ1AUAMAbwygIAAgBwABDURQAwBvDQQkACAHAAENSFADAG8NaCgAIAcAAQ1MUAMAbw3ILAAgBwABDVBQAwBvDigwACAHAAENVFADAG8OiDQAIAcAAQ1YUAMAbw7sOAAgBwABDVxQAwBvD1A8ACAHAAENYFADAG8PtEAAIAcAAQ1kUAMAbxAYRAAgBwABDWhQAwBvEHxIACAHAAENbFADAG8Q4EwAIAcAAQ1wUAMAbxFEUAAgBwABDXRQAwBvEahUACAHAAENeFADAG8SDFgAIAcAAQ18UAMAbxJwXAAgBwABDYBQAwBvEtRgACAHAAENhFADAG8TOGQAIAcAAQ2IUAMAbxOYaAAgBwABDYxQAwBvE/xsACQGHOcAATgUAAAAAAgbAAENlgKOjdaOIo8EAAIDvAWqjdmADwABN76vxAAABA6OQo8EAAAAAAAAAYAPAAE6JAUqjlgEko8EFJ55YFqOnLp5EwABDTieeWRajti6eRcAAQ08nhCgGwABDZoCjpBakHaiYAACeWgAAAAEDpCmomAAAAAAAAABgA8AATokBPgFKpDIBJKQyUxakOy6NMcAATgMnhCcnnlsWpGMunkDAAENIJ4QxJ55cFqSHLorYwABDSSeEMSeeXRakpi6Zk8AAQ0onhDEnnl4WpMkunkHAAENLJ4QxJ55fFqTuLp5CwABDTCeEMSeeYBalGi6eQ8AAQ00nhDEnnmEWpUkunkTAAENOJ4QxJ55iFqVwLp5FwABDTyeEMSeeYxalnC6eRsAAQ1AnhDEnnmQWpc0unkfAAENRJ4QxJ55lFqX3Lp5IwABDUieEMSeeZhamHi6eSsAAQ1QnhDEnnmcWpkYunkvAAENVJ4QxJ55oFqZuLp5MwABDVieEMSeeaRammS6eTcAAQ1cnhDEnnmoWpsEumxDAAENYJ4QxJ55rFqbpLp5OwABDWSeEMSeebBanDS6Dw8AAQ1onhDEnnm0WpzEunk/AAENbJ4QxJ55uFqdcLp5QwABDXCeEMSeebxanhS6eUcAAQ10nhDEnnnAWp6wunlLAAENeJ4QxJ55xFqfVLp5TwABDXyeEMSeechan+S6eVMAAQ2AnhDEnnnMWqB4unlXAAENhJ4QxJ550FqhLLp5WwABDYieEMSeedRaoeC6eV8AAQ2MnhCgAABvGpgAbxv4AG8jtAAAAAgLAAENpgKOo1Kjaqg6DnnYAAAFgA8AATe8AAAEEwABDa4CjqgiqDAk7AF0DwABNRgFgA8AAQ0YAAQXAAENtgKOpIKkmqV4BAAADqTepXgAAAAEAAAGpPwAABDtdA8AATUYBYAPAAENGAWqpRl0DwABNRgFgA8AAQ0bAAEhTYAPAAENpAT8CCAHAAENrgADAG8lTCQGpJsAATgUAAAAAAAAAG8mdAAAAAALAAENugKSByIHOrZ6DnncAAAFgA8AATe8AACwEwABDcYCkghuCLgaeeL4gAGADwABMogFqgipgA8AATKIUBMAAQ3KApIJDglwGnnm+IABgA8AATKIBaoJYYAPAAEyiFgTAAENzgKSCcYKLBp56viAAYAPAAEyiAWqCh2ADwABMohgEwABDdICkgqCCuwaee74gAGADwABMogFqgrdgA8AATKIcBMAAQ3WApILQgugGnny+IABgA8AATKIBaoLkYAPAAEyiVATAAEN2gKSC/YMXBp59viAAYAPAAEyiAWqDE2ADwABMom8EwABDd4CkgyyDRAaefr4gAGADwABMogFqg0BgA8AATKJyBMAAQ3iApINZg3EGnn++IABgA8AATKIBaoNtYAPAAEyidQTAAEN5gKSDhoOiBp6AviAAYAPAAEyiAWqDnmADwABMooctBMAAQ3qApIO3g+MGnoG+IABgA8AATKIBaoPfYAPAAEyiwABIWwTAAEN7gKSD+IQmBp6CviAAYAPAAEyiAWqEIWADwABMooaDBMAAQ3yApIQ7hFgGnoO+IABgA8AATKIBaoRTYAPAAEyiwABIXwTAAEN9gKSEbYSCBp6EviAAYAPAAEyiAWqEfWADwABMosAASGMEwABDfoCkhJeEqwaehb4gAGADwABMogFqhKZgA8AATKLAAEhnBMAAQ3+ApITAhNYGnoa+IABgA8AATKIBaoTRYAPAAEyiwABIawTAAEOAgKSE64UVBp6HviAAYAPAAEyiAWqFEGADwABMosAASHEEwABDgYCkhSqFVAaeiL4gAGADwABMogFqhU9gA8AATKKjBwTAAEOCgKSFaYWBBp6JviAAYAPAAEyiAWqFfGADwABMoqMNBMAAQ4OApIWWha4Gnoq+IABgA8AATKIBaoWpYAPAAEyioxkEwABDhICkhcOF6waei74gAGADwABMogFqheZgA8AATKKjHwTAAEOFgKSGAIYpBp6MviAAYAPAAEyiAWqGJGADwABMoqMlBMAAQ4aApIc6hz8Jgd0AYAPAAEyiAATAAEOHgKSHxIfnBp6NAGADwABDbgFqh9pgA8AAQ27AAEh3BMAAQ4iApIiDiLIGno4AYAPAAENuAWqIn2ADwABDbsAASIMEwABDiYCkiZSJxQaejwBgA8AAQ24BaomxYAPAAENuwABIjwTAAEOKgKSKp4raBp6QAGADwABDbgFqisVgA8AAQ27AAEibBMAAQ4uApIu6i+cGnpEAYAPAAENuAWqL1WADwABDbsAASKcEwABDjICkjMeM+AaekgBgA8AAQ24BaozkYAPAAENuwABIswTAAEONgKSNsY3eBp6TAGADwABDbgFqjcxgA8AAQ27AAEi/BMAAQ46ApI6XjsQGnpQAYAPAAENuAWqOsmADwABDbsAASMsEwABDj4Ckj66P4waelQBgA8AAQ24Bao/NYAPAAENuwABI1wTAAEOQgKSRDJFhBp6WAGADwABDbgFqkTtgA8AAQ27AAEjkBMAAQ5GApJKLkuIGnpcAYAPAAENuAWqSu2ADwABDbsAASPMEwABDkoCklOWVGgaemABgA8AAQ24BapUEYAPAAENuwABJAATAAEOTgKSVb5WUBonHAGADwABDbgFqlYZgA8AAQ27AAEkPBMAAQ5SApJX1lhgGnpkAYAPAAENuAWqWC2ADwABDbsAASR4EwABDlYCklmyWkwaemgBgA8AAQ24BapaEYAPAAENuwABJLQTAAEOWgKSZN5mGBp6bAGADwABDbgFqmWNgA8AAQ27AAEk8BMAAQ5eApJwonHcGnpwAYAPAAENuAWqcVGADwABDbsAASUsEwABDmICknV2djQaenQBgA8AAQ24Bap18YAPAAENuwABJWATAAEOZgKSfYp+NBp6eAGADwABDbgFqn3xgA8AAQ27AAEllBMAAQ5qApKCxoPwGnp8AYAPAAENuAWqg22ADwABDbsAASXIEwABDm4CkoiGibgaeoABgA8AAQ24BaqJMYAPAAENuwABJfwTAAEOcgKSjIaajBoEBAF0DwABNeAJgA8AATKJgA8AAQ24BaqNAXQPAAE14AmADwABMomADwABDbsAAShEBBcAAQ6GApIHigeiCBQGAir4gAAOB+YIFAAAAAQEBgf8AAASB3WADwABMogAAYAPAAENuAT8CCAHAAEOGgADAG8/2CQGB6MAATgUAAAAAAQbAAEOegKSmqKa7rZwAAIDvAWqmqWADwABN76vxAAABA6bDrZwAAAAAAAAAYAPAAE6JAT4CR6bMFqbULoHdwABDhhUBpuhqpuhgA8AATKIUAD4BSqb8ASeeoQGnJWqnJWADwABMohYAPgFKpz8BJ56iAaduaqduYAPAAEyiGAA+AUqniQEnnqMBp7lqp7lgA8AATKIcAD4BSqfVASeepAGoBmqoBmADwABMolQAPgFKqB8BJ56lAahNaqhNYAPAAEyibwA+AUqoaAEnnqYBqJhqqJhgA8AATKJyAD4BSqixASeepwGo32qo32ADwABMonUAPgFKqPgBJ56oAakmaqkmYAPAAEyihy0APgFKqUMBJ56pAal1aql1YAPAAEyiwABIWwA+AUqpogEnnqoBqeRqqeRgA8AATKKGgwA+AUqqEgEnnqsBqlVqqlVgA8AATKLAAEhfAD4BSqpyASeerAGqpGqqpGADwABMosAASGMAPgFKqrkBJ56tAarjaqrjYAPAAEyiwABIZwA+AUqq9wEnnq4BqyBqqyBgA8AATKLAAEhrAD4BSqs2ASeerwGrYWqrYWADwABMosAASHEAPgFKq4sBJ56wAavKaqvKYAPAAEyiowcAPgFKq/QBJ56xAawzaqwzYAPAAEyiow0APgFKrEsBJ56yAax9aqx9YAPAAEyioxkAPgFKrJUBJ56zAazCaqzCYAPAAEyiox8APgFKrOoBJ560Aa0naq0nYAPAAEyioyUAPgFKrVABJ561Sq2NASsAABvQJwAb0msAAAABAsAAQ6KApK5/roXAAGSag562AAABYAPAAE3vAAAwBMAAQ6WApK6orscGnre+IABgA8AATKIBaq7DYAPAAEyiFATAAEOmgKSu3K71Bp64viAAYAPAAEyiAWqu8WADwABMohYEwABDp4CkrwqvJAaeub4gAGADwABMogFqryBgA8AATKIYBMAAQ6iApK85r1EGnrq+IABgA8AATKIBaq9NYAPAAEyiHATAAEOpgKSvZq+BBp67viAAYAPAAEyiAWqvfWADwABMolQEwABDqoCkr5avrwaevL4gAGADwABMogFqr6tgA8AATKJvBMAAQ6uApK/Er+MGnr2+IABgA8AATKIBaq/fYAPAAEyicgTAAEOsgKSv+LARBp6+viAAYAPAAEyiAWqwDWADwABMonUEwABDrYCksCawUAaev74gAGADwABMogFqsExgA8AATKKHLQTAAEOugKSwZbB9Bp7AviAAYAPAAEyiAWqweWADwABMosAASFsEwABDr4CksJKwrQaewb4gAGADwABMogFqsKhgA8AATKKGgwTAAEOwgKSwwrDdBp7CviAAYAPAAEyiAWqw2GADwABMosAASF8EwABDsYCksPKxDQaew74gAGADwABMogFqsQhgA8AATKLAAEhjBMAAQ7KApLEisTsGnsS+IABgA8AATKIBarE2YAPAAEyiwABIZwTAAEOzgKSxULFoBp7FviAAYAPAAEyiAWqxY2ADwABMosAASGsEwABDtICksX2xmgaexr4gAGADwABMogFqsZVgA8AATKLAAEhxBMAAQ7WApLGvsc8Gnse+IABgA8AATKIBarHKYAPAAEyiowcEwABDtoCkseSx/gaeyL4gAGADwABMogFqsflgA8AATKKjDQTAAEO3gKSyE7I4Bp7JviAAYAPAAEyiAWqyM2ADwABMoqMZBMAAQ7iApLJNsmkGnsq+IABgA8AATKIBarJkYAPAAEyiox8EwABDuYCksn6ymQaey74gAGADwABMogFqspRgA8AATKKjJQTAAEO6gKSyrrLKBp7MviAAYAPAAEyiAWqyxWADwABMoqMrBMAAQ7uApLLfsvYGns2+IABgA8AATKIBarLxYAPAAEyiwABKLATAAEO8gKS0H7QkCYHdAGADwABMogAEwABDvYCktam14gaezgBgA8AAQ6IBarXJYAPAAEOiwABKMgTAAEO+gKS3aLeVBp7PAGADwABDogFqt4JgA8AAQ6LAAEo+BMAAQ7+ApLiguM8GntAAYAPAAEOiAWq4u2ADwABDosAASkoEwABDwICkud26CAae0QBgA8AAQ6IBarn2YAPAAEOiwABKVgTAAEPBgKS6ybr6Bp7SAGADwABDogFquuVgA8AAQ6LAAEpiBMAAQ8KApLuAu68GntMAYAPAAEOiAWq7m2ADwABDosAASm4EwABDw4CkvPC9FwaVXABgA8AAQ6IBar0HYAPAAEOiwABKewTAAEPEgKS9zb3+Bp7UAGADwABDogFqvelgA8AAQ6LAAEqKBMAAQ8WApL60vuEGntUAYAPAAEOiAWq+zmADwABDosAASpcEwABDxoCkwABALMAAQGUGntYAYAPAAEOiAWrAAEBMYAPAAEOiwABKowTAAEPHgKTAAEGJwABBtgae1wBgA8AAQ6IBasAAQaNgA8AAQ6LAAEqvBMAAQ8iApMAAQq/AAEL+Bp7YAGADwABDogFqwABC2mADwABDosAASrsEwABDyYCkwABEKMAARFMGntkAYAPAAEOiAWrAAERBYAPAAEOiwABKyATAAEPKgKTAAEU5wABFaAae2gBgA8AAQ6IBasAARVRgA8AAQ6LAAErXBMAAQ8uApMAARlDAAEaBBp7bAGADwABDogFqwABGbGADwABDosAASuQEwABDzICkwABLaMAAS5kGntwAYAPAAEOiAWrAAEuEYAPAAEOiwABK8QTAAEPNgKTAAE2QwABNvwae3QBgA8AAQ6IBasAATatgA8AAQ6LAAEsABMAAQ86ApMAAURDAAFE7Bp7eAGADwABDogFqwABRKWADwABDosAASw8EwABDz4CkwABR/MAAUiUGnt8AYAPAAEOiAWrAAFIUYAPAAEOiwABLHgTAAEPQgKTAAFQgwABUUwae4ABgA8AAQ6IBasAAVD1gA8AAQ6LAAEstBMAAQ9GApMAAVajAAFXhBp7hAGADwABDogFqwABVyGADwABDosAASzwEwABD0oCkwABXEMAAVz0GnuIAYAPAAEOiAWrAAFcqYAPAAEOiwABLSQTAAEPTgKTAAFkPwABZUgae4wBgA8AAQ6IBasAAWTRgA8AAQ6LAAEtWBMAAQ9SApMAAWffAAF16BoEBAF0DwABNeAJgA8AATKJgA8AAQ6IBasAAWhRdA8AATXgCYAPAAEyiYAPAAEOiwABL9gEFwABD2YCks42zk7OuAYCKviAAA7Ois64AAAABAQGzqAAABIHdYAPAAEyiAABgA8AAQ6IBPwIIAcAAQ7yAAMAb2bIJAbOTwABOBQAAAAABBsAAQ9aApMAAXX/AAF2SwABkmAAAgO8BasAAXYBgA8AATe+r8QAAAQPAAF2awABkmAAAAAAAAABgA8AATokBPgJHwABdoxbAAF2rLoHdwABDvBcBwABdv2rAAF2/YAPAAEyiFAA+AUrAAF3fASee5AHAAF4SasAAXhJgA8AATKIWAD4BSsAAXiwBJ57lAcAAXllqwABeWWADwABMohgAPgFKwABedAEnnuYBwABeomrAAF6iYAPAAEyiHAA+AUrAAF67ASee5wHAAF7nasAAXudgA8AATKJUAD4BSsAAXwMBJ57oAcAAXzJqwABfMmADwABMom8APgFKwABfTAEnnukBwABfeWrAAF95YAPAAEyicgA+AUrAAF+ZASee6gHAAF/MasAAX8xgA8AATKJ1AD4BSsAAX+YBJ57rAcAAYBNqwABgE2ADwABMooctAD4BSsAAYD4BJ57sAcAAYHxqwABgfGADwABMosAASFsAPgFKwABglQEnnu0BwABgwWrAAGDBYAPAAEyihoMAPgFKwABg3AEnnu4BwABhCmrAAGEKYAPAAEyiwABIXwA+AUrAAGEmASee7wHAAGFVasAAYVVgA8AATKLAAEhjAD4BSsAAYXABJ57wAcAAYZ5qwABhnmADwABMosAASGcAPgFKwABhtwEnnvEBwABh42rAAGHjYAPAAEyiwABIawA+AUrAAGH7ASee8gHAAGImasAAYiZgA8AATKLAAEhxAD4BSsAAYkMBJ57zAcAAYnNqwABic2ADwABMoqMHAD4BSsAAYpMBJ570AcAAYsZqwABixmADwABMoqMNAD4BSsAAYuABJ571AcAAYw1qwABjDWADwABMoqMZAD4BSsAAYzIBJ572AcAAY2pqwABjamADwABMoqMfAD4BSsAAY4YBJ573AcAAY7VqwABjtWADwABMoqMlAD4BSsAAY9ABJ574AcAAY/5qwABj/mADwABMoqMrAD4BSsAAZBoBJ575AcAAZElqwABkSWADwABMosAASiwAPgFKwABkYAEnnvpKwABkiQErAAAb2eMAG9z1AAAAAQLAAEPagKTAAGVjwABlg8AAhHwDnvsBasAAZWRgA8AASp8DAAFgA7DCAAAAAQXAAEPk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Q/cBPgNAIRyKjIKKisAb6zGAjAEAASsAwABNxoqKipMASYqaIhyKoICKnsAb6xeAjAEAASsAwABN/AAciq2BiqvAG+skgIwBAAErAMAATfxKirwBKz9Kis0BHIraaorUXQPAAE1GAWADwABD98AATQOC0QEAASaLMQAciyUcix0eitu+dQMAAzWK5gAAAQBgA8AATKIBNYrmAAABAGADwABD9wGAiubAG+sXIxyK5oOK5sAb69uAjAEAASsAwABN/CsWiumDiubAG+vbgd3AAEP5AWADwABMoiMciuaDiubAG+vNgIwBAAErAMAATcYWivlqivJgA8AAQ/fAAEy5gd3AAEP5g4rmwBvrzQFgA8AATKI1iwAAAAEAYAPAAEyiATWLAAAAAQBgA8AAQ/cBgYsAwBvrJCMciwCDiwDAG+xmgIwBAAErAMAATfwrFosDg4sAwBvsZoHdwABD+QFgA8AATKIjHIsAg4sAwBvsWICMAQABKwDAAE3GFosTaosMYAPAAEP3wABMuYHdwABD+YOLAMAb7FgBYAPAAEyigosawBvrMQCblQAAAADAAEtljvECAAKTNwgAwABN3WADwABMogDAAE1VBsAARAiApYtBi1SMjQAAgO8BaotCYAPAAE3vq/EAAAEDi1yMjQAAAAAAAABgA8AATokBPgFKi2UBHIyCaotsXQPAAE14AmADwABMomADwABOicAATXyC0QEAARaMgy6B3cAAQ/kAwABNjAAAG+r3ABvtDAAb7XYAAAACAsAARAyApZaplq+qDoOfMwAAAWADwABN7wAAAwTAAEQOgKWmcqZ5CZ80AGADwABOiQAEwABED4Clp1KnVwkiAGADwABMogAEwABEEYClp22nfgafNb4gAGADwABMogFqp31gA8AATKIcCAXAAEQcgKWZD5kVmaQBAAADmSCZpAAAAAIBApkmAAAEnzRgA8AATokAmTYAAAQiYAPAAEyiAWqZPmADwABMohQAYAPAAEQMAT8HCAHAAEQOgADAG+4MCAHAAEQPgQDAG+4aDABAIRyZVICZTMAb7gyAjAEAASsAwABOmJlMmVsADABAHJl0FpltgJllwBvuDIHIwABOjYCMAQABlwDAAE3GmWWZeAAMAEAhHJmIgZmCwBvuGoCMAQABKwDAAE3GmYKZjwAMAEAcmZ+BmZnAG+4agV4BAAGTAMAATdOZmZmjAAkBmRXAAE4FAAAAAAXAAEQdgKWZ+poAmjUBiEMAA5oSmjUAAAABAQGaGgAAAJ80YAPAAE6JAABgA8AARAwBPwEKAJolwABEHAIAAoCaKsAb7vqUAAXAAEQegKWajJqSmsgBnzYAA5qlmsgAAAABAQGarQAAAJ80YAPAAE6JAABgA8AARAwBPwEKAJq4wABEHAIAAoCavcAb70KTAAXAAEQfgKWcipyQnMUBnzcAA5ylnMUAAAAAAAAAYAPAAEQMAT8DCADAAEQOJ584CADAAEQPlAkBnJDAAE4FAAAAAAXAAEQggKWfl5+dn9QBnzkAA5+0n9QAAAAAAAAAYAPAAEQMAT8DCADAAEQOJ5DUCADAAEQPlAkBn53AAE4FAAAAAAXAAEQhgKWhbKFyoa0BnzoAA6GNoa0AAAAAAAAAYAPAAEQMAT8DCADAAEQOJ587CADAAEQPlAkBoXLAAE4FAAAAAAXAAEQigKWjWaNfo54BnzwAA6N+o54AAAAAAAAAYAPAAEQMAT8DCADAAEQOJ589CADAAEQPlAkBo1/AAE4FAAAAAAXAAEQjgKWlRaVLpYUBnz4AA6VlpYUAAAAAAAAAYAPAAEQMAT8DCADAAEQOJ58/CADAAEQPlAkBpUvAAE4FAAAAAAUGwABEE4ClnaWdrZ5HBAGfQAAAAAEDncWeRwAAAAEBAZ3KAAAAImADwABMogAAYAPAAEQMAT4DQByd5ICd3sAb8NmBXgEAAZQAwABN053enegAQByd/ICd9sAb8NmBWwEAATcUAMAATdGd9p4BAEqeCAEfng/AAEQcAQABJJ5CAiefQRyeMRyeJoCeIMAb8NmA7wAAAADAAEzPhjsCAAKVJ4Y8AMAATqQABsAARBaApaeDp4iofQAAn0K+IAAAAAEDp4+ofQAAAAEBAaeZAAAAn0NgA6vxAABcAT4DQBynwhanuBansC6fNMAARA6GXcAATpGBxwEAATSnyAOnyKfpAAAAAQEBp80AAACLj2ADwABMogAAYAPAAErYAUqn0wEiHKfVgafTwBvxv4FeAQABNyAAwABN0wAcp+KBp+DAG/G/gVsBAAE3fwDAAE3RAMAATRensKfqAEWn8QGn+qf8AACDZmADwABMogGTARyoA4GoAcAb8hWAuwEAAZcAwABN0AGJqAjAG/IVHKgJgagIwBvyFYENAQABlADAAE3IPgE9HKgegKgVwBvxhI+RAgACgagnwBvyFRyoMhaoKi6fNMAARA6F0AEAAYGoPcAb8hUAwABOlwCr/D0cqFWAqEzAG/GEj5kDAAOXFqhhLiLAAEQPaqhoYAOr55wYAKwCBsAARBeApaiCqJypiAMAgIwBaqiDYAPAAE3vq/EAAAEDqJ6piAAAAAEBAainAAAAgh1bAABgA8AAStgBPgNJqLQeqLjAAEZ1AgACLoCoyMAb8uMASqjWASk/SajnIRyo/Rao8YCo68Ab8uONMcAATgOAjAEAARapAC6NMcAATgMAwABN/EqpEwEqP0qpJQEiIiWpMgCAqSzAG/LjYAPAAEQMABypWhapUhSpTMAb8uMAAWADwABEDJ80wABEDoCMAQABFqldLp80wABEDgDAAE6YABypfBapdhSpcMAb8uMAAWADwABEDCLAAEQPgIwBAAEWqX8uIsAARA8AwABNxgbAAEQagKWpjamhqccBAIIcAWqpjmADwABN76vxAAABA6mqqccAAAAAAAAAYAPAAEyiAUqprQEeqa2+PAIAAhapuC6fNMAARA4WqcEuIsAARA8ABsAARBiApanMqd+qDAAAgO8BaqnNYAPAAE3vq/EAAAEDqeeqDAAAAAAAAABgA8AATokBSqntASSqDAUnn0QWqfsunzTAAEQOJ4QxFqoFLiLAAEQPJ4QoAAAb8LkAG/FiABvyuAAb87gAG/QLABv0YgAAAAUCwABEJIClqqaqq64SC59FAAABYAPAAE3vAAAJBMAARCaApaqrqqsJgd0AYAPAAEyiAATAAEQogKWqq6qrCYb9viAAYAPAAE6JAATAAEQpgKWqq6qrBoEBAF0DwABNRgFgA8AARCQBagBdA8AATUYBYAPAAEQkwABOIgTAAEQqgKWq8arxBoTbAGADwABEJAFqAGADwABEJMAATZoEwABEK4ClqzOrMwaE3ABgA8AARCQBagBgA8AARCTAAE2xBMAARCyApatyq3IGmyYAYAPAAEQkAWoAYAPAAEQkwABNyATAAEQtgKWsOqw6Bp9MAGADwABEJAFqAGADwABEJMAATd8EwABELoClrSStJAZtAGADwABEJAFqAGADwABEJMAATfYEwABEL4Clrg2uDQaEVABgA8AARCQBagBgA8AARCTAAE4NAQXAAEQzgKWqq6qrrhIBAAADqquuEgAAAAICAqqrAAAEgd1gA8AATKIAqqsAAASG/WADwABOiQAAYAPAAEQkAT8DCADAAEQmgADAG/XgCADAAEQogQDAG/XuCQAAwABOBQAAAAABBsAARDGApaqrqquuEgAAgO8AAAABA6qrrhIAAAAAAAAAYAPAAE6JAUoAAQ8ALsAARCgAABv2KgAb9lwAAAABAsAARDSApa5DrkivDQufTQAAAWADwABN7wAABQTAAEQ2gKWuSK5ICYHdAGADwABMogAEwABEOIClrkiuSAmG/b4gAGADwABOiQAEwABEOYClrkiuSAaBAQBdA8AATUYBYAPAAEQ0AWoAXQPAAE1GAWADwABENMAATnAEwABEOoClrrGusQafUABgA8AARDQBagBgA8AARDTAAE5FBMAARDuApa8ArwAGn1EAYAPAAEQ0AWoAYAPAAEQ0wABOXAEFwABEP4ClrkiuSK8NAQAAA65Irw0AAAACAgKuSAAABIHdYAPAAEyiAK5IAAAEhv1gA8AATokAAGADwABENAE/AwgAwABENoAAwBv3QwgAwABEOIEAwBv3UQkAAMAATgUAAAAAAQbAAEQ9gKWuSK5Irw0AAIDvAAAAAQOuSK8NAAAAAAAAAGADwABOiQFKAAEPAC7AAEQ4AAAb940AG/e/AAAAAQLAAERAgKWvP69FtZyDn1IAAAFgA8AATe8AAAUEwABEQ4ClsKqwrwmfU74gAGADwABMogAEwABERIClsaWxwQab4QBgA8AAREABarG7YAPAAERAwABOgATAAERFgKWyEbIyBp9UAGADwABEQAFqsixgA8AAREDAAE6MBMAAREaApbJ9sp0Gn1UAYAPAAERAAWqyl2ADwABEQMAATpgEwABER4ClsuqzDQafVgBgA8AAREABarMHYAPAAERAwABOpAEFwABEUoClr1ivXq96AYCKviAAA69ur3oAAAABAQGvdAAABJ9TYAPAAEyiAABgA8AAREABPwIIAcAAREOAAMAb+KsJAa9ewABOBQAAAAAFBsAAREmApa/Or9awmwQBgboAAAABA6/ssJsAAAABAQGwAgAAAJ9XXQPAAE1GAWADwABEQAAAYAPAAERAAT4DTrAZsB4AAITFYAPAAEyiAZM+Ak6wSQAAAIEHXQPAAE0/AWADwABEQAEWsEkeAJPNAQFdA8AATQQBYAPAAERAAYCwScAb+PwAgQjAAE0mRQAAARywSYIAwBv5L4EJAAAAAMAATUEAPgJOsDsAAACfWGADwABEQAEWsHSCAMAb+S+BCsAATUM9ibBcwBv5HBywYYGwXMAb+RyApgEAARawb4OwZMAb+YSfU74gwABEQwDAAEy7SrB6AR+wkMAARFIBAAGBsJLAG/kcAAbAAERLgKWxErEXsWUAAIHEAAAAAQOxH7FlAAAAAQEBsS8AAACCHWADwABEQAAAYAPAAErYAT4BSrE8ARyxWRyxShaxRC6fU74gwABEQ4CmAQABFrFSgLFMwBv6BZ9TviDAAERDAMAATLuAjAEAARaxXC6fU74gwABEQwDAAE3GBsAAREyApbMSsyyzhgMAgIwBarMTYAPAAE3vq/EAAAEDsy6zhgAAAAEBAbM3AAAAgh1bAABgA8AAStgBPgFKs0QBIiWzUQCAs0vAG/qQYAPAAERAAByzehazdBSzbsAb+pAAAWADwABEQJ9TviDAAERDgIwBAAEWs30un1O+IMAAREMAwABNxgbAAERPgKWzi7Ofs7kBAIIcAWqzjGADwABN76vxAAABA7Oos7kAAAAAAAAAYAPAAEyiAUqzqwEWs7EWs6sun1O+IMAAREOCHMAATecGwABETYCls76z0bWaAACA7wFqs79gA8AATe+r8QAAAQOz2bWaAAAAAAAAAGADwABOiQE+B0mz4hyz7Baz5i6fU74gwABEQ4CMAQABkwDAAE3GSrP4ASefWT9OtC20NAABgQFdA8AATUYBYAPAAE6JATG0PmADwABOiQBJtEYhHLRiHLRQFrRKLp9TviDAAERDgKEBAAEWtFxqtFJgA8AAREDAAE6Mn1O+IMAAREMAwABMuoCMAQABkwDAAE3GPRy0dYC0bsAb+5SAggEAASefVADAAE1XP0m0iyEctKYctJUWtI8un1O+IMAAREOAoQEAARa0oGq0l2ADwABEQMAATpifU74gwABEQwDAAEy6gIwBAAGTAMAATcY9HLS5gLSywBv7lICCAQABJ59VAMAATVc/SbTOIRy07By02Ba00i6fU74gwABEQ4ChAQABFrTmarTaYAPAAERAwABOpJ9TviDAAERDAMAATLqAjAEAAZMAwABNxj0ctP+AtPjAG/uUgIIBAAEnn1YAwABNVz9JtRcctSkWtSKAtRvAG/uUgcjAAE12gIwBAAGUAMAATcZKtTUBJLVZAiefWhy1VIC1TsAb+5SC0QEAAZMAwABNVT9KtV8BJLWWAyefWxy1iIC1gcAb+5SBvwEAASeEMQDAAE0YJ59cAAAb+NwAG/nlABv6ZQAb+u0AG/s5ABv9LwAAAAUCwABEU4CltdC11baZC59dAAABYAPAAE3vAAAIBMAARFWApbXVtdUJgd0AYAPAAEyiAATAAERXgKW11bXVCYb9viAAYAPAAE6JAATAAERYgKW11bXVBoEBAF0DwABNRgFgA8AARFMBagBdA8AATUYBYAPAAERTwABPIwTAAERZgKW2BbYFBpzzAGADwABEUwFqAGADwABEU8AATrMEwABEWoCltiS2JAafYwBgA8AARFMBagBgA8AARFPAAE7KBMAARFuApbZItkgGn2QAYAPAAERTAWoAYAPAAERTwABO4QTAAERcgKW2bLZsBp9lAGADwABEUwFqAGADwABEU8AATvgEwABEXYCltpS2lAafZgBgA8AARFMBagBgA8AARFPAAE8PAQXAAERhgKW11bXVtpkBAAADtdW2mQAAAAICArXVAAAEgd1gA8AATKIAtdUAAASG/WADwABOiQAAYAPAAERTAT8DCADAAERVgADAG/6MCADAAERXgQDAG/6aCQAAwABOBQAAAAABBsAARF+ApbXVtdW2mQAAgO8AAAABA7XVtpkAAAAAAAAAYAPAAE6JAUoAAQ8ALsAARFcAABv+1gAb/wgAAAABAsAARGKApbh0uHrAAEQNg59nAAABYAPAAE3vAAACBMAARGSApb6Gvp4Jn2gAYAPAAErYAATAAERlgKXAAEC4wABA0AmfaQBgA8AAStgAAgXAAERtgKW6p7qtuxoBAAADur+7GgAAAAIAAAK6ywAABJ9oYAPAAErYAWq65mADwABK2IP7uvUAAASfaWADwABK2AFquxBgA8AAStiD+2ADwABEYgE/AwgBwABEZIAAwBv/gAgBwABEZYEAwBv/mQkBuq3AAE4FAAAAAAXAAERugKW7oruovGwBn2oAA7vGvGwAAAABAQG7ywAAAIZsYAPAAEyiAABgA8AARGIBPwMIAMAARGQcvAEcu/qAu/LAG//7gKEBAAGUAMAATLqAjAEAAZMAwABNxggAwABEZRy8aBy8YYC8WcAb//uAoQEAAZUAwABMuoCMAQABkwDAAE3GCQG7qMAATgUAAAAABAbAAERngKXAAEERwABBFcAAQYAAAIZPAAAAAQPAAEEbwABBgAAAAAAAAABgA8AATKIBPgFKwABBJAEcwABBUyMWwABBLC6faMAARGSTHMAAQU2Ug3EBAAGTAMAATL4BYAPAAEyigKYBAAEjFsAAQVYun2nAAERlkxzAAEF3lINxAQABlADAAEy+AWADwABMogDAAEy7BsAARGiApcAAQYXAAEGfwABCpwMAgIwBasAAQYZgA8AATe+r8QAAAQPAAEGhwABCpwAAAAEBAcAAQaoAAACCHVsAAGADwABK2AE+AknAAEG3IRzAAEHNFsAAQcGAwABBu8AcAT6NMcAATgOAjAEAARbAAEHQLo0xwABOAwDAAE38SsAAQeMBKj9KwABB9QEiIiXAAEICAIDAAEH8wBwBPmADwABEYgAcwABCQhbAAEIpFMAAQiPAHAE+AAFgA8AARGKfaMAARGSAjAEAARbAAEJFLp9owABEZADAAE38ABzAAEKIFsAAQm8UwABCacAcAT4AAWADwABEYp9pwABEZYCMAQABFsAAQosun2nAAERlAMAATfwGwABEa4ClwABCrMAAQsDAAEMrAQCCHAFqwABCrWADwABN76vxAAABA8AAQsnAAEMrAAAAAAAAAGADwABMogE+AUrAAELPAR7AAELWvjwCAAIWwABC6C6faMAARGQWwABDCC6facAARGUABsAARGmApcAAQzDAAENDwABECwAAgO8BasAAQzFgA8AATe+r8QAAAQPAAENLwABECwAAAAAAAABgA8AATokBPgFKwABDVAEkwABDVAcnn2snn2wWwABDmi6faMAARGQnhDEnn20WwABD3y6facAARGUnhCgAABwAcgAcAQcAHAIdABwChwAcAvsAAAAEAsAARG+ApcAAU43AAFOTwAB1HwOfbgAAAWADwABN7wAADQTAAERygKXAAGQgwABkKAmfb74gAGADrEAABMAARHOApcAAZDnAAGRECZ9wviAAYAPAAE6JAATAAER0gKXAAGRbwABkbgmfcb4gAF0DwABNRgFgA8AATokABMAARHWApcAAZH/AAGSICZ9yviAAYAPAAEtQAATAAER2gKXAAGSZwABkpwmfc74gAGADwABLUAAEwABEd4ClwABkuMAAZMQJn3S+IABgA8AAS1AABMAARHiApcAAZNXAAGTcCYxUviAAYAPAAEtQAATAAER5gKXAAGTtwABlAQmfdb4gAGADwABLUAAEwABEeoClwABlEsAAZRkJn3a+IABgA8AARZsABMAARHuApcAAZSnAAGU0CZ93viAAYAPAAECyAATAAER8gKXAAGVEwABlTwmfeL4gAGADwABAsgAEwABEfYClwABlZsAAZW4Jn3m+IABdA8AATUYBYAPAAELoAATAAER+gKXAAGWKwABllwmfer4gAF0DwABNRgFgA8AARAwAAQXAAESFgKXAAF3BwABdwcAAZAsAAAADwABdysAAZAsAAAATAAATwABd1wAAAJrGYAPAAEAtAWoAYAHAAE2sAsAAXfEAAACfWGADwABEQAFqAGABwABNrALAAF4HAAAAn3tgA8AAQC0BagBgAcAATawCwABeMAAAAJ98YAPAAERTAWoAYAHAAE2sAsAAXkwAAACffWADwABLUAFqAGABwABNrALAAF5wAAAAn35gA8AAQ/cBagBgAcAATawCwABeigAAAJ9/YAPAAEPrAWoAYAHAAE2sAsAAXqYAAACfgGADwABENAFqAGABwABNrALAAF6/AAAAn4FgA8AATokBagBgAcAATawCwABe3AAAAJ+CXQPAAE1GAWADwABOiQFqAGABwABNrALAAF77AAAAn4NgA8AAS1ABagBgAcAATawCwABfEAAAAJ+EYAPAAEtQAWoAYAHAAE2sAsAAXyoAAACfhWADwABLUAFqAGABwABNrALAAF9CAAAAjD5gA8AAS1ABagBgAcAATawCwABfVQAAAJ+GYAPAAEWbAWoAYAHAAE2sAsAAX2cAAACboGADwABAsgFqAGABwABNrALAAF99AAAAm59gA8AAQLIBagBgAcAATawCwABfmgAAAJ4UXQPAAE1GAWADwABC6AFqAGABwABNrALAAF+5AAAAn4ddA8AATUYBYAPAAEQMAWoAYAHAAE2sAmADwABEbwE/DwwAQCIcwABf24DAAF/VwBwE3ICMAQABKwDAAEBDARzAAF/xFMAAX+bAHAZzEACAjAEAASsAwABN/MAAX9XAAF/4ASTAAF/4AiefiCefiQgAwABEch7AAGCsvnATABOAwABgx8AcBNyBwABg18AcBPWCwABg7MAcBQ6DwABhBsAcBSeEwABhIMAcBUCFwABhPsAcBVmGwABhU8AcBXKHwABhZ8AcBYsUwABhfsAcBaQIABTAAGGTwBwFvQkAFMAAYbDAHAXdCgAUwABhw8AcBfYLABTAAGHbwBwGDwwAFMAAYfHAHAYoDQAUwABiAsAcBkEOABTAAGITwBwGWg8AFMAAYijAHAZzEAAUwABiPcAcBowRABTAAGJPwBwGrBIAAAgAwABEczXAAGJ8AAABAGADwABOiQEUwABifMAcBaQIACMcwABifBTAAGJ8wBwH/BMAgIwBAAErAMAATpgnABTAAGJ8wBwH/BMAAWADwABOiQgAwABEdBTAAGKrwBwFvQkACADAAER1FMAAYtLAHAXdCgAIAMAARHYUwABi9MAcBfYLAAgAwABEdxTAAGMZwBwGDwwACADAAER4FMAAYzfAHAYoDQAIAMAARHmEwABjXcAcBUAIAMAARHoUwABjg8AcBkEOAAgAwABEexTAAGOgwBwGWg8ACADAAER8FMAAY8HAHAZzEAAIAMAARH0UwABj38AcBowRAAgAwABEfhTAAGP/wBwGrBIACQHAAF3BwABOBQAAAAADBsAARICApcAAZZzAAGW2wABotgMAgIwBasAAZZ1gA8AATe+r8QAAAQPAAGW4wABotgAAAAEBAcAAZcEAAACCHVsAAGADwABK2AE+AknAAGXOHsAAZdLAAEZ1AgACLoDAAGXiwBwJRQBKwABl8AEpP0rAAGYBASIiIiIiIiIiIiIiIiIlwABmDgCAwABmCMAcCUVgA8AARG8AHMAAZjgWwABmLBTAAGYmwBwJRQABYAPAAERvn3C+IMAARHOAjAEAARbAAGY7Lp9wviDAAERzAMAATpgAHMAAZmIWwABmWBTAAGZSwBwJRQABYAPAAERvn3K+IMAARHWAjAEAARbAAGZlLp9yviDAAER1AMAATcYAHMAAZo8WwABmgBTAAGZ6wBwJRQABYAPAAERvn3O+IMAARHaAjAEAARbAAGaSLp9zviDAAER2AMAATcYAHMAAZr8WwABmshTAAGaswBwJRQABYAPAAERvn3S+IMAARHeAjAEAARbAAGbCLp90viDAAER3AMAATcYAHMAAZugWwABm4BTAAGbawBwJRQABYAPAAERvjFS+IMAARHiAjAEAARbAAGbrLoxUviDAAER4AMAATcYAHMAAZxkWwABnBBTAAGb+wBwJRQABYAPAAERvn3W+IMAARHmAjAEAARbAAGccLp91viDAAER5AMAATcYAHMAAZ0oWwABnQhTAAGc8wBwJRQABYAPAAERvn3a+IMAARHqAjAEAARbAAGdNLp92viDAAER6AMAARaoAHMAAZ3IWwABnZhTAAGdgwBwJRQABYAPAAERvn3e+IMAARHuAjAEAARbAAGd1Lp93viDAAER7AMAATfwAHMAAZ54WwABnkhTAAGeMwBwJRQABYAPAAERvn3i+IMAARHyAjAEAARbAAGehLp94viDAAER8AMAATfwAHsAAZ7i+bwIBYAPAAEyiAhbAAGfPFMAAZ8nAHAlFAAFgA8AARG+fb74gwABEchbAAGfZLp9vviDAAERyAAAewABn7r5vAgFgA8AAQugCFsAAaAgUwABoAsAcCUUAAWADwABEb595viDAAER9FsAAaBIun3m+IMAARH0AAB7AAGgnvm8CAWADwABOiQIWwABoQRTAAGg7wBwJRQABYAPAAERvn3G+IMAARHQWwABoVi6fcb4gwABEdAAAHsAAaHa+bwIBYAPAAEQMAhbAAGiVFMAAaI/AHAlFAAFgA8AARG+fer4gwABEfhbAAGikLp96viDAAER+AAbAAESDgKXAAGi7wABoz8AAabMBAIIcAWrAAGi8YAPAAE3vq/EAAAEDwABo2MAAabMAAAAAAAAAYAPAAEyiAUrAAGjbAR7AAGjbvjwNAA0ewABo5r49AQABFsAAaO8un2++IMAARHIAFsAAaPoun3C+IMAARHMWwABpBy6fcb4gwABEdBbAAGkcLp9yviDAAER1FsAAaScun3O+IMAARHYWwABpNy6fdL4gwABEdxbAAGlFLoxUviDAAER4FsAAaU4un3a+IMAARHoWwABpVy6fd74gwABEexbAAGlkLp94viDAAER8HsAAaXG+PQEAARbAAGl6Lp95viDAAER9ABbAAGmFLp91viDAAER5HsAAaZu+PQEAARbAAGmkLp96viDAAER+AAAGwABEgYClwABpuMAAacvAAHUdAACA7wFqwABpuWADwABN76vxAAABA8AAadPAAHUdAAAAAAAAAGADwABOiQE+AUrAAGncASTAAGncOiefiiefiyMcwABqKxzAAGohHMAAah0WwABqFS6fb74gwABEcoLRAQABkwDAAE1VgKEBAAGVAMAATLqAjAEAAZUAwABNxh/AAGo5wABARgEAARzAAGpHFsAAaj8un2++IMAARHKC0QEAAZQAwABNVQAnn4wBYAPAAE3vJ4QxJ5+NIxzAAGqsHMAAaqIcwABqnhbAAGqWLp9vviDAAERygtEBAAGTAMAATVWAoQEAAZcAwABMuoCMAQABlwDAAE3GH8AAasnAAERSAQABHMAAatMWwABqyy6fb74gwABEcoLRAQABlQDAAE1VACefjAFgA8AATe8nhDEnn44jHMAAay0cwABrIxzAAGsfFsAAaxcun2++IMAARHKC0QEAAZMAwABNVYChAQABNwgAwABMuoCMAQABNwgAwABNxh/AAGs7wABARgEAARzAAGtJFsAAa0Eun2++IMAARHKC0QEAAZYAwABNVQAnn4wBYAPAAE3vJ4QxJ5+PIxzAAGuuHMAAa6QcwABroBbAAGuYLp9vviDAAERygtEBAAGTAMAATVWAoQEAATcQAMAATLqAjAEAATcQAMAATcYcwABr1mrAAGvQXQPAAE1GAWADwABEU8AATyOC0QEAARzAAGvfFsAAa9cun2++IMAARHKC0QEAAZcAwABNVQDAAE1VJ5+MAWADwABN7yeEMSefkCMcwABsrRzAAGyjHMAAbJ8WwABsly6fb74gwABEcoLRAQABkwDAAE1VgKEBAAE3gQAAwABMuoCMAQABN4EAAMAATcYWwABsuy6fdb4gwABEeSefjAFgA8AATe8nhDEnn5EjHMAAbTIcwABtKBzAAG0kFsAAbRwun2++IMAARHKC0QEAAZMAwABNVYChAQABNyAAwABMuoCMAQABNyAAwABNxhzAAG1RasAAbUtdA8AATUYBYAPAAEP3wABNA4LRAQABHMAAbVoWwABtUi6fb74gwABEcoLRAQABNwUAwABNVQDAAE1VJ5+MAWADwABN7yeEMSefkiMcwABttxzAAG2tHMAAbakWwABtoS6fb74gwABEcoLRAQABkwDAAE1VgKEBAAE3QADAAEy6gIwBAAE3QADAAE3GHMAAbdVqwABtz10DwABNRgFgA8AAQ+vAAEyFgtEBAAEcwABt3hbAAG3WLp9vviDAAERygtEBAAE3BgDAAE1VAMAATVUnn4wBYAPAAE3vJ4QxJ5+TIxzAAG48HMAAbjIcwABuLhbAAG4mLp9vviDAAERygtEBAAGTAMAATVWAoQEAATeAgADAAEy6gIwBAAE3gIAAwABNxhzAAG5dasAAblddA8AATUYBYAPAAEQ0wABOcILRAQABHMAAbmYWwABuXi6fb74gwABEcoLRAQABNwcAwABNVQDAAE1VJ5+MAWADwABN7yeEMSeflCMiHMAAbsEcwAButxzAAG6zFsAAbqsun2++IMAARHKC0QEAAZMAwABNVYChAQABN4IAAMAATLqAjAEAATeCAADAAE3GACEcwABvABbAAG70Lp9wviDAAERzgIwBAAErAMAATpgWwABvFS6fcL4gwABEcyefjAFgA8AAToknhDEnn5UjIiIcwABvjBzAAG+CHMAAb34WwABvdi6fb74gwABEcoLRAQABkwDAAE1VgKEBAAE3ggAAwABMuoCMAQABN4IAAMAATcYAIRzAAG/TFsAAb78un3G+IMAARHSAjAEAASsAwABNcAAWwABwFxbAAHADLp9xviDAAER0g2LAAE0pFsAAcCQun3G+IMAARHQnn4wBYAPAAE3vJ4QxJ5+WIxzAAHCbHMAAcJEcwABwjRbAAHCFLp9vviDAAERygtEBAAGTAMAATVWAoQEAATeEAADAAEy6gIwBAAE3hAAAwABNxhbAAHCpLp9yviDAAER1J5+MAWADwABN7yeEMSeflyMcwABxIBzAAHEWHMAAcRIWwABxCi6fb74gwABEcoLRAQABkwDAAE1VgKEBAAE3iAAAwABMuoCMAQABN4gAAMAATcYkwABxVgIWwABxMS6fc74gwABEdieEhCefjAFgA8AAToknhDEnn5gjHMAAcaUcwABxmxzAAHGXFsAAcY8un2++IMAARHKC0QEAAZMAwABNVYChAQABN5AAAMAATLqAjAEAATeQAADAAE3GJMAAcdsCFsAAcbYun3S+IMAARHcnhIQnn4wBYAPAAE6JJ4QxJ5+ZIxzAAHIqHMAAciAcwAByHBbAAHIULp9vviDAAERygtEBAAGTAMAATVWAoQEAATegAADAAEy6gIwBAAE3oAAAwABNxiTAAHJgAhbAAHI7LoxUviDAAER4J4SEJ5+MAWADwABOiSeEMSefmiMcwAByrxzAAHKlHMAAcqEWwABymS6fb74gwABEcoLRAQABkwDAAE1VgKEBAAE3wABAAADAAEy6gIwBAAE3wABAAADAAE3GFsAAcr0un3a+IMAARHonn4wBYAPAAE3vJ4QxJ5+bIxzAAHM0HMAAcyocwABzJhbAAHMeLp9vviDAAERygtEBAAGTAMAATVWAoQEAATfAAIAAAMAATLqAjAEAATfAAIAAAMAATcYWwABzQi6fd74gwABEeyefjAFgA8AATe8nhDEnn5wjHMAAc7kcwABzrxzAAHOrFsAAc6Mun2++IMAARHKC0QEAAZMAwABNVYChAQABN8ABAAAAwABMuoCMAQABN8ABAAAAwABNxhbAAHPHLp94viDAAER8J5+MAWADwABN7yeEMSefnSMcwAB0PhzAAHQ0HMAAdDAWwAB0KC6fb74gwABEcoLRAQABkwDAAE1VgKEBAAE3wAIAAADAAEy6gIwBAAE3wAIAAADAAE3GFsAAdEwun3m+IMAARH0nn4wBYAPAAE3vJ4QxJ5+eIxzAAHTDHMAAdLkcwAB0tRbAAHStLp9vviDAAERygtEBAAGTAMAATVWAoQEAATfABAAAAMAATLqAjAEAATfABAAAAMAATcYWwAB00S6fer4gwABEfiefjAFgA8AATe8nhCgAABwJDgAcDLoAHA3hABwXDgAAAAMCwABEhoClwAB+WsAAfmDAAJZvA5+fAAABYAPAAE3vAAAHBMAARImApcAAjaDAAI2oCZ9vviAAYAOsQAAEwABEioClwACNucAAjcQJn3C+IABgA8AATokABMAARIuApcAAjdXAAI3eCZ9yviAAYAPAAEtQAATAAESMgKXAAI3vwACN9gmMVL4gAGADwABLUAAEwABEjYClwACOC8AAjhYJn6C+IABgA8AARJcABMAARI6ApcAAjifAAI4wCZ+hviAAYAPAAE6JAATAAESPgKXAAI5BwACOSAmfdr4gAGADwABFmwABBcAARJaApcAAinfAAIp3wACNiwAAAAPAAIqFwACNiwAAAAwAAAzAAIqWAAAAn6JgA8AARCQBagBgAcAATawCwACKswAAAJ8NYAPAAESjAWoAYAHAAE2sAsAAisoAAACfo2ADwABMogFqAGABwABNrALAAIrfAAAAn4FgA8AATokBagBgAcAATawCwACK9gAAAJ+DYAPAAEtQAWoAYAHAAE2sAsAAiwsAAACMPmADwABLUAFqAGABwABNrALAAIsqAAAAn6RgA8AARGIBagBgAcAATawCwACLTQAAAJ9+YAPAAEP3AWoAYAHAAE2sAsAAi2cAAACff2ADwABD6wFqAGABwABNrALAAIuBAAAAn6VgA8AARJcBagBgAcAATawCwACLmAAAAJ+mYAPAAE6JAWoAYAHAAE2sAsAAi60AAACfhmADwABFmwFqAGABwABNrAJgA8AARIYBPwgIAMAARIkewACLx75xDAAMgMAAi+fAHBgugcAAi/vAHBhHgsAAjBPAHBhgg8AAjCbAHBh5hMAAjDvAHBiShcAAjE7AHBirhsAAjF/AHBjEh8AAjHzAHBjdFMAAjJHAHBj2CAAUwACMpcAcGQ8JABTAAIy6wBwZKAoAFMAAjM3AHBlBCwAACADAAESKg8AAjPTAHBh5CADAAESLhMAAjRPAHBiSCADAAESMhcAAjS7AHBirCADAAESNFMAAjUvAHBkPCQAIAMAARI4UwACNasAcGSgKAAgAwABEjxTAAI2FwBwZQQsACQHAAIp3wABOBQAAAAADBsAARJGApcAAjk3AAI5nwACQOAMAgIwBasAAjk5gA8AATe+r8QAAAQPAAI5pwACQOAAAAAEBAcAAjnIAAACCHVsAAGADwABK2AE+A0nAAI5/HsAAjoPAAEZ1AgACLoDAAI6TwBwajgBKwACOoQEpP0nAAI6yIRzAAI7IFsAAjryAwACOtsAcGo6NMcAATgOAjAEAARbAAI7LLo0xwABOAwDAAE38SsAAjt4BKj9KwACO8AEiIiIiIiIiJcAAjv0AgMAAjvfAHBqOYAPAAESGABzAAI8sFsAAjyAUwACPGsAcGo4AAWADwABEhp9wviDAAESKgIwBAAEWwACPLy6fcL4gwABEigDAAE6YABzAAI9WFsAAj0wUwACPRsAcGo4AAWADwABEhp9yviDAAESLgIwBAAEWwACPWS6fcr4gwABEiwDAAE3GABzAAI98FsAAj3QUwACPbsAcGo4AAWADwABEhoxUviDAAESMgIwBAAEWwACPfy6MVL4gwABEjADAAE3GABzAAI+kFsAAj5gUwACPksAcGo4AAWADwABEhp+gviDAAESNgIwBAAEWwACPpy6foL4gwABEjQDAAESeABzAAI/OFsAAj8QUwACPvsAcGo4AAWADwABEhp+hviDAAESOgIwBAAEWwACP0S6fob4gwABEjgDAAE6YABzAAI/0FsAAj+wUwACP5sAcGo4AAWADwABEhp92viDAAESPgIwBAAEWwACP9y6fdr4gwABEjwDAAEWqAB7AAJAKvm8CAWADwABMogIWwACQIRTAAJAbwBwajgABYAPAAESGn2++IMAARIkWwACQKy6fb74gwABEiQAGwABElIClwACQPcAAkFHAAJCwAQCCHAFqwACQPmADwABN76vxAAABA8AAkFrAAJCwAAAAAAAAAGADwABMogFKwACQXQEewACQXb48BgAGHsAAkGi+PQEAARbAAJBxLp9vviDAAESJABbAAJB8Lp9wviDAAESKFsAAkIkun3K+IMAARIsWwACQlC6MVL4gwABEjBbAAJCdLp+hviDAAESOFsAAkKgun3a+IMAARI8ABsAARJKApcAAkLXAAJDIwACWbQAAgO8BasAAkLZgA8AATe+r8QAAAQPAAJDQwACWbQAAAAAAAABgA8AATokBPgFKwACQ2QEkwACQ2SInn6cnn6gjHMAAkSYcwACRHhzAAJEaFsAAkRIun2++IMAARImC0QEAAZMAwABNVYChAQABlQDAAEy6gIwBAAGVAMAATcYcwACRQWrAAJE7XQPAAE1GAWADwABEJMAATiKC0QEAARzAAJFKFsAAkUIun2++IMAARImC0QEAAZQAwABNVQDAAE1VJ5+MAWADwABN7yeEMSefqSMcwACRmxzAAJGTHMAAkY8WwACRhy6fb74gwABEiYLRAQABkwDAAE1VgKEBAAGXAMAATLqAjAEAAZcAwABNxhzAAJG6asAAkbRdA8AATUYBYAPAAESjwABPbYLRAQABHMAAkcMWwACRuy6fb74gwABEiYLRAQABlQDAAE1VAMAATVUnn4wBYAPAAE3vJ4QxJ5+RIxzAAJIQHMAAkggcwACSBBbAAJH8Lp9vviDAAESJgtEBAAGTAMAATVWAoQEAATcIAMAATLqAjAEAATcIAMAATcYcwACSLGrAAJImXQPAAE1GAWADwABD98AATQOC0QEAARzAAJI1FsAAki0un2++IMAARImC0QEAAZYAwABNVQDAAE1VJ5+MAWADwABN7yeEMSefkiMcwACShRzAAJJ9HMAAknkWwACScS6fb74gwABEiYLRAQABkwDAAE1VgKEBAAE3EADAAEy6gIwBAAE3EADAAE3GHMAAkqBqwACSml0DwABNRgFgA8AAQ+vAAEyFgtEBAAEcwACSqRbAAJKhLp9vviDAAESJgtEBAAGXAMAATVUAwABNVSefjAFgA8AATe8nhDEnn6wjHMAAkvocwACS8hzAAJLuFsAAkuYun2++IMAARImC0QEAAZMAwABNVYChAQABNyAAwABMuoCMAQABNyAAwABNxhzAAJMNFsAAkwUun2++IMAARImC0QEAATcFAMAATVUnn4wBYAPAAE3vJ4QxJ5+tIxzAAJOUHMAAk4wcwACTiBbAAJOALp9vviDAAESJgtEBAAGTAMAATVWAoQEAATdAAMAATLqAjAEAATdAAMAATcYcwACT9R/AAJPcwABEbgEAARzAAJPwFsAAk+gun2++IMAARImC0QEAATcGAMAATVUAgO8AAAAAwABEaSefjAFgA8AAToknhDEnn5QjHMAAlEgcwACUQBzAAJQ8FsAAlDQun2++IMAARImC0QEAAZMAwABNVYChAQABN4CAAMAATLqAjAEAATeAgADAAE3GFsAAlFMun3C+IMAARIonn4wBYAPAAE6JJ4QxJ5+WIxzAAJS9HMAAlLUcwACUsRbAAJSpLp9vviDAAESJgtEBAAGTAMAATVWAoQEAATeBAADAAEy6gIwBAAE3gQAAwABNxhbAAJTILp9yviDAAESLJ5+MAWADwABN7yeEMSefmSMcwACVMhzAAJUqHMAAlSYWwACVHi6fb74gwABEiYLRAQABkwDAAE1VgKEBAAE3ggAAwABMuoCMAQABN4IAAMAATcYkwACVXwIWwACVQC6MVL4gwABEjCeEhCefjAFgA8AAToknhDEnn64jHMAAlaccwACVnxzAAJWbFsAAlZMun2++IMAARImC0QEAAZMAwABNVYChAQABN4QAAMAATLqAjAEAATeEAADAAE3GJMAAldQDJ4cNFsAAlbYun6G+IMAARI4nhw0nn4wBYAPAAE6JJ4QxJ5+aIxzAAJYcHMAAlhQcwACWEBbAAJYILp9vviDAAESJgtEBAAGTAMAATVWAoQEAATeIAADAAEy6gIwBAAE3iAAAwABNxhbAAJYnLp92viDAAESPJ5+MAWADwABN7yeEKAAAHBpXABwczAAcHXsAHCMNAAAAAwLAAESXgKXAAJ9BwACfR8AAq9wDn68AAAFgA8AATe8AAAMEwABEmoClwACpXcAAqWUJn2++IABgA6vxAATAAESbgKXAAKmgwACpqwmfcL4gAGADwABOiQAEwABEnIClwACpwsAAqdUJn3G+IABdA8AATUYBYAPAAE6JAAEFwABEooClwACnT8AAp0/AAKlJAAAAA8AAp1nAAKlJAAAACAAACMAAp2cAAACfgWADwABOiQFqAGABwABNrALAAKeEAAAAn4JdA8AATUYBYAPAAE6JAWoAYAHAAE2sAsAAp6MAAACfg2ADwABLUAFqAGABwABNrALAAKe4AAAAjD5gA8AAS1ABagBgAcAATawCwACnywAAAJ+wYAPAAEtQAWoAYAHAAE2sAsAAp+MAAACffmADwABD9wFqAGABwABNrALAAKf9AAAAn39gA8AAQ+sBagBgAcAATawCwACoEQAAAJ+xYAPAAErYAWoAYAHAAE2sAmADwABElwE/BAgAwABEmh7AAKg1vnIIAAiAwACoTMAcI8SBwACoYcAcI92CwACofsAcI/2DwACokcAcJBaEwACoosAcJC+FwACotMAcJEiGwACoycAcJGGHwACo3cAcJHoACADAAESbgMAAqQ7AHCPECADAAEScgcAAqTfAHCPdCQHAAKdPwABOBQAAAAACBsAARJ6ApcAAqdvAAKn1wACrdQMAgIwBasAAqdxgA8AATe+r8QAAAQPAAKn3wACrdQAAAAEBAcAAqgAAAACCHVsAAGADwABK2AE+A0nAAKoNHsAAqhHAAEZ1AgACLoDAAKohwBwlWQBKwACqLwEpP0nAAKpAIRzAAKpWFsAAqkqAwACqRMAcJVmNMcAATgOAjAEAARbAAKpZLo0xwABOAwDAAE38SsAAqmwBKj9KwACqfgEiIiIlwACqiwCAwACqhcAcJVlgA8AARJcAHMAAqrYWwACqqhTAAKqkwBwlWQABYAPAAESXn3C+IMAARJuAjAEAARbAAKq5Lp9wviDAAESbAMAATpgAHsAAqtC+bwIBYAPAAE6JAhbAAKrqFMAAquTAHCVZAAFgA8AARJefcb4gwABEnBbAAKr/Lp9xviDAAEScAAAewACrH75vAgFgA8AATKICHMAAq0YWwACrPxbAAKs2FMAAqzDAHCVZAAFgA8AARJefb74gwABEmoHBq9qOMAAAAACrxRzAAKtkFsAAq10WwACrVC6fb74gwABEmoHBq9qOMAAAAACrxQAGwABEoIClwACresAAq47AAKvZAQCCHAFqwACre2ADwABN76vxAAABA8AAq5fAAKvZAAAAAAAAAGADwABMogFKwACrmgEewACrmr48AgACHsAAq6W+PQEAARzAAKu+FsAAq7cWwACrri6fb74gwABEmoHBq9qOMAAAAACrxQAWwACrzS6fcL4gwABEmwAAABwlIgAcJtEAHCdeAAAAAgLAAESjgKXAAL4EwAC+CcAAvqgLn7IAAAFgA8AATe8AAAUEwABEpYClwAC+CcAAvgkJgd0AYAPAAEyiAATAAESngKXAAL4JwAC+CQmG/b4gAGADwABOiQAEwABEqIClwAC+CcAAvgkGgQEAXQPAAE1GAWADwABEowFqAF0DwABNRgFgA8AARKPAAE9tBMAARKmApcAAvlrAAL5aBp+zAGADwABEowFqAGADwABEo8AAT0IEwABEqoClwAC+o8AAvqMGn7QAYAPAAESjAWoAYAPAAESjwABPWQEFwABEroClwAC+CcAAvgnAAL6oAQAAA8AAvgnAAL6oAAAAAgICwAC+CQAABIHdYAPAAEyiAMAAvgkAAASG/WADwABOiQAAYAPAAESjAT8DCADAAESlgADAHChtCADAAESngQDAHCh9CQAAwABOBQAAAAABBsAARKyApcAAvgnAAL4JwAC+qAAAgO8AAAABA8AAvgnAAL6oAAAAAAAAAGADwABOiQFKAAEPAC7AAESnAAAcKLsAHCj3AAAAAQLAAESvgKXAAL8gwAC/QMAAyBqDn7UBasAAvyFgA8AASp8DAAFgA8AATe8AAAUEwABEsYClwADBe8AAwX8JhNsAYAPAAEtQAATAAESygKXAAMG1wADBuAmMPABgA8AAS1AABMAARLOApcAAwmfAAMJsCYTcAGADwABLUAAEwABEtIClwADCpcAAwqsJjD8AYAPAAEtQAATAAES1gKXAAML9wADDBgmSvQBgA8AARKMAAgXAAES/gKXAAL+KwAC/kMAAv/gBn7YAA8AAv6HAAL/4AAAABQUFwAC/rAAABITbYAPAAEtQAMAAv7sAAASMPGADwABLUADAAL/JAAAEhNxgA8AAS1AAwAC/2QAABIw/YAPAAEtQAMAAv+oAAASSvWADwABEowAAYAPAAESvAT8GCAHAAESxgADAHCnbCAHAAESygQDAHCnrCAHAAESzggDAHCn7CAHAAES0gwDAHCoLCAHAAES1hADAHCobCQHAAL+QwABOBQAAAAAFwABEwYClwAC//cAAwDXAAMDMAICKviABasAAv/5gA8AASp8DA8AAwD7AAMDMAAAABQUFwADASQAABITbYAPAAEtQAMAAwFgAAASMPGADwABLUADAAMBmAAAEhNxgA8AAS1AAwADAdgAABIw/YAPAAEtQAMAAwIYAAACft2ADwABMogAAYAPAAESvAT8GCAHAAESxgADAHCqzCAHAAESygQDAHCrDCAHAAESzggDAHCrTCAHAAES0gwDAHCrjCADAAES1HMAAwLxqwADAtl0DwABNRgFgA8AARKPAAE9tgtEBAAGEwADAvcAcKvMAwABNVQkBwADANcAATgUAAAAABgbAAES3gKXAAMM+wADDQ8AAw3YAAJ+4AAAAAQPAAMNJwADDdgAAAAAAAABgA7+BAUrAAMNPAR/AAMNUv64EAAQWwADDXS6E28AARLEWwADDYy6MPMAARLIWwADDaC6E3MAARLMWwADDby6MP8AARLQABsAARLuApcAAxD7AAMRJwADEjwEAbQAAAAEDwADET8AAxI8AAAAAAAAAYAPAAEtQAT4BSsAAxFUBIxzAAMRnFsAAxF0ukr3AAES1gIwBAAFqwADEeGADwABEo8AAT1kAwABN/BbAAMR/LoTbwABEsRbAAMSGLoTcwABEswFgA8AAS1AGwABEvIClwADFV8AAxWLAAMWmAQCEVAAAAAEDwADFZsAAxaYAAAAAAAAAYAPAAEtQAT4BSsAAxWwBIxzAAMV+FsAAxXQukr3AAES1gIwBAAFqwADFj2ADwABEo8AAT1kAwABN/BbAAMWWLoTcwABEsxbAAMWeLoTbwABEsQFgA8AAS1AGwABEuIClwADFq8AAxcXAAMcNAwCAjAFqwADFrGADwABN76vxAAABA8AAxcfAAMcNAAAAAQEBwADF0AAAAIIdWwAAYAPAAErYAT4DScAAxd0ewADF4cAARnUCAAIugMAAxfHAHC0vAErAAMX/ASk/ScAAxhAhHMAAxiYWwADGGoDAAMYUwBwtL40xwABOA4CMAQABFsAAxikujTHAAE4DAMAATfxKwADGPAEqP0rAAMZOASIiIiIiJcAAxlsAgMAAxlXAHC0vYAPAAESvABzAAMZ8FsAAxncUwADGccAcLS8AAWADwABEr4TbwABEsYCMAQABFsAAxn8uhNvAAESxAMAATcYAHMAAxpkWwADGlRTAAMaPwBwtLwABYAPAAESvjDzAAESygIwBAAEWwADGnC6MPMAARLIAwABNxgAcwADGtxbAAMaxFMAAxqvAHC0vAAFgA8AARK+E3MAARLOAjAEAARbAAMa6LoTcwABEswDAAE3GABzAAMbYFsAAxtEUwADGy8AcLS8AAWADwABEr4w/wABEtICMAQABFsAAxtsujD/AAES0AMAATcYAHMAAxv0WwADG8xTAAMbtwBwtLwABYAPAAESvkr3AAES1gIwBAAEWwADHAC6SvcAARLUAwABN/AbAAES9gKXAAMcSwADHJsAAx2EBAIIcAWrAAMcTYAPAAE3vq/EAAAEDwADHL8AAx2EAAAAAAAAAYAPAAEyiAUrAAMcyAR7AAMcyvjwFAAUWwADHPS6E28AARLEWwADHQy6MPMAARLIWwADHSC6E3MAARLMWwADHTy6MP8AARLQWwADHVy6SvcAARLUABsAARLmApcAAx2bAAMd5wADIGAAAgO8BasAAx2dgA8AATe+r8QAAAQPAAMeBwADIGAAAAAAAAABgA8AATokBSsAAx4cBJMAAyBgLJ5+5HMAAx6EWwADHnC6E28AARLGbDAEAAZQAwABN4CeEMRzAAMe8FsAAx7gujDzAAESymwwBAAGUAMAATeAnhDEcwADH2RbAAMfTLoTcwABEs5sMAQABlADAAE3gJ4QxHMAAx/cWwADH8C6MP8AARLSbDAEAAZQAwABN4CeEMRbAAMgNLpK9wABEtSeEKAAAHCuAABwr8QAcLHQAHCz4ABwu3QAcL2kAHDBCAAAABgLAAETCgKXAAM06wADNP8AA0YcLn7oAAAFgA8AATe8AAAUEwABExIClwADNP8AAzT8Jgd0AYAPAAEyiAATAAETGgKXAAM0/wADNPwmG/b4gAGADwABOiQAEwABEx4ClwADNP8AAzT8GgQEAXQPAAE1GAWADwABEwgFqAF0DwABNRgFgA8AARMLAAE+rBMAARMiApcAAz13AAM9dBp+9AGADwABEwgFqAGADwABEwsAAT4AEwABEyYClwADRe8AA0XsGn74AYAPAAETCAWoAYAPAAETCwABPlwEFwABEzYClwADNP8AAzT/AANGHAQAAA8AAzT/AANGHAAAAAgICwADNPwAABIHdYAPAAEyiAMAAzT8AAASG/WADwABOiQAAYAPAAETCAT8DCADAAETEgADAHDFhCADAAETGgQDAHDFxCQAAwABOBQAAAAABBsAARMuApcAAzT/AAM0/wADRhwAAgO8AAAABA8AAzT/AANGHAAAAAAAAAGADwABOiQFKAAEPAC7AAETGAAAcMa8AHDHrAAAAAQLAAETOgKXAANUPwADVFcAA2uiDn78AAAFgA8AATe8AAAIEwABE0IClwADXjcAA15MJhBcAYAPAAEyiAATAAETRgKXAANlYwADZYAmfwABgA8AARMIAAQXAAETYgKXAANXBwADVx8AA1lIBAAADwADV08AA1lIAAAACAAACwADV3wAABIQXYAPAAEyiAWoAYAHAAE2sAsAA1fAAAASfwGADwABEwgFqwADWCGADwABEwsAAT5dgA8AARM4BPwUIAcAARNCAAMAcMnUIAcAARNGBAMAcMo4MAEAhHMAA1imAwADWIsAcMnWAjAEAASsAwABNxsAA1iLAANYwAAwAQCEcwADWSoHAANZBwBwyjoCMAQABKwDAAE38wADWQcAA1lEACQHAANXHwABOBQAAAAADBsAARNOApcAA2WXAANl/wADaPQMAgIwBasAA2WZgA8AATe+r8QAAAQPAANmBwADaPQAAAAEBAcAA2YoAAACCHVsAAGADwABK2AE+AknAANmXIRzAANmtFsAA2aGAwADZm8AcM2CNMcAATgOAjAEAARbAANmwLo0xwABOAwDAAE38SsAA2cMBKj9KwADZ1QEiIiXAANniAIDAANncwBwzYGADwABEzgAcwADaChbAANoDFMAA2f3AHDNgAAFgA8AARM6EF8AARNCAjAEAARbAANoNLoQXwABE0ADAAE3GABzAANouFsAA2iUUwADaH8AcM2AAAWADwABEzp/AwABE0YCMAQABFsAA2jEun8DAAETRAMAATfwGwABE1oClwADaQsAA2lbAANp+AQCCHAFqwADaQ2ADwABN76vxAAABA8AA2l/AANp+AAAAAAAAAGADwABMogFKwADaYgEewADaYr48AgACFsAA2m0uhBfAAETQFsAA2nUun8DAAETRAAbAAETUgKXAANqDwADalsAA2uYAAIDvAWrAANqEYAPAAE3vq/EAAAEDwADansAA2uYAAAAAAAAAYAPAAE6JAT4BSsAA2qcBJMAA2uIFJ5/BFsAA2sUuhBfAAETQJ5/CFsAA2tgun8DAAETRJ4QoAAAcMykAHDQ/ABw0pwAcNRUAAAADAsAARNmApcAA2xrAANsgwADkPYOfwwAAAWADwABN7wAAAwTAAETbgKXAAN6owADezQaBlABgA8AARNkBasAA3rBgA8AARNnAAE+7BMAARNyApcAA31jAAN9dCW0AYAPAAEyiAATAAETdgKXAAN/swADf7wmEVABgA8AATKIAAgXAAETqgKXAANy4wADcvsAA3T0BAAADwADcx8AA3T0AAAACAAACwADc0wAABG1gA8AATKIBagBgAcAATawCwADc4wAABIRUYAPAAEyiAWoAYAHAAE2sAmADwABE2QE/BQgBwABE3IAAwBw1zwgBwABE3YEAwBw15wwAQCIhHMAA3PyAwADc9sAcNc+AjAEAASsAwABNxgAcwADdDYDAAN0HwBw1z4FeAQABHMAA3RCUg+sAAAAAwABMxQDAAE3TwADc9sAA3RIADABAIiEcwADdKIHAAN0kwBw154CMAQABKwDAAE3GABzAAN03gcAA3TPAHDXngV4BAAEcwADdOpSD6wAAAADAAEzFAMAATdPAAN0kwADdPAAJAcAA3L7AAE4FAAAAAAXAAETrgKXAAN3JwADdz8AA3ksBn8QAA8AA3eLAAN5LAAAAAQEBwADd5wAAAIQXYAPAAEyiAABgA8AARNkBPwQMAEAiIRzAAN4FgMAA3f7AHDb1gIwBAAErAMAATcYAHMAA3heAwADeEMAcNvWBXgEAARzAAN4alIPrAAAAAMAATMUAwABN08AA3f7AAN4cAAgAwABE3IDAAN4vwBw29QgAwABE3YDAAN5FwBw29QkBwADdz8AATgUAAAAACQbAAETfgKXAAOA2wADgP8AA4GABAJkUAAAAAQPAAOBHwADgYAAAAAAAAABgA8AAStgBSsAA4EoBIhzAAOBQFsAA4EoubcAARNyBXgEAAZMAwABN0wAcwADgXBbAAOBYLoRUwABE3YFeAQABkwDAAE3TBsAAROCApcAA4LfAAODAwADg2wEAn8UAAAABA8AA4MzAAODbAAAAAAAAAGADwABK2AFKwADgzwEcwADg1RbAAODPLm3AAETcgIwBAAEWwADg2C6EVMAARN0AwABNxgbAAEThgKXAAOEYwADhIcAA4T0BAJ/GAAAAAQPAAOEuwADhPQAAAAAAAABgA8AAStgBSsAA4TEBHMAA4TUWwADhMS6EVMAARN2BXgEAARbAAOE4Lm3AAETcAMAATdMGwABE5IClwADhZMAA4WvAAOHGAACfxwAAAAEDwADhdcAA4cYAAAABAQHAAOF9AAAAhwhgA8AATokAAGADwABOiQE+AkAWwADhkC6fxsAAROHAAOGQwADhnABKwADhowEcwADhr4DAAOGqwBw444YTAgACkxbAAOG8Lm3AAETcAMAATp8GwABE5YClwADh7MAA4fPAAOJIAACfyAAAAAEDwADh/MAA4kgAAAABAQHAAOIEAAAAhwhgA8AATokAAGADwABOiQE+AkAWwADiFy6fxsAAROHAAOIXwADiIwBKwADiKgEcwADiNoDAAOIxwBw5Z4YTAQABFsAA4kAuhFTAAETdAMAATp8GwABE5oClwADib8AA4nbAAOLTAACfyQAAAAEDwADigMAA4tMAAAABAQHAAOKIAAAAhwhgA8AATokAAGADwABOiQE+AkAWwADimy6fxsAAROHAAOKbwADipwBKwADirgEcwADiuoDAAOK1wBw564YTAgACFsAA4sQubcAARNwWwADiyy6EVMAARN0AwABOnwbAAETngKXAAOLYwADi8sAA45YDAICMAWrAAOLZYAPAAE3vq/EAAAEDwADi9MAA45YAAAABAQHAAOL9AAAAgh1bAABgA8AAStgBPgJJwADjCh7AAOMOwABGdQIAAi6AwADjHsAcOocASsAA4ywBKT9KwADjPQEiIiXAAONKAIDAAONEwBw6h2ADwABE2QAcwADjbhbAAONoFMAA42LAHDqHAAFgA8AARNltwABE3ICMAQABFsAA43EubcAARNwAwABNxgAcwADjjBbAAOOIFMAA44LAHDqHAAFgA8AARNmEVMAARN2AjAEAARbAAOOPLoRUwABE3QDAAE3GBsAAROKApcAA45vAAOOvwADj8AEAghwBasAA45xgA8AATe+r8QAAAQPAAOO4wADj8AAAAAAAAABgA8AATKIBSsAA47sBHsAA47u+PAIAAhbAAOPRFsAA48subcAARNyCHMAATecWwADj4xbAAOPfLoRUwABE3YIcwABN5wAGwABE6IClwADj9cAA5AjAAOQ7AACA7wFqwADj9mADwABN76vxAAABA8AA5BDAAOQ7AAAAAAAAAGADwABOiQFKwADkFgEkwADkOwUnn8oWwADkKS5twABE3CefyxbAAOQ2LoRUwABE3SeEKAAAHDeMABw3/QAcOFsAHDi5ABw5PQAcOcEAHDpQABw7SwAcO8gAHDwzAAAACQLAAETsgKXAAOUywADlOMAA6yqDn8wAAAFgA8AATe8AAAEEwABE7oClwADp6MAA6e0JjD0AYAPAAEtQAAEFwABE9YClwADlusAA5cDAAOYDAQAAA8AA5dTAAOYDAAAAAQAAAcAA5eAAAASMPWADwABLUAFqAGABwABNrAJgA8AAROwBPwMIAcAARO6AAMAcPMMMAEAhHMAA5fuAwADl9cAcPMOAjAEAASsAwABNxsAA5fXAAOYCAAkBwADlwMAATgUAAAAAAwbAAETwgKXAAOnywADqDMAA6qoDAICMAWrAAOnzYAPAAE3vq/EAAAEDwADqDsAA6qoAAAABAQHAAOoXAAAAgh1bAABgA8AAStgBPgJJwADqJCEcwADqOhbAAOougMAA6ijAHD1djTHAAE4DgIwBAAEWwADqPS6NMcAATgMAwABN/ErAAOpQASo/SsAA6mIBIiXAAOpvAIDAAOppwBw9XWADwABE7AAcwADqnhbAAOqYFMAA6pLAHD1dAAFgA8AAROyMPcAARO6AjAEAARbAAOqhLow9wABE7gDAAE3GBsAARPOApcAA6q/AAOrDwADq3QEAghwBasAA6rBgA8AATe+r8QAAAQPAAOrMwADq3QAAAAAAAABgA8AATKIBSsAA6s8BFsAA6tUWwADqzy6MPcAARO6CHMAATecGwABE8YClwADq4sAA6vXAAOsoAACA7wFqwADq42ADwABN76vxAAABA8AA6v3AAOsoAAAAAAAAAGADwABOiQFKwADrAwEkwADrKAMnn80WwADrIS6MPcAARO4nhCgAABw9JgAcPgMAHD5fABw+vAAAAAMCwABE9oClwADr18AA69zAAPRGC5/OAAABYAPAAE3vAAAJBMAARPiApcAA69zAAOvcCYHdAGADwABMogAEwABE+oClwADr3MAA69wJhv2+IABgA8AATokABMAARPuApcAA69zAAOvcBoEBAF0DwABNRgFgA8AARPYBagBdA8AATUYBYAPAAET2wABQWQTAAET8gKXAAOyRwADskQaf1QBgA8AARPYBagBgA8AARPbAAE/RBMAARP2ApcAA7oLAAO6CBogfAGADwABE9gFqAGADwABE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A8AAS1ABagBgAcAATawCwAEAEQAABJ/tYAPAAEyiAWoAYAHAAE2sAmADwABFIgE/CggBwABFJIAAwBxF8wgBwABFJYEAwBxGDAgBwABFJoIAwBxGJQgBwABFJ4MAwBxGPggBwABFKIQAwBxGVwgBwABFKYUAwBxGcAgBwABFKoYAwBxGiQgBwABFK4cAwBxGoggBwABFLBQAwBxGuwgACQHAAP9nwABOBQAAAAAFwABFMIClwAEAJsABAF7AAQEYAICKviABasABACdgA8AASp8DA8ABAGvAAQEYAAAACQkJwAEAdgAABJ/pYAPAAErYAMABAIoAAASf6mADwABLUADAAQCbAAAEn+tgA8AAS1AAwAEArQAABJ/sYAPAAEtQAMABAMYAAASMPmADwABLUADAAQDXAAAEjD1gA8AAS1AAwAEA5wAABITbYAPAAEtQAMABAPYAAASf5GADwABLUADAAQEJAAAEn+1gA8AATKIAAGADwABFIgE/CggBwABFJIAAwBxHjQgBwABFJYEAwBxHnQgBwABFJoIAwBxHrQgBwABFJ4MAwBxHvQgBwABFKIQAwBxHzQgBwABFKYUAwBxH3QgBwABFKoYAwBxH7QgBwABFK4cAwBxH/QgBwABFLBQAwBxIDQgACQHAAQBewABOBQAAAAAAAAAcSKQAAAAAAsAARTGApcABDPDAAQ0QwAElJQOf7gFqwAEM8WADwABKnwMAAWADsMIAAAABBcAARUyApcABDevAAQ4HwAEOFACAir4gAWrAAQ3sYAPAAEqfAwPAAQ4SwAEOFAAAAAAAAABgA8AARTEBPwEJAcABDgewxAAAAAAVBsAARTOApcABDo7AAQ6ZwAEOtwEEjD0BagBgA5QIwABRZQAAAQPAAQ6fwAEOtwAAAAAAAABgA8AAS1AABsAARTSApcABDy/AAQ86wAEPWgEEjD4BagBgA5QIwABRcwAAAQPAAQ9BwAEPWgAAAAAAAABgA8AAS1AABsAARTWApcABEBPAARAewAEQSAEEn/EBagBgA5QIwABRgQAAAQPAARAqwAEQSAAAAAAAAABgA8AAS1AABsAARTaApcABEPTAARD/wAERNQEEn/MBagBgA5QIwABRjwAAAQPAARERwAERNQAAAAAAAABgA8AAS1AABsAARTeApcABEdbAARHhwAESFwEEn/UBagBgA5QIwABRnQAAAQPAARHzwAESFwAAAAAAAABgA8AAS1AABsAARTiApcABEpTAARKfwAES1wEEn/cBagBgA5QIwABRqwAAAQPAARKywAES1wAAAAAAAABgA8AAS1AABsAARTmApcABE1XAARNgwAETmgEEn/kBagBgA5QIwABRuQAAAQPAARN0wAETmgAAAAAAAABgA8AAS1AABsAARTqApcABFQjAARURwAEVRwEEn/sBagBgA5QIwABRxwAAAQPAARUjwAEVRwAAAAAAAABgA8AAStgABsAARTyApcABFeTAARXpwAEWLwAAn/0AAAABA8ABFe/AARYvAAAAAQEBwAEWBQAAAJ/+YAPAAETsAABcAUrAARYVARzAARYVLp//viABAAEWwAEWKYDAARYdwBxLL4w9wABE7gDAAEU+BsAART6ApcABFjPAARY4wAEWZwAEn/++IAFqAGADlAjAAFHVAAABA8ABFj/AARZnAAAAAQEBwAEWRwAAAIw9YAPAAEtQAABcAAbAAEVEgKXAARkOwAEZHMABGkwAAKABAAAAAQPAARkswAEaTAAAAAQCAsABGTEAAABtYAPAAEyiAMABGTwAAACEVGADwABMogACwAEZUQAAAKACYAPAAET2AWrAARlxYAPAAET2wABP0cABGYYAAACgA2ADwABFBgFqwAEZpGADwABFBsAAUHxdA8AATUYBYAPAAESvAT4DQCEcwAEZyILAARm5wBxMAYCMAQABKwDAAE38wAEZucABGc8AQCEcwAEZ64PAARndwBxMIICMAQABKwDAAE38wAEZ3cABGfIASsABGfkBHMABGgAuoAS+IAQABIDAARoSwBxL4YHAARoZwBxL8BbAARotgsABGh7AHEwBgd3AAET4FsABGkKDwAEaNMAcTCCB3cAARQgAwABFPwbAAEU/gKXAARpQwAEaXsABGs4ABKAEviABagBgA5QIwABR4wAAAQPAARpvwAEazgAAAAQEBMABGnQAAABtYAPAAEyiAMABGn8AAACEVGADwABMogDAARqIAAAAoAJgA8AATKIAwAEanAAAAKADYAPAAEyiAABdA8AATUYBYAPAAESvAAbAAEVFgKXAARwUwAEcIsABHGYABKAGAWoAYAOUCMAAUfEAAAEDwAEcOcABHGYAAAAAAAAAXQPAAE1GAWADwABErwAGwABFRoClwAEcqMABHLXAAR2AAACgCAAAAAEDwAEcycABHYAAAAABAQHAARzRAAAAhBdgA788AABgA8AARM4BPgJOwAEc78ABHPcAAYZsXQPAAE1GAWADwABMogEcwAEc+S6gCb4gAgACFsABHRaAwAEdD8AcTdqMN79DFsABHSGAwAEdGsAcTdqMOL9EAMAARUBKwAEdKgEfwAEdMcAARNgCAAAChBccwAEdTYHAAR1GwBxN84LRAQABkwDAAE1Vn8AcwAEdb2rAAR1pXQPAAE1GAWADwABEwsAAT6uC0QEAARzAAR13gcABHXDAHE3zgtEBAAGUAMAATVUAwABNVQbAAEVAgKXAAR2EwAEdjsABHeEABKAJviABagBgA5QIwABR/wAAAQPAAR2jwAEd4QAAAAICAsABHasAAACMN2ADwABLUADAAR22AAAAjDhgA8AAS1AAAF0DwABNRgFgA8AATKIABsAARUeApcABH23AAR93wAEgIAAAoAsAAAABA8ABH4bAASAgAAAAAQEBwAEflAAAAIW8YAPAAETOAABgA8AARNkBPgJOwAEftMABH70AAaAMXQPAAE1GAWADwABMogEcwAEfvy6gDb4gAQABFsABH9mAwAEf0MAcT0CEF8AARNAAwABFQUrAAR/mAR/AAR/twABE6gIAAAJtHMABIAaBwAEf/sAcT1uC0QEAAZMAwABNVYRUHMABIBiBwAEgEMAcT1uC0QEAAZQAwABNVQbAAEVBgKXAASAkwAEgLsABIG0ABKANviABagBgA5QIwABSDQAAAQPAASA+wAEgbQAAAAEBAcABIEMAAACEF2ADwABMogAAXQPAAE1GAWADwABMogAGwABFSIClwAEhnMABIabAASJPAACgDwAAAAEDwAEhtcABIk8AAAABAQHAASHDAAAAhbxgA8AARM4AAGADwABE2QE+Ak7AASHjwAEh7AABoAxdA8AATUYBYAPAAEyiARzAASHuLqAQviABAAEWwAEiCIDAASH/wBxQYoQXwABE0ADAAEVCSsABIhUBH8ABIhzAAETqAgAAAm0cwAEiNYHAASItwBxQfYLRAQABkwDAAE1VhFQcwAEiR4HAASI/wBxQfYLRAQABlADAAE1VBsAARUKApcABIlPAASJdwAEinAAEoBC+IAFqAGADlAjAAFIbAAABA8ABIm3AASKcAAAAAQEBwAEicgAAAIQXYAPAAEyiAABdA8AATUYBYAPAAEyiAAbAAEVDgKXAASNXwAEjXMABI54ABJ3YviABagBgA5QIwABSKQAAAQPAASNiwAEjngAAAAMDA8ABI2oAAACgE2ADwABClADAASN5AAAAhIRgA8AAS1AAwAEjgwAAAIwyYAPAAEtQAABcAAbAAEVJgKXAASTXwAEk6cABJSMABKAUAWoAYAOUCMAAUjcAAAEDwAEk+8ABJSMAAAAAAAAAXQPAAE1GAWADwABFIgAAABxJJQAcSWEAHEmdABxJ2QAcShUAHEpRABxKjQAcSskAHEsFABxLbgAcS7cAHEzpABxNbQAcTbAAHE6xABxPFgAcT+MAHFA4ABxRBQAcUVoAHFHDABxSBgAAABUCwABFTYClwAEnmsABJ6DAAUblA6AWAAABYAOwwgAAAgTAAEVQgKXAASxVwAEsZhigF74gAGADwABMogErBMAARVGApcABLOvAAS0KGKAYviAAXQPAAE1GAWADwABLUAExwAEtCGADwABLUAABBcAARWKApcABKDPAAShPwAEq5QAAAWrAASg0YAPAAEqfAwPAAShfwAEq5QAAAAEBAcABKG8AAACcJGADwABEhgAAYAPAAEVNAT4EPRfAASh8LqAXviCTwABFUE7AASikAAAAoBldA8AATUYBYAPAAE6JAEnAASi7IRzAASjRFsABKMWAwAEov8AcUwGfoL4gwABEjYCMAQABKwDAAESePgM9icABKOLAHFMsMcABKP5gA8AATokAScABKQghHMABKSoWwAEpHhbAASkSgMABKQzAHFMBn6C+IMAARI2fcL4gwABEm4CMAQABKwDAAE6YPRzAASlNgcABKTvAHFMsgIIBAAEWwAEpYxbAASlXgMABKVHAHFMBn6C+IMAARI2fcL4gwABEmwDAAE1XP0nAASl3IRzAASmhFsABKY0WwAEpgYDAASl7wBxTAZ+gviDAAESNn3G+IMAARJyAjAEAASsAwABNcD0cwAEpxIHAASmywBxTLINrAQABFsABKd0WwAEp0YDAASnLwBxTAZ+gviDAAESNn3G+IMAARJwAwABNWD8/PRzAASn9LpqCviAIAAgWwAEqF4DAASoRwBxTAZ9vviDAAESJNcABKi0AAAEAYAPAAESXARbAASotgMABKifAHFMBn6C+IMAARI0jHMABKi2CwAEqLcAcVJmAjAEAASsAwABEnisWwAEqOoLAASotwBxUmZ9vviDAAESaAWADq/EWwAEqUIDAASpKwBxTAZ9wviDAAESKgcABKmPAHFMsFsABKoKAwAEqfMAcUwGfcr4gwABEixbAASqZgMABKpPAHFMBjFS+IMAARIwWwAEqroDAASqowBxTAZ+hviDAAESOHsABKr/AAEVWAQABFsABKtOAwAEqzcAcUwGfdr4gwABEjwAAwABFVAEJAcABKE+wxAAAAAAMBsAARVSApcABKurAASrvwAEr3gAEmoK+IAFqAGADlAjAAFJFAAABA8ABKvvAASveAAAACAgIwAErCwAAAIZsYAOsQADAASshAAAAoBtgA6vxAMABKzcAAACfgWADwABOiQDAAStVAAAAoBxdA8AATUYBWwDAAStxAAAAn4NgA8AAS1AAwAErhgAAAIw+YAPAAEtQAMABK5kAAACfpmADwABOiQDAASuuAAAAn4ZgA8AATokAAFwABsAARV+ApcABLCDAASwowAEsTQEAoB0AAAABA8ABLDnAASxNAAAAAAAAAGADwABMogFKwAEsPAEWwAEsPC6gF74gwABFUAbAAEVggKXAASyiwAEss8ABLNoBAKAeAAAAAQPAASzFwAEs2gAAAAAAAABdA8AATUYBYAPAAEtQAUrAASzIARbAASzILqAYviDAAEVRBsAARVmApcABLXnAAS1+wAEx6QAAoB8AAAABA8ABLYfAATHpAAAAAQEBwAEtkgAAAJwkYAPAAERvAABcAT4GTsABLbLAAS3DAAGgIF0DwABNRgFgA8AATokBMcABLc1gA8AATokAScABLdUhHMABLesWwAEt34DAAS3ZwBxW/59wviDAAERzgIwBAAErAMAATpg9HMABLguBwAEt+sAcVxWAggEAARbAAS4VgMABLg/AHFb/n3C+IMAARHMAwABNVz9JwAEuJyEcwAEuRRbAAS4xgMABLivAHFb/n3G+IMAARHSAjAEAASsAwABNcD0cwAEuY4HAAS5SwBxXFYNrAQABFsABLnCAwAEuasAcVv+fcb4gwABEdADAAE1YP07AAS6UAAAAoCFgA6vxAEnAAS6tIRzAAS7FFsABLreAwAEuscAcVv+fer4gwABEfoCMAQABKwDAAE1wPgM9isABLtbAHFf0HsABLuyr9QEAARzAAS8QFsABLwkWwAEu+4DAAS71wBxW/596viDAAER+gcjAAE12g8YBAAFqwAEvHmADwABMohwAwABNygBOwAEvOMABL0MAAI+OYAPAAEyiAZM+Ak7AAS9wAAAAgQddA8AATT8BYAPAAEQMARbAAS9wHgCTzQEBXQPAAE0EAWADwABEDAEWwAEvcIDAAS9qwBxW/596viDAAER+AIEIwABNJkUAAAEcwAEvcIQAwBxYmYEJAAAAAMAATUEAPgJOwAEvXwAAAJ80YAPAAEQMARbAAS9/hADAHFiZgQrAAE1DPgI9HMABL5GFwAEvicAcWQOfQr4gAQABHsABL6Kr9gMAAxbAAS+7gsABL6fAHFf0gcGr2oPAAS/DwBxYgmrAAS/bYAPAAEyiHAAAwABEFj2LwAEv9MAcWIIcwAEv/4PAAS/0wBxYgoENAQABasABMA5gA8AATKIcAMAATcg/PRzAATAwLqAiviAOAA4WwAEwSIDAATBCwBxW/59vviDAAERygcABMFjAHFcVFsABMHaAwAEwcMAcVv+fcr4gwABEdRbAATCNgMABMIfAHFb/n3O+IMAARHYWwAEwqYDAATCjwBxW/590viDAAER3FsABMMOAwAEwvcAcVv+MVL4gwABEeBbAATDYgMABMNLAHFb/n3W+IMAARHkewAEw9MAARVYBAAEWwAExCIDAATECwBxW/592viDAAER6ADXAATEeAAABAGADwABAsgEWwAExHoDAATEYwBxW/593viDAAER7IxzAATEeg8ABMR7AHFphgIwBAAErAMAATfwrFsABMSuDwAExHsAcWmGcGL4gwABA0wFdA8AATUYBWzXAATFBAAABAGADwABAsgEWwAExQYDAATE7wBxW/593viDAAER7IxzAATFBg8ABMUHAHFrBgIwBAAErAMAATfwrFsABMU6DwAExQcAcWsGDpL4gwABAtQFgA6vxNcABMWEAAAEAYAPAAECyARbAATFhgMABMVvAHFb/n3i+IMAARHwjHMABMWGDwAExYcAcWx2AjAEAASsAwABN/CsWwAExboPAATFhwBxbHZwYviDAAEDTAV0DwABNRgFbNcABMYQAAAEAYAPAAECyARbAATGEgMABMX7AHFb/n3i+IMAARHwjHMABMYSDwAExhMAcW32AjAEAASsAwABN/CsWwAExkYPAATGEwBxbfYOkviDAAEC1AWADq/EewAExpcAAQvwBAAEWwAExuoDAATG0wBxW/595viDAAER9AILAATHLwBxX9ADAAEVVBsAARVWApcABMe7AATHzwAEzpwAEoCK+IAFqAGADlAjAAFJTAAABA8ABMf3AATOnAAAADg4OwAEyDQAAAIZsYAOsQADAATIoAAAAoCRdA8AATUYBWwDAATJBAAAAn4NgA8AAS1AAwAEyVgAAAJ+EYAPAAEtQAMABMnAAAACfhWADwABLUADAATKIAAAAjD5gA8AAS1AAwAEymwAAAJ99YAPAAEtQAMABMrsAAACfhmADwABOiQDAATLVAAAAoCVdA8AATUYBWwDAATL1AAAAoCZgA6vxAMABMxcAAACgJ10DwABNRgFbAMABMzcAAACgKGADq/EAwAEzVAAAAJ4VYAOr8QDAATNuAAAAoClgA6vxAABcAAbAAEVWgKXAATOswAEzusABM/IAAaAqviAAAAABA8ABM8fAATPyAAAAAQEBwAEzzwAAAJ+GYAPAAEWbAABgA8AATokBSsABM9oBNcABM9oAAAEAYAPAAE6JATXAATPaAAABAGADwABFmwGAwAEz2sAcXUojHMABM9qBwAEz2sAcXXmAjAEAASsAwABFqiscwAEz4oHAATPawBxdeYDvAAAAAMAARasBYAPAAE6JIxzAATPagcABM9rAHF1pgIwBAAErAMAATpgnAIHAATPawBxdaQFgA8AATokGwABFWoClwAE1PcABNULAATVlAASaRgFqAGADlAjAAFJhAAABA8ABNUXAATVlAAAAAAAAAFwABsAARVuApcABNenAATXuwAE2aQAAoCwAAAABA8ABNfXAATZpAAAAAQEBwAE1/QAAAIcIYAPAAE6JAABcAT4CTsABNhbAATYcAAEkYAPAAE6JARzAATYeLqAtviABAAGAwAE2J8AcXlgAwABFV0nAATYyIRzAATY8gcABNjbAHF5ugIwBAAErAMAATpg9MMABNksfwAE2UcAAS9EBAAGBwAE2X8AcXm4APwbAAEVXgKXAATZtwAE2dMABNqsABKAtviABagBgA5QIwABSbwAAAQPAATZ8wAE2qwAAAAEBAcABNoQAAACHCGADwABOiQAAYAPAAE6JAAbAAEVcgKXAAUGkwAFBqcABRSwAAKAvAAAAAQPAAUG3wAFF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BMAARaKAnMAAUgfAAFIUBKD4viAAYAPAAEWbASsEwABFo4CcwABSJsAAUjkEoPm+IABgA8AATokBKwIFwABFsICcrbGtt65SAQAAA629rlIAAAACAQKtyAAABKBYYAPAAE6JAK3iAAAEoOpgA8AATokBagBgAcAATawCAGADwABFmwE/BggBwABFnoAAwBxtrggBwABFoIEAwBxtvAwAQCEcrgyArf7AHG2ugIwBAAErAMAATpit/q4TAAwAQCEcrjKAriTAHG2ugIwBAAEnAADAAE6YriSuNwAIAMAARaQrCQGtt8AATgUAAAAABcAARbGAnLFxsXeyqwGg+gADsYmyqwAAAAMAAAOxlwAAAKD7YAPAAE6JAWqxpmADwABOicAAWFGxtgAABKDpYAPAAE6JAWoAYAHAAE2sArHNAAAAoP1gA8AATokBagBgAcAATawCYAPAAEWbAT8ICAHAAEWkgQDAHG59DABAIRyx9YCx6MAcbmKAjAEAASsAwABOmLHosfwADABAIRyyGoCyDcAcbmKAjAEAAScAAMAATpiyDbIfAAgAwABFnoCyOcAcbmIMAEAhHLJggbJVwBxufYCMAQABJwAAwABOmLJVsmUADABAIRyygoKydsAcbpSAjAEAAScAAMAATpiydrKHAAgAwABFoIKyoMAcbpQJAbF3wABOBQAAAAAHBsAARaaAnLbgtuu3NwEAoPsAAAABA7b4tzcAAAAAAAAAYAPAAE6JAUq2+wE1txcAAAEAYAPAAE6JARy3F2q2+10DwABNeAJgA8AATolgA8AATonAAFfEgtEBAAEWtxguoFi+IMAARZ4AwABNjCMctxeAtxfAHG+PgIwBAAErAMAATpgWtyouoFi+IMAARZ6AtxfAHG+PAWADwABOiQbAAEWngJzAAE33wABOAsAATkkBAKD9AAAAAQPAAE4OwABOSQAAAAAAAABgA8AATokBSsAAThEBNcAATisAAAEAYAPAAE6JARzAAE4rasAAThFdA8AATXgCYAPAAE6JYAPAAE6JwABYNoLRAQABFsAATiwuoOq+IMAARaAAwABNjCMcwABOK4DAAE4rwBxwOICMAQABKwDAAE6YFsAATj0uoOq+IMAARaCAwABOK8AccDgBYAPAAE6JBsAARaqAnMAAUJvAAFC1wABRngMAgIwBasAAUJxgA8AATe+r8QAAAQPAAFC3wABRngAAAAEBAcAAUMAAAACCHVsAAGADwABK2AE+AknAAFDNHsAAUNHAAEZ1AgACLoDAAFDhwBxw7wBKwABQ7wEpP0rAAFEAASIiIiXAAFENAIDAAFEHwBxw72ADwABFmwAcwABRNRbAAFEoFMAAUSLAHHDvAAFgA8AARZug+8AARaaAjAEAARbAAFE4LqD7wABFpgDAAE6YABzAAFFhFsAAUVYUwABRUMAccO8AAWADwABFm6DpwABFpICMAQABFsAAUWQuoOnAAEWkAMAATpgAHMAAUYwWwABRgBTAAFF6wBxw7wABYAPAAEWboP3AAEWngIwBAAEWwABRjy6g/cAARacAwABOmAbAAEWogJzAAFGjwABRt8AAUfQBAIIcAWrAAFGkYAPAAE3vq/EAAAEDwABRwMAAUfQAAAAAAAAAYAPAAEyiAUrAAFHDAR7AAFHDvjwDAAMWwABRzi6g+8AARaYWwABR3C6g6cAARaQWwABR6C6g/cAARacABsAARauAnMAAU1nAAFNswABUFwAAgO8BasAAU1pgA8AATe+r8QAAAQPAAFN0wABUFwAAAAAAAABgA8AATokBPgJJwABTfSEewABTgsAARnUCAAIawABTjMAARaIuAD4CPRvAAFOqwABFoi49G8AAU8bAAEWjHMAAU9wuoP6+IAEAASeAigDAAEWuP0rAAFP5ARrAAFQAwABFowbAAEWsgJzAAFULwABVEsAAVTYAAKD/AAAAAQPAAFUfwABVNgAAAAAAAABgA8AATokBSsAAVSUBHMAAVSUuoP6+IAEAASeBBgDAAEWuBsAARa6AnMAAVTvAAFVCwABWSAAAoP6+IAAAAAEDwABVTsAAVkgAAAABAQHAAFVWAAAAgcBgA8AATokAAGADwABOiQE+BE7AAFV6wABVfgABlAFgA8AATtMBH8AAVYDAAE7yAQABFsAAVY0uoPvAAEWmAEnAAFWgIRzAAFWvFsAAVaQuoOnAAEWkgIwBAAErAMAATpg9HMAAVcKBwABVvsAcc5CBwwEAASTAAFXfAoDAAFXKwBxzdRbAAFXULqDpwABFpADAAE7nP0nAAFXmIRzAAFX3FsAAVeouoOq+IMAARaCAjAEAASsAwABOmD0cwABWCoHAAFYGwBxzkIHDAQABJMAAVigCgMAAVhLAHHN1FsAAVhwuoP3AAEWnAMAATuc/SsAAVi8BHMAAVjqBwABWNsAcc5CA7wAAAADAAE7sAAAcb2IAHG//ABxwuAAcce4AHHJiABxy/AAcc0kAHHSKAAAABwLAAEWygJzAAGIvwABiNcAAynQDoQAAAAFgA8AATe8AACgEwABFtYCcwABnLsAAZ0UYoQG+IABgA8AAS1ABKAAAAAAAAPA/BMAARbaAnMAAamjAAGqBGKECviAAYAO/WQFqwABqfWADv1m5FATAAEW3gJzAAG0zwABtVBihA74gAGADwABLUAFqwABtS2ADwABLUMAAWFQEwABFuICcwABwxcAAcOUYoQW+IABgA8AARY8BasAAcOFgA8AARY/AAFN+BMAARbmAnMAAdajAAHXJGKEGviAAYAPAAEWPAWrAAHXFYAPAAEWPwABTfgTAAEW6gJzAAHjiwAB5CxihB74gAGADwABFjwFqwAB5B2ADwABFj8AAU34EwABFu4CcwAB+msAAfrcYhqS+IABgA8AARY8BasAAfrNgA8AARY/AAFN+BMAARbyAnMAAgdTAAIHlGKEIviAAXgMAAAAAAAFXA74pAFwBKwTAAEW9gJzAAIHuwACCAxihCb4gAGADhV8BKwTAAEW+gJzAAIeSwACHmhihCr4gAF0DwABNRgFgA8AARZsBKwTAAEW/gJzAAIkjwACJMxihC74gAF4DAAAAAAABVwO+KQBcASsEwABFwICcwACJPMAAiVAYoQy+IABgA4VfASsEwABFwYCcwACLY8AAi3kYoQ2+IABgA8AATokBKwTAAEXCgJzAAIw5wACMXxihDr4gAGADwABK2AEqBMAARcOAnMAAjjrAAI5QGKEPviAAYAPAAEtQASgAAAAAAADwPwTAAEXEgJzAAI8pwACPRxihEL4gAGADwABK2AEqBMAARcWAnMAAkOvAAJEEGKERviAAXgMAAAAAAAFXA74pAFwBKwTAAEXGgJzAAJENwACRKhihEr4gAGADhV8BKwTAAEXHgJzAAJK7wACS4RihE74gAGADwABGLQFqwACS3GADwABGLcAAWGAEwABFyICcwACUjsAAlKoYoRW+IABeAwAAAAAAAVcDvikAXAErBMAARcmAnMAAlLPAAJTTGKEWviAAYAOFXwErBMAARcqAnMAAmS/AAJk8GKEXviAAXgMAAQEBYAPAAEt0AAFXA74qAFwBKwTAAEXLgJzAAJlFwACZVhihGL4gAGADhV8BKwTAAEXMgJzAAJx7wACchxihGb4gAF4DAAAAAAABVwO+KQBcASsEwABFzYCcwACckMAAnKAYoRq+IABgA4VfASsEwABFzoCcwAChkMAAoaAYoRu+IABeAwABAQFdA8AATUYBYAPAAEVxAAFXA74rAFwBKwTAAEXPgJzAAKGpwAChvRihHL4gAGADhV8BKwTAAEXQgJzAAKLPwACi5RihHb4gAF4DAAEBAWADwABK2AABVwO+MABcASsEwABF0YCcwACkycAApN0YoR6+IABeAwABAQFgA8AAQ2kAAVcDviwAXAErBMAARdKAnMAApObAAKT+GKEfviAAYAOFXwErBMAARdOAnMAAs2PAALN8GKEgviAAYAPAAErYASoEwABF1ICcwAC0j8AAtKkYoSG+IABeAwAAAAAAAVcDvikAXAErBMAARdWAnMAAtLLAALTQGKEiviAAYAOFXwErBMAARdaAnMAAtyjAALc6GKEjviAAXgMAAwMDYAPAAEyiYAPAAENuYAOr8QABVwO+LQBcASsEwABF14CcwAC3Q8AAt1kYoSS+IABgA4VfASsEwABF2ICcwAC4nMAAuLIYoSW+IABgA8AARhcBKwTAAEXZgJzAALnUwAC58xihJr4gAF4DAAAAAAABVwO+KQBcASsEwABF2oCcwAC5/MAAuhwYoSe+IABgA4VfASsEwABF24CcwADE78AAxQEYoSi+IABeAwADAwNgA8AATolgA6vxXgMAAQEBYAOr8QABVwO+LgBcAAFXA74vAFwBKwTAAEXcgJzAAMUKwADFIBihKb4gAGADhV8BKwEFwABGFoCcwABiQMAAYkDAAGKKAICKviAAA8AAYkjAAGKKAAAAAAAAAGADwABFsgE+AT0XwABiUS6hHb4gFsAAYmouoSq+IMAARgnAAEXQAQkBwABiQMAATgUAAAAAMwbAAEXegJzAAGbzwABm/sAAZyMBAKErAAAAAQPAAGcPwABnIwAAAAAAAABgA8AAS1ABSsAAZxIBFsAAZxIuoQG+IMAARbUGwABF34CcwABqOcAAakLAAGpfAQChLAAAAAEDwABqT8AAal8AAAAAAAAAYAO/WQFKwABqUgEWwABqUi6hAr4gwABFtgbAAEXggJzAAGz+wABtCcAAbSgBAKEt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LqEXviCAwACZmcAcgkjAAEXKPRfAAJmnLqEYviAawACZwIVlwABFywbAAEXwgJzAAJw+wACcT8AAnGoBAKE7AAAAAQPAAJxbwACcagAAAAAAAABeAwAAAAAAAVcDvikAXAFKwACcXgEWwACcXi6hGb4gwABFzAbAAEYAgJzAAJykwACcqMAAnRECAKE7AAAAAQPAAJyzwACdEQAAAAEBAcAAnMEAAAAbXgMAAAAAAAFXA74pAFwAAFwBPgI9F8AAnNEuoRm+IIDAAJzgwByDEMAARcw9F8AAnO4uoRq+IBrAAJ0GhWXAAEXNBsAARfGAnMAAoUXAAKFZwAChfAEAoTwAAAABA8AAoWnAAKF8AAAAAAAAAF4DAAEBAV0DwABNRgFgA8AARXEAAVcDvisAXAFKwAChbAEWwAChbC6hG74gwABFzgbAAEYBgJzAAKHBwAChxcAAoq8CAKE8AAAAAQPAAKHUwACirwAAAAEBAcAAoeUAAAAbXgMAAQEBXQPAAE1GAWADwABFcQABVwO+KwBcAABcAT4DScAAofUhHMAAogwcwACiA4DAAKH6wByD34CMAQABKwDAAE38gIwBAAEcwACiIRbAAKIQLqEbviDAAEXOgIwBAAErAMAATfwAwABN/D4BPRzAAKIzLqEdviABAAEhHMAAolOAwACiSsAcg9+AjAEAASsAwABN/ADAAEXQPz0XwACiZy6hG74ggMAAonrAHIPfwABFzj0XwACiiC6hHL4gGsAAoqSFZcAARc8GwABGCYCcwACi6cAAou7AAKM8AAShKr4gAWoAYAOUCMAAWHcAAAEDwACjCsAAozwAAAABAQHAAKMQAAAAImADwABK2AAAXAAGwABF8oCcwACkYsAApIDAAKSrAQChPgAAAAEDwACklMAApKsAAAAAAAAAXgMAAQEBYAPAAENpAAFXA74sAFwBSsAApJcBFsAApJcuoR6+IMAARdEGwABGAoCcwAClAsAApQbAAKWUAgChPgAAAAEDwAClGcAApZQAAAABAQHAAKU0AAAAG14DAAEBAWADwABDaQABVwO+LABcAABcAT4CPRfAAKVELqEeviCAwAClW8AchXjAAEXRPRfAAKVpLqEfviAawACliYVlwABF0gbAAEXzgJzAAKt0wACrf8AAq6YBAKE/AAAAAQPAAKuQwACrpgAAAAAAAABg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q/EAAFwABsAARg2AnMAAxt/AAMcGwADIVgABoVe+IAAAAAEDwADHK8AAyFYAAAABAQHAAMdMAAAAG14DAAEBAWADq/EAAVcDvi4AXAAAXgMAAQEBYAOr8QABVwO+LgBcAT4DScAAx1wcwADHaYDAAMdgwByNLoCMAQABKwDAAE38SsAAx3gBKz9OwADH1sAAx+cAAaFYYAOFXwEawADH7oVlSsAAx/wBNMAAyAMDwADIA8AAyFIAAAABAQHAAMgNAAAAO2ADq/EAAGABwABNrAE+AT0cwADILIHAAMgbwByNhoHkAgFgA6vxAoDAAMg8wByNLoLAAMhGwByNuACFcAbAAEYTgJzAAMomwADKL8AAynIABKFZAWoAYAOUCMAAWOcAAAEDwADKR8AAynIAAAAAAAAAYAOr8QAAABx6xwAcew0AHHtRABx7lwAce90AHHwjABx8aQAcfK8AHHz9ABx9cQAcfg0AHH5aABx+qAAcfxwAHH90ABx/ugAcgAAAHIBOAByAwgAcgQgAHIFWAByBygAcgh4AHIKYAByC5gAcg1oAHIO1AByEsgAchPoAHIVOAByFyAAchhIAHIZQAByGhwAchswAHIcSAByHYAAch9QAHIgyAByItgAciPwAHIlKAByJvgAcigUAHIpMAByLPAAci7IAHIwcAByMrAAcjQIAHI38AByONgAAADMCwABGF4CcwADL4MAAy+bAANO2g6FbAAABYAPAAE3vAAAGBMAARhqAnMAAzEDAAMxfBqFcviAAYAPAAEyiAWrAAMxbYAPAAEyiFATAAEYbgJzAAMx0wADMkAahXb4gAGADwABMogFqwADMjGADwABMohYEwABGHICcwADMpcAAzMYGoV6+IABgA8AATKIBasAAzMJgA8AATKIYBMAARh2AnMAAzNvAAMzzBqFfviAAYAPAAEyiAWrAAMzvYAPAAEyiHATAAEYegJzAAM0IwADNJAahYL4gAGADwABMogFqwADNIGADwABMolQEwABGH4CcwADNasAAzXAJg4O+IABgA8AATKIAAQXAAEYsgJzAAMwAwADMBsAAzCoBgIq+IAADwADMHcAAzCoAAAABAQHAAMwjAAAEg4NgA8AATKIAAGADwABGFwE/AggBwABGH4AAwByQOgkBwADMBsAATgUAAAAACAbAAEYhgJzAAM49wADORsAAzoIBAKFhAAAAAQPAAM5bwADOggAAAAAAAABgA8AAStgBSsAAzl4BIRzAAM5+HMAAznVqwADOXmADwABMohSAoQEAARbAAM53LoODviDAAEYfAMAATLqAjAEAAZMAwABNxgbAAEYigJzAAM7GwADOz8AAzwABAJw0AAAAAQPAAM7cwADPAAAAAAAAAABgA8AAStgBSsAAzt8BIRzAAM78HMAAzvNqwADO32ADwABMohaAoQEAARbAAM71LoODviDAAEYfAMAATLqAjAEAAZMAwABNxgbAAEYjgJzAAM9RwADPWsAAz5UBAKFiAAAAAQPAAM9swADPlQAAAAAAAABgA8AAStgBSsAAz28BIRzAAM+RHMAAz4hqwADPb2ADwABMohiAoQEAARbAAM+KLoODviDAAEYfAMAATLqAjAEAAZMAwABNxgbAAEYkgJzAANALwADQFMAA0D0BAKFjAAAAAQPAANAdwADQPQAAAAAAAABgA8AAStgBSsAA0CABIRzAANA5HMAA0DBqwADQIGADwABMohyAoQEAARbAANAyLoODviDAAEYfAMAATLqAjAEAAZMAwABNxgbAAEYlgJzAANDQwADQ2cAA0QoBAKFkAAAAAQPAANDmwADRCgAAAAAAAABgA8AAStgBSsAA0OkBIRzAANEGHMAA0P1qwADQ6WADwABMolSAoQEAARbAAND/LoODviDAAEYfAMAATLqAjAEAAZMAwABNxgbAAEYogJzAANEPwADRIsAA0sAAAIDvAWrAANEQYAPAAE3vq/EAAAEDwADRKsAA0sAAAAAAAAAAYAPAAE6JAT4HTsAA0UbAANFPAAGhZV0DwABNRgFgA8AATokBMcAA0VlgA8AATokAScAA0WEWwADRZS6hYcAARiE9HMAA0YqAwADRgcAckuuAggEAASehYQDAAE1XP0nAANGrFsAA0a8unDTAAEYiPRzAANHMgMAA0cPAHJLrgIIBAAEnnDQAwABNVz9JwADR5RbAANHpLqFiwABGIz0cwADSC4DAANICwByS64CCAQABJ6FiAMAATVc/ScAA0ikWwADSLS6hY8AARiQ9HMAA0kaAwADSPcAckuuAggEAASehYwDAAE1XP0nAANJbFsAA0l8uoWTAAEYlPRzAANJ8gMAA0nPAHJLrgIIBAAEnoWQAwABNVz9KwADSlQEkwADSvAInoVuAwADSs8AckusGwABGKYCcwADSxcAA0t/AANOAAwCAjAFqwADSxmADwABN76vxAAABA8AA0uHAANOAAAAAAQEBwADS6gAAAIIdWwAAYAPAAErYAT4CScAA0vchHMAA0w0WwADTAYDAANL7wByURo0xwABOA4CMAQABFsAA0xAujTHAAE4DAMAATfxKwADTIwEqP0rAANM1ASIlwADTQgCAwADTPMAclEZgA8AARhcAHMAA03MWwADTbBTAANNmwByURgABYAPAAEYXg4O+IMAARh+AjAEAARbAANN2LoODviDAAEYfAMAATcYGwABGJoCcwADThcAA05nAANO0AQCCHAFqwADThmADwABN76vxAAABA8AA06LAANO0AAAAAAAAAGADwABMogFKwADTpQEWwADTrBbAANOlLoODviDAAEYfghzAAE3nAAAckG8AHJDhAByRUwAckcUAHJI3ABySqQAclA8AHJTwAByVTgAAAAgCwABGLYCcwADT8cAA0/bAANVyC6FmAAABYAPAAE3vAAAFBMAARi+AnMAA0/bAANP2CYHdAGADwABMogAEwABGMYCcwADT9sAA0/YJhv2+IABgA8AATokABMAARjKAnMAA0/bAANP2BoEBAF0DwABNRgFgA8AARi0BagBdA8AATUYBYAPAAEYtwABZCQTAAEYzgJzAANSywADUsgahaABgA8AARi0BagBgA8AARi3AAFj1BMAARjSAnMAA1WvAANVrBqFpAGADwABGLQFqAGADwABGLcAAWGABBcAARjiAnMAA0/bAANP2wADVcgEAAAPAANP2wADVcgAAAAICAsAA0/YAAASB3WADwABMogDAANP2AAAEhv1gA8AATokAAGADwABGLQE/AwgAwABGL4AAwByWdQgAwABGMYEAwByWhQkAAMAATgUAAAAAAQbAAEY2gJzAANP2wADT9sAA1XIAAIDvAAAAAQPAANP2wADVcgAAAAAAAABgA8AATokBSgABDwAuwABGMQAAHJbDAByW/wAAAAEACAS+MoCZn3efmAWhagBgA76ZAR+fiL6rAAAAAAS+NICfgOyBAQaha74gAGADwABAEQFqgPdgA8AAQBHAAFkZBL41gJqm1qbyBqFsviAAYAPAAEyiAWqm8GADwABMooQzBL42gKGDXYN9BqFtviAAYAOr5wFqg3dgA6vnnBgEvjeAoYrrivUEoW6+IABgA8AATKIABL44gJvAAKMTwACjLgahb74gAGADwABMogFqwACjLGADwABMooZyBL45gKXAAUj7wAFJcwWhcL4gAGADq/EBHMABSWcWwAFJYBzAAUkdFsABSRVqwAFJEGADkaaGl4ZQkayBrAEAARzAAUktasABSShgA5Ahh6yGTwEAATLAAUlFYAPAAE6JWwEnhdknoXEAkCgAkbSBwavaji8AAAAAq9IEvjqAnMAA2NDAANjjBaFyAGADwABFsgEfwADY4MAARhYAAAAAPga+PICfhRaFGpD/AAGhcwAAAAEDhSSQ/wAAABQCFIUvAAAAoXRgA8AATe8AhUgAAAChdWADwABN7wCFYQAAAKF2YAPAAE3vAWqFaWADwABAEcAAWRmFfAAAAKF3YAPAAE3vAWqFhGADwABAEcAAWRmFlQAAAKF4YAPAAE3vAWqFnWADwABAEcAAWRmFrgAAAKF5YAPAAE3vAWqFtmADwABAEcAAWRmFyQAAAKF6YAPAAE3vAWqF0WADwABAEcAAWRmF4gAAAKF7YAPAAE3vAWqF6mADwABAEcAAWRmF+wAAAKF8YAPAAE3vAWqGA2ADwABAEcAAWRmGFgAAAKF9YAPAAE3vAWqGHmADwABAEcAAWRmGLwAAAKF+YAPAAE3vAWqGN2ADwABAEcAAWRmGSAAAAKF/YAPAAE3vAWqGUGADwABAEcAAWRmGYwAAAKGAYAPAAE3vAWqGa2ADwABAEcAAWRmGfAAAAKGBYAPAAE3vAWqGhGADwABAEcAAWRmGlQAAAKGCYAPAAE3vAWqGnWADwABAEcAAWRmGsAAAAKGDYAPAAE3vAWqGuGADwABAEcAAWRmGyQAAAKGEYAPAAE3vAWqG0WADwABAEcAAWRmG4gAAAKGFYAPAAE3vAWqG6mADwABAEcAAWRmG/QAAAKGGYAPAAE3vAWqHBWADwABAEcAAWRmHFgAAAKGHYAPAAE3vAWqHHmADwABAEcAAWRkAYAPAAEyiAT4FTocyhzkAAIDmYAPAAEyiAZM9FYdAwByakhQeh1LAAEAWAgACFIdawByakhQAgIdiwByYhQA9FYdswByakhQeh37AAEAWAgACFIeGwByakhQAgYeOwByYkwBJh5ghHIeigoecwByYoYCMAQABaoelYAPAAEARwABZGQDAAE38PgI9FYe1wByakhQeh8fAAEAWAgACFIfPwByakhQAgofXwByYoQBJh+MhHIftg4fnwByYvICMAQABaofwYAPAAEARwABZGQDAAE38PgI9FYgCwByakhQeiBTAAEAWAgACFIgcwByakhQAg4gkwByYvABJiDIhHIg8hIg2wByY14CMAQABaog/YAPAAEARwABZGQDAAE38PgI9FYhTwByakhQeiGXAAEAWAgACFIhtwByakhQAhIh1wByY1wBJiIUhHIiPhYiJwByY8oCMAQABaoiSYAPAAEARwABZGQDAAE38PgI9FYiowByakhQeiLrAAEAWAgACFIjCwByakhQAhYjKwByY8gBJiNwhHIjmhojgwByZDYCMAQABaojpYAPAAEARwABZGQDAAE38PgI9FYkBwByakhQeiRPAAEAWAgACFIkbwByakhQAhokjwByZDQBJiTchHIlBh4k7wByZKICMAQABaolEYAPAAEARwABZGQDAAE38PgI9FYlewByakhQeiXDAAEAWAgACFIl4wByakhQAh4mAwByZKABJiZYhHImgFImawByZQwgAgIwBAAFqiaNgA8AAQBHAAFkZAMAATfw+Aj0Vib/AHJqSFB6J0cAAQBYCAAIUidnAHJqSFAAUieHAHJlDCAAASYn5IRyKAxSJ/cAcmV4JAICMAQABaooGYAPAAEARwABZGQDAAE38PgI9FYokwByakhQeijbAAEAWAgACFIo+wByakhQAFIpGwByZXgkAAEmKYCEcimoUimTAHJl5CgCAjAEAAWqKbWADwABAEcAAWRkAwABN/D4CPRWKjcAcmpIUHoqfwABAFgIAAhSKp8AcmpIUABSKr8AcmXkKAABJisshHIrVFIrPwByZlAsAgIwBAAFqithgA8AAQBHAAFkZAMAATfw+Aj0VivrAHJqSFB6LDMAAQBYCAAIUixTAHJqSFAAUixzAHJmUCwAASYs6IRyLRBSLPsAcma8MAICMAQABaotHYAPAAEARwABZGQDAAE38PgI9FYtrwByakhQei33AAEAWAgACFIuFwByakhQAFIuNwByZrwwAAEmLrSEci7cUi7HAHJnKDQCAjAEAAWqLumADwABAEcAAWRkAwABN/D4CPRWL4MAcmpIUHovywABAFgIAAhSL+sAcmpIUABSMAsAcmcoNAABJjCQhHIwuFIwo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TwoAAMAAS14AhNsehtyY+QIBYAPAAEtQAigAAAAAAAAAAByG+oeG6sAcoyWBBgEAARSG/MAco10LAADAAEteAMAARbs1hxIAAAEAXAEXhxIUhDDAHKOqEAChB74gH4c3wABFmgQAAASMPB6HR5j5AgFgA8AAS1ACKAAAAAAAAAAAFIdVwByjawwAAITcHod8mPkCAWADwABLUAIoAAAAAAAAAAAUh4rAHKN5DQAAjD8eh7SY+QIBYAPAAEtQAigAAAAAAAAAABSHwsAco4cOAACE2x6H65j5AgFgA8AAS1ACKAAAAAAAAAAAFIf5wByjlQ8AAMAARboUhDDAHKOqEAA9HogVvlQCAAIWiCQaiB2+OqExwABF5RaIPRqINr46oQm+IMAARb0ABr5CgJqIhYiMiPYAAZaiviAAAAABA4iaiPYAAAAAAAAAYAPAAE6JAT4CSYihHIizFoisGoilvjqfhsAAReaAjAEAASsAwABFqj4BSojCASs/SojVARyI6haI4xqI3L46n4bAAEXmgO8AAAAAwABFqwa+Q4CaiPmJPIlhAAGhmb4gAWqI+mADwABKnwMAAAEDiU2JYQAAAAAAAABeAwAAAAAAAVcDviMAYAPAAE6JAUqJUwFqiVNhAwBgA8AATonAAFkgBr5EgJqJZImdjGYAAaGaviABaollYAPAAEqfAwAAAQOJq4xmAAAAAQEBibkAAAChMl0DwABNRgFgA8AATokAAFwBPgROifKJ/QABoZtgA8AATKIBHIoOFooHgIn/wBynroHIwABNdoaSAQABaooRYAPAAEyiGADAAE3NPReKLBqKJb46oQq+IB6KN8AARo8BAWADwABFmwGBikTAHKfJAMAARb5FilMBilyKaAAAoZxgA8AATKIBkwEcinmCim3AHKgsgLsBAAGBinvAHKfJAMAATdABioqHwByoLByKkoKKh8AcqCyBDQEAAZQAwABNyD4DToqpirUAAaD9YAPAAE6JARyKvoCKt8Acp66C0QEAARyK3hyKy4KKv8AcqCyDxgEAAWqKzWADwABMohgAwABNyoENAQABlADAAE3IAMAATVVOivWLAAABoOlgA8AATokBHIsJgIsCwBynroLRAQABHIspHIsWgosKwByoLIPGAQABaosYYAPAAEyiGADAAE3KgQ0BAAGVAMAATcgAwABNVT0ci0MW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CcAcr/UAwABGDAC+pwa+TYCalyeXYJg4AAGhrL4gAWqXKGADwABKnwMAAAEDl3qYOAAAAAEBAZeEAAAAmjlgA6vxAABcAT4BSZeQIRyXrxaXmxqXlL46oT7AAEXygIwBAAErAMAATfw9Hpe8vlUDAWADwABDaQMWl98al9i+OqE+wABF8haX+xqX9L46oR++IMAARdIemBW+WAEAAYCYLsAcsFsAAD8Gvk6Ampg7mHSZWgABoa2+IAFqmDxgA8AASp8DAAABA5iMmVoAAAADAwOYkQAAAIDcYAPAAEyiAJiZAAAAgNpgA8AATKIAmKoAAACLR2ADq/EAAFwBPgE9Hpi0vlcFA2ADwABMomADwABDbmADq/EFFpjpGpjivjqhScAARfYWmQcamQC+OqEkviDAAEXXgJkjwByw9RyZQWqZO10DwABNeAJgA8AATKJgA8AAQ27AAEoRgtEBAAGBmULAHLEDAMAATYyCmU/AHLERAAa+T4CamV2ZlpohAAGhrr4gAWqZXmADwABKnwMAAAEDmaGaIQAAAAEBAZmmAAAAoEJgA8AATKIAAFwBPgE9Hpm4vlUDAWADwABLdAMWmdIamcu+OqE6wABF7xaZ5xqZ4L46oRi+IMAARcsfmfrAAEugAQAAAaBCgJoRwByxwAAGvlCAmpokml2b5AABoa++IAFqmiVgA8AASp8DAAABA5prm+QAAAABAQGadgAAAJo3XQPAAE1GAWADwABMogAAXAE+BEAcmrQcmpkWmpKAmorAHLI/gcjAAE12hngBAAEWmq1qmqZdA8AATUYBYAPAAEVjwABS8oHIwABNdgDAAE3LgIwBAAGTAMAATcaaipq4AE6a1ZriAAGhsF0DwABNRgFgA8AARXEBMZrxYAPAAEVxAEWa9wGbAJsCAACDZmADwABMogGTARybCYKbB8AcssyAuwEAARabE4CbC8Acsj+ByMAATXYAwABN0AGKmxvAHLLMHJsdgpsbwByyzIENAQABFpsyapsrXQPAAE1GAWADwABFY8AAUvKByMAATXYAwABNyD4BPRybTYGbQMAcsqiAggEAAR+bUcAARYABAAEcm2WAm13AHLI/hGECAAKCm23AHLLMHJtygptwwByyzIENAQABFpuGapt/XQPAAE1GAWADwABFY8AAUvKByMAATXYAwABNyADAAE1pAADAAE1X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uqKPnAIAAhysiGqsgGADwABMohyDxgEAATWsigAAAQBgA8AATKIBhKyKwBy7rDWskAAAAQBgA8AATKIBjKyQwBy7rByskIWsisAcwdKBDQEAAZQAwABNyIWsisAcwdIAwABNymqslGADq+ecGACsBYCMAQABkwDAAE3GnkohHKz1HKzGgKy/wBy6oo+cAgACHKzXaqzPYAPAAEyiHIPGAQABNazZAAABAGADwABMogGErNnAHLusNazfAAABAGADwABMogGMrN/AHLusHKzfhazZwBzCW4ENAQABlADAAE3IhazZwBzCWwDAAE3KaqzjYAOr55wYAKwFgIwBAAGTAMAATcaeSxytEoCtC8AcuqKPogIAAhytJWqtHWADwABMohyDxgEAATWtJwAAAQBgA8AATKIBhK0nwBy7rDWtLQAAAQBgA8AATKIBjK0twBy7rBytLYWtJ8AcwuCBDQEAAZQAwABNyIWtJ8AcwuAAwABNymqtMWADq+ecGACsC55MHK1egK1XwBy6oo+iAgACHK1xaq1pYAPAAEyiHIPGAQABNa1zAAABAGADwABMogGErXPAHLusNa15AAABAGADwABMogGMrXnAHLusHK15ha1zwBzDWoENAQABlADAAE3Iha1zwBzDWgDAAE3Kaq19YAOr55wYAKwLnk0craqAraPAHLqij6ICAAIcrb1qrbVgA8AATKIcg8YBAAE1rb8AAAEAYAPAAEyiAYStv8Acu6w1rcUAAAEAYAPAAEyiAYytxcAcu6wcrcWFrb/AHMPUgQ0BAAGUAMAATciFrb/AHMPUAMAATcpqrclgA6vnnBgArAubEByt84Ct7MAcuqKPogIAAhyuBmqt/mADwABMohyDxgEAATWuCAAAAQBgA8AATKIBhK4IwBy7rDWuDgAAAQBgA8AATKIBjK4OwBy7rByuDoWuCMAcxE6BDQEAAZQAwABNyIWuCMAcxE4AwABNymquEmADq+ecGACsC55OHK4/gK44wBy6oo+iAgACHK5Saq5KYAPAAEyiHIPGAQABNa5UAAABAGADwABMogGErlTAHLusNa5aAAABAGADwABMogGMrlrAHLusHK5aha5UwBzEyIENAQABlADAAE3Iha5UwBzEyADAAE3Kaq5eYAOr55wYAKwLg8McroSArn3AHLqij6ICAAIcrpdqro9gA8AATKIc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wBzgk4w4v0QAwABNVj0cwAHLp4LAAcuhwBzg9IEMAgAClRbAAcu0gcABy63AHOChjDe/QwDAAE1WPRzAAcvAgsABy7rAHOD0gQwCAAKWFsABy82BwAHLxsAc4KGMOL9EAMAATVZKwAHL0wGCwAHL2sAc4PQGvm6Am8ACsffAArIBwAKzYAABofC+IAAAAAEDwAKyDcACs2AAAAEAAAQhYAPAAE3vAVsBAQHAArIdAAAAofFeAwABAQFeAwABAQFfAwAAAAFXA74nAV8DAABcAAFXA74oAV8DAABgA8AATokAAF0DgSIBXwMAAAE+BE7AArJAwAKySgABgQ9dA4FCAV8DAAABHsACskqBRQABXwMAAAAATsACsnDAArJ2AAEkYAPAAE6JARzAArKCgMACsnjAHOIGbgEAATTAArKDA8ACsoPAArMRAAAAAQEBwAKyhgAAAIrzXwMAAAAAYAHAAE2sAT4BScACso8cwAKylYLAArKTwBziqYCMAQABKwDAAE38PgE9HMACsrCBwAKypsAc4ktoAQABHsACsr7AAExtAQABJ6HyAACBSz4BPRzAArL7gcACsvHAHOJLZQEAAYLAArMEwBziqQCBSgAAScACsxYhHMACsyCCwAKzGsAc4nGAjAEAASsAwABOmD0wwAKzLR7AArMzwABMbQEAAYLAArM9wBzicQA/SsACs0cBFsACs1iBwAKzTsAc4ktvgUcGvm+ApcAARQDAAEUFwABGCQABofO+IAAAAAEDwABFE8AARgkAAAEAAAQhYAPAAE3vAVsCAgLAAEUcAAAANl0DwABNRgFfAwAAAMAARScAAAA3XQPAAE1GAV8DAAAAAGADwABK2AE+BEnAAEUuHMAARTSAwABFMsAc47OAjAEAASsAwABNcErAAEVBARzAAEVKgcAARUjAHOPHgIwBAAErAMAATXA/ScAARVUiHMAARVuBwABFWcAc48eAjAEAASsAwABNcAEhHMAARW8WwABFaIDAAEVmwBzjs4HIwABNdoCMAQABFsAARXSBwABFcsAc48eByMAATXYAwABNxkrAAEWAASo/RcAARZABwABFmcAARZ8AAIHdYAPAAEyiAZMBHMAARaqCwABFpMAc5ImAuwEAARbAAEWugMAARazAHOOzgcjAAE12AMAATdABisAARbbAHOSJHMAARbyCwABFtsAc5ImBDQEAAZQAwABNyD4BScAARcghHMAARdUcwABFzYDAAEXMwBzjs4LRAQABgsAARc7AHOSJAMAATVWAjAEAARzAAEXZgcAARdjAHOPHgtEBAAGCwABF2sAc5IkAwABNVQDAAE38SsAARegBKj9KwABF/AEpBr5wgKXAAEnKwABJ1MAAUqgAAaH0viAAAAABA8AASeTAAFKoAAAAExMTwABJ7gAAAJrGYAPAAEAtAMAASgYAAACfWGADwABEQADAAEoaAAAAn3tgA8AAQC0AwABKQQAAAJ98YAPAAERTAMAASlsAAACffWADwABLUADAAEp9AAAAn35gA8AAQ/cAwABKlQAAAJ9/YAPAAEPrAMAASq8AAACfgGADwABENADAAErGAAAAn4FgA8AATokAwABK4QAAAJ+CXQPAAE1GAWADwABOiQDAAEr+AAAAn4NgA8AAS1AAwABLEQAAAJ+EYAPAAEtQAMAASykAAACfhWADwABLUADAAEs/AAAAjD5gA8AAS1AAwABLUAAAAJ+GYAPAAEWbAMAAS2AAAACboGADwABAsgDAAEt0AAAAm59gA8AAQLIAwABLjwAAAJ4UXQPAAE1GAWADwABC6ADAAEusAAAAn4ddA8AATUYBYAPAAEQMAABgA6xAAT4UTsAAS9DAAEvXAAGA5mADrEABHsAAS9msRAEAATcIAEnAAEvpIRzAAEvzgMAAS+3AHOV/gIwBAAErAMAAQEM+Aj01wABMAgAAAQBgA6xAARTAAEwCwBzmzRMANcAATAkAAAEAYAPAAEyiAZMcwABMCBTAAEwCwBznDhQAgQwCAAIUwABMCcAc5ycVABzAAEwMHMAATAgUwABMAsAc5w4UAILRAQABFMAATAnAHOcnFQAAwABNVYCmAQABHMAATBGUg3EBAAGUAMAATL4AwABMuwDAAE1WPRzAAEwhFMAATBvAHObNEwCBDAIAApQWwABMLYDAAEwnwBzlfyLAAEAvAMAATVY/ScAATDohHMAATEmBwABMPsAc5Y+AjAEAASsAwABETD4CPTXAAExYAAABAGADrEABFMAATFjAHObNEwA1wABMXwAAAQBgA8AATKIBkxzAAExeFMAATFjAHOf0FACBDAIAAhTAAExfwBzoDRUAHMAATGIcwABMXhTAAExYwBzn9BQAgtEBAAEUwABMX8Ac6A0VAADAAE1VgKYBAAEcwABMZ5SDcQEAAZUAwABMvgDAAEy7AMAATVY9HMAATHcUwABMccAc5s0TAIEMAgAClRbAAEyIgcAATH3AHOWPn1O+IMAAREMAwABNVj9JwABMlSEcwABMqYLAAEyZwBzln4CMAQABKwDAAEBDPgI9NcAATLgAAAEAYAOsQAEUwABMuMAc5s0TADXAAEy/AAABAGADwABMogGTHMAATL4UwABMuMAc6N0UAIEMAgACFMAATL/AHOj2FQAcwABMwhzAAEy+FMAATLjAHOjdFACC0QEAARTAAEy/wBzo9hUAAMAATVWApgEAARzAAEzHlINxAQABlgDAAEy+AMAATLsAwABNVj0cwABM1xTAAEzRwBzmzRMAgQwCAAKWFsAATO2CwABM3cAc5Z8iwABALwDAAE1WP0nAAEz6IRzAAE0Og8AATP7AHOWvgIwBAAErAMAATfw+Aj01wABNHQAAAQBgA6xAARTAAE0dwBzmzRMANcAATSQAAAEAYAPAAEyiAZMcwABNIxTAAE0dwBzpwxQAgQwCAAIUwABNJMAc6dwVABzAAE0nHMAATSMUwABNHcAc6cMUAILRAQABFMAATSTAHOncFQAAwABNVYCmAQABHMAATSyUg3EBAAGXAMAATL4AwABMuwDAAE1WPRzAAE08FMAATTbAHObNEwCBDAIAApcWwABNUoPAAE1CwBzlr4HdwABEVQDAAE1WP0nAAE1fIRzAAE1uhcAATWPAHOXPgIwBAAErAMAATfw+Aj01wABNfQAAAQBgA6xAARTAAE19wBzmzRMANcAATYQAAAEAYAPAAEyiAZMcwABNgxTAAE19wBzqqhQAgQwCAAIUwABNhMAc6sMVABzAAE2HHMAATYMUwABNfcAc6qoUAILRAQABFMAATYTAHOrDFQAAwABNVYCmAQABHMAATYyUg3EBAAE3BQDAAEy+AMAATLsAwABNVj0cwABNnBTAAE2WwBzmzRMAgQwCAAI3BRbAAE2thcAATaLAHOXPgd3AAEP5AMAATVY/ScAATbohHMAATciGwABNvsAc5d+AjAEAASsAwABN/D4CPTXAAE3XAAABAGADrEABFMAATdfAHObNEwA1wABN3gAAAQBgA8AATKIBkxzAAE3dFMAATdfAHOuTFACBDAIAAhTAAE3ewBzrrBUAHMAATeEcwABN3RTAAE3XwBzrkxQAgtEBAAEUwABN3sAc66wVAADAAE1VgKYBAAEcwABN5pSDcQEAATcGAMAATL4AwABMuwDAAE1WPRzAAE32FMAATfDAHObNEwCBDAIAAjcGFsAATgaGwABN/MAc5d+B3cAAQ+0AwABNVj9JwABOEyEcwABOJIfAAE4XwBzl74CMAQABKwDAAE38PgI9NcAATjMAAAEAYAOsQAEUwABOM8Ac5s0TADXAAE46AAABAGADwABMogGTHMAATjkUwABOM8Ac7HwUAIEMAgACFMAATjrAHOyVFQAcwABOPRzAAE45FMAATjPAHOx8FACC0QEAARTAAE46wBzslRUAAMAATVWApgEAARzAAE5ClINxAQABNwcAwABMvgDAAEy7AMAATVY9HMAATlIUwABOTMAc5s0TAIEMAgACNwcWwABOZYfAAE5YwBzl74HdwABENgDAAE1WP0nAAE5yIRzAAE6KhMAATnbAHOW/gIwBAAErAMAATcY+AT01wABOmQAAAQBgA6xAARTAAE6ZwBzmzRMANcAATqAAAAEAYAPAAEyiAZMcwABOnxTAAE6ZwBztZRQAgQwCAAIUwABOoMAc7X4VABzAAE6jHMAATp8UwABOmcAc7WUUAILRAQABFMAATqDAHO1+FQAAwABNVYCmAQABHMAATqiUg3EBAAE3CADAAEy+AMAATLsAwABNVj9JwABOtCIhHMAATsMUwABOuMAc5f8IAICMAQABKwDAAE6YASIhHMAATuIUwABOz8Ac5g8JAICMAQABKwDAAE1wABbAAE8AFMAATu3AHOYPCQCDYsAATSk+AT01wABPEwAAAQBgA6xAARTAAE8TwBzmzRMANcAATxoAAAEAYAPAAEyiAZMcwABPGRTAAE8TwBzuVRQAgQwCAAIUwABPGsAc7m4VABzAAE8dHMAATxkUwABPE8Ac7lUUAILRAQABFMAATxrAHO5uFQAAwABNVYCmAQABHMAATyKUg3EBAAE3CQDAAEy+AMAATLsAwABNVj9JwABPUiEcwABPXxTAAE9WwBzmJgoAgIwBAAErAMAATcY+AT01wABPbgAAAQBgA6xAARTAAE9uwBzmzRMANcAAT3UAAAEAYAPAAEyiAZMcwABPdBTAAE9uwBzvDxQAgQwCAAIUwABPdcAc7ygVABzAAE94HMAAT3QUwABPbsAc7w8U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9i6CxcAARjkrwABGuEqdDQEqPz0XnSUugsXAAEY5HJ02Fp0wLo9NwABGOcAARrWC0QEAARadNy6Dg8AARjnAAEa3AMAATVXAAEa4PRedRC6Dg8AARjkcnUoWnUQug4PAAEY5wABGt4ENAQABlADAAE3IwABGt0qdUgEpAAAdLhYAHS5OAB0vLwAAAAICwABGv4CsiuyK8sABVYUDojIAAAFgA8AATe8AAWADwABKqiAEwABGwoCsizqLSQaiM8AARjkAYAPAAEyiAWqLR2ADwABMom8EwABGw4Csi16LegaiNMAARjkAYAPAAEyiAWqLbWADwABMopCJBMAARsSArIuPi7EGojXAAEY5AGADwABMogFqi65gA8AATKLAAFoFBMAARsWArIvhjAEGojbAAEY5AGADwABMogFqi/1gA8AATKJUBMAARsaArIwWjEAGojfAAEY5AGADwABMogFqjD1gA8AATKKF5QTAAEbfgKyMXoyABZDUAGADwABGvwEejGnAAEc2AQABkwAEwABG4ICsjJ2MvgWiOABgA8AARr8BHoynwABHNgEAAZQABMAARuGArIzbjPwFojkAYAPAAEa/AR6M5cAARzYBAAGVAATAAEbHgKyNGo0qBaI6wABGOQBgA8AARr8BHI0mGo0nwABG4IPrAAAAAMAARwoEwABGyICsjUeNewWiO8AARjkAYAPAAEa/AR6NW8AARzYBAAFqjXBgA8AATKLAAFoFAATAAEbJgKyNmI3HBaI8wABGOQBgA8AARr8BHI3CHI2tGo2pwABG4INxAQABHI2zlYPGAQABao21YAPAAEyibwDAAE3KAMAARwyBBgEAARqNxMAARuAAwABHFATAAEbKgKyN5I4WBaI9wABGOQBgA8AARr8BHo32wABHNgEAATf7msoAAATAAEbLgKyOK45IBqI+wABGOQBgA8AATKIBao41YAPAAEyiwABaCQTAAEbMgKyOXY55BqJAwABGOQBgA8AATKIBao5nYAPAAEyiwABaDQTAAEbNgKyQwpEZBaJCwABGOQBgA8AAStgBHpDewABK3gEAASeiQwAEwABGzoCskYKRlQSiRMAARjkAYAOsSgErBMAARs+ArJGkkbUEokXAAEY5AGADwABMogErBMAARtCArJHLkd0EokbAAEY5AGADrEoBKwTAAEbRgKyR7JH8BKJHwABGOQBgA8AATKIBKwTAAEbSgKySEpIjBKJIwABGOQBgA6xKASsEwABG04CskjKSQQSiScAARjkAYAPAAEyiASsEwABG1ICsklCSXASiSsAARjkAYAPAAEyiASsEwABG1YCskmuSdwSiS8AARjkAYAPAAEyiASsEwABG1oCskq6SuQmiTMAARjkAYAPAAErYAATAAEbXgKyUMZQ4CaJNwABGOQBgA6xKAATAAEbYgKyW9Zb6CYtqwABGOQBgA8AATKIABMAARtmArK/dsEYEok7AAEY5AGADwABOGQEer+jAAE4yAgABJ6JPAaJQKgTAAEbagKy5+rofBaJRwABGOQBgA6wXAR66E6wbAQABNwgABMAARtuArMAAqbDAAKnHBqJSwABGOQBgA8AATKIBasAAqcZgA8AATKIaBMAARtyArMAAqgHAAKoVBqJTwABGOQBgA8AATKIBasAAqhRgA8AATKIUBMAARt2ArMAAqkPAAKpVBqJUwABGOQBgA8AATKIBasAAqlRgA8AATKIWBMAARt6ArMAAqoHAAKqXBqJVwABGOQBgA8AATKIBasAAqpZgA8AATKJMAgXAAEc6gKyx6rHqsmwAgIrAAEY5AAOx97JsAAAAAwMDsf0AAACMf2ADwABK2ACyDQAAAKJWYAPAAEyiALIeAAAAoldgA6xKAABgA8AARr8BPwEKALIzwABHOwMAA4CyP8AdNBIeskvAAEbqAgACgbJWwB00IIKyXMAdNC4AgrJlwB00LgAFwABHO4CssnGycbNeAKJYwABGOQADsoizXgAAAAMDA7KOAAAAjH9gA8AAStgAsp8AAASLamADwABMogCyqwAABKJNYAOsSgAAYAPAAEa/AT4CQBazBhay/xay9y6iTcAARjnAAEbXgcjAAE12jCzAAEzWsvezDABAIhazIBazGi6LasAARjnAAEbYjCzAAEzWARyzORyzMRazKi6iTcAARjnAAEbXgtEBAAEWszIui2rAAEY5wABG2ADAAE1VgIwBAAGTAMAATcazGrM9AAQIAcAARtiBAMAdNKUIAcAARteCAMAdNLMIAMAARtYjHLLQgbLKwB00pYCMAQABkwDAAE3GKoCy38AdNJcBYAPAAErYCQGyccAATgUAAAAAUAbAAEbjgKya8psFm9MAAYU7AAAAAQObCpvTAAAAAgEBmxIAAACBY2ADwABOiQABmx8AAACiWWADwABMogFqAGABwABNrAJgA8AARr8BPgNOmzGbOAAAgOZgA8AARr8BHps6wABG6QIAAYCbRMAdNbYBolmBm1PAHTXFSZtfHJtqgptjwB015oCMAQABKwDAAEcWPgE9MJt7H5uFwABMfQIAAieiWoCbr8AdNbYAP0qbwgGCm8nAHTXmBsAARuWArJxJnFyfLQABolvAAEY5AAAAAQOcaZ8tAAAAAgICnHEAAACBY2ADwABOiQCcfgAAAIx/YAPAAErYAABgA8AARr8BPgdOnKicrQAAolxgA8AATKIBk06cwpzJAACA5mADwABGvwEanMvAAEbfTp1/nZAAAKJdYAPAAEyiASadfwEcnZQ3CYEGAQABHJ2kFp2dgJ2WwB02c4HIwABOjaJeAQABNwkAwABNzwDAAE3JYAPAAEyiSZ22HJ3LhJ26wB02woCMAQABNwkAwABNxj2MndHAHTbCkz9FnesBnfSd9gAAg2ZgA8AATKIBkwEcnf2FnfvAHTcwgLsBAAEWngaAnf/AHTZzgcjAAE6NAMAATdABjZ4OwB03MByeD4WeDsAdNzCBDQEAAZQAwABNyD4CPYqeG8AdNpocnkMcniwcnieCniLAHTaag8YBAAE3CgDAAE3KgQ0BAAEcnjWAni7AHTZzhdABAAGFnkDAHTcwAMAATpcAwABNyIEGAQABap5FYAPAAEyihGMAwABNyUmeTxyeZoyeVcAdNsIcnlOEnlXAHTbCgQ0BAAGUAMAATciAjAEAATcJAMAATcY+Az2LnnbAHTarHJ6UHJ6Gg55/wB02q4PGAQABGp6IwABGygDAAEcVgQ0BAAEenprAAEc2AQABgp6vwB02mgAAwABHEz2Knr7AHTaakz2MntDAHTbCkz9JnviBnvzAHTaBSp8IARyfD4OfEMAdNquD6wAAAADAAEcKP0qfHAGDnyPAHTarBsAARuaArKB7oIaieAABol/AAEY5AAAAAQOgm6J4AAAAAQEBoKAAAACGV2ADwABMogAAYAPAAEyiAT4ESaHsIhyh82qh8GADwABMooRjgVsBAAGAofbAHTi5AMAATdEAHKILgKICwB04uYFbAQABaqIOYAPAAEyihGYAwABN0UqiEgEcoiKAohnAHTi5gQYBAAFqoiRgA8AATKKEYwDAAE3JPz2IoizAHTi5HKI1gKIswB04uYCmAQABNyAAwABMu06iRqJNAACA5mADwABMogEcol0coliAok/AHTi5gQYBAAFqolpgA8AATKKEeADAAE3JgQ0BAAE3CgDAAE3ISqJnAYGibsAdOVcGwABG54Cso2Sjd6d7AAGiYMAARjkAAAABA6OAp3sAAAADAwOjiAAAAIFjYAPAAE6JAKOUAAAAomFgA8AATKIAo6MAAACMf2ADwABK2AAAYAPAAEa/AT4NTqO5o8oAAKJiYAPAAEyiARyj12qjzGADwABMom+GkgEAAZcAwABNzU6j5aPyAACiY2ADwABMogEcpAIWo/uAo/TAHTnDgcjAAE6NgQYBAAGBpATAHTnRAMAATclOpBakGwAAolZgA8AATKIBHKRDHKQ+HKQrhKQewB06IIENAQABg6QtwB05+ADAAE3IgQYBAAGUAMAATcmGkgEAAYOkRsAdOfgAwABNzU6kYKRnAACiV2ADrEoBHqRpwABGagEAAYWkdMAdOlQATqSEpJQAAKJkYAPAAEyiARyko4SklsAdOiCBBgEAARyksBykq4WkpsAdOlSBBgEAAZQAwABNyYPGAQABg6SywB05+ADAAE3KAMAATclOpMyk1wAAomVgA8AATKIBHKTehaTZwB06VIEGAQABlADAAE3JTqTrpO0AAINmYAPAAEyiAYGk78AdOdFOpQGlBwAAhcFgA8AATKIBk0WlEAGlGaUbAACJzGADwABMogGTARylIhSlIMAdO14LAIC7AQABh6UkwB06wQDAAE3QARWlNcAdO14LHKU2FKU1wB07XgsAgQ0BAAGUAMAATcg+A06lRqVMAAAiYAPAAEyiAR6lTsAARuYBAAEcpWuApWTAHTnDhdABAAE1pXYAAAEAYAPAAEyiARSldsAdOzMJADWldwAAAQBgA8AATKIBFaV3wB07MwkcpXcUpXbAHTvXDACBDQEAAZQAwABNyBSldsAdO9cMAADAAE6XAEmlgxyljRSlh8AdO68MAIFeAQABNxAAwABN00qllAErPz0VpafAHTtKChyluhyltRSlr8AdO0oKAIPGAQABNxAAwABNyoENAQABFKW8wB07rwwAAMAATcg9HKXThqXNwB06oYEMAgACNaXUAAABAGADwABMogEUpdTAHTsOCAA1pd4AAAEAYAPAAEyiARWl3sAdOw4IHKXeFKXUwB08kgsAgQYBAAGUAMAATckUpdTAHTySCwAUpeTAHTtKCgAAwABNVkOl8Byl+RSl98AdOzMJAIC7AQABFqYCgKX7wB05w4HIwABOjQDAAE3QPgM9FaYSwB07SgqTRaYjAaYspi4AAInMYAPAAEyiAZMBHKY1FKYzwB09JQsAgLsBAAGDpjfAHTn4AMAATdABFaZJwB09JQscpkoUpknAHT0lCwCBDQEAAZQAwABNyD4DTqZcpmIAACJgA8AATKIBHqZkwABG5gEAARymgYCmesAdOcOF0AEAATWmjAAAAQBgA8AATKIBFKaMwB07MwkANaaNAAABAGADwABMogEVpo3AHTszCRymjRSmjMAdPZ4MAIENAQABlADAAE3IFKaMwB09ngwAAMAATpcASaabHKalFKafwB09dgwAgV4BAAE3EADAAE3TSqasASs/PRWmwcAdO0oKHKbUHKbPFKbJwB07SgoAg8YBAAE3EADAAE3KgQ0BAAEUptbAHT12DAAAwABNyD0cpvGGpuvAHTqhgQwCAAI1pvIAAAEAYAPAAEyiARSm8sAdOw4IADWm/AAAAQBgA8AATKIBFab8wB07DggcpvwUpvLAHT5ZCwCBBgEAAZQAwABNyRSm8sAdPlkLABSnAsAdO0oKAADAAE1WSacTIhynHIWnF8AdOlSAjAEAAZQAwABNxgAcpy4cpyqGpyTAHTqhgtEBAAGTAMAATVWAjAEAAZMAwABNxkqnNAEapzvAAEbfP0qnRQEfp1DAAEc6AwADgqdewB0534WnasAdOlSGp3DAHTqhAAbAAEbogKyoLahAqdMAAaJmwABGOQAAAAEDqEup0wAAAAMDA6hTAAAAgWNgA8AATokAqF8AAACiWWADwABMogCoawAAAIx/YAPAAErYAABgA8AARr8BPgVOqIGoiAAAgOZgA8AARr8BGqiKwABG306omKidAACMZmADwABGvwEeqKPAAEc2AQABgai4wB0/UgBFqMQBqM2ozwAAg2ZgA8AATKIBkwEcqNaFqNTAHT+1gLsBAAEWqN+AqNjAHT9EgcjAAE6NAMAATdABjajnwB0/tRyo6IWo58AdP7WBDQEAAZQAwABNyD4DTqj4qP4AACJgA8AATKIBHqkAwABG5gEAARypHYCpFsAdP0SF0AEAAYWpKMAdP7UAwABOlwBJqTMcqT2GqTfAHUAKgV4BAAGBqUDAHT9SAMAATdNKqUcBKz89i6lawB0/eRypcRypaoOpY8AdP3mDxgEAAYSpbMAdP5AAwABHFYENAQABHql3wABHNgEAAYapjMAdQAoAAMAARxNJqZ6CqaLAHT9gSqmuARyptYOptsAdP3mD6wAAAADAAEcKP0qpwgGDqcnAHT95BsAARumArKquqsGvygABomfAAEY5AAAAAQOqyq/KAAAAAgEBqtIAAACBY2ADwABOiQABqt8AAACiWWADwABMogFqAGABwABNrAJgA8AARr8BPhBJqu0cqviAqvHAHUD2gIwBAAEnAADAAE6YSqr/ASs/TqsVqxsAAIRRYAPAAE4zARyrJhqrHcAARtmiaAEAAYCrMcAdQPYAwABOJE6rQqtMAACiaWADwABMogGUTqtZq2IAAKJqYAPAAEyiAZZOq2+rfAAAomtgA8AATKIBl06riaucAACibGADwABMogE3BUmrpRyrr4KrqcAdQUWAjAEAASsAwABN/EqruAErP06rz6vaAACMf2ADwABK2AEcq+0cq+GCq9zAHUFFgtEBAAGDq+LAHUFwAMAAThWAjAEAASeBBgDAAE6YTqwBrA4AAKJtYAPAAE6JARysFYKsEMAdQUWC0QEAAYWsFsAdQZIAwABOFU6sMKw5AACibmADwABOiQEcrECCrDvAHUFFgtEBAAGErEHAHUGBAMAAThVOrFesZwAAom9gA8AATokBHKxugqxpwB1BRYLRAQABhqxvwB1BowDAAE4VSayJHKyTgayNwB1BBYCMAQABKwDAAE3GPgNJrKQhHKy1FKyowB1CDggAgIwBAAErAMAATpg+AUqtEAEerRfAAEblAgACFK0lwB1CDggAh60zwB1B0wA/Sa1OIRytWxStUsAdQjkJAICMAQABKwDAAE6YPgFKrbIBHq25wABG5wMAAxStw8AdQjkJAJWHrdDAHUHTAD9KresBKz9JrgMiHK4Nga4HwB1BBYC7AQABlQDAAE3QARyuGoGuFMAdQQWCjAEAATckAMAATdI+AT0wrigfrjLAAEvoBAAEga5DwB1BBZU3JCeiWQA/Sa5lIhyub4GuacAdQQWAjAEAATcKAMAATcYAIRyuhRSueMAdQg4IAICMAQABKwDAAE6YPgFKrpYBHq6dwABG5QIAAhSuq8AdQg4IAIeuucAdQdMA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kwDAAE3TAY3AAEVUwB1VIBzAAEVVhcAARVTAHVUggQYBAAGUAMAATck+AT0cwABFbYPAAEVhwB1TKoEMAgAChcAARW7AHVUgkwDAAE1WScAARYAWwABFj4TAAEWEwB1TvKKCwABM1z4BPRzAAEWqg8AARZ7AHVMqgQwCAAKEwABFq8AdU7yTAMAATVY/SsAARcYBhMAARc3AHVO8BsAARu6ArMAARgbAAEYSwABImgAAooPAAEY5AAAAAQPAAEYawABImgAAAAEBAcAARh8AAACEE2ADwABMogAAYAPAAEa/AT4KTsAARi7AAEYzAAGiVmADwABMogEWwABGNS6LasAARjnAAEbYScAARkAcwABGSYHAAEZEwB1WRYCMAQABkwDAAE3GPgFKwABGVwEawABGXsAARt8/TsAARnTAAEZ/AAGifmADwABMogEcwABGhoHAAEaBwB1WRYEGAQABgMAARojAHVYqAMAATclJwABGjxzAAEaegsAARpPAHVaZgVsBAAGTAMAATdE+AUrAAEasASMWwABGsy6iTMAARjnAAEbWGsAARsHAAEbHGsAARs3AAEbfAWADwABGvz9OwABG48AARuoAAaJXYAOsSgEWwABG7C6iTcAARjnAAEbXTsAARv/AAEcMAAGic2ADrEoBHsAARw7AAEZqAQABgsAARxnAHVaZAEXAAEcqAcAARzPAAEc1AACDZmADwABMogGAwABHN8AdVioBHMAARzyFwABHOsAdV26AuwEAAYHAAEc+wB1WRQDAAE3QAY3AAEdEwB1XbhzAAEdFhcAAR0TAHVdugQ0BAAGUAMAATcg+AT0cwABHXYTAAEdRwB1XQYEMAgACHMAAR2CFwABHXsAdV26BBgEAAYDAAEdiwB1WKgDAAE3JHMAAR22DwABHZ8AdVx+C0QEAAYXAAEduwB1XbgDAAE1VAMAATVZOwABHgsAAR4kAAYDmYAPAAEa/AR/AAEePwABHOgMAAxbAAEedLqJMwABGOcAARtaCwABHqsAdVpmEwABHtsAdV0EAScAAR8kWwABHzS6iTMAARjnAAEbWPgFFwABIEgHAAEgbwABIHQAAg2ZgA8AATKIBkwEcwABIJIbAAEgiwB1YjIC7AQABgMAASCbAHVYqAMAATdABjsAASCnAHViMHMAASCqGwABIKcAdWIyBDQEAAZQAwABNyD4BScAASDghHMAASEYcwABIQoPAAEg8wB1XH4LRAQABhsAASEPAHViMAMAATVWAjAEAAZMAwABNxj4BSsAASFgBHMAASGaFwABIX8AdWC2BBgEAARrAAEhowABG4ADAAEcUPz9KwABIiQGFwABIkMAdWC0GwABG74CswABJV8AASWLAAEsBAAGihMAARjkAAAABA8AASXDAAEsBAAAABAQEwABJgwAAAKKAYAOsSgDAAEmQAAAAooFgA8AATKIAwABJmwAAAIQTYAPAAEyiAMAASakAAACic2ADrEoAAGADwABMogE+Bk7AAEnDwABJzgABon5gA8AATKIBHMAASdaBwABJ0MAdWZSBBgEAAYLAAEnYwB1ZpADAAE3JScAASd8cwABJ7oTAAEnjwB1ZzYFbAQABkwDAAE3RPgFKwABJ/AGTP0AcwABKKxbAAEokg8AAShfAHVm0gcjAAE12gV4BAAEcwABKOYTAAEouwB1ZzYENAQABHMAASkeEwABKPMAdWc2AoQEAAZQAwABMugDAAE3IAMAATdPAAEoXwABKSwBFwABKUgHAAEpbwABKXQAAg2ZgA8AATKIBgsAASl/AHVmkARzAAEpkhcAASmLAHVqNgLsBAAGBwABKZsAdWZQAwABN0AGNwABKbcAdWo0cwABKboXAAEptwB1ajYENAQABlADAAE3IPgE9HMAASoaDwABKesAdWbSBDAIAAhzAAEqJhcAASofAHVqNgQYBAAGCwABKi8AdWaQAwABNyRzAAEqXgMAASpDAHVmGgtEBAAGFwABKmMAdWo0AwABNVQDAAE1WScAASqYWwABKtYTAAEqqwB1ZzaKCwABM1z4BPRzAAErQg8AASsTAHVm0gQwCAAKEwABK0cAdWc2TAMAATVY/SsAASuwBhMAASvPAHVnNBsAARvCArMAATC7AAExXwABOawABooXAAEY5AWrAAEwvYAPAAEqfkbQAAAEDwABMW8AATmsAAAAEBATAAExuAAAAooBgA6xKAMAATHsAAACigWADwABMogDAAEyGAAAAhBNgA8AATKIAwABMlAAAAKJzYAOsSgAAXAE+CEAcwABMtYHAAEyvwB1b4oKMAQABkwDAAE3SwABMr8AATLgATsAATMXAAEzQAAGihmADwABMogEcwABM1ILAAEzSwB1b8oaSAQABasAATNdgA8AATKJvAMAATc1OwABM7cAATPYAAaKHYAPAAEyiARzAAEz6gsAATPjAHVvyhngBAAFqwABM/GADwABMom8AwABNy07AAE0SwABNIAABoohgA8AATKIBHMAATS1qwABNImADwABMom+BBgEAAYXAAE0vwB1ccQDAAE3JTsAATUPAAE1LAAGiiWADwABMogEcwABNYhzAAE1QlINxAQABhsAATVPAHVypAMAATL6BBgEAAZQAwABNyU7AAE1vwABNdQAAoopgA8AATKIBk0XAAE1+AcAATYfAAE2JAACDZmADwABMogEcwABNkYHAAE2LwB1b4oEGAQABlADAAE3JARzAAE2YFMAATZbAHV04CQCBXgEAAZMAwABN0wEVwABNnsAdXTgJHMAATZ8UwABNnsAdXTgJAIEGAQABlADAAE3JPgNOwABNscAATbcAAYXBYAPAAEyiARzAAE3AgMAATbnAHVvUgtEBAAEUwABNwcAdXTgJAADAAE1VPRzAAE3Xg8AATcvAHVwCgQwCAAIcwABN5xzAAE3aFMAATdjAHV04CQCBDQEAAYTAAE3cwB1cOQDAAE3IgQ0BAAGUAMAATcgcwABOBxzAAE31FMAATe/AHV2pCgCDxQEAAYbAAE34wB1cqQDAAEy/gKYBAAEUwABOCcAdXR4IAADAAEy7AMAATVY9FcAAThbAHV0eCBzAAE4wHMAATiUUwABOH8AdXakKAIChAQABh8AATifAHVzhAMAATLqDcQEAAYXAAE4zwB1ccQDAAEy+PRzAAE5Tg8AATkfAHVwCgQwCAAKEwABOVMAdXDkUwABOYsAdXR4IAADAAE1WBsAARwyArMAAUBHAAFAmwABSxwMAg3EAAAABA8AAUCjAAFLHAAAAAQEBwABQLQAAAKKLYAPAAEyiAABgA8AARr8BPglJwABQQBzAAFBQgMAAUETAHV8FgLsBAAGTAMAATdA+AT0wwABQXR/AAFBnwABL0QEAASTAAFChAieijIDAAFCVwB1fBQA/ScAAUK4WwABQsi6iccAARjnAAEcrSsAAULsBLj9OwABQ0sAAUN0AAaKGYAPAAEyiARzAAFDrgMAAUN/AHV8FhpIBAAFqwABQ7mADwABMom8AwABNzU7AAFEEwABRDQABoodgA8AATKIBHMAAURuAwABRD8AdXwWGeAEAAWrAAFEdYAPAAEyi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DQEAAZQAwABNyD4DTsAAWKDAAFimAAGFwWADwABMogEcwABYr4DAAFiowB1kvYLRAQABHMAAWMAcwABYshTAAFiwwB1mngoAgQ0BAAGEwABYtMAdZSIAwABNyIENAQABlADAAE3IAMAATVU9HMAAWNiDwABYzMAdZOuBDAIAAhTAAFjZwB1mngoAHMAAWQMcwABY8RzAAFjmFMAAWODAHWcBCwCAoQEAAYfAAFjowB1lygDAAEy6g3EBAAGGwABY9MAdZZIAwABMvoCmAQABFMAAWQXAHWYHCAAAwABMuwDAAE1WPRXAAFkSwB1mBwgcwABZIBTAAFkawB1nAQsAg8UBAAGFwABZI8AdZVoAwABMvz0cwABZQ4PAAFk3wB1k64EMAgACFMAAWUTAHWZUCQAUwABZTMAdZgcIAADAAE1WBsAARw2ArMAAWofAAFqcwABegAMAg8UAAAABA8AAWp7AAF6AAAAAAQEBwABaowAAAKKLYAPAAEyiAABgA8AARr8BPg5JwABathzAAFrGgMAAWrrAHWhfgLsBAAGTAMAATdA+AT0wwABa0x/AAFrdwABL0QEAASTAAFsXAieijIDAAFsLwB1oXwA/ScAAWyQWwABbKC6iccAARjnAAEcrSsAAWzEBLj9OwABbSMAAW1MAAaKGYAPAAEyiARzAAFthgMAAW1XAHWhfhpIBAAFqwABbZGADwABMom8AwABNzU7AAFt6wABbgwABoodgA8AATKIBHMAAW5GAwABbhcAdaF+GeAEAAWrAAFuTYAPAAEyibwDAAE3LScAAW6McwABbsILAAFunwB1pFYCMAQABkwDAAE3GPgFKwABbvgEcwABbxS6ig8AARjkBAAGBwABbzsAdaN0AwABG7j9OwABb68AAW/AAAaJWYAPAAEyiARbAAFvyLotqwABGOcAARthOwABcA8AAXA4AAaJ+YAPAAEyiARzAAFwVg8AAXBDAHWmRgQYBAAGBwABcF8AdaN0AwABNyUnAAFwnHMAAXDaEwABcK8AdabWBWwEAAZMAwABN0T4BSsAAXEQBIxbAAFxLLqJMwABGOcAARtYawABcWcAARscawABcZcAARt8BYAPAAEa/P07AAFx7wABcggABoldgA6xKARbAAFyELqJNwABGOcAARtdOwABcl8AAXKQAAaJzYAOsSgEewABcpsAARmoB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YAOsSgEewABuWcAARmoBAAGEwABuZMAde9MAPR7AAG51wABG9gUABRbAAG59LqJNwABGOcAARteCwABuhsAdeoIWwABukoDAAG6MwB16V6JNwABGOcAARteDwABum8AdeqaFwABupsAdfAAASsAAbrkBH8AAbsTAAEc6AwADgcAAbtLAHXpnhMAAbt7AHXvThcAAburAHXwAAAbAAEb5gKzAAG+EwABvkMAAcW4AAKKawABGOQAAAAEDwABvnsAAcW4AAAACAgLAAG+rAAAAgh1gA8AARr8AwABvtwAAAIx/YAPAAErYAABgA8AARr8BPghAHMAAb+McwABv0C6ikcAARjkBAAGAwABv3MAdfNQAwABG9IFeAQABkwDAAE3TwABv0MAAb+cATsAAb/LAAG/3AACiVmADwABMogEWwABv+S6LasAARjnAAEbYScAAcAQcwABwDYLAAHAIwB19NoCMAQABkwDAAE3GPgJAIYHAAHAjwB185MAAcCLAAHAtAErAAHA2ARrAAHA9wABG3z9OwABwUcAAcFsAAKKWYAPAAEyiARbAAHBjgMAAcF3AHXzUi2rAAEY5wABG2EnAAHBuHMAAcHyDwABwcsAdfZ6AjAEAAZMAwABNxj4BSsAAcIoBIxzAAHCdFsAAcJEuokzAAEY5wABG1oCMAQABgcAAcKDAHXzkAMAATfwuHMAAcLQug+sAAAAAwABHCgFgA8AARr8/TsAAcMnAAHDWAACic2ADrEoBHsAAcNjAAEZqAQABgsAAcOPAHX02AD0ewABw7sAARvcFAAUWwABw9i6iTcAARjnAAEbXgsAAcP/AHX02FsAAcQuAwABxBcAdfNSiTcAARjnAAEbXg8AAcRTAHX2ehMAAcR/AHX4yAErAAHEyAR/AAHE9wABHOgMAA4HAAHFLwB185ILAAHFXwB19NoTAAHFdwB1+MgAGwABG+oCswABxw8AAcc/AAHNMAACim8AARjkAAAABA8AAcd3AAHNMAAAAAgICwABx6gAAAIIdYAPAAEa/AMAAcfYAAACMf2ADwABK2AAAYAPAAEa/AT4GTsAAcgzAAHIXAACifmADwABMogEewAByGcAARmkCAAIWwAByHi6LasAARjnAAEbYFsAAciuAwAByJcAdfwaLasAARjnAAEbYAE7AAHI7wAByQgAAoldgA6xKARbAAHJE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wACGWsAARuApAABgA8AARr8GwABHEYCswACH1sAAh+vAAItzAwCAowAAAAEDwACH7MAAi3MAAAABAQHAAIf0AAAAopJgA8AASqoAAGADwABGvwE+CU7AAIgOwACIFAAAgh1gA8AARr8BJsAAiA4BgMAAiBbAHZFfYAPAAEa/ScAAiCIWwACIJi6iccAARjnAAEcrSsAAiC8BgcAAiDbAHZF6P0nAAIhBFsAAiEuBwACIRcAdkXqiccAARjnAAEcrSsAAiFQBLj9JwACIZRzAAIh1FsAAiGkuokzAAEY5wABG1oCMAQABFsAAiH6BwACIeMAdkXqiTMAARjnAAEbWAMAATfw+AknAAIiTFsAAiJcuokzAAEY5wABG1j4DTsAAiQLAAIkIAACioGADwABGvwEcwACJCi6imsAARjkCAAIawACJGcAARuApAMAARvlOwACJMcAAiTgAAKKhYAPAAEa/ARzAAIlAgcAAiTrAHZF6oprAAEY5AgACGsAAiU/AAEbgKQDAAEb5SsAAiWMBHMAAiXCCwACJasAdkkKin8AARjkCAAKDwACJf8AdknQqAMAARv0/SsAAiZ0BHMAAiaQuop/AAEY5AgACgcAAibPAHZF6KgDAAEb9P07AAIn0AAAAjVlbAE7AAIn3AAAAhBNbAEnAAIn+FsAAigIuokzAAEY5wABG1j4CPYrAAIoXwB2TAIHAAIobwB2Rej2LwACKKMAdkwwuPgI9isAAil7AHZMALj2LwACKbsAdkwyBwACKcsAdkXpOwACKy8AAis4AAKKiWwEcwACK0oPAAIrQwB2TDKKawABGOQIAAhrAAIrhwABG4CkAAErAAIs0ASbAAIs0BRzAAItWHMAAiz2CwACLO8AdkwCin8AARjkCAAKEwACLTMAdk20pAACimcAARjkCAAIawACLZcAARuApAABgA8AARr8GwABHEoCswACMW8AAjHDAAI2KAwCA2AAAAAEDwACMccAAjYoAAAAAAAAAYAPAAEa/AT4DScAAjHoWwACMfi6iccAARjnAAEcrSsAAjIcBGsAAjI7AAEbHP0nAAIydFsAAjKEuokzAAEY5wABG1j4BSsAAjOIBHMAAjOkuoprAAEY5AgACGsAAjPjAAEbgKgDAAEb5P0rAAI1mARzAAI1tLqKZwABGOQIAAhrAAI18wABG4CkAwABG+AbA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SsAAoYMBGsAAoYrAAEbfP07AAKGewAChqQAAon5gA8AATKIBHMAAobCCwAChq8AdqTaBDQEAAYPAAKGywB2pWgDAAE3ITsAAocXAAKHMAACiV2ADrEoBFsAAoc4uok3AAEY5wABG107AAKHfwACh6wAAopVgA6xKARbAAKHzgcAAoe3AHakNok3AAEY5wABG107AAKIEwACiEQAAonNgA6xKAR7AAKITwABGagEAAYTAAKIewB2p0QBOwACiM8AAojUAAINmYAPAAEyiAZNDwACiPhzAAKJHFMAAokXAHap6CACAuwEAAYPAAKJJwB2pWgDAAE3QPgE9FcAAolzAHap6CBzAAKJeFMAAolzAHap6CACBDQEAAR7AAKJhwABG/gcAB4bAAKJpwB2qKBTAAKJ2wB2qeggAhcAAonnAHaoGk4fAAKKEwB2qUhTAAKKSwB2qeggAgsAAopXAHak2AADAAE3ISsAAoqYBH8AAorHAAEc6AwADIRzAAKLUFsAAosguokzAAEY5wABG1oCMAQABFsAAot2BwACi18AdqQ2iTMAARjnAAEbWAMAATfyEwACi6sAdqdGHwACi9sAdqlIABsAARwCArMAAo5jAAKOjwAClVAABoq/AAEY5AAAAAQPAAKOtwAClVAAAAAUFBcAAo7kAAACigGADrEoAwACjxgAAAKKBYAPAAEyiAMAAo9gAAACilWADrEoAwACj7wAAAKKWYAPAAEyiAMAApAUAAACic2ADrEoAAGADwABMogE+B07AAKQdwACkKAAAon5gA8AATKIBHMAApDCBwACkKsAdq76BDQEAAYPAAKQywB2r3ADAAE3ITsAApEXAAKRHAACDZmADwABMogEcwACkVIXAAKRJwB2sBYENAQABHMAApGKFwACkV8AdrAWAoQEAAZQAwABMugDAAE3IQBzAAKSHFsAApICEwACkc8Adq+yByMAATXaBXgEAAYbAAKSKwB2sOgDAAE3TwACkc8AApIsAQ8AApJIcwACknY7AAKSbwB2sOhzAAKSZhsAApJvAHaw6gQYBAAGUAMAATcmBXgEAAZMAwABN0z4BPRzAAKS3hMAApKvAHavsgQwCAAKGwACkuMAdrDqTAMAATVY9jsAApMrAHaw6k0PAAKTVHMAApN6GwACk3MAdrDqAuwEAAYPAAKTgwB2r3ADAAE3QPgE9jsAApPPAHaw6HMAApPWGwACk88AdrDqBDQEAAR7AAKT4wABG/gcAB4LAAKUAwB2rzobAAKUNwB2sOoDAAKUQwB2rsJOEwAClHMAdq+yGwAClKsAdrDqBwAClLcAdq74AAMAATchKwAClPwGFwAClRsAdrAUGwABHAYCswACluMAApcPAAKgnAAGisMAARjkAAAABA8AApc3AAKgnAAAAAwMDwACl4AAAAKKAYAOsSgDAAKXtAAAAooFgA8AATKIAwACl/wAAAKJzYAOsSgAAYAPAAEyiAT4ITsAAphfAAKYiAACifmADwABMogEcwACmJpWDxgEAAYHAAKYowB2t9ADAAE3KQBzAAKZOFsAApkeCwACmOsAdrgSByMAATXaBXgEAAYPAAKZRwB2uHQDAAE3TwACmOsAAplsATsAApsDAAKbCAACDZmADwABMogGDwACmxMAdrh1DwACm1BzAAKbfjMAApt3AHa6AHMAAptuEwACm3cAdroCBBgEAAZQAwABNyYFeAQABkwDAAE3TPgE9HMAApvmCwACm7cAdrgSBDAIAAoTAAKb6wB2ugJMAwABNVj2MwACnDMAdroCTQ8AApxccwACnIITAAKcewB2ugIC7AQABHMAApyiBwACnIsAdrfSBBgEAAZQAwABNyQDAAE3QPgE9jMAApzXAHa6AHMAApzeEwACnNcAdroCBDQEAAR7AAKc6wABG/wQABIDAAKdCwB2t5oTAAKdLwB2ugILAAKdOwB2uBIHAAKdcwB2t9AAAwABNyEnAAKe4HMAAp76EwACnvMAdroCAuwEAAYHAAKfAwB2t9ADAAE3QPgE9HsAAp8/AAEb+BwAHgMAAp9fAHa3mhMAAp+DAHa6AgMAAp+PAHa3mhMAAp+zAHa6AgsAAp+/AHa4EHMAAp/+Vg8YBAAGEwACoAcAdroAAwABNypQAP0rAAKgSAYPAAKgZwB2uHQbAAEcCgKzAAKw0wACskMAAry0AAaKxwABGOQJqwACsNWADwABKn4NyasAArGlgA8AASp+RtAAAAQPAAKymwACvLQAAAAMDA8AArLIAAACLR2ADrEoAwACswwAAAKJXYAOsSgDAAKzPAAAAg2ZgA8AATKIAAGADwABMogE+A0AcwACtMhbAAK0rgcAArSTAHbBxgcjAAE12gV4BAAGXAMAATdPAAK0kwACtNgBJwACtPRzAAK1LHMAArUeBwACtQcAdsHGC0QEAAYLAAK1IwB2wfwDAAE1VgIwBAAEcwACtUoDAAK1OwB2wY4LRAQABasAArVNgA8AATKIUAMAATVUAwABNxj4BPRzAAK1ygMAArW7AHbBjgQwCAAJqwACtc2ADwABMohZqwACthWADwABMosAAWgUAwABNVj4CTsAArebAAK30AACismADwABMogEcwACuORzAAK4hHMAArgwcwACuCIHAAK4CwB2wcYLRAQABgsAArgnAHbB/AMAATVWDcQEAARzAAK4basAArhBgA8AATKJvgQYBAAGUAMAATckAwABMvoCmAQABHMAArjIcwACuKoHAAK4kwB2wcYLRAQABHMAAri2CwACuK8AdsH+BBgEAAZQAwABNyQDAAE1Vg8UBAAGUAMAATL8AwABMu4aSAQABHMAArmIcwACuT4DAAK5LwB2wY4LRAQABasAArlBgA8AATKIUAMAATVWDxQEAAZQAwABMvwDAAE3NScAArm8cwACugYPAAK5zwB2xWYKMAQABasAAroNgA8AATKLAAFoFAMAATdI+AT0cwACunYDAAK6ZwB2wY4EMAgACasAArp5gA8AATKIWasAArrBgA8AATKLAAFoFAMAATVY+AT0cwACu14DAAK7TwB2wY4EMAgACasAArthgA8AATKIWg8AArurAHbFZAMAATVZKwACvCwEjGsAArxLAAEbNlZQBYAPAAEyiBsAARwOArMAAr2rAAK92wACx0QAAorPAAEY5AAAAAQPAAK96wACx0QAAAAEBAcAAr4IAAACikmADwABKqgAAYAPAAEa/AT4JTsAAr5zAAK+iAACCHWADwABGvwEmwACvnAGAwACvpMAdsyRgA8AARr9AHMAAr8MWwACvvYHAAK+3wB2zP4tqwABGOcAARtiCjAEAAZMAwABN0sAAr7fAAK/GAEnAAK/NHMAAr9cWwACv0S6LasAARjnAAEbYgLsBAAEWwACv34HAAK/ZwB2zP4tqwABGOcAARtgAwABN0D4BSsAAr+4BGsAAr/XAAEbfPz0cwACwBS6itMAARjkBAAGBwACwDcAdsz8AwABHBU7AALCJwACwlgAAorVgA8AATKIBHMAAsKgawACwmMAARtOBBgEAARrAALCqwABG1ADAAE3JTsAAsMDAALDLAACitmADrEoBHsAAsM3AAEbrBAAEGsAAsOPAAEbSGsAAsPbAAEbUGsAAsQTAAEbTgsAAsRXAHbQGAE7AALEswACxMAAAordgA8AARr8BH8AAsTbAAEc6AwADKoLAALFLwB20BoPAALFZwB20OwBJwACxaiIhHMAAsXsWwACxby6iTMAARjnAAEbWgIwBAAEWwACxhIHAALF+wB2zP6JMwABGOcAARtYAwABN/AAcwACxnxbAALGZhMAAsZXAHbR+i2rAAEY5wABG2IKMAQABkwDAAE3SPgE9jMAAsa3AHbR+HMAAsbOEwACxtMAdtH6D6wAAAADAAEcKP0rAALHDAYTAALHKwB20fgbAAEcEgKzAALIdwACyKcAAtIEAAKK4wABGOQAAAAEDwACyLcAAtIEAAAABAQHAALI1AAAAopJgA8AASqoAAGADwABGvwE+CU7AALJPwACyVQAAgh1gA8AARr8BJsAAsk8BgMAAslfAHbV6YAPAAEa/QBzAALJ2FsAAsnCBwACyasAdtZWLasAARjnAAEbYgowBAAGTAMAATdLAALJqwACyeQBJwACygBzAALKKFsAAsoQui2rAAEY5wABG2IC7AQABFsAAspKBwACyjMAdtZWLasAARjnAAEbYAMAATdA+AUrAALKhAS4/PRzAALK4LqK0wABGOQEAAYHAALLAwB21lQDAAEcFTsAAszvAALNFAACiuWADrEoBHsAAs0/AAEbrBAAEGsAAs1zAAEbSkxrAALNywABG1BrAALOAwABG1ABOwACzl8AAs5sAAKK6YAPAAEa/AR/AALOhwABHOgMAAyoawACztsAARtSCwACzxMAdtlQAScAAs9QcwACz5RrAALPYwABG1YKMAQABkwDAAE3SPgE9i8AAs/LAHbaPHMAAs/yDwACz+MAdto+DxQEAARrAALP/wABG1QDAAEcNP0nAALQxIhbAALQ1LqJMwABGOcAARtYAHMAAtE8WwAC0SYPAALRFwB22j4tqwABGOcAARtiCjAEAAZMAwABN0j4BPYvAALRdwB22jxzAALRjg8AAtGTAHbaPg+sAAAAAwABHCj9KwAC0cwGDwAC0esAdto8GwABHBYCswAC178AAtfTAAMriAACitMAARjkAAAABA8AAtfvAAMriAAAAAQEBwAC2CAAAAIIdYAPAAEa/AABcAT4gScAAtj8iIiIcwAC2TxbAALZJLotqwABGOcAARtiAjAEAARrAALZSwABGzwDAAE3GABzAALZ9FsAAtneAwAC2ccAdt6+LasAARjnAAEbYgIwBAAEawAC2gMAARtEAwABNxgAewAC2ncAARnUCAAIWwAC2rC6iTcAARjnAAEbXGsAAtrXAAEbOAAAewAC21cAARnUCAAIWwAC25YDAALbfwB23r6JNwABGOcAARtcawAC27sAARtAAPgFKwAC3CwA/QBzAALcqFsAAtyQui2rAAEY5wABG2IFeAQABFsAAtzOAwAC3LcAdt6+LasAARjnAAEbYAMAATdPAALckwAC3OABOwAC3RMAAt0gAAKK7YAPAAEyiARzAALdVasAAt0pgA8AATKJvgQYBAAEWwAC3dhzAALdkFsAAt12AwAC3V8Adt6+iTcAARjnAAEbXgtEBAAEcwAC3cRbAALdrgMAAt2XAHbevi2rAAEY5wABG2IEGAQABlADAAE3JAMAATVWDv8AATNgAwABNyUnAALfRFsAAt+EWwAC324DAALfVwB23r4tqwABGOcAARtiigsAATNc+AT2JwAC38MAduMYcwAC39IHAALfwwB24xoENAQABasAAt/dgA8AATKJvAMAATcg/TsAAuKwAAACic2ADrEoATsAAuMIAAACifmADwABMogBOwAC5rQAAAKK8YAOsSgBOwAC5vgAAAKK9YAPAAEyiAEnAALnJHMAAudGBwAC5zcAduMaCjAEAAZMAwABN0j4FTsAAujHAALpAAACivmADwABMogEcwAC6ZxzAALpZHMAAulQcwAC6R4HAALpDwB24xoENAQABasAAuklgA8AATKJvAMAATciBBgEAAZQAwABNyYaSAQABasAAulxgA8AATKJvAMAATc2BDQEAAZQAwABNyD2MwAC6csAducgewAC6fMAARmoBAAEcwAC6kxbAALqNgMAAuofAHbevi2rAAEY5wABG2IENAQABhsAAupXAHboIAMAATcgAPY3AALqswB251x7AALq0wABG8QQABBbAALrIgMAAusLAHbevok3AAEY5wABG1xbAALrXgMAAutHAHbevi2rAAEY5wABG2IHAALrewB24xoTAALrjwB25yAA9isAAuvPAHbmoHsAAuwLAAEZqAQABHMAAuxMWwAC7DS6LasAARjnAAEbYgQ0BAAGGwAC7FcAduggA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txTAAMcXwB29vwkAFMAAxyLAHcV4DgCCwADHK8AduagAScAAx0QcwADHXRzAAMdMhsAAx0jAHbxbgtEBAAFqwADHTWADwABMohYAwABNVYCMAQABkwDAAE3GPgE9NcAAx3MAAAEAYAOsSgGGwADHc8AdvFs1wADHeAAAAQBgA8AATKIBasAAx3hgA8AATKJMNcAAx3EAAAEAYAPAAEyiARzAAMdxHMAAx3cUwADHc8Adxj4PAILRAQABFMAAx3jAHcZVEAAAwABNVYEGAQABlADAAE3JNcAAx3cAAAEAXAEcwADHdxTAAMdzwB3GPg8AgQwCAAIUwADHeMAdxlUQABTAAMdxwB3GcREAAMAATVYUwADHccAdxnERAD89NcAAx6UAAAEAYAOsSgGGwADHpcAdvFs1wADHqgAAAQBgA8AATKIBasAAx6pgA8AATKIWNcAAx6MAAAEAYAPAAEyiARzAAMejHMAAx6kUwADHpcAdxv4PAILRAQABFMAAx6rAHccVEAAAwABNVYEGAQABlADAAE3JNcAAx6kAAAEAXAEcwADHqRTAAMelwB3G/g8AgQwCAAIUwADHqsAdxxUQABTAAMejwB3HMREAAMAATVYUwADHo8AdxzERAEAcwADH3BzAAMfYgsAAx8zAHbmogtEBAAGHwADH2cAdvUUAwABNVYFbAQABHMAAx+OGwADH38AdvFuC0QEAAWrAAMfkYAPAAEyiTADAAE1VAMAATdHAAMfMwADH9wBDwADIBCIcwADIGxzAAMgXgsAAyAvAHbmogtEBAAGHwADIGMAdvUUAwABNVYC7AQABHMAAyCGGwADIHcAdvFuC0QEAAWrAAMgiYAPAAEyiTADAAE1VAMAATdABHMAAyFscwADIU4LAAMhHwB25qILRAQABHMAAyFaHwADIVMAdvUWBBgEAAZQAwABNyQDAAE1VgLsBAAEcwADIYYbAAMhdwB28W4LRAQABasAAyGJgA8AATKIWAMAATVUAwABN0D4EPR7AAMiBwABG9wUABYLAAMiJwB25qIPAAMiXwB25txTAAMijwB29vwkAFMAAyK7AHcV4DgCCwADIt8AduagAScAAyNIcwADI6xzAAMjahsAAyNbAHbxbgtEBAAFqwADI22ADwABMohYAwABNVYCMAQABkwDAAE3GPgE9NcAAyQMAAAEAYAOsSgGGwADJA8AdvFs1wADJCAAAAQBgA8AATKIBasAAyQhgA8AATKJMNcAAyQEAAAEAYAPAAEyiARzAAMkBHMAAyQcUwADJA8AdyVYPAILRAQABFMAAyQjAHcltEAAAwABNVYEGAQABlADAAE3JNcAAyQcAAAEAXAEcwADJBxTAAMkDwB3JVg8AgQwCAAIUwADJCMAdyW0QABTAAMkBwB3JiREAAMAATVYUwADJAcAdyYkRAD89NcAAyTkAAAEAYAOsSgGGwADJOcAdvFs1wADJPgAAAQBgA8AATKIBasAAyT5gA8AATKIWNcAAyTcAAAEAYAPAAEyiARzAAMk3HMAAyT0UwADJOcAdyhYPAILRAQABFMAAyT7AHcotEAAAwABNVYEGAQABlADAAE3JNcAAyT0AAAEAXAEcwADJPRTAAMk5wB3KFg8AgQwCAAIUwADJPsAdyi0QABTAAMk3wB3KSREAAMAATVYUwADJN8AdykkRAEAcwADJchzAAMlugsAAyWLAHbmogtEBAAGHwADJb8AdvUUAwABNVYFbAQABHMAAyXmGwADJdcAdvFuC0QEAAWrAAMl6YAPAAEyiTADAAE1VAMAATdHAAMliwADJjQA/PY/AAMm0wB29RRzAAMm2h8AAybTAHb1FgQYBAAEUwADJucAdwPwMAADAAE3JPRvAAMncwABGzhbAAMnyLqJNwABGOcAARtc9G8AAyf/AAEbPFsAAyhMui2rAAEY5wABG2D0bwADKHsAARtAWwADKOYDAAMozwB23r6JNwABGOcAARtc9G8AAykbAAEbRFsAAyl+AwADKWcAdt6+LasAARjnAAEbYPRvAAMpqwABG0oLAAMp+wB25qD0bwADKkMAARtODwADKosAdubc9G8AAyrLAAEbUhcAAysHAHbnXPRvAAMrMwABG1YHAAMrbwB24xgbAAEcGgKzAAM1twADNeMAA25gAAaLDwABGOQAAAAEDwADNgsAA25gAAAAJCQnAAM2VAAAAooBgA6xKAMAAzagAAACigWADwABMogDAAM3AAAAAorxgA6xKAMAAzdMAAACivWADwABMogDAAM3rAAAAosBgA6xKAMAAzf8AAACiu2ADwABMogDAAM4VAAAAi0dgA6xKAMAAziwAAACiv2ADrEoAwADOSAAAAKJzYAOsSgAAYAPAAEyiAT4MTsAAzqDAAM6rAACifmADwABMogEewADOrcAARvEEAASAwADOu8AdzFGBwADOxMAdzF+FwADOy8AdzJsUwADO0MAdzMcIAABAFsAAzzKDwADPLMAdzH2MLMAATNbAAM8swADPOABOwADPQ8AAz0UAAINmYAPAAEyiARzAAM9SFMAAz0fAHczgCQCBDQEAARzAAM9gFMAAz1XAHczgCQCAoQEAAZQAwABMugDAAE3ITsAAz27AAM9wAACJzGADwABMogEcwADPdBTAAM9ywB3NRQoAgQYBAAGDwADPdsAdzH0AwABNyU7AAM+FwADPjQAAg+VgA8AATKIBHsAAz4/AAEbtBAAEgsAAz57AHcxvg8AAz6fAHcx9FMAAz67AHc2OCwCHwADPscAdzLkAScAA0DocwADQex7AANA+wABG9QQABBTAANBNwB3MxwgAFMAA0FvAHczgCQCHwADQZ8AdzLkUwADQcsAdzcUMAACBXgEAAZMAwABN0z4DQBzAANCSFMAA0JDAHc1FCgCAjAEAARTAANCVwB3M4AkAAMAATcbAANCQwADQnwA9HMAA0LQUwADQqMAdzMcIAIEMAgACNcAA0LUAAAEAYAPAAEyiARTAANC1wB3M4AkANcAA0L8AAAEAYAPAAEyiARXAANC/wB3M4AkcwADQvxTAANC1wB3Onw0AgQ0BAAGUAMAATcgUwADQtcAdzp8NAJQAwABNVj0ewADRCcAARvcFAAUUwADREcAdzMcIABTAANEfwB3M4AkAh8AA0SvAHcy5FMAA0TbAHc3FDAAUwADRP8AdzMcIAAA+AT0cwADRohTAANGWwB3MxwgAgQwCAAI1wADRowAAAQBgA8AATKIBFMAA0aPAHczgCQA1wADRrQAAAQBgA8AATKIBFcAA0a3AHczgCRzAANGtFMAA0aPAHc9bDQCBDQEAAZQAwABNyBTAANGjwB3PWw0AkwDAAE1WScAA0cAWwADRzxTAANHEwB3M4AkAooLAAEzXPgE9HMAA0eoUwADR3sAdzMcIAIEMAgACFMAA0evAHczgCQCTAMAATVY/PRXAANPYwB3NRQocwADT1hTAANPYwB3NRQoAgQYBAAGUAMAATclDwADT3xzAANPoFMAA0+bAHc2OCwCCjAEAAZMAwABN0j4GTsAA0/nAANP8AACiwWADwABMogEewADT/sAARwIDAAOGwADUFcAdzKsUwADUG8AdzMcIABTAANQpwB3NRQoAAD0VwADUM8AdzY4LHMAA1DUUwADUM8AdzY4LAIEGAQABFMAA1DjAHdBJDQAAwABNyU7AANRGwADUSQAAosJgA8AATKIBHsAA1FXAAEb+BwAHhsAA1F3AHcyrasAA1GNgA8AATKIWhMAA1HPAHcyNkxTAANSAwB3MxwgAFMAA1I7AHc2OCwCDwADUkcAdzH0AQBzAANUNFMAA1QrAHdBJDQCAjAEAARTAANUQwB3QuQ4AAMAATcbAANUKwADVEgBJwADVGxzAANUiFMAA1R/AHdBJDQCAjAEAAZQAwABNxj4BScAA1TIcwADVRhzAANVCFMAA1TbAHczHCACC0QEAARTAANVDwB3NRQoAAMAATVWAuwEAARzAANVMhsAA1UjAHcyrgtEBAAFqwADVTWADwABMohYAwABNVQDAAE3QPgNOwADVbsAA1XYAAIPlYAPAAEyiAR7AANV4wABG7QQABITAANWHwB3MjYPAANWRwB3MfRTAANWYwB3NjgsAh8AA1ZvAHcy5AD0ewADVscAARvcFAAUUwADVucAdzMcIABTAANXHwB3M4AkAh8AA1dPAHcy5FMAA1d7AHdHIDwAUwADV58AdzMcIAABDwADWABzAANYXHMAA1hMUwADWB8AdzMcIAILRAQABFMAA1hTAHc1FCgAAwABNVYC7AQABNcAA1hsAAAEAYAOsSgGGwADWG8AdzKs1wADWIAAAAQBgA8AATKIBasAA1iBgA8AATKIWNcAA1hkAAAEAYAPAAEyiARzAANYZHMAA1h8UwADWG8Ad0oYQAILRAQABFMAA1iDAHdKdEQAAwABNVYEGAQABlADAAE3JNcAA1h8AAAEAXAEcwADWHxTAANYbwB3ShhAAgQwCAAIUwADWIMAd0p0RABTAANYZwB3SuRIAAMAATVYUwADWGcAd0rkSAADAAE3QPgE9HsAA1j/AAEb3BQAFFMAA1kfAHczHCAAUwADWVcAdzOAJAIfAANZhwB3MuRTAANZswB3RyA8AFMAA1nXAHczHCAAAPz4DQBzAANa7FMAA1rjAHdBJDQCAjAEAAZUAwABNxsAA1rjAANa/AEAcwADW4RzAANbdFMAA1tHAHczHCACC0QEAARTAANbewB3NRQoAAMAATVWBWwEAARzAANbohsAA1uTAHcyrgtEBAAFqwADW6WADwABMokwAwABNVQDAAE3RwADW0cAA1vwAScAA1wciHMAA1xwcwADXGBTAANcMwB3MxwgAgtEBAAEUwADXGcAdzUUKAADAAE1VgLsBAAEcwADXIobAANcewB3Mq4LRAQABasAA1yNgA8AATKJMAMAATVUAwABN0AEcwADXXBzAANdUFMAA10jAHczHCACC0QEAARzAANdXFMAA11XAHc1FCgCBBgEAAZQAwABNyQDAAE1VgLsBAAEcwADXYobAANdewB3Mq4LRAQABasAA12NgA8AATKIWAMAATVUAwABN0D4GTsAA14XAANeNAACD5WADwABMogEewADXj8AARu0EAASEwADXnsAdzI2DwADXqMAdzH0UwADXr8AdzY4LAIfAANeywB3MuQA9HsAA18jAAEb3BQAFFMAA19DAHczHCAAUwADX3sAdzOAJAIfAANfqwB3MuRTAANf1wB3U4Q8AFMAA1/7AHczHCAAAScAA2BccwADYMBzAANgfhsAA2BvAHcyrgtEBAAFqwADYIGADwABMohYAwABNVYCMAQABkwDAAE3GPgE9NcAA2EYAAAEAYAOsSgGGwADYRsAdzKs1wADYSwAAAQBgA8AATKIBasAA2EtgA8AATKJMNcAA2EQAAAEAYAPAAEyiARzAANhEHMAA2EoUwADYRsAd1acQAILRAQABFMAA2EvAHdW+EQAAwABNVYEGAQABlADAAE3JNcAA2EoAAAEAXAEcwADYShTAANhGwB3VpxAAgQwCAAIUwADYS8Ad1b4RABTAANhEwB3V2hIAAMAATVYUwADYRMAd1doSAD89NcAA2HgAAAEAYAOsSgGGwADYeMAdzKs1wADYfQAAAQBgA8AATKIBasAA2H1gA8AATKIWNcAA2HYAAAEAYAPAAEyiARzAANh2HMAA2HwUwADYeMAd1mcQAILRAQABFMAA2H3AHdZ+EQAAwABNVYEGAQABlADAAE3JNcAA2HwAAAEAXAEcwADYfBTAANh4wB3WZxAAgQwCAAIUwADYfcAd1n4RABTAANh2wB3WmhIAAMAATVYUwADYdsAd1poSAEAcwADYrxzAANirFMAA2J/AHczHCACC0QEAARTAANiswB3NRQoAAMAATVWBWwEAARzAANi2hsAA2LLAHcyrgtEBAAFqwADYt2ADwABMokwAwABNVQDAAE3RwADYn8AA2MoAQ8AA2NciHMAA2O8cwADY6xTAANjfwB3MxwgAgtEBAAEUwADY7MAdzUUKAADAAE1VgLsBAAEcwADY9YbAANjxwB3Mq4LRAQABasAA2PZgA8AATKJMAMAATVUAwABN0AEcwADZMRzAANkpFMAA2R3AHczHCACC0QEAARzAANksFMAA2SrAHc1FCgCBBgEAAZQAwABNyQDAAE1VgLsBAAEcwADZN4bAANkzwB3Mq4LRAQABasAA2ThgA8AATKIWAMAATVUAwABN0D4EPR7AANlYwABG9wUABRTAANlgwB3MxwgAFMAA2W7AHczgCQCHwADZesAdzLkUwADZhcAd1OEPABTAANmOwB3MxwgAAEnAANmpHMAA2cIcwADZsYbAANmtwB3Mq4LRAQABasAA2bJgA8AATKIWAMAATVWAjAEAAZMAwABNxj4BPTXAANnaAAABAGADrEoBhsAA2drAHcyrNcAA2d8AAAEAYAPAAEyiAWrAANnfYAPAAEyiTDXAANnYAAABAGADwABMogEcwADZ2BzAANneFMAA2drAHdjPEACC0QEAARTAANnfwB3Y5hEAAMAATVWBBgEAAZQAwABNyTXAANneAAABAFwBHMAA2d4UwADZ2sAd2M8QAIEMAgACFMAA2d/AHdjmEQAUwADZ2MAd2QISAADAAE1WFMAA2djAHdkCEgA/PTXAANoQAAABAGADrEoBhsAA2hDAHcyrNcAA2hUAAAEAYAPAAEyiAWrAANoVYAPAAEyiFjXAANoOAAABAGADwABMogEcwADaDhzAANoUFMAA2hDAHdmPEACC0QEAARTAANoVwB3ZphEAAMAATVWBBgEAAZQAwABNyTXAANoUAAABAFwBHMAA2hQUwADaEMAd2Y8QAIEMAgACFMAA2hXAHdmmEQAUwADaDsAd2cISAADAAE1WFMAA2g7AHdnCEgBAHMAA2kkcwADaRRTAANo5wB3MxwgAgtEBAAEUwADaRsAdzUUKAADAAE1VgVsBAAEcwADaUIbAANpMwB3Mq4LRAQABasAA2lFgA8AATKJMAMAATVUAwABN0cAA2jnAANpkAD89FcAA2ovAHc1FChzAANqNFMAA2ovAHc1FCgCBBgEAARTAANqQwB3QSQ0AAMAATck9FcAA2uPAHczgCYPAANrwwB3MfUnAANr7HMAA2wOFwADa/8AdzJuCjAEAAZMAwABN0j4BPRXAANswwB3M4AkewADbPcAARvMEAAQUwADbS8AdzMcIABTAANtZwB3M4AkAhcAA22XAHcybFMAA22rAHczHCAAAP0rAANuDARTAANuKwB3M4AkABsAARyyArMAA253AANulwADeugEAghwAAAABA8AA267AAN66AAAAAAAAAGADwABMogE+Bk/AANxfwADcYwAAAYG6YQMCYAPAAEyiYAPAAEyiYAPAAEyiAAPAANxqwADdEQAAAAICAsAA3G8AAACMLmADwABMogDAANx5AAAAImADwABMogAAYAPAAEyiAT4DPYnAANyIwB3bzhzAANyaN9////+AoQEAARzAANyigcAA3J3AHdvOgQ0BAAGCwADcpMAd294AwABNyADAAEy6PYnAANyywB3bzhzAANzEN9////+AoQEAARzAANzMgcAA3MfAHdvOgQ0BAAEcwADc4xzAANzbN8AH//+AoQEAAYHAANzdwB3bzgDAAEy6g3EBAAE3CgDAAEy+AMAATcgAwABMukrAANzyARzAANz+gcAA3PnAHdvOgKMBAAEcwADdBoHAAN0BwB3bzoPFAQABNwYAwABMvwDAAEy8T8AA3RjAAN0cAAABiFZhAwFgA8AATKJgA8AATKIAA8AA3SLAAN3UAAAAAQEBwADdJwAAAIwuYAPAAEyiAABgA8AATKIBPgM9isAA3TXAHdz/HMAA3Uc33////4ChAQABHMAA3U+CwADdSsAd3P+BDQEAARzAAN1mHMAA3V43w////4ChAQABgsAA3WDAHdz/AMAATLqDcQEAAZYAwABMvgDAAE3IAMAATLo9isAA3XTAHdz/HMAA3YCCwADde8Ad3P+AowEAARzAAN2IgsAA3YPAHdz/g8UBAAE3CwDAAEy/AMAATLxKwADdlgEcwADdqDff////gKEBAAEcwADdsILAAN2rwB3c/4ENAQABHMAA3cccwADdvze//4ChAQABgsAA3cHAHdz/AMAATLqDcQEAATcPAMAATL4AwABNyADAAEy6ScAA3dsWwADd3y6iccAARjnAAEcrSsAA3egBN5ozP07AAN4WwADeGwAAjC5gA8AATKIBIxbAAN4dLqJMwABGOcAARtY3wAFGgTfABo55AWADwABMokXAAN5PAcAA3ljAAN5aAACDZmADwABMogGTARzAAN5hg8AA3l/AHd5xgLsBAAEWwADeYy6LasAARjnAAEbYAMAATdABi8AA3mrAHd5xHMAA3muDwADeasAd3nGBDQEAAZQAwABNyD4BPYrAAN53wB3eNhzAAN6FgMAA3n7AHdugbgIAAoLAAN6GwB3eNhzAAN6TFsAA3owuok3AAEY5wABG14LRAQABg8AA3pTAHd5xAMAATVUAAErAAN6jARzAAN6wgcAA3qrAHdzXbgEAAYLAAN6xwB3eNgAABsAARxaArMAA36fAAN+1wADf/AMAgIwAAAABA8AA37fAAN/8AAAAAQEBwADfvwAAAIIdYAPAAE3vAABgA8AAStgBSsAA388BIiXAAN/VAIDAAN/PwB3fb2ADwABGvwAcwADf+BzAAN/nLqKTAQABFMAA3/HAHd9vAAFgA8AARr8AwABHDoCMAQABkwDAAE3GBsAARy2ArMAA47XAAOO9wADkXAEAg78AAAABA8AA48fAAORcAAAAAAAAAGADwABMogE+A0nAAOPNHMAA49cWwADj0S6LasAARjnAAEbYgIwBAAGTAMAATcZKwADj3QGTP0nAAOPrFsAA4+8uokzAAEY5wABG1krAAOP8ARbAAOQLHMAA5AQugNgAAAAAwABHEoO/wABHLT9KwADkGgEcwADkOhzAAOQsasAA5CFgA8AATKJvg8YBAAEcwADkNRbAAOQvLotqwABGOcAARtiBBgEAAZQAwABNyQDAAE3KgQ0BAAEWwADkTxzAAORDFsAA5Dwuok3AAEY5wABG14LRAQABHMAA5EoWwADkRC6LasAARjnAAEbYgQYBAAGUAMAATckAwABNVYO/wABM2ADAAE3IBsAARxeArMAA5nXAAOaKwADnLgMAhpIAAAABA8AA5ozAAOcuAAAAAQEBwADmlAAAAKKSYAPAAEqqAABgA8AARr8BPgNOwADmrsAA5rQAAIIdYAPAAEa/ASbAAOauAYDAAOa2wB3hMWADwABGv0nAAObCHMAA5tIWwADmzIHAAObGwB3hTItqwABGOcAARtiAjAEAAZMAwABNxj4BPTDAAObgasAA5uxgA8AATH7AAFoVP0rAAOcYARzAAOcfLqKzwABGOQEAAYHAAOckwB3hTADAAEcDBsAARxiArMAA6D7AAOhKwADo9QAAol4AAAABA8AA6FPAAOj1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wAEPfsAeCzwQHsABD4jAAEZqAQABFMABD5PAHgrXDgAAPRXAAQ+hwB4LcRQqPRXAAQ+6wB4LVBIewAEPxMAARmoBAAEUwAEPz8AeCtcOAAA9FcABD93AHguTFio9HMABD/0UwAEP9sAeC1QSAIEMAgACk5QAAEFDwAEQCyk+BkPAARAgHMABEDgcwAEQMxzAARAvFMABECjAHgnTCgCC0QEAAZMAwABNVYChAQABlADAAEy6gIwBAAGTAMAATcY+Az0ewAEQSMAARvIEAAQUwAEQTcAeCdMKAIfAARBWwB4ELpQUwAEQYsAeCdMKAABJwAEQdBTAARB4wB4KXQwAPgJJwAEQiCIcwAEQnhzAARCZHMABEJUUwAEQjsAeCzAPAILRAQABkwAAgKEBAAGUAACAjAEAAZQAwABN/AEcwAEQuRzAARC0HMABELAUwAEQqcAeCzwQAILRAQABkwAAgKEBAAGUAACAjAEAAZQAwABN/D4CScABEOQUwAEQ6MAeC2ATAD4BScABEQUiIRzAAREbHMABEREUwAERCsAeCzAPAILRAQABh8ABERLAHgQuAACAjAEAAZMAwABN/AEcwAERax7AARE3wABG9QQABCbAARFGBRTAARFGwB4LMA8AYAOsSofAARFPwB4ELoTAARFYwB4DrIfAARFhwB4ELgCCjAEAAZMAwABN0j4BPR7AARGCwABG9wUABSbAARGKBRTAARGKwB4LMA8AYAOsShTAARGTwB4Kqg0AhMABEZ3AHgOsh8ABEabAHgQuJsABEa8FFMABEa/AHgswDwBgA6xKAD4CPR7AARHgwABG9wUABYTAARHowB4DrIfAARHxwB4ELibAARH6BRTAARH6wB4LMA8AYAOsSofAARIDwB4ELibAARIMBRTAARIMwB4LMA8AYAOsSgA9FcABEibAHgtgEyo+AT0ewAESbsAARvYFAAUmwAESdgUUwAESdsAeCzAPAGADrEoUwAESf8AeCqoNAITAARKJwB4DrIfAARKSwB4ELibAARKbBRTAARKbwB4LMA8AYAOsSgBJwAES1RTAARLZwB4LcRQAPgE9HsABEvbAAEb2BQAFJsABEv4FFMABEv7AHgs8EABgA6xKFMABEwfAHgqqDQCDwAETEcAeA4KHwAETGsAeBC4mwAETIwUUwAETI8AeCzwQAGADrEoAScABE0AiIRzAARNWHMABE0wUwAETRcAeCzwQAILRAQABh8ABE03AHgQuAACAjAEAAZMAwABN/AEcwAETox7AARNwwABG9QQABCbAARN/BRTAARN/wB4LPBAAYAOsSofAAROIwB4ELoPAARORwB4DgofAAROawB4ELgCCjAEAAZMAwABN0j4BPR7AARO5wABG9wUABSbAARPBBRTAARPBwB4LPBAAYAOsShTAARPKwB4Kqg0Ag8ABE9TAHgOCh8ABE93AHgQuJsABE+YFFMABE+bAHgs8EABgA6xKAD4CPR7AARQTwABG9wUABYPAARQbwB4DgofAARQkwB4ELibAARQtBRTAARQtwB4LPBAAYAOsSofAARQ2wB4ELibAARQ/BRTAARQ/wB4LPBAAYAOsSgA9FcABFFfAHgtxFCk/PR7AARSPwABG8gQABCbAARSUBRTAARSUwB4LMA8AYAOsShTAARSdwB4Kqg0AlCbAARSqBRTAARSqwB4LMA8AYAOsSgBJwAEUwxzAARTYHMABFNMcwAEUzxTAARTIwB4LPBAAgtEBAAGTAACAoQEAAZQAAICMAQABlADAAE38PgFJwAEU/hTAARUCwB4LcRQAPgE9HsABFR3AAEb2BQAFJsABFSUFFMABFSXAHgs8EABgA6xKFMABFS7AHgqqDQCDwAEVOMAeA4KHwAEVQcAeBC4mwAEVSgUUwAEVSsAeCzwQAGADrEoAScABFWUiIRzAARV7HMABFXEUwAEVasAeCzwQAILRAQABh8ABFXLAHgQuAACAjAEAAZMAwABN/AEcwAEVxh7AARWTwABG9QQABCbAARWiBRTAARWiwB4LPBAAYAOsSofAARWrwB4ELoPAARW0wB4DgofAARW9wB4ELgCCjAEAAZMAwABN0j4BPR7AARXawABG9wUABSbAARXiBRTAARXiwB4LPBAAYAOsShTAARXrwB4Kqg0Ag8ABFfXAHgOCh8ABFf7AHgQuJsABFgcFFMABFgfAHgs8EABgA6xKAD4CPR7AARYwwABG9wUABYPAARY4wB4DgofAARZBwB4ELibAARZKBRTAARZKwB4LPBAAYAOsSofAARZTwB4ELibAARZcBRTAARZcwB4LPBAAYAOsSgA9FcABFnLAHgtxFCk/PR7AARakwABG8gQABCbAARapBRTAARapwB4LPBAAYAOsShTA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SqoAAGADwABGvwE+Bk7AASwkwAEsLAAAoshgA8AARr8BJsABLCQBgMABLC7AHihDYAPAAEa/ScABLDocwAEsRoHAASw+wB4oXoFbAQABGsABLEnAAEbfAMAARxs+AT0wwAEsVx/AASxhwABL0QEAASTAASycAiei+YHAASyUwB4oXgA/ScABLKkcwAEstYHAASytwB4oXoCMAQABGsABLLjAAEbgAMAARxZKwAEsvQEawAEsxMAARt8/TsABLNLAASzWAACEX2ADwABGvwEuScABLOIiFsABLOqCwAEs5sAeKQuiTMAARjnAAEbWARzAAS0THMABLP6CwAEs+sAeKQuikcAARjkBAAGBwAEtCsAeKF4AwABG9IFeAQABkwDAAE3TPgE9isABLSLAHikLHMABLSaCwAEtIsAeKQuGeAEAAYHAAS0pwB4oXgDAAEceP0rAAS08AR7AAS1DwABHBwMAA4HAAS1OwB4oXoLAAS1XwB4pCykABsAARyKArMABLzbAAS9CwAEv8wAAovoAAAABA8ABL0XAAS/zAAAAAQEBwAEvTQAAAKKSYAPAAEqqAABgA8AARr8BPgROwAEvZ8ABL20AAIIdYAPAAEa/ASbAAS9nAYDAAS9vwB4p8WADwABGv0nAAS97FsABL38uonHAAEY5wABHK0rAAS+IARzAAS+VgcABL4/AHioMju8AAAAAwABHCz9JwAEvoBbAAS+qgcABL6TAHioMonHAAEY5wABHK0rAAS+zARzAAS+/Lo7vAAAAAMAARws/SsABL8oBHsABL9HAAEcHAwADLoHAAS/iwB4qDCoABsAARyOArMABMz3AATNJwAEzjQAAovsAAAABA8ABM1PAATONAAAAAQEBwAEzWAAAAIw9YAPAAEyiAABgA8AARr8BPgFKwAEzZQEcwAEzcS6AoQEAARzAATODHMABM3kawAEzdcAARuCDcQEAAYDAATN8wB4q5ADAAEcMgQYBAAEawAEzhcAARuAAwABHFADAAEcPBsAARySArMABOHjAATiEwAE6QgAAj5QAAAABA8ABOIzAATpCAAAAAQEBwAE4kQAAAIw9YAPAAEyiAABgA8AARr8BPgJOwAE558ABOfAAAI75YAPAAEa/ARzAATn2GsABOfLAAEbgg3EBAAEcwAE6AIDAATn6wB4rd4EGAQABlADAAE3JAMAARwxKwAE6CgEcwAE6KxzAAToXLoChAQABHMABOiOBwAE6GsAeK5KBBgEAARrAATolwABG4ADAAEcUAMAARw+BBgEAARzAATozLoChAQABgcABOjXAHiuSAMAARw8AwABHFAbAAEcygKzAATpHwAE6UMABOyQBAKL8AAAAAQPAATpbwAE7JAAAAAAAAABgA8AAStgBPgJAHMABOnNqwAE6aGADwABMom+AjAEAATcgAMAATcbAATpowAE6eABKwAE6fwEiHMABOowWwAE6hi6LasAARjnAAEbYgLsBAAGVAMAATdABIhzAATqiFsABOpwui2rAAEY5wABG2ICMAQABlQDAAE3GACIcwAE6whzAATq+FsABOrcuok3AAEY5wABG14LRAQABlADAAE1VgLsBAAE5onUAwABN0AEiIhbAATrjLqJMwABGOcAARtYAHMABOv0cwAE6+RbAATryLqJNwABGOcAARteC0QEAAZQAwABNVYCMAQABOaJ1AMAATcYAHMABOxkcwAE7FRbAATsOLqJNwABGOcAARteC0QEAAZMAwABNVYCMAQABkwDAAE3GBsAARyWArMABOynAATstwAE8hAAAm50AAAABA8ABOzLAATyEAAAAAAAAAGADwABMogE+BUAcwAE7TWrAATtCYAPAAEyib4CMAQABNyAAwABNxsABO0LAATtSAEnAATtZHMABO2MWwAE7XS6LasAARjnAAEbYgIwBAAGTAMAATcZKwAE7aQGTP0nAATt3HMABO4EWwAE7ey6LasAARjnAAEbYgIwBAAGUAMAATcZKwAE7hwEjFsABO44uokzAAEY5wABG1hzAATucHMABO6QWwAE7nS6iTcAARjnAAEbXgtEBAAGTAMAATVWD6wAAAADAAEzFHMABO7EWwAE7qi6iTcAARjnAAEbXgtEBAAGTAMAATVUBYAPAAEyiP0nAATu6IhzAATvEFsABO74ui2rAAEY5wABG2ICMAQABlQDAAE3GABzAATvXHMABO9MWwAE7zC6iTcAARjnAAEbXgtEBAAGUAMAATVWAuwEAATmidQDAAE3QPgJOwAE78cABO/gAAIDmYAPAAEyiARzAATwVHMABPAYcwAE8AhbAATv7LqJNwABGOcAARteC0QEAAZQAwABNVYNxAQABasABPAlgA8AATKJvAMAATL6ApgEAARzAATweFsABPBcuok3AAEY5wABG14LRAQABkwDAAE1VAMAATLtKwAE8KQEjFsABPDAuokzAAEY5wABG1hzAATw+gMABPD/AHi77g+sAAAAAwABMxYDAATxIwB4u+wFgA8AATKI/SsABPFoBIxbAATxhLqJMwABGOcAARtZqwAE8b2ADwABMosAAWglqwAE8eWADwABMosAAWg0BYAPAAEyiBsAARyaArMABPWvAAT1ywAFJnwAAhe8AAAABA8ABPXrAAUmfAAAAAAAAAGADwABLUAE+EknAAT6+FsABPsIuonHAAEY5wABHK0rAAT7LASgAAAAAAAAAAD9OwAE/CsABPxUAAKL9YAOsFwEewAE/G6wbAQABNwgATsABPzLAAT85AACByGADwABMogEcwAE/VBzAAT9GasABPztgA8AATKJvg8YBAAEcwAE/TxbAAT9JLotqwABGOcAARtiBBgEAAZQAwABNyQDAAE3KgQ0BAAEWwAE/aRzAAT9dFsABP1Yuok3AAEY5wABG14LRAQABHMABP2QWwAE/Xi6LasAARjnAAEbYgQYBAAGUAMAATckAwABNVYO/wABM2ADAAE3IScABP3gcwAE/g4HAAT98wB4wbYKMAQABHMABP5dqwAE/hWADwABMosAAWhyBDQEAATc1AMAATcgAwABN0j4BSsABP6UBIxbAAT+sLqJMwABGOcAARtZqwAE/wWADwABLUITBasABP9tgA8AAS1CEygFgA8AAS1A/ScABQCEWwAFAJS6iTMAARjnAAEbWPRzAAUA8gMABQDLAHjBOgQwCAAI3BzeAgADAAE1WP07AAUB8wAFAiwAAonlgA8AATKIBHMABQJkcwAFAlIHAAUCNwB4wbYEGAQABNzUAwABNyYENAQABasABQJtgA8AATKLAAFoRAMAATcg9HMABQLeAwAFArcAeME6BDAIAAjcGHMABQNQcwAFAzYLAAUC+wB4xwYChAQABNw8AwABMuoNxAQABlwDAAEy+AMAATVY9NcABQN4AAAEAYAOsFwGAwAFA3sAeME41wAFA6QAAAQBgA8AATKIBNwccwAFA6IPAAUDewB4yU4EMAgAChMABQOnAHjJqHMABQOwcwAFA6IPAAUDewB4yU4LRAQABhMABQOnAHjJqAMAATVWApgEAARzAAUD+gsABQO/AHjHBg8UBAAGXAMAATL8A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XgEAAZcAwABN0z4CPYvAAUzswB483RzAAUzyg8ABTOzAHjzdgQYBAAGXAMAATck9HMABTRWAwAFNAsAeO+iAggEAASejCgDAAE1XP0nAAU00HMABTT6DwAFNOMAePN2BXgEAAZUAwABN0z4CPYvAAU1QwB483RzAAU1Wg8ABTVDAHjzdgQYBAAGVAMAATck9HMABTXmAwAFNZsAeO+iAggEAASejCwDAAE1XP0nAAU2WHMABTaCDwAFNmsAePN2BXgEAAZQAwABN0z4BPRzAAU3FgMABTbLAHjvogIIBAAEnhjwAwABNVz89icABTefAHjwPHMABTfOBwAFN7sAePA+GkgEAARrAAU32wABGygDAAEcXPRzAAU4ggMABTg3AHjvogIIBAAEcwAFONBzAAU4wFsABTimBwAFOJMAePA+iTcAARjnAAEbXgtEBAAGTAMAATVWA7wAAAADAAEzPAMAATVdJwAFORRbAAU5JLqJMwABGOcAARtY9HMABTmmAwAFOVsAeO+iAggEAASeBBgDAAE1XP0rAAU53ARzAAU6aFsABTpGAwAFOfsAeO+iEecAATXeBvwAAAADAAE0YBsAARwiArMABTqnAAU6twAFPPgAAowzAAEY5AAAAAQPAAU69wAFPPgAAAAEBAcABTsIAAACFwWADwABMogAAYAPAAEyiAT4CScABTv0cwAFPB4DAAU8BwB4/VYC7AQABNwoAwABN0ErAAU8NARzAAU8XasABTxRgA8AATKKEY4ENAQABgMABTxnAHj9VAMAATcg/SsABTyQBHMABTzYcwAFPLmrAAU8rYAPAAEyihHiBDQEAAYDAAU8wwB4/VQDAAE3IgQYBAAE3CgDAAE3JBsAARyiArMABUF/AAVBmwAFTZgAAhjoAAAABA8ABUHPAAVNmAAAAAQEBwAFQeAAAAKJZYAPAAEyiAABgA8AATokBPgtJwAFQhRzAAVCPgMABUInAHkAggowBAAE3JADAAE3SPTDAAVCVH8ABUJ/AAEvoAwADgMABULDAHkAglTckAD9JwAFQxBzAAVDOFsABUMgui2rAAEY5wABG2ICMAQABkwDAAE3GSsABUNQBJ4Y8P0nAAVDlHMABUO8WwAFQ6S6LasAARjnAAEbYgIwBAAGUAMAATcY+A07AAVEBwAFRDQAAow1gA8AATokBHMABURocwAFR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R0cAAAAABAAAAwAAAAAAAAAAAGADwABHPAE/AQkBAMAATgUAAAAABQbAAEc/gKzAAVXQwAFV2MABVegBAqLNwABGOQAAAAEDwAFV6MABVegAAAAAAAAAYAPAAEyiAAbAAEdCgKzAAVYjwAFWJ8ABVlcAAocKwABGOQAAAAEDwAFWL8ABVlcAAAACAgLAAVY8AAAAhIRgA8AARr8AwAFWSgAAAKJzYAOsSgAAYAPAAEyiAAbAAEdDgKzAAVZbwAFWX8ABVsAAAqLTwABGOQAAAAEDwAFWY8ABVsAAAAAFBQXAAVZvAAAAooBgA6xKAMABVnwAAACigWADwABMogDAAVaOAAAAorxgA6xKAMABVpsAAACivWADwABMogDAAVazAAAAonNgA6xKAABgA8AATKIABsAAR0SArMABVsTAAVbIwAFXBAACotLAAEY5AAAAAQPAAVbMwAFXBAAAAAMDA8ABVtgAAACigGADrEoAwAFW5QAAAKKBYAPAAEyiAMABVvcAAACic2ADrEoAAGADwABMogAGwABHRYCswAFXMMABVzzAAVdiAAKi1MAARjkAAAABA8ABV0PAAVdiAAAAAgICwAFXTwAAAKKAYAOsSgDAAVdcAAAAooFgA8AATKIAAGADwABGvwAAAB5IHAAeSFIAHkimAB5JJgAeSYgAHkncAAAABQLAAEdIgKzAAVePwAFXlcABcakDoxIAAAFgA8AATe8AAWADwABHPAsEwABHS4CswAFX4sABV+oJoxPAAEY5AGADwABGvwAEwABHTICswAFX8sABWAIYos3AAEY5AGADwABMogErBMAAR02ArMABWD3AAVhLGKMUwABGOQBgA6xKASsEwABHToCswAFYWsABWF8YoxXAAEY5AGADrEoBKwTAAEdPgKzAAVhnwAFYdRijFsAARjkAYAPAAEyiASsEwABHUICswAFYvcABWMgGoxfAAEY5AGADwABMogFqwAFYx2ADwABMohoEwABHUYCswAFY9cABWQQGoxjAAEY5AGADwABMogFqwAFZA2ADwABMohQEwABHUoCswAFZRMABWVEGoxnAAEY5AGADwABMogFqwAFZUGADwABMohYEwABHU4CswAFZgMABWZEGoxrAAEY5AGADwABMogFqwAFZkGADwABMokwEwABHVICswAFZzsABWdoGoxvAAEY5AGAD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PglAHMABaKocwAFopIDAAWiiwB5ZYo7vAAAAAMAARwuAuwEAARbAAWisLqMTwABGOcAAR0sAwABHGsABaKLAAWi0AEAiHMABaNEWwAFowi6jFsAARjnAAEdPgIwBAAGUAMAATcYBFsABaOoWwAFo2S6izcAARjnAAEdMjCzAAEzWwAFowsABaPAATsABaPvAAWkCAACA5mADwABGvwEcwAFpJxzAAWkMHMABaQaAwAFpBMAeWWKO7wAAAADAAEcLon3AAEY5AQABFsABaRUuos3AAEY5wABHTADAAEbsorjAAEY5AQABFsABaSwuoxPAAEY5wABHSwDAAEcEScABaTsiIhbAAWlBgMABaT/AHlliokzAAEY5wABG1gAhFsABaViCwAFpUcAeWhOiTMAARjnAAEbWABzAAWl0FsABaW6CwAFpZ8AeWhOLasAARjnAAEbYgowBAAGTAMAATdI+AT2KwAFpgcAeWhMcwAFpkxbAAWmKLqMTwABGOcAAR0uBBgEAAYLAAWmVwB5aEwDAAEcUP07AAWmrwAFpsAAAolZgA8AATKIBFsABabmCwAFpssAeWhOLasAARjnAAEbYTsABacjAAWnPAACiV2ADrEoBFsABadiCwAFp0cAeWhOiTcAARjnAAEbXTsABaenAAWnrAACDZmADwABMogEcwAFp8oPAAWntwB5bHIENAQABHMABafqDwAFp9cAeWxyAoQEAAZQAwABMugDAAE3IQ8ABagQcwAFqD43AAWoNwB5bchzAAWoLhcABag3AHltygQYBAAGUAMAATcmBXgEAAZMAwABN0z4BPRzAAWopgcABah3AHllygQwCAAKFwAFqKsAeW3IcwAFqNYTAAWovwB5bSILRAQABhcABajbAHltyAMAATVUAwABNVkrAAWpEAYPAAWpLwB5bHAbAAEdcgKzAAWpYwAFqZMABa+kAAKLUwABGOQAAAAEDwAFqa8ABa+kAAAACAgLAAWp3AAAAooBgA6xKAMABaoQAAACigWADwABMogAAYAPAAEa/AT4FTsABat7AAWrrAACic2ADrEoBHsABau3AAEZqAQABHMABaw0cwAFq+pWDxgEAARbAAWr8LqLNwABGOcAAR0wAwABNyoENAQABlQDAAE3IAE7AAWsbwAFrHQAAg2ZgA8AATKIBHMABayWBwAFrH8AeXH2BDQEA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ScABeh4iFsABeiSAwAF6IsAeaj+iTMAARjnAAEbWABzAAXpDFsABej2EwAF6M8Aeat2LasAARjnAAEbYgowBAAGTAMAATdI+AkAWwAF6Y4TAAXpZwB5q3aJMwABGOcAARtbAAXpZwAF6bgA9jMABennAHmrdHMABeoOEwAF6ecAeat2BDQEAARbAAXqGLqMTwABGOcAAR2UAwABHEz9AIRbAAXqwhMABeqbAHmrdokzAAEY5wABG1sABeqXAAXq7AD2LwAF6xMAeanQWwAF61YTAAXrLwB5q3YtqwABGOcAARtg9isABeuLAHmpoFsABevWEwAF668Aeat2iTcAARjnAAEbXPgI9i8ABexHAHmp0FsABexqAwAF7GMAeaj+LasAARjnAAEbYPYrAAXsnwB5qaBbAAXsygMABezDAHmo/ok3AAEY5wABG107AAXtJwAF7SwAAg2ZbARzAAXtSg8ABe03AHmp0gQ0BAAEcwAF7WoPAAXtVwB5qdIChAQABlAAAAABDwAF7gSbAAXuMBRzAAXuMjMABe4rAHmxoHMABe4iEwAF7isAebGiBBgEAAZQAAIFeAQABkwAAYAPAAErYPgE9HMABe6aBwAF7msAeak+BDAIAAibAAXunBYTAAXunwB5saGADwABMoibAAXuyBRzAAXuygsABe6zAHmpogtEBAAGEwAF7s8AebGgAAGADwABMogDAAE1WSsABe8EBJsABe8EFg8ABe8jAHmp0YAPAAEyiBsAAR3CArMABe9XAAXvhwAF8QQAAotTAAEY5AAAAAQPAAXvowAF8QQAAAAICAsABe/QAAACigGADrEoAwAF8AQAAAKKBYAPAAEyiAABgA8AARr8BPgFKwAF8DgEfwAF8GcAARzoDAAMqgcABfC7AHm2PgMABfDXAHm2BAAbAAEdxgKzAAXxGwAF8SsABfkUAAKMkwABGOQAAAAEDwAF8UcABfkUAAAACAgLAAXxdAAAAooBgA6xKAMABfGoAAACigWADwABMogAAYAPAAEyiAT4CScABfHccwAF8gYHAAXx7wB5uC4C7AQABFsABfIwWwAF8gy6jE8AARjnAAEdli2rAAEY5wABG2ADAAE3QPgFKwAF8mwGBwAF8osAebgs/SsABfWUBHsABfXjAAEcGCQAJgMABfYzAHm39gcABfZ3AHm4LFsABfawuoyfA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AmqJkWADwABKn48eaom5YAPAAEqfkbQAAAEDieSKDQAAAAEBAYnpAAAAgh1gA8AATbkAAGADwABK2AE+AUqJ9gEcigOAif3AHnlRgowBAAEuAMAATdIGwABHqoCtihKKZYqhAwCCjAJqihNgA8AASp+PHmqKO2ADwABKn5G0AAABA4pmiqEAAAABAQGKawAAAIIdYAPAAE25AABgA8AAStgBPgFKingBHIp/LqNGwABGOQEAARyKkoCKjMAeebiF7wAAAADAAE3fAMAAR5UGwABHlYCtiqaK04sJAASjRsAARjkCaoqnYAPAAEqfjx5qAGADlAjAAFrnAAABA4rfiwkAAAABAQGK5wAAAIIdYAPAAEtQAABgA8AAStgABsAAR6uArYsOi2GLoQMAgV4CaosPYAPAAEqfjx5qizdgA8AASp+RtAAAAQOLY4uhAAAAAQEBi2gAAACCHWADwABNuQAAYAPAAErYAT4BSot1ASIci4IugIwBAAGAi4XAHnp/AMAAR6gBHIuVLoKMAQABgIuXwB56fwDAAEeqBsAAR6yArYumi/mMOQMAgVsCaounYAPAAEqfjx5qi89gA8AASp+RtAAAAQOL+4w5AAAAAQEBjAAAAACCHWADwABNuQAAYAPAAErYAT4BSowNASIcjBougIwBAAGAjB3AHnr9AMAAR6gBHIwtLoC7AQABgIwvwB56/QDAAEepBsAAR5aArYw+jEWMmgAAo0jAAEY5AAAAAQOMVIyaAAAAAQEBjFkAAACCHWADwABMogAAYAPAAEtQAT4BSoxmARyMjB6MccAAR38BAAGAjIXAHntpAIDUwABGOQEAAS4AwABHjAbAAEeXgK2Mn4ymjPsAAKNJwABGOQAAAAEDjLWM+wAAAAEBAYy6AAAAgh1gA8AATKIAAGADwABLUAE+AUqMxwEcjO0ejNLAAEd/AQABgIzmwB57zQCjN8AARjkBAAEuAMAAR40GwABHmICtjQCNPo2TAACjSsAARjkBao0BYAPAAEqfkREAAAEDjU2NkwAAAAEBAY1SAAAAgh1gA8AATKIAAGADwABLUAE+AUqNXwEcjYUejWrAAEd/AQABgI1+wB58PACi08AARjkBAAEuAMAAR44GwABHmYCtjZiNnI38AACjS8AARjkAAAABA42wjfwAAAABAQGNtQAAAIIdYAPAAEyiAABg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AaQFAAAggh1gA8AATbkAAGADwABMogE+AUmkQxykTC6AuwEAAYCkTsAeisEAwABHqT4BSqRdAWqkZGADwABMooZySaR1HKR+LoKMAQABgKSAwB6KwQDAAEeqPgFKpI8BaqSWYAPAAEyiFEmkqhyksy6AjAEAAYCktsAeisEAwABHqD4BSaTFHKTOLoCMAQABKAAAAAAAAAAAAMAAR6g+BE6k5aT0AACjaGADwABK2AEWpPYujH/AAEeETqUPpR8AAKNpYAPAAErYARalJ4ClIcAeisGMf8AATelJpTscpU6BpT/AHothgIwBAAGCpVHAHot7AMAATfw+AUqlbgFqpXVgA8AATKIaP0qljgEjgaWVwB6LYWqlpmADwABMooZyaqWtYAPAAEyiFAFgA8AATKJJpcMlpc0AgKXHwB6KwWADwABMoj4DSacHIhynJGqnDGADwABMosAAW6iBWwEAARSnJ8AeisEAAWADwABMogDAAE3RABynRBSnPsAeisEAAWADwABMooFbAQABaqdHYAPAAEyiwABbrADAAE3RPgFKp20Baqd0YAPAAEyiGj9Jp8Zqp8pgA8AAStiD+z4BSaniHKnrLoFeAQABaqnuYAPAAEtQwABbsADAAEerPgFKqhMBaqoaYAPAAEyiFD8/SqpBARyqUByqSC6bnQAAAADAAEe3opMBAAEUqlrAHorBAAFgA8AATKIAwABNxz4BSqp5AWqqgGADwABMohpJqpoWqp4ujGfAAEeGPgFKqq0BIxaquoCqtMAeisGMZ8AATehqqsJgA8AATKIaaqrKYAPAAEyiFAFgA8AATKI+AUqq/QFqqwRgA8AATKKGcgAAHnHBAB5yDQAecj8AHnJ1AB5y7wAec0AAHnO6AB50CwAedIUAHnTWAB51OAAedYcAHnYBAB52UgAedrQAHncFAB53ZwAed6sAHnfqAB54fQAeeMwAHnkbAB55ggAeefoAHnpJAB56xwAee0UAHnupAB58DQAefHwAHnzgAB59RAAefagAHn3sAB5+KQAefmYAHn6jAB5+5wAef2sAHn/3AB6APgAegIUAHoDMAB6BEwAegVIAHoGRAB6B0AAegg8AHoN8AB6DuQAeg+gAHoQeAB6FzwAehy0AHodxAB6I3gAeiSIAHopdAB6KoQAejT0AAAA7AsAAR74SglSCWolDA6NtAAABYAPAAEujAAFgA8AAS7AFBMAAR8ESiNyI7AmjbsAARjkAYAPAAE6JAATAAEfCEoj9iQEJo2/AAEY5AGADwABOiQAEwABHwxKJD4kUCaNwwABGOQBgA8AATKIABMAAR8QSiSKJKQmjccAARjkAYAPAAEyiAATAAEfFEok6iUEJgSIAYAPAAE3vAAEFwABH0RKCloKygxoAkY/AAEY5AWqCl2ADwABKnwMDgsmDGgAAAAUFBYLWAAAEo25gA8AATokAgu0AAASjb2ADwABOiQCC+AAABKNwYAPAAEyiAIMEAAAEo3FgA8AATKIAgxIAAASBImADwABN7wAAYAPAAEe+AT8GCAHAAEfBgADAHo72CAHAAEfCgQDAHo8ECAHAAEfDggDAHo8SCAHAAEfEgwDAHo8gCAHAAEfFhADAHo8uCQGCssAAS68AAAAABQbAAEfIEoP2hCGEnQABo3LAAEY5AWqD92ADwABKn4KlAAABA4QqhJ0AAAADAwOELwAAAKNzYAPAAEyiAIRDAAAAo3RgA8AATKIAhFgAAACBImADwABN7wAAWwE+AT0ehGfAAEfJAwADgIRzwB6PvYGEg8Aej8uChJHAHo/ZAAbAAEfJEoSihKmFEQAFo3XAAEY5AWoAYAOUCMAAW7wAAAEDhLSFEQAAAAMDA4S5AAAAo3NgA8AATKIAhM0AAACjdGADwABMogCE4gAAAIEiYAPAAE3vAABbAAbAAEfKEoUWhUGGcAABo3fAAEY5AWqFF2ADwABKn4KlAAABA4VThnAAAAABAQGFVAAAAKN4WwAAWwE+BEmFZSIehWnAAEZ1AgACgIVzwB6QlSkAAR6Fh8AARnUCAAKAhZHAHpCVKgA+AUqFrAGAhbPAHpCVP0mFyCWF1gCAhczAHpCVYAPAAEgIPgFKhesBHIYIJoX9ABSF88AekJUAAWADwABICFtuAAAAAAA/SYYWJYYkAICGGsAekJVgA8AATJg+AT2IhjnAHpCVHIZOgIZFwB6QlW4AAAAAAD9KhlwBgIZjwB6QlQbAAEfOEoZ1hoCHFgEAo3nAAEY5AAAAAQOGj4cWAAAAAAAAAGADwABOiQE+A0mGlRyGoRaGmS6BIsAAR8WAjAEAASsAwABN/EqGqgEno3o/SYbFJYbRABaGyS6BIsAAR8VgA8AATolKhtwBJobcARaG4y6BIsAAR8VgA8AATok/SobwAR6G/cAAS6gBAAEWhwougSLAAEfFAAbAAEfLEocbhyKIygAAgO8AAAABA4cqiMoAAAAAAAAAYAPAAE6JAT4ESYczHIc8Foc3LqNvwABGOcAAR8KAjAEAASsAwABOmD4CSYdNHIdZFodRLoEiwABHxYCMAQABKwDAAE38SodiATWHaQAAAQBgA8AATokBFodpLqNuwABGOcAAR8EjHIdpgIdpwB6SUYCMAQABKwDAAE6YKxyHe4CHacAeklGjewAAAADAAE6gAWADwABOiT9Kh4kBJIfABCeA8TWHlAAAAQBgA8AATokBFoeULqNuwABGOcAAR8EjHIeUgIeUwB6Sq4CMAQABKwDAAE6YKxyHpoCHlMAekqujewAAAADAAE6gAWADwABOiSeN3haHsS6jecAARjnAAEfOP06H0IfbAACjfGADwABOiQEnAEmH5RyH8RaH6S6jccAARjnAAEfEgowBAAGTAMAATdI+AT2IiDPAHpMLJIhPAiejfRaIRy6jccAARjnAAEfEP0qIWwEkiFsKJ4DxFohlLqNvwABGOcAAR8Ino34WiIQuo3DAAEY5wABHw4CIisAekwsngSQngPEWiKMuo27AAEY5wABHwSeN3haIty6jecAARjnAAEfOAAAej48AHpANAB6QZwAekU4AHpHnAB6TsQAAAAUCwABH0hKJRolMis4Do38AAAFgA8AAR74AAWADwABLtwABBcAAR9kSiYiJpIotAJGPwABGOQFqiYlgA8AASp8DA4m2ii0AAAAEBASJvgAAAI11YAPAAE6JAInHAAAAXWADwABMogCJ0QAAAIyhYAPAAEyiAIngAAAAo4BgA8AATokAAGADwABH0gE/AQkAifjAAEfRBQAFJ6OBgIoRwB6UGYGKFsAelCeCihzAHpQ0g4okwB6UQgACBsAAR9USijKKOYqlAAWjcsAARjkBagBgA5QIwABbygAAAQOKQoqlAAAABAQEikcAAACMwmADwABMogCKWAAAAKODYAPAAE3vAIppAAAAo4RgA8AASm0AioAAAACjhWADwABOiQAAWwAGwABH1hKKqoqxiswAAIDvAAAAAQOKuYrMAAAAAAAAAGADwABOiQFKir8BJoq/ARiKxYEiwABHxWADwABOiQAAHpSGAB6U7gAelSwAAAACAsAAR9oSitGK14ydA6OGAAABYAPAAEujAAFgA8AAS7oEBMAAR90SjFWMWQmjb8AARjkAYAPAAE6JAATAAEfeEoxnjGwJo3DAAEY5AGADwABMogAEwABH3xKMeoyBCaNxwABGOQBgA8AATKIABMAAR+ASjJKMmwmjh8AARjkAYAPAAE6JAAEFwABH5RKLCYsli2wAkY/AAEY5AWqLCmADwABKnwMDizeLbAAAAAQEBIs9AAAEo29gA8AATokAi0gAAASjcGADwABMogCLVAAABKNxYAPAAEyiAItiAAAEo4dgA8AATokAAGADwABH2gE/BQgBwABH3YAAwB6V7AgBwABH3oEAwB6V+ggBwABH34IAwB6WCAgBwABH4IMAwB6WFgkBiyXAAEuvAAAAAAEGwABH4hKL2ovhi/gAAIDvAAAAAQOL6Yv4AAAAAAAAAGADwABOiQFKi+8BFovvLqOHwABGOcAAR+AAAB6WawAelqQAAAABAsAAR+YSjpKOmI8wg6OIAAABYAPAAE3vAAABBMAAR+kSjyqPLgmMj8AARjkAYAPAAE6JAAEFwABH7RKOq47NjuYBAAFqjqxgA8AASp8DA47bjuYAAAABAQGO4QAABIyPYAPAAE6JAABgA8AAR+YBPwIIAcAAR+mAAMAelwoJAY7NwABOBQAAAAABBsAAR+sSjuqO8Y8ZAACA7wAAAAEDjvmPGQAAAAAAAABgA8AATokBSo7/ASSPGQMno4kWjxIujI/AAEY5wABH6SeA8QAAHpc7AB6XfgAAAAECwABH7hLAAEo3wABKV8AAStoDo4oBasAASjhgA8AASp8DAAFgA8AAS6MAAAEEwABH8RLAAEqIwABKkQmjh8AARjkAYAPAAE6JAAEFwABH9RLAAEqVwABKlcAASrYAAAADwABKpsAASrYAAAABAQHAAEqsAAAEo4dgA8AATokAAGADwABH7gE/AggBwABH8YAAwB6X+gkBwABKlcAAS68AAAAAAQbAAEfzEsAASrrAAErBwABK2AAAgO8AAAABA8AASsnAAErYAAAAAAAAAGADwABOiQFKwABKzwEWwABKzy6jh8AARjnAAEfxAAAemC8AHph2AAAAAQLAAEf2EsAAS8XAAEvLwABMhQOjiwAAAWADwABLowAAAQTAAEf5EsAATAvAAEwQCYb9wABGOQBgA8AATokAAQXAAEf9EsAATBXAAEwVwABMQQAAAAPAAEw1wABMQQAAAAEBAcAATDsAAASG/WADwABOiQAAYAPAAEf2AT8CCAHAAEf5gADAHpjmCQHAAEwVwABLrwAAAAABBsAAR/sSwABMRsAATEbAAEyDAACA7wAAAAEDwABMTsAATIMAAAAAAAAAYAPAAE6JAUrAAExUASTAAEyDAyejjBbAAExkLob9wABGOcAAR/kno40AAB6ZGwAemW4AAAABAsAAR/4SwABMiMAATI7AAE3KA6OOAAABYAPAAEujAAFgA8AATGcBBMAASAESwABNw8AATcgJhv3AAEY5AGADwABOiQABBcAASAcSwABM4MAATODAAE0EAAAAA8AATPjAAE0EAAAAAQEBwABM/gAABIb9YAPAAE6JAABgA8AAR/4BPwIIAcAASAGAAMAemeQJAcAATODAAEuvAAAAAAIGwABIBBLAAE0JwABNMcAATXYAAaNywABGOQFqwABNCmADwABKnwMAAAEDwABNOsAATXYAAAABAQHAAE1CAAAAhk1gA8AATokAAFwBPgE9MMAATU4fwABNVMAASAcBAAGAwABNbcAemlIABsAASAUSwABNe8AATYLAAE2xAACA7wAAAAEDwABNisAATbEAAAAAAAAAYAPAAE6JAUrAAE2QASTAAE2xAieKjBbAAE2rLob9wABGOcAASAEAAB6aGQAemoMAHprTAAAAAgLAAEgIgK6BCYEph3QDo48BaoEKYAPAAEqfAwABYAPAAE3vAAFgA8AATJgGBMAASAuAroSQhKwYo5DAAEY5AWqEcWADwABKnwNbASsEwABIDICuhNCE6BijkcAARjkBaoSxYAPAAEqfA1sBKwTAAEgNgK6FDIUjGKOSwABGOQFqhO1gA8AASp8DWwErBMAASA6AroVHhVAYjPDAAEY5AWqFKGADwABKnwNbASsEwABID4CuhXSFfBiXTMAARjkBaoVVYAPAAEqfA1sBKwTAAEgQgK6HZodyGKOTwABGOQFqh0dgA8AASp8DWwErAAYGwABIE4CugUqBUoGKBAGLX8AARjkAAAABA4FqgYoAAAAAAAAAYAPAAEgIAT4BPTCBcyeLYAbAAEgVgK6Bj4GdgcUDBICMAWoAYAOUCMAAW9gAAAEDgZ+BxQAAAAEBAYGnAAAAgh1gA8AATe8AAGADwABK2AAGwABIGoCugcqB0oIPAQCCHAAAAAEDgduCDwAAAAAAAABgA8AATKIBPgI9IxyB5xaB4S6jk8AARjnAAEgQgIwBAAErAMAATfwXgeEuo5PAAEY5HIHrLqOVwABGOQAAAADAAEgYwABIECsBW0qB/wEmgf8FFoIGLqOTwABGOcAASBBgA8AATKIGwABIG4CughSCIYItAQBuAAAAAQOCJoItAAAAAAAAAGADwABICAFKgikBLgbAAEgXgK6CMoI7gloABIURwABGOQFqAGADlAjAAFvmAAABA4JBgloAAAAAAAAAYAPAAEgIAAbAAEgYgK6CX4Jjgo4ABKOVwABGOQFqAGADlAjAAFv0AAABA4Jvgo4AAAAAAAAAYAPAAEyiAAAAHpvSAB6cBwAenEcAHpzOAB6c+gAenTAAHp1mAAAABgLAAEgcgK+BCYEprPADo5gBaoEKYAPAAEqfAwEAAAQhYAPAAE3vAVsBXQOJ4wFfAwAAAAABBMAASB+Ar5qemrcFk7TAAEY5AF0DwABGjQFbAR6ar8AARo8BAVsBkwAAJwbAAEghgK+BUoFXgrUAAIR0AAAAAQOBXYK1AAAAAgICgWIAAACB3WADwABMogCBawAAIIG8XwMAAAAAXAE+BkmBeiIcgYWAgX/AHp4HgLsBAAGTAMAATdABHIGUgIGOwB6eB4KMAQABFoGWLoHIwABIRQDAAE3SPgE9MIGnH4GxwABL6AMAA4CBwsAengeTFoHMLoHIwABIRQA/SYHfHIHpgIHjwB6eB4CMAQABFoHxLoHIwABIRQDAAE3GPgI9HIIBLoCCAQABgYIFwB6eFQDAAEgzSoIVAD9OgiuCNQAAg3RgA8AATKIBFoI8LoHIwABIRT0Xgk0ugcgcglMWgk0ugcjAAEhFgQ0BAAGUAMAATcjAAEhNPR6CYZPqBQAFLoCCbMAengcuHIJ/gIJ5wB6eB4ENAQABlADAAE3IHIKOgoKEwB6ewYEGAQABgIKQwB6eBwDAAE3JAD0cgqAugQwCAAKAgqHAHp4HgYKqwB6eFQDAAEgyBsAASCKAr4K6gryDrQAAhHUAAAABA4LEg60AAAABAQGCyQAAAIHdYAPAAEyiAABfAwAAAT4FToLaguEAAIDmXwMAAAEcgucugtEBAAGAgujAHp99AMAASDFOgviDAgAAg3VgA8AATKIBHIMQFoMJLoHIwABIRYEGAQABlADAAE3JSYMZHIMjgIMdwB6ffYC7AQABgoMlwB6ftwDAAE3QPgE9HoM+k+oFAAUuHINPgINJwB6ffYENAQABlADAAE3ILoCDWsAen30cg2uCg2HAHp+3gQYBAAGAg23AHp99AMAATckAPz0Xg4QugciCg43AHp+3wABITUqDnAGBg6PAHp+UBsAASCOAr4Oyg7eEaAAAg2wAAAABA4O9hGgAAAABAQGDxQAAAIG8YAPAAE3vAABgA8AAStgBPgJFg9QBg92D3wAAg2ZgA8AATKIBkwEcg+aBg+TAHqCbgLsBAAEWg+0ugcjAAEhFAMAATdABiYP1wB6gmxyD9oGD9cAeoJuBDQEAAZQAwABNyD4BSYQCHIQOHIQKLoLRAQABgYQLwB6gmwDAAEgxgIwBAAGAhBHAHqB/AMAATfw+Aj0chCQuhHUBAAGBhC3AHqCbAMAASCJKhDkBKT9KhFgBKgbAAEgkgK+EbYRyhz0AAIR2AAAAAQOEe4c9AAAAAgIChIAAAACB3WADwABMogCEkwAAIIQiXQPAAE0EAV8DAAAAAFwBPgZJhKMiHIStgISnwB6hWIC7AQABkwDAAE3QARyEuoCEtMAeoViCjAEAARaEvC6ByMAASEUAwABN0j4BPTCEzB+E1sAAS+gDAAOAhOfAHqFYkxaE8S6ByMAASEUAP0mFPiIiISWFSwCBhULAHqFmXQPAAE1GAVsAISWFYACBhVfAHqFmXQPAAE46AVsAISWFdACBhWvAHqFmXQOVuwFbPgE9iYWRwB6hZhyFpYGFnMAeoWaBygAAAADAAE0aP06FvYXNAACEd2ADwABMogEWhdiBhc/AHqFmgcjAAE0nPReGwi6ByByGyRaGwi6ByMAASEWBDQEAAYKGzMAeojsAwABNyMAASE09HIbhLoRYBAAEHIbwgIbqwB6hWIENAQABgobywB6iOwDAAE3IFocILoHIwABIRS6AhxbAHqFYAIocPRyHIi6EeAIAAoCHKcAeoViBhzDAHqFmAMAASCUGwABIJYCvh0KHR4gpAACEeAAAAAEDh02IKQAAAAICAodSAAAAgd1gA8AATKIAh2UAACCEIl0DwABNBAFfAwAAAABcAT4BSYd1JYeCAIGHecAeowhdA8AATUYBWz4BPRyHky6EWAMAA4CHnMAeovoch6mAh6PAHqL6gQ0BAAEWh7SBh6vAHqMIgcjAAE0nAMAATciBh7zAHqMIAIocPgE+Ak6H7AAAAIEHXQPAAE0/AV8DAAABFofsHgCTzQEBXQPAAE0EAV8DAAABgYfswB6jCACBCMAATSZFAAABHIfsggDAHqN8gQkAAAAAwABNQQA+Ak6H4QAAAIG8XwMAAAEWh/aCAMAeo3yBCsAATUM+AT0ciAQugQwCAAI1iAUAAAEAYAPAAEyiAYCIBcAeovo1iAoAAAEAYAPAAEyiAYiICsAeovociAqEiAXAHqP1gQ0BAAGUAMAATciEiAXAHqP1g4gQwB6jzQDAAEgyBsAASCaAr4guiDOI+gAAhGQAAAABA4g+iPoAAAACAgKIQwAAAG1gA8AATKIAiE4AAACEVGADwABMogAAXAE+Az0eiGTAAEvfAwADgIh0wB6kZoGIe8AepHMWiIUugcjAAEhFAD0eiJiT6gUABS6BiKPAHqRzLoCIrsAepGYciMEWiLougcjAAEhFgQYBAAGBiMPAHqRzAMAATckAPReI0i6ByByI5xaI4C6ByMAASEWBBgEAARyI7oGI6sAepHOBBgEAAYCI8MAepGYAwABNyQDAAE3JwABITQbAAEgngK+I/4kHioMAAIRhAAAAAQOJDoqDAAAAAgECiRMAAABtYAPAAEyiAIkfAAAAhFRgA8AATKIBagBgAcAATawCAF0DwABNRgFfAwAAAT4IPYmJK8AepUweiTzAAEvfAwADgIlMwB6lP4GJU8AepUwWiV0ugcjAAEhFAE6Jbol1AACByGADwABMogEciXuBiXfAHqVMgQYBAAGAiX3AHqU/AMAATclJiYgciZOCiYzAHqWegIwBAAGTAMAATcZKiZkBMYmjXwMAAAA/TomwibUAAIRGXQPAAE1GAVsBHom7wABGjwEBWwGCicHAHqWeAEWJzgGJ14nZAACDZmADwABMogGTARyJ4ISJ3sAephaAuwEAAYKJ4sAepZ4AwABN0AGMierAHqYWHInrhInqwB6mFoENAQABlADAAE3IPgE9HIn7g4n3wB6l7oEMAgAChIn8wB6mFhyKBS6C0QEAARyKDICKBsAepT+BDQEAAYSKDsAephYAwABNyADAAEgxAMAATVZOiiCKJwAAgOZdA8AASBwBXwMAAAEeii3AAEhBAQFfAwAAASaKSAGDikjAHqXuXQPAAEaNAVsAPRyKWoSKU8AepqeiLcAARjkBAAGCimXAHqWeAMAASClKinIBhIp5wB6mpwbAAEg+gK+KiIqQi1sEAQAAAAABA4qdi1sAAAEAAAQhYAPAAE3vAVsBAQGKogAAAIHIYAPAAEyiAABdA8AASBwBXwMBAAE+BE6KtIq5AAA7XQPAAEaNAVsBHoq7wABILAEAAYCKycAepzMAToraiuEAAIDmXQPAAEgcAV8DAQABHornwABIQQEBXwMBAAGBiwLAHqdRAEmLDRyLGICLEcAepzOCjAEAAZMAwABN0j4BPRyLLIKLJcAep3SiLcAARjkBAAGAizfAHqczAMAASCk/SotKAYKLUcAep3QGwABIP4Cvi2CLaIvuBAGjmQAAAAEDi4KL7gAAAQAABCFgA8AATe8BWwEBAYuHAAAAhLhgA8AATKIAAF0DwABIHAFfAwEAAT4CToubi6AAADtdA8AARo0BWwEei6LAAEgsAQABgIuwwB6oEABKi78BHovKwABIQQEBXwMBAAGBi+XAHqguAAbAAEhBgK+MVoxejKAEBaOawABGOQJqi/RgA8AASp/AAFwYagBgA5QIwABcMAAAAQOMdYygAAABAAAEIWADwABN7wFbAQEBjHwAAAA7XQPAAEaNAVsAAF0DwABIHAFfAwEAAAbAAEhEgK+MpYz/jSoBBJpAwABGOQNqjKZgA8AASp+DcmqM2mADwABKn4K6agBgA5QIwABcPgAAAQONCY0qAAAAAAAAAGADwABMogAGwABIRYCvjS+NiY2vAQSByANqjTBgA8AASp+DcmqNZGADwABKn4K6agBgA5QIwABcTAAAAQONkI2vAAAAAAAAAGADwABMogAGwABITYCvjbSNvZDFAgCByAAAAAEDjcOQxQAAAAEBAY3IAAAAo55gA8AATKIAAFwBPgZOjd6N6wAAo59gA8AATKIBFo3tLppAwABGOcAASEROjgCODQAAo6BgA8AATKIBgI4PwB6pgUmOHxyOMIKOI8AeqbOCjAEAAYGOMsAeqZUAwABN0j4DPRyOSC6Ev8AARjkBAAGCjk7AHqmzAMAASC49HI5jLqItwABGOQEAAYCObsAeqYEAwABIKUqOgQA/To+rj70AAaOhYAPAAErYARyP4xyP1YKPyMAeqbOBDQEAAYCP18AeqYEAwABNyIC7AQABHI/tFo/mLoHIwABIRYEGAQABgI/vwB6pgQDAAE3JAMAATdBJkACDkATAHqojPgE9HJAfLqOiwABGOQIAAoKQJ8AeqbOAkDXAHqmBAMAASC8+AUWQVQGQXpBgAACDZmADwABMogGAkGLAHqmBARyQcISQbsAeqquAuwEAARaQci6ByMAASEUAwABN0AGMkHrAHqqrHJB7hJB6wB6qq4ENAQABlADAAE3IPgE9HJCNLoEMAgAChJCOwB6qqysAwABIMj0ckKsuoi3AAEY5AQABgJC2wB6pgQDAAEgpBsAASCmAr5DKkM+RCQAEoi3AAEY5AWoAYAOUCMAAXFoAAAEDkNmRCQAAAAEBAZDeAAAAo55gA8AATKIAAFwABsAASCqAr5EOkRORRgAEo6TAAEY5AWoAYAOUCMAAXGgAAAEDkRuRRgAAAAEBAZEiAAAAj05dA8AARo0BWwAAXAAGwABIMYCvkUuRVpGEAwSC0QFqAGADlAjAAFx2AAABA5FYkYQAAAABAQGRXQAAAIHdYAPAAEyiAABfAwAAAAbAAEgygK+RiZGXkdIDAIEMAAAAAQORmpHSAAAAAgICkZ8AAACB3WADwABMogCRqAAAICJfAwAAAABcAT4BPRyRtS6iJcAARjkCAAKAkcHAHqwOgZHIwB6sHADAAEgrBsAASCuAr5HXkdySHAAEoiXAAEY5AWoAYAOUCMAAXIQAAAEDkeeSHAAAAAICApHsAAAAgd1gA8AATKIAkfUAACAiXwMAAAAAXAAGwABIM4CvkiGSaJMCAACAggJqkiJgA8AASp+CpWqSRmADwABKn4K6AAABA5JrkwIAAAABAQGSbgAAICJfAwAAAABcAT4ETpJ/koMAAI4fYAPAAEyiARaShS6ByMAASEVJkpEckpmBkpXAHqzegIwBAAEWkpwumkDAAEY5wABIRADAAE3GPgE9HJKvLoS/wABGOQEAARyStS6jqMAARjkBAAGBksPAHqzeAMAASC0AwABILj89HJLULqItwABGOQEAARyS44GS38AerN6BDQEAAZQAwABNyADAAEgpPRyS8S6BDAIAAoGS8sAerN6AkvnAHqzNAMAASDIGwABINICvkweTDJg/AACDawAAAAEDkxKYPwAAAAEBAZMfAAAghCJdA8AATQQBXwMAAAAAXAE+B06TM5M3AACOH2ADwABMogEWkzkugcjAAEhFTpNLk08AAYsgYAPAAEyiAR6TWZP3AQABgJNfwB6tsABOk3STfQABo6lgA8AAStgBIiIck4SCk4DAHq3jgIwBAAEak4+T7wDAAE3GARyTqYKTpcAereOAjAEAARqTtJPxAMAATcYBHJPcgpPYwB6t44CMAQABGpPnk/IAwABNxkmT/yKDlAPAHq4DASWUGQCAlBDAHq2wXQOVmAFbPgVOlEKURgAAo6pgA8AATKIBFpRILppAwABGOcAASEROlIqUkgAAo6tgA8AATKIBFpSdgJSUwB6tsIHIwABNJ06Ur5S2AACjrGADwABMogEclLyBlLjAHq3JgQ0BAAGFlL7AHq6fAMAATchJlM0clNiGlNHAHq6/gowBAAGElNrAHq6BAMAATdI+AkSU6T4BPYyU+MAeroEclP4uo6jAAEY5AQABhJUMwB6ugQDAAEgtHJUqhpUjwB6uv4KMAQABhJUswB6ugQDAAE3SPRyVOi6Ev8AARjkBAAGElUDAHq6BAMAASC4/SZVUg5VYwB6uAz4FSZVsHpVwwABGdQIAAoCVesAerbAuAD4BPTCVlx+VocAATEUBAAEuAD89HJXbLqItwABGOQEAAYaV5sAerr8AwABIKU6WCZYYAAGiLF0DieMBXwMAAAEmlgkBgJYawB6tsF0DieMBXwMAAEWWLAGWNZY3AACDZmADwABMogGTARyWPhSWPMAer98IAIC7AQABhZZAwB6unwDAAE3QARWWScAer98IHJZKFJZJwB6v3wgAgQ0BAAGUAMAATcg+AT0cll4ugQwCAAI1ll8AAAEAYAPAAEyiAYGWX8Aerck1lmIAAAEAYAPAAEyiAYmWYsAerckclmIUll/AHrA6CQCBDQEAAZQAwABNyBSWX8AesDoJAByWdoeWaMAer7WC0QEAARSWd8Aer98IAADAAE1VAMAASDJKlo0APz9OlrCWswAAhBBdA8AATT8BWwEWlr6AlrXAHq2wgQjAAE0mSZbMIRyW1ISW0cAesKyBCQAAAADAAE1BSpbgAD9Eluw+AkOW9xyXAoGW/sAercmAuwEAARaXBC6aQMAARjnAAEhEAMAATdA+Bk6XHZckAACjrGADwABMogEclyqBlybAHq3JgQ0BAAGUAMAATcg9HJc8LqItwABGOQEAAYWXR8AesRcAwABIKT0cl1wugQwCAAKBl13AHq3JJpdnBRaXZ4SXZMAesKyBCsAATUNfAwAAAMAASDJJl3ghHJeAhJd9wB6wrIEJAAAAAMAATUFKl4wAP0mXnCEcl6wWl6UugcjAAEhFgIwBAAGFl6/AHrEXAMAATcY9MJe3H5fBwABMRQEAAS4APz2Jl+zAHq3JhZfywB6xFz0cmAguhL/AAEY5AQABHJgOLqOowABGOQEAARaYHC6aQMAARjnAAEhEAMAASC0AwABILikGwABINYCvmESYZJjRAACELwFqmEVgA8AASp+CugAAAQOYbpjRAAAAAAAAAF8DAAABPgROmHuYfwAAjh9gA8AATKIBHJiIFpiBLoHIwABIRYEGAQABlADAAE3JTpiVmJoAAKOtXwMAAAEcmKAugtEBAAGAmKHAHrJKAMAASDE9F5iwLoHIgJi5wB6ySsAASE1KmMIBgZjJwB6ycgbAAEhGgK+Y1pjcmTYBAIHCAAAAAQOY4pk2AAAAAAAAAF8DAAABPgJJmOgcmPMWmOwugcjAAEhFgowBAAGTAMAATdJKmPgBHJkDLoLRAQABkwDAAEgxPz0wmQwemSeW/AAAAAAGwABIR4CvmTuZQZmjAQCB1QAAAAEDmUaZowAAAAAAAABfAwAAAT4CSZlMHJlXFplQLoHIwABIRYKMAQABkwDAAE3SSplcARyZZy6C0QEAARyZbxaZaC6ByMAASEWBBgEAAZQAwABNyQDAAEgxPz0wmXkemZSW/AAAAAAGwABISICvmaiZrppFAQCB1wAAAAEDmbWaRQAAAAAAAABfAwAAAT4DSZm7HJnGFpm/LoHIwABIRYCMAQABlADAAE3GSpnMARyZ1y6C0QEAAZMAwABIMT9JmeAcmesWmeQugcjAAEhFgIwBAAGTAMAATcY9MJnxHpoMlvwAAAAAPz0wmh0emjiW/QAAAAAGwABILICvmryayZvkAAGjrsAARjkAAAABA5rWm+QAAAABAQGa2wAAAIS4YAPAAEyiAABdA8AARo0BWwE+Akma6xya+ICa78AetEGAjAEAAZMAwABNxj4BSpsxARqbOMAASB8/SpvCAR6bzcAARo8BAVsBHJvcgJvTwB60QYCmAQABlADAAEy7AAbAAEgtgK+cFZwZnFIAAKOowABGOQAAAAEDnCacUgAAAAEBAZwrAAAAo59gA8AATKIAAGADwABMogFKnDwBHJxPHJxKgJw9wB60yoPGAQABlQDAAE3KgKYBAAGWAMAATLsGwABILoCvnFecXJ6RAACEv8AARjkAAAABA5xhnpEAAAABAQGcZgAAAKOgYAPAAEyiAABcAT4DTpx+nIYAAKOvXQPAAEaNAVsBHpyIwABILAEAAYCclsAetSsASZ4RHJ4cFp4VLoHIwABIRYKMAQABkwDAAE3SPgFFnikBnjKeNAAAg2ZgA8AATKIBkwEcnjuCnjnAHrWDgLsBAAEWnj0ugcjAAEhFAMAATdABip5FwB61gxyeRoKeRcAetYOBDQEAAZQAwABNyD4BPRyeW4GeVMAetT+BDAIAAoKeXMAetYMcnmUugtEBAAGCnmbAHrWDAMAASDEAwABGkj89HJ58LqOkwABGOQEAAYGehcAetT8AwABIKgbAAEgvgK+elp6bn9AAAKOiwABGOQAAAAEDnqKf0AAAAAICAp6nAAAAo6BgA8AATKIAnrkAAACjnmADwABMogAAXAE+A06ez57XAACjr10DwABGjQFbAR6e2cAASCwBAAGAnufAHrZBAEmfSByfV4GfTMAetk+CjAEAAZMAwABN0j4BRZ9kAZ9tn28AAINmYAPAAEyiAZMBHJ92g590wB62pIC7AQABgZ94wB62TwDAAE3QAYufhMAetqQcn4WDn4TAHrakgQ0BAAGUAMAATcg+AT0cn5qCn5PAHrZjgQwCAAKDn5vAHrakHJ+kLoLRAQABg5+lwB62pADAAEgxAMAARpI/PRyfuy6jpMAARjkBAAGCn8TAHrZjAMAASCoGwABINoCvn++gEqDbAACBEgFqn/BgA8AASp+CugAAAQOgGaDbAAAAAQEBoBoAAABQYQMBXwMAAFsAAFwBPgJOoDKgQAAAo7BgA8AATKIBFqBCLoHIwABIRUWgTgGgV6BZAACDZmADwABMogGTARygYIKgXsAet5iAuwEAARagYi6ByMAASEUAwABN0AGKoGrAHreYHKBrgqBqwB63mIENAQABlADAAE3IPgI9HKB4gKB3wB63Zm4BAAEcoH0ugtEBAAGCoH7AHreYAMAASDEAAEmgiSEcoJQWoI0ugcjAAEhFgIwBAAGBoJfAHrd7AMAATcY9MKCmH6CwwABMRQEAAS4APwbAAEg3gK+g4KDnqJYAAIG/AAAAAQOg66iWAAAAAQABoPQAAACBwGADwABOiQFqoQBgA8AAToliAGADwABOiQE+CE6hFaEcAAGByGADwABMogEWoSMugcjAAEhFSaEvHKE6gaEzwB64goCMAQABkwDAAE3GSqFAAScAP0mhTxyhWoGhU8AeuIKAjAEAAZQAwABNxkqhYAEkoXMBHKFuLoLRAQABkwDAAEgxP0mheRahh4ChfcAeuF+DYsAATpBKoZMBHKGaLqOxwABGOQEAAYChrcAeuF8AwABIMD9OocGhwwAAg2ZgA8AATKIBk06h0KHeAACjsmADwABMogGTQ6HnHKHwgqHuwB65HIC7AQABgaHywB64ggDAAE3QQT4LTqIIohAAAYG8XwMAAAEcohYugtEBAAGCohfAHrkcAMAASDFJolAlolwAhKJUwB65X2ADwABKCD4DPYuiecAeuS0cooeDonnAHrktgQ0BAAEWopIUoorAHrlfBAFfAwABYAPAAEoIgcjAAEoDAMAATcg9iqKiwB65HByio4KiosAeuRyBDQEAAZQAwABNyEKi6AA/TqOdo7gAAaOzYAPAAEyiAYKjusAeuRxOo8ej0wAAo7RfAwAAAYSj1cAeuV9Do+Qlo/cAhqPrwB66CWADwABOiT4DPYqkDMAeuRwcpA2CpAzAHrkcgQ0BAAGUAMAATchJpBkcpB+CpB3AHrkcgIwBAAGBpCLAHriCAMAATcY+AUqkNgEepEnAAEncAwADLpOBpGXAHriCAD89jqSAwB66CRykki6C0QEAAYKkk8AeuRwAwABIMU6k9KT5AAGERl0DwABGjQFbAR6k/8AARo8BAVsBgaUFwB64ggBFpRQBpR2lJwAAo7VgA8AATKIBkwEcpTYUpSzAHrrPCACAuwEAAYKlOMAeuRwAwABN0AEVpTvAHrrPCBylRBSlO8Aeus8IAIENAQABlADAAE3IPgE9HKVWh6VSwB66p4EMAgACFKVXwB66zwgAHKVoLoLRAQABFKVpwB66zwgAAMAASDEAwABGkk6lw6XRAACjtmADwABMogEcpdWCpdPAHrkcgQYBAAGFpdfAHrnyAMAATclBQ6X5KT4HTqYdpisAAaO3YAPAAE6JASSmOwGGpi/AHroJPRWmRcAeu1UIHKZTFKZFwB67VQgAgKYBAAEcpoAepmuT9wEAARSmccAeu4cJAACAowEAARqmipPzAMAATLwAwABMuz0cpqmHpqXAHrqngQwCAAKCpqrAHrkcFKavwB67hwkAAMAARpI9i6bGwB65LRym1IOmxsAeuS2BDQEAARam5RSm18Aeu4cJAIHIwABOjQDAAE3IPYqm9cAeuRwcpvaCpvXAHrkcgQ0BAAGUAMAATchJpwIcpwiCpwbAHrkcgIwBAAGBpwvAHriCAMAATcZCpxMBPz2OpyLAHroJHKc0LoLRAQABgqc1wB65HADAAEgxSadHHKdZFKdLwB67VQgAgIwBAAGTAMAATcY+AUqnqwEmp6sFHqfBwABKGAIAAoenzMAeuqeDp9LAHrktAGADwABOiT9Kp/ABHqgDwABJ3AMAA4eoFsAeuqeTgagfwB64ggBKqF0BJqhdBR6oc8AAShgCAAIug6iEwB65LQBgA8AATokGwABIMICvqJuooqmgAACjscAARjkAAAABA6i0qaAAAAABAQGovAAAAIHAYAPAAE6JAABgA8AATokBPgROqNqo4QAAgcFgA8AATtMBH6jnwABO8gAAAAA9HKkCgaj7wB69VIHDAQABHKkMLoLRAQABkwDAAEgxAMAATudFqRYBqR+pIQAAg2ZgA8AATKIBlAEcqSiCqSbAHr2WgLsBAAEWqS8ugcjAAEhFAMAATdABiqk3wB69lhypOIKpN8AevZaBDQEAAZQAwABNyD4CPRypS4GpRMAevVSBwwEAAYCpUcAevTsAwABO5z0cqWqBqWPAHr1UgcMBAAEcqXQugtEBAAGCqXXAHr2WAMAASDEAwABO50qphAEcqZKBqYvAHr1UgO8AAAAAwABO7AbAAEg4gK+ppamnqdgAAIHcAAAAAQOpsKnYAAAAAQEBqbUAAACB3WADwABMogAAXwMAAAE+AUqpwgEcqc0ugtEBAAGAqc7AHr5iAMAASDEGwABISYCvqd2p5qoPAQCA4wAAAAEDqe6qDwAAAAAAAABgA8AAStgBPgFKqfQBHKoHFqoALoHIwABIRYCMAQABkwDAAE3GBsAASEqAr6oUqh2qMwEAg2IAAAABA6ooqjMAAAAAAAAAYAPAAErYAUqqKwEhFqosLoDjwABISQbAAEg5gK+qOKo9ql4AAIDnAAAAAQOqQqpeAAAAAAAAAFwBPgE9F6pQLoHIk8AASE0GwABIOoCvqmOqaqqTAACA7wAAAAEDqnKqkwAAAAAAAABgA8AATokBSqp4AR6qgYnlAQABLgAGwABIS4Cvqpiqxqr5AQCBCAFqqplgA8AASp+CugAAAQOqz6r5AAAAAAAAAF0DwABNPwFfAwAAAT4BSqrVAR+q4JXZAQFfAwAAAS4ABsAASDuAr6r+qwastAAAgcoAAAABA6sMrLQAAAABAAABqxMAAACED2ADwABK2AFqqx1gA8AAStiD+10DwABNRgFfAwAAAT4DTqsuqzUAAIHIYAPAAEyiARarPC6ByMAASEVJq0gcq1OBq0zAHsAKgowBAAGTAMAATdI+Bk6rZatqAACERl0DwABNRgFbASOAq2zAHr/iHqt7wABGjwEBWwGBq4HAHsAKAB6rj8AARo8BAV8DAAABgauYwB7ACgABXQPAAEaNAVtFq6cBq7CrsgAAg2ZgA8AATKIBkwEcq7mDq7fAHsCNgLsBAAGBq7vAHsAKAMAATdABi6vDwB7AjRyrxIOrw8AewI2BDQEAAZQAwABNyD4BPRyr1oKr0sAewD6BDAIAAoOr18AewI0cq+AugtEBAAGDq+HAHsCNAMAASDEAwABNVkmr8yGAq/jAHr/iSqwCASasAgGCrAnAHsA+XQPAAE1GAV8DAAA/TqwZrCAAAIDmXQPAAEgcAV8DAAABHqwmwABIQQEBXwMAAAEmrEEBgqxBwB7APl0DwABGjQFbAD0crFWDrE7AHsEwoi3AAEY5AQABgaxgwB7ACgDAAEgpSqxvAYOsdsAewTA/SqyIASOArI/AHr/iMaydXwMAAAAerKbAAEaPAQFfAwAAAZMAAV0DwABNRgFfAwAABsAASDyAr6y5rMCs7gAAgcsAAAABA6zFrO4AAAAAAAAAXQPAAE46AV8DAAABPgFKrM4BHqzZiWIBAV8DAAABLgAAAB6d5wAen10AHqBfAB6hOAAeotoAHqRGAB6lHwAepwgAHqfkAB6oagAeqM0AHqkZAB6pYQAeqzAAHqtvAB6rsAAeq+4AHqxNAB6slwAerZAAHrIWAB6ysQAesxUAHrOQAB60HQAetKYAHrUHAB62HQAetzsAHrg/AB69FwAevkIAHr6RAB6+1wAevw4AHr8/AB6/dQAev8EAHsHCAB7CAwAAACcCwABIToCwgbOB040Ig6O4AWqBtGADwABKnwMCAAAEg1pgA8AATe8BWwAABINdYAPAAE3vAVsBYAPAAE3vAAFdA8AATXgCXwMAAF8DAQABBMAASFGAsIIVgh0Jo7nAAEY5AF0DwABGogFbAAEFwABIbICwgiKCRIKYAZGPwABGOQFqgiNgA8AASp8DA4JZgpgAAAABAQGCaQAAAKO6XQPAAEaiAVsAAF0DwABITgJfAwAAXwMBAAE/AggAwABIUYCCi8Aewz4JAYJEwABOBQAAAAAWBsAASFOAsIKdgqmC2wAAgckAAAABA4K1gtsAAAIAAASD22ADwABN7wFbAAAEg9xgA8AATe8BWwAAAABdA8AATXgCXwMCAF8DAwABSoK7AR6Cv8AATYgBBF8DAABfAwEAXwMCAF8DAwABLgAGwABIVICwgt+C6oQ3AwCC0QAAAAEDguyENwAAAAEBAYL0AAAAgtJgA8AATe8AAF8DAQABPgJFg6MBg6yDrgAAg2ZgA8AATKIBkwEcg7WBg7PAHsQggLsBAAEcg8cWg8AWg7cuo7nAAEY5wABIUYHIwABGrYEGAQABlADAAE3JAMAATdABiYPMwB7EIByDzoGDzMAexCCBDQEAAZUAwABNyD4BSYPcHIPkgIPgwB7EBoCMAQABHIPvFoPnLqO5wABGOcAASFGC0QEAAYGD8MAexCAAwABGqADAAE38PgFKg/4BJoP+BRyEDRaEBS6jucAARjnAAEhRgtEBAAEchBCBhA7AHsQggQ0BAAGUAMAATcgAwABGqF8DAQA/SoQoASsGwABIZICwhDyERYRyAQCA4wAAAAEDhE2EcgAAAAAAAABgA8AAStgBPgFKhFMBHIRqFoRjFoRaLqO5wABGOcAASFGByMAARq2AjAEAAZMAwABNxgbAAEhlgLCEd4SAhJYBAINiAAAAAQOEi4SWAAAAAAAAAGADwABK2AFKhI4BIRaEjy6A48AASGQGwABIZoCwhJuEo4TPAQCByAAAAAEDhKqEzwAAAAAAAABgA8AATKIBPgFKhLABHITHFoTAFoS3LqO5wABGOcAASFGByMAARq2GkgEAAZUAwABNzQbAAEhVgLCE1ITZhV0AAIESAAAAAQOE4IVdAAAAAQEBhOYAAABQYQMCXwMAAF8DAQBcAABcAT4BRYT/AYUIhQoAAINmYAPAAEyiAZMBHIURgYUPwB7GH4C7AQABFoUcFoUTLqO5wABGOcAASFGByMAARq0AwABN0AGJhSTAHsYfHIUmgYUkwB7GH4ENAQABlQDAAE3IPgE9HIU1gIU0wB7GA24CAAImhT4FHIU+FoU2LqO5wABGOcAASFGC0QEAAYGFP8Aexh8AwABGqF8DAAAmhUsFHIVLFoVDLqO5wABGOcAASFGC0QEAARyFToGFTMAexh+BDQEAAZQAwABNyADAAEaoXwMBAAAABsAASGeAsIVihXKFrQEAg2MAAAABA4V3ha0AAAAAAAAAXQPAAE0EAV8DAAABPgFKhX0BH4WIwABIdQEBXwMAAAEuAAbAAEhogLCFsoXChgEBAIEBAAAAAQOFyYYBAAAAAAAAAF0DwABNBAFfAwEAAT4BSoXPAR+F2sAASH4BAV8DAQABLgAGwABIVoCwhgaGC4avAACC6QAAAAEDhhaGrwAAAAEBAYYeAAAAgtJgA8AATe8AAGADwABK2AE+AkWGKQGGMoY0AACDZmADwABMogGTARyGO4GGOcAex6+AuwEAARaGRhaGPS6jucAARjnAAEhRgcjAAEatAMAATdABiYZOwB7HrxyGUIGGTsAex6+BDQEAAZUAwABNyD4BSYZeHIZmgIZiwB7Hk4CMAQABHIZxFoZpLqO5wABGOcAASFGC0QEAAYGGcsAex68AwABGqADAAE38PgFKhoABKT9Khp8BKgbAAEhXgLCGtIa5h2MAAINlAAAAAQOGxodjAAAAAQEBhs4AAAAiYAPAAE3vAABgA8AAStgBPgJFhtsBhuSG5gAAg2ZgA8AATKIBlAEchu2BhuvAHsiLgLsBAAEWhvgWhu8uo7nAAEY5wABIUYHIwABGrQDAAE3QAYmHAMAeyIschwKBhwDAHsiLgQ0BAAGVAMAATcg+AUmHEByHGoCHFMAeyHCAjAEAARyHJRaHHS6jucAARjnAAEhRgtEBAAGBhybAHsiLAMAARqgAwABN/D4BSoc0ASk/SodTASoGwABIWICwh2iHdofWAwCBDAAAAAEDh3mH1gAAAAICAod8AAAggtJfAwAAAIeDAAAgIl8DAQAAAFwBPgE9MIeQH4eawABMMAEAASejuwAGwABIWYCwh9uH4IhEAACDawAAAAEDh+aIRAAAAAEBAYfxAAAggh1dA8AATXgCXwMAAF8DAQAAAFwBPgE9MIf+H4gIwABMMAEAASejuwAGwABIWoCwiEmIS4i4AACDaAAAAAEDiFaIuAAAAAICAohZAAAggtJfAwAAAIhgAAAgg2lhAwBfAwEAAABfAwEAAT4BPTCIch+IfMAATDABAAEno7sABsAASFuAsIi9iMKJDwAAgOcAAAABA4jHiQ8AAAAAAAAAXAE+AT0wiNAfiNrAAEwwAQABJ6O8AAbAAEhcgLCJFIkWiXQAAINsAAAAAQOJHIl0AAAAAQEBiSQAAACC0mADwABN7wAAXwMBAAE+AT0wiS8fiTnAAEwwAQABJ6O9AAbAAEhpgLCJeYmWidEBAIPaAAAAAQOJnonRAAAAAAAAAF0DwABNBAFdA8AATZ8CXwMAAF8DAQABSomnAR+Jq8AASIcBAl8DAABfAwEAAS4ABsAASF2AsInWieKK2QAAgasAAAABA4ntitkAAAIAAASD22ADwABN7wFbAAAEg9xgA8AATe8BWwEBAYn/AAAAUGEDAl8DAABfAwEAXQPAAE2fAl8DAgBfAwMAAABdA8AATXgCXwMCAF8DAwABPgNOihyKIwAAgOZdA8AATXgCXwMCAF8DAwABMootXwMCAF8DAwAARYo1AYo+ikAAAINmYAPAAEyiAZMBHIpHgopFwB7Lg4C7AQABFopSFopJLqO5wABGOcAASFGByMAARq0AwABN0AGKilrAHsuDHIpcgopawB7Lg4ENAQABlQDAAE3IPgJOim6KdAAAgxldA8AATZ8CXwMCAF8DAwABHIp3gIp2wB7LJm4CAAImioAFHIqAFop4LqO5wABGOcAASFGC0QEAAYKKgcAey4MAwABGqF8DAAAmio0FHIqNFoqFLqO5wABGOcAASFGC0QEAARyKkIKKjsAey4OBDQEAAZQAwABNyADAAEaoXwMBAAAAPRyKo4GKncAey1uBDAIAAhaKqoOKpMAey9+C0sAATaEWireDirHAHsvfIsAATaIAwABNjUqKyAGBis/AHstbBsAASF6AsIreiuOLXAAAg90AAAABA4rti1wAAAABAQGLBwAAIIPeXQPAAE0EAV0DwABNnwJfAwAAXwMBAAAAXAE+AT0wixkfiyPAAEwwAQABJ6O+AAbAAEhfgLCLYYtji90AAIPXAAAAAQOLaYvdAAAAAwICi2wAACCC0l8DAAAAi3MAACCD12EDAV8DAQBfAwEAAAGLhwAAIINpYQMAXwMBAAFqAGABwABNrAJfAwEAAT4BPTCLmh+LpMAATDABAAEno74ABsAASGCAsIvii+eMVAAAg9kAAAABA4vwjFQAAAABAQGL8wAAIIPXYQMCXwMAAF8DAQBfAwEAAABcAT4BPTCMER+MG8AATDABAAEno74ABsAASGGAsIxZjF6M0wAAg5UAAAABA4xpjNMAAAABAQGMbwAAAKO/YQMCXwMAAF8DAQBgA8AAStgAAFwBPgE9MIyQH4yawABMMAEAASejvgAGwABIYoCwjNiM340GAACA7wAAAAEDjOeNBgAAAAAAAABgA8AATokBSoztAR6M9YouAQABLgAAAB7DewAew+YAHsUGAB7FWQAexZAAHsXjAB7G7QAexzAAHsdzAB7IUAAeySwAHsl6AB7JyAAeyh0AHspUAB7KnAAeyuwAHsyoAB7M/QAezW4AHs28AB7ODAAezkIAAAAWAsAASG2AsI0LjRGOCwOjwAABAAAEgWdgA8AATe8BWwFdA5WYAV8DAAAAAAEEwABIcICwjWiNbAmC5cAARjkAXQPAAEhOAltbAAEFwABIdYCwjXCNcI2TAAAAA42IjZMAAAABAQGNjgAABILlXQPAAEhOAltbAABdA8AASG0BXwMAAAE/AggBwABIcIAAwB7PCAkBjXCVnAAAAAACBsAASHKAsI2YjaiN5wEAgQgAAAABA42xjecAAAAAAAAAXQPAAE0/AV8DAAABPgFKjbcBH43CwABIkwEBXwMAAAEWjd4uguXAAEY5wABIcAAGwABIc4CwjeyN9I4JAQCByAAAAAEDjfuOCQAAAAAAAABgA8AATKIBSo3+ARaOAxaN/i6C5cAARjnAAEhwgcjAAEhmAAAezz8AHs+PAB7P0gAAAAICwABIdoCwjg6OFI8UA6PBAAEAAASBZ2ADwABN7wFbAV0DlZgBXwMAAAAAAQTAAEh5gLCObY5xCYLlwABGOQBdA8AASE4CW1sAAQXAAEh+gLCOdY51jpoAAAADjo+OmgAAAAEBAY6VAAAEguVdA8AASE4CW1sAAF0DwABIdgFfAwAAAT8CCAHAAEh5gADAHtBICQGOdZWcAAAAAAIGwABIe4Cwjp+Or47wAQCBCAAAAAEDjriO8AAAAAAAAABdA8AATT8BXwMAAAE+AUqOvgEfjsnAAEifAQFfAwAAARaO5y6C5cAARjnAAEh5AAbAAEh8gLCO9Y79jxIBAIHIAAAAAQOPBI8SAAAAAAAAAGADwABMogFKjwcBFo8MFo8HLoLlwABGOcAASHmByMAASGYAAB7QfwAe0M8AHtESAAAAAgLAAEh/gLCPF48dkEEDo8IAAgAABINaYAPAAE3vAVsAAASDXWADwABN7wFbAV0DlZgBXQPAAE2fAl8DAABfAwEAAAABBMAASIKAsI+Kj44JguXAAEY5AF0DwABITgJbWwABBcAASIeAsI+Sj5KPtwAAAAOPrI+3AAAAAQEBj7IAAASC5V0DwABITgJbWwAAXQPAAEh/Al8DAABfAwEAAT8CCAHAAEiCgADAHtGgCQGPkpWcAAAAAAIGwABIhICwj7yP2ZAdAQCBCAAAAAEDj+KQHQAAAAAAAABdA8AATT8BXQPAAE2fAl8DAABfAwEAAT4BSo/oAR+P88AASKsBAl8DAABfAwEAARaQFC6C5cAARjnAAEiCAAbAAEiFgLCQIpAqkD8BAIHIAAAAAQOQMZA/AAAAAAAAAGADwABMogFKkDQBFpA5FpA0LoLlwABGOcAASIKByMAASGYAAB7R2wAe0joAHtJ9AAAAAgLAAEiIgLCQRJBKkegDo8MAAQAABIFnYAPAAE3vAVsBYAPAAE3vAAFdA8AATT8BXwMAAAMEwABIi4CwkI+QkxiC5cAARjkAXQPAAEhOAltbAATAAEiMgLCQm5CpGKPEwABGOQBgA8AATKIBkwTAAEiNgLCQr5C3WILFwABGOQBfAwAAASsBBcAASJOAsJC8kLyQ3wAAAAOQ1JDfAAAAAQEBkNoAAASC5V0DwABITgJbWwAAXQPAAEiIAV8DAAABPwIIAcAASIuAAMAe0y8JAZC8wABOBQAAAAACBsAASI+AsJDkkOmRyAAAgQkAAAABA5DxkcgAAAAAAAAAYAPAAErYAT4ETpD+kQcAAIOXYAPAAEyiARaRCS6jxMAARjnAAEiMSZEZHJEmgJEdwB7Tk4C7AQABFpEtFpEoLoLlwABGOcAASIuByMAASGYAwABN0D4DPReRPS6jxMAARjkckVOAkUrAHtOTgQ0BAAGUAMAATcjAAEiMPReRXi6CxcAARjkmkV4FHJF2FpFuFpFpLoLlwABGOcAASIujucAARjnAAEhRgtEBAAEckYCAkXfAHtOTg8YBAAGVAMAATcoAwABGqF8DAADAAEiNSpGMASk/PReRoy6CxcAARjkrwABIjUqRuAEqBsAASJGAsJHNkdOR5gEAgQoAAAABA5HbkeYAAAAAAAAAXwMAAAFKkd4BFpHeLoLFwABGOcAASI0AAB7TaAAe1HMAHtSrAAAAAgLAAEiUgLCR65Hxk5cDo8UAAQAABIFnYAPAAE3vAVsBYAPAAE3vAAFdA8AATT8BXwMAAAMEwABIl4CwkjiSPBiC5cAARjkAXQPAAEhOAltbAATAAEiYgLCSRJJSGKPEwABGOQBgA8AATKIBkwTAAEiZgLCSWJJgWILFwABGOQBfAwAAASsBBcAASJ+AsJJlkmWSigAAAAOSf5KKAAAAAQEBkoUAAASC5V0DwABITgJbWwAAXQPAAEiUAV8DAAABPwIIAcAASJeAAMAe1V0JAZJlwABOBQAAAAACBsAASJuAsJKPkpSTdwAAgQkAAAABA5Kck3cAAAAAAAAAYAPAAErYAT4ETpKpkrIAAIOXYAPAAEyiARaStC6jxMAARjnAAEiYSZLEHJLRgJLIwB7VwYC7AQABFpLYFpLTLoLlwABGOcAASJeByMAASGYAwABN0D4DPReS6C6jxMAARjkckv6AkvXAHtXBgQ0BAAGUAMAATcjAAEiYPReTCS6CxcAARjkmkwkFHJMhFpMZFpMULoLlwABGOcAASJejucAARjnAAEhRgtEBAAEcky8ckyuAkyLAHtXBg8YBAAGVAMAATcqBDQEAAZQAwABNyADAAEaoXwMAAMAASJlKkzsBKT89F5NSLoLFwABGOSvAAEiZSpNnASoGwABInYCwk3yTgpOVAQCBCgAAAAEDk4qTlQAAAAAAAABfAwAAAUqTjQEWk40ugsXAAEY5wABImQAAHtWWAB7WrwAe1ucAAAACAsAASKCAsJOak6CVrAOjxgACAAAEg1pgA8AATe8BWwAABINdYAPAAE3vAVsBYAPAAE3vAAFdA8AATT8BXQPAAE2fAl8DAABfAwEAAwTAAEijgLCT95P7GILlwABGOQBdA8AASE4CW1sABMAASKSAsJQDlBEYo8TAAEY5AGADwABMogGTBMAASKWAsJQklCxYgsXAAEY5AF0DwABNnwJfAwAAXwMBAAErAQXAAEirgLCUMZQxlFYAAAADlEuUVgAAAAEBAZRRAAAEguVdA8AASE4CW1sAAF0DwABIoAJfAwAAXwMBAAE/AggBwABIo4AAwB7XvAkBlDHAAE4FAAAAAAIGwABIp4CwlFuUYJV/AACBCQAAAAEDlGiVfwAAAAAAAABgA8AAStgBPgROlHWUfgAAg5dgA8AATKIBFpSALqPEwABGOcAASKRJlJAclJ2AlJTAHtgkgLsBAAEWlKQWlJ8uguXAAEY5wABIo4HIwABIZgDAAE3QPgM9F5S0LqPEwABGORyUyoCUwcAe2CSBDQEAAZQAwABNyMAASKQ9F5TVLoLFwABGOR+U5MAATasCAl8DAABfAwEAAiaVCwUclQsWlQMWlP4uguXAAEY5wABIo6O5wABGOcAASFGC0QEAARyVFYCVDMAe2CSDxgEAAZUAwABNygDAAEaoXwMAACaVKAUclSgWlSAWlRsuguXAAEY5wABIo6O5wABGOcAASFGC0QEAARyVNhyVMoCVKcAe2CSDxgEAAZUAwABNyoENAQABlADAAE3IAMAARqhfAwEAAMAASKVKlUMBKT89F5VaLoLFwABGOSvAAEilSpVvASoGwABIqYCwlYSVl5WqAQCBCgAAAAEDlZ+VqgAAAAAAAABdA8AATZ8CXwMAAF8DAQABSpWiARaVoi6CxcAARjnAAEilAAAe1/kAHtlqAB7ZrQAAAAICwABIrICxgQmBGLjPB6PHAAABYAPAAE3vAAFgA8AATKIBBMAASK+AsaITokMGok3AAEY5AGADwABOiQFqoh1gA8AATonAAFyPAQXAAEj0AAAAAAQAAAMAAAAAAAAAAABgA8AASKwBPwEJAQDAAE4FAAAAAEAGwABIsYCxgUKBlYHAAwCBDQJqgUNgA8AASp+ZvmqBbGADwABKn5G0AAABA4GWgcAAAAABAQGBmwAAAIIdYAPAAE25AABgA8AATbkBSoGlARyBq4CBpcAe2mmjSMAARjkBAAEuAMAATbwGwABIsoCxgcSCF4JCAwCBBgJqgcVgA8AASp+ZvmqB7mADwABKn5G0AAABA4IYgkIAAAABAQGCHQAAAIIdYAPAAE25AABgA8AATbkBSoInARyCLYCCJ8Ae2tKjScAARjkBAAEuAMAATb0GwABIs4CxgkaCmYLEAwCDxgJqgkdgA8AASp+ZvmqCcGADwABKn5G0AAABA4KagsQAAAABAQGCnwAAAIIdYAPAAE25AABgA8AATbkBSoKpARyCr4CCqcAe2zujSsAARjkBAAEuAMAATb4GwABItICxgsmDHIO/AwCGkgJqgspgA8AASp+ZvmqC82ADwABKn5G0AAABA4Meg78AAAABAQGDIwAAAIIdYAPAAE25AABgA8AATKIBPgJJgzAiJYM7AICDNcAe26RgA8AATKIAHINNFINHwB7bpAABYAPAAEyigIwBAAGTAMAATcY+AT0wg1xqg2hgA8AATH7AAFoVP0qDlAEcg6GAg5vAHtuko0vAAEY5AQABLgDAAE2/BsAASLWAsYPEg9SEFAMAhfgAAAABA4PVhBQAAAABAQGD2gAAAIIdYAPAAE25AABgA8AAS1ABPgFKg+cBHIP+HIPzLoXvAAAAAMAASOOF+AEAARyEBoCEAMAe3ECF7wAAAADAAE3fAMAAS2EGwABItoCxhBmET4TvAwCGeAFqhBpgA8AASp+ZvgAAAQOEUITvAAAAAQEBhFUAAACCHWADwABNuQAAYAPAAE25AT4CSYRiIiWEbQCAhGfAHty2YAPAAEyiAByEfxSEecAe3LYAAWADwABMooCMAQABkwDAAE3GPgE9MISOaoSaYAPAAEx+wABaFT9KhMYBHITTgITNwB7ctqNMwABGOQEAAS4AwABNwAbAAEi3gLGE9IVHhWQDAIPrAmqE9WADwABKn5m+aoUeYAPAAEqfkbQAAAEDhUiFZAAAAAAAAABgA8AATKIBPgFKhVEBJoVRARyFWpOBBgEAAS4AwABNyWADwABMogbAAEi4gLGFaYW8heoDAIChAmqFamADwABKn5m+aoWTYAPAAEqfkbQAAAEDhb2F6gAAAAEBAYXCAAAAgh1gA8AATKIAAGADwABMogFKhcwBHIXSgIXMwB7dxaPJwABGOQEAAS4AwABMrgbAAEi5gLGF7oZBhm4DAICmAmqF72ADwABKn5m+aoYYYAPAAEqfkbQAAAEDhkKGbgAAAAEBAYZHAAAAgh1gA8AATKIAAGADwABMogFKhlEBHIZXgIZRwB7eLqPKwABGOQEAAS4AwABMrwbAAEi6gLGGcobFhvMDAICjAmqGc2ADwABKn5m+aoacYAPAAEqfkbQAAAEDhsaG8wAAAAEBAYbLAAAAgh1gA8AATKIAAGADwABMogFKhtUBHIbbgIbVwB7el6PLwABGOQEAAS4AwABMsAbAAEi7gLGG+Ib8h0MAAKJeAAAAAQOHBYdDAAAAAQEBhwoAAACCHWADwABNuQAAYAPAAE25AT4BSocXARyHJICHHsAe3uqjTcAARjkBAAEuAMAATcEGwABIvYCxh0iHdYeyAASjzMAARjkCaodJYAPAAEqfmb5qAGADlAjAAFyVAAABA4eDh7IAAAABAQGHiQAAAIIdYAPAAEj1AABgA8AATKIABsAASL6AsYe2h+OIIwAEo8nAAEY5AmqHt2ADwABKn5m+agBgA5QIwABclQAAAQOH9YgjAAAAAQEBh/oAAACCHWADwABMogAAYAPAAEyiAAbAAEi/gLGIJ4hUiJIABKPKwABGOQJqiChgA8AASp+ZvmoAYAOUCMAAXKMAAAEDiGWIkgAAAAEBAYhqAAAAgh1gA8AATKIAAGADwABMogAGwABIwICxiJaIw4kDAASjy8AARjkCaoiXYAPAAEqfmb5qAGADlAjAAFyxAAABA4jViQMAAAABAQGI2gAAAIIdYAPAAEyiAABgA8AATKIABsAASMGAsYkHiTSJbgAEo9DAAEY5AmqJCGADwABKn5m+agBgA5QIwABcvwAAAQOJQ4luAAAAAQEBiUgAAACCHWADwABMogAAYAPAAEyiAAbAAEjCgLGJcomfidkABKPSwABGOQJqiXNgA8AASp+ZvmoAYAOUCMAAXM0AAAEDia6J2QAAAAEBAYmzAAAAgh1gA8AATKIAAGADwABMogAGwABIw4Cxid2KCopEAASjSMAARjkCaoneYAPAAEqfmb5qAGADlAjAAFzbAAABA4oZikQAAAABAQGKHgAAAIIdYAPAAEyiAABgA8AATKIABsAASMSAsYpIinWKrwAEo0nAAEY5AmqKSWADwABKn5m+agBgA5QIwABc6QAAAQOKhIqvAAAAAQEBiokAAACCHWADwABMogAAYAPAAEyiAAbAAEjFgLGKs4rgixoABKNKwABGOQJqirRgA8AASp+ZvmoAYAOUCMAAXPcAAAEDiu+LGgAAAAEBAYr0AAAAgh1gA8AATKIAAGADwABMogAGwABIxoCxix6LS4uPAASjS8AARjkCaosfYAPAAEqfmb5qAGADlAjAAF0FAAABA4tfi48AAAABAQGLZAAAAIIdYAPAAEyiAABgA8AATKIABsAASMeAsYuTi8CMAAAEo0zAAEY5AmqLlGADwABKn5m+agBgA5QIwABdEwAAAQOL0owAAAAAAQEBi9cAAACCHWADwABMogAAYAPAAEyiAAbAAEjIgLGMBIwIjFgAAKNNwABGOQAAAAEDjB2MWAAAAAEBAYwiAAAAgh1gA8AATKIAAGADwABMogE+AUqMLwEmjC8BHIw8gIw2wB7iqIEGAQABHIxOHIxFgIw/wB7iqIaSAQABLgDAAE3Ng8YBAAEuAMAATcoAwABNyWADwABMogbAAEjOgLGMXYywjNwDAIPFAmqMXmADwABKn5m+aoyHYAPAAEqfkbQAAAEDjLKM3AAAAAEBAYy3AAAAgh1gA8AATKIAAGADwABMogFKjMEBHIzHgIzBwB7jO6PQwABGOQEAAS4AwABMsQbAAEjPgLGM4I0zjV8DAINxAmqM4WADwABKn5m+ao0KYAPAAEqfkbQAAAEDjTWNXwAAAAEBAY06AAAAgh1gA8AATKIAAGADwABMogFKjUQBHI1KgI1EwB7jpKPSwABGOQEAAS4AwABMsgbAAEjQgLGNZI23jeEDAIC7AmqNZWADwABKn48eao2NYAPAAEqfkbQAAAEDjbiN4QAAAAEBAY29AAAAgh1gA8AATbkAAGADwABK2AE+AUqNygEcjdeAjdHAHuQNgowBAAEuAMAATdIGwABI0YCxjeaOOY56AwCCjAJqjedgA8AASp+PHmqOD2ADwABKn5G0AAABA446jnoAAAABAQGOPwAAAIIdYAPAAE25AABgA8AAStgBPgFKjkwBHI5ZgI5TwB7kdKNOwABGOQEAAS4AwABNwgbAAEjSgLGOf47SjxIDAIFeAmqOgGADwABKn48eao6oYAPAAEqfkbQAAAEDjtSPEgAAAAEBAY7ZAAAAgh1gA8AATbkAAGADwABK2AE+AUqO5gEiHI7zLoCMAQABgI72wB7k3wDAAEjUARyPBi6CjAEAAYCPCMAe5N8AwABI0QbAAEjTgLGPF49qj6oDAIFbAmqPGGADwABKn48eao9AYAPAAEqfkbQAAAEDj2yPqgAAAAEBAY9xAAAAgh1gA8AATbkAAGADwABK2AE+AUqPfgEiHI+LLoCMAQABgI+OwB7lXQDAAEjUARyPni6AuwEAAYCPoMAe5V0AwABI0AbAAEjJgLGPr4/ckCwABKNOwABGOQJqj7BgA8AASp+PHmoAYAOUCMAAXSEAAAEDj/OQLAAAAAEBAY/4AAAAgh1gA8AATKIAAGADwABK2AAGwABI1ICxkDGQhJDzAwCAjAJqkDJgA8AASp+PHmqQWmADwABKn5G0AAABA5CGkPMAAAABAQGQjgAAAIIdYAPAAE3vAABgA8AAStgBPgJJkJslkKUAgJCfwB7mKmADwABNuT4BSpC1ARyQwhSQvMAe5ioAAWADwABNuaNEwABGOQEAAS4AwABNwz9KkOMBKgbAAEjKgLGQ+JElkV8ABKNEwABGOQJqkPlgA8AASp+PHmoAYAOUCMAAXS8AAAEDkTSRXwAAAAEBAZE5AAAAgh1gA8AATKIAAGADwABK2AAGwABI1YCxkWORZ5GVAACO7wAAAAEDkWqRlQAAAAAAAABgA8AATKIBPgFKkXMBIxyRfy6AuwEAAZMAwABI0ByRhS6D6wAAAADAAEi3LgFgA8AATKIGwABI7ICxkZqRopHcAQCF6QAAAAEDkaeR3AAAAAAAAABgA8AATKIBPgFKka0BIxyRui6CjAEAAZMAwABI0ZQjHJHLLoC7AQABkwDAAEjQHJHSlIPrAAAAAMAATMWTAWADwABMogFgA8AATKIGwABI7YCxkeGR6pIFAQCMLAAAAAEDkfGSBQAAAAAAAABgA8AAStgBSpH0ARySAByR+y6AoQEAAZQAwABIuICMAQABkwDAAE3GBsAASO6AsZIJkhKSIgEAooIAAAABA5IYkiIAAAAAAAAAYAPAAErYAUqSGwEhFpIcLowswABI7QbAAEjvgLGSJpIvkj0BAIxnAAAAAQOSNZI9AAAAAAAAAGADwABK2AFKkjgBKgbAAEjwgLGSQZJKkmABAIx/AAAAAQOSVZJgAAAAAAAAAGADwABK2AFKklgBHJJdLoC7AQABkwDAAEjQBsAASPGAsZJkkm2SgAEAmwoAAAABA5J4koAAAAAAAAAAYAPAAErYAUqSewEqBsAASPKAsZKEko2SnQEAh1QAAAABA5KWkp0AAAAAAAAAYAPAAErYAUqSmQEpBsAASNaAsZKikqaS5gAAovsAAAABA5KwkuYAAAABAQGStQAAAIw9YAPAAEyiAABgA8AATKIBPgFKksIBHJLOLoChAQABHJLeHJLUlINxAQABgJLXwB7o9ADAAEy+gQYBAAGUAMAATckAwABIuAbAAEjXgLGS65LvlKkAAI+UAAAAAQOS95SpAAAAAQEBkvwAAACMPWADwABMogAAYAPAAEyiAT4CTpRSlFsAAI75YAPAAEyiARyUX5SDcQEAARyUaYCUY8Ae6WGBBgEAAZQAwABNyQDAAEy+SpRzARyUkhyUgC6AoQEAARyUjIGUg8Ae6XqBBgEAAZQAwABNyQDAAEi4gQYBAAEclJougKEBAAGBlJzAHul6AMAASLgAwABNyQbAAEjYgLGUrpSymyUAAKKTAAAAAQOUu5slAAAAAQEBlMAAACCCHWADwABNuQAAYAPAAEyiAT4CSZT+JZUIAICVAsAe6hVgA8AAS1A+A0mV22qV32ADwABK2IP7PgFJl+Ycl/AUl+rAHuoVAAFgA8AAS1CAuwEAAWqX8mADwABLUMAAXToAwABN0D4BSpgQAWqYF2ADwABMohRJmC8cmDkUmDPAHuoVAAFgA8AAS1CBXgEAAWqYPGADwABLUMAAW7AAwABN0z4BSphfAWqYZmADwABMooZyPz4BSZiNFpiXFJiRwB7qFQABYAPAAEtQmwrAAE3qPgFKmK8BIxaYvBSYtsAe6hUAAWADwABLUIx/wABN6WqYyWADwABMohRqmNNgA8AATKKGcgFgA8AATKI/SZjxFpj7FJj1wB7qFQABYAPAAEtQjGfAAE3oPgFKmQwBapkTYAPAAEyihnI/SZknIhyZQ2qZK2ADwABMosAAW6iBWwEAAS4AwABN0QAcmVMugVsBAAFqmVZgA8AATKLAAFusAMAASNM+AUqZsgEcmbkcmcGAmbvAHuoVopMBAAEcmdAuhe8AAAAAwABI4wDAAE3Hg+sAAAAAwABMxT4BPYiad8Ae6hUcmoWAmn/AHuoVm50AAAAAwABN3j9JmqAcmqkugLsBAAGAmqvAHuoVAMAASNA+AUqaugFqmsFgA8AATKKGckma0hya2y6CjAEAAYCa3cAe6hUAwABI0T4BSprsAWqa82ADwABMohQ+AUqbDwFqmxZgA8AATKIaBsAASNmAsZsqmy6bSwAAm5UAAAABA5szm0sAAAAAAAAAYAPAAEyiAT4BSps8AS4GwABI2oCxm1CbVJtxAACjVAAAAAEDm1mbcQAAAAAAAABgA8AATKIBPgFKm2IBLgbAAEjbgLGbdpt6m5YAAKNVAAAAAQObfpuWAAAAAAAAAGADwABMogE+AUqbhwEuBsAASNyAsZubm5+bvwAAkWAAAAABA5unm78AAAAAAAAAYAPAAEyiAT4BSpuwAS4GwABI3YCxm8Sby5v7AACjUwAAAAEDm9ib+wAAAAAAAABgA8AAS1ABPgFKm+EBHJvtLoXvAAAAAMAASOMGwABI3oCxnACcB5w3AACieAAAAAEDnBScNwAAAAAAAABgA8AAS1ABPgFKnB0BHJwpLoXvAAAAAMAASOMGwABI34CxnDycQ5xyAACjVgAAAAEDnE+ccgAAAAAAAABgA8AAS1ABPgFKnFgBHJxkLoXvAAAAAMAASOMGwABI4ICxnHecfpyxAACjVwAAAAEDnI6csQAAAAAAAABgA8AAS1ABPgFKnJcBHJyjLoXvAAAAAMAASOMGwABI4YCxnLacuqAPAACO8QAAAAEDnL+gDwAAAAICApzEAAAAiyFgA8AATbkAnNQAAACLImADwABNuQAAYAPAAE25AT4ISZzmHJz1gJzqwB7uD4CMAQABKwDAAE3GPgE9MJ0GH50QwABL0wEAASeLIQA/SZ0/HJ1OgZ1DwB7uHYCMAQABKwDAAE3GPgE9MJ1fH51pwABL0wEAASeLIgA/SZ26IiIlnckAgJ2+wB7uD2ADwABMogAlnd4AgZ3TwB7uHWADwABMogAcnfMUnejAHu4PAAFgA8AATKKBWwEAARSd9sAe7h0BAWADwABMogDAAE3RPgNJngocnhMugLsBAAEUnhXAHu4PAAFgA8AATKIAwABI0EqeIQEUnijAHu4PAAFgA8AATKI/SZ46HJ5DLoKMAQABFJ5FwB7uHQEBYAPAAEyiAMAASNFKnlEBFJ5YwB7uHQEBYAPAAEyiP0qeagEuP0mexBye6Rye04CeyMAe7g+ikwEAAYGe3cAe7h0AwABNx4KMAQABkwDAAE3SPgE9MJ72H58AwABL0QEAAYCfDsAe7g8AP0mfJRafNICfKcAe7g+MZ8AATehKnzsBgJ9CwB7uDz9Jn5ccn6AugLsBAAGAn6LAHu4PAMAASNBKn64BgJ+1wB7uDz9Jn8Ucn+Qcn84uopMBAAGBn9jAHu4dAMAASNiCjAEAAZMAwABN0kqf6QGBn/DAHu4dP0qgAAEuBsAASOKAsaAUoBigNQAAm50AAAABA6AdoDUAAAAAAAAAYAPAAEyiAT4BSqAmAS4GwABI44CxoDqgbKClAACF7wFqoDtgA8AASp/AAFonAAABA6B0oKUAAAAAAAAAYAPAAEtQAT4BSqB9AR6giMAAR38BAAEuAAbAAEjkgLGgqqCxoRUAAJsMAAAAAQOgwKEVAAAAAQEBoMUAAACjXmADwABMogAAYAPAAE6JAT4BSqDbARyg8hyg5y6F7wAAAADAAEjjmwwBAAGAoQLAHvCoAMAATeAGwABI5YCxoRqhIaGTAACjYQAAAAEDoTahkwAAAAEAAaE8AAAAo15gA8AATKIBagBgAcAATawCAGADwABOiQE+AUqhUwEcoWocoV8uhe8AAAAAwABI46NhAQABgKGAwB7xBgDAAE3hBsAASOaAsaGYoZ+iAQAAo2QAAAABA6GyogEAAAABAQGhtwAAAKNlYAPAAEyiAABgA8AATokBPgFKocgBHKHfHKHULoXvAAAAAMAASOOjZAEAAYCh88Ae8W0AwABN4gbAAEjngLGiSKJPphwAAIY6AAAAAQOiXKYcAAAAAQEBomEAAACiWWADwABMogAAYAPAAE6JAT4MSaJuIhyieICicsAe8cuAuwEAAZUAwABN0AEcooI3JIC7AQABgKKEwB7xywDAAE3QPgE9MKKTH6KdwABL6AQABICirsAe8cuVNyQnolkAP0mi0Byi6Byi2oCi1MAe8cuAoQEAARyi44Ci3cAe8cuBBgEAAZQAwABNyQDAAEy6gIwBAAGTAMAATcY+AUqi9gEcov0uo9zAAEY5AQABgKMLwB7xywDAAEjLP0mjHRyjJ4CjIcAe8cuAjAEAATcKAMAATcZKoy4BHKM6LoDvAAAAAMAATf0/TqNVo2AAAYx/YAPAAErYARyjZy6AuwEAAZMAwABI0E6jdKN6AAAiYAPAAEyiASOBo3zAHvK5HKOJLoPrAAAAAMAASLcuAWADwABMokmjmxyjpYKjn8Ae8tiAuwEAAZMAwABN0D4BSqRqARykcS6j3cAARjkBAAGApIjAHvHLAMAASMw/TqSepKMAAJoFXQPAAE1GAWADwABMogEepKnAAEg+AQFgA8AATKIBkwBEpLo+A06kyaTPAACFwWADwABMogEcpNeCpNHAHvLYhngBAAGApNnAHvHLAMAATcs9iqTmwB7y2Byk7IKk5sAe8tiGkgEAAYCk8MAe8csAwABNzT0cpQKDpP3AHvM9gIIBAAEcpQ5qpQZgA8AATonAAFyPhdABAAGEpRnAHvNrAMAATpcAwABNVxylNYKlL8Ae8tiCjAEAAZMAwABN0kmlP4GlQ8Ae8rk9HKVUg6VPwB7zPYCCAQABNy0AwABNVz9OpXulggAAhkdgA8AASggBHqWTwABKGQEAARalooOlncAe8z2ByMAATXYARaWvAqW4pboAAINmYAPAAEyiAZOlv6XBAACJzGADwABMogEWpciDpcPAHvM9gcjAAE12ARyl0oal0MAe9GSCjAEAAZMAwABN0gGNpdfAHvRUHKXYhaXXwB70VIENAQABlADAAE3IPgE9HKXrhKXkwB70JqPewABGOQIAAoWl8sAe9FQcpfmDpfXAHvM9gtEBAAGOpfzAHvRkHKX6hqX8wB70ZIEGAQABlADAAE3JAMAATVUAwABKG0qmCwGEphLAHvQmBsAASMuAsaYhpiiqAQAAo9zAAEY5AAAAAQOmNaoBAAAAAQEBpjoAAACiWWADwABMogAAYAPAAE6JAT4NTqZLplEAACJgA8AATKIBLkmmXRymZ4GmYcAe9VCAjAEAAZMAwABNxkqmbQEnhjw/QBymmBymioCmhMAe9TeAoQEAARymk4CmjcAe9TeBBgEAAZQAwABNyQDAAEy6gIwBAAGTAMAATcamhKacAE6mp6awAACR4WADwABK2AEcpriBprLAHvVQgLsBAAGTAMAATdBOpsWm0gAAo99gA8AATKIBHKbkFqbagKbUwB71N4O/wABM2IEGAQABlADAAE3JTqbxpvgAAIHIYAPAAEyiAZNJpwGCpwXAHvW9PgM9iacXwB71UBynH4GnIMAe9VCD6wAAAADAAEzFPYynLcAe9hCUSac/HKdJgadDwB71UIC7AQABkwDAAE3QPgFKqBYBHKgdLqPdwABGOQEAAYCoNMAe9TcAwABIzD8/PYyoj8Ae9hAcqJaEqI/AHvYQgQ0BAAEcqL4cqLkcqKoWqKCBqJrAHvVQg7/AAEzYgQ0BAAGDqKzAHvXiAMAATciBBgEAAZQAwABNyYaSAQABg6jBwB714gDAAE3NAMAATchOqOKo6QAAhkdgA8AASggBHqj6wABKGQEAAYSpBMAe9hAAPRypGIWpEcAe9u2j3sAARjkCAAKTNy0AwABKG06pWaleAACExWADwABMogEcqWaAqWDAHvU3gQYBAAGUAMAATclEqW8+Aj0cqYGFqXrAHvbto97AAEY5AgACjKmKwB72EBypiISpisAe9hCBBgEAAZQAwABNyRypmmqpkmADwABOicAAXI+F0AEAARypq4GppcAe9VCAoQEAAYaprcAe9ysAwABMugDAAE6XAMAAShs9iam7wB71UBypwYGpu8Ae9VCDxQEAAYOpxcAe9eIAwABMvxyp5oGp4MAe9VCCjAEAAZMAwABN0kqp8AGFqffAHvbtBsAASMyAsaqUqpusbQAAo93AAEY5AAAAAQOqsaxtAAAAAQEBqrYAAACiWWADwABMogAAYAPAAE6JAT4ITqrHqswAAJoFXQPAAE1GAWADwABMogEeqtLAAEg+AQFgA8AATKIBkwBOqueq7QAAImADwABMogEuQByrBoKrAMAe+GeAuwEAAZMAwABN0KsAqwkARKsQPgNOqx+rJQAAhcFgA8AATKIBJqsfARyrJxyrLoKrKMAe+GeiXgEAAYCrOMAe+CUAwABNz4PrAAAAAMAATc5gA8AATKI9iqtGwB74ZxyrTIKrRsAe+GeGkgEAAYCrUMAe+CUAwABNzT0cq2KBq13AHvg+gIIBAAEcq25qq2ZgA8AATonAAFyPhdABAAGDq3nAHviXAMAATpcAwABNVyEcq5WCq4/AHvhngIwBAAGTAMAATcY9HKulgaugwB74PoCCAQABNy0AwABNV06rzKvTAACGR2ADwABKCAEeq+TAAEoZAQABFqvzgavuwB74PoHIwABNdgBFrAACrAmsCwAAg2ZgA8AATKIBk6wQrBIAAInMYAPAAEyiARasGYGsFMAe+D6ByMAATXYBHKwjhawhwB75nYKMAQABkwDAAE3SAYysKMAe+Y0crCmErCjAHvmNgQ0BAAGUAMAATcg+AT0crDyDrDXAHvlfo97AAEY5AgAChKxDwB75jRysSoGsRsAe+D6C0QEAAY2sTcAe+Z0crEuFrE3AHvmdgQYBAAGUAMAATckAwABNVQDAAEobSqxcAYOsY8Ae+V8GwABI6ICxrJGsla/+AACixQAAAAEDrJuv/gAAAAICAqygAAAAaWADwABMogCspwAAAISBYAPAAEyiAABgA8AATKIBPgtJrLAcrLaArLTAHvpsgIwBAAErAMAATcY+AT0wrMcfrNHAAEvTAQABJ4XxAD9JrP4crQSBrQLAHvp5gIwBAAErAMAATcY+AT0wrRUfrR/AAEvTAQABJ6LIAD9JrUscrVGArU/AHvpsgLsBAAGTAMAATdA9MK1WH61gwABL6AQABICtccAe+myTKyeF8QA/Sa2OHK2Uga2SwB76eYFbAQABkwDAAE3RPTCtmh+tpMAAS+gEAASBrbXAHvp5lCsnosgAP0mt0Ryt14Ct1cAe+myAjAEAAZMAwABNxkqt3QGUP0muVByuWoGuWMAe+nmCjAEAAWquXGADwABMosAAXUMAwABN0j4BSq7ZARyvGRyu8h6u58AAStcBAAEuAKLFAgACHq8AwABK1wEAAYCvBcAe+mwAHq8QwABK1wEAAYGvFcAe+nkAAMAASs2bnQAAAADAAErSP06vMa8zAAA3YAPAAEyiAS5Jrz8iHK9Fgq9DwB7754C7AQABkwDAAE3QARyvToKvTMAe++eCjAEAAYGvUMAe+nkAwABN0j4BPYqvW8Ae++ccr12Cr1vAHvvnhngBAAGBr2DAHvp5AMAATcs/Tq9xr3MAAIhpYAPAAEyiAZRDr3wcr4WAr4PAHvpsgowBAAGTAMAATdI+A0mvkhavmICvlsAe+myigsAATNc+AT2Lr6nAHvxSHK+1HK+wg6+uwB78UoPGAQABgq+ywB775wDAAE3KhngBAAGBr7fAHvp5AMAATcs/PYivyMAe+mwcr8qAr8jAHvpsg8UBAAGUAMAATL89iq/XwB775xyv4xyv3oKv3MAe++eDxgEAAYKv4MAe++cAwABNyoZ4AQABga/lwB76eQDAAE3LSq/yAYOv+cAe/FIGwABIzYCxsL6wybXDAAGi38AARjkAAAABA7DTtcMAAAADAwOw2AAAAISEYAPAAEyiALDfAAAAjDJgA8AATKIAsOcAAACi4GADwABK2AAAYAPAAEyiAT4OTrD2sPgAAID5YAPAAEyiAZNJsQEhgrEGwB79aD4CQ7ETIhaxHICxGsAe/UyMLMAATNYAFrEogbEmwB79WowswABM1j4DPYixOsAe/UwcsTyAsTrAHv1Mg8UBAAGUAMAATL89ibFLwB79WhyxTYGxS8Ae/VqDxQEAAZQAwABMvz2LsVzAHv2BHLFdg7FcwB79gYENAQABlADAAE3ISbFvFrF1gbFzwB79WqKCwABM1z4DTrGKsYwAAIrzYAPAAEyiAYCxjsAe/Uw9iLGZwB79TIGxncAe/Vo9ibGowB79WoSxrMAe/jI/P06xzLHPAAGi6WADwABK2AEWsdOAsdHAHv1MjCzAAEzWTrHjseUAAInaYAPAAEyiAYCx58Ae/UxOsfKx9AAAgYpgA8AATKIBgbH2wB79Wk6yAbIDAAA2YAPAAEyiAZROsgiyCgAAN2ADwABMogGTTrIPshEAAIuPYAPAAEyiAZNOshayGAAAg81gA8AATKIBlESyIT4DQ7IsFrI1hbIzwB7+iYwswABM1j4DPY2yR8Ae/okcskmFskfAHv6Jg8UBAAGUAMAATL9JsliEslzAHv5pPgJJsmwiIRayc4eyccAe/reMLMAATNYBIRaygBSyfsAe/scIAIwswABM1j4CPY+ylsAe/rccspiHspbAHv63gQ0BAAGBspvAHv1aAMAATcg9FbKqwB7+xwgcsqwUsqrAHv7HCACBBgEAAYCyr8Ae/UwAwABNyT89j7LIwB7+txyyyoeyyMAe/reDxQEAAZQAwABMv0my4CEWsucUsuXAHv7HCACMLMAATNY+AT0VsvvAHv7HCByy/RSy+8Ae/scIAIEGAQABgLMAwB79TADAAE3JPz0VsxXAHv7HCByzFxSzFcAe/scIAIPFAQABlADAAEy/Q7MsFrM1hrMzwB7+oIwswABM1j4DPY6zR8Ae/qAcs0mGs0fAHv6gg8UBAAGUAMAATL9Js1iEs1zAHv5pPgJJs2wiIRazcxSzccAe/tcJAIwswABM1gEhFrOAFLN+wB7+6AoAjCzAAEzWPgI9FbOWwB7+1wkcs5gUs5bAHv7XCQCBDQEAAYGzm8Ae/VoAwABNyD0Vs6rAHv7oChyzrBSzqsAe/ugKAIEGAQABgLOvwB79TADAAE3JPz0Vs8jAHv7XCRyzyhSzyMAe/tcJAIPFAQABlADAAEy/SbPgIRaz5xSz5cAe/ugKAIwswABM1j4BPRWz+8Ae/ugKHLP9FLP7wB7+6AoAgQYBAAGAtADAHv1MAMAATck/PRW0FcAe/ugKHLQXFLQVwB7+6AoAg8UBAAGUAMAATL9JtCwctDKFtDDAHv6JgV4BAAGGtDXAHv6gAMAATdM+Az2NtELAHv6JHLREhbRCwB7+iYEGAQABhrRHwB7+oADAAE3JSbRShLRWwB7+aT2PtFrAHv63HLRch7RawB7+t4EGAQABFLRfwB7+1wkAAMAATck/PRW0asAe/scIHLRsFLRqwB7+xwgAgQYBAAEUtG/AHv7oCgAAwABNyT4DPY60icAe/qActIuGtInAHv6ggQYBAAGFtI7AHv6JAMAATclJtJmEtJ3AHv5pPRW0ocAe/tcJHLSjFLShwB7+1wkAgQYBAAGHtKbAHv63AMAATck/PRW0scAe/ugKHLSzFLSxwB7+6AoAgQYBAAEUtLbAHv7HCAAAwABNySEctNCFtM7AHv6JgIwBAAGTAMAATcZJtNshgrTgwB79aEq05QEctO6GtOzAHv6gg3EBAAGDtPHAHv2BAMAATL4/SbT4IRy0/oa0/MAe/qCAjAEAAZQAwABNxj4BPTC1DB61FsAATG0BAAEnouMAP0m1Ohy1QBS1PsAe/ugKAIC7AQABkwDAAE3QPgI9FbVNwB7+6AoctU8UtU3AHv7oCgCBDQEAAYC1UsAe/UwAwABNyEm1Wxy1YRS1X8Ae/ugKAIC7AQABkwDAAE3QPRW1ZsAe/ugKHLVoFLVmwB7+6AoAgQ0BAAGAtWvAHv1MAMAATcg/SbV5HLV/FLV9wB7+6AoAgowBAAGAtYHAHv1MAMAATdI+Aj0VtYzAHv7oChy1jhS1jMAe/ugKAIEGAQABgLWRwB79TADAAE3JSbWaHLWgFLWewB7+6AoAgowBAAGAtaLAHv1MAMAATdI9FbWlwB7+6AoctacUtaXAHv7oCgCBBgEAAYC1qsAe/UwAwABNyT8/SrW3ARS1vsAe/ugKAAbAAEjpgLG17bXxt4MAAKL4AAAAAQO1+7eDAAAAAQEBtgAAAACEgWADwABMogAAYAPAAEyiAT4ISbYJHLYPgLYNwB8EK4CMAQABKwDAAE3GPgE9MLYgH7YqwABL0wEAASeiyAA/SbZWHLZcgLZawB8EK4FbAQABkwDAAE3RPTC2Yh+2bMAAS+gEAASAtn3AHwQrlCsnosgAP0m2mRy2n4C2ncAfBCuAjAEAAZQAwABNxkq2pQGTP062t7a5AACK82ADwABMogEuSbbFIhy2zIG2ysAfBMOAuwEAAZMAwABN0AEctteBttXAHwTDgV4BAAGAttrAHwQrAMAATdM9ibbewB8Ewxy24IG23sAfBMOGeAEAAYC248AfBCsAwABNyz9JtuoctvCBtu7AHwTDgIwBAAGUAMAATcZKtvYBlD9JtwQiHLcLgbcJwB8Ew4CMAQABkwDAAE3GASIWtxeBtxXAHwTDjCzAAEzWABa3I4C3IcAfBCuMLMAATNY+AT0wtzQetz7AAExtAQABJ6LjAD9Kt2IBHrdpwABIzQMAA4C3dMAfBCuBt3fAHwTDKQAGwABI6oCxt7a3urjNAACi+gAAAAEDt724zQAAAAEBAbfCAAAAgh1gA8AATKIAAGADwABMogE+B0m3zxy32YC308AfBdmAjAEAASsAwABNxj4BPTC36h+39MAAS9MBAAEngh0AP064IrgkAACEhGADwABMogEcuCsuju8AAAAAwABI1U64Org8AACMMmADwABMogEcuESAuD7AHwXZju8AAAAAwABMxkm4Txy4VYG4U8AfBh+AjAEAAZMAwABNxkq4WwGCuGLAHwY9P0m4aRy4b4K4bcAfBj2AjAEAAZMAwABNxkq4dQGBuHzAHwYfP0m4gyIcuIqBuIjAHwYfgIwBAAGUAMAATcYBHLiWgriUwB8GPYCMAQABlADAAE3GSridAZQ/SrirAR64ssAASM0DAAOBuL3AHwYfgrjAwB8GPSoAAAAe2jMAHtqcAB7bBQAe224AHtwgAB7ciwAe3TIAHt2PAB7d+AAe3mEAHt7KAB7fHwAe324AHt+9AB7gDAAe4FsAHuCqAB7g+QAe4UgAHuGXAB7h5gAe4jUAHuKEAB7jBQAe424AHuPXAB7kPgAe5KkAHuUnAB7lpQAe5fQAHuaDAB7m0gAe5yYAHueSAB7n2wAe6BIAHug/AB7oegAe6KcAHujUAB7pQQAe6fUAHuxDAB7scgAe7KEAHuzQAB7s/wAe7TsAHu13AB7tswAe7e8AHvASAB7wQQAe8IgAHvDmAB7xTQAe8asAHvUTAB74AQAe+kwAHv0oAB8ECwAfBbkAHwb7AAAAQALAAEj1gLG40rjywABYVAOj4QFquNNgA8AASp8DAAFgA8AASKwAAAUEwABI+ICxu8/AAEFHBqPiwABGOQBdA8AATUYBYAPAAEyiAWq73V0DwABNRgFgA8AATKLAAF1HBMAASPmAscAAQZzAAEdABqPjwABGOQBdA8AATUYBYAPAAE6JAWrAAEGwXQPAAE1GAWADwABOicAAYTUEwABI+oCxwABHlMAAR6gGpKfAAEY5AGADwABMogFqwABHoGADwABMosAAZFoEwABI+4CxwABHvcAAR9IGpKjAAEY5AGADwABMogFqwABHyWADwABMosAAZGAEwABI/ICxwABH58AAR/0GpKnAAEY5AGADwABMogFqwABH82ADwABMosAAZGYACwbAAEj/gLG5GrkiuVYEAYtfwABGOQAAAAEDuTa5VgAAAAAAAABgA8AASPUBPgE9MLk/J4tgBsAASQGAsblbuWO5cwEAghwAAAABA7lsuXMAAAAAAAAAYAPAAEyiAUq5bwEuBsAASQOAsbl3uX+5mAEAozXAAEY5AAAAAQO5kbmYAAAAAAAAAGADwABMogFKuZQBLgbAAEkGgLG5nLndufcDBIDYAmq5nWADwABKn4NyagBgA5QIwABkbwAAAQO53rn3AAAAAAAAAGADwABMogAGwABJBICxufu6N7pXAQSDvwJqufxgA8AASp+DcmoAYAOUCMAAZH0AAAEDukG6VwAAAAAAAABgA8AATKIABsAASQeAsbpcumm6kwMAgKEAAAABA7pqupMAAAABAQG6bwAAAIIdYAPAAEyiAABgA8AATKIBSrp5ARy6f4C6ecAfClSjzMAARjkBAAEuAMAATK0GwABJCYCxupi60LsFAASjzMAARjkCarqZYAPAAEqfg3JqAGADlAjAAGSLAAABA7reuwUAAAABAQG65AAAAIIdYAPAAEj1AABgA8AATKIABsAASQqAscAASITAAEiPwABK2gABpK3AAEY5AAAAAQPAAEikwABK2gAAAAEBAcAASKkAAACkrlsAAGADwABMogE+CUnAAEkpJsAASTEFHMAASTGAwABJLcAfCwSAuwEAATeD6AAAYAPAAErYSsAASTkBlj9JwABJRybAAElPBRzAAElPgMAASUvAHwsEgLsBAAE3pxAAAGADwABK2ErAAElYAZc/ScAASWYmwABJbgUcwABJboDAAElqwB8LBIC7AQABasAASXBgA8AATKLAAGRaAABgA8AAStg+A0nAAEmDJsAASYsFHMAASYuAwABJh8AfCwSAuwEAATfAAYagAABgA8AASthKwABJlQE3BT9JwABJpSbAAEmtBRzAAEmtgMAASanAHwsEgLsBAAE3wA9CQAAAYAPAAErYSsAASbgBNwY/SsAAScgBNwc/ScAASdwmwABJ5AUcwABJ5IDAAEngwB8LBIC7AQABasAASeZgA8AATKLAAGRgAABgA8AASthKwABJ8QE3CD9JwABJ/ybAAEoHBRzAAEoHgMAASgPAHwsEgLsBAAFqwABKCWADwABMosAAZGYAAGADwABK2ErAAEoUATcJPz2IwABKIsAfCwQcwABKLIDAAEoowB8LBIaSAQABasAASi9gA8AATKLAAGRmAABJwABKdibAAEp+BRzAAEp+gMAASnrAHwsEgLsBAAE3CgAAYAPAAErYSsAASoQBNwo/ScAASpMmwABKmwUcwABKm4DAAEqXwB8LBIC7AQABN2QAAGADwABK2ErAAEqiATcLP0rAAEqxARzAAEq6NwmBDQEAAR7AAEq8wABJCgEAAYDAAErSwB8LBAAAwABNyAbAAEkNgLHAAErfwABK5sAAT0QAAIDvAAAAAQPAAEruwABPRAAAAAAAAABgA8AATokBPglJwABK9yIcwABLAC6AuwEAATdkAMAASNAAHMAASw4ugowBAAEcwABLEDdkg+sAAAAAwABMxQDAAEjRSsAASxYBHMAASy5qwABLHV0DwABNRgFgA8AATonAAGE1gtEBAAEmwABLNAEcwABLNC6BDQEAATdjAMAASLFgA8AATKIAwABNVT9JwABLPxzAAEtILoC7AQABkwDAAEjQSsAAS00BHsAAS1TAAEkMAQABLgA/TsAATEDAAExHAACByGADwABMogEewABMScAASQoBAAEuAE7AAEx5wABMgAAAgOZgA8AASggBHsAATJHAAEoZAQABgMAATJvAHw5AAE7AAEyswABMsgAAgd1gA8AATKIBHMAATLuAwABMtMAfDkCBBgEAAZQAwABNyU7AAEzIwABMzAAApK5gA8AASPUBLkTAAEzYPgZOwABNBsAATRAAAKSvYAPAAE25ARzAAE0Wg8AATRLAHw65ol4BAAE3ZADAAEi7PYvAAE0swB8OuSbAAE0sARzAAE02g8AATTLAHw65hpIBAAE3ZADAAEi0YAPAAEj1TsAATUjAAE1TAACiZWADwABMogEmwABNSAEcwABNX4TAAE1VwB8O1YPGAQABlQDAAE3KYAPAAEyiPRzAAE1xgcAATWrAHw5io97AAEY5AgACgsAATXjAHw6MHMAATYpqwABNf10DwABNRgFgA8AATKLAAF1HgtEBAAEcwABNloXAAE2LwB8PM4ENAQABlADAAE3IAMAATVUAwABKGz0cwABNqoHAAE2jwB8OYqPewABGOQIAAhzAAE23gsAATbHAHw6MgQYBAAGUAMAATckcwABNx2rAAE28XQPAAE1GAWADwABMosAAXUeC0QEAAYXAAE3IwB8PMwDAAE1VAMAAShs9isAATdzAHw6MHMAATeKCwABN3MAfDoyBBgEAAZUAwABNyRzAAE35g8AATfXAHw65gV4BAAE3ZADAAEjSScAATgYcwABODoPAAE4KwB8OuYC7AQABNwoAwABI0D4BPRzAAE5EgcAATj3AHw5io97AAEY5AgACgsAATkvAHw6MJsAATl0BHMAATl1qwABOUmADwABMooRjgQ0BAAGDwABOX8AfDrkAwABNyGADwABMogDAAEobPgNOwABOocAATqwAAKJlYAPAAEyiASbAAE6hARzAAE6yg8AATq7AHw65g8YBAAGVAMAASLNgA8AATKI9HMAATsSBwABOvcAfDmKj3sAARjkCAAKCwABOy8AfDowcwABO3WrAAE7SXQPAAE1GAWADwABMosAAXUeC0QEAARzAAE7phMAATt7AHxDrgQ0BAAGUAMAATcgAwABNVQDAAEobPRzAAE79gcAATvbAHw5io97AAEY5AgACHMAATwqCwABPBMAfDoyBBgEAAZQAwABNyRzAAE8aasAATw9dA8AATUYBYAPAAEyiwABdR4LRAQABhMAATxvAHxDrAMAATVUAwABKG0rAAE8zAYHAAE86wB8OYgbAAEkLgLHAAE/MwABP18AAUlIAAaSwwABGOQAAAAEDwABP7MAAUlIAAAABAQHAAE/xAAAApLFbAABgA8AATKIBPglJwABQcybAAFB+BRzAAFB+gMAAUHfAHxIogowBAAEcwABQgDeD6IPrAAAAAMAATMUAAGADwABK2ErAAFCHAZY/ScAAUJUmwABQoAUcwABQoIDAAFCZwB8SKIKMAQABHMAAUKI3pxCD6wAAAADAAEzFAABgA8AASthKwABQqgGXP0nAAFC4JsAAUMMFHMAAUMOAwABQvMAfEiiCjAEAARzAAFDFasAAUMZgA8AATKLAAGRag+sAAAAAwABMxQAAYAPAAErYPgNJwABQ2SbAAFDkBRzAAFDkgMAAUN3AHxIogowBAAEcwABQ5jfAAYagg+sAAAAAwABMxQAAYAPAAErYSsAAUO8BNwU/ScAAUP8mwABRCgUcwABRCoDAAFEDwB8SKIKMAQABHMAAUQw3wA9CQIPrAAAAAMAATMUAAGADwABK2ErAAFEWATcGP0rAAFEmATcHP0nAAFE6JsAAUUUFHMAAUUWAwABRPsAfEiiCjAEAARzAAFFHasAAUUhgA8AATKLAAGRgg+sAAAAAwABMxQAAYAPAAErYSsAAUVMBNwg/ScAAUWEmwABRbAUcwABRbIDAAFFlwB8SKIKMAQABHMAAUW5qwABRb2ADwABMosAAZGaD6wAAAADAAEzFAABgA8AASthKwABRegE3CT89iMAAUYjAHxIoHMAAUZiAwABRkcAfEiiGkgEAAWrAAFGbYAPAAEyiwABkZgAAScAAUeMmwABR7gUcwABR7oDAAFHnwB8SKIKMAQABHMAAUfA3CoPrAAAAAMAATMUAAGADwABK2ErAAFH1ATcKP0nAAFIEJsAAUg8FHMAAUg+AwABSCMAfEiiCjAEAARzAAFIRN2SD6wAAAADAAEzFAABgA8AASthKwABSFwE3Cz9KwABSJgEcwABSLzcJgQ0BAAEewABSMcAASQsBAAGAwABSR8AfEigAAMAATcgGwABJDICxwABS6MAAUvbAAFhSAAGkssAARjkAAAABA8AAUwfAAFhSAAAAAQEBwABTDAAAAKSxYAPAAEyiAABgA8AATokBPglJwABTmRzAAFOkgMAAU53AHxU1gowBAAEcwABTpjcKg+sAAAAAwABMxQDAAE3SPgFKwABTswE1wABTyQAAAQBgA8AASggBHsAAU8nAAEoZAQABlQA1wABT4AAAAQBcARzAAFPggcAAU8nAHxWGo97AAEY5AgACk2rAAFPqYAPAAEyihFoAwABKGzXAAFQAAAABAFwBHMAAVACBwABTycAfFYaj3sAARjkCAAKUHMAAVBVqwABUCmADwABMooRjgQYBAAGAwABUF8AfFTUAwABNyQDAAEobgcAAU8nAHxWGP0nAAFQqHMAAVDWAwABULsAfFTWCjAEAARzAAFQ3N2SD6wAAAADAAEzFAMAATdI+Ak7AAFRJwABUVAAAomVgA8AATKIBHMAAVFiVg8YBAAEcwABUWoDAAFRbwB8VNYPrAAAAAMAATMUAwABNykrAAFRpATXAAFR/AAABAGADwABKCAEewABUf8AAShkBAAGWADXAAFSWAAABAFwBHMAAVJaCwABUf8AfFqKj3sAARjkCAAKTasAAVKBgA8AATKKEWgDAAEobNcAAVLYAAAEAXAEcwABUtoLAAFR/wB8WoqPewABGOQIAApQcwABUy2rAAFTAXQPAAE1GAWADwABMosAAXUeC0QEAAYHAAFTMwB8WYADAAE1VAMAAShs1wABU4wAAAQBcARzAAFTjgsAAVH/A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gq1gA8AATKIWBMAASSGAsoLDgs0GpLrAAEY5AGADwABMogFqgsxgA8AATKJMBMAASSKAsoLigvAGpLvAAEY5AGADwABMogFqgu9gA8AATKIYBMAASSOAsoMFgxQGpLzAAEY5AGADwABMogFqgxNgA8AATKIaBMAASSSAsoMpgzcGpL3AAEY5AGADwABMogFqgzZgA8AATKJMBMAASSWAsoNMg24GpL7AAEY5AGADwABMogFqg2tgA8AATKKF8QTAAEkmgLKEDIQYBqS/wABGOQBgA8AATKIBaoQXYAPAAEyiGgTAAEkngLKELYQ3BqTAwABGOQBgA8AATKIBaoQ2YAPAAEyiFATAAEkogLKETIRXBqTBwABGOQBgA8AATKIBaoRWYAPAAEyiFgTAAEkpgLKEbIR8BqTCwABGOQBgA8AATKIBaoR7YAPAAEyiTATAAEkqgLKEkYSfBqTDwABGOQBgA8AATKIBaoSeYAPAAEyiGATAAEkrgLKEtITNBqTEwABGOQBgA8AATKIBaoTDYAPAAEyiTATAAEksgLKE4oTxBqTFwABGOQBgA8AATKIBaoTwYAPAAEyiTATAAEktgLKFBoUqBqTGwABGOQBgA8AATKIBaoUnYAPAAEyihfEEwABJLoCyhYmFmwakx8AARjkAYAPAAEyiAWqFmmADwABMohoEwABJL4CyhbCFugakyMAARjkAYAPAAEyiAWqFuWADwABMohQEwABJMICyhc+F5AakycAARjkAYAPAAEyiAWqF42ADwABMohYEwABJMYCyhfmGDwakysAARjkAYAPAAEyiAWqGDmADwABMokwEwABJMoCyhlKGXxiky8AARjkAYAPAAE6JAATAAEkzgLKGaIZ8GKTMwABGOQBdA8AATUYBWwAEwABJNICyhoWGjxiIUsAARjkAXQPAAE1GAVsABMAASTWAsoaYhqoYpM3AAEY5AGADwABK2AAEwABJNoCyhrKGyhikzsAARjkAYAPAAEyiAATAAEk3gLKHIoctGKTPwABGOQBgA8AATvsABMAASTiAsoc1hzoYiEnAAEY5AGADwABMogAEwABJOYCyh0mHVxiNB8AARjkAXQPAAE1GAWADwABPBwAEwABJOoCyh2CHdBik0MAARjkAXQPAAE1GAVsABMAASTuAsoeNh5wYpNHAAEY5AF0DwABNeAJgA8AATvtbAAMFwABJT4Cyh6GHoYibAKTSwABGOQADh7yImwAAAAUFBYfCAAAEpM9gA8AATvsAh9QAAASISWADwABMogCH4AAABI0HXQPAAE1GAWADwABPBwCH+wAABKTQXQPAAE1GAVsAiBYAAASk0V0DwABNeAJgA8AATvtbAABgA8AASRsBPgM9IxyIPBaILS6NB8AARjnAAEk5gIwBAAErAMAATXAXiC0ujQfAAEY5aohAXQPAAE1GAWADwABPB4CYwABJOSsBXQPAAE1GAWADwABPBz0jHIhpFohULqTQwABGOcAASTqAjAEAASsAwABNcBeIVC6k0MAARjlqiG1dA8AATUYBW4CgwABJOisBXQPAAE1GAVs9IxyIixaIey6k0cAARjnAAEk7gIwBAAErAMAATfwXiHsupNHAAEY5aoiPXQPAAE14AmADwABO+1uAo8AASTsrAV0DwABNeAJgA8AATvtbCwgBwABJNisIAcAASTUrCAHAAEk0KwgBwABJMysIAcAASTIrCAHAAEk3gADAHyIRCAHAAEk4gQDAHyIfCAHAAEk5ggDAHyItCAHAAEk6gwDAHyJCCAHAAEk7hADAHyJSCQGHocAATgUAAAAABcAASVGAspb+lv6XpQAAAAOXD5elAAAABgUGlxUAAASky2ADwABOiQCXKQAABKTMXQPAAE1GAVsAl0oAAASIUl0DwABNRgFbAJdbAAAEpM1gA8AAStgAl3QAAASISWADwABMogCXhwAABKTOYAPAAEyiAWqXomADwABMohoAYAPAAEkbAT8LCAHAAEk7KwgBwABJOisIAcAASTkrCAHAAEk3KwgBwABJMoAAwB8j2AgBwABJM4EAwB8j5ggBwABJNIIAwB8j9ggBwABJNYMAwB8kBggBwABJOIQAwB8kFAgBwABJNoUAwB8kIgkBlv7AAE4FAAAAAAXAAElQgLKXqpeqmGwApNPAAEY5AAOXyJhsAAAABgUGl84AAASky2ADwABOiQCX4gAABI0HXQPAAE1GAWADwABPBwCX/QAABKTQXQPAAE1GAVsAmBgAAASk0V0DwABNeAJgA8AATvtbAJguAAAEpM1gA8AAStgAmE4AAASkzmADwABMogFqmGlgA8AATKIaAGADwABJGwE/CwgBwABJNCsIAcAASTMrCAHAAEk4KwgBwABJNysIAcAASTKAAMAfJNQIAcAASTmBAMAfJOIIAcAASTqCAMAfJPcIAcAASTuDAMAfJQcIAcAASTWEAMAfJR0IAcAASTaFAMAfJSsJAZeqwABOBQAAAAANBsAAST6AsoigiKWKxgAApNTAAEY5AAAAAQOIuorGAAAAAAAAAFwBPgI9IxyIyRaIwy6IScAARjnAAEk4gIwBAAErAMAATcYXiMMuiEnAAEY5k8AASTgrAWADwABMokmI1ByI5haI2C6ky8AARjnAAEkyiJoBAAEnpNUAwABOmz4CPReJAi6IScAARjkciQgWiQIuiEnAAEY5wABJOICmAQABaokLYAPAAEyiFADAAEy7wABJOD0XiRoupM/AAEY5H4ksl68BAAEciVYWiUgupMvAAEY5wABJMoYTAQABlwDAAE6fAMAASTdJiXAciYIWiXQupMvAAEY5wABJMoiaAQABJ6TWAMAATps+Aj0XiZ4uiEnAAEY5HImkFomeLohJwABGOcAASTiApgEAAWqJp2ADwABMohYAwABMu8AASTg9F4m2LqTPwABGOR+J0pevAQABHIoJHIn8FonuLqTLwABGOcAASTKGEwEAAZcAwABOn4ENAQABJ4Z6AMAATp4AwABJNz4CPReKJC6IScAARjkciioWiiQuiEnAAEY5wABJOICmAQABIxaKNy6kzcAARjnAAEk1HIplHIpUaopNYAPAAEyiFINxAQABaopXYAPAAEyiTADAAEy+gKYBAAFqimdgA8AATKIaAMAATLtqinFgA8AATKIaAWADwABMogDAAEy7wABJOD0XioAupM/AAEY5H4qSl68BAAEWiq4upMvAAEY5wABJMgDAAEk3BsAASUOAsorLitaLQQEAjNYAAAABA4rhi0EAAAAAAAAAYAPAAE77AT4CSYrnHIr3ForrLqTPwABGOcAASTeAjAEAASsAwABPBj4BPRyLCC6k1MAARjkAAAAAwABJPj9KiysBFosyLqTPwABGOcAASTcGwABJRYCyi0aLTovhAQCk18AARjkAAAABA4tbi+EAAAAAAAAAYAPAAEyiAT4CTotli3EAAKTYYAPAAEyiASaLZQUci4cWi3MupMzAAEY5wABJM4LRAQABaouIYAPAAEyiGgDAAE1VYAPAAEyiSoudASMci7CAi6TAHyiMgIwBAAGTAMAATcYWi7cupM7AAEY5wABJNoCL0sAfKIwBYAPAAEyiBsAASUaAsovmi/WNvwEAjS4AAAABA4wDjb8AAAAAAAAAXQPAAE1GAWADwABPBwE+AkmMCRyMHBaMDS6NB8AARjnAAEk5gIwBAAErAMAATXA+AkmMLRyMPhaMMS6k18AARjnAAElFgIwBAAGTAMAATcY+AUqMTgEXjFUujQfAAEY5aoxmXQPAAE1GAWADwABPB4CYwABJOT89F41YLo0HwABGOR6NacAAST8CAAIcjYgWjX4uiFLAAEY5wABJNILRAQABkwDAAE1VFo2NLqTXwABGOcAASUUAwABJOT9KjaYBFo2tLo0HwABGOcAASTkGwABJP4CyjhSOJo6TAAWk2cAARjkBagBgA5QIwABktQAAAQOOOo6TAAAAAgICjjsAAACNLlsAjk4AAACk22ADwABMogAAXQPAAE1GAWADwABPBwAGwABJR4CyjpiOoZEXAQCM1wAAAAEDjrWRFwAAAAAAAABdA8AATUYBWwE+AkmOuxyO1BaOvy6k0MAARjnAAEk6gIwBAAErAMAATXA+BE6PXI9zAACM2WADwABMogEmj1wFHI+dHI+JFo91LqTMwABGOcAASTOC0QEAAWqPimADwABMohYAwABNVYEGAQABlAAAYAPAAEyiSY+oHI/DgI+swB8qkYCMAQABkwDAAE3GPgFKj9MBF4/aLqTQwABGOWqP8V0DwABNRgFbgKDAAEk6P06QS5BZAACk3GADwABMogEjHJBoFpBbLqTXwABGOcAASUWCjAEAAZMAwABN0pSTAWADwABMoj0XkHsupNDAAEY5HpCWwABGpgMBWwMWkLYuiFLAAEY5wABJNByQ0IGQwsAfKxWBDQEAAZQAwABNyICQ1cAfKpEAwABJOj9KkPgBFpD/LqTQwABGOcAASToGwABJSICykRyRNZTjAQCM2AAAAAEDkUSU4wAAAAAAAABdA8AATXgCYAPAAE77WwE+AkmRShyRXhaRTi6k0cAARjnAAEk7gIwBAAErAMAATfw+CE6Rc5GAAACM22ADwABMogEmkXMFHJGfHJGWFpGCLqTMwABGOcAASTOC0QEAAWqRl2ADwABMohQAwABNVYEGAQABlAAAYAPAAEyiTpHDkdoAAIzZYAPAAEyiASaRwwUckgQckfAWkdwupMzAAEY5wABJM4LRAQABapHxYAPAAEyiFgDAAE1VgQYBAAGUAABgA8AATKJOkhOSJQAAjNpgA8AATKIBHJI0gJInwB8r9oEGAQABgZI2wB8sQADAAE3JSZJUHJJqgpJYwB8sioCMAQABkwDAAE3GPgFKknoBF5KBLqTRwABGOWqSk10DwABNeAJgA8AATvtbgKPAAEk7P06Sr5K9AACk3GADwABMogEjHJLMFpK/LqTXwABGOcAASUWCjAEAAZMAwABN0pSTAWADwABMoj0Xkt8upNHAAEY5HpL1wABNfwACYAPAAE77WwAAwABJO0WTEwGTHJMeAACDZmADwABMogGTARyTJYSTI8AfLU+AuwEAAYKTJ8AfLIoAwABN0AGMkzrAHy1PHJM7hJM6wB8tT4ENAQABlADAAE3IPgROk02TXQAApN1gA8AATKIBHJNyapNfYAPAAEyiTIENAQABHJN2lYPGAQABhJN4wB8tTwDAAE3KAMAATchOk4qTkwAApN5gA8AATokBJpOKBRyTqRaTlS6kzMAARjnAAEkzgtEBAAGFk6rAHy2bAMAATVVgA8AATolOk8iT0gAApN9bARyT3haT1C6IUsAARjnAAEk0gtEBAAEmk/oBHJP6g5PswB8s9YENAQABJpQQBRyUEBaT/C6kzMAARjnAAEkzgtEBAAEclCGFlBHAHy2bgQ0BAAGUAMAATcgAwABNVWADwABNuQDAAE3IYAPAAEyiAMAATVU9HJQ/FpQwLqTRwABGOcAASTuBDAIAAh+URJevAQABhpRgwB8t1wCHlG3AHy4TAMAATY09F5SGLqTRwABGOR6UnMAATYIBAmADwABO+1sBFpStLqTRwABGOcAASTsAwABJOz9KlMkBFpTQLqTRwABGOcAASTsGwABJSYCylOiU8ZVoAQCM4wAAAAEDlPqVaAAAAAAAAABgA8AAStgBPgJJlQAclQoWlQQuiEnAAEY5wABJOICMAQABKwDAAE3GPgE9HJUbLqTUwABGOQAAAADAAEk+P0qVPgEclVoclUwWlUYuiEnAAEY5wABJOIChAQABapVOYAPAAEyihfEAwABMuoCMAQABapVdYAPAAEyiGgDAAE3GBsAASUqAspVtlXaV7wEApOAAAAABA5WBle8AAAAAAAAAYAPAAErYAT4CSZWHHJWRFpWLLohJwABGOcAASTiAjAEAASsAwABNxj4BPRyVoi6k1MAARjkAAAAAwABJPj9KlcUBIRyV4RyV0xaVzS6IScAARjnAAEk4gKEBAAFqldVgA8AATKKF8QDAAEy6gIwBAAFqleRgA8AATKIaAMAATcYGwABJS4CylfSV/ZZ0AQCMrwAAAAEDlgaWdAAAAAAAAABgA8AAStgBPgJJlgwclhYWlhAuiEnAAEY5wABJOICMAQABKwDAAE3GPgE9HJYnLqTUwABGOQAAAADAAEk+P0qWSgEclmYcllgWllIuiEnAAEY5wABJOIChAQABapZaYAPAAEyihfEAwABMuoCMAQABapZpYAPAAEyiFADAAE3GBsAASUyAspZ5loKW+QEAjL0AAAABA5aLlvkAAAAAAAAAYAPAAErYAT4CSZaRHJabFpaVLohJwABGOcAASTiAjAEAASsAwABNxj4BPRyWrC6k1MAARjkAAAAAwABJPj9Kls8BHJbrHJbdFpbXLohJwABGOcAASTiAoQEAAWqW32ADwABMooXxAMAATLqAjAEAAWqW7mADwABMohYAwABNxgbAAElAgLKYcZicmaIAAaThwABGOQFqmHJgA8AASp+CpQAAAQOYtZmiAAAABQQFmL0AAACMz2ADwABOiQCY1gAAAKTiXQPAAE1GAVsAmPAAAACIT10DwABNRgFbAJkAAAAApONgA8AAStgAmR4AAACF2WADwABMogFqmSVgAcAATawCAFsBPgFKmTIBH5k9wABJUQUABYCZWMAfMbWBmWbAHzHDgpl7wB8x04OZhsAfMeOEmZnAHzHxAAbAAElBgLKbLJtXnIIAAaTkwABGOQFqmy1gA8AASp+CpQAAAQObepyCAAAABQUFm4kAAACMz2ADwABOiQCbogAAAKTiXQPAAE1GAVsAm8IAAACIT10DwABNRgFbAJvXAAAAhdlgA8AATKIAm+cAAACk5WADwABMogAAWwE+AUqcBgEfnBHAAElRBgAGgJwjwB8yb4GcMcAfMn2CnEbAHzKNKoOcYMAfMp2EnGbAHzKrAAAAHyW+AB8n7AAfKF0AHykAAB8p7wAfKkMAHyuiAB8vBQAfL6UAHzBGAB8w5gAfMYYAHzJAAB8y8QAAAA0CwABJUoCzgUqBaoINA6TmAWqBS2ADwABKnwMAAWADwABN7wAAAAADBsAASVWAs4F9gYWBwwQBi1/AAEY5AAAAAQOBo4HDAAAAAAAAAGADwABJUgE+AT0wgawni2AGwABJV4CzgciBzYHfAACk5wAAAAEDgdWB3wAAAAAAAABgA8AAStgBSoHbASkGwABJWICzgeSB5IILAACNigAAAAEDge+CCwAAAAAAAABbAUqB9QEegfmBKwEBYAPAAErYASkAAAAfM1YAHzOLAB8zuAAfM+8AAAADAsAASVmAtJKlkquVDgOk6AAAAV0DiY8BYAPAAElZAAAFBMAASVuAtJLzkvoJpOkAYAPAAE6JAATAAElcgLSTCZMSCaTqAGADwABK2AAEwABJXYC0kyGTLgmiUABgA8AAStgABMAASV6AtJM9k0QJpOsAYAPAAErYAATAAElfgLSTU5NZCaTsAGADwABK2AABBcAASWWAtJNek16TvwAAAAOTbJO/AAAABQUFk3IAAASk6WADwABOiQCTgAAABKTqYAPAAErYAJOQAAAEolBgA8AAStgAk6QAAASk62ADwABK2ACTuAAABKTsYAPAAErYAABgA8AASVkBPwYIAcAASVuAAMAfNK8IAcAASVyBAMAfNL0IAcAASV2CAMAfNMsIAcAASV6DAMAfNNkIAcAASV+EAMAfNOcJAZNeiZ4AAAAAAgbAAElhgLSTxJPMk+gBAIIcAAAAAQOT1ZPoAAAAAAAAAGADwABMogFKk9gBFpPgFpPYLqTpwABJW4IcwABOjgbAAEljgLST7JP6lQwDAICMAAAAAQOT/JUMAAAAAQEBk/0AAACk7VsAAGADwABK2AE+AUqUCQEiIiIiIiWUFgCAlBHAHzWlYAPAAElZAByUQhaUOi6k6cAASVuAjAEAARaUShSURcAfNaUAAWADwABJWaTpwABJWwDAAE6YAByUbhaUZC6k6sAASVyAjAEAARaUdhSUccAfNaUAAWADwABJWaTqwABJXADAAE38AByUoBaUki6iUMAASV2AjAEAARaUqBSUo8AfNaUAAWADwABJWaJQwABJXQDAAE38AByU0BaUyC6k68AASV6AjAEAARaU2BSU08AfNaUAAWADwABJWaTrwABJXgDAAE38AByU+RaU8i6k7MAASV+AjAEAARaVARSU/MAfNaUAAWADwABJWaTswABJXwDAAE38AAAfNUYAHzWFAB82wgAAAAICwABJZoC0lZ6VpJYXA6TuAAABYAPAAE3vAAACBMAASWiAtJXHlc0JpO8AYAPAAEmE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sNGw9wAAAAMDA7DXAAAEpRpgA8AASYQAsOEAAASlG2ADwABOiQCw7AAABKPEYAPAAEyiAABgA8AASagBPwQIAcAASa2AAMAfTCYIAcAASauBAMAfTDQIAcAASayCAMAfTEIJAbC+wABOBQAAAAAEBsAASbCAtLD8sQyxHwEAgQoAAAABA7EUsR8AAAAAAAAAYAPAAE4zAUqxFwEWsRcugsXAAEY5wABJrgbAAEmzgLSxJLEwsXMAAYfnwABGOQAAAAEDsUCxcwAAAAEBAbFFAAAAi49gA8AATKIAAGADwABK2AE+AUqxTgEiHLFXgLFVwB9M6YFeAQABN8AA2AAAwABN0wAcsWaAsWTAH0zpgVsBAAE3wADb/wDAAE3RBsAASbSAtLF4sYSxyAABpR3AAEY5AAAAAQOxlbHIAAAAAQEBsZoAAACLj2ADwABMogAAYAPAAErYAT4BSrGjASIcsayAsarAH01dgV4BAAE3wADcAADAAE3TAByxu4CxucAfTV2BWwEAATfAAN//AMAATdEGwABJtYC0sc2x0rVsAACBCQAAAAEDsdq1bAAAAAAAAABgA8AAStgBPgVJseMcsesWsecupRrAAEY5wABJrYCMAQABKwDAAE38SrH0ASo/SbInHLI2FrIrLqPEwABGOcAASayBWwEAARayPhayOS6lG8AARjnAAEmrgcjAAE6NAMAATdE+Ak6yUrJYAACEUV0DwABNRgFbARyyXhayWi6lGsAARjnAAEmtpQTAAEY5AgACFrJsLqUbwABGOcAASasWsnIuo8TAAEY5wABJrADAAEmSSbKFIRyyj4CyicAfTjSAjAEAASsAwABNcD4EPReyoi6CxcAARjkfsrHAAEmDAwADFrLALqUawABGOcAASa0WssUupRvAAEY5wABJqyayywGAssvAH040XQPAAE1GAWADwABMogDAAEmuPRey2y6jxMAARjkWsvEWsugugsXAAEY5wABJroRUwABOD8AASaxJsv4csw0WswIuo8TAAEY5wABJrICMAQABFrMZFrMQLoLFwABGOcAASa5twABODgDAAE3GPgJJtAIiIiIWtAoWtAYupRrAAEY5wABJraUOwABJmAActDQctDAWtCUuo8TAAEY5wABJrIENAQABlADAAE3IgLsBAAEWtDsWtDYupRvAAEY5wABJq4HIwABOjQDAAE3QAB60U8AASbMBAAEctGkWtGQupRvAAEY5wABJq4XQAQABFrR0LqPEwABGOcAASawAwABOlwAAHrSSwABJtAEAARy0qRa0pC6lG8AARjnAAEmrhdABAAEctL8WtLQuo8TAAEY5wABJrIENAQABlADAAE3IAMAATpcAPgE9F7TULqPEwABGORy03ha01C6jxMAARjnAAEmsgQ0BAAGUAMAATcjAAEmsPz0XtPguo8TAAEY5HLUCFrT4LqPEwABGOcAASayBDQEAAZQAwABNyMAASaw/SrUYASk/Pz0XtTcugsXAAEY5K8AASa49F7VMLqUawABGOSvAAEmtSrVcASoAAB9MiwAfTMUAH005AB9NrQAfUKEAAAAEAsAASbiAtYE0gVSBpwOlHgFqgTVgA8AASp8DAAFgA8AATe8AAWADwABOXQABBcAASboAAAAABAAAAwAAAAAAAAAAAGADwABJuAE/AQkBAMAATgUAAAAAAAAAH1ESAAAAAALAAEm7gLaG54b2wAB7FgelHwAAAWADwABN7wABYAPAAE6JBwTAAEm+gLaKJIo0BqUgwABGOQBgA8AATKIBaooyYAPAAEyiiBEEwABJv4C2ioSKrAalIcAARjkAYAPAAEyiAWqKqWADwABMooXhBMAAScCAtorriwgGpSLAAEY5AGADwABMogFqivlgA8AATKKF4QTAAEnBgLaLHYtLBqUjwABGOQBgA8AATKIBaos+YAPAAEyihD8EwABJwoC2i5yLwgalJMAARjkAYAPAAEyiAWqLv2ADwABMosAAZpQEwABJw4C2jGuMgwalJcAARjkAYAPAAEyiAWqMgWADwABMooQ8BMAAScSAto1QjXgGpSbAAEY5AGADwABMogFqjXVgA8AATKKMFgA9BsAASceAtocYhx2HOAACpSfAAEY5AAAAAQOHKoc4AAAAAQEBhy8AAACGV2ADwABMogAAYAPAAErYAAbAAEn9gLaNfY2FjesEAYtfwABGOQAAAAEDjaCN6wAAAAAAAABgA8AASbsBPgE9MI2pH42zwABMMAEAASelKAAGwABJ/4C2jfCOLI5QAQSCHAJqjfFgA8AASp+DcmoAYAOUCMAAZp0AAAEDjjWOUAAAAAAAAABgA8AATKIABsAASgGAto5VjpGOvgEEozXAAEY5AmqOVmADwABKn4NyagBgA5QIwABmnQAAAQOOo46+AAAAAAAAAGADwABMogAGwABKAoC2jsOOzI+oAQClKsAARjkAAAABA47Xj6gAAAAAAAAAYAPAAErYAT4CTo8vjzIAAIDcYAPAAEyiAR6PPJP3AQABLgBKj00BIhyPV4CPVMAfU22AjAEAARqPYpPzAMAATcYBHI+BgI9+wB9TbYCMAQABGo+Mk/AAwABNxgbAAEndgLaRGZEnlv8AAaUrAAAAAQOROpb/AAAABAQEkVAAAAClLF0DwABNBAFgA8AATKIAkV8AAABtYAPAAEyiAJFqAAAAhFRgA8AATKIAkXMAAACbZmADwABMogAAYAPAAE6JAT4NSZGAHJGKgZGEwB9T84CMAQABKwDAAE3GPTCRkx+RncAAS9MBAAEnbQA/SZHBHJHPgJHFwB9T3oCMAQABKwDAAE38PTCR2B+R4sAAS9EBAAGAkfDAH1PeAD9OkkOSSAABpS1gA8AATKIBHpJSk/cBAAGAkljAH1PeAEmSaCIiIRyScoSSbcAfVICAjAEAARqSfZPvAMAATcYAIRySmISSk8AfVICAjAEAARqSo5PxAMAATcYAIRySzISSx8AfVICAjAEAARqS15PyAMAATcY+AUmS8yWTAQCAkvfAH1PeYAOsFz4CPYqTGcAfVAAekyrAAEvfAwADgZM6wB9T84KTQcAfVAAWk1AUk0bAH1PeAAFgA6wXgcjAAE12AEqTYQEek2jAAEnKAwADFJN9wB9T3gABYAOsF4GTiMAfU/Mck5OCk4/AH1QAgQYBAAGBk5XAH1PzAMAATckASZOqISWTuACAk67AH1PeYAOsNj4BSpPSAR6T2cAASckDAAOAk/PAH1PegZP+wB9T84KUBcAfVAAAPz9OlCGUKwAApS5gA8AATKIBFpQ3gJQtwB9T3oHIwABNJz2KlEPAH1QAHpRUwABL3wMAA4GUZMAfU/OClGvAH1QAhZRwwB9VuwBOlIaUigABjh9gA8AATKIBHJSQgpSMwB9UAIEGAQABgZSSwB9T8wDAAE3JSZSdHJSlhpShwB9WA4CMAQABkwDAAE3GSpSrAScAPz0jHJTAg5S6wB9UDoCMAQABKwDAAE3Gi5S6wB9UDh6UxMAAScgDAAMmlNMBgJTTwB9T3l0DwABNRgFgA8AATKKBlN7AH1PzgpTlwB9UAAArAWADwABMokmU7xyU+YOU88AfVA6AuwEAAZMAwABN0D4BPTCVBh+VEMAAS9EBAAGAlR7AH1PeAD9JlTQclT6DlTjAH1QOgVsBAAFqlUFgA8AATKKGfwDAAE3RPgFKlVUBHpVcwABJygMAAyaVcQGAlXHAH1PeXQPAAE1GAWADwABMooGVfMAfU/OGlYPAH1YDAD9JlZMclZ2DlZfAH1QOgVsBAAFqlaBgA8AATKKF5QDAAE3RPgFKlbMBHpXJwABKLAMAAyaV4gGAleLAH1PeXQPAAE1GAWADwABMooGV7cAfU/OClfTAH1QAAD9KlsgBHpbPwABJywMAAyaW5QGAluXAH1PeXQPAAE1GAWADwABMooGW8MAfU/OClvfAH1QAAAbAAEnIgLaXBJcPmAwAAaUvwABGOQAAAAEDlx2YDAAAAAMDA5coAAAApSxdA8AATUYBYAPAAEyiAJc3AAAAbWADwABMogCXQgAAAIRUYAPAAEyiAABgA8AATKIBPgNOl1GXVgAAhbpgA8AATKIBk0WXXwGXaJdqAACDZmADwABMogGBl2zAH1f2ARyXdYSXc8AfWDCAuwEAAYKXd8AfWAMAwABN0AGMl3zAH1gwHJd9hJd8wB9YMIENAQABlADAAE3IPgNOl42XkgAAhrVgA8AATKIBHJedgJeUwB9X4YLRAQABhJeewB9YMADAAE1VSZeoISWXsQCFl6zAH1iCYAPAAEj1PTCXux+XxcAAS9EBAAGAl9PAH1fhAD89i5flwB9YHByX6oOX5cAfWByApgEAAYWX7cAfWIIAwABMu0qX/QGDmATAH1gcBsAAScmAtpgRmB+fHQABpTDAAEY5AAAAAQOYOJ8dAAAAAwMDmE4AAAClLF0DwABNBAFgA8AATKIAmF0AAABtYAPAAEyiAJhoAAAAhFRgA8AATKIAAGADwABOiQE+DEmYlyWYpQCAmJvAH1kqXQOVmAFbPgROmM2Y1AAAgchgA8AATKIBFpjggJjWwB9ZKoHIwABNJz2KmO7AH1lMHpj/wABL3wMAA4GZD8AfWT+CmRbAH1lMg5kbwB9ZewBOmTCZPQABpTFdA8AATUYBYAPAAEyiAR6ZTcAATUwCAWADwABMogEcmXAcmWaAmVzAH1kqgc8BAAGCmWvAH1lMAMAATRyB0QEAAYGZdcAfWT8AwABNHgGEDypKmZUBHpmcwABJ3QQABISZsMAfWcOTFpnOhJnBwB9Zw4HIwABNdisAP0maRByaToGaSMAfWT+AuwEAAZMAwABN0D0wmlMfml3AAEvoAwADgZpuwB9ZP5MWmoKAmnjAH1kqgcjAAE0nAD9OmpOalgAAhBBdA8AATT8BYAPAAEyiARaaooCamMAfWSqBCMAATSZFmrABmrmauwAAg2ZgA8AATKIBkwEcmsKEmsDAH1qwgLsBAAGBmsTAH1k/AMAATdABjJrLwB9asByazISay8AfWrCBDQEAAZQAwABNyD4BSZrYIRya4IOa3cAfWoaBCQAAAADAAE1BPgE9MJr2H5sAwABL6AMAA4GbEcAfWT+ThJsbwB9asAA/Tps7AAAApTFdA8AATUYBYAPAAEyiAE6bUZtWAACFumADwABMogGTSZuIHJuQgpuMwB9ZTICMAQABKwDAAE3GPgNOm6WbqgAAhEZdA8AATUYBYAPAAEyiATGbsWADwABMogBDm7scm8WDm8LAH1qGgQkAAAAAwABNQT4DTpvfm+QAAIa1YAPAAEyiARab6YOb5sAfWoaBCsAATUM9jZv6wB9bSxyb/4Wb+sAfW0uApgEAAYecAsAfW7AAwABMuz0cnBWGnBDAH1t2gIIBAAGHnBnAH1uwAMAATVc9jJwuwB9bNR6cPZPRAQFgA8AATKIBhpxWwB9bdgA+A0mccByceIKcdMAfWUyAuwEAAYGcesAfWT8AwABN0D4BPTCcix+clcAAS+gDAAOCnKbAH1lMgZyrwB9ZPxacvICcssAfWSqByMAATScAP06c15zbAACOH2ADwABMogEcnOGCnN3AH1lMgQYBAAGBnOPAH1k/AMAATck9jJzwwB9bNR6dA8AATU4CAWADwABMogKGnRbAH1x9NJ0bA50bndsAAAABAQGdIAAAAINmYAPAAEyiAABgA8AATKIBPgRJnS0hHJ01g50ywB9ahoEJAAAAAMAATUE+AT0wnU0fnVfAAEvoAwADgp1owB9ZTIGdbcAfWT8cnXqBnXTAH1k/gQ0BAAGHnXzAH1zUAMAATcgAP06dlp2bAACGtWADwABMogEWnaCDnZ3AH1qGgQrAAE1DPY2dscAfW0scnbaFnbHAH1tLgKYBAAEUnbnAH11ACAAAwABMu0qdxwEUnc7AH11ACAAATp3snfMAAIHIYAPAAEyiARaeAoSd9cAfWzWByMAATXZJng4cnheFnhLAH1tLgLsBAAGTAMAATdA+AT0wniQfni7AAEvRAQABgJ48wB9ZKgA/Tp5XnmcAAKUyYAPAAErYARyeb4WeasAfW0uBWwEAAWqecmADwABMooZ/AMAATdFJnoOHnofAH13kPgFKnqABHp6nwABJygMAA4SevMAfWzWThp7NwB9dkwA/Sp7gAR6e58AASd0EAASEnvvAH1s1k4afDMAfXZOFnxTAH1tLAAbAAEnKgLafaZ+UocIAAaUzwABGOQFqn2pgA8AASp+RtAAAAQOfqKHCAAAAAwMDn7MAAAClLF0DwABNRgFgA8AATKIAn8IAAABtYAPAAEyiAJ/NAAAAjh9gA8AATKIAAGADwABOiQE+BE6gKKAqAACA+WADwABKCAEeoDvAAEoZAQABgqBFwB9eswBJoHkloIcAgKB9wB9ekWADrBc+AUmgnSIcoKeBoKHAH16mgV4BAAGTAMAATdMAHKCzgqCvwB9es4FeAQABkwDAAE3TPgJFoMMBoMygzgAAg2ZgA8AATKIBkwEcoNWEoNPAH182gLsBAAGCoNfAH16zAMAATdABjKDcwB9fNhyg3YSg3MAfXzaBDQEAAZQAwABNyD4BPRyg74Og7cAfXsyj3sAARjkCAAKEoPbAH182HKECFKD5wB9ekQABYAOsF4LRAQABHKEJgaEDwB9epoENAQABhKELwB9fNgDAAE3IAMAATVUAwABKG0qhIgGDoSnAH17MPz9FoWMBoWyhbgAAg2ZgA8AATKIBkwEcoXWEoXPAH1/ngLsBAAGCoXfAH16zAMAATdABjKF8wB9f5xyhfYShfMAfX+eBDQEAAZQAwABNyD4BPRyhi4OhicAfXsyj3sAARjkCAAKEoZLAH1/nHKGegKGVwB9ekYLRAQABHKGlgaGfwB9epoENAQABhKGnwB9f5wDAAE3IAMAATVUAwABKG0qhtgGDob3AH17MBsAAScuAtqHHodWiQwAFpTTAAEY5AWoAYAOUCMAAZqsAAAEDoeqiQwAAAAMDA6H1AAAApTZdA8AATUYBYAPAAEyiAKIFAAAAbWADwABMogCiEAAAAIRUYAPAAEyiAABgA8AATokABsAASd6AtqJIoliifAMEgtEBagBgA5QIwABmuQAAAQOiWqJ8AAAAAQEBol8AAACB3WADwABMogAAYAPAAE6JAAbAAEnfgLaigaKFopoAAoXQAAAAAQOij6KaAAAAAQEBopQAAACB3WADwABMogAAYAPAAEyiAAbAAEoDgLaiwaMbozsBBIHIA2qiwmADwABKn4NyaqL2YAPAAEqfgrpqAGADlAjAAGbHAAABA6MiozsAAAAAAAAAYAPAAEyiAAbAAEoEgLajQKNxo5oBAIDjAWqjQWADwABKn48eAAABA6N5o5oAAAAAAAAAYAPAAErYAT4BSqN/ARyjkhajiy6ByMAASgOAjAEAAZMAwABNxgbAAEoFgLajn6Ooo74BAINiAAAAAQOjs6O+AAAAAAAAAGADwABK2AFKo7YBIRajty6A48AASgQGwABJ4IC2o8Oj06P5AwSBDQFqAGADlAjAAGbVAAABA6PUo/kAAAABAQGj3AAAAIIdYAPAAE6JAABgA8AATokABsAASeGAtqP+pAWkJQAAgO8AAAABA6QNpCUAAAAAAAAAYAPAAE6JAT4BSqQWAS4GwABJ4oC2pCqkYKW9AwCAjAFqpCtgA8AASp+PHgAAAQOkYqW9AAAAAQEBpGoAAACCHWADwABN7wAAYAPAAErYAT4DSaR3HqR7wABGdQIAAi6ApIvAH2LSAD4BSqSbASk/SaSyIiWkvACApLbAH2LSYAPAAE6JAByk1Rakzi6ByMAASgOAjAEAARak3hSk2MAfYtIAAWADwABOiYHIwABOjQDAAE3GPgNOpPSk+AABjh9gA8AATKIBFqT/LoHIwABKA0WlDQGlFqUYAACDZmADwABMogGTARylH4KlHcAfY22AuwEAAYGlIcAfY1AAwABN0AGKpSbAH2NtHKUngqUmwB9jbYENAQABlADAAE3IPgFJpTUhHKVMHKU+LoXQAQABgqVJwB9jbQDAAEnfgIwBAAEcpVUUpU/AH2LSAAFgA8AATomF0AEAAYKlYMAfY20AwABOlwDAAE3GPgFKpXABKj9KpZYBKT9Kpa0BKgbAAEnjgLalwqXGp+MAAKKTAAAAAQOlz6fjAAAAAQEBpdcAACCCHWADwABOiQAAYAPAAEyiAT4HTqXopfMAAKU6YAPAAEyiARal+i6ByMAASgNOpgqmFgAApTtgA8AATKIBFqYegKYYwB9kNIHIwABOjU6mLqYyAACOH2ADwABMogEjHKZAgaY1wB9kTYC7AQABgqZCwB9kZwDAAE3QgaZRwB9kTYKmXsAfZGcBYAPAAEyiRaZvAaZ4pnoAAINmYAPAAEyiAZMBHKaBhKZ/wB9ky4C7AQABg6aDwB9khwDAAE3QAYymiMAfZMscpomEpojAH2TLgQ0BAAGUAMAATcg+BE6mmaamAAClPGADwABMogEcpq0uhdABAAGEprjAH2TLAMAASd9Opsam1AAApT1gA8AATKIBHKbcgKbWwB9kNIXQAQABhKbnwB9kywDAAE6XSabxHKcChab1wB9lF4C7AQABhqcEwB9lPADAAE3QPgFKpx0BHKcklIPrAAAAAMAATMU/Sac2HKdHhac6wB9lF4KMAQABhqdJwB9lPADAAE3SPgFKp2IBlD9Jp34cp42Bp4LAH2RNgLsBAAGCp4/AH2RnAMAATdBKp5wBHKejlIPrAAAAAMAATMU/SaerHKe6gaevwB9kTYKMAQABgqe8wB9kZwDAAE3SSqfJAZQ/SqfXAZMGwABJzIC2p+ioFaluAAClPsAARjkBaqfpYAPAAEqfjx4AAAEDqCapbgAAAAICAqgrAAAAbWADwABMogCoOQAAAIIdYAPAAE6JAABgA8AAStgBPgVJqEYWqFCBqErAH2ZVgOPAAE6PSqhZASk/TqhwqHQAAY4fYAPAAEyiARaofIGodsAfZlWByMAATo1JqIgiHKiTgKiNwB9mSIC7AQABkwDAAE3QARyoqByoooConMAfZkiBDQEAAYKopMAfZocAwABNyIKMAQABFqivLoHIwABKAwDAAE3SPgFKqMABKj9FqNgBqOGo4wAAg2ZgA8AATKIBkwEcqOqDqOjAH2b+gLsBAAGCqOzAH2aHAMAATdABi6jxwB9m/hyo8oOo8cAfZv6BDQEAAZQAwABNyD4BSaj+IRypHRypBy6F0AEAARypFIOpEsAfZv6BDQEAAYCpFsAfZkgAwABNyADAAEnfgIwBAAEcqSaBqSDAH2ZVhdABAAGDqTHAH2b+AMAATpcAwABNxj4BSqk/ASo/SqlfASkGwABJ5IC2qXOpeKnUAACUOwAAAAEDqYCp1AAAAAEBAamIAAAAgh1gA8AATokAAGADwABK2AE+AUqplQEcqZwupT7AAEY5AgACHKm6FqmzLoHIwABKA4EGAQABFqnCgKm8wB9ny4HIwABOjQDAAE3JgKnKwB9nywDAAEnMBsAASeWAtqnZqd6rCAAAiJoAAAABA6noqwgAAAACAQKp8QAAAKTpYAPAAE4GAKn/AAAAgd1gA8AATKIBaqoHYAPAAEyiGgBgA8AAStgBPgNJqhEiHKocgaoWwB9oVYC7AQABkwDAAE3QARyqK4GqJcAfaFWCjAEAARaqMi6ByMAASgMAwABN0j4BPTCqQx+qTcAAS+gDAAOBql7AH2hVkxaqbS6ByMAASgMAP0mqgCWqjACAqoTAH2hHYAPAAE6JPgFKqp8BHKqmLqU+wABGOQIAAoGquMAfaFUUqr/AH2hHAAFgA8AATokAwABJzD9KqtMBIRyq/Ryq4oCq2sAfaEelBgIAAi6BqvbAH2hVAMAATgmAjAEAASsAwABN/AbAAEnmgLarDasRriMAAIRwAAAAAQOrGK4jAAAAAgECqyEAAACk6WADwABOBgCrLwAAAG1gA8AATKIBaqs3YAPAAEyiGgBgA8AATKIBPgRJq0EiHKtMgatGwB9pc4C7AQABkwDAAE3QARyrW4GrVcAfaXOCjAEAARarYi6ByMAASgMAwABN0j4BPTCrcx+rfcAAS+gEAASBq47AH2lzkxarnS6ByMAASgMnbQA/Sau5JavFAICrvcAfaWVgA8AATok+BE6r36vlAACCHWADwABOiQEUq+fAH2llAAFgA8AATolOq/qsAwAApT9gA8AATKIBHKwRFqwKLoHIwABKA4EGAQABFqwZgqwTwB9qCYHIwABOjQDAAE3JRaxhAaxqrHAAAIHdYAPAAEyiAYGscsAfaXMBHKx/hKx5wB9qYoFbAQABg6yCwB9qKADAAE3RAYysjMAfamIcrJGErIzAH2pigQ0BAAGUAMAATcg+AUmsnxysoy6lPsAARjkCAAKErLXAH2pigqy8wB9qCQDAAEnMPgFKrNABhKzXwB9qYj9KrPYBHKz9lIPrAAAAAMAATMU/Ra0LAa0UrRYAAINmYAPAAEyiAYGtGMAfaXMBHK0hgq0fwB9q+4FbAQABFq0pLoHIwABKAwDAAE3RAYqtMcAfavscrTKCrTHAH2r7gQ0BAAGUAMAATcg+AUmt1iEcrfkcreKArdrAH2llpQYCAAIugq32wB9q+wDAAE4JgIwBAAErAMAATfxKrgIBgq4JwB9q+z9KrhYBHK4dlIPrAAAAAMAATMUGwABJ54C2riiuLLFWAACEcgAAAAEDrjexVgAAAAIBAq5AAAAApOlgA8AATgYArk4AAABtYAPAAEyiAWquVmABwABNrAIAYAPAAEyiAT4ESa5jHK5tga5nwB9ryYCMAQABKwDAAE3GPgE9ia5+wB9ryRauiy6ByMAASgNJrp4iHK6oga6iwB9ryYC7AQABkwDAAE3QARyutYGur8Afa8mCjAEAARauvC6ByMAASgMAwABN0j4BPTCuzB+u1sAAS+gDAAOBrufAH2vJkxau9i6ByMAASgMAP0mvCSWvFQCArw3AH2u7YAPAAE6JPgVOry+vNQAAgh1gA8AATokBFK83wB9ruwABYAPAAE6JTq9Kr1MAAKU/YAPAAEyiARyvYRavWi6ByMAASgOBBgEAARavaYKvY8AfbImByMAATo0AwABNyUmvdxyvhIOve8AfbKiAuwEAAYGvhsAfa8kAwABN0D2Jr43AH2vJg6+VwB9sqD9Fr6UBr66vtAAAgd1gA8AATKIBga+2wB9ryQEcr8OEr73AH20QgV4BAAGTAMAATdMBjK/JwB9tEByvzoSvycAfbRCBBgEAAZQAwABNyT4BSa/cHK/gLqU+wABGOQIAAoSv8sAfbRCCr/nAH2yJAMAAScw+AUqwDQGEsBTAH20QP0qwMwEcsDqUg+sAAAAAwABMxT9FsEgBsFGwUwAAg2ZgA8AATKIBgbBVwB9ryQEcsF6CsFzAH22jgV4BAAGTAMAATdMBirBkwB9toxywZYKwZMAfbaOBBgEAAZQAwABNyT4BSbEJIRyxLByxFYCxDcAfa7ulBgIAAi6CsSnAH22jAMAATgmAjAEAASsAwABN/EqxNQGCsTzAH22jP0qxSQEcsVCUg+sAAAAAwABMxQbAAEnogLaxW7FisxAAAIYTAAAAAQOxa7MQAAAAAgECsXAAAACHn2ADwABMogCxgQAAAIegYAPAAEyiAWoAYAHAAE2sAgBgA8AATokBPgU9Ixyxm4GxksAfbmiAjAEAASsAwABNxomxksAfbmgWsaQugcjAAEoDKwFgA8AATKJJsbEiHLHBgLG2wB9uWoC7AQABkwDAAE3QARyx1YCxysAfblqCjAEAARax3C6ByMAASgMAwABN0j4BPTCx7R+x98AAS+cBAAGAsgjAH25aAD9Jsh8iHLItgbIkwB9uaIC7AQABkwDAAE3QARyyP4GyNsAfbmiCjAEAARayRi6ByMAASgMAwABN0j4BPTCyVx+yYcAAS+cBAAGBsnLAH25oAD9JsoccspaAsovAH25agowBAAGBspjAH25oAMAATdI+AT0wsqofsrTAAEvnAQABgLLFwB9uWgA/SrLcARyy4y6k9sAARjkCAAKAsvfAH25agbMDwB9uaADAAEnNBsAASc2AtrMVsxy1IgAApPbAAEY5AAAAAQOzL7UiAAAAAgICszQAAACHn2ADwABMogCzRAAAAIegYAPAAEyiAABgA8AATokBPghAIRyzZIGzW8Afb+iAjAEAASsAwABNxrNbs2sAQCIcs4WAs3rAH2/agV4BAAGTAMAATdMAHLOagLOPwB9v2oFbAQABFrOiLoHIwABKAwDAAE3Rs3mzqQBAIhyzwYGzuMAfb+iBXgEAAZMAwABN0wAcs9SBs8vAH2/ogVsBAAEWs9wugcjAAEoDAMAATdGzt7PjAEAcs/yAs/HAH2/agVsBAAGBs//AH2/oAMAATdGz8bQHAEm0Dxy0HoC0E8Afb9qAjAEAAYG0IcAfb+gAwABNxj4BSrQzAScAP0m0SCIctFiAtE3AH2/agIwBAAGTAMAATcYAHLRrgbRiwB9v6ICMAQABFrRzLoHIwABKAwDAAE3GPgFKtIQBLj9JtJsctLActKuAtKDAH2/agQ0BAAGUAMAATciAjAEAAYG0s8Afb+gAwABNxj4BSrTFARy00C6C0QEAAYC00cAfb9oAwABJ3j9KtOgBHLTvLqVAwABGOQIAAoC1CcAfb9qBtRXAH2/oAMAASc4GwABJzoC2tSe1LrWSAASlQMAARjkBagBgA5QIwABm4wAAAQO1R7WSAAAAAgICtUwAAACHn2ADwABMogC1XAAAAIegYAPAAEyiAABgA8AATokABsAASc+AtrXCtc62ywABpULAAEY5AAAAAQO14rbLAAAAAQEBtecAAACGV2ADwABMogAAYAPAAErYAT4CSbX3HLYEgLX7wB9x/IFbAQABNyAAwABN0T4BSrYTASIctiWAthzAH3H8gIwBAAE3IADAAE3GASIctk6AtkXAH3H8gVsBAAE3DQDAAE3RABy2YoC2WcAfcfyBXgEAATcJAMAATdM/SraKASIctpuAtpLAH3H8gIwBAAE3gIUAwABNxgEctrGAtqjAH3H8gIwBAAE3gKAAwABNxgbAAEnQgLa5z7nbu/8AAaVDwABGOQAAAAEDue+7/wAAAAEBAbn0AAAAhldgA8AATKIAAGADwABK2AE+BEm6BBy6EYC6CMAfctKBWwEAATcgAMAATdE+AUq6IAEiHLoxgLoowB9y0oCMAQABNyAAwABNxgEiHLpGgLo9wB9y0oFbAQABNw0AwABN0QAculqAulHAH3LSgV4BAAE3CQDAAE3TP0m6bBy6eYC6cMAfctKAuwEAATeAhQDAAE3QSrqBASo/SbqTIhy6oYC6mMAfctKAjAEAATeAhQDAAE3GARy6t4C6rsAfctKAjAEAATeAoADAAE3GSrrBASk/SrrSASMcuuOAutrAH3LSgVsBAAE3oAoAwABN0SIcuwOAuvrAH3LSgIwBAAE3loAAwABNxgEcuxk3oACBWwEAAYC7HMAfctIAwABN0SIiIiIiHLs8gLszwB9y0oCMAQABN6AoAMAATcYBHLtggLtXwB9y0oCMAQABN6ApAMAATcYBHLuEgLt7wB9y0oCMAQABN6AvAMAATcYBHLuogLufwB9y0oCMAQABN6BfAMAATcYBHLvMgLvDwB9y0oCMAQABN7AAAMAATcYBHLvwgLvnwB9y0oCMAQABN8AA/v8AwABNxgFgA8AAStgGwABJ0YC2vAS8CLzYAAClRMAARjkAAAABA7wbvNgAAAAAAAAAYAPAAEyiAT4ETrwqvC4AAY4fYAPAAEyiARa8NS6ByMAASgNOvEW8SwAAgcJgA8AATKIBk0FFvFQAARy8YYG8W8AfdNuAuwEAAYC8Y8AfdMEAwABN0AGJvGjAH3TbHLxtgbxowB9024ENAQABlADAAE3IPgFJvHkhHLx+LqUnwABGOQEAARy8kS6F0AEAAYG8nMAfdNsAwABJ3wDAAEnHPgFCvK8AP0q8yAGBvM/AH3TbBsAASdKAtrzdvOG9mwAApUXAAEY5AAAAAQO8872bAAAAAAAAAGADwABMogE+A069AL0FAACB1WADwABMogEcvRMWvQwugcjAAEoDgQYBAAGUAMAATclBRb0cAAEcvSiAvSPAH3WXgV4BAAGTAMAATdMBiL0uwB91lxy9MoC9LsAfdZeBBgEAAZQAwABNyT4BSb0+IRy9Qy6lJ8AARjkBAAEcvVYuhdABAAGAvWHAH3WXAMAASd8AwABJxz4BQr1zAD9KvYwBgL2TwB91lwbAAEnpgLa9oL2nv0YAAKN7AAAAAQO9q79GAAAAAAAAAGADwABOiQE+Bk69ur2+AAGOH2ADwABMogEWvcUugcjAAEoDTr3VvdsAAIHCYAPAAEyiARy93S6lRMAARjkAAAAAwABJ0Um9+By+AIC9/MAfdmCAjAEAAYG+A8AfdnoAwABNxj4BSr49AScAP06+Vr5bAACB1WADwABMogEcvnIcvl0upUXAAEY5AAAAAMAASdKBDQEAAZQAwABNyEm+eyIcvoaBvoDAH3Z6gIwBAAGTAMAATcYAHL6Vgr6QwB92w4CMAQABgL6YwB92YADAAE3GPgFKvwQBLj9KvxsBHL8iLqT2wABGOQIAAoG/NsAfdnqCvz3AH3bDAMAASc0GwABJ6oC2v0u/UsAAQRgAAKVGAAAAAQO/WsAAQRgAAAAAAAAAYAPAAE6JAT4GTr9pv20AAY4fYAPAAEyiARa/dC6ByMAASgNOv4S/igAAgcJgA8AATKIBk0FFv5MAARy/oIG/msAfd5yAuwEAAYC/osAfd4IAwABN0AGJv6fAH3ecHL+sgb+nwB93nIENAQABlADAAE3IPgFJv7ghHL+9LqUnwABGOQEAARy/0C6F0AEAAYG/28Afd5wAwABJ3wDAAEnHPgFCv+4AP0nAAEAHHMAAQA+AwABAC8Afd4KAjAEAAYHAAEASwB93nADAAE3GPgFKwABATAEnAD9JwABAYRzAAEBrgcAAQGXAH3ecgIwBAAGTAMAATcY+AUrAAEDXAS4/SsAAQO4BHMAAQPUupPbAAEY5AgACgcAAQQnAH3ecgMAAQRDAH3eCAMAASc0GwABJ64C2wABBHcAAQSTAAELeAAClRwAAAAEDwABBLcAAQt4AAAAAAAAAYAPAAE6JAT4GTsAAQTzAAEFAAAGOH2ADwABMogEWwABBRy6ByMAASgNOwABBV8AAQVwAAIHVYAPAAEyiARzAAEFigMAAQV7AH3jYgQYBAAGUAMAATclBRcAAQWsAARzAAEF3gcAAQXLAH3j4gV4BAAGTAMAATdMBicAAQX3AH3j4HMAAQYGBwABBfcAfePiBBgEAAZQAwABNyT4BScAAQY0hHMAAQZIupSfAAEY5AQABHMAAQaUuhdABAAGBwABBsMAfePgAwABJ3wDAAEnHPgFCwABBwgA/ScAAQdscwABB5IHAAEHfwB94+ICMAQABHMAAQeeUg+sAAAAAwABMxQDAAE3GPgFKwABCHgEnAD9JwABCMxzAAEI8gcAAQjfAH3j4gIwBAAEcwABCRIDAAEJAwB942IEGAQABlADAAE3JAMAATcY+AUrAAEKcAS4/SsAAQrMBHMAAQroupPbAAEY5AgACkxzAAELWgcAAQtHAH3j4gQ0BAAGUAMAATcgAwABJzQbAAEnsgLbAAELjwABC88AAQ9oDAIPGAAAAAQPAAEL0wABD2gAAAAEBAcAAQvkAAAClSGADwABMogAAYAPAAE6JAT4FScAAQwYcwABDEIDAAEMKwB96fIFbAQABkwDAAE3RSsAAQxYBJwA/ScAAQyUcwABDL4DAAEMpwB96fICMAQABlADAAE3GSsAAQzUBLj9OwABDU8AAQ1oAAIHBYAPAAE7TAR/AAENgwABO8gEAAS4ARcAAQ3gBwABDgcAAQ4MAAINmYAPAAEyiAZQBHMAAQ4qCwABDiMAfewuAuwEAAYDAAEOMwB96fADAAE3QAYrAAEOTwB97CxzAAEOUgsAAQ5PAH3sLgQ0BAAGUAMAATcg+AT0cwABDp4HAAEOgwB965IHDAQABLgDAAE7nSsAAQ74BHMAAQ8yBwABDxcAfeuSA7wAAAADAAE7sBsAASe2AtsAAQ9/AAEPmwABFCAAAhjsAAAABA8AAQ+3AAEUIAAAAAgECwABD8gAAAIw9YAPAAEyiAMAARAEAAACGvGADwABOiQFqwABEC2ADwABOicAAZu4AYAPAAE6JAT4GTsAARBvAAEQhAACEb2ADwABMogEcwABEKYDAAEQjwB97yIEGAQABFsAARDAugcjAAEoDAMAATclJwABEPBzAAERGgsAAREDAH3wCgVsBAAGTAMAATdFKwABETAEuP07AAERqwABEcQAAgcFgA8AATtMBH8AARHfAAE7yAAAAAEXAAESLAcAARJTAAESWAACDZmADwABMogGTARzAAESdhMAARJvAH3yGgLsBAAGCwABEn8AffAIAwABN0AGMwABEpsAffIYcwABEp4TAAESmwB98hoENAQABlADAAE3IPgE9HMAARLqDwABEs8AffGCBwwEAAYHAAETAwB972ADAAE7nPRzAAETbg8AARNTAH3xggcMBAAEuAMAATudKwABE7AEcwABE+oPAAETzwB98YIDvAAAAAMAATuwGwABJ7oC2wABFDcAARRTAAEYjAAClSQAAAAEDwABFHMAARiMAAAACAQLAAEUhAAAAjD1gA8AATKIAwABFMAAAAIa8YAPAAE6JAWrAAEU6YAPAAE6JwABm7gBgA8AATokBPgVOwABFSsAARVAAAIRvYAPAAEyiARzAAEVYgMAARVLAH31lgQYBAAEWwABFXy6ByMAASgMAwABNyUnAAEVrHMAARXWCwABFb8AffZ+BWwEAAZMAwABN0UrAAEV7AS4/TsAARZnAAEWgAACBwWADwABO0wEfwABFpsAATvIBAAEuAEXAAEW+AcAARcfAAEXJAACDZmADwABMogGTARzAAEXQhMAARc7AH34kgLsBAAGCwABF0sAffZ8AwABN0AGMwABF2cAffiQcwABF2oTAAEXZwB9+JIENAQABlADAAE3IPgE9HMAARe2DwABF5sAfff2BwwEAAYHAAEXzwB99dQDAAE7nSsAARgcBHMAARhWDwABGDsAfff2A7wAAAADAAE7sBsAASe+AtsAARijAAEYtwABHegAAgcQAAAABA8AARjXAAEd6AAAAAgECwABGPgAAAKTpYAPAAE4GAMAARkwAAACHn2ADwABMogFqwABGWWADwABMohoAYAPAAErYAT4CScAARmMlwABGbwCAwABGZ8AffulgA8AATok+AknAAEaCIhzAAEaRgcAARobAH375gLsBAAGTAMAATdABHMAARqOBwABGmMAffvmCjAEAARbAAEaqLoHIwABKAwDAAE3SPgE9MMAARrwfwABGxsAAS+gDAAOBwABG18AffvmTFsAARusugcjAAEoDAD9KwABHAgEcwABHJhzAAEcJLoRwAgACFMAARxHAH37pAAFgA8AATomBwABHGsAffvkAwABJ5oFeAQABkwDAAE3TP0rAAEc2ARbAAEdsHMAAR0WAwABHPcAffumlBQEAARzAAEdVLoYTAQABgcAAR1/AH375AMAASegAwABOCINiwABNKQbAAEnwgLbAAEd/wABHhsAASkgAAKVKAAAAAQPAAEeSwABKSAAAAAMCA8AAR5sAAACk6WADwABOBgDAAEerAAAAgM1gA8AATokAwABHwwAAAIefYAPAAEyiAWrAAEfQYAPAAEyiGgBgA8AATokBPghJwABH2hzAAEfmgMAAR97AH4BYgIwBAAErAMAATfw+AT0wwABH9x/AAEgBwABL0wEAASek6QA/ScAASC0cwABIPYHAAEgxwB+AaICMAQABKwDAAE6YPgE9MMAASE4fwABIWMAAS9MBAAEngM0AP0nAAEiIHMAASJeCwABIjMAfgHiAjAEAASsAwABNxj4BPTDAAEioH8AASLLAAEvTAQABJ4efAD89HsAASOzAAEvdBAAEgsAASQHAH4B4kxbAAEkVLoHIwABKAyeHnwBOwABJOcAASUIAAIEIXQPAAE0/AVsBIxzAAElPgsAASUTAH4B4gIwBAAGTAMAATcYWwABJdxzAAElmgMAASV7AH4BYpQUBAAEuAMAATgiBCMAATSYWwABJrxzAAEmSgMAASYrAH4BYpQUCAAIugsAASaPAH4B4AMAATgiBCMAATSYBXQPAAE0/AWADwABODEnAAEm9IRzAAEnLg8AAScLAH4FrgQkAAAAAwABNQUrAAEnXAS4/TsAASe7AAEn0AACEUWADwABODAEmwABJ7gUWwABJ/4PAAEn2wB+Ba4EKwABNQ2ADwABODErAAEoMARzAAEoTLoRqAwADFsAASiaEwABKIMAfgiBtwABODhbAAEozhMAASi3AH4IghFTAAE4PgcAASjjAH4BoAMAASfEGwABJ8YC2wABKTcAASlTAAE4WAACEagAAAAEDwABKYMAAThYAAAADAwPAAEplAAAAbWADwABMogDAAEpwAAAAhFRgA8AATKIAwABKfAAAAIDNYAPAAE6JAABgA8AATokBPgxOwABKk8AASpoAAIHIYAPAAEyiARbAAEqhLoHIwABKAz2JwABKrcAfgtIewABKvsAAS98DAAOAwABKzsAfgsOBwABK1cAfgtKDwABK2sAfgv0ATsAASuzAAEsBAAClS2ADwABK2AEWwABLD4LAAEsDwB+C4qUqwABGOcAAToxJwABLHyIcwABLKYDAAEsjwB+Cw4CMAQABkwDAAE3GABzAAEs1gcAASzHAH4LSgIwBAAGDwABLOMAfgv0AwABNxkrAAEtAAYLAAEtHwB+C4j9OwABLXMAAS24AAKVMYAPAAEyiARbAAEt8gsAAS3DAH4LigcjAAE6NTsAAS4zAAEuYAACOHmADwABMogEcwABLsRzAAEuggMAAS5rAH4LDgQ0BAAEcwABLqoPAAEujwB+C/YEGAQABgcAAS6zAH4LSAMAATckAwABNyIENAQABhcAAS7PAH4PMAMAATchJwABLyiKEwABLzsAfg08AFsAAS+supSrAAEY5wABKAj4GTsAATAPAAEwKAACA5mADwABKCAEewABMG8AAShkBAAGGwABMJcAfg/QATsAATD3AAExDAACB3WADwABMogGTPRXAAExOwB+EpQgcwABMXYfAAExWwB+Ee44WwABGOQQABBTAAExnwB+EpQgALpOAwABMd8AfgsMAwABKHD0VwABMhcAfhKUIHMAATJSHwABMjcAfhHuOFsAARjkEAASAwABMnsAfgsOCwABMpcAfguKThcAATLXAH4PMAMAAShw9HMAATNaHwABMz8AfhHuOFsAARjkEAAQUwABM4MAfhKUIAC6BwABM7cAfgtKDwABM8sAfgv0AwABKHErAAE0BAYfAAE0IwB+Eez9OwABNH8AATSYAAKVNXQPAAE1GAVsBMcAATShbAD0ewABNMMAASdMDAAOHwABNQcAfhYWTgMAATUzAH4LDAEnAAE1YHMAATW8WwABNaILAAE1cwB+C4oHIwABOjYKMAQABkwDAAE3SPRzAAE17h8AATXTAH4WFgIIBAAGCwABNf8AfguIAwABNVz89HsAATZHAAEnTAwADh8AATaLAH4WFgcAATarAH4LSg8AATa/AH4L9AErAAE28AR7AAE3DwABJ1QQABC6HwABN6MAfhYWGwABN8MAfg/SEwABN/cAfg08ABsAASdOAtsAAThvAAE4mwABPcgABpU7AAEY5AAAAAQPAAE42wABPcgAAAAMDA8AATjwAAACCiV0DwABNRgFbAMAATkkAAABtYAPAAEyiAMAATlQAAACEVGADwABMogAAYAPAAEyiAT4DTsAATmPAAE5qAACByGADwABMogEcwABOcILAAE5swB+GtYEGAQABgcAATnLAH4amAMAATclJwABOfRzAAE6Ig8AAToHAH4bQgowBAAGTAMAATdI+AUnAAE6VIhzAAE6gg8AATpnAH4bQgVsBAAFqwABOo2ADwABMooXhAMAATdEAHMAATryBwABOtsAfhqaBWwEAAWrAAE6/YAPAAEyiwABmlADAAE3RPgE9HMAATuGAwABO2cAfhpSAggEAARzAAE7lHMAATv4cwABO7oHAAE7owB+GpoNxAQABasAATvFgA8AATKKIEQDAAEy+gKYBAAGDwABPAMAfhtAAwABMu4PrAAAAAMAATMUAwABNVz4C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AFpMwB+RfAgAAMAATpcAwABKG0AcwABaf4TAAFp0wB+NyICMAQABgsAAWoLAH42DAMAATcbAAFp0wABaiABKwABajwGDwABalsAfjZ4GwABJ1YC2wABceMAAXIzAAF0kAAWlUsAARjkBagBgA5QIwABm9AAAAQPAAFyhwABdJAAAAAQEBMAAXKkAAACMZmADwABOiQDAAFy0AAAAgoldA8AATUYBWwDAAFzBAAAAgchgA8AATKIAwABc2AAAAKVUYAPAAErYAABgA8AATokABsAASfOAtsAAXSnAAF0wwABhbAAApVUAAAABA8AAXUDAAGFsAAAAAgICwABdSQAAAKTpYAPAAE4GAMAAXVkAAACZwGEDAWADwABODGADwABOiQAAYAPAAE6JAT4LScAAXXUcwABdgYDAAF15wB+TZYCMAQABKwDAAE38PTDAAF2KH8AAXZTAAEvTAQABJ6TpAD9JwABduhzAAF3GgcAAXb7AH5N1gIwBAAErAMAATfw9MMAAXc8fwABd2cAAS9MBAAEnmcAAP07AAF4EwABeDAAAgoldA8AATUYBWwExwABeDlsATsAAXhrAAF4hAACByGADwABMogGTTsAAXi7AAF45AACHn2ADwABMogGTTsAAXkfAAF5kAAClVGADwABK2AEpPgJOwABejAAAAIEHXQPAAE0/AWADwABODAEWwABejB4Ak80BAV0DwABNBAFgA8AATgwBHMAAXoyAwABehMAfk2WlBQEAAS4AwABOCACBCMAATSZFAAABHMAAXoyGAMAflGGBCQAAAADAAE1BAD4CTsAAXnsAAACEUWADwABODAEWwABenoYAwB+UYYEKwABNQz4GPYvAAF6mwB+UIBzAAF6tg8AAXqbAH5QggQ0BAAEewABesMAASdMDAAOCwABewcAflAOEwABeysAflDUWwABe3IfAAF7WwB+Uzm3AAE4OAADAAE3ITsAAXu7AAF76AACAzWADwABOiQEkwABfDwEcwABfBoHAAF7/wB+TdW4BAAGHwABfB8AflM4AAD0cwABfH4LAAF8XwB+UA4CCAQABFMAAXyPAH5VGCAAAwABNVz2LwABfN8AflCAcwABfPoPAAF83wB+UIIENAQABFsAAX00UwABfQcAflUYIAIHIwABOjQDAAE3IPY3AAF9bwB+USiKFwABfhMAflEoAFsAA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AV0DwABNBAFgA8AATgwBHMAAakmAwABqQcAfnmmlBQEAAS4AwABOCACBCMAATSZFAAABHMAAakmFAMAfoFuBCQAAAADAAE1BAD4CTsAAajgAAACEUWADwABODAEWwABqW4UAwB+gW4EKwABNQz4DPRzAAGpqg8AAamPAH6AjgcMBAAEcwABqeoLAAGpwwB+enG4BAAEcwABqgC6GEwIAAoTAAGqKwB+gRBbAAGqchsAAapbAH6DIbcAATg4AwABJ6AAAAMAATuc9HMAAarODwABqrMAfoCOBwwEAARzAAGrIHMAAasCBwABqucAfnnpuAQABhsAAasHAH6DIAACA7wAAAADAAE39AMAATuc9jMAAatvAH6BEFsAAau6GwABq6MAfoMiEVMAATg89HMAAawSDwABq/cAfoCOBwwEAARzAAGsUgsAAawrAH56cbgEAARzAAGsaLoYTAQABhMAAayTAH6BEAMAASegAAADAAE7nSsAAazcBHMAAa0WDwABrPsAfoCOA7wAAAADAAE7sBsAASdmAtsAAa37AAGuwwABsWgABpV7AAEY5AWrAAGt/YAPAAEqfgqUAAAEDwABrwsAAbFoAAAABAQHAAGvKAAAAg/1gA8AATe8AAGADwABOiQE+BEnAAGvTJcAAa9kAgMAAa9fAH6JGYAPAAE6JSsAAa+QBFMAAa+vAH6JGAAFgA8AATok/TsAAa/jAAGv6AAGA+WADwABOiQEcwABr/oDAAGv8wB+iRoDvAAAAAMAATf1JwABsDiElwABsFACBwABsEsAfopNgA8AATok+AT0wwABsKB/AAGwywABL0QEAAYHAAGxAwB+ikwA/SsAAbE4BgcAAbFXAH6KTBsAASdqAtsAAbQfAAG05wABwnQABpV/AAEY5AWrAAG0IYAPAAEqfgqUAAAEDwABtRcAAcJ0AAAABAQHAAG1RAAABgQFdA8AATUYBWwAAYAPAAE6JAT4FTsAAbWXAAG1vAAGlYGADwABMogEWwABteIDAAG1xwB+jQoHIwABNdk7AAG2IwABtlAAAjh5gA8AATKIBk07AAG2hwABtowAAg2ZgA8AATKIBk0PAAG2sHMAAbbWDwABts8Afo5yAuwEAAYHAAG23wB+jXwDAAE3QPgROwABt0MAAbdIAAWlbARzAAG3agMAAbdTAH6NCgtEBAAGDwABt28Af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wACAIQEdwACALoTLAQABgMAAgDTAH7S4AMAASfgGwABKGIC2wACAe8AAgILAAIKXAAGlc8AARjkAAAABA8AAgIzAAIKXAAAAAgICwACAkgAAAKVmXQPAAE1GAVsAwACAnwAAAI4eYAPAAEyiAABbAT4GScAAgLIcwACAwoHAAIC2wB+18YKMAQABN4CAAMAATdI+AUrAAIDtAR7AAIEAwABJ3AMAA4DAAIETwB+135MWwACBJ4DAAIEfwB+134HIwABNdgA/TsAAgUDAAIFEAAGldGADwABKCAEewACBVcAAShkBAAGBwACBX8AftfEATsAAgXfAAIGFAAGldWADwABMogEWwACBj4DAAIGHwB+134HIwABNdk7AAIGfwACBowAApXZgA8AATKIBk0XAAIGsAcAAgbXAAIG3AACDZmADwABMogGTARzAAIG+hcAAgbzAH7bHgLsBAAGDwACBwMAftoUAwABN0AGNwACBz8AftsccwACB0IXAAIHPwB+2x4ENAQABlADAAE3IPgNOwACB8cAAgfMAAWlgA8AASggBJsAAgfEFHMAAgfyAwACB9cAftd+C0QEAAYXAAIH9wB+2xwDAAE1VYAPAAEoITsAAgg3AAIIVAAGld2ADwABMogEWwACCGYbAAIIXwB+3I4HIwABKA0XAAIInAcAAgjDAAIIyAACA+WADwABMogGTARzAAII5FMAAgjfAH7eQCACAuwEAAYfAAII7wB+3YwDAAE3QARXAAIJEwB+3kAgcwACCRRTAAIJEwB+3kAgAgQ0BAAGUAMAATcg+AT0cwACCV4LAAIJTwB+2W6PewABGOQIAAjXAAIJeAAABAGADwABMogGEwACCXsAftq01wACCYQAAAQBgA8AATKIBjMAAgmHAH7atHMAAgmEUwACCXsAfuAkJAIENAQABlADAAE3IFMAAgl7AH7gJCQAcwACCZ4bAAIJlwB+3I4XQAQABFMAAgnLAH7eQCAAAwABKEwDAAEobSsAAgokBgsAAgpDAH7ZbBsAASh+AtsAAgpzAAIKgwACFoQAAhHAAAAABA8AAgqfAAIWhAAAAAgECwACCsAAAAKTpYAPAAE4GAMAAgr4AAABtYAPAAEyiAWrAAILGYAPAAEyiGgBgA8AATKIBPgNOwACDBsAAgwsAAaV4YAPAAEyiAR7AAIMVk/cBAAGAwACD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o07AH892AMAATdABi8AAo1HAH9GJHMAAo1KDwACjUcAf0YmBDQEAAZQAwABNyD4BPRzAAKNngsAAo2DAH9FXo97AAEY5AgACg8AAo27AH9GJHMAAo3YuhdABAAGDwACjgcAf0YkAwABKEwDAAEobRcAAo5QBwACjncAAo58AAInMYAPAAEyiAYDAAKOhwB/PdgEcwACjpoPAAKOkwB/SKYC7AQABFsAAo60ugcjAAEoDAMAATdABi8AAo7XAH9IpHMAAo7aDwACjtcAf0imBDQEAAZQAwABNyD4BPRzAAKPLgsAAo8TAH9FXo97AAEY5AgACg8AAo9LAH9IpHMAAo99qwACj1WADwABOicAAZzaF0AEAARzAAKPvLoXQAQABg8AAo/rAH9IpAMAAShMAwABOlwDAAEobSsAApA4BgsAApBXAH9FXSsAApCcBLgbAAEoZgLbAAKSXwACk38AApRQABaV+wABGOQJqwACkmGADwABKn8AAZ05qAGADlAjAAGeCAAABA8AApOjAAKUUAAAAAQEBwACk7QAAAIHIYAPAAEyiAABgA8AASggABsAAShqAtsAApRnAAKUvwACloAAFpYDAAEY5AWoAYAOUCMAAZ5AAAAEDwAClR8AApaAAAAADAwPAAKVSAAAAhEZdA8AATUYBYAPAAEyiAMAApVwAAABtYAPAAEyiAMAApW0AAACEVGADwABMogAAYAPAAEoIAAbAAEobgLbAAKYdwACmIsAApl8ABKPewABGOQFqAGADlAjAAGeeAAABA8AApijAAKZfAAAAAgICwACmLQAAAIHdYAPAAEyiAMAApjgAAAClg2ADwABMogAAXAAGwABKHIC2wACnC8AApw/AAKicAACOFsAARjkAAAABA8AApxjAAKicAAAABAQEwACnHQAAAIHdYAPAAEyiAMAApysAAAClhGADwABOiQDAAKc+AAAAbWADwABMogDAAKdJAAAAhFRgA8AATKIAAGADwABMogE+CEAWwACnaYHAAKdbwB/UcKUqwABGOcAATozAAKdbwACncwBAHMAAp4OTgVsBAAGCwACnhsAf1IAAwABN0cAAp4HAAKeLAEAcwACnn4LAAKeZwB/UgIFbAQABg8AAp6LAH9SPAMAATdHAAKeZwACnpQBAHMAAp7eDwACns8Af1I+BWwEAARbAAKfIgcAAp7rA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AE3vAABgA8AAStgBPgFKwACuOAEdwACuRYCMAQABgMAArkjAH9w0AMAASeIAAB/bDAAf200AH9uxAB/cCgAf3GwAAAAEAsAASkKAtsAArlbAAK5cwACwkIOligAAAWADwABN7wABYAPAAE4MAwTAAEpEgLbAALBbwACwYAltAGADwABMogAEwABKRYC2wACwccAAsHYJhTcAYAPAAE6JAATAAEpGgLbAALCHwACwjgmk6QBgA8AATokAAQXAAEpPgLbAAK5+wACuhMAArrYBAAADwACukMAArrYAAAADAwPAAK6WAAAEbWADwABMogDAAK6iAAAEhTdgA8AATokAwACurgAABKTpYAPAAE6JAABgA8AASkIBPwQIAcAASkSAAMAf3SAIAcAASkWBAMAf3S8IAcAASkaCAMAf3T8JAcAAroTAAE4FAAAAAAUGwABKSIC2wACuu8AArsPAAK7gAQCEVAAAAAEDwACux8AAruAAAAAAAAAAYAPAAEyiAUrAAK7KARzAAK7QFsAArsoubcAASkSBDQEAARbAAK7aFsAArtIupOnAAEpGgcjAAE6NAMAATcgGwABKS4C2wACu5MAArvTAAK8JAwCC0QAAAAEDwACu9sAArwkAAAABAQHAAK77AAAAm41gA8AATKIAAGADwABOiQFKwACvAQEcwACvAS6TIwEAAYDAAK8HwB/eHwDAAEpMBsAASkmAtsAArw3AAK8VwACvJAEApPoAAAABA8AAryDAAK8kAAAAAAAAAGADwABMogFKwACvIwGTBsAASkyAtsAArynAAK8wwACvngAAkyMAAAABA8AArzXAAK+eAAAAAQEBwACvOgAAAJMjYAPAAEyiAABgA8AATokBPgJJwACvRyEcwACvUYDAAK9LwB/euYCMAQABkwDAAE3GPgE9MMAAr18fwACvacAAS+cBAAGAwACvesAf3rkAP0rAAK+MARbAAK+TLqTpwABKRgbAAEpNgLbAAK+jwACvsMAAsEwAAKT3AAAAAQPAAK+2wACwTAAAAAEBAcAAr8EAAACk910DwABNRgFgA8AATKIAAF0DwABNRgFgA8AATokBPgNOwACv3MAAr+MAAIDmXQPAAE1GAWADwABOiQEewACv6cAASD4BAWADwABOiQGTAD4CTsAAsAsAAACBB10DwABNPwFgA8AATKIBFsAAsAseAJPNAQFdA8AATQQBYAPAAEyiAYDAALALwB/fTQCBCMAATSZFAAABHMAAsAuCAMAf36eBCQAAAADAAE1BAD4CTsAAsAYAAACbjWADwABMogEWwACwE4IAwB/fp4EKwABNQz4BPRzAALAigcAAsBvAH992gIIBAAEcwACwJi6TIwEAAYPAALAswB/gBADAAEpMAMAATVdKwACwOwGBwACwQsAf33YAAB/djAAf3fUAH95WAB/ejwAf3yMAH+BoAAAABQLAAEpQgLbAALCTwACwmcAAsoUDpYsAAAFdA8AATQQBYAPAAE4MAAADBMAASlOAtsAAsNzAALDiCaWMwABGOQBgA8AATokABMAASlSAtsAAsPPAALD7CaWNwABGOQBgA8AATokABMAASlWAtsAAsQnAALEPCYODwABGOQBgA8AATKIAAQXAAEpagLbAALEUwACxFMAAsVYAAAADwACxLcAAsVYAAAADAwPAALEzAAAEpYxgA8AATokAwACxQAAABKWNYAPAAE6JAMAAsU8AAASDg2ADwABMogAAYAPAAEpQAT8ECAHAAEpTgADAH+EuCAHAAEpUgQDAH+E+CAHAAEpVggDAH+FOCQHAALEUwABNLgAAAAACBsAASleAtsAAsVvAALFvwACxuAEAgQgAAAABA8AAsXjAALG4AAAAAAAAAF0DwABNPwFgA8AATgwBSsAAsYEBH8AAsYXAAEpnAwADFsAAsZ8upYzAAEY5wABKUxbAALGnLqWNwABGOcAASlQWwACxsS6Dg8AARjnAAEpVAAbAAEpYgLbAALG9wACxx8AAsoMBAIHCAAAAAQPAALHNwACygwAAAAAAAABgA8AATgwBPgNOwACx18AAsd0AAIHdYAPAAEyiARzAALHmFsAAsd8upYzAAEY5wABKU4RwAgACFsAAse4upY3AAEY5wABKVBbAALH4LoODwABGOcAASlUAwABOnEnAALIFHMAAsg+AwACyCcAf4kyBXgEAAZMAwABN0z4BSsAAsh0BH8AAsijAAEpPAwADgMAAsjXAH+JMFsAAsjwupYzAAEY5wABKUxbAALJELqWNwABGOcAASlQAPz0wwACyWR7AALJ0lvwAAAAAAAAf4ZsAH+IXAB/jDAAAAAICwABKW4C2wACyiMAAso7AALVwA6WOAAABYAPAAE3vAAFdA8AATT8BYAPAAE4MBATAAEpegLbAALLUwACy2gmljMAARjkAYAPAAE6JAATAAEpfgLbAALLrwACy8wmljcAARjkAYAPAAE6JAATAAEpggLbAALL7wACzARiDg8AARjkAYAPAAEyiAATAAEphgLbAALMLwACzExiCxcAARjkAYAPAAE4MASsBBcAASmeAtsAAsxjAALMYwACzWgAAAAPAALMxwACzWgAAAAMDA8AAszcAAASljGADwABOiQDAALNEAAAEpY1gA8AATokAwACzUwAABIODYAPAAEyiAABgA8AASlsBPwQIAcAASl6AAMAf4+sIAcAASl+BAMAf4/sIAcAASmCCAMAf5AsJAcAAsxjAAE4FAAAAAAIGwABKY4C2wACzX8AAs2TAALVMAACBCQAAAAEDwACzbMAAtUwAAAAAAAAAYAPAAErYAT4IScAAs3UcwACzkhzAALOAFsAAs3kug4PAAEY5wABKYIENAQABFsAAs4sWwACzgi6ljcAARjnAAEpfgcjAAE6NAMAATciCjAEAARbAALObFsAAs5QupYzAAEY5wABKXoHIwABOjQDAAE3SPgI9F8AAs6sugsXAAEY5K8AASmFKwACzwgEqP07AALPewACz5AAAgd1gA8AATKIBHMAAs+0WwACz5i6ljMAARjnAAEpehHACAAIWwACz9S6ljcAARjnAAEpfFsAAs/8ug4PAAEY5wABKYADAAE6cScAAtAwcwAC0FoDAALQQwB/lEoC7AQABkwDAAE3QPgM9F8AAtCMug4PAAEY5HMAAtDoWwAC0MxbAALQsLqWMwABGOcAASl6ByMAATo2BDQEAAZQAwABNyMAASmA9F8AAtEUugsXAAEY5K8AASmFKwAC0XAEqP07AALR4wAC0fAAAhFRgA8AATKIBHMAAtISAwAC0fsAf5RKBDQEAARbAALSPFsAAtIYupY3AAEY5wABKX4HIwABOjQDAAE3IPRfAALSbLoLFwABGOR/AALSqwABKTwMAA4DAALS3wB/lEhbAALS+LqWMwABGOcAASl4WwAC0xi6ljcAARjnAAEpfAMAASmFJwAC1DRzAALUVgcAAtRHAH+XbgIwBAAEWwAC1GC6Dg8AARjnAAEpgAMAATcY9icAAtSDAH+XbHMAAtSOBwAC1IMAf5duBDQEAAZQAwABNyD89F8AAtSsug4PAAEY5gcAAtTTA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iPyJBIk5BAGCwAFqiQRgA5P6JgAAAQOJD4k5AAAAAQEBiRQAAAAiYAPAAE25AABgA8AASqoBSokeAR6JIsAARzQBAAGAiTPAH/F5AAbAAEq4gLqH6ofxh/YAAo7vAAAAAQOH9If2AAAAAAAAAGADwABKqgAGwABKuYC6iLKIwojFAwKD6wAAAAEDiMOIxQAAAAAAAABgA8AASqoABsAASrqAuojjiPOJAgMCgQ0AAAABA4j0iQIAAAABAQGI/AAAAIIdYAPAAEqqAABgA8AASqoABsAASruAuokjiTOJQgMCgQYAAAABA4k0iUIAAAABAQGJPAAAAIIdYAPAAEqqAABgA8AASqoABsAASryAuolmiXaJhQMCg8YAAAABA4l3iYUAAAABAQGJfwAAAIIdYAPAAEqqAABgA8AASqoABsAASr2AuomjibOJwgMChfgAAAABA4m0icIAAAABAQGJvAAAAIIdYAPAAEqqAABgA8AAS1AABsAASr6Auovbi+uL+wMChpIAAAABA4vti/sAAAABAQGL9QAAAIIdYAPAAEqqAABgA8AASqoABsAASr+Auo2AjZCNnwMChngAAAABA42RjZ8AAAABAQGNmQAAAIIdYAPAAEqqAABgA8AASqoABsAASsCAuo6vjraOzQACol4AAAABA46/js0AAAABAQGOxwAAAIIdYAPAAEqqAABgA8AASqoABsAASsGAupBzkIOQlgMCg3EAAAABA5CFkJYAAAABAQGQigAAAKKLYAPAAEyiAABgA8AASqoABsAASsKAupHIkdiR6wMCg8UAAAABA5HakesAAAABAQGR3wAAAKKLYAPAAEyiAABgA8AASqoABsAASsOAupM/k0+TXgMCgKEAAAABA5NQk14AAAABAQGTWAAAAIIdYAPAAEqqAABgA8AASqoABsAASsSAupS1lMWU1AMCgKYAAAABA5TGlNQAAAABAQGUzgAAAIIdYAPAAEqqAABgA8AASqoABsAASsWAupZCllKWYQMCgKMAAAABA5ZTlmEAAAABAQGWWwAAAIIdYAPAAEqqAABgA8AASqoABsAASsaAupdJl1mXXAMCgNgAAAABA5dal1wAAAAAAAAAYAPAAEqqAAbAAErHgLqXiZeXl6YDAoC7AAAAAQOXmJemAAAAAQEBl6AAAACCHWADwABKqgAAYAPAAErYAAbA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5ICoizeLRo5kB6WpAAEAAAQhYAPAAE3vAVsBYAPAAE3vAAAAAQXAAErpAAAAAAQAAAMAAAAAAAAAAABdA8AASuQBXwMAAAE/AQkBAMAATgUAAAAAAgbAAErmgKiM/40DjRUAAqKTAAAAAQONDI0VAAAAAQEBjQ8AACCCHV8DAAAAAGADwABMogAGwABK54CojiKOLY5iAAGEWgAAAAEDjjSOYgAAAAICAo5AAAAANl0DwABK5AFbAI5OAAAAN10DwABK5AFbAABgA8AATKIBSo5UARyOVoCOVMAf/I2ikwEAAYGOYMAf/JwAwABK5gAAH/w5AB/8bQAf/NIAAAACAsAASuqAvZAckCLAAGweA6WqAWqQImADk/omAAFgA8AATe8AAV0DwABK5AFgA8AASuokBMAASu2AvoNFg1sGpavAAEY5AGADwABMogFqg1pgA8AATKIaBMAASu6AvoNsg4IGpazAAEY5AGADwABMogFqg4FgA8AATKIUBMAASu+AvoOTg6QGpa3AAEY5AGADwABMogFqg6NgA8AATKIWBMAASvCAvoO1g8YGpa7AAEY5AGADwABMogFqg8VgA8AATKJMBMAASvGAvoPXg+YGpa/AAEY5AGADwABMogFqg+VgA8AATKIYBMAASvKAvoP3hAUGpbDAAEY5AGADwABMogFqhARgA8AATKKELQTAAErzgL6EFoQoBqWxwABGOQBgA8AATKIBaoQnYAPAAEyiTgTAAEr0gL6EOYRJBqWywABGOQBgA8AATKIBaoRIYAPAAEyihfEEwABK9YC+hFqEaQals8AARjkAYAPAAEyiAWqEaGADwABMohwEwABK9oC+hHOEehiltMAARjkAXQPAAE1GAVsBKwTAAEr3gL6L8IyUBqW1wABGOQBdA8AATUYBXQPAAE1GAWADwABMogFqjARdA8AATUYBXQPAAE1GAWADwABMosAAaI8EwABK+4C9kJ6QqAaltgBgA8AATKIBapCnYAPAAEyiFATAAEr8gL2QvZDIBqW3AGADwABMogFqkMdgA8AATKIWBMAASv2AvZDdkOoGpbgAYAPAAEyiAWqQ6WADwABMokwEwABK/oC9kP+RCwaluQBgA8AATKIBapEKYAPAAEyiGATAAEr/gL2RIJEqBqW6AGADwABMogFqkSlgA8AATKKELQTAAEsAgL2RP5FLBqW7AGADwABMogFqkUpgA8AATKJOBMAASwGAvZFgkWoGpbwAYAPAAEyiAWqRaWADwABMooXxBMAASwKAvZF/kY4Gpb0AYAPAAEyiAWqRjWADwABMooXxBMAASwOAvZHike0Gpb4AYAPAAEyiAWqR7GADwABMohQEwABLBIC9kgKSDgalvwBgA8AATKIBapINYAPAAEyiFgTAAEsFgL2SI5IsBqXAAGADwABMogFqkitgA8AATKJMBMAASwaAvZJBkkoGpcEAYAPAAEyiAWqSSWADwABMohgEwABLB4C9kl+SZgalwgBgA8AATKIBapJlYAPAAEyihC0EwABLCIC9knuSgwalwwBgA8AATKIBapKCYAPAAEyiTgTAAEsJgL2SmJKgBqXEAGADwABMogFqkp9gA8AATKKF8QTAAEsKgL2StZK/BqXFAGADwABMogFqkr5gA8AATKIcBMAASwuAvZLUkuEGpcYAYAPAAEyiAWqS4GADwABMooRIBMAASwyAvZL2kwIGpccAYAPAAEyiAWqTAGADwABMooRLBMAASw2AvZMXkyQGpcgAYAPAAEyiAWqTImADwABMoogRBMAASw6AvZM5k0YGpckAYAPAAEyiAWqTRGADwABMooQwBMAASw+AvZNbk20GpcoAYAPAAEyiAWqTa2ADwABMooQwBMAASviAvZRelGQJgpHAAEY5AGADwABMogAEwABLEIC9lRSVGQmTgQBgA8AAStgABMAASvmAva4WrkMGpcvAAEY5AGADwABMogFqrjNgA8AATKLAAGimBMAASvqAvcAAaz7AAGwKBaXNwABGOQBgA8AAThkBHsAAa03AAE4yAQABJMAAa1MDJ6XOJ6XPJ6XQAAgFwABLR4C9ljmWOZdXAAAAA5ZBl1cAAAAIAQiWRgAAAKXRYAPAAEyiAJZXAAAApdJgA8AATKIBapZfYAPAAEyiFJZsAAAApdNgA8AATKIBapZyYAPAAEyiFJZ/AAAApdRgA8AATKIBapaGYAPAAEyiGpaTAAAApdVgA8AATKIBapacYAPAAEyiGpapAAAAirZgA8AATKIBapayYAPAAEyiGpa/AAAApdZgA8AATKIBapbNYAPAAEyiGpbaAAAApddgA8AATKIBapboYAPAAEyiGgBgA8AASuoBPwEKAJb5wABLTgkACYCXA8AgAhOBlwnAIAIh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wABNykq3twEmt7cFHLfXHre+wABLFwEAAYK30MAgF9oAgtEBAAFqt9hgA8AATKIcAMAATVVgA8AATKIGwABLHoC+ufK5/bxhAAGmB8AARjkAAAABA7oPvGEAAAABAQG6FAAAAKXbYAPAAEyiAABgA8AATKIBPgNOumO6dQAApeRgA8AATKIBHrp3wABLGAIAAoC6kcAgGGNqurJgA8AATKK3FABJus8cuuscuuWButPAIBh8ju8AAAAAwABMxoKMAQABarrtYAPAAEyiwABpHADAAE3SPgZOuwq7DwAApdFgA8AATKIBHrsRwABLHQEAAYG7LcAgGHwATrtLu1AAAKXwYAPAAEyiAR67UsAASxkBAAGCu1/AIBjcAE67cLt/AACmCGADwABMogEeu4HAAEscAQABgruRwCAY3ABOu6K7sQAApglgA8AATKIBHruzwABLGQEAAYS7wMAgGSAATrvbu+QAAKYKYAPAAEyiARy79YW75sAgGUKBBgEAAYO798AgGP4AwABNyT2JvAPAIBh8HLwVgbwDwCAYfIENAQABHLwhhrwYwCAZZIPGAQABarwsYAPAAEyiwABpEADAAE3KAMAATcg/SrxFAYG8TMAgGHwGwABLH4C+vGa8cb07AAGmC8AARjkAAAABA7yJvTsAAAABAQG8jgAAAKXbYAPAAEyiAABgA8AATKIBPgJOvLC8wgAApgxgA8AATKIBHrzEwABLHgEAAYC818AgGfsASrz0AR68+8AASxUBAAGBvSXAIBoUAAbAAEsggL69QL1OvgIAAaYNwABGOQAAAAEDvVu+AgAAAAEBAb1gAAAApdtgA8AATKIAAGADwABOiQE+Ak69gr2UAACmDGADwABMogEevZbAAEseAQABgL2pwCAabwBKvcYBHr3NwABLFAEAAYG97MAgGogABsAASyaAvaPFo9WsbgABhTsAAAABA6ParG4AAAABAQGj4gAAAKYOYAPAAE6JAABgA8AASuoBPgNOo/2kAAAApg9gA8AAThkBGqQCwABK+k6kGqQgAACEUWADwABODAEcpCWBpCLAIBr4omgBAAGApDDAIBrfAMAATiRJpEYhHKRQgqRKwCAbD4CMAQABKwDAAE38PhBPpGGkZQAAAaYQYQMBYAPAAE6JYAPAAEyiAAOkc6TWAAAAAQEBpHsAAACmEWADwABOiQAA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yC6TgcAASxCAjAEAARaJ1xSJ0cAgIi4AAWADwABK6pOBwABLEADAAE38BsAASymAvonhie+KMAAAphkBaonvYAOT+iYAAAEDifeKMAAAAAEBAYoBAAAAgh1gA8AASuoAAGADwABK2AFKigsBHIoSFooLLoKRwABGOcAASviAuwEAARaKGoCKFMAgIuKl28AASzoAwABN0AbAAEsqgL6KNYpDioMAAKYaAWqKQ2ADk/omAAABA4pKioMAAAABAQGKVAAAAIIdYAPAAErqAABgA8AAStgBSopeARyKZRaKXi6CkcAARjnAAEr4gowBAAEWim2AimfAICNPpdvAAEs6AMAATdIGwABLK4C+ioiKlormAACmGwFqipZgA5P6JgAAAQOKpormAAAAAQEBirAAAACCHWADwABK6gAAYAPAAErYAUqKwAEciscWisAugpHAAEY5wABK+ICMAQABForQgIrKwCAjvKXbwABLOgDAAE3GBsAASyyAvorriviLSQAAopMBaor4YAOT+iYAAAEDiwGLSQAAAAEBAYsLAAAAgh1gA8AASuoAAGADwABMogFKixsBHIsiFosbLoKRwABGOcAASviikwEAARaLMoCLLMAgJCml28AASzoAwABNxwbAAEs4gL2+4b7pvxsBAIIcAAAAAQO+8r8bAAAAAAAAAGADwABMogFKvvUBHL8PHL79Fr72LoKRwABGOcAASviAowEAARy/Bxa/AC6CkcAARjnAAEr4g8UBAAE3HgDAAEy/AMAATLyAoQEAATf/////AMAATLoGwABLLYC9wABAa8AAQHTAAEDiAACmHAAAAAEDwABAe8AAQOIAAAAAAAAAYAPAAErqAT4CScAAQIQWwABAiC6TgcAASxA+AUrAAECXAR/AAECnwABLTQIAARbAAECyLoKRwABGOcAASvgBk4EqP0rAAEDTAS4GwABLLoC9wABCH8AAQijAAEKFAACmHQAAAAEDwABCLcAAQoUAAAAAAAAAYAPAAErqAT4CScAAQjYWwABCOi6TgcAASxBKwABCQQEuP0rAAEJSAR/AAEJiwABLTQIAARbAAEJtLoKRwABGOcAASvgBk4EpBsAASyGAvcAAQorAAEKYwABDhgABph7AAEY5AAAAAQPAAEKjwABDhgAAAAEBAcAAQqgAAACEE2ADwABMogAAYAPAAE6JAT4GTsAAQrXAAEK6AACmH2ADwABMogEcwABCvoDAAEK8wCAl+o7vAAAAAMAATMZOwABC0MAAQtUAAIXpYAPAAE6JASMcwABC2YDAAELXwCAl+oC7AQABkwDAAE3QJ4EGJwABYAPAAE6JScAAQu0cwABC9oHAAELxwCAmFYFeAQABN4PoAMAATdNKwABC/wEkwABDCgGAwABDCMAgJfo/ScAAQxAcwABDGYHAAEMUwCAmFYFeAQABN2QAwABN00rAAEMhASTAAEM3A4LAAEMrwCAmQSeGPIHAAEMywCAmFT9JwABDPRzAAENGgcAAQ0HAICYVgV4BAAE3CgDAAE3TSsAAQ00BJMAAQ2QDgsAAQ1fAICZBJ6MLgcAAQ1/AICYVP0rAAENqASTAAEOCA4LAAEN0wCAmQSemIIHAAEN9wCAmFQbAAEsigL3AAEOLwABDmcAARFgAAaYhwABGOQAAAAEDwABDo8AARFgAAAABAQHAAEOoAAAAhBNgA8AATKIAAGADwABOiQE+BUAiHMAAQ7qAwABDuMAgJ4GAuwEAARzAAEO8N6cPg+sAAAAAwABMxQDAAE3QARzAAEPHgMAAQ8XAICeBgowBAAE3pw8AwABN0sAAQ7jAAEPNAE7AAEPYwABD3QAAph9gA8AATKIBHMAAQ+GAwABD38AgJ4GO7wAAAADAAEzGTsAAQ/PAAEP4AACF6WADwABOiQEjHMAAQ/yAwABD+sAgJ4GAuwEAAZMAwABN0CeBBieBDQFgA8AATolJwABEERzAAEQagcAARBXAICftgV4BAAE3wAGGoADAAE3TSsAARCUBJMAARDgCgsAARC7AICgZgcAARDPAICftP0rAAEQ+ASTAAERUA4LAAERIwCAoGSeGPIHAAERPwCAn7QbAAEsjgL3AAERdwABEa8AARNoAAaYiwABGOQAAAAEDwABEd8AARNoAAAABAQHAAER8AAAAhBNgA8AATKIAAGADwABOiQE+A0nAAESFHMAARIuAwABEicAgKOOBXgEAATdkAMAATdNKwABEkwEkwABEoAGAwABEncAgKOM/ScAARKYcwABErIDAAESqwCAo44FeAQABNwoAwABN00rAAESzASTAAETBAieGPIDAAES+wCAo4z9KwABExwEkwABE1gInowuAwABE08AgKOMGwABLJIC9wABE38AARO3AAEU3AAGmI8AARjkAAAABA8AARPfAAEU3AAAAAQEBwABE/AAAAIQTYAPAAEyiAABgA8AATokBPgJJwABFBRzAAEULgMAARQnAICmwgV4BAAE3CgDAAE3TSsAARRIBJMAARR8BgMAARRzAICmwP0rAAEUlASTAAEUzAieGPIDAAEUwwCApsAbAAEsvgL3AAEbowABG78AASLwAAIDvAAAAAQPAAEb3wABIvAAAAAAAAABgA8AATokBPglOwABHB8AARwkAAIwyYAPAAE6JAR7AAEcLwABLIQEAARbAAEcXLqXRwABLPQBOwABHKcAARysAAISBYAPAAE6JAR7AAEctwABLJAEAARbAAEc4LqXSwABLPgBOwABHS8AAR00AAIPNYAPAAE6JAR7AAEdPwABLJAEAARbAAEdaLqXTwABLPwBOwABHa8AAR20AAKKuYAPAAE6JAR7AAEdvwABLJAEAARbAAEd6LqXUwABLQABOwABHjMAAR5AAAIgeYAPAAE6JAR7AAEeSwABLJAEAARbAAEedLqXVwABLQQBOwABHscAAR7UAAKYkYAPAAE6JAR7AAEe3wABLJAEAARbAAEfCLoq2wABLQgBOwABH1sAAR9kAAIuaYAPAAE6JAR7AAEfbwABLIwEAARbAAEfoLqXWwABLQwBOwABIAcAASAQAAIbxYAPAAE6JASMcwABIEhbAAEgGLqXXwABLRICMAQABkwDAAE3GJwAewABIHsAASyMBAAEWwABIKy6l18AAS0QAAWADwABOiUnAAEg9FsAASEEuk4HAAEsQPgFKwABIUAEkwABIeA+AwABIWcAgKkwngQaBwABIXMAgKnkngQaCwABIX8AgKqYnhx2DwABIYsAgKtMnixeEwABIZcAgKwAnixeFwABIasAgKy0nhlyGwABIb8AgK1qHwABIc8AgK4cnpiU+AUrAAEiNASTAAEiyDoDAAEiWwCAqTCeBBoHAAEiZwCAqeSeBBoLAAEicwCAqpieHHYPAAEifwCAq0yeLF4TAAEiiwCArACeLF4XAAEinwCArLSeGXIbAAEiswCArWofAAEivwCArhwbAAEswgL3AAEx4wABMf8AATpQAAKYmAAAAAQPAAEyOwABOlAAAAAAAAABgA8AATokBPglOwABMnsAATKAAAIwyYAPAAE6JASMiHMAATLAWwABMqy6l0cAASz2BXgEAARzAAEyzN6cPg+sAAAAAwABMxQDAAE3TABzAAEzBFsAATLwupdHAAEs9gVsBAAE3pw8AwABN0R7AAEzMwABLIQEAARbAAEzYLqXRwABLPQAewABM4MAASyIBAAEWwABM6y6l0cAASz0AAWADwABOiU7AAEz9wABM/wAAhIFgA8AATokBHsAATQHAAEskAQABFsAATQwupdLAAEs+AE7AAE0fwABNIQAAg81gA8AATokBHsAATSPAAEskAQABFsAATS4updPAAEs/AE7AAE0/wABNQQAAoq5gA8AATokBHsAATUPAAEskAQABFsAATU4updTAAEtAAE7AAE1gwABNZAAAiB5gA8AATokBHsAATWbAAEskAQABFsAATXEupdXAAEtBAE7AAE2FwABNiQAApiRgA8AATokBHsAATYvAAEskAQABFsAATZYuirbAAEtCAE7AAE2qwABNrQAAi5pgA8AATokBHsAATa/AAEsjAQABFsAATbwupdbAAEtDAE7AAE3VwABN2AAAhvFgA8AATokBIxzAAE3mFsAATdoupdfAAEtEgIwBAAGTAMAATcYnAB7AAE3ywABLIwEAARbAAE3/LqXXwABLRAABYAPAAE6JScAAThEWwABOFS6TgcAASxA+AUrAAE4kASTAAE5OD4DAAE4twCAs8ieBBoHAAE4wwCAtjSeBBoLAAE40wCAtuichg8AATjjAIC3nJ4sXhMAATjvAIC4UJ4sXhcAATkDAIC5BJ4ZchsAATkXAIC5uh8AATknAIC6bJ6YlPgFKwABOYwEkwABOig6AwABObMAgLPIngQaBwABOb8AgLY0ngQaCwABOc8AgLbonIYPAAE53wCAt5yeLF4TAAE56wCAuFCeLF4XAAE5/wCAuQSeGXIbAAE6EwCAubofAAE6HwCAumwbAAEsxgL6X8JgCmHkAAICCAWqYAmADk/omAAABA5gFmHkAAAABAQGYDwAAAFlgA8AAS3QAAGADwABK6gE+AUqYHwEfmCrAAEtNAgABHJhFFpg+LoKRwABGOcAASviBDQEAARaYUICYR8AgL/egR8AAS5wAwABNyAGTgRaYby6TgcAASxAGwABLMoC+mH6YkJkMAACmJwFqmJBgA5P6JgAAAQOYmJkMAAAAAQEBmKIAAABZYAPAAEt0AABgA8AASuoBPgFKmLIBH5i9wABLTQIA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AACFwWADwABMogEchxYUhxTAIEH8CwCAowEAAWqHGGADwABMooRjAMAATLxJh1Ech1sUh1XAIEIwDACBWwEAATcJAMAATdE+BD2Oh2vAID5cHIeMHId+KAAAAAAAACRAg8YBAAGGh4DAID5cAMAAS1+BDQEAARSHjsAgQjAMAADAAEtdSYgnHIg3hogrwCA+XIFeAQABaog6YAPAAEtQhNMAwABN00qITAErPz2LiGHAID4pHIhqg4hhwCA+KYENAQABhYhtwCA+SwDAAE3IPYyIhMAgPjopSYikIhyIqhSIqMAgQfwLAICMAQABaoitYAPAAEyihF0AwABNxgAciMOFiLXAID5LgIwBAAGTAMAATcY+AT2NiNPAID5LHIjjlIPrAAAAAMAATMVJiPQciQMciPsUiPnAIEH8CwCApgEAATcgAMAATLuAjAEAAWqJBmADwABMooR+AMAATcY+Bj0ViRTAIEGRChyJFRSJFMAgQZEKAIENAQABlADAAE3ISYkhHIknFIklwCBBkQoAgIwBAAGCiSrAID3tAMAATcZKiS8BKz9OiYqJkgAApj9gA8AATKIBHomYwABMswMAAyaJpQWAiaXAID3cYAPAAE6JFImqwCBBkQoAJomxBRyJsYKJrcAgPe2BBgEAAZQAAGADwABMogBJib8cicsUicPAIEPbDQCAjAEAASsAwABNxkqJ1AErPz2LienAID4pHInyg4npwCA+KYENAQABFIn1wCBD2w0AAMAATchCigYAPgFKiiQBK0mKQyGEikjAID46SopUASs/SYpzHIqAg4p3wCA+KYCMAQABkwDAAE3GSoqGARyKkoeKjcAgPnWDxgEAAYaKlMAgPlwAwABLXz9JitsciuiDit/AID4pgLsBAAGTAMAATdA+A06K+YsFAACmQGADwABMogEciweDiwjAID4pg+sAAAAAwABMxUmLGByLKBSLHMAgRN8KAIFeAQABFosvaosrXQPAAE1GAWADwABLUIWrgcjAAE12AMAATdNKizcBKz9Ki0oBHItWh4tRwCA+dYPGAQABHItlhotZwCA+XIX4AQABHItqaotnXQPAAE1GAWADwABLUIWrgtEBAAEUi2vAIETfCgAAwABNVQDAAEthAMAAS18/SYuEHIuRg4uIwCA+KYFeAQABFouYaouUXQPAAE1GAWADwABLUIWr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AsAAS3SAwYgqiDCmr4OmQgAAAWADwABN7wABXQPAAErkAWADwABLdBEEwABLdoDBiG6IjwamQwBgA8AATKIBaoiLYAPAAEyiwABoqgTAAEt3gMGIpIjABqZEAGADwABMogFqiLxgA8AATKLAAGiqBMAAS3iAwYjViOoGpkUAYAPAAEyiAWqI6GADwABMop6kBMAAS3mAwYj/iRIGpkYAYAPAAEyiAWqJEGADwABMop6kBMAAS3qAwYkniTcGpkcAYAPAAEyiAWqJNWADwABMooSfBMAAS3uAwYlNiZ0GpkgAYAPAAEyiAWqJhmADwABMorcUBMAAS3yAwYmyifgGpkkAYAPAAEyiAWqJ5mADwABMosAAaQYEwABLfYDBig2KSQamSgBgA8AATKIBaoo5YAPAAEyiwABpDATAAEt+gMGKXoqUBqZLAGADwABMogFqiodgA8AATKLAAGjmBMAAS3+AwYqqivAGpkwAYAPAAEyiAWqK3mADwABMosAAaSkEwABLgIDBiwWLQQamTQBgA8AATKIBaosxYAPAAEyiwABpLwTAAEuBgMGLVouMBqZOAGADwABMogFqi39gA8AATKLAAGk1BMAAS4KAwYuii9QGpk8AYAPAAEyiAWqLxGADwABMosAAaTsEwABLg4DBi+mMFQamUABgA8AATKIBaowIYAPAAEyiwABpEATAAEuEgMGMK4xXBqZRAGADwABMogFqjEpgA8AATKLAAGk/BMAAS4WAwYxyjI0GkNQAYAPAAEt0AWqMeWADwABLdICIBMAAS4eAwYzfjOgJplLAAEY5AGADwABMogACBcAAS6CAwY4nji2P1gEAAAOONY/WAAAABgAABo5CAAAApfBgA8AATKIBao5JYAPAAEyiGo5WAAAAplNgA8AATKIBao5eYAPAAEyiGo5rAAAAplRgA8AATKIBao51YAPAAEyiGo6CAAAApjBgA8AATKIBao6MYAPAAEyiGo6ZAAAAHWADwABMogFqjqhgA8AATKIajrUAAACgQmADwABMogFqjsRgA8AATKIaYAPAAEt0AT8BCgCO1cAAS6IBAAEcj7scj4Mcj1Ucjyccjv0cjvZqjuNgA8AATKLAAGjmg8YBAAGAjvjAIE9GAMAATcqBDQEAARyPH2qPC2ADwABMosAAaQyDxgEAAYGPIcAgT14AwABNygDAAE3IgQ0BAAEcj0tqjzVgA8AATKLAAGkGg8YBAAGCj03AIE92AMAATcoAwABNyIENAQABHI95ao9jYAPAAEyitxSDxgEAAYOPe8AgT44AwABNygDAAE3IgQ0BAAEcj6xqj5FgA8AATKLAAGiqg8YBAAGEj67AIE+mAMAATcoAwABNyIENAQABhY/JwCBPvQDAAE3IAAXAAEuigMGQT5BVkHsBplXAAEY5AAOQa5B7AAAAAQEBkHEAAASmUmADwABMogAAYAPAAEt0AT8CCAHAAEuHgADAIFD1CQGQVcAATgUAAAAAFQbAAEuJgMGQ45D1kUsDAIENAAAAAQOQ9pFLAAAAAQEBkQAAAACCHWADwABLdAAAYAPAAEt0AT4BSpENAR+RHcAAS6IBAAEckTUWkSsuplLAAEY5wABLh4ENAQABFpE9gJE3wCBRRqZSwABGOcAAS4cAwABNyAAGwABLioDBkcCR0pIoAwCBBgAAAAEDkdOSKAAAAAEBAZHdAAAAgh1gA8AAS3QAAGADwABLdAE+AUqR6gEfkfrAAEuiAQABHJISFpIILqZSwABGOcAAS4eBBgEAARaSGoCSFMAgUbymUsAARjnAAEuHAMAATckABsAAS4uAwZM7k02ToAMAg8YAAAABA5NOk6AAAAABAQGTUwAAAIw0YAPAAE25AABgA8AAS3QBPgFKk2EBH5NxwABLogEAARyTlByTihaTgC6mUsAARjnAAEuHg8YBAAGAk4zAIFIyAMAATcqblQAAAADAAE3VAAbAAEuMgMGUb5SBlX4DAIaSAAAAAQOUg5V+AAAAAQEBlIgAAACmVmADwABMogAAYAPAAEt0AT4CSZUHHJUUgJULwCBSqICMAQABkwDAAE3GPTCVGh+VIMAATIIAAAAAP0qVRgEflVbAAEuiAQABHJVuFpVkLqZSwABGOcAAS4eGkgEAAYCVccAgUqgAwABNzQAGwABLjYDBlemV95YsAwCAuwAAAAEDlfiWLAAAAAEBAZYCAAAAgh1gA8AAS3QAAGADwABK2AFKlgwBHJYbFpYRLqZSwABGOcAAS4eAuwEAARaWI4CWHcAgUzmmUsAARjnAAEuHAMAATdAGwABLjoDBlpqWqJbdAwCCjAAAAAEDlqmW3QAAAAEBAZazAAAAgh1gA8AAS3QAAGADwABK2AFKlr0BHJbMFpbCLqZSwABGOcAAS4eCjAEAARaW1ICWzsAgU6KmUsAARjnAAEuHAMAATdIGwABLj4DBl1SXYpeZAwCBWwAAAAEDl2SXmQAAAAEBAZduAAAAgh1gA8AAS3QAAGADwABK2AFKl3gBHJeHFpd9LqZSwABGOcAAS4eBWwEAARaXkICXisAgVAumUsAARjnAAEuHAMAATdEGwABLkIDBmBOYIZhYAwCBXgAAAAEDmCOYWAAAAAEBAZgtAAAAgh1gA8AAS3QAAGADwABK2AFKmDcBHJhGFpg8LqZSwABGOcAAS4eBXgEAARaYT4CYScAgVHSmUsAARjnAAEuHAMAATdMGwABLl4DBmKmYsZjjAQCmVwAAAAEDmLiY4wAAAAAAAABgA8AATKIBSpi7ARyYxRaYuy6mUsAARjnAAEuHhpIBAAFqmNFgA8AATKLAAGjmAMAATc0GwABLmIDBmWqZcpmmAQCmWAAAAAEDmXqZpgAAAAAAAABgA8AATKIBSpl9ARyZhxaZfS6mUsAARjnAAEuHhpIBAAFqmZNgA8AATKLAAGkMAMAATc0GwABLmYDBmi+aN5pvAQCmWQAAAAEDmkGabwAAAAAAAABgA8AATKIBSppEARyaThaaRC6mUsAARjnAAEuHhpIBAAFqmlpgA8AATKLAAGkGAMAATc0GwABLmoDBmvibAJs4AQCmWgAAAAEDmwqbOAAAAAAAAABgA8AATKIBSpsNARybFxabDS6mUsAARjnAAEuHhpIBAAFqmyNgA8AATKK3FADAAE3NBsAAS5uAwZvDm8ucDQEAgrUAAAABA5vanA0AAAAAAAAAYAPAAEyiAUqb3QEcm+cWm90uplLAAEY5wABLh4aSAQABapvzYAPAAEyiwABoqgDAAE3NBsAAS5yAwZxinGqchQEAoEcAAAABA5x5nIUAAAAAAAAAYAPAAEyiAUqcfAEWnHwuplLAAEY5wABLhwbAAEuRgMGc3JzqnTsDAICMAAAAAQOc7J07AAAAAQEBnPUAAACCHVsAAGADwABK2AFKnQUBIiWdCwCAnQXAIFa5YAPAAEt0ABydJBadGi6mUsAARjnAAEuHgIwBAAEWnS0UnSfAIFa5AAFgA8AAS3SgR8AAS5wAwABNxgbAAEudgMGdQJ1InWYBAIIcAAAAAQOdUZ1mAAAAAAAAAGADwABMogFKnVQBFp1eFp1ULqZSwABGOcAAS4eCHMAATecGwABLkoDBnymfLZ9uAACikwAAAAEDnzafbgAAAAEBAZ9AAAAggh1gA8AAS3QAAGADwABMogFKn0oBHJ9UFp9KLqZSwABGOcAAS4eikwEAARafZICfXsAgV3emUsAARjnAAEuHAMAATccGwABLk4DBoMKgyaOdAACA7wAAAAEDoNGjnQAAAAAAAABgA8AATokBPgdPoNqg4QAAAaZbYQMBYAPAAEyiYAPAAE6JAAOg6qHEAAAAAQEBoO8AAACEE2ADwABMogAAYAPAAE6JAT4GSaD6HKEAgaD+wCBYD4FeAQABN8ABhqAAwABN00qhCwEkoRYBgaEUwCBYDz9JoR4coSSBoSLAIFgPgV4BAAE3pxAAwABN00qhLgEkoToCJ4Y8gaE4wCBYDz9JoUIcoUiBoUbAIFgPgV4BAAE3g+gAwABN00qhUQEkoV4CJ6MLgaFcwCBYDz9JoWYcoWyBoWrAIFgPgV4BAAE3ZADAAE3TSqF0ASShggInpiCBoYDAIFgPP0mhihyhkIGhjsAgWA+BXgEAATcKAMAATdNKoZcBJKGmAiejCoGhpMAgWA8/SqGuASShvgInplyBobzAIFgPT6HLodIAAAGkr2EDAWADwABMomADwABOiQADoduiHQAAAAEBAaHgAAAAhBNgA8AATKIAAGADwABOiQE+Akmh6xyh8YKh78AgWTyBXgEAATcKAMAATdNKofgBJKIDAYKiAcAgWTw/SqILASSiFwInhjyCohXAIFk8SaIkHKI3FqIoLqBHwABLnIC7AQABkwDAAE3QPgFKokQBJKJWAieBBhyiTy6D6wAAAADAAEuVP06iaaJ5AACmXWADwABOiQEcooSBonvAIFkabgEAASaijwEcoo8WooUuplnAAEuZol4BAAFqoplgA8AATKKepADAAE3PYAPAAEyiAABOoraixgAApl5gA8AATokBHKLRgaLIwCBZGm4BAAEmotwBHKLcFqLSLqZawABLmqJeAQABaqLmYAPAAEyinqQAwABNz2ADwABMogAATqMFoxAAAKZfYAPAAE6JARyjI4CjGsAgV+1uAQABJqMzARyjMxajJC6gR8AAS5yiXgEAAWqjPWADwABMorcUAMAATc9gA8AATKIAAEqjWgEko5kHFqNjLqZYwABLmCeLF4KjbMAgWccnixeDo33AIFoT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AACmrMAARjkAAAABA7e4wABKMgAAAAAAAABgA8AATokBPhNOt8W3ywAAiHVgA8AATKIBHLgCHLffFrfOLqagwABGOcAATBmDxQEAAWq39GADwABMokwAwABMv4ChAQABargeYAPAAEyihfEAwABMuk64M7g4AACF2WADwABMogEcuEsWuDoupqDAAEY5wABMGYChAQABarhfYAPAAEyihfEAwABMuk64driBAACM1mADwABOiQEjHLiQFriELqTPwABGOcAATBOAjAEAASsAwABPBicAHrjAl6oBAAEmuNUBFrjVLqTPwABGOcAATBNgA5eaAAFgA8AATolJuOgcuPGBuOzAIH5pgIwBAAFquQZgA8AATKIYAMAATcY+AUq5GgEkuWMDJ6atgrlXwCB+nyeA8T9OuX25hwAAiE9gA8AATtMBH7mNwABO8gAAAABOuaW5swAApq5gA8AATKIBk0m5vCEcucsWucAuiFLAAEY5wABMFICMAQABKwDAAE1wPgFFudwAARy58YS548Agf0iAuwEAARa5/ha58y6IUsAARjnAAEwUgcjAAE12AMAATdABjLoGwCB/SBy6E4S6BsAgf0iBDQEAAZQAwABNyD4CSbohHLozhLolwCB/SIKMAQABkwDAAE3SPgE9HLpOg7pEwCB/LYHDAQABJ4QxAMAATuc/PRy6d4O6bcAgfy2BwwEAAR66g8AAS6gBAAEcupoWupAuiFLAAEY5wABMFILRAQABhLqbwCB/SADAAE1VAADAAE7nP0m6vyEcutMWusMupNHAAEY5wABMFYCMAQABKwDAAE38PgE9HLr0FrrkLqTRwABGOcAATBWBEgEAATS6/AO6/LwZAAAAAgICuwQAAACC0mADwABO+wC7DQAAACJbAABgAcAATawBPgVJux4cuzCEuyLAIH9IgowBAAGTAMAATdI+AT0cu0uDu0HAIH8tgcMBAAEnhDEAwABO5z89HLt0g7tqwCB/LYHDAQABHruKl6oBAAEmu58BhbufwCCAhmADl5oAAMAATuc9HLu4g7uuwCB/LYHDAQABJ4EkAMAATuc9HLvXg7vNwCB/LYHDAQABHrvjwABLqAEAAYa78MAggJQAAMAATuc9jLwBwCB/SBy8DoS8AcAgf0iBDQEAAZQAwABNyADAAE2XP068K7w4AACmr2ADwABK2AEhHLxR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fp+DwABITcAgfy0AwABO5z4BPRzAAEh1FMAASG3AIIIsCACBwwEAASTAAEikBCem1YLAAEiMwCB+nyem1oPAAEiawCB/LQDAAE7nScAASLKFwABItsAggWk+A07AAEjZwABI6gAAptdgA8AATtMBH8AASPDAAE7yAAAAAEXAAEkGAcAASQ/AAEkRAACDZmADwABMogGTARzAAEkYFMAASRbAIIkGCwCAuwEAARbAAEkxFsAASRoupp3AAEY5wABMFoHIwABNdgDAAE3QARXAAEk5wCCJBgscwABJOhTAAEk5wCCJBgsAgQ0BAAGUAMAATcg+AknAAElIHMAASU4UwABJTMAgiQYLAIKMAQABkwDAAE3SPgE9HMAASXAUwABJX8AgiOAKAIHDAQABJ4QxAMAATuc/PRzAAEmgFMAASY/AIIjgCgCBwwEAARzAAEm8FsAASaYupp3AAEY5wABMFoLRAQABFMAASb3AIIkGCwAAwABNVQDAAE7nPRzAAEnYFMAASdDAIIIsCACBwwEAASTAAEoHBSem2ILAAEnpwCB+nyeEJxTAAEn1wCCI4AoAJ4QoAMAATuc/SsAAShUBHMAASiQUwABKHMAggiwIAIDvAAAAAMAATuwGwABMIhKiRqJWt1kAAIDvAWqiVmADk/omAAABA6Jet1kAAAAAAAAAYAPAAE6JAT4ZSaKrHKK7FqKvLqafwABGOcAATBiAjAEAASsAwABN/D4BSqL5ARyjAC6mrMAARjkAAAAAwABMIT9OoyijMwAAjNZgA8AATokBHqNNl6oBAAEmo24BFqNuFqNiLqafwABGOcAATBiM1sAASUNgA5eaAE6jg6OJAACIdWADwABMogEco8Eco54Wo5gWo4wupp/AAEY5wABMGIhJwABGOcAASTiDxQEAAWqjs2ADwABMokwAwABMv4ChAQABaqPdYAPAAEyihfEAwABMuk6j8qP3AACZk2ADwABMogEcpAsWpAUWo/kupp/AAEY5wABMGIhJwABGOcAASTiAoQEAAWqkH2ADwABMooXxAMAATLpJpC8cpDiCpDPAIItZgIwBAAFqpE1gA8AATKIYAMAATcY+AUqkYQEkpKoDJ6atgKSewCCKxyeA8T9OpMSk1QAAptlgA8AATtMBK06k5aTzAACNLl0DwABNRgFgA8AATwcBFqUBFqT1LqafwABGOcAATBiNLsAASUZJpRQiIRylJ4SlGcAgi+aAjAEAASsAwABNcAAcpUkWpUKEpTTAIIvmgcjAAE12gowBAAGTAMAATdI+BD2LpVfAIIvVH6VuwABO8gAAAAA9HKWVg6WEwCCL1YHDAQABJ4C7AMAATudFpacBpbClsgAAg2ZgA8AATKIBkwEcpbmFpbfAIIx9gLsBAAEWpcmEpbvAIIvmgcjAAE12AMAATdABjaXRwCCMfRyl0oWl0cAgjH2BDQEAAZQAwABNyD4CSaXgHKXmhaXkwCCMfYKMAQABkwDAAE3SPgE9HKYIg6X3wCCL1YHDAQABJ4QxAMAATuc/PRymOIOmJ8Agi9WBwwEAAR6mRMAAS6gBAAEcpl6EplHAIIvmgtEBAAGFpl/AIIx9AMAATVUAAMAATuc9HKaEg6ZzwCCL1YHDAQABJ4KMAMAATuc/TqanprQAAKbaYAPAAE7TAR+musAATvIAAAAATqbSpuYAAIzXXQPAAE1GAVsBFqb0FqboLqafwABGOcAATBiM18AASUdOpxGnHwAApq5gA8AATKIBk0mnKCEcp0CGpyzAII10gIwBAAErAMAATXA+AUWnUQABHKdmh6dYwCCNnYC7AQABFqd8hqdowCCNdIHIwABNdgDAAE3QAY+nhMAgjZ0cp5GHp4TAII2dgQ0BAAGUAMAATcg+AkmnnxynsYeno8AgjZ2CjAEAAZMAwABN0j4BPRynz4WnwsAgjVmBwwEAASeEMQDAAE7nPz0cqAiFp+7AII1ZgcMBAAEeqBTAAEuoAQABHKg0hqghwCCNdILRAQABh6g1wCCNnQDAAE1VAADAAE7nP06oXahsAACM2F0DwABNeAJgA8AATvtbARaoehaobi6mn8AARjnAAEwYjNjAAElISaiOIRyooRSoksAgjoAIAICMAQABKwDAAE38PgE9HKjBFKiywCCOgAgAgRIBAAE0qMkDqMmp8gAAAAICAqjRAAAAgtJgA8AATvsAqNoAAAAiWwAAYAHAAE2sAT4FSajrHKj9h6jvwCCNnYKMAQABkwDAAE3SPgE9HKkbhakOwCCNWYHDAQABJ4QxAMAATuc/PRypR4WpOsAgjVmBwwEAAR6pXZeqAQABJqlyARSpcsAgjusJAGADl5oAAMAATuc9HKmOhamBwCCNWYHDAQABJ4EkAMAATuc9HKmwhamjwCCNWYHDAQABHqm8wABLqAEAARSpycAgjvkKAAAAwABO5z2PqdrAII2dHKnnh6nawCCNnYENAQABlADAAE3IAMAATZc/TqoGqhIAAKbbYAPAAE6JAR6qHMAATCADAAMWqjUupp7AAEY5wABMF4CqQMAgiscWqlgWqkwupp/AAEY5wABMGIhJwABGOcAASTgATqprqnMAAKbcYAPAAE6JASMhHKqBFKp1wCCP0gkAgIwBAAErAMAATpgnprEnAAFgA8AATolOqrgAAACm3WADwABOiQBJqsUiHKrOgqrJwCCLWYFeAQABkwDAAE3TAByq24Kq1sAgi1mAuwEAATcFAMAATdA+AT0VqujAIJBSCxyraGqq810DwABNRgFgA8AATonAAGmOgtEBAAGCq2nAIItZAMAATVU/TquIq48AAKbeYAPAAE7TAR+rlcAATvIBAAEnprcATqvDq9AAAKa4YAPAAErYASpBR6vdgavlwCCK/wUBrAtqrAtgA8AATKIaAD4BPgJJrCkcrDcWrC0upp7AAEY5wABMF4CMAQABKwDAAE38PgFJrE4hHKxeFKxSwCCP0gkAgIwBAAErAMAATpg+AT0crH4UrHfAIJDFDACHkQEAASSshQgnprkUrKjAIJBSCwAnhx0ngPGArMfAIIrHJ4DxFKzTwCCQHQoAJ4ZcAMAATuo+AT0crQkUrQLAIJDFDACHkQEAASStQQUnproUrRfAIJBSCwAnkdGArSHAIIrHJ6a7AMAATuo+AUmtcSWtfwAWrXUupp7AAEY5wABMF2ADwABICD4BPRytoxStnMAgkMUMAIeRAQABJK2qBCemvCemvYCt9MAgiscngPEAwABO6kmuFiIlriQAFq4aLqaewABGOcAATBdgA8AASm0AHK47gK4wwCCKx4CMAQABJ24AwABOmD4DPRWuVsAgkOMNKU6ugK6FAACGTWADwABOiQEcrpEWrocupp7AAEY5wABMF4DvAAAAAMAATf09HK6yFK6rwCCQxQwAh5EBAAEkrrkIJ6a+FK7TwCCSUg4AJ6a/J6bAJ6bBFK9vwCCSUg4AJ6bCJ6bDAMAATuo+AT0cr+EUr9rAIJDFDACHkQEAASSv6AknpsQWr/0Wr/Mupp7AAEY5wABMF40xwABOAyemxRSwMcAgkFILACeR0YCwO8AgiscngPEUsEfAIJAdCgAnhlwAwABO6kKwdwABsKVqsKVgA8AATKIUAD4BPgM9HLDIFLDBwCCQxQwAh5EBAAEksM8KJ6bGFrDzFrDpLqaewABGOcAATBeNMcAATgMnpscnpsgUsSPAIJBSCwAnkdGAsS3AIIrHJ4DxFLE5wCCQHQoAJ4ZcAMAATuo9iLFPwCCKxySxbwInpsmAsWTAIIrHQrF7AAGxqWqxqWADwABMohYAPgE+Aj0csc0UscbAIJDFDACHkQEAASSx1AonpsoUseHAIJBSCwAnkdGAsevAIIrHJ4DxFLH3wCCQHQoAJ4cdJ6bLFrIkLqaewABGOcAATBcnpswAwABO6kKyPQABsmtqsmtgA8AATKJMAD4BPgM9HLKUFLKNwCCQxQwAh5EBAAEkspsIJ6bNgLKuwCCKxyeA8RSyusAgkB0KACemziemzxay5y6mnsAARjnAAEwXJ6bMAMAATuo9iLMAwCCKxySzHgInptCAsxPAIIrHQrMqAAGzWGqzWGADwABMohgAPgE+Aj0cs38Us3jAIJDFDACHkQEAASSzhggnptEUs5bAIJBSCwAnkdGAs6DAIIrHJ4DxFLOswCCQHQoAJ4cdJ6bSAMAATupCs9wASbP4HLQCgbP8wCCK/4CMAQABarQXYAPAAEyiGADAAE3GPgE9HLQyFLQrwCCQxQwAh5EBAAEnptMAwABO6j4BPRy0bBS0ZcAgkMUMAIeRAQABJLSgAiem1B60h8AAS6gBAAEWtJQupp7AAEY5wABMFwAAwABO6km0rhy0t4K0ssAgi1mAjAEAAWq0zGADwABMohoAwABNxj4ETrTktOYAAISBYAPAAE6JASMUtOjAIJDjDQAktQQBFrT5LqaewABGOcAATBcktRMBgLUIwCCKxwFgA8AATok9HLUiFLUbwCCQxQwAgcMBAAEktTsCJ6bVFLU5wCCVdQ4AAMAATudJtUQhHLVZg7VIwCCL1YCMAQABKwDAAE38PgE9HLVzFLVswCCQxQwAgcMBAAGDtXnAIIvVAMAATuc/PRy1oRS1msAgkMUMAIHDAQABJLW4AyeEJ4W1qsAgjVknhCgAwABO50m1xhy12Ie1ysAgjZ2AjAEAAZMAwABNxj4BPRy17RS15sAgkMUMAIHDAQABJLYPAiem1YC2BMAgiscAwABO50m2HRy2JoK2IcAgi1mAjAEAAWq2O2ADwABMohYAwABNxj4BPRy2UxS2TMAgkMUMAIHDAQABJLaCAyem1YC2asAgiseFtnXAII1ZAMAATuc+AT0ctp8UtpjAIJDFDACBwwEAASS20QQnptWAtrbAIIrHJ6bWhbbEwCCNWQDAAE7nSbbfIRy27xS248Agj9IJAICMAQABKwDAAE6YPgE9HLcHFLcAwCCQxQwAgcMBAAEkty8DJ6bYgLcYwCCKxxS3I8Agj9IJAADAAE7nP0q3PQEct0sUt0TAIJDFDACA7wAAAADAAE7sAAAgeeQAIHpFACB7CQAge+gAIH2LACB96gAgil0AIJdgAAAABwLAAEwogMLAAEFwwABBkMAAQkEDpt8DasAAQZBgA5P6JmrAAEGQYAPAAEqfA2rAAEGQYAPAAEqfAwABYAPAAEujAAABBMAATCqAwsAAQcDAAEHHCYEiAGADwABOiQABBcAATDCAwsAAQcvAAEHnwABCBQAAAWrAAEHMYAPAAEqfAwPAAEH3wABCBQAAAAEBAcAAQf0AAASBImADwABOiQAAYAPAAEwoAT8CCAHAAEwqgADAIJgVCQHAAEHnwABLrwAAAAACBsAATC0Sj2+Pdo+1AAGjcsAARjkAAAABA49/j7UAAAABAQGPhwAAAIL3YAPAAE6JAABbAT4BPTCPkh+PnMAATDABAAGAj63AIJhtAAbAAEwugMLAAEIJwABCEMAAQj8AAIDvAAAAAQPAAEIYwABCPwAAAAAAAABgA8AATokBSsAAQh4BJMAAQj8CJ6bgFsAAQjcugSLAAEwqAAAgmEoAIJiWACCY4wAAAAICwABMMYDCwABDm8AAQ6HAAESRA6bhAAABYAPAAEujAAFgA8AATCgBBMAATDOAwsAAQ+/AAEP2CYEiAGADwABOiQABBcAATDeAwsAAQ/rAAEP6wABEHAAAAAPAAEQMwABEHAAAAAEAAcAARBMAAASBImADwABOiQFqAGABwABNrAIAYAPAAEwxAT8CCAHAAEwzgADAIJlcCQHAAEP6wABLrwAAAAABBsAATDWAwsAARCDAAEQnwABEjwAAgO8AAAABA8AARC/AAESPAAAAAAAAAGADwABOiQFKwABENQEjIRzAAERDFsAARDsugSLAAEwzgIwBAAErAMAATpgkwABEeAInpuIWwABEaS6BIsAATDMnpuEBYAPAAE6JAAAgmZoAIJoPAAAAAQLAAEw4gMLAAEVYwABFXsAARdsDpuMAAAFgA8AAS6MAAAEEwABMOoDCwABFiMAARY8JgSIAYAPAAE6JAAEFwABMPoDCwABFk8AARZPAAEWrAAAAA8AARZ3AAEWrAAAAAQEBwABFowAABIEiYAPAAE6JAABgA8AATDgBPwIIAcAATDqAAMAgmn4JAcAARZPAAEuvAAAAAAEGwABMPIDCwABFr8AARbbAAEXZAACA7wAAAAEDwABFvsAARdkAAAAAAAAAYAPAAE6JAUrAAEXEASTAAEXZAiem5BbAAEXRLoEiwABMOgAAIJqzACCbAAAAAAECwABMP4DCwABG7sAARvTAAEibA6blAAABYAPAAEujAAABBMAATEGAwsAAR23AAEd7CabmAGADwABN7wABBcAATEWAwsAAR4DAAEeAwABHsgAAAAPAAEebwABHsgAAAAEAAcAAR6IAAASm5mADwABN7wFqAGABwABNrAIAYAPAAEw/AT8CCAHAAExBgADAIJtvCQHAAEeAwABLrwAAAAABBsAATEOAwsAAR7fAAEe+wABImQAAgO8AAAABA8AAR8bAAEiZAAAAAAAAAGADwABOiQE+AknAAEfPHMAAR+IWwABH0y6m5sAATEGAjAEAASsAwABN/D4BSsAAR/MBJ6bnP0rAAEgxASTAAEgxAyem6B7AAEh2wABLqAEAARbAAEiDLqbmwABMQQAnhlwAACCbrQAgnDkAAAABAsAATEaAwsAASJ7AAEikwABJToOm6QAAAWADwABN7wABYAPAAEujAAEFwABMUYDCwABIysAASOzAAEj+AQABasAASMtgA8AASp8DA8AASPzAAEj+AAAAAAAAAGADwABMRgE/AQkBwABI7MAATgUAAAAABAbAAExIgMLAAEkCwABJCcAASSYAAIDvAAAAAQPAAEkRwABJJgAAAAAAAABgA8AATokBSsAASRcBJ6bqBsAATEqAwsAASSvAAEk6wABJTAEAMQAAAAEDwABJRcAASUwAAAAAAAAAYAPAAE5dAUrAAElIASsGwABMTBIAgkQAAYCAgrjAAEY5AAAAAQMAAAAAAAAAAABgA8AATl0BSoJEASaCRAUcgkQugrkBAAEfAMAASU8FAAVqgkRgA8AATvvAAGmqlGoAXQPAAE1GAWADwABPB4CYagBdA8AATUYBW4CgHoJEwABNggECYAPAAE77WwFqAF0DwABNeAJgA8AATvtbgKMAAADAAE3+YAPAAE5dBsAATE8SAIJEAAKAgIK4wABGOQAAAAEDAAAAAAABAQEAAAAAImADwABOXQAAXAFKgkQBHIJELoK5AQABHwDAAElPBQAFaoJEYAPAAE77wABpsZVqAF0DwABNRgFgA8AATweAmB4AwABNTwEBWwExAFsBgADAIJ3pAB6CRMAATYIBAmADwABO+1sBagBdA8AATXgCYAPAAE77W4CjAAAAwABN/gAAIJy5ACCc9AAgnSwAIJ3JACCebAAAAAQCwABMUoDCwABJUcAASVfAAEoGg6brAAABYAPAAE3vAAFgA8AAS6MAAQXAAExdgMLAAEl/wABJocAASbUBAAFqwABJgGADwABKnwMDwABJs8AASbUAAAAAAAAAYAPAAExSAT8BCQHAAEmhwABOBQAAAAAEBsAATFSAwsAASbnAAEnAwABJ3gAAgO8AAAABA8AAScjAAEneAAAAAAAAAGADwABOiQFKwABJzgEnpuwGwABMVoDCwABJ48AASfLAAEoEAQAxAAAAAQPAAEn9wABKBAAAAAAAAABgA8AATl0BSsAASgABKwbAAExYEgCCRAABgICCuMAARjkAAAABAwAAAAAAAAAAAGADwABOXQFKgkQBJoJEBRyCRC6CuQEAAR8AwABJTwUABWqCRGADwABO+8AAaaqUagBdA8AATUYBYAPAAE8HgJhqAF0DwABNRgFbgKAegkTAAE2CAQJgA8AATvtbAWoAXQPAAE14AmADwABO+1uAowAAAMAATf5gA8AATl0GwABMWxIAgkQAAoCAgrjAAEY5AAAAAQMAAAAAAAEBAQAAAAAiYAPAAE5dAABcAUqCRAEcgkQugrkBAAEfAMAASU8FAAVqgkRgA8AATvvAAGmxlWoAXQPAAE1GAWADwABPB4CYHgDAAE1PAQFbATEAWwGAAMAgoCgAHoJEwABNggECYAPAAE77WwFqAF0DwABNeAJgA8AATvtbgKMAAADAAE3+AAAgnvgAIJ8zACCfawAgoAgAIKCrAAAABALAAExegMLAAEsuwABLNMAATH4Dpu0BasAASzRgA5P6JgABYAPAAEujAAABBMAATGCAwsAAS23AAEt5CabuAGADwABOiQABBcAATGaAwsAAS33AAEuZwABLxwAAAWrAAEt+YAPAAEqfAwPAAEuywABLxwAAAAEAAcAAS7kAAASm7mADwABOiQFqAGABwABNrAIAYAPAAExeAT8CCAHAAExggADAIKE8CQHAAEuZwABLrwAAAAACBsAATGMSj+WP7JBGAAGjcsAARjkAAAABA4/1kEYAAAABAQGP/QAAAKbuYAPAAE6JAABbAT4BPTCQER+QG8AATGYBAAGAkDXAIKGdAAbAAExkgMLAAEvLwABL0sAATHwAAIDvAAAAAQPAAEvawABMfAAAAAAAAABgA8AATokBSsAAS+ABIxzAAEvtFsAAS+Aupu7AAExggIwBAAErAMAATpgnpu8kwABMfAMnpvAWwABMVC6m7sAATGAnpvEBYAPAAE6JAAAgoXoAIKHGACCiPQAAAAICwABMZ4DCwABOS8AATlrAAE7HB4qNAAABYAPAAEujAAAAAAEGwABMaoDCwABOhMAATozAAE7FBAGAisAARjkAAAABA8AATqXAAE7FAAAAAAAAAGADwABMZwFKwABOqwEwwABOqx/AAE6xwABMMAEAAScAAAAAIKJyACCiwgAAAAECwABMa4DDg2CDb4O2B6byAAABYAPAAE3vAAAAAAEGwABMbYDDg32DhYO0BAEAAAAAAQODjoO0AAAAAQABg5QAAACBIlsBagBgAcAATawCAGADwABMawFKg6EBH4OhwABMdAEAAYCDrMAgowwAAAAgou0AIKM8AAAAAQLAAExugMOD/4QFhMEDpvMAAAFgA8AATe8AAWADwABMawEEwABMcIDDhC+ENgmBIgBbAAEFwABMdIDDhDuEO4RVAAAAA4RFhFUAAAABAAGETAAABIEiWwFqAGABwABNrAIAYAPAAExuAT8CCAHAAExwgADAIKOYCQGEO8AATgUAAAAAAQbAAExygMOEWoRhhL8AAIDvAAAAAQOEaYS/AAAAAAAAAGADwABOiQE+AkmEchyEfhaEdi6BIsAATHCAjAEAASsAwABN/EqEhwEnpvI/SoSfASSEuwInpvQWhLMugSLAAExwAAAgo80AIKQvAAAAAQLAAEx1gMOFSIVOlsCDpvUAAAFgA8AATe8AAWADwABMawMEwABMd4DDhbyFwwmBIgBgA8AATokABMAATHiAw4bWhtwJgWMAWwAEwABMeYDDiSOJKQmEFwBgA8AATKIAAQXAAEx9gMOK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vC2BDAIAAjWEuQAAAQBgA8AATKIBFIS5wCC8uAgANYTGAAABAGADwABMogEVhMbAILy4CByExhSEucAgvUgMAIENAQABlADAAE3IFIS5wCC9SAwAFITMwCC9JQsAAMAATVY9HITgh4TbwCC8k4EMAgACNYThAAABAGADwABMogEUhOHAILzPCQA1hOoAAAEAYAPAAEyiARWE6sAgvM8JHITqFIThwCC9swwAgQ0BAAGUAMAATcgUhOHAIL2zDAAehQCXpwEAASaFCAEUhQjAIL0XCgBgA5eaAADAAE1WAMAATZc/SoUjAR6FKsAATJsCAAKGhTHAILwth4U8wCC8kwAGwABMn4DGhX+Fh4WPAQKCHAAAAAEDhY+FjwAAAAAAAABgA8AATKIABsAATJ2AxomQiZ6JrgMCgIwAAAABA4mgia4AAAABAQGJqAAAAIIdYAPAAE3vAABgA8AAStgAAAAguroAILsLACC+QQAgvmkAIL6fAAAABALAAEyigMiELYQ8rjoHpxQBaoQ8YAOT+iYAAWADwABNuQAABgTAAEylgMmgG6aFBqcVwABGOQBdA8AATUYBYAPAAEyiAWqgK10DwABNRgFgA8AATKLAAGrkBMAATKaAyaaXprUGpzXAAEY5AGADwABMogFqpqNgA8AATKLAAFoNBMAATKeAyabGpuUGpzbAAEY5AGADwABMogFqptJgA8AATKLAAFoJBMAATKiAyab3py4GpzfAAEY5AF0DwABNRgFgA8AATKIBaqcWXQPAAE1GAWADwABMosAAbH8EwABMqYDJpz+nkQanOcAARjkAXQPAAE1GAWADwABMogFqp2FdA8AATUYBYAPAAEyiwABslgTAAEyqgMmqU6qXBac7wABGOQBgA6xUAR6qdKxYAQABHKqTFqqMaqp+XQPAAE1GAWADwABMosAAauSByMAATXaDxgEAAZUAwABNygAAKwbAAEytgMmBs4G3gdEAAqPMwABGOQAAAAEDgcWB0QAAAAEBAYHLAAAAgh1gA8AASPUAAGADwABMogAGwABMroDJgdWB2YH2AAKjycAARjkAAAABA4HrgfYAAAABAQGB8AAAAIIdYAPAAEyiAABgA8AATKIABsAATK+AyYH6gf6CGgACo8rAAEY5AAAAAQOCD4IaAAAAAQEBghQAAACCHWADwABMogAAYAPAAEyi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8WqO12EDAVtgAcAATazAAGy0AAABjuZbAY7tAAABaVsAAD4BSo74ASsAACDAFwAgwFEAIMCLACDAxQAgwP8AIME5ACDBcwAgxEwAIMg1ACDIbwAgydoAINLEACDV2wAg14MAINfjACDYGQAg2E8AINiFACDYrQAg2OMAINkZACDZXQAg2ZMAINnJACDZ8QAg2hkAINpBACDadwAg2q0AINrVACDa/QAg2yUAINtNACDbdQAg250AINvFACDb7QAg3BUAINw9ACDcZQAg3I0AINzDACDeugAg4JEAAAArAsAATNqAyoHbgeqNgQenVQAAAWADwABN7wAAAQTAAEzdgMqB6gAEgZLAAEY5AFsBMQBbAhoAwABM4RoAwABM4gEFwABM7YDKgfmB+YIFAAAAA4IDggUAAAAAAAAAYAPAAEzaAT8BCQGB+cAATgUAAAAADAbAAEzfgMqC24Ljg7sEAYf4AAAAAQOC9IO7AAAAAwIDgwcAAACM1mADwABO+wCDJAAAAIzXXQPAAE0EAWADwABN7wCDWAAAAIzYXQPAAE14AmADwABO+2ADwABN7wFqAGABwABNrAIAYAPAAEzaAUqDcgEfg37AAE0BBAAEgIOFwCDh2SuBg5fAIOHngoOswCDh/AAGwABM4IDKhTGFOYZJBAGnVgAAAAEDhVGGSQAAAAQDBIVZAAAAjNZgA8AATvsAhX4AAACNLl0DwABNBAFgA8AATwcAhZ4AAACM110DwABNBAFgA8AATe8AhdIAAACM2F0DwABNeAJgA8AATvtgA8AATe8BagBgAcAATawCAGADwABM2gFKhewBH4X4wABNAQQABICGCsAg4m2BhhbAIOJ7goYlwCDikIOGOsAg4qUABsAATOGAyoabhqOG1gRBjhAAAAABA4a0htYAAAABAQGGvAAAAIZNYAPAAE77AABgA8AATNoBPTUAAAAAgZVbARoAwABNAhMAAAbAAEzigMqIMog6iIoEQaazAAAAAQOIS4iKAAAAAgICiFMAAACM1mADwABO+wCIZgAAAILIYAPAAE3vAABgA8AATNoBPTUAAAAAgZVbARoAwABNAxMAAAbAAEzkgMqIuIjDiM0BAozWAAAAAQOIzYjNAAAAAAAAAGADwABO+wAGwABM5YDKiYGJkImvAQCNLgAAAAEDiZ6JrwAAAAAAAABdA8AATUYBYAPAAE8HAUqJoQFqiaFdA8AATUYBYAPAAE8HgJgGwABM5oDKilyKboqBAQKM1wAAAAEDioGKgQAAAAAAAABdA8AATUYBWwAGwABM54DKizeLUIteAQKM2AAAAAEDi16LXgAAAAAAAABdA8AATXgCYAPAAE77WwAGwABM6IDKi5aLn4unAQKM4wAAAAEDi6eLpwAAAAAAAABgA8AAStgABsAATOmAyowhjCqMMgECjK8AAAABA4wyjDIAAAAAAAAAYAPAAErYAAbAAEzqgMqM/40IjRABAoy9AAAAAQONEI0QAAAAAAAAAGADwABK2AAGwABM64DKjVSNXY1/AQCk4AAAAAEDjWiNfwAAAAAAAABgA8AAStgBSo1rASIWjWsujK/AAEzpARaNdy6MvcAATOoAACDhuQAg4k0AIOL8ACDjRQAg45wAIOPEACDkCQAg5DMAIORjACDkiwAg5LMAIOTbACDlHQAAAAwCwABM7oDKjcyN0pUmA6dXAAABYAPAAE3vAAFgA8AATNoEBMAATPCAyo4Fjg8JjNYAYAPAAE77AATAAEzxgMqOJI4xCY0uAF0DwABNRgFgA8AATwcABMAATPOAyo5+jokJp1jAAEY5AF0DwABNRgFgA8AATe8ABMAATPSAyo7ajuAJp1nAAEY5AF0DwABNeAJgA8AATvtgA8AATe8AAwXAAE0BgMqO5Y7lkIkAh/gAA473kIkAAAAEBASO/QAABIzWYAPAAE77AI8YAAAAp1pdA8AATQQBYAPAAE8HAI82AAAAp1tdA8AATQQBYAPAAE3vAI9WAAAAp1xdA8AATXgCYAPAAE77YAPAAE3vAABgA8AATO4BPwUIAcAATPCAAMAg5hAIAMAATPEej3XAAEz+AQABHo+JwABM/wEBYAPAAE8HAYGPocAg5h4AAAgAwABM8zWPwAAAAQBdA8AATUYBYAPAAE3vAR6PwMAATP8BAWADwABN7wGCj9rAIOYzACMcj8CEj8DAIOapgIwBAAErAMAATXBqj+ldA8AATUYBYAPAAE3vwABsuYSPwMAg5qkBXQPAAE1GAWADwABN7wgAwABM9CMiHJATg5ANwCDmSICMAQABKwDAAE38ARaQJIOQHsAg5kiA48AATZ1qkDtdA8AATXgCYAPAAE77YAPAAE3vwABswR6QYMAATYIBAmADwABO+2ADwABN7wGDkIPAIOZIAAFdA8AATXgCYAPAAE77YAPAAE3vCQGO5cAATgUAAAAABcAATQKAypCOkI6RCwCOEAADkKCRCwAAAAEBAZCmAAAEjNZgA8AATvsAAGADwABM7gE/BQgBwABM8IAAwCDntggAwABM8WqQyl0DwABNRgFgA8AATweAmAgAwABM8ysIAMAATPQrCQGQjsAATgUAAAAABcAATQOAypEQkRCRvwCmswADkSKRvwAAAAICApEoAAAEjNZgA8AATvsAkTsAAACCyGADwABN7wAAYAPAAEzuAT8FCAHAAEzwgADAIOgoCADAAEzxapFdXQPAAE1GAWADwABPB4CYCADAAEzzHpGBwABNTwEBYAPAAE3vATGRnVsBgZGewCDoNgAIAMAATPQrCQGREMAATgUAAAAACAbAAEz2gMqRxJHWkgwBAIzXAAAAAQOR6pIMAAAAAAAAAF0DwABNRgFbAUqR7QE1ke0AAAEAXQPAAE1GAWADwABN7wEWke0up1jAAEY5wABM8yMcke2Ake3AIOjYgIwBAAErAMAATXBqkfxdA8AATUYBYAPAAE3vwABsuYCR7cAg6NgBXQPAAE1GAWADwABN7wbAAEz3gMqSEZIqkl4BAIzYAAAAAQOSOZJeAAAAAAAAAF0DwABNeAJgA8AATvtbAUqSPAE1kjwAAAEAXQPAAE14AmADwABO+2ADwABN7wEWkjwup1nAAEY5wABM9CMckjyAkjzAIOlugIwBAAErAMAATfxqkkZdA8AATXgCYAPAAE77YAPAAE3vwABswYCSPMAg6W4BXQPAAE14AmADwABO+2ADwABN7wbAAEz4gMqSY5JskoYBAIzjAAAAAQOSdZKGAAAAAAAAAGADwABK2AFKkngBIRySfxaSeC6nWcAARjnAAEz0gIwBAAErAMAATfwGwABM+YDKkoqSk5KyAQCMrwAAAAEDkpySsgAAAAAAAABgA8AAStgBSpKfARySqxaSny6nWMAARjnAAEzzgIwBAAErAMAATXAGwABM+oDKkraSv5LwAQCMvQAAAAEDksiS8AAAAAAAAABgA8AAStgBSpLLASIhHJLXFpLLLqdYwABGOcAATPOAjAEAASsAwABNcAAckukWkuIup1nAAEY5wABM9ICMAQABKwDAAE38BsAATPuAypL0kv2TGQEApOAAAAABA5MIkxkA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p0kAAACB3WADwABMogCnUgAAICJfAwAAAABcAAbAAE1ygMyn/qgHqBUCAoHCAAAAAQOoDKgVAAAAAQEBqA8AACAiXwMAAAAAXAAGwABNc4DMqMuo1KjhAgKB1QAAAAEDqNio4QAAAAEBAajbAAAgIl8DAAAAAFwABsAATXaAzKloqXCpdgECgcgAAAABA6l2qXYAAAAAAAAAYAPAAEyiAAbAAE10gMyqWKpcqnECAoHIAAAAAQOqYqpxAAAAAQEBqmcAAACDdWADwABMogAAXAAGwABNV4DMqxOrGKskAAKAggAAAAEDqxurJAAAAAEBAaseAAAgIl8DAAAAAFwABsAATViAzKwGrAusJwACg2sAAAABA6wRrCcAAAABAQGsHgAAIIQiXQPAAE0EAV8DAAAAAFwABsAATXeAzKyBrJGsmQEChHkAAAABA6yZrJkAAAAAAAAAXQPAAE0EAV8DAAAABsAATVmAzLCrsLCwzQAChFkAAAABA7C0sM0AAAABAAGwugAAAIRaYQMCXwMAAF8DAABgA8AATKIBagBgAcAATawCAFwABsAATVqAzLEQsRWxLQAChFwAAAABA7EcsS0AAAABAAGxJQAAAIRdYAOZQQFqAGABwABNrAIAXAAGwABNW4DMsxSzGLM7AAKEcAAAAAEDsx+zOwAAAAIBArMiAAAggbxfAwAAALMwAAAAbWADwABMogFqszhgA8AATKIaAGADwABMogAGwABNXIDMtaC1pLXVAAKEcQAAAAEDta611QAAAAIBArW0AAAAgRthAwFfAwAAYAPAAErYALXKAAAAbWADwABMogFqtdJgA8AATKIaAGADwABMogAGwABNXYDMuDO4N7hoAAKEcwAAAAEDuEW4aAAAAAIBArhLAAAAgRthAwFfAwAAYAPAAErYALhhAAAAbWADwABMogFqAGABwABNrAIAYAPAAEyiAAbAAE1egMy6urq+uuEAAoRyAAAAAQO6ybrhAAAAAgECuswAACCBvF8DAAAAutoAAABtYAPAAEyiAWoAYAHAAE2sAgBgA8AATKIABsAATV+AzLuru7C7twACgOcAAAABA7u1u7cAAAAAAAAAXAAGwABNYIDMvPe8/L0YAAKEdAAAAAEDvQK9GAAAAAICAr0HAAAAgd1gA8AATKIAvRAAACCBvF8DAAAAAFwABsAATWGAzL5svnG+mwAChHYAAAABA756vpsAAAACAgK+fwAAAIHdYAPAAEyiAL6SAAAghCJdA8AATQQBXwMAAAAAXAAGwABNYoDMwABBAMAAQQXAAEEsAAKEeAAAAAEDwABBC8AAQSwAAAACAgLAAEEQAAAAgd1gA8AATKIAwABBIwAAIIQiXQPAAE0EAV8DAAAAAFwABsAATWOAzMAAQ43AAEOSwABDpgACg2wAAAABA8AAQ5jAAEOmAAAAAQEBwABDoAAAACJgA8AATe8AAGADwABK2AAGwABNZIDMwABFPsAARUDAAEVTAAKEdQAAAAEDwABFSMAARVMAAAABAQHAAEVNAAAAgd1gA8AATKIAAF8DAAAABsAATWWAzMAARgXAAEYHwABGEwAChC8AAAABA8AARhHAAEYTAAAAAAAAAF8DAAAABsAATWaAzMAAR5nAAEeewABHvwACg5UAAAABA8AAR6nAAEe/AAAAAQEBwABHrwAAAIEbYQMBXwMAAGADwABK2AAAXAAGwABNZ4DMwABJSsAASU/AAElwAAKDlgAAAAEDwABJWsAASXAAAAABAQHAAElgAAAAgRthAwFfAwAAYAPAAErYAABcAAbAAE1ogMzAAErUwABK5cAASvUDAoENAAAAAQPAAErmwABK9QAAAAEBAcAASu8AACCCHV0DwABNRgFfAwAAAABdA8AATUYBXwMAAAAGwABNaYDMwABN9sAATf7AAE4bAAKEYQAAAAEDwABOBcAAThsAAAACAQLAAE4KAAAAbWADwABMogDAAE4WAAAAhFRgA8AATKIBagBgAcAATawCAF0DwABNRgFfAwAAAAbAAE1qgMzAAFGAwABRjMAAUagAAoRjAAAAAQPAAFGUwABRqAAAAAICAsAAUZkAAABtYAPAAEyiAMAAUaQAAACEVGADwABMogAAXQPAAE0EAV8DAAAABsAATWuAzMAAVkLAAFZHwABWjgAChFgAAAABA8AAVk/AAFaOAAAABAMEwABWVAAAAG1gA8AATKIAwABWXwAAAIRUYAPAAEyiAMAAVnAAACCEIl0DwABNBAFfAwAAAMAAVn8AAACEZ2ADwABMogFqwABWi2ADwABMohoAXAAGwABNbIDMwABYisAAWI/AAFiuAAKEZAAAAAEDwABYmsAAWK4AAAACAgLAAFifAAAAbWADwABMogDAAFiqAAAA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ITEHACExNgAAAAQCwABNuYDSgaOBssAAROUHmKcBaoGyYAOT+iYAAWADwABN7wABXQPAAErkAWADwABNuQABBcAATe4AAAAABAAAAwAAAAAAAAAAAGADwABNuQE/AQkBAMAATgUAAAAAMAbAAE28gKqJUolWiXAAAqNIwABGOQAAAAEDiWWJcAAAAAEBAYlqAAAAgh1gA8AATKIAAGADwABNuQAGwABNvYCqiXSJeImSAAKjScAARjkAAAABA4mHiZIAAAABAQGJjAAAAIIdYAPAAEyiAABgA8AATbkABsAATb6AqomWiZqJtAACo0rAAEY5AAAAAQOJqYm0AAAAAQEBia4AAACCHWADwABMogAAYAPAAE25AAbAAE2/gKqJuIm8idsAAqNLwABGOQAAAAEDidCJ2wAAAAEBAYnVAAAAgh1gA8AATKIAAGADwABMogAGwABNwICqid+J44oAAAKjTMAARjkAAAABA4n1igAAAAABAQGJ+gAAAIIdYAPAAEyiAABgA8AATbkABsAATcGAqooEigiKKAACo03AAEY5AAAAAQOKHYooAAAAAQEBiiIAAACCHWADwABMogAAYAPAAE25AAbAAE3CgKqKLIoxilMAAqNOwABGOQAAAAEDikiKUwAAAAEBAYpNAAAAgh1gA8AATKIAAGADwABK2AAGwABNw4CqileKXIp2AAKjRMAARjkAAAABA4prinYAAAABAQGKcAAAAIIdYAPAAEyiAABgA8AAStgABsAATcaA0ocLhxmHKQMCgIwAAAABA4cbhykAAAABAQGHIwAAAIIdYAPAAE3vAABgA8AAStgABsAATeeA0oiEiIyIlAECghwAAAABA4iUiJQAAAAAAAAAYAPAAEyiAAbAAE3HgNKQR5BLkF8AAqKTAAAAAQOQVJBfAAAAAQEBkFkAACCCHWADwABNuQAAYAPAAEyiAAbAAE3IgNKQgJCNkJkDAoENAAAAAQOQjpCZAAAAAQEBkJMAAACCHWADwABNuQAAYAPAAE25AAbAAE3JgNKQvZDKkNYDAoEGAAAAAQOQy5DWAAAAAQEBkNAAAACCHWADwABNuQAAYAPAAE25AAbAAE3KgNKQ/ZEKkRYDAoPGAAAAAQORC5EWAAAAAQEBkRAAAACCHWADwABNuQAAYAPAAE25AAbAAE3LgNKTapN3k4MDAoZ4AAAA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TKIBHsAARCjAAEzSAQABgcAARDHAITuSACMcwABEKILAAEQowCE7xICMAQABKwDAAE3GHsAAREPAAEtvAQABgcAAREzAITuSAILAAEQowCE7xAFgA8AATbkGwABNxIDSwABEg8AARI7AAESuAAGnd8AARjkAAAABA8AARJzAAESuAAAAAQEBwABEpAAAAICKYAPAAE6JAABgA8AATKIBSsAARKoBKwbAAE3FgNLAAESywABEwMAAROMAAad4wABGOQAAAAEDwABE0cAAROMAAAABAQHAAETZAAAAgIpgA8AATokAAGADwABLUAFKwABE3wErAAAhMa4AITHoACEyIgAhMlwAITKWACEy0AAhMwoAITNEACEzfgAhM7QAITPcACE0EgAhNEgAITR+ACE0tAAhNOoAITUgACE1VgAhNX4AITW0ACE16gAhNiAAITZWACE2jAAhNrQAITbcACE3BAAhNywAITdUACE3fAAhN6QAITfMACE39AAhOBwAIThEACE4bAAhOJQAITi8ACE5AAAhOSgAITlQACE5hgAhOcUAITn7ACE6IwAhO00AITwpACE8dgAhPMMAAAAwAsAATe+A04NHg2eQjoOneQNqg2dgA5P6JmqDZ2ADwABKnwNqg2dgA8AASp8DAAAAAAEEwABN8oDUg3WDkAWnesAARjkAYAOZQQEeg4iZQwAAAAABBcAATgWA04Q/hEWETQEAAAOES4RNAAAAAAAAAGADwABN7wE/AA0GwABN9YDUg5WDoITuAAGne8AARjkAAAABA4OvhO4AAAABAQGDsAAAAJMcWwAAYAPAAEyiAT4DToO/g8YAAIDmYAPAAEyiAR6DyMAARmsBAAGAg9HAIT4qAEmD2xyD5oGD38AhPj6AjAEAAZMAwABNxj4DPYmEMMAhPj4chEYahDnAAE3yhF4BAAE5pxYAmUZEhGE+AT2JhG7AIT4+HISEGoR3wABN8oReAQABOacWAJlGHISvgYSowCE+PoCMAQABkwDAAE3GPR6EvMAARmwCAAKAhMXAIT4qgYTKwCE+PgA/SoTdAYGE5MAhPj4GwABOAYDUhSmFMYVbAQCjNcAARjkAAAABA4VDhVsAAAAAAAAAYAPAAEyiAUqFRgEehUbAAE31AQABLgAGwABN9oDUhdCF3oYFAAWIE8AARjkBagBgA5QIwABs9AAAAQOF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AT0Xh7kuiGHAAEY5NYfCAAABAGADwABMogEWh8Iup6DAAEY5wABOdyMch8KAh8LAIVuBgIwBAAErAMAATcYeh8vAAE58AAAAAICHwsAhW4EBYAPAAEyiwABOdgbAAE6CgNqJPIlEiXwBAKekAAAAAQOJUYl8AAAAAAAAAGADwABMogE+AUqJVwEciXA1iV8AAAEAYAPAAEyiARaJXy6noMAARjnAAE53IxyJX4CJX8AhXAGAjAEAASsAwABNxh6JaMAATnwAAAAAgIlfwCFcAQFgA8AATKKBBgEAARaJci6IYcAARjnAAE52AMAATckGwABOg4DaiciJ1YoZAQCBpAAAAAEDid2KGQAAAAAAAABgA8AAS3QBPgFKieMBH4nqwABLoAEAAAGgQhaKAS6VucAAToQGwABOhIDbgpaCp4UXAQCVuQFqgqdgA5P6JgAAAQOCu4UXAAAAAAAAAGADwABMogE+CE6CxYLLAACnpWADwABMogEWgs0up6TAAE6CSYNFHINUGoNJwABOdYCMAQABN/uaygAAwABNxkqDYwEcg3CAg2rAIVzbhpIBAAE3g+gAwABNzT9Jg30cg4wag4HAAE51gIwBAAE3wA9CQADAAE3GSoOYAYCDn8AhXNs/SYOqHIO5GoOuwABOdYCMAQABN4PoAMAATcZKg8IBHIPPgIPJwCFc24PGAQABN4PoAMAATco/SYPbHIPlgIPfwCFc24FbAQABHIPxaoPpYAPAAEyiwABaDYaSAQABN8APQkAAwABNzQDAAE3RPgFKhAYBHIQfHIQUgIQOwCFc24PGAQABN8APQkAAwABNyoaSAQABGoQiwABOdQDAAE3NP06EaYR4AACnpmADwABMogEchICAhHrAIVzbhpIBAAEahIPAAE51AMAATc1OhJeEpgAAp6dgA8AATKIBJoSXARyEroCEqMAhXNuiXgEAARqEuMAATnUAwABNz2ADwABMokqEyQEchOkchN+BhNDAIV31g8YBAAE3wA9CQADAAE3KgQ0BAAEchQYchPuChOzAIV4gg8YBAAE3wA9CQADAAE3KhpIBAAEahQnAAE51AMAATc0AwABNyAbAAE6FgNuFHIUthy8BAKeoAWqFLWADk/omAAABA4VBhy8AAAAAAAAAYAPAAEyiAT4IToVLhVEAAKelYAPAAEyiARaFUy6npMAAToJJhWUchXQahWnAAE51gIwBAAE3+5rKAADAAE3GSoWDARyFkICFisAhXt6GkgEAATfAD0JAAMAATc0/SYWgHIWvGoWkwABOdYCMAQABN8APQkAAwABNxkqFuwEchciAhcLAIV7ehpIBAAE3g+gAwABNzT9JhdUcheQahdnAAE51gIwBAAE3g+gAwABNxkqF7QGAhfTAIV7eP0mF/xyGCYCGA8AhXt6BWwEAARyGFWqGDWADwABMosAAWg2GkgEAATeD6ADAAE3NAMAATdE+AUqGJwEchj0chjWAhi/AIV7eg8YBAAE3g+gAwABNyoaSAQABGoZAwABOdQDAAE3NP06Gh4aWAACnpmADwABMogEchp6AhpjAIV7ehpIBAAEahqHAAE51AMAATc1OhrWGxAAAp6dgA8AATKIBJoa1ARyGzICGxsAhXt6iXgEAARqG1sAATnUAwABNz2ADwABMokqG5wEchwQchv2Bhu7AIV/2g8YBAAE3g+gAwABNyoENAQABHIceHIcWgocHwCFgIYPGAQABN4PoAMAATcqGkgEAARqHIcAATnUAwABNzQDAAE3IBsAAToaA2os9i0aLYAEAp6kAAAABA4tQi2AAAAAAAAAAYAPAAErYAUqLUwEci1kWi1Mup6DAAEY5wABOd4CMAQABKwDAAE3GBsAATnuA24FSgWeBxQABp6rAAEY5AWqBZ2ADk/omAAABA4FygcUAAAAAAAAAXAE+AUmBexyBihqBf8AATnWAjAEAASsAwABNxj4BPRuBm8AATnUegajAAE56AAAAAD8GwABOfIDbge+CA4IgAAWl38AARjkCaoIDYAOT+iZqggNgA5QIwABtjQAAAQOCB4IgAAAAAAAAAGADwABMogAAACFZ3AAhWhIAIVpFACFa7AAhW1AAIVvPACFcYwAhXKgAIV6rACFgqAAhYPAAIWFPACFhjgAAAAwCwABOiYDcjt6O7cAAWg0Hp6wBao7tYAOT+iYAAWADwABN7wACXQPAAErkAWADwABOiWADwABOBgAAJQbAAE6MgLaGIIYphjMBAqUqwABGOQAAAAEDhjOGMwAAAAAAAABgA8AAStgABsAATpWAtoY3hj6GbwACpPbAAEY5AAAAAQOGUYZvAAAAAgIChlYAAACHn2ADwABMogCGZgAAAIegYAPAAEyiAABgA8AATokABsAATrGAtoGkgayC0QQBp60BaoGsYAOT+iYAAAEDgcCC0QAAAAMBA4HPAAAApSxdA8AATQQBYAPAAEyiAIHlAAAAbWADwABMogFqge1gA8AATKIagfQAAACEVGADwABMogFqAGABwABNrAIAYAPAAE6JAT4DSYIAHIIOgIIEwCFinoCMAQABKwDAAE38PTCCFx+CIcAAS9MBAAEnpSwAP0mCSRyCU4GCTcAhYrOAjAEAASsAwABNxj0wglwfgmbAAEvTAQABJ20AP0qCigEegp3AAEndBAAEgIKxwCFinoGCvMAhYrOCgsPAIWLKKwAGwABOsoC2gt+C54WfBAGnrgFqgudgA5P6JgAAAQOC+oWfAAAAAQEBgv8AAACFt2ADwABMogAAYAPAAE6JAT4CSYMPHIMcgIMTwCFjjYFeAQABkwDAAE3TPgNJgyocgzeAgy7AIWONgVsBAAE3gP8AwABN0T4BSoNKATWDYAAAAQBgA8AASggBHoNgwABKGQEAAZQANYNuAAABAFwBHINugYNgwCFj4KPewABGOQIAApOAg3jAIWONAMAAShuBg2DAIWPgP0mDkRyDnoCDlcAhY42BWwEAATfAAP//AMAATdE+AUqDswEeg8bAAEnLAwADNYPtAAABAF0DwABGjQFgA8AATKIBHoPtwABGjwEBYAPAAEyiAZQANYP3AAABAFwBHIP3gYPtwCFkV4EMAgACk4CD/cAhY40AwABGkoGD7cAhZFeTlAA/SYQcHIQpgIQgwCFjjYFbAQABN8AQ//8AwABN0T4EToREhEgAAJviYAPAAEyiARyEUTfAANwAgKYBAAEchF2AhFTAIWONgKEBAAE3g/8AwABMugDAAEy7ToRzhHgAAIW6YAPAAEyiARyEg4CEesAhY42BBgEAATfAAQAAAMAATclOhJqEnwAAm+RgA8AATKIBHISoN8AA2ACApgEAARyEsIKEq8AhZQWDxQEAATcKAMAATL8AwABMu0qEwAEehNPAAEnLAwADNYT6AAABAF0DwABGjQFgA8AATKIBHoT6wABGjwEBYAPAAEyiAZUANYUTAAABAFwBHIUThIT6wCFldIEMAgACk4OFGcAhZS4AwABGkjWFLgAAAQBcARyFLoSE+sAhZXSBDAIAApSBhTTAIWTMAMAARpKEhPrAIWV0k5UAPz89MIVqH4V0wABL6AMAA4CFhcAhY42TN8AQ//8ABsAATrOAtoWthbuGGwQNpacCaoW7YAOT+iZqhbtgA5QIwABtmwAAAQOF0YYbAAAAAgEBhdkAAACGTWADwABOiQABhecAAACMymADwABOiQFqAGABwABNrAJgA8AATokABsAATpaA3JpTmmOacAMCgtEAAAABA5plmnAAAAABAQGaagAAAIHdYAPAAEyiAABgA8AATokABsAATpeA3JrAmsSa2QAChdAAAAABA5rOmtkAAAABAQGa0wAAAIHdYAPAAEyiAABgA8AATKIABsAATo2A3JyQnJicngECgcgAAAABA5yenJ4AAAAAAAAAYAPAAEyiAAbAAE6OgNydb513nX8BAoIcAAAAAQOdf51/AAAAAAAAAGADwABMogAGwABOmIDcn8+f3Z/tAwKAjAAAAAEDn9+f7QAAAAEBAZ/nAAAAgh1gA8AATe8AAGADwABK2AAGwABOmYDcoo2ikaKoAAKikwAAAAEDopqiqAAAAAEBAaKiAAAggh1gA8AATokAAGADwABMogAGwABOmoDcoyajK6NBAAKUOwAAAAEDozOjQQAAAAEBAaM7AAAAgh1gA8AATokAAGADwABK2AAGwABOm4Dcpsym0ab9AAKImgAAAAEDptum/QAAAAIBAqbkAAAApOlgA8AATgYApvIAAACB3WADwABMogFqpvpgA8AATKIaAGADwABK2AAGwABOnIDcqMeoy6jwAAKEcAAAAAEDqNKo8AAAAAIBAqjbAAAApOlgA8AATgYAqOkAAABtYAPAAEyiAWoAYAHAAE2sAgBgA8AATKIABsAATp2A3Krqqu6rFwAChHIAAAABA6r5qxcAAAACAQKrAgAAAKTpYAPAAE4GAKsQAAAAbWADwABMogFqAGABwABNrAIAYAPAAEyiAAbAAE6PgNyrU6tcq2MBAoDjAAAAAQOrY6tjAAAAAAAAAGADwABK2AAGwABOkIDcq6OrrKu2AQKDYgAAAAEDq7artgAAAAAAAABgA8AAStgABsAATp6A3Kw5rEmsWAMCgQ0AAAABA6xKrFgAAAABAQGsUgAAAIIdYAPAAE6JAABgA8AATokABsAATp+A3K1crWOtjAAChhMAAAABA61srYwAAAACAQKtcQAAAIefYAPAAEyiAK2CAAAAh6BgA8AATKIBagBgAcAATawCAGADwABOiQAGwABOoIDcs+6z9bP7AAKjewAAAAEDs/mz+wAAAAAAAABgA8AATokABsAATqGA3LR+tIW0jwACpUYAAAABA7SNtI8AAAAAAAAAYAPAAE6JAAbAAE6igNy1FLUbtSYAAqVHAAAAAQO1JLUmAAAAAAAAAGADwABOiQAGwABOo4DctjO2Q7ZPAwKDxgAAAAEDtkS2TwAAAAEBAbZJAAAApUhgA8AATKIAAGADwABOiQAGwABOpIDcuRa5HblHAAKGOwAAAAEDuSS5RwAAAAIBArkpAAAAjD1gA8AATKIAuTgAAACGvGADwABOiQFquUJgA8AATonAAGbuAGADwABOiQAGwABOpYDcvA+8FrxBAAKlSQAAAAEDvB68QQAAAAIBArwjAAAAjD1gA8AATKIAvDIAAACGvGADwABOiQFqvDxgA8AATonAAGbuAGADwABOiQAGwABOpoDcvlG+Vr6DAAKBxAAAAAEDvl6+gwAAAAIBAr5nAAAAgh1gA8AATgYAvnMAAACHn2ADwABMogFqvoBgA8AATKIaAGADwABK2AAGwABOp4Dcv6m/sL/rAAKlSgAAAAEDv7y/6wAAAAMCA7/FAAAAgsBgA8AATgYAv9IAAACH7mADwABOiQC/2wAAAIefYAPAAEyiAWq/6GADwABMohoAYAPAAE6JAAbAAE6ogNzAAEGkwABBq8AAQgQAAqVWAAAAAQPAAEG9wABCBAAAAAMCA8AAQcYAAACCwGADwABOBgDAAEHTAAAAmcBhAwFgA8AATgxgA8AATokAwABB9AAAAIefYAPAAEyiAWrAAEIBYAPAAEyiGgBgA8AATokABsAATqmA3MAARCjAAEQvwABEVwACkc4AAAABA8AARDnAAERXAAAAAgICwABEQgAAAILAYAPAAE4GAMAARE8AAACZwGADwABOiQAAYAPAAE6JAAbAAE6qgNzAAEh5wABIgMAASLsAAqVVAAAAAQPAAEiQwABIuwAAAAICAsAASJkAAACCwGADwABOBgDAAEimAAAAmcBhAwFgA8AATgxgA8AATokAAGADwABOiQAGwABOq4DcwABKQcAASkjAAEp8AAKEagAAAAEDwABKVMAASnwAAAADAwPAAEpZAAAAbWADwABMogDAAEpkAAAAhFRgA8AATKIAwABKcAAAAIDNYAPAAE6JAABgA8AATokABsAATqyA3MAAUZTAAFGhwABRtwAChMsAAAABA8AAUabAAFG3AAAAAQEBwABRrwAAAKTpYAPAAE4GAABdA8AATUYBYAPAAE6JAAbAAE6tgNzAAFRywABUecAAVN8AAqVcAAAAAQPAAFSFwABU3wAAAAMBAcAAVI4AAACk6WADwABOBgACwABUpQAAAKVaYQMBYAPAAE4MYAPAAE6JAWoAYAHAAE2sAsAAVMIAAAClW2EDAWADwABOiWADwABOiQFqAGABwABNrAJgA8AATokABsAATpGA3MAAVTvAAFVJwABVUgEChl0AAAABA8AAVVLAAFVSAAAAAAAAAF0DwABNRgFgA8AATKIABsAATpKA3MAAVmbAAFZwwABWdQECpWIAAAABA8AAVnXAAFZ1AAAAAAAAAGADwABOtAAGwABOroDcwABYLMAAWDPAAFhAAAKG+wAAAAEDwABYPsAAWEAAAAAAAAAAYAPAAE6JAAbAAE6vgNzAAFn3wABZ/sAAWgsAApbBAAAAAQPAAFoJwABaCwAAAAAAAABgA8AATokAAAAhYgIAIWIuACFidgAhY2UAIWYMACFmbAAhZqIAIWbYACFnAAAhZygAIWdeACFnlAAhZ8oAIWgYACFoZAAhaLAAIWjYACFpAAAhaTYAIWmDACFpqwAhadMAIWn7ACFqMQAhaoIAIWrTACFrIQAha30AIWv0ACFsRgAhbKEAIW0CACFtSwAhbdEAIW4KACFuPAAhbm4AIW6gAAAAJQLAAE60gNzAAFpSwABaWMAAXH4Dp7AAAAFdA8AATQQBYAPAAEyiAAABBMAATraA3MAAWoXAAFqLCYZHAGADwABOiQABBcAATruA3MAAWo/AAFqPwABaoQAAAAPAAFqUwABaoQAAAAEBAcAAWpoAAASGR2ADwABOiQAAYAPAAE60AT8CCAHAAE62gADAIW+mCQHAAFqPwABNLgAAAAACBsAATriA3MAAWqbAAFq3wABa1wEAgQgAAAABA8AAWsDAAFrXAAAAAAAAAGADwABOvAFKwABawwEfwABaw8AATtEBAAEWwABa0C6GR8AATrYABsAATrmA3MAAWtzAAFrkwABcfAEAgdUAAAABA8AAWunAAFx8AAAAAAAAAGADwABMogE+BUnAAFrvHMAAWwEWwABa+hbAAFrzLoZHwABOtoHIwABOjYCMAQABkwDAAE3GPgE9MMAAWw8fwABbFcAATD4BAAEnp7EAP07AAFs/wABbRgAAgchgA8AATKIBFsAAW08WwABbSC6GR8AATraByMAATo1OwABbX8AAW2QAAIa1YAPAAEyiARzAAFttFsAAW2YuhkfAAE62hdABAAEcwABbf4DAAFt4wCFwpoEGAQABlADAAE3JAMAATpdJwABbiSIewABbjcAARm8BAAGBwABbn8AhcNEAABzAAFu2FsAAW68WwABbqC6GR8AATraByMAATo2CjAEAAZQAwABN0j4CTsAAW8fAAFvUAACnsmADwABMogEcwABb3RbAAFvWLoZHwABOtoXQAQABHMAAW++AwABb6MAhcKaBBgEAAZUAwABNyQDAAE6XScAAW/sewABb/8AARm4BAAGCwABcEMAhcV8APgFKwABcKQEewABcMMAARnACAAKCwABcRsAhcV+BwABcVMAhcNEAPz9KwABcbQGBwABcdMAhcNEAACFv2wAhcCwAIXH5AAAAAgLAAE68gNzAAF6gwABepsAAcfEDp7MAAAFgA8AATe8AAV0DwABNOgFgA8AATKIEBMAATr6A3MAAXwrAAF8QCYZHAGADwABOiQAEwABOwIDcwABfScAAX1IYhNHAAEY5AGADwABMogAEwABOwYDcwABfisAAX5cYp7TAAEY5AGADwABMogAEwABOwoDcwABgPcAAYE4Yp7XAAEY5AGADwABMogErAgXAAE7RgNzAAGCawABgmsAAYQQAAAADwABgpsAAYQQAAAABAQHAAGCuAAAAhkdgA8AATokAAGADwABOvAE/BAgAwABOvoDAAGDMwCFy1AgAwABOwJMIAMAATsGTCQHAAGCawABOBQAAAAAFwABO0oDcwABimsAAYprAAGN5AIrGAAPAAGKpwABjeQAAAAICAsAAYrEAAACGR2ADwABOiQDAAGK9AAAAgd1gA8AATKIAAGADwABOvAE+Aj0ewABjJ8AAS90DAAOBwABjPMAhc0+TFsAAY02AwABjRsAhcz+ByMAATo0APRzAAGNaLqe2wABGOQEAAYHAAGNvwCFzTwDAAE7FBAgAwABOvoDAAGLVwCFzPwgAwABOwIHAAGLxwCFzTwgAwABOwYHAAGMQwCFzTwkBwABimsAATgUAAAAACQbAAE7FgNzAAGPJwABjzsAAZOEAAKe2wABGOQAAAAED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AF0DwABIHAFgA8AATokBHpJVwABIPwEBYAPAAE6JATcKADWSdQAAAQBcARySdYKSVcAhghuAggEAAYCSecAhgVkAwABIM4KSVcAhghvAAE7ZPgM9HJKZFpKSLqX9wABGOcAATtmAggEAAYCSncAhgVkAwABNV06SrZLCAACnyWADwABMogEcktIWkssWksQupf3AAEY5wABO2YHIwABNdoEGAQABFpLULqfBwABGOcAATtsAwABNyUmS8RyTCoKS9cAhgpeAjAEAAWqTDWADwABMonUAwABNxj4BPRyTKi6nysAARjkAAAAAwABO5T8GwABO5YDek9uT4JWeAACnysAARjkAAAABA5PolZ4AAAAAAAAAXAE+A0mT8RyUFBaT9S6nwsAARjnAAE7cgLsBAAFqlBZgA8AATKKGgwDAAE3QPgNOlEOUTQAAp8tgA8AATokBHpRbwABJ2wMAAxaUcy6l/cAARjnAAE7ZFpSFLqfBwABGOcAATtsclMUWlK8up8HAAEY5wABO24ENAQABapTHYAPAAEyidQDAAE3IAD0XlPoWlPMupf3AAEY5wABO2YHIHJURFpUKFpUDLqX9wABGOcAATtmByMAATXaBBgEAAWqVE2ADwABMonUAwABNycAATXQ9HJUzFpUsLqX9wABGOcAATtmAggEAAYCVN8Ahg2QAwABNVz89F5VNLqfCwABGOZPAAE7cPReVdS6nwcAARjkWlZQWlY0upf3AAEY5wABO2YHIwABNdsAATtsGwABO5oDeleyV+pZnAAWRj8AARjkBagBgA5QIwABtqQAAAQOWAZZnAAAAAwMDlg0AAACBwWADrDYAlhkAAACByGADwABMogCWJgAAAIYxYAPAAErYAABgA8AATokABsAATu6A3odqh3uHpgEAgcgBaod7YAOT+iYAAAEDh4KHpgAAAAAAAABgA8AATKIBSoeFARyHlRaHhS6nwMAARjnAAE7agQ0BAAEWh5cup8PAAEY5wABO3gDAAE3IBsAATu+A3YNgg2mDfwEAgOMAAAABA4Nxg38AAAAAAAAAYAPAAErYAUqDdAEcg3sWg3QugcjAAE7ugIwBAAGTAMAATcYGwABO8IDdg+aD74QFAQCDYgAAAAEDg/qEBQAAAAAAAABgA8AAStgBSoP9ASEWg/4ugOPAAE7vBsAATueA3oerh7mILgAAgcMBaoe5YAOT+iYAAAEDh76ILgAAAAEBAYfGAAAAkxxgA8AATe8AAFwBPgROh9iH3AAAh5hgA8AATokBJIfkAYCH4MAhhb1Jh+oWh/KBh+7AIYXRgOPAAE6PSof7AD89HIgHLqfHwABGOQAAAADAAE7jPRyIHS6nyMAARjkBAAGBiCbAIYXRAMAATuQGwABO6IDeiDOIQYqlAACGFAFqiEFgA5P6JgAAAQOIToqlAAAAAQEBiFMAAACFt2ADwABMogAAXAE+AUmIYxyIcICIZ8AhhliBWwEAATfAAP//AMAATdE+BEmIgxyIkICIh8AhhliAuwEAAZMAwABN0D4BPTCInx+IqcAAS+gDAAOAiLrAIYZYkzfAEP//AD89HIjgLqfGwABGOQEAAZQAwABO4j0ciQEWiPouhsnAAEY5wABO3YEMAgACNYkCAAABAGADwABMogEWiQIup8PAAEY5wABO3jWJAgAAAQBgA8AATKIBF4kCLqfDwABGORyJEYGJAsAhhuyBDQEAAZQAwABNyMAATt6BiQLAIYbsgIkXwCGGWADAAE1WPReJJy6nxMAARjkciUAWiScup8TAAEY5wABO34CmAQABgIlDwCGGWADAAEy7wABO3z4GSYlgHIltgIlkwCGGWIKMAQABN8AQ//8AwABN0j4BPTCJgx+JjcAAS+gDAAOAiZ7AIYZYkzfAEP//AD89HInELqfGwABGOQEAAZUAwABO4k6J4onnAACFumADwABMogEcifKAienAIYZYgQYBAAE3wAEAAADAAE3JPRyKChaKAy6GycAARjnAAE7dgQwCAAI1igsAAAEAYAPAAEyiARaKCy6nw8AARjnAAE7eNYoLAAABAGADwABMogEXigsup8PAAEY5HIoagooLwCGIDoENAQABlADAAE3IwABO3oKKC8AhiA4ciic3wADYAICmAQABHIovgYoqwCGHzoPFAQABNwoAwABMvwDAAEy7AMAATVY9HIpEFoo9LobJwABGOcAATt2BDAIAAjWKRQAAAQBgA8AATKIBFopFLqfDwABGOcAATt41ikUAAAEAYAPAAEyiAReKRS6nw8AARjkcilSCikXAIYimgQ0BAAGUAMAATcjAAE7egopFwCGIphyKYTfAANwAgKYBAAEcimmBimTAIYfOgKEBAAE3g/8AwABMugDAAEy7AMAATVY9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StgABsAATx+A4sAAQ2nAAENywABDegECp98AAAABA8AAQ3rAAEN6AAAAAAAAAGADwABK2AAGwABPIIDiwABDvcAAQ8bAAEPRAQKn4AAAAAEDwABD0cAAQ9EAAAAAAAAAYAPAAErYAAbAAE8hgOLAAEQSwABEG8AARCcBAqfhAAAAAQPAAEQnwABEJwAAAAAAAABgA8AAStgABsAATyKA4sAARH/AAESIwABElwECp+IAAAABA8AARJfAAESXAAAAAAAAAGADwABK2AAGwABPI4DiwABFzsAARdnAAEXfAQKZtQAAAAEDwABF38AARd8AAAAAAAAAYAPAAE6JAAbAAE8vgOLAAEe7wABHwMAAR9cAAqfjAAAAAQPAAEfIwABH1wAAAAEBAcAAR9AAAACL3mADwABOiQAAYAPAAErYAAbAAE8wgOLAAFKrwABSssAAUswAApQHAAAAAQPAAFK8wABSzAAAAAEAAAHAAFLDAAAAlpFgA8AAStgBagBgAcAATawCYAPAAE6JAAbAAE8kgOLAAFPCwABTzsAAU9IBAjsAAAABA8AAU9LAAFPSAAAAAAAAAGADwABPvQAGwABPJYDiwABUU8AAVFvAAFRjAQKCHAAAAAEDwABUY8AAVGMAAAAAAAAAYAPAAEyiAAbAAE8xgOLAAFS1wABUw8AAVNMDAoCMAAAAAQPAAFTFwABU0wAAAAEBAcAAVM0AAACCHWADwABN7wAAYAPAAErYAAbAAE8ygOLAAFUXwABVHsAAVSgAAoDvAAAAAQPAAFUmwABVKAAAAAAAAABgA8AATokABsAATzOA4sAAWynAAFstwABcMgACmcAAAAABA8AAWzTAAFwyAAAACQAACcAAW0QAAACL3mADwABOiQFqAGABwABNrALAAFtZAAAAp9FgA8AATokBagBgAcAATawCwABbcAAAAI+sYAPAAE6JAWoAYAHAAE2sAsAAW4AAAACLkmADwABMogFqAGABwABNrALAAFuTAAAAkWhgA8AATokBagBgAcAATawCwABbsAAAAJm+XQPAAE0EAWADwABOiQFqAGABwABNrALAAFvLAAAAp9JgA8AATokBagBgAcAATawCwABcCgAAAJndXQPAAE14AmADwABOiVsBagBgAcAATawCwABcKAAAAKfTYAPAAE6JAWoAYAHAAE2sAmADwABPCgAG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wACkpMAhuh1qwACkqWADkaaGlyoABsAATz+A4sAApf/AAKYNwACmZQABp/sAAAABA8AAphfAAKZlAAAAAQEBwACmHwAAAIDrYAPAAE6JAABgA8AATokBPgFKwACmKgEewACmNsAAT64FAAWAwACmQcAhup+TFsAApk2AwACmScAhup+ByMAATo1qwACmVWADkaaGlyoABsAAT0CA4sAAqKbAAKjBwACrBwABp/wAAAABA8AAqNHAAKsHAAAAAgEBwACo2QAAAKfSYAPAAE6JAAHAAKjwAAAAkepgA4/gAWrAAKj7YAORpoaXXQPAAE14AmADwABOiWADwABOiQE+AUrAAKkIARzAAKkgHMAAqRWAwACpD8AhuyCEywEAASeAoQDAAE6sgb0CAV0DwABNeAJgA8AATolgA8AATokCMsAAqSVgA8AATolgA8AATokANMAAqSkDwACpKcAAqwIAAAACAgLAAKkqAAAAgatdA8AATXgCYAPAAE6JYAPAAE6JAMAAqS8AAACBvGADwABOiQAAXQPAAE14AmADwABOiWADwABOiQE+A07AAKlEwACpSgAAgd1gA8AATKIBHMAAqVSDwACpTMAhu+GEcAEAASeGegDAAE6cScAAqWgcwACpcoTAAKlswCG8CYCMAQABHMAAqXWUg+sAAAAAwABMxQDAAE3GPgFJwACpgyEcwACpj4PAAKmHwCG74YCMAQABJwAAwABOmD4BPRzAAKmlgsAAqaLAIbvEgQwCAAIewACppsAATz0CAAGDwACpu8Ahu+EBkeqBwACpzsAhuzEnAADAAE2NP0nAAKn2IRzAAKoAhMAAqfrAIbwJgIwBAAGTAMAATcY+A07AAKoUwACqGAAAgtJgA8AATokBHMAAqiKDwACqGsAhu+GGEwIAApOEwACqL8AhvAkAwABOn07AAKpDwACqSQAAImADwABOiQEcwACqU4PAAKpLwCG74YYTAQABHMAAqmOEwACqXcAhvAmBDQEAAZQAwABNyADAAE6fPRzAAKp0gsAAqnHAIbvEgQwCAAIewACqdcAATz0CAAGFwACqisAhvOcBkeqBwACqmcAhuzEewACqssAATz0CAAGGwACqx8AhvR0BkeqBwACq2MAhuzEAwABNjT9KwACq8QGCwACq+MAhu8QAwABNFgbAAE9BgOLAAKwFwACsFsAArGQAAaf9AAAAAQPAAKwmwACsZAAAAAEBAcAArC4AAACPrGADwABOiQAAXQPAAE1GAWADwABMogFKwACsPQEewACsPcAAT0MDAAOAwACsT8AhvfqTFsAArF2AwACsWMAhvfqByMAATo0ABsAAT0OA4sAArLLAAKzDwACxRQABp/7AAEY5AAAAAQPAAKzUwACxRQAAAAMDA8AArNwAAACPrGADwABOiQDAAKzmAAAAbWADwABMogDAAKzxAAAAhFRgA8AATKIAAF0DwABNRgFgA8AATKIBPgpPwACs/MAArQEAAAEkYQMCYAPAAE6JYAPAAEyiXAADwACtBsAArXIAAAACAgLAAK0OAAAAgvdgA8AATokAwACtFwAAAIW8YAPAAEyiAABcAT4BPTDAAK0pH8AArS/AAEx9AwADJMAArVsCJ6f/hMAArVfAIb7lgMAArV3AIb54hcAArWPAIb71AE7AAK19wACthAAAgOZgA6wXAR7AAK2GrBsBAAGXAE7AAK2cwACtpgAAqABgA8AATKIBk07AAK2zwACtvQAAqAFgA8AATKIBgcAArb/AIb6IRcAArcoBwACt08AArdUAAINmYAPAAEyiAYHAAK3XwCG+iAEcwACt4IfAAK3ewCG/l4C7AQABgsAAreLAIb6XAMAATdABj8AArefAIb+XHMAAreiHwACt58Ahv5eBDQEAAZQAwABNyD4CTsAArfjAAK39AACFwGADwABMogEcwACuBIDAAK3/wCG+eIXQAQABh8AArg/AIb+XAMAATpdJwACuGSEcwACuIhTAAK4dwCG/+wgAgIwBAAFqwACuJWADwABMooRdAMAATcY+AUnAAK41HMAArkUcwACuPhTAAK45wCG/+wgAgKMBAAE3MADAAEy8gowBAAE3CQDAAE3SPgE9HMAAroeDwACugsAhvr1uAgACJ6gCh8AArp3AIb+XAAA/PgVJwACuwhzAAK7QhcAArsbAIb9ggIwBAAGWAMAATcY+AT0cwACu54PAAK7iwCG+vW4CAAInqAOHwACvF8Ahv5cAAD9OwACvMcAArzYAAKJcYAPAAEyiAR7AAK88wABM0QEAARzAAK9HgMAAr0LAIb54hhMCAAKGwACvUcAhv3WHwACvXMAhv5cAwABOnwBJwACvaRzAAK9yFMAAr23AIcD5CQCCjAEAATeA/wDAAE3SPgE9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yIbAAM2JwCHXOADAAE6fAYCdNMAAzZ4DwADNnsAAzfIAAAABAQHAAM2fAAAAgIpgA8AATokAAGABwABNrAE+AT0wwADNrh/AAM20wABMfQMAAyeoMoDAAM3UwCHW2RzAAM3jhcAAzdnAIdcogQ0BAAGUAMAATcgAPRXAAM39wCHYgQwewADOBMAAT40CAAIUwADODsAh2IEMABTAAM4UwCHXaAkAAD8/TsAAzjbAAM47AACRaGADwABOiQEewADORcAAT5cGAAaAwADOT8Ah1tmGwADOVMAh1ziHwADOX8Ah10grFMAAznHAIddoCQAhHMAAzn4UwADOecAh2HALAICMAQABKwDAAE6YAE7AAM6TAAAAp9JgA8AATokAScAAzp4cwADOrYfAAM6iwCHXSIC7AQABFMAAzq/AIddYCAAAwABN0D4BPRXAAM7GwCHbEQ4ewADOzsAAT5kEAASAwADO2cAh1tkcwADO6YfAAM7ewCHXSIENAQABlADAAE3IFMAAzu7AIddYCAArAD9OwADPFQAAAKfTYAPAAE6JAEnAAM8jHMAAzzUUwADPJ8Ah11gIAIC7AQABgsAAzzfAIdb4AMAATdA+AT0VwADPRMAh25MPHsAAz0/AAE+aAwADgMAAz13AIdbZHMAAz3AUwADPYsAh11gIAIENAQABlADAAE3IgsAAz3XAIdb4AD9KwADPhQEfwADPkcAAT7wHAAcUwADPm8Ah12gJABTAAM+jwCHYWgoAFMAAz63AIdhwCwAUwADPs8Ah2IEMABTAAM+5wCHarQ0AFMAAz7/AIdsRDgAUwADPxsAh25MPAAAGwABPfYDiwADP+8AA0APAANWZBAEAAAAAAQPAANAHwADVmQAAAAkAAAnAANAXAAAAi95gA8AATokBagBgAcAATawCwADQLAAAAKfRYAPAAE6JAWoAYAHAAE2sAsAA0EMAAACPrGADwABOiQFqAGABwABNrALAANBTAAAAi5JgA8AATKIBagBgAcAATawCwADQZgAAAJFoYAPAAE6JAWoAYAHAAE2sAsAA0IMAAACZvl0DwABNBAFgA8AATokBagBgAcAATawCwADQngAAAKfSYAPAAE6JAWoAYAHAAE2sAsAA0N0AAACZ3V0DwABNeAJgA8AATolbAWoAYAHAAE2sAsAA0PsAAACn02ADwABOiQFqAGABwABNrAJgA8AAT0UBPg49iMAA0QzAIdydHsAA0RXAAE+UAwADgMAA0SHAIdydkx7AANEswABGdAEAAYDAANFAwCHcnQAAPYnAANFOwCHcth7AANFZwABPlgMAA4HAANFnwCHctpMewADRdMAARnQBAAGBwADRiMAh3LYAAD2KwADRmMAh3M8ewADRn8AAT44EAASCwADRqcAh3M+THsAA0bLAAEZ0AQABgsAA0cbAIdzPACoAScAA0hscwADSJYbAANIfwCHdOoCMAQABJwAAwABOmD2OwADSLMAh3TorPz2OwADSPsAh3ToewADSRsAAT5kEAASGwADSUcAh3TqTHsAA0lvAAEZ0AQABhsAA0m/AId06AIfAANJ3wCHdUwA9FcAA0o3AId10CB7AANKYwABPmgMAAxTAANKmwCHddAgAkx7AANKzwABGdAEAARTAANLHwCHddAgAAAA9i8AA0tfAIdzoHsAA0t7AAE+NAgACg8AA0ujAIdzogMAA0u7AIdydAE7AANMAwADTBwAAlV5gA8AAStgBHMAA0xGAwADTCsAh3J2AjAEAASeTVgDAAE6YScAA0yEiHMAA0yqCwADTJcAh3M+AjAEAASsAwABOmAAiIhbAANM/gcAA0zbAIdy2g2LAAE6QASEcwADTUoPAANNNwCHc6ICMAQABKwDAAE3GARTAANNdwCHfDQkAPgE9isAA027AIdzPJwA/TsAA04jAANOVAACn3WADwABK2AEhHMAA052CwADTmMAh3M+AjAEAASsAwABOmD2MwADTq8Ah3QEewADTssAAT5cGAAaEwADTxcAh3QGTHsAA087AAEZ0AQABhMAA0+LAId0BAIXAANPpwCHdGoDAANP3wCHcnRTAANP/wCHfqAoAAEnAANQSIiIWwADUHYDAANQWwCHcnYDjwABOjwAcwADULYLAANQowCHcz4CMAQABKwDAAE6YACEcwADUPoTAANQ5wCHdAYiaAQABJ4X4AMAATps+Ak7AANRcwADUaAAAqDNgA8AAStgBIhbAANRxgMAA1GrAIdydg2LAAE6QASEcwADUhILAANR/wCHcz4CMAQABKwDAAE6YPYzAANSTwCHdAR7AANSawABPpAIAAoTAANSxwCHdARTAANS3wCHgfgsAAD4BPYzAANTYwCHdAR7AANTfwABPowEAAYTAANTywCHdAQBJwADVAyIcwADVDILAANUHwCHcz4CMAQABKwDAAE6YABzAANUchMAA1RfAId0BiJoBAAEnqDQAwABOmz4BPYrAANU2wCHczycAP0rAANVLAR/AANVXwABPvAcAB4DAANVhwCHcnYHAANVpwCHctoLAANVzwCHcz4PAANV5wCHc6ITAANV/wCHdAYbAANWFwCHdOhTAANWMwCHddAgAAAbAAE9+gOLAANXCwADVysAA1nkEAZmzAAAAAQPAANXTwADWeQAAAAMCA8AA1dsAAACn1GADwABOiQDAANXtAAAAp9VgA8AATokAwADWFwAAAJndXQPAAE14AmADwABOiWADwABOiQFqAGABwABNrAIAYAPAAE9FAT4BSsAA1i8BJsAA1i8BHsAA1jbAAE+HBAAEJ5mzgMAA1kvAIeHWgcAA1lbAIeHmgsAA1mXAIeH2AGADwABPRQbAAE9/gOLAANajwADWq8AA11wEAafWAAAAAQPAANa1wADXXAAAAAMCA8AA1r0AAACn1GADwABOiQDAANbPAAAAp9VgA8AATokAwADW+QAAAJndXQPAAE14AmADwABOiWADwABOiQFqAGABwABNrAIAYAPAAE9FAT4BSsAA1xEBJsAA1xEBHsAA1xjAAE+HBAAEJ6fWgMAA1y7AIeKNgcAA1znAIeKdgsAA10jAIeKtAGADwABPRQbAAE9ngOLAANdhwADXbMAA1+wBAKfUAAAAAQPAANd2wADX7AAAAAAAAABgA8AATokBPgRJwADXfCEWwADXgS6n3cAAT3JKwADXjwEnAD9OwADXosAA16UAAIiCYAPAAE7TAR/AANenwABO8gAAAAA9HMAA17suqDXAAEY5AQABgMAA18vAIeNqAMAAT6hKwADX1AEcwADX3oDAANfbwCHjaoDvAAAAAMAATuwGwABPaIDiwADX8cAA1/zAANgRAQCn0QAAAAEDwADYBcAA2BEAAAAAAAAAYAPAAE6JAUrAANgIARbAANgILqgYwABGOcAAT0kGwABPaYDiwADYFsAA2CHAANi4AQCPrAAAAAEDwADYJsAA2LgAAAAAAAAAYAPAAE6JAT4DScAA2CwcwADYNhbAANgwLpIAwABGOcAAT0qAjAEAASsAwABOmErAANg/AScAP0nAANhOHMAA2FgWwADYUi6SAMAARjnAAE9KiJoBAAEnhHoAwABOmz4BSsAA2HEBHMAA2H4WwADYeC6SAMAARjnAAE9KhhMCAAKUHMAA2JgWwADYkRbAANiLLpIAwABGOcAAT0qByMAATo2BBgEAAZQAwABNyQDAAE6fP0rAANioARbAANivLpIAwABGOcAAT0oGwABPaoDiwADYvcAA2MXAANkUAQCLkgAAAAEDwADYysAA2RQAAAAAAAAAYAPAAEyiAT4CScAA2NAcwADY2hbAANjULpmuwABGOcAAT0uAjAEAASsAwABNxkrAANjjAR7AANjqwABPhAEAARbAANj3LovewABPYAA/SsAA2QQBFsAA2Qsuma7AAEY5wABPSwbAAE+EgOLAANlLwADZVsAA2dAAAag2wABGOQAAAAEDwADZYsAA2dAAAAABAQHAANlqAAAAi95gA8AATokAAGADwABMogE+A0nAANl4HMAA2YOAwADZfMAh5b6AjAEAASeZswDAAE6YSsAA2Y4BN1A/ScAA2Z0cwADZqIDAANmhwCHlvoCMAQABJ6fWAMAATphKwADZtAE3gbs/SsAA2cQBkwbAAE9rgOLAANnVwADZ4MAA2fUBAKfSAAAAAQPAANnmwADZ9QAAAAAAAABgA8AATokBSsAA2ekBNcAA2ekAAAEAYAPAAE6JARbAANnpLqgZwABGOcAAT0wjHMAA2emAwADZ6cAh5muAjAEAASsAwABOmCcAgMAA2enAIeZrAWADwABOiQbAAE9sgOLAANn6wADaBcAA2iABAKfTAAAAAQPAANoOwADaIAAAAAAAAABgA8AATokBSsAA2hEBNcAA2hEAAAEAYAPAAE6JARbAANoRLqgawABGOcAAT00jHMAA2hGAwADaEcAh5u+AjAEAASsAwABOmCcAgMAA2hHAIebvAWADwABOiQbAAE+xgOLAANolwADaKsAA2wcAAKfjAAAAAQPAANoywADbBwAAAAEBAcAA2joAAACL3mADwABOiQAAYAPAAErYAT4ETsAA2k/AANpaAACoN2ADwABOiQEWwADaYS6L3sAAT2BJwADabRzAANp4gMAA2nHAIedkgIwBAAErAMAATphKwADagQEWwADak4HAANqIwCHnf4DjwABOjz9JwADaoCEcwADashbAANqrgMAA2qTAIedkgcjAAE6NgIwBAAEWwADawIHAANq1wCHnf4HIwABOjQDAAE3GSsAA2sgBKj9KwADa2gEewADa4cAAT4UCAAKAwADa8MAh52SBwADa+MAh538ABsAAT4WA4sAA3V3AAN1pwADfbwABqDjAAEY5AAAAAQPAAN13wADfbwAAAAICAsAA3X8AAACL3mADwABOiQDAAN2OAAAAgOtgA8AATokAAGADwABK2AE+AkXAAN2ZAcAA3aLAAN2kAACDZmADwABMogGTARzAAN2rgsAA3anAIeifgLsBAAEWwADdtIDAAN2twCHob4HIwABOjQDAAE3QAYrAAN28wCHonxzAAN29gsAA3bzAIeifgQ0BAAGUAMAATchBPgROwADdzcAA3dgAAKg5YAPAAEyiARzAAN3hgMAA3drAIehvhdABAAGCwADd7MAh6J8AwABOl07AAN36wADeAgAAqDpgA8AATKIBHMAA3giBwADeBMAh6H+F0AEAAYLAAN4TwCHonwDAAE6XTsAA3iHAAN4nAACEb2ADwABMogEcwADeNIPAAN4pwCHpB4CjAQABhMAA3jbAIek8AMAATLxJwADeRSEcwADeT4XAAN5JwCHpcYCMAQABkwDAAE3GPgJJwADeXxzAAN5phcAA3mPAIelxgIwBAAE3IADAAE3GPgJOwADeq8AA3rUAAKg7YAPAAEyiARzAAN6/hMAA3rfAIek8gKYBAAGFwADewcAh6XEAwABMu0nAAN7SIhzAAN7hN2GBWwEAAYbAAN7kwCHp6ADAAE3RABzAAN77hsAA3vHAIenogVsBAAE3egDAAE3RPgFCwADfGAA/P0rAAN9AASo/SsAA32ABKQbAAE+GgOLAAN+RwADfncAA3/4AAag8wABGOQAAAAEDwADfosAA3/4AAAADAwPAAN+qAAAAgOtgA8AATokAwADfswAAAIHdYAPAAEyiAMAA38EAAACBImADwABOiQAAXAE+AT0wwADf0B/AAN/WwABMfQMAA4LAAN/mwCHqvoDAAN/vwCHqnoHAAN/0wCHqrgAGwABPh4DiwADgA8AA4A7AAOlrAAGoPcAARjkAAAABA8AA4BrAAOlrAAAABAQEwADgIgAAAIveYAPAAE6JAMAA4DEAAACn1GADwABOiQDAAOBDAAAAp9VgA8AATokAwADgbAAAAJndXQPAAE14AmADwABOiWADwABOiQAAYAPAAE8KAT4FTsAA4IfAAOCQAACn0WADwABOiQEnAE7AAOChAAAAj6xgA8AATokATsAA4K8AAACLkmADwABMogBJwADguiIhHMAA4MiBwADgvsAh6z+AjAEAASsAwABOmAAWwADg3YHAAODTwCHrP4NiwABOkD4ITsAA4PXAAOD/AACn6mADwABMogGTTsAA4THAAOE9AACoPmADwABK2AEqQUXAAOFMAcAA4VXAAOFXAACDZmADwABMogGTARzAAOFeFMAA4VzAIewmCQCAuwEAARbAAOFqgcAA4WDAIes/gcjAAE6NAMAATdABFcAA4XLAIewmCRzAAOFzFMAA4XLAIewmCQCBDQEAAZQAwABNyD4BScAA4aIcwADhvhzAAOGwgcAA4abAIes/hdABAAEUwADhu8Ah7CYJAADAAE6XgIwBAAFqwADhwWADwABMonIAwABNxj4EPRXAAOHVwCHsCwgpPYzAAOHzwCHrhxzAAOIIgcAA4f7AIes/hhMCAAKTFMAA4hXAIewmCQAAwABOnz2PwADiI8Ah6/YcwADiMRTAAOIvwCHsJgkAgQ0BAAGUAMAATchCwADiQAA/TsAA4mPAAOJrAACoP2ADwABMogGHwADibcAh6/ZJwADifiIcwADijIfAAOKCwCHr9oC7AQABFsAA4piBwADijsAh6z+ByMAATo0AwABN0AAcwADizBzAAOK2gcAA4qzAIes/hdABAAGHwADiwcAh6/YAwABOl4CMAQABasAA4s9gA8AATKKEbwDAAE3GPgZOwADjAsAA4xIAAKhAYAPAAEyiARzAAOMUlIPrAAAAAMAATMVBRcAA4yAAARzAAOMvFMAA4yfAIe09CQCAuwEAARbAAOM7gcAA4zHAIes/gcjAAE6NAMAATdABFcAA40PAIe09CRzAAONKFMAA40PAIe09CQCBDQEAAZQAwABNyD4CTsAA417AAONjAACFwGADwABMogEcwADjb4HAAONlwCHrP4XQAQABFMAA43rAIe09CQAAwABOl0nAAOOOIhzAAOOXFMAA45LAIe5OCwCAjAEAAWrAAOOaYAPAAEyihm8AwABNxgAcwADjthTAAOOmwCHtzAoAgLsBAAGTAMAATdA+Aj0VwADjycAh7cwKFMAA49vAIe09CQBJwADj8BzAAOP+gcAA4/TAIes/iJoCAAInkmkcwADkFxTAAOQPwCHtPQkAgQ0BAAGUAMAATcgA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AQ+XwABPkQQABIDAAQ+owCIPsYbAAQ+uwCIRtxzAAQ+/gsABD7vAIg/QgQYBAAGUAMAATcknqGIAPz0ewAEP3sAAT0QDAAOAwAEP78AiD7EcwAEP+4HAAQ/1wCIPwYENAQABlADAAE3IhcABEADAIhEjAErAARBGARzAARCBHMABEHgcwAEQahzAARBSgMABEE3AIg+xhhMCAAKBwAEQXMAiD8GFwAEQY8AiESMAwABOn4b7AAAAAMAATq6BDQEAAYTAARB6wCIRDQDAAE6egQ0BAAEnhHsAwABOnj9JwAEQkiGDwAEQl8AiD+A+AUXAARDtAcABEPbAARD4AACDZmADwABMogGBwAEQ+sAiD8EBHMABEQOEwAERAcAiEziAuwEAAYLAAREFwCIP0ADAAE3QAYzAAREKwCITOBzAARELhMABEQrAIhM4gQ0BAAGUAMAATcg+AUnAAREZHMABETAcwAERIoDAAREdwCIPsYXQAQABhMABES3AIhM4AMAATpeAjAEAAWrAAREzYAPAAEyihGkAwABNxj4FTsABEU7AARFVAACoYGADwABOiQEnAE7AARFpwAERbwAAgd1gA8AATKIBHsABEXHAAE+PAwADgMABEX7AIg+xgcABEYTAIg/BgsABEYvAIg/QAEnAARGbHMABEaWGwAERn8AiE/aAuwEAAYLAARGnwCIP0ADAAE3QPgJOwAERvsABEcoAAKhhYAPAAEyiASMcwAER4oDAARHdwCIPsYiaAgACJ5JpHMABEfmGwAER88AiE/aBDQEAAZQAwABNyADAAE6bHMABEgeGwAESAcAiE/aBDQEAAZYAwABNyBzAARIThsABEg3AIhP2gQ0BAAGUAMAATcgBYAPAAEyiPY3AARIkwCIT4B7AARItwABPkQQABIDAARI+wCIPsYfAARJEwCIUWoLAARJRwCIP0CeoYgA/PR7AARJ4wABPRAMAA4DAARKJwCIPsYHAARKPwCIPwYbAARKWwCIT9gBKwAESqAEcwAES2xzAARLSJMABEtICJ4R6HMABEriAwAESs8AiD7GGEwIAAoHAARLCwCIPwYbAARLJwCIT9gDAAE6fgQ0BAAGFwAES1MAiE+AAwABOnoENAQABJ4R7AMAATp4/P0rAARL+AR7AARMFwABPkwMAA4DAARMXwCIPsYHAARMdwCIPwYLAARMkwCIP0AAGwABPj4DiwAETfcABE4jAARQxAAGoY8AARjkAAAABA8ABE5TAARQxAAAAAwMDwAETnAAAAI+sYAPAAE6JAMABE6YAAABtYAPAAEyiAMABE7EAAACEVGADwABMogAAYAPAAEyiAT4DTsABE8DAARPGAACB3WADwABMogEcwAETzYDAARPIwCIV+4RwAgACJ4Z4gcABE9rAIhYLAMAATpw9i8ABE+bAIhY1IyIcwAET9YPAARPvwCIWNYFeAQABgcABE/jAIhYLAMAATdMAHMABFAeDwAEUAcAiFjWAuwEAAYLAARQJwCIWGgDAAE3Qg8ABFBDAIhY1gsABFBjAIhYaAWADwABMokrAARQhAYPAARQowCIWNQbAAE+QgOLAARQ2wAEUQsABFK0AAahkwABGOQAAAAEDwAEUT8ABFK0AAAABAQHAARRUAAAAhcBgA8AATKIAAGADwABK2AE+AUrAARRgASIcwAEUbIDAARRnwCIXEYC7AQABN38AwABN0AAhHMABFKUcwAEUjhzAARSCasABFHZdA8AATUYBYAPAAEyiwABt+YLRAQABHMABFIiAwAEUg8AiFxGDxQEAAZcAwABMvwDAAE1VgKEBAAEcwAEUk5SDcQEAARzAARScgMABFJfAIhcRgKEBAAE3DwDAAEy6AMAATL4AwABMuoCMAQABkwDAAE3GBsAAT5GA4sABFcvAARXZwAEe1QABqGXAAEY5AAAAAQPAARXpwAEe1QAAAAQDBMABFfEAAACPrGADwABOiQDAARX7AAAAbWADwABMogDAARYGAAAAhFRgA8AATKIAwAEWGQAAAIcaYAPAAE6JAWrAARYiYAPAAE6JYgBgA8AATokBPglOwAEWOgAAAIHBYAPAAE7TAEnAARZGIRzAARZRg8ABFkrAIhgygIwBAAEnAADAAE6YPgE9jMABFmDAIhhZH8ABFmnAAE7yAQABg8ABFnbAIhgyAD9OwAEWjcABFpoAAKhmYAPAAEyiAYHAARacwCIYE07AARarwAEWsQAAgd1gA8AATKIBgcABFrPAIhgTTsABFxDAARcdAACfxmADwABK2AEpQ8ABFyocwAEXN4bAARcxwCIYyoC7AQABgsABFznAIhgiAMAATdBBPgJOwAEXSsABF08AAIXAYAPAAEyiARzAARdWgMABF1HAIhgDhdABAAGGwAEXYcAiGMoAwABOl0nAARdvHMABF3gUwAEXc8AiGSUIAICMAQABasABF3tgA8AATKKGbwDAAE3GPgtOwAEXlsABF6IAAIDNYAPAAE6JAR7AARekwABPmwMAA4DAARe1wCIYA4bAARe7wCIYyikAScABF9EiHMABF+EUwAEX1cAiGYgJAICMAQABKwDAAE6YAIfAARfswCIY5z4CPY7AARgGwCIYyhzAARgMhsABGAbAIhjKgQ0BAAGWAMAATchCwAEYHAA/PSMcwAEYP4TAARg4wCIYWYCMAQABKwDAAE38jMABGDjAIhhZH8ABGEPAAE7yAAAAACsBYAPAAE7TTsABGGLAARhoAACnAWADwABOiQEcwAEYb4DAARhqwCIYA4YTAgAChcABGHnAIhithsABGIfAIhjKAMAATp89HMABGJ6EwAEYl8AiGFmBwwEAARTAARikwCIaTAoAAMAATudOwAEYuMABGMUAAKJjYAPAAEyiAZZJwAEY0hzAARjiFMABGNbAIhmICQCAjAEAASsAwABOmD4BPRXAARj3wCIZiAkcwAEZCoDAARkFwCIYA4YTAgAChsABGRTAIhjKHMABGSGGwAEZG8AiGMqBDQEAAZYAwABNyADAAE6fScABGTYcwAEZRhTAARk6wCIZiAkAgIwBAAEnhngAwABOmD4BPR7AARlawABPhgMAA4DAARlgwCIYA4bAARlmwCIYyieoZwA/PRzAARmuhMABGafAIhhZgcMBAAEUwAEZtMAiGYgJAADAAE7nPY7AARnKwCIYyhzAARnQhsABGcrAIhjKgQ0BAAEUwAEZ08AiGq4LAADAAE3IPY3AARnpwCIYrYbAARn4wCIYyj2PwAEaB8AiGOcpScABGikewAEaLcAAT5ABAAEUwAEaO8AiGSUIAAA+AknAARpMIiKHwAEaUMAiGOcAHMABGm5qwAEaYGADwABMop6ygVsBAAEUwAEaccAiGSUIAADAAE3RABzAARqHasABGnlgA8AATKKft4FeAQABFMABGorAIhklCAAAwABN0z4DPSMcwAEa8ITAARrpwCIYWYCMAQABKwDAAE38jMABGunAIhhZH8ABGvTAAE7yAAAAACsBYAPAAE7TScABGw4cwAEbH4XAARsSwCIYrYC7AQABhsABGyHAIhjKAMAATdA+Aj0cwAEbPYTAARs2wCIYWYHDAQABHMABG0iAwAEbQ8AiGAOGEwIAAoXAARtSwCIYrYbAARtgwCIYygDAAE6fAMAATuc9jcABG3XAIhithsABG4TAIhjKPz2PwAEbocAiGOcqPz2OwAEbycAiGMocwAEbzobAARvJwCIYyoENAQABlADAAE3IPghOwAEb7cABG/oAAKJjYAPAAEyiAZRJwAEcByIcwAEcGxzAARwRFMABHAzAIhklCACAoQEAATfAAPwAAMAATLqAjAEAATfAANgAAMAATcYAHMABHDQcwAEcL4bAARwpwCIYyoENAQABlADAAE3IgLsBAAGCwAEcNsAiGCIAwABN0D4CTsABHEvAARxQAACH62ADwABMogEcwAEcV4DAARxSwCIYA4XQAQABHMABHGiGwAEcYsAiGMqBDQEAAZQAwABNyADAAE6XScABHHgcwAEcjBzAARyCFMABHH3AIh3NCgCAoQEAATfAAPwAAMAATLqAjAEAATfAANwAAMAATcY+Aj0VwAEcpcAiGSUIHMABHM0cwAEctDfAAQAAgKYBAAEcwAEcxhzAARy9FMABHLjAIhklCACAoQEAATeD/wDAAEy6g3EBAAE3CgDAAEy+AMAATLuApgEAARzAARzVFMABHNDAIh3NCgCAoQEAATeD/wDAAEy6AMAATLs9FcABHOvAIh1LCZU/Pz0jHMABHSKEwAEdG8AiGFmAjAEAASsAwABN/IzAAR0bwCIYWR/AAR0mwABO8gAAAAArAWADwABO007AAR1FwAEdSwAApwFgA8AATokBHMABHVKAwAEdTcAiGAOGEwIAAoXAAR1cwCIYrYbAAR1qwCIYygDAAE6fPRzAAR2BhMABHXrAIhhZgcMBAAEUwAEdh8AiHwwKAADAAE7nPRzAAR2ehMABHZfAIhhZgcMBAAEewAEdpMAAT5wBAAEUwAEdsMAiGSUIAAAAwABO5z2OwAEdwMAiGMocwAEdxobAAR3AwCIYyoENAQABFMABHcnAIh1LCQAAwABNyD2NwAEd38AiGK2GwAEd7sAiGMpJwAEeBxzAAR4ShMABHgvAIhhZgIwBAAErAMAATfxKwAEeGwEcwAEeJ4DAAR4iwCIYA4YTAgACgcABHjHAIhgTgsABHjjAIhgiAMAATp8/ScABHkIcwAEeU4XAAR5GwCIYrYC7AQABgsABHlXAIhgiAMAATdA+Ak7AAR5pwAEebwAApwFgA8AATokBHMABHnaAwAEeccAiGAOGEwIAAoXAAR6AwCIYrYLAAR6OwCIYIgDAAE6fPRzAAR6hhMABHprAIhhZgcMBAAEUwAEep8AiIFYIAADAAE7nP0rAAR65ARzAAR7HhMABHsDAIhhZgO8AAAAAwABO7AbAAE+SgOLAAR7awAEe5sABH1MAAahowABGOQAAAAEDwAEe9MABH1MAAAABAQHAAR75AAAAhcBgA8AATKIAAGADwABK2AE+AUrAAR8FASIcwAEfEYDAAR8MwCIhBIC7AQABN38AwABN0AAhHMABH0scwAEfNBzAAR8oasABHxtdA8AATUYBYAPAAEyiwABvAILRAQABHMABHy6AwAEfKcAiIQSDxQEAAZcAwABMvwDAAE1VgKEBAAEcwAEfOZSDcQEAARzAAR9CgMABHz3AIiEEgKEBAAE3DwDAAEy6AMAATL4AwABMuoCMAQABkwDAAE3GBsAAT5OA4sABIGfAASB1wAEqUgABqGnAAEY5AAAAAQPAASCGwAEqUgAAAAMDA8ABII4AAACPrGADwABOiQDAASCYAAAAbWADwABMogDAASCjAAAAhFRgA8AATKIAAGADwABOiQE+CE7AASC7AAAAgcFgA8AATtMATsABIMvAASDYAACoZmADwABMogGBwAEg2sAiIgZOwAEg6cABIO8AAIHdYAPAAEyiAYHAASDxwCIiBk7AASFOwAEhWwAAn8ZgA8AAStgBKUPAASFoHMABIXWFwAEhb8AiIl6AuwEAAYLAASF3wCIiFQDAAE3QQT4CTsABIYjAASGNAACFwGADwABMogEcwAEhlIDAASGPwCIh9oXQAQABhcABIZ/AIiJeAMAATpdJwAEhrRzAASG2h8ABIbHAIiK5gIwBAAFqwAEhuWADwABMooZvAMAATcY+DE7AASIXwAEiIwAAgM1gA8AATokBHsABIiXAAE+bAwADgMABIjbAIiH2hcABIjzAIiJeKQBJwAEiUiIcwAEiYhTAASJWwCIjGggAgIwBAAErAMAATpgAhsABIm3AIiJ7PgI9jcABIofAIiJeHMABIo2FwAEih8AiIl6BDQEAAZYAwABNyELAASKdAD89IxzAASLAg8ABIrnAIiIwgIwBAAErAMAATfyLwAEiucAiIjAfwAEixMAATvIAAAAAKwFgA8AATtNOwAEi48ABIukAAKcBYAPAAE6JARzAASLwgMABIuvAIiH2hhMCAAKEwAEi+sAiIkGFwAEjCMAiIl4AwABOn0nAASMYIYbAASMdwCIiez0VwAEjK8AiI94JHMABIzkUwAEjM8AiI94JAIb7AAAAAMAATq4/PRzAASNXg8ABI1DAIiIwgcMBAAEUwAEjXcAiI94JAADAAE7nTsABI3HAASN+AACiY2ADwABMogGWScABI4scwAEjmxTAASOPwCIjGggAgIwBAAErAMAATpg+AT0VwAEjsMAiIxoIHMABI8OAwAEjvsAiIfaGEwIAAoXAASPNwCIiXhzAASPahcABI9TAIiJegQ0BAAGWAMAATcgAwABOn0nAASPvHMABI/8UwAEj88AiIxoIAICMAQABJ4Z4AMAATpg+Aj0VwAEkE8AiIxoIJ6hiPRXAASQywCIkdQqUPz0cwAEkXYPAASRWwCIiMIHDAQABFMABJGPAIiMaCAAAwABO5z2NwAEkecAiIl4cwAEkf4XAASR5wCIiXoENAQABFMABJILAIiR1CgAAwABNyD2MwAEkmMAiIkGFwAEkp8AiIl49jsABJLbAIiJ7KUnAASTYHsABJNzAAE+SAQABh8ABJOvAIiK5AD4CScABJPwiIobAASUAwCIiewAcwAElHmrAASUQYAPAAEyinrKBWwEAAYfAASUhwCIiuQDAAE3RABzAASU3asABJSlgA8AATKKft4FeAQABh8ABJTrAIiK5AMAATdM+Az0jHMABJaCDwAElmcAiIjCAjAEAASsAwABN/IvAASWZwCIiMB/AASWkwABO8gAAAAArAWADwABO00nAASW+HMABJc+EwAElwsAiIkGAuwEAAYXAASXRwCIiXgDAAE3QPgI9HMABJe2DwAEl5sAiIjCBwwEAARzAASX4gMABJfPAIiH2hhMCAAKEwAEmAsAiIkGFwAEmEMAiIl4AwABOnwDAAE7nPYzAASYlwCIiQYXAASY0wCIiXj89jsABJlHAIiJ7Kj89jcABJnnAIiJeHMABJn6FwAEmecAiIl6BDQEAAZQAwABNyEnAASaPHsABJpPAAE+gAQABh8ABJqfAIiK5AD4BPR7AASa4wABPhgMAA4DAASa+wCIh9oXAASbEwCIiXieGtwA+CU7AASb8wAEnCQAAomNgA8AATKIBlEnAAScWIhzAAScqHMABJyCHwAEnG8AiIrmAoQEAATfAAPwAAMAATLqAjAEAATfAANgAAMAATcYAHMABJ0McwAEnPoXAASc4wCIiXoENAQABlADAAE3IgLsBAAGCwAEnRcAiIhUAwABN0D4CTsABJ1rAASdfAACH62ADwABMogEcwAEnZoDAASdhwCIh9oXQAQABHMABJ3eFwAEnccAiIl6BDQEAAZQAwABNyADAAE6XScABJ4ccwAEnmxzAASeRFMABJ4zAIifDCQCAoQEAATfAAPwAAMAATLqAjAEAATfAANwAAMAATcY+Aj2PwAEntMAiIrkcwAEn3BzAASfDN8ABAACApgEAARzAASfVHMABJ8yHwAEnx8AiIrmAoQEAATeD/wDAAEy6g3EBAAE3CgDAAEy+AMAATLuApgEAARzAASfkFMABJ9/AIifDCQCAoQEAATeD/wDAAEy6AMAATLs9FcABJ/rAIidDCJU/Pz0jHMABKDGDwAEoKsAiIjCAjAEAASsAwABN/IvAASgqwCIiMB/AASg1wABO8gAAAAArAWADwABO007AAShUwAEoWgAApwFgA8AATokBHMABKGGAwAEoXMAiIfaGEwIAAoTAAShrwCIiQYXAASh5wCIiXgDAAE6fScABKIkhhsABKI7AIiJ7PRXAASicwCIo/wkcwAEoqhTAASikwCIo/wkAhvsAAAAAwABOrj89HMABKMiDwAEowcAiIjCBwwEAARTAASjOwCIo/wkAAMAATuc9HMABKOWDwAEo3sAiIjCBwwEAAR7AASjrwABPnAEAAYfAASj3wCIiuQAAwABO5z2NwAEpB8AiIl4cwAEpDYXAASkHwCIiXoENAQABFMABKRDAIidDCAAAwABNyD2MwAEpJsAiIkGFwAEpNcAiIl5JwAEpThzAASlZg8ABKVLAIiIwgIwBAAErAMAATfxKwAEpYgEcwAEpboDAASlpwCIh9oYTAgACgcABKXjAIiIGgsABKX/AIiIVAMAATp8/ScABKYkcwAEpmoTAASmNwCIiQYC7AQABgsABKZzAIiIVAMAATdA+A07AASmwwAEptgAApwFgA8AATokBHMABKb2AwAEpuMAiIfaGEwIAAoTAASnHwCIiQYLAASnVwCIiFQDAAE6fScABKeEhhsABKebAIiJ7PY/AASn0wCIqfBzAASoCh8ABKfzAIip8hvsAAAAAwABOrj89HMABKh6DwAEqF8AiIjCBwwEAAYfAASokwCIqfADAAE7nP0rAASo2ARzAASpEg8ABKj3AIiIwgO8AAAAAwABO7AbAAE+UgOLAASrtwAEq+8ABLfMAAahqwABGOQAAAAEDwAErBsABLfMAAAADAwPAASsOAAAAi95gA8AATokAwAErGgAAAG1gA8AATKIAwAErJQAAAIRUYAPAAEyiAABgA8AATokBPghJwAErMBzAASs6gcABKzTAIitqgIwBAAGCwAErPcAiK3kAwABNxkrAAStCAScAP07AAStbwAEraQABqGtgA8AATKIBHMABK3KAwAEra8AiK1qF0AEAAYHAASt9wCIragDAAE6XScABK4khHsABK47AAE+vAQABg8ABK6XAIivDAD4BPR7AASu9wABPhgMAA4DAASvDwCIrWoHAASvLwCIraieobAA/TsABLBPAASwlAACobWADwABK2AEqRcABLDIBwAEsO8ABLD0AAINmYAPAAEyiAYHAASw/wCIragEcwAEsSIXAASxGwCIsVIC7AQABgsABLErAIit5AMAATdABjcABLE/AIixUHMABLFCFwAEsT8AiLFSBDQEAAZQAwABNyD4DTsABLGbAASxvAAGGV2ADwABMogEcwAEseIDAASxxwCIrWoXQAQABhcABLIPAIixUAMAATpdJwAEsjSEewAEsksAAT58BAAGGwAEspcAiLLgAPgE9HsABLLrAAE+GAwADgMABLMDAIitahcABLMjAIixUJ6huAD9JwAEs9iIcwAEtCGrAASz6YAPAAEyinrKBWwEAAYbAAS0LwCIsuADAAE3RABzAAS0ghsABLRfAIiy4gVsBAAFqwAEtI2ADwABMop+3AMAATdE+AT2MwAEtPMAiLDopPz2IwAEtaMAiK1ocwAEteIDAAS1xwCIrWoYTAgACgcABLYLAIitqgsABLYnAIit5AMAATp9JwAEtk4TAAS2XwCIsOj2IwAEtqsAiK1ocwAEtuoDAAS2zwCIrWob7AAAAAMAATq4/SsABLc0BHsABLdTAAE+VAQABgMABLejAIitaAAbAAE+VgOLAAS5twAEue8ABL2EAAahvwABGOQAAAAEDwAEujsABL2EAAAABAQHAAS6WAAAAi95gA8AATokAAGADwABOiQE+BUnAAS6kHMABLq+AwAEuqMAiLjyAjAEAASeZswDAAE6YSsABLroBJ5mzP0nAAS7NHMABLtiAwAEu0cAiLjyAjAEAASeTVgDAAE6YSsABLuMBJ5NWP0nAAS72HMABLwGAwAEu+sAiLjyAjAEAASen1gDAAE6YSsABLw0BJ6fWP0nAAS8hHMABLyyAwAEvJcAiLjyAjAEAASeL3wDAAE6YSsABLzoBJ4vfP0rAAS9QAYDAAS9XwCIuPAbAAE+WgOLAAS9mwAEvdMABMBgAAahwwABGOQAAAAEDwAEvgcABMBgAAAADAwPAAS+JAAAAp9FgA8AATokAwAEvlwAAAG1gA8AATKIAwAEvogAAAIRUYAPAAEyiAABgA8AATokBPgJJwAEvrRzAAS+6gMABL7HAIi87gIwBAAErAMAATphKwAEvwwEnAD9KwAEv0gEewAEv2cAAT50EAASAwAEv78AiLzuBwAEv+cAiL0uCwAEwAMAiL1pqwAEwBV0DwABNRgFgA8AATKLAAG7YAAbAAE+XgOLAATAdwAEwK8ABM8oAAahxwABGOQAAAAEDwAEwNMABM8oAAAAGBgbAATA8AAAAkWhgA8AATokAwAEwRgAAAG1gA8AATKIAwAEwUQAAAIRUYAPAAEyiAMABMG0AAACZvl0DwABNBAFgA8AATokAwAEwggAAAIveYAPAAE6JAMABMI8AAACn3WADwABK2AAAYAPAAE6JAT4JTsABMKjAATCvAACVXmADwABK2AEcwAEwuYTAATCywCIwU4CMAQABJ5NWAMAATphOwAEwzsABMOEAAKhyYAPAAErYASKGwAEw48AiMH4BhcABMO3AIjBjScABMP8iHMABMQiAwAExA8AiMA2AjAEAASsAwABOmAAcwAExIIPAATETwCIwPICMAQABKwDAAE38SsABMSkBI4bAATEwwCIwfieF+CcAAWADwABOiT9JwAExRyIhHMABMVCAwAExS8AiMA2AjAEAASsAwABOmAAhHMABMWiDwAExW8AiMDyAjAEAASsAwABN/D4BPTDAATF5H8ABMX/AAEvRAQABJ6hzAD9OwAExxwAAAIDmYAPAAE6JAEnAATHTIRzAATHcgMABMdfAIjANgIwBAAErAMAATpg+AT0VwAEx7cAiMX8IHsABMfbAAE+dBQAEgMABMgzAIjANgcABMhLAIjAdgsABMhnAIjAsasABMh5dA8AATUYBYAPAAEyiwABvSAGodCk+AT0VwAEya8AiMX8IHMABMs4cwAEyjIPAATJ0wCIwPIGrAQFgA8AATokBNMABMpADwAEykMABMsEAAAABAQHAATKRAAAAgPlgA8AATokAAGADwABOiQFKwAEylwEewAEyl8AAT6wEAARqwAEyol0DwABNRgFgA8AATKLAAG8iFMABMrLAIjI7CQBqwAEytWADkaaGlyoAAMAATQ+BvwEAASeF+ADAAE0YScABMuMWwAEy7hTAATLnwCIxfwgAgOPAAE6PPgFJwAEy/4bAATMDwCIwfkrAATMLASeF+D9JwAEzIiKHwAEzJsAiMK0AIRzAATNEFMABMz3AIjF/CACImgEAASeF+ADAAE6bPgE9FcABM13AIjF/CBzAATNqJ4X4gQ0BAAEUwAEzbMAiMX8IAADAAE6ePz0VwAEzfsAiMX8IHsABM4fAAE+YAwADFMABM5bAIjF/CACEwAEznsAiMFOFwAEzpsAiMGMASsABM7kBFMABM8DAIjF/CAAGwABPmIDiwAE07sABNPzAATX7AAGodcAARjkAAAABA8ABNQrAATX7AAAAAwMDwAE1EgAAAJFoYAPAAE6JAMABNR8AAACL3mADwABOiQDAATUsAAAAp91gA8AAStgAAGADwABOiQE+AknAATVAIiIWwAE1S4HAATVEwCIzt4DjwABOjwAhgsABNVfAIjPHACEcwAE1bYDAATVowCIzp4iaAQABJ4X4AMAATps+AUrAATWGAR7AATWNwABPpAIAAoDAATWkwCIzpyIWwAE1sYHAATWqwCIzt4NiwABOkAGCwAE1v8AiM8cAP0rAATXYAR7AATXfwABPowEAAYDAATXywCIzpwAGwABPmYDiwAE2AMABNg7AATpPAAGodsAARjkAAAABA8ABNhjAATpPAAAABAQEwAE2IAAAAKfSYAPAAE6JAMABNisAAABtYAPAAEyiAMABNjYAAACEVGADwABMogDAATZzAAAAmd1dA8AATXgCYAPAAE6JWwAAYAPAAE6JAT4HScABNoohHMABNpSAwAE2jsAiNKyAjAEAASsAwABOmD4CScABNqUhHMABNrmDwAE2qcAiNNuAjAEAASsAwABN/D4BPTDAATbMH8ABNtLAAEvRAQABJ6h3AD9KwAE3GwEewAE3IsAAT50FAASAwAE3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ogA/PSMcwAF3T4DAAXdHwCJlm4CMAQABKwDAAE38iMABd0fAImWbGsABd1PAAE9lKwFgA8AASthKwAF3YwEjgMABd2rAImWbHsABd3TAAE+nAQABLgAcwAF3jy6oo8AARjkAAAAAwABPpgFgA8AATokGwABPpoDiwAF3pcABd6zAAXmiAACoo8AARjkAAAABA8ABd7fAAXmiAAAAAAAAAGADwABOiQE+B0nAAXfAIhbAAXfELqfdwABPcgAhHMABd9kWwAF31C6PrMAAT2mAjAEAAScAAMAATpg+AT0wwAF36B/AAXfuwABMMAEAASTAAXf+AieopCeopQA/TsABeKrAAXi3AACZvl0DwABNRgFgA8AATokBFsABeL4umb7AAE9tPR7AAXjQwABPiAIAAoDAAXj3wCJnoSoATsABeRXAAXkcAACA5mADwABO0wEfwAF5HsAATvIAAAAAScABeTIWwAF5Ni6n4sAAT3c9HMABeU6BwAF5R8AiZ+CBwwEAASeF+ADAAE7nPz0cwAF5ZYHAAXlewCJn4IQwAgACgMABeW7AImehJ4X4AMAATulKwAF5hgEcwAF5lIHAAXmNwCJn4IDvAAAAAMAATuwGwABPp4DiwAF5p8ABebXAAX0eAAGopsAARjkAAAABA8ABecfAAX0eAAAAAQEBwAF5zAAAAIDrYAPAAE8KAABgA8AATokBPglOwAF53MABeesAAKinYAPAAErYASpOwAF5/MABegUAAKhFXQPAAE1GAWADwABOiQEWwAF6C4DAAXoHwCJon5m+wABPGEnAAXodIiIcwAF6MRbAAXoqgsABeiHAImjPgcjAAE12gowBAAGTAMAATdIAHMABelMWwAF6TBzAAXpIgsABekDAImjPgtEBAAGTAMAATVWByMAATo2AjAEAAZUAwABNxgAcwAF6fRzAAXpvHMABemuCwAF6Y8AiaM+C0QEAAZMAwABNVYXQAQABlADAAE6XgIwBAAFqwAF6gGADwABMooRpAMAATcY+Az0ewAF6kMAAT4oCAAIcwAF6tRzAAXqxgsABeqnAImjPgtEBAAGTAMAATVWF0AEAAZMAwABOlyoAPR7AAXrSwABPiQMAA4LAAXr2wCJozyqUAD2JwAF7EcAiaLopPgE9HsABezvAAE+JAwADgsABe1/AImjPKpMATsABe4LAAXuJAACA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AAErAMAATpg9NcABgbgAAAEAYAPAAE7TAYDAAYG4wCJvJzXAAYG8AAABAFwBHMABgbyBwAGBuMAicTqBwwEAASeoqwDAAE7nNcABgcgAAAEAXAEcwAGByIHAAYG4wCJxOoHDAQABFsABgc4uqBrAAEY5wABPTQDAAE7ngcABgbjAInE6P0rAAYHeARzAAYHogMABgeXAIm8ngO8AAAAAwABO7AbAAE+5gOLAAYH7wAGCCcABg8wDAICMAAAAAQPAAYILwAGDzAAAAAEBAcABghMAAACCHWADwABN7wAAYAPAAErYAT4CScABgiAewAGCJMAARnUCAAIugMABgjTAInH9AErAAYI8ASk/SsABgk0BIiIiIiIiIiIiIiXAAYJaAIDAAYJUwCJx/WADwABPCgAcwAGCcxbAAYJsLovewABPYICMAQABFsABgnwUwAGCdsAicf0AAWADwABPCovewABPEADAAE6YABzAAYKbFsABgo4up93AAE9ygIwBAAEWwAGCpBTAAYKewCJx/QABYAPAAE8Kp93AAE8dAMAATfwAHMABgsUWwAGCvC6n0cAAT2iAjAEAARbAAYLOFMABgsjAInH9AAFgA8AATwqn0cAATxIAwABOmAAcwAGC5xbAAYLiLo+swABPaYCMAQABFsABgvAUwAGC6sAicf0AAWADwABPCo+swABPEwDAAE6YABzAAYMFFsABgwAui5LAAE9qgIwBAAEWwAGDDhTAAYMIwCJx/QABYAPAAE8Ki5LAAE8UAMAATcYAHMABgyMWwAGDHi6RaMAAT2GAjAEAARbAAYMsFMABgybAInH9AAFgA8AATwqRaMAATxUAwABOmAAcwAGDRRbAAYM8LqffwABPdICMAQABFsABg04UwAGDSMAicf0AAWADwABPCqffwABPHwDAAE38ABzAAYNoFsABg2Iup9LAAE9rgIwBAAEWwAGDcRTAAYNrwCJx/QABYAPAAE8Kp9LAAE8WAMAATpgAHMABg44WwAGDgi6n4MAAT3WAjAEAARbAAYOXFMABg5HAInH9AAFgA8AATwqn4MAATyAAwABN/AAcwAGDtxbAAYOuLqfTwABPbICMAQABFsABg8AUwAGDusAicf0AAWADwABPCqfTwABPFwDAAE6YBsAAT3qA4sABg9HAAYPZwAGEGQEAghwAAAABA8ABg+LAAYQZ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fqMIAIYUAQABHIluaolkYAPAAE6JwABvpoXQAQABHIl+h4l5wCJ9hoChAQABNw8AwABMugDAAE6XAMAATugUiOTAIn6jCABKiZoBHImohYmhwCJ8dIDvAAAAAMAATuwGwABPrYDiwAGJVMABiV/AAYuAAAGoscAARjkAAAABA8ABiXHAAYuAAAAAAgICwAGJeQAAAID5YAPAAE6JAMABiYAAAACBC2ADwABMogAAYAPAAEyiAT4DTsABiY/AAYmUAACGYGADwABMogGTRcABiZ0BwAGJpsABiagAAINmYAPAAEyiAZMBHMABia+DwAGJrcAigBKAuwEAAZUAwABN0AGLwAGJtMAigBIcwAGJtYPAAYm0wCKAEoENAQABlADAAE3IPgJOwAGJxcABic4AAIW3YAPAAEyiARzAAYnSgMABidDAIn/NhdABAAEcwAGJ4YHAAYndwCJ/3YENAQABg8ABiePAIoASAMAATcgAwABOl0nAAYntIhzAAYn2NzCBWwEAAYTAAYn5wCKAZgDAAE3RABzAAYoOhMABigXAIoBmgVsBAAE3OQDAAE3RPgE9isABiiHAIn/4HMABij0cwAGKMhzAAYotgsABiijAIn/4g8YBAAE3EADAAE3KgQ0BAAGEwAGKNMAigGYAwABNyIEGAQABNzAAwABNyT4CPYzAAYqZwCKAZhzAAYqihMABipnAIoBmgKYBAAE3IADAAEy7ScABirMiHMABirw3YYFbAQABhMABir/AIoBmAMAATdEAHMABitSEwAGKy8AigGaBWwEAATdmAMAATdE+AT2KwAGK6cAif/gcwAGLBRzAAYr6HMABivWCwAGK8MAif/iDxgEAATcQAMAATcqBDQEAAYTAAYr8wCKAZgDAAE3IgQYBAAE3VwDAAE3JPgE9MMABiygfwAGLLsAAS9EBAAEnqLIASsABi3EBgsABi3jAIn/4BsAAT66A4sABjULAAY1QwAGS0AABqLPAAEY5AAAAAQPAAY1awAGS0AAAAAUFBcABjWkAAACHCGADwABOiQDAAY1zAAAAbWADwABMogDAAY1+AAAAhFRgA8AATKIAwAGNjAAAAJHqYAOP4ADAAY2bAAAAqLRgA8AAStgAAGADwABOiQE+CUAcwAGNt5OBWwEAAYHAAY26wCKCUQDAAE3RwAGNtcABjb8AQBzAAY3TgcAB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wABMuoCMAQABkwDAAE3GAAAh1nkAIdavACHccwAh4awAIeJjACHjGgAh48YAIeQOACHlAQAh5ZAAIeYyACHmtgAh5zoAIehBACHqcAAh6wEAIfLyACHz2AAh9L4AIfT9ACH2HQAh96sAIfkuACH6kwAiAgcAIgiuACIJaAAiC1sAIgwpACIN/AAiDsUAIg+DACIVzQAiFuMAIhfVACIg1gAiIcgAIissACIuDgAiLw0AIi/fACIzeQAiNH4AIjkKACI53gAiPaUAIkIdACJDXQAiSgYAIkr5ACJL9gAiTGsAIlAfACJQ7QAiU48AIleSACJaHwAiWo8AImE3ACJhhgAiYd8AImI4ACJikQAiYuoAImM5ACJjjwAiZXAAImcVACJocQAia80AImxIACJtsQAibhwAIm7EACJx0wAidJAAInU/ACJ1jgAiemIAIn+fACKCEwAiiCEAIojpACKJ2wAAAFMCwABPvYDiwAHCAcABwgfAAhYUA6i6AAABYAPAAE3vAAAIBMAAT8CA4sABwiTAAcIyBqi7wABGOQBgA8AATKIBasABwjBgA8AATKKGcgTAAE/BgOLAAcNMwAHDUQmoHMAARjkAYAPAAE6JAATAAE/CgOLAAcYMwAHGHQmovMAARjkAXQPAAE1GAWADwABMogAEwABPw4DiwAHGXsABxmcYqL3AAEY5AGADwABPCgAEwABPxIDiwAHG6cABxvkGqL7AAEY5AGADjuMBasABxvNgA47jh5EEwABPxYDiwAIOL8ACER8GqL/AAEY5AF0DwABNRgFgA8AATKIBasACDkFdA8AATUYBYAPAAEyiwABvwATAAE/GgOLAAhKswAISzQaowMAARjkAXQPAAE1GAWADwABMogFqwAISvl0DwABNRgFgA8AATKLAAG9oBMAAT8eA4sACEy3AAhYSBqjBwABGOQBdA8AATUYBYAPAAEyiAWrAAhM8XQPAAE1GAWADwABMosAAb+QBBcAAT9+A4sABxmzAAcZswAHGqQCAisAARjkAA8ABxnXAAcapAAAAAwMDwAHGewAABKgcYAPAAE6JAMABxocAAASovF0DwABNRgFgA8AATKIAwAHGnwAABKi9YAPAAE8KAABgA8AAT70BPwQIAcAAT8GAAMAijOEIAcAAT8KBAMAijPEIAcAAT8OCAMAijQgJAcABxmzAAE4FAAAAABEGwABPyYDiwAHHwcABx8nAAcvnBAGnmgAAAAEDwAHH28ABy+cAAAAFAQHAAcfjAAAAp8VgA8AATokABMABx/oAAACZ22ADwABOiQFqAGABwABNrALAAcgTAAAAkepgA4/gAWoAYAHAAE2sAsAByDcAAACH+V0DwABNeAJgA8AATolgA8AATokBagBgAcAATawCwAHITgAAAIfLYAPAAErYAWrAAchXYAPAAErYP2ADwABPvQE+C07AAchywAHIeQAAgcFgA8AATtMBH8AByHvAAE7yAAAAAE7AAciZwAHIoQAAnWNdA8AATUYBYAPAAEyiATHAAcijYAPAAEyiAWrAAcikYAPAAEyihnJOwAHIuwAAAKjCYAPAAE6JAE7AAcjTAAAAqMNgA8AATokAScAByOUhHMAByPSDwAHI6cAijcCAjAEAASsAwABN/D2PwAHI/cAijmEcwAHJFYPAAckLwCKNwILRAQABJ5mcAMAATYw/ScABySYcwAHJM4LAAckqwCKNqYCMAQABKwDAAE38PgFJwAHJRCEcwAHJVIfAAclIwCKOYYCMAQABKwDAAE6YPgE9isAByWfAIo2pHsAByXuP6gEAAYfAAcmFwCKOYQA/ScAByaYcwAHJtofAAcmqwCKOYYCMAQABKwDAAE6YPgE9FcABygjAIo5yCBbAAcoggsAByhfAIo2phk2P5z89IxzAAco5gsAByjDAIo2pgIwBAAErAMAATfyKwAHKMMAijalqwAHKPWADjpmGjysBYAOP4D0ewAHKSMAAT84FAAWBwAHKUsAijZAUwAHKXMAijnIIAIPAAcpqwCKNwIXAAcp2wCKODIbAAcp+wCKOLQA9HMABypSGwAHKjMAiji2AggEAARbAAcqfhcABypjAIo4MgcjAAE7uAMAATVdJwAHKrITAAcqwwCKN5j4DPRzAAcrHhcABysDAIo4MgcMBAAEnqMQAwABO5z0cwAHK6IbAAcrgwCKOLYCCAQABHMAByvoWwAHK84XAAcrswCKODIHIwABO7oEGAQABlADAAE3JAMAATVc9HMAByw2FwAHLBsAijgyBwwEAARzAAcsqHMAByxyCwAHLE8AijamG1gEBYAPAAE6JAWrAAcshYAOO44eRAI+xhk8BAAGAwAHLMcAijX8Aj68AwABO5z4CPRzAActWhcABy0/AIo4M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AgqJHMACCnEcwAIKZYDAAgpXwCK5u4LRAQABHMACCmuFwAIKZsAiuoCDxQEAAZcAwABMvwDAAE1VgKEBAAEcwAIKdpSDcQEAARzAAgp/hcACCnrAIrqAgKEBAAE3DwDAAEy6AMAATL4AwABMuoCMAQABkwDAAE3GPgE9HMACCqGCwAIKmsAiuemGFAEAAYXAAgqvwCK6gADAAE74PgM9HMACCtSCwAIKzcAiuemGFAEAAWrAAgriYAPAAEyihm8AwABO+D0cwAIK/ILAAgr1wCK56YYUAQABHMACCxVqwAILCmADwABOicAAb6aF0AEAARzAAgslhcACCyDAIrqAg8UBAAGXAMAATL8AwABOlwDAAE74PRzAAgs8gsACCzXAIrnphhQBAAEcwAILVWrAAgtKYAPAAE6JwABvpoXQAQABHMACC2WFwAILYMAiuoCAoQEAATcPAMAATLoAwABOlwDAAE74ScACC4EhHMACC5YcwAILjYPAAguGwCK5/4ChAQABHMACC483gP+A2AAAAADAAEy9AMAATLqAjAEAAZMAwABNxj4BRcACC6QBwAILrcACC68AAINmYAPAAEyiAZMBHMACC7aEwAILtMAivLGAuwEAARbAAgu+gcACC7jAIrnSgcjAAE12AMAATdABjMACC8bAIryxHMACC8eEwAILxsAivLGBDQEAAZQAwABNyD4CTsACC9nAAgveAACGYGADwABMogEcwAIL5YHAAgvgwCK50oLRAQABhMACC+bAIryxAMAATVVJwAIL8iIcwAIL+4XAAgv2wCK9GIC7AQABkwDAAE3QARzAAgwHhcACDALAIr0YgowBAAE3gP8AwABN0j4BPTDAAgwaH8ACDC7AAEvSAgAChcACDDTAIr0YJ6jlAD8/BsAAT9WA4sACDGzAAgxzwAIMwgAAgO8AAAABA8ACDHvAAgzCAAAAAAAAAGADwABOiQFKwAIMhwEjHMACDJ0cwAIMmRbAAgyILqi8wABGOcAAT8KC0QEAAZMAwABNVYCMAQABasACDKBgA8AATKKGcgDAAE3GJMACDLsCJ5aqFsACDLQuqBzAAEY5wABPwRbAAgy9LqgcwABGOcAAT8EBYAPAAE6JAAAijVUAIpFiACKUKwAilbYAIpw3ACKd1gAinyMAIqG0ACKi0AAipYAAIqXeACKmYAAirGAAIq6eACKxTwAiuY0AIr2qACK+TwAAABECwABP4IDiwAJS18ACUt3AAo/jA6jmAAABYAPAAE3vAAFgA8AATwoJBMAAT+OA4sACUwjAAlMMCajnwABGOQBgA8AATokABMAAT+SA4sACUxrAAlMkCajowABGOQBgA8AATKIABMAAT+WA4sACUzLAAlM8CajpwABGOQBgA8AATKIABMAAT+aA4sACU0rAAlNUCajqwABGOQBgA8AATKIABMAAT+eA4sACU2LAAlNsCajrwABGOQBgA8AATKIABMAAT+iA4sACU3rAAlOFCajswABGOQBgA8AATKIABMAAT+mA4sACU5PAAlOhCajtwABGOQBgA8AATKIABMAAT+qA4sACVEnAAlRVGKjuwABGOQBgA8AATokABMAAT+uA4sACVF3AAlRrGKgdwABGOQBgA8AATKIBKwEFwABQGoDiwAJUcMACVHDAAlU0AAAAA8ACVHrAAlU0AAAACAgIwAJUhwAABKjnYAPAAE6JAMACVJgAAASo6GADwABMogDAAlSvAAAEqOlgA8AATKIAwAJUxgAABKjqYAPAAEyiAMACVN0AAASo62ADwABMogDAAlT0AAAEqOxgA8AATKIAwAJVDAAABKjtYAPAAEyiAMACVScAAASo7mADwABOiQAAYAPAAE/gAT8JCAHAAE/jgADAIr/5CAHAAE/kgQDAIsAJCAHAAE/lggDAIsAZCAHAAE/mgwDAIsApCAHAAE/nhADAIsA5CAHAAE/ohQDAIsBJCAHAAE/phgDAIsBZCAHAAE/qhwDAIsBpCQHAAlRwwABOBQAAAAApBsAAT+2A4sACVTnAAlVCwAJVXQEAp9wAAAABA8ACVUzAAlVdAAAAAAAAAGADwABK2AFKwAJVTwEcwAJVWhbAAlVPLqjowABGOcAAT+SCjAEAAZMAwABN0gbAAE/ugOLAAlVhwAJVasACVYgBAKfdAAAAAQPAAlV3wAJViAAAAAAAAABgA8AAStgBSsACVXoBHMACVYUWwAJVei6o6cAARjnAAE/lgowBAAGTAMAATdIGwABP74DiwAJVjMACVZXAAlW/AQCoPgAAAAEDwAJVocACVb8AAAAAAAAAYAPAAErYAUrAAlWkARzAAlWvFsACVaQuqOnAAEY5wABP5YKMAQABHMACVbwWwAJVsS6o6MAARjnAAE/kgQ0B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AEY5wABP44YTAgACgMACYmzAItGpg8ACYnPAItKzAMAATp8AwABNVz2IwAJigMAi0akcwAJiioPAAmKIwCLSs4ENAQABlADAAE3IPz0cwAJip4LAAmKhwCLSh4CCAQABHMACYrAWwAJiqy6o58AARjnAAE/jhhMCAAKAwAJiusAi0amBwAJiwcAi0cwAwABOnwDAAE1XSsACYswBHsACYszAAE1PAQFgA8AATokBgsACYu3AItKHAAbAAFAFgOLAAmL8wAJjFMACY6kBAJndAAAAAQPAAmMkwAJjqQAAAAAAAABdA8AATXgCYAPAAE6JYAPAAE6JAT4CScACYyohFsACYy8up9/AAE/xSsACYzkBasACY0BdA8AATXgCYAPAAE6JYAPAAE6JopM/SsACY14BH8ACY2WKswECYAPAAE6JYAPAAE6JAR7AAmONwABPQAEAARbAAmOeLqfSwABQAQAABsAAUAaA4sACY67AAmPMwAJlOwEAp9sAAAABA8ACY9/AAmU7AAAAAAAAAF0DwABNeAJgA8AAToldA8AATUYBYAPAAE6JAT4EScACY+UhFsACY+oup9/AAE/xSsACY/QBasACY/tdA8AATXgCYAPAAE6JXQPAAE1GAWADwABOicAAcAA/TsACZCPAAmQ3AACoW10DwABNeAJbWwEewAJkPsAAT6sBAAEWwAJkUy6n0sAAUAEAPgJOwAJkgwAAAIEHXQPAAE0/AVsBFsACZIMeAJPNAQFdA8AATQQBWwEWwAJkg4DAAmRvwCLVh4NjwABNmgCBCMAATSZFAAABHMACZIOBAMAi1bmBCQAAAADAAE1BAD4CTsACZGgAAACC0lsBFsACZImBAMAi1bmBCsAATUM+AT0cwAJkpIDAAmSRwCLVh4EMAgACgsACZKXAItYXHsACZKrAAE1PAQFgA8AATokBJsACZOMFHMACZOOAwAJk0MAi1YeC0QEAAYLAAmTkwCLWFwDAAE2MXQPAAE0EAVsAAMAATY1KwAJk9QEewAJk9cAATYIBAmADwABOiV0DwABNRgFgA8AATokBgMACZSPAItWHAAbAAFAMgOLAAmVAwAJlRcACZe8AAKj2wABGOQAAAAEDwAJlTMACZe8AAAABAQHAAmVUAAAAi5JgA8AATokAAGADwABK2AE+Ak7AAmVkwAJlcwAAqPdgA8AATKIBHMACZYAWwAJldS6o6sAARjnAAE/mgQ0BAAGUAMAATchKwAJliQEiHMACZa0cwAJln4HAAmWQwCLXEYENAQABFsACZaaAwAJlocAi1vaByMAATo0AwABNyICMAQABFsACZbAuqOvAAEY5wABP5wDAAE3GABzAAmXLFsACZcYuqOfAAEY5wABP44iaAgACgMACZdbAItb2gcACZdzAItcRAMAATpsGwABQEYDiwAJl9MACZfjAAmYPAACn5wAAAAEDwAJmBcACZg8AAAAAAAAAYAPAAE8KAUrAAmYLAS4GwABQEoDiwAJmFMACZhjAAmbtAACn5AAAAAEDwAJmJsACZu0AAAAAAAAAYAPAAE8KAT4CScACZi8hFsACZjQup+DAAE/ySsACZkEBLj9KwAJmUgEfwAJmWcAAUBoIAAgcwAJmaRbAAmZkLqjnwABGOcAAT+OGEwIAApMWwAJmdi6o7cAARjnAAE/pAMAATp8WwAJmhy6o6MAARjnAAE/kFsACZpMuqOnAAEY5wABP5RbAAmanLqjqwABGOcAAT+YWwAJmsy6o68AARjnAAE/nFsACZr8uqOzAAEY5wABP6BbAAmbMLqjtwABGOcAAT+kWwAJm3C6o7sAARjnAAE/qAAbAAFATgOLAAmbywAJm9sACb48AAJnAAAAAAQPAAmb9wAJvjwAAAAkAAAnAAmcNAAAAi95gA8AATokBagBgAcAATawCwAJnIgAAAKfRYAPAAE6JAWoAYAHAAE2sAsACZzkAAACPrGADwABOiQFqAGABwABNrALAAmdJAAAAi5JgA8AATKIBagBgAcAATawCwAJnXAAAAJFoYAPAAE6JAWoAYAHAAE2sAsACZ3kAAACZvl0DwABNBAFgA8AATokBagBgAcAATawCwAJnlAAAAKfSYAPAAE6JAWoAYAHAAE2sAsACZ9MAAACZ3V0DwABNeAJgA8AATolbAWoAYAHAAE2sAsACZ/EAAACn02ADwABOiQFqAGABwABNrAJgA8AATwoBPgtOwAJoB8ACaBUAAKhZYAPAAErYASpJwAJoIiEcwAJoLYDAAmgmwCLZLYCMAQABKwDAAE6YPgI9iMACaD7AItktHsACaEzAAE+UAwADgMACaFjAItktkxbAAmhqgMACaGPAItktgcjAAE6NAD0VwAJoecAi2icJIRzAAmiKLqjzwABG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loEGAQABHMACiKoUwAKIoMAi8O4IAIPGAQABlgDAAE3KAMAATck/TsACiL7AAojEAACEb2ADwABMogEcwAKI2RzAAojOhcACiMbAIvAegQYBAAGGwAKI0MAi8JYAwABNyYENAQABFsACiOIUwAKI28Ai8aoJAIHIwABOjQDAAE3ITsACiPLAAoj5AACo+mADwABOiQEkwAKI+QMcwAKJCBbAAokDgMACiP7AIuLbqOfAAEY5wABP44YTAgACk4XAAokVwCLwHgDAAE6fFMACiR/AIvGqCQAcwAKJOxbAAok2gcACiTLAIuLrqOfAAEY5wABP44YTAQABhsACiUXAIvCWAMAATp9KwAKJVwEfwAKJXsAAUBoIAAgUwAKJcsAi88YLABbAAomHgMACiYLAIuLbqOjAAEY5wABP5BbAAomggMACiZvAIuLbqOnAAEY5wABP5RbAAom5gMACibTAIuLbqOrAAEY5wABP5hbAAonSgMACic3AIuLbqOvAAEY5wABP5xzAAon2FsACieqBwAKJ5sAi4uuo7MAARjnAAE/ogQ0BAAEUwAKJ+MAi82wKAADAAE3IHMACihoWwAKKC4HAAooHwCLi66jtwABGOcAAT+mBDQEAARTAAoocwCLzbAoAAMAATcgWwAKKMIDAAoorwCLi26juwABGOcAAT+oABsAAUBaA4sACikbAAopNwAKMgwAAlAcAAAABA8ACilfAAoyDAAAAAQAAAcACil4AAACWkWADwABK2AFqAGABwABNrAJgA8AATokBPgRJwAKKbiIcwAKKfRbAAopyLqjowABGOcAAT+SBXgEAAZMAwABN0wAhFsACioYuqO/AAEY5wABP9D4BPTDAAoqXH8ACip3AAEwwAQABJMACit0DJ6ifFsACitIui97AAE/7J6igAD9JwAKK6hzAAor6FsACiu4uqOzAAEY5wABP6IC7AQABFsACiwEWwAKK/C6o58AARjnAAE/jgcjAAE6NAMAATdA+AknAAosRHMACiyEWwAKLFS6o7MAARjnAAE/ogLsBAAEWwAKLIy6o7cAARjnAAE/pAMAATdA+AT0wwAKLPR/AAotDwABMMAEAASeooQA/PTDAAouwH8ACi7bAAEwwAQABJ6iiAD89IxzAAowogMACjCDAIvVwgIwBAAErAMAATfyIwAKMIMAi9XAawAKMMcAAT2UrAWADwABK2ErAAoxBASOAwAKMSMAi9XAewAKMV8AAT6cBAAEuABzAAoxyLqijwABGOQAAAADAAFAOAWADwABOiQbAAFAOgOLAAoyIwAKMj8ACjY0AAKijwABGOQAAAAEDwAKMmsACjY0AAAAAAAAAYAPAAE6JAT4CScACjKMcwAKMshbAAoynLqjpwABGOcAAT+WAuwEAARbAAoy0LqjqwABGOcAAT+YAwABN0D4BPTDAAozzH8ACjPnAAEwwAQABJMACjQkCJ6ikJ6ilAD9KwAKNeQEWwAKNhS6RaMAAUAAGwABQB4DiwAKNksACjZ7AAo3WAQA7AAAAAQPAAo2jwAKN1gAAAAAAAABgA8AAT70BPgJAIRzAAo23FsACjbAui97AAE/7gIwBAAEnOwDAAE6YwAKNsMACjcAASsACjccBKwbAAFAIgOLAAo3bwAKN48ACjg8BAIIcAAAAAQPAAo3swAKODwAAAAAAAABgA8AATKIBSsACje8BNcACje8AAAEAYAPAAEyiARbAAo3vLqgdwABGOcAAT+sjHMACjf6AwAKN78Ai+EaAjAEAASsAwABNxhfAAo3vLqgdwABGORbAAo4HFsACjgIuqOfAAEY5wABP44IcwABOjsAAT+uAwAKN78Ai+EYBYAPAAEyiBsAAUBeA4sACjhTAAo4iwAKOmQMAgIwAAAABA8ACjiTAAo6ZAAAAAQEBwAKOLAAAAIIdYAPAAE3vAABgA8AAStgBPgJJwAKOOR7AAo49wABGdQIAAi6AwAKOTcAi+OQASsACjlUBKT9KwAKOZgEiJcACjnMAgMACjm3AIvjkYAPAAE8KABzAAo6CFsACjn0uqOfAAEY5wABP44CMAQABHMACjosUwAKOhcAi+OQAAWADwABPCoDvAAAAAMAATzIAwABOmAbAAFAPgOLAAo6ewAKOosACj8MAAKj5wABGOQAAAAEDwAKOrsACj8MAAAAAAAAAYAPAAE8KAT4BSsACjrcBH8ACjsPAAE+8BwAHFsACjtsui97AAE/7FsACjvAup9HAAE/9IxbAAo8HLqfdwABP7hbAAo8bLo+swABP/isBYAPAAE6JIxbAAo81LqfewABP8BbAAo9ELouSwABP/ysBYAPAAEyiFsACj14ukWjAAFAAIxbAAo9xLqffwABP8RbAAo+BLqfSwABQASsBYAPAAE6JIxbAAo+cLqfgwABP8hbAAo+vLqfTwABQAisBYAPAAE6JAAbAAFAYgOLAAo/IwAKPz8ACj+EAAIDvAAAAAQPAAo/XwAKP4QAAAAAAAABgA8AATokBSsACj90BFsACj90uqOfAAEY5wABP4wAAIsDyACLBSgAiwaIAIsIZACLCsgAiwxkAIsOLACLECwAixIsAIsUMACLFjQAixjYAIsagACLHBwAix1oAIshmACLKCgAiyrsAIsubACLMPAAizSgAIs2fACLOXwAizxoAItFtACLUWAAi1QIAItbIACLXyAAi2AEAItkCACLhfgAi4e4AIuKtACL1RQAi9wsAIverACL4DQAi+LoAIvl+ACL6cQAi+rkAAAApAsAAUBuA4sACkB3AApAjwAKQ6QOo/wAAAWADwABPRQAAAQTAAFAegOLAApBLwAKQUAmDpMAARjkAYAPAAE+9AAEFwABQIoDiwAKQVcACkFXAApDJAAAAA8ACkF3AApDJAAAAAwMDwAKQYwAABIOkYAPAAE+9AMACkHEAAACRaGADwABOiQDAApB+AAAAp9JgA8AATokAAGADwABQGwE/AggBwABQHoAAwCL7zAkAwAKQk8AAT7wHAAcnOysrK4HAApC3wCL73ILAApC9wCL77CsAAQbAAFAggOLAApDOwAKQ2sACkOcBADsAAAABA8ACkN/AApDnAAAAAAAAAGADwABPvQFKwAKQ4gEWwAKQ4i6DpMAARjnAAFAeAAAi/DkAIvyAAAAAAQAlBMAARkGAtoETgSMGqQDAAEY5AGADwABMogFqgR9gA8AATKKEogTAAEZCgLaBL4FABqkBwABGOQBgA8AATKIBaoE8YAPAAEyihn8EwABGQ4C2gUyBXgapAsAARjkAYAPAAEyiAWqBWGADwABMooXlBMAARkSAtoFqgYAGqQPAAEY5AGADwABMogFqgXhgA8AATKKF6wTAAEZFgOOCEoI3BJiZwABGOQFqgelgA8AASp8DXgMAAAAAAAFXA8AARjwAYAPAAE8KAWqCJGEDAGADwABPCsAAcCAEwABGYoC5jSiNTwapBABgA8AASosBao01YAPAAEqLhzQEwABGY4C5kiSSOgaN+wBgA8AATe8BapIvYAPAAEqUq/EEwABGZIC5k5KTpAapBQFqk3xgA8AASouHNGABwABNrAFqk6BgAcAATawCBMAARmWAuZzHnNcGqQYBapyvYAPAAEqLhzRgA8AATe8BapzPYAPAAEqcwABwJQTAAEZGgOKBLIE5BqkHwABGOQBgA8AATKIBaoE1YAPAAEyibwTAAEZHgOKBRYFUBqkIwABGOQBgA8AATKIBaoFQYAPAAEyihm8EwABGSIDigWCBcQapCcAARjkAYAPAAEyiAWqBbWADwABMop+UBMAARkmA4oF9gYkGqQrAAEY5AGADwABMogFqgYVgA8AATKKEVATAAEZKgOKBlYGgBqkLwABGOQBgA8AATKIBaoGcYAPAAEyihF0EwABGS4DigayBuQapDMAARjkAYAPAAEyiAWqBtWADwABMooRgBMAARkyA4oHFgdIGqQ3AAEY5AGADwABMogFqgc5gA8AATKKEaQTAAEZNgOKB3oHsBqkOwABGOQBgA8AATKIBaoHoYAPAAEyihnQEwABGToDigfiCDAapD8AARjkAYAPAAEyiAWqCCGADwABMop6yBMAARk+A4oIYgiwGqRDAAEY5AGADwABMogFqgihgA8AATKKftwTAAEZQgOKCOIJMBqkRwABGOQBgA8AATKIBaoJIYAPAAEyihG8EwABGUYDigliCaQapEsAARjkAYAPAAEyiAWqCZWADwABMooRyBMAARlKA4oJ1gooGqRPAAEY5AGADwABMogFqgoZgA8AATKKEdQTAAEZTgOKCloKqBqkUwABGOQBgA8AATKIBaoKmYAPAAEyihHgEwABGVIDigraCygapFcAARjkAYAPAAEyiAWqCxmADwABMooSBBMAARlWA4oLWguoGqRbAAEY5AGADwABMogFqguZgA8AATKKf0ATAAEZWgOKC+oMZBqkXwABGOQBgA8AATokBaoMHYAPAAE6JwABvpgTAAEZXgOLAAhdqwAIXfQapGMAARjkAYAPAAEyiAWrAAhd8YAPAAEyiFATAAEZYgOLAAhfQwAIX4wapGcAARjkAYAPAAEyiAWrAAhfiYAPAAEyiFgTAAEZZgOLAAhgqwAIYPQapGsAARjkAYAPAAEyiAWrAAhg8YAPAAEyiTATAAEZagOLAAhiGwAIYmQapG8AARjkAYAPAAEyiAWrAAhiYYAPAAEyiGATAAEZbgOLAAhjbwAIY7wapHMAARjkAYAPAAEyiAWrAAhjuYAPAAEyihC0EwABGXIDiwAIZ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TKIUgKYBAAFqwAI7emADwABMop4kAMAATLsAAD0cwAI7kILAAjuIwCMJGm4DAAMmwAI7kQWEwAI7kcAjC6BgA6wXasACO5RgA8AATonAAHBWasACO5tgA8AATKIUAAA9HMACO7SCwAI7rMAjCRpuAwADJsACO7UFhMACO7XAIwugYAOsFyeGXGrAAju9YAPAAEyin9sAAD0cwAI72YLAAjvRwCMJGm4DAAMmwAI72gWEwAI72sAjC6BgA6wXJ4sXHMACO+1qwAI74mADwABMohaApgEAAWrAAjvvYAPAAEyibwDAAEy7AAA9HMACPBaCwAI8DsAjCRpuAwADJsACPBcFhMACPBfAIwugYAOsFyeF+GrAAjwfYAPAAEyiTAAAPRzAAjw7gsACPDPAIwkabgMAAybAAjw8BYTAAjw8wCMLoGADrBcnqKocwAI8SmrAAjxEYAPAAEyihDCApgEAAWrAAjxMYAPAAEyiniAAwABMuwAAPRzAAjxjgsACPFvAIwkabgMAAybAAjxkBYTAAjxkwCMLoGADrBcnqKscwAI8dWrAAjxsYAPAAEyihE6ApgEAAWrAAjx3YAPAAEyihfQAwABMuwAAPYzAAjyKwCMLoBzAAjyTgcACPI7AIwhSbgIAAmrAAjyUYAPAAEyin9scwAI8smrAAjylYAPAAEyiFICmAQABasACPLRgA8AATKKeJADAAEy7AAA9HMACPMqCwAI8wsAjCRpuAwADJsACPMsFhMACPMvAIwugYAOsF2rAAjzOYAPAAE6JwABwVmrAAjzVYAPAAEyiFAAAPRzAAjzugsACPObAIwkabgMAAybAAjzvBYTAAjzvwCMLoGADrBcnhlxqwAI892ADwABMolEAAD0cwAI9FILAAj0MwCMJGm4DAAMmwAI9FQWEwAI9FcAjC6BgA6wXJ4sXHMACPShqwAI9HWADwABMohaApgEAAWrAAj0qYAPAAEyibwDAAEy7AAA9HMACPUCCwAI9OMAjCRpuAwADJsACPUEFhMACPUHAIwugYAOsFyeF+BzAAj1RasACPUlgA8AATKKES4CmAQABasACPVNgA8AATKKeJADAAEy7AAA9HMACPWmCwAI9YcAjCRpuAwADJsACPWoFhMACPWrAIwugYAOsFyeoqhzAAj14asACPXJgA8AATKKEMICmAQABasACPXpgA8AATKKeIADAAEy7AAA9HMACPZGCwAI9icAjCRpuAwADJsACPZIFhMACPZLAIwugYAOsFyeoqxzAAj2jasACPZpgA8AATKKEToCmAQABasACPaVgA8AATKKF9ADAAEy7AAA9jMACPbjAIwugHMACPcGBwAI9vMAjCFJuAgACasACPcJgA8AATKJRHMACPeFqwAI91GADwABMohSApgEAAWrAAj3jYAPAAEyiniQAwABMuwAAPRzAAj35gsACPfHAIwkabgMAAybAAj36BYTAAj36wCMLoGADrBdqwAI9/WADwABOicAAcFZqwAI+BGADwABMohQAAD0cwAI+HYLAAj4VwCMJGm4DAAMmwAI+HgWEwAI+HsAjC6BgA6wXJ4Z4HMACPjNqwAI+JmADwABMohSApgEAAWrAAj41YAPAAEyiniQAwABMuwAAPRzAAj5LgsACPkPAIwkabgMAAybAAj5MBYTAAj5MwCMLoGADrBcnixccwAI+X2rAAj5UYAPAAEyiFoCmAQABasACPmFgA8AATKJvAMAATLsAAD0cwAI+d4LAAj5vwCMJGm4DAAMmwAI+eAWEwAI+eMAjC6BgA6wXJ4X4asACPoBgA8AATKKESAAAPRzAAj6XgsACPo/AIwkabgMAAybAAj6YBYTAAj6YwCMLoGADrBcnqKocwAI+pmrAAj6gYAPAAEyihDCApgEAAWrAAj6oYAPAAEyiniAAwABMuwAAPRzAAj6/gsACPrfAIwkabgMAAybAAj7ABYTAAj7AwCMLoGADrBcnqKscwAI+0WrAAj7IYAPAAEyihE6ApgEAAWrAAj7TYAPAAEyihfQAwABMuwAAPYzAAj7mwCMLoBzAAj7vgcACPurAIwhSbgIAAmrAAj7wYAPAAEyiFBzAAj8LasACPv5gA8AATKIUgKYBAAFqwAI/DWADwABMop4kAMAATLsAAD0cwAI/I4LAAj8bwCMJGm4DAAMmwAI/JAWEwAI/JMAjC6BgA6wXasACPydgA8AATonAAHBWasACPy5gA8AATKIUAAA9HMACP0eCwAI/P8AjCRpuAwADJsACP0gFhMACP0jAIwugYAOsFyeLFxzAAj9basACP1BgA8AATKIWgKYBAAFqwAI/XWADwABMom8AwABMuwAAPRzAAj9zgsACP2vAIwkabgMAAybAAj90BYTAAj90wCMLoGADrBcnhfhqwAI/fGADwABMooRLAAA9HMACP5CCwAI/iMAjCRpuAwADJsACP5EFhMACP5HAIwugYAOsFyeoqhzAAj+fasACP5lgA8AATKKEMICmAQABasACP6FgA8AATKKeIADAAEy7AAA9HMACP7iCwAI/sMAjCRpuAwADJsACP7kFhMACP7nAIwugYAOsFyeoqxzAAj/KasACP8FgA8AATKKEToCmAQABasACP8xgA8AATKKF9ADAAEy7AAA9jMACP9/AIwugHMACP+iBwAI/48AjCFJuAgACasACP+lgA8AATKIWHMACP/pqwAI/9WADwABMoogRgKYBAAFqwAI//GADwABMop4kAMAATLsAAD0cwAJAEoLAAkAKwCMJGm4DAAMmwAJAEwWEwAJAE8AjC6BgA6wXasACQBZgA8AATonAAHBWHMACQCJqwAJAHWADwABMoogRgKYBAAFqwAJAJGADwABMonUAwABMuwAAPRzAAkA6gsACQDLAIwkabgMAAybAAkA7BYTAAkA7wCMLoGADrBcnhfgcwAJAU2rAAkBDYAPAAEyiTICmAQABasACQFVgA8AATKJ1AMAATLsAAD0cwAJAa4LAAkBjwCMJGm4DAAMmwAJAbAWEwAJAbMAjC6BgA6wXJ4ZcHMACQH9qwAJAdGADwABMop9hgKYBAAFqwAJAgWADwABMonUAwABMuwAAPRzAAkCXgsACQI/AIwkabgMAAybAAkCYBYTAAkCYwCMLoGADrBcnqKocwAJApmrAAkCgYAPAAEyihDCApgEAAWrAAkCoYAPAAEyiniAAwABMuwAAPRzAAkC/gsACQLfAIwkabgMAAybAAkDABYTAAkDAwCMLoGADrBcnqKscwAJA0WrAAkDIYAPAAEyihE6ApgEAAWrAAkDTYAPAAEyihfQAwABMuwAAPYzAAkDmwCMLoBzAAkDvgcACQOrAIwhSbgIAAmrAAkDwYAPAAEyiTBzAAkEGasACQQFgA8AATKKIEYCmAQABasACQQhgA8AATKKeJADAAEy7AAA9HMACQR6CwAJBFsAjCRpuAwADJsACQR8FhMACQR/AIwugYAOsF2rAAkEiYAPAAE6JwABwVmrAAkEpYAPAAEyiiBEAAD0cwAJBOoLAAkEywCMJGm4DAAMmwAJBOwWEwAJBO8AjC6BgA6wXJ4X4HMACQVBqwAJBQ2ADwABMohiApgEAAWrAAkFSYAPAAEyicgDAAEy7AAA9HMACQWiCwAJBYMAjCRpuAwADJsACQWkFhMACQWnAIwugYAOsFyeGXGrAAkFxYAPAAEyin2EAAD0cwAJBiILAAkGAwCMJGm4DAAMmwAJBiQWEwAJBicAjC6BgA6wXJ6iqHMACQZdqwAJBkWADwABMooQwgKYBAAFqwAJBmWADwABMop4gAMAATLsAAD0cwAJBsILAAkGowCMJGm4DAAMmwAJBsQWEwAJBscAjC6BgA6wXJ6irHMACQcJqwAJBuWADwABMooROgKYBAAFqwAJBxGADwABMooX0AMAATLsAAD2MwAJB18AjC6AcwAJB4IHAAkHbwCMIUm4CAAJqwAJB4WADwABMohgcwAJB+2rAAkHvYAPAAEyihC2ApgEAAWrAAkH9YAPAAEyiniQAwABMuwAAPRzAAkITgsACQgvAIwkabgMAAybAAkIUBYTAAkIUwCMLoGADrBdqwAJCF2ADwABOicAAcFZqwAJCHmADwABMooQtAAA9HMACQjaDwAJCLsAjClxuAwADJsACQjcFhMACQjfAIwugYAOsFyepNBzAAkJMasACQkBgA8AATKKELYCmAQABasACQk5gA8AATKKeJADAAEy7AAA9HMACQmSCwAJCXMAjCRpuAwADJsACQmUFhMACQmXAIwugYAOsFyeLFxzAAkJ6asACQm1gA8AATKJOgKYBAAFqwAJCfGADwABMop4dAMAATLsAAD0cwAJCkoLAAkKKwCMJGm4DAAMmwAJCkwWEwAJCk8AjC6BgA6wXJ4sYHMACQqhqwAJCm2ADwABMohiApgEAAWrAAkKqYAPAAEyicgDAAEy7AAA9HMACQsCCwAJCuMAjCRpuAwADJsACQsEFhMACQsHAIwugYAOsFyeEehzAAkLSasACQslgA8AATKIcgKYBAAFqwAJC1GADwABMop4kAMAATLsAAD0cwAJC6oLAAkLiwCMJGm4DAAMmwAJC6wWEwAJC68AjC6BgA6wXJ4X4HMACQvtqwAJC82ADwABMooRLgKYBAAFqwAJC/WADwABMonUAwABMuwAAPRzAAkMTgsACQwvAIwkabgMAAybAAkMUBYTAAkMUwCMLoGADrBcnqKocwAJDImrAAkMcYAPAAEyihDCApgEAAWrAAkMkYAPAAEyiniAAwABMuwAAPRzAAkM7gsACQzPAIwkabgMAAybAAkM8BYTAAkM8wCMLoGADrBcnqKscwAJDTWrAAkNEYAPAAEyihE6ApgEAAWrAAkNPYAPAAEyihfQAwABMuwAAPYzAAkNiwCMLoBzAAkNrgcACQ2bAIwhSbgIAAmrAAkNsYAPAAEyihC0cwAJDhWrAAkN5YAPAAEyihC2ApgEAAWrAAkOHYAPAAEyiniQAwABMuwAAPRzAAkOdgsACQ5XAIwkabgMAAybAAkOeBYTAAkOewCMLoGADrBdqwAJDoWADwABOicAAcFZqwAJDqGADwABMooQtAAA9HMACQ8CDwAJDuMAjClxuAwADJsACQ8EFhMACQ8HAIwugYAOsFyepNBzAAkPWasACQ8pgA8AATKKELYCmAQABasACQ9hgA8AATKKeJADAAEy7AAA9HMACQ+6CwAJD5sAjCRpuAwADJsACQ+8FhMACQ+/AIwugYAOsFyeLFxzAAkQEasACQ/dgA8AATKJOgKYBAAFqwAJEBmADwABMop4dAMAATLsAAD0cwAJEHILAAkQUwCMJGm4DAAMmwAJEHQWEwAJEHcAjC6BgA6wXJ4sYHMACRDJqwAJEJWADwABMohiApgEAAWrAAkQ0YAPAAEyicgDAAEy7AAA9HMACREqCwAJEQsAjCRpuAwADJsACREsFhMACREvAIwugYAOsFyeF+BzAAkRbasACRFNgA8AATKKES4CmAQABasACRF1gA8AATKJ1AMAATLsAAD0cwAJEc4LAAkRrwCMJGm4DAAMmwAJEdAWEwAJEdMAjC6BgA6wXJ6iqHMACRIJqwAJEfGADwABMooQwgKYBAAFqwAJEhGADwABMop4gAMAATLsAAD0cwAJEm4LAAkSTwCMJGm4DAAMmwAJEnAWEwAJEnMAjC6BgA6wXJ6irHMACRK1qwAJEpGADwABMooROgKYBAAFqwAJEr2ADwABMooX0AMAATLsAAD2MwAJEwsAjC6AcwAJEy4HAAkTGwCMIUm4CAAJqwAJEzGADwABMok4cwAJE5mrAAkTaYAPAAEyihfGApgEAAWrAAkToYAPAAEyiniQAwABMuwAAPRzAAkT+g8ACRPbAIwpcbgMAAybAAkT/BYTAAkT/wCMLoGADrBcnpFdqwAJFCGADwABMooXxAAA9HMACRSCCwAJFGMAjCRpuAwADJsACRSEFhMACRSHAIwugYAOsFyeLGBzAAkU2asACRSlgA8AATKIYgKYBAAFqwAJFOGADwABMonIAwABMuwAAPRzAAkVOgsACRUbAIwkabgMAAybAAkVPBYTAAkVPwCMLoGADrBcnhfgcwAJFX2rAAkVXYAPAAEyihEuApgEAAWrAAkVhYAPAAEyidQDAAEy7AAA9HMACRXeCwAJFb8AjCRpuAwADJsACRXgFhMACRXjAIwugYAOsFyeoqhzAAkWGasACRYBgA8AATKKEMICmAQABasACRYhgA8AATKKeIADAAEy7AAA9HMACRZ+CwAJFl8AjCRpuAwADJsACRaAFhMACRaDAIwugYAOsFyeoqxzAAkWxasACRahgA8AATKKEToCmAQABasACRbNgA8AATKKF9ADAAEy7AAA9jMACRcbAIwugHMACRc+BwAJFysAjCFJuAgACasACRdBgA8AATKKF8RzAAkXpasACRd1gA8AATKKF8YCmAQABasACRetgA8AATKKeJADAAEy7AAA9HMACRgGDwAJF+cAjClxuAwADJsACRgIFhMACRgLAIwugYAOsFyepNWrAAkYLYAPAAEyihfEAAD0cwAJGI4LAAkYbwCMJGm4DAAMmwAJGJAWEwAJGJMAjC6BgA6wXJ4sYHMACRjlqwAJGLGADwABMohiApgEAAWrAAkY7YAPAAEyicgDAAEy7AAA9HMACRlGCwAJGScAjCRpuAwADJsACRlIFhMACRlLAIwugYAOsFyeF+BzAAkZiasACRlpgA8AATKKES4CmAQABasACRmRgA8AATKJ1AMAATLsAAD0cwAJGeoLAAkZywCMJGm4DAAMmwAJGewWEwAJGe8AjC6BgA6wXJ6iqHMACRolqwAJGg2ADwABMooQwgKYBAAFqwAJGi2ADwABMop4gAMAATLsAAD0cwAJGooLAAkaawCMJGm4DAAMmwAJGowWEwAJGo8AjC6BgA6wXJ6irHMACRrRqwAJGq2ADwABMooROgKYBAAFqwAJGtmADwABMooX0AMAATLsAAD2MwAJGycAjC6AcwAJG0oHAAkbNwCMIUm4CAAJqwAJG02ADwABMohxqwAJG3WADwABMohwAAD0cwAJG8oLAAkbqwCMJGm4DAAMmwAJG8wWEwAJG88AjC6BgA6wXJ4R7asACRvtgA8AATKKELQAAPYzAAkcMwCMLoBzAAkcVgcACRxDAIwhSbgIAAmrAAkcWYAPAAEyihEgcwAJHJ2rAAkciYAPAAEyiiBGApgEAAWrAAkcpYAPAAEyiniQAwABMuwAAPRzAAkc/gsACRzfAIwkabgMAAybAAkdABYTAAkdAwCMLoGADrBdqwAJHQ2ADwABOicAAcFZqwAJHSmADwABMoogRAAA9HMACR1uCwAJHU8AjCRpuAwADJsACR1wFhMACR1zAIwugYAOsFyeGXGrAAkdkYAPAAEyiVAAAPRzAAkd+gsACR3bAIwkabgMAAybAAkd/BYTAAkd/wCMLoGADrBcnhfgcwAJHj2rAAkeHYAPAAEyihEuApgEAAWrAAkeRYAPAAEyiniQAwABMuwAAPRzAAkengsACR5/AIwkabgMAAybAAkeoBYTAAkeowCMLoGADrBcnqKocwAJHtmrAAkewYAPAAEyihDCApgEAAWrAAke4YAPAAEyiniAAwABMuwAAPRzAAkfPgsACR8fAIwkabgMAAybAAkfQBYTAAkfQwCMLoGADrBcnqKscwAJH4WrAAkfYYAPAAEyihE6ApgEAAWrAAkfjYAPAAEyihfQAwABMuwAAPYzAAkf2wCMLoBzAAkf/gcACR/rAIwhSbgIAAmrAAkgAYAPAAEyiVBzAAkgUasACSA9gA8AATKKIEYCmAQABasACSBZgA8AATKKeJADAAEy7AAA9HMACSCyCwAJIJMAjCRpuAwADJsACSC0FhMACSC3AIwugYAOsF2rAAkgwYAPAAE6JwABwVmrAAkg3YAPAAEyiiBEAAD0cwAJISILAAkhAwCMJGm4DAAMmwAJISQWEwAJIScAjC6BgA6wXJ4ZcasACSFFgA8AATKKEOQAAPRzAAkhsgsACSGTAIwkabgMAAybAAkhtBYTAAkhtwCMLoGADrBcnhfgcwAJIfWrAAkh1YAPAAEyihEuApgEAAWrAAkh/YAPAAEyiniQAwABMuwAAPRzAAkiVgsACSI3AIwkabgMAAybAAkiWBYTAAkiWwCMLoGADrBcnqKocwAJIpGrAAkieYAPAAEyihDCApgEAAWrAAkimYAPAAEyiniAAwABMuwAAPRzAAki9gsACSLXAIwkabgMAAybAAki+BYTAAki+wCMLoGADrBcnqKscwAJIz2rAAkjGYAPAAEyihE6ApgEAAWrAAkjRYAPAAEyihfQAwABMuwAAPYzAAkjkwCMLoBzAAkjtgcACSOjAIwhSbgIAAmrAAkjuYAPAAEyihDkcwAJJA2rAAkj+YAPAAEyiiBGApgEAAWrAAkkFYAPAAEyiniQAwABMuwAAPRzAAkkbgsACSRPAIwkabgMAAybAAkkcBYTAAkkcwCMLoGADrBdqwAJJH2ADwABOicAAcFZqwAJJJmADwABMoogRAAA9HMACSTeCwAJJL8AjCRpuAwADJsACSTgFhMACSTjAIwugYAOsFyeF+GrAAklAYAPAAEyihEgAAD0cwAJJV4LAAklPwCMJGm4DAAMmwAJJWAWEwAJJWMAjC6BgA6wXJ6iqHMACSWZqwAJJYGADwABMooQwgKYBAAFqwAJJaGADwABMop4gAMAATLsAAD0cwAJJnYLAAkmVwCMJGm4DAAMmwAJJngWEwAJJnsAjC6BgA6wXJ6irHMACSa9qwAJJpmADwABMooROgKYBAAFqwAJJsWADwABMooX0AMAATLsAAD2MwAJJ4sAjC6AcwAJJ64HAAknmwCMIUm4CAAJqwAJJ7GADwABMooRLHMACSfpqwAJJ9WADwABMoogRgKYBAAFqwAJJ/GADwABMop4kAMAATLsAAD0cwAJKEoLAAkoKwCMJGm4DAAMmwAJKEwWEwAJKE8AjC6BgA6wXasACShZgA8AATonAAHBWasACSh1gA8AATKKIEQAAPRzAAkougsACSibAIwkabgMAAybAAkovBYTAAkovwCMLoGADrBcnhlxqwAJKN2ADwABMop9hAAA9HMACSk6CwAJKRsAjCRpuAwADJsACSk8FhMACSk/AIwugYAOsFyeF+BzAAkpfasACSldgA8AATKKES4CmAQABasACSmFgA8AATKKeJADAAEy7AAA9HMACSneCwAJKb8AjCRpuAwADJsACSngFhMACSnjAIwugYAOsFyeoqhzAAkqGasACSoBgA8AATKKEMICmAQABasACSohgA8AATKKeIADAAEy7AAA9HMACSp+CwAJKl8AjCRpuAwADJsACSqAFhMACSqDAIwugYAOsFyeoqxzAAkqxasACSqhgA8AATKKEToCmAQABasACSrNgA8AATKKF9ADAAEy7AAA9jMACSsbAIwugHMACSs+BwAJKysAjCFJuAgACasACStBgA8AATKKfYRzAAkrhasACStxgA8AATKKIEYCmAQABasACSuNgA8AATKKeJADAAEy7AAA9HMACSvmCwAJK8cAjCRpuAwADJsACSvoFhMACSvrAIwugYAOsF2rAAkr9YAPAAE6JwABwVmrAAksEYAPAAEyiiBEAAD0cwAJLFYLAAksNwCMJGm4DAAMmwAJLFgWEwAJLFsAjC6BgA6wXJ4ZcasACSx5gA8AATKKEPwAAPRzAAks2gsACSy7AIwkabgMAAybAAks3BYTAAks3wCMLoGADrBcnhfgcwAJLR2rAAks/YAPAAEyihEuApgEAAWrAAktJYAPAAEyiniQAwABMuwAAPRzAAktfgsACS1fAIwkabgMAAybAAktgBYTAAktgwCMLoGADrBcnqKocwAJLbmrAAktoYAPAAEyihDCApgEAAWrAAktwYAPAAEyiniAAwABMuwAAPRzAAkuHgsACS3/AIwkabgMAAybAAkuIBYTAAkuIwCMLoGADrBcnqKscwAJLmWrAAkuQYAPAAEyihE6ApgEAAWrAAkubYAPAAEyihfQAwABMuwAAPYzAAkuuwCMLoBzAAku3gcACS7LAIwhSbgIAAmrAAku4YAPAAEyihD8cwAJLymrAAkvFYAPAAEyiiBGApgEAAWrAAkvMYAPAAEyiniQAwABMuwAAPRzAAkvigsACS9rAIwkabgMAAybAAkvjBYTAAkvjwCMLoGADrBdqwAJL5mADwABOicAAcFZqwAJL7WADwABMoogRAAA9HMACS/6CwAJL9sAjCRpuAwADJsACS/8FhMACS//AIwugYAOsFyeF+BzAAkwPasACTAdgA8AATKKES4CmAQABasACTBFgA8AATKKeJADAAEy7AAA9HMACTCeCwAJMH8AjCRpuAwADJsACTCgFhMACTCjAIwugYAOsFyeoqhzAAkw2asACTDBgA8AATKKEMICmAQABasACTDhgA8AATKKeIADAAEy7AAA9HMACTE+CwAJMR8AjCRpuAwADJsACTFAFhMACTFDAIwugYAOsFyeoqxzAAkxhasACTFhgA8AATKKEToCmAQABasACTGNgA8AATKKF9ADAAEy7AAA9jMACTHbAIwugHMACTH+BwAJMesAjCFJuAgACasACTIBgA8AATKKIERzAAkyLasACTIZgA8AATKKIEYCmAQABasACTI1gA8AATKKeJADAAEy7AAA9HMACTKOCwAJMm8AjCRpuAwADJsACTKQFhMACTKTAIwugYAOsF2rAAkynYAPAAE6JwABwVmrAAkyuYAPAAEyiiBEAAD0cwAJMv4LAAky3wCMJGm4DAAMmwAJMwAWEwAJMwMAjC6BgA6wXJ4X4asACTMhgA8AATKKESwAAPRzAAkzcgsACTNTAIwkabgMAAybAAkzdBYTAAkzdwCMLoGADrBcnqKocwAJM62rAAkzlYAPAAEyihDCApgEAAWrAAkztYAPAAEyiniAAwABMuwAAPRzAAk0EgsACTPzAIwkabgMAAybAAk0FBYTAAk0FwCMLoGADrBcnqKscwAJNFmrAAk0NYAPAAEyihE6ApgEAAWrAAk0YYAPAAEyihfQAwABMuwAAPYzAAk0rwCMLoBzAAk00gcACTS/AIwhSbgIAAmrAAk01YAPAAEyihDAcwAJNQmrAAk08YAPAAEyihDCApgEAAWrAAk1EYAPAAEyiniQAwABMuwAAPRzAAk1agsACTVLAIwkabgMAAybAAk1bBYTAAk1bwCMLoGADrBdqwAJNXmADwABOicAAcFZqwAJNZWADwABMooQwAAA9HMACTXeCwAJNb8AjCRpuAwADJsACTXgFhMACTXjAIwugYAOsFyeoqmrAAk2AYAPAAEyihDAAAD0cwAJNkoLAAk2KwCMJGm4DAAMmwAJNkwWEwAJNk8AjC6BgA6wXJ6irHMACTaRqwAJNm2ADwABMooROgKYBAAFqwAJNpmADwABMooX0AMAATLsAAD2MwAJNucAjC6AcwAJNwoHAAk29wCMIUm4CAAJqwAJNw2ADwABMooROHMACTdZqwAJNzWADwABMooROgKYBAAFqwAJN2GADwABMop4kAMAATLsAAD0cwAJN7oLAAk3mwCMJGm4DAAMmwAJN7wWEwAJN78AjC6BgA6wXasACTfJgA8AATonAAHBWasACTflgA8AATKKETgAAPRzAAk4OgsACTgbAIwkabgMAAybAAk4PBYTAAk4PwCMLoGADrBcnqKpqwAJOF2ADwABMooROAAA9jMACTrLAIwugHMACTruBwAJOtsAjCFJuAgACasACTrxgA8AATKKEnBzAAk7MasACTsVgA8AATKKe6YCmAQABasACTs5gA8AATKKeJADAAEy7AAA9HMACTuSDwAJO3MAjClxuAwADJsACTuUF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AFwABsAAUEiA5q8WryqvOwACqVAAAAABA685rzsAAAAAAAAAYAPAAFBNAAAAIzo8ACM6ZAAjOyIAIzwSACM8XAAjPJwAIzzEACM86gAjPRsAIz1DAAAACQLAAFBNgOavka+XscADqVEAAAFgA8AATe8AAAQEwABQT4Dmr+iv8RipUgBgA8AATKIBkwTAAFBQgOawYbBrGKlTAGADwABMogGTBMAAUFGA5rDLsNMYqVQAYAPAAEyiAZMEwABQUoDmsbOxvhipVQBgA8AATKIBkwEFwABQVAAAAAAEAAADAAAAAAAAAAAAYAPAAFBNAT8BCQEAwABOBQAAAAAAAAAjPhQAAAAAAsAAUFWA5rWytcHAAGR4B6lWAAABYAPAAE3vAABzBMAAUFeA5rXetfUGqVcAYAPAAE6JAWq17WADwABOicAAcFkEwABQWIDmtga2LAapWABgA8AATokBarYcYAPAAE6JwABwXATAAFBZgOa2PbZlBqlaAGADwABOiQFqtlRgA8AATonAAHBfBMAAUFqA5rZ2tp4GqVwAYAPAAE6JAWq2jWADwABOicAAcGIEwABQW4Dmtq+20wapXgBgA8AATokBarbEYAPAAE6JwABwZQTAAFBcgOa25Lb1BqlgAGADwABOiQFqtvBgA8AATonAAHBoBMAAUF2A5rcGtxsGqWIAYAPAAE6JAWq3FGADwABOicAAcGsEwABQXoDmtyy3UQapZABgA8AATokBardCYAPAAE6JwABwbgTAAFBfgOa3YreGBqlmAGADwABOiQFqt3dgA8AATonAAHBxBMAAUGCA5reXt7YGqWgAYAPAAE6JAWq3qmADwABOicAAcHQEwABQYYDmt8e38QapaQBgA8AATokBarffYAPAAE6JwABwdwTAAFBigOa4ArgsBqlrAGADwABOiQFquBpgA8AATonAAHB6BMAAUGOA5rg9uGMGqW0AYAPAAE6JAWq4U2ADwABOicAAcH0EwABQZIDmuHS4ngapbwBgA8AATokBariMYAPAAE6JwABwgATAAFBlgOa4r7jPBqlxAGADwABOiQFquMJgA8AATonAAHCDBMAAUGaA5rjguQQGqXMAYAPAAE6JAWq49WADwABOicAAcIYEwABQZ4DmuRW5NwapdQBgA8AATokBarkpYAPAAE6JwABwiQTAAFBogOa5SLlbBql3AGADwABOiQFquVVgA8AATonAAHCMBMAAUGmA5rlsuX8GqXkAYAPAAE6JAWq5eWADwABOicAAcI8EwABQaoDmuZC5pwapewBgA8AATokBarmfYAPAAE6JwABwkgTAAFBrgOa5uLnRBql9AGADwABOiQFquchgA8AATonAAHCVBMAAUGyA5rniufUGqX4AYAPAAE6JAWq572ADwABOicAAcJgEwABQbYDmuga6GQapfwBgA8AATokBaroTYAPAAE6JwABwmwTAAFBugOa6KrpEBqmAAGADwABOiQFqujpgA8AATonAAHCeBMAAUG+A5rpVuoAGqYIAYAPAAE6JAWq6bWADwABOicAAcKEEwABQcIDmupG6tAaphABgA8AATokBarqlYAPAAE6JwABwpATAAFBxgOa6xbrfBqmGAGADwABOiQFqutVgA8AATonAAHCnBMAAUHKA5rrwux8GqYgAYAPAAE6JAWq7CmADwABOicAAcKoEwABQc4DmuzC7VAapigBgA8AATokBartFYAPAAE6JwABwrQTAAFB0gOa7ZbuABqmMAGADwABOiQFqu3ZgA8AATonAAHCwBMAAUHWA5ruRu7MGqY0AYAPAAE6JAWq7pWADwABOicAAcLMEwABQdoDmu8S72wapjwBgA8AATokBarvTYAPAAE6JwABwtgTAAFB3gOa77LwaBqmQAGADwABOiQFqvAZgA8AATonAAHC5BMAAUHiA5rwrvFsGqZIAYAPAAE6JAWq8RmADwABOicAAcLwEwABQeYDmvGy8gQaplABgA8AATokBarx6YAPAAE6JwABwvwTAAFB6gOa8kryrBqmVAGADwABOiQFqvKJgA8AATonAAHDCBMAAUHuA5ry8vNwGqZcAYAPAAE6JAWq8z2ADwABOicAAcMUEwABQfIDmvO29BAapSQBgA8AATokBarz8YAPAAE6JwABwyATAAFB9gOa9Fb0kBqmZAGADwABOiQFqvSBgA8AATonAAHDLBMAAUH6A5r01vU4GqZsAYAPAAE6JAWq9RWADwABOicAAcM4EwABQf4DmvV+9iwapnQBgA8AATokBar14YAPAAE6JwABw0QTAAFCAgOa9nL21BqmfAGADwABOiQFqvaxgA8AATonAAHDUBMAAUIGA5r3GveQGqaEAYAPAAE6JAWq92GADwABOicAAcNcEwABQgoDmvfW+CAapowBgA8AATokBar4CYAPAAE6JwABw2gTAAFCDgOa+Gb4qBqmlAGADwABOiQFqviVgA8AATonAAHDdBMAAUISA5r47vlQGqacAYAPAAE6JAWq+S2ADwABOicAAcOAEwABQhYDmvmW+jwapqQBgA8AATokBar59YAPAAE6JwABw4wTAAFCGgOa+y77gBqmrAWq+lWADwABKi8AAcOlgA8AATokBar7UYAPAAE6JwABwWQTAAFCHgOa/Ir9GBqmtAWq+5WADwABKi8AAcPtgA8AATokBar8zYAPAAE6JwABwXATAAFCIgOa/ib+vBqmvAWq/S2ADwABKi8AAcQ1gA8AATokBar+bYAPAAE6JwABwXwTAAFCJgOa/8sAAQBgGqbEBar+0YAPAAEqLwABxH2ADwABOiQFqwABABGADwABOicAAcGIEwABQioDmwABAWcAAQHsGqbMBasAAQB1gA8AASovAAHExYAPAAE6JAWrAAEBpYAPAAE6JwABwZQTAAFCLgObAAECzwABAwgaptQFqwABAgGADwABKi8AAcUNgA8AATokBasAAQLlgA8AATonAAHBoBMAAUIyA5sAAQPzAAEEPBqm3AWrAAEDHYAPAAEqLwABxVWADwABOiQFqwABBBGADwABOicAAcGsEwABQjYDmwABBUcAAQXQGqbkBasAAQRRgA8AASovAAHFnYAPAAE6JAWrAAEFhYAPAAE6JwABwbgTAAFCOgObAAEG1wABB1wapuwFqwABBeWADwABKi8AAcXlgA8AATokBasAAQcVgA8AATonAAHBxBMAAUI+A5sAAQhbAAEIzBqm9AWrAAEHcYAPAAEqLwABxi2ADwABOiQFqwABCI2ADwABOicAAcHQEwABQkIDmwABCd8AAQp8Gqb8BasAAQjhgA8AASovAAHGdYAPAAE6JAWrAAEKKYAPAAE6JwABwdwTAAFCRgObAAELjwABDCwapwQFqwABCpGADwABKi8AAca9gA8AATokBasAAQvZgA8AATonAAHB6BMAAUJKA5sAAQ03AAENxBqnDAWrAAEMQYAPAAEqLwABxwWADwABOiQFqwABDXmADwABOicAAcH0EwABQk4DmwABDtcAAQ90GqcUBasAAQ3ZgA8AASovAAHHTYAPAAE6JAWrAAEPIYAPAAE6JwABwgATAAFCUgObAAEQcwABEOgapxwFqwABD4mADwABKi8AAceVgA8AATokBasAARCpgA8AATonAAHCDBMAAUJWA5sAARHvAAESdBqnJAWrAAEQ/YAPAAEqLwABx92ADwABOiQFqwABEi2ADwABOicAAcIYEwABQloDmwABE3cAARP0GqcsBasAARKJgA8AASovAAHIJYAPAAE6JAWrAAETsYAPAAE6JwABwiQTAAFCXgObAAEU2wABFRwapzQFqwABFAmADwABKi8AAchtgA8AATokBasAART1gA8AATonAAHCMBMAAUJiA5sAARYDAAEWRBqnPAWrAAEVMYAPAAEqLwAByLWADwABOiQFqwABFh2ADwABOicAAcI8EwABQmYDmwABFzMAAReEGqdEBasAARZZgA8AASovAAHI/YAPAAE6JAWrAAEXVYAPAAE6JwABwkgTAAFCagObAAEYdwABGNAap0wFqwABF5mADwABKi8AAclFgA8AATokBasAARidgA8AATonAAHCVBMAAUJuA5sAARm3AAEZ+BqnVAWrAAEY5YAPAAEqLwAByY2ADwABOiQFqwABGdGADwABOicAAcJgEwABQnIDmwABGt8AARsgGqdcBasAARoNgA8AASovAAHJ1YAPAAE6JAWrAAEa+YAPAAE6JwABwmwTAAFCdgObAAEcEwABHHAap2QFqwABGzWADwABKi8AAcodgA8AATokBasAARw9gA8AATonAAHCeBMAAUJ6A5sAAR2DAAEeJBqnbAWrAAEchYAPAAEqLwABymWADwABOiQFqwABHdGADwABOicAAcKEEwABQn4DmwABHycAAR+oGqd0BasAAR45gA8AASovAAHKrYAPAAE6JAWrAAEfZYAPAAE6JwABwpATAAFCggObAAEgmwABIPgap3wFqwABH72ADwABKi8AAcr1gA8AATokBasAASDFgA8AATonAAHCnBMAAUKGA5sAASITAAEixBqnhAWrAAEhDYAPAAEqLwAByz2ADwABOiQFqwABImmADwABOicAAcKoEwABQooDmwABI8sAASRQGqeMBasAASLZgA8AASovAAHLhYAPAAE6JAWrAAEkCYAPAAE6JwABwrQTAAFCjgObAAElRwABJagap5QFqwABJGWADwABKi8AAcvNgA8AATokBasAASVxgA8AATonAAHCwBMAAUKSA5sAASarAAEnKBqnnAWrAAElvYAPAAEqLwABzBWADwABOiQFqwABJuWADwABOicAAcLMEwABQpYDmwABKBcAAShoGqekBasAASc9gA8AASovAAHMXYAPAAE6JAWrAAEoOYAPAAE6JwABwtgTAAFCmgObAAEpgwABKjAap6wFqwABKH2ADwABKi8AAcylgA8AATokBasAASnVgA8AATonAAHC5BMAAUKeA5sAAStPAAEsBBqntAWrAAEqRYAPAAEqLwABzO2ADwABOiQFqwABK6WADwABOicAAcLwEwABQqIDmwABLO8AAS04Gqe8BasAASwZgA8AASovAAHNNYAPAAE6JAWrAAEtDYAPAAE6JwABwvwTAAFCpgObAAEuKwABLoQap8QFqwABLU2ADwABKi8AAc19gA8AATokBasAAS5RgA8AATonAAHDCBMAAUKqA5sAAS+DAAEv+BqnzAWrAAEumYAPAAEqLwABzcWADwABOiQFqwABL7mADwABOicAAcMUEwABQq4DmwABMOcAATE4GqfUBasAATANgA8AASovAAHODYAPAAE6JAWrAAExCYAPAAE6JwABwyATAAFCsgObAAEyFwABMkgap9wFqwABMU2ADwABKi8AAc5VgA8AATokBasAATIpgA8AATonAAHDLBMAAUK2A5sAATM7AAEzlBqn5AWrAAEyXYAPAAEqLwABzp2ADwABOiQFqwABM2GADwABOicAAcM4EwABQroDmwABNKsAATVQGqfsBasAATOpgA8AASovAAHO5YAPAAE6JAWrAAE0+YAPAAE6JwABw0QTAAFCvgObAAE2QwABNpwap/QFqwABNWWADwABKi8AAc8tgA8AATokBasAATZpgA8AATonAAHDUBMAAULCA5sAATeXAAE4BBqn/AWrAAE2sYAPAAEqLwABz3WADwABOiQFqwABN8mADwABOicAAcNcEwABQsYDmwABOOsAATksGqgEBasAATgZgA8AASovAAHPvYAPAAE6JAWrAAE5BYAPAAE6JwABw2gTAAFCygObAAE6DwABOkgaqAwFqwABOUGADwABKi8AAdAFgA8AATokBasAATolgA8AATonAAHDdBMAAULOA5sAATs7AAE7lBqoFAWrAAE6XYAPAAEqLwAB0E2ADwABOiQFqwABO2GADwABOicAAcOAEwABQtIDmwABPKcAAT1EGqgcBasAATupgA8AASovAAHQlYAPAAE6JAWrAAE88YAPAAE6JwABw4wTAAFC1gObAAE+GwABPnQaqCQBgA8AATokBasAAT5VgA8AATonAAHQ0BMAAULaA5sAAT67AAE/MBqoLAGADwABOiQFqwABPwGADwABOicAAdDcEwABQt4DmwABQCMAAUB0Gqg0BasAAT9JgA8AASovAAHQ9YAPAAE6JAWrAAFARYAPAAE6JwAB0NATAAFC4gObAAFBbwABQdwaqDwFqwABQImADwABKi8AAdE9gA8AATokBasAAUGhgA8AATonAAHQ3BMAAULmA5sAAUInAAFFYBqoRAF0DwABNRgFgA8AATokBasAAUJpdA8AATUYBYAPAAE6JwAB0XgTAAFC6gObAAFGWwABRtgaqEgFqwABRXmADwABKi8AAdI1dA8AATUYBYAPAAE6JAWrAAFGoXQPAAE1GAWADwABOicAAdF4EwABQu4DmwABRyMAAUs0GqhQAXQPAAE1GAWADwABOiQFqwABR2F0DwABNRgFgA8AATonAAHScBMAAULyA5sAAUwrAAFMoBqoVAWrAAFLTYAPAAEqLwAB0z10DwABNRgFgA8AATokBasAAUxtdA8AATUYBYAPAAE6JwAB0nATAAFC9gObAAFM6wABUEQaqFwBdA8AATUYBYAPAAE6JAWrAAFNMXQPAAE1GAWADwABOicAAdN4EwABQvoDmwABUUMAAVHIGqhgBasAAVBdgA8AASovAAHUNXQPAAE1GAWADwABOiQFqwABUY10DwABNRgFgA8AATonAAHTeBMAAUL+A5sAAVITAAFY6BqoaAF0DwABNRgFgA8AATokBasAAVJVdA8AATUYBYAPAAE6JwAB1HATAAFDAgObAAFZ4wABWmAaqGwFqwABWQGADwABKi8AAdXNdA8AATUYBYAPAAE6JAWrAAFaKXQPAAE1GAWADwABOicAAdRwEwABQwYDmwABXD8AAVxMYqXgAYAPAAErqASsEwABQwoDmwABXlMAAV5sYpZ4AYAPAAErqASsEwABQw4DmwABYM8AAWEIYqh0AYAPAAErqASsEwABQxIDmwABYqcAAWK0Yj6wAYAPAAE6JASsEwABQxYDmwABZEcAAWRUYi5IAYAPAAEyiASsEwABQxoDmwABZ/MAAWgcYmaAAYAPAAFDpASsEwABQ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VhiGTQBgA8AATokBKwTAAFD/gObAAHzQwAB81RgiAGADwABOiQErBMAAUQCA5sAAfRrAAH0hGKWeAGADwABK6gErBMAAUQGA5sAAfafAAH2tGKo4AGADwABMogErBMAAUQKA5sAAfezAAH3yGKo5AGADwABOiQErBMAAUQOA5sAAfkPAAH5HGJFoAGADwABOiQErBMAAUQSA5sAAfprAAH6gGIw6AGADwABK2AErBMAAUQWA5sAAfybAAH8uGKo6AGADwABK2AErAAMGwABRB4DmwACAF8AAgB/AAIBcBAEAAAAAAQPAAIAlwACAXAAAAAICAsAAgC0AAACGTWADwABOiQDAAIA6AAAAImADwABOiQAAYAPAAFD8AUrAAIBEAR/AAIBIwABSfgIAAoDAAIBQwCNdsIHAAIBWwCNdwAAGwABRCIDmwACAwsAAgMrAAIEoBAGqOwAAAAEDwACA48AAgSgAAAABAQHAAIDrAAAAImADwABOiQAAYAPAAFD8AT4BSsAAgPgBH8AAgQPAAFJ/AQABgMAAgR7AI14mAAbAAFEKgObAAIHcwACB48AAge0AAoDvAAAAAQPAAIHrwACB7QAAAAAAAABgA8AATokAAAAjXYcAI138ACNeWwAjXo0AAAADAsAAUQuA5sAAiSDAAIkvwACSeQeqPAAAAWADwABN7wABXQOB1gFgA6wXAAEFwABRGgAAAAAEAAADAAAAAAAAAAAAYAPAAFELAT8BCQEAwABOBQAAAAAMBsAAUQ2A5sAAie/AAIn3wACKBAECqh4AAAABA8AAigTAAIoEAAAAAAAAAGADwABMogAGwABRDoDmwACKUMAAilvAAIphAQKH+AAAAAEDwACKYcAAimEAAAAAAAAAYAPAAE6JAAbAAFEPgObAAIriwACK6sAAiu0BAoDrAAAAAQPAAIrtwACK7QAAAAAAAABgA8AATwoABsAAURCA5sAAjKPAAIyrwACMtwECqj0AAAABA8AAjLfAAIy3AAAAAAAAAGADwABPCgAGwABREYDmwACNFsAAjSbAAI0tAQKZngAAAAEDwACNLcAAjS0AAAAAAAAAYAPAAFBVAAbAAFESgObAAI14wACNicAAjZABAqo+AAAAAQPAAI2QwACNkAAAAAAAAABdA8AATUYBYAPAAFD8AAbAAFETgObAAI3ewACN58AAjfsBAqofAAAAAQPAAI37wACN+wAAAAAAAABgA8AAStgABsAAURSA5sAAjwnAAI8dwACPKAECl5IAAAABA8AAjyjAAI8oAAAAAAAAAGADugMABsAAURWA5sAAkBrAAJAqwACQMQECqj8AAAABA8AAkDHAAJAxAAAAAAAAAGADwABQ3wAGwABRFoDmwACQksAAkJ3AAJCsAQKqQAAAAAEDwACQrMAAkKwAAAAAAAAAYAPAAE6JAAbAAFEXgObAAJEmwACRPcAAkUsBAqpBAAAAAQPAAJFLwACRSwAAAAAAAABgA8AAUZAABsAAURiA5sAAkl7AAJJvwACSdwECiHsAAAABA8AAknfAAJJ3AAAAAAAAAGADwABRGwAAACNe+QAjXysAI19dACNfjwAjX8EAI1/zACNgLAAjYF4AI2COACNgwAAjYPIAI2EkACNhVgAAAAwCwABRG4DmwACZocAAmbDAAKezB6pCAAABYAPAAE3vAAFgA7eGBgTAAFEdgObAAJrqwACa9xiqHgBgA8AATKIBKwTAAFEegObAAJyvwACcuRiZwgBgA8AATKIBKwTAAFEfgObAAJ4IwACeFBiqQwBgA8AATokBKwTAAFEggObAAJ7AwACe1BiqHwBgA8AAStgBKwTAAFEhgObAAKBewACgZhiqRABgA8AAS3QBKwTAAFEigObAAKFdwAChaRiqRQBgA8AAStgBKwEFwABRKwAAAAAEAAADAAAAAAAAAAAAYAPAAFEbAT8BCQEAwABOBQAAAAAFBsAAUSSA5sAAoiTAAKI0wACiOwECmZ4AAAABA8AAojvAAKI7AAAAAAAAAGADwABQVQAGwABRJYDmwACijMAAop3AAKKkAQKqPgAAAAEDwACipMAAoqQAAAAAAAAAXQPAAE1GAWADwABQ/AAGwABRKIDmwACkasAApHHAAKSyAAKZ1gAAAAEDwACkecAApLIAAAACAQHAAKR+AAAAjMJgA8AATwoAAcAApI0AAACR2mADwABMogFqwACkoGADwABMoouKXQOBIgFbAAbAAFEpgObAAKbcwACm68AApxIAAqpGAAAAAQPAAKb3wACnEgAAAAEAAAHAAKb+AAAAqkdgA8AAStgBasAApwxgA8AAStiD+10DgSIBYAO7kwAGwABRJoDmwACnjMAAp6PAAKexAQKqQQAAAAEDwACnscAAp7EA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AMAA0XwAAACLkmADwABMogDAANGJAAAAkWhgA8AATokAAF0DgSIBYAPAAFFWAAbAAFFPgObAANIpwADSQ8AA0lQAAqpbAAAAAQPAANJLwADSVAAAAAEBAcAA0lAAAACNdWADwABPCgAAXQOBIgFgA8AAUVYABsAAUVCA5sAA00DAANNawADTggACqlwAAAABA8AA017AANOCAAAAAwMDwADTZgAAAI+sYAPAAE6JAMAA03AAAACLkmADwABMogDAANN9AAAAkWhgA8AATokAAF0DgSIBYAPAAFFWAAbAAFFRgObAANQcwADUNsAA1EYAAqpdAAAAAQPAANQ9wADURgAAAAEBAcAA1EIAAACNdWADwABPCgAAXQOBIgFgA8AAUVYABsAAUTuA5sAA2LTAANi4wADY+gICql4AAAABA8AA2MTAANj6AAAAAQEBwADY0gAAAFBhAwNgA8AATwpgA8AATolgA8AAToldA4EiAWADwABK2AAAXAAGwABRUoDmwADZSsAA2U/AANmXAAKqXwAAAAEDwADZXcAA2ZcAAAADAwPAANliAAAAjXVgA8AATwoAwADZbgAAAKpgYAPAAE6JAMAA2YsAAACqYWADwABRhwAAXAAGwABRPIDmwADc1sAA3NrAANz2AgKqYgAAAAEDwADc48AA3PYAAAABAQHAANzrAAAAUGEDAWADwABPCmADwABOiQAAXAAGwABRU4DmwADlLsAA5TzAAOZqAAGqYwAAAAEDwADlVMAA5moAAAACAQHAAOVZAAAAjXVgA8AATwoAAcAA5XkAAACLxF0DwABNeAJgA8AATolgA8AATokBagBgAcAATawCYAPAAE6JAT4DTsAA5ZvAAOWlAACUA2ADwABWNwEawADltcAAVjxJwADlwhzAAOXQgsAA5cbAI21SgIwBAAErAMAATfw+AUrAAOXhAR7AAOX0wABUPgIAAoDAAOYOwCNtEYHAAOYTwCNtIgA/SsAA5isBHMAA5jyCwADmMsAjbVKqYwIAAoDAAOZVwCNtEYHAAOZawCNtIgDAAFZDBsAAUT2A5sAA6W7AAOlywADpzgICqmQAAAABA8AA6YPAAOnOAAAAAQEBwADpmAAAAFBhAwRgA8AATolgA8AATKJgA8AATolgA8AAToldA4EiAWADwABK2AAAXAAGwABRVIDmwADqHcAA6iLA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qkEAAAABA8ABEqfAARKnAAAAAAAAAGADwABRkAAAACNyfwAjcrEAI3LjACNzFQAjc1QAI3OGACNzuAAjc/EAI3RzACN0pQAjdNoAI3UTACN1QwAjdXUAAAANAsAAUXqA5sABFH3AARSQwAEaFguqbwFqwAEUfmADlA3AAG1jAAFgA8AATe8AAAYEwABRfIDmwAEUkMABFJAJgd0AYAPAAEyiAATAAFF+gObAARSQwAEUkAmG/cAAUCMAYAPAAE6JAATAAFF/gObAARSQwAEUkAaBAQBdA8AATUYBYAPAAFF6AWoAXQPAAE1GAWADwABResAAdjoEwABRgIDmwAEV0MABFdAGqnMAYAPAAFF6AWoAYAPAAFF6wAB1+ATAAFGBgObAARfYwAEX2AaqdABgA8AAUXoBagBgA8AAUXrAAHYPBMAAUYKA5sABGgrAARoKBqp1AGADwABRegFqAGADwABResAAdiYBBcAAUYaA5sABFJDAARSQwAEaFgEAAAPAARSQwAEaFgAAAAICAsABFJAAAASB3WADwABMogDAARSQAAAEhv1gA8AATokAAGADwABRegE/AwgAwABRfIAAwCN25QgAwABRfoEAwCN29QkAAMAATgUAAAAAAQbAAFGEgObAARSQwAEUkMABGhYAAIDvAAAAAQPAARSQwAEaFgAAAAAAAABgA8AATokBSgABDwAuwABRfgAAI3czACN3bwAAAAECwABRh4DmwAEaGcABGijAARo/B6p2AAABYAPAAE3vAAAAAQXAAFGJAAAAAAQAAAMAAAAAAAAAAABgA8AAUYcBPwEJAQDAAE4FAAAAAAAAACN3ygAAAAACwABRioDmwAEafsABGo3AARtNB6p3AAABYAPAAFGHAAAAAAEGwABRjIDmwAEaysABGtLAARtLBAEAAAAAAQPAARrswAEbSwAAAAICAsABGvQAAACqeGADwABOiQDAARsFAAAAk1dgA8AATokAAGADwABRigFKwAEbGAEfwAEbHMAAVS8CAAKAwAEbOMAjeCCBwAEbQsAjeDAAAAAjd/cAI3htAAAAAQLAAFGNgObAARwewAEcLcABHPAHqnkAAAFgA8AAUYcAAAAAAQbAAFGPgObAARxrwAEcc8ABHO4EAQAAAAABA8ABHI7AARzuAAAAAgICwAEclgAAAKp4YAPAAE6JAMABHKcAAACTV2ADwABOiQAAYAPAAFGNAUrAARy6AR/AARy+wABVOwIAAoDAARzbwCN4x4HAARzlwCN41wAAACN4ngAjeRQAAAABAsAAUZCA5sABHW7AAR19wAEd4geqegAAAWADwABN7wAAAAEFwABRlgAAAAAEAAADAAAAAAAAAAAAYAPAAFGQAT8BCQEAwABOBQAAAAADBsAAUZKA5sABHZTAAR2owAEdtQECkrEAAAABA8ABHbXAAR21AAAAAAAAAGADuucABsAAUZOA5sABHbnAAR3BwAEdywECkq8AAAABA8ABHcvAAR3LAAAAAAAAAGADwABMogAGwABRlIDmwAEdz8ABHdfAAR3gAQKSUAAAAAEDwAEd4MABHeAAAAAAAAAAYAPAAEyiAAAAI3lvACN5nwAjedEAI3oDAAAAAwLAAFGXgObAAR4GwAEeFcABHxgHqnsAAAFgA8AATe8AAAABBcAAUZ0AAAAABAAAAwAAAAAAAAAAAGADwABRlwE/AQkBAMAATgUAAAAAAwbAAFGZgObAAR5mwAEebsABHngBApnCAAAAAQPAAR54wAEeeAAAAAAAAABgA8AATKIABsAAUZqA5sABHrjAAR7DwAEeyQECh/gAAAABA8ABHsnAAR7JAAAAAAAAAGADwABOiQAGwABRm4DmwAEfBsABHw7AAR8WAQKMwgAAAAEDwAEfFsABHxYAAAAAAAAAYAPAAE8KAAAAI3pmACN6mAAjesoAI3r8AAAAAwLAAFGegObAASA6wAEgScABII0HqnwAAAFgA8AATe8AAAABBcAAUaMAAAAABAAAAwAAAAAAAAAAAGADwABRngE/AQkBAMAATgUAAAAAAgbAAFGggObAASBcwAEgZ8ABIG0BApGeAAAAAQPAASBtwAEgbQAAAAAAAABgA7uTAAbAAFGhgObAASBxwAEgf8ABIIsBAqp9AAAAAQPAASCLwAEgiwAAAAAAAABdA8AATUYBYAPAAEyiAAAAI3tfACN7jwAje8gAAAACAsAAUaSA5sABIJDAASCWwAEh0oOqfgAAAWADwABN7wABYAO0OQIEwABRpoDmwAEgzMABINMJgSIAYAPAAE6JAATAAFGngObAASDhwAEg5AmA6wBgA8AATwoAAQXAAFGrgObAASDpwAEg78ABIRYBAAADwAEg/MABIRYAAAACAQHAASECAAAEgSJgA8AATokAAcABIREAAASA62ADwABPCgFqAGABwABNrAJgA8AAUaQBPwMIAcAAUaaAAMAjfFkIAcAAUaeBAMAjfGoJAcABIO/AAE4FAAAAAAEGwABRqYDmwAEhG8ABISLAASHQAACA7wAAAAEDwAEhKsABIdAAAAAAAAAAYAPAAE6JAT4DTsABITfAASE5AAA3YAPAAE7TATXAASE/AAABAGADwABO0wEfwAEhP8AATvIAAAAANcABIU8AAAEAXAEcwAEhT4DAASE/wCN8+4HDAQABJ6p/AMAATuc1wAEhaQAAAQBcARzAASFpgMABIT/AI3z7gcMBAAEWwAEhby6BIsAAUaYAwABO54DAASE/wCN8+0nAASF9IRzAASGFFsABIYEugOvAAFGngIwBAAErAMAATzE+AT0cwAEhmIDAASGWwCN86IHDAQABJMABIawCJ6qAFsABIagugOvAAFGnAMAATuc/SsABIbkBHMABIcKAwAEhwMAjfOiA7wAAAADAAE7sAAAjfLMAI33mAAAAAQLAAFGsgObAASHVwAEh28ABIuKDqoEAAAFgA8AATe8AAWADwABRpAIEwABRroDmwAEiF8ABIh4JgSIAYAPAAE6JAATAAFGvgObAASI7wAEiRAmqbQBdA8AATUYBYAPAAFGXAAEFwABRtYDmwAEiScABIk/AASJ+AQAAA8ABImDAASJ+AAAAAgICwAEiZgAABIEiYAPAAE6JAMABInQAAASqbV0DwABNRgFgA8AAUZcAAGADwABRrAE/AwgBwABRroAAwCN+fAgBwABRr4EAwCN+jAkBwAEiT8AATgUAAAAAAgbAAFGxgObAASKDwAEiisABIrUAAIDvAAAAAQPAASKSwAEitQAAAAAAAABgA8AATokBSsABIpgBJMABIrUCJ6qCFsABIq0ugSLAAFGuBsAAUbOA5sABIrrAASLCwAEi4AEAgOsAAAABA8ABIsbAASLgAAAAAAAAAGADwABPCgFKwAEiyQEWwAEi2BbAASLTFsABIskuqm3AAFGvgdXAAE0rjMLAAFGbAAAjftQAI38hACN/ewAAAAICwABRtoDpgP+BBZe9A6qDAAABYAPAAE3vAAAIBMAAUbiA6YEngS8GqoQAYAPAAEyiAWqBLWADwABMooZ0BMAAUbmA6YFLgVIGqoUAYAPAAEyiAWqBUGAD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uwEAARagpy6ql8AAUCPAAFHLAMAATdABiqC6wCOfbBygw4KgusAjn2yBDQEAAZQAwABNyD4KTqDToNYAAKqsYAPAAEyiASMWoNguqpnAAFAjwABRzRyg7oCg6sAjnuWC0QEAAYGg78AjnvkAwABNVRyhAICg/MAjnuWC0QEAARyhC4GhAcAjnvmBDQEAAZYAwABNyADAAE1VAWADwABMok6hG6EeAACqrWADwABMogEjFqEgLqqZwABQI8AAUc0coTaAoTLAI57lgtEBAAEcoUGBoTfAI575gQ0BAAGUAMAATcgAwABNVRyhTIChSMAjnuWC0QEAARyhV4GhTcAjnvmBDQEAAZUAwABNyADAAE1VAWADwABMok6hZ6FqAACqrmADwABMogEjFqFsLqqZwABQI8AAUc0coYKAoX7AI57lgtEBAAEcoY2BoYPAI575gQ0BAAGVAMAATcgAwABNVRyhmIChlMAjnuWC0QEAARyho4GhmcAjnvmBDQEAAZQAwABNyADAAE1VAWADwABMok6hs6G2AACqr2ADwABMogEjFqG4LqqZwABQI8AAUc0coc6AocrAI57lgtEBAAEcodmBoc/AI575gQ0BAAGWAMAATcgAwABNVRyh5ICh4MAjnuWC0QEAAYGh5cAjnvkAwABNVQFgA8AATKI9iaH3wCOe+RyiAYGh98AjnvmBDQEAAZcAwABNyE6iEaIWAACqsGADwABMogEcoiQcohyDohnAI5+/gKEBAAE3gP8AwABMuoNxAQABNxgAwABMvj2PojHAI6GgHKI2h6IxwCOhoICmAQABHKJIHKI9hKI6wCOgKYChAQABaqI/YAPAAEyihn8AwABMuoNxAQABNxAAwABMvgDAAEy7PY+iVcAjoaAcolqHolXAI6GggKYBAAEcomwcomGFol7AI6ChgKEBAAFqomNgA8AATKKGfwDAAEy6g3EBAAE3CADAAEy+AMAATLs9j6J4wCOhoByifYeieMAjoaCApgEAARyihIaigcAjoRmAoQEAAWqihmADwABMooZ/AMAATLoAwABMuz0coqMWopYuqpzAAFAjwABR0IEMAgACgqKkwCOfbIeiscAjoaAAwABNVgbAAFHegOmi7qL4pFIAAKqowABQIwAAAAEDowSkUgAAAAEBAaMJAAAAqrBgA8AATKIAAF0DwABNRgFgA8AA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h46HkAAAg81gA8AASuoBHIeXgIeSwCO7j6YdAAAAAMAASy5Oh7GHtAAAiIJgA8AATtMBNYe6AAABAGADwABO0wEfh7rAAE7yAAAAADWH0QAAAQBcARyH0YKHusAju9yBwwEAARyH3GqH110DwABNRgFbwAB68YLRAQABHIfnFoffgYfdwCO7qKYxwABLRYEGAQABlADAAE3JAMAATVUAwABO5zWH9QAAAQBcARyH9YKHusAju9yBwwEAASeEMQDAAE7nNYgJAAABAFwBHIgJgoe6wCO73IHDAQABIxyIFRaIEYGID8Aju6il08AASz+BWwEAATcJAMAATdEnhjwnAAFgA8AATokAwABO5zWILgAAAQBcARyILoKHusAju9yBwwEAARyIOhaINoGINMAju6il08AASz+A7wAAAADAAEzPAMAATuc1iE4AAAEAXAEciE6Ch7rAI7vcgcMBAAEnhx0AwABO5zWIYQAAAQBcARyIYYKHusAju9yBwwEAARyIbGqIZ10DwABNRgFbwAB7NILRAQABHIh1FohvgYhtwCO7qKXSwABLPoEGAQABlADAAE3JAMAATVUAwABO5zWIgwAAAQBcARyIg4KHusAju9yBwwEAASeHHQDAAE7nNYiWAAABAFwBHIiWgoe6wCO73IHDAQABHIijFoiegYicwCO7qKXRwABLPYDvAAAAAMAATM8AwABO5zWItwAAAQBcARyIt4KHusAju9yBwwEAASMciMQWiL+BiL3AI7uopdTAAEtAgVsBAAE3CQDAAE3RJ6sRJ4cdAWADwABOiQDAAE7nNYjfAAABAFwBHIjfgoe6wCO73IHDAQABHIjsFojngYjlwCO7qKXUwABLQIDvAAAAAMAATM8AwABO5zWJAAAAAQBcARyJAIKHusAju9yBwwEAASMciQ8WiQiBiQbAI7uopdXAAEtBgVsBAAE3CQDAAE3RJ6sSJ4sXAWADwABOiQDAAE7nNYkqAAABAFwBHIkqgoe6wCO73IHDAQABHIk5FokygYkwwCO7qKXVwABLQYDvAAAAAMAATM8AwABO5zWJTQAAAQBcARyJTYKHusAju9yBwwEAASMciVwWiVWBiVPAI7uoirbAAEtCgVsBAAE3CQDAAE3RJ6sSJ4sXAWADwABOiQDAAE7nNYl3AAABAFwBHIl3goe6wCO73IHDAQABHImG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0UqczgEpP0mc4SIcnOqGnOXAI8xbgV4BAAE3ewDAAE3TAByc+oac9cAjzFuBWwEAATd+AMAATdFKnQMBKT9KnRYBKk+dL500AAABqylhAwFgA8AATolgA8AAStgAA51CnxcAAAABAQGdSgAAAID5YAPAAE6JAABgA8AAStgBPglOnVmdXgAAhcBgA8AATKIBHJ1ihp1gwCPNpIXQAQABkwDAAE6XSZ13IhydgIede8Ajzb2BXgEAAZMAwABN0wAcnZCHnYvAI829gVsBAAE3CADAAE3RSp2ZASk/SZ2sIhydtYedsMAjzb2BXgEAATcKAMAATdMAHJ3Fh53AwCPNvYFbAQABNx8AwABN0UqdzgEpP0md4SIcneqHneXAI829gV4BAAE3MADAAE3TAByd+oed9cAjzb2BWwEAATc5AMAATdFKngMBKT9Jnh8cniiHniPAI829gIwBAAE3OgDAAE3GSp4xASk/SZ5LIhyeVIeeT8Ajzb2BXgEAATdBAMAATdMAHJ5kh55fwCPNvYFbAQABN1oAwABN0UqebQEpP0meiSIcnpKHno3AI829gV4BAAE3YQDAAE3TAByeooeencAjzb2BWwEAATd6AMAATdFKnqsBKT9JnsciHJ7Qh57LwCPNvYFeAQABN38AwABN0wAcnuCHntvAI829gVsBAAE3gP8AwABN0Uqe6QEpP0qfBQEqT58enyMAAAGrKmEDAWADwABOiWADwABK2AADnyqfpAAAAAEBAZ8yAAAAgPlgA8AATokAAGADwABK2AE+A06fQZ9GAACFwGADwABMogEcn0qHn0jAI890hdABAAGTAMAATpdJn18iHJ9oFJ9jwCPPjQgAgowBAAE3LwDAAE3SAByfdxSfcsAjz40IAIC7AQABNzoAwABN0EqffwEpP0qfkgEqT5+rn68AAAGrK2EDAWADwABOiWADwABMogADn7egMAAAAAEBAZ+/AAAApdJgA8AATokAAGADwABMogE+Akmfzhyf3xaf2BSf0sAj0BYIAIHIwABOjYC7AQABlgDAAE3QSp/kARyf65SD6wAAAADAAEzFP0qf9QEcoAxqn/xdA8AATUYBW8AAe7+EcAEAARygGhSgFMAj0BYIAIYTAgACk5YAwABOnwDAAE1bT6A3oDsAAAGbnWEDAWADwABOiWADwABMogADoECg0wAAAAEB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PgM9HMAARRAuq3LAAFAjAAAAAMAAUk5JwABFKRzAAEVFFsAARS0uq3HAAFAjwABSSoCMAQABKwDAAE38PgE9F8AARVYuq3HAAFAjH8AARXSKswECYAPAAE6JYAPAAE6JARbAAEWILo1WwABQI8AAUkkAwABSSj9KwABFoAEWwABFpy6rccAAUCPAAFJKBsAAUlCA68AARcfAAEXOwABG9gAAgO8AAAABA8AARdbAAEb2AAAAAAAAAGADwABOiQE+BE7AAEXswABF7wAAiIJgA8AATtMBH8AARfXAAE7yAAAAAD0cwABGDIDAAEYJwCQX0oHDAQABFsAARhIugpHAAFAjwABSSADAAE7nScAARh8iIRzAAEYuFsAARiMuh/nAAFJTgIwBAAErAMAATfwAHMAARksWwABGRBbAAEY5Lof5wABSU4HIwABNnIKMAQABkwDAAE3SPgE9HMAARmQWwABGWC6NVsAAUCPAAFJJgRIBAAE0wABGbAPAAEZswABG0QAAAAICAsAARnQAAACGTWADwABOiQDAAEaBAAAAImADwABOiQAAYAHAAE2sAT4BPTXAAEaSAAABAGADwABO0wGAwABGksAkF9I1wABGlgAAAQBcARzAAEaWg8AARpLAJBjCgcMBAAEnnDkAwABO5zXAAEajAAABAFwBHMAARqODwABGksAkGMKBwwEAAYHAAEapwCQYlwDAAE7nNcAARrAAAAEAXAEcwABGsIPAAEaSwCQYwoHDAQABJ4Z6AMAATuc1wABGvAAAAQBcARzAAEa8g8AARpLAJBjCgcMBAAGCwABGwsAkGKcAwABO54PAAEaSwCQYwgDAAE2XP0rAAEbeARzAAEbogMAARuXAJBfSgO8AAAAAwABO7AbAAFJPgOvAAEb7wABHAMAAU4YAAJISwABQIwAAAAEDwABHBsAAU4YAAAAEBATAAEcOAAAAgPlgA8AATokAwABHGAAAAKojYAPAAE6JAMAARzMAAACqJGADwABOiQDAAEdOAAAAqiVgA8AAStgAAFwBPg1OwABHa8AAR3EAAIHdYAPAAEyiAZNPwABHe8AAR4AAAAGA0mEDAGADwABK2AADwABHhMAAR5sAAAAAAAAAYAPAAErYAUrAAEeKARzAAEeQhMAAR4rAJBofgIwBAAEWwABHlYDAAEeTwCQZ2YHIwABOjQDAAE3G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AAKAwABIVsAkg5mBwABIXcAkg6gAgnMGwABTH4DnwABIccAASHjAAEqiAACAhwAAAAEDwABIgcAASqIAAAABAQHAAEiMAAAgQF0DgdYBXwMAAAAAXQOBIgFbAT4IScAASJoWwABIni6V8cAAUCPAAFMaPgE9MMAASLAfwABIusAATD4BAAEnlfMAPz0XwABI+y6V8cAAUCMpwABTGknAAEkQFsAASRQugV/AAFAjwABTG0rAAEkfARbAAEkmLoDSwABTJz9PwABJYcAASWgAAAGr12EDAF0DgSIBWwADwABJd8AASd0AAAAAAAAAXQOBIgFbAT4BSsAASYIBHMAASaMcwABJkRbAAEmJLoIhwABQI8AAUxWAhwEAAYDAAEmbwCSETQCCMIEcAQABNMAASbADwABJsMAASdYAAAAAAAAAYAHAAE2sAT4BPRfAAEm9LpXxwABQIyrAAFMaAIE3ScAASeQcwABJ/BbAAEnoLpXvwABQI8AAUxeAjAEAASsAwABN/ErAAEoFARzAAEobgcAASgzAJITWbgAAAAAAP07AAEonwABKLgAAb10DgSIBWwEWwABKRRbAAEowLpXwwABQI8AAUxhvgUc9HMAASmUWwABKUS6V78AAUCPAAFMXgI0AAAAAgnRKwABKcgEcwABKgILAAEp5wCSFrICJAQFbATTAAEqFA8AASoXAAEqdAAAAAQEBwABKhgAAAICKWwAAXQOBIgFbAUrAAEqMARzAAEqbgcAASozAJITWbgAAAAAAAIE1BsAAUyCA58AASqfAAEquwABMbgAAh24AAAABA8AASrPAAExuAAAAAAAAAF0DgSIBWwE+BknAAEq8FsAASsAulfHAAFAjwABTGj4BPTDAAErSH8AAStzAAEw+AQABJ5X0AD9JwABLFRzAAEstFsAASxkule/AAFAjwABTF4CMAQABKwDAAE38SsAASzYBHsAAS0GBKwEBWwEuAD89F8AAS8gulfHAAFAjKcAAUxpOwABL4cAAS+gAAG9dA4EiAVsBFsAAS/8WwABL6i6V8MAAUCPAAFMYb4FHPRzAAEwfFsAATAsule/AAFAjwABTF4CNAAAAAIJ0SsAATCwBHMAATDqAwABMM8AkhwCBHAEAATTAAExHA8AATEfAAExpAAAAAAAAAGABwABNrAE+AT0XwABMUi6V8cAAUCMqwABTGgCBNwbAAFMhgOfAAExzwABMesAATaEAAICNAAAAAQPAAEx/wABNoQAAAAAAAABdA4EiAVsBPgNJwABMiBbAAEyMLpXxwABQI8AAUxo+AT0wwABMnh/AAEyowABMPgEAASeV9AA/ScAATOEhFsAATOYugj/AAFAjwABTGT4CPRfAAEz5LoI/wABQIynAAFMZScAATREhHMAATSkWwABNFS6V78AAUCPAAFMXgIwBAAErAMAATfw+AT0cwABNUBbAAE08LpXvwABQI8AAUxeAjQAAAACCdD4BPRzAAE1wLpX1wABQIwAAAADAAFMjP0rAAE2SARbAAE2ZLoDSwABTJwbAAFMjgOfAAE2mwABNq8AATgkAAJX1wABQIwAAAAEDwABNt8AATgkAAAAAAAAAXAE+AT0cwABN0BzAAE3IFsAATcAugiHAAFAjwABTFYCNAAAAAIIxgIkCAVwBFsAATdUulfbAAFAjwABTJAGAnRbAAE3yLpX3wABQI8AAUyWBNQbAAFMngOfAAE4OwABOGcAATjYBAIDSAAAAAQPAAE4ewABONgAAAAAAAABdA4EiAVsBSsAATiEBFsAATjAWwABOIS6V7sAAUCPAAFMWb4FHBsAAUySA58AATjvAAE5AwABOsQAAlfbAAFAjAAAAAQPAAE5SwABOsQAAAAEBAcAATlMAAAAiWwAAXAE+AUnAAE5gIRbAAE50FsAATmUule7AAFAjwABTFnCBSD4BPRzAAE6YFsAATokule7AAFAjwABTFmUBAAGAwABOocAkiY8AgUo/BsAAUyWA58AATrbAAE67wABPbAAAlffAAFAjAAAAAQPAAE7NwABPbAAAAAICAsAATs4AAAAkWwDAAE7gAAAAMWADwABOXQAAXAE+AUnAAE7yIRbAAE8GFsAATvcule7AAFAjwABTFnCBSD4CPRfAAE8bLoFfwABQIynAAFMbPRzAAE9CFsAATzMule7AAFAjwABTFmgCAAKAwABPUMAkihOBwABPV8Akih0AgUs/BsAAUymA58AAT3HAAE+JwABURwEAgMDAAFAjAAAAAQPAAE+VwABURwAAAAAAAABdA4JeAV8DAAABPgRJwABPmxbAAE+fLpXxwABQI8AAUxo+AT0wwABPsR/AAE+7wABMPgEAASeV9AA/ScAAT/QWwABP+C6CP8AAUCPAAFMZPgE9MMAAUAsfwABQFcAATD4BAAEnlfIAP0nAAFBDHMAAUFsWwABQRy6V78AAUCPAAFMXgIwBAAErAMAATfw+Az0XwABQbC6V78AAUCMewABQhoJqAQFfAwAAAAGA+ynAAFMXPRfAAFCtLpXwwABQIx7AAFDIgUQAAVsAAMAAUxg9HMAAUQEcwABQ4xbAAFDbLoIhwABQI8AAUxWAhwEAARbAAFD5FsAAUO0ugMDAAFAjwABTKUCCYACCMICJAgFgAcAATawBNMAAUQYDwABRBsAAUmAAAAABAQHAAFEHAAAAgIpbAABgAcAATawBPgFJwABRFBbAAFEYLpXxwABQI8AAUxo+Az0cwABRiRbAAFF0LpXwwABQI8AAUxhlAQABLgCBSj0XwABRoy6V8MAAUCMrwABTGD0XwABRyi6V78AAUCMrwABTFz4BPRzAAFI/LpX1wABQIwAAAADAAFMjAYCdNMAAUmsDwABSa8AAVBwAAAACAgLAAFJsAAAAJFsAwABScwAAADFbAABgAcAATawBPgFJwABSiRbAAFKNLpXxwABQI8AAUxo+Az0cwABS/hbAAFLpLpXwwABQI8AAUxhoAgACgMAAUwzAJIyHJsAAUxMFgcAAUxPAJIyRYAPAAE5dAIFLPRfAAFMqLpXwwABQIyvAAFMYPRfAAFNRLpXvwABQIyvAAFMXPgE9HMAAU+QulffAAFAjAgACgMAAU/fAJIyHJsAAU/4FgcAAU/7AJIyRYAPAAE5dAMAAUyWBNT9KwABUKQEWwABUMC6V78AAUCPAAFMXAAAkgt4AJINvACSEIwAkhlIAJIeUACSIkAAkiREAJIlhACSJ5QAkipMAJI1pAAAACgLAAFMsgOfAAFRMwABUUsAAWKcDlfgAAAFdA8AAUxIBXQPAAE1GAWADwABMogABYAO3hgIEwABTL4DnwABUoMAAVKkYlfnAAFAjAGADj+AABMAAUzCA58AAVLLAAFTJGJX6wABQIwBgA8AAStgBKQEFwABTO4DnwABUzsAAVM7AAFUbAAAAA8AAVNnAAFUbAAAAAgICwABU9AAAAIF5XQOCLgFdA8AATUYBYAPAAEyiAMAAVQEAAASV+WADj+AAAGADwABTLAE/AggBwABTL4EAwCSOSwkAwABVDsAAUysBAAGAwABVFMAkji8ABgbAAFMygOfAAFUgwABVLcAAVUIBAJHqAAAAAQPAAFU2wABVQgAAAAAAAABgA4/gAUrAAFU5ARbAAFU5LpX5wABQI8AAUy8GwABTNIDnwABVR8AAVVDAAFXlAgCR6gAAAAEDwABVWMAAVeUAAAABAQHAAFViAAAAImADj+AAAFwBPgJJwABVbyEWwABVdC6V+sAAUCPAAFMwPgE9MMAAVY4fwABVmMAATD4BAAEnlfsAPz0XwABV0C6V+cAAUCOAwABV3MAkjvfAAFMvBsAAUzaA58AAVerAAFXvwABWZAAAgcMAAAABA8AAVfTAAFZkAAAAAQEBwABV/AAAAJMcYAPAAE3vAABcAT4DTsAAVg7AAFYVAACGR2ADwABOiQEkwABWHQGAwABWGcAkj3xJwABWIxbAAFYugcAAVifAJI+SgOPAAE6PSsAAVjcAPz0cwABWQy6AggEAARzAAFZRFsAAVkculfnAAFAjwABTL4ZPAQABgcAAVljAJI+SAI+vAMAAUx0GwABTN4DnwABWacAAVm7AAFf9AACEMAAAAAEDwABWdsAAV/0AAAACAQLAAFaAAAAAg41dA8AATQQBWwDAAFaRAAAAgcBgA8AATokBasAAVp1gA8AAToliAFwBPgNOwABWscAAVroAAIEIXQPAAE0/AVsBFsAAVsSAwABWvMAkkDWBCMAATSZJwABW0iEcwABW4ILAAFbXwCSQaYEJAAAAAMAATUFKwABW7AA/ScAAVvgWwABXBoHAAFb8wCSQR4DjwABOjz4BRMAAVxc+AT0cwABXJC6BwwEAARbAAFczgsAAVyrAJJBpgQrAAE1DAMAAUzYcwABXVYLAAFdMwCSQaYEJAAAAAMAATUE+Aj0cwABXdS6BwwEAARbAAFeEgsAAV3vAJJBpgQrAAE1DAMAAUzZDwABXlBzAAFekgsAAV5vAJJBpgQkAAAAAwABNQT4CPRzAAFe6LoHDAQABgcAAV8DAJJBHAMAAUzY9HMAAV9QugcMBAAEWwABX44LAAFfawCSQaYEKwABNQwDAAFM2BsAAUziA58AAWALAAFgHwABYTQAAh5EAAAABA8AAWA7AAFhNAAAAAQABwABYFwAAAIL8YAPAAE3vAWrAAFggYAPAAE6JYgBcAT4CPRzAAFgrLoHDAQABgMAAWDHAJJHFAMAAUzY9HMAAWD4ugcMBAAEnh2QAwABTNgbAAFM5gOfAAFhSwABYV8AAWKUAAIYUAAAAAQPAAFhkwABYpQAAAAEBAcAAWGkAAACFt2ADwABMogAAXAE+AT0cwABYeS6BwwEAAR7AAFiDwABOsgEAAYDAAFiXwCSSPgAAwABTNgAAJI6HACSOzQAkj1IAJJALACSRmwAkkhQAJJJ6AAAABgLAAFM8gOfAAFiqwABYucAAYFEHq9gAAQAABCFgA8AATe8BWwFgA8AAUywAAAUEwABTP4DnwABZXMAAWXAYq9nAAFAjAGADwABK2AEqBMAAU0CA58AAWXrAAFmOGKvawABQIwBgA8AAStgBKQTAAFNBgOfAAFmdwABZoQmo58AAUCMAYAPAAE8KAATAAFNCgOfAAFm5wABZwgmr28AAUCMAYAPAAFOdAATAAFNDgOfAAFnawABZ4QmZngBgA8AAUgIAAQXAAFNVgOfAAFnmwABZ5sAAW98AAAADwABZ+sAAW98AAAAEAwPAAFn/AAAAgOtgA8AATwoAwABaCwAAAKpAYAPAAE6JAMAAWioAAACr3GADwABTnQABwABaSAAAAKtGYAPAAFICAWoAYAHAAE2sAl0DwABTPAFfAwAAAT4CPRfAAFuuFsAAW6Quq9vAAFAjwABTQqvdLsAAU7M9F8AAW8MulfrAAFAjKsAAUzAECADAAFNBgMAAWmjAJJODCADAAFNDH8AAWoPAAFJEAwABgcAAWpDAJJOTAqtFIxzAAFrOFsAAWseAwABaw8Akk4OL3sAATxCAjAEAASen1gDAAE6YasAAWvZgA8AATKLAAHXfasAAWyRgA8AATKKEHwFgA8AATKKrRoPAAFtRwCSTtAgAwABTQoLAAFt2wCSTowkAwABbiMAAUzsCAAKCwABbjsAkk6MrAAsGwABTRYDnwABb5MAAW+zAAFwSAQCqHgAAAAEDwABb+sAAXBIAAAAAAAAAYAPAAEyiAUrAAFv9ARbAAFwFFsAAW/0umZ7AAFNDqh7AAFIxBsAAU0yA58AAXBbAAFwfwABcbwIAqh4AAAABA8AAXCzAAFxvAAAAAQEBwABcMQAAAKoeYAPAAEyiAABcAT4BPRfAAFxOFsAAXEYumZ7AAFNDqh6AwABcXsAklS7AAFI7BsAAU0aA58AAXHTAAFx9wABcsQEAqh8AAAABA8AAXJLAAFyxAAAAAAAAAGADwABK2AFKwABclQEWwABcnRbAAFyVLpmewABTQ6ofwABSMAbAAFNNgOfAAFy1wABcvsAAXQUCAKofAAAAAQPAAFzSwABdBQAAAAEBAcAAXNgAAACNWWADwABK2AAAXAE+AT0XwABc6RbAAFzhLpmewABTQ6ofgMAAXQDAJJXdwABSOgbAAFNHgOfAAF0KwABdE8AAXTABAKpFAAAAAQPAAF0gwABdMAAAAAAAAABgA8AAStgBSsAAXSMBFsAAXSMuq9rAAFAjwABTQAbAAFNOgOfAAF00wABdPcAAXdICAKpFAAAAAQPAAF1JwABd0gAAAAEBAcAAXU8AAACqRWADwABK2AAAXAE+AknAAF1jFsAAXXEWwABdZy6r28AAUCPAAFNCq97AAFOwPTDAAF2BH8AAXYvAAEw+AQABJ6vfAD89F8AAXbIuq9rAAFAjgMAAXcLAJJaFwABTQAbAAFNIgOfAAF3XwABd5MAAXygBAJHqAAAAAQPAAF3twABfKAAAAAAAAABgA4/gAT4EScAAXfMiFsAAXfcuq9nAAFAjwABTPwAWwABeERbAAF4HLqvbwABQI8AAU0Kr3sAAU7A+AUrAAF4pARbAAF4wLpX5wABQI8AAUy8/TsAAXkkAAACZnFsAScAAXlYiIRzAAF5uFsAAXmIWwABeWi6ZnsAAU0OZoMAAUjiAjAEAASsAwABN/AAhHMAAXpUWwABejRbAAF6BFsAAXnkumZ7AAFNDmaDAAFI4mZzAAFD7gIwBAAErAMAATpg+AT2IwABepsAkl2kWwABexBbAAF64FsAAXrAumZ7AAFNDmaDAAFI4mZzAAFD7PgE9iMAAXuDAJJdpJ4bmSsAAXwIBHsAAXxKP6gEAASbAAF8cBYDAAF8cwCSXaWADwABOiQAGwABTUIDnwABfLcAAXzLAAF+BAACAggAAAAEDwABfNcAAX4EAAAABAQHAAF9AAAAgO10DwABNRgFgA8AATKIAAFwBPgJJwABfTBzAAF9cFsAAX1WAwABfUMAkmGOByMAATXaAjAEAAZMAwABNxkrAAF9iAD89HcAAX3SAggEAAYDAAF94wCSYYwDAAFMdBsAAU1GA58AAX4bAAF+LwABgDQAAgcMAAAABA8AAX5DAAGANAAAAAQEBwABfmAAAAJMcYAPAAE3vAABcAT4CScAAX6MhFsAAX6guq9nAAFAjwABTPz4CPRfAAF++LpX5wABQIxbAAF/KLpHqwABTSMAAUy89F8AAX9ouq9nAAFAjKcAAUz8/PR3AAF//gcMBAAGAwABgBcAkmPEAwABTNgbAAFNTgOfAAGASwABgF8AAYCUAAqvgwABQIwAAAAEDwABgI8AAYCUAAAAAAAAAXAAGwABTSoDnwABgKsAAYDPAAGBPAQCr4cAAUCMAAAABA8AAYEfAAGBPAAAAAAAAAGADwABK2AFKwABgSgEqAAAklLUAJJUEACSVZAAklbMAJJYTACSWWwAklusAJJg5ACSYxwAkmWcAJJmYACSZ1QAAAAsCwABTVoDnwABgVMAAYFrAAHx3A6viAAABXQPAAFM8AWADwABRGwABYAPAAFEbBgTAAFNZgOfAAGC3wABgyBir48AAUCMAYAPAAEyiATeAyATAAFNagOfAAGDTwABg4Bir5MAAUCMAYAPAAE6JASsEwABTW4DnwABg8cAAYPkYq5nAAFAjAF0DwABNRgFgA8AAUPwBKwTAAFNcgOfAAGEKwABhFhirrsAAUCMAYAPAAFLWASsEwABTXYDnwABhI8AAYSwYq+XAAFAjAGADwABLdAErBMAAU16A58AAYTbAAGFEGKvmwABQIwBgA4UHASsBBcAAU3KA58AAYUnAAGFJwABiegAAAAPAAGFWwABiegAAAAUFBcAAYVsAAACA62ADwABPCgDAAGFnAAAAqkBgA8AATokAwABhhgAAAKvcYAPAAFOdAMAAYaIAAACr52ADwABQVQDAAGG5AAAAqUlgA8AATokAAGADwABTVgE+AUnAAGIbIRzAAGIshMAAYh/AJJtggIwBAAErAMAATpg+AT0cwABiRRbAAGI9LpmewABTQ4TWAgACasAAYlVgA8AATonAAHDIhMAAYmPAJJtgAMAAUig/AQkAwABhz8AAU1UEAAOAwABh1cAkmyCBwABh2sAkmzCCwABh68Akm0ABq0YmwABiBQGDwABiBcAkm1BgA8AAUgINBsAAU2GA58AAYn/AAGKIwABixgEAq+HAAFAjAAAAAQPAAGKcwABixgAAAAAAAABgA8AAStgBSsAAYp8BFsAAYrwWwABirBbAAGKfLquuwABQI8AAU1yrncAAUCPAAFLbq+jAAFAjwABUbAbAAFNigOfAAGLLwABi3MAAYzYBAKo+AAAAAQPAAGLkwABjNgAAAAAAAABdA8AATUYBYAPAAFD8AT4CScAAYuocwABi9xbAAGLuLquZwABQI8AAU1uAjAEAASsAwABNcD0XwABjAC6rmcAAUCMewABjD8AASD4BAWADwABQ/AGTAMAAU1s/SsAAYyMBFsAAYyouq5nAAFAjwABTWwbAAFNjgOfAAGM7wABjQ8AAY1wBAJnCAAAAAQPAAGNOwABjXAAAAAAAAABgA8AATKIBSsAAY1EBFsAAY1Euq+PAAFAjwABTWQbAAFNogOfAAGNgwABjacAAY/UCAJnCAAAAAQPAAGNzwABj9QAAAAEBAcAAY3gAAACZwmADwABMogAAXAE+AknAAGOKFsAAY5gWwABjji6r28AAUCPAAFNCq97AAFOwPTDAAGOoH8AAY7LAAEw+AQABJ6vfAD89F8AAY9kuq+PAAFAjgMAAY+fAJJ2KwABTWQbAAFNkgOfAAGP6wABkBcAAZDIBAKpDAAAAAQPAAGQSwABkMgAAAAAAAABgA8AATokBSsAAZBUBHMAAZBUuq+nAAFAjAQABFsAAZCcumcLAAFNjAMAAU3AGwABTaYDnwABkNsAAZD/AAGTWAgCqQwAAAAEDwABkS8AAZNYAAAABAQHAAGRTAAAAqkNgA8AATokAAFwBPgJJwABkZxbAAGR1FsAAZGsuq9vAAFAjwABTQqvewABTsD0wwABkhR/AAGSPwABMPgEAASer3wA/PRfAAGS2LqvkwABQI4DAAGTGwCSecsAAU1oGwABTbIDnwABk28AAZOLAAGXmAACZ1gAAAAEDwABk6sAAZeYAAAACAQHAAGTvAAAAjMJgA8AATwoAAcAAZP4AAACR2mADwABMogFqwABlEWADwABMoouKXQOBIgFbAT4EScAAZSoWwABlOBbAAGUuLqvbwABQI8AAU0Kr3sAAU7A9MMAAZUgfwABlUsAATD4BAAEnq98APz0XwABleS6ZwoHAAGWGwCSfE8AAU2g9HMAAZZoWwABlki6ZnsAAU0OE1gIAAmrAAGWqYAPAAE6JwABwsBzAAGXDgMAAZbrAJJ8CgO8AAAAAwABPMgDAAFIoSsAAZdQBHMAAZdsugI0AAAAAwABTIQbAAFNtgOfAAGXrwABl+sAAaMwAAKpGAAAAAQPAAGYGwABozAAAAAEAAAHAAGYNAAAAqkdgA8AAStgBasAAZhtgA8AAStiD+10DgSIBYAO7kwE+B0nAAGYoFsAAZjYWwABmLC6r28AAUCPAAFNCq97AAFOwPTDAAGZGH8AAZlDAAEw+AQABJ6vqAD89F8AAZnguqkQrwABTak7AAGaywABmuQAAb10DgSIBYAO7kwEcwABm2BbAAGbIFsAAZrsuq67AAFAjwABTXKudwABQI8AAUtuqRgAAAADAAFRjScAAZuyAwABm8MAkoAo+Ak7AAGcKwABnGAAAq+tdA4EiAVsBHMAAZy4WwABnJC6r28AAUCPAAFNCqkcCAAACq+wqq+0qwABTtUAcwABngILAAGdywCSgzYCMAQABKwDAAE38wABncsAAZ4cAPgE9F8AAZ9QWwABnyi6r28AAUCPAAFNCq94pwABTsD0cwABoJi6AjQAAAADAAFMhPRzAAGg4FsAAaDMugNLAAFMngRoBAAE0wABoQwPAAGhDwABotAAAAAEBAcAAaEQAAACAilsAAGABwABNrAE+AACBNkrAAGi7AYHAAGjCwCSgeQbAAFNlgOfAAGjRwABo6MAAaRUBAKpBAAAAAQPAAGj3wABpFQAAAAAAAABgA8AAUZABSsAAaPoBFsAAaQcWwABo+i6rrsAAUCPAAFNcqkHAAFLlBsAAU2aA58AAaRrAAGknwABpPAEAqkQAAAABA8AAaTDAAGk8AAAAAAAAAGADwABLdAFKwABpMwEWwABpMy6r5cAAUCPAAFNdBsAAU2qA58AAaUHAAGlKwABqOAIAqkQAAAABA8AAaVLAAGo4AAAAAQEBwABpXAAAAIPNYAPAAEt0AABcAT4EScAAaWUhHMAAaXgWwABpaS6r5sAAUCPAAFNegIwBAAErAMAATfw9HMAAaZAWwABpgS6r5sAAUCPAAFNegYwAAAAAhQ0/PRfAAGmeLqvlwABQI4DAAGmqwCSib8AAU11JwABpshzAAGnAFsAAabYuq+XAAFAjwABTXYCMAQABKwDAAEuRSsAAackAPz0XwABp1S6r5sAAUCMewABp6oUJAgACFsAAafAuq+XAAFAjwABTXTTAAGn7A8AAafvAAGozAAAAAAAAAGABwABNrAE+AT0cwABqIxbAAGoTFsAAagYuq67AAFAjwABTXKudwABQI8AAUtuR4wAAAADAAFRiAMAAU14GwABTb4DnwABqPcAAakLAAHBwAACr4MAAUCMAAAABA8AAak7AAHBwAAAAAAAAAFwBPhFOwABqZMAAamsAAIHBYAO0BQEfwABqccAAUqUBAAFqwABqhmADwABMosAASGcAScAAar0cwABq2RbAAGrJFsAAasEumZ7AAFNDqkDAAFIOgIwBAAEnq0sAwABOmD4BPRzAAGrygMAAauvAJKO8gIIBAAFqwABq/V0DwABNRgFgA8AATKLAAHxvALQJPgE9HMAAayCAwABrGcAko7yAggEAAWrAAGsrXQPAAE1GAWADwABMosAAfIcAtAk9HMAAa0WAwABrPsAko7yTrwEAAWrAAGtXYAPAAEyibwC0Cj0cwABrZ4DAAGtgwCSjvICCAQABFsAAa4EcwABrdhbAAGtrLpnCwABTY4DvAAAAAMAATM+GXcAATpEAtAk9HMAAa5iAwABrkcAko7yTrwEAAWrAAGuqYAPAAEyibwC0Cj0cwABruoDAAGuzwCSjvICCAQABFsAAa8sWwABrvi6qQ8AAU2SGXcAATpEAtAk9HMAAa+KAwABr28Ako7yTrwEAAWrAAGv0YAPAAEyihE4AtAo9HMAAbASAwABr/cAko7yTrwEAAWrAAGwWYAPAAEyihEsAtApOwABsJMAAbCwAAKo/YAPAAFXyARbAAGw7FsAAbC4uq67AAFAjwABTXKuewABQI8AAUtxJwABsSSIhHMAAbFWBwABsTcAkpW+AjAEAASsAwABN/AAhFsAAbGmBwABsYcAkpW+rqsAAUCPAAFX1PgQ9F8AAbJ+BwABsl8AkpW+r7sAAUCMqwABV9k7AAGzywABs+AAAie5gA8AAStgBKkXAAG0HAcAAbRDAAG0SAACDZmADwABMogGTARzAAG0Zg8AAbRfAJKYSgLsBAAEWwABtIxbAAG0bLqo+wABTYoHIwABNdgDAAE3QAYvAAG0rwCSmEhzAAG0sg8AAbSvAJKYSgQ0BAAGUAMAATcg+AUnAAG06HMAAbVwcwABtThbAAG1JHMAAbUUWwABtPi6qPsAAU2KC0QEAAYPAAG1GwCSmEgDAAE1Vhk3AAFD+lsEAAAAAwABOr4CMAQABasAAbV9gA8AATonAAHxNAMAATpg+Aj01wABthAAAAQBgA8AAUPwBHMAAbYQWwABtfS6qPsAAU2KC0QEAAYPAAG2FwCSmEgDAAE1VNcAAbZYAAAEAXAEXwABtloTAAG2EwCSm4CIWwABtpoHAAG2ewCSlb4DcwABV/cAAUP81wABttwAAAQBcARfAAG23hMAAbYTAJKbgqjopwABRBTXAAG3VAAABAFwBF8AAbdWEwABthMAkpuCRaCeF+MAAUQOEwABthMAkpuA9isAAbevAJKX4KT9JwABuESGCwABuFsAkpfg+Ak7AAG4rwABuMgAAqgpgA8AAUPwBHsAAbjjAAFEHAgACasAAbj9gA8AATonAAHxNFsAAblmBwABuUcAkpW+A3MAAVf0APRzAAG5uFsAAbmYuqj7AAFNigIIBAAE1wABucgAAAQBgA8AAUPwBg8AAbnLAJKeuNcAAboUAAAEAXAEXwABuhYTAAG5ywCSoCao6KcAAUQU1wABuoQAAAQBcARfAAG6hhMAAbnLAJKgJkWgnhfjAAFEDhMAAbnLAJKgJAMAATVc/P0nAAG7vIRzAAG78FsAAbvMuq5nAAFAjwABTW4CMAQABKwDAAE1wPgE9HMAAbxYWwABvDS6rmcAAUCPAAFNbgRIBAAE0wABvHgPAAG8ewABvagAAAAEBAcAAbx8AAACqCmADwABQ/AAAYAHAAE2sAT4BPRzAAG85FsAAbzEumZ7AAFNDgIICAAJqwABvSWADwABOicAAdDeCwABvWsAkqMoAwABSEgDAAE0UPz0cwABvgBbAAG94LpmewABTQ5YswABQIwAAAADAAFIjPRzAAG+wFsAAb6gumZ7AAFNDq2LAAFAjAQABgMAAb7fAJKO8AMAAUiQ9HMAAb8uAwABvxMAko7yTrwEAAWrAAG/dYAPAAEyihE4AtAo9HMAAb+2AwABv5sAko7yTrwEAAWrAAG//YAPAAEyihEsAtApOwABwEsAAcB4AAKvvYAOsFwEcwABwJ4DAAHAgwCSjvJOwAAAAALQLPRzAAHBCFsAAcDguq9vAAFAjwABTQqvwAgACgsAAcEzAJKmwFsAAcGWCwABwWcAkqbCByMAATXYAwABTuAbAAFNwgOfAAHB1wABwfMAAfHUAAKvpwABQIwAAAAEDwABwjcAAfHUAAAABAQHAAHCSAAAAmcJgA8AATKIAAGADwABOiQE+AknAAHCkIRzAAHC2FsAAcKguq+TAAFAjwABTWoCMAQABKwDAAE6YPgFKwABwxwEWwABwzi6r5MAAUCPAAFNaP0fAAHDogMAAcPDAJKpCKQHAAHEUasAAcRRgA8AATKKEIgA+AUrAAHEnASer8QHAAHFQasAAcVBgA8AATKKEfgA+AUrAAHFsASer8gHAAHGgasAAcaBgA8AATKKLWgA+AUrAAHGsASeKIgHAAHHPasAAcc9gA8AATKKLXgA+AUrAAHHgASer8wHAAHIIasAAcghgA8AATKKLYgA+AUrAAHIaASer9AHAAHJDasAAckNgA8AATKKLZgA+AUrAAHJoASer9QHAAHKmasAAcqZgA8AATKKLagA+AUrAAHK5ASer9gHAAHLkasAAcuRgA8AATKKLbgA+AUrAAHL6ASer9wHAAHMoasAAcyhgA8AATKKLcgA+AUrAAHNAASer+AHAAHNwasAAc3BgA8AATKKLggA+AUrAAHOJASer+QHAAHO6asAAc7pgA8AATKKLhgA+AUrAAHPUASer+gHAAHQGasAAdAZgA8AATKKLigA+AUrAAHQVASer+wHAAHQ7asAAdDtgA8AATKKLjgA+AUrAAHRNASer/AHAAHR3asAAdHdgA8AATKKLkgA+AUrAAHSMASer/QHAAHS5asAAdLlgA8AATKKLlgA+AUrAAHTLASer/gHAAHT1asAAdPVgA8AATKKLmgA+AUrAAHUQASer/wHAAHVDasAAdUNgA8AATKKLogA+AUrAAHVXASesAAHAAHWDasAAdYNgA8AATKKLpgA+AUrAAHWZASesAQHAAHXGasAAdcZgA8AATKKLqgA+AUrAAHXfASesAgHAAHYQasAAdhBgA8AATKKLrgA+AUrAAHYjASesAwHAAHZNasAAdk1gA8AATKKLsgA+AUrAAHZfASesBAHAAHaJasAAdolgA8AATKKLtgA+AUrAAHajASesBQHAAHbWasAAdtZgA8AATKKLugA+AUrAAHbtASesBgHAAHccasAAdxxgA8AATKKLvgA+AUrAAHdBASesBwHAAHd/asAAd39gA8AATKKLwgA+AUrAAHeXASesCAHAAHfIasAAd8hgA8AATKKLxgA+AUrAAHfaASesCQHAAHgDasAAeANgA8AATKKLygA+AUrAAHgRASesCgHAAHg2asAAeDZgA8AATKKLzgA+AUrAAHhOASesCwHAAHh+asAAeH5gA8AATKKL0gA+AUrAAHiaASesDAHAAHjOasAAeM5gA8AATKKL1gA+AUrAAHjtASesDQHAAHkmasAAeSZgA8AATKKL2gA+AUrAAHlBASesDgHAAHl2asAAeXZgA8AATKKL3gA+AUrAAHmUASesDwHAAHnLasAAectgA8AATKKL4gA+AUrAAHnxASesEAHAAHoxasAAejFgA8AATKKL5gA+AUrAAHpMASesEQHAAHp/asAAen9gA8AATKKMFgA+AUrAAHqcASesEgHAAHrSasAAetJgA8AATKKMGgA+AUrAAHrqASesEwHAAHsaasAAexpgA8AATKKMHgA+AUrAAHsuASesFAHAAHtaasAAe1pgA8AATKKMIgA+AUrAAHt2ASesFQHAAHuqasAAe6pgA8AATKKMJgA+AUrAAHvCASesFgHAAHvzasAAe/NgA8AATKKMKgA+AUrAAHwUASesFwABPgFKwAB8UAEkwAB8awInrBiAwAB8YMAkqkIAACScEgAknHwAJJ0YACSdYAAknfAAJJ5IACSe2AAkn98AJKGqACSh/QAkokUAJKOIACSqFAAkr3YAAAANAsAAU3OA58AAfHrAAHyAwACXAwOsGQAAAV0DwABTPAFgA8AAUWgAAWADwABRVgwEwABTdYDnwAB89sAAfPwJh/gAYAPAAE6JAATAAFN2gOfAAH0KwAB9DQmA6wBgA8AATwoABMAAU3eA58AAfSTAAH1ACao+AF0DwABNRgFgA8AAUPwBHsAAfTLAAEg+AQFgA8AAUPwBkwAEwABTeYDnwAB9hMAAfY8Jq63AAFAjAGADwABUAwAEwABTeoDnwAB9r8AAfcQJq7LAAFAjAGADwABTxAAEwABTe4DnwAB928AAfeQJq77AAFAjAGADkqMABMAAU3yA58AAfg3AAH5LCawawABQIwBdA4FCAWADwABRaAEewAB+LIFEAAFgA8AAUWgAAATAAFN9gOfAAH5dwAB+YwmrxcAAUCMAYAPAAFS4AATAAFN+gOfAAH6DwAB+jBisG8AAUCMAXQOBIgFgA8AAUWgBKwTAAFN/gOfAAH7KwAB+4RisHMAAUCMAYAPAAErYASkEwABTgIDnwAB+6sAAfvsYrB3AAFAjAGADwABMogE3BQTAAFOBgOfAAH8TwAB/Khirr8AAUCMAXQPAAE1GAWADwABRlwExwAB/KGADwABRlwABBcAAU5KA58AAfy/AAH8vwACHpAAAAAPAAH9BwACHpAAAAAcHB8AAf1AAAACr3GADwABTnQDAAH9eAAAAgOtgA8AATwoAwAB/aAAABIf4YAPAAE6JAMAAf3UAAASrxWADwABUuADAAH+IAAAEq61gA8AAVAMAwAB/mgAABKuyYAPAAFPEAMAAf7YAAASrvmADkqMAAGADwABTcwE+Az01wAB//gAAAQBgA5KjARbAAH/+Lqu+wABQI8AAU3sjHMAAf/6HwAB//sAksimAjAEAASsAwABN/CscwACACYfAAH/+wCSyKYhjAQABJ6weAJKrAVxJwACAZCIcwACAbxbAAIBoLof4wABTdYCMAQABJ5nTAMAATpgBHMAAgIIWwACAey6H+MAAU3WAjAEAASerswDAAE6YPgE9F8AAgJUuqh6TwABTTD4BPRfAAIDDFsAAgLsumZ7AAFNDqiApwABSPD0cwACBCBbAAIEBFsAAgO4urBrAAFAjwABTfG+BR4CJAgFgAcAATawBNMAAgQ0DwACBDcAAh44AAAABAQHAAIEOAAAAiHtgA8AAUWgAAGABwABNrAE+BT01wACBIAAAAQBgA5KjARbAAIEgLqu+wABQI8AAU3sjHMAAgSAUwACBIMAks0MIAICMAQABKwDAAE38KxzAAIErFMAAgSDAJLNDCACIYwEAASesHwCSqwFcT8AAgVDAAIFUAAABrCBhAwBdA8AATXgCW1sAA8AAgWjAAIJFAAAAAAAAAF0DwABNeAJbWwFKwACBbgEywACBbltbAyeSUDXAAIGSAAABAGADwABRkAEWwACBkofAAIGJwCSzJ6pBwABRdCMcwACBkhTAAIGSwCSz4QkAgIwBAAErAMAATfwrFsAAgaIUwACBksAks+EJAJJQwABRlAFgA8AATKInkrE1wACB0wAAAQBgA7rnATXAAIHTAAABAGADwABRkAEWwACB04fAAIHKwCSzJ6pBwABRdCMcwACB0xTAAIHTwCS0UAkAgIwBAAErAMAATfwrFsAAgeMUwACB08AktFAJAJKxwABRkgFgA7rnIxzAAIHTFMAAgdPAJLRCCQCAjAEAASsAwABN/CsWwACB8hTAAIHTwCS0QgkAiMm68gFgA8AAToknkq81wACCHgAAAQBgA8AAUZABFsAAgh6HwACCFcAksyeqQcAAUXQjHMAAgh4UwACCHsAktOcJAICMAQABKwDAAE38KxbAAIIuFMAAgh7AJLTnCQCSr8AAUZMBYAPAAEyi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icAAcF8nkX8AwABSFRTAANSbwCT66woAScAA1QchHMAA1SEWwADVFxbAANULLqutwABQI8AAU82qUsAAVBWAjAEAASsAwABOmD4BPRzAANVCFsAA1ToUwADVMsAk+h4IAJmewABTQ4DUwABQIwIAAmrAANVTYAPAAE6JwABw1xbAANVwFsAA1WQuq63AAFAjwABTzapSwABUFQDAAFIVP0nAANWGFsAA1ZCDwADVisAk+TWsV8AAVMA+Ak7AANYfwADWJAAArFhgA8AATokBHsAA1jPAAFHEAQABHMAA1lFqwADWTGADkaaGl4ZPAQABJMAA1n0DFsAA1mGDwADWW8Ak+TWqeMAAVLwnixcWwADWc4PAANZtwCT5NZNXwABUvQCPrwA9HMAA1pcWwADWjxTAANaHwCT6HggAmZ7AAFNDhNYCAAJqwADWp2ADwABOicAAcLwkwADWzgInrFkUwADWycAk/FAKAADAAFIoScAA1twiIRbAANbng8AA1uHAJPk1rCnAAFS+ABzAANcYFsAA1xEWwADW/xbAANbzLqutwABQI8AAU82sWsAAUCPAAFQKgcjAAE12gowBAAGTAMAATdI+Aj2NwADXJcAk+cscwADXPhbAANcyLqutwABQI8AAU82rxMAAUCMBAAGDwADXVMAk+TUAwABUO0nAANdiIRzAANdxhcAA12bAJPnLgIwBAAErAMAATfw+AT0cwADXj4XAANeEwCT5y6xbAQABFMAA15nAJPoeCAAAwABVGT8/ScAA17UiIRzAANfGFsAA172AwADXucAk+QWn0cAATxKAjAEAASsAwABOmAAhFsAA198WwADX1oDAANfSwCT5BafRwABPEoDjwABOjz4CTsAA2FDAANhVAACsWGADwABOiQEewADYZMAAUcQBAAEcwADYd2rAANhyYAORpoaXhk8BAAEWwADYgoDAANh+wCT5BafRwABPEgCPrwA9HMAA2KQWwADYnBTAANiUwCT6HggAmZ7AAFNDhNYCAAJqwADYtGADwABOicAAcG4kwADY1gInrFkUwADY0cAk/iYKAADAAFIoPgI9jsAA2QvAJPncHMAA2R8WwADZEy6rrcAAUCPAAFPNq8bAAFAjAQABgMAA2TDAJPkFAMAAVDpJwADZPCEcwADZRobAANlAwCT53ICMAQABKwDAAE38PgE9HMAA2V+GwADZWcAk+dysWwEAARTAANlpwCT6HggAAMAAVRA/PRfAANnoFsAA2dwurErAAFAjwABTy6xcHMAA2fiCwADZ8cAk+SWAjAEAASerswDAAE6YwABV7j0XwADaBy6sT8AAUCMcwADaJRbAANogh8AA2hfAJPntgNLAAFO/gIkCAWADu5MBNMAA2jIDwADaMsAA5DsAAAABAQHAANo6AAAAgPlgA7uTAABgA7uTAT4EPRfAANp3LqxOwABQIx7AANqUgUQAAWADwABSpgAAwABT0T0cwADjQhzAAOKZHMAA2vMWwADa7BbAANrVLqxOwABQI8AAU9FvgUeAiQEBYAHAAE2sATTAANr4A8AA2vjAAOIzAAAAAQEBwADa+QAAAKwlYAPAAFKmAABgAcAATawBPgU9F8AA2w0urE3AAFAjK8AAU9A9HMAA2zsWwADbMhTAANspwCUAMgsAq5bAAFK2gIkBAWABwABNrAE0wADbQAPAANtAwADdWQAAAAEBAcAA20EAAACpVVsAAGABwABNrAE+A0nAANtWFsAA22MUwADbWsAlADILAKuTwABSrj4DPRzAANuHFsAA23suq63AAFAjwABTzau4wABQIwEAAS4AwABUNT0cwADbrC6sXQAAAADAAFPcSsAA28YAP0nAANvkFsAA2+gukrrAAFPTSsAA2/AAP0nAANwCIiIiISbAANwGBRTAANwHwCUAmQwAYAPAAErYACEWwADcIS6sS8AAUCPAAFPOABbAANxMFsAA3EQUwADcO8AlADILAJmewABSraofwABSMAAWwADcehTAANxywCT6HggAqh/AAFNGPgI9HMAA3N0WwADc0S6rrcAAUCPAAFPNrF7AAFAjAQABLgDAAFQ0PRzAAN0QFsAA3QIuggrAAFAjwABTzIGwAAAAAIIWPgE9HMAA3TkukeMAAAAAwABT1wCBNUnAAN4EIiEcwADeE4XAAN4IwCT5y4CMAQABKwDAAE38ABzAAN48FsAA3jWFwADeKsAk+cuL3sAAVQaAjAEAAWrAAN5VYAPAAFTuwAB8YwDAAE38PgJOwADebcAA3nYAAKxfXQPAAE1GAWADwABOiQEcwADeiBbAAN6BFMAA3njAJQAyCwCZnsAAUq2C0QEAASesYADAAFIQScAA3rEiIRzAAN6+FMAA3rXAJQI8DACAjAEAASsAwABNcAAcwADe2RbAAN7SFMAA3snAJQI8DACByMAATXaAjAEAAZQAwABNxj4DTsAA3vHAAN74AACrzGADwABSRQEewADfF8AAUkwCAAEcwADfJRTAAN8dwCUCPAwAgtEBAAGTAMAATVUBqiMnh1hOwADfVMAA314AAKxhYAPAAE6JARzAAN9xFsAA32cUwADfYMAlAsoNAIf5wABSU4LRAQABJ6xhAMAATYxJwADfjCEcwADfmhTAAN+QwCUDCw4AgIwBAAErAMAATpg9F8AA366FwADfo8Ak+curzxTAAN+2wCUDCw4AwABVAT8/P0nAAOBTIiEcwADgXYbAAOBXwCT53ICMAQABKwDAAE38ABzAAOB1FsAA4G6GwADgaMAk+dyL3sAAVQaAjAEAAWrAAOCOYAPAAFTuwAB8YwDAAE38PgJOwADgpsAA4K8AAKxfXQPAAE1GAWADwABOiQEcwADgwRbAAOC6FMAA4LHAJQAyCwCZnsAAUq2C0QEAASesYgDAAFIQScAA4OQiIRzAAODxFMAA4OjAJQPgDACAjAEAASsAwABNcAAcwADhDBbAAOEFFMAA4PzAJQPgDACByMAATXaAjAEAAZQAwABNxj4DTsAA4STAAOErAACrzGADwABSRQEewADhSsAAUkwCAAEcwADhWBTAAOFQwCUD4AwAgtEBAAGTAMAATVUBqiMnh1hOwADhh8AA4ZEAAKxhYAPAAE6JARzAAOGkFsAA4ZoUwADhk8AlBG4NAIf5wABSU4LRAQABJ6xhAMAATYxJwADhvyEcwADhzRTAAOHDwCUErw4AgIwBAAErAMAATpg9F8AA4dyGwADh1sAk+dyrzxTAAOHkwCUErw4AwABVAT8/Pz0cwADiFRTAAOINwCT6HggArCTAAFAjAQABFMAA4iHAJQAyCwAAwABTigCBNYEaAgABNMAA4qQDwADipMAA4xoAAAABAQHAAOKlAAAAJFsAAGABwABNrAE+AT0wwADith/AAOLAwABRqwIAASesYwGA64DAAOMNwCT5BQGBGzTAAOMiA8AA4yLAAONAAAAAAQEBwADjIwAAACRgA8AATe8AAGADwABK2AFKwADjLQElwADjMwAUwADjLcAlBcALAGADwABMOIE2gRoBAAE0wADjTQPAAONNwADj0gAAAAICAsAA404AAAAkWwDAAONVAAAAMVsAAGABwABNrAE+Aj0cwADjky6R4wAAAADAAFPXPRzAAOOuFMAA46bAJPoeCACBQcAAUCMCAAIUwADjt8AlBg8LACbAAOO+BRTAAOO+wCUGGQwAYAPAAE5dAMAAU4sAgTY9HMAA5BwWwADkDi6CCsAAUCPAAFPMgbAAAAAAghZKwADkLAEUwADkM8Ak/7MKAAGAnTTAAORGA8AA5EbAAORiAAAAAQEBwADkRwAAAGlbAABgAcAATawBPgE9HMAA5FIukeMAAAAAwABT14E1wABT0krAAORpARTAAORwwCT6HggABsAAU9aA58AA5IDAAOSPwADlDQAAqkYAAAABA8AA5JvAAOUNAAAAAAAAAF0DgSIBYAO7kwE+AUrAAOSkARzAAOS5FsAA5KsurE/AAFAjwABT0oCJAQFgA7uTATTAAOTHA8AA5MfAAOUIAAAAAQEBwADkyAAAAICKYAO7kwAAYAPAAFTNAUrAAOTOAR/AAOTSwABU7QIAAhbAAOTiLpL1wABQI8AAU8gcwADk9xbAAOTrLqxKwABQI8AAU8usZAAAAADAAFXlAACBNQbAAFPXgOfAAOUSwADlF8AA5XgAAJHjAAAAAQPAAOUewADleAAAAAAAAABcAT4DPRfAAOUnLpK6KcAAU9M9HMAA5UYWwADlOi6rrcAAUCPAAFPNq7jAAFAjAQABLgDAAFQ1PRzAAOVrFsAA5WMukvXAAFAjwABTyJHjAAAAALuaBsAAU9iA58AA5X3AAOWCwADmLwAAgI0AAAABA8AA5YfAAOYvAAAAAAAAAFwBPgM9F8AA5ZAukropwABT0z0cwADlrxbAAOWjLqutwABQI8AAU82ruMAAUCMBAAEuAMAAVDU9HMAA5g0cwADl4xbAAOXMLqxPwABQI8AAU9KBHgEAARbAAOX3FsAA5esuq63AAFAjwABTzalLwABUFwCBOYCJAQFcATTAAOYSA8AA5hLAAOYqAAAAAQEBwADmEwAAAICKYAO7kwAAXAFKwADmGQEcwADmIRbAAOYZLpL1wABQI8AAU8iR4wAAAAC7mgCBNQbAAFPZgOfAAOY0wADmUsAA7mcAAKxlAAAAAQPAAOZjwADuZwAAAAUFBcAA5nIAAACPrGADwABOiQDAAOaCAAAAi5JgA8AATKIAwADmlQAAAKkGYAPAAFS4AMAA5qcAAAAbYQMBYAO6A2ADwABK2ADAAObhAAAArFNgA5KjAABdA4EiAWADwABTxAE+Bz01wADm8QAAAQBgA5KjAYTAAObxwCUJryMcwADm8YXAAObxwCUJzoCMAQABKwDAAE38KxzAAOb7hcAA5vHAJQnOiGMCAAEnrGYBiE8ywADnK1tbASesZ1IFTsAA50AAAAEAXQPAAE14AmADwABOiWADwABN7wEywADnQGADwABOiWADwABN7wBJwADnSiEcwADnWRbAAOdUgsAA507AJQmJj6zAAFS6gIwBAAErAMAATpg9HMAA52iGwADnQMAlCiaBDAIAAiePrBbAAOdwgsAA52rAJQmJj6zAAFS6AMAATY0/ScAA534hHMAA540WwADniILAAOeCwCUJiYuSwABUu4CMAQABKwDAAE3GPRzAAOemhsAA50DAJQomgQwCAAIni5IWwADnroLAAOeowCUJiYuSwABUuwDAAE2NP0nAAOe8IRzAAOfPFsAA58aCwADnwMAlCYmqeMAAVLyAjAEAASsAwABOmD0cwADn7IbAAOdAwCUKJoEMAgACJ6p4FsAA5/SCwADn7sAlCYmqeMAAVLwAwABNjT89HMAA6MeGwADnQMAlCiaBDAIAAiesKRbAAOjPgsAA6MnAJQmJrCnAAFS+AMAATY2GwADnQMAlCiaSqwFcTsAA6PPAAOj6AAGH+GADwABOiQEnrCpOwADpEcAA6RUAAYDrYAPAAE8KAR7AAOkXwABPfQIAAAKPrIDAAOkhwCUJaYuSgcAA6S3AJQl5PR7AAOlEwABUMQMAA4TAAOlfwCUJr4XAAOlpwCULo4bAAOlxwCULugBOwADpjsAA6ZYAAJS5YAPAAFNzARzAAOmgLoiBBQAFHsAA6aXAAE99AgAAAo+sgMAA6a/AJQlpi5KBwADpu8AlCXmBwADpwsAlCXmFwADpyMAlC6OCwADp0MAlCYmEwADp18AlCa8AwABT1UnAAOnmFsAA6fCCwADp6sAlCYmsV8AAVMA+Ak7AAOp/wADqhAAArFhgA8AATokBHsAA6pPAAFHEAQABHMAA6rFqwADqrGADkaaGl4ZPAQABJMAA6t0DFsAA6sGCwADqu8AlCYmqeMAAVLwnixcWwADq04LAAOrNwCUJiZNXwABUvQCPrwA9HMAA6vcWwADq74fAAOrnwCUMGpmewABTQ4TWAgACasAA6wdgA8AATonAAHC8JMAA6y4CJ6xZFMAA6ynAJQygCAAAwABSKD9KwADrOwEcwADtbRzAAOtSHMAA60qHwADrQsAlDBqAjQAAAADAAFOIgIkBAWADueoBNMAA61cDwADrV8AA7WsAAAABAQHAAOtYAAAAiHtgA8AAUWgAAF0DgSIBYAO56gE+A0nAAOtqIRzAAOuCFsAA63cUwADrbsAlDZYIAJnCwABRaoCMAQABasAA65BgA8AATKKLWgDAAE3GPgNOwADrpMAA66oAASRgA8AATokBJMAA66oGJ6xoJ4QnFsAA6+kUwADr4MAlDZYIAJnCwABRaieHHRbAAOwAFMAA6/fAJQ2WCACqQ8AAUWsnhCg9NcAA7BkAAAEAYAOSowGEwADsGcAlCa8jHMAA7BkUwADsGcAlDkAKAICMAQABKwDAAE38KxzAAOwjFMAA7BnAJQ5ACgCIYwEAARTAAOwrwCUN7gkAAJKrAVw9MMAA7DsfwADsRcAAUasCAAEUwADsU8AlDe4JAAGA6xbAAOxnh8AA7F/AJQwagOvAAFN2P07AAOx/wADshgAAkZ5gA7uTARbAAOzuFsAA7M0WwADstSbAAOySABTAAOyJwCUNlggAYAPAAFLpq67AAFAjwABS7auywABQI8AAU3qS9cAAUCPAAFPISsAA7P0BHsAA7RG58QQAARTAAO0YwCUOzgkAA4+sgMAA7TDAJQlpkzkWwADtPy6XTMAAUCPAAFPKl1CDwADtW8AlCZkAgTWAiQEBYAPAAFPEATTAAO1yA8AA7XLAAO5iAAAAAQEBwADtcwAAAKxpYAO56gAAYAPAAFPEAT4DTsAA7ZDAAO2UAACC0mADwABOiQEmwADtkAUewADtrMAAU9oDAAMpgMAA7brAJQlpgcAA7cDAJQl5AGADwABOiT01wADtzQAAAQBgA5KjAYTAAO3NwCUJryMcwADtzRTAAO3NwCUP4woAgIwBAAErAMAATfwrHMAA7dcUwADtzcAlD+MKAIhjAQABJ6xqAJKrAVxKwADuAgEfwADuDcAAU+AEAAQUwADuLsAlD6IJABTAAO4zwCUPiQgAFsAA7kmHwADuQcAlDBqrrcAAUCPAAFN5KQAAgTUGwABT3oDnwADubMAA7oPAAO64AQCqQQAAAAEDwADuksAA7rgAAAAAAAAAYAPAAFGQAUrAAO6VAR7AAO6pwABUygEAARbAAO6wLpL1wABQI8AAU8gABsAAU9qA58AA7r3AAO7EwADvLwABrGsAAAABA8AA7svAAO8vAAAAAwMDwADu0QAAAKxsYAPAAErYAMAA7uIAAACPrGADwABOiQDAAO7sAAAAi5JgA8AATKIAAFsBPgFKwADu+AEjgMAA7v/AJRD3JMAA7xwEJ6xtgcAA7xDAJREHJ4sXgsAA7xbAJREXJMAA7ysDgcAA7yDAJREHJ4sXgsAA7ybAJREXAWADwABOiQbAAFPbgOfAAO80wADvOcAA76EAAKxuAAAAAQPAAO9CwADvoQAAAAAAAABcAT4BScAA70shHMAA71oWwADvTy6sTMAAUCPAAFPPgIwBAAErAMAATfw+Aj0cwADvdhbAAO9rLqxMwABQI8AAU8+BjAAAAACFDT0XwADvhi6sTMAAUCMrwABTzz8GwABT3IDnwADvpsAA76vAAPBFAACsXQAAAAEDwADvtcAA8EUAAAAAAAAAXAE+AkAcwADv0BbAAO/FLqxMwABQI8AAU8+AjAEAASsAwABN/MAA78XAAO/XAD0XwADv3i6sTMAAUCMewADv74UJAgACFsAA8AEWwADv9S6rrcAAUCPAAFPNqUvAAFQXNMAA8A4DwADwDsAA8EAAAAAAAAAAYAHAAE2sAT4CPRfAAPAZLqxMwABQIyvAAFPPPRzAAPAyLoCNAAAAAMAAU9gAwABTzwAAJPjbACUHBAAlB84AJQhOACUJPwAlEHgAJRDNACURfAAlEgQAJRLVAAAACQLAAFPhgOfAAPBKwADwUMAA8NMDrG8AAAFgA8AATe8AAAIEwABT44DnwADwgMAA8IoJl00AYAPAAFPEAATAAFPkgOfAAPCbwADwoAmpBgBgA8AAVLgAAQXAAFPmgOfAAPClwADwpcAA8NEAAAADwADwtMAA8NEAAAACAgLAAPC6AAAEl01gA8AAU8QAwADwywAABKkGYAPAAFS4AABgA8AAU+EBPwMIAcAAU+OAAMAlE34IAcAAU+SBAMAlE44JAcAA8KXAAE4FAAAAAAAAACUTzwAAAAACwABT54DnwADw1sAA8NzAAQUkA6xwAAABYAPAAE3vAAAKBMAAU+mA58AA8SvAAPEuCYLSAGADwABOiQAEwABT6oDnwADxP8AA8UMJj6wAYAPAAE6JAATAAFPrgOfAAPFRwADxVQmLkgBgA8AATKIABMAAU+yA58AA8WTAAPFsCaxsAGADwABK2AAEwABT7YDnwADxhsAA8Y0JkzkAYAO6sAAEwABT74DnwADxssAA8ccJrHHAAFAjAF0DwABOOgFgA8AAU8QBHsAA8b6JFgABYAPAAFPEAAAEwABT8IDnwADx7MAA8gMJrHLAAFAjAF0DwABOOgFgA8AAU8QBHsAA8fqJFgABYAPAAFPEAAAEwABT8YDnwADyIcAA8j0JrHPAAFAjAF0DwABOOgFdA7tzAVsBHsAA8jSJFgABXQO7cwFbAAAEwABT8oDnwADyTcAA8mcJgOHAAFAjAF0DirQBWwEfwADyXItgAAFbAAAEwABT84DnwADyb8AA8n4YrHTAAFAjAGADwABMogGTAQXAAFQCgOfAAPKDwADyg8AA8tgAAAADwADylMAA8tgAAAAFBQXAAPKhAAAEgtJgA8AATokAwADyqwAABI+sYAPAAE6JAMAA8rYAAASLkmADwABMogDAAPLBAAAErGxgA8AAStgAwADy0AAABJM5YAO6sAAAYAPAAFPnAT8GCAHAAFPpgADAJRWLCAHAAFPqgQDAJRWbCAHAAFPrggDAJRWrCAHAAFPsgwDAJRW7CAHAAFPthADAJRXLCQHAAPKDwABOBQAAAAAKBsAAU/WA58AA8t3AAPLmwADzJQEAgOMAAAABA8AA8u7AAPMlAAAAAAAAAGADwABK2AFKwADy8QEiIhbAAPL3FsAA8vEurHHAAFAjwABT74DjwABNKAAWwADzChbAAPMCLqxywABQI8AAU/CA48AATSgAHMAA8yEWwADzFS6sdMAAUCPAAFPzgIwBAAGTAMAATcYGwABT9oDnwADzKsAA8zPAAPNOAQCsdQAAAAEDwADzO8AA804AAAAAAAAAYAPAAErYAUrAAPM+ARbAAPNEFsAA8z4urHHAAFAjwABT74NiwABNKQbAAFP3gOfAAPNTwADzXMAA844BAKx2AAAAAQPAAPNmwADzjgAAAAAAAABgA8AAStgBSsAA82kBIhbAAPNxFsAA82kurHLAAFAjwABT8INiwABNKQEcwADzixbAAPN/Lqx0wABQI8AAU/OCjAEAAZMAwABN0gbAAFP5gOfAAPOTwADzqcAA9G8AAKx3AAAAAQPAAPOxwAD0bwAAAAAAAABgA8AAU8QBPgZAFsAA88EurHXAAFP2wADzwcAA88gATsAA8+XAAPPwAACXTWADwABTxAEWwADz+BbAAPPyLqxxwABQI8AAU++BwsAATSo9HMAA9AkWwAD0Ay6sccAAUCPAAFPvg2wBAAGAwAD0EMAlF9MAwABOST0cwAD0LIDAAPQhwCUX06xuAAAAAMAAU9s9HMAA9EUWwAD0PS6scsAAUCPAAFPwgIIBAAGAwAD0ScAlF9MAwABOR0rAAPRaAYDAAPRhwCUX0wbAAFP7gOfAAPR0wAD0dMAA9M0AAKx4wABQIwAAAAEDwAD0gcAA9M0AAAAAAAAAWwE+AUnAAPSKFsAA9JcWwAD0ji6A4cAAUCPAAFPyg2LAAE0pPgE9HMAA9MEcwAD0tBbAAPSrLoDhwABQI8AAU/KElwAAAACKv24AAAAAAD8GwABT/IDnwAD00sAA9NfAAPUnAACseQAAAAEDwAD048AA9ScAAAABAQHAAPT6AAAAl01gA8AAU8QAAFwBPgE9HMAA9RQWwAD1DC6scsAAUCPAAFPwgIIBAAGAwAD1GMAlGSQAwABORwbAAFP9gOfAAPUswAD1McAA9f8AAKx6AAAAAQPAAPVBwAD1/wAAAAEBAcAA9VgAAACXTWADwABTxAAAXAE+BUAcwAD1eRbAAPVxLqxywABQI8AAU/CBxAEAAYDAAPWCwCUZjADAAE5GwAD1ccAA9Y0APRzAAPWcFsAA9ZQurHLAAFAjwABT8INsAQABgMAA9aPAJRmMAMAATkk9HMAA9boWwAD1tC6sccAAUCPAAFPvgIIBAAGAwAD1vsAlGYwAwABORz0cwAD12oDAAPXPwCUZjKxdAAAAAMAAU9w9HMAA9ewurHjAAFAjAAAAAMAAU/sGwABT/oDnwAD2BMAA9gnAAPbdAACsewAAAAEDwAD2GcAA9t0AAAABAQHAAPYwAAAAl01gA8AAU8QAAFwBPgRAIiEcwAD2UhbAAPZKLqxywABQI8AAU/CBxAEAAYDAAPZbwCUafQDAAE5GASEcwAD2cRbAAPZrLqxxwABQI8AAU++BxAEAAYDAAPZ6wCUafQDAAE5GwAD2ScAA9oUAPRzAAPaUFsAA9owurHLAAFAjwABT8INsAQABgMAA9pvAJRp9AMAATkk9HMAA9rIWwAD2rC6sccAAUCPAAFPvg2wBAAGAwAD2ucAlGn0AwABOST0cwAD2yi6seMAAUCMAAAAAwABT+wbAAFP/gOfAAPbiwAD258AA+PcAAICNAAAAAQPAAPbswAD49wAAAAEBAcAA9vIAAACZ8WADwABK2AAAXAE+Aj4CTsAA90sAAACBB10DwABNPwFdA7tzAVsBFsAA90seAJPNAQFdA8AATQQBXQO7cwFbARzAAPdLFsAA9z4urHPAAFAjwABT8YHKAAAAAMAATRoAgQjAAE0mRQAAARzAAPdLgQDAJRuZgQkAAAAAwABNQQA+Ak7AAPc5AAAAivNdA7tzAVsBFsAA91WBAMAlG5mBCsAATUM+Aj0cwAD3tRbAAPeugsAA96zAJRwMkZ67dYCJAgFgAcAATawBNMAA97oDwAD3usAA99wAAAABAQHAAPe7AAAAgPlbAABgAcAATawBPgE9HMAA98qDwAD3yMAlHGaR4wAAAAAAAYCdNMAA9+cDwAD358AA9+0AAAABAQHAAPfoAAAAaVsAAGABwABNrAE+AIE1PRzAAPf4gsAA9/bAJRwMgYwAAAAAu3lJwAD4DIDAAPgQwCUbgT4CPgJOwAD4MwAAAIEHXQPAAE0/AWADwABTxAEWwAD4Mx4Ak80BAV0DwABNBAFgA8AAU8QBHMAA+DMWwAD4LS6sccAAUCPAAFPvgcoAAAAAwABNGgCBCMAATSZFAAABHMAA+DOBAMAlHOiBCQAAAADAAE1BAD4CTsAA+CgAAACLj2ADwABTxAEWwAD4PYEAwCUc6IEKwABNQz4BPRzAAPhJgsAA+EfAJR1bkeMAAAAAwABT1z4CTsAA+HgAAACBB10DwABNPwFgA8AAU8QBFsAA+HgeAJPNAQFdA8AATQQBYAPAAFPEARzAAPh4FsAA+HAurHLAAFAjwABT8IHKAAAAAMAATRoAgQjAAE0mRQAAARzAAPh4gQDAJR2agQkAAAAAwABNQQA+Ak7AAPhrAAAAi49gA8AAU8QBFsAA+IKBAMAlHZqBCsAATUM+AT0cwAD4joLAAPiMwCUeDZHjAAAAAMAAU9c+AT4CTsAA+MgAAACBB10DwABNPwFgA8AAU8QBFsAA+MgeAJPNAQFdA8AATQQBYAPAAFPEARzAAPjIFsAA+MIurHHAAFAjwABT74HKAAAAAMAATRoAgQjAAE0mRQAAARzAAPjIgQDAJR5OgQkAAAAAwABNQQA+Ak7AAPi9AAAAi49gA8AAU8QBFsAA+NKBAMAlHk6BCsAATUM+AT0cwAD43oLAAPjcwCUewYCNAAAAAMAAU9gGwABUAIDnwAD4/MAA+RTAAQUiAACSfQAAAAEDwAD5G8ABBSIAAAAFBQXAAPkjAAAArHxgA8AATokAwAD5MAAAAKx9YAPAAEyiAMAA+UAAAACpBmADwABUuADAAPlZAAAAmdxgA8AAVAMAwAD5bgAAAKxTYAOSowAAXQOBIgFgA8AAU+EBPgdJwAD5fhbAAPmCLqx1wABT9j4DTsAA+ZfAAPmiAACXTWADwABTxAEcwAD5pC6sdwAAAADAAFP5PRzAAPm9g8AA+bbAJR9XrH7AAFAjAAAAAMAAVDZKwAD52gEewAD55YErAQFgA8AAU+EBH8AA+fbAAFPmAgAChcAA+gbAJR+YgsAA+hLAJR9HAAA/ScAA+iUiIRzAAPpGFsAA+jCDwAD6KcAlH1eqUMAAVBOAjAEAASsAwABNxgAcwAD6dhzAAPpoFsAA+mEWwAD6WS6scsAAUCPAAFPwgciVmoENAQABFsAA+mourHTAAFAjwABT8wDAAE3IgV4BAAEWwAD6gIPAAPp5wCUfV6pQwABUEwDAAE3TPgNOwAD6o8AA+q0AAIEPXQOBQgFgA8AAU+EBHsAA+rOBRAABYAPAAFPhAAA9HMAA+uAWwAD61y6A4cAAUCPAAFPygIIBAAE0wAD65APAAPrkwAD7QAAAAAAAAABgAcAATawBPgE9HMAA+vuFwAD68cAlIJllAQABHMAA+wQukn0FAAWAwAD7DMAlHyeBwAD7FcAlHzeCwAD7HsAlH0eDwAD7JcAlH1eEwAD7LcAlH2cAwABUAACBSgCKw0rAAPtJARbAAPtahcAA+1DAJSCZb4FHP07AAPtwwAD7jgAArH9eAwADAwNgA7oDYAPAAE6JYAPAAEyiAAFXA8AAUCYAYAPAAErYARbAAPuXg8AA+5DAJR9XrIDAAFAjwABUEE/AAPu1wAD7ugAAARthAwFgA7oDYAPAAErYAAPAAPvCwAD8cAAAAAEBAcAA+9MAAACXkmADugMAAGADwABK2AE+AknAAPvoHMAA/AqFwAD77MAlIWqAjAEAASsAwABN/ErAAPwTASo/SsAA/CcBHMAA/EuFwAD8LsAlIWpuAwADh8AA/EzAJSHegMAA/FnAJR8ngcAA/GLAJR83AABOwAD8jsAA/J0AAKyBXQOBIgFdA7tzAVsBIyIWwAD8oC6sbMAAU+wAFsAA/LKCwAD8rMAlH0esKcAAVL4ewAD80rnwBAACFsAA/N8uj6zAAFPqFsAA/OUui5LAAFPrApM5FsAA/QAukznAAFPtl1CGwAD9G8AlIbkewAD9NruWAgACFsAA/UMuj6zAAFPqFsAA/Ukui5LAAFPrAAFdA4EiAV0Du3MBYAO7kz0XwAD9VS6sdMAAUCMcwAD9YBbAAP1VLqx0wABQI8AAU/OBDQEAAZQAwABNyMAAU/NKwAD9aAEcwAD9fofAAP1vwCUiUoCJAQFgA8AAU+EBNMAA/YMDwAD9g8ABBR0AAAABAQHAAP2TAAAAkn5dA7tzAVsAAF0DgSIBYAPAAFPhAT4FPRzAAP2uFsAA/aEurHPAAFAjwABT8YCCAQABFMAA/bLAJSNfCAAAwABOR07AAP3GwAD90wAAkn9dA4EiAVsBFsAA/doUwAD91cAlI18IAJGeu3VOwAD998AA/gkAAapPYAPAAEt0ARbAAP4Sg8AA/gvAJR9Xqk/AAFQSScAA/ishHMAA/kEUwAD+L8AlI9IKAICMAQABKwDAAEuRPgE9FcAA/lTAJSOqCRzAAP5wFMAA/mPAJSOqCQCBHgIAARTAAP54wCUj0goAAYEgNMAA/pYDwAD+lsAA/vkAAAAAAAAAYAHAAE2sAT4DPRzAAP6yFsAA/qUurHPAAFAjwABT8YNsAQABFMAA/rnAJSNfCAAAwABOST0cwAD+zxTAAP7KwCUjXwgAgYwAAAAAu3lKwAD+4wErgTk/SsAA/woBHMAA/x4UwAD/EcAlI6oJAICJAgFgA8AAU+EBNMAA/yMDwAD/I8ABBJEAAAABAQHAAP8kAAAAkZ5bAABdA4EeAWADwABT4QE+BUnAAQCSHMABAJ0UwAEAlsAlJOsLAICMAQABKwDAAE38PgJAIRzAAQDLFMABALnAJSPSCgCAjAEAASsAwABLkcABALnAAQDSAD0wwAEA3x/AAQDpu80BAAEkwAEA+AcnrIIUwAEBK8AlI9IKACeEMSesgxbAAQFYLo+swABT6ieSfBbAAQFnLouSwABT6wA/PRfAAQGCLqx0wABQIxzAAQGNFsABAYIurHTAAFAjwABT84EGAQABlADAAE3JwABT8z0cwAEBoBTAAQGZwCUk6wsAkskCAAJqwAEBt2ADuyyxpSkAAE7AAQHWwAEB4QAAl01gA8AAU8QBH8ABAfPAAFPgBQAFFsABAgkugtLAAFPpJsABAg4FFMABAg7AJSTrCwBgA7uTg8ABAhbAJR9XKhbAAQIlLpM5wABT7QBJwAECNyIWwAECOy6sbMAAU+wAIRbAAQJOgsABAkjAJR9HrCnAAFS+PgI9F8ABAm8UwAECZMAlJeoMAKxLwABQIynAAFPOSsABAooBHMABAvkcwAECqxTAAQKRwCUl6gwArGUFAAWAwAECvcAlHyeBwAECxsAlHzeCwAECz8AlH0eGwAEC1sAlIbmEwAEC4MAlH2cAwABT2YCJAQFgA8AAU+EBNMABAv4DwAEC/sABA+oAAAABAQHAAQL/AAAArIRgA8AAU8QAAGADwABT4QE+Az0cwAEDaxzAAQMtg8ABAxXAJR9XrIXAAFAjAwADgMABA0LAJR8ngcABA0vAJR83KQDAAFQ4rHkBAAEUwAEDeMAlJvgNAADAAFP8PRzAAQOaFsABA40urHPAAFAjwABT8YNsAQABFMABA6HAJSNfCAAAwABOSUrAAQO0AR/AAQO/wABT5gIAAhTAAQPPwCUm+A0AgsABA9fAJR9HAACBNT4DPRzAAQQILqx5AQABFMABBBXAJSXqDAAAwABT/D0cwAEEORbAAQQsLqxzwABQI8AAU/GDbAEAARTAAQRAwCUjXwgAAMAATklKwAEEUQEfwAEEXMAAU+YCAAIUwAEEbMAlJeoMAILAAQR4wCUfRwABgJ00wAEEnAPAAQScwAEFFQAAAAEBAcABBJ0AAAAkWwAAYAHAAE2sAT4EPRfAAQSuLqx0wABQIxzAAQS5FsABBK4urHTAAFAjwABT84EGAQABlADAAE3JwABT8z0cwAEE0hbAAQTFLqxzwABQI8AAU/GDbAEAARTAAQTZwCUjXwgAAMAATkk9HMABBOgurHjAAFAjAAAAAMAAU/s9MMABBQEUwAEFB8AlKDgLAIE1AIE1AAAlFi4AJRbAACUXEwAlF4gAJRh7ACUY+gAlGWIAJRpTACUbVwAlHv0AJSjTAAAACgLAAFQDgOfAAQV4wAEFfsABN7YDrIYAAAFgA8AATe8AAWADwABRLBAEwABUBoDnwAEFqcABBbkYrIfAAFAjAGADwABK2AEqBMAAVAeA58ABBcLAAQXcGKyIwABQIwBgA8AAStgBKgTAAFQIgOfAAQYFwAEGSAmsicAAUCMAXQPAAE14AmADwABOiWADwABT5wEewAEGJIkNAAJgA8AATolgA8AAU+cAAATAAFQJgOfAAQZlwAEGdgmsisAAUCMAXQPAAE1GAWADwABU+wExwAEGdGADwABU+wAEwABUCoDnwAEGmMABBq4JrFrAAFAjAF0DwABNRgFgA8AAVRMBMcABBqxgA8AAVRMABMAAVAuA58ABBsjAAQbQCZdMwABQIwBgA7qwAATAAFQMgOfAAQbdwAEG6hirvMAAUCMAYAPAAEyYASsEwABUDYDnwAEG98ABBwkYq8vAAFAjAGADwABMmAErBMAAVA6A58ABBxbAAQdGGKyLwABQIwBgA8AATJgBasABBy5eAwABAgFgA8AATwoBi8RdA8AATXgCYAPAAE6JYAPAAE6JAABgA8AATonAAHzvBMAAVA+A58ABB1PAAQd9GKyMwABQIwBgA8AAS3QBasABB2hgA8AAS3TAAHz6BMAAVBCA58ABB5jAAQevGKyAwABQIwBeAwADAwNgA7oDYAPAAE6JYAPAAEyiAAFXA8AAUCYAYAPAAErYASsEwABUEoDnwAEH6sABB/sYqk8AYAPAAEt0ASsEwABUE4DnwAEIBMABCBkYqlAAYAPAAEyiASsEwABUFIDnwAEII8ABCDgYqlEAYAPAAErYASkEwABUFYDnwAEIRMABCGEYqlIAYAPAAE6JAR7AAQhQwABQOgAAAAAEwABUEYDnwAE3hMABN7QErI3AAFAjAF0DwABNeAJgA8AATolgA8AATokBGsABN6m41QEFwABUQIDnwAEIZsABCGbAAQiAAAAAA8ABCHHAAQiAAAAAAQEBwAEIdwAABJdMYAO6sAAAYAPAAFQDAT8CCAHAAFQLgADAJSv0CQHAAQhmwABOBQAAAAAlBsAAVBeA58ABB7TAAQfBwAEH3AEAqUsAAAABA8ABB83AAQfcAAAAAAAAAGADwABLdAFKwAEH0AEWwAEH0C6sjMAAUCPAAFQPBsAAVBmA58ABCIXAAQiOwAEJowIAqUsAAAABA8ABCJnAAQmjAAAAAQEBwAEIowAAAIEeYAPAAEt0AABcAT4CPRfAAQiyLqyMwABQI4DAAQjBwCUsmcAAVA8+Ak7AAQjvAAAAgQddA8AATT8BYAPAAFPnARbAAQjvHgCTzQEBXQPAAE0EAWADwABT5wEWwAEI7xbAAQjcLqyJwABQI8AAVAiBAcAATZsAgQjAAE0mRQAAARzAAQjvgQDAJSzLgQkAAAAAwABNQQA+Ak7AAQjXAAAAi49gA8AAU+cBFsABCPeBAMAlLMuBCsAATUM+AT4CTsABCRIAAACBB10DwABNPwFgA8AAU8QBFsABCRIeAJPNAQFdA8AATQQBYAPAAFPEARbAAQkSgsABCRDAJS06rHHAAFAjwABT7wCBCMAATSZFAAABHMABCRKDAMAlLWCBCQAAAADAAE1BAD4CTsABCQgAAACpVGADwABTxAEWwAEJGYMAwCUtYIEKwABNQz4CPRzAAQlrhMABCWbAJS3MrG4AAAAAwABT2z0cwAEJhYTAAQmAwCUtzKxdAAAAAMAAU9wGwABUGoDnwAEJqMABCazAAQoyAgCqZgAAAAEDwAEJwsABCjIAAAABAQHAAQnPAAAAG2EDA2ADugNgA8AATolgA8AATKJgA8AAStgAAFwBPgE9F8ABCgwurIDAAFAjgMABCibAJS5LwABUEAbAAFQfgOfAAQo3wAEKUcABDUUAAIjrAAAAAQPAAQpVwAENRQAAAAQEBMABCmQAAACH+GADwABOiQDAAQpzAAAAj6xgA8AATokAwAEKfQAAAIuSYAPAAEyiAMABCooAAACRaGADwABOiQAAXQOBIgFgA8AAUVYBPgdOwAEK3MABCuoAAKfuYAPAAEyiARbAAQrxg8ABCuzAJS7mgcjAAE6NTsABCwHAAQsMAACn7WADwABMogEWwAELE4PAAQsOwCUu5oHIwABOjUXAAQsfAcABCyjAAQsqAACDZmADwABMogEcwAELOBbAAQsxg8ABCyzAJS7mgcjAAE6NgQYBAAGUAMAATckBHMABCz+GwAELPcAlL1uBXgEAAZMAwABN0wGOwAELRcAlL1scwAELRobAAQtFwCUvW4EGAQABlADAAE3JPgJOwAELVsABC1sAAIXAYAPAAEyiARzAAQtig8ABC13AJS7mhdABAAGGwAELbcAlL1sAwABOl0nAAQt3HMABC4CHwAELe8AlL9KAjAEAAWrAAQuDYAPAAEyioBwAwABNxj4CPYzAAQuXwCUvBobAAQunwCUvWz2NwAELssAlLy6GwAELv8AlL1tJwAELzxzAAQvYh8ABC9PAJS/SgIwBAAFqwAEL22ADwABMooX4AMAATcY+AT2NwAEL88AlLy6GwAEMAMAlL1s/TsABDBzAAQwiAACn0mADwABOiQErScABDC4cwAEMPYXAAQwywCUvLoC7AQABhMABDD/AJS8GAMAATdA+Aj2OwAEMVsAlMJkcwAEMY4PAAQxewCUu5oYTAgACHMABDHiFwAEMbcAlLy6BDQEAAZQAwABNyITAAQx9wCUvBgDAAE6fPYvAAQyTwCUu5hzAAQyfg8ABDJrAJS7mhhMCAAKThcABDKzAJS8uAMAATp8/TsABDMfAAQzLAACA62ADwABPCgEewAEM0cAAT30FAAAFi94nmbOPrIHAAQz0wCUuxouSgsABDQDAJS7WkWiDwAENDMAlLuan0obAAQ0ZwCUwmUrAAQ0lARzAAQ0sLqyOwABQIwIAAoDAAQ01wCUutofAAQ09wCUxRwDAAFQyBsAAVCCA58ABDUrAAQ1kwAENogAAqlUAAAABA8ABDWvAAQ2iAAAAAgICwAENcwAAAIf4YAPAAE6JAMABDX8AAACNdWADwABPCgAAXQOBIgFgA8AAUVYBSsABDY0BHMABDY0urI7AAFAjAgACgMABDZbAJTHugcABDZ7AJTH+AMAAVDIGwABUIYDnwAENp8ABDcHAAQ4PAACTNgAAAAEDwAENxMABDg8AAAADAwPAAQ3MAAAAj6xgA8AATokAwAEN1gAAAIuSYAPAAEyiAMABDeMAAACRaGADwABOiQAAXQOBIgFgA8AAUVYBSsABDfIBHMABDfIuiOsEAAQnkzaAwAEN/sAlMnGBwAEOBMAlMoGCwAEOCsAlMpEAwABUHwbAAFQigOfAAQ4UwAEOLsABDlUAAKpWAAAAAQPAAQ40wAEOVQAAAAEBAcABDjkAAACNdWADwABPCgAAXQOBIgFgA8AAUVYBSsABDkEBHMABDkEurI7AAFAjAgACJ5M2gMABDlHAJTMMAMAAVDIGwABUI4DnwAEOWsABDnTAAQ7EAACZkgAAAAEDwAEOeMABDsQAAAADAwPAAQ6AAAAAj6xgA8AATokAwAEOigAAAIuSYAPAAEyiAMABDpcAAACRaGADwABOiQAAXQOBIgFgA8AAUVYBSsABDqYBHMABDqYuiOsEAAQnmZKAwAEOs8AlM3mBwAEOucAlM4mCwAEOv8AlM5kAwABUHwbAAFQkgOfAAQ7JwAEO48ABDwwAAKpXAAAAAQPAAQ7qwAEPDAAAAAEBAcABDu8AAACNdWADwABPCgAAXQOBIgFgA8AAUVYBSsABDvcBHMABDvcurI7AAFAjAgACJ5mSgMABDwjAJTQUAMAAVDIGwABUJYDnwAEPEcABDyvAAQ95AACqWAAAAAEDwAEPLsABD3kAAAADAwPAAQ82AAAAj6xgA8AATokAwAEPQAAAAIuSYAPAAEyiAMABD00AAACRaGADwABOiQAAXQOBIgFgA8AAUVYBSsABD1wBHMABD1wuiOsEAAQnqliAwAEPaMAlNIGBwAEPbsAlNJGCwAEPdMAlNKEAwABUHwbAAFQmgOfAAQ9+wAEPmMABD78AAKpZAAAAAQPAAQ+ewAEPvwAAAAEBAcABD6MAAACNdWADwABPCgAAXQOBIgFgA8AAUVYBSsABD6sBHMABD6surI7AAFAjAgACJ6pYgMABD7vAJTUcAMAAVDIGwABUJ4DnwAEPxMABD97AARAyAACUwwAAAAEDwAEP5MABEDIAAAADAwPAAQ/sAAAAj6xgA8AATokAwAEP9gAAAIuSYAPAAEyiAMABEAMAAACRaGADwABOiQAAXQOBIgFgA8AAUVYBSsABEBIBHMABEBIuiOsEAAQnlMOAwAEQIcAlNYmBwAEQJ8AlNZmCwAEQLcAlNakAwABUHwbAAFQogOfAARA3wAEQUcABEH4AAKpaAAAAAQPAARBawAEQfgAAAAEBAcABEF8AAACNdWADwABPCgAAXQOBIgFgA8AAUVYBSsABEGcBHMABEGcurI7AAFAjAgACJ5TDgMABEHrAJTYkAMAAVDIGwABUKYDnwAEQg8ABEJ3AARDtAACqXAAAAAEDwAEQocABEO0AAAADAwPAARCpAAAAj6xgA8AATokAwAEQswAAAIuSYAPAAEyiAMABEMAAAACRaGADwABOiQAAXQOBIgFgA8AAUVYBSsABEM8BHMABEM8uiOsEAAQnqlyAwAEQ3MAlNpGBwAEQ4sAlNqGCwAEQ6MAlNrEAwABUHwbAAFQqgOfAARDywAERDMABETUAAKpdAAAAAQPAARETwAERNQAAAAEBAcABERgAAACNdWADwABPCgAAXQOBIgFgA8AAUVYBSsABESABHMABESAurI7AAFAjAgACJ6pcgMABETHAJTcsAMAAVDIGwABUK4DnwAEROsABEVTAARGmAAADAAAAAQPAARFZwAERpgAAAAMDA8ABEWEAAACPrGADwABOiQDAARFrAAAAi5JgA8AATKIAwAEReAAAAJFoYAPAAE6JAABdA4EiAWADwABRVgFKwAERhwEcwAERhy6I6wQABCcDgMABEZXAJTeYgcABEZvAJTeogsABEaHAJTe4AMAAVB8GwABULIDnwAERq8ABEcXAARHwAACqWwAAAAEDwAERzcABEfAAAAABAQHAARHSAAAAjXVgA8AATwoAAF0DgSIBYAPAAFFWAUrAARHaARzAARHaLqyOwABQIwIAAicDgMABEezAJTgyAMAAVDIGwABULYDnwAER9cABEfrAARMTAACAjQAAAAEDwAER/8ABExMAAAABAAABwAESBgAAAJnxYAPAAErYAWrAARINYAPAAErYP1wBPgU9F8ABEhsurIfAAFAjKcAAVAY9F8ABEjAurIjAAFAjgMABEkXAJTifwABUBz0cwAESUC6sj8AAUCMBAAEWwAESYi6siMAAUCPAAFQHAMAAVDdAIRzAARKdFsABEpYWwAESgy6sicAAUCPAAFQIgQHAAE2bgQ4BAAE0wAESoQPAARKhwAESsQAAAAEBAcABEqIAAACA+WADwABT5wAAYAPAAErYAUrAARKoARbAARKqgcABEqjAJTlLrHXAAFP2AMAATRnAARKCwAESsgBAIiGAwAESysAlOJ8BIRzAARLuFsABEucWwAES1C6sicAAUCPAAFQIgQHAAE2bgQ4BAAE0wAES8gPAARLywAETDQAAAAEBAcABEvMAAACA+WADwABT5wAAYAPAAErYAUrAARL5ARbAARMDFsABEvuBwAES+cAlOdKscsAAUCPAAFPwg2LAAE0pAMAATRnAARLJwAETDgAGwABUG4DnwAETGMABExzAARN6AgCqXgAAAAEDwAETKMABE3oAAAABAQHAARM2AAAAUGEDA2ADwABPCmADwABOiWADwABOiV0DgSIBYAPAAErYAABcAT4BPRfAARNlLqu8wABQI4DAARN1wCU6S8AAVAwGwABULoDnwAETf8ABE4TAARQEAACqXwAAAAEDwAETksABFAQAAAADAwPAAROXAAAAjXVgA8AATwoAwAETowAAAKpgYAPAAE6JAMABE8AAAACpRmADwABRhwAAXAE+AT0cwAET1xbAARPKLqyKwABQI8AAVAmAggEAAR/AARPfwABVEgMAA4DAARPwwCU6vYHAARP1wCU6zSbAARP8AYLAARP8wCU63WADwABVHAAAwABNVwbAAFQcgOfAARQJwAEUDcABFIoCAKpkAAAAAQPAARQewAEUigAAAAEBAcABFDMAAABQYQMEYAPAAE6JYAPAAEyiYAPAAE6JYAPAAE6JXQOBIgFgA8AAStgAAFwBPgE9F8ABFHAuq8vAAFAjgMABFIXAJTtwwABUDQbAAFQvgOfAARSPwAEUlMABFTsAAKplAAAAAQPAARSnwAEVOwAAAAQEBMABFLYAAACPrGADwABOiQDAARTAAAAAi5JgA8AATKIAwAEUzQAAAKpgYAPAAE6JAMABFOoAAACpRmADwABRhwAAXAE+AT0cwAEVBhbAART0LqxawABQI8AAVAqAggEAAR/AARUOwABVGwQABIDAARUgwCU76IHAARUmwCU7+ILAARUswCU8CCbAARUzAYPAARUzwCU8GGADwABVHAAAwABNVwbAAFQdgOfAARVAwAEVRMABFXICAKpiAAAAAQPAARVNwAEVcgAAAAEBAcABFVUAAABQYQMBYAPAAE8KYAPAAE6JAABcAUrAARVkARfAARVkLqyLwABQI4DAARVxwCU8tMAAVA4GwABUMYDnwAEVd8ABFYPAARbMAAGskMAAUCMAAAABA8ABFZ3AARbMAAAAAwMDwAEVsgAAAKxTYAOSowDAARXDAAAAh/hgA8AATokAwAEVzwAAAIDrYAPAAE8KAABcAT4BPTXAARXaAAABAGADkqMBgMABFdrAJT0cIxzAARXag8ABFdrAJT1RgIwBAAErAMAATfwrHMABFeSDwAEV2sAlPVFtAgABJMABFg8CJ6yRHMABFgCBwAEV+cAlPSqWwQAAAADAAE6vAYhPMsABFhxbWwMnrJInrJMnh/gcwAEWloHAARaPwCU9KpbBAAAAAMAATq8ngOscwAEWtoLAARaywCU9OoDvAAAAAMAATzKSqgFcBsAAVDKA58ABFtHAARbswAEfaAAArI7AAFAjAAAAAQPAARb0wAEfaAAAAAICAsABFvwAAACH+GADwABOiQDAARcIAAAAgOtgA8AATwoAAF0DgSIBYAPAAFNzAT4MScABFxMWwAEXFy6sh8AAUCPAAFQGPgE9MMABFykfwAEXM8AATD4BAAEnrJQAPz2JwAEXjsAlPj4cwAEXmIHAAReUwCU+PqfkAAAAAMAATzRJwAEXrxzAARe6gMABF7PAJT4ugIwBAAErAMAATpg+AT0wwAEXyx/AARfVwABL0QEAAYDAARfjwCU+LgA/ScABF/YhHMABGAGAwAEX+sAlPi6AjAEAASesKgDAAE6YPgFJwAEYFxbAARgkFsABGB+BwAEYG8AlPj6PrMAATxOA48AATo8+AT0wwAEYNx/AARhBwABL0QEAASTAARhuAieslYHAARhqwCU+PgBJwAEYfiIhHMABGI0WwAEYhoHAARiCwCU+PovewABPEICMAQABJ5mzAMAATpgAIRzAARilFsABGJ6BwAEYmsAlPj6L3sAATxCAjAEAASen1gDAAE6YPgE9MMABGLsfwAEYxcAAS9EBAAEkwAEZEAQnrJYWwAEY+4HAARj3wCU+PovewABPECesl4HAARkMwCU+PgA/P07AARkrwAEZNAAArGxgA8AAStgBHMABGUIWwAEZO4HAARk3wCU+PovewABPEICMAQABJ6fWAMAATphOwAEZV8ABGVwAAIuSYAPAAEyiARbAARligcABGV7AJT4+i5LAAE8UScABGWwcwAEZdYPAARlwwCVAKICMAQABkwDAAE3GPgE9i8ABGYPAJUAoI4LAARmUwCU/7mrAARmqYAPAAEyiwAB132rAARnIYAPAAEyihB8BYAPAAEyiP07AARoxwAEaOwAArJhgA8AAVLABasABGkNgA8AAVLDAAH02ScABGmUhHMABGnQWwAEaaS6si8AAUCPAAFQOgIwBAAErAMAATJ0+AUs+AT2MwAEbA8AlQKgfwAEbE8AAVLYBAAEmwAEbJwUcwAEbJy6si8AAUCMBAAGBwAEbMsAlPj4AwABUDmADwABOiQABAcABG0FbAcABG0gAAAEkWwABwAEbTwAAATFgA8AATl0APgFKwAEbZQEewAEbcIEsAgFgA8AAU3MChcABG33AJUE9hsABG4TAJUFIAD9OwAEbsAAAAKxTYAOSowBJwAEb8RrAARwAwABRQD4CPY3AARwfwCVBhB/AARwqkq8AAAAAPR7AARxAwABUMQMAA4XAARxbwCVBhIDAARxlwCU+LoHAARxtwCU+PgA/SsAB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I8AAVAiDaAIAAoPAASczwCVMEzTAASc4A8ABJzjAASeLAAAAAAAAAGADwABT5wE+AUrAASdDAR/AASdOwABUAgUABYPAASdgwCVME4DAASdlwCVL2IHAASdrwCVL6ILAASdxwCVL+BbAASd7LpdMwABQI8AAVAsAAMAATZMGwABUOYDnwAEn4MABJ/jAASq7AACsmcAAUCMAAAABA8ABKAbAASq7AAAABQUFwAEoDgAAAKx8YAPAAE6JAMABKBsAAACsfWADwABMogDAASg+AAAArJhgA8AAVLAAwAEoTgAAAKxsYAPAAErYAMABKGUAAACsU2ADkqMAAF0DgSIBYAPAAFPhAT4DTsABKIbAASiOAACsnV0DwABNPwFgA8AAVLgBFsABKKIWwAEomoLAASiQwCVNO6ydwABUtIEIwABNJk/AASixwAEoyQAAAZJ9YQMBW10DgSIBYAPAAFPhAAPAASjQwAEqewAAAAEBAcABKNEAAAAkWwAAXQOBIgFgA8AAU+EBPgVJwAEo4CEcwAEo7YXAASjlwCVNeYEJAAAAAMAATUFKwAEo+QEewAEpBIEsAQFgA8AAU+EBh8ABKRHAJU3fAD9OwAEpJsABKSwAAKkGYAPAAFS4ARbAASk2hcABKS7AJU15gQrAAE1DTsABKUzAASlRAACPrGADwABOiQEjFsABKVkUwAEpU8AlTjgIAKwpwABUvoDAASlkwCVNGxbAASl0FMABKW7AJU44CACPrMAAVLoBYAPAAE6JTsABKYTAASmJAACLkmADwABMogEjFsABKZEUwAEpi8AlTjgIAKwpwABUvoHAASmcwCVNKxbAASmsFMABKabAJU44CACLksAAVLsBYAPAAEyiSsABKbgBHMABKmIcwAEp9RzAASm/LqyFwABQIwMAAxTAASnUwCVOYAkAFMABKdrAJU6xCgCDwAEp4MAlTUsAwABUOJJ9BQAFgMABKf3AJU0bgcABKgbAJU0rFMABKg/AJU44CAAuhMABKhzAJU1bAMAAVACBGgEAAYbAASptwCVNtwCBNkrAASqCARzAASqQhsABKonAJU23bgEAAR/AASqVwABRqwEAASesngAAAAbAAFQ6gOfAASrAwAEq0cABLNMAAKvGwABQIwAAAAEDwAEq4cABLNMAAAACAQLAASrmAAAAjXVgA8AATwoAwAErAgAA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hryGwgatDwBgA8AATKIBaobBYAPAAEyihEgEwABVUYDshteG3gaqhgBgA8AATKIBaobcYAPAAEyihEsEwABVUoDshvOG+gaqhQBgA8AATKIBaob4YAPAAEyihE4EwABVU4Dshw+HFgarFABgA8AATKIBaocUYAPAAEyibwTAAFVUgOyHK4c5Bq0QAGADwABMogFqhzdgA8AATKKflATAAFVVgOyHTodYBoV4AGADwABMogFqh1ZgA8AATKKEVwTAAFVWgOyHbYd2Bq0RAGADwABMogFqh3RgA8AATKKEWgTAAFVXgOyHi4eVBoV7AGADwABMogFqh5NgA8AATKKEYATAAFVYgOyHqoezBq0SAGADwABMogFqh7FgA8AATKKEYwTAAFVZgOyHyIfQBq0TAGADwABMogFqh85gA8AATKKe0wTAAFVagOyH5YfvBoV+AGADwABMogFqh+1gA8AATKKEaQTAAFVbgOyIBIgTBq0UAGADwABMogFqiBFgA8AATKKghATAAFVcgOyIKIgyBq0VAGADwABMogFqiDBgA8AATKKGdAEFwABVXgAAAAAEAAADAAAAAAAAAAAAYAPAAFVOAT8BCQEAwABOBQAAAAAAAAAlyU0AAAAAAsAAVV+A7IhjiGmNZQOtFgAAAWADwABN7wAAHQTAAFVhgOyIhYiOBq0XAGADwABMogFqiI1gA8AATKIaBMAAVWKA7IijiMYGrRgAYAPAAEyiAWqIxWADwABMohQEwABVY4DsiNuI9AatGQBgA8AATKIBaojzYAPAAEyiFgTAAFVkgOyJCYkgBq0aAGADwABMogFqiR9gA8AATKJMBMAAVWWA7Ik1iUkGrRsAYAPAAEyiAWqJSGADwABMohgEwABVZoDsiV6JewatHABgA8AATKIBaol6YAPAAEyihC0EwABVZ4DsiZCJpwatHQBgA8AATKIBaommYAPAAEyiTgTAAFVogOyJvInZBq0eAGADwABMogFqidhgA8AATKKF8QTAAFVpgOyJ7ooNBq0fAGADwABMogFqigxgA8AATKIcBMAAVWqA7IoiijoGrSAAYAPAAEyiAWqKOWADwABMooRIBMAAVWuA7IpPimAGrSEAYAPAAEyiAWqKXmADwABMooRLBMAAVWyA7Ip1ioYGrSIAYAPAAEyiAWqKhGADwABMoogRBMAAVW2A7Iqb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asAAQUtgA8AATKJvAMAATcY+AT0XwABBXS6ArsAAUCNqwABBbWADwABMohjAAFW0PgJJwABBniIiHMAAQbZqwABBqV0DwABNRgFgA8AAStjAAH2TgtEBAAGAwABBt8Al5qoAwABNVQEcwABB1YDAAEHQwCXmqoCMAQABasAAQeJgA8AATKKETgDAAE3GARzAAEH9gMAAQfjAJeaqgIwBAAFqwABCCmADwABMooRLAMAATcY+AT0wwABCHh/AAEIowABRqwEAASetXAA/PRzAAEJzFsAAQmsurUTAAFAjwABVuYCCAQABgMAAQnfAJeaqAMAATVdCwABClAABwABCsGrAAEKwYAPAAEyiGAA+AknAAELMHMAAQtWAwABC0MAl5qqAjAEAAWrAAELiYAPAAEyibwDAAE3GPgNJwABC9BzAAEMSFsAAQwsWwABC+C6tRcAAUCPAAFW6gcjAAE12gIwBAAGTAMAATcY+AT0wwABDKB/AAEMywABRqwEAASetYAA/PRfAAENyLoCuwABQI2rAAEOCYAPAAEyihC3AAFW0PRfAAEOpLq1BwABQI5PAAFW1PgJJwABD3yIcwABD6IDAAEPjwCXmqoCMAQABasAAQ/VgA8AATKKETgDAAE3GARzAAEQAgMAAQ/vAJeaqgIwBAAFqwABEDWADwABMooRLAMAATcY+AT0wwABEIR/AAEQrwABRqwEAASetYAA/PRzAAER+FsAARGsurUXAAFAjwABVuoCCAQABgMAARILAJeaqAMAATVdCwABEnwABwABEu2rAAES7YAPAAEyihC0APgJJwABE4BzAAET2FsAAROQurUHAAFAjwABVtYC7AQABFsAARQhqwABE/10DwABNRgFgA8AATKLAAH19gcjAAE12AMAATdA+Aj0cwABFHi6tX8AAUCMCAAKAwABFJsAl5qocwABFOWrAAEUzXQPAAE1GAWADwABMosAAfG+C0QEAARbAAEU6Lq1BwABQI8AAVbUAwABNVQDAAFXePRfAAEVbLq1BwABQIxzAAEVsFsAARVsurUHAAFAjwABVtYENAQABlADAAE3IwABVtUnAAEWBHMAARZcWwABFhS6tQcAAUCPAAFW1gIwBAAEWwABFqmrAAEWhXQPAAE1GAWADwABMosAAfX2ByMAATXYAwABNxj4BScAARcAcwABFyYDAAEXEwCXmqoCMAQABasAARdZgA8AATKKe0wDAAE3GPgM9F8AARg0urUjAAFAjasAARilgA8AATKIWwABVvT0XwABGPy6rQsAAUCMpwABVvz0XwABGay6tQcAAUCMcwABGfBbAAEZrLq1BwABQI8AAVbWBDQEAAZQAwABNyMAAVbVJwABGkxzAAEacgMAARpfAJeaqgIwBAAFqwABGqWADwABMooRjAMAATcY+Az0XwABG4S6tSMAAUCNqwABG/WADwABMohTAAFW9PRfAAEcTLqtCwABQIyrAAFW/PRfAAEdALq1BwABQIxzAAEdRFsAAR0AurUHAAFAjwABVtYENAQABlADAAE3IwABVtT4BPTDAAEd4H8AAR4LAAFGrAQABJ61dAD4BScAAR9ccwABH4IDAAEfbwCXmqoCMAQABasAAR+1gA8AATKKETgDAAE3GPgE9F8AASAEugK7AAFAjasAASBFgA8AATKJOwABVtD4DPRzAAEhJLq1fwABQIwIAAoDAAEhRwCXmqmrAAEhhYAPAAEyihEsAwABV3j0XwABIdC6tQsAAUCNqwABIkGADwABMohTAAFW2PRfAAEinLoCuwABQI2rAAEi3YAPAAEyihEvAAFW0QsAASOkAAcAASQVqwABJBWADwABMok4APgQ9HMAASSQurV/AAFAjAgACgMAASSzAJeaqasAASTxgA8AATKKESwDAAFXePRfAAElLLq1CwABQI2rAAElnYAPAAEyiFMAAVbY9F8AASXougK7AAFAjasAASYpgA8AATKKES8AAVbRCwABJogABwABJvmrAAEm+YAPAAEyihfEAPgJJwABJ4xzAAEnsgMAASefAJeaqgIwBAAFqwABJ+WADwABMom8AwABNxj4BPRfAAEoLLoCuwABQI2rAAEobYAPAAEyiHMAAVbRJwABKSRzAAEpSgMAASk3AJeaqgIwBAAFqwABKX2ADwABMooROAMAATcY+AT0XwABK5i6ArsAAUCNqwABK9mADwABMooRIwABVtD4CPRfAAEsrLq1DwABQIxzAAEs8FsAASysurUPAAFAjwABVuIENAQABlADAAE3IwABVuEnAAEtMIiIcwABLVYDAAEtQwCXmqoC7AQABNzAAwABN0AEcwABLZIDAAEtfwCXmqoKMAQABNzkAwABN0gEcwABLgBbAAEtuLq1DwABQI8AAVbiCjAEAAZYAwABN0j4BPTDAAEuVH8AAS5/AAFGrAQABJ61hAD4BPRfAAEvxLqvjwABQIxzAAEwXHMAATBAcwABMCxbAAEv/LqvjwABQI8AAVbeDxgEAATcKAMAATcqBDQEAAYDAAEwSwCXmqgDAAE3IgQYBAAE3MADAAE3JwABVt0LAAExDAAHAAExfasAATF9gA8AATKIcAD4CScAATIYcwABMj4DAAEyKwCXmqoCMAQABasAATJxgA8AATKKETgDAAE3GPgE9F8AATK4ugK7AAFAjasAATL5gA8AATKKESMAAVbQ+AknAAEzzIhzAAEz8gMAATPfAJeaqgIwBAAFqwABNCWADwABMooROAMAATcYBHMAATRSAwABND8Al5qqAjAEAAWrAAE0hYAPAAEyihEsAwABNxj4BPTDAAE01H8AATT/AAFGrAQABJ61iAD89HMAATZ0WwABNii6tRcAAUCPAAFW6gIIBAAGAwABNocAl5qoAwABNV0LAAE2+AAHAAE3aasAATdpgA8AATKKESAA+BT0cwABN+i6tX8AAUCMCAAKAwABOAsAl5qpqwABOEmADwABMooRLAMAAVd49HMAATi4WwABOIS6tQsAAUCPAAFW2gIwBAAFqwABOPmADwABMohoAwABNxknAAE5SIhzAAE5iFsAATlYuq+PAAFAjwABVt4C7AQABN2QAwABN0AEcwABOdxbAAE5rLqvjwABQI8AAVbeCjAEAATeCVwDAAE3SPgE9MMAATowfwABOlsAAUasBAAEnrWEAPgFJwABPJyIiHMAATzcWwABPKy6r48AAUCPAAFW3gVsBAAE3gMcAwABN0QEcwABPXRbAAE9RLqvjwABQI8AAVbeAjAEAATeAzADAAE3GARzAAE+DFsAAT3cuq+PAAFAjwABVt4CMAQABN4EwAMAATcY+AT0XwABPmy6tS8AAUCMpwABVwj89F8AAT9YugK7AAFAjasAAT+ZgA8AATKKES8AAVbRCwABP/gABwABQGmrAAFAaYAPAAEyihEsAPgM9F8AAUDIuqz7AAFAjH8AAUEHAAFJEAQABFsAAUE4uid3AAFXoAMAAVcRJwABQYhzAAFBrgMAAUGbAJeaqgIwBAAFqwABQeGADwABMooROAMAATcY+AT0XwABQii6ArsAAUCNqwABQmmADwABMolTAAFW0ScAA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BMAAVl+A74OLg54GrZsAYAPAAEyiAWqDmmADwABMosAAftsEwABWYIDvg9+D/QatnAFqg6RgA8AASovAAH7iYAPAAEyiAWqD8GADwABMosAAaKoEwABWYYDvhDmETwatngFqhAJgA8AASovAAH70YAPAAEyiAWqERmADwABMosAAfq8EwABWYoDvhI+ErQatoAFqhFRgA8AASovAAH8GYAPAAEyiAWqEoGADwABMosAAfrMEwABWY4DvhO+FEQatogFqhLJgA8AASovAAH8YYAPAAEyiAWqFAmADwABMosAAfrcEwABWZIDvhVCFbAatpAFqhRZgA8AASovAAH8qYAPAAEyiAWqFYGADwABMosAAfrsEwABWZYDvha+F1AatpgFqhXFgA8AASovAAH88YAPAAEyiAWqFxGADwABMosAAfr8EwABWZoDvhhaGOAatqAFqhdlgA8AASovAAH9OYAPAAEyiAWqGKWADwABMosAAfsMEwABWZ4DvhoKGtgatqgFqhj1gA8AASovAAH9gYAPAAEyiAWqGn2ADwABMosAAfscEwABWaIDvhviHGgatrAFqhrtgA8AASovAAH9yYAPAAEyiAWqHC2ADwABMosAAfssEwABWaYDvh1qHeQatrgFqhx9gA8AASovAAH+EYAPAAEyiAWqHbGADwABMosAAfs8EwABWaoDvh8WH/AatsAFqh35gA8AASovAAH+WYAPAAEyiAWqH42ADwABMosAAftMEwABWa4DviEKIbQaKZgFqiAFgA8AASouOiWADwABMogFqiFpgA8AATKLAAH7XBMAAVmyA74isiMgGrbIBaohyYAPAAEqLwAB/qGADwABMogFqiLxgA8AATKLAAH7bAQXAAFZuAAAAAAQAAAMAAAAAAAAAAABgA8AAVlEBPwEJAQDAAE4FAAAAAAAAACZIyQAAAAACwABWb4DviniKfqHlg620AAABYAPAAE3vAAAJBMAAVnGA74yQjMUGrbUAYAPAAFZvAWqMsWADwABWb8AAf7cEwABWcoDvjRmNNQattgFqjMpgA8AASovAAH/bYAPAAFZvAWqNI2ADwABWb8AAf7cEwABWc4Dvjd+OHgatuABgA8AAVm8Bao38YAPAAFZvtvQEwABWdIDvjm6OggatuQFqjiNgA8AASovAAH/tYAPAAFZvAWqOdGADwABWb7b0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ogFqsThgA8AATKIaBMAAVo6A77F5sYQGrdUBarFHYAPAAEqLwACAHWADwABMogFqsYBgA8AATKIUBMAAVo+A77G+sc8GrdcBarGJYAPAAEqLwACAL2ADwABMogFqschgA8AATKIWBMAAVpCA77IIshcGmBEBarHUYAPAAEqLsmJgA8AATKIBarIRYAPAAEyiTATAAFaRgO+0f7SLGK3ZAGADwABLdAErAQXAAFakgO+5r7pCuk0AAAFqubBgA8AASovAAIBBA7pLuk0AAAAAAAAAYAPAAFaHAT8BCQG6QsAATgUAAAAADQbAAFaTgO+4fLiVuaoAAZJ9AAAAAQO4nLmqAAAABAEBuKQAAACNdWADwABOiQADuMUAAACTO10DwABNBAFgA8AATokBagBgAcAATawCuO8AAACZnl0DwABNeAJgA8AATolbAWoAYAHAAE2sArkVAAAAmddgA8AAVm8BarlDYAPAAFZvwAB/t10DgSIBYAPAAFaHAUq5YQEeuXDAAFeCBAADgLl4wCZVJIG5fcAmVTOCuYjAJlVRAZnXg7mewCZVcAbAAFaZgO++Bb4Nv78EAa3bAAAAAQO+Kb+/AAAABAEBvjEAAACRnmADu5MAA75HAAAAku5gA8AATokBagBgAcAATawCvlwAAACt3GADwABK2AFqAGABwABNrAK+gQAAAJnXYAPAAFZvAWq+oWADwABWb8AAf7dgA8AAVocBPgJJvrwcvsuCvsDAJlYIgIwBAAErAMAATfw+AT0wvtwfvubAAEvRAQABJL7zAiet3Set3gA/Sr9iAR+/bcAAV54EAASAv5HAJlXkgb+ZwCZV8YO/o8AmVh+Cv7DAJlYIAAbAAFabgO/AAEACwABACsAAQBQBAq3fAAAAAQPAAEAUwABAFAAAAAAAAABgA8AATKIABsAAVpyA78AAQNHAAEDcwABA5gECreAAAAABA8AAQObAAEDmAAAAAAAAAGADwABOiQAGwABWnYDvwABB48AAQe7AAEH2AQKS7gAAAAEDwABB9sAAQfYAAAAAAAAAYAPAAE6JAAbAAFaegO/AAEKQwABCmMAAQqEBAq3hAAAAAQPAAEKhwABCoQAAAAAAAABgA8AATKIABsAAVp+A78AAQz/AAENKwABDVQECreIAAAABA8AAQ1XAAENVAAAAAAAAAGADwABOiQAGwABWlIDvwABEV8AARF7AAER+AAKAjQAAAAEDwABEY8AARH4AAAACAALAAERpAAAAhrVgA8AATKIBagBgAcAATawCwABEdgAAAK3jYAPAAE6JAWoAYAHAAE2sAgBdA4EiAVsABsAAVpWA78AARQ/AAEUUwABFMgACgIIAAAABA8AARRfAAEUyAAAAAQEBwABFLQAAIDtbAABcAAbAAFaWgO/AAEYcwABGI8AARjsAAoCHAAAAAQPAAEYswABGOwAAAAEBAcAARjQAACBAXQOB1gFbAABdA4EiAVsABsAAVpeA78AARxfAAEccwABHOAACmZgAAAABA8AARyfAAEc4AAAAAQEBwABHMgAAAIZSXQPAAE1GAWADwABMogAAXAAGwABWoIDvwABHgsAAR5TAAEe5AQGqUgAAAAEDwABHnsAAR7kAAAAAAAAAYAPAAE6JAUrAAEehARrAAEewwABXlQbAAFaigO/AAEgFwABIEMAASFoCAapSAAAAAQPAAEgZwABIWgAAAAEBAcAASCEAAACqUmADwABOiQAAXAE+AT0bwABIQcAAV5uAwABITcAmWScAACZVBAAmVcQAJlaiACZW1AAmVwYAJlc4ACZXagAmV5wAJlgAACZYNwAmWHgAJli8ACZY/QAmWU8AAAANAsAAVqWA78AASF/AAEhlwABJE4Ot5AAAAWADwABN7wABYAO0OQEEwABWp4DvwABIoMAASKcJgSIAYAPAAE6JAAEFwABWq4DvwABIrMAASLLAAEjZAQAAA8AASMTAAEjZAAAAAQABwABIywAABIEiYAPAAE6JAWrAAEjVYAPAAE6JYgBgA8AAVqUBPwIIAcAAVqeAAMAmWfIJAcAASLLAAE4FAAAAAAEGwABWqYDvwABI3sAASOXAAEkRAACA7wAAAAEDwABI7cAASREAAAAAAAAAYAPAAE6JAUrAAEjzASTAAEkRAiet5RbAAEkJLoEiwABWpwAAJlozACZagAAAAAECwABWrIDogmuCcYLiA63mAAABYAPAAE3vAAADBMAAVq6A6IKcgqQGrecAYAPAAEyiAWqCo2ADwABMohoEwABWr4DogrmCwQaqKgBgA8AATKIBaoLAYAPAAEyiFATAAFawgOiC1oLgBqozAGADwABMogFqgt9gA8AATKIWAQXAAFayAAAAAAQAAAMAAAAAAAAAAABgA8AAVqwBPwEJAQDAAE4FAAAAAAAAACZbNQAAAAACwABWs4DoguWC64UbA63oAAABYAPAAE3vAAAQBMAAVrWA6IMRgyEGrekAYAPAAEyiAWqDIGADwABMohoEwABWtoDogzaDPgaqKgBgA8AATKIBaoM9YAPAAEyiFATAAFa3gOiDU4NdBqozAGADwABMogFqg1xgA8AATKIWBMAAVriA6INyg4AGreoAYAPAAEyiAWqDf2ADwABMokwEwABWuYDog5WDowat6wBgA8AATKIBaoOiYAPAAEyiGATAAFa6gOiDuIPGBq3sAGADwABMogFqg8VgA8AATKKELQTAAFa7gOiD24PpBq3tAGADwABMogFqg+hgA8AATKJOBMAAVryA6IP+hAwGre4AYAPAAEyiAWqEC2ADwABMooXxBMAAVr2A6IQhhCoGre8AYAPAAEyiAWqEKWADwABMohwEwABWvoDohD+ERwat8ABgA8AATKIBaoRGYAPAAEyihEgEwABWv4DohFyEZQat8QBgA8AATKIBaoRjYAPAAEyihEsEwABWwIDohHqEiQat8gBgA8AATKIBaoSHYAPAAEyiiBEEwABWwYDohJ6ErQat8wBgA8AATKIBaoSrYAPAAEyihDAEwABWwoDohMKE0Qat9ABgA8AATKIBaoTPYAPAAEyihE4EwABWw4DohOaE9Qat9QBgA8AATKIBaoTzYAPAAEyin9sEwABWxIDohQqFGQat9gBgA8AATKIBaoUXYAPAAEyiUQEFwABWxgAAAAAEAAADAAAAAAAAAAAAYAPAAFazAT8BCQEAwABOBQAAAAAAAAAmXY4AAAAAAsAAVseA6IUehSSFbAOt9wAAAWADwABN7wAAAQTAAFbJgOiFR4VMCYZSAF0DwABNRgFgA8AATKIAAQXAAFbLgOiFUIVQhWoAAAADhV6FagAAAAEBAYVkAAAEhlJdA8AATUYBYAPAAEyiAABgA8AAVscBPwIIAcAAVsmAAMAmXewJAYVQwABOBQAAAAAAAAAmXiQAAAAAAsAAVsyA6IYxhjeG5wOt+AAAAWADwABN7wAAAgTAAFbOgOiGXIZnGKtqAGADwABOiQAEwABWz4Dohm+GfBiTygBgA8AATKIAAQXAAFbTgOiGgIaAhsEAAAADhpmGwQAAAAIAAoagAAAEq2pgA8AATokBagBgAcAATawChrIAAASTymADwABMogFqAGABwABNrAIAYAPAAFbMAT8DCAHAAFbOgADAJl6RCAHAAFbPgQDAJl6oCQGGgMAATgUAAAAAAQbAAFbRgOiGxYbMhuUAAIDvAAAAAQOG1IblAAAAAAAAAGADwABOiQFKhtoBFobaLqtqwABWzgAAJl7uACZfJAAAAAECwABW1IDoiISIirDkA635AAABXQOCRwJdA8AATUYBYAPAAEyiWwABXQOCHAFdA8AATUYBYAPAAEyiHgTAAFbWgOiJSIlRBq0XAGADwABMogFqiVBgA8AATKIaBMAAVteA6IlmiXMGrfoAYAPAAEyiAWqJcmADwABMohQEwABW2IDoiYiJlAat+wBgA8AATKIBaomTYAPAAEyiFgTAAFbZgOiJqYmxBq38AGADwABMogFqibBgA8AATKJMBMAAVtqA6InGidEGrf0AYAPAAEyiAWqJ0GADwABMohgEwABW24DoieaJ8AaYEQBgA8AATKIBaonvYAPAAEyihC0EwABW3IDoigWKEAatMQBgA8AATKIBaooPYAPAAEyiTgTAAFbdgOiKJYovBq3+AGADwABMogFqiitgA8AATKJ1BMAAVt6A6IpEik8Grf8AYAPAAEyiAWqKS2ADwABMonIEwABW34DoimSKbwauAABgA8AATKIBaoprYAPAAEyibwTAAFbggOiKhIqPBq4BAGADwABMogFqiotgA8AATKJUBMAAVuGA6IqkirAGrgIAYAPAAEyiAWqKrWADwABMolEEwABW44DoirmKxxiArsAAUCMAYAPAAEyiAWqKwmADwABMohoEwABW5IDoitCK3BiuA8AAUCMAYAPAAErYASoEwABW5YDoiuWK+BiuBMAAUCMAYAPAAErYASoEwABW5oDoiwCLDBiuBcAAUCMAYAPAAEyiARyLCpSD6wAAAADAAEzFBMAAVueA6IsUix0YhADAAFAjAGADwABMogEcixuUg+sAAAAAwABMxQTAAFbogOiLJos1GK4GwABQIwBgA8AAStgBKgTAAFbpgOiLPYtUGK4HwABQIwBgA8AATKIBHItSlIPrAAAAAMAATMUEwABW6oDoi1yLeRiuCMAAUCMAYAPAAEyiAZcEwABW64Doi4GLnBiuCcAAUCMAYAPAAEyiARyLmpSD6wAAAADAAEzFBMAAVuyA6Iuki7cYrgrA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wCZzHwDAAE3IgKEBAAGWAMAATLoAwABNVWADwABMogDAAEy7TqKioqwAAK4cYAOtyAEeorKu3wQABIaiusAmcwuGosDAJnMLhqLGwCZzC4aizMAmcwsATqLnovMAAK4dYAOshwEeovmsjQMAAxajHoKjF8AmcJSBwavaHKM7FqMtgqMmwCZwlIadq9iBDQEAAYCjPcAmcHgAwABNyIWjRMAmcsMARaNZAaNio2QAAINmYAPAAEyiAZMBHKNrFKNpwCZ0aQkAgLsBAAEWo3kUo23AJnQYCACByMAATXYAwABN0AEVo4HAJnRpCRyjghSjgcAmdGkJAIENAQABlADAAE3IPgE9NaOSAAABAGADrIcBFKOSwCZ0GAgANaOeAAABAGADwABMogEUo57AJnRpCQAco50Uo5LAJnTGCgCBDAIAAhSjnsAmdNsLAByjoRyjnRSjksAmdMYKAILRAQABFKOewCZ02wsAAMAATVWAowEAAYejpMAmc+UArtAAwABNVk6jy6PRAAGGUmADwABMogEco96Fo9PAJnLDg8YBAAFqo+BgA8AATKJUAMAATco9iKP0wCZweByj+oCj9MAmcHiBDQEAARSj/cAmdUIJAADAAE3IPYmkDMAmcIYcpBOBpAzAJnCGgQYBAAEUpBbAJnVCCQAAwABNyT8/TqRMpFAAAYRUYAPAAEyiARykWICkUsAmcHiBDQEAAYGkWsAmcIYAwABNyEWkZgGkb6RxAACDZmADwABMogGApHPAJnB4ARykfISkesAmdeqAuwEAAYOkfsAmdbwAwABN0AGMpIPAJnXqHKSEhKSDwCZ16oENAQABlADAAE3IPgE9NaSQAAABAGADrBcBgqSQwCZwlDWklwAAAQBgA8AATKIBhKSXwCZ16hykloWkkMAmdj2BDAIAAoakl8AmdlAcpJocpJaFpJDAJnY9gtEBAAGGpJfAJnZQAMAATVWAowEAASakqgUcpKoWpJ0urg3AAFAjwABW8ILRAQABHKS9NaSrAAABAGADwABMogEWpKsurgrAAFAjwABW7DWkqwAAAQBgA8AATKIBF6SrLq4KwABQIxykuoekq8AmdruBDQEAAZQAwABNyMAAVuyHpKvAJna7gKEBAAGWAMAATLoAwABNVWADwABMogDAAEy8AMAATVYGwABW/IDopNCk1aY5AACuFMAAUCMA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AQABaq9wYAPAAEyiHADAAE3GARyviRavgS6uBcAAUCPAAFbmgIwBAAFqr51gA8AATKKESADAAE3GARyvtRavrS6uBcAAUCPAAFbmgIwBAAFqr8lgA8AATKKESwDAAE3GBsAAVwKA6K/Wr9uw4gAAriHAAFAjAAAAAQOv77DiAAAAAAAAAFwBPghJr/giIRywAxav/C6ArsAAUCPAAFbjgIwBAAFqsAZgA8AATKKELQDAAE3GACEcsBcWsBAugK7AAFAjwABW44CMAQABarAaYAPAAEyiTgDAAE3GPRewIy6ArsAAUCNqsCxgA8AATKIawABW4z89F7A3Lq4DwABQIyrAAFbkPRewSS6uBcAAUCMcsFOUg+sAAAAAwABMxcAAVuY9F7BbLoQAwABQIxywYpSD6wAAAADAAEzFwABW5z0XsGourgfAAFAjHLB/lIPrAAAAAMAATMXAAFbpPRewhy6uCMAAUCOXwABW6j0XsKourgnAAFAjHLDDlIPrAAAAAMAATMXAAFbrPRewyy6uCsAAUCOTwABW7AAAJmOrACZkeQAmZOkAJmUoACZwVAAmdy4AJngCACZ4WwAmec4AJntMACZ+BQAmfqwAJn/lAAAADALAAFcFgOiw57DtsUIDriMAAAFgA8AATe8AAAEEwABXB4DosRCxFwmZlgBdA8AATUYBYAPAAEyiAAEFwABXCYDosRuxG7FAAAAAA7EpsUAAAAABAAGxMAAABJmWXQPAAE1GAWADwABMogFqsTpgAcAATawCAGADwABXBQE/AggBwABXB4AAwCaAcwkBsRvAAE4FAAAAAAAAACaAtQAAAAACwABXCoDosUWxS7GgA64kAAABYAPAAE3vAAABBMAAVwyA6LFusXUJmZYAXQPAAE1GAWADwABMogABBcAAVw6A6LF5sXmxngAAAAOxh7GeAAAAAQABsY4AAASZll0DwABNRgFgA8AATKIBarGYYAHAAE2sAgBgA8AAVwoBPwIIAcAAVwyAAMAmgRMJAbF5wABOBQAAAAAAAAAmgVUAAAAAAsAAVw+A6LHxsffAAEe6A64lAAABXQOCRwJgA8AAUQtgA8AAVocAAWADwABWgQMEwABXEoDospWy1AmAwMAAUCMAXQOCXgFgA8AAVocBHrKtgmoBAWADwABWhwABgPspBMAAVxOA6LLwswEJribAAFAj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AJS5YAPAAFELAMAAQCcAAACIe2ADwABRGwDAAEBEAAAAmddgA8AAVm8AAGADwABXHgE+BU7AAEBbwABAawAArjJgA8AATokBHMAAQH0WwABAdYDAAEBtwCaMVpmewABRESIBAAEnrjMAwABQzD0jHMAAQLWDwABApcAmjJGAjAEAASsAwABOmIvAAEClwCaMkScAKwFgA8AATolOwABAxsAAQMkAAK40YAPAAFDWAR7AAEDXwABQ2gIAAYPAAEDdwCaMkQGqJCeHWEnAAEEIIhbAAEEYgsAAQQzAJox2kwzAAFZ5ABzAAEEsFsAAQSaEwABBI8AmjPgiwABQ3YCMAQABasAAQT5gA8AATonAAH//AMAATpg+Bk7AAEFfwABBZAAAlcZgA8AAVswBHMAAQXKCwABBZsAmjHatyMAAUCMBAAGEwABBgMAmjPgAwABWfj0cwABBnRbAAEGVgcAAQYzAJoxmmZ7AAFEkgIICAAInrjMWwABBwoXAAEG9wCaNdatqwABWzgDAAFDNTsAAQdrAAEHyAACtvGADwABK2AEiHMAAQg0WwABCAoTAAEH/wCaM+If5wABQ3oLpAQABasAAQhlgA8AATonAAIAFAMAATYsAFsAAQlCCwABCRMAmjHatvMAAVnZOwABCdMAAQowAAK27YAPAAErYASIcwABCpxbAAEKchMAAQpnAJoz4h/nAAFDegukBAAFqwABCs2ADwABOicAAgAIAwABNiwAWwABC6oLAAELewCaMdq27wABWdU7AAEMOwABDFgAAmzZgA8AAVx4BH8AAQxzAAFcuBQAABa28hsAAQ1zAJo3prbuHwABDmMAmjkWtvhbAAEPVhcAAQ9DAJo11k8rAAFbPrb0WwABECIXAAEQDwCaNdZPKwABWz63cKUrAAEQ7ARTAAERCwCaOoQgAP0rAAERWASsGwABXG4DowABEasAARHbAAEe4AAGuNcAAUCMAAAABA8AARIfAAEe4AAAAAQEBwABElAAAAJS5YAPAAFELAABgA8AAStgBPgxJwABEoyEcwABEthbAAESvgMAARKfAJo9Nh/jAAFEOgIwBAAEnmdMAwABOmD4BSsAARMgBKj9JwABE4BzAAEUSHMAARPMWwABE7IDAAETkwCaPTZmewABREYLRAQABasAARQBgA8AATonAAHB0AMAAUMuAjAEAASsAwABNcD4BSsAARSMBKj9OwABFQMAARUoAAK1nYAPAAErYASo9HMAARYUcwABFZhbAAEVfgMAARVfAJo9NmZ7AAFERgtEBAAFqwABFc2ADwABOicAAcHQAwABQy4ESAQABNMAARY0DwABFjcAAReEAAAABAQHAAEWVAAAAImADwABOiQAAYAHAAE2sAT4BScAARaQcwABFvBzAAEWugsAARajAJpBUhvsAAAAAwABOroCMAQABJ6mgAMAATpg9icAARcrAJo/vKT8AwABNFEnAAEXoIYHAAEXtwCaP70rAAEX4ASo/TsAARhHAAEYZAACpoGADwABOiQEcwABGKxbAAEYjgMAARhvAJo9NmZ7AAFERIgEAAWrAAEY9YAPAAE6JwABw1ADAAFDMScAARlEiHMAARl2CwABGVcAmkMWAjAEAASsAwABOmAEhHMAARn4cwABGcILAAEZowCaQxYb7AAAAAMAATq6AjAEAASeuKwDAAE6YPgFKwABGlgEqP07AAEa1wABGvQAAid1gA8AATokBHMAARs8WwABGx4DAAEa/wCaPTZmewABRESIBAAEnrjYAwABQzEnAAEbzIhzAAEb/g8AARvfAJpFfgIwBAAErAMAATpgBIRzAAEcSg8AARwrAJpFfgIwBAAEnpFEAwABOmD4BSsAARyMBKj9OwABHQsAAR0YAAILSYAPAAE6JARzAAEdYFsAAR1CAwABHSMAmj02ZnsAAUREiAQABJ64sAMAAUMxJwABHeBzAAEeAhMAAR3zAJpHegIwBAAErAMAATpg+AUrAAEeRASo/SsAAR6kBKQAAJoKFACaD6QAmhf0AJowuACaPHwAmkkUAAAAFAsAAVx6A6MAAR73AAEfDwABSfwOuNwAAAWADwABN7wAABwTAAFcggOjAAEfowABH/xitvABgA8AAStgABMAAVyGA6MAASAjAAEgfGK27AGADwABK2AAEwABXIoDowABIJ8AASDoYrb0AYAPAAEyiAATAAFcjgOjAAEhCwABIVRitvgBgA8AATKIABMAAVySA6MAASF7AAEhoGK3cAGADwABK2AAEwABXJYDowABIe8AASIIYhlMAYAO0qgErBMAAVyaA6MAASJTAAEibGIZQAGADtKoBKwEFwABXLoDowABIoMAASKDAAEm6AAAAA8AASLvAAEm6AAAABQAABcAASMkAAAStvWADwABMogFqwABI7WADwABMolHAAEkNAAAErb5gA8AATKIBasAASTFgA8AATKJRwABJUQAABK28YAPAAErYAWrAAElqYAPAAErYP8AASXwAAAStu2ADwABK2AFqwABJlWADwABK2D/AAEmnAAAErdxgA8AAStgBasAASbNgA8AAStg/YAPAAFceAT8GCAHAAFcigADAJpNfCAHAAFcjgQDAJpN7CAHAAFcgggDAJpOXCAHAAFchgwDAJpOzCAHAAFckhADAJpPPCQHAAEigwABOBQAAAAAEBsAAVymA6MAASb/AAEnEwABKjwAArjjAAFAjAAAAAQPAAEnSwABKjwAAAAAAAABcAT4BScAASdscwABJ5xbAAEnfLoZTwABXJYCMAQABKwDAAE38PgE9F8AASfguhlMewABKBrStAgAAApF6IxbAAEo5Lq3cwABXJBbAAEpGLq29wABXIhbAAEpcLq2+wABXIwFgA8AATKKRfCnAAFclPwbAAFcqgOjAAEqUwABKmcAAS2QAAK45wABQIwAAAAEDwABKp8AAS2QAAAAAAAAAXAE+AUnAAEqwHMAASrwWwABKtC6GUMAAVyaAjAEAASsAwABN/D4BPRfAAErNLoZQHsAAStu0rAIAAAKReiMWwABLDi6t3MAAVyQWwABLGy6tvsAAVyMWwABLMS6tvcAAVyIBYAPAAEyikXwpwABXJj8GwABXK4DowABLacAAS3PAAE1tAACuIgAAAAEDwABLicAATW0AAAABAQHAAEuUAAAAgvddA8AATUYBYAPAAEyiAABgA6wXAT4KPRzAAEufLq44wABQIwAAAADAAFcpTsAAS7rAAEu/AAA7XQPAAE1GAWADwABMogExwABLxmADwABMogA9HMAAS9OBwABLzsAmld6DawEAAYDAAEvawCaVqQDAAE1YPRzAAEvpgcAAS+TAJpXeg2sBAAFqwABL8F0DwABNRgFgA8AATKLAAIBTAMAATVg9HMAATB4WwABMFi6GU8AAVyWI6QMAA4HAAEwmwCaV3pMWwABMNIHAAEwvwCaV3oHIwABNdgC0r07AAExHwABMTgABgOZgA7QFAR7AAExUtAcAAAAATsAATHIAAACUAV0DwABNRgFgA8AATKIAQ8AATHwhHMAATJ+LwABMhMAmlqocwABMkhbAAEyKLoZTwABXJZF3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AFxtAAAAqnVgA8AAStgAAF0DwABNBAFdA8AATUYBYAPAAEyiAT4OTsAAXITAAFyJAACExWADwABK2AEhgsAAXIzAJqTnTsAAXMfAAFzSAACuRmADwABMogEjHMAAXNmBwABc1MAmpNGAjAEAASsAwABNcJMWwABc7IHAAFznwCak0YHIwABNdgFgA8AATKJOwABdHsAAXSkAAK5HYAPAAEyiASOEwABdLMAmpSA3BpUBYAPAAEyiScAAXT8cwABdToXAAF1DwCalPoKMAQABN8AA//8AwABN0j4BPY7AAF1fwCaliBzAAF1qhsAAXV/AJqWIgQ0BAAE3CADAAE3IScAAXXscwABdioXAAF1/wCalPoKMAQABN30AwABN0j4BPY7AAF2ZwCaliBzAAF2khsAAXZnAJqWIgQ0BAAGVAMAATcg/TsAAXb7AAF3FAACrzGADrBcBHsAAXcusGwEAAYbAAF3VwCaliABOwABd6sAAXfAAAIHdYAPAAEyiAZNOwABeGcAAXh0AAK5IYAPAAEyiARzAAF6BHMAAXkFqwABePWADwABMonWApgEAASODwABeTMAmpPdqwABed2ADwABMonKTAWADwABMogDAAEy7gKYBAAEcwABek4DAAF6MwCakwYChAQABasAAXrNgA8AATKJRAMAATLoAwABMuz0cwABex4fAAF7BwCamPYEMAgACNcAAXsgAAAEAYAPAAEyiARTAAF7IwCamYwgANcAAXs0AAAEAYAPAAEyiARXAAF7NwCamYwgcwABezRTAAF7IwCanDAoAgQ0BAAGUAMAATcgUwABeyMAmpwwKABTAAF7TwCameAkAAMAATVZOwABfFMAAXyAAAK5JYAPAAEyiAZRJwABfKRzAAF84hcAAXy3AJqU+gowBAAE3wAD//wDAAE3SPgI9HMAAX0+HwABfScAmpj2BDAIAAjXAAF9QAAABAGADwABMogEUwABfUMAmpmMIADXAAF9VAAABAGADwABMogEVwABfVcAmpmMIHMAAX1UUwABfUMAmp8QLAIENAQABlADAAE3IFMAAX1DAJqfECwA3fwDAAE1WPRXAAF9mwCandwo3CEnAAF+CHMAAX5GFwABfhsAmpT6CjAEAATd9AMAATdI+Aj0cwABfpofAAF+gwCamPYEMAgACNcAAX6cAAAEAYAPAAEyiARTAAF+n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wCareAwAhp2r2BTAAGXDwCatzQ0AAEXAAGXaAcAAZePAAGXlAACDZmADwABMogGTARzAAGXsFMAAZerAJq+gEQCAuwEAARbAAGX6FMAAZe7AJq9LEACByMAATXYAwABN0AEVwABmAsAmr6ARHMAAZgMUwABmAsAmr6ARAIENAQABlADAAE3IPgE9NcAAZhUAAAEAYAOshwEUwABmFcAmr0sQADXAAGYhAAABAGADwABMogEUwABmIcAmr6ARABzAAGYgFMAAZhXAJrAPEgCBDAIAAhTAAGYhwCawKBMAHMAAZiQcwABmIBTAAGYVwCawDxIAgtEBAAEUwABmIcAmsCgTAADAAE1VgKMBAAEUwABmJ8AmrwIPAACu0ADAAE1WP0XAAGZnAcAAZnDAAGZyAACDZmADwABMogEcwABmfxTAAGZ0wCatzQ0Ag8YBAAFqwABmgWADwABMolQAwABNygEcwABmjxTAAGaNwCawqw4AgLsBAAEWwABmlhTAAGaRwCareAwAgcjAAE12AMAATdABFcAAZp7AJrCrDhzAAGafFMAAZp7AJrCrDgCBDQEAAZQAwABNyD4BPTXAAGavAAABAGADrBcBFMAAZq/AJqt4DAA1wABmtAAAAQBgA8AATKIBFMAAZrTAJrCrDgAcwABmsxTAAGavwCaxPw8AgQwCAAIUwABmtMAmsVgQABzAAGa3HMAAZrMUwABmr8AmsT8PAILRAQABFMAAZrTAJrFYEAAAwABNVYCjAQABHMAAZsMUwABmusAmqscLAILRAQABHMAAZsYUwABmxMAmsKsOAIChAQABlgDAAEy6AMAATVUAwABMvADAAE1WPYnAAGbewCak0RTAAGblwCareAwAPz9AHMAAZwoUwABnBMAmpmMIAICMAQABhsAAZw3AJqWIAMAATcbAAGcEwABnFwBJwABnHhzAAGcngcAAZyLAJqTRgIwBAAErAMAATXA+AUrAAGc4ATHAAGc/XQPAAE1GAWADwABMogGHwABnQMAmpj0+AUrAAGdcATHAAGdjXQPAAE1GAWADwABMogKHwABnZMAmpj2BwABnbMAmpNEAACaclAAmnaQAJqCtACahMwAmozAAJqSXACayswAAAAYCwABXPoDowABngMAAZ4bAAHLiA65LAAABYAPAAE3vAAFdA4IuAVsIBMAAV0CA6MAAZ8zA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V4OA6MAAhILAAISlwACJDQABrmsAAAABA8AAhL/AAIkNAAAAAgICwACE2gAAAIh7YAPAAFFoAMAAhPcAAACZ12ADwABWbwAAYAPAAFceAT4FTsAAhRHAAIUhAACuMmADwABOiQEcwACFNBbAAIUsgMAAhSPAJtnbmZ7AAFFxIgEAASeuMwDAAFDMScAAhVwcwACFcILAAIVgwCbaBoCMAQABKwDAAE6YPgE9isAAhYHAJtoGJwA/TsAAhabAAIWpAACuNGADwABQ1gEewACFt8AAUNoCAAGCwACFvcAm2gYBqiQnh1hJwACF6SIWwACF+YHAAIXtwCbZ65MMwABWeQAcwACGDRbAAIYHg8AAhgTAJtpsIsAAUN2AjAEAAWrAAIYQYAPAAE6JwAB//wDAAE6YPgROwACGMcAAhkkAAK28YAPAAErYARzAAIZjFsAAhliDwACGVcAm2myH+cAAUN6C6QEAAWrAAIZvYAPAAE6JwACABQDAAE2LTsAAhpTAAIasAACtu2ADwABK2AEcwACGxhbAAIa7g8AAhrjAJtpsh/nAAFDegukBAAFqwACG0mADwABOicAAgAIAwABNi0/AAIb0wACG+AAAAa5sYQMBYAPAAE6JYAPAAEyiAAPAAIcFwACHwQAAAAEBAcAAhw0AAACF2WADwABOiQAAYAPAAEyiAT4DTsAAhyHAAIcjAACD/WADwABOiQEcwACHMhbAAIcog8AAhyXAJtpsh/nAAFDegtEBAAGHwACHM8Am26EAwABNjEnAAIdCHMAAh0gUwACHRsAm27wIAICMAQABKwDAAE6YPgFKwACHXQFqwACHZGADwABMolE/SsAAh4wBNcAAh5cAAAEAYAPAAEyiAR7AAIeXwABM0gEAARTAAIegwCbbvAgAACMcwACHlxTAAIeXwCbcNwkAgIwBAAErAMAATcZqwACHpmADwABMolEUwACHl8Am3DcJAAFgA8AATKJKwACHygEfwACH1cAAVy4EAAAErb0cwACIHobAAIgRwCbbeW4BAAFqwACIH2ADwABOicAAgGEAAK2+HMAAiGKGwACIVcAm23luAQABasAAiGNgA8AATonAAH/8AACtu4XAAIidwCbbL628hMAAiNnAJtrpP0rAAIj+ASsGwABXhIDowACRXcAAkXDAAJJEAACBqQAAAAEDwACRdsAAkkQA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WCc/QsAARRUBPRzAAEU2FsAARS4UwABFJ8AnHKwMAK7HwABYRoCCAQABJsAARToFFMAARTrAJxzUDQBgA8AATokAwABORz2KwABFScAnHCkewABFUMAAV+QBAAGAwABFXsAnG+cAQgAAPR4AOwIAAoEAwCccB4IAwCccKQBKwABFagADAQBbAQAAAACIPVsAAQAAAACIPlsAPgE9HACBAMAnHAdoAgACFADAJyCMDAAUAMAnIJUNAACBSz2LAMAnHDweADwBAAEUAMAnHHMIAAA9jADAJxxFHgA2AQABFADAJxxzCAAAPY0AwCccTh4ANwEAARQAwCcccwgAAD0cwABBvYEAwCccB20BAAEUAMAnHHMIAAAASgABFgCBAMAnHAdvgUcGwABYIoDwwABFb8AARX7AAEczAACu5sAAV58AAAABA8AARYvAAEczAAIAAQEBwABFlAAAAIEiYAPAAFjAAABdA4EiAWADwABOiQE+DU4AAAABiDVdA2gBYAPAAE6JAR/AAEWjdQABYAPAAE6JAABOAAAAAIg2XQOBHgFgA8AATokATgAAAACIN1sATgAAAACIOFsATgAAAACIOVsATgAAAACHgmADwABMogGTTgAAAACHg1sAT8AARX4AAAAAiDtbAAPAAEWLwABHMwQAAAMAAwAAAACIPFsAAAAAAIg9WwAAAAAAiD5bAABbAUs+A0E+B07AAEWtwABFtAAAmdxgA8AAWD4BFsAARb6AwABFtsAnIVeZ3MAAWMROwABFzsAARdcAAK7LWwEcwABF5xbAAEXhgMAARdnAJyFXjSvAAFjIgtEBAAEnrssAwABNjEnAAEX6IRzAAEYOFsAARgYUwABF/8AnIhwMAK7HwABYRoHEAQABFMAARhfAJyJEDQAAwABORj4CPYrAAEYqwCchmR7AAEYxwABX3wIAAoDAAEZAwCchV2rAAEZJYAPAAEyinnQAQgAAPz0cwABGeRbAAEZxFMAARmrAJyIcDACux8AAWEaDbAEAARTAAEaAwCciRA0AAMAATklJwABGjyIhHMAARqNqwABGlF0DwABNRgFgA8AATonAAIB/gcQBAAEUwABGrMAnIkQNAADAAE0TACEcwABGwi6uzMAAV58BAAEmwABG2QUUwABG2cAnIkQNAGADwABOiQDAAFgfPgE9HsAARuzAAFfZAQABJsAARvwFFMAARvzAJyJEDQBgA8AATokAPz2KwABHEsAnIZkewABHGcAAV+QBAAGAwABHJ8AnIVcAQgAAPR4AOwIAAoEAwCchd4IAwCchmQBKwABHMwADAQBbAQAAAACIPVsAAQAAAACIPlsAPgE9HACBAMAnIXdoAgACFADAJyPgDAAUAMAnI+kNAACBSz2LAMAnIaweADwBAAEUAMAnIeMIAAA9jADAJyG1HgA2AQABFADAJyHjCAAAPY0AwCchvh4ANwEAARQAwCch4wgAAD0cwABFi4EAwCchd20BAAEUAMAnIeMIAAAASgABFgCBAMAnIXdvgUcGwABYI4DwwABHOMAAR0TAAEe6AAGu58AAV58AAAABA8AAR1HAAEe6AAAAAQEBwABHWQAAAIf4YAPAAE6JAABgA8AAStgBSsAAR2oBIhzAAEdxgMAAR2rAJySrgcQBAAEnhlwAwABOpgAcwABHnh7AAEeIwABYJAEAAYDAAEeWwCckqwCImgEAAWrAAEepYAPAAE6JwACAeQDAAE6bBsAAWCSA8MAAR77AAEfMwABIAwABrujAAFefAAAAAQPAAEfZwABIAwAAAAEBAcAAR+EAAACH+GADwABOiQAAYAPAAE6JAUrAAEfsARbAAEf+HMAAR/OAwABH7MAnJUiEywEAASeGXADAAE6sgcLAAE0qBsAAWCWA8MAASAfAAEgVwABISAABrunAAFefAAAAAQPAAEgfwABISAAAAAEBAcAASCcAAACH+GADwABOiQAAYAPAAE6JAUrAAEgyARbAAEhEHMAASDmAwABIMsAnJbqEywEAASeGXADAAE6sgdXAAE0rBsAAWCaA8MAASE3AAEhcwABMXgAArurAAFefAAAAAQPAAEhswABMXgACAAEBAcAASHUAAACBImADwABYwAAAXQOBIgFgA8AATokBPg9OAAAAAYg1XQNoAWADwABOiQEfwABIhHUAAWADwABOiQAATgAAAACINl0DgR4BYAPAAE6JAE4AAAAAiDdbAE4AAAAAiDhbAE4AAAAAiDlbAE4AAAAAh4JgA8AATKIBk04AAAAAh4NbAE4AAAAAiDpbAE4AAAAAi9lbAE/AAEhcAAAAAIg7WwADwABIbMAATF4EAAADAAMAAAAAiDxbAAAAAACIPVsAAAAAAIg+WwAAWwFLPgNBPgtOwABIkMAASJcAAZncYAPAAFg+ARbAAEihgMAASJnAJyYsmdzAAFjETsAASLPAAEi7AAGZhVsBHMAASMsWwABIxYDAAEi9wCcmLI0rwABYyILRAQABJ5mFAMAATYxOwABI4sAASOgAAa7rWwEcwABI+BbAAEjygMAASOrAJyYsjSvAAFjIgtEBAAEnrusAwABNjEnAAEkIIiElwABJFAAUwABJDMAnJysPAGADwABOiQEcwABJKhTAAEkiwCcnKw8AgIwBAAEnAADAAE38PgI9isAASTnAJyZuHsAASUDAAFffAwACgMAASU/AJyYsasAASVhgA8AATKKH7QGIFCTAAEm1Aieu7BTAAEmswCcnKw8AQgAAP0nAAEnCIiElwABJzAAUwABJxsAnJ2AQAGADwABOiQEcwABJ4BTAAEnawCcnYBAAgIwBAAEnAADAAE38PgI9isAASe/AJyZuHsAASfbAAFffAwACgMAASgXAJyYsasAASg5gA8AATKKH7QGIFCTAAEpnAieu7RTAAEpgwCcnYBAAQgAAP0nAAEp0HMAASogWwABKfxTAAEp4wCcnAw4ArsjAAFhHgukBAAEUwABKlMAnJysPAADAAE2LPgI9isAASqbAJyZuHsAASq3AAFffAgACgMAASrzAJyYsasAASsVgA8AATKKgoQBCAAA/PRzAAEr6FsAASvIUwABK68AnJwMOAK7IwABYR4EMAgACJsAASvsFFMAASvvAJycrDwBgA8AATokmwABLBgUUwABLBsAnJ2AQAGADwABOiQDAAE2NTsAASxcAAACu7mADwABK2ABMPgM9FcAAS4DAJylZERzAAEuZFsAAS5EUwABLisAnJwMOAK7HwABYRoNsAQABasAAS6BgA8AATonAAIB8AMAATklNwABLtwI1AAAAAABbAR7AAEu3OAQABBzAAEu9Lq7lwABXnwIAAhTAAEvZwCcnAw4AJsAAS+EFFMAAS+HAJycrDwBgA8AATokAwABYJ4QAwCcmioUAwCcmkxQAwCcmygoAACs9FADAJybhCwA+AUnAAEwBFMAATAXAJylZEQA9HMAATB0WwABMFRTAAEwOwCcnAw4ArsfAAFhGgIIBAAFqwABMIWADwABOicAAgHwAwABORz89isAATD3AJyZuHsAATETAAFfkAQABgMAATFLAJyYsAEIAAD0eADsCAAKBAMAnJkyCAMAnJm4ASsAATF4AAwEAWwEAAAAAiD1bAAEAAAAAiD5bAD4BPRwAgQDAJyZMaAIAAhQAwCcqoQ4AFADAJyqqDwAAgUs9iwDAJyaBHgA8AQABFADAJybKCgAAPYwAwCcmih4ANgEAARQAwCcmygoAAD2NAMAnJpMeADcBAAEUAMAnJsoKAAA9HMAASGyBAMAnJkxtAQABFADAJybKCgAAAEoAARYAgQDAJyZMb4FHBsAAWCeA8MAATGPAAExjwABPPQAAruXAAFefAAAAAQPAAEx+wABPPQACAAMCAsAATIYAAACZ3GADwABYPgDAAEyVAAAAmYVgA8AATokAAcAATKwAAACBeWADwABYPgFqAGABwABNrAJbAT4NTgAAAAGINV0DaAFbAR/AAEy7dQABWwAATgAAAACINl0DgR4BWwBOAAAAAIg3WwBOAAAAAIg4WwBOAAAAAIg5WwBOAAAAAIeCYAPAAEyiAZNOAAAAAIeDWwBPwABMYwAAAACIO1sAA8AATH7AAE89BAAAAwADAAAAAIg8WwAAAAAAiD1bAAAAAACIPlsAAFsBSz4DQT4ETsAATMfAAEzRAAGRkWADwABOiQEcwABM2xbAAEzTLq6lwABYCa7KAQABgMAATOHAJytsAMAAWTJOwABM9MAATPoAAa7rYAPAAE6JARzAAE0LFsAATQOAwABM/MAnK2yuyMAAWEeC0QEAAYHAAE0MwCcrfADAAE2MTsAATSDAAE0mAAGAg2ADwABY+QEfwABNLMAAWQQBAAEywABNOmADwABOiWADwABN7wMnrs4nrs8nh/gnrtAnjSsywABNhGADwABOiWADwABN7wInrstqwABNmmADwABOicAAgHwngIMywABNu2ADwABOiWADwABN7wYnhdknrtEnmZMnru8niHMWwABOKR/AAE4awABLSQAAAACImMAASzknmYWBwABOVsAnK3wnh/gcwABOgxzAAE59FMAATnPAJyxBDgCBDQEAASeGXADAAE6egQ0BAAGBwABOhcAnK3wAwABOnieu6xTAAE6hwCcseQ8AAEnAAE7FHMAATtCCwABOycAnK42AjAEAASsAwABN/D4BPRzAAE7hLq7NwABXnwIAAmrAAE72YAPAAE6JwACAfBTAAE8GwCcsuRAAAMAAWBo+AT0cwABPKILAAE8hwCcrjZmSAQABFMAA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WTyAggEAAYCG/cAn5JoAwABORz8AACfjJAAn5HoAJ+T4AAAAAgAeBMAAV6+A8IJ9gqYFr6wAYAOYvgEegpaYwAAAAAAEwABXsIDwgr2C4gWvrQBgA5i+AR6C0pjAAAAAAATAAFexgPCEeoSdBa+uAGADwABOiQEehI3AAFfUAAAAAATAAFeygPCFm4XYBa+vAF0DwABNeAJgA8AATKJgA8AAV+kBHoW5wABNfwACYAPAAEyiYAPAAFfpAAAEwABXs4DwhiqGPgavsABgA8AATKIBaoY4YAPAAEyiwACBHATAAFe0gPCGRoZeBq+xAGADwABMogFqhlhgA8AATKLAAIEiBMAAV7WA8IZmhn4Gr7IAYAPAAEyiAWqGeGADwABMosAAgIsEwABXtoDwhoaGnQaIBQBgA8AATKIBaoaXYAPAAEyih+0EwABXt4DwhqWGvAavswBgA8AATKIBaoa2YAPAAEyiwACAkQTAAFe4gPCGxYbdBogGAGADwABMogFqhtdgA8AATKKH8wTAAFe5gPCG5ob8Bq+0AGADwABMogFqhvlgA8AATKKEIgTAAFe6gPCHBIceBq+1AGADwABMogFqhxtgA8AATKKEgQTAAFe7gPCHJodEBq+2AGADwABMogFqh0FgA8AATKKgTgTAAFe8gPCHTIdmBq+3AGADwABMogFqh2NgA8AATKKedATAAFe9gPCHboeKBq+4AGADwABMogFqh4dgA8AATKKfIgTAAFe+gPCHkoesBq+5AGADwABMogFqh6lgA8AATKKfxQTAAFe/gPCHtIfHBq+6AGADwABMogFqh8RgA8AATKKgeQTAAFfAgPCHz4foBq+7AGADwABMogFqh+VgA8AATKKEhATAAFfBgPCH8IgKBq+8AGADwABMogFqiAdgA8AATKKfRwTAAFfCgPCIEogwBq+9AGADwABMogFqiC1gA8AATKKEhwTAAFfDgPCIOIhXBq++AGADwABMogFqiFRgA8AATKKgoQTAAFfEgPCIX4h4Bq+/AGADwABMogFqiHVgA8AATKKeKATAAFfFgPCIgIihBq/AAGADwABMogFqiJ5gA8AATKKe1gTAAFfGgPCIqYjGBq/BAGADwABMogFqiMNgA8AATKKEigTAAFfHgPCI94kWBq/CAGADwABMogFqiRJgA8AATKLAAH6vBMAAV8iA8IkeiTwGr8MAYAPAAEyiAWqJOGADwABMosAAfrMEwABXyYDwiUSJXAavxABgA8AATKIBaolYYAPAAEyiwAB+twTAAFfLgPCJY4waBK/FwABXnwBdA8AATXgCYAPAAEyiYAPAAE6JATKJdGADwABMomADwABOiQxqiXhgA8AATKKH7SeIDmqJnGADwABMosAAgJEnlFFqicBgA8AATKKEIievxmqJ62ADwABMoqBOJ6/HaookYAPAAEyinnQnr8hqilVgA8AATKLAAH6vJ6/JaoqPYAPAAEyiwAB+syevymqKyGADwABMosAAfrcnr8tqivRgA8AATKKgoSevzGqLL2ADwABMop4oJ6/NaothYAPAAEyintYnr85qi6BgA8AATKKEiiSLtwInr88nr9AEwABXzYDwkNmRBgav0QBgA8AAS3QBapDsYAPAAEt0t0wEwABXzIDyhkWGTASv0sAAV58AXQPAAE14AmADwABOiWADwABYMwAYBsAAV9CA8oXthfKGLwAFr9PAAFefAWoAYAOUCMAAgSsAAAEDhf+GLwAAAAEBAYYKAAAAO2ADrBcAAF0DwABNRgFbAAbAAFfogPKGToZlhxYBAa8aAAAAAQOGbIcWAAAAAAAAAF0DwABNeAJgA8AATolgA8AAWDMBPgJJhnAchnwahnTAAFfMgIwBAAErAMAATfw+AUs+AT0bhpfAAFfMHoanwABYOgAAAAAAAYa4WwGGvwAAAWlbAAA+AT0ehsrAAEZ3AQABJIb3Aiev1YCG9cAn6owAP0qHBgEahw3AAFfMBsAAV9GA84EEgQuBsQABr9bAAFefAAAAAQOBJIGxAAAAAQEBgS0AAACBImADwABYwAAAYAPAAE6JAT4BSoE6AR6BQcAAV98DAAKAgVDAJ+rhaoFZYAPAAEyihCIBiBQnr9cGwABX0oDzgbSBu4KJAAGv2MAAV58AAAABA4HegokAAAACAgKB5wAAAIEiYAPAAFjAAIH3AAAAmclgA8AATokAAGADwABOiQE+AUqCAwEeggrAAFffAwACgIIZwCfrQ2qCImADwABMosAAfq8BiBQkgoYEFoJWgIJOwCfrQ4f4wABYxyev2YGCbsAn61Enr9oGwABX04DzgoyCk4NfAAGv28AAV58AAAABA4K1g18AAAACAgKCvgAAAIEiYAPAAFjAAILOAAAAmclgA8AA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IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgovKioKICogU3VwcG9ydCBmb3IgYXN5bmNocm9ub3VzIHByb2dyYW1taW5nLAogKiB3aXRoIGNsYXNzZXMgc3VjaCBhcyBGdXR1cmUgYW5kIFN0cmVhbS4KICoKICogVW5kZXJzdGFuZGluZyBbRnV0dXJlXXMgYW5kIFtTdHJlYW1dcyBpcyBhIHByZXJlcXVpc2l0ZSBmb3IKICogd3JpdGluZyBqdXN0IGFib3V0IGFueSBEYXJ0IHByb2dyYW0uCiAqCiAqIFRvIHVzZSB0aGlzIGxpYnJhcnkgaW4geW91ciBjb2RlOgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmFzeW5jJzsKICoKICogIyMgRnV0dXJlCiAqCiAqIEEgRnV0dXJlIG9iamVjdCByZXByZXNlbnRzIGEgY29tcHV0YXRpb24gd2hvc2UgcmV0dXJuIHZhbHVlCiAqIG1pZ2h0IG5vdCB5ZXQgYmUgYXZhaWxhYmxlLgogKiBUaGUgRnV0dXJlIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBjb21wdXRhdGlvbgogKiB3aGVuIGl0IGNvbXBsZXRlcyBhdCBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZS4KICogRnV0dXJlcyBhcmUgb2Z0ZW4gdXNlZCBmb3IgcG90ZW50aWFsbHkgbGVuZ3RoeSBjb21wdXRhdGlvbnMKICogc3VjaCBhcyBJL08gYW5kIGludGVyYWN0aW9uIHdpdGggdXNlcnMuCiAqCiAqIE1hbnkgbWV0aG9kcyBpbiB0aGUgRGFydCBsaWJyYXJpZXMgcmV0dXJuIEZ1dHVyZXMgd2hlbgogKiBwZXJmb3JtaW5nIHRhc2tzLiBGb3IgZXhhbXBsZSwgd2hlbiBiaW5kaW5nIGFuIEh0dHBTZXJ2ZXIKICogdG8gYSBob3N0IGFuZCBwb3J0LCB0aGUgYGJpbmQoKWAgbWV0aG9kIHJldHVybnMgYSBGdXR1cmUuCiAqCiAqICAgICAgSHR0cFNlcnZlci5iaW5kKCcxMjcuMC4wLjEnLCA0NDQ0KQogKiAgICAgICAgICAudGhlbigoc2VydmVyKSA9PiBwcmludCgnJHtzZXJ2ZXIuaXNCcm9hZGNhc3R9JykpCiAqICAgICAgICAgIC5jYXRjaEVycm9yKHByaW50KTsKICoKICogW0Z1dHVyZS50aGVuXSByZWdpc3RlcnMgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHJ1bnMKICogd2hlbiB0aGUgRnV0dXJlJ3Mgb3BlcmF0aW9uLCBpbiB0aGlzIGNhc2UgdGhlIGBiaW5kKClgIG1ldGhvZCwKICogY29tcGxldGVzIHN1Y2Nlc3NmdWxseS4KICogVGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBvcGVyYXRpb24KICogaXMgcGFzc2VkIGludG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgogKiBJbiB0aGlzIGV4YW1wbGUsIHRoZSBgYmluZCgpYCBtZXRob2QgcmV0dXJucyB0aGUgSHR0cFNlcnZlcgogKiBvYmplY3QuIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBwcmludHMgb25lIG9mIGl0cyBwcm9wZXJ0aWVzLgogKiBbRnV0dXJlLmNhdGNoRXJyb3JdIHJlZ2lzdGVycyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQKICogcnVucyBpZiBhbiBlcnJvciBvY2N1cnMgd2l0aGluIHRoZSBGdXR1cmUuCiAqCiAqICMjIFN0cmVhbQogKgogKiBBIFN0cmVhbSBwcm92aWRlcyBhbiBhc3luY2hyb25vdXMgc2VxdWVuY2Ugb2YgZGF0YS4KICogRXhhbXBsZXMgb2YgZGF0YSBzZXF1ZW5jZXMgaW5jbHVkZSBpbmRpdmlkdWFsIGV2ZW50cywgbGlrZSBtb3VzZSBjbGlja3MsCiAqIG9yIHNlcXVlbnRpYWwgY2h1bmtzIG9mIGxhcmdlciBkYXRhLCBsaWtlIG11bHRpcGxlIGJ5dGUgbGlzdHMgd2l0aCB0aGUKICogY29udGVudHMgb2YgYSBmaWxlCiAqIHN1Y2ggYXMgbW91c2UgY2xpY2tzLCBhbmQgYSBzdHJlYW0gb2YgYnl0ZSBsaXN0cyByZWFkIGZyb20gYSBmaWxlLgogKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgb3BlbnMgYSBmaWxlIGZvciByZWFkaW5nLgogKiBbU3RyZWFtLmxpc3Rlbl0gcmVnaXN0ZXJzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBydW5zCiAqIGVhY2ggdGltZSBtb3JlIGRhdGEgaXMgYXZhaWxhYmxlLgogKgogKiAgICAgU3RyZWFtPExpc3Q8aW50Pj4gc3RyZWFtID0gbmV3IEZpbGUoJ3F1b3Rlcy50eHQnKS5vcGVuUmVhZCgpOwogKiAgICAgc3RyZWFtLnRyYW5zZm9ybSh1dGY4LmRlY29kZXIpLmxpc3RlbihwcmludCk7CiAqCiAqIFRoZSBzdHJlYW0gZW1pdHMgYSBzZXF1ZW5jZSBvZiBhIGxpc3Qgb2YgYnl0ZXMuCiAqIFRoZSBwcm9ncmFtIG11c3QgaW50ZXJwcmV0IHRoZSBieXRlcyBvciBoYW5kbGUgdGhlIHJhdyBieXRlIGRhdGEuCiAqIEhlcmUsIHRoZSBjb2RlIHVzZXMgYSBVVEYtOCBkZWNvZGVyIChwcm92aWRlZCBpbiB0aGUgYGRhcnQ6Y29udmVydGAgbGlicmFyeSkKICogdG8gY29udmVydCB0aGUgc2VxdWVuY2Ugb2YgYnl0ZXMgaW50byBhIHNlcXVlbmNlCiAqIG9mIERhcnQgc3RyaW5ncy4KICoKICogQW5vdGhlciBjb21tb24gdXNlIG9mIHN0cmVhbXMgaXMgZm9yIHVzZXItZ2VuZXJhdGVkIGV2ZW50cwogKiBpbiBhIHdlYiBhcHA6IFRoZSBmb2xsb3dpbmcgY29kZSBsaXN0ZW5zIGZvciBtb3VzZSBjbGlja3Mgb24gYSBidXR0b24uCiAqCiAqICAgICBxdWVyeVNlbGVjdG9yKCcjbXlCdXR0b24nKS5vbkNsaWNrLmxpc3RlbigoXykgPT4gcHJpbnQoJ0NsaWNrLicpKTsKICoKICogIyMgT3RoZXIgcmVzb3VyY2VzCiAqCiAqICogVGhlIFtkYXJ0OmFzeW5jIHNlY3Rpb24gb2YgdGhlIGxpYnJhcnkgdG91cl1bYXN5bmNocm9ub3VzLXByb2dyYW1taW5nXToKICogICBBIGJyaWVmIG92ZXJ2aWV3IG9mIGFzeW5jaHJvbm91cyBwcm9ncmFtbWluZy4KICoKICogKiBbVXNlIEZ1dHVyZS1CYXNlZCBBUElzXVtmdXR1cmVzLXR1dG9yaWFsXTogQSBjbG9zZXIgbG9vayBhdCBGdXR1cmVzIGFuZAogKiAgIGhvdyB0byB1c2UgdGhlbSB0byB3cml0ZSBhc3luY2hyb25vdXMgRGFydCBjb2RlLgogKgogKiAqIFtGdXR1cmVzIGFuZCBFcnJvciBIYW5kbGluZ11bZnV0dXJlcy1lcnJvci1oYW5kbGluZ106IEV2ZXJ5dGhpbmcgeW91CiAqICAgd2FudGVkIHRvIGtub3cgYWJvdXQgaGFuZGxpbmcgZXJyb3JzIGFuZCBleGNlcHRpb25zIHdoZW4gd29ya2luZyB3aXRoCiAqICAgRnV0dXJlcyAoYnV0IHdlcmUgYWZyYWlkIHRvIGFzaykuCiAqCiAqICogW1RoZSBFdmVudCBMb29wIGFuZCBEYXJ0XShodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvYXJ0aWNsZXMvZXZlbnQtbG9vcC8pOgogKiAgIExlYXJuIGhvdyBEYXJ0IGhhbmRsZXMgdGhlIGV2ZW50IHF1ZXVlIGFuZCBtaWNyb3Rhc2sgcXVldWUsIHNvIHlvdSBjYW4KICogICB3cml0ZSBiZXR0ZXIgYXN5bmNocm9ub3VzIGNvZGUgd2l0aCBmZXdlciBzdXJwcmlzZXMuCiAqCiAqICogW3Rlc3QgcGFja2FnZTogQXN5bmNocm9ub3VzIFRlc3RzXVt0ZXN0LXJlYWRtZV06IEhvdyB0byB0ZXN0IGFzeW5jaHJvbm91cwogKiAgIGNvZGUuCiAqCiAqIFthc3luY2hyb25vdXMtcHJvZ3JhbW1pbmddOiBodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZG9jcy9kYXJ0LXVwLWFuZC1ydW5uaW5nL2NoMDMuaHRtbCNkYXJ0YXN5bmMtLS1hc3luY2hyb25vdXMtcHJvZ3JhbW1pbmcKICogW2Z1dHVyZXMtdHV0b3JpYWxdOiBodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZG9jcy90dXRvcmlhbHMvZnV0dXJlcy8KICogW2Z1dHVyZXMtZXJyb3ItaGFuZGxpbmddOiBodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvYXJ0aWNsZXMvZnV0dXJlcy1hbmQtZXJyb3ItaGFuZGxpbmcvCiAqIFt0ZXN0LXJlYWRtZV06IGh0dHBzOi8vcHViLmRldi9wYWNrYWdlcy90ZXN0CiAqCiAqIHtAY2F0ZWdvcnkgQ29yZX0KICovCmxpYnJhcnkgZGFydC5hc3luYzsKCmltcG9ydCAiZGFydDpjb2xsZWN0aW9uIiBzaG93IEhhc2hNYXAsIEl0ZXJhYmxlQmFzZTsKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIKICAgIHNob3cKICAgICAgICBDYXN0U3RyZWFtLAogICAgICAgIENhc3RTdHJlYW1UcmFuc2Zvcm1lciwKICAgICAgICBFbXB0eUl0ZXJhdG9yLAogICAgICAgIEl0ZXJhYmxlRWxlbWVudEVycm9yLAogICAgICAgIHByaW50VG9ab25lLAogICAgICAgIHByaW50VG9Db25zb2xlLAogICAgICAgIFNpbmNlOwoKcGFydCAnYXN5bmNfZXJyb3IuZGFydCc7CnBhcnQgJ2Jyb2FkY2FzdF9zdHJlYW1fY29udHJvbGxlci5kYXJ0JzsKcGFydCAnZGVmZXJyZWRfbG9hZC5kYXJ0JzsKcGFydCAnZnV0dXJlLmRhcnQnOwpwYXJ0ICdmdXR1cmVfaW1wbC5kYXJ0JzsKcGFydCAnc2NoZWR1bGVfbWljcm90YXNrLmRhcnQnOwpwYXJ0ICdzdHJlYW0uZGFydCc7CnBhcnQgJ3N0cmVhbV9jb250cm9sbGVyLmRhcnQnOwpwYXJ0ICdzdHJlYW1faW1wbC5kYXJ0JzsKcGFydCAnc3RyZWFtX3BpcGUuZGFydCc7CnBhcnQgJ3N0cmVhbV90cmFuc2Zvcm1lcnMuZGFydCc7CnBhcnQgJ3RpbWVyLmRhcnQnOwpwYXJ0ICd6b25lLmRhcnQnOwp7AE5OPAEPAQQpKwM/KAMlAxwDDQM/HzMxPysDOj09Ays+IAM5QhsnKT8/Oi4DDQM3TEoWRjM7JQNFNQMzRVA0FAM+SgNKAxYDTTMDTTYDSksnA09MOgNPCwOAgEhbMAMUBBQBNRgJFB8XHhUYDwEZKRsUGSAUHxkZIRMSAQpkYXJ0OmFzeW5jQ29yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2FzeW5jL2Z1dHVyZV9pbXBsLmRhcnTAAG3NLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuYXN5bmM7CgovKiogVGhlIG9uVmFsdWUgYW5kIG9uRXJyb3IgaGFuZGxlcnMgcmV0dXJuIGVpdGhlciBhIHZhbHVlIG9yIGEgZnV0dXJlICovCnR5cGVkZWYgRnV0dXJlT3I8VD4gX0Z1dHVyZU9uVmFsdWU8UywgVD4oUyB2YWx1ZSk7Ci8qKiBUZXN0IHVzZWQgYnkgW0Z1dHVyZS5jYXRjaEVycm9yXSB0byBoYW5kbGUgc2tpcCBzb21lIGVycm9ycy4gKi8KdHlwZWRlZiBib29sIF9GdXR1cmVFcnJvclRlc3QoT2JqZWN0IGVycm9yKTsKLyoqIFVzZWQgYnkgW1doZW5GdXR1cmVdLiAqLwp0eXBlZGVmIGR5bmFtaWMgX0Z1dHVyZUFjdGlvbigpOwoKYWJzdHJhY3QgY2xhc3MgX0NvbXBsZXRlcjxUPiBpbXBsZW1lbnRzIENvbXBsZXRlcjxUPiB7CiAgZmluYWwgX0Z1dHVyZTxUPiBmdXR1cmUgPSBuZXcgX0Z1dHVyZTxUPigpOwoKICB2b2lkIGNvbXBsZXRlKFtGdXR1cmVPcjxUPiB2YWx1ZV0pOwoKICB2b2lkIGNvbXBsZXRlRXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgZXJyb3IgPSBfbm9uTnVsbEVycm9yKGVycm9yKTsKICAgIGlmICghZnV0dXJlLl9tYXlDb21wbGV0ZSkgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIkZ1dHVyZSBhbHJlYWR5IGNvbXBsZXRlZCIpOwogICAgQXN5bmNFcnJvciByZXBsYWNlbWVudCA9IFpvbmUuY3VycmVudC5lcnJvckNhbGxiYWNrKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIGlmIChyZXBsYWNlbWVudCAhPSBudWxsKSB7CiAgICAgIGVycm9yID0gX25vbk51bGxFcnJvcihyZXBsYWNlbWVudC5lcnJvcik7CiAgICAgIHN0YWNrVHJhY2UgPSByZXBsYWNlbWVudC5zdGFja1RyYWNlOwogICAgfQogICAgX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgdm9pZCBfY29tcGxldGVFcnJvcihPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSk7CgogIC8vIFRoZSBmdXR1cmUncyBfaXNDb21wbGV0ZSBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IHBlbmRpbmcgY29tcGxldGlvbnMuCiAgLy8gV2UgdGhlcmVmb3JlIHVzZSBfbWF5Q29tcGxldGUuCiAgYm9vbCBnZXQgaXNDb21wbGV0ZWQgPT4gIWZ1dHVyZS5fbWF5Q29tcGxldGU7Cn0KCmNsYXNzIF9Bc3luY0NvbXBsZXRlcjxUPiBleHRlbmRzIF9Db21wbGV0ZXI8VD4gewogIHZvaWQgY29tcGxldGUoW0Z1dHVyZU9yPFQ+IHZhbHVlXSkgewogICAgaWYgKCFmdXR1cmUuX21heUNvbXBsZXRlKSB0aHJvdyBuZXcgU3RhdGVFcnJvcigiRnV0dXJlIGFscmVhZHkgY29tcGxldGVkIik7CiAgICBmdXR1cmUuX2FzeW5jQ29tcGxldGUodmFsdWUpOwogIH0KCiAgdm9pZCBfY29tcGxldGVFcnJvcihPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgZnV0dXJlLl9hc3luY0NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KfQoKY2xhc3MgX1N5bmNDb21wbGV0ZXI8VD4gZXh0ZW5kcyBfQ29tcGxldGVyPFQ+IHsKICB2b2lkIGNvbXBsZXRlKFtGdXR1cmVPcjxUPiB2YWx1ZV0pIHsKICAgIGlmICghZnV0dXJlLl9tYXlDb21wbGV0ZSkgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIkZ1dHVyZSBhbHJlYWR5IGNvbXBsZXRlZCIpOwogICAgZnV0dXJlLl9jb21wbGV0ZSh2YWx1ZSk7CiAgfQoKICB2b2lkIF9jb21wbGV0ZUVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBmdXR1cmUuX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KfQoKY2xhc3MgX0Z1dHVyZUxpc3RlbmVyPFMsIFQ+IHsKICBzdGF0aWMgY29uc3QgaW50IG1hc2tWYWx1ZSA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBtYXNrRXJyb3IgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgbWFza1Rlc3RFcnJvciA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBtYXNrV2hlbmNvbXBsZXRlID0gODsKICBzdGF0aWMgY29uc3QgaW50IHN0YXRlQ2hhaW4gPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgc3RhdGVUaGVuID0gbWFza1ZhbHVlOwogIHN0YXRpYyBjb25zdCBpbnQgc3RhdGVUaGVuT25lcnJvciA9IG1hc2tWYWx1ZSB8IG1hc2tFcnJvcjsKICBzdGF0aWMgY29uc3QgaW50IHN0YXRlQ2F0Y2hlcnJvciA9IG1hc2tFcnJvcjsKICBzdGF0aWMgY29uc3QgaW50IHN0YXRlQ2F0Y2hlcnJvclRlc3QgPSBtYXNrRXJyb3IgfCBtYXNrVGVzdEVycm9yOwogIHN0YXRpYyBjb25zdCBpbnQgc3RhdGVXaGVuY29tcGxldGUgPSBtYXNrV2hlbmNvbXBsZXRlOwogIHN0YXRpYyBjb25zdCBpbnQgbWFza1R5cGUgPQogICAgICBtYXNrVmFsdWUgfCBtYXNrRXJyb3IgfCBtYXNrVGVzdEVycm9yIHwgbWFza1doZW5jb21wbGV0ZTsKICBzdGF0aWMgY29uc3QgaW50IHN0YXRlSXNBd2FpdCA9IDE2OwogIC8vIExpc3RlbmVycyBvbiB0aGUgc2FtZSBmdXR1cmUgYXJlIGxpbmtlZCB0aHJvdWdoIHRoaXMgbGluay4KICBfRnV0dXJlTGlzdGVuZXIgX25leHRMaXN0ZW5lcjsKICAvLyBUaGUgZnV0dXJlIHRvIGNvbXBsZXRlIHdoZW4gdGhpcyBsaXN0ZW5lciBpcyBhY3RpdmF0ZWQuCiAgZmluYWwgX0Z1dHVyZTxUPiByZXN1bHQ7CiAgLy8gV2hpY2ggZmllbGRzIG1lYW5zIHdoYXQuCiAgZmluYWwgaW50IHN0YXRlOwogIC8vIFVzZWQgZm9yIHRoZW4vd2hlbkRvbmUgY2FsbGJhY2sgYW5kIGVycm9yIHRlc3QKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgZmluYWwgRnVuY3Rpb24gY2FsbGJhY2s7CiAgLy8gVXNlZCBmb3IgZXJyb3IgY2FsbGJhY2tzLgogIGZpbmFsIEZ1bmN0aW9uIGVycm9yQ2FsbGJhY2s7CgogIF9GdXR1cmVMaXN0ZW5lci50aGVuKAogICAgICB0aGlzLnJlc3VsdCwgX0Z1dHVyZU9uVmFsdWU8UywgVD4gb25WYWx1ZSwgRnVuY3Rpb24gZXJyb3JDYWxsYmFjaykKICAgICAgOiBjYWxsYmFjayA9IG9uVmFsdWUsCiAgICAgICAgZXJyb3JDYWxsYmFjayA9IGVycm9yQ2FsbGJhY2ssCiAgICAgICAgc3RhdGUgPSAoZXJyb3JDYWxsYmFjayA9PSBudWxsKSA/IHN0YXRlVGhlbiA6IHN0YXRlVGhlbk9uZXJyb3I7CgogIF9GdXR1cmVMaXN0ZW5lci50aGVuQXdhaXQoCiAgICAgIHRoaXMucmVzdWx0LCBfRnV0dXJlT25WYWx1ZTxTLCBUPiBvblZhbHVlLCBGdW5jdGlvbiBlcnJvckNhbGxiYWNrKQogICAgICA6IGNhbGxiYWNrID0gb25WYWx1ZSwKICAgICAgICBlcnJvckNhbGxiYWNrID0gZXJyb3JDYWxsYmFjaywKICAgICAgICBzdGF0ZSA9ICgoZXJyb3JDYWxsYmFjayA9PSBudWxsKSA/IHN0YXRlVGhlbiA6IHN0YXRlVGhlbk9uZXJyb3IpCiAgICAgICAgICAgICAgfCBzdGF0ZUlzQXdhaXQgOwoKICBfRnV0dXJlTGlzdGVuZXIuY2F0Y2hFcnJvcih0aGlzLnJlc3VsdCwgdGhpcy5lcnJvckNhbGxiYWNrLCB0aGlzLmNhbGxiYWNrKQogICAgICA6IHN0YXRlID0gKGNhbGxiYWNrID09IG51bGwpID8gc3RhdGVDYXRjaGVycm9yIDogc3RhdGVDYXRjaGVycm9yVGVzdDsKCiAgX0Z1dHVyZUxpc3RlbmVyLndoZW5Db21wbGV0ZSh0aGlzLnJlc3VsdCwgdGhpcy5jYWxsYmFjaykKICAgICAgOiBlcnJvckNhbGxiYWNrID0gbnVsbCwKICAgICAgICBzdGF0ZSA9IHN0YXRlV2hlbmNvbXBsZXRlOwoKICBab25lIGdldCBfem9uZSA9PiByZXN1bHQuX3pvbmU7CgogIGJvb2wgZ2V0IGhhbmRsZXNWYWx1ZSA9PiAoc3RhdGUgJiBtYXNrVmFsdWUgIT0gMCk7CiAgYm9vbCBnZXQgaGFuZGxlc0Vycm9yID0+IChzdGF0ZSAmIG1hc2tFcnJvciAhPSAwKTsKICBib29sIGdldCBoYXNFcnJvclRlc3QgPT4gKHN0YXRlICYgbWFza1R5cGUgPT0gc3RhdGVDYXRjaGVycm9yVGVzdCk7CiAgYm9vbCBnZXQgaGFuZGxlc0NvbXBsZXRlID0+IChzdGF0ZSAmIG1hc2tUeXBlID09IHN0YXRlV2hlbmNvbXBsZXRlKTsKICBib29sIGdldCBpc0F3YWl0ID0+IChzdGF0ZSAmIHN0YXRlSXNBd2FpdCAhPSAwKTsKCiAgX0Z1dHVyZU9uVmFsdWU8UywgVD4gZ2V0IF9vblZhbHVlIHsKICAgIGFzc2VydChoYW5kbGVzVmFsdWUpOwogICAgcmV0dXJuIGNhbGxiYWNrOwogIH0KCiAgRnVuY3Rpb24gZ2V0IF9vbkVycm9yID0+IGVycm9yQ2FsbGJhY2s7CiAgX0Z1dHVyZUVycm9yVGVzdCBnZXQgX2Vycm9yVGVzdCB7CiAgICBhc3NlcnQoaGFzRXJyb3JUZXN0KTsKICAgIHJldHVybiBjYWxsYmFjazsKICB9CgogIF9GdXR1cmVBY3Rpb24gZ2V0IF93aGVuQ29tcGxldGVBY3Rpb24gewogICAgYXNzZXJ0KGhhbmRsZXNDb21wbGV0ZSk7CiAgICByZXR1cm4gY2FsbGJhY2s7CiAgfQoKICAvLy8gV2hldGhlciB0aGlzIGxpc3RlbmVyIGhhcyBhbiBlcnJvciBjYWxsYmFjay4KICAvLy8KICAvLy8gVGhpcyBmdW5jdGlvbiBtdXN0IG9ubHkgYmUgY2FsbGVkIGlmIHRoZSBsaXN0ZW5lciBbaGFuZGxlc0Vycm9yXS4KICBib29sIGdldCBoYXNFcnJvckNhbGxiYWNrIHsKICAgIGFzc2VydChoYW5kbGVzRXJyb3IpOwogICAgcmV0dXJuIF9vbkVycm9yICE9IG51bGw7CiAgfQoKICBGdXR1cmVPcjxUPiBoYW5kbGVWYWx1ZShTIHNvdXJjZVJlc3VsdCkgewogICAgcmV0dXJuIF96b25lLnJ1blVuYXJ5PEZ1dHVyZU9yPFQ+LCBTPihfb25WYWx1ZSwgc291cmNlUmVzdWx0KTsKICB9CgogIGJvb2wgbWF0Y2hlc0Vycm9yVGVzdChBc3luY0Vycm9yIGFzeW5jRXJyb3IpIHsKICAgIGlmICghaGFzRXJyb3JUZXN0KSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBfem9uZS5ydW5VbmFyeTxib29sLCBPYmplY3Q+KF9lcnJvclRlc3QsIGFzeW5jRXJyb3IuZXJyb3IpOwogIH0KCiAgRnV0dXJlT3I8VD4gaGFuZGxlRXJyb3IoQXN5bmNFcnJvciBhc3luY0Vycm9yKSB7CiAgICBhc3NlcnQoaGFuZGxlc0Vycm9yICYmIGhhc0Vycm9yQ2FsbGJhY2spOwogICAgdmFyIGVycm9yQ2FsbGJhY2sgPSB0aGlzLmVycm9yQ2FsbGJhY2s7IC8vIFRvIGVuYWJsZSBwcm9tb3Rpb24uCiAgICAvLyBJZiB0aGUgZXJyb3JDYWxsYmFjayByZXR1cm5zIHNvbWV0aGluZyB3aGljaCBpcyBub3QgYSBGdXR1cmVPcjxUPiwKICAgIC8vIHRoaXMgcmV0dXJuIHN0YXRlbWVudCB0aHJvd3MsIGFuZCB0aGUgY2FsbGVyIGhhbmRsZXMgdGhlIGVycm9yLgogICAgaWYgKGVycm9yQ2FsbGJhY2sgaXMgZHluYW1pYyBGdW5jdGlvbihPYmplY3QsIFN0YWNrVHJhY2UpKSB7CiAgICAgIHJldHVybiBfem9uZS5ydW5CaW5hcnk8ZHluYW1pYywgT2JqZWN0LCBTdGFja1RyYWNlPigKICAgICAgICAgIGVycm9yQ2FsbGJhY2ssIGFzeW5jRXJyb3IuZXJyb3IsIGFzeW5jRXJyb3Iuc3RhY2tUcmFjZSk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoZXJyb3JDYWxsYmFjayBpcyBkeW5hbWljIEZ1bmN0aW9uKE9iamVjdCkpOwogICAgICByZXR1cm4gX3pvbmUucnVuVW5hcnk8ZHluYW1pYywgT2JqZWN0PihlcnJvckNhbGxiYWNrLCBhc3luY0Vycm9yLmVycm9yKTsKICAgIH0KICB9CgogIGR5bmFtaWMgaGFuZGxlV2hlbkNvbXBsZXRlKCkgewogICAgYXNzZXJ0KCFoYW5kbGVzRXJyb3IpOwogICAgcmV0dXJuIF96b25lLnJ1bihfd2hlbkNvbXBsZXRlQWN0aW9uKTsKICB9Cn0KCmNsYXNzIF9GdXR1cmU8VD4gaW1wbGVtZW50cyBGdXR1cmU8VD4gewogIC8vLyBJbml0aWFsIHN0YXRlLCB3YWl0aW5nIGZvciBhIHJlc3VsdC4gSW4gdGhpcyBzdGF0ZSwgdGhlCiAgLy8vIFtyZXN1bHRPckxpc3RlbmVyc10gZmllbGQgaG9sZHMgYSBzaW5nbGUtbGlua2VkIGxpc3Qgb2YKICAvLy8gW19GdXR1cmVMaXN0ZW5lcl0gbGlzdGVuZXJzLgogIHN0YXRpYyBjb25zdCBpbnQgX3N0YXRlSW5jb21wbGV0ZSA9IDA7CgogIC8vLyBQZW5kaW5nIGNvbXBsZXRpb24uIFNldCB3aGVuIGNvbXBsZXRlZCB1c2luZyBbX2FzeW5jQ29tcGxldGVdIG9yCiAgLy8vIFtfYXN5bmNDb21wbGV0ZUVycm9yXS4gSXQgaXMgYW4gZXJyb3IgdG8gdHJ5IHRvIGNvbXBsZXRlIGl0IGFnYWluLgogIC8vLyBbcmVzdWx0T3JMaXN0ZW5lcnNdIGhvbGRzIGxpc3RlbmVycy4KICBzdGF0aWMgY29uc3QgaW50IF9zdGF0ZVBlbmRpbmdDb21wbGV0ZSA9IDE7CgogIC8vLyBUaGUgZnV0dXJlIGhhcyBiZWVuIGNoYWluZWQgdG8gYW5vdGhlciBmdXR1cmUuIFRoZSByZXN1bHQgb2YgdGhhdAogIC8vLyBvdGhlciBmdXR1cmUgYmVjb21lcyB0aGUgcmVzdWx0IG9mIHRoaXMgZnV0dXJlIGFzIHdlbGwuCiAgLy8vIFtyZXN1bHRPckxpc3RlbmVyc10gY29udGFpbnMgdGhlIHNvdXJjZSBmdXR1cmUuCiAgc3RhdGljIGNvbnN0IGludCBfc3RhdGVDaGFpbmVkID0gMjsKCiAgLy8vIFRoZSBmdXR1cmUgaGFzIGJlZW4gY29tcGxldGVkIHdpdGggYSB2YWx1ZSByZXN1bHQuCiAgc3RhdGljIGNvbnN0IGludCBfc3RhdGVWYWx1ZSA9IDQ7CgogIC8vLyBUaGUgZnV0dXJlIGhhcyBiZWVuIGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yIHJlc3VsdC4KICBzdGF0aWMgY29uc3QgaW50IF9zdGF0ZUVycm9yID0gODsKCiAgLyoqIFdoZXRoZXIgdGhlIGZ1dHVyZSBpcyBjb21wbGV0ZSwgYW5kIGFzIHdoYXQuICovCiAgaW50IF9zdGF0ZSA9IF9zdGF0ZUluY29tcGxldGU7CgogIC8qKgogICAqIFpvbmUgdGhhdCB0aGUgZnV0dXJlIHdhcyBjb21wbGV0ZWQgZnJvbS4KICAgKiBUaGlzIGlzIHRoZSB6b25lIHRoYXQgYW4gZXJyb3IgcmVzdWx0IGJlbG9uZ3MgdG8uCiAgICoKICAgKiBVbnRpbCB0aGUgZnV0dXJlIGlzIGNvbXBsZXRlZCwgdGhlIGZpZWxkIG1heSBob2xkIHRoZSB6b25lIHRoYXQKICAgKiBsaXN0ZW5lciBjYWxsYmFja3MgdXNlZCB0byBjcmVhdGUgdGhpcyBmdXR1cmUgc2hvdWxkIGJlIHJ1biBpbi4KICAgKi8KICBmaW5hbCBab25lIF96b25lOwoKICAvKioKICAgKiBFaXRoZXIgdGhlIHJlc3VsdCwgYSBsaXN0IG9mIGxpc3RlbmVycyBvciBhbm90aGVyIGZ1dHVyZS4KICAgKgogICAqIFRoZSByZXN1bHQgb2YgdGhlIGZ1dHVyZSBpcyBlaXRoZXIgYSB2YWx1ZSBvciBhbiBlcnJvci4KICAgKiBBIHJlc3VsdCBpcyBvbmx5IHN0b3JlZCB3aGVuIHRoZSBmdXR1cmUgaGFzIGNvbXBsZXRlZC4KICAgKgogICAqIFRoZSBsaXN0ZW5lcnMgaXMgYW4gaW50ZXJuYWxseSBsaW5rZWQgbGlzdCBvZiBbX0Z1dHVyZUxpc3RlbmVyXXMuCiAgICogTGlzdGVuZXJzIGFyZSBvbmx5IHJlbWVtYmVyZWQgd2hpbGUgdGhlIGZ1dHVyZSBpcyBub3QgeWV0IGNvbXBsZXRlLAogICAqIGFuZCBpdCBpcyBub3QgY2hhaW5lZCB0byBhbm90aGVyIGZ1dHVyZS4KICAgKgogICAqIFRoZSBmdXR1cmUgaXMgYW5vdGhlciBmdXR1cmUgdGhhdCBoaXMgZnV0dXJlIGlzIGNoYWluZWQgdG8uIFRoaXMgZnV0dXJlCiAgICogaXMgd2FpdGluZyBmb3IgdGhlIG90aGVyIGZ1dHVyZSB0byBjb21wbGV0ZSwgYW5kIHdoZW4gaXQgZG9lcywgdGhpcyBmdXR1cmUKICAgKiB3aWxsIGNvbXBsZXRlIHdpdGggdGhlIHNhbWUgcmVzdWx0LgogICAqIEFsbCBsaXN0ZW5lcnMgYXJlIGZvcndhcmRlZCB0byB0aGUgb3RoZXIgZnV0dXJlLgogICAqLwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICB2YXIgX3Jlc3VsdE9yTGlzdGVuZXJzOwoKICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIHVzZWQgYnkgYXN5bmMvYXdhaXQuCiAgX0Z1dHVyZSgpIDogX3pvbmUgPSBab25lLmN1cnJlbnQ7CgogIF9GdXR1cmUuaW1tZWRpYXRlKEZ1dHVyZU9yPFQ+IHJlc3VsdCkgOiBfem9uZSA9IFpvbmUuY3VycmVudCB7CiAgICBfYXN5bmNDb21wbGV0ZShyZXN1bHQpOwogIH0KCiAgLyoqIENyZWF0ZXMgYSBmdXR1cmUgd2l0aCB0aGUgdmFsdWUgYW5kIHRoZSBzcGVjaWZpZWQgem9uZS4gKi8KICBfRnV0dXJlLnpvbmVWYWx1ZShUIHZhbHVlLCB0aGlzLl96b25lKSB7CiAgICBfc2V0VmFsdWUodmFsdWUpOwogIH0KCiAgX0Z1dHVyZS5pbW1lZGlhdGVFcnJvcih2YXIgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKQogICAgICA6IF96b25lID0gWm9uZS5jdXJyZW50IHsKICAgIF9hc3luY0NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgLyoqIENyZWF0ZXMgYSBmdXR1cmUgdGhhdCBpcyBhbHJlYWR5IGNvbXBsZXRlZCB3aXRoIHRoZSB2YWx1ZS4gKi8KICBfRnV0dXJlLnZhbHVlKFQgdmFsdWUpIDogdGhpcy56b25lVmFsdWUodmFsdWUsIFpvbmUuY3VycmVudCk7CgogIGJvb2wgZ2V0IF9tYXlDb21wbGV0ZSA9PiBfc3RhdGUgPT0gX3N0YXRlSW5jb21wbGV0ZTsKICBib29sIGdldCBfaXNQZW5kaW5nQ29tcGxldGUgPT4gX3N0YXRlID09IF9zdGF0ZVBlbmRpbmdDb21wbGV0ZTsKICBib29sIGdldCBfbWF5QWRkTGlzdGVuZXIgPT4gX3N0YXRlIDw9IF9zdGF0ZVBlbmRpbmdDb21wbGV0ZTsKICBib29sIGdldCBfaXNDaGFpbmVkID0+IF9zdGF0ZSA9PSBfc3RhdGVDaGFpbmVkOwogIGJvb2wgZ2V0IF9pc0NvbXBsZXRlID0+IF9zdGF0ZSA+PSBfc3RhdGVWYWx1ZTsKICBib29sIGdldCBfaGFzRXJyb3IgPT4gX3N0YXRlID09IF9zdGF0ZUVycm9yOwoKICBzdGF0aWMgTGlzdDxGdW5jdGlvbj4gX2NvbnRpbnVhdGlvbkZ1bmN0aW9ucyhfRnV0dXJlPE9iamVjdD4gZnV0dXJlKSB7CiAgICBMaXN0PEZ1bmN0aW9uPiByZXN1bHQgPSBudWxsOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKGZ1dHVyZS5fbWF5QWRkTGlzdGVuZXIpIHJldHVybiByZXN1bHQ7CiAgICAgIGFzc2VydCghZnV0dXJlLl9pc0NvbXBsZXRlKTsKICAgICAgYXNzZXJ0KCFmdXR1cmUuX2lzQ2hhaW5lZCk7CiAgICAgIC8vIFNvIF9yZXN1bHRPckxpc3RlbmVycyBjb250YWlucyBsaXN0ZW5lcnMuCiAgICAgIF9GdXR1cmVMaXN0ZW5lcjxPYmplY3QsIE9iamVjdD4gbGlzdGVuZXIgPSBmdXR1cmUuX3Jlc3VsdE9yTGlzdGVuZXJzOwogICAgICBpZiAobGlzdGVuZXIgIT0gbnVsbCAmJgogICAgICAgICAgbGlzdGVuZXIuX25leHRMaXN0ZW5lciA9PSBudWxsICYmCiAgICAgICAgICBsaXN0ZW5lci5pc0F3YWl0KSB7CiAgICAgICAgKHJlc3VsdCA/Pz0gPEZ1bmN0aW9uPltdKS5hZGQobGlzdGVuZXIuaGFuZGxlVmFsdWUpOwogICAgICAgIGZ1dHVyZSA9IGxpc3RlbmVyLnJlc3VsdDsKICAgICAgICBhc3NlcnQoIWZ1dHVyZS5faXNDb21wbGV0ZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIF9zZXRDaGFpbmVkKF9GdXR1cmUgc291cmNlKSB7CiAgICBhc3NlcnQoX21heUFkZExpc3RlbmVyKTsKICAgIF9zdGF0ZSA9IF9zdGF0ZUNoYWluZWQ7CiAgICBfcmVzdWx0T3JMaXN0ZW5lcnMgPSBzb3VyY2U7CiAgfQoKICBGdXR1cmU8Uj4gdGhlbjxSPihGdXR1cmVPcjxSPiBmKFQgdmFsdWUpLCB7RnVuY3Rpb24gb25FcnJvcn0pIHsKICAgIFpvbmUgY3VycmVudFpvbmUgPSBab25lLmN1cnJlbnQ7CiAgICBpZiAoIWlkZW50aWNhbChjdXJyZW50Wm9uZSwgX3Jvb3Rab25lKSkgewogICAgICBmID0gY3VycmVudFpvbmUucmVnaXN0ZXJVbmFyeUNhbGxiYWNrPEZ1dHVyZU9yPFI+LCBUPihmKTsKICAgICAgaWYgKG9uRXJyb3IgIT0gbnVsbCkgewogICAgICAgIC8vIEluIGNoZWNrZWQgbW9kZSwgdGhpcyBjaGVja3MgdGhhdCBvbkVycm9yIGlzIGFzc2lnbmFibGUgdG8gb25lIG9mOgogICAgICAgIC8vICAgZHluYW1pYyBGdW5jdGlvbihPYmplY3QpCiAgICAgICAgLy8gICBkeW5hbWljIEZ1bmN0aW9uKE9iamVjdCwgU3RhY2tUcmFjZSkKICAgICAgICBvbkVycm9yID0gX3JlZ2lzdGVyRXJyb3JIYW5kbGVyKG9uRXJyb3IsIGN1cnJlbnRab25lKTsKICAgICAgfQogICAgfQogICAgX0Z1dHVyZTxSPiByZXN1bHQgPSBuZXcgX0Z1dHVyZTxSPigpOwogICAgX2FkZExpc3RlbmVyKG5ldyBfRnV0dXJlTGlzdGVuZXI8VCwgUj4udGhlbihyZXN1bHQsIGYsIG9uRXJyb3IpKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gUmVnaXN0ZXJzIGEgc3lzdGVtIGNyZWF0ZWQgcmVzdWx0IGFuZCBlcnJvciBjb250aW51YXRpb24uCiAgLy8vCiAgLy8vIFVzZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBhd2FpdGAgdG8gbGlzdGVuIHRvIGEgZnV0dXJlLgogIC8vLyBUaGUgc3lzdGVtIGNyZWF0ZWQgbGlzZW5lcnMgYXJlIG5vdCByZWdpc3RlcmVkIGluIHRoZSB6b25lLAogIC8vLyBhbmQgdGhlIGxpc3RlbmVyIGlzIG1hcmtlZCBhcyBiZWluZyBmcm9tIGFuIGBhd2FpdGAuCiAgLy8vIFRoaXMgbWFya2VyIGlzIHVzZWQgaW4gW19jb250aW51YXRpb25GdW5jdGlvbnNdLgogIEZ1dHVyZTxFPiBfdGhlbkF3YWl0PEU+KAogICAgICBGdXR1cmVPcjxFPiBmKFQgdmFsdWUpLCBGdW5jdGlvbiBvbkVycm9yKSB7CiAgICBfRnV0dXJlPEU+IHJlc3VsdCA9IG5ldyBfRnV0dXJlPEU+KCk7CiAgICBfYWRkTGlzdGVuZXIobmV3IF9GdXR1cmVMaXN0ZW5lcjxULCBFPi50aGVuQXdhaXQocmVzdWx0LCBmLCBvbkVycm9yKSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRnV0dXJlPFQ+IGNhdGNoRXJyb3IoRnVuY3Rpb24gb25FcnJvciwge2Jvb2wgdGVzdChlcnJvcil9KSB7CiAgICBfRnV0dXJlPFQ+IHJlc3VsdCA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBpZiAoIWlkZW50aWNhbChyZXN1bHQuX3pvbmUsIF9yb290Wm9uZSkpIHsKICAgICAgb25FcnJvciA9IF9yZWdpc3RlckVycm9ySGFuZGxlcihvbkVycm9yLCByZXN1bHQuX3pvbmUpOwogICAgICBpZiAodGVzdCAhPSBudWxsKSB0ZXN0ID0gcmVzdWx0Ll96b25lLnJlZ2lzdGVyVW5hcnlDYWxsYmFjayh0ZXN0KTsKICAgIH0KICAgIF9hZGRMaXN0ZW5lcihuZXcgX0Z1dHVyZUxpc3RlbmVyPFQsIFQ+LmNhdGNoRXJyb3IocmVzdWx0LCBvbkVycm9yLCB0ZXN0KSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRnV0dXJlPFQ+IHdoZW5Db21wbGV0ZShkeW5hbWljIGFjdGlvbigpKSB7CiAgICBfRnV0dXJlPFQ+IHJlc3VsdCA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBpZiAoIWlkZW50aWNhbChyZXN1bHQuX3pvbmUsIF9yb290Wm9uZSkpIHsKICAgICAgYWN0aW9uID0gcmVzdWx0Ll96b25lLnJlZ2lzdGVyQ2FsbGJhY2s8ZHluYW1pYz4oYWN0aW9uKTsKICAgIH0KICAgIF9hZGRMaXN0ZW5lcihuZXcgX0Z1dHVyZUxpc3RlbmVyPFQsIFQ+LndoZW5Db21wbGV0ZShyZXN1bHQsIGFjdGlvbikpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFN0cmVhbTxUPiBhc1N0cmVhbSgpID0+IG5ldyBTdHJlYW08VD4uZnJvbUZ1dHVyZSh0aGlzKTsKCiAgdm9pZCBfc2V0UGVuZGluZ0NvbXBsZXRlKCkgewogICAgYXNzZXJ0KF9tYXlDb21wbGV0ZSk7CiAgICBfc3RhdGUgPSBfc3RhdGVQZW5kaW5nQ29tcGxldGU7CiAgfQoKICB2b2lkIF9jbGVhclBlbmRpbmdDb21wbGV0ZSgpIHsKICAgIGFzc2VydChfaXNQZW5kaW5nQ29tcGxldGUpOwogICAgX3N0YXRlID0gX3N0YXRlSW5jb21wbGV0ZTsKICB9CgogIEFzeW5jRXJyb3IgZ2V0IF9lcnJvciB7CiAgICBhc3NlcnQoX2hhc0Vycm9yKTsKICAgIHJldHVybiBfcmVzdWx0T3JMaXN0ZW5lcnM7CiAgfQoKICBfRnV0dXJlIGdldCBfY2hhaW5Tb3VyY2UgewogICAgYXNzZXJ0KF9pc0NoYWluZWQpOwogICAgcmV0dXJuIF9yZXN1bHRPckxpc3RlbmVyczsKICB9CgogIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgYXN5bmMvYXdhaXQuCiAgdm9pZCBfc2V0VmFsdWUoVCB2YWx1ZSkgewogICAgYXNzZXJ0KCFfaXNDb21wbGV0ZSk7IC8vIEJ1dCBtYXkgaGF2ZSBhIGNvbXBsZXRpb24gcGVuZGluZy4KICAgIF9zdGF0ZSA9IF9zdGF0ZVZhbHVlOwogICAgX3Jlc3VsdE9yTGlzdGVuZXJzID0gdmFsdWU7CiAgfQoKICB2b2lkIF9zZXRFcnJvck9iamVjdChBc3luY0Vycm9yIGVycm9yKSB7CiAgICBhc3NlcnQoIV9pc0NvbXBsZXRlKTsgLy8gQnV0IG1heSBoYXZlIGEgY29tcGxldGlvbiBwZW5kaW5nLgogICAgX3N0YXRlID0gX3N0YXRlRXJyb3I7CiAgICBfcmVzdWx0T3JMaXN0ZW5lcnMgPSBlcnJvcjsKICB9CgogIHZvaWQgX3NldEVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBfc2V0RXJyb3JPYmplY3QobmV3IEFzeW5jRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpKTsKICB9CgogIC8vLyBDb3B5IHRoZSBjb21wbGV0aW9uIHJlc3VsdCBvZiBbc291cmNlXSBpbnRvIHRoaXMgZnV0dXJlLgogIC8vLwogIC8vLyBVc2VkIHdoZW4gYSBjaGFpbmVkIGZ1dHVyZSBub3RpY2VzIHRoYXQgaXRzIHNvdXJjZSBpcyBjb21wbGV0ZWQuCiAgdm9pZCBfY2xvbmVSZXN1bHQoX0Z1dHVyZSBzb3VyY2UpIHsKICAgIGFzc2VydCghX2lzQ29tcGxldGUpOwogICAgYXNzZXJ0KHNvdXJjZS5faXNDb21wbGV0ZSk7CiAgICBfc3RhdGUgPSBzb3VyY2UuX3N0YXRlOwogICAgX3Jlc3VsdE9yTGlzdGVuZXJzID0gc291cmNlLl9yZXN1bHRPckxpc3RlbmVyczsKICB9CgogIHZvaWQgX2FkZExpc3RlbmVyKF9GdXR1cmVMaXN0ZW5lciBsaXN0ZW5lcikgewogICAgYXNzZXJ0KGxpc3RlbmVyLl9uZXh0TGlzdGVuZXIgPT0gbnVsbCk7CiAgICBpZiAoX21heUFkZExpc3RlbmVyKSB7CiAgICAgIGxpc3RlbmVyLl9uZXh0TGlzdGVuZXIgPSBfcmVzdWx0T3JMaXN0ZW5lcnM7CiAgICAgIF9yZXN1bHRPckxpc3RlbmVycyA9IGxpc3RlbmVyOwogICAgfSBlbHNlIHsKICAgICAgaWYgKF9pc0NoYWluZWQpIHsKICAgICAgICAvLyBEZWxlZ2F0ZSBsaXN0ZW5lcnMgdG8gY2hhaW5lZCBzb3VyY2UgZnV0dXJlLgogICAgICAgIC8vIElmIHRoZSBzb3VyY2UgaXMgY29tcGxldGUsIGluc3RlYWQgY29weSBpdHMgdmFsdWVzIGFuZAogICAgICAgIC8vIGRyb3AgdGhlIGNoYWluaW5nLgogICAgICAgIF9GdXR1cmUgc291cmNlID0gX2NoYWluU291cmNlOwogICAgICAgIGlmICghc291cmNlLl9pc0NvbXBsZXRlKSB7CiAgICAgICAgICBzb3VyY2UuX2FkZExpc3RlbmVyKGxpc3RlbmVyKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgX2Nsb25lUmVzdWx0KHNvdXJjZSk7CiAgICAgIH0KICAgICAgYXNzZXJ0KF9pc0NvbXBsZXRlKTsKICAgICAgLy8gSGFuZGxlIGxhdGUgbGlzdGVuZXJzIGFzeW5jaHJvbm91c2x5LgogICAgICBfem9uZS5zY2hlZHVsZU1pY3JvdGFzaygoKSB7CiAgICAgICAgX3Byb3BhZ2F0ZVRvTGlzdGVuZXJzKHRoaXMsIGxpc3RlbmVyKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICB2b2lkIF9wcmVwZW5kTGlzdGVuZXJzKF9GdXR1cmVMaXN0ZW5lciBsaXN0ZW5lcnMpIHsKICAgIGlmIChsaXN0ZW5lcnMgPT0gbnVsbCkgcmV0dXJuOwogICAgaWYgKF9tYXlBZGRMaXN0ZW5lcikgewogICAgICBfRnV0dXJlTGlzdGVuZXIgZXhpc3RpbmdMaXN0ZW5lcnMgPSBfcmVzdWx0T3JMaXN0ZW5lcnM7CiAgICAgIF9yZXN1bHRPckxpc3RlbmVycyA9IGxpc3RlbmVyczsKICAgICAgaWYgKGV4aXN0aW5nTGlzdGVuZXJzICE9IG51bGwpIHsKICAgICAgICBfRnV0dXJlTGlzdGVuZXIgY3Vyc29yID0gbGlzdGVuZXJzOwogICAgICAgIHdoaWxlIChjdXJzb3IuX25leHRMaXN0ZW5lciAhPSBudWxsKSB7CiAgICAgICAgICBjdXJzb3IgPSBjdXJzb3IuX25leHRMaXN0ZW5lcjsKICAgICAgICB9CiAgICAgICAgY3Vyc29yLl9uZXh0TGlzdGVuZXIgPSBleGlzdGluZ0xpc3RlbmVyczsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKF9pc0NoYWluZWQpIHsKICAgICAgICAvLyBEZWxlZ2F0ZSBsaXN0ZW5lcnMgdG8gY2hhaW5lZCBzb3VyY2UgZnV0dXJlLgogICAgICAgIC8vIElmIHRoZSBzb3VyY2UgaXMgY29tcGxldGUsIGluc3RlYWQgY29weSBpdHMgdmFsdWVzIGFuZAogICAgICAgIC8vIGRyb3AgdGhlIGNoYWluaW5nLgogICAgICAgIF9GdXR1cmUgc291cmNlID0gX2NoYWluU291cmNlOwogICAgICAgIGlmICghc291cmNlLl9pc0NvbXBsZXRlKSB7CiAgICAgICAgICBzb3VyY2UuX3ByZXBlbmRMaXN0ZW5lcnMobGlzdGVuZXJzKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgX2Nsb25lUmVzdWx0KHNvdXJjZSk7CiAgICAgIH0KICAgICAgYXNzZXJ0KF9pc0NvbXBsZXRlKTsKICAgICAgbGlzdGVuZXJzID0gX3JldmVyc2VMaXN0ZW5lcnMobGlzdGVuZXJzKTsKICAgICAgX3pvbmUuc2NoZWR1bGVNaWNyb3Rhc2soKCkgewogICAgICAgIF9wcm9wYWdhdGVUb0xpc3RlbmVycyh0aGlzLCBsaXN0ZW5lcnMpOwogICAgICB9KTsKICAgIH0KICB9CgogIF9GdXR1cmVMaXN0ZW5lciBfcmVtb3ZlTGlzdGVuZXJzKCkgewogICAgLy8gUmV2ZXJzZSBsaXN0ZW5lcnMgYmVmb3JlIHJldHVybmluZyB0aGVtLCBzbyB0aGUgcmVzdWx0aW5nIGxpc3QgaXMgaW4KICAgIC8vIHN1YnNjcmlwdGlvbiBvcmRlci4KICAgIGFzc2VydCghX2lzQ29tcGxldGUpOwogICAgX0Z1dHVyZUxpc3RlbmVyIGN1cnJlbnQgPSBfcmVzdWx0T3JMaXN0ZW5lcnM7CiAgICBfcmVzdWx0T3JMaXN0ZW5lcnMgPSBudWxsOwogICAgcmV0dXJuIF9yZXZlcnNlTGlzdGVuZXJzKGN1cnJlbnQpOwogIH0KCiAgX0Z1dHVyZUxpc3RlbmVyIF9yZXZlcnNlTGlzdGVuZXJzKF9GdXR1cmVMaXN0ZW5lciBsaXN0ZW5lcnMpIHsKICAgIF9GdXR1cmVMaXN0ZW5lciBwcmV2OwogICAgX0Z1dHVyZUxpc3RlbmVyIGN1cnJlbnQgPSBsaXN0ZW5lcnM7CiAgICB3aGlsZSAoY3VycmVudCAhPSBudWxsKSB7CiAgICAgIF9GdXR1cmVMaXN0ZW5lciBuZXh0ID0gY3VycmVudC5fbmV4dExpc3RlbmVyOwogICAgICBjdXJyZW50Ll9uZXh0TGlzdGVuZXIgPSBwcmV2OwogICAgICBwcmV2ID0gY3VycmVudDsKICAgICAgY3VycmVudCA9IG5leHQ7CiAgICB9CiAgICByZXR1cm4gcHJldjsKICB9CgogIC8vIFRha2UgdGhlIHZhbHVlICh3aGVuIGNvbXBsZXRlZCkgb2Ygc291cmNlIGFuZCBjb21wbGV0ZSB0YXJnZXQgd2l0aCB0aGF0CiAgLy8gdmFsdWUgKG9yIGVycm9yKS4gVGhpcyBmdW5jdGlvbiBjb3VsZCBjaGFpbiBhbGwgRnV0dXJlcywgYnV0IGlzIHNsb3dlcgogIC8vIGZvciBfRnV0dXJlIHRoYW4gX2NoYWluQ29yZUZ1dHVyZSwgc28geW91IG11c3QgdXNlIF9jaGFpbkNvcmVGdXR1cmUKICAvLyBpbiB0aGF0IGNhc2UuCiAgc3RhdGljIHZvaWQgX2NoYWluRm9yZWlnbkZ1dHVyZShGdXR1cmUgc291cmNlLCBfRnV0dXJlIHRhcmdldCkgewogICAgYXNzZXJ0KCF0YXJnZXQuX2lzQ29tcGxldGUpOwogICAgYXNzZXJ0KHNvdXJjZSBpcyEgX0Z1dHVyZSk7CgogICAgLy8gTWFyayB0aGUgdGFyZ2V0IGFzIGNoYWluZWQgKGFuZCBhcyBzdWNoIGhhbGYtY29tcGxldGVkKS4KICAgIHRhcmdldC5fc2V0UGVuZGluZ0NvbXBsZXRlKCk7CiAgICB0cnkgewogICAgICBzb3VyY2UudGhlbigodmFsdWUpIHsKICAgICAgICBhc3NlcnQodGFyZ2V0Ll9pc1BlbmRpbmdDb21wbGV0ZSk7CiAgICAgICAgLy8gVGhlICJ2YWx1ZSIgbWF5IGJlIGFub3RoZXIgZnV0dXJlIGlmIHRoZSBmb3JlaWduIGZ1dHVyZQogICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGlzIG1pcy1iZWhhdmluZywKICAgICAgICAvLyBzbyB1c2UgX2NvbXBsZXRlIGluc3RlYWQgb2YgX2NvbXBsZXRlV2l0aFZhbHVlLgogICAgICAgIHRhcmdldC5fY2xlYXJQZW5kaW5nQ29tcGxldGUoKTsgLy8gQ2xlYXIgdGhpcyBmaXJzdCwgaXQncyBzZXQgYWdhaW4uCiAgICAgICAgdGFyZ2V0Ll9jb21wbGV0ZSh2YWx1ZSk7CiAgICAgIH0sCiAgICAgICAgICAvLyBUT0RPKGZsb2l0c2NoKTogZXZlbnR1YWxseSB3ZSB3b3VsZCBsaWtlIHRvIG1ha2UgdGhpcyBub24tb3B0aW9uYWwKICAgICAgICAgIC8vIGFuZCBkZXBlbmRlbnQgb24gdGhlIGxpc3RlbmVycyBvZiB0aGUgdGFyZ2V0IGZ1dHVyZS4gSWYgbm9uZSBvZgogICAgICAgICAgLy8gdGhlIHRhcmdldCBmdXR1cmUncyBsaXN0ZW5lcnMgd2FudCB0byBoYXZlIHRoZSBzdGFjayB0cmFjZSB3ZSBkb24ndAogICAgICAgICAgLy8gbmVlZCBhIHRyYWNlLgogICAgICAgICAgb25FcnJvcjogKGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgICAgIGFzc2VydCh0YXJnZXQuX2lzUGVuZGluZ0NvbXBsZXRlKTsKICAgICAgICB0YXJnZXQuX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICB9KTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgLy8gVGhpcyBvbmx5IGhhcHBlbnMgaWYgdGhlIGB0aGVuYCBjYWxsIHRocmV3IHN5bmNocm9ub3VzbHkgd2hlbiBnaXZlbgogICAgICAvLyB2YWxpZCBhcmd1bWVudHMuCiAgICAgIC8vIFRoYXQgcmVxdWlyZXMgYSBub24tY29uZm9ybWluZyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRnV0dXJlIGludGVyZmFjZSwKICAgICAgLy8gd2hpY2ggc2hvdWxkLCBob3BlZnVsbHksIG5ldmVyIGhhcHBlbi4KICAgICAgc2NoZWR1bGVNaWNyb3Rhc2soKCkgewogICAgICAgIHRhcmdldC5fY29tcGxldGVFcnJvcihlLCBzKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICAvLyBUYWtlIHRoZSB2YWx1ZSAod2hlbiBjb21wbGV0ZWQpIG9mIHNvdXJjZSBhbmQgY29tcGxldGUgdGFyZ2V0IHdpdGggdGhhdAogIC8vIHZhbHVlIChvciBlcnJvcikuIFRoaXMgZnVuY3Rpb24gZXhwZWN0cyB0aGF0IHNvdXJjZSBpcyBhIF9GdXR1cmUuCiAgc3RhdGljIHZvaWQgX2NoYWluQ29yZUZ1dHVyZShfRnV0dXJlIHNvdXJjZSwgX0Z1dHVyZSB0YXJnZXQpIHsKICAgIGFzc2VydCh0YXJnZXQuX21heUFkZExpc3RlbmVyKTsgLy8gTm90IGNvbXBsZXRlZCwgbm90IGFscmVhZHkgY2hhaW5lZC4KICAgIHdoaWxlIChzb3VyY2UuX2lzQ2hhaW5lZCkgewogICAgICBzb3VyY2UgPSBzb3VyY2UuX2NoYWluU291cmNlOwogICAgfQogICAgaWYgKHNvdXJjZS5faXNDb21wbGV0ZSkgewogICAgICBfRnV0dXJlTGlzdGVuZXIgbGlzdGVuZXJzID0gdGFyZ2V0Ll9yZW1vdmVMaXN0ZW5lcnMoKTsKICAgICAgdGFyZ2V0Ll9jbG9uZVJlc3VsdChzb3VyY2UpOwogICAgICBfcHJvcGFnYXRlVG9MaXN0ZW5lcnModGFyZ2V0LCBsaXN0ZW5lcnMpOwogICAgfSBlbHNlIHsKICAgICAgX0Z1dHVyZUxpc3RlbmVyIGxpc3RlbmVycyA9IHRhcmdldC5fcmVzdWx0T3JMaXN0ZW5lcnM7CiAgICAgIHRhcmdldC5fc2V0Q2hhaW5lZChzb3VyY2UpOwogICAgICBzb3VyY2UuX3ByZXBlbmRMaXN0ZW5lcnMobGlzdGVuZXJzKTsKICAgIH0KICB9CgogIHZvaWQgX2NvbXBsZXRlKEZ1dHVyZU9yPFQ+IHZhbHVlKSB7CiAgICBhc3NlcnQoIV9pc0NvbXBsZXRlKTsKICAgIGlmICh2YWx1ZSBpcyBGdXR1cmU8VD4pIHsKICAgICAgaWYgKHZhbHVlIGlzIF9GdXR1cmU8VD4pIHsKICAgICAgICBfY2hhaW5Db3JlRnV0dXJlKHZhbHVlLCB0aGlzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfY2hhaW5Gb3JlaWduRnV0dXJlKHZhbHVlLCB0aGlzKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgX0Z1dHVyZUxpc3RlbmVyIGxpc3RlbmVycyA9IF9yZW1vdmVMaXN0ZW5lcnMoKTsKICAgICAgX3NldFZhbHVlKHZhbHVlKTsKICAgICAgX3Byb3BhZ2F0ZVRvTGlzdGVuZXJzKHRoaXMsIGxpc3RlbmVycyk7CiAgICB9CiAgfQoKICB2b2lkIF9jb21wbGV0ZVdpdGhWYWx1ZShUIHZhbHVlKSB7CiAgICBhc3NlcnQoIV9pc0NvbXBsZXRlKTsKICAgIGFzc2VydCh2YWx1ZSBpcyEgRnV0dXJlPFQ+KTsKCiAgICBfRnV0dXJlTGlzdGVuZXIgbGlzdGVuZXJzID0gX3JlbW92ZUxpc3RlbmVycygpOwogICAgX3NldFZhbHVlKHZhbHVlKTsKICAgIF9wcm9wYWdhdGVUb0xpc3RlbmVycyh0aGlzLCBsaXN0ZW5lcnMpOwogIH0KCiAgdm9pZCBfY29tcGxldGVFcnJvcihPYmplY3QgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBhc3NlcnQoIV9pc0NvbXBsZXRlKTsKCiAgICBfRnV0dXJlTGlzdGVuZXIgbGlzdGVuZXJzID0gX3JlbW92ZUxpc3RlbmVycygpOwogICAgX3NldEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIF9wcm9wYWdhdGVUb0xpc3RlbmVycyh0aGlzLCBsaXN0ZW5lcnMpOwogIH0KCiAgdm9pZCBfYXN5bmNDb21wbGV0ZShGdXR1cmVPcjxUPiB2YWx1ZSkgewogICAgYXNzZXJ0KCFfaXNDb21wbGV0ZSk7CiAgICAvLyBUd28gY29ybmVyIGNhc2VzIGlmIHRoZSB2YWx1ZSBpcyBhIGZ1dHVyZToKICAgIC8vICAgMS4gdGhlIGZ1dHVyZSBpcyBhbHJlYWR5IGNvbXBsZXRlZCBhbmQgYW4gZXJyb3IuCiAgICAvLyAgIDIuIHRoZSBmdXR1cmUgaXMgbm90IHlldCBjb21wbGV0ZWQgYnV0IG1pZ2h0IGJlY29tZSBhbiBlcnJvci4KICAgIC8vIFRoZSBmaXJzdCBjYXNlIG1lYW5zIHRoYXQgd2UgbXVzdCBub3QgaW1tZWRpYXRlbHkgY29tcGxldGUgdGhlIEZ1dHVyZSwKICAgIC8vIGFzIG91ciBjb2RlIHdvdWxkIGltbWVkaWF0ZWx5IHN0YXJ0IHByb3BhZ2F0aW5nIHRoZSBlcnJvciB3aXRob3V0CiAgICAvLyBnaXZpbmcgdGhlIHRpbWUgdG8gaW5zdGFsbCBlcnJvci1oYW5kbGVycy4KICAgIC8vIEhvd2V2ZXIgdGhlIHNlY29uZCBjYXNlIHJlcXVpcmVzIHVzIHRvIGRlYWwgd2l0aCB0aGUgdmFsdWUgaW1tZWRpYXRlbHkuCiAgICAvLyBPdGhlcndpc2UgdGhlIHZhbHVlIGNvdWxkIGNvbXBsZXRlIHdpdGggYW4gZXJyb3IgYW5kIHJlcG9ydCBhbgogICAgLy8gdW5oYW5kbGVkIGVycm9yLCBldmVuIHRob3VnaCB3ZSBrbm93IHdlIGFyZSBhbHJlYWR5IGdvaW5nIHRvIGxpc3RlbiB0bwogICAgLy8gaXQuCgogICAgaWYgKHZhbHVlIGlzIEZ1dHVyZTxUPikgewogICAgICBfY2hhaW5GdXR1cmUodmFsdWUpOwogICAgICByZXR1cm47CiAgICB9CiAgICBfc2V0UGVuZGluZ0NvbXBsZXRlKCk7CiAgICBfem9uZS5zY2hlZHVsZU1pY3JvdGFzaygoKSB7CiAgICAgIF9jb21wbGV0ZVdpdGhWYWx1ZSh2YWx1ZSk7CiAgICB9KTsKICB9CgogIHZvaWQgX2NoYWluRnV0dXJlKEZ1dHVyZTxUPiB2YWx1ZSkgewogICAgaWYgKHZhbHVlIGlzIF9GdXR1cmU8VD4pIHsKICAgICAgaWYgKHZhbHVlLl9oYXNFcnJvcikgewogICAgICAgIC8vIERlbGF5IGNvbXBsZXRpb24gdG8gYWxsb3cgdGhlIHVzZXIgdG8gcmVnaXN0ZXIgY2FsbGJhY2tzLgogICAgICAgIF9zZXRQZW5kaW5nQ29tcGxldGUoKTsKICAgICAgICBfem9uZS5zY2hlZHVsZU1pY3JvdGFzaygoKSB7CiAgICAgICAgICBfY2hhaW5Db3JlRnV0dXJlKHZhbHVlLCB0aGlzKTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfY2hhaW5Db3JlRnV0dXJlKHZhbHVlLCB0aGlzKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBKdXN0IGxpc3RlbiBvbiB0aGUgZm9yZWlnbiBmdXR1cmUuIFRoaXMgZ3VhcmFudGVlcyBhbiBhc3luYyBkZWxheS4KICAgIF9jaGFpbkZvcmVpZ25GdXR1cmUodmFsdWUsIHRoaXMpOwogIH0KCiAgdm9pZCBfYXN5bmNDb21wbGV0ZUVycm9yKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIGFzc2VydCghX2lzQ29tcGxldGUpOwoKICAgIF9zZXRQZW5kaW5nQ29tcGxldGUoKTsKICAgIF96b25lLnNjaGVkdWxlTWljcm90YXNrKCgpIHsKICAgICAgX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgfSk7CiAgfQoKICAvKioKICAgKiBQcm9wYWdhdGVzIHRoZSB2YWx1ZS9lcnJvciBvZiBbc291cmNlXSB0byBpdHMgW2xpc3RlbmVyc10sIGV4ZWN1dGluZyB0aGUKICAgKiBsaXN0ZW5lcnMnIGNhbGxiYWNrcy4KICAgKi8KICBzdGF0aWMgdm9pZCBfcHJvcGFnYXRlVG9MaXN0ZW5lcnMoX0Z1dHVyZSBzb3VyY2UsIF9GdXR1cmVMaXN0ZW5lciBsaXN0ZW5lcnMpIHsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGFzc2VydChzb3VyY2UuX2lzQ29tcGxldGUpOwogICAgICBib29sIGhhc0Vycm9yID0gc291cmNlLl9oYXNFcnJvcjsKICAgICAgaWYgKGxpc3RlbmVycyA9PSBudWxsKSB7CiAgICAgICAgaWYgKGhhc0Vycm9yKSB7CiAgICAgICAgICBBc3luY0Vycm9yIGFzeW5jRXJyb3IgPSBzb3VyY2UuX2Vycm9yOwogICAgICAgICAgc291cmNlLl96b25lCiAgICAgICAgICAgICAgLmhhbmRsZVVuY2F1Z2h0RXJyb3IoYXN5bmNFcnJvci5lcnJvciwgYXN5bmNFcnJvci5zdGFja1RyYWNlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIC8vIFVzdWFsbHkgZnV0dXJlcyBvbmx5IGhhdmUgb25lIGxpc3RlbmVyLiBJZiB0aGV5IGhhdmUgc2V2ZXJhbCwgd2UKICAgICAgLy8gY2FsbCBoYW5kbGUgdGhlbSBzZXBhcmF0ZWx5IGluIHJlY3Vyc2l2ZSBjYWxscywgY29udGludWluZwogICAgICAvLyBoZXJlIG9ubHkgd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBsaXN0ZW5lciBsZWZ0LgogICAgICB3aGlsZSAobGlzdGVuZXJzLl9uZXh0TGlzdGVuZXIgIT0gbnVsbCkgewogICAgICAgIF9GdXR1cmVMaXN0ZW5lciBsaXN0ZW5lciA9IGxpc3RlbmVyczsKICAgICAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lci5fbmV4dExpc3RlbmVyOwogICAgICAgIGxpc3RlbmVyLl9uZXh0TGlzdGVuZXIgPSBudWxsOwogICAgICAgIF9wcm9wYWdhdGVUb0xpc3RlbmVycyhzb3VyY2UsIGxpc3RlbmVyKTsKICAgICAgfQogICAgICBfRnV0dXJlTGlzdGVuZXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnM7CiAgICAgIGZpbmFsIHNvdXJjZVJlc3VsdCA9IHNvdXJjZS5fcmVzdWx0T3JMaXN0ZW5lcnM7CiAgICAgIC8vIERvIHRoZSBhY3R1YWwgcHJvcGFnYXRpb24uCiAgICAgIC8vIFNldCBpbml0aWFsIHN0YXRlIG9mIGxpc3RlbmVySGFzRXJyb3IgYW5kIGxpc3RlbmVyVmFsdWVPckVycm9yLiBUaGVzZQogICAgICAvLyB2YXJpYWJsZXMgYXJlIHVwZGF0ZWQgd2l0aCB0aGUgb3V0Y29tZSBvZiBwb3RlbnRpYWwgY2FsbGJhY2tzLgogICAgICAvLyBOb24tZXJyb3IgcmVzdWx0cywgaW5jbHVkaW5nIGZ1dHVyZXMsIGFyZSBzdG9yZWQgaW4KICAgICAgLy8gbGlzdGVuZXJWYWx1ZU9yRXJyb3IgYW5kIGxpc3RlbmVySGFzRXJyb3IgaXMgc2V0IHRvIGZhbHNlLiBFcnJvcnMKICAgICAgLy8gYXJlIHN0b3JlZCBpbiBsaXN0ZW5lclZhbHVlT3JFcnJvciBhcyBhbiBbQXN5bmNFcnJvcl0gYW5kCiAgICAgIC8vIGxpc3RlbmVySGFzRXJyb3IgaXMgc2V0IHRvIHRydWUuCiAgICAgIGJvb2wgbGlzdGVuZXJIYXNFcnJvciA9IGhhc0Vycm9yOwogICAgICB2YXIgbGlzdGVuZXJWYWx1ZU9yRXJyb3IgPSBzb3VyY2VSZXN1bHQ7CgogICAgICAvLyBPbmx5IGlmIHdlIGVpdGhlciBoYXZlIGFuIGVycm9yIG9yIGNhbGxiYWNrcywgZ28gaW50byB0aGlzLCBzb21ld2hhdAogICAgICAvLyBleHBlbnNpdmUsIGJyYW5jaC4gSGVyZSB3ZSdsbCBlbnRlci9sZWF2ZSB0aGUgem9uZS4gTWFueSBmdXR1cmVzCiAgICAgIC8vIGRvbid0IGhhdmUgY2FsbGJhY2tzLCBzbyB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgb3B0aW1pemF0aW9uLgogICAgICBpZiAoaGFzRXJyb3IgfHwgbGlzdGVuZXIuaGFuZGxlc1ZhbHVlIHx8IGxpc3RlbmVyLmhhbmRsZXNDb21wbGV0ZSkgewogICAgICAgIFpvbmUgem9uZSA9IGxpc3RlbmVyLl96b25lOwogICAgICAgIGlmIChoYXNFcnJvciAmJiAhc291cmNlLl96b25lLmluU2FtZUVycm9yWm9uZSh6b25lKSkgewogICAgICAgICAgLy8gRG9uJ3QgY3Jvc3Mgem9uZSBib3VuZGFyaWVzIHdpdGggZXJyb3JzLgogICAgICAgICAgQXN5bmNFcnJvciBhc3luY0Vycm9yID0gc291cmNlLl9lcnJvcjsKICAgICAgICAgIHNvdXJjZS5fem9uZQogICAgICAgICAgICAgIC5oYW5kbGVVbmNhdWdodEVycm9yKGFzeW5jRXJyb3IuZXJyb3IsIGFzeW5jRXJyb3Iuc3RhY2tUcmFjZSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBab25lIG9sZFpvbmU7CiAgICAgICAgaWYgKCFpZGVudGljYWwoWm9uZS5jdXJyZW50LCB6b25lKSkgewogICAgICAgICAgLy8gQ2hhbmdlIHpvbmUgaWYgaXQncyBub3QgY3VycmVudC4KICAgICAgICAgIG9sZFpvbmUgPSBab25lLl9lbnRlcih6b25lKTsKICAgICAgICB9CgogICAgICAgIC8vIFRoZXNlIGNhbGxiYWNrcyBhcmUgYWJzdHJhY3RlZCB0byBpc29sYXRlIHRoZSB0cnkvY2F0Y2ggYmxvY2tzCiAgICAgICAgLy8gZnJvbSB0aGUgcmVzdCBvZiB0aGUgY29kZSB0byB3b3JrIGFyb3VuZCBhIFY4IGdsYXNzIGphdy4KICAgICAgICB2b2lkIGhhbmRsZVdoZW5Db21wbGV0ZUNhbGxiYWNrKCkgewogICAgICAgICAgLy8gVGhlIHdoZW5Db21wbGV0ZS1oYW5kbGVyIGlzIG5vdCBjb21iaW5lZCB3aXRoIG5vcm1hbCB2YWx1ZS9lcnJvcgogICAgICAgICAgLy8gaGFuZGxpbmcuIFRoaXMgbWVhbnMgYXQgbW9zdCBvbmUgaGFuZGxlWCBtZXRob2QgaXMgY2FsbGVkIHBlcgogICAgICAgICAgLy8gbGlzdGVuZXIuCiAgICAgICAgICBhc3NlcnQoIWxpc3RlbmVyLmhhbmRsZXNWYWx1ZSk7CiAgICAgICAgICBhc3NlcnQoIWxpc3RlbmVyLmhhbmRsZXNFcnJvcik7CiAgICAgICAgICB2YXIgY29tcGxldGVSZXN1bHQ7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb21wbGV0ZVJlc3VsdCA9IGxpc3RlbmVyLmhhbmRsZVdoZW5Db21wbGV0ZSgpOwogICAgICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgICAgICBpZiAoaGFzRXJyb3IgJiYgaWRlbnRpY2FsKHNvdXJjZS5fZXJyb3IuZXJyb3IsIGUpKSB7CiAgICAgICAgICAgICAgbGlzdGVuZXJWYWx1ZU9yRXJyb3IgPSBzb3VyY2UuX2Vycm9yOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGxpc3RlbmVyVmFsdWVPckVycm9yID0gbmV3IEFzeW5jRXJyb3IoZSwgcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGlzdGVuZXJIYXNFcnJvciA9IHRydWU7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChjb21wbGV0ZVJlc3VsdCBpcyBGdXR1cmUpIHsKICAgICAgICAgICAgaWYgKGNvbXBsZXRlUmVzdWx0IGlzIF9GdXR1cmUgJiYgY29tcGxldGVSZXN1bHQuX2lzQ29tcGxldGUpIHsKICAgICAgICAgICAgICBpZiAoY29tcGxldGVSZXN1bHQuX2hhc0Vycm9yKSB7CiAgICAgICAgICAgICAgICBsaXN0ZW5lclZhbHVlT3JFcnJvciA9IGNvbXBsZXRlUmVzdWx0Ll9lcnJvcjsKICAgICAgICAgICAgICAgIGxpc3RlbmVySGFzRXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgdXNlIHRoZSBleGlzdGluZyByZXN1bHQgb2Ygc291cmNlLgogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHdhaXQgZm9yIHRoZSBjb21wbGV0ZVJlc3VsdCBmdXR1cmUgdG8gY29tcGxldGUKICAgICAgICAgICAgLy8gYmVmb3JlIGtub3dpbmcgaWYgaXQncyBhbiBlcnJvciBvciB3ZSBzaG91bGQgdXNlIHRoZSByZXN1bHQKICAgICAgICAgICAgLy8gb2Ygc291cmNlLgogICAgICAgICAgICB2YXIgb3JpZ2luYWxTb3VyY2UgPSBzb3VyY2U7CiAgICAgICAgICAgIGxpc3RlbmVyVmFsdWVPckVycm9yID0gY29tcGxldGVSZXN1bHQudGhlbigoXykgPT4gb3JpZ2luYWxTb3VyY2UpOwogICAgICAgICAgICBsaXN0ZW5lckhhc0Vycm9yID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2b2lkIGhhbmRsZVZhbHVlQ2FsbGJhY2soKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBsaXN0ZW5lclZhbHVlT3JFcnJvciA9IGxpc3RlbmVyLmhhbmRsZVZhbHVlKHNvdXJjZVJlc3VsdCk7CiAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgIGxpc3RlbmVyVmFsdWVPckVycm9yID0gbmV3IEFzeW5jRXJyb3IoZSwgcyk7CiAgICAgICAgICAgIGxpc3RlbmVySGFzRXJyb3IgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdm9pZCBoYW5kbGVFcnJvcigpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIEFzeW5jRXJyb3IgYXN5bmNFcnJvciA9IHNvdXJjZS5fZXJyb3I7CiAgICAgICAgICAgIGlmIChsaXN0ZW5lci5tYXRjaGVzRXJyb3JUZXN0KGFzeW5jRXJyb3IpICYmCiAgICAgICAgICAgICAgICBsaXN0ZW5lci5oYXNFcnJvckNhbGxiYWNrKSB7CiAgICAgICAgICAgICAgbGlzdGVuZXJWYWx1ZU9yRXJyb3IgPSBsaXN0ZW5lci5oYW5kbGVFcnJvcihhc3luY0Vycm9yKTsKICAgICAgICAgICAgICBsaXN0ZW5lckhhc0Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgICAgaWYgKGlkZW50aWNhbChzb3VyY2UuX2Vycm9yLmVycm9yLCBlKSkgewogICAgICAgICAgICAgIGxpc3RlbmVyVmFsdWVPckVycm9yID0gc291cmNlLl9lcnJvcjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsaXN0ZW5lclZhbHVlT3JFcnJvciA9IG5ldyBBc3luY0Vycm9yKGUsIHMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxpc3RlbmVySGFzRXJyb3IgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGxpc3RlbmVyLmhhbmRsZXNDb21wbGV0ZSkgewogICAgICAgICAgaGFuZGxlV2hlbkNvbXBsZXRlQ2FsbGJhY2soKTsKICAgICAgICB9IGVsc2UgaWYgKCFoYXNFcnJvcikgewogICAgICAgICAgaWYgKGxpc3RlbmVyLmhhbmRsZXNWYWx1ZSkgewogICAgICAgICAgICBoYW5kbGVWYWx1ZUNhbGxiYWNrKCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChsaXN0ZW5lci5oYW5kbGVzRXJyb3IpIHsKICAgICAgICAgICAgaGFuZGxlRXJyb3IoKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIElmIHdlIGNoYW5nZWQgem9uZSwgb2xkWm9uZSB3aWxsIG5vdCBiZSBudWxsLgogICAgICAgIGlmIChvbGRab25lICE9IG51bGwpIFpvbmUuX2xlYXZlKG9sZFpvbmUpOwoKICAgICAgICAvLyBJZiB0aGUgbGlzdGVuZXIncyB2YWx1ZSBpcyBhIGZ1dHVyZSB3ZSBuZWVkIHRvIGNoYWluIGl0LiBOb3RlIHRoYXQKICAgICAgICAvLyB0aGlzIGNhbiBvbmx5IGhhcHBlbiBpZiB0aGVyZSBpcyBhIGNhbGxiYWNrLgogICAgICAgIGlmIChsaXN0ZW5lclZhbHVlT3JFcnJvciBpcyBGdXR1cmUpIHsKICAgICAgICAgIEZ1dHVyZSBjaGFpblNvdXJjZSA9IGxpc3RlbmVyVmFsdWVPckVycm9yOwogICAgICAgICAgLy8gU2hvcnRjdXQgaWYgdGhlIGNoYWluLXNvdXJjZSBpcyBhbHJlYWR5IGNvbXBsZXRlZC4gSnVzdCBjb250aW51ZQogICAgICAgICAgLy8gdGhlIGxvb3AuCiAgICAgICAgICBfRnV0dXJlIHJlc3VsdCA9IGxpc3RlbmVyLnJlc3VsdDsKICAgICAgICAgIGlmIChjaGFpblNvdXJjZSBpcyBfRnV0dXJlKSB7CiAgICAgICAgICAgIGlmIChjaGFpblNvdXJjZS5faXNDb21wbGV0ZSkgewogICAgICAgICAgICAgIGxpc3RlbmVycyA9IHJlc3VsdC5fcmVtb3ZlTGlzdGVuZXJzKCk7CiAgICAgICAgICAgICAgcmVzdWx0Ll9jbG9uZVJlc3VsdChjaGFpblNvdXJjZSk7CiAgICAgICAgICAgICAgc291cmNlID0gY2hhaW5Tb3VyY2U7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX2NoYWluQ29yZUZ1dHVyZShjaGFpblNvdXJjZSwgcmVzdWx0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX2NoYWluRm9yZWlnbkZ1dHVyZShjaGFpblNvdXJjZSwgcmVzdWx0KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgX0Z1dHVyZSByZXN1bHQgPSBsaXN0ZW5lci5yZXN1bHQ7CiAgICAgIGxpc3RlbmVycyA9IHJlc3VsdC5fcmVtb3ZlTGlzdGVuZXJzKCk7CiAgICAgIGlmICghbGlzdGVuZXJIYXNFcnJvcikgewogICAgICAgIHJlc3VsdC5fc2V0VmFsdWUobGlzdGVuZXJWYWx1ZU9yRXJyb3IpOwogICAgICB9IGVsc2UgewogICAgICAgIEFzeW5jRXJyb3IgYXN5bmNFcnJvciA9IGxpc3RlbmVyVmFsdWVPckVycm9yOwogICAgICAgIHJlc3VsdC5fc2V0RXJyb3JPYmplY3QoYXN5bmNFcnJvcik7CiAgICAgIH0KICAgICAgLy8gUHJlcGFyZSBmb3IgbmV4dCByb3VuZC4KICAgICAgc291cmNlID0gcmVzdWx0OwogICAgfQogIH0KCiAgRnV0dXJlPFQ+IHRpbWVvdXQoRHVyYXRpb24gdGltZUxpbWl0LCB7RnV0dXJlT3I8VD4gb25UaW1lb3V0KCl9KSB7CiAgICBpZiAoX2lzQ29tcGxldGUpIHJldHVybiBuZXcgX0Z1dHVyZS5pbW1lZGlhdGUodGhpcyk7CiAgICBfRnV0dXJlPFQ+IHJlc3VsdCA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBUaW1lciB0aW1lcjsKICAgIGlmIChvblRpbWVvdXQgPT0gbnVsbCkgewogICAgICB0aW1lciA9IG5ldyBUaW1lcih0aW1lTGltaXQsICgpIHsKICAgICAgICByZXN1bHQuX2NvbXBsZXRlRXJyb3IoCiAgICAgICAgICAgIG5ldyBUaW1lb3V0RXhjZXB0aW9uKCJGdXR1cmUgbm90IGNvbXBsZXRlZCIsIHRpbWVMaW1pdCkpOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIFpvbmUgem9uZSA9IFpvbmUuY3VycmVudDsKICAgICAgb25UaW1lb3V0ID0gem9uZS5yZWdpc3RlckNhbGxiYWNrKG9uVGltZW91dCk7CiAgICAgIHRpbWVyID0gbmV3IFRpbWVyKHRpbWVMaW1pdCwgKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICByZXN1bHQuX2NvbXBsZXRlKHpvbmUucnVuKG9uVGltZW91dCkpOwogICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgIHJlc3VsdC5fY29tcGxldGVFcnJvcihlLCBzKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgdGhpcy50aGVuKChUIHYpIHsKICAgICAgaWYgKHRpbWVyLmlzQWN0aXZlKSB7CiAgICAgICAgdGltZXIuY2FuY2VsKCk7CiAgICAgICAgcmVzdWx0Ll9jb21wbGV0ZVdpdGhWYWx1ZSh2KTsKICAgICAgfQogICAgfSwgb25FcnJvcjogKGUsIFN0YWNrVHJhY2UgcykgewogICAgICBpZiAodGltZXIuaXNBY3RpdmUpIHsKICAgICAgICB0aW1lci5jYW5jZWwoKTsKICAgICAgICByZXN1bHQuX2NvbXBsZXRlRXJyb3IoZSwgcyk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCi8vLyBSZWdpc3RlcnMgZXJyb3JIYW5kbGVyIGluIHpvbmUgaWYgaXQgaGFzIHRoZSBjb3JyZWN0IHR5cGUuCi8vLwovLy8gQ2hlY2tzIHRoYXQgdGhlIGZ1bmN0aW9uIGFjY2VwdHMgZWl0aGVyIGFuIFtPYmplY3RdIGFuZCBhIFtTdGFja1RyYWNlXQovLy8gb3IganVzdCBvbmUgW09iamVjdF0uIERvZXMgbm90IGNoZWNrIHRoZSByZXR1cm4gdHlwZS4KLy8vIFRoZSBhY3R1YWxseSByZXR1cm5lZCB2YWx1ZSBtdXN0IGJlIGBGdXR1cmVPcjxSPmAgd2hlcmUgYFJgIGlzIHRoZQovLy8gdmFsdWUgdHlwZSBvZiB0aGUgZnV0dXJlIHRoYXQgdGhlIGNhbGwgd2lsbCBjb21wbGV0ZSAoZWl0aGVyIHJldHVybmVkCi8vLyBieSBbRnV0dXJlLnRoZW5dIG9yIFtGdXR1cmUuY2F0Y2hFcnJvcl0pLiBXZSBjaGVjayB0aGUgcmV0dXJuZWQgdmFsdWUKLy8vIGR5bmFtaWNhbGx5IGJlY2F1c2UgdGhlIGZ1bmN0aW9ucyBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cyBpbiBwb3NpdGlvbnMKLy8vIHdpdGhvdXQgaW5mZXJlbmNlLCBzbyBhIGZ1bmN0aW9uIGV4cHJlc3Npb24gd29uJ3QgaW5mZXIgdGhlIHJldHVybiB0eXBlLgovLy8KLy8vIFRocm93cyBpZiB0aGUgdHlwZSBpcyBub3QgdmFsaWQuCkZ1bmN0aW9uIF9yZWdpc3RlckVycm9ySGFuZGxlcihGdW5jdGlvbiBlcnJvckhhbmRsZXIsIFpvbmUgem9uZSkgewogIGlmIChlcnJvckhhbmRsZXIgaXMgZHluYW1pYyBGdW5jdGlvbihPYmplY3QsIFN0YWNrVHJhY2UpKSB7CiAgICByZXR1cm4gem9uZQogICAgICAgIC5yZWdpc3RlckJpbmFyeUNhbGxiYWNrPGR5bmFtaWMsIE9iamVjdCwgU3RhY2tUcmFjZT4oZXJyb3JIYW5kbGVyKTsKICB9CiAgaWYgKGVycm9ySGFuZGxlciBpcyBkeW5hbWljIEZ1bmN0aW9uKE9iamVjdCkpIHsKICAgIHJldHVybiB6b25lLnJlZ2lzdGVyVW5hcnlDYWxsYmFjazxkeW5hbWljLCBPYmplY3Q+KGVycm9ySGFuZGxlcik7CiAgfQogIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKAogICAgICBlcnJvckhhbmRsZXIsCiAgICAgICJvbkVycm9yIiwKICAgICAgIkVycm9yIGhhbmRsZXIgbXVzdCBhY2NlcHQgb25lIE9iamVjdCBvciBvbmUgT2JqZWN0IGFuZCBhIFN0YWNrVHJhY2UiCiAgICAgICIgYXMgYXJndW1lbnRzLCBhbmQgcmV0dXJuIGEgYSB2YWxpZCByZXN1bHQiKTsKfQqDMgBOTjwBDwEUAUozRC0dIQE3LgEmAT4iUEwfMCsGJwQBPAFNJDACATEnUCIEAT0zBAIBMCdQHQQBPS4EAgEeIiImKSMqPTBEOR5AJkAhPRseEzQcGx8gARhJHCdIAR1JHCdJHwFNTAE7HiMBIgE1NUZHMwEmGhUEASokGhUEASodFQQBMwZIHhodBAEsQwQBMSRHBAEzLkRKR0E7Qw05TwYEASEbKwQCASg+PiMpAUdJKy4BSD42JgE5JAE6JAE2IQEGLjcFRUUGFAEGPwU9PAVHSS4FTVApNgYcGgEuJAFBHAQBQSsWBAE9HywEAURAATdCPzIxLwFJIhMxIyIzTB4sHj0iJQ8PCAYTBAElHRwhBAFCJS5AHU4mMj8IBipGEwQBQAZDQjs3GzIqSxMEAT8qLz5JBk8TBAEtKi8/BkoTBAE6AR8aJAQBISAfBAEaFx8EAR0YHwQBKRxAGiAEAStAGiAEATg4BAE/BkcmGiAcNAQBMCwbMyUNGDhCHicjKRIKHggbLyMvCgYEATYjGz4mJywvKQoyCA0YOEIeJyMvEgoeCBswIzAKBgQBJ0wbGjIfJwQBQRopHjQkFhYGEQQBTUxJE0MhIAFAIgocK0MrO00hCVBNURs2KzIKFU0aUDAdJQoGBAFNR0FLICQGHj0jMA09IisGBAEmGh4hJw8qCA02GC4GBAElGiEBNBYsBAE/GgE0IiwEASsaMjpHTkkyT0ZOCwEeGw4GGyEhCAQBJx8dRR8lKQwPJwgOBkomBAE7GgEbISkIBAEGThsGURMiKB8YMRdNChAISkQ5MC4sJzEILDYkT0g9S0MqKC8BTkpGSyQ/NjEXTRIKARYuLicKAUpELE5LFyoqHhA8G0E0FTsOJRQMKksuPikQPhYOSUsaKU8mDAoBJRBHGzklDAoBHRAzOS1HKA4bNTQVOw4lDAoBKCggJyMMEScbDAoBOTMBTjguNU4XLCgrNTAkGBU1DhM2DBIKCCgtHzAPNiwIIRcGBAFFOSoRHSgfRgoNIDQoDjEZJwoKBhYcGCYIJBwYJQgIEwQCAT8ESzpHSkpLTQQlQz4QTAQyRgQhFBFMNQIBG2RhcnQ6YXN5bmMvZnV0dXJlX2ltcGwuZGFydEpvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9hc3luYy9zY2hlZHVsZV9taWNyb3Rhc2suZGFydJMeLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuYXN5bmM7Cgp0eXBlZGVmIHZvaWQgX0FzeW5jQ2FsbGJhY2soKTsKCmNsYXNzIF9Bc3luY0NhbGxiYWNrRW50cnkgewogIGZpbmFsIF9Bc3luY0NhbGxiYWNrIGNhbGxiYWNrOwogIF9Bc3luY0NhbGxiYWNrRW50cnkgbmV4dDsKICBfQXN5bmNDYWxsYmFja0VudHJ5KHRoaXMuY2FsbGJhY2spOwp9CgovKiogSGVhZCBvZiBzaW5nbGUgbGlua2VkIGxpc3Qgb2YgcGVuZGluZyBjYWxsYmFja3MuICovCl9Bc3luY0NhbGxiYWNrRW50cnkgX25leHRDYWxsYmFjazsKLyoqIFRhaWwgb2Ygc2luZ2xlIGxpbmtlZCBsaXN0IG9mIHBlbmRpbmcgY2FsbGJhY2tzLiAqLwpfQXN5bmNDYWxsYmFja0VudHJ5IF9sYXN0Q2FsbGJhY2s7Ci8qKgogKiBUYWlsIG9mIHByaW9yaXR5IGNhbGxiYWNrcyBhZGRlZCBieSB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBjYWxsYmFjay4KICoKICogUHJpb3JpdHkgY2FsbGJhY2tzIGFyZSBwdXQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKICogY2FsbGJhY2sgcXVldWUsIHNvIHRoYXQgaWYgb25lIGNhbGxiYWNrIHNjaGVkdWxlcyBtb3JlIHRoYW4gb25lCiAqIHByaW9yaXR5IGNhbGxiYWNrLCB0aGV5IGFyZSBzdGlsbCBlbnF1ZXVlZCBpbiBzY2hlZHVsaW5nIG9yZGVyLgogKi8KX0FzeW5jQ2FsbGJhY2tFbnRyeSBfbGFzdFByaW9yaXR5Q2FsbGJhY2s7Ci8qKgogKiBXaGV0aGVyIHdlIGFyZSBjdXJyZW50bHkgaW5zaWRlIHRoZSBjYWxsYmFjayBsb29wLgogKgogKiBJZiB3ZSBhcmUgaW5zaWRlIHRoZSBsb29wLCB3ZSBuZXZlciBuZWVkIHRvIHNjaGVkdWxlIHRoZSBsb29wLAogKiBldmVuIGlmIGFkZGluZyBhIGZpcnN0IGVsZW1lbnQuCiAqLwpib29sIF9pc0luQ2FsbGJhY2tMb29wID0gZmFsc2U7Cgp2b2lkIF9taWNyb3Rhc2tMb29wKCkgewogIHdoaWxlIChfbmV4dENhbGxiYWNrICE9IG51bGwpIHsKICAgIF9sYXN0UHJpb3JpdHlDYWxsYmFjayA9IG51bGw7CiAgICBfQXN5bmNDYWxsYmFja0VudHJ5IGVudHJ5ID0gX25leHRDYWxsYmFjazsKICAgIF9uZXh0Q2FsbGJhY2sgPSBlbnRyeS5uZXh0OwogICAgaWYgKF9uZXh0Q2FsbGJhY2sgPT0gbnVsbCkgX2xhc3RDYWxsYmFjayA9IG51bGw7CiAgICAoZW50cnkuY2FsbGJhY2spKCk7CiAgfQp9Cgp2b2lkIF9zdGFydE1pY3JvdGFza0xvb3AoKSB7CiAgX2lzSW5DYWxsYmFja0xvb3AgPSB0cnVlOwogIHRyeSB7CiAgICAvLyBNb3ZlZCB0byBzZXBhcmF0ZSBmdW5jdGlvbiBiZWNhdXNlIHRyeS1maW5hbGx5IHByZXZlbnRzCiAgICAvLyBnb29kIG9wdGltaXphdGlvbi4KICAgIF9taWNyb3Rhc2tMb29wKCk7CiAgfSBmaW5hbGx5IHsKICAgIF9sYXN0UHJpb3JpdHlDYWxsYmFjayA9IG51bGw7CiAgICBfaXNJbkNhbGxiYWNrTG9vcCA9IGZhbHNlOwogICAgaWYgKF9uZXh0Q2FsbGJhY2sgIT0gbnVsbCkgewogICAgICBfQXN5bmNSdW4uX3NjaGVkdWxlSW1tZWRpYXRlKF9zdGFydE1pY3JvdGFza0xvb3ApOwogICAgfQogIH0KfQoKLyoqCiAqIFNjaGVkdWxlcyBhIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBhcyBhIG1pY3JvdGFzay4KICoKICogVGhlIG1pY3JvdGFzayBpcyBjYWxsZWQgYWZ0ZXIgYWxsIG90aGVyIGN1cnJlbnRseSBzY2hlZHVsZWQKICogbWljcm90YXNrcywgYnV0IGFzIHBhcnQgb2YgdGhlIGN1cnJlbnQgc3lzdGVtIGV2ZW50LgogKi8Kdm9pZCBfc2NoZWR1bGVBc3luY0NhbGxiYWNrKF9Bc3luY0NhbGxiYWNrIGNhbGxiYWNrKSB7CiAgX0FzeW5jQ2FsbGJhY2tFbnRyeSBuZXdFbnRyeSA9IG5ldyBfQXN5bmNDYWxsYmFja0VudHJ5KGNhbGxiYWNrKTsKICBpZiAoX25leHRDYWxsYmFjayA9PSBudWxsKSB7CiAgICBfbmV4dENhbGxiYWNrID0gX2xhc3RDYWxsYmFjayA9IG5ld0VudHJ5OwogICAgaWYgKCFfaXNJbkNhbGxiYWNrTG9vcCkgewogICAgICBfQXN5bmNSdW4uX3NjaGVkdWxlSW1tZWRpYXRlKF9zdGFydE1pY3JvdGFza0xvb3ApOwogICAgfQogIH0gZWxzZSB7CiAgICBfbGFzdENhbGxiYWNrLm5leHQgPSBuZXdFbnRyeTsKICAgIF9sYXN0Q2FsbGJhY2sgPSBuZXdFbnRyeTsKICB9Cn0KCi8qKgogKiBTY2hlZHVsZXMgYSBjYWxsYmFjayB0byBiZSBjYWxsZWQgYmVmb3JlIGFsbCBvdGhlciBjdXJyZW50bHkgc2NoZWR1bGVkIG9uZXMuCiAqCiAqIFRoaXMgY2FsbGJhY2sgdGFrZXMgcHJpb3JpdHkgb3ZlciBleGlzdGluZyBzY2hlZHVsZWQgY2FsbGJhY2tzLgogKiBJdCBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseSB0byBnaXZlIGhpZ2hlciBwcmlvcml0eSB0byBlcnJvciByZXBvcnRpbmcuCiAqCiAqIElzIGFsd2F5cyBydW4gaW4gdGhlIHJvb3Qgem9uZS4KICovCnZvaWQgX3NjaGVkdWxlUHJpb3JpdHlBc3luY0NhbGxiYWNrKF9Bc3luY0NhbGxiYWNrIGNhbGxiYWNrKSB7CiAgaWYgKF9uZXh0Q2FsbGJhY2sgPT0gbnVsbCkgewogICAgX3NjaGVkdWxlQXN5bmNDYWxsYmFjayhjYWxsYmFjayk7CiAgICBfbGFzdFByaW9yaXR5Q2FsbGJhY2sgPSBfbGFzdENhbGxiYWNrOwogICAgcmV0dXJuOwogIH0KICBfQXN5bmNDYWxsYmFja0VudHJ5IGVudHJ5ID0gbmV3IF9Bc3luY0NhbGxiYWNrRW50cnkoY2FsbGJhY2spOwogIGlmIChfbGFzdFByaW9yaXR5Q2FsbGJhY2sgPT0gbnVsbCkgewogICAgZW50cnkubmV4dCA9IF9uZXh0Q2FsbGJhY2s7CiAgICBfbmV4dENhbGxiYWNrID0gX2xhc3RQcmlvcml0eUNhbGxiYWNrID0gZW50cnk7CiAgfSBlbHNlIHsKICAgIGVudHJ5Lm5leHQgPSBfbGFzdFByaW9yaXR5Q2FsbGJhY2submV4dDsKICAgIF9sYXN0UHJpb3JpdHlDYWxsYmFjay5uZXh0ID0gZW50cnk7CiAgICBfbGFzdFByaW9yaXR5Q2FsbGJhY2sgPSBlbnRyeTsKICAgIGlmIChlbnRyeS5uZXh0ID09IG51bGwpIHsKICAgICAgX2xhc3RDYWxsYmFjayA9IGVudHJ5OwogICAgfQogIH0KfQoKLyoqCiAqIFJ1bnMgYSBmdW5jdGlvbiBhc3luY2hyb25vdXNseS4KICoKICogQ2FsbGJhY2tzIHJlZ2lzdGVyZWQgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uIGFyZSBhbHdheXMgZXhlY3V0ZWQgaW4gb3JkZXIgYW5kCiAqIGFyZSBndWFyYW50ZWVkIHRvIHJ1biBiZWZvcmUgb3RoZXIgYXN5bmNocm9ub3VzIGV2ZW50cyAobGlrZSBbVGltZXJdIGV2ZW50cywKICogb3IgRE9NIGV2ZW50cykuCiAqCiAqICoqV2FybmluZzoqKiBpdCBpcyBwb3NzaWJsZSB0byBzdGFydmUgdGhlIERPTSBieSByZWdpc3RlcmluZyBhc3luY2hyb25vdXMKICogY2FsbGJhY2tzIHRocm91Z2ggdGhpcyBtZXRob2QuIEZvciBleGFtcGxlIHRoZSBmb2xsb3dpbmcgcHJvZ3JhbSBydW5zCiAqIHRoZSBjYWxsYmFja3Mgd2l0aG91dCBldmVyIGdpdmluZyB0aGUgVGltZXIgY2FsbGJhY2sgYSBjaGFuY2UgdG8gZXhlY3V0ZToKICoKICogICAgIG1haW4oKSB7CiAqICAgICAgIFRpbWVyLnJ1bigoKSB7IHByaW50KCJleGVjdXRlZCIpOyB9KTsgIC8vIFdpbGwgbmV2ZXIgYmUgZXhlY3V0ZWQuCiAqICAgICAgIGZvbygpIHsKICogICAgICAgICBzY2hlZHVsZU1pY3JvdGFzayhmb28pOyAgLy8gU2NoZWR1bGVzIFtmb29dIGluIGZyb250IG9mIG90aGVyIGV2ZW50cy4KICogICAgICAgfQogKiAgICAgICBmb28oKTsKICogICAgIH0KICoKICogIyMgT3RoZXIgcmVzb3VyY2VzCiAqCiAqICogW1RoZSBFdmVudCBMb29wIGFuZCBEYXJ0XShodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvYXJ0aWNsZXMvZXZlbnQtbG9vcC8pOgogKiBMZWFybiBob3cgRGFydCBoYW5kbGVzIHRoZSBldmVudCBxdWV1ZSBhbmQgbWljcm90YXNrIHF1ZXVlLCBzbyB5b3UgY2FuIHdyaXRlCiAqIGJldHRlciBhc3luY2hyb25vdXMgY29kZSB3aXRoIGZld2VyIHN1cnByaXNlcy4KICovCnZvaWQgc2NoZWR1bGVNaWNyb3Rhc2sodm9pZCBjYWxsYmFjaygpKSB7CiAgX1pvbmUgY3VycmVudFpvbmUgPSBab25lLmN1cnJlbnQ7CiAgaWYgKGlkZW50aWNhbChfcm9vdFpvbmUsIGN1cnJlbnRab25lKSkgewogICAgLy8gTm8gbmVlZCB0byBiaW5kIHRoZSBjYWxsYmFjay4gV2Uga25vdyB0aGF0IHRoZSByb290J3Mgc2NoZWR1bGVNaWNyb3Rhc2sKICAgIC8vIHdpbGwgYmUgaW52b2tlZCBpbiB0aGUgcm9vdCB6b25lLgogICAgX3Jvb3RTY2hlZHVsZU1pY3JvdGFzayhudWxsLCBudWxsLCBfcm9vdFpvbmUsIGNhbGxiYWNrKTsKICAgIHJldHVybjsKICB9CiAgX1pvbmVGdW5jdGlvbiBpbXBsZW1lbnRhdGlvbiA9IGN1cnJlbnRab25lLl9zY2hlZHVsZU1pY3JvdGFzazsKICBpZiAoaWRlbnRpY2FsKF9yb290Wm9uZSwgaW1wbGVtZW50YXRpb24uem9uZSkgJiYKICAgICAgX3Jvb3Rab25lLmluU2FtZUVycm9yWm9uZShjdXJyZW50Wm9uZSkpIHsKICAgIF9yb290U2NoZWR1bGVNaWNyb3Rhc2soCiAgICAgICAgbnVsbCwgbnVsbCwgY3VycmVudFpvbmUsIGN1cnJlbnRab25lLnJlZ2lzdGVyQ2FsbGJhY2soY2FsbGJhY2spKTsKICAgIHJldHVybjsKICB9CiAgWm9uZS5jdXJyZW50LnNjaGVkdWxlTWljcm90YXNrKFpvbmUuY3VycmVudC5iaW5kQ2FsbGJhY2tHdWFyZGVkKGNhbGxiYWNrKSk7Cn0KCmNsYXNzIF9Bc3luY1J1biB7CiAgLyoqIFNjaGVkdWxlIHRoZSBnaXZlbiBjYWxsYmFjayBiZWZvcmUgYW55IG90aGVyIGV2ZW50IGluIHRoZSBldmVudC1sb29wLiAqLwogIGV4dGVybmFsIHN0YXRpYyB2b2lkIF9zY2hlZHVsZUltbWVkaWF0ZSh2b2lkIGNhbGxiYWNrKCkpOwp9CoCdAE5OPAEPARQBHwEcIRwmAgE4IzgjBEkDNkNDBCsENgNCIwQgARgiIi8gNRgEAgEdHAg/GhYOIh8hOQYEAgEENQM/OAQ3RB8uHjkGCyMeBAIBBFADQ0oDIwQ/HyYrDARBJyAzCy0oIx4dBgQCAQQjA09QEwNNSU0DEEsRUQsQCQMWA09QMgQqJCtPKT0MBEEzMBxKDAROAgESTzwCASJkYXJ0OmFzeW5jL3NjaGVkdWxlX21pY3JvdGFzay5kYXJ0Pm9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2FzeW5jL3N0cmVhbS5kYXJ0wAE/8y8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmFzeW5jOwoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDb3JlIFN0cmVhbSB0eXBlcwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp0eXBlZGVmIHZvaWQgX1RpbWVyQ2FsbGJhY2soKTsKCi8qKgogKiBBIHNvdXJjZSBvZiBhc3luY2hyb25vdXMgZGF0YSBldmVudHMuCiAqCiAqIEEgU3RyZWFtIHByb3ZpZGVzIGEgd2F5IHRvIHJlY2VpdmUgYSBzZXF1ZW5jZSBvZiBldmVudHMuCiAqIEVhY2ggZXZlbnQgaXMgZWl0aGVyIGEgZGF0YSBldmVudCwgYWxzbyBjYWxsZWQgYW4gKmVsZW1lbnQqIG9mIHRoZSBzdHJlYW0sCiAqIG9yIGFuIGVycm9yIGV2ZW50LCB3aGljaCBpcyBhIG5vdGlmaWNhdGlvbiB0aGF0IHNvbWV0aGluZyBoYXMgZmFpbGVkLgogKiBXaGVuIGEgc3RyZWFtIGhhcyBlbWl0dGVkIGFsbCBpdHMgZXZlbnQsCiAqIGEgc2luZ2xlICJkb25lIiBldmVudCB3aWxsIG5vdGlmeSB0aGUgbGlzdGVuZXIgdGhhdCB0aGUgZW5kIGhhcyBiZWVuIHJlYWNoZWQuCiAqCiAqIFlvdSBbbGlzdGVuXSBvbiBhIHN0cmVhbSB0byBtYWtlIGl0IHN0YXJ0IGdlbmVyYXRpbmcgZXZlbnRzLAogKiBhbmQgdG8gc2V0IHVwIGxpc3RlbmVycyB0aGF0IHJlY2VpdmUgdGhlIGV2ZW50cy4KICogV2hlbiB5b3UgbGlzdGVuLCB5b3UgcmVjZWl2ZSBhIFtTdHJlYW1TdWJzY3JpcHRpb25dIG9iamVjdAogKiB3aGljaCBpcyB0aGUgYWN0aXZlIG9iamVjdCBwcm92aWRpbmcgdGhlIGV2ZW50cywKICogYW5kIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHN0b3AgbGlzdGVuaW5nIGFnYWluLAogKiBvciB0byB0ZW1wb3JhcmlseSBwYXVzZSBldmVudHMgZnJvbSB0aGUgc3Vic2NyaXB0aW9uLgogKgogKiBUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIHN0cmVhbXM6ICJTaW5nbGUtc3Vic2NyaXB0aW9uIiBzdHJlYW1zIGFuZAogKiAiYnJvYWRjYXN0IiBzdHJlYW1zLgogKgogKiAqQSBzaW5nbGUtc3Vic2NyaXB0aW9uIHN0cmVhbSogYWxsb3dzIG9ubHkgYSBzaW5nbGUgbGlzdGVuZXIgZHVyaW5nIHRoZSB3aG9sZQogKiBsaWZldGltZSBvZiB0aGUgc3RyZWFtLgogKiBJdCBkb2Vzbid0IHN0YXJ0IGdlbmVyYXRpbmcgZXZlbnRzIHVudGlsIGl0IGhhcyBhIGxpc3RlbmVyLAogKiBhbmQgaXQgc3RvcHMgc2VuZGluZyBldmVudHMgd2hlbiB0aGUgbGlzdGVuZXIgaXMgdW5zdWJzY3JpYmVkLAogKiBldmVuIGlmIHRoZSBzb3VyY2Ugb2YgZXZlbnRzIGNvdWxkIHN0aWxsIHByb3ZpZGUgbW9yZS4KICoKICogTGlzdGVuaW5nIHR3aWNlIG9uIGEgc2luZ2xlLXN1YnNjcmlwdGlvbiBzdHJlYW0gaXMgbm90IGFsbG93ZWQsIGV2ZW4gYWZ0ZXIKICogdGhlIGZpcnN0IHN1YnNjcmlwdGlvbiBoYXMgYmVlbiBjYW5jZWxlZC4KICoKICogU2luZ2xlLXN1YnNjcmlwdGlvbiBzdHJlYW1zIGFyZSBnZW5lcmFsbHkgdXNlZCBmb3Igc3RyZWFtaW5nIGNodW5rcyBvZgogKiBsYXJnZXIgY29udGlndW91cyBkYXRhIGxpa2UgZmlsZSBJL08uCiAqCiAqICpBIGJyb2FkY2FzdCBzdHJlYW0qIGFsbG93cyBhbnkgbnVtYmVyIG9mIGxpc3RlbmVycywgYW5kIGl0IGZpcmVzCiAqIGl0cyBldmVudHMgd2hlbiB0aGV5IGFyZSByZWFkeSwgd2hldGhlciB0aGVyZSBhcmUgbGlzdGVuZXJzIG9yIG5vdC4KICoKICogQnJvYWRjYXN0IHN0cmVhbXMgYXJlIHVzZWQgZm9yIGluZGVwZW5kZW50IGV2ZW50cy9vYnNlcnZlcnMuCiAqCiAqIElmIHNldmVyYWwgbGlzdGVuZXJzIHdhbnQgdG8gbGlzdGVuIHRvIGEgc2luZ2xlIHN1YnNjcmlwdGlvbiBzdHJlYW0sCiAqIHVzZSBbYXNCcm9hZGNhc3RTdHJlYW1dIHRvIGNyZWF0ZSBhIGJyb2FkY2FzdCBzdHJlYW0gb24gdG9wIG9mIHRoZQogKiBub24tYnJvYWRjYXN0IHN0cmVhbS4KICoKICogT24gZWl0aGVyIGtpbmQgb2Ygc3RyZWFtLCBzdHJlYW0gdHJhbnNmb3JtYXRpb25zLCBzdWNoIGFzIFt3aGVyZV0gYW5kCiAqIFtza2lwXSwgcmV0dXJuIHRoZSBzYW1lIHR5cGUgb2Ygc3RyZWFtIGFzIHRoZSBvbmUgdGhlIG1ldGhvZCB3YXMgY2FsbGVkIG9uLAogKiB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgogKgogKiBXaGVuIGFuIGV2ZW50IGlzIGZpcmVkLCB0aGUgbGlzdGVuZXIocykgYXQgdGhhdCB0aW1lIHdpbGwgcmVjZWl2ZSB0aGUgZXZlbnQuCiAqIElmIGEgbGlzdGVuZXIgaXMgYWRkZWQgdG8gYSBicm9hZGNhc3Qgc3RyZWFtIHdoaWxlIGFuIGV2ZW50IGlzIGJlaW5nIGZpcmVkLAogKiB0aGF0IGxpc3RlbmVyIHdpbGwgbm90IHJlY2VpdmUgdGhlIGV2ZW50IGN1cnJlbnRseSBiZWluZyBmaXJlZC4KICogSWYgYSBsaXN0ZW5lciBpcyBjYW5jZWxlZCwgaXQgaW1tZWRpYXRlbHkgc3RvcHMgcmVjZWl2aW5nIGV2ZW50cy4KICogTGlzdGVuaW5nIG9uIGEgYnJvYWRjYXN0IHN0cmVhbSBjYW4gYmUgdHJlYXRlZCBhcyBsaXN0ZW5pbmcgb24gYSBuZXcgc3RyZWFtCiAqIGNvbnRhaW5pbmcgb25seSB0aGUgZXZlbnRzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gZW1pdHRlZCB3aGVuIHRoZSBbbGlzdGVuXQogKiBjYWxsIG9jY3Vycy4KICogRm9yIGV4YW1wbGUsIHRoZSBbZmlyc3RdIGdldHRlciBsaXN0ZW5zIHRvIHRoZSBzdHJlYW0sIHRoZW4gcmV0dXJucyB0aGUgZmlyc3QKICogZXZlbnQgdGhhdCBsaXN0ZW5lciByZWNlaXZlcy4KICogVGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIGZpcnN0IGV2ZW4gZW1pdHRlZCBieSB0aGUgc3RyZWFtLCBidXQgdGhlIGZpcnN0CiAqIG9mIHRoZSAqcmVtYWluaW5nKiBldmVudHMgb2YgdGhlIGJyb2FkY2FzdCBzdHJlYW0uCiAqCiAqIFdoZW4gdGhlICJkb25lIiBldmVudCBpcyBmaXJlZCwgc3Vic2NyaWJlcnMgYXJlIHVuc3Vic2NyaWJlZCBiZWZvcmUKICogcmVjZWl2aW5nIHRoZSBldmVudC4gQWZ0ZXIgdGhlIGV2ZW50IGhhcyBiZWVuIHNlbnQsIHRoZSBzdHJlYW0gaGFzIG5vCiAqIHN1YnNjcmliZXJzLiBBZGRpbmcgbmV3IHN1YnNjcmliZXJzIHRvIGEgYnJvYWRjYXN0IHN0cmVhbSBhZnRlciB0aGlzIHBvaW50CiAqIGlzIGFsbG93ZWQsIGJ1dCB0aGV5IHdpbGwganVzdCByZWNlaXZlIGEgbmV3ICJkb25lIiBldmVudCBhcyBzb29uCiAqIGFzIHBvc3NpYmxlLgogKgogKiBTdHJlYW0gc3Vic2NyaXB0aW9ucyBhbHdheXMgcmVzcGVjdCAicGF1c2UiIHJlcXVlc3RzLiBJZiBuZWNlc3NhcnkgdGhleSBuZWVkCiAqIHRvIGJ1ZmZlciB0aGVpciBpbnB1dCwgYnV0IG9mdGVuLCBhbmQgcHJlZmVyYWJseSwgdGhleSBjYW4gc2ltcGx5IHJlcXVlc3QKICogdGhlaXIgaW5wdXQgdG8gcGF1c2UgdG9vLgogKgogKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBbaXNCcm9hZGNhc3RdIHJldHVybnMgZmFsc2UuCiAqIEEgYnJvYWRjYXN0IHN0cmVhbSBpbmhlcml0aW5nIGZyb20gW1N0cmVhbV0gbXVzdCBvdmVycmlkZSBbaXNCcm9hZGNhc3RdCiAqIHRvIHJldHVybiBgdHJ1ZWAuCiAqLwphYnN0cmFjdCBjbGFzcyBTdHJlYW08VD4gewogIFN0cmVhbSgpOwoKICAvKioKICAgKiBJbnRlcm5hbCB1c2Ugb25seS4gV2UgZG8gbm90IHdhbnQgdG8gcHJvbWlzZSB0aGF0IFN0cmVhbSBzdGF5cyBjb25zdC4KICAgKgogICAqIElmIG1peGlucyBiZWNvbWUgY29tcGF0aWJsZSB3aXRoIGNvbnN0IGNvbnN0cnVjdG9ycywgd2UgbWF5IHVzZSBhCiAgICogc3RyZWFtIG1peGluIGluc3RlYWQgb2YgZXh0ZW5kaW5nIFN0cmVhbSBmcm9tIGEgY29uc3QgY2xhc3MuCiAgICovCiAgY29uc3QgU3RyZWFtLl9pbnRlcm5hbCgpOwoKICAvKioKICAgKiBDcmVhdGVzIGFuIGVtcHR5IGJyb2FkY2FzdCBzdHJlYW0uCiAgICoKICAgKiBUaGlzIGlzIGEgc3RyZWFtIHdoaWNoIGRvZXMgbm90aGluZyBleGNlcHQgc2VuZGluZyBhIGRvbmUgZXZlbnQKICAgKiB3aGVuIGl0J3MgbGlzdGVuZWQgdG8uCiAgICovCiAgY29uc3QgZmFjdG9yeSBTdHJlYW0uZW1wdHkoKSA9IF9FbXB0eVN0cmVhbTxUPjsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIHN0cmVhbSB3aGljaCBlbWl0cyBhIHNpbmdsZSBkYXRhIGV2ZW50IGJlZm9yZSBjb21wbGV0aW5nLgogICAqCiAgICogVGhpcyBzdHJlYW0gZW1pdHMgYSBzaW5nbGUgZGF0YSBldmVudCBvZiBbdmFsdWVdCiAgICogYW5kIHRoZW4gY29tcGxldGVzIHdpdGggYSBkb25lIGV2ZW50LgogICAqCiAgICogRXhhbXBsZToKICAgKiBgYGBkYXJ0CiAgICogRnV0dXJlPHZvaWQ+IHByaW50VGhpbmdzKFN0cmVhbTxTdHJpbmc+IGRhdGEpIGFzeW5jIHsKICAgKiAgIGF3YWl0IGZvciAodmFyIHggaW4gZGF0YSkgewogICAqICAgICBwcmludCh4KTsKICAgKiAgIH0KICAgKiB9CiAgICogcHJpbnRUaGluZ3MoU3RyZWFtPFN0cmluZz4udmFsdWUoIm9rIikpOyAvLyBwcmludHMgIm9rIi4KICAgKiBgYGAKICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgZWZmZWN0aXZlbHkgZXF1aXZhbGVudCB0byBvbmUgY3JlYXRlZCBieQogICAqIGAoKCkgYXN5bmMqIHsgeWllbGQgdmFsdWU7IH0gKCkpYCBvciBgRnV0dXJlPFQ+LnZhbHVlKHZhbHVlKS5hc1N0cmVhbSgpYC4KICAgKi8KICBAU2luY2UoIjIuNSIpCiAgZmFjdG9yeSBTdHJlYW0udmFsdWUoVCB2YWx1ZSkgPT4KICAgICAgKF9Bc3luY1N0cmVhbUNvbnRyb2xsZXI8VD4obnVsbCwgbnVsbCwgbnVsbCwgbnVsbCkKICAgICAgICAgICAgLi5fYWRkKHZhbHVlKQogICAgICAgICAgICAuLl9jbG9zZVVuY2hlY2tlZCgpKQogICAgICAgICAgLnN0cmVhbTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIHN0cmVhbSB3aGljaCBlbWl0cyBhIHNpbmdsZSBlcnJvciBldmVudCBiZWZvcmUgY29tcGxldGluZy4KICAgKgogICAqIFRoaXMgc3RyZWFtIGVtaXRzIGEgc2luZ2xlIGVycm9yIGV2ZW50IG9mIFtlcnJvcl0gYW5kIFtzdGFja1RyYWNlXQogICAqIGFuZCB0aGVuIGNvbXBsZXRlcyB3aXRoIGEgZG9uZSBldmVudC4KICAgKgogICAqIEV4YW1wbGU6CiAgICogYGBgZGFydAogICAqIEZ1dHVyZTx2b2lkPiB0cnlUaGluZ3MoU3RyZWFtPGludD4gZGF0YSkgYXN5bmMgewogICAqICAgdHJ5IHsKICAgKiAgICAgYXdhaXQgZm9yICh2YXIgeCBpbiBkYXRhKSB7CiAgICogICAgICAgcHJpbnQoIkRhdGE6ICR4Iik7CiAgICogICAgIH0KICAgKiAgIH0gY2F0Y2ggKGUpIHsKICAgKiAgICAgcHJpbnQoZSk7CiAgICogICB9CiAgICogfQogICAqIHRyeVRoaW5ncyhTdHJlYW08aW50Pi5lcnJvcigiRXJyb3IiKSk7IC8vIHByaW50cyAiRXJyb3IiLgogICAqIGBgYAogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgZWZmZWN0aXZlbHkgZXF1aXZhbGVudCB0byBvbmUgY3JlYXRlZCBieQogICAqIGBGdXR1cmU8VD4uZXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpLmFzU3RyZWFtKClgLCBieSBvcgogICAqIGAoKCkgYXN5bmMqIHsgdGhyb3cgZXJyb3I7IH0gKCkpYCwgZXhjZXB0IHRoYXQgeW91IGNhbiBjb250cm9sIHRoZQogICAqIHN0YWNrIHRyYWNlIGFzIHdlbGwuCiAgICovCiAgQFNpbmNlKCIyLjUiKQogIGZhY3RvcnkgU3RyZWFtLmVycm9yKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pID0+CiAgICAgIChfQXN5bmNTdHJlYW1Db250cm9sbGVyPFQ+KG51bGwsIG51bGwsIG51bGwsIG51bGwpCiAgICAgICAgICAgIC4uX2FkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKQogICAgICAgICAgICAuLl9jbG9zZVVuY2hlY2tlZCgpKQogICAgICAgICAgLnN0cmVhbTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBzaW5nbGUtc3Vic2NyaXB0aW9uIHN0cmVhbSBmcm9tIHRoZSBmdXR1cmUuCiAgICoKICAgKiBXaGVuIHRoZSBmdXR1cmUgY29tcGxldGVzLCB0aGUgc3RyZWFtIHdpbGwgZmlyZSBvbmUgZXZlbnQsIGVpdGhlcgogICAqIGRhdGEgb3IgZXJyb3IsIGFuZCB0aGVuIGNsb3NlIHdpdGggYSBkb25lLWV2ZW50LgogICAqLwogIGZhY3RvcnkgU3RyZWFtLmZyb21GdXR1cmUoRnV0dXJlPFQ+IGZ1dHVyZSkgewogICAgLy8gVXNlIHRoZSBjb250cm9sbGVyJ3MgYnVmZmVyaW5nIHRvIGZpbGwgaW4gdGhlIHZhbHVlIGV2ZW4gYmVmb3JlCiAgICAvLyB0aGUgc3RyZWFtIGhhcyBhIGxpc3RlbmVyLiBGb3IgYSBzaW5nbGUgdmFsdWUsIGl0J3Mgbm90IHdvcnRoIGl0CiAgICAvLyB0byB3YWl0IGZvciBhIGxpc3RlbmVyIGJlZm9yZSBkb2luZyB0aGUgYHRoZW5gIG9uIHRoZSBmdXR1cmUuCiAgICBfU3RyZWFtQ29udHJvbGxlcjxUPiBjb250cm9sbGVyID0KICAgICAgICBuZXcgX1N5bmNTdHJlYW1Db250cm9sbGVyPFQ+KG51bGwsIG51bGwsIG51bGwsIG51bGwpOwogICAgZnV0dXJlLnRoZW4oKHZhbHVlKSB7CiAgICAgIGNvbnRyb2xsZXIuX2FkZCh2YWx1ZSk7CiAgICAgIGNvbnRyb2xsZXIuX2Nsb3NlVW5jaGVja2VkKCk7CiAgICB9LCBvbkVycm9yOiAoZXJyb3IsIHN0YWNrVHJhY2UpIHsKICAgICAgY29udHJvbGxlci5fYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICBjb250cm9sbGVyLl9jbG9zZVVuY2hlY2tlZCgpOwogICAgfSk7CiAgICByZXR1cm4gY29udHJvbGxlci5zdHJlYW07CiAgfQoKICAvKioKICAgKiBDcmVhdGUgYSBzdHJlYW0gZnJvbSBhIGdyb3VwIG9mIGZ1dHVyZXMuCiAgICoKICAgKiBUaGUgc3RyZWFtIHJlcG9ydHMgdGhlIHJlc3VsdHMgb2YgdGhlIGZ1dHVyZXMgb24gdGhlIHN0cmVhbSBpbiB0aGUgb3JkZXIKICAgKiBpbiB3aGljaCB0aGUgZnV0dXJlcyBjb21wbGV0ZS4KICAgKiBFYWNoIGZ1dHVyZSBwcm92aWRlcyBlaXRoZXIgYSBkYXRhIGV2ZW50IG9yIGFuIGVycm9yIGV2ZW50LAogICAqIGRlcGVuZGluZyBvbiBob3cgdGhlIGZ1dHVyZSBjb21wbGV0ZXMuCiAgICoKICAgKiBJZiBzb21lIGZ1dHVyZXMgaGF2ZSBhbHJlYWR5IGNvbXBsZXRlZCB3aGVuIGBTdHJlYW0uZnJvbUZ1dHVyZXNgIGlzIGNhbGxlZCwKICAgKiB0aGVpciByZXN1bHRzIHdpbGwgYmUgZW1pdHRlZCBpbiBzb21lIHVuc3BlY2lmaWVkIG9yZGVyLgogICAqCiAgICogV2hlbiBhbGwgZnV0dXJlcyBoYXZlIGNvbXBsZXRlZCwgdGhlIHN0cmVhbSBpcyBjbG9zZWQuCiAgICoKICAgKiBJZiBbZnV0dXJlc10gaXMgZW1wdHksIHRoZSBzdHJlYW0gY2xvc2VzIGFzIHNvb24gYXMgcG9zc2libGUuCiAgICovCiAgZmFjdG9yeSBTdHJlYW0uZnJvbUZ1dHVyZXMoSXRlcmFibGU8RnV0dXJlPFQ+PiBmdXR1cmVzKSB7CiAgICBfU3RyZWFtQ29udHJvbGxlcjxUPiBjb250cm9sbGVyID0KICAgICAgICBuZXcgX1N5bmNTdHJlYW1Db250cm9sbGVyPFQ+KG51bGwsIG51bGwsIG51bGwsIG51bGwpOwogICAgaW50IGNvdW50ID0gMDsKICAgIC8vIERlY2xhcmUgdGhlc2UgYXMgdmFyaWFibGVzIGhvbGRpbmcgY2xvc3VyZXMgaW5zdGVhZCBvZiBhcwogICAgLy8gZnVuY3Rpb24gZGVjbGFyYXRpb25zLgogICAgLy8gVGhpcyBhdm9pZHMgY3JlYXRpbmcgYSBuZXcgY2xvc3VyZSBmcm9tIHRoZSBmdW5jdGlvbnMgZm9yIGVhY2ggZnV0dXJlLgogICAgdmFyIG9uVmFsdWUgPSAoVCB2YWx1ZSkgewogICAgICBpZiAoIWNvbnRyb2xsZXIuaXNDbG9zZWQpIHsKICAgICAgICBjb250cm9sbGVyLl9hZGQodmFsdWUpOwogICAgICAgIGlmICgtLWNvdW50ID09IDApIGNvbnRyb2xsZXIuX2Nsb3NlVW5jaGVja2VkKCk7CiAgICAgIH0KICAgIH07CiAgICB2YXIgb25FcnJvciA9IChlcnJvciwgU3RhY2tUcmFjZSBzdGFjaykgewogICAgICBpZiAoIWNvbnRyb2xsZXIuaXNDbG9zZWQpIHsKICAgICAgICBjb250cm9sbGVyLl9hZGRFcnJvcihlcnJvciwgc3RhY2spOwogICAgICAgIGlmICgtLWNvdW50ID09IDApIGNvbnRyb2xsZXIuX2Nsb3NlVW5jaGVja2VkKCk7CiAgICAgIH0KICAgIH07CiAgICAvLyBUaGUgZnV0dXJlcyBhcmUgYWxyZWFkeSBydW5uaW5nLCBzbyBzdGFydCBsaXN0ZW5pbmcgdG8gdGhlbSBpbW1lZGlhdGVseQogICAgLy8gKGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgdGhlIHN0cmVhbSB0byBiZSBsaXN0ZW5lZCBvbikuCiAgICAvLyBJZiB3ZSB3YWl0LCB3ZSBtaWdodCBub3QgY2F0Y2ggZXJyb3JzIGluIHRoZSBmdXR1cmVzIGluIHRpbWUuCiAgICBmb3IgKHZhciBmdXR1cmUgaW4gZnV0dXJlcykgewogICAgICBjb3VudCsrOwogICAgICBmdXR1cmUudGhlbihvblZhbHVlLCBvbkVycm9yOiBvbkVycm9yKTsKICAgIH0KICAgIC8vIFVzZSBzY2hlZHVsZSBtaWNyb3Rhc2sgc2luY2UgY29udHJvbGxlciBpcyBzeW5jLgogICAgaWYgKGNvdW50ID09IDApIHNjaGVkdWxlTWljcm90YXNrKGNvbnRyb2xsZXIuY2xvc2UpOwogICAgcmV0dXJuIGNvbnRyb2xsZXIuc3RyZWFtOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIHNpbmdsZS1zdWJzY3JpcHRpb24gc3RyZWFtIHRoYXQgZ2V0cyBpdHMgZGF0YSBmcm9tIFtlbGVtZW50c10uCiAgICoKICAgKiBUaGUgaXRlcmFibGUgaXMgaXRlcmF0ZWQgd2hlbiB0aGUgc3RyZWFtIHJlY2VpdmVzIGEgbGlzdGVuZXIsIGFuZCBzdG9wcwogICAqIGl0ZXJhdGluZyBpZiB0aGUgbGlzdGVuZXIgY2FuY2VscyB0aGUgc3Vic2NyaXB0aW9uLCBvciBpZiB0aGUKICAgKiBbSXRlcmF0b3IubW92ZU5leHRdIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAgb3IgdGhyb3dzLgogICAqIEl0ZXJhdGlvbiBpcyBzdXNwZW5kZWQgd2hpbGUgdGhlIHN0cmVhbSBzdWJzY3JpcHRpb24gaXMgcGF1c2VkLgogICAqCiAgICogSWYgY2FsbGluZyBbSXRlcmF0b3IubW92ZU5leHRdIG9uIGBlbGVtZW50cy5pdGVyYXRvcmAgdGhyb3dzLAogICAqIHRoZSBzdHJlYW0gZW1pdHMgdGhhdCBlcnJvciBhbmQgdGhlbiBpdCBjbG9zZXMuCiAgICogSWYgcmVhZGluZyBbSXRlcmF0b3IuY3VycmVudF0gb24gYGVsZW1lbnRzLml0ZXJhdG9yYCB0aHJvd3MsCiAgICogdGhlIHN0cmVhbSBlbWl0cyB0aGF0IGVycm9yLCBidXQga2VlcHMgaXRlcmF0aW5nLgogICAqLwogIGZhY3RvcnkgU3RyZWFtLmZyb21JdGVyYWJsZShJdGVyYWJsZTxUPiBlbGVtZW50cykgewogICAgcmV0dXJuIG5ldyBfR2VuZXJhdGVkU3RyZWFtSW1wbDxUPigKICAgICAgICAoKSA9PiBuZXcgX0l0ZXJhYmxlUGVuZGluZ0V2ZW50czxUPihlbGVtZW50cykpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIHN0cmVhbSB0aGF0IHJlcGVhdGVkbHkgZW1pdHMgZXZlbnRzIGF0IFtwZXJpb2RdIGludGVydmFscy4KICAgKgogICAqIFRoZSBldmVudCB2YWx1ZXMgYXJlIGNvbXB1dGVkIGJ5IGludm9raW5nIFtjb21wdXRhdGlvbl0uIFRoZSBhcmd1bWVudCB0bwogICAqIHRoaXMgY2FsbGJhY2sgaXMgYW4gaW50ZWdlciB0aGF0IHN0YXJ0cyB3aXRoIDAgYW5kIGlzIGluY3JlbWVudGVkIGZvcgogICAqIGV2ZXJ5IGV2ZW50LgogICAqCiAgICogSWYgW2NvbXB1dGF0aW9uXSBpcyBvbWl0dGVkIHRoZSBldmVudCB2YWx1ZXMgd2lsbCBhbGwgYmUgYG51bGxgLgogICAqCiAgICogW3BlcmlvZF0gbXVzdCBhIG5vbi1uZWdhdGl2ZSBbRHVyYXRpb25dLgogICAqLwogIGZhY3RvcnkgU3RyZWFtLnBlcmlvZGljKER1cmF0aW9uIHBlcmlvZCwKICAgICAgW1QgY29tcHV0YXRpb24oaW50IGNvbXB1dGF0aW9uQ291bnQpXSkgewogICAgVGltZXIgdGltZXI7CiAgICBpbnQgY29tcHV0YXRpb25Db3VudCA9IDA7CiAgICBTdHJlYW1Db250cm9sbGVyPFQ+IGNvbnRyb2xsZXI7CiAgICAvLyBDb3VudHMgdGhlIHRpbWUgdGhhdCB0aGUgU3RyZWFtIHdhcyBydW5uaW5nIChhbmQgbm90IHBhdXNlZCkuCiAgICBTdG9wd2F0Y2ggd2F0Y2ggPSBuZXcgU3RvcHdhdGNoKCk7CgogICAgdm9pZCBzZW5kRXZlbnQoKSB7CiAgICAgIHdhdGNoLnJlc2V0KCk7CiAgICAgIFQgZGF0YTsKICAgICAgaWYgKGNvbXB1dGF0aW9uICE9IG51bGwpIHsKICAgICAgICB0cnkgewogICAgICAgICAgZGF0YSA9IGNvbXB1dGF0aW9uKGNvbXB1dGF0aW9uQ291bnQrKyk7CiAgICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgICAgY29udHJvbGxlci5hZGRFcnJvcihlLCBzKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29udHJvbGxlci5hZGQoZGF0YSk7CiAgICB9CgogICAgdm9pZCBzdGFydFBlcmlvZGljVGltZXIoKSB7CiAgICAgIGFzc2VydCh0aW1lciA9PSBudWxsKTsKICAgICAgdGltZXIgPSBuZXcgVGltZXIucGVyaW9kaWMocGVyaW9kLCAoVGltZXIgdGltZXIpIHsKICAgICAgICBzZW5kRXZlbnQoKTsKICAgICAgfSk7CiAgICB9CgogICAgY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPFQ+KAogICAgICAgIHN5bmM6IHRydWUsCiAgICAgICAgb25MaXN0ZW46ICgpIHsKICAgICAgICAgIHdhdGNoLnN0YXJ0KCk7CiAgICAgICAgICBzdGFydFBlcmlvZGljVGltZXIoKTsKICAgICAgICB9LAogICAgICAgIG9uUGF1c2U6ICgpIHsKICAgICAgICAgIHRpbWVyLmNhbmNlbCgpOwogICAgICAgICAgdGltZXIgPSBudWxsOwogICAgICAgICAgd2F0Y2guc3RvcCgpOwogICAgICAgIH0sCiAgICAgICAgb25SZXN1bWU6ICgpIHsKICAgICAgICAgIGFzc2VydCh0aW1lciA9PSBudWxsKTsKICAgICAgICAgIER1cmF0aW9uIGVsYXBzZWQgPSB3YXRjaC5lbGFwc2VkOwogICAgICAgICAgd2F0Y2guc3RhcnQoKTsKICAgICAgICAgIHRpbWVyID0gbmV3IFRpbWVyKHBlcmlvZCAtIGVsYXBzZWQsICgpIHsKICAgICAgICAgICAgdGltZXIgPSBudWxsOwogICAgICAgICAgICBzdGFydFBlcmlvZGljVGltZXIoKTsKICAgICAgICAgICAgc2VuZEV2ZW50KCk7CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIG9uQ2FuY2VsOiAoKSB7CiAgICAgICAgICBpZiAodGltZXIgIT0gbnVsbCkgdGltZXIuY2FuY2VsKCk7CiAgICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgICByZXR1cm4gRnV0dXJlLl9udWxsRnV0dXJlOwogICAgICAgIH0pOwogICAgcmV0dXJuIGNvbnRyb2xsZXIuc3RyZWFtOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIHN0cmVhbSB3aGVyZSBhbGwgZXZlbnRzIG9mIGFuIGV4aXN0aW5nIHN0cmVhbSBhcmUgcGlwZWQgdGhyb3VnaAogICAqIGEgc2luay10cmFuc2Zvcm1hdGlvbi4KICAgKgogICAqIFRoZSBnaXZlbiBbbWFwU2lua10gY2xvc3VyZSBpcyBpbnZva2VkIHdoZW4gdGhlIHJldHVybmVkIHN0cmVhbSBpcwogICAqIGxpc3RlbmVkIHRvLiBBbGwgZXZlbnRzIGZyb20gdGhlIFtzb3VyY2VdIGFyZSBhZGRlZCBpbnRvIHRoZSBldmVudCBzaW5rCiAgICogdGhhdCBpcyByZXR1cm5lZCBmcm9tIHRoZSBpbnZvY2F0aW9uLiBUaGUgdHJhbnNmb3JtYXRpb24gcHV0cyBhbGwKICAgKiB0cmFuc2Zvcm1lZCBldmVudHMgaW50byB0aGUgc2luayB0aGUgW21hcFNpbmtdIGNsb3N1cmUgcmVjZWl2ZWQgZHVyaW5nCiAgICogaXRzIGludm9jYXRpb24uIENvbmNlcHR1YWxseSB0aGUgW21hcFNpbmtdIGNyZWF0ZXMgYSB0cmFuc2Zvcm1hdGlvbiBwaXBlCiAgICogd2l0aCB0aGUgaW5wdXQgc2luayBiZWluZyB0aGUgcmV0dXJuZWQgW0V2ZW50U2lua10gYW5kIHRoZSBvdXRwdXQgc2luawogICAqIGJlaW5nIHRoZSBzaW5rIGl0IHJlY2VpdmVkLgogICAqCiAgICogVGhpcyBjb25zdHJ1Y3RvciBpcyBmcmVxdWVudGx5IHVzZWQgdG8gYnVpbGQgdHJhbnNmb3JtZXJzLgogICAqCiAgICogRXhhbXBsZSB1c2UgZm9yIGEgZHVwbGljYXRpbmcgdHJhbnNmb3JtZXI6CiAgICoKICAgKiAgICAgY2xhc3MgRHVwbGljYXRpb25TaW5rIGltcGxlbWVudHMgRXZlbnRTaW5rPFN0cmluZz4gewogICAqICAgICAgIGZpbmFsIEV2ZW50U2luazxTdHJpbmc+IF9vdXRwdXRTaW5rOwogICAqICAgICAgIER1cGxpY2F0aW9uU2luayh0aGlzLl9vdXRwdXRTaW5rKTsKICAgKgogICAqICAgICAgIHZvaWQgYWRkKFN0cmluZyBkYXRhKSB7CiAgICogICAgICAgICBfb3V0cHV0U2luay5hZGQoZGF0YSk7CiAgICogICAgICAgICBfb3V0cHV0U2luay5hZGQoZGF0YSk7CiAgICogICAgICAgfQogICAqCiAgICogICAgICAgdm9pZCBhZGRFcnJvcihlLCBbc3RdKSB7IF9vdXRwdXRTaW5rLmFkZEVycm9yKGUsIHN0KTsgfQogICAqICAgICAgIHZvaWQgY2xvc2UoKSB7IF9vdXRwdXRTaW5rLmNsb3NlKCk7IH0KICAgKiAgICAgfQogICAqCiAgICogICAgIGNsYXNzIER1cGxpY2F0aW9uVHJhbnNmb3JtZXIgZXh0ZW5kcyBTdHJlYW1UcmFuc2Zvcm1lckJhc2U8U3RyaW5nLCBTdHJpbmc+IHsKICAgKiAgICAgICAvLyBTb21lIGdlbmVyaWMgdHlwZXMgb21pdHRlZCBmb3IgYnJldml0eS4KICAgKiAgICAgICBTdHJlYW0gYmluZChTdHJlYW0gc3RyZWFtKSA9PiBuZXcgU3RyZWFtPFN0cmluZz4uZXZlbnRUcmFuc2Zvcm1lZCgKICAgKiAgICAgICAgICAgc3RyZWFtLAogICAqICAgICAgICAgICAoRXZlbnRTaW5rIHNpbmspID0+IG5ldyBEdXBsaWNhdGlvblNpbmsoc2luaykpOwogICAqICAgICB9CiAgICoKICAgKiAgICAgc3RyaW5nU3RyZWFtLnRyYW5zZm9ybShuZXcgRHVwbGljYXRpb25UcmFuc2Zvcm1lcigpKTsKICAgKgogICAqIFRoZSByZXN1bHRpbmcgc3RyZWFtIGlzIGEgYnJvYWRjYXN0IHN0cmVhbSBpZiBbc291cmNlXSBpcy4KICAgKi8KICBmYWN0b3J5IFN0cmVhbS5ldmVudFRyYW5zZm9ybWVkKAogICAgICBTdHJlYW0gc291cmNlLCBFdmVudFNpbmsgbWFwU2luayhFdmVudFNpbms8VD4gc2luaykpIHsKICAgIHJldHVybiBuZXcgX0JvdW5kU2lua1N0cmVhbShzb3VyY2UsIG1hcFNpbmspOwogIH0KCiAgLyoqCiAgICogQWRhcHRzIFtzb3VyY2VdIHRvIGJlIGEgYFN0cmVhbTxUPmAuCiAgICoKICAgKiBUaGlzIGFsbG93cyBbc291cmNlXSB0byBiZSB1c2VkIGF0IHRoZSBuZXcgdHlwZSwgYnV0IGF0IHJ1bi10aW1lIGl0CiAgICogbXVzdCBzYXRpc2Z5IHRoZSByZXF1aXJlbWVudHMgb2YgYm90aCB0aGUgbmV3IHR5cGUgYW5kIGl0cyBvcmlnaW5hbCB0eXBlLgogICAqCiAgICogRGF0YSBldmVudHMgY3JlYXRlZCBieSB0aGUgc291cmNlIHN0cmVhbSBtdXN0IGFsc28gYmUgaW5zdGFuY2VzIG9mIFtUXS4KICAgKi8KICBzdGF0aWMgU3RyZWFtPFQ+IGNhc3RGcm9tPFMsIFQ+KFN0cmVhbTxTPiBzb3VyY2UpID0+CiAgICAgIG5ldyBDYXN0U3RyZWFtPFMsIFQ+KHNvdXJjZSk7CgogIC8qKgogICAqIFdoZXRoZXIgdGhpcyBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtLgogICAqLwogIGJvb2wgZ2V0IGlzQnJvYWRjYXN0ID0+IGZhbHNlOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbXVsdGktc3Vic2NyaXB0aW9uIHN0cmVhbSB0aGF0IHByb2R1Y2VzIHRoZSBzYW1lIGV2ZW50cyBhcyB0aGlzLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSB3aWxsIHN1YnNjcmliZSB0byB0aGlzIHN0cmVhbSB3aGVuIGl0cyBmaXJzdAogICAqIHN1YnNjcmliZXIgaXMgYWRkZWQsIGFuZCB3aWxsIHN0YXkgc3Vic2NyaWJlZCB1bnRpbCB0aGlzIHN0cmVhbSBlbmRzLAogICAqIG9yIGEgY2FsbGJhY2sgY2FuY2VscyB0aGUgc3Vic2NyaXB0aW9uLgogICAqCiAgICogSWYgW29uTGlzdGVuXSBpcyBwcm92aWRlZCwgaXQgaXMgY2FsbGVkIHdpdGggYSBzdWJzY3JpcHRpb24tbGlrZSBvYmplY3QKICAgKiB0aGF0IHJlcHJlc2VudHMgdGhlIHVuZGVybHlpbmcgc3Vic2NyaXB0aW9uIHRvIHRoaXMgc3RyZWFtLiBJdCBpcwogICAqIHBvc3NpYmxlIHRvIHBhdXNlLCByZXN1bWUgb3IgY2FuY2VsIHRoZSBzdWJzY3JpcHRpb24gZHVyaW5nIHRoZSBjYWxsCiAgICogdG8gW29uTGlzdGVuXS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGNoYW5nZSB0aGUgZXZlbnQgaGFuZGxlcnMsIGluY2x1ZGluZwogICAqIHVzaW5nIFtTdHJlYW1TdWJzY3JpcHRpb24uYXNGdXR1cmVdLgogICAqCiAgICogSWYgW29uQ2FuY2VsXSBpcyBwcm92aWRlZCwgaXQgaXMgY2FsbGVkIGluIGEgc2ltaWxhciB3YXkgdG8gW29uTGlzdGVuXQogICAqIHdoZW4gdGhlIHJldHVybmVkIHN0cmVhbSBzdG9wcyBoYXZpbmcgbGlzdGVuZXIuIElmIGl0IGxhdGVyIGdldHMKICAgKiBhIG5ldyBsaXN0ZW5lciwgdGhlIFtvbkxpc3Rlbl0gZnVuY3Rpb24gaXMgY2FsbGVkIGFnYWluLgogICAqCiAgICogVXNlIHRoZSBjYWxsYmFja3MsIGZvciBleGFtcGxlLCBmb3IgcGF1c2luZyB0aGUgdW5kZXJseWluZyBzdWJzY3JpcHRpb24KICAgKiB3aGlsZSBoYXZpbmcgbm8gc3Vic2NyaWJlcnMgdG8gcHJldmVudCBsb3NpbmcgZXZlbnRzLCBvciBjYW5jZWxpbmcgdGhlCiAgICogc3Vic2NyaXB0aW9uIHdoZW4gdGhlcmUgYXJlIG5vIGxpc3RlbmVycy4KICAgKi8KICBTdHJlYW08VD4gYXNCcm9hZGNhc3RTdHJlYW0oCiAgICAgIHt2b2lkIG9uTGlzdGVuKFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pLAogICAgICB2b2lkIG9uQ2FuY2VsKFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pfSkgewogICAgcmV0dXJuIG5ldyBfQXNCcm9hZGNhc3RTdHJlYW08VD4odGhpcywgb25MaXN0ZW4sIG9uQ2FuY2VsKTsKICB9CgogIC8qKgogICAqIEFkZHMgYSBzdWJzY3JpcHRpb24gdG8gdGhpcyBzdHJlYW0uCiAgICoKICAgKiBSZXR1cm5zIGEgW1N0cmVhbVN1YnNjcmlwdGlvbl0gd2hpY2ggaGFuZGxlcyBldmVudHMgZnJvbSB0aGlzIHN0cmVhbSB1c2luZwogICAqIHRoZSBwcm92aWRlZCBbb25EYXRhXSwgW29uRXJyb3JdIGFuZCBbb25Eb25lXSBoYW5kbGVycy4KICAgKiBUaGUgaGFuZGxlcnMgY2FuIGJlIGNoYW5nZWQgb24gdGhlIHN1YnNjcmlwdGlvbiwgYnV0IHRoZXkgc3RhcnQgb3V0CiAgICogYXMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9ucy4KICAgKgogICAqIE9uIGVhY2ggZGF0YSBldmVudCBmcm9tIHRoaXMgc3RyZWFtLCB0aGUgc3Vic2NyaWJlcidzIFtvbkRhdGFdIGhhbmRsZXIKICAgKiBpcyBjYWxsZWQuIElmIFtvbkRhdGFdIGlzIGBudWxsYCwgbm90aGluZyBoYXBwZW5zLgogICAqCiAgICogT24gZXJyb3JzIGZyb20gdGhpcyBzdHJlYW0sIHRoZSBbb25FcnJvcl0gaGFuZGxlciBpcyBjYWxsZWQgd2l0aCB0aGUKICAgKiBlcnJvciBvYmplY3QgYW5kIHBvc3NpYmx5IGEgc3RhY2sgdHJhY2UuCiAgICoKICAgKiBUaGUgW29uRXJyb3JdIGNhbGxiYWNrIG11c3QgYmUgb2YgdHlwZSBgdm9pZCBvbkVycm9yKGVycm9yKWAgb3IKICAgKiBgdm9pZCBvbkVycm9yKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpYC4gSWYgW29uRXJyb3JdIGFjY2VwdHMKICAgKiB0d28gYXJndW1lbnRzIGl0IGlzIGNhbGxlZCB3aXRoIHRoZSBlcnJvciBvYmplY3QgYW5kIHRoZSBzdGFjayB0cmFjZQogICAqICh3aGljaCBjb3VsZCBiZSBgbnVsbGAgaWYgdGhpcyBzdHJlYW0gaXRzZWxmIHJlY2VpdmVkIGFuIGVycm9yIHdpdGhvdXQKICAgKiBzdGFjayB0cmFjZSkuCiAgICogT3RoZXJ3aXNlIGl0IGlzIGNhbGxlZCB3aXRoIGp1c3QgdGhlIGVycm9yIG9iamVjdC4KICAgKiBJZiBbb25FcnJvcl0gaXMgb21pdHRlZCwgYW55IGVycm9ycyBvbiB0aGlzIHN0cmVhbSBhcmUgY29uc2lkZXJlZCB1bmhhbmRsZWQsCiAgICogYW5kIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjdXJyZW50IFtab25lXSdzIGVycm9yIGhhbmRsZXIuCiAgICogQnkgZGVmYXVsdCB1bmhhbmRsZWQgYXN5bmMgZXJyb3JzIGFyZSB0cmVhdGVkCiAgICogYXMgaWYgdGhleSB3ZXJlIHVuY2F1Z2h0IHRvcC1sZXZlbCBlcnJvcnMuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBjbG9zZXMgYW5kIHNlbmRzIGEgZG9uZSBldmVudCwgdGhlIFtvbkRvbmVdIGhhbmRsZXIgaXMKICAgKiBjYWxsZWQuIElmIFtvbkRvbmVdIGlzIGBudWxsYCwgbm90aGluZyBoYXBwZW5zLgogICAqCiAgICogSWYgW2NhbmNlbE9uRXJyb3JdIGlzIHRydWUsIHRoZSBzdWJzY3JpcHRpb24gaXMgYXV0b21hdGljYWxseSBjYW5jZWxlZAogICAqIHdoZW4gdGhlIGZpcnN0IGVycm9yIGV2ZW50IGlzIGRlbGl2ZXJlZC4gVGhlIGRlZmF1bHQgaXMgYGZhbHNlYC4KICAgKgogICAqIFdoaWxlIGEgc3Vic2NyaXB0aW9uIGlzIHBhdXNlZCwgb3Igd2hlbiBpdCBoYXMgYmVlbiBjYW5jZWxlZCwKICAgKiB0aGUgc3Vic2NyaXB0aW9uIGRvZXNuJ3QgcmVjZWl2ZSBldmVudHMgYW5kIG5vbmUgb2YgdGhlCiAgICogZXZlbnQgaGFuZGxlciBmdW5jdGlvbnMgYXJlIGNhbGxlZC4KICAgKi8KICBTdHJlYW1TdWJzY3JpcHRpb248VD4gbGlzdGVuKHZvaWQgb25EYXRhKFQgZXZlbnQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgc3RyZWFtIGZyb20gdGhpcyBzdHJlYW0gdGhhdCBkaXNjYXJkcyBzb21lIGVsZW1lbnRzLgogICAqCiAgICogVGhlIG5ldyBzdHJlYW0gc2VuZHMgdGhlIHNhbWUgZXJyb3IgYW5kIGRvbmUgZXZlbnRzIGFzIHRoaXMgc3RyZWFtLAogICAqIGJ1dCBpdCBvbmx5IHNlbmRzIHRoZSBkYXRhIGV2ZW50cyB0aGF0IHNhdGlzZnkgdGhlIFt0ZXN0XS4KICAgKgogICAqIElmIHRoZSBbdGVzdF0gZnVuY3Rpb24gdGhyb3dzLCB0aGUgZGF0YSBldmVudCBpcyBkcm9wcGVkIGFuZCB0aGUKICAgKiBlcnJvciBpcyBlbWl0dGVkIG9uIHRoZSByZXR1cm5lZCBzdHJlYW0gaW5zdGVhZC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtIGlmIHRoaXMgc3RyZWFtIGlzLgogICAqIElmIGEgYnJvYWRjYXN0IHN0cmVhbSBpcyBsaXN0ZW5lZCB0byBtb3JlIHRoYW4gb25jZSwgZWFjaCBzdWJzY3JpcHRpb24KICAgKiB3aWxsIGluZGl2aWR1YWxseSBwZXJmb3JtIHRoZSBgdGVzdGAuCiAgICovCiAgU3RyZWFtPFQ+IHdoZXJlKGJvb2wgdGVzdChUIGV2ZW50KSkgewogICAgcmV0dXJuIG5ldyBfV2hlcmVTdHJlYW08VD4odGhpcywgdGVzdCk7CiAgfQoKICAvKioKICAgKiBUcmFuc2Zvcm1zIGVhY2ggZWxlbWVudCBvZiB0aGlzIHN0cmVhbSBpbnRvIGEgbmV3IHN0cmVhbSBldmVudC4KICAgKgogICAqIENyZWF0ZXMgYSBuZXcgc3RyZWFtIHRoYXQgY29udmVydHMgZWFjaCBlbGVtZW50IG9mIHRoaXMgc3RyZWFtCiAgICogdG8gYSBuZXcgdmFsdWUgdXNpbmcgdGhlIFtjb252ZXJ0XSBmdW5jdGlvbiwgYW5kIGVtaXRzIHRoZSByZXN1bHQuCiAgICoKICAgKiBGb3IgZWFjaCBkYXRhIGV2ZW50LCBgb2AsIGluIHRoaXMgc3RyZWFtLCB0aGUgcmV0dXJuZWQgc3RyZWFtCiAgICogcHJvdmlkZXMgYSBkYXRhIGV2ZW50IHdpdGggdGhlIHZhbHVlIGBjb252ZXJ0KG8pYC4KICAgKiBJZiBbY29udmVydF0gdGhyb3dzLCB0aGUgcmV0dXJuZWQgc3RyZWFtIHJlcG9ydHMgaXQgYXMgYW4gZXJyb3IKICAgKiBldmVudCBpbnN0ZWFkLgogICAqCiAgICogRXJyb3IgYW5kIGRvbmUgZXZlbnRzIGFyZSBwYXNzZWQgdGhyb3VnaCB1bmNoYW5nZWQgdG8gdGhlIHJldHVybmVkIHN0cmVhbS4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtIGlmIHRoaXMgc3RyZWFtIGlzLgogICAqIFRoZSBbY29udmVydF0gZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgcGVyIGRhdGEgZXZlbnQgcGVyIGxpc3RlbmVyLgogICAqIElmIGEgYnJvYWRjYXN0IHN0cmVhbSBpcyBsaXN0ZW5lZCB0byBtb3JlIHRoYW4gb25jZSwgZWFjaCBzdWJzY3JpcHRpb24KICAgKiB3aWxsIGluZGl2aWR1YWxseSBjYWxsIFtjb252ZXJ0XSBvbiBlYWNoIGRhdGEgZXZlbnQuCiAgICoKICAgKiBVbmxpa2UgW3RyYW5zZm9ybV0sIHRoaXMgbWV0aG9kIGRvZXMgbm90IHRyZWF0IHRoZSBzdHJlYW0gYXMKICAgKiBjaHVua3Mgb2YgYSBzaW5nbGUgdmFsdWUuIEluc3RlYWQgZWFjaCBldmVudCBpcyBjb252ZXJ0ZWQgaW5kZXBlbmRlbnRseQogICAqIG9mIHRoZSBwcmV2aW91cyBhbmQgZm9sbG93aW5nIGV2ZW50cywgd2hpY2ggbWF5IG5vdCBhbHdheXMgYmUgY29ycmVjdC4KICAgKiBGb3IgZXhhbXBsZSwgVVRGLTggZW5jb2RpbmcsIG9yIGRlY29kaW5nLCB3aWxsIGdpdmUgd3JvbmcgcmVzdWx0cwogICAqIGlmIGEgc3Vycm9nYXRlIHBhaXIsIG9yIGEgbXVsdGlieXRlIFVURi04IGVuY29kaW5nLCBpcyBzcGxpdCBpbnRvCiAgICogc2VwYXJhdGUgZXZlbnRzLCBhbmQgdGhvc2UgZXZlbnRzIGFyZSBhdHRlbXB0ZWQgZW5jb2RlZCBvciBkZWNvZGVkCiAgICogaW5kZXBlbmRlbnRseS4KICAgKi8KICBTdHJlYW08Uz4gbWFwPFM+KFMgY29udmVydChUIGV2ZW50KSkgewogICAgcmV0dXJuIG5ldyBfTWFwU3RyZWFtPFQsIFM+KHRoaXMsIGNvbnZlcnQpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBzdHJlYW0gd2l0aCBlYWNoIGRhdGEgZXZlbnQgb2YgdGhpcyBzdHJlYW0gYXN5bmNocm9ub3VzbHkKICAgKiBtYXBwZWQgdG8gYSBuZXcgZXZlbnQuCiAgICoKICAgKiBUaGlzIGFjdHMgbGlrZSBbbWFwXSwgZXhjZXB0IHRoYXQgW2NvbnZlcnRdIG1heSByZXR1cm4gYSBbRnV0dXJlXSwKICAgKiBhbmQgaW4gdGhhdCBjYXNlLCB0aGlzIHN0cmVhbSB3YWl0cyBmb3IgdGhhdCBmdXR1cmUgdG8gY29tcGxldGUgYmVmb3JlCiAgICogY29udGludWluZyB3aXRoIGl0cyByZXN1bHQuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgc3RyZWFtIGlzIGEgYnJvYWRjYXN0IHN0cmVhbSBpZiB0aGlzIHN0cmVhbSBpcy4KICAgKi8KICBTdHJlYW08RT4gYXN5bmNNYXA8RT4oRnV0dXJlT3I8RT4gY29udmVydChUIGV2ZW50KSkgewogICAgX1N0cmVhbUNvbnRyb2xsZXJCYXNlPEU+IGNvbnRyb2xsZXI7CiAgICBTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uOwoKICAgIHZvaWQgb25MaXN0ZW4oKSB7CiAgICAgIGZpbmFsIGFkZCA9IGNvbnRyb2xsZXIuYWRkOwogICAgICBhc3NlcnQoY29udHJvbGxlciBpcyBfU3RyZWFtQ29udHJvbGxlcjxFPiB8fAogICAgICAgICAgY29udHJvbGxlciBpcyBfQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcik7CiAgICAgIGZpbmFsIGFkZEVycm9yID0gY29udHJvbGxlci5fYWRkRXJyb3I7CiAgICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuKChUIGV2ZW50KSB7CiAgICAgICAgRnV0dXJlT3I8RT4gbmV3VmFsdWU7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIG5ld1ZhbHVlID0gY29udmVydChldmVudCk7CiAgICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgICAgY29udHJvbGxlci5hZGRFcnJvcihlLCBzKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKG5ld1ZhbHVlIGlzIEZ1dHVyZTxFPikgewogICAgICAgICAgc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICAgICAgICBuZXdWYWx1ZQogICAgICAgICAgICAgIC50aGVuKGFkZCwgb25FcnJvcjogYWRkRXJyb3IpCiAgICAgICAgICAgICAgLndoZW5Db21wbGV0ZShzdWJzY3JpcHRpb24ucmVzdW1lKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29udHJvbGxlci5hZGQobmV3VmFsdWUpOwogICAgICAgIH0KICAgICAgfSwgb25FcnJvcjogYWRkRXJyb3IsIG9uRG9uZTogY29udHJvbGxlci5jbG9zZSk7CiAgICB9CgogICAgaWYgKHRoaXMuaXNCcm9hZGNhc3QpIHsKICAgICAgY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPEU+LmJyb2FkY2FzdCgKICAgICAgICAgIG9uTGlzdGVuOiBvbkxpc3RlbiwKICAgICAgICAgIG9uQ2FuY2VsOiAoKSB7CiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBzeW5jOiB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcjxFPigKICAgICAgICAgIG9uTGlzdGVuOiBvbkxpc3RlbiwKICAgICAgICAgIG9uUGF1c2U6ICgpIHsKICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICAgICAgICB9LAogICAgICAgICAgb25SZXN1bWU6ICgpIHsKICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogICAgICAgICAgfSwKICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiBzdWJzY3JpcHRpb24uY2FuY2VsKCksCiAgICAgICAgICBzeW5jOiB0cnVlKTsKICAgIH0KICAgIHJldHVybiBjb250cm9sbGVyLnN0cmVhbTsKICB9CgogIC8qKgogICAqIFRyYW5zZm9ybXMgZWFjaCBlbGVtZW50IGludG8gYSBzZXF1ZW5jZSBvZiBhc3luY2hyb25vdXMgZXZlbnRzLgogICAqCiAgICogUmV0dXJucyBhIG5ldyBzdHJlYW0gYW5kIGZvciBlYWNoIGV2ZW50IG9mIHRoaXMgc3RyZWFtLCBkbyB0aGUgZm9sbG93aW5nOgogICAqCiAgICogKiBJZiB0aGUgZXZlbnQgaXMgYW4gZXJyb3IgZXZlbnQgb3IgYSBkb25lIGV2ZW50LCBpdCBpcyBlbWl0dGVkIGRpcmVjdGx5CiAgICogYnkgdGhlIHJldHVybmVkIHN0cmVhbS4KICAgKiAqIE90aGVyd2lzZSBpdCBpcyBhbiBlbGVtZW50LiBUaGVuIHRoZSBbY29udmVydF0gZnVuY3Rpb24gaXMgY2FsbGVkCiAgICogd2l0aCB0aGUgZWxlbWVudCBhcyBhcmd1bWVudCB0byBwcm9kdWNlIGEgY29udmVydC1zdHJlYW0gZm9yIHRoZSBlbGVtZW50LgogICAqICogSWYgdGhhdCBjYWxsIHRocm93cywgdGhlIGVycm9yIGlzIGVtaXR0ZWQgb24gdGhlIHJldHVybmVkIHN0cmVhbS4KICAgKiAqIElmIHRoZSBjYWxsIHJldHVybnMgYG51bGxgLCBubyBmdXJ0aGVyIGFjdGlvbiBpcyB0YWtlbiBmb3IgdGhlIGVsZW1lbnRzLgogICAqICogT3RoZXJ3aXNlLCB0aGlzIHN0cmVhbSBpcyBwYXVzZWQgYW5kIGNvbnZlcnQtc3RyZWFtIGlzIGxpc3RlbmVkIHRvLgogICAqIEV2ZXJ5IGRhdGEgYW5kIGVycm9yIGV2ZW50IG9mIHRoZSBjb252ZXJ0LXN0cmVhbSBpcyBlbWl0dGVkIG9uIHRoZSByZXR1cm5lZAogICAqIHN0cmVhbSBpbiB0aGUgb3JkZXIgaXQgaXMgcHJvZHVjZWQuCiAgICogV2hlbiB0aGUgY29udmVydC1zdHJlYW0gZW5kcywgdGhpcyBzdHJlYW0gaXMgcmVzdW1lZC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtIGlmIHRoaXMgc3RyZWFtIGlzLgogICAqLwogIFN0cmVhbTxFPiBhc3luY0V4cGFuZDxFPihTdHJlYW08RT4gY29udmVydChUIGV2ZW50KSkgewogICAgX1N0cmVhbUNvbnRyb2xsZXJCYXNlPEU+IGNvbnRyb2xsZXI7CiAgICBTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uOwogICAgdm9pZCBvbkxpc3RlbigpIHsKICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIgaXMgX1N0cmVhbUNvbnRyb2xsZXIgfHwKICAgICAgICAgIGNvbnRyb2xsZXIgaXMgX0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXIpOwogICAgICBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbigoVCBldmVudCkgewogICAgICAgIFN0cmVhbTxFPiBuZXdTdHJlYW07CiAgICAgICAgdHJ5IHsKICAgICAgICAgIG5ld1N0cmVhbSA9IGNvbnZlcnQoZXZlbnQpOwogICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgIGNvbnRyb2xsZXIuYWRkRXJyb3IoZSwgcyk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChuZXdTdHJlYW0gIT0gbnVsbCkgewogICAgICAgICAgc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICAgICAgICBjb250cm9sbGVyLmFkZFN0cmVhbShuZXdTdHJlYW0pLndoZW5Db21wbGV0ZShzdWJzY3JpcHRpb24ucmVzdW1lKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgICAgICBvbkVycm9yOiBjb250cm9sbGVyLl9hZGRFcnJvciwgLy8gQXZvaWQgWm9uZSBlcnJvciByZXBsYWNlbWVudC4KICAgICAgICAgIG9uRG9uZTogY29udHJvbGxlci5jbG9zZSk7CiAgICB9CgogICAgaWYgKHRoaXMuaXNCcm9hZGNhc3QpIHsKICAgICAgY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPEU+LmJyb2FkY2FzdCgKICAgICAgICAgIG9uTGlzdGVuOiBvbkxpc3RlbiwKICAgICAgICAgIG9uQ2FuY2VsOiAoKSB7CiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBzeW5jOiB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcjxFPigKICAgICAgICAgIG9uTGlzdGVuOiBvbkxpc3RlbiwKICAgICAgICAgIG9uUGF1c2U6ICgpIHsKICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICAgICAgICB9LAogICAgICAgICAgb25SZXN1bWU6ICgpIHsKICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogICAgICAgICAgfSwKICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiBzdWJzY3JpcHRpb24uY2FuY2VsKCksCiAgICAgICAgICBzeW5jOiB0cnVlKTsKICAgIH0KICAgIHJldHVybiBjb250cm9sbGVyLnN0cmVhbTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSB3cmFwcGVyIFN0cmVhbSB0aGF0IGludGVyY2VwdHMgc29tZSBlcnJvcnMgZnJvbSB0aGlzIHN0cmVhbS4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIHNlbmRzIGFuIGVycm9yIHRoYXQgbWF0Y2hlcyBbdGVzdF0sIHRoZW4gaXQgaXMgaW50ZXJjZXB0ZWQKICAgKiBieSB0aGUgW29uRXJyb3JdIGZ1bmN0aW9uLgogICAqCiAgICogVGhlIFtvbkVycm9yXSBjYWxsYmFjayBtdXN0IGJlIG9mIHR5cGUgYHZvaWQgb25FcnJvcihlcnJvcilgIG9yCiAgICogYHZvaWQgb25FcnJvcihlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKWAuCiAgICogVGhlIGZ1bmN0aW9uIHR5cGUgZGV0ZXJtaW5lcyB3aGV0aGVyIFtvbkVycm9yXSBpcyBpbnZva2VkIHdpdGggYSBzdGFjawogICAqIHRyYWNlIGFyZ3VtZW50LgogICAqIFRoZSBzdGFjayB0cmFjZSBhcmd1bWVudCBtYXkgYmUgYG51bGxgIGlmIHRoaXMgc3RyZWFtIHJlY2VpdmVkIGFuIGVycm9yCiAgICogd2l0aG91dCBhIHN0YWNrIHRyYWNlLgogICAqCiAgICogQW4gYXN5bmNocm9ub3VzIGVycm9yIGBlcnJvcmAgaXMgbWF0Y2hlZCBieSBhIHRlc3QgZnVuY3Rpb24gaWYKICAgKmB0ZXN0KGVycm9yKWAgcmV0dXJucyB0cnVlLiBJZiBbdGVzdF0gaXMgb21pdHRlZCwgZXZlcnkgZXJyb3IgaXMgY29uc2lkZXJlZAogICAqIG1hdGNoaW5nLgogICAqCiAgICogSWYgdGhlIGVycm9yIGlzIGludGVyY2VwdGVkLCB0aGUgW29uRXJyb3JdIGZ1bmN0aW9uIGNhbiBkZWNpZGUgd2hhdCB0byBkbwogICAqIHdpdGggaXQuIEl0IGNhbiB0aHJvdyBpZiBpdCB3YW50cyB0byByYWlzZSBhIG5ldyAob3IgdGhlIHNhbWUpIGVycm9yLAogICAqIG9yIHNpbXBseSByZXR1cm4gdG8gbWFrZSB0aGlzIHN0cmVhbSBmb3JnZXQgdGhlIGVycm9yLgogICAqIElmIHRoZSByZWNlaXZlZCBgZXJyb3JgIHZhbHVlIGlzIHRocm93biBhZ2FpbiBieSB0aGUgW29uRXJyb3JdIGZ1bmN0aW9uLAogICAqIGl0IGFjdHMgbGlrZSBhIGByZXRocm93YCBhbmQgaXQgaXMgZW1pdHRlZCBhbG9uZyB3aXRoIGl0cyBvcmlnaW5hbAogICAqIHN0YWNrIHRyYWNlLCBub3QgdGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBgdGhyb3dgIGluc2lkZSBbb25FcnJvcl0uCiAgICoKICAgKiBJZiB5b3UgbmVlZCB0byB0cmFuc2Zvcm0gYW4gZXJyb3IgaW50byBhIGRhdGEgZXZlbnQsIHVzZSB0aGUgbW9yZSBnZW5lcmljCiAgICogW1N0cmVhbS50cmFuc2Zvcm1dIHRvIGhhbmRsZSB0aGUgZXZlbnQgYnkgd3JpdGluZyBhIGRhdGEgZXZlbnQgdG8KICAgKiB0aGUgb3V0cHV0IHNpbmsuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgc3RyZWFtIGlzIGEgYnJvYWRjYXN0IHN0cmVhbSBpZiB0aGlzIHN0cmVhbSBpcy4KICAgKiBJZiBhIGJyb2FkY2FzdCBzdHJlYW0gaXMgbGlzdGVuZWQgdG8gbW9yZSB0aGFuIG9uY2UsIGVhY2ggc3Vic2NyaXB0aW9uCiAgICogd2lsbCBpbmRpdmlkdWFsbHkgcGVyZm9ybSB0aGUgYHRlc3RgIGFuZCBoYW5kbGUgdGhlIGVycm9yLgogICAqLwogIFN0cmVhbTxUPiBoYW5kbGVFcnJvcihGdW5jdGlvbiBvbkVycm9yLCB7Ym9vbCB0ZXN0KGVycm9yKX0pIHsKICAgIHJldHVybiBuZXcgX0hhbmRsZUVycm9yU3RyZWFtPFQ+KHRoaXMsIG9uRXJyb3IsIHRlc3QpOwogIH0KCiAgLyoqCiAgICogVHJhbnNmb3JtcyBlYWNoIGVsZW1lbnQgb2YgdGhpcyBzdHJlYW0gaW50byBhIHNlcXVlbmNlIG9mIGVsZW1lbnRzLgogICAqCiAgICogUmV0dXJucyBhIG5ldyBzdHJlYW0gd2hlcmUgZWFjaCBlbGVtZW50IG9mIHRoaXMgc3RyZWFtIGlzIHJlcGxhY2VkCiAgICogYnkgemVybyBvciBtb3JlIGRhdGEgZXZlbnRzLgogICAqIFRoZSBldmVudCB2YWx1ZXMgYXJlIHByb3ZpZGVkIGFzIGFuIFtJdGVyYWJsZV0gYnkgYSBjYWxsIHRvIFtjb252ZXJ0XQogICAqIHdpdGggdGhlIGVsZW1lbnQgYXMgYXJndW1lbnQsIGFuZCB0aGUgZWxlbWVudHMgb2YgdGhhdCBpdGVyYWJsZSBpcwogICAqIGVtaXR0ZWQgaW4gaXRlcmF0aW9uIG9yZGVyLgogICAqIElmIGNhbGxpbmcgW2NvbnZlcnRdIHRocm93cywgb3IgaWYgdGhlIGl0ZXJhdGlvbiBvZiB0aGUgcmV0dXJuZWQgdmFsdWVzCiAgICogdGhyb3dzLCB0aGUgZXJyb3IgaXMgZW1pdHRlZCBvbiB0aGUgcmV0dXJuZWQgc3RyZWFtIGFuZCBpdGVyYXRpb24gZW5kcwogICAqIGZvciB0aGF0IGVsZW1lbnQgb2YgdGhpcyBzdHJlYW0uCiAgICoKICAgKiBFcnJvciBldmVudHMgYW5kIHRoZSBkb25lIGV2ZW50IG9mIHRoaXMgc3RyZWFtIGFyZSBmb3J3YXJkZWQgZGlyZWN0bHkKICAgKiB0byB0aGUgcmV0dXJuZWQgc3RyZWFtLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBhIGJyb2FkY2FzdCBzdHJlYW0gaWYgdGhpcyBzdHJlYW0gaXMuCiAgICogSWYgYSBicm9hZGNhc3Qgc3RyZWFtIGlzIGxpc3RlbmVkIHRvIG1vcmUgdGhhbiBvbmNlLCBlYWNoIHN1YnNjcmlwdGlvbgogICAqIHdpbGwgaW5kaXZpZHVhbGx5IGNhbGwgYGNvbnZlcnRgIGFuZCBleHBhbmQgdGhlIGV2ZW50cy4KICAgKi8KICBTdHJlYW08Uz4gZXhwYW5kPFM+KEl0ZXJhYmxlPFM+IGNvbnZlcnQoVCBlbGVtZW50KSkgewogICAgcmV0dXJuIG5ldyBfRXhwYW5kU3RyZWFtPFQsIFM+KHRoaXMsIGNvbnZlcnQpOwogIH0KCiAgLyoqCiAgICogUGlwZXMgdGhlIGV2ZW50cyBvZiB0aGlzIHN0cmVhbSBpbnRvIFtzdHJlYW1Db25zdW1lcl0uCiAgICoKICAgKiBBbGwgZXZlbnRzIG9mIHRoaXMgc3RyZWFtIGFyZSBhZGRlZCB0byBgc3RyZWFtQ29uc3VtZXJgIHVzaW5nCiAgICogW1N0cmVhbUNvbnN1bWVyLmFkZFN0cmVhbV0uCiAgICogVGhlIGBzdHJlYW1Db25zdW1lcmAgaXMgY2xvc2VkIHdoZW4gdGhpcyBzdHJlYW0gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGFkZGVkCiAgICogdG8gaXQgLSB3aGVuIHRoZSBmdXR1cmUgcmV0dXJuZWQgYnkgYGFkZFN0cmVhbWAgY29tcGxldGVzIHdpdGhvdXQgYW4gZXJyb3IuCiAgICoKICAgKiBSZXR1cm5zIGEgZnV0dXJlIHdoaWNoIGNvbXBsZXRlcyB3aGVuIHRoaXMgc3RyZWFtIGhhcyBiZWVuIGNvbnN1bWVkCiAgICogYW5kIHRoZSBjb25zdW1lciBoYXMgYmVlbiBjbG9zZWQuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIHRoZSBzYW1lIHJlc3VsdCBhcyB0aGUgZnV0dXJlIHJldHVybmVkCiAgICogYnkgW1N0cmVhbUNvbnN1bWVyLmNsb3NlXS4KICAgKiBJZiB0aGUgY2FsbCB0byBbU3RyZWFtQ29uc3VtZXIuYWRkU3RyZWFtXSBmYWlscyBpbiBzb21lIHdheSwgdGhpcwogICAqIG1ldGhvZCBmYWlscyBpbiB0aGUgc2FtZSB3YXkuCiAgICovCiAgRnV0dXJlIHBpcGUoU3RyZWFtQ29uc3VtZXI8VD4gc3RyZWFtQ29uc3VtZXIpIHsKICAgIHJldHVybiBzdHJlYW1Db25zdW1lci5hZGRTdHJlYW0odGhpcykudGhlbigoXykgPT4gc3RyZWFtQ29uc3VtZXIuY2xvc2UoKSk7CiAgfQoKICAvKioKICAgKiBBcHBsaWVzICBbc3RyZWFtVHJhbnNmb3JtZXJdIHRvIHRoaXMgc3RyZWFtLgogICAqCiAgICogUmV0dXJucyB0aGUgdHJhbnNmb3JtZWQgc3RyZWFtLAogICAqIHRoYXQgaXMsIHRoZSByZXN1bHQgb2YgYHN0cmVhbVRyYW5zZm9ybWVyLmJpbmQodGhpcylgLgogICAqIFRoaXMgbWV0aG9kIHNpbXBseSBhbGxvd3Mgd3JpdGluZyB0aGUgY2FsbCB0byBgc3RyZWFtVHJhbnNmb3JtZXIuYmluZGAKICAgKiBpbiBhIGNoYWluZWQgZmFzaGlvbiwgbGlrZQogICAqIGBgYAogICAqIHN0cmVhbS5tYXAobWFwcGluZykudHJhbnNmb3JtKHRyYW5zZm9ybWF0aW9uKS50b0xpc3QoKQogICAqIGBgYAogICAqIHdoaWNoIGNhbiBiZSBtb3JlIGNvbnZlbmllbnQgdGhhbiBjYWxsaW5nIGBiaW5kYCBkaXJlY3RseS4KICAgKgogICAqIFRoZSBbc3RyZWFtVHJhbnNmb3JtZXJdIGNhbiByZXR1cm4gYW55IHN0cmVhbS4KICAgKiBXaGV0aGVyIHRoZSByZXR1cm5lZCBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtIG9yIG5vdCwKICAgKiBhbmQgd2hpY2ggZWxlbWVudHMgaXQgd2lsbCBjb250YWluLAogICAqIGlzIGVudGlyZWx5IHVwIHRvIHRoZSB0cmFuc2Zvcm1hdGlvbi4KICAgKgogICAqIFRoaXMgbWV0aG9kIHNob3VsZCBhbHdheXMgYmUgdXNlZCBmb3IgdHJhbnNmb3JtYXRpb25zIHdoaWNoIHRyZWF0CiAgICogdGhlIGVudGlyZSBzdHJlYW0gYXMgcmVwcmVzZW50aW5nIGEgc2luZ2xlIHZhbHVlCiAgICogd2hpY2ggaGFzIHBlcmhhcHMgYmVlbiBzcGxpdCBpbnRvIHNldmVyYWwgcGFydHMgZm9yIHRyYW5zcG9ydCwKICAgKiBsaWtlIGEgZmlsZSBiZWluZyByZWFkIGZyb20gZGlzayBvciBiZWluZyBmZXRjaGVkIG92ZXIgYSBuZXR3b3JrLgogICAqIFRoZSB0cmFuc2Zvcm1hdGlvbiB3aWxsIHRoZW4gcHJvZHVjZSBhIG5ldyBzdHJlYW0gd2hpY2gKICAgKiB0cmFuc2Zvcm1zIHRoZSBzdHJlYW0ncyB2YWx1ZSBpbmNyZW1lbnRhbGx5IChwZXJoYXBzIHVzaW5nCiAgICogW0NvbnZlcnRlci5zdGFydENodW5rZWRDb252ZXJzaW9uXSkuIFRoZSByZXN1bHRpbmcgc3RyZWFtCiAgICogbWF5IGFnYWluIGJlIGNodW5rcyBvZiB0aGUgcmVzdWx0LCBidXQgZG9lcyBub3QgaGF2ZSB0bwogICAqIGNvcnJlc3BvbmQgdG8gc3BlY2lmaWMgZXZlbnRzIGZyb20gdGhlIHNvdXJjZSBzdHJpbmcuCiAgICovCiAgU3RyZWFtPFM+IHRyYW5zZm9ybTxTPihTdHJlYW1UcmFuc2Zvcm1lcjxULCBTPiBzdHJlYW1UcmFuc2Zvcm1lcikgewogICAgcmV0dXJuIHN0cmVhbVRyYW5zZm9ybWVyLmJpbmQodGhpcyk7CiAgfQoKICAvKioKICAgKiBDb21iaW5lcyBhIHNlcXVlbmNlIG9mIHZhbHVlcyBieSByZXBlYXRlZGx5IGFwcGx5aW5nIFtjb21iaW5lXS4KICAgKgogICAqIFNpbWlsYXIgdG8gW0l0ZXJhYmxlLnJlZHVjZV0sIHRoaXMgZnVuY3Rpb24gbWFpbnRhaW5zIGEgdmFsdWUsCiAgICogc3RhcnRpbmcgd2l0aCB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGlzIHN0cmVhbQogICAqIGFuZCB1cGRhdGVkIGZvciBlYWNoIGZ1cnRoZXIgZWxlbWVudCBvZiB0aGlzIHN0cmVhbS4KICAgKiBGb3IgZWFjaCBlbGVtZW50IGFmdGVyIHRoZSBmaXJzdCwKICAgKiB0aGUgdmFsdWUgaXMgdXBkYXRlZCB0byB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgW2NvbWJpbmVdCiAgICogd2l0aCB0aGUgcHJldmlvdXMgdmFsdWUgYW5kIHRoZSBlbGVtZW50LgogICAqCiAgICogV2hlbiB0aGlzIHN0cmVhbSBpcyBkb25lLCB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoCiAgICogdGhlIHZhbHVlIGF0IHRoYXQgdGltZS4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGlzIGVtcHR5LCB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoCiAgICogYW4gZXJyb3IuCiAgICogSWYgdGhpcyBzdHJlYW0gZW1pdHMgYW4gZXJyb3IsIG9yIHRoZSBjYWxsIHRvIFtjb21iaW5lXSB0aHJvd3MsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IGVycm9yLAogICAqIGFuZCBwcm9jZXNzaW5nIGlzIHN0b3BwZWQuCiAgICovCiAgRnV0dXJlPFQ+IHJlZHVjZShUIGNvbWJpbmUoVCBwcmV2aW91cywgVCBlbGVtZW50KSkgewogICAgX0Z1dHVyZTxUPiByZXN1bHQgPSBuZXcgX0Z1dHVyZTxUPigpOwogICAgYm9vbCBzZWVuRmlyc3QgPSBmYWxzZTsKICAgIFQgdmFsdWU7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4oCiAgICAgICAgKFQgZWxlbWVudCkgewogICAgICAgICAgaWYgKHNlZW5GaXJzdCkgewogICAgICAgICAgICBfcnVuVXNlckNvZGUoKCkgPT4gY29tYmluZSh2YWx1ZSwgZWxlbWVudCksIChUIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgdmFsdWUgPSBuZXdWYWx1ZTsKICAgICAgICAgICAgfSwgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIHJlc3VsdCkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFsdWUgPSBlbGVtZW50OwogICAgICAgICAgICBzZWVuRmlyc3QgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogcmVzdWx0Ll9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgaWYgKCFzZWVuRmlyc3QpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAvLyBUaHJvdyBhbmQgcmVjYXRjaCwgaW5zdGVhZCBvZiBqdXN0IGRvaW5nCiAgICAgICAgICAgICAgLy8gIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrLCBlLCB0aGVFcnJvciwgU3RhY2tUcmFjZS5jdXJyZW50KSwKICAgICAgICAgICAgICAvLyB0byBlbnN1cmUgdGhhdCB0aGUgc3RhY2tUcmFjZSBpcyBzZXQgb24gdGhlIGVycm9yLgogICAgICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgICAgX2NvbXBsZXRlV2l0aEVycm9yQ2FsbGJhY2socmVzdWx0LCBlLCBzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzdWx0Ll9jb21wbGV0ZSh2YWx1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKioKICAgKiBDb21iaW5lcyBhIHNlcXVlbmNlIG9mIHZhbHVlcyBieSByZXBlYXRlZGx5IGFwcGx5aW5nIFtjb21iaW5lXS4KICAgKgogICAqIFNpbWlsYXIgdG8gW0l0ZXJhYmxlLmZvbGRdLCB0aGlzIGZ1bmN0aW9uIG1haW50YWlucyBhIHZhbHVlLAogICAqIHN0YXJ0aW5nIHdpdGggW2luaXRpYWxWYWx1ZV0gYW5kIHVwZGF0ZWQgZm9yIGVhY2ggZWxlbWVudCBvZgogICAqIHRoaXMgc3RyZWFtLgogICAqIEZvciBlYWNoIGVsZW1lbnQsIHRoZSB2YWx1ZSBpcyB1cGRhdGVkIHRvIHRoZSByZXN1bHQgb2YgY2FsbGluZwogICAqIFtjb21iaW5lXSB3aXRoIHRoZSBwcmV2aW91cyB2YWx1ZSBhbmQgdGhlIGVsZW1lbnQuCiAgICoKICAgKiBXaGVuIHRoaXMgc3RyZWFtIGlzIGRvbmUsIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGgKICAgKiB0aGUgdmFsdWUgYXQgdGhhdCB0aW1lLgogICAqIEZvciBhbiBlbXB0eSBzdHJlYW0sIHRoZSBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggW2luaXRpYWxWYWx1ZV0uCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBlbWl0cyBhbiBlcnJvciwgb3IgdGhlIGNhbGwgdG8gW2NvbWJpbmVdIHRocm93cywKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQgZXJyb3IsCiAgICogYW5kIHByb2Nlc3NpbmcgaXMgc3RvcHBlZC4KICAgKi8KICBGdXR1cmU8Uz4gZm9sZDxTPihTIGluaXRpYWxWYWx1ZSwgUyBjb21iaW5lKFMgcHJldmlvdXMsIFQgZWxlbWVudCkpIHsKICAgIF9GdXR1cmU8Uz4gcmVzdWx0ID0gbmV3IF9GdXR1cmU8Uz4oKTsKICAgIFMgdmFsdWUgPSBpbml0aWFsVmFsdWU7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4oCiAgICAgICAgKFQgZWxlbWVudCkgewogICAgICAgICAgX3J1blVzZXJDb2RlKCgpID0+IGNvbWJpbmUodmFsdWUsIGVsZW1lbnQpLCAoUyBuZXdWYWx1ZSkgewogICAgICAgICAgICB2YWx1ZSA9IG5ld1ZhbHVlOwogICAgICAgICAgfSwgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIHJlc3VsdCkpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogcmVzdWx0Ll9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgcmVzdWx0Ll9jb21wbGV0ZSh2YWx1ZSk7CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKioKICAgKiBDb21iaW5lcyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGVsZW1lbnRzIGludG8gYSBzaW5nbGUgc3RyaW5nLgogICAqCiAgICogRWFjaCBlbGVtZW50IGlzIGNvbnZlcnRlZCB0byBhIHN0cmluZyB1c2luZyBpdHMgW09iamVjdC50b1N0cmluZ10gbWV0aG9kLgogICAqIElmIFtzZXBhcmF0b3JdIGlzIHByb3ZpZGVkLCBpdCBpcyBpbnNlcnRlZCBiZXR3ZWVuIGVsZW1lbnQgc3RyaW5nCiAgICogcmVwcmVzZW50YXRpb25zLgogICAqCiAgICogVGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgY29tYmluZWQgc3RyaW5nIHdoZW4gdGhpcyBzdHJlYW0KICAgKiBpcyBkb25lLgogICAqCiAgICogSWYgdGhpcyBzdHJlYW0gZW1pdHMgYW4gZXJyb3IsIG9yIHRoZSBjYWxsIHRvIFtPYmplY3QudG9TdHJpbmddIHRocm93cywKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQgZXJyb3IsCiAgICogYW5kIHByb2Nlc3Npbmcgc3RvcHMuCiAgICovCiAgRnV0dXJlPFN0cmluZz4gam9pbihbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgewogICAgX0Z1dHVyZTxTdHJpbmc+IHJlc3VsdCA9IG5ldyBfRnV0dXJlPFN0cmluZz4oKTsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbigKICAgICAgICAoVCBlbGVtZW50KSB7CiAgICAgICAgICBpZiAoIWZpcnN0KSB7CiAgICAgICAgICAgIGJ1ZmZlci53cml0ZShzZXBhcmF0b3IpOwogICAgICAgICAgfQogICAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGJ1ZmZlci53cml0ZShlbGVtZW50KTsKICAgICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgICAgX2NhbmNlbEFuZEVycm9yV2l0aFJlcGxhY2VtZW50KHN1YnNjcmlwdGlvbiwgcmVzdWx0LCBlLCBzKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIG9uRXJyb3I6IHJlc3VsdC5fY29tcGxldGVFcnJvciwKICAgICAgICBvbkRvbmU6ICgpIHsKICAgICAgICAgIHJlc3VsdC5fY29tcGxldGUoYnVmZmVyLnRvU3RyaW5nKCkpOwogICAgICAgIH0sCiAgICAgICAgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB3aGV0aGVyIFtuZWVkbGVdIG9jY3VycyBpbiB0aGUgZWxlbWVudHMgcHJvdmlkZWQgYnkgdGhpcyBzdHJlYW0uCiAgICoKICAgKiBDb21wYXJlcyBlYWNoIGVsZW1lbnQgb2YgdGhpcyBzdHJlYW0gdG8gW25lZWRsZV0gdXNpbmcgW09iamVjdC49PV0uCiAgICogSWYgYW4gZXF1YWwgZWxlbWVudCBpcyBmb3VuZCwgdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCBgdHJ1ZWAuCiAgICogSWYgdGhpcyBzdHJlYW0gZW5kcyB3aXRob3V0IGZpbmRpbmcgYSBtYXRjaCwgdGhlIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aAogICAqIGBmYWxzZWAuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBlbWl0cyBhbiBlcnJvciwgb3IgdGhlIGNhbGwgdG8gW09iamVjdC49PV0gdGhyb3dzLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhhdCBlcnJvciwKICAgKiBhbmQgcHJvY2Vzc2luZyBzdG9wcy4KICAgKi8KICBGdXR1cmU8Ym9vbD4gY29udGFpbnMoT2JqZWN0IG5lZWRsZSkgewogICAgX0Z1dHVyZTxib29sPiBmdXR1cmUgPSBuZXcgX0Z1dHVyZTxib29sPigpOwogICAgU3RyZWFtU3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbjsKICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuKAogICAgICAgIChUIGVsZW1lbnQpIHsKICAgICAgICAgIF9ydW5Vc2VyQ29kZSgoKSA9PiAoZWxlbWVudCA9PSBuZWVkbGUpLCAoYm9vbCBpc01hdGNoKSB7CiAgICAgICAgICAgIGlmIChpc01hdGNoKSB7CiAgICAgICAgICAgICAgX2NhbmNlbEFuZFZhbHVlKHN1YnNjcmlwdGlvbiwgZnV0dXJlLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIGZ1dHVyZSkpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZShmYWxzZSk7CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBFeGVjdXRlcyBbYWN0aW9uXSBvbiBlYWNoIGVsZW1lbnQgb2YgdGhpcyBzdHJlYW0uCiAgICoKICAgKiBDb21wbGV0ZXMgdGhlIHJldHVybmVkIFtGdXR1cmVdIHdoZW4gYWxsIGVsZW1lbnRzIG9mIHRoaXMgc3RyZWFtCiAgICogaGF2ZSBiZWVuIHByb2Nlc3NlZC4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVtaXRzIGFuIGVycm9yLCBvciBpZiB0aGUgY2FsbCB0byBbYWN0aW9uXSB0aHJvd3MsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCB0aGF0IGVycm9yLAogICAqIGFuZCBwcm9jZXNzaW5nIHN0b3BzLgogICAqLwogIEZ1dHVyZSBmb3JFYWNoKHZvaWQgYWN0aW9uKFQgZWxlbWVudCkpIHsKICAgIF9GdXR1cmUgZnV0dXJlID0gbmV3IF9GdXR1cmUoKTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb247CiAgICBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbigKICAgICAgICAoVCBlbGVtZW50KSB7CiAgICAgICAgICAvLyBUT0RPKGZsb2l0c2NoKTogdGhlIHR5cGUgc2hvdWxkIGJlICd2b2lkJyBhbmQgaW5mZXJyZWQuCiAgICAgICAgICBfcnVuVXNlckNvZGU8ZHluYW1pYz4oKCkgPT4gYWN0aW9uKGVsZW1lbnQpLCAoXykge30sCiAgICAgICAgICAgICAgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIGZ1dHVyZSkpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZShudWxsKTsKICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIC8qKgogICAqIENoZWNrcyB3aGV0aGVyIFt0ZXN0XSBhY2NlcHRzIGFsbCBlbGVtZW50cyBwcm92aWRlZCBieSB0aGlzIHN0cmVhbS4KICAgKgogICAqIENhbGxzIFt0ZXN0XSBvbiBlYWNoIGVsZW1lbnQgb2YgdGhpcyBzdHJlYW0uCiAgICogSWYgdGhlIGNhbGwgcmV0dXJucyBgZmFsc2VgLCB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIGBmYWxzZWAKICAgKiBhbmQgcHJvY2Vzc2luZyBzdG9wcy4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVuZHMgd2l0aG91dCBmaW5kaW5nIGFuIGVsZW1lbnQgdGhhdCBbdGVzdF0gcmVqZWN0cywKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIGB0cnVlYC4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVtaXRzIGFuIGVycm9yLCBvciBpZiB0aGUgY2FsbCB0byBbdGVzdF0gdGhyb3dzLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhhdCBlcnJvciwKICAgKiBhbmQgcHJvY2Vzc2luZyBzdG9wcy4KICAgKi8KICBGdXR1cmU8Ym9vbD4gZXZlcnkoYm9vbCB0ZXN0KFQgZWxlbWVudCkpIHsKICAgIF9GdXR1cmU8Ym9vbD4gZnV0dXJlID0gbmV3IF9GdXR1cmU8Ym9vbD4oKTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb247CiAgICBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbigKICAgICAgICAoVCBlbGVtZW50KSB7CiAgICAgICAgICBfcnVuVXNlckNvZGUoKCkgPT4gdGVzdChlbGVtZW50KSwgKGJvb2wgaXNNYXRjaCkgewogICAgICAgICAgICBpZiAoIWlzTWF0Y2gpIHsKICAgICAgICAgICAgICBfY2FuY2VsQW5kVmFsdWUoc3Vic2NyaXB0aW9uLCBmdXR1cmUsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIGZ1dHVyZSkpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZSh0cnVlKTsKICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIC8qKgogICAqIENoZWNrcyB3aGV0aGVyIFt0ZXN0XSBhY2NlcHRzIGFueSBlbGVtZW50IHByb3ZpZGVkIGJ5IHRoaXMgc3RyZWFtLgogICAqCiAgICogQ2FsbHMgW3Rlc3RdIG9uIGVhY2ggZWxlbWVudCBvZiB0aGlzIHN0cmVhbS4KICAgKiBJZiB0aGUgY2FsbCByZXR1cm5zIGB0cnVlYCwgdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCBgdHJ1ZWAKICAgKiBhbmQgcHJvY2Vzc2luZyBzdG9wcy4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVuZHMgd2l0aG91dCBmaW5kaW5nIGFuIGVsZW1lbnQgdGhhdCBbdGVzdF0gYWNjZXB0cywKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIGBmYWxzZWAuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBlbWl0cyBhbiBlcnJvciwgb3IgaWYgdGhlIGNhbGwgdG8gW3Rlc3RdIHRocm93cywKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQgZXJyb3IsCiAgICogYW5kIHByb2Nlc3Npbmcgc3RvcHMuCiAgICovCiAgRnV0dXJlPGJvb2w+IGFueShib29sIHRlc3QoVCBlbGVtZW50KSkgewogICAgX0Z1dHVyZTxib29sPiBmdXR1cmUgPSBuZXcgX0Z1dHVyZTxib29sPigpOwogICAgU3RyZWFtU3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbjsKICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuKAogICAgICAgIChUIGVsZW1lbnQpIHsKICAgICAgICAgIF9ydW5Vc2VyQ29kZSgoKSA9PiB0ZXN0KGVsZW1lbnQpLCAoYm9vbCBpc01hdGNoKSB7CiAgICAgICAgICAgIGlmIChpc01hdGNoKSB7CiAgICAgICAgICAgICAgX2NhbmNlbEFuZFZhbHVlKHN1YnNjcmlwdGlvbiwgZnV0dXJlLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIGZ1dHVyZSkpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZShmYWxzZSk7CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoaXMgc3RyZWFtLgogICAqCiAgICogV2FpdHMgZm9yIGFsbCBlbGVtZW50cyBvZiB0aGlzIHN0cmVhbS4gV2hlbiB0aGlzIHN0cmVhbSBlbmRzLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhlIG51bWJlciBvZiBlbGVtZW50cy4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVtaXRzIGFuIGVycm9yLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhhdCBlcnJvciwKICAgKiBhbmQgcHJvY2Vzc2luZyBzdG9wcy4KICAgKgogICAqIFRoaXMgb3BlcmF0aW9uIGxpc3RlbnMgdG8gdGhpcyBzdHJlYW0sIGFuZCBhIG5vbi1icm9hZGNhc3Qgc3RyZWFtIGNhbm5vdAogICAqIGJlIHJldXNlZCBhZnRlciBmaW5kaW5nIGl0cyBsZW5ndGguCiAgICovCiAgRnV0dXJlPGludD4gZ2V0IGxlbmd0aCB7CiAgICBfRnV0dXJlPGludD4gZnV0dXJlID0gbmV3IF9GdXR1cmU8aW50PigpOwogICAgaW50IGNvdW50ID0gMDsKICAgIHRoaXMubGlzdGVuKAogICAgICAgIChfKSB7CiAgICAgICAgICBjb3VudCsrOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZShjb3VudCk7CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBXaGV0aGVyIHRoaXMgc3RyZWFtIGNvbnRhaW5zIGFueSBlbGVtZW50cy4KICAgKgogICAqIFdhaXRzIGZvciB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGlzIHN0cmVhbSwgdGhlbiBjb21wbGV0ZXMgdGhlIHJldHVybmVkCiAgICogZnV0dXJlIHdpdGggYGZhbHNlYC4KICAgKiBJZiB0aGlzIHN0cmVhbSBlbmRzIHdpdGhvdXQgZW1pdHRpbmcgYW55IGVsZW1lbnRzLCB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzCiAgICogY29tcGxldGVkIHdpdGggYHRydWVgLgogICAqCiAgICogSWYgdGhlIGZpcnN0IGV2ZW50IGlzIGFuIGVycm9yLCB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQKICAgKiBlcnJvci4KICAgKgogICAqIFRoaXMgb3BlcmF0aW9uIGxpc3RlbnMgdG8gdGhpcyBzdHJlYW0sIGFuZCBhIG5vbi1icm9hZGNhc3Qgc3RyZWFtIGNhbm5vdAogICAqIGJlIHJldXNlZCBhZnRlciBjaGVja2luZyB3aGV0aGVyIGl0IGlzIGVtcHR5LgogICAqLwogIEZ1dHVyZTxib29sPiBnZXQgaXNFbXB0eSB7CiAgICBfRnV0dXJlPGJvb2w+IGZ1dHVyZSA9IG5ldyBfRnV0dXJlPGJvb2w+KCk7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4oCiAgICAgICAgKF8pIHsKICAgICAgICAgIF9jYW5jZWxBbmRWYWx1ZShzdWJzY3JpcHRpb24sIGZ1dHVyZSwgZmFsc2UpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZSh0cnVlKTsKICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIC8qKgogICAqIEFkYXB0IHRoaXMgc3RyZWFtIHRvIGJlIGEgYFN0cmVhbTxSPmAuCiAgICoKICAgKiBUaGlzIHN0cmVhbSBpcyB3cmFwcGVkIGFzIGEgYFN0cmVhbTxSPmAgd2hpY2ggY2hlY2tzIGF0IHJ1bi10aW1lIHRoYXQKICAgKiBlYWNoIGRhdGEgZXZlbnQgZW1pdHRlZCBieSB0aGlzIHN0cmVhbSBpcyBhbHNvIGFuIGluc3RhbmNlIG9mIFtSXS4KICAgKi8KICBTdHJlYW08Uj4gY2FzdDxSPigpID0+IFN0cmVhbS5jYXN0RnJvbTxULCBSPih0aGlzKTsKICAvKioKICAgKiBDb2xsZWN0cyBhbGwgZWxlbWVudHMgb2YgdGhpcyBzdHJlYW0gaW4gYSBbTGlzdF0uCiAgICoKICAgKiBDcmVhdGVzIGEgYExpc3Q8VD5gIGFuZCBhZGRzIGFsbCBlbGVtZW50cyBvZiB0aGlzIHN0cmVhbSB0byB0aGUgbGlzdAogICAqIGluIHRoZSBvcmRlciB0aGV5IGFycml2ZS4KICAgKiBXaGVuIHRoaXMgc3RyZWFtIGVuZHMsIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhhdCBsaXN0LgogICAqCiAgICogSWYgdGhpcyBzdHJlYW0gZW1pdHMgYW4gZXJyb3IsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IGVycm9yLAogICAqIGFuZCBwcm9jZXNzaW5nIHN0b3BzLgogICAqLwogIEZ1dHVyZTxMaXN0PFQ+PiB0b0xpc3QoKSB7CiAgICBMaXN0PFQ+IHJlc3VsdCA9IDxUPltdOwogICAgX0Z1dHVyZTxMaXN0PFQ+PiBmdXR1cmUgPSBuZXcgX0Z1dHVyZTxMaXN0PFQ+PigpOwogICAgdGhpcy5saXN0ZW4oCiAgICAgICAgKFQgZGF0YSkgewogICAgICAgICAgcmVzdWx0LmFkZChkYXRhKTsKICAgICAgICB9LAogICAgICAgIG9uRXJyb3I6IGZ1dHVyZS5fY29tcGxldGVFcnJvciwKICAgICAgICBvbkRvbmU6ICgpIHsKICAgICAgICAgIGZ1dHVyZS5fY29tcGxldGUocmVzdWx0KTsKICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIC8qKgogICAqIENvbGxlY3RzIHRoZSBkYXRhIG9mIHRoaXMgc3RyZWFtIGluIGEgW1NldF0uCiAgICoKICAgKiBDcmVhdGVzIGEgYFNldDxUPmAgYW5kIGFkZHMgYWxsIGVsZW1lbnRzIG9mIHRoaXMgc3RyZWFtIHRvIHRoZSBzZXQuCiAgICogaW4gdGhlIG9yZGVyIHRoZXkgYXJyaXZlLgogICAqIFdoZW4gdGhpcyBzdHJlYW0gZW5kcywgdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IHNldC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzZXQgaXMgdGhlIHNhbWUgdHlwZSBhcyByZXR1cm5lZCBieSBgbmV3IFNldDxUPigpYC4KICAgKiBJZiBhbm90aGVyIHR5cGUgb2Ygc2V0IGlzIG5lZWRlZCwgZWl0aGVyIHVzZSBbZm9yRWFjaF0gdG8gYWRkIGVhY2gKICAgKiBlbGVtZW50IHRvIHRoZSBzZXQsIG9yIHVzZQogICAqIGB0b0xpc3QoKS50aGVuKChsaXN0KSA9PiBuZXcgU29tZU90aGVyU2V0LmZyb20obGlzdCkpYAogICAqIHRvIGNyZWF0ZSB0aGUgc2V0LgogICAqCiAgICogSWYgdGhpcyBzdHJlYW0gZW1pdHMgYW4gZXJyb3IsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IGVycm9yLAogICAqIGFuZCBwcm9jZXNzaW5nIHN0b3BzLgogICAqLwogIEZ1dHVyZTxTZXQ8VD4+IHRvU2V0KCkgewogICAgU2V0PFQ+IHJlc3VsdCA9IG5ldyBTZXQ8VD4oKTsKICAgIF9GdXR1cmU8U2V0PFQ+PiBmdXR1cmUgPSBuZXcgX0Z1dHVyZTxTZXQ8VD4+KCk7CiAgICB0aGlzLmxpc3RlbigKICAgICAgICAoVCBkYXRhKSB7CiAgICAgICAgICByZXN1bHQuYWRkKGRhdGEpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZShyZXN1bHQpOwogICAgICAgIH0sCiAgICAgICAgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICByZXR1cm4gZnV0dXJlOwogIH0KCiAgLyoqCiAgICogRGlzY2FyZHMgYWxsIGRhdGEgb24gdGhpcyBzdHJlYW0sIGJ1dCBzaWduYWxzIHdoZW4gaXQgaXMgZG9uZSBvciBhbiBlcnJvcgogICAqIG9jY3VycmVkLgogICAqCiAgICogV2hlbiBzdWJzY3JpYmluZyB1c2luZyBbZHJhaW5dLCBjYW5jZWxPbkVycm9yIHdpbGwgYmUgdHJ1ZS4gVGhpcyBtZWFucwogICAqIHRoYXQgdGhlIGZ1dHVyZSB3aWxsIGNvbXBsZXRlIHdpdGggdGhlIGZpcnN0IGVycm9yIG9uIHRoaXMgc3RyZWFtIGFuZCB0aGVuCiAgICogY2FuY2VsIHRoZSBzdWJzY3JpcHRpb24uCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBlbWl0cyBhbiBlcnJvciwgdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aAogICAqIHRoYXQgZXJyb3IsIGFuZCBwcm9jZXNzaW5nIGlzIHN0b3BwZWQuCiAgICoKICAgKiBJbiBjYXNlIG9mIGEgYGRvbmVgIGV2ZW50IHRoZSBmdXR1cmUgY29tcGxldGVzIHdpdGggdGhlIGdpdmVuCiAgICogW2Z1dHVyZVZhbHVlXS4KICAgKi8KICBGdXR1cmU8RT4gZHJhaW48RT4oW0UgZnV0dXJlVmFsdWVdKSA9PgogICAgICBsaXN0ZW4obnVsbCwgY2FuY2VsT25FcnJvcjogdHJ1ZSkuYXNGdXR1cmU8RT4oZnV0dXJlVmFsdWUpOwoKICAvKioKICAgKiBQcm92aWRlcyBhdCBtb3N0IHRoZSBmaXJzdCBbY291bnRdIGRhdGEgZXZlbnRzIG9mIHRoaXMgc3RyZWFtLgogICAqCiAgICogUmV0dXJucyBhIHN0cmVhbSB0aGF0IGVtaXRzIHRoZSBzYW1lIGV2ZW50cyB0aGF0IHRoaXMgc3RyZWFtIHdvdWxkCiAgICogaWYgbGlzdGVuZWQgdG8gYXQgdGhlIHNhbWUgdGltZSwKICAgKiB1bnRpbCBlaXRoZXIgdGhpcyBzdHJlYW0gZW5kcyBvciBpdCBoYXMgZW1pdHRlZCBbY291bnRdIGRhdGEgZXZlbnRzLAogICAqIGF0IHdoaWNoIHBvaW50IHRoZSByZXR1cm5lZCBzdHJlYW0gaXMgZG9uZS4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIHByb2R1Y2VzIGZld2VyIHRoYW4gW2NvdW50XSBkYXRhIGV2ZW50cyBiZWZvcmUgaXQncyBkb25lLAogICAqIHNvIHdpbGwgdGhlIHJldHVybmVkIHN0cmVhbS4KICAgKgogICAqIFN0YXJ0cyBsaXN0ZW5pbmcgdG8gdGhpcyBzdHJlYW0gd2hlbiB0aGUgcmV0dXJuZWQgc3RyZWFtIGlzIGxpc3RlbmVkIHRvCiAgICogYW5kIHN0b3BzIGxpc3RlbmluZyB3aGVuIHRoZSBmaXJzdCBbY291bnRdIGRhdGEgZXZlbnRzIGhhdmUgYmVlbiByZWNlaXZlZC4KICAgKgogICAqIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGlzIGlzIGEgc2luZ2xlLXN1YnNjcmlwdGlvbiAobm9uLWJyb2FkY2FzdCkgc3RyZWFtcwogICAqIGl0IGNhbm5vdCBiZSByZXVzZWQgYWZ0ZXIgdGhlIHJldHVybmVkIHN0cmVhbSBoYXMgYmVlbiBsaXN0ZW5lZCB0by4KICAgKgogICAqIElmIHRoaXMgaXMgYSBicm9hZGNhc3Qgc3RyZWFtLCB0aGUgcmV0dXJuZWQgc3RyZWFtIGlzIGEgYnJvYWRjYXN0IHN0cmVhbS4KICAgKiBJbiB0aGF0IGNhc2UsIHRoZSBldmVudHMgYXJlIG9ubHkgY291bnRlZCBmcm9tIHRoZSB0aW1lCiAgICogdGhlIHJldHVybmVkIHN0cmVhbSBpcyBsaXN0ZW5lZCB0by4KICAgKi8KICBTdHJlYW08VD4gdGFrZShpbnQgY291bnQpIHsKICAgIHJldHVybiBuZXcgX1Rha2VTdHJlYW08VD4odGhpcywgY291bnQpOwogIH0KCiAgLyoqCiAgICogRm9yd2FyZHMgZGF0YSBldmVudHMgd2hpbGUgW3Rlc3RdIGlzIHN1Y2Nlc3NmdWwuCiAgICoKICAgKiBSZXR1cm5zIGEgc3RyZWFtIHRoYXQgcHJvdmlkZXMgdGhlIHNhbWUgZXZlbnRzIGFzIHRoaXMgc3RyZWFtCiAgICogdW50aWwgW3Rlc3RdIGZhaWxzIGZvciBhIGRhdGEgZXZlbnQuCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBkb25lIHdoZW4gZWl0aGVyIHRoaXMgc3RyZWFtIGlzIGRvbmUsCiAgICogb3Igd2hlbiB0aGlzIHN0cmVhbSBmaXJzdCBlbWl0cyBhIGRhdGEgZXZlbnQgdGhhdCBmYWlscyBbdGVzdF0uCiAgICoKICAgKiBUaGUgYHRlc3RgIGNhbGwgaXMgY29uc2lkZXJlZCBmYWlsaW5nIGlmIGl0IHJldHVybnMgYSBub24tYHRydWVgIHZhbHVlCiAgICogb3IgaWYgaXQgdGhyb3dzLiBJZiB0aGUgYHRlc3RgIGNhbGwgdGhyb3dzLCB0aGUgZXJyb3IgaXMgZW1pdHRlZCBhcyB0aGUKICAgKiBsYXN0IGV2ZW50IG9uIHRoZSByZXR1cm5lZCBzdHJlYW1zLgogICAqCiAgICogU3RvcHMgbGlzdGVuaW5nIHRvIHRoaXMgc3RyZWFtIGFmdGVyIHRoZSBhY2NlcHRlZCBlbGVtZW50cy4KICAgKgogICAqIEludGVybmFsbHkgdGhlIG1ldGhvZCBjYW5jZWxzIGl0cyBzdWJzY3JpcHRpb24gYWZ0ZXIgdGhlc2UgZWxlbWVudHMuIFRoaXMKICAgKiBtZWFucyB0aGF0IHNpbmdsZS1zdWJzY3JpcHRpb24gKG5vbi1icm9hZGNhc3QpIHN0cmVhbXMgYXJlIGNsb3NlZCBhbmQKICAgKiBjYW5ub3QgYmUgcmV1c2VkIGFmdGVyIGEgY2FsbCB0byB0aGlzIG1ldGhvZC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtIGlmIHRoaXMgc3RyZWFtIGlzLgogICAqIEZvciBhIGJyb2FkY2FzdCBzdHJlYW0sIHRoZSBldmVudHMgYXJlIG9ubHkgdGVzdGVkIGZyb20gdGhlIHRpbWUKICAgKiB0aGUgcmV0dXJuZWQgc3RyZWFtIGlzIGxpc3RlbmVkIHRvLgogICAqLwogIFN0cmVhbTxUPiB0YWtlV2hpbGUoYm9vbCB0ZXN0KFQgZWxlbWVudCkpIHsKICAgIHJldHVybiBuZXcgX1Rha2VXaGlsZVN0cmVhbTxUPih0aGlzLCB0ZXN0KTsKICB9CgogIC8qKgogICAqIFNraXBzIHRoZSBmaXJzdCBbY291bnRdIGRhdGEgZXZlbnRzIGZyb20gdGhpcyBzdHJlYW0uCiAgICoKICAgKiBSZXR1cm5zIGEgc3RyZWFtIHRoYXQgZW1pdHMgdGhlIHNhbWUgZXZlbnRzIGFzIHRoaXMgc3RyZWFtIHdvdWxkCiAgICogaWYgbGlzdGVuZWQgdG8gYXQgdGhlIHNhbWUgdGltZSwgZXhjZXB0IHRoYXQgdGhlIGZpcnN0IFtjb3VudF0KICAgKiBkYXRhIGV2ZW50cyBhcmUgbm90IGVtaXR0ZWQuCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBkb25lIHdoZW4gdGhpcyBzdHJlYW0gaXMuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBlbWl0cyBmZXdlciB0aGFuIFtjb3VudF0gZGF0YSBldmVudHMKICAgKiBiZWZvcmUgYmVpbmcgZG9uZSwgdGhlIHJldHVybmVkIHN0cmVhbSBlbWl0cyBubyBkYXRhIGV2ZW50cy4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtIGlmIHRoaXMgc3RyZWFtIGlzLgogICAqIEZvciBhIGJyb2FkY2FzdCBzdHJlYW0sIHRoZSBldmVudHMgYXJlIG9ubHkgY291bnRlZCBmcm9tIHRoZSB0aW1lCiAgICogdGhlIHJldHVybmVkIHN0cmVhbSBpcyBsaXN0ZW5lZCB0by4KICAgKi8KICBTdHJlYW08VD4gc2tpcChpbnQgY291bnQpIHsKICAgIHJldHVybiBuZXcgX1NraXBTdHJlYW08VD4odGhpcywgY291bnQpOwogIH0KCiAgLyoqCiAgICogU2tpcCBkYXRhIGV2ZW50cyBmcm9tIHRoaXMgc3RyZWFtIHdoaWxlIHRoZXkgYXJlIG1hdGNoZWQgYnkgW3Rlc3RdLgogICAqCiAgICogUmV0dXJucyBhIHN0cmVhbSB0aGF0IGVtaXRzIHRoZSBzYW1lIGV2ZW50cyBhcyB0aGlzIHN0cmVhbSwKICAgKiBleGNlcHQgdGhhdCBkYXRhIGV2ZW50cyBhcmUgbm90IGVtaXR0ZWQgdW50aWwgYSBkYXRhIGV2ZW50IGZhaWxzIGB0ZXN0YC4KICAgKiBUaGUgdGVzdCBmYWlscyB3aGVuIGNhbGxlZCB3aXRoIGEgZGF0YSBldmVudAogICAqIGlmIGl0IHJldHVybnMgYSBub24tYHRydWVgIHZhbHVlIG9yIGlmIHRoZSBjYWxsIHRvIGB0ZXN0YCB0aHJvd3MuCiAgICogSWYgdGhlIGNhbGwgdGhyb3dzLCB0aGUgZXJyb3IgaXMgZW1pdHRlZCBhcyBhbiBlcnJvciBldmVudAogICAqIG9uIHRoZSByZXR1cm5lZCBzdHJlYW0gaW5zdGVhZCBvZiB0aGUgZGF0YSBldmVudCwKICAgKiBvdGhlcndpc2UgdGhlIGV2ZW50IHRoYXQgbWFkZSBgdGVzdGAgcmV0dXJuIG5vbi10cnVlIGlzIGVtaXR0ZWQgYXMgdGhlCiAgICogZmlyc3QgZGF0YSBldmVudC4KICAgKgogICAqIEVycm9yIGFuZCBkb25lIGV2ZW50cyBhcmUgcHJvdmlkZWQgYnkgdGhlIHJldHVybmVkIHN0cmVhbSB1bm1vZGlmaWVkLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBhIGJyb2FkY2FzdCBzdHJlYW0gaWYgdGhpcyBzdHJlYW0gaXMuCiAgICogRm9yIGEgYnJvYWRjYXN0IHN0cmVhbSwgdGhlIGV2ZW50cyBhcmUgb25seSB0ZXN0ZWQgZnJvbSB0aGUgdGltZQogICAqIHRoZSByZXR1cm5lZCBzdHJlYW0gaXMgbGlzdGVuZWQgdG8uCiAgICovCiAgU3RyZWFtPFQ+IHNraXBXaGlsZShib29sIHRlc3QoVCBlbGVtZW50KSkgewogICAgcmV0dXJuIG5ldyBfU2tpcFdoaWxlU3RyZWFtPFQ+KHRoaXMsIHRlc3QpOwogIH0KCiAgLyoqCiAgICogU2tpcHMgZGF0YSBldmVudHMgaWYgdGhleSBhcmUgZXF1YWwgdG8gdGhlIHByZXZpb3VzIGRhdGEgZXZlbnQuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgc3RyZWFtIHByb3ZpZGVzIHRoZSBzYW1lIGV2ZW50cyBhcyB0aGlzIHN0cmVhbSwgZXhjZXB0CiAgICogdGhhdCBpdCBuZXZlciBwcm92aWRlcyB0d28gY29uc2VjdXRpdmUgZGF0YSBldmVudHMgdGhhdCBhcmUgZXF1YWwuCiAgICogVGhhdCBpcywgZXJyb3JzIGFyZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUgcmV0dXJuZWQgc3RyZWFtLCBhbmQKICAgKiBkYXRhIGV2ZW50cyBhcmUgcGFzc2VkIHRocm91Z2ggaWYgdGhleSBhcmUgZGlzdGluY3QgZnJvbSB0aGUgbW9zdAogICAqIHJlY2VudGx5IGVtaXR0ZWQgZGF0YSBldmVudC4KICAgKgogICAqIEVxdWFsaXR5IGlzIGRldGVybWluZWQgYnkgdGhlIHByb3ZpZGVkIFtlcXVhbHNdIG1ldGhvZC4gSWYgdGhhdCBpcwogICAqIG9taXR0ZWQsIHRoZSAnPT0nIG9wZXJhdG9yIG9uIHRoZSBsYXN0IHByb3ZpZGVkIGRhdGEgZWxlbWVudCBpcyB1c2VkLgogICAqCiAgICogSWYgW2VxdWFsc10gdGhyb3dzLCB0aGUgZGF0YSBldmVudCBpcyByZXBsYWNlZCBieSBhbiBlcnJvciBldmVudAogICAqIGNvbnRhaW5pbmcgdGhlIHRocm93biBlcnJvci4gVGhlIGJlaGF2aW9yIGlzIGVxdWl2YWxlbnQgdG8gdGhlCiAgICogb3JpZ2luYWwgc3RyZWFtIGVtaXR0aW5nIHRoZSBlcnJvciBldmVudCwgYW5kIGl0IGRvZXNuJ3QgY2hhbmdlCiAgICogdGhlIHdoYXQgdGhlIG1vc3QgcmVjZW50bHkgZW1pdHRlZCBkYXRhIGV2ZW50IGlzLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBhIGJyb2FkY2FzdCBzdHJlYW0gaWYgdGhpcyBzdHJlYW0gaXMuCiAgICogSWYgYSBicm9hZGNhc3Qgc3RyZWFtIGlzIGxpc3RlbmVkIHRvIG1vcmUgdGhhbiBvbmNlLCBlYWNoIHN1YnNjcmlwdGlvbgogICAqIHdpbGwgaW5kaXZpZHVhbGx5IHBlcmZvcm0gdGhlIGBlcXVhbHNgIHRlc3QuCiAgICovCiAgU3RyZWFtPFQ+IGRpc3RpbmN0KFtib29sIGVxdWFscyhUIHByZXZpb3VzLCBUIG5leHQpXSkgewogICAgcmV0dXJuIG5ldyBfRGlzdGluY3RTdHJlYW08VD4odGhpcywgZXF1YWxzKTsKICB9CgogIC8qKgogICAqIFRoZSBmaXJzdCBlbGVtZW50IG9mIHRoaXMgc3RyZWFtLgogICAqCiAgICogU3RvcHMgbGlzdGVuaW5nIHRvIHRoaXMgc3RyZWFtIGFmdGVyIHRoZSBmaXJzdCBlbGVtZW50IGhhcyBiZWVuIHJlY2VpdmVkLgogICAqCiAgICogSW50ZXJuYWxseSB0aGUgbWV0aG9kIGNhbmNlbHMgaXRzIHN1YnNjcmlwdGlvbiBhZnRlciB0aGUgZmlyc3QgZWxlbWVudC4KICAgKiBUaGlzIG1lYW5zIHRoYXQgc2luZ2xlLXN1YnNjcmlwdGlvbiAobm9uLWJyb2FkY2FzdCkgc3RyZWFtcyBhcmUgY2xvc2VkCiAgICogYW5kIGNhbm5vdCBiZSByZXVzZWQgYWZ0ZXIgYSBjYWxsIHRvIHRoaXMgZ2V0dGVyLgogICAqCiAgICogSWYgYW4gZXJyb3IgZXZlbnQgb2NjdXJzIGJlZm9yZSB0aGUgZmlyc3QgZGF0YSBldmVudCwgdGhlIHJldHVybmVkIGZ1dHVyZQogICAqIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQgZXJyb3IuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBpcyBlbXB0eSAoYSBkb25lIGV2ZW50IG9jY3VycyBiZWZvcmUgdGhlIGZpcnN0IGRhdGEgZXZlbnQpLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzIHdpdGggYW4gZXJyb3IuCiAgICoKICAgKiBFeGNlcHQgZm9yIHRoZSB0eXBlIG9mIHRoZSBlcnJvciwgdGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0bwogICAqIGB0aGlzLmVsZW1lbnRBdCgwKWAuCiAgICovCiAgRnV0dXJlPFQ+IGdldCBmaXJzdCB7CiAgICBfRnV0dXJlPFQ+IGZ1dHVyZSA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4oCiAgICAgICAgKFQgdmFsdWUpIHsKICAgICAgICAgIF9jYW5jZWxBbmRWYWx1ZShzdWJzY3JpcHRpb24sIGZ1dHVyZSwgdmFsdWUpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrKGZ1dHVyZSwgZSwgcyk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBUaGUgbGFzdCBlbGVtZW50IG9mIHRoaXMgc3RyZWFtLgogICAqCiAgICogSWYgdGhpcyBzdHJlYW0gZW1pdHMgYW4gZXJyb3IgZXZlbnQsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IGVycm9yCiAgICogYW5kIHByb2Nlc3Npbmcgc3RvcHMuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBpcyBlbXB0eSAodGhlIGRvbmUgZXZlbnQgaXMgdGhlIGZpcnN0IGV2ZW50KSwKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yLgogICAqLwogIEZ1dHVyZTxUPiBnZXQgbGFzdCB7CiAgICBfRnV0dXJlPFQ+IGZ1dHVyZSA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBUIHJlc3VsdDsKICAgIGJvb2wgZm91bmRSZXN1bHQgPSBmYWxzZTsKICAgIGxpc3RlbigKICAgICAgICAoVCB2YWx1ZSkgewogICAgICAgICAgZm91bmRSZXN1bHQgPSB0cnVlOwogICAgICAgICAgcmVzdWx0ID0gdmFsdWU7CiAgICAgICAgfSwKICAgICAgICBvbkVycm9yOiBmdXR1cmUuX2NvbXBsZXRlRXJyb3IsCiAgICAgICAgb25Eb25lOiAoKSB7CiAgICAgICAgICBpZiAoZm91bmRSZXN1bHQpIHsKICAgICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZShyZXN1bHQpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0cnkgewogICAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgICAgX2NvbXBsZXRlV2l0aEVycm9yQ2FsbGJhY2soZnV0dXJlLCBlLCBzKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIC8qKgogICAqIFRoZSBzaW5nbGUgZWxlbWVudCBvZiB0aGlzIHN0cmVhbS4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVtaXRzIGFuIGVycm9yIGV2ZW50LAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhhdCBlcnJvcgogICAqIGFuZCBwcm9jZXNzaW5nIHN0b3BzLgogICAqCiAgICogSWYgW3RoaXNdIGlzIGVtcHR5IG9yIGhhcyBtb3JlIHRoYW4gb25lIGVsZW1lbnQsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvci4KICAgKi8KICBGdXR1cmU8VD4gZ2V0IHNpbmdsZSB7CiAgICBfRnV0dXJlPFQ+IGZ1dHVyZSA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBUIHJlc3VsdDsKICAgIGJvb2wgZm91bmRSZXN1bHQgPSBmYWxzZTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb247CiAgICBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbigKICAgICAgICAoVCB2YWx1ZSkgewogICAgICAgICAgaWYgKGZvdW5kUmVzdWx0KSB7CiAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHNlY29uZCBlbGVtZW50IHdlIGdldC4KICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgICAgICBfY2FuY2VsQW5kRXJyb3JXaXRoUmVwbGFjZW1lbnQoc3Vic2NyaXB0aW9uLCBmdXR1cmUsIGUsIHMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGZvdW5kUmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgIHJlc3VsdCA9IHZhbHVlOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgaWYgKGZvdW5kUmVzdWx0KSB7CiAgICAgICAgICAgIGZ1dHVyZS5fY29tcGxldGUocmVzdWx0KTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrKGZ1dHVyZSwgZSwgcyk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBGaW5kcyB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGlzIHN0cmVhbSBtYXRjaGluZyBbdGVzdF0uCiAgICoKICAgKiBSZXR1cm5zIGEgZnV0dXJlIHRoYXQgaXMgY29tcGxldGVkIHdpdGggdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhpcyBzdHJlYW0KICAgKiB0aGF0IFt0ZXN0XSByZXR1cm5zIGB0cnVlYCBmb3IuCiAgICoKICAgKiBJZiBubyBzdWNoIGVsZW1lbnQgaXMgZm91bmQgYmVmb3JlIHRoaXMgc3RyZWFtIGlzIGRvbmUsIGFuZCBhCiAgICogW29yRWxzZV0gZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHRoZSByZXN1bHQgb2YgY2FsbGluZyBbb3JFbHNlXQogICAqIGJlY29tZXMgdGhlIHZhbHVlIG9mIHRoZSBmdXR1cmUuIElmIFtvckVsc2VdIHRocm93cywgdGhlIHJldHVybmVkCiAgICogZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQgZXJyb3IuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBlbWl0cyBhbiBlcnJvciBiZWZvcmUgdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IGVycm9yLCBhbmQgcHJvY2Vzc2luZyBzdG9wcy4KICAgKgogICAqIFN0b3BzIGxpc3RlbmluZyB0byB0aGlzIHN0cmVhbSBhZnRlciB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCBvciBlcnJvcgogICAqIGhhcyBiZWVuIHJlY2VpdmVkLgogICAqCiAgICogSW50ZXJuYWxseSB0aGUgbWV0aG9kIGNhbmNlbHMgaXRzIHN1YnNjcmlwdGlvbiBhZnRlciB0aGUgZmlyc3QgZWxlbWVudCB0aGF0CiAgICogbWF0Y2hlcyB0aGUgcHJlZGljYXRlLiBUaGlzIG1lYW5zIHRoYXQgc2luZ2xlLXN1YnNjcmlwdGlvbiAobm9uLWJyb2FkY2FzdCkKICAgKiBzdHJlYW1zIGFyZSBjbG9zZWQgYW5kIGNhbm5vdCBiZSByZXVzZWQgYWZ0ZXIgYSBjYWxsIHRvIHRoaXMgbWV0aG9kLgogICAqCiAgICogSWYgYW4gZXJyb3Igb2NjdXJzLCBvciBpZiB0aGlzIHN0cmVhbSBlbmRzIHdpdGhvdXQgZmluZGluZyBhIG1hdGNoIGFuZAogICAqIHdpdGggbm8gW29yRWxzZV0gZnVuY3Rpb24gcHJvdmlkZWQsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCBhbiBlcnJvci4KICAgKi8KICBGdXR1cmU8VD4gZmlyc3RXaGVyZShib29sIHRlc3QoVCBlbGVtZW50KSwge1Qgb3JFbHNlKCl9KSB7CiAgICBfRnV0dXJlPFQ+IGZ1dHVyZSA9IG5ldyBfRnV0dXJlKCk7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4oCiAgICAgICAgKFQgdmFsdWUpIHsKICAgICAgICAgIF9ydW5Vc2VyQ29kZSgoKSA9PiB0ZXN0KHZhbHVlKSwgKGJvb2wgaXNNYXRjaCkgewogICAgICAgICAgICBpZiAoaXNNYXRjaCkgewogICAgICAgICAgICAgIF9jYW5jZWxBbmRWYWx1ZShzdWJzY3JpcHRpb24sIGZ1dHVyZSwgdmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBfY2FuY2VsQW5kRXJyb3JDbG9zdXJlKHN1YnNjcmlwdGlvbiwgZnV0dXJlKSk7CiAgICAgICAgfSwKICAgICAgICBvbkVycm9yOiBmdXR1cmUuX2NvbXBsZXRlRXJyb3IsCiAgICAgICAgb25Eb25lOiAoKSB7CiAgICAgICAgICBpZiAob3JFbHNlICE9IG51bGwpIHsKICAgICAgICAgICAgX3J1blVzZXJDb2RlKG9yRWxzZSwgZnV0dXJlLl9jb21wbGV0ZSwgZnV0dXJlLl9jb21wbGV0ZUVycm9yKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrKGZ1dHVyZSwgZSwgcyk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBGaW5kcyB0aGUgbGFzdCBlbGVtZW50IGluIHRoaXMgc3RyZWFtIG1hdGNoaW5nIFt0ZXN0XS4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVtaXRzIGFuIGVycm9yLCB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQKICAgKiBlcnJvciwgYW5kIHByb2Nlc3Npbmcgc3RvcHMuCiAgICoKICAgKiBPdGhlcndpc2UgYXMgW2ZpcnN0V2hlcmVdLCBleGNlcHQgdGhhdCB0aGUgbGFzdCBtYXRjaGluZyBlbGVtZW50IGlzIGZvdW5kCiAgICogaW5zdGVhZCBvZiB0aGUgZmlyc3QuCiAgICogVGhhdCBtZWFucyB0aGF0IGEgbm9uLWVycm9yIHJlc3VsdCBjYW5ub3QgYmUgcHJvdmlkZWQgYmVmb3JlIHRoaXMgc3RyZWFtCiAgICogaXMgZG9uZS4KICAgKi8KICBGdXR1cmU8VD4gbGFzdFdoZXJlKGJvb2wgdGVzdChUIGVsZW1lbnQpLCB7VCBvckVsc2UoKX0pIHsKICAgIF9GdXR1cmU8VD4gZnV0dXJlID0gbmV3IF9GdXR1cmUoKTsKICAgIFQgcmVzdWx0OwogICAgYm9vbCBmb3VuZFJlc3VsdCA9IGZhbHNlOwogICAgU3RyZWFtU3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbjsKICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuKAogICAgICAgIChUIHZhbHVlKSB7CiAgICAgICAgICBfcnVuVXNlckNvZGUoKCkgPT4gdHJ1ZSA9PSB0ZXN0KHZhbHVlKSwgKGJvb2wgaXNNYXRjaCkgewogICAgICAgICAgICBpZiAoaXNNYXRjaCkgewogICAgICAgICAgICAgIGZvdW5kUmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIGZ1dHVyZSkpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgaWYgKGZvdW5kUmVzdWx0KSB7CiAgICAgICAgICAgIGZ1dHVyZS5fY29tcGxldGUocmVzdWx0KTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG9yRWxzZSAhPSBudWxsKSB7CiAgICAgICAgICAgIF9ydW5Vc2VyQ29kZShvckVsc2UsIGZ1dHVyZS5fY29tcGxldGUsIGZ1dHVyZS5fY29tcGxldGVFcnJvcik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgICAgICBfY29tcGxldGVXaXRoRXJyb3JDYWxsYmFjayhmdXR1cmUsIGUsIHMpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICByZXR1cm4gZnV0dXJlOwogIH0KCiAgLyoqCiAgICogRmluZHMgdGhlIHNpbmdsZSBlbGVtZW50IGluIHRoaXMgc3RyZWFtIG1hdGNoaW5nIFt0ZXN0XS4KICAgKgogICAqIExpa2UgW2xhc3RXaGVyZV0sIGV4Y2VwdCB0aGF0IGl0IGlzIGFuIGVycm9yIGlmIG1vcmUgdGhhbiBvbmUKICAgKiBtYXRjaGluZyBlbGVtZW50IG9jY3VycyBpbiB0aGlzIHN0cmVhbS4KICAgKi8KICBGdXR1cmU8VD4gc2luZ2xlV2hlcmUoYm9vbCB0ZXN0KFQgZWxlbWVudCksIHtUIG9yRWxzZSgpfSkgewogICAgX0Z1dHVyZTxUPiBmdXR1cmUgPSBuZXcgX0Z1dHVyZTxUPigpOwogICAgVCByZXN1bHQ7CiAgICBib29sIGZvdW5kUmVzdWx0ID0gZmFsc2U7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4oCiAgICAgICAgKFQgdmFsdWUpIHsKICAgICAgICAgIF9ydW5Vc2VyQ29kZSgoKSA9PiB0cnVlID09IHRlc3QodmFsdWUpLCAoYm9vbCBpc01hdGNoKSB7CiAgICAgICAgICAgIGlmIChpc01hdGNoKSB7CiAgICAgICAgICAgICAgaWYgKGZvdW5kUmVzdWx0KSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgICAgICAgIF9jYW5jZWxBbmRFcnJvcldpdGhSZXBsYWNlbWVudChzdWJzY3JpcHRpb24sIGZ1dHVyZSwgZSwgcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGZvdW5kUmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIGZ1dHVyZSkpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgaWYgKGZvdW5kUmVzdWx0KSB7CiAgICAgICAgICAgIGZ1dHVyZS5fY29tcGxldGUocmVzdWx0KTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKG9yRWxzZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgX3J1blVzZXJDb2RlKG9yRWxzZSwgZnV0dXJlLl9jb21wbGV0ZSwgZnV0dXJlLl9jb21wbGV0ZUVycm9yKTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrKGZ1dHVyZSwgZSwgcyk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgW2luZGV4XXRoIGRhdGEgZXZlbnQgb2YgdGhpcyBzdHJlYW0uCiAgICoKICAgKiBTdG9wcyBsaXN0ZW5pbmcgdG8gdGhpcyBzdHJlYW0gYWZ0ZXIgdGhlIFtpbmRleF10aCBkYXRhIGV2ZW50IGhhcyBiZWVuCiAgICogcmVjZWl2ZWQuCiAgICoKICAgKiBJbnRlcm5hbGx5IHRoZSBtZXRob2QgY2FuY2VscyBpdHMgc3Vic2NyaXB0aW9uIGFmdGVyIHRoZXNlIGVsZW1lbnRzLiBUaGlzCiAgICogbWVhbnMgdGhhdCBzaW5nbGUtc3Vic2NyaXB0aW9uIChub24tYnJvYWRjYXN0KSBzdHJlYW1zIGFyZSBjbG9zZWQgYW5kCiAgICogY2Fubm90IGJlIHJldXNlZCBhZnRlciBhIGNhbGwgdG8gdGhpcyBtZXRob2QuCiAgICoKICAgKiBJZiBhbiBlcnJvciBldmVudCBvY2N1cnMgYmVmb3JlIHRoZSB2YWx1ZSBpcyBmb3VuZCwgdGhlIGZ1dHVyZSBjb21wbGV0ZXMKICAgKiB3aXRoIHRoaXMgZXJyb3IuCiAgICoKICAgKiBJZiBhIGRvbmUgZXZlbnQgb2NjdXJzIGJlZm9yZSB0aGUgdmFsdWUgaXMgZm91bmQsIHRoZSBmdXR1cmUgY29tcGxldGVzCiAgICogd2l0aCBhIFtSYW5nZUVycm9yXS4KICAgKi8KICBGdXR1cmU8VD4gZWxlbWVudEF0KGludCBpbmRleCkgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoaW5kZXgsICJpbmRleCIpOwogICAgUmFuZ2VFcnJvci5jaGVja05vdE5lZ2F0aXZlKGluZGV4LCAiaW5kZXgiKTsKICAgIF9GdXR1cmU8VD4gZnV0dXJlID0gbmV3IF9GdXR1cmU8VD4oKTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb247CiAgICBpbnQgZWxlbWVudEluZGV4ID0gMDsKICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuKAogICAgICAgIChUIHZhbHVlKSB7CiAgICAgICAgICBpZiAoaW5kZXggPT0gZWxlbWVudEluZGV4KSB7CiAgICAgICAgICAgIF9jYW5jZWxBbmRWYWx1ZShzdWJzY3JpcHRpb24sIGZ1dHVyZSwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBlbGVtZW50SW5kZXggKz0gMTsKICAgICAgICB9LAogICAgICAgIG9uRXJyb3I6IGZ1dHVyZS5fY29tcGxldGVFcnJvciwKICAgICAgICBvbkRvbmU6ICgpIHsKICAgICAgICAgIGZ1dHVyZS5fY29tcGxldGVFcnJvcigKICAgICAgICAgICAgICBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4IiwgbnVsbCwgZWxlbWVudEluZGV4KSk7CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IHN0cmVhbSB3aXRoIHRoZSBzYW1lIGV2ZW50cyBhcyB0aGlzIHN0cmVhbS4KICAgKgogICAqIFdoZW5ldmVyIG1vcmUgdGhhbiBbdGltZUxpbWl0XSBwYXNzZXMgYmV0d2VlbiB0d28gZXZlbnRzIGZyb20gdGhpcyBzdHJlYW0sCiAgICogdGhlIFtvblRpbWVvdXRdIGZ1bmN0aW9uIGlzIGNhbGxlZCwgd2hpY2ggY2FuIGVtaXQgZnVydGhlciBldmVudHMgb24KICAgKiB0aGUgcmV0dXJuZWQgc3RyZWFtLgogICAqCiAgICogVGhlIGNvdW50ZG93biBkb2Vzbid0IHN0YXJ0IHVudGlsIHRoZSByZXR1cm5lZCBzdHJlYW0gaXMgbGlzdGVuZWQgdG8uCiAgICogVGhlIGNvdW50ZG93biBpcyByZXNldCBldmVyeSB0aW1lIGFuIGV2ZW50IGlzIGZvcndhcmRlZCBmcm9tIHRoaXMgc3RyZWFtLAogICAqIG9yIHdoZW4gdGhpcyBzdHJlYW0gaXMgcGF1c2VkIGFuZCByZXN1bWVkLgogICAqCiAgICogVGhlIFtvblRpbWVvdXRdIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG9uZSBhcmd1bWVudDogYW4KICAgKiBbRXZlbnRTaW5rXSB0aGF0IGFsbG93cyBwdXR0aW5nIGV2ZW50cyBpbnRvIHRoZSByZXR1cm5lZCBzdHJlYW0uCiAgICogVGhpcyBgRXZlbnRTaW5rYCBpcyBvbmx5IHZhbGlkIGR1cmluZyB0aGUgY2FsbCB0byBbb25UaW1lb3V0XS4KICAgKiBDYWxsaW5nIFtFdmVudFNpbmsuY2xvc2VdIG9uIHRoZSBzaW5rIHBhc3NlZCB0byBbb25UaW1lb3V0XSBjbG9zZXMgdGhlCiAgICogcmV0dXJuZWQgc3RyZWFtLCBhbmQgbm8gZnVydGhlciBldmVudHMgYXJlIHByb2Nlc3NlZC4KICAgKgogICAqIElmIFtvblRpbWVvdXRdIGlzIG9taXR0ZWQsIGEgdGltZW91dCB3aWxsIGp1c3QgcHV0IGEgW1RpbWVvdXRFeGNlcHRpb25dCiAgICogaW50byB0aGUgZXJyb3IgY2hhbm5lbCBvZiB0aGUgcmV0dXJuZWQgc3RyZWFtLgogICAqIElmIHRoZSBjYWxsIHRvIFtvblRpbWVvdXRdIHRocm93cywgdGhlIGVycm9yIGlzIGVtaXR0ZWQgb24gdGhlIHJldHVybmVkCiAgICogc3RyZWFtLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBhIGJyb2FkY2FzdCBzdHJlYW0gaWYgdGhpcyBzdHJlYW0gaXMuCiAgICogSWYgYSBicm9hZGNhc3Qgc3RyZWFtIGlzIGxpc3RlbmVkIHRvIG1vcmUgdGhhbiBvbmNlLCBlYWNoIHN1YnNjcmlwdGlvbgogICAqIHdpbGwgaGF2ZSBpdHMgaW5kaXZpZHVhbGx5IHRpbWVyIHRoYXQgc3RhcnRzIGNvdW50aW5nIG9uIGxpc3RlbiwKICAgKiBhbmQgdGhlIHN1YnNjcmlwdGlvbnMnIHRpbWVycyBjYW4gYmUgcGF1c2VkIGluZGl2aWR1YWxseS4KICAgKi8KICBTdHJlYW08VD4gdGltZW91dChEdXJhdGlvbiB0aW1lTGltaXQsIHt2b2lkIG9uVGltZW91dChFdmVudFNpbms8VD4gc2luayl9KSB7CiAgICBfU3RyZWFtQ29udHJvbGxlckJhc2U8VD4gY29udHJvbGxlcjsKICAgIC8vIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSBzZXQgb24gbGlzdGVuLgogICAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbjsKICAgIFRpbWVyIHRpbWVyOwogICAgWm9uZSB6b25lOwogICAgX1RpbWVyQ2FsbGJhY2sgdGltZW91dDsKCiAgICB2b2lkIG9uRGF0YShUIGV2ZW50KSB7CiAgICAgIHRpbWVyLmNhbmNlbCgpOwogICAgICB0aW1lciA9IHpvbmUuY3JlYXRlVGltZXIodGltZUxpbWl0LCB0aW1lb3V0KTsKICAgICAgLy8gSXQgbWlnaHQgY2xvc2UgdGhlIHN0cmVhbSBhbmQgY2FuY2VsIHRpbWVyLCBzbyBjcmVhdGUgcmVjdXJpbmcgVGltZXIKICAgICAgLy8gYmVmb3JlIGNhbGxpbmcgaW50byBhZGQoKTsKICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8zNzU2NQogICAgICBjb250cm9sbGVyLmFkZChldmVudCk7CiAgICB9CgogICAgdm9pZCBvbkVycm9yKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgICAgdGltZXIuY2FuY2VsKCk7CiAgICAgIGFzc2VydChjb250cm9sbGVyIGlzIF9TdHJlYW1Db250cm9sbGVyIHx8CiAgICAgICAgICBjb250cm9sbGVyIGlzIF9Ccm9hZGNhc3RTdHJlYW1Db250cm9sbGVyKTsKICAgICAgY29udHJvbGxlci5fYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOyAvLyBBdm9pZCBab25lIGVycm9yIHJlcGxhY2VtZW50LgogICAgICB0aW1lciA9IHpvbmUuY3JlYXRlVGltZXIodGltZUxpbWl0LCB0aW1lb3V0KTsKICAgIH0KCiAgICB2b2lkIG9uRG9uZSgpIHsKICAgICAgdGltZXIuY2FuY2VsKCk7CiAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTsKICAgIH0KCiAgICB2b2lkIG9uTGlzdGVuKCkgewogICAgICAvLyBUaGlzIGlzIHRoZSBvbkxpc3RlbiBjYWxsYmFjayBmb3Igb2YgY29udHJvbGxlci4KICAgICAgLy8gSXQgcnVucyBpbiB0aGUgc2FtZSB6b25lIHRoYXQgdGhlIHN1YnNjcmlwdGlvbiB3YXMgY3JlYXRlZCBpbi4KICAgICAgLy8gVXNlIHRoYXQgem9uZSBmb3IgY3JlYXRpbmcgdGltZXJzIGFuZCBydW5uaW5nIHRoZSBvblRpbWVvdXQKICAgICAgLy8gY2FsbGJhY2suCiAgICAgIHpvbmUgPSBab25lLmN1cnJlbnQ7CiAgICAgIGlmIChvblRpbWVvdXQgPT0gbnVsbCkgewogICAgICAgIHRpbWVvdXQgPSAoKSB7CiAgICAgICAgICBjb250cm9sbGVyLmFkZEVycm9yKAogICAgICAgICAgICAgIG5ldyBUaW1lb3V0RXhjZXB0aW9uKCJObyBzdHJlYW0gZXZlbnQiLCB0aW1lTGltaXQpLCBudWxsKTsKICAgICAgICB9OwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB0aGUgcmV0dXJuIHR5cGUgc2hvdWxkIGJlICd2b2lkJywgYW5kIHRoZSB0eXBlCiAgICAgICAgLy8gc2hvdWxkIGJlIGluZmVycmVkLgogICAgICAgIHZhciByZWdpc3RlcmVkT25UaW1lb3V0ID0KICAgICAgICAgICAgem9uZS5yZWdpc3RlclVuYXJ5Q2FsbGJhY2s8ZHluYW1pYywgRXZlbnRTaW5rPFQ+PihvblRpbWVvdXQpOwogICAgICAgIHZhciB3cmFwcGVyID0gbmV3IF9Db250cm9sbGVyRXZlbnRTaW5rV3JhcHBlcjxUPihudWxsKTsKICAgICAgICB0aW1lb3V0ID0gKCkgewogICAgICAgICAgd3JhcHBlci5fc2luayA9IGNvbnRyb2xsZXI7IC8vIE9ubHkgdmFsaWQgZHVyaW5nIGNhbGwuCiAgICAgICAgICB6b25lLnJ1blVuYXJ5R3VhcmRlZChyZWdpc3RlcmVkT25UaW1lb3V0LCB3cmFwcGVyKTsKICAgICAgICAgIHdyYXBwZXIuX3NpbmsgPSBudWxsOwogICAgICAgIH07CiAgICAgIH0KCiAgICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuKG9uRGF0YSwgb25FcnJvcjogb25FcnJvciwgb25Eb25lOiBvbkRvbmUpOwogICAgICB0aW1lciA9IHpvbmUuY3JlYXRlVGltZXIodGltZUxpbWl0LCB0aW1lb3V0KTsKICAgIH0KCiAgICBGdXR1cmUgb25DYW5jZWwoKSB7CiAgICAgIHRpbWVyLmNhbmNlbCgpOwogICAgICBGdXR1cmUgcmVzdWx0ID0gc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogICAgICBzdWJzY3JpcHRpb24gPSBudWxsOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIGNvbnRyb2xsZXIgPSBpc0Jyb2FkY2FzdAogICAgICAgID8gbmV3IF9TeW5jQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcjxUPihvbkxpc3Rlbiwgb25DYW5jZWwpCiAgICAgICAgOiBuZXcgX1N5bmNTdHJlYW1Db250cm9sbGVyPFQ+KG9uTGlzdGVuLCAoKSB7CiAgICAgICAgICAgIC8vIERvbid0IG51bGwgdGhlIHRpbWVyLCBvbkNhbmNlbCBtYXkgY2FsbCBjYW5jZWwgYWdhaW4uCiAgICAgICAgICAgIHRpbWVyLmNhbmNlbCgpOwogICAgICAgICAgICBzdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgICAgICAgIH0sICgpIHsKICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogICAgICAgICAgICB0aW1lciA9IHpvbmUuY3JlYXRlVGltZXIodGltZUxpbWl0LCB0aW1lb3V0KTsKICAgICAgICAgIH0sIG9uQ2FuY2VsKTsKICAgIHJldHVybiBjb250cm9sbGVyLnN0cmVhbTsKICB9Cn0KCi8qKgogKiBBIHN1YnNjcmlwdGlvbiBvbiBldmVudHMgZnJvbSBhIFtTdHJlYW1dLgogKgogKiBXaGVuIHlvdSBsaXN0ZW4gb24gYSBbU3RyZWFtXSB1c2luZyBbU3RyZWFtLmxpc3Rlbl0sCiAqIGEgW1N0cmVhbVN1YnNjcmlwdGlvbl0gb2JqZWN0IGlzIHJldHVybmVkLgogKgogKiBUaGUgc3Vic2NyaXB0aW9uIHByb3ZpZGVzIGV2ZW50cyB0byB0aGUgbGlzdGVuZXIsCiAqIGFuZCBob2xkcyB0aGUgY2FsbGJhY2tzIHVzZWQgdG8gaGFuZGxlIHRoZSBldmVudHMuCiAqIFRoZSBzdWJzY3JpcHRpb24gY2FuIGFsc28gYmUgdXNlZCB0byB1bnN1YnNjcmliZSBmcm9tIHRoZSBldmVudHMsCiAqIG9yIHRvIHRlbXBvcmFyaWx5IHBhdXNlIHRoZSBldmVudHMgZnJvbSB0aGUgc3RyZWFtLgogKi8KYWJzdHJhY3QgY2xhc3MgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHsKICAvKioKICAgKiBDYW5jZWxzIHRoaXMgc3Vic2NyaXB0aW9uLgogICAqCiAgICogQWZ0ZXIgdGhpcyBjYWxsLCB0aGUgc3Vic2NyaXB0aW9uIG5vIGxvbmdlciByZWNlaXZlcyBldmVudHMuCiAgICoKICAgKiBUaGUgc3RyZWFtIG1heSBuZWVkIHRvIHNodXQgZG93biB0aGUgc291cmNlIG9mIGV2ZW50cyBhbmQgY2xlYW4gdXAgYWZ0ZXIKICAgKiB0aGUgc3Vic2NyaXB0aW9uIGlzIGNhbmNlbGVkLgogICAqCiAgICogUmV0dXJucyBhIGZ1dHVyZSB0aGF0IGlzIGNvbXBsZXRlZCBvbmNlIHRoZSBzdHJlYW0gaGFzIGZpbmlzaGVkCiAgICogaXRzIGNsZWFudXAuCiAgICoKICAgKiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBtYXkgYWxzbyByZXR1cm4gYG51bGxgIGlmIG5vIGNsZWFudXAgd2FzIG5lY2Vzc2FyeS4KICAgKiBSZXR1cm5pbmcgYG51bGxgIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBiZSBhdm9pZGVkLgogICAqCiAgICogVHlwaWNhbGx5LCBmdXR1cmVzIGFyZSByZXR1cm5lZCB3aGVuIHRoZSBzdHJlYW0gbmVlZHMgdG8gcmVsZWFzZSByZXNvdXJjZXMuCiAgICogRm9yIGV4YW1wbGUsIGEgc3RyZWFtIG1pZ2h0IG5lZWQgdG8gY2xvc2UgYW4gb3BlbiBmaWxlIChhcyBhbiBhc3luY2hyb25vdXMKICAgKiBvcGVyYXRpb24pLiBJZiB0aGUgbGlzdGVuZXIgd2FudHMgdG8gZGVsZXRlIHRoZSBmaWxlIGFmdGVyIGhhdmluZwogICAqIGNhbmNlbGVkIHRoZSBzdWJzY3JpcHRpb24sIGl0IG11c3Qgd2FpdCBmb3IgdGhlIGNsZWFudXAgZnV0dXJlIHRvIGNvbXBsZXRlLgogICAqCiAgICogQSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzIHdpdGggYSBgbnVsbGAgdmFsdWUuCiAgICogSWYgdGhlIGNsZWFudXAgdGhyb3dzLCB3aGljaCBpdCByZWFsbHkgc2hvdWxkbid0LCB0aGUgcmV0dXJuZWQgZnV0dXJlCiAgICogY29tcGxldGVzIHdpdGggdGhhdCBlcnJvci4KICAgKi8KICBGdXR1cmUgY2FuY2VsKCk7CgogIC8qKgogICAqIFJlcGxhY2VzIHRoZSBkYXRhIGV2ZW50IGhhbmRsZXIgb2YgdGhpcyBzdWJzY3JpcHRpb24uCiAgICoKICAgKiBUaGUgW2hhbmRsZURhdGFdIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgZWFjaCBlbGVtZW50IG9mIHRoZSBzdHJlYW0KICAgKiBhZnRlciB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KICAgKiBJZiBbaGFuZGxlRGF0YV0gaXMgYG51bGxgLCBmdXJ0aGVyIGVsZW1lbnRzIGFyZSBpZ25vcmVkLgogICAqCiAgICogVGhpcyBtZXRob2QgcmVwbGFjZXMgdGhlIGN1cnJlbnQgaGFuZGxlciBzZXQgYnkgdGhlIGludm9jYXRpb24gb2YKICAgKiBbU3RyZWFtLmxpc3Rlbl0gb3IgYnkgYSBwcmV2aW91cyBjYWxsIHRvIFtvbkRhdGFdLgogICAqLwogIHZvaWQgb25EYXRhKHZvaWQgaGFuZGxlRGF0YShUIGRhdGEpKTsKCiAgLyoqCiAgICogUmVwbGFjZXMgdGhlIGVycm9yIGV2ZW50IGhhbmRsZXIgb2YgdGhpcyBzdWJzY3JpcHRpb24uCiAgICoKICAgKiBUaGUgW2hhbmRsZUVycm9yXSBmdW5jdGlvbiBtdXN0IGJlIGFibGUgdG8gYmUgY2FsbGVkIHdpdGggZWl0aGVyCiAgICogb25lIHBvc2l0aW9uYWwgYXJndW1lbnQsIG9yIHdpdGggdHdvIHBvc2l0aW9uYWwgYXJndW1lbnRzCiAgICogd2hlcmUgdGhlIHNlY29uZHMgaXMgYWx3YXlzIGEgW1N0YWNrVHJhY2VdLgogICAqCiAgICogVGhlIFtoYW5kbGVFcnJvcl0gYXJndW1lbnQgbWF5IGJlIGBudWxsYCwgaW4gd2hpY2ggY2FzZSBmdXJ0aGVyCiAgICogZXJyb3IgZXZlbnRzIGFyZSBjb25zaWRlcmVkIHVuaGFuZGxlZCwgYW5kIHdpbGwgYmUgcmVwb3J0ZWQgdG8KICAgKiBbWm9uZS5oYW5kbGVVbmNhdWdodEVycm9yXS4KICAgKgogICAqIFRoZSBwcm92aWRlZCBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGFsbCBlcnJvciBldmVudHMgZnJvbSB0aGUKICAgKiBzdHJlYW0gc3Vic2NyaXB0aW9uLgogICAqCiAgICogVGhpcyBtZXRob2QgcmVwbGFjZXMgdGhlIGN1cnJlbnQgaGFuZGxlciBzZXQgYnkgdGhlIGludm9jYXRpb24gb2YKICAgKiBbU3RyZWFtLmxpc3Rlbl0sIGJ5IGNhbGxpbmcgW2FzRnV0dXJlXSwgb3IgYnkgYSBwcmV2aW91cyBjYWxsIHRvIFtvbkVycm9yXS4KICAgKi8KICB2b2lkIG9uRXJyb3IoRnVuY3Rpb24gaGFuZGxlRXJyb3IpOwoKICAvKioKICAgKiBSZXBsYWNlcyB0aGUgZG9uZSBldmVudCBoYW5kbGVyIG9mIHRoaXMgc3Vic2NyaXB0aW9uLgogICAqCiAgICogVGhlIFtoYW5kbGVEb25lXSBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgc3RyZWFtIGNsb3Nlcy4KICAgKiBUaGUgdmFsdWUgbWF5IGJlIGBudWxsYCwgaW4gd2hpY2ggY2FzZSBubyBmdW5jdGlvbiBpcyBjYWxsZWQuCiAgICoKICAgKiBUaGlzIG1ldGhvZCByZXBsYWNlcyB0aGUgY3VycmVudCBoYW5kbGVyIHNldCBieSB0aGUgaW52b2NhdGlvbiBvZgogICAqIFtTdHJlYW0ubGlzdGVuXSwgYnkgY2FsbGluZyBbYXNGdXR1cmVdLCBvciBieSBhIHByZXZpb3VzIGNhbGwgdG8gW29uRG9uZV0uCiAgICovCiAgdm9pZCBvbkRvbmUodm9pZCBoYW5kbGVEb25lKCkpOwoKICAvKioKICAgKiBSZXF1ZXN0IHRoYXQgdGhlIHN0cmVhbSBwYXVzZXMgZXZlbnRzIHVudGlsIGZ1cnRoZXIgbm90aWNlLgogICAqCiAgICogV2hpbGUgcGF1c2VkLCB0aGUgc3Vic2NyaXB0aW9uIHdpbGwgbm90IGZpcmUgYW55IGV2ZW50cy4KICAgKiBJZiBpdCByZWNlaXZlcyBldmVudHMgZnJvbSBpdHMgc291cmNlLCB0aGV5IHdpbGwgYmUgYnVmZmVyZWQgdW50aWwKICAgKiB0aGUgc3Vic2NyaXB0aW9uIGlzIHJlc3VtZWQuCiAgICogRm9yIG5vbi1icm9hZGNhc3Qgc3RyZWFtcywgdGhlIHVuZGVybHlpbmcgc291cmNlIGlzIHVzdWFsbHkgaW5mb3JtZWQKICAgKiBhYm91dCB0aGUgcGF1c2UsCiAgICogc28gaXQgY2FuIHN0b3AgZ2VuZXJhdGluZyBldmVudHMgdW50aWwgdGhlIHN1YnNjcmlwdGlvbiBpcyByZXN1bWVkLgogICAqCiAgICogVG8gYXZvaWQgYnVmZmVyaW5nIGV2ZW50cyBvbiBhIGJyb2FkY2FzdCBzdHJlYW0sIGl0IGlzIGJldHRlciB0bwogICAqIGNhbmNlbCB0aGlzIHN1YnNjcmlwdGlvbiwgYW5kIHN0YXJ0IHRvIGxpc3RlbiBhZ2FpbiB3aGVuIGV2ZW50cwogICAqIGFyZSBuZWVkZWQsIGlmIHRoZSBpbnRlcm1lZGlhdGUgZXZlbnRzIGFyZSBub3QgaW1wb3J0YW50LgogICAqCiAgICogSWYgW3Jlc3VtZVNpZ25hbF0gaXMgcHJvdmlkZWQsIHRoZSBzdHJlYW0gc3Vic2NyaXB0aW9uIHdpbGwgdW5kbyB0aGUgcGF1c2UKICAgKiB3aGVuIHRoZSBmdXR1cmUgY29tcGxldGVzLCBhcyBpZiBieSBhIGNhbGwgdG8gW3Jlc3VtZV0uCiAgICogSWYgdGhlIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvciwKICAgKiB0aGUgc3RyZWFtIHdpbGwgc3RpbGwgcmVzdW1lLCBidXQgdGhlIGVycm9yIHdpbGwgYmUgY29uc2lkZXJlZCB1bmhhbmRsZWQKICAgKiBhbmQgaXMgcGFzc2VkIHRvIFtab25lLmhhbmRsZVVuY2F1Z2h0RXJyb3JdLgogICAqCiAgICogQSBjYWxsIHRvIFtyZXN1bWVdIHdpbGwgYWxzbyB1bmRvIGEgcGF1c2UuCiAgICoKICAgKiBJZiB0aGUgc3Vic2NyaXB0aW9uIGlzIHBhdXNlZCBtb3JlIHRoYW4gb25jZSwgYW4gZXF1YWwgbnVtYmVyCiAgICogb2YgcmVzdW1lcyBtdXN0IGJlIHBlcmZvcm1lZCB0byByZXN1bWUgdGhlIHN0cmVhbS4KICAgKiBDYWxscyB0byBbcmVzdW1lXSBhbmQgdGhlIGNvbXBsZXRpb24gb2YgYSBbcmVzdW1lU2lnbmFsXSBhcmUKICAgKiBpbnRlcmNoYW5nZWFibGUgLSB0aGUgW3BhdXNlXSB3aGljaCB3YXMgcGFzc2VkIGEgW3Jlc3VtZVNpZ25hbF0gbWF5IGJlCiAgICogZW5kZWQgYnkgYSBjYWxsIHRvIFtyZXN1bWVdLCBhbmQgY29tcGxldGluZyB0aGUgW3Jlc3VtZVNpZ25hbF0gbWF5IGVuZCBhCiAgICogZGlmZmVyZW50IFtwYXVzZV0uCiAgICoKICAgKiBJdCBpcyBzYWZlIHRvIFtyZXN1bWVdIG9yIGNvbXBsZXRlIGEgW3Jlc3VtZVNpZ25hbF0gZXZlbiB3aGVuIHRoZQogICAqIHN1YnNjcmlwdGlvbiBpcyBub3QgcGF1c2VkLCBhbmQgdGhlIHJlc3VtZSB3aWxsIGhhdmUgbm8gZWZmZWN0LgogICAqCiAgICogQ3VycmVudGx5IERPTSBzdHJlYW1zIHNpbGVudGx5IGRyb3AgZXZlbnRzIHdoZW4gdGhlIHN0cmVhbSBpcyBwYXVzZWQuIFRoaXMKICAgKiBpcyBhIGJ1ZyBhbmQgd2lsbCBiZSBmaXhlZC4KICAgKi8KICB2b2lkIHBhdXNlKFtGdXR1cmUgcmVzdW1lU2lnbmFsXSk7CgogIC8qKgogICAqIFJlc3VtZSBhZnRlciBhIHBhdXNlLgogICAqCiAgICogVGhpcyB1bmRvZXMgb25lIHByZXZpb3VzIGNhbGwgdG8gW3BhdXNlXS4KICAgKiBXaGVuIGFsbCBwcmV2aW91c2x5IGNhbGxzIHRvIFtwYXVzZV0gaGF2ZSBiZWVuIG1hdGNoZWQgYnkgYSBjYWxscyB0bwogICAqIFtyZXN1bWVdLCBwb3NzaWJseSB0aHJvdWdoIGEgYHJlc3VtZVNpZ25hbGAgcGFzc2VkIHRvIFtwYXVzZV0sCiAgICogdGhlIHN0cmVhbSBzdWJzY3JpcHRpb24gbWF5IGVtaXQgZXZlbnRzIGFnYWluLgogICAqCiAgICogSXQgaXMgc2FmZSB0byBbcmVzdW1lXSBldmVuIHdoZW4gdGhlIHN1YnNjcmlwdGlvbiBpcyBub3QgcGF1c2VkLCBhbmQgdGhlCiAgICogcmVzdW1lIHdpbGwgaGF2ZSBubyBlZmZlY3QuCiAgICovCiAgdm9pZCByZXN1bWUoKTsKCiAgLyoqCiAgICogV2hldGhlciB0aGUgW1N0cmVhbVN1YnNjcmlwdGlvbl0gaXMgY3VycmVudGx5IHBhdXNlZC4KICAgKgogICAqIElmIHRoZXJlIGhhdmUgYmVlbiBtb3JlIGNhbGxzIHRvIFtwYXVzZV0gdGhhbiB0byBbcmVzdW1lXSBvbiB0aGlzCiAgICogc3RyZWFtIHN1YnNjcmlwdGlvbiwgdGhlIHN1YnNjcmlwdGlvbiBpcyBwYXVzZWQsIGFuZCB0aGlzIGdldHRlcgogICAqIHJldHVybnMgYHRydWVgLgogICAqCiAgICogUmV0dXJucyBgZmFsc2VgIGlmIHRoZSBzdHJlYW0gY2FuIGN1cnJlbnRseSBlbWl0IGV2ZW50cywgb3IgaWYKICAgKiB0aGUgc3Vic2NyaXB0aW9uIGhhcyBjb21wbGV0ZWQgb3IgYmVlbiBjYW5jZWxsZWQuCiAgICovCiAgYm9vbCBnZXQgaXNQYXVzZWQ7CgogIC8qKgogICAqIFJldHVybnMgYSBmdXR1cmUgdGhhdCBoYW5kbGVzIHRoZSBbb25Eb25lXSBhbmQgW29uRXJyb3JdIGNhbGxiYWNrcy4KICAgKgogICAqIFRoaXMgbWV0aG9kICpvdmVyd3JpdGVzKiB0aGUgZXhpc3RpbmcgW29uRG9uZV0gYW5kIFtvbkVycm9yXSBjYWxsYmFja3MKICAgKiB3aXRoIG5ldyBvbmVzIHRoYXQgY29tcGxldGUgdGhlIHJldHVybmVkIGZ1dHVyZS4KICAgKgogICAqIEluIGNhc2Ugb2YgYW4gZXJyb3IgdGhlIHN1YnNjcmlwdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgY2FuY2VsIChldmVuCiAgICogd2hlbiBpdCB3YXMgbGlzdGVuaW5nIHdpdGggYGNhbmNlbE9uRXJyb3JgIHNldCB0byBgZmFsc2VgKS4KICAgKgogICAqIEluIGNhc2Ugb2YgYSBgZG9uZWAgZXZlbnQgdGhlIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCB0aGUgZ2l2ZW4KICAgKiBbZnV0dXJlVmFsdWVdLgogICAqLwogIEZ1dHVyZTxFPiBhc0Z1dHVyZTxFPihbRSBmdXR1cmVWYWx1ZV0pOwp9CgovKioKICogQSBbU2lua10gdGhhdCBzdXBwb3J0cyBhZGRpbmcgZXJyb3JzLgogKgogKiBUaGlzIG1ha2VzIGl0IHN1aXRhYmxlIGZvciBjYXB0dXJpbmcgdGhlIHJlc3VsdHMgb2YgYXN5bmNocm9ub3VzCiAqIGNvbXB1dGF0aW9ucywgd2hpY2ggY2FuIGNvbXBsZXRlIHdpdGggYSB2YWx1ZSBvciBhbiBlcnJvci4KICoKICogVGhlIFtFdmVudFNpbmtdIGhhcyBiZWVuIGRlc2lnbmVkIHRvIGhhbmRsZSBhc3luY2hyb25vdXMgZXZlbnRzIGZyb20KICogW1N0cmVhbV1zLiBTZWUsIGZvciBleGFtcGxlLCBbU3RyZWFtLmV2ZW50VHJhbnNmb3JtZWRdIHdoaWNoIHVzZXMKICogYEV2ZW50U2lua2BzIHRvIHRyYW5zZm9ybSBldmVudHMuCiAqLwphYnN0cmFjdCBjbGFzcyBFdmVudFNpbms8VD4gaW1wbGVtZW50cyBTaW5rPFQ+IHsKICAvKioKICAgKiBBZGRzIGEgZGF0YSBbZXZlbnRdIHRvIHRoZSBzaW5rLgogICAqCiAgICogTXVzdCBub3QgYmUgY2FsbGVkIG9uIGEgY2xvc2VkIHNpbmsuCiAgICovCiAgdm9pZCBhZGQoVCBldmVudCk7CgogIC8qKgogICAqIEFkZHMgYW4gW2Vycm9yXSB0byB0aGUgc2luay4KICAgKgogICAqIE11c3Qgbm90IGJlIGNhbGxlZCBvbiBhIGNsb3NlZCBzaW5rLgogICAqLwogIHZvaWQgYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSk7CgogIC8qKgogICAqIENsb3NlcyB0aGUgc2luay4KICAgKgogICAqIENhbGxpbmcgdGhpcyBtZXRob2QgbW9yZSB0aGFuIG9uY2UgaXMgYWxsb3dlZCwgYnV0IGRvZXMgbm90aGluZy4KICAgKgogICAqIE5laXRoZXIgW2FkZF0gbm9yIFthZGRFcnJvcl0gbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhpcyBtZXRob2QuCiAgICovCiAgdm9pZCBjbG9zZSgpOwp9CgovKiogW1N0cmVhbV0gd3JhcHBlciB0aGF0IG9ubHkgZXhwb3NlcyB0aGUgW1N0cmVhbV0gaW50ZXJmYWNlLiAqLwpjbGFzcyBTdHJlYW1WaWV3PFQ+IGV4dGVuZHMgU3RyZWFtPFQ+IHsKICBmaW5hbCBTdHJlYW08VD4gX3N0cmVhbTsKCiAgY29uc3QgU3RyZWFtVmlldyhTdHJlYW08VD4gc3RyZWFtKQogICAgICA6IF9zdHJlYW0gPSBzdHJlYW0sCiAgICAgICAgc3VwZXIuX2ludGVybmFsKCk7CgogIGJvb2wgZ2V0IGlzQnJvYWRjYXN0ID0+IF9zdHJlYW0uaXNCcm9hZGNhc3Q7CgogIFN0cmVhbTxUPiBhc0Jyb2FkY2FzdFN0cmVhbSgKICAgICAgICAgIHt2b2lkIG9uTGlzdGVuKFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pLAogICAgICAgICAgdm9pZCBvbkNhbmNlbChTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKX0pID0+CiAgICAgIF9zdHJlYW0uYXNCcm9hZGNhc3RTdHJlYW0ob25MaXN0ZW46IG9uTGlzdGVuLCBvbkNhbmNlbDogb25DYW5jZWwpOwoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gbGlzdGVuKHZvaWQgb25EYXRhKFQgdmFsdWUpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgcmV0dXJuIF9zdHJlYW0ubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQp9CgovKioKICogQWJzdHJhY3QgaW50ZXJmYWNlIGZvciBhICJzaW5rIiBhY2NlcHRpbmcgbXVsdGlwbGUgZW50aXJlIHN0cmVhbXMuCiAqCiAqIEEgY29uc3VtZXIgY2FuIGFjY2VwdCBhIG51bWJlciBvZiBjb25zZWN1dGl2ZSBzdHJlYW1zIHVzaW5nIFthZGRTdHJlYW1dLAogKiBhbmQgd2hlbiBubyBmdXJ0aGVyIGRhdGEgbmVlZCB0byBiZSBhZGRlZCwgdGhlIFtjbG9zZV0gbWV0aG9kIHRlbGxzIHRoZQogKiBjb25zdW1lciB0byBjb21wbGV0ZSBpdHMgd29yayBhbmQgc2h1dCBkb3duLgogKgogKiBUaGUgW1N0cmVhbS5waXBlXSBhY2NlcHRzIGEgYFN0cmVhbUNvbnN1bWVyYCBhbmQgd2lsbCBwYXNzIHRoZSBzdHJlYW0KICogdG8gdGhlIGNvbnN1bWVyJ3MgW2FkZFN0cmVhbV0gbWV0aG9kLiBXaGVuIHRoYXQgY29tcGxldGVzLCBpdCB3aWxsCiAqIGNhbGwgW2Nsb3NlXSBhbmQgdGhlbiBjb21wbGV0ZSBpdHMgb3duIHJldHVybmVkIGZ1dHVyZS4KICovCmFic3RyYWN0IGNsYXNzIFN0cmVhbUNvbnN1bWVyPFM+IHsKICAvKioKICAgKiBDb25zdW1lcyB0aGUgZWxlbWVudHMgb2YgW3N0cmVhbV0uCiAgICoKICAgKiBMaXN0ZW5zIG9uIFtzdHJlYW1dIGFuZCBkb2VzIHNvbWV0aGluZyBmb3IgZWFjaCBldmVudC4KICAgKgogICAqIFJldHVybnMgYSBmdXR1cmUgd2hpY2ggaXMgY29tcGxldGVkIHdoZW4gdGhlIHN0cmVhbSBpcyBkb25lIGJlaW5nIGFkZGVkLAogICAqIGFuZCB0aGUgY29uc3VtZXIgaXMgcmVhZHkgdG8gYWNjZXB0IGEgbmV3IHN0cmVhbS4KICAgKiBObyBmdXJ0aGVyIGNhbGxzIHRvIFthZGRTdHJlYW1dIG9yIFtjbG9zZV0gc2hvdWxkIGhhcHBlbiBiZWZvcmUgdGhlCiAgICogcmV0dXJuZWQgZnV0dXJlIGhhcyBjb21wbGV0ZWQuCiAgICoKICAgKiBUaGUgY29uc3VtZXIgbWF5IHN0b3AgbGlzdGVuaW5nIHRvIHRoZSBzdHJlYW0gYWZ0ZXIgYW4gZXJyb3IsCiAgICogaXQgbWF5IGNvbnN1bWUgYWxsIHRoZSBlcnJvcnMgYW5kIG9ubHkgc3RvcCBhdCBhIGRvbmUgZXZlbnQsCiAgICogb3IgaXQgbWF5IGJlIGNhbmNlbGVkIGVhcmx5IGlmIHRoZSByZWNlaXZlciBkb24ndCB3YW50IGFueSBmdXJ0aGVyIGV2ZW50cy4KICAgKgogICAqIElmIHRoZSBjb25zdW1lciBzdG9wcyBsaXN0ZW5pbmcgYmVjYXVzZSBvZiBzb21lIGVycm9yIHByZXZlbnRpbmcgaXQKICAgKiBmcm9tIGNvbnRpbnVpbmcsIGl0IG1heSByZXBvcnQgdGhpcyBlcnJvciBpbiB0aGUgcmV0dXJuZWQgZnV0dXJlLAogICAqIG90aGVyd2lzZSBpdCB3aWxsIGp1c3QgY29tcGxldGUgdGhlIGZ1dHVyZSB3aXRoIGBudWxsYC4KICAgKi8KICBGdXR1cmUgYWRkU3RyZWFtKFN0cmVhbTxTPiBzdHJlYW0pOwoKICAvKioKICAgKiBUZWxscyB0aGUgY29uc3VtZXIgdGhhdCBubyBmdXJ0aGVyIHN0cmVhbXMgd2lsbCBiZSBhZGRlZC4KICAgKgogICAqIFRoaXMgYWxsb3dzIHRoZSBjb25zdW1lciB0byBjb21wbGV0ZSBhbnkgcmVtYWluaW5nIHdvcmsgYW5kIHJlbGVhc2UKICAgKiByZXNvdXJjZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZAogICAqCiAgICogUmV0dXJucyBhIGZ1dHVyZSB3aGljaCBpcyBjb21wbGV0ZWQgd2hlbiB0aGUgY29uc3VtZXIgaGFzIHNodXQgZG93bi4KICAgKiBJZiBjbGVhbmluZyB1cCBjYW4gZmFpbCwgdGhlIGVycm9yIG1heSBiZSByZXBvcnRlZCBpbiB0aGUgcmV0dXJuZWQgZnV0dXJlLAogICAqIG90aGVyd2lzZSBpdCBjb21wbGV0ZXMgd2l0aCBgbnVsbGAuCiAgICovCiAgRnV0dXJlIGNsb3NlKCk7Cn0KCi8qKgogKiBBIG9iamVjdCB0aGF0IGFjY2VwdHMgc3RyZWFtIGV2ZW50cyBib3RoIHN5bmNocm9ub3VzbHkgYW5kIGFzeW5jaHJvbm91c2x5LgogKgogKiBBIFtTdHJlYW1TaW5rXSBjb21iaW5lcyB0aGUgbWV0aG9kcyBmcm9tIFtTdHJlYW1Db25zdW1lcl0gYW5kIFtFdmVudFNpbmtdLgogKgogKiBUaGUgW0V2ZW50U2lua10gbWV0aG9kcyBjYW4ndCBiZSB1c2VkIHdoaWxlIHRoZSBbYWRkU3RyZWFtXSBpcyBjYWxsZWQuCiAqIEFzIHNvb24gYXMgdGhlIFthZGRTdHJlYW1dJ3MgW0Z1dHVyZV0gY29tcGxldGVzIHdpdGggYSB2YWx1ZSwgdGhlCiAqIFtFdmVudFNpbmtdIG1ldGhvZHMgY2FuIGJlIHVzZWQgYWdhaW4uCiAqCiAqIElmIFthZGRTdHJlYW1dIGlzIGNhbGxlZCBhZnRlciBhbnkgb2YgdGhlIFtFdmVudFNpbmtdIG1ldGhvZHMsIGl0J2xsCiAqIGJlIGRlbGF5ZWQgdW50aWwgdGhlIHVuZGVybHlpbmcgc3lzdGVtIGhhcyBjb25zdW1lZCB0aGUgZGF0YSBhZGRlZCBieSB0aGUKICogW0V2ZW50U2lua10gbWV0aG9kcy4KICoKICogV2hlbiBbRXZlbnRTaW5rXSBtZXRob2RzIGFyZSB1c2VkLCB0aGUgW2RvbmVdIFtGdXR1cmVdIGNhbiBiZSB1c2VkIHRvCiAqIGNhdGNoIGFueSBlcnJvcnMuCiAqCiAqIFdoZW4gW2Nsb3NlXSBpcyBjYWxsZWQsIGl0IHdpbGwgcmV0dXJuIHRoZSBbZG9uZV0gW0Z1dHVyZV0uCiAqLwphYnN0cmFjdCBjbGFzcyBTdHJlYW1TaW5rPFM+IGltcGxlbWVudHMgRXZlbnRTaW5rPFM+LCBTdHJlYW1Db25zdW1lcjxTPiB7CiAgLyoqCiAgICogVGVsbHMgdGhlIHN0cmVhbSBzaW5rIHRoYXQgbm8gZnVydGhlciBzdHJlYW1zIHdpbGwgYmUgYWRkZWQuCiAgICoKICAgKiBUaGlzIGFsbG93cyB0aGUgc3RyZWFtIHNpbmsgdG8gY29tcGxldGUgYW55IHJlbWFpbmluZyB3b3JrIGFuZCByZWxlYXNlCiAgICogcmVzb3VyY2VzIHRoYXQgYXJlIG5vIGxvbmdlciBuZWVkZWQKICAgKgogICAqIFJldHVybnMgYSBmdXR1cmUgd2hpY2ggaXMgY29tcGxldGVkIHdoZW4gdGhlIHN0cmVhbSBzaW5rIGhhcyBzaHV0IGRvd24uCiAgICogSWYgY2xlYW5pbmcgdXAgY2FuIGZhaWwsIHRoZSBlcnJvciBtYXkgYmUgcmVwb3J0ZWQgaW4gdGhlIHJldHVybmVkIGZ1dHVyZSwKICAgKiBvdGhlcndpc2UgaXQgY29tcGxldGVzIHdpdGggYG51bGxgLgogICAqCiAgICogUmV0dXJucyB0aGUgc2FtZSBmdXR1cmUgYXMgW2RvbmVdLgogICAqCiAgICogVGhlIHN0cmVhbSBzaW5rIG1heSBjbG9zZSBiZWZvcmUgdGhlIFtjbG9zZV0gbWV0aG9kIGlzIGNhbGxlZCwgZWl0aGVyIGR1ZQogICAqIHRvIGFuIGVycm9yIG9yIGJlY2F1c2UgaXQgaXMgaXRzZWxmIHByb3ZpZGluZyBldmVudHMgdG8gc29tZW9uZSB3aG8gaGFzCiAgICogc3RvcHBlZCBsaXN0ZW5pbmcuIEluIHRoYXQgY2FzZSwgdGhlIFtkb25lXSBmdXR1cmUgaXMgY29tcGxldGVkIGZpcnN0LAogICAqIGFuZCB0aGUgYGNsb3NlYCBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIGBkb25lYCBmdXR1cmUgd2hlbiBjYWxsZWQuCiAgICoKICAgKiBVbmlmaWVzIFtTdHJlYW1Db25zdW1lci5jbG9zZV0gYW5kIFtFdmVudFNpbmsuY2xvc2VdIHdoaWNoIGJvdGggbWFyayB0aGVpcgogICAqIG9iamVjdCBhcyBub3QgZXhwZWN0aW5nIGFueSBmdXJ0aGVyIGV2ZW50cy4KICAgKi8KICBGdXR1cmUgY2xvc2UoKTsKCiAgLyoqCiAgICogUmV0dXJuIGEgZnV0dXJlIHdoaWNoIGlzIGNvbXBsZXRlZCB3aGVuIHRoZSBbU3RyZWFtU2lua10gaXMgZmluaXNoZWQuCiAgICoKICAgKiBJZiB0aGUgYFN0cmVhbVNpbmtgIGZhaWxzIHdpdGggYW4gZXJyb3IsCiAgICogcGVyaGFwcyBpbiByZXNwb25zZSB0byBhZGRpbmcgZXZlbnRzIHVzaW5nIFthZGRdLCBbYWRkRXJyb3JdIG9yIFtjbG9zZV0sCiAgICogdGhlIFtkb25lXSBmdXR1cmUgd2lsbCBjb21wbGV0ZSB3aXRoIHRoYXQgZXJyb3IuCiAgICoKICAgKiBPdGhlcndpc2UsIHRoZSByZXR1cm5lZCBmdXR1cmUgd2lsbCBjb21wbGV0ZSB3aGVuIGVpdGhlcjoKICAgKgogICAqICogYWxsIGV2ZW50cyBoYXZlIGJlZW4gcHJvY2Vzc2VkIGFuZCB0aGUgc2luayBoYXMgYmVlbiBjbG9zZWQsIG9yCiAgICogKiB0aGUgc2luayBoYXMgb3RoZXJ3aXNlIGJlZW4gc3RvcHBlZCBmcm9tIGhhbmRsaW5nIG1vcmUgZXZlbnRzCiAgICogICAoZm9yIGV4YW1wbGUgYnkgY2FuY2VsaW5nIGEgc3RyZWFtIHN1YnNjcmlwdGlvbikuCiAgICovCiAgRnV0dXJlIGdldCBkb25lOwp9CgovKioKICogVHJhbnNmb3JtcyBhIFN0cmVhbS4KICoKICogV2hlbiBhIHN0cmVhbSdzIFtTdHJlYW0udHJhbnNmb3JtXSBtZXRob2QgaXMgaW52b2tlZCB3aXRoIGEKICogW1N0cmVhbVRyYW5zZm9ybWVyXSwgdGhlIHN0cmVhbSBjYWxscyB0aGUgW2JpbmRdIG1ldGhvZCBvbiB0aGUgcHJvdmlkZWQKICogdHJhbnNmb3JtZXIuIFRoZSByZXN1bHRpbmcgc3RyZWFtIGlzIHRoZW4gcmV0dXJuZWQgZnJvbSB0aGUKICogW1N0cmVhbS50cmFuc2Zvcm1dIG1ldGhvZC4KICoKICogQ29uY2VwdHVhbGx5LCBhIHRyYW5zZm9ybWVyIGlzIHNpbXBseSBhIGZ1bmN0aW9uIGZyb20gW1N0cmVhbV0gdG8gW1N0cmVhbV0KICogdGhhdCBpcyBlbmNhcHN1bGF0ZWQgaW50byBhIGNsYXNzLgogKgogKiBJdCBpcyBnb29kIHByYWN0aWNlIHRvIHdyaXRlIHRyYW5zZm9ybWVycyB0aGF0IGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzLgogKgogKiBBbGwgb3RoZXIgdHJhbnNmb3JtaW5nIG1ldGhvZHMgb24gW1N0cmVhbV0sIHN1Y2ggYXMgW1N0cmVhbS5tYXBdLAogKiBbU3RyZWFtLndoZXJlXSBvciBbU3RyZWFtLmV4cGFuZF0gY2FuIGJlIGltcGxlbWVudGVkIHVzaW5nCiAqIFtTdHJlYW0udHJhbnNmb3JtXS4gQSBbU3RyZWFtVHJhbnNmb3JtZXJdIGlzIHRodXMgdmVyeSBwb3dlcmZ1bCBidXQgb2Z0ZW4KICogYWxzbyBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkIHRvIHVzZS4KICovCmFic3RyYWN0IGNsYXNzIFN0cmVhbVRyYW5zZm9ybWVyPFMsIFQ+IHsKICAvKioKICAgKiBDcmVhdGVzIGEgW1N0cmVhbVRyYW5zZm9ybWVyXSBiYXNlZCBvbiB0aGUgZ2l2ZW4gW29uTGlzdGVuXSBjYWxsYmFjay4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gdHJhbnNmb3JtZXIgdXNlcyB0aGUgcHJvdmlkZWQgW29uTGlzdGVuXSBjYWxsYmFjawogICAqIHdoZW4gYSB0cmFuc2Zvcm1lZCBzdHJlYW0gaXMgbGlzdGVuZWQgdG8uIEF0IHRoYXQgdGltZSwgdGhlIGNhbGxiYWNrCiAgICogcmVjZWl2ZXMgdGhlIGlucHV0IHN0cmVhbSAodGhlIG9uZSBwYXNzZWQgdG8gW2JpbmRdKSBhbmQgYQogICAqIGJvb2xlYW4gZmxhZyBgY2FuY2VsT25FcnJvcmAgdG8gY3JlYXRlIGEgW1N0cmVhbVN1YnNjcmlwdGlvbl0uCiAgICoKICAgKiBJZiB0aGUgdHJhbnNmb3JtZWQgc3RyZWFtIGlzIGEgYnJvYWRjYXN0IHN0cmVhbSwgc28gaXMgdGhlIHN0cmVhbQogICAqIHJldHVybmVkIGJ5IHRoZSBbU3RyZWFtVHJhbnNmb3JtZXIuYmluZF0gbWV0aG9kIGJ5IHRoaXMgdHJhbnNmb3JtZXIuCiAgICoKICAgKiBJZiB0aGUgdHJhbnNmb3JtZWQgc3RyZWFtIGlzIGxpc3RlbmVkIHRvIG11bHRpcGxlIHRpbWVzLCB0aGUgW29uTGlzdGVuXQogICAqIGNhbGxiYWNrIGlzIGNhbGxlZCBhZ2FpbiBmb3IgZWFjaCBuZXcgW1N0cmVhbS5saXN0ZW5dIGNhbGwuCiAgICogVGhpcyBoYXBwZW5zIHdoZXRoZXIgdGhlIHN0cmVhbSBpcyBhIGJyb2FkY2FzdCBzdHJlYW0gb3Igbm90LAogICAqIGJ1dCB0aGUgY2FsbCB3aWxsIHVzdWFsbHkgZmFpbCBmb3Igbm9uLWJyb2FkY2FzdCBzdHJlYW1zLgogICAqCiAgICogVGhlIFtvbkxpc3Rlbl0gY2FsbGJhY2sgZG9lcyAqbm90KiByZWNlaXZlIHRoZSBoYW5kbGVycyB0aGF0IHdlcmUgcGFzc2VkCiAgICogdG8gW1N0cmVhbS5saXN0ZW5dLiBUaGVzZSBhcmUgYXV0b21hdGljYWxseSBzZXQgYWZ0ZXIgdGhlIGNhbGwgdG8gdGhlCiAgICogW29uTGlzdGVuXSBjYWxsYmFjayAodXNpbmcgW1N0cmVhbVN1YnNjcmlwdGlvbi5vbkRhdGFdLAogICAqIFtTdHJlYW1TdWJzY3JpcHRpb24ub25FcnJvcl0gYW5kIFtTdHJlYW1TdWJzY3JpcHRpb24ub25Eb25lXSkuCiAgICoKICAgKiBNb3N0IGNvbW1vbmx5LCBhbiBbb25MaXN0ZW5dIGNhbGxiYWNrIHdpbGwgZmlyc3QgY2FsbCBbU3RyZWFtLmxpc3Rlbl0gb24KICAgKiB0aGUgcHJvdmlkZWQgc3RyZWFtICh3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGBjYW5jZWxPbkVycm9yYCBmbGFnKSwgYW5kIHRoZW4KICAgKiByZXR1cm4gYSBuZXcgW1N0cmVhbVN1YnNjcmlwdGlvbl0uCiAgICoKICAgKiBUaGVyZSBhcmUgdHdvIGNvbW1vbiB3YXlzIHRvIGNyZWF0ZSBhIFN0cmVhbVN1YnNjcmlwdGlvbjoKICAgKgogICAqIDEuIGJ5IGFsbG9jYXRpbmcgYSBbU3RyZWFtQ29udHJvbGxlcl0gYW5kIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mCiAgICogICAgbGlzdGVuaW5nIHRvIGl0cyBzdHJlYW0uIEl0J3MgaW1wb3J0YW50IHRvIGZvcndhcmQgcGF1c2UsIHJlc3VtZSBhbmQKICAgKiAgICBjYW5jZWwgZXZlbnRzICh1bmxlc3MgdGhlIHRyYW5zZm9ybWVyIGludGVudGlvbmFsbHkgd2FudHMgdG8gY2hhbmdlCiAgICogICAgdGhpcyBiZWhhdmlvcikuCiAgICogMi4gYnkgY3JlYXRpbmcgYSBuZXcgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIFtTdHJlYW1TdWJzY3JpcHRpb25dLgogICAqICAgIE5vdGUgdGhhdCB0aGUgc3Vic2NyaXB0aW9uIHNob3VsZCBydW4gY2FsbGJhY2tzIGluIHRoZSBbWm9uZV0gdGhlCiAgICogICAgc3RyZWFtIHdhcyBsaXN0ZW5lZCB0byAoc2VlIFtab25lXSBhbmQgW1pvbmUuYmluZENhbGxiYWNrXSkuCiAgICoKICAgKiBFeGFtcGxlOgogICAqCiAgICogYGBgCiAgICogLy8vIFN0YXJ0cyBsaXN0ZW5pbmcgdG8gW2lucHV0XSBhbmQgZHVwbGljYXRlcyBhbGwgbm9uLWVycm9yIGV2ZW50cy4KICAgKiBTdHJlYW1TdWJzY3JpcHRpb248aW50PiBfb25MaXN0ZW4oU3RyZWFtPGludD4gaW5wdXQsIGJvb2wgY2FuY2VsT25FcnJvcikgewogICAqICAgU3RyZWFtU3Vic2NyaXB0aW9uPFN0cmluZz4gc3Vic2NyaXB0aW9uOwogICAqICAgLy8gQ3JlYXRlIGNvbnRyb2xsZXIgdGhhdCBmb3J3YXJkcyBwYXVzZSwgcmVzdW1lIGFuZCBjYW5jZWwgZXZlbnRzLgogICAqICAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcjxTdHJpbmc+KAogICAqICAgICAgIG9uUGF1c2U6ICgpIHsKICAgKiAgICAgICAgIHN1YnNjcmlwdGlvbi5wYXVzZSgpOwogICAqICAgICAgIH0sCiAgICogICAgICAgb25SZXN1bWU6ICgpIHsKICAgKiAgICAgICAgIHN1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICAgKiAgICAgICB9LAogICAqICAgICAgIG9uQ2FuY2VsOiAoKSA9PiBzdWJzY3JpcHRpb24uY2FuY2VsKCksCiAgICogICAgICAgc3luYzogdHJ1ZSk7IC8vICJzeW5jIiBpcyBjb3JyZWN0IGhlcmUsIHNpbmNlIGV2ZW50cyBhcmUgZm9yd2FyZGVkLgogICAqCiAgICogICAvLyBMaXN0ZW4gdG8gdGhlIHByb3ZpZGVkIHN0cmVhbSB1c2luZyBgY2FuY2VsT25FcnJvcmAuCiAgICogICBzdWJzY3JpcHRpb24gPSBpbnB1dC5saXN0ZW4oKGRhdGEpIHsKICAgKiAgICAgLy8gRHVwbGljYXRlIHRoZSBkYXRhLgogICAqICAgICBjb250cm9sbGVyLmFkZChkYXRhKTsKICAgKiAgICAgY29udHJvbGxlci5hZGQoZGF0YSk7CiAgICogICB9LAogICAqICAgICAgIG9uRXJyb3I6IGNvbnRyb2xsZXIuYWRkRXJyb3IsCiAgICogICAgICAgb25Eb25lOiBjb250cm9sbGVyLmNsb3NlLAogICAqICAgICAgIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogICAqCiAgICogICAvLyBSZXR1cm4gYSBuZXcgW1N0cmVhbVN1YnNjcmlwdGlvbl0gYnkgbGlzdGVuaW5nIHRvIHRoZSBjb250cm9sbGVyJ3MKICAgKiAgIC8vIHN0cmVhbS4KICAgKiAgIHJldHVybiBjb250cm9sbGVyLnN0cmVhbS5saXN0ZW4obnVsbCk7CiAgICogfQogICAqCiAgICogLy8gSW5zdGFudGlhdGUgYSB0cmFuc2Zvcm1lcjoKICAgKiB2YXIgZHVwbGljYXRvciA9IGNvbnN0IFN0cmVhbVRyYW5zZm9ybWVyPGludCwgaW50Pihfb25MaXN0ZW4pOwogICAqCiAgICogLy8gVXNlIGFzIGZvbGxvd3M6CiAgICogaW50U3RyZWFtLnRyYW5zZm9ybShkdXBsaWNhdG9yKTsKICAgKiBgYGAKICAgKi8KICBjb25zdCBmYWN0b3J5IFN0cmVhbVRyYW5zZm9ybWVyKAogICAgICAgICAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IG9uTGlzdGVuKAogICAgICAgICAgICAgIFN0cmVhbTxTPiBzdHJlYW0sIGJvb2wgY2FuY2VsT25FcnJvcikpID0KICAgICAgX1N0cmVhbVN1YnNjcmlwdGlvblRyYW5zZm9ybWVyPFMsIFQ+OwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1N0cmVhbVRyYW5zZm9ybWVyXSB0aGF0IGRlbGVnYXRlcyBldmVudHMgdG8gdGhlIGdpdmVuIGZ1bmN0aW9ucy4KICAgKgogICAqIEV4YW1wbGUgdXNlIG9mIGEgZHVwbGljYXRpbmcgdHJhbnNmb3JtZXI6CiAgICoKICAgKiBgYGAKICAgKiBzdHJpbmdTdHJlYW0udHJhbnNmb3JtKG5ldyBTdHJlYW1UcmFuc2Zvcm1lcjxTdHJpbmcsIFN0cmluZz4uZnJvbUhhbmRsZXJzKAogICAqICAgICBoYW5kbGVEYXRhOiAoU3RyaW5nIHZhbHVlLCBFdmVudFNpbms8U3RyaW5nPiBzaW5rKSB7CiAgICogICAgICAgc2luay5hZGQodmFsdWUpOwogICAqICAgICAgIHNpbmsuYWRkKHZhbHVlKTsgIC8vIER1cGxpY2F0ZSB0aGUgaW5jb21pbmcgZXZlbnRzLgogICAqICAgICB9KSk7CiAgICogYGBgCiAgICoKICAgKiBUcmFuc2Zvcm1lcnMgdGhhdCBhcmUgY29uc3RydWN0ZWQgdGhpcyB3YXkgY2Fubm90IHVzZSBjYXB0dXJlZCBzdGF0ZSBpZgogICAqIHRoZXkgYXJlIHVzZWQgaW4gc3RyZWFtcyB0aGF0IGNhbiBiZSBsaXN0ZW5lZCB0byBtdWx0aXBsZSB0aW1lcy4KICAgKiBgYGAKICAgKiBTdHJlYW1Db250cm9sbGVyPFN0cmluZz4gY29udHJvbGxlcjsKICAgKiBjb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXIuYnJvYWRjYXN0KG9uTGlzdGVuOiAoKSB7CiAgICogICBzY2hlZHVsZU1pY3JvdGFzaygoKSB7CiAgICogICAgIGNvbnRyb2xsZXIuYWRkRXJyb3IoIkJhZCIpOwogICAqICAgICBjb250cm9sbGVyLmFkZEVycm9yKCJXb3JzZSIpOwogICAqICAgICBjb250cm9sbGVyLmFkZEVycm9yKCJXb3JzdCIpOwogICAqICAgfSk7CiAgICogfSk7CiAgICogdmFyIHNoYXJlZFN0YXRlID0gMDsKICAgKiB2YXIgdHJhbnNmb3JtZWRTdHJlYW0gPSBjb250cm9sbGVyLnN0cmVhbS50cmFuc2Zvcm0oCiAgICogICAgIG5ldyBTdHJlYW1UcmFuc2Zvcm1lcjxTdHJpbmc+LmZyb21IYW5kbGVycygKICAgKiAgICAgICAgIGhhbmRsZUVycm9yOiAoZXJyb3IsIHN0YWNrVHJhY2UsIHNpbmspIHsKICAgKiAgIHNoYXJlZFN0YXRlKys7IC8vIEluY3JlbWVudCBzaGFyZWQgZXJyb3ItY291bnRlci4KICAgKiAgIHNpbmsuYWRkKCJFcnJvciAkc2hhcmVkU3RhdGU6ICRlcnJvciIpOwogICAqIH0pKTsKICAgKgogICAqIHRyYW5zZm9ybWVkU3RyZWFtLmxpc3RlbihwcmludCk7CiAgICogdHJhbnNmb3JtZWRTdHJlYW0ubGlzdGVuKHByaW50KTsgLy8gTGlzdGVuIHR3aWNlLgogICAqIC8vIExpc3RlbmluZyB0d2ljZSB0byB0aGUgc2FtZSBzdHJlYW0gbWFrZXMgdGhlIHRyYW5zZm9ybWVyIHNoYXJlIHRoZSBzYW1lCiAgICogLy8gc3RhdGUuIEluc3RlYWQgb2YgaGF2aW5nICJFcnJvciAxOiBCYWQiLCAiRXJyb3IgMjogV29yc2UiLAogICAqIC8vICJFcnJvciAzOiBXb3JzdCIgYXMgb3V0cHV0IChlYWNoIHR3aWNlIGZvciB0aGUgc2VwYXJhdGUgc3Vic2NyaXB0aW9ucyksCiAgICogLy8gdGhpcyBwcm9ncmFtIGVtaXRzOgogICAqIC8vIEVycm9yIDE6IEJhZAogICAqIC8vIEVycm9yIDI6IEJhZAogICAqIC8vIEVycm9yIDM6IFdvcnNlCiAgICogLy8gRXJyb3IgNDogV29yc2UKICAgKiAvLyBFcnJvciA1OiBXb3JzdAogICAqIC8vIEVycm9yIDY6IFdvcnN0CiAgICogYGBgCiAgICovCiAgZmFjdG9yeSBTdHJlYW1UcmFuc2Zvcm1lci5mcm9tSGFuZGxlcnMoCiAgICAgIHt2b2lkIGhhbmRsZURhdGEoUyBkYXRhLCBFdmVudFNpbms8VD4gc2luayksCiAgICAgIHZvaWQgaGFuZGxlRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UsIEV2ZW50U2luazxUPiBzaW5rKSwKICAgICAgdm9pZCBoYW5kbGVEb25lKEV2ZW50U2luazxUPiBzaW5rKX0pID0gX1N0cmVhbUhhbmRsZXJUcmFuc2Zvcm1lcjxTLCBUPjsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtTdHJlYW1UcmFuc2Zvcm1lcl0gYmFzZWQgb24gYSBbYmluZF0gY2FsbGJhY2suCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgc3RyZWFtIHRyYW5zZm9ybWVyIHVzZXMgdGhlIFtiaW5kXSBhcmd1bWVudCB0byBpbXBsZW1lbnQgdGhlCiAgICogW1N0cmVhbVRyYW5zZm9ybWVyLmJpbmRdIEFQSSBhbmQgY2FuIGJlIHVzZWQgd2hlbiB0aGUgdHJhbnNmb3JtYXRpb24gaXMKICAgKiBhdmFpbGFibGUgYXMgYSBzdHJlYW0tdG8tc3RyZWFtIGZ1bmN0aW9uLgogICAqCiAgICogYGBgZGFydAogICAqIGZpbmFsIHNwbGl0RGVjb2RlZCA9IFN0cmVhbVRyYW5zZm9ybWVyPExpc3Q8aW50PiwgU3RyaW5nPi5mcm9tQmluZCgKICAgKiAgICAgKHN0cmVhbSkgPT4gc3RyZWFtLnRyYW5zZm9ybSh1dGY4LmRlY29kZXIpLnRyYW5zZm9ybShMaW5lU3BsaXR0ZXIoKSkpOwogICAqIGBgYAogICAqLwogIEBTaW5jZSgiMi4xIikKICBmYWN0b3J5IFN0cmVhbVRyYW5zZm9ybWVyLmZyb21CaW5kKFN0cmVhbTxUPiBGdW5jdGlvbihTdHJlYW08Uz4pIGJpbmQpID0KICAgICAgX1N0cmVhbUJpbmRUcmFuc2Zvcm1lcjxTLCBUPjsKCiAgLyoqCiAgICogQWRhcHRzIFtzb3VyY2VdIHRvIGJlIGEgYFN0cmVhbVRyYW5zZm9ybWVyPFRTLCBUVD5gLgogICAqCiAgICogVGhpcyBhbGxvd3MgW3NvdXJjZV0gdG8gYmUgdXNlZCBhdCB0aGUgbmV3IHR5cGUsIGJ1dCBhdCBydW4tdGltZSBpdAogICAqIG11c3Qgc2F0aXNmeSB0aGUgcmVxdWlyZW1lbnRzIG9mIGJvdGggdGhlIG5ldyB0eXBlIGFuZCBpdHMgb3JpZ2luYWwgdHlwZS4KICAgKgogICAqIERhdGEgZXZlbnRzIHBhc3NlZCBpbnRvIHRoZSByZXR1cm5lZCB0cmFuc2Zvcm1lciBtdXN0IGFsc28gYmUgaW5zdGFuY2VzCiAgICogb2YgW1NTXSwgYW5kIGRhdGEgZXZlbnRzIHByb2R1Y2VkIGJ5IFtzb3VyY2VdIGZvciB0aG9zZSBldmVudHMgbXVzdAogICAqIGFsc28gYmUgaW5zdGFuY2VzIG9mIFtUVF0uCiAgICovCiAgc3RhdGljIFN0cmVhbVRyYW5zZm9ybWVyPFRTLCBUVD4gY2FzdEZyb208U1MsIFNULCBUUywgVFQ+KAogICAgICBTdHJlYW1UcmFuc2Zvcm1lcjxTUywgU1Q+IHNvdXJjZSkgewogICAgcmV0dXJuIG5ldyBDYXN0U3RyZWFtVHJhbnNmb3JtZXI8U1MsIFNULCBUUywgVFQ+KHNvdXJjZSk7CiAgfQoKICAvKioKICAgKiBUcmFuc2Zvcm1zIHRoZSBwcm92aWRlZCBbc3RyZWFtXS4KICAgKgogICAqIFJldHVybnMgYSBuZXcgc3RyZWFtIHdpdGggZXZlbnRzIHRoYXQgYXJlIGNvbXB1dGVkIGZyb20gZXZlbnRzIG9mIHRoZQogICAqIHByb3ZpZGVkIFtzdHJlYW1dLgogICAqCiAgICogVGhlIFtTdHJlYW1UcmFuc2Zvcm1lcl0gaW50ZXJmYWNlIGlzIGNvbXBsZXRlbHkgZ2VuZXJpYywKICAgKiBzbyBpdCBjYW5ub3Qgc2F5IHdoYXQgc3ViY2xhc3NlcyBkby4KICAgKiBFYWNoIFtTdHJlYW1UcmFuc2Zvcm1lcl0gc2hvdWxkIGRvY3VtZW50IGNsZWFybHkgaG93IGl0IHRyYW5zZm9ybXMgdGhlCiAgICogc3RyZWFtIChvbiB0aGUgY2xhc3Mgb3IgdmFyaWFibGUgdXNlZCB0byBhY2Nlc3MgdGhlIHRyYW5zZm9ybWVyKSwKICAgKiBhcyB3ZWxsIGFzIGFueSBkaWZmZXJlbmNlcyBmcm9tIHRoZSBmb2xsb3dpbmcgdHlwaWNhbCBiZWhhdmlvcjoKICAgKgogICAqICogV2hlbiB0aGUgcmV0dXJuZWQgc3RyZWFtIGlzIGxpc3RlbmVkIHRvLCBpdCBzdGFydHMgbGlzdGVuaW5nIHRvIHRoZQogICAqICAgaW5wdXQgW3N0cmVhbV0uCiAgICogKiBTdWJzY3JpcHRpb25zIG9mIHRoZSByZXR1cm5lZCBzdHJlYW0gZm9yd2FyZCAoaW4gYSByZWFzb25hYmxlIHRpbWUpCiAgICogICBhIFtTdHJlYW1TdWJzY3JpcHRpb24ucGF1c2VdIGNhbGwgdG8gdGhlIHN1YnNjcmlwdGlvbiBvZiB0aGUgaW5wdXQKICAgKiAgIFtzdHJlYW1dLgogICAqICogU2ltaWxhcmx5LCBjYW5jZWxpbmcgYSBzdWJzY3JpcHRpb24gb2YgdGhlIHJldHVybmVkIHN0cmVhbSBldmVudHVhbGx5CiAgICogICAoaW4gcmVhc29uYWJsZSB0aW1lKSBjYW5jZWxzIHRoZSBzdWJzY3JpcHRpb24gb2YgdGhlIGlucHV0IFtzdHJlYW1dLgogICAqCiAgICogIlJlYXNvbmFibGUgdGltZSIgZGVwZW5kcyBvbiB0aGUgdHJhbnNmb3JtZXIgYW5kIHN0cmVhbS4gU29tZSB0cmFuc2Zvcm1lcnMsCiAgICogbGlrZSBhICJ0aW1lb3V0IiB0cmFuc2Zvcm1lciwgbWlnaHQgbWFrZSB0aGVzZSBvcGVyYXRpb25zIGRlcGVuZCBvbiBhCiAgICogZHVyYXRpb24uIE90aGVycyBtaWdodCBub3QgZGVsYXkgdGhlbSBhdCBhbGwsIG9yIGp1c3QgYnkgYSBtaWNyb3Rhc2suCiAgICoKICAgKiBUcmFuc2Zvcm1lcnMgYXJlIGZyZWUgdG8gaGFuZGxlIGVycm9ycyBpbiBhbnkgd2F5LgogICAqIEEgdHJhbnNmb3JtZXIgaW1wbGVtZW50YXRpb24gbWF5IGNob29zZSB0byBwcm9wYWdhdGUgZXJyb3JzLAogICAqIG9yIGNvbnZlcnQgdGhlbSB0byBvdGhlciBldmVudHMsIG9yIGlnbm9yZSB0aGVtIGNvbXBsZXRlbHksCiAgICogYnV0IGlmIGVycm9ycyBhcmUgaWdub3JlZCwgaXQgc2hvdWxkIGJlIGRvY3VtZW50ZWQgZXhwbGljaXRseS4KICAgKi8KICBTdHJlYW08VD4gYmluZChTdHJlYW08Uz4gc3RyZWFtKTsKCiAgLyoqCiAgICogUHJvdmlkZXMgYSBgU3RyZWFtVHJhbnNmb3JtZXI8UlMsIFJUPmAgdmlldyBvZiB0aGlzIHN0cmVhbSB0cmFuc2Zvcm1lci4KICAgKgogICAqIFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZXIgd2lsbCBjaGVjayBhdCBydW4tdGltZSB0aGF0IGFsbCBkYXRhIGV2ZW50cwogICAqIG9mIHRoZSBzdHJlYW0gaXQgdHJhbnNmb3JtcyBhcmUgYWN0dWFsbHkgaW5zdGFuY2VzIG9mIFtTXSwKICAgKiBhbmQgaXQgd2lsbCBjaGVjayB0aGF0IGFsbCBkYXRhIGV2ZW50cyBwcm9kdWNlZCBieSB0aGlzIHRyYW5zZm9ybWVyCiAgICogYXJlIGFjdHVhbGx5IGluc3RhbmNlcyBvZiBbUlRdLgogICAqLwogIFN0cmVhbVRyYW5zZm9ybWVyPFJTLCBSVD4gY2FzdDxSUywgUlQ+KCk7Cn0KCi8qKgogKiBCYXNlIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgW1N0cmVhbVRyYW5zZm9ybWVyXS4KICoKICogQ29udGFpbnMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgb2YgZXZlcnkgbWV0aG9kIGV4Y2VwdCBbYmluZF0uCiAqLwphYnN0cmFjdCBjbGFzcyBTdHJlYW1UcmFuc2Zvcm1lckJhc2U8UywgVD4gaW1wbGVtZW50cyBTdHJlYW1UcmFuc2Zvcm1lcjxTLCBUPiB7CiAgY29uc3QgU3RyZWFtVHJhbnNmb3JtZXJCYXNlKCk7CgogIFN0cmVhbVRyYW5zZm9ybWVyPFJTLCBSVD4gY2FzdDxSUywgUlQ+KCkgPT4KICAgICAgU3RyZWFtVHJhbnNmb3JtZXIuY2FzdEZyb208UywgVCwgUlMsIFJUPih0aGlzKTsKfQoKLyoqCiAqIEFuIFtJdGVyYXRvcl0gbGlrZSBpbnRlcmZhY2UgZm9yIHRoZSB2YWx1ZXMgb2YgYSBbU3RyZWFtXS4KICoKICogVGhpcyB3cmFwcyBhIFtTdHJlYW1dIGFuZCBhIHN1YnNjcmlwdGlvbiBvbiB0aGUgc3RyZWFtLiBJdCBsaXN0ZW5zCiAqIG9uIHRoZSBzdHJlYW0sIGFuZCBjb21wbGV0ZXMgdGhlIGZ1dHVyZSByZXR1cm5lZCBieSBbbW92ZU5leHRdIHdoZW4gdGhlCiAqIG5leHQgdmFsdWUgYmVjb21lcyBhdmFpbGFibGUuCiAqCiAqIFRoZSBzdHJlYW0gbWF5IGJlIHBhdXNlZCBiZXR3ZWVuIGNhbGxzIHRvIFttb3ZlTmV4dF0uCiAqLwphYnN0cmFjdCBjbGFzcyBTdHJlYW1JdGVyYXRvcjxUPiB7CiAgLyoqIENyZWF0ZSBhIFtTdHJlYW1JdGVyYXRvcl0gb24gW3N0cmVhbV0uICovCiAgZmFjdG9yeSBTdHJlYW1JdGVyYXRvcihTdHJlYW08VD4gc3RyZWFtKQogICAgICAvLyBUT0RPKGxybik6IHVzZSByZWRpcmVjdGluZyBmYWN0b3J5IGNvbnN0cnVjdG9yIHdoZW4gdHlwZQogICAgICAvLyBhcmd1bWVudHMgYXJlIHN1cHBvcnRlZC4KICAgICAgPT4KICAgICAgbmV3IF9TdHJlYW1JdGVyYXRvcjxUPihzdHJlYW0pOwoKICAvKioKICAgKiBXYWl0IGZvciB0aGUgbmV4dCBzdHJlYW0gdmFsdWUgdG8gYmUgYXZhaWxhYmxlLgogICAqCiAgICogUmV0dXJucyBhIGZ1dHVyZSB3aGljaCB3aWxsIGNvbXBsZXRlIHdpdGggZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgLgogICAqIENvbXBsZXRpbmcgd2l0aCBgdHJ1ZWAgbWVhbnMgdGhhdCBhbm90aGVyIGV2ZW50IGhhcyBiZWVuIHJlY2VpdmVkIGFuZAogICAqIGNhbiBiZSByZWFkIGFzIFtjdXJyZW50XS4KICAgKiBDb21wbGV0aW5nIHdpdGggYGZhbHNlYCBtZWFucyB0aGF0IHRoZSBzdHJlYW0gaXRlcmF0aW9uIGlzIGRvbmUgYW5kCiAgICogbm8gZnVydGhlciBldmVudHMgd2lsbCBldmVyIGJlIGF2YWlsYWJsZS4KICAgKiBUaGUgZnV0dXJlIG1heSBjb21wbGV0ZSB3aXRoIGFuIGVycm9yLCBpZiB0aGUgc3RyZWFtIHByb2R1Y2VzIGFuIGVycm9yLAogICAqIHdoaWNoIGFsc28gZW5kcyBpdGVyYXRpb24uCiAgICoKICAgKiBUaGUgZnVuY3Rpb24gbXVzdCBub3QgYmUgY2FsbGVkIGFnYWluIHVudGlsIHRoZSBmdXR1cmUgcmV0dXJuZWQgYnkgYQogICAqIHByZXZpb3VzIGNhbGwgaXMgY29tcGxldGVkLgogICAqLwogIEZ1dHVyZTxib29sPiBtb3ZlTmV4dCgpOwoKICAvKioKICAgKiBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgc3RyZWFtLgogICAqCiAgICogSXMgYG51bGxgIGJlZm9yZSB0aGUgZmlyc3QgY2FsbCB0byBbbW92ZU5leHRdIGFuZCBhZnRlciBhIGNhbGwgdG8KICAgKiBgbW92ZU5leHRgIGNvbXBsZXRlcyB3aXRoIGEgYGZhbHNlYCByZXN1bHQgb3IgYW4gZXJyb3IuCiAgICoKICAgKiBXaGVuIGEgYG1vdmVOZXh0YCBjYWxsIGNvbXBsZXRlcyB3aXRoIGB0cnVlYCwgdGhlIGBjdXJyZW50YCBmaWVsZCBob2xkcwogICAqIHRoZSBtb3N0IHJlY2VudCBldmVudCBvZiB0aGUgc3RyZWFtLCBhbmQgaXQgc3RheXMgbGlrZSB0aGF0IHVudGlsIHRoZSBuZXh0CiAgICogY2FsbCB0byBgbW92ZU5leHRgLgogICAqIEJldHdlZW4gYSBjYWxsIHRvIGBtb3ZlTmV4dGAgYW5kIHdoZW4gaXRzIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMsCiAgICogdGhlIHZhbHVlIGlzIHVuc3BlY2lmaWVkLgogICAqLwogIFQgZ2V0IGN1cnJlbnQ7CgogIC8qKgogICAqIENhbmNlbHMgdGhlIHN0cmVhbSBpdGVyYXRvciAoYW5kIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBzdWJzY3JpcHRpb24pIGVhcmx5LgogICAqCiAgICogVGhlIHN0cmVhbSBpdGVyYXRvciBpcyBhdXRvbWF0aWNhbGx5IGNhbmNlbGVkIGlmIHRoZSBbbW92ZU5leHRdIGZ1dHVyZQogICAqIGNvbXBsZXRlcyB3aXRoIGVpdGhlciBgZmFsc2VgIG9yIGFuIGVycm9yLgogICAqCiAgICogSWYgeW91IG5lZWQgdG8gc3RvcCBsaXN0ZW5pbmcgZm9yIHZhbHVlcyBiZWZvcmUgdGhlIHN0cmVhbSBpdGVyYXRvciBpcwogICAqIGF1dG9tYXRpY2FsbHkgY2xvc2VkLCB5b3UgbXVzdCBjYWxsIFtjYW5jZWxdIHRvIGVuc3VyZSB0aGF0IHRoZSBzdHJlYW0KICAgKiBpcyBwcm9wZXJseSBjbG9zZWQuCiAgICoKICAgKiBJZiBbbW92ZU5leHRdIGhhcyBiZWVuIGNhbGxlZCB3aGVuIHRoZSBpdGVyYXRvciBpcyBjYW5jZWxlZCwKICAgKiBpdHMgcmV0dXJuZWQgZnV0dXJlIHdpbGwgY29tcGxldGUgd2l0aCBgZmFsc2VgIGFzIHZhbHVlLAogICAqIGFzIHdpbGwgYWxsIGZ1cnRoZXIgY2FsbHMgdG8gW21vdmVOZXh0XS4KICAgKgogICAqIFJldHVybnMgYSBmdXR1cmUgaWYgdGhlIGNhbmNlbC1vcGVyYXRpb24gaXMgbm90IGNvbXBsZXRlZCBzeW5jaHJvbm91c2x5LgogICAqIE90aGVyd2lzZSByZXR1cm5zIGBudWxsYC4KICAgKi8KICBGdXR1cmUgY2FuY2VsKCk7Cn0KCi8qKgogKiBXcmFwcyBhbiBbX0V2ZW50U2lua10gc28gaXQgZXhwb3NlcyBvbmx5IHRoZSBbRXZlbnRTaW5rXSBpbnRlcmZhY2UuCiAqLwpjbGFzcyBfQ29udHJvbGxlckV2ZW50U2lua1dyYXBwZXI8VD4gaW1wbGVtZW50cyBFdmVudFNpbms8VD4gewogIEV2ZW50U2luayBfc2luazsKICBfQ29udHJvbGxlckV2ZW50U2lua1dyYXBwZXIodGhpcy5fc2luayk7CgogIHZvaWQgYWRkKFQgZGF0YSkgewogICAgX3NpbmsuYWRkKGRhdGEpOwogIH0KCiAgdm9pZCBhZGRFcnJvcihl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RU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5hc3luYzsKCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gQ29udHJvbGxlciBmb3IgY3JlYXRpbmcgYW5kIGFkZGluZyBldmVudHMgdG8gYSBzdHJlYW0uCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8qKgogKiBUeXBlIG9mIGEgc3RyZWFtIGNvbnRyb2xsZXIncyBgb25MaXN0ZW5gLCBgb25QYXVzZWAgYW5kIGBvblJlc3VtZWAgY2FsbGJhY2tzLgogKi8KdHlwZWRlZiB2b2lkIENvbnRyb2xsZXJDYWxsYmFjaygpOwoKLyoqCiAqIFR5cGUgb2Ygc3RyZWFtIGNvbnRyb2xsZXIgYG9uQ2FuY2VsYCBjYWxsYmFja3MuCiAqCiAqIFRoZSBjYWxsYmFjayBtYXkgcmV0dXJuIGVpdGhlciBgdm9pZGAgb3IgYSBmdXR1cmUuCiAqLwp0eXBlZGVmIENvbnRyb2xsZXJDYW5jZWxDYWxsYmFjaygpOwoKLyoqCiAqIEEgY29udHJvbGxlciB3aXRoIHRoZSBzdHJlYW0gaXQgY29udHJvbHMuCiAqCiAqIFRoaXMgY29udHJvbGxlciBhbGxvd3Mgc2VuZGluZyBkYXRhLCBlcnJvciBhbmQgZG9uZSBldmVudHMgb24KICogaXRzIFtzdHJlYW1dLgogKiBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIHNpbXBsZSBzdHJlYW0gdGhhdCBvdGhlcnMKICogY2FuIGxpc3RlbiBvbiwgYW5kIHRvIHB1c2ggZXZlbnRzIHRvIHRoYXQgc3RyZWFtLgogKgogKiBJdCdzIHBvc3NpYmxlIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHN0cmVhbSBpcyBwYXVzZWQgb3Igbm90LCBhbmQgd2hldGhlcgogKiBpdCBoYXMgc3Vic2NyaWJlcnMgb3Igbm90LCBhcyB3ZWxsIGFzIGdldHRpbmcgYSBjYWxsYmFjayB3aGVuIGVpdGhlciBvZgogKiB0aGVzZSBjaGFuZ2UuCiAqLwphYnN0cmFjdCBjbGFzcyBTdHJlYW1Db250cm9sbGVyPFQ+IGltcGxlbWVudHMgU3RyZWFtU2luazxUPiB7CiAgLyoqIFRoZSBzdHJlYW0gdGhhdCB0aGlzIGNvbnRyb2xsZXIgaXMgY29udHJvbGxpbmcuICovCiAgU3RyZWFtPFQ+IGdldCBzdHJlYW07CgogIC8qKgogICAqIEEgY29udHJvbGxlciB3aXRoIGEgW3N0cmVhbV0gdGhhdCBzdXBwb3J0cyBvbmx5IG9uZSBzaW5nbGUgc3Vic2NyaWJlci4KICAgKgogICAqIElmIFtzeW5jXSBpcyB0cnVlLCB0aGUgcmV0dXJuZWQgc3RyZWFtIGNvbnRyb2xsZXIgaXMgYQogICAqIFtTeW5jaHJvbm91c1N0cmVhbUNvbnRyb2xsZXJdLCBhbmQgbXVzdCBiZSB1c2VkIHdpdGggdGhlIGNhcmUKICAgKiBhbmQgYXR0ZW50aW9uIG5lY2Vzc2FyeSB0byBub3QgYnJlYWsgdGhlIFtTdHJlYW1dIGNvbnRyYWN0LiBJZiBpbiBkb3VidCwKICAgKiB1c2UgdGhlIG5vbi1zeW5jIHZlcnNpb24uCiAgICoKICAgKiBVc2luZyBhbiBhc3luY2hyb25vdXMgY29udHJvbGxlciB3aWxsIG5ldmVyIGdpdmUgdGhlIHdyb25nCiAgICogYmVoYXZpb3IsIGJ1dCB1c2luZyBhIHN5bmNocm9ub3VzIGNvbnRyb2xsZXIgaW5jb3JyZWN0bHkgY2FuIGNhdXNlCiAgICogb3RoZXJ3aXNlIGNvcnJlY3QgcHJvZ3JhbXMgdG8gYnJlYWsuCiAgICoKICAgKiBBIHN5bmNocm9ub3VzIGNvbnRyb2xsZXIgaXMgb25seSBpbnRlbmRlZCBmb3Igb3B0aW1pemluZyBldmVudAogICAqIHByb3BhZ2F0aW9uIHdoZW4gb25lIGFzeW5jaHJvbm91cyBldmVudCBpbW1lZGlhdGVseSB0cmlnZ2VycyBhbm90aGVyLgogICAqIEl0IHNob3VsZCBub3QgYmUgdXNlZCB1bmxlc3MgdGhlIGNhbGxzIHRvIFthZGRdIG9yIFthZGRFcnJvcl0KICAgKiBhcmUgZ3VhcmFudGVlZCB0byBvY2N1ciBpbiBwbGFjZXMgd2hlcmUgaXQgd29uJ3QgYnJlYWsgYFN0cmVhbWAgaW52YXJpYW50cy4KICAgKgogICAqIFVzZSBzeW5jaHJvbm91cyBjb250cm9sbGVycyBvbmx5IHRvIGZvcndhcmQgKHBvdGVudGlhbGx5IHRyYW5zZm9ybWVkKQogICAqIGV2ZW50cyBmcm9tIGFub3RoZXIgc3RyZWFtIG9yIGEgZnV0dXJlLgogICAqCiAgICogQSBTdHJlYW0gc2hvdWxkIGJlIGluZXJ0IHVudGlsIGEgc3Vic2NyaWJlciBzdGFydHMgbGlzdGVuaW5nIG9uIGl0ICh1c2luZwogICAqIHRoZSBbb25MaXN0ZW5dIGNhbGxiYWNrIHRvIHN0YXJ0IHByb2R1Y2luZyBldmVudHMpLiBTdHJlYW1zIHNob3VsZCBub3QKICAgKiBsZWFrIHJlc291cmNlcyAobGlrZSB3ZWJzb2NrZXRzKSB3aGVuIG5vIHVzZXIgZXZlciBsaXN0ZW5zIG9uIHRoZSBzdHJlYW0uCiAgICoKICAgKiBUaGUgY29udHJvbGxlciBidWZmZXJzIGFsbCBpbmNvbWluZyBldmVudHMgdW50aWwgYSBzdWJzY3JpYmVyIGlzCiAgICogcmVnaXN0ZXJlZCwgYnV0IHRoaXMgZmVhdHVyZSBzaG91bGQgb25seSBiZSB1c2VkIGluIHJhcmUgY2lyY3Vtc3RhbmNlcy4KICAgKgogICAqIFRoZSBbb25QYXVzZV0gZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHN0cmVhbSBiZWNvbWVzCiAgICogcGF1c2VkLiBbb25SZXN1bWVdIGlzIGNhbGxlZCB3aGVuIHRoZSBzdHJlYW0gcmVzdW1lZC4KICAgKgogICAqIFRoZSBbb25MaXN0ZW5dIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBzdHJlYW0KICAgKiByZWNlaXZlcyBpdHMgbGlzdGVuZXIgYW5kIFtvbkNhbmNlbF0gd2hlbiB0aGUgbGlzdGVuZXIgZW5kcwogICAqIGl0cyBzdWJzY3JpcHRpb24uIElmIFtvbkNhbmNlbF0gbmVlZHMgdG8gcGVyZm9ybSBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uLAogICAqIFtvbkNhbmNlbF0gc2hvdWxkIHJldHVybiBhIGZ1dHVyZSB0aGF0IGNvbXBsZXRlcyB3aGVuIHRoZSBjYW5jZWwgb3BlcmF0aW9uCiAgICogaXMgZG9uZS4KICAgKgogICAqIElmIHRoZSBzdHJlYW0gaXMgY2FuY2VsZWQgYmVmb3JlIHRoZSBjb250cm9sbGVyIG5lZWRzIG5ldyBkYXRhIHRoZQogICAqIFtvblJlc3VtZV0gY2FsbCBtaWdodCBub3QgYmUgZXhlY3V0ZWQuCiAgICovCiAgZmFjdG9yeSBTdHJlYW1Db250cm9sbGVyKAogICAgICB7dm9pZCBvbkxpc3RlbigpLAogICAgICB2b2lkIG9uUGF1c2UoKSwKICAgICAgdm9pZCBvblJlc3VtZSgpLAogICAgICBvbkNhbmNlbCgpLAogICAgICBib29sIHN5bmM6IGZhbHNlfSkgewogICAgcmV0dXJuIHN5bmMKICAgICAgICA/IG5ldyBfU3luY1N0cmVhbUNvbnRyb2xsZXI8VD4ob25MaXN0ZW4sIG9uUGF1c2UsIG9uUmVzdW1lLCBvbkNhbmNlbCkKICAgICAgICA6IG5ldyBfQXN5bmNTdHJlYW1Db250cm9sbGVyPFQ+KG9uTGlzdGVuLCBvblBhdXNlLCBvblJlc3VtZSwgb25DYW5jZWwpOwogIH0KCiAgLyoqCiAgICogQSBjb250cm9sbGVyIHdoZXJlIFtzdHJlYW1dIGNhbiBiZSBsaXN0ZW5lZCB0byBtb3JlIHRoYW4gb25jZS4KICAgKgogICAqIFRoZSBbU3RyZWFtXSByZXR1cm5lZCBieSBbc3RyZWFtXSBpcyBhIGJyb2FkY2FzdCBzdHJlYW0uCiAgICogSXQgY2FuIGJlIGxpc3RlbmVkIHRvIG1vcmUgdGhhbiBvbmNlLgogICAqCiAgICogQSBTdHJlYW0gc2hvdWxkIGJlIGluZXJ0IHVudGlsIGEgc3Vic2NyaWJlciBzdGFydHMgbGlzdGVuaW5nIG9uIGl0ICh1c2luZwogICAqIHRoZSBbb25MaXN0ZW5dIGNhbGxiYWNrIHRvIHN0YXJ0IHByb2R1Y2luZyBldmVudHMpLiBTdHJlYW1zIHNob3VsZCBub3QKICAgKiBsZWFrIHJlc291cmNlcyAobGlrZSB3ZWJzb2NrZXRzKSB3aGVuIG5vIHVzZXIgZXZlciBsaXN0ZW5zIG9uIHRoZSBzdHJlYW0uCiAgICoKICAgKiBCcm9hZGNhc3Qgc3RyZWFtcyBkbyBub3QgYnVmZmVyIGV2ZW50cyB3aGVuIHRoZXJlIGlzIG5vIGxpc3RlbmVyLgogICAqCiAgICogVGhlIGNvbnRyb2xsZXIgZGlzdHJpYnV0ZXMgYW55IGV2ZW50cyB0byBhbGwgY3VycmVudGx5IHN1YnNjcmliZWQKICAgKiBsaXN0ZW5lcnMgYXQgdGhlIHRpbWUgd2hlbiBbYWRkXSwgW2FkZEVycm9yXSBvciBbY2xvc2VdIGlzIGNhbGxlZC4KICAgKiBJdCBpcyBub3QgYWxsb3dlZCB0byBjYWxsIGBhZGRgLCBgYWRkRXJyb3JgLCBvciBgY2xvc2VgIGJlZm9yZSBhIHByZXZpb3VzCiAgICogY2FsbCBoYXMgcmV0dXJuZWQuIFRoZSBjb250cm9sbGVyIGRvZXMgbm90IGhhdmUgYW55IGludGVybmFsIHF1ZXVlIG9mCiAgICogZXZlbnRzLCBhbmQgaWYgdGhlcmUgYXJlIG5vIGxpc3RlbmVycyBhdCB0aGUgdGltZSB0aGUgZXZlbnQgaXMgYWRkZWQsCiAgICogaXQgd2lsbCBqdXN0IGJlIGRyb3BwZWQsIG9yLCBpZiBpdCBpcyBhbiBlcnJvciwgYmUgcmVwb3J0ZWQgYXMgdW5jYXVnaHQuCiAgICoKICAgKiBFYWNoIGxpc3RlbmVyIHN1YnNjcmlwdGlvbiBpcyBoYW5kbGVkIGluZGVwZW5kZW50bHksCiAgICogYW5kIGlmIG9uZSBwYXVzZXMsIG9ubHkgdGhlIHBhdXNpbmcgbGlzdGVuZXIgaXMgYWZmZWN0ZWQuCiAgICogQSBwYXVzZWQgbGlzdGVuZXIgd2lsbCBidWZmZXIgZXZlbnRzIGludGVybmFsbHkgdW50aWwgdW5wYXVzZWQgb3IgY2FuY2VsZWQuCiAgICoKICAgKiBJZiBbc3luY10gaXMgdHJ1ZSwgZXZlbnRzIG1heSBiZSBmaXJlZCBkaXJlY3RseSBieSB0aGUgc3RyZWFtJ3MKICAgKiBzdWJzY3JpcHRpb25zIGR1cmluZyBhbiBbYWRkXSwgW2FkZEVycm9yXSBvciBbY2xvc2VdIGNhbGwuCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBjb250cm9sbGVyIGlzIGEgW1N5bmNocm9ub3VzU3RyZWFtQ29udHJvbGxlcl0sCiAgICogYW5kIG11c3QgYmUgdXNlZCB3aXRoIHRoZSBjYXJlIGFuZCBhdHRlbnRpb24gbmVjZXNzYXJ5IHRvIG5vdCBicmVhawogICAqIHRoZSBbU3RyZWFtXSBjb250cmFjdC4KICAgKiBTZWUgW0NvbXBsZXRlci5zeW5jXSBmb3Igc29tZSBleHBsYW5hdGlvbnMgb24gd2hlbiBhIHN5bmNocm9ub3VzCiAgICogZGlzcGF0Y2hpbmcgY2FuIGJlIHVzZWQuCiAgICogSWYgaW4gZG91YnQsIGtlZXAgdGhlIGNvbnRyb2xsZXIgbm9uLXN5bmMuCiAgICoKICAgKiBJZiBbc3luY10gaXMgZmFsc2UsIHRoZSBldmVudCB3aWxsIGFsd2F5cyBiZSBmaXJlZCBhdCBhIGxhdGVyIHRpbWUsCiAgICogYWZ0ZXIgdGhlIGNvZGUgYWRkaW5nIHRoZSBldmVudCBoYXMgY29tcGxldGVkLgogICAqIEluIHRoYXQgY2FzZSwgbm8gZ3VhcmFudGVlcyBhcmUgZ2l2ZW4gd2l0aCByZWdhcmQgdG8gd2hlbgogICAqIG11bHRpcGxlIGxpc3RlbmVycyBnZXQgdGhlIGV2ZW50cywgZXhjZXB0IHRoYXQgZWFjaCBsaXN0ZW5lciB3aWxsIGdldAogICAqIGFsbCBldmVudHMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIEVhY2ggc3Vic2NyaXB0aW9uIGhhbmRsZXMgdGhlIGV2ZW50cwogICAqIGluZGl2aWR1YWxseS4KICAgKiBJZiB0d28gZXZlbnRzIGFyZSBzZW50IG9uIGFuIGFzeW5jIGNvbnRyb2xsZXIgd2l0aCB0d28gbGlzdGVuZXJzLAogICAqIG9uZSBvZiB0aGUgbGlzdGVuZXJzIG1heSBnZXQgYm90aCBldmVudHMKICAgKiBiZWZvcmUgdGhlIG90aGVyIGxpc3RlbmVyIGdldHMgYW55LgogICAqIEEgbGlzdGVuZXIgbXVzdCBiZSBzdWJzY3JpYmVkIGJvdGggd2hlbiB0aGUgZXZlbnQgaXMgaW5pdGlhdGVkCiAgICogKHRoYXQgaXMsIHdoZW4gW2FkZF0gaXMgY2FsbGVkKQogICAqIGFuZCB3aGVuIHRoZSBldmVudCBpcyBsYXRlciBkZWxpdmVyZWQsCiAgICogaW4gb3JkZXIgdG8gcmVjZWl2ZSB0aGUgZXZlbnQuCiAgICoKICAgKiBUaGUgW29uTGlzdGVuXSBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgZmlyc3QgbGlzdGVuZXIgaXMgc3Vic2NyaWJlZCwKICAgKiBhbmQgdGhlIFtvbkNhbmNlbF0gaXMgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIGxvbmdlciBhbnkgYWN0aXZlIGxpc3RlbmVycy4KICAgKiBJZiBhIGxpc3RlbmVyIGlzIGFkZGVkIGFnYWluIGxhdGVyLCBhZnRlciB0aGUgW29uQ2FuY2VsXSB3YXMgY2FsbGVkLAogICAqIHRoZSBbb25MaXN0ZW5dIHdpbGwgYmUgY2FsbGVkIGFnYWluLgogICAqLwogIGZhY3RvcnkgU3RyZWFtQ29udHJvbGxlci5icm9hZGNhc3QoCiAgICAgIHt2b2lkIG9uTGlzdGVuKCksIHZvaWQgb25DYW5jZWwoKSwgYm9vbCBzeW5jOiBmYWxzZX0pIHsKICAgIHJldHVybiBzeW5jCiAgICAgICAgPyBuZXcgX1N5bmNCcm9hZGNhc3RTdHJlYW1Db250cm9sbGVyPFQ+KG9uTGlzdGVuLCBvbkNhbmNlbCkKICAgICAgICA6IG5ldyBfQXN5bmNCcm9hZGNhc3RTdHJlYW1Db250cm9sbGVyPFQ+KG9uTGlzdGVuLCBvbkNhbmNlbCk7CiAgfQoKICAvKioKICAgKiBUaGUgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gdGhlIHN0cmVhbSBpcyBsaXN0ZW5lZCB0by4KICAgKgogICAqIE1heSBiZSBzZXQgdG8gYG51bGxgLCBpbiB3aGljaCBjYXNlIG5vIGNhbGxiYWNrIHdpbGwgaGFwcGVuLgogICAqLwogIENvbnRyb2xsZXJDYWxsYmFjayBnZXQgb25MaXN0ZW47CgogIHZvaWQgc2V0IG9uTGlzdGVuKHZvaWQgb25MaXN0ZW5IYW5kbGVyKCkpOwoKICAvKioKICAgKiBUaGUgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gdGhlIHN0cmVhbSBpcyBwYXVzZWQuCiAgICoKICAgKiBNYXkgYmUgc2V0IHRvIGBudWxsYCwgaW4gd2hpY2ggY2FzZSBubyBjYWxsYmFjayB3aWxsIGhhcHBlbi4KICAgKgogICAqIFBhdXNlIHJlbGF0ZWQgY2FsbGJhY2tzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIGJyb2FkY2FzdCBzdHJlYW0gY29udHJvbGxlcnMuCiAgICovCiAgQ29udHJvbGxlckNhbGxiYWNrIGdldCBvblBhdXNlOwoKICB2b2lkIHNldCBvblBhdXNlKHZvaWQgb25QYXVzZUhhbmRsZXIoKSk7CgogIC8qKgogICAqIFRoZSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGUgc3RyZWFtIGlzIHJlc3VtZWQuCiAgICoKICAgKiBNYXkgYmUgc2V0IHRvIGBudWxsYCwgaW4gd2hpY2ggY2FzZSBubyBjYWxsYmFjayB3aWxsIGhhcHBlbi4KICAgKgogICAqIFBhdXNlIHJlbGF0ZWQgY2FsbGJhY2tzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIGJyb2FkY2FzdCBzdHJlYW0gY29udHJvbGxlcnMuCiAgICovCiAgQ29udHJvbGxlckNhbGxiYWNrIGdldCBvblJlc3VtZTsKCiAgdm9pZCBzZXQgb25SZXN1bWUodm9pZCBvblJlc3VtZUhhbmRsZXIoKSk7CgogIC8qKgogICAqIFRoZSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGUgc3RyZWFtIGlzIGNhbmNlbGVkLgogICAqCiAgICogTWF5IGJlIHNldCB0byBgbnVsbGAsIGluIHdoaWNoIGNhc2Ugbm8gY2FsbGJhY2sgd2lsbCBoYXBwZW4uCiAgICovCiAgQ29udHJvbGxlckNhbmNlbENhbGxiYWNrIGdldCBvbkNhbmNlbDsKCiAgdm9pZCBzZXQgb25DYW5jZWwob25DYW5jZWxIYW5kbGVyKCkpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgdmlldyBvZiB0aGlzIG9iamVjdCB0aGF0IG9ubHkgZXhwb3NlcyB0aGUgW1N0cmVhbVNpbmtdIGludGVyZmFjZS4KICAgKi8KICBTdHJlYW1TaW5rPFQ+IGdldCBzaW5rOwoKICAvKioKICAgKiBXaGV0aGVyIHRoZSBzdHJlYW0gY29udHJvbGxlciBpcyBjbG9zZWQgZm9yIGFkZGluZyBtb3JlIGV2ZW50cy4KICAgKgogICAqIFRoZSBjb250cm9sbGVyIGJlY29tZXMgY2xvc2VkIGJ5IGNhbGxpbmcgdGhlIFtjbG9zZV0gbWV0aG9kLgogICAqIE5ldyBldmVudHMgY2Fubm90IGJlIGFkZGVkLCBieSBjYWxsaW5nIFthZGRdIG9yIFthZGRFcnJvcl0sCiAgICogdG8gYSBjbG9zZWQgY29udHJvbGxlci4KICAgKgogICAqIElmIHRoZSBjb250cm9sbGVyIGlzIGNsb3NlZCwKICAgKiB0aGUgImRvbmUiIGV2ZW50IG1pZ2h0IG5vdCBoYXZlIGJlZW4gZGVsaXZlcmVkIHlldCwKICAgKiBidXQgaXQgaGFzIGJlZW4gc2NoZWR1bGVkLCBhbmQgaXQgaXMgdG9vIGxhdGUgdG8gYWRkIG1vcmUgZXZlbnRzLgogICAqLwogIGJvb2wgZ2V0IGlzQ2xvc2VkOwoKICAvKioKICAgKiBXaGV0aGVyIHRoZSBzdWJzY3JpcHRpb24gd291bGQgbmVlZCB0byBidWZmZXIgZXZlbnRzLgogICAqCiAgICogVGhpcyBpcyB0aGUgY2FzZSBpZiB0aGUgY29udHJvbGxlcidzIHN0cmVhbSBoYXMgYSBsaXN0ZW5lciBhbmQgaXQgaXMKICAgKiBwYXVzZWQsIG9yIGlmIGl0IGhhcyBub3QgcmVjZWl2ZWQgYSBsaXN0ZW5lciB5ZXQuIEluIHRoYXQgY2FzZSwgdGhlCiAgICogY29udHJvbGxlciBpcyBjb25zaWRlcmVkIHBhdXNlZCBhcyB3ZWxsLgogICAqCiAgICogQSBicm9hZGNhc3Qgc3RyZWFtIGNvbnRyb2xsZXIgaXMgbmV2ZXIgY29uc2lkZXJlZCBwYXVzZWQuIEl0IGFsd2F5cwogICAqIGZvcndhcmRzIGl0cyBldmVudHMgdG8gYWxsIHVuY2FuY2VsZWQgc3Vic2NyaXB0aW9ucywgaWYgYW55LAogICAqIGFuZCBsZXQgdGhlIHN1YnNjcmlwdGlvbnMgaGFuZGxlIHRoZWlyIG93biBwYXVzaW5nIGFuZCBidWZmZXJpbmcuCiAgICovCiAgYm9vbCBnZXQgaXNQYXVzZWQ7CgogIC8qKiBXaGV0aGVyIHRoZXJlIGlzIGEgc3Vic2NyaWJlciBvbiB0aGUgW1N0cmVhbV0uICovCiAgYm9vbCBnZXQgaGFzTGlzdGVuZXI7CgogIC8qKgogICAqIFNlbmRzIGEgZGF0YSBbZXZlbnRdLgogICAqCiAgICogTGlzdGVuZXJzIHJlY2VpdmUgdGhpcyBldmVudCBpbiBhIGxhdGVyIG1pY3JvdGFzay4KICAgKgogICAqIE5vdGUgdGhhdCBhIHN5bmNocm9ub3VzIGNvbnRyb2xsZXIgKGNyZWF0ZWQgYnkgcGFzc2luZyB0cnVlIHRvIHRoZSBgc3luY2AKICAgKiBwYXJhbWV0ZXIgb2YgdGhlIGBTdHJlYW1Db250cm9sbGVyYCBjb25zdHJ1Y3RvcikgZGVsaXZlcnMgZXZlbnRzCiAgICogaW1tZWRpYXRlbHkuIFNpbmNlIHRoaXMgYmVoYXZpb3IgdmlvbGF0ZXMgdGhlIGNvbnRyYWN0IG1lbnRpb25lZCBoZXJlLAogICAqIHN5bmNocm9ub3VzIGNvbnRyb2xsZXJzIHNob3VsZCBvbmx5IGJlIHVzZWQgYXMgZGVzY3JpYmVkIGluIHRoZQogICAqIGRvY3VtZW50YXRpb24gdG8gZW5zdXJlIHRoYXQgdGhlIGRlbGl2ZXJlZCBldmVudHMgYWx3YXlzICphcHBlYXIqIGFzIGlmCiAgICogdGhleSB3ZXJlIGRlbGl2ZXJlZCBpbiBhIHNlcGFyYXRlIG1pY3JvdGFzay4KICAgKi8KICB2b2lkIGFkZChUIGV2ZW50KTsKCiAgLyoqCiAgICogU2VuZHMgb3IgZW5xdWV1ZXMgYW4gZXJyb3IgZXZlbnQuCiAgICoKICAgKiBJZiBbZXJyb3JdIGlzIGBudWxsYCwgaXQgaXMgcmVwbGFjZWQgYnkgYSBbTnVsbFRocm93bkVycm9yXS4KICAgKgogICAqIExpc3RlbmVycyByZWNlaXZlIHRoaXMgZXZlbnQgYXQgYSBsYXRlciBtaWNyb3Rhc2suIFRoaXMgYmVoYXZpb3IgY2FuIGJlCiAgICogb3ZlcnJpZGRlbiBieSB1c2luZyBgc3luY2AgY29udHJvbGxlcnMuIE5vdGUsIGhvd2V2ZXIsIHRoYXQgc3luYwogICAqIGNvbnRyb2xsZXJzIGhhdmUgdG8gc2F0aXNmeSB0aGUgcHJlY29uZGl0aW9ucyBtZW50aW9uZWQgaW4gdGhlCiAgICogZG9jdW1lbnRhdGlvbiBvZiB0aGUgY29uc3RydWN0b3JzLgogICAqLwogIHZvaWQgYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSk7CgogIC8qKgogICAqIENsb3NlcyB0aGUgc3RyZWFtLgogICAqCiAgICogTGlzdGVuZXJzIHJlY2VpdmUgdGhlIGRvbmUgZXZlbnQgYXQgYSBsYXRlciBtaWNyb3Rhc2suIFRoaXMgYmVoYXZpb3IgY2FuIGJlCiAgICogb3ZlcnJpZGRlbiBieSB1c2luZyBgc3luY2AgY29udHJvbGxlcnMuIE5vdGUsIGhvd2V2ZXIsIHRoYXQgc3luYwogICAqIGNvbnRyb2xsZXJzIGhhdmUgdG8gc2F0aXNmeSB0aGUgcHJlY29uZGl0aW9ucyBtZW50aW9uZWQgaW4gdGhlCiAgICogZG9jdW1lbnRhdGlvbiBvZiB0aGUgY29uc3RydWN0b3JzLgogICAqLwogIEZ1dHVyZSBjbG9zZSgpOwoKICAvKioKICAgKiBSZWNlaXZlcyBldmVudHMgZnJvbSBbc291cmNlXSBhbmQgcHV0cyB0aGVtIGludG8gdGhpcyBjb250cm9sbGVyJ3Mgc3RyZWFtLgogICAqCiAgICogUmV0dXJucyBhIGZ1dHVyZSB3aGljaCBjb21wbGV0ZXMgd2hlbiB0aGUgc291cmNlIHN0cmVhbSBpcyBkb25lLgogICAqCiAgICogRXZlbnRzIG11c3Qgbm90IGJlIGFkZGVkIGRpcmVjdGx5IHRvIHRoaXMgY29udHJvbGxlciB1c2luZyBbYWRkXSwKICAgKiBbYWRkRXJyb3JdLCBbY2xvc2VdIG9yIFthZGRTdHJlYW1dLCB1bnRpbCB0aGUgcmV0dXJuZWQgZnV0dXJlCiAgICogaXMgY29tcGxldGUuCiAgICoKICAgKiBEYXRhIGFuZCBlcnJvciBldmVudHMgYXJlIGZvcndhcmRlZCB0byB0aGlzIGNvbnRyb2xsZXIncyBzdHJlYW0uIEEgZG9uZQogICAqIGV2ZW50IG9uIHRoZSBzb3VyY2Ugd2lsbCBlbmQgdGhlIGBhZGRTdHJlYW1gIG9wZXJhdGlvbiBhbmQgY29tcGxldGUgdGhlCiAgICogcmV0dXJuZWQgZnV0dXJlLgogICAqCiAgICogSWYgW2NhbmNlbE9uRXJyb3JdIGlzIHRydWUsIG9ubHkgdGhlIGZpcnN0IGVycm9yIG9uIFtzb3VyY2VdIGlzCiAgICogZm9yd2FyZGVkIHRvIHRoZSBjb250cm9sbGVyJ3Mgc3RyZWFtLCBhbmQgdGhlIGBhZGRTdHJlYW1gIGVuZHMKICAgKiBhZnRlciB0aGlzLiBJZiBbY2FuY2VsT25FcnJvcl0gaXMgZmFsc2UsIGFsbCBlcnJvcnMgYXJlIGZvcndhcmRlZAogICAqIGFuZCBvbmx5IGEgZG9uZSBldmVudCB3aWxsIGVuZCB0aGUgYGFkZFN0cmVhbWAuCiAgICogSWYgW2NhbmNlbE9uRXJyb3JdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGZhbHNlLgogICAqLwogIEZ1dHVyZSBhZGRTdHJlYW0oU3RyZWFtPFQ+IHNvdXJjZSwge2Jvb2wgY2FuY2VsT25FcnJvcn0pOwp9CgovKioKICogQSBzdHJlYW0gY29udHJvbGxlciB0aGF0IGRlbGl2ZXJzIGl0cyBldmVudHMgc3luY2hyb25vdXNseS4KICoKICogQSBzeW5jaHJvbm91cyBzdHJlYW0gY29udHJvbGxlciBpcyBpbnRlbmRlZCBmb3IgY2FzZXMgd2hlcmUKICogYW4gYWxyZWFkeSBhc3luY2hyb25vdXMgZXZlbnQgdHJpZ2dlcnMgYW4gZXZlbnQgb24gYSBzdHJlYW0uCiAqCiAqIEluc3RlYWQgb2YgYWRkaW5nIHRoZSBldmVudCB0byB0aGUgc3RyZWFtIGluIGEgbGF0ZXIgbWljcm90YXNrLAogKiBjYXVzaW5nIGV4dHJhIGxhdGVuY3ksIHRoZSBldmVudCBpcyBpbnN0ZWFkIGZpcmVkIGltbWVkaWF0ZWx5IGJ5IHRoZQogKiBzeW5jaHJvbm91cyBzdHJlYW0gY29udHJvbGxlciwgYXMgaWYgdGhlIHN0cmVhbSBldmVudCB3YXMKICogdGhlIGN1cnJlbnQgZXZlbnQgb3IgbWljcm90YXNrLgogKgogKiBUaGUgc3luY2hyb25vdXMgc3RyZWFtIGNvbnRyb2xsZXIgY2FuIGJlIHVzZWQgdG8gYnJlYWsgdGhlIGNvbnRyYWN0CiAqIG9uIFtTdHJlYW1dLCBhbmQgaXQgbXVzdCBiZSB1c2VkIGNhcmVmdWxseSB0byBhdm9pZCBkb2luZyBzby4KICoKICogVGhlIG9ubHkgYWR2YW50YWdlIHRvIHVzaW5nIGEgW1N5bmNocm9ub3VzU3RyZWFtQ29udHJvbGxlcl0gb3ZlciBhCiAqIG5vcm1hbCBbU3RyZWFtQ29udHJvbGxlcl0gaXMgdGhlIGltcHJvdmVkIGxhdGVuY3kuCiAqIE9ubHkgdXNlIHRoZSBzeW5jaHJvbm91cyB2ZXJzaW9uIGlmIHRoZSBpbXByb3ZlbWVudCBpcyBzaWduaWZpY2FudCwKICogYW5kIGlmIGl0cyB1c2UgaXMgc2FmZS4gT3RoZXJ3aXNlIGp1c3QgdXNlIGEgbm9ybWFsIHN0cmVhbSBjb250cm9sbGVyLAogKiB3aGljaCB3aWxsIGFsd2F5cyBoYXZlIHRoZSBjb3JyZWN0IGJlaGF2aW9yIGZvciBhIFtTdHJlYW1dLCBhbmQgd29uJ3QKICogYWNjaWRlbnRhbGx5IGJyZWFrIG90aGVyIGNvZGUuCiAqCiAqIEFkZGluZyBldmVudHMgdG8gYSBzeW5jaHJvbm91cyBjb250cm9sbGVyIHNob3VsZCBvbmx5IGhhcHBlbiBhcyB0aGUKICogdmVyeSBsYXN0IHBhcnQgb2YgdGhlIGhhbmRsaW5nIG9mIHRoZSBvcmlnaW5hbCBldmVudC4KICogQXQgdGhhdCBwb2ludCwgYWRkaW5nIGFuIGV2ZW50IHRvIHRoZSBzdHJlYW0gaXMgZXF1aXZhbGVudCB0bwogKiByZXR1cm5pbmcgdG8gdGhlIGV2ZW50IGxvb3AgYW5kIGFkZGluZyB0aGUgZXZlbnQgaW4gdGhlIG5leHQgbWljcm90YXNrLgogKgogKiBFYWNoIGxpc3RlbmVyIGNhbGxiYWNrIHdpbGwgYmUgcnVuIGFzIGlmIGl0IHdhcyBhIHRvcC1sZXZlbCBldmVudAogKiBvciBtaWNyb3Rhc2suIFRoaXMgbWVhbnMgdGhhdCBpZiBpdCB0aHJvd3MsIHRoZSBlcnJvciB3aWxsIGJlIHJlcG9ydGVkIGFzCiAqIHVuY2F1Z2h0IGFzIHNvb24gYXMgcG9zc2libGUuCiAqIFRoaXMgaXMgb25lIHJlYXNvbiB0byBhZGQgdGhlIGV2ZW50IGFzIHRoZSBsYXN0IHRoaW5nIGluIHRoZSBvcmlnaW5hbCBldmVudAogKiBoYW5kbGVyIC0gYW55IGFjdGlvbiBkb25lIGFmdGVyIGFkZGluZyB0aGUgZXZlbnQgd2lsbCBkZWxheSB0aGUgcmVwb3J0IG9mCiAqIGVycm9ycyBpbiB0aGUgZXZlbnQgbGlzdGVuZXIgY2FsbGJhY2tzLgogKgogKiBJZiBhbiBldmVudCBpcyBhZGRlZCBpbiBhIHNldHRpbmcgdGhhdCBpc24ndCBrbm93biB0byBiZSBhbm90aGVyIGV2ZW50LAogKiBpdCBtYXkgY2F1c2UgdGhlIHN0cmVhbSdzIGxpc3RlbmVyIHRvIGdldCB0aGF0IGV2ZW50IGJlZm9yZSB0aGUgbGlzdGVuZXIKICogaXMgcmVhZHkgdG8gaGFuZGxlIGl0LiBXZSBwcm9taXNlIHRoYXQgYWZ0ZXIgY2FsbGluZyBbU3RyZWFtLmxpc3Rlbl0sCiAqIHlvdSB3b24ndCBnZXQgYW55IGV2ZW50cyB1bnRpbCB0aGUgY29kZSBkb2luZyB0aGUgbGlzdGVuIGhhcyBjb21wbGV0ZWQuCiAqIENhbGxpbmcgW2FkZF0gaW4gcmVzcG9uc2UgdG8gYSBmdW5jdGlvbiBjYWxsIG9mIHVua25vd24gb3JpZ2luIG1heSBicmVhawogKiB0aGF0IHByb21pc2UuCiAqCiAqIEFuIFtvbkxpc3Rlbl0gY2FsbGJhY2sgZnJvbSB0aGUgY29udHJvbGxlciBpcyAqbm90KiBhbiBhc3luY2hyb25vdXMgZXZlbnQsCiAqIGFuZCBhZGRpbmcgZXZlbnRzIHRvIHRoZSBjb250cm9sbGVyIGluIHRoZSBgb25MaXN0ZW5gIGNhbGxiYWNrIGlzIGFsd2F5cwogKiB3cm9uZy4gVGhlIGV2ZW50cyB3aWxsIGJlIGRlbGl2ZXJlZCBiZWZvcmUgdGhlIGxpc3RlbmVyIGhhcyBldmVuIHJlY2VpdmVkCiAqIHRoZSBzdWJzY3JpcHRpb24geWV0LgogKgogKiBUaGUgc3luY2hyb25vdXMgYnJvYWRjYXN0IHN0cmVhbSBjb250cm9sbGVyIGFsc28gaGFzIGEgcmVzdHJpY3Rpb25zIHRoYXQgYQogKiBub3JtYWwgc3RyZWFtIGNvbnRyb2xsZXIgZG9lcyBub3Q6CiAqIFRoZSBbYWRkXSwgW2FkZEVycm9yXSwgW2Nsb3NlXSBhbmQgW2FkZFN0cmVhbV0gbWV0aG9kcyAqbXVzdCBub3QqIGJlCiAqIGNhbGxlZCB3aGlsZSBhbiBldmVudCBpcyBiZWluZyBkZWxpdmVyZWQuCiAqIFRoYXQgaXMsIGlmIGEgY2FsbGJhY2sgb24gYSBzdWJzY3JpcHRpb24gb24gdGhlIGNvbnRyb2xsZXIncyBzdHJlYW0gY2F1c2VzCiAqIGEgY2FsbCB0byBhbnkgb2YgdGhlIGZ1bmN0aW9ucyBhYm92ZSwgdGhlIGNhbGwgd2lsbCBmYWlsLgogKiBBIGJyb2FkY2FzdCBzdHJlYW0gbWF5IGhhdmUgbW9yZSB0aGFuIG9uZSBsaXN0ZW5lciwgYW5kIGlmIGFuCiAqIGV2ZW50IGlzIGFkZGVkIHN5bmNocm9ub3VzbHkgd2hpbGUgYW5vdGhlciBpcyBiZWluZyBhbHNvIGluIHRoZSBwcm9jZXNzCiAqIG9mIGJlaW5nIGFkZGVkLCB0aGUgbGF0dGVyIGV2ZW50IG1pZ2h0IHJlYWNoIHNvbWUgbGlzdGVuZXJzIGJlZm9yZQogKiB0aGUgZm9ybWVyLiBUbyBwcmV2ZW50IHRoYXQsIGFuIGV2ZW50IGNhbm5vdCBiZSBhZGRlZCB3aGlsZSBhIHByZXZpb3VzCiAqIGV2ZW50IGlzIGJlaW5nIGZpcmVkLgogKiBUaGlzIGd1YXJhbnRlZXMgdGhhdCBhbiBldmVudCBpcyBmdWxseSBkZWxpdmVyZWQgd2hlbiB0aGUKICogZmlyc3QgW2FkZF0sIFthZGRFcnJvcl0gb3IgW2Nsb3NlXSByZXR1cm5zLAogKiBhbmQgZnVydGhlciBldmVudHMgd2lsbCBiZSBkZWxpdmVyZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCiAqCiAqIFRoaXMgc3RpbGwgb25seSBndWFyYW50ZWVzIHRoYXQgdGhlIGV2ZW50IGlzIGRlbGl2ZXJlZCB0byB0aGUgc3Vic2NyaXB0aW9uLgogKiBJZiB0aGUgc3Vic2NyaXB0aW9uIGlzIHBhdXNlZCwgdGhlIGFjdHVhbCBjYWxsYmFjayBtYXkgc3RpbGwgaGFwcGVuIGxhdGVyLAogKiBhbmQgdGhlIGV2ZW50IHdpbGwgaW5zdGVhZCBiZSBidWZmZXJlZCBieSB0aGUgc3Vic2NyaXB0aW9uLgogKiBCYXJyaW5nIHBhdXNpbmcsIGFuZCB0aGUgZm9sbG93aW5nIGJ1ZmZlcmVkIGV2ZW50cyB0aGF0IGhhdmVuJ3QgYmVlbgogKiBkZWxpdmVyZWQgeWV0LCBjYWxsYmFja3Mgd2lsbCBiZSBjYWxsZWQgc3luY2hyb25vdXNseSB3aGVuIGFuIGV2ZW50IGlzIGFkZGVkLgogKgogKiBBZGRpbmcgYW4gZXZlbnQgdG8gYSBzeW5jaHJvbm91cyBub24tYnJvYWRjYXN0IHN0cmVhbSBjb250cm9sbGVyIHdoaWxlCiAqIGFub3RoZXIgZXZlbnQgaXMgaW4gcHJvZ3Jlc3MgbWF5IGNhdXNlIHRoZSBzZWNvbmQgZXZlbnQgdG8gYmUgZGVsYXllZAogKiBhbmQgbm90IGJlIGRlbGl2ZXJlZCBzeW5jaHJvbm91c2x5LCBhbmQgdW50aWwgdGhhdCBldmVudCBpcyBkZWxpdmVyZWQsCiAqIHRoZSBjb250cm9sbGVyIHdpbGwgbm90IGFjdCBzeW5jaHJvbm91c2x5LgogKi8KYWJzdHJhY3QgY2xhc3MgU3luY2hyb25vdXNTdHJlYW1Db250cm9sbGVyPFQ+IGltcGxlbWVudHMgU3RyZWFtQ29udHJvbGxlcjxUPiB7CiAgLyoqCiAgICogQWRkcyBldmVudCB0byB0aGUgY29udHJvbGxlcidzIHN0cmVhbS4KICAgKgogICAqIEFzIFtTdHJlYW1Db250cm9sbGVyLmFkZF0sIGJ1dCBtdXN0IG5vdCBiZSBjYWxsZWQgd2hpbGUgYW4gZXZlbnQgaXMKICAgKiBiZWluZyBhZGRlZCBieSBbYWRkXSwgW2FkZEVycm9yXSBvciBbY2xvc2VdLgogICAqLwogIHZvaWQgYWRkKFQgZGF0YSk7CgogIC8qKgogICAqIEFkZHMgZXJyb3IgdG8gdGhlIGNvbnRyb2xsZXIncyBzdHJlYW0uCiAgICoKICAgKiBBcyBbU3RyZWFtQ29udHJvbGxlci5hZGRFcnJvcl0sIGJ1dCBtdXN0IG5vdCBiZSBjYWxsZWQgd2hpbGUgYW4gZXZlbnQgaXMKICAgKiBiZWluZyBhZGRlZCBieSBbYWRkXSwgW2FkZEVycm9yXSBvciBbY2xvc2VdLgogICAqLwogIHZvaWQgYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSk7CgogIC8qKgogICAqIENsb3NlcyB0aGUgY29udHJvbGxlcidzIHN0cmVhbS4KICAgKgogICAqIEFzIFtTdHJlYW1Db250cm9sbGVyLmNsb3NlXSwgYnV0IG11c3Qgbm90IGJlIGNhbGxlZCB3aGlsZSBhbiBldmVudCBpcwogICAqIGJlaW5nIGFkZGVkIGJ5IFthZGRdLCBbYWRkRXJyb3JdIG9yIFtjbG9zZV0uCiAgICovCiAgRnV0dXJlIGNsb3NlKCk7Cn0KCmFic3RyYWN0IGNsYXNzIF9TdHJlYW1Db250cm9sbGVyTGlmZWN5Y2xlPFQ+IHsKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gX3N1YnNjcmliZSgKICAgICAgdm9pZCBvbkRhdGEoVCBkYXRhKSwgRnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yKTsKICB2b2lkIF9yZWNvcmRQYXVzZShTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKSB7fQogIHZvaWQgX3JlY29yZFJlc3VtZShTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKSB7fQogIEZ1dHVyZSBfcmVjb3JkQ2FuY2VsKFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pID0+IG51bGw7Cn0KCi8vIEJhc2UgdHlwZSBmb3IgaW1wbGVtZW50YXRpb25zIG9mIHN0cmVhbSBjb250cm9sbGVycy4KYWJzdHJhY3QgY2xhc3MgX1N0cmVhbUNvbnRyb2xsZXJCYXNlPFQ+CiAgICBpbXBsZW1lbnRzCiAgICAgICAgU3RyZWFtQ29udHJvbGxlcjxUPiwKICAgICAgICBfU3RyZWFtQ29udHJvbGxlckxpZmVjeWNsZTxUPiwKICAgICAgICBfRXZlbnRTaW5rPFQ+LAogICAgICAgIF9FdmVudERpc3BhdGNoPFQ+IHt9CgovKioKICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBbU3RyZWFtQ29udHJvbGxlcl0uCiAqCiAqIENvbnRyb2xzIGEgc3RyZWFtIHRoYXQgb25seSBzdXBwb3J0cyBhIHNpbmdsZSBjb250cm9sbGVyLgogKi8KYWJzdHJhY3QgY2xhc3MgX1N0cmVhbUNvbnRyb2xsZXI8VD4gaW1wbGVtZW50cyBfU3RyZWFtQ29udHJvbGxlckJhc2U8VD4gewogIC8vIFRoZSBzdGF0ZXMgYXJlIGJpdC1mbGFncy4gTW9yZSB0aGFuIG9uZSBjYW4gYmUgc2V0IGF0IGEgdGltZS4KICAvLwogIC8vIFRoZSAic3Vic2NyaXB0aW9uIHN0YXRlIiBnb2VzIHRocm91Z2ggdGhlIHN0YXRlczoKICAvLyAgIGluaXRpYWwgLT4gc3Vic2NyaWJlZCAtPiBjYW5jZWxlZC4KICAvLyBUaGVzZSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgogIC8vIFRoZSAiY2xvc2VkIiBzdGF0ZSByZWNvcmRzIHdoZXRoZXIgdGhlIFtjbG9zZV0gbWV0aG9kIGhhcyBiZWVuIGNhbGxlZAogIC8vIG9uIHRoZSBjb250cm9sbGVyLiBUaGlzIGNhbiBiZSBkb25lIGF0IGFueSB0aW1lLiBJZiBkb25lIGJlZm9yZQogIC8vIHN1YnNjcmlwdGlvbiwgdGhlIGRvbmUgZXZlbnQgaXMgcXVldWVkLiBJZiBkb25lIGFmdGVyIGNhbmNlbCwgdGhlIGRvbmUKICAvLyBldmVudCBpcyBpZ25vcmVkIChqdXN0IGFzIGFueSBvdGhlciBldmVudCBhZnRlciBhIGNhbmNlbCkuCgogIC8qKiBUaGUgY29udHJvbGxlciBpcyBpbiBpdHMgaW5pdGlhbCBzdGF0ZSB3aXRoIG5vIHN1YnNjcmlwdGlvbi4gKi8KICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9JTklUSUFMID0gMDsKICAvKioKICAgKiBUaGUgY29udHJvbGxlciBoYXMgYSBzdWJzY3JpcHRpb24sIGJ1dCBoYXNuJ3QgYmVlbiBjbG9zZWQgb3IgY2FuY2VsZWQuCiAgICoKICAgKiBLZWVwIGluIHN5bmMgd2l0aAogICAqIHJ1bnRpbWUvdm0vc3RhY2tfdHJhY2UuY2M6a1N0cmVhbUNvbnRyb2xsZXJfU3RhdGVTdWJzY3JpYmVkLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX1NVQlNDUklCRUQgPSAxOwogIC8qKiBUaGUgc3Vic2NyaXB0aW9uIGlzIGNhbmNlbGVkLiAqLwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0NBTkNFTEVEID0gMjsKICAvKiogTWFzayBmb3IgdGhlIHN1YnNjcmlwdGlvbiBzdGF0ZS4gKi8KICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9TVUJTQ1JJUFRJT05fTUFTSyA9IDM7CgogIC8vIFRoZSBmb2xsb3dpbmcgc3RhdGUgcmVsYXRlIHRvIHRoZSBjb250cm9sbGVyLCBub3QgdGhlIHN1YnNjcmlwdGlvbi4KICAvLyBJZiBjbG9zZWQsIGFkZGluZyBtb3JlIGV2ZW50cyBpcyBub3QgYWxsb3dlZC4KICAvLyBJZiBleGVjdXRpbmcgYW4gW2FkZFN0cmVhbV0sIG5ldyBldmVudHMgYXJlIG5vdCBhbGxvd2VkIGVpdGhlciwgYnV0IHdpbGwKICAvLyBiZSBhZGRlZCBieSB0aGUgc3RyZWFtLgoKICAvKioKICAgKiBUaGUgY29udHJvbGxlciBpcyBjbG9zZWQgZHVlIHRvIGNhbGxpbmcgW2Nsb3NlXS4KICAgKgogICAqIFdoZW4gdGhlIHN0cmVhbSBpcyBjbG9zZWQsIHlvdSBjYW4gbmVpdGhlciBhZGQgbmV3IGV2ZW50cyBub3IgYWRkIG5ldwogICAqIGxpc3RlbmVycy4KICAgKi8KICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9DTE9TRUQgPSA0OwogIC8qKgogICAqIFRoZSBjb250cm9sbGVyIGlzIGluIHRoZSBtaWRkbGUgb2YgYW4gW2FkZFN0cmVhbV0gb3BlcmF0aW9uLgogICAqCiAgICogV2hpbGUgYWRkaW5nIGV2ZW50cyBmcm9tIGEgc3RyZWFtLCBubyBuZXcgZXZlbnRzIGNhbiBiZSBhZGRlZCBkaXJlY3RseQogICAqIG9uIHRoZSBjb250cm9sbGVyLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0FERFNUUkVBTSA9IDg7CgogIC8qKgogICAqIEZpZWxkIGNvbnRhaW5pbmcgZGlmZmVyZW50IGRhdGEgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IHN1YnNjcmlwdGlvbgogICAqIHN0YXRlLgogICAqCiAgICogSWYgW19zdGF0ZV0gaXMgW19TVEFURV9JTklUSUFMXSwgdGhlIGZpZWxkIG1heSBjb250YWluIGEgW19QZW5kaW5nRXZlbnRzXQogICAqIGZvciBldmVudHMgYWRkZWQgdG8gdGhlIGNvbnRyb2xsZXIgYmVmb3JlIGEgc3Vic2NyaXB0aW9uLgogICAqCiAgICogV2hpbGUgW19zdGF0ZV0gaXMgW19TVEFURV9TVUJTQ1JJQkVEXSwgdGhlIGZpZWxkIGNvbnRhaW5zIHRoZSBzdWJzY3JpcHRpb24uCiAgICoKICAgKiBXaGVuIFtfc3RhdGVdIGlzIFtfU1RBVEVfQ0FOQ0VMRURdIHRoZSBmaWVsZCBpcyBjdXJyZW50bHkgbm90IHVzZWQuCiAgICovCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHZhciBfdmFyRGF0YTsKCiAgLyoqIEN1cnJlbnQgc3RhdGUgb2YgdGhlIGNvbnRyb2xsZXIuICovCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGludCBfc3RhdGUgPSBfU1RBVEVfSU5JVElBTDsKCiAgLyoqCiAgICogRnV0dXJlIGNvbXBsZXRlZCB3aGVuIHRoZSBzdHJlYW0gc2VuZHMgaXRzIGxhc3QgZXZlbnQuCiAgICoKICAgKiBUaGlzIGlzIGFsc28gdGhlIGZ1dHVyZSByZXR1cm5lZCBieSBbY2xvc2VdLgogICAqLwogIC8vIFRPRE8obHJuKTogQ291bGQgdGhpcyBiZSBzdG9yZWQgaW4gdGhlIHZhckRhdGEgZmllbGQgdG9vLCBpZiBpdCdzIG5vdAogIC8vIGFjY2Vzc2VkIHVudGlsIHRoZSBjYWxsIHRvICJjbG9zZSI/IFRoZW4gd2UgbmVlZCB0byBzcGVjaWFsIGNhc2UgaWYgaXQncwogIC8vIGFjY2Vzc2VkIGVhcmxpZXIsIG9yIGlmIGNsb3NlIGlzIGNhbGxlZCBiZWZvcmUgc3Vic2NyaWJpbmcuCiAgX0Z1dHVyZSBfZG9uZUZ1dHVyZTsKCiAgQ29udHJvbGxlckNhbGxiYWNrIG9uTGlzdGVuOwogIENvbnRyb2xsZXJDYWxsYmFjayBvblBhdXNlOwogIENvbnRyb2xsZXJDYWxsYmFjayBvblJlc3VtZTsKICBDb250cm9sbGVyQ2FuY2VsQ2FsbGJhY2sgb25DYW5jZWw7CgogIF9TdHJlYW1Db250cm9sbGVyKHRoaXMub25MaXN0ZW4sIHRoaXMub25QYXVzZSwgdGhpcy5vblJlc3VtZSwgdGhpcy5vbkNhbmNlbCk7CgogIC8vIFJldHVybiBhIG5ldyBzdHJlYW0gZXZlcnkgdGltZS4gVGhlIHN0cmVhbXMgYXJlIGVxdWFsLCBidXQgbm90IGlkZW50aWNhbC4KICBTdHJlYW08VD4gZ2V0IHN0cmVhbSA9PiBuZXcgX0NvbnRyb2xsZXJTdHJlYW08VD4odGhpcyk7CgogIC8qKgogICAqIFJldHVybnMgYSB2aWV3IG9mIHRoaXMgb2JqZWN0IHRoYXQgb25seSBleHBvc2VzIHRoZSBbU3RyZWFtU2lua10gaW50ZXJmYWNlLgogICAqLwogIFN0cmVhbVNpbms8VD4gZ2V0IHNpbmsgPT4gbmV3IF9TdHJlYW1TaW5rV3JhcHBlcjxUPih0aGlzKTsKCiAgLyoqCiAgICogV2hldGhlciBhIGxpc3RlbmVyIGhhcyBleGlzdGVkIGFuZCBiZWVuIGNhbmNlbGVkLgogICAqCiAgICogQWZ0ZXIgdGhpcywgYWRkaW5nIG1vcmUgZXZlbnRzIHdpbGwgYmUgaWdub3JlZC4KICAgKi8KICBib29sIGdldCBfaXNDYW5jZWxlZCA9PiAoX3N0YXRlICYgX1NUQVRFX0NBTkNFTEVEKSAhPSAwOwoKICAvKiogV2hldGhlciB0aGVyZSBpcyBhbiBhY3RpdmUgbGlzdGVuZXIuICovCiAgYm9vbCBnZXQgaGFzTGlzdGVuZXIgPT4gKF9zdGF0ZSAmIF9TVEFURV9TVUJTQ1JJQkVEKSAhPSAwOwoKICAvKiogV2hldGhlciB0aGVyZSBoYXMgbm90IGJlZW4gYSBsaXN0ZW5lciB5ZXQuICovCiAgYm9vbCBnZXQgX2lzSW5pdGlhbFN0YXRlID0+CiAgICAgIChfc3RhdGUgJiBfU1RBVEVfU1VCU0NSSVBUSU9OX01BU0spID09IF9TVEFURV9JTklUSUFMOwoKICBib29sIGdldCBpc0Nsb3NlZCA9PiAoX3N0YXRlICYgX1NUQVRFX0NMT1NFRCkgIT0gMDsKCiAgYm9vbCBnZXQgaXNQYXVzZWQgPT4KICAgICAgaGFzTGlzdGVuZXIgPyBfc3Vic2NyaXB0aW9uLl9pc0lucHV0UGF1c2VkIDogIV9pc0NhbmNlbGVkOwoKICBib29sIGdldCBfaXNBZGRpbmdTdHJlYW0gPT4gKF9zdGF0ZSAmIF9TVEFURV9BRERTVFJFQU0pICE9IDA7CgogIC8qKiBOZXcgZXZlbnRzIG1heSBub3QgYmUgYWRkZWQgYWZ0ZXIgY2xvc2UsIG9yIGR1cmluZyBhZGRTdHJlYW0uICovCiAgYm9vbCBnZXQgX21heUFkZEV2ZW50ID0+IChfc3RhdGUgPCBfU1RBVEVfQ0xPU0VEKTsKCiAgLy8gUmV0dXJucyB0aGUgcGVuZGluZyBldmVudHMuCiAgLy8gUGVuZGluZyBldmVudHMgYXJlIGV2ZW50cyBhZGRlZCBiZWZvcmUgYSBzdWJzY3JpcHRpb24gZXhpc3RzLgogIC8vIFRoZXkgYXJlIGFkZGVkIHRvIHRoZSBzdWJzY3JpcHRpb24gd2hlbiBpdCBpcyBjcmVhdGVkLgogIC8vIFBlbmRpbmcgZXZlbnRzLCBpZiBhbnksIGFyZSBrZXB0IGluIHRoZSBfdmFyRGF0YSBmaWVsZCB1bnRpbCB0aGUKICAvLyBzdHJlYW0gaXMgbGlzdGVuZWQgdG8uCiAgLy8gV2hpbGUgYWRkaW5nIGEgc3RyZWFtLCBwZW5kaW5nIGV2ZW50cyBhcmUgbW92ZWQgaW50byB0aGUKICAvLyBzdGF0ZSBvYmplY3QgdG8gYWxsb3cgdGhlIHN0YXRlIG9iamVjdCB0byB1c2UgdGhlIF92YXJEYXRhIGZpZWxkLgogIF9QZW5kaW5nRXZlbnRzPFQ+IGdldCBfcGVuZGluZ0V2ZW50cyB7CiAgICBhc3NlcnQoX2lzSW5pdGlhbFN0YXRlKTsKICAgIGlmICghX2lzQWRkaW5nU3RyZWFtKSB7CiAgICAgIHJldHVybiBfdmFyRGF0YTsKICAgIH0KICAgIF9TdHJlYW1Db250cm9sbGVyQWRkU3RyZWFtU3RhdGU8VD4gc3RhdGUgPSBfdmFyRGF0YTsKICAgIHJldHVybiBzdGF0ZS52YXJEYXRhOwogIH0KCiAgLy8gUmV0dXJucyB0aGUgcGVuZGluZyBldmVudHMsIGFuZCBjcmVhdGVzIHRoZSBvYmplY3QgaWYgbmVjZXNzYXJ5LgogIF9TdHJlYW1JbXBsRXZlbnRzPFQ+IF9lbnN1cmVQZW5kaW5nRXZlbnRzKCkgewogICAgYXNzZXJ0KF9pc0luaXRpYWxTdGF0ZSk7CiAgICBpZiAoIV9pc0FkZGluZ1N0cmVhbSkgewogICAgICBfdmFyRGF0YSA/Pz0gbmV3IF9TdHJlYW1JbXBsRXZlbnRzPFQ+KCk7CiAgICAgIHJldHVybiBfdmFyRGF0YTsKICAgIH0KICAgIF9TdHJlYW1Db250cm9sbGVyQWRkU3RyZWFtU3RhdGU8VD4gc3RhdGUgPSBfdmFyRGF0YTsKICAgIGlmIChzdGF0ZS52YXJEYXRhID09IG51bGwpIHN0YXRlLnZhckRhdGEgPSBuZXcgX1N0cmVhbUltcGxFdmVudHM8VD4oKTsKICAgIHJldHVybiBzdGF0ZS52YXJEYXRhOwogIH0KCiAgLy8gR2V0IHRoZSBjdXJyZW50IHN1YnNjcmlwdGlvbi4KICAvLyBJZiB3ZSBhcmUgYWRkaW5nIGEgc3RyZWFtLCB0aGUgc3Vic2NyaXB0aW9uIGlzIG1vdmVkIGludG8gdGhlIHN0YXRlCiAgLy8gb2JqZWN0IHRvIGFsbG93IHRoZSBzdGF0ZSBvYmplY3QgdG8gdXNlIHRoZSBfdmFyRGF0YSBmaWVsZC4KICBfQ29udHJvbGxlclN1YnNjcmlwdGlvbjxUPiBnZXQgX3N1YnNjcmlwdGlvbiB7CiAgICBhc3NlcnQoaGFzTGlzdGVuZXIpOwogICAgaWYgKF9pc0FkZGluZ1N0cmVhbSkgewogICAgICBfU3RyZWFtQ29udHJvbGxlckFkZFN0cmVhbVN0YXRlPFQ+IGFkZFN0YXRlID0gX3ZhckRhdGE7CiAgICAgIHJldHVybiBhZGRTdGF0ZS52YXJEYXRhOwogICAgfQogICAgcmV0dXJuIF92YXJEYXRhOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBlcnJvciBkZXNjcmliaW5nIHdoeSBhbiBldmVudCBjYW5ub3QgYmUgYWRkZWQuCiAgICoKICAgKiBUaGUgcmVhc29uLCBhbmQgdGhlcmVmb3JlIHRoZSBlcnJvciBtZXNzYWdlLCBkZXBlbmRzIG9uIHRoZSBjdXJyZW50IHN0YXRlLgogICAqLwogIEVycm9yIF9iYWRFdmVudFN0YXRlKCkgewogICAgaWYgKGlzQ2xvc2VkKSB7CiAgICAgIHJldHVybiBuZXcgU3RhdGVFcnJvcigiQ2Fubm90IGFkZCBldmVudCBhZnRlciBjbG9zaW5nIik7CiAgICB9CiAgICBhc3NlcnQoX2lzQWRkaW5nU3RyZWFtKTsKICAgIHJldHVybiBuZXcgU3RhdGVFcnJvcigiQ2Fubm90IGFkZCBldmVudCB3aGlsZSBhZGRpbmcgYSBzdHJlYW0iKTsKICB9CgogIC8vIFN0cmVhbVNpbmsgaW50ZXJmYWNlLgogIEZ1dHVyZSBhZGRTdHJlYW0oU3RyZWFtPFQ+IHNvdXJjZSwge2Jvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIGlmICghX21heUFkZEV2ZW50KSB0aHJvdyBfYmFkRXZlbnRTdGF0ZSgpOwogICAgaWYgKF9pc0NhbmNlbGVkKSByZXR1cm4gbmV3IF9GdXR1cmUuaW1tZWRpYXRlKG51bGwpOwogICAgX1N0cmVhbUNvbnRyb2xsZXJBZGRTdHJlYW1TdGF0ZTxUPiBhZGRTdGF0ZSA9CiAgICAgICAgbmV3IF9TdHJlYW1Db250cm9sbGVyQWRkU3RyZWFtU3RhdGU8VD4oCiAgICAgICAgICAgIHRoaXMsIF92YXJEYXRhLCBzb3VyY2UsIGNhbmNlbE9uRXJyb3IgPz8gZmFsc2UpOwogICAgX3ZhckRhdGEgPSBhZGRTdGF0ZTsKICAgIF9zdGF0ZSB8PSBfU1RBVEVfQUREU1RSRUFNOwogICAgcmV0dXJuIGFkZFN0YXRlLmFkZFN0cmVhbUZ1dHVyZTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBmdXR1cmUgdGhhdCBpcyBjb21wbGV0ZWQgd2hlbiB0aGUgc3RyZWFtIGlzIGRvbmUKICAgKiBwcm9jZXNzaW5nIGV2ZW50cy4KICAgKgogICAqIFRoaXMgaGFwcGVucyBlaXRoZXIgd2hlbiB0aGUgZG9uZSBldmVudCBoYXMgYmVlbiBzZW50LCBvciBpZiB0aGUKICAgKiBzdWJzY3JpYmVyIG9mIGEgc2luZ2xlLXN1YnNjcmlwdGlvbiBzdHJlYW0gaXMgY2FuY2VsbGVkLgogICAqLwogIEZ1dHVyZSBnZXQgZG9uZSA9PiBfZW5zdXJlRG9uZUZ1dHVyZSgpOwoKICBGdXR1cmUgX2Vuc3VyZURvbmVGdXR1cmUoKSB7CiAgICBfZG9uZUZ1dHVyZSA/Pz0gX2lzQ2FuY2VsZWQgPyBGdXR1cmUuX251bGxGdXR1cmUgOiBuZXcgX0Z1dHVyZSgpOwogICAgcmV0dXJuIF9kb25lRnV0dXJlOwogIH0KCiAgLyoqCiAgICogU2VuZCBvciBlbnF1ZXVlIGEgZGF0YSBldmVudC4KICAgKi8KICB2b2lkIGFkZChUIHZhbHVlKSB7CiAgICBpZiAoIV9tYXlBZGRFdmVudCkgdGhyb3cgX2JhZEV2ZW50U3RhdGUoKTsKICAgIF9hZGQodmFsdWUpOwogIH0KCiAgLyoqCiAgICogU2VuZCBvciBlbnF1ZXVlIGFuIGVycm9yIGV2ZW50LgogICAqLwogIHZvaWQgYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgaWYgKCFfbWF5QWRkRXZlbnQpIHRocm93IF9iYWRFdmVudFN0YXRlKCk7CiAgICBlcnJvciA9IF9ub25OdWxsRXJyb3IoZXJyb3IpOwogICAgQXN5bmNFcnJvciByZXBsYWNlbWVudCA9IFpvbmUuY3VycmVudC5lcnJvckNhbGxiYWNrKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIGlmIChyZXBsYWNlbWVudCAhPSBudWxsKSB7CiAgICAgIGVycm9yID0gX25vbk51bGxFcnJvcihyZXBsYWNlbWVudC5lcnJvcik7CiAgICAgIHN0YWNrVHJhY2UgPSByZXBsYWNlbWVudC5zdGFja1RyYWNlOwogICAgfQogICAgX2FkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIC8qKgogICAqIENsb3NlcyB0aGlzIGNvbnRyb2xsZXIgYW5kIHNlbmRzIGEgZG9uZSBldmVudCBvbiB0aGUgc3RyZWFtLgogICAqCiAgICogVGhlIGZpcnN0IHRpbWUgYSBjb250cm9sbGVyIGlzIGNsb3NlZCwgYSAiZG9uZSIgZXZlbnQgaXMgYWRkZWQgdG8gaXRzCiAgICogc3RyZWFtLgogICAqCiAgICogWW91IGFyZSBhbGxvd2VkIHRvIGNsb3NlIHRoZSBjb250cm9sbGVyIG1vcmUgdGhhbiBvbmNlLCBidXQgb25seSB0aGUgZmlyc3QKICAgKiBjYWxsIGhhcyBhbnkgZWZmZWN0LgogICAqCiAgICogQWZ0ZXIgY2xvc2luZywgbm8gZnVydGhlciBldmVudHMgbWF5IGJlIGFkZGVkIHVzaW5nIFthZGRdLCBbYWRkRXJyb3JdCiAgICogb3IgW2FkZFN0cmVhbV0uCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aGVuIHRoZSBkb25lIGV2ZW50IGhhcyBiZWVuIGRlbGl2ZXJlZC4KICAgKi8KICBGdXR1cmUgY2xvc2UoKSB7CiAgICBpZiAoaXNDbG9zZWQpIHsKICAgICAgcmV0dXJuIF9lbnN1cmVEb25lRnV0dXJlKCk7CiAgICB9CiAgICBpZiAoIV9tYXlBZGRFdmVudCkgdGhyb3cgX2JhZEV2ZW50U3RhdGUoKTsKICAgIF9jbG9zZVVuY2hlY2tlZCgpOwogICAgcmV0dXJuIF9lbnN1cmVEb25lRnV0dXJlKCk7CiAgfQoKICB2b2lkIF9jbG9zZVVuY2hlY2tlZCgpIHsKICAgIF9zdGF0ZSB8PSBfU1RBVEVfQ0xPU0VEOwogICAgaWYgKGhhc0xpc3RlbmVyKSB7CiAgICAgIF9zZW5kRG9uZSgpOwogICAgfSBlbHNlIGlmIChfaXNJbml0aWFsU3RhdGUpIHsKICAgICAgX2Vuc3VyZVBlbmRpbmdFdmVudHMoKS5hZGQoY29uc3QgX0RlbGF5ZWREb25lKCkpOwogICAgfQogIH0KCiAgLy8gRXZlbnRTaW5rIGludGVyZmFjZS4gVXNlZCBieSB0aGUgW2FkZFN0cmVhbV0gZXZlbnRzLgoKICAvLyBBZGQgZGF0YSBldmVudCwgdXNlZCBib3RoIGJ5IHRoZSBbYWRkU3RyZWFtXSBldmVudHMgYW5kIGJ5IFthZGRdLgogIHZvaWQgX2FkZChUIHZhbHVlKSB7CiAgICBpZiAoaGFzTGlzdGVuZXIpIHsKICAgICAgX3NlbmREYXRhKHZhbHVlKTsKICAgIH0gZWxzZSBpZiAoX2lzSW5pdGlhbFN0YXRlKSB7CiAgICAgIF9lbnN1cmVQZW5kaW5nRXZlbnRzKCkuYWRkKG5ldyBfRGVsYXllZERhdGE8VD4odmFsdWUpKTsKICAgIH0KICB9CgogIHZvaWQgX2FkZEVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBpZiAoaGFzTGlzdGVuZXIpIHsKICAgICAgX3NlbmRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICB9IGVsc2UgaWYgKF9pc0luaXRpYWxTdGF0ZSkgewogICAgICBfZW5zdXJlUGVuZGluZ0V2ZW50cygpLmFkZChuZXcgX0RlbGF5ZWRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSkpOwogICAgfQogIH0KCiAgdm9pZCBfY2xvc2UoKSB7CiAgICAvLyBFbmQgb2YgYWRkU3RyZWFtIHN0cmVhbS4KICAgIGFzc2VydChfaXNBZGRpbmdTdHJlYW0pOwogICAgX1N0cmVhbUNvbnRyb2xsZXJBZGRTdHJlYW1TdGF0ZTxUPiBhZGRTdGF0ZSA9IF92YXJEYXRhOwogICAgX3ZhckRhdGEgPSBhZGRTdGF0ZS52YXJEYXRhOwogICAgX3N0YXRlICY9IH5fU1RBVEVfQUREU1RSRUFNOwogICAgYWRkU3RhdGUuY29tcGxldGUoKTsKICB9CgogIC8vIF9TdHJlYW1Db250cm9sbGVyTGlmZUN5Y2xlIGludGVyZmFjZQoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gX3N1YnNjcmliZSh2b2lkIG9uRGF0YShUIGRhdGEpLCBGdW5jdGlvbiBvbkVycm9yLAogICAgICB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3IpIHsKICAgIGlmICghX2lzSW5pdGlhbFN0YXRlKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJTdHJlYW0gaGFzIGFscmVhZHkgYmVlbiBsaXN0ZW5lZCB0by4iKTsKICAgIH0KICAgIF9Db250cm9sbGVyU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiA9IG5ldyBfQ29udHJvbGxlclN1YnNjcmlwdGlvbjxUPigKICAgICAgICB0aGlzLCBvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcik7CgogICAgX1BlbmRpbmdFdmVudHM8VD4gcGVuZGluZ0V2ZW50cyA9IF9wZW5kaW5nRXZlbnRzOwogICAgX3N0YXRlIHw9IF9TVEFURV9TVUJTQ1JJQkVEOwogICAgaWYgKF9pc0FkZGluZ1N0cmVhbSkgewogICAgICBfU3RyZWFtQ29udHJvbGxlckFkZFN0cmVhbVN0YXRlPFQ+IGFkZFN0YXRlID0gX3ZhckRhdGE7CiAgICAgIGFkZFN0YXRlLnZhckRhdGEgPSBzdWJzY3JpcHRpb247CiAgICAgIGFkZFN0YXRlLnJlc3VtZSgpOwogICAgfSBlbHNlIHsKICAgICAgX3ZhckRhdGEgPSBzdWJzY3JpcHRpb247CiAgICB9CiAgICBzdWJzY3JpcHRpb24uX3NldFBlbmRpbmdFdmVudHMocGVuZGluZ0V2ZW50cyk7CiAgICBzdWJzY3JpcHRpb24uX2d1YXJkQ2FsbGJhY2soKCkgewogICAgICBfcnVuR3VhcmRlZChvbkxpc3Rlbik7CiAgICB9KTsKCiAgICByZXR1cm4gc3Vic2NyaXB0aW9uOwogIH0KCiAgRnV0dXJlIF9yZWNvcmRDYW5jZWwoU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikgewogICAgLy8gV2hlbiB3ZSBjYW5jZWwsIHdlIGZpcnN0IGNhbmNlbCBhbnkgc3RyZWFtIGJlaW5nIGFkZGVkLAogICAgLy8gVGhlbiB3ZSBjYWxsIGBvbkNhbmNlbGAsIGFuZCBmaW5hbGx5IHRoZSBfZG9uZUZ1dHVyZSBpcyBjb21wbGV0ZWQuCiAgICAvLyBJZiBlaXRoZXIgb2YgYWRkU3RyZWFtJ3MgY2FuY2VsIG9yIGBvbkNhbmNlbGAgcmV0dXJucyBhIGZ1dHVyZSwKICAgIC8vIHdlIHdhaXQgZm9yIGl0IGJlZm9yZSBjb250aW51aW5nLgogICAgLy8gQW55IGVycm9yIGR1cmluZyB0aGlzIHByb2Nlc3MgZW5kcyB1cCBpbiB0aGUgcmV0dXJuZWQgZnV0dXJlLgogICAgLy8gSWYgbW9yZSBlcnJvcnMgaGFwcGVuLCB3ZSBhY3QgYXMgaWYgaXQgaGFwcGVucyBpbnNpZGUgbmVzdGVkIHRyeS9maW5hbGx5cwogICAgLy8gb3Igd2hlbkNvbXBsZXRlIGNhbGxzLCBhbmQgb25seSB0aGUgbGFzdCBlcnJvciBlbmRzIHVwIGluIHRoZQogICAgLy8gcmV0dXJuZWQgZnV0dXJlLgogICAgRnV0dXJlIHJlc3VsdDsKICAgIGlmIChfaXNBZGRpbmdTdHJlYW0pIHsKICAgICAgX1N0cmVhbUNvbnRyb2xsZXJBZGRTdHJlYW1TdGF0ZTxUPiBhZGRTdGF0ZSA9IF92YXJEYXRhOwogICAgICByZXN1bHQgPSBhZGRTdGF0ZS5jYW5jZWwoKTsKICAgIH0KICAgIF92YXJEYXRhID0gbnVsbDsKICAgIF9zdGF0ZSA9CiAgICAgICAgKF9zdGF0ZSAmIH4oX1NUQVRFX1NVQlNDUklCRUQgfCBfU1RBVEVfQUREU1RSRUFNKSkgfCBfU1RBVEVfQ0FOQ0VMRUQ7CgogICAgaWYgKG9uQ2FuY2VsICE9IG51bGwpIHsKICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CiAgICAgICAgLy8gT25seSBpbnRyb2R1Y2UgYSBmdXR1cmUgaWYgb25lIGlzIG5lZWRlZC4KICAgICAgICAvLyBJZiBfb25DYW5jZWwgcmV0dXJucyBudWxsLCBubyBmdXR1cmUgaXMgbmVlZGVkLgogICAgICAgIHRyeSB7CiAgICAgICAgICByZXN1bHQgPSBvbkNhbmNlbCgpOwogICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgIC8vIFJldHVybiB0aGUgZXJyb3IgaW4gdGhlIHJldHVybmVkIGZ1dHVyZS4KICAgICAgICAgIC8vIENvbXBsZXRlIGl0IGFzeW5jaHJvbm91c2x5LCBzbyB0aGVyZSBpcyB0aW1lIGZvciBhIGxpc3RlbmVyCiAgICAgICAgICAvLyB0byBoYW5kbGUgdGhlIGVycm9yLgogICAgICAgICAgcmVzdWx0ID0gbmV3IF9GdXR1cmUoKS4uX2FzeW5jQ29tcGxldGVFcnJvcihlLCBzKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gU2ltcGxlciBjYXNlIHdoZW4gd2UgYWxyZWFkeSBrbm93IHRoYXQgd2Ugd2lsbCByZXR1cm4gYSBmdXR1cmUuCiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LndoZW5Db21wbGV0ZShvbkNhbmNlbCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGNvbXBsZXRlKCkgewogICAgICBpZiAoX2RvbmVGdXR1cmUgIT0gbnVsbCAmJiBfZG9uZUZ1dHVyZS5fbWF5Q29tcGxldGUpIHsKICAgICAgICBfZG9uZUZ1dHVyZS5fYXN5bmNDb21wbGV0ZShudWxsKTsKICAgICAgfQogICAgfQoKICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgewogICAgICByZXN1bHQgPSByZXN1bHQud2hlbkNvbXBsZXRlKGNvbXBsZXRlKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbXBsZXRlKCk7CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgX3JlY29yZFBhdXNlKFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pIHsKICAgIGlmIChfaXNBZGRpbmdTdHJlYW0pIHsKICAgICAgX1N0cmVhbUNvbnRyb2xsZXJBZGRTdHJlYW1TdGF0ZTxUPiBhZGRTdGF0ZSA9IF92YXJEYXRhOwogICAgICBhZGRTdGF0ZS5wYXVzZSgpOwogICAgfQogICAgX3J1bkd1YXJkZWQob25QYXVzZSk7CiAgfQoKICB2b2lkIF9yZWNvcmRSZXN1bWUoU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikgewogICAgaWYgKF9pc0FkZGluZ1N0cmVhbSkgewogICAgICBfU3RyZWFtQ29udHJvbGxlckFkZFN0cmVhbVN0YXRlPFQ+IGFkZFN0YXRlID0gX3ZhckRhdGE7CiAgICAgIGFkZFN0YXRlLnJlc3VtZSgpOwogICAgfQogICAgX3J1bkd1YXJkZWQob25SZXN1bWUpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX1N5bmNTdHJlYW1Db250cm9sbGVyRGlzcGF0Y2g8VD4KICAgIGltcGxlbWVudHMgX1N0cmVhbUNvbnRyb2xsZXI8VD4sIFN5bmNocm9ub3VzU3RyZWFtQ29udHJvbGxlcjxUPiB7CiAgaW50IGdldCBfc3RhdGU7CiAgdm9pZCBzZXQgX3N0YXRlKGludCBzdGF0ZSk7CgogIHZvaWQgX3NlbmREYXRhKFQgZGF0YSkgewogICAgX3N1YnNjcmlwdGlvbi5fYWRkKGRhdGEpOwogIH0KCiAgdm9pZCBfc2VuZEVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBfc3Vic2NyaXB0aW9uLl9hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICB2b2lkIF9zZW5kRG9uZSgpIHsKICAgIF9zdWJzY3JpcHRpb24uX2Nsb3NlKCk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfQXN5bmNTdHJlYW1Db250cm9sbGVyRGlzcGF0Y2g8VD4KICAgIGltcGxlbWVudHMgX1N0cmVhbUNvbnRyb2xsZXI8VD4gewogIHZvaWQgX3NlbmREYXRhKFQgZGF0YSkgewogICAgX3N1YnNjcmlwdGlvbi5fYWRkUGVuZGluZyhuZXcgX0RlbGF5ZWREYXRhPFQ+KGRhdGEpKTsKICB9CgogIHZvaWQgX3NlbmRFcnJvcihPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgX3N1YnNjcmlwdGlvbi5fYWRkUGVuZGluZyhuZXcgX0RlbGF5ZWRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSkpOwogIH0KCiAgdm9pZCBfc2VuZERvbmUoKSB7CiAgICBfc3Vic2NyaXB0aW9uLl9hZGRQZW5kaW5nKGNvbnN0IF9EZWxheWVkRG9uZSgpKTsKICB9Cn0KCi8vIFRPRE8obHJuKTogVXNlIGNvbW1vbiBzdXBlcmNsYXNzIGZvciBjYWxsYmFjay1jb250cm9sbGVycyB3aGVuIFZNIHN1cHBvcnRzCi8vIGNvbnN0cnVjdG9ycyBpbiBtaXhpbiBzdXBlcmNsYXNzZXMuCgpjbGFzcyBfQXN5bmNTdHJlYW1Db250cm9sbGVyPFQ+ID0gX1N0cmVhbUNvbnRyb2xsZXI8VD4KICAgIHdpdGggX0FzeW5jU3RyZWFtQ29udHJvbGxlckRpc3BhdGNoPFQ+OwoKY2xhc3MgX1N5bmNTdHJlYW1Db250cm9sbGVyPFQ+ID0gX1N0cmVhbUNvbnRyb2xsZXI8VD4KICAgIHdpdGggX1N5bmNTdHJlYW1Db250cm9sbGVyRGlzcGF0Y2g8VD47Cgp0eXBlZGVmIF9Ob3RpZmljYXRpb25IYW5kbGVyKCk7Cgp2b2lkIF9ydW5HdWFyZGVkKF9Ob3RpZmljYXRpb25IYW5kbGVyIG5vdGlmaWNhdGlvbkhhbmRsZXIpIHsKICBpZiAobm90aWZpY2F0aW9uSGFuZGxlciA9PSBudWxsKSByZXR1cm47CiAgdHJ5IHsKICAgIG5vdGlmaWNhdGlvbkhhbmRsZXIoKTsKICB9IGNhdGNoIChlLCBzKSB7CiAgICBab25lLmN1cnJlbnQuaGFuZGxlVW5jYXVnaHRFcnJvcihlLCBzKTsKICB9Cn0KCmNsYXNzIF9Db250cm9sbGVyU3RyZWFtPFQ+IGV4dGVuZHMgX1N0cmVhbUltcGw8VD4gewogIF9TdHJlYW1Db250cm9sbGVyTGlmZWN5Y2xlPFQ+IF9jb250cm9sbGVyOwoKICBfQ29udHJvbGxlclN0cmVhbSh0aGlzLl9jb250cm9sbGVyKTsKCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IF9jcmVhdGVTdWJzY3JpcHRpb24odm9pZCBvbkRhdGEoVCBkYXRhKSwKICAgICAgICAgIEZ1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcikgPT4KICAgICAgX2NvbnRyb2xsZXIuX3N1YnNjcmliZShvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcik7CgogIC8vIE92ZXJyaWRlID09IGFuZCBoYXNoQ29kZSBzbyB0aGF0IG5ldyBzdHJlYW1zIHJldHVybmVkIGJ5IHRoZSBzYW1lCiAgLy8gY29udHJvbGxlciBhcmUgY29uc2lkZXJlZCBlcXVhbC4gVGhlIGNvbnRyb2xsZXIgcmV0dXJucyBhIG5ldyBzdHJlYW0KICAvLyBlYWNoIHRpbWUgaXQncyBxdWVyaWVkLCBidXQgZG9lc24ndCBoYXZlIHRvIGNhY2hlIHRoZSByZXN1bHQuCgogIGludCBnZXQgaGFzaENvZGUgPT4gX2NvbnRyb2xsZXIuaGFzaENvZGUgXiAweDM1MzIzNTMyOwoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIG90aGVyIGlzIF9Db250cm9sbGVyU3RyZWFtICYmCiAgICAgICAgaWRlbnRpY2FsKG90aGVyLl9jb250cm9sbGVyLCB0aGlzLl9jb250cm9sbGVyKTsKICB9Cn0KCmNsYXNzIF9Db250cm9sbGVyU3Vic2NyaXB0aW9uPFQ+IGV4dGVuZHMgX0J1ZmZlcmluZ1N0cmVhbVN1YnNjcmlwdGlvbjxUPiB7CiAgZmluYWwgX1N0cmVhbUNvbnRyb2xsZXJMaWZlY3ljbGU8VD4gX2NvbnRyb2xsZXI7CgogIF9Db250cm9sbGVyU3Vic2NyaXB0aW9uKHRoaXMuX2NvbnRyb2xsZXIsIHZvaWQgb25EYXRhKFQgZGF0YSksCiAgICAgIEZ1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcikKICAgICAgOiBzdXBlcihvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcik7CgogIEZ1dHVyZSBfb25DYW5jZWwoKSB7CiAgICByZXR1cm4gX2NvbnRyb2xsZXIuX3JlY29yZENhbmNlbCh0aGlzKTsKICB9CgogIHZvaWQgX29uUGF1c2UoKSB7CiAgICBfY29udHJvbGxlci5fcmVjb3JkUGF1c2UodGhpcyk7CiAgfQoKICB2b2lkIF9vblJlc3VtZSgpIHsKICAgIF9jb250cm9sbGVyLl9yZWNvcmRSZXN1bWUodGhpcyk7CiAgfQp9CgovKiogQSBjbGFzcyB0aGF0IGV4cG9zZXMgb25seSB0aGUgW1N0cmVhbVNpbmtdIGludGVyZmFjZSBvZiBhbiBvYmplY3QuICovCmNsYXNzIF9TdHJlYW1TaW5rV3JhcHBlcjxUPiBpbXBsZW1lbnRzIFN0cmVhbVNpbms8VD4gewogIGZpbmFsIFN0cmVhbUNvbnRyb2xsZXIgX3RhcmdldDsKICBfU3RyZWFtU2lua1dyYXBwZXIodGhpcy5fdGFyZ2V0KTsKICB2b2lkIGFkZChUIGRhdGEpIHsKICAgIF90YXJnZXQuYWRkKGRhdGEpOwogIH0KCiAgdm9pZCBhZGRFcnJvcihPYmplY3QgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBfdGFyZ2V0LmFkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIEZ1dHVyZSBjbG9zZSgpID0+IF90YXJnZXQuY2xvc2UoKTsKCiAgRnV0dXJlIGFkZFN0cmVhbShTdHJlYW08VD4gc291cmNlKSA9PiBfdGFyZ2V0LmFkZFN0cmVhbShzb3VyY2UpOwoKICBGdXR1cmUgZ2V0IGRvbmUgPT4gX3RhcmdldC5kb25lOwp9CgovKioKICogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHN0YXRlIHVzZWQgdG8gaGFuZGxlIFtTdHJlYW1Db250cm9sbGVyLmFkZFN0cmVhbV0uCiAqLwpjbGFzcyBfQWRkU3RyZWFtU3RhdGU8VD4gewogIC8vIFtfRnV0dXJlXSByZXR1cm5lZCBieSBjYWxsIHRvIGFkZFN0cmVhbS4KICBmaW5hbCBfRnV0dXJlIGFkZFN0cmVhbUZ1dHVyZTsKCiAgLy8gU3Vic2NyaXB0aW9uIG9uIHN0cmVhbSBhcmd1bWVudCB0byBhZGRTdHJlYW0uCiAgZmluYWwgU3RyZWFtU3Vic2NyaXB0aW9uIGFkZFN1YnNjcmlwdGlvbjsKCiAgX0FkZFN0cmVhbVN0YXRlKAogICAgICBfRXZlbnRTaW5rPFQ+IGNvbnRyb2xsZXIsIFN0cmVhbTxUPiBzb3VyY2UsIGJvb2wgY2FuY2VsT25FcnJvcikKICAgICAgOiBhZGRTdHJlYW1GdXR1cmUgPSBuZXcgX0Z1dHVyZSgpLAogICAgICAgIGFkZFN1YnNjcmlwdGlvbiA9IHNvdXJjZS5saXN0ZW4oY29udHJvbGxlci5fYWRkLAogICAgICAgICAgICBvbkVycm9yOiBjYW5jZWxPbkVycm9yCiAgICAgICAgICAgICAgICA/IG1ha2VFcnJvckhhbmRsZXIoY29udHJvbGxlcikKICAgICAgICAgICAgICAgIDogY29udHJvbGxlci5fYWRkRXJyb3IsCiAgICAgICAgICAgIG9uRG9uZTogY29udHJvbGxlci5fY2xvc2UsCiAgICAgICAgICAgIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwoKICBzdGF0aWMgbWFrZUVycm9ySGFuZGxlcihfRXZlbnRTaW5rIGNvbnRyb2xsZXIpID0+IChlLCBTdGFja1RyYWNlIHMpIHsKICAgICAgICBjb250cm9sbGVyLl9hZGRFcnJvcihlLCBzKTsKICAgICAgICBjb250cm9sbGVyLl9jbG9zZSgpOwogICAgICB9OwoKICB2b2lkIHBhdXNlKCkgewogICAgYWRkU3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgfQoKICB2b2lkIHJlc3VtZSgpIHsKICAgIGFkZFN1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICB9CgogIC8qKgogICAqIFN0b3AgYWRkaW5nIHRoZSBzdHJlYW0uCiAgICoKICAgKiBDb21wbGV0ZSB0aGUgZnV0dXJlIHJldHVybmVkIGJ5IGBTdHJlYW1Db250cm9sbGVyLmFkZFN0cmVhbWAgd2hlbgogICAqIHRoZSBjYW5jZWwgaXMgY29tcGxldGUuCiAgICoKICAgKiBSZXR1cm4gYSBmdXR1cmUgaWYgdGhlIGNhbmNlbCB0YWtlcyB0aW1lLCBvdGhlcndpc2UgcmV0dXJuIGBudWxsYC4KICAgKi8KICBGdXR1cmUgY2FuY2VsKCkgewogICAgdmFyIGNhbmNlbCA9IGFkZFN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgIGlmIChjYW5jZWwgPT0gbnVsbCkgewogICAgICBhZGRTdHJlYW1GdXR1cmUuX2FzeW5jQ29tcGxldGUobnVsbCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIGNhbmNlbC53aGVuQ29tcGxldGUoKCkgewogICAgICBhZGRTdHJlYW1GdXR1cmUuX2FzeW5jQ29tcGxldGUobnVsbCk7CiAgICB9KTsKICB9CgogIHZvaWQgY29tcGxldGUoKSB7CiAgICBhZGRTdHJlYW1GdXR1cmUuX2FzeW5jQ29tcGxldGUobnVsbCk7CiAgfQp9CgpjbGFzcyBfU3RyZWFtQ29udHJvbGxlckFkZFN0cmVhbVN0YXRlPFQ+IGV4dGVuZHMgX0FkZFN0cmVhbVN0YXRlPFQ+IHsKICAvLyBUaGUgc3Vic2NyaXB0aW9uIG9yIHBlbmRpbmcgZGF0YSBvZiBhIF9TdHJlYW1Db250cm9sbGVyLgogIC8vIFN0b3JlZCBoZXJlIGJlY2F1c2Ugd2UgcmV1c2UgdGhlIGBfdmFyRGF0YWAgZmllbGQgIGluIHRoZSBfU3RyZWFtQ29udHJvbGxlcgogIC8vIHRvIHN0b3JlIHRoaXMgc3RhdGUgb2JqZWN0LgogIHZhciB2YXJE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IGZvciBhIHBsYWNlIHRvIHNlbmQgZXZlbnRzLgogKgogKiBVc2VkIGJ5IGV2ZW50IGJ1ZmZlcmluZyB0byBmaW5hbGx5IGRpc3BhdGNoIHRoZSBwZW5kaW5nIGV2ZW50LCB3aGVyZQogKiBbX0V2ZW50U2lua10gaXMgd2hlcmUgdGhlIGV2ZW50IGZpcnN0IGVudGVycyB0aGUgc3RyZWFtIHN1YnNjcmlwdGlvbiwKICogYW5kIG1heSB5ZXQgYmUgYnVmZmVyZWQuCiAqLwphYnN0cmFjdCBjbGFzcyBfRXZlbnREaXNwYXRjaDxUPiB7CiAgdm9pZCBfc2VuZERhdGEoVCBkYXRhKTsKICB2b2lkIF9zZW5kRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpOwogIHZvaWQgX3NlbmREb25lKCk7Cn0KCi8qKgogKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHN0cmVhbSBzdWJzY3JpcHRpb24gb2YgYnVmZmVyaW5nIGV2ZW50cy4KICoKICogVGhlIG9ubHkgcHVibGljIG1ldGhvZHMgYXJlIHRob3NlIG9mIFtTdHJlYW1TdWJzY3JpcHRpb25dLCBzbyBpbnN0YW5jZXMgb2YKICogW19CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb25dIGNhbiBiZSByZXR1cm5lZCBkaXJlY3RseSBhcyBhCiAqIFtTdHJlYW1TdWJzY3JpcHRpb25dIHdpdGhvdXQgZXhwb3NpbmcgaW50ZXJuYWwgZnVuY3Rpb25hbGl0eS4KICoKICogVGhlIFtTdHJlYW1Db250cm9sbGVyXSBpcyBhIHB1YmxpYyBmYWNpbmcgdmVyc2lvbiBvZiBbU3RyZWFtXSBhbmQgdGhpcyBjbGFzcywKICogd2l0aCBzb21lIG1ldGhvZHMgbWFkZSBwdWJsaWMuCiAqCiAqIFRoZSB1c2VyIGludGVyZmFjZSBvZiBbX0J1ZmZlcmluZ1N0cmVhbVN1YnNjcmlwdGlvbl0gYXJlIHRoZSBmb2xsb3dpbmcKICogbWV0aG9kczoKICoKICogKiBbX2FkZF06IEFkZCBhIGRhdGEgZXZlbnQgdG8gdGhlIHN0cmVhbS4KICogKiBbX2FkZEVycm9yXTogQWRkIGFuIGVycm9yIGV2ZW50IHRvIHRoZSBzdHJlYW0uCiAqICogW19jbG9zZV06IFJlcXVlc3QgdG8gY2xvc2UgdGhlIHN0cmVhbS4KICogKiBbX29uQ2FuY2VsXTogQ2FsbGVkIHdoZW4gdGhlIHN1YnNjcmlwdGlvbiB3aWxsIHByb3ZpZGUgbm8gbW9yZSBldmVudHMsCiAqICAgICBlaXRoZXIgZHVlIHRvIGJlaW5nIGFjdGl2ZWx5IGNhbmNlbGVkLCBvciBhZnRlciBzZW5kaW5nIGEgZG9uZSBldmVudC4KICogKiBbX29uUGF1c2VdOiBDYWxsZWQgd2hlbiB0aGUgc3Vic2NyaXB0aW9uIHdhbnRzIHRoZSBldmVudCBzb3VyY2UgdG8gcGF1c2UuCiAqICogW19vblJlc3VtZV06IENhbGxlZCB3aGVuIGFsbG93aW5nIG5ldyBldmVudHMgYWZ0ZXIgYSBwYXVzZS4KICoKICogVGhlIHVzZXIgc2hvdWxkIG5vdCBhZGQgbmV3IGV2ZW50cyB3aGVuIHRoZSBzdWJzY3JpcHRpb24gcmVxdWVzdHMgYSBwYXVzZWQsCiAqIGJ1dCBpZiBpdCBoYXBwZW5zIGFueXdheSwgdGhlIHN1YnNjcmlwdGlvbiB3aWxsIGVucXVldWUgdGhlIGV2ZW50cyBqdXN0IGFzCiAqIHdoZW4gbmV3IGV2ZW50cyBhcnJpdmUgd2hpbGUgc3RpbGwgZmlyaW5nIGFuIG9sZCBldmVudC4KICovCmNsYXNzIF9CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb248VD4KICAgIGltcGxlbWVudHMgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+LCBfRXZlbnRTaW5rPFQ+LCBfRXZlbnREaXNwYXRjaDxUPiB7CiAgLyoqIFRoZSBgY2FuY2VsT25FcnJvcmAgZmxhZyBmcm9tIHRoZSBgbGlzdGVuYCBjYWxsLiAqLwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0NBTkNFTF9PTl9FUlJPUiA9IDE7CiAgLyoqCiAgICogV2hldGhlciB0aGUgImRvbmUiIGV2ZW50IGhhcyBiZWVuIHJlY2VpdmVkLgogICAqIE5vIGZ1cnRoZXIgZXZlbnRzIGFyZSBhY2NlcHRlZCBhZnRlciB0aGlzLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0NMT1NFRCA9IDI7CiAgLyoqCiAgICogU2V0IGlmIHRoZSBpbnB1dCBoYXMgYmVlbiBhc2tlZCBub3QgdG8gc2VuZCBldmVudHMuCiAgICoKICAgKiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBhcyBiZWluZyBwYXVzZWQsIHNpbmNlIHRoZSBpbnB1dCB3aWxsIHJlbWFpbiBwYXVzZWQKICAgKiBhZnRlciBhIGNhbGwgdG8gW3Jlc3VtZV0gaWYgdGhlcmUgYXJlIHBlbmRpbmcgZXZlbnRzLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0lOUFVUX1BBVVNFRCA9IDQ7CiAgLyoqCiAgICogV2hldGhlciB0aGUgc3Vic2NyaXB0aW9uIGhhcyBiZWVuIGNhbmNlbGVkLgogICAqCiAgICogU2V0IGJ5IGNhbGxpbmcgW2NhbmNlbF0sIG9yIGJ5IGhhbmRsaW5nIGEgImRvbmUiIGV2ZW50LCBvciBhbiAiZXJyb3IiIGV2ZW50CiAgICogd2hlbiBgY2FuY2VsT25FcnJvcmAgaXMgdHJ1ZS4KICAgKi8KICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9DQU5DRUxFRCA9IDg7CiAgLyoqCiAgICogU2V0IHdoZW4gZWl0aGVyOgogICAqCiAgICogICAqIGFuIGVycm9yIGlzIHNlbnQsIGFuZCBbY2FuY2VsT25FcnJvcl0gaXMgdHJ1ZSwgb3IKICAgKiAgICogYSBkb25lIGV2ZW50IGlzIHNlbnQuCiAgICoKICAgKiBJZiB0aGUgc3Vic2NyaXB0aW9uIGlzIGNhbmNlbGVkIHdoaWxlIF9TVEFURV9XQUlUX0ZPUl9DQU5DRUwgaXMgc2V0LCB0aGUKICAgKiBzdGF0ZSBpcyB1bnNldCwgYW5kIG5vIGZ1cnRoZXIgZXZlbnRzIG11c3QgYmUgZGVsaXZlcmVkLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX1dBSVRfRk9SX0NBTkNFTCA9IDE2OwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0lOX0NBTExCQUNLID0gMzI7CiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfSEFTX1BFTkRJTkcgPSA2NDsKICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9QQVVTRV9DT1VOVCA9IDEyODsKCiAgLyogRXZlbnQgaGFuZGxlcnMgcHJvdmlkZWQgaW4gY29uc3RydWN0b3IuICovCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIF9EYXRhSGFuZGxlcjxUPiBfb25EYXRhOwogIEZ1bmN0aW9uIF9vbkVycm9yOwogIF9Eb25lSGFuZGxlciBfb25Eb25lOwogIGZpbmFsIFpvbmUgX3pvbmUgPSBab25lLmN1cnJlbnQ7CgogIC8qKiBCaXQgdmVjdG9yIGJhc2VkIG9uIHN0YXRlLWNvbnN0YW50cyBhYm92ZS4gKi8KICBpbnQgX3N0YXRlOwoKICAvLyBUT0RPKGZsb2l0c2NoKTogcmV1c2UgYW5vdGhlciBmaWVsZAogIC8qKiBUaGUgZnV0dXJlIFtfb25DYW5jZWxdIG1heSByZXR1cm4uICovCiAgRnV0dXJlIF9jYW5jZWxGdXR1cmU7CgogIC8qKgogICAqIFF1ZXVlIG9mIHBlbmRpbmcgZXZlbnRzLgogICAqCiAgICogSXMgY3JlYXRlZCB3aGVuIG5lY2Vzc2FyeSwgb3Igc2V0IGluIGNvbnN0cnVjdG9yIGZvciBwcmVjb25maWd1cmVkIGV2ZW50cy4KICAgKi8KICBfUGVuZGluZ0V2ZW50czxUPiBfcGVuZGluZzsKCiAgX0J1ZmZlcmluZ1N0cmVhbVN1YnNjcmlwdGlvbigKICAgICAgdm9pZCBvbkRhdGEoVCBkYXRhKSwgRnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yKQogICAgICA6IF9zdGF0ZSA9IChjYW5jZWxPbkVycm9yID8gX1NUQVRFX0NBTkNFTF9PTl9FUlJPUiA6IDApIHsKICAgIHRoaXMub25EYXRhKG9uRGF0YSk7CiAgICB0aGlzLm9uRXJyb3Iob25FcnJvcik7CiAgICB0aGlzLm9uRG9uZShvbkRvbmUpOwogIH0KCiAgLyoqCiAgICogU2V0cyB0aGUgc3Vic2NyaXB0aW9uJ3MgcGVuZGluZyBldmVudHMgb2JqZWN0LgogICAqCiAgICogVGhpcyBjYW4gb25seSBiZSBkb25lIG9uY2UuIFRoZSBwZW5kaW5nIGV2ZW50cyBvYmplY3QgaXMgdXNlZCBmb3IgdGhlCiAgICogcmVzdCBvZiB0aGUgc3Vic2NyaXB0aW9uJ3MgbGlmZSBjeWNsZS4KICAgKi8KICB2b2lkIF9zZXRQZW5kaW5nRXZlbnRzKF9QZW5kaW5nRXZlbnRzPFQ+IHBlbmRpbmdFdmVudHMpIHsKICAgIGFzc2VydChfcGVuZGluZyA9PSBudWxsKTsKICAgIGlmIChwZW5kaW5nRXZlbnRzID09IG51bGwpIHJldHVybjsKICAgIF9wZW5kaW5nID0gcGVuZGluZ0V2ZW50czsKICAgIGlmICghcGVuZGluZ0V2ZW50cy5pc0VtcHR5KSB7CiAgICAgIF9zdGF0ZSB8PSBfU1RBVEVfSEFTX1BFTkRJTkc7CiAgICAgIF9wZW5kaW5nLnNjaGVkdWxlKHRoaXMpOwogICAgfQogIH0KCiAgLy8gU3RyZWFtU3Vic2NyaXB0aW9uIGludGVyZmFjZS4KCiAgdm9pZCBvbkRhdGEodm9pZCBoYW5kbGVEYXRhKFQgZXZlbnQpKSB7CiAgICBoYW5kbGVEYXRhID8/PSBfbnVsbERhdGFIYW5kbGVyOwogICAgLy8gVE9ETyhmbG9pdHNjaCk6IHRoZSByZXR1cm4gdHlwZSBzaG91bGQgYmUgJ3ZvaWQnLCBhbmQgdGhlIHR5cGUKICAgIC8vIHNob3VsZCBiZSBpbmZlcnJlZC4KICAgIF9vbkRhdGEgPSBfem9uZS5yZWdpc3RlclVuYXJ5Q2FsbGJhY2s8ZHluYW1pYywgVD4oaGFuZGxlRGF0YSk7CiAgfQoKICB2b2lkIG9uRXJyb3IoRnVuY3Rpb24gaGFuZGxlRXJyb3IpIHsKICAgIGhhbmRsZUVycm9yID8/PSBfbnVsbEVycm9ySGFuZGxlcjsKICAgIGlmIChoYW5kbGVFcnJvciBpcyB2b2lkIEZ1bmN0aW9uKE9iamVjdCwgU3RhY2tUcmFjZSkpIHsKICAgICAgX29uRXJyb3IgPSBfem9uZQogICAgICAgICAgLnJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2s8ZHluYW1pYywgT2JqZWN0LCBTdGFja1RyYWNlPihoYW5kbGVFcnJvcik7CiAgICB9IGVsc2UgaWYgKGhhbmRsZUVycm9yIGlzIHZvaWQgRnVuY3Rpb24oT2JqZWN0KSkgewogICAgICBfb25FcnJvciA9IF96b25lLnJlZ2lzdGVyVW5hcnlDYWxsYmFjazxkeW5hbWljLCBPYmplY3Q+KGhhbmRsZUVycm9yKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJoYW5kbGVFcnJvciBjYWxsYmFjayBtdXN0IHRha2UgZWl0aGVyIGFuIE9iamVjdCAiCiAgICAgICAgICAiKHRoZSBlcnJvciksIG9yIGJvdGggYW4gT2JqZWN0ICh0aGUgZXJyb3IpIGFuZCBhIFN0YWNrVHJhY2UuIik7CiAgICB9CiAgfQoKICB2b2lkIG9uRG9uZSh2b2lkIGhhbmRsZURvbmUoKSkgewogICAgaGFuZGxlRG9uZSA/Pz0gX251bGxEb25lSGFuZGxlcjsKICAgIF9vbkRvbmUgPSBfem9uZS5yZWdpc3RlckNhbGxiYWNrKGhhbmRsZURvbmUpOwogIH0KCiAgdm9pZCBwYXVzZShbRnV0dXJlIHJlc3VtZVNpZ25hbF0pIHsKICAgIGlmIChfaXNDYW5jZWxlZCkgcmV0dXJuOwogICAgYm9vbCB3YXNQYXVzZWQgPSBfaXNQYXVzZWQ7CiAgICBib29sIHdhc0lucHV0UGF1c2VkID0gX2lzSW5wdXRQYXVzZWQ7CiAgICAvLyBJbmNyZW1lbnQgcGF1c2UgY291bnQgYW5kIG1hcmsgaW5wdXQgcGF1c2VkIChpZiBpdCBpc24ndCBhbHJlYWR5KS4KICAgIF9zdGF0ZSA9IChfc3RhdGUgKyBfU1RBVEVfUEFVU0VfQ09VTlQpIHwgX1NUQVRFX0lOUFVUX1BBVVNFRDsKICAgIGlmIChyZXN1bWVTaWduYWwgIT0gbnVsbCkgcmVzdW1lU2lnbmFsLndoZW5Db21wbGV0ZShyZXN1bWUpOwogICAgaWYgKCF3YXNQYXVzZWQgJiYgX3BlbmRpbmcgIT0gbnVsbCkgX3BlbmRpbmcuY2FuY2VsU2NoZWR1bGUoKTsKICAgIGlmICghd2FzSW5wdXRQYXVzZWQgJiYgIV9pbkNhbGxiYWNrKSBfZ3VhcmRDYWxsYmFjayhfb25QYXVzZSk7CiAgfQoKICB2b2lkIHJlc3VtZSgpIHsKICAgIGlmIChfaXNDYW5jZWxlZCkgcmV0dXJuOwogICAgaWYgKF9pc1BhdXNlZCkgewogICAgICBfZGVjcmVtZW50UGF1c2VDb3VudCgpOwogICAgICBpZiAoIV9pc1BhdXNlZCkgewogICAgICAgIGlmIChfaGFzUGVuZGluZyAmJiAhX3BlbmRpbmcuaXNFbXB0eSkgewogICAgICAgICAgLy8gSW5wdXQgaXMgc3RpbGwgcGF1c2VkLgogICAgICAgICAgX3BlbmRpbmcuc2NoZWR1bGUodGhpcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFzc2VydChfbWF5UmVzdW1lSW5wdXQpOwogICAgICAgICAgX3N0YXRlICY9IH5fU1RBVEVfSU5QVVRfUEFVU0VEOwogICAgICAgICAgaWYgKCFfaW5DYWxsYmFjaykgX2d1YXJkQ2FsbGJhY2soX29uUmVzdW1lKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIEZ1dHVyZSBjYW5jZWwoKSB7CiAgICAvLyBUaGUgdXNlciBkb2Vzbid0IHdhbnQgdG8gcmVjZWl2ZSBhbnkgZnVydGhlciBldmVudHMuIElmIHRoZXJlIGlzIGFuCiAgICAvLyBlcnJvciBvciBkb25lIGV2ZW50IHBlbmRpbmcgKHdhaXRpbmcgZm9yIHRoZSBjYW5jZWwgdG8gYmUgZG9uZSkgZGlzY2FyZAogICAgLy8gdGhhdCBldmVudC4KICAgIF9zdGF0ZSAmPSB+X1NUQVRFX1dBSVRfRk9SX0NBTkNFTDsKICAgIGlmICghX2lzQ2FuY2VsZWQpIHsKICAgICAgX2NhbmNlbCgpOwogICAgfQogICAgcmV0dXJuIF9jYW5jZWxGdXR1cmUgPz8gRnV0dXJlLl9udWxsRnV0dXJlOwogIH0KCiAgRnV0dXJlPEU+IGFzRnV0dXJlPEU+KFtFIGZ1dHVyZVZhbHVlXSkgewogICAgX0Z1dHVyZTxFPiByZXN1bHQgPSBuZXcgX0Z1dHVyZTxFPigpOwoKICAgIC8vIE92ZXJ3cml0ZSB0aGUgb25Eb25lIGFuZCBvbkVycm9yIGhhbmRsZXJzLgogICAgX29uRG9uZSA9ICgpIHsKICAgICAgcmVzdWx0Ll9jb21wbGV0ZShmdXR1cmVWYWx1ZSk7CiAgICB9OwogICAgX29uRXJyb3IgPSAoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgICBGdXR1cmUgY2FuY2VsRnV0dXJlID0gY2FuY2VsKCk7CiAgICAgIGlmICghaWRlbnRpY2FsKGNhbmNlbEZ1dHVyZSwgRnV0dXJlLl9udWxsRnV0dXJlKSkgewogICAgICAgIGNhbmNlbEZ1dHVyZS53aGVuQ29tcGxldGUoKCkgewogICAgICAgICAgcmVzdWx0Ll9jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXN1bHQuX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICB9CiAgICB9OwoKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBTdGF0ZSBtYW5hZ2VtZW50LgoKICBib29sIGdldCBfaXNJbnB1dFBhdXNlZCA9PiAoX3N0YXRlICYgX1NUQVRFX0lOUFVUX1BBVVNFRCkgIT0gMDsKICBib29sIGdldCBfaXNDbG9zZWQgPT4gKF9zdGF0ZSAmIF9TVEFURV9DTE9TRUQpICE9IDA7CiAgYm9vbCBnZXQgX2lzQ2FuY2VsZWQgPT4gKF9zdGF0ZSAmIF9TVEFURV9DQU5DRUxFRCkgIT0gMDsKICBib29sIGdldCBfd2FpdHNGb3JDYW5jZWwgPT4gKF9zdGF0ZSAmIF9TVEFURV9XQUlUX0ZPUl9DQU5DRUwpICE9IDA7CiAgYm9vbCBnZXQgX2luQ2FsbGJhY2sgPT4gKF9zdGF0ZSAmIF9TVEFURV9JTl9DQUxMQkFDSykgIT0gMDsKICBib29sIGdldCBfaGFzUGVuZGluZyA9PiAoX3N0YXRlICYgX1NUQVRFX0hBU19QRU5ESU5HKSAhPSAwOwogIGJvb2wgZ2V0IF9pc1BhdXNlZCA9PiBfc3RhdGUgPj0gX1NUQVRFX1BBVVNFX0NPVU5UOwogIGJvb2wgZ2V0IF9jYW5GaXJlID0+IF9zdGF0ZSA8IF9TVEFURV9JTl9DQUxMQkFDSzsKICBib29sIGdldCBfbWF5UmVzdW1lSW5wdXQgPT4KICAgICAgIV9pc1BhdXNlZCAmJiAoX3BlbmRpbmcgPT0gbnVsbCB8fCBfcGVuZGluZy5pc0VtcHR5KTsKICBib29sIGdldCBfY2FuY2VsT25FcnJvciA9PiAoX3N0YXRlICYgX1NUQVRFX0NBTkNFTF9PTl9FUlJPUikgIT0gMDsKCiAgYm9vbCBnZXQgaXNQYXVzZWQgPT4gX2lzUGF1c2VkOwoKICB2b2lkIF9jYW5jZWwoKSB7CiAgICBfc3RhdGUgfD0gX1NUQVRFX0NBTkNFTEVEOwogICAgaWYgKF9oYXNQZW5kaW5nKSB7CiAgICAgIF9wZW5kaW5nLmNhbmNlbFNjaGVkdWxlKCk7CiAgICB9CiAgICBpZiAoIV9pbkNhbGxiYWNrKSBfcGVuZGluZyA9IG51bGw7CiAgICBfY2FuY2VsRnV0dXJlID0gX29uQ2FuY2VsKCk7CiAgfQoKICAvKioKICAgKiBEZWNyZW1lbnRzIHRoZSBwYXVzZSBjb3VudC4KICAgKgogICAqIERvZXMgbm90IGF1dG9tYXRpY2FsbHkgdW5wYXVzZSB0aGUgaW5wdXQgKGNhbGwgW19vblJlc3VtZV0pIHdoZW4KICAgKiB0aGUgcGF1c2UgY291bnQgcmVhY2hlcyB6ZXJvLiBUaGlzIGlzIGhhbmRsZWQgZWxzZXdoZXJlLCBhbmQgb25seQogICAqIGlmIHRoZXJlIGFyZSBubyBwZW5kaW5nIGV2ZW50cyBidWZmZXJlZC4KICAgKi8KICB2b2lkIF9kZWNyZW1lbnRQYXVzZUNvdW50KCkgewogICAgYXNzZXJ0KF9pc1BhdXNlZCk7CiAgICBfc3RhdGUgLT0gX1NUQVRFX1BBVVNFX0NPVU5UOwogIH0KCiAgLy8gX0V2ZW50U2luayBpbnRlcmZhY2UuCgogIHZvaWQgX2FkZChUIGRhdGEpIHsKICAgIGFzc2VydCghX2lzQ2xvc2VkKTsKICAgIGlmIChfaXNDYW5jZWxlZCkgcmV0dXJuOwogICAgaWYgKF9jYW5GaXJlKSB7CiAgICAgIF9zZW5kRGF0YShkYXRhKTsKICAgIH0gZWxzZSB7CiAgICAgIF9hZGRQZW5kaW5nKG5ldyBfRGVsYXllZERhdGE8VD4oZGF0YSkpOwogICAgfQogIH0KCiAgdm9pZCBfYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIGlmIChfaXNDYW5jZWxlZCkgcmV0dXJuOwogICAgaWYgKF9jYW5GaXJlKSB7CiAgICAgIF9zZW5kRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOyAvLyBSZXBvcnRzIGNhbmNlbCBhZnRlciBzZW5kaW5nLgogICAgfSBlbHNlIHsKICAgICAgX2FkZFBlbmRpbmcobmV3IF9EZWxheWVkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpKTsKICAgIH0KICB9CgogIHZvaWQgX2Nsb3NlKCkgewogICAgYXNzZXJ0KCFfaXNDbG9zZWQpOwogICAgaWYgKF9pc0NhbmNlbGVkKSByZXR1cm47CiAgICBfc3RhdGUgfD0gX1NUQVRFX0NMT1NFRDsKICAgIGlmIChfY2FuRmlyZSkgewogICAgICBfc2VuZERvbmUoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9hZGRQZW5kaW5nKGNvbnN0IF9EZWxheWVkRG9uZSgpKTsKICAgIH0KICB9CgogIC8vIEhvb2tzIGNhbGxlZCB3aGVuIHRoZSBpbnB1dCBpcyBwYXVzZWQsIHVucGF1c2VkIG9yIGNhbmNlbGVkLgogIC8vIFRoZXNlIG11c3Qgbm90IHRocm93LiBJZiBvdmVyd3JpdHRlbiB0byBjYWxsIHVzZXIgY29kZSwgaW5jbHVkZSBzdWl0YWJsZQogIC8vIHRyeS9jYXRjaCB3cmFwcGluZyBhbmQgc2VuZCBhbnkgZXJyb3JzIHRvCiAgLy8gW19ab25lLmN1cnJlbnQuaGFuZGxlVW5jYXVnaHRFcnJvcl0uCiAgdm9pZCBfb25QYXVzZSgpIHsKICAgIGFzc2VydChfaXNJbnB1dFBhdXNlZCk7CiAgfQoKICB2b2lkIF9vblJlc3VtZSgpIHsKICAgIGFzc2VydCghX2lzSW5wdXRQYXVzZWQpOwogIH0KCiAgRnV0dXJlIF9vbkNhbmNlbCgpIHsKICAgIGFzc2VydChfaXNDYW5jZWxlZCk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vIEhhbmRsZSBwZW5kaW5nIGV2ZW50cy4KCiAgLyoqCiAgICogQWRkIGEgcGVuZGluZyBldmVudC4KICAgKgogICAqIElmIHRoZSBzdWJzY3JpcHRpb24gaXMgbm90IHBhdXNlZCwgdGhpcyBhbHNvIHNjaGVkdWxlcyBhIGZpcmluZwogICAqIG9mIHBlbmRpbmcgZXZlbnRzIGxhdGVyIChpZiBuZWNlc3NhcnkpLgogICAqLwogIHZvaWQgX2FkZFBlbmRpbmcoX0RlbGF5ZWRFdmVudCBldmVudCkgewogICAgX1N0cmVhbUltcGxFdmVudHM8VD4gcGVuZGluZyA9IF9wZW5kaW5nOwogICAgaWYgKF9wZW5kaW5nID09IG51bGwpIHsKICAgICAgcGVuZGluZyA9IF9wZW5kaW5nID0gbmV3IF9TdHJlYW1JbXBsRXZlbnRzPFQ+KCk7CiAgICB9CiAgICBwZW5kaW5nLmFkZChldmVudCk7CiAgICBpZiAoIV9oYXNQZW5kaW5nKSB7CiAgICAgIF9zdGF0ZSB8PSBfU1RBVEVfSEFTX1BFTkRJTkc7CiAgICAgIGlmICghX2lzUGF1c2VkKSB7CiAgICAgICAgX3BlbmRpbmcuc2NoZWR1bGUodGhpcyk7CiAgICAgIH0KICAgIH0KICB9CgogIC8qIF9FdmVudERpc3BhdGNoIGludGVyZmFjZS4gKi8KCiAgdm9pZCBfc2VuZERhdGEoVCBkYXRhKSB7CiAgICBhc3NlcnQoIV9pc0NhbmNlbGVkKTsKICAgIGFzc2VydCghX2lzUGF1c2VkKTsKICAgIGFzc2VydCghX2luQ2FsbGJhY2spOwogICAgYm9vbCB3YXNJbnB1dFBhdXNlZCA9IF9pc0lucHV0UGF1c2VkOwogICAgX3N0YXRlIHw9IF9TVEFURV9JTl9DQUxMQkFDSzsKICAgIF96b25lLnJ1blVuYXJ5R3VhcmRlZChfb25EYXRhLCBkYXRhKTsKICAgIF9zdGF0ZSAmPSB+X1NUQVRFX0lOX0NBTExCQUNLOwogICAgX2NoZWNrU3RhdGUod2FzSW5wdXRQYXVzZWQpOwogIH0KCiAgdm9pZCBfc2VuZEVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBhc3NlcnQoIV9pc0NhbmNlbGVkKTsKICAgIGFzc2VydCghX2lzUGF1c2VkKTsKICAgIGFzc2VydCghX2luQ2FsbGJhY2spOwogICAgYm9vbCB3YXNJbnB1dFBhdXNlZCA9IF9pc0lucHV0UGF1c2VkOwoKICAgIHZvaWQgc2VuZEVycm9yKCkgewogICAgICAvLyBJZiB0aGUgc3Vic2NyaXB0aW9uIGhhcyBiZWVuIGNhbmNlbGVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBjYW5jZWwKICAgICAgLy8gZnV0dXJlIHRvIGZpbmlzaCB3ZSBtdXN0IG5vdCByZXBvcnQgdGhlIGVycm9yLgogICAgICBpZiAoX2lzQ2FuY2VsZWQgJiYgIV93YWl0c0ZvckNhbmNlbCkgcmV0dXJuOwogICAgICBfc3RhdGUgfD0gX1NUQVRFX0lOX0NBTExCQUNLOwogICAgICAvLyBUT0RPKGZsb2l0c2NoKTogdGhpcyBkeW5hbWljIHNob3VsZCBiZSAndm9pZCcuCiAgICAgIHZhciBvbkVycm9yID0gX29uRXJyb3I7CiAgICAgIGlmIChvbkVycm9yIGlzIHZvaWQgRnVuY3Rpb24oT2JqZWN0LCBTdGFja1RyYWNlKSkgewogICAgICAgIF96b25lLnJ1bkJpbmFyeUd1YXJkZWQ8T2JqZWN0LCBTdGFja1RyYWNlPihvbkVycm9yLCBlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KF9vbkVycm9yIGlzIHZvaWQgRnVuY3Rpb24oT2JqZWN0KSk7CiAgICAgICAgX3pvbmUucnVuVW5hcnlHdWFyZGVkPE9iamVjdD4oX29uRXJyb3IsIGVycm9yKTsKICAgICAgfQogICAgICBfc3RhdGUgJj0gfl9TVEFURV9JTl9DQUxMQkFDSzsKICAgIH0KCiAgICBpZiAoX2NhbmNlbE9uRXJyb3IpIHsKICAgICAgX3N0YXRlIHw9IF9TVEFURV9XQUlUX0ZPUl9DQU5DRUw7CiAgICAgIF9jYW5jZWwoKTsKICAgICAgaWYgKF9jYW5jZWxGdXR1cmUgIT0gbnVsbCAmJgogICAgICAgICAgIWlkZW50aWNhbChfY2FuY2VsRnV0dXJlLCBGdXR1cmUuX251bGxGdXR1cmUpKSB7CiAgICAgICAgX2NhbmNlbEZ1dHVyZS53aGVuQ29tcGxldGUoc2VuZEVycm9yKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzZW5kRXJyb3IoKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgc2VuZEVycm9yKCk7CiAgICAgIC8vIE9ubHkgY2hlY2sgc3RhdGUgaWYgbm90IGNhbmNlbE9uRXJyb3IuCiAgICAgIF9jaGVja1N0YXRlKHdhc0lucHV0UGF1c2VkKTsKICAgIH0KICB9CgogIHZvaWQgX3NlbmREb25lKCkgewogICAgYXNzZXJ0KCFfaXNDYW5jZWxlZCk7CiAgICBhc3NlcnQoIV9pc1BhdXNlZCk7CiAgICBhc3NlcnQoIV9pbkNhbGxiYWNrKTsKCiAgICB2b2lkIHNlbmREb25lKCkgewogICAgICAvLyBJZiB0aGUgc3Vic2NyaXB0aW9uIGhhcyBiZWVuIGNhbmNlbGVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBjYW5jZWwKICAgICAgLy8gZnV0dXJlIHRvIGZpbmlzaCB3ZSBtdXN0IG5vdCByZXBvcnQgdGhlIGRvbmUgZXZlbnQuCiAgICAgIGlmICghX3dhaXRzRm9yQ2FuY2VsKSByZXR1cm47CiAgICAgIF9zdGF0ZSB8PSAoX1NUQVRFX0NBTkNFTEVEIHwgX1NUQVRFX0NMT1NFRCB8IF9TVEFURV9JTl9DQUxMQkFDSyk7CiAgICAgIF96b25lLnJ1bkd1YXJkZWQoX29uRG9uZSk7CiAgICAgIF9zdGF0ZSAmPSB+X1NUQVRFX0lOX0NBTExCQUNLOwogICAgfQoKICAgIF9jYW5jZWwoKTsKICAgIF9zdGF0ZSB8PSBfU1RBVEVfV0FJVF9GT1JfQ0FOQ0VMOwogICAgaWYgKF9jYW5jZWxGdXR1cmUgIT0gbnVsbCAmJgogICAgICAgICFpZGVudGljYWwoX2NhbmNlbEZ1dHVyZSwgRnV0dXJlLl9udWxsRnV0dXJlKSkgewogICAgICBfY2FuY2VsRnV0dXJlLndoZW5Db21wbGV0ZShzZW5kRG9uZSk7CiAgICB9IGVsc2UgewogICAgICBzZW5kRG9uZSgpOwogICAgfQogIH0KCiAgLyoqCiAgICogQ2FsbCBhIGhvb2sgZnVuY3Rpb24uCiAgICoKICAgKiBUaGUgY2FsbCBpcyBwcm9wZXJseSB3cmFwcGVkIGluIGNvZGUgdG8gYXZvaWQgb3RoZXIgY2FsbGJhY2tzCiAgICogZHVyaW5nIHRoZSBjYWxsLCBhbmQgaXQgY2hlY2tzIGZvciBzdGF0ZSBjaGFuZ2VzIGFmdGVyIHRoZSBjYWxsCiAgICogdGhhdCBzaG91bGQgY2F1c2UgZnVydGhlciBjYWxsYmFja3MuCiAgICovCiAgdm9pZCBfZ3VhcmRDYWxsYmFjayh2b2lkIGNhbGxiYWNrKCkpIHsKICAgIGFzc2VydCghX2luQ2FsbGJhY2spOwogICAgYm9vbCB3YXNJbnB1dFBhdXNlZCA9IF9pc0lucHV0UGF1c2VkOwogICAgX3N0YXRlIHw9IF9TVEFURV9JTl9DQUxMQkFDSzsKICAgIGNhbGxiYWNrKCk7CiAgICBfc3RhdGUgJj0gfl9TVEFURV9JTl9DQUxMQkFDSzsKICAgIF9jaGVja1N0YXRlKHdhc0lucHV0UGF1c2VkKTsKICB9CgogIC8qKgogICAqIENoZWNrIGlmIHRoZSBpbnB1dCBuZWVkcyB0byBiZSBpbmZvcm1lZCBvZiBzdGF0ZSBjaGFuZ2VzLgogICAqCiAgICogU3RhdGUgY2hhbmdlcyBhcmUgcGF1c2luZywgcmVzdW1pbmcgYW5kIGNhbmNlbGluZy4KICAgKgogICAqIEFmdGVyIGNhbmNlbGluZywgbm8gZnVydGhlciBjYWxsYmFja3Mgd2lsbCBoYXBwZW4uCiAgICoKICAgKiBUaGUgY2FuY2VsIGNhbGxiYWNrIGlzIGNhbGxlZCBhZnRlciBhIHVzZXIgY2FuY2VsLCBvciBhZnRlcgogICAqIHRoZSBmaW5hbCBkb25lIGV2ZW50IGlzIHNlbnQuCiAgICovCiAgdm9pZCBfY2hlY2tTdGF0ZShib29sIHdhc0lucHV0UGF1c2VkKSB7CiAgICBhc3NlcnQoIV9pbkNhbGxiYWNrKTsKICAgIGlmIChfaGFzUGVuZGluZyAmJiBfcGVuZGluZy5pc0VtcHR5KSB7CiAgICAgIF9zdGF0ZSAmPSB+X1NUQVRFX0hBU19QRU5ESU5HOwogICAgICBpZiAoX2lzSW5wdXRQYXVzZWQgJiYgX21heVJlc3VtZUlucHV0KSB7CiAgICAgICAgX3N0YXRlICY9IH5fU1RBVEVfSU5QVVRfUEFVU0VEOwogICAgICB9CiAgICB9CiAgICAvLyBJZiB0aGUgc3RhdGUgY2hhbmdlcyBkdXJpbmcgYSBjYWxsYmFjaywgd2UgaW1tZWRpYXRlbHkKICAgIC8vIG1ha2UgYSBuZXcgc3RhdGUtY2hhbmdlIGNhbGxiYWNrLiBMb29wIHVudGlsIHRoZSBzdGF0ZSBkaWRuJ3QgY2hhbmdlLgogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKF9pc0NhbmNlbGVkKSB7CiAgICAgICAgX3BlbmRpbmcgPSBudWxsOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBib29sIGlzSW5wdXRQYXVzZWQgPSBfaXNJbnB1dFBhdXNlZDsKICAgICAgaWYgKHdhc0lucHV0UGF1c2VkID09IGlzSW5wdXRQYXVzZWQpIGJyZWFrOwogICAgICBfc3RhdGUgXj0gX1NUQVRFX0lOX0NBTExCQUNLOwogICAgICBpZiAoaXNJbnB1dFBhdXNlZCkgewogICAgICAgIF9vblBhdXNlKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX29uUmVzdW1lKCk7CiAgICAgIH0KICAgICAgX3N0YXRlICY9IH5fU1RBVEVfSU5fQ0FMTEJBQ0s7CiAgICAgIHdhc0lucHV0UGF1c2VkID0gaXNJbnB1dFBhdXNlZDsKICAgIH0KICAgIGlmIChfaGFzUGVuZGluZyAmJiAhX2lzUGF1c2VkKSB7CiAgICAgIF9wZW5kaW5nLnNjaGVkdWxlKHRoaXMpOwogICAgfQogIH0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDb21tb24gYmFzZSBjbGFzcyBmb3Igc2luZ2xlIGFuZCBtdWx0aS1zdWJzY3JpcHRpb24gc3RyZWFtcy4KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQphYnN0cmFjdCBjbGFzcyBfU3RyZWFtSW1wbDxUPiBleHRlbmRzIFN0cmVhbTxUPiB7CiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgLy8gU3RyZWFtIGludGVyZmFjZS4KCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IGxpc3Rlbih2b2lkIG9uRGF0YShUIGRhdGEpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgY2FuY2VsT25FcnJvciA9IGlkZW50aWNhbCh0cnVlLCBjYW5jZWxPbkVycm9yKTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPQogICAgICAgIF9jcmVhdGVTdWJzY3JpcHRpb24ob25EYXRhLCBvbkVycm9yLCBvbkRvbmUsIGNhbmNlbE9uRXJyb3IpOwogICAgX29uTGlzdGVuKHN1YnNjcmlwdGlvbik7CiAgICByZXR1cm4gc3Vic2NyaXB0aW9uOwogIH0KCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIC8qKiBDcmVhdGUgYSBzdWJzY3JpcHRpb24gb2JqZWN0LiBDYWxsZWQgYnkgW3N1YmNyaWJlXS4gKi8KICBTdHJlYW1TdWJzY3JpcHRpb248VD4gX2NyZWF0ZVN1YnNjcmlwdGlvbih2b2lkIG9uRGF0YShUIGRhdGEpLAogICAgICBGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3IpIHsKICAgIHJldHVybiBuZXcgX0J1ZmZlcmluZ1N0cmVhbVN1YnNjcmlwdGlvbjxUPigKICAgICAgICBvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcik7CiAgfQoKICAvKiogSG9vayBjYWxsZWQgd2hlbiB0aGUgc3Vic2NyaXB0aW9uIGhhcyBiZWVuIGNyZWF0ZWQuICovCiAgdm9pZCBfb25MaXN0ZW4oU3RyZWFtU3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbikge30KfQoKdHlwZWRlZiBfUGVuZGluZ0V2ZW50czxUPiBfRXZlbnRHZW5lcmF0b3I8VD4oKTsKCi8qKiBTdHJlYW0gdGhhdCBnZW5lcmF0ZXMgaXRzIG93biBldmVudHMuICovCmNsYXNzIF9HZW5lcmF0ZWRTdHJlYW1JbXBsPFQ+IGV4dGVuZHMgX1N0cmVhbUltcGw8VD4gewogIGZpbmFsIF9FdmVudEdlbmVyYXRvcjxUPiBfcGVuZGluZzsKICBib29sIF9pc1VzZWQgPSBmYWxzZTsKICAvKioKICAgKiBJbml0aWFsaXplcyB0aGUgc3RyZWFtIHRvIGhhdmUgb25seSB0aGUgZXZlbnRzIHByb3ZpZGVkIGJ5IGEKICAgKiBbX1BlbmRpbmdFdmVudHNdLgogICAqCiAgICogQSBuZXcgW19QZW5kaW5nRXZlbnRzXSBtdXN0IGJlIGdlbmVyYXRlZCBmb3IgZWFjaCBsaXN0ZW4uCiAgICovCiAgX0dlbmVyYXRlZFN0cmVhbUltcGwodGhpcy5fcGVuZGluZyk7CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBfY3JlYXRlU3Vic2NyaXB0aW9uKHZvaWQgb25EYXRhKFQgZGF0YSksCiAgICAgIEZ1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcikgewogICAgaWYgKF9pc1VzZWQpIHRocm93IG5ldyBTdGF0ZUVycm9yKCJTdHJlYW0gaGFzIGFscmVhZHkgYmVlbiBsaXN0ZW5lZCB0by4iKTsKICAgIF9pc1VzZWQgPSB0cnVlOwogICAgcmV0dXJuIG5ldyBfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uPFQ+KAogICAgICAgIG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yKQogICAgICAuLl9zZXRQZW5kaW5nRXZlbnRzKF9wZW5kaW5nKCkpOwogIH0KfQoKLyoqIFBlbmRpbmcgZXZlbnRzIG9iamVjdCB0aGF0IGdldHMgaXRzIGV2ZW50cyBmcm9tIGFuIFtJdGVyYWJsZV0uICovCmNsYXNzIF9JdGVyYWJsZVBlbmRpbmdFdmVudHM8VD4gZXh0ZW5kcyBfUGVuZGluZ0V2ZW50czxUPiB7CiAgLy8gVGhlIGl0ZXJhdG9yIHByb3ZpZGluZyBkYXRhIGZvciBkYXRhIGV2ZW50cy4KICAvLyBTZXQgdG8gbnVsbCB3aGVuIGl0ZXJhdGlvbiBoYXMgY29tcGxldGVkLgogIEl0ZXJhdG9yPFQ+IF9pdGVyYXRvcjsKCiAgX0l0ZXJhYmxlUGVuZGluZ0V2ZW50cyhJdGVyYWJsZTxUPiBkYXRhKSA6IF9pdGVyYXRvciA9IGRhdGEuaXRlcmF0b3I7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2l0ZXJhdG9yID09IG51bGw7CgogIHZvaWQgaGFuZGxlTmV4dChfRXZlbnREaXNwYXRjaDxUPiBkaXNwYXRjaCkgewogICAgaWYgKF9pdGVyYXRvciA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJObyBldmVudHMgcGVuZGluZy4iKTsKICAgIH0KICAgIC8vIFNlbmQgb25lIGV2ZW50IHBlciBjYWxsIHRvIG1vdmVOZXh0LgogICAgLy8gSWYgbW92ZU5leHQgcmV0dXJucyB0cnVlLCBzZW5kIHRoZSBjdXJyZW50IGVsZW1lbnQgYXMgZGF0YS4KICAgIC8vIElmIGN1cnJlbnQgdGhyb3dzLCBzZW5kIHRoYXQgZXJyb3IsIGJ1dCBrZWVwIGl0ZXJhdGluZy4KICAgIC8vIElmIG1vdmVOZXh0IHJldHVybnMgZmFsc2UsIHNlbmQgYSBkb25lIGV2ZW50IGFuZCBjbGVhciB0aGUgX2l0ZXJhdG9yLgogICAgLy8gSWYgbW92ZU5leHQgdGhyb3dzIGFuIGVycm9yLCBzZW5kIGFuIGVycm9yIGFuZCBwcmVwYXJlIHRvIHNlbmQgYSBkb25lCiAgICAvLyBldmVudCBhZnRlcndhcmRzLgogICAgYm9vbCBoYXNNb3JlOwogICAgdHJ5IHsKICAgICAgaGFzTW9yZSA9IF9pdGVyYXRvci5tb3ZlTmV4dCgpOwogICAgICBpZiAoaGFzTW9yZSkgewogICAgICAgIGRpc3BhdGNoLl9zZW5kRGF0YShfaXRlcmF0b3IuY3VycmVudCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2l0ZXJhdG9yID0gbnVsbDsKICAgICAgICBkaXNwYXRjaC5fc2VuZERvbmUoKTsKICAgICAgfQogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBpZiAoaGFzTW9yZSA9PSBudWxsKSB7CiAgICAgICAgLy8gVGhyZXcgaW4gLm1vdmVOZXh0KCkuCiAgICAgICAgLy8gRW5zdXJlIHRoYXQgd2Ugc2VuZCBhIGRvbmUgYWZ0ZXJ3YXJkcy4KICAgICAgICBfaXRlcmF0b3IgPSBjb25zdCBFbXB0eUl0ZXJhdG9yPE51bGw+KCk7CiAgICAgICAgZGlzcGF0Y2guX3NlbmRFcnJvcihlLCBzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBUaHJldyBpbiAuY3VycmVudC4KICAgICAgICBkaXNwYXRjaC5fc2VuZEVycm9yKGUsIHMpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgaWYgKGlzU2NoZWR1bGVkKSBjYW5jZWxTY2hlZHVsZSgpOwogICAgX2l0ZXJhdG9yID0gbnVsbDsKICB9Cn0KCi8vIEludGVybmFsIGhlbHBlcnMuCgovLyBUeXBlcyBvZiB0aGUgZGlmZmVyZW50IGhhbmRsZXJzIG9uIGEgc3RyZWFtLiBUeXBlcyB1c2VkIHRvIHR5cGUgZmllbGRzLgp0eXBlZGVmIHZvaWQgX0RhdGFIYW5kbGVyPFQ+KFQgdmFsdWUpOwp0eXBlZGVmIHZvaWQgX0RvbmVIYW5kbGVyKCk7CgovKiogRGVmYXVsdCBkYXRhIGhhbmRsZXIsIGRvZXMgbm90aGluZy4gKi8Kdm9pZCBfbnVsbERhdGFIYW5kbGVyKE9iamVjdCB2YWx1ZSkge30KCi8qKiBEZWZhdWx0IGVycm9yIGhhbmRsZXIsIHJlcG9ydHMgdGhlIGVycm9yIHRvIHRoZSBjdXJyZW50IHpvbmUncyBoYW5kbGVyLiAqLwp2b2lkIF9udWxsRXJyb3JIYW5kbGVyKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICBab25lLmN1cnJlbnQuaGFuZGxlVW5jYXVnaHRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7Cn0KCi8qKiBEZWZhdWx0IGRvbmUgaGFuZGxlciwgZG9lcyBub3RoaW5nLiAqLwp2b2lkIF9udWxsRG9uZUhhbmRsZXIoKSB7fQoKLyoqIEEgZGVsYXllZCBldmVudCBvbiBhIGJ1ZmZlcmluZyBzdHJlYW0gc3Vic2NyaXB0aW9uLiAqLwphYnN0cmFjdCBjbGFzcyBfRGVsYXllZEV2ZW50PFQ+IHsKICAvKiogQWRkZWQgYXMgYSBsaW5rZWQgbGlzdCBvbiB0aGUgW1N0cmVhbUNvbnRyb2xsZXJdLiAqLwogIF9EZWxheWVkRXZlbnQgbmV4dDsKICAvKiogRXhlY3V0ZSB0aGUgZGVsYXllZCBldmVudCBvbiB0aGUgW1N0cmVhbUNvbnRyb2xsZXJdLiAqLwogIHZvaWQgcGVyZm9ybShfRXZlbnREaXNwYXRjaDxUPiBkaXNwYXRjaCk7Cn0KCi8qKiBBIGRlbGF5ZWQgZGF0YSBldmVudC4gKi8KY2xhc3MgX0RlbGF5ZWREYXRhPFQ+IGV4dGVuZHMgX0RlbGF5ZWRFdmVudDxUPiB7CiAgZmluYWwgVCB2YWx1ZTsKICBfRGVsYXllZERhdGEodGhpcy52YWx1ZSk7CiAgdm9pZCBwZXJmb3JtKF9FdmVudERpc3BhdGNoPFQ+IGRpc3BhdGNoKSB7CiAgICBkaXNwYXRjaC5fc2VuZERhdGEodmFsdWUpOwogIH0KfQoKLyoqIEEgZGVsYXllZCBlcnJvciBldmVudC4gKi8KY2xhc3MgX0RlbGF5ZWRFcnJvciBleHRlbmRzIF9EZWxheWVkRXZlbnQgewogIGZpbmFsIGVycm9yOwogIGZpbmFsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZTsKCiAgX0RlbGF5ZWRFcnJvcih0aGlzLmVycm9yLCB0aGlzLnN0YWNrVHJhY2UpOwogIHZvaWQgcGVyZm9ybShfRXZlbnREaXNwYXRjaCBkaXNwYXRjaCkgewogICAgZGlzcGF0Y2guX3NlbmRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQp9CgovKiogQSBkZWxheWVkIGRvbmUgZXZlbnQuICovCmNsYXNzIF9EZWxheWVkRG9uZSBpbXBsZW1lbnRzIF9EZWxheWVkRXZlbnQgewogIGNvbnN0IF9EZWxheWVkRG9uZSgpOwogIHZvaWQgcGVyZm9ybShfRXZlbnREaXNwYXRjaCBkaXNwYXRjaCkgewogICAgZGlzcGF0Y2guX3NlbmREb25lKCk7CiAgfQoKICBfRGVsYXllZEV2ZW50IGdldCBuZXh0ID0+IG51bGw7CgogIHZvaWQgc2V0IG5leHQoX0RlbGF5ZWRFdmVudCBfKSB7CiAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiTm8gZXZlbnRzIGFmdGVyIGEgZG9uZS4iKTsKICB9Cn0KCi8qKiBTdXBlcmNsYXNzIGZvciBwcm92aWRlciBvZiBwZW5kaW5nIGV2ZW50cy4gKi8KYWJzdHJhY3QgY2xhc3MgX1BlbmRpbmdFdmVudHM8VD4gewogIC8vIE5vIGFzeW5jIGV2ZW50IGhhcyBiZWVuIHNjaGVkdWxlZC4KICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9VTlNDSEVEVUxFRCA9IDA7CiAgLy8gQW4gYXN5bmMgZXZlbnQgaGFzIGJlZW4gc2NoZWR1bGVkIHRvIHJ1biBhIGZ1bmN0aW9uLgogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX1NDSEVEVUxFRCA9IDE7CiAgLy8gQW4gYXN5bmMgZXZlbnQgaGFzIGJlZW4gc2NoZWR1bGVkLCBidXQgaXQgd2lsbCBkbyBub3RoaW5nIHdoZW4gaXQgcnVucy4KICAvLyBBc3luYyBldmVudHMgY2FuJ3QgYmUgcHJlZW1wdGVkLgogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0NBTkNFTEVEID0gMzsKCiAgLyoqCiAgICogU3RhdGUgb2YgYmVpbmcgc2NoZWR1bGVkLgogICAqCiAgICogU2V0IHRvIFtfU1RBVEVfU0NIRURVTEVEXSB3aGVuIHBlbmRpbmcgZXZlbnRzIGFyZSBzY2hlZHVsZWQgZm9yCiAgICogYXN5bmMgZGlzcGF0Y2guIFNpbmNlIHdlIGNhbid0IGNhbmNlbCBhIFtzY2hlZHVsZU1pY3JvdGFza10gY2FsbCwgaWYKICAgKiBzY2hlZHVsaW5nIGlzICJjYW5jZWxlZCIsIHRoZSBfc3RhdGUgaXMgc2ltcGx5IHNldCB0byBbX1NUQVRFX0NBTkNFTEVEXQogICAqIHdoaWNoIHdpbGwgbWFrZSB0aGUgYXN5bmMgY29kZSBkbyBub3RoaW5nIGV4Y2VwdCByZXNldHRpbmcgW19zdGF0ZV0uCiAgICoKICAgKiBJZiBldmVudHMgYXJlIHNjaGVkdWxlZCB3aGlsZSB0aGUgc3RhdGUgaXMgW19TVEFURV9DQU5DRUxFRF0sIGl0IGlzCiAgICogbWVyZWx5IHN3aXRjaGVkIGJhY2sgdG8gW19TVEFURV9TQ0hFRFVMRURdLCBidXQgbm8gbmV3IGNhbGwgdG8KICAgKiBbc2NoZWR1bGVNaWNyb3Rhc2tdIGlzIHBlcmZvcm1lZC4KICAgKi8KICBpbnQgX3N0YXRlID0gX1NUQVRFX1VOU0NIRURVTEVEOwoKICBib29sIGdldCBpc0VtcHR5OwoKICBib29sIGdldCBpc1NjaGVkdWxlZCA9PiBfc3RhdGUgPT0gX1NUQVRFX1NDSEVEVUxFRDsKICBib29sIGdldCBfZXZlbnRTY2hlZHVsZWQgPT4gX3N0YXRlID49IF9TVEFURV9TQ0hFRFVMRUQ7CgogIC8qKgogICAqIFNjaGVkdWxlIGFuIGV2ZW50IHRvIHJ1biBsYXRlci4KICAgKgogICAqIElmIGNhbGxlZCBtb3JlIHRoYW4gb25jZSwgaXQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBzYW1lIGRpc3BhdGNoIGFzCiAgICogYXJndW1lbnQgZWFjaCB0aW1lLiBJdCBtYXkgcmV1c2UgYW4gZWFybGllciBhcmd1bWVudCBpbiBzb21lIGNhc2VzLgogICAqLwogIHZvaWQgc2NoZWR1bGUoX0V2ZW50RGlzcGF0Y2g8VD4gZGlzcGF0Y2gpIHsKICAgIGlmIChpc1NjaGVkdWxlZCkgcmV0dXJuOwogICAgYXNzZXJ0KCFpc0VtcHR5KTsKICAgIGlmIChfZXZlbnRTY2hlZHVsZWQpIHsKICAgICAgYXNzZXJ0KF9zdGF0ZSA9PSBfU1RBVEVfQ0FOQ0VMRUQpOwogICAgICBfc3RhdGUgPSBfU1RBVEVfU0NIRURVTEVEOwogICAgICByZXR1cm47CiAgICB9CiAgICBzY2hlZHVsZU1pY3JvdGFzaygoKSB7CiAgICAgIGludCBvbGRTdGF0ZSA9IF9zdGF0ZTsKICAgICAgX3N0YXRlID0gX1NUQVRFX1VOU0NIRURVTEVEOwogICAgICBpZiAob2xkU3RhdGUgPT0gX1NUQVRFX0NBTkNFTEVEKSByZXR1cm47CiAgICAgIGhhbmRsZU5leHQoZGlzcGF0Y2gpOwogICAgfSk7CiAgICBfc3RhdGUgPSBfU1RBVEVfU0NIRURVTEVEOwogIH0KCiAgdm9pZCBjYW5jZWxTY2hlZHVsZSgpIHsKICAgIGlmIChpc1NjaGVkdWxlZCkgX3N0YXRlID0gX1NUQVRFX0NBTkNFTEVEOwogIH0KCiAgdm9pZCBoYW5kbGVOZXh0KF9FdmVudERpc3BhdGNoPFQ+IGRpc3BhdGNoKTsKCiAgLyoqIFRocm93IGF3YXkgYW55IHBlbmRpbmcgZXZlbnRzIGFuZCBjYW5jZWwgc2NoZWR1bGVkIGV2ZW50cy4gKi8KICB2b2lkIGNsZWFyKCk7Cn0KCi8qKiBDbGFzcyBob2xkaW5nIHBlbmRpbmcgZXZlbnRzIGZvciBhIFtfU3RyZWFtSW1wbF0uICovCmNsYXNzIF9TdHJlYW1JbXBsRXZlbnRzPFQ+IGV4dGVuZHMgX1BlbmRpbmdFdmVudHM8VD4gewogIC8vLyBTaW5nbGUgbGlua2VkIGxpc3Qgb2YgW19EZWxheWVkRXZlbnRdIG9iamVjdHMuCiAgX0RlbGF5ZWRFdmVudCBmaXJzdFBlbmRpbmdFdmVudDsKCiAgLy8vIExhc3QgZWxlbWVudCBpbiB0aGUgbGlzdCBvZiBwZW5kaW5nIGV2ZW50cy4gTmV3IGV2ZW50cyBhcmUgYWRkZWQgYWZ0ZXIgaXQuCiAgX0RlbGF5ZWRFdmVudCBsYXN0UGVuZGluZ0V2ZW50OwoKICBib29sIGdldCBpc0VtcHR5ID0+IGxhc3RQZW5kaW5nRXZlbnQgPT0gbnVsbDsKCiAgdm9pZCBhZGQoX0RlbGF5ZWRFdmVudCBldmVudCkgewogICAgaWYgKGxhc3RQZW5kaW5nRXZlbnQgPT0gbnVsbCkgewogICAgICBmaXJzdFBlbmRpbmdFdmVudCA9IGxhc3RQZW5kaW5nRXZlbnQgPSBldmVudDsKICAgIH0gZWxzZSB7CiAgICAgIGxhc3RQZW5kaW5nRXZlbnQgPSBsYXN0UGVuZGluZ0V2ZW50Lm5leHQgPSBldmVudDsKICAgIH0KICB9CgogIHZvaWQgaGFuZGxlTmV4dChfRXZlbnREaXNwYXRjaDxUPiBkaXNwYXRjaCkgewogICAgYXNzZXJ0KCFpc1NjaGVkdWxlZCk7CiAgICBfRGVsYXllZEV2ZW50IGV2ZW50ID0gZmlyc3RQZW5kaW5nRXZlbnQ7CiAgICBmaXJzdFBlbmRpbmdFdmVudCA9IGV2ZW50Lm5leHQ7CiAgICBpZiAoZmlyc3RQZW5kaW5nRXZlbnQgPT0gbnVsbCkgewogICAgICBsYXN0UGVuZGluZ0V2ZW50ID0gbnVsbDsKICAgIH0KICAgIGV2ZW50LnBlcmZvcm0oZGlzcGF0Y2gpOwogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIGlmIChpc1NjaGVkdWxlZCkgY2FuY2VsU2NoZWR1bGUoKTsKICAgIGZpcnN0UGVuZGluZ0V2ZW50ID0gbGFzdFBlbmRpbmdFdmVudCA9IG51bGw7CiAgfQp9Cgp0eXBlZGVmIHZvaWQgX0Jyb2FkY2FzdENhbGxiYWNrPFQ+KFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pOwoKLyoqCiAqIERvbmUgc3Vic2NyaXB0aW9uIHRoYXQgd2lsbCBzZW5kIG9uZSBkb25lIGV2ZW50IGFzIHNvb24gYXMgcG9zc2libGUuCiAqLwpjbGFzcyBfRG9uZVN0cmVhbVN1YnNjcmlwdGlvbjxUPiBpbXBsZW1lbnRzIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiB7CiAgc3RhdGljIGNvbnN0IGludCBfRE9ORV9TRU5UID0gMTsKICBzdGF0aWMgY29uc3QgaW50IF9TQ0hFRFVMRUQgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgX1BBVVNFRCA9IDQ7CgogIGZpbmFsIFpvbmUgX3pvbmU7CiAgaW50IF9zdGF0ZSA9IDA7CiAgX0RvbmVIYW5kbGVyIF9vbkRvbmU7CgogIF9Eb25lU3RyZWFtU3Vic2NyaXB0aW9uKHRoaXMuX29uRG9uZSkgOiBfem9uZSA9IFpvbmUuY3VycmVudCB7CiAgICBfc2NoZWR1bGUoKTsKICB9CgogIGJvb2wgZ2V0IF9pc1NlbnQgPT4gKF9zdGF0ZSAmIF9ET05FX1NFTlQpICE9IDA7CiAgYm9vbCBnZXQgX2lzU2NoZWR1bGVkID0+IChfc3RhdGUgJiBfU0NIRURVTEVEKSAhPSAwOwogIGJvb2wgZ2V0IGlzUGF1c2VkID0+IF9zdGF0ZSA+PSBfUEFVU0VEOwoKICB2b2lkIF9zY2hlZHVsZSgpIHsKICAgIGlmIChfaXNTY2hlZHVsZWQpIHJldHVybjsKICAgIF96b25lLnNjaGVkdWxlTWljcm90YXNrKF9zZW5kRG9uZSk7CiAgICBfc3RhdGUgfD0gX1NDSEVEVUxFRDsKICB9CgogIHZvaWQgb25EYXRhKHZvaWQgaGFuZGxlRGF0YShUIGRhdGEpKSB7fQogIHZvaWQgb25FcnJvcihGdW5jdGlvbiBoYW5kbGVFcnJvcikge30KICB2b2lkIG9uRG9uZSh2b2lkIGhhbmRsZURvbmUoKSkgewogICAgX29uRG9uZSA9IGhhbmRsZURvbmU7CiAgfQoKICB2b2lkIHBhdXNlKFtGdXR1cmUgcmVzdW1lU2lnbmFsXSkgewogICAgX3N0YXRlICs9IF9QQVVTRUQ7CiAgICBpZiAocmVzdW1lU2lnbmFsICE9IG51bGwpIHJlc3VtZVNpZ25hbC53aGVuQ29tcGxldGUocmVzdW1lKTsKICB9CgogIHZvaWQgcmVzdW1lKCkgewogICAgaWYgKGlzUGF1c2VkKSB7CiAgICAgIF9zdGF0ZSAtPSBfUEFVU0VEOwogICAgICBpZiAoIWlzUGF1c2VkICYmICFfaXNTZW50KSB7CiAgICAgICAgX3NjaGVkdWxlKCk7CiAgICAgIH0KICAgIH0KICB9CgogIEZ1dHVyZSBjYW5jZWwoKSA9PiBGdXR1cmUuX251bGxGdXR1cmU7CgogIEZ1dHVyZTxFPiBhc0Z1dHVyZTxFPihbRSBmdXR1cmVWYWx1ZV0pIHsKICAgIF9GdXR1cmU8RT4gcmVzdWx0ID0gbmV3IF9GdXR1cmU8RT4oKTsKICAgIF9vbkRvbmUgPSAoKSB7CiAgICAgIHJlc3VsdC5fY29tcGxldGVXaXRoVmFsdWUoZnV0dXJlVmFsdWUpOwogICAgfTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIF9zZW5kRG9uZSgpIHsKICAgIF9zdGF0ZSAmPSB+X1NDSEVEVUxFRDsKICAgIGlmIChpc1BhdXNlZCkgcmV0dXJuOwogICAgX3N0YXRlIHw9IF9ET05FX1NFTlQ7CiAgICBpZiAoX29uRG9uZSAhPSBudWxsKSBfem9uZS5ydW5HdWFyZGVkKF9vbkRvbmUpOwogIH0KfQoKY2xhc3MgX0FzQnJvYWRjYXN0U3RyZWFtPFQ+IGV4dGVuZHMgU3RyZWFtPFQ+IHsKICBmaW5hbCBTdHJlYW08VD4gX3NvdXJjZTsKICBmaW5hbCBfQnJvYWRjYXN0Q2FsbGJhY2s8VD4gX29uTGlzdGVuSGFuZGxlcjsKICBmaW5hbCBfQnJvYWRjYXN0Q2FsbGJhY2s8VD4gX29uQ2FuY2VsSGFuZGxlcjsKICBmaW5hbCBab25lIF96b25lOwoKICBfQXNCcm9hZGNhc3RTdHJlYW1Db250cm9sbGVyPFQ+IF9jb250cm9sbGVyOwogIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBfc3Vic2NyaXB0aW9uOwoKICBfQXNCcm9hZGNhc3RTdHJlYW0oCiAgICAgIHRoaXMuX3NvdXJjZSwKICAgICAgdm9pZCBvbkxpc3RlbkhhbmRsZXIoU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiksCiAgICAgIHZvaWQgb25DYW5jZWxIYW5kbGVyKFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pKQogICAgICAvLyBUT0RPKGZsb2l0c2NoKTogdGhlIHJldHVybiB0eXBlIHNob3VsZCBiZSB2b2lkIGFuZCBzaG91bGQgYmUKICAgICAgLy8gaW5mZXJyZWQuCiAgICAgIDogX29uTGlzdGVuSGFuZGxlciA9IFpvbmUuY3VycmVudAogICAgICAgICAgICAucmVnaXN0ZXJVbmFyeUNhbGxiYWNrPGR5bmFtaWMsIFN0cmVhbVN1YnNjcmlwdGlvbjxUPj4oCiAgICAgICAgICAgICAgICBvbkxpc3RlbkhhbmRsZXIpLAogICAgICAgIF9vbkNhbmNlbEhhbmRsZXIgPSBab25lLmN1cnJlbnQKICAgICAgICAgICAgLnJlZ2lzdGVyVW5hcnlDYWxsYmFjazxkeW5hbWljLCBTdHJlYW1TdWJzY3JpcHRpb248VD4+KAogICAgICAgICAgICAgICAgb25DYW5jZWxIYW5kbGVyKSwKICAgICAgICBfem9uZSA9IFpvbmUuY3VycmVudCB7CiAgICBfY29udHJvbGxlciA9IG5ldyBfQXNCcm9hZGNhc3RTdHJlYW1Db250cm9sbGVyPFQ+KF9vbkxpc3RlbiwgX29uQ2FuY2VsKTsKICB9CgogIGJvb2wgZ2V0IGlzQnJvYWRjYXN0ID0+IHRydWU7CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBsaXN0ZW4odm9pZCBvbkRhdGEoVCBkYXRhKSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIGlmIChfY29udHJvbGxlciA9PSBudWxsIHx8IF9jb250cm9sbGVyLmlzQ2xvc2VkKSB7CiAgICAgIC8vIFJldHVybiBhIGR1bW15IHN1YnNjcmlwdGlvbiBiYWNrZWQgYnkgbm90aGluZywgc2luY2UKICAgICAgLy8gaXQgd2lsbCBvbmx5IGV2ZXIgc2VuZCBvbmUgZG9uZSBldmVudC4KICAgICAgcmV0dXJuIG5ldyBfRG9uZVN0cmVhbVN1YnNjcmlwdGlvbjxUPihvbkRvbmUpOwogICAgfQogICAgX3N1YnNjcmlwdGlvbiA/Pz0gX3NvdXJjZS5saXN0ZW4oX2NvbnRyb2xsZXIuYWRkLAogICAgICAgIG9uRXJyb3I6IF9jb250cm9sbGVyLmFkZEVycm9yLCBvbkRvbmU6IF9jb250cm9sbGVyLmNsb3NlKTsKICAgIGNhbmNlbE9uRXJyb3IgPSBpZGVudGljYWwodHJ1ZSwgY2FuY2VsT25FcnJvcik7CiAgICByZXR1cm4gX2NvbnRyb2xsZXIuX3N1YnNjcmliZShvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcik7CiAgfQoKICB2b2lkIF9vbkNhbmNlbCgpIHsKICAgIGJvb2wgc2h1dGRvd24gPSAoX2NvbnRyb2xsZXIgPT0gbnVsbCkgfHwgX2NvbnRyb2xsZXIuaXNDbG9zZWQ7CiAgICBpZiAoX29uQ2FuY2VsSGFuZGxlciAhPSBudWxsKSB7CiAgICAgIF96b25lLnJ1blVuYXJ5KAogICAgICAgICAgX29uQ2FuY2VsSGFuZGxlciwgbmV3IF9Ccm9hZGNhc3RTdWJzY3JpcHRpb25XcmFwcGVyPFQ+KHRoaXMpKTsKICAgIH0KICAgIGlmIChzaHV0ZG93bikgewogICAgICBpZiAoX3N1YnNjcmlwdGlvbiAhPSBudWxsKSB7CiAgICAgICAgX3N1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgICAgICBfc3Vic2NyaXB0aW9uID0gbnVsbDsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBfb25MaXN0ZW4oKSB7CiAgICBpZiAoX29uTGlzdGVuSGFuZGxlciAhPSBudWxsKSB7CiAgICAgIF96b25lLnJ1blVuYXJ5KAogICAgICAgICAgX29uTGlzdGVuSGFuZGxlciwgbmV3IF9Ccm9hZGNhc3RTdWJzY3JpcHRpb25XcmFwcGVyPFQ+KHRoaXMpKTsKICAgIH0KICB9CgogIC8vIE1ldGhvZHMgY2FsbGVkIGZyb20gX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbldyYXBwZXIuCiAgdm9pZCBfY2FuY2VsU3Vic2NyaXB0aW9uKCkgewogICAgaWYgKF9zdWJzY3JpcHRpb24gPT0gbnVsbCkgcmV0dXJuOwogICAgLy8gQ2FsbGVkIGJ5IFtfY29udHJvbGxlcl0gd2hlbiBpdCBoYXMgbm8gc3Vic2NyaWJlcnMgbGVmdC4KICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb24gPSBfc3Vic2NyaXB0aW9uOwogICAgX3N1YnNjcmlwdGlvbiA9IG51bGw7CiAgICBfY29udHJvbGxlciA9IG51bGw7IC8vIE1hcmtzIHRoZSBzdHJlYW0gYXMgbm8gbG9uZ2VyIGxpc3RlbmFibGUuCiAgICBzdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgfQoKICB2b2lkIF9wYXVzZVN1YnNjcmlwdGlvbihGdXR1cmUgcmVzdW1lU2lnbmFsKSB7CiAgICBpZiAoX3N1YnNjcmlwdGlvbiA9PSBudWxsKSByZXR1cm47CiAgICBfc3Vic2NyaXB0aW9uLnBhdXNlKHJlc3VtZVNpZ25hbCk7CiAgfQoKICB2b2lkIF9yZXN1bWVTdWJzY3JpcHRpb24oKSB7CiAgICBpZiAoX3N1YnNjcmlwdGlvbiA9PSBudWxsKSByZXR1cm47CiAgICBfc3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogIH0KCiAgYm9vbCBnZXQgX2lzU3Vic2NyaXB0aW9uUGF1c2VkIHsKICAgIGlmIChfc3Vic2NyaXB0aW9uID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBfc3Vic2NyaXB0aW9uLmlzUGF1c2VkOwogIH0KfQoKLyoqCiAqIFdyYXBwZXIgZm9yIHN1YnNjcmlwdGlvbiB0aGF0IGRpc2FsbG93cyBjaGFuZ2luZyBoYW5kbGVycy4KICovCmNsYXNzIF9Ccm9hZGNhc3RTdWJzY3JpcHRpb25XcmFwcGVyPFQ+IGltcGxlbWVudHMgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHsKICBmaW5hbCBfQXNCcm9hZGNhc3RTdHJlYW0gX3N0cmVhbTsKCiAgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbldyYXBwZXIodGhpcy5fc3RyZWFtKTsKCiAgdm9pZCBvbkRhdGEodm9pZCBoYW5kbGVEYXRhKFQgZGF0YSkpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJDYW5ub3QgY2hhbmdlIGhhbmRsZXJzIG9mIGFzQnJvYWRjYXN0U3RyZWFtIHNvdXJjZSBzdWJzY3JpcHRpb24uIik7CiAgfQoKICB2b2lkIG9uRXJyb3IoRnVuY3Rpb24gaGFuZGxlRXJyb3IpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJDYW5ub3QgY2hhbmdlIGhhbmRsZXJzIG9mIGFzQnJvYWRjYXN0U3RyZWFtIHNvdXJjZSBzdWJzY3JpcHRpb24uIik7CiAgfQoKICB2b2lkIG9uRG9uZSh2b2lkIGhhbmRsZURvbmUoKSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkNhbm5vdCBjaGFuZ2UgaGFuZGxlcnMgb2YgYXNCcm9hZGNhc3RTdHJlYW0gc291cmNlIHN1YnNjcmlwdGlvbi4iKTsKICB9CgogIHZvaWQgcGF1c2UoW0Z1dHVyZSByZXN1bWVTaWduYWxdKSB7CiAgICBfc3RyZWFtLl9wYXVzZVN1YnNjcmlwdGlvbihyZXN1bWVTaWduYWwpOwogIH0KCiAgdm9pZCByZXN1bWUoKSB7CiAgICBfc3RyZWFtLl9yZXN1bWVTdWJzY3JpcHRpb24oKTsKICB9CgogIEZ1dHVyZSBjYW5jZWwoKSB7CiAgICBfc3RyZWFtLl9jYW5jZWxTdWJzY3JpcHRpb24oKTsKICAgIHJldHVybiBGdXR1cmUuX251bGxGdXR1cmU7CiAgfQoKICBib29sIGdldCBpc1BhdXNlZCB7CiAgICByZXR1cm4gX3N0cmVhbS5faXNTdWJzY3JpcHRpb25QYXVzZWQ7CiAgfQoKICBGdXR1cmU8RT4gYXNGdXR1cmU8RT4oW0UgZnV0dXJlVmFsdWVdKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiQ2Fubm90IGNoYW5nZSBoYW5kbGVycyBvZiBhc0Jyb2FkY2FzdFN0cmVhbSBzb3VyY2Ugc3Vic2NyaXB0aW9uLiIpOwogIH0KfQoKLyoqCiAqIFNpbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiBbU3RyZWFtSXRlcmF0b3JdLgogKgogKiBQYXVzZXMgdGhlIHN0cmVhbSBiZXR3ZWVuIGNhbGxzIHRvIFttb3ZlTmV4dF0uCiAqLwpjbGFzcyBfU3RyZWFtSXRlcmF0b3I8VD4gaW1wbGVtZW50cyBTdHJlYW1JdGVyYXRvcjxUPiB7CiAgLy8gVGhlIHN0cmVhbSBpdGVyYXRvciBpcyBhbHdheXMgaW4gb25lIG9mIGZvdXIgc3RhdGVzLgogIC8vIFRoZSB2YWx1ZSBvZiB0aGUgW19zdGF0ZURhdGFdIGZpZWxkIGRlcGVuZHMgb24gdGhlIHN0YXRlLgogIC8vCiAgLy8gV2hlbiBgX3N1YnNjcmlwdGlvbiA9PSBudWxsYCBhbmQgYF9zdGF0ZURhdGEgIT0gbnVsbGA6CiAgLy8gVGhlIHN0cmVhbSBpdGVyYXRvciBoYXMgYmVlbiBjcmVhdGVkLCBidXQgW21vdmVOZXh0XSBoYXMgbm90IGJlZW4gY2FsbGVkCiAgLy8geWV0LiBUaGUgW19zdGF0ZURhdGFdIGZpZWxkIGNvbnRhaW5zIHRoZSBzdHJlYW0gdG8gbGlzdGVuIHRvIG9uIHRoZSBmaXJzdAogIC8vIGNhbGwgdG8gW21vdmVOZXh0XSBhbmQgW2N1cnJlbnRdIHJldHVybnMgYG51bGxgLgogIC8vCiAgLy8gV2hlbiBgX3N1YnNjcmlwdGlvbiAhPSBudWxsYCBhbmQgYCFfaXNQYXVzZWRgOgogIC8vIFRoZSB1c2VyIGhhcyBjYWxsZWQgW21vdmVOZXh0XSBhbmQgdGhlIGl0ZXJhdG9yIGlzIHdhaXRpbmcgZm9yIHRoZSBuZXh0CiAgLy8gZXZlbnQuIFRoZSBbX3N0YXRlRGF0YV0gZmllbGQgY29udGFpbnMgdGhlIFtfRnV0dXJlXSByZXR1cm5lZCBieSB0aGUKICAvLyBbX21vdmVOZXh0XSBjYWxsIGFuZCBbY3VycmVudF0gcmV0dXJucyBgbnVsbC5gCiAgLy8KICAvLyBXaGVuIGBfc3Vic2NyaXB0aW9uICE9IG51bGxgIGFuZCBgX2lzUGF1c2VkYDoKICAvLyBUaGUgbW9zdCByZWNlbnQgY2FsbCB0byBbbW92ZU5leHRdIGhhcyBjb21wbGV0ZWQgd2l0aCBhIGB0cnVlYCB2YWx1ZQogIC8vIGFuZCBbY3VycmVudF0gcHJvdmlkZXMgdGhlIHZhbHVlIG9mIHRoZSBkYXRhIGV2ZW50LgogIC8vIFRoZSBbX3N0YXRlRGF0YV0gZmllbGQgY29udGFpbnMgdGhlIFtjdXJyZW50XSB2YWx1ZS4KICAvLwogIC8vIFdoZW4gYF9zdWJzY3JpcHRpb24gPT0gbnVsbGAgYW5kIGBfc3RhdGVEYXRhID09IG51bGxgOgogIC8vIFRoZSBzdHJlYW0gaGFzIGNvbXBsZXRlZCBvciBiZWVuIGNhbmNlbGVkIHVzaW5nIFtjYW5jZWxdLgogIC8vIFRoZSBzdHJlYW0gY29tcGxldGVzIG9uIGVpdGhlciBhIGRvbmUgZXZlbnQgb3IgYW4gZXJyb3IgZXZlbnQuCiAgLy8gVGhlIGxhc3QgY2FsbCB0byBbbW92ZU5leHRdIGhhcyBjb21wbGV0ZWQgd2l0aCBgZmFsc2VgIGFuZCBbY3VycmVudF0KICAvLyByZXR1cm5zIGBudWxsYC4KCiAgLy8vIFN1YnNjcmlwdGlvbiBiZWluZyBsaXN0ZW5lZCB0by4KICAvLy8KICAvLy8gU2V0IHRvIGBudWxsYCB3aGVuIHRoZSBzdHJlYW0gc3Vic2NyaXB0aW9uIGlzIGRvbmUgb3IgY2FuY2VsZWQuCiAgU3RyZWFtU3Vic2NyaXB0aW9uIF9zdWJzY3JpcHRpb247CgogIC8vLyBEYXRhIHZhbHVlIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBzdGF0ZS4KICAvLy8KICAvLy8gQmVmb3JlIGZpcnN0IGNhbGwgdG8gW21vdmVOZXh0XTogVGhlIHN0cmVhbSB0byBsaXN0ZW4gdG8uCiAgLy8vCiAgLy8vIEFmdGVyIGNhbGxpbmcgW21vdmVOZXh0XSBidXQgYmVmb3JlIHRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzOgogIC8vLyBUaGUgcmV0dXJuZWQgZnV0dXJlLgogIC8vLwogIC8vLyBBZnRlciBjYWxsaW5nIFttb3ZlTmV4dF0gYW5kIHRoZSByZXR1cm5lZCBmdXR1cmUgaGFzIGNvbXBsZXRlZAogIC8vLyB3aXRoIGB0cnVlYDogVGhlIHZhbHVlIG9mIFtjdXJyZW50XS4KICAvLy8KICAvLy8gQWZ0ZXIgY2FsbGluZyBbbW92ZU5leHRdIGFuZCB0aGUgcmV0dXJuZWQgZnV0dXJlIGhhcyBjb21wbGV0ZWQKICAvLy8gd2l0aCBgZmFsc2VgLCBvciBhZnRlciBjYWxsaW5nIFtjYW5jZWxdOiBgbnVsbGAuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIE9iamVjdCBfc3RhdGVEYXRhOwoKICAvLy8gV2hldGhlciB0aGUgaXRlcmF0b3IgaXMgYmV0d2VlbiBjYWxscyB0byBgbW92ZU5leHRgLgogIC8vLyBUaGlzIHdpbGwgdXN1YWxseSBjYXVzZSB0aGUgW19zdWJzY3JpcHRpb25dIHRvIGJlIHBhdXNlZCwgYnV0IGFzIGFuCiAgLy8vIG9wdGltaXphdGlvbiwgd2Ugb25seSBwYXVzZSBhZnRlciB0aGUgW21vdmVOZXh0XSBmdXR1cmUgaGFzIGJlZW4KICAvLy8gY29tcGxldGVkLgogIGJvb2wgX2lzUGF1c2VkID0gZmFsc2U7CgogIF9TdHJlYW1JdGVyYXRvcihmaW5hbCBTdHJlYW08VD4gc3RyZWFtKQogICAgICA6IF9zdGF0ZURhdGEgPSBzdHJlYW0gPz8gKHRocm93IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgic3RyZWFtIikpOwoKICBUIGdldCBjdXJyZW50IHsKICAgIGlmIChfc3Vic2NyaXB0aW9uICE9IG51bGwgJiYgX2lzUGF1c2VkKSB7CiAgICAgIHJldHVybiBfc3RhdGVEYXRhOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBGdXR1cmU8Ym9vbD4gbW92ZU5leHQoKSB7CiAgICBpZiAoX3N1YnNjcmlwdGlvbiAhPSBudWxsKSB7CiAgICAgIGlmIChfaXNQYXVzZWQpIHsKICAgICAgICB2YXIgZnV0dXJlID0gbmV3IF9GdXR1cmU8Ym9vbD4oKTsKICAgICAgICBfc3RhdGVEYXRhID0gZnV0dXJlOwogICAgICAgIF9pc1BhdXNlZCA9IGZhbHNlOwogICAgICAgIF9zdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgICAgICAgcmV0dXJuIGZ1dHVyZTsKICAgICAgfQogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiQWxyZWFkeSB3YWl0aW5nIGZvciBuZXh0LiIpOwogICAgfQogICAgcmV0dXJuIF9pbml0aWFsaXplT3JEb25lKCk7CiAgfQoKICAvLy8gQ2FsbGVkIGlmIHRoZXJlIGlzIG5vIGFjdGl2ZSBzdWJzY3JpcHRpb24gd2hlbiBbbW92ZU5leHRdIGlzIGNhbGxlZC4KICAvLy8KICAvLy8gRWl0aGVyIHN0YXJ0cyBsaXN0ZW5pbmcgb24gdGhlIHN0cmVhbSBpZiB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsIHRvCiAgLy8vIFttb3ZlTmV4dF0sIG9yIHJldHVybnMgYSBgZmFsc2VgIGZ1dHVyZSBiZWNhdXNlIHRoZSBzdHJlYW0gaGFzIGFscmVhZHkKICAvLy8gZW5kZWQuCiAgRnV0dXJlPGJvb2w+IF9pbml0aWFsaXplT3JEb25lKCkgewogICAgYXNzZXJ0KF9zdWJzY3JpcHRpb24gPT0gbnVsbCk7CiAgICB2YXIgc3RhdGVEYXRhID0gX3N0YXRlRGF0YTsKICAgIGlmIChzdGF0ZURhdGEgIT0gbnVsbCkgewogICAgICBTdHJlYW08VD4gc3RyZWFtID0gc3RhdGVEYXRhOwogICAgICBfc3Vic2NyaXB0aW9uID0gc3RyZWFtLmxpc3Rlbihfb25EYXRhLAogICAgICAgICAgb25FcnJvcjogX29uRXJyb3IsIG9uRG9uZTogX29uRG9uZSwgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICAgIHZhciBmdXR1cmUgPSBuZXcgX0Z1dHVyZTxib29sPigpOwogICAgICBfc3RhdGVEYXRhID0gZnV0dXJlOwogICAgICByZXR1cm4gZnV0dXJlOwogICAgfQogICAgcmV0dXJuIEZ1dHVyZS5fZmFsc2VGdXR1cmU7CiAgfQoKICBGdXR1cmUgY2FuY2VsKCkgewogICAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiA9IF9zdWJzY3JpcHRpb247CiAgICBPYmplY3Qgc3RhdGVEYXRhID0gX3N0YXRlRGF0YTsKICAgIF9zdGF0ZURhdGEgPSBudWxsOwogICAgaWYgKHN1YnNjcmlwdGlvbiAhPSBudWxsKSB7CiAgICAgIF9zdWJzY3JpcHRpb24gPSBudWxsOwogICAgICBpZiAoIV9pc1BhdXNlZCkgewogICAgICAgIF9GdXR1cmU8Ym9vbD4gZnV0dXJlID0gc3RhdGVEYXRhOwogICAgICAgIGZ1dHVyZS5fYXN5bmNDb21wbGV0ZShmYWxzZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgIH0KICAgIHJldHVybiBGdXR1cmUuX251bGxGdXR1cmU7CiAgfQoKICB2b2lkIF9vbkRhdGEoVCBkYXRhKSB7CiAgICBhc3NlcnQoX3N1YnNjcmlwdGlvbiAhPSBudWxsICYmICFfaXNQYXVzZWQpOwogICAgX0Z1dHVyZTxib29sPiBtb3ZlTmV4dEZ1dHVyZSA9IF9zdGF0ZURhdGE7CiAgICBfc3RhdGVEYXRhID0gZGF0YTsKICAgIF9pc1BhdXNlZCA9IHRydWU7CiAgICBtb3ZlTmV4dEZ1dHVyZS5fY29tcGxldGUodHJ1ZSk7CiAgICBpZiAoX3N1YnNjcmlwdGlvbiAhPSBudWxsICYmIF9pc1BhdXNlZCkgX3N1YnNjcmlwdGlvbi5wYXVzZSgpOwogIH0KCiAgdm9pZCBfb25FcnJvcihPYmplY3QgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBhc3NlcnQoX3N1YnNjcmlwdGlvbiAhPSBudWxsICYmICFfaXNQYXVzZWQpOwogICAgX0Z1dHVyZTxib29sPiBtb3ZlTmV4dEZ1dHVyZSA9IF9zdGF0ZURhdGE7CiAgICBfc3Vic2NyaXB0aW9uID0gbnVsbDsKICAgIF9zdGF0ZURhdGEgPSBudWxsOwogICAgbW92ZU5leHRGdXR1cmUuX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgdm9pZCBfb25Eb25lKCkgewogICAgYXNzZXJ0KF9zdWJzY3JpcHRpb24gIT0gbnVsbCAmJiAhX2lzUGF1c2VkKTsKICAgIF9GdXR1cmU8Ym9vbD4gbW92ZU5leHRGdXR1cmUgPSBfc3RhdGVEYXRhOwogICAgX3N1YnNjcmlwdGlvbiA9IG51bGw7CiAgICBfc3RhdGVEYXRhID0gbnVsbDsKICAgIG1vdmVOZXh0RnV0dXJlLl9jb21wbGV0ZShmYWxzZSk7CiAgfQp9CgovKiogQW4gZW1wdHkg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a2VzIGFjdGlvbnMgZGVwZW5kaW5nIG9uIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4gKi8KX3J1blVzZXJDb2RlPFQ+KAogICAgVCB1c2VyQ29kZSgpLCBvblN1Y2Nlc3MoVCB2YWx1ZSksIG9uRXJyb3IoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkpIHsKICB0cnkgewogICAgb25TdWNjZXNzKHVzZXJDb2RlKCkpOwogIH0gY2F0Y2ggKGUsIHMpIHsKICAgIEFzeW5jRXJyb3IgcmVwbGFjZW1lbnQgPSBab25lLmN1cnJlbnQuZXJyb3JDYWxsYmFjayhlLCBzKTsKICAgIGlmIChyZXBsYWNlbWVudCA9PSBudWxsKSB7CiAgICAgIG9uRXJyb3IoZSwgcyk7CiAgICB9IGVsc2UgewogICAgICB2YXIgZXJyb3IgPSBfbm9uTnVsbEVycm9yKHJlcGxhY2VtZW50LmVycm9yKTsKICAgICAgdmFyIHN0YWNrVHJhY2UgPSByZXBsYWNlbWVudC5zdGFja1RyYWNlOwogICAgICBvbkVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIH0KICB9Cn0KCi8qKiBIZWxwZXIgZnVuY3Rpb24gdG8gY2FuY2VsIGEgc3Vic2NyaXB0aW9uIGFuZCB3YWl0IGZvciB0aGUgcG90ZW50aWFsIGZ1dHVyZSwKICBiZWZvcmUgY29tcGxldGluZyB3aXRoIGFuIGVycm9yLiAqLwp2b2lkIF9jYW5jZWxBbmRFcnJvcihTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uLCBfRnV0dXJlIGZ1dHVyZSwgZXJyb3IsCiAgICBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICB2YXIgY2FuY2VsRnV0dXJlID0gc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogIGlmIChjYW5jZWxGdXR1cmUgIT0gbnVsbCAmJiAhaWRlbnRpY2FsKGNhbmNlbEZ1dHVyZSwgRnV0dXJlLl9udWxsRnV0dXJlKSkgewogICAgY2FuY2VsRnV0dXJlLndoZW5Db21wbGV0ZSgoKSA9PiBmdXR1cmUuX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpKTsKICB9IGVsc2UgewogICAgZnV0dXJlLl9jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9Cn0KCnZvaWQgX2NhbmNlbEFuZEVycm9yV2l0aFJlcGxhY2VtZW50KFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb24sCiAgICBfRnV0dXJlIGZ1dHVyZSwgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogIEFzeW5jRXJyb3IgcmVwbGFjZW1lbnQgPSBab25lLmN1cnJlbnQuZXJyb3JDYWxsYmFjayhlcnJvciwgc3RhY2tUcmFjZSk7CiAgaWYgKHJlcGxhY2VtZW50ICE9IG51bGwpIHsKICAgIGVycm9yID0gX25vbk51bGxFcnJvcihyZXBsYWNlbWVudC5lcnJvcik7CiAgICBzdGFja1RyYWNlID0gcmVwbGFjZW1lbnQuc3RhY2tUcmFjZTsKICB9CiAgX2NhbmNlbEFuZEVycm9yKHN1YnNjcmlwdGlvbiwgZnV0dXJlLCBlcnJvciwgc3RhY2tUcmFjZSk7Cn0KCnR5cGVkZWYgdm9pZCBfRXJyb3JDYWxsYmFjayhlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKTsKCi8qKiBIZWxwZXIgZnVuY3Rpb24gdG8gbWFrZSBhbiBvbkVycm9yIGFyZ3VtZW50IHRvIFtfcnVuVXNlckNvZGVdLiAqLwpfRXJyb3JDYWxsYmFjayBfY2FuY2VsQW5kRXJyb3JDbG9zdXJlKAogICAgU3RyZWFtU3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbiwgX0Z1dHVyZSBmdXR1cmUpIHsKICByZXR1cm4gKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIF9jYW5jZWxBbmRFcnJvcihzdWJzY3JpcHRpb24sIGZ1dHVyZSwgZXJyb3IsIHN0YWNrVHJhY2UpOwogIH07Cn0KCi8qKiBIZWxwZXIgZnVuY3Rpb24gdG8gY2FuY2VsIGEgc3Vic2NyaXB0aW9uIGFuZCB3YWl0IGZvciB0aGUgcG90ZW50aWFsIGZ1dHVyZSwKICBiZWZvcmUgY29tcGxldGluZyB3aXRoIGEgdmFsdWUuICovCnZvaWQgX2NhbmNlbEFuZFZhbHVlKFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb24sIF9GdXR1cmUgZnV0dXJlLCB2YWx1ZSkgewogIHZhciBjYW5jZWxGdXR1cmUgPSBzdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgaWYgKGNhbmNlbEZ1dHVyZSAhPSBudWxsICYmICFpZGVudGljYWwoY2FuY2VsRnV0dXJlLCBGdXR1cmUuX251bGxGdXR1cmUpKSB7CiAgICBjYW5jZWxGdXR1cmUud2hlbkNvbXBsZXRlKCgpID0+IGZ1dHVyZS5fY29tcGxldGUodmFsdWUpKTsKICB9IGVsc2UgewogICAgZnV0dXJlLl9jb21wbGV0ZSh2YWx1ZSk7CiAgfQp9CgovKioKICogQSBbU3RyZWFtXSB0aGF0IGZvcndhcmRzIHN1YnNjcmlwdGlvbnMgdG8gYW5vdGhlciBzdHJlYW0uCiAqCiAqIFRoaXMgc3RyZWFtIGltcGxlbWVudHMgW1N0cmVhbV0sIGJ1dCBmb3J3YXJkcyBhbGwgc3Vic2NyaXB0aW9ucwogKiB0byBhbiB1bmRlcmx5aW5nIHN0cmVhbSwgYW5kIHdyYXBzIHRoZSByZXR1cm5lZCBzdWJzY3JpcHRpb24gdG8KICogbW9kaWZ5IHRoZSBldmVudHMgb24gdGhlIHdheS4KICoKICogVGhpcyBjbGFzcyBpcyBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuCiAqLwphYnN0cmFjdCBjbGFzcyBfRm9yd2FyZGluZ1N0cmVhbTxTLCBUPiBleHRlbmRzIFN0cmVhbTxUPiB7CiAgZmluYWwgU3RyZWFtPFM+IF9zb3VyY2U7CgogIF9Gb3J3YXJkaW5nU3RyZWFtKHRoaXMuX3NvdXJjZSk7CgogIGJvb2wgZ2V0IGlzQnJvYWRjYXN0ID0+IF9zb3VyY2UuaXNCcm9hZGNhc3Q7CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBsaXN0ZW4odm9pZCBvbkRhdGEoVCB2YWx1ZSksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICBjYW5jZWxPbkVycm9yID0gaWRlbnRpY2FsKHRydWUsIGNhbmNlbE9uRXJyb3IpOwogICAgcmV0dXJuIF9jcmVhdGVTdWJzY3JpcHRpb24ob25EYXRhLCBvbkVycm9yLCBvbkRvbmUsIGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IF9jcmVhdGVTdWJzY3JpcHRpb24odm9pZCBvbkRhdGEoVCBkYXRhKSwKICAgICAgRnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yKSB7CiAgICByZXR1cm4gbmV3IF9Gb3J3YXJkaW5nU3RyZWFtU3Vic2NyaXB0aW9uPFMsIFQ+KAogICAgICAgIHRoaXMsIG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yKTsKICB9CgogIC8vIE92ZXJyaWRlIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBpbiBzdWJjbGFzc2VzIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3IuCgogIHZvaWQgX2hhbmRsZURhdGEoUyBkYXRhLCBfRXZlbnRTaW5rPFQ+IHNpbmspIHsKICAgIHNpbmsuX2FkZChkYXRhIGFzIE9iamVjdCk7CiAgfQoKICB2b2lkIF9oYW5kbGVFcnJvcihlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlLCBfRXZlbnRTaW5rPFQ+IHNpbmspIHsKICAgIHNpbmsuX2FkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIHZvaWQgX2hhbmRsZURvbmUoX0V2ZW50U2luazxUPiBzaW5rKSB7CiAgICBzaW5rLl9jbG9zZSgpOwogIH0KfQoKLyoqCiAqIEFic3RyYWN0IHN1cGVyY2xhc3MgZm9yIHN1YnNjcmlwdGlvbnMgdGhhdCBmb3J3YXJkIHRvIG90aGVyIHN1YnNjcmlwdGlvbnMuCiAqLwpjbGFzcyBfRm9yd2FyZGluZ1N0cmVhbVN1YnNjcmlwdGlvbjxTLCBUPgogICAgZXh0ZW5kcyBfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHsKICBmaW5hbCBfRm9yd2FyZGluZ1N0cmVhbTxTLCBUPiBfc3RyZWFtOwoKICBTdHJlYW1TdWJzY3JpcHRpb248Uz4gX3N1YnNjcmlwdGlvbjsKCiAgX0ZvcndhcmRpbmdTdHJlYW1TdWJzY3JpcHRpb24odGhpcy5fc3RyZWFtLCB2b2lkIG9uRGF0YShUIGRhdGEpLAogICAgICBGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3IpCiAgICAgIDogc3VwZXIob25EYXRhLCBvbkVycm9yLCBvbkRvbmUsIGNhbmNlbE9uRXJyb3IpIHsKICAgIF9zdWJzY3JpcHRpb24gPSBfc3RyZWFtLl9zb3VyY2UKICAgICAgICAubGlzdGVuKF9oYW5kbGVEYXRhLCBvbkVycm9yOiBfaGFuZGxlRXJyb3IsIG9uRG9uZTogX2hhbmRsZURvbmUpOwogIH0KCiAgLy8gX1N0cmVhbVNpbmsgaW50ZXJmYWNlLgogIC8vIFRyYW5zZm9ybWVycyBzZW5kaW5nIG1vcmUgdGhhbiBvbmUgZXZlbnQgaGF2ZSBubyB3YXkgdG8ga25vdyBpZiB0aGUgc3RyZWFtCiAgLy8gaXMgY2FuY2VsZWQgb3IgY2xvc2VkIGFmdGVyIHRoZSBmaXJzdCwgc28gd2UganVzdCBpZ25vcmUgcmVtYWluaW5nIGV2ZW50cy4KCiAgdm9pZCBfYWRkKFQgZGF0YSkgewogICAgaWYgKF9pc0Nsb3NlZCkgcmV0dXJuOwogICAgc3VwZXIuX2FkZChkYXRhKTsKICB9CgogIHZvaWQgX2FkZEVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBpZiAoX2lzQ2xvc2VkKSByZXR1cm47CiAgICBzdXBlci5fYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgLy8gU3RyZWFtU3Vic2NyaXB0aW9uIGNhbGxiYWNrcy4KCiAgdm9pZCBfb25QYXVzZSgpIHsKICAgIGlmIChfc3Vic2NyaXB0aW9uID09IG51bGwpIHJldHVybjsKICAgIF9zdWJzY3JpcHRpb24ucGF1c2UoKTsKICB9CgogIHZvaWQgX29uUmVzdW1lKCkgewogICAgaWYgKF9zdWJzY3JpcHRpb24gPT0gbnVsbCkgcmV0dXJuOwogICAgX3N1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICB9CgogIEZ1dHVyZSBfb25DYW5jZWwoKSB7CiAgICBpZiAoX3N1YnNjcmlwdGlvbiAhPSBudWxsKSB7CiAgICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb24gPSBfc3Vic2NyaXB0aW9uOwogICAgICBfc3Vic2NyaXB0aW9uID0gbnVsbDsKICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8gTWV0aG9kcyB1c2VkIGFzIGxpc3RlbmVyIG9uIHNvdXJjZSBzdWJzY3JpcHRpb24uCgogIHZvaWQgX2hhbmRsZURhdGEoUyBkYXRhKSB7CiAgICBfc3RyZWFtLl9oYW5kbGVEYXRhKGRhdGEsIHRoaXMpOwogIH0KCiAgdm9pZCBfaGFuZGxlRXJyb3IoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgX3N0cmVhbS5faGFuZGxlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UsIHRoaXMpOwogIH0KCiAgdm9pZCBfaGFuZGxlRG9uZSgpIHsKICAgIF9zdHJlYW0uX2hhbmRsZURvbmUodGhpcyk7CiAgfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFN0cmVhbSB0cmFuc2Zvcm1lcnMgdXNlZCBieSB0aGUgZGVmYXVsdCBTdHJlYW0gaW1wbGVtZW50YXRpb24uCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCnR5cGVkZWYgYm9vbCBfUHJlZGljYXRlPFQ+KFQgdmFsdWUpOwoKdm9pZCBfYWRkRXJyb3JXaXRoUmVwbGFjZW1lbnQoX0V2ZW50U2luayBzaW5rLCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgQXN5bmNFcnJvciByZXBsYWNlbWVudCA9IFpvbmUuY3VycmVudC5lcnJvckNhbGxiYWNrKGVycm9yLCBzdGFja1RyYWNlKTsKICBpZiAocmVwbGFjZW1lbnQgIT0gbnVsbCkgewogICAgZXJyb3IgPSBfbm9uTnVsbEVycm9yKHJlcGxhY2VtZW50LmVycm9yKTsKICAgIHN0YWNrVHJhY2UgPSByZXBsYWNlbWVudC5zdGFja1RyYWNlOwogIH0KICBzaW5rLl9hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7Cn0KCmNsYXNzIF9XaGVyZVN0cmVhbTxUPiBleHRlbmRzIF9Gb3J3YXJkaW5nU3RyZWFtPFQsIFQ+IHsKICBmaW5hbCBfUHJlZGljYXRlPFQ+IF90ZXN0OwoKICBfV2hlcmVTdHJlYW0oU3RyZWFtPFQ+IHNvdXJjZSwgYm9vbCB0ZXN0KFQgdmFsdWUpKQogICAgICA6IF90ZXN0ID0gdGVzdCwKICAgICAgICBzdXBlcihzb3VyY2UpOwoKICB2b2lkIF9oYW5kbGVEYXRhKFQgaW5wdXRFdmVudCwgX0V2ZW50U2luazxUPiBzaW5rKSB7CiAgICBib29sIHNhdGlzZmllczsKICAgIHRyeSB7CiAgICAgIHNhdGlzZmllcyA9IF90ZXN0KGlucHV0RXZlbnQpOwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBfYWRkRXJyb3JXaXRoUmVwbGFjZW1lbnQoc2luaywgZSwgcyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChzYXRpc2ZpZXMpIHsKICAgICAgc2luay5fYWRkKGlucHV0RXZlbnQpOwogICAgfQogIH0KfQoKdHlwZWRlZiBUIF9UcmFuc2Zvcm1hdGlvbjxTLCBUPihTIHZhbHVlKTsKCi8qKgogKiBBIHN0cmVhbSBwaXBlIHRoYXQgY29udmVydHMgZGF0YSBldmVudHMgYmVmb3JlIHBhc3NpbmcgdGhlbSBvbi4KICovCmNsYXNzIF9NYXBTdHJlYW08UywgVD4gZXh0ZW5kcyBfRm9yd2FyZGluZ1N0cmVhbTxTLCBUPiB7CiAgZmluYWwgX1RyYW5zZm9ybWF0aW9uPFMsIFQ+IF90cmFuc2Zvcm07CgogIF9NYXBTdHJlYW0oU3RyZWFtPFM+IHNvdXJjZSwgVCB0cmFuc2Zvcm0oUyBldmVudCkpCiAgICAgIDogdGhpcy5fdHJhbnNmb3JtID0gdHJhbnNmb3JtLAogICAgICAgIHN1cGVyKHNvdXJjZSk7CgogIHZvaWQgX2hhbmRsZURhdGEoUyBpbnB1dEV2ZW50LCBfRXZlbnRTaW5rPFQ+IHNpbmspIHsKICAgIFQgb3V0cHV0RXZlbnQ7CiAgICB0cnkgewogICAgICBvdXRwdXRFdmVudCA9IF90cmFuc2Zvcm0oaW5wdXRFdmVudCk7CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIF9hZGRFcnJvcldpdGhSZXBsYWNlbWVudChzaW5rLCBlLCBzKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgc2luay5fYWRkKG91dHB1dEV2ZW50KTsKICB9Cn0KCi8qKgogKiBBIHN0cmVhbSBwaXBlIHRoYXQgY29udmVydHMgZGF0YSBldmVudHMgYmVmb3JlIHBhc3NpbmcgdGhlbSBvbi4KICovCmNsYXNzIF9FeHBhbmRTdHJlYW08UywgVD4gZXh0ZW5kcyBfRm9yd2FyZGluZ1N0cmVhbTxTLCBUPiB7CiAgZmluYWwgX1RyYW5zZm9ybWF0aW9uPFMsIEl0ZXJhYmxlPFQ+PiBfZXhwYW5kOwoKICBfRXhwYW5kU3RyZWFtKFN0cmVhbTxTPiBzb3VyY2UsIEl0ZXJhYmxlPFQ+IGV4cGFuZChTIGV2ZW50KSkKICAgICAgOiB0aGlzLl9leHBhbmQgPSBleHBhbmQsCiAgICAgICAgc3VwZXIoc291cmNlKTsKCiAgdm9pZCBfaGFuZGxlRGF0YShTIGlucHV0RXZlbnQsIF9FdmVudFNpbms8VD4gc2luaykgewogICAgdHJ5IHsKICAgICAgZm9yIChUIHZhbHVlIGluIF9leHBhbmQoaW5wdXRFdmVudCkpIHsKICAgICAgICBzaW5rLl9hZGQodmFsdWUpOwogICAgICB9CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIC8vIElmIGVpdGhlciBfZXhwYW5kIG9yIGl0ZXJhdGluZyB0aGUgZ2VuZXJhdGVkIGl0ZXJhdG9yIHRocm93cywKICAgICAgLy8gd2UgYWJvcnQgdGhlIGl0ZXJhdGlvbi4KICAgICAgX2FkZEVycm9yV2l0aFJlcGxhY2VtZW50KHNpbmssIGUsIHMpOwogICAgfQogIH0KfQoKdHlwZWRlZiBib29sIF9FcnJvclRlc3QoZXJyb3IpOwoKLyoqCiAqIEEgc3RyZWFtIHBpcGUgdGhhdCBjb252ZXJ0cyBvciBkaXNwb3NlcyBlcnJvciBldmVudHMKICogYmVmb3JlIHBhc3NpbmcgdGhlbSBvbi4KICovCmNsYXNzIF9IYW5kbGVFcnJvclN0cmVhbTxUPiBleHRlbmRzIF9Gb3J3YXJkaW5nU3RyZWFtPFQsIFQ+IHsKICBmaW5hbCBGdW5jdGlvbiBfdHJhbnNmb3JtOwogIGZpbmFsIF9FcnJvclRlc3QgX3Rlc3Q7CgogIF9IYW5kbGVFcnJvclN0cmVhbShTdHJlYW08VD4gc291cmNlLCBGdW5jdGlvbiBvbkVycm9yLCBib29sIHRlc3QoZXJyb3IpKQogICAgICA6IHRoaXMuX3RyYW5zZm9ybSA9IG9uRXJyb3IsCiAgICAgICAgdGhpcy5fdGVzdCA9IHRlc3QsCiAgICAgICAgc3VwZXIoc291cmNlKTsKCiAgdm9pZCBfaGFuZGxlRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UsIF9FdmVudFNpbms8VD4gc2luaykgewogICAgYm9vbCBtYXRjaGVzID0gdHJ1ZTsKICAgIGlmIChfdGVzdCAhPSBudWxsKSB7CiAgICAgIHRyeSB7CiAgICAgICAgbWF0Y2hlcyA9IF90ZXN0KGVycm9yKTsKICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgIF9hZGRFcnJvcldpdGhSZXBsYWNlbWVudChzaW5rLCBlLCBzKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIGlmIChtYXRjaGVzKSB7CiAgICAgIHRyeSB7CiAgICAgICAgX2ludm9rZUVycm9ySGFuZGxlcihfdHJhbnNmb3JtLCBlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICBpZiAoaWRlbnRpY2FsKGUsIGVycm9yKSkgewogICAgICAgICAgc2luay5fYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfYWRkRXJyb3JXaXRoUmVwbGFjZW1lbnQoc2luaywgZSwgcyk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgc2luay5fYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgfQogIH0KfQoKY2xhc3MgX1Rha2VTdHJlYW08VD4gZXh0ZW5kcyBfRm9yd2FyZGluZ1N0cmVhbTxULCBUPiB7CiAgZmluYWwgaW50IF9jb3VudDsKCiAgX1Rha2VTdHJlYW0oU3RyZWFtPFQ+IHNvdXJjZSwgaW50IGNvdW50KQogICAgICA6IHRoaXMuX2NvdW50ID0gY291bnQsCiAgICAgICAgc3VwZXIoc291cmNlKSB7CiAgICAvLyBUaGlzIHRlc3QgaXMgZG9uZSBlYXJseSB0byBhdm9pZCBoYW5kbGluZyBhbiBhc3luYyBlcnJvcgogICAgLy8gaW4gdGhlIF9oYW5kbGVEYXRhIG1ldGhvZC4KICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGNvdW50LCAiY291bnQiKTsKICB9CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBfY3JlYXRlU3Vic2NyaXB0aW9uKHZvaWQgb25EYXRhKFQgZGF0YSksCiAgICAgIEZ1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcikgewogICAgaWYgKF9jb3VudCA9PSAwKSB7CiAgICAgIF9zb3VyY2UubGlzdGVuKG51bGwpLmNhbmNlbCgpOwogICAgICByZXR1cm4gbmV3IF9Eb25lU3RyZWFtU3Vic2NyaXB0aW9uPFQ+KG9uRG9uZSk7CiAgICB9CiAgICByZXR1cm4gbmV3IF9TdGF0ZVN0cmVhbVN1YnNjcmlwdGlvbjxUPigKICAgICAgICB0aGlzLCBvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvciwgX2NvdW50KTsKICB9CgogIHZvaWQgX2hhbmRsZURhdGEoVCBpbnB1dEV2ZW50LCBfRXZlbnRTaW5rPFQ+IHNpbmspIHsKICAgIF9TdGF0ZVN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPSBzaW5rOwogICAgaW50IGNvdW50ID0gc3Vic2NyaXB0aW9uLl9jb3VudDsKICAgIGlmIChjb3VudCA+IDApIHsKICAgICAgc2luay5fYWRkKGlucHV0RXZlbnQpOwogICAgICBjb3VudCAtPSAxOwogICAgICBzdWJzY3JpcHRpb24uX2NvdW50ID0gY291bnQ7CiAgICAgIGlmIChjb3VudCA9PSAwKSB7CiAgICAgICAgLy8gQ2xvc2luZyBhbHNvIHVuc3Vic2NyaWJlcyBhbGwgc3Vic2NyaWJlcnMsIHdoaWNoIHVuc3Vic2NyaWJlcwogICAgICAgIC8vIHRoaXMgZnJvbSBzb3VyY2UuCiAgICAgICAgc2luay5fY2xvc2UoKTsKICAgICAgfQogICAgfQogIH0KfQoKLyoqCiAqIEEgW19Gb3J3YXJkaW5nU3RyZWFtU3Vic2NyaXB0aW9uXSB3aXRoIG9uZSBleHRyYSBzdGF0ZSBmaWVsZC4KICoKICogVXNlIGJ5IHNldmVyYWwgZGlmZmVyZW50IGNsYXNzZXMsIHN0b3JpbmcgYW4gaW50ZWdlciwgYm9vbCBvciBnZW5lcmFsLgogKi8KY2xhc3MgX1N0YXRlU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IGV4dGVuZHMgX0ZvcndhcmRpbmdTdHJlYW1TdWJzY3JpcHRpb248VCwgVD4gewogIC8vIFJhdyBzdGF0ZSBmaWVsZC4gVHlwZWQgYWNjZXNzIHByb3ZpZGVkIGJ5IGdldHRlcnMgYW5kIHNldHRlcnMgYmVsb3cuCiAgdmFyIF9zaGFyZWRTdGF0ZTsKCiAgX1N0YXRlU3RyZWFtU3Vic2NyaXB0aW9uKF9Gb3J3YXJkaW5nU3RyZWFtPFQsIFQ+IHN0cmVhbSwgdm9pZCBvbkRhdGEoVCBkYXRhKSwKICAgICAgRnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yLCB0aGlzLl9zaGFyZWRTdGF0ZSkKICAgICAgOiBzdXBlcihzdHJlYW0sIG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yKTsKCiAgYm9vbCBnZXQgX2ZsYWcgPT4gX3NoYXJlZFN0YXRlOwogIHZvaWQgc2V0IF9mbGFnKGJvb2wgZmxhZykgewogICAgX3NoYXJlZFN0YXRlID0gZmxhZzsKICB9CgogIGludCBnZXQgX2NvdW50ID0+IF9zaGFyZWRTdGF0ZTsKICB2b2lkIHNldCBfY291bnQoaW50IGNvdW50KSB7CiAgICBfc2hhcmVkU3RhdGUgPSBjb3VudDsKICB9CgogIE9iamVjdCBnZXQgX3ZhbHVlID0+IF9zaGFyZWRTdGF0ZTsKICB2b2lkIHNldCBfdmFsdWUoT2JqZWN0IHZhbHVlKSB7CiAgICBfc2hhcmVkU3RhdGUgPSB2YWx1ZTsKICB9Cn0KCmNsYXNzIF9UYWtlV2hpbGVTdHJlYW08VD4gZXh0ZW5kcyBfRm9yd2FyZGluZ1N0cmVhbTxULCBUPiB7CiAgZmluYWwgX1ByZWRpY2F0ZTxUPiBfdGVzdDsKCiAgX1Rha2VXaGlsZVN0cmVhbShTdHJlYW08VD4gc291cmNlLCBib29sIHRlc3QoVCB2YWx1ZSkpCiAgICAgIDogdGhpcy5fdGVzdCA9IHRlc3QsCiAgICAgICAgc3VwZXIoc291cmNlKTsKCiAgdm9pZCBfaGFuZGxlRGF0YShUIGlucHV0RXZlbnQsIF9FdmVudFNpbms8VD4gc2luaykgewogICAgYm9vbCBzYXRpc2ZpZXM7CiAgICB0cnkgewogICAgICBzYXRpc2ZpZXMgPSBfdGVzdChpbnB1dEV2ZW50KTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgX2FkZEVycm9yV2l0aFJlcGxhY2VtZW50KHNpbmssIGUsIHMpOwogICAgICAvLyBUaGUgdGVzdCBkaWRuJ3Qgc2F5IHRydWUuIERpZG4ndCBzYXkgZmFsc2UgZWl0aGVyLCBidXQgd2Ugc3RvcCBhbnl3YXkuCiAgICAgIHNpbmsuX2Nsb3NlKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChzYXRpc2ZpZXMpIHsKICAgICAgc2luay5fYWRkKGlucHV0RXZlbnQpOwogICAgfSBlbHNlIHsKICAgICAgc2luay5fY2xvc2UoKTsKICAgIH0KICB9Cn0KCmNsYXNzIF9Ta2lwU3RyZWFtPFQ+IGV4dGVuZHMgX0ZvcndhcmRpbmdTdHJlYW08VCwgVD4gewogIGZpbmFsIGludCBfY291bnQ7CgogIF9Ta2lwU3RyZWFtKFN0cmVhbTxUPiBzb3VyY2UsIGludCBjb3VudCkKICAgICAgOiB0aGlzLl9jb3VudCA9IGNvdW50LAogICAgICAgIHN1cGVyKHNvdXJjZSkgewogICAgLy8gVGhpcyB0ZXN0IGlzIGRvbmUgZWFybHkgdG8gYXZvaWQgaGFuZGxpbmcgYW4gYXN5bmMgZXJyb3IKICAgIC8vIGluIHRoZSBfaGFuZGxlRGF0YSBtZXRob2QuCiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChjb3VudCwgImNvdW50Iik7CiAgICBSYW5nZUVycm9yLmNoZWNrTm90TmVnYXRpdmUoY291bnQsICJjb3VudCIpOwogIH0KCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IF9jcmVhdGVTdWJzY3JpcHRpb24odm9pZCBvbkRhdGEoVCBkYXRhKSwKICAgICAgRnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yKSB7CiAgICByZXR1cm4gbmV3IF9TdGF0ZVN0cmVhbVN1YnNjcmlwdGlvbjxUPigKICAgICAgICB0aGlzLCBvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvciwgX2NvdW50KTsKICB9CgogIHZvaWQgX2hhbmRsZURhdGEoVCBpbnB1dEV2ZW50LCBfRXZlbnRTaW5rPFQ+IHNpbmspIHsKICAgIF9TdGF0ZVN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPSBzaW5rOwogICAgaW50IGNvdW50ID0gc3Vic2NyaXB0aW9uLl9jb3VudDsKICAgIGlmIChjb3VudCA+IDApIHsKICAgICAgc3Vic2NyaXB0aW9uLl9jb3VudCA9IGNvdW50IC0gMTsKICAgICAgcmV0dXJuOwogICAgfQogICAgc2luay5fYWRkKGlucHV0RXZlbnQpOwogIH0KfQoKY2xhc3MgX1NraXBXaGlsZVN0cmVhbTxUPiBleHRlbmRzIF9Gb3J3YXJkaW5nU3RyZWFtPFQsIFQ+IHsKICBmaW5hbCBfUHJlZGljYXRlPFQ+IF90ZXN0OwoKICBfU2tpcFdoaWxlU3RyZWFtKFN0cmVhbTxUPiBzb3VyY2UsIGJvb2wgdGVzdChUIHZhbHVlKSkKICAgICAgOiB0aGlzLl90ZXN0ID0gdGVzdCwKICAgICAgICBzdXBlcihzb3VyY2UpOwoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gX2NyZWF0ZVN1YnNjcmlwdGlvbih2b2lkIG9uRGF0YShUIGRhdGEpLAogICAgICBGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3IpIHsKICAgIHJldHVybiBuZXcgX1N0YXRlU3RyZWFtU3Vic2NyaXB0aW9uPFQ+KAogICAgICAgIHRoaXMsIG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yLCBmYWxzZSk7CiAgfQoKICB2b2lkIF9oYW5kbGVEYXRhKFQgaW5wdXRFdmVudCwgX0V2ZW50U2luazxUPiBzaW5rKSB7CiAgICBfU3RhdGVTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uID0gc2luazsKICAgIGJvb2wgaGFzRmFpbGVkID0gc3Vic2NyaXB0aW9uLl9mbGFnOwogICAgaWYgKGhhc0ZhaWxlZCkgewogICAgICBzaW5rLl9hZGQoaW5wdXRFdmVudCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGJvb2wgc2F0aXNmaWVzOwogICAgdHJ5IHsKICAgICAgc2F0aXNmaWVzID0gX3Rlc3QoaW5wdXRFdmVudCk7CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIF9hZGRFcnJvcldpdGhSZXBsYWNlbWVudChzaW5rLCBlLCBzKTsKICAgICAgLy8gQSBmYWlsdXJlIHRvIHJldHVybiBhIGJvb2xlYW4gaXMgY29uc2lkZXJlZCAibm90IG1hdGNoaW5nIi4KICAgICAgc3Vic2NyaXB0aW9uLl9mbGFnID0gdHJ1ZTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFzYXRpc2ZpZXMpIHsKICAgICAgc3Vic2NyaXB0aW9uLl9mbGFnID0gdHJ1ZTsKICAgICAgc2luay5fYWRkKGlucHV0RXZlbnQpOwogICAgfQogIH0KfQoKdHlwZWRlZiBib29sIF9FcXVhbGl0eTxUPihUIGEsIFQgYik7CgpjbGFzcyBfRGlzdGluY3RTdHJlYW08VD4gZXh0ZW5kcyBfRm9yd2FyZGluZ1N0cmVhbTxULCBUPiB7CiAgc3RhdGljIGZpbmFsIF9TRU5USU5FTCA9IG5ldyBPYmplY3QoKTsKCiAgZmluYWwgX0VxdWFsaXR5PFQ+IF9lcXVhbHM7CgogIF9EaXN0aW5jdFN0cmVhbShTdHJlYW08VD4gc291cmNlLCBib29sIGVxdWFscyhUIGEsIFQgYikpCiAgICAgIDogX2VxdWFscyA9IGVxdWFscywKICAgICAgICBzdXBlcihzb3VyY2UpOwoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gX2NyZWF0ZVN1YnNjcmlwdGlvbih2b2lkIG9uRGF0YShUIGRhdGEpLAogICAgICBGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3IpIHsKICAgIHJldHVybiBuZXcgX1N0YXRlU3RyZWFtU3Vic2NyaXB0aW9uPFQ+KAogICAgICAgIHRoaXMsIG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yLCBfU0VOVElORUwpOwogIH0KCiAgdm9pZCBfaGFuZGxlRGF0YShUIGlucHV0RXZlbnQsIF9FdmVudFNpbms8VD4gc2luaykgewogICAgX1N0YXRlU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiA9IHNpbms7CiAgICB2YXIgcHJldmlvdXMgPSBzdWJzY3JpcHRpb24uX3ZhbHVlOwogICAgaWYgKGlkZW50aWNhbChwcmV2aW91cywgX1NFTlRJTkVMKSkgewogICAgICAvLyBGaXJzdCBldmVudC4KICAgICAgc3Vic2NyaXB0aW9uLl92YWx1ZSA9IGlucHV0RXZlbnQ7CiAgICAgIHNpbmsuX2FkZChpbnB1dEV2ZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIFQgcHJldmlvdXNFdmVudCA9IHByZXZpb3VzOwogICAgICBib29sIGlzRXF1YWw7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKF9lcXVhbHMgPT0gbnVsbCkgewogICAgICAgICAgaXNFcXVhbCA9IChwcmV2aW91c0V2ZW50ID09IGlucHV0RXZlbnQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpc0VxdWFsID0gX2VxdWFscyhwcmV2aW91c0V2ZW50LCBpbnB1dEV2ZW50KTsKICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICBfYWRkRXJyb3JXaXRoUmVwbGFjZW1lbnQoc2luaywgZSwgcyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICghaXNFcXVhbCkgewogICAgICAgIHNpbmsuX2FkZChpbnB1dEV2ZW50KTsKICAgICAgICBzdWJzY3JpcHRpb24uX3ZhbHVlID0gaW5wdXRFdmVudDsKICAgICAgfQogICAgfQogIH0KfQqB+ABOTjwBDwEUAUkRTwgbEz8fFQ00LyIGBAIBUCZNHSxOTwsuBAIBRTRKHS4pBDwCATsBRic3Kj4FAgFQJU8sTj4LHQQCAQQ9A0NDIQMxBDsbASMBLwE1PzRIBAFBPTQ3BAFKATEfBAFIJwQBKRMEAgEETgQqLikBJwFDOzgkSgQBHFBQARYbFgQBOBsoBAEjARQnGwQBFSccBAEXITccJAYRBAE2AR0lBAE0MwQBFx8EAgFHQkcBJQFPSh0uKQQlAgE4HQE1FhcBNxQKJRUsDgYVHQYEAgEqAQRDBDkqATUlFwE3EwosFSwOBhwEAgEEQwQ8MQE/HxcBNwotGggVRyEsBgQCASABBDgbBD4dGgFLIxsXAU8ZGQwgFy4QCAYTDDwXIy0RMAoQCA0pBgQCATcUASsdGEAiMAQBQT0XJTUGLD8EATc1JRUdEiMYSR0XCAYEAgEEQQNKBFBKFAFQTj8BIh4ZBAEiHxoEASUiGgQCATwdATkbFwE3FAolFSxQFQ4GFR0NFQYEAgE3FAErHRhAIjAxBAFBPSw/BAE3NSUVJw4GGwQCATwdATkbFwFBPSw+BAE3NSkVHQ4GFAolFSxFIQ4GFiEdBgQCASUBOykBHgE7GhcBQT0sQgQBNzUoKhYoHQ0iFAwfMxE4ChcuEAgWHyoIBgQCARtkYXJ0OmFzeW5jL3N0cmVhbV9waXBlLmRhcnRLb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvYXN5bmMvc3RyZWFtX3RyYW5zZm9ybWVycy5kYXJ0pkgvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5hc3luYzsKCi8qKgogKiBXcmFwcyBhbiBbX0V2ZW50U2lua10gc28gaXQgZXhwb3NlcyBvbmx5IHRoZSBbRXZlbnRTaW5rXSBpbnRlcmZhY2UuCiAqLwpjbGFzcyBfRXZlbnRTaW5rV3JhcHBlcjxUPiBpbXBsZW1lbnRzIEV2ZW50U2luazxUPiB7CiAgX0V2ZW50U2luayBfc2luazsKICBfRXZlbnRTaW5rV3JhcHBlcih0aGlzLl9zaW5rKTsKCiAgdm9pZCBhZGQoVCBkYXRhKSB7CiAgICBfc2luay5fYWRkKGRhdGEpOwogIH0KCiAgdm9pZCBhZGRFcnJvcihlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIF9zaW5rLl9hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX3NpbmsuX2Nsb3NlKCk7CiAgfQp9CgovKioKICogQSBTdHJlYW1TdWJzY3JpcHRpb24gdGhhdCBwaXBlcyBkYXRhIHRocm91Z2ggYSBzaW5rLgogKgogKiBUaGUgY29uc3RydWN0b3Igb2YgdGhpcyBjbGFzcyB0YWtlcyBhIFtfU2lua01hcHBlcl0gd2hpY2ggbWFwcyBmcm9tCiAqIFtFdmVudFNpbmtdIHRvIFtFdmVudFNpbmtdLiBUaGUgaW5wdXQgdG8gdGhlIG1hcHBlciBpcyB0aGUgb3V0cHV0IG9mCiAqIHRoZSB0cmFuc2Zvcm1hdGlvbi4gVGhlIHJldHVybmVkIHNpbmsgaXMgdGhlIHRyYW5zZm9ybWF0aW9uJ3MgaW5wdXQuCiAqLwpjbGFzcyBfU2lua1RyYW5zZm9ybWVyU3RyZWFtU3Vic2NyaXB0aW9uPFMsIFQ+CiAgICBleHRlbmRzIF9CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb248VD4gewogIC8vLyBUaGUgdHJhbnNmb3JtZXIncyBpbnB1dCBzaW5rLgogIEV2ZW50U2luazxTPiBfdHJhbnNmb3JtZXJTaW5rOwoKICAvLy8gVGhlIHN1YnNjcmlwdGlvbiB0byB0aGUgaW5wdXQgc3RyZWFtLgogIFN0cmVhbVN1YnNjcmlwdGlvbjxTPiBfc3Vic2NyaXB0aW9uOwoKICBfU2lua1RyYW5zZm9ybWVyU3RyZWFtU3Vic2NyaXB0aW9uKFN0cmVhbTxTPiBzb3VyY2UsIF9TaW5rTWFwcGVyPFMsIFQ+IG1hcHBlciwKICAgICAgdm9pZCBvbkRhdGEoVCBkYXRhKSwgRnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yKQogICAgICAvLyBXZSBzZXQgdGhlIGFkYXB0ZXIncyB0YXJnZXQgb25seSB3aGVuIHRoZSB1c2VyIGlzIGFsbG93ZWQgdG8gc2VuZCBkYXRhLgogICAgICA6IHN1cGVyKG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yKSB7CiAgICBfRXZlbnRTaW5rV3JhcHBlcjxUPiBldmVudFNpbmsgPSBuZXcgX0V2ZW50U2lua1dyYXBwZXI8VD4odGhpcyk7CiAgICBfdHJhbnNmb3JtZXJTaW5rID0gbWFwcGVyKGV2ZW50U2luayk7CiAgICBfc3Vic2NyaXB0aW9uID0KICAgICAgICBzb3VyY2UubGlzdGVuKF9oYW5kbGVEYXRhLCBvbkVycm9yOiBfaGFuZGxlRXJyb3IsIG9uRG9uZTogX2hhbmRsZURvbmUpOwogIH0KCiAgLyoqIFdoZXRoZXIgdGhpcyBzdWJzY3JpcHRpb24gaXMgc3RpbGwgc3Vic2NyaWJlZCB0byBpdHMgc291cmNlLiAqLwogIGJvb2wgZ2V0IF9pc1N1YnNjcmliZWQgPT4gX3N1YnNjcmlwdGlvbiAhPSBudWxsOwoKICAvLyBfRXZlbnRTaW5rIGludGVyZmFjZS4KCiAgLyoqCiAgICogQWRkcyBhbiBldmVudCB0byB0aGlzIHN1YnNjcmlwdGlvbnMuCiAgICoKICAgKiBDb250cmFyeSB0byBub3JtYWwgW19CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb25dcyB3ZSBtYXkgcmVjZWl2ZQogICAqIGV2ZW50cyB3aGVuIHRoZSBzdHJlYW0gaXMgYWxyZWFkeSBjbG9zZWQuIFJlcG9ydCB0aGVtIGFzIHN0YXRlCiAgICogZXJyb3IuCiAgICovCiAgdm9pZCBfYWRkKFQgZGF0YSkgewogICAgaWYgKF9pc0Nsb3NlZCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiU3RyZWFtIGlzIGFscmVhZHkgY2xvc2VkIik7CiAgICB9CiAgICBzdXBlci5fYWRkKGRhdGEpOwogIH0KCiAgLyoqCiAgICogQWRkcyBhbiBlcnJvciBldmVudCB0byB0aGlzIHN1YnNjcmlwdGlvbnMuCiAgICoKICAgKiBDb250cmFyeSB0byBub3JtYWwgW19CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb25dcyB3ZSBtYXkgcmVjZWl2ZQogICAqIGV2ZW50cyB3aGVuIHRoZSBzdHJlYW0gaXMgYWxyZWFkeSBjbG9zZWQuIFJlcG9ydCB0aGVtIGFzIHN0YXRlCiAgICogZXJyb3IuCiAgICovCiAgdm9pZCBfYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIGlmIChfaXNDbG9zZWQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlN0cmVhbSBpcyBhbHJlYWR5IGNsb3NlZCIpOwogICAgfQogICAgc3VwZXIuX2FkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIC8qKgogICAqIEFkZHMgYSBjbG9zZSBldmVudCB0byB0aGlzIHN1YnNjcmlwdGlvbnMuCiAgICoKICAgKiBDb250cmFyeSB0byBub3JtYWwgW19CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb25dcyB3ZSBtYXkgcmVjZWl2ZQogICAqIGV2ZW50cyB3aGVuIHRoZSBzdHJlYW0gaXMgYWxyZWFkeSBjbG9zZWQuIFJlcG9ydCB0aGVtIGFzIHN0YXRlCiAgICogZXJyb3IuCiAgICovCiAgdm9pZCBfY2xvc2UoKSB7CiAgICBpZiAoX2lzQ2xvc2VkKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJTdHJlYW0gaXMgYWxyZWFkeSBjbG9zZWQiKTsKICAgIH0KICAgIHN1cGVyLl9jbG9zZSgpOwogIH0KCiAgLy8gX0J1ZmZlcmluZ1N0cmVhbVN1YnNjcmlwdGlvbiBob29rcy4KCiAgdm9pZCBfb25QYXVzZSgpIHsKICAgIGlmIChfaXNTdWJzY3JpYmVkKSBfc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgfQoKICB2b2lkIF9vblJlc3VtZSgpIHsKICAgIGlmIChfaXNTdWJzY3JpYmVkKSBfc3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogIH0KCiAgRnV0dXJlIF9vbkNhbmNlbCgpIHsKICAgIGlmIChfaXNTdWJzY3JpYmVkKSB7CiAgICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb24gPSBfc3Vic2NyaXB0aW9uOwogICAgICBfc3Vic2NyaXB0aW9uID0gbnVsbDsKICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCBfaGFuZGxlRGF0YShTIGRhdGEpIHsKICAgIHRyeSB7CiAgICAgIF90cmFuc2Zvcm1lclNpbmsuYWRkKGRhdGEpOwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBfYWRkRXJyb3IoZSwgcyk7CiAgICB9CiAgfQoKICB2b2lkIF9oYW5kbGVFcnJvcihlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIHRyeSB7CiAgICAgIF90cmFuc2Zvcm1lclNpbmsuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBpZiAoaWRlbnRpY2FsKGUsIGVycm9yKSkgewogICAgICAgIF9hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2FkZEVycm9yKGUsIHMpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9oYW5kbGVEb25lKCkgewogICAgdHJ5IHsKICAgICAgX3N1YnNjcmlwdGlvbiA9IG51bGw7CiAgICAgIF90cmFuc2Zvcm1lclNpbmsuY2xvc2UoKTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgX2FkZEVycm9yKGUsIHMpOwogICAgfQogIH0KfQoKdHlwZWRlZiBFdmVudFNpbms8Uz4gX1NpbmtNYXBwZXI8UywgVD4oRXZlbnRTaW5rPFQ+IG91dHB1dCk7CgovKioKICogQSBTdHJlYW1UcmFuc2Zvcm1lciBmb3IgU2luay1tYXBwZXJzLgogKgogKiBBIFNpbmstbWFwcGVyIHRha2VzIGFuIFtFdmVudFNpbmtdIChpdHMgb3V0cHV0KSBhbmQgcmV0dXJucyBhbm90aGVyCiAqIEV2ZW50U2luayAoaXRzIGlucHV0KS4KICoKICogTm90ZSB0aGF0IHRoaXMgY2xhc3MgY2FuIGJlIGBjb25zdGAuCiAqLwpjbGFzcyBfU3RyZWFtU2lua1RyYW5zZm9ybWVyPFMsIFQ+IGV4dGVuZHMgU3RyZWFtVHJhbnNmb3JtZXJCYXNlPFMsIFQ+IHsKICBmaW5hbCBfU2lua01hcHBlcjxTLCBUPiBfc2lua01hcHBlcjsKICBjb25zdCBfU3RyZWFtU2lua1RyYW5zZm9ybWVyKHRoaXMuX3NpbmtNYXBwZXIpOwoKICBTdHJlYW08VD4gYmluZChTdHJlYW08Uz4gc3RyZWFtKSA9PgogICAgICBuZXcgX0JvdW5kU2lua1N0cmVhbTxTLCBUPihzdHJlYW0sIF9zaW5rTWFwcGVyKTsKfQoKLyoqCiAqIFRoZSByZXN1bHQgb2YgYmluZGluZyBhIFN0cmVhbVRyYW5zZm9ybWVyIGZvciBTaW5rLW1hcHBlcnMuCiAqCiAqIEl0IGNvbnRhaW5zIHRoZSBib3VuZCBTdHJlYW0gYW5kIHRoZSBzaW5rLW1hcHBlci4gT25seSB3aGVuIHRoZSB1c2VyIHN0YXJ0cwogKiBsaXN0ZW5pbmcgdG8gdGhpcyBzdHJlYW0gaXMgdGhlIHNpbmstbWFwcGVyIGludm9rZWQuIFRoZSByZXN1bHQgaXMgdXNlZAogKiB0byBjcmVhdGUgYSBTdHJlYW1TdWJzY3JpcHRpb24gdGhhdCB0cmFuc2Zvcm1zIGV2ZW50cy4KICovCmNsYXNzIF9Cb3VuZFNpbmtTdHJlYW08UywgVD4gZXh0ZW5kcyBTdHJlYW08VD4gewogIGZpbmFsIF9TaW5rTWFwcGVyPFMsIFQ+IF9zaW5rTWFwcGVyOwogIGZpbmFsIFN0cmVhbTxTPiBfc3RyZWFtOwoKICBib29sIGdldCBpc0Jyb2FkY2FzdCA9PiBfc3RyZWFtLmlzQnJvYWRjYXN0OwoKICBfQm91bmRTaW5rU3RyZWFtKHRoaXMuX3N0cmVhbSwgdGhpcy5fc2lua01hcHBlcik7CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBsaXN0ZW4odm9pZCBvbkRhdGEoVCBldmVudCksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICBjYW5jZWxPbkVycm9yID0gaWRlbnRpY2FsKHRydWUsIGNhbmNlbE9uRXJyb3IpOwogICAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiA9CiAgICAgICAgbmV3IF9TaW5rVHJhbnNmb3JtZXJTdHJlYW1TdWJzY3JpcHRpb248UywgVD4oCiAgICAgICAgICAgIF9zdHJlYW0sIF9zaW5rTWFwcGVyLCBvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcik7CiAgICByZXR1cm4gc3Vic2NyaXB0aW9uOwogIH0KfQoKLy8vIERhdGEtaGFuZGxlciBjb21pbmcgZnJvbSBbU3RyZWFtVHJhbnNmb3JtZXIuZnJvbUhhbmRsZXJzXS4KdHlwZWRlZiB2b2lkIF9UcmFuc2Zvcm1EYXRhSGFuZGxlcjxTLCBUPihTIGRhdGEsIEV2ZW50U2luazxUPiBzaW5rKTsKCi8vLyBFcnJvci1oYW5kbGVyIGNvbWluZyBmcm9tIFtTdHJlYW1UcmFuc2Zvcm1lci5mcm9tSGFuZGxlcnNdLgp0eXBlZGVmIHZvaWQgX1RyYW5zZm9ybUVycm9ySGFuZGxlcjxUPigKICAgIE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlLCBFdmVudFNpbms8VD4gc2luayk7CgovLy8gRG9uZS1oYW5kbGVyIGNvbWluZyBmcm9tIFtTdHJlYW1UcmFuc2Zvcm1lci5mcm9tSGFuZGxlcnNdLgp0eXBlZGVmIHZvaWQgX1RyYW5zZm9ybURvbmVIYW5kbGVyPFQ+KEV2ZW50U2luazxUPiBzaW5rKTsKCi8qKgogKiBXcmFwcyBoYW5kbGVycyAoZnJvbSBbU3RyZWFtVHJhbnNmb3JtZXIuZnJvbUhhbmRsZXJzXSkgaW50byBhbiBgRXZlbnRTaW5rYC4KICoKICogVGhpcyB3YXkgd2UgY2FuIHJldXNlIHRoZSBjb2RlIGZyb20gW19TdHJlYW1TaW5rVHJhbnNmb3JtZXJdLgogKi8KY2xhc3MgX0hhbmRsZXJFdmVudFNpbms8UywgVD4gaW1wbGVtZW50cyBFdmVudFNpbms8Uz4gewogIGZpbmFsIF9UcmFuc2Zvcm1EYXRhSGFuZGxlcjxTLCBUPiBfaGFuZGxlRGF0YTsKICBmaW5hbCBfVHJhbnNmb3JtRXJyb3JIYW5kbGVyPFQ+IF9oYW5kbGVFcnJvcjsKICBmaW5hbCBfVHJhbnNmb3JtRG9uZUhhbmRsZXI8VD4gX2hhbmRsZURvbmU7CgogIC8vLyBUaGUgb3V0cHV0IHNpbmsgd2hlcmUgdGhlIGhhbmRsZXJzIHNob3VsZCBzZW5kIHRoZWlyIGRhdGEgaW50by4KICBFdmVudFNpbms8VD4gX3Npbms7CgogIF9IYW5kbGVyRXZlbnRTaW5rKAogICAgICB0aGlzLl9oYW5kbGVEYXRhLCB0aGlzLl9oYW5kbGVFcnJvciwgdGhpcy5faGFuZGxlRG9uZSwgdGhpcy5fc2luaykgewogICAgaWYgKF9zaW5rID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIlRoZSBwcm92aWRlZCBzaW5rIG11c3Qgbm90IGJlIG51bGwuIik7CiAgICB9CiAgfQoKICBib29sIGdldCBfaXNDbG9zZWQgPT4gX3NpbmsgPT0gbnVsbDsKCiAgdm9pZCBhZGQoUyBkYXRhKSB7CiAgICBpZiAoX2lzQ2xvc2VkKSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoIlNpbmsgaXMgY2xvc2VkIik7CiAgICB9CiAgICBpZiAoX2hhbmRsZURhdGEgIT0gbnVsbCkgewogICAgICBfaGFuZGxlRGF0YShkYXRhLCBfc2luayk7CiAgICB9IGVsc2UgewogICAgICBfc2luay5hZGQoZGF0YSBhcyBUKTsKICAgIH0KICB9CgogIHZvaWQgYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgaWYgKF9pc0Nsb3NlZCkgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKCJTaW5rIGlzIGNsb3NlZCIpOwogICAgfQogICAgaWYgKF9oYW5kbGVFcnJvciAhPSBudWxsKSB7CiAgICAgIF9oYW5kbGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSwgX3NpbmspOwogICAgfSBlbHNlIHsKICAgICAgX3NpbmsuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgfQogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIGlmIChfaXNDbG9zZWQpIHJldHVybjsKICAgIHZhciBzaW5rID0gX3Npbms7CiAgICBfc2luayA9IG51bGw7CiAgICBpZiAoX2hhbmRsZURvbmUgIT0gbnVsbCkgewogICAgICBfaGFuZGxlRG9uZShzaW5rKTsKICAgIH0gZWxzZSB7CiAgICAgIHNpbmsuY2xvc2UoKTsKICAgIH0KICB9Cn0KCi8qKgogKiBBIFN0cmVhbVRyYW5zZm9ybWVyIHRoYXQgdHJhbnNmb3JtZXJzIGV2ZW50cyB3aXRoIHRoZSBnaXZlbiBoYW5kbGVycy4KICoKICogTm90ZSB0aGF0IHRoaXMgdHJhbnNmb3JtZXIgY2FuIG9ubHkgYmUgdXNlZCBvbmNlLgogKi8KY2xhc3MgX1N0cmVhbUhhbmRsZXJUcmFuc2Zvcm1lcjxTLCBUPiBleHRlbmRzIF9TdHJlYW1TaW5rVHJhbnNmb3JtZXI8UywgVD4gewogIF9TdHJlYW1IYW5kbGVyVHJhbnNmb3JtZXIoCiAgICAgIHt2b2lkIGhhbmRsZURhdGEoUyBkYXRhLCBFdmVudFNpbms8VD4gc2luayksCiAgICAgIHZvaWQgaGFuZGxlRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UsIEV2ZW50U2luazxUPiBzaW5rKSwKICAgICAgdm9pZCBoYW5kbGVEb25lKEV2ZW50U2luazxUPiBzaW5rKX0pCiAgICAgIDogc3VwZXIoKEV2ZW50U2luazxUPiBvdXRwdXRTaW5rKSB7CiAgICAgICAgICByZXR1cm4gbmV3IF9IYW5kbGVyRXZlbnRTaW5rPFMsIFQ+KAogICAgICAgICAgICAgIGhhbmRsZURhdGEsIGhhbmRsZUVycm9yLCBoYW5kbGVEb25lLCBvdXRwdXRTaW5rKTsKICAgICAgICB9KTsKCiAgU3RyZWFtPFQ+IGJpbmQoU3RyZWFtPFM+IHN0cmVhbSkgewogICAgcmV0dXJuIHN1cGVyLmJpbmQoc3RyZWFtKTsKICB9Cn0KCi8qKgogKiBBIFN0cmVhbVRyYW5zZm9ybWVyIHRoYXQgb3ZlcnJpZGVzIFtTdHJlYW1UcmFuc2Zvcm1lci5iaW5kXSB3aXRoIGEgY2FsbGJhY2suCiAqLwpjbGFzcyBfU3RyZWFtQmluZFRyYW5zZm9ybWVyPFMsIFQ+IGV4dGVuZHMgU3RyZWFtVHJhbnNmb3JtZXJCYXNlPFMsIFQ+IHsKICBmaW5hbCBTdHJlYW08VD4gRnVuY3Rpb24oU3RyZWFtPFM+KSBfYmluZDsKICBfU3RyZWFtQmluZFRyYW5zZm9ybWVyKHRoaXMuX2JpbmQpOwoKICBTdHJlYW08VD4gYmluZChTdHJlYW08Uz4gc3RyZWFtKSA9PiBfYmluZChzdHJlYW0pOwp9CgovLy8gQSBjbG9zdXJlIG1hcHBpbmcgYSBzdHJlYW0gYW5kIGNhbmNlbE9uRXJyb3IgdG8gYSBTdHJlYW1TdWJzY3JpcHRpb24uCnR5cGVkZWYgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IF9TdWJzY3JpcHRpb25UcmFuc2Zvcm1lcjxTLCBUPigKICAgIFN0cmVhbTxTPiBzdHJlYW0sIGJvb2wgY2FuY2VsT25FcnJvcik7CgovKioKICogQSBbU3RyZWFtVHJhbnNmb3JtZXJdIHRoYXQgbWluaW1pemVzIHRoZSBudW1iZXIgb2YgYWRkaXRpb25hbCBjbGFzc2VzLgogKgogKiBJbnN0ZWFkIG9mIGltcGxlbWVudGluZyB0aHJlZSBjbGFzc2VzOiBhIFtTdHJlYW1UcmFuc2Zvcm1lcl0sIGEgW1N0cmVhbV0KICogKGFzIHRoZSByZXN1bHQgb2YgYSBgYmluZGAgY2FsbCkgYW5kIGEgW1N0cmVhbVN1YnNjcmlwdGlvbl0gKHdoaWNoIGRvZXMgdGhlCiAqIGFjdHVhbCB3b3JrKSwgdGhpcyBjbGFzcyBvbmx5IHJlcXVpcmVzIGEgZnVuY3Rpb24gdGhhdCBpcyBpbnZva2VkIHdoZW4gdGhlCiAqIGxhc3QgYml0ICh0aGUgc3Vic2NyaXB0aW9uKSBvZiB0aGUgdHJhbnNmb3JtZXItd29ya2Zsb3cgaXMgbmVlZGVkLgogKgogKiBUaGUgZ2l2ZW4gdHJhbnNmb3JtZXIgZnVuY3Rpb24gbWFwcyBmcm9tIFN0cmVhbSBhbmQgY2FuY2VsT25FcnJvciB0byBhCiAqIGBTdHJlYW1TdWJzY3JpcHRpb25gLiBBcyBzdWNoIGl0IGNhbiBhbHNvIGFjdCBvbiBgY2FuY2VsYCBldmVudHMsIG1ha2luZyBpdAogKiBmdWxseSBnZW5lcmFsLgogKi8KY2xhc3MgX1N0cmVhbVN1YnNjcmlwdGlvblRyYW5zZm9ybWVyPFMsIFQ+IGV4dGVuZHMgU3RyZWFtVHJhbnNmb3JtZXJCYXNlPFMsIFQ+IHsKICBmaW5hbCBfU3Vic2NyaXB0aW9uVHJhbnNmb3JtZXI8UywgVD4gX29uTGlzdGVuOwoKICBjb25zdCBfU3RyZWFtU3Vic2NyaXB0aW9uVHJhbnNmb3JtZXIodGhpcy5fb25MaXN0ZW4pOwoKICBTdHJlYW08VD4gYmluZChTdHJlYW08Uz4gc3RyZWFtKSA9PgogICAgICBuZXcgX0JvdW5kU3Vic2NyaXB0aW9uU3RyZWFtPFMsIFQ+KHN0cmVhbSwgX29uTGlzdGVuKTsKfQoKLyoqCiAqIEEgc3RyZWFtIHRyYW5zZm9ybWVkIGJ5IGEgW19TdHJlYW1TdWJzY3JpcHRpb25UcmFuc2Zvcm1lcl0uCiAqCiAqIFdoZW4gdGhpcyBzdHJlYW0gaXMgbGlzdGVuZWQgdG8gaXQgaW52b2tlcyB0aGUgW19vbkxpc3Rlbl0gZnVuY3Rpb24gd2l0aAogKiB0aGUgc3RvcmVkIFtfc3RyZWFtXS4gVXN1YWxseSB0aGUgdHJhbnNmb3JtZXIgc3RhcnRzIGxpc3RlbmluZyBhdCB0aGlzCiAqIG1vbWVudC4KICovCmNsYXNzIF9Cb3VuZFN1YnNjcmlwdGlvblN0cmVhbTxTLCBUPiBleHRlbmRzIFN0cmVhbTxUPiB7CiAgZmluYWwgX1N1YnNjcmlwdGlvblRyYW5zZm9ybWVyPFMsIFQ+IF9vbkxpc3RlbjsKICBmaW5hbCBTdHJlYW08Uz4gX3N0cmVhbTsKCiAgYm9vbCBnZXQgaXNCcm9hZGNhc3QgPT4gX3N0cmVhbS5pc0Jyb2FkY2FzdDsKCiAgX0JvdW5kU3Vic2NyaXB0aW9uU3RyZWFtKHRoaXMuX3N0cmVhbSwgdGhpcy5fb25MaXN0ZW4pOwoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gbGlzdGVuKHZvaWQgb25EYXRhKFQgZXZlbnQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgY2FuY2VsT25FcnJvciA9IGlkZW50aWNhbCh0cnVlLCBjYW5jZWxPbkVycm9yKTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiByZXN1bHQgPSBfb25MaXN0ZW4oX3N0cmVhbSwgY2FuY2VsT25FcnJvcik7CiAgICByZXN1bHQub25EYXRhKG9uRGF0YSk7CiAgICByZXN1bHQub25FcnJvcihvbkVycm9yKTsKICAgIHJlc3VsdC5vbkRvbmUob25Eb25lKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CoFUAE5OPAEPARQBBEcENRQhARUWBAEyKAQBERQEAgEEOANHSEgELy4kIQEsJwFRUFE4RSoUUAQBRjMBGwEGKgVHRAwGFhU4BhYEAQYwBUdEDAY4FTgGKAQBBi8FR0QMBhIVOAYUBAEpARQuBAEVLwQBFxk3HCQGEQQBHQoiFRcGBAE2CjQVISYPGQgGBAEXChwgFRcGBAIBPQEEKQNHGgMoBEknMgEmNwIBBD8DT0s6BDEnGwEvATQBNT80KTZLGQQCAT9FAUAoPQE/OgEETwNBBDgxMC4BRhYBFUsZRgYEAScBFRUqBh8gDRwGBAE5FSoGIC4NKQYEAREbFhIfGQ0UBgQCAQRJAzUETR0zUCsqLkAMASUfBAIBBFAESS0mATUCAUo+KwEESgNMT05GA0pPEgRRMgE4ASY9AgEEPwNMSgsEOTIbAS8BOgE1PzRGGx0bEwQCASNkYXJ0OmFzeW5jL3N0cmVhbV90cmFuc2Zvcm1lcnMuZGFydDxvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9hc3luYy96b25lLmRhcnTAANauLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuYXN5bmM7Cgp0eXBlZGVmIFIgWm9uZUNhbGxiYWNrPFI+KCk7CnR5cGVkZWYgUiBab25lVW5hcnlDYWxsYmFjazxSLCBUPihUIGFyZyk7CnR5cGVkZWYgUiBab25lQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPihUMSBhcmcxLCBUMiBhcmcyKTsKCnR5cGVkZWYgSGFuZGxlVW5jYXVnaHRFcnJvckhhbmRsZXIgPSB2b2lkIEZ1bmN0aW9uKFpvbmUgc2VsZiwKICAgIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpOwp0eXBlZGVmIFJ1bkhhbmRsZXIgPSBSIEZ1bmN0aW9uPFI+KAogICAgWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsIFIgRnVuY3Rpb24oKSBmKTsKdHlwZWRlZiBSdW5VbmFyeUhhbmRsZXIgPSBSIEZ1bmN0aW9uPFIsIFQ+KAogICAgWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsIFIgRnVuY3Rpb24oVCBhcmcpIGYsIFQgYXJnKTsKdHlwZWRlZiBSdW5CaW5hcnlIYW5kbGVyID0gUiBGdW5jdGlvbjxSLCBUMSwgVDI+KFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwKICAgIFpvbmUgem9uZSwgUiBGdW5jdGlvbihUMSBhcmcxLCBUMiBhcmcyKSBmLCBUMSBhcmcxLCBUMiBhcmcyKTsKdHlwZWRlZiBSZWdpc3RlckNhbGxiYWNrSGFuZGxlciA9IFpvbmVDYWxsYmFjazxSPiBGdW5jdGlvbjxSPigKICAgIFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBSIEZ1bmN0aW9uKCkgZik7CnR5cGVkZWYgUmVnaXN0ZXJVbmFyeUNhbGxiYWNrSGFuZGxlciA9IFpvbmVVbmFyeUNhbGxiYWNrPFIsIFQ+IEZ1bmN0aW9uPFIsIFQ+KAogICAgWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsIFIgRnVuY3Rpb24oVCBhcmcpIGYpOwp0eXBlZGVmIFJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2tIYW5kbGVyCiAgICA9IFpvbmVCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+IEZ1bmN0aW9uPFIsIFQxLCBUMj4oWm9uZSBzZWxmLAogICAgICAgIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgUiBGdW5jdGlvbihUMSBhcmcxLCBUMiBhcmcyKSBmKTsKdHlwZWRlZiBBc3luY0Vycm9yIEVycm9yQ2FsbGJhY2tIYW5kbGVyKFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwKICAgIFpvbmUgem9uZSwgT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpOwp0eXBlZGVmIHZvaWQgU2NoZWR1bGVNaWNyb3Rhc2tIYW5kbGVyKAogICAgWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsIHZvaWQgZigpKTsKdHlwZWRlZiBUaW1lciBDcmVhdGVUaW1lckhhbmRsZXIoCiAgICBab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgRHVyYXRpb24gZHVyYXRpb24sIHZvaWQgZigpKTsKdHlwZWRlZiBUaW1lciBDcmVhdGVQZXJpb2RpY1RpbWVySGFuZGxlcihab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsCiAgICBab25lIHpvbmUsIER1cmF0aW9uIHBlcmlvZCwgdm9pZCBmKFRpbWVyIHRpbWVyKSk7CnR5cGVkZWYgdm9pZCBQcmludEhhbmRsZXIoCiAgICBab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgU3RyaW5nIGxpbmUpOwp0eXBlZGVmIFpvbmUgRm9ya0hhbmRsZXIoWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsCiAgICBab25lU3BlY2lmaWNhdGlvbiBzcGVjaWZpY2F0aW9uLCBNYXAgem9uZVZhbHVlcyk7CgovKiogUGFpciBvZiBlcnJvciBhbmQgc3RhY2sgdHJhY2UuIFJldHVybmVkIGJ5IFtab25lLmVycm9yQ2FsbGJhY2tdLiAqLwpjbGFzcyBBc3luY0Vycm9yIGltcGxlbWVudHMgRXJyb3IgewogIGZpbmFsIE9iamVjdCBlcnJvcjsKICBmaW5hbCBTdGFja1RyYWNlIHN0YWNrVHJhY2U7CgogIEFzeW5jRXJyb3IodGhpcy5lcnJvciwgdGhpcy5zdGFja1RyYWNlKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyRlcnJvcic7Cn0KCmNsYXNzIF9ab25lRnVuY3Rpb248VCBleHRlbmRzIEZ1bmN0aW9uPiB7CiAgZmluYWwgX1pvbmUgem9uZTsKICBmaW5hbCBUIGZ1bmN0aW9uOwogIGNvbnN0IF9ab25lRnVuY3Rpb24odGhpcy56b25lLCB0aGlzLmZ1bmN0aW9uKTsKfQoKLyoqCiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgdGhlIHNwZWNpZmljYXRpb24gZm9yIGEgZm9ya2VkIHpvbmUuCiAqCiAqIFdoZW4gZm9ya2luZyBhIG5ldyB6b25lIChzZWUgW1pvbmUuZm9ya10pIG9uZSBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQKICogYmVoYXZpb3Igb2YgdGhlIHpvbmUgYnkgcHJvdmlkaW5nIGNhbGxiYWNrcy4gVGhlc2UgY2FsbGJhY2tzIG11c3QgYmUKICogZ2l2ZW4gaW4gYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KICoKICogSGFuZGxlcnMgaGF2ZSB0aGUgc2FtZSBzaWduYXR1cmUgYXMgdGhlIHNhbWUtbmFtZWQgbWV0aG9kcyBvbiBbWm9uZV0gYnV0CiAqIHJlY2VpdmUgdGhyZWUgYWRkaXRpb25hbCBhcmd1bWVudHM6CiAqCiAqICAgMS4gdGhlIHpvbmUgdGhlIGhhbmRsZXJzIGFyZSBhdHRhY2hlZCB0byAodGhlICJzZWxmIiB6b25lKS4KICogICAyLiBhIFtab25lRGVsZWdhdGVdIHRvIHRoZSBwYXJlbnQgem9uZS4KICogICAzLiB0aGUgem9uZSB0aGF0IGZpcnN0IHJlY2VpdmVkIHRoZSByZXF1ZXN0IChiZWZvcmUgdGhlIHJlcXVlc3Qgd2FzCiAqICAgICBidWJibGVkIHVwKS4KICoKICogSGFuZGxlcnMgY2FuIGVpdGhlciBzdG9wIHByb3BhZ2F0aW9uIHRoZSByZXF1ZXN0IChieSBzaW1wbHkgbm90IGNhbGxpbmcgdGhlCiAqIHBhcmVudCBoYW5kbGVyKSwgb3IgZm9yd2FyZCB0byB0aGUgcGFyZW50IHpvbmUsIHBvdGVudGlhbGx5IG1vZGlmeWluZyB0aGUKICogYXJndW1lbnRzIG9uIHRoZSB3YXkuCiAqLwphYnN0cmFjdCBjbGFzcyBab25lU3BlY2lmaWNhdGlvbiB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIHNwZWNpZmljYXRpb24gd2l0aCB0aGUgcHJvdmlkZWQgaGFuZGxlcnMuCiAgICovCiAgY29uc3QgZmFjdG9yeSBab25lU3BlY2lmaWNhdGlvbigKICAgICAge0hhbmRsZVVuY2F1Z2h0RXJyb3JIYW5kbGVyIGhhbmRsZVVuY2F1Z2h0RXJyb3IsCiAgICAgIFJ1bkhhbmRsZXIgcnVuLAogICAgICBSdW5VbmFyeUhhbmRsZXIgcnVuVW5hcnksCiAgICAgIFJ1bkJpbmFyeUhhbmRsZXIgcnVuQmluYXJ5LAogICAgICBSZWdpc3RlckNhbGxiYWNrSGFuZGxlciByZWdpc3RlckNhbGxiYWNrLAogICAgICBSZWdpc3RlclVuYXJ5Q2FsbGJhY2tIYW5kbGVyIHJlZ2lzdGVyVW5hcnlDYWxsYmFjaywKICAgICAgUmVnaXN0ZXJCaW5hcnlDYWxsYmFja0hhbmRsZXIgcmVnaXN0ZXJCaW5hcnlDYWxsYmFjaywKICAgICAgRXJyb3JDYWxsYmFja0hhbmRsZXIgZXJyb3JDYWxsYmFjaywKICAgICAgU2NoZWR1bGVNaWNyb3Rhc2tIYW5kbGVyIHNjaGVkdWxlTWljcm90YXNrLAogICAgICBDcmVhdGVUaW1lckhhbmRsZXIgY3JlYXRlVGltZXIsCiAgICAgIENyZWF0ZVBlcmlvZGljVGltZXJIYW5kbGVyIGNyZWF0ZVBlcmlvZGljVGltZXIsCiAgICAgIFByaW50SGFuZGxlciBwcmludCwKICAgICAgRm9ya0hhbmRsZXIgZm9ya30pID0gX1pvbmVTcGVjaWZpY2F0aW9uOwoKICAvKioKICAgKiBDcmVhdGVzIGEgc3BlY2lmaWNhdGlvbiBmcm9tIFtvdGhlcl0gd2l0aCB0aGUgcHJvdmlkZWQgaGFuZGxlcnMgb3ZlcnJpZGluZwogICAqIHRoZSBvbmVzIGluIFtvdGhlcl0uCiAgICovCiAgZmFjdG9yeSBab25lU3BlY2lmaWNhdGlvbi5mcm9tKFpvbmVTcGVjaWZpY2F0aW9uIG90aGVyLAogICAgICB7SGFuZGxlVW5jYXVnaHRFcnJvckhhbmRsZXIgaGFuZGxlVW5jYXVnaHRFcnJvciwKICAgICAgUnVuSGFuZGxlciBydW4sCiAgICAgIFJ1blVuYXJ5SGFuZGxlciBydW5VbmFyeSwKICAgICAgUnVuQmluYXJ5SGFuZGxlciBydW5CaW5hcnksCiAgICAgIFJlZ2lzdGVyQ2FsbGJhY2tIYW5kbGVyIHJlZ2lzdGVyQ2FsbGJhY2ssCiAgICAgIFJlZ2lzdGVyVW5hcnlDYWxsYmFja0hhbmRsZXIgcmVnaXN0ZXJVbmFyeUNhbGxiYWNrLAogICAgICBSZWdpc3RlckJpbmFyeUNhbGxiYWNrSGFuZGxlciByZWdpc3RlckJpbmFyeUNhbGxiYWNrLAogICAgICBFcnJvckNhbGxiYWNrSGFuZGxlciBlcnJvckNhbGxiYWNrLAogICAgICBTY2hlZHVsZU1pY3JvdGFza0hhbmRsZXIgc2NoZWR1bGVNaWNyb3Rhc2ssCiAgICAgIENyZWF0ZVRpbWVySGFuZGxlciBjcmVhdGVUaW1lciwKICAgICAgQ3JlYXRlUGVyaW9kaWNUaW1lckhhbmRsZXIgY3JlYXRlUGVyaW9kaWNUaW1lciwKICAgICAgUHJpbnRIYW5kbGVyIHByaW50LAogICAgICBGb3JrSGFuZGxlciBmb3JrfSkgewogICAgcmV0dXJuIG5ldyBab25lU3BlY2lmaWNhdGlvbigKICAgICAgICBoYW5kbGVVbmNhdWdodEVycm9yOiBoYW5kbGVVbmNhdWdodEVycm9yID8/IG90aGVyLmhhbmRsZVVuY2F1Z2h0RXJyb3IsCiAgICAgICAgcnVuOiBydW4gPz8gb3RoZXIucnVuLAogICAgICAgIHJ1blVuYXJ5OiBydW5VbmFyeSA/PyBvdGhlci5ydW5VbmFyeSwKICAgICAgICBydW5CaW5hcnk6IHJ1bkJpbmFyeSA/PyBvdGhlci5ydW5CaW5hcnksCiAgICAgICAgcmVnaXN0ZXJDYWxsYmFjazogcmVnaXN0ZXJDYWxsYmFjayA/PyBvdGhlci5yZWdpc3RlckNhbGxiYWNrLAogICAgICAgIHJlZ2lzdGVyVW5hcnlDYWxsYmFjazoKICAgICAgICAgICAgcmVnaXN0ZXJVbmFyeUNhbGxiYWNrID8/IG90aGVyLnJlZ2lzdGVyVW5hcnlDYWxsYmFjaywKICAgICAgICByZWdpc3RlckJpbmFyeUNhbGxiYWNrOgogICAgICAgICAgICByZWdpc3RlckJpbmFyeUNhbGxiYWNrID8/IG90aGVyLnJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2ssCiAgICAgICAgZXJyb3JDYWxsYmFjazogZXJyb3JDYWxsYmFjayA/PyBvdGhlci5lcnJvckNhbGxiYWNrLAogICAgICAgIHNjaGVkdWxlTWljcm90YXNrOiBzY2hlZHVsZU1pY3JvdGFzayA/PyBvdGhlci5zY2hlZHVsZU1pY3JvdGFzaywKICAgICAgICBjcmVhdGVUaW1lcjogY3JlYXRlVGltZXIgPz8gb3RoZXIuY3JlYXRlVGltZXIsCiAgICAgICAgY3JlYXRlUGVyaW9kaWNUaW1lcjogY3JlYXRlUGVyaW9kaWNUaW1lciA/PyBvdGhlci5jcmVhdGVQZXJpb2RpY1RpbWVyLAogICAgICAgIHByaW50OiBwcmludCA/PyBvdGhlci5wcmludCwKICAgICAgICBmb3JrOiBmb3JrID8/IG90aGVyLmZvcmspOwogIH0KCiAgSGFuZGxlVW5jYXVnaHRFcnJvckhhbmRsZXIgZ2V0IGhhbmRsZVVuY2F1Z2h0RXJyb3I7CiAgUnVuSGFuZGxlciBnZXQgcnVuOwogIFJ1blVuYXJ5SGFuZGxlciBnZXQgcnVuVW5hcnk7CiAgUnVuQmluYXJ5SGFuZGxlciBnZXQgcnVuQmluYXJ5OwogIFJlZ2lzdGVyQ2FsbGJhY2tIYW5kbGVyIGdldCByZWdpc3RlckNhbGxiYWNrOwogIFJlZ2lzdGVyVW5hcnlDYWxsYmFja0hhbmRsZXIgZ2V0IHJlZ2lzdGVyVW5hcnlDYWxsYmFjazsKICBSZWdpc3RlckJpbmFyeUNhbGxiYWNrSGFuZGxlciBnZXQgcmVnaXN0ZXJCaW5hcnlDYWxsYmFjazsKICBFcnJvckNhbGxiYWNrSGFuZGxlciBnZXQgZXJyb3JDYWxsYmFjazsKICBTY2hlZHVsZU1pY3JvdGFza0hhbmRsZXIgZ2V0IHNjaGVkdWxlTWljcm90YXNrOwogIENyZWF0ZVRpbWVySGFuZGxlciBnZXQgY3JlYXRlVGltZXI7CiAgQ3JlYXRlUGVyaW9kaWNUaW1lckhhbmRsZXIgZ2V0IGNyZWF0ZVBlcmlvZGljVGltZXI7CiAgUHJpbnRIYW5kbGVyIGdldCBwcmludDsKICBGb3JrSGFuZGxlciBnZXQgZm9yazsKfQoKLyoqCiAqIEludGVybmFsIFtab25lU3BlY2lmaWNhdGlvbl0gY2xhc3MuCiAqCiAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YW50cyB0byByZWx5IG9uIHRoZSBmYWN0IHRoYXQgdGhlIGdldHRlcnMgY2Fubm90IGNoYW5nZQogKiBkeW5hbWljYWxseS4gV2UgdGh1cyByZXF1aXJlIHVzZXJzIHRvIGdvIHRocm91Z2ggdGhlIHJlZGlyZWN0aW5nCiAqIFtab25lU3BlY2lmaWNhdGlvbl0gY29uc3RydWN0b3Igd2hpY2ggaW5zdGFudGlhdGVzIHRoaXMgY2xhc3MuCiAqLwpjbGFzcyBfWm9uZVNwZWNpZmljYXRpb24gaW1wbGVtZW50cyBab25lU3BlY2lmaWNhdGlvbiB7CiAgY29uc3QgX1pvbmVTcGVjaWZpY2F0aW9uKAogICAgICB7dGhpcy5oYW5kbGVVbmNhdWdodEVycm9yLAogICAgICB0aGlzLnJ1biwKICAgICAgdGhpcy5ydW5VbmFyeSwKICAgICAgdGhpcy5ydW5CaW5hcnksCiAgICAgIHRoaXMucmVnaXN0ZXJDYWxsYmFjaywKICAgICAgdGhpcy5yZWdpc3RlclVuYXJ5Q2FsbGJhY2ssCiAgICAgIHRoaXMucmVnaXN0ZXJCaW5hcnlDYWxsYmFjaywKICAgICAgdGhpcy5lcnJvckNhbGxiYWNrLAogICAgICB0aGlzLnNjaGVkdWxlTWljcm90YXNrLAogICAgICB0aGlzLmNyZWF0ZVRpbWVyLAogICAgICB0aGlzLmNyZWF0ZVBlcmlvZGljVGltZXIsCiAgICAgIHRoaXMucHJpbnQsCiAgICAgIHRoaXMuZm9ya30pOwoKICBmaW5hbCBIYW5kbGVVbmNhdWdodEVycm9ySGFuZGxlciBoYW5kbGVVbmNhdWdodEVycm9yOwogIGZpbmFsIFJ1bkhhbmRsZXIgcnVuOwogIGZpbmFsIFJ1blVuYXJ5SGFuZGxlciBydW5VbmFyeTsKICBmaW5hbCBSdW5CaW5hcnlIYW5kbGVyIHJ1bkJpbmFyeTsKICBmaW5hbCBSZWdpc3RlckNhbGxiYWNrSGFuZGxlciByZWdpc3RlckNhbGxiYWNrOwogIGZpbmFsIFJlZ2lzdGVyVW5hcnlDYWxsYmFja0hhbmRsZXIgcmVnaXN0ZXJVbmFyeUNhbGxiYWNrOwogIGZpbmFsIFJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2tIYW5kbGVyIHJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2s7CiAgZmluYWwgRXJyb3JDYWxsYmFja0hhbmRsZXIgZXJyb3JDYWxsYmFjazsKICBmaW5hbCBTY2hlZHVsZU1pY3JvdGFza0hhbmRsZXIgc2NoZWR1bGVNaWNyb3Rhc2s7CiAgZmluYWwgQ3JlYXRlVGltZXJIYW5kbGVyIGNyZWF0ZVRpbWVyOwogIGZpbmFsIENyZWF0ZVBlcmlvZGljVGltZXJIYW5kbGVyIGNyZWF0ZVBlcmlvZGljVGltZXI7CiAgZmluYWwgUHJpbnRIYW5kbGVyIHByaW50OwogIGZpbmFsIEZvcmtIYW5kbGVyIGZvcms7Cn0KCi8qKgogKiBBbiBhZGFwdGVkIHZpZXcgb2YgdGhlIHBhcmVudCB6b25lLgogKgogKiBUaGlzIGNsYXNzIGFsbG93cyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYSB6b25lIG1ldGhvZCB0byBpbnZva2UgbWV0aG9kcyBvbgogKiB0aGUgcGFyZW50IHpvbmUgd2hpbGUgcmV0YWluaW5nIGtub3dsZWRnZSBvZiB0aGUgb3JpZ2luYXRpbmcgem9uZS4KICoKICogQ3VzdG9tIHpvbmVzIChjcmVhdGVkIHRocm91Z2ggW1pvbmUuZm9ya10gb3IgW3J1blpvbmVkXSkgY2FuIHByb3ZpZGUKICogaW1wbGVtZW50YXRpb25zIG9mIG1vc3QgbWV0aG9kcyBvZiB6b25lcy4gVGhpcyBpcyBzaW1pbGFyIHRvIG92ZXJyaWRpbmcKICogbWV0aG9kcyBvbiBbWm9uZV0sIGV4Y2VwdCB0aGF0IHRoaXMgbWVjaGFuaXNtIGRvZXNuJ3QgcmVxdWlyZSBzdWJjbGFzc2luZy4KICoKICogQSBjdXN0b20gem9uZSBmdW5jdGlvbiAocHJvdmlkZWQgdGhyb3VnaCBhIFtab25lU3BlY2lmaWNhdGlvbl0pIHR5cGljYWxseQogKiByZWNvcmRzIG9yIHdyYXBzIGl0cyBwYXJhbWV0ZXJzIGFuZCB0aGVuIGRlbGVnYXRlcyB0aGUgb3BlcmF0aW9uIHRvIGl0cwogKiBwYXJlbnQgem9uZSB1c2luZyB0aGUgcHJvdmlkZWQgW1pvbmVEZWxlZ2F0ZV0uCiAqCiAqIFdoaWxlIHpvbmVzIGhhdmUgYWNjZXNzIHRvIHRoZWlyIHBhcmVudCB6b25lICh0aHJvdWdoIFtab25lLnBhcmVudF0pIGl0IGlzCiAqIHJlY29tbWVuZGVkIHRvIGNhbGwgdGhlIG1ldGhvZHMgb24gdGhlIHByb3ZpZGVkIHBhcmVudCBkZWxlZ2F0ZSBmb3IgdHdvCiAqIHJlYXNvbnM6CiAqIDEuIHRoZSBkZWxlZ2F0ZSBtZXRob2RzIHRha2UgYW4gYWRkaXRpb25hbCBgem9uZWAgYXJndW1lbnQgd2hpY2ggaXMgdGhlCiAqICAgem9uZSB0aGUgYWN0aW9uIGhhcyBiZWVuIGluaXRpYXRlZCBpbi4KICogMi4gZGVsZWdhdGUgY2FsbHMgYXJlIG1vcmUgZWZmaWNpZW50LCBzaW5jZSB0aGUgaW1wbGVtZW50YXRpb24ga25vd3MgaG93CiAqICAgdG8gc2tpcCB6b25lcyB0aGF0IHdvdWxkIGp1c3QgZGVsZWdhdGUgdG8gdGhlaXIgcGFyZW50cy4KICovCmFic3RyYWN0IGNsYXNzIFpvbmVEZWxlZ2F0ZSB7CiAgdm9pZCBoYW5kbGVVbmNhdWdodEVycm9yKFpvbmUgem9uZSwgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSk7CiAgUiBydW48Uj4oWm9uZSB6b25lLCBSIGYoKSk7CiAgUiBydW5VbmFyeTxSLCBUPihab25lIHpvbmUsIFIgZihUIGFyZyksIFQgYXJnKTsKICBSIHJ1bkJpbmFyeTxSLCBUMSwgVDI+KFpvbmUgem9uZSwgUiBmKFQxIGFyZzEsIFQyIGFyZzIpLCBUMSBhcmcxLCBUMiBhcmcyKTsKICBab25lQ2FsbGJhY2s8Uj4gcmVnaXN0ZXJDYWxsYmFjazxSPihab25lIHpvbmUsIFIgZigpKTsKICBab25lVW5hcnlDYWxsYmFjazxSLCBUPiByZWdpc3RlclVuYXJ5Q2FsbGJhY2s8UiwgVD4oWm9uZSB6b25lLCBSIGYoVCBhcmcpKTsKICBab25lQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPiByZWdpc3RlckJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4oCiAgICAgIFpvbmUgem9uZSwgUiBmKFQxIGFyZzEsIFQyIGFyZzIpKTsKICBBc3luY0Vycm9yIGVycm9yQ2FsbGJhY2soWm9uZSB6b25lLCBPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSk7CiAgdm9pZCBzY2hlZHVsZU1pY3JvdGFzayhab25lIHpvbmUsIHZvaWQgZigpKTsKICBUaW1lciBjcmVhdGVUaW1lcihab25lIHpvbmUsIER1cmF0aW9uIGR1cmF0aW9uLCB2b2lkIGYoKSk7CiAgVGltZXIgY3JlYXRlUGVyaW9kaWNUaW1lcihab25lIHpvbmUsIER1cmF0aW9uIHBlcmlvZCwgdm9pZCBmKFRpbWVyIHRpbWVyKSk7CiAgdm9pZCBwcmludChab25lIHpvbmUsIFN0cmluZyBsaW5lKTsKICBab25lIGZvcmsoWm9uZSB6b25lLCBab25lU3BlY2lmaWNhdGlvbiBzcGVjaWZpY2F0aW9uLCBNYXAgem9uZVZhbHVlcyk7Cn0KCi8qKgogKiBBIHpvbmUgcmVwcmVzZW50cyBhbiBlbnZpcm9ubWVudCB0aGF0IHJlbWFpbnMgc3RhYmxlIGFjcm9zcyBhc3luY2hyb25vdXMKICogY2FsbHMuCiAqCiAqIENvZGUgaXMgYWx3YXlzIGV4ZWN1dGVkIGluIHRoZSBjb250ZXh0IG9mIGEgem9uZSwgYXZhaWxhYmxlIGFzCiAqIFtab25lLmN1cnJlbnRdLiBUaGUgaW5pdGlhbCBgbWFpbmAgZnVuY3Rpb24gcnVucyBpbiB0aGUgY29udGV4dCBvZiB0aGUKICogZGVmYXVsdCB6b25lIChbWm9uZS5yb290XSkuIENvZGUgY2FuIGJlIHJ1biBpbiBhIGRpZmZlcmVudCB6b25lIHVzaW5nIGVpdGhlcgogKiBbcnVuWm9uZWRdLCB0byBjcmVhdGUgYSBuZXcgem9uZSwgb3IgW1pvbmUucnVuXSB0byBydW4gY29kZSBpbiB0aGUgY29udGV4dCBvZgogKiBhbiBleGlzdGluZyB6b25lIGxpa2VseSBjcmVhdGVkIHVzaW5nIFtab25lLmZvcmtdLgogKgogKiBEZXZlbG9wZXJzIGNhbiBjcmVhdGUgYSBuZXcgem9uZSB0aGF0IG92ZXJyaWRlcyBzb21lIG9mIHRoZSBmdW5jdGlvbmFsaXR5IG9mCiAqIGFuIGV4aXN0aW5nIHpvbmUuIEZvciBleGFtcGxlLCBjdXN0b20gem9uZXMgY2FuIHJlcGxhY2Ugb3IgbW9kaWZ5IHRoZQogKiBiZWhhdmlvciBvZiBgcHJpbnRgLCB0aW1lcnMsIG1pY3JvdGFza3Mgb3IgaG93IHVuY2F1Z2h0IGVycm9ycyBhcmUgaGFuZGxlZC4KICoKICogVGhlIFtab25lXSBjbGFzcyBpcyBub3Qgc3ViY2xhc3NhYmxlLCBidXQgdXNlcnMgY2FuIHByb3ZpZGUgY3VzdG9tIHpvbmVzIGJ5CiAqIGZvcmtpbmcgYW4gZXhpc3Rpbmcgem9uZSAodXN1YWxseSBbWm9uZS5jdXJyZW50XSkgd2l0aCBhIFtab25lU3BlY2lmaWNhdGlvbl0uCiAqIFRoaXMgaXMgc2ltaWxhciB0byBjcmVhdGluZyBhIG5ldyBjbGFzcyB0aGF0IGV4dGVuZHMgdGhlIGJhc2UgYFpvbmVgIGNsYXNzCiAqIGFuZCB0aGF0IG92ZXJyaWRlcyBzb21lIG1ldGhvZHMsIGV4Y2VwdCB3aXRob3V0IGFjdHVhbGx5IGNyZWF0aW5nIGEgbmV3CiAqIGNsYXNzLiBJbnN0ZWFkIHRoZSBvdmVycmlkaW5nIG1ldGhvZHMgYXJlIHByb3ZpZGVkIGFzIGZ1bmN0aW9ucyB0aGF0CiAqIGV4cGxpY2l0bHkgdGFrZSB0aGUgZXF1aXZhbGVudCBvZiB0aGVpciBvd24gY2xhc3MsIHRoZSAic3VwZXIiIGNsYXNzIGFuZCB0aGUKICogYHRoaXNgIG9iamVjdCBhcyBwYXJhbWV0ZXJzLgogKgogKiBBc3luY2hyb25vdXMgY2FsbGJhY2tzIGFsd2F5cyBydW4gaW4gdGhlIGNvbnRleHQgb2YgdGhlIHpvbmUgd2hlcmUgdGhleSB3ZXJlCiAqIHNjaGVkdWxlZC4gVGhpcyBpcyBpbXBsZW1lbnRlZCB1c2luZyB0d28gc3RlcHM6CiAqIDEuIHRoZSBjYWxsYmFjayBpcyBmaXJzdCByZWdpc3RlcmVkIHVzaW5nIG9uZSBvZiBbcmVnaXN0ZXJDYWxsYmFja10sCiAqICAgW3JlZ2lzdGVyVW5hcnlDYWxsYmFja10sIG9yIFtyZWdpc3RlckJpbmFyeUNhbGxiYWNrXS4gVGhpcyBhbGxvd3MgdGhlIHpvbmUKICogICB0byByZWNvcmQgdGhhdCBhIGNhbGxiYWNrIGV4aXN0cyBhbmQgcG90ZW50aWFsbHkgbW9kaWZ5IGl0IChieSByZXR1cm5pbmcgYQogKiAgIGRpZmZlcmVudCBjYWxsYmFjaykuIFRoZSBjb2RlIGRvaW5nIHRoZSByZWdpc3RyYXRpb24gKGUuZy4sIGBGdXR1cmUudGhlbmApCiAqICAgYWxzbyByZW1lbWJlcnMgdGhlIGN1cnJlbnQgem9uZSBzbyB0aGF0IGl0IGNhbiBsYXRlciBydW4gdGhlIGNhbGxiYWNrIGluCiAqICAgdGhhdCB6b25lLgogKiAyLiBBdCBhIGxhdGVyIHBvaW50IHRoZSByZWdpc3RlcmVkIGNhbGxiYWNrIGlzIHJ1biBpbiB0aGUgcmVtZW1iZXJlZCB6b25lLgogKgogKiBUaGlzIGlzIGFsbCBoYW5kbGVkIGludGVybmFsbHkgYnkgdGhlIHBsYXRmb3JtIGNvZGUgYW5kIG1vc3QgdXNlcnMgZG9uJ3QgbmVlZAogKiB0byB3b3JyeSBhYm91dCBpdC4gSG93ZXZlciwgZGV2ZWxvcGVycyBvZiBuZXcgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMsCiAqIHByb3ZpZGVkIGJ5IHRoZSB1bmRlcmx5aW5nIHN5c3RlbSBvciB0aHJvdWdoIG5hdGl2ZSBleHRlbnNpb25zLCBtdXN0IGZvbGxvdwogKiB0aGUgcHJvdG9jb2wgdG8gYmUgem9uZSBjb21wYXRpYmxlLgogKgogKiBGb3IgY29udmVuaWVuY2UsIHpvbmVzIHByb3ZpZGUgW2JpbmRDYWxsYmFja10gKGFuZCB0aGUgY29ycmVzcG9uZGluZwogKiBbYmluZFVuYXJ5Q2FsbGJhY2tdIGFuZCBbYmluZEJpbmFyeUNhbGxiYWNrXSkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gcmVzcGVjdAogKiB0aGUgem9uZSBjb250cmFjdDogdGhlc2UgZnVuY3Rpb25zIGZpcnN0IGludm9rZSB0aGUgY29ycmVzcG9uZGluZyBgcmVnaXN0ZXJgCiAqIGZ1bmN0aW9ucyBhbmQgdGhlbiB3cmFwIHRoZSByZXR1cm5lZCBmdW5jdGlvbiBzbyB0aGF0IGl0IHJ1bnMgaW4gdGhlIGN1cnJlbnQKICogem9uZSB3aGVuIGl0IGlzIGxhdGVyIGFzeW5jaHJvbm91c2x5IGludm9rZWQuCiAqCiAqIFNpbWlsYXJseSwgem9uZXMgcHJvdmlkZSBbYmluZENhbGxiYWNrR3VhcmRlZF0gKGFuZCB0aGUgY29ycmVzcG9uZGluZwogKiBbYmluZFVuYXJ5Q2FsbGJhY2tHdWFyZGVkXSBhbmQgW2JpbmRCaW5hcnlDYWxsYmFja0d1YXJkZWRdKSwgd2hlbiB0aGUKICogY2FsbGJhY2sgc2hvdWxkIGJlIGludm9rZWQgdGhyb3VnaCBbWm9uZS5ydW5HdWFyZGVkXS4KICovCmFic3RyYWN0IGNsYXNzIFpvbmUgewogIC8vIFByaXZhdGUgY29uc3RydWN0b3Igc28gdGhhdCBpdCBpcyBub3QgcG9zc2libGUgaW5zdGFudGlhdGUgYSBab25lIGNsYXNzLgogIFpvbmUuXygpOwoKICAvKioKICAgKiBUaGUgcm9vdCB6b25lLgogICAqCiAgICogQWxsIGlzb2xhdGUgZW50cnkgZnVuY3Rpb25zIChgbWFpbmAgb3Igc3Bhd25lZCBmdW5jdGlvbnMpIHN0YXJ0IHJ1bm5pbmcgaW4KICAgKiB0aGUgcm9vdCB6b25lICh0aGF0IGlzLCBbWm9uZS5jdXJyZW50XSBpcyBpZGVudGljYWwgdG8gW1pvbmUucm9vdF0gd2hlbiB0aGUKICAgKiBlbnRyeSBmdW5jdGlvbiBpcyBjYWxsZWQpLiBJZiBubyBjdXN0b20gem9uZSBpcyBjcmVhdGVkLCB0aGUgcmVzdCBvZiB0aGUKICAgKiBwcm9ncmFtIGFsd2F5cyBydW5zIGluIHRoZSByb290IHpvbmUuCiAgICoKICAgKiBUaGUgcm9vdCB6b25lIGltcGxlbWVudHMgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgYWxsIHpvbmUgb3BlcmF0aW9ucy4KICAgKiBNYW55IG1ldGhvZHMsIGxpa2UgW3JlZ2lzdGVyQ2FsbGJhY2tdIGRvIHRoZSBiYXJlIG1pbmltdW0gcmVxdWlyZWQgb2YgdGhlCiAgICogZnVuY3Rpb24sIGFuZCBhcmUgb25seSBwcm92aWRlZCBhcyBhIGhvb2sgZm9yIGN1c3RvbSB6b25lcy4gT3RoZXJzLCBsaWtlCiAgICogW3NjaGVkdWxlTWljcm90YXNrXSwgaW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBzeXN0ZW0gdG8gaW1wbGVtZW50IHRoZQogICAqIGRlc2lyZWQgYmVoYXZpb3IuCiAgICovCiAgc3RhdGljIGNvbnN0IFpvbmUgcm9vdCA9IF9yb290Wm9uZTsKCiAgLyoqIFRoZSBjdXJyZW50bHkgcnVubmluZyB6b25lLiAqLwogIHN0YXRpYyBab25lIF9jdXJyZW50ID0gX3Jvb3Rab25lOwoKICAvKiogVGhlIHpvbmUgdGhhdCBpcyBjdXJyZW50bHkgYWN0aXZlLiAqLwogIHN0YXRpYyBab25lIGdldCBjdXJyZW50ID0+IF9jdXJyZW50OwoKICAvKioKICAgKiBIYW5kbGVzIHVuY2F1Z2h0IGFzeW5jaHJvbm91cyBlcnJvcnMuCiAgICoKICAgKiBUaGVyZSBhcmUgdHdvIGtpbmQgb2YgYXN5bmNocm9ub3VzIGVycm9ycyB0aGF0IGFyZSBoYW5kbGVkIGJ5IHRoaXMKICAgKiBmdW5jdGlvbjoKICAgKiAxLiBVbmNhdWdodCBlcnJvcnMgdGhhdCB3ZXJlIHRocm93biBpbiBhc3luY2hyb25vdXMgY2FsbGJhY2tzLCBmb3IgZXhhbXBsZSwKICAgKiAgIGEgYHRocm93YCBpbiB0aGUgZnVuY3Rpb24gcGFzc2VkIHRvIFtUaW1lci5ydW5dLgogICAqIDIuIEFzeW5jaHJvbm91cyBlcnJvcnMgdGhhdCBhcmUgcHVzaGVkIHRocm91Z2ggW0Z1dHVyZV0gYW5kIFtTdHJlYW1dCiAgICogICBjaGFpbnMsIGJ1dCBmb3Igd2hpY2ggbm8gY2hpbGQgcmVnaXN0ZXJlZCBhbiBlcnJvciBoYW5kbGVyLgogICAqICAgTW9zdCBhc3luY2hyb25vdXMgY2xhc3NlcywgbGlrZSBbRnV0dXJlXSBvciBbU3RyZWFtXSBwdXNoIGVycm9ycyB0byB0aGVpcgogICAqICAgbGlzdGVuZXJzLiBFcnJvcnMgYXJlIHByb3BhZ2F0ZWQgdGhpcyB3YXkgdW50aWwgZWl0aGVyIGEgbGlzdGVuZXIgaGFuZGxlcwogICAqICAgdGhlIGVycm9yIChmb3IgZXhhbXBsZSB3aXRoIFtGdXR1cmUuY2F0Y2hFcnJvcl0pLCBvciBubyBsaXN0ZW5lciBpcwogICAqICAgYXZhaWxhYmxlIGFueW1vcmUuIEluIHRoZSBsYXR0ZXIgY2FzZSwgZnV0dXJlcyBhbmQgc3RyZWFtcyBpbnZva2UgdGhlCiAgICogICB6b25lJ3MgW2hhbmRsZVVuY2F1Z2h0RXJyb3JdLgogICAqCiAgICogQnkgZGVmYXVsdCwgd2hlbiBoYW5kbGVkIGJ5IHRoZSByb290IHpvbmUsIHVuY2F1Z2h0IGFzeW5jaHJvbm91cyBlcnJvcnMgYXJlCiAgICogdHJlYXRlZCBsaWtlIHVuY2F1Z2h0IHN5bmNocm9ub3VzIGV4Y2VwdGlvbnMuCiAgICovCiAgdm9pZCBoYW5kbGVVbmNhdWdodEVycm9yKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpOwoKICAvKioKICAgKiBUaGUgcGFyZW50IHpvbmUgb2YgdGhlIHRoaXMgem9uZS4KICAgKgogICAqIElzIGBudWxsYCBpZiBgdGhpc2AgaXMgdGhlIFtyb290XSB6b25lLgogICAqCiAgICogWm9uZXMgYXJlIGNyZWF0ZWQgYnkgW2ZvcmtdIG9uIGFuIGV4aXN0aW5nIHpvbmUsIG9yIGJ5IFtydW5ab25lZF0gd2hpY2gKICAgKiBmb3JrcyB0aGUgW2N1cnJlbnRdIHpvbmUuIFRoZSBuZXcgem9uZSdzIHBhcmVudCB6b25lIGlzIHRoZSB6b25lIGl0IHdhcwogICAqIGZvcmtlZCBmcm9tLgogICAqLwogIFpvbmUgZ2V0IHBhcmVudDsKCiAgLyoqCiAgICogVGhlIGVycm9yIHpvbmUgaXMgdGhlIG9uZSB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBkZWFsaW5nIHdpdGggdW5jYXVnaHQKICAgKiBlcnJvcnMuCiAgICoKICAgKiBUaGlzIGlzIHRoZSBjbG9zZXN0IHBhcmVudCB6b25lIG9mIHRoaXMgem9uZSB0aGF0IHByb3ZpZGVzIGEKICAgKiBbaGFuZGxlVW5jYXVnaHRFcnJvcl0gbWV0aG9kLgogICAqCiAgICogQXN5bmNocm9ub3VzIGVycm9ycyBuZXZlciBjcm9zcyB6b25lIGJvdW5kYXJpZXMgYmV0d2VlbiB6b25lcyB3aXRoCiAgICogZGlmZmVyZW50IGVycm9yIGhhbmRsZXJzLgogICAqCiAgICogRXhhbXBsZToKICAgKiBgYGAKICAgKiBpbXBvcnQgJ2RhcnQ6YXN5bmMnOwogICAqCiAgICogbWFpbigpIHsKICAgKiAgIHZhciBmdXR1cmU7CiAgICogICBydW5ab25lZCgoKSB7CiAgICogICAgIC8vIFRoZSBhc3luY2hyb25vdXMgZXJyb3IgaXMgY2F1Z2h0IGJ5IHRoZSBjdXN0b20gem9uZSB3aGljaCBwcmludHMKICAgKiAgICAgLy8gJ2FzeW5jaHJvbm91cyBlcnJvcicuCiAgICogICAgIGZ1dHVyZSA9IG5ldyBGdXR1cmUuZXJyb3IoImFzeW5jaHJvbm91cyBlcnJvciIpOwogICAqICAgfSwgb25FcnJvcjogKGUpIHsgcHJpbnQoZSk7IH0pOyAgLy8gQ3JlYXRlcyBhIHpvbmUgd2l0aCBhbiBlcnJvciBoYW5kbGVyLgogICAqICAgLy8gVGhlIGZvbGxvd2luZyBgY2F0Y2hFcnJvcmAgaGFuZGxlciBpcyBuZXZlciBpbnZva2VkLCBiZWNhdXNlIHRoZQogICAqICAgLy8gY3VzdG9tIHpvbmUgY3JlYXRlZCBieSB0aGUgY2FsbCB0byBgcnVuWm9uZWRgIHByb3ZpZGVzIGFuCiAgICogICAvLyBlcnJvciBoYW5kbGVyLgogICAqICAgZnV0dXJlLmNhdGNoRXJyb3IoKGUpIHsgdGhyb3cgImlzIG5ldmVyIHJlYWNoZWQiOyB9KTsKICAgKiB9CiAgICogYGBgCiAgICoKICAgKiBOb3RlIHRoYXQgZXJyb3JzIGNhbm5vdCBlbnRlciBhIGNoaWxkIHpvbmUgd2l0aCBhIGRpZmZlcmVudCBlcnJvciBoYW5kbGVyCiAgICogZWl0aGVyOgogICAqIGBgYAogICAqIGltcG9ydCAnZGFydDphc3luYyc7CiAgICoKICAgKiBtYWluKCkgewogICAqICAgcnVuWm9uZWQoKCkgewogICAqICAgICAvLyBUaGUgZm9sbG93aW5nIGFzeW5jaHJvbm91cyBlcnJvciBpcyAqbm90KiBjYXVnaHQgYnkgdGhlIGBjYXRjaEVycm9yYAogICAqICAgICAvLyBpbiB0aGUgbmVzdGVkIHpvbmUsIHNpbmNlIGVycm9ycyBhcmUgbm90IHRvIGNyb3NzIHpvbmUgYm91bmRhcmllcwogICAqICAgICAvLyB3aXRoIGRpZmZlcmVudCBlcnJvciBoYW5kbGVycy4KICAgKiAgICAgLy8gSW5zdGVhZCB0aGUgZXJyb3IgaXMgaGFuZGxlZCBieSB0aGUgY3VycmVudCBlcnJvciBoYW5kbGVyLAogICAqICAgICAvLyBwcmludGluZyAiQ2F1Z2h0IGJ5IG91dGVyIHpvbmU6IGFzeW5jaHJvbm91cyBlcnJvciIuCiAgICogICAgIHZhciBmdXR1cmUgPSBuZXcgRnV0dXJlLmVycm9yKCJhc3luY2hyb25vdXMgZXJyb3IiKTsKICAgKiAgICAgcnVuWm9uZWQoKCkgewogICAqICAgICAgIGZ1dHVyZS5jYXRjaEVycm9yKChlKSB7IHRocm93ICJpcyBuZXZlciByZWFjaGVkIjsgfSk7CiAgICogICAgIH0sIG9uRXJyb3I6IChlKSB7IHRocm93ICJpcyBuZXZlciByZWFjaGVkIjsgfSk7CiAgICogICB9LCBvbkVycm9yOiAoZSkgeyBwcmludCgiQ2F1Z2h0IGJ5IG91dGVyIHpvbmU6ICRlIik7IH0pOwogICAqIH0KICAgKiBgYGAKICAgKi8KICBab25lIGdldCBlcnJvclpvbmU7CgogIC8qKgogICAqIFJldHVybnMgdHJ1ZSBpZiBgdGhpc2AgYW5kIFtvdGhlclpvbmVdIGFyZSBpbiB0aGUgc2FtZSBlcnJvciB6b25lLgogICAqCiAgICogVHdvIHpvbmVzIGFyZSBpbiB0aGUgc2FtZSBlcnJvciB6b25lIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBbZXJyb3Jab25lXS4KICAgKi8KICBib29sIGluU2FtZUVycm9yWm9uZShab25lIG90aGVyWm9uZSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgem9uZSBhcyBhIGNoaWxkIG9mIGB0aGlzYC4KICAgKgogICAqIFRoZSBuZXcgem9uZSB1c2VzIHRoZSBjbG9zdXJlcyBpbiB0aGUgZ2l2ZW4gW3NwZWNpZmljYXRpb25dIHRvIG92ZXJyaWRlCiAgICogdGhlIGN1cnJlbnQncyB6b25lIGJlaGF2aW9yLiBBbGwgc3BlY2lmaWNhdGlvbiBlbnRyaWVzIHRoYXQgYXJlIGBudWxsYAogICAqIGluaGVyaXQgdGhlIGJlaGF2aW9yIGZyb20gdGhlIHBhcmVudCB6b25lIChgdGhpc2ApLgogICAqCiAgICogVGhlIG5ldyB6b25lIGluaGVyaXRzIHRoZSBzdG9yZWQgdmFsdWVzIChhY2Nlc3NlZCB0aHJvdWdoIFtvcGVyYXRvciBbXV0pCiAgICogb2YgdGhpcyB6b25lIGFuZCB1cGRhdGVzIHRoZW0gd2l0aCB2YWx1ZXMgZnJvbSBbem9uZVZhbHVlc10sIHdoaWNoIGVpdGhlcgogICAqIGFkZHMgbmV3IHZhbHVlcyBvciBvdmVycmlkZXMgZXhpc3Rpbmcgb25lcy4KICAgKgogICAqIE5vdGUgdGhhdCB0aGUgZm9yayBvcGVyYXRpb24gaXMgaW50ZXJjZXB0aWJsZS4gQSB6b25lIGNhbiB0aHVzIGNoYW5nZQogICAqIHRoZSB6b25lIHNwZWNpZmljYXRpb24gKG9yIHpvbmUgdmFsdWVzKSwgZ2l2aW5nIHRoZSBmb3JraW5nIHpvbmUgZnVsbAogICAqIGNvbnRyb2wgb3ZlciB0aGUgY2hpbGQgem9uZS4KICAgKi8KICBab25lIGZvcmsoe1pvbmVTcGVjaWZpY2F0aW9uIHNwZWNpZmljYXRpb24sIE1hcCB6b25lVmFsdWVzfSk7CgogIC8qKgogICAqIEV4ZWN1dGVzIFthY3Rpb25dIGluIHRoaXMgem9uZS4KICAgKgogICAqIEJ5IGRlZmF1bHQgKGFzIGltcGxlbWVudGVkIGluIHRoZSBbcm9vdF0gem9uZSksIHJ1bnMgW2FjdGlvbl0KICAgKiB3aXRoIFtjdXJyZW50XSBzZXQgdG8gdGhpcyB6b25lLgogICAqCiAgICogSWYgW2FjdGlvbl0gdGhyb3dzLCB0aGUgc3luY2hyb25vdXMgZXhjZXB0aW9uIGlzIG5vdCBjYXVnaHQgYnkgdGhlIHpvbmUncwogICAqIGVycm9yIGhhbmRsZXIuIFVzZSBbcnVuR3VhcmRlZF0gdG8gYWNoaWV2ZSB0aGF0LgogICAqCiAgICogU2luY2UgdGhlIHJvb3Qgem9uZSBpcyB0aGUgb25seSB6b25lIHRoYXQgY2FuIG1vZGlmeSB0aGUgdmFsdWUgb2YKICAgKiBbY3VycmVudF0sIGN1c3RvbSB6b25lcyBpbnRlcmNlcHRpbmcgcnVuIHNob3VsZCBhbHdheXMgZGVsZWdhdGUgdG8gdGhlaXIKICAgKiBwYXJlbnQgem9uZS4gVGhleSBtYXkgdGFrZSBhY3Rpb25zIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGNhbGwuCiAgICovCiAgUiBydW48Uj4oUiBhY3Rpb24oKSk7CgogIC8qKgogICAqIEV4ZWN1dGVzIHRoZSBnaXZlbiBbYWN0aW9uXSB3aXRoIFthcmd1bWVudF0gaW4gdGhpcyB6b25lLgogICAqCiAgICogQXMgW3J1bl0gZXhjZXB0IHRoYXQgW2FjdGlvbl0gaXMgY2FsbGVkIHdpdGggb25lIFthcmd1bWVudF0gaW5zdGVhZCBvZgogICAqIG5vbmUuCiAgICovCiAgUiBydW5VbmFyeTxSLCBUPihSIGFjdGlvbihUIGFyZ3VtZW50KSwgVCBhcmd1bWVudCk7CgogIC8qKgogICAqIEV4ZWN1dGVzIHRoZSBnaXZlbiBbYWN0aW9uXSB3aXRoIFthcmd1bWVudDFdIGFuZCBbYXJndW1lbnQyXSBpbiB0aGlzCiAgICogem9uZS4KICAgKgogICAqIEFzIFtydW5dIGV4Y2VwdCB0aGF0IFthY3Rpb25dIGlzIGNhbGxlZCB3aXRoIHR3byBhcmd1bWVudHMgaW5zdGVhZCBvZiBub25lLgogICAqLwogIFIgcnVuQmluYXJ5PFIsIFQxLCBUMj4oCiAgICAgIFIgYWN0aW9uKFQxIGFyZ3VtZW50MSwgVDIgYXJndW1lbnQyKSwgVDEgYXJndW1lbnQxLCBUMiBhcmd1bWVudDIpOwoKICAvKioKICAgKiBFeGVjdXRlcyB0aGUgZ2l2ZW4gW2FjdGlvbl0gaW4gdGhpcyB6b25lIGFuZCBjYXRjaGVzIHN5bmNocm9ub3VzCiAgICogZXJyb3JzLgogICAqCiAgICogVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvOgogICAqIGBgYAogICAqIHRyeSB7CiAgICogICB0aGlzLnJ1bihhY3Rpb24pOwogICAqIH0gY2F0Y2ggKGUsIHMpIHsKICAgKiAgIHRoaXMuaGFuZGxlVW5jYXVnaHRFcnJvcihlLCBzKTsKICAgKiB9CiAgICogYGBgCiAgICoKICAgKiBTZWUgW3J1bl0uCiAgICovCiAgdm9pZCBydW5HdWFyZGVkKHZvaWQgYWN0aW9uKCkpOwoKICAvKioKICAgKiBFeGVjdXRlcyB0aGUgZ2l2ZW4gW2FjdGlvbl0gd2l0aCBbYXJndW1lbnRdIGluIHRoaXMgem9uZSBhbmQKICAgKiBjYXRjaGVzIHN5bmNocm9ub3VzIGVycm9ycy4KICAgKgogICAqIFNlZSBbcnVuR3VhcmRlZF0uCiAgICovCiAgdm9pZCBydW5VbmFyeUd1YXJkZWQ8VD4odm9pZCBhY3Rpb24oVCBhcmd1bWVudCksIFQgYXJndW1lbnQpOwoKICAvKioKICAgKiBFeGVjdXRlcyB0aGUgZ2l2ZW4gW2FjdGlvbl0gd2l0aCBbYXJndW1lbnQxXSBhbmQgW2FyZ3VtZW50Ml0gaW4gdGhpcwogICAqIHpvbmUgYW5kIGNhdGNoZXMgc3luY2hyb25vdXMgZXJyb3JzLgogICAqCiAgICogU2VlIFtydW5HdWFyZGVkXS4KICAgKi8KICB2b2lkIHJ1bkJpbmFyeUd1YXJkZWQ8VDEsIFQyPigKICAgICAgdm9pZCBhY3Rpb24oVDEgYXJndW1lbnQxLCBUMiBhcmd1bWVudDIpLCBUMSBhcmd1bWVudDEsIFQyIGFyZ3VtZW50Mik7CgogIC8qKgogICAqIFJlZ2lzdGVycyB0aGUgZ2l2ZW4gY2FsbGJhY2sgaW4gdGhpcyB6b25lLgogICAqCiAgICogV2hlbiBpbXBsZW1lbnRpbmcgYW4gYXN5bmNocm9ub3VzIHByaW1pdGl2ZSB0aGF0IHVzZXMgY2FsbGJhY2tzLCB0aGUKICAgKiBjYWxsYmFjayBtdXN0IGJlIHJlZ2lzdGVyZWQgdXNpbmcgW3JlZ2lzdGVyQ2FsbGJhY2tdIGF0IHRoZSBwb2ludCB3aGVyZSB0aGUKICAgKiB1c2VyIHByb3ZpZGVzIHRoZSBjYWxsYmFjay4gVGhpcyBhbGxvd3Mgem9uZXMgdG8gcmVjb3JkIG90aGVyIGluZm9ybWF0aW9uCiAgICogdGhhdCB0aGV5IG5lZWQgYXQgdGhlIHNhbWUgdGltZSwgcGVyaGFwcyBldmVuIHdyYXBwaW5nIHRoZSBjYWxsYmFjaywgc28KICAgKiB0aGF0IHRoZSBjYWxsYmFjayBpcyBwcmVwYXJlZCB3aGVuIGl0IGlzIGxhdGVyIHJ1biBpbiB0aGUgc2FtZSB6b25lcwogICAqICh1c2luZyBbcnVuXSkuIEZvciBleGFtcGxlLCBhIHpvbmUgbWF5IGRlY2lkZQogICAqIHRvIHN0b3JlIHRoZSBzdGFjayB0cmFjZSAoYXQgdGhlIHRpbWUgb2YgdGhlIHJlZ2lzdHJhdGlvbikgd2l0aCB0aGUKICAgKiBjYWxsYmFjay4KICAgKgogICAqIFJldHVybnMgdGhlIGNhbGxiYWNrIHRoYXQgc2hvdWxkIGJlIHVzZWQgaW4gcGxhY2Ugb2YgdGhlIHByb3ZpZGVkCiAgICogW2NhbGxiYWNrXS4gRnJlcXVlbnRseSB6b25lcyBzaW1wbHkgcmV0dXJuIHRoZSBvcmlnaW5hbCBjYWxsYmFjay4KICAgKgogICAqIEN1c3RvbSB6b25lcyBtYXkgaW50ZXJjZXB0IHRoaXMgb3BlcmF0aW9uLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpbgogICAqIFtab25lLnJvb3RdIHJldHVybnMgdGhlIG9yaWdpbmFsIGNhbGxiYWNrIHVuY2hhbmdlZC4KICAgKi8KICBab25lQ2FsbGJhY2s8Uj4gcmVnaXN0ZXJDYWxsYmFjazxSPihSIGNhbGxiYWNrKCkpOwoKICAvKioKICAgKiBSZWdpc3RlcnMgdGhlIGdpdmVuIGNhbGxiYWNrIGluIHRoaXMgem9uZS4KICAgKgogICAqIFNpbWlsYXIgdG8gW3JlZ2lzdGVyQ2FsbGJhY2tdIGJ1dCB3aXRoIGEgdW5hcnkgY2FsbGJhY2suCiAgICovCiAgWm9uZVVuYXJ5Q2FsbGJhY2s8UiwgVD4gcmVnaXN0ZXJVbmFyeUNhbGxiYWNrPFIsIFQ+KFIgY2FsbGJhY2soVCBhcmcpKTsKCiAgLyoqCiAgICogUmVnaXN0ZXJzIHRoZSBnaXZlbiBjYWxsYmFjayBpbiB0aGlzIHpvbmUuCiAgICoKICAgKiBTaW1pbGFyIHRvIFtyZWdpc3RlckNhbGxiYWNrXSBidXQgd2l0aCBhIHVuYXJ5IGNhbGxiYWNrLgogICAqLwogIFpvbmVCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+IHJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPigKICAgICAgUiBjYWxsYmFjayhUMSBhcmcxLCBUMiBhcmcyKSk7CgogIC8qKgogICAqICBSZWdpc3RlcnMgdGhlIHByb3ZpZGVkIFtjYWxsYmFja10gYW5kIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwKICAgKiAgZXhlY3V0ZSBpbiB0aGlzIHpvbmUuCiAgICoKICAgKiAgRXF1aXZhbGVudCB0bzoKICAgKgogICAqICAgICAgWm9uZUNhbGxiYWNrIHJlZ2lzdGVyZWQgPSB0aGlzLnJlZ2lzdGVyQ2FsbGJhY2soY2FsbGJhY2spOwogICAqICAgICAgcmV0dXJuICgpID0+IHRoaXMucnVuKHJlZ2lzdGVyZWQpOwogICAqCiAgICovCiAgWm9uZUNhbGxiYWNrPFI+IGJpbmRDYWxsYmFjazxSPihSIGNhbGxiYWNrKCkpOwoKICAvKioKICAgKiAgUmVnaXN0ZXJzIHRoZSBwcm92aWRlZCBbY2FsbGJhY2tdIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsCiAgICogIGV4ZWN1dGUgaW4gdGhpcyB6b25lLgogICAqCiAgICogIEVxdWl2YWxlbnQgdG86CiAgICoKICAgKiAgICAgIFpvbmVDYWxsYmFjayByZWdpc3RlcmVkID0gdGhpcy5yZWdpc3RlclVuYXJ5Q2FsbGJhY2soY2FsbGJhY2spOwogICAqICAgICAgcmV0dXJuIChhcmcpID0+IHRoaW4ucnVuVW5hcnkocmVnaXN0ZXJlZCwgYXJnKTsKICAgKi8KICBab25lVW5hcnlDYWxsYmFjazxSLCBUPiBiaW5kVW5hcnlDYWxsYmFjazxSLCBUPihSIGNhbGxiYWNrKFQgYXJndW1lbnQpKTsKCiAgLyoqCiAgICogIFJlZ2lzdGVycyB0aGUgcHJvdmlkZWQgW2NhbGxiYWNrXSBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbAogICAqICBleGVjdXRlIGluIHRoaXMgem9uZS4KICAgKgogICAqICBFcXVpdmFsZW50IHRvOgogICAqCiAgICogICAgICBab25lQ2FsbGJhY2sgcmVnaXN0ZXJlZCA9IHJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2soY2FsbGJhY2spOwogICAqICAgICAgcmV0dXJuIChhcmcxLCBhcmcyKSA9PiB0aGluLnJ1bkJpbmFyeShyZWdpc3RlcmVkLCBhcmcxLCBhcmcyKTsKICAgKi8KICBab25lQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPiBiaW5kQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPigKICAgICAgUiBjYWxsYmFjayhUMSBhcmd1bWVudDEsIFQyIGFyZ3VtZW50MikpOwoKICAvKioKICAgKiBSZWdpc3RlcnMgdGhlIHByb3ZpZGVkIFtjYWxsYmFja10gYW5kIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwKICAgKiBleGVjdXRlIGluIHRoaXMgem9uZS4KICAgKgogICAqIFdoZW4gdGhlIGZ1bmN0aW9uIGV4ZWN1dGVzLCBlcnJvcnMgYXJlIGNhdWdodCBhbmQgdHJlYXRlZCBhcyB1bmNhdWdodAogICAqIGVycm9ycy4KICAgKgogICAqIEVxdWl2YWxlbnQgdG86CiAgICoKICAgKiAgICAgWm9uZUNhbGxiYWNrIHJlZ2lzdGVyZWQgPSB0aGlzLnJlZ2lzdGVyQ2FsbGJhY2soY2FsbGJhY2spOwogICAqICAgICByZXR1cm4gKCkgPT4gdGhpcy5ydW5HdWFyZGVkKHJlZ2lzdGVyZWQpOwogICAqCiAgICovCiAgdm9pZCBGdW5jdGlvbigpIGJpbmRDYWxsYmFja0d1YXJkZWQodm9pZCBjYWxsYmFjaygpKTsKCiAgLyoqCiAgICogUmVnaXN0ZXJzIHRoZSBwcm92aWRlZCBbY2FsbGJhY2tdIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsCiAgICogZXhlY3V0ZSBpbiB0aGlzIHpvbmUuCiAgICoKICAgKiBXaGVuIHRoZSBmdW5jdGlvbiBleGVjdXRlcywgZXJyb3JzIGFyZSBjYXVnaHQgYW5kIHRyZWF0ZWQgYXMgdW5jYXVnaHQKICAgKiBlcnJvcnMuCiAgICoKICAgKiBFcXVpdmFsZW50IHRvOgogICAqCiAgICogICAgIFpvbmVDYWxsYmFjayByZWdpc3RlcmVkID0gdGhpcy5yZWdpc3RlclVuYXJ5Q2FsbGJhY2soY2FsbGJhY2spOwogICAqICAgICByZXR1cm4gKGFyZykgPT4gdGhpcy5ydW5VbmFyeUd1YXJkZWQocmVnaXN0ZXJlZCwgYXJnKTsKICAgKi8KICB2b2lkIEZ1bmN0aW9uKFQpIGJpbmRVbmFyeUNhbGxiYWNrR3VhcmRlZDxUPih2b2lkIGNhbGxiYWNrKFQgYXJndW1lbnQpKTsKCiAgLyoqCiAgICogIFJlZ2lzdGVycyB0aGUgcHJvdmlkZWQgW2NhbGxiYWNrXSBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbAogICAqICBleGVjdXRlIGluIHRoaXMgem9uZS4KICAgKgogICAqICBFcXVpdmFsZW50IHRvOgogICAqCiAgICogICAgICBab25lQ2FsbGJhY2sgcmVnaXN0ZXJlZCA9IHJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2soY2FsbGJhY2spOwogICAqICAgICAgcmV0dXJuIChhcmcxLCBhcmcyKSA9PiB0aGlzLnJ1bkJpbmFyeUd1YXJkZWQocmVnaXN0ZXJlZCwgYXJnMSwgYXJnMik7CiAgICovCiAgdm9pZCBGdW5jdGlvbihUMSwgVDIpIGJpbmRCaW5hcnlDYWxsYmFja0d1YXJkZWQ8VDEsIFQyPigKICAgICAgdm9pZCBjYWxsYmFjayhUMSBhcmd1bWVudDEsIFQyIGFyZ3VtZW50MikpOwoKICAvKioKICAgKiBJbnRlcmNlcHRzIGVycm9ycyB3aGVuIGFkZGVkIHByb2dyYW1tYXRpY2FsbHkgdG8gYSBgRnV0dXJlYCBvciBgU3RyZWFtYC4KICAgKgogICAqIFdoZW4gY2FsbGluZyBbQ29tcGxldGVyLmNvbXBsZXRlRXJyb3JdLCBbU3RyZWFtQ29udHJvbGxlci5hZGRFcnJvcl0sCiAgICogb3Igc29tZSBbRnV0dXJlXSBjb25zdHJ1Y3RvcnMsIHRoZSBjdXJyZW50IHpvbmUgaXMgYWxsb3dlZCB0byBpbnRlcmNlcHQKICAgKiBhbmQgcmVwbGFjZSB0aGUgZXJyb3IuCiAgICoKICAgKiBGdXR1cmUgY29uc3RydWN0b3JzIGludm9rZSB0aGlzIGZ1bmN0aW9uIHdoZW4gdGhlIGVycm9yIGlzIHJlY2VpdmVkCiAgICogZGlyZWN0bHksIGZvciBleGFtcGxlIHdpdGggW0Z1dHVyZS5lcnJvcl0sIG9yIHdoZW4gdGhlIGVycm9yIGlzIGNhdWdodAogICAqIHN5bmNocm9ub3VzbHksIGZvciBleGFtcGxlIHdpdGggW0Z1dHVyZS5zeW5jXS4KICAgKgogICAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGFuIGVycm9yIGlzIG9ubHkgc2VudCB0aHJvdWdoIFtlcnJvckNhbGxiYWNrXQogICAqIG9uY2UuIExpYnJhcmllcyB0aGF0IHVzZSBpbnRlcm1lZGlhdGUgY29udHJvbGxlcnMgb3IgY29tcGxldGVycyBtaWdodAogICAqIGVuZCB1cCBpbnZva2luZyBbZXJyb3JDYWxsYmFja10gbXVsdGlwbGUgdGltZXMuCiAgICoKICAgKiBSZXR1cm5zIGBudWxsYCBpZiBubyByZXBsYWNlbWVudCBpcyBkZXNpcmVkLiBPdGhlcndpc2UgcmV0dXJucyBhbiBpbnN0YW5jZQogICAqIG9mIFtBc3luY0Vycm9yXSBob2xkaW5nIHRoZSBuZXcgcGFpciBvZiBlcnJvciBhbmQgc3RhY2sgdHJhY2UuCiAgICoKICAgKiBBbHRob3VnaCBub3QgcmVjb21tZW5kZWQsIHRoZSByZXR1cm5lZCBpbnN0YW5jZSBtYXkgaGF2ZSBpdHMgYGVycm9yYCBtZW1iZXIKICAgKiAoW0FzeW5jRXJyb3IuZXJyb3JdKSBiZSBlcXVhbCB0byBgbnVsbGAgaW4gd2hpY2ggY2FzZSB0aGUgZXJyb3Igc2hvdWxkIGJlCiAgICogcmVwbGFjZWQgYnkgYSBbTnVsbFRocm93bkVycm9yXS4KICAgKgogICAqIEN1c3RvbSB6b25lcyBtYXkgaW50ZXJjZXB0IHRoaXMgb3BlcmF0aW9uLgogICAqCiAgICogSW1wbGVtZW50YXRpb25zIG9mIGEgbmV3IGFzeW5jaHJvbm91cyBwcmltaXRpdmUgdGhhdCBjb252ZXJ0cyBzeW5jaHJvbm91cwogICAqIGVycm9ycyB0byBhc3luY2hyb25vdXMgZXJyb3JzIHJhcmVseSBuZWVkIHRvIGludm9rZSBbZXJyb3JDYWxsYmFja10sIHNpbmNlCiAgICogZXJyb3JzIGFyZSB1c3VhbGx5IHJlcG9ydGVkIHRocm91Z2ggZnV0dXJlIGNvbXBsZXRlcnMgb3Igc3RyZWFtCiAgICogY29udHJvbGxlcnMuCiAgICovCiAgQXN5bmNFcnJvciBlcnJvckNhbGxiYWNrKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKTsKCiAgLyoqCiAgICogUnVucyBbY2FsbGJhY2tdIGFzeW5jaHJvbm91c2x5IGluIHRoaXMgem9uZS4KICAgKgogICAqIFRoZSBnbG9iYWwgYHNjaGVkdWxlTWljcm90YXNrYCBkZWxlZ2F0ZXMgdG8gdGhlIGN1cnJlbnQgem9uZSdzCiAgICogW3NjaGVkdWxlTWljcm90YXNrXS4gVGhlIHJvb3Qgem9uZSdzIGltcGxlbWVudGF0aW9uIGludGVyYWN0cyB3aXRoIHRoZQogICAqIHVuZGVybHlpbmcgc3lzdGVtIHRvIHNjaGVkdWxlIHRoZSBnaXZlbiBjYWxsYmFjayBhcyBhIG1pY3JvdGFzay4KICAgKgogICAqIEN1c3RvbSB6b25lcyBtYXkgaW50ZXJjZXB0IHRoaXMgb3BlcmF0aW9uIChmb3IgZXhhbXBsZSB0byB3cmFwIHRoZSBnaXZlbgogICAqIFtjYWxsYmFja10pLgogICAqLwogIHZvaWQgc2NoZWR1bGVNaWNyb3Rhc2sodm9pZCBjYWxsYmFjaygpKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFRpbWVyIHdoZXJlIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCBpbiB0aGlzIHpvbmUuCiAgICovCiAgVGltZXIgY3JlYXRlVGltZXIoRHVyYXRpb24gZHVyYXRpb24sIHZvaWQgY2FsbGJhY2soKSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBwZXJpb2RpYyBUaW1lciB3aGVyZSB0aGUgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgaW4gdGhpcyB6b25lLgogICAqLwogIFRpbWVyIGNyZWF0ZVBlcmlvZGljVGltZXIoRHVyYXRpb24gcGVyaW9kLCB2b2lkIGNhbGxiYWNrKFRpbWVyIHRpbWVyKSk7CgogIC8qKgogICAqIFByaW50cyB0aGUgZ2l2ZW4gW2xpbmVdLgogICAqCiAgICogVGhlIGdsb2JhbCBgcHJpbnRgIGZ1bmN0aW9uIGRlbGVnYXRlcyB0byB0aGUgY3VycmVudCB6b25lJ3MgW3ByaW50XQogICAqIGZ1bmN0aW9uIHdoaWNoIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGludGVyY2VwdCBwcmludGluZy4KICAgKgogICAqIEV4YW1wbGU6CiAgICogYGBgCiAgICogaW1wb3J0ICdkYXJ0OmFzeW5jJzsKICAgKgogICAqIG1haW4oKSB7CiAgICogICBydW5ab25lZCgoKSB7CiAgICogICAgIC8vIEVuZHMgdXAgcHJpbnRpbmc6ICJJbnRlcmNlcHRlZDogaW4gem9uZSIuCiAgICogICAgIHByaW50KCJpbiB6b25lIik7CiAgICogICB9LCB6b25lU3BlY2lmaWNhdGlvbjogbmV3IFpvbmVTcGVjaWZpY2F0aW9uKAogICAqICAgICAgIHByaW50OiAoWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsIFN0cmluZyBsaW5lKSB7CiAgICogICAgIHBhcmVudC5wcmludCh6b25lLCAiSW50ZXJjZXB0ZWQ6ICRsaW5lIik7CiAgICogICB9KSk7CiAgICogfQogICAqIGBgYAogICAqLwogIHZvaWQgcHJpbnQoU3RyaW5nIGxpbmUpOwoKICAvKioKICAgKiBDYWxsIHRvIGVudGVyIHRoZSBab25lLgogICAqCiAgICogVGhlIHByZXZpb3VzIGN1cnJlbnQgem9uZSBpcyByZXR1cm5lZC4KICAgKi8KICBzdGF0aWMgWm9uZSBfZW50ZXIoWm9uZSB6b25lKSB7CiAgICBhc3NlcnQoem9uZSAhPSBudWxsKTsKICAgIGFzc2VydCghaWRlbnRpY2FsKHpvbmUsIF9jdXJyZW50KSk7CiAgICBab25lIHByZXZpb3VzID0gX2N1cnJlbnQ7CiAgICBfY3VycmVudCA9IHpvbmU7CiAgICByZXR1cm4gcHJldmlvdXM7CiAgfQoKICAvKioKICAgKiBDYWxsIHRvIGxlYXZlIHRoZSBab25lLgogICAqCiAgICogVGhlIHByZXZpb3VzIFpvbmUgbXVzdCBiZSBwcm92aWRlZCBhcyBgcHJldmlvdXNgLgogICAqLwogIHN0YXRpYyB2b2lkIF9sZWF2ZShab25lIHByZXZpb3VzKSB7CiAgICBhc3NlcnQocHJldmlvdXMgIT0gbnVsbCk7CiAgICBab25lLl9jdXJyZW50ID0gcHJldmlvdXM7CiAgfQoKICAvKioKICAgKiBSZXRyaWV2ZXMgdGhlIHpvbmUtdmFsdWUgYXNzb2NpYXRlZCB3aXRoIFtrZXldLgogICAqCiAgICogSWYgdGhpcyB6b25lIGRvZXMgbm90IGNvbnRhaW4gdGhlIHZhbHVlIGxvb2tzIHVwIHRoZSBzYW1lIGtleSBpbiB0aGUKICAgKiBwYXJlbnQgem9uZS4gSWYgdGhlIFtrZXldIGlzIG5vdCBmb3VuZCByZXR1cm5zIGBudWxsYC4KICAgKgogICAqIEFueSBvYmplY3QgY2FuIGJlIHVzZWQgYXMga2V5LCBhcyBsb25nIGFzIGl0IGhhcyBjb21wYXRpYmxlIGBvcGVyYXRvciA9PWAKICAgKiBhbmQgYGhhc2hDb2RlYCBpbXBsZW1lbnRhdGlvbnMuCiAgICogQnkgY29udHJvbGxpbmcgYWNjZXNzIHRvIHRoZSBrZXksIGEgem9uZSBjYW4gZ3JhbnQgb3IgZGVueSBhY2Nlc3MgdG8gdGhlCiAgICogem9uZSB2YWx1ZS4KICAgKi8KICBvcGVyYXRvciBbXShPYmplY3Qga2V5KTsKfQoKWm9uZURlbGVnYXRlIF9wYXJlbnREZWxlZ2F0ZShfWm9uZSB6b25lKSB7CiAgaWYgKHpvbmUucGFyZW50ID09IG51bGwpIHJldHVybiBudWxsOwogIHJldHVybiB6b25lLnBhcmVudC5fZGVsZWdhdGU7Cn0KCmNsYXNzIF9ab25lRGVsZWdhdGUgaW1wbGVtZW50cyBab25lRGVsZWdhdGUgewogIGZpbmFsIF9ab25lIF9kZWxlZ2F0aW9uVGFyZ2V0OwoKICBfWm9uZURlbGVnYXRlKHRoaXMuX2RlbGVnYXRpb25UYXJnZXQpOwoKICB2b2lkIGhhbmRsZVVuY2F1Z2h0RXJyb3IoWm9uZSB6b25lLCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSBfZGVsZWdhdGlvblRhcmdldC5faGFuZGxlVW5jYXVnaHRFcnJvcjsKICAgIF9ab25lIGltcGxab25lID0gaW1wbGVtZW50YXRpb24uem9uZTsKICAgIEhhbmRsZVVuY2F1Z2h0RXJyb3JIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKAogICAgICAgIGltcGxab25lLCBfcGFyZW50RGVsZWdhdGUoaW1wbFpvbmUpLCB6b25lLCBlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICBSIHJ1bjxSPihab25lIHpvbmUsIFIgZigpKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSBfZGVsZWdhdGlvblRhcmdldC5fcnVuOwogICAgX1pvbmUgaW1wbFpvbmUgPSBpbXBsZW1lbnRhdGlvbi56b25lOwogICAgUnVuSGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsWm9uZSwgX3BhcmVudERlbGVnYXRlKGltcGxab25lKSwgem9uZSwgZik7CiAgfQoKICBSIHJ1blVuYXJ5PFIsIFQ+KFpvbmUgem9uZSwgUiBmKFQgYXJnKSwgVCBhcmcpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IF9kZWxlZ2F0aW9uVGFyZ2V0Ll9ydW5VbmFyeTsKICAgIF9ab25lIGltcGxab25lID0gaW1wbGVtZW50YXRpb24uem9uZTsKICAgIFJ1blVuYXJ5SGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsWm9uZSwgX3BhcmVudERlbGVnYXRlKGltcGxab25lKSwgem9uZSwgZiwgYXJnKTsKICB9CgogIFIgcnVuQmluYXJ5PFIsIFQxLCBUMj4oWm9uZSB6b25lLCBSIGYoVDEgYXJnMSwgVDIgYXJnMiksIFQxIGFyZzEsIFQyIGFyZzIpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IF9kZWxlZ2F0aW9uVGFyZ2V0Ll9ydW5CaW5hcnk7CiAgICBfWm9uZSBpbXBsWm9uZSA9IGltcGxlbWVudGF0aW9uLnpvbmU7CiAgICBSdW5CaW5hcnlIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxab25lLCBfcGFyZW50RGVsZWdhdGUoaW1wbFpvbmUpLCB6b25lLCBmLCBhcmcxLCBhcmcyKTsKICB9CgogIFpvbmVDYWxsYmFjazxSPiByZWdpc3RlckNhbGxiYWNrPFI+KFpvbmUgem9uZSwgUiBmKCkpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IF9kZWxlZ2F0aW9uVGFyZ2V0Ll9yZWdpc3RlckNhbGxiYWNrOwogICAgX1pvbmUgaW1wbFpvbmUgPSBpbXBsZW1lbnRhdGlvbi56b25lOwogICAgUmVnaXN0ZXJDYWxsYmFja0hhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbFpvbmUsIF9wYXJlbnREZWxlZ2F0ZShpbXBsWm9uZSksIHpvbmUsIGYpOwogIH0KCiAgWm9uZVVuYXJ5Q2FsbGJhY2s8UiwgVD4gcmVnaXN0ZXJVbmFyeUNhbGxiYWNrPFIsIFQ+KFpvbmUgem9uZSwgUiBmKFQgYXJnKSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gX2RlbGVnYXRpb25UYXJnZXQuX3JlZ2lzdGVyVW5hcnlDYWxsYmFjazsKICAgIF9ab25lIGltcGxab25lID0gaW1wbGVtZW50YXRpb24uem9uZTsKICAgIFJlZ2lzdGVyVW5hcnlDYWxsYmFja0hhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbFpvbmUsIF9wYXJlbnREZWxlZ2F0ZShpbXBsWm9uZSksIHpvbmUsIGYpOwogIH0KCiAgWm9uZUJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4gcmVnaXN0ZXJCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+KAogICAgICBab25lIHpvbmUsIFIgZihUMSBhcmcxLCBUMiBhcmcyKSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gX2RlbGVnYXRpb25UYXJnZXQuX3JlZ2lzdGVyQmluYXJ5Q2FsbGJhY2s7CiAgICBfWm9uZSBpbXBsWm9uZSA9IGltcGxlbWVudGF0aW9uLnpvbmU7CiAgICBSZWdpc3RlckJpbmFyeUNhbGxiYWNrSGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsWm9uZSwgX3BhcmVudERlbGVnYXRlKGltcGxab25lKSwgem9uZSwgZik7CiAgfQoKICBBc3luY0Vycm9yIGVycm9yQ2FsbGJhY2soWm9uZSB6b25lLCBPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gX2RlbGVnYXRpb25UYXJnZXQuX2Vycm9yQ2FsbGJhY2s7CiAgICBfWm9uZSBpbXBsWm9uZSA9IGltcGxlbWVudGF0aW9uLnpvbmU7CiAgICBpZiAoaWRlbnRpY2FsKGltcGxab25lLCBfcm9vdFpvbmUpKSByZXR1cm4gbnVsbDsKICAgIEVycm9yQ2FsbGJhY2tIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKAogICAgICAgIGltcGxab25lLCBfcGFyZW50RGVsZWdhdGUoaW1wbFpvbmUpLCB6b25lLCBlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICB2b2lkIHNjaGVkdWxlTWljcm90YXNrKFpvbmUgem9uZSwgZigpKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSBfZGVsZWdhdGlvblRhcmdldC5fc2NoZWR1bGVNaWNyb3Rhc2s7CiAgICBfWm9uZSBpbXBsWm9uZSA9IGltcGxlbWVudGF0aW9uLnpvbmU7CiAgICBTY2hlZHVsZU1pY3JvdGFza0hhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgaGFuZGxlcihpbXBsWm9uZSwgX3BhcmVudERlbGVnYXRlKGltcGxab25lKSwgem9uZSwgZik7CiAgfQoKICBUaW1lciBjcmVhdGVUaW1lcihab25lIHpvbmUsIER1cmF0aW9uIGR1cmF0aW9uLCB2b2lkIGYoKSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gX2RlbGVnYXRpb25UYXJnZXQuX2NyZWF0ZVRpbWVyOwogICAgX1pvbmUgaW1wbFpvbmUgPSBpbXBsZW1lbnRhdGlvbi56b25lOwogICAgQ3JlYXRlVGltZXJIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxab25lLCBfcGFyZW50RGVsZWdhdGUoaW1wbFpvbmUpLCB6b25lLCBkdXJhdGlvbiwgZik7CiAgfQoKICBUaW1lciBjcmVhdGVQZXJpb2RpY1RpbWVyKFpvbmUgem9uZSwgRHVyYXRpb24gcGVyaW9kLCB2b2lkIGYoVGltZXIgdGltZXIpKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSBfZGVsZWdhdGlvblRhcmdldC5fY3JlYXRlUGVyaW9kaWNUaW1lcjsKICAgIF9ab25lIGltcGxab25lID0gaW1wbGVtZW50YXRpb24uem9uZTsKICAgIENyZWF0ZVBlcmlvZGljVGltZXJIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxab25lLCBfcGFyZW50RGVsZWdhdGUoaW1wbFpvbmUpLCB6b25lLCBwZXJpb2QsIGYpOwogIH0KCiAgdm9pZCBwcmludChab25lIHpvbmUsIFN0cmluZyBsaW5lKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSBfZGVsZWdhdGlvblRhcmdldC5fcHJpbnQ7CiAgICBfWm9uZSBpbXBsWm9uZSA9IGltcGxlbWVudGF0aW9uLnpvbmU7CiAgICBQcmludEhhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgaGFuZGxlcihpbXBsWm9uZSwgX3BhcmVudERlbGVnYXRlKGltcGxab25lKSwgem9uZSwgbGluZSk7CiAgfQoKICBab25lIGZvcmsoWm9uZSB6b25lLCBab25lU3BlY2lmaWNhdGlvbiBzcGVjaWZpY2F0aW9uLCBNYXAgem9uZVZhbHVlcykgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gX2RlbGVnYXRpb25UYXJnZXQuX2Zvcms7CiAgICBfWm9uZSBpbXBsWm9uZSA9IGltcGxlbWVudGF0aW9uLnpvbmU7CiAgICBGb3JrSGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcigKICAgICAgICBpbXBsWm9uZSwgX3BhcmVudERlbGVnYXRlKGltcGxab25lKSwgem9uZSwgc3BlY2lmaWNhdGlvbiwgem9uZVZhbHVlcyk7CiAgfQp9CgovKioKICogQmFzZSBjbGFzcyBmb3IgWm9uZSBpbXBsZW1lbnRhdGlvbnMuCiAqLwphYnN0cmFjdCBjbGFzcyBfWm9uZSBpbXBsZW1lbnRzIFpvbmUgewogIGNvbnN0IF9ab25lKCk7CgogIC8vIFRPRE8oZmxvaXRzY2gpOiB0aGUgdHlwZXMgb2YgdGhlIGBfWm9uZUZ1bmN0aW9uYHMgc2hvdWxkIGhhdmUgYSB0eXBlIGZvcgogIC8vIGFsbCBmaWVsZHMuCiAgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4gZ2V0IF9ydW47CiAgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4gZ2V0IF9ydW5VbmFyeTsKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBnZXQgX3J1bkJpbmFyeTsKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBnZXQgX3JlZ2lzdGVyQ2FsbGJhY2s7CiAgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4gZ2V0IF9yZWdpc3RlclVuYXJ5Q2FsbGJhY2s7CiAgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4gZ2V0IF9yZWdpc3RlckJpbmFyeUNhbGxiYWNrOwogIF9ab25lRnVuY3Rpb248RXJyb3JDYWxsYmFja0hhbmRsZXI+IGdldCBfZXJyb3JDYWxsYmFjazsKICBfWm9uZUZ1bmN0aW9uPFNjaGVkdWxlTWljcm90YXNrSGFuZGxlcj4gZ2V0IF9zY2hlZHVsZU1pY3JvdGFzazsKICBfWm9uZUZ1bmN0aW9uPENyZWF0ZVRpbWVySGFuZGxlcj4gZ2V0IF9jcmVhdGVUaW1lcjsKICBfWm9uZUZ1bmN0aW9uPENyZWF0ZVBlcmlvZGljVGltZXJIYW5kbGVyPiBnZXQgX2NyZWF0ZVBlcmlvZGljVGltZXI7CiAgX1pvbmVGdW5jdGlvbjxQcmludEhhbmRsZXI+IGdldCBfcHJpbnQ7CiAgX1pvbmVGdW5jdGlvbjxGb3JrSGFuZGxlcj4gZ2V0IF9mb3JrOwogIF9ab25lRnVuY3Rpb248SGFuZGxlVW5jYXVnaHRFcnJvckhhbmRsZXI+IGdldCBfaGFuZGxlVW5jYXVnaHRFcnJvcjsKICBfWm9uZSBnZXQgcGFyZW50OwogIFpvbmVEZWxlZ2F0ZSBnZXQgX2RlbGVnYXRlOwogIE1hcCBnZXQgX21hcDsKCiAgYm9vbCBpblNhbWVFcnJvclpvbmUoWm9uZSBvdGhlclpvbmUpIHsKICAgIHJldHVybiBpZGVudGljYWwodGhpcywgb3RoZXJab25lKSB8fAogICAgICAgIGlkZW50aWNhbChlcnJvclpvbmUsIG90aGVyWm9uZS5lcnJvclpvbmUpOwogIH0KfQoKY2xhc3MgX0N1c3RvbVpvbmUgZXh0ZW5kcyBfWm9uZSB7CiAgLy8gVGhlIGFjdHVhbCB6b25lIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiBlYWNoIG9mIHRoZXNlCiAgLy8gaW5oZXJpdGFibGUgem9uZSBmdW5jdGlvbnMuCiAgLy8gVE9ETyhmbG9pdHNjaCk6IHRoZSB0eXBlcyBvZiB0aGUgYF9ab25lRnVuY3Rpb25gcyBzaG91bGQgaGF2ZSBhIHR5cGUgZm9yCiAgLy8gYWxsIGZpZWxkcy4KICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBfcnVuOwogIF9ab25lRnVuY3Rpb248RnVuY3Rpb24+IF9ydW5VbmFyeTsKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBfcnVuQmluYXJ5OwogIF9ab25lRnVuY3Rpb248RnVuY3Rpb24+IF9yZWdpc3RlckNhbGxiYWNrOwogIF9ab25lRnVuY3Rpb248RnVuY3Rpb24+IF9yZWdpc3RlclVuYXJ5Q2FsbGJhY2s7CiAgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4gX3JlZ2lzdGVyQmluYXJ5Q2FsbGJhY2s7CiAgX1pvbmVGdW5jdGlvbjxFcnJvckNhbGxiYWNrSGFuZGxlcj4gX2Vycm9yQ2FsbGJhY2s7CiAgX1pvbmVGdW5jdGlvbjxTY2hlZHVsZU1pY3JvdGFza0hhbmRsZXI+IF9zY2hlZHVsZU1pY3JvdGFzazsKICBfWm9uZUZ1bmN0aW9uPENyZWF0ZVRpbWVySGFuZGxlcj4gX2NyZWF0ZVRpbWVyOwogIF9ab25lRnVuY3Rpb248Q3JlYXRlUGVyaW9kaWNUaW1lckhhbmRsZXI+IF9jcmVhdGVQZXJpb2RpY1RpbWVyOwogIF9ab25lRnVuY3Rpb248UHJpbnRIYW5kbGVyPiBfcHJpbnQ7CiAgX1pvbmVGdW5jdGlvbjxGb3JrSGFuZGxlcj4gX2Zvcms7CiAgX1pvbmVGdW5jdGlvbjxIYW5kbGVVbmNhdWdodEVycm9ySGFuZGxlcj4gX2hhbmRsZVVuY2F1Z2h0RXJyb3I7CgogIC8vIEEgY2FjaGVkIGRlbGVnYXRlIHRvIHRoaXMgem9uZS4KICBab25lRGVsZWdhdGUgX2RlbGVnYXRlQ2FjaGU7CgogIC8vLyBUaGUgcGFyZW50IHpvbmUuCiAgZmluYWwgX1pvbmUgcGFyZW50OwoKICAvLy8gVGhlIHpvbmUncyBzY29wZWQgdmFsdWUgZGVjbGFyYXRpb24gbWFwLgogIC8vLwogIC8vLyBUaGlzIGlzIGFsd2F5cyBhIFtIYXNoTWFwXS4KICBmaW5hbCBNYXAgX21hcDsKCiAgWm9uZURlbGVnYXRlIGdldCBfZGVsZWdhdGUgewogICAgaWYgKF9kZWxlZ2F0ZUNhY2hlICE9IG51bGwpIHJldHVybiBfZGVsZWdhdGVDYWNoZTsKICAgIF9kZWxlZ2F0ZUNhY2hlID0gbmV3IF9ab25lRGVsZWdhdGUodGhpcyk7CiAgICByZXR1cm4gX2RlbGVnYXRlQ2FjaGU7CiAgfQoKICBfQ3VzdG9tWm9uZSh0aGlzLnBhcmVudCwgWm9uZVNwZWNpZmljYXRpb24gc3BlY2lmaWNhdGlvbiwgdGhpcy5fbWFwKSB7CiAgICAvLyBUaGUgcm9vdCB6b25lIHdpbGwgaGF2ZSBpbXBsZW1lbnRhdGlvbnMgb2YgYWxsIHBhcnRzIG9mIHRoZQogICAgLy8gc3BlY2lmaWNhdGlvbiwgc28gaXQgd2lsbCBuZXZlciB0cnkgdG8gYWNjZXNzIHRoZSAobnVsbCkgcGFyZW50LgogICAgLy8gQWxsIG90aGVyIHpvbmVzIGhhdmUgYSBub24tbnVsbCBwYXJlbnQuCiAgICBfcnVuID0gKHNwZWNpZmljYXRpb24ucnVuICE9IG51bGwpCiAgICAgICAgPyBuZXcgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4odGhpcywgc3BlY2lmaWNhdGlvbi5ydW4pCiAgICAgICAgOiBwYXJlbnQuX3J1bjsKICAgIF9ydW5VbmFyeSA9IChzcGVjaWZpY2F0aW9uLnJ1blVuYXJ5ICE9IG51bGwpCiAgICAgICAgPyBuZXcgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4odGhpcywgc3BlY2lmaWNhdGlvbi5ydW5VbmFyeSkKICAgICAgICA6IHBhcmVudC5fcnVuVW5hcnk7CiAgICBfcnVuQmluYXJ5ID0gKHNwZWNpZmljYXRpb24ucnVuQmluYXJ5ICE9IG51bGwpCiAgICAgICAgPyBuZXcgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4odGhpcywgc3BlY2lmaWNhdGlvbi5ydW5CaW5hcnkpCiAgICAgICAgOiBwYXJlbnQuX3J1bkJpbmFyeTsKICAgIF9yZWdpc3RlckNhbGxiYWNrID0gKHNwZWNpZmljYXRpb24ucmVnaXN0ZXJDYWxsYmFjayAhPSBudWxsKQogICAgICAgID8gbmV3IF9ab25lRnVuY3Rpb248RnVuY3Rpb24+KHRoaXMsIHNwZWNpZmljYXRpb24ucmVnaXN0ZXJDYWxsYmFjaykKICAgICAgICA6IHBhcmVudC5fcmVnaXN0ZXJDYWxsYmFjazsKICAgIF9yZWdpc3RlclVuYXJ5Q2FsbGJhY2sgPSAoc3BlY2lmaWNhdGlvbi5yZWdpc3RlclVuYXJ5Q2FsbGJhY2sgIT0gbnVsbCkKICAgICAgICA/IG5ldyBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPih0aGlzLCBzcGVjaWZpY2F0aW9uLnJlZ2lzdGVyVW5hcnlDYWxsYmFjaykKICAgICAgICA6IHBhcmVudC5fcmVnaXN0ZXJVbmFyeUNhbGxiYWNrOwogICAgX3JlZ2lzdGVyQmluYXJ5Q2FsbGJhY2sgPSAoc3BlY2lmaWNhdGlvbi5yZWdpc3RlckJpbmFyeUNhbGxiYWNrICE9IG51bGwpCiAgICAgICAgPyBuZXcgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4oCiAgICAgICAgICAgIHRoaXMsIHNwZWNpZmljYXRpb24ucmVnaXN0ZXJCaW5hcnlDYWxsYmFjaykKICAgICAgICA6IHBhcmVudC5fcmVnaXN0ZXJCaW5hcnlDYWxsYmFjazsKICAgIF9lcnJvckNhbGxiYWNrID0gKHNwZWNpZmljYXRpb24uZXJyb3JDYWxsYmFjayAhPSBudWxsKQogICAgICAgID8gbmV3IF9ab25lRnVuY3Rpb248RXJyb3JDYWxsYmFja0hhbmRsZXI+KAogICAgICAgICAgICB0aGlzLCBzcGVjaWZpY2F0aW9uLmVycm9yQ2FsbGJhY2spCiAgICAgICAgOiBwYXJlbnQuX2Vycm9yQ2FsbGJhY2s7CiAgICBfc2NoZWR1bGVNaWNyb3Rhc2sgPSAoc3BlY2lmaWNhdGlvbi5zY2hlZHVsZU1pY3JvdGFzayAhPSBudWxsKQogICAgICAgID8gbmV3IF9ab25lRnVuY3Rpb248U2NoZWR1bGVNaWNyb3Rhc2tIYW5kbGVyPigKICAgICAgICAgICAgdGhpcywgc3BlY2lmaWNhdGlvbi5zY2hlZHVsZU1pY3JvdGFzaykKICAgICAgICA6IHBhcmVudC5fc2NoZWR1bGVNaWNyb3Rhc2s7CiAgICBfY3JlYXRlVGltZXIgPSAoc3BlY2lmaWNhdGlvbi5jcmVhdGVUaW1lciAhPSBudWxsKQogICAgICAgID8gbmV3IF9ab25lRnVuY3Rpb248Q3JlYXRlVGltZXJIYW5kbGVyPih0aGlzLCBzcGVjaWZpY2F0aW9uLmNyZWF0ZVRpbWVyKQogICAgICAgIDogcGFyZW50Ll9jcmVhdGVUaW1lcjsKICAgIF9jcmVhdGVQZXJpb2RpY1RpbWVyID0gKHNwZWNpZmljYXRpb24uY3JlYXRlUGVyaW9kaWNUaW1lciAhPSBudWxsKQogICAgICAgID8gbmV3IF9ab25lRnVuY3Rpb248Q3JlYXRlUGVyaW9kaWNUaW1lckhhbmRsZXI+KAogICAgICAgICAgICB0aGlzLCBzcGVjaWZpY2F0aW9uLmNyZWF0ZVBlcmlvZGljVGltZXIpCiAgICAgICAgOiBwYXJlbnQuX2NyZWF0ZVBlcmlvZGljVGltZXI7CiAgICBfcHJpbnQgPSAoc3BlY2lmaWNhdGlvbi5wcmludCAhPSBudWxsKQogICAgICAgID8gbmV3IF9ab25lRnVuY3Rpb248UHJpbnRIYW5kbGVyPih0aGlzLCBzcGVjaWZpY2F0aW9uLnByaW50KQogICAgICAgIDogcGFyZW50Ll9wcmludDsKICAgIF9mb3JrID0gKHNwZWNpZmljYXRpb24uZm9yayAhPSBudWxsKQogICAgICAgID8gbmV3IF9ab25lRnVuY3Rpb248Rm9ya0hhbmRsZXI+KHRoaXMsIHNwZWNpZmljYXRpb24uZm9yaykKICAgICAgICA6IHBhcmVudC5fZm9yazsKICAgIF9oYW5kbGVVbmNhdWdodEVycm9yID0gKHNwZWNpZmljYXRpb24uaGFuZGxlVW5jYXVnaHRFcnJvciAhPSBudWxsKQogICAgICAgID8gbmV3IF9ab25lRnVuY3Rpb248SGFuZGxlVW5jYXVnaHRFcnJvckhhbmRsZXI+KAogICAgICAgICAgICB0aGlzLCBzcGVjaWZpY2F0aW9uLmhhbmRsZVVuY2F1Z2h0RXJyb3IpCiAgICAgICAgOiBwYXJlbnQuX2hhbmRsZVVuY2F1Z2h0RXJyb3I7CiAgfQoKICAvKioKICAgKiBUaGUgY2xvc2VzdCBlcnJvci1oYW5kbGluZyB6b25lLgogICAqCiAgICogUmV0dXJucyBgdGhpc2AgaWYgYHRoaXNgIGhhcyBhbiBlcnJvci1oYW5kbGVyLiBPdGhlcndpc2UgcmV0dXJucyB0aGUKICAgKiBwYXJlbnQncyBlcnJvci16b25lLgogICAqLwogIFpvbmUgZ2V0IGVycm9yWm9uZSA9PiBfaGFuZGxlVW5jYXVnaHRFcnJvci56b25lOwoKICB2b2lkIHJ1bkd1YXJkZWQodm9pZCBmKCkpIHsKICAgIHRyeSB7CiAgICAgIHJ1bihmKTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgaGFuZGxlVW5jYXVnaHRFcnJvcihlLCBzKTsKICAgIH0KICB9CgogIHZvaWQgcnVuVW5hcnlHdWFyZGVkPFQ+KHZvaWQgZihUIGFyZyksIFQgYXJnKSB7CiAgICB0cnkgewogICAgICBydW5VbmFyeShmLCBhcmcpOwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBoYW5kbGVVbmNhdWdodEVycm9yKGUsIHMpOwogICAgfQogIH0KCiAgdm9pZCBydW5CaW5hcnlHdWFyZGVkPFQxLCBUMj4odm9pZCBmKFQxIGFyZzEsIFQyIGFyZzIpLCBUMSBhcmcxLCBUMiBhcmcyKSB7CiAgICB0cnkgewogICAgICBydW5CaW5hcnkoZiwgYXJnMSwgYXJnMik7CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIGhhbmRsZVVuY2F1Z2h0RXJyb3IoZSwgcyk7CiAgICB9CiAgfQoKICBab25lQ2FsbGJhY2s8Uj4gYmluZENhbGxiYWNrPFI+KFIgZigpKSB7CiAgICB2YXIgcmVnaXN0ZXJlZCA9IHJlZ2lzdGVyQ2FsbGJhY2soZik7CiAgICByZXR1cm4gKCkgPT4gdGhpcy5ydW4ocmVnaXN0ZXJlZCk7CiAgfQoKICBab25lVW5hcnlDYWxsYmFjazxSLCBUPiBiaW5kVW5hcnlDYWxsYmFjazxSLCBUPihSIGYoVCBhcmcpKSB7CiAgICB2YXIgcmVnaXN0ZXJlZCA9IHJlZ2lzdGVyVW5hcnlDYWxsYmFjayhmKTsKICAgIHJldHVybiAoYXJnKSA9PiB0aGlzLnJ1blVuYXJ5KHJlZ2lzdGVyZWQsIGFyZyk7CiAgfQoKICBab25lQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPiBiaW5kQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPigKICAgICAgUiBmKFQxIGFyZzEsIFQyIGFyZzIpKSB7CiAgICB2YXIgcmVnaXN0ZXJlZCA9IHJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2soZik7CiAgICByZXR1cm4gKGFyZzEsIGFyZzIpID0+IHRoaXMucnVuQmluYXJ5KHJlZ2lzdGVyZWQsIGFyZzEsIGFyZzIpOwogIH0KCiAgdm9pZCBGdW5jdGlvbigpIGJpbmRDYWxsYmFja0d1YXJkZWQodm9pZCBmKCkpIHsKICAgIHZhciByZWdpc3RlcmVkID0gcmVnaXN0ZXJDYWxsYmFjayhmKTsKICAgIHJldHVybiAoKSA9PiB0aGlzLnJ1bkd1YXJkZWQocmVnaXN0ZXJlZCk7CiAgfQoKICB2b2lkIEZ1bmN0aW9uKFQpIGJpbmRVbmFyeUNhbGxiYWNrR3VhcmRlZDxUPih2b2lkIGYoVCBhcmcpKSB7CiAgICB2YXIgcmVnaXN0ZXJlZCA9IHJlZ2lzdGVyVW5hcnlDYWxsYmFjayhmKTsKICAgIHJldHVybiAoYXJnKSA9PiB0aGlzLnJ1blVuYXJ5R3VhcmRlZChyZWdpc3RlcmVkLCBhcmcpOwogIH0KCiAgdm9pZCBGdW5jdGlvbihUMSwgVDIpIGJpbmRCaW5hcnlDYWxsYmFja0d1YXJkZWQ8VDEsIFQyPigKICAgICAgdm9pZCBmKFQxIGFyZzEsIFQyIGFyZzIpKSB7CiAgICB2YXIgcmVnaXN0ZXJlZCA9IHJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2soZik7CiAgICByZXR1cm4gKGFyZzEsIGFyZzIpID0+IHRoaXMucnVuQmluYXJ5R3VhcmRlZChyZWdpc3RlcmVkLCBhcmcxLCBhcmcyKTsKICB9CgogIG9wZXJhdG9yIFtdKE9iamVjdCBrZXkpIHsKICAgIHZhciByZXN1bHQgPSBfbWFwW2tleV07CiAgICBpZiAocmVzdWx0ICE9IG51bGwgfHwgX21hcC5jb250YWluc0tleShrZXkpKSByZXR1cm4gcmVzdWx0OwogICAgLy8gSWYgd2UgYXJlIG5vdCB0aGUgcm9vdCB6b25lLCBsb29rIHVwIGluIHRoZSBwYXJlbnQgem9uZS4KICAgIGlmIChwYXJlbnQgIT0gbnVsbCkgewogICAgICAvLyBXZSBkbyBub3Qgb3B0aW1pemUgZm9yIHJlcGVhdGVkbHkgbG9va2luZyB1cCBhIGtleSB3aGljaCBpc24ndAogICAgICAvLyB0aGVyZS4gVGhhdCB3b3VsZCByZXF1aXJlIHN0b3JpbmcgdGhlIGtleSBhbmQga2VlcGluZyBpdCBhbGl2ZS4KICAgICAgLy8gQ29weWluZyB0aGUga2V5L3ZhbHVlIGZyb20gdGhlIHBhcmVudCBkb2VzIG5vdCBrZWVwIGFueSBuZXcgdmFsdWVzCiAgICAgIC8vIGFsaXZlLgogICAgICB2YXIgdmFsdWUgPSBwYXJlbnRba2V5XTsKICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgICBfbWFwW2tleV0gPSB2YWx1ZTsKICAgICAgfQogICAgICByZXR1cm4gdmFsdWU7CiAgICB9CiAgICBhc3NlcnQodGhpcyA9PSBfcm9vdFpvbmUpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvLyBNZXRob2RzIHRoYXQgY2FuIGJlIGN1c3RvbWl6ZWQgYnkgdGhlIHpvbmUgc3BlY2lmaWNhdGlvbi4KCiAgdm9pZCBoYW5kbGVVbmNhdWdodEVycm9yKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IHRoaXMuX2hhbmRsZVVuY2F1Z2h0RXJyb3I7CiAgICBhc3NlcnQoaW1wbGVtZW50YXRpb24gIT0gbnVsbCk7CiAgICBab25lRGVsZWdhdGUgcGFyZW50RGVsZWdhdGUgPSBfcGFyZW50RGVsZWdhdGUoaW1wbGVtZW50YXRpb24uem9uZSk7CiAgICBIYW5kbGVVbmNhdWdodEVycm9ySGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcigKICAgICAgICBpbXBsZW1lbnRhdGlvbi56b25lLCBwYXJlbnREZWxlZ2F0ZSwgdGhpcywgZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgWm9uZSBmb3JrKHtab25lU3BlY2lmaWNhdGlvbiBzcGVjaWZpY2F0aW9uLCBNYXAgem9uZVZhbHVlc30pIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IHRoaXMuX2Zvcms7CiAgICBhc3NlcnQoaW1wbGVtZW50YXRpb24gIT0gbnVsbCk7CiAgICBab25lRGVsZWdhdGUgcGFyZW50RGVsZWdhdGUgPSBfcGFyZW50RGVsZWdhdGUoaW1wbGVtZW50YXRpb24uem9uZSk7CiAgICBGb3JrSGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcigKICAgICAgICBpbXBsZW1lbnRhdGlvbi56b25lLCBwYXJlbnREZWxlZ2F0ZSwgdGhpcywgc3BlY2lmaWNhdGlvbiwgem9uZVZhbHVlcyk7CiAgfQoKICBSIHJ1bjxSPihSIGYoKSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gdGhpcy5fcnVuOwogICAgYXNzZXJ0KGltcGxlbWVudGF0aW9uICE9IG51bGwpOwogICAgWm9uZURlbGVnYXRlIHBhcmVudERlbGVnYXRlID0gX3BhcmVudERlbGVnYXRlKGltcGxlbWVudGF0aW9uLnpvbmUpOwogICAgUnVuSGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsZW1lbnRhdGlvbi56b25lLCBwYXJlbnREZWxlZ2F0ZSwgdGhpcywgZik7CiAgfQoKICBSIHJ1blVuYXJ5PFIsIFQ+KFIgZihUIGFyZyksIFQgYXJnKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSB0aGlzLl9ydW5VbmFyeTsKICAgIGFzc2VydChpbXBsZW1lbnRhdGlvbiAhPSBudWxsKTsKICAgIFpvbmVEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZSA9IF9wYXJlbnREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbi56b25lKTsKICAgIFJ1blVuYXJ5SGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsZW1lbnRhdGlvbi56b25lLCBwYXJlbnREZWxlZ2F0ZSwgdGhpcywgZiwgYXJnKTsKICB9CgogIFIgcnVuQmluYXJ5PFIsIFQxLCBUMj4oUiBmKFQxIGFyZzEsIFQyIGFyZzIpLCBUMSBhcmcxLCBUMiBhcmcyKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSB0aGlzLl9ydW5CaW5hcnk7CiAgICBhc3NlcnQoaW1wbGVtZW50YXRpb24gIT0gbnVsbCk7CiAgICBab25lRGVsZWdhdGUgcGFyZW50RGVsZWdhdGUgPSBfcGFyZW50RGVsZWdhdGUoaW1wbGVtZW50YXRpb24uem9uZSk7CiAgICBSdW5CaW5hcnlIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxlbWVudGF0aW9uLnpvbmUsIHBhcmVudERlbGVnYXRlLCB0aGlzLCBmLCBhcmcxLCBhcmcyKTsKICB9CgogIFpvbmVDYWxsYmFjazxSPiByZWdpc3RlckNhbGxiYWNrPFI+KFIgY2FsbGJhY2soKSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gdGhpcy5fcmVnaXN0ZXJDYWxsYmFjazsKICAgIGFzc2VydChpbXBsZW1lbnRhdGlvbiAhPSBudWxsKTsKICAgIFpvbmVEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZSA9IF9wYXJlbnREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbi56b25lKTsKICAgIFJlZ2lzdGVyQ2FsbGJhY2tIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxlbWVudGF0aW9uLnpvbmUsIHBhcmVudERlbGVnYXRlLCB0aGlzLCBjYWxsYmFjayk7CiAgfQoKICBab25lVW5hcnlDYWxsYmFjazxSLCBUPiByZWdpc3RlclVuYXJ5Q2FsbGJhY2s8UiwgVD4oUiBjYWxsYmFjayhUIGFyZykpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IHRoaXMuX3JlZ2lzdGVyVW5hcnlDYWxsYmFjazsKICAgIGFzc2VydChpbXBsZW1lbnRhdGlvbiAhPSBudWxsKTsKICAgIFpvbmVEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZSA9IF9wYXJlbnREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbi56b25lKTsKICAgIFJlZ2lzdGVyVW5hcnlDYWxsYmFja0hhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbGVtZW50YXRpb24uem9uZSwgcGFyZW50RGVsZWdhdGUsIHRoaXMsIGNhbGxiYWNrKTsKICB9CgogIFpvbmVCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+IHJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPigKICAgICAgUiBjYWxsYmFjayhUMSBhcmcxLCBUMiBhcmcyKSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gdGhpcy5fcmVnaXN0ZXJCaW5hcnlDYWxsYmFjazsKICAgIGFzc2VydChpbXBsZW1lbnRhdGlvbiAhPSBudWxsKTsKICAgIFpvbmVEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZSA9IF9wYXJlbnREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbi56b25lKTsKICAgIFJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2tIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxlbWVudGF0aW9uLnpvbmUsIHBhcmVudERlbGVnYXRlLCB0aGlzLCBjYWxsYmFjayk7CiAgfQoKICBBc3luY0Vycm9yIGVycm9yQ2FsbGJhY2soT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IHRoaXMuX2Vycm9yQ2FsbGJhY2s7CiAgICBhc3NlcnQoaW1wbGVtZW50YXRpb24gIT0gbnVsbCk7CiAgICBmaW5hbCBab25lIGltcGxlbWVudGF0aW9uWm9uZSA9IGltcGxlbWVudGF0aW9uLnpvbmU7CiAgICBpZiAoaWRlbnRpY2FsKGltcGxlbWVudGF0aW9uWm9uZSwgX3Jvb3Rab25lKSkgcmV0dXJuIG51bGw7CiAgICBmaW5hbCBab25lRGVsZWdhdGUgcGFyZW50RGVsZWdhdGUgPSBfcGFyZW50RGVsZWdhdGUoaW1wbGVtZW50YXRpb25ab25lKTsKICAgIEVycm9yQ2FsbGJhY2tIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxlbWVudGF0aW9uWm9uZSwgcGFyZW50RGVsZWdhdGUsIHRoaXMsIGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIHZvaWQgc2NoZWR1bGVNaWNyb3Rhc2sodm9pZCBmKCkpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IHRoaXMuX3NjaGVkdWxlTWljcm90YXNrOwogICAgYXNzZXJ0KGltcGxlbWVudGF0aW9uICE9IG51bGwpOwogICAgWm9uZURlbGVnYXRlIHBhcmVudERlbGVnYXRlID0gX3BhcmVudERlbGVnYXRlKGltcGxlbWVudGF0aW9uLnpvbmUpOwogICAgU2NoZWR1bGVNaWNyb3Rhc2tIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxlbWVudGF0aW9uLnpvbmUsIHBhcmVudERlbGVnYXRlLCB0aGlzLCBmKTsKICB9CgogIFRpbWVyIGNyZWF0ZVRpbWVyKER1cmF0aW9uIGR1cmF0aW9uLCB2b2lkIGYoKSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gdGhpcy5fY3JlYXRlVGltZXI7CiAgICBhc3NlcnQoaW1wbGVtZW50YXRpb24gIT0gbnVsbCk7CiAgICBab25lRGVsZWdhdGUgcGFyZW50RGVsZWdhdGUgPSBfcGFyZW50RGVsZWdhdGUoaW1wbGVtZW50YXRpb24uem9uZSk7CiAgICBDcmVhdGVUaW1lckhhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbGVtZW50YXRpb24uem9uZSwgcGFyZW50RGVsZWdhdGUsIHRoaXMsIGR1cmF0aW9uLCBmKTsKICB9CgogIFRpbWVyIGNyZWF0ZVBlcmlvZGljVGltZXIoRHVyYXRpb24gZHVyYXRpb24sIHZvaWQgZihUaW1lciB0aW1lcikpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IHRoaXMuX2NyZWF0ZVBlcmlvZGljVGltZXI7CiAgICBhc3NlcnQoaW1wbGVtZW50YXRpb24gIT0gbnVsbCk7CiAgICBab25lRGVsZWdhdGUgcGFyZW50RGVsZWdhdGUgPSBfcGFyZW50RGVsZWdhdGUoaW1wbGVtZW50YXRpb24uem9uZSk7CiAgICBDcmVhdGVQZXJpb2RpY1RpbWVySGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsZW1lbnRhdGlvbi56b25lLCBwYXJlbnREZWxlZ2F0ZSwgdGhpcywgZHVyYXRpb24sIGYpOwogIH0KCiAgdm9pZCBwcmludChTdHJpbmcgbGluZSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gdGhpcy5fcHJpbnQ7CiAgICBhc3NlcnQoaW1wbGVtZW50YXRpb24gIT0gbnVsbCk7CiAgICBab25lRGVsZWdhdGUgcGFyZW50RGVsZWdhdGUgPSBfcGFyZW50RGVsZWdhdGUoaW1wbGVtZW50YXRpb24uem9uZSk7CiAgICBQcmludEhhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbGVtZW50YXRpb24uem9uZSwgcGFyZW50RGVsZWdhdGUsIHRoaXMsIGxpbmUpOwogIH0KfQoKdm9pZCBfcm9vdEhhbmRsZVVuY2F1Z2h0RXJyb3IoCiAgICBab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogIF9zY2hlZHVsZVByaW9yaXR5QXN5bmNDYWxsYmFjaygoKSB7CiAgICBlcnJvciA/Pz0gbmV3IE51bGxUaHJvd25FcnJvcigpOwogICAgaWYgKHN0YWNrVHJhY2UgPT0gbnVsbCkgdGhyb3cgZXJyb3I7CiAgICBfcmV0aHJvdyhlcnJvciwgc3RhY2tUcmFjZSk7CiAgfSk7Cn0KCmV4dGVybmFsIHZvaWQgX3JldGhyb3coT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpOwoKUiBfcm9vdFJ1bjxSPihab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgUiBmKCkpIHsKICBpZiAoWm9uZS5fY3VycmVudCA9PSB6b25lKSByZXR1cm4gZigpOwoKICBab25lIG9sZCA9IFpvbmUuX2VudGVyKHpvbmUpOwogIHRyeSB7CiAgICByZXR1cm4gZigpOwogIH0gZmluYWxseSB7CiAgICBab25lLl9sZWF2ZShvbGQpOwogIH0KfQoKUiBfcm9vdFJ1blVuYXJ5PFIsIFQ+KAogICAgWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsIFIgZihUIGFyZyksIFQgYXJnKSB7CiAgaWYgKFpvbmUuX2N1cnJlbnQgPT0gem9uZSkgcmV0dXJuIGYoYXJnKTsKCiAgWm9uZSBvbGQgPSBab25lLl9lbnRlcih6b25lKTsKICB0cnkgewogICAgcmV0dXJuIGYoYXJnKTsKICB9IGZpbmFsbHkgewogICAgWm9uZS5fbGVhdmUob2xkKTsKICB9Cn0KClIgX3Jvb3RSdW5CaW5hcnk8UiwgVDEsIFQyPihab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwKICAgIFIgZihUMSBhcmcxLCBUMiBhcmcyKSwgVDEgYXJnMSwgVDIgYXJnMikgewogIGlmIChab25lLl9jdXJyZW50ID09IHpvbmUpIHJldHVybiBmKGFyZzEsIGFyZzIpOwoKICBab25lIG9sZCA9IFpvbmUuX2VudGVyKHpvbmUpOwogIHRyeSB7CiAgICByZXR1cm4gZihhcmcxLCBhcmcyKTsKICB9IGZpbmFsbHkgewogICAgWm9uZS5fbGVhdmUob2xkKTsKICB9Cn0KClpvbmVDYWxsYmFjazxSPiBfcm9vdFJlZ2lzdGVyQ2FsbGJhY2s8Uj4oCiAgICBab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgUiBmKCkpIHsKICByZXR1cm4gZjsKfQoKWm9uZVVuYXJ5Q2FsbGJhY2s8UiwgVD4gX3Jvb3RSZWdpc3RlclVuYXJ5Q2FsbGJhY2s8UiwgVD4oCiAgICBab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgUiBmKFQgYXJnKSkgewogIHJldHVybiBmOwp9Cgpab25lQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPiBfcm9vdFJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPigKICAgIFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBSIGYoVDEgYXJnMSwgVDIgYXJnMikpIHsKICByZXR1cm4gZjsKfQoKQXN5bmNFcnJvciBfcm9vdEVycm9yQ2FsbGJhY2soWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsCiAgICAgICAgT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpID0+CiAgICBudWxsOwoKdm9pZCBfcm9vdFNjaGVkdWxlTWljcm90YXNrKAogICAgWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsIHZvaWQgZigpKSB7CiAgaWYgKCFpZGVudGljYWwoX3Jvb3Rab25lLCB6b25lKSkgewogICAgYm9vbCBoYXNFcnJvckhhbmRsZXIgPSAhX3Jvb3Rab25lLmluU2FtZUVycm9yWm9uZSh6b25lKTsKICAgIGlmIChoYXNFcnJvckhhbmRsZXIpIHsKICAgICAgZiA9IHpvbmUuYmluZENhbGxiYWNrR3VhcmRlZChmKTsKICAgIH0gZWxzZSB7CiAgICAgIGYgPSB6b25lLmJpbmRDYWxsYmFjayhmKTsKICAgIH0KICAgIC8vIFVzZSByb290IHpvbmUgYXMgZXZlbnQgem9uZSBpZiB0aGUgZnVuY3Rpb24gaXMgYWxyZWFkeSBib3VuZC4KICAgIHpvbmUgPSBfcm9vdFpvbmU7CiAgfQogIF9zY2hlZHVsZUFzeW5jQ2FsbGJhY2soZik7Cn0KClRpbWVyIF9yb290Q3JlYXRlVGltZXIoWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsCiAgICBEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBjYWxsYmFjaygpKSB7CiAgaWYgKCFpZGVudGljYWwoX3Jvb3Rab25lLCB6b25lKSkgewogICAgY2FsbGJhY2sgPSB6b25lLmJpbmRDYWxsYmFjayhjYWxsYmFjayk7CiAgfQogIHJldHVybiBUaW1lci5fY3JlYXRlVGltZXIoZHVyYXRpb24sIGNhbGxiYWNrKTsKfQoKVGltZXIgX3Jvb3RDcmVhdGVQZXJpb2RpY1RpbWVyKFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLAogICAgRHVyYXRpb24gZHVyYXRpb24sIHZvaWQgY2FsbGJhY2soVGltZXIgdGltZXIpKSB7CiAgaWYgKCFpZGVudGljYWwoX3Jvb3Rab25lLCB6b25lKSkgewogICAgLy8gVE9ETyhmbG9pdHNjaCk6IHRoZSByZXR1cm4gdHlwZSBzaG91bGQgYmUgJ3ZvaWQnLgogICAgY2FsbGJhY2sgPSB6b25lLmJpbmRVbmFyeUNhbGxiYWNrPGR5bmFtaWMsIFRpbWVyPihjYWxsYmFjayk7CiAgfQogIHJldHVybiBUaW1lci5fY3JlYXRlUGVyaW9kaWNUaW1lcihkdXJhdGlvbiwgY2FsbGJhY2spOwp9Cgp2b2lkIF9yb290UHJpbnQoWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsIFN0cmluZyBsaW5lKSB7CiAgcHJpbnRUb0NvbnNvbGUobGluZSk7Cn0KCnZvaWQgX3ByaW50VG9ab25lKFN0cmluZyBsaW5lKSB7CiAgWm9uZS5jdXJyZW50LnByaW50KGxpbmUpOwp9Cgpab25lIF9yb290Rm9yayhab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwKICAgIFpvbmVTcGVjaWZpY2F0aW9uIHNwZWNpZmljYXRpb24sIE1hcCB6b25lVmFsdWVzKSB7CiAgLy8gVE9ETyhmbG9pdHNjaCk6IGl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgY291bGQgZ2V0IHJpZCBvZiB0aGlzIGhhY2suCiAgLy8gQ2hhbmdlIHRoZSBzdGF0aWMgem9uZU9yRGlyZWN0UHJpbnQgZnVuY3Rpb24gdG8gZ28gdGhyb3VnaCB6b25lcwogIC8vIGZyb20gbm93IG9uLgogIHByaW50VG9ab25lID0gX3ByaW50VG9ab25lOwoKICBpZiAoc3BlY2lmaWNhdGlvbiA9PSBudWxsKSB7CiAgICBzcGVjaWZpY2F0aW9uID0gY29uc3QgWm9uZVNwZWNpZmljYXRpb24oKTsKICB9IGVsc2UgaWYgKHNwZWNpZmljYXRpb24gaXMhIF9ab25lU3BlY2lmaWNhdGlvbikgewogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIlpvbmVTcGVjaWZpY2F0aW9ucyBtdXN0IGJlIGluc3RhbnRpYXRlZCIKICAgICAgICAiIHdpdGggdGhlIHByb3ZpZGVkIGNvbnN0cnVjdG9yLiIpOwogIH0KICBNYXAgdmFsdWVNYXA7CiAgaWYgKHpvbmVWYWx1ZXMgPT0gbnVsbCkgewogICAgaWYgKHpvbmUgaXMgX1pvbmUpIHsKICAgICAgdmFsdWVNYXAgPSB6b25lLl9tYXA7CiAgICB9IGVsc2UgewogICAgICB2YWx1ZU1hcCA9IG5ldyBIYXNoTWFwKCk7CiAgICB9CiAgfSBlbHNlIHsKICAgIHZhbHVlTWFwID0gbmV3IEhhc2hNYXAuZnJvbSh6b25lVmFsdWVzKTsKICB9CiAgcmV0dXJuIG5ldyBfQ3VzdG9tWm9uZSh6b25lLCBzcGVjaWZpY2F0aW9uLCB2YWx1ZU1hcCk7Cn0KCmNsYXNzIF9Sb290Wm9uZSBleHRlbmRzIF9ab25lIHsKICBjb25zdCBfUm9vdFpvbmUoKTsKCiAgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4gZ2V0IF9ydW4gPT4KICAgICAgY29uc3QgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4oX3Jvb3Rab25lLCBfcm9vdFJ1bik7CiAgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4gZ2V0IF9ydW5VbmFyeSA9PgogICAgICBjb25zdCBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPihfcm9vdFpvbmUsIF9yb290UnVuVW5hcnkpOwogIF9ab25lRnVuY3Rpb248RnVuY3Rpb24+IGdldCBfcnVuQmluYXJ5ID0+CiAgICAgIGNvbnN0IF9ab25lRnVuY3Rpb248RnVuY3Rpb24+KF9yb290Wm9uZSwgX3Jvb3RSdW5CaW5hcnkpOwogIF9ab25lRnVuY3Rpb248RnVuY3Rpb24+IGdldCBfcmVnaXN0ZXJDYWxsYmFjayA9PgogICAgICBjb25zdCBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPihfcm9vdFpvbmUsIF9yb290UmVnaXN0ZXJDYWxsYmFjayk7CiAgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4gZ2V0IF9yZWdpc3RlclVuYXJ5Q2FsbGJhY2sgPT4KICAgICAgY29uc3QgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4oX3Jvb3Rab25lLCBfcm9vdFJlZ2lzdGVyVW5hcnlDYWxsYmFjayk7CiAgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4gZ2V0IF9yZWdpc3RlckJpbmFyeUNhbGxiYWNrID0+CiAgICAgIGNvbnN0IF9ab25lRnVuY3Rpb248RnVuY3Rpb24+KF9yb290Wm9uZSwgX3Jvb3RSZWdpc3RlckJpbmFyeUNhbGxiYWNrKTsKICBfWm9uZUZ1bmN0aW9uPEVycm9yQ2FsbGJhY2tIYW5kbGVyPiBnZXQgX2Vycm9yQ2FsbGJhY2sgPT4KICAgICAgY29uc3QgX1pvbmVGdW5jdGlvbjxFcnJvckNhbGxiYWNrSGFuZGxlcj4oX3Jvb3Rab25lLCBfcm9vdEVycm9yQ2FsbGJhY2spOwogIF9ab25lRnVuY3Rpb248U2NoZWR1bGVNaWNyb3Rhc2tIYW5kbGVyPiBnZXQgX3NjaGVkdWxlTWljcm90YXNrID0+CiAgICAgIGNvbnN0IF9ab25lRnVuY3Rpb248U2NoZWR1bGVNaWNyb3Rhc2tIYW5kbGVyPigKICAgICAgICAgIF9yb290Wm9uZSwgX3Jvb3RTY2hlZHVsZU1pY3JvdGFzayk7CiAgX1pvbmVGdW5jdGlvbjxDcmVhdGVUaW1lckhhbmRsZXI+IGdldCBfY3JlYXRlVGltZXIgPT4KICAgICAgY29uc3QgX1pvbmVGdW5jdGlvbjxDcmVhdGVUaW1lckhhbmRsZXI+KF9yb290Wm9uZSwgX3Jvb3RDcmVhdGVUaW1lcik7CiAgX1pvbmVGdW5jdGlvbjxDcmVhdGVQZXJpb2RpY1RpbWVySGFuZGxlcj4gZ2V0IF9jcmVhdGVQZXJpb2RpY1RpbWVyID0+CiAgICAgIGNvbnN0IF9ab25lRnVuY3Rpb248Q3JlYXRlUGVyaW9kaWNUaW1lckhhbmRsZXI+KAogICAgICAgICAgX3Jvb3Rab25lLCBfcm9vdENyZWF0ZVBlcmlvZGljVGltZXIpOwogIF9ab25lRnVuY3Rpb248UHJpbnRIYW5kbGVyPiBnZXQgX3ByaW50ID0+CiAgICAgIGNvbnN0IF9ab25lRnVuY3Rpb248UHJpbnRIYW5kbGVyPihfcm9vdFpvbmUsIF9yb290UHJpbnQpOwogIF9ab25lRnVuY3Rpb248Rm9ya0hhbmRsZXI+IGdldCBfZm9yayA9PgogICAgICBjb25zdCBfWm9uZUZ1bmN0aW9uPEZvcmtIYW5kbGVyPihfcm9vdFpvbmUsIF9yb290Rm9yayk7CiAgX1pvbmVGdW5jdGlvbjxIYW5kbGVVbmNhdWdodEVycm9ySGFuZGxlcj4gZ2V0IF9oYW5kbGVVbmNhdWdodEVycm9yID0+CiAgICAgIGNvbnN0IF9ab25lRnVuY3Rpb248SGFuZGxlVW5jYXVnaHRFcnJvckhhbmRsZXI+KAogICAgICAgICAgX3Jvb3Rab25lLCBfcm9vdEhhbmRsZVVuY2F1Z2h0RXJyb3IpOwoKICAvLyBUaGUgcGFyZW50IHpvbmUuCiAgX1pvbmUgZ2V0IHBhcmVudCA9PiBudWxsOwoKICAvLy8gVGhlIHpvbmUncyBzY29wZWQgdmFsdWUgZGVjbGFyYXRpb24gbWFwLgogIC8vLwogIC8vLyBUaGlzIGlzIGFsd2F5cyBhIFtIYXNoTWFwXS4KICBNYXAgZ2V0IF9tYXAgPT4gX3Jvb3RNYXA7CgogIHN0YXRpYyBmaW5hbCBfcm9vdE1hcCA9IG5ldyBIYXNoTWFwKCk7CgogIHN0YXRpYyBab25lRGVsZWdhdGUgX3Jvb3REZWxlZ2F0ZTsKCiAgWm9uZURlbGVnYXRlIGdldCBfZGVsZWdhdGUgewogICAgaWYgKF9yb290RGVsZWdhdGUgIT0gbnVsbCkgcmV0dXJuIF9yb290RGVsZWdhdGU7CiAgICByZXR1cm4gX3Jvb3REZWxlZ2F0ZSA9IG5ldyBfWm9uZURlbGVnYXRlKHRoaXMpOwogIH0KCiAgLyoqCiAgICogVGhlIGNsb3Nlc3QgZXJyb3ItaGFuZGxpbmcgem9uZS4KICAgKgogICAqIFJldHVybnMgYHRoaXNgIGlmIGB0aGlzYCBoYXMgYW4gZXJyb3ItaGFuZGxlci4gT3RoZXJ3aXNlIHJldHVybnMgdGhlCiAgICogcGFyZW50J3MgZXJyb3Item9uZS4KICAgKi8KICBab25lIGdldCBlcnJvclpvbmUgPT4gdGhpczsKCiAgLy8gWm9uZSBpbnRlcmZhY2UuCgogIHZvaWQgcnVuR3VhcmRlZCh2b2lkIGYoKSkgewogICAgdHJ5IHsKICAgICAgaWYgKGlkZW50aWNhbChfcm9vdFpvbmUsIFpvbmUuX2N1cnJlbnQpKSB7CiAgICAgICAgZigpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfcm9vdFJ1bihudWxsLCBudWxsLCB0aGlzLCBmKTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgaGFuZGxlVW5jYXVnaHRFcnJvcihlLCBzKTsKICAgIH0KICB9CgogIHZvaWQgcnVuVW5hcnlHdWFyZGVkPFQ+KHZvaWQgZihUIGFyZyksIFQgYXJnKSB7CiAgICB0cnkgewogICAgICBpZiAoaWRlbnRpY2FsKF9yb290Wm9uZSwgWm9uZS5fY3VycmVudCkpIHsKICAgICAgICBmKGFyZyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9yb290UnVuVW5hcnkobnVsbCwgbnVsbCwgdGhpcywgZiwgYXJnKTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgaGFuZGxlVW5jYXVnaHRFcnJvcihlLCBzKTsKICAgIH0KICB9CgogIHZvaWQgcnVuQmluYXJ5R3VhcmRlZDxUMSwgVDI+KHZvaWQgZihUMSBhcmcxLCBUMiBhcmcyKSwgVDEgYXJnMSwgVDIgYXJnMikgewogICAgdHJ5IHsKICAgICAgaWYgKGlkZW50aWNhbChfcm9vdFpvbmUsIFpvbmUuX2N1cnJlbnQpKSB7CiAgICAgICAgZihhcmcxLCBhcmcyKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX3Jvb3RSdW5CaW5hcnkobnVsbCwgbnVsbCwgdGhpcywgZiwgYXJnMSwgYXJnMik7CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIGhhbmRsZVVuY2F1Z2h0RXJyb3IoZSwgcyk7CiAgICB9CiAgfQoKICBab25lQ2FsbGJhY2s8Uj4gYmluZENhbGxiYWNrPFI+KFIgZigpKSB7CiAgICByZXR1cm4gKCkgPT4gdGhpcy5ydW48Uj4oZik7CiAgfQoKICBab25lVW5hcnlDYWxsYmFjazxSLCBUPiBiaW5kVW5hcnlDYWxsYmFjazxSLCBUPihSIGYoVCBhcmcpKSB7CiAgICByZXR1cm4gKGFyZykgPT4gdGhpcy5ydW5VbmFyeTxSLCBUPihmLCBhcmcpOwogIH0KCiAgWm9uZUJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4gYmluZEJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4oCiAgICAgIFIgZihUMSBhcmcxLCBUMiBhcmcyKSkgewogICAgcmV0dXJuIChhcmcxLCBhcmcyKSA9PiB0aGlzLnJ1bkJpbmFyeTxSLCBUMSwgVDI+KGYsIGFyZzEsIGFyZzIpOwogIH0KCiAgdm9pZCBGdW5jdGlvbigpIGJpbmRDYWxsYmFja0d1YXJkZWQodm9pZCBmKCkpIHsKICAgIHJldHVybiAoKSA9PiB0aGlzLnJ1bkd1YXJkZWQoZik7CiAgfQoKICB2b2lkIEZ1bmN0aW9uKFQpIGJpbmRVbmFyeUNhbGxiYWNrR3VhcmRlZDxUPih2b2lkIGYoVCBhcmcpKSB7CiAgICByZXR1cm4gKGFyZykgPT4gdGhpcy5ydW5VbmFyeUd1YXJkZWQoZiwgYXJnKTsKICB9CgogIHZvaWQgRnVuY3Rpb24oVDEsIFQyKSBiaW5kQmluYXJ5Q2FsbGJhY2tHdWFyZGVkPFQxLCBUMj4oCiAgICAgIHZvaWQgZihUMSBhcmcxLCBUMiBhcmcyKSkgewogICAgcmV0dXJuIChhcmcxLCBhcmcyKSA9PiB0aGlzLnJ1bkJpbmFyeUd1YXJkZWQoZiwgYXJnMSwgYXJnMik7CiAgfQoKICBvcGVyYXRvciBbXShPYmplY3Qga2V5KSA9PiBudWxsOwoKICAvLyBNZXRob2RzIHRoYXQgY2FuIGJlIGN1c3RvbWl6ZWQgYnkgdGhlIHpvbmUgc3BlY2lmaWNhdGlvbi4KCiAgdm9pZCBoYW5kbGVVbmNhdWdodEVycm9yKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIF9yb290SGFuZGxlVW5jYXVnaHRFcnJvcihudWxsLCBudWxsLCB0aGlzLCBlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICBab25lIGZvcmsoe1pvbmVTcGVjaWZpY2F0aW9uIHNwZWNpZmljYXRpb24sIE1hcCB6b25lVmFsdWVzfSkgewogICAgcmV0dXJuIF9yb290Rm9yayhudWxsLCBudWxsLCB0aGlzLCBzcGVjaWZpY2F0aW9uLCB6b25lVmFsdWVzKTsKICB9CgogIFIgcnVuPFI+KFIgZigpKSB7CiAgICBpZiAoaWRlbnRpY2FsKFpvbmUuX2N1cnJlbnQsIF9yb290Wm9uZSkpIHJldHVybiBmKCk7CiAgICByZXR1cm4gX3Jvb3RSdW4obnVsbCwgbnVsbCwgdGhpcywgZik7CiAgfQoKICBSIHJ1blVuYXJ5PFIsIFQ+KFIgZihUIGFyZyksIFQgYXJnKSB7CiAgICBpZiAoaWRlbnRpY2FsKFpvbmUuX2N1cnJlbnQsIF9yb290Wm9uZSkpIHJldHVybiBmKGFyZyk7CiAgICByZXR1cm4gX3Jvb3RSdW5VbmFyeShudWxsLCBudWxsLCB0aGlzLCBmLCBhcmcpOwogIH0KCiAgUiBydW5CaW5hcnk8UiwgVDEsIFQyPihSIGYoVDEgYXJnMSwgVDIgYXJnMiksIFQxIGFyZzEsIFQyIGFyZzIpIHsKICAgIGlmIChpZGVudGljYWwoWm9uZS5fY3VycmVudCwgX3Jvb3Rab25lKSkgcmV0dXJuIGYoYXJnMSwgYXJnMik7CiAgICByZXR1cm4gX3Jvb3RSdW5CaW5hcnkobnVsbCwgbnVsbCwgdGhpcywgZiwgYXJnMSwgYXJnMik7CiAgfQoKICBab25lQ2FsbGJhY2s8Uj4gcmVnaXN0ZXJDYWxsYmFjazxSPihSIGYoKSkgPT4gZjsKCiAgWm9uZVVuYXJ5Q2FsbGJhY2s8UiwgVD4gcmVnaXN0ZXJVbmFyeUNhbGxiYWNrPFIsIFQ+KFIgZihUIGFyZykpID0+IGY7CgogIFpvbmVCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+IHJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPigKICAgICAgICAgIFIgZihUMSBhcmcxLCBUMiBhcmcyKSkgPT4KICAgICAgZjsKCiAgQXN5bmNFcnJvciBlcnJvckNhbGxiYWNrKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSA9PiBudWxsOwoKICB2b2lkIHNjaGVkdWxlTWljcm90YXNrKHZvaWQgZigpKSB7CiAgICBfcm9vdFNjaGVkdWxlTWljcm90YXNrKG51bGwsIG51bGwsIHRoaXMsIGYpOwogIH0KCiAgVGltZXIgY3JlYXRlVGltZXIoRHVyYXRpb24gZHVyYXRpb24sIHZvaWQgZigpKSB7CiAgICByZXR1cm4gVGltZXIuX2NyZWF0ZVRpbWVyKGR1cmF0aW9uLCBmKTsKICB9CgogIFRpbWVyIGNyZWF0ZVBlcmlvZGljVGltZXIoRHVyYXRpb24gZHVyYXRpb24sIHZvaWQgZihUaW1lciB0aW1lcikpIHsKICAgIHJldHVybiBUaW1lci5fY3JlYXRlUGVyaW9kaWNUaW1lcihkdXJhdGlvbiwgZik7CiAgfQoKICB2b2lkIHByaW50KFN0cmluZyBsaW5lKSB7CiAgICBwcmludFRvQ29uc29sZShsaW5lKTsKICB9Cn0KCmNvbnN0IF9yb290Wm9uZSA9IGNvbnN0IF9Sb290Wm9uZSgpOwoKLyoqCiAqIFJ1bnMgW2JvZHldIGluIGl0cyBvd24gem9uZS4KICoKICogQ3JlYXRlcyBhIG5ldyB6b25lIHVzaW5nIFtab25lLmZvcmtdIGJhc2VkIG9uIFt6b25lU3BlY2lmaWNhdGlvbl0gYW5kCiAqIFt6b25lVmFsdWVzXSwgdGhlbiBydW5zIFtib2R5XSBpbiB0aGF0IHpvbmUgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4KICoKICogSWYgW29uRXJyb3JdIGlzIHByb3ZpZGVkLCBpdCBtdXN0IGhhdmUgb25lIG9mIHRoZSB0eXBlcwogKiAqIGB2b2lkIEZ1bmN0aW9uKE9iamVjdClgCiAqICogYHZvaWQgRnVuY3Rpb24oT2JqZWN0LCBTdGFja1RyYWNlKWAKICogYW5kIHRoZSBbb25FcnJvcl0gaGFuZGxlciBpcyB1c2VkICpib3RoKiB0byBoYW5kbGUgYXN5bmNocm9ub3VzIGVycm9ycwogKiBieSBvdmVycmlkaW5nIFtab25lU3BlY2lmaWNhdGlvbi5oYW5kbGVVbmNhdWdodEVycm9yXSBpbiBbem9uZVNwZWNpZmljYXRpb25dLAogKiBpZiBhbnksICphbmQqIHRvIGhhbmRsZSBlcnJvcnMgdGhyb3duIHN5bmNocm9ub3VzbHkgYnkgdGhlIGNhbGwgdG8gW2JvZHldLgogKgogKiBJZiBhbiBlcnJvciBvY2N1cnMgc3luY2hyb25vdXNseSBpbiBbYm9keV0sCiAqIHRoZW4gdGhyb3dpbmcgaW4gdGhlIFtvbkVycm9yXSBoYW5kbGVyCiAqIG1ha2VzIHRoZSBjYWxsIHRvIGBydW5ab25lYCB0aHJvdyB0aGF0IGVycm9yLAogKiBhbmQgb3RoZXJ3aXNlIHRoZSBjYWxsIHRvIGBydW5ab25lZGAgcmV0dXJucyBgbnVsbGAuCiAqCiAqIElmIHRoZSB6b25lIHNwZWNpZmljYXRpb24gaGFzIGEgYGhhbmRsZVVuY2F1Z2h0RXJyb3JgIHZhbHVlIG9yIHRoZSBbb25FcnJvcl0KICogcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCB0aGUgem9uZSBiZWNvbWVzIGFuIGVycm9yLXpvbmUuCiAqCiAqIEVycm9ycyB3aWxsIG5ldmVyIGNyb3NzIGVycm9yLXpvbmUgYm91bmRhcmllcyBieSB0aGVtc2VsdmVzLgogKiBFcnJvcnMgdGhhdCB0cnkgdG8gY3Jvc3MgZXJyb3Item9uZSBib3VuZGFyaWVzIGFyZSBjb25zaWRlcmVkIHVuY2F1Z2h0IGluCiAqIHRoZWlyIG9yaWdpbmF0aW5nIGVycm9yIHpvbmUuCiAqCiAqICAgICB2YXIgZnV0dXJlID0gbmV3IEZ1dHVyZS52YWx1ZSg0OTkpOwogKiAgICAgcnVuWm9uZWQoKCkgewogKiAgICAgICB2YXIgZnV0dXJlMiA9IGZ1dHVyZS50aGVuKChfKSB7IHRocm93ICJlcnJvciBpbiBmaXJzdCBlcnJvci16b25lIjsgfSk7CiAqICAgICAgIHJ1blpvbmVkKCgpIHsKICogICAgICAgICB2YXIgZnV0dXJlMyA9IGZ1dHVyZTIuY2F0Y2hFcnJvcigoZSkgeyBwcmludCgiTmV2ZXIgcmVhY2hlZCEiKTsgfSk7CiAqICAgICAgIH0sIG9uRXJyb3I6IChlKSB7IHByaW50KCJ1bnVzZWQgZXJyb3IgaGFuZGxlciIpOyB9KTsKICogICAgIH0sIG9uRXJyb3I6IChlKSB7IHByaW50KCJjYXRjaGVzIGVycm9yIG9mIGZpcnN0IGVycm9yLXpvbmUuIik7IH0pOwogKgogKiBFeGFtcGxlOgogKgogKiAgICAgcnVuWm9uZWQoKCkgewogKiAgICAgICBuZXcgRnV0dXJlKCgpIHsgdGhyb3cgImFzeW5jaHJvbm91cyBlcnJvciI7IH0pOwogKiAgICAgfSwgb25FcnJvcjogcHJpbnQpOyAgLy8gV2lsbCBwcmludCAiYXN5bmNocm9ub3VzIGVycm9yIi4KICoKICogSXQgaXMgcG9zc2libGUgdG8gbWFudWFsbHkgcGFzcyBhbiBlcnJvciBmcm9tIG9uZSBlcnJvciB6b25lIHRvIGFub3RoZXIKICogYnkgcmUtdGhyb3dpbmcgaXQgaW4gdGhlIG5ldyB6b25lLiBJZiBbb25FcnJvcl0gdGhyb3dzLCB0aGF0IGVycm9yIHdpbGwKICogb2NjdXIgaW4gdGhlIG9yaWdpbmFsIHpvbmUgd2hlcmUgW3J1blpvbmVkXSB3YXMgY2FsbGVkLgogKi8KUiBydW5ab25lZDxSPihSIGJvZHkoKSwKICAgIHtNYXAgem9uZVZhbHVlcywgWm9uZVNwZWNpZmljYXRpb24gem9uZVNwZWNpZmljYXRpb24sIEZ1bmN0aW9uIG9uRXJyb3J9KSB7CiAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgewogICAgcmV0dXJuIF9ydW5ab25lZDxSPihib2R5LCB6b25lVmFsdWVzLCB6b25lU3BlY2lmaWNhdGlvbik7CiAgfQogIHZvaWQgRnVuY3Rpb24oT2JqZWN0KSB1bmFyeU9uRXJyb3I7CiAgdm9pZCBGdW5jdGlvbihPYmplY3QsIFN0YWNrVHJhY2UpIGJpbmFyeU9uRXJyb3I7CiAgaWYgKG9uRXJyb3IgaXMgdm9pZCBGdW5jdGlvbihPYmplY3QsIFN0YWNrVHJhY2UpKSB7CiAgICBiaW5hcnlPbkVycm9yID0gb25FcnJvcjsKICB9IGVsc2UgaWYgKG9uRXJyb3IgaXMgdm9pZCBGdW5jdGlvbihPYmplY3QpKSB7CiAgICB1bmFyeU9uRXJyb3IgPSBvbkVycm9yOwogIH0gZWxzZSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigib25FcnJvciBjYWxsYmFjayBtdXN0IHRha2UgZWl0aGVyIGFuIE9iamVjdCAiCiAgICAgICAgIih0aGUgZXJyb3IpLCBvciBib3RoIGFuIE9iamVjdCAodGhlIGVycm9yKSBhbmQgYSBTdGFja1RyYWNlLiIpOwogIH0KICBIYW5kbGVVbmNhdWdodEVycm9ySGFuZGxlciBlcnJvckhhbmRsZXIgPSAoWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LAogICAgICBab25lIHpvbmUsIGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIHRyeSB7CiAgICAgIGlmIChiaW5hcnlPbkVycm9yICE9IG51bGwpIHsKICAgICAgICBzZWxmLnBhcmVudC5ydW5CaW5hcnkoYmluYXJ5T25FcnJvciwgZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydCh1bmFyeU9uRXJyb3IgIT0gbnVsbCk7CiAgICAgICAgc2VsZi5wYXJlbnQucnVuVW5hcnkodW5hcnlPbkVycm9yLCBlcnJvcik7CiAgICAgIH0KICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgaWYgKGlkZW50aWNhbChlLCBlcnJvcikpIHsKICAgICAgICBwYXJlbnQuaGFuZGxlVW5jYXVnaHRFcnJvcih6b25lLCBlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcGFyZW50LmhhbmRsZVVuY2F1Z2h0RXJyb3Ioem9uZSwgZSwgcyk7CiAgICAgIH0KICAgIH0KICB9OwogIGlmICh6b25lU3BlY2lmaWNhdGlvbiA9PSBudWxsKSB7CiAgICB6b25lU3BlY2lmaWNhdGlvbiA9CiAgICAgICAgbmV3IFpvbmVTcGVjaWZpY2F0aW9uKGhhbmRsZVVuY2F1Z2h0RXJyb3I6IGVycm9ySGFuZGxlcik7CiAgfSBlbHNlIHsKICAgIHpvbmVTcGVjaWZpY2F0aW9uID0gbmV3IFpvbmVTcGVjaWZpY2F0aW9uLmZy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YW5kIHNpbXBseSB1c2UgcGFydHMuCgppbXBvcnQgImRhcnQ6X2ludGVybmFsIiBzaG93IFZNTGlicmFyeUhvb2tzLCBwYXRjaDsKCi8vLyBUaGVzZSBhcmUgdGhlIGFkZGl0aW9uYWwgcGFydHMgb2YgdGhpcyBwYXRjaCBsaWJyYXJ5OgovLyBwYXJ0ICJkZWZlcnJlZF9sb2FkX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJzY2hlZHVsZV9taWNyb3Rhc2tfcGF0Y2guZGFydCI7Ci8vIHBhcnQgInRpbWVyX3BhdGNoLmRhcnQiOwoKLy8gRXF1aXZhbGVudCBvZiBjYWxsaW5nIEZBVEFMIGZyb20gQysrIGNvZGUuCl9mYXRhbChtc2cpIG5hdGl2ZSAiRGFydEFzeW5jX2ZhdGFsIjsKCmNsYXNzIF9Bc3luY0F3YWl0Q29tcGxldGVyPFQ+IGltcGxlbWVudHMgQ29tcGxldGVyPFQ+IHsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgZmluYWwgX2Z1dHVyZSA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGJvb2wgaXNTeW5jOwoKICBfQXN5bmNBd2FpdENvbXBsZXRlcigpIDogaXNTeW5jID0gZmFsc2U7CgogIHZvaWQgY29tcGxldGUoW0Z1dHVyZU9yPFQ+IHZhbHVlXSkgewogICAgaWYgKCFpc1N5bmMgfHwgdmFsdWUgaXMgRnV0dXJlPFQ+KSB7CiAgICAgIF9mdXR1cmUuX2FzeW5jQ29tcGxldGUodmFsdWUpOwogICAgfSBlbHNlIHsKICAgICAgX2Z1dHVyZS5fY29tcGxldGVXaXRoVmFsdWUodmFsdWUpOwogICAgfQogIH0KCiAgdm9pZCBjb21wbGV0ZUVycm9yKGUsIFtzdF0pIHsKICAgIGlmIChpc1N5bmMpIHsKICAgICAgX2Z1dHVyZS5fY29tcGxldGVFcnJvcihlLCBzdCk7CiAgICB9IGVsc2UgewogICAgICBfZnV0dXJlLl9hc3luY0NvbXBsZXRlRXJyb3IoZSwgc3QpOwogICAgfQogIH0KCiAgdm9pZCBzdGFydChmKSB7CiAgICBmKCk7CiAgICBpc1N5bmMgPSB0cnVlOwogIH0KCiAgRnV0dXJlPFQ+IGdldCBmdXR1cmUgPT4gX2Z1dHVyZTsKICBib29sIGdldCBpc0NvbXBsZXRlZCA9PiAhX2Z1dHVyZS5fbWF5Q29tcGxldGU7Cn0KCi8vIFdlIG5lZWQgdG8gcGFzcyB0aGUgdmFsdWUgYXMgZmlyc3QgYXJndW1lbnQgYW5kIGxlYXZlIHRoZSBzZWNvbmQgYW5kIHRoaXJkCi8vIGFyZ3VtZW50cyBlbXB0eSAodXNlZCBmb3IgZXJyb3IgaGFuZGxpbmcpLgovLyBTZWUgdm0vYXN0X3RyYW5zZm9ybWVyLmNjIGZvciB1c2FnZS4KRnVuY3Rpb24gX2FzeW5jVGhlbldyYXBwZXJIZWxwZXIoY29udGludWF0aW9uKSB7CiAgLy8gQW55IGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCBhcyBhbiBhc3luY2hyb25vdXMgY2FsbGJhY2sgbXVzdCBiZSByZWdpc3RlcmVkCiAgLy8gaW4gdGhlIGN1cnJlbnQgWm9uZS4gTm9ybWFsbHksIHRoaXMgaXMgZG9uZSBieSB0aGUgZnV0dXJlIHdoZW4gYQogIC8vIGNhbGxiYWNrIGlzIHJlZ2lzdGVyZWQgKGZvciBleGFtcGxlIHdpdGggYC50aGVuYCBvciBgLmNhdGNoRXJyb3JgKS4gSW4gb3VyCiAgLy8gY2FzZSB3ZSB3YW50IHRvIHJldXNlIHRoZSBzYW1lIGNhbGxiYWNrIG11bHRpcGxlIHRpbWVzIGFuZCB0aGVyZWZvcmUgYXZvaWQKICAvLyB0aGUgbXVsdGlwbGUgcmVnaXN0cmF0aW9ucy4gRm9yIG91ciBpbnRlcm5hbCBmdXR1cmVzIChgX0Z1dHVyZWApIHdlIGNhbgogIC8vIHVzZSB0aGUgc2hvcnRjdXQtdmVyc2lvbiBvZiBgLnRoZW5gLCBhbmQgc2tpcCB0aGUgcmVnaXN0cmF0aW9uLiBIb3dldmVyLAogIC8vIHRoYXQgbWVhbnMgdGhhdCB0aGUgY29udGludWF0aW9uIG11c3QgYmUgcmVnaXN0ZXJlZCBieSB1cy4KICAvLwogIC8vIEZ1cnRoZXJtb3JlLCB3ZSBrbm93IHRoYXQgdGhlIHJvb3Qtem9uZSBkb2Vzbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIGFuZAogIC8vIHdlIGNhbiB0aGVyZWZvcmUgc2tpcCB0aGUgcmVnaXN0cmF0aW9uIGNhbGwgZm9yIGl0LgogIC8vCiAgLy8gTm90ZSwgdGhhdCB0aGUgY29udGludWF0aW9uIGFjY2VwdHMgdXAgdG8gdGhyZWUgYXJndW1lbnRzLiBJZiB0aGUgY3VycmVudAogIC8vIHpvbmUgaXMgdGhlIHJvb3Qgem9uZSwgd2UgZG9uJ3Qgd3JhcCB0aGUgY29udGludWF0aW9uLCBhbmQgYSBiYWQKICAvLyBgRnV0dXJlYCBpbXBsZW1lbnRhdGlvbiBjb3VsZCBwb3RlbnRpYWxseSBpbnZva2UgdGhlIGNhbGxiYWNrIHdpdGggdGhlCiAgLy8gd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cy4KICBpZiAoWm9uZS5jdXJyZW50ID09IFpvbmUucm9vdCkgcmV0dXJuIGNvbnRpbnVhdGlvbjsKICByZXR1cm4gWm9uZS5jdXJyZW50LnJlZ2lzdGVyVW5hcnlDYWxsYmFjayhjb250aW51YXRpb24pOwp9CgovLyBXZSBuZWVkIHRvIHBhc3MgdGhlIGV4Y2VwdGlvbiBhbmQgc3RhY2sgdHJhY2Ugb2JqZWN0cyBhcyBzZWNvbmQgYW5kIHRoaXJkCi8vIHBhcmFtZXRlciB0byB0aGUgY29udGludWF0aW9uLiAgU2VlIHZtL2FzdF90cmFuc2Zvcm1lci5jYyBmb3IgdXNhZ2UuCkZ1bmN0aW9uIF9hc3luY0Vycm9yV3JhcHBlckhlbHBlcihjb250aW51YXRpb24pIHsKICAvLyBTZWUgY29tbWVudHMgb2YgYF9hc3luY1RoZW5XcmFwcGVySGVscGVyYC4KICB2YXIgZXJyb3JDYWxsYmFjayA9IChlLCBzKSA9PiBjb250aW51YXRpb24obnVsbCwgZSwgcyk7CiAgaWYgKFpvbmUuY3VycmVudCA9PSBab25lLnJvb3QpIHJldHVybiBlcnJvckNhbGxiYWNrOwogIHJldHVybiBab25lLmN1cnJlbnQucmVnaXN0ZXJCaW5hcnlDYWxsYmFjayhlcnJvckNhbGxiYWNrKTsKfQoKLy8vIFJlZ2lzdGVycyB0aGUgW3RoZW5DYWxsYmFja10gYW5kIFtlcnJvckNhbGxiYWNrXSBvbiB0aGUgZ2l2ZW4gW29iamVjdF0uCi8vLwovLy8gSWYgW29iamVjdF0gaXMgbm90IGEgZnV0dXJlLCB0aGVuIGl0IGlzIHdyYXBwZWQgaW50byBvbmUuCi8vLwovLy8gUmV0dXJucyB0aGUgcmVzdWx0IG9mIHJlZ2lzdGVyaW5nIHdpdGggYC50aGVuYC4KRnV0dXJlIF9hd2FpdEhlbHBlcigKICAgIHZhciBvYmplY3QsIEZ1bmN0aW9uIHRoZW5DYWxsYmFjaywgRnVuY3Rpb24gZXJyb3JDYWxsYmFjaywgdmFyIGF3YWl0ZXIpIHsKICBpZiAob2JqZWN0IGlzISBGdXR1cmUpIHsKICAgIG9iamVjdCA9IG5ldyBfRnV0dXJlKCkuLl9zZXRWYWx1ZShvYmplY3QpOwogIH0gZWxzZSBpZiAob2JqZWN0IGlzISBfRnV0dXJlKSB7CiAgICByZXR1cm4gb2JqZWN0LnRoZW4odGhlbkNhbGxiYWNrLCBvbkVycm9yOiBlcnJvckNhbGxiYWNrKTsKICB9CiAgLy8gYG9iamVjdGAgaXMgYSBgX0Z1dHVyZWAuCiAgLy8KICAvLyBTaW5jZSB0aGUgY2FsbGJhY2tzIGhhdmUgYmVlbiByZWdpc3RlcmVkIGluIHRoZSBjdXJyZW50IHpvbmUgKHNlZQogIC8vIFtfYXN5bmNUaGVuV3JhcHBlckhlbHBlcl0gYW5kIFtfYXN5bmNFcnJvcldyYXBwZXJIZWxwZXJdKSwgd2UgY2FuIGF2b2lkCiAgLy8gYW5vdGhlciByZWdpc3RyYXRpb24gYW5kIGRpcmVjdGx5IGludm9rZSB0aGUgbm8tem9uZS1yZWdpc3RyYXRpb24gYC50aGVuYC4KICAvLwogIC8vIFdlIGNhbiBvbmx5IGRvIHRoaXMgZm9yIG91ciBpbnRlcm5hbCBmdXR1cmVzICh0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZgogIC8vIGFsbCBmdXR1cmVzIHRoYXQgYXJlIGNvbnN0cnVjdGVkIGJ5IHRoZSBgZGFydDphc3luY2AgbGlicmFyeSkuCiAgb2JqZWN0Ll9hd2FpdGVyID0gYXdhaXRlcjsKICByZXR1cm4gb2JqZWN0Ll90aGVuQXdhaXQodGhlbkNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTsKfQoKLy8gQ2FsbGVkIGFzIHBhcnQgb2YgdGhlICdhd2FpdCBmb3IgKC4uLiknIGNvbnN0cnVjdC4gUmVnaXN0ZXJzIHRoZQovLyBhd2FpdGVyIG9uIHRoZSBzdHJlYW0uCnZvaWQgX2FzeW5jU3Rhckxpc3RlbkhlbHBlcih2YXIgb2JqZWN0LCB2YXIgYXdhaXRlcikgewogIGlmIChvYmplY3QgaXMhIF9TdHJlYW1JbXBsKSB7CiAgICByZXR1cm47CiAgfQogIC8vIGBvYmplY3RgIGlzIGEgYF9TdHJlYW1JbXBsYC4KICBvYmplY3QuX2F3YWl0ZXIgPSBhd2FpdGVyOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKdm9pZCBfYXN5bmNTdGFyTW92ZU5leHRIZWxwZXIodmFyIHN0cmVhbSkgewogIGlmIChzdHJlYW0gaXMhIF9TdHJlYW1JbXBsKSB7CiAgICByZXR1cm47CiAgfQogIC8vIHN0cmVhbSBpcyBhIF9TdHJlYW1JbXBsLgogIGlmIChzdHJlYW0uX2dlbmVyYXRvciA9PSBudWxsKSB7CiAgICAvLyBObyBnZW5lcmF0b3IgcmVnaXN0ZXJlZCwgdGhpcyBpc24ndCBhbiBhc3luYyogU3RyZWFtLgogICAgcmV0dXJuOwogIH0KICBfbW92ZU5leHREZWJ1Z2dlclN0ZXBDaGVjayhzdHJlYW0uX2dlbmVyYXRvcik7Cn0KCi8vIF9Bc3luY1N0YXJTdHJlYW1Db250cm9sbGVyIGlzIHVzZWQgYnkgdGhlIGNvbXBpbGVyIHRvIGltcGxlbWVudAovLyBhc3luYyogZ2VuZXJhdG9yIGZ1bmN0aW9ucy4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfQXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlcjxUPiB7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIFN0cmVhbUNvbnRyb2xsZXI8VD4gY29udHJvbGxlcjsKICBGdW5jdGlvbiBhc3luY1N0YXJCb2R5OwogIGJvb2wgaXNBZGRpbmcgPSBmYWxzZTsKICBib29sIG9uTGlzdGVuUmVjZWl2ZWQgPSBmYWxzZTsKICBib29sIGlzU2NoZWR1bGVkID0gZmFsc2U7CiAgYm9vbCBpc1N1c3BlbmRlZEF0WWllbGQgPSBmYWxzZTsKICBfRnV0dXJlIGNhbmNlbGxhdGlvbkZ1dHVyZSA9IG51bGw7CgogIFN0cmVhbTxUPiBnZXQgc3RyZWFtIHsKICAgIGZpbmFsIFN0cmVhbTxUPiBsb2NhbCA9IGNvbnRyb2xsZXIuc3RyZWFtOwogICAgaWYgKGxvY2FsIGlzIF9TdHJlYW1JbXBsPFQ+KSB7CiAgICAgIGxvY2FsLl9nZW5lcmF0b3IgPSBhc3luY1N0YXJCb2R5OwogICAgfQogICAgcmV0dXJuIGxvY2FsOwogIH0KCiAgdm9pZCBydW5Cb2R5KCkgewogICAgaXNTY2hlZHVsZWQgPSBmYWxzZTsKICAgIGlzU3VzcGVuZGVkQXRZaWVsZCA9IGZhbHNlOwogICAgYXN5bmNTdGFyQm9keSgpOwogIH0KCiAgdm9pZCBzY2hlZHVsZUdlbmVyYXRvcigpIHsKICAgIGlmIChpc1NjaGVkdWxlZCB8fCBjb250cm9sbGVyLmlzUGF1c2VkIHx8IGlzQWRkaW5nKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlzU2NoZWR1bGVkID0gdHJ1ZTsKICAgIHNjaGVkdWxlTWljcm90YXNrKHJ1bkJvZHkpOwogIH0KCiAgLy8gQWRkcyBlbGVtZW50IHRvIHN0cmVhbSwgcmV0dXJucyB0cnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIHRlcm1pbmF0ZQogIC8vIGV4ZWN1dGlvbiBvZiB0aGUgZ2VuZXJhdG9yLgogIC8vCiAgLy8gVE9ETyhoYXVzbmVyKTogUGVyIHNwZWMsIHRoZSBnZW5lcmF0b3Igc2hvdWxkIGJlIHN1c3BlbmRlZCBiZWZvcmUKICAvLyBleGl0aW5nIHdoZW4gdGhlIHN0cmVhbSBpcyBjbG9zZWQuIFdlIGNvdWxkIGFkZCBhIGdldHRlciBsaWtlIHRoaXM6CiAgLy8gZ2V0IGlzQ2FuY2VsbGVkID0+IGNvbnRyb2xsZXIuaGFzTGlzdGVuZXI7CiAgLy8gVGhlIGdlbmVyYXRvciB3b3VsZCB0cmFuc2xhdGUgYSAneWllbGQgZScgc3RhdGVtZW50IHRvCiAgLy8gY29udHJvbGxlci5hZGQoZSk7CiAgLy8gc3VzcGVuZDsKICAvLyBpZiAoY29udHJvbGxlci5pc0NhbmNlbGxlZCkgcmV0dXJuOwogIGJvb2wgYWRkKFQgZXZlbnQpIHsKICAgIGlmICghb25MaXN0ZW5SZWNlaXZlZCkgX2ZhdGFsKCJ5aWVsZCBiZWZvcmUgc3RyZWFtIGlzIGxpc3RlbmVkIHRvIik7CiAgICBpZiAoaXNTdXNwZW5kZWRBdFlpZWxkKSBfZmF0YWwoInVuZXhwZWN0ZWQgeWllbGQiKTsKICAgIC8vIElmIHN0cmVhbSBpcyBjYW5jZWxsZWQsIHRlbGwgY2FsbGVyIHRvIGV4aXQgdGhlIGFzeW5jIGdlbmVyYXRvci4KICAgIGlmICghY29udHJvbGxlci5oYXNMaXN0ZW5lcikgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGNvbnRyb2xsZXIuYWRkKGV2ZW50KTsKICAgIHNjaGVkdWxlR2VuZXJhdG9yKCk7CiAgICBpc1N1c3BlbmRlZEF0WWllbGQgPSB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8gQWRkcyB0aGUgZWxlbWVudHMgb2Ygc3RyZWFtIGludG8gdGhpcyBjb250cm9sbGVyJ3Mgc3RyZWFtLgogIC8vIFRoZSBnZW5lcmF0b3Igd2lsbCBiZSBzY2hlZHVsZWQgYWdhaW4gd2hlbiBhbGwgb2YgdGhlCiAgLy8gZWxlbWVudHMgb2YgdGhlIGFkZGVkIHN0cmVhbSBoYXZlIGJlZW4gY29uc3VtZWQuCiAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIHRlcm1pbmF0ZQogIC8vIGV4ZWN1dGlvbiBvZiB0aGUgZ2VuZXJhdG9yLgogIGJvb2wgYWRkU3RyZWFtKFN0cmVhbTxUPiBzdHJlYW0pIHsKICAgIGlmICghb25MaXN0ZW5SZWNlaXZlZCkgX2ZhdGFsKCJ5aWVsZCBiZWZvcmUgc3RyZWFtIGlzIGxpc3RlbmVkIHRvIik7CiAgICAvLyBJZiBzdHJlYW0gaXMgY2FuY2VsbGVkLCB0ZWxsIGNhbGxlciB0byBleGl0IHRoZSBhc3luYyBnZW5lcmF0b3IuCiAgICBpZiAoIWNvbnRyb2xsZXIuaGFzTGlzdGVuZXIpIHJldHVybiB0cnVlOwogICAgaXNBZGRpbmcgPSB0cnVlOwogICAgdmFyIHdoZW5Eb25lQWRkaW5nID0gY29udHJvbGxlci5hZGRTdHJlYW0oc3RyZWFtLCBjYW5jZWxPbkVycm9yOiBmYWxzZSk7CiAgICB3aGVuRG9uZUFkZGluZy50aGVuKChfKSB7CiAgICAgIGlzQWRkaW5nID0gZmFsc2U7CiAgICAgIHNjaGVkdWxlR2VuZXJhdG9yKCk7CiAgICAgIGlmICghaXNTY2hlZHVsZWQpIGlzU3VzcGVuZGVkQXRZaWVsZCA9IHRydWU7CiAgICB9KTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIGlmICgoY2FuY2VsbGF0aW9uRnV0dXJlICE9IG51bGwpICYmIGNhbmNlbGxhdGlvbkZ1dHVyZS5fbWF5Q29tcGxldGUpIHsKICAgICAgLy8gSWYgdGhlIHN0cmVhbSBoYXMgYmVlbiBjYW5jZWxsZWQsIGNvbXBsZXRlIHRoZSBjYW5jZWxsYXRpb24gZnV0dXJlCiAgICAgIC8vIHdpdGggdGhlIGVycm9yLgogICAgICBjYW5jZWxsYXRpb25GdXR1cmUuX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBJZiBzdHJlYW0gaXMgY2FuY2VsbGVkLCB0ZWxsIGNhbGxlciB0byBleGl0IHRoZSBhc3luYyBnZW5lcmF0b3IuCiAgICBpZiAoIWNvbnRyb2xsZXIuaGFzTGlzdGVuZXIpIHJldHVybjsKICAgIGNvbnRyb2xsZXIuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgLy8gTm8gbmVlZCB0byBzY2hlZHVsZSB0aGUgZ2VuZXJhdG9yIGJvZHkgaGVyZS4gVGhpcyBjb2RlIGlzIG9ubHkKICAgIC8vIGNhbGxlZCBmcm9tIHRoZSBjYXRjaCBjbGF1c2Ugb2YgdGhlIGltcGxpY2l0IHRyeS1jYXRjaC1maW5hbGx5CiAgICAvLyBhcm91bmQgdGhlIGdlbmVyYXRvciBib2R5LiBUaGF0IGlzLCB3ZSBhcmUgb24gdGhlIGVycm9yIHBhdGggb3V0CiAgICAvLyBvZiB0aGUgZ2VuZXJhdG9yIGFuZCBkbyBub3QgbmVlZCB0byBydW4gdGhlIGdlbmVyYXRvciBhZ2Fpbi4KICB9CgogIGNsb3NlKCkgewogICAgaWYgKChjYW5jZWxsYXRpb25GdXR1cmUgIT0gbnVsbCkgJiYgY2FuY2VsbGF0aW9uRnV0dXJlLl9tYXlDb21wbGV0ZSkgewogICAgICAvLyBJZiB0aGUgc3RyZWFtIGhhcyBiZWVuIGNhbmNlbGxlZCwgY29tcGxldGUgdGhlIGNhbmNlbGxhdGlvbiBmdXR1cmUKICAgICAgLy8gd2l0aCB0aGUgZXJyb3IuCiAgICAgIGNhbmNlbGxhdGlvbkZ1dHVyZS5fY29tcGxldGVXaXRoVmFsdWUobnVsbCk7CiAgICB9CiAgICBjb250cm9sbGVyLmNsb3NlKCk7CiAgfQoKICBfQXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlcih0aGlzLmFzeW5jU3RhckJvZHkpIHsKICAgIGNvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcigKICAgICAgICBvbkxpc3RlbjogdGhpcy5vbkxpc3RlbiwKICAgICAgICBvblJlc3VtZTogdGhpcy5vblJlc3VtZSwKICAgICAgICBvbkNhbmNlbDogdGhpcy5vbkNhbmNlbCk7CiAgfQoKICBvbkxpc3RlbigpIHsKICAgIGFzc2VydCghb25MaXN0ZW5SZWNlaXZlZCk7CiAgICBvbkxpc3RlblJlY2VpdmVkID0gdHJ1ZTsKICAgIHNjaGVkdWxlR2VuZXJhdG9yKCk7CiAgfQoKICBvblJlc3VtZSgpIHsKICAgIGlmIChpc1N1c3BlbmRlZEF0WWllbGQpIHsKICAgICAgc2NoZWR1bGVHZW5lcmF0b3IoKTsKICAgIH0KICB9CgogIG9uQ2FuY2VsKCkgewogICAgaWYgKGNvbnRyb2xsZXIuaXNDbG9zZWQpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoY2FuY2VsbGF0aW9uRnV0dXJlID09IG51bGwpIHsKICAgICAgY2FuY2VsbGF0aW9uRnV0dXJlID0gbmV3IF9GdXR1cmUoKTsKICAgICAgLy8gT25seSByZXN1bWUgdGhlIGdlbmVyYXRvciBpZiBpdCBpcyBzdXNwZW5kZWQgYXQgYSB5aWVsZC4KICAgICAgLy8gQ2FuY2VsbGF0aW9uIGRvZXMgbm90IGFmZmVjdCBhbiBhc3luYyBnZW5lcmF0b3IgdGhhdCBpcwogICAgICAvLyBzdXNwZW5kZWQgYXQgYW4gYXdhaXQuCiAgICAgIGlmIChpc1N1c3BlbmRlZEF0WWllbGQpIHsKICAgICAgICBzY2hlZHVsZUdlbmVyYXRvcigpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gY2FuY2VsbGF0aW9uRnV0dXJlOwogIH0KfQoKQHBhdGNoCnZvaWQgX3JldGhyb3coT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIG5hdGl2ZSAiQXN5bmNfcmV0aHJvdyI7CgpAcGF0Y2gKY2xhc3MgX0Z1dHVyZTxUPiB7CiAgLy8vIFRoZSBjbG9zdXJlIGltcGxlbWVudGluZyB0aGUgYXN5bmNbKl0tYm9keSB0aGF0IGlzIGBhd2FpdGBpbmcgdGhpcyBmdXR1cmUuCiAgRnVuY3Rpb24gX2F3YWl0ZXI7Cn0KCkBwYXRjaApjbGFzcyBfU3RyZWFtSW1wbDxUPiB7CiAgLy8vIFRoZSBjbG9zdXJlIGltcGxlbWVudGluZyB0aGUgYXN5bmNbKl0tYm9keSB0aGF0IGlzIGBhd2FpdGBpbmcgdGhpcyBmdXR1cmUuCiAgRnVuY3Rpb24gX2F3YWl0ZXI7CgogIC8vLyBUaGUgY2xvc3VyZSBpbXBsZW1lbnRpbmcgdGhlIGFzeW5jLWdlbmVyYXRvciBib2R5IHRoYXQgaXMgY3JlYXRpbmcgZXZlbnRzCiAgLy8vIGZvciB0aGlzIHN0cmVhbS4KICBGdW5jdGlvbiBfZ2VuZXJhdG9yOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKdm9pZCBfY29tcGxldGVPbkFzeW5jUmV0dXJuKENvbXBsZXRlciBjb21wbGV0ZXIsIE9iamVjdCB2YWx1ZSkgewogIGNvbXBsZXRlci5jb21wbGV0ZSh2YWx1ZSk7Cn0KCi8vLyBSZXR1cm5zIGEgW1N0YWNrVHJhY2VdIG9iamVjdCBjb250YWluaW5nIHRoZSBzeW5jaHJvbm91cyBwcmVmaXggZm9yIHRoaXMKLy8vIGFzeW5jaHJvbm91cyBtZXRob2QuCi8vCi8vIFRoaXMgbWV0aG9kIGlzIHJlY29nbml6ZWQuIEl0IHBlcmZvcm1zIGEgcnVudGltZSBjYWxsIGlmCi8vIEZMQUdfY2F1c2FsX2FzeW5jX3N0YWNrcyBpcyBlbmFibGVkIG9yIHJldHVybnMgYG51bGxgIG90aGVyd2lzZS4KQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCk9iamVjdCBfYXN5bmNTdGFja1RyYWNlSGVscGVyKEZ1bmN0aW9uIGFzeW5jX29wKQogICAgbmF0aXZlICJTdGFja1RyYWNlX2FzeW5jU3RhY2tUcmFjZUhlbHBlciI7CgovLyBUaGlzIG1ldGhvZCBpcyBhc20gaW50cmluc2lmaWVkLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKdm9pZCBfY2xlYXJBc3luY1RocmVhZFN0YWNrVHJhY2UoKQogICAgbmF0aXZlICJTdGFja1RyYWNlX2NsZWFyQXN5bmNUaHJlYWRTdGFja1RyYWNlIjsKCi8vIFRoaXMgbWV0aG9kIGlzIGFzbSBpbnRyaW5zaWZpZWQuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQp2b2lkIF9zZXRBc3luY1RocmVhZFN0YWNrVHJhY2UoU3RhY2tUcmFjZSBzdGFja1RyYWNlKQogICAgbmF0aXZlICJTdGFja1RyYWNlX3NldEFzeW5jVGhyZWFkU3RhY2tUcmFjZSI7Cgp2b2lkIF9tb3ZlTmV4dERlYnVnZ2VyU3RlcENoZWNrKEZ1bmN0aW9uIGFzeW5jX29wKQogICAgbmF0aXZlICJBc3luY1N0YXJNb3ZlTmV4dF9kZWJ1Z2dlclN0ZXBDaGVjayI7CoE+AE5OPAEPAU1QTSQBNAE6JCkcAS4mATgcJBwPASsBJyklDSkGBAEgEiUNKgYEARIJEwQBIzECAU4uKDFORlBQTU5ABU45BU9GTCA2OwIBTUgyMDo3PQIBTAQ+BDQVThsvIz4EHgVHTVAFUUQdOQIBRBo3IAwEIh0CASIsIAwEHiM9DAQxAgFDHxomHCIaGSEcIyUBGS8jKAYSBAETGSAVBAEdOg4GGCAEAUkhBUdJMDwYDikWSThIIxMGGxkfEgQBQDs2MSElSUguFU0eGBszCBIEATdLTBk8DgZIKSxGRkhEBAEMS0wZMwYYBAEzJyEhIgQBDx8dGQQBDx4bBgQBDx8TBiYqQkEgIB0IBh8EAgEHSwEHE1EVAgEHF1EVAVAXFwIBIkEdAgFNGQM8RBwxLwEkIiM0ASQiNjIBMzIBIWRhcnQ6YXN5bmMtcGF0Y2gvYXN5bmNfcGF0Y2guZGFydFtvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vbGliL3NjaGVkdWxlX21pY3JvdGFza19wYXRjaC5kYXJ0g50vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vIHBhcnQgb2YgImFzeW5jX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIF9Bc3luY1J1biB7CiAgQHBhdGNoCiAgc3RhdGljIHZvaWQgX3NjaGVkdWxlSW1tZWRpYXRlKHZvaWQgY2FsbGJhY2soKSkgewogICAgaWYgKF9TY2hlZHVsZUltbWVkaWF0ZS5fY2xvc3VyZSA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJNaWNyb3Rhc2tzIGFyZSBub3Qgc3VwcG9ydGVkIik7CiAgICB9CiAgICBfU2NoZWR1bGVJbW1lZGlhdGUuX2Nsb3N1cmUoY2FsbGJhY2spOwogIH0KfQoKdHlwZWRlZiB2b2lkIF9TY2hlZHVsZUltbWVkaWF0ZUNsb3N1cmUodm9pZCBjYWxsYmFjaygpKTsKCmNsYXNzIF9TY2hlZHVsZUltbWVkaWF0ZSB7CiAgc3RhdGljIF9TY2hlZHVsZUltbWVkaWF0ZUNsb3N1cmUgX2Nsb3N1cmU7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQp2b2lkIF9zZXRTY2hlZHVsZUltbWVkaWF0ZUNsb3N1cmUoX1NjaGVkdWxlSW1tZWRpYXRlQ2xvc3VyZSBjbG9zdXJlKSB7CiAgX1NjaGVkdWxlSW1tZWRpYXRlLl9jbG9zdXJlID0gY2xvc3VyZTsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCnZvaWQgX2Vuc3VyZVNjaGVkdWxlSW1tZWRpYXRlKCkgewogIF9Bc3luY1J1bi5fc2NoZWR1bGVJbW1lZGlhdGUoX3N0YXJ0TWljcm90YXNrTG9vcCk7Cn0KJABOTjwBDwEfAQcSCTQvQgYrBAIBOQEbLQIBIkcpAgEiIjUCAS5kYXJ0OmFzeW5jLXBhdGNoL3NjaGVkdWxlX21pY3JvdGFza19wYXRjaC5kYXJ0Tm9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL19pbnRlcm5hbC92bS9saWIvdGltZXJfcGF0Y2guZGFydIX+Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgovLyBwYXJ0IG9mICJhc3luY19wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBUaW1lciB7CiAgQHBhdGNoCiAgc3RhdGljIFRpbWVyIF9jcmVhdGVUaW1lcihEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBjYWxsYmFjaygpKSB7CiAgICAvLyBUT0RPKGlwb3N2YSk6IFJlbW92ZSBfVGltZXJGYWN0b3J5IGFuZCB1c2UgVk1MaWJyYXJ5SG9va3MgZXhjbHVzaXZlbHkuCiAgICBpZiAoX1RpbWVyRmFjdG9yeS5fZmFjdG9yeSA9PSBudWxsKSB7CiAgICAgIF9UaW1lckZhY3RvcnkuX2ZhY3RvcnkgPSBWTUxpYnJhcnlIb29rcy50aW1lckZhY3Rvcnk7CiAgICB9CiAgICBpZiAoX1RpbWVyRmFjdG9yeS5fZmFjdG9yeSA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJUaW1lciBpbnRlcmZhY2Ugbm90IHN1cHBvcnRlZC4iKTsKICAgIH0KICAgIGludCBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5pbk1pbGxpc2Vjb25kczsKICAgIGlmIChtaWxsaXNlY29uZHMgPCAwKSBtaWxsaXNlY29uZHMgPSAwOwogICAgcmV0dXJuIF9UaW1lckZhY3RvcnkuX2ZhY3RvcnkobWlsbGlzZWNvbmRzLCAoXykgewogICAgICBjYWxsYmFjaygpOwogICAgfSwgZmFsc2UpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIFRpbWVyIF9jcmVhdGVQZXJpb2RpY1RpbWVyKAogICAgICBEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBjYWxsYmFjayhUaW1lciB0aW1lcikpIHsKICAgIC8vIFRPRE8oaXBvc3ZhKTogUmVtb3ZlIF9UaW1lckZhY3RvcnkgYW5kIHVzZSBWTUxpYnJhcnlIb29rcyBleGNsdXNpdmVseS4KICAgIF9UaW1lckZhY3RvcnkuX2ZhY3RvcnkgPz89IFZNTGlicmFyeUhvb2tzLnRpbWVyRmFjdG9yeTsKICAgIGlmIChfVGltZXJGYWN0b3J5Ll9mYWN0b3J5ID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlRpbWVyIGludGVyZmFjZSBub3Qgc3VwcG9ydGVkLiIpOwogICAgfQogICAgaW50IG1pbGxpc2Vjb25kcyA9IGR1cmF0aW9uLmluTWlsbGlzZWNvbmRzOwogICAgaWYgKG1pbGxpc2Vjb25kcyA8IDApIG1pbGxpc2Vjb25kcyA9IDA7CiAgICByZXR1cm4gX1RpbWVyRmFjdG9yeS5fZmFjdG9yeShtaWxsaXNlY29uZHMsIGNhbGxiYWNrLCB0cnVlKTsKICB9Cn0KCnR5cGVkZWYgVGltZXIgX1RpbWVyRmFjdG9yeUNsb3N1cmUoCiAgICBpbnQgbWlsbGlzZWNvbmRzLCB2b2lkIGNhbGxiYWNrKFRpbWVyIHRpbWVyKSwgYm9vbCByZXBlYXRpbmcpOwoKY2xhc3MgX1RpbWVyRmFjdG9yeSB7CiAgc3RhdGljIF9UaW1lckZhY3RvcnlDbG9zdXJlIF9mYWN0b3J5Owp9CjAATk48AQ8BHwEHDglCTio8BipEBjAsNhIPBAEJJTdOPCpEBjAsQQQCASRDARYoAgEhZGFydDphc3luYy1wYXRjaC90aW1lcl9wYXRjaC5kYXJ0U29yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2FzeW5jL2Jyb2FkY2FzdF9zdHJlYW1fY29udHJvbGxlci5kYXJ0vJ4vLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5hc3luYzsKCmNsYXNzIF9Ccm9hZGNhc3RTdHJlYW08VD4gZXh0ZW5kcyBfQ29udHJvbGxlclN0cmVhbTxUPiB7CiAgX0Jyb2FkY2FzdFN0cmVhbShfU3RyZWFtQ29udHJvbGxlckxpZmVjeWNsZTxUPiBjb250cm9sbGVyKQogICAgICA6IHN1cGVyKGNvbnRyb2xsZXIpOwoKICBib29sIGdldCBpc0Jyb2FkY2FzdCA9PiB0cnVlOwp9CgpjbGFzcyBfQnJvYWRjYXN0U3Vic2NyaXB0aW9uPFQ+IGV4dGVuZHMgX0NvbnRyb2xsZXJTdWJzY3JpcHRpb248VD4gewogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0VWRU5UX0lEID0gMTsKICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9GSVJJTkcgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX1JFTU9WRV9BRlRFUl9GSVJJTkcgPSA0OwogIC8vIFRPRE8obHJuKTogVXNlIHRoZSBfc3RhdGUgZmllbGQgb24gX0NvbnRyb2xsZXJTdWJzY3JpcHRpb24gdG8KICAvLyBhbHNvIHN0b3JlIHRoaXMgc3RhdGUuIFJlcXVpcmVzIHRoYXQgdGhlIHN1YnNjcmlwdGlvbiBpbXBsZW1lbnRhdGlvbgogIC8vIGRvZXMgbm90IGFzc3VtZSB0aGF0IGl0J3MgdXNlIG9mIHRoZSBzdGF0ZSBpbnRlZ2VyIGlzIHRoZSBvbmx5IHVzZS4KICBpbnQgX2V2ZW50U3RhdGUgPSAwOyAvLyBJbml0aWFsaXplZCB0byBoZWxwIGRhcnQyanMgdHlwZSBpbmZlcmVuY2UuCgogIF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gX25leHQ7CiAgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBfcHJldmlvdXM7CgogIF9Ccm9hZGNhc3RTdWJzY3JpcHRpb24oX1N0cmVhbUNvbnRyb2xsZXJMaWZlY3ljbGU8VD4gY29udHJvbGxlciwKICAgICAgdm9pZCBvbkRhdGEoVCBkYXRhKSwgRnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yKQogICAgICA6IHN1cGVyKGNvbnRyb2xsZXIsIG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yKSB7CiAgICBfbmV4dCA9IF9wcmV2aW91cyA9IHRoaXM7CiAgfQoKICBib29sIF9leHBlY3RzRXZlbnQoaW50IGV2ZW50SWQpID0+IChfZXZlbnRTdGF0ZSAmIF9TVEFURV9FVkVOVF9JRCkgPT0gZXZlbnRJZDsKCiAgdm9pZCBfdG9nZ2xlRXZlbnRJZCgpIHsKICAgIF9ldmVudFN0YXRlIF49IF9TVEFURV9FVkVOVF9JRDsKICB9CgogIGJvb2wgZ2V0IF9pc0ZpcmluZyA9PiAoX2V2ZW50U3RhdGUgJiBfU1RBVEVfRklSSU5HKSAhPSAwOwoKICB2b2lkIF9zZXRSZW1vdmVBZnRlckZpcmluZygpIHsKICAgIGFzc2VydChfaXNGaXJpbmcpOwogICAgX2V2ZW50U3RhdGUgfD0gX1NUQVRFX1JFTU9WRV9BRlRFUl9GSVJJTkc7CiAgfQoKICBib29sIGdldCBfcmVtb3ZlQWZ0ZXJGaXJpbmcgPT4KICAgICAgKF9ldmVudFN0YXRlICYgX1NUQVRFX1JFTU9WRV9BRlRFUl9GSVJJTkcpICE9IDA7CgogIC8vIFRoZSBjb250cm9sbGVyLl9yZWNvcmRQYXVzZSBkb2Vzbid0IGRvIGFueXRoaW5nIGZvciBhIGJyb2FkY2FzdCBjb250cm9sbGVyLAogIC8vIHNvIHdlIGRvbid0IGJvdGhlciBjYWxsaW5nIGl0LgogIHZvaWQgX29uUGF1c2UoKSB7fQoKICAvLyBUaGUgY29udHJvbGxlci5fcmVjb3JkUmVzdW1lIGRvZXNuJ3QgZG8gYW55dGhpbmcgZm9yIGEgYnJvYWRjYXN0CiAgLy8gY29udHJvbGxlciwgc28gd2UgZG9uJ3QgYm90aGVyIGNhbGxpbmcgaXQuCiAgdm9pZCBfb25SZXN1bWUoKSB7fQoKICAvLyBfb25DYW5jZWwgaXMgaW5oZXJpdGVkLgp9CgphYnN0cmFjdCBjbGFzcyBfQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcjxUPgogICAgaW1wbGVtZW50cyBfU3RyZWFtQ29udHJvbGxlckJhc2U8VD4gewogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0lOSVRJQUwgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0VWRU5UX0lEID0gMTsKICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9GSVJJTkcgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0NMT1NFRCA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfQUREU1RSRUFNID0gODsKCiAgQ29udHJvbGxlckNhbGxiYWNrIG9uTGlzdGVuOwogIENvbnRyb2xsZXJDYW5jZWxDYWxsYmFjayBvbkNhbmNlbDsKCiAgLy8gU3RhdGUgb2YgdGhlIGNvbnRyb2xsZXIuCiAgaW50IF9zdGF0ZTsKCiAgLy8gRG91YmxlLWxpbmtlZCBsaXN0IG9mIGFjdGl2ZSBsaXN0ZW5lcnMuCiAgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBfZmlyc3RTdWJzY3JpcHRpb247CiAgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBfbGFzdFN1YnNjcmlwdGlvbjsKCiAgLy8gRXh0cmEgc3RhdGUgdXNlZCBkdXJpbmcgYW4gW2FkZFN0cmVhbV0gY2FsbC4KICBfQWRkU3RyZWFtU3RhdGU8VD4gX2FkZFN0cmVhbVN0YXRlOwoKICAvKioKICAgKiBGdXR1cmUgcmV0dXJuZWQgYnkgW2Nsb3NlXSBhbmQgW2RvbmVdLgogICAqCiAgICogVGhlIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2hlbmV2ZXIgdGhlIGRvbmUgZXZlbnQgaGFzIGJlZW4gc2VudCB0byBhbGwKICAgKiByZWxldmFudCBsaXN0ZW5lcnMuCiAgICogVGhlIHJlbGV2YW50IGxpc3RlbmVycyBhcmUgdGhlIG9uZXMgdGhhdCB3ZXJlIGxpc3RlbmluZyB3aGVuIFtjbG9zZV0gd2FzCiAgICogY2FsbGVkLiBXaGVuIGFsbCBvZiB0aGVzZSBoYXZlIGJlZW4gY2FuY2VsZWQgKHNlbmRpbmcgdGhlIGRvbmUgZXZlbnQgbWFrZXMKICAgKiB0aGVtIGNhbmNlbCwgYnV0IHRoZXkgY2FuIGFsc28gYmUgY2FuY2VsZWQgYmVmb3JlIHNlbmRpbmcgdGhlIGV2ZW50KSwKICAgKiB0aGlzIGZ1dHVyZSBjb21wbGV0ZXMuCiAgICoKICAgKiBBbnkgYXR0ZW1wdCB0byBsaXN0ZW4gYWZ0ZXIgY2FsbGluZyBbY2xvc2VdIHdpbGwgdGhyb3csIHNvIHRoZXJlIHdvbid0CiAgICogYmUgYW55IGZ1cnRoZXIgbGlzdGVuZXJzLgogICAqLwogIF9GdXR1cmUgX2RvbmVGdXR1cmU7CgogIF9Ccm9hZGNhc3RTdHJlYW1Db250cm9sbGVyKHRoaXMub25MaXN0ZW4sIHRoaXMub25DYW5jZWwpCiAgICAgIDogX3N0YXRlID0gX1NUQVRFX0lOSVRJQUw7CgogIENvbnRyb2xsZXJDYWxsYmFjayBnZXQgb25QYXVzZSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiQnJvYWRjYXN0IHN0cmVhbSBjb250cm9sbGVycyBkbyBub3Qgc3VwcG9ydCBwYXVzZSBjYWxsYmFja3MiKTsKICB9CgogIHZvaWQgc2V0IG9uUGF1c2Uodm9pZCBvblBhdXNlSGFuZGxlcigpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiQnJvYWRjYXN0IHN0cmVhbSBjb250cm9sbGVycyBkbyBub3Qgc3VwcG9ydCBwYXVzZSBjYWxsYmFja3MiKTsKICB9CgogIENvbnRyb2xsZXJDYWxsYmFjayBnZXQgb25SZXN1bWUgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkJyb2FkY2FzdCBzdHJlYW0gY29udHJvbGxlcnMgZG8gbm90IHN1cHBvcnQgcGF1c2UgY2FsbGJhY2tzIik7CiAgfQoKICB2b2lkIHNldCBvblJlc3VtZSh2b2lkIG9uUmVzdW1lSGFuZGxlcigpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiQnJvYWRjYXN0IHN0cmVhbSBjb250cm9sbGVycyBkbyBub3Qgc3VwcG9ydCBwYXVzZSBjYWxsYmFja3MiKTsKICB9CgogIC8vIFN0cmVhbUNvbnRyb2xsZXIgaW50ZXJmYWNlLgoKICBTdHJlYW08VD4gZ2V0IHN0cmVhbSA9PiBuZXcgX0Jyb2FkY2FzdFN0cmVhbTxUPih0aGlzKTsKCiAgU3RyZWFtU2luazxUPiBnZXQgc2luayA9PiBuZXcgX1N0cmVhbVNpbmtXcmFwcGVyPFQ+KHRoaXMpOwoKICBib29sIGdldCBpc0Nsb3NlZCA9PiAoX3N0YXRlICYgX1NUQVRFX0NMT1NFRCkgIT0gMDsKCiAgLyoqCiAgICogQSBicm9hZGNhc3QgY29udHJvbGxlciBpcyBuZXZlciBwYXVzZWQuCiAgICoKICAgKiBFYWNoIHJlY2VpdmluZyBzdHJlYW0gbWF5IGJlIHBhdXNlZCBpbmRpdmlkdWFsbHksIGFuZCB0aGV5IGhhbmRsZSB0aGVpcgogICAqIG93biBidWZmZXJpbmcuCiAgICovCiAgYm9vbCBnZXQgaXNQYXVzZWQgPT4gZmFsc2U7CgogIC8qKiBXaGV0aGVyIHRoZXJlIGFyZSBjdXJyZW50bHkgb25lIG9yIG1vcmUgc3Vic2NyaWJlcnMuICovCiAgYm9vbCBnZXQgaGFzTGlzdGVuZXIgPT4gIV9pc0VtcHR5OwoKICAvKioKICAgKiBUZXN0IHdoZXRoZXIgdGhlIHN0cmVhbSBoYXMgZXhhY3RseSBvbmUgbGlzdGVuZXIuCiAgICoKICAgKiBBc3N1bWVzIHRoYXQgdGhlIHN0cmVhbSBoYXMgYSBsaXN0ZW5lciAobm90IFtfaXNFbXB0eV0pLgogICAqLwogIGJvb2wgZ2V0IF9oYXNPbmVMaXN0ZW5lciB7CiAgICBhc3NlcnQoIV9pc0VtcHR5KTsKICAgIHJldHVybiBpZGVudGljYWwoX2ZpcnN0U3Vic2NyaXB0aW9uLCBfbGFzdFN1YnNjcmlwdGlvbik7CiAgfQoKICAvKiogV2hldGhlciBhbiBldmVudCBpcyBiZWluZyBmaXJlZCAoc2VudCB0byBzb21lLCBidXQgbm90IGFsbCwgbGlzdGVuZXJzKS4gKi8KICBib29sIGdldCBfaXNGaXJpbmcgPT4gKF9zdGF0ZSAmIF9TVEFURV9GSVJJTkcpICE9IDA7CgogIGJvb2wgZ2V0IF9pc0FkZGluZ1N0cmVhbSA9PiAoX3N0YXRlICYgX1NUQVRFX0FERFNUUkVBTSkgIT0gMDsKCiAgYm9vbCBnZXQgX21heUFkZEV2ZW50ID0+IChfc3RhdGUgPCBfU1RBVEVfQ0xPU0VEKTsKCiAgX0Z1dHVyZSBfZW5zdXJlRG9uZUZ1dHVyZSgpIHsKICAgIGlmIChfZG9uZUZ1dHVyZSAhPSBudWxsKSByZXR1cm4gX2RvbmVGdXR1cmU7CiAgICByZXR1cm4gX2RvbmVGdXR1cmUgPSBuZXcgX0Z1dHVyZSgpOwogIH0KCiAgLy8gTGlua2VkIGxpc3QgaGVscGVycwoKICBib29sIGdldCBfaXNFbXB0eSA9PiBfZmlyc3RTdWJzY3JpcHRpb24gPT0gbnVsbDsKCiAgLyoqIEFkZHMgc3Vic2NyaXB0aW9uIHRvIGxpbmtlZCBsaXN0IG9mIGFjdGl2ZSBsaXN0ZW5lcnMuICovCiAgdm9pZCBfYWRkTGlzdGVuZXIoX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pIHsKICAgIGFzc2VydChpZGVudGljYWwoc3Vic2NyaXB0aW9uLl9uZXh0LCBzdWJzY3JpcHRpb24pKTsKICAgIHN1YnNjcmlwdGlvbi5fZXZlbnRTdGF0ZSA9IChfc3RhdGUgJiBfU1RBVEVfRVZFTlRfSUQpOwogICAgLy8gSW5zZXJ0IGluIGxpbmtlZCBsaXN0IGFzIGxhc3Qgc3Vic2NyaXB0aW9uLgogICAgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBvbGRMYXN0ID0gX2xhc3RTdWJzY3JpcHRpb247CiAgICBfbGFzdFN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbjsKICAgIHN1YnNjcmlwdGlvbi5fbmV4dCA9IG51bGw7CiAgICBzdWJzY3JpcHRpb24uX3ByZXZpb3VzID0gb2xkTGFzdDsKICAgIGlmIChvbGRMYXN0ID09IG51bGwpIHsKICAgICAgX2ZpcnN0U3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9uOwogICAgfSBlbHNlIHsKICAgICAgb2xkTGFzdC5fbmV4dCA9IHN1YnNjcmlwdGlvbjsKICAgIH0KICB9CgogIHZvaWQgX3JlbW92ZUxpc3RlbmVyKF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKSB7CiAgICBhc3NlcnQoaWRlbnRpY2FsKHN1YnNjcmlwdGlvbi5fY29udHJvbGxlciwgdGhpcykpOwogICAgYXNzZXJ0KCFpZGVudGljYWwoc3Vic2NyaXB0aW9uLl9uZXh0LCBzdWJzY3JpcHRpb24pKTsKICAgIF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gcHJldmlvdXMgPSBzdWJzY3JpcHRpb24uX3ByZXZpb3VzOwogICAgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBuZXh0ID0gc3Vic2NyaXB0aW9uLl9uZXh0OwogICAgaWYgKHByZXZpb3VzID09IG51bGwpIHsKICAgICAgLy8gVGhpcyB3YXMgdGhlIGZpcnN0IHN1YnNjcmlwdGlvbi4KICAgICAgX2ZpcnN0U3Vic2NyaXB0aW9uID0gbmV4dDsKICAgIH0gZWxzZSB7CiAgICAgIHByZXZpb3VzLl9uZXh0ID0gbmV4dDsKICAgIH0KICAgIGlmIChuZXh0ID09IG51bGwpIHsKICAgICAgLy8gVGhpcyB3YXMgdGhlIGxhc3Qgc3Vic2NyaXB0aW9uLgogICAgICBfbGFzdFN1YnNjcmlwdGlvbiA9IHByZXZpb3VzOwogICAgfSBlbHNlIHsKICAgICAgbmV4dC5fcHJldmlvdXMgPSBwcmV2aW91czsKICAgIH0KCiAgICBzdWJzY3JpcHRpb24uX25leHQgPSBzdWJzY3JpcHRpb24uX3ByZXZpb3VzID0gc3Vic2NyaXB0aW9uOwogIH0KCiAgLy8gX1N0cmVhbUNvbnRyb2xsZXJMaWZlY3ljbGUgaW50ZXJmYWNlLgoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gX3N1YnNjcmliZSh2b2lkIG9uRGF0YShUIGRhdGEpLCBGdW5jdGlvbiBvbkVycm9yLAogICAgICB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3IpIHsKICAgIGlmIChpc0Nsb3NlZCkgewogICAgICBvbkRvbmUgPz89IF9udWxsRG9uZUhhbmRsZXI7CiAgICAgIHJldHVybiBuZXcgX0RvbmVTdHJlYW1TdWJzY3JpcHRpb248VD4ob25Eb25lKTsKICAgIH0KICAgIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPSBuZXcgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPigKICAgICAgICB0aGlzLCBvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcik7CiAgICBfYWRkTGlzdGVuZXIoc3Vic2NyaXB0aW9uKTsKICAgIGlmIChpZGVudGljYWwoX2ZpcnN0U3Vic2NyaXB0aW9uLCBfbGFzdFN1YnNjcmlwdGlvbikpIHsKICAgICAgLy8gT25seSBvbmUgbGlzdGVuZXIsIHNvIGl0IG11c3QgYmUgdGhlIGZpcnN0IGxpc3RlbmVyLgogICAgICBfcnVuR3VhcmRlZChvbkxpc3Rlbik7CiAgICB9CiAgICByZXR1cm4gc3Vic2NyaXB0aW9uOwogIH0KCiAgRnV0dXJlIF9yZWNvcmRDYW5jZWwoU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YikgewogICAgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPSBzdWI7CiAgICAvLyBJZiBhbHJlYWR5IHJlbW92ZWQgYnkgdGhlIHN0cmVhbSwgZG9uJ3QgcmVtb3ZlIGl0IGFnYWluLgogICAgaWYgKGlkZW50aWNhbChzdWJzY3JpcHRpb24uX25leHQsIHN1YnNjcmlwdGlvbikpIHJldHVybiBudWxsOwogICAgaWYgKHN1YnNjcmlwdGlvbi5faXNGaXJpbmcpIHsKICAgICAgc3Vic2NyaXB0aW9uLl9zZXRSZW1vdmVBZnRlckZpcmluZygpOwogICAgfSBlbHNlIHsKICAgICAgX3JlbW92ZUxpc3RlbmVyKHN1YnNjcmlwdGlvbik7CiAgICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgZmlyaW5nIGFuIGV2ZW50LCB0aGUgZW1wdHktY2hlY2sgaXMgcGVyZm9ybWVkIGF0CiAgICAgIC8vIHRoZSBlbmQgb2YgdGhlIGxpc3RlbmVyIGxvb3AgaW5zdGVhZCBvZiBoZXJlLgogICAgICBpZiAoIV9pc0ZpcmluZyAmJiBfaXNFbXB0eSkgewogICAgICAgIF9jYWxsT25DYW5jZWwoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIF9yZWNvcmRQYXVzZShTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKSB7fQogIHZvaWQgX3JlY29yZFJlc3VtZShTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKSB7fQoKICAvLyBFdmVudFNpbmsgaW50ZXJmYWNlLgoKICBFcnJvciBfYWRkRXZlbnRFcnJvcigpIHsKICAgIGlmIChpc0Nsb3NlZCkgewogICAgICByZXR1cm4gbmV3IFN0YXRlRXJyb3IoIkNhbm5vdCBhZGQgbmV3IGV2ZW50cyBhZnRlciBjYWxsaW5nIGNsb3NlIik7CiAgICB9CiAgICBhc3NlcnQoX2lzQWRkaW5nU3RyZWFtKTsKICAgIHJldHVybiBuZXcgU3RhdGVFcnJvcigiQ2Fubm90IGFkZCBuZXcgZXZlbnRzIHdoaWxlIGRvaW5nIGFuIGFkZFN0cmVhbSIpOwogIH0KCiAgdm9pZCBhZGQoVCBkYXRhKSB7CiAgICBpZiAoIV9tYXlBZGRFdmVudCkgdGhyb3cgX2FkZEV2ZW50RXJyb3IoKTsKICAgIF9zZW5kRGF0YShkYXRhKTsKICB9CgogIHZvaWQgYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgZXJyb3IgPSBfbm9uTnVsbEVycm9yKGVycm9yKTsKICAgIGlmICghX21heUFkZEV2ZW50KSB0aHJvdyBfYWRkRXZlbnRFcnJvcigpOwogICAgQXN5bmNFcnJvciByZXBsYWNlbWVudCA9IFpvbmUuY3VycmVudC5lcnJvckNhbGxiYWNrKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIGlmIChyZXBsYWNlbWVudCAhPSBudWxsKSB7CiAgICAgIGVycm9yID0gX25vbk51bGxFcnJvcihyZXBsYWNlbWVudC5lcnJvcik7CiAgICAgIHN0YWNrVHJhY2UgPSByZXBsYWNlbWVudC5zdGFja1RyYWNlOwogICAgfQogICAgX3NlbmRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICBGdXR1cmUgY2xvc2UoKSB7CiAgICBpZiAoaXNDbG9zZWQpIHsKICAgICAgYXNzZXJ0KF9kb25lRnV0dXJlICE9IG51bGwpOwogICAgICByZXR1cm4gX2RvbmVGdXR1cmU7CiAgICB9CiAgICBpZiAoIV9tYXlBZGRFdmVudCkgdGhyb3cgX2FkZEV2ZW50RXJyb3IoKTsKICAgIF9zdGF0ZSB8PSBfU1RBVEVfQ0xPU0VEOwogICAgRnV0dXJlIGRvbmVGdXR1cmUgPSBfZW5zdXJlRG9uZUZ1dHVyZSgpOwogICAgX3NlbmREb25lKCk7CiAgICByZXR1cm4gZG9uZUZ1dHVyZTsKICB9CgogIEZ1dHVyZSBnZXQgZG9uZSA9PiBfZW5zdXJlRG9uZUZ1dHVyZSgpOwoKICBGdXR1cmUgYWRkU3RyZWFtKFN0cmVhbTxUPiBzdHJlYW0sIHtib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICBpZiAoIV9tYXlBZGRFdmVudCkgdGhyb3cgX2FkZEV2ZW50RXJyb3IoKTsKICAgIF9zdGF0ZSB8PSBfU1RBVEVfQUREU1RSRUFNOwogICAgX2FkZFN0cmVhbVN0YXRlID0gbmV3IF9BZGRTdHJlYW1TdGF0ZSh0aGlzLCBzdHJlYW0sIGNhbmNlbE9uRXJyb3IgPz8gZmFsc2UpOwogICAgcmV0dXJuIF9hZGRTdHJlYW1TdGF0ZS5hZGRTdHJlYW1GdXR1cmU7CiAgfQoKICAvLyBfRXZlbnRTaW5rIGludGVyZmFjZSwgY2FsbGVkIGZyb20gQWRkU3RyZWFtU3RhdGUuCiAgdm9pZCBfYWRkKFQgZGF0YSkgewogICAgX3NlbmREYXRhKGRhdGEpOwogIH0KCiAgdm9pZCBfYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIF9zZW5kRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgdm9pZCBfY2xvc2UoKSB7CiAgICBhc3NlcnQoX2lzQWRkaW5nU3RyZWFtKTsKICAgIF9BZGRTdHJlYW1TdGF0ZSBhZGRTdGF0ZSA9IF9hZGRTdHJlYW1TdGF0ZTsKICAgIF9hZGRTdHJlYW1TdGF0ZSA9IG51bGw7CiAgICBfc3RhdGUgJj0gfl9TVEFURV9BRERTVFJFQU07CiAgICBhZGRTdGF0ZS5jb21wbGV0ZSgpOwogIH0KCiAgLy8gRXZlbnQgaGFuZGxpbmcuCiAgdm9pZCBfZm9yRWFjaExpc3RlbmVyKAogICAgICB2b2lkIGFjdGlvbihfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikpIHsKICAgIGlmIChfaXNGaXJpbmcpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoCiAgICAgICAgICAiQ2Fubm90IGZpcmUgbmV3IGV2ZW50LiBDb250cm9sbGVyIGlzIGFscmVhZHkgZmlyaW5nIGFuIGV2ZW50Iik7CiAgICB9CiAgICBpZiAoX2lzRW1wdHkpIHJldHVybjsKCiAgICAvLyBHZXQgZXZlbnQgaWQgb2YgdGhpcyBldmVudC4KICAgIGludCBpZCA9IChfc3RhdGUgJiBfU1RBVEVfRVZFTlRfSUQpOwogICAgLy8gU3RhcnQgZmlyaW5nIChzZXQgdGhlIF9TVEFURV9GSVJJTkcgYml0KS4gV2UgZG9uJ3QgZG8gW29uQ2FuY2VsXQogICAgLy8gY2FsbGJhY2tzIHdoaWxlIGZpcmluZywgYW5kIHdlIHByZXZlbnQgcmVlbnRyYW5jeSBvZiB0aGlzIGZ1bmN0aW9uLgogICAgLy8KICAgIC8vIFNldCBbX3N0YXRlXSdzIGV2ZW50IGlkIHRvIHRoZSBuZXh0IGV2ZW50J3MgaWQuCiAgICAvLyBBbnkgbGlzdGVuZXJzIGFkZGVkIHdoaWxlIGZpcmluZyB0aGlzIGV2ZW50IHdpbGwgZXhwZWN0IHRoZSBuZXh0IGV2ZW50LAogICAgLy8gbm90IHRoaXMgb25lLCBhbmQgd29uJ3QgZ2V0IG5vdGlmaWVkLgogICAgX3N0YXRlIF49IF9TVEFURV9FVkVOVF9JRCB8IF9TVEFURV9GSVJJTkc7CiAgICBfQnJvYWRjYXN0U3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiA9IF9maXJzdFN1YnNjcmlwdGlvbjsKICAgIHdoaWxlIChzdWJzY3JpcHRpb24gIT0gbnVsbCkgewogICAgICBpZiAoc3Vic2NyaXB0aW9uLl9leHBlY3RzRXZlbnQoaWQpKSB7CiAgICAgICAgc3Vic2NyaXB0aW9uLl9ldmVudFN0YXRlIHw9IF9Ccm9hZGNhc3RTdWJzY3JpcHRpb24uX1NUQVRFX0ZJUklORzsKICAgICAgICBhY3Rpb24oc3Vic2NyaXB0aW9uKTsKICAgICAgICBzdWJzY3JpcHRpb24uX3RvZ2dsZUV2ZW50SWQoKTsKICAgICAgICBfQnJvYWRjYXN0U3Vic2NyaXB0aW9uPFQ+IG5leHQgPSBzdWJzY3JpcHRpb24uX25leHQ7CiAgICAgICAgaWYgKHN1YnNjcmlwdGlvbi5fcmVtb3ZlQWZ0ZXJGaXJpbmcpIHsKICAgICAgICAgIF9yZW1vdmVMaXN0ZW5lcihzdWJzY3JpcHRpb24pOwogICAgICAgIH0KICAgICAgICBzdWJzY3JpcHRpb24uX2V2ZW50U3RhdGUgJj0gfl9Ccm9hZGNhc3RTdWJzY3JpcHRpb24uX1NUQVRFX0ZJUklORzsKICAgICAgICBzdWJzY3JpcHRpb24gPSBuZXh0OwogICAgICB9IGVsc2UgewogICAgICAgIHN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbi5fbmV4dDsKICAgICAgfQogICAgfQogICAgX3N0YXRlICY9IH5fU1RBVEVfRklSSU5HOwoKICAgIGlmIChfaXNFbXB0eSkgewogICAgICBfY2FsbE9uQ2FuY2VsKCk7CiAgICB9CiAgfQoKICB2b2lkIF9jYWxsT25DYW5jZWwoKSB7CiAgICBhc3NlcnQoX2lzRW1wdHkpOwogICAgaWYgKGlzQ2xvc2VkICYmIF9kb25lRnV0dXJlLl9tYXlDb21wbGV0ZSkgewogICAgICAvLyBXaGVuIGNsb3NlZCwgX2RvbmVGdXR1cmUgaXMgbm90IG51bGwuCiAgICAgIF9kb25lRnV0dXJlLl9hc3luY0NvbXBsZXRlKG51bGwpOwogICAgfQogICAgX3J1bkd1YXJkZWQob25DYW5jZWwpOwogIH0KfQoKY2xhc3MgX1N5bmNCcm9hZGNhc3RTdHJlYW1Db250cm9sbGVyPFQ+IGV4dGVuZHMgX0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXI8VD4KICAgIGltcGxlbWVudHMgU3luY2hyb25vdXNTdHJlYW1Db250cm9sbGVyPFQ+IHsKICBfU3luY0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXIodm9pZCBvbkxpc3RlbigpLCB2b2lkIG9uQ2FuY2VsKCkpCiAgICAgIDogc3VwZXIob25MaXN0ZW4sIG9uQ2FuY2VsKTsKCiAgLy8gRXZlbnREaXNwYXRjaCBpbnRlcmZhY2UuCgogIGJvb2wgZ2V0IF9tYXlBZGRFdmVudCA9PiBzdXBlci5fbWF5QWRkRXZlbnQgJiYgIV9pc0ZpcmluZzsKCiAgX2FkZEV2ZW50RXJyb3IoKSB7CiAgICBpZiAoX2lzRmlyaW5nKSB7CiAgICAgIHJldHVybiBuZXcgU3RhdGVFcnJvcigKICAgICAgICAgICJDYW5ub3QgZmlyZSBuZXcgZXZlbnQuIENvbnRyb2xsZXIgaXMgYWxyZWFkeSBmaXJpbmcgYW4gZXZlbnQiKTsKICAgIH0KICAgIHJldHVybiBzdXBlci5fYWRkRXZlbnRFcnJvcigpOwogIH0KCiAgdm9pZCBfc2VuZERhdGEoVCBkYXRhKSB7CiAgICBpZiAoX2lzRW1wdHkpIHJldHVybjsKICAgIGlmIChfaGFzT25lTGlzdGVuZXIpIHsKICAgICAgX3N0YXRlIHw9IF9Ccm9hZGNhc3RTdHJlYW1Db250cm9sbGVyLl9TVEFURV9GSVJJTkc7CiAgICAgIF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uID0gX2ZpcnN0U3Vic2NyaXB0aW9uOwogICAgICBzdWJzY3JpcHRpb24uX2FkZChkYXRhKTsKICAgICAgX3N0YXRlICY9IH5fQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlci5fU1RBVEVfRklSSU5HOwogICAgICBpZiAoX2lzRW1wdHkpIHsKICAgICAgICBfY2FsbE9uQ2FuY2VsKCk7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfQogICAgX2ZvckVhY2hMaXN0ZW5lcigoX0J1ZmZlcmluZ1N0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pIHsKICAgICAgc3Vic2NyaXB0aW9uLl9hZGQoZGF0YSk7CiAgICB9KTsKICB9CgogIHZvaWQgX3NlbmRFcnJvcihPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgaWYgKF9pc0VtcHR5KSByZXR1cm47CiAgICBfZm9yRWFjaExpc3RlbmVyKChfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikgewogICAgICBzdWJzY3JpcHRpb24uX2FkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIH0pOwogIH0KCiAgdm9pZCBfc2VuZERvbmUoKSB7CiAgICBpZiAoIV9pc0VtcHR5KSB7CiAgICAgIF9mb3JFYWNoTGlzdGVuZXIoKF9CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKSB7CiAgICAgICAgc3Vic2NyaXB0aW9uLl9jbG9zZSgpOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChfZG9uZUZ1dHVyZSAhPSBudWxsKTsKICAgICAgYXNzZXJ0KF9kb25lRnV0dXJlLl9tYXlDb21wbGV0ZSk7CiAgICAgIF9kb25lRnV0dXJlLl9hc3luY0NvbXBsZXRlKG51bGwpOwogICAgfQogIH0KfQoKY2xhc3MgX0FzeW5jQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcjxUPiBleHRlbmRzIF9Ccm9hZGNhc3RTdHJlYW1Db250cm9sbGVyPFQ+IHsKICBfQXN5bmNCcm9hZGNhc3RTdHJlYW1Db250cm9sbGVyKHZvaWQgb25MaXN0ZW4oKSwgdm9pZCBvbkNhbmNlbCgpKQogICAgICA6IHN1cGVyKG9uTGlzdGVuLCBvbkNhbmNlbCk7CgogIC8vIEV2ZW50RGlzcGF0Y2ggaW50ZXJmYWNlLgoKICB2b2lkIF9zZW5kRGF0YShUIGRhdGEpIHsKICAgIGZvciAoX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPSBfZmlyc3RTdWJzY3JpcHRpb247CiAgICAgICAgc3Vic2NyaXB0aW9uICE9IG51bGw7CiAgICAgICAgc3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9uLl9uZXh0KSB7CiAgICAgIHN1YnNjcmlwdGlvbi5fYWRkUGVuZGluZyhuZXcgX0RlbGF5ZWREYXRhPFQ+KGRhdGEpKTsKICAgIH0KICB9CgogIHZvaWQgX3NlbmRFcnJvcihPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgZm9yIChfQnJvYWRjYXN0U3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiA9IF9maXJzdFN1YnNjcmlwdGlvbjsKICAgICAgICBzdWJzY3JpcHRpb24gIT0gbnVsbDsKICAgICAgICBzdWJzY3JpcHRpb24gPSBzdWJzY3JpcHRpb24uX25leHQpIHsKICAgICAgc3Vic2NyaXB0aW9uLl9hZGRQZW5kaW5nKG5ldyBfRGVsYXllZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKSk7CiAgICB9CiAgfQoKICB2b2lkIF9zZW5kRG9uZSgpIHsKICAgIGlmICghX2lzRW1wdHkpIHsKICAgICAgZm9yIChfQnJvYWRjYXN0U3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiA9IF9maXJzdFN1YnNjcmlwdGlvbjsKICAgICAgICAgIHN1YnNjcmlwdGlvbiAhPSBudWxsOwogICAgICAgICAgc3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9uLl9uZXh0KSB7CiAgICAgICAgc3Vic2NyaXB0aW9uLl9hZGRQZW5kaW5nKGNvbnN0IF9EZWxheWVkRG9uZSgpKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KF9kb25lRnV0dXJlICE9IG51bGwpOwogICAgICBhc3NlcnQoX2RvbmVGdXR1cmUuX21heUNvbXBsZXRlKTsKICAgICAgX2RvbmVGdXR1cmUuX2FzeW5jQ29tcGxldGUobnVsbCk7CiAgICB9CiAgfQp9CgovKioKICogU3RyZWFtIGNvbnRyb2xsZXIgdGhhdCBpcyB1c2VkIGJ5IFtTdHJlYW0uYXNCcm9hZGNhc3RTdHJlYW1dLgogKgogKiBUaGlzIHN0cmVhbSBjb250cm9sbGVyIGFsbG93cyBpbmNvbWluZyBldmVudHMgd2hpbGUgaXQgaXMgZmlyaW5nCiAqIG90aGVyIGV2ZW50cy4gVGhpcyBpcyBoYW5kbGVkIGJ5IGRlbGF5aW5nIHRoZSBldmVudHMgdW50aWwgdGhlCiAqIGN1cnJlbnQgZXZlbnQgaXMgZG9uZSBmaXJpbmcsIGFuZCB0aGVuIGZpcmUgdGhlIHBlbmRpbmcgZXZlbnRzLgogKgogKiBUaGlzIGNsYXNzIGV4dGVuZHMgW19TeW5jQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcl0uIEV2ZW50cyBvZgogKiBhbiAiYXNCcm9hZGNhc3RTdHJlYW0iIHN0cmVhbSBhcmUgYWx3YXlzIGluaXRpYXRlZCBieSBldmVudHMKICogb24gYW5vdGhlciBzdHJlYW0sIGFuZCBpdCBpcyBmaW5lIHRvIGZvcndhcmQgdGhlbSBzeW5jaHJvbm91c2x5LgogKi8KY2xhc3MgX0FzQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcjxUPiBleHRlbmRzIF9TeW5jQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcjxUPgogICAgaW1wbGVtZW50cyBfRXZlbnREaXNwYXRjaDxUPiB7CiAgX1N0cmVhbUltcGxFdmVudHM8VD4gX3BlbmRpbmc7CgogIF9Bc0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXIodm9pZCBvbkxpc3RlbigpLCB2b2lkIG9uQ2FuY2VsKCkpCiAgICAgIDogc3VwZXIob25MaXN0ZW4sIG9uQ2FuY2VsKTsKCiAgYm9vbCBnZXQgX2hhc1BlbmRpbmcgPT4gX3BlbmRpbmcgIT0gbnVsbCAmJiAhX3BlbmRpbmcuaXNFbXB0eTsKCiAgdm9pZCBfYWRkUGVuZGluZ0V2ZW50KF9EZWxheWVkRXZlbnQgZXZlbnQpIHsKICAgIF9wZW5kaW5nID8/PSBuZXcgX1N0cmVhbUltcGxFdmVudHM8VD4oKTsKICAgIF9wZW5kaW5nLmFkZChldmVudCk7CiAgfQoKICB2b2lkIGFkZChUIGRhdGEpIHsKICAgIGlmICghaXNDbG9zZWQgJiYgX2lzRmlyaW5nKSB7CiAgICAgIF9hZGRQZW5kaW5nRXZlbnQobmV3IF9EZWxheWVkRGF0YTxUPihkYXRhKSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHN1cGVyLmFkZChkYXRhKTsKICAgIHdoaWxlIChfaGFzUGVuZGluZykgewogICAgICBfcGVuZGluZy5oYW5kbGVOZXh0KHRoaXMpOwogICAgfQogIH0KCiAgdm9pZCBhZGRFcnJvcihPYmplY3QgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBpZiAoIWlzQ2xvc2VkICYmIF9pc0ZpcmluZykgewogICAgICBfYWRkUGVuZGluZ0V2ZW50KG5ldyBfRGVsYXllZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghX21heUFkZEV2ZW50KSB0aHJvdyBfYWRkRXZlbnRFcnJvcigpOwogICAgX3NlbmRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICB3aGlsZSAoX2hhc1BlbmRpbmcpIHsKICAgICAgX3BlbmRpbmcuaGFuZGxlTmV4dCh0aGlzKTsKICAgIH0KICB9CgogIEZ1dHVyZSBjbG9zZSgpIHsKICAgIGlmICghaXNDbG9zZWQgJiYgX2lzRmlyaW5nKSB7CiAgICAgIF9hZGRQZW5kaW5nRXZlbnQoY29uc3QgX0RlbGF5ZWREb25lKCkpOwogICAgICBfc3RhdGUgfD0gX0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXIuX1NUQVRFX0NMT1NFRDsKICAgICAgcmV0dXJuIHN1cGVyLmRvbmU7CiAgICB9CiAgICBGdXR1cmUgcmVzdWx0ID0gc3VwZXIuY2xvc2UoKTsKICAgIGFzc2VydCghX2hhc1BlbmRpbmcpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgX2NhbGxPbkNhbmNlbCgpIHsKICAgIGlmIChfaGFzUGVuZGluZykgewogICAgICBfcGVuZGluZy5jbGVhcigpOwogICAgICBfcGVuZGluZyA9IG51bGw7CiAgICB9CiAgICBzdXBlci5fY2FsbE9uQ2FuY2VsKCk7CiAgfQp9CoICAE5OPAEPARQBOT0bASACAUUoJjNDSklGASMnAUNQRB4EAVEBGiQEATwBIRcvBAEhNwFRJBUBRjAWAR0CAS0qJygmJikBHyUBHg4BLTAvATImAQYsBUoZTlBLHAVMHwYXATshASMgSAQBLCBIBAEkIEgEAS4gSAQBIQE5AT0BNgEGLQVNFAYeAT4lAQY3BT4GHRc9BAFRNwFAATUBIDEoBAEZATMBPz45OzM7Jh8mGykNJAYEAUE3OkE5HCohDR0GGCkkDSEGAUAEASsBSisUIzUGSDcgPD4dBhkEATQyQEIiLA0lTjckGQgGEQQBOzwBGgEbFEoGHU0EARUvFQQBOSIvTB8wKwYjBAETFCMaBi8dLREXBAEqAT0vIFEsBAE3FhUEATgjBAESHTAcIRkEARUZQxUcSwYaASMpSEsHN08tL0EjLEoeJz0vKQpLHQ8rCAYeARQXBgQBGRYwLygGGwQCAU4wQyMBHgE9ARUVHUsGIwQBGxobOkMfOxYZCA4GRh8IBAE5GkYxCAQBFRVIHwoNIygoBgQCAVFEIwEeARtGHi07BgQBOUYeLUYGBAEVFUggLzgIDSMoKAYEAgEEQQNEQkMDQkBEBFAjIQFBIwFBAS8tGQQBFSIzDgYVGiEGBAE5Ij4OBi8jGiEGBAETIi46GQYjGhMEARkXGBcGGwQCAStkYXJ0OmFzeW5jL2Jyb2FkY2FzdF9zdHJlYW1fY29udHJvbGxlci5kYXJ0RW9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2FzeW5jL2RlZmVycmVkX2xvYWQuZGFydIPeLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuYXN5bmM7CgovKioKICogSW5kaWNhdGVzIHRoYXQgbG9hZGluZyBvZiBbbGlicmFyeU5hbWVdIGlzIGRlZmVycmVkLgogKgogKiBUaGlzIGNsYXNzIGlzIG9ic29sZXRlLiBJbnN0ZWFkIHVzZSB0aGUgc3ludGF4OgogKiBpbXBvcnQgImxpYnJhcnkuZGFydCIgZGVmZXJyZWQgYXMgcHJlZml4OwogKi8KQERlcHJlY2F0ZWQoIkRhcnQgc2RrIHYuIDEuOCIpCmNsYXNzIERlZmVycmVkTGlicmFyeSB7CiAgZmluYWwgU3RyaW5nIGxpYnJhcnlOYW1lOwogIGZpbmFsIFN0cmluZyB1cmk7CgogIGNvbnN0IERlZmVycmVkTGlicmFyeSh0aGlzLmxpYnJhcnlOYW1lLCB7dGhpcy51cml9KTsKCiAgLyoqCiAgICogRW5zdXJlIHRoYXQgW2xpYnJhcnlOYW1lXSBoYXMgYmVlbiBsb2FkZWQuCiAgICoKICAgKiBJZiB0aGUgbGlicmFyeSBmYWlscyB0byBsb2FkLCB0aGUgRnV0dXJlIHdpbGwgY29tcGxldGUgd2l0aCBhCiAgICogRGVmZXJyZWRMb2FkRXhjZXB0aW9uLgogICAqLwogIGV4dGVybmFsIEZ1dHVyZTxOdWxsPiBsb2FkKCk7Cn0KCi8qKgogKiBUaHJvd24gd2hlbiBhIGRlZmVycmVkIGxpYnJhcnkgZmFpbHMgdG8gbG9hZC4KICovCmNsYXNzIERlZmVycmVkTG9hZEV4Y2VwdGlvbiBpbXBsZW1lbnRzIEV4Y2VwdGlvbiB7CiAgRGVmZXJyZWRMb2FkRXhjZXB0aW9uKHRoaXMuX3MpOwogIFN0cmluZyB0b1N0cmluZygpID0+ICJEZWZlcnJlZExvYWRFeGNlcHRpb246ICckX3MnIjsKICBmaW5hbCBTdHJpbmcgX3M7Cn0KKABOTjwBDwEUAQQ4AzMtBB8YHBQBNwEGMAVDHAYgAgEEMQQzIjcTAgEdZGFydDphc3luYy9kZWZlcnJlZF9sb2FkLmRhcnRWb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvX2ludGVybmFsL3ZtL2xpYi9kZWZlcnJlZF9sb2FkX3BhdGNoLmRhcnSCUi8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKLy8gcGFydCBvZiAiYXN5bmNfcGF0Y2guZGFydCI7CgpmaW5hbCBTZXQ8U3RyaW5nPiBfbG9hZGVkTGlicmFyaWVzID0gbmV3IFNldDxTdHJpbmc+KCk7CgpAcGF0Y2gKY2xhc3MgRGVmZXJyZWRMaWJyYXJ5IHsKICBAcGF0Y2gKICBGdXR1cmU8TnVsbD4gbG9hZCgpIHsKICAgIC8vIER1bW15IGltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIGV2ZW50dWFsbHkgYmUgcmVwbGFjZWQgYnkgcmVhbAogICAgLy8gaW1wbGVtZW50YXRpb24uCiAgICBGdXR1cmUgZnV0dXJlID0gbmV3IEZ1dHVyZTxOdWxsPi52YWx1ZShudWxsKTsKICAgIF9sb2FkZWRMaWJyYXJpZXMuYWRkKGxpYnJhcnlOYW1lKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQp9ChcATk48AQ8BHwE4AQcYCRhHFzInEwQCASlkYXJ0OmFzeW5jLXBhdGNoL2RlZmVycmVkX2xvYWRfcGF0Y2guZGFydD5vcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9hc3luYy9mdXR1cmUuZGFydMAAiDovLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5hc3luYzsKCi8vLyBBIHR5cGUgcmVwcmVzZW50aW5nIHZhbHVlcyB0aGF0IGFyZSBlaXRoZXIgYEZ1dHVyZTxUPmAgb3IgYFRgLgovLy8KLy8vIFRoaXMgY2xhc3MgZGVjbGFyYXRpb24gaXMgYSBwdWJsaWMgc3RhbmQtaW4gZm9yIGFuIGludGVybmFsCi8vLyBmdXR1cmUtb3ItdmFsdWUgZ2VuZXJpYyB0eXBlLiBSZWZlcmVuY2VzIHRvIHRoaXMgY2xhc3MgYXJlIHJlc29sdmVkIHRvIHRoZQovLy8gaW50ZXJuYWwgdHlwZS4KLy8vCi8vLyBJdCBpcyBhIGNvbXBpbGUtdGltZSBlcnJvciBmb3IgYW55IGNsYXNzIHRvIGV4dGVuZCwgbWl4IGluIG9yIGltcGxlbWVudAovLy8gYEZ1dHVyZU9yYC4KLy8vCi8vLyAjIEV4YW1wbGVzCi8vLyBgYGAgZGFydAovLy8gLy8gVGhlIGBGdXR1cmU8VD4udGhlbmAgZnVuY3Rpb24gdGFrZXMgYSBjYWxsYmFjayBbZl0gdGhhdCByZXR1cm5zIGVpdGhlcgovLy8gLy8gYW4gYFNgIG9yIGEgYEZ1dHVyZTxTPmAuCi8vLyBGdXR1cmU8Uz4gdGhlbjxTPihGdXR1cmVPcjxTPiBmKFQgeCksIC4uLik7Ci8vLwovLy8gLy8gYENvbXBsZXRlcjxUPi5jb21wbGV0ZWAgdGFrZXMgZWl0aGVyIGEgYFRgIG9yIGBGdXR1cmU8VD5gLgovLy8gdm9pZCBjb21wbGV0ZShGdXR1cmVPcjxUPiB2YWx1ZSk7Ci8vLyBgYGAKLy8vCi8vLyAjIEFkdmFuY2VkCi8vLyBUaGUgYEZ1dHVyZU9yPGludD5gIHR5cGUgaXMgYWN0dWFsbHkgdGhlICJ0eXBlIHVuaW9uIiBvZiB0aGUgdHlwZXMgYGludGAgYW5kCi8vLyBgRnV0dXJlPGludD5gLiBUaGlzIHR5cGUgdW5pb24gaXMgZGVmaW5lZCBpbiBzdWNoIGEgd2F5IHRoYXQKLy8vIGBGdXR1cmVPcjxPYmplY3Q+YCBpcyBib3RoIGEgc3VwZXItIGFuZCBzdWItdHlwZSBvZiBgT2JqZWN0YCAoc3ViLXR5cGUKLy8vIGJlY2F1c2UgYE9iamVjdGAgaXMgb25lIG9mIHRoZSB0eXBlcyBvZiB0aGUgdW5pb24sIHN1cGVyLXR5cGUgYmVjYXVzZQovLy8gYE9iamVjdGAgaXMgYSBzdXBlci10eXBlIG9mIGJvdGggb2YgdGhlIHR5cGVzIG9mIHRoZSB1bmlvbikuIFRvZ2V0aGVyIGl0Ci8vLyBtZWFucyB0aGF0IGBGdXR1cmVPcjxPYmplY3Q+YCBpcyBlcXVpdmFsZW50IHRvIGBPYmplY3RgLgovLy8KLy8vIEFzIGEgY29yb2xsYXJ5LCBgRnV0dXJlT3I8T2JqZWN0PmAgaXMgZXF1aXZhbGVudCB0bwovLy8gYEZ1dHVyZU9yPEZ1dHVyZU9yPE9iamVjdD4+YCwgYEZ1dHVyZU9yPEZ1dHVyZTxPYmplY3Q+PmAgaXMgZXF1aXZhbGVudCB0bwovLy8gYEZ1dHVyZTxPYmplY3Q+YC4KYWJzdHJhY3QgY2xhc3MgRnV0dXJlT3I8VD4gewogIC8vIFByaXZhdGUgZ2VuZXJhdGl2ZSBjb25zdHJ1Y3Rvciwgc28gdGhhdCBpdCBpcyBub3Qgc3ViY2xhc3NhYmxlLCBtaXhhYmxlLCBvcgogIC8vIGluc3RhbnRpYWJsZS4KICBGdXR1cmVPci5fKCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkZ1dHVyZU9yIGNhbid0IGJlIGluc3RhbnRpYXRlZCIpOwogIH0KfQoKLyoqCiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBkZWxheWVkIGNvbXB1dGF0aW9uLgogKgogKiBBIFtGdXR1cmVdIGlzIHVzZWQgdG8gcmVwcmVzZW50IGEgcG90ZW50aWFsIHZhbHVlLCBvciBlcnJvciwKICogdGhhdCB3aWxsIGJlIGF2YWlsYWJsZSBhdCBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZS4KICogUmVjZWl2ZXJzIG9mIGEgW0Z1dHVyZV0gY2FuIHJlZ2lzdGVyIGNhbGxiYWNrcwogKiB0aGF0IGhhbmRsZSB0aGUgdmFsdWUgb3IgZXJyb3Igb25jZSBpdCBpcyBhdmFpbGFibGUuCiAqIEZvciBleGFtcGxlOgogKgogKiAgICAgRnV0dXJlPGludD4gZnV0dXJlID0gZ2V0RnV0dXJlKCk7CiAqICAgICBmdXR1cmUudGhlbigodmFsdWUpID0+IGhhbmRsZVZhbHVlKHZhbHVlKSkKICogICAgICAgICAgIC5jYXRjaEVycm9yKChlcnJvcikgPT4gaGFuZGxlRXJyb3IoZXJyb3IpKTsKICoKICogQSBbRnV0dXJlXSBjYW4gYmUgY29tcGxldGVkIGluIHR3byB3YXlzOgogKiB3aXRoIGEgdmFsdWUgKCJ0aGUgZnV0dXJlIHN1Y2NlZWRzIikKICogb3Igd2l0aCBhbiBlcnJvciAoInRoZSBmdXR1cmUgZmFpbHMiKS4KICogVXNlcnMgY2FuIGluc3RhbGwgY2FsbGJhY2tzIGZvciBlYWNoIGNhc2UuCiAqCiAqIEluIHNvbWUgY2FzZXMgd2Ugc2F5IHRoYXQgYSBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggYW5vdGhlciBmdXR1cmUuCiAqIFRoaXMgaXMgYSBzaG9ydCB3YXkgb2Ygc3RhdGluZyB0aGF0IHRoZSBmdXR1cmUgaXMgY29tcGxldGVkIGluIHRoZSBzYW1lIHdheSwKICogd2l0aCB0aGUgc2FtZSB2YWx1ZSBvciBlcnJvciwKICogYXMgdGhlIG90aGVyIGZ1dHVyZSBvbmNlIHRoYXQgY29tcGxldGVzLgogKiBXaGVuZXZlciBhIGZ1bmN0aW9uIGluIHRoZSBjb3JlIGxpYnJhcnkgbWF5IGNvbXBsZXRlIGEgZnV0dXJlCiAqIChmb3IgZXhhbXBsZSBbQ29tcGxldGVyLmNvbXBsZXRlXSBvciBbbmV3IEZ1dHVyZS52YWx1ZV0pLAogKiB0aGVuIGl0IGFsc28gYWNjZXB0cyBhbm90aGVyIGZ1dHVyZSBhbmQgZG9lcyB0aGlzIHdvcmsgZm9yIHRoZSBkZXZlbG9wZXIuCiAqCiAqIFRoZSByZXN1bHQgb2YgcmVnaXN0ZXJpbmcgYSBwYWlyIG9mIGNhbGxiYWNrcyBpcyBhIG5ldyBGdXR1cmUgKHRoZQogKiAic3VjY2Vzc29yIikgd2hpY2ggaW4gdHVybiBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgcmVzdWx0IG9mIGludm9raW5nIHRoZQogKiBjb3JyZXNwb25kaW5nIGNhbGxiYWNrLgogKiBUaGUgc3VjY2Vzc29yIGlzIGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yIGlmIHRoZSBpbnZva2VkIGNhbGxiYWNrIHRocm93cy4KICogRm9yIGV4YW1wbGU6CiAqIGBgYAogKiBGdXR1cmU8aW50PiBzdWNjZXNzb3IgPSBmdXR1cmUudGhlbigoaW50IHZhbHVlKSB7CiAqICAgICAvLyBJbnZva2VkIHdoZW4gdGhlIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCBhIHZhbHVlLgogKiAgICAgcmV0dXJuIDQyOyAgLy8gVGhlIHN1Y2Nlc3NvciBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgdmFsdWUgNDIuCiAqICAgfSwKICogICBvbkVycm9yOiAoZSkgewogKiAgICAgLy8gSW52b2tlZCB3aGVuIHRoZSBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggYW4gZXJyb3IuCiAqICAgICBpZiAoY2FuSGFuZGxlKGUpKSB7CiAqICAgICAgIHJldHVybiA0OTk7ICAvLyBUaGUgc3VjY2Vzc29yIGlzIGNvbXBsZXRlZCB3aXRoIHRoZSB2YWx1ZSA0OTkuCiAqICAgICB9IGVsc2UgewogKiAgICAgICB0aHJvdyBlOyAgLy8gVGhlIHN1Y2Nlc3NvciBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgZXJyb3IgZS4KICogICAgIH0KICogICB9KTsKICogYGBgCiAqCiAqIElmIGEgZnV0dXJlIGRvZXMgbm90IGhhdmUgYSBzdWNjZXNzb3Igd2hlbiBpdCBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvciwKICogaXQgZm9yd2FyZHMgdGhlIGVycm9yIG1lc3NhZ2UgdG8gdGhlIGdsb2JhbCBlcnJvci1oYW5kbGVyLgogKiBUaGlzIGJlaGF2aW9yIG1ha2VzIHN1cmUgdGhhdCBubyBlcnJvciBpcyBzaWxlbnRseSBkcm9wcGVkLgogKiBIb3dldmVyLCBpdCBhbHNvIG1lYW5zIHRoYXQgZXJyb3IgaGFuZGxlcnMgc2hvdWxkIGJlIGluc3RhbGxlZCBlYXJseSwKICogc28gdGhhdCB0aGV5IGFyZSBwcmVzZW50IGFzIHNvb24gYXMgYSBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggYW4gZXJyb3IuCiAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgdGhpcyBwb3RlbnRpYWwgYnVnOgogKiBgYGAKICogdmFyIGZ1dHVyZSA9IGdldEZ1dHVyZSgpOwogKiBuZXcgVGltZXIobmV3IER1cmF0aW9uKG1pbGxpc2Vjb25kczogNSksICgpIHsKICogICAvLyBUaGUgZXJyb3ItaGFuZGxlciBpcyBub3QgYXR0YWNoZWQgdW50aWwgNSBtcyBhZnRlciB0aGUgZnV0dXJlIGhhcwogKiAgIC8vIGJlZW4gcmVjZWl2ZWQuIElmIHRoZSBmdXR1cmUgZmFpbHMgYmVmb3JlIHRoYXQsIHRoZSBlcnJvciBpcwogKiAgIC8vIGZvcndhcmRlZCB0byB0aGUgZ2xvYmFsIGVycm9yLWhhbmRsZXIsIGV2ZW4gdGhvdWdoIHRoZXJlIGlzIGNvZGUKICogICAvLyAoanVzdCBiZWxvdykgdG8gZXZlbnR1YWxseSBoYW5kbGUgdGhlIGVycm9yLgogKiAgIGZ1dHVyZS50aGVuKCh2YWx1ZSkgeyB1c2VWYWx1ZSh2YWx1ZSk7IH0sCiAqICAgICAgICAgICAgICAgb25FcnJvcjogKGUpIHsgaGFuZGxlRXJyb3IoZSk7IH0pOwogKiB9KTsKICogYGBgCiAqCiAqIFdoZW4gcmVnaXN0ZXJpbmcgY2FsbGJhY2tzLCBpdCdzIG9mdGVuIG1vcmUgcmVhZGFibGUgdG8gcmVnaXN0ZXIgdGhlIHR3bwogKiBjYWxsYmFja3Mgc2VwYXJhdGVseSwgYnkgZmlyc3QgdXNpbmcgW3RoZW5dIHdpdGggb25lIGFyZ3VtZW50CiAqICh0aGUgdmFsdWUgaGFuZGxlcikgYW5kIHVzaW5nIGEgc2Vjb25kIFtjYXRjaEVycm9yXSBmb3IgaGFuZGxpbmcgZXJyb3JzLgogKiBFYWNoIG9mIHRoZXNlIHdpbGwgZm9yd2FyZCB0aGUgcmVzdWx0IHRoYXQgdGhleSBkb24ndCBoYW5kbGUKICogdG8gdGhlaXIgc3VjY2Vzc29ycywgYW5kIHRvZ2V0aGVyIHRoZXkgaGFuZGxlIGJvdGggdmFsdWUgYW5kIGVycm9yIHJlc3VsdC4KICogSXQgYWxzbyBoYXMgdGhlIGFkZGl0aW9uYWwgYmVuZWZpdCBvZiB0aGUgW2NhdGNoRXJyb3JdIGhhbmRsaW5nIGVycm9ycyBpbiB0aGUKICogW3RoZW5dIHZhbHVlIGNhbGxiYWNrIHRvby4KICogVXNpbmcgc2VxdWVudGlhbCBoYW5kbGVycyBpbnN0ZWFkIG9mIHBhcmFsbGVsIG9uZXMgb2Z0ZW4gbGVhZHMgdG8gY29kZSB0aGF0CiAqIGlzIGVhc2llciB0byByZWFzb24gYWJvdXQuCiAqIEl0IGFsc28gbWFrZXMgYXN5bmNocm9ub3VzIGNvZGUgdmVyeSBzaW1pbGFyIHRvIHN5bmNocm9ub3VzIGNvZGU6CiAqIGBgYAogKiAvLyBTeW5jaHJvbm91cyBjb2RlLgogKiB0cnkgewogKiAgIGludCB2YWx1ZSA9IGZvbygpOwogKiAgIHJldHVybiBiYXIodmFsdWUpOwogKiB9IGNhdGNoIChlKSB7CiAqICAgcmV0dXJuIDQ5OTsKICogfQogKiBgYGAKICoKICogRXF1aXZhbGVudCBhc3luY2hyb25vdXMgY29kZSwgYmFzZWQgb24gZnV0dXJlczoKICogYGBgCiAqIEZ1dHVyZTxpbnQ+IGZ1dHVyZSA9IG5ldyBGdXR1cmUoZm9vKTsgIC8vIFJlc3VsdCBvZiBmb28oKSBhcyBhIGZ1dHVyZS4KICogZnV0dXJlLnRoZW4oKGludCB2YWx1ZSkgPT4gYmFyKHZhbHVlKSkKICogICAgICAgLmNhdGNoRXJyb3IoKGUpID0+IDQ5OSk7CiAqIGBgYAogKgogKiBTaW1pbGFyIHRvIHRoZSBzeW5jaHJvbm91cyBjb2RlLCB0aGUgZXJyb3IgaGFuZGxlciAocmVnaXN0ZXJlZCB3aXRoCiAqIFtjYXRjaEVycm9yXSkgaXMgaGFuZGxpbmcgYW55IGVycm9ycyB0aHJvd24gYnkgZWl0aGVyIGBmb29gIG9yIGBiYXJgLgogKiBJZiB0aGUgZXJyb3ItaGFuZGxlciBoYWQgYmVlbiByZWdpc3RlcmVkIGFzIHRoZSBgb25FcnJvcmAgcGFyYW1ldGVyIG9mCiAqIHRoZSBgdGhlbmAgY2FsbCwgaXQgd291bGQgbm90IGNhdGNoIGVycm9ycyBmcm9tIHRoZSBgYmFyYCBjYWxsLgogKgogKiBGdXR1cmVzIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgY2FsbGJhY2stcGFpciByZWdpc3RlcmVkLiBFYWNoIHN1Y2Nlc3NvciBpcwogKiB0cmVhdGVkIGluZGVwZW5kZW50bHkgYW5kIGlzIGhhbmRsZWQgYXMgaWYgaXQgd2FzIHRoZSBvbmx5IHN1Y2Nlc3Nvci4KICoKICogQSBmdXR1cmUgbWF5IGFsc28gZmFpbCB0byBldmVyIGNvbXBsZXRlLiBJbiB0aGF0IGNhc2UsIG5vIGNhbGxiYWNrcyBhcmUKICogY2FsbGVkLgogKi8KYWJzdHJhY3QgY2xhc3MgRnV0dXJlPFQ+IHsKICAvLy8gQSBgRnV0dXJlPE51bGw+YCBjb21wbGV0ZWQgd2l0aCBgbnVsbGAuCiAgc3RhdGljIGZpbmFsIF9GdXR1cmU8TnVsbD4gX251bGxGdXR1cmUgPQogICAgICBuZXcgX0Z1dHVyZTxOdWxsPi56b25lVmFsdWUobnVsbCwgWm9uZS5yb290KTsKCiAgLy8vIEEgYEZ1dHVyZTxib29sPmAgY29tcGxldGVkIHdpdGggYGZhbHNlYC4KICBzdGF0aWMgZmluYWwgX0Z1dHVyZTxib29sPiBfZmFsc2VGdXR1cmUgPQogICAgICBuZXcgX0Z1dHVyZTxib29sPi56b25lVmFsdWUoZmFsc2UsIFpvbmUucm9vdCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBmdXR1cmUgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgW2NvbXB1dGF0aW9uXQogICAqIGFzeW5jaHJvbm91c2x5IHdpdGggW1RpbWVyLnJ1bl0uCiAgICoKICAgKiBJZiB0aGUgcmVzdWx0IG9mIGV4ZWN1dGluZyBbY29tcHV0YXRpb25dIHRocm93cywgdGhlIHJldHVybmVkIGZ1dHVyZSBpcwogICAqIGNvbXBsZXRlZCB3aXRoIHRoZSBlcnJvci4KICAgKgogICAqIElmIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBpdHNlbGYgYSBbRnV0dXJlXSwgY29tcGxldGlvbiBvZgogICAqIHRoZSBjcmVhdGVkIGZ1dHVyZSB3aWxsIHdhaXQgdW50aWwgdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMsCiAgICogYW5kIHdpbGwgdGhlbiBjb21wbGV0ZSB3aXRoIHRoZSBzYW1lIHJlc3VsdC4KICAgKgogICAqIElmIGEgbm9uLWZ1dHVyZSB2YWx1ZSBpcyByZXR1cm5lZCwgdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQKICAgKiB3aXRoIHRoYXQgdmFsdWUuCiAgICovCiAgZmFjdG9yeSBGdXR1cmUoRnV0dXJlT3I8VD4gY29tcHV0YXRpb24oKSkgewogICAgX0Z1dHVyZTxUPiByZXN1bHQgPSBuZXcgX0Z1dHVyZTxUPigpOwogICAgVGltZXIucnVuKCgpIHsKICAgICAgdHJ5IHsKICAgICAgICByZXN1bHQuX2NvbXBsZXRlKGNvbXB1dGF0aW9uKCkpOwogICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgX2NvbXBsZXRlV2l0aEVycm9yQ2FsbGJhY2socmVzdWx0LCBlLCBzKTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIGZ1dHVyZSBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgY2FsbGluZyBbY29tcHV0YXRpb25dCiAgICogYXN5bmNocm9ub3VzbHkgd2l0aCBbc2NoZWR1bGVNaWNyb3Rhc2tdLgogICAqCiAgICogSWYgZXhlY3V0aW5nIFtjb21wdXRhdGlvbl0gdGhyb3dzLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhlIHRocm93biBlcnJvci4KICAgKgogICAqIElmIGNhbGxpbmcgW2NvbXB1dGF0aW9uXSByZXR1cm5zIGEgW0Z1dHVyZV0sIGNvbXBsZXRpb24gb2YKICAgKiB0aGUgY3JlYXRlZCBmdXR1cmUgd2lsbCB3YWl0IHVudGlsIHRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzLAogICAqIGFuZCB3aWxsIHRoZW4gY29tcGxldGUgd2l0aCB0aGUgc2FtZSByZXN1bHQuCiAgICoKICAgKiBJZiBjYWxsaW5nIFtjb21wdXRhdGlvbl0gcmV0dXJucyBhIG5vbi1mdXR1cmUgdmFsdWUsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IHZhbHVlLgogICAqLwogIGZhY3RvcnkgRnV0dXJlLm1pY3JvdGFzayhGdXR1cmVPcjxUPiBjb21wdXRhdGlvbigpKSB7CiAgICBfRnV0dXJlPFQ+IHJlc3VsdCA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBzY2hlZHVsZU1pY3JvdGFzaygoKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmVzdWx0Ll9jb21wbGV0ZShjb21wdXRhdGlvbigpKTsKICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrKHJlc3VsdCwgZSwgcyk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBmdXR1cmUgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIGltbWVkaWF0ZWx5IGNhbGxpbmcKICAgKiBbY29tcHV0YXRpb25dLgogICAqCiAgICogSWYgY2FsbGluZyBbY29tcHV0YXRpb25dIHRocm93cywgdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGUKICAgKiBlcnJvci4KICAgKgogICAqIElmIGNhbGxpbmcgW2NvbXB1dGF0aW9uXSByZXR1cm5zIGEgYEZ1dHVyZTxUPmAsIHRoYXQgZnV0dXJlIGlzIHJldHVybmVkLgogICAqCiAgICogSWYgY2FsbGluZyBbY29tcHV0YXRpb25dIHJldHVybnMgYSBub24tZnV0dXJlIHZhbHVlLAogICAqIGEgZnV0dXJlIGlzIHJldHVybmVkIHdoaWNoIGhhcyBiZWVuIGNvbXBsZXRlZCB3aXRoIHRoYXQgdmFsdWUuCiAgICovCiAgZmFjdG9yeSBGdXR1cmUuc3luYyhGdXR1cmVPcjxUPiBjb21wdXRhdGlvbigpKSB7CiAgICB0cnkgewogICAgICB2YXIgcmVzdWx0ID0gY29tcHV0YXRpb24oKTsKICAgICAgaWYgKHJlc3VsdCBpcyBGdXR1cmU8VD4pIHsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBuZXcgX0Z1dHVyZTxUPi52YWx1ZShyZXN1bHQpOwogICAgICB9CiAgICB9IGNhdGNoIChlcnJvciwgc3RhY2tUcmFjZSkgewogICAgICB2YXIgZnV0dXJlID0gbmV3IF9GdXR1cmU8VD4oKTsKICAgICAgQXN5bmNFcnJvciByZXBsYWNlbWVudCA9IFpvbmUuY3VycmVudC5lcnJvckNhbGxiYWNrKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgaWYgKHJlcGxhY2VtZW50ICE9IG51bGwpIHsKICAgICAgICBmdXR1cmUuX2FzeW5jQ29tcGxldGVFcnJvcigKICAgICAgICAgICAgX25vbk51bGxFcnJvcihyZXBsYWNlbWVudC5lcnJvciksIHJlcGxhY2VtZW50LnN0YWNrVHJhY2UpOwogICAgICB9IGVsc2UgewogICAgICAgIGZ1dHVyZS5fYXN5bmNDb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgfQogICAgICByZXR1cm4gZnV0dXJlOwogICAgfQogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIGZ1dHVyZSBjb21wbGV0ZWQgd2l0aCBbdmFsdWVdLgogICAqCiAgICogSWYgW3ZhbHVlXSBpcyBhIGZ1dHVyZSwgdGhlIGNyZWF0ZWQgZnV0dXJlIHdhaXRzIGZvciB0aGUKICAgKiBbdmFsdWVdIGZ1dHVyZSB0byBjb21wbGV0ZSwgYW5kIHRoZW4gY29tcGxldGVzIHdpdGggdGhlIHNhbWUgcmVzdWx0LgogICAqIFNpbmNlIGEgW3ZhbHVlXSBmdXR1cmUgY2FuIGNvbXBsZXRlIHdpdGggYW4gZXJyb3IsIHNvIGNhbiB0aGUgZnV0dXJlCiAgICogY3JlYXRlZCBieSBbRnV0dXJlLnZhbHVlXSwgZXZlbiBpZiB0aGUgbmFtZSBzdWdnZXN0cyBvdGhlcndpc2UuCiAgICoKICAgKiBJZiBbdmFsdWVdIGlzIG5vdCBhIFtGdXR1cmVdLCB0aGUgY3JlYXRlZCBmdXR1cmUgaXMgY29tcGxldGVkCiAgICogd2l0aCB0aGUgW3ZhbHVlXSB2YWx1ZSwKICAgKiBlcXVpdmFsZW50bHkgdG8gYG5ldyBGdXR1cmU8VD4uc3luYygoKSA9PiB2YWx1ZSlgLgogICAqCiAgICogVXNlIFtDb21wbGV0ZXJdIHRvIGNyZWF0ZSBhIGZ1dHVyZSBhbmQgY29tcGxldGUgaXQgbGF0ZXIuCiAgICovCiAgZmFjdG9yeSBGdXR1cmUudmFsdWUoW0Z1dHVyZU9yPFQ+IHZhbHVlXSkgewogICAgcmV0dXJuIG5ldyBfRnV0dXJlPFQ+LmltbWVkaWF0ZSh2YWx1ZSk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgZnV0dXJlIHRoYXQgY29tcGxldGVzIHdpdGggYW4gZXJyb3IuCiAgICoKICAgKiBUaGUgY3JlYXRlZCBmdXR1cmUgd2lsbCBiZSBjb21wbGV0ZWQgd2l0aCBhbiBlcnJvciBpbiBhIGZ1dHVyZSBtaWNyb3Rhc2suCiAgICogVGhpcyBhbGxvd3MgZW5vdWdoIHRpbWUgZm9yIHNvbWVvbmUgdG8gYWRkIGFuIGVycm9yIGhhbmRsZXIgb24gdGhlIGZ1dHVyZS4KICAgKiBJZiBhbiBlcnJvciBoYW5kbGVyIGlzbid0IGFkZGVkIGJlZm9yZSB0aGUgZnV0dXJlIGNvbXBsZXRlcywgdGhlIGVycm9yCiAgICogd2lsbCBiZSBjb25zaWRlcmVkIHVuaGFuZGxlZC4KICAgKgogICAqIElmIFtlcnJvcl0gaXMgYG51bGxgLCBpdCBpcyByZXBsYWNlZCBieSBhIFtOdWxsVGhyb3duRXJyb3JdLgogICAqCiAgICogVXNlIFtDb21wbGV0ZXJdIHRvIGNyZWF0ZSBhIGZ1dHVyZSBhbmQgY29tcGxldGUgaXQgbGF0ZXIuCiAgICovCiAgZmFjdG9yeSBGdXR1cmUuZXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgZXJyb3IgPSBfbm9uTnVsbEVycm9yKGVycm9yKTsKICAgIGlmICghaWRlbnRpY2FsKFpvbmUuY3VycmVudCwgX3Jvb3Rab25lKSkgewogICAgICBBc3luY0Vycm9yIHJlcGxhY2VtZW50ID0gWm9uZS5jdXJyZW50LmVycm9yQ2FsbGJhY2soZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICBpZiAocmVwbGFjZW1lbnQgIT0gbnVsbCkgewogICAgICAgIGVycm9yID0gX25vbk51bGxFcnJvcihyZXBsYWNlbWVudC5lcnJvcik7CiAgICAgICAgc3RhY2tUcmFjZSA9IHJlcGxhY2VtZW50LnN0YWNrVHJhY2U7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgX0Z1dHVyZTxUPi5pbW1lZGlhdGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgZnV0dXJlIHRoYXQgcnVucyBpdHMgY29tcHV0YXRpb24gYWZ0ZXIgYSBkZWxheS4KICAgKgogICAqIFRoZSBbY29tcHV0YXRpb25dIHdpbGwgYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGdpdmVuIFtkdXJhdGlvbl0gaGFzIHBhc3NlZCwKICAgKiBhbmQgdGhlIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBjb21wdXRhdGlvbi4KICAgKgogICAqIElmIFtjb21wdXRhdGlvbl0gcmV0dXJucyBhIGZ1dHVyZSwKICAgKiB0aGUgZnV0dXJlIHJldHVybmVkIGJ5IHRoaXMgY29uc3RydWN0b3Igd2lsbCBjb21wbGV0ZSB3aXRoIHRoZSB2YWx1ZSBvcgogICAqIGVycm9yIG9mIHRoYXQgZnV0dXJlLgogICAqCiAgICogSWYgdGhlIGR1cmF0aW9uIGlzIDAgb3IgbGVzcywKICAgKiBpdCBjb21wbGV0ZXMgbm8gc29vbmVyIHRoYW4gaW4gdGhlIG5leHQgZXZlbnQtbG9vcCBpdGVyYXRpb24sCiAgICogYWZ0ZXIgYWxsIG1pY3JvdGFza3MgaGF2ZSBydW4uCiAgICoKICAgKiBJZiBbY29tcHV0YXRpb25dIGlzIG9taXR0ZWQsCiAgICogaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIFtjb21wdXRhdGlvbl0gd2FzIGAoKSA9PiBudWxsYCwKICAgKiBhbmQgdGhlIGZ1dHVyZSB3aWxsIGV2ZW50dWFsbHkgY29tcGxldGUgd2l0aCB0aGUgYG51bGxgIHZhbHVlLgogICAqCiAgICogSWYgY2FsbGluZyBbY29tcHV0YXRpb25dIHRocm93cywgdGhlIGNyZWF0ZWQgZnV0dXJlIHdpbGwgY29tcGxldGUgd2l0aCB0aGUKICAgKiBlcnJvci4KICAgKgogICAqIFNlZSBhbHNvIFtDb21wbGV0ZXJdIGZvciBhIHdheSB0byBjcmVhdGUgYW5kIGNvbXBsZXRlIGEgZnV0dXJlIGF0IGEKICAgKiBsYXRlciB0aW1lIHRoYXQgaXNuJ3QgbmVjZXNzYXJpbHkgYWZ0ZXIgYSBrbm93biBmaXhlZCBkdXJhdGlvbi4KICAgKi8KICBmYWN0b3J5IEZ1dHVyZS5kZWxheWVkKER1cmF0aW9uIGR1cmF0aW9uLCBbRnV0dXJlT3I8VD4gY29tcHV0YXRpb24oKV0pIHsKICAgIF9GdXR1cmU8VD4gcmVzdWx0ID0gbmV3IF9GdXR1cmU8VD4oKTsKICAgIG5ldyBUaW1lcihkdXJhdGlvbiwgKCkgewogICAgICBpZiAoY29tcHV0YXRpb24gPT0gbnVsbCkgewogICAgICAgIHJlc3VsdC5fY29tcGxldGUobnVsbCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJlc3VsdC5fY29tcGxldGUoY29tcHV0YXRpb24oKSk7CiAgICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgICAgX2NvbXBsZXRlV2l0aEVycm9yQ2FsbGJhY2socmVzdWx0LCBlLCBzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIFdhaXRzIGZvciBtdWx0aXBsZSBmdXR1cmVzIHRvIGNvbXBsZXRlIGFuZCBjb2xsZWN0cyB0aGVpciByZXN1bHRzLgogICAqCiAgICogUmV0dXJucyBhIGZ1dHVyZSB3aGljaCB3aWxsIGNvbXBsZXRlIG9uY2UgYWxsIHRoZSBwcm92aWRlZCBmdXR1cmVzCiAgICogaGF2ZSBjb21wbGV0ZWQsIGVpdGhlciB3aXRoIHRoZWlyIHJlc3VsdHMsIG9yIHdpdGggYW4gZXJyb3IgaWYgYW55CiAgICogb2YgdGhlIHByb3ZpZGVkIGZ1dHVyZXMgZmFpbC4KICAgKgogICAqIFRoZSB2YWx1ZSBvZiB0aGUgcmV0dXJuZWQgZnV0dXJlIHdpbGwgYmUgYSBsaXN0IG9mIGFsbCB0aGUgdmFsdWVzIHRoYXQKICAgKiB3ZXJlIHByb2R1Y2VkIGluIHRoZSBvcmRlciB0aGF0IHRoZSBmdXR1cmVzIGFyZSBwcm92aWRlZCBieSBpdGVyYXRpbmcKICAgKiBbZnV0dXJlc10uCiAgICoKICAgKiBJZiBhbnkgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yLAogICAqIHRoZW4gdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCB0aGF0IGVycm9yLgogICAqIElmIGZ1cnRoZXIgZnV0dXJlcyBhbHNvIGNvbXBsZXRlIHdpdGggZXJyb3JzLCB0aG9zZSBlcnJvcnMgYXJlIGRpc2NhcmRlZC4KICAgKgogICAqIElmIGBlYWdlckVycm9yYCBpcyB0cnVlLCB0aGUgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yCiAgICogaW1tZWRpYXRlbHkgb24gdGhlIGZpcnN0IGVycm9yIGZyb20gb25lIG9mIHRoZSBmdXR1cmVzLiBPdGhlcndpc2UgYWxsCiAgICogZnV0dXJlcyBtdXN0IGNvbXBsZXRlIGJlZm9yZSB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCAoc3RpbGwgd2l0aAogICAqIHRoZSBmaXJzdCBlcnJvcjsgdGhlIHJlbWFpbmluZyBlcnJvcnMgYXJlIHNpbGVudGx5IGRyb3BwZWQpLgogICAqCiAgICogSW4gdGhlIGNhc2Ugb2YgYW4gZXJyb3IsIFtjbGVhblVwXSAoaWYgcHJvdmlkZWQpLCBpcyBpbnZva2VkIG9uIGFueQogICAqIG5vbi1udWxsIHJlc3VsdCBvZiBzdWNjZXNzZnVsIGZ1dHVyZXMuCiAgICogVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBgY2xlYW5VcGAgcmVzb3VyY2VzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGJlCiAgICogbG9zdCAoc2luY2UgdGhlIHJldHVybmVkIGZ1dHVyZSBkb2VzIG5vdCBwcm92aWRlIGFjY2VzcyB0byB0aGVzZSB2YWx1ZXMpLgogICAqIFRoZSBbY2xlYW5VcF0gZnVuY3Rpb24gaXMgdW51c2VkIGlmIHRoZXJlIGlzIG5vIGVycm9yLgogICAqCiAgICogVGhlIGNhbGwgdG8gW2NsZWFuVXBdIHNob3VsZCBub3QgdGhyb3cuIElmIGl0IGRvZXMsIHRoZSBlcnJvciB3aWxsIGJlIGFuCiAgICogdW5jYXVnaHQgYXN5bmNocm9ub3VzIGVycm9yLgogICAqLwogIHN0YXRpYyBGdXR1cmU8TGlzdDxUPj4gd2FpdDxUPihJdGVyYWJsZTxGdXR1cmU8VD4+IGZ1dHVyZXMsCiAgICAgIHtib29sIGVhZ2VyRXJyb3I6IGZhbHNlLCB2b2lkIGNsZWFuVXAoVCBzdWNjZXNzVmFsdWUpfSkgewogICAgZmluYWwgX0Z1dHVyZTxMaXN0PFQ+PiByZXN1bHQgPSBuZXcgX0Z1dHVyZTxMaXN0PFQ+PigpOwogICAgTGlzdDxUPiB2YWx1ZXM7IC8vIENvbGxlY3RzIHRoZSB2YWx1ZXMuIFNldCB0byBudWxsIG9uIGVycm9yLgogICAgaW50IHJlbWFpbmluZyA9IDA7IC8vIEhvdyBtYW55IGZ1dHVyZXMgYXJlIHdlIHdhaXRpbmcgZm9yLgogICAgdmFyIGVycm9yOyAvLyBUaGUgZmlyc3QgZXJyb3IgZnJvbSBhIGZ1dHVyZS4KICAgIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZTsgLy8gVGhlIHN0YWNrVHJhY2UgdGhhdCBjYW1lIHdpdGggdGhlIGVycm9yLgoKICAgIC8vIEhhbmRsZSBhbiBlcnJvciBmcm9tIGFueSBvZiB0aGUgZnV0dXJlcy4KICAgIC8vIFRPRE8oam1lc3Nlcmx5KTogdXNlIGB2b2lkYCByZXR1cm4gdHlwZSBvbmNlIGl0IGNhbiBiZSBpbmZlcnJlZCBmb3IgdGhlCiAgICAvLyBgdGhlbmAgY2FsbCBiZWxvdy4KICAgIGhhbmRsZUVycm9yKHRoZUVycm9yLCBTdGFja1RyYWNlIHRoZVN0YWNrVHJhY2UpIHsKICAgICAgcmVtYWluaW5nLS07CiAgICAgIGlmICh2YWx1ZXMgIT0gbnVsbCkgewogICAgICAgIGlmIChjbGVhblVwICE9IG51bGwpIHsKICAgICAgICAgIGZvciAodmFyIHZhbHVlIGluIHZhbHVlcykgewogICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICAgICAgICAgIC8vIEVuc3VyZSBlcnJvcnMgZnJvbSBjbGVhblVwIGFyZSB1bmNhdWdodC4KICAgICAgICAgICAgICBuZXcgRnV0dXJlLnN5bmMoKCkgewogICAgICAgICAgICAgICAgY2xlYW5VcCh2YWx1ZSk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFsdWVzID0gbnVsbDsKICAgICAgICBpZiAocmVtYWluaW5nID09IDAgfHwgZWFnZXJFcnJvcikgewogICAgICAgICAgcmVzdWx0Ll9jb21wbGV0ZUVycm9yKHRoZUVycm9yLCB0aGVTdGFja1RyYWNlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZXJyb3IgPSB0aGVFcnJvcjsKICAgICAgICAgIHN0YWNrVHJhY2UgPSB0aGVTdGFja1RyYWNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChyZW1haW5pbmcgPT0gMCAmJiAhZWFnZXJFcnJvcikgewogICAgICAgIHJlc3VsdC5fY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIH0KICAgIH0KCiAgICB0cnkgewogICAgICAvLyBBcyBlYWNoIGZ1dHVyZSBjb21wbGV0ZXMsIHB1dCBpdHMgdmFsdWUgaW50byB0aGUgY29ycmVzcG9uZGluZwogICAgICAvLyBwb3NpdGlvbiBpbiB0aGUgbGlzdCBvZiB2YWx1ZXMuCiAgICAgIGZvciAodmFyIGZ1dHVyZSBpbiBmdXR1cmVzKSB7CiAgICAgICAgaW50IHBvcyA9IHJlbWFpbmluZzsKICAgICAgICBmdXR1cmUudGhlbigoVCB2YWx1ZSkgewogICAgICAgICAgcmVtYWluaW5nLS07CiAgICAgICAgICBpZiAodmFsdWVzICE9IG51bGwpIHsKICAgICAgICAgICAgdmFsdWVzW3Bvc10gPSB2YWx1ZTsKICAgICAgICAgICAgaWYgKHJlbWFpbmluZyA9PSAwKSB7CiAgICAgICAgICAgICAgcmVzdWx0Ll9jb21wbGV0ZVdpdGhWYWx1ZSh2YWx1ZXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoY2xlYW5VcCAhPSBudWxsICYmIHZhbHVlICE9IG51bGwpIHsKICAgICAgICAgICAgICAvLyBFbnN1cmUgZXJyb3JzIGZyb20gY2xlYW5VcCBhcmUgdW5jYXVnaHQuCiAgICAgICAgICAgICAgbmV3IEZ1dHVyZS5zeW5jKCgpIHsKICAgICAgICAgICAgICAgIGNsZWFuVXAodmFsdWUpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyZW1haW5pbmcgPT0gMCAmJiAhZWFnZXJFcnJvcikgewogICAgICAgICAgICAgIHJlc3VsdC5fY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LCBvbkVycm9yOiBoYW5kbGVFcnJvcik7CiAgICAgICAgLy8gSW5jcmVtZW50IHRoZSAncmVtYWluaW5nJyBhZnRlciB0aGUgY2FsbCB0byAndGhlbicuCiAgICAgICAgLy8gSWYgdGhhdCBjYWxsIHRocm93cywgd2UgZG9uJ3QgZXhwZWN0IGFueSBmdXR1cmUgY2FsbGJhY2sgZnJvbQogICAgICAgIC8vIHRoZSBmdXR1cmUsIGFuZCB3ZSBhbHNvIGRvbid0IGluY3JlbWVudCByZW1haW5pbmcuCiAgICAgICAgcmVtYWluaW5nKys7CiAgICAgIH0KICAgICAgaWYgKHJlbWFpbmluZyA9PSAwKSB7CiAgICAgICAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUoY29uc3QgW10pOwogICAgICB9CiAgICAgIHZhbHVlcyA9IG5ldyBMaXN0PFQ+KHJlbWFpbmluZyk7CiAgICB9IGNhdGNoIChlLCBzdCkgewogICAgICAvLyBUaGUgZXJyb3IgbXVzdCBoYXZlIGJlZW4gdGhyb3duIHdoaWxlIGl0ZXJhdGluZyBvdmVyIHRoZSBmdXR1cmVzCiAgICAgIC8vIGxpc3QsIG9yIHdoaWxlIGluc3RhbGxpbmcgYSBjYWxsYmFjayBoYW5kbGVyIG9uIHRoZSBmdXR1cmUuCiAgICAgIGlmIChyZW1haW5pbmcgPT0gMCB8fCBlYWdlckVycm9yKSB7CiAgICAgICAgLy8gVGhyb3cgYSBuZXcgRnV0dXJlLmVycm9yLgogICAgICAgIC8vIERvbid0IGp1c3QgY2FsbCBgcmVzdWx0Ll9jb21wbGV0ZUVycm9yYCBzaW5jZSB0aGF0IHdvdWxkIHByb3BhZ2F0ZQogICAgICAgIC8vIHRoZSBlcnJvciB0b28gZWFnZXJseSwgbm90IGdpdmluZyB0aGUgY2FsbGVycyB0aW1lIHRvIGluc3RhbGwKICAgICAgICAvLyBlcnJvciBoYW5kbGVycy4KICAgICAgICAvLyBBbHNvLCBkb24ndCB1c2UgYF9hc3luY0NvbXBsZXRlRXJyb3JgIHNpbmNlIHRoYXQgb25lIGRvZXNuJ3QgZ2l2ZQogICAgICAgIC8vIHpvbmVzIHRoZSBjaGFuY2UgdG8gaW50ZXJjZXB0IHRoZSBlcnJvci4KICAgICAgICByZXR1cm4gbmV3IEZ1dHVyZS5lcnJvcihlLCBzdCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gRG9uJ3QgYWxsb2NhdGUgYSBsaXN0IGZvciB2YWx1ZXMsIHRodXMgaW5kaWNhdGluZyB0aGF0IHRoZXJlIHdhcyBhbgogICAgICAgIC8vIGVycm9yLgogICAgICAgIC8vIFNldCBlcnJvciB0byB0aGUgY2F1Z2h0IGV4Y2VwdGlvbi4KICAgICAgICBlcnJvciA9IGU7CiAgICAgICAgc3RhY2tUcmFjZSA9IHN0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBmaXJzdCBmdXR1cmUgaW4gW2Z1dHVyZXNdIHRvIGNvbXBsZXRlLgogICAqCiAgICogVGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBmaXJzdAogICAqIGZ1dHVyZSBpbiBbZnV0dXJlc10gdG8gcmVwb3J0IHRoYXQgaXQgaXMgY29tcGxldGUsCiAgICogd2hldGhlciBpdCdzIHdpdGggYSB2YWx1ZSBvciBhbiBlcnJvci4KICAgKiBUaGUgcmVzdWx0cyBvZiBhbGwgdGhlIG90aGVyIGZ1dHVyZXMgYXJlIGRpc2NhcmRlZC4KICAgKgogICAqIElmIFtmdXR1cmVzXSBpcyBlbXB0eSwgb3IgaWYgbm9uZSBvZiBpdHMgZnV0dXJlcyBjb21wbGV0ZSwKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIG5ldmVyIGNvbXBsZXRlcy4KICAgKi8KICBzdGF0aWMgRnV0dXJlPFQ+IGFueTxUPihJdGVyYWJsZTxGdXR1cmU8VD4+IGZ1dHVyZXMpIHsKICAgIHZhciBjb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPFQ+LnN5bmMoKTsKICAgIHZhciBvblZhbHVlID0gKFQgdmFsdWUpIHsKICAgICAgaWYgKCFjb21wbGV0ZXIuaXNDb21wbGV0ZWQpIGNvbXBsZXRlci5jb21wbGV0ZSh2YWx1ZSk7CiAgICB9OwogICAgdmFyIG9uRXJyb3IgPSAoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2spIHsKICAgICAgaWYgKCFjb21wbGV0ZXIuaXNDb21wbGV0ZWQpIGNvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFjayk7CiAgICB9OwogICAgZm9yICh2YXIgZnV0dXJlIGluIGZ1dHVyZXMpIHsKICAgICAgZnV0dXJlLnRoZW4ob25WYWx1ZSwgb25FcnJvcjogb25FcnJvcik7CiAgICB9CiAgICByZXR1cm4gY29tcGxldGVyLmZ1dHVyZTsKICB9CgogIC8qKgogICAqIFBlcmZvcm1zIGFuIGFjdGlvbiBmb3IgZWFjaCBlbGVtZW50IG9mIHRoZSBpdGVyYWJsZSwgaW4gdHVybi4KICAgKgogICAqIFRoZSBbYWN0aW9uXSBtYXkgYmUgZWl0aGVyIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cy4KICAgKgogICAqIENhbGxzIFthY3Rpb25dIHdpdGggZWFjaCBlbGVtZW50IGluIFtlbGVtZW50c10gaW4gb3JkZXIuCiAgICogSWYgdGhlIGNhbGwgdG8gW2FjdGlvbl0gcmV0dXJucyBhIGBGdXR1cmU8VD5gLCB0aGUgaXRlcmF0aW9uIHdhaXRzCiAgICogdW50aWwgdGhlIGZ1dHVyZSBpcyBjb21wbGV0ZWQgYmVmb3JlIGNvbnRpbnVpbmcgd2l0aCB0aGUgbmV4dCBlbGVtZW50LgogICAqCiAgICogUmV0dXJucyBhIFtGdXR1cmVdIHRoYXQgY29tcGxldGVzIHdpdGggYG51bGxgIHdoZW4gYWxsIGVsZW1lbnRzIGhhdmUgYmVlbgogICAqIHByb2Nlc3NlZC4KICAgKgogICAqIE5vbi1bRnV0dXJlXSByZXR1cm4gdmFsdWVzLCBhbmQgY29tcGxldGlvbi12YWx1ZXMgb2YgcmV0dXJuZWQgW0Z1dHVyZV1zLAogICAqIGFyZSBkaXNjYXJkZWQuCiAgICoKICAgKiBBbnkgZXJyb3IgZnJvbSBbYWN0aW9uXSwgc3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzLAogICAqIHdpbGwgc3RvcCB0aGUgaXRlcmF0aW9uIGFuZCBiZSByZXBvcnRlZCBpbiB0aGUgcmV0dXJuZWQgW0Z1dHVyZV0uCiAgICovCiAgc3RhdGljIEZ1dHVyZSBmb3JFYWNoPFQ+KEl0ZXJhYmxlPFQ+IGVsZW1lbnRzLCBGdXR1cmVPciBhY3Rpb24oVCBlbGVtZW50KSkgewogICAgdmFyIGl0ZXJhdG9yID0gZWxlbWVudHMuaXRlcmF0b3I7CiAgICByZXR1cm4gZG9XaGlsZSgoKSB7CiAgICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuIGZhbHNlOwogICAgICB2YXIgcmVzdWx0ID0gYWN0aW9uKGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgICBpZiAocmVzdWx0IGlzIEZ1dHVyZSkgcmV0dXJuIHJlc3VsdC50aGVuKF9rVHJ1ZSk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSk7CiAgfQoKICAvLyBDb25zdGFudCBgdHJ1ZWAgZnVuY3Rpb24sIHVzZWQgYXMgY2FsbGJhY2sgYnkgW2ZvckVhY2hdLgogIHN0YXRpYyBib29sIF9rVHJ1ZShfKSA9PiB0cnVlOwoKICAvKioKICAgKiBQZXJmb3JtcyBhbiBvcGVyYXRpb24gcmVwZWF0ZWRseSB1bnRpbCBpdCByZXR1cm5zIGBmYWxzZWAuCiAgICoKICAgKiBUaGUgb3BlcmF0aW9uLCBbYWN0aW9uXSwgbWF5IGJlIGVpdGhlciBzeW5jaHJvbm91cyBvciBhc3luY2hyb25vdXMuCiAgICoKICAgKiBUaGUgb3BlcmF0aW9uIGlzIGNhbGxlZCByZXBlYXRlZGx5IGFzIGxvbmcgYXMgaXQgcmV0dXJucyBlaXRoZXIgdGhlIFtib29sXQogICAqIHZhbHVlIGB0cnVlYCBvciBhIGBGdXR1cmU8Ym9vbD5gIHdoaWNoIGNvbXBsZXRlcyB3aXRoIHRoZSB2YWx1ZSBgdHJ1ZWAuCiAgICoKICAgKiBJZiBhIGNhbGwgdG8gW2FjdGlvbl0gcmV0dXJucyBgZmFsc2VgIG9yIGEgW0Z1dHVyZV0gdGhhdCBjb21wbGV0ZXMgdG8KICAgKiBgZmFsc2VgLCBpdGVyYXRpb24gZW5kcyBhbmQgdGhlIGZ1dHVyZSByZXR1cm5lZCBieSBbZG9XaGlsZV0gaXMgY29tcGxldGVkCiAgICogd2l0aCBhIGBudWxsYCB2YWx1ZS4KICAgKgogICAqIElmIGEgY2FsbCB0byBbYWN0aW9uXSB0aHJvd3Mgb3IgYSBmdXR1cmUgcmV0dXJuZWQgYnkgW2FjdGlvbl0gY29tcGxldGVzCiAgICogd2l0aCBhbiBlcnJvciwgaXRlcmF0aW9uIGVuZHMgYW5kIHRoZSBmdXR1cmUgcmV0dXJuZWQgYnkgW2RvV2hpbGVdCiAgICogY29tcGxldGVzIHdpdGggdGhlIHNhbWUgZXJyb3IuCiAgICoKICAgKiBDYWxscyB0byBbYWN0aW9uXSBtYXkgaGFwcGVuIGF0IGFueSB0aW1lLAogICAqIGluY2x1ZGluZyBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIGBkb1doaWxlYC4KICAgKiBUaGUgb25seSByZXN0cmljdGlvbiBpcyBhIG5ldyBjYWxsIHRvIFthY3Rpb25dIHdvbid0IGhhcHBlbiBiZWZvcmUKICAgKiB0aGUgcHJldmlvdXMgY2FsbCBoYXMgcmV0dXJuZWQsIGFuZCBpZiBpdCByZXR1cm5lZCBhIGBGdXR1cmU8Ym9vbD5gLCBub3QKICAgKiB1bnRpbCB0aGF0IGZ1dHVyZSBoYXMgY29tcGxldGVkLgogICAqLwogIHN0YXRpYyBGdXR1cmUgZG9XaGlsZShGdXR1cmVPcjxib29sPiBhY3Rpb24oKSkgewogICAgX0Z1dHVyZSBkb25lU2lnbmFsID0gbmV3IF9GdXR1cmUoKTsKICAgIHZvaWQgRnVuY3Rpb24oYm9vbCkgbmV4dEl0ZXJhdGlvbjsKICAgIC8vIEJpbmQgdGhpcyBjYWxsYmFjayBleHBsaWNpdGx5IHNvIHRoYXQgZWFjaCBpdGVyYXRpb24gaXNuJ3QgYm91bmQgaW4gdGhlCiAgICAvLyBjb250ZXh0IG9mIGFsbCB0aGUgcHJldmlvdXMgaXRlcmF0aW9ucycgY2FsbGJhY2tzLgogICAgLy8gVGhpcyBhdm9pZHMsIGUuZy4sIGRlZXBseSBuZXN0ZWQgc3RhY2sgdHJhY2VzIGZyb20gdGhlIHN0YWNrIHRyYWNlCiAgICAvLyBwYWNrYWdlLgogICAgbmV4dEl0ZXJhdGlvbiA9IFpvbmUuY3VycmVudC5iaW5kVW5hcnlDYWxsYmFja0d1YXJkZWQoKGJvb2wga2VlcEdvaW5nKSB7CiAgICAgIHdoaWxlIChrZWVwR29pbmcpIHsKICAgICAgICBGdXR1cmVPcjxib29sPiByZXN1bHQ7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJlc3VsdCA9IGFjdGlvbigpOwogICAgICAgIH0gY2F0Y2ggKGVycm9yLCBzdGFja1RyYWNlKSB7CiAgICAgICAgICAvLyBDYW5ub3QgdXNlIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrIGJlY2F1c2UgaXQgY29tcGxldGVzCiAgICAgICAgICAvLyB0aGUgZnV0dXJlIHN5bmNocm9ub3VzbHkuCiAgICAgICAgICBfYXN5bmNDb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrKGRvbmVTaWduYWwsIGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKHJlc3VsdCBpcyBGdXR1cmU8Ym9vbD4pIHsKICAgICAgICAgIHJlc3VsdC50aGVuKG5leHRJdGVyYXRpb24sIG9uRXJyb3I6IGRvbmVTaWduYWwuX2NvbXBsZXRlRXJyb3IpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBrZWVwR29pbmcgPSByZXN1bHQ7CiAgICAgIH0KICAgICAgZG9uZVNpZ25hbC5fY29tcGxldGUobnVsbCk7CiAgICB9KTsKICAgIG5leHRJdGVyYXRpb24odHJ1ZSk7CiAgICByZXR1cm4gZG9uZVNpZ25hbDsKICB9CgogIC8qKgogICAqIFJlZ2lzdGVyIGNhbGxiYWNrcyB0byBiZSBjYWxsZWQgd2hlbiB0aGlzIGZ1dHVyZSBjb21wbGV0ZXMuCiAgICoKICAgKiBXaGVuIHRoaXMgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGEgdmFsdWUsCiAgICogdGhlIFtvblZhbHVlXSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoYXQgdmFsdWUuCiAgICogSWYgdGhpcyBmdXR1cmUgaXMgYWxyZWFkeSBjb21wbGV0ZWQsIHRoZSBjYWxsYmFjayB3aWxsIG5vdCBiZSBjYWxsZWQKICAgKiBpbW1lZGlhdGVseSwgYnV0IHdpbGwgYmUgc2NoZWR1bGVkIGluIGEgbGF0ZXIgbWljcm90YXNrLgogICAqCiAgICogSWYgW29uRXJyb3JdIGlzIHByb3ZpZGVkLCBhbmQgdGhpcyBmdXR1cmUgY29tcGxldGVzIHdpdGggYW4gZXJyb3IsCiAgICogdGhlIGBvbkVycm9yYCBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCB0aGF0IGVycm9yIGFuZCBpdHMgc3RhY2sgdHJhY2UuCiAgICogVGhlIGBvbkVycm9yYCBjYWxsYmFjayBtdXN0IGFjY2VwdCBlaXRoZXIgb25lIGFyZ3VtZW50IG9yIHR3byBhcmd1bWVudHMKICAgKiB3aGVyZSB0aGUgbGF0dGVyIGlzIGEgW1N0YWNrVHJhY2VdLgogICAqIElmIGBvbkVycm9yYCBhY2NlcHRzIHR3byBhcmd1bWVudHMsCiAgICogaXQgaXMgY2FsbGVkIHdpdGggYm90aCB0aGUgZXJyb3IgYW5kIHRoZSBzdGFjayB0cmFjZSwKICAgKiBvdGhlcndpc2UgaXQgaXMgY2FsbGVkIHdpdGgganVzdCB0aGUgZXJyb3Igb2JqZWN0LgogICAqIFRoZSBgb25FcnJvcmAgY2FsbGJhY2sgbXVzdCByZXR1cm4gYSB2YWx1ZSBvciBmdXR1cmUgdGhhdCBjYW4gYmUgdXNlZAogICAqIHRvIGNvbXBsZXRlIHRoZSByZXR1cm5lZCBmdXR1cmUsIHNvIGl0IG11c3QgYmUgc29tZXRoaW5nIGFzc2lnbmFibGUgdG8KICAgKiBgRnV0dXJlT3I8Uj5gLgogICAqCiAgICogUmV0dXJucyBhIG5ldyBbRnV0dXJlXQogICAqIHdoaWNoIGlzIGNvbXBsZXRlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGNhbGwgdG8gYG9uVmFsdWVgCiAgICogKGlmIHRoaXMgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGEgdmFsdWUpCiAgICogb3IgdG8gYG9uRXJyb3JgIChpZiB0aGlzIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvcikuCiAgICoKICAgKiBJZiB0aGUgaW52b2tlZCBjYWxsYmFjayB0aHJvd3MsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgdGhyb3duIGVycm9yCiAgICogYW5kIGEgc3RhY2sgdHJhY2UgZm9yIHRoZSBlcnJvci4KICAgKiBJbiB0aGUgY2FzZSBvZiBgb25FcnJvcmAsCiAgICogaWYgdGhlIGV4Y2VwdGlvbiB0aHJvd24gaXMgYGlkZW50aWNhbGAgdG8gdGhlIGVycm9yIGFyZ3VtZW50IHRvIGBvbkVycm9yYCwKICAgKiB0aGUgdGhyb3cgaXMgY29uc2lkZXJlZCBhIHJldGhyb3csCiAgICogYW5kIHRoZSBvcmlnaW5hbCBzdGFjayB0cmFjZSBpcyB1c2VkIGluc3RlYWQuCiAgICoKICAgKiBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBhIFtGdXR1cmVdLAogICAqIHRoZSBmdXR1cmUgcmV0dXJuZWQgYnkgYHRoZW5gIHdpbGwgYmUgY29tcGxldGVkIHdpdGgKICAgKiB0aGUgc2FtZSByZXN1bHQgYXMgdGhlIGZ1dHVyZSByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2suCiAgICoKICAgKiBJZiBbb25FcnJvcl0gaXMgbm90IGdpdmVuLCBhbmQgdGhpcyBmdXR1cmUgY29tcGxldGVzIHdpdGggYW4gZXJyb3IsCiAgICogdGhlIGVycm9yIGlzIGZvcndhcmRlZCBkaXJlY3RseSB0byB0aGUgcmV0dXJuZWQgZnV0dXJlLgogICAqCiAgICogSW4gbW9zdCBjYXNlcywgaXQgaXMgbW9yZSByZWFkYWJsZSB0byB1c2UgW2NhdGNoRXJyb3JdIHNlcGFyYXRlbHksIHBvc3NpYmx5CiAgICogd2l0aCBhIGB0ZXN0YCBwYXJhbWV0ZXIsIGluc3RlYWQgb2YgaGFuZGxpbmcgYm90aCB2YWx1ZSBhbmQgZXJyb3IgaW4gYQogICAqIHNpbmdsZSBbdGhlbl0gY2FsbC4KICAgKgogICAqIE5vdGUgdGhhdCBmdXR1cmVzIGRvbid0IGRlbGF5IHJlcG9ydGluZyBvZiBlcnJvcnMgdW50aWwgbGlzdGVuZXJzIGFyZQogICAqIGFkZGVkLiBJZiB0aGUgZmlyc3QgYHRoZW5gIG9yIGBjYXRjaEVycm9yYCBjYWxsIGhhcHBlbnMgYWZ0ZXIgdGhpcyBmdXR1cmUKICAgKiBoYXMgY29tcGxldGVkIHdpdGggYW4gZXJyb3IgdGhlbiB0aGUgZXJyb3IgaXMgcmVwb3J0ZWQgYXMgdW5oYW5kbGVkIGVycm9yLgogICAqIFNlZSB0aGUgZGVzY3JpcHRpb24gb24gW0Z1dHVyZV0uCiAgICovCiAgRnV0dXJlPFI+IHRoZW48Uj4oRnV0dXJlT3I8Uj4gb25WYWx1ZShUIHZhbHVlKSwge0Z1bmN0aW9uIG9uRXJyb3J9KTsKCiAgLyoqCiAgICogSGFuZGxlcyBlcnJvcnMgZW1pdHRlZCBieSB0aGlzIFtGdXR1cmVdLgogICAqCiAgICogVGhpcyBpcyB0aGUgYXN5bmNocm9ub3VzIGVxdWl2YWxlbnQgb2YgYSAiY2F0Y2giIGJsb2NrLgogICAqCiAgICogUmV0dXJucyBhIG5ldyBbRnV0dXJlXSB0aGF0IHdpbGwgYmUgY29tcGxldGVkIHdpdGggZWl0aGVyIHRoZSByZXN1bHQgb2YKICAgKiB0aGlzIGZ1dHVyZSBvciB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIGBvbkVycm9yYCBjYWxsYmFjay4KICAgKgogICAqIElmIHRoaXMgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGEgdmFsdWUsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCB0aGUgc2FtZSB2YWx1ZS4KICAgKgogICAqIElmIHRoaXMgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yLAogICAqIHRoZW4gW3Rlc3RdIGlzIGZpcnN0IGNhbGxlZCB3aXRoIHRoZSBlcnJvciB2YWx1ZS4KICAgKgogICAqIElmIGB0ZXN0YCByZXR1cm5zIGZhbHNlLCB0aGUgZXhjZXB0aW9uIGlzIG5vdCBoYW5kbGVkIGJ5IHRoaXMgYGNhdGNoRXJyb3JgLAogICAqIGFuZCB0aGUgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIHRoZSBzYW1lIGVycm9yIGFuZCBzdGFjayB0cmFjZQogICAqIGFzIHRoaXMgZnV0dXJlLgogICAqCiAgICogSWYgYHRlc3RgIHJldHVybnMgYHRydWVgLAogICAqIFtvbkVycm9yXSBpcyBjYWxsZWQgd2l0aCB0aGUgZXJyb3IgYW5kIHBvc3NpYmx5IHN0YWNrIHRyYWNlLAogICAqIGFuZCB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhpcyBjYWxsCiAgICogaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgZm9yIFt0aGVuXSdzIGBvbkVycm9yYC4KICAgKgogICAqIElmIGB0ZXN0YCBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBhIGZ1bmN0aW9uIHRoYXQgYWx3YXlzIHJldHVybnMgdHJ1ZS4KICAgKiBUaGUgYHRlc3RgIGZ1bmN0aW9uIHNob3VsZCBub3QgdGhyb3csIGJ1dCBpZiBpdCBkb2VzLCBpdCBpcyBoYW5kbGVkIGFzCiAgICogaWYgdGhlIGBvbkVycm9yYCBmdW5jdGlvbiBoYWQgdGhyb3duLgogICAqCiAgICogTm90ZSB0aGF0IGZ1dHVyZXMgZG9uJ3QgZGVsYXkgcmVwb3J0aW5nIG9mIGVycm9ycyB1bnRpbCBsaXN0ZW5lcnMgYXJlCiAgICogYWRkZWQuIElmIHRoZSBmaXJzdCBgY2F0Y2hFcnJvcmAgKG9yIGB0aGVuYCkgY2FsbCBoYXBwZW5zIGFmdGVyIHRoaXMgZnV0dXJlCiAgICogaGFzIGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yIHRoZW4gdGhlIGVycm9yIGlzIHJlcG9ydGVkIGFzIHVuaGFuZGxlZCBlcnJvci4KICAgKiBTZWUgdGhlIGRlc2NyaXB0aW9uIG9uIFtGdXR1cmVdLgogICAqLwogIC8vIFRoZSBgRnVuY3Rpb25gIGJlbG93IHN0YW5kcyBmb3Igb25lIG9mIHR3byB0eXBlczoKICAvLyAtIChkeW5hbWljKSAtPiBGdXR1cmVPcjxUPgogIC8vIC0gKGR5bmFtaWMsIFN0YWNrVHJhY2UpIC0+IEZ1dHVyZU9yPFQ+CiAgLy8gR2l2ZW4gdGhhdCB0aGVyZSBpcyBhIGB0ZXN0YCBmdW5jdGlvbiB0aGF0IGlzIHVzdWFsbHkgdXNlZCB0byBkbyBhbgogIC8vIGBpc0NoZWNrYCB3ZSBzaG91bGQgYWxzbyBleHBlY3QgZnVuY3Rpb25zIHRoYXQgdGFrZSBhIHNwZWNpZmljIGFyZ3VtZW50LgogIEZ1dHVyZTxUPiBjYXRjaEVycm9yKEZ1bmN0aW9uIG9uRXJyb3IsIHtib29sIHRlc3QoT2JqZWN0IGVycm9yKX0pOwoKICAvKioKICAgKiBSZWdpc3RlcnMgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGlzIGZ1dHVyZSBjb21wbGV0ZXMuCiAgICoKICAgKiBUaGUgW2FjdGlvbl0gZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhpcyBmdXR1cmUgY29tcGxldGVzLCB3aGV0aGVyIGl0CiAgICogZG9lcyBzbyB3aXRoIGEgdmFsdWUgb3Igd2l0aCBhbiBlcnJvci4KICAgKgogICAqIFRoaXMgaXMgdGhlIGFzeW5jaHJvbm91cyBlcXVpdmFsZW50IG9mIGEgImZpbmFsbHkiIGJsb2NrLgogICAqCiAgICogVGhlIGZ1dHVyZSByZXR1cm5lZCBieSB0aGlzIGNhbGwsIGBmYCwgd2lsbCBjb21wbGV0ZSB0aGUgc2FtZSB3YXkKICAgKiBhcyB0aGlzIGZ1dHVyZSB1bmxlc3MgYW4gZXJyb3Igb2NjdXJzIGluIHRoZSBbYWN0aW9uXSBjYWxsLCBvciBpbgogICAqIGEgW0Z1dHVyZV0gcmV0dXJuZWQgYnkgdGhlIFthY3Rpb25dIGNhbGwuIElmIHRoZSBjYWxsIHRvIFthY3Rpb25dCiAgICogZG9lcyBub3QgcmV0dXJuIGEgZnV0dXJlLCBpdHMgcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWQuCiAgICoKICAgKiBJZiB0aGUgY2FsbCB0byBbYWN0aW9uXSB0aHJvd3MsIHRoZW4gYGZgIGlzIGNvbXBsZXRlZCB3aXRoIHRoZQogICAqIHRocm93biBlcnJvci4KICAgKgogICAqIElmIHRoZSBjYWxsIHRvIFthY3Rpb25dIHJldHVybnMgYSBbRnV0dXJlXSwgYGYyYCwgdGhlbiBjb21wbGV0aW9uIG9mCiAgICogYGZgIGlzIGRlbGF5ZWQgdW50aWwgYGYyYCBjb21wbGV0ZXMuIElmIGBmMmAgY29tcGxldGVzIHdpdGgKICAgKiBhbiBlcnJvciwgdGhhdCB3aWxsIGJlIHRoZSByZXN1bHQgb2YgYGZgIHRvby4gVGhlIHZhbHVlIG9mIGBmMmAgaXMgYWx3YXlzCiAgICogaWdub3JlZC4KICAgKgogICAqIFRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG86CiAgICoKICAgKiAgICAgRnV0dXJlPFQ+IHdoZW5Db21wbGV0ZShhY3Rpb24oKSkgewogICAqICAgICAgIHJldHVybiB0aGlzLnRoZW4oKHYpIHsKICAgKiAgICAgICAgIHZhciBmMiA9IGFjdGlvbigpOwogICAqICAgICAgICAgaWYgKGYyIGlzIEZ1dHVyZSkgcmV0dXJuIGYyLnRoZW4oKF8pID0+IHYpOwogICAqICAgICAgICAgcmV0dXJuIHYKICAgKiAgICAgICB9LCBvbkVycm9yOiAoZSkgewogICAqICAgICAgICAgdmFyIGYyID0gYWN0aW9uKCk7CiAgICogICAgICAgICBpZiAoZjIgaXMgRnV0dXJlKSByZXR1cm4gZjIudGhlbigoXykgeyB0aHJvdyBlOyB9KTsKICAgKiAgICAgICAgIHRocm93IGU7CiAgICogICAgICAgfSk7CiAgICogICAgIH0KICAgKi8KICBGdXR1cmU8VD4gd2hlbkNvbXBsZXRlKEZ1dHVyZU9yIGFjdGlvbigpKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtTdHJlYW1dIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1dHVyZS4KICAgKgogICAqIFRoZSBzdHJlYW0gd2lsbCBwcm9kdWNlIHNpbmdsZSBkYXRhIG9yIGVycm9yIGV2ZW50IGNvbnRhaW5pbmcgdGhlCiAgICogY29tcGxldGlvbiByZXN1bHQgb2YgdGhpcyBmdXR1cmUsIGFuZCB0aGVuIGl0IHdpbGwgY2xvc2Ugd2l0aCBhCiAgICogZG9uZSBldmVudC4KICAgKgogICAqIElmIHRoZSBmdXR1cmUgbmV2ZXIgY29tcGxldGVzLCB0aGUgc3RyZWFtIHdpbGwgbm90IHByb2R1Y2UgYW55IGV2ZW50cy4KICAgKi8KICBTdHJlYW08VD4gYXNTdHJlYW0oKTsKCiAgLyoqCiAgICogVGltZS1vdXQgdGhlIGZ1dHVyZSBjb21wdXRhdGlvbiBhZnRlciBbdGltZUxpbWl0XSBoYXMgcGFzc2VkLgogICAqCiAgICogUmV0dXJucyBhIG5ldyBmdXR1cmUgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGUgc2FtZSB2YWx1ZSBhcyB0aGlzIGZ1dHVyZSwKICAgKiBpZiB0aGlzIGZ1dHVyZSBjb21wbGV0ZXMgaW4gdGltZS4KICAgKgogICAqIElmIHRoaXMgZnV0dXJlIGRvZXMgbm90IGNvbXBsZXRlIGJlZm9yZSBgdGltZUxpbWl0YCBoYXMgcGFzc2VkLAogICAqIHRoZSBbb25UaW1lb3V0XSBhY3Rpb24gaXMgZXhlY3V0ZWQgaW5zdGVhZCwgYW5kIGl0cyByZXN1bHQgKHdoZXRoZXIgaXQKICAgKiByZXR1cm5zIG9yIHRocm93cykgaXMgdXNlZCBhcyB0aGUgcmVzdWx0IG9mIHRoZSByZXR1cm5lZCBmdXR1cmUuCiAgICogVGhlIFtvblRpbWVvdXRdIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgW1RdIG9yIGEgYEZ1dHVyZTxUPmAuCiAgICoKICAgKiBJZiBgb25UaW1lb3V0YCBpcyBvbWl0dGVkLCBhIHRpbWVvdXQgd2lsbCBjYXVzZSB0aGUgcmV0dXJuZWQgZnV0dXJlIHRvCiAgICogY29tcGxldGUgd2l0aCBhIFtUaW1lb3V0RXhjZXB0aW9uXS4KICAgKi8KICBGdXR1cmU8VD4gdGltZW91dChEdXJhdGlvbiB0aW1lTGltaXQsIHtGdXR1cmVPcjxUPiBvblRpbWVvdXQoKX0pOwp9CgovKioKICogVGhyb3duIHdoZW4gYSBzY2hlZHVsZWQgdGltZW91dCBoYXBwZW5zIHdoaWxlIHdhaXRpbmcgZm9yIGFuIGFzeW5jIHJlc3VsdC4KICovCmNsYXNzIFRpbWVvdXRFeGNlcHRpb24gaW1wbGVtZW50cyBFeGNlcHRpb24gewogIC8qKiBEZXNjcmlwdGlvbiBvZiB0aGUgY2F1c2Ugb2YgdGhlIHRpbWVvdXQuICovCiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CiAgLyoqIFRoZSBkdXJhdGlvbiB0aGF0IHdhcyBleGNlZWRlZC4gKi8KICBmaW5hbCBEdXJhdGlvbiBkdXJhdGlvbjsKCiAgVGltZW91dEV4Y2VwdGlvbih0aGlzLm1lc3NhZ2UsIFt0aGlzLmR1cmF0aW9uXSk7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZyByZXN1bHQgPSAiVGltZW91dEV4Y2VwdGlvbiI7CiAgICBpZiAoZHVyYXRpb24gIT0gbnVsbCkgcmVzdWx0ID0gIlRpbWVvdXRFeGNlcHRpb24gYWZ0ZXIgJGR1cmF0aW9uIjsKICAgIGlmIChtZXNzYWdlICE9IG51bGwpIHJlc3VsdCA9ICIkcmVzdWx0OiAkbWVzc2FnZSI7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKLyoqCiAqIEEgd2F5IHRvIHByb2R1Y2UgRnV0dXJlIG9iamVjdHMgYW5kIHRvIGNvbXBsZXRlIHRoZW0gbGF0ZXIKICogd2l0aCBhIHZhbHVlIG9yIGVycm9yLgogKgogKiBNb3N0IG9mIHRoZSB0aW1lLCB0aGUgc2ltcGxlc3Qgd2F5IHRvIGNyZWF0ZSBhIGZ1dHVyZSBpcyB0byBqdXN0IHVzZQogKiBvbmUgb2YgdGhlIFtGdXR1cmVdIGNvbnN0cnVjdG9ycyB0byBjYXB0dXJlIHRoZSByZXN1bHQgb2YgYSBzaW5nbGUKICogYXN5bmNocm9ub3VzIGNvbXB1dGF0aW9uOgogKiBgYGAKICogbmV3IEZ1dHVyZSgoKSB7IGRvU29tZXRoaW5nKCk7IHJldHVybiByZXN1bHQ7IH0pOwogKiBgYGAKICogb3IsIGlmIHRoZSBmdXR1cmUgcmVwcmVzZW50cyB0aGUgcmVzdWx0IG9mIGEgc2VxdWVuY2Ugb2YgYXN5bmNocm9ub3VzCiAqIGNvbXB1dGF0aW9ucywgdGhleSBjYW4gYmUgY2hhaW5lZCB1c2luZyBbRnV0dXJlLnRoZW5dIG9yIHNpbWlsYXIgZnVuY3Rpb25zCiAqIG9uIFtGdXR1cmVdOgogKiBgYGAKICogRnV0dXJlIGRvU3R1ZmYoKXsKICogICByZXR1cm4gc29tZUFzeW5jT3BlcmF0aW9uKCkudGhlbigocmVzdWx0KSB7CiAqICAgICByZXR1cm4gc29tZU90aGVyQXN5bmNPcGVyYXRpb24ocmVzdWx0KTsKICogICB9KTsKICogfQogKiBgYGAKICogSWYgeW91IGRvIG5lZWQgdG8gY3JlYXRlIGEgRnV0dXJlIGZyb20gc2NyYXRjaCDigJQgZm9yIGV4YW1wbGUsCiAqIHdoZW4geW91J3JlIGNvbnZlcnRpbmcgYSBjYWxsYmFjay1iYXNlZCBBUEkgaW50byBhIEZ1dHVyZS1iYXNlZAogKiBvbmUg4oCUIHlvdSBjYW4gdXNlIGEgQ29tcGxldGVyIGFzIGZvbGxvd3M6CiAqIGBgYAogKiBjbGFzcyBBc3luY09wZXJhdGlvbiB7CiAqICAgQ29tcGxldGVyIF9jb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyKCk7CiAqCiAqICAgRnV0dXJlPFQ+IGRvT3BlcmF0aW9uKCkgewogKiAgICAgX3N0YXJ0T3BlcmF0aW9uKCk7CiAqICAgICByZXR1cm4gX2NvbXBsZXRlci5mdXR1cmU7IC8vIFNlbmQgZnV0dXJlIG9iamVjdCBiYWNrIHRvIGNsaWVudC4KICogICB9CiAqCiAqICAgLy8gU29tZXRoaW5nIGNhbGxzIHRoaXMgd2hlbiB0aGUgdmFsdWUgaXMgcmVhZHkuCiAqICAgdm9pZCBfZmluaXNoT3BlcmF0aW9uKFQgcmVzdWx0KSB7CiAqICAgICBfY29tcGxldGVyLmNvbXBsZXRlKHJlc3VsdCk7CiAqICAgfQogKgogKiAgIC8vIElmIHNvbWV0aGluZyBnb2VzIHdyb25nLCBjYWxsIHRoaXMuCiAqICAgdm9pZCBfZXJyb3JIYXBwZW5lZChlcnJvcikgewogKiAgICAgX2NvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yKTsKICogICB9CiAqIH0KICogYGBgCiAqLwphYnN0cmFjdCBjbGFzcyBDb21wbGV0ZXI8VD4gewogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgY29tcGxldGVyLgogICAqCiAgICogVGhlIGdlbmVyYWwgd29ya2Zsb3cgZm9yIGNyZWF0aW5nIGEgbmV3IGZ1dHVyZSBpcyB0byAxKSBjcmVhdGUgYQogICAqIG5ldyBjb21wbGV0ZXIsIDIpIGhhbmQgb3V0IGl0cyBmdXR1cmUsIGFuZCwgYXQgYSBsYXRlciBwb2ludCwgMykgaW52b2tlCiAgICogZWl0aGVyIFtjb21wbGV0ZV0gb3IgW2NvbXBsZXRlRXJyb3JdLgogICAqCiAgICogVGhlIGNvbXBsZXRlciBjb21wbGV0ZXMgdGhlIGZ1dHVyZSBhc3luY2hyb25vdXNseS4gVGhhdCBtZWFucyB0aGF0CiAgICogY2FsbGJhY2tzIHJlZ2lzdGVyZWQgb24gdGhlIGZ1dHVyZSBhcmUgbm90IGNhbGxlZCBpbW1lZGlhdGVseSB3aGVuCiAgICogW2NvbXBsZXRlXSBvciBbY29tcGxldGVFcnJvcl0gaXMgY2FsbGVkLiBJbnN0ZWFkIHRoZSBjYWxsYmFja3MgYXJlCiAgICogZGVsYXllZCB1bnRpbCBhIGxhdGVyIG1pY3JvdGFzay4KICAgKgogICAqIEV4YW1wbGU6CiAgICogYGBgCiAgICogdmFyIGNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXIoKTsKICAgKiBoYW5kT3V0KGNvbXBsZXRlci5mdXR1cmUpOwogICAqIGxhdGVyOiB7CiAgICogICBjb21wbGV0ZXIuY29tcGxldGUoJ2NvbXBsZXRpb24gdmFsdWUnKTsKICAgKiB9CiAgICogYGBgCiAgICovCiAgZmFjdG9yeSBDb21wbGV0ZXIoKSA9PiBuZXcgX0FzeW5jQ29tcGxldGVyPFQ+KCk7CgogIC8qKgogICAqIENvbXBsZXRlcyB0aGUgZnV0dXJlIHN5bmNocm9ub3VzbHkuCiAgICoKICAgKiBUaGlzIGNvbnN0cnVjdG9yIHNob3VsZCBiZSBhdm9pZGVkIHVubGVzcyB0aGUgY29tcGxldGlvbiBvZiB0aGUgZnV0dXJlIGlzCiAgICoga25vd24gdG8gYmUgdGhlIGZpbmFsIHJlc3VsdCBvZiBhbm90aGVyIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uIElmIGluIGRvdWJ0CiAgICogdXNlIHRoZSBkZWZhdWx0IFtDb21wbGV0ZXJdIGNvbnN0cnVjdG9yLgogICAqCiAgICogVXNpbmcgYW4gbm9ybWFsLCBhc3luY2hyb25vdXMsIGNvbXBsZXRlciB3aWxsIG5ldmVyIGdpdmUgdGhlIHdyb25nCiAgICogYmVoYXZpb3IsIGJ1dCB1c2luZyBhIHN5bmNocm9ub3VzIGNvbXBsZXRlciBpbmNvcnJlY3RseSBjYW4gY2F1c2UKICAgKiBvdGhlcndpc2UgY29ycmVjdCBwcm9ncmFtcyB0byBicmVhay4KICAgKgogICAqIEEgc3luY2hyb25vdXMgY29tcGxldGVyIGlzIG9ubHkgaW50ZW5kZWQgZm9yIG9wdGltaXppbmcgZXZlbnQKICAgKiBwcm9wYWdhdGlvbiB3aGVuIG9uZSBhc3luY2hyb25vdXMgZXZlbnQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYW5vdGhlci4KICAgKiBJdCBzaG91bGQgbm90IGJlIHVzZWQgdW5sZXNzIHRoZSBjYWxscyB0byBbY29tcGxldGVdIGFuZCBbY29tcGxldGVFcnJvcl0KICAgKiBhcmUgZ3VhcmFudGVlZCB0byBvY2N1ciBpbiBwbGFjZXMgd2hlcmUgaXQgd29uJ3QgYnJlYWsgYEZ1dHVyZWAgaW52YXJpYW50cy4KICAgKgogICAqIENvbXBsZXRpbmcgc3luY2hyb25vdXNseSBtZWFucyB0aGF0IHRoZSBjb21wbGV0ZXIncyBmdXR1cmUgd2lsbCBiZQogICAqIGNvbXBsZXRlZCBpbW1lZGlhdGVseSB3aGVuIGNhbGxpbmcgdGhlIFtjb21wbGV0ZV0gb3IgW2NvbXBsZXRlRXJyb3JdCiAgICogbWV0aG9kIG9uIGEgc3luY2hyb25vdXMgY29tcGxldGVyLCB3aGljaCBhbHNvIGNhbGxzIGFueSBjYWxsYmFja3MKICAgKiByZWdpc3RlcmVkIG9uIHRoYXQgZnV0dXJlLgogICAqCiAgICogQ29tcGxldGluZyBzeW5jaHJvbm91c2x5IG11c3Qgbm90IGJyZWFrIHRoZSBydWxlIHRoYXQgd2hlbiB5b3UgYWRkIGEKICAgKiBjYWxsYmFjayBvbiBhIGZ1dHVyZSwgdGhhdCBjYWxsYmFjayBtdXN0IG5vdCBiZSBjYWxsZWQgdW50aWwgdGhlIGNvZGUKICAgKiB0aGF0IGFkZGVkIHRoZSBjYWxsYmFjayBoYXMgY29tcGxldGVkLgogICAqIEZvciB0aGF0IHJlYXNvbiwgYSBzeW5jaHJvbm91cyBjb21wbGV0aW9uIG11c3Qgb25seSBvY2N1ciBhdCB0aGUgdmVyeSBlbmQKICAgKiAoaW4gInRhaWwgcG9zaXRpb24iKSBvZiBhbm90aGVyIHN5bmNocm9ub3VzIGV2ZW50LAogICAqIGJlY2F1c2UgYXQgdGhhdCBwb2ludCwgY29tcGxldGluZyB0aGUgZnV0dXJlIGltbWVkaWF0ZWx5IGlzIGJlIGVxdWl2YWxlbnQKICAgKiB0byByZXR1cm5pbmcgdG8gdGhlIGV2ZW50IGxvb3AgYW5kIGNvbXBsZXRpbmcgdGhlIGZ1dHVyZSBpbiB0aGUgbmV4dAogICAqIG1pY3JvdGFzay4KICAgKgogICAqIEV4YW1wbGU6CiAgICoKICAgKiAgICAgdmFyIGNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXIuc3luYygpOwogICAqICAgICAvLyBUaGUgY29tcGxldGlvbiBpcyB0aGUgcmVzdWx0IG9mIHRoZSBhc3luY2hyb25vdXMgb25Eb25lIGV2ZW50LgogICAqICAgICAvLyBObyBvdGhlciBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIGFmdGVyIHRoZSBjb21wbGV0aW9uLiBJdCBpcyBzYWZlCiAgICogICAgIC8vIHRvIHVzZSB0aGUgQ29tcGxldGVyLnN5bmMgY29uc3RydWN0b3IuCiAgICogICAgIHN0cmVhbS5saXN0ZW4ocHJpbnQsIG9uRG9uZTogKCkgeyBjb21wbGV0ZXIuY29tcGxldGUoImRvbmUiKTsgfSk7CiAgICoKICAgKiBCYWQgZXhhbXBsZS4gRG8gbm90IHVzZSB0aGlzIGNvZGUuIE9ubHkgZm9yIGlsbHVzdHJhdGl2ZSBwdXJwb3NlczoKICAgKgogICAqICAgICB2YXIgY29tcGxldGVyID0gbmV3IENvbXBsZXRlci5zeW5jKCk7CiAgICogICAgIGNvbXBsZXRlci5mdXR1cmUudGhlbigoXykgeyBiYXIoKTsgfSk7CiAgICogICAgIC8vIFRoZSBjb21wbGV0aW9uIGlzIHRoZSByZXN1bHQgb2YgdGhlIGFzeW5jaHJvbm91cyBvbkRvbmUgZXZlbnQuCiAgICogICAgIC8vIEhvd2V2ZXIsIHRoZXJlIGlzIHN0aWxsIGNvZGUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGNvbXBsZXRpb24uIFRoaXMKICAgKiAgICAgLy8gb3BlcmF0aW9uIGlzICpub3QqIHNhZmUuCiAgICogICAgIHN0cmVhbS5saXN0ZW4ocHJpbnQsIG9uRG9uZTogKCkgewogICAqICAgICAgIGNvbXBsZXRlci5jb21wbGV0ZSgiZG9uZSIpOwogICAqICAgICAgIGZvbygpOyAgLy8gSW4gdGhpcyBjYXNlLCBmb28oKSBydW5zIGFmdGVyIGJhcigpLgogICAqICAgICB9KTsKICAgKi8KICBmYWN0b3J5IENvbXBsZXRlci5zeW5jKCkgPT4gbmV3IF9TeW5jQ29tcGxldGVyPFQ+KCk7CgogIC8qKgogICAqIFRoZSBmdXR1cmUgdGhhdCBpcyBjb21wbGV0ZWQgYnkgdGhpcyBjb21wbGV0ZXIuCiAgICoKICAgKiBUaGUgZnV0dXJlIHRoYXQgaXMgY29tcGxldGVkIHdoZW4gW2NvbXBsZXRlXSBvciBbY29tcGxldGVFcnJvcl0gaXMgY2FsbGVkLgogICAqLwogIEZ1dHVyZTxUPiBnZXQgZnV0dXJlOwoKICAvKioKICAgKiBDb21wbGV0ZXMgW2Z1dHVyZV0gd2l0aCB0aGUgc3VwcGxpZWQgdmFsdWVzLgogICAqCiAgICogVGhlIHZhbHVlIG11c3QgYmUgZWl0aGVyIGEgdmFsdWUgb2YgdHlwZSBbVF0KICAgKiBvciBhIGZ1dHVyZSBvZiB0eXBlIGBGdXR1cmU8VD5gLgogICAqCiAgICogSWYgdGhlIHZhbHVlIGlzIGl0c2VsZiBhIGZ1dHVyZSwgdGhlIGNvbXBsZXRlciB3aWxsIHdhaXQgZm9yIHRoYXQgZnV0dXJlCiAgICogdG8gY29tcGxldGUsIGFuZCBjb21wbGV0ZSB3aXRoIHRoZSBzYW1lIHJlc3VsdCwgd2hldGhlciBpdCBpcyBhIHN1Y2Nlc3MKICAgKiBvciBhbiBlcnJvci4KICAgKgogICAqIENhbGxpbmcgW2NvbXBsZXRlXSBvciBbY29tcGxldGVFcnJvcl0gbXVzdCBiZSBkb25lIGF0IG1vc3Qgb25jZS4KICAgKgogICAqIEFsbCBsaXN0ZW5lcnMgb24gdGhlIGZ1dHVyZSBhcmUgaW5mb3JtZWQgYWJvdXQgdGhlIHZhbHVlLgogICAqLwogIHZvaWQgY29tcGxldGUoW0Z1dHVyZU9yPFQ+IHZhbHVlXSk7CgogIC8qKgogICAqIENvbXBsZXRlIFtmdXR1cmVdIHdpdGggYW4gZXJyb3IuCiAgICoKICAgKiBDYWxsaW5nIFtjb21wbGV0ZV0gb3IgW2NvbXBsZXRlRXJyb3JdIG11c3QgYmUgZG9uZSBhdCBtb3N0IG9uY2UuCiAgICoKICAgKiBDb21wbGV0aW5nIGEgZnV0dXJlIHdpdGggYW4gZXJyb3IgaW5kaWNhdGVzIHRoYXQgYW4gZXhjZXB0aW9uIHdhcyB0aHJvd24KICAgKiB3aGlsZSB0cnlpbmcgdG8gcHJvZHVjZSBhIHZhbHVlLgogICAqCiAgICogSWYgW2Vycm9yXSBpcyBgbnVsbGAsIGl0IGlzIHJlcGxhY2VkIGJ5IGEgW051bGxUaHJvd25FcnJvcl0uCiAgICoKICAgKiBJZiBgZXJyb3JgIGlzIGEgYEZ1dHVyZWAsIHRoZSBmdXR1cmUgaXRzZWxmIGlzIHVzZWQgYXMgdGhlIGVycm9yIHZhbHVlLgogICAqIElmIHlvdSB3YW50IHRvIGNvbXBsZXRlIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZnV0dXJlLCB5b3UgY2FuIHVzZToKICAgKiBgYGAKICAgKiB0aGlzQ29tcGxldGVyLmNvbXBsZXRlKHRoZUZ1dHVyZSkKICAgKiBgYGAKICAgKiBvciBpZiB5b3Ugb25seSB3YW50IHRvIGhhbmRsZSBhbiBlcnJvciBmcm9tIHRoZSBmdXR1cmU6CiAgICogYGBgCiAgICogdGhlRnV0dXJlLmNhdGNoRXJyb3IodGhpc0NvbXBsZXRlci5jb21wbGV0ZUVycm9yKTsKICAgKiBgYGAKICAgKi8KICB2b2lkIGNvbXBsZXRlRXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSk7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIFtmdXR1cmVdIGhhcyBiZWVuIGNvbXBsZXRlZC4KICAgKgogICAqIFJlZmxlY3RzIHdoZXRoZXIgW2NvbXBsZXRlXSBvciBbY29tcGxldGVFcnJvcl0gaGFzIGJlZW4gY2FsbGVkLgogICAqIEEgYHRydWVgIHZhbHVlIGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IGxpc3RlbmVycyBvZiB0aGlzIGZ1dHVyZQogICAqIGhhdmUgYmVlbiBpbnZva2VkIHlldCwgZWl0aGVyIGJlY2F1c2UgdGhlIGNvbXBsZXRlciB1c3VhbGx5IHdhaXRzIHVudGlsCiAgICogYSBsYXRlciBtaWNyb3Rhc2sgdG8gcHJvcGFnYXRlIHRoZSByZXN1bHQsIG9yIGJlY2F1c2UgW2NvbXBsZXRlXQogICAqIHdhcyBjYWxsZWQgd2l0aCBhIGZ1dHVyZSB0aGF0IGhhc24ndCBjb21wbGV0ZWQgeWV0LgogICAqCiAgICogV2hlbiB0aGlzIHZhbHVlIGlzIGB0cnVlYCwgW2NvbXBsZXRlXSBhbmQgW2NvbXBsZXRlRXJyb3JdIG11c3Qgbm90IGJlCiAgICogY2FsbGVkIGFnYWluLgogICAqLwogIGJvb2wgZ2V0IGlzQ29tcGxldGVkOwp9CgovLyBIZWxwZXIgZnVuY3Rpb24gY29tcGxldGluZyBhIF9GdXR1cmUgd2l0aCBlcnJvciwgYnV0IGNoZWNraW5nIHRoZSB6b25lCi8vIGZvciBlcnJvciByZXBsYWNlbWVudCBmaXJzdC4Kdm9pZCBfY29tcGxldGVXaXRoRXJyb3JDYWxsYmFjayhfRnV0dXJlIHJlc3VsdCwgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogIEFzeW5jRXJyb3IgcmVwbGFjZW1lbnQgPSBab25lLmN1cnJlbnQuZXJyb3JDYWxsYmFjayhlcnJvciwgc3RhY2tUcmFjZSk7CiAgaWYgKHJlcGxhY2VtZW50ICE9IG51bGwpIHsKICAgIGVycm9yID0gX25vbk51bGxFcnJvcihyZXBsYWNlbWVudC5lcnJvcik7CiAgICBzdGFja1RyYWNlID0gcmVwbGFjZW1lbnQuc3RhY2tUcmFjZTsKICB9CiAgcmVzdWx0Ll9jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKfQoKLy8gTGlrZSBbX2NvbXBsZXRlV2l0aEVycm9yQ2FsbGJhY2tdIGJ1dCBjb21wbGV0ZXMgYXN5bmNocm9ub3VzbHkuCnZvaWQgX2FzeW5jQ29tcGxldGVXaXRoRXJyb3JDYWxsYmFjaygKICAgIF9GdXR1cmUgcmVzdWx0LCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgQXN5bmNFcnJvciByZXBsYWNlbWVudCA9IFpvbmUuY3VycmVudC5lcnJvckNhbGxiYWNrKGVycm9yLCBzdGFja1RyYWNlKTsKICBpZiAocmVwbGFjZW1lbnQgIT0gbnVsbCkgewogICAgZXJyb3IgPSBfbm9uTnVsbEVycm9yKHJlcGxhY2VtZW50LmVycm9yKTsKICAgIHN0YWNrVHJhY2UgPSByZXBsYWNlbWVudC5zdGFja1RyYWNlOwogIH0KICByZXN1bHQuX2FzeW5jQ29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7Cn0KCi8qKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjb252ZXJ0cyBgbnVsbGAgdG8gYSBbTnVsbFRocm93bkVycm9yXS4gKi8KT2JqZWN0IF9ub25OdWxsRXJyb3IoT2JqZWN0IGVycm9yKSA9PiBlcnJvciA/PyBuZXcgTnVsbFRocm93bkVycm9yKCk7CoOjAE5OPAEPARQBQwRATxMETBAEDw1OIDAEQiYIBA9RQUtKTT0EOE4WHVETEUIEAgEEMQNANjI4EAMpMjkDLCgqLgNIUCEsQT1NA0ZLG0wQBzU9RAgUPhtIEEMJCQcDSj4/SUw6Bx0xSkVJNS80BwcDTEFMQE5RHk8eRQcYCRgYEREFBwMzB0oqIgcDR0lKQwNOSQNLCwQbLis0AS8sNQEGRSYFTR8FP0cyBUkWBi4qEwwpFzIICBMEAQZFLgUoPQVARzIFOjcGOCobDCkXMggIEwQBBkMUBVAMBU4FOkQGMwoiIRcPLQgiJU4hJEcPNwgVBgQBBi4FPkpKRQVDHTgFPwYuLAQBBjQFT1BMIwVCBT8GQCIvTiEyLQgGPQQBBj8FT0UFKE0bBSNDJAUiPkQFUAwFSUUGSyodISAPDisZNAoICBMEAQZIBUhIIwVMSxAFLDlPBUpLT0IFSSxLTzwFTiIGPkA8Qj8xRwEwTxo2ExwfJiE6IyASDgwKFyw6ERwmCjIyCAYBCkgpJB0gFyAhIjEOEzQ6IyASDjE4DgwiP0k+FQgcKwgnFkpFKiVOSRtNNCgPTxIuExkIBhMEAQZGBUM4LDkFQCoGOS0ePQcuSQciLgYdBAEGQwU9BT5ITAVPEAVOFAU7RwZPJhguLTgTCAQBPiEBBkAFSQVQTQVLTxoFTUgkBS80SE4mBjMoJ086ShBNGh8OHSZIJ0oSCiZKEgocCCIIGRcEAQZBBS48Sj4FSEtNKSk7OEtMFAUcQS0/BSU8Jh9QKDMFKTo9BUk9BVFMGQVLT1AmBkcBBi4FPQVNQgUsOAUtNwVRSxUFH0JHOAVPTCsFS1FQJgY3ICxJTkUBBkMFTCwFPwVHR0c8BUQTBUpBTw4FIwUsIiA5Fh0gQRYPCwYtAQY+BUdFEQVMBhgBBkMFTScFRUxGQgVMKQZEAgEETgQuMhgpGwEzARYoRzcTBAIBBD4aA0hGHQc1B0lOEAcVMS8JBQdBQy0HGi0DHxpHBwM2JyQHAywiKAcFBwQeBh4FRk0rBUhISCYFDgkmIA4vBwkGMwEGKQVPUS4FSEcqBUNLTlEFSEpHIAVKSyxPOE9KEAUOBS9LTTNLBUgFLzBLTSUrJzwNBjcBBjUFUAYYAQYyBTImBU5NEgVGBT8GJgEGJgVGBU4mBUIFTUkJJwk9CTgJBj0BBi4FRUtNRjkFSxMGGAIBSiBQSh0uKQQsAgFDJjRKHS4pBDECAURGARZkYXJ0OmFzeW5jL2Z1dHVyZS5kYXJ0PW9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2FzeW5jL3RpbWVyLmRhcnSSLy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmFzeW5jOwoKLyoqCiAqIEEgY291bnQtZG93biB0aW1lciB0aGF0IGNhbiBiZSBjb25maWd1cmVkIHRvIGZpcmUgb25jZSBvciByZXBlYXRlZGx5LgogKgogKiBUaGUgdGltZXIgY291bnRzIGRvd24gZnJvbSB0aGUgc3BlY2lmaWVkIGR1cmF0aW9uIHRvIDAuCiAqIFdoZW4gdGhlIHRpbWVyIHJlYWNoZXMgMCwgdGhlIHRpbWVyIGludm9rZXMgdGhlIHNwZWNpZmllZCBjYWxsYmFjayBmdW5jdGlvbi4KICogVXNlIGEgcGVyaW9kaWMgdGltZXIgdG8gcmVwZWF0ZWRseSBjb3VudCBkb3duIHRoZSBzYW1lIGludGVydmFsLgogKgogKiBBIG5lZ2F0aXZlIGR1cmF0aW9uIGlzIHRyZWF0ZWQgdGhlIHNhbWUgYXMgYSBkdXJhdGlvbiBvZiAwLgogKiBJZiB0aGUgZHVyYXRpb24gaXMgc3RhdGljYWxseSBrbm93biB0byBiZSAwLCBjb25zaWRlciB1c2luZyBbcnVuXS4KICoKICogRnJlcXVlbnRseSB0aGUgZHVyYXRpb24gaXMgZWl0aGVyIGEgY29uc3RhbnQgb3IgY29tcHV0ZWQgYXMgaW4gdGhlCiAqIGZvbGxvd2luZyBleGFtcGxlICh0YWtpbmcgYWR2YW50YWdlIG9mIHRoZSBtdWx0aXBsaWNhdGlvbiBvcGVyYXRvciBvZgogKiB0aGUgW0R1cmF0aW9uXSBjbGFzcyk6CiAqIGBgYGRhcnQKICogY29uc3QgdGltZW91dCA9IGNvbnN0IER1cmF0aW9uKHNlY29uZHM6IDMpOwogKiBjb25zdCBtcyA9IGNvbnN0IER1cmF0aW9uKG1pbGxpc2Vjb25kczogMSk7CiAqCiAqIHN0YXJ0VGltZW91dChbaW50IG1pbGxpc2Vjb25kc10pIHsKICogICB2YXIgZHVyYXRpb24gPSBtaWxsaXNlY29uZHMgPT0gbnVsbCA/IHRpbWVvdXQgOiBtcyAqIG1pbGxpc2Vjb25kczsKICogICByZXR1cm4gbmV3IFRpbWVyKGR1cmF0aW9uLCBoYW5kbGVUaW1lb3V0KTsKICogfQogKiAuLi4KICogdm9pZCBoYW5kbGVUaW1lb3V0KCkgeyAgLy8gY2FsbGJhY2sgZnVuY3Rpb24KICogICAuLi4KICogfQogKiBgYGAKICogTm90ZTogSWYgRGFydCBjb2RlIHVzaW5nIFRpbWVyIGlzIGNvbXBpbGVkIHRvIEphdmFTY3JpcHQsIHRoZSBmaW5lc3QKICogZ3JhbnVsYXJpdHkgYXZhaWxhYmxlIGluIHRoZSBicm93c2VyIGlzIDQgbWlsbGlzZWNvbmRzLgogKgogKiBTZWUgW1N0b3B3YXRjaF0gZm9yIG1lYXN1cmluZyBlbGFwc2VkIHRpbWUuCiAqLwphYnN0cmFjdCBjbGFzcyBUaW1lciB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyB0aW1lci4KICAgKgogICAqIFRoZSBbY2FsbGJhY2tdIGZ1bmN0aW9uIGlzIGludm9rZWQgYWZ0ZXIgdGhlIGdpdmVuIFtkdXJhdGlvbl0uCiAgICoKICAgKi8KICBmYWN0b3J5IFRpbWVyKER1cmF0aW9uIGR1cmF0aW9uLCB2b2lkIGNhbGxiYWNrKCkpIHsKICAgIGlmIChab25lLmN1cnJlbnQgPT0gWm9uZS5yb290KSB7CiAgICAgIC8vIE5vIG5lZWQgdG8gYmluZCB0aGUgY2FsbGJhY2suIFdlIGtub3cgdGhhdCB0aGUgcm9vdCdzIHRpbWVyIHdpbGwKICAgICAgLy8gYmUgaW52b2tlZCBpbiB0aGUgcm9vdCB6b25lLgogICAgICByZXR1cm4gWm9uZS5jdXJyZW50LmNyZWF0ZVRpbWVyKGR1cmF0aW9uLCBjYWxsYmFjayk7CiAgICB9CiAgICByZXR1cm4gWm9uZS5jdXJyZW50CiAgICAgICAgLmNyZWF0ZVRpbWVyKGR1cmF0aW9uLCBab25lLmN1cnJlbnQuYmluZENhbGxiYWNrR3VhcmRlZChjYWxsYmFjaykpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyByZXBlYXRpbmcgdGltZXIuCiAgICoKICAgKiBUaGUgW2NhbGxiYWNrXSBpcyBpbnZva2VkIHJlcGVhdGVkbHkgd2l0aCBbZHVyYXRpb25dIGludGVydmFscyB1bnRpbAogICAqIGNhbmNlbGVkIHdpdGggdGhlIFtjYW5jZWxdIGZ1bmN0aW9uLgogICAqCiAgICogVGhlIGV4YWN0IHRpbWluZyBkZXBlbmRzIG9uIHRoZSB1bmRlcmx5aW5nIHRpbWVyIGltcGxlbWVudGF0aW9uLgogICAqIE5vIG1vcmUgdGhhbiBgbmAgY2FsbGJhY2tzIHdpbGwgYmUgbWFkZSBpbiBgZHVyYXRpb24gKiBuYCB0aW1lLAogICAqIGJ1dCB0aGUgdGltZSBiZXR3ZWVuIHR3byBjb25zZWN1dGl2ZSBjYWxsYmFja3MKICAgKiBjYW4gYmUgc2hvcnRlciBhbmQgbG9uZ2VyIHRoYW4gYGR1cmF0aW9uYC4KICAgKgogICAqIEluIHBhcnRpY3VsYXIsIGFuIGltcGxlbWVudGF0aW9uIG1heSBzY2hlZHVsZSB0aGUgbmV4dCBjYWxsYmFjaywgZS5nLiwKICAgKiBhIGBkdXJhdGlvbmAgYWZ0ZXIgZWl0aGVyIHdoZW4gdGhlIHByZXZpb3VzIGNhbGxiYWNrIGVuZGVkLAogICAqIHdoZW4gdGhlIHByZXZpb3VzIGNhbGxiYWNrIHN0YXJ0ZWQsIG9yIHdoZW4gdGhlIHByZXZpb3VzIGNhbGxiYWNrIHdhcwogICAqIHNjaGVkdWxlZCBmb3IgLSBldmVuIGlmIHRoZSBhY3R1YWwgY2FsbGJhY2sgd2FzIGRlbGF5ZWQuCiAgICoKICAgKiBbZHVyYXRpb25dIG11c3QgYSBub24tbmVnYXRpdmUgW0R1cmF0aW9uXS4KICAgKi8KICBmYWN0b3J5IFRpbWVyLnBlcmlvZGljKER1cmF0aW9uIGR1cmF0aW9uLCB2b2lkIGNhbGxiYWNrKFRpbWVyIHRpbWVyKSkgewogICAgaWYgKFpvbmUuY3VycmVudCA9PSBab25lLnJvb3QpIHsKICAgICAgLy8gTm8gbmVlZCB0byBiaW5kIHRoZSBjYWxsYmFjay4gV2Uga25vdyB0aGF0IHRoZSByb290J3MgdGltZXIgd2lsbAogICAgICAvLyBiZSBpbnZva2VkIGluIHRoZSByb290IHpvbmUuCiAgICAgIHJldHVybiBab25lLmN1cnJlbnQuY3JlYXRlUGVyaW9kaWNUaW1lcihkdXJhdGlvbiwgY2FsbGJhY2spOwogICAgfQogICAgdmFyIGJvdW5kQ2FsbGJhY2sgPSBab25lLmN1cnJlbnQuYmluZFVuYXJ5Q2FsbGJhY2tHdWFyZGVkPFRpbWVyPihjYWxsYmFjayk7CiAgICByZXR1cm4gWm9uZS5jdXJyZW50LmNyZWF0ZVBlcmlvZGljVGltZXIoZHVyYXRpb24sIGJvdW5kQ2FsbGJhY2spOwogIH0KCiAgLyoqCiAgICogUnVucyB0aGUgZ2l2ZW4gW2NhbGxiYWNrXSBhc3luY2hyb25vdXNseSBhcyBzb29uIGFzIHBvc3NpYmxlLgogICAqCiAgICogVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGBuZXcgVGltZXIoRHVyYXRpb24uemVybywgY2FsbGJhY2spYC4KICAgKi8KICBzdGF0aWMgdm9pZCBydW4odm9pZCBjYWxsYmFjaygpKSB7CiAgICBuZXcgVGltZXIoRHVyYXRpb24uemVybywgY2FsbGJhY2spOwogIH0KCiAgLyoqCiAgICogQ2FuY2VscyB0aGUgdGltZXIuCiAgICoKICAgKiBPbmNlIGEgW1RpbWVyXSBoYXMgYmVlbiBjYW5jZWxlZCwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZAogICAqIGJ5IHRoZSB0aW1lci4gQ2FsbGluZyBbY2FuY2VsXSBtb3JlIHRoYW4gb25jZSBvbiBhIFtUaW1lcl0gaXMgYWxsb3dlZCwgYW5kCiAgICogd2lsbCBoYXZlIG5vIGZ1cnRoZXIgZWZmZWN0LgogICAqLwogIHZvaWQgY2FuY2VsKCk7CgogIC8qKgogICAqIFRoZSBudW1iZXIgb2YgZHVyYXRpb25zIHByZWNlZGluZyB0aGUgbW9zdCByZWNlbnQgdGltZXIgZXZlbnQuCiAgICoKICAgKiBUaGUgdmFsdWUgc3RhcnRzIGF0IHplcm8gYW5kIGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSBhIHRpbWVyIGV2ZW50CiAgICogb2NjdXJzLCBzbyBlYWNoIGNhbGxiYWNrIHdpbGwgc2VlIGEgbGFyZ2VyIHZhbHVlIHRoYW4gdGhlIHByZXZpb3VzIG9uZS4KICAgKgogICAqIElmIGEgcGVyaW9kaWMgdGltZXIgd2l0aCBhIG5vbi16ZXJvIGR1cmF0aW9uIGlzIGRlbGF5ZWQgdG9vIG11Y2gsCiAgICogc28gbW9yZSB0aGFuIG9uZSB0aWNrIHNob3VsZCBoYXZlIGhhcHBlbmVkLAogICAqIGFsbCBidXQgdGhlIGxhc3QgdGljayBpbiB0aGUgcGFzdCBhcmUgY29uc2lkZXJlZCAibWlzc2VkIiwKICAgKiBhbmQgbm8gY2FsbGJhY2sgaXMgaW52b2tlZCBmb3IgdGhlbS4KICAgKiBUaGUgW3RpY2tdIGNvdW50IHJlZmxlY3RzIHRoZSBudW1iZXIgb2YgZHVyYXRpb25zIHRoYXQgaGF2ZSBwYXNzZWQgYW5kCiAgICogbm90IHRoZSBudW1iZXIgb2YgY2FsbGJhY2sgaW52b2NhdGlvbnMgdGhhdCBoYXZlIGhhcHBlbmVkLgogICAqLwogIGludCBnZXQgdGljazsKCiAgLyoqCiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSB0aW1lciBpcyBzdGlsbCBhY3RpdmUuCiAgICoKICAgKiBBIG5vbi1wZXJpb2RpYyB0aW1lciBpcyBhY3RpdmUgaWYgdGhlIGNhbGxiYWNrIGhhcyBub3QgYmVlbiBleGVjdXRlZCwKICAgKiBhbmQgdGhlIHRpbWVyIGhhcyBub3QgYmVlbiBjYW5jZWxlZC4KICAgKgogICAqIEEgcGVyaW9kaWMgdGltZXIgaXMgYWN0aXZlIGlmIGl0IGhhcyBub3QgYmVlbiBjYW5jZWxlZC4KICAgKi8KICBib29sIGdldCBpc0FjdGl2ZTsKCiAgZXh0ZXJuYWwgc3RhdGljIFRpbWVyIF9jcmVhdGVUaW1lcihEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBjYWxsYmFjaygpKTsKICBleHRlcm5hbCBzdGF0aWMgVGltZXIgX2NyZWF0ZVBlcmlvZGljVGltZXIoCiAgICAgIER1cmF0aW9uIGR1cmF0aW9uLCB2b2lkIGNhbGxiYWNrKFRpbWVyIHRpbWVyKSk7Cn0KgIUATk48AQ8BFAEESQM7UEQDP0YDRkkaCy8vAyZIMAUHMAkFB0g7Ay8EFwYaBUQFBjYlSiY7BhhMBAEGJAVKKgVGRTQwBUxBSz4FMAZKJUomQwZQRgQBBkMFSgYlKAQBBhgFUFAiBhEBBkQFSU0FRzFAKkxABhABBjAFSyoFPQYVAUouNgIBFWRhcnQ6YXN5bmMvdGltZXIuZGFydE9vcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vbGliL2Vycm9yc19wYXRjaC5kYXJ0wABNyy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBFcnJvciB7CiAgQHBhdGNoCiAgc3RhdGljIFN0cmluZyBfb2JqZWN0VG9TdHJpbmcoT2JqZWN0IG9iamVjdCkgewogICAgcmV0dXJuIE9iamVjdC5fdG9TdHJpbmcob2JqZWN0KTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBTdHJpbmcgX3N0cmluZ1RvU2FmZVN0cmluZyhTdHJpbmcgc3RyaW5nKSB7CiAgICByZXR1cm4ganNvbi5lbmNvZGUoc3RyaW5nKTsKICB9CgogIEBwYXRjaAogIFN0YWNrVHJhY2UgZ2V0IHN0YWNrVHJhY2UgPT4gX3N0YWNrVHJhY2U7CgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBTdGFja1RyYWNlIF9zdGFja1RyYWNlOwp9CgpjbGFzcyBfQXNzZXJ0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciBpbXBsZW1lbnRzIEFzc2VydGlvbkVycm9yIHsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgX0Fzc2VydGlvbkVycm9yLl9jcmVhdGUoCiAgICAgIHRoaXMuX2ZhaWxlZEFzc2VydGlvbiwgdGhpcy5fdXJsLCB0aGlzLl9saW5lLCB0aGlzLl9jb2x1bW4sIHRoaXMubWVzc2FnZSk7CgogIC8vIEFzc2VydGlvbkVycm9yX3Rocm93TmV3IGluIGVycm9ycy5jYyBmaXNoZXMgdGhlIGFzc2VydGlvbiBzb3VyY2UgY29kZQogIC8vIG91dCBvZiB0aGUgc2NyaXB0LiBJdCBleHBlY3RzIGEgRGFydCBzdGFjayBmcmFtZSBmcm9tIGNsYXNzCiAgLy8gX0Fzc2VydGlvbkVycm9yLiBUaHVzIHdlIG5lZWQgYSBEYXJ0IHN0dWIgdGhhdCBjYWxscyB0aGUgbmF0aXZlIGNvZGUuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgc3RhdGljIF90aHJvd05ldyhpbnQgYXNzZXJ0aW9uU3RhcnQsIGludCBhc3NlcnRpb25FbmQsIE9iamVjdCBtZXNzYWdlKSB7CiAgICBfZG9UaHJvd05ldyhhc3NlcnRpb25TdGFydCwgYXNzZXJ0aW9uRW5kLCBtZXNzYWdlKTsKICB9CgogIHN0YXRpYyBfZG9UaHJvd05ldyhpbnQgYXNzZXJ0aW9uU3RhcnQsIGludCBhc3NlcnRpb25FbmQsIE9iamVjdCBtZXNzYWdlKQogICAgICBuYXRpdmUgIkFzc2VydGlvbkVycm9yX3Rocm93TmV3IjsKCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgc3RhdGljIF9ldmFsdWF0ZUFzc2VydGlvbihjb25kaXRpb24pIHsKICAgIGlmIChpZGVudGljYWwoY29uZGl0aW9uLCB0cnVlKSB8fCBpZGVudGljYWwoY29uZGl0aW9uLCBmYWxzZSkpIHsKICAgICAgcmV0dXJuIGNvbmRpdGlvbjsKICAgIH0KICAgIGlmIChjb25kaXRpb24gaXMgX0Nsb3N1cmUpIHsKICAgICAgcmV0dXJuIChjb25kaXRpb24gYXMgZHluYW1pYykoKTsKICAgIH0KICAgIGlmIChjb25kaXRpb24gaXMgRnVuY3Rpb24pIHsKICAgICAgY29uZGl0aW9uID0gY29uZGl0aW9uKCk7CiAgICB9CiAgICByZXR1cm4gY29uZGl0aW9uOwogIH0KCiAgU3RyaW5nIGdldCBfbWVzc2FnZVN0cmluZyB7CiAgICBpZiAobWVzc2FnZSA9PSBudWxsKSByZXR1cm4gImlzIG5vdCB0cnVlLiI7CiAgICBpZiAobWVzc2FnZSBpcyBTdHJpbmcpIHJldHVybiBtZXNzYWdlOwogICAgcmV0dXJuIEVycm9yLnNhZmVUb1N0cmluZyhtZXNzYWdlKTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmIChfdXJsID09IG51bGwpIHsKICAgICAgaWYgKG1lc3NhZ2UgPT0gbnVsbCkgcmV0dXJuIF9mYWlsZWRBc3NlcnRpb24/LnRyaW0oKTsKICAgICAgcmV0dXJuICInJHtfZmFpbGVkQXNzZXJ0aW9uPy50cmltKCl9JzogJF9tZXNzYWdlU3RyaW5nIjsKICAgIH0KICAgIHZhciBjb2x1bW5JbmZvID0gIiI7CiAgICBpZiAoX2NvbHVtbiA+IDApIHsKICAgICAgLy8gT25seSBhZGQgY29sdW1uIGluZm9ybWF0aW9uIGlmIGl0IGlzIHZhbGlkLgogICAgICBjb2x1bW5JbmZvID0gIiBwb3MgJF9jb2x1bW4iOwogICAgfQogICAgcmV0dXJuICInJF91cmwnOiBGYWlsZWQgYXNzZXJ0aW9uOiBsaW5lICRfbGluZSRjb2x1bW5JbmZvOiAiCiAgICAgICAgIickX2ZhaWxlZEFzc2VydGlvbic6ICRfbWVzc2FnZVN0cmluZyI7CiAgfQoKICBmaW5hbCBTdHJpbmcgX2ZhaWxlZEFzc2VydGlvbjsKICBmaW5hbCBTdHJpbmcgX3VybDsKICBmaW5hbCBpbnQgX2xpbmU7CiAgZmluYWwgaW50IF9jb2x1bW47CiAgZmluYWwgT2JqZWN0IG1lc3NhZ2U7Cn0KCmNsYXNzIF9UeXBlRXJyb3IgZXh0ZW5kcyBfQXNzZXJ0aW9uRXJyb3IgaW1wbGVtZW50cyBUeXBlRXJyb3IgewogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBfVHlwZUVycm9yLl9jcmVhdGUoU3RyaW5nIHVybCwgaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyBlcnJvck1zZykKICAgICAgOiBzdXBlci5fY3JlYXRlKCJpcyBhc3NpZ25hYmxlIiwgdXJsLCBsaW5lLCBjb2x1bW4sIGVycm9yTXNnKTsKCiAgc3RhdGljIF90aHJvd05ldyhpbnQgbG9jYXRpb24sIE9iamVjdCBzcmNfdmFsdWUsIF9UeXBlIGRzdF90eXBlLAogICAgICBTdHJpbmcgZHN0X25hbWUpIG5hdGl2ZSAiVHlwZUVycm9yX3Rocm93TmV3IjsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gc3VwZXIubWVzc2FnZTsKfQoKY2xhc3MgX0Nhc3RFcnJvciBleHRlbmRzIEVycm9yIGltcGxlbWVudHMgQ2FzdEVycm9yIHsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgX0Nhc3RFcnJvci5fY3JlYXRlKHRoaXMuX3VybCwgdGhpcy5fbGluZSwgdGhpcy5fY29sdW1uLCB0aGlzLl9lcnJvck1zZyk7CgogIC8vIEEgQ2FzdEVycm9yIGlzIGFsbG9jYXRlZCBieSBUeXBlRXJyb3IuX3Rocm93TmV3KCkgd2hlbiBkc3RfbmFtZSBlcXVhbHMKICAvLyBTeW1ib2xzOjpJblR5cGVDYXN0KCkuCgogIFN0cmluZyB0b1N0cmluZygpID0+IF9lcnJvck1zZzsKCiAgLy8gRmllbGRzIF91cmwsIF9saW5lLCBhbmQgX2NvbHVtbiBhcmUgb25seSB1c2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCiAgZmluYWwgU3RyaW5nIF91cmw7CiAgZmluYWwgaW50IF9saW5lOwogIGZpbmFsIGludCBfY29sdW1uOwogIGZpbmFsIFN0cmluZyBfZXJyb3JNc2c7Cn0KCkBwYXRjaApjbGFzcyBGYWxsVGhyb3VnaEVycm9yIHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgRmFsbFRocm91Z2hFcnJvci5fY3JlYXRlKFN0cmluZyB1cmwsIGludCBsaW5lKQogICAgICA6IF91cmwgPSB1cmwsCiAgICAgICAgX2xpbmUgPSBsaW5lOwoKICBzdGF0aWMgX3Rocm93TmV3KGludCBjYXNlX2NsYXVzZV9wb3MpIG5hdGl2ZSAiRmFsbFRocm91Z2hFcnJvcl90aHJvd05ldyI7CgogIEBwYXRjaAogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAiJyRfdXJsJzogU3dpdGNoIGNhc2UgZmFsbC10aHJvdWdoIGF0IGxpbmUgJF9saW5lLiI7CiAgfQoKICAvLyBUaGVzZSBuZXcgZmllbGRzIGNhbm5vdCBiZSBkZWNsYXJlZCBmaW5hbCwgYmVjYXVzZSBhIGNvbnN0cnVjdG9yIGV4aXN0cwogIC8vIGluIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoaXMgcGF0Y2hlZCBjbGFzcy4KICBTdHJpbmcgX3VybDsKICBpbnQgX2xpbmU7Cn0KCmNsYXNzIF9JbnRlcm5hbEVycm9yIHsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgY29uc3QgX0ludGVybmFsRXJyb3IodGhpcy5fbXNnKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiSW50ZXJuYWxFcnJvcjogJyR7X21zZ30nIjsKICBmaW5hbCBTdHJpbmcgX21zZzsKfQoKQHBhdGNoCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgVW5zdXBwb3J0ZWRFcnJvciB7CiAgc3RhdGljIF90aHJvd05ldyhTdHJpbmcgbXNnKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcihtc2cpOwogIH0KfQoKQHBhdGNoCmNsYXNzIEN5Y2xpY0luaXRpYWxpemF0aW9uRXJyb3IgewogIHN0YXRpYyBfdGhyb3dOZXcoU3RyaW5nIHZhcmlhYmxlTmFtZSkgewogICAgdGhyb3cgbmV3IEN5Y2xpY0luaXRpYWxpemF0aW9uRXJyb3IodmFyaWFibGVOYW1lKTsKICB9Cn0KCkBwYXRjaApjbGFzcyBBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yIHsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvci5fY3JlYXRlKAogICAgICB0aGlzLl9jbGFzc05hbWUsIHRoaXMuX3VybCwgdGhpcy5fbGluZSk7CgogIHN0YXRpYyBfdGhyb3dOZXcoaW50IGNhc2VfY2xhdXNlX3BvcywgU3RyaW5nIGNsYXNzTmFtZSkKICAgICAgbmF0aXZlICJBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yX3Rocm93TmV3IjsKCiAgQHBhdGNoCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICJDYW5ub3QgaW5zdGFudGlhdGUgYWJzdHJhY3QgY2xhc3MgJF9jbGFzc05hbWU6ICIKICAgICAgICAiX3VybCAnJF91cmwnIGxpbmUgJF9saW5lIjsKICB9CgogIC8vIFRoZXNlIG5ldyBmaWVsZHMgY2Fubm90IGJlIGRlY2xhcmVkIGZpbmFsLCBiZWNhdXNlIGEgY29uc3RydWN0b3IgZXhpc3RzCiAgLy8gaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhpcyBwYXRjaGVkIGNsYXNzLgogIFN0cmluZyBfdXJsOwogIGludCBfbGluZTsKfQoKQHBhdGNoCmNsYXNzIE5vU3VjaE1ldGhvZEVycm9yIHsKICAvLyBEZXByZWNhdGVkIG1lbWJlcnMgdG8gYmUgcmVtb3ZlZC4KICBTeW1ib2wgX21lbWJlck5hbWU7CiAgTGlzdCBfYXJndW1lbnRzOwogIE1hcDxTeW1ib2wsIGR5bmFtaWM+IF9uYW1lZEFyZ3VtZW50czsKICBMaXN0IF9leGlzdGluZ0FyZ3VtZW50TmFtZXM7CgogIGZpbmFsIE9iamVjdCBfcmVjZWl2ZXI7CiAgZmluYWwgX0ludm9jYXRpb25NaXJyb3IgX2ludm9jYXRpb247CgogIEBwYXRjaAogIE5vU3VjaE1ldGhvZEVycm9yLndpdGhJbnZvY2F0aW9uKE9iamVjdCByZWNlaXZlciwgSW52b2NhdGlvbiBpbnZvY2F0aW9uKQogICAgICA6IF9yZWNlaXZlciA9IHJlY2VpdmVyLAogICAgICAgIF9pbnZvY2F0aW9uID0gaW52b2NhdGlvbiBhcyBfSW52b2NhdGlvbk1pcnJvcjsKCiAgc3RhdGljIHZvaWQgX3Rocm93TmV3SW52b2NhdGlvbihPYmplY3QgcmVjZWl2ZXIsIEludm9jYXRpb24gaW52b2NhdGlvbikgewogICAgdGhyb3cgbmV3IE5vU3VjaE1ldGhvZEVycm9yLndpdGhJbnZvY2F0aW9uKHJlY2VpdmVyLCBpbnZvY2F0aW9uKTsKICB9CgogIC8vIFRoZSBjb21waWxlciBlbWl0cyBhIGNhbGwgdG8gX3Rocm93TmV3IHdoZW4gaXQgY2Fubm90IHJlc29sdmUgYSBzdGF0aWMKICAvLyBtZXRob2QgYXQgY29tcGlsZSB0aW1lLiBUaGUgcmVjZWl2ZXIgaXMgYWN0dWFsbHkgdGhlIGxpdGVyYWwgY2xhc3Mgb2YgdGhlCiAgLy8gdW5yZXNvbHZlZCBtZXRob2QuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgc3RhdGljIHZvaWQgX3Rocm93TmV3KE9iamVjdCByZWNlaXZlciwgU3RyaW5nIG1lbWJlck5hbWUsIGludCBpbnZvY2F0aW9uX3R5cGUsCiAgICAgIE9iamVjdCB0eXBlQXJndW1lbnRzLCBMaXN0IGFyZ3VtZW50cywgTGlzdCBhcmd1bWVudE5hbWVzKSB7CiAgICB0aHJvdyBuZXcgTm9TdWNoTWV0aG9kRXJyb3IuX3dpdGhUeXBlKHJlY2VpdmVyLCBtZW1iZXJOYW1lLCBpbnZvY2F0aW9uX3R5cGUsCiAgICAgICAgdHlwZUFyZ3VtZW50cywgYXJndW1lbnRzLCBhcmd1bWVudE5hbWVzKTsKICB9CgogIHN0YXRpYyB2b2lkIF90aHJvd05ld0lmTm90TG9hZGVkKAogICAgICBfTGlicmFyeVByZWZpeCBwcmVmaXgsCiAgICAgIE9iamVjdCByZWNlaXZlciwKICAgICAgU3RyaW5nIG1lbWJlck5hbWUsCiAgICAgIGludCBpbnZvY2F0aW9uX3R5cGUsCiAgICAgIE9iamVjdCB0eXBlQXJndW1lbnRzLAogICAgICBMaXN0IGFyZ3VtZW50cywKICAgICAgTGlzdCBhcmd1bWVudE5hbWVzKSB7CiAgICBpZiAoIXByZWZpeC5pc0xvYWRlZCgpKSB7CiAgICAgIF90aHJvd05ldyhyZWNlaXZlciwgbWVtYmVyTmFtZSwgaW52b2NhdGlvbl90eXBlLCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudHMsCiAgICAgICAgICBhcmd1bWVudE5hbWVzKTsKICAgIH0KICB9CgogIC8vIFRPRE8ocmVnaXMpOiBEZXByZWNhdGVkIG1lbWJlciBzdGlsbCB1c2VkIGJ5IGRhcnQyanMgdG8gYmUgcmVtb3ZlZC4KICAvLyBSZW1lbWJlciB0aGUgdHlwZSBmcm9tIHRoZSBpbnZvY2F0aW9uIG1pcnJvciBvciBzdGF0aWMgY29tcGlsYXRpb24KICAvLyBhbmFseXNpcyB3aGVuIHRocm93biBkaXJlY3RseSB3aXRoIF90aHJvd05ldy4gQSBuZWdhdGl2ZSB2YWx1ZSBtZWFucwogIC8vIHRoYXQgbm8gaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLgogIGludCBfaW52b2NhdGlvbl90eXBlOwoKICAvLyBUT0RPKHJlZ2lzKTogRGVwcmVjYXRlZCBjb25zdHJ1Y3RvciBzdGlsbCB1c2VkIGJ5IGRhcnQyanMgdG8gYmUgcmVtb3ZlZC4KICBAcGF0Y2gKICBOb1N1Y2hNZXRob2RFcnJvcihPYmplY3QgcmVjZWl2ZXIsIFN5bWJvbCBtZW1iZXJOYW1lLAogICAgICBMaXN0IHBvc2l0aW9uYWxBcmd1bWVudHMsIE1hcDxTeW1ib2wsIGR5bmFtaWM+IG5hbWVkQXJndW1lbnRzLAogICAgICBbTGlzdCBleGlzdGluZ0FyZ3VtZW50TmFtZXMgPSBudWxsXSkKICAgICAgOiBfcmVjZWl2ZXIgPSByZWNlaXZlciwKICAgICAgICBfaW52b2NhdGlvbiA9IG51bGwsCiAgICAgICAgX21lbWJlck5hbWUgPSBtZW1iZXJOYW1lLAogICAgICAgIF9hcmd1bWVudHMgPSBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICAgIF9uYW1lZEFyZ3VtZW50cyA9IG5hbWVkQXJndW1lbnRzLAogICAgICAgIF9leGlzdGluZ0FyZ3VtZW50TmFtZXMgPSBleGlzdGluZ0FyZ3VtZW50TmFtZXMsCiAgICAgICAgX2ludm9jYXRpb25fdHlwZSA9IC0xOwoKICAvLyBIZWxwZXIgdG8gYnVpbGQgYSBtYXAgb2YgbmFtZWQgYXJndW1lbnRzLgogIHN0YXRpYyBNYXA8U3ltYm9sLCBkeW5hbWljPiBfTmFtZWRBcmd1bWVudHNNYXAoCiAgICAgIExpc3QgYXJndW1lbnRzLCBMaXN0IGFyZ3VtZW50TmFtZXMpIHsKICAgIE1hcDxTeW1ib2wsIGR5bmFtaWM+IG5hbWVkQXJndW1lbnRzID0gbmV3IE1hcDxTeW1ib2wsIGR5bmFtaWM+KCk7CiAgICBpbnQgbnVtUG9zaXRpb25hbEFyZ3VtZW50cyA9IGFyZ3VtZW50cy5sZW5ndGggLSBhcmd1bWVudE5hbWVzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnROYW1lcy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgYXJnX3ZhbHVlID0gYXJndW1lbnRzW251bVBvc2l0aW9uYWxBcmd1bWVudHMgKyBpXTsKICAgICAgbmFtZWRBcmd1bWVudHNbbmV3IFN5bWJvbChhcmd1bWVudE5hbWVzW2ldKV0gPSBhcmdfdmFsdWU7CiAgICB9CiAgICByZXR1cm4gbmFtZWRBcmd1bWVudHM7CiAgfQoKICAvLyBDb25zdHJ1Y3RvciBjYWxsZWQgZnJvbSBFeGNlcHRpb25zOjpUaHJvd0J5VHlwZShrTm9TdWNoTWV0aG9kKSBhbmQgZnJvbQogIC8vIF90aHJvd05ldyBhYm92ZSwgdGFraW5nIGEgVHlwZUFyZ3VtZW50cyBvYmplY3QgcmF0aGVyIHRoYW4gYW4gdW5wYWNrZWQgbGlzdAogIC8vIG9mIHR5cGVzLCBhcyB3ZWxsIGFzIGEgbGlzdCBvZiBhbGwgYXJndW1lbnRzIGFuZCBhIGxpc3Qgb2YgbmFtZXMsIHJhdGhlcgogIC8vIHRoYW4gYSBzZXBhcmF0ZSBsaXN0IG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzIGFuZCBhIG1hcCBvZiBuYW1lZCBhcmd1bWVudHMuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIE5vU3VjaE1ldGhvZEVycm9yLl93aXRoVHlwZSgKICAgICAgdGhpcy5fcmVjZWl2ZXIsCiAgICAgIFN0cmluZyBtZW1iZXJOYW1lLAogICAgICBpbnQgaW52b2NhdGlvbl90eXBlLAogICAgICBPYmplY3QgdHlwZUFyZ3VtZW50cywKICAgICAgTGlzdCBhcmd1bWVudHMsCiAgICAgIExpc3QgYXJndW1lbnROYW1lcykKICAgICAgOiB0aGlzLl9pbnZvY2F0aW9uID0gbmV3IF9JbnZvY2F0aW9uTWlycm9yLl93aXRoVHlwZSgKICAgICAgICAgICAgbmV3IFN5bWJvbChtZW1iZXJOYW1lKSwKICAgICAgICAgICAgaW52b2NhdGlvbl90eXBlLAogICAgICAgICAgICB0eXBlQXJndW1lbnRzICE9IG51bGwKICAgICAgICAgICAgICAgIC8vIFRPRE8oMzMwNzMpOiBVc2UgYWN0dWFsIGNvdW50IG9mIHR5cGUgYXJndW1lbnRzIGluIHBsYWNlIG9mIDAuCiAgICAgICAgICAgICAgICA/IF9JbnZvY2F0aW9uTWlycm9yLl91bnBhY2tUeXBlQXJndW1lbnRzKHR5cGVBcmd1bWVudHMsIDApCiAgICAgICAgICAgICAgICA6IG51bGwsCiAgICAgICAgICAgIGFyZ3VtZW50TmFtZXMgIT0gbnVsbAogICAgICAgICAgICAgICAgPyBhcmd1bWVudHMuc3VibGlzdCgwLCBhcmd1bWVudHMubGVuZ3RoIC0gYXJndW1lbnROYW1lcy5sZW5ndGgpCiAgICAgICAgICAgICAgICA6IGFyZ3VtZW50cywKICAgICAgICAgICAgYXJndW1lbnROYW1lcyAhPSBudWxsCiAgICAgICAgICAgICAgICA/IF9OYW1lZEFyZ3VtZW50c01hcChhcmd1bWVudHMsIGFyZ3VtZW50TmFtZXMpCiAgICAgICAgICAgICAgICA6IG51bGwpOwoKICBzdGF0aWMgU3RyaW5nIF9leGlzdGluZ01ldGhvZFNpZ25hdHVyZShPYmplY3QgcmVjZWl2ZXIsIFN0cmluZyBtZXRob2ROYW1lLAogICAgICBpbnQgaW52b2NhdGlvblR5cGUpIG5hdGl2ZSAiTm9TdWNoTWV0aG9kRXJyb3JfZXhpc3RpbmdNZXRob2RTaWduYXR1cmUiOwoKICBAcGF0Y2gKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAvLyBUT0RPKHJlZ2lzKTogUmVtb3ZlIHRoaXMgbnVsbCBjaGVjayBvbmNlIGRhcnQyanMgaXMgdXBkYXRlZC4KICAgIGlmIChfaW52b2NhdGlvbiA9PSBudWxsKSB7CiAgICAgIC8vIFVzZSBkZXByZWNhdGVkIHZlcnNpb24gb2YgdG9TdHJpbmcuCiAgICAgIHJldHVybiBfdG9TdHJpbmdEZXByZWNhdGVkKCk7CiAgICB9CiAgICBTdHJpbmcgbWVtYmVyTmFtZSA9CiAgICAgICAgaW50ZXJuYWwuU3ltYm9sLmNvbXB1dGVVbm1hbmdsZWROYW1lKF9pbnZvY2F0aW9uLm1lbWJlck5hbWUpOwogICAgdmFyIGxldmVsID0gKF9pbnZvY2F0aW9uLl90eXBlID4+IF9JbnZvY2F0aW9uTWlycm9yLl9MRVZFTF9TSElGVCkgJgogICAgICAgIF9JbnZvY2F0aW9uTWlycm9yLl9MRVZFTF9NQVNLOwogICAgdmFyIGtpbmQgPSBfaW52b2NhdGlvbi5fdHlwZSAmIF9JbnZvY2F0aW9uTWlycm9yLl9LSU5EX01BU0s7CiAgICBpZiAoa2luZCA9PSBfSW52b2NhdGlvbk1pcnJvci5fTE9DQUxfVkFSKSB7CiAgICAgIHJldHVybiAiTm9TdWNoTWV0aG9kRXJyb3I6IENhbm5vdCBhc3NpZ24gdG8gZmluYWwgdmFyaWFibGUgJyRtZW1iZXJOYW1lJyI7CiAgICB9CgogICAgU3RyaW5nQnVmZmVyIHR5cGVBcmd1bWVudHNCdWYgPSBudWxsOwogICAgdmFyIHR5cGVBcmd1bWVudHMgPSBfaW52b2NhdGlvbi50eXBlQXJndW1lbnRzOwogICAgaWYgKCh0eXBlQXJndW1lbnRzICE9IG51bGwpICYmICh0eXBlQXJndW1lbnRzLmxlbmd0aCA+IDApKSB7CiAgICAgIHR5cGVBcmd1bWVudHNCdWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgIHR5cGVBcmd1bWVudHNCdWYud3JpdGUoIjwiKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlQXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGkgPiAwKSB7CiAgICAgICAgICB0eXBlQXJndW1lbnRzQnVmLndyaXRlKCIsICIpOwogICAgICAgIH0KICAgICAgICB0eXBlQXJndW1lbnRzQnVmLndyaXRlKEVycm9yLnNhZmVUb1N0cmluZyh0eXBlQXJndW1lbnRzW2ldKSk7CiAgICAgIH0KICAgICAgdHlwZUFyZ3VtZW50c0J1Zi53cml0ZSgiPiIpOwogICAgfQogICAgU3RyaW5nQnVmZmVyIGFyZ3VtZW50c0J1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHZhciBwb3NpdGlvbmFsQXJndW1lbnRzID0gX2ludm9jYXRpb24ucG9zaXRpb25hbEFyZ3VtZW50czsKICAgIGludCBhcmd1bWVudENvdW50ID0gMDsKICAgIGlmIChwb3NpdGlvbmFsQXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgZm9yICg7IGFyZ3VtZW50Q291bnQgPCBwb3NpdGlvbmFsQXJndW1lbnRzLmxlbmd0aDsgYXJndW1lbnRDb3VudCsrKSB7CiAgICAgICAgaWYgKGFyZ3VtZW50Q291bnQgPiAwKSB7CiAgICAgICAgICBhcmd1bWVudHNCdWYud3JpdGUoIiwgIik7CiAgICAgICAgfQogICAgICAgIGFyZ3VtZW50c0J1ZgogICAgICAgICAgICAud3JpdGUoRXJyb3Iuc2FmZVRvU3RyaW5nKHBvc2l0aW9uYWxBcmd1bWVudHNbYXJndW1lbnRDb3VudF0pKTsKICAgICAgfQogICAgfQogICAgdmFyIG5hbWVkQXJndW1lbnRzID0gX2ludm9jYXRpb24ubmFtZWRBcmd1bWVudHM7CiAgICBpZiAobmFtZWRBcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBuYW1lZEFyZ3VtZW50cy5mb3JFYWNoKChTeW1ib2wga2V5LCB2YXIgdmFsdWUpIHsKICAgICAgICBpZiAoYXJndW1lbnRDb3VudCA+IDApIHsKICAgICAgICAgIGFyZ3VtZW50c0J1Zi53cml0ZSgiLCAiKTsKICAgICAgICB9CiAgICAgICAgYXJndW1lbnRzQnVmLndyaXRlKGludGVybmFsLlN5bWJvbC5jb21wdXRlVW5tYW5nbGVkTmFtZShrZXkpKTsKICAgICAgICBhcmd1bWVudHNCdWYud3JpdGUoIjogIik7CiAgICAgICAgYXJndW1lbnRzQnVmLndyaXRlKEVycm9yLnNhZmVUb1N0cmluZyh2YWx1ZSkpOwogICAgICAgIGFyZ3VtZW50Q291bnQrKzsKICAgICAgfSk7CiAgICB9CiAgICBTdHJpbmcgZXhpc3RpbmdTaWcgPQogICAgICAgIF9leGlzdGluZ01ldGhvZFNpZ25hdHVyZShfcmVjZWl2ZXIsIG1lbWJlck5hbWUsIF9pbnZvY2F0aW9uLl90eXBlKTsKICAgIFN0cmluZyBhcmdzTXNnID0gZXhpc3RpbmdTaWcgIT0gbnVsbCA/ICIgd2l0aCBtYXRjaGluZyBhcmd1bWVudHMiIDogIiI7CgogICAgU3RyaW5nIGtpbmRCdWY7CiAgICBpZiAoa2luZCA+PSAwICYmIGtpbmQgPCA1KSB7CiAgICAgIGtpbmRCdWYgPSAoY29uc3QgWwogICAgICAgICJtZXRob2QiLAogICAgICAgICJnZXR0ZXIiLAogICAgICAgICJzZXR0ZXIiLAogICAgICAgICJnZXR0ZXIgb3Igc2V0dGVyIiwKICAgICAgICAidmFyaWFibGUiCiAgICAgIF0pW2tpbmRdOwogICAgfQoKICAgIFN0cmluZ0J1ZmZlciBtc2dCdWYgPSBuZXcgU3RyaW5nQnVmZmVyKCJOb1N1Y2hNZXRob2RFcnJvcjogIik7CiAgICBib29sIGlzX3R5cGVfY2FsbCA9IGZhbHNlOwogICAgc3dpdGNoIChsZXZlbCkgewogICAgICBjYXNlIF9JbnZvY2F0aW9uTWlycm9yLl9EWU5BTUlDOgogICAgICAgIHsKICAgICAgICAgIGlmIChfcmVjZWl2ZXIgPT0gbnVsbCkgewogICAgICAgICAgICBpZiAoZXhpc3RpbmdTaWcgIT0gbnVsbCkgewogICAgICAgICAgICAgIG1zZ0J1Zi53cml0ZWxuKCJUaGUgbnVsbCBvYmplY3QgZG9lcyBub3QgaGF2ZSBhICRraW5kQnVmICIKICAgICAgICAgICAgICAgICAgIickbWVtYmVyTmFtZSckYXJnc01zZy4iKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBtc2dCdWYud3JpdGVsbigiVGhlICRraW5kQnVmICckbWVtYmVyTmFtZScgd2FzIGNhbGxlZCBvbiBudWxsLiIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoX3JlY2VpdmVyIGlzIF9DbG9zdXJlKSB7CiAgICAgICAgICAgICAgbXNnQnVmLndyaXRlbG4oIkNsb3N1cmUgY2FsbCB3aXRoIG1pc21hdGNoZWQgYXJndW1lbnRzOiAiCiAgICAgICAgICAgICAgICAgICJmdW5jdGlvbiAnJG1lbWJlck5hbWUnIik7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoX3JlY2VpdmVyIGlzIF9UeXBlICYmIG1lbWJlck5hbWUgPT0gImNhbGwiKSB7CiAgICAgICAgICAgICAgaXNfdHlwZV9jYWxsID0gdHJ1ZTsKICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IF9yZWNlaXZlci50b1N0cmluZygpOwogICAgICAgICAgICAgIG1zZ0J1Zi53cml0ZWxuKCJBdHRlbXB0ZWQgdG8gdXNlIHR5cGUgJyRuYW1lJyBhcyBhIGZ1bmN0aW9uLiAiCiAgICAgICAgICAgICAgICAgICJTaW5jZSB0eXBlcyBkbyBub3QgZGVmaW5lIGEgbWV0aG9kICdjYWxsJywgdGhpcyBpcyBub3QgIgogICAgICAgICAgICAgICAgICAicG9zc2libGUuIERpZCB5b3UgaW50ZW5kIHRvIGNhbGwgdGhlICRuYW1lIGNvbnN0cnVjdG9yIGFuZCAiCiAgICAgICAgICAgICAgICAgICJmb3JnZXQgdGhlICduZXcnIG9wZXJhdG9yPyIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIG1zZ0J1Zi53cml0ZWxuKCJDbGFzcyAnJHtfcmVjZWl2ZXIucnVudGltZVR5cGV9JyBoYXMgbm8gaW5zdGFuY2UgIgogICAgICAgICAgICAgICAgICAiJGtpbmRCdWYgJyRtZW1iZXJOYW1lJyRhcmdzTXNnLiIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIGNhc2UgX0ludm9jYXRpb25NaXJyb3IuX1NVUEVSOgogICAgICAgIHsKICAgICAgICAgIG1zZ0J1Zi53cml0ZWxuKCJTdXBlciBjbGFzcyBvZiBjbGFzcyAnJHtfcmVjZWl2ZXIucnVudGltZVR5cGV9JyBoYXMgIgogICAgICAgICAgICAgICJubyBpbnN0YW5jZSAka2luZEJ1ZiAnJG1lbWJlck5hbWUnJGFyZ3NNc2cuIik7CiAgICAgICAgICBtZW1iZXJOYW1lID0gInN1cGVyLiRtZW1iZXJOYW1lIjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgY2FzZSBfSW52b2NhdGlvbk1pcnJvci5fU1RBVElDOgogICAgICAgIHsKICAgICAgICAgIG1zZ0J1Zi53cml0ZWxuKCJObyBzdGF0aWMgJGtpbmRCdWYgJyRtZW1iZXJOYW1lJyRhcmdzTXNnICIKICAgICAgICAgICAgICAiZGVjbGFyZWQgaW4gY2xhc3MgJyRfcmVjZWl2ZXInLiIpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICBjYXNlIF9JbnZvY2F0aW9uTWlycm9yLl9DT05TVFJVQ1RPUjoKICAgICAgICB7CiAgICAgICAgICBtc2dCdWYud3JpdGVsbigiTm8gY29uc3RydWN0b3IgJyRtZW1iZXJOYW1lJyRhcmdzTXNnIGRlY2xhcmVkICIKICAgICAgICAgICAgICAiaW4gY2xhc3MgJyRfcmVjZWl2ZXInLiIpOwogICAgICAgICAgbWVtYmVyTmFtZSA9ICJuZXcgJG1lbWJlck5hbWUiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICBjYXNlIF9JbnZvY2F0aW9uTWlycm9yLl9UT1BfTEVWRUw6CiAgICAgICAgewogICAgICAgICAgbXNnQnVmLndyaXRlbG4oIk5vIHRvcC1sZXZlbCAka2luZEJ1ZiAnJG1lbWJlck5hbWUnJGFyZ3NNc2cgIgogICAgICAgICAgICAgICJkZWNsYXJlZC4iKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAobGV2ZWwgPT0gX0ludm9jYXRpb25NaXJyb3IuX1RPUF9MRVZFTCkgewogICAgICBtc2dCdWYud3JpdGVsbigiUmVjZWl2ZXI6IHRvcC1sZXZlbCIpOwogICAgfSBlbHNlIHsKICAgICAgbXNnQnVmLndyaXRlbG4oIlJlY2VpdmVyOiAke0Vycm9yLnNhZmVUb1N0cmluZyhfcmVjZWl2ZXIpfSIpOwogICAgfQoKICAgIGlmIChraW5kID09IF9JbnZvY2F0aW9uTWlycm9yLl9NRVRIT0QpIHsKICAgICAgU3RyaW5nIG0gPSBpc190eXBlX2NhbGwgPyAiJF9yZWNlaXZlciIgOiAiJG1lbWJlck5hbWUiOwogICAgICBtc2dCdWYud3JpdGUoIlRyaWVkIGNhbGxpbmc6ICRtIik7CiAgICAgIGlmICh0eXBlQXJndW1lbnRzQnVmICE9IG51bGwpIHsKICAgICAgICBtc2dCdWYud3JpdGUodHlwZUFyZ3VtZW50c0J1Zik7CiAgICAgIH0KICAgICAgbXNnQnVmLndyaXRlKCIoJGFyZ3VtZW50c0J1ZikiKTsKICAgIH0gZWxzZSBpZiAoYXJndW1lbnRDb3VudCA9PSAwKSB7CiAgICAgIG1zZ0J1Zi53cml0ZSgiVHJpZWQgY2FsbGluZzogJG1lbWJlck5hbWUiKTsKICAgIH0gZWxzZSBpZiAoa2luZCA9PSBfSW52b2NhdGlvbk1pcnJvci5fU0VUVEVSKSB7CiAgICAgIG1zZ0J1Zi53cml0ZSgiVHJpZWQgY2FsbGluZzogJG1lbWJlck5hbWUkYXJndW1lbnRzQnVmIik7CiAgICB9IGVsc2UgewogICAgICBtc2dCdWYud3JpdGUoIlRyaWVkIGNhbGxpbmc6ICRtZW1iZXJOYW1lID0gJGFyZ3VtZW50c0J1ZiIpOwogICAgfQoKICAgIGlmIChleGlzdGluZ1NpZyAhPSBudWxsKSB7CiAgICAgIG1zZ0J1Zi53cml0ZSgiXG5Gb3VuZDogJG1lbWJlck5hbWUkZXhpc3RpbmdTaWciKTsKICAgIH0KCiAgICByZXR1cm4gbXNnQnVmLnRvU3RyaW5nKCk7CiAgfQoKICAvLyBUT0RPKHJlZ2lzKTogUmVtb3ZlIHRoaXMgZnVuY3Rpb24gb25jZSBkYXJ0MmpzIGlzIHVwZGF0ZWQuCiAgU3RyaW5nIF90b1N0cmluZ0RlcHJlY2F0ZWQoKSB7CiAgICB2YXIgbGV2ZWwgPSAoX2ludm9jYXRpb25fdHlwZSA+PiBfSW52b2NhdGlvbk1pcnJvci5fTEVWRUxfU0hJRlQpICYKICAgICAgICBfSW52b2NhdGlvbk1pcnJvci5fTEVWRUxfTUFTSzsKICAgIHZhciB0eXBlID0gX2ludm9jYXRpb25fdHlwZSAmIF9JbnZvY2F0aW9uTWlycm9yLl9LSU5EX01BU0s7CiAgICBTdHJpbmcgbWVtYmVyTmFtZSA9IChfbWVtYmVyTmFtZSA9PSBudWxsKQogICAgICAgID8gIiIKICAgICAgICA6IGludGVybmFsLlN5bWJvbC5jb21wdXRlVW5tYW5nbGVkTmFtZShfbWVtYmVyTmFtZSk7CgogICAgaWYgKHR5cGUgPT0gX0ludm9jYXRpb25NaXJyb3IuX0xPQ0FMX1ZBUikgewogICAgICByZXR1cm4gIk5vU3VjaE1ldGhvZEVycm9yOiBDYW5ub3QgYXNzaWduIHRvIGZpbmFsIHZhcmlhYmxlICckbWVtYmVyTmFtZSciOwogICAgfQoKICAgIFN0cmluZ0J1ZmZlciBhcmd1bWVudHMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBpbnQgYXJndW1lbnRDb3VudCA9IDA7CiAgICBpZiAoX2FyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGZvciAoOyBhcmd1bWVudENvdW50IDwgX2FyZ3VtZW50cy5sZW5ndGg7IGFyZ3VtZW50Q291bnQrKykgewogICAgICAgIGlmIChhcmd1bWVudENvdW50ID4gMCkgewogICAgICAgICAgYXJndW1lbnRzLndyaXRlKCIsICIpOwogICAgICAgIH0KICAgICAgICBhcmd1bWVudHMud3JpdGUoRXJyb3Iuc2FmZVRvU3RyaW5nKF9hcmd1bWVudHNbYXJndW1lbnRDb3VudF0pKTsKICAgICAgfQogICAgfQogICAgaWYgKF9uYW1lZEFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIF9uYW1lZEFyZ3VtZW50cy5mb3JFYWNoKChTeW1ib2wga2V5LCB2YXIgdmFsdWUpIHsKICAgICAgICBpZiAoYXJndW1lbnRDb3VudCA+IDApIHsKICAgICAgICAgIGFyZ3VtZW50cy53cml0ZSgiLCAiKTsKICAgICAgICB9CiAgICAgICAgYXJndW1lbnRzLndyaXRlKGludGVybmFsLlN5bWJvbC5jb21wdXRlVW5tYW5nbGVkTmFtZShrZXkpKTsKICAgICAgICBhcmd1bWVudHMud3JpdGUoIjogIik7CiAgICAgICAgYXJndW1lbnRzLndyaXRlKEVycm9yLnNhZmVUb1N0cmluZyh2YWx1ZSkpOwogICAgICAgIGFyZ3VtZW50Q291bnQrKzsKICAgICAgfSk7CiAgICB9CiAgICBib29sIGFyZ3NNaXNtYXRjaCA9IF9leGlzdGluZ0FyZ3VtZW50TmFtZXMgIT0gbnVsbDsKICAgIFN0cmluZyBhcmdzTWVzc2FnZSA9IGFyZ3NNaXNtYXRjaCA/ICIgd2l0aCBtYXRjaGluZyBhcmd1bWVudHMiIDogIiI7CgogICAgU3RyaW5nIHR5cGVfc3RyOwogICAgaWYgKHR5cGUgPj0gMCAmJiB0eXBlIDwgNSkgewogICAgICB0eXBlX3N0ciA9IChjb25zdCBbCiAgICAgICAgIm1ldGhvZCIsCiAgICAgICAgImdldHRlciIsCiAgICAgICAgInNldHRlciIsCiAgICAgICAgImdldHRlciBvciBzZXR0ZXIiLAogICAgICAgICJ2YXJpYWJsZSIKICAgICAgXSlbdHlwZV07CiAgICB9CgogICAgU3RyaW5nQnVmZmVyIG1zZ19idWYgPSBuZXcgU3RyaW5nQnVmZmVyKCJOb1N1Y2hNZXRob2RFcnJvcjogIik7CiAgICBib29sIGlzX3R5cGVfY2FsbCA9IGZhbHNlOwogICAgc3dpdGNoIChsZXZlbCkgewogICAgICBjYXNlIF9JbnZvY2F0aW9uTWlycm9yLl9EWU5BTUlDOgogICAgICAgIHsKICAgICAgICAgIGlmIChfcmVjZWl2ZXIgPT0gbnVsbCkgewogICAgICAgICAgICBpZiAoYXJnc01pc21hdGNoKSB7CiAgICAgICAgICAgICAgbXNnX2J1Zi53cml0ZWxuKCJUaGUgbnVsbCBvYmplY3QgZG9lcyBub3QgaGF2ZSBhICR0eXBlX3N0ciAiCiAgICAgICAgICAgICAgICAgICInJG1lbWJlck5hbWUnJGFyZ3NNZXNzYWdlLiIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIG1zZ19idWYKICAgICAgICAgICAgICAgICAgLndyaXRlbG4oIlRoZSAkdHlwZV9zdHIgJyRtZW1iZXJOYW1lJyB3YXMgY2FsbGVkIG9uIG51bGwuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChfcmVjZWl2ZXIgaXMgX0Nsb3N1cmUpIHsKICAgICAgICAgICAgICBtc2dfYnVmLndyaXRlbG4oIkNsb3N1cmUgY2FsbCB3aXRoIG1pc21hdGNoZWQgYXJndW1lbnRzOiAiCiAgICAgICAgICAgICAgICAgICJmdW5jdGlvbiAnJG1lbWJlck5hbWUnIik7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoX3JlY2VpdmVyIGlzIF9UeXBlICYmIG1lbWJlck5hbWUgPT0gImNhbGwiKSB7CiAgICAgICAgICAgICAgaXNfdHlwZV9jYWxsID0gdHJ1ZTsKICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IF9yZWNlaXZlci50b1N0cmluZygpOwogICAgICAgICAgICAgIG1zZ19idWYud3JpdGVsbigiQXR0ZW1wdGVkIHRvIHVzZSB0eXBlICckbmFtZScgYXMgYSBmdW5jdGlvbi4gIgogICAgICAgICAgICAgICAgICAiU2luY2UgdHlwZXMgZG8gbm90IGRlZmluZSBhIG1ldGhvZCAnY2FsbCcsIHRoaXMgaXMgbm90ICIKICAgICAgICAgICAgICAgICAgInBvc3NpYmxlLiBEaWQgeW91IGludGVuZCB0byBjYWxsIHRoZSAkbmFtZSBjb25zdHJ1Y3RvciBhbmQgIgogICAgICAgICAgICAgICAgICAiZm9yZ2V0IHRoZSAnbmV3JyBvcGVyYXRvcj8iKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBtc2dfYnVmCiAgICAgICAgICAgICAgICAgIC53cml0ZWxuKCJDbGFzcyAnJHtfcmVjZWl2ZXIucnVudGltZVR5cGV9JyBoYXMgbm8gaW5zdGFuY2UgIgogICAgICAgICAgICAgICAgICAgICAgIiR0eXBlX3N0ciAnJG1lbWJlck5hbWUnJGFyZ3NNZXNzYWdlLiIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIGNhc2UgX0ludm9jYXRpb25NaXJyb3IuX1NVUEVSOgogICAgICAgIHsKICAgICAgICAgIG1zZ19idWYud3JpdGVsbigiU3VwZXIgY2xhc3Mgb2YgY2xhc3MgJyR7X3JlY2VpdmVyLnJ1bnRpbWVUeXBlfScgaGFzICIKICAgICAgICAgICAgICAibm8gaW5zdGFuY2UgJHR5cGVfc3RyICckbWVtYmVyTmFtZSckYXJnc01lc3NhZ2UuIik7CiAgICAgICAgICBtZW1iZXJOYW1lID0gInN1cGVyLiRtZW1iZXJOYW1lIjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgY2FzZSBfSW52b2NhdGlvbk1pcnJvci5fU1RBVElDOgogICAgICAgIHsKICAgICAgICAgIG1zZ19idWYud3JpdGVsbigiTm8gc3RhdGljICR0eXBlX3N0ciAnJG1lbWJlck5hbWUnJGFyZ3NNZXNzYWdlICIKICAgICAgICAgICAgICAiZGVjbGFyZWQgaW4gY2xhc3MgJyRfcmVjZWl2ZXInLiIpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICBjYXNlIF9JbnZvY2F0aW9uTWlycm9yLl9DT05TVFJVQ1RPUjoKICAgICAgICB7CiAgICAgICAgICBtc2dfYnVmLndyaXRlbG4oIk5vIGNvbnN0cnVjdG9yICckbWVtYmVyTmFtZSckYXJnc01lc3NhZ2UgZGVjbGFyZWQgIgogICAgICAgICAgICAgICJpbiBjbGFzcyAnJF9yZWNlaXZlcicuIik7CiAgICAgICAgICBtZW1iZXJOYW1lID0gIm5ldyAkbWVtYmVyTmFtZSI7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIGNhc2UgX0ludm9jYXRpb25NaXJyb3IuX1RPUF9MRVZFTDoKICAgICAgICB7CiAgICAgICAgICBtc2dfYnVmLndyaXRlbG4oIk5vIHRvcC1sZXZlbCAkdHlwZV9zdHIgJyRtZW1iZXJOYW1lJyRhcmdzTWVzc2FnZSAiCiAgICAgICAgICAgICAgImRlY2xhcmVkLiIpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQoKICAgIGlmIChsZXZlbCA9PSBfSW52b2NhdGlvbk1pcnJvci5fVE9QX0xFVkVMKSB7CiAgICAgIG1zZ19idWYud3JpdGVsbigiUmVjZWl2ZXI6IHRvcC1sZXZlbCIpOwogICAgfSBlbHNlIHsKICAgICAgbXNnX2J1Zi53cml0ZWxuKCJSZWNlaXZlcjogJHtFcnJvci5zYWZlVG9TdHJpbmcoX3JlY2VpdmVyKX0iKTsKICAgIH0KCiAgICBpZiAodHlwZSA9PSBfSW52b2NhdGlvbk1pcnJvci5fTUVUSE9EKSB7CiAgICAgIFN0cmluZyBtID0gaXNfdHlwZV9jYWxsID8gIiRfcmVjZWl2ZXIiIDogIiRtZW1iZXJOYW1lIjsKICAgICAgbXNnX2J1Zi53cml0ZSgiVHJpZWQgY2FsbGluZzogJG0oJGFyZ3VtZW50cykiKTsKICAgIH0gZWxzZSBpZiAoYXJndW1lbnRDb3VudCA9PSAwKSB7CiAgICAgIG1zZ19idWYud3JpdGUoIlRyaWVkIGNhbGxpbmc6ICRtZW1iZXJOYW1lIik7CiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gX0ludm9jYXRpb25NaXJyb3IuX1NFVFRFUikgewogICAgICBtc2dfYnVmLndyaXRlKCJUcmllZCBjYWxsaW5nOiAkbWVtYmVyTmFtZSRhcmd1bWVudHMiKTsKICAgIH0gZWxzZSB7CiAgICAgIG1zZ19idWYud3JpdGUoIlRyaWVkIGNhbGxpbmc6ICRtZW1iZXJOYW1lID0gJGFyZ3VtZW50cyIpOwogICAgfQoKICAgIGlmIChhcmdzTWlzbWF0Y2gpIHsKICAgICAgU3RyaW5nQnVmZmVyIGZvcm1hbFBhcmFtZXRlcnMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX2V4aXN0aW5nQXJndW1lbnROYW1lcy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgZm9ybWFsUGFyYW1ldGVycy53cml0ZSgiLCAiKTsKICAgICAgICB9CiAgICAgICAgZm9ybWFsUGFyYW1ldGVycy53cml0ZShfZXhpc3RpbmdBcmd1bWVudE5hbWVzW2ldKTsKICAgICAgfQogICAgICBtc2dfYnVmLndyaXRlKCJcbkZvdW5kOiAkbWVtYmVyTmFtZSgkZm9ybWFsUGFyYW1ldGVycykiKTsKICAgIH0KCiAgICByZXR1cm4gbXNnX2J1Zi50b1N0cmluZygpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfQ29tcGlsZVRpbWVFcnJvciBleHRlbmRzIEVycm9yIHsKICBmaW5hbCBTdHJpbmcgX2Vycm9yTXNnOwogIF9Db21waWxlVGltZUVycm9yKHRoaXMuX2Vycm9yTXNnKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBfZXJyb3JNc2c7Cn0KCi8vLyBVc2VkIGJ5IEZhc3RhIHRvIHJlcG9ydCBhIHJ1bnRpbWUgZXJyb3Igd2hlbiBhIGZpbmFsIGZpZWxkIHdpdGggYW4KLy8vIGluaXRpYWxpemVyIGlzIGFsc28gaW5pdGlhbGl6ZWQgaW4gYSBnZW5lcmF0aXZlIGNvbnN0cnVjdG9yLgovLy8KLy8vIE5vdGU6IGluIHN0cm9uZyBtb2RlLCB0aGlzIGlzIGEgY29tcGlsZS10aW1lIGVycm9yIGFuZCB0aGlzIGNsYXNzIGJlY29tZXMKLy8vIG9ic29sZXRlLgpjbGFzcyBfRHVwbGljYXRlZEZpZWxkSW5pdGlhbGl6ZXJFcnJvciBleHRlbmRzIEVycm9yIHsKICBmaW5hbCBTdHJpbmcgX25hbWU7CgogIF9EdXBsaWNhdGVkRmllbGRJbml0aWFsaXplckVycm9yKHRoaXMuX25hbWUpOwoKICB0b1N0cmluZygpID0+ICJFcnJvcjogZmllbGQgJyRfbmFtZScgaXMgYWxyZWFkeSBpbml0aWFsaXplZC4iOwp9CgpjbGFzcyBfTGF0ZUluaXRpYWxpemF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvcgogICAgaW1wbGVtZW50cyBMYXRlSW5pdGlhbGl6YXRpb25FcnJvciB7CiAgX0xhdGVJbml0aWFsaXphdGlvbkVycm9yKHRoaXMuX25hbWUpOwoKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgc3RhdGljIHZvaWQgX3Rocm93TmV3KFN0cmluZyBuYW1lKSB7CiAgICB0aHJvdyBfTGF0ZUluaXRpYWxpemF0aW9uRXJyb3IobmFtZSk7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiTGF0ZUluaXRpYWxpemF0aW9uRXJyb3I6ICRfbmFtZSI7CgogIGZpbmFsIFN0cmluZyBfbmFtZTsKfQqCYABOTjwBDwEeAQcOCTElBAEJNSAEAQksARwaAgFAHBtRAUtBSyRLOAQBSygBJClFGAYhJwYhHwYWBAEeMCsoBAEWGDw/BhkXNSQGQTAEASEVExUYAgFAHEhFAUM0ASYCATYcSwFMHAEiAUsVExUaAgEHGQkcMRQWAUwBCRZABAFNNA8NAgEXHCMzFQIBBxoZISUEAgEHIio3BAIBBygcKy8BOjkBCRY9JAQBTTQPDQIBBxonFhMoHwEaJwEJSx43AUxGBAFMTxgkUUJRMgQBJB0XGRscFhweURoGBAFJSEonGAFOCThFKx4cIioqOB8BLzIsRko1PUAGGwQBTVFOUBwfFhkbHBYaPCQdIlJLGCJQHSI/GQFNTgEJFkQfLSQGGEZIJ0EwUQYBKjNBLSM3FSgKRggjBjQ/GydMISQKFUwIBjUiNyEkCkciNxkKBhlMTAEUIRkSEhIcExAGAUMfFScKIydJLRVQDhMpSC1FIzJNTFAxFVE2DgwRCiUKUD4sEQomCkUyEQorCkopKhEKKQpIHBEKBgExLQ1EBgEtPikmKAgnJTI0Pw1CBgEfOAYBHgQBQCFHJ0AuDT0BMFEGATEbHkMhIQpICAYjOCEhCkQfNBkKBjhJARUhGhISEhwTEAYBRB8VJwojIEsxFRZPDhMpSS1FIzJOTFAxFRZPPw4MEQolClFDLBEKJgpLMhEKKwpPKSoRCikKThwRCgYBMS4NRQYBLT42JTM0PQ1ABgEYOkAVKAo7CEAGAR8EAgEaKBolIgIBR0EETg43FgEwAUECAS0pKAEcJyoEAToBFgIBIWRhcnQ6Y29yZS1wYXRjaC9lcnJvcnNfcGF0Y2guZGFydENvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9hc3luYy9hc3luY19lcnJvci5kYXJ0gzwvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5hc3luYzsKCl9pbnZva2VFcnJvckhhbmRsZXIoCiAgICBGdW5jdGlvbiBlcnJvckhhbmRsZXIsIE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgaWYgKGVycm9ySGFuZGxlciBpcyBab25lQmluYXJ5Q2FsbGJhY2s8ZHluYW1pYywgTnVsbCwgTnVsbD4pIHsKICAgIC8vIER5bmFtaWMgaW52b2NhdGlvbiBiZWNhdXNlIHdlIGRvbid0IGtub3cgdGhlIGFjdHVhbCB0eXBlIG9mIHRoZQogICAgLy8gZmlyc3QgYXJndW1lbnQgb3IgdGhlIGVycm9yIG9iamVjdCwgYnV0IHdlIHNob3VsZCBzdWNjZXNzZnVsbHkgY2FsbAogICAgLy8gdGhlIGhhbmRsZXIgaWYgdGhleSBtYXRjaCB1cC4KICAgIC8vIFRPRE8obHJuKTogU2hvdWxkIHdlPyBXaHkgbm90IHRoZSBzYW1lIGJlbG93IGZvciB0aGUgdW5hcnkgY2FzZT8KICAgIHJldHVybiAoZXJyb3JIYW5kbGVyIGFzIGR5bmFtaWMpKGVycm9yLCBzdGFja1RyYWNlKTsKICB9IGVsc2UgewogICAgWm9uZVVuYXJ5Q2FsbGJhY2sgdW5hcnlFcnJvckhhbmRsZXIgPSBlcnJvckhhbmRsZXI7CiAgICByZXR1cm4gdW5hcnlFcnJvckhhbmRsZXIoZXJyb3IpOwogIH0KfQoXAE5OPAEPARQBFUJBR0slSDkLOCUEAgEbZGFydDphc3luYy9hc3luY19lcnJvci5kYXJ0R29yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2NvbGxlY3Rpb24vY29sbGVjdGlvbi5kYXJ0g0MvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vLyBDbGFzc2VzIGFuZCB1dGlsaXRpZXMgdGhhdCBzdXBwbGVtZW50IHRoZSBjb2xsZWN0aW9uIHN1cHBvcnQgaW4gZGFydDpjb3JlLgovLy8KLy8vIFRvIHVzZSB0aGlzIGxpYnJhcnkgaW4geW91ciBjb2RlOgovLy8KLy8vICAgICBpbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7Ci8vLwovLy8ge0BjYXRlZ29yeSBDb3JlfQpsaWJyYXJ5IGRhcnQuY29sbGVjdGlvbjsKCmltcG9ydCAnZGFydDpfaW50ZXJuYWwnIGhpZGUgU3ltYm9sOwppbXBvcnQgJ2RhcnQ6bWF0aCcgc2hvdyBSYW5kb207IC8vIFVzZWQgYnkgTGlzdE1peGluLnNodWZmbGUuCgpwYXJ0ICdjb2xsZWN0aW9ucy5kYXJ0JzsKcGFydCAnaGFzaF9tYXAuZGFydCc7CnBhcnQgJ2hhc2hfc2V0LmRhcnQnOwpwYXJ0ICdpdGVyYWJsZS5kYXJ0JzsKcGFydCAnaXRlcmF0b3IuZGFydCc7CnBhcnQgJ2xpbmtlZF9oYXNoX21hcC5kYXJ0JzsKcGFydCAnbGlua2VkX2hhc2hfc2V0LmRhcnQnOwpwYXJ0ICdsaW5rZWRfbGlzdC5kYXJ0JzsKcGFydCAnbGlzdC5kYXJ0JzsKcGFydCAnbWFwcy5kYXJ0JzsKcGFydCAncXVldWUuZGFydCc7CnBhcnQgJ3NldC5kYXJ0JzsKcGFydCAnc3BsYXlfdHJlZS5kYXJ0JzsKIQBOTjwBDwFPBCYEIgQVGQElPgEZFhYWFh0dGRISExEYAQ9kYXJ0OmNvbGxlY3Rpb25Fb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvY29sbGVjdGlvbi9oYXNoX21hcC5kYXJ0mUMvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5jb2xsZWN0aW9uOwoKLy8vIERlZmF1bHQgZnVuY3Rpb24gZm9yIGVxdWFsaXR5IGNvbXBhcmlzb24gaW4gY3VzdG9taXplZCBIYXNoTWFwcwpib29sIF9kZWZhdWx0RXF1YWxzKGEsIGIpID0+IGEgPT0gYjsKCi8vLyBEZWZhdWx0IGZ1bmN0aW9uIGZvciBoYXNoLWNvZGUgY29tcHV0YXRpb24gaW4gY3VzdG9taXplZCBIYXNoTWFwcwppbnQgX2RlZmF1bHRIYXNoQ29kZShhKSA9PiBhLmhhc2hDb2RlOwoKLy8vIFR5cGUgb2YgY3VzdG9tIGVxdWFsaXR5IGZ1bmN0aW9uCnR5cGVkZWYgX0VxdWFsaXR5PEs+ID0gYm9vbCBGdW5jdGlvbihLIGEsIEsgYik7CgovLy8gVHlwZSBvZiBjdXN0b20gaGFzaCBjb2RlIGZ1bmN0aW9uLgp0eXBlZGVmIF9IYXNoZXI8Sz4gPSBpbnQgRnVuY3Rpb24oSyBvYmplY3QpOwoKLy8vIEEgaGFzaC10YWJsZSBiYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBbTWFwXS4KLy8vCi8vLyBUaGUga2V5cyBvZiBhIGBIYXNoTWFwYCBtdXN0IGhhdmUgY29uc2lzdGVudCBbT2JqZWN0Lj09XQovLy8gYW5kIFtPYmplY3QuaGFzaENvZGVdIGltcGxlbWVudGF0aW9ucy4gVGhpcyBtZWFucyB0aGF0IHRoZSBgPT1gIG9wZXJhdG9yCi8vLyBtdXN0IGRlZmluZSBhIHN0YWJsZSBlcXVpdmFsZW5jZSByZWxhdGlvbiBvbiB0aGUga2V5cyAocmVmbGV4aXZlLAovLy8gc3ltbWV0cmljLCB0cmFuc2l0aXZlLCBhbmQgY29uc2lzdGVudCBvdmVyIHRpbWUpLCBhbmQgdGhhdCBgaGFzaENvZGVgCi8vLyBtdXN0IGJlIHRoZSBzYW1lIGZvciBvYmplY3RzIHRoYXQgYXJlIGNvbnNpZGVyZWQgZXF1YWwgYnkgYD09YC4KLy8vCi8vLyBUaGUgbWFwIGFsbG93cyBgbnVsbGAgYXMgYSBrZXkuCi8vLwovLy8gSXRlcmF0aW5nIHRoZSBtYXAncyBrZXlzLCB2YWx1ZXMgb3IgZW50cmllcyAodGhyb3VnaCBbZm9yRWFjaF0pCi8vLyBtYXkgaGFwcGVuIGluIGFueSBvcmRlci4KLy8vIFRoZSBpdGVyYXRpb24gb3JkZXIgb25seSBjaGFuZ2VzIHdoZW4gdGhlIG1hcCBpcyBtb2RpZmllZC4KLy8vIFZhbHVlcyBhcmUgaXRlcmF0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlaXIgYXNzb2NpYXRlZCBrZXlzLAovLy8gc28gaXRlcmF0aW5nIHRoZSBba2V5c10gYW5kIFt2YWx1ZXNdIGluIHBhcmFsbGVsCi8vLyB3aWxsIGdpdmUgbWF0Y2hpbmcga2V5IGFuZCB2YWx1ZSBwYWlycy4KYWJzdHJhY3QgY2xhc3MgSGFzaE1hcDxLLCBWPiBpbXBsZW1lbnRzIE1hcDxLLCBWPiB7CiAgLy8vIENyZWF0ZXMgYW4gdW5vcmRlcmVkIGhhc2gtdGFibGUgYmFzZWQgW01hcF0uCiAgLy8vCiAgLy8vIFRoZSBjcmVhdGVkIG1hcCBpcyBub3Qgb3JkZXJlZCBpbiBhbnkgd2F5LiBXaGVuIGl0ZXJhdGluZyB0aGUga2V5cyBvcgogIC8vLyB2YWx1ZXMsIHRoZSBpdGVyYXRpb24gb3JkZXIgaXMgdW5zcGVjaWZpZWQgZXhjZXB0IHRoYXQgaXQgd2lsbCBzdGF5IHRoZQogIC8vLyBzYW1lIGFzIGxvbmcgYXMgdGhlIG1hcCBpc24ndCBjaGFuZ2VkLgogIC8vLwogIC8vLyBJZiBbZXF1YWxzXSBpcyBwcm92aWRlZCwgaXQgaXMgdXNlZCB0byBjb21wYXJlIHRoZSBrZXlzIGluIHRoZSB0YWJsZSB3aXRoCiAgLy8vIG5ldyBrZXlzLiBJZiBbZXF1YWxzXSBpcyBvbWl0dGVkLCB0aGUga2V5J3Mgb3duIFtPYmplY3QuPT1dIGlzIHVzZWQKICAvLy8gaW5zdGVhZC4KICAvLy8KICAvLy8gU2ltaWxhciwgaWYgW2hhc2hDb2RlXSBpcyBwcm92aWRlZCwgaXQgaXMgdXNlZCB0byBwcm9kdWNlIGEgaGFzaCB2YWx1ZQogIC8vLyBmb3Iga2V5cyBpbiBvcmRlciB0byBwbGFjZSB0aGVtIGluIHRoZSBoYXNoIHRhYmxlLiBJZiBpdCBpcyBvbWl0dGVkLCB0aGUKICAvLy8ga2V5J3Mgb3duIFtPYmplY3QuaGFzaENvZGVdIGlzIHVzZWQuCiAgLy8vCiAgLy8vIElmIHVzaW5nIG1ldGhvZHMgbGlrZSBbb3BlcmF0b3IgW11dLCBbcmVtb3ZlXSBhbmQgW2NvbnRhaW5zS2V5XSB0b2dldGhlcgogIC8vLyB3aXRoIGEgY3VzdG9tIGVxdWFsaXR5IGFuZCBoYXNoY29kZSwgYW4gZXh0cmEgYGlzVmFsaWRLZXlgIGZ1bmN0aW9uCiAgLy8vIGNhbiBiZSBzdXBwbGllZC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgW2VxdWFsc10gb3IKICAvLy8gW2hhc2hDb2RlXSB3aXRoIGFuIGFyZ3VtZW50IHRoYXQgbWF5IG5vdCBiZSBhIFtLXSBpbnN0YW5jZSwgYW5kIGlmIHRoZQogIC8vLyBjYWxsIHJldHVybnMgZmFsc2UsIHRoZSBrZXkgaXMgYXNzdW1lZCB0byBub3QgYmUgaW4gdGhlIHNldC4KICAvLy8gVGhlIFtpc1ZhbGlkS2V5XSBmdW5jdGlvbiBkZWZhdWx0cyB0byBqdXN0IHRlc3RpbmcgaWYgdGhlIG9iamVjdCBpcyBhCiAgLy8vIFtLXSBpbnN0YW5jZS4KICAvLy8KICAvLy8gRXhhbXBsZToKICAvLy8KICAvLy8gICAgIG5ldyBIYXNoTWFwPGludCxpbnQ+KGVxdWFsczogKGludCBhLCBpbnQgYikgPT4gKGIgLSBhKSAlIDUgPT0gMCwKICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hDb2RlOiAoaW50IGUpID0+IGUgJSA1KQogIC8vLwogIC8vLyBUaGlzIGV4YW1wbGUgbWFwIGRvZXMgbm90IG5lZWQgYW4gYGlzVmFsaWRLZXlgIGZ1bmN0aW9uIHRvIGJlIHBhc3NlZC4KICAvLy8gVGhlIGRlZmF1bHQgZnVuY3Rpb24gYWNjZXB0cyBvbmx5IGBpbnRgIHZhbHVlcywgd2hpY2ggY2FuIHNhZmVseSBiZQogIC8vLyBwYXNzZWQgdG8gYm90aCB0aGUgYGVxdWFsc2AgYW5kIGBoYXNoQ29kZWAgZnVuY3Rpb25zLgogIC8vLwogIC8vLyBJZiBuZWl0aGVyIGBlcXVhbHNgLCBgaGFzaENvZGVgLCBub3IgYGlzVmFsaWRLZXlgIGlzIHByb3ZpZGVkLAogIC8vLyB0aGUgZGVmYXVsdCBgaXNWYWxpZEtleWAgaW5zdGVhZCBhY2NlcHRzIGFsbCBrZXlzLgogIC8vLyBUaGUgZGVmYXVsdCBlcXVhbGl0eSBhbmQgaGFzaGNvZGUgb3BlcmF0aW9ucyBhcmUgYXNzdW1lZCB0byB3b3JrIG9uIGFsbAogIC8vLyBvYmplY3RzLgogIC8vLwogIC8vLyBMaWtld2lzZSwgaWYgYGVxdWFsc2AgaXMgW2lkZW50aWNhbF0sIGBoYXNoQ29kZWAgaXMgW2lkZW50aXR5SGFzaENvZGVdCiAgLy8vIGFuZCBgaXNWYWxpZEtleWAgaXMgb21pdHRlZCwgdGhlIHJlc3VsdGluZyBtYXAgaXMgaWRlbnRpdHkgYmFzZWQsCiAgLy8vIGFuZCB0aGUgYGlzVmFsaWRLZXlgIGRlZmF1bHRzIHRvIGFjY2VwdGluZyBhbGwga2V5cy4KICAvLy8gU3VjaCBhIG1hcCBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSB1c2luZyBbSGFzaE1hcC5pZGVudGl0eV0uCiAgLy8vCiAgLy8vIFRoZSB1c2VkIGBlcXVhbHNgIGFuZCBgaGFzaENvZGVgIG1ldGhvZCBzaG91bGQgYWx3YXlzIGJlIGNvbnNpc3RlbnQsCiAgLy8vIHNvIHRoYXQgaWYgYGVxdWFscyhhLCBiKWAgdGhlbiBgaGFzaENvZGUoYSkgPT0gaGFzaENvZGUoYilgLiBUaGUgaGFzaAogIC8vLyBvZiBhbiBvYmplY3QsIG9yIHdoYXQgaXQgY29tcGFyZXMgZXF1YWwgdG8sIHNob3VsZCBub3QgY2hhbmdlIHdoaWxlIHRoZQogIC8vLyBvYmplY3QgaXMgYSBrZXkgaW4gdGhlIG1hcC4gSWYgaXQgZG9lcyBjaGFuZ2UsIHRoZSByZXN1bHQgaXMKICAvLy8gdW5wcmVkaWN0YWJsZS4KICAvLy8KICAvLy8gSWYgeW91IHN1cHBseSBvbmUgb2YgW2VxdWFsc10gYW5kIFtoYXNoQ29kZV0sCiAgLy8vIHlvdSBzaG91bGQgZ2VuZXJhbGx5IGFsc28gdG8gc3VwcGx5IHRoZSBvdGhlci4KICBleHRlcm5hbCBmYWN0b3J5IEhhc2hNYXAoCiAgICAgIHtib29sIGVxdWFscyhLIGtleTEsIEsga2V5MiksCiAgICAgIGludCBoYXNoQ29kZShLIGtleSksCiAgICAgIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpfSk7CgogIC8vLyBDcmVhdGVzIGFuIHVub3JkZXJlZCBpZGVudGl0eS1iYXNlZCBtYXAuCiAgLy8vCiAgLy8vIEVmZmVjdGl2ZWx5IGEgc2hvcnRoYW5kIGZvcjoKICAvLy8KICAvLy8gICAgIG5ldyBIYXNoTWFwPEssIFY+KGVxdWFsczogaWRlbnRpY2FsLAogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgaGFzaENvZGU6IGlkZW50aXR5SGFzaENvZGUpCiAgZXh0ZXJuYWwgZmFjdG9yeSBIYXNoTWFwLmlkZW50aXR5KCk7CgogIC8vLyBDcmVhdGVzIGEgW0hhc2hNYXBdIHRoYXQgY29udGFpbnMgYWxsIGtleS92YWx1ZSBwYWlycyBvZiBbb3RoZXJdLgogIC8vLwogIC8vLyBUaGUga2V5cyBtdXN0IGFsbCBiZSBpbnN0YW5jZXMgb2YgW0tdIGFuZCB0aGUgdmFsdWVzIG9mIFtWXS4KICAvLy8gVGhlIFtvdGhlcl0gbWFwIGl0c2VsZiBjYW4gaGF2ZSBhbnkgdHlwZS4KICBmYWN0b3J5IEhhc2hNYXAuZnJvbShNYXAgb3RoZXIpIHsKICAgIE1hcDxLLCBWPiByZXN1bHQgPSBIYXNoTWFwPEssIFY+KCk7CiAgICBvdGhlci5mb3JFYWNoKChrLCB2KSB7CiAgICAgIHJlc3VsdFtrXSA9IHY7CiAgICB9KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIFtIYXNoTWFwXSB0aGF0IGNvbnRhaW5zIGFsbCBrZXkvdmFsdWUgcGFpcnMgb2YgW290aGVyXS4KICBmYWN0b3J5IEhhc2hNYXAub2YoTWFwPEssIFY+IG90aGVyKSA9PiBIYXNoTWFwPEssIFY+KCkuLmFkZEFsbChvdGhlcik7CgogIC8vLyBDcmVhdGVzIGEgW0hhc2hNYXBdIHdoZXJlIHRoZSBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNvbXB1dGVkIGZyb20gdGhlCiAgLy8vIFtpdGVyYWJsZV0uCiAgLy8vCiAgLy8vIEZvciBlYWNoIGVsZW1lbnQgb2YgdGhlIFtpdGVyYWJsZV0gdGhpcyBjb25zdHJ1Y3RvciBjb21wdXRlcyBhIGtleS92YWx1ZQogIC8vLyBwYWlyLCBieSBhcHBseWluZyBba2V5XSBhbmQgW3ZhbHVlXSByZXNwZWN0aXZlbHkuCiAgLy8vCiAgLy8vIFRoZSBrZXlzIG9mIHRoZSBrZXkvdmFsdWUgcGFpcnMgZG8gbm90IG5lZWQgdG8gYmUgdW5pcXVlLiBUaGUgbGFzdAogIC8vLyBvY2N1cnJlbmNlIG9mIGEga2V5IHdpbGwgc2ltcGx5IG92ZXJ3cml0ZSBhbnkgcHJldmlvdXMgdmFsdWUuCiAgLy8vCiAgLy8vIElmIG5vIHZhbHVlcyBhcmUgc3BlY2lmaWVkIGZvciBba2V5XSBhbmQgW3ZhbHVlXSB0aGUgZGVmYXVsdCBpcyB0aGUKICAvLy8gaWRlbnRpdHkgZnVuY3Rpb24uCiAgZmFjdG9yeSBIYXNoTWFwLmZyb21JdGVyYWJsZShJdGVyYWJsZSBpdGVyYWJsZSwKICAgICAge0sga2V5KGVsZW1lbnQpLCBWIHZhbHVlKGVsZW1lbnQpfSkgewogICAgTWFwPEssIFY+IG1hcCA9IEhhc2hNYXA8SywgVj4oKTsKICAgIE1hcEJhc2UuX2ZpbGxNYXBXaXRoTWFwcGVkSXRlcmFibGUobWFwLCBpdGVyYWJsZSwga2V5LCB2YWx1ZSk7CiAgICByZXR1cm4gbWFwOwogIH0KCiAgLy8vIENyZWF0ZXMgYSBbSGFzaE1hcF0gYXNzb2NpYXRpbmcgdGhlIGdpdmVuIFtrZXlzXSB0byBbdmFsdWVzXS4KICAvLy8KICAvLy8gVGhpcyBjb25zdHJ1Y3RvciBpdGVyYXRlcyBvdmVyIFtrZXlzXSBhbmQgW3ZhbHVlc10gYW5kIG1hcHMgZWFjaCBlbGVtZW50CiAgLy8vIG9mIFtrZXlzXSB0byB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIFt2YWx1ZXNdLgogIC8vLwogIC8vLyBJZiBba2V5c10gY29udGFpbnMgdGhlIHNhbWUgb2JqZWN0IG11bHRpcGxlIHRpbWVzLCB0aGUgbGFzdCBvY2N1cnJlbmNlCiAgLy8vIG92ZXJ3cml0ZXMgdGhlIHByZXZpb3VzIHZhbHVlLgogIC8vLwogIC8vLyBJdCBpcyBhbiBlcnJvciBpZiB0aGUgdHdvIFtJdGVyYWJsZV1zIGRvbid0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoLgogIGZhY3RvcnkgSGFzaE1hcC5mcm9tSXRlcmFibGVzKEl0ZXJhYmxlPEs+IGtleXMsIEl0ZXJhYmxlPFY+IHZhbHVlcykgewogICAgTWFwPEssIFY+IG1hcCA9IEhhc2hNYXA8SywgVj4oKTsKICAgIE1hcEJhc2UuX2ZpbGxNYXBXaXRoSXRlcmFibGVzKG1hcCwga2V5cywgdmFsdWVzKTsKICAgIHJldHVybiBtYXA7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIFtIYXNoTWFwXSBjb250YWluaW5nIHRoZSBlbnRyaWVzIG9mIFtlbnRyaWVzXS4KICAvLy8KICAvLy8gUmV0dXJucyBhIG5ldyBgSGFzaE1hcDxLLCBWPmAgd2hlcmUgYWxsIGVudHJpZXMgb2YgW2VudHJpZXNdCiAgLy8vIGhhdmUgYmVlbiBhZGRlZCBpbiBpdGVyYXRpb24gb3JkZXIuCiAgLy8vCiAgLy8vIElmIG11bHRpcGxlIFtlbnRyaWVzXSBoYXZlIHRoZSBzYW1lIGtleSwKICAvLy8gbGF0ZXIgb2NjdXJyZW5jZXMgb3ZlcndyaXRlIHRoZSBlYXJsaWVyIG9uZXMuCiAgQFNpbmNlKCIyLjEiKQogIGZhY3RvcnkgSGFzaE1hcC5mcm9tRW50cmllcyhJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZW50cmllcykgPT4KICAgICAgSGFzaE1hcDxLLCBWPigpLi5hZGRFbnRyaWVzKGVudHJpZXMpOwp9CoCgAE5OPAEPARkBRCUBRicBJTABJy0BMAQ9TUZKRAQkBEQdP0Q1LDQzBkxOLQZQSg8GTU8rBk9KSk1DTBQGDwZLOwZMSjwGRTlODwZNSDtDBktMTkMVBjQ1HCQbJwEvBiMGLzgnAUgGQzAkKBsVCBMEAUhJAUoSBk84BklEBkoZMiwlQxAEAUQGTzoGTSUGSEglNhAEAT8GQyoGLzQQQywCAR1kYXJ0OmNvbGxlY3Rpb24vaGFzaF9tYXAuZGFydEdvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9jb2xsZWN0aW9uL3NwbGF5X3RyZWUuZGFydMAAZ3QvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5jb2xsZWN0aW9uOwoKdHlwZWRlZiBfUHJlZGljYXRlPFQ+ID0gYm9vbCBGdW5jdGlvbihUIHZhbHVlKTsKCi8vLyBBIG5vZGUgaW4gYSBzcGxheSB0cmVlLiBJdCBob2xkcyB0aGUgc29ydGluZyBrZXkgYW5kIHRoZSBsZWZ0Ci8vLyBhbmQgcmlnaHQgY2hpbGRyZW4gaW4gdGhlIHRyZWUuCmNsYXNzIF9TcGxheVRyZWVOb2RlPEs+IHsKICBmaW5hbCBLIGtleTsKICBfU3BsYXlUcmVlTm9kZTxLPiBsZWZ0OwogIF9TcGxheVRyZWVOb2RlPEs+IHJpZ2h0OwoKICBfU3BsYXlUcmVlTm9kZSh0aGlzLmtleSk7Cn0KCi8vLyBBIG5vZGUgaW4gYSBzcGxheSB0cmVlIGJhc2VkIG1hcC4KLy8vCi8vLyBBIFtfU3BsYXlUcmVlTm9kZV0gdGhhdCBhbHNvIGNvbnRhaW5zIGEgdmFsdWUKY2xhc3MgX1NwbGF5VHJlZU1hcE5vZGU8SywgVj4gZXh0ZW5kcyBfU3BsYXlUcmVlTm9kZTxLPiB7CiAgViB2YWx1ZTsKICBfU3BsYXlUcmVlTWFwTm9kZShLIGtleSwgdGhpcy52YWx1ZSkgOiBzdXBlcihrZXkpOwp9CgovLy8gQSBzcGxheSB0cmVlIGlzIGEgc2VsZi1iYWxhbmNpbmcgYmluYXJ5IHNlYXJjaCB0cmVlLgovLy8KLy8vIEl0IGhhcyB0aGUgYWRkaXRpb25hbCBwcm9wZXJ0eSB0aGF0IHJlY2VudGx5IGFjY2Vzc2VkIGVsZW1lbnRzCi8vLyBhcmUgcXVpY2sgdG8gYWNjZXNzIGFnYWluLgovLy8gSXQgcGVyZm9ybXMgYmFzaWMgb3BlcmF0aW9ucyBzdWNoIGFzIGluc2VydGlvbiwgbG9vay11cCBhbmQKLy8vIHJlbW92YWwsIGluIE8obG9nKG4pKSBhbW9ydGl6ZWQgdGltZS4KYWJzdHJhY3QgY2xhc3MgX1NwbGF5VHJlZTxLLCBOb2RlIGV4dGVuZHMgX1NwbGF5VHJlZU5vZGU8Sz4+IHsKICAvLyBUaGUgcm9vdCBub2RlIG9mIHRoZSBzcGxheSB0cmVlLiBJdCB3aWxsIGNvbnRhaW4gZWl0aGVyIHRoZSBsYXN0CiAgLy8gZWxlbWVudCBpbnNlcnRlZCBvciB0aGUgbGFzdCBlbGVtZW50IGxvb2tlZCB1cC4KICBOb2RlIGdldCBfcm9vdDsKICBzZXQgX3Jvb3QoTm9kZSBuZXdWYWx1ZSk7CgogIC8vIFRoZSBkdW1teSBub2RlIHVzZWQgd2hlbiBwZXJmb3JtaW5nIGEgc3BsYXkgb24gdGhlIHRyZWUuIFJldXNpbmcgaXQKICAvLyBhdm9pZHMgYWxsb2NhdGluZyBhIG5vZGUgZWFjaCB0aW1lIGEgc3BsYXkgaXMgcGVyZm9ybWVkLgogIE5vZGUgZ2V0IF9kdW1teTsKCiAgLy8gTnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBzcGxheSB0cmVlLgogIGludCBfY291bnQgPSAwOwoKICAvLy8gQ291bnRlciBpbmNyZW1lbnRlZCB3aGVuZXZlciB0aGUga2V5cyBpbiB0aGUgbWFwIGNoYW5nZXMuCiAgLy8vCiAgLy8vIFVzZWQgdG8gZGV0ZWN0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucy4KICBpbnQgX21vZGlmaWNhdGlvbkNvdW50ID0gMDsKCiAgLy8vIENvdW50ZXIgaW5jcmVtZW50ZWQgd2hlbmV2ZXIgdGhlIHRyZWUgc3RydWN0dXJlIGNoYW5nZXMuCiAgLy8vCiAgLy8vIFVzZWQgdG8gZGV0ZWN0IHRoYXQgYW4gaW4tcGxhY2UgdHJhdmVyc2FsIGNhbm5vdCB1c2UKICAvLy8gY2FjaGVkIGluZm9ybWF0aW9uIHRoYXQgcmVsaWVzIG9uIHRoZSB0cmVlIHN0cnVjdHVyZS4KICBpbnQgX3NwbGF5Q291bnQgPSAwOwoKICAvLy8gVGhlIGNvbXBhcmF0b3IgdGhhdCBpcyB1c2VkIGZvciB0aGlzIHNwbGF5IHRyZWUuCiAgQ29tcGFyYXRvcjxLPiBnZXQgX2NvbXBhcmF0b3I7CgogIC8vLyBUaGUgcHJlZGljYXRlIHRvIGRldGVybWluZSB0aGF0IGEgZ2l2ZW4gb2JqZWN0IGlzIGEgdmFsaWQga2V5LgogIF9QcmVkaWNhdGUgZ2V0IF92YWxpZEtleTsKCiAgLy8vIENvbXBhcmlzb24gdXNlZCB0byBjb21wYXJlIGtleXMuCiAgaW50IF9jb21wYXJlKEsga2V5MSwgSyBrZXkyKTsKCiAgLy8vIFBlcmZvcm0gdGhlIHNwbGF5IG9wZXJhdGlvbiBmb3IgdGhlIGdpdmVuIGtleS4gTW92ZXMgdGhlIG5vZGUgd2l0aAogIC8vLyB0aGUgZ2l2ZW4ga2V5IHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUuICBJZiBubyBub2RlIGhhcyB0aGUgZ2l2ZW4KICAvLy8ga2V5LCB0aGUgbGFzdCBub2RlIG9uIHRoZSBzZWFyY2ggcGF0aCBpcyBtb3ZlZCB0byB0aGUgdG9wIG9mIHRoZQogIC8vLyB0cmVlLiBUaGlzIGlzIHRoZSBzaW1wbGlmaWVkIHRvcC1kb3duIHNwbGF5aW5nIGFsZ29yaXRobSBmcm9tOgogIC8vLyAiU2VsZi1hZGp1c3RpbmcgQmluYXJ5IFNlYXJjaCBUcmVlcyIgYnkgU2xlYXRvciBhbmQgVGFyamFuLgogIC8vLwogIC8vLyBSZXR1cm5zIHRoZSByZXN1bHQgb2YgY29tcGFyaW5nIHRoZSBuZXcgcm9vdCBvZiB0aGUgdHJlZSB0byBba2V5XS4KICAvLy8gUmV0dXJucyAtMSBpZiB0aGUgdGFibGUgaXMgZW1wdHkuCiAgaW50IF9zcGxheShLIGtleSkgewogICAgaWYgKF9yb290ID09IG51bGwpIHJldHVybiAtMTsKCiAgICAvLyBUaGUgcmlnaHQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUgd2lsbCBob2xkCiAgICAvLyB0aGUgTCB0cmVlIG9mIHRoZSBhbGdvcml0aG0uICBUaGUgbGVmdCBjaGlsZCBvZiB0aGUgZHVtbXkgbm9kZQogICAgLy8gd2lsbCBob2xkIHRoZSBSIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFVzaW5nIGEgZHVtbXkgbm9kZSwgbGVmdAogICAgLy8gYW5kIHJpZ2h0IHdpbGwgYWx3YXlzIGJlIG5vZGVzIGFuZCB3ZSBhdm9pZCBzcGVjaWFsIGNhc2VzLgogICAgTm9kZSBsZWZ0ID0gX2R1bW15OwogICAgTm9kZSByaWdodCA9IF9kdW1teTsKICAgIE5vZGUgY3VycmVudCA9IF9yb290OwogICAgaW50IGNvbXA7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBjb21wID0gX2NvbXBhcmUoY3VycmVudC5rZXksIGtleSk7CiAgICAgIGlmIChjb21wID4gMCkgewogICAgICAgIGlmIChjdXJyZW50LmxlZnQgPT0gbnVsbCkgYnJlYWs7CiAgICAgICAgY29tcCA9IF9jb21wYXJlKGN1cnJlbnQubGVmdC5rZXksIGtleSk7CiAgICAgICAgaWYgKGNvbXAgPiAwKSB7CiAgICAgICAgICAvLyBSb3RhdGUgcmlnaHQuCiAgICAgICAgICBfU3BsYXlUcmVlTm9kZTxLPiB0bXAgPSBjdXJyZW50LmxlZnQ7CiAgICAgICAgICBjdXJyZW50LmxlZnQgPSB0bXAucmlnaHQ7CiAgICAgICAgICB0bXAucmlnaHQgPSBjdXJyZW50OwogICAgICAgICAgY3VycmVudCA9IHRtcDsKICAgICAgICAgIGlmIChjdXJyZW50LmxlZnQgPT0gbnVsbCkgYnJlYWs7CiAgICAgICAgfQogICAgICAgIC8vIExpbmsgcmlnaHQuCiAgICAgICAgcmlnaHQubGVmdCA9IGN1cnJlbnQ7CiAgICAgICAgcmlnaHQgPSBjdXJyZW50OwogICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmxlZnQ7CiAgICAgIH0gZWxzZSBpZiAoY29tcCA8IDApIHsKICAgICAgICBpZiAoY3VycmVudC5yaWdodCA9PSBudWxsKSBicmVhazsKICAgICAgICBjb21wID0gX2NvbXBhcmUoY3VycmVudC5yaWdodC5rZXksIGtleSk7CiAgICAgICAgaWYgKGNvbXAgPCAwKSB7CiAgICAgICAgICAvLyBSb3RhdGUgbGVmdC4KICAgICAgICAgIE5vZGUgdG1wID0gY3VycmVudC5yaWdodDsKICAgICAgICAgIGN1cnJlbnQucmlnaHQgPSB0bXAubGVmdDsKICAgICAgICAgIHRtcC5sZWZ0ID0gY3VycmVudDsKICAgICAgICAgIGN1cnJlbnQgPSB0bXA7CiAgICAgICAgICBpZiAoY3VycmVudC5yaWdodCA9PSBudWxsKSBicmVhazsKICAgICAgICB9CiAgICAgICAgLy8gTGluayBsZWZ0LgogICAgICAgIGxlZnQucmlnaHQgPSBjdXJyZW50OwogICAgICAgIGxlZnQgPSBjdXJyZW50OwogICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJpZ2h0OwogICAgICB9IGVsc2UgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICAvLyBBc3NlbWJsZS4KICAgIGxlZnQucmlnaHQgPSBjdXJyZW50LmxlZnQ7CiAgICByaWdodC5sZWZ0ID0gY3VycmVudC5yaWdodDsKICAgIGN1cnJlbnQubGVmdCA9IF9kdW1teS5yaWdodDsKICAgIGN1cnJlbnQucmlnaHQgPSBfZHVtbXkubGVmdDsKICAgIF9yb290ID0gY3VycmVudDsKCiAgICBfZHVtbXkucmlnaHQgPSBudWxsOwogICAgX2R1bW15LmxlZnQgPSBudWxsOwogICAgX3NwbGF5Q291bnQrKzsKICAgIHJldHVybiBjb21wOwogIH0KCiAgLy8gRW11bGF0ZXMgc3BsYXlpbmcgd2l0aCBhIGtleSB0aGF0IGlzIHNtYWxsZXIgdGhhbiBhbnkgaW4gdGhlIHN1YnRyZWUKICAvLyBhbmNob3JlZCBhdCBbbm9kZV0uCiAgLy8gYW5kIHRoYXQgbm9kZSBpcyByZXR1cm5lZC4gSXQgc2hvdWxkIHJlcGxhY2UgdGhlIHJlZmVyZW5jZSB0byBbbm9kZV0KICAvLyBpbiBhbnkgcGFyZW50IHRyZWUgb3Igcm9vdCBwb2ludGVyLgogIGV4dGVybmFsIE5vZGUgX3NwbGF5TWluKE5vZGUgbm9kZSk7CgogIC8vIEVtdWxhdGVzIHNwbGF5aW5nIHdpdGggYSBrZXkgdGhhdCBpcyBncmVhdGVyIHRoYW4gYW55IGluIHRoZSBzdWJ0cmVlCiAgLy8gYW5jaG9yZWQgYXQgW25vZGVdLgogIC8vIEFmdGVyIHRoaXMsIHRoZSBsYXJnZXN0IGVsZW1lbnQgaW4gdGhlIHRyZWUgaXMgdGhlIHJvb3Qgb2YgdGhlIHN1YnRyZWUsCiAgLy8gYW5kIHRoYXQgbm9kZSBpcyByZXR1cm5lZC4gSXQgc2hvdWxkIHJlcGxhY2UgdGhlIHJlZmVyZW5jZSB0byBbbm9kZV0KICAvLyBpbiBhbnkgcGFyZW50IHRyZWUgb3Igcm9vdCBwb2ludGVyLgogIGV4dGVybmFsIE5vZGUgX3NwbGF5TWF4KE5vZGUgbm9kZSk7CgogIE5vZGUgX3JlbW92ZShLIGtleSkgewogICAgaWYgKF9yb290ID09IG51bGwpIHJldHVybiBudWxsOwogICAgaW50IGNvbXAgPSBfc3BsYXkoa2V5KTsKICAgIGlmIChjb21wICE9IDApIHJldHVybiBudWxsOwogICAgTm9kZSByZXN1bHQgPSBfcm9vdDsKICAgIF9jb3VudC0tOwogICAgLy8gYXNzZXJ0KF9jb3VudCA+PSAwKTsKICAgIGlmIChfcm9vdC5sZWZ0ID09IG51bGwpIHsKICAgICAgX3Jvb3QgPSBfcm9vdC5yaWdodDsKICAgIH0gZWxzZSB7CiAgICAgIE5vZGUgcmlnaHQgPSBfcm9vdC5yaWdodDsKICAgICAgLy8gU3BsYXkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG5ldyByb290IGhhcyBhbiBlbXB0eSByaWdodCBjaGlsZC4KICAgICAgX3Jvb3QgPSBfc3BsYXlNYXgoX3Jvb3QubGVmdCk7CiAgICAgIC8vIEluc2VydCB0aGUgb3JpZ2luYWwgcmlnaHQgY2hpbGQgYXMgdGhlIHJpZ2h0IGNoaWxkIG9mIHRoZSBuZXcKICAgICAgLy8gcm9vdC4KICAgICAgX3Jvb3QucmlnaHQgPSByaWdodDsKICAgIH0KICAgIF9tb2RpZmljYXRpb25Db3VudCsrOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBBZGRzIGEgbmV3IHJvb3Qgbm9kZSB3aXRoIHRoZSBnaXZlbiBba2V5XSBvciBbdmFsdWVdLgogIC8vLwogIC8vLyBUaGUgW2NvbXBdIHZhbHVlIGlzIHRoZSByZXN1bHQgb2YgY29tcGFyaW5nIHRoZSBleGlzdGluZyByb290J3Mga2V5CiAgLy8vIHdpdGgga2V5LgogIHZvaWQgX2FkZE5ld1Jvb3QoTm9kZSBub2RlLCBpbnQgY29tcCkgewogICAgX2NvdW50Kys7CiAgICBfbW9kaWZpY2F0aW9uQ291bnQrKzsKICAgIGlmIChfcm9vdCA9PSBudWxsKSB7CiAgICAgIF9yb290ID0gbm9kZTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gYXNzZXJ0KF9jb3VudCA+PSAwKTsKICAgIGlmIChjb21wIDwgMCkgewogICAgICBub2RlLmxlZnQgPSBfcm9vdDsKICAgICAgbm9kZS5yaWdodCA9IF9yb290LnJpZ2h0OwogICAgICBfcm9vdC5yaWdodCA9IG51bGw7CiAgICB9IGVsc2UgewogICAgICBub2RlLnJpZ2h0ID0gX3Jvb3Q7CiAgICAgIG5vZGUubGVmdCA9IF9yb290LmxlZnQ7CiAgICAgIF9yb290LmxlZnQgPSBudWxsOwogICAgfQogICAgX3Jvb3QgPSBub2RlOwogIH0KCiAgTm9kZSBnZXQgX2ZpcnN0IHsKICAgIGlmIChfcm9vdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIF9yb290ID0gX3NwbGF5TWluKF9yb290KTsKICAgIHJldHVybiBfcm9vdDsKICB9CgogIE5vZGUgZ2V0IF9sYXN0IHsKICAgIGlmIChfcm9vdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIF9yb290ID0gX3NwbGF5TWF4KF9yb290KTsKICAgIHJldHVybiBfcm9vdDsKICB9CgogIHZvaWQgX2NsZWFyKCkgewogICAgX3Jvb3QgPSBudWxsOwogICAgX2NvdW50ID0gMDsKICAgIF9tb2RpZmljYXRpb25Db3VudCsrOwogIH0KfQoKY2xhc3MgX1R5cGVUZXN0PFQ+IHsKICBib29sIHRlc3QodikgPT4gdiBpcyBUOwp9CgppbnQgX2R5bmFtaWNDb21wYXJlKGR5bmFtaWMgYSwgZHluYW1pYyBiKSA9PiBDb21wYXJhYmxlLmNvbXBhcmUoYSwgYik7CgpDb21wYXJhdG9yPEs+IF9kZWZhdWx0Q29tcGFyZTxLPigpIHsKICAvLyBJZiBLIDw6IENvbXBhcmFibGUsIHRoZW4gd2UgY2FuIGp1c3QgdXNlIENvbXBhcmFibGUuY29tcGFyZQogIC8vIHdpdGggbm8gY2FzdHMuCiAgT2JqZWN0IGNvbXBhcmUgPSBDb21wYXJhYmxlLmNvbXBhcmU7CiAgaWYgKGNvbXBhcmUgaXMgQ29tcGFyYXRvcjxLPikgewogICAgcmV0dXJuIGNvbXBhcmU7CiAgfQogIC8vIE90aGVyd2lzZSB3cmFwIGFuZCBjYXN0IHRoZSBhcmd1bWVudHMgb24gZWFjaCBjYWxsLgogIHJldHVybiBfZHluYW1pY0NvbXBhcmU7Cn0KCi8vLyBBIFtNYXBdIG9mIG9iamVjdHMgdGhhdCBjYW4gYmUgb3JkZXJlZCByZWxhdGl2ZSB0byBlYWNoIG90aGVyLgovLy8KLy8vIFRoZSBtYXAgaXMgYmFzZWQgb24gYSBzZWxmLWJhbGFuY2luZyBiaW5hcnkgdHJlZS4gSXQgYWxsb3dzIG1vc3Qgb3BlcmF0aW9ucwovLy8gaW4gYW1vcnRpemVkIGxvZ2FyaXRobWljIHRpbWUuCi8vLwovLy8gS2V5cyBvZiB0aGUgbWFwIGFyZSBjb21wYXJlZCB1c2luZyB0aGUgYGNvbXBhcmVgIGZ1bmN0aW9uIHBhc3NlZCBpbgovLy8gdGhlIGNvbnN0cnVjdG9yLCBib3RoIGZvciBvcmRlcmluZyBhbmQgZm9yIGVxdWFsaXR5LgovLy8gSWYgdGhlIG1hcCBjb250YWlucyBvbmx5IHRoZSBrZXkgYGFgLCB0aGVuIGBtYXAuY29udGFpbnNLZXkoYilgCi8vLyB3aWxsIHJldHVybiBgdHJ1ZWAgaWYgYW5kIG9ubHkgaWYgYGNvbXBhcmUoYSwgYikgPT0gMGAsCi8vLyBhbmQgdGhlIHZhbHVlIG9mIGBhID09IGJgIGlzIG5vdCBldmVuIGNoZWNrZWQuCi8vLyBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBpcyBvbWl0dGVkLCB0aGUgb2JqZWN0cyBhcmUgYXNzdW1lZCB0byBiZQovLy8gW0NvbXBhcmFibGVdLCBhbmQgYXJlIGNvbXBhcmVkIHVzaW5nIHRoZWlyIFtDb21wYXJhYmxlLmNvbXBhcmVUb10gbWV0aG9kLgovLy8gTm9uLWNvbXBhcmFibGUgb2JqZWN0cyAoaW5jbHVkaW5nIGBudWxsYCkgd2lsbCBub3Qgd29yayBhcyBrZXlzCi8vLyBpbiB0aGF0IGNhc2UuCi8vLwovLy8gVG8gYWxsb3cgY2FsbGluZyBbb3BlcmF0b3IgW11dLCBbcmVtb3ZlXSBvciBbY29udGFpbnNLZXldIHdpdGggb2JqZWN0cwovLy8gdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgYGNvbXBhcmVgIGZ1bmN0aW9uLCBhbiBleHRyYSBgaXNWYWxpZEtleWAKLy8vIHByZWRpY2F0ZSBmdW5jdGlvbiBjYW4gYmUgc3VwcGxpZWQuIFRoaXMgZnVuY3Rpb24gaXMgdGVzdGVkIGJlZm9yZQovLy8gdXNpbmcgdGhlIGBjb21wYXJlYCBmdW5jdGlvbiBvbiBhbiBhcmd1bWVudCB2YWx1ZSB0aGF0IG1heSBub3QgYmUgYSBbS10KLy8vIHZhbHVlLiBJZiBvbWl0dGVkLCB0aGUgYGlzVmFsaWRLZXlgIGZ1bmN0aW9uIGRlZmF1bHRzIHRvIHRlc3RpbmcgaWYgdGhlCi8vLyB2YWx1ZSBpcyBhIFtLXS4KY2xhc3MgU3BsYXlUcmVlTWFwPEssIFY+IGV4dGVuZHMgX1NwbGF5VHJlZTxLLCBfU3BsYXlUcmVlTWFwTm9kZTxLLCBWPj4KICAgIHdpdGggTWFwTWl4aW48SywgVj4gewogIF9TcGxheVRyZWVNYXBOb2RlPEssIFY+IF9yb290OwogIGZpbmFsIF9TcGxheVRyZWVNYXBOb2RlPEssIFY+IF9kdW1teSA9IF9TcGxheVRyZWVNYXBOb2RlPEssIFY+KG51bGwsIG51bGwpOwoKICBDb21wYXJhdG9yPEs+IF9jb21wYXJhdG9yOwogIF9QcmVkaWNhdGUgX3ZhbGlkS2V5OwoKICBTcGxheVRyZWVNYXAoW2ludCBjb21wYXJlKEsga2V5MSwgSyBrZXkyKSwgYm9vbCBpc1ZhbGlkS2V5KHBvdGVudGlhbEtleSldKQogICAgICA6IF9jb21wYXJhdG9yID0gY29tcGFyZSA/PyBfZGVmYXVsdENvbXBhcmU8Sz4oKSwKICAgICAgICBfdmFsaWRLZXkgPSBpc1ZhbGlkS2V5ID8/ICgodikgPT4gdiBpcyBLKTsKCiAgLy8vIENyZWF0ZXMgYSBbU3BsYXlUcmVlTWFwXSB0aGF0IGNvbnRhaW5zIGFsbCBrZXkvdmFsdWUgcGFpcnMgb2YgW290aGVyXS4KICAvLy8KICAvLy8gVGhlIGtleXMgbXVzdCBhbGwgYmUgaW5zdGFuY2VzIG9mIFtLXSBhbmQgdGhlIHZhbHVlcyBvZiBbVl0uCiAgLy8vIFRoZSBbb3RoZXJdIG1hcCBpdHNlbGYgY2FuIGhhdmUgYW55IHR5cGUuCiAgZmFjdG9yeSBTcGxheVRyZWVNYXAuZnJvbShNYXAgb3RoZXIsCiAgICAgIFtpbnQgY29tcGFyZShLIGtleTEsIEsga2V5MiksIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpXSkgewogICAgU3BsYXlUcmVlTWFwPEssIFY+IHJlc3VsdCA9IFNwbGF5VHJlZU1hcDxLLCBWPihjb21wYXJlLCBpc1ZhbGlkS2V5KTsKICAgIG90aGVyLmZvckVhY2goKGssIHYpIHsKICAgICAgcmVzdWx0W2tdID0gdjsKICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBDcmVhdGVzIGEgW1NwbGF5VHJlZU1hcF0gdGhhdCBjb250YWlucyBhbGwga2V5L3ZhbHVlIHBhaXJzIG9mIFtvdGhlcl0uCiAgZmFjdG9yeSBTcGxheVRyZWVNYXAub2YoTWFwPEssIFY+IG90aGVyLAogICAgICAgICAgW2ludCBjb21wYXJlKEsga2V5MSwgSyBrZXkyKSwgYm9vbCBpc1ZhbGlkS2V5KHBvdGVudGlhbEtleSldKSA9PgogICAgICBTcGxheVRyZWVNYXA8SywgVj4oY29tcGFyZSwgaXNWYWxpZEtleSkuLmFkZEFsbChvdGhlcik7CgogIC8vLyBDcmVhdGVzIGEgW1NwbGF5VHJlZU1hcF0gd2hlcmUgdGhlIGtleXMgYW5kIHZhbHVlcyBhcmUgY29tcHV0ZWQgZnJvbSB0aGUKICAvLy8gW2l0ZXJhYmxlXS4KICAvLy8KICAvLy8gRm9yIGVhY2ggZWxlbWVudCBvZiB0aGUgW2l0ZXJhYmxlXSB0aGlzIGNvbnN0cnVjdG9yIGNvbXB1dGVzIGEga2V5L3ZhbHVlCiAgLy8vIHBhaXIsIGJ5IGFwcGx5aW5nIFtrZXldIGFuZCBbdmFsdWVdIHJlc3BlY3RpdmVseS4KICAvLy8KICAvLy8gVGhlIGtleXMgb2YgdGhlIGtleS92YWx1ZSBwYWlycyBkbyBub3QgbmVlZCB0byBiZSB1bmlxdWUuIFRoZSBsYXN0CiAgLy8vIG9jY3VycmVuY2Ugb2YgYSBrZXkgd2lsbCBzaW1wbHkgb3ZlcndyaXRlIGFueSBwcmV2aW91cyB2YWx1ZS4KICAvLy8KICAvLy8gSWYgbm8gZnVuY3Rpb25zIGFyZSBzcGVjaWZpZWQgZm9yIFtrZXldIGFuZCBbdmFsdWVdIHRoZSBkZWZhdWx0IGlzIHRvCiAgLy8vIHVzZSB0aGUgaXRlcmFibGUgdmFsdWUgaXRzZWxmLgogIGZhY3RvcnkgU3BsYXlUcmVlTWFwLmZyb21JdGVyYWJsZShJdGVyYWJsZSBpdGVyYWJsZSwKICAgICAge0sga2V5KGVsZW1lbnQpLAogICAgICBWIHZhbHVlKGVsZW1lbnQpLAogICAgICBpbnQgY29tcGFyZShLIGtleTEsIEsga2V5MiksCiAgICAgIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpfSkgewogICAgU3BsYXlUcmVlTWFwPEssIFY+IG1hcCA9IFNwbGF5VHJlZU1hcDxLLCBWPihjb21wYXJlLCBpc1ZhbGlkS2V5KTsKICAgIE1hcEJhc2UuX2ZpbGxNYXBXaXRoTWFwcGVkSXRlcmFibGUobWFwLCBpdGVyYWJsZSwga2V5LCB2YWx1ZSk7CiAgICByZXR1cm4gbWFwOwogIH0KCiAgLy8vIENyZWF0ZXMgYSBbU3BsYXlUcmVlTWFwXSBhc3NvY2lhdGluZyB0aGUgZ2l2ZW4gW2tleXNdIHRvIFt2YWx1ZXNdLgogIC8vLwogIC8vLyBUaGlzIGNvbnN0cnVjdG9yIGl0ZXJhdGVzIG92ZXIgW2tleXNdIGFuZCBbdmFsdWVzXSBhbmQgbWFwcyBlYWNoIGVsZW1lbnQKICAvLy8gb2YgW2tleXNdIHRvIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgW3ZhbHVlc10uCiAgLy8vCiAgLy8vIElmIFtrZXlzXSBjb250YWlucyB0aGUgc2FtZSBvYmplY3QgbXVsdGlwbGUgdGltZXMsIHRoZSBsYXN0IG9jY3VycmVuY2UKICAvLy8gb3ZlcndyaXRlcyB0aGUgcHJldmlvdXMgdmFsdWUuCiAgLy8vCiAgLy8vIEl0IGlzIGFuIGVycm9yIGlmIHRoZSB0d28gW0l0ZXJhYmxlXXMgZG9uJ3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGguCiAgZmFjdG9yeSBTcGxheVRyZWVNYXAuZnJvbUl0ZXJhYmxlcyhJdGVyYWJsZTxLPiBrZXlzLCBJdGVyYWJsZTxWPiB2YWx1ZXMsCiAgICAgIFtpbnQgY29tcGFyZShLIGtleTEsIEsga2V5MiksIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpXSkgewogICAgU3BsYXlUcmVlTWFwPEssIFY+IG1hcCA9IFNwbGF5VHJlZU1hcDxLLCBWPihjb21wYXJlLCBpc1ZhbGlkS2V5KTsKICAgIE1hcEJhc2UuX2ZpbGxNYXBXaXRoSXRlcmFibGVzKG1hcCwga2V5cywgdmFsdWVzKTsKICAgIHJldHVybiBtYXA7CiAgfQoKICBpbnQgX2NvbXBhcmUoSyBrZXkxLCBLIGtleTIpID0+IF9jb21wYXJhdG9yKGtleTEsIGtleTIpOwoKICBTcGxheVRyZWVNYXAuX2ludGVybmFsKCk7CgogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgewogICAgaWYgKCFfdmFsaWRLZXkoa2V5KSkgcmV0dXJuIG51bGw7CiAgICBpZiAoX3Jvb3QgIT0gbnVsbCkgewogICAgICBpbnQgY29tcCA9IF9zcGxheShrZXkpOwogICAgICBpZiAoY29tcCA9PSAwKSB7CiAgICAgICAgcmV0dXJuIF9yb290LnZhbHVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIFYgcmVtb3ZlKE9iamVjdCBrZXkpIHsKICAgIGlmICghX3ZhbGlkS2V5KGtleSkpIHJldHVybiBudWxsOwogICAgX1NwbGF5VHJlZU1hcE5vZGU8SywgVj4gbWFwUm9vdCA9IF9yZW1vdmUoa2V5KTsKICAgIGlmIChtYXBSb290ICE9IG51bGwpIHJldHVybiBtYXBSb290LnZhbHVlOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShLIGtleSwgViB2YWx1ZSkgewogICAgaWYgKGtleSA9PSBudWxsKSB0aHJvdyBBcmd1bWVudEVycm9yKGtleSk7CiAgICAvLyBTcGxheSBvbiB0aGUga2V5IHRvIG1vdmUgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggZm9yCiAgICAvLyB0aGUga2V5IHRvIHRoZSByb290IG9mIHRoZSB0cmVlLgogICAgaW50IGNvbXAgPSBfc3BsYXkoa2V5KTsKICAgIGlmIChjb21wID09IDApIHsKICAgICAgX3Jvb3QudmFsdWUgPSB2YWx1ZTsKICAgICAgcmV0dXJuOwogICAgfQogICAgX2FkZE5ld1Jvb3QoX1NwbGF5VHJlZU1hcE5vZGUoa2V5LCB2YWx1ZSksIGNvbXApOwogIH0KCiAgViBwdXRJZkFic2VudChLIGtleSwgViBpZkFic2VudCgpKSB7CiAgICBpZiAoa2V5ID09IG51bGwpIHRocm93IEFyZ3VtZW50RXJyb3Ioa2V5KTsKICAgIGludCBjb21wID0gX3NwbGF5KGtleSk7CiAgICBpZiAoY29tcCA9PSAwKSB7CiAgICAgIHJldHVybiBfcm9vdC52YWx1ZTsKICAgIH0KICAgIGludCBtb2RpZmljYXRpb25Db3VudCA9IF9tb2RpZmljYXRpb25Db3VudDsKICAgIGludCBzcGxheUNvdW50ID0gX3NwbGF5Q291bnQ7CiAgICBWIHZhbHVlID0gaWZBYnNlbnQoKTsKICAgIGlmIChtb2RpZmljYXRpb25Db3VudCAhPSBfbW9kaWZpY2F0aW9uQ291bnQpIHsKICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgfQogICAgaWYgKHNwbGF5Q291bnQgIT0gX3NwbGF5Q291bnQpIHsKICAgICAgY29tcCA9IF9zcGxheShrZXkpOwogICAgICAvLyBLZXkgaXMgc3RpbGwgbm90IHRoZXJlLCBvdGhlcndpc2UgX21vZGlmaWNhdGlvbkNvdW50IHdvdWxkIGJlIGNoYW5nZWQuCiAgICAgIGFzc2VydChjb21wICE9IDApOwogICAgfQogICAgX2FkZE5ld1Jvb3QoX1NwbGF5VHJlZU1hcE5vZGUoa2V5LCB2YWx1ZSksIGNvbXApOwogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgdm9pZCBhZGRBbGwoTWFwPEssIFY+IG90aGVyKSB7CiAgICBvdGhlci5mb3JFYWNoKChLIGtleSwgViB2YWx1ZSkgewogICAgICB0aGlzW2tleV0gPSB2YWx1ZTsKICAgIH0pOwogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSB7CiAgICByZXR1cm4gKF9yb290ID09IG51bGwpOwogIH0KCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiAhaXNFbXB0eTsKCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihLIGtleSwgViB2YWx1ZSkpIHsKICAgIEl0ZXJhdG9yPF9TcGxheVRyZWVOb2RlPEs+PiBub2RlcyA9IF9TcGxheVRyZWVOb2RlSXRlcmF0b3I8Sz4odGhpcyk7CiAgICB3aGlsZSAobm9kZXMubW92ZU5leHQoKSkgewogICAgICBfU3BsYXlUcmVlTWFwTm9kZTxLLCBWPiBub2RlID0gbm9kZXMuY3VycmVudDsKICAgICAgZihub2RlLmtleSwgbm9kZS52YWx1ZSk7CiAgICB9CiAgfQoKICBpbnQgZ2V0IGxlbmd0aCB7CiAgICByZXR1cm4gX2NvdW50OwogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIF9jbGVhcigpOwogIH0KCiAgYm9vbCBjb250YWluc0tleShPYmplY3Qga2V5KSB7CiAgICByZXR1cm4gX3ZhbGlkS2V5KGtleSkgJiYgX3NwbGF5KGtleSkgPT0gMDsKICB9CgogIGJvb2wgY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpIHsKICAgIGludCBpbml0aWFsU3BsYXlDb3VudCA9IF9zcGxheUNvdW50OwogICAgYm9vbCB2aXNpdChfU3BsYXlUcmVlTWFwTm9kZSBub2RlKSB7CiAgICAgIHdoaWxlIChub2RlICE9IG51bGwpIHsKICAgICAgICBpZiAobm9kZS52YWx1ZSA9PSB2YWx1ZSkgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKGluaXRpYWxTcGxheUNvdW50ICE9IF9zcGxheUNvdW50KSB7CiAgICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgICAgfQogICAgICAgIGlmIChub2RlLnJpZ2h0ICE9IG51bGwgJiYgdmlzaXQobm9kZS5yaWdodCkpIHJldHVybiB0cnVlOwogICAgICAgIG5vZGUgPSBub2RlLmxlZnQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHJldHVybiB2aXNpdChfcm9vdCk7CiAgfQoKICBJdGVyYWJsZTxLPiBnZXQga2V5cyA9PiBfU3BsYXlUcmVlS2V5SXRlcmFibGU8Sz4odGhpcyk7CgogIEl0ZXJhYmxlPFY+IGdldCB2YWx1ZXMgPT4gX1NwbGF5VHJlZVZhbHVlSXRlcmFibGU8SywgVj4odGhpcyk7CgogIC8vLyBHZXQgdGhlIGZpcnN0IGtleSBpbiB0aGUgbWFwLiBSZXR1cm5zIFs6bnVsbDpdIGlmIHRoZSBtYXAgaXMgZW1wdHkuCiAgSyBmaXJzdEtleSgpIHsKICAgIGlmIChfcm9vdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfZmlyc3Qua2V5OwogIH0KCiAgLy8vIEdldCB0aGUgbGFzdCBrZXkgaW4gdGhlIG1hcC4gUmV0dXJucyBbOm51bGw6XSBpZiB0aGUgbWFwIGlzIGVtcHR5LgogIEsgbGFzdEtleSgpIHsKICAgIGlmIChfcm9vdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfbGFzdC5rZXk7CiAgfQoKICAvLy8gR2V0IHRoZSBsYXN0IGtleSBpbiB0aGUgbWFwIHRoYXQgaXMgc3RyaWN0bHkgc21hbGxlciB0aGFuIFtrZXldLiBSZXR1cm5zCiAgLy8vIFs6bnVsbDpdIGlmIG5vIGtleSB3YXMgbm90IGZvdW5kLgogIEsgbGFzdEtleUJlZm9yZShLIGtleSkgewogICAgaWYgKGtleSA9PSBudWxsKSB0aHJvdyBBcmd1bWVudEVycm9yKGtleSk7CiAgICBpZiAoX3Jvb3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpbnQgY29tcCA9IF9zcGxheShrZXkpOwogICAgaWYgKGNvbXAgPCAwKSByZXR1cm4gX3Jvb3Qua2V5OwogICAgX1NwbGF5VHJlZU5vZGU8Sz4gbm9kZSA9IF9yb290LmxlZnQ7CiAgICBpZiAobm9kZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHdoaWxlIChub2RlLnJpZ2h0ICE9IG51bGwpIHsKICAgICAgbm9kZSA9IG5vZGUucmlnaHQ7CiAgICB9CiAgICByZXR1cm4gbm9kZS5rZXk7CiAgfQoKICAvLy8gR2V0IHRoZSBmaXJzdCBrZXkgaW4gdGhlIG1hcCB0aGF0IGlzIHN0cmljdGx5IGxhcmdlciB0aGFuIFtrZXldLiBSZXR1cm5zCiAgLy8vIFs6bnVsbDpdIGlmIG5vIGtleSB3YXMgbm90IGZvdW5kLgogIEsgZmlyc3RLZXlBZnRlcihLIGtleSkgewogICAgaWYgKGtleSA9PSBudWxsKSB0aHJvdyBBcmd1bWVudEVycm9yKGtleSk7CiAgICBpZiAoX3Jvb3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpbnQgY29tcCA9IF9zcGxheShrZXkpOwogICAgaWYgKGNvbXAgPiAwKSByZXR1cm4gX3Jvb3Qua2V5OwogICAgX1NwbGF5VHJlZU5vZGU8Sz4gbm9kZSA9IF9yb290LnJpZ2h0OwogICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICB3aGlsZSAobm9kZS5sZWZ0ICE9IG51bGwpIHsKICAgICAgbm9kZSA9IG5vZGUubGVmdDsKICAgIH0KICAgIHJldHVybiBub2RlLmtleTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9TcGxheVRyZWVJdGVyYXRvcjxLLCBUPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPFQ+IHsKICBmaW5hbCBfU3BsYXlUcmVlPEssIF9TcGxheVRyZWVOb2RlPEs+PiBfdHJlZTsKCiAgLy8vIFdvcmtsaXN0IG9mIG5vZGVzIHRvIHZpc2l0LgogIC8vLwogIC8vLyBUaGVzZSBub2RlcyBoYXZlIGJlZW4gcGFzc2VkIG92ZXIgb24gdGhlIHdheSBkb3duIGluIGEKICAvLy8gZGVwdGgtZmlyc3QgbGVmdC10by1yaWdodCB0cmF2ZXJzYWwuIFZpc2l0aW5nIGVhY2ggbm9kZSwKICAvLy8gYW5kIHRoZWlyIHJpZ2h0IHN1YnRyZWVzIHdpbGwgdmlzaXQgdGhlIHJlbWFpbmRlciBvZgogIC8vLyB0aGUgbm9kZXMgb2YgYSBmdWxsIHRyYXZlcnNhbC4KICAvLy8KICAvLy8gT25seSB2YWxpZCBhcyBsb25nIGFzIHRoZSBvcmlnaW5hbCB0cmVlIGlzbid0IHJlb3JkZXJlZC4KICBmaW5hbCBMaXN0PF9TcGxheVRyZWVOb2RlPEs+PiBfd29ya0xpc3QgPSA8X1NwbGF5VHJlZU5vZGU8Sz4+W107CgogIC8vLyBPcmlnaW5hbCBtb2RpZmljYXRpb24gY291bnRlciBvZiBbX3RyZWVdLgogIC8vLwogIC8vLyBJbmNyZW1lbnRlZCBvbiBbX3RyZWVdIHdoZW4gYSBrZXkgaXMgYWRkZWQgb3IgcmVtb3ZlZC4KICAvLy8gSWYgaXQgY2hhbmdlcywgaXRlcmF0aW9uIGlzIGFib3J0ZWQuCiAgLy8vCiAgLy8vIE5vdCBmaW5hbCBiZWNhdXNlIHNvbWUgaXRlcmF0b3JzIG1heSBtb2RpZnkgdGhlIHRyZWUga25vd2luZ2x5LAogIC8vLyBhbmQgdGhleSB1cGRhdGUgdGhlIG1vZGlmaWNhdGlvbiBjb3VudCBpbiB0aGF0IGNhc2UuCiAgaW50IF9tb2RpZmljYXRpb25Db3VudDsKCiAgLy8vIENvdW50IG9mIHNwbGF5IG9wZXJhdGlvbnMgb24gW190cmVlXSB3aGVuIFtfd29ya0xpc3RdIHdhcyBidWlsdC4KICAvLy8KICAvLy8gSWYgdGhlIHNwbGF5IGNvdW50IG9uIFtfdHJlZV0gaW5jcmVhc2VzLCBbX3dvcmtMaXN0XSBiZWNvbWVzIGludmFsaWQuCiAgaW50IF9zcGxheUNvdW50OwoKICAvLy8gQ3VycmVudCBub2RlLgogIF9TcGxheVRyZWVOb2RlPEs+IF9jdXJyZW50Tm9kZTsKCiAgX1NwbGF5VHJlZUl0ZXJhdG9yKF9TcGxheVRyZWU8SywgX1NwbGF5VHJlZU5vZGU8Sz4+IHRyZWUpCiAgICAgIDogX3RyZWUgPSB0cmVlLAogICAgICAgIF9tb2RpZmljYXRpb25Db3VudCA9IHRyZWUuX21vZGlmaWNhdGlvbkNvdW50LAogICAgICAgIF9zcGxheUNvdW50ID0gdHJlZS5fc3BsYXlDb3VudCB7CiAgICBfZmluZExlZnRNb3N0RGVzY2VuZGVudCh0cmVlLl9yb290KTsKICB9CgogIF9TcGxheVRyZWVJdGVyYXRvci5zdGFydEF0KF9TcGxheVRyZWU8SywgX1NwbGF5VHJlZU5vZGU8Sz4+IHRyZWUsIEsgc3RhcnRLZXkpCiAgICAgIDogX3RyZWUgPSB0cmVlLAogICAgICAgIF9tb2RpZmljYXRpb25Db3VudCA9IHRyZWUuX21vZGlmaWNhdGlvbkNvdW50IHsKICAgIGlmICh0cmVlLl9yb290ID09IG51bGwpIHJldHVybjsKICAgIGludCBjb21wYXJlID0gdHJlZS5fc3BsYXkoc3RhcnRLZXkpOwogICAgX3NwbGF5Q291bnQgPSB0cmVlLl9zcGxheUNvdW50OwogICAgaWYgKGNvbXBhcmUgPCAwKSB7CiAgICAgIC8vIERvbid0IGluY2x1ZGUgdGhlIHJvb3QsIHN0YXJ0IGF0IHRoZSBuZXh0IGVsZW1lbnQgYWZ0ZXIgdGhlIHJvb3QuCiAgICAgIF9maW5kTGVmdE1vc3REZXNjZW5kZW50KHRyZWUuX3Jvb3QucmlnaHQpOwogICAgfSBlbHNlIHsKICAgICAgX3dvcmtMaXN0LmFkZCh0cmVlLl9yb290KTsKICAgIH0KICB9CgogIFQgZ2V0IGN1cnJlbnQgewogICAgaWYgKF9jdXJyZW50Tm9kZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfZ2V0VmFsdWUoX2N1cnJlbnROb2RlKTsKICB9CgogIHZvaWQgX2ZpbmRMZWZ0TW9zdERlc2NlbmRlbnQoX1NwbGF5VHJlZU5vZGU8Sz4gbm9kZSkgewogICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkgewogICAgICBfd29ya0xpc3QuYWRkKG5vZGUpOwogICAgICBub2RlID0gbm9kZS5sZWZ0OwogICAgfQogIH0KCiAgLy8vIENhbGxlZCB3aGVuIHRoZSB0cmVlIHN0cnVjdHVyZSBvZiB0aGUgdHJlZSBoYXMgY2hhbmdlZC4KICAvLy8KICAvLy8gVGhpcyBjYW4gYmUgY2F1c2VkIGJ5IGEgc3BsYXkgb3BlcmF0aW9uLgogIC8vLyBJZiB0aGUga2V5LXNldCBjaGFuZ2VzLCBpdGVyYXRpb24gaXMgYWJvcnRlZCBiZWZvcmUgZ2V0dGluZwogIC8vLyBoZXJlLCBzbyB3ZSBrbm93IHRoYXQgdGhlIGtleXMgYXJlIHRoZSBzYW1lIGFzIGJlZm9yZSwgaXQncwogIC8vLyBvbmx5IHRoZSB0cmVlIHRoYXQgaGFzIGJlZW4gcmVvcmRlcmVkLgogIHZvaWQgX3JlYnVpbGRXb3JrTGlzdChfU3BsYXlUcmVlTm9kZTxLPiBjdXJyZW50Tm9kZSkgewogICAgYXNzZXJ0KF93b3JrTGlzdC5pc05vdEVtcHR5KTsKICAgIF93b3JrTGlzdC5jbGVhcigpOwogICAgaWYgKGN1cnJlbnROb2RlID09IG51bGwpIHsKICAgICAgX2ZpbmRMZWZ0TW9zdERlc2NlbmRlbnQoX3RyZWUuX3Jvb3QpOwogICAgfSBlbHNlIHsKICAgICAgX3RyZWUuX3NwbGF5KGN1cnJlbnROb2RlLmtleSk7CiAgICAgIF9maW5kTGVmdE1vc3REZXNjZW5kZW50KF90cmVlLl9yb290LnJpZ2h0KTsKICAgICAgYXNzZXJ0KF93b3JrTGlzdC5pc05vdEVtcHR5KTsKICAgIH0KICB9CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoX21vZGlmaWNhdGlvbkNvdW50ICE9IF90cmVlLl9tb2RpZmljYXRpb25Db3VudCkgewogICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IoX3RyZWUpOwogICAgfQogICAgLy8gUGlja3MgdGhlIG5leHQgZWxlbWVudCBpbiB0aGUgd29ya2xpc3QgYXMgY3VycmVudC4KICAgIC8vIFVwZGF0ZXMgdGhlIHdvcmtsaXN0IHdpdGggdGhlIGxlZnQtbW9zdCBwYXRoIG9mIHRoZSBjdXJyZW50IG5vZGUncwogICAgLy8gcmlnaHQtaGFuZCBjaGlsZC4KICAgIC8vIElmIHRoZSB3b3JrbGlzdCBpcyBubyBsb25nZXIgdmFsaWQgKGFmdGVyIGEgc3BsYXkpLCBpdCBpcyByZWJ1aWxkCiAgICAvLyBmcm9tIHNjcmF0Y2guCiAgICBpZiAoX3dvcmtMaXN0LmlzRW1wdHkpIHsKICAgICAgX2N1cnJlbnROb2RlID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKF90cmVlLl9zcGxheUNvdW50ICE9IF9zcGxheUNvdW50ICYmIF9jdXJyZW50Tm9kZSAhPSBudWxsKSB7CiAgICAgIF9yZWJ1aWxkV29ya0xpc3QoX2N1cnJlbnROb2RlKTsKICAgIH0KICAgIF9jdXJyZW50Tm9kZSA9IF93b3JrTGlzdC5yZW1vdmVMYXN0KCk7CiAgICBfZmluZExlZnRNb3N0RGVzY2VuZGVudChfY3VycmVudE5vZGUucmlnaHQpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBUIF9nZXRWYWx1ZShfU3BsYXlUcmVlTm9kZTxLPiBub2RlKTsKfQoKY2xhc3MgX1NwbGF5VHJlZUtleUl0ZXJhYmxlPEs+IGV4dGVuZHMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8Sz4gewogIF9TcGxheVRyZWU8SywgX1NwbGF5VHJlZU5vZGU8Sz4+IF90cmVlOwogIF9TcGxheVRyZWVLZXlJdGVyYWJsZSh0aGlzLl90cmVlKTsKICBpbnQgZ2V0IGxlbmd0aCA9PiBfdHJlZS5fY291bnQ7CiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfdHJlZS5fY291bnQgPT0gMDsKICBJdGVyYXRvcjxLPiBnZXQgaXRlcmF0b3IgPT4gX1NwbGF5VHJlZUtleUl0ZXJhdG9yPEs+KF90cmVlKTsKCiAgU2V0PEs+IHRvU2V0KCkgewogICAgU3BsYXlUcmVlU2V0PEs+IHNldCA9IFNwbGF5VHJlZVNldDxLPihfdHJlZS5fY29tcGFyYXRvciwgX3RyZWUuX3ZhbGlkS2V5KTsKICAgIHNldC5fY291bnQgPSBfdHJlZS5fY291bnQ7CiAgICBzZXQuX3Jvb3QgPSBzZXQuX2NvcHlOb2RlKF90cmVlLl9yb290KTsKICAgIHJldHVybiBzZXQ7CiAgfQp9CgpjbGFzcyBfU3BsYXlUcmVlVmFsdWVJdGVyYWJsZTxLLCBWPiBleHRlbmRzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPFY+IHsKICBTcGxheVRyZWVNYXA8SywgVj4gX21hcDsKICBfU3BsYXlUcmVlVmFsdWVJdGVyYWJsZSh0aGlzLl9tYXApOwogIGludCBnZXQgbGVuZ3RoID0+IF9tYXAuX2NvdW50OwogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX21hcC5fY291bnQgPT0gMDsKICBJdGVyYXRvcjxWPiBnZXQgaXRlcmF0b3IgPT4gX1NwbGF5VHJlZVZhbHVlSXRlcmF0b3I8SywgVj4oX21hcCk7Cn0KCmNsYXNzIF9TcGxheVRyZWVLZXlJdGVyYXRvcjxLPiBleHRlbmRzIF9TcGxheVRyZWVJdGVyYXRvcjxLLCBLPiB7CiAgX1NwbGF5VHJlZUtleUl0ZXJhdG9yKF9TcGxheVRyZWU8SywgX1NwbGF5VHJlZU5vZGU8Sz4+IG1hcCkgOiBzdXBlcihtYXApOwogIEsgX2dldFZhbHVlKF9TcGxheVRyZWVOb2RlPEs+IG5vZGUpID0+IG5vZGUua2V5Owp9CgpjbGFzcyBfU3BsYXlUcmVlVmFsdWVJdGVyYXRvcjxLLCBWPiBleHRlbmRzIF9TcGxheVRyZWVJdGVyYXRvcjxLLCBWPiB7CiAgX1NwbGF5VHJlZVZhbHVlSXRlcmF0b3IoU3BsYXlUcmVlTWFwPEssIFY+IG1hcCkgOiBzdXBlcihtYXApOwogIFYgX2dldFZhbHVlKF9TcGxheVRyZWVOb2RlPEs+IG5vZGUpIHsKICAgIF9TcGxheVRyZWVNYXBOb2RlPEssIFY+IG1hcE5vZGUgPSBub2RlOwogICAgcmV0dXJuIG1hcE5vZGUudmFsdWU7CiAgfQp9CgpjbGFzcyBfU3BsYXlUcmVlTm9kZUl0ZXJhdG9yPEs+CiAgICBleHRlbmRzIF9TcGxheVRyZWVJdGVyYXRvcjxLLCBfU3BsYXlUcmVlTm9kZTxLPj4gewogIF9TcGxheVRyZWVOb2RlSXRlcmF0b3IoX1NwbGF5VHJlZTxLLCBfU3BsYXlUcmVlTm9kZTxLPj4gdHJlZSkgOiBzdXBlcih0cmVlKTsKICBfU3BsYXlUcmVlTm9kZUl0ZXJhdG9yLnN0YXJ0QXQoCiAgICAgIF9TcGxheVRyZWU8SywgX1NwbGF5VHJlZU5vZGU8Sz4+IHRyZWUsIEsgc3RhcnRLZXkpCiAgICAgIDogc3VwZXIuc3RhcnRBdCh0cmVlLCBzdGFydEtleSk7CiAgX1NwbGF5VHJlZU5vZGU8Sz4gX2dldFZhbHVlKF9TcGxheVRyZWVOb2RlPEs+IG5vZGUpID0+IG5vZGU7Cn0KCi8vLyBBIFtTZXRdIG9mIG9iamVjdHMgdGhhdCBjYW4gYmUgb3JkZXJlZCByZWxhdGl2ZSB0byBlYWNoIG90aGVyLgovLy8KLy8vIFRoZSBzZXQgaXMgYmFzZWQgb24gYSBzZWxmLWJhbGFuY2luZyBiaW5hcnkgdHJlZS4gSXQgYWxsb3dzIG1vc3Qgb3BlcmF0aW9ucwovLy8gaW4gYW1vcnRpemVkIGxvZ2FyaXRobWljIHRpbWUuCi8vLwovLy8gRWxlbWVudHMgb2YgdGhlIHNldCBhcmUgY29tcGFyZWQgdXNpbmcgdGhlIGBjb21wYXJlYCBmdW5jdGlvbiBwYXNzZWQgaW4KLy8vIHRoZSBjb25zdHJ1Y3RvciwgYm90aCBmb3Igb3JkZXJpbmcgYW5kIGZvciBlcXVhbGl0eS4KLy8vIElmIHRoZSBzZXQgY29udGFpbnMgb25seSBhbiBvYmplY3QgYGFgLCB0aGVuIGBzZXQuY29udGFpbnMoYilgCi8vLyB3aWxsIHJldHVybiBgdHJ1ZWAgaWYgYW5kIG9ubHkgaWYgYGNvbXBhcmUoYSwgYikgPT0gMGAsCi8vLyBhbmQgdGhlIHZhbHVlIG9mIGBhID09IGJgIGlzIG5vdCBldmVuIGNoZWNrZWQuCi8vLyBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBpcyBvbWl0dGVkLCB0aGUgb2JqZWN0cyBhcmUgYXNzdW1lZCB0byBiZQovLy8gW0NvbXBhcmFibGVdLCBhbmQgYXJlIGNvbXBhcmVkIHVzaW5nIHRoZWlyIFtDb21wYXJhYmxlLmNvbXBhcmVUb10gbWV0aG9kLgovLy8gTm9uLWNvbXBhcmFibGUgb2JqZWN0cyAoaW5jbHVkaW5nIGBudWxsYCkgd2lsbCBub3Qgd29yayBhcyBhbiBlbGVtZW50Ci8vLyBpbiB0aGF0IGNhc2UuCmNsYXNzIFNwbGF5VHJlZVNldDxFPiBleHRlbmRzIF9TcGxheVRyZWU8RSwgX1NwbGF5VHJlZU5vZGU8RT4+CiAgICB3aXRoIEl0ZXJhYmxlTWl4aW48RT4sIFNldE1peGluPEU+IHsKICBfU3BsYXlUcmVlTm9kZTxFPiBfcm9vdDsKICBmaW5hbCBfU3BsYXlUcmVlTm9kZTxFPiBfZHVtbXkgPSBfU3BsYXlUcmVlTm9kZTxFPihudWxsKTsKCiAgQ29tcGFyYXRvcjxFPiBfY29tcGFyYXRvcjsKICBfUHJlZGljYXRlIF92YWxpZEtleTsKCiAgLy8vIENyZWF0ZSBhIG5ldyBbU3BsYXlUcmVlU2V0XSB3aXRoIHRoZSBnaXZlbiBjb21wYXJlIGZ1bmN0aW9uLgogIC8vLwogIC8vLyBJZiB0aGUgW2NvbXBhcmVdIGZ1bmN0aW9uIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIFtDb21wYXJhYmxlLmNvbXBhcmVdLAogIC8vLyBhbmQgdGhlIGVsZW1lbnRzIG11c3QgYmUgY29tcGFyYWJsZS4KICAvLy8KICAvLy8gQSBwcm92aWRlZCBgY29tcGFyZWAgZnVuY3Rpb24gbWF5IG5vdCB3b3JrIG9uIGFsbCBvYmplY3RzLiBJdCBtYXkgbm90IGV2ZW4KICAvLy8gd29yayBvbiBhbGwgYEVgIGluc3RhbmNlcy4KICAvLy8KICAvLy8gRm9yIG9wZXJhdGlvbnMgdGhhdCBhZGQgZWxlbWVudHMgdG8gdGhlIHNldCwgdGhlIHVzZXIgaXMgc3VwcG9zZWQgdG8gbm90CiAgLy8vIHBhc3MgaW4gb2JqZWN0cyB0aGF0IGRvZXNuJ3Qgd29yayB3aXRoIHRoZSBjb21wYXJlIGZ1bmN0aW9uLgogIC8vLwogIC8vLyBUaGUgbWV0aG9kcyBbY29udGFpbnNdLCBbcmVtb3ZlXSwgW2xvb2t1cF0sIFtyZW1vdmVBbGxdIG9yIFtyZXRhaW5BbGxdCiAgLy8vIGFyZSB0eXBlZCB0byBhY2NlcHQgYW55IG9iamVjdChzKSwgYW5kIHRoZSBbaXNWYWxpZEtleV0gdGVzdCBjYW4gdXNlZCB0bwogIC8vLyBmaWx0ZXIgdGhvc2Ugb2JqZWN0cyBiZWZvcmUgaGFuZGluZyB0aGVtIHRvIHRoZSBgY29tcGFyZWAgZnVuY3Rpb24uCiAgLy8vCiAgLy8vIElmIFtpc1ZhbGlkS2V5XSBpcyBwcm92aWRlZCwgb25seSB2YWx1ZXMgc2F0aXNmeWluZyBgaXNWYWxpZEtleShvdGhlcilgCiAgLy8vIGFyZSBjb21wYXJlZCB1c2luZyB0aGUgYGNvbXBhcmVgIG1ldGhvZCBpbiB0aGUgbWV0aG9kcyBtZW50aW9uZWQgYWJvdmUuCiAgLy8vIElmIHRoZSBgaXNWYWxpZEtleWAgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSBmb3IgYW4gb2JqZWN0LCBpdCBpcyBhc3N1bWVkIHRvCiAgLy8vIG5vdCBiZSBpbiB0aGUgc2V0LgogIC8vLwogIC8vLyBJZiBvbWl0dGVkLCB0aGUgYGlzVmFsaWRLZXlgIGZ1bmN0aW9uIGRlZmF1bHRzIHRvIGNoZWNraW5nIGFnYWluc3QgdGhlCiAgLy8vIHR5cGUgcGFyYW1ldGVyOiBgb3RoZXIgaXMgRWAuCiAgU3BsYXlUcmVlU2V0KFtpbnQgY29tcGFyZShFIGtleTEsIEUga2V5MiksIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpXSkKICAgICAgOiBfY29tcGFyYXRvciA9IGNvbXBhcmUgPz8gX2RlZmF1bHRDb21wYXJlPEU+KCksCiAgICAgICAgX3ZhbGlkS2V5ID0gaXNWYWxpZEtleSA/PyAoKHYpID0+IHYgaXMgRSk7CgogIC8vLyBDcmVhdGVzIGEgW1NwbGF5VHJlZVNldF0gdGhhdCBjb250YWlucyBhbGwgW2VsZW1lbnRzXS4KICAvLy8KICAvLy8gVGhlIHNldCB3b3JrcyBhcyBpZiBjcmVhdGVkIGJ5IGBuZXcgU3BsYXlUcmVlU2V0PEU+KGNvbXBhcmUsIGlzVmFsaWRLZXkpYC4KICAvLy8KICAvLy8gQWxsIHRoZSBbZWxlbWVudHNdIHNob3VsZCBiZSBpbnN0YW5jZXMgb2YgW0VdIGFuZCB2YWxpZCBhcmd1bWVudHMgdG8KICAvLy8gW2NvbXBhcmVdLgogIC8vLyBUaGUgYGVsZW1lbnRzYCBpdGVyYWJsZSBpdHNlbGYgbWF5IGhhdmUgYW55IGVsZW1lbnQgdHlwZSwgc28gdGhpcwogIC8vLyBjb25zdHJ1Y3RvciBjYW4gYmUgdXNlZCB0byBkb3duLWNhc3QgYSBgU2V0YCwgZm9yIGV4YW1wbGUgYXM6CiAgLy8vIGBgYGRhcnQKICAvLy8gU2V0PFN1cGVyVHlwZT4gc3VwZXJTZXQgPSAuLi47CiAgLy8vIFNldDxTdWJUeXBlPiBzdWJTZXQgPQogIC8vLyAgICAgbmV3IFNwbGF5VHJlZVNldDxTdWJUeXBlPi5mcm9tKHN1cGVyU2V0LndoZXJlVHlwZTxTdWJUeXBlPigpKTsKICAvLy8gYGBgCiAgZmFjdG9yeSBTcGxheVRyZWVTZXQuZnJvbShJdGVyYWJsZSBlbGVtZW50cywKICAgICAgW2ludCBjb21wYXJlKEUga2V5MSwgRSBrZXkyKSwgYm9vbCBpc1ZhbGlkS2V5KHBvdGVudGlhbEtleSldKSB7CiAgICBTcGxheVRyZWVTZXQ8RT4gcmVzdWx0ID0gU3BsYXlUcmVlU2V0PEU+KGNvbXBhcmUsIGlzVmFsaWRLZXkpOwogICAgZm9yIChmaW5hbCBlbGVtZW50IGluIGVsZW1lbnRzKSB7CiAgICAgIEUgZSA9IGVsZW1lbnQ7CiAgICAgIHJlc3VsdC5hZGQoZSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIENyZWF0ZXMgYSBbU3BsYXlUcmVlU2V0XSBmcm9tIFtlbGVtZW50c10uCiAgLy8vCiAgLy8vIFRoZSBzZXQgd29ya3MgYXMgaWYgY3JlYXRlZCBieSBgbmV3IFNwbGF5VHJlZVNldDxFPihjb21wYXJlLCBpc1ZhbGlkS2V5KWAuCiAgLy8vCiAgLy8vIEFsbCB0aGUgW2VsZW1lbnRzXSBzaG91bGQgYmUgdmFsaWQgYXMgYXJndW1lbnRzIHRvIHRoZSBbY29tcGFyZV0gZnVuY3Rpb24uCiAgZmFjdG9yeSBTcGxheVRyZWVTZXQub2YoSXRlcmFibGU8RT4gZWxlbWVudHMsCiAgICAgICAgICBbaW50IGNvbXBhcmUoRSBrZXkxLCBFIGtleTIpLCBib29sIGlzVmFsaWRLZXkocG90ZW50aWFsS2V5KV0pID0+CiAgICAgIFNwbGF5VHJlZVNldChjb21wYXJlLCBpc1ZhbGlkS2V5KS4uYWRkQWxsKGVsZW1lbnRzKTsKCiAgU2V0PFQ+IF9uZXdTZXQ8VD4oKSA9PgogICAgICBTcGxheVRyZWVTZXQ8VD4oKFQgYSwgVCBiKSA9PiBfY29tcGFyYXRvcihhIGFzIEUsIGIgYXMgRSksIF92YWxpZEtleSk7CgogIFNldDxSPiBjYXN0PFI+KCkgPT4gU2V0LmNhc3RGcm9tPEUsIFI+KHRoaXMsIG5ld1NldDogX25ld1NldCk7CiAgaW50IF9jb21wYXJlKEUgZTEsIEUgZTIpID0+IF9jb21wYXJhdG9yKGUxLCBlMik7CgogIC8vIEZyb20gSXRlcmFibGUuCgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PiBfU3BsYXlUcmVlS2V5SXRlcmF0b3I8RT4odGhpcyk7CgogIGludCBnZXQgbGVuZ3RoID0+IF9jb3VudDsKICBib29sIGdldCBpc0VtcHR5ID0+IF9yb290ID09IG51bGw7CiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfcm9vdCAhPSBudWxsOwoKICBFIGdldCBmaXJzdCB7CiAgICBpZiAoX2NvdW50ID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgcmV0dXJuIF9maXJzdC5rZXk7CiAgfQoKICBFIGdldCBsYXN0IHsKICAgIGlmIChfY291bnQgPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICByZXR1cm4gX2xhc3Qua2V5OwogIH0KCiAgRSBnZXQgc2luZ2xlIHsKICAgIGlmIChfY291bnQgPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICBpZiAoX2NvdW50ID4gMSkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vTWFueSgpOwogICAgcmV0dXJuIF9yb290LmtleTsKICB9CgogIC8vIEZyb20gU2V0LgogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpIHsKICAgIHJldHVybiBfdmFsaWRLZXkoZWxlbWVudCkgJiYgX3NwbGF5KGVsZW1lbnQpID09IDA7CiAgfQoKICBib29sIGFkZChFIGVsZW1lbnQpIHsKICAgIGludCBjb21wYXJlID0gX3NwbGF5KGVsZW1lbnQpOwogICAgaWYgKGNvbXBhcmUgPT0gMCkgcmV0dXJuIGZhbHNlOwogICAgX2FkZE5ld1Jvb3QoX1NwbGF5VHJlZU5vZGUoZWxlbWVudCksIGNvbXBhcmUpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBib29sIHJlbW92ZShPYmplY3Qgb2JqZWN0KSB7CiAgICBpZiAoIV92YWxpZEtleShvYmplY3QpKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX3JlbW92ZShvYmplY3QpICE9IG51bGw7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBlbGVtZW50cykgewogICAgZm9yIChFIGVsZW1lbnQgaW4gZWxlbWVudHMpIHsKICAgICAgaW50IGNvbXBhcmUgPSBfc3BsYXkoZWxlbWVudCk7CiAgICAgIGlmIChjb21wYXJlICE9IDApIHsKICAgICAgICBfYWRkTmV3Um9vdChfU3BsYXlUcmVlTm9kZShlbGVtZW50KSwgY29tcGFyZSk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgcmVtb3ZlQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpIHsKICAgIGZvciAoT2JqZWN0IGVsZW1lbnQgaW4gZWxlbWVudHMpIHsKICAgICAgaWYgKF92YWxpZEtleShlbGVtZW50KSkgX3JlbW92ZShlbGVtZW50KTsKICAgIH0KICB9CgogIHZvaWQgcmV0YWluQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpIHsKICAgIC8vIEJ1aWxkIGEgc2V0IHdpdGggdGhlIHNhbWUgc2Vuc2Ugb2YgZXF1YWxpdHkgYXMgdGhpcyBzZXQuCiAgICBTcGxheVRyZWVTZXQ8RT4gcmV0YWluU2V0ID0gU3BsYXlUcmVlU2V0PEU+KF9jb21wYXJhdG9yLCBfdmFsaWRLZXkpOwogICAgaW50IG1vZGlmaWNhdGlvbkNvdW50ID0gX21vZGlmaWNhdGlvbkNvdW50OwogICAgZm9yIChPYmplY3Qgb2JqZWN0IGluIGVsZW1lbnRzKSB7CiAgICAgIGlmIChtb2RpZmljYXRpb25Db3VudCAhPSBfbW9kaWZpY2F0aW9uQ291bnQpIHsKICAgICAgICAvLyBUaGUgaXRlcmF0b3Igc2hvdWxkIG5vdCBoYXZlIHNpZGUgZWZmZWN0cy4KICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgICAgLy8gRXF1aXZhbGVudCB0byB0aGlzLmNvbnRhaW5zKG9iamVjdCkuCiAgICAgIGlmIChfdmFsaWRLZXkob2JqZWN0KSAmJiBfc3BsYXkob2JqZWN0KSA9PSAwKSB7CiAgICAgICAgcmV0YWluU2V0LmFkZChfcm9vdC5rZXkpOwogICAgICB9CiAgICB9CiAgICAvLyBUYWtlIG92ZXIgdGhlIGVsZW1lbnRzIGZyb20gdGhlIHJldGFpbmVkIHNldCwgaWYgaXQgZGlmZmVycy4KICAgIGlmIChyZXRhaW5TZXQuX2NvdW50ICE9IF9jb3VudCkgewogICAgICBfcm9vdCA9IHJldGFpblNldC5fcm9vdDsKICAgICAgX2NvdW50ID0gcmV0YWluU2V0Ll9jb3VudDsKICAgICAgX21vZGlmaWNhdGlvbkNvdW50Kys7CiAgICB9CiAgfQoKICBFIGxvb2t1cChPYmplY3Qgb2JqZWN0KSB7CiAgICBpZiAoIV92YWxpZEtleShvYmplY3QpKSByZXR1cm4gbnVsbDsKICAgIGludCBjb21wID0gX3NwbGF5KG9iamVjdCk7CiAgICBpZiAoY29tcCAhPSAwKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfcm9vdC5rZXk7CiAgfQoKICBTZXQ8RT4gaW50ZXJzZWN0aW9uKFNldDxPYmplY3Q+IG90aGVyKSB7CiAgICBTZXQ8RT4gcmVzdWx0ID0gU3BsYXlUcmVlU2V0PEU+KF9jb21wYXJhdG9yLCBfdmFsaWRLZXkpOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAob3RoZXIuY29udGFpbnMoZWxlbWVudCkpIHJlc3VsdC5hZGQoZWxlbWVudCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU2V0PEU+IGRpZmZlcmVuY2UoU2V0PE9iamVjdD4gb3RoZXIpIHsKICAgIFNldDxFPiByZXN1bHQgPSBTcGxheVRyZWVTZXQ8RT4oX2NvbXBhcmF0b3IsIF92YWxpZEtleSk7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICghb3RoZXIuY29udGFpbnMoZWxlbWVudCkpIHJlc3VsdC5hZGQoZWxlbWVudCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU2V0PEU+IHVuaW9uKFNldDxFPiBvdGhlcikgewogICAgcmV0dXJuIF9jbG9uZSgpLi5hZGRBbGwob3RoZXIpOwogIH0KCiAgU3BsYXlUcmVlU2V0PEU+IF9jbG9uZSgpIHsKICAgIHZhciBzZXQgPSBTcGxheVRyZWVTZXQ8RT4oX2NvbXBhcmF0b3IsIF92YWxpZEtleSk7CiAgICBzZXQuX2NvdW50ID0gX2NvdW50OwogICAgc2V0Ll9yb290ID0gX2NvcHlOb2RlKF9yb290KTsKICAgIHJldHVybiBzZXQ7CiAgfQoKICAvLyBDb3BpZXMgdGhlIHN0cnVjdHVyZSBvZiBhIFNwbGF5VHJlZSBpbnRvIGEgbmV3IHNpbWlsYXIgc3RydWN0dXJlLgogIC8vIFdvcmtzIG9uIF9TcGxheVRyZWVNYXBOb2RlIGFzIHdlbGwsIGJ1dCBvbmx5IGNvcGllcyB0aGUga2V5cywKICBfU3BsYXlUcmVlTm9kZTxFPiBfY29weU5vZGUoX1NwbGF5VHJlZU5vZGU8RT4gbm9kZSkgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX1NwbGF5VHJlZU5vZGU8RT4obm9kZS5rZXkpCiAgICAgIC4ubGVmdCA9IF9jb3B5Tm9kZShub2RlLmxlZnQpCiAgICAgIC4ucmlnaHQgPSBfY29weU5vZGUobm9kZS5yaWdodCk7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgX2NsZWFyKCk7CiAgfQoKICBTZXQ8RT4gdG9TZXQoKSA9PiBfY2xvbmUoKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gSXRlcmFibGVCYXNlLml0ZXJhYmxlVG9GdWxsU3RyaW5nKHRoaXMsICd7JywgJ30nKTsKfQqDQwBOTjwBDwEZATABQiQaDxobARwCASYEMjoLNQIBOQRDH0AqP0Y1EhwBST4TASsSAUAGLx4BPwY7PBcBNyEBRRwBJyABSUZHRUIGSSgWIgEzRkhCGBkaDhMpFikwGBswJB8ZKwoXHhkgHSoxGBokJB4ZLAoWHhghDw8IBhEfICEhFQEZGBMRBAFKGUopJgFKGU1KKSYBGCQcIBkOHB4bDSBIJUcPGwYaEwQBPAZKECoOGhkUDgYcFBkgGg0aHhkGEgQBFCQeEgQBEyQeEgQBEhIQGgQCARUaAgFHASVBFCciFAQ5GgIBQwRQIwRIOUQ8M0ZORBIES0xHTEwUSBohTgEdGAFNNzMBTQZDMCdGSRsVCBMEAU0rSz4BTxIGTzgGSUQGTCU3FxgjKEZDEAQBSQZPOgZNJQZIS0ZGNhAEATsBHAEeJhkeFxwIBhEEARkmNC8RBAEmL0UoHBUbDgY2BAEnLxwVGgYwIhozLwYlGlAZBjYSBAEhJRkIBAEVHAQBIwEpSR80HwYEARMTBAERDgQBIS8EASUpKR0uMDMKQhoIFAYBGQQBOgFBAUoRJBcEAUkQJBYEAU8oGy8kHCQpIyEZBhUEAU8oGy8kHCQqIyAYBhUEAgFBMAEiBj0/OyUGP0MBMAY9KwZGOxoBRwZMEwEUIgE8FjYpKQQBUBY3JCkkF0sxDSEGBAESKyQEATkbGxgGBAE+Bi9CQi05IhcfLA0lMiQGBAEUOjAGOkoZSRUdGxQGRCYGKzERBAEnAgFEKiUiKT8BE08fLBAEAgFJGyYhKEMCAUJMMwIBR0AoLBoEAgEgN08iOSc/AgFDBFAjBEw5QzwzRk5KEj8pGzwBHRgBQwZRKwZRIQZPQwZNT0oGTk5RGQZNJE03MwE9BlEGSxFIRA4lHEkKL0ZDJhUVBhMEATAGUQZRMEs7ARlNAUEzARQBPgEcJSgBED0XBAEPPRYEARE9OhYEAQ8iNwQBGCMkMxEEAR8qJAQBJiIlGjcIBgQBLicwBgQBLkBJMCY1NjEILjYiCAZEJh8hHAYEARwpHyAWBAErPR44BhMEASk9HjkGEwQBHyQEAR03GSIQBAFHQzgjJyQnBAERDgQBHgFKAgEfZGFydDpjb2xsZWN0aW9uL3NwbGF5X3RyZWUuZGFydFNvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vbGliL2NvbGxlY3Rpb25fcGF0Y2guZGFydMAAZmwvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vLyBOb3RlOiB0aGUgVk0gY29uY2F0ZW5hdGVzIGFsbCBwYXRjaCBmaWxlcyBpbnRvIGEgc2luZ2xlIHBhdGNoIGZpbGUuIFRoaXMKLy8vIGZpbGUgaXMgdGhlIGZpcnN0IHBhdGNoIGluICJkYXJ0OmNvbGxlY3Rpb24iIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgaW1wb3J0cwovLy8gdXNlZCBieSBwYXRjaGVzIG9mIHRoYXQgbGlicmFyeS4gV2UgcGxhbiB0byBjaGFuZ2UgdGhpcyB3aGVuIHdlIGhhdmUgYQovLy8gc2hhcmVkIGZyb250IGVuZCBhbmQgc2ltcGx5IHVzZSBwYXJ0cy4KCmltcG9ydCAiZGFydDpfaW50ZXJuYWwiIGFzIGludGVybmFsOwoKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIgc2hvdyBwYXRjaCwgSXRlcmFibGVFbGVtZW50RXJyb3I7CgppbXBvcnQgImRhcnQ6dHlwZWRfZGF0YSIgc2hvdyBVaW50MzJMaXN0OwoKLy8vIFRoZXNlIGFyZSB0aGUgYWRkaXRpb25hbCBwYXJ0cyBvZiB0aGlzIHBhdGNoIGxpYnJhcnk6Ci8vIHBhcnQgImNvbXBhY3RfaGFzaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBIYXNoTWFwPEssIFY+IHsKICBAcGF0Y2gKICBmYWN0b3J5IEhhc2hNYXAoCiAgICAgIHtib29sIGVxdWFscyhLIGtleTEsIEsga2V5MiksCiAgICAgIGludCBoYXNoQ29kZShLIGtleSksCiAgICAgIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpfSkgewogICAgaWYgKGlzVmFsaWRLZXkgPT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gbnVsbCkgewogICAgICAgIGlmIChlcXVhbHMgPT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIG5ldyBfSGFzaE1hcDxLLCBWPigpOwogICAgICAgIH0KICAgICAgICBoYXNoQ29kZSA9IF9kZWZhdWx0SGFzaENvZGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGlkZW50aWNhbChpZGVudGl0eUhhc2hDb2RlLCBoYXNoQ29kZSkgJiYKICAgICAgICAgICAgaWRlbnRpY2FsKGlkZW50aWNhbCwgZXF1YWxzKSkgewogICAgICAgICAgcmV0dXJuIG5ldyBfSWRlbnRpdHlIYXNoTWFwPEssIFY+KCk7CiAgICAgICAgfQogICAgICAgIGVxdWFscyA/Pz0gX2RlZmF1bHRFcXVhbHM7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGhhc2hDb2RlID8/PSBfZGVmYXVsdEhhc2hDb2RlOwogICAgICBlcXVhbHMgPz89IF9kZWZhdWx0RXF1YWxzOwogICAgfQogICAgcmV0dXJuIG5ldyBfQ3VzdG9tSGFzaE1hcDxLLCBWPihlcXVhbHMsIGhhc2hDb2RlLCBpc1ZhbGlkS2V5KTsKICB9CgogIEBwYXRjaAogIGZhY3RvcnkgSGFzaE1hcC5pZGVudGl0eSgpID0+IG5ldyBfSWRlbnRpdHlIYXNoTWFwPEssIFY+KCk7CgogIFNldDxLPiBfbmV3S2V5U2V0KCk7Cn0KCmNvbnN0IGludCBfTU9ESUZJQ0FUSU9OX0NPVU5UX01BU0sgPSAweDNmZmZmZmZmOwoKY2xhc3MgX0hhc2hNYXA8SywgVj4gZXh0ZW5kcyBNYXBCYXNlPEssIFY+IGltcGxlbWVudHMgSGFzaE1hcDxLLCBWPiB7CiAgc3RhdGljIGNvbnN0IGludCBfSU5JVElBTF9DQVBBQ0lUWSA9IDg7CgogIGludCBfZWxlbWVudENvdW50ID0gMDsKICBMaXN0PF9IYXNoTWFwRW50cnk8SywgVj4+IF9idWNrZXRzID0KICAgICAgbmV3IExpc3Q8X0hhc2hNYXBFbnRyeTxLLCBWPj4oX0lOSVRJQUxfQ0FQQUNJVFkpOwogIGludCBfbW9kaWZpY2F0aW9uQ291bnQgPSAwOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfZWxlbWVudENvdW50OwogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2VsZW1lbnRDb3VudCA9PSAwOwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX2VsZW1lbnRDb3VudCAhPSAwOwoKICBJdGVyYWJsZTxLPiBnZXQga2V5cyA9PiBuZXcgX0hhc2hNYXBLZXlJdGVyYWJsZTxLLCBWPih0aGlzKTsKICBJdGVyYWJsZTxWPiBnZXQgdmFsdWVzID0+IG5ldyBfSGFzaE1hcFZhbHVlSXRlcmFibGU8SywgVj4odGhpcyk7CgogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgewogICAgZmluYWwgaGFzaENvZGUgPSBrZXkuaGFzaENvZGU7CiAgICBmaW5hbCBidWNrZXRzID0gX2J1Y2tldHM7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGJ1Y2tldHMubGVuZ3RoIC0gMSk7CiAgICB2YXIgZW50cnkgPSBidWNrZXRzW2luZGV4XTsKICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBlbnRyeS5oYXNoQ29kZSAmJiBlbnRyeS5rZXkgPT0ga2V5KSByZXR1cm4gdHJ1ZTsKICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgYm9vbCBjb250YWluc1ZhbHVlKE9iamVjdCB2YWx1ZSkgewogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgbGVuZ3RoID0gYnVja2V0cy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBlbnRyeSA9IGJ1Y2tldHNbaV07CiAgICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09IHZhbHVlKSByZXR1cm4gdHJ1ZTsKICAgICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgewogICAgZmluYWwgaGFzaENvZGUgPSBrZXkuaGFzaENvZGU7CiAgICBmaW5hbCBidWNrZXRzID0gX2J1Y2tldHM7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGJ1Y2tldHMubGVuZ3RoIC0gMSk7CiAgICB2YXIgZW50cnkgPSBidWNrZXRzW2luZGV4XTsKICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBlbnRyeS5oYXNoQ29kZSAmJiBlbnRyeS5rZXkgPT0ga2V5KSB7CiAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlOwogICAgICB9CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpIHsKICAgIGZpbmFsIGhhc2hDb2RlID0ga2V5Lmhhc2hDb2RlOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgbGVuZ3RoID0gYnVja2V0cy5sZW5ndGg7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgZW50cnkua2V5ID09IGtleSkgewogICAgICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIF9hZGRFbnRyeShidWNrZXRzLCBpbmRleCwgbGVuZ3RoLCBrZXksIHZhbHVlLCBoYXNoQ29kZSk7CiAgfQoKICBWIHB1dElmQWJzZW50KEsga2V5LCBWIGlmQWJzZW50KCkpIHsKICAgIGZpbmFsIGhhc2hDb2RlID0ga2V5Lmhhc2hDb2RlOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgbGVuZ3RoID0gYnVja2V0cy5sZW5ndGg7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgZW50cnkua2V5ID09IGtleSkgewogICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTsKICAgICAgfQogICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7CiAgICB9CiAgICBmaW5hbCBzdGFtcCA9IF9tb2RpZmljYXRpb25Db3VudDsKICAgIGZpbmFsIFYgdmFsdWUgPSBpZkFic2VudCgpOwogICAgaWYgKHN0YW1wID09IF9tb2RpZmljYXRpb25Db3VudCkgewogICAgICBfYWRkRW50cnkoYnVja2V0cywgaW5kZXgsIGxlbmd0aCwga2V5LCB2YWx1ZSwgaGFzaENvZGUpOwogICAgfSBlbHNlIHsKICAgICAgdGhpc1trZXldID0gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICB2b2lkIGFkZEFsbChNYXA8SywgVj4gb3RoZXIpIHsKICAgIG90aGVyLmZvckVhY2goKEsga2V5LCBWIHZhbHVlKSB7CiAgICAgIHRoaXNba2V5XSA9IHZhbHVlOwogICAgfSk7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBhY3Rpb24oSyBrZXksIFYgdmFsdWUpKSB7CiAgICBmaW5hbCBzdGFtcCA9IF9tb2RpZmljYXRpb25Db3VudDsKICAgIGZpbmFsIGJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIGxlbmd0aCA9IGJ1Y2tldHMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB2YXIgZW50cnkgPSBidWNrZXRzW2ldOwogICAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICAgIGFjdGlvbihlbnRyeS5rZXksIGVudHJ5LnZhbHVlKTsKICAgICAgICBpZiAoc3RhbXAgIT0gX21vZGlmaWNhdGlvbkNvdW50KSB7CiAgICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICAgIH0KICAgICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7CiAgICAgIH0KICAgIH0KICB9CgogIFYgcmVtb3ZlKE9iamVjdCBrZXkpIHsKICAgIGZpbmFsIGhhc2hDb2RlID0ga2V5Lmhhc2hDb2RlOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChidWNrZXRzLmxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICBfSGFzaE1hcEVudHJ5PEssIFY+IHByZXZpb3VzID0gbnVsbDsKICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgIGZpbmFsIG5leHQgPSBlbnRyeS5uZXh0OwogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgZW50cnkua2V5ID09IGtleSkgewogICAgICAgIF9yZW1vdmVFbnRyeShlbnRyeSwgcHJldmlvdXMsIGluZGV4KTsKICAgICAgICBfZWxlbWVudENvdW50LS07CiAgICAgICAgX21vZGlmaWNhdGlvbkNvdW50ID0KICAgICAgICAgICAgKF9tb2RpZmljYXRpb25Db3VudCArIDEpICYgX01PRElGSUNBVElPTl9DT1VOVF9NQVNLOwogICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTsKICAgICAgfQogICAgICBwcmV2aW91cyA9IGVudHJ5OwogICAgICBlbnRyeSA9IG5leHQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfYnVja2V0cyA9IG5ldyBMaXN0KF9JTklUSUFMX0NBUEFDSVRZKTsKICAgIGlmIChfZWxlbWVudENvdW50ID4gMCkgewogICAgICBfZWxlbWVudENvdW50ID0gMDsKICAgICAgX21vZGlmaWNhdGlvbkNvdW50ID0gKF9tb2RpZmljYXRpb25Db3VudCArIDEpICYgX01PRElGSUNBVElPTl9DT1VOVF9NQVNLOwogICAgfQogIH0KCiAgdm9pZCBfcmVtb3ZlRW50cnkoX0hhc2hNYXBFbnRyeTxLLCBWPiBlbnRyeSwKICAgICAgX0hhc2hNYXBFbnRyeTxLLCBWPiBwcmV2aW91c0luQnVja2V0LCBpbnQgYnVja2V0SW5kZXgpIHsKICAgIGlmIChwcmV2aW91c0luQnVja2V0ID09IG51bGwpIHsKICAgICAgX2J1Y2tldHNbYnVja2V0SW5kZXhdID0gZW50cnkubmV4dDsKICAgIH0gZWxzZSB7CiAgICAgIHByZXZpb3VzSW5CdWNrZXQubmV4dCA9IGVudHJ5Lm5leHQ7CiAgICB9CiAgfQoKICB2b2lkIF9hZGRFbnRyeShMaXN0PF9IYXNoTWFwRW50cnk8SywgVj4+IGJ1Y2tldHMsIGludCBpbmRleCwgaW50IGxlbmd0aCwKICAgICAgSyBrZXksIFYgdmFsdWUsIGludCBoYXNoQ29kZSkgewogICAgZmluYWwgZW50cnkgPSBuZXcgX0hhc2hNYXBFbnRyeTxLLCBWPihrZXksIHZhbHVlLCBoYXNoQ29kZSwgYnVja2V0c1tpbmRleF0pOwogICAgYnVja2V0c1tpbmRleF0gPSBlbnRyeTsKICAgIGZpbmFsIG5ld0VsZW1lbnRzID0gX2VsZW1lbnRDb3VudCArIDE7CiAgICBfZWxlbWVudENvdW50ID0gbmV3RWxlbWVudHM7CiAgICAvLyBJZiB3ZSBlbmQgdXAgd2l0aCBtb3JlIHRoYW4gNzUlIG5vbi1lbXB0eSBlbnRyaWVzLCB3ZQogICAgLy8gcmVzaXplIHRoZSBiYWNraW5nIHN0b3JlLgogICAgaWYgKChuZXdFbGVtZW50cyA8PCAyKSA+ICgobGVuZ3RoIDw8IDEpICsgbGVuZ3RoKSkgX3Jlc2l6ZSgpOwogICAgX21vZGlmaWNhdGlvbkNvdW50ID0gKF9tb2RpZmljYXRpb25Db3VudCArIDEpICYgX01PRElGSUNBVElPTl9DT1VOVF9NQVNLOwogIH0KCiAgdm9pZCBfcmVzaXplKCkgewogICAgZmluYWwgb2xkQnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgb2xkTGVuZ3RoID0gb2xkQnVja2V0cy5sZW5ndGg7CiAgICBmaW5hbCBuZXdMZW5ndGggPSBvbGRMZW5ndGggPDwgMTsKICAgIGZpbmFsIG5ld0J1Y2tldHMgPSBuZXcgTGlzdDxfSGFzaE1hcEVudHJ5PEssIFY+PihuZXdMZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvbGRMZW5ndGg7IGkrKykgewogICAgICB2YXIgZW50cnkgPSBvbGRCdWNrZXRzW2ldOwogICAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICAgIGZpbmFsIG5leHQgPSBlbnRyeS5uZXh0OwogICAgICAgIGZpbmFsIGhhc2hDb2RlID0gZW50cnkuaGFzaENvZGU7CiAgICAgICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChuZXdMZW5ndGggLSAxKTsKICAgICAgICBlbnRyeS5uZXh0ID0gbmV3QnVja2V0c1tpbmRleF07CiAgICAgICAgbmV3QnVja2V0c1tpbmRleF0gPSBlbnRyeTsKICAgICAgICBlbnRyeSA9IG5leHQ7CiAgICAgIH0KICAgIH0KICAgIF9idWNrZXRzID0gbmV3QnVja2V0czsKICB9CgogIFNldDxLPiBfbmV3S2V5U2V0KCkgPT4gbmV3IF9IYXNoU2V0PEs+KCk7Cn0KCmNsYXNzIF9DdXN0b21IYXNoTWFwPEssIFY+IGV4dGVuZHMgX0hhc2hNYXA8SywgVj4gewogIGZpbmFsIF9FcXVhbGl0eTxLPiBfZXF1YWxzOwogIGZpbmFsIF9IYXNoZXI8Sz4gX2hhc2hDb2RlOwogIGZpbmFsIF9QcmVkaWNhdGUgX3ZhbGlkS2V5OwogIF9DdXN0b21IYXNoTWFwKHRoaXMuX2VxdWFscywgdGhpcy5faGFzaENvZGUsIHZhbGlkS2V5KQogICAgICA6IF92YWxpZEtleSA9ICh2YWxpZEtleSAhPSBudWxsKSA/IHZhbGlkS2V5IDogbmV3IF9UeXBlVGVzdDxLPigpLnRlc3Q7CgogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgewogICAgaWYgKCFfdmFsaWRLZXkoa2V5KSkgcmV0dXJuIGZhbHNlOwogICAgZmluYWwgaGFzaENvZGUgPSBfaGFzaENvZGUoa2V5KTsKICAgIGZpbmFsIGJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIGluZGV4ID0gaGFzaENvZGUgJiAoYnVja2V0cy5sZW5ndGggLSAxKTsKICAgIHZhciBlbnRyeSA9IGJ1Y2tldHNbaW5kZXhdOwogICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgaWYgKGhhc2hDb2RlID09IGVudHJ5Lmhhc2hDb2RlICYmIF9lcXVhbHMoZW50cnkua2V5LCBrZXkpKSByZXR1cm4gdHJ1ZTsKICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgViBvcGVyYXRvciBbXShPYmplY3Qga2V5KSB7CiAgICBpZiAoIV92YWxpZEtleShrZXkpKSByZXR1cm4gbnVsbDsKICAgIGZpbmFsIGhhc2hDb2RlID0gX2hhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBidWNrZXRzID0gX2J1Y2tldHM7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGJ1Y2tldHMubGVuZ3RoIC0gMSk7CiAgICB2YXIgZW50cnkgPSBidWNrZXRzW2luZGV4XTsKICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBlbnRyeS5oYXNoQ29kZSAmJiBfZXF1YWxzKGVudHJ5LmtleSwga2V5KSkgewogICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTsKICAgICAgfQogICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KEsga2V5LCBWIHZhbHVlKSB7CiAgICBmaW5hbCBoYXNoQ29kZSA9IF9oYXNoQ29kZShrZXkpOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgbGVuZ3RoID0gYnVja2V0cy5sZW5ndGg7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgX2VxdWFscyhlbnRyeS5rZXksIGtleSkpIHsKICAgICAgICBlbnRyeS52YWx1ZSA9IHZhbHVlOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7CiAgICB9CiAgICBfYWRkRW50cnkoYnVja2V0cywgaW5kZXgsIGxlbmd0aCwga2V5LCB2YWx1ZSwgaGFzaENvZGUpOwogIH0KCiAgViBwdXRJZkFic2VudChLIGtleSwgViBpZkFic2VudCgpKSB7CiAgICBmaW5hbCBoYXNoQ29kZSA9IF9oYXNoQ29kZShrZXkpOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgbGVuZ3RoID0gYnVja2V0cy5sZW5ndGg7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgX2VxdWFscyhlbnRyeS5rZXksIGtleSkpIHsKICAgICAgICByZXR1cm4gZW50cnkudmFsdWU7CiAgICAgIH0KICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgaW50IHN0YW1wID0gX21vZGlmaWNhdGlvbkNvdW50OwogICAgViB2YWx1ZSA9IGlmQWJzZW50KCk7CiAgICBpZiAoc3RhbXAgPT0gX21vZGlmaWNhdGlvbkNvdW50KSB7CiAgICAgIF9hZGRFbnRyeShidWNrZXRzLCBpbmRleCwgbGVuZ3RoLCBrZXksIHZhbHVlLCBoYXNoQ29kZSk7CiAgICB9IGVsc2UgewogICAgICB0aGlzW2tleV0gPSB2YWx1ZTsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIFYgcmVtb3ZlKE9iamVjdCBrZXkpIHsKICAgIGlmICghX3ZhbGlkS2V5KGtleSkpIHJldHVybiBudWxsOwogICAgZmluYWwgaGFzaENvZGUgPSBfaGFzaENvZGUoa2V5KTsKICAgIGZpbmFsIGJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIGluZGV4ID0gaGFzaENvZGUgJiAoYnVja2V0cy5sZW5ndGggLSAxKTsKICAgIHZhciBlbnRyeSA9IGJ1Y2tldHNbaW5kZXhdOwogICAgX0hhc2hNYXBFbnRyeTxLLCBWPiBwcmV2aW91cyA9IG51bGw7CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBmaW5hbCBuZXh0ID0gZW50cnkubmV4dDsKICAgICAgaWYgKGhhc2hDb2RlID09IGVudHJ5Lmhhc2hDb2RlICYmIF9lcXVhbHMoZW50cnkua2V5LCBrZXkpKSB7CiAgICAgICAgX3JlbW92ZUVudHJ5KGVudHJ5LCBwcmV2aW91cywgaW5kZXgpOwogICAgICAgIF9lbGVtZW50Q291bnQtLTsKICAgICAgICBfbW9kaWZpY2F0aW9uQ291bnQgPQogICAgICAgICAgICAoX21vZGlmaWNhdGlvbkNvdW50ICsgMSkgJiBfTU9ESUZJQ0FUSU9OX0NPVU5UX01BU0s7CiAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlOwogICAgICB9CiAgICAgIHByZXZpb3VzID0gZW50cnk7CiAgICAgIGVudHJ5ID0gbmV4dDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgU2V0PEs+IF9uZXdLZXlTZXQoKSA9PiBuZXcgX0N1c3RvbUhhc2hTZXQ8Sz4oX2VxdWFscywgX2hhc2hDb2RlLCBfdmFsaWRLZXkpOwp9CgpjbGFzcyBfSWRlbnRpdHlIYXNoTWFwPEssIFY+IGV4dGVuZHMgX0hhc2hNYXA8SywgVj4gewogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgewogICAgZmluYWwgaGFzaENvZGUgPSBpZGVudGl0eUhhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBidWNrZXRzID0gX2J1Y2tldHM7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGJ1Y2tldHMubGVuZ3RoIC0gMSk7CiAgICB2YXIgZW50cnkgPSBidWNrZXRzW2luZGV4XTsKICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBlbnRyeS5oYXNoQ29kZSAmJiBpZGVudGljYWwoZW50cnkua2V5LCBrZXkpKSByZXR1cm4gdHJ1ZTsKICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgViBvcGVyYXRvciBbXShPYmplY3Qga2V5KSB7CiAgICBmaW5hbCBoYXNoQ29kZSA9IGlkZW50aXR5SGFzaENvZGUoa2V5KTsKICAgIGZpbmFsIGJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIGluZGV4ID0gaGFzaENvZGUgJiAoYnVja2V0cy5sZW5ndGggLSAxKTsKICAgIHZhciBlbnRyeSA9IGJ1Y2tldHNbaW5kZXhdOwogICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgaWYgKGhhc2hDb2RlID09IGVudHJ5Lmhhc2hDb2RlICYmIGlkZW50aWNhbChlbnRyeS5rZXksIGtleSkpIHsKICAgICAgICByZXR1cm4gZW50cnkudmFsdWU7CiAgICAgIH0KICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShLIGtleSwgViB2YWx1ZSkgewogICAgZmluYWwgaGFzaENvZGUgPSBpZGVudGl0eUhhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBidWNrZXRzID0gX2J1Y2tldHM7CiAgICBmaW5hbCBsZW5ndGggPSBidWNrZXRzLmxlbmd0aDsKICAgIGZpbmFsIGluZGV4ID0gaGFzaENvZGUgJiAobGVuZ3RoIC0gMSk7CiAgICB2YXIgZW50cnkgPSBidWNrZXRzW2luZGV4XTsKICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBlbnRyeS5oYXNoQ29kZSAmJiBpZGVudGljYWwoZW50cnkua2V5LCBrZXkpKSB7CiAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgX2FkZEVudHJ5KGJ1Y2tldHMsIGluZGV4LCBsZW5ndGgsIGtleSwgdmFsdWUsIGhhc2hDb2RlKTsKICB9CgogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgewogICAgZmluYWwgaGFzaENvZGUgPSBpZGVudGl0eUhhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBidWNrZXRzID0gX2J1Y2tldHM7CiAgICBmaW5hbCBsZW5ndGggPSBidWNrZXRzLmxlbmd0aDsKICAgIGZpbmFsIGluZGV4ID0gaGFzaENvZGUgJiAobGVuZ3RoIC0gMSk7CiAgICB2YXIgZW50cnkgPSBidWNrZXRzW2luZGV4XTsKICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBlbnRyeS5oYXNoQ29kZSAmJiBpZGVudGljYWwoZW50cnkua2V5LCBrZXkpKSB7CiAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlOwogICAgICB9CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIGZpbmFsIHN0YW1wID0gX21vZGlmaWNhdGlvbkNvdW50OwogICAgViB2YWx1ZSA9IGlmQWJzZW50KCk7CiAgICBpZiAoc3RhbXAgPT0gX21vZGlmaWNhdGlvbkNvdW50KSB7CiAgICAgIF9hZGRFbnRyeShidWNrZXRzLCBpbmRleCwgbGVuZ3RoLCBrZXksIHZhbHVlLCBoYXNoQ29kZSk7CiAgICB9IGVsc2UgewogICAgICB0aGlzW2tleV0gPSB2YWx1ZTsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIFYgcmVtb3ZlKE9iamVjdCBrZXkpIHsKICAgIGZpbmFsIGhhc2hDb2RlID0gaWRlbnRpdHlIYXNoQ29kZShrZXkpOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChidWNrZXRzLmxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICBfSGFzaE1hcEVudHJ5PEssIFY+IHByZXZpb3VzID0gbnVsbDsKICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgIGZpbmFsIG5leHQgPSBlbnRyeS5uZXh0OwogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgaWRlbnRpY2FsKGVudHJ5LmtleSwga2V5KSkgewogICAgICAgIF9yZW1vdmVFbnRyeShlbnRyeSwgcHJldmlvdXMsIGluZGV4KTsKICAgICAgICBfZWxlbWVudENvdW50LS07CiAgICAgICAgX21vZGlmaWNhdGlvbkNvdW50ID0KICAgICAgICAgICAgKF9tb2RpZmljYXRpb25Db3VudCArIDEpICYgX01PRElGSUNBVElPTl9DT1VOVF9NQVNLOwogICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTsKICAgICAgfQogICAgICBwcmV2aW91cyA9IGVudHJ5OwogICAgICBlbnRyeSA9IG5leHQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIFNldDxLPiBfbmV3S2V5U2V0KCkgPT4gbmV3IF9JZGVudGl0eUhhc2hTZXQ8Sz4oKTsKfQoKY2xhc3MgX0hhc2hNYXBFbnRyeTxLLCBWPiB7CiAgZmluYWwgSyBrZXk7CiAgViB2YWx1ZTsKICBmaW5hbCBpbnQgaGFzaENvZGU7CiAgX0hhc2hNYXBFbnRyeTxLLCBWPiBuZXh0OwogIF9IYXNoTWFwRW50cnkodGhpcy5rZXksIHRoaXMudmFsdWUsIHRoaXMuaGFzaENvZGUsIHRoaXMubmV4dCk7Cn0KCmFic3RyYWN0IGNsYXNzIF9IYXNoTWFwSXRlcmFibGU8SywgViwgRT4KICAgIGV4dGVuZHMgaW50ZXJuYWwuRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4gewogIGZpbmFsIF9IYXNoTWFwPEssIFY+IF9tYXA7CiAgX0hhc2hNYXBJdGVyYWJsZSh0aGlzLl9tYXApOwogIGludCBnZXQgbGVuZ3RoID0+IF9tYXAubGVuZ3RoOwogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX21hcC5pc0VtcHR5OwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX21hcC5pc05vdEVtcHR5Owp9CgpjbGFzcyBfSGFzaE1hcEtleUl0ZXJhYmxlPEssIFY+IGV4dGVuZHMgX0hhc2hNYXBJdGVyYWJsZTxLLCBWLCBLPiB7CiAgX0hhc2hNYXBLZXlJdGVyYWJsZShfSGFzaE1hcDxLLCBWPiBtYXApIDogc3VwZXIobWFwKTsKICBJdGVyYXRvcjxLPiBnZXQgaXRlcmF0b3IgPT4gbmV3IF9IYXNoTWFwS2V5SXRlcmF0b3I8SywgVj4oX21hcCk7CiAgYm9vbCBjb250YWlucyhPYmplY3Qga2V5KSA9PiBfbWFwLmNvbnRhaW5zS2V5KGtleSk7CiAgdm9pZCBmb3JFYWNoKHZvaWQgYWN0aW9uKEsga2V5KSkgewogICAgX21hcC5mb3JFYWNoKChLIGtleSwgXykgewogICAgICBhY3Rpb24oa2V5KTsKICAgIH0pOwogIH0KCiAgU2V0PEs+IHRvU2V0KCkgPT4gX21hcC5fbmV3S2V5U2V0KCkuLmFkZEFsbCh0aGlzKTsKfQoKY2xhc3MgX0hhc2hNYXBWYWx1ZUl0ZXJhYmxlPEssIFY+IGV4dGVuZHMgX0hhc2hNYXBJdGVyYWJsZTxLLCBWLCBWPiB7CiAgX0hhc2hNYXBWYWx1ZUl0ZXJhYmxlKF9IYXNoTWFwPEssIFY+IG1hcCkgOiBzdXBlcihtYXApOwogIEl0ZXJhdG9yPFY+IGdldCBpdGVyYXRvciA9PiBuZXcgX0hhc2hNYXBWYWx1ZUl0ZXJhdG9yPEssIFY+KF9tYXApOwogIGJvb2wgY29udGFpbnMoT2JqZWN0IHZhbHVlKSA9PiBfbWFwLmNvbnRhaW5zVmFsdWUodmFsdWUpOwogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihWIHZhbHVlKSkgewogICAgX21hcC5mb3JFYWNoKChfLCBWIHZhbHVlKSB7CiAgICAgIGFjdGlvbih2YWx1ZSk7CiAgICB9KTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9IYXNoTWFwSXRlcmF0b3I8SywgViwgRT4gaW1wbGVtZW50cyBJdGVyYXRvcjxFPiB7CiAgZmluYWwgX0hhc2hNYXA8SywgVj4gX21hcDsKICBmaW5hbCBpbnQgX3N0YW1wOwoKICBpbnQgX2luZGV4ID0gMDsKICBfSGFzaE1hcEVudHJ5PEssIFY+IF9lbnRyeTsKCiAgX0hhc2hNYXBJdGVyYXRvcih0aGlzLl9tYXApIDogX3N0YW1wID0gX21hcC5fbW9kaWZpY2F0aW9uQ291bnQ7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoX3N0YW1wICE9IF9tYXAuX21vZGlmaWNhdGlvbkNvdW50KSB7CiAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IoX21hcCk7CiAgICB9CiAgICB2YXIgZW50cnkgPSBfZW50cnk7CiAgICBpZiAoZW50cnkgIT0gbnVsbCkgewogICAgICBmaW5hbCBuZXh0ID0gZW50cnkubmV4dDsKICAgICAgaWYgKG5leHQgIT0gbnVsbCkgewogICAgICAgIF9lbnRyeSA9IG5leHQ7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgX2VudHJ5ID0gbnVsbDsKICAgIH0KICAgIGZpbmFsIGJ1Y2tldHMgPSBfbWFwLl9idWNrZXRzOwogICAgZmluYWwgbGVuZ3RoID0gYnVja2V0cy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gX2luZGV4OyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgZW50cnkgPSBidWNrZXRzW2ldOwogICAgICBpZiAoZW50cnkgIT0gbnVsbCkgewogICAgICAgIF9pbmRleCA9IGkgKyAxOwogICAgICAgIF9lbnRyeSA9IGVudHJ5OwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICBfaW5kZXggPSBsZW5ndGg7CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CgpjbGFzcyBfSGFzaE1hcEtleUl0ZXJhdG9yPEssIFY+IGV4dGVuZHMgX0hhc2hNYXBJdGVyYXRvcjxLLCBWLCBLPiB7CiAgX0hhc2hNYXBLZXlJdGVyYXRvcihfSGFzaE1hcDxLLCBWPiBtYXApIDogc3VwZXIobWFwKTsKICBLIGdldCBjdXJyZW50ID0+IF9lbnRyeT8ua2V5Owp9CgpjbGFzcyBfSGFzaE1hcFZhbHVlSXRlcmF0b3I8SywgVj4gZXh0ZW5kcyBfSGFzaE1hcEl0ZXJhdG9yPEssIFYsIFY+IHsKICBfSGFzaE1hcFZhbHVlSXRlcmF0b3IoX0hhc2hNYXA8SywgVj4gbWFwKSA6IHN1cGVyKG1hcCk7CiAgViBnZXQgY3VycmVudCA9PiBfZW50cnk/LnZhbHVlOwp9CgpAcGF0Y2gKY2xhc3MgSGFzaFNldDxFPiB7CiAgQHBhdGNoCiAgZmFjdG9yeSBIYXNoU2V0KAogICAgICB7Ym9vbCBlcXVhbHMoRSBlMSwgRSBlMiksCiAgICAgIGludCBoYXNoQ29kZShFIGUpLAogICAgICBib29sIGlzVmFsaWRLZXkocG90ZW50aWFsS2V5KX0pIHsKICAgIGlmIChpc1ZhbGlkS2V5ID09IG51bGwpIHsKICAgICAgaWYgKGhhc2hDb2RlID09IG51bGwpIHsKICAgICAgICBpZiAoZXF1YWxzID09IG51bGwpIHsKICAgICAgICAgIHJldHVybiBuZXcgX0hhc2hTZXQ8RT4oKTsKICAgICAgICB9CiAgICAgICAgaGFzaENvZGUgPSBfZGVmYXVsdEhhc2hDb2RlOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChpZGVudGljYWwoaWRlbnRpdHlIYXNoQ29kZSwgaGFzaENvZGUpICYmCiAgICAgICAgICAgIGlkZW50aWNhbChpZGVudGljYWwsIGVxdWFscykpIHsKICAgICAgICAgIHJldHVybiBuZXcgX0lkZW50aXR5SGFzaFNldDxFPigpOwogICAgICAgIH0KICAgICAgICBlcXVhbHMgPz89IF9kZWZhdWx0RXF1YWxzOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBoYXNoQ29kZSA/Pz0gX2RlZmF1bHRIYXNoQ29kZTsKICAgICAgZXF1YWxzID8/PSBfZGVmYXVsdEVxdWFsczsKICAgIH0KICAgIHJldHVybiBuZXcgX0N1c3RvbUhhc2hTZXQ8RT4oZXF1YWxzLCBoYXNoQ29kZSwgaXNWYWxpZEtleSk7CiAgfQoKICBAcGF0Y2gKICBmYWN0b3J5IEhhc2hTZXQuaWRlbnRpdHkoKSA9PiBuZXcgX0lkZW50aXR5SGFzaFNldDxFPigpOwp9CgpjbGFzcyBfSGFzaFNldDxFPiBleHRlbmRzIF9TZXRCYXNlPEU+IGltcGxlbWVudHMgSGFzaFNldDxFPiB7CiAgc3RhdGljIGNvbnN0IGludCBfSU5JVElBTF9DQVBBQ0lUWSA9IDg7CgogIExpc3Q8X0hhc2hTZXRFbnRyeTxFPj4gX2J1Y2tldHMgPQogICAgICBuZXcgTGlzdDxfSGFzaFNldEVudHJ5PEU+PihfSU5JVElBTF9DQVBBQ0lUWSk7CiAgaW50IF9lbGVtZW50Q291bnQgPSAwOwogIGludCBfbW9kaWZpY2F0aW9uQ291bnQgPSAwOwoKICBib29sIF9lcXVhbHMoZTEsIGUyKSA9PiBlMSA9PSBlMjsKICBpbnQgX2hhc2hDb2RlKGUpID0+IGUuaGFzaENvZGU7CgogIHN0YXRpYyBTZXQ8Uj4gX25ld0VtcHR5PFI+KCkgPT4gbmV3IF9IYXNoU2V0PFI+KCk7CgogIC8vIEl0ZXJhYmxlLgoKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgPT4gbmV3IF9IYXNoU2V0SXRlcmF0b3I8RT4odGhpcyk7CgogIGludCBnZXQgbGVuZ3RoID0+IF9lbGVtZW50Q291bnQ7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2VsZW1lbnRDb3VudCA9PSAwOwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9lbGVtZW50Q291bnQgIT0gMDsKCiAgYm9vbCBjb250YWlucyhPYmplY3Qgb2JqZWN0KSB7CiAgICBpbnQgaW5kZXggPSBfaGFzaENvZGUob2JqZWN0KSAmIChfYnVja2V0cy5sZW5ndGggLSAxKTsKICAgIF9IYXNoU2V0RW50cnk8RT4gZW50cnkgPSBfYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoX2VxdWFscyhlbnRyeS5rZXksIG9iamVjdCkpIHJldHVybiB0cnVlOwogICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBFIGxvb2t1cChPYmplY3Qgb2JqZWN0KSB7CiAgICBpbnQgaW5kZXggPSBfaGFzaENvZGUob2JqZWN0KSAmIChfYnVja2V0cy5sZW5ndGggLSAxKTsKICAgIF9IYXNoU2V0RW50cnk8RT4gZW50cnkgPSBfYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICB2YXIga2V5ID0gZW50cnkua2V5OwogICAgICBpZiAoX2VxdWFscyhrZXksIG9iamVjdCkpIHJldHVybiBrZXk7CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgRSBnZXQgZmlyc3QgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfYnVja2V0cy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgZW50cnkgPSBfYnVja2V0c1tpXTsKICAgICAgaWYgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgICByZXR1cm4gZW50cnkua2V5OwogICAgICB9CiAgICB9CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgZ2V0IGxhc3QgewogICAgZm9yIChpbnQgaSA9IF9idWNrZXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIHZhciBlbnRyeSA9IF9idWNrZXRzW2ldOwogICAgICBpZiAoZW50cnkgIT0gbnVsbCkgewogICAgICAgIHZhciBuZXh0RW50cnkgPSBlbnRyeS5uZXh0OwogICAgICAgIHdoaWxlIChuZXh0RW50cnkgIT0gbnVsbCkgewogICAgICAgICAgZW50cnkgPSBuZXh0RW50cnk7CiAgICAgICAgICBuZXh0RW50cnkgPSBuZXh0RW50cnkubmV4dDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGVudHJ5LmtleTsKICAgICAgfQogICAgfQogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICAvLyBTZXQuCgogIGJvb2wgYWRkKEUgZWxlbWVudCkgewogICAgZmluYWwgaGFzaENvZGUgPSBfaGFzaENvZGUoZWxlbWVudCk7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKF9idWNrZXRzLmxlbmd0aCAtIDEpOwogICAgX0hhc2hTZXRFbnRyeTxFPiBlbnRyeSA9IF9idWNrZXRzW2luZGV4XTsKICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgIGlmIChfZXF1YWxzKGVudHJ5LmtleSwgZWxlbWVudCkpIHJldHVybiBmYWxzZTsKICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgX2FkZEVudHJ5KGVsZW1lbnQsIGhhc2hDb2RlLCBpbmRleCk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IG9iamVjdHMpIHsKICAgIGZvciAoRSBvYmplY3QgaW4gb2JqZWN0cykgewogICAgICBhZGQob2JqZWN0KTsKICAgIH0KICB9CgogIGJvb2wgX3JlbW92ZShPYmplY3Qgb2JqZWN0LCBpbnQgaGFzaENvZGUpIHsKICAgIGZpbmFsIGluZGV4ID0gaGFzaENvZGUgJiAoX2J1Y2tldHMubGVuZ3RoIC0gMSk7CiAgICBfSGFzaFNldEVudHJ5PEU+IGVudHJ5ID0gX2J1Y2tldHNbaW5kZXhdOwogICAgX0hhc2hTZXRFbnRyeTxFPiBwcmV2aW91cyA9IG51bGw7CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoX2VxdWFscyhlbnRyeS5rZXksIG9iamVjdCkpIHsKICAgICAgICBfSGFzaFNldEVudHJ5PEU+IG5leHQgPSBlbnRyeS5yZW1vdmUoKTsKICAgICAgICBpZiAocHJldmlvdXMgPT0gbnVsbCkgewogICAgICAgICAgX2J1Y2tldHNbaW5kZXhdID0gbmV4dDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcHJldmlvdXMubmV4dCA9IG5leHQ7CiAgICAgICAgfQogICAgICAgIF9lbGVtZW50Q291bnQtLTsKICAgICAgICBfbW9kaWZpY2F0aW9uQ291bnQgPQogICAgICAgICAgICAoX21vZGlmaWNhdGlvbkNvdW50ICsgMSkgJiBfTU9ESUZJQ0FUSU9OX0NPVU5UX01BU0s7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcHJldmlvdXMgPSBlbnRyeTsKICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgYm9vbCByZW1vdmUoT2JqZWN0IG9iamVjdCkgPT4gX3JlbW92ZShvYmplY3QsIF9oYXNoQ29kZShvYmplY3QpKTsKCiAgdm9pZCByZW1vdmVBbGwoSXRlcmFibGU8T2JqZWN0PiBvYmplY3RzVG9SZW1vdmUpIHsKICAgIGZvciAoT2JqZWN0IG9iamVjdCBpbiBvYmplY3RzVG9SZW1vdmUpIHsKICAgICAgX3JlbW92ZShvYmplY3QsIF9oYXNoQ29kZShvYmplY3QpKTsKICAgIH0KICB9CgogIHZvaWQgX2ZpbHRlcldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCBib29sIHJlbW92ZU1hdGNoaW5nKSB7CiAgICBpbnQgbGVuZ3RoID0gX2J1Y2tldHMubGVuZ3RoOwogICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgewogICAgICBfSGFzaFNldEVudHJ5PEU+IGVudHJ5ID0gX2J1Y2tldHNbaW5kZXhdOwogICAgICBfSGFzaFNldEVudHJ5PEU+IHByZXZpb3VzID0gbnVsbDsKICAgICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgICBpbnQgbW9kaWZpY2F0aW9uQ291bnQgPSBfbW9kaWZpY2F0aW9uQ291bnQ7CiAgICAgICAgYm9vbCB0ZXN0UmVzdWx0ID0gdGVzdChlbnRyeS5rZXkpOwogICAgICAgIGlmIChtb2RpZmljYXRpb25Db3VudCAhPSBfbW9kaWZpY2F0aW9uQ291bnQpIHsKICAgICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgICAgfQogICAgICAgIGlmICh0ZXN0UmVzdWx0ID09IHJlbW92ZU1hdGNoaW5nKSB7CiAgICAgICAgICBfSGFzaFNldEVudHJ5PEU+IG5leHQgPSBlbnRyeS5yZW1vdmUoKTsKICAgICAgICAgIGlmIChwcmV2aW91cyA9PSBudWxsKSB7CiAgICAgICAgICAgIF9idWNrZXRzW2luZGV4XSA9IG5leHQ7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwcmV2aW91cy5uZXh0ID0gbmV4dDsKICAgICAgICAgIH0KICAgICAgICAgIF9lbGVtZW50Q291bnQtLTsKICAgICAgICAgIF9tb2RpZmljYXRpb25Db3VudCA9CiAgICAgICAgICAgICAgKF9tb2RpZmljYXRpb25Db3VudCArIDEpICYgX01PRElGSUNBVElPTl9DT1VOVF9NQVNLOwogICAgICAgICAgZW50cnkgPSBuZXh0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwcmV2aW91cyA9IGVudHJ5OwogICAgICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgX2ZpbHRlcldoZXJlKHRlc3QsIHRydWUpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgX2ZpbHRlcldoZXJlKHRlc3QsIGZhbHNlKTsKICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfYnVja2V0cyA9IG5ldyBMaXN0KF9JTklUSUFMX0NBUEFDSVRZKTsKICAgIGlmIChfZWxlbWVudENvdW50ID4gMCkgewogICAgICBfZWxlbWVudENvdW50ID0gMDsKICAgICAgX21vZGlmaWNhdGlvbkNvdW50ID0gKF9tb2RpZmljYXRpb25Db3VudCArIDEpICYgX01PRElGSUNBVElPTl9DT1VOVF9NQVNLOwogICAgfQogIH0KCiAgdm9pZCBfYWRkRW50cnkoRSBrZXksIGludCBoYXNoQ29kZSwgaW50IGluZGV4KSB7CiAgICBfYnVja2V0c1tpbmRleF0gPSBuZXcgX0hhc2hTZXRFbnRyeTxFPihrZXksIGhhc2hDb2RlLCBfYnVja2V0c1tpbmRleF0pOwogICAgaW50IG5ld0VsZW1lbnRzID0gX2VsZW1lbnRDb3VudCArIDE7CiAgICBfZWxlbWVudENvdW50ID0gbmV3RWxlbWVudHM7CiAgICBpbnQgbGVuZ3RoID0gX2J1Y2tldHMubGVuZ3RoOwogICAgLy8gSWYgd2UgZW5kIHVwIHdpdGggbW9yZSB0aGFuIDc1JSBub24tZW1wdHkgZW50cmllcywgd2UKICAgIC8vIHJlc2l6ZSB0aGUgYmFja2luZyBzdG9yZS4KICAgIGlmICgobmV3RWxlbWVudHMgPDwgMikgPiAoKGxlbmd0aCA8PCAxKSArIGxlbmd0aCkpIF9yZXNpemUoKTsKICAgIF9tb2RpZmljYXRpb25Db3VudCA9IChfbW9kaWZpY2F0aW9uQ291bnQgKyAxKSAmIF9NT0RJRklDQVRJT05fQ09VTlRfTUFTSzsKICB9CgogIHZvaWQgX3Jlc2l6ZSgpIHsKICAgIGludCBvbGRMZW5ndGggPSBfYnVja2V0cy5sZW5ndGg7CiAgICBpbnQgbmV3TGVuZ3RoID0gb2xkTGVuZ3RoIDw8IDE7CiAgICBMaXN0IG9sZEJ1Y2tldHMgPSBfYnVja2V0czsKICAgIExpc3QgbmV3QnVja2V0cyA9IG5ldyBMaXN0PF9IYXNoU2V0RW50cnk8RT4+KG5ld0xlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG9sZExlbmd0aDsgaSsrKSB7CiAgICAgIF9IYXNoU2V0RW50cnk8RT4gZW50cnkgPSBvbGRCdWNrZXRzW2ldOwogICAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICAgIF9IYXNoU2V0RW50cnk8RT4gbmV4dCA9IGVudHJ5Lm5leHQ7CiAgICAgICAgaW50IG5ld0luZGV4ID0gZW50cnkuaGFzaENvZGUgJiAobmV3TGVuZ3RoIC0gMSk7CiAgICAgICAgZW50cnkubmV4dCA9IG5ld0J1Y2tldHNbbmV3SW5kZXhdOwogICAgICAgIG5ld0J1Y2tldHNbbmV3SW5kZXhdID0gZW50cnk7CiAgICAgICAgZW50cnkgPSBuZXh0OwogICAgICB9CiAgICB9CiAgICBfYnVja2V0cyA9IG5ld0J1Y2tldHM7CiAgfQoKICBIYXNoU2V0PEU+IF9uZXdTZXQoKSA9PiBuZXcgX0hhc2hTZXQ8RT4oKTsKICBIYXNoU2V0PFI+IF9uZXdTaW1pbGFyU2V0PFI+KCkgPT4gbmV3IF9IYXNoU2V0PFI+KCk7Cn0KCmNsYXNzIF9JZGVudGl0eUhhc2hTZXQ8RT4gZXh0ZW5kcyBfSGFzaFNldDxFPiB7CiAgaW50IF9oYXNoQ29kZShlKSA9PiBpZGVudGl0eUhhc2hDb2RlKGUpOwogIGJvb2wgX2VxdWFscyhlMSwgZTIpID0+IGlkZW50aWNhbChlMSwgZTIpOwoKICBIYXNoU2V0PEU+IF9uZXdTZXQoKSA9PiBuZXcgX0lkZW50aXR5SGFzaFNldDxFPigpOwogIEhhc2hTZXQ8Uj4gX25ld1NpbWlsYXJTZXQ8Uj4oKSA9PiBuZXcgX0lkZW50aXR5SGFzaFNldDxSPigpOwp9CgpjbGFzcyBfQ3VzdG9tSGFzaFNldDxFPiBleHRlbmRzIF9IYXNoU2V0PEU+IHsKICBmaW5hbCBfRXF1YWxpdHk8RT4gX2VxdWFsaXR5OwogIGZpbmFsIF9IYXNoZXI8RT4gX2hhc2hlcjsKICBmaW5hbCBfUHJlZGljYXRlIF92YWxpZEtleTsKICBfQ3VzdG9tSGFzaFNldCh0aGlzLl9lcXVhbGl0eSwgdGhpcy5faGFzaGVyLCBib29sIHZhbGlkS2V5KE9iamVjdCBvKSkKICAgICAgOiBfdmFsaWRLZXkgPSAodmFsaWRLZXkgIT0gbnVsbCkgPyB2YWxpZEtleSA6IG5ldyBfVHlwZVRlc3Q8RT4oKS50ZXN0OwoKICBib29sIHJlbW92ZShPYmplY3QgZWxlbWVudCkgewogICAgaWYgKCFfdmFsaWRLZXkoZWxlbWVudCkpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBzdXBlci5yZW1vdmUoZWxlbWVudCk7CiAgfQoKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSB7CiAgICBpZiAoIV92YWxpZEtleShlbGVtZW50KSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHN1cGVyLmNvbnRhaW5zKGVsZW1lbnQpOwogIH0KCiAgRSBsb29rdXAoT2JqZWN0IGVsZW1lbnQpIHsKICAgIGlmICghX3ZhbGlkS2V5KGVsZW1lbnQpKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBzdXBlci5sb29rdXAoZWxlbWVudCk7CiAgfQoKICBib29sIGNvbnRhaW5zQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpIHsKICAgIGZvciAoT2JqZWN0IGVsZW1lbnQgaW4gZWxlbWVudHMpIHsKICAgICAgaWYgKCFfdmFsaWRLZXkoZWxlbWVudCkgfHwgIXRoaXMuY29udGFpbnMoZWxlbWVudCkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgdm9pZCByZW1vdmVBbGwoSXRlcmFibGU8T2JqZWN0PiBlbGVtZW50cykgewogICAgZm9yIChPYmplY3QgZWxlbWVudCBpbiBlbGVtZW50cykgewogICAgICBpZiAoX3ZhbGlkS2V5KGVsZW1lbnQpKSB7CiAgICAgICAgc3VwZXIuX3JlbW92ZShlbGVtZW50LCBfaGFzaGVyKGVsZW1lbnQpKTsKICAgICAgfQogICAgfQogIH0KCiAgYm9vbCBfZXF1YWxzKGUxLCBlMikgPT4gX2VxdWFsaXR5KGUxLCBlMik7CiAgaW50IF9oYXNoQ29kZShlKSA9PiBfaGFzaGVyKGUpOwoKICBIYXNoU2V0PEU+IF9uZXdTZXQoKSA9PiBuZXcgX0N1c3RvbUhhc2hTZXQ8RT4oX2VxdWFsaXR5LCBfaGFzaGVyLCBfdmFsaWRLZXkpOwogIEhhc2hTZXQ8Uj4gX25ld1NpbWlsYXJTZXQ8Uj4oKSA9PiBuZXcgX0hhc2hTZXQ8Uj4oKTsKfQoKY2xhc3MgX0hhc2hTZXRFbnRyeTxFPiB7CiAgZmluYWwgRSBrZXk7CiAgZmluYWwgaW50IGhhc2hDb2RlOwogIF9IYXNoU2V0RW50cnk8RT4gbmV4dDsKICBfSGFzaFNldEVudHJ5KHRoaXMua2V5LCB0aGlzLmhhc2hDb2RlLCB0aGlzLm5leHQpOwoKICBfSGFzaFNldEVudHJ5PEU+IHJlbW92ZSgpIHsKICAgIGZpbmFsIHJlc3VsdCA9IG5leHQ7CiAgICBuZXh0ID0gbnVsbDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CgpjbGFzcyBfSGFzaFNldEl0ZXJhdG9yPEU+IGltcGxlbWVudHMgSXRlcmF0b3I8RT4gewogIGZpbmFsIF9IYXNoU2V0PEU+IF9zZXQ7CiAgZmluYWwgaW50IF9tb2RpZmljYXRpb25Db3VudDsKICBpbnQgX2luZGV4ID0gMDsKICBfSGFzaFNldEVudHJ5PEU+IF9uZXh0OwogIEUgX2N1cnJlbnQ7CgogIF9IYXNoU2V0SXRlcmF0b3IodGhpcy5fc2V0KSA6IF9tb2RpZmljYXRpb25Db3VudCA9IF9zZXQuX21vZGlmaWNhdGlvbkNvdW50OwoKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF9tb2RpZmljYXRpb25Db3VudCAhPSBfc2V0Ll9tb2RpZmljYXRpb25Db3VudCkgewogICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKF9zZXQpOwogICAgfQogICAgaWYgKF9uZXh0ICE9IG51bGwpIHsKICAgICAgX2N1cnJlbnQgPSBfbmV4dC5rZXk7CiAgICAgIF9uZXh0ID0gX25leHQubmV4dDsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBMaXN0PF9IYXNoU2V0RW50cnk8RT4+IGJ1Y2tldHMgPSBfc2V0Ll9idWNrZXRzOwogICAgd2hpbGUgKF9pbmRleCA8IGJ1Y2tldHMubGVuZ3RoKSB7CiAgICAgIF9uZXh0ID0gYnVja2V0c1tfaW5kZXhdOwogICAgICBfaW5kZXggPSBfaW5kZXggKyAxOwogICAgICBpZiAoX25leHQgIT0gbnVsbCkgewogICAgICAgIF9jdXJyZW50ID0gX25leHQua2V5OwogICAgICAgIF9uZXh0ID0gX25leHQubmV4dDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgX2N1cnJlbnQgPSBudWxsOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgRSBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKfQoKLyoqCiAqIEEgaGFzaC1iYXNlZCBtYXAgdGhhdCBpdGVyYXRlcyBrZXlzIGFuZCB2YWx1ZXMgaW4ga2V5IGluc2VydGlvbiBvcmRlci4KICogVGhpcyBpcyBuZXZlciBhY3R1YWxseSBpbnN0YW50aWF0ZWQgYW55IG1vcmUgLSB0aGUgY29uc3RydWN0b3IgYWx3YXlzCiAqIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgX0NvbXBhY3RMaW5rZWRIYXNoTWFwIG9yIF9JbnRlcm5hbExpbmtlZEhhc2hNYXAsCiAqIHdoaWNoIGRlc3BpdGUgdGhlIG5hbWVzIGRvIG5vdCB1c2UgbGlua3MgKGJ1dCBhcmUgaW5zZXJ0aW9uLW9yZGVyZWQgYXMgaWYKICogdGhleSBkaWQpLgogKi8KQHBhdGNoCmNsYXNzIExpbmtlZEhhc2hNYXA8SywgVj4gewogIEBwYXRjaAogIGZhY3RvcnkgTGlua2VkSGFzaE1hcCgKICAgICAge2Jvb2wgZXF1YWxzKEsga2V5MSwgSyBrZXkyKSwKICAgICAgaW50IGhhc2hDb2RlKEsga2V5KSwKICAgICAgYm9vbCBpc1ZhbGlkS2V5KHBvdGVudGlhbEtleSl9KSB7CiAgICBpZiAoaXNWYWxpZEtleSA9PSBudWxsKSB7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBudWxsKSB7CiAgICAgICAgaWYgKGVxdWFscyA9PSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gbmV3IF9JbnRlcm5hbExpbmtlZEhhc2hNYXA8SywgVj4oKTsKICAgICAgICB9CiAgICAgICAgaGFzaENvZGUgPSBfZGVmYXVsdEhhc2hDb2RlOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChpZGVudGljYWwoaWRlbnRpdHlIYXNoQ29kZSwgaGFzaENvZGUpICYmCiAgICAgICAgICAgIGlkZW50aWNhbChpZGVudGljYWwsIGVxdWFscykpIHsKICAgICAgICAgIHJldHVybiBuZXcgX0NvbXBhY3RMaW5rZWRJZGVudGl0eUhhc2hNYXA8SywgVj4oKTsKICAgICAgICB9CiAgICAgICAgZXF1YWxzID8/PSBfZGVmYXVsdEVxdWFsczsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaGFzaENvZGUgPz89IF9kZWZhdWx0SGFzaENvZGU7CiAgICAgIGVxdWFscyA/Pz0gX2RlZmF1bHRFcXVhbHM7CiAgICB9CiAgICByZXR1cm4gbmV3IF9Db21wYWN0TGlua2VkQ3VzdG9tSGFzaE1hcDxLLCBWPihlcXVhbHMsIGhhc2hDb2RlLCBpc1ZhbGlkS2V5KTsKICB9CgogIEBwYXRjaAogIGZhY3RvcnkgTGlua2VkSGFzaE1hcC5pZGVudGl0eSgpID0+IG5ldyBfQ29tcGFjdExpbmtlZElkZW50aXR5SGFzaE1hcDxLLCBWPigpOwp9CgpAcGF0Y2gKY2xhc3MgTGlua2VkSGFzaFNldDxFPiB7CiAgQHBhdGNoCiAgZmFjdG9yeSBMaW5rZWRIYXNoU2V0KAogICAgICB7Ym9vbCBlcXVhbHMoRSBlMSwgRSBlMiksCiAgICAgIGludCBoYXNoQ29kZShFIGUpLAogICAgICBib29sIGlzVmFsaWRLZXkocG90ZW50aWFsS2V5KX0pIHsKICAgIGlmIChpc1ZhbGlkS2V5ID09IG51bGwpIHsKICAgICAgaWYgKGhhc2hDb2RlID09IG51bGwpIHsKICAgICAgICBpZiAoZXF1YWxzID09IG51bGwpIHsKICAgICAgICAgIHJldHVybiBuZXcgX0NvbXBhY3RMaW5rZWRIYXNoU2V0PEU+KCk7CiAgICAgICAgfQogICAgICAgIGhhc2hDb2RlID0gX2RlZmF1bHRIYXNoQ29kZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoaWRlbnRpY2FsKGlkZW50aXR5SGFzaENvZGUsIGhhc2hDb2RlKSAmJgogICAgICAgICAgICBpZGVudGljYWwoaWRlbnRpY2FsLCBlcXVhbHMpKSB7CiAgICAgICAgICByZXR1cm4gbmV3IF9Db21wYWN0TGlua2VkSWRlbnRpdHlIYXNoU2V0PEU+KCk7CiAgICAgICAgfQogICAgICAgIGVxdWFscyA/Pz0gX2RlZmF1bHRFcXVhbHM7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGhhc2hDb2RlID8/PSBfZGVmYXVsdEhhc2hDb2RlOwogICAgICBlcXVhbHMgPz89IF9kZWZhdWx0RXF1YWxzOwogICAgfQogICAgcmV0dXJuIG5ldyBfQ29tcGFjdExpbmtlZEN1c3RvbUhhc2hTZXQ8RT4oZXF1YWxzLCBoYXNoQ29kZSwgaXNWYWxpZEtleSk7CiAgfQoKICBAcGF0Y2gKICBmYWN0b3J5IExpbmtlZEhhc2hTZXQuaWRlbnRpdHkoKSA9PiBuZXcgX0NvbXBhY3RMaW5rZWRJZGVudGl0eUhhc2hTZXQ8RT4oKTsKfQoKQHBhdGNoCmFic3RyYWN0IGNsYXNzIF9TcGxheVRyZWU8SywgTm9kZSBleHRlbmRzIF9TcGxheVRyZWVOb2RlPEs+PiB7CiAgLy8gV2Ugb3ZlcnJpZGUgX3NwbGF5TWluIGFuZCBfc3BsYXlNYXggdG8gb3B0aW1pemUgdHlwZS1jaGVja3MuCiAgQHBhdGNoCiAgTm9kZSBfc3BsYXlNaW4oTm9kZSBub2RlKSB7CiAgICBOb2RlIGN1cnJlbnQgPSBub2RlOwogICAgd2hpbGUgKGN1cnJlbnQubGVmdCAhPSBudWxsKSB7CiAgICAgIE5vZGUgbGVmdCA9IGludGVybmFsLnVuc2FmZUNhc3Q8Tm9kZT4oY3VycmVudC5sZWZ0KTsKICAgICAgY3VycmVudC5sZWZ0ID0gbGVmdC5yaWdodDsKICAgICAgbGVmdC5yaWdodCA9IGN1cnJlbnQ7CiAgICAgIGN1cnJlbnQgPSBsZWZ0OwogICAgfQogICAgcmV0dXJuIGN1cnJlbnQ7CiAgfQoKICBAcGF0Y2gKICBOb2RlIF9zcGxheU1heChOb2RlIG5vZGUpIHsKICAgIE5vZGUgY3VycmVudCA9IG5vZGU7CiAgICB3aGlsZSAoY3VycmVudC5yaWdodCAhPSBudWxsKSB7CiAgICAgIE5vZGUgcmlnaHQgPSBpbnRlcm5hbC51bnNhZmVDYXN0PE5vZGU+KGN1cnJlbnQucmlnaHQpOwogICAgICBjdXJyZW50LnJpZ2h0ID0gcmlnaHQubGVmdDsKICAgICAgcmlnaHQubGVmdCA9IGN1cnJlbnQ7CiAgICAgIGN1cnJlbnQgPSByaWdodDsKICAgIH0KICAgIHJldHVybiBjdXJyZW50OwogIH0KfQqDsABOTjwBDwFNUEsrASUBOgEqATodAQcWCRMkGygeHh4nCiUPNSwvCiMIDSUhBkMEAQk+ARcCATEBRioBGSc4HgEjKi0BP0MBISMeMyAcRxoGEgQBJR4jJx4eLxwIBhIEAR4jHjMgHDwcCBoGEQQBJiMeIysgHDwdEAgaBj0EAScjHiMrIBw8HAgaBiYgJz8NGQYSBAEhJRkIBAEuJh4jJx4eKCs3ChwIBgQBGSMeMyApHB88LhkdQRwIGBQGEQQBESwdGVAGBAEvPyQqDSoGBAFLJlEcKyE9IUJOBAETISkmQSohHiEpMigjFggGGwQBLAIBNB4eHjlNASEnJR4zIBxOGgYSBAEeJiUeMyAcQxwIGgYRBAEmJR4jKyAcQx0QCBoGPQQBJyUeIysgHEMcCBoGJBonPw0ZBhIEARkmJR4zICkcH0MuGR1BHAgYFAYRBAFPAgE2ISweMyAcUBoGEgQBHiweMyAcRRwIGgYRBAEmLB4jKyAcRR0QCBoGPQQBJyweIysgHEUcCBoGJhonPw0ZBhIEARksHjMgKRwfRS4ZHUEcCBgUBhEEATQCARwPCxYcQQIBKTIdHyEkKgIBRDhDNiUeEwgEATUCAUY6RTwnIBUIBAIBQh0UARIeAUIBFC0zBhgZHxoXFQgVBiMjLBobGBgVCAYVEgQCAUQ4IAIBRjoiAgEHEwkTIBkoHh4eJAolDzUsLAojCA0lIQZABAEJOwIBPioBJDUZHgEkIgE1AQ8BPQEjASoBLQEhOy4cMxoGEgQBHDsuHBssGgYRBAEQMB8bGggGLAQBDzUfGyQkHSYKGggGLAQBCgEYKTQuHDUaBikRBAElIBMGBAEuNC4mHCgwICIRIAoZHUEVCBgaBhIEAUQBNS0qBgQBQSIzMCgeNCs3NwosMiIkEyIMGx9DGBEcHgoIBgQBKx4EASsfBAERLB0ZUAYEATNMKSEiPSFCTgQBEyUkID0qLh4sOSsmFggGGwQBLTcCATArLQE1PwIBLiAcHkhNASArIgQBIiskBAEdKiIEATAnSAYRBAEuJyAyCAYEAS0iAVA3AgEZDxYZNQEeGRETBAIBMxogEhoOAU4BFDkzBhkcGhMGNCYfGxseHBUIBhUSBAEdAgEESklLTQ4EBxwJGSQbKB4eHjUKJQ81LDwKIwgNJSEGUAQBCVECAQcZCRkgGSgeHh4xCiUPNSw5CiMIDSUhBk0EAQlOAgEHP0IJHhkjOyEcFgYUBAEJHhkkPSIcFwYUBAIBK2RhcnQ6Y29sbGVjdGlvbi1wYXRjaC9jb2xsZWN0aW9uX3BhdGNoLmRhcnRPb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvX2ludGVybmFsL3ZtL2xpYi9jb21wYWN0X2hhc2guZGFydMAAVIQvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vIHBhcnQgb2YgImNvbGxlY3Rpb25fcGF0Y2guZGFydCI7CgovLyBIYXNoIHRhYmxlIHdpdGggb3BlbiBhZGRyZXNzaW5nIHRoYXQgc2VwYXJhdGVzIHRoZSBpbmRleCBmcm9tIGtleXMvdmFsdWVzLgoKLy8gVGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlIG9mIHJlaGFzaGluZyBvZiB0aGUgbGlua2VkIGhhc2htYXBzIGluIFtvYmplY3RzXS4gV2UKLy8gZG8gdGhpcyBlYWdlcmx5IGFmdGVyIHNuYXBzaG90IGRlc2VyaWFsaXphdGlvbi4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCnZvaWQgX3JlaGFzaE9iamVjdHMoTGlzdCBvYmplY3RzKSB7CiAgZmluYWwgaW50IGxlbmd0aCA9IG9iamVjdHMubGVuZ3RoOwogIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgIG9iamVjdHNbaV0uX3JlZ2VuZXJhdGVJbmRleCgpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX0hhc2hGaWVsZEJhc2UgewogIC8vIEVhY2ggb2NjdXBpZWQgZW50cnkgaW4gX2luZGV4IGlzIGEgZml4ZWQtc2l6ZSBpbnRlZ2VyIHRoYXQgZW5jb2RlcyBhIHBhaXI6CiAgLy8gICBbIGhhc2ggcGF0dGVybiBmb3Iga2V5IHwgaW5kZXggb2YgZW50cnkgaW4gX2RhdGEgXQogIC8vIFRoZSBoYXNoIHBhdHRlcm4gaXMgYmFzZWQgb24gaGFzaENvZGUsIGJ1dCBpcyBndWFyYW50ZWVkIHRvIGJlIG5vbi16ZXJvLgogIC8vIFRoZSBsZW5ndGggb2YgX2luZGV4IGlzIGFsd2F5cyBhIHBvd2VyIG9mIHR3bywgYW5kIHRoZXJlIGlzIGFsd2F5cyBhdAogIC8vIGxlYXN0IG9uZSB1bm9jY3VwaWVkIGVudHJ5LgogIC8vIE5PVEU6IFdoZW4gbWFwcyBhcmUgZGVzZXJpYWxpemVkLCB0aGVpciBfaW5kZXggYW5kIF9oYXNoTWFzayBpcyByZWdlbmVyYXRlZAogIC8vIGVhZ2VybHkgYnkgX3JlZ2VuZXJhdGVJbmRleC4KICBVaW50MzJMaXN0IF9pbmRleCA9IG5ldyBVaW50MzJMaXN0KF9IYXNoQmFzZS5fSU5JVElBTF9JTkRFWF9TSVpFKTsKCiAgLy8gQ2FjaGVkIGluLXBsYWNlIG1hc2sgZm9yIHRoZSBoYXNoIHBhdHRlcm4gY29tcG9uZW50LgogIGludCBfaGFzaE1hc2sgPSBfSGFzaEJhc2UuX2luZGV4U2l6ZVRvSGFzaE1hc2soX0hhc2hCYXNlLl9JTklUSUFMX0lOREVYX1NJWkUpOwoKICAvLyBGaXhlZC1sZW5ndGggbGlzdCBvZiBrZXlzIChzZXQpIG9yIGtleS92YWx1ZSBhdCBldmVuL29kZCBpbmRpY2VzIChtYXApLgogIExpc3QgX2RhdGE7CgogIC8vIExlbmd0aCBvZiBfZGF0YSB0aGF0IGlzIHVzZWQgKGkuZS4sIGtleXMgKyB2YWx1ZXMgZm9yIGEgbWFwKS4KICBpbnQgX3VzZWREYXRhID0gMDsKCiAgLy8gTnVtYmVyIG9mIGRlbGV0ZWQga2V5cy4KICBpbnQgX2RlbGV0ZWRLZXlzID0gMDsKCiAgLy8gTm90ZTogQWxsIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgaW4gYSBzaW5nbGUgY29uc3RydWN0b3Igc28gdGhhdCB0aGUgVk0KICAvLyByZWNvZ25pemVzIHRoZXkgY2Fubm90IGhvbGQgbnVsbCB2YWx1ZXMuIFRoaXMgbWFrZXMgYSBiaWcgKDIwJSkgcGVyZm9ybWFuY2UKICAvLyBkaWZmZXJlbmNlIG9uIHNvbWUgb3BlcmF0aW9ucy4KICBfSGFzaEZpZWxkQmFzZShpbnQgZGF0YVNpemUpIDogdGhpcy5fZGF0YSA9IG5ldyBMaXN0KGRhdGFTaXplKTsKfQoKLy8gQmFzZSBjbGFzcyBmb3IgVk0taW50ZXJuYWwgY2xhc3Nlczsga2VlcCBpbiBzeW5jIHdpdGggX0hhc2hGaWVsZEJhc2UuCmFic3RyYWN0IGNsYXNzIF9IYXNoVk1CYXNlIHsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OnR5cGVkX2RhdGEjX1VpbnQzMkxpc3QiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIFVpbnQzMkxpc3QgZ2V0IF9pbmRleCBuYXRpdmUgIkxpbmtlZEhhc2hNYXBfZ2V0SW5kZXgiOwogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgc2V0IF9pbmRleChVaW50MzJMaXN0IHZhbHVlKSBuYXRpdmUgIkxpbmtlZEhhc2hNYXBfc2V0SW5kZXgiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IGdldCBfaGFzaE1hc2sgbmF0aXZlICJMaW5rZWRIYXNoTWFwX2dldEhhc2hNYXNrIjsKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIHNldCBfaGFzaE1hc2soaW50IHZhbHVlKSBuYXRpdmUgIkxpbmtlZEhhc2hNYXBfc2V0SGFzaE1hc2siOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0xpc3QiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIExpc3QgZ2V0IF9kYXRhIG5hdGl2ZSAiTGlua2VkSGFzaE1hcF9nZXREYXRhIjsKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIHNldCBfZGF0YShMaXN0IHZhbHVlKSBuYXRpdmUgIkxpbmtlZEhhc2hNYXBfc2V0RGF0YSI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0IF91c2VkRGF0YSBuYXRpdmUgIkxpbmtlZEhhc2hNYXBfZ2V0VXNlZERhdGEiOwogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgc2V0IF91c2VkRGF0YShpbnQgdmFsdWUpIG5hdGl2ZSAiTGlua2VkSGFzaE1hcF9zZXRVc2VkRGF0YSI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0IF9kZWxldGVkS2V5cyBuYXRpdmUgIkxpbmtlZEhhc2hNYXBfZ2V0RGVsZXRlZEtleXMiOwogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgc2V0IF9kZWxldGVkS2V5cyhpbnQgdmFsdWUpIG5hdGl2ZSAiTGlua2VkSGFzaE1hcF9zZXREZWxldGVkS2V5cyI7Cn0KCi8vIFRoaXMgbWl4aW4gY2FuIGJlIGFwcGxpZWQgdG8gX0hhc2hGaWVsZEJhc2Ugb3IgX0hhc2hWTUJhc2UgKGZvcgovLyBub3JtYWwgYW5kIFZNLWludGVybmFsaXplZCBjbGFzc2VzLCByZXNwZWN0aXZlbGV5KSwgd2hpY2ggcHJvdmlkZSB0aGUKLy8gYWN0dWFsIGZpZWxkcy9hY2Nlc3NvcnMgdGhhdCB0aGlzIG1peGluIGFzc3VtZXMuCi8vIFRPRE8oa29kYSk6IENvbnNpZGVyIG1vdmluZyBmaWVsZCBjb21tZW50cyB0byBfSGFzaEZpZWxkQmFzZS4KYWJzdHJhY3QgY2xhc3MgX0hhc2hCYXNlIGltcGxlbWVudHMgX0hhc2hWTUJhc2UgewogIC8vIFRoZSBudW1iZXIgb2YgYml0cyB1c2VkIGZvciBlYWNoIGNvbXBvbmVudCBpcyBkZXRlcm1pbmVkIGJ5IHRhYmxlIHNpemUuCiAgLy8gVGhlIGxlbmd0aCBvZiBfaW5kZXggaXMgdHdpY2UgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIF9kYXRhLCBhbmQgYm90aAogIC8vIGFyZSBkb3VibGVkIHdoZW4gX2RhdGEgaXMgZnVsbC4gVGh1cywgX2luZGV4IHdpbGwgaGF2ZSBhIG1heCBsb2FkIGZhY3RvcgogIC8vIG9mIDEvMiwgd2hpY2ggZW5hYmxlcyBvbmUgbW9yZSBiaXQgdG8gYmUgdXNlZCBmb3IgdGhlIGhhc2guCiAgLy8gVE9ETyhrb2RhKTogQ29uc2lkZXIgZ3Jvd2luZyBfZGF0YSBieSBmYWN0b3Igc3FydCgyKSwgdHdpY2UgYXMgb2Z0ZW4uCiAgc3RhdGljIGNvbnN0IGludCBfSU5JVElBTF9JTkRFWF9CSVRTID0gMzsKICBzdGF0aWMgY29uc3QgaW50IF9JTklUSUFMX0lOREVYX1NJWkUgPSAxIDw8IChfSU5JVElBTF9JTkRFWF9CSVRTICsgMSk7CgogIC8vIFVudXNlZCBhbmQgZGVsZXRlZCBlbnRyaWVzIGFyZSBtYXJrZWQgYnkgMCBhbmQgMSwgcmVzcGVjdGl2ZWx5LgogIHN0YXRpYyBjb25zdCBpbnQgX1VOVVNFRF9QQUlSID0gMDsKICBzdGF0aWMgY29uc3QgaW50IF9ERUxFVEVEX1BBSVIgPSAxOwoKICAvLyBPbiAzMi1iaXQsIHRoZSB0b3AgYml0cyBhcmUgd2FzdGVkIHRvIGF2b2lkIE1pbnQgYWxsb2NhdGlvbi4KICAvLyBUT0RPKGtvZGEpOiBSZWNsYWltIHRoZSBiaXRzIGJ5IG1ha2luZyB0aGUgY29tcGlsZXIgdHJlYXQgaGFzaCBwYXR0ZXJucwogIC8vIGFzIHVuc2lnbmVkIHdvcmRzLgogIHN0YXRpYyBpbnQgX2luZGV4U2l6ZVRvSGFzaE1hc2soaW50IGluZGV4U2l6ZSkgewogICAgaW50IGluZGV4Qml0cyA9IGluZGV4U2l6ZS5iaXRMZW5ndGggLSAyOwogICAgcmV0dXJuIGludGVybmFsLmlzNjRCaXQKICAgICAgICA/ICgxIDw8ICgzMiAtIGluZGV4Qml0cykpIC0gMQogICAgICAgIDogKDEgPDwgKDMwIC0gaW5kZXhCaXRzKSkgLSAxOwogIH0KCiAgc3RhdGljIGludCBfaGFzaFBhdHRlcm4oaW50IGZ1bGxIYXNoLCBpbnQgaGFzaE1hc2ssIGludCBzaXplKSB7CiAgICBmaW5hbCBpbnQgbWFza2VkSGFzaCA9IGZ1bGxIYXNoICYgaGFzaE1hc2s7CiAgICAvLyBUT0RPKGtvZGEpOiBDb25zaWRlciBrZWVwaW5nIGJpdCBsZW5ndGggYW5kIHVzZSBsZWZ0IHNoaWZ0LgogICAgcmV0dXJuIChtYXNrZWRIYXNoID09IDApID8gKHNpemUgPj4gMSkgOiBtYXNrZWRIYXNoICogKHNpemUgPj4gMSk7CiAgfQoKICAvLyBMaW5lYXIgcHJvYmluZy4KICBzdGF0aWMgaW50IF9maXJzdFByb2JlKGludCBmdWxsSGFzaCwgaW50IHNpemVNYXNrKSB7CiAgICBmaW5hbCBpbnQgaSA9IGZ1bGxIYXNoICYgc2l6ZU1hc2s7CiAgICAvLyBMaWdodCwgZmFzdCBzaHVmZmxlIHRvIG1pdGlnYXRlIGJhZCBoYXNoQ29kZSAoZS5nLiwgc2VxdWVudGlhbCkuCiAgICByZXR1cm4gKChpIDw8IDEpICsgaSkgJiBzaXplTWFzazsKICB9CgogIHN0YXRpYyBpbnQgX25leHRQcm9iZShpbnQgaSwgaW50IHNpemVNYXNrKSA9PiAoaSArIDEpICYgc2l6ZU1hc2s7CgogIC8vIEEgc2VsZi1sb29wIGlzIHVzZWQgdG8gbWFyayBhIGRlbGV0ZWQga2V5IG9yIHZhbHVlLgogIHN0YXRpYyBib29sIF9pc0RlbGV0ZWQoTGlzdCBkYXRhLCBPYmplY3Qga2V5T3JWYWx1ZSkgPT4KICAgICAgaWRlbnRpY2FsKGtleU9yVmFsdWUsIGRhdGEpOwogIHN0YXRpYyB2b2lkIF9zZXREZWxldGVkQXQoTGlzdCBkYXRhLCBpbnQgZCkgewogICAgZGF0YVtkXSA9IGRhdGE7CiAgfQoKICAvLyBDb25jdXJyZW50IG1vZGlmaWNhdGlvbiBkZXRlY3Rpb24gcmVsaWVzIG9uIHRoaXMgY2hlY2tzdW0gbW9ub3RvbmljYWxseQogIC8vIGluY3JlYXNpbmcgYmV0d2VlbiByZWFsbG9jYXRpb25zIG9mIF9kYXRhLgogIGludCBnZXQgX2NoZWNrU3VtID0+IF91c2VkRGF0YSArIF9kZWxldGVkS2V5czsKICBib29sIF9pc01vZGlmaWVkU2luY2UoTGlzdCBvbGREYXRhLCBpbnQgb2xkQ2hlY2tTdW0pID0+CiAgICAgICFpZGVudGljYWwoX2RhdGEsIG9sZERhdGEpIHx8IChfY2hlY2tTdW0gIT0gb2xkQ2hlY2tTdW0pOwoKICBpbnQgZ2V0IGxlbmd0aDsKfQoKY2xhc3MgX09wZXJhdG9yRXF1YWxzQW5kSGFzaENvZGUgewogIGludCBfaGFzaENvZGUoZSkgPT4gZS5oYXNoQ29kZTsKICBib29sIF9lcXVhbHMoZTEsIGUyKSA9PiBlMSA9PSBlMjsKfQoKY2xhc3MgX0lkZW50aWNhbEFuZElkZW50aXR5SGFzaENvZGUgewogIGludCBfaGFzaENvZGUoZSkgPT4gaWRlbnRpdHlIYXNoQ29kZShlKTsKICBib29sIF9lcXVhbHMoZTEsIGUyKSA9PiBpZGVudGljYWwoZTEsIGUyKTsKfQoKLy8gVk0taW50ZXJuYWxpemVkIGltcGxlbWVudGF0aW9uIG9mIGEgZGVmYXVsdC1jb25zdHJ1Y3RlZCBMaW5rZWRIYXNoTWFwLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9JbnRlcm5hbExpbmtlZEhhc2hNYXA8SywgVj4gZXh0ZW5kcyBfSGFzaFZNQmFzZQogICAgd2l0aAogICAgICAgIE1hcE1peGluPEssIFY+LAogICAgICAgIF9MaW5rZWRIYXNoTWFwTWl4aW48SywgVj4sCiAgICAgICAgX0hhc2hCYXNlLAogICAgICAgIF9PcGVyYXRvckVxdWFsc0FuZEhhc2hDb2RlCiAgICBpbXBsZW1lbnRzIExpbmtlZEhhc2hNYXA8SywgVj4gewogIF9JbnRlcm5hbExpbmtlZEhhc2hNYXAoKSB7CiAgICBfaW5kZXggPSBuZXcgVWludDMyTGlzdChfSGFzaEJhc2UuX0lOSVRJQUxfSU5ERVhfU0laRSk7CiAgICBfaGFzaE1hc2sgPSBfSGFzaEJhc2UuX2luZGV4U2l6ZVRvSGFzaE1hc2soX0hhc2hCYXNlLl9JTklUSUFMX0lOREVYX1NJWkUpOwogICAgX2RhdGEgPSBuZXcgTGlzdChfSGFzaEJhc2UuX0lOSVRJQUxfSU5ERVhfU0laRSk7CiAgICBfdXNlZERhdGEgPSAwOwogICAgX2RlbGV0ZWRLZXlzID0gMDsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9MaW5rZWRIYXNoTWFwTWl4aW48SywgVj4gaW1wbGVtZW50cyBfSGFzaEJhc2UgewogIGludCBfaGFzaENvZGUoZSk7CiAgYm9vbCBfZXF1YWxzKGUxLCBlMik7CiAgaW50IGdldCBfY2hlY2tTdW07CiAgYm9vbCBfaXNNb2RpZmllZFNpbmNlKExpc3Qgb2xkRGF0YSwgaW50IG9sZENoZWNrU3VtKTsKCiAgaW50IGdldCBsZW5ndGggPT4gKF91c2VkRGF0YSA+PiAxKSAtIF9kZWxldGVkS2V5czsKICBib29sIGdldCBpc0VtcHR5ID0+IGxlbmd0aCA9PSAwOwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gIWlzRW1wdHk7CgogIHZvaWQgX3JlaGFzaCgpIHsKICAgIGlmICgoX2RlbGV0ZWRLZXlzIDw8IDIpID4gX3VzZWREYXRhKSB7CiAgICAgIC8vIFRPRE8oa29kYSk6IENvbnNpZGVyIHNocmlua2luZy4KICAgICAgLy8gVE9ETyhrb2RhKTogQ29uc2lkZXIgaW4tcGxhY2UgY29tcGFjdGlvbiBhbmQgbW9yZSBjb3N0bHkgQ01FIGNoZWNrLgogICAgICBfaW5pdChfaW5kZXgubGVuZ3RoLCBfaGFzaE1hc2ssIF9kYXRhLCBfdXNlZERhdGEpOwogICAgfSBlbHNlIHsKICAgICAgLy8gVE9ETyhrb2RhKTogU3VwcG9ydCAzMi0+NjQgYml0IHRyYW5zaXRpb24gKGFuZCBhZGp1c3QgX2hhc2hNYXNrKS4KICAgICAgX2luaXQoX2luZGV4Lmxlbmd0aCA8PCAxLCBfaGFzaE1hc2sgPj4gMSwgX2RhdGEsIF91c2VkRGF0YSk7CiAgICB9CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgaWYgKCFpc0VtcHR5KSB7CiAgICAgIF9pbml0KF9IYXNoQmFzZS5fSU5JVElBTF9JTkRFWF9TSVpFLCBfaGFzaE1hc2ssIG51bGwsIDApOwogICAgfQogIH0KCiAgLy8gQWxsb2NhdGUgbmV3IF9pbmRleCBhbmQgX2RhdGEsIGFuZCBvcHRpb25hbGx5IGNvcHkgZXhpc3RpbmcgY29udGVudHMuCiAgdm9pZCBfaW5pdChpbnQgc2l6ZSwgaW50IGhhc2hNYXNrLCBMaXN0IG9sZERhdGEsIGludCBvbGRVc2VkKSB7CiAgICBhc3NlcnQoc2l6ZSAmIChzaXplIC0gMSkgPT0gMCk7CiAgICBhc3NlcnQoX0hhc2hCYXNlLl9VTlVTRURfUEFJUiA9PSAwKTsKICAgIF9pbmRleCA9IG5ldyBVaW50MzJMaXN0KHNpemUpOwogICAgX2hhc2hNYXNrID0gaGFzaE1hc2s7CiAgICBfZGF0YSA9IG5ldyBMaXN0KHNpemUpOwogICAgX3VzZWREYXRhID0gMDsKICAgIF9kZWxldGVkS2V5cyA9IDA7CiAgICBpZiAob2xkRGF0YSAhPSBudWxsKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2xkVXNlZDsgaSArPSAyKSB7CiAgICAgICAgdmFyIGtleSA9IG9sZERhdGFbaV07CiAgICAgICAgaWYgKCFfSGFzaEJhc2UuX2lzRGVsZXRlZChvbGREYXRhLCBrZXkpKSB7CiAgICAgICAgICAvLyBUT0RPKGtvZGEpOiBXaGlsZSB0aGVyZSBhcmUgZW5vdWdoIGhhc2ggYml0cywgYXZvaWQgaGFzaENvZGUgY2FsbHMuCiAgICAgICAgICB0aGlzW2tleV0gPSBvbGREYXRhW2kgKyAxXTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBbX3JlaGFzaE9iamVjdHNdIChzZWUgYWJvdmUpLgogIHZvaWQgX3JlZ2VuZXJhdGVJbmRleCgpIHsKICAgIF9pbmRleCA9IG5ldyBVaW50MzJMaXN0KF9kYXRhLmxlbmd0aCk7CiAgICBhc3NlcnQoX2hhc2hNYXNrID09IDApOwogICAgX2hhc2hNYXNrID0gX0hhc2hCYXNlLl9pbmRleFNpemVUb0hhc2hNYXNrKF9pbmRleC5sZW5ndGgpOwogICAgZmluYWwgaW50IHRtcFVzZWQgPSBfdXNlZERhdGE7CiAgICBfdXNlZERhdGEgPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0bXBVc2VkOyBpICs9IDIpIHsKICAgICAgdGhpc1tfZGF0YVtpXV0gPSBfZGF0YVtpICsgMV07CiAgICB9CiAgfQoKICB2b2lkIF9pbnNlcnQoSyBrZXksIFYgdmFsdWUsIGludCBoYXNoUGF0dGVybiwgaW50IGkpIHsKICAgIGlmIChfdXNlZERhdGEgPT0gX2RhdGEubGVuZ3RoKSB7CiAgICAgIF9yZWhhc2goKTsKICAgICAgdGhpc1trZXldID0gdmFsdWU7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoMSA8PSBoYXNoUGF0dGVybiAmJiBoYXNoUGF0dGVybiA8ICgxIDw8IDMyKSk7CiAgICAgIGZpbmFsIGludCBpbmRleCA9IF91c2VkRGF0YSA+PiAxOwogICAgICBhc3NlcnQoKGluZGV4ICYgaGFzaFBhdHRlcm4pID09IDApOwogICAgICBfaW5kZXhbaV0gPSBoYXNoUGF0dGVybiB8IGluZGV4OwogICAgICBfZGF0YVtfdXNlZERhdGErK10gPSBrZXk7CiAgICAgIF9kYXRhW191c2VkRGF0YSsrXSA9IHZhbHVlOwogICAgfQogIH0KCiAgLy8gSWYga2V5IGlzIHByZXNlbnQsIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSB2YWx1ZSBpbiBfZGF0YSwgZWxzZSByZXR1cm5zCiAgLy8gdGhlIG5lZ2F0ZWQgaW5zZXJ0aW9uIHBvaW50IGluIF9pbmRleC4KICBpbnQgX2ZpbmRWYWx1ZU9ySW5zZXJ0UG9pbnQoSyBrZXksIGludCBmdWxsSGFzaCwgaW50IGhhc2hQYXR0ZXJuLCBpbnQgc2l6ZSkgewogICAgZmluYWwgaW50IHNpemVNYXNrID0gc2l6ZSAtIDE7CiAgICBmaW5hbCBpbnQgbWF4RW50cmllcyA9IHNpemUgPj4gMTsKICAgIGludCBpID0gX0hhc2hCYXNlLl9maXJzdFByb2JlKGZ1bGxIYXNoLCBzaXplTWFzayk7CiAgICBpbnQgZmlyc3REZWxldGVkID0gLTE7CiAgICBpbnQgcGFpciA9IF9pbmRleFtpXTsKICAgIHdoaWxlIChwYWlyICE9IF9IYXNoQmFzZS5fVU5VU0VEX1BBSVIpIHsKICAgICAgaWYgKHBhaXIgPT0gX0hhc2hCYXNlLl9ERUxFVEVEX1BBSVIpIHsKICAgICAgICBpZiAoZmlyc3REZWxldGVkIDwgMCkgewogICAgICAgICAgZmlyc3REZWxldGVkID0gaTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZmluYWwgaW50IGVudHJ5ID0gaGFzaFBhdHRlcm4gXiBwYWlyOwogICAgICAgIGlmIChlbnRyeSA8IG1heEVudHJpZXMpIHsKICAgICAgICAgIGZpbmFsIGludCBkID0gZW50cnkgPDwgMTsKICAgICAgICAgIGlmIChfZXF1YWxzKGtleSwgX2RhdGFbZF0pKSB7CiAgICAgICAgICAgIHJldHVybiBkICsgMTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaSA9IF9IYXNoQmFzZS5fbmV4dFByb2JlKGksIHNpemVNYXNrKTsKICAgICAgcGFpciA9IF9pbmRleFtpXTsKICAgIH0KICAgIHJldHVybiBmaXJzdERlbGV0ZWQgPj0gMCA/IC1maXJzdERlbGV0ZWQgOiAtaTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KEsga2V5LCBWIHZhbHVlKSB7CiAgICBmaW5hbCBpbnQgc2l6ZSA9IF9pbmRleC5sZW5ndGg7CiAgICBmaW5hbCBpbnQgZnVsbEhhc2ggPSBfaGFzaENvZGUoa2V5KTsKICAgIGZpbmFsIGludCBoYXNoUGF0dGVybiA9IF9IYXNoQmFzZS5faGFzaFBhdHRlcm4oZnVsbEhhc2gsIF9oYXNoTWFzaywgc2l6ZSk7CiAgICBmaW5hbCBpbnQgZCA9IF9maW5kVmFsdWVPckluc2VydFBvaW50KGtleSwgZnVsbEhhc2gsIGhhc2hQYXR0ZXJuLCBzaXplKTsKICAgIGlmIChkID4gMCkgewogICAgICBfZGF0YVtkXSA9IHZhbHVlOwogICAgfSBlbHNlIHsKICAgICAgZmluYWwgaW50IGkgPSAtZDsKICAgICAgX2luc2VydChrZXksIHZhbHVlLCBoYXNoUGF0dGVybiwgaSk7CiAgICB9CiAgfQoKICBWIHB1dElmQWJzZW50KEsga2V5LCBWIGlmQWJzZW50KCkpIHsKICAgIGZpbmFsIGludCBzaXplID0gX2luZGV4Lmxlbmd0aDsKICAgIGZpbmFsIGludCBmdWxsSGFzaCA9IF9oYXNoQ29kZShrZXkpOwogICAgZmluYWwgaW50IGhhc2hQYXR0ZXJuID0gX0hhc2hCYXNlLl9oYXNoUGF0dGVybihmdWxsSGFzaCwgX2hhc2hNYXNrLCBzaXplKTsKICAgIGZpbmFsIGludCBkID0gX2ZpbmRWYWx1ZU9ySW5zZXJ0UG9pbnQoa2V5LCBmdWxsSGFzaCwgaGFzaFBhdHRlcm4sIHNpemUpOwogICAgaWYgKGQgPiAwKSB7CiAgICAgIHJldHVybiBfZGF0YVtkXTsKICAgIH0KICAgIC8vICdpZkFic2VudCcgaXMgYWxsb3dlZCB0byBtb2RpZnkgdGhlIG1hcC4KICAgIExpc3Qgb2xkRGF0YSA9IF9kYXRhOwogICAgaW50IG9sZENoZWNrU3VtID0gX2NoZWNrU3VtOwogICAgViB2YWx1ZSA9IGlmQWJzZW50KCk7CiAgICBpZiAoX2lzTW9kaWZpZWRTaW5jZShvbGREYXRhLCBvbGRDaGVja1N1bSkpIHsKICAgICAgdGhpc1trZXldID0gdmFsdWU7CiAgICB9IGVsc2UgewogICAgICBmaW5hbCBpbnQgaSA9IC1kOwogICAgICBfaW5zZXJ0KGtleSwgdmFsdWUsIGhhc2hQYXR0ZXJuLCBpKTsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIFYgcmVtb3ZlKE9iamVjdCBrZXkpIHsKICAgIGZpbmFsIGludCBzaXplID0gX2luZGV4Lmxlbmd0aDsKICAgIGZpbmFsIGludCBzaXplTWFzayA9IHNpemUgLSAxOwogICAgZmluYWwgaW50IG1heEVudHJpZXMgPSBzaXplID4+IDE7CiAgICBmaW5hbCBpbnQgZnVsbEhhc2ggPSBfaGFzaENvZGUoa2V5KTsKICAgIGZpbmFsIGludCBoYXNoUGF0dGVybiA9IF9IYXNoQmFzZS5faGFzaFBhdHRlcm4oZnVsbEhhc2gsIF9oYXNoTWFzaywgc2l6ZSk7CiAgICBpbnQgaSA9IF9IYXNoQmFzZS5fZmlyc3RQcm9iZShmdWxsSGFzaCwgc2l6ZU1hc2spOwogICAgaW50IHBhaXIgPSBfaW5kZXhbaV07CiAgICB3aGlsZSAocGFpciAhPSBfSGFzaEJhc2UuX1VOVVNFRF9QQUlSKSB7CiAgICAgIGlmIChwYWlyICE9IF9IYXNoQmFzZS5fREVMRVRFRF9QQUlSKSB7CiAgICAgICAgZmluYWwgaW50IGVudHJ5ID0gaGFzaFBhdHRlcm4gXiBwYWlyOwogICAgICAgIGlmIChlbnRyeSA8IG1heEVudHJpZXMpIHsKICAgICAgICAgIGZpbmFsIGludCBkID0gZW50cnkgPDwgMTsKICAgICAgICAgIGlmIChfZXF1YWxzKGtleSwgX2RhdGFbZF0pKSB7CiAgICAgICAgICAgIF9pbmRleFtpXSA9IF9IYXNoQmFzZS5fREVMRVRFRF9QQUlSOwogICAgICAgICAgICBfSGFzaEJhc2UuX3NldERlbGV0ZWRBdChfZGF0YSwgZCk7CiAgICAgICAgICAgIFYgdmFsdWUgPSBfZGF0YVtkICsgMV07CiAgICAgICAgICAgIF9IYXNoQmFzZS5fc2V0RGVsZXRlZEF0KF9kYXRhLCBkICsgMSk7CiAgICAgICAgICAgICsrX2RlbGV0ZWRLZXlzOwogICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGkgPSBfSGFzaEJhc2UuX25leHRQcm9iZShpLCBzaXplTWFzayk7CiAgICAgIHBhaXIgPSBfaW5kZXhbaV07CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vIElmIGtleSBpcyBhYnNlbnQsIHJldHVybiBfZGF0YSAod2hpY2ggaXMgbmV2ZXIgYSB2YWx1ZSkuCiAgT2JqZWN0IF9nZXRWYWx1ZU9yRGF0YShPYmplY3Qga2V5KSB7CiAgICBmaW5hbCBpbnQgc2l6ZSA9IF9pbmRleC5sZW5ndGg7CiAgICBmaW5hbCBpbnQgc2l6ZU1hc2sgPSBzaXplIC0gMTsKICAgIGZpbmFsIGludCBtYXhFbnRyaWVzID0gc2l6ZSA+PiAxOwogICAgZmluYWwgaW50IGZ1bGxIYXNoID0gX2hhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBpbnQgaGFzaFBhdHRlcm4gPSBfSGFzaEJhc2UuX2hhc2hQYXR0ZXJuKGZ1bGxIYXNoLCBfaGFzaE1hc2ssIHNpemUpOwogICAgaW50IGkgPSBfSGFzaEJhc2UuX2ZpcnN0UHJvYmUoZnVsbEhhc2gsIHNpemVNYXNrKTsKICAgIGludCBwYWlyID0gX2luZGV4W2ldOwogICAgd2hpbGUgKHBhaXIgIT0gX0hhc2hCYXNlLl9VTlVTRURfUEFJUikgewogICAgICBpZiAocGFpciAhPSBfSGFzaEJhc2UuX0RFTEVURURfUEFJUikgewogICAgICAgIGZpbmFsIGludCBlbnRyeSA9IGhhc2hQYXR0ZXJuIF4gcGFpcjsKICAgICAgICBpZiAoZW50cnkgPCBtYXhFbnRyaWVzKSB7CiAgICAgICAgICBmaW5hbCBpbnQgZCA9IGVudHJ5IDw8IDE7CiAgICAgICAgICBpZiAoX2VxdWFscyhrZXksIF9kYXRhW2RdKSkgewogICAgICAgICAgICByZXR1cm4gX2RhdGFbZCArIDFdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpID0gX0hhc2hCYXNlLl9uZXh0UHJvYmUoaSwgc2l6ZU1hc2spOwogICAgICBwYWlyID0gX2luZGV4W2ldOwogICAgfQogICAgcmV0dXJuIF9kYXRhOwogIH0KCiAgYm9vbCBjb250YWluc0tleShPYmplY3Qga2V5KSA9PiAhaWRlbnRpY2FsKF9kYXRhLCBfZ2V0VmFsdWVPckRhdGEoa2V5KSk7CgogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgewogICAgdmFyIHYgPSBfZ2V0VmFsdWVPckRhdGEoa2V5KTsKICAgIHJldHVybiBpZGVudGljYWwoX2RhdGEsIHYpID8gbnVsbCA6IGludGVybmFsLnVuc2FmZUNhc3Q8Vj4odik7CiAgfQoKICBib29sIGNvbnRhaW5zVmFsdWUoT2JqZWN0IHZhbHVlKSB7CiAgICBmb3IgKHZhciB2IGluIHZhbHVlcykgewogICAgICAvLyBTcGVjLiBzYXlzIHRoaXMgc2hvdWxkIGFsd2F5cyB1c2UgIj09IiwgYWxzbyBmb3IgaWRlbnRpdHkgbWFwcywgZXRjLgogICAgICBpZiAodiA9PSB2YWx1ZSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmKEsga2V5LCBWIHZhbHVlKSkgewogICAgdmFyIGtpID0ga2V5cy5pdGVyYXRvcjsKICAgIHZhciB2aSA9IHZhbHVlcy5pdGVyYXRvcjsKICAgIHdoaWxlIChraS5tb3ZlTmV4dCgpKSB7CiAgICAgIHZpLm1vdmVOZXh0KCk7CiAgICAgIGYoa2kuY3VycmVudCwgdmkuY3VycmVudCk7CiAgICB9CiAgfQoKICBJdGVyYWJsZTxLPiBnZXQga2V5cyA9PgogICAgICBuZXcgX0NvbXBhY3RJdGVyYWJsZTxLPih0aGlzLCBfZGF0YSwgX3VzZWREYXRhLCAtMiwgMik7CiAgSXRlcmFibGU8Vj4gZ2V0IHZhbHVlcyA9PgogICAgICBuZXcgX0NvbXBhY3RJdGVyYWJsZTxWPih0aGlzLCBfZGF0YSwgX3VzZWREYXRhLCAtMSwgMik7Cn0KCmNsYXNzIF9Db21wYWN0TGlua2VkSWRlbnRpdHlIYXNoTWFwPEssIFY+IGV4dGVuZHMgX0hhc2hGaWVsZEJhc2UKICAgIHdpdGgKICAgICAgICBNYXBNaXhpbjxLLCBWPiwKICAgICAgICBfTGlua2VkSGFzaE1hcE1peGluPEssIFY+LAogICAgICAgIF9IYXNoQmFzZSwKICAgICAgICBfSWRlbnRpY2FsQW5kSWRlbnRpdHlIYXNoQ29kZQogICAgaW1wbGVtZW50cyBMaW5rZWRIYXNoTWFwPEssIFY+IHsKICBfQ29tcGFjdExpbmtlZElkZW50aXR5SGFzaE1hcCgpIDogc3VwZXIoX0hhc2hCYXNlLl9JTklUSUFMX0lOREVYX1NJWkUpOwp9CgpjbGFzcyBfQ29tcGFjdExpbmtlZEN1c3RvbUhhc2hNYXA8SywgVj4gZXh0ZW5kcyBfSGFzaEZpZWxkQmFzZQogICAgd2l0aCBNYXBNaXhpbjxLLCBWPiwgX0xpbmtlZEhhc2hNYXBNaXhpbjxLLCBWPiwgX0hhc2hCYXNlCiAgICBpbXBsZW1lbnRzIExpbmtlZEhhc2hNYXA8SywgVj4gewogIGZpbmFsIF9lcXVhbGl0eTsKICBmaW5hbCBfaGFzaGVyOwogIGZpbmFsIF92YWxpZEtleTsKCiAgLy8gVE9ETyhrb2RhKTogQXNrIGdicmFjaGEgd2h5IEkgY2Fubm90IGhhdmUgZmllbGRzIF9lcXVhbHMvX2hhc2hDb2RlLgogIGludCBfaGFzaENvZGUoZSkgPT4gX2hhc2hlcihlKTsKICBib29sIF9lcXVhbHMoZTEsIGUyKSA9PiBfZXF1YWxpdHkoZTEsIGUyKTsKCiAgYm9vbCBjb250YWluc0tleShPYmplY3QgbykgPT4gX3ZhbGlkS2V5KG8pID8gc3VwZXIuY29udGFpbnNLZXkobykgOiBmYWxzZTsKICBWIG9wZXJhdG9yIFtdKE9iamVjdCBvKSA9PiBfdmFsaWRLZXkobykgPyBzdXBlcltvXSA6IG51bGw7CiAgViByZW1vdmUoT2JqZWN0IG8pID0+IF92YWxpZEtleShvKSA/IHN1cGVyLnJlbW92ZShvKSA6IG51bGw7CgogIF9Db21wYWN0TGlua2VkQ3VzdG9tSGFzaE1hcCh0aGlzLl9lcXVhbGl0eSwgdGhpcy5faGFzaGVyLCB2YWxpZEtleSkKICAgICAgOiBfdmFsaWRLZXkgPSAodmFsaWRLZXkgIT0gbnVsbCkgPyB2YWxpZEtleSA6IG5ldyBfVHlwZVRlc3Q8Sz4oKS50ZXN0LAogICAgICAgIHN1cGVyKF9IYXNoQmFzZS5fSU5JVElBTF9JTkRFWF9TSVpFKTsKfQoKLy8gSXRlcmF0ZXMgdGhyb3VnaCBfZGF0YVtfb2Zmc2V0ICsgX3N0ZXBdLCBfZGF0YVtfb2Zmc2V0ICsgMipfc3RlcF0sIC4uLgovLyBhbmQgY2hlY2tzIGZvciBjb25jdXJyZW50IG1vZGlmaWNhdGlvbi4KY2xhc3MgX0NvbXBhY3RJdGVyYWJsZTxFPiBleHRlbmRzIEl0ZXJhYmxlPEU+IHsKICBmaW5hbCBfSGFzaEJhc2UgX3RhYmxlOwogIGZpbmFsIExpc3QgX2RhdGE7CiAgZmluYWwgaW50IF9sZW47CiAgZmluYWwgaW50IF9vZmZzZXQ7CiAgZmluYWwgaW50IF9zdGVwOwoKICBfQ29tcGFjdEl0ZXJhYmxlKAogICAgICB0aGlzLl90YWJsZSwgdGhpcy5fZGF0YSwgdGhpcy5fbGVuLCB0aGlzLl9vZmZzZXQsIHRoaXMuX3N0ZXApOwoKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgPT4KICAgICAgbmV3IF9Db21wYWN0SXRlcmF0b3I8RT4oX3RhYmxlLCBfZGF0YSwgX2xlbiwgX29mZnNldCwgX3N0ZXApOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfdGFibGUubGVuZ3RoOwogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gbGVuZ3RoID09IDA7CiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiAhaXNFbXB0eTsKfQoKY2xhc3MgX0NvbXBhY3RJdGVyYXRvcjxFPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPEU+IHsKICBmaW5hbCBfSGFzaEJhc2UgX3RhYmxlOwogIGZpbmFsIExpc3QgX2RhdGE7CiAgZmluYWwgaW50IF9sZW47CiAgaW50IF9vZmZzZXQ7CiAgZmluYWwgaW50IF9zdGVwOwogIGZpbmFsIGludCBfY2hlY2tTdW07CiAgRSBjdXJyZW50OwoKICBfQ29tcGFjdEl0ZXJhdG9yKAogICAgICBfSGFzaEJhc2UgdGFibGUsIHRoaXMuX2RhdGEsIHRoaXMuX2xlbiwgdGhpcy5fb2Zmc2V0LCB0aGlzLl9zdGVwKQogICAgICA6IF90YWJsZSA9IHRhYmxlLAogICAgICAgIF9jaGVja1N1bSA9IHRhYmxlLl9jaGVja1N1bTsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChfdGFibGUuX2lzTW9kaWZpZWRTaW5jZShfZGF0YSwgX2NoZWNrU3VtKSkgewogICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKF90YWJsZSk7CiAgICB9CiAgICBkbyB7CiAgICAgIF9vZmZzZXQgKz0gX3N0ZXA7CiAgICB9IHdoaWxlIChfb2Zmc2V0IDwgX2xlbiAmJiBfSGFzaEJhc2UuX2lzRGVsZXRlZChfZGF0YSwgX2RhdGFbX29mZnNldF0pKTsKICAgIGlmIChfb2Zmc2V0IDwgX2xlbikgewogICAgICBjdXJyZW50ID0gaW50ZXJuYWwudW5zYWZlQ2FzdDxFPihfZGF0YVtfb2Zmc2V0XSk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgY3VycmVudCA9IG51bGw7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCi8vIFNldCBpbXBsZW1lbnRhdGlvbiwgYW5hbG9nb3VzIHRvIF9Db21wYWN0TGlua2VkSGFzaE1hcC4KY2xhc3MgX0NvbXBhY3RMaW5rZWRIYXNoU2V0PEU+IGV4dGVuZHMgX0hhc2hGaWVsZEJhc2UKICAgIHdpdGggX0hhc2hCYXNlLCBfT3BlcmF0b3JFcXVhbHNBbmRIYXNoQ29kZSwgU2V0TWl4aW48RT4KICAgIGltcGxlbWVudHMgTGlua2VkSGFzaFNldDxFPiB7CiAgX0NvbXBhY3RMaW5rZWRIYXNoU2V0KCkgOiBzdXBlcihfSGFzaEJhc2UuX0lOSVRJQUxfSU5ERVhfU0laRSA+PiAxKSB7CiAgICBhc3NlcnQoX0hhc2hCYXNlLl9VTlVTRURfUEFJUiA9PSAwKTsKICB9CgogIHN0YXRpYyBTZXQ8Uj4gX25ld0VtcHR5PFI+KCkgPT4gbmV3IF9Db21wYWN0TGlua2VkSGFzaFNldDxSPigpOwoKICBTZXQ8Uj4gY2FzdDxSPigpID0+IFNldC5jYXN0RnJvbTxFLCBSPih0aGlzLCBuZXdTZXQ6IF9uZXdFbXB0eSk7CiAgaW50IGdldCBsZW5ndGggPT4gX3VzZWREYXRhIC0gX2RlbGV0ZWRLZXlzOwoKICBFIGdldCBmaXJzdCB7CiAgICBmb3IgKGludCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBfdXNlZERhdGE7IG9mZnNldCsrKSB7CiAgICAgIE9iamVjdCBjdXJyZW50ID0gX2RhdGFbb2Zmc2V0XTsKICAgICAgaWYgKCFfSGFzaEJhc2UuX2lzRGVsZXRlZChfZGF0YSwgY3VycmVudCkpIHsKICAgICAgICByZXR1cm4gY3VycmVudDsKICAgICAgfQogICAgfQogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGdldCBsYXN0IHsKICAgIGZvciAoaW50IG9mZnNldCA9IF91c2VkRGF0YSAtIDE7IG9mZnNldCA+PSAwOyBvZmZzZXQtLSkgewogICAgICBPYmplY3QgY3VycmVudCA9IF9kYXRhW29mZnNldF07CiAgICAgIGlmICghX0hhc2hCYXNlLl9pc0RlbGV0ZWQoX2RhdGEsIGN1cnJlbnQpKSB7CiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7CiAgICAgIH0KICAgIH0KICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgdm9pZCBfcmVoYXNoKCkgewogICAgaWYgKChfZGVsZXRlZEtleXMgPDwgMSkgPiBfdXNlZERhdGEpIHsKICAgICAgX2luaXQoX2luZGV4Lmxlbmd0aCwgX2hhc2hNYXNrLCBfZGF0YSwgX3VzZWREYXRhKTsKICAgIH0gZWxzZSB7CiAgICAgIF9pbml0KF9pbmRleC5sZW5ndGggPDwgMSwgX2hhc2hNYXNrID4+IDEsIF9kYXRhLCBfdXNlZERhdGEpOwogICAgfQogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIGlmICghaXNFbXB0eSkgewogICAgICBfaW5pdChfSGFzaEJhc2UuX0lOSVRJQUxfSU5ERVhfU0laRSwgX2hhc2hNYXNrLCBudWxsLCAwKTsKICAgIH0KICB9CgogIHZvaWQgX2luaXQoaW50IHNpemUsIGludCBoYXNoTWFzaywgTGlzdCBvbGREYXRhLCBpbnQgb2xkVXNlZCkgewogICAgX2luZGV4ID0gbmV3IFVpbnQzMkxpc3Qoc2l6ZSk7CiAgICBfaGFzaE1hc2sgPSBoYXNoTWFzazsKICAgIF9kYXRhID0gbmV3IExpc3Qoc2l6ZSA+PiAxKTsKICAgIF91c2VkRGF0YSA9IDA7CiAgICBfZGVsZXRlZEtleXMgPSAwOwogICAgaWYgKG9sZERhdGEgIT0gbnVsbCkgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9sZFVzZWQ7IGkgKz0gMSkgewogICAgICAgIHZhciBrZXkgPSBvbGREYXRhW2ldOwogICAgICAgIGlmICghX0hhc2hCYXNlLl9pc0RlbGV0ZWQob2xkRGF0YSwga2V5KSkgewogICAgICAgICAgYWRkKGtleSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBib29sIGFkZChFIGtleSkgewogICAgZmluYWwgaW50IHNpemUgPSBfaW5kZXgubGVuZ3RoOwogICAgZmluYWwgaW50IHNpemVNYXNrID0gc2l6ZSAtIDE7CiAgICBmaW5hbCBpbnQgbWF4RW50cmllcyA9IHNpemUgPj4gMTsKICAgIGZpbmFsIGludCBmdWxsSGFzaCA9IF9oYXNoQ29kZShrZXkpOwogICAgZmluYWwgaW50IGhhc2hQYXR0ZXJuID0gX0hhc2hCYXNlLl9oYXNoUGF0dGVybihmdWxsSGFzaCwgX2hhc2hNYXNrLCBzaXplKTsKICAgIGludCBpID0gX0hhc2hCYXNlLl9maXJzdFByb2JlKGZ1bGxIYXNoLCBzaXplTWFzayk7CiAgICBpbnQgZmlyc3REZWxldGVkID0gLTE7CiAgICBpbnQgcGFpciA9IF9pbmRleFtpXTsKICAgIHdoaWxlIChwYWlyICE9IF9IYXNoQmFzZS5fVU5VU0VEX1BBSVIpIHsKICAgICAgaWYgKHBhaXIgPT0gX0hhc2hCYXNlLl9ERUxFVEVEX1BBSVIpIHsKICAgICAgICBpZiAoZmlyc3REZWxldGVkIDwgMCkgewogICAgICAgICAgZmlyc3REZWxldGVkID0gaTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZmluYWwgaW50IGQgPSBoYXNoUGF0dGVybiBeIHBhaXI7CiAgICAgICAgaWYgKGQgPCBtYXhFbnRyaWVzICYmIF9lcXVhbHMoa2V5LCBfZGF0YVtkXSkpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaSA9IF9IYXNoQmFzZS5fbmV4dFByb2JlKGksIHNpemVNYXNrKTsKICAgICAgcGFpciA9IF9pbmRleFtpXTsKICAgIH0KICAgIGlmIChfdXNlZERhdGEgPT0gX2RhdGEubGVuZ3RoKSB7CiAgICAgIF9yZWhhc2goKTsKICAgICAgYWRkKGtleSk7CiAgICB9IGVsc2UgewogICAgICBmaW5hbCBpbnQgaW5zZXJ0aW9uUG9pbnQgPSAoZmlyc3REZWxldGVkID49IDApID8gZmlyc3REZWxldGVkIDogaTsKICAgICAgYXNzZXJ0KDEgPD0gaGFzaFBhdHRlcm4gJiYgaGFzaFBhdHRlcm4gPCAoMSA8PCAzMikpOwogICAgICBhc3NlcnQoKGhhc2hQYXR0ZXJuICYgX3VzZWREYXRhKSA9PSAwKTsKICAgICAgX2luZGV4W2luc2VydGlvblBvaW50XSA9IGhhc2hQYXR0ZXJuIHwgX3VzZWREYXRhOwogICAgICBfZGF0YVtfdXNlZERhdGErK10gPSBrZXk7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vIElmIGtleSBpcyBhYnNlbnQsIHJldHVybiBfZGF0YSAod2hpY2ggaXMgbmV2ZXIgYSB2YWx1ZSkuCiAgT2JqZWN0IF9nZXRLZXlPckRhdGEoT2JqZWN0IGtleSkgewogICAgZmluYWwgaW50IHNpemUgPSBfaW5kZXgubGVuZ3RoOwogICAgZmluYWwgaW50IHNpemVNYXNrID0gc2l6ZSAtIDE7CiAgICBmaW5hbCBpbnQgbWF4RW50cmllcyA9IHNpemUgPj4gMTsKICAgIGZpbmFsIGludCBmdWxsSGFzaCA9IF9oYXNoQ29kZShrZXkpOwogICAgZmluYWwgaW50IGhhc2hQYXR0ZXJuID0gX0hhc2hCYXNlLl9oYXNoUGF0dGVybihmdWxsSGFzaCwgX2hhc2hNYXNrLCBzaXplKTsKICAgIGludCBpID0gX0hhc2hCYXNlLl9maXJzdFByb2JlKGZ1bGxIYXNoLCBzaXplTWFzayk7CiAgICBpbnQgcGFpciA9IF9pbmRleFtpXTsKICAgIHdoaWxlIChwYWlyICE9IF9IYXNoQmFzZS5fVU5VU0VEX1BBSVIpIHsKICAgICAgaWYgKHBhaXIgIT0gX0hhc2hCYXNlLl9ERUxFVEVEX1BBSVIpIHsKICAgICAgICBmaW5hbCBpbnQgZCA9IGhhc2hQYXR0ZXJuIF4gcGFpcjsKICAgICAgICBpZiAoZCA8IG1heEVudHJpZXMgJiYgX2VxdWFscyhrZXksIF9kYXRhW2RdKSkgewogICAgICAgICAgcmV0dXJuIF9kYXRhW2RdOyAvLyBOb3RlOiBNdXN0IHJldHVybiB0aGUgZXhpc3Rpbmcga2V5LgogICAgICAgIH0KICAgICAgfQogICAgICBpID0gX0hhc2hCYXNlLl9uZXh0UHJvYmUoaSwgc2l6ZU1hc2spOwogICAgICBwYWlyID0gX2luZGV4W2ldOwogICAgfQogICAgcmV0dXJuIF9kYXRhOwogIH0KCiAgRSBsb29rdXAoT2JqZWN0IGtleSkgewogICAgdmFyIGsgPSBfZ2V0S2V5T3JEYXRhKGtleSk7CiAgICByZXR1cm4gaWRlbnRpY2FsKF9kYXRhLCBrKSA/IG51bGwgOiBrOwogIH0KCiAgYm9vbCBjb250YWlucyhPYmplY3Qga2V5KSA9PiAhaWRlbnRpY2FsKF9kYXRhLCBfZ2V0S2V5T3JEYXRhKGtleSkpOwoKICBib29sIHJlbW92ZShPYmplY3Qga2V5KSB7CiAgICBmaW5hbCBpbnQgc2l6ZSA9IF9pbmRleC5sZW5ndGg7CiAgICBmaW5hbCBpbnQgc2l6ZU1hc2sgPSBzaXplIC0gMTsKICAgIGZpbmFsIGludCBtYXhFbnRyaWVzID0gc2l6ZSA+PiAxOwogICAgZmluYWwgaW50IGZ1bGxIYXNoID0gX2hhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBpbnQgaGFzaFBhdHRlcm4gPSBfSGFzaEJhc2UuX2hhc2hQYXR0ZXJuKGZ1bGxIYXNoLCBfaGFzaE1hc2ssIHNpemUpOwogICAgaW50IGkgPSBfSGFzaEJhc2UuX2ZpcnN0UHJvYmUoZnVsbEhhc2gsIHNpemVNYXNrKTsKICAgIGludCBwYWlyID0gX2luZGV4W2ldOwogICAgd2hpbGUgKHBhaXIgIT0gX0hhc2hCYXNlLl9VTlVTRURfUEFJUikgewogICAgICBpZiAocGFpciAhPSBfSGFzaEJhc2UuX0RFTEVURURfUEFJUikgewogICAgICAgIGZpbmFsIGludCBkID0gaGFzaFBhdHRlcm4gXiBwYWlyOwogICAgICAgIGlmIChkIDwgbWF4RW50cmllcyAmJiBfZXF1YWxzKGtleSwgX2RhdGFbZF0pKSB7CiAgICAgICAgICBfaW5kZXhbaV0gPSBfSGFzaEJhc2UuX0RFTEVURURfUEFJUjsKICAgICAgICAgIF9IYXNoQmFzZS5fc2V0RGVsZXRlZEF0KF9kYXRhLCBkKTsKICAgICAgICAgICsrX2RlbGV0ZWRLZXlzOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGkgPSBfSGFzaEJhc2UuX25leHRQcm9iZShpLCBzaXplTWFzayk7CiAgICAgIHBhaXIgPSBfaW5kZXhbaV07CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgPT4KICAgICAgbmV3IF9Db21wYWN0SXRlcmF0b3I8RT4odGhpcywgX2RhdGEsIF91c2VkRGF0YSwgLTEsIDEpOwoKICAvLyBSZXR1cm5zIGEgc2V0IG9mIHRoZSBzYW1lIHR5cGUsIGFsdGhvdWdoIHRoaXMKICAvLyBpcyBub3QgcmVxdWlyZWQgYnkgdGhlIHNwZWMuIChGb3IgaW5zdGFuY2UsIGFsd2F5cyB1c2luZyBhbiBpZGVudGl0eSBzZXQKICAvLyB3b3VsZCBiZSB0ZWNobmljYWxseSBjb3JyZWN0LCBhbGJlaXQgc3VycHJpc2luZy4pCiAgU2V0PEU+IHRvU2V0KCkgPT4gbmV3IF9Db21wYWN0TGlua2VkSGFzaFNldDxFPigpLi5hZGRBbGwodGhpcyk7CgogIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBbX3JlaGFzaE9iamVjdHNdIChzZWUgYWJvdmUpLgogIHZvaWQgX3JlZ2VuZXJhdGVJbmRleCgpIHsKICAgIF9yZWhhc2goKTsKICB9Cn0KCmNsYXNzIF9Db21wYWN0TGlua2VkSWRlbnRpdHlIYXNoU2V0PEU+IGV4dGVuZHMgX0NvbXBhY3RMaW5rZWRIYXNoU2V0PEU+CiAgICB3aXRoIF9JZGVudGljYWxBbmRJZGVudGl0eUhhc2hDb2RlIHsKICBTZXQ8RT4gdG9TZXQoKSA9PiBuZXcgX0NvbXBhY3RMaW5rZWRJZGVudGl0eUhhc2hTZXQ8RT4oKS4uYWRkQWxsKHRoaXMpOwoKICBzdGF0aWMgU2V0PFI+IF9uZXdFbXB0eTxSPigpID0+IG5ldyBfQ29tcGFjdExpbmtlZElkZW50aXR5SGFzaFNldDxSPigpOwoKICBTZXQ8Uj4gY2FzdDxSPigpID0+IFNldC5jYXN0RnJvbTxFLCBSPih0aGlzLCBuZXdTZXQ6IF9uZXdFbXB0eSk7Cn0KCmNsYXNzIF9Db21wYWN0TGlua2VkQ3VzdG9tSGFzaFNldDxFPiBleHRlbmRzIF9Db21wYWN0TGlua2VkSGFzaFNldDxFPiB7CiAgZmluYWwgX2VxdWFsaXR5OwogIGZpbmFsIF9oYXNoZXI7CiAgZmluYWwgX3ZhbGlkS2V5OwoKICBpbnQgX2hhc2hDb2RlKGUpID0+IF9oYXNoZXIoZSk7CiAgYm9vbCBfZXF1YWxzKGUxLCBlMikgPT4gX2VxdWFsaXR5KGUxLCBlMik7CgogIGJvb2wgY29udGFpbnMoT2JqZWN0IG8pID0+IF92YWxpZEtleShvKSA/IHN1cGVyLmNvbnRhaW5zKG8pIDogZmFsc2U7CiAgRSBsb29rdXAoT2JqZWN0IG8pID0+IF92YWxpZEtleShvKSA/IHN1cGVyLmxvb2t1cChvKSA6IG51bGw7CiAgYm9vbCByZW1vdmUoT2JqZWN0IG8pID0+IF92YWxpZEtleShvKSA/IHN1cGVyLnJlbW92ZShvKSA6IGZhbHNlOwoKICBfQ29tcGFjdExpbmtlZEN1c3RvbUhhc2hTZXQodGhpcy5fZXF1YWxpdHksIHRoaXMuX2hhc2hlciwgdmFsaWRLZXkpCiAgICAgIDogX3ZhbGlkS2V5ID0gKHZhbGlkS2V5ICE9IG51bGwpID8gdmFsaWRLZXkgOiBuZXcgX1R5cGVUZXN0PEU+KCkudGVzdDsKCiAgU2V0PFI+IGNhc3Q8Uj4oKSA9PiBTZXQuY2FzdEZyb208RSwgUj4odGhpcyk7CiAgU2V0PEU+IHRvU2V0KCkgPT4KICAgICAgbmV3IF9Db21wYWN0TGlua2VkQ3VzdG9tSGFzaFNldDxFPihfZXF1YWxpdHksIF9oYXNoZXIsIF92YWxpZEtleSkKICAgICAgICAuLmFkZEFsbCh0aGlzKTsKfQqCmgBOTjwBDwEkAU4BUTMiJCUlIwQCASBQOk5LIVEiRQE6UQFNDgFDFQEdGAFNUSRCAgFJHUEeOR5FATQeOB5EATUeMR49ATQeOB5EATQePh5KAgFDSTRBMk1MTkFLLEkBRSUmAUJNGDMtHCYnBAFCMENHBAEVNydIJgQBRAE5OiMwFAQBTTAxOkABEgIBIyIkAgEmKy0CAUoaNwkYIxMjJR08TzUTFgQCAUAUGBU4ATUjIwETKylNOQ1LQwYEAREUQAYEAUtCJCkjGhwTFhstHjNRJgoIBgQBPBwrHD8jEyslBgQBOSURGQ07KConICIGBAFOLFAjJjcbGi0tIBwKDy4iJCgaDAoILRgGMwQBJiQpT00RGA0YKwYEASckKU9NERcGMBohGjIZDRgrBhIEARkkIyYpTzcaLS0uIiQoMS8kMxwaDAoILRgGEQQBPickIyYpTzcaLS0uIiQoIQwKCC0YBhIEAUsBHiJDBAElHE4YFQgGEgQBKRweHBUhBgQBGj4cPgIBQQkYIxMmJUoCAT8+JRMREwFJIi0BTT0/AUZNLgIBSiswGhQSFRMBFEUBHkQBIyMjAgEzGhQSDxMXDQEUSBglARQ1NQYJGE0aOBMNFhQGBAIBOzY8IkgpBAFCAUMuARA5JjMYCAYsBAEPPiYzGAgGLAQBEys5DUMGBAERFEAGBAFCIxohExYbLR4zFAoIBgQBFCQjJilPNxsaLS0gHAoPKjgYCggtGAYlERANSTsuOCAGEQQBPiUkIyYpTzcaLS0qOEIKCC0YBhIEARkgKwQBRgEcJCMmKU83Gi0tKjgvLRoXCggtGAYSBAEePgEzTjdCATwcDwQCAUgpSgFKAUMCAUgTERMBIi0BRz9DAUZNATAUSBgCASdkYXJ0OmNvbGxlY3Rpb24tcGF0Y2gvY29tcGFjdF9oYXNoLmRhcnRBb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvY29sbGVjdGlvbi9tYXBzLmRhcnStcC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmNvbGxlY3Rpb247CgovLy8gQmFzZSBjbGFzcyBmb3IgaW1wbGVtZW50aW5nIGEgW01hcF0uCi8vLwovLy8gVGhpcyBjbGFzcyBoYXMgYSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBhbGwgYnV0IGZpdmUgb2YgdGhlIG1lbWJlcnMgb2YKLy8vIFtNYXBdLgovLy8gQSBiYXNpYyBgTWFwYCBjbGFzcyBjYW4gYmUgaW1wbGVtZW50ZWQgYnkgZXh0ZW5kaW5nIHRoaXMgY2xhc3MgYW5kCi8vLyBpbXBsZW1lbnRpbmcgYGtleXNgLCBgb3BlcmF0b3JbXWAsIGBvcGVyYXRvcltdPWAsIGByZW1vdmVgIGFuZCBgY2xlYXJgLgovLy8gVGhlIHJlbWFpbmluZyBvcGVyYXRpb25zIGFyZSBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiB0aGVzZSBmaXZlLgovLy8KLy8vIFRoZSBga2V5c2AgaXRlcmFibGUgc2hvdWxkIGhhdmUgZWZmaWNpZW50IFtJdGVyYWJsZS5sZW5ndGhdIGFuZAovLy8gW0l0ZXJhYmxlLmNvbnRhaW5zXSBvcGVyYXRpb25zLCBhbmQgaXQgc2hvdWxkIGNhdGNoIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucwovLy8gb2YgdGhlIGtleXMgd2hpbGUgaXRlcmF0aW5nLgovLy8KLy8vIEEgbW9yZSBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24gaXMgdXN1YWxseSBwb3NzaWJsZSBieSBvdmVycmlkaW5nCi8vLyBzb21lIG9mIHRoZSBvdGhlciBtZW1iZXJzIGFzIHdlbGwuCmFic3RyYWN0IGNsYXNzIE1hcEJhc2U8SywgVj4gZXh0ZW5kcyBNYXBNaXhpbjxLLCBWPiB7CiAgc3RhdGljIFN0cmluZyBtYXBUb1N0cmluZyhNYXAgbSkgewogICAgLy8gUmV1c2VzIHRoZSBsaXN0IGluIEl0ZXJhYmxlQmFzZSBmb3IgZGV0ZWN0aW5nIHRvU3RyaW5nIGN5Y2xlcy4KICAgIGlmIChfaXNUb1N0cmluZ1Zpc2l0aW5nKG0pKSB7CiAgICAgIHJldHVybiAney4uLn0nOwogICAgfQoKICAgIHZhciByZXN1bHQgPSBTdHJpbmdCdWZmZXIoKTsKICAgIHRyeSB7CiAgICAgIF90b1N0cmluZ1Zpc2l0aW5nLmFkZChtKTsKICAgICAgcmVzdWx0LndyaXRlKCd7Jyk7CiAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgICBtLmZvckVhY2goKGssIHYpIHsKICAgICAgICBpZiAoIWZpcnN0KSB7CiAgICAgICAgICByZXN1bHQud3JpdGUoJywgJyk7CiAgICAgICAgfQogICAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgICAgcmVzdWx0LndyaXRlKGspOwogICAgICAgIHJlc3VsdC53cml0ZSgnOiAnKTsKICAgICAgICByZXN1bHQud3JpdGUodik7CiAgICAgIH0pOwogICAgICByZXN1bHQud3JpdGUoJ30nKTsKICAgIH0gZmluYWxseSB7CiAgICAgIGFzc2VydChpZGVudGljYWwoX3RvU3RyaW5nVmlzaXRpbmcubGFzdCwgbSkpOwogICAgICBfdG9TdHJpbmdWaXNpdGluZy5yZW1vdmVMYXN0KCk7CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogIH0KCiAgc3RhdGljIF9pZCh4KSA9PiB4OwoKICAvLy8gRmlsbHMgYSBbTWFwXSB3aXRoIGtleS92YWx1ZSBwYWlycyBjb21wdXRlZCBmcm9tIFtpdGVyYWJsZV0uCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgW01hcF0gY2xhc3NlcyBpbiB0aGUgbmFtZWQgY29uc3RydWN0b3IKICAvLy8gYGZyb21JdGVyYWJsZWAuCiAgc3RhdGljIHZvaWQgX2ZpbGxNYXBXaXRoTWFwcGVkSXRlcmFibGUoCiAgICAgIE1hcCBtYXAsIEl0ZXJhYmxlIGl0ZXJhYmxlLCBrZXkoZWxlbWVudCksIHZhbHVlKGVsZW1lbnQpKSB7CiAgICBrZXkgPz89IF9pZDsKICAgIHZhbHVlID8/PSBfaWQ7CgogICAgZm9yICh2YXIgZWxlbWVudCBpbiBpdGVyYWJsZSkgewogICAgICBtYXBba2V5KGVsZW1lbnQpXSA9IHZhbHVlKGVsZW1lbnQpOwogICAgfQogIH0KCiAgLy8vIEZpbGxzIGEgbWFwIGJ5IGFzc29jaWF0aW5nIHRoZSBba2V5c10gdG8gW3ZhbHVlc10uCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgW01hcF0gY2xhc3NlcyBpbiB0aGUgbmFtZWQgY29uc3RydWN0b3IKICAvLy8gYGZyb21JdGVyYWJsZXNgLgogIHN0YXRpYyB2b2lkIF9maWxsTWFwV2l0aEl0ZXJhYmxlcyhNYXAgbWFwLCBJdGVyYWJsZSBrZXlzLCBJdGVyYWJsZSB2YWx1ZXMpIHsKICAgIEl0ZXJhdG9yIGtleUl0ZXJhdG9yID0ga2V5cy5pdGVyYXRvcjsKICAgIEl0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSB2YWx1ZXMuaXRlcmF0b3I7CgogICAgYm9vbCBoYXNOZXh0S2V5ID0ga2V5SXRlcmF0b3IubW92ZU5leHQoKTsKICAgIGJvb2wgaGFzTmV4dFZhbHVlID0gdmFsdWVJdGVyYXRvci5tb3ZlTmV4dCgpOwoKICAgIHdoaWxlIChoYXNOZXh0S2V5ICYmIGhhc05leHRWYWx1ZSkgewogICAgICBtYXBba2V5SXRlcmF0b3IuY3VycmVudF0gPSB2YWx1ZUl0ZXJhdG9yLmN1cnJlbnQ7CiAgICAgIGhhc05leHRLZXkgPSBrZXlJdGVyYXRvci5tb3ZlTmV4dCgpOwogICAgICBoYXNOZXh0VmFsdWUgPSB2YWx1ZUl0ZXJhdG9yLm1vdmVOZXh0KCk7CiAgICB9CgogICAgaWYgKGhhc05leHRLZXkgfHwgaGFzTmV4dFZhbHVlKSB7CiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoIkl0ZXJhYmxlcyBkbyBub3QgaGF2ZSBzYW1lIGxlbmd0aC4iKTsKICAgIH0KICB9Cn0KCi8vLyBNaXhpbiBpbXBsZW1lbnRpbmcgYSBbTWFwXS4KLy8vCi8vLyBUaGlzIG1peGluIGhhcyBhIGJhc2ljIGltcGxlbWVudGF0aW9uIG9mIGFsbCBidXQgZml2ZSBvZiB0aGUgbWVtYmVycyBvZgovLy8gW01hcF0uCi8vLyBBIGJhc2ljIGBNYXBgIGNsYXNzIGNhbiBiZSBpbXBsZW1lbnRlZCBieSBtaXhpbiBpbiB0aGlzIGNsYXNzIGFuZAovLy8gaW1wbGVtZW50aW5nIGBrZXlzYCwgYG9wZXJhdG9yW11gLCBgb3BlcmF0b3JbXT1gLCBgcmVtb3ZlYCBhbmQgYGNsZWFyYC4KLy8vIFRoZSByZW1haW5pbmcgb3BlcmF0aW9ucyBhcmUgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgdGhlc2UgZml2ZS4KLy8vCi8vLyBUaGUgYGtleXNgIGl0ZXJhYmxlIHNob3VsZCBoYXZlIGVmZmljaWVudCBbSXRlcmFibGUubGVuZ3RoXSBhbmQKLy8vIFtJdGVyYWJsZS5jb250YWluc10gb3BlcmF0aW9ucywgYW5kIGl0IHNob3VsZCBjYXRjaCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMKLy8vIG9mIHRoZSBrZXlzIHdoaWxlIGl0ZXJhdGluZy4KLy8vCi8vLyBBIG1vcmUgZWZmaWNpZW50IGltcGxlbWVudGF0aW9uIGlzIHVzdWFsbHkgcG9zc2libGUgYnkgb3ZlcnJpZGluZwovLy8gc29tZSBvZiB0aGUgb3RoZXIgbWVtYmVycyBhcyB3ZWxsLgphYnN0cmFjdCBjbGFzcyBNYXBNaXhpbjxLLCBWPiBpbXBsZW1lbnRzIE1hcDxLLCBWPiB7CiAgSXRlcmFibGU8Sz4gZ2V0IGtleXM7CiAgViBvcGVyYXRvciBbXShPYmplY3Qga2V5KTsKICBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpOwogIFYgcmVtb3ZlKE9iamVjdCBrZXkpOwogIC8vIFRoZSBgY2xlYXJgIG9wZXJhdGlvbiBzaG91bGQgbm90IGJlIGJhc2VkIG9uIGByZW1vdmVgLgogIC8vIEl0IHNob3VsZCBjbGVhciB0aGUgbWFwIGV2ZW4gaWYgc29tZSBrZXlzIGFyZSBub3QgZXF1YWwgdG8gdGhlbXNlbHZlcy4KICB2b2lkIGNsZWFyKCk7CgogIE1hcDxSSywgUlY+IGNhc3Q8UkssIFJWPigpID0+IE1hcC5jYXN0RnJvbTxLLCBWLCBSSywgUlY+KHRoaXMpOwogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihLIGtleSwgViB2YWx1ZSkpIHsKICAgIGZvciAoSyBrZXkgaW4ga2V5cykgewogICAgICBhY3Rpb24oa2V5LCB0aGlzW2tleV0pOwogICAgfQogIH0KCiAgdm9pZCBhZGRBbGwoTWFwPEssIFY+IG90aGVyKSB7CiAgICBmb3IgKEsga2V5IGluIG90aGVyLmtleXMpIHsKICAgICAgdGhpc1trZXldID0gb3RoZXJba2V5XTsKICAgIH0KICB9CgogIGJvb2wgY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpIHsKICAgIGZvciAoSyBrZXkgaW4ga2V5cykgewogICAgICBpZiAodGhpc1trZXldID09IHZhbHVlKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgewogICAgaWYgKGNvbnRhaW5zS2V5KGtleSkpIHsKICAgICAgcmV0dXJuIHRoaXNba2V5XTsKICAgIH0KICAgIHJldHVybiB0aGlzW2tleV0gPSBpZkFic2VudCgpOwogIH0KCiAgViB1cGRhdGUoSyBrZXksIFYgdXBkYXRlKFYgdmFsdWUpLCB7ViBpZkFic2VudCgpfSkgewogICAgaWYgKHRoaXMuY29udGFpbnNLZXkoa2V5KSkgewogICAgICByZXR1cm4gdGhpc1trZXldID0gdXBkYXRlKHRoaXNba2V5XSk7CiAgICB9CiAgICBpZiAoaWZBYnNlbnQgIT0gbnVsbCkgewogICAgICByZXR1cm4gdGhpc1trZXldID0gaWZBYnNlbnQoKTsKICAgIH0KICAgIHRocm93IEFyZ3VtZW50RXJyb3IudmFsdWUoa2V5LCAia2V5IiwgIktleSBub3QgaW4gbWFwLiIpOwogIH0KCiAgdm9pZCB1cGRhdGVBbGwoViB1cGRhdGUoSyBrZXksIFYgdmFsdWUpKSB7CiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5rZXlzKSB7CiAgICAgIHRoaXNba2V5XSA9IHVwZGF0ZShrZXksIHRoaXNba2V5XSk7CiAgICB9CiAgfQoKICBJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZ2V0IGVudHJpZXMgewogICAgcmV0dXJuIGtleXMubWFwKChLIGtleSkgPT4gTWFwRW50cnk8SywgVj4oa2V5LCB0aGlzW2tleV0pKTsKICB9CgogIE1hcDxLMiwgVjI+IG1hcDxLMiwgVjI+KE1hcEVudHJ5PEsyLCBWMj4gdHJhbnNmb3JtKEsga2V5LCBWIHZhbHVlKSkgewogICAgdmFyIHJlc3VsdCA9IDxLMiwgVjI+e307CiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5rZXlzKSB7CiAgICAgIHZhciBlbnRyeSA9IHRyYW5zZm9ybShrZXksIHRoaXNba2V5XSk7CiAgICAgIHJlc3VsdFtlbnRyeS5rZXldID0gZW50cnkudmFsdWU7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCBhZGRFbnRyaWVzKEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBuZXdFbnRyaWVzKSB7CiAgICBmb3IgKHZhciBlbnRyeSBpbiBuZXdFbnRyaWVzKSB7CiAgICAgIHRoaXNbZW50cnkua2V5XSA9IGVudHJ5LnZhbHVlOwogICAgfQogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoSyBrZXksIFYgdmFsdWUpKSB7CiAgICB2YXIga2V5c1RvUmVtb3ZlID0gPEs+W107CiAgICBmb3IgKHZhciBrZXkgaW4ga2V5cykgewogICAgICBpZiAodGVzdChrZXksIHRoaXNba2V5XSkpIGtleXNUb1JlbW92ZS5hZGQoa2V5KTsKICAgIH0KICAgIGZvciAodmFyIGtleSBpbiBrZXlzVG9SZW1vdmUpIHsKICAgICAgdGhpcy5yZW1vdmUoa2V5KTsKICAgIH0KICB9CgogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgPT4ga2V5cy5jb250YWlucyhrZXkpOwogIGludCBnZXQgbGVuZ3RoID0+IGtleXMubGVuZ3RoOwogIGJvb2wgZ2V0IGlzRW1wdHkgPT4ga2V5cy5pc0VtcHR5OwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4ga2V5cy5pc05vdEVtcHR5OwogIEl0ZXJhYmxlPFY+IGdldCB2YWx1ZXMgPT4gX01hcEJhc2VWYWx1ZUl0ZXJhYmxlPEssIFY+KHRoaXMpOwogIFN0cmluZyB0b1N0cmluZygpID0+IE1hcEJhc2UubWFwVG9TdHJpbmcodGhpcyk7Cn0KCi8vLyBCYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBhbiB1bm1vZGlmaWFibGUgW01hcF0uCi8vLwovLy8gVGhpcyBjbGFzcyBoYXMgYSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBhbGwgYnV0IHR3byBvZiB0aGUgbWVtYmVycyBvZgovLy8gYW4gdW1vZGlmaWFibGUgW01hcF0uCi8vLyBBIHNpbXBsZSB1bm1vZGlmaWFibGUgYE1hcGAgY2xhc3MgY2FuIGJlIGltcGxlbWVudGVkIGJ5IGV4dGVuZGluZyB0aGlzCi8vLyBjbGFzcyBhbmQgaW1wbGVtZW50aW5nIGBrZXlzYCBhbmQgYG9wZXJhdG9yW11gLgovLy8KLy8vIE1vZGlmeWluZyBvcGVyYXRpb25zIHRocm93IHdoZW4gdXNlZC4KLy8vIFRoZSByZW1haW5pbmcgbm9uLW1vZGlmeWluZyBvcGVyYXRpb25zIGFyZSBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBga2V5c2AKLy8vIGFuZCBgb3BlcmF0b3JbXWAuCi8vLwovLy8gVGhlIGBrZXlzYCBpdGVyYWJsZSBzaG91bGQgaGF2ZSBlZmZpY2llbnQgW0l0ZXJhYmxlLmxlbmd0aF0gYW5kCi8vLyBbSXRlcmFibGUuY29udGFpbnNdIG9wZXJhdGlvbnMsIGFuZCBpdCBzaG91bGQgY2F0Y2ggY29uY3VycmVudCBtb2RpZmljYXRpb25zCi8vLyBvZiB0aGUga2V5cyB3aGlsZSBpdGVyYXRpbmcuCi8vLwovLy8gQSBtb3JlIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbiBpcyB1c3VhbGx5IHBvc3NpYmxlIGJ5IG92ZXJyaWRpbmcKLy8vIHNvbWUgb2YgdGhlIG90aGVyIG1lbWJlcnMgYXMgd2VsbC4KYWJzdHJhY3QgY2xhc3MgVW5tb2RpZmlhYmxlTWFwQmFzZTxLLCBWPiA9IE1hcEJhc2U8SywgVj4KICAgIHdpdGggX1VubW9kaWZpYWJsZU1hcE1peGluPEssIFY+OwoKLy8vIEltcGxlbWVudGF0aW9uIG9mIFtNYXAudmFsdWVzXSBiYXNlZCBvbiB0aGUgbWFwIGFuZCBpdHMgW01hcC5rZXlzXSBpdGVyYWJsZS4KLy8vCi8vLyBJdGVyYWJsZSB0aGF0IGl0ZXJhdGVzIG92ZXIgdGhlIHZhbHVlcyBvZiBhIGBNYXBgLgovLy8gSXQgYWNjZXNzZXMgdGhlIHZhbHVlcyBieSBpdGVyYXRpbmcgb3ZlciB0aGUga2V5cyBvZiB0aGUgbWFwLCBhbmQgdXNpbmcgdGhlCi8vLyBtYXAncyBgb3BlcmF0b3JbXWAgdG8gbG9va3VwIHRoZSBrZXlzLgpjbGFzcyBfTWFwQmFzZVZhbHVlSXRlcmFibGU8SywgVj4gZXh0ZW5kcyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxWPiB7CiAgZmluYWwgTWFwPEssIFY+IF9tYXA7CiAgX01hcEJhc2VWYWx1ZUl0ZXJhYmxlKHRoaXMuX21hcCk7CgogIGludCBnZXQgbGVuZ3RoID0+IF9tYXAubGVuZ3RoOwogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX21hcC5pc0VtcHR5OwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX21hcC5pc05vdEVtcHR5OwogIFYgZ2V0IGZpcnN0ID0+IF9tYXBbX21hcC5rZXlzLmZpcnN0XTsKICBWIGdldCBzaW5nbGUgPT4gX21hcFtfbWFwLmtleXMuc2luZ2xlXTsKICBWIGdldCBsYXN0ID0+IF9tYXBbX21hcC5rZXlzLmxhc3RdOwoKICBJdGVyYXRvcjxWPiBnZXQgaXRlcmF0b3IgPT4gX01hcEJhc2VWYWx1ZUl0ZXJhdG9yPEssIFY+KF9tYXApOwp9CgovLy8gSXRlcmF0b3IgY3JlYXRlZCBieSBbX01hcEJhc2VWYWx1ZUl0ZXJhYmxlXS4KLy8vCi8vLyBJdGVyYXRlcyBvdmVyIHRoZSB2YWx1ZXMgb2YgYSBtYXAgYnkgaXRlcmF0aW5nIGl0cyBrZXlzIGFuZCBsb29rdXAgdXAgdGhlCi8vLyB2YWx1ZXMuCmNsYXNzIF9NYXBCYXNlVmFsdWVJdGVyYXRvcjxLLCBWPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPFY+IHsKICBmaW5hbCBJdGVyYXRvcjxLPiBfa2V5czsKICBmaW5hbCBNYXA8SywgVj4gX21hcDsKICBWIF9jdXJyZW50OwoKICBfTWFwQmFzZVZhbHVlSXRlcmF0b3IoTWFwPEssIFY+IG1hcCkKICAgICAgOiBfbWFwID0gbWFwLAogICAgICAgIF9rZXlzID0gbWFwLmtleXMuaXRlcmF0b3I7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoX2tleXMubW92ZU5leHQoKSkgewogICAgICBfY3VycmVudCA9IF9tYXBbX2tleXMuY3VycmVudF07CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgX2N1cnJlbnQgPSBudWxsOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgViBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKfQoKLy8vIE1peGluIHRoYXQgb3ZlcnJpZGVzIG11dGF0aW5nIG1hcCBvcGVyYXRpb25zIHdpdGggaW1wbGVtZW50YXRpb25zIHRoYXQKLy8vIHRocm93LgphYnN0cmFjdCBjbGFzcyBfVW5tb2RpZmlhYmxlTWFwTWl4aW48SywgVj4gaW1wbGVtZW50cyBNYXA8SywgVj4gewogIC8vLyBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBtYXAuCiAgdm9pZCBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgdW5tb2RpZmlhYmxlIG1hcCIpOwogIH0KCiAgLy8vIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIG1hcC4KICB2b2lkIGFkZEFsbChNYXA8SywgVj4gb3RoZXIpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgdW5tb2RpZmlhYmxlIG1hcCIpOwogIH0KCiAgLy8vIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIG1hcC4KICB2b2lkIGFkZEVudHJpZXMoSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IGVudHJpZXMpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgdW5tb2RpZmlhYmxlIG1hcCIpOwogIH0KCiAgLy8vIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIG1hcC4KICB2b2lkIGNsZWFyKCkgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSB1bm1vZGlmaWFibGUgbWFwIik7CiAgfQoKICAvLy8gVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbWFwLgogIFYgcmVtb3ZlKE9iamVjdCBrZXkpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgdW5tb2RpZmlhYmxlIG1hcCIpOwogIH0KCiAgLy8vIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIG1hcC4KICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChLIGtleSwgViB2YWx1ZSkpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgdW5tb2RpZmlhYmxlIG1hcCIpOwogIH0KCiAgLy8vIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIG1hcC4KICBWIHB1dElmQWJzZW50KEsga2V5LCBWIGlmQWJzZW50KCkpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgdW5tb2RpZmlhYmxlIG1hcCIpOwogIH0KCiAgLy8vIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIG1hcC4KICBWIHVwZGF0ZShLIGtleSwgViB1cGRhdGUoViB2YWx1ZSksIHtWIGlmQWJzZW50KCl9KSB7CiAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IHVubW9kaWZpYWJsZSBtYXAiKTsKICB9CgogIC8vLyBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBtYXAuCiAgdm9pZCB1cGRhdGVBbGwoViB1cGRhdGUoSyBrZXksIFYgdmFsdWUpKSB7CiAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IHVubW9kaWZpYWJsZSBtYXAiKTsKICB9Cn0KCi8vLyBXcmFwcGVyIGFyb3VuZCBhIGNsYXNzIHRoYXQgaW1wbGVtZW50cyBbTWFwXSB0aGF0IG9ubHkgZXhwb3NlcyBgTWFwYAovLy8gbWVtYmVycy4KLy8vCi8vLyBBIHNpbXBsZSB3cmFwcGVyIHRoYXQgZGVsZWdhdGVzIGFsbCBgTWFwYCBtZW1iZXJzIHRvIHRoZSBtYXAgcHJvdmlkZWQgaW4gdGhlCi8vLyBjb25zdHJ1Y3Rvci4KLy8vCi8vLyBCYXNlIGZvciBkZWxlZ2F0aW5nIG1hcCBpbXBsZW1lbnRhdGlvbnMgbGlrZSBbVW5tb2RpZmlhYmxlTWFwVmlld10uCmNsYXNzIE1hcFZpZXc8SywgVj4gaW1wbGVtZW50cyBNYXA8SywgVj4gewogIGZpbmFsIE1hcDxLLCBWPiBfbWFwOwogIGNvbnN0IE1hcFZpZXcoTWFwPEssIFY+IG1hcCkgOiBfbWFwID0gbWFwOwoKICBNYXA8UkssIFJWPiBjYXN0PFJLLCBSVj4oKSA9PiBfbWFwLmNhc3Q8UkssIFJWPigpOwogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgPT4gX21hcFtrZXldOwogIHZvaWQgb3BlcmF0b3IgW109KEsga2V5LCBWIHZhbHVlKSB7CiAgICBfbWFwW2tleV0gPSB2YWx1ZTsKICB9CgogIHZvaWQgYWRkQWxsKE1hcDxLLCBWPiBvdGhlcikgewogICAgX21hcC5hZGRBbGwob3RoZXIpOwogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIF9tYXAuY2xlYXIoKTsKICB9CgogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgPT4gX21hcC5wdXRJZkFic2VudChrZXksIGlmQWJzZW50KTsKICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBrZXkpID0+IF9tYXAuY29udGFpbnNLZXkoa2V5KTsKICBib29sIGNvbnRhaW5zVmFsdWUoT2JqZWN0IHZhbHVlKSA9PiBfbWFwLmNvbnRhaW5zVmFsdWUodmFsdWUpOwogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihLIGtleSwgViB2YWx1ZSkpIHsKICAgIF9tYXAuZm9yRWFjaChhY3Rpb24pOwogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfbWFwLmlzRW1wdHk7CiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfbWFwLmlzTm90RW1wdHk7CiAgaW50IGdldCBsZW5ndGggPT4gX21hcC5sZW5ndGg7CiAgSXRlcmFibGU8Sz4gZ2V0IGtleXMgPT4gX21hcC5rZXlzOwogIFYgcmVtb3ZlKE9iamVjdCBrZXkpID0+IF9tYXAucmVtb3ZlKGtleSk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gX21hcC50b1N0cmluZygpOwogIEl0ZXJhYmxlPFY+IGdldCB2YWx1ZXMgPT4gX21hcC52YWx1ZXM7CgogIEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBnZXQgZW50cmllcyA9PiBfbWFwLmVudHJpZXM7CgogIHZvaWQgYWRkRW50cmllcyhJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZW50cmllcykgewogICAgX21hcC5hZGRFbnRyaWVzKGVudHJpZXMpOwogIH0KCiAgTWFwPEsyLCBWMj4gbWFwPEsyLCBWMj4oTWFwRW50cnk8SzIsIFYyPiB0cmFuc2Zvcm0oSyBrZXksIFYgdmFsdWUpKSA9PgogICAgICBfbWFwLm1hcDxLMiwgVjI+KHRyYW5zZm9ybSk7CgogIFYgdXBkYXRlKEsga2V5LCBWIHVwZGF0ZShWIHZhbHVlKSwge1YgaWZBYnNlbnQoKX0pID0+CiAgICAgIF9tYXAudXBkYXRlKGtleSwgdXBkYXRlLCBpZkFic2VudDogaWZBYnNlbnQpOwoKICB2b2lkIHVwZGF0ZUFsbChWIHVwZGF0ZShLIGtleSwgViB2YWx1ZSkpIHsKICAgIF9tYXAudXBkYXRlQWxsKHVwZGF0ZSk7CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChLIGtleSwgViB2YWx1ZSkpIHsKICAgIF9tYXAucmVtb3ZlV2hlcmUodGVzdCk7CiAgfQp9CgovLy8gVmlldyBvZiBhIFtNYXBdIHRoYXQgZGlzYWxsb3cgbW9kaWZ5aW5nIHRoZSBtYXAuCi8vLwovLy8gQSB3cmFwcGVyIGFyb3VuZCBhIGBNYXBgIHRoYXQgZm9yd2FyZHMgYWxsIG1lbWJlcnMgdG8gdGhlIG1hcCBwcm92aWRlZCBpbgovLy8gdGhlIGNvbnN0cnVjdG9yLCBleGNlcHQgZm9yIG9wZXJhdGlvbnMgdGhhdCBtb2RpZnkgdGhlIG1hcC4KLy8vIE1vZGlmeWluZyBvcGVyYXRpb25zIHRocm93IGluc3RlYWQuCmNsYXNzIFVubW9kaWZpYWJsZU1hcFZpZXc8SywgVj4gZXh0ZW5kcyBNYXBWaWV3PEssIFY+CiAgICB3aXRoIF9Vbm1vZGlmaWFibGVNYXBNaXhpbjxLLCBWPiB7CiAgVW5tb2RpZmlhYmxlTWFwVmlldyhNYXA8SywgVj4gbWFwKSA6IHN1cGVyKG1hcCk7CgogIE1hcDxSSywgUlY+IGNhc3Q8UkssIFJWPigpID0+CiAgICAgIFVubW9kaWZpYWJsZU1hcFZpZXc8UkssIFJWPihfbWFwLmNhc3Q8UkssIFJWPigpKTsKfQqBfgBOTjwBDwEZASkETAtHTEUERFEhBEYnNiVGIhYGASEKIBkZGRYeChcZHBkKGRA0JgYBHgQBFgFDBkQWKkIREwEkKgYEATkGRBdPKi4BLjIBKTgrLwYBJkEGBAIBIARMC0ZMRQREUSEERic1GB0gGDxMEAFCLhoeBgQBISAeBgQBJRorBhIEASccGAYjBAE3ISwGHCUGPgQBLSEqBgQBKUAEAUgdIS0nBhMEATkkJQYEATAeHDcGJBgGBAE2ISQqPzICATMESxpLNAQqThYERFEhBEYnOSYBUQQ3UCtHGCQBISQqKComAUECATEETgw7GxgOAScUIwEUHCYTBhUSBAEdAgFLC0I+Jj4EAT4hPgQBPjY+BAE+ET4EAT4ZPgQBPjA+BAE+Jz4EAT43PgQBPi0+BAIBSQ0EUREESCsYLQE1KiYXBAEhGAQBERIEAUk5QS4aBAEkKiElLCgpATgBNh4EAUkjATg0AS0cBAEwHAQCATUETkAoNiczASA4AgEZZGFydDpjb2xsZWN0aW9uL21hcHMuZGFydEBvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9jb2xsZWN0aW9uL3NldC5kYXJ0wABBkS8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKLy8vIEJhc2UgaW1wbGVtZW50YXRpb25zIG9mIFtTZXRdLgpwYXJ0IG9mIGRhcnQuY29sbGVjdGlvbjsKCi8vLyBNaXhpbiBpbXBsZW1lbnRhdGlvbiBvZiBbU2V0XS4KLy8vCi8vLyBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBhIGBTZXRgIHRoYXQgZGVwZW5kcyBvbmx5Ci8vLyBvbiB0aGUgYWJzdHJhY3QgbWVtYmVyczogW2FkZF0sIFtjb250YWluc10sIFtsb29rdXBdLCBbcmVtb3ZlXSwKLy8vIFtpdGVyYXRvcl0sIFtsZW5ndGhdIGFuZCBbdG9TZXRdLgovLy8KLy8vIFNvbWUgb2YgdGhlIG1ldGhvZHMgYXNzdW1lIHRoYXQgYHRvU2V0YCBjcmVhdGVzIGEgbW9kaWZpYWJsZSBzZXQuCi8vLyBJZiB1c2luZyB0aGlzIG1peGluIGZvciBhbiB1bm1vZGlmaWFibGUgc2V0LAovLy8gd2hlcmUgYHRvU2V0YCBzaG91bGQgcmV0dXJuIGFuIHVubW9kaWZpYWJsZSBzZXQsCi8vLyBpdCdzIG5lY2Vzc2FyeSB0byByZWltcGxlbWVudAovLy8gW3JldGFpbkFsbF0sIFt1bmlvbl0sIFtpbnRlcnNlY3Rpb25dIGFuZCBbZGlmZmVyZW5jZV0uCi8vLwovLy8gSW1wbGVtZW50YXRpb25zIG9mIGBTZXRgIHVzaW5nIHRoaXMgbWl4aW4gc2hvdWxkIGNvbnNpZGVyIGFsc28gaW1wbGVtZW50aW5nCi8vLyBgY2xlYXJgIGluIGNvbnN0YW50IHRpbWUuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdvcmtzIGJ5IHJlbW92aW5nIGV2ZXJ5Ci8vLyBlbGVtZW50LgphYnN0cmFjdCBjbGFzcyBTZXRNaXhpbjxFPiBpbXBsZW1lbnRzIFNldDxFPiB7CiAgLy8gVGhpcyBjbGFzcyByZWltcGxlbWVudHMgYWxsIG9mIFtJdGVyYWJsZU1peGluXS4KICAvLyBJZi93aGVuIERhcnQgbWl4aW5zIGdldCBtb3JlIHBvd2VyZnVsLCB3ZSBzaG91bGQganVzdCBjcmVhdGUgYSBzaW5nbGUKICAvLyBNaXhpbiBjbGFzcyBmcm9tIEl0ZXJhYmxlTWl4aW4gYW5kIHRoZSBuZXcgbWV0aG9kcyBvZiB0aGlzIGNsYXNzLgoKICBib29sIGFkZChFIHZhbHVlKTsKCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCk7CgogIEUgbG9va3VwKE9iamVjdCBlbGVtZW50KTsKCiAgYm9vbCByZW1vdmUoT2JqZWN0IHZhbHVlKTsKCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yOwoKICBTZXQ8RT4gdG9TZXQoKTsKCiAgaW50IGdldCBsZW5ndGg7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gbGVuZ3RoID09IDA7CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gbGVuZ3RoICE9IDA7CgogIFNldDxSPiBjYXN0PFI+KCkgPT4gU2V0LmNhc3RGcm9tPEUsIFI+KHRoaXMpOwogIEl0ZXJhYmxlPEU+IGZvbGxvd2VkQnkoSXRlcmFibGU8RT4gb3RoZXIpID0+CiAgICAgIEZvbGxvd2VkQnlJdGVyYWJsZTxFPi5maXJzdEVmZmljaWVudCh0aGlzLCBvdGhlcik7CgogIEl0ZXJhYmxlPFQ+IHdoZXJlVHlwZTxUPigpID0+IFdoZXJlVHlwZUl0ZXJhYmxlPFQ+KHRoaXMpOwoKICB2b2lkIGNsZWFyKCkgewogICAgcmVtb3ZlQWxsKHRvTGlzdCgpKTsKICB9CgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiBlbGVtZW50cykgYWRkKGVsZW1lbnQpOwogIH0KCiAgdm9pZCByZW1vdmVBbGwoSXRlcmFibGU8T2JqZWN0PiBlbGVtZW50cykgewogICAgZm9yIChPYmplY3QgZWxlbWVudCBpbiBlbGVtZW50cykgcmVtb3ZlKGVsZW1lbnQpOwogIH0KCiAgdm9pZCByZXRhaW5BbGwoSXRlcmFibGU8T2JqZWN0PiBlbGVtZW50cykgewogICAgLy8gQ3JlYXRlIGEgY29weSBvZiB0aGUgc2V0LCByZW1vdmUgYWxsIG9mIGVsZW1lbnRzIGZyb20gdGhlIGNvcHksCiAgICAvLyB0aGVuIHJlbW92ZSBhbGwgcmVtYWluaW5nIGVsZW1lbnRzIGluIGNvcHkgZnJvbSB0aGlzLgogICAgU2V0PEU+IHRvUmVtb3ZlID0gdG9TZXQoKTsKICAgIGZvciAoT2JqZWN0IG8gaW4gZWxlbWVudHMpIHsKICAgICAgdG9SZW1vdmUucmVtb3ZlKG8pOwogICAgfQogICAgcmVtb3ZlQWxsKHRvUmVtb3ZlKTsKICB9CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIExpc3QgdG9SZW1vdmUgPSBbXTsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHRvUmVtb3ZlLmFkZChlbGVtZW50KTsKICAgIH0KICAgIHJlbW92ZUFsbCh0b1JlbW92ZSk7CiAgfQoKICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBMaXN0IHRvUmVtb3ZlID0gW107CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICghdGVzdChlbGVtZW50KSkgdG9SZW1vdmUuYWRkKGVsZW1lbnQpOwogICAgfQogICAgcmVtb3ZlQWxsKHRvUmVtb3ZlKTsKICB9CgogIGJvb2wgY29udGFpbnNBbGwoSXRlcmFibGU8T2JqZWN0PiBvdGhlcikgewogICAgZm9yIChPYmplY3QgbyBpbiBvdGhlcikgewogICAgICBpZiAoIWNvbnRhaW5zKG8pKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIFNldDxFPiB1bmlvbihTZXQ8RT4gb3RoZXIpIHsKICAgIHJldHVybiB0b1NldCgpLi5hZGRBbGwob3RoZXIpOwogIH0KCiAgU2V0PEU+IGludGVyc2VjdGlvbihTZXQ8T2JqZWN0PiBvdGhlcikgewogICAgU2V0PEU+IHJlc3VsdCA9IHRvU2V0KCk7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICghb3RoZXIuY29udGFpbnMoZWxlbWVudCkpIHJlc3VsdC5yZW1vdmUoZWxlbWVudCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU2V0PEU+IGRpZmZlcmVuY2UoU2V0PE9iamVjdD4gb3RoZXIpIHsKICAgIFNldDxFPiByZXN1bHQgPSB0b1NldCgpOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAob3RoZXIuY29udGFpbnMoZWxlbWVudCkpIHJlc3VsdC5yZW1vdmUoZWxlbWVudCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgTGlzdDxFPiB0b0xpc3Qoe2Jvb2wgZ3Jvd2FibGUgPSB0cnVlfSkgewogICAgTGlzdDxFPiByZXN1bHQgPSBncm93YWJsZSA/ICg8RT5bXS4ubGVuZ3RoID0gbGVuZ3RoKSA6IExpc3Q8RT4obGVuZ3RoKTsKICAgIGludCBpID0gMDsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHJlc3VsdFtpKytdID0gZWxlbWVudDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKEUgZWxlbWVudCkpID0+CiAgICAgIEVmZmljaWVudExlbmd0aE1hcHBlZEl0ZXJhYmxlPEUsIFQ+KHRoaXMsIGYpOwoKICBFIGdldCBzaW5nbGUgewogICAgaWYgKGxlbmd0aCA+IDEpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgIEl0ZXJhdG9yPEU+IGl0ID0gaXRlcmF0b3I7CiAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgRSByZXN1bHQgPSBpdC5jdXJyZW50OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+IEl0ZXJhYmxlQmFzZS5pdGVyYWJsZVRvRnVsbFN0cmluZyh0aGlzLCAneycsICd9Jyk7CgogIC8vIENvcGllZCBmcm9tIEl0ZXJhYmxlTWl4aW4uCiAgLy8gU2hvdWxkIGJlIGluaGVyaXRlZCBpZiB3ZSBoYWQgbXVsdGktbGV2ZWwgbWl4aW5zLgoKICBJdGVyYWJsZTxFPiB3aGVyZShib29sIGYoRSBlbGVtZW50KSkgPT4gV2hlcmVJdGVyYWJsZTxFPih0aGlzLCBmKTsKCiAgSXRlcmFibGU8VD4gZXhwYW5kPFQ+KEl0ZXJhYmxlPFQ+IGYoRSBlbGVtZW50KSkgPT4KICAgICAgRXhwYW5kSXRlcmFibGU8RSwgVD4odGhpcywgZik7CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoRSBlbGVtZW50KSkgewogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgZihlbGVtZW50KTsKICB9CgogIEUgcmVkdWNlKEUgY29tYmluZShFIHZhbHVlLCBFIGVsZW1lbnQpKSB7CiAgICBJdGVyYXRvcjxFPiBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3I7CiAgICBpZiAoIWl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB9CiAgICBFIHZhbHVlID0gaXRlcmF0b3IuY3VycmVudDsKICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgaXRlcmF0b3IuY3VycmVudCk7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBUIGZvbGQ8VD4oVCBpbml0aWFsVmFsdWUsIFQgY29tYmluZShUIHByZXZpb3VzVmFsdWUsIEUgZWxlbWVudCkpIHsKICAgIHZhciB2YWx1ZSA9IGluaXRpYWxWYWx1ZTsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgZWxlbWVudCk7CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBib29sIGV2ZXJ5KGJvb2wgZihFIGVsZW1lbnQpKSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICghZihlbGVtZW50KSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBTdHJpbmcgam9pbihbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgewogICAgSXRlcmF0b3I8RT4gaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yOwogICAgaWYgKCFpdGVyYXRvci5tb3ZlTmV4dCgpKSByZXR1cm4gIiI7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gU3RyaW5nQnVmZmVyKCk7CiAgICBpZiAoc2VwYXJhdG9yID09IG51bGwgfHwgc2VwYXJhdG9yID09ICIiKSB7CiAgICAgIGRvIHsKICAgICAgICBidWZmZXIud3JpdGUoaXRlcmF0b3IuY3VycmVudCk7CiAgICAgIH0gd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpOwogICAgfSBlbHNlIHsKICAgICAgYnVmZmVyLndyaXRlKGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICAgIGJ1ZmZlci53cml0ZShzZXBhcmF0b3IpOwogICAgICAgIGJ1ZmZlci53cml0ZShpdGVyYXRvci5jdXJyZW50KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgYm9vbCBhbnkoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgSXRlcmFibGU8RT4gdGFrZShpbnQgbikgewogICAgcmV0dXJuIFRha2VJdGVyYWJsZTxFPih0aGlzLCBuKTsKICB9CgogIEl0ZXJhYmxlPEU+IHRha2VXaGlsZShib29sIHRlc3QoRSB2YWx1ZSkpIHsKICAgIHJldHVybiBUYWtlV2hpbGVJdGVyYWJsZTxFPih0aGlzLCB0ZXN0KTsKICB9CgogIEl0ZXJhYmxlPEU+IHNraXAoaW50IG4pIHsKICAgIHJldHVybiBTa2lwSXRlcmFibGU8RT4odGhpcywgbik7CiAgfQoKICBJdGVyYWJsZTxFPiBza2lwV2hpbGUoYm9vbCB0ZXN0KEUgdmFsdWUpKSB7CiAgICByZXR1cm4gU2tpcFdoaWxlSXRlcmFibGU8RT4odGhpcywgdGVzdCk7CiAgfQoKICBFIGdldCBmaXJzdCB7CiAgICBJdGVyYXRvcjxFPiBpdCA9IGl0ZXJhdG9yOwogICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgfQogICAgcmV0dXJuIGl0LmN1cnJlbnQ7CiAgfQoKICBFIGdldCBsYXN0IHsKICAgIEl0ZXJhdG9yPEU+IGl0ID0gaXRlcmF0b3I7CiAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB9CiAgICBFIHJlc3VsdDsKICAgIGRvIHsKICAgICAgcmVzdWx0ID0gaXQuY3VycmVudDsKICAgIH0gd2hpbGUgKGl0Lm1vdmVOZXh0KCkpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEUgZmlyc3RXaGVyZShib29sIHRlc3QoRSB2YWx1ZSksIHtFIG9yRWxzZSgpfSkgewogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAodGVzdChlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBsYXN0V2hlcmUoYm9vbCB0ZXN0KEUgdmFsdWUpLCB7RSBvckVsc2UoKX0pIHsKICAgIEUgcmVzdWx0OwogICAgYm9vbCBmb3VuZE1hdGNoaW5nID0gZmFsc2U7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsKICAgICAgICBmb3VuZE1hdGNoaW5nID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHJldHVybiByZXN1bHQ7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBzaW5nbGVXaGVyZShib29sIHRlc3QoRSB2YWx1ZSksIHtFIG9yRWxzZSgpfSkgewogICAgRSByZXN1bHQ7CiAgICBib29sIGZvdW5kTWF0Y2hpbmcgPSBmYWxzZTsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHsKICAgICAgICBpZiAoZm91bmRNYXRjaGluZykgewogICAgICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vTWFueSgpOwogICAgICAgIH0KICAgICAgICByZXN1bHQgPSBlbGVtZW50OwogICAgICAgIGZvdW5kTWF0Y2hpbmcgPSB0cnVlOwogICAgICB9CiAgICB9CiAgICBpZiAoZm91bmRNYXRjaGluZykgcmV0dXJuIHJlc3VsdDsKICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGVsZW1lbnRBdChpbnQgaW5kZXgpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGluZGV4LCAiaW5kZXgiKTsKICAgIFJhbmdlRXJyb3IuY2hlY2tOb3ROZWdhdGl2ZShpbmRleCwgImluZGV4Iik7CiAgICBpbnQgZWxlbWVudEluZGV4ID0gMDsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKGluZGV4ID09IGVsZW1lbnRJbmRleCkgcmV0dXJuIGVsZW1lbnQ7CiAgICAgIGVsZW1lbnRJbmRleCsrOwogICAgfQogICAgdGhyb3cgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4IiwgbnVsbCwgZWxlbWVudEluZGV4KTsKICB9Cn0KCi8vLyBCYXNlIGltcGxlbWVudGF0aW9uIG9mIFtTZXRdLgovLy8KLy8vIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGEgYFNldGAgdGhhdCBkZXBlbmRzIG9ubHkKLy8vIG9uIHRoZSBhYnN0cmFjdCBtZW1iZXJzOiBbYWRkXSwgW2NvbnRhaW5zXSwgW2xvb2t1cF0sIFtyZW1vdmVdLAovLy8gW2l0ZXJhdG9yXSwgW2xlbmd0aF0gYW5kIFt0b1NldF0uCi8vLwovLy8gU29tZSBvZiB0aGUgbWV0aG9kcyBhc3N1bWUgdGhhdCBgdG9TZXRgIGNyZWF0ZXMgYSBtb2RpZmlhYmxlIHNldC4KLy8vIElmIHVzaW5nIHRoaXMgYmFzZSBjbGFzcyBmb3IgYW4gdW5tb2RpZmlhYmxlIHNldCwKLy8vIHdoZXJlIGB0b1NldGAgc2hvdWxkIHJldHVybiBhbiB1bm1vZGlmaWFibGUgc2V0LAovLy8gaXQncyBuZWNlc3NhcnkgdG8gcmVpbXBsZW1lbnQKLy8vIFtyZXRhaW5BbGxdLCBbdW5pb25dLCBbaW50ZXJzZWN0aW9uXSBhbmQgW2RpZmZlcmVuY2VdLgovLy8KLy8vIEltcGxlbWVudGF0aW9ucyBvZiBgU2V0YCB1c2luZyB0aGlzIGJhc2Ugc2hvdWxkIGNvbnNpZGVyIGFsc28gaW1wbGVtZW50aW5nCi8vLyBgY2xlYXJgIGluIGNvbnN0YW50IHRpbWUuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdvcmtzIGJ5IHJlbW92aW5nIGV2ZXJ5Ci8vLyBlbGVtZW50LgphYnN0cmFjdCBjbGFzcyBTZXRCYXNlPEU+IGV4dGVuZHMgT2JqZWN0IHdpdGggU2V0TWl4aW48RT4gewogIC8vLyBDb252ZXJ0cyBhIFtTZXRdIHRvIGEgW1N0cmluZ10uCiAgLy8vCiAgLy8vIENvbnZlcnRzIFtzZXRdIHRvIGEgc3RyaW5nIGJ5IGNvbnZlcnRpbmcgZWFjaCBlbGVtZW50IHRvIGEgc3RyaW5nIChieQogIC8vLyBjYWxsaW5nIFtPYmplY3QudG9TdHJpbmddKSwgam9pbmluZyB0aGVtIHdpdGggIiwgIiwgYW5kIHdyYXBwaW5nIHRoZQogIC8vLyByZXN1bHQgaW4gInsiIGFuZCAifSIuCiAgLy8vCiAgLy8vIEhhbmRsZXMgY2lyY3VsYXIgcmVmZXJlbmNlcyB3aGVyZSBjb252ZXJ0aW5nIG9uZSBvZiB0aGUgZWxlbWVudHMKICAvLy8gdG8gYSBzdHJpbmcgZW5kcyB1cCBjb252ZXJ0aW5nIFtzZXRdIHRvIGEgc3RyaW5nIGFnYWluLgogIHN0YXRpYyBTdHJpbmcgc2V0VG9TdHJpbmcoU2V0IHNldCkgPT4KICAgICAgSXRlcmFibGVCYXNlLml0ZXJhYmxlVG9GdWxsU3RyaW5nKHNldCwgJ3snLCAnfScpOwp9CgovLy8gQ29tbW9uIGludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIHNvbWUgW1NldF0gbWV0aG9kcy4KLy8gVE9ETygzNTU0OCk6IE1ha2UgdGhpcyBtaXgtaW4gU2V0TWl4aW4sIGJ5IGFkZGluZyBgd2l0aCBTZXRNaXhpbjxFPmAKLy8gYW5kIHJlbW92aW5nIHRoZSBjb3BpZWQgbWVtYmVycyBiZWxvdywKLy8gd2hlbiBhbmFseXplciBzdXBwb3J0cyBjb25zdCBjb25zdHJ1Y3RvcnMgZm9yIG1peGluIGFwcGxpY2F0aW9ucy4KYWJzdHJhY3QgY2xhc3MgX1NldEJhc2U8RT4gaW1wbGVtZW50cyBTZXQ8RT4gewogIC8vIFRoZSBmb2xsb3dpbmcgdHdvIG1ldGhvZHMgb3ZlcnJpZGUgdGhlIG9uZXMgaW4gU2V0QmFzZS4KICAvLyBJdCdzIHBvc3NpYmxlIHRvIGJlIG1vcmUgZWZmaWNpZW50IGlmIHdlIGhhdmUgYSB3YXkgdG8gY3JlYXRlIGFuIGVtcHR5CiAgLy8gc2V0IG9mIHRoZSBjb3JyZWN0IHR5cGUuCiAgY29uc3QgX1NldEJhc2UoKTsKCiAgU2V0PEU+IF9uZXdTZXQoKTsKCiAgU2V0PFI+IF9uZXdTaW1pbGFyU2V0PFI+KCk7CgogIFNldDxSPiBjYXN0PFI+KCkgPT4gU2V0LmNhc3RGcm9tPEUsIFI+KHRoaXMsIG5ld1NldDogX25ld1NpbWlsYXJTZXQpOwoKICBTZXQ8RT4gZGlmZmVyZW5jZShTZXQ8T2JqZWN0PiBvdGhlcikgewogICAgU2V0PEU+IHJlc3VsdCA9IF9uZXdTZXQoKTsKICAgIGZvciAodmFyIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAoIW90aGVyLmNvbnRhaW5zKGVsZW1lbnQpKSByZXN1bHQuYWRkKGVsZW1lbnQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFNldDxFPiBpbnRlcnNlY3Rpb24oU2V0PE9iamVjdD4gb3RoZXIpIHsKICAgIFNldDxFPiByZXN1bHQgPSBfbmV3U2V0KCk7CiAgICBmb3IgKHZhciBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKG90aGVyLmNvbnRhaW5zKGVsZW1lbnQpKSByZXN1bHQuYWRkKGVsZW1lbnQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIFN1YmNsYXNzZXMgY2FuIG9wdGltaXplIHRoaXMgZnVydGhlci4KICBTZXQ8RT4gdG9TZXQoKSA9PiBfbmV3U2V0KCkuLmFkZEFsbCh0aGlzKTsKCiAgLy8vIFRPRE8oMzU1NDgpOiBSZW1vdmUgdGhlIGZvbGxvd2luZyBkZWNsYXJhdGlvbnMgYWdhaW4gd2hlbiB0aGUgYW5hbHl6ZXIKICAvLy8gc3VwcG9ydHMgbWl4aW5zIHdpdGggY29uc3QgY29uc3RydWN0b3JzLCBhbmQgbWl4IGluIGBTZXRNaXhpbmAgaW5zdGVhZC4KCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBsZW5ndGggPT0gMDsKCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBsZW5ndGggIT0gMDsKCiAgSXRlcmFibGU8RT4gZm9sbG93ZWRCeShJdGVyYWJsZTxFPiBvdGhlcikgPT4KICAgICAgRm9sbG93ZWRCeUl0ZXJhYmxlPEU+LmZpcnN0RWZmaWNpZW50KHRoaXMsIG90aGVyKTsKCiAgSXRlcmFibGU8VD4gd2hlcmVUeXBlPFQ+KCkgPT4gV2hlcmVUeXBlSXRlcmFibGU8VD4odGhpcyk7CgogIHZvaWQgY2xlYXIoKSB7CiAgICByZW1vdmVBbGwodG9MaXN0KCkpOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gZWxlbWVudHMpIHsKICAgIGZvciAoRSBlbGVtZW50IGluIGVsZW1lbnRzKSBhZGQoZWxlbWVudCk7CiAgfQoKICB2b2lkIHJlbW92ZUFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKSB7CiAgICBmb3IgKE9iamVjdCBlbGVtZW50IGluIGVsZW1lbnRzKSByZW1vdmUoZWxlbWVudCk7CiAgfQoKICB2b2lkIHJldGFpbkFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKSB7CiAgICAvLyBDcmVhdGUgYSBjb3B5IG9mIHRoZSBzZXQsIHJlbW92ZSBhbGwgb2YgZWxlbWVudHMgZnJvbSB0aGUgY29weSwKICAgIC8vIHRoZW4gcmVtb3ZlIGFsbCByZW1haW5pbmcgZWxlbWVudHMgaW4gY29weSBmcm9tIHRoaXMuCiAgICBTZXQ8RT4gdG9SZW1vdmUgPSB0b1NldCgpOwogICAgZm9yIChPYmplY3QgbyBpbiBlbGVtZW50cykgewogICAgICB0b1JlbW92ZS5yZW1vdmUobyk7CiAgICB9CiAgICByZW1vdmVBbGwodG9SZW1vdmUpOwogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgTGlzdCB0b1JlbW92ZSA9IFtdOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAodGVzdChlbGVtZW50KSkgdG9SZW1vdmUuYWRkKGVsZW1lbnQpOwogICAgfQogICAgcmVtb3ZlQWxsKHRvUmVtb3ZlKTsKICB9CgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIExpc3QgdG9SZW1vdmUgPSBbXTsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKCF0ZXN0KGVsZW1lbnQpKSB0b1JlbW92ZS5hZGQoZWxlbWVudCk7CiAgICB9CiAgICByZW1vdmVBbGwodG9SZW1vdmUpOwogIH0KCiAgYm9vbCBjb250YWluc0FsbChJdGVyYWJsZTxPYmplY3Q+IG90aGVyKSB7CiAgICBmb3IgKE9iamVjdCBvIGluIG90aGVyKSB7CiAgICAgIGlmICghY29udGFpbnMobykpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgU2V0PEU+IHVuaW9uKFNldDxFPiBvdGhlcikgewogICAgcmV0dXJuIHRvU2V0KCkuLmFkZEFsbChvdGhlcik7CiAgfQoKICBMaXN0PEU+IHRvTGlzdCh7Ym9vbCBncm93YWJsZSA9IHRydWV9KSB7CiAgICBMaXN0PEU+IHJlc3VsdCA9IGdyb3dhYmxlID8gKDxFPltdLi5sZW5ndGggPSBsZW5ndGgpIDogTGlzdDxFPihsZW5ndGgpOwogICAgaW50IGkgPSAwOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgcmVzdWx0W2krK10gPSBlbGVtZW50OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEl0ZXJhYmxlPFQ+IG1hcDxUPihUIGYoRSBlbGVtZW50KSkgPT4KICAgICAgRWZmaWNpZW50TGVuZ3RoTWFwcGVkSXRlcmFibGU8RSwgVD4odGhpcywgZik7CgogIEUgZ2V0IHNpbmdsZSB7CiAgICBpZiAobGVuZ3RoID4gMSkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vTWFueSgpOwogICAgSXRlcmF0b3I8RT4gaXQgPSBpdGVyYXRvcjsKICAgIGlmICghaXQubW92ZU5leHQoKSkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICBFIHJlc3VsdCA9IGl0LmN1cnJlbnQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gSXRlcmFibGVCYXNlLml0ZXJhYmxlVG9GdWxsU3RyaW5nKHRoaXMsICd7JywgJ30nKTsKCiAgSXRlcmFibGU8RT4gd2hlcmUoYm9vbCBmKEUgZWxlbWVudCkpID0+IFdoZXJlSXRlcmFibGU8RT4odGhpcywgZik7CgogIEl0ZXJhYmxlPFQ+IGV4cGFuZDxUPihJdGVyYWJsZTxUPiBmKEUgZWxlbWVudCkpID0+CiAgICAgIEV4cGFuZEl0ZXJhYmxlPEUsIFQ+KHRoaXMsIGYpOwoKICB2b2lkIGZvckVhY2godm9pZCBmKEUgZWxlbWVudCkpIHsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIGYoZWxlbWVudCk7CiAgfQoKICBFIHJlZHVjZShFIGNvbWJpbmUoRSB2YWx1ZSwgRSBlbGVtZW50KSkgewogICAgSXRlcmF0b3I8RT4gaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yOwogICAgaWYgKCFpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgfQogICAgRSB2YWx1ZSA9IGl0ZXJhdG9yLmN1cnJlbnQ7CiAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICB2YWx1ZSA9IGNvbWJpbmUodmFsdWUsIGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgVCBmb2xkPFQ+KFQgaW5pdGlhbFZhbHVlLCBUIGNvbWJpbmUoVCBwcmV2aW91c1ZhbHVlLCBFIGVsZW1lbnQpKSB7CiAgICB2YXIgdmFsdWUgPSBpbml0aWFsVmFsdWU7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB2YWx1ZSA9IGNvbWJpbmUodmFsdWUsIGVsZW1lbnQpOwogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgYm9vbCBldmVyeShib29sIGYoRSBlbGVtZW50KSkgewogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAoIWYoZWxlbWVudCkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgU3RyaW5nIGpvaW4oW1N0cmluZyBzZXBhcmF0b3IgPSAiIl0pIHsKICAgIEl0ZXJhdG9yPEU+IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjsKICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuICIiOwogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IFN0cmluZ0J1ZmZlcigpOwogICAgaWYgKHNlcGFyYXRvciA9PSBudWxsIHx8IHNlcGFyYXRvciA9PSAiIikgewogICAgICBkbyB7CiAgICAgICAgYnVmZmVyLndyaXRlKGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgICB9IHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKTsKICAgIH0gZWxzZSB7CiAgICAgIGJ1ZmZlci53cml0ZShpdGVyYXRvci5jdXJyZW50KTsKICAgICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgICBidWZmZXIud3JpdGUoc2VwYXJhdG9yKTsKICAgICAgICBidWZmZXIud3JpdGUoaXRlcmF0b3IuY3VycmVudCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIGJvb2wgYW55KGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEl0ZXJhYmxlPEU+IHRha2UoaW50IG4pIHsKICAgIHJldHVybiBUYWtlSXRlcmFibGU8RT4odGhpcywgbik7CiAgfQoKICBJdGVyYWJsZTxFPiB0YWtlV2hpbGUoYm9vbCB0ZXN0KEUgdmFsdWUpKSB7CiAgICByZXR1cm4gVGFrZVdoaWxlSXRlcmFibGU8RT4odGhpcywgdGVzdCk7CiAgfQoKICBJdGVyYWJsZTxFPiBza2lwKGludCBuKSB7CiAgICByZXR1cm4gU2tpcEl0ZXJhYmxlPEU+KHRoaXMsIG4pOwogIH0KCiAgSXRlcmFibGU8RT4gc2tpcFdoaWxlKGJvb2wgdGVzdChFIHZhbHVlKSkgewogICAgcmV0dXJuIFNraXBXaGlsZUl0ZXJhYmxlPEU+KHRoaXMsIHRlc3QpOwogIH0KCiAgRSBnZXQgZmlyc3QgewogICAgSXRlcmF0b3I8RT4gaXQgPSBpdGVyYXRvcjsKICAgIGlmICghaXQubW92ZU5leHQoKSkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIH0KICAgIHJldHVybiBpdC5jdXJyZW50OwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICBJdGVyYXRvcjxFPiBpdCA9IGl0ZXJhdG9yOwogICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgfQogICAgRSByZXN1bHQ7CiAgICBkbyB7CiAgICAgIHJlc3VsdCA9IGl0LmN1cnJlbnQ7CiAgICB9IHdoaWxlIChpdC5tb3ZlTmV4dCgpKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBFIGZpcnN0V2hlcmUoYm9vbCB0ZXN0KEUgdmFsdWUpLCB7RSBvckVsc2UoKX0pIHsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHJldHVybiBlbGVtZW50OwogICAgfQogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgbGFzdFdoZXJlKGJvb2wgdGVzdChFIHZhbHVlKSwge0Ugb3JFbHNlKCl9KSB7CiAgICBFIHJlc3VsdDsKICAgIGJvb2wgZm91bmRNYXRjaGluZyA9IGZhbHNlOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIHJlc3VsdCA9IGVsZW1lbnQ7CiAgICAgICAgZm91bmRNYXRjaGluZyA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIGlmIChmb3VuZE1hdGNoaW5nKSByZXR1cm4gcmVzdWx0OwogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgc2luZ2xlV2hlcmUoYm9vbCB0ZXN0KEUgdmFsdWUpLCB7RSBvckVsc2UoKX0pIHsKICAgIEUgcmVzdWx0OwogICAgYm9vbCBmb3VuZE1hdGNoaW5nID0gZmFsc2U7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHsKICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsKICAgICAgICBmb3VuZE1hdGNoaW5nID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHJldHVybiByZXN1bHQ7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBlbGVtZW50QXQoaW50IGluZGV4KSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChpbmRleCwgImluZGV4Iik7CiAgICBSYW5nZUVycm9yLmNoZWNrTm90TmVnYXRpdmUoaW5kZXgsICJpbmRleCIpOwogICAgaW50IGVsZW1lbnRJbmRleCA9IDA7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmIChpbmRleCA9PSBlbGVtZW50SW5kZXgpIHJldHVybiBlbGVtZW50OwogICAgICBlbGVtZW50SW5kZXgrKzsKICAgIH0KICAgIHRocm93IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIsIG51bGwsIGVsZW1lbnRJbmRleCk7CiAgfQp9CgovLy8gQ2xhc3MgdXNlZCB0byBpbXBsZW1lbnQgY29uc3Qgc2V0cy4KY2xhc3MgX1VubW9kaWZpYWJsZVNldDxFPiBleHRlbmRzIF9TZXRCYXNlPEU+IHsKICBmaW5hbCBNYXA8RSwgTnVsbD4gX21hcDsKCiAgY29uc3QgX1VubW9kaWZpYWJsZVNldCh0aGlzLl9tYXApOwoKICBTZXQ8RT4gX25ld1NldCgpID0+IExpbmtlZEhhc2hTZXQ8RT4oKTsKCiAgU2V0PFI+IF9uZXdTaW1pbGFyU2V0PFI+KCkgPT4gTGlua2VkSGFzaFNldDxSPigpOwoKICAvLyBMb29rdXBzIHVzZSBtYXAgbWV0aG9kcy4KCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgPT4gX21hcC5jb250YWluc0tleShlbGVtZW50KTsKCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yID0+IF9tYXAua2V5cy5pdGVyYXRvcjsKCiAgaW50IGdldCBsZW5ndGggPT4gX21hcC5sZW5ndGg7CgogIEUgbG9va3VwKE9iamVjdCBlbGVtZW50KSB7CiAgICBmb3IgKHZhciBrZXkgaW4gX21hcC5rZXlzKSB7CiAgICAgIGlmIChrZXkgPT0gZWxlbWVudCkgcmV0dXJuIGtleTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8gTXV0YXRpbmcgbWV0aG9kcyB0aHJvdy4KCiAgYm9vbCBhZGQoRSB2YWx1ZSkgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGNoYW5nZSB1bm1vZGlmaWFibGUgc2V0Iik7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGNoYW5nZSB1bm1vZGlmaWFibGUgc2V0Iik7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBlbGVtZW50cykgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGNoYW5nZSB1bm1vZGlmaWFibGUgc2V0Iik7CiAgfQoKICB2b2lkIHJlbW92ZUFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKSB7CiAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgY2hhbmdlIHVubW9kaWZpYWJsZSBzZXQiKTsKICB9CgogIHZvaWQgcmV0YWluQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBjaGFuZ2UgdW5tb2RpZmlhYmxlIHNldCIpOwogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGNoYW5nZSB1bm1vZGlmaWFibGUgc2V0Iik7CiAgfQoKICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgY2hhbmdlIHVubW9kaWZpYWJsZSBzZXQiKTsKICB9CgogIGJvb2wgcmVtb3ZlKE9iamVjdCB2YWx1ZSkgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGNoYW5nZSB1bm1vZGlmaWFibGUgc2V0Iik7CiAgfQp9CoJ+AE5OPAEPASMZASMES0QmBEYxNSI7BFBRDS81S0cBFQEhARwBHQEcARIBEgEjASYBMC85ATwBERkEASYuBAEuNgQBLkc9HyEaBhkEASsYHjAGGQQBKxgeMQYZBAEtHiYGEQQBHyMEASsdHjwGEwQBKR0eOwYTBAErTA8zEwQBKDQBETofQBsTBAFKASA3AUUBNSUBJCgEASwqIC4GICIwBhIEAUUePRIEASIeJQYRBAEpKikqMAsoJQ0mJCEoCAYeBAEjHiYGEgQBHCUEAS4tBAEcJQQBLi0EARAfGi4GFwQBDx8aLgYOCRsdEwQBMx4pBiksBAEyDiAeGxoeCAYmKSwEATQOIB4bHTAKGh4IBiYpLAQBGzAxGh4xFgZGBAIBIgRLRCYERjY1IjsET1ENPCYGTEsdBkc+KDgCATpIKkUvPUweFAEUAR4BSAEpHyA5BhMEASsfIDgGEwQBKy0BTU4BIwEmAS85ATwBERkEASYuBAEuNgQBLkc9HyEaBhkEASsYHjAGGQQBKxgeMQYZBAEtHiYGEQQBHyMEAStMDzMTBAEoNAEROh9AGxMEAUoBRQE1JQEkKAQBLCogLgYgIjAGEgQBRR49EgQBIh4lBhEEASkqKSowCyglDSYkISgIBh4EASMeJgYSBAEcJQQBLi0EARwlBAEuLQQBEB8aLgYXBAEPHxouBg4JGx0TBAEzHikGKSwEATIOIB4bGh4IBiYpLAQBNA4gHhsdMAoaHggGJiksBAEbMDEaHjEWBkYEAgEoMBsBJQEqATQBHgE+ATIBIQEdISYGEQQBHQEWPgQBET4EASY+BAEuPgQBLj4EASs+BAErPgQBHj4EAgEYZGFydDpjb2xsZWN0aW9uL3NldC5kYXJ0SG9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2NvbGxlY3Rpb24vY29sbGVjdGlvbnMuZGFydIO4Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuY29sbGVjdGlvbjsKCi8vLyBBbiB1bm1vZGlmaWFibGUgW0xpc3RdIHZpZXcgb2YgYW5vdGhlciBMaXN0LgovLy8KLy8vIFRoZSBzb3VyY2Ugb2YgdGhlIGVsZW1lbnRzIG1heSBiZSBhIFtMaXN0XSBvciBhbnkgW0l0ZXJhYmxlXSB3aXRoCi8vLyBlZmZpY2llbnQgW0l0ZXJhYmxlLmxlbmd0aF0gYW5kIFtJdGVyYWJsZS5lbGVtZW50QXRdLgpjbGFzcyBVbm1vZGlmaWFibGVMaXN0VmlldzxFPiBleHRlbmRzIFVubW9kaWZpYWJsZUxpc3RCYXNlPEU+IHsKICBmaW5hbCBJdGVyYWJsZTxFPiBfc291cmNlOwoKICAvLy8gQ3JlYXRlcyBhbiB1bm1vZGlmaWFibGUgbGlzdCBiYWNrZWQgYnkgW3NvdXJjZV0uCiAgLy8vCiAgLy8vIFRoZSBbc291cmNlXSBvZiB0aGUgZWxlbWVudHMgbWF5IGJlIGEgW0xpc3RdIG9yIGFueSBbSXRlcmFibGVdIHdpdGgKICAvLy8gZWZmaWNpZW50IFtJdGVyYWJsZS5sZW5ndGhdIGFuZCBbSXRlcmFibGUuZWxlbWVudEF0XS4KICBVbm1vZGlmaWFibGVMaXN0VmlldyhJdGVyYWJsZTxFPiBzb3VyY2UpIDogX3NvdXJjZSA9IHNvdXJjZTsKCiAgTGlzdDxSPiBjYXN0PFI+KCkgPT4gVW5tb2RpZmlhYmxlTGlzdFZpZXcoX3NvdXJjZS5jYXN0PFI+KCkpOwogIGludCBnZXQgbGVuZ3RoID0+IF9zb3VyY2UubGVuZ3RoOwoKICBFIG9wZXJhdG9yIFtdKGludCBpbmRleCkgPT4gX3NvdXJjZS5lbGVtZW50QXQoaW5kZXgpOwp9ChwATk48AQ8BGQExBEY6QB0BNwZKPD8BQCQBOAIBIGRhcnQ6Y29sbGVjdGlvbi9jb2xsZWN0aW9ucy5kYXJ0RW9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2NvbGxlY3Rpb24vaGFzaF9zZXQuZGFydJOLLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuY29sbGVjdGlvbjsKCi8vLyBBbiB1bm9yZGVyZWQgaGFzaC10YWJsZSBiYXNlZCBbU2V0XSBpbXBsZW1lbnRhdGlvbi4KLy8vCi8vLyBUaGUgZWxlbWVudHMgb2YgYSBgSGFzaFNldGAgbXVzdCBoYXZlIGNvbnNpc3RlbnQgZXF1YWxpdHkKLy8vIGFuZCBoYXNoQ29kZSBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgZXF1YWxzIG9wZXJhdGlvbgovLy8gbXVzdCBkZWZpbmUgYSBzdGFibGUgZXF1aXZhbGVuY2UgcmVsYXRpb24gb24gdGhlIGVsZW1lbnRzIChyZWZsZXhpdmUsCi8vLyBzeW1tZXRyaWMsIHRyYW5zaXRpdmUsIGFuZCBjb25zaXN0ZW50IG92ZXIgdGltZSksIGFuZCB0aGF0IHRoZSBoYXNoQ29kZQovLy8gbXVzdCBjb25zaXN0ZW50IHdpdGggZXF1YWxpdHksIHNvIHRoYXQgdGhlIHNhbWUgZm9yIG9iamVjdHMgdGhhdCBhcmUKLy8vIGNvbnNpZGVyZWQgZXF1YWwuCi8vLwovLy8gVGhlIHNldCBhbGxvd3MgYG51bGxgIGFzIGFuIGVsZW1lbnQuCi8vLwovLy8gTW9zdCBzaW1wbGUgb3BlcmF0aW9ucyBvbiBgSGFzaFNldGAgYXJlIGRvbmUgaW4gKHBvdGVudGlhbGx5IGFtb3J0aXplZCkKLy8vIGNvbnN0YW50IHRpbWU6IFthZGRdLCBbY29udGFpbnNdLCBbcmVtb3ZlXSwgYW5kIFtsZW5ndGhdLCBwcm92aWRlZCB0aGUgaGFzaAovLy8gY29kZXMgb2Ygb2JqZWN0cyBhcmUgd2VsbCBkaXN0cmlidXRlZC4KLy8vCi8vLyBUaGUgaXRlcmF0aW9uIG9yZGVyIG9mIHRoZSBzZXQgaXMgbm90IHNwZWNpZmllZCBhbmQgZGVwZW5kcyBvbgovLy8gdGhlIGhhc2hjb2RlcyBvZiB0aGUgcHJvdmlkZWQgZWxlbWVudHMuIEhvd2V2ZXIsIHRoZSBvcmRlciBpcyBzdGFibGU6Ci8vLyBtdWx0aXBsZSBpdGVyYXRpb25zIG92ZXIgdGhlIHNhbWUgc2V0IHByb2R1Y2UgdGhlIHNhbWUgb3JkZXIsIGFzIGxvbmcgYXMKLy8vIHRoZSBzZXQgaXMgbm90IG1vZGlmaWVkLgphYnN0cmFjdCBjbGFzcyBIYXNoU2V0PEU+IGltcGxlbWVudHMgU2V0PEU+IHsKICAvLy8gQ3JlYXRlIGEgaGFzaCBzZXQgdXNpbmcgdGhlIHByb3ZpZGVkIFtlcXVhbHNdIGFzIGVxdWFsaXR5LgogIC8vLwogIC8vLyBUaGUgcHJvdmlkZWQgW2VxdWFsc10gbXVzdCBkZWZpbmUgYSBzdGFibGUgZXF1aXZhbGVuY2UgcmVsYXRpb24sIGFuZAogIC8vLyBbaGFzaENvZGVdIG11c3QgYmUgY29uc2lzdGVudCB3aXRoIFtlcXVhbHNdLiBJZiB0aGUgW2VxdWFsc10gb3IgW2hhc2hDb2RlXQogIC8vLyBtZXRob2RzIHdvbid0IHdvcmsgb24gYWxsIG9iamVjdHMsIGJ1dCBvbmx5IG9uIHNvbWUgaW5zdGFuY2VzIG9mIEUsIHRoZQogIC8vLyBbaXNWYWxpZEtleV0gcHJlZGljYXRlIGNhbiBiZSB1c2VkIHRvIHJlc3RyaWN0IHRoZSBrZXlzIHRoYXQgdGhlIGZ1bmN0aW9ucwogIC8vLyBhcmUgYXBwbGllZCB0by4KICAvLy8gQW55IGtleSBmb3Igd2hpY2ggW2lzVmFsaWRLZXldIHJldHVybnMgZmFsc2UgaXMgYXV0b21hdGljYWxseSBhc3N1bWVkCiAgLy8vIHRvIG5vdCBiZSBpbiB0aGUgc2V0IHdoZW4gYXNraW5nIGBjb250YWluc2AuCiAgLy8vCiAgLy8vIElmIFtlcXVhbHNdIG9yIFtoYXNoQ29kZV0gYXJlIG9taXR0ZWQsIHRoZSBzZXQgdXNlcwogIC8vLyB0aGUgZWxlbWVudHMnIGludHJpbnNpYyBbT2JqZWN0Lj09XSBhbmQgW09iamVjdC5oYXNoQ29kZV0uCiAgLy8vCiAgLy8vIElmIHlvdSBzdXBwbHkgb25lIG9mIFtlcXVhbHNdIGFuZCBbaGFzaENvZGVdLAogIC8vLyB5b3Ugc2hvdWxkIGdlbmVyYWxseSBhbHNvIHRvIHN1cHBseSB0aGUgb3RoZXIuCiAgLy8vCiAgLy8vIElmIHRoZSBzdXBwbGllZCBgZXF1YWxzYCBvciBgaGFzaENvZGVgIGZ1bmN0aW9ucyB3b24ndCB3b3JrIG9uIGFsbCBbRV0KICAvLy8gb2JqZWN0cywgYW5kIHRoZSBtYXAgd2lsbCBiZSB1c2VkIGluIGEgc2V0dGluZyB3aGVyZSBhIG5vbi1gRWAgb2JqZWN0CiAgLy8vIGlzIHBhc3NlZCB0bywgZS5nLiwgYGNvbnRhaW5zYCwgdGhlbiB0aGUgW2lzVmFsaWRLZXldIGZ1bmN0aW9uIHNob3VsZAogIC8vLyBhbHNvIGJlIHN1cHBsaWVkLgogIC8vLwogIC8vLyBJZiBbaXNWYWxpZEtleV0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGVzdGluZyBpZiB0aGUgb2JqZWN0IGlzIGFuCiAgLy8vIFtFXSBpbnN0YW5jZS4gVGhhdCBtZWFucyB0aGF0OgogIC8vLwogIC8vLyAgICAgbmV3IEhhc2hTZXQ8aW50PihlcXVhbHM6IChpbnQgZTEsIGludCBlMikgPT4gKGUxIC0gZTIpICUgNSA9PSAwLAogIC8vLyAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogKGludCBlKSA9PiBlICUgNSkKICAvLy8KICAvLy8gZG9lcyBub3QgbmVlZCBhbiBgaXNWYWxpZEtleWAgYXJndW1lbnQsIGJlY2F1c2UgaXQgZGVmYXVsdHMgdG8gb25seQogIC8vLyBhY2NlcHRpbmcgYGludGAgdmFsdWVzIHdoaWNoIGFyZSBhY2NlcHRlZCBieSBib3RoIGBlcXVhbHNgIGFuZCBgaGFzaENvZGVgLgogIC8vLwogIC8vLyBJZiBuZWl0aGVyIGBlcXVhbHNgLCBgaGFzaENvZGVgLCBub3IgYGlzVmFsaWRLZXlgIGlzIHByb3ZpZGVkLAogIC8vLyB0aGUgZGVmYXVsdCBgaXNWYWxpZEtleWAgaW5zdGVhZCBhY2NlcHRzIGFsbCB2YWx1ZXMuCiAgLy8vIFRoZSBkZWZhdWx0IGVxdWFsaXR5IGFuZCBoYXNoY29kZSBvcGVyYXRpb25zIGFyZSBhc3N1bWVkIHRvIHdvcmsgb24gYWxsCiAgLy8vIG9iamVjdHMuCiAgLy8vCiAgLy8vIExpa2V3aXNlLCBpZiBgZXF1YWxzYCBpcyBbaWRlbnRpY2FsXSwgYGhhc2hDb2RlYCBpcyBbaWRlbnRpdHlIYXNoQ29kZV0KICAvLy8gYW5kIGBpc1ZhbGlkS2V5YCBpcyBvbWl0dGVkLCB0aGUgcmVzdWx0aW5nIHNldCBpcyBpZGVudGl0eSBiYXNlZCwKICAvLy8gYW5kIHRoZSBgaXNWYWxpZEtleWAgZGVmYXVsdHMgdG8gYWNjZXB0aW5nIGFsbCBrZXlzLgogIC8vLyBTdWNoIGEgbWFwIGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IHVzaW5nIFtIYXNoU2V0LmlkZW50aXR5XS4KICBleHRlcm5hbCBmYWN0b3J5IEhhc2hTZXQoCiAgICAgIHtib29sIGVxdWFscyhFIGUxLCBFIGUyKSwKICAgICAgaW50IGhhc2hDb2RlKEUgZSksCiAgICAgIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpfSk7CgogIC8vLyBDcmVhdGVzIGFuIHVub3JkZXJlZCBpZGVudGl0eS1iYXNlZCBzZXQuCiAgLy8vCiAgLy8vIEVmZmVjdGl2ZWx5IGEgc2hvcnRoYW5kIGZvcjoKICAvLy8KICAvLy8gICAgIG5ldyBIYXNoU2V0PEU+KGVxdWFsczogaWRlbnRpY2FsLAogIC8vLyAgICAgICAgICAgICAgICAgICAgaGFzaENvZGU6IGlkZW50aXR5SGFzaENvZGUpCiAgZXh0ZXJuYWwgZmFjdG9yeSBIYXNoU2V0LmlkZW50aXR5KCk7CgogIC8vLyBDcmVhdGUgYSBoYXNoIHNldCBjb250YWluaW5nIGFsbCBbZWxlbWVudHNdLgogIC8vLwogIC8vLyBDcmVhdGVzIGEgaGFzaCBzZXQgYXMgYnkgYG5ldyBIYXNoU2V0PEU+KClgIGFuZCBhZGRzIGFsbCBnaXZlbiBbZWxlbWVudHNdCiAgLy8vIHRvIHRoZSBzZXQuIFRoZSBlbGVtZW50cyBhcmUgYWRkZWQgaW4gb3JkZXIuIElmIFtlbGVtZW50c10gY29udGFpbnMKICAvLy8gdHdvIGVudHJpZXMgdGhhdCBhcmUgZXF1YWwsIGJ1dCBub3QgaWRlbnRpY2FsLCB0aGVuIHRoZSBmaXJzdCBvbmUgaXMKICAvLy8gdGhlIG9uZSBpbiB0aGUgcmVzdWx0aW5nIHNldC4KICAvLy8KICAvLy8gQWxsIHRoZSBbZWxlbWVudHNdIHNob3VsZCBiZSBpbnN0YW5jZXMgb2YgW0VdLgogIC8vLyBUaGUgYGVsZW1lbnRzYCBpdGVyYWJsZSBpdHNlbGYgbWF5IGhhdmUgYW55IGVsZW1lbnQgdHlwZSwgc28gdGhpcwogIC8vLyBjb25zdHJ1Y3RvciBjYW4gYmUgdXNlZCB0byBkb3duLWNhc3QgYSBgU2V0YCwgZm9yIGV4YW1wbGUgYXM6CiAgLy8vIGBgYGRhcnQKICAvLy8gU2V0PFN1cGVyVHlwZT4gc3VwZXJTZXQgPSAuLi47CiAgLy8vIFNldDxTdWJUeXBlPiBzdWJTZXQgPQogIC8vLyAgICAgbmV3IEhhc2hTZXQ8U3ViVHlwZT4uZnJvbShzdXBlclNldC53aGVyZVR5cGU8U3ViVHlwZT4oKSk7CiAgLy8vIGBgYAogIGZhY3RvcnkgSGFzaFNldC5mcm9tKEl0ZXJhYmxlIGVsZW1lbnRzKSB7CiAgICBIYXNoU2V0PEU+IHJlc3VsdCA9IEhhc2hTZXQ8RT4oKTsKICAgIGZvciAoZmluYWwgZSBpbiBlbGVtZW50cykgewogICAgICByZXN1bHQuYWRkKGUpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBDcmVhdGUgYSBoYXNoIHNldCBjb250YWluaW5nIGFsbCBbZWxlbWVudHNdLgogIC8vLwogIC8vLyBDcmVhdGVzIGEgaGFzaCBzZXQgYXMgYnkgYG5ldyBIYXNoU2V0PEU+KClgIGFuZCBhZGRzIGFsbCBnaXZlbiBbZWxlbWVudHNdCiAgLy8vIHRvIHRoZSBzZXQuIFRoZSBlbGVtZW50cyBhcmUgYWRkZWQgaW4gb3JkZXIuIElmIFtlbGVtZW50c10gY29udGFpbnMKICAvLy8gdHdvIGVudHJpZXMgdGhhdCBhcmUgZXF1YWwsIGJ1dCBub3QgaWRlbnRpY2FsLCB0aGVuIHRoZSBmaXJzdCBvbmUgaXMKICAvLy8gdGhlIG9uZSBpbiB0aGUgcmVzdWx0aW5nIHNldC4KICBmYWN0b3J5IEhhc2hTZXQub2YoSXRlcmFibGU8RT4gZWxlbWVudHMpID0+IEhhc2hTZXQ8RT4oKS4uYWRkQWxsKGVsZW1lbnRzKTsKCiAgLy8vIFByb3ZpZGVzIGFuIGl0ZXJhdG9yIHRoYXQgaXRlcmF0ZXMgb3ZlciB0aGUgZWxlbWVudHMgb2YgdGhpcyBzZXQuCiAgLy8vCiAgLy8vIFRoZSBvcmRlciBvZiBpdGVyYXRpb24gaXMgdW5zcGVjaWZpZWQsCiAgLy8vIGJ1dCBjb25zaXN0ZW50IGJldHdlZW4gY2hhbmdlcyB0byB0aGUgc2V0LgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvcjsKfQp3AE5OPAEPARkBOAQ+R0pMSRYEKQRMUCsEQ0pNHS5BBktRTlEWTDMGOkEGNDUGTUxMGAZNJQZLNwZKUQZFO04PBk1IO0McIBknAS8GIwYsNScBMwZQSkskBjVIRA4lHEQKLCYgFQYTBAEzBlBKSyROAUgGLTEcAgEdZGFydDpjb2xsZWN0aW9uL2hhc2hfc2V0LmRhcnRFb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvY29sbGVjdGlvbi9pdGVyYWJsZS5kYXJ0rtwvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5jb2xsZWN0aW9uOwoKLy8vIFRoaXMgW0l0ZXJhYmxlXSBtaXhpbiBpbXBsZW1lbnRzIGFsbCBbSXRlcmFibGVdIG1lbWJlcnMgZXhjZXB0IGBpdGVyYXRvcmAuCi8vLwovLy8gQWxsIG90aGVyIG1ldGhvZHMgYXJlIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIGBpdGVyYXRvcmAuCmFic3RyYWN0IGNsYXNzIEl0ZXJhYmxlTWl4aW48RT4gaW1wbGVtZW50cyBJdGVyYWJsZTxFPiB7CiAgLy8gVGhpcyBjbGFzcyBoYXMgbWV0aG9kcyBjb3BpZWQgdmVyYmF0aW0gaW50bzoKICAvLyAtIEl0ZXJhYmxlQmFzZQogIC8vIC0gU2V0TWl4aW4KICAvLyBJZiBjaGFuZ2luZyBhIG1ldGhvZCBoZXJlLCBhbHNvIGNoYW5nZSB0aGUgb3RoZXIgY29waWVzLgoKICBJdGVyYWJsZTxSPiBjYXN0PFI+KCkgPT4gSXRlcmFibGUuY2FzdEZyb208RSwgUj4odGhpcyk7CiAgSXRlcmFibGU8VD4gbWFwPFQ+KFQgZihFIGVsZW1lbnQpKSA9PiBNYXBwZWRJdGVyYWJsZTxFLCBUPih0aGlzLCBmKTsKCiAgSXRlcmFibGU8RT4gd2hlcmUoYm9vbCBmKEUgZWxlbWVudCkpID0+IFdoZXJlSXRlcmFibGU8RT4odGhpcywgZik7CgogIEl0ZXJhYmxlPFQ+IHdoZXJlVHlwZTxUPigpID0+IFdoZXJlVHlwZUl0ZXJhYmxlPFQ+KHRoaXMpOwoKICBJdGVyYWJsZTxUPiBleHBhbmQ8VD4oSXRlcmFibGU8VD4gZihFIGVsZW1lbnQpKSA9PgogICAgICBFeHBhbmRJdGVyYWJsZTxFLCBUPih0aGlzLCBmKTsKCiAgSXRlcmFibGU8RT4gZm9sbG93ZWRCeShJdGVyYWJsZTxFPiBvdGhlcikgewogICAgLy8gVHlwZSB3b3JrYXJvdW5kIGJlY2F1c2UgSXRlcmFibGVNaXhpbjxFPiBkb2Vzbid0IHByb21vdGUKICAgIC8vIHRvIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+LgogICAgSXRlcmFibGU8RT4gc2VsZiA9IHRoaXM7CiAgICBpZiAoc2VsZiBpcyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxFPikgewogICAgICByZXR1cm4gRm9sbG93ZWRCeUl0ZXJhYmxlPEU+LmZpcnN0RWZmaWNpZW50KHNlbGYsIG90aGVyKTsKICAgIH0KICAgIHJldHVybiBGb2xsb3dlZEJ5SXRlcmFibGU8RT4odGhpcywgb3RoZXIpOwogIH0KCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgewogICAgZm9yIChFIGUgaW4gdGhpcykgewogICAgICBpZiAoZSA9PSBlbGVtZW50KSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoRSBlbGVtZW50KSkgewogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgZihlbGVtZW50KTsKICB9CgogIEUgcmVkdWNlKEUgY29tYmluZShFIHZhbHVlLCBFIGVsZW1lbnQpKSB7CiAgICBJdGVyYXRvcjxFPiBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3I7CiAgICBpZiAoIWl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB9CiAgICBFIHZhbHVlID0gaXRlcmF0b3IuY3VycmVudDsKICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgaXRlcmF0b3IuY3VycmVudCk7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBUIGZvbGQ8VD4oVCBpbml0aWFsVmFsdWUsIFQgY29tYmluZShUIHByZXZpb3VzVmFsdWUsIEUgZWxlbWVudCkpIHsKICAgIHZhciB2YWx1ZSA9IGluaXRpYWxWYWx1ZTsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgZWxlbWVudCk7CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBib29sIGV2ZXJ5KGJvb2wgZihFIGVsZW1lbnQpKSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICghZihlbGVtZW50KSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBTdHJpbmcgam9pbihbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgewogICAgSXRlcmF0b3I8RT4gaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yOwogICAgaWYgKCFpdGVyYXRvci5tb3ZlTmV4dCgpKSByZXR1cm4gIiI7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gU3RyaW5nQnVmZmVyKCk7CiAgICBpZiAoc2VwYXJhdG9yID09IG51bGwgfHwgc2VwYXJhdG9yID09ICIiKSB7CiAgICAgIGRvIHsKICAgICAgICBidWZmZXIud3JpdGUoIiR7aXRlcmF0b3IuY3VycmVudH0iKTsKICAgICAgfSB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSk7CiAgICB9IGVsc2UgewogICAgICBidWZmZXIud3JpdGUoIiR7aXRlcmF0b3IuY3VycmVudH0iKTsKICAgICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgICBidWZmZXIud3JpdGUoc2VwYXJhdG9yKTsKICAgICAgICBidWZmZXIud3JpdGUoIiR7aXRlcmF0b3IuY3VycmVudH0iKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgYm9vbCBhbnkoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgTGlzdDxFPiB0b0xpc3Qoe2Jvb2wgZ3Jvd2FibGUgPSB0cnVlfSkgPT4KICAgICAgTGlzdDxFPi5mcm9tKHRoaXMsIGdyb3dhYmxlOiBncm93YWJsZSk7CgogIFNldDxFPiB0b1NldCgpID0+IFNldDxFPi5mcm9tKHRoaXMpOwoKICBpbnQgZ2V0IGxlbmd0aCB7CiAgICBhc3NlcnQodGhpcyBpcyEgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGUpOwogICAgaW50IGNvdW50ID0gMDsKICAgIEl0ZXJhdG9yIGl0ID0gaXRlcmF0b3I7CiAgICB3aGlsZSAoaXQubW92ZU5leHQoKSkgewogICAgICBjb3VudCsrOwogICAgfQogICAgcmV0dXJuIGNvdW50OwogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiAhaXRlcmF0b3IubW92ZU5leHQoKTsKCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiAhaXNFbXB0eTsKCiAgSXRlcmFibGU8RT4gdGFrZShpbnQgY291bnQpIHsKICAgIHJldHVybiBUYWtlSXRlcmFibGU8RT4odGhpcywgY291bnQpOwogIH0KCiAgSXRlcmFibGU8RT4gdGFrZVdoaWxlKGJvb2wgdGVzdChFIHZhbHVlKSkgewogICAgcmV0dXJuIFRha2VXaGlsZUl0ZXJhYmxlPEU+KHRoaXMsIHRlc3QpOwogIH0KCiAgSXRlcmFibGU8RT4gc2tpcChpbnQgY291bnQpIHsKICAgIHJldHVybiBTa2lwSXRlcmFibGU8RT4odGhpcywgY291bnQpOwogIH0KCiAgSXRlcmFibGU8RT4gc2tpcFdoaWxlKGJvb2wgdGVzdChFIHZhbHVlKSkgewogICAgcmV0dXJuIFNraXBXaGlsZUl0ZXJhYmxlPEU+KHRoaXMsIHRlc3QpOwogIH0KCiAgRSBnZXQgZmlyc3QgewogICAgSXRlcmF0b3I8RT4gaXQgPSBpdGVyYXRvcjsKICAgIGlmICghaXQubW92ZU5leHQoKSkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIH0KICAgIHJldHVybiBpdC5jdXJyZW50OwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICBJdGVyYXRvcjxFPiBpdCA9IGl0ZXJhdG9yOwogICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgfQogICAgRSByZXN1bHQ7CiAgICBkbyB7CiAgICAgIHJlc3VsdCA9IGl0LmN1cnJlbnQ7CiAgICB9IHdoaWxlIChpdC5tb3ZlTmV4dCgpKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBFIGdldCBzaW5nbGUgewogICAgSXRlcmF0b3I8RT4gaXQgPSBpdGVyYXRvcjsKICAgIGlmICghaXQubW92ZU5leHQoKSkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICBFIHJlc3VsdCA9IGl0LmN1cnJlbnQ7CiAgICBpZiAoaXQubW92ZU5leHQoKSkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vTWFueSgpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEUgZmlyc3RXaGVyZShib29sIHRlc3QoRSB2YWx1ZSksIHtFIG9yRWxzZSgpfSkgewogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAodGVzdChlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBsYXN0V2hlcmUoYm9vbCB0ZXN0KEUgdmFsdWUpLCB7RSBvckVsc2UoKX0pIHsKICAgIEUgcmVzdWx0OwogICAgYm9vbCBmb3VuZE1hdGNoaW5nID0gZmFsc2U7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsKICAgICAgICBmb3VuZE1hdGNoaW5nID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHJldHVybiByZXN1bHQ7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBzaW5nbGVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICBFIHJlc3VsdDsKICAgIGJvb2wgZm91bmRNYXRjaGluZyA9IGZhbHNlOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIGlmIChmb3VuZE1hdGNoaW5nKSB7CiAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICAgICAgfQogICAgICAgIHJlc3VsdCA9IGVsZW1lbnQ7CiAgICAgICAgZm91bmRNYXRjaGluZyA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIGlmIChmb3VuZE1hdGNoaW5nKSByZXR1cm4gcmVzdWx0OwogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgZWxlbWVudEF0KGludCBpbmRleCkgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoaW5kZXgsICJpbmRleCIpOwogICAgUmFuZ2VFcnJvci5jaGVja05vdE5lZ2F0aXZlKGluZGV4LCAiaW5kZXgiKTsKICAgIGludCBlbGVtZW50SW5kZXggPSAwOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAoaW5kZXggPT0gZWxlbWVudEluZGV4KSByZXR1cm4gZWxlbWVudDsKICAgICAgZWxlbWVudEluZGV4Kys7CiAgICB9CiAgICB0aHJvdyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiLCBudWxsLCBlbGVtZW50SW5kZXgpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gSXRlcmFibGVCYXNlLml0ZXJhYmxlVG9TaG9ydFN0cmluZyh0aGlzLCAnKCcsICcpJyk7Cn0KCi8vLyBCYXNlIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgW0l0ZXJhYmxlXS4KLy8vCi8vLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgYWxsIG1ldGhvZHMgb2YgW0l0ZXJhYmxlXSwgZXhjZXB0IFtJdGVyYWJsZS5pdGVyYXRvcl0sCi8vLyBpbiB0ZXJtcyBvZiBgaXRlcmF0b3JgLgphYnN0cmFjdCBjbGFzcyBJdGVyYWJsZUJhc2U8RT4gZXh0ZW5kcyBJdGVyYWJsZTxFPiB7CiAgY29uc3QgSXRlcmFibGVCYXNlKCk7CgogIC8vLyBDb252ZXJ0IGFuIGBJdGVyYWJsZWAgdG8gYSBzdHJpbmcgbGlrZSBbSXRlcmFibGVCYXNlLnRvU3RyaW5nXS4KICAvLy8KICAvLy8gQWxsb3dzIHVzaW5nIG90aGVyIGRlbGltaXRlcnMgdGhhbiAnKCcgYW5kICcpJy4KICAvLy8KICAvLy8gSGFuZGxlcyBjaXJjdWxhciByZWZlcmVuY2VzIHdoZXJlIGNvbnZlcnRpbmcgb25lIG9mIHRoZSBlbGVtZW50cwogIC8vLyB0byBhIHN0cmluZyBlbmRzIHVwIGNvbnZlcnRpbmcgW2l0ZXJhYmxlXSB0byBhIHN0cmluZyBhZ2Fpbi4KICBzdGF0aWMgU3RyaW5nIGl0ZXJhYmxlVG9TaG9ydFN0cmluZyhJdGVyYWJsZSBpdGVyYWJsZSwKICAgICAgW1N0cmluZyBsZWZ0RGVsaW1pdGVyID0gJygnLCBTdHJpbmcgcmlnaHREZWxpbWl0ZXIgPSAnKSddKSB7CiAgICBpZiAoX2lzVG9TdHJpbmdWaXNpdGluZyhpdGVyYWJsZSkpIHsKICAgICAgaWYgKGxlZnREZWxpbWl0ZXIgPT0gIigiICYmIHJpZ2h0RGVsaW1pdGVyID09ICIpIikgewogICAgICAgIC8vIEF2b2lkIGNyZWF0aW5nIGEgbmV3IHN0cmluZyBpbiB0aGUgImNvbW1vbiIgY2FzZS4KICAgICAgICByZXR1cm4gIiguLi4pIjsKICAgICAgfQogICAgICByZXR1cm4gIiRsZWZ0RGVsaW1pdGVyLi4uJHJpZ2h0RGVsaW1pdGVyIjsKICAgIH0KICAgIExpc3Q8U3RyaW5nPiBwYXJ0cyA9IDxTdHJpbmc+W107CiAgICBfdG9TdHJpbmdWaXNpdGluZy5hZGQoaXRlcmFibGUpOwogICAgdHJ5IHsKICAgICAgX2l0ZXJhYmxlUGFydHNUb1N0cmluZ3MoaXRlcmFibGUsIHBhcnRzKTsKICAgIH0gZmluYWxseSB7CiAgICAgIGFzc2VydChpZGVudGljYWwoX3RvU3RyaW5nVmlzaXRpbmcubGFzdCwgaXRlcmFibGUpKTsKICAgICAgX3RvU3RyaW5nVmlzaXRpbmcucmVtb3ZlTGFzdCgpOwogICAgfQogICAgcmV0dXJuIChTdHJpbmdCdWZmZXIobGVmdERlbGltaXRlcikKICAgICAgICAgIC4ud3JpdGVBbGwocGFydHMsICIsICIpCiAgICAgICAgICAuLndyaXRlKHJpZ2h0RGVsaW1pdGVyKSkKICAgICAgICAudG9TdHJpbmcoKTsKICB9CgogIC8vLyBDb252ZXJ0cyBhbiBgSXRlcmFibGVgIHRvIGEgc3RyaW5nLgogIC8vLwogIC8vLyBDb252ZXJ0cyBlYWNoIGVsZW1lbnRzIHRvIGEgc3RyaW5nLCBhbmQgc2VwYXJhdGVzIHRoZSByZXN1bHRzIGJ5ICIsICIuCiAgLy8vIFRoZW4gd3JhcHMgdGhlIHJlc3VsdCBpbiBbbGVmdERlbGltaXRlcl0gYW5kIFtyaWdodERlbGltaXRlcl0uCiAgLy8vCiAgLy8vIFVubGlrZSBbaXRlcmFibGVUb1Nob3J0U3RyaW5nXSwgdGhpcyBjb252ZXJzaW9uIGRvZXNuJ3Qgb21pdCBhbnkKICAvLy8gZWxlbWVudHMgb3IgcHV0cyBhbnkgbGltaXQgb24gdGhlIHNpemUgb2YgdGhlIHJlc3VsdC4KICAvLy8KICAvLy8gSGFuZGxlcyBjaXJjdWxhciByZWZlcmVuY2VzIHdoZXJlIGNvbnZlcnRpbmcgb25lIG9mIHRoZSBlbGVtZW50cwogIC8vLyB0byBhIHN0cmluZyBlbmRzIHVwIGNvbnZlcnRpbmcgW2l0ZXJhYmxlXSB0byBhIHN0cmluZyBhZ2Fpbi4KICBzdGF0aWMgU3RyaW5nIGl0ZXJhYmxlVG9GdWxsU3RyaW5nKEl0ZXJhYmxlIGl0ZXJhYmxlLAogICAgICBbU3RyaW5nIGxlZnREZWxpbWl0ZXIgPSAnKCcsIFN0cmluZyByaWdodERlbGltaXRlciA9ICcpJ10pIHsKICAgIGlmIChfaXNUb1N0cmluZ1Zpc2l0aW5nKGl0ZXJhYmxlKSkgewogICAgICByZXR1cm4gIiRsZWZ0RGVsaW1pdGVyLi4uJHJpZ2h0RGVsaW1pdGVyIjsKICAgIH0KICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBTdHJpbmdCdWZmZXIobGVmdERlbGltaXRlcik7CiAgICBfdG9TdHJpbmdWaXNpdGluZy5hZGQoaXRlcmFibGUpOwogICAgdHJ5IHsKICAgICAgYnVmZmVyLndyaXRlQWxsKGl0ZXJhYmxlLCAiLCAiKTsKICAgIH0gZmluYWxseSB7CiAgICAgIGFzc2VydChpZGVudGljYWwoX3RvU3RyaW5nVmlzaXRpbmcubGFzdCwgaXRlcmFibGUpKTsKICAgICAgX3RvU3RyaW5nVmlzaXRpbmcucmVtb3ZlTGFzdCgpOwogICAgfQogICAgYnVmZmVyLndyaXRlKHJpZ2h0RGVsaW1pdGVyKTsKICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9Cn0KCi8vLyBBIGNvbGxlY3Rpb24gdXNlZCB0byBpZGVudGlmeSBjeWNsaWMgbGlzdHMgZHVyaW5nIHRvU3RyaW5nKCkgY2FsbHMuCmZpbmFsIExpc3QgX3RvU3RyaW5nVmlzaXRpbmcgPSBbXTsKCi8vLyBDaGVjayBpZiB3ZSBhcmUgY3VycmVudGx5IHZpc2l0aW5nIGBvYCBpbiBhIHRvU3RyaW5nIGNhbGwuCmJvb2wgX2lzVG9TdHJpbmdWaXNpdGluZyhPYmplY3QgbykgewogIGZvciAoaW50IGkgPSAwOyBpIDwgX3RvU3RyaW5nVmlzaXRpbmcubGVuZ3RoOyBpKyspIHsKICAgIGlmIChpZGVudGljYWwobywgX3RvU3RyaW5nVmlzaXRpbmdbaV0pKSByZXR1cm4gdHJ1ZTsKICB9CiAgcmV0dXJuIGZhbHNlOwp9CgovLy8gQ29udmVydCBlbGVtZW50cyBvZiBbaXRlcmFibGVdIHRvIHN0cmluZ3MgYW5kIHN0b3JlIHRoZW0gaW4gW3BhcnRzXS4Kdm9pZCBfaXRlcmFibGVQYXJ0c1RvU3RyaW5ncyhJdGVyYWJsZSBpdGVyYWJsZSwgTGlzdDxTdHJpbmc+IHBhcnRzKSB7CiAgLyoKICAgKiBUaGlzIGlzIHRoZSBjb21wbGljYXRlZCBwYXJ0IG9mIFtpdGVyYWJsZVRvU2hvcnRTdHJpbmddLgogICAqIEl0IGlzIGV4dHJhY3RlZCBhcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvIGF2b2lkIGhhdmluZyB0b28gbXVjaCBjb2RlCiAgICogaW5zaWRlIHRoZSB0cnkvZmluYWxseS4KICAgKi8KICAvLy8gVHJ5IHRvIHN0YXkgYmVsb3cgdGhpcyBtYW55IGNoYXJhY3RlcnMuCiAgY29uc3QgaW50IGxlbmd0aExpbWl0ID0gODA7CgogIC8vLyBBbHdheXMgYXQgbGVhc3QgdGhpcyBtYW55IGVsZW1lbnRzIGF0IHRoZSBzdGFydC4KICBjb25zdCBpbnQgaGVhZENvdW50ID0gMzsKCiAgLy8vIEFsd2F5cyBhdCBsZWFzdCB0aGlzIG1hbnkgZWxlbWVudHMgYXQgdGhlIGVuZC4KICBjb25zdCBpbnQgdGFpbENvdW50ID0gMjsKCiAgLy8vIFN0b3AgaXRlcmF0aW5nIGFmdGVyIHRoaXMgbWFueSBlbGVtZW50cy4gSXRlcmFibGVzIGNhbiBiZSBpbmZpbml0ZS4KICBjb25zdCBpbnQgbWF4Q291bnQgPSAxMDA7CiAgLy8gUGVyIGVudHJ5IGxlbmd0aCBvdmVyaGVhZC4gSXQncyBmb3IgIiwgIiBmb3IgYWxsIGFmdGVyIHRoZSBmaXJzdCBlbnRyeSwKICAvLyBhbmQgZm9yICIoIiBhbmQgIikiIGZvciB0aGUgaW5pdGlhbCBlbnRyeS4gQnkgcHVyZSBsdWNrLCB0aGF0J3MgdGhlIHNhbWUKICAvLyBudW1iZXIuCiAgY29uc3QgaW50IG92ZXJoZWFkID0gMjsKICBjb25zdCBpbnQgZWxsaXBzaXNTaXplID0gMzsgLy8gIi4uLiIubGVuZ3RoLgoKICBpbnQgbGVuZ3RoID0gMDsKICBpbnQgY291bnQgPSAwOwogIEl0ZXJhdG9yIGl0ID0gaXRlcmFibGUuaXRlcmF0b3I7CiAgLy8gSW5pdGlhbCBydW4gb2YgZWxlbWVudHMsIGF0IGxlYXN0IGhlYWRDb3VudCwgYW5kIHRoZW4gY29udGludWUgdW50aWwKICAvLyBwYXNzaW5nIGF0IG1vc3QgbGVuZ3RoTGltaXQgY2hhcmFjdGVycy4KICB3aGlsZSAobGVuZ3RoIDwgbGVuZ3RoTGltaXQgfHwgY291bnQgPCBoZWFkQ291bnQpIHsKICAgIGlmICghaXQubW92ZU5leHQoKSkgcmV0dXJuOwogICAgU3RyaW5nIG5leHQgPSAiJHtpdC5jdXJyZW50fSI7CiAgICBwYXJ0cy5hZGQobmV4dCk7CiAgICBsZW5ndGggKz0gbmV4dC5sZW5ndGggKyBvdmVyaGVhZDsKICAgIGNvdW50Kys7CiAgfQoKICBTdHJpbmcgcGVudWx0aW1hdGVTdHJpbmc7CiAgU3RyaW5nIHVsdGltYXRlU3RyaW5nOwoKICAvLyBGaW5kIGxhc3QgdHdvIGVsZW1lbnRzLiBPbmUgb3IgbW9yZSBvZiB0aGVtIG1heSBhbHJlYWR5IGJlIGluIHRoZQogIC8vIHBhcnRzIGFycmF5LiBJbmNsdWRlIHRoZWlyIGxlbmd0aCBpbiBgbGVuZ3RoYC4KICBPYmplY3QgcGVudWx0aW1hdGU7CiAgT2JqZWN0IHVsdGltYXRlOwogIGlmICghaXQubW92ZU5leHQoKSkgewogICAgaWYgKGNvdW50IDw9IGhlYWRDb3VudCArIHRhaWxDb3VudCkgcmV0dXJuOwogICAgdWx0aW1hdGVTdHJpbmcgPSBwYXJ0cy5yZW1vdmVMYXN0KCk7CiAgICBwZW51bHRpbWF0ZVN0cmluZyA9IHBhcnRzLnJlbW92ZUxhc3QoKTsKICB9IGVsc2UgewogICAgcGVudWx0aW1hdGUgPSBpdC5jdXJyZW50OwogICAgY291bnQrKzsKICAgIGlmICghaXQubW92ZU5leHQoKSkgewogICAgICBpZiAoY291bnQgPD0gaGVhZENvdW50ICsgMSkgewogICAgICAgIHBhcnRzLmFkZCgiJHBlbnVsdGltYXRlIik7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHVsdGltYXRlU3RyaW5nID0gIiRwZW51bHRpbWF0ZSI7CiAgICAgIHBlbnVsdGltYXRlU3RyaW5nID0gcGFydHMucmVtb3ZlTGFzdCgpOwogICAgICBsZW5ndGggKz0gdWx0aW1hdGVTdHJpbmcubGVuZ3RoICsgb3ZlcmhlYWQ7CiAgICB9IGVsc2UgewogICAgICB1bHRpbWF0ZSA9IGl0LmN1cnJlbnQ7CiAgICAgIGNvdW50Kys7CiAgICAgIC8vIFRoZW4ga2VlcCBsb29waW5nLCBrZWVwaW5nIHRoZSBsYXN0IHR3byBlbGVtZW50cyBpbiB2YXJpYWJsZXMuCiAgICAgIGFzc2VydChjb3VudCA8IG1heENvdW50KTsKICAgICAgd2hpbGUgKGl0Lm1vdmVOZXh0KCkpIHsKICAgICAgICBwZW51bHRpbWF0ZSA9IHVsdGltYXRlOwogICAgICAgIHVsdGltYXRlID0gaXQuY3VycmVudDsKICAgICAgICBjb3VudCsrOwogICAgICAgIGlmIChjb3VudCA+IG1heENvdW50KSB7CiAgICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IGZvdW5kIHRoZSBlbmQgYmVmb3JlIG1heENvdW50LCBnaXZlIHVwLgogICAgICAgICAgLy8gVGhpcyBjYW5ub3QgaGFwcGVuIGluIHRoZSBjb2RlIGFib3ZlIGJlY2F1c2UgZWFjaCBlbnRyeQogICAgICAgICAgLy8gaW5jcmVhc2VzIGxlbmd0aCBieSBhdCBsZWFzdCB0d28sIHNvIHRoZXJlIGlzIG5vIHdheSB0bwogICAgICAgICAgLy8gdmlzaXQgbW9yZSB0aGFuIH40MCBlbGVtZW50cyBiZWZvcmUgdGhpcyBsb29wLgoKICAgICAgICAgIC8vIFJlbW92ZSBhbnkgc3VycGx1cyBlbGVtZW50cyB1bnRpbCBsZW5ndGgsIGluY2x1ZGluZyAiLCAuLi4pIiwKICAgICAgICAgIC8vIGlzIGF0IG1vc3QgbGVuZ3RoTGltaXQuCiAgICAgICAgICB3aGlsZSAobGVuZ3RoID4gbGVuZ3RoTGltaXQgLSBlbGxpcHNpc1NpemUgLSBvdmVyaGVhZCAmJgogICAgICAgICAgICAgIGNvdW50ID4gaGVhZENvdW50KSB7CiAgICAgICAgICAgIGxlbmd0aCAtPSBwYXJ0cy5yZW1vdmVMYXN0KCkubGVuZ3RoICsgb3ZlcmhlYWQ7CiAgICAgICAgICAgIGNvdW50LS07CiAgICAgICAgICB9CiAgICAgICAgICBwYXJ0cy5hZGQoIi4uLiIpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBwZW51bHRpbWF0ZVN0cmluZyA9ICIkcGVudWx0aW1hdGUiOwogICAgICB1bHRpbWF0ZVN0cmluZyA9ICIkdWx0aW1hdGUiOwogICAgICBsZW5ndGggKz0gdWx0aW1hdGVTdHJpbmcubGVuZ3RoICsgcGVudWx0aW1hdGVTdHJpbmcubGVuZ3RoICsgMiAqIG92ZXJoZWFkOwogICAgfQogIH0KCiAgLy8gSWYgdGhlcmUgaXMgYSBnYXAgYmV0d2VlbiB0aGUgaW5pdGlhbCBydW4gYW5kIHRoZSBsYXN0IHR3bywKICAvLyBwcmVwYXJlIHRvIGFkZCBhbiBlbGxpcHNpcy4KICBTdHJpbmcgZWxpc2lvbjsKICBpZiAoY291bnQgPiBwYXJ0cy5sZW5ndGggKyB0YWlsQ291bnQpIHsKICAgIGVsaXNpb24gPSAiLi4uIjsKICAgIGxlbmd0aCArPSBlbGxpcHNpc1NpemUgKyBvdmVyaGVhZDsKICB9CgogIC8vIElmIHRoZSBsYXN0IHR3byBlbGVtZW50cyB3ZXJlIHZlcnkgbG9uZywgYW5kIHdlIGhhdmUgbW9yZSB0aGFuCiAgLy8gaGVhZENvdW50IGVsZW1lbnRzIGluIHRoZSBpbml0aWFsIHJ1biwgZHJvcCBzb21lIHRvIG1ha2Ugcm9vbSBmb3IKICAvLyB0aGUgbGFzdCB0d28uCiAgd2hpbGUgKGxlbmd0aCA+IGxlbmd0aExpbWl0ICYmIHBhcnRzLmxlbmd0aCA+IGhlYWRDb3VudCkgewogICAgbGVuZ3RoIC09IHBhcnRzLnJlbW92ZUxhc3QoKS5sZW5ndGggKyBvdmVyaGVhZDsKICAgIGlmIChlbGlzaW9uID09IG51bGwpIHsKICAgICAgZWxpc2lvbiA9ICIuLi4iOwogICAgICBsZW5ndGggKz0gZWxsaXBzaXNTaXplICsgb3ZlcmhlYWQ7CiAgICB9CiAgfQogIGlmIChlbGlzaW9uICE9IG51bGwpIHsKICAgIHBhcnRzLmFkZChlbGlzaW9uKTsKICB9CiAgcGFydHMuYWRkKHBlbnVsdGltYXRlU3RyaW5nKTsKICBwYXJ0cy5hZGQodWx0aW1hdGVTdHJpbmcpOwp9CoGWAE5OPAEPARkBTwQ+OTIUED4BOkcBRQE8ATUlAS5AJh0uQAYvBAEiGCUGEgQBJCgEASwqIC4GICIwBhIEAUUePRIEASIeJQYRBAEpKikqMAstJQ0rJCEtCAYeBAEjHiYGEgQBLC4BJwETLhMcHA8GEgQBLAEjASApBAEuLQQBICkEAS4tBAEQHxouBhcEAQ8fGi4GDgkbHRMEAREfQBs9EwQBMx4pBiksBAEyDiAeGxoeCAYmKSwEATYOIB4bHTAKGh4IBiYpLAQBGzAxGh4xFgZGBAFLAgEsBFEcNRgBRgY2BkdDOUMpOz0YCDEGJSUKMBA7JgYoIiMVBAEqBk1FBkc8BkdDOEMpMQY3JQonEDsmBiIeBAIBSCMBPyU3OQQQAgFJRgU+Sh0GLh4BNxsBNRsBShxNTg0aLwESESNKLTYgIxUmDQQBHBkBRzQWExgwKSwLHg0aJCMQCCcuMg0dD0ggHiAfESBDRUU8AUslQyM8FQwcEgoIKiRRBgQBQSESKhUnBAFERxM9NBsXKQYEGRgEIB0CAR1kYXJ0OmNvbGxlY3Rpb24vaXRlcmFibGUuZGFydEVvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9jb2xsZWN0aW9uL2l0ZXJhdG9yLmRhcnSFCi8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmNvbGxlY3Rpb247CgovLy8gVGhlIFtIYXNOZXh0SXRlcmF0b3JdIGNsYXNzIHdyYXBzIGFuIFtJdGVyYXRvcl0gYW5kIHByb3ZpZGVzIG1ldGhvZHMgdG8KLy8vIGl0ZXJhdGUgb3ZlciBhbiBvYmplY3QgdXNpbmcgYGhhc05leHRgIGFuZCBgbmV4dGAuCi8vLwovLy8gQW4gW0hhc05leHRJdGVyYXRvcl0gZG9lcyBub3QgaW1wbGVtZW50IHRoZSBbSXRlcmF0b3JdIGludGVyZmFjZS4KY2xhc3MgSGFzTmV4dEl0ZXJhdG9yPEU+IHsKICBzdGF0aWMgY29uc3QgaW50IF9IQVNfTkVYVF9BTkRfTkVYVF9JTl9DVVJSRU5UID0gMDsKICBzdGF0aWMgY29uc3QgaW50IF9OT19ORVhUID0gMTsKICBzdGF0aWMgY29uc3QgaW50IF9OT1RfTU9WRURfWUVUID0gMjsKCiAgSXRlcmF0b3I8RT4gX2l0ZXJhdG9yOwogIGludCBfc3RhdGUgPSBfTk9UX01PVkVEX1lFVDsKCiAgSGFzTmV4dEl0ZXJhdG9yKHRoaXMuX2l0ZXJhdG9yKTsKCiAgYm9vbCBnZXQgaGFzTmV4dCB7CiAgICBpZiAoX3N0YXRlID09IF9OT1RfTU9WRURfWUVUKSBfbW92ZSgpOwogICAgcmV0dXJuIF9zdGF0ZSA9PSBfSEFTX05FWFRfQU5EX05FWFRfSU5fQ1VSUkVOVDsKICB9CgogIEUgbmV4dCgpIHsKICAgIC8vIENhbGwgdG8gaGFzTmV4dCBpcyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIHdlIGFyZSBwb3NpdGlvbmVkIGF0IHRoZSBmaXJzdAogICAgLy8gZWxlbWVudCB3aGVuIHdlIHN0YXJ0IGl0ZXJhdGluZy4KICAgIGlmICghaGFzTmV4dCkgdGhyb3cgU3RhdGVFcnJvcigiTm8gbW9yZSBlbGVtZW50cyIpOwogICAgYXNzZXJ0KF9zdGF0ZSA9PSBfSEFTX05FWFRfQU5EX05FWFRfSU5fQ1VSUkVOVCk7CiAgICBFIHJlc3VsdCA9IF9pdGVyYXRvci5jdXJyZW50OwogICAgX21vdmUoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIF9tb3ZlKCkgewogICAgaWYgKF9pdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIF9zdGF0ZSA9IF9IQVNfTkVYVF9BTkRfTkVYVF9JTl9DVVJSRU5UOwogICAgfSBlbHNlIHsKICAgICAgX3N0YXRlID0gX05PX05FWFQ7CiAgICB9CiAgfQp9Ci8ATk48AQ8BGQFMNwRGGzYhJwEZHwEjARUrNAQBDVAoODUiDRMEAREgLg0ZBgQCAR1kYXJ0OmNvbGxlY3Rpb24vaXRlcmF0b3IuZGFydExvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9jb2xsZWN0aW9uL2xpbmtlZF9oYXNoX21hcC5kYXJ0l9svLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5jb2xsZWN0aW9uOwoKLy8vIEEgaGFzaC10YWJsZSBiYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBbTWFwXS4KLy8vCi8vLyBUaGUgaW5zZXJ0aW9uIG9yZGVyIG9mIGtleXMgaXMgcmVtZW1iZXJlZCwKLy8vIGFuZCBrZXlzIGFyZSBpdGVyYXRlZCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGluc2VydGVkIGludG8gdGhlIG1hcC4KLy8vIFZhbHVlcyBhcmUgaXRlcmF0ZWQgaW4gdGhlaXIgY29ycmVzcG9uZGluZyBrZXkncyBvcmRlci4KLy8vIENoYW5naW5nIGEga2V5J3MgdmFsdWUsIHdoZW4gdGhlIGtleSBpcyBhbHJlYWR5IGluIHRoZSBtYXAsCi8vLyBkb2VzIG5vdCBjaGFuZ2UgdGhlIGl0ZXJhdGlvbiBvcmRlciwKLy8vIGJ1dCByZW1vdmluZyB0aGUga2V5IGFuZCBhZGRpbmcgaXQgYWdhaW4KLy8vIHdpbGwgbWFrZSBpdCBiZSBsYXN0IGluIHRoZSBpdGVyYXRpb24gb3JkZXIuCi8vLwovLy8gVGhlIGtleXMgb2YgYSBgTGlua2VkSGFzaE1hcGAgbXVzdCBoYXZlIGNvbnNpc3RlbnQgW09iamVjdC49PV0KLy8vIGFuZCBbT2JqZWN0Lmhhc2hDb2RlXSBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgYD09YCBvcGVyYXRvcgovLy8gbXVzdCBkZWZpbmUgYSBzdGFibGUgZXF1aXZhbGVuY2UgcmVsYXRpb24gb24gdGhlIGtleXMgKHJlZmxleGl2ZSwKLy8vIHN5bW1ldHJpYywgdHJhbnNpdGl2ZSwgYW5kIGNvbnNpc3RlbnQgb3ZlciB0aW1lKSwgYW5kIHRoYXQgYGhhc2hDb2RlYAovLy8gbXVzdCBiZSB0aGUgc2FtZSBmb3Igb2JqZWN0cyB0aGF0IGFyZSBjb25zaWRlcmVkIGVxdWFsIGJ5IGA9PWAuCi8vLwovLy8gVGhlIG1hcCBhbGxvd3MgYG51bGxgIGFzIGEga2V5LgphYnN0cmFjdCBjbGFzcyBMaW5rZWRIYXNoTWFwPEssIFY+IGltcGxlbWVudHMgTWFwPEssIFY+IHsKICAvLy8gQ3JlYXRlcyBhbiBpbnNlcnRpb24tb3JkZXJlZCBoYXNoLXRhYmxlIGJhc2VkIFtNYXBdLgogIC8vLwogIC8vLyBJZiBbZXF1YWxzXSBpcyBwcm92aWRlZCwgaXQgaXMgdXNlZCB0byBjb21wYXJlIHRoZSBrZXlzIGluIHRoZSB0YWJsZSB3aXRoCiAgLy8vIG5ldyBrZXlzLiBJZiBbZXF1YWxzXSBpcyBvbWl0dGVkLCB0aGUga2V5J3Mgb3duIFtPYmplY3QuPT1dIGlzIHVzZWQKICAvLy8gaW5zdGVhZC4KICAvLy8KICAvLy8gU2ltaWxhciwgaWYgW2hhc2hDb2RlXSBpcyBwcm92aWRlZCwgaXQgaXMgdXNlZCB0byBwcm9kdWNlIGEgaGFzaCB2YWx1ZQogIC8vLyBmb3Iga2V5cyBpbiBvcmRlciB0byBwbGFjZSB0aGVtIGluIHRoZSBoYXNoIHRhYmxlLiBJZiBpdCBpcyBvbWl0dGVkLCB0aGUKICAvLy8ga2V5J3Mgb3duIFtPYmplY3QuaGFzaENvZGVdIGlzIHVzZWQuCiAgLy8vCiAgLy8vIElmIHVzaW5nIG1ldGhvZHMgbGlrZSBbb3BlcmF0b3IgW11dLCBbcmVtb3ZlXSBhbmQgW2NvbnRhaW5zS2V5XSB0b2dldGhlcgogIC8vLyB3aXRoIGEgY3VzdG9tIGVxdWFsaXR5IGFuZCBoYXNoY29kZSwgYW4gZXh0cmEgYGlzVmFsaWRLZXlgIGZ1bmN0aW9uCiAgLy8vIGNhbiBiZSBzdXBwbGllZC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgW2VxdWFsc10gb3IKICAvLy8gW2hhc2hDb2RlXSB3aXRoIGFuIGFyZ3VtZW50IHRoYXQgbWF5IG5vdCBiZSBhIFtLXSBpbnN0YW5jZSwgYW5kIGlmIHRoZQogIC8vLyBjYWxsIHJldHVybnMgZmFsc2UsIHRoZSBrZXkgaXMgYXNzdW1lZCB0byBub3QgYmUgaW4gdGhlIHNldC4KICAvLy8gVGhlIFtpc1ZhbGlkS2V5XSBmdW5jdGlvbiBkZWZhdWx0cyB0byBqdXN0IHRlc3RpbmcgaWYgdGhlIG9iamVjdCBpcyBhCiAgLy8vIFtLXSBpbnN0YW5jZS4KICAvLy8KICAvLy8gRXhhbXBsZToKICAvLy8KICAvLy8gICAgIG5ldyBMaW5rZWRIYXNoTWFwPGludCxpbnQ+KGVxdWFsczogKGludCBhLCBpbnQgYikgPT4gKGIgLSBhKSAlIDUgPT0gMCwKICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hDb2RlOiAoaW50IGUpID0+IGUgJSA1KQogIC8vLwogIC8vLyBUaGlzIGV4YW1wbGUgbWFwIGRvZXMgbm90IG5lZWQgYW4gYGlzVmFsaWRLZXlgIGZ1bmN0aW9uIHRvIGJlIHBhc3NlZC4KICAvLy8gVGhlIGRlZmF1bHQgZnVuY3Rpb24gYWNjZXB0cyBvbmx5IGBpbnRgIHZhbHVlcywgd2hpY2ggY2FuIHNhZmVseSBiZQogIC8vLyBwYXNzZWQgdG8gYm90aCB0aGUgYGVxdWFsc2AgYW5kIGBoYXNoQ29kZWAgZnVuY3Rpb25zLgogIC8vLwogIC8vLyBJZiBuZWl0aGVyIGBlcXVhbHNgLCBgaGFzaENvZGVgLCBub3IgYGlzVmFsaWRLZXlgIGlzIHByb3ZpZGVkLAogIC8vLyB0aGUgZGVmYXVsdCBgaXNWYWxpZEtleWAgaW5zdGVhZCBhY2NlcHRzIGFsbCBrZXlzLgogIC8vLyBUaGUgZGVmYXVsdCBlcXVhbGl0eSBhbmQgaGFzaGNvZGUgb3BlcmF0aW9ucyBhcmUgYXNzdW1lZCB0byB3b3JrIG9uIGFsbAogIC8vLyBvYmplY3RzLgogIC8vLwogIC8vLyBMaWtld2lzZSwgaWYgYGVxdWFsc2AgaXMgW2lkZW50aWNhbF0sIGBoYXNoQ29kZWAgaXMgW2lkZW50aXR5SGFzaENvZGVdCiAgLy8vIGFuZCBgaXNWYWxpZEtleWAgaXMgb21pdHRlZCwgdGhlIHJlc3VsdGluZyBtYXAgaXMgaWRlbnRpdHkgYmFzZWQsCiAgLy8vIGFuZCB0aGUgYGlzVmFsaWRLZXlgIGRlZmF1bHRzIHRvIGFjY2VwdGluZyBhbGwga2V5cy4KICAvLy8gU3VjaCBhIG1hcCBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSB1c2luZyBbTGlua2VkSGFzaE1hcC5pZGVudGl0eV0uCiAgLy8vCiAgLy8vIFRoZSB1c2VkIGBlcXVhbHNgIGFuZCBgaGFzaENvZGVgIG1ldGhvZCBzaG91bGQgYWx3YXlzIGJlIGNvbnNpc3RlbnQsCiAgLy8vIHNvIHRoYXQgaWYgYGVxdWFscyhhLCBiKWAgdGhlbiBgaGFzaENvZGUoYSkgPT0gaGFzaENvZGUoYilgLiBUaGUgaGFzaAogIC8vLyBvZiBhbiBvYmplY3QsIG9yIHdoYXQgaXQgY29tcGFyZXMgZXF1YWwgdG8sIHNob3VsZCBub3QgY2hhbmdlIHdoaWxlIHRoZQogIC8vLyBvYmplY3QgaXMgaW4gdGhlIHRhYmxlLiBJZiBpdCBkb2VzIGNoYW5nZSwgdGhlIHJlc3VsdCBpcyB1bnByZWRpY3RhYmxlLgogIC8vLwogIC8vLyBJZiB5b3Ugc3VwcGx5IG9uZSBvZiBbZXF1YWxzXSBhbmQgW2hhc2hDb2RlXSwKICAvLy8geW91IHNob3VsZCBnZW5lcmFsbHkgYWxzbyB0byBzdXBwbHkgdGhlIG90aGVyLgogIGV4dGVybmFsIGZhY3RvcnkgTGlua2VkSGFzaE1hcCgKICAgICAge2Jvb2wgZXF1YWxzKEsga2V5MSwgSyBrZXkyKSwKICAgICAgaW50IGhhc2hDb2RlKEsga2V5KSwKICAgICAgYm9vbCBpc1ZhbGlkS2V5KHBvdGVudGlhbEtleSl9KTsKCiAgLy8vIENyZWF0ZXMgYW4gaW5zZXJ0aW9uLW9yZGVyZWQgaWRlbnRpdHktYmFzZWQgbWFwLgogIC8vLwogIC8vLyBFZmZlY3RpdmVseSBhIHNob3J0aGFuZCBmb3I6CiAgLy8vCiAgLy8vICAgICBuZXcgTGlua2VkSGFzaE1hcDxLLCBWPihlcXVhbHM6IGlkZW50aWNhbCwKICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hDb2RlOiBpZGVudGl0eUhhc2hDb2RlKQogIGV4dGVybmFsIGZhY3RvcnkgTGlua2VkSGFzaE1hcC5pZGVudGl0eSgpOwoKICAvLy8gQ3JlYXRlcyBhIFtMaW5rZWRIYXNoTWFwXSB0aGF0IGNvbnRhaW5zIGFsbCBrZXkgdmFsdWUgcGFpcnMgb2YgW290aGVyXS4KICAvLy8KICAvLy8gVGhlIGtleXMgbXVzdCBhbGwgYmUgaW5zdGFuY2VzIG9mIFtLXSBhbmQgdGhlIHZhbHVlcyB0byBbVl0uCiAgLy8vIFRoZSBbb3RoZXJdIG1hcCBpdHNlbGYgY2FuIGhhdmUgYW55IHR5cGUuCiAgZmFjdG9yeSBMaW5rZWRIYXNoTWFwLmZyb20oTWFwIG90aGVyKSB7CiAgICBMaW5rZWRIYXNoTWFwPEssIFY+IHJlc3VsdCA9IExpbmtlZEhhc2hNYXA8SywgVj4oKTsKICAgIG90aGVyLmZvckVhY2goKGssIHYpIHsKICAgICAgcmVzdWx0W2tdID0gdjsKICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBDcmVhdGVzIGEgW0xpbmtlZEhhc2hNYXBdIHRoYXQgY29udGFpbnMgYWxsIGtleSB2YWx1ZSBwYWlycyBvZiBbb3RoZXJdLgogIGZhY3RvcnkgTGlua2VkSGFzaE1hcC5vZihNYXA8SywgVj4gb3RoZXIpID0+CiAgICAgIExpbmtlZEhhc2hNYXA8SywgVj4oKS4uYWRkQWxsKG90aGVyKTsKCiAgLy8vIENyZWF0ZXMgYSBbTGlua2VkSGFzaE1hcF0gd2hlcmUgdGhlIGtleXMgYW5kIHZhbHVlcyBhcmUgY29tcHV0ZWQgZnJvbSB0aGUKICAvLy8gW2l0ZXJhYmxlXS4KICAvLy8KICAvLy8gRm9yIGVhY2ggZWxlbWVudCBvZiB0aGUgW2l0ZXJhYmxlXSB0aGlzIGNvbnN0cnVjdG9yIGNvbXB1dGVzIGEga2V5L3ZhbHVlCiAgLy8vIHBhaXIsIGJ5IGFwcGx5aW5nIFtrZXldIGFuZCBbdmFsdWVdIHJlc3BlY3RpdmVseS4KICAvLy8KICAvLy8gVGhlIGtleXMgb2YgdGhlIGtleS92YWx1ZSBwYWlycyBkbyBub3QgbmVlZCB0byBiZSB1bmlxdWUuIFRoZSBsYXN0CiAgLy8vIG9jY3VycmVuY2Ugb2YgYSBrZXkgd2lsbCBzaW1wbHkgb3ZlcndyaXRlIGFueSBwcmV2aW91cyB2YWx1ZS4KICAvLy8KICAvLy8gSWYgbm8gdmFsdWVzIGFyZSBzcGVjaWZpZWQgZm9yIFtrZXldIGFuZCBbdmFsdWVdIHRoZSBkZWZhdWx0IGlzIHRoZQogIC8vLyBpZGVudGl0eSBmdW5jdGlvbi4KICBmYWN0b3J5IExpbmtlZEhhc2hNYXAuZnJvbUl0ZXJhYmxlKEl0ZXJhYmxlIGl0ZXJhYmxlLAogICAgICB7SyBrZXkoZWxlbWVudCksIFYgdmFsdWUoZWxlbWVudCl9KSB7CiAgICBMaW5rZWRIYXNoTWFwPEssIFY+IG1hcCA9IExpbmtlZEhhc2hNYXA8SywgVj4oKTsKICAgIE1hcEJhc2UuX2ZpbGxNYXBXaXRoTWFwcGVkSXRlcmFibGUobWFwLCBpdGVyYWJsZSwga2V5LCB2YWx1ZSk7CiAgICByZXR1cm4gbWFwOwogIH0KCiAgLy8vIENyZWF0ZXMgYSBbTGlua2VkSGFzaE1hcF0gYXNzb2NpYXRpbmcgdGhlIGdpdmVuIFtrZXlzXSB0byBbdmFsdWVzXS4KICAvLy8KICAvLy8gVGhpcyBjb25zdHJ1Y3RvciBpdGVyYXRlcyBvdmVyIFtrZXlzXSBhbmQgW3ZhbHVlc10gYW5kIG1hcHMgZWFjaCBlbGVtZW50IG9mCiAgLy8vIFtrZXlzXSB0byB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIFt2YWx1ZXNdLgogIC8vLwogIC8vLyBJZiBba2V5c10gY29udGFpbnMgdGhlIHNhbWUgb2JqZWN0IG11bHRpcGxlIHRpbWVzLCB0aGUgbGFzdCBvY2N1cnJlbmNlCiAgLy8vIG92ZXJ3cml0ZXMgdGhlIHByZXZpb3VzIHZhbHVlLgogIC8vLwogIC8vLyBJdCBpcyBhbiBlcnJvciBpZiB0aGUgdHdvIFtJdGVyYWJsZV1zIGRvbid0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoLgogIGZhY3RvcnkgTGlua2VkSGFzaE1hcC5mcm9tSXRlcmFibGVzKEl0ZXJhYmxlPEs+IGtleXMsIEl0ZXJhYmxlPFY+IHZhbHVlcykgewogICAgTGlua2VkSGFzaE1hcDxLLCBWPiBtYXAgPSBMaW5rZWRIYXNoTWFwPEssIFY+KCk7CiAgICBNYXBCYXNlLl9maWxsTWFwV2l0aEl0ZXJhYmxlcyhtYXAsIGtleXMsIHZhbHVlcyk7CiAgICByZXR1cm4gbWFwOwogIH0KCiAgLy8vIENyZWF0ZXMgYSBbTGlua2VkSGFzaE1hcF0gY29udGFpbmluZyB0aGUgZW50cmllcyBvZiBbZW50cmllc10uCiAgLy8vCiAgLy8vIFJldHVybnMgYSBuZXcgYExpbmtlZEhhc2hNYXA8SywgVj5gIHdoZXJlIGFsbCBlbnRyaWVzIG9mIFtlbnRyaWVzXQogIC8vLyBoYXZlIGJlZW4gYWRkZWQgaW4gaXRlcmF0aW9uIG9yZGVyLgogIC8vLwogIC8vLyBJZiBtdWx0aXBsZSBbZW50cmllc10gaGF2ZSB0aGUgc2FtZSBrZXksCiAgLy8vIGxhdGVyIG9jY3VycmVuY2VzIG92ZXJ3cml0ZSB0aGUgZWFybGllciBvbmVzLgogIEBTaW5jZSgiMi4xIikKICBmYWN0b3J5IExpbmtlZEhhc2hNYXAuZnJvbUVudHJpZXMoSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IGVudHJpZXMpID0+CiAgICAgIDxLLCBWPnt9Li5hZGRFbnRyaWVzKGVudHJpZXMpOwp9CoCRAE5OPAEPARkBMAQvSDxAKS0xBENNRkpEBCQ6OwZQSg8GTU8rBk9KSk1DTBQGDwZRQQZMSjwGRTlODwZNSDtJBktMTk4GNDUiJBsnATcGIwY1Pi0BTgZDMCo4GxUIEwQBTi8sAVASBk84BklEBkoZOCw1QxAEAUoGUjcGTSUGSE41NhAEAUUGSSoGLzQQSSUCASRkYXJ0OmNvbGxlY3Rpb24vbGlua2VkX2hhc2hfbWFwLmRhcnRMb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvY29sbGVjdGlvbi9saW5rZWRfaGFzaF9zZXQuZGFydJThLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuY29sbGVjdGlvbjsKCi8vLyBBIFtMaW5rZWRIYXNoU2V0XSBpcyBhIGhhc2gtdGFibGUgYmFzZWQgW1NldF0gaW1wbGVtZW50YXRpb24uCi8vLwovLy8gVGhlIGBMaW5rZWRIYXNoU2V0YCBhbHNvIGtlZXAgdHJhY2sgb2YgdGhlIG9yZGVyIHRoYXQgZWxlbWVudHMgd2VyZSBpbnNlcnRlZAovLy8gaW4sIGFuZCBpdGVyYXRpb24gaGFwcGVucyBpbiBmaXJzdC10by1sYXN0IGluc2VydGlvbiBvcmRlci4KLy8vCi8vLyBUaGUgZWxlbWVudHMgb2YgYSBgTGlua2VkSGFzaFNldGAgbXVzdCBoYXZlIGNvbnNpc3RlbnQgW09iamVjdC49PV0KLy8vIGFuZCBbT2JqZWN0Lmhhc2hDb2RlXSBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgYD09YCBvcGVyYXRvcgovLy8gbXVzdCBkZWZpbmUgYSBzdGFibGUgZXF1aXZhbGVuY2UgcmVsYXRpb24gb24gdGhlIGVsZW1lbnRzIChyZWZsZXhpdmUsCi8vLyBzeW1tZXRyaWMsIHRyYW5zaXRpdmUsIGFuZCBjb25zaXN0ZW50IG92ZXIgdGltZSksIGFuZCB0aGF0IGBoYXNoQ29kZWAKLy8vIG11c3QgYmUgdGhlIHNhbWUgZm9yIG9iamVjdHMgdGhhdCBhcmUgY29uc2lkZXJlZCBlcXVhbCBieSBgPT1gLgovLy8KLy8vIFRoZSBzZXQgYWxsb3dzIGBudWxsYCBhcyBhbiBlbGVtZW50LgovLy8KLy8vIEl0ZXJhdGlvbiBvZiBlbGVtZW50cyBpcyBkb25lIGluIGVsZW1lbnQgaW5zZXJ0aW9uIG9yZGVyLgovLy8gQW4gZWxlbWVudCB0aGF0IHdhcyBhZGRlZCBhZnRlciBhbm90aGVyIHdpbGwgb2NjdXIgbGF0ZXIgaW4gdGhlIGl0ZXJhdGlvbi4KLy8vIEFkZGluZyBhbiBlbGVtZW50IHRoYXQgaXMgYWxyZWFkeSBpbiB0aGUgc2V0Ci8vLyBkb2VzIG5vdCBjaGFuZ2UgaXRzIHBvc2l0aW9uIGluIHRoZSBpdGVyYXRpb24gb3JkZXIsCi8vLyBidXQgcmVtb3ZpbmcgYW4gZWxlbWVudCBhbmQgYWRkaW5nIGl0IGFnYWluLAovLy8gd2lsbCBtYWtlIGl0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYW4gaXRlcmF0aW9uLgovLy8KLy8vIE1vc3Qgc2ltcGxlIG9wZXJhdGlvbnMgb24gYEhhc2hTZXRgIGFyZSBkb25lIGluIChwb3RlbnRpYWxseSBhbW9ydGl6ZWQpCi8vLyBjb25zdGFudCB0aW1lOiBbYWRkXSwgW2NvbnRhaW5zXSwgW3JlbW92ZV0sIGFuZCBbbGVuZ3RoXSwgcHJvdmlkZWQgdGhlIGhhc2gKLy8vIGNvZGVzIG9mIG9iamVjdHMgYXJlIHdlbGwgZGlzdHJpYnV0ZWQuLgphYnN0cmFjdCBjbGFzcyBMaW5rZWRIYXNoU2V0PEU+IGltcGxlbWVudHMgU2V0PEU+IHsKICAvLy8gQ3JlYXRlIGFuIGluc2VydGlvbi1vcmRlcmVkIGhhc2ggc2V0IHVzaW5nIHRoZSBwcm92aWRlZAogIC8vLyBbZXF1YWxzXSBhbmQgW2hhc2hDb2RlXS4KICAvLy8KICAvLy8gVGhlIHByb3ZpZGVkIFtlcXVhbHNdIG11c3QgZGVmaW5lIGEgc3RhYmxlIGVxdWl2YWxlbmNlIHJlbGF0aW9uLCBhbmQKICAvLy8gW2hhc2hDb2RlXSBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCBbZXF1YWxzXS4gSWYgdGhlIFtlcXVhbHNdIG9yIFtoYXNoQ29kZV0KICAvLy8gbWV0aG9kcyB3b24ndCB3b3JrIG9uIGFsbCBvYmplY3RzLCBidXQgb25seSBvbiBzb21lIGluc3RhbmNlcyBvZiBFLCB0aGUKICAvLy8gW2lzVmFsaWRLZXldIHByZWRpY2F0ZSBjYW4gYmUgdXNlZCB0byByZXN0cmljdCB0aGUga2V5cyB0aGF0IHRoZSBmdW5jdGlvbnMKICAvLy8gYXJlIGFwcGxpZWQgdG8uCiAgLy8vIEFueSBrZXkgZm9yIHdoaWNoIFtpc1ZhbGlkS2V5XSByZXR1cm5zIGZhbHNlIGlzIGF1dG9tYXRpY2FsbHkgYXNzdW1lZAogIC8vLyB0byBub3QgYmUgaW4gdGhlIHNldCB3aGVuIGFza2luZyBgY29udGFpbnNgLgogIC8vLwogIC8vLyBJZiBbZXF1YWxzXSBvciBbaGFzaENvZGVdIGFyZSBvbWl0dGVkLCB0aGUgc2V0IHVzZXMKICAvLy8gdGhlIGVsZW1lbnRzJyBpbnRyaW5zaWMgW09iamVjdC49PV0gYW5kIFtPYmplY3QuaGFzaENvZGVdLAogIC8vLyBhbmQgW2lzVmFsaWRLZXldIGlzIGlnbm9yZWQgc2luY2UgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgYXNzdW1lZAogIC8vLyB0byB3b3JrIG9uIGFsbCBvYmplY3RzLgogIC8vLwogIC8vLyBJZiB5b3Ugc3VwcGx5IG9uZSBvZiBbZXF1YWxzXSBhbmQgW2hhc2hDb2RlXSwKICAvLy8geW91IHNob3VsZCBnZW5lcmFsbHkgYWxzbyB0byBzdXBwbHkgdGhlIG90aGVyLgogIC8vLwogIC8vLyBJZiB0aGUgc3VwcGxpZWQgYGVxdWFsc2Agb3IgYGhhc2hDb2RlYCBmdW5jdGlvbnMgd29uJ3Qgd29yayBvbiBhbGwgW0VdCiAgLy8vIG9iamVjdHMsIGFuZCB0aGUgbWFwIHdpbGwgYmUgdXNlZCBpbiBhIHNldHRpbmcgd2hlcmUgYSBub24tYEVgIG9iamVjdAogIC8vLyBpcyBwYXNzZWQgdG8sIGUuZy4sIGBjb250YWluc2AsIHRoZW4gdGhlIFtpc1ZhbGlkS2V5XSBmdW5jdGlvbiBzaG91bGQKICAvLy8gYWxzbyBiZSBzdXBwbGllZC4KICAvLy8KICAvLy8gSWYgW2lzVmFsaWRLZXldIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRlc3RpbmcgaWYgdGhlIG9iamVjdCBpcyBhbgogIC8vLyBbRV0gaW5zdGFuY2UuIFRoYXQgbWVhbnMgdGhhdDoKICAvLy8KICAvLy8gICAgIG5ldyBMaW5rZWRIYXNoU2V0PGludD4oZXF1YWxzOiAoaW50IGUxLCBpbnQgZTIpID0+IChlMSAtIGUyKSAlIDUgPT0gMCwKICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaENvZGU6IChpbnQgZSkgPT4gZSAlIDUpCiAgLy8vCiAgLy8vIGRvZXMgbm90IG5lZWQgYW4gYGlzVmFsaWRLZXlgIGFyZ3VtZW50LCBiZWNhdXNlIGl0IGRlZmF1bHRzIHRvIG9ubHkKICAvLy8gYWNjZXB0aW5nIGBpbnRgIHZhbHVlcyB3aGljaCBhcmUgYWNjZXB0ZWQgYnkgYm90aCBgZXF1YWxzYCBhbmQgYGhhc2hDb2RlYC4KICAvLy8KICAvLy8gSWYgbmVpdGhlciBgZXF1YWxzYCwgYGhhc2hDb2RlYCwgbm9yIGBpc1ZhbGlkS2V5YCBpcyBwcm92aWRlZCwKICAvLy8gdGhlIGRlZmF1bHQgYGlzVmFsaWRLZXlgIGluc3RlYWQgYWNjZXB0cyBhbGwgdmFsdWVzLgogIC8vLyBUaGUgZGVmYXVsdCBlcXVhbGl0eSBhbmQgaGFzaGNvZGUgb3BlcmF0aW9ucyBhcmUgYXNzdW1lZCB0byB3b3JrIG9uIGFsbAogIC8vLyBvYmplY3RzLgogIC8vLwogIC8vLyBMaWtld2lzZSwgaWYgYGVxdWFsc2AgaXMgW2lkZW50aWNhbF0sIGBoYXNoQ29kZWAgaXMgW2lkZW50aXR5SGFzaENvZGVdCiAgLy8vIGFuZCBgaXNWYWxpZEtleWAgaXMgb21pdHRlZCwgdGhlIHJlc3VsdGluZyBzZXQgaXMgaWRlbnRpdHkgYmFzZWQsCiAgLy8vIGFuZCB0aGUgYGlzVmFsaWRLZXlgIGRlZmF1bHRzIHRvIGFjY2VwdGluZyBhbGwga2V5cy4KICAvLy8gU3VjaCBhIG1hcCBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSB1c2luZyBbTGlua2VkSGFzaFNldC5pZGVudGl0eV0uCiAgZXh0ZXJuYWwgZmFjdG9yeSBMaW5rZWRIYXNoU2V0KAogICAgICB7Ym9vbCBlcXVhbHMoRSBlMSwgRSBlMiksCiAgICAgIGludCBoYXNoQ29kZShFIGUpLAogICAgICBib29sIGlzVmFsaWRLZXkocG90ZW50aWFsS2V5KX0pOwoKICAvLy8gQ3JlYXRlcyBhbiBpbnNlcnRpb24tb3JkZXJlZCBpZGVudGl0eS1iYXNlZCBzZXQuCiAgLy8vCiAgLy8vIEVmZmVjdGl2ZWx5IGEgc2hvcnRoYW5kIGZvcjoKICAvLy8KICAvLy8gICAgIG5ldyBMaW5rZWRIYXNoU2V0PEU+KGVxdWFsczogaWRlbnRpY2FsLAogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaENvZGU6IGlkZW50aXR5SGFzaENvZGUpCiAgZXh0ZXJuYWwgZmFjdG9yeSBMaW5rZWRIYXNoU2V0LmlkZW50aXR5KCk7CgogIC8vLyBDcmVhdGUgYSBsaW5rZWQgaGFzaCBzZXQgY29udGFpbmluZyBhbGwgW2VsZW1lbnRzXS4KICAvLy8KICAvLy8gQ3JlYXRlcyBhIGxpbmtlZCBoYXNoIHNldCBhcyBieSBgbmV3IExpbmtlZEhhc2hTZXQ8RT4oKWAgYW5kIGFkZHMgZWFjaAogIC8vLyBlbGVtZW50IG9mIGBlbGVtZW50c2AgdG8gdGhpcyBzZXQgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIGl0ZXJhdGVkLgogIC8vLwogIC8vLyBBbGwgdGhlIFtlbGVtZW50c10gc2hvdWxkIGJlIGluc3RhbmNlcyBvZiBbRV0uCiAgLy8vIFRoZSBgZWxlbWVudHNgIGl0ZXJhYmxlIGl0c2VsZiBtYXkgaGF2ZSBhbnkgZWxlbWVudCB0eXBlLAogIC8vLyBzbyB0aGlzIGNvbnN0cnVjdG9yIGNhbiBiZSB1c2VkIHRvIGRvd24tY2FzdCBhIGBTZXRgLCBmb3IgZXhhbXBsZSBhczoKICAvLy8KICAvLy8gICAgIFNldDxTdXBlclR5cGU+IHN1cGVyU2V0ID0gLi4uOwogIC8vLyAgICAgSXRlcmFibGU8U3VwZXJUeXBlPiB0bXAgPSBzdXBlclNldC53aGVyZSgoZSkgPT4gZSBpcyBTdWJUeXBlKTsKICAvLy8gICAgIFNldDxTdWJUeXBlPiBzdWJTZXQgPSBuZXcgTGlua2VkSGFzaFNldDxTdWJUeXBlPi5mcm9tKHRtcCk7CiAgZmFjdG9yeSBMaW5rZWRIYXNoU2V0LmZyb20oSXRlcmFibGUgZWxlbWVudHMpIHsKICAgIExpbmtlZEhhc2hTZXQ8RT4gcmVzdWx0ID0gTGlua2VkSGFzaFNldDxFPigpOwogICAgZm9yIChmaW5hbCBlbGVtZW50IGluIGVsZW1lbnRzKSB7CiAgICAgIHJlc3VsdC5hZGQoZWxlbWVudCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIENyZWF0ZSBhIGxpbmtlZCBoYXNoIHNldCBmcm9tIFtlbGVtZW50c10uCiAgLy8vCiAgLy8vIENyZWF0ZXMgYSBsaW5rZWQgaGFzaCBzZXQgYXMgYnkgYG5ldyBMaW5rZWRIYXNoU2V0PEU+KClgIGFuZCBhZGRzIGVhY2gKICAvLy8gZWxlbWVudCBvZiBgZWxlbWVudHNgIHRvIHRoaXMgc2V0IGluIHRoZSBvcmRlciB0aGV5IGFyZSBpdGVyYXRlZC4KICBmYWN0b3J5IExpbmtlZEhhc2hTZXQub2YoSXRlcmFibGU8RT4gZWxlbWVudHMpID0+CiAgICAgIExpbmtlZEhhc2hTZXQ8RT4oKS4uYWRkQWxsKGVsZW1lbnRzKTsKCiAgLy8vIEV4ZWN1dGVzIGEgZnVuY3Rpb24gb24gZWFjaCBlbGVtZW50IG9mIHRoZSBzZXQuCiAgLy8vCiAgLy8vIFRoZSBlbGVtZW50cyBhcmUgaXRlcmF0ZWQgaW4gaW5zZXJ0aW9uIG9yZGVyLgogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihFIGVsZW1lbnQpKTsKCiAgLy8vIFByb3ZpZGVzIGFuIGl0ZXJhdG9yIHRoYXQgaXRlcmF0ZXMgb3ZlciB0aGUgZWxlbWVudHMgaW4gaW5zZXJ0aW9uIG9yZGVyLgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvcjsKfQp8AE5OPAEPARkBQgRRQARHTUpKRAQpBD5PMTkxMwRMUCw0Ph8GS1FOURZMMwY6QUUeBjQ1Bk1MTBgGTSUGUT0GSlEGRTtODwZNSDtJIiAZJwE3BiMGMjstAToGTUgGNUBMBilJRjIyJhsGEwQBMAZNSDQsATYGNCgBTxwCASRkYXJ0OmNvbGxlY3Rpb24vbGlua2VkX2hhc2hfc2V0LmRhcnRIb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvY29sbGVjdGlvbi9saW5rZWRfbGlzdC5kYXJ0ns0vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5jb2xsZWN0aW9uOwoKLy8vIEEgc3BlY2lhbGl6ZWQgZG91YmxlLWxpbmtlZCBsaXN0IG9mIGVsZW1lbnRzIHRoYXQgZXh0ZW5kcyBbTGlua2VkTGlzdEVudHJ5XS4KLy8vCi8vLyBUaGlzIGlzIG5vdCBhIGdlbmVyaWMgZGF0YSBzdHJ1Y3R1cmUuIEl0IG9ubHkgYWNjZXB0cyBlbGVtZW50cyB0aGF0IGV4dGVuZAovLy8gdGhlIFtMaW5rZWRMaXN0RW50cnldIGNsYXNzLiBTZWUgdGhlIFtRdWV1ZV0gaW1wbGVtZW50YXRpb25zIGZvciBnZW5lcmljCi8vLyBjb2xsZWN0aW9ucyB0aGF0IGFsbG93IGNvbnN0YW50IHRpbWUgYWRkaW5nIGFuZCByZW1vdmluZyBhdCB0aGUgZW5kcy4KLy8vCi8vLyBUaGlzIGlzIG5vdCBhIFtMaXN0XSBpbXBsZW1lbnRhdGlvbi4gRGVzcGl0ZSBpdHMgbmFtZSwgdGhpcyBjbGFzcyBkb2VzIG5vdAovLy8gaW1wbGVtZW50IHRoZSBbTGlzdF0gaW50ZXJmYWNlLiBJdCBkb2VzIG5vdCBhbGxvdyBjb25zdGFudCB0aW1lIGxvb2t1cCBieQovLy8gaW5kZXguCi8vLwovLy8gQmVjYXVzZSB0aGUgZWxlbWVudHMgdGhlbXNlbHZlcyBjb250YWluIHRoZSBsaW5rcyBvZiB0aGlzIGxpbmtlZCBsaXN0LAovLy8gZWFjaCBlbGVtZW50IGNhbiBiZSBpbiBvbmx5IG9uZSBsaXN0IGF0IGEgdGltZS4gVG8gYWRkIGFuIGVsZW1lbnQgdG8gYW5vdGhlcgovLy8gbGlzdCwgaXQgbXVzdCBmaXJzdCBiZSByZW1vdmVkIGZyb20gaXRzIGN1cnJlbnQgbGlzdCAoaWYgYW55KS4KLy8vCi8vLyBJbiByZXR1cm4sIGVhY2ggZWxlbWVudCBrbm93cyBpdHMgb3duIHBsYWNlIGluIHRoZSBsaW5rZWQgbGlzdCwgYXMgd2VsbCBhcwovLy8gd2hpY2ggbGlzdCBpdCBpcyBpbi4gVGhpcyBhbGxvd3MgY29uc3RhbnQgdGltZQovLy8gW0xpbmtlZExpc3RFbnRyeS5pbnNlcnRBZnRlcl0sIFtMaW5rZWRMaXN0RW50cnkuaW5zZXJ0QmVmb3JlXSBhbmQKLy8vIFtMaW5rZWRMaXN0RW50cnkudW5saW5rXSBvcGVyYXRpb25zIHdoZW4gYWxsIHlvdSBoYXZlIGlzIHRoZSBlbGVtZW50LgovLy8KLy8vIEEgYExpbmtlZExpc3RgIGFsc28gYWxsb3dzIGNvbnN0YW50IHRpbWUgYWRkaW5nIGFuZCByZW1vdmluZyBhdCBlaXRoZXIgZW5kLAovLy8gYW5kIGEgY29uc3RhbnQgdGltZSBsZW5ndGggZ2V0dGVyLgpjbGFzcyBMaW5rZWRMaXN0PEUgZXh0ZW5kcyBMaW5rZWRMaXN0RW50cnk8RT4+IGV4dGVuZHMgSXRlcmFibGU8RT4gewogIGludCBfbW9kaWZpY2F0aW9uQ291bnQgPSAwOwogIGludCBfbGVuZ3RoID0gMDsKICBFIF9maXJzdDsKCiAgLy8vIENvbnN0cnVjdCBhIG5ldyBlbXB0eSBsaW5rZWQgbGlzdC4KICBMaW5rZWRMaXN0KCk7CgogIC8vLyBBZGQgW2VudHJ5XSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5rZWQgbGlzdC4KICB2b2lkIGFkZEZpcnN0KEUgZW50cnkpIHsKICAgIF9pbnNlcnRCZWZvcmUoX2ZpcnN0LCBlbnRyeSwgdXBkYXRlRmlyc3Q6IHRydWUpOwogICAgX2ZpcnN0ID0gZW50cnk7CiAgfQoKICAvLy8gQWRkIFtlbnRyeV0gdG8gdGhlIGVuZCBvZiB0aGUgbGlua2VkIGxpc3QuCiAgdm9pZCBhZGQoRSBlbnRyeSkgewogICAgX2luc2VydEJlZm9yZShfZmlyc3QsIGVudHJ5LCB1cGRhdGVGaXJzdDogZmFsc2UpOwogIH0KCiAgLy8vIEFkZCBbZW50cmllc10gdG8gdGhlIGVuZCBvZiB0aGUgbGlua2VkIGxpc3QuCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gZW50cmllcykgewogICAgZW50cmllcy5mb3JFYWNoKGFkZCk7CiAgfQoKICAvLy8gUmVtb3ZlIFtlbnRyeV0gZnJvbSB0aGUgbGlua2VkIGxpc3QuCiAgLy8vCiAgLy8vIFJldHVybnMgZmFsc2UgYW5kIGRvZXMgbm90aGluZyBpZiBbZW50cnldIGlzIG5vdCBpbiB0aGlzIGxpbmtlZCBsaXN0LgogIC8vLwogIC8vLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyBgZW50cnkudW5saW5rKClgIGlmIHRoZSBlbnRyeSBpcyBpbiB0aGlzCiAgLy8vIGxpc3QuCiAgYm9vbCByZW1vdmUoRSBlbnRyeSkgewogICAgaWYgKGVudHJ5Ll9saXN0ICE9IHRoaXMpIHJldHVybiBmYWxzZTsKICAgIF91bmxpbmsoZW50cnkpOyAvLyBVbmxpbmsgd2lsbCBkZWNyZW1lbnQgbGVuZ3RoLgogICAgcmV0dXJuIHRydWU7CiAgfQoKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgPT4gX0xpbmtlZExpc3RJdGVyYXRvcjxFPih0aGlzKTsKCiAgaW50IGdldCBsZW5ndGggPT4gX2xlbmd0aDsKCiAgLy8vIFJlbW92ZSBhbGwgZWxlbWVudHMgZnJvbSB0aGlzIGxpbmtlZCBsaXN0LgogIHZvaWQgY2xlYXIoKSB7CiAgICBfbW9kaWZpY2F0aW9uQ291bnQrKzsKICAgIGlmIChpc0VtcHR5KSByZXR1cm47CgogICAgRSBuZXh0ID0gX2ZpcnN0OwogICAgZG8gewogICAgICBFIGVudHJ5ID0gbmV4dDsKICAgICAgbmV4dCA9IGVudHJ5Ll9uZXh0OwogICAgICBlbnRyeS5fbmV4dCA9IGVudHJ5Ll9wcmV2aW91cyA9IGVudHJ5Ll9saXN0ID0gbnVsbDsKICAgIH0gd2hpbGUgKCFpZGVudGljYWwobmV4dCwgX2ZpcnN0KSk7CgogICAgX2ZpcnN0ID0gbnVsbDsKICAgIF9sZW5ndGggPSAwOwogIH0KCiAgRSBnZXQgZmlyc3QgewogICAgaWYgKGlzRW1wdHkpIHsKICAgICAgdGhyb3cgU3RhdGVFcnJvcignTm8gc3VjaCBlbGVtZW50Jyk7CiAgICB9CiAgICByZXR1cm4gX2ZpcnN0OwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICBpZiAoaXNFbXB0eSkgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKCdObyBzdWNoIGVsZW1lbnQnKTsKICAgIH0KICAgIHJldHVybiBfZmlyc3QuX3ByZXZpb3VzOwogIH0KCiAgRSBnZXQgc2luZ2xlIHsKICAgIGlmIChpc0VtcHR5KSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoJ05vIHN1Y2ggZWxlbWVudCcpOwogICAgfQogICAgaWYgKF9sZW5ndGggPiAxKSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoJ1RvbyBtYW55IGVsZW1lbnRzJyk7CiAgICB9CiAgICByZXR1cm4gX2ZpcnN0OwogIH0KCiAgLy8vIENhbGwgW2FjdGlvbl0gd2l0aCBlYWNoIGVudHJ5IGluIHRoaXMgbGlua2VkIGxpc3QuCiAgLy8vCiAgLy8vIEl0J3MgYW4gZXJyb3IgaWYgW2FjdGlvbl0gbW9kaWZ5IHRoZSBsaW5rZWQgbGlzdC4KICB2b2lkIGZvckVhY2godm9pZCBhY3Rpb24oRSBlbnRyeSkpIHsKICAgIGludCBtb2RpZmljYXRpb25Db3VudCA9IF9tb2RpZmljYXRpb25Db3VudDsKICAgIGlmIChpc0VtcHR5KSByZXR1cm47CgogICAgRSBjdXJyZW50ID0gX2ZpcnN0OwogICAgZG8gewogICAgICBhY3Rpb24oY3VycmVudCk7CiAgICAgIGlmIChtb2RpZmljYXRpb25Db3VudCAhPSBfbW9kaWZpY2F0aW9uQ291bnQpIHsKICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgICAgY3VycmVudCA9IGN1cnJlbnQuX25leHQ7CiAgICB9IHdoaWxlICghaWRlbnRpY2FsKGN1cnJlbnQsIF9maXJzdCkpOwogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfbGVuZ3RoID09IDA7CgogIC8vLyBJbnNlcnRzIFtuZXdFbnRyeV0gYXMgbGFzdCBlbnRyeSBvZiB0aGUgbGlzdC4KICAvLy8KICAvLy8gSWYgW3VwZGF0ZUZpcnN0XSBpcyB0cnVlIGFuZCBbZW50cnldIGlzIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgbGlzdCwKICAvLy8gdXBkYXRlcyB0aGUgW19maXJzdF0gZmllbGQgdG8gcG9pbnQgdG8gdGhlIFtuZXdFbnRyeV0gYXMgZmlyc3QgZW50cnkuCiAgdm9pZCBfaW5zZXJ0QmVmb3JlKEUgZW50cnksIEUgbmV3RW50cnksIHtib29sIHVwZGF0ZUZpcnN0fSkgewogICAgaWYgKG5ld0VudHJ5Lmxpc3QgIT0gbnVsbCkgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKCdMaW5rZWRMaXN0RW50cnkgaXMgYWxyZWFkeSBpbiBhIExpbmtlZExpc3QnKTsKICAgIH0KICAgIF9tb2RpZmljYXRpb25Db3VudCsrOwoKICAgIG5ld0VudHJ5Ll9saXN0ID0gdGhpczsKICAgIGlmIChpc0VtcHR5KSB7CiAgICAgIGFzc2VydChlbnRyeSA9PSBudWxsKTsKICAgICAgbmV3RW50cnkuX3ByZXZpb3VzID0gbmV3RW50cnkuX25leHQgPSBuZXdFbnRyeTsKICAgICAgX2ZpcnN0ID0gbmV3RW50cnk7CiAgICAgIF9sZW5ndGgrKzsKICAgICAgcmV0dXJuOwogICAgfQogICAgRSBwcmVkZWNlc3NvciA9IGVudHJ5Ll9wcmV2aW91czsKICAgIEUgc3VjY2Vzc29yID0gZW50cnk7CiAgICBuZXdFbnRyeS5fcHJldmlvdXMgPSBwcmVkZWNlc3NvcjsKICAgIG5ld0VudHJ5Ll9uZXh0ID0gc3VjY2Vzc29yOwogICAgcHJlZGVjZXNzb3IuX25leHQgPSBuZXdFbnRyeTsKICAgIHN1Y2Nlc3Nvci5fcHJldmlvdXMgPSBuZXdFbnRyeTsKICAgIGlmICh1cGRhdGVGaXJzdCAmJiBpZGVudGljYWwoZW50cnksIF9maXJzdCkpIHsKICAgICAgX2ZpcnN0ID0gbmV3RW50cnk7CiAgICB9CiAgICBfbGVuZ3RoKys7CiAgfQoKICB2b2lkIF91bmxpbmsoRSBlbnRyeSkgewogICAgX21vZGlmaWNhdGlvbkNvdW50Kys7CiAgICBlbnRyeS5fbmV4dC5fcHJldmlvdXMgPSBlbnRyeS5fcHJldmlvdXM7CiAgICBFIG5leHQgPSBlbnRyeS5fcHJldmlvdXMuX25leHQgPSBlbnRyeS5fbmV4dDsKICAgIF9sZW5ndGgtLTsKICAgIGVudHJ5Ll9saXN0ID0gZW50cnkuX25leHQgPSBlbnRyeS5fcHJldmlvdXMgPSBudWxsOwogICAgaWYgKGlzRW1wdHkpIHsKICAgICAgX2ZpcnN0ID0gbnVsbDsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKGVudHJ5LCBfZmlyc3QpKSB7CiAgICAgIF9maXJzdCA9IG5leHQ7CiAgICB9CiAgfQp9CgpjbGFzcyBfTGlua2VkTGlzdEl0ZXJhdG9yPEUgZXh0ZW5kcyBMaW5rZWRMaXN0RW50cnk8RT4+IGltcGxlbWVudHMgSXRlcmF0b3I8RT4gewogIGZpbmFsIExpbmtlZExpc3Q8RT4gX2xpc3Q7CiAgZmluYWwgaW50IF9tb2RpZmljYXRpb25Db3VudDsKICBFIF9jdXJyZW50OwogIExpbmtlZExpc3RFbnRyeTxFPiBfbmV4dDsKICBib29sIF92aXNpdGVkRmlyc3Q7CgogIF9MaW5rZWRMaXN0SXRlcmF0b3IoTGlua2VkTGlzdDxFPiBsaXN0KQogICAgICA6IF9saXN0ID0gbGlzdCwKICAgICAgICBfbW9kaWZpY2F0aW9uQ291bnQgPSBsaXN0Ll9tb2RpZmljYXRpb25Db3VudCwKICAgICAgICBfbmV4dCA9IGxpc3QuX2ZpcnN0LAogICAgICAgIF92aXNpdGVkRmlyc3QgPSBmYWxzZTsKCiAgRSBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChfbW9kaWZpY2F0aW9uQ291bnQgIT0gX2xpc3QuX21vZGlmaWNhdGlvbkNvdW50KSB7CiAgICAgIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgIH0KICAgIGlmIChfbGlzdC5pc0VtcHR5IHx8IChfdmlzaXRlZEZpcnN0ICYmIGlkZW50aWNhbChfbmV4dCwgX2xpc3QuZmlyc3QpKSkgewogICAgICBfY3VycmVudCA9IG51bGw7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIF92aXNpdGVkRmlyc3QgPSB0cnVlOwogICAgX2N1cnJlbnQgPSBfbmV4dDsKICAgIF9uZXh0ID0gX25leHQuX25leHQ7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCi8vLyBBbiBvYmplY3QgdGhhdCBjYW4gYmUgYW4gZWxlbWVudCBpbiBhIFtMaW5rZWRMaXN0XS4KLy8vCi8vLyBBbGwgZWxlbWVudHMgb2YgYSBgTGlua2VkTGlzdGAgbXVzdCBleHRlbmQgdGhpcyBjbGFzcy4KLy8vIFRoZSBjbGFzcyBwcm92aWRlcyB0aGUgaW50ZXJuYWwgbGlua3MgdGhhdCBsaW5rIGVsZW1lbnRzIHRvZ2V0aGVyCi8vLyBpbiB0aGUgYExpbmtlZExpc3RgLCBhbmQgYSByZWZlcmVuY2UgdG8gdGhlIGxpbmtlZCBsaXN0IGl0c2VsZgovLy8gdGhhdCBhbiBlbGVtZW50IGlzIGN1cnJlbnRseSBwYXJ0IG9mLgovLy8KLy8vIEFuIGVudHJ5IGNhbiBiZSBpbiBhdCBtb3N0IG9uZSBsaW5rZWQgbGlzdCBhdCBhIHRpbWUuCi8vLyBXaGlsZSBhbiBlbnRyeSBpcyBpbiBhIGxpbmtlZCBsaXN0LCB0aGUgW2xpc3RdIHByb3BlcnR5IHBvaW50cyB0byB0aGF0Ci8vLyBsaW5rZWQgbGlzdCwgYW5kIG90aGVyd2lzZSB0aGUgYGxpc3RgIHByb3BlcnR5IGlzIGBudWxsYC4KLy8vCi8vLyBXaGVuIGNyZWF0ZWQsIGFuIGVudHJ5IGlzIG5vdCBpbiBhbnkgbGlua2VkIGxpc3QuCmFic3RyYWN0IGNsYXNzIExpbmtlZExpc3RFbnRyeTxFIGV4dGVuZHMgTGlua2VkTGlzdEVudHJ5PEU+PiB7CiAgTGlua2VkTGlzdDxFPiBfbGlzdDsKICBFIF9uZXh0OwogIEUgX3ByZXZpb3VzOwoKICAvLy8gR2V0IHRoZSBsaW5rZWQgbGlzdCBjb250YWluaW5nIHRoaXMgZWxlbWVudC4KICAvLy8KICAvLy8gUmV0dXJucyBgbnVsbGAgaWYgdGhpcyBlbnRyeSBpcyBub3QgY3VycmVudGx5IGluIGFueSBsaXN0LgogIExpbmtlZExpc3Q8RT4gZ2V0IGxpc3QgPT4gX2xpc3Q7CgogIC8vLyBVbmxpbmsgdGhlIGVsZW1lbnQgZnJvbSBpdHMgbGlua2VkIGxpc3QuCiAgLy8vCiAgLy8vIFRoZSBlbnRyeSBtdXN0IGN1cnJlbnRseSBiZSBpbiBhIGxpbmtlZCBsaXN0IHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLgogIHZvaWQgdW5saW5rKCkgewogICAgX2xpc3QuX3VubGluayh0aGlzKTsKICB9CgogIC8vLyBSZXR1cm4gdGhlIHN1Y2Nlc3NvciBvZiB0aGlzIGVsZW1lbnQgaW4gaXRzIGxpbmtlZCBsaXN0LgogIC8vLwogIC8vLyBSZXR1cm5zIGBudWxsYCBpZiB0aGVyZSBpcyBubyBzdWNjZXNzb3IgaW4gdGhlIGxpbmtlZCBsaXN0LCBvciBpZiB0aGlzCiAgLy8vIGVudHJ5IGlzIG5vdCBjdXJyZW50bHkgaW4gYW55IGxpc3QuCiAgRSBnZXQgbmV4dCB7CiAgICBpZiAoX2xpc3QgPT0gbnVsbCB8fCBpZGVudGljYWwoX2xpc3QuZmlyc3QsIF9uZXh0KSkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX25leHQ7CiAgfQoKICAvLy8gUmV0dXJuIHRoZSBwcmVkZWNlc3NvciBvZiB0aGlzIGVsZW1lbnQgaW4gaXRzIGxpbmtlZCBsaXN0LgogIC8vLwogIC8vLyBSZXR1cm5zIGBudWxsYCBpZiB0aGVyZSBpcyBubyBwcmVkZWNlc3NvciBpbiB0aGUgbGlua2VkIGxpc3QsIG9yIGlmIHRoaXMKICAvLy8gZW50cnkgaXMgbm90IGN1cnJlbnRseSBpbiBhbnkgbGlzdC4KICBFIGdldCBwcmV2aW91cyB7CiAgICBpZiAoX2xpc3QgPT0gbnVsbCB8fCBpZGVudGljYWwodGhpcywgX2xpc3QuZmlyc3QpKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfcHJldmlvdXM7CiAgfQoKICAvLy8gSW5zZXJ0IGFuIGVsZW1lbnQgYWZ0ZXIgdGhpcyBlbGVtZW50IGluIHRoaXMgZWxlbWVudCdzIGxpbmtlZCBsaXN0LgogIC8vLwogIC8vLyBUaGlzIGVudHJ5IG11c3QgYmUgaW4gYSBsaW5rZWQgbGlzdCB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC4KICAvLy8gVGhlIFtlbnRyeV0gbXVzdCBub3QgYmUgaW4gYSBsaW5rZWQgbGlzdC4KICB2b2lkIGluc2VydEFmdGVyKEUgZW50cnkpIHsKICAgIF9saXN0Ll9pbnNlcnRCZWZvcmUoX25leHQsIGVudHJ5LCB1cGRhdGVGaXJzdDogZmFsc2UpOwogIH0KCiAgLy8vIEluc2VydCBhbiBlbGVtZW50IGJlZm9yZSB0aGlzIGVsZW1lbnQgaW4gdGhpcyBlbGVtZW50J3MgbGlua2VkIGxpc3QuCiAgLy8vCiAgLy8vIFRoaXMgZW50cnkgbXVzdCBiZSBpbiBhIGxpbmtlZCBsaXN0IHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLgogIC8vLyBUaGUgW2VudHJ5XSBtdXN0IG5vdCBiZSBpbiBhIGxpbmtlZCBsaXN0LgogIHZvaWQgaW5zZXJ0QmVmb3JlKEUgZW50cnkpIHsKICAgIF9saXN0Ll9pbnNlcnRCZWZvcmUodGhpcywgZW50cnksIHVwZGF0ZUZpcnN0OiB0cnVlKTsKICB9Cn0KgQsATk48AQ8BGQFRBE9NSgRPTgsES1FDBE8zRkoEUCdFHhMMASkQATcbNRQEATEWNgQBMyUaBAErBkwGTQwZKzURBAE8AR0BMREaGQEVCRYaOigBExEEARATKwYTBAEPEysGHQQBERMrBhctBhMEATkGOCcwGQEYCRc1MQgfKwQBJAE0BktMQCFGBhoBGxMdNhkRDgYlGSYgIiQzGQYPBAEaGi0yDzgTFSsVBgQCAVEdIA4cFgEqFjYdHwEdARQ6LwZNFxQGGhYZEQQCATgEO0ZDKgQ6Sz4ENj8XCw8BMwZBIwEvBk8SGQQBPwZNKg9FEgQBQQZPKhNEFgQBSgZGMB47BAFLBkYwHzkEAgEgZGFydDpjb2xsZWN0aW9uL2xpbmtlZF9saXN0LmRhcnRBb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvY29sbGVjdGlvbi9saXN0LmRhcnS9vy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmNvbGxlY3Rpb247CgovLy8gQWJzdHJhY3QgaW1wbGVtZW50YXRpb24gb2YgYSBsaXN0LgovLy8KLy8vIGBMaXN0QmFzZWAgY2FuIGJlIHVzZWQgYXMgYSBiYXNlIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgdGhlIGBMaXN0YAovLy8gaW50ZXJmYWNlLgovLy8KLy8vIEFsbCBvcGVyYXRpb25zIGFyZSBkZWZpbmVkIGluIHRlcm1zIG9mIGBsZW5ndGhgLCBgb3BlcmF0b3JbXWAsCi8vLyBgb3BlcmF0b3JbXT1gIGFuZCBgbGVuZ3RoPWAsIHdoaWNoIG5lZWQgdG8gYmUgaW1wbGVtZW50ZWQuCi8vLwovLy8gKk5PVElDRSo6IEZvcndhcmRpbmcganVzdCB0aGVzZSBmb3VyIG9wZXJhdGlvbnMgdG8gYSBub3JtYWwgZ3Jvd2FibGUgW0xpc3RdCi8vLyAoYXMgY3JlYXRlZCBieSBgbmV3IExpc3QoKWApIHdpbGwgZ2l2ZSB2ZXJ5IGJhZCBwZXJmb3JtYW5jZSBmb3IgYGFkZGAgYW5kCi8vLyBgYWRkQWxsYCBvcGVyYXRpb25zIG9mIGBMaXN0QmFzZWAuIFRoZXNlIG9wZXJhdGlvbnMgYXJlIGltcGxlbWVudGVkIGJ5Ci8vLyBpbmNyZWFzaW5nIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgYnkgb25lIGZvciBlYWNoIGBhZGRgIG9wZXJhdGlvbiwgYW5kCi8vLyByZXBlYXRlZGx5IGluY3JlYXNpbmcgdGhlIGxlbmd0aCBvZiBhIGdyb3dhYmxlIGxpc3QgaXMgbm90IGVmZmljaWVudC4KLy8vIFRvIGF2b2lkIHRoaXMsIGVpdGhlciBvdmVycmlkZSAnYWRkJyBhbmQgJ2FkZEFsbCcgdG8gYWxzbyBmb3J3YXJkIGRpcmVjdGx5Ci8vLyB0byB0aGUgZ3Jvd2FibGUgbGlzdCwgb3IsIHByZWZlcmFibHksIHVzZSBgRGVsZWdhdGluZ0xpc3RgIGZyb20KLy8vICJwYWNrYWdlOmNvbGxlY3Rpb24vd3JhcHBlcnMuZGFydCIgaW5zdGVhZC4KYWJzdHJhY3QgY2xhc3MgTGlzdEJhc2U8RT4gZXh0ZW5kcyBPYmplY3Qgd2l0aCBMaXN0TWl4aW48RT4gewogIC8vLyBDb252ZXJ0cyBhIFtMaXN0XSB0byBhIFtTdHJpbmddLgogIC8vLwogIC8vLyBDb252ZXJ0cyBbbGlzdF0gdG8gYSBzdHJpbmcgYnkgY29udmVydGluZyBlYWNoIGVsZW1lbnQgdG8gYSBzdHJpbmcgKGJ5CiAgLy8vIGNhbGxpbmcgW09iamVjdC50b1N0cmluZ10pLCBqb2luaW5nIHRoZW0gd2l0aCAiLCAiLCBhbmQgd3JhcHBpbmcgdGhlCiAgLy8vIHJlc3VsdCBpbiAiWyIgYW5kICJdIi4KICAvLy8KICAvLy8gSGFuZGxlcyBjaXJjdWxhciByZWZlcmVuY2VzIHdoZXJlIGNvbnZlcnRpbmcgb25lIG9mIHRoZSBlbGVtZW50cwogIC8vLyB0byBhIHN0cmluZyBlbmRzIHVwIGNvbnZlcnRpbmcgW2xpc3RdIHRvIGEgc3RyaW5nIGFnYWluLgogIHN0YXRpYyBTdHJpbmcgbGlzdFRvU3RyaW5nKExpc3QgbGlzdCkgPT4KICAgICAgSXRlcmFibGVCYXNlLml0ZXJhYmxlVG9GdWxsU3RyaW5nKGxpc3QsICdbJywgJ10nKTsKfQoKLy8vIEJhc2UgaW1wbGVtZW50YXRpb24gb2YgYSBbTGlzdF0gY2xhc3MuCi8vLwovLy8gYExpc3RNaXhpbmAgY2FuIGJlIHVzZWQgYXMgYSBtaXhpbiB0byBtYWtlIGEgY2xhc3MgaW1wbGVtZW50Ci8vLyB0aGUgYExpc3RgIGludGVyZmFjZS4KLy8vCi8vLyBUaGlzIGltcGxlbWVudHMgYWxsIHJlYWQgb3BlcmF0aW9ucyB1c2luZyBvbmx5IHRoZSBgbGVuZ3RoYCBhbmQKLy8vIGBvcGVyYXRvcltdYCBtZW1iZXJzLiBJdCBpbXBsZW1lbnRzIHdyaXRlIG9wZXJhdGlvbnMgdXNpbmcgdGhvc2UgYW5kCi8vLyBgbGVuZ3RoPWAgYW5kIGBvcGVyYXRvcltdPWAKLy8vCi8vLyAqTk9USUNFKjogRm9yd2FyZGluZyBqdXN0IHRoZXNlIGZvdXIgb3BlcmF0aW9ucyB0byBhIG5vcm1hbCBncm93YWJsZSBbTGlzdF0KLy8vIChhcyBjcmVhdGVkIGJ5IGBuZXcgTGlzdCgpYCkgd2lsbCBnaXZlIHZlcnkgYmFkIHBlcmZvcm1hbmNlIGZvciBgYWRkYCBhbmQKLy8vIGBhZGRBbGxgIG9wZXJhdGlvbnMgb2YgYExpc3RCYXNlYC4gVGhlc2Ugb3BlcmF0aW9ucyBhcmUgaW1wbGVtZW50ZWQgYnkKLy8vIGluY3JlYXNpbmcgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBieSBvbmUgZm9yIGVhY2ggYGFkZGAgb3BlcmF0aW9uLCBhbmQKLy8vIHJlcGVhdGVkbHkgaW5jcmVhc2luZyB0aGUgbGVuZ3RoIG9mIGEgZ3Jvd2FibGUgbGlzdCBpcyBub3QgZWZmaWNpZW50LgovLy8gVG8gYXZvaWQgdGhpcywgZWl0aGVyIG92ZXJyaWRlICdhZGQnIGFuZCAnYWRkQWxsJyB0byBhbHNvIGZvcndhcmQgZGlyZWN0bHkKLy8vIHRvIHRoZSBncm93YWJsZSBsaXN0LCBvciwgaWYgcG9zc2libGUsIHVzZSBgRGVsZWdhdGluZ0xpc3RgIGZyb20KLy8vICJwYWNrYWdlOmNvbGxlY3Rpb24vd3JhcHBlcnMuZGFydCIgaW5zdGVhZC4KYWJzdHJhY3QgY2xhc3MgTGlzdE1peGluPEU+IGltcGxlbWVudHMgTGlzdDxFPiB7CiAgLy8gSXRlcmFibGUgaW50ZXJmYWNlLgogIC8vIFRPRE8obHJuKTogV2hlbiB3ZSBnZXQgY29tcG9zYWJsZSBtaXhpbnMsIHJldXNlIEl0ZXJhYmxlTWl4aW4gaW5zdGVhZAogIC8vIG9mIHJlZGFjbGF0aW5nIGV2ZXJ5dGhpbmcuCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yID0+IExpc3RJdGVyYXRvcjxFPih0aGlzKTsKCiAgRSBlbGVtZW50QXQoaW50IGluZGV4KSA9PiB0aGlzW2luZGV4XTsKCiAgSXRlcmFibGU8RT4gZm9sbG93ZWRCeShJdGVyYWJsZTxFPiBvdGhlcikgPT4KICAgICAgRm9sbG93ZWRCeUl0ZXJhYmxlPEU+LmZpcnN0RWZmaWNpZW50KHRoaXMsIG90aGVyKTsKCiAgdm9pZCBmb3JFYWNoKHZvaWQgYWN0aW9uKEUgZWxlbWVudCkpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgYWN0aW9uKHRoaXNbaV0pOwogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBib29sIGdldCBpc0VtcHR5ID0+IGxlbmd0aCA9PSAwOwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+ICFpc0VtcHR5OwoKICBFIGdldCBmaXJzdCB7CiAgICBpZiAobGVuZ3RoID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgcmV0dXJuIHRoaXNbMF07CiAgfQoKICB2b2lkIHNldCBmaXJzdChFIHZhbHVlKSB7CiAgICBpZiAobGVuZ3RoID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgdGhpc1swXSA9IHZhbHVlOwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICBpZiAobGVuZ3RoID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgcmV0dXJuIHRoaXNbbGVuZ3RoIC0gMV07CiAgfQoKICB2b2lkIHNldCBsYXN0KEUgdmFsdWUpIHsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB0aGlzW2xlbmd0aCAtIDFdID0gdmFsdWU7CiAgfQoKICBFIGdldCBzaW5nbGUgewogICAgaWYgKGxlbmd0aCA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIGlmIChsZW5ndGggPiAxKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICByZXR1cm4gdGhpc1swXTsKICB9CgogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgZXZlcnkoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKCF0ZXN0KHRoaXNbaV0pKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgYm9vbCBhbnkoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRlc3QodGhpc1tpXSkpIHJldHVybiB0cnVlOwogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBFIGZpcnN0V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgewogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBFIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGxhc3RXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgRSBlbGVtZW50ID0gdGhpc1tpXTsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHJldHVybiBlbGVtZW50OwogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBzaW5nbGVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBFIG1hdGNoOwogICAgYm9vbCBtYXRjaEZvdW5kID0gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIEUgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgaWYgKG1hdGNoRm91bmQpIHsKICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgICAgICB9CiAgICAgICAgbWF0Y2hGb3VuZCA9IHRydWU7CiAgICAgICAgbWF0Y2ggPSBlbGVtZW50OwogICAgICB9CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChtYXRjaEZvdW5kKSByZXR1cm4gbWF0Y2g7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgU3RyaW5nIGpvaW4oW1N0cmluZyBzZXBhcmF0b3IgPSAiIl0pIHsKICAgIGlmIChsZW5ndGggPT0gMCkgcmV0dXJuICIiOwogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IFN0cmluZ0J1ZmZlcigpLi53cml0ZUFsbCh0aGlzLCBzZXBhcmF0b3IpOwogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgSXRlcmFibGU8RT4gd2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IFdoZXJlSXRlcmFibGU8RT4odGhpcywgdGVzdCk7CgogIEl0ZXJhYmxlPFQ+IHdoZXJlVHlwZTxUPigpID0+IFdoZXJlVHlwZUl0ZXJhYmxlPFQ+KHRoaXMpOwoKICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKEUgZWxlbWVudCkpID0+IE1hcHBlZExpc3RJdGVyYWJsZTxFLCBUPih0aGlzLCBmKTsKCiAgSXRlcmFibGU8VD4gZXhwYW5kPFQ+KEl0ZXJhYmxlPFQ+IGYoRSBlbGVtZW50KSkgPT4KICAgICAgRXhwYW5kSXRlcmFibGU8RSwgVD4odGhpcywgZik7CgogIEUgcmVkdWNlKEUgY29tYmluZShFIHByZXZpb3VzVmFsdWUsIEUgZWxlbWVudCkpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICBFIHZhbHVlID0gdGhpc1swXTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgdmFsdWUgPSBjb21iaW5lKHZhbHVlLCB0aGlzW2ldKTsKICAgICAgaWYgKGxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICAgIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgVCBmb2xkPFQ+KFQgaW5pdGlhbFZhbHVlLCBUIGNvbWJpbmUoVCBwcmV2aW91c1ZhbHVlLCBFIGVsZW1lbnQpKSB7CiAgICB2YXIgdmFsdWUgPSBpbml0aWFsVmFsdWU7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgdGhpc1tpXSk7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIEl0ZXJhYmxlPEU+IHNraXAoaW50IGNvdW50KSA9PiBTdWJMaXN0SXRlcmFibGU8RT4odGhpcywgY291bnQsIG51bGwpOwoKICBJdGVyYWJsZTxFPiBza2lwV2hpbGUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIHJldHVybiBTa2lwV2hpbGVJdGVyYWJsZTxFPih0aGlzLCB0ZXN0KTsKICB9CgogIEl0ZXJhYmxlPEU+IHRha2UoaW50IGNvdW50KSA9PiBTdWJMaXN0SXRlcmFibGU8RT4odGhpcywgMCwgY291bnQpOwoKICBJdGVyYWJsZTxFPiB0YWtlV2hpbGUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIHJldHVybiBUYWtlV2hpbGVJdGVyYWJsZTxFPih0aGlzLCB0ZXN0KTsKICB9CgogIExpc3Q8RT4gdG9MaXN0KHtib29sIGdyb3dhYmxlID0gdHJ1ZX0pIHsKICAgIExpc3Q8RT4gcmVzdWx0OwogICAgaWYgKGdyb3dhYmxlKSB7CiAgICAgIHJlc3VsdCA9IDxFPltdLi5sZW5ndGggPSBsZW5ndGg7CiAgICB9IGVsc2UgewogICAgICByZXN1bHQgPSBMaXN0PEU+KGxlbmd0aCk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdFtpXSA9IHRoaXNbaV07CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU2V0PEU+IHRvU2V0KCkgewogICAgU2V0PEU+IHJlc3VsdCA9IFNldDxFPigpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICByZXN1bHQuYWRkKHRoaXNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIExpc3QgaW50ZXJmYWNlLgogIHZvaWQgYWRkKEUgZWxlbWVudCkgewogICAgdGhpc1t0aGlzLmxlbmd0aCsrXSA9IGVsZW1lbnQ7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgaW50IGkgPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoRSBlbGVtZW50IGluIGl0ZXJhYmxlKSB7CiAgICAgIGFzc2VydCh0aGlzLmxlbmd0aCA9PSBpIHx8ICh0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcykpKTsKICAgICAgdGhpcy5sZW5ndGggPSBpICsgMTsKICAgICAgdGhpc1tpXSA9IGVsZW1lbnQ7CiAgICAgIGkrKzsKICAgIH0KICB9CgogIGJvb2wgcmVtb3ZlKE9iamVjdCBlbGVtZW50KSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgewogICAgICAgIHRoaXMuX2Nsb3NlR2FwKGksIGkgKyAxKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8vIFJlbW92ZXMgZWxlbWVudHMgZnJvbSB0aGUgbGlzdCBzdGFydGluZyBhdCBbc3RhcnRdIHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nCiAgLy8vIFtlbmRdLiAgQXJndW1lbnRzIGFyZSBwcmUtdmFsaWRhdGVkLgogIHZvaWQgX2Nsb3NlR2FwKGludCBzdGFydCwgaW50IGVuZCkgewogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgYXNzZXJ0KDAgPD0gc3RhcnQpOwogICAgYXNzZXJ0KHN0YXJ0IDwgZW5kKTsKICAgIGFzc2VydChlbmQgPD0gbGVuZ3RoKTsKICAgIGludCBzaXplID0gZW5kIC0gc3RhcnQ7CiAgICBmb3IgKGludCBpID0gZW5kOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgdGhpc1tpIC0gc2l6ZV0gPSB0aGlzW2ldOwogICAgfQogICAgdGhpcy5sZW5ndGggPSBsZW5ndGggLSBzaXplOwogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgX2ZpbHRlcih0ZXN0LCBmYWxzZSk7CiAgfQoKICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBfZmlsdGVyKHRlc3QsIHRydWUpOwogIH0KCiAgdm9pZCBfZmlsdGVyKGJvb2wgdGVzdChFIGVsZW1lbnQpLCBib29sIHJldGFpbk1hdGNoaW5nKSB7CiAgICBMaXN0PEU+IHJldGFpbmVkID0gPEU+W107CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBlbGVtZW50ID0gdGhpc1tpXTsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkgPT0gcmV0YWluTWF0Y2hpbmcpIHsKICAgICAgICByZXRhaW5lZC5hZGQoZWxlbWVudCk7CiAgICAgIH0KICAgICAgaWYgKGxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICAgIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgfQogICAgaWYgKHJldGFpbmVkLmxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICB0aGlzLnNldFJhbmdlKDAsIHJldGFpbmVkLmxlbmd0aCwgcmV0YWluZWQpOwogICAgICB0aGlzLmxlbmd0aCA9IHJldGFpbmVkLmxlbmd0aDsKICAgIH0KICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICB0aGlzLmxlbmd0aCA9IDA7CiAgfQoKICBMaXN0PFI+IGNhc3Q8Uj4oKSA9PiBMaXN0LmNhc3RGcm9tPEUsIFI+KHRoaXMpOwogIEUgcmVtb3ZlTGFzdCgpIHsKICAgIGlmIChsZW5ndGggPT0gMCkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIH0KICAgIEUgcmVzdWx0ID0gdGhpc1tsZW5ndGggLSAxXTsKICAgIGxlbmd0aC0tOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgc29ydChbaW50IGNvbXBhcmUoRSBhLCBFIGIpXSkgewogICAgU29ydC5zb3J0KHRoaXMsIGNvbXBhcmUgPz8gX2NvbXBhcmVBbnkpOwogIH0KCiAgc3RhdGljIGludCBfY29tcGFyZUFueShhLCBiKSB7CiAgICAvLyBJbiBzdHJvbmcgbW9kZSBDb21wYXJhYmxlLmNvbXBhcmUgcmVxdWlyZXMgYW4gaW1wbGljaXQgY2FzdCB0byBlbnN1cmUKICAgIC8vIGBhYCBhbmQgYGJgIGFyZSBDb21wYXJhYmxlLgogICAgcmV0dXJuIENvbXBhcmFibGUuY29tcGFyZShhLCBiKTsKICB9CgogIHZvaWQgc2h1ZmZsZShbUmFuZG9tIHJhbmRvbV0pIHsKICAgIHJhbmRvbSA/Pz0gUmFuZG9tKCk7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICB3aGlsZSAobGVuZ3RoID4gMSkgewogICAgICBpbnQgcG9zID0gcmFuZG9tLm5leHRJbnQobGVuZ3RoKTsKICAgICAgbGVuZ3RoIC09IDE7CiAgICAgIHZhciB0bXAgPSB0aGlzW2xlbmd0aF07CiAgICAgIHRoaXNbbGVuZ3RoXSA9IHRoaXNbcG9zXTsKICAgICAgdGhpc1twb3NdID0gdG1wOwogICAgfQogIH0KCiAgTWFwPGludCwgRT4gYXNNYXAoKSB7CiAgICByZXR1cm4gTGlzdE1hcFZpZXc8RT4odGhpcyk7CiAgfQoKICBMaXN0PEU+IG9wZXJhdG9yICsoTGlzdDxFPiBvdGhlcikgewogICAgdmFyIHJlc3VsdCA9IDxFPltdLi5sZW5ndGggPSAodGhpcy5sZW5ndGggKyBvdGhlci5sZW5ndGgpOwogICAgcmVzdWx0LnNldFJhbmdlKDAsIHRoaXMubGVuZ3RoLCB0aGlzKTsKICAgIHJlc3VsdC5zZXRSYW5nZSh0aGlzLmxlbmd0aCwgcmVzdWx0Lmxlbmd0aCwgb3RoZXIpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIExpc3Q8RT4gc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSkgewogICAgaW50IGxpc3RMZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGVuZCA/Pz0gbGlzdExlbmd0aDsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGxpc3RMZW5ndGgpOwogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgTGlzdDxFPiByZXN1bHQgPSA8RT5bXS4ubGVuZ3RoID0gbGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICByZXN1bHRbaV0gPSB0aGlzW3N0YXJ0ICsgaV07CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgSXRlcmFibGU8RT4gZ2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICByZXR1cm4gU3ViTGlzdEl0ZXJhYmxlPEU+KHRoaXMsIHN0YXJ0LCBlbmQpOwogIH0KCiAgdm9pZCByZW1vdmVSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIGlmIChlbmQgPiBzdGFydCkgewogICAgICBfY2xvc2VHYXAoc3RhcnQsIGVuZCk7CiAgICB9CiAgfQoKICB2b2lkIGZpbGxSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIFtFIGZpbGxdKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICB0aGlzW2ldID0gZmlsbDsKICAgIH0KICB9CgogIHZvaWQgc2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxFPiBpdGVyYWJsZSwgW2ludCBza2lwQ291bnQgPSAwXSkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm47CiAgICBSYW5nZUVycm9yLmNoZWNrTm90TmVnYXRpdmUoc2tpcENvdW50LCAic2tpcENvdW50Iik7CgogICAgTGlzdDxFPiBvdGhlckxpc3Q7CiAgICBpbnQgb3RoZXJTdGFydDsKICAgIC8vIFRPRE8oZmxvaXRzY2gpOiBNYWtlIHRoaXMgYWNjZXB0IG1vcmUuCiAgICBpZiAoaXRlcmFibGUgaXMgTGlzdDxFPikgewogICAgICBvdGhlckxpc3QgPSBpdGVyYWJsZTsKICAgICAgb3RoZXJTdGFydCA9IHNraXBDb3VudDsKICAgIH0gZWxzZSB7CiAgICAgIG90aGVyTGlzdCA9IGl0ZXJhYmxlLnNraXAoc2tpcENvdW50KS50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICAgICAgb3RoZXJTdGFydCA9IDA7CiAgICB9CiAgICBpZiAob3RoZXJTdGFydCArIGxlbmd0aCA+IG90aGVyTGlzdC5sZW5ndGgpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vRmV3KCk7CiAgICB9CiAgICBpZiAob3RoZXJTdGFydCA8IHN0YXJ0KSB7CiAgICAgIC8vIENvcHkgYmFja3dhcmRzIHRvIGVuc3VyZSBjb3JyZWN0IGNvcHkgaWYgW2Zyb21dIGlzIHRoaXMuCiAgICAgIGZvciAoaW50IGkgPSBsZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIHRoaXNbc3RhcnQgKyBpXSA9IG90aGVyTGlzdFtvdGhlclN0YXJ0ICsgaV07CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICB0aGlzW3N0YXJ0ICsgaV0gPSBvdGhlckxpc3Rbb3RoZXJTdGFydCArIGldOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHJlcGxhY2VSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPEU+IG5ld0NvbnRlbnRzKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICBpZiAobmV3Q29udGVudHMgaXMhIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlKSB7CiAgICAgIG5ld0NvbnRlbnRzID0gbmV3Q29udGVudHMudG9MaXN0KCk7CiAgICB9CiAgICBpbnQgcmVtb3ZlTGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBpbnQgaW5zZXJ0TGVuZ3RoID0gbmV3Q29udGVudHMubGVuZ3RoOwogICAgaWYgKHJlbW92ZUxlbmd0aCA+PSBpbnNlcnRMZW5ndGgpIHsKICAgICAgaW50IGluc2VydEVuZCA9IHN0YXJ0ICsgaW5zZXJ0TGVuZ3RoOwogICAgICB0aGlzLnNldFJhbmdlKHN0YXJ0LCBpbnNlcnRFbmQsIG5ld0NvbnRlbnRzKTsKICAgICAgaWYgKHJlbW92ZUxlbmd0aCA+IGluc2VydExlbmd0aCkgewogICAgICAgIF9jbG9zZUdhcChpbnNlcnRFbmQsIGVuZCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGludCBkZWx0YSA9IGluc2VydExlbmd0aCAtIHJlbW92ZUxlbmd0aDsKICAgICAgaW50IG5ld0xlbmd0aCA9IHRoaXMubGVuZ3RoICsgZGVsdGE7CiAgICAgIGludCBpbnNlcnRFbmQgPSBzdGFydCArIGluc2VydExlbmd0aDsgLy8gYWthLiBlbmQgKyBkZWx0YS4KICAgICAgdGhpcy5sZW5ndGggPSBuZXdMZW5ndGg7CiAgICAgIHRoaXMuc2V0UmFuZ2UoaW5zZXJ0RW5kLCBuZXdMZW5ndGgsIHRoaXMsIGVuZCk7CiAgICAgIHRoaXMuc2V0UmFuZ2Uoc3RhcnQsIGluc2VydEVuZCwgbmV3Q29udGVudHMpOwogICAgfQogIH0KCiAgaW50IGluZGV4T2YoT2JqZWN0IGVsZW1lbnQsIFtpbnQgc3RhcnQgPSAwXSkgewogICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgdGhpcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodGhpc1tpXSA9PSBlbGVtZW50KSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIGludCBpbmRleFdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCBbaW50IHN0YXJ0ID0gMF0pIHsKICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMDsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRlc3QodGhpc1tpXSkpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgaW50IGxhc3RJbmRleE9mKE9iamVjdCBlbGVtZW50LCBbaW50IHN0YXJ0XSkgewogICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHN0YXJ0ID0gdGhpcy5sZW5ndGggLSAxOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpID49IDA7IGktLSkgewogICAgICBpZiAodGhpc1tpXSA9PSBlbGVtZW50KSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIGludCBsYXN0SW5kZXhXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwgW2ludCBzdGFydF0pIHsKICAgIGlmIChzdGFydCA9PSBudWxsIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSBzdGFydCA9IHRoaXMubGVuZ3RoIC0gMTsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA+PSAwOyBpLS0pIHsKICAgICAgaWYgKHRlc3QodGhpc1tpXSkpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgdm9pZCBpbnNlcnQoaW50IGluZGV4LCBFIGVsZW1lbnQpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGluZGV4LCAiaW5kZXgiKTsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWx1ZUluSW50ZXJ2YWwoaW5kZXgsIDAsIGxlbmd0aCwgImluZGV4Iik7CiAgICBpZiAoaW5kZXggPT0gdGhpcy5sZW5ndGgpIHsKICAgICAgYWRkKGVsZW1lbnQpOwogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLmxlbmd0aCsrOwogICAgc2V0UmFuZ2UoaW5kZXggKyAxLCB0aGlzLmxlbmd0aCwgdGhpcywgaW5kZXgpOwogICAgdGhpc1tpbmRleF0gPSBlbGVtZW50OwogIH0KCiAgRSByZW1vdmVBdChpbnQgaW5kZXgpIHsKICAgIEUgcmVzdWx0ID0gdGhpc1tpbmRleF07CiAgICBfY2xvc2VHYXAoaW5kZXgsIGluZGV4ICsgMSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCBpbnNlcnRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbHVlSW5JbnRlcnZhbChpbmRleCwgMCwgbGVuZ3RoLCAiaW5kZXgiKTsKICAgIGlmIChpdGVyYWJsZSBpcyEgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGUgfHwgaWRlbnRpY2FsKGl0ZXJhYmxlLCB0aGlzKSkgewogICAgICBpdGVyYWJsZSA9IGl0ZXJhYmxlLnRvTGlzdCgpOwogICAgfQogICAgaW50IGluc2VydGlvbkxlbmd0aCA9IGl0ZXJhYmxlLmxlbmd0aDsKICAgIC8vIFRoZXJlIG1pZ2h0IGJlIGVycm9ycyBhZnRlciB0aGUgbGVuZ3RoIGNoYW5nZSwgaW4gd2hpY2ggY2FzZSB0aGUgbGlzdAogICAgLy8gd2lsbCBlbmQgdXAgYmVpbmcgbW9kaWZpZWQgYnV0IHRoZSBvcGVyYXRpb24gbm90IGNvbXBsZXRlLiBVbmxlc3Mgd2UKICAgIC8vIGFsd2F5cyBnbyB0aHJvdWdoIGEgInRvTGlzdCIgd2UgY2FuJ3QgcmVhbGx5IGF2b2lkIHRoYXQuCiAgICB0aGlzLmxlbmd0aCArPSBpbnNlcnRpb25MZW5ndGg7CiAgICBpZiAoaXRlcmFibGUubGVuZ3RoICE9IGluc2VydGlvbkxlbmd0aCkgewogICAgICAvLyBJZiB0aGUgaXRlcmFibGUncyBsZW5ndGggaXMgbGlua2VkIHRvIHRoaXMgbGlzdCdzIGxlbmd0aCBzb21laG93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IHBlcmZvcm1lZCwgZm9yIGV4YW1wbGUgZHVyaW5nIGEKLy8vIGNhbGwgdG8gW2ZvckVhY2hdLgovLy8gTW9kaWZ5aW5nIHRoZSBxdWV1ZSB3aGlsZSBpdCBpcyBiZWluZyBpdGVyYXRlZCB3aWxsIG1vc3QgbGlrZWx5IGJyZWFrIHRoZQovLy8gaXRlcmF0aW9uLgovLy8gVGhpcyBnb2VzIGJvdGggZm9yIHVzaW5nIHRoZSBbaXRlcmF0b3JdIGRpcmVjdGx5LCBvciBmb3IgaXRlcmF0aW5nIGFuCi8vLyBgSXRlcmFibGVgIHJldHVybmVkIGJ5IGEgbWV0aG9kIGxpa2UgW21hcF0gb3IgW3doZXJlXS4KYWJzdHJhY3QgY2xhc3MgUXVldWU8RT4gaW1wbGVtZW50cyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxFPiB7CiAgLy8vIENyZWF0ZXMgYSBxdWV1ZS4KICBmYWN0b3J5IFF1ZXVlKCkgPSBMaXN0UXVldWU8RT47CgogIC8vLyBDcmVhdGVzIGEgcXVldWUgY29udGFpbmluZyBhbGwgW2VsZW1lbnRzXS4KICAvLy8KICAvLy8gVGhlIGVsZW1lbnQgb3JkZXIgaW4gdGhlIHF1ZXVlIGlzIGFzIGlmIHRoZSBlbGVtZW50cyB3ZXJlIGFkZGVkIHVzaW5nCiAgLy8vIFthZGRMYXN0XSBpbiB0aGUgb3JkZXIgcHJvdmlkZWQgYnkgW2VsZW1lbnRzLml0ZXJhdG9yXS4KICAvLy8KICAvLy8gQWxsIHRoZSBbZWxlbWVudHNdIHNob3VsZCBiZSBpbnN0YW5jZXMgb2YgW0VdLgogIC8vLyBUaGUgYGVsZW1lbnRzYCBpdGVyYWJsZSBpdHNlbGYgbWF5IGhhdmUgYW55IGVsZW1lbnQgdHlwZSwgc28gdGhpcwogIC8vLyBjb25zdHJ1Y3RvciBjYW4gYmUgdXNlZCB0byBkb3duLWNhc3QgYSBgUXVldWVgLCBmb3IgZXhhbXBsZSBhczoKICAvLy8gYGBgZGFydAogIC8vLyBRdWV1ZTxTdXBlclR5cGU+IHN1cGVyUXVldWUgPSAuLi47CiAgLy8vIFF1ZXVlPFN1YlR5cGU+IHN1YlF1ZXVlID0KICAvLy8gICAgIG5ldyBRdWV1ZTxTdWJUeXBlPi5mcm9tKHN1cGVyUXVldWUud2hlcmVUeXBlPFN1YlR5cGU+KCkpOwogIC8vLyBgYGAKICBmYWN0b3J5IFF1ZXVlLmZyb20oSXRlcmFibGUgZWxlbWVudHMpID0gTGlzdFF1ZXVlPEU+LmZyb207CgogIC8vLyBDcmVhdGVzIGEgcXVldWUgZnJvbSBbZWxlbWVudHNdLgogIC8vLwogIC8vLyBUaGUgZWxlbWVudCBvcmRlciBpbiB0aGUgcXVldWUgaXMgYXMgaWYgdGhlIGVsZW1lbnRzIHdlcmUgYWRkZWQgdXNpbmcKICAvLy8gW2FkZExhc3RdIGluIHRoZSBvcmRlciBwcm92aWRlZCBieSBbZWxlbWVudHMuaXRlcmF0b3JdLgogIGZhY3RvcnkgUXVldWUub2YoSXRlcmFibGU8RT4gZWxlbWVudHMpID0gTGlzdFF1ZXVlPEU+Lm9mOwoKICAvLy8gQWRhcHRzIFtzb3VyY2VdIHRvIGJlIGEgYFF1ZXVlPFQ+YC4KICAvLy8KICAvLy8gQW55IHRpbWUgdGhlIHF1ZXVlIHdvdWxkIHByb2R1Y2UgYW4gZWxlbWVudCB0aGF0IGlzIG5vdCBhIFtUXSwKICAvLy8gdGhlIGVsZW1lbnQgYWNjZXNzIHdpbGwgdGhyb3cuCiAgLy8vCiAgLy8vIEFueSB0aW1lIGEgW1RdIHZhbHVlIGlzIGF0dGVtcHRlZCBzdG9yZWQgaW50byB0aGUgYWRhcHRlZCBxdWV1ZSwKICAvLy8gdGhlIHN0b3JlIHdpbGwgdGhyb3cgdW5sZXNzIHRoZSB2YWx1ZSBpcyBhbHNvIGFuIGluc3RhbmNlIG9mIFtTXS4KICAvLy8KICAvLy8gSWYgYWxsIGFjY2Vzc2VkIGVsZW1lbnRzIG9mIFtzb3VyY2VdIGFyZSBhY3R1YWxseSBpbnN0YW5jZXMgb2YgW1RdLAogIC8vLyBhbmQgaWYgYWxsIGVsZW1lbnRzIHN0b3JlZCBpbnRvIHRoZSByZXR1cm5lZCBxdWV1ZSBhcmUgYWN0dWFsbHkgaW5zdGFuY2UKICAvLy8gb2YgW1NdLAogIC8vLyB0aGVuIHRoZSByZXR1cm5lZCBxdWV1ZSBjYW4gYmUgdXNlZCBhcyBhIGBRdWV1ZTxUPmAuCiAgc3RhdGljIFF1ZXVlPFQ+IGNhc3RGcm9tPFMsIFQ+KFF1ZXVlPFM+IHNvdXJjZSkgPT4gQ2FzdFF1ZXVlPFMsIFQ+KHNvdXJjZSk7CgogIC8vLyBQcm92aWRlcyBhIHZpZXcgb2YgdGhpcyBxdWV1ZSBhcyBhIHF1ZXVlIG9mIFtSXSBpbnN0YW5jZXMsIGlmIG5lY2Vzc2FyeS4KICAvLy8KICAvLy8gSWYgdGhpcyBxdWV1ZSBjb250YWlucyBvbmx5IGluc3RhbmNlcyBvZiBbUl0sIGFsbCByZWFkIG9wZXJhdGlvbnMKICAvLy8gd2lsbCB3b3JrIGNvcnJlY3RseS4gSWYgYW55IG9wZXJhdGlvbiB0cmllcyB0byBhY2Nlc3MgYW4gZWxlbWVudAogIC8vLyB0aGF0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBbUl0sIHRoZSBhY2Nlc3Mgd2lsbCB0aHJvdyBpbnN0ZWFkLgogIC8vLwogIC8vLyBFbGVtZW50cyBhZGRlZCB0byB0aGUgcXVldWUgKGUuZy4sIGJ5IHVzaW5nIFthZGRGaXJzdF0gb3IgW2FkZEFsbF0pCiAgLy8vIG11c3QgYmUgaW5zdGFuY2Ugb2YgW1JdIHRvIGJlIHZhbGlkIGFyZ3VtZW50cyB0byB0aGUgYWRkaW5nIGZ1bmN0aW9uLAogIC8vLyBhbmQgdGhleSBtdXN0IGJlIGluc3RhbmNlcyBvZiBbRV0gYXMgd2VsbCB0byBiZSBhY2NlcHRlZCBieQogIC8vLyB0aGlzIHF1ZXVlIGFzIHdlbGwuCiAgUXVldWU8Uj4gY2FzdDxSPigpOwoKICAvLy8gUmVtb3ZlcyBhbmQgcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGlzIHF1ZXVlLgogIC8vLwogIC8vLyBUaGUgcXVldWUgbXVzdCBub3QgYmUgZW1wdHkgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuCiAgRSByZW1vdmVGaXJzdCgpOwoKICAvLy8gUmVtb3ZlcyBhbmQgcmV0dXJucyB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBxdWV1ZS4KICAvLy8KICAvLy8gVGhlIHF1ZXVlIG11c3Qgbm90IGJlIGVtcHR5IHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLgogIEUgcmVtb3ZlTGFzdCgpOwoKICAvLy8gQWRkcyBbdmFsdWVdIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHF1ZXVlLgogIHZvaWQgYWRkRmlyc3QoRSB2YWx1ZSk7CgogIC8vLyBBZGRzIFt2YWx1ZV0gYXQgdGhlIGVuZCBvZiB0aGUgcXVldWUuCiAgdm9pZCBhZGRMYXN0KEUgdmFsdWUpOwoKICAvLy8gQWRkcyBbdmFsdWVdIGF0IHRoZSBlbmQgb2YgdGhlIHF1ZXVlLgogIHZvaWQgYWRkKEUgdmFsdWUpOwoKICAvLy8gUmVtb3ZlIGEgc2luZ2xlIGluc3RhbmNlIG9mIFt2YWx1ZV0gZnJvbSB0aGUgcXVldWUuCiAgLy8vCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGEgdmFsdWUgd2FzIHJlbW92ZWQsIG9yIGBmYWxzZWAgaWYgdGhlIHF1ZXVlCiAgLy8vIGNvbnRhaW5lZCBubyBlbGVtZW50IGVxdWFsIHRvIFt2YWx1ZV0uCiAgYm9vbCByZW1vdmUoT2JqZWN0IHZhbHVlKTsKCiAgLy8vIEFkZHMgYWxsIGVsZW1lbnRzIG9mIFtpdGVyYWJsZV0gYXQgdGhlIGVuZCBvZiB0aGUgcXVldWUuIFRoZQogIC8vLyBsZW5ndGggb2YgdGhlIHF1ZXVlIGlzIGV4dGVuZGVkIGJ5IHRoZSBsZW5ndGggb2YgW2l0ZXJhYmxlXS4KICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBpdGVyYWJsZSk7CgogIC8vLyBSZW1vdmVzIGFsbCBlbGVtZW50cyBtYXRjaGVkIGJ5IFt0ZXN0XSBmcm9tIHRoZSBxdWV1ZS4KICAvLy8KICAvLy8gVGhlIGB0ZXN0YCBmdW5jdGlvbiBtdXN0IG5vdCB0aHJvdyBvciBtb2RpZnkgdGhlIHF1ZXVlLgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpOwoKICAvLy8gUmVtb3ZlcyBhbGwgZWxlbWVudHMgbm90IG1hdGNoZWQgYnkgW3Rlc3RdIGZyb20gdGhlIHF1ZXVlLgogIC8vLwogIC8vLyBUaGUgYHRlc3RgIGZ1bmN0aW9uIG11c3Qgbm90IHRocm93IG9yIG1vZGlmeSB0aGUgcXVldWUuCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSk7CgogIC8vLyBSZW1vdmVzIGFsbCBlbGVtZW50cyBpbiB0aGUgcXVldWUuIFRoZSBzaXplIG9mIHRoZSBxdWV1ZSBiZWNvbWVzIHplcm8uCiAgdm9pZCBjbGVhcigpOwp9CgpjbGFzcyBfRG91YmxlTGluazxMaW5rIGV4dGVuZHMgX0RvdWJsZUxpbms8TGluaz4+IHsKICBMaW5rIF9wcmV2aW91c0xpbms7CiAgTGluayBfbmV4dExpbms7CgogIHZvaWQgX2xpbmsoTGluayBwcmV2aW91cywgTGluayBuZXh0KSB7CiAgICBfbmV4dExpbmsgPSBuZXh0OwogICAgX3ByZXZpb3VzTGluayA9IHByZXZpb3VzOwogICAgaWYgKHByZXZpb3VzICE9IG51bGwpIHByZXZpb3VzLl9uZXh0TGluayA9IHRoaXM7CiAgICBpZiAobmV4dCAhPSBudWxsKSBuZXh0Ll9wcmV2aW91c0xpbmsgPSB0aGlzOwogIH0KCiAgdm9pZCBfdW5saW5rKCkgewogICAgaWYgKF9wcmV2aW91c0xpbmsgIT0gbnVsbCkgX3ByZXZpb3VzTGluay5fbmV4dExpbmsgPSBfbmV4dExpbms7CiAgICBpZiAoX25leHRMaW5rICE9IG51bGwpIF9uZXh0TGluay5fcHJldmlvdXNMaW5rID0gX3ByZXZpb3VzTGluazsKICAgIF9uZXh0TGluayA9IG51bGw7CiAgICBfcHJldmlvdXNMaW5rID0gbnVsbDsKICB9Cn0KCi8vLyBBbiBlbnRyeSBpbiBhIGRvdWJseSBsaW5rZWQgbGlzdC4gSXQgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBuZXh0Ci8vLyBlbnRyeSwgdGhlIHByZXZpb3VzIGVudHJ5LCBhbmQgdGhlIGJveGVkIGVsZW1lbnQuCmNsYXNzIERvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gZXh0ZW5kcyBfRG91YmxlTGluazxEb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+PiB7CiAgLy8vIFRoZSBlbGVtZW50IGluIHRoZSBxdWV1ZS4KICBFIGVsZW1lbnQ7CgogIERvdWJsZUxpbmtlZFF1ZXVlRW50cnkodGhpcy5lbGVtZW50KTsKCiAgLy8vIEFwcGVuZHMgdGhlIGdpdmVuIFtlXSBhcyBlbnRyeSBqdXN0IGFmdGVyIHRoaXMgZW50cnkuCiAgdm9pZCBhcHBlbmQoRSBlKSB7CiAgICBEb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+KGUpLl9saW5rKHRoaXMsIF9uZXh0TGluayk7CiAgfQoKICAvLy8gUHJlcGVuZHMgdGhlIGdpdmVuIFtlXSBhcyBlbnRyeSBqdXN0IGJlZm9yZSB0aGlzIGVudHJ5LgogIHZvaWQgcHJlcGVuZChFIGUpIHsKICAgIERvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4oZSkuX2xpbmsoX3ByZXZpb3VzTGluaywgdGhpcyk7CiAgfQoKICBFIHJlbW92ZSgpIHsKICAgIF91bmxpbmsoKTsKICAgIHJldHVybiBlbGVtZW50OwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHByZXZpb3VzIGVudHJ5IG9yIGBudWxsYCBpZiB0aGVyZSBpcyBub25lLgogIERvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gcHJldmlvdXNFbnRyeSgpID0+IF9wcmV2aW91c0xpbms7CgogIC8vLyBSZXR1cm5zIHRoZSBuZXh0IGVudHJ5IG9yIGBudWxsYCBpZiB0aGVyZSBpcyBub25lLgogIERvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gbmV4dEVudHJ5KCkgPT4gX25leHRMaW5rOwp9CgovLy8gSW50ZXJmYWNlIGZvciB0aGUgbGluayBjbGFzc2VzIHVzZWQgYnkgW0RvdWJsZUxpbmtlZFF1ZXVlXS4KLy8vCi8vLyBCb3RoIHRoZSBbX0RvdWJsZUxpbmtlZFF1ZXVlRWxlbWVudF0gYW5kIFtfRG91YmxlTGlua2VkUXVldWVTZW50aW5lbF0KLy8vIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4KLy8vIFRoZSBlbnRyeSBjb250YWlucyBhIGxpbmsgYmFjayB0byB0aGUgcXVldWUsIHNvIGNhbGxpbmcgYGFwcGVuZGAKLy8vIG9yIGBwcmVwZW5kYCBjYW4gY29ycmVjdGx5IHVwZGF0ZSB0aGUgZWxlbWVudCBjb3VudC4KYWJzdHJhY3QgY2xhc3MgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gZXh0ZW5kcyBEb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IHsKICBEb3VibGVMaW5rZWRRdWV1ZTxFPiBfcXVldWU7CiAgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnkoRSBlbGVtZW50LCB0aGlzLl9xdWV1ZSkgOiBzdXBlcihlbGVtZW50KTsKCiAgRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBfYXNOb25TZW50aW5lbEVudHJ5KCk7CgogIHZvaWQgX2FwcGVuZChFIGUpIHsKICAgIF9Eb3VibGVMaW5rZWRRdWV1ZUVsZW1lbnQ8RT4oZSwgX3F1ZXVlKS5fbGluayh0aGlzLCBfbmV4dExpbmspOwogIH0KCiAgdm9pZCBfcHJlcGVuZChFIGUpIHsKICAgIF9Eb3VibGVMaW5rZWRRdWV1ZUVsZW1lbnQ8RT4oZSwgX3F1ZXVlKS5fbGluayhfcHJldmlvdXNMaW5rLCB0aGlzKTsKICB9CgogIEUgX3JlbW92ZSgpOwoKICBFIGdldCBfZWxlbWVudCA9PiBlbGVtZW50OwoKICBEb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IG5leHRFbnRyeSgpIHsKICAgIF9Eb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IGVudHJ5ID0gX25leHRMaW5rOwogICAgcmV0dXJuIGVudHJ5Ll9hc05vblNlbnRpbmVsRW50cnkoKTsKICB9CgogIERvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gcHJldmlvdXNFbnRyeSgpIHsKICAgIF9Eb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IGVudHJ5ID0gX3ByZXZpb3VzTGluazsKICAgIHJldHVybiBlbnRyeS5fYXNOb25TZW50aW5lbEVudHJ5KCk7CiAgfQp9CgovLy8gVGhlIGFjdHVhbCBlbnRyeSB0eXBlIHVzZWQgYnkgdGhlIFtEb3VibGVMaW5rZWRRdWV1ZV0uCi8vLwovLy8gVGhlIGVudHJ5IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBxdWV1ZSwgYWxsb3dpbmcKLy8vIFthcHBlbmRdL1twcmVwZW5kXSB0byB1cGRhdGUgdGhlIGxpc3QgbGVuZ3RoLgpjbGFzcyBfRG91YmxlTGlua2VkUXVldWVFbGVtZW50PEU+IGV4dGVuZHMgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gewogIF9Eb3VibGVMaW5rZWRRdWV1ZUVsZW1lbnQoRSBlbGVtZW50LCBEb3VibGVMaW5rZWRRdWV1ZTxFPiBxdWV1ZSkKICAgICAgOiBzdXBlcihlbGVtZW50LCBxdWV1ZSk7CgogIHZvaWQgYXBwZW5kKEUgZSkgewogICAgX2FwcGVuZChlKTsKICAgIGlmIChfcXVldWUgIT0gbnVsbCkgX3F1ZXVlLl9lbGVtZW50Q291bnQrKzsKICB9CgogIHZvaWQgcHJlcGVuZChFIGUpIHsKICAgIF9wcmVwZW5kKGUpOwogICAgaWYgKF9xdWV1ZSAhPSBudWxsKSBfcXVldWUuX2VsZW1lbnRDb3VudCsrOwogIH0KCiAgRSBfcmVtb3ZlKCkgewogICAgX3F1ZXVlID0gbnVsbDsKICAgIF91bmxpbmsoKTsKICAgIHJldHVybiBlbGVtZW50OwogIH0KCiAgRSByZW1vdmUoKSB7CiAgICBpZiAoX3F1ZXVlICE9IG51bGwpIF9xdWV1ZS5fZWxlbWVudENvdW50LS07CiAgICByZXR1cm4gX3JlbW92ZSgpOwogIH0KCiAgX0RvdWJsZUxpbmtlZFF1ZXVlRWxlbWVudDxFPiBfYXNOb25TZW50aW5lbEVudHJ5KCkgewogICAgcmV0dXJuIHRoaXM7CiAgfQp9CgovLy8gQSBzZW50aW5lbCBpbiBhIGRvdWJsZSBsaW5rZWQgbGlzdCBpcyB1c2VkIHRvIG1hbmlwdWxhdGUgdGhlIGxpc3QKLy8vIGF0IGJvdGggZW5kcy4KLy8vIEEgZG91YmxlIGxpbmtlZCBsaXN0IGhhcyBleGFjdGx5IG9uZSBzZW50aW5lbCwKLy8vIHdoaWNoIGlzIHRoZSBvbmx5IGVudHJ5IHdoZW4gdGhlIGxpc3QgaXMgY29uc3RydWN0ZWQuCi8vLyBJbml0aWFsbHksIGEgc2VudGluZWwgaGFzIGl0cyBuZXh0IGFuZCBwcmV2aW91cyBlbnRyeSBwb2ludCB0byBpdHNlbGYuCi8vLyBBIHNlbnRpbmVsIGRvZXMgbm90IGJveCBhbnkgdXNlciBlbGVtZW50LgpjbGFzcyBfRG91YmxlTGlua2VkUXVldWVTZW50aW5lbDxFPiBleHRlbmRzIF9Eb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IHsKICBfRG91YmxlTGlua2VkUXVldWVTZW50aW5lbChEb3VibGVMaW5rZWRRdWV1ZTxFPiBxdWV1ZSkgOiBzdXBlcihudWxsLCBxdWV1ZSkgewogICAgX3ByZXZpb3VzTGluayA9IHRoaXM7CiAgICBfbmV4dExpbmsgPSB0aGlzOwogIH0KCiAgRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBfYXNOb25TZW50aW5lbEVudHJ5KCkgewogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvLy8gSGl0IGJ5LCBlLmcuLCBbRG91YmxlTGlua2VkUXVldWUucmVtb3ZlRmlyc3RdIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eS4KICBFIF9yZW1vdmUoKSB7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIC8vLyBIaXQgYnksIGUuZy4sIFtEb3VibGVMaW5rZWRRdWV1ZS5maXJzdF0gaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LgogIEUgZ2V0IF9lbGVtZW50IHsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KfQoKLy8vIEEgW1F1ZXVlXSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBhIGRvdWJsZS1saW5rZWQgbGlzdC4KLy8vCi8vLyBBbGxvd3MgY29uc3RhbnQgdGltZSBhZGQsIHJlbW92ZS1hdC1lbmRzIGFuZCBwZWVrIG9wZXJhdGlvbnMuCmNsYXNzIERvdWJsZUxpbmtlZFF1ZXVlPEU+IGV4dGVuZHMgSXRlcmFibGU8RT4gaW1wbGVtZW50cyBRdWV1ZTxFPiB7CiAgX0RvdWJsZUxpbmtlZFF1ZXVlU2VudGluZWw8RT4gX3NlbnRpbmVsOwogIGludCBfZWxlbWVudENvdW50ID0gMDsKCiAgRG91YmxlTGlua2VkUXVldWUoKSB7CiAgICBfc2VudGluZWwgPSBfRG91YmxlTGlua2VkUXVldWVTZW50aW5lbDxFPih0aGlzKTsKICB9CgogIC8vLyBDcmVhdGVzIGEgZG91YmxlLWxpbmtlZCBxdWV1ZSBjb250YWluaW5nIGFsbCBbZWxlbWVudHNdLgogIC8vLwogIC8vLyBUaGUgZWxlbWVudCBvcmRlciBpbiB0aGUgcXVldWUgaXMgYXMgaWYgdGhlIGVsZW1lbnRzIHdlcmUgYWRkZWQgdXNpbmcKICAvLy8gW2FkZExhc3RdIGluIHRoZSBvcmRlciBwcm92aWRlZCBieSBbZWxlbWVudHMuaXRlcmF0b3JdLgogIC8vLwogIC8vLyBBbGwgdGhlIFtlbGVtZW50c10gc2hvdWxkIGJlIGluc3RhbmNlcyBvZiBbRV0uCiAgLy8vIFRoZSBgZWxlbWVudHNgIGl0ZXJhYmxlIGl0c2VsZiBtYXkgaGF2ZSBhbnkgZWxlbWVudCB0eXBlLCBzbyB0aGlzCiAgLy8vIGNvbnN0cnVjdG9yIGNhbiBiZSB1c2VkIHRvIGRvd24tY2FzdCBhIGBRdWV1ZWAsIGZvciBleGFtcGxlIGFzOgogIC8vLyBgYGBkYXJ0CiAgLy8vIFF1ZXVlPFN1cGVyVHlwZT4gc3VwZXJRdWV1ZSA9IC4uLjsKICAvLy8gUXVldWU8U3ViVHlwZT4gc3ViUXVldWUgPQogIC8vLyAgICAgbmV3IERvdWJsZUxpbmtlZFF1ZXVlPFN1YlR5cGU+LmZyb20oc3VwZXJRdWV1ZS53aGVyZVR5cGU8U3ViVHlwZT4oKSk7CiAgLy8vIGBgYAogIGZhY3RvcnkgRG91YmxlTGlua2VkUXVldWUuZnJvbShJdGVyYWJsZSBlbGVtZW50cykgewogICAgUXVldWU8RT4gbGlzdCA9IERvdWJsZUxpbmtlZFF1ZXVlPEU+KCk7CiAgICBmb3IgKGZpbmFsIGUgaW4gZWxlbWVudHMpIHsKICAgICAgbGlzdC5hZGRMYXN0KGUpOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIGRvdWJsZS1saW5rZWQgcXVldWUgZnJvbSBbZWxlbWVudHNdLgogIC8vLwogIC8vLyBUaGUgZWxlbWVudCBvcmRlciBpbiB0aGUgcXVldWUgaXMgYXMgaWYgdGhlIGVsZW1lbnRzIHdlcmUgYWRkZWQgdXNpbmcKICAvLy8gW2FkZExhc3RdIGluIHRoZSBvcmRlciBwcm92aWRlZCBieSBbZWxlbWVudHMuaXRlcmF0b3JdLgogIGZhY3RvcnkgRG91YmxlTGlua2VkUXVldWUub2YoSXRlcmFibGU8RT4gZWxlbWVudHMpID0+CiAgICAgIERvdWJsZUxpbmtlZFF1ZXVlPEU+KCkuLmFkZEFsbChlbGVtZW50cyk7CgogIFF1ZXVlPFI+IGNhc3Q8Uj4oKSA9PiBRdWV1ZS5jYXN0RnJvbTxFLCBSPih0aGlzKTsKICBpbnQgZ2V0IGxlbmd0aCA9PiBfZWxlbWVudENvdW50OwoKICB2b2lkIGFkZExhc3QoRSB2YWx1ZSkgewogICAgX3NlbnRpbmVsLl9wcmVwZW5kKHZhbHVlKTsKICAgIF9lbGVtZW50Q291bnQrKzsKICB9CgogIHZvaWQgYWRkRmlyc3QoRSB2YWx1ZSkgewogICAgX3NlbnRpbmVsLl9hcHBlbmQodmFsdWUpOwogICAgX2VsZW1lbnRDb3VudCsrOwogIH0KCiAgdm9pZCBhZGQoRSB2YWx1ZSkgewogICAgX3NlbnRpbmVsLl9wcmVwZW5kKHZhbHVlKTsKICAgIF9lbGVtZW50Q291bnQrKzsKICB9CgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKSB7CiAgICBmb3IgKGZpbmFsIEUgdmFsdWUgaW4gaXRlcmFibGUpIHsKICAgICAgX3NlbnRpbmVsLl9wcmVwZW5kKHZhbHVlKTsKICAgICAgX2VsZW1lbnRDb3VudCsrOwogICAgfQogIH0KCiAgRSByZW1vdmVMYXN0KCkgewogICAgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gbGFzdEVudHJ5ID0gX3NlbnRpbmVsLl9wcmV2aW91c0xpbms7CiAgICBFIHJlc3VsdCA9IGxhc3RFbnRyeS5fcmVtb3ZlKCk7CiAgICBfZWxlbWVudENvdW50LS07CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRSByZW1vdmVGaXJzdCgpIHsKICAgIF9Eb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IGZpcnN0RW50cnkgPSBfc2VudGluZWwuX25leHRMaW5rOwogICAgRSByZXN1bHQgPSBmaXJzdEVudHJ5Ll9yZW1vdmUoKTsKICAgIF9lbGVtZW50Q291bnQtLTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBib29sIHJlbW92ZShPYmplY3QgbykgewogICAgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gZW50cnkgPSBfc2VudGluZWwuX25leHRMaW5rOwogICAgd2hpbGUgKCFpZGVudGljYWwoZW50cnksIF9zZW50aW5lbCkpIHsKICAgICAgYm9vbCBlcXVhbHMgPSAoZW50cnkuX2VsZW1lbnQgPT0gbyk7CiAgICAgIGlmICghaWRlbnRpY2FsKHRoaXMsIGVudHJ5Ll9xdWV1ZSkpIHsKICAgICAgICAvLyBFbnRyeSBtdXN0IHN0aWxsIGJlIGluIHRoZSBxdWV1ZS4KICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgICAgaWYgKGVxdWFscykgewogICAgICAgIGVudHJ5Ll9yZW1vdmUoKTsKICAgICAgICBfZWxlbWVudENvdW50LS07CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgZW50cnkgPSBlbnRyeS5fbmV4dExpbms7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB2b2lkIF9maWx0ZXIoYm9vbCB0ZXN0KEUgZWxlbWVudCksIGJvb2wgcmVtb3ZlTWF0Y2hpbmcpIHsKICAgIF9Eb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IGVudHJ5ID0gX3NlbnRpbmVsLl9uZXh0TGluazsKICAgIHdoaWxlICghaWRlbnRpY2FsKGVudHJ5LCBfc2VudGluZWwpKSB7CiAgICAgIGJvb2wgbWF0Y2hlcyA9IHRlc3QoZW50cnkuX2VsZW1lbnQpOwogICAgICBpZiAoIWlkZW50aWNhbCh0aGlzLCBlbnRyeS5fcXVldWUpKSB7CiAgICAgICAgLy8gRW50cnkgbXVzdCBzdGlsbCBiZSBpbiB0aGUgcXVldWUuCiAgICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICAgIF9Eb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IG5leHQgPSBlbnRyeS5fbmV4dExpbms7IC8vIENhbm5vdCBiZSBudWxsLgogICAgICBpZiAoaWRlbnRpY2FsKHJlbW92ZU1hdGNoaW5nLCBtYXRjaGVzKSkgewogICAgICAgIGVudHJ5Ll9yZW1vdmUoKTsKICAgICAgICBfZWxlbWVudENvdW50LS07CiAgICAgIH0KICAgICAgZW50cnkgPSBuZXh0OwogICAgfQogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgX2ZpbHRlcih0ZXN0LCB0cnVlKTsKICB9CgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIF9maWx0ZXIodGVzdCwgZmFsc2UpOwogIH0KCiAgRSBnZXQgZmlyc3QgewogICAgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gZmlyc3RFbnRyeSA9IF9zZW50aW5lbC5fbmV4dExpbms7CiAgICByZXR1cm4gZmlyc3RFbnRyeS5fZWxlbWVudDsKICB9CgogIEUgZ2V0IGxhc3QgewogICAgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gbGFzdEVudHJ5ID0gX3NlbnRpbmVsLl9wcmV2aW91c0xpbms7CiAgICByZXR1cm4gbGFzdEVudHJ5Ll9lbGVtZW50OwogIH0KCiAgRSBnZXQgc2luZ2xlIHsKICAgIC8vIE5vdGUgdGhhdCB0aGlzIHRocm93cyBjb3JyZWN0bHkgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5CiAgICAvLyBiZWNhdXNlIHJlYWRpbmcgdGhlIGVsZW1lbnQgb2YgdGhlIHNlbnRpbmVsIHRocm93cy4KICAgIGlmIChpZGVudGljYWwoX3NlbnRpbmVsLl9uZXh0TGluaywgX3NlbnRpbmVsLl9wcmV2aW91c0xpbmspKSB7CiAgICAgIF9Eb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IGVudHJ5ID0gX3NlbnRpbmVsLl9uZXh0TGluazsKICAgICAgcmV0dXJuIGVudHJ5Ll9lbGVtZW50OwogICAgfQogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vTWFueSgpOwogIH0KCiAgLy8vIFRoZSBlbnRyeSBvYmplY3Qgb2YgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHF1ZXVlLgogIC8vLwogIC8vLyBFYWNoIGVsZW1lbnQgb2YgdGhlIHF1ZXVlIGhhcyBhbiBhc3NvY2lhdGVkIFtEb3VibGVMaW5rZWRRdWV1ZUVudHJ5XS4KICAvLy8gUmV0dXJucyB0aGUgZW50cnkgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIHF1ZXVlLgogIC8vLwogIC8vLyBUaGUgZW50cnkgb2JqZWN0cyBjYW4gYWxzbyBiZSBhY2Nlc3NlZCB1c2luZyBbbGFzdEVudHJ5XSwKICAvLy8gYW5kIHRoZXkgY2FuIGJlIGl0ZXJhdGVkIHVzaW5nIFtEb3VibGVMaW5rZWRRdWV1ZUVudHJ5Lm5leHRFbnRyeSgpXSBhbmQKICAvLy8gW0RvdWJsZUxpbmtlZFF1ZXVlRW50cnkucHJldmlvdXNFbnRyeSgpXS4KICBEb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IGZpcnN0RW50cnkoKSB7CiAgICByZXR1cm4gX3NlbnRpbmVsLm5leHRFbnRyeSgpOwogIH0KCiAgLy8vIFRoZSBlbnRyeSBvYmplY3Qgb2YgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgcXVldWUuCiAgLy8vCiAgLy8vIEVhY2ggZWxlbWVudCBvZiB0aGUgcXVldWUgaGFzIGFuIGFzc29jaWF0ZWQgW0RvdWJsZUxpbmtlZFF1ZXVlRW50cnldLgogIC8vLyBSZXR1cm5zIHRoZSBlbnRyeSBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBxdWV1ZS4KICAvLy8KICAvLy8gVGhlIGVudHJ5IG9iamVjdHMgY2FuIGFsc28gYmUgYWNjZXNzZWQgdXNpbmcgW2ZpcnN0RW50cnldLAogIC8vLyBhbmQgdGhleSBjYW4gYmUgaXRlcmF0ZWQgdXNpbmcgW0RvdWJsZUxpbmtlZFF1ZXVlRW50cnkubmV4dEVudHJ5KCldIGFuZAogIC8vLyBbRG91YmxlTGlua2VkUXVldWVFbnRyeS5wcmV2aW91c0VudHJ5KCldLgogIERvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gbGFzdEVudHJ5KCkgewogICAgcmV0dXJuIF9zZW50aW5lbC5wcmV2aW91c0VudHJ5KCk7CiAgfQoKICBib29sIGdldCBpc0VtcHR5IHsKICAgIHJldHVybiAoaWRlbnRpY2FsKF9zZW50aW5lbC5fbmV4dExpbmssIF9zZW50aW5lbCkpOwogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIF9zZW50aW5lbC5fbmV4dExpbmsgPSBfc2VudGluZWw7CiAgICBfc2VudGluZWwuX3ByZXZpb3VzTGluayA9IF9zZW50aW5lbDsKICAgIF9lbGVtZW50Q291bnQgPSAwOwogIH0KCiAgLy8vIENhbGxzIFthY3Rpb25dIGZvciBlYWNoIGVudHJ5IG9iamVjdCBvZiB0aGlzIGRvdWJsZS1saW5rZWQgcXVldWUuCiAgLy8vCiAgLy8vIEVhY2ggZWxlbWVudCBvZiB0aGUgcXVldWUgaGFzIGFuIGFzc29jaWF0ZWQgW0RvdWJsZUxpbmtlZFF1ZXVlRW50cnldLgogIC8vLyBUaGlzIG1ldGhvZCBpdGVyYXRlcyB0aGUgZW50cnkgb2JqZWN0cyBmcm9tIGZpcnN0IHRvIGxhc3QgYW5kIGNhbGxzCiAgLy8vIFthY3Rpb25dIHdpdGggZWFjaCBvYmplY3QgaW4gdHVybi4KICAvLy8KICAvLy8gVGhlIGVudHJ5IG9iamVjdHMgY2FuIGFsc28gYmUgYWNjZXNzZWQgdXNpbmcgW2ZpcnN0RW50cnldIGFuZCBbbGFzdEVudHJ5XSwKICAvLy8gYW5kIGl0ZXJhdGVkIHVzaW5nIFtEb3VibGVMaW5rZWRRdWV1ZUVudHJ5Lm5leHRFbnRyeSgpXSBhbmQKICAvLy8gW0RvdWJsZUxpbmtlZFF1ZXVlRW50cnkucHJldmlvdXNFbnRyeSgpXS4KICAvLy8KICAvLy8gVGhlIFthY3Rpb25dIGZ1bmN0aW9uIGNhbiB1c2UgbWV0aG9kcyBvbiBbRG91YmxlTGlua2VkUXVldWVFbnRyeV0gdG8KICAvLy8gcmVtb3ZlIHRoZSBlbnRyeSBvciBpdCBjYW4gaW5zZXJ0IGVsZW1lbnRzIGJlZm9yZSBvciBhZnRlciB0aGVuIGVudHJ5LgogIC8vLyBJZiB0aGUgY3VycmVudCBlbnRyeSBpcyByZW1vdmVkLCBpdGVyYXRpb24gY29udGludWVzIHdpdGggdGhlIGVudHJ5IHRoYXQKICAvLy8gd2FzIGZvbGxvd2luZyB0aGUgY3VycmVudCBlbnRyeSB3aGVuIFthY3Rpb25dIHdhcyBjYWxsZWQuIEFueSBlbGVtZW50cwogIC8vLyBpbnNlcnRlZCBhZnRlciB0aGUgY3VycmVudCBlbGVtZW50IGJlZm9yZSBpdCBpcyByZW1vdmVkIHdpbGwgbm90IGJlCiAgLy8vIHZpc2l0ZWQgYnkgdGhlIGl0ZXJhdGlvbi4KICB2b2lkIGZvckVhY2hFbnRyeSh2b2lkIGFjdGlvbihEb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IGVsZW1lbnQpKSB7CiAgICBfRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBlbnRyeSA9IF9zZW50aW5lbC5fbmV4dExpbms7CiAgICB3aGlsZSAoIWlkZW50aWNhbChlbnRyeSwgX3NlbnRpbmVsKSkgewogICAgICBfRG91YmxlTGlua2VkUXVldWVFbGVtZW50PEU+IGVsZW1lbnQgPSBlbnRyeTsKICAgICAgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gbmV4dCA9IGVsZW1lbnQuX25leHRMaW5rOwogICAgICAvLyBSZW1lbWJlciBib3RoIGVudHJ5IGFuZCBlbnRyeS5fbmV4dExpbmsuCiAgICAgIC8vIElmIHNvbWVvbmUgY2FsbHMgYGVsZW1lbnQucmVtb3ZlKClgIHdlIGNvbnRpbnVlIGZyb20gYG5leHRgLgogICAgICAvLyBPdGhlcndpc2Ugd2UgdXNlIHRoZSB2YWx1ZSBvZiBlbnRyeS5fbmV4dExpbmsgd2hpY2ggbWF5IGhhdmUgYmVlbgogICAgICAvLyB1cGRhdGVkLgogICAgICBhY3Rpb24oZWxlbWVudCk7CiAgICAgIGlmIChpZGVudGljYWwodGhpcywgZW50cnkuX3F1ZXVlKSkgewogICAgICAgIG5leHQgPSBlbnRyeS5fbmV4dExpbms7CiAgICAgIH0gZWxzZSBpZiAoIWlkZW50aWNhbCh0aGlzLCBuZXh0Ll9xdWV1ZSkpIHsKICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgICAgZW50cnkgPSBuZXh0OwogICAgfQogIH0KCiAgX0RvdWJsZUxpbmtlZFF1ZXVlSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yIHsKICAgIHJldHVybiBfRG91YmxlTGlua2VkUXVldWVJdGVyYXRvcjxFPihfc2VudGluZWwpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gSXRlcmFibGVCYXNlLml0ZXJhYmxlVG9GdWxsU3RyaW5nKHRoaXMsICd7JywgJ30nKTsKfQoKY2xhc3MgX0RvdWJsZUxpbmtlZFF1ZXVlSXRlcmF0b3I8RT4gaW1wbGVtZW50cyBJdGVyYXRvcjxFPiB7CiAgX0RvdWJsZUxpbmtlZFF1ZXVlU2VudGluZWw8RT4gX3NlbnRpbmVsOwogIF9Eb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IF9uZXh0RW50cnk7CiAgRSBfY3VycmVudDsKCiAgX0RvdWJsZUxpbmtlZFF1ZXVlSXRlcmF0b3IoX0RvdWJsZUxpbmtlZFF1ZXVlU2VudGluZWw8RT4gc2VudGluZWwpCiAgICAgIDogX3NlbnRpbmVsID0gc2VudGluZWwsCiAgICAgICAgX25leHRFbnRyeSA9IHNlbnRpbmVsLl9uZXh0TGluazsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChpZGVudGljYWwoX25leHRFbnRyeSwgX3NlbnRpbmVsKSkgewogICAgICBfY3VycmVudCA9IG51bGw7CiAgICAgIF9uZXh0RW50cnkgPSBudWxsOwogICAgICBfc2VudGluZWwgPSBudWxsOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBfRG91YmxlTGlua2VkUXVldWVFbGVtZW50PEU+IGVsZW1lbnRFbnRyeSA9IF9uZXh0RW50cnk7CiAgICBpZiAoIWlkZW50aWNhbChfc2VudGluZWwuX3F1ZXVlLCBlbGVtZW50RW50cnkuX3F1ZXVlKSkgewogICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IoX3NlbnRpbmVsLl9xdWV1ZSk7CiAgICB9CiAgICBfY3VycmVudCA9IGVsZW1lbnRFbnRyeS5fZWxlbWVudDsKICAgIF9uZXh0RW50cnkgPSBlbGVtZW50RW50cnkuX25leHRMaW5rOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBFIGdldCBjdXJyZW50ID0+IF9jdXJyZW50Owp9CgovLy8gTGlzdCBiYXNlZCBbUXVldWVdLgovLy8KLy8vIEtlZXBzIGEgY3ljbGljIGJ1ZmZlciBvZiBlbGVtZW50cywgYW5kIGdyb3dzIHRvIGEgbGFyZ2VyIGJ1ZmZlciB3aGVuCi8vLyBpdCBmaWxscyB1cC4gVGhpcyBndWFyYW50ZWVzIGNvbnN0YW50IHRpbWUgcGVlayBhbmQgcmVtb3ZlIG9wZXJhdGlvbnMsIGFuZAovLy8gYW1vcnRpemVkIGNvbnN0YW50IHRpbWUgYWRkIG9wZXJhdGlvbnMuCi8vLwovLy8gVGhlIHN0cnVjdHVyZSBpcyBlZmZpY2llbnQgZm9yIGFueSBxdWV1ZSBvciBzdGFjayB1c2FnZS4KY2xhc3MgTGlzdFF1ZXVlPEU+IGV4dGVuZHMgTGlzdEl0ZXJhYmxlPEU+IGltcGxlbWVudHMgUXVldWU8RT4gewogIHN0YXRpYyBjb25zdCBpbnQgX0lOSVRJQUxfQ0FQQUNJVFkgPSA4OwogIExpc3Q8RT4gX3RhYmxlOwogIGludCBfaGVhZDsKICBpbnQgX3RhaWw7CiAgaW50IF9tb2RpZmljYXRpb25Db3VudCA9IDA7CgogIC8vLyBDcmVhdGUgYW4gZW1wdHkgcXVldWUuCiAgLy8vCiAgLy8vIElmIFtpbml0aWFsQ2FwYWNpdHldIGlzIGdpdmVuLCBwcmVwYXJlIHRoZSBxdWV1ZSBmb3IgYXQgbGVhc3QgdGhhdCBtYW55CiAgLy8vIGVsZW1lbnRzLgogIExpc3RRdWV1ZShbaW50IGluaXRpYWxDYXBhY2l0eV0pCiAgICAgIDogX2hlYWQgPSAwLAogICAgICAgIF90YWlsID0gMCB7CiAgICBpZiAoaW5pdGlhbENhcGFjaXR5ID09IG51bGwgfHwgaW5pdGlhbENhcGFjaXR5IDwgX0lOSVRJQUxfQ0FQQUNJVFkpIHsKICAgICAgaW5pdGlhbENhcGFjaXR5ID0gX0lOSVRJQUxfQ0FQQUNJVFk7CiAgICB9IGVsc2UgaWYgKCFfaXNQb3dlck9mMihpbml0aWFsQ2FwYWNpdHkpKSB7CiAgICAgIGluaXRpYWxDYXBhY2l0eSA9IF9uZXh0UG93ZXJPZjIoaW5pdGlhbENhcGFjaXR5KTsKICAgIH0KICAgIGFzc2VydChfaXNQb3dlck9mMihpbml0aWFsQ2FwYWNpdHkpKTsKICAgIF90YWJsZSA9IExpc3Q8RT4oaW5pdGlhbENhcGFjaXR5KTsKICB9CgogIC8vLyBDcmVhdGUgYSBgTGlzdFF1ZXVlYCBjb250YWluaW5nIGFsbCBbZWxlbWVudHNdLgogIC8vLwogIC8vLyBUaGUgZWxlbWVudHMgYXJlIGFkZGVkIHRvIHRoZSBxdWV1ZSwgYXMgYnkgW2FkZExhc3RdLCBpbiB0aGUgb3JkZXIgZ2l2ZW4KICAvLy8gYnkgYGVsZW1lbnRzLml0ZXJhdG9yYC4KICAvLy8KICAvLy8gQWxsIHRoZSBbZWxlbWVudHNdIHNob3VsZCBiZSBpbnN0YW5jZXMgb2YgW0VdLgogIC8vLyBUaGUgYGVsZW1lbnRzYCBpdGVyYWJsZSBpdHNlbGYgbWF5IGhhdmUgYW55IGVsZW1lbnQgdHlwZSwgc28gdGhpcwogIC8vLyBjb25zdHJ1Y3RvciBjYW4gYmUgdXNlZCB0byBkb3duLWNhc3QgYSBgUXVldWVgLCBmb3IgZXhhbXBsZSBhczoKICAvLy8gYGBgZGFydAogIC8vLyBRdWV1ZTxTdXBlclR5cGU+IHN1cGVyUXVldWUgPSAuLi47CiAgLy8vIFF1ZXVlPFN1YlR5cGU+IHN1YlF1ZXVlID0KICAvLy8gICAgIG5ldyBMaXN0UXVldWU8U3ViVHlwZT4uZnJvbShzdXBlclF1ZXVlLndoZXJlVHlwZTxTdWJUeXBlPigpKTsKICAvLy8gYGBgCiAgZmFjdG9yeSBMaXN0UXVldWUuZnJvbShJdGVyYWJsZSBlbGVtZW50cykgewogICAgaWYgKGVsZW1lbnRzIGlzIExpc3QpIHsKICAgICAgaW50IGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDsKICAgICAgTGlzdFF1ZXVlPEU+IHF1ZXVlID0gTGlzdFF1ZXVlPEU+KGxlbmd0aCArIDEpOwogICAgICBhc3NlcnQocXVldWUuX3RhYmxlLmxlbmd0aCA+IGxlbmd0aCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBxdWV1ZS5fdGFibGVbaV0gPSBlbGVtZW50c1tpXTsKICAgICAgfQogICAgICBxdWV1ZS5fdGFpbCA9IGxlbmd0aDsKICAgICAgcmV0dXJuIHF1ZXVlOwogICAgfSBlbHNlIHsKICAgICAgaW50IGNhcGFjaXR5ID0gX0lOSVRJQUxfQ0FQQUNJVFk7CiAgICAgIGlmIChlbGVtZW50cyBpcyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZSkgewogICAgICAgIGNhcGFjaXR5ID0gZWxlbWVudHMubGVuZ3RoOwogICAgICB9CiAgICAgIExpc3RRdWV1ZTxFPiByZXN1bHQgPSBMaXN0UXVldWU8RT4oY2FwYWNpdHkpOwogICAgICBmb3IgKGZpbmFsIGVsZW1lbnQgaW4gZWxlbWVudHMpIHsKICAgICAgICByZXN1bHQuYWRkTGFzdChlbGVtZW50KTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogIH0KCiAgLy8vIENyZWF0ZSBhIGBMaXN0UXVldWVgIGZyb20gW2VsZW1lbnRzXS4KICAvLy8KICAvLy8gVGhlIGVsZW1lbnRzIGFyZSBhZGRlZCB0byB0aGUgcXVldWUsIGFzIGJ5IFthZGRMYXN0XSwgaW4gdGhlIG9yZGVyIGdpdmVuCiAgLy8vIGJ5IGBlbGVtZW50cy5pdGVyYXRvcmAuCiAgZmFjdG9yeSBMaXN0UXVldWUub2YoSXRlcmFibGU8RT4gZWxlbWVudHMpID0+CiAgICAgIExpc3RRdWV1ZTxFPigpLi5hZGRBbGwoZWxlbWVudHMpOwoKICAvLyBJdGVyYWJsZSBpbnRlcmZhY2UuCgogIFF1ZXVlPFI+IGNhc3Q8Uj4oKSA9PiBRdWV1ZS5jYXN0RnJvbTxFLCBSPih0aGlzKTsKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgPT4gX0xpc3RRdWV1ZUl0ZXJhdG9yPEU+KHRoaXMpOwoKICB2b2lkIGZvckVhY2godm9pZCBmKEUgZWxlbWVudCkpIHsKICAgIGludCBtb2RpZmljYXRpb25Db3VudCA9IF9tb2RpZmljYXRpb25Db3VudDsKICAgIGZvciAoaW50IGkgPSBfaGVhZDsgaSAhPSBfdGFpbDsgaSA9IChpICsgMSkgJiAoX3RhYmxlLmxlbmd0aCAtIDEpKSB7CiAgICAgIGYoX3RhYmxlW2ldKTsKICAgICAgX2NoZWNrTW9kaWZpY2F0aW9uKG1vZGlmaWNhdGlvbkNvdW50KTsKICAgIH0KICB9CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2hlYWQgPT0gX3RhaWw7CgogIGludCBnZXQgbGVuZ3RoID0+IChfdGFpbCAtIF9oZWFkKSAmIChfdGFibGUubGVuZ3RoIC0gMSk7CgogIEUgZ2V0IGZpcnN0IHsKICAgIGlmIChfaGVhZCA9PSBfdGFpbCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICByZXR1cm4gX3RhYmxlW19oZWFkXTsKICB9CgogIEUgZ2V0IGxhc3QgewogICAgaWYgKF9oZWFkID09IF90YWlsKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHJldHVybiBfdGFibGVbKF90YWlsIC0gMSkgJiAoX3RhYmxlLmxlbmd0aCAtIDEpXTsKICB9CgogIEUgZ2V0IHNpbmdsZSB7CiAgICBpZiAoX2hlYWQgPT0gX3RhaWwpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgaWYgKGxlbmd0aCA+IDEpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgIHJldHVybiBfdGFibGVbX2hlYWRdOwogIH0KCiAgRSBlbGVtZW50QXQoaW50IGluZGV4KSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRJbmRleChpbmRleCwgdGhpcyk7CiAgICByZXR1cm4gX3RhYmxlWyhfaGVhZCArIGluZGV4KSAmIChfdGFibGUubGVuZ3RoIC0gMSldOwogIH0KCiAgTGlzdDxFPiB0b0xpc3Qoe2Jvb2wgZ3Jvd2FibGUgPSB0cnVlfSkgewogICAgTGlzdDxFPiBsaXN0OwogICAgaWYgKGdyb3dhYmxlKSB7CiAgICAgIGxpc3QgPSA8RT5bXS4ubGVuZ3RoID0gbGVuZ3RoOwogICAgfSBlbHNlIHsKICAgICAgbGlzdCA9IExpc3Q8RT4obGVuZ3RoKTsKICAgIH0KICAgIF93cml0ZVRvTGlzdChsaXN0KTsKICAgIHJldHVybiBsaXN0OwogIH0KCiAgLy8gQ29sbGVjdGlvbiBpbnRlcmZhY2UuCgogIHZvaWQgYWRkKEUgdmFsdWUpIHsKICAgIF9hZGQodmFsdWUpOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gZWxlbWVudHMpIHsKICAgIGlmIChlbGVtZW50cyBpcyBMaXN0PEU+KSB7CiAgICAgIExpc3Q8RT4gbGlzdCA9IGVsZW1lbnRzOwogICAgICBpbnQgYWRkQ291bnQgPSBsaXN0Lmxlbmd0aDsKICAgICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgICBpZiAobGVuZ3RoICsgYWRkQ291bnQgPj0gX3RhYmxlLmxlbmd0aCkgewogICAgICAgIF9wcmVHcm93KGxlbmd0aCArIGFkZENvdW50KTsKICAgICAgICAvLyBBZnRlciBwcmVHcm93LCBhbGwgZWxlbWVudHMgYXJlIGF0IHRoZSBzdGFydCBvZiB0aGUgbGlzdC4KICAgICAgICBfdGFibGUuc2V0UmFuZ2UobGVuZ3RoLCBsZW5ndGggKyBhZGRDb3VudCwgbGlzdCwgMCk7CiAgICAgICAgX3RhaWwgKz0gYWRkQ291bnQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gQWRkaW5nIGFkZENvdW50IGVsZW1lbnRzIHdvbid0IHJlYWNoIF9oZWFkLgogICAgICAgIGludCBlbmRTcGFjZSA9IF90YWJsZS5sZW5ndGggLSBfdGFpbDsKICAgICAgICBpZiAoYWRkQ291bnQgPCBlbmRTcGFjZSkgewogICAgICAgICAgX3RhYmxlLnNldFJhbmdlKF90YWlsLCBfdGFpbCArIGFkZENvdW50LCBsaXN0LCAwKTsKICAgICAgICAgIF90YWlsICs9IGFkZENvdW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbnQgcHJlU3BhY2UgPSBhZGRDb3VudCAtIGVuZFNwYWNlOwogICAgICAgICAgX3RhYmxlLnNldFJhbmdlKF90YWlsLCBfdGFpbCArIGVuZFNwYWNlLCBsaXN0LCAwKTsKICAgICAgICAgIF90YWJsZS5zZXRSYW5nZSgwLCBwcmVTcGFjZSwgbGlzdCwgZW5kU3BhY2UpOwogICAgICAgICAgX3RhaWwgPSBwcmVTcGFjZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgX21vZGlmaWNhdGlvbkNvdW50Kys7CiAgICB9IGVsc2UgewogICAgICBmb3IgKEUgZWxlbWVudCBpbiBlbGVtZW50cykgX2FkZChlbGVtZW50KTsKICAgIH0KICB9CgogIGJvb2wgcmVtb3ZlKE9iamVjdCB2YWx1ZSkgewogICAgZm9yIChpbnQgaSA9IF9oZWFkOyBpICE9IF90YWlsOyBpID0gKGkgKyAxKSAmIChfdGFibGUubGVuZ3RoIC0gMSkpIHsKICAgICAgRSBlbGVtZW50ID0gX3RhYmxlW2ldOwogICAgICBpZiAoZWxlbWVudCA9PSB2YWx1ZSkgewogICAgICAgIF9yZW1vdmUoaSk7CiAgICAgICAgX21vZGlmaWNhdGlvbkNvdW50Kys7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgX2ZpbHRlcldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCBib29sIHJlbW92ZU1hdGNoaW5nKSB7CiAgICBpbnQgbW9kaWZpY2F0aW9uQ291bnQgPSBfbW9kaWZpY2F0aW9uQ291bnQ7CiAgICBpbnQgaSA9IF9oZWFkOwogICAgd2hpbGUgKGkgIT0gX3RhaWwpIHsKICAgICAgRSBlbGVtZW50ID0gX3RhYmxlW2ldOwogICAgICBib29sIHJlbW92ZSA9IGlkZW50aWNhbChyZW1vdmVNYXRjaGluZywgdGVzdChlbGVtZW50KSk7CiAgICAgIF9jaGVja01vZGlmaWNhdGlvbihtb2RpZmljYXRpb25Db3VudCk7CiAgICAgIGlmIChyZW1vdmUpIHsKICAgICAgICBpID0gX3JlbW92ZShpKTsKICAgICAgICBtb2RpZmljYXRpb25Db3VudCA9ICsrX21vZGlmaWNhdGlvbkNvdW50OwogICAgICB9IGVsc2UgewogICAgICAgIGkgPSAoaSArIDEpICYgKF90YWJsZS5sZW5ndGggLSAxKTsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIFJlbW92ZSBhbGwgZWxlbWVudHMgbWF0Y2hlZCBieSBbdGVzdF0uCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGlzIGluZWZmaWNpZW50IHNpbmNlIGl0IHdvcmtzIGJ5IHJlcGVhdGVkbHkgcmVtb3Zpbmcgc2luZ2xlCiAgLy8vIGVsZW1lbnRzLCBlYWNoIG9mIHdoaWNoIGNhbiB0YWtlIGxpbmVhciB0aW1lLgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIF9maWx0ZXJXaGVyZSh0ZXN0LCB0cnVlKTsKICB9CgogIC8vLyBSZW1vdmUgYWxsIGVsZW1lbnRzIG5vdCBtYXRjaGVkIGJ5IFt0ZXN0XS4KICAvLy8KICAvLy8gVGhpcyBtZXRob2QgaXMgaW5lZmZpY2llbnQgc2luY2UgaXQgd29ya3MgYnkgcmVwZWF0ZWRseSByZW1vdmluZyBzaW5nbGUKICAvLy8gZWxlbWVudHMsIGVhY2ggb2Ygd2hpY2ggY2FuIHRha2UgbGluZWFyIHRpbWUuCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgX2ZpbHRlcldoZXJlKHRlc3QsIGZhbHNlKTsKICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBpZiAoX2hlYWQgIT0gX3RhaWwpIHsKICAgICAgZm9yIChpbnQgaSA9IF9oZWFkOyBpICE9IF90YWlsOyBpID0gKGkgKyAxKSAmIChfdGFibGUubGVuZ3RoIC0gMSkpIHsKICAgICAgICBfdGFibGVbaV0gPSBudWxsOwogICAgICB9CiAgICAgIF9oZWFkID0gX3RhaWwgPSAwOwogICAgICBfbW9kaWZpY2F0aW9uQ291bnQrKzsKICAgIH0KICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+IEl0ZXJhYmxlQmFzZS5pdGVyYWJsZVRvRnVsbFN0cmluZyh0aGlzLCAieyIsICJ9Iik7CgogIC8vIFF1ZXVlIGludGVyZmFjZS4KCiAgdm9pZCBhZGRMYXN0KEUgdmFsdWUpIHsKICAgIF9hZGQodmFsdWUpOwogIH0KCiAgdm9pZCBhZGRGaXJzdChFIHZhbHVlKSB7CiAgICBfaGVhZCA9IChfaGVhZCAtIDEpICYgKF90YWJsZS5sZW5ndGggLSAxKTsKICAgIF90YWJsZVtfaGVhZF0gPSB2YWx1ZTsKICAgIGlmIChfaGVhZCA9PSBfdGFpbCkgX2dyb3coKTsKICAgIF9tb2RpZmljYXRpb25Db3VudCsrOwogIH0KCiAgRSByZW1vdmVGaXJzdCgpIHsKICAgIGlmIChfaGVhZCA9PSBfdGFpbCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICBfbW9kaWZpY2F0aW9uQ291bnQrKzsKICAgIEUgcmVzdWx0ID0gX3RhYmxlW19oZWFkXTsKICAgIF90YWJsZVtfaGVhZF0gPSBudWxsOwogICAgX2hlYWQgPSAoX2hlYWQgKyAxKSAmIChfdGFibGUubGVuZ3RoIC0gMSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRSByZW1vdmVMYXN0KCkgewogICAgaWYgKF9oZWFkID09IF90YWlsKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIF9tb2RpZmljYXRpb25Db3VudCsrOwogICAgX3RhaWwgPSAoX3RhaWwgLSAxKSAmIChfdGFibGUubGVuZ3RoIC0gMSk7CiAgICBFIHJlc3VsdCA9IF90YWJsZVtfdGFpbF07CiAgICBfdGFibGVbX3RhaWxdID0gbnVsbDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBJbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLgoKICAvLy8gV2hldGhlciBbbnVtYmVyXSBpcyBhIHBvd2VyIG9mIHR3by4KICAvLy8KICAvLy8gT25seSB3b3JrcyBmb3IgcG9zaXRpdmUgbnVtYmVycy4KICBzdGF0aWMgYm9vbCBfaXNQb3dlck9mMihpbnQgbnVtYmVyKSA9PiAobnVtYmVyICYgKG51bWJlciAtIDEpKSA9PSAwOwoKICAvLy8gUm91bmRzIFtudW1iZXJdIHVwIHRvIHRoZSBuZWFyZXN0IHBvd2VyIG9mIDIuCiAgLy8vCiAgLy8vIElmIFtudW1iZXJdIGlzIGEgcG93ZXIgb2YgMiBhbHJlYWR5LCBpdCBpcyByZXR1cm5lZC4KICAvLy8KICAvLy8gT25seSB3b3JrcyBmb3IgcG9zaXRpdmUgbnVtYmVycy4KICBzdGF0aWMgaW50IF9uZXh0UG93ZXJPZjIoaW50IG51bWJlcikgewogICAgYXNzZXJ0KG51bWJlciA+IDApOwogICAgbnVtYmVyID0gKG51bWJlciA8PCAxKSAtIDE7CiAgICBmb3IgKDs7KSB7CiAgICAgIGludCBuZXh0TnVtYmVyID0gbnVtYmVyICYgKG51bWJlciAtIDEpOwogICAgICBpZiAobmV4dE51bWJlciA9PSAwKSByZXR1cm4gbnVtYmVyOwogICAgICBudW1iZXIgPSBuZXh0TnVtYmVyOwogICAgfQogIH0KCiAgLy8vIENoZWNrIGlmIHRoZSBxdWV1ZSBoYXMgYmVlbiBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLgogIHZvaWQgX2NoZWNrTW9kaWZpY2F0aW9uKGludCBleHBlY3RlZE1vZGlmaWNhdGlvbkNvdW50KSB7CiAgICBpZiAoZXhwZWN0ZWRNb2RpZmljYXRpb25Db3VudCAhPSBfbW9kaWZpY2F0aW9uQ291bnQpIHsKICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgfQogIH0KCiAgLy8vIEFkZHMgZWxlbWVudCBhdCBlbmQgb2YgcXVldWUuIFVzZWQgYnkgYm90aCBbYWRkXSBhbmQgW2FkZEFsbF0uCiAgdm9pZCBfYWRkKEUgZWxlbWVudCkgewogICAgX3RhYmxlW190YWlsXSA9IGVsZW1lbnQ7CiAgICBfdGFpbCA9IChfdGFpbCArIDEpICYgKF90YWJsZS5sZW5ndGggLSAxKTsKICAgIGlmIChfaGVhZCA9PSBfdGFpbCkgX2dyb3coKTsKICAgIF9tb2RpZmljYXRpb25Db3VudCsrOwogIH0KCiAgLy8vIFJlbW92ZXMgdGhlIGVsZW1lbnQgYXQgW29mZnNldF0gaW50byBbX3RhYmxlXS4KICAvLy8KICAvLy8gUmVtb3ZhbCBpcyBwZXJmb3JtZWQgYnkgbGluZWFybHkgbW92aW5nIGVsZW1lbnRzIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIKICAvLy8gW29mZnNldF0gYnkgb25lIHBvc2l0aW9uLgogIC8vLwogIC8vLyBSZXR1cm5zIHRoZSBuZXcgb2Zmc2V0IG9mIHRoZSBmb2xsb3dpbmcgZWxlbWVudC4gVGhpcyBtYXkgYmUgdGhlIHNhbWUKICAvLy8gb2Zmc2V0IG9yIHRoZSBmb2xsb3dpbmcgb2Zmc2V0IGRlcGVuZGluZyBvbiBob3cgZWxlbWVudHMgYXJlIG1vdmVkCiAgLy8vIHRvIGZpbGwgdGhlIGhvbGUuCiAgaW50IF9yZW1vdmUoaW50IG9mZnNldCkgewogICAgaW50IG1hc2sgPSBfdGFibGUubGVuZ3RoIC0gMTsKICAgIGludCBzdGFydERpc3RhbmNlID0gKG9mZnNldCAtIF9oZWFkKSAmIG1hc2s7CiAgICBpbnQgZW5kRGlzdGFuY2UgPSAoX3RhaWwgLSBvZmZzZXQpICYgbWFzazsKICAgIGlmIChzdGFydERpc3RhbmNlIDwgZW5kRGlzdGFuY2UpIHsKICAgICAgLy8gQ2xvc2VzdCB0byBzdGFydC4KICAgICAgaW50IGkgPSBvZmZzZXQ7CiAgICAgIHdoaWxlIChpICE9IF9oZWFkKSB7CiAgICAgICAgaW50IHByZXZPZmZzZXQgPSAoaSAtIDEpICYgbWFzazsKICAgICAgICBfdGFibGVbaV0gPSBfdGFibGVbcHJldk9mZnNldF07CiAgICAgICAgaSA9IHByZXZPZmZzZXQ7CiAgICAgIH0KICAgICAgX3RhYmxlW19oZWFkXSA9IG51bGw7CiAgICAgIF9oZWFkID0gKF9oZWFkICsgMSkgJiBtYXNrOwogICAgICByZXR1cm4gKG9mZnNldCArIDEpICYgbWFzazsKICAgIH0gZWxzZSB7CiAgICAgIF90YWlsID0gKF90YWlsIC0gMSkgJiBtYXNrOwogICAgICBpbnQgaSA9IG9mZnNldDsKICAgICAgd2hpbGUgKGkgIT0gX3RhaWwpIHsKICAgICAgICBpbnQgbmV4dE9mZnNldCA9IChpICsgMSkgJiBtYXNrOwogICAgICAgIF90YWJsZVtpXSA9IF90YWJsZVtuZXh0T2Zmc2V0XTsKICAgICAgICBpID0gbmV4dE9mZnNldDsKICAgICAgfQogICAgICBfdGFibGVbX3RhaWxdID0gbnVsbDsKICAgICAgcmV0dXJuIG9mZnNldDsKICAgIH0KICB9CgogIC8vLyBHcm93IHRoZSB0YWJsZSB3aGVuIGZ1bGwuCiAgdm9pZCBfZ3JvdygpIHsKICAgIExpc3Q8RT4gbmV3VGFibGUgPSBMaXN0PEU+KF90YWJsZS5sZW5ndGggKiAyKTsKICAgIGludCBzcGxpdCA9IF90YWJsZS5sZW5ndGggLSBfaGVhZDsKICAgIG5ld1RhYmxlLnNldFJhbmdlKDAsIHNwbGl0LCBfdGFibGUsIF9oZWFkKTsKICAgIG5ld1RhYmxlLnNldFJhbmdlKHNwbGl0LCBzcGxpdCArIF9oZWFkLCBfdGFibGUsIDApOwogICAgX2hlYWQgPSAwOwogICAgX3RhaWwgPSBfdGFibGUubGVuZ3RoOwogICAgX3RhYmxlID0gbmV3VGFibGU7CiAgfQoKICBpbnQgX3dyaXRlVG9MaXN0KExpc3Q8RT4gdGFyZ2V0KSB7CiAgICBhc3NlcnQodGFyZ2V0Lmxlbmd0aCA+PSBsZW5ndGgpOwogICAgaWYgKF9oZWFkIDw9IF90YWlsKSB7CiAgICAgIGludCBsZW5ndGggPSBfdGFpbCAtIF9oZWFkOwogICAgICB0YXJnZXQuc2V0UmFuZ2UoMCwgbGVuZ3RoLCBfdGFibGUsIF9oZWFkKTsKICAgICAgcmV0dXJuIGxlbmd0aDsKICAgIH0gZWxzZSB7CiAgICAgIGludCBmaXJzdFBhcnRTaXplID0gX3RhYmxlLmxlbmd0aCAtIF9oZWFkOwogICAgICB0YXJnZXQuc2V0UmFuZ2UoMCwgZmlyc3RQYXJ0U2l6ZSwgX3RhYmxlLCBfaGVhZCk7CiAgICAgIHRhcmdldC5zZXRSYW5nZShmaXJzdFBhcnRTaXplLCBmaXJzdFBhcnRTaXplICsgX3RhaWwsIF90YWJsZSwgMCk7CiAgICAgIHJldHVybiBfdGFpbCArIGZpcnN0UGFydFNpemU7CiAgICB9CiAgfQoKICAvLy8gR3Jvd3MgdGhlIHRhYmxlIGV2ZW4gaWYgaXQgaXMgbm90IGZ1bGwuCiAgdm9pZCBfcHJlR3JvdyhpbnQgbmV3RWxlbWVudENvdW50KSB7CiAgICBhc3NlcnQobmV3RWxlbWVudENvdW50ID49IGxlbmd0aCk7CgogICAgLy8gQWRkIHNvbWUgZXh0cmEgcm9vbSB0byBlbnN1cmUgdGhhdCB0aGVyZSdzIHJvb20gZm9yIG1vcmUgZWxlbWVudHMgYWZ0ZXIKICAgIC8vIGV4cGFuc2lvbi4KICAgIG5ld0VsZW1lbnRDb3VudCArPSBuZXdFbGVtZW50Q291bnQgPj4gMTsKICAgIGludCBuZXdDYXBhY2l0eSA9IF9uZXh0UG93ZXJPZjIobmV3RWxlbWVudENvdW50KTsKICAgIExpc3Q8RT4gbmV3VGFibGUgPSBMaXN0PEU+KG5ld0NhcGFjaXR5KTsKICAgIF90YWlsID0gX3dyaXRlVG9MaXN0KG5ld1RhYmxlKTsKICAgIF90YWJsZSA9IG5ld1RhYmxlOwogICAgX2hlYWQgPSAwOwogIH0KfQoKLy8vIEl0ZXJhdG9yIGZvciBhIFtMaXN0UXVldWVdLgovLy8KLy8vIENvbnNpZGVycyBhbnkgYWRkIG9yIHJlbW92ZSBvcGVyYXRpb24gYSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbi4KY2xhc3MgX0xp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aWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKLy8vCi8vLyBFbmNvZGVycyBhbmQgZGVjb2RlcnMgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBkaWZmZXJlbnQgZGF0YSByZXByZXNlbnRhdGlvbnMsCi8vLyBpbmNsdWRpbmcgSlNPTiBhbmQgVVRGLTguCi8vLwovLy8gSW4gYWRkaXRpb24gdG8gY29udmVydGVycyBmb3IgY29tbW9uIGRhdGEgcmVwcmVzZW50YXRpb25zLCB0aGlzIGxpYnJhcnkKLy8vIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGltcGxlbWVudGluZyBjb252ZXJ0ZXJzIGluIGEgd2F5IHdoaWNoIG1ha2VzIHRoZW0gZWFzeSB0bwovLy8gY2hhaW4gYW5kIHRvIHVzZSB3aXRoIHN0cmVhbXMuCi8vLwovLy8gVG8gdXNlIHRoaXMgbGlicmFyeSBpbiB5b3VyIGNvZGU6Ci8vLwovLy8gICAgIGltcG9ydCAnZGFydDpjb252ZXJ0JzsKLy8vCi8vLyBUd28gY29tbW9ubHkgdXNlZCBjb252ZXJ0ZXJzIGFyZSB0aGUgdG9wLWxldmVsIGluc3RhbmNlcyBvZgovLy8gW0pzb25Db2RlY10gYW5kIFtVdGY4Q29kZWNdLCBuYW1lZCBbanNvbl0gYW5kIFt1dGY4XSwgcmVzcGVjdGl2ZWx5LgovLy8KLy8vIEpTT04gaXMgYSBzaW1wbGUgdGV4dCBmb3JtYXQgZm9yIHJlcHJlc2VudGluZwovLy8gc3RydWN0dXJlZCBvYmplY3RzIGFuZCBjb2xsZWN0aW9ucy4KLy8vIFRoZSBKU09OIGVuY29kZXIvZGVjb2RlciB0cmFuc2Zvcm1zIGJldHdlZW4gc3RyaW5ncyBhbmQKLy8vIG9iamVjdCBzdHJ1Y3R1cmVzLCBzdWNoIGFzIGxpc3RzIGFuZCBtYXBzLCB1c2luZyB0aGUgSlNPTiBmb3JtYXQuCi8vLwovLy8gVVRGLTggaXMgYSBjb21tb24gdmFyaWFibGUtd2lkdGggZW5jb2RpbmcgdGhhdCBjYW4gcmVwcmVzZW50Ci8vLyBldmVyeSBjaGFyYWN0ZXIgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyIHNldC4KLy8vIFRoZSBVVEYtOCBlbmNvZGVyL2RlY29kZXIgdHJhbnNmb3JtcyBiZXR3ZWVuIFN0cmluZ3MgYW5kIGJ5dGVzLgovLy8KLy8vIENvbnZlcnRlcnMgYXJlIG9mdGVuIHVzZWQgd2l0aCBzdHJlYW1zCi8vLyB0byB0cmFuc2Zvcm0gdGhlIGRhdGEgdGhhdCBjb21lcyB0aHJvdWdoIHRoZSBzdHJlYW0KLy8vIGFzIGl0IGJlY29tZXMgYXZhaWxhYmxlLgovLy8gVGhlIGZvbGxvd2luZyBjb2RlIHVzZXMgdHdvIGNvbnZlcnRlcnMuCi8vLyBUaGUgZmlyc3QgaXMgYSBVVEYtOCBkZWNvZGVyLCB3aGljaCBjb252ZXJ0cyB0aGUgZGF0YSBmcm9tIGJ5dGVzIHRvIFVURi04Ci8vLyBhcyBpdCdzIHJlYWQgZnJvbSBhIGZpbGUsCi8vLyBUaGUgc2Vjb25kIGlzIGFuIGluc3RhbmNlIG9mIFtMaW5lU3BsaXR0ZXJdLAovLy8gd2hpY2ggc3BsaXRzIHRoZSBkYXRhIG9uIG5ld2xpbmUgYm91bmRhcmllcy4KLy8vCi8vLyAgICAgdmFyIGxpbmVOdW1iZXIgPSAxOwovLy8gICAgIHZhciBzdHJlYW0gPSBGaWxlKCdxdW90ZXMudHh0Jykub3BlblJlYWQoKTsKLy8vCi8vLyAgICAgc3RyZWFtLnRyYW5zZm9ybSh1dGY4LmRlY29kZXIpCi8vLyAgICAgICAgICAgLnRyYW5zZm9ybShjb25zdCBMaW5lU3BsaXR0ZXIoKSkKLy8vICAgICAgICAgICAubGlzdGVuKChsaW5lKSB7Ci8vLyAgICAgICAgICAgICBpZiAoc2hvd0xpbmVOdW1iZXJzKSB7Ci8vLyAgICAgICAgICAgICAgIHN0ZG91dC53cml0ZSgnJHtsaW5lTnVtYmVyKyt9ICcpOwovLy8gICAgICAgICAgICAgfQovLy8gICAgICAgICAgICAgc3Rkb3V0LndyaXRlbG4obGluZSk7Ci8vLyAgICAgICAgICAgfSk7Ci8vLwovLy8gU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgW0NvZGVjXSBhbmQgW0NvbnZlcnRlcl0gY2xhc3NlcwovLy8gZm9yIGluZm9ybWF0aW9uIGFib3V0IGNyZWF0aW5nIHlvdXIgb3duIGNvbnZlcnRlcnMuCi8vLwovLy8ge0BjYXRlZ29yeSBDb3JlfQpsaWJyYXJ5IGRhcnQuY29udmVydDsKCmltcG9ydCAnZGFydDphc3luYyc7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKaW1wb3J0ICdkYXJ0Ol9pbnRlcm5hbCcgc2hvdyBDYXN0Q29udmVydGVyLCBwYXJzZUhleEJ5dGU7CgpwYXJ0ICdhc2NpaS5kYXJ0JzsKcGFydCAnYmFzZTY0LmRhcnQnOwpwYXJ0ICdieXRlX2NvbnZlcnNpb24uZGFydCc7CnBhcnQgJ2NodW5rZWRfY29udmVyc2lvbi5kYXJ0JzsKcGFydCAnY29kZWMuZGFydCc7CnBhcnQgJ2NvbnZlcnRlci5kYXJ0JzsKcGFydCAnZW5jb2RpbmcuZGFydCc7CnBhcnQgJ2h0bWxfZXNjYXBlLmRhcnQnOwpwYXJ0ICdqc29uLmRhcnQnOwpwYXJ0ICdsYXRpbjEuZGFydCc7CnBhcnQgJ2xpbmVfc3BsaXR0ZXIuZGFydCc7CnBhcnQgJ3N0cmluZ19jb252ZXJzaW9uLmRhcnQnOwpwYXJ0ICd1dGYuZGFydCc7CkwATk48AQ8BBFEeBExTIwQmBB8EQEgEMig8RgRBMkQEKzgdLE4eMTEEHDQEJy8fJzQSJhIEQjgEFRYBFRo6ARMUHSATFxYZEhQbHxEBDGRhcnQ6Y29udmVydFBvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vbGliL2NvbnZlcnRfcGF0Y2guZGFydMAA58IvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vLyBOb3RlOiB0aGUgVk0gY29uY2F0ZW5hdGVzIGFsbCBwYXRjaCBmaWxlcyBpbnRvIGEgc2luZ2xlIHBhdGNoIGZpbGUuIFRoaXMKLy8vIGZpbGUgaXMgdGhlIGZpcnN0IHBhdGNoIGluICJkYXJ0OmNvbnZlcnQiIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgaW1wb3J0cwovLy8gdXNlZCBieSBwYXRjaGVzIG9mIHRoYXQgbGlicmFyeS4gV2UgcGxhbiB0byBjaGFuZ2UgdGhpcyB3aGVuIHdlIGhhdmUgYQovLy8gc2hhcmVkIGZyb250IGVuZCBhbmQgc2ltcGx5IHVzZSBwYXJ0cy4KCmltcG9ydCAiZGFydDpfaW50ZXJuYWwiIHNob3cgUE9XRVJTX09GX1RFTiwgcGF0Y2gsIENsYXNzSUQ7CgppbXBvcnQgImRhcnQ6dHlwZWRfZGF0YSIgc2hvdyBVaW50OExpc3QsIFVpbnQxNkxpc3Q7CgovLy8gVGhpcyBwYXRjaCBsaWJyYXJ5IGhhcyBubyBhZGRpdGlvbmFsIHBhcnRzLgoKLy8gSlNPTiBjb252ZXJzaW9uLgoKQHBhdGNoCl9wYXJzZUpzb24oU3RyaW5nIHNvdXJjZSwgcmV2aXZlcihrZXksIHZhbHVlKSkgewogIF9CdWlsZEpzb25MaXN0ZW5lciBsaXN0ZW5lcjsKICBpZiAocmV2aXZlciA9PSBudWxsKSB7CiAgICBsaXN0ZW5lciA9IG5ldyBfQnVpbGRKc29uTGlzdGVuZXIoKTsKICB9IGVsc2UgewogICAgbGlzdGVuZXIgPSBuZXcgX1Jldml2ZXJKc29uTGlzdGVuZXIocmV2aXZlcik7CiAgfQogIHZhciBwYXJzZXIgPSBuZXcgX0pzb25TdHJpbmdQYXJzZXIobGlzdGVuZXIpOwogIHBhcnNlci5jaHVuayA9IHNvdXJjZTsKICBwYXJzZXIuY2h1bmtFbmQgPSBzb3VyY2UubGVuZ3RoOwogIHBhcnNlci5wYXJzZSgwKTsKICBwYXJzZXIuY2xvc2UoKTsKICByZXR1cm4gbGlzdGVuZXIucmVzdWx0Owp9CgpAcGF0Y2gKY2xhc3MgVXRmOERlY29kZXIgewogIEBwYXRjaAogIENvbnZlcnRlcjxMaXN0PGludD4sIFQ+IGZ1c2U8VD4oQ29udmVydGVyPFN0cmluZywgVD4gbmV4dCkgewogICAgaWYgKG5leHQgaXMgSnNvbkRlY29kZXIpIHsKICAgICAgcmV0dXJuIG5ldyBfSnNvblV0ZjhEZWNvZGVyKAogICAgICAgICAgICAgIChuZXh0IGFzIEpzb25EZWNvZGVyKS5fcmV2aXZlciwgdGhpcy5fYWxsb3dNYWxmb3JtZWQpCiAgICAgICAgICBhcyBkeW5hbWljLyo9Q29udmVydGVyPExpc3Q8aW50PiwgVD4qLzsKICAgIH0KICAgIC8vIFRPRE8obHJuKTogUmVjb2duaXplIGEgZnVzZWQgZGVjb2RlciB3aGVyZSB0aGUgbmV4dCBzdGVwIGlzIEpzb25EZWNvZGVyLgogICAgcmV0dXJuIHN1cGVyLmZ1c2U8VD4obmV4dCk7CiAgfQoKICAvLyBBbGxvdyBpbnRlcmNlcHRpbmcgb2YgVVRGLTggZGVjb2Rpbmcgd2hlbiBidWlsdC1pbiBsaXN0cyBhcmUgcGFzc2VkLgogIEBwYXRjaAogIHN0YXRpYyBTdHJpbmcgX2NvbnZlcnRJbnRlcmNlcHRlZCgKICAgICAgYm9vbCBhbGxvd01hbGZvcm1lZCwgTGlzdDxpbnQ+IGNvZGVVbml0cywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICByZXR1cm4gbnVsbDsgLy8gVGhpcyBjYWxsIHdhcyBub3QgaW50ZXJjZXB0ZWQuCiAgfQp9CgpjbGFzcyBfSnNvblV0ZjhEZWNvZGVyIGV4dGVuZHMgQ29udmVydGVyPExpc3Q8aW50PiwgT2JqZWN0PiB7CiAgZmluYWwgRnVuY3Rpb24oT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKSBfcmV2aXZlcjsKICBmaW5hbCBib29sIF9hbGxvd01hbGZvcm1lZDsKCiAgX0pzb25VdGY4RGVjb2Rlcih0aGlzLl9yZXZpdmVyLCB0aGlzLl9hbGxvd01hbGZvcm1lZCk7CgogIE9iamVjdCBjb252ZXJ0KExpc3Q8aW50PiBpbnB1dCkgewogICAgdmFyIHBhcnNlciA9IF9Kc29uVXRmOERlY29kZXJTaW5rLl9jcmVhdGVQYXJzZXIoX3Jldml2ZXIsIF9hbGxvd01hbGZvcm1lZCk7CiAgICBwYXJzZXIuY2h1bmsgPSBpbnB1dDsKICAgIHBhcnNlci5jaHVua0VuZCA9IGlucHV0Lmxlbmd0aDsKICAgIHBhcnNlci5wYXJzZSgwKTsKICAgIHBhcnNlci5jbG9zZSgpOwogICAgcmV0dXJuIHBhcnNlci5yZXN1bHQ7CiAgfQoKICBCeXRlQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPE9iamVjdD4gc2luaykgewogICAgcmV0dXJuIG5ldyBfSnNvblV0ZjhEZWNvZGVyU2luayhfcmV2aXZlciwgc2luaywgX2FsbG93TWFsZm9ybWVkKTsKICB9Cn0KCi8vLy8gSW1wbGVtZW50YXRpb24gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCi8vIFNpbXBsZSBBUEkgZm9yIEpTT04gcGFyc2luZy4KCi8qKgogKiBMaXN0ZW5lciBmb3IgcGFyc2luZyBldmVudHMgZnJvbSBbX0NodW5rZWRKc29uUGFyc2VyXS4KICovCmFic3RyYWN0IGNsYXNzIF9Kc29uTGlzdGVuZXIgewogIHZvaWQgaGFuZGxlU3RyaW5nKFN0cmluZyB2YWx1ZSkge30KICB2b2lkIGhhbmRsZU51bWJlcihudW0gdmFsdWUpIHt9CiAgdm9pZCBoYW5kbGVCb29sKGJvb2wgdmFsdWUpIHt9CiAgdm9pZCBoYW5kbGVOdWxsKCkge30KICB2b2lkIGJlZ2luT2JqZWN0KCkge30KICB2b2lkIHByb3BlcnR5TmFtZSgpIHt9CiAgdm9pZCBwcm9wZXJ0eVZhbHVlKCkge30KICB2b2lkIGVuZE9iamVjdCgpIHt9CiAgdm9pZCBiZWdpbkFycmF5KCkge30KICB2b2lkIGFycmF5RWxlbWVudCgpIHt9CiAgdm9pZCBlbmRBcnJheSgpIHt9CgogIC8qKgogICAqIFJlYWQgb3V0IHRoZSBmaW5hbCByZXN1bHQgb2YgcGFyc2luZyBhIEpTT04gc3RyaW5nLgogICAqCiAgICogTXVzdCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBlbnRpcmUgaW5wdXQgaGFzIGJlZW4gcGFyc2VkLgogICAqLwogIGdldCByZXN1bHQ7Cn0KCi8qKgogKiBBIFtfSnNvbkxpc3RlbmVyXSB0aGF0IGJ1aWxkcyBkYXRhIG9iamVjdHMgZnJvbSB0aGUgcGFyc2VyIGV2ZW50cy4KICoKICogVGhpcyBpcyBhIHNpbXBsZSBzdGFjay1iYXNlZCBvYmplY3QgYnVpbGRlci4gSXQga2VlcHMgdGhlIG1vc3QgcmVjZW50bHkKICogc2VlbiB2YWx1ZSBpbiBhIHZhcmlhYmxlLCBhbmQgdXNlcyBpdCBkZXBlbmRpbmcgb24gdGhlIGZvbGxvd2luZyBldmVudC4KICovCmNsYXNzIF9CdWlsZEpzb25MaXN0ZW5lciBleHRlbmRzIF9Kc29uTGlzdGVuZXIgewogIC8qKgogICAqIFN0YWNrIHVzZWQgdG8gaGFuZGxlIG5lc3RlZCBjb250YWluZXJzLgogICAqCiAgICogVGhlIGN1cnJlbnQgY29udGFpbmVyIGlzIHB1c2hlZCBvbiB0aGUgc3RhY2sgd2hlbiBhIG5ldyBvbmUgaXMKICAgKiBzdGFydGVkLiBJZiB0aGUgY29udGFpbmVyIGlzIGEgW01hcF0sIHRoZXJlIGlzIGFsc28gYSBjdXJyZW50IFtrZXldCiAgICogd2hpY2ggaXMgYWxzbyBzdG9yZWQgb24gdGhlIHN0YWNrLgogICAqLwogIExpc3Qgc3RhY2sgPSBbXTsKICAvKiogVGhlIGN1cnJlbnQgW01hcF0gb3IgW0xpc3RdIGJlaW5nIGJ1aWx0LiAqLwogIHZhciBjdXJyZW50Q29udGFpbmVyOwogIC8qKiBUaGUgbW9zdCByZWNlbnRseSByZWFkIHByb3BlcnR5IGtleS4gKi8KICBTdHJpbmcga2V5OwogIC8qKiBUaGUgbW9zdCByZWNlbnRseSByZWFkIHZhbHVlLiAqLwogIHZhciB2YWx1ZTsKCiAgLyoqIFB1c2hlcyB0aGUgY3VycmVudGx5IGFjdGl2ZSBjb250YWluZXIgKGFuZCBrZXksIGlmIGEgW01hcF0pLiAqLwogIHZvaWQgcHVzaENvbnRhaW5lcigpIHsKICAgIGlmIChjdXJyZW50Q29udGFpbmVyIGlzIE1hcCkgc3RhY2suYWRkKGtleSk7CiAgICBzdGFjay5hZGQoY3VycmVudENvbnRhaW5lcik7CiAgfQoKICAvKiogUG9wcyB0aGUgdG9wIGNvbnRhaW5lciBmcm9tIHRoZSBbc3RhY2tdLCBpbmNsdWRpbmcgYSBrZXkgaWYgYXBwbGljYWJsZS4gKi8KICB2b2lkIHBvcENvbnRhaW5lcigpIHsKICAgIHZhbHVlID0gY3VycmVudENvbnRhaW5lcjsKICAgIGN1cnJlbnRDb250YWluZXIgPSBzdGFjay5yZW1vdmVMYXN0KCk7CiAgICBpZiAoY3VycmVudENvbnRhaW5lciBpcyBNYXApIGtleSA9IHN0YWNrLnJlbW92ZUxhc3QoKTsKICB9CgogIHZvaWQgaGFuZGxlU3RyaW5nKFN0cmluZyB2YWx1ZSkgewogICAgdGhpcy52YWx1ZSA9IHZhbHVlOwogIH0KCiAgdm9pZCBoYW5kbGVOdW1iZXIobnVtIHZhbHVlKSB7CiAgICB0aGlzLnZhbHVlID0gdmFsdWU7CiAgfQoKICB2b2lkIGhhbmRsZUJvb2woYm9vbCB2YWx1ZSkgewogICAgdGhpcy52YWx1ZSA9IHZhbHVlOwogIH0KCiAgdm9pZCBoYW5kbGVOdWxsKCkgewogICAgdGhpcy52YWx1ZSA9IG51bGw7CiAgfQoKICB2b2lkIGJlZ2luT2JqZWN0KCkgewogICAgcHVzaENvbnRhaW5lcigpOwogICAgY3VycmVudENvbnRhaW5lciA9IDxTdHJpbmcsIGR5bmFtaWM+e307CiAgfQoKICB2b2lkIHByb3BlcnR5TmFtZSgpIHsKICAgIGtleSA9IHZhbHVlOwogICAgdmFsdWUgPSBudWxsOwogIH0KCiAgdm9pZCBwcm9wZXJ0eVZhbHVlKCkgewogICAgTWFwIG1hcCA9IGN1cnJlbnRDb250YWluZXI7CiAgICBtYXBba2V5XSA9IHZhbHVlOwogICAga2V5ID0gdmFsdWUgPSBudWxsOwogIH0KCiAgdm9pZCBlbmRPYmplY3QoKSB7CiAgICBwb3BDb250YWluZXIoKTsKICB9CgogIHZvaWQgYmVnaW5BcnJheSgpIHsKICAgIHB1c2hDb250YWluZXIoKTsKICAgIGN1cnJlbnRDb250YWluZXIgPSBbXTsKICB9CgogIHZvaWQgYXJyYXlFbGVtZW50KCkgewogICAgY3VycmVudENvbnRhaW5lci5hZGQodmFsdWUpOwogICAgdmFsdWUgPSBudWxsOwogIH0KCiAgdm9pZCBlbmRBcnJheSgpIHsKICAgIHBvcENvbnRhaW5lcigpOwogIH0KCiAgLyoqIFJlYWQgb3V0IHRoZSBmaW5hbCByZXN1bHQgb2YgcGFyc2luZyBhIEpTT04gc3RyaW5nLiAqLwogIGdldCByZXN1bHQgewogICAgYXNzZXJ0KGN1cnJlbnRDb250YWluZXIgPT0gbnVsbCk7CiAgICByZXR1cm4gdmFsdWU7CiAgfQp9CgpjbGFzcyBfUmV2aXZlckpzb25MaXN0ZW5lciBleHRlbmRzIF9CdWlsZEpzb25MaXN0ZW5lciB7CiAgZmluYWwgRnVuY3Rpb24oT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKSByZXZpdmVyOwogIF9SZXZpdmVySnNvbkxpc3RlbmVyKHRoaXMucmV2aXZlcik7CgogIHZvaWQgYXJyYXlFbGVtZW50KCkgewogICAgTGlzdCBsaXN0ID0gY3VycmVudENvbnRhaW5lcjsKICAgIHZhbHVlID0gcmV2aXZlcihsaXN0Lmxlbmd0aCwgdmFsdWUpOwogICAgc3VwZXIuYXJyYXlFbGVtZW50KCk7CiAgfQoKICB2b2lkIHByb3BlcnR5VmFsdWUoKSB7CiAgICB2YWx1ZSA9IHJldml2ZXIoa2V5LCB2YWx1ZSk7CiAgICBzdXBlci5wcm9wZXJ0eVZhbHVlKCk7CiAgfQoKICBnZXQgcmVzdWx0IHsKICAgIHJldHVybiByZXZpdmVyKG51bGwsIHZhbHVlKTsKICB9Cn0KCi8qKgogKiBCdWZmZXIgaG9sZGluZyBwYXJ0cyBvZiBhIG51bWVyYWwuCiAqCiAqIFRoZSBidWZmZXIgY29udGFpbnMgdGhlIGNoYXJhY3RlcnMgb2YgYSBKU09OIG51bWJlci4KICogVGhlc2UgYXJlIGFsbCBBU0NJSSwgc28gYW4gW1VpbnQ4TGlzdF0gaXMgdXNlZCBhcyBiYWNraW5nIHN0b3JlLgogKgogKiBUaGlzIGJ1ZmZlciBpcyB1c2VkIHdoZW4gYSBKU09OIG51bWJlciBpcyBzcGxpdCBiZXR3ZWVuIHNlcGFyYXRlIGNodW5rcy4KICoKICovCmNsYXNzIF9OdW1iZXJCdWZmZXIgewogIHN0YXRpYyBjb25zdCBpbnQgbWluQ2FwYWNpdHkgPSAxNjsKICBzdGF0aWMgY29uc3QgaW50IGtEZWZhdWx0T3ZlcmhlYWQgPSA1OwogIFVpbnQ4TGlzdCBsaXN0OwogIGludCBsZW5ndGggPSAwOwogIF9OdW1iZXJCdWZmZXIoaW50IGluaXRpYWxDYXBhY2l0eSkKICAgICAgOiBsaXN0ID0gbmV3IFVpbnQ4TGlzdChfaW5pdGlhbENhcGFjaXR5KGluaXRpYWxDYXBhY2l0eSkpOwoKICBpbnQgZ2V0IGNhcGFjaXR5ID0+IGxpc3QubGVuZ3RoOwoKICAvLyBQaWNrIGFuIGluaXRpYWwgY2FwYWNpdHkgZ3JlYXRlciB0aGFuIHRoZSBmaXJzdCBwYXJ0J3Mgc2l6ZS4KICAvLyBUaGUgdHlwaWNhbCB1c2UgY2FzZSBoYXMgdHdvIHBhcnRzLCB0aGlzIGlzIHRoZSBhdHRlbXB0IGF0CiAgLy8gZ3Vlc3NpbmcgdGhlIHNpemUgb2YgdGhlIHNlY29uZCBwYXJ0IHdpdGhvdXQgb3ZlcmRvaW5nIGl0LgogIC8vIFRoZSBkZWZhdWx0IGVzdGltYXRlIG9mIHRoZSBzZWNvbmQgcGFydCBpcyBba0RlZmF1bHRPdmVyaGVhZF0sCiAgLy8gdGhlbiByb3VuZCB0byBtdWx0aXBsdW0gb2YgZm91ciwgYW5kIHJldHVybiB0aGUgcmVzdWx0LAogIC8vIG9yIFttaW5DYXBhY2l0eV0gaWYgdGhhdCBpcyBncmVhdGVyLgogIHN0YXRpYyBpbnQgX2luaXRpYWxDYXBhY2l0eShpbnQgbWluQ2FwYWNpdHkpIHsKICAgIG1pbkNhcGFjaXR5ICs9IGtEZWZhdWx0T3ZlcmhlYWQ7CiAgICBpZiAobWluQ2FwYWNpdHkgPCBtaW5DYXBhY2l0eSkgcmV0dXJuIG1pbkNhcGFjaXR5OwogICAgbWluQ2FwYWNpdHkgPSAobWluQ2FwYWNpdHkgKyAzKSAmIH4zOyAvLyBSb3VuZCB0byBtdWx0aXBsZSBvZiBmb3VyLgogICAgcmV0dXJuIG1pbkNhcGFjaXR5OwogIH0KCiAgLy8gR3Jvd3MgdG8gdGhlIGV4YWN0IHNpemUgYXNrZWQgZm9yLgogIHZvaWQgZW5zdXJlQ2FwYWNpdHkoaW50IG5ld0NhcGFjaXR5KSB7CiAgICBVaW50OExpc3QgbGlzdCA9IHRoaXMubGlzdDsKICAgIGlmIChuZXdDYXBhY2l0eSA8PSBsaXN0Lmxlbmd0aCkgcmV0dXJuOwogICAgVWludDhMaXN0IG5ld0xpc3QgPSBuZXcgVWludDhMaXN0KG5ld0NhcGFjaXR5KTsKICAgIG5ld0xpc3Quc2V0UmFuZ2UoMCwgbGlzdC5sZW5ndGgsIGxpc3QsIDApOwogICAgdGhpcy5saXN0ID0gbmV3TGlzdDsKICB9CgogIFN0cmluZyBnZXRTdHJpbmcoKSB7CiAgICBTdHJpbmcgcmVzdWx0ID0gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGxpc3QsIDAsIGxlbmd0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gVE9ETyhscm4pOiBTZWUgaWYgcGFyc2luZyBvZiBudW1iZXJzIGNhbiBiZSBhYnN0cmFjdGVkIHRvIHNvbWV0aGluZwogIC8vIG5vdCBvbmx5IHdvcmtpbmcgb24gc3RyaW5ncywgYnV0IGFsc28gb24gY2hhci1jb2RlIGxpc3RzLCB3aXRob3V0IGxvc3NpbmcKICAvLyBwZXJmb3JtYW5jZS4KICBudW0gcGFyc2VOdW0oKSA9PiBudW0ucGFyc2UoZ2V0U3RyaW5nKCkpOwogIGRvdWJsZSBwYXJzZURvdWJsZSgpID0+IGRvdWJsZS5wYXJzZShnZXRTdHJpbmcoKSk7Cn0KCi8qKgogKiBDaHVua2VkIEpTT04gcGFyc2VyLgogKgogKiBSZWNlaXZlcyBpbnB1dHMgaW4gY2h1bmtzLCBnaXZlcyBhY2Nlc3MgdG8gaW5kaXZpZHVhbCBwYXJ0cyBvZiB0aGUgaW5wdXQsCiAqIGFuZCBzdG9yZXMgaW5wdXQgc3RhdGUgYmV0d2VlbiBjaHVua3MuCiAqCiAqIEltcGxlbWVudGF0aW9ucyBpbmNsdWRlIFtTdHJpbmddIGFuZCBVVEYtOCBwYXJzZXJzLgogKi8KYWJzdHJhY3QgY2xhc3MgX0NodW5rZWRKc29uUGFyc2VyPFQ+IHsKICAvLyBBIHNpbXBsZSBub24tcmVjdXJzaXZlIHN0YXRlLWJhc2VkIHBhcnNlciBmb3IgSlNPTi4KICAvLwogIC8vIExpdGVyYWwgdmFsdWVzIGFjY2VwdGVkIGluIHN0YXRlcyBBUlJBWV9FTVBUWSwgQVJSQVlfQ09NTUEsIE9CSkVDVF9DT0xPTgogIC8vIGFuZCBzdHJpbmdzIGFsc28gaW4gT0JKRUNUX0VNUFRZLCBPQkpFQ1RfQ09NTUEuCiAgLy8gICAgICAgICAgICAgICBWQUxVRSAgU1RSSU5HICA6ICAsICB9ICBdICAgICAgICBUcmFuc2l0aW9ucyB0bwogIC8vIEVNUFRZICAgICAgICAgICAgWCAgICAgIFggICAgICAgICAgICAgICAgICAgLT4gRU5ECiAgLy8gQVJSQVlfRU1QVFkgICAgICBYICAgICAgWCAgICAgICAgICAgICBAICAgICAtPiBBUlJBWV9WQUxVRSAvIHBvcAogIC8vIEFSUkFZX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgQCAgICAgQCAgICAgLT4gQVJSQVlfQ09NTUEgLyBwb3AKICAvLyBBUlJBWV9DT01NQSAgICAgIFggICAgICBYICAgICAgICAgICAgICAgICAgIC0+IEFSUkFZX1ZBTFVFCiAgLy8gT0JKRUNUX0VNUFRZICAgICAgICAgICAgWCAgICAgICAgICBAICAgICAgICAtPiBPQkpFQ1RfS0VZIC8gcG9wCiAgLy8gT0JKRUNUX0tFWSAgICAgICAgICAgICAgICAgICBAICAgICAgICAgICAgICAtPiBPQkpFQ1RfQ09MT04KICAvLyBPQkpFQ1RfQ09MT04gICAgIFggICAgICBYICAgICAgICAgICAgICAgICAgIC0+IE9CSkVDVF9WQUxVRQogIC8vIE9CSkVDVF9WQUxVRSAgICAgICAgICAgICAgICAgICAgQCAgQCAgICAgICAgLT4gT0JKRUNUX0NPTU1BIC8gcG9wCiAgLy8gT0JKRUNUX0NPTU1BICAgICAgICAgICAgWCAgICAgICAgICAgICAgICAgICAtPiBPQkpFQ1RfS0VZCiAgLy8gRU5ECiAgLy8gU3RhcnRpbmcgYSBuZXcgYXJyYXkgb3Igb2JqZWN0IHdpbGwgcHVzaCB0aGUgY3VycmVudCBzdGF0ZS4gVGhlICJwb3AiCiAgLy8gYWJvdmUgbWVhbnMgcmVzdG9yaW5nIHRoaXMgc3RhdGUgYW5kIHRoZW4gbWFya2luZyBpdCBhcyBhbiBlbmRlZCB2YWx1ZS4KICAvLyBYIG1lYW5zIGdlbmVyaWMgaGFuZGxpbmcsIEAgbWVhbnMgc3BlY2lhbCBoYW5kbGluZyBmb3IganVzdCB0aGF0CiAgLy8gc3RhdGUgLSB0aGF0IGlzLCB2YWx1ZXMgYXJlIGhhbmRsZWQgZ2VuZXJpY2FsbHksIG9ubHkgcHVuY3R1YXRpb24KICAvLyBjYXJlcyBhYm91dCB0aGUgY3VycmVudCBzdGF0ZS4KICAvLyBWYWx1ZXMgZm9yIHN0YXRlcyBhcmUgY2hvc2VuIHNvIGJpdHMgMCBhbmQgMSB0ZWxsIHdoZXRoZXIKICAvLyBhIHN0cmluZy92YWx1ZSBpcyBhbGxvd2VkLCBhbmQgc2V0dGluZyBiaXRzIDAgdGhyb3VnaCAyIGFmdGVyIGEgdmFsdWUKICAvLyBnZXRzIHRvIHRoZSBuZXh0IHN0YXRlIChub3QgZW1wdHksIGRvZXNuJ3QgYWxsb3cgYSB2YWx1ZSkuCgogIC8vIFN0YXRlIGJ1aWxkaW5nLWJsb2NrIGNvbnN0YW50cy4KICBzdGF0aWMgY29uc3QgaW50IFRPUF9MRVZFTCA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBJTlNJREVfQVJSQVkgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgSU5TSURFX09CSkVDVCA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBBRlRFUl9DT0xPTiA9IDM7IC8vIEFsd2F5cyBpbnNpZGUgb2JqZWN0LgoKICBzdGF0aWMgY29uc3QgaW50IEFMTE9XX1NUUklOR19NQVNLID0gODsgLy8gQWxsb3dlZCBpZiB6ZXJvLgogIHN0YXRpYyBjb25zdCBpbnQgQUxMT1dfVkFMVUVfTUFTSyA9IDQ7IC8vIEFsbG93ZWQgaWYgemVyby4KICBzdGF0aWMgY29uc3QgaW50IEFMTE9XX1ZBTFVFID0gMDsKICBzdGF0aWMgY29uc3QgaW50IFNUUklOR19PTkxZID0gNDsKICBzdGF0aWMgY29uc3QgaW50IE5PX1ZBTFVFUyA9IDEyOwoKICAvLyBPYmplY3RzIGFuZCBhcnJheXMgYXJlICJlbXB0eSIgdW50aWwgdGhlaXIgZmlyc3QgcHJvcGVydHkvZWxlbWVudC4KICAvLyBBdCB0aGlzIHBvc2l0aW9uLCB0aGV5IG1heSBlaXRoZXIgaGF2ZSBhbiBlbnRyeSBvciBhIGNsb3NlLWJyYWNrZXQuCiAgc3RhdGljIGNvbnN0IGludCBFTVBUWSA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBOT05fRU1QVFkgPSAxNjsKICBzdGF0aWMgY29uc3QgaW50IEVNUFRZX01BU0sgPSAxNjsgLy8gRW1wdHkgaWYgemVyby4KCiAgLy8gQWN0dWFsIHN0YXRlcyAgICAgICAgICAgICAgIDogQ29udGV4dCB8IElzIGVtcHR5PyB8IE5leHQ/CiAgc3RhdGljIGNvbnN0IGludCBTVEFURV9JTklUSUFMID0gVE9QX0xFVkVMIHwgRU1QVFkgfCBBTExPV19WQUxVRTsKICBzdGF0aWMgY29uc3QgaW50IFNUQVRFX0VORCA9IFRPUF9MRVZFTCB8IE5PTl9FTVBUWSB8IE5PX1ZBTFVFUzsKCiAgc3RhdGljIGNvbnN0IGludCBTVEFURV9BUlJBWV9FTVBUWSA9IElOU0lERV9BUlJBWSB8IEVNUFRZIHwgQUxMT1dfVkFMVUU7CiAgc3RhdGljIGNvbnN0IGludCBTVEFURV9BUlJBWV9WQUxVRSA9IElOU0lERV9BUlJBWSB8IE5PTl9FTVBUWSB8IE5PX1ZBTFVFUzsKICBzdGF0aWMgY29uc3QgaW50IFNUQVRFX0FSUkFZX0NPTU1BID0gSU5TSURFX0FSUkFZIHwgTk9OX0VNUFRZIHwgQUxMT1dfVkFMVUU7CgogIHN0YXRpYyBjb25zdCBpbnQgU1RBVEVfT0JKRUNUX0VNUFRZID0gSU5TSURFX09CSkVDVCB8IEVNUFRZIHwgU1RSSU5HX09OTFk7CiAgc3RhdGljIGNvbnN0IGludCBTVEFURV9PQkpFQ1RfS0VZID0gSU5TSURFX09CSkVDVCB8IE5PTl9FTVBUWSB8IE5PX1ZBTFVFUzsKICBzdGF0aWMgY29uc3QgaW50IFNUQVRFX09CSkVDVF9DT0xPTiA9IEFGVEVSX0NPTE9OIHwgTk9OX0VNUFRZIHwgQUxMT1dfVkFMVUU7CiAgc3RhdGljIGNvbnN0IGludCBTVEFURV9PQkpFQ1RfVkFMVUUgPSBBRlRFUl9DT0xPTiB8IE5PTl9FTVBUWSB8IE5PX1ZBTFVFUzsKICBzdGF0aWMgY29uc3QgaW50IFNUQVRFX09CSkVDVF9DT01NQSA9IElOU0lERV9PQkpFQ1QgfCBOT05fRU1QVFkgfCBTVFJJTkdfT05MWTsKCiAgLy8gQml0cyBzZXQgaW4gc3RhdGUgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHJlYWRpbmcgYSB2YWx1ZS4KICAvLyBUaGlzIHRyYW5zaXRpb25zIHRoZSBzdGF0ZSB0byBleHBlY3QgdGhlIG5leHQgcHVuY3R1YXRpb24uCiAgc3RhdGljIGNvbnN0IGludCBWQUxVRV9SRUFEX0JJVFMgPSBOT05fRU1QVFkgfCBOT19WQUxVRVM7CgogIC8vIENoYXJhY3RlciBjb2RlIGNvbnN0YW50cy4KICBzdGF0aWMgY29uc3QgaW50IEJBQ0tTUEFDRSA9IDB4MDg7CiAgc3RhdGljIGNvbnN0IGludCBUQUIgPSAweDA5OwogIHN0YXRpYyBjb25zdCBpbnQgTkVXTElORSA9IDB4MGE7CiAgc3RhdGljIGNvbnN0IGludCBDQVJSSUFHRV9SRVRVUk4gPSAweDBkOwogIHN0YXRpYyBjb25zdCBpbnQgRk9STV9GRUVEID0gMHgwYzsKICBzdGF0aWMgY29uc3QgaW50IFNQQUNFID0gMHgyMDsKICBzdGF0aWMgY29uc3QgaW50IFFVT1RFID0gMHgyMjsKICBzdGF0aWMgY29uc3QgaW50IFBMVVMgPSAweDJiOwogIHN0YXRpYyBjb25zdCBpbnQgQ09NTUEgPSAweDJjOwogIHN0YXRpYyBjb25zdCBpbnQgTUlOVVMgPSAweDJkOwogIHN0YXRpYyBjb25zdCBpbnQgREVDSU1BTFBPSU5UID0gMHgyZTsKICBzdGF0aWMgY29uc3QgaW50IFNMQVNIID0gMHgyZjsKICBzdGF0aWMgY29uc3QgaW50IENIQVJfMCA9IDB4MzA7CiAgc3RhdGljIGNvbnN0IGludCBDSEFSXzkgPSAweDM5OwogIHN0YXRpYyBjb25zdCBpbnQgQ09MT04gPSAweDNhOwogIHN0YXRpYyBjb25zdCBpbnQgQ0hBUl9FID0gMHg0NTsKICBzdGF0aWMgY29uc3QgaW50IExCUkFDS0VUID0gMHg1YjsKICBzdGF0aWMgY29uc3QgaW50IEJBQ0tTTEFTSCA9IDB4NWM7CiAgc3RhdGljIGNvbnN0IGludCBSQlJBQ0tFVCA9IDB4NWQ7CiAgc3RhdGljIGNvbnN0IGludCBDSEFSX2EgPSAweDYxOwogIHN0YXRpYyBjb25zdCBpbnQgQ0hBUl9iID0gMHg2MjsKICBzdGF0aWMgY29uc3QgaW50IENIQVJfZSA9IDB4NjU7CiAgc3RhdGljIGNvbnN0IGludCBDSEFSX2YgPSAweDY2OwogIHN0YXRpYyBjb25zdCBpbnQgQ0hBUl9sID0gMHg2YzsKICBzdGF0aWMgY29uc3QgaW50IENIQVJfbiA9IDB4NmU7CiAgc3RhdGljIGNvbnN0IGludCBDSEFSX3IgPSAweDcyOwogIHN0YXRpYyBjb25zdCBpbnQgQ0hBUl9zID0gMHg3MzsKICBzdGF0aWMgY29uc3QgaW50IENIQVJfdCA9IDB4NzQ7CiAgc3RhdGljIGNvbnN0IGludCBDSEFSX3UgPSAweDc1OwogIHN0YXRpYyBjb25zdCBpbnQgTEJSQUNFID0gMHg3YjsKICBzdGF0aWMgY29uc3QgaW50IFJCUkFDRSA9IDB4N2Q7CgogIC8vIFN0YXRlIG9mIHBhcnRpYWwgdmFsdWUgYXQgY2h1bmsgc3BsaXQuCiAgc3RhdGljIGNvbnN0IGludCBOT19QQVJUSUFMID0gMDsKICBzdGF0aWMgY29uc3QgaW50IFBBUlRJQUxfU1RSSU5HID0gMTsKICBzdGF0aWMgY29uc3QgaW50IFBBUlRJQUxfTlVNRVJBTCA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBQQVJUSUFMX0tFWVdPUkQgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgTUFTS19QQVJUSUFMID0gMzsKCiAgLy8gUGFydGlhbCBzdGF0ZXMgZm9yIG51bWVyYWxzLiBWYWx1ZXMgY2FuIGJlIHwnZWQgd2l0aCBQQVJUSUFMX05VTUVSQUwuCiAgc3RhdGljIGNvbnN0IGludCBOVU1fU0lHTiA9IDA7IC8vIEFmdGVyIGluaXRpYWwgJy0nLgogIHN0YXRpYyBjb25zdCBpbnQgTlVNX1pFUk8gPSA0OyAvLyBBZnRlciAnMCcgYXMgZmlyc3QgZGlnaXQuCiAgc3RhdGljIGNvbnN0IGludCBOVU1fRElHSVQgPSA4OyAvLyBBZnRlciBkaWdpdCwgbm8gJy4nIG9yICdlJyBzZWVuLgogIHN0YXRpYyBjb25zdCBpbnQgTlVNX0RPVCA9IDEyOyAvLyBBZnRlciAnLicuCiAgc3RhdGljIGNvbnN0IGludCBOVU1fRE9UX0RJR0lUID0gMTY7IC8vIEFmdGVyIGEgZGVjaW1hbCBkaWdpdCAoYWZ0ZXIgJy4nKS4KICBzdGF0aWMgY29uc3QgaW50IE5VTV9FID0gMjA7IC8vIEFmdGVyICdlJyBvciAnRScuCiAgc3RhdGljIGNvbnN0IGludCBOVU1fRV9TSUdOID0gMjQ7IC8vIEFmdGVyICctJyBvciAnKycgYWZ0ZXIgJ2UnIG9yICdFJy4KICBzdGF0aWMgY29uc3QgaW50IE5VTV9FX0RJR0lUID0gMjg7IC8vIEFmdGVyIGV4cG9uZW50IGRpZ2l0LgogIHN0YXRpYyBjb25zdCBpbnQgTlVNX1NVQ0NFU1MgPSAzMjsgLy8gTmV2ZXIgc3RvcmVkIGFzIHBhcnRpYWwgc3RhdGUuCgogIC8vIFBhcnRpYWwgc3RhdGVzIGZvciBzdHJpbmdzLgogIHN0YXRpYyBjb25zdCBpbnQgU1RSX1BMQUlOID0gMDsgLy8gSW5zaWRlIHN0cmluZywgYnV0IG5vdCBlc2NhcGUuCiAgc3RhdGljIGNvbnN0IGludCBTVFJfRVNDQVBFID0gNDsgLy8gQWZ0ZXIgJ1wnLgogIHN0YXRpYyBjb25zdCBpbnQgU1RSX1UgPSAxNjsgLy8gQWZ0ZXIgJ1x1JyBhbmQgMC0zIGhleCBkaWdpdHMuCiAgc3RhdGljIGNvbnN0IGludCBTVFJfVV9DT1VOVF9TSElGVCA9IDI7IC8vIEhleCBkaWdpdCBjb3VudCBpbiBiaXRzIDItMy4KICBzdGF0aWMgY29uc3QgaW50IFNUUl9VX1ZBTFVFX1NISUZUID0gNTsgLy8gSGV4IGRpZ2l0IHZhbHVlIGluIGJpdHMgNSsuCgogIC8vIFBhcnRpYWwgc3RhdGVzIGZvciBrZXl3b3Jkcy4KICBzdGF0aWMgY29uc3QgaW50IEtXRF9UWVBFX01BU0sgPSAxMjsKICBzdGF0aWMgY29uc3QgaW50IEtXRF9UWVBFX1NISUZUID0gMjsKICBzdGF0aWMgY29uc3QgaW50IEtXRF9OVUxMID0gMDsgLy8gUHJlZml4IG9mICJudWxsIiBzZWVuLgogIHN0YXRpYyBjb25zdCBpbnQgS1dEX1RSVUUgPSA0OyAvLyBQcmVmaXggb2YgInRydWUiIHNlZW4uCiAgc3RhdGljIGNvbnN0IGludCBLV0RfRkFMU0UgPSA4OyAvLyBQcmVmaXggb2YgImZhbHNlIiBzZWVuLgogIHN0YXRpYyBjb25zdCBpbnQgS1dEX0JPTSA9IDEyOyAvLyBQcmVmaXggb2YgQk9NIHNlZW4uCiAgc3RhdGljIGNvbnN0IGludCBLV0RfQ09VTlRfU0hJRlQgPSA0OyAvLyBQcmVmaXggbGVuZ3RoIGluIGJpdHMgNCsuCgogIC8vIE1hc2sgdXNlZCB0byBtYXNrIG9mZiB0d28gbG93ZXIgYml0cy4KICBzdGF0aWMgY29uc3QgaW50IFRXT19CSVRfTUFTSyA9IDM7CgogIGZpbmFsIF9Kc29uTGlzdGVuZXIgbGlzdGVuZXI7CgogIC8vIFRoZSBjdXJyZW50IHBhcnNpbmcgc3RhdGUuCiAgaW50IHN0YXRlID0gU1RBVEVfSU5JVElBTDsKICBMaXN0PGludD4gc3RhdGVzID0gPGludD5bXTsKCiAgLyoqCiAgICogU3RvcmVzIHRva2VuaXplciBzdGF0ZSBiZXR3ZWVuIGNodW5rcy4KICAgKgogICAqIFRoaXMgc3RhdGUgaXMgc3RvcmVkIHdoZW4gYSBjaHVuayBzdG9wcyBpbiB0aGUgbWlkZGxlIG9mIGEKICAgKiB0b2tlbiAoc3RyaW5nLCBudW1lcmFsLCBib29sZWFuIG9yIG51bGwpLgogICAqCiAgICogVGhlIHBhcnRpYWwgc3RhdGUgaXMgdXNlZCB0byBjb250aW51ZSBwYXJzaW5nIG9uIHRoZSBuZXh0IGNodW5rLgogICAqIFRoZSBwcmV2aW91cyBjaHVuayBpcyBub3QgcmV0YWluZWQsIGFueSBkYXRhIG5lZWRlZCBhcmUgc3RvcmVkIGluCiAgICogdGhpcyBpbnRlZ2VyLCBvciBpbiB0aGUgW2J1ZmZlcl0gZmllbGQgYXMgYSBzdHJpbmctYnVpbGRpbmcgYnVmZmVyCiAgICogb3IgYSBbX051bWJlckJ1ZmZlcl0uCiAgICoKICAgKiBQcmVmaXggc3RhdGUgc3RvcmVkIGluIFtwcmVmaXhTdGF0ZV0gYXMgYml0cy4KICAgKgogICAqICAgICAgICAgICAgLi4wMCA6IE5vIHBhcnRpYWwgdmFsdWUgKE5PX1BBUlRJQUwpLgogICAqCiAgICogICAgICAgICAuLjAwMDAxIDogUGFydGlhbCBzdHJpbmcsIG5vdCBpbnNpZGUgZXNjYXBlLgogICAqICAgICAgICAgLi4wMDEwMSA6IFBhcnRpYWwgc3RyaW5nLCBhZnRlciAnXCcuCiAgICogICAgIC4udnZ2djFkZDAxIDogUGFydGlhbCBcdSBlc2NhcGUuCiAgICogICAgICAgICAgICAgICAgICAgVGhlICdkZCcgYml0cyAoMi0zKSBlbmNvZGUgdGhlIG51bWJlciBvZiBoZXggZGlnaXRzIHNlZW4uCiAgICogICAgICAgICAgICAgICAgICAgQml0cyA1LTE2IGVuY29kZSB0aGUgdmFsdWUgb2YgdGhlIGhleCBkaWdpdHMgc2VlbiBzbyBmYXIuCiAgICoKICAgKiAgICAgICAgLi4wZGRkMTAgOiBQYXJ0aWFsIG51bWVyYWwuCiAgICogICAgICAgICAgICAgICAgICAgVGhlIGBkZGRgIGJpdHMgc3RvcmUgdGhlIHBhcnRzIG9mIGluIHRoZSBudW1lcmFsIHNlZW4gc28KICAgKiAgICAgICAgICAgICAgICAgICBmYXIsIGFzIHRoZSBjb25zdGFudHMgYE5VTV8qYCBkZWZpbmVkIGFib3ZlLgogICAqICAgICAgICAgICAgICAgICAgIFRoZSBjaGFyYWN0ZXJzIG9mIHRoZSBudW1lcmFsIGFyZSBzdG9yZWQgaW4gW2J1ZmZlcl0KICAgKiAgICAgICAgICAgICAgICAgICBhcyBhIFtfTnVtYmVyQnVmZmVyXS4KICAgKgogICAqICAgICAgLi4wZGRkMDAxMSA6IFBhcnRpYWwgJ251bGwnIGtleXdvcmQuCiAgICogICAgICAuLjBkZGQwMTExIDogUGFydGlhbCAndHJ1ZScga2V5d29yZC4KICAgKiAgICAgIC4uMGRkZDEwMTEgOiBQYXJ0aWFsICdmYWxzZScga2V5d29yZC4KICAgKiAgICAgIC4uMGRkZDExMTEgOiBQYXJ0aWFsIFVURi04IEJPTSBieXRlIHNlcWV1ZW5jZSAoIlx4RUZceEJCXHhCRiIpLgogICAqICAgICAgICAgICAgICAgICAgIEZvciBhbGwga2V5d29yZHMsIHRoZSBgZGRkYCBiaXRzIGVuY29kZSB0aGUgbnVtYmVyCiAgICogICAgICAgICAgICAgICAgICAgb2YgbGV0dGVycyBzZWVuLgogICAqICAgICAgICAgICAgICAgICAgIFRoZSBCT00gYnl0ZSBzZXF1ZW5jZSBpcyBvbmx5IHVzZWQgYnkgW19Kc29uVXRmOFBhcnNlcl0sCiAgICogICAgICAgICAgICAgICAgICAgYW5kIG9ubHkgYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIGlucHV0LgogICAqLwogIGludCBwYXJ0aWFsU3RhdGUgPSBOT19QQVJUSUFMOwoKICAvKioKICAgKiBFeHRyYSBkYXRhIHN0b3JlZCB3aGlsZSBwYXJzaW5nIGEgcHJpbWl0aXZlIHZhbHVlLgogICAqIE1heSBiZSBzZXQgZHVyaW5nIHBhcnNpbmcsIGFsd2F5cyBzZXQgYXQgY2h1bmsgZW5kIGlmIGEgdmFsdWUgaXMgcGFydGlhbC4KICAgKgogICAqIE1heSBjb250YWluIGEgc3RyaW5nIGJ1ZmZlciB3aGlsZSBwYXJzaW5nIHN0cmluZ3MuCiAgICovCiAgdmFyIGJ1ZmZlciA9IG51bGw7CgogIF9DaHVua2VkSnNvblBhcnNlcih0aGlzLmxpc3RlbmVyKTsKCiAgLyoqCiAgICogUHVzaCB0aGUgY3VycmVudCBwYXJzZSBbc3RhdGVdIG9uIGEgc3RhY2suCiAgICoKICAgKiBTdGF0ZSBpcyBwdXNoZWQgd2hlbiBhIG5ldyBhcnJheSBvciBvYmplY3QgbGl0ZXJhbCBzdGFydHMsCiAgICogc28gdGhlIHBhcnNlciBjYW4gZ28gYmFjayB0byB0aGUgY29ycmVjdCB2YWx1ZSB3aGVuIHRoZSBsaXRlcmFsIGVuZHMuCiAgICovCiAgdm9pZCBzYXZlU3RhdGUoaW50IHN0YXRlKSB7CiAgICBzdGF0ZXMuYWRkKHN0YXRlKTsKICB9CgogIC8qKgogICAqIFJlc3RvcmUgYSBzdGF0ZSBwdXNoZWQgd2l0aCBbc2F2ZVN0YXRlXS4KICAgKi8KICBpbnQgcmVzdG9yZVN0YXRlKCkgewogICAgcmV0dXJuIHN0YXRlcy5yZW1vdmVMYXN0KCk7IC8vIFRocm93cyBpZiBlbXB0eS4KICB9CgogIC8qKgogICAqIEZpbmFsaXplcyB0aGUgcGFyc2luZy4KICAgKgogICAqIFRocm93cyBpZiB0aGUgc291cmNlIHJlYWQgc28gZmFyIGRvZXNuJ3QgZW5kIHVwIHdpdGggYSBjb21wbGV0ZQogICAqIHBhcnNlZCB2YWx1ZS4gVGhhdCBtZWFucyBpdCBtdXN0IG5vdCBiZSBpbnNpZGUgYSBsaXN0IG9yIG9iamVjdAogICAqIGxpdGVyYWwsIGFuZCBhbnkgcGFydGlhbCB2YWx1ZSByZWFkIHNob3VsZCBhbHNvIGJlIGEgdmFsaWQgY29tcGxldGUKICAgKiB2YWx1ZS4KICAgKgogICAqIFRoZSBvbmx5IHZhbGlkIHBhcnRpYWwgc3RhdGUgaXMgYSBudW1iZXIgdGhhdCBlbmRzIGluIGEgZGlnaXQsIGFuZAogICAqIG9ubHkgaWYgdGhlIG51bWJlciBpcyB0aGUgZW50aXJlIEpTT04gdmFsdWUgYmVpbmcgcGFyc2VkCiAgICogKG90aGVyd2lzZSBpdCB3b3VsZCBiZSBpbnNpZGUgYSBsaXN0IG9yIG9iamVjdCkuCiAgICogU3VjaCBhIG51bWJlciB3aWxsIGJlIGNvbXBsZXRlZC4gQW55IG90aGVyIHBhcnRpYWwgc3RhdGUgaXMgYW4gZXJyb3IuCiAgICovCiAgdm9pZCBjbG9zZSgpIHsKICAgIGlmIChwYXJ0aWFsU3RhdGUgIT0gTk9fUEFSVElBTCkgewogICAgICBpbnQgcGFydGlhbFR5cGUgPSBwYXJ0aWFsU3RhdGUgJiBNQVNLX1BBUlRJQUw7CiAgICAgIGlmIChwYXJ0aWFsVHlwZSA9PSBQQVJUSUFMX05VTUVSQUwpIHsKICAgICAgICBpbnQgbnVtU3RhdGUgPSBwYXJ0aWFsU3RhdGUgJiB+TUFTS19QQVJUSUFMOwogICAgICAgIC8vIEEgcGFydGlhbCBudW1iZXIgbWlnaHQgYmUgYSB2YWxpZCBudW1iZXIgaWYgd2Uga25vdyBpdCdzIGRvbmUuCiAgICAgICAgLy8gVGhlcmUgaXMgYW4gdW5uZWNlc3Nhcnkgb3ZlcmhlYWQgaWYgaW5wdXQgaXMgYSBzaW5nbGUgbnVtYmVyLAogICAgICAgIC8vIGJ1dCB0aGlzIGlzIGFzc3VtZWQgdG8gYmUgcmFyZS4KICAgICAgICBfTnVtYmVyQnVmZmVyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyOwogICAgICAgIHRoaXMuYnVmZmVyID0gbnVsbDsKICAgICAgICBmaW5pc2hDaHVua051bWJlcihudW1TdGF0ZSwgMCwgMCwgYnVmZmVyKTsKICAgICAgfSBlbHNlIGlmIChwYXJ0aWFsVHlwZSA9PSBQQVJUSUFMX1NUUklORykgewogICAgICAgIGZhaWwoY2h1bmtFbmQsICJVbnRlcm1pbmF0ZWQgc3RyaW5nIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KHBhcnRpYWxUeXBlID09IFBBUlRJQUxfS0VZV09SRCk7CiAgICAgICAgZmFpbChjaHVua0VuZCk7IC8vIEluY29tcGxldGUgbGl0ZXJhbC4KICAgICAgfQogICAgfQogICAgaWYgKHN0YXRlICE9IFNUQVRFX0VORCkgewogICAgICBmYWlsKGNodW5rRW5kKTsKICAgIH0KICB9CgogIC8qKgogICAqIFJlYWQgb3V0IHRoZSByZXN1bHQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IGNsb3NpbmcgdGhlIHBhcnNlci4KICAgKgogICAqIFRoZSBwYXJzZXIgaXMgY2xvc2VkIGJ5IGNhbGxpbmcgW2Nsb3NlXSBvciBjYWxsaW5nIFthZGRTb3VyY2VDaHVua10gd2l0aAogICAqIGB0cnVlYCBhcyBzZWNvbmQgKGBpc0xhc3RgKSBhcmd1bWVudC4KICAgKi8KICBPYmplY3QgZ2V0IHJlc3VsdCB7CiAgICByZXR1cm4gbGlzdGVuZXIucmVzdWx0OwogIH0KCiAgLyoqIFNldHMgdGhlIGN1cnJlbnQgc291cmNlIGNodW5rLiAqLwogIHZvaWQgc2V0IGNodW5rKFQgc291cmNlKTsKCiAgLyoqCiAgICogTGVuZ3RoIG9mIGN1cnJlbnQgY2h1bmsuCiAgICoKICAgKiBUaGUgdmFsaWQgYXJndW1lbnRzIHRvIFtnZXRDaGFyXSBhcmUgMCAuLiBgY2h1bmtFbmQgLSAxYC4KICAgKi8KICBpbnQgZ2V0IGNodW5rRW5kOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjaHVuayBpdHNlbGYuCiAgICoKICAgKiBPbmx5IHVzZWQgYnkgW2ZhaWxdIHRvIGluY2x1ZGUgdGhlIGNodW5rIGluIHRoZSB0aHJvd24gW0Zvcm1hdEV4Y2VwdGlvbl0uCiAgICovCiAgVCBnZXQgY2h1bms7CgogIC8qKgogICAqIEdldCBjaGFyY2FjdGVyL2NvZGUgdW5pdCBvZiBjdXJyZW50IGNodW5rLgogICAqCiAgICogVGhlIFtpbmRleF0gbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIGxlc3MgdGhhbiBgY2h1bmtFbmRgLgogICAqIEluIHByYWN0aXZlLCBbaW5kZXhdIHdpbGwgYmUgbm8gc21hbGxlciB0aGFuIHRoZSBgc3RhcnRgIGFyZ3VtZW50IHBhc3NlZAogICAqIHRvIFtwYXJzZV0uCiAgICovCiAgaW50IGdldENoYXIoaW50IGluZGV4KTsKCiAgLyoqCiAgICogQ29weSBBU0NJSSBjaGFyYWN0ZXJzIGZyb20gc3RhcnQgdG8gZW5kIG9mIGNodW5rIGludG8gYSBsaXN0LgogICAqCiAgICogVXNlZCBmb3IgbnVtYmVyIGJ1ZmZlciAoYWx3YXlzIGNvcGllcyBBU0NJSSwgc28gZW5jb2RpbmcgaXMgbm90IGltcG9ydGFudCkuCiAgICovCiAgdm9pZCBjb3B5Q2hhcnNUb0xpc3QoaW50IHN0YXJ0LCBpbnQgZW5kLCBMaXN0PGludD4gdGFyZ2V0LCBpbnQgb2Zmc2V0KTsKCiAgLyoqCiAgICogQnVpbGQgYSBzdHJpbmcgdXNpbmcgaW5wdXQgY29kZSB1bml0cy4KICAgKgogICAqIENyZWF0ZXMgYSBzdHJpbmcgYnVmZmVyIGFuZCBlbmFibGVzIGFkZGluZyBjaGFyYWN0ZXJzIGFuZCBzbGljZXMKICAgKiB0byB0aGF0IGJ1ZmZlci4KICAgKiBUaGUgYnVmZmVyIGlzIHN0b3JlZCBpbiB0aGUgW2J1ZmZlcl0gZmllbGQuIElmIHRoZSBzdHJpbmcgaXMgdW50ZXJtaW5hdGVkLAogICAqIHRoZSBzYW1lIGJ1ZmZlciBpcyB1c2VkIHRvIGNvbnRpbnVlIHBhcnNpbmcgaW4gdGhlIG5leHQgY2h1bmsuCiAgICovCiAgdm9pZCBiZWdpblN0cmluZygpOwogIC8qKgogICAqIEFkZCBzaW5nbGUgY2hhcmFjdGVyIGNvZGUgdG8gc3RyaW5nIGJlaW5nIGJ1aWx0LgogICAqCiAgICogVXNlZCBmb3IgdW5wYXJzZWQgZXNjYXBlIHNlcXVlbmNlcy4KICAgKi8KICB2b2lkIGFkZENoYXJUb1N0cmluZyhpbnQgY2hhckNvZGUpOwoKICAvKioKICAgKiBBZGRzIHNsaWNlIG9mIGN1cnJlbnQgY2h1bmsgdG8gc3RyaW5nIGJlaW5nIGJ1aWx0LgogICAqCiAgICogVGhlIFtzdGFydF0gcG9zaXRpb25zIGlzIGluY2x1c2l2ZSwgW2VuZF0gaXMgZXhjbHVzaXZlLgogICAqLwogIHZvaWQgYWRkU2xpY2VUb1N0cmluZyhpbnQgc3RhcnQsIGludCBlbmQpOwoKICAvKiogRmluYWxpemVzIHRoZSBzdHJpbmcgYmVpbmcgYnVpbHQgYW5kIHJldHVybnMgaXQgYXMgYSBTdHJpbmcuICovCiAgU3RyaW5nIGVuZFN0cmluZygpOwoKICAvKioKICAgKiBFeHRyYWN0cyBhIGxpdGVyYWwgc3RyaW5nIGZyb20gYSBzbGljZSBvZiB0aGUgY3VycmVudCBjaHVuay4KICAgKgogICAqIE5vIGludGVycHJldGF0aW9uIG9mIHRoZSBjb250ZW50IGlzIHBlcmZvcm1lZCwgZXhjZXB0IGZvciBjb252ZXJ0aW5nCiAgICogdGhlIHNvdXJjZSBmb3JtYXQgdG8gc3RyaW5nLgogICAqIFRoaXMgY2FuIGJlIGltcGxlbWVudGVkIG1vcmUgb3IgbGVzcyBlZmZpY2llbnRseSBkZXBlbmRpbmcgb24gdGhlCiAgICogdW5kZXJseWluZyBzb3VyY2UuCiAgICoKICAgKiBUaGlzIGlzIHVzZWQgZm9yIHN0cmluZyBsaXRlcmFscyB0aGF0IGNvbnRhaW4gbm8gZXNjYXBlcy4KICAgKgogICAqIFRoZSBbYml0c10gaW50ZWdlciBpcyBhbiB1cHBlciBib3VuZCBvbiB0aGUgY29kZSBwb2ludCBpbiB0aGUgcmFuZ2UKICAgKiBmcm9tIGBzdGFydGAgdG8gYGVuZGAuCiAgICogVXN1YWxseSBmb3VuZCBieSBkb2luZyBiaXR3aXNlIG9yIG9mIGFsbCB0aGUgdmFsdWVzLgogICAqIFRoZSBmdW5jdGlvbiBtYXkgY2hvb3NlIHRvIG9wdGltaXplIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUuCiAgICovCiAgU3RyaW5nIGdldFN0cmluZyhpbnQgc3RhcnQsIGludCBlbmQsIGludCBiaXRzKTsKCiAgLyoqCiAgICogUGFyc2UgYSBzbGljZSBvZiB0aGUgY3VycmVudCBjaHVuayBhcyBhIG51bWJlci4KICAgKgogICAqIFNpbmNlIGludGVnZXJzIGhhdmUgYSBtYXhpbWFsIHZhbHVlLCBhbmQgd2UgZG9uJ3QgdHJhY2sgdGhlIHZhbHVlCiAgICogaW4gdGhlIGJ1ZmZlciwgYSBzZXF1ZW5jZSBvZiBkaWdpdHMgY2FuIGJlIGVpdGhlciBhbiBpbnQgb3IgYSBkb3VibGUuCiAgICogVGhlIGBudW0ucGFyc2VgIGZ1bmN0aW9uIGRvZXMgdGhlIHJpZ2h0IHRoaW5nLgogICAqCiAgICogVGhlIGZvcm1hdCBpcyBleHBlY3RlZCB0byBiZSBjb3JyZWN0LgogICAqLwogIG51bSBwYXJzZU51bShpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIGNvbnN0IGludCBhc2NpaUJpdHMgPSAweDdmOyAvLyBOdW1iZXIgbGl0ZXJhbHMgYXJlIEFTQ0lJIG9ubHkuCiAgICByZXR1cm4gbnVtLnBhcnNlKGdldFN0cmluZyhzdGFydCwgZW5kLCBhc2NpaUJpdHMpKTsKICB9CgogIC8qKgogICAqIFBhcnNlIGEgc2xpY2Ugb2YgdGhlIGN1cnJlbnQgY2h1bmsgYXMgYSBkb3VibGUuCiAgICoKICAgKiBUaGUgZm9ybWF0IGlzIGV4cGVjdGVkIHRvIGJlIGNvcnJlY3QuCiAgICogVGhpcyBpcyB1c2VkIGJ5IFtwYXJzZU51bWJlcl0gd2hlbiB0aGUgZG91YmxlIHZhbHVlIGNhbm5vdCBiZQogICAqIGJ1aWx0IGV4YWN0bHkgZHVyaW5nIHBhcnNpbmcuCiAgICovCiAgZG91YmxlIHBhcnNlRG91YmxlKGludCBzdGFydCwgaW50IGVuZCkgewogICAgY29uc3QgaW50IGFzY2lpQml0cyA9IDB4N2Y7IC8vIERvdWJsZSBsaXRlcmFscyBhcmUgQVNDSUkgb25seS4KICAgIHJldHVybiBkb3VibGUucGFyc2UoZ2V0U3RyaW5nKHN0YXJ0LCBlbmQsIGFzY2lpQml0cykpOwogIH0KCiAgLyoqCiAgICogQ29udGludWVzIHBhcnNpbmcgYSBwYXJ0aWFsIHZhbHVlLgogICAqLwogIGludCBwYXJzZVBhcnRpYWwoaW50IHBvc2l0aW9uKSB7CiAgICBpZiAocG9zaXRpb24gPT0gY2h1bmtFbmQpIHJldHVybiBwb3NpdGlvbjsKICAgIGludCBwYXJ0aWFsU3RhdGUgPSB0aGlzLnBhcnRpYWxTdGF0ZTsKICAgIGFzc2VydChwYXJ0aWFsU3RhdGUgIT0gTk9fUEFSVElBTCk7CiAgICBpbnQgcGFydGlhbFR5cGUgPSBwYXJ0aWFsU3RhdGUgJiBNQVNLX1BBUlRJQUw7CiAgICB0aGlzLnBhcnRpYWxTdGF0ZSA9IE5PX1BBUlRJQUw7CiAgICBwYXJ0aWFsU3RhdGUgPSBwYXJ0aWFsU3RhdGUgJiB+TUFTS19QQVJUSUFMOwogICAgYXNzZXJ0KHBhcnRpYWxUeXBlICE9IDApOwogICAgaWYgKHBhcnRpYWxUeXBlID09IFBBUlRJQUxfU1RSSU5HKSB7CiAgICAgIHBvc2l0aW9uID0gcGFyc2VQYXJ0aWFsU3RyaW5nKHBvc2l0aW9uLCBwYXJ0aWFsU3RhdGUpOwogICAgfSBlbHNlIGlmIChwYXJ0aWFsVHlwZSA9PSBQQVJUSUFMX05VTUVSQUwpIHsKICAgICAgcG9zaXRpb24gPSBwYXJzZVBhcnRpYWxOdW1iZXIocG9zaXRpb24sIHBhcnRpYWxTdGF0ZSk7CiAgICB9IGVsc2UgaWYgKHBhcnRpYWxUeXBlID09IFBBUlRJQUxfS0VZV09SRCkgewogICAgICBwb3NpdGlvbiA9IHBhcnNlUGFydGlhbEtleXdvcmQocG9zaXRpb24sIHBhcnRpYWxTdGF0ZSk7CiAgICB9CiAgICByZXR1cm4gcG9zaXRpb247CiAgfQoKICAvKioKICAgKiBQYXJzZXMgdGhlIHJlbWFpbmRlciBvZiBhIG51bWJlciBpbnRvIHRoZSBudW1iZXIgYnVmZmVyLgogICAqCiAgICogU3ludGF4IGlzIGNoZWNrZWQgd2hpbGUgcGFzaW5nLgogICAqIFN0YXJ0cyBhdCBwb3NpdGlvbiwgd2hpY2ggaXMgZXhwZWN0ZWQgdG8gYmUgdGhlIHN0YXJ0IG9mIHRoZSBjaHVuaywKICAgKiBhbmQgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG5vbi1udW1iZXItbGl0ZXJhbCBjaGFyYWN0ZXIgZm91bmQsCiAgICogb3IgY2h1bmtFbmQgaWYgdGhlIGVudGlyZSBjaHVuayBpcyBhIHZhbGlkIG51bWJlciBjb250aW51YXRpb24uCiAgICogVGhyb3dzIGlmIGEgc3ludGF4IGVycm9yIGlzIGRldGVjdGVkLgogICAqLwogIGludCBwYXJzZVBhcnRpYWxOdW1iZXIoaW50IHBvc2l0aW9uLCBpbnQgc3RhdGUpIHsKICAgIGludCBzdGFydCA9IHBvc2l0aW9uOwogICAgLy8gUHJpbWl0aXZlIGltcGxlbWVudGF0aW9uLCBjYW4gYmUgb3B0aW1pemVkLgogICAgX051bWJlckJ1ZmZlciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjsKICAgIHRoaXMuYnVmZmVyID0gbnVsbDsKICAgIGludCBlbmQgPSBjaHVua0VuZDsKICAgIHRvQmFpbG91dDoKICAgIHsKICAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkgYnJlYWsgdG9CYWlsb3V0OwogICAgICBpbnQgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICBpbnQgZGlnaXQgPSBjaGFyIF4gQ0hBUl8wOwogICAgICBpZiAoc3RhdGUgPT0gTlVNX1NJR04pIHsKICAgICAgICBpZiAoZGlnaXQgPD0gOSkgewogICAgICAgICAgaWYgKGRpZ2l0ID09IDApIHsKICAgICAgICAgICAgc3RhdGUgPSBOVU1fWkVSTzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YXRlID0gTlVNX0RJR0lUOwogICAgICAgICAgfQogICAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpIGJyZWFrIHRvQmFpbG91dDsKICAgICAgICAgIGNoYXIgPSBnZXRDaGFyKHBvc2l0aW9uKTsKICAgICAgICAgIGRpZ2l0ID0gY2hhciBeIENIQVJfMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoc3RhdGUgPT0gTlVNX1pFUk8pIHsKICAgICAgICAvLyBKU09OIGRvZXMgbm90IGFsbG93IGluc2lnbmlmaWNhbnQgbGVhZGluZyB6ZXJvcyAoZS5nLiwgIjA5IikuCiAgICAgICAgaWYgKGRpZ2l0IDw9IDkpIHJldHVybiBmYWlsKHBvc2l0aW9uKTsKICAgICAgICBzdGF0ZSA9IE5VTV9ESUdJVDsKICAgICAgfQogICAgICB3aGlsZSAoc3RhdGUgPT0gTlVNX0RJR0lUKSB7CiAgICAgICAgaWYgKGRpZ2l0ID4gOSkgewogICAgICAgICAgaWYgKGNoYXIgPT0gREVDSU1BTFBPSU5UKSB7CiAgICAgICAgICAgIHN0YXRlID0gTlVNX0RPVDsKICAgICAgICAgIH0gZWxzZSBpZiAoKGNoYXIgfCAweDIwKSA9PSBDSEFSX2UpIHsKICAgICAgICAgICAgc3RhdGUgPSBOVU1fRTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZpbmlzaENodW5rTnVtYmVyKHN0YXRlLCBzdGFydCwgcG9zaXRpb24sIGJ1ZmZlcik7CiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICBpZiAocG9zaXRpb24gPT0gZW5kKSBicmVhayB0b0JhaWxvdXQ7CiAgICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICAgIGRpZ2l0ID0gY2hhciBeIENIQVJfMDsKICAgICAgfQogICAgICBpZiAoc3RhdGUgPT0gTlVNX0RPVCkgewogICAgICAgIGlmIChkaWdpdCA+IDkpIHJldHVybiBmYWlsKHBvc2l0aW9uKTsKICAgICAgICBzdGF0ZSA9IE5VTV9ET1RfRElHSVQ7CiAgICAgIH0KICAgICAgd2hpbGUgKHN0YXRlID09IE5VTV9ET1RfRElHSVQpIHsKICAgICAgICBpZiAoZGlnaXQgPiA5KSB7CiAgICAgICAgICBpZiAoKGNoYXIgfCAweDIwKSA9PSBDSEFSX2UpIHsKICAgICAgICAgICAgc3RhdGUgPSBOVU1fRTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZpbmlzaENodW5rTnVtYmVyKHN0YXRlLCBzdGFydCwgcG9zaXRpb24sIGJ1ZmZlcik7CiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICBpZiAocG9zaXRpb24gPT0gZW5kKSBicmVhayB0b0JhaWxvdXQ7CiAgICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICAgIGRpZ2l0ID0gY2hhciBeIENIQVJfMDsKICAgICAgfQogICAgICBpZiAoc3RhdGUgPT0gTlVNX0UpIHsKICAgICAgICBpZiAoY2hhciA9PSBQTFVTIHx8IGNoYXIgPT0gTUlOVVMpIHsKICAgICAgICAgIHN0YXRlID0gTlVNX0VfU0lHTjsKICAgICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgICBpZiAocG9zaXRpb24gPT0gZW5kKSBicmVhayB0b0JhaWxvdXQ7CiAgICAgICAgICBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbik7CiAgICAgICAgICBkaWdpdCA9IGNoYXIgXiBDSEFSXzA7CiAgICAgICAgfQogICAgICB9CiAgICAgIGFzc2VydChzdGF0ZSA+PSBOVU1fRSk7CiAgICAgIHdoaWxlIChkaWdpdCA8PSA5KSB7CiAgICAgICAgc3RhdGUgPSBOVU1fRV9ESUdJVDsKICAgICAgICBwb3NpdGlvbisrOwogICAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpIGJyZWFrIHRvQmFpbG91dDsKICAgICAgICBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbik7CiAgICAgICAgZGlnaXQgPSBjaGFyIF4gQ0hBUl8wOwogICAgICB9CiAgICAgIGZpbmlzaENodW5rTnVtYmVyKHN0YXRlLCBzdGFydCwgcG9zaXRpb24sIGJ1ZmZlcik7CiAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgIH0KICAgIC8vIEJhaWxvdXQgY29kZSBpbiBjYXNlIHRoZSBjdXJyZW50IGNodW5rIGVuZHMgd2hpbGUgcGFyc2luZyB0aGUgbnVtZXJhbC4KICAgIGFzc2VydChwb3NpdGlvbiA9PSBlbmQpOwogICAgY29udGludWVDaHVua051bWJlcihzdGF0ZSwgc3RhcnQsIGJ1ZmZlcik7CiAgICByZXR1cm4gY2h1bmtFbmQ7CiAgfQoKICAvKioKICAgKiBDb250aW51ZXMgcGFyc2luZyBhIHBhcnRpYWwgc3RyaW5nIGxpdGVyYWwuCiAgICoKICAgKiBIYW5kbGVzIHBhcnRpYWwgZXNjYXBlcyBhbmQgdGhlbiBoYW5kcyB0aGUgcGFyc2luZyBvZmYgdG8KICAgKiBbcGFyc2VTdHJpbmdUb0J1ZmZlcl0uCiAgICovCiAgaW50IHBhcnNlUGFydGlhbFN0cmluZyhpbnQgcG9zaXRpb24sIGludCBwYXJ0aWFsU3RhdGUpIHsKICAgIGlmIChwYXJ0aWFsU3RhdGUgPT0gU1RSX1BMQUlOKSB7CiAgICAgIHJldHVybiBwYXJzZVN0cmluZ1RvQnVmZmVyKHBvc2l0aW9uKTsKICAgIH0KICAgIGlmIChwYXJ0aWFsU3RhdGUgPT0gU1RSX0VTQ0FQRSkgewogICAgICBwb3NpdGlvbiA9IHBhcnNlU3RyaW5nRXNjYXBlKHBvc2l0aW9uKTsKICAgICAgLy8gcGFyc2VTdHJpbmdFc2NhcGUgc2V0cyBwYXJ0aWFsU3RhdGUgaWYgaXQgc2VlcyB0aGUgZW5kLgogICAgICBpZiAocG9zaXRpb24gPT0gY2h1bmtFbmQpIHJldHVybiBwb3NpdGlvbjsKICAgICAgcmV0dXJuIHBhcnNlU3RyaW5nVG9CdWZmZXIocG9zaXRpb24pOwogICAgfQogICAgYXNzZXJ0KChwYXJ0aWFsU3RhdGUgJiBTVFJfVSkgIT0gMCk7CiAgICBpbnQgdmFsdWUgPSBwYXJ0aWFsU3RhdGUgPj4gU1RSX1VfVkFMVUVfU0hJRlQ7CiAgICBpbnQgY291bnQgPSAocGFydGlhbFN0YXRlID4+IFNUUl9VX0NPVU5UX1NISUZUKSAmIFRXT19CSVRfTUFTSzsKICAgIGZvciAoaW50IGkgPSBjb3VudDsgaSA8IDQ7IGkrKywgcG9zaXRpb24rKykgewogICAgICBpZiAocG9zaXRpb24gPT0gY2h1bmtFbmQpIHJldHVybiBjaHVua1N0cmluZ0VzY2FwZVUoaSwgdmFsdWUpOwogICAgICBpbnQgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICBpbnQgZGlnaXQgPSBwYXJzZUhleERpZ2l0KGNoYXIpOwogICAgICBpZiAoZGlnaXQgPCAwKSBmYWlsKHBvc2l0aW9uLCAiSW52YWxpZCBoZXggZGlnaXQiKTsKICAgICAgdmFsdWUgPSAxNiAqIHZhbHVlICsgZGlnaXQ7CiAgICB9CiAgICBhZGRDaGFyVG9TdHJpbmcodmFsdWUpOwogICAgcmV0dXJuIHBhcnNlU3RyaW5nVG9CdWZmZXIocG9zaXRpb24pOwogIH0KCiAgLyoqCiAgICogQ29udGludWVzIHBhcnNpbmcgYSBwYXJ0aWFsIGtleXdvcmQuCiAgICovCiAgaW50IHBhcnNlUGFydGlhbEtleXdvcmQoaW50IHBvc2l0aW9uLCBpbnQgcGFydGlhbFN0YXRlKSB7CiAgICBpbnQga2V5d29yZFR5cGUgPSBwYXJ0aWFsU3RhdGUgJiBLV0RfVFlQRV9NQVNLOwogICAgaW50IGNvdW50ID0gcGFydGlhbFN0YXRlID4+IEtXRF9DT1VOVF9TSElGVDsKICAgIGludCBrZXl3b3JkVHlwZUluZGV4ID0ga2V5d29yZFR5cGUgPj4gS1dEX1RZUEVfU0hJRlQ7CiAgICBTdHJpbmcga2V5d29yZCA9CiAgICAgICAgY29uc3QgWyJudWxsIiwgInRydWUiLCAiZmFsc2UiLCAiXHhFRlx4QkJceEJGIl1ba2V5d29yZFR5cGVJbmRleF07CiAgICBhc3NlcnQoY291bnQgPCBrZXl3b3JkLmxlbmd0aCk7CiAgICBkbyB7CiAgICAgIGlmIChwb3NpdGlvbiA9PSBjaHVua0VuZCkgewogICAgICAgIHRoaXMucGFydGlhbFN0YXRlID0KICAgICAgICAgICAgUEFSVElBTF9LRVlXT1JEIHwga2V5d29yZFR5cGUgfCAoY291bnQgPDwgS1dEX0NPVU5UX1NISUZUKTsKICAgICAgICByZXR1cm4gY2h1bmtFbmQ7CiAgICAgIH0KICAgICAgaW50IGV4cGVjdGVkQ2hhciA9IGtleXdvcmQuY29kZVVuaXRBdChjb3VudCk7CiAgICAgIGlmIChnZXRDaGFyKHBvc2l0aW9uKSAhPSBleHBlY3RlZENoYXIpIHsKICAgICAgICBpZiAoY291bnQgPT0gMCkgewogICAgICAgICAgYXNzZXJ0KGtleXdvcmRUeXBlID09IEtXRF9CT00pOwogICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFpbChwb3NpdGlvbik7CiAgICAgIH0KICAgICAgcG9zaXRpb24rKzsKICAgICAgY291bnQrKzsKICAgIH0gd2hpbGUgKGNvdW50IDwga2V5d29yZC5sZW5ndGgpOwogICAgaWYgKGtleXdvcmRUeXBlID09IEtXRF9OVUxMKSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU51bGwoKTsKICAgIH0gZWxzZSBpZiAoa2V5d29yZFR5cGUgIT0gS1dEX0JPTSkgewogICAgICBsaXN0ZW5lci5oYW5kbGVCb29sKGtleXdvcmRUeXBlID09IEtXRF9UUlVFKTsKICAgIH0KICAgIHJldHVybiBwb3NpdGlvbjsKICB9CgogIC8qKiBDb252ZXJ0IGhleC1kaWdpdCB0byBpdHMgdmFsdWUuIFJldHVybnMgLTEgaWYgY2hhciBpcyBub3QgYSBoZXggZGlnaXQuICovCiAgaW50IHBhcnNlSGV4RGlnaXQoaW50IGNoYXIpIHsKICAgIGludCBkaWdpdCA9IGNoYXIgXiAweDMwOwogICAgaWYgKGRpZ2l0IDw9IDkpIHJldHVybiBkaWdpdDsKICAgIGludCBsZXR0ZXIgPSAoY2hhciB8IDB4MjApIF4gMHg2MDsKICAgIC8vIHZhbHVlcyAxIC4uIDYgYXJlICdhJyB0aHJvdWdoICdmJwogICAgaWYgKGxldHRlciA8PSA2ICYmIGxldHRlciA+IDApIHJldHVybiBsZXR0ZXIgKyA5OwogICAgcmV0dXJuIC0xOwogIH0KCiAgLyoqCiAgICogUGFyc2VzIHRoZSBjdXJyZW50IGNodW5rIGFzIGEgY2h1bmsgb2YgSlNPTi4KICAgKgogICAqIFN0YXJ0cyBwYXJzaW5nIGF0IFtwb3NpdGlvbl0gYW5kIGNvbnRpbnVlcyB1bnRpbCBbY2h1bmtFbmRdLgogICAqIENvbnRpbnVlcyBwYXJzaW5nIHdoZXJlIHRoZSBwcmV2aW91cyBjaHVuayAoaWYgYW55KSBlbmRlZC4KICAgKi8KICB2b2lkIHBhcnNlKGludCBwb3NpdGlvbikgewogICAgaW50IGxlbmd0aCA9IGNodW5rRW5kOwogICAgaWYgKHBhcnRpYWxTdGF0ZSAhPSBOT19QQVJUSUFMKSB7CiAgICAgIHBvc2l0aW9uID0gcGFyc2VQYXJ0aWFsKHBvc2l0aW9uKTsKICAgICAgaWYgKHBvc2l0aW9uID09IGxlbmd0aCkgcmV0dXJuOwogICAgfQogICAgaW50IHN0YXRlID0gdGhpcy5zdGF0ZTsKICAgIHdoaWxlIChwb3NpdGlvbiA8IGxlbmd0aCkgewogICAgICBpbnQgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICBzd2l0Y2ggKGNoYXIpIHsKICAgICAgICBjYXNlIFNQQUNFOgogICAgICAgIGNhc2UgQ0FSUklBR0VfUkVUVVJOOgogICAgICAgIGNhc2UgTkVXTElORToKICAgICAgICBjYXNlIFRBQjoKICAgICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFFVT1RFOgogICAgICAgICAgaWYgKChzdGF0ZSAmIEFMTE9XX1NUUklOR19NQVNLKSAhPSAwKSByZXR1cm4gZmFpbChwb3NpdGlvbik7CiAgICAgICAgICBzdGF0ZSB8PSBWQUxVRV9SRUFEX0JJVFM7CiAgICAgICAgICBwb3NpdGlvbiA9IHBhcnNlU3RyaW5nKHBvc2l0aW9uICsgMSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIExCUkFDS0VUOgogICAgICAgICAgaWYgKChzdGF0ZSAmIEFMTE9XX1ZBTFVFX01BU0spICE9IDApIHJldHVybiBmYWlsKHBvc2l0aW9uKTsKICAgICAgICAgIGxpc3RlbmVyLmJlZ2luQXJyYXkoKTsKICAgICAgICAgIHNhdmVTdGF0ZShzdGF0ZSk7CiAgICAgICAgICBzdGF0ZSA9IFNUQVRFX0FSUkFZX0VNUFRZOwogICAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTEJSQUNFOgogICAgICAgICAgaWYgKChzdGF0ZSAmIEFMTE9XX1ZBTFVFX01BU0spICE9IDApIHJldHVybiBmYWlsKHBvc2l0aW9uKTsKICAgICAgICAgIGxpc3RlbmVyLmJlZ2luT2JqZWN0KCk7CiAgICAgICAgICBzYXZlU3RhdGUoc3RhdGUpOwogICAgICAgICAgc3RhdGUgPSBTVEFURV9PQkpFQ1RfRU1QVFk7CiAgICAgICAgICBwb3NpdGlvbisrOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBDSEFSX246CiAgICAgICAgICBpZiAoKHN0YXRlICYgQUxMT1dfVkFMVUVfTUFTSykgIT0gMCkgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgICAgICAgc3RhdGUgfD0gVkFMVUVfUkVBRF9CSVRTOwogICAgICAgICAgcG9zaXRpb24gPSBwYXJzZU51bGwocG9zaXRpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBDSEFSX2Y6CiAgICAgICAgICBpZiAoKHN0YXRlICYgQUxMT1dfVkFMVUVfTUFTSykgIT0gMCkgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgICAgICAgc3RhdGUgfD0gVkFMVUVfUkVBRF9CSVRTOwogICAgICAgICAgcG9zaXRpb24gPSBwYXJzZUZhbHNlKHBvc2l0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQ0hBUl90OgogICAgICAgICAgaWYgKChzdGF0ZSAmIEFMTE9XX1ZBTFVFX01BU0spICE9IDApIHJldHVybiBmYWlsKHBvc2l0aW9uKTsKICAgICAgICAgIHN0YXRlIHw9IFZBTFVFX1JFQURfQklUUzsKICAgICAgICAgIHBvc2l0aW9uID0gcGFyc2VUcnVlKHBvc2l0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQ09MT046CiAgICAgICAgICBpZiAoc3RhdGUgIT0gU1RBVEVfT0JKRUNUX0tFWSkgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgICAgICAgbGlzdGVuZXIucHJvcGVydHlOYW1lKCk7CiAgICAgICAgICBzdGF0ZSA9IFNUQVRFX09CSkVDVF9DT0xPTjsKICAgICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIENPTU1BOgogICAgICAgICAgaWYgKHN0YXRlID09IFNUQVRFX09CSkVDVF9WQUxVRSkgewogICAgICAgICAgICBsaXN0ZW5lci5wcm9wZXJ0eVZhbHVlKCk7CiAgICAgICAgICAgIHN0YXRlID0gU1RBVEVfT0JKRUNUX0NPTU1BOwogICAgICAgICAgICBwb3NpdGlvbisrOwogICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBTVEFURV9BUlJBWV9WQUxVRSkgewogICAgICAgICAgICBsaXN0ZW5lci5hcnJheUVsZW1lbnQoKTsKICAgICAgICAgICAgc3RhdGUgPSBTVEFURV9BUlJBWV9DT01NQTsKICAgICAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBmYWlsKHBvc2l0aW9uKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgUkJSQUNLRVQ6CiAgICAgICAgICBpZiAoc3RhdGUgPT0gU1RBVEVfQVJSQVlfRU1QVFkpIHsKICAgICAgICAgICAgbGlzdGVuZXIuZW5kQXJyYXkoKTsKICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gU1RBVEVfQVJSQVlfVkFMVUUpIHsKICAgICAgICAgICAgbGlzdGVuZXIuYXJyYXlFbGVtZW50KCk7CiAgICAgICAgICAgIGxpc3RlbmVyLmVuZEFycmF5KCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFpbChwb3NpdGlvbik7CiAgICAgICAgICB9CiAgICAgICAgICBzdGF0ZSA9IHJlc3RvcmVTdGF0ZSgpIHwgVkFMVUVfUkVBRF9CSVRTOwogICAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgUkJSQUNFOgogICAgICAgICAgaWYgKHN0YXRlID09IFNUQVRFX09CSkVDVF9FTVBUWSkgewogICAgICAgICAgICBsaXN0ZW5lci5lbmRPYmplY3QoKTsKICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gU1RBVEVfT0JKRUNUX1ZBTFVFKSB7CiAgICAgICAgICAgIGxpc3RlbmVyLnByb3BlcnR5VmFsdWUoKTsKICAgICAgICAgICAgbGlzdGVuZXIuZW5kT2JqZWN0KCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFpbChwb3NpdGlvbik7CiAgICAgICAgICB9CiAgICAgICAgICBzdGF0ZSA9IHJlc3RvcmVTdGF0ZSgpIHwgVkFMVUVfUkVBRF9CSVRTOwogICAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBpZiAoKHN0YXRlICYgQUxMT1dfVkFMVUVfTUFTSykgIT0gMCkgZmFpbChwb3NpdGlvbik7CiAgICAgICAgICBzdGF0ZSB8PSBWQUxVRV9SRUFEX0JJVFM7CiAgICAgICAgICBwb3NpdGlvbiA9IHBhcnNlTnVtYmVyKGNoYXIsIHBvc2l0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICB0aGlzLnN0YXRlID0gc3RhdGU7CiAgfQoKICAvKioKICAgKiBQYXJzZXMgYSAidHJ1ZSIgbGl0ZXJhbCBzdGFydGluZyBhdCBbcG9zaXRpb25dLgogICAqCiAgICogVGhlIGNoYXJhY3RlciBgc291cmNlW3Bvc2l0aW9uXWAgbXVzdCBiZSAidCIuCiAgICovCiAgaW50IHBhcnNlVHJ1ZShpbnQgcG9zaXRpb24pIHsKICAgIGFzc2VydChnZXRDaGFyKHBvc2l0aW9uKSA9PSBDSEFSX3QpOwogICAgaWYgKGNodW5rRW5kIDwgcG9zaXRpb24gKyA0KSB7CiAgICAgIHJldHVybiBwYXJzZUtleXdvcmRQcmVmaXgocG9zaXRpb24sICJ0cnVlIiwgS1dEX1RSVUUpOwogICAgfQogICAgaWYgKGdldENoYXIocG9zaXRpb24gKyAxKSAhPSBDSEFSX3IgfHwKICAgICAgICBnZXRDaGFyKHBvc2l0aW9uICsgMikgIT0gQ0hBUl91IHx8CiAgICAgICAgZ2V0Q2hhcihwb3NpdGlvbiArIDMpICE9IENIQVJfZSkgewogICAgICByZXR1cm4gZmFpbChwb3NpdGlvbik7CiAgICB9CiAgICBsaXN0ZW5lci5oYW5kbGVCb29sKHRydWUpOwogICAgcmV0dXJuIHBvc2l0aW9uICsgNDsKICB9CgogIC8qKgogICAqIFBhcnNlcyBhICJmYWxzZSIgbGl0ZXJhbCBzdGFydGluZyBhdCBbcG9zaXRpb25dLgogICAqCiAgICogVGhlIGNoYXJhY3RlciBgc291cmNlW3Bvc2l0aW9uXWAgbXVzdCBiZSAiZiIuCiAgICovCiAgaW50IHBhcnNlRmFsc2UoaW50IHBvc2l0aW9uKSB7CiAgICBhc3NlcnQoZ2V0Q2hhcihwb3NpdGlvbikgPT0gQ0hBUl9mKTsKICAgIGlmIChjaHVua0VuZCA8IHBvc2l0aW9uICsgNSkgewogICAgICByZXR1cm4gcGFyc2VLZXl3b3JkUHJlZml4KHBvc2l0aW9uLCAiZmFsc2UiLCBLV0RfRkFMU0UpOwogICAgfQogICAgaWYgKGdldENoYXIocG9zaXRpb24gKyAxKSAhPSBDSEFSX2EgfHwKICAgICAgICBnZXRDaGFyKHBvc2l0aW9uICsgMikgIT0gQ0hBUl9sIHx8CiAgICAgICAgZ2V0Q2hhcihwb3NpdGlvbiArIDMpICE9IENIQVJfcyB8fAogICAgICAgIGdldENoYXIocG9zaXRpb24gKyA0KSAhPSBDSEFSX2UpIHsKICAgICAgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgfQogICAgbGlzdGVuZXIuaGFuZGxlQm9vbChmYWxzZSk7CiAgICByZXR1cm4gcG9zaXRpb24gKyA1OwogIH0KCiAgLyoqCiAgICogUGFyc2VzIGEgIm51bGwiIGxpdGVyYWwgc3RhcnRpbmcgYXQgW3Bvc2l0aW9uXS4KICAgKgogICAqIFRoZSBjaGFyYWN0ZXIgYHNvdXJjZVtwb3NpdGlvbl1gIG11c3QgYmUgIm4iLgogICAqLwogIGludCBwYXJzZU51bGwoaW50IHBvc2l0aW9uKSB7CiAgICBhc3NlcnQoZ2V0Q2hhcihwb3NpdGlvbikgPT0gQ0hBUl9uKTsKICAgIGlmIChjaHVua0VuZCA8IHBvc2l0aW9uICsgNCkgewogICAgICByZXR1cm4gcGFyc2VLZXl3b3JkUHJlZml4KHBvc2l0aW9uLCAibnVsbCIsIEtXRF9OVUxMKTsKICAgIH0KICAgIGlmIChnZXRDaGFyKHBvc2l0aW9uICsgMSkgIT0gQ0hBUl91IHx8CiAgICAgICAgZ2V0Q2hhcihwb3NpdGlvbiArIDIpICE9IENIQVJfbCB8fAogICAgICAgIGdldENoYXIocG9zaXRpb24gKyAzKSAhPSBDSEFSX2wpIHsKICAgICAgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgfQogICAgbGlzdGVuZXIuaGFuZGxlTnVsbCgpOwogICAgcmV0dXJuIHBvc2l0aW9uICsgNDsKICB9CgogIGludCBwYXJzZUtleXdvcmRQcmVmaXgoaW50IHBvc2l0aW9uLCBTdHJpbmcgY2hhcnMsIGludCB0eXBlKSB7CiAgICBhc3NlcnQoZ2V0Q2hhcihwb3NpdGlvbikgPT0gY2hhcnMuY29kZVVuaXRBdCgwKSk7CiAgICBpbnQgbGVuZ3RoID0gY2h1bmtFbmQ7CiAgICBpbnQgc3RhcnQgPSBwb3NpdGlvbjsKICAgIGludCBjb3VudCA9IDE7CiAgICB3aGlsZSAoKytwb3NpdGlvbiA8IGxlbmd0aCkgewogICAgICBpbnQgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICBpZiAoY2hhciAhPSBjaGFycy5jb2RlVW5pdEF0KGNvdW50KSkgcmV0dXJuIGZhaWwoc3RhcnQpOwogICAgICBjb3VudCsrOwogICAgfQogICAgdGhpcy5wYXJ0aWFsU3RhdGUgPSBQQVJUSUFMX0tFWVdPUkQgfCB0eXBlIHwgKGNvdW50IDw8IEtXRF9DT1VOVF9TSElGVCk7CiAgICByZXR1cm4gbGVuZ3RoOwogIH0KCiAgLyoqCiAgICogUGFyc2VzIGEgc3RyaW5nIHZhbHVlLgogICAqCiAgICogSW5pdGlhbCBbcG9zaXRpb25dIGlzIHJpZ2h0IGFmdGVyIHRoZSBpbml0aWFsIHF1b3RlLgogICAqIFJldHVybmVkIHBvc2l0aW9uIHJpZ2h0IGFmdGVyIHRoZSBmaW5hbCBxdW90ZS4KICAgKi8KICBpbnQgcGFyc2VTdHJpbmcoaW50IHBvc2l0aW9uKSB7CiAgICAvLyBGb3JtYXQ6ICciJyhbXlx4MDAtXHgxZlxcXCJdfCdcXCdbYmZucnQvXFwiXSkqJyInCiAgICAvLyBJbml0aWFsIHBvc2l0aW9uIGlzIHJpZ2h0IGFmdGVyIGZpcnN0ICciJy4KICAgIGludCBzdGFydCA9IHBvc2l0aW9uOwogICAgaW50IGVuZCA9IGNodW5rRW5kOwogICAgaW50IGJpdHMgPSAwOwogICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7CiAgICAgIGludCBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbisrKTsKICAgICAgYml0cyB8PSBjaGFyOyAvLyBJbmNsdWRlcyBmaW5hbCAnIicsIGJ1dCB0aGF0IG5ldmVyIG1hdHRlcnMuCiAgICAgIC8vIEJBQ0tTTEFTSCBpcyBsYXJnZXIgdGhhbiBRVU9URSBhbmQgU1BBQ0UuCiAgICAgIGlmIChjaGFyID4gQkFDS1NMQVNIKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGNoYXIgPT0gQkFDS1NMQVNIKSB7CiAgICAgICAgYmVnaW5TdHJpbmcoKTsKICAgICAgICBpbnQgc2xpY2VFbmQgPSBwb3NpdGlvbiAtIDE7CiAgICAgICAgaWYgKHN0YXJ0IDwgc2xpY2VFbmQpIGFkZFNsaWNlVG9TdHJpbmcoc3RhcnQsIHNsaWNlRW5kKTsKICAgICAgICByZXR1cm4gcGFyc2VTdHJpbmdUb0J1ZmZlcihzbGljZUVuZCk7CiAgICAgIH0KICAgICAgaWYgKGNoYXIgPT0gUVVPVEUpIHsKICAgICAgICBsaXN0ZW5lci5oYW5kbGVTdHJpbmcoZ2V0U3RyaW5nKHN0YXJ0LCBwb3NpdGlvbiAtIDEsIGJpdHMpKTsKICAgICAgICByZXR1cm4gcG9zaXRpb247CiAgICAgIH0KICAgICAgaWYgKGNoYXIgPCBTUEFDRSkgewogICAgICAgIHJldHVybiBmYWlsKHBvc2l0aW9uIC0gMSwgIkNvbnRyb2wgY2hhcmFjdGVyIGluIHN0cmluZyIpOwogICAgICB9CiAgICB9CiAgICBiZWdpblN0cmluZygpOwogICAgaWYgKHN0YXJ0IDwgZW5kKSBhZGRTbGljZVRvU3RyaW5nKHN0YXJ0LCBlbmQpOwogICAgcmV0dXJuIGNodW5rU3RyaW5nKFNUUl9QTEFJTik7CiAgfQoKICAvKioKICAgKiBTZXRzIHVwIGEgcGFydGlhbCBzdHJpbmcgc3RhdGUuCiAgICoKICAgKiBUaGUgc3RhdGUgaXMgZWl0aGVyIG5vdCBpbnNpZGUgYW4gZXNjYXBlLCBvciByaWdodCBhZnRlciBhIGJhY2tzbGFzaC4KICAgKiBGb3IgcGFydGlhbCBzdHJpbmdzIGVuZGluZyBpbnNpZGUgYSBVbmljb2RlIGVzY2FwZSwgdXNlCiAgICogW2NodW5rU3RyaW5nRXNjYXBlVV0uCiAgICovCiAgaW50IGNodW5rU3RyaW5nKGludCBzdHJpbmdTdGF0ZSkgewogICAgcGFydGlhbFN0YXRlID0gUEFSVElBTF9TVFJJTkcgfCBzdHJpbmdTdGF0ZTsKICAgIHJldHVybiBjaHVua0VuZDsKICB9CgogIC8qKgogICAqIFNldHMgdXAgYSBwYXJ0aWFsIHN0cmluZyBzdGF0ZSBmb3IgYSBwYXJ0aWFsbHkgcGFyc2VkIFVuaWNvZGUgZXNjYXBlLgogICAqCiAgICogVGhlIHBhcnRpYWwgc3RyaW5nIHN0YXRlIGluY2x1ZGVzIHRoZSBjdXJyZW50IFtidWZmZXJdIGFuZCB0aGUKICAgKiBudW1iZXIgb2YgaGV4IGRpZ2l0cyBvZiB0aGUgVW5pY29kZSBzZWVuIHNvIGZhciAoZS5nLiwgZm9yIGAiXHUzMCcpCiAgICogdGhlIHN0YXRlIGtub3dzIHRoYXQgdHdvIGRpZ2l0cyBoYXZlIGJlZW4gc2VlbiwgYW5kIHdoYXQgdGhlaXIgdmFsdWUgaXMuCiAgICoKICAgKiBSZXR1cm5zIFtjaHVua0VuZF0gc28gaXQgY2FuIGJlIHVzZWQgYXMgcGFydCBvZiBhIHJldHVybiBzdGF0ZW1lbnQuCiAgICovCiAgaW50IGNodW5rU3RyaW5nRXNjYXBlVShpbnQgY291bnQsIGludCB2YWx1ZSkgewogICAgcGFydGlhbFN0YXRlID0gUEFSVElBTF9TVFJJTkcgfAogICAgICAgIFNUUl9VIHwKICAgICAgICAoY291bnQgPDwgU1RSX1VfQ09VTlRfU0hJRlQpIHwKICAgICAgICAodmFsdWUgPDwgU1RSX1VfVkFMVUVfU0hJRlQpOwogICAgcmV0dXJuIGNodW5rRW5kOwogIH0KCiAgLyoqCiAgICogUGFyc2VzIHRoZSByZW1haW5kZXIgb2YgYSBzdHJpbmcgbGl0ZXJhbCBpbnRvIGEgYnVmZmVyLgogICAqCiAgICogVGhlIGJ1ZmZlciBpcyBzdG9yZWQgaW4gW2J1ZmZlcl0gYW5kIGl0cyB1bmRlcmx5aW5nIGZvcm1hdCBkZXBlbmRzIG9uCiAgICogdGhlIGlucHV0IGNodW5rIHR5cGUuIEZvciBleGFtcGxlIFVURi04IGRlY29kaW5nIGhhcHBlbnMgaW4gdGhlCiAgICogYnVmZmVyLCBub3QgaW4gdGhlIHBhcnNlciwgc2luY2UgYWxsIHNpZ25pZmljYW50IEpTT04gY2hhcmFjdGVycyBhcmUgQVNDSUkuCiAgICoKICAgKiBUaGlzIGZ1bmN0aW9uIHNjYW5zIHRocm91Z2ggdGhlIHN0cmluZyBsaXRlcmFsIGZvciBlc2NhcGVzLCBhbmQgY29waWVzCiAgICogc2xpY2VzIG9mIG5vbi1lc2NhcGUgY2hhcmFjdGVycyB1c2luZyBbYWRkU2xpY2VUb1N0cmluZ10uCiAgICovCiAgaW50IHBhcnNlU3RyaW5nVG9CdWZmZXIoaW50IHBvc2l0aW9uKSB7CiAgICBpbnQgZW5kID0gY2h1bmtFbmQ7CiAgICBpbnQgc3RhcnQgPSBwb3NpdGlvbjsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpIHsKICAgICAgICBpZiAocG9zaXRpb24gPiBzdGFydCkgewogICAgICAgICAgYWRkU2xpY2VUb1N0cmluZyhzdGFydCwgcG9zaXRpb24pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY2h1bmtTdHJpbmcoU1RSX1BMQUlOKTsKICAgICAgfQogICAgICBpbnQgY2hhciA9IGdldENoYXIocG9zaXRpb24rKyk7CiAgICAgIGlmIChjaGFyID4gQkFDS1NMQVNIKSBjb250aW51ZTsKICAgICAgaWYgKGNoYXIgPCBTUEFDRSkgewogICAgICAgIHJldHVybiBmYWlsKHBvc2l0aW9uIC0gMSk7IC8vIENvbnRyb2wgY2hhcmFjdGVyIGluIHN0cmluZy4KICAgICAgfQogICAgICBpZiAoY2hhciA9PSBRVU9URSkgewogICAgICAgIGludCBxdW90ZVBvc2l0aW9uID0gcG9zaXRpb24gLSAxOwogICAgICAgIGlmIChxdW90ZVBvc2l0aW9uID4gc3RhcnQpIHsKICAgICAgICAgIGFkZFNsaWNlVG9TdHJpbmcoc3RhcnQsIHF1b3RlUG9zaXRpb24pOwogICAgICAgIH0KICAgICAgICBsaXN0ZW5lci5oYW5kbGVTdHJpbmcoZW5kU3RyaW5nKCkpOwogICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgICAgfQogICAgICBpZiAoY2hhciAhPSBCQUNLU0xBU0gpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICAvLyBIYW5kbGUgZXNjYXBlLgogICAgICBpZiAocG9zaXRpb24gLSAxID4gc3RhcnQpIHsKICAgICAgICBhZGRTbGljZVRvU3RyaW5nKHN0YXJ0LCBwb3NpdGlvbiAtIDEpOwogICAgICB9CiAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpIHJldHVybiBjaHVua1N0cmluZyhTVFJfRVNDQVBFKTsKICAgICAgcG9zaXRpb24gPSBwYXJzZVN0cmluZ0VzY2FwZShwb3NpdGlvbik7CiAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpIHJldHVybiBwb3NpdGlvbjsKICAgICAgc3RhcnQgPSBwb3NpdGlvbjsKICAgIH0KICAgIHJldHVybiAtMTsgLy8gVU5SRUFDSEFCTEUuCiAgfQoKICAvKioKICAgKiBQYXJzZSBhIHN0cmluZyBlc2NhcGUuCiAgICoKICAgKiBQb3NpdGlvbiBpcyByaWdodCBhZnRlciB0aGUgaW5pdGlhbCBiYWNrc2xhc2guCiAgICogVGhlIGZvbGxvd2luZyBlc2NhcGUgaXMgcGFyc2VkIGludG8gYSBjaGFyYWN0ZXIgY29kZSB3aGljaCBpcyBhZGRlZCB0bwogICAqIHRoZSBjdXJyZW50IHN0cmluZyBidWZmZXIgdXNpbmcgW2FkZENoYXJUb1N0cmluZ10uCiAgICoKICAgKiBSZXR1cm5zIHBvc2l0aW9uIGFmdGVyIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgZXNjYXBlLgogICAqLwogIGludCBwYXJzZVN0cmluZ0VzY2FwZShpbnQgcG9zaXRpb24pIHsKICAgIGludCBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbisrKTsKICAgIGludCBsZW5ndGggPSBjaHVua0VuZDsKICAgIHN3aXRjaCAoY2hhcikgewogICAgICBjYXNlIENIQVJfYjoKICAgICAgICBjaGFyID0gQkFDS1NQQUNFOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENIQVJfZjoKICAgICAgICBjaGFyID0gRk9STV9GRUVEOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENIQVJfbjoKICAgICAgICBjaGFyID0gTkVXTElORTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDSEFSX3I6CiAgICAgICAgY2hhciA9IENBUlJJQUdFX1JFVFVSTjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDSEFSX3Q6CiAgICAgICAgY2hhciA9IFRBQjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTTEFTSDoKICAgICAgY2FzZSBCQUNLU0xBU0g6CiAgICAgIGNhc2UgUVVPVEU6CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ0hBUl91OgogICAgICAgIGludCBoZXhTdGFydCA9IHBvc2l0aW9uIC0gMTsKICAgICAgICBpbnQgdmFsdWUgPSAwOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAgICAgICAgICBpZiAocG9zaXRpb24gPT0gbGVuZ3RoKSByZXR1cm4gY2h1bmtTdHJpbmdFc2NhcGVVKGksIHZhbHVlKTsKICAgICAgICAgIGNoYXIgPSBnZXRDaGFyKHBvc2l0aW9uKyspOwogICAgICAgICAgaW50IGRpZ2l0ID0gY2hhciBeIDB4MzA7CiAgICAgICAgICB2YWx1ZSAqPSAxNjsKICAgICAgICAgIGlmIChkaWdpdCA8PSA5KSB7CiAgICAgICAgICAgIHZhbHVlICs9IGRpZ2l0OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZGlnaXQgPSAoY2hhciB8IDB4MjApIC0gQ0hBUl9hOwogICAgICAgICAgICBpZiAoZGlnaXQgPCAwIHx8IGRpZ2l0ID4gNSkgewogICAgICAgICAgICAgIHJldHVybiBmYWlsKGhleFN0YXJ0LCAiSW52YWxpZCB1bmljb2RlIGVzY2FwZSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhbHVlICs9IGRpZ2l0ICsgMTA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNoYXIgPSB2YWx1ZTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBpZiAoY2hhciA8IFNQQUNFKSByZXR1cm4gZmFpbChwb3NpdGlvbiwgIkNvbnRyb2wgY2hhcmFjdGVyIGluIHN0cmluZyIpOwogICAgICAgIHJldHVybiBmYWlsKHBvc2l0aW9uLCAiVW5yZWNvZ25pemVkIHN0cmluZyBlc2NhcGUiKTsKICAgIH0KICAgIGFkZENoYXJUb1N0cmluZyhjaGFyKTsKICAgIGlmIChwb3NpdGlvbiA9PSBsZW5ndGgpIHJldHVybiBjaHVua1N0cmluZyhTVFJfUExBSU4pOwogICAgcmV0dXJuIHBvc2l0aW9uOwogIH0KCiAgLy8vIFNldHMgdXAgYSBwYXJ0aWFsIG51bWVyYWwgc3RhdGUuCiAgLy8vIFJldHVybnMgY2h1bmtFbmQgdG8gYWxsb3cgZWFzeSBvbmUtbGluZSBiYWlsb3V0IHRlc3RzLgogIGludCBiZWdpbkNodW5rTnVtYmVyKGludCBzdGF0ZSwgaW50IHN0YXJ0KSB7CiAgICBpbnQgZW5kID0gY2h1bmtFbmQ7CiAgICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICB2YXIgYnVmZmVyID0gbmV3IF9OdW1iZXJCdWZmZXIobGVuZ3RoKTsKICAgIGNvcHlDaGFyc1RvTGlzdChzdGFydCwgZW5kLCBidWZmZXIubGlzdCwgMCk7CiAgICBidWZmZXIubGVuZ3RoID0gbGVuZ3RoOwogICAgdGhpcy5idWZmZXIgPSBidWZmZXI7CiAgICB0aGlzLnBhcnRpYWxTdGF0ZSA9IFBBUlRJQUxfTlVNRVJBTCB8IHN0YXRlOwogICAgcmV0dXJuIGVuZDsKICB9CgogIHZvaWQgYWRkTnVtYmVyQ2h1bmsoX051bWJlckJ1ZmZlciBidWZmZXIsIGludCBzdGFydCwgaW50IGVuZCwgaW50IG92ZXJoZWFkKSB7CiAgICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBpbnQgY291bnQgPSBidWZmZXIubGVuZ3RoOwogICAgaW50IG5ld0NvdW50ID0gY291bnQgKyBsZW5ndGg7CiAgICBpbnQgbmV3Q2FwYWNpdHkgPSBuZXdDb3VudCArIG92ZXJoZWFkOwogICAgYnVmZmVyLmVuc3VyZUNhcGFjaXR5KG5ld0NhcGFjaXR5KTsKICAgIGNvcHlDaGFyc1RvTGlzdChzdGFydCwgZW5kLCBidWZmZXIubGlzdCwgY291bnQpOwogICAgYnVmZmVyLmxlbmd0aCA9IG5ld0NvdW50OwogIH0KCiAgLy8gQ29udGludWVzIGFuIGFscmVhZHkgY2h1bmtlZCBudW1iZXIgYWNyb3NzIGFuIGVudGlyZSBjaHVuay4KICBpbnQgY29udGludWVDaHVua051bWJlcihpbnQgc3RhdGUsIGludCBzdGFydCwgX051bWJlckJ1ZmZlciBidWZmZXIpIHsKICAgIGludCBlbmQgPSBjaHVua0VuZDsKICAgIGFkZE51bWJlckNodW5rKGJ1ZmZlciwgc3RhcnQsIGVuZCwgX051bWJlckJ1ZmZlci5rRGVmYXVsdE92ZXJoZWFkKTsKICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyOwogICAgdGhpcy5wYXJ0aWFsU3RhdGUgPSBQQVJUSUFMX05VTUVSQUwgfCBzdGF0ZTsKICAgIHJldHVybiBlbmQ7CiAgfQoKICBpbnQgZmluaXNoQ2h1bmtOdW1iZXIoaW50IHN0YXRlLCBpbnQgc3RhcnQsIGludCBlbmQsIF9OdW1iZXJCdWZmZXIgYnVmZmVyKSB7CiAgICBpZiAoc3RhdGUgPT0gTlVNX1pFUk8pIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlTnVtYmVyKDApOwogICAgICByZXR1cm4gZW5kOwogICAgfQogICAgaWYgKGVuZCA+IHN0YXJ0KSB7CiAgICAgIGFkZE51bWJlckNodW5rKGJ1ZmZlciwgc3RhcnQsIGVuZCwgMCk7CiAgICB9CiAgICBpZiAoc3RhdGUgPT0gTlVNX0RJR0lUKSB7CiAgICAgIG51bSB2YWx1ZSA9IGJ1ZmZlci5wYXJzZU51bSgpOwogICAgICBsaXN0ZW5lci5oYW5kbGVOdW1iZXIodmFsdWUpOwogICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBOVU1fRE9UX0RJR0lUIHx8IHN0YXRlID09IE5VTV9FX0RJR0lUKSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU51bWJlcihidWZmZXIucGFyc2VEb3VibGUoKSk7CiAgICB9IGVsc2UgewogICAgICBmYWlsKGNodW5rRW5kLCAiVW50ZXJtaW5hdGVkIG51bWJlciBsaXRlcmFsIik7CiAgICB9CiAgICByZXR1cm4gZW5kOwogIH0KCiAgaW50IHBhcnNlTnVtYmVyKGludCBjaGFyLCBpbnQgcG9zaXRpb24pIHsKICAgIC8vIEFsc28gY2FsbGVkIG9uIGFueSB1bmV4cGVjdGVkIGNoYXJhY3Rlci4KICAgIC8vIEZvcm1hdDoKICAgIC8vICAnLSc/KCcwJ3xbMS05XVswLTldKikoJy4nWzAtOV0rKT8oW2VFXVsrLV0/WzAtOV0rKT8KICAgIGludCBzdGFydCA9IHBvc2l0aW9uOwogICAgaW50IGxlbmd0aCA9IGNodW5rRW5kOwogICAgLy8gQ29sbGVjdHMgYW4gaW50IHZhbHVlIHdoaWxlIHBhcnNpbmcuIFVzZWQgZm9yIGJvdGggYW4gaW50ZWdlciBsaXRlcmFsLAogICAgLy8gYW5kIHRoZSBleHBvbmVudCBwYXJ0IG9mIGEgZG91YmxlIGxpdGVyYWwuCiAgICAvLyBTdG9yZWQgYXMgbmVnYXRpdmUgdG8gZW5zdXJlIHdlIGNhbiByZXByZXNlbnQgLTJeNjMuCiAgICBpbnQgaW50VmFsdWUgPSAwOwogICAgZG91YmxlIGRvdWJsZVZhbHVlID0gMC4wOyAvLyBDb2xsZWN0IGRvdWJsZSB2YWx1ZSB3aGlsZSBwYXJzaW5nLgogICAgLy8gMSBpZiB0aGVyZSBpcyBubyBsZWFkaW5nIC0sIC0xIGlmIHRoZXJlIGlzLgogICAgaW50IHNpZ24gPSAxOwogICAgYm9vbCBpc0RvdWJsZSA9IGZhbHNlOwogICAgLy8gQnJlYWsgdGhpcyBibG9jayB3aGVuIHRoZSBlbmQgb2YgdGhlIG51bWJlciBsaXRlcmFsIGlzIHJlYWNoZWQuCiAgICAvLyBBdCB0aGF0IHRpbWUsIHBvc2l0aW9uIHBvaW50cyB0byB0aGUgbmV4dCBjaGFyYWN0ZXIsIGFuZCBpc0RvdWJsZQogICAgLy8gaXMgc2V0IGlmIHRoZSBsaXRlcmFsIGNvbnRhaW5zIGEgZGVjaW1hbCBwb2ludCBvciBhbiBleHBvbmVudGlhbC4KICAgIGlmIChjaGFyID09IE1JTlVTKSB7CiAgICAgIHNpZ24gPSAtMTsKICAgICAgcG9zaXRpb24rKzsKICAgICAgaWYgKHBvc2l0aW9uID09IGxlbmd0aCkgcmV0dXJuIGJlZ2luQ2h1bmtOdW1iZXIoTlVNX1NJR04sIHN0YXJ0KTsKICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgfQogICAgaW50IGRpZ2l0ID0gY2hhciBeIENIQVJfMDsKICAgIGlmIChkaWdpdCA+IDkpIHsKICAgICAgaWYgKHNpZ24gPCAwKSB7CiAgICAgICAgZmFpbChwb3NpdGlvbiwgIk1pc3NpbmcgZXhwZWN0ZWQgZGlnaXQiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBJZiBpdCBkb2Vzbid0IGV2ZW4gc3RhcnQgb3V0IGFzIGEgbnVtZXJhbC4KICAgICAgICBmYWlsKHBvc2l0aW9uKTsKICAgICAgfQogICAgfQogICAgaWYgKGRpZ2l0ID09IDApIHsKICAgICAgcG9zaXRpb24rKzsKICAgICAgaWYgKHBvc2l0aW9uID09IGxlbmd0aCkgcmV0dXJuIGJlZ2luQ2h1bmtOdW1iZXIoTlVNX1pFUk8sIHN0YXJ0KTsKICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICBkaWdpdCA9IGNoYXIgXiBDSEFSXzA7CiAgICAgIC8vIElmIHN0YXJ0aW5nIHdpdGggemVybywgbmV4dCBjaGFyYWN0ZXIgbXVzdCBub3QgYmUgZGlnaXQuCiAgICAgIGlmIChkaWdpdCA8PSA5KSBmYWlsKHBvc2l0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIGludCBkaWdpdENvdW50ID0gMDsKICAgICAgZG8gewogICAgICAgIGlmIChkaWdpdENvdW50ID49IDE4KSB7CiAgICAgICAgICAvLyBDaGVjayBmb3Igb3ZlcmZsb3cuCiAgICAgICAgICAvLyBJcyAxIGlmIGRpZ2l0IGlzIDggb3IgOSBhbmQgc2lnbiA9PSAwLCBvciBkaWdpdCBpcyA5IGFuZCBzaWduIDwgMDsKICAgICAgICAgIGludCBoaWdoRGlnaXQgPSBkaWdpdCA+PiAzOwogICAgICAgICAgaWYgKHNpZ24gPCAwKSBoaWdoRGlnaXQgJj0gZGlnaXQ7CiAgICAgICAgICBpZiAoZGlnaXRDb3VudCA9PSAxOSB8fCBpbnRWYWx1ZSAtIGhpZ2hEaWdpdCA8IC05MjIzMzcyMDM2ODU0Nzc1ODApIHsKICAgICAgICAgICAgaXNEb3VibGUgPSB0cnVlOwogICAgICAgICAgICAvLyBCaWcgdmFsdWUgdGhhdCB3ZSBrbm93IGlzIG5vdCB0cnVzdGVkIHRvIGJlIGV4YWN0IGxhdGVyLAogICAgICAgICAgICAvLyBmb3JjaW5nIHJlcGFyc2luZyB1c2luZyBgZG91YmxlLnBhcnNlYC4KICAgICAgICAgICAgZG91YmxlVmFsdWUgPSA5MjIzMzcyMDM2ODU0Nzc1ODA4LjA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGludFZhbHVlID0gMTAgKiBpbnRWYWx1ZSAtIGRpZ2l0OwogICAgICAgIGRpZ2l0Q291bnQrKzsKICAgICAgICBwb3NpdGlvbisrOwogICAgICAgIGlmIChwb3NpdGlvbiA9PSBsZW5ndGgpIHJldHVybiBiZWdpbkNodW5rTnVtYmVyKE5VTV9ESUdJVCwgc3RhcnQpOwogICAgICAgIGNoYXIgPSBnZXRDaGFyKHBvc2l0aW9uKTsKICAgICAgICBkaWdpdCA9IGNoYXIgXiBDSEFSXzA7CiAgICAgIH0gd2hpbGUgKGRpZ2l0IDw9IDkpOwogICAgfQogICAgaWYgKGNoYXIgPT0gREVDSU1BTFBPSU5UKSB7CiAgICAgIGlmICghaXNEb3VibGUpIHsKICAgICAgICBpc0RvdWJsZSA9IHRydWU7CiAgICAgICAgZG91YmxlVmFsdWUgPSAoaW50VmFsdWUgPT0gMCkgPyAwLjAgOiAtaW50VmFsdWUudG9Eb3VibGUoKTsKICAgICAgfQogICAgICBpbnRWYWx1ZSA9IDA7CiAgICAgIHBvc2l0aW9uKys7CiAgICAgIGlmIChwb3NpdGlvbiA9PSBsZW5ndGgpIHJldHVybiBiZWdpbkNodW5rTnVtYmVyKE5VTV9ET1QsIHN0YXJ0KTsKICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICBkaWdpdCA9IGNoYXIgXiBDSEFSXzA7CiAgICAgIGlmIChkaWdpdCA+IDkpIGZhaWwocG9zaXRpb24pOwogICAgICBkbyB7CiAgICAgICAgZG91YmxlVmFsdWUgPSAxMC4wICogZG91YmxlVmFsdWUgKyBkaWdpdDsKICAgICAgICBpbnRWYWx1ZSAtPSAxOwogICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgaWYgKHBvc2l0aW9uID09IGxlbmd0aCkgcmV0dXJuIGJlZ2luQ2h1bmtOdW1iZXIoTlVNX0RPVF9ESUdJVCwgc3RhcnQpOwogICAgICAgIGNoYXIgPSBnZXRDaGFyKHBvc2l0aW9uKTsKICAgICAgICBkaWdpdCA9IGNoYXIgXiBDSEFSXzA7CiAgICAgIH0gd2hpbGUgKGRpZ2l0IDw9IDkpOwogICAgfQogICAgaWYgKChjaGFyIHwgMHgyMCkgPT0gQ0hBUl9lKSB7CiAgICAgIGlmICghaXNEb3VibGUpIHsKICAgICAgICBpc0RvdWJsZSA9IHRydWU7CiAgICAgICAgZG91YmxlVmFsdWUgPSAoaW50VmFsdWUgPT0gMCkgPyAwLjAgOiAtaW50VmFsdWUudG9Eb3VibGUoKTsKICAgICAgICBpbnRWYWx1ZSA9IDA7CiAgICAgIH0KICAgICAgcG9zaXRpb24rKzsKICAgICAgaWYgKHBvc2l0aW9uID09IGxlbmd0aCkgcmV0dXJuIGJlZ2luQ2h1bmtOdW1iZXIoTlVNX0UsIHN0YXJ0KTsKICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICBpbnQgZXhwU2lnbiA9IDE7CiAgICAgIGludCBleHBvbmVudCA9IDA7CiAgICAgIGlmICgoKGNoYXIgKyAxKSB8IDIpID09IDB4MmUgLyorIG9yIC0qLykgewogICAgICAgIGV4cFNpZ24gPSAweDJDIC0gY2hhcjsgLy8gLTEgZm9yIE1JTlVTLCArMSBmb3IgUExVUwogICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgaWYgKHBvc2l0aW9uID09IGxlbmd0aCkgcmV0dXJuIGJlZ2luQ2h1bmtOdW1iZXIoTlVNX0VfU0lHTiwgc3RhcnQpOwogICAgICAgIGNoYXIgPSBnZXRDaGFyKHBvc2l0aW9uKTsKICAgICAgfQogICAgICBkaWdpdCA9IGNoYXIgXiBDSEFSXzA7CiAgICAgIGlmIChkaWdpdCA+IDkpIHsKICAgICAgICBmYWlsKHBvc2l0aW9uLCAiTWlzc2luZyBleHBlY3RlZCBkaWdpdCIpOwogICAgICB9CiAgICAgIGJvb2wgZXhwb25lbnRPdmVyZmxvdyA9IGZhbHNlOwogICAgICBkbyB7CiAgICAgICAgZXhwb25lbnQgPSAxMCAqIGV4cG9uZW50ICsgZGlnaXQ7CiAgICAgICAgaWYgKGV4cG9uZW50ID4gNDAwKSBleHBvbmVudE92ZXJmbG93ID0gdHJ1ZTsKICAgICAgICBwb3NpdGlvbisrOwogICAgICAgIGlmIChwb3NpdGlvbiA9PSBsZW5ndGgpIHJldHVybiBiZWdpbkNodW5rTnVtYmVyKE5VTV9FX0RJR0lULCBzdGFydCk7CiAgICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICAgIGRpZ2l0ID0gY2hhciBeIENIQVJfMDsKICAgICAgfSB3aGlsZSAoZGlnaXQgPD0gOSk7CiAgICAgIGlmIChleHBvbmVudE92ZXJmbG93KSB7CiAgICAgICAgaWYgKGRvdWJsZVZhbHVlID09IDAuMCB8fCBleHBTaWduIDwgMCkgewogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlTnVtYmVyKHNpZ24gPCAwID8gLTAuMCA6IDAuMCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZU51bWJlcigKICAgICAgICAgICAgICBzaWduIDwgMCA/IGRvdWJsZS5uZWdhdGl2ZUluZmluaXR5IDogZG91YmxlLmluZmluaXR5KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogICAgICB9CiAgICAgIGludFZhbHVlICs9IGV4cFNpZ24gKiBleHBvbmVudDsKICAgIH0KICAgIGlmICghaXNEb3VibGUpIHsKICAgICAgaW50IGJpdEZsYWcgPSAtKHNpZ24gKyAxKSA+PiAxOyAvLyAwIGlmIHNpZ24gPT0gLTEsIC0xIGlmIHNpZ24gPT0gMQogICAgICAvLyBOZWdhdGUgaWYgYml0RmxhZyBpcyAtMSBieSBkb2luZyB+aW50VmFsdWUgKyAxCiAgICAgIGxpc3RlbmVyLmhhbmRsZU51bWJlcigoaW50VmFsdWUgXiBiaXRGbGFnKSAtIGJpdEZsYWcpOwogICAgICByZXR1cm4gcG9zaXRpb247CiAgICB9CiAgICAvLyBEb3VibGUgdmFsdWVzIGF0IG9yIGFib3ZlIHRoaXMgdmFsdWUgKDIgKiogNTMpIG1heSBoYXZlIGxvc3QgcHJlY2lzaW9uLgogICAgLy8gT25seSB0cnVzdCByZXN1bHRzIHRoYXQgYXJlIGJlbG93IHRoaXMgdmFsdWUuCiAgICBjb25zdCBkb3VibGUgbWF4RXhhY3REb3VibGUgPSA5MDA3MTk5MjU0NzQwOTkyLjA7CiAgICBpZiAoZG91YmxlVmFsdWUgPCBtYXhFeGFjdERvdWJsZSkgewogICAgICBpbnQgZXhwb25lbnQgPSBpbnRWYWx1ZTsKICAgICAgZG91YmxlIHNpZ25lZE1hbnRpc3NhID0gZG91YmxlVmFsdWUgKiBzaWduOwogICAgICBpZiAoZXhwb25lbnQgPj0gLTIyKSB7CiAgICAgICAgaWYgKGV4cG9uZW50IDwgMCkgewogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlTnVtYmVyKHNpZ25lZE1hbnRpc3NhIC8gUE9XRVJTX09GX1RFTlstZXhwb25lbnRdKTsKICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgICAgICB9CiAgICAgICAgaWYgKGV4cG9uZW50ID09IDApIHsKICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZU51bWJlcihzaWduZWRNYW50aXNzYSk7CiAgICAgICAgICByZXR1cm4gcG9zaXRpb247CiAgICAgICAgfQogICAgICAgIGlmIChleHBvbmVudCA8PSAyMikgewogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlTnVtYmVyKHNpZ25lZE1hbnRpc3NhICogUE9XRVJTX09GX1RFTltleHBvbmVudF0pOwogICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgLy8gSWYgdGhlIHZhbHVlIGlzIG91dHNpZGUgdGhlIHJhbmdlICsvLW1heEV4YWN0RG91YmxlIG9yCiAgICAvLyBleHBvbmVudCBpcyBvdXRzaWRlIHRoZSByYW5nZSArLy0yMiwgdGhlbiB3ZSBjYW4ndCB0cnVzdCBzaW1wbGUgZG91YmxlCiAgICAvLyBhcml0aG1ldGljIHRvIGdldCB0aGUgZXhhY3QgcmVzdWx0LCBzbyB3ZSB1c2UgdGhlIHN5c3RlbSBkb3VibGUgcGFyc2luZy4KICAgIGxpc3RlbmVyLmhhbmRsZU51bWJlcihwYXJzZURvdWJsZShzdGFydCwgcG9zaXRpb24pKTsKICAgIHJldHVybiBwb3NpdGlvbjsKICB9CgogIGZhaWwoaW50IHBvc2l0aW9uLCBbU3RyaW5nIG1lc3NhZ2VdKSB7CiAgICBpZiAobWVzc2FnZSA9PSBudWxsKSB7CiAgICAgIG1lc3NhZ2UgPSAiVW5leHBlY3RlZCBjaGFyYWN0ZXIiOwogICAgICBpZiAocG9zaXRpb24gPT0gY2h1bmtFbmQpIG1lc3NhZ2UgPSAiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQiOwogICAgfQogICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbihtZXNzYWdlLCBjaHVuaywgcG9zaXRpb24pOwogIH0KfQoKLyoqCiAqIENodW5rZWQgSlNPTiBwYXJzZXIgdGhhdCBwYXJzZXMgW1N0cmluZ10gY2h1bmtzLgogKi8KY2xhc3MgX0pzb25TdHJpbmdQYXJzZXIgZXh0ZW5kcyBfQ2h1bmtlZEpzb25QYXJzZXI8U3RyaW5nPiB7CiAgU3RyaW5nIGNodW5rOwogIGludCBjaHVua0VuZDsKCiAgX0pzb25TdHJpbmdQYXJzZXIoX0pzb25MaXN0ZW5lciBsaXN0ZW5lcikgOiBzdXBlcihsaXN0ZW5lcik7CgogIGludCBnZXRDaGFyKGludCBwb3NpdGlvbikgPT4gY2h1bmsuY29kZVVuaXRBdChwb3NpdGlvbik7CgogIFN0cmluZyBnZXRTdHJpbmcoaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgYml0cykgewogICAgcmV0dXJuIGNodW5rLnN1YnN0cmluZyhzdGFydCwgZW5kKTsKICB9CgogIHZvaWQgYmVnaW5TdHJpbmcoKSB7CiAgICB0aGlzLmJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICB9CgogIHZvaWQgYWRkU2xpY2VUb1N0cmluZyhpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjsKICAgIGJ1ZmZlci53cml0ZShjaHVuay5zdWJzdHJpbmcoc3RhcnQsIGVuZCkpOwogIH0KCiAgdm9pZCBhZGRDaGFyVG9TdHJpbmcoaW50IGNoYXJDb2RlKSB7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gdGhpcy5idWZmZXI7CiAgICBidWZmZXIud3JpdGVDaGFyQ29kZShjaGFyQ29kZSk7CiAgfQoKICBTdHJpbmcgZW5kU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyOwogICAgdGhpcy5idWZmZXIgPSBudWxsOwogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgdm9pZCBjb3B5Q2hhcnNUb0xpc3QoaW50IHN0YXJ0LCBpbnQgZW5kLCBMaXN0IHRhcmdldCwgaW50IG9mZnNldCkgewogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB0YXJnZXRbb2Zmc2V0ICsgaV0gPSBjaHVuay5jb2RlVW5pdEF0KHN0YXJ0ICsgaSk7CiAgICB9CiAgfQoKICBkb3VibGUgcGFyc2VEb3VibGUoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICByZXR1cm4gX3BhcnNlRG91YmxlKGNodW5rLCBzdGFydCwgZW5kKTsKICB9Cn0KCkBwYXRjaApjbGFzcyBKc29uRGVjb2RlciB7CiAgQHBhdGNoCiAgU3RyaW5nQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPE9iamVjdD4gc2luaykgewogICAgcmV0dXJuIG5ldyBfSnNvblN0cmluZ0RlY29kZXJTaW5rKHRoaXMuX3Jldml2ZXIsIHNpbmspOwogIH0KfQoKLyoqCiAqIEltcGxlbWVudHMgdGhlIGNodW5rZWQgY29udmVyc2lvbiBmcm9tIGEgSlNPTiBzdHJpbmcgdG8gaXRzIGNvcnJlc3BvbmRpbmcKICogb2JqZWN0LgogKgogKiBUaGUgc2luayBvbmx5IGNyZWF0ZXMgb25lIG9iamVjdCwgYnV0IGl0cyBpbnB1dCBjYW4gYmUgY2h1bmtlZC4KICovCmNsYXNzIF9Kc29uU3RyaW5nRGVjb2RlclNpbmsgZXh0ZW5kcyBTdHJpbmdDb252ZXJzaW9uU2lua0Jhc2UgewogIF9Kc29uU3RyaW5nUGFyc2VyIF9wYXJzZXI7CiAgZmluYWwgRnVuY3Rpb24oT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKSBfcmV2aXZlcjsKICBmaW5hbCBTaW5rPE9iamVjdD4gX3Npbms7CgogIF9Kc29uU3RyaW5nRGVjb2RlclNpbmsodGhpcy5fcmV2aXZlciwgdGhpcy5fc2luaykKICAgICAgOiBfcGFyc2VyID0gX2NyZWF0ZVBhcnNlcihfcmV2aXZlcik7CgogIHN0YXRpYyBfSnNvblN0cmluZ1BhcnNlciBfY3JlYXRlUGFyc2VyKHJldml2ZXIpIHsKICAgIF9CdWlsZEpzb25MaXN0ZW5lciBsaXN0ZW5lcjsKICAgIGlmIChyZXZpdmVyID09IG51bGwpIHsKICAgICAgbGlzdGVuZXIgPSBuZXcgX0J1aWxkSnNvbkxpc3RlbmVyKCk7CiAgICB9IGVsc2UgewogICAgICBsaXN0ZW5lciA9IG5ldyBfUmV2aXZlckpzb25MaXN0ZW5lcihyZXZpdmVyKTsKICAgIH0KICAgIHJldHVybiBuZXcgX0pzb25TdHJpbmdQYXJzZXIobGlzdGVuZXIpOwogIH0KCiAgdm9pZCBhZGRTbGljZShTdHJpbmcgY2h1bmssIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIF9wYXJzZXIuY2h1bmsgPSBjaHVuazsKICAgIF9wYXJzZXIuY2h1bmtFbmQgPSBlbmQ7CiAgICBfcGFyc2VyLnBhcnNlKHN0YXJ0KTsKICAgIGlmIChpc0xhc3QpIF9wYXJzZXIuY2xvc2UoKTsKICB9CgogIHZvaWQgYWRkKFN0cmluZyBjaHVuaykgewogICAgYWRkU2xpY2UoY2h1bmssIDAsIGNodW5rLmxlbmd0aCwgZmFsc2UpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9wYXJzZXIuY2xvc2UoKTsKICAgIHZhciBkZWNvZGVkID0gX3BhcnNlci5yZXN1bHQ7CiAgICBfc2luay5hZGQoZGVjb2RlZCk7CiAgICBfc2luay5jbG9zZSgpOwogIH0KCiAgQnl0ZUNvbnZlcnNpb25TaW5rIGFzVXRmOFNpbmsoYm9vbCBhbGxvd01hbGZvcm1lZCkgewogICAgX3BhcnNlciA9IG51bGw7CiAgICByZXR1cm4gbmV3IF9Kc29uVXRmOERlY29kZXJTaW5rKF9yZXZpdmVyLCBfc2luaywgYWxsb3dNYWxmb3JtZWQpOwogIH0KfQoKY2xhc3MgX1V0ZjhTdHJpbmdCdWZmZXIgewogIHN0YXRpYyBjb25zdCBpbnQgSU5JVElBTF9DQVBBQ0lUWSA9IDMyOwogIC8vIFBhcnRpYWwgc3RhdGUgZW5jb2RpbmcuCiAgc3RhdGljIGNvbnN0IGludCBNQVNLX1RXT19CSVQgPSAweDAzOwogIHN0YXRpYyBjb25zdCBpbnQgTUFTS19TSVpFID0gTUFTS19UV09fQklUOwogIHN0YXRpYyBjb25zdCBpbnQgU0hJRlRfTUlTU0lORyA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBTSElGVF9WQUxVRSA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBOT19QQVJUSUFMID0gMDsKCiAgLy8gVVRGLTggZW5jb2RpbmcgYW5kIGxpbWl0cy4KICBzdGF0aWMgY29uc3QgaW50IE1BWF9BU0NJSSA9IDEyNzsKICBzdGF0aWMgY29uc3QgaW50IE1BWF9UV09fQllURSA9IDB4N2ZmOwogIHN0YXRpYyBjb25zdCBpbnQgTUFYX1RIUkVFX0JZVEUgPSAweGZmZmY7CiAgc3RhdGljIGNvbnN0IGludCBNQVhfVU5JQ09ERSA9IDBYMTBmZmZmOwogIHN0YXRpYyBjb25zdCBpbnQgTUFTS19UV09fQllURSA9IDB4MWY7CiAgc3RhdGljIGNvbnN0IGludCBNQVNLX1RIUkVFX0JZVEUgPSAweDBmOwogIHN0YXRpYyBjb25zdCBpbnQgTUFTS19GT1VSX0JZVEUgPSAweDA3OwogIHN0YXRpYyBjb25zdCBpbnQgTUFTS19DT05USU5VRV9UQUcgPSAweEMwOwogIHN0YXRpYyBjb25zdCBpbnQgTUFTS19DT05USU5VRV9WQUxVRSA9IDB4M2Y7CiAgc3RhdGljIGNvbnN0IGludCBDT05USU5VRV9UQUcgPSAweDgwOwoKICAvLyBVVEYtMTYgc3Vycm9nYXRlIGVuY29kaW5nLgogIHN0YXRpYyBjb25zdCBpbnQgTEVBRF9TVVJST0dBVEUgPSAweEQ4MDA7CiAgc3RhdGljIGNvbnN0IGludCBUQUlMX1NVUlJPR0FURSA9IDB4REMwMDsKICBzdGF0aWMgY29uc3QgaW50IFNISUZUX0hJR0hfU1VSUk9HQVRFID0gMTA7CiAgc3RhdGljIGNvbnN0IGludCBNQVNLX0xPV19TVVJST0dBVEUgPSAweDNmZjsKCiAgLy8gVGhlIGludGVybmFsIGJ1ZmZlciBzdGFydHMgYXMgVWludDhMaXN0LCBidXQgbWF5IGNoYW5nZSB0byBVaW50MTZMaXN0CiAgLy8gaWYgdGhlIHN0cmluZyBjb250YWlucyBub24tTGF0aW4tMSBjaGFyYWN0ZXJzLgogIExpc3Q8aW50PiBidWZmZXIgPSBuZXcgVWludDhMaXN0KElOSVRJQUxfQ0FQQUNJVFkpOwogIC8vIE51bWJlciBvZiBlbGVtZW50cyBpbiBidWZmZXIuCiAgaW50IGxlbmd0aCA9IDA7CiAgLy8gUGFydGlhbCBkZWNvZGluZyBzdGF0ZSwgZm9yIGNhc2VzIHdoZXJlIGFuIFVURi04IHNlcXVlbmNlcyBpcyBzcGxpdAogIC8vIGJldHdlZW4gY2h1bmtzLgogIGludCBwYXJ0aWFsU3RhdGUgPSBOT19QQVJUSUFMOwogIC8vIFdoZXRoZXIgYWxsIGNoYXJhY3RlcnMgc28gZmFyIGhhdmUgYmVlbiBMYXRpbi0xIChhbmQgdGhlIGJ1ZmZlciBpcwogIC8vIHN0aWxsIGEgVWludDhMaXN0KS4gU2V0IHRvIGZhbHNlIHdoZW4gdGhlIGZpcnN0IG5vbi1MYXRpbi0xIGNoYXJhY3RlcgogIC8vIGlzIGVuY291bnRlcmVkLCBhbmQgdGhlIGJ1ZmZlciBpcyB0aGVuIGFsc28gY29udmVydGVkIHRvIGEgVWludDE2TGlzdC4KICBib29sIGlzTGF0aW4xID0gdHJ1ZTsKICAvLyBJZiBhbGxvd2luZyBtYWxmb3JtZWQsIGludmFsaWQgVVRGLTggc2VxdWVuY2VzIGFyZSBjb252ZXJ0ZWQgdG8KICAvLyBVK0ZGRkQuCiAgYm9vbCBhbGxvd01hbGZvcm1lZDsKCiAgX1V0ZjhTdHJpbmdCdWZmZXIodGhpcy5hbGxvd01hbGZvcm1lZCk7CgogIC8qKgogICAqIFBhcnNlIHRoZSBjb250aW51YXRpb24gb2YgYSBtdWx0aS1ieXRlIFVURi04IHNlcXVlbmNlLgogICAqCiAgICogUGFyc2UgW3V0ZjhdIGZyb20gW3Bvc2l0aW9uXSB0byBbZW5kXS4gSWYgdGhlIHNlcXVlbmNlIGV4dGVuZHMgYmV5b25kCiAgICogYGVuZGAsIHN0b3JlIHRoZSBwYXJ0aWFsIHN0YXRlIGluIFtwYXJ0aWFsU3RhdGVdLCBhbmQgY29udGludWUgZnJvbSB0aGVyZQogICAqIG9uIHRoZSBuZXh0IGFkZGVkIHNsaWNlLgogICAqCiAgICogVGhlIFtzaXplXSBpcyB0aGUgbnVtYmVyIG9mIGV4cGVjdGVkIGNvbnRpbnVhdGlvbiBieXRlcyB0b3RhbCwKICAgKiBhbmQgW21pc3NpbmddIGlzIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIGNvbnRpbnVhdGlvbiBieXRlcy4KICAgKiBUaGUgW3NpemVdIGlzIHVzZWQgdG8gZGV0ZWN0IG92ZXJsb25nIGVuY29kaW5ncy4KICAgKiBUaGUgW3ZhbHVlXSBpcyB0aGUgdmFsdWUgY29sbGVjdGVkIHNvIGZhci4KICAgKgogICAqIFdoZW4gY2FsbGVkIGFmdGVyIHNlZWluZyB0aGUgZmlyc3QgbXVsdGktYnl0ZSBtYXJrZXIsIHRoZSBbc2l6ZV0gYW5kCiAgICogW21pc3NpbmddIHZhbHVlcyBhcmUgYWx3YXlzIHRoZSBzYW1lLCBidXQgdGhleSBtYXkgZGlmZmVyIGlmIGNvbnRpbnVpbmcKICAgKiBhZnRlciBhIHBhcnRpYWwgc2VxdWVuY2UuCiAgICovCiAgaW50IGFkZENvbnRpbnVhdGlvbigKICAgICAgTGlzdDxpbnQ+IHV0ZjgsIGludCBwb3NpdGlvbiwgaW50IGVuZCwgaW50IHNpemUsIGludCBtaXNzaW5nLCBpbnQgdmFsdWUpIHsKICAgIGludCBjb2RlRW5kID0gcG9zaXRpb24gKyBtaXNzaW5nOwogICAgZG8gewogICAgICBpZiAocG9zaXRpb24gPT0gZW5kKSB7CiAgICAgICAgbWlzc2luZyA9IGNvZGVFbmQgLSBwb3NpdGlvbjsKICAgICAgICBwYXJ0aWFsU3RhdGUgPQogICAgICAgICAgICBzaXplIHwgKG1pc3NpbmcgPDwgU0hJRlRfTUlTU0lORykgfCAodmFsdWUgPDwgU0hJRlRfVkFMVUUpOwogICAgICAgIHJldHVybiBlbmQ7CiAgICAgIH0KICAgICAgaW50IGNoYXIgPSB1dGY4W3Bvc2l0aW9uXTsKICAgICAgaWYgKChjaGFyICYgTUFTS19DT05USU5VRV9UQUcpICE9IENPTlRJTlVFX1RBRykgewogICAgICAgIGlmIChhbGxvd01hbGZvcm1lZCkgewogICAgICAgICAgYWRkQ2hhckNvZGUoMHhGRkZEKTsKICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgIkV4cGVjdGVkIFVURi04IGNvbnRpbnVhdGlvbiBieXRlLCAiCiAgICAgICAgICAgICJmb3VuZCAkY2hhciIsCiAgICAgICAgICAgIHV0ZjgsCiAgICAgICAgICAgIHBvc2l0aW9uKTsKICAgICAgfQogICAgICB2YWx1ZSA9IDY0ICogdmFsdWUgKyAoY2hhciAmIE1BU0tfQ09OVElOVUVfVkFMVUUpOwogICAgICBwb3NpdGlvbisrOwogICAgfSB3aGlsZSAocG9zaXRpb24gPCBjb2RlRW5kKTsKICAgIGlmICh2YWx1ZSA8PSBjb25zdCBbMCwgTUFYX0FTQ0lJLCBNQVhfVFdPX0JZVEUsIE1BWF9USFJFRV9CWVRFXVtzaXplXSkgewogICAgICAvLyBPdmVyLWxvbmcgZW5jb2RpbmcuCiAgICAgIGlmIChhbGxvd01hbGZvcm1lZCkgewogICAgICAgIHZhbHVlID0gMHhGRkZEOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICJJbnZhbGlkIGVuY29kaW5nOiBVKyR7dmFsdWUudG9SYWRpeFN0cmluZygxNikucGFkTGVmdCg0LCAnMCcpfSIKICAgICAgICAgICAgIiBlbmNvZGVkIGluICR7c2l6ZSArIDF9IGJ5dGVzLiIsCiAgICAgICAgICAgIHV0ZjgsCiAgICAgICAgICAgIHBvc2l0aW9uIC0gMSk7CiAgICAgIH0KICAgIH0KICAgIGFkZENoYXJDb2RlKHZhbHVlKTsKICAgIHJldHVybiBwb3NpdGlvbjsKICB9CgogIHZvaWQgYWRkQ2hhckNvZGUoaW50IGNoYXIpIHsKICAgIGFzc2VydChjaGFyID49IDApOwogICAgYXNzZXJ0KGNoYXIgPD0gTUFYX1VOSUNPREUpOwogICAgaWYgKHBhcnRpYWxTdGF0ZSAhPSBOT19QQVJUSUFMKSB7CiAgICAgIGlmIChhbGxvd01hbGZvcm1lZCkgewogICAgICAgIHBhcnRpYWxTdGF0ZSA9IE5PX1BBUlRJQUw7CiAgICAgICAgYWRkQ2hhckNvZGUoMHhGRkZEKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKCJJbmNvbXBsZXRlIFVURi04IHNlcXVlbmNlIik7CiAgICAgIH0KICAgIH0KICAgIGlmIChpc0xhdGluMSAmJiBjaGFyID4gMHhmZikgewogICAgICBfdG8xNkJpdCgpOyAvLyBBbHNvIGdyb3dzIGEgbGl0dGxlIGlmIGNsb3NlIHRvIGZ1bGwuCiAgICB9CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBpZiAoY2hhciA8PSBNQVhfVEhSRUVfQllURSkgewogICAgICBpZiAobGVuZ3RoID09IGJ1ZmZlci5sZW5ndGgpIF9ncm93KCk7CiAgICAgIGJ1ZmZlcltsZW5ndGhdID0gY2hhcjsKICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGggKyAxOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAobGVuZ3RoICsgMiA+IGJ1ZmZlci5sZW5ndGgpIF9ncm93KCk7CiAgICBpbnQgYml0cyA9IGNoYXIgLSAweDEwMDAwOwogICAgYnVmZmVyW2xlbmd0aF0gPSBMRUFEX1NVUlJPR0FURSB8IChiaXRzID4+IFNISUZUX0hJR0hfU1VSUk9HQVRFKTsKICAgIGJ1ZmZlcltsZW5ndGggKyAxXSA9IFRBSUxfU1VSUk9HQVRFIHwgKGJpdHMgJiBNQVNLX0xPV19TVVJST0dBVEUpOwogICAgdGhpcy5sZW5ndGggPSBsZW5ndGggKyAyOwogIH0KCiAgdm9pZCBfdG8xNkJpdCgpIHsKICAgIGFzc2VydChpc0xhdGluMSk7CiAgICBVaW50MTZMaXN0IG5ld0J1ZmZlcjsKICAgIGlmICgobGVuZ3RoICsgSU5JVElBTF9DQVBBQ0lUWSkgKiAyIDw9IGJ1ZmZlci5sZW5ndGgpIHsKICAgICAgLy8gUmV1c2UgZXhpc3RpbmcgYnVmZmVyIGlmIGl0J3MgYmlnIGVub3VnaC4KICAgICAgbmV3QnVmZmVyID0gbmV3IFVpbnQxNkxpc3QudmlldygoYnVmZmVyIGFzIFVpbnQ4TGlzdCkuYnVmZmVyKTsKICAgIH0gZWxzZSB7CiAgICAgIGludCBuZXdDYXBhY2l0eSA9IGJ1ZmZlci5sZW5ndGg7CiAgICAgIGlmIChuZXdDYXBhY2l0eSAtIGxlbmd0aCA8IElOSVRJQUxfQ0FQQUNJVFkpIHsKICAgICAgICBuZXdDYXBhY2l0eSA9IGxlbmd0aCArIElOSVRJQUxfQ0FQQUNJVFk7CiAgICAgIH0KICAgICAgbmV3QnVmZmVyID0gbmV3IFVpbnQxNkxpc3QobmV3Q2FwYWNpdHkpOwogICAgfQogICAgbmV3QnVmZmVyLnNldFJhbmdlKDAsIGxlbmd0aCwgYnVmZmVyKTsKICAgIGJ1ZmZlciA9IG5ld0J1ZmZlcjsKICAgIGlzTGF0aW4xID0gZmFsc2U7CiAgfQoKICB2b2lkIF9ncm93KCkgewogICAgaW50IG5ld0NhcGFjaXR5ID0gYnVmZmVyLmxlbmd0aCAqIDI7CiAgICBMaXN0IG5ld0J1ZmZlcjsKICAgIGlmIChpc0xhdGluMSkgewogICAgICBuZXdCdWZmZXIgPSBuZXcgVWludDhMaXN0KG5ld0NhcGFjaXR5KTsKICAgIH0gZWxzZSB7CiAgICAgIG5ld0J1ZmZlciA9IG5ldyBVaW50MTZMaXN0KG5ld0NhcGFjaXR5KTsKICAgIH0KICAgIG5ld0J1ZmZlci5zZXRSYW5nZSgwLCBsZW5ndGgsIGJ1ZmZlcik7CiAgICBidWZmZXIgPSBuZXdCdWZmZXI7CiAgfQoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiB1dGY4LCBpbnQgcG9zaXRpb24sIGludCBlbmQpIHsKICAgIGFzc2VydChwb3NpdGlvbiA8IGVuZCk7CiAgICBpZiAocGFydGlhbFN0YXRlID4gMCkgewogICAgICBpbnQgY29udGludWVCeXRlQ291bnQgPSAocGFydGlhbFN0YXRlICYgTUFTS19UV09fQklUKTsKICAgICAgaW50IG1pc3NpbmcgPSAocGFydGlhbFN0YXRlID4+IFNISUZUX01JU1NJTkcpICYgTUFTS19UV09fQklUOwogICAgICBpbnQgdmFsdWUgPSBwYXJ0aWFsU3RhdGUgPj4gU0hJRlRfVkFMVUU7CiAgICAgIHBhcnRpYWxTdGF0ZSA9IE5PX1BBUlRJQUw7CiAgICAgIHBvc2l0aW9uID0gYWRkQ29udGludWF0aW9uKAogICAgICAgICAgdXRmOCwgcG9zaXRpb24sIGVuZCwgY29udGludWVCeXRlQ291bnQsIG1pc3NpbmcsIHZhbHVlKTsKICAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkgcmV0dXJuOwogICAgfQogICAgLy8gS2VlcCBpbmRleCBhbmQgY2FwYWNpdHkgaW4gbG9jYWwgdmFyaWFibGVzIHdoaWxlIGxvb3Bpbmcgb3ZlcgogICAgLy8gQVNDSUkgY2hhcmFjdGVycy4KICAgIGludCBpbmRleCA9IGxlbmd0aDsKICAgIGludCBjYXBhY2l0eSA9IGJ1ZmZlci5sZW5ndGg7CiAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKICAgICAgaW50IGNoYXIgPSB1dGY4W3Bvc2l0aW9uXTsKICAgICAgaWYgKGNoYXIgPD0gTUFYX0FTQ0lJKSB7CiAgICAgICAgaWYgKGluZGV4ID09IGNhcGFjaXR5KSB7CiAgICAgICAgICBsZW5ndGggPSBpbmRleDsKICAgICAgICAgIF9ncm93KCk7CiAgICAgICAgICBjYXBhY2l0eSA9IGJ1ZmZlci5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIGJ1ZmZlcltpbmRleCsrXSA9IGNoYXI7CiAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBsZW5ndGggPSBpbmRleDsKICAgICAgaWYgKChjaGFyICYgTUFTS19DT05USU5VRV9UQUcpID09IENPTlRJTlVFX1RBRykgewogICAgICAgIGlmIChhbGxvd01hbGZvcm1lZCkgewogICAgICAgICAgYWRkQ2hhckNvZGUoMHhGRkZEKTsKICAgICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgVVRGLTggY29udGludWF0aW9uIGJ5dGUiLCB1dGY4LCBwb3NpdGlvbik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGNoYXIgPCAweEUwKSB7CiAgICAgICAgLy8gQzAtREYKICAgICAgICAvLyBUd28tYnl0ZS4KICAgICAgICBwb3NpdGlvbiA9IGFkZENvbnRpbnVhdGlvbigKICAgICAgICAgICAgdXRmOCwgcG9zaXRpb24gKyAxLCBlbmQsIDEsIDEsIGNoYXIgJiBNQVNLX1RXT19CWVRFKTsKICAgICAgfSBlbHNlIGlmIChjaGFyIDwgMHhGMCkgewogICAgICAgIC8vIEUwLUVGCiAgICAgICAgLy8gVGhyZWUtYnl0ZS4KICAgICAgICBwb3NpdGlvbiA9IGFkZENvbnRpbnVhdGlvbigKICAgICAgICAgICAgdXRmOCwgcG9zaXRpb24gKyAxLCBlbmQsIDIsIDIsIGNoYXIgJiBNQVNLX1RIUkVFX0JZVEUpOwogICAgICB9IGVsc2UgaWYgKGNoYXIgPCAweEY4KSB7CiAgICAgICAgLy8gRjAtRjcKICAgICAgICAvLyBGb3VyLWJ5dGUuCiAgICAgICAgcG9zaXRpb24gPSBhZGRDb250aW51YXRpb24oCiAgICAgICAgICAgIHV0ZjgsIHBvc2l0aW9uICsgMSwgZW5kLCAzLCAzLCBjaGFyICYgTUFTS19GT1VSX0JZVEUpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChhbGxvd01hbGZvcm1lZCkgewogICAgICAgICAgYWRkQ2hhckNvZGUoMHhGRkZEKTsKICAgICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICAgIkludmFsaWQgVVRGLTggYnl0ZTogJGNoYXIiLCB1dGY4LCBwb3NpdGlvbik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGluZGV4ID0gbGVuZ3RoOwogICAgICBjYXBhY2l0eSA9IGJ1ZmZlci5sZW5ndGg7CiAgICB9CiAgICBsZW5ndGggPSBpbmRleDsKICB9CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmIChwYXJ0aWFsU3RhdGUgIT0gTk9fUEFSVElBTCkgewogICAgICBpZiAoYWxsb3dNYWxmb3JtZWQpIHsKICAgICAgICBwYXJ0aWFsU3RhdGUgPSBOT19QQVJUSUFMOwogICAgICAgIGFkZENoYXJDb2RlKDB4RkZGRCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW50IGNvbnRpbnVlQnl0ZUNvdW50ID0gKHBhcnRpYWxTdGF0ZSAmIE1BU0tfVFdPX0JJVCk7CiAgICAgICAgaW50IG1pc3NpbmcgPSAocGFydGlhbFN0YXRlID4+IFNISUZUX01JU1NJTkcpICYgTUFTS19UV09fQklUOwogICAgICAgIGludCB2YWx1ZSA9IHBhcnRpYWxTdGF0ZSA+PiBTSElGVF9WQUxVRTsKICAgICAgICBpbnQgc2VlbkJ5dGVDb3VudCA9IGNvbnRpbnVlQnl0ZUNvdW50IC0gbWlzc2luZyArIDE7CiAgICAgICAgTGlzdCBzb3VyY2UgPSBuZXcgVWludDhMaXN0KHNlZW5CeXRlQ291bnQpOwogICAgICAgIHdoaWxlIChzZWVuQnl0ZUNvdW50ID4gMSkgewogICAgICAgICAgc2VlbkJ5dGVDb3VudC0tOwogICAgICAgICAgc291cmNlW3NlZW5CeXRlQ291bnRdID0gQ09OVElOVUVfVEFHIHwgKHZhbHVlICYgTUFTS19DT05USU5VRV9WQUxVRSk7CiAgICAgICAgICB2YWx1ZSA+Pj0gNjsKICAgICAgICB9CiAgICAgICAgc291cmNlWzBdID0gdmFsdWUgfCAoMHgzYzAgPj4gKGNvbnRpbnVlQnl0ZUNvdW50IC0gMSkpOwogICAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICJJbmNvbXBsZXRlIFVURi04IHNlcXVlbmNlIiwgc291cmNlLCBzb3VyY2UubGVuZ3RoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhidWZmZXIsIDAsIGxlbmd0aCk7CiAgfQp9CgovKioKICogQ2h1bmtlZCBKU09OIHBhcnNlciB0aGF0IHBhcnNlcyBVVEYtOCBjaHVua3MuCiAqLwpjbGFzcyBfSnNvblV0ZjhQYXJzZXIgZXh0ZW5kcyBfQ2h1bmtlZEpzb25QYXJzZXI8TGlzdDxpbnQ+PiB7CiAgZmluYWwgYm9vbCBhbGxvd01hbGZvcm1lZDsKICBMaXN0PGludD4gY2h1bms7CiAgaW50IGNodW5rRW5kOwoKICBfSnNvblV0ZjhQYXJzZXIoX0pzb25MaXN0ZW5lciBsaXN0ZW5lciwgdGhpcy5hbGxvd01hbGZvcm1lZCkKICAgICAgOiBzdXBlcihsaXN0ZW5lcikgewogICAgLy8gU3RhcnRzIG91dCBjaGVja2luZyBmb3IgYW4gb3B0aW9uYWwgQk9NIChLV0RfQk9NLCBjb3VudCA9IDApLgogICAgcGFydGlhbFN0YXRlID0KICAgICAgICBfQ2h1bmtlZEpzb25QYXJzZXIuUEFSVElBTF9LRVlXT1JEIHwgX0NodW5rZWRKc29uUGFyc2VyLktXRF9CT007CiAgfQoKICBpbnQgZ2V0Q2hhcihpbnQgcG9zaXRpb24pID0+IGNodW5rW3Bvc2l0aW9uXTsKCiAgU3RyaW5nIGdldFN0cmluZyhpbnQgc3RhcnQsIGludCBlbmQsIGludCBiaXRzKSB7CiAgICBjb25zdCBpbnQgbWF4QXNjaWlDaGFyID0gMHg3ZjsKICAgIGlmIChiaXRzIDw9IG1heEFzY2lpQ2hhcikgewogICAgICByZXR1cm4gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGNodW5rLCBzdGFydCwgZW5kKTsKICAgIH0KICAgIGJlZ2luU3RyaW5nKCk7CiAgICBpZiAoc3RhcnQgPCBlbmQpIGFkZFNsaWNlVG9TdHJpbmcoc3RhcnQsIGVuZCk7CiAgICBTdHJpbmcgcmVzdWx0ID0gZW5kU3RyaW5nKCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCBiZWdpblN0cmluZygpIHsKICAgIHRoaXMuYnVmZmVyID0gbmV3IF9VdGY4U3RyaW5nQnVmZmVyKGFsbG93TWFsZm9ybWVkKTsKICB9CgogIHZvaWQgYWRkU2xpY2VUb1N0cmluZyhpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIF9VdGY4U3RyaW5nQnVmZmVyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyOwogICAgYnVmZmVyLmFkZFNsaWNlKGNodW5rLCBzdGFydCwgZW5kKTsKICB9CgogIHZvaWQgYWRkQ2hhclRvU3RyaW5nKGludCBjaGFyQ29kZSkgewogICAgX1V0ZjhTdHJpbmdCdWZmZXIgYnVmZmVyID0gdGhpcy5idWZmZXI7CiAgICBidWZmZXIuYWRkQ2hhckNvZGUoY2hhckNvZGUpOwogIH0KCiAgU3RyaW5nIGVuZFN0cmluZygpIHsKICAgIF9VdGY4U3RyaW5nQnVmZmVyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyOwogICAgdGhpcy5idWZmZXIgPSBudWxsOwogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgdm9pZCBjb3B5Q2hhcnNUb0xpc3QoaW50IHN0YXJ0LCBpbnQgZW5kLCBMaXN0IHRhcmdldCwgaW50IG9mZnNldCkgewogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgdGFyZ2V0LnNldFJhbmdlKG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoLCBjaHVuaywgc3RhcnQpOwogIH0KCiAgZG91YmxlIHBhcnNlRG91YmxlKGludCBzdGFydCwgaW50IGVuZCkgewogICAgU3RyaW5nIHN0cmluZyA9IGdldFN0cmluZyhzdGFydCwgZW5kLCAweDdmKTsKICAgIHJldHVybiBfcGFyc2VEb3VibGUoc3RyaW5nLCAwLCBzdHJpbmcubGVuZ3RoKTsKICB9Cn0KCmRvdWJsZSBfcGFyc2VEb3VibGUoU3RyaW5nIHNvdXJjZSwgaW50IHN0YXJ0LCBpbnQgZW5kKSBuYXRpdmUgIkRvdWJsZV9wYXJzZSI7CgovKioKICogSW1wbGVtZW50cyB0aGUgY2h1bmtlZCBjb252ZXJzaW9uIGZyb20gYSBVVEYtOCBlbmNvZGluZyBvZiBKU09OCiAqIHRvIGl0cyBjb3JyZXNwb25kaW5nIG9iamVjdC4KICovCmNsYXNzIF9Kc29uVXRmOERlY29kZXJTaW5rIGV4dGVuZHMgQnl0ZUNvbnZlcnNpb25TaW5rQmFzZSB7CiAgZmluYWwgX0pzb25VdGY4UGFyc2VyIF9wYXJzZXI7CiAgZmluYWwgU2luazxPYmplY3Q+IF9zaW5rOwoKICBfSnNvblV0ZjhEZWNvZGVyU2luayhyZXZpdmVyLCB0aGlzLl9zaW5rLCBib29sIGFsbG93TWFsZm9ybWVkKQogICAgICA6IF9wYXJzZXIgPSBfY3JlYXRlUGFyc2VyKHJldml2ZXIsIGFsbG93TWFsZm9ybWVkKTsKCiAgc3RhdGljIF9Kc29uVXRmOFBhcnNlciBfY3JlYXRlUGFyc2VyKHJldml2ZXIsIGJvb2wgYWxsb3dNYWxmb3JtZWQpIHsKICAgIF9CdWlsZEpzb25MaXN0ZW5lciBsaXN0ZW5lcjsKICAgIGlmIChyZXZpdmVyID09IG51bGwpIHsKICAgICAgbGlzdGVuZXIgPSBuZXcgX0J1aWxkSnNvbkxpc3RlbmVyKCk7CiAgICB9IGVsc2UgewogICAgICBsaXN0ZW5lciA9IG5ldyBfUmV2aXZlckpzb25MaXN0ZW5lcihyZXZpdmVyKTsKICAgIH0KICAgIHJldHVybiBuZXcgX0pzb25VdGY4UGFyc2VyKGxpc3RlbmVyLCBhbGxvd01hbGZvcm1lZCk7CiAgfQoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgX2FkZENodW5rKGNodW5rLCBzdGFydCwgZW5kKTsKICAgIGlmIChpc0xhc3QpIGNsb3NlKCk7CiAgfQoKICB2b2lkIGFkZChMaXN0PGludD4gY2h1bmspIHsKICAgIF9hZGRDaHVuayhjaHVuaywgMCwgY2h1bmsubGVuZ3RoKTsKICB9CgogIHZvaWQgX2FkZENodW5rKExpc3Q8aW50PiBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBfcGFyc2VyLmNodW5rID0gY2h1bms7CiAgICBfcGFyc2VyLmNodW5rRW5kID0gZW5kOwogICAgX3BhcnNlci5wYXJzZShzdGFydCk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX3BhcnNlci5jbG9zZSgpOwogICAgdmFyIGRlY29kZWQgPSBfcGFyc2VyLnJlc3VsdDsKICAgIF9zaW5rLmFkZChkZWNvZGVkKTsKICAgIF9zaW5rLmNsb3NlKCk7CiAgfQp9CgpAcGF0Y2gKaW50IF9zY2FuT25lQnl0ZUNoYXJhY3RlcnMoTGlzdDxpbnQ+IHVuaXRzLCBpbnQgZnJvbSwgaW50IGVuZEluZGV4KSB7CiAgZmluYWwgdG8gPSBlbmRJbmRleDsKCiAgLy8gU3BlY2lhbCBjYXNlIGZvciBfVWludDhBcnJheVZpZXcuCiAgaWYgKHVuaXRzIGlzIFVpbnQ4TGlzdCkgewogICAgaWYgKGZyb20gPj0gMCAmJiB0byA+PSAwICYmIHRvIDw9IHVuaXRzLmxlbmd0aCkgewogICAgICBmb3IgKGludCBpID0gZnJvbTsgaSA8IHRvOyBpKyspIHsKICAgICAgICBmaW5hbCB1bml0ID0gdW5pdHNbaV07CiAgICAgICAgaWYgKCh1bml0ICYgX09ORV9CWVRFX0xJTUlUKSAhPSB1bml0KSByZXR1cm4gaSAtIGZyb207CiAgICAgIH0KICAgICAgcmV0dXJuIHRvIC0gZnJvbTsKICAgIH0KICB9CgogIC8vIEZhbGwgdGhyb3VnaCB0byBub3JtYWwgY2FzZS4KICBmb3IgKHZhciBpID0gZnJvbTsgaSA8IHRvOyBpKyspIHsKICAgIGZpbmFsIHVuaXQgPSB1bml0c1tpXTsKICAgIGlmICgodW5pdCAmIF9PTkVfQllURV9MSU1JVCkgIT0gdW5pdCkgcmV0dXJuIGkgLSBmcm9tOwogIH0KICByZXR1cm4gdG8gLSBmcm9tOwp9CodYAE5OPAEPAU1NSysBPAE1ATABFAEHMR8ZKQsyBDAZIxMSGgIBBxQJPx8jRDIGUCAEAUoJJUYzBAIBPjUeATkBJFAaJBUUGgQBQUYEAgFQASABBDoEHyUiIRcYGRoWFxkVAQY5BUAGDgIBBEYDS0sEMQYtBURJKAYTMhguDicNAUYZMSEEAVEYHis7BAEkGAQBIRgEASAYBAEWFwQBFxUsBAEYERIEARkgFhgEARUUBAEWFRsEARghEgQBFBQEAT0PJhIEAgE4NCYBGCIpGgQBGSEbBAEPIQQCAQQmAzhEA0wDBBYlKRISJUEBIwFCQEBEPSoxJTdIGAQBKCkgLDQvGQQBFz8TBAFJTxIsNQIBBBgDTSoDNwQnOQVONUM4RkZARUFBRz8JS01GRyQ/S0ABJSIlJj0BPj0kJCMBSEkeIzYBP0RCAUtNTwFNTU9NUQE7QDwBHyUfIyslISEgISEoISIiISIkJSQiIiIiIiIiIiIiIiIBLCMnKCglAUs3PkYvTTRKPkcBIUQxQUpJASInJzs7PThFASslASABIB0eAQYsBUAvBUZHSBsFMwU2BToyKlFRBShQREwtBS8vMEpKKFBABiEBBjhPBTgGFQElAQYwBUBLBh4XBAEGLgYXNAQBBhwFRUVJDAVIPjZLBhEmNSw1SkkrLBwzMi8PMC8IBh4WBgQBBkAFTisGFhwEASgcAQYeBT8GFAEGHwVPBg8BBjAFQE4RBhoBBkMFUQZKAQYsBUYVUEQGFgY2BSkGJgEGOAU9Bi0BRhYBBkIFSiJHGAU/BUkcOkEGMgEGNQVHSzQFKwYlQzgEAQY1BStDIwYrQzsEAQYoBiMvKigzJDEeKT0xPTE+BhUEAQY+BSVJTEUrBjQaMygYGA8GLCQhHxocHhMfDBYwJCERIQoIH0kvGwgjGSYdMBsTPx0MChQuIh8IHi4fCCcZKRsTPx0MChQuIh8IHC0eFjAkIQoIHhsdFC4iHwg5FwZOHS8VBAEGMQU/HAY7JSwGJi5BMSwGKTNEMkUkJzoiBhwqBAEGKgY8NDE6FUskCSIcSBkINC8aKhsKHwgSDyYjHSk0BhUEAVAgHSInKTYPBAEGMgVCQAYdGyYpJgYcICQWFB4WEhYRFEckMBEXRiEcJRYRFUYiHCYWERVGJCoRFUYkKxEVRiQqERRAIyYWERQtJigYMyUnGBMjDBEXLCEzJSETIww0FhEVLSI0JiITIww0FhERPyQyEQgGGAQBBjUFMwYgKSM9BisrKx0GHxkEAQY2BTMGISkjPwYrKysrHQYgGQQBBjUFMwYgKSM9BisrKx0GGxkEAUE2GxoTIiQ/DwZNEwQBBhwFOjQGIjkyGhgSHSZDMx4SCB8XJUEuCBtFGQgaQggGEzMjBAEGJQVLPRsGJTEVBAEGSwVESU4FSQYxJBAnJhUEAQY9BUtFUQVMPwYqGBoTHSAtCicIJiYaQwgbKiUyCiwZCB8SCBgiLwg7LiwYBh8EAQYcBTRMOAU+BigkGxQTGg8TGg8TGA8TIA8TFA8SFhIPEyUXJkcmIxccHBMsKj8OIQwKFg8PUD0GGzsVBAEnPS8YHiwxHBoxEAQBUB4fIysoNR4EAUFIGEgaMRAEAU8dIBIGFy0GHiUkQTMNNQYQBAEsMA88GhtOMjwWRTMSG0dJSRkREkggBh8VFjIPNhgIBhYSSCAdQiYNGgsgIVAmLFAdSDcxDAoqFhRLIh8cBiAXGUQIFBJHIB0lCzIXFE8iHxwGIxcZRBYIEkUgFxgxPBRMIggdFzIIJQsqNRRNIh8cHjE4ESFFChkIJgYVSjg9FwZPNTYoHzIdHEwbCh0xGwoeSxsKCAY+TlA5FQQBKRsoRQY5BAIBBDQEPRAQAT8BOwEzKAQBFyYEAS4nLwQBJyckBAEXJxgeBAFGHic4BgQBKywEAgEHFAlDPAQCAQRNCwNDBEAdNRwBNCsBNCEbKw00BiwEAUEbHBohBAEbLQQBERUiGBMEATcURgQCARoqHSgtJiQjASAkKSwrKSsqLS8oASAsLC4vAUs0NiMSSRUhSEtMGEUNFwEqAQY8BUtPHgVEQjYwBUpNHwYXUSYJHSYXSBQIITgeHxsKIzEbEhcIORIiTR0cGA8jTS4SGwgGGBUEAR8XISYcIx0PQAgGIzsGHiIsHSAOBi0fRkceBAEUFho8M0UNJzUxCC8GKxgWBAERKRQULg0vBisYBAE5HBw9RC8hIkMjBkUZGCIdIR8hGhMkCiAUEggWOB4fFhElRQogERUkQiARFyREIBEWJEMPHh8WESU8CggWIAYUBAEWJhwjHQ8/RjE9NCQbUBcKQCNBCAY4BAIBBDEEPh0TEAE/GkUTSQQBMAEzIyA6BhMzIRMEARc5BAEuLCgEAScsIgQBFywYHgQBRh48BAErMTMEAgFOAQRDIAQ8IRwBQToBRyEbKw00BjoEAUQiGQQBHicEATgbHBoEAREVIhgTBAIBB0YXASccNigfPwgYBgQBIiQbOwQUAgElZGFydDpjb252ZXJ0LXBhdGNoL2NvbnZlcnRfcGF0Y2guZGFydD9vcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9jb252ZXJ0L2FzY2lpLmRhcnSlHi8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmNvbnZlcnQ7CgovLy8gQW4gaW5zdGFuY2Ugb2YgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFtBc2NpaUNvZGVjXS4KLy8vCi8vLyBUaGlzIGluc3RhbmNlIHByb3ZpZGVzIGEgY29udmVuaWVudCBhY2Nlc3MgdG8gdGhlIG1vc3QgY29tbW9uIEFTQ0lJCi8vLyB1c2UgY2FzZXMuCi8vLwovLy8gRXhhbXBsZXM6Ci8vLyBgYGBkYXJ0Ci8vLyB2YXIgZW5jb2RlZCA9IGFzY2lpLmVuY29kZSgiVGhpcyBpcyBBU0NJSSEiKTsKLy8vIHZhciBkZWNvZGVkID0gYXNjaWkuZGVjb2RlKFsweDU0LCAweDY4LCAweDY5LCAweDczLCAweDIwLCAweDY5LCAweDczLAovLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsIDB4NDEsIDB4NTMsIDB4NDMsIDB4NDksIDB4NDksIDB4MjFdKTsKLy8vIGBgYApjb25zdCBBc2NpaUNvZGVjIGFzY2lpID0gQXNjaWlDb2RlYygpOwoKY29uc3QgaW50IF9hc2NpaU1hc2sgPSAweDdGOwoKLy8vIEFuIFtBc2NpaUNvZGVjXSBhbGxvd3MgZW5jb2Rpbmcgc3RyaW5ncyBhcyBBU0NJSSBieXRlcwovLy8gYW5kIGRlY29kaW5nIEFTQ0lJIGJ5dGVzIHRvIHN0cmluZ3MuCmNsYXNzIEFzY2lpQ29kZWMgZXh0ZW5kcyBFbmNvZGluZyB7CiAgZmluYWwgYm9vbCBfYWxsb3dJbnZhbGlkOwoKICAvLy8gSW5zdGFudGlhdGVzIGEgbmV3IFtBc2NpaUNvZGVjXS4KICAvLy8KICAvLy8gSWYgW2FsbG93SW52YWxpZF0gaXMgdHJ1ZSwgdGhlIFtkZWNvZGVdIG1ldGhvZCBhbmQgdGhlIGNvbnZlcnRlcgogIC8vLyByZXR1cm5lZCBieSBbZGVjb2Rlcl0gd2lsbCBkZWZhdWx0IHRvIGFsbG93aW5nIGludmFsaWQgdmFsdWVzLgogIC8vLyBJZiBhbGxvd2luZyBpbnZhbGlkIHZhbHVlcywgdGhlIHZhbHVlcyB3aWxsIGJlIGRlY29kZWQgaW50byB0aGUgVW5pY29kZQogIC8vLyBSZXBsYWNlbWVudCBjaGFyYWN0ZXIgKFUrRkZGRCkuIElmIG5vdCwgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgogIC8vLyBDYWxscyB0byB0aGUgW2RlY29kZV0gbWV0aG9kIGNhbiBjaG9vc2UgdG8gb3ZlcnJpZGUgdGhpcyBkZWZhdWx0LgogIC8vLwogIC8vLyBFbmNvZGVycyB3aWxsIG5vdCBhY2NlcHQgaW52YWxpZCAobm9uIEFTQ0lJKSBjaGFyYWN0ZXJzLgogIGNvbnN0IEFzY2lpQ29kZWMoe2Jvb2wgYWxsb3dJbnZhbGlkID0gZmFsc2V9KSA6IF9hbGxvd0ludmFsaWQgPSBhbGxvd0ludmFsaWQ7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGlzIGNvZGVjLCAidXMtYXNjaWkiLgogIFN0cmluZyBnZXQgbmFtZSA9PiAidXMtYXNjaWkiOwoKICBVaW50OExpc3QgZW5jb2RlKFN0cmluZyBzb3VyY2UpID0+IGVuY29kZXIuY29udmVydChzb3VyY2UpOwoKICAvLy8gRGVjb2RlcyB0aGUgQVNDSUkgW2J5dGVzXSAoYSBsaXN0IG9mIHVuc2lnbmVkIDctYml0IGludGVnZXJzKSB0byB0aGUKICAvLy8gY29ycmVzcG9uZGluZyBzdHJpbmcuCiAgLy8vCiAgLy8vIElmIFtieXRlc10gY29udGFpbnMgdmFsdWVzIHRoYXQgYXJlIG5vdCBpbiB0aGUgcmFuZ2UgMCAuLiAxMjcsIHRoZSBkZWNvZGVyCiAgLy8vIHdpbGwgZXZlbnR1YWxseSB0aHJvdyBhIFtGb3JtYXRFeGNlcHRpb25dLgogIC8vLwogIC8vLyBJZiBbYWxsb3dJbnZhbGlkXSBpcyBub3QgcHJvdmlkZWQsIGl0IGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSB1c2VkIHRvIGNyZWF0ZQogIC8vLyB0aGlzIFtBc2NpaUNvZGVjXS4KICBTdHJpbmcgZGVjb2RlKExpc3Q8aW50PiBieXRlcywge2Jvb2wgYWxsb3dJbnZhbGlkfSkgewogICAgYWxsb3dJbnZhbGlkID8/PSBfYWxsb3dJbnZhbGlkOwogICAgaWYgKGFsbG93SW52YWxpZCkgewogICAgICByZXR1cm4gY29uc3QgQXNjaWlEZWNvZGVyKGFsbG93SW52YWxpZDogdHJ1ZSkuY29udmVydChieXRlcyk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gY29uc3QgQXNjaWlEZWNvZGVyKGFsbG93SW52YWxpZDogZmFsc2UpLmNvbnZlcnQoYnl0ZXMpOwogICAgfQogIH0KCiAgQXNjaWlFbmNvZGVyIGdldCBlbmNvZGVyID0+IGNvbnN0IEFzY2lpRW5jb2RlcigpOwoKICBBc2NpaURlY29kZXIgZ2V0IGRlY29kZXIgPT4gX2FsbG93SW52YWxpZAogICAgICA/IGNvbnN0IEFzY2lpRGVjb2RlcihhbGxvd0ludmFsaWQ6IHRydWUpCiAgICAgIDogY29uc3QgQXNjaWlEZWNvZGVyKGFsbG93SW52YWxpZDogZmFsc2UpOwp9CgovLyBTdXBlcmNsYXNzIGZvciBbQXNjaWlFbmNvZGVyXSBhbmQgW0xhdGluMUVuY29kZXJdLgovLyBHZW5lcmFsaXplcyBjb21tb24gb3BlcmF0aW9ucyB0aGF0IG9ubHkgZGlmZmVyIGJ5IGEgbWFzazsKY2xhc3MgX1VuaWNvZGVTdWJzZXRFbmNvZGVyIGV4dGVuZHMgQ29udmVydGVyPFN0cmluZywgTGlzdDxpbnQ+PiB7CiAgZmluYWwgaW50IF9zdWJzZXRNYXNrOwoKICBjb25zdCBfVW5pY29kZVN1YnNldEVuY29kZXIodGhpcy5fc3Vic2V0TWFzayk7CgogIC8vLyBDb252ZXJ0cyB0aGUgW1N0cmluZ10gaW50byBhIGxpc3Qgb2YgaXRzIGNvZGUgdW5pdHMuCiAgLy8vCiAgLy8vIElmIFtzdGFydF0gYW5kIFtlbmRdIGFyZSBwcm92aWRlZCwgb25seSB0aGUgc3Vic3RyaW5nCiAgLy8vIGBzdHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpYCBpcyB1c2VkIGFzIGlucHV0IHRvIHRoZSBjb252ZXJzaW9uLgogIFVpbnQ4TGlzdCBjb252ZXJ0KFN0cmluZyBzdHJpbmcsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgdmFyIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGg7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBzdHJpbmdMZW5ndGgpOwogICAgdmFyIGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgdmFyIHJlc3VsdCA9IFVpbnQ4TGlzdChsZW5ndGgpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB2YXIgY29kZVVuaXQgPSBzdHJpbmcuY29kZVVuaXRBdChzdGFydCArIGkpOwogICAgICBpZiAoKGNvZGVVbml0ICYgfl9zdWJzZXRNYXNrKSAhPSAwKSB7CiAgICAgICAgdGhyb3cgQXJndW1lbnRFcnJvci52YWx1ZSgKICAgICAgICAgICAgc3RyaW5nLCAic3RyaW5nIiwgIkNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycy4iKTsKICAgICAgfQogICAgICByZXN1bHRbaV0gPSBjb2RlVW5pdDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gU3RhcnRzIGEgY2h1bmtlZCBjb252ZXJzaW9uLgogIC8vLwogIC8vLyBUaGUgY29udmVydGVyIHdvcmtzIG1vcmUgZWZmaWNpZW50bHkgaWYgdGhlIGdpdmVuIFtzaW5rXSBpcyBhCiAgLy8vIFtCeXRlQ29udmVyc2lvblNpbmtdLgogIFN0cmluZ0NvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxMaXN0PGludD4+IHNpbmspIHsKICAgIHJldHVybiBfVW5pY29kZVN1YnNldEVuY29kZXJTaW5rKF9zdWJzZXRNYXNrLAogICAgICAgIHNpbmsgaXMgQnl0ZUNvbnZlcnNpb25TaW5rID8gc2luayA6IEJ5dGVDb252ZXJzaW9uU2luay5mcm9tKHNpbmspKTsKICB9CgogIC8vIE92ZXJyaWRlIHRoZSBiYXNlLWNsYXNzJyBiaW5kLCB0byBwcm92aWRlIGEgYmV0dGVyIHR5cGUuCiAgU3RyZWFtPExpc3Q8aW50Pj4gYmluZChTdHJlYW08U3RyaW5nPiBzdHJlYW0pID0+IHN1cGVyLmJpbmQoc3RyZWFtKTsKfQoKLy8vIFRoaXMgY2xhc3MgY29udmVydHMgc3RyaW5ncyBvZiBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMgdG8gYnl0ZXMuCmNsYXNzIEFzY2lpRW5jb2RlciBleHRlbmRzIF9Vbmljb2RlU3Vic2V0RW5jb2RlciB7CiAgY29uc3QgQXNjaWlFbmNvZGVyKCkgOiBzdXBlcihfYXNjaWlNYXNrKTsKfQoKLy8vIFRoaXMgY2xhc3MgZW5jb2RlcyBjaHVua2VkIHN0cmluZ3MgdG8gYnl0ZXMgKHVuc2lnbmVkIDgtYml0Ci8vLyBpbnRlZ2VycykuCmNsYXNzIF9Vbmljb2RlU3Vic2V0RW5jb2RlclNpbmsgZXh0ZW5kcyBTdHJpbmdDb252ZXJzaW9uU2lua0Jhc2UgewogIGZpbmFsIEJ5dGVDb252ZXJzaW9uU2luayBfc2luazsKICBmaW5hbCBpbnQgX3N1YnNldE1hc2s7CgogIF9Vbmljb2RlU3Vic2V0RW5jb2RlclNpbmsodGhpcy5fc3Vic2V0TWFzaywgdGhpcy5fc2luayk7CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfc2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCBhZGRTbGljZShTdHJpbmcgc291cmNlLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBzb3VyY2UubGVuZ3RoKTsKICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIHZhciBjb2RlVW5pdCA9IHNvdXJjZS5jb2RlVW5pdEF0KGkpOwogICAgICBpZiAoKGNvZGVVbml0ICYgfl9zdWJzZXRNYXNrKSAhPSAwKSB7CiAgICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigKICAgICAgICAgICAgIlNvdXJjZSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlciB3aXRoIGNvZGUgcG9pbnQ6ICRjb2RlVW5pdC4iKTsKICAgICAgfQogICAgfQogICAgX3NpbmsuYWRkKHNvdXJjZS5jb2RlVW5pdHMuc3VibGlzdChzdGFydCwgZW5kKSk7CiAgICBpZiAoaXNMYXN0KSB7CiAgICAgIGNsb3NlKCk7CiAgICB9CiAgfQp9CgovLy8gVGhpcyBjbGFzcyBjb252ZXJ0cyBMYXRpbi0xIGJ5dGVzIChsaXN0cyBvZiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VycykKLy8vIHRvIGEgc3RyaW5nLgphYnN0cmFjdCBjbGFzcyBfVW5pY29kZVN1YnNldERlY29kZXIgZXh0ZW5kcyBDb252ZXJ0ZXI8TGlzdDxpbnQ+LCBTdHJpbmc+IHsKICBmaW5hbCBib29sIF9hbGxvd0ludmFsaWQ7CiAgZmluYWwgaW50IF9zdWJzZXRNYXNrOwoKICAvLy8gSW5zdGFudGlhdGVzIGEgbmV3IGRlY29kZXIuCiAgLy8vCiAgLy8vIFRoZSBbX2FsbG93SW52YWxpZF0gYXJndW1lbnQgZGVmaW5lcyBob3cgW2NvbnZlcnRdIGRlYWxzCiAgLy8vIHdpdGggaW52YWxpZCBieXRlcy4KICAvLy8KICAvLy8gVGhlIFtfc3Vic2V0TWFza10gYXJndW1lbnQgaXMgYSBiaXQgbWFzayB1c2VkIHRvIGRlZmluZSB0aGUgc3Vic2V0CiAgLy8vIG9mIFVuaWNvZGUgYmVpbmcgZGVjb2RlZC4gVXNlIFtfTEFUSU4xX01BU0tdIGZvciBMYXRpbi0xICg4LWJpdCkgb3IKICAvLy8gW19hc2NpaU1hc2tdIGZvciBBU0NJSSAoNy1iaXQpLgogIC8vLwogIC8vLyBJZiBbX2FsbG93SW52YWxpZF0gaXMgYHRydWVgLCBbY29udmVydF0gcmVwbGFjZXMgaW52YWxpZCBieXRlcyB3aXRoIHRoZQogIC8vLyBVbmljb2RlIFJlcGxhY2VtZW50IGNoYXJhY3RlciBgVStGRkZEYCAo77+9KS4KICAvLy8gT3RoZXJ3aXNlIGl0IHRocm93cyBhIFtGb3JtYXRFeGNlcHRpb25dLgogIGNvbnN0IF9Vbmljb2RlU3Vic2V0RGVjb2Rlcih0aGlzLl9hbGxvd0ludmFsaWQsIHRoaXMuX3N1YnNldE1hc2spOwoKICAvLy8gQ29udmVydHMgdGhlIFtieXRlc10gKGEgbGlzdCBvZiB1bnNpZ25lZCA3LSBvciA4LWJpdCBpbnRlZ2VycykgdG8gdGhlCiAgLy8vIGNvcnJlc3BvbmRpbmcgc3RyaW5nLgogIC8vLwogIC8vLyBJZiBbc3RhcnRdIGFuZCBbZW5kXSBhcmUgcHJvdmlkZWQsIG9ubHkgdGhlIHN1Yi1saXN0IG9mIGJ5dGVzIGZyb20KICAvLy8gYHN0YXJ0YCB0byBgZW5kYCAoYGVuZGAgbm90IGluY2x1c2l2ZSkgaXMgdXNlZCBhcyBpbnB1dCB0byB0aGUgY29udmVyc2lvbi4KICBTdHJpbmcgY29udmVydChMaXN0PGludD4gYnl0ZXMsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgdmFyIGJ5dGVDb3VudCA9IGJ5dGVzLmxlbmd0aDsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGJ5dGVDb3VudCk7CiAgICBlbmQgPz89IGJ5dGVDb3VudDsKCiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICB2YXIgYnl0ZSA9IGJ5dGVzW2ldOwogICAgICBpZiAoKGJ5dGUgJiB+X3N1YnNldE1hc2spICE9IDApIHsKICAgICAgICBpZiAoIV9hbGxvd0ludmFsaWQpIHsKICAgICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCB2YWx1ZSBpbiBpbnB1dDogJGJ5dGUiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9jb252ZXJ0SW52YWxpZChieXRlcywgc3RhcnQsIGVuZCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlcyhieXRlcywgc3RhcnQsIGVuZCk7CiAgfQoKICBTdHJpbmcgX2NvbnZlcnRJbnZhbGlkKExpc3Q8aW50PiBieXRlcywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICB2YXIgYnVmZmVyID0gU3RyaW5nQnVmZmVyKCk7CiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICB2YXIgdmFsdWUgPSBieXRlc1tpXTsKICAgICAgaWYgKCh2YWx1ZSAmIH5fc3Vic2V0TWFzaykgIT0gMCkgdmFsdWUgPSAweEZGRkQ7CiAgICAgIGJ1ZmZlci53cml0ZUNoYXJDb2RlKHZhbHVlKTsKICAgIH0KICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIC8vLyBTdGFydHMgYSBjaHVua2VkIGNvbnZlcnNpb24uCiAgLy8vCiAgLy8vIFRoZSBjb252ZXJ0ZXIgd29ya3MgbW9yZSBlZmZpY2llbnRseSBpZiB0aGUgZ2l2ZW4gW3NpbmtdIGlzIGEKICAvLy8gW1N0cmluZ0NvbnZlcnNpb25TaW5rXS4KICBCeXRlQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPFN0cmluZz4gc2luayk7CgogIC8vIE92ZXJyaWRlIHRoZSBiYXNlLWNsYXNzJ3MgYmluZCwgdG8gcHJvdmlkZSBhIGJldHRlciB0eXBlLgogIFN0cmVhbTxTdHJpbmc+IGJpbmQoU3RyZWFtPExpc3Q8aW50Pj4gc3RyZWFtKSA9PiBzdXBlci5iaW5kKHN0cmVhbSk7Cn0KCmNsYXNzIEFzY2lpRGVjb2RlciBleHRlbmRzIF9Vbmljb2RlU3Vic2V0RGVjb2RlciB7CiAgY29uc3QgQXNjaWlEZWNvZGVyKHtib29sIGFsbG93SW52YWxpZCA9IGZhbHNlfSkKICAgICAgOiBzdXBlcihhbGxvd0ludmFsaWQsIF9hc2NpaU1hc2spOwoKICAvLy8gU3RhcnRzIGEgY2h1bmtlZCBjb252ZXJzaW9uLgogIC8vLwogIC8vLyBUaGUgY29udmVydGVyIHdvcmtzIG1vcmUgZWZmaWNpZW50bHkgaWYgdGhlIGdpdmVuIFtzaW5rXSBpcyBhCiAgLy8vIFtTdHJpbmdDb252ZXJzaW9uU2lua10uCiAgQnl0ZUNvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxTdHJpbmc+IHNpbmspIHsKICAgIFN0cmluZ0NvbnZlcnNpb25TaW5rIHN0cmluZ1Npbms7CiAgICBpZiAoc2luayBpcyBTdHJpbmdDb252ZXJzaW9uU2luaykgewogICAgICBzdHJpbmdTaW5rID0gc2luazsKICAgIH0gZWxzZSB7CiAgICAgIHN0cmluZ1NpbmsgPSBTdHJpbmdDb252ZXJzaW9uU2luay5mcm9tKHNpbmspOwogICAgfQogICAgLy8gVE9ETyhscm4pOiBVc2UgYXNVdGYxNlNpbmsgd2hlbiBpdCBiZWNvbWVzIGF2YWlsYWJsZS4gSXQKICAgIC8vIHdvcmtzIGp1c3QgYXMgd2VsbCwgaXMgbGlrZWx5IHRvIGhhdmUgbGVzcyBkZWNvZGluZyBvdmVyaGVhZCwKICAgIC8vIGFuZCBtYWtlIGFkZGluZyBVK0ZGRkQgZWFzaWVyLgogICAgLy8gQXQgdGhhdCB0aW1lLCBtZXJnZSB0aGlzIHdpdGggX0xhdGluMURlY29kZXJTaW5rOwogICAgaWYgKF9hbGxvd0ludmFsaWQpIHsKICAgICAgcmV0dXJuIF9FcnJvckhhbmRsaW5nQXNjaWlEZWNvZGVyU2luayhzdHJpbmdTaW5rLmFzVXRmOFNpbmsoZmFsc2UpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfU2ltcGxlQXNjaWlEZWNvZGVyU2luayhzdHJpbmdTaW5rKTsKICAgIH0KICB9Cn0KCmNsYXNzIF9FcnJvckhhbmRsaW5nQXNjaWlEZWNvZGVyU2luayBleHRlbmRzIEJ5dGVDb252ZXJzaW9uU2lua0Jhc2UgewogIEJ5dGVDb252ZXJzaW9uU2luayBfdXRmOFNpbms7CiAgX0Vycm9ySGFuZGxpbmdBc2NpaURlY29kZXJTaW5rKHRoaXMuX3V0ZjhTaW5rKTsKCiAgdm9pZCBjbG9zZSgpIHsKICAgIF91dGY4U2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IHNvdXJjZSkgewogICAgYWRkU2xpY2Uoc291cmNlLCAwLCBzb3VyY2UubGVuZ3RoLCBmYWxzZSk7CiAgfQoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiBzb3VyY2UsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHNvdXJjZS5sZW5ndGgpOwogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgaWYgKChzb3VyY2VbaV0gJiB+X2FzY2lpTWFzaykgIT0gMCkgewogICAgICAgIGlmIChpID4gc3RhcnQpIF91dGY4U2luay5hZGRTbGljZShzb3VyY2UsIHN0YXJ0LCBpLCBmYWxzZSk7CiAgICAgICAgLy8gQWRkIFVURi04IGVuY29kaW5nIG9mIFUrRkZGRC4KICAgICAgICBfdXRmOFNpbmsuYWRkKGNvbnN0IDxpbnQ+WzB4RUYsIDB4QkYsIDB4QkRdKTsKICAgICAgICBzdGFydCA9IGkgKyAxOwogICAgICB9CiAgICB9CiAgICBpZiAoc3RhcnQgPCBlbmQpIHsKICAgICAgX3V0ZjhTaW5rLmFkZFNsaWNlKHNvdXJjZSwgc3RhcnQsIGVuZCwgaXNMYXN0KTsKICAgIH0gZWxzZSBpZiAoaXNMYXN0KSB7CiAgICAgIGNsb3NlKCk7CiAgICB9CiAgfQp9CgpjbGFzcyBfU2ltcGxlQXNjaWlEZWNvZGVyU2luayBleHRlbmRzIEJ5dGVDb252ZXJzaW9uU2lua0Jhc2UgewogIFNpbmsgX3Npbms7CiAgX1NpbXBsZUFzY2lpRGVjb2RlclNpbmsodGhpcy5fc2luayk7CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfc2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IHNvdXJjZSkgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKChzb3VyY2VbaV0gJiB+X2FzY2lpTWFzaykgIT0gMCkgewogICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiU291cmNlIGNvbnRhaW5zIG5vbi1BU0NJSSBieXRlcy4iKTsKICAgICAgfQogICAgfQogICAgX3NpbmsuYWRkKFN0cmluZy5mcm9tQ2hhckNvZGVzKHNvdXJjZSkpOwogIH0KCiAgdm9pZCBhZGRTbGljZShMaXN0PGludD4gc291cmNlLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBmaW5hbCBsZW5ndGggPSBzb3VyY2UubGVuZ3RoOwogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgbGVuZ3RoKTsKICAgIGlmIChzdGFydCA8IGVuZCkgewogICAgICBpZiAoc3RhcnQgIT0gMCB8fCBlbmQgIT0gbGVuZ3RoKSB7CiAgICAgICAgc291cmNlID0gc291cmNlLnN1Ymxpc3Qoc3RhcnQsIGVuZCk7CiAgICAgIH0KICAgICAgYWRkKHNvdXJjZSk7CiAgICB9CiAgICBpZiAoaXNMYXN0KSBjbG9zZSgpOwogIH0KfQqBIwBOTjwBDwEWAUMESA8EDgwySkwIJwEdATspJBwBJwZHRU5LSAY/UAEqIQE+AUscBlExBlEZOCQYRA1FBgQBNAEsLzECATY9QxkBMQE7BjxJPyZAHiQnMywjPwgcBhMEASMGRBxGMkwEAT5HAgFDMywCAUAPQyIZATsBERMEAUI7KCssHU4IBjUSDwYEAgFJEUwcGQEiBj8aBklKJgZOMi9FAUwcBklRPiI3FwEoGygeQgozCAY0BAFAISgcNyMGHgQBIwZEHkABP0cCATMyKQEjBkQeQSUoGQ00BkBFJjkZSw0yBgQCAUYgMgERFwQBHy8EAUU7KCxEKTYXCAYXNhkPBgQCAT8OJwEREwQBHy4sQwgGLQQBRSI0FyktCBMGGQQCARdkYXJ0OmNvbnZlcnQvYXNjaWkuZGFydEBvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9jb252ZXJ0L2Jhc2U2NC5kYXJ0wAB7Di8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmNvbnZlcnQ7CgovLy8gQSBbYmFzZTY0XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDY0OCkgZW5jb2RlciBhbmQgZGVjb2Rlci4KLy8vCi8vLyBJdCBlbmNvZGVzIHVzaW5nIHRoZSBkZWZhdWx0IGJhc2U2NCBhbHBoYWJldCwKLy8vIGRlY29kZXMgdXNpbmcgYm90aCB0aGUgYmFzZTY0IGFuZCBiYXNlNjR1cmwgYWxwaGFiZXRzLAovLy8gZG9lcyBub3QgYWxsb3cgaW52YWxpZCBjaGFyYWN0ZXJzIGFuZCByZXF1aXJlcyBwYWRkaW5nLgovLy8KLy8vIEV4YW1wbGVzOgovLy8KLy8vICAgICB2YXIgZW5jb2RlZCA9IGJhc2U2NC5lbmNvZGUoWzB4NjIsIDB4NmMsIDB4YzMsIDB4YTUsIDB4NjIsIDB4YzMsIDB4YTYsCi8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcyLCAweDY3LCAweDcyLCAweGMzLCAweGI4LCAweDY0XSk7Ci8vLyAgICAgdmFyIGRlY29kZWQgPSBiYXNlNjQuZGVjb2RlKCJZbXpEcFdMRHBuSm5jc080WkFvPSIpOwovLy8KLy8vIFRoZSB0b3AtbGV2ZWwgW2Jhc2U2NEVuY29kZV0gYW5kIFtiYXNlNjREZWNvZGVdIGZ1bmN0aW9ucyBtYXkgYmUgdXNlZAovLy8gaW5zdGVhZCBpZiBhIGxvY2FsIHZhcmlhYmxlIHNoYWRvd3MgdGhlIFtiYXNlNjRdIGNvbnN0YW50Lgpjb25zdCBCYXNlNjRDb2RlYyBiYXNlNjQgPSBCYXNlNjRDb2RlYygpOwoKLy8vIEEgW2Jhc2U2NHVybF0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2NDgpIGVuY29kZXIgYW5kIGRlY29kZXIuCi8vLwovLy8gSXQgZW5jb2RlcyBhbmQgZGVjb2RlcyB1c2luZyB0aGUgYmFzZTY0dXJsIGFscGhhYmV0LAovLy8gZGVjb2RlcyB1c2luZyBib3RoIHRoZSBiYXNlNjQgYW5kIGJhc2U2NHVybCBhbHBoYWJldHMsCi8vLyBkb2VzIG5vdCBhbGxvdyBpbnZhbGlkIGNoYXJhY3RlcnMgYW5kIHJlcXVpcmVzIHBhZGRpbmcuCi8vLwovLy8gRXhhbXBsZXM6Ci8vLwovLy8gICAgIHZhciBlbmNvZGVkID0gYmFzZTY0VXJsLmVuY29kZShbMHg2MiwgMHg2YywgMHhjMywgMHhhNSwgMHg2MiwgMHhjMywgMHhhNiwKLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzIsIDB4NjcsIDB4NzIsIDB4YzMsIDB4YjgsIDB4NjRdKTsKLy8vICAgICB2YXIgZGVjb2RlZCA9IGJhc2U2NFVybC5kZWNvZGUoIlltekRwV0xEcG5KbmNzTzRaQW89Iik7CmNvbnN0IEJhc2U2NENvZGVjIGJhc2U2NFVybCA9IEJhc2U2NENvZGVjLnVybFNhZmUoKTsKCi8vLyBFbmNvZGVzIFtieXRlc10gdXNpbmcgW2Jhc2U2NF0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2NDgpIGVuY29kaW5nLgovLy8KLy8vIFNob3J0aGFuZCBmb3IgYGJhc2U2NC5lbmNvZGVgLiBVc2VmdWwgaWYgYSBsb2NhbCB2YXJpYWJsZSBzaGFkb3dzIHRoZSBnbG9iYWwKLy8vIFtiYXNlNjRdIGNvbnN0YW50LgpTdHJpbmcgYmFzZTY0RW5jb2RlKExpc3Q8aW50PiBieXRlcykgPT4gYmFzZTY0LmVuY29kZShieXRlcyk7CgovLy8gRW5jb2RlcyBbYnl0ZXNdIHVzaW5nIFtiYXNlNjR1cmxdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0NjQ4KSBlbmNvZGluZy4KLy8vCi8vLyBTaG9ydGhhbmQgZm9yIGBiYXNlNjR1cmwuZW5jb2RlYC4KU3RyaW5nIGJhc2U2NFVybEVuY29kZShMaXN0PGludD4gYnl0ZXMpID0+IGJhc2U2NFVybC5lbmNvZGUoYnl0ZXMpOwoKLy8vIERlY29kZXMgW2Jhc2U2NF0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2NDgpIG9yIFtiYXNlNjR1cmxdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0NjQ4KSBlbmNvZGVkIGJ5dGVzLgovLy8KLy8vIFNob3J0aGFuZCBmb3IgYGJhc2U2NC5kZWNvZGVgLiBVc2VmdWwgaWYgYSBsb2NhbCB2YXJpYWJsZSBzaGFkb3dzIHRoZQovLy8gZ2xvYmFsIFtiYXNlNjRdIGNvbnN0YW50LgpVaW50OExpc3QgYmFzZTY0RGVjb2RlKFN0cmluZyBzb3VyY2UpID0+IGJhc2U2NC5kZWNvZGUoc291cmNlKTsKCi8vIENvbnN0YW50cyB1c2VkIGluIG1vcmUgdGhhbiBvbmUgY2xhc3MuCmNvbnN0IGludCBfcGFkZGluZ0NoYXIgPSAweDNkOyAvLyAnPScuCgovLy8gQSBbYmFzZTY0XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDY0OCkgZW5jb2RlciBhbmQgZGVjb2Rlci4KLy8vCi8vLyBBIFtCYXNlNjRDb2RlY10gYWxsb3dzIGJhc2U2NCBlbmNvZGluZyBieXRlcyBpbnRvIEFTQ0lJIHN0cmluZ3MgYW5kCi8vLyBkZWNvZGluZyB2YWxpZCBlbmNvZGluZ3MgYmFjayB0byBieXRlcy4KLy8vCi8vLyBUaGlzIGltcGxlbWVudGF0aW9uIG9ubHkgaGFuZGxlcyB0aGUgc2ltcGxlc3QgUkZDIDQ2NDggYmFzZTY0IGFuZCBiYXNlNjR1cmwKLy8vIGVuY29kaW5ncy4KLy8vIEl0IGRvZXMgbm90IGFsbG93IGludmFsaWQgY2hhcmFjdGVycyB3aGVuIGRlY29kaW5nIGFuZCBpdCByZXF1aXJlcywKLy8vIGFuZCBnZW5lcmF0ZXMsIHBhZGRpbmcgc28gdGhhdCB0aGUgaW5wdXQgaXMgYWx3YXlzIGEgbXVsdGlwbGUgb2YgZm91cgovLy8gY2hhcmFjdGVycy4KY2xhc3MgQmFzZTY0Q29kZWMgZXh0ZW5kcyBDb2RlYzxMaXN0PGludD4sIFN0cmluZz4gewogIGZpbmFsIEJhc2U2NEVuY29kZXIgX2VuY29kZXI7CiAgY29uc3QgQmFzZTY0Q29kZWMoKSA6IF9lbmNvZGVyID0gY29uc3QgQmFzZTY0RW5jb2RlcigpOwogIGNvbnN0IEJhc2U2NENvZGVjLnVybFNhZmUoKSA6IF9lbmNvZGVyID0gY29uc3QgQmFzZTY0RW5jb2Rlci51cmxTYWZlKCk7CgogIEJhc2U2NEVuY29kZXIgZ2V0IGVuY29kZXIgPT4gX2VuY29kZXI7CgogIEJhc2U2NERlY29kZXIgZ2V0IGRlY29kZXIgPT4gY29uc3QgQmFzZTY0RGVjb2RlcigpOwoKICAvLy8gRGVjb2RlcyBbZW5jb2RlZF0uCiAgLy8vCiAgLy8vIFRoZSBpbnB1dCBpcyBkZWNvZGVkIGFzIGlmIGJ5IGBkZWNvZGVyLmNvbnZlcnRgLgogIC8vLwogIC8vLyBUaGUgcmV0dXJuZWQgW1VpbnQ4TGlzdF0gY29udGFpbnMgZXhhY3RseSB0aGUgZGVjb2RlZCBieXRlcywKICAvLy8gc28gdGhlIFtVaW50OExpc3QubGVuZ3RoXSBpcyBwcmVjaXNlbHkgdGhlIG51bWJlciBvZiBkZWNvZGVkIGJ5dGVzLgogIC8vLyBUaGUgW1VpbnQ4TGlzdC5idWZmZXJdIG1heSBiZSBsYXJnZXIgdGhhbiB0aGUgZGVjb2RlZCBieXRlcy4KICBVaW50OExpc3QgZGVjb2RlKFN0cmluZyBlbmNvZGVkKSA9PiBkZWNvZGVyLmNvbnZlcnQoZW5jb2RlZCk7CgogIC8vLyBWYWxpZGF0ZXMgYW5kIG5vcm1hbGl6ZXMgdGhlIGJhc2U2NCBlbmNvZGVkIGRhdGEgaW4gW3NvdXJjZV0uCiAgLy8vCiAgLy8vIE9ubHkgYWN0cyBvbiB0aGUgc3Vic3RyaW5nIGZyb20gW3N0YXJ0XSB0byBbZW5kXSwgd2l0aCBbZW5kXQogIC8vLyBkZWZhdWx0aW5nIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4KICAvLy8KICAvLy8gTm9ybWFsaXphdGlvbiB3aWxsOgogIC8vLyAqIFVuZXNjYXBlIGFueSBgJWAtZXNjYXBlcy4KICAvLy8gKiBPbmx5IGFsbG93IHZhbGlkIGNoYXJhY3RlcnMgKGBBYC1gWmAsIGBhYC1gemAsIGAwYC1gOWAsIGAvYCBhbmQgYCtgKS4KICAvLy8gKiBOb3JtYWxpemUgYSBgX2Agb3IgYC1gIGNoYXJhY3RlciB0byBgL2Agb3IgYCtgLgogIC8vLyAqIFZhbGlkYXRlIHRoYXQgZXhpc3RpbmcgcGFkZGluZyAodHJhaWxpbmcgYD1gIGNoYXJhY3RlcnMpIGlzIGNvcnJlY3QuCiAgLy8vICogSWYgbm8gcGFkZGluZyBleGlzdHMsIGFkZCBjb3JyZWN0IHBhZGRpbmcgaWYgbmVjZXNzYXJ5IGFuZCBwb3NzaWJsZS4KICAvLy8gKiBWYWxpZGF0ZSB0aGF0IHRoZSBsZW5ndGggaXMgY29ycmVjdCAoYSBtdWx0aXBsZSBvZiBmb3VyKS4KICBTdHJpbmcgbm9ybWFsaXplKFN0cmluZyBzb3VyY2UsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgc291cmNlLmxlbmd0aCk7CiAgICBjb25zdCBwZXJjZW50ID0gMHgyNTsKICAgIGNvbnN0IGVxdWFscyA9IDB4M2Q7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyOwogICAgdmFyIHNsaWNlU3RhcnQgPSBzdGFydDsKICAgIHZhciBhbHBoYWJldCA9IF9CYXNlNjRFbmNvZGVyLl9iYXNlNjRBbHBoYWJldDsKICAgIHZhciBpbnZlcnNlQWxwaGFiZXQgPSBfQmFzZTY0RGVjb2Rlci5faW52ZXJzZUFscGhhYmV0OwogICAgdmFyIGZpcnN0UGFkZGluZyA9IC0xOwogICAgdmFyIGZpcnN0UGFkZGluZ1NvdXJjZUluZGV4ID0gLTE7CiAgICB2YXIgcGFkZGluZ0NvdW50ID0gMDsKICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDspIHsKICAgICAgdmFyIHNsaWNlRW5kID0gaTsKICAgICAgdmFyIGNoYXIgPSBzb3VyY2UuY29kZVVuaXRBdChpKyspOwogICAgICB2YXIgb3JpZ2luYWxDaGFyID0gY2hhcjsKICAgICAgLy8gTm9ybWFsaXplIGNoYXIsIGtlZXAgb3JpZ2luYWxDaGFyIHRvIHNlZSBpZiBpdCBtYXRjaGVzIHRoZSBzb3VyY2UuCiAgICAgIGlmIChjaGFyID09IHBlcmNlbnQpIHsKICAgICAgICBpZiAoaSArIDIgPD0gZW5kKSB7CiAgICAgICAgICBjaGFyID0gcGFyc2VIZXhCeXRlKHNvdXJjZSwgaSk7IC8vIE1heSBiZSBuZWdhdGl2ZS4KICAgICAgICAgIGkgKz0gMjsKICAgICAgICAgIC8vIFdlIGtub3cgdGhhdCAlMjUgaXNuJ3QgdmFsaWQsIGJ1dCBvdXIgdGFibGUgY29uc2lkZXJzIGl0CiAgICAgICAgICAvLyBhIHBvdGVudGlhbCBwYWRkaW5nIHN0YXJ0LCBzbyBza2lwIHRoZSBjaGVja3MuCiAgICAgICAgICBpZiAoY2hhciA9PSBwZXJjZW50KSBjaGFyID0gLTE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIEFuIGludmFsaWQgSEVYIGVzY2FwZSAodG9vIHNob3J0KS4KICAgICAgICAgIC8vIEp1c3Qgc2tpcCBwYXN0IHRoZSBoYW5kbGluZyBhbmQgcmVhY2ggdGhlIHRocm93IGJlbG93LgogICAgICAgICAgY2hhciA9IC0xOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyBJZiBjaGFyIGlzIG5lZ2F0aXZlIGhlcmUsIGhleC1kZWNvZGluZyBmYWlsZWQgaW4gc29tZSB3YXkuCiAgICAgIGlmICgwIDw9IGNoYXIgJiYgY2hhciA8PSAxMjcpIHsKICAgICAgICB2YXIgdmFsdWUgPSBpbnZlcnNlQWxwaGFiZXRbY2hhcl07CiAgICAgICAgaWYgKHZhbHVlID49IDApIHsKICAgICAgICAgIGNoYXIgPSBhbHBoYWJldC5jb2RlVW5pdEF0KHZhbHVlKTsKICAgICAgICAgIGlmIChjaGFyID09IG9yaWdpbmFsQ2hhcikgY29udGludWU7CiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBfQmFzZTY0RGVjb2Rlci5fcGFkZGluZykgewogICAgICAgICAgLy8gV2UgaGF2ZSBydWxlZCBvdXQgcGVyY2VudCwgc28gY2hhciBpcyAnPScuCiAgICAgICAgICBpZiAoZmlyc3RQYWRkaW5nIDwgMCkgewogICAgICAgICAgICAvLyBNYXJrIHBvc2l0aW9uIGluIG5vcm1hbGl6ZWQgb3V0cHV0IHdoZXJlIHBhZGRpbmcgb2NjdXJzLgogICAgICAgICAgICBmaXJzdFBhZGRpbmcgPSAoYnVmZmVyPy5sZW5ndGggPz8gMCkgKyAoc2xpY2VFbmQgLSBzbGljZVN0YXJ0KTsKICAgICAgICAgICAgZmlyc3RQYWRkaW5nU291cmNlSW5kZXggPSBzbGljZUVuZDsKICAgICAgICAgIH0KICAgICAgICAgIHBhZGRpbmdDb3VudCsrOwogICAgICAgICAgLy8gSXQgY291bGQgaGF2ZSBiZWVuIGFuIGVzY2FwZWQgZXF1YWxzICglM0QpLgogICAgICAgICAgaWYgKG9yaWdpbmFsQ2hhciA9PSBlcXVhbHMpIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAodmFsdWUgIT0gX0Jhc2U2NERlY29kZXIuX2ludmFsaWQpIHsKICAgICAgICAgIGJ1ZmZlciA/Pz0gU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgICBidWZmZXIud3JpdGUoc291cmNlLnN1YnN0cmluZyhzbGljZVN0YXJ0LCBzbGljZUVuZCkpOwogICAgICAgICAgYnVmZmVyLndyaXRlQ2hhckNvZGUoY2hhcik7CiAgICAgICAgICBzbGljZVN0YXJ0ID0gaTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgfQogICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oIkludmFsaWQgYmFzZTY0IGRhdGEiLCBzb3VyY2UsIHNsaWNlRW5kKTsKICAgIH0KICAgIGlmIChidWZmZXIgIT0gbnVsbCkgewogICAgICBidWZmZXIud3JpdGUoc291cmNlLnN1YnN0cmluZyhzbGljZVN0YXJ0LCBlbmQpKTsKICAgICAgaWYgKGZpcnN0UGFkZGluZyA+PSAwKSB7CiAgICAgICAgLy8gVGhlcmUgd2FzIHBhZGRpbmcgaW4gdGhlIHNvdXJjZS4gQ2hlY2sgdGhhdCBpdCBpcyB2YWxpZDoKICAgICAgICAvLyAqIHJlc3VsdCBsZW5ndGggYSBtdWx0aXBsZSBvZiBmb3VyCiAgICAgICAgLy8gKiBvbmUgb3IgdHdvIHBhZGRpbmcgY2hhcmFjdGVycyBhdCB0aGUgZW5kLgogICAgICAgIF9jaGVja1BhZGRpbmcoc291cmNlLCBmaXJzdFBhZGRpbmdTb3VyY2VJbmRleCwgZW5kLCBmaXJzdFBhZGRpbmcsCiAgICAgICAgICAgIHBhZGRpbmdDb3VudCwgYnVmZmVyLmxlbmd0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gTGVuZ3RoIG9mIGxhc3QgY2h1bmsgKDEtNCBjaGFycykgaW4gdGhlIGVuY29kaW5nLgogICAgICAgIHZhciBlbmRMZW5ndGggPSAoKGJ1ZmZlci5sZW5ndGggLSAxKSAlIDQpICsgMTsKICAgICAgICBpZiAoZW5kTGVuZ3RoID09IDEpIHsKICAgICAgICAgIC8vIFRoZSBkYXRhIG11c3QgaGF2ZSBsZW5ndGggMCwgMiBvciAzIG1vZHVsbyA0LgogICAgICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIGJhc2U2NCBlbmNvZGluZyBsZW5ndGggIiwgc291cmNlLCBlbmQpOwogICAgICAgIH0KICAgICAgICB3aGlsZSAoZW5kTGVuZ3RoIDwgNCkgewogICAgICAgICAgYnVmZmVyLndyaXRlKCI9Iik7CiAgICAgICAgICBlbmRMZW5ndGgrKzsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlUmFuZ2Uoc3RhcnQsIGVuZCwgYnVmZmVyLnRvU3RyaW5nKCkpOwogICAgfQogICAgLy8gT3JpZ2luYWwgd2FzIGFscmVhZHkgbm9ybWFsaXplZCwgb25seSBjaGVjayBwYWRkaW5nLgogICAgdmFyIGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKGZpcnN0UGFkZGluZyA+PSAwKSB7CiAgICAgIF9jaGVja1BhZGRpbmcoc291cmNlLCBmaXJzdFBhZGRpbmdTb3VyY2VJbmRleCwgZW5kLCBmaXJzdFBhZGRpbmcsCiAgICAgICAgICBwYWRkaW5nQ291bnQsIGxlbmd0aCk7CiAgICB9IGVsc2UgewogICAgICAvLyBObyBwYWRkaW5nIGdpdmVuLCBzbyBhZGQgc29tZSBpZiBuZWVkZWQgaXQuCiAgICAgIHZhciBlbmRMZW5ndGggPSBsZW5ndGggJSA0OwogICAgICBpZiAoZW5kTGVuZ3RoID09IDEpIHsKICAgICAgICAvLyBUaGUgZGF0YSBtdXN0IGhhdmUgbGVuZ3RoIDAsIDIgb3IgMyBtb2R1bG8gNC4KICAgICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oIkludmFsaWQgYmFzZTY0IGVuY29kaW5nIGxlbmd0aCAiLCBzb3VyY2UsIGVuZCk7CiAgICAgIH0KICAgICAgaWYgKGVuZExlbmd0aCA+IDEpIHsKICAgICAgICAvLyBUaGVyZSBpcyBubyAiaW5zZXJ0QXQiIG9uIFN0cmluZywgYnV0IHRoaXMgd29ya3MgYXMgd2VsbC4KICAgICAgICBzb3VyY2UgPSBzb3VyY2UucmVwbGFjZVJhbmdlKGVuZCwgZW5kLCAoZW5kTGVuZ3RoID09IDIpID8gIj09IiA6ICI9Iik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzb3VyY2U7CiAgfQoKICBzdGF0aWMgdm9pZCBfY2hlY2tQYWRkaW5nKFN0cmluZyBzb3VyY2UsIGludCBzb3VyY2VJbmRleCwgaW50IHNvdXJjZUVuZCwKICAgICAgaW50IGZpcnN0UGFkZGluZywgaW50IHBhZGRpbmdDb3VudCwgaW50IGxlbmd0aCkgewogICAgaWYgKGxlbmd0aCAlIDQgIT0gMCkgewogICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAiSW52YWxpZCBiYXNlNjQgcGFkZGluZywgcGFkZGVkIGxlbmd0aCBtdXN0IGJlIG11bHRpcGxlIG9mIGZvdXIsICIKICAgICAgICAgICJpcyAkbGVuZ3RoIiwKICAgICAgICAgIHNvdXJjZSwKICAgICAgICAgIHNvdXJjZUVuZCk7CiAgICB9CiAgICBpZiAoZmlyc3RQYWRkaW5nICsgcGFkZGluZ0NvdW50ICE9IGxlbmd0aCkgewogICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAiSW52YWxpZCBiYXNlNjQgcGFkZGluZywgJz0nIG5vdCBhdCB0aGUgZW5kIiwgc291cmNlLCBzb3VyY2VJbmRleCk7CiAgICB9CiAgICBpZiAocGFkZGluZ0NvdW50ID4gMikgewogICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAiSW52YWxpZCBiYXNlNjQgcGFkZGluZywgbW9yZSB0aGFuIHR3byAnPScgY2hhcmFjdGVycyIsCiAgICAgICAgICBzb3VyY2UsCiAgICAgICAgICBzb3VyY2VJbmRleCk7CiAgICB9CiAgfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gRW5jb2RlcgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vLyBCYXNlNjQgYW5kIGJhc2U2NHVybCBlbmNvZGluZyBjb252ZXJ0ZXIuCi8vLwovLy8gRW5jb2RlcyBsaXN0cyBvZiBieXRlcyB1c2luZyBiYXNlNjQgb3IgYmFzZTY0dXJsIGVuY29kaW5nLgovLy8KLy8vIFRoZSByZXN1bHRzIGFyZSBBU0NJSSBzdHJpbmdzIHVzaW5nIGEgcmVzdHJpY3RlZCBhbHBoYWJldC4KY2xhc3MgQmFzZTY0RW5jb2RlciBleHRlbmRzIENvbnZlcnRlcjxMaXN0PGludD4sIFN0cmluZz4gewogIGZpbmFsIGJvb2wgX3VybFNhZmU7CgogIGNvbnN0IEJhc2U2NEVuY29kZXIoKSA6IF91cmxTYWZlID0gZmFsc2U7CiAgY29uc3QgQmFzZTY0RW5jb2Rlci51cmxTYWZlKCkgOiBfdXJsU2FmZSA9IHRydWU7CgogIFN0cmluZyBjb252ZXJ0KExpc3Q8aW50PiBpbnB1dCkgewogICAgaWYgKGlucHV0LmlzRW1wdHkpIHJldHVybiAiIjsKICAgIHZhciBlbmNvZGVyID0gX0Jhc2U2NEVuY29kZXIoX3VybFNhZmUpOwogICAgdmFyIGJ1ZmZlciA9IGVuY29kZXIuZW5jb2RlKGlucHV0LCAwLCBpbnB1dC5sZW5ndGgsIHRydWUpOwogICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGVzKGJ1ZmZlcik7CiAgfQoKICBCeXRlQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPFN0cmluZz4gc2luaykgewogICAgaWYgKHNpbmsgaXMgU3RyaW5nQ29udmVyc2lvblNpbmspIHsKICAgICAgcmV0dXJuIF9VdGY4QmFzZTY0RW5jb2RlclNpbmsoc2luay5hc1V0ZjhTaW5rKGZhbHNlKSwgX3VybFNhZmUpOwogICAgfQogICAgcmV0dXJuIF9Bc2NpaUJhc2U2NEVuY29kZXJTaW5rKHNpbmssIF91cmxTYWZlKTsKICB9Cn0KCi8vLyBIZWxwZXIgY2xhc3MgZm9yIGVuY29kaW5nIGJ5dGVzIHRvIGJhc2U2NC4KY2xhc3MgX0Jhc2U2NEVuY29kZXIgewogIC8vLyBUaGUgUkZDIDQ2NDggYmFzZTY0IGVuY29kaW5nIGFscGhhYmV0LgogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2Jhc2U2NEFscGhhYmV0ID0KICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iOwoKICAvLy8gVGhlIFJGQyA0NjQ4IGJhc2U2NHVybCBlbmNvZGluZyBhbHBoYWJldC4KICBzdGF0aWMgY29uc3QgU3RyaW5nIF9iYXNlNjRVcmxBbHBoYWJldCA9CiAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fIjsKCiAgLy8vIFNoaWZ0LWNvdW50IHRvIGV4dHJhY3QgdGhlIHZhbHVlcyBzdG9yZWQgaW4gW19zdGF0ZV0uCiAgc3RhdGljIGNvbnN0IGludCBfdmFsdWVTaGlmdCA9IDI7CgogIC8vLyBNYXNrIHRvIGV4dHJhY3QgdGhlIGNvdW50IHZhbHVlIHN0b3JlZCBpbiBbX3N0YXRlXS4KICBzdGF0aWMgY29uc3QgaW50IF9jb3VudE1hc2sgPSAzOwoKICBzdGF0aWMgY29uc3QgaW50IF9zaXhCaXRNYXNrID0gMHgzRjsKCiAgLy8vIEludGVybWVkaWF0ZSBzdGF0ZSBiZXR3ZWVuIGNodW5rcy4KICAvLy8KICAvLy8gRW5jb2RpbmcgaGFuZGxlcyB0aHJlZSBieXRlcyBhdCBhIHRpbWUuCiAgLy8vIElmIGZld2VyIHRoYW4gdGhyZWUgYnl0ZXMgaGFzIGJlZW4gc2VlbiwgdGhpcyB2YWx1ZSBlbmNvZGVzCiAgLy8vIHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VlbiAoMCwgMSBvciAyKSBhbmQgdGhlaXIgdmFsdWVzLgogIGludCBfc3RhdGUgPSAwOwoKICAvLy8gQWxwaGFiZXQgdXNlZCBmb3IgZW5jb2RpbmcuCiAgZmluYWwgU3RyaW5nIF9hbHBoYWJldDsKCiAgX0Jhc2U2NEVuY29kZXIoYm9vbCB1cmxTYWZlKQogICAgICA6IF9hbHBoYWJldCA9IHVybFNhZmUgPyBfYmFzZTY0VXJsQWxwaGFiZXQgOiBfYmFzZTY0QWxwaGFiZXQ7CgogIC8vLyBFbmNvZGUgY291bnQgYW5kIGJpdHMgaW50byBhIHZhbHVlIHRvIGJlIHN0b3JlZCBpbiBbX3N0YXRlXS4KICBzdGF0aWMgaW50IF9lbmNvZGVTdGF0ZShpbnQgY291bnQsIGludCBiaXRzKSB7CiAgICBhc3NlcnQoY291bnQgPD0gX2NvdW50TWFzayk7CiAgICByZXR1cm4gYml0cyA8PCBfdmFsdWVTaGlmdCB8IGNvdW50OwogIH0KCiAgLy8vIEV4dHJhY3QgYml0cyBmcm9tIGVuY29kZWQgc3RhdGUuCiAgc3RhdGljIGludCBfc3RhdGVCaXRzKGludCBzdGF0ZSkgPT4gc3RhdGUgPj4gX3ZhbHVlU2hpZnQ7CgogIC8vLyBFeHRyYWN0IGNvdW50IGZyb20gZW5jb2RlZCBzdGF0ZS4KICBzdGF0aWMgaW50IF9zdGF0ZUNvdW50KGludCBzdGF0ZSkgPT4gc3RhdGUgJiBfY291bnRNYXNrOwoKICAvLy8gQ3JlYXRlIGEgW1VpbnQ4TGlzdF0gd2l0aCB0aGUgcHJvdmlkZWQgbGVuZ3RoLgogIFVpbnQ4TGlzdCBjcmVhdGVCdWZmZXIoaW50IGJ1ZmZlckxlbmd0aCkgPT4gVWludDhMaXN0KGJ1ZmZlckxlbmd0aCk7CgogIC8vLyBFbmNvZGUgW2J5dGVzXSBmcm9tIFtzdGFydF0gdG8gW2VuZF0gYW5kIHRoZSBiaXRzIGluIFtfc3RhdGVdLgogIC8vLwogIC8vLyBSZXR1cm5zIGEgW1VpbnQ4TGlzdF0gb2YgdGhlIEFTQ0lJIGNvZGVzIG9mIHRoZSBlbmNvZGVkIGRhdGEuCiAgLy8vCiAgLy8vIElmIHRoZSBpbnB1dCwgaW5jbHVkaW5nIGxlZnQgb3ZlciBbX3N0YXRlXSBmcm9tIGVhcmxpZXIgZW5jb2RpbmdzLAogIC8vLyBhcmUgbm90IGEgbXVsdGlwbGUgb2YgdGhyZWUgYnl0ZXMsIHRoZW4gdGhlIHBhcnRpYWwgc3RhdGUgaXMgc3RvcmVkCiAgLy8vIGJhY2sgaW50byBbX3N0YXRlXS4KICAvLy8gSWYgW2lzTGFzdF0gaXMgdHJ1ZSwgcGFydGlhbCBzdGF0ZSBpcyBlbmNvZGVkIGluIHRoZSBvdXRwdXQgaW5zdGVhZCwKICAvLy8gd2l0aCB0aGUgbmVjZXNzYXJ5IHBhZGRpbmcuCiAgLy8vCiAgLy8vIFJldHVybnMgYG51bGxgIGlmIHRoZXJlIGlzIG5vIG91dHB1dC4KICBVaW50OExpc3QgZW5jb2RlKExpc3Q8aW50PiBieXRlcywgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgYXNzZXJ0KDAgPD0gc3RhcnQpOwogICAgYXNzZXJ0KHN0YXJ0IDw9IGVuZCk7CiAgICBhc3NlcnQoYnl0ZXMgPT0gbnVsbCB8fCBlbmQgPD0gYnl0ZXMubGVuZ3RoKTsKICAgIHZhciBsZW5ndGggPSBlbmQgLSBzdGFydDsKCiAgICB2YXIgY291bnQgPSBfc3RhdGVDb3VudChfc3RhdGUpOwogICAgdmFyIGJ5dGVDb3VudCA9IChjb3VudCArIGxlbmd0aCk7CiAgICB2YXIgZnVsbENodW5rcyA9IGJ5dGVDb3VudCB+LyAzOwogICAgdmFyIHBhcnRpYWxDaHVua0xlbmd0aCA9IGJ5dGVDb3VudCAtIGZ1bGxDaHVua3MgKiAzOwogICAgdmFyIGJ1ZmZlckxlbmd0aCA9IGZ1bGxDaHVua3MgKiA0OwogICAgaWYgKGlzTGFzdCAmJiBwYXJ0aWFsQ2h1bmtMZW5ndGggPiAwKSB7CiAgICAgIGJ1ZmZlckxlbmd0aCArPSA0OyAvLyBSb29tIGZvciBwYWRkaW5nLgogICAgfQogICAgdmFyIG91dHB1dCA9IGNyZWF0ZUJ1ZmZlcihidWZmZXJMZW5ndGgpOwogICAgX3N0YXRlID0KICAgICAgICBlbmNvZGVDaHVuayhfYWxwaGFiZXQsIGJ5dGVzLCBzdGFydCwgZW5kLCBpc0xhc3QsIG91dHB1dCwgMCwgX3N0YXRlKTsKICAgIGlmIChidWZmZXJMZW5ndGggPiAwKSByZXR1cm4gb3V0cHV0OwogICAgLy8gSWYgdGhlIGlucHV0IHBsdXMgdGhlIGRhdGEgaW4gc3RhdGUgaXMgc3RpbGwgbGVzcyB0aGFuIHRocmVlIGJ5dGVzLAogICAgLy8gdGhlcmUgbWF5IG5vdCBiZSBhbnkgb3V0cHV0LgogICAgcmV0dXJuIG51bGw7CiAgfQoKICBzdGF0aWMgaW50IGVuY29kZUNodW5rKFN0cmluZyBhbHBoYWJldCwgTGlzdDxpbnQ+IGJ5dGVzLCBpbnQgc3RhcnQsIGludCBlbmQsCiAgICAgIGJvb2wgaXNMYXN0LCBVaW50OExpc3Qgb3V0cHV0LCBpbnQgb3V0cHV0SW5kZXgsIGludCBzdGF0ZSkgewogICAgdmFyIGJpdHMgPSBfc3RhdGVCaXRzKHN0YXRlKTsKICAgIC8vIENvdW50IG51bWJlciBvZiBtaXNzaW5nIGJ5dGVzIGluIHRocmVlLWJ5dGUgY2h1bmsuCiAgICB2YXIgZXhwZWN0ZWRDaGFycyA9IDMgLSBfc3RhdGVDb3VudChzdGF0ZSk7CgogICAgLy8gVGhlIGlucHV0IG11c3QgYmUgYSBsaXN0IG9mIGJ5dGVzIChpbnRlZ2VycyBpbiB0aGUgcmFuZ2UgMC4uMjU1KS4KICAgIC8vIFRoZSB2YWx1ZSBvZiBgYnl0ZU9yYCB3aWxsIGJlIHRoZSBiaXR3aXNlIG9yIG9mIGFsbCB0aGUgdmFsdWVzIGluCiAgICAvLyBgYnl0ZXNgIGFuZCBhIGxhdGVyIGNoZWNrIHdpbGwgdmFsaWRhdGUgdGhhdCB0aGV5IHdlcmUgYWxsIHZhbGlkIGJ5dGVzLgogICAgdmFyIGJ5dGVPciA9IDA7CiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICB2YXIgYnl0ZSA9IGJ5dGVzW2ldOwogICAgICBieXRlT3IgfD0gYnl0ZTsKICAgICAgYml0cyA9ICgoYml0cyA8PCA4KSB8IGJ5dGUpICYgMHhGRkZGRkY7IC8vIE5ldmVyIHN0b3JlIG1vcmUgdGhhbiAyNCBiaXRzLgogICAgICBleHBlY3RlZENoYXJzLS07CiAgICAgIGlmIChleHBlY3RlZENoYXJzID09IDApIHsKICAgICAgICBvdXRwdXRbb3V0cHV0SW5kZXgrK10gPSBhbHBoYWJldC5jb2RlVW5pdEF0KChiaXRzID4+IDE4KSAmIF9zaXhCaXRNYXNrKTsKICAgICAgICBvdXRwdXRbb3V0cHV0SW5kZXgrK10gPSBhbHBoYWJldC5jb2RlVW5pdEF0KChiaXRzID4+IDEyKSAmIF9zaXhCaXRNYXNrKTsKICAgICAgICBvdXRwdXRbb3V0cHV0SW5kZXgrK10gPSBhbHBoYWJldC5jb2RlVW5pdEF0KChiaXRzID4+IDYpICYgX3NpeEJpdE1hc2spOwogICAgICAgIG91dHB1dFtvdXRwdXRJbmRleCsrXSA9IGFscGhhYmV0LmNvZGVVbml0QXQoYml0cyAmIF9zaXhCaXRNYXNrKTsKICAgICAgICBleHBlY3RlZENoYXJzID0gMzsKICAgICAgICBiaXRzID0gMDsKICAgICAgfQogICAgfQogICAgaWYgKGJ5dGVPciA+PSAwICYmIGJ5dGVPciA8PSAyNTUpIHsKICAgICAgaWYgKGlzTGFzdCAmJiBleHBlY3RlZENoYXJzIDwgMykgewogICAgICAgIHdyaXRlRmluYWxDaHVuayhhbHBoYWJldCwgb3V0cHV0LCBvdXRwdXRJbmRleCwgMyAtIGV4cGVjdGVkQ2hhcnMsIGJpdHMpOwogICAgICAgIHJldHVybiAwOwogICAgICB9CiAgICAgIHJldHVybiBfZW5jb2RlU3RhdGUoMyAtIGV4cGVjdGVkQ2hhcnMsIGJpdHMpOwogICAgfQoKICAgIC8vIFRoZXJlIHdhcyBhbiBpbnZhbGlkIGJ5dGUgdmFsdWUgc29tZXdoZXJlIGluIHRoZSBpbnB1dCAtIGZpbmQgaXQhCiAgICB2YXIgaSA9IHN0YXJ0OwogICAgd2hpbGUgKGkgPCBlbmQpIHsKICAgICAgdmFyIGJ5dGUgPSBieXRlc1tpXTsKICAgICAgaWYgKGJ5dGUgPCAwIHx8IGJ5dGUgPiAyNTUpIGJyZWFrOwogICAgICBpKys7CiAgICB9CiAgICB0aHJvdyBBcmd1bWVudEVycm9yLnZhbHVlKAogICAgICAgIGJ5dGVzLCAiTm90IGEgYnl0ZSB2YWx1ZSBhdCBpbmRleCAkaTogMHgke2J5dGVzW2ldLnRvUmFkaXhTdHJpbmcoMTYpfSIpOwogIH0KCiAgLy8vIFdyaXRlcyBhIGZpbmFsIGVuY29kZWQgZm91ci1jaGFyYWN0ZXIgY2h1bmsuCiAgLy8vCiAgLy8vIE9ubHkgdXNlZCB3aGVuIHRoZSBbX3N0YXRlXSBjb250YWlucyBhIHBhcnRpYWwgKDEgb3IgMiBieXRlKQogIC8vLyBpbnB1dC4KICBzdGF0aWMgdm9pZCB3cml0ZUZpbmFsQ2h1bmsoCiAgICAgIFN0cmluZyBhbHBoYWJldCwgVWludDhMaXN0IG91dHB1dCwgaW50IG91dHB1dEluZGV4LCBpbnQgY291bnQsIGludCBiaXRzKSB7CiAgICBhc3NlcnQoY291bnQgPiAwKTsKICAgIGlmIChjb3VudCA9PSAxKSB7CiAgICAgIG91dHB1dFtvdXRwdXRJbmRleCsrXSA9IGFscGhhYmV0LmNvZGVVbml0QXQoKGJpdHMgPj4gMikgJiBfc2l4Qml0TWFzayk7CiAgICAgIG91dHB1dFtvdXRwdXRJbmRleCsrXSA9IGFscGhhYmV0LmNvZGVVbml0QXQoKGJpdHMgPDwgNCkgJiBfc2l4Qml0TWFzayk7CiAgICAgIG91dHB1dFtvdXRwdXRJbmRleCsrXSA9IF9wYWRkaW5nQ2hhcjsKICAgICAgb3V0cHV0W291dHB1dEluZGV4KytdID0gX3BhZGRpbmdDaGFyOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGNvdW50ID09IDIpOwogICAgICBvdXRwdXRbb3V0cHV0SW5kZXgrK10gPSBhbHBoYWJldC5jb2RlVW5pdEF0KChiaXRzID4+IDEwKSAmIF9zaXhCaXRNYXNrKTsKICAgICAgb3V0cHV0W291dHB1dEluZGV4KytdID0gYWxwaGFiZXQuY29kZVVuaXRBdCgoYml0cyA+PiA0KSAmIF9zaXhCaXRNYXNrKTsKICAgICAgb3V0cHV0W291dHB1dEluZGV4KytdID0gYWxwaGFiZXQuY29kZVVuaXRBdCgoYml0cyA8PCAyKSAmIF9zaXhCaXRNYXNrKTsKICAgICAgb3V0cHV0W291dHB1dEluZGV4KytdID0gX3BhZGRpbmdDaGFyOwogICAgfQogIH0KfQoKY2xhc3MgX0J1ZmZlckNhY2hpbmdCYXNlNjRFbmNvZGVyIGV4dGVuZHMgX0Jhc2U2NEVuY29kZXIgewogIC8vLyBSZXVzZWQgYnVmZmVyLgogIC8vLwogIC8vLyBXaGVuIHRoZSBidWZmZXIgaXNuJ3QgcmVsZWFzZWQgdG8gdGhlIHNpbmssIG9ubHkgdXNlZCB0byBjcmVhdGUgYW5vdGhlcgogIC8vLyB2YWx1ZSAoYSBzdHJpbmcpLCB0aGUgYnVmZmVyIGNhbiBiZSByZXVzZWQgYmV0d2VlbiBjaHVua3MuCiAgVWludDhMaXN0IGJ1ZmZlckNhY2hlOwoKICBfQnVmZmVyQ2FjaGluZ0Jhc2U2NEVuY29kZXIoYm9vbCB1cmxTYWZlKSA6IHN1cGVyKHVybFNhZmUpOwoKICBVaW50OExpc3QgY3JlYXRlQnVmZmVyKGludCBidWZmZXJMZW5ndGgpIHsKICAgIGlmIChidWZmZXJDYWNoZSA9PSBudWxsIHx8IGJ1ZmZlckNhY2hlLmxlbmd0aCA8IGJ1ZmZlckxlbmd0aCkgewogICAgICBidWZmZXJDYWNoZSA9IFVpbnQ4TGlzdChidWZmZXJMZW5ndGgpOwogICAgfQogICAgLy8gUmV0dXJuIGEgdmlldyBvZiB0aGUgYnVmZmVyLCBzbyBpdCBoYXMgdGhlIHJlcXVlc3RlZCBsZW5ndGguCiAgICByZXR1cm4gVWludDhMaXN0LnZpZXcoCiAgICAgICAgYnVmZmVyQ2FjaGUuYnVmZmVyLCBidWZmZXJDYWNoZS5vZmZzZXRJbkJ5dGVzLCBidWZmZXJMZW5ndGgpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX0Jhc2U2NEVuY29kZXJTaW5rIGV4dGVuZHMgQnl0ZUNvbnZlcnNpb25TaW5rQmFzZSB7CiAgdm9pZCBhZGQoTGlzdDxpbnQ+IHNvdXJjZSkgewogICAgX2FkZChzb3VyY2UsIDAsIHNvdXJjZS5sZW5ndGgsIGZhbHNlKTsKICB9CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfYWRkKG51bGwsIDAsIDAsIHRydWUpOwogIH0KCiAgdm9pZCBhZGRTbGljZShMaXN0PGludD4gc291cmNlLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBpZiAoZW5kID09IG51bGwpIHRocm93IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgiZW5kIik7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBzb3VyY2UubGVuZ3RoKTsKICAgIF9hZGQoc291cmNlLCBzdGFydCwgZW5kLCBpc0xhc3QpOwogIH0KCiAgdm9pZCBfYWRkKExpc3Q8aW50PiBzb3VyY2UsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpOwp9CgpjbGFzcyBfQXNjaWlCYXNlNjRFbmNvZGVyU2luayBleHRlbmRzIF9CYXNlNjRFbmNvZGVyU2luayB7CiAgZmluYWwgU2luazxTdHJpbmc+IF9zaW5rOwogIGZpbmFsIF9CYXNlNjRFbmNvZGVyIF9lbmNvZGVyOwoKICBfQXNjaWlCYXNlNjRFbmNvZGVyU2luayh0aGlzLl9zaW5rLCBib29sIHVybFNhZmUpCiAgICAgIDogX2VuY29kZXIgPSBfQnVmZmVyQ2FjaGluZ0Jhc2U2NEVuY29kZXIodXJsU2FmZSk7CgogIHZvaWQgX2FkZChMaXN0PGludD4gc291cmNlLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICB2YXIgYnVmZmVyID0gX2VuY29kZXIuZW5jb2RlKHNvdXJjZSwgc3RhcnQsIGVuZCwgaXNMYXN0KTsKICAgIGlmIChidWZmZXIgIT0gbnVsbCkgewogICAgICB2YXIgc3RyaW5nID0gU3RyaW5nLmZyb21DaGFyQ29kZXMoYnVmZmVyKTsKICAgICAgX3NpbmsuYWRkKHN0cmluZyk7CiAgICB9CiAgICBpZiAoaXNMYXN0KSB7CiAgICAgIF9zaW5rLmNsb3NlKCk7CiAgICB9CiAgfQp9CgpjbGFzcyBfVXRmOEJhc2U2NEVuY29kZXJTaW5rIGV4dGVuZHMgX0Jhc2U2NEVuY29kZXJTaW5rIHsKICBmaW5hbCBCeXRlQ29udmVyc2lvblNpbmsgX3Npbms7CiAgZmluYWwgX0Jhc2U2NEVuY29kZXIgX2VuY29kZXI7CgogIF9VdGY4QmFzZTY0RW5jb2RlclNpbmsodGhpcy5fc2luaywgYm9vbCB1cmxTYWZlKQogICAgICA6IF9lbmNvZGVyID0gX0Jhc2U2NEVuY29kZXIodXJsU2FmZSk7CgogIHZvaWQgX2FkZChMaXN0PGludD4gc291cmNlLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICB2YXIgYnVmZmVyID0gX2VuY29kZXIuZW5jb2RlKHNvdXJjZSwgc3RhcnQsIGVuZCwgaXNMYXN0KTsKICAgIGlmIChidWZmZXIgIT0gbnVsbCkgewogICAgICBfc2luay5hZGRTbGljZShidWZmZXIsIDAsIGJ1ZmZlci5sZW5ndGgsIGlzTGFzdCk7CiAgICB9CiAgfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gRGVjb2RlcgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vLyBEZWNvZGVyIGZvciBiYXNlNjQgZW5jb2RlZCBkYXRhLgovLy8KLy8vIFRoaXMgZGVjb2RlciBhY2NlcHRzIGJvdGggYmFzZTY0IGFuZCBiYXNlNjR1cmwgKCJ1cmwtc2FmZSIpIGVuY29kaW5ncy4KLy8vCi8vLyBUaGUgZW5jb2RpbmcgaXMgcmVxdWlyZWQgdG8gYmUgcHJvcGVybHkgcGFkZGVkLgpjbGFzcyBCYXNlNjREZWNvZGVyIGV4dGVuZHMgQ29udmVydGVyPFN0cmluZywgTGlzdDxpbnQ+PiB7CiAgY29uc3QgQmFzZTY0RGVjb2RlcigpOwoKICAvLy8gRGVjb2RlcyB0aGUgY2hhcmFjdGVycyBvZiBbaW5wdXRdIGZyb20gW3N0YXJ0XSB0byBbZW5kXSBhcyBiYXNlNjQuCiAgLy8vCiAgLy8vIElmIFtzdGFydF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIHN0YXJ0IG9mIFtpbnB1dF0uCiAgLy8vIElmIFtlbmRdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRoZSBlbmQgb2YgW2lucHV0XS4KICAvLy8KICAvLy8gVGhlIHJldHVybmVkIFtVaW50OExpc3RdIGNvbnRhaW5zIGV4YWN0bHkgdGhlIGRlY29kZWQgYnl0ZXMsCiAgLy8vIHNvIHRoZSBbVWludDhMaXN0Lmxlbmd0aF0gaXMgcHJlY2lzZWx5IHRoZSBudW1iZXIgb2YgZGVjb2RlZCBieXRlcy4KICAvLy8gVGhlIFtVaW50OExpc3QuYnVmZmVyXSBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlIGRlY29kZWQgYnl0ZXMuCiAgVWludDhMaXN0IGNvbnZlcnQoU3RyaW5nIGlucHV0LCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGlucHV0Lmxlbmd0aCk7CiAgICBpZiAoc3RhcnQgPT0gZW5kKSByZXR1cm4gVWludDhMaXN0KDApOwogICAgdmFyIGRlY29kZXIgPSBfQmFzZTY0RGVjb2RlcigpOwogICAgdmFyIGJ1ZmZlciA9IGRlY29kZXIuZGVjb2RlKGlucHV0LCBzdGFydCwgZW5kKTsKICAgIGRlY29kZXIuY2xvc2UoaW5wdXQsIGVuZCk7CiAgICByZXR1cm4gYnVmZmVyOwogIH0KCiAgU3RyaW5nQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPExpc3Q8aW50Pj4gc2luaykgewogICAgcmV0dXJuIF9CYXNlNjREZWNvZGVyU2luayhzaW5rKTsKICB9Cn0KCi8vLyBIZWxwZXIgY2xhc3MgaW1wbGVtZW50aW5nIGJhc2U2NCBkZWNvZGluZyB3aXRoIGludGVybWVkaWF0ZSBzdGF0ZS4KY2xhc3MgX0Jhc2U2NERlY29kZXIgewogIC8vLyBTaGlmdC1jb3VudCB0byBleHRyYWN0IHRoZSB2YWx1ZXMgc3RvcmVkIGluIFtfc3RhdGVdLgogIHN0YXRpYyBjb25zdCBpbnQgX3ZhbHVlU2hpZnQgPSAyOwoKICAvLy8gTWFzayB0byBleHRyYWN0IHRoZSBjb3VudCB2YWx1ZSBzdG9yZWQgaW4gW19zdGF0ZV0uCiAgc3RhdGljIGNvbnN0IGludCBfY291bnRNYXNrID0gMzsKCiAgLy8vIEludmFsaWQgY2hhcmFjdGVyIGluIGRlY29kaW5nIHRhYmxlLgogIHN0YXRpYyBjb25zdCBpbnQgX2ludmFsaWQgPSAtMjsKCiAgLy8vIFBhZGRpbmcgY2hhcmFjdGVyIGluIGRlY29kaW5nIHRhYmxlLgogIHN0YXRpYyBjb25zdCBpbnQgX3BhZGRpbmcgPSAtMTsKCiAgLy8gU2hvcnRoYW5kcyB0byBtYWtlIHRoZSB0YWJsZSBtb3JlIHJlYWRhYmxlLgogIHN0YXRpYyBjb25zdCBpbnQgX18gPSBfaW52YWxpZDsKICBzdGF0aWMgY29uc3QgaW50IF9wID0gX3BhZGRpbmc7CgogIC8vLyBNYXBwaW5nIGZyb20gQVNDSUkgY2hhcmFjdGVycyB0byB0aGVpciBpbmRleCBpbiB0aGUgYmFzZTY0IGFscGhhYmV0LgogIC8vLwogIC8vLyBVc2VzIFtfaW52YWxpZF0gZm9yIGludmFsaWQgaW5kaWNlcyBhbmQgW19wYWRkaW5nXSBmb3IgdGhlIHBhZGRpbmcKICAvLy8gY2hhcmFjdGVyLgogIC8vLwogIC8vLyBBY2NlcHRzIHRoZSAiVVJMLXNhZmUiIGFscGhhYmV0IGFzIHdlbGwgKGAtYCBhbmQgYF9gIGFyZSB0aGUKICAvLy8gNjJuZCBhbmQgNjNyZCBhbHBoYWJldCBjaGFyYWN0ZXJzKSwgYW5kIGNvbnNpZGVycyBgJWAgYSBwYWRkaW5nCiAgLy8vIGNoYXJhY3Rlciwgd2hpY2ggbXVzdCB0aGVuIGJlIGZvbGxvd2VkIGJ5IGAzRGAsIHRoZSBwZXJjZW50LWVzY2FwZQogIC8vLyBmb3IgYD1gLgogIHN0YXRpYyBmaW5hbCBMaXN0PGludD4gX2ludmVyc2VBbHBoYWJldCA9IEludDhMaXN0LmZyb21MaXN0KFsKICAgIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCAvLwogICAgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIC8vCiAgICBfXywgX18sIF9fLCBfXywgX18sIF9wLCBfXywgX18sIF9fLCBfXywgX18sIDYyLCBfXywgNjIsIF9fLCA2MywgLy8KICAgIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCBfXywgX18sIF9fLCBfcCwgX18sIF9fLCAvLwogICAgX18sIDAwLCAwMSwgMDIsIDAzLCAwNCwgMDUsIDA2LCAwNywgMDgsIDA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIC8vCiAgICAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIF9fLCBfXywgX18sIF9fLCA2MywgLy8KICAgIF9fLCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCAvLwogICAgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCBfXywgX18sIF9fLCBfXywgX18sIC8vCiAgXSk7CgogIC8vIENoYXJhY3RlciBjb25zdGFudHMuCiAgc3RhdGljIGNvbnN0IGludCBfY2hhcl9wZXJjZW50ID0gMHgyNTsgLy8gJyUnLgogIHN0YXRpYyBjb25zdCBpbnQgX2NoYXJfMyA9IDB4MzM7IC8vICczJy4KICBzdGF0aWMgY29uc3QgaW50IF9jaGFyX2QgPSAweDY0OyAvLyAnZCcuCgogIC8vLyBNYWludGFpbnMgdGhlIGludGVybWVkaWF0ZSBzdGF0ZSBvZiBhIHBhcnRseS1kZWNvZGVkIGlucHV0LgogIC8vLwogIC8vLyBCYXNlNjQgaXMgZGVjb2RlZCBpbiBjaHVua3Mgb2YgZm91ciBjaGFyYWN0ZXJzLiBJZiBhIGNodW5rIGRvZXMgbm90CiAgLy8vIGNvbnRhaW4gYSBmdWxsIGJsb2NrLCB0aGUgZGVjb2RlZCBiaXRzIChzaXggcGVyIGNoYXJhY3Rlcikgb2YgdGhlCiAgLy8vIGF2YWlsYWJsZSBjaGFyYWN0ZXJzIGFyZSBzdG9yZWQgaW4gW19zdGF0ZV0gdW50aWwgdGhlIG5leHQgY2FsbCB0bwogIC8vLyBbX2RlY29kZV0gb3IgW19jbG9zZV0uCiAgLy8vCiAgLy8vIElmIG5vIHBhZGRpbmcgaGFzIGJlZW4gc2VlbiwgdGhlIHZhbHVlIGlzCiAgLy8vICAgYG51bWJlck9mQ2hhcmFjdGVyc1NlZW4gfCAoZGVjb2RlZEJpdHMgPDwgMilgCiAgLy8vIHdoZXJlIGBudW1iZXJPZkNoYXJhY3RlcnNTZWVuYCBpcyBiZXR3ZWVuIDAgYW5kIDMgYW5kIGRlY29kZWQgYml0cwogIC8vLyBjb250YWlucyBzaXggYml0cyBwZXIgc2VlbiBjaGFyYWN0ZXIuCiAgLy8vCiAgLy8vIElmIHBhZGRpbmcgaGFzIGJlZW4gc2VlbiB0aGUgdmFsdWUgaXMgbmVnYXRpdmUuIEl0J3MgdGhlIGJpdHdpc2UgbmVnYXRpb24KICAvLy8gb2YgdGhlIG51bWJlciBvZiByZW1haW5pbmcgYWxsb3dlZCBwYWRkaW5nIGNoYXJhY3RlcnMgKGFsd2F5cyB+MCBvciB+MSkuCiAgLy8vCiAgLy8vIEEgc3RhdGUgb2YgYDBgIG9yIGB+MGAgYXJlIHZhbGlkIHBsYWNlcyB0byBlbmQgZGVjb2RpbmcsIGFsbCBvdGhlciB2YWx1ZXMKICAvLy8gbWVhbiB0aGF0IGEgZm91ci1jaGFyYWN0ZXIgYmxvY2sgaGFzIG5vdCBiZWVuIGNvbXBsZXRlZC4KICBpbnQgX3N0YXRlID0gMDsKCiAgLy8vIEVuY29kZXMgW2NvdW50XSBhbmQgW2JpdHNdIGFzIGEgdmFsdWUgdG8gYmUgc3RvcmVkIGluIFtfc3RhdGVdLgogIHN0YXRpYyBpbnQgX2VuY29kZUNoYXJhY3RlclN0YXRlKGludCBjb3VudCwgaW50IGJpdHMpIHsKICAgIGFzc2VydChjb3VudCA9PSAoY291bnQgJiBfY291bnRNYXNrKSk7CiAgICByZXR1cm4gKGJpdHMgPDwgX3ZhbHVlU2hpZnQgfCBjb3VudCk7CiAgfQoKICAvLy8gRXh0cmFjdHMgY291bnQgZnJvbSBhIFtfc3RhdGVdIHZhbHVlLgogIHN0YXRpYyBpbnQgX3N0YXRlQ291bnQoaW50IHN0YXRlKSB7CiAgICBhc3NlcnQoc3RhdGUgPj0gMCk7CiAgICByZXR1cm4gc3RhdGUgJiBfY291bnRNYXNrOwogIH0KCiAgLy8vIEV4dHJhY3RzIHZhbHVlIGJpdHMgZnJvbSBhIFtfc3RhdGVdIHZhbHVlLgogIHN0YXRpYyBpbnQgX3N0YXRlQml0cyhpbnQgc3RhdGUpIHsKICAgIGFzc2VydChzdGF0ZSA+PSAwKTsKICAgIHJldHVybiBzdGF0ZSA+PiBfdmFsdWVTaGlmdDsKICB9CgogIC8vLyBFbmNvZGVzIGEgbnVtYmVyIG9mIGV4cGVjdGVkIHBhZGRpbmcgY2hhcmFjdGVycyB0byBiZSBzdG9yZWQgaW4gW19zdGF0ZV0uCiAgc3RhdGljIGludCBfZW5jb2RlUGFkZGluZ1N0YXRlKGludCBleHBlY3RlZFBhZGRpbmcpIHsKICAgIGFzc2VydChleHBlY3RlZFBhZGRpbmcgPj0gMCk7CiAgICBhc3NlcnQoZXhwZWN0ZWRQYWRkaW5nIDw9IDUpOwogICAgcmV0dXJuIC1leHBlY3RlZFBhZGRpbmcgLSAxOyAvLyB+ZXhwZWN0ZWRQYWRkaW5nIGFkYXB0ZWQgdG8gZGFydDJqcy4KICB9CgogIC8vLyBFeHRyYWN0cyBleHBlY3RlZCBwYWRkaW5nIGNoYXJhY3RlciBjb3VudCBmcm9tIGEgW19zdGF0ZV0gdmFsdWUuCiAgc3RhdGljIGludCBfc3RhdGVQYWRkaW5nKGludCBzdGF0ZSkgewogICAgYXNzZXJ0KHN0YXRlIDwgMCk7CiAgICByZXR1cm4gLXN0YXRlIC0gMTsgLy8gfnN0YXRlIGFkYXB0ZWQgdG8gZGFydDJqcy4KICB9CgogIHN0YXRpYyBib29sIF9oYXNTZWVuUGFkZGluZyhpbnQgc3RhdGUpID0+IHN0YXRlIDwgMDsKCiAgLy8vIERlY29kZXMgW2lucHV0XSBmcm9tIFtzdGFydF0gdG8gW2VuZF0uCiAgLy8vCiAgLy8vIFJldHVybnMgYSBbVWludDhMaXN0XSB3aXRoIHRoZSBkZWNvZGVkIGJ5dGVzLgogIC8vLyBJZiBhIHByZXZpb3VzIGNhbGwgaGFkIGFuIGluY29tcGxldGUgZm91ci1jaGFyYWN0ZXIgYmxvY2ssIHRoZSBiaXRzIGZyb20KICAvLy8gdGhvc2UgYXJlIGluY2x1ZGVkIGluIGRlY29kaW5nCiAgVWludDhMaXN0IGRlY29kZShTdHJpbmcgaW5wdXQsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgYXNzZXJ0KDAgPD0gc3RhcnQpOwogICAgYXNzZXJ0KHN0YXJ0IDw9IGVuZCk7CiAgICBhc3NlcnQoZW5kIDw9IGlucHV0Lmxlbmd0aCk7CiAgICBpZiAoX2hhc1NlZW5QYWRkaW5nKF9zdGF0ZSkpIHsKICAgICAgX3N0YXRlID0gX2NoZWNrUGFkZGluZyhpbnB1dCwgc3RhcnQsIGVuZCwgX3N0YXRlKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoc3RhcnQgPT0gZW5kKSByZXR1cm4gVWludDhMaXN0KDApOwogICAgdmFyIGJ1ZmZlciA9IF9hbGxvY2F0ZUJ1ZmZlcihpbnB1dCwgc3RhcnQsIGVuZCwgX3N0YXRlKTsKICAgIF9zdGF0ZSA9IGRlY29kZUNodW5rKGlucHV0LCBzdGFydCwgZW5kLCBidWZmZXIsIDAsIF9zdGF0ZSk7CiAgICByZXR1cm4gYnVmZmVyOwogIH0KCiAgLy8vIENoZWNrcyB0aGF0IFtfc3RhdGVdIHJlcHJlc2VudHMgYSB2YWxpZCBkZWNvZGluZy4KICB2b2lkIGNsb3NlKFN0cmluZyBpbnB1dCwgaW50IGVuZCkgewogICAgaWYgKF9zdGF0ZSA8IF9lbmNvZGVQYWRkaW5nU3RhdGUoMCkpIHsKICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJNaXNzaW5nIHBhZGRpbmcgY2hhcmFjdGVyIiwgaW5wdXQsIGVuZCk7CiAgICB9CiAgICBpZiAoX3N0YXRlID4gMCkgewogICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAiSW52YWxpZCBsZW5ndGgsIG11c3QgYmUgbXVsdGlwbGUgb2YgZm91ciIsIGlucHV0LCBlbmQpOwogICAgfQogICAgX3N0YXRlID0gX2VuY29kZVBhZGRpbmdTdGF0ZSgwKTsKICB9CgogIC8vLyBEZWNvZGVzIFtpbnB1dF0gZnJvbSBbc3RhcnRdIHRvIFtlbmRdLgogIC8vLwogIC8vLyBJbmNsdWRlcyB0aGUgc3RhdGUgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIGluIHRoZSBkZWNvZGluZy4KICAvLy8gV3JpdGVzIHRoZSBkZWNvZGluZyB0byBbb3V0cHV0XSBhdCBbb3V0SW5kZXhdLCBhbmQgdGhlcmUgbXVzdAogIC8vLyBiZSByb29tIGluIHRoZSBvdXRwdXQuCiAgc3RhdGljIGludCBkZWNvZGVDaHVuayhTdHJpbmcgaW5wdXQsIGludCBzdGFydCwgaW50IGVuZCwgVWludDhMaXN0IG91dHB1dCwKICAgICAgaW50IG91dEluZGV4LCBpbnQgc3RhdGUpIHsKICAgIGFzc2VydCghX2hhc1NlZW5QYWRkaW5nKHN0YXRlKSk7CiAgICBjb25zdCBhc2NpaU1hc2sgPSAxMjc7CiAgICBjb25zdCBhc2NpaU1heCA9IDEyNzsKICAgIGNvbnN0IGVpZ2h0Qml0TWFzayA9IDB4RkY7CiAgICBjb25zdCBiaXRzUGVyQ2hhcmFjdGVyID0gNjsKCiAgICB2YXIgYml0cyA9IF9zdGF0ZUJpdHMoc3RhdGUpOwogICAgdmFyIGNvdW50ID0gX3N0YXRlQ291bnQoc3RhdGUpOwogICAgLy8gU3RyaW5nIGNvbnRlbnRzIHNob3VsZCBiZSBhbGwgQVNDSUkuCiAgICAvLyBJbnN0ZWFkIG9mIGNoZWNraW5nIGZvciBlYWNoIGNoYXJhY3Rlciwgd2UgY29sbGVjdCB0aGUgYml0d2lzZS1vciBvZgogICAgLy8gYWxsIHRoZSBjaGFyYWN0ZXJzIGluIGBjaGFyT3JgIGFuZCBsYXRlciB2YWxpZGF0ZSB0aGF0IGFsbCBjaGFyYWN0ZXJzCiAgICAvLyB3ZXJlIEFTQ0lJLgogICAgdmFyIGNoYXJPciA9IDA7CiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICB2YXIgY2hhciA9IGlucHV0LmNvZGVVbml0QXQoaSk7CiAgICAgIGNoYXJPciB8PSBjaGFyOwogICAgICB2YXIgY29kZSA9IF9pbnZlcnNlQWxwaGFiZXRbY2hhciAmIGFzY2lpTWFza107CiAgICAgIGlmIChjb2RlID49IDApIHsKICAgICAgICBiaXRzID0gKChiaXRzIDw8IGJpdHNQZXJDaGFyYWN0ZXIpIHwgY29kZSkgJiAweEZGRkZGRjsKICAgICAgICBjb3VudCA9IChjb3VudCArIDEpICYgMzsKICAgICAgICBpZiAoY291bnQgPT0gMCkgewogICAgICAgICAgYXNzZXJ0KG91dEluZGV4ICsgMyA8PSBvdXRwdXQubGVuZ3RoKTsKICAgICAgICAgIG91dHB1dFtvdXRJbmRleCsrXSA9IChiaXRzID4+IDE2KSAmIGVpZ2h0Qml0TWFzazsKICAgICAgICAgIG91dHB1dFtvdXRJbmRleCsrXSA9IChiaXRzID4+IDgpICYgZWlnaHRCaXRNYXNrOwogICAgICAgICAgb3V0cHV0W291dEluZGV4KytdID0gYml0cyAmIGVpZ2h0Qml0TWFzazsKICAgICAgICAgIGJpdHMgPSAwOwogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfSBlbHNlIGlmIChjb2RlID09IF9wYWRkaW5nICYmIGNvdW50ID4gMSkgewogICAgICAgIGlmIChjaGFyT3IgPCAwIHx8IGNoYXJPciA+IGFzY2lpTWF4KSBicmVhazsKICAgICAgICBpZiAoY291bnQgPT0gMykgewogICAgICAgICAgaWYgKChiaXRzICYgMHgwMykgIT0gMCkgewogICAgICAgICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oIkludmFsaWQgZW5jb2RpbmcgYmVmb3JlIHBhZGRpbmciLCBpbnB1dCwgaSk7CiAgICAgICAgICB9CiAgICAgICAgICBvdXRwdXRbb3V0SW5kZXgrK10gPSBiaXRzID4+IDEwOwogICAgICAgICAgb3V0cHV0W291dEluZGV4KytdID0gYml0cyA+PiAyOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoKGJpdHMgJiAweDBGKSAhPSAwKSB7CiAgICAgICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBlbmNvZGluZyBiZWZvcmUgcGFkZGluZyIsIGlucHV0LCBpKTsKICAgICAgICAgIH0KICAgICAgICAgIG91dHB1dFtvdXRJbmRleCsrXSA9IGJpdHMgPj4gNDsKICAgICAgICB9CiAgICAgICAgLy8gRXhwZWN0ZWQgcGFkZGluZyBpcyB0aGUgbnVtYmVyIG9mIGV4cGVjdGVkIHBhZGRpbmcgY2hhcmFjdGVycywKICAgICAgICAvLyB3aGVyZSBgPWAgY291bnRzIGFzIHRocmVlIGFuZCBgJTNEYCBjb3VudHMgYXMgb25lIHBlciBjaGFyYWN0ZXIuCiAgICAgICAgLy8KICAgICAgICAvLyBFeHBlY3QgZWl0aGVyIHplcm8gb3Igb25lIHBhZGRpbmcgZGVwZW5kaW5nIG9uIGNvdW50ICgyIG9yIDMpLAogICAgICAgIC8vIHBsdXMgdHdvIG1vcmUgY2hhcmFjdGVycyBpZiB0aGUgY29kZSB3YXMgYCVgIChhIHBhcnRpYWwgcGFkZGluZykuCiAgICAgICAgdmFyIGV4cGVjdGVkUGFkZGluZyA9ICgzIC0gY291bnQpICogMzsKICAgICAgICBpZiAoY2hhciA9PSBfY2hhcl9wZXJjZW50KSBleHBlY3RlZFBhZGRpbmcgKz0gMjsKICAgICAgICBzdGF0ZSA9IF9lbmNvZGVQYWRkaW5nU3RhdGUoZXhwZWN0ZWRQYWRkaW5nKTsKICAgICAgICByZXR1cm4gX2NoZWNrUGFkZGluZyhpbnB1dCwgaSArIDEsIGVuZCwgc3RhdGUpOwogICAgICB9CiAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBjaGFyYWN0ZXIiLCBpbnB1dCwgaSk7CiAgICB9CiAgICBpZiAoY2hhck9yID49IDAgJiYgY2hhck9yIDw9IGFzY2lpTWF4KSB7CiAgICAgIHJldHVybiBfZW5jb2RlQ2hhcmFjdGVyU3RhdGUoY291bnQsIGJpdHMpOwogICAgfQogICAgLy8gVGhlcmUgaXMgYW4gaW52YWxpZCAobm9uLUFTQ0lJKSBjaGFyYWN0ZXIgaW4gdGhlIGlucHV0LgogICAgaW50IGk7CiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIHZhciBjaGFyID0gaW5wdXQuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNoYXIgPCAwIHx8IGNoYXIgPiBhc2NpaU1heCkgYnJlYWs7CiAgICB9CiAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oIkludmFsaWQgY2hhcmFjdGVyIiwgaW5wdXQsIGkpOwogIH0KCiAgLy8vIEFsbG9jYXRlcyBhIGJ1ZmZlciB3aXRoIHJvb20gZm9yIHRoZSBkZWNvZGluZyBvZiBhIHN1YnN0cmluZyBvZiBbaW5wdXRdLgogIC8vLwogIC8vLyBJbmNsdWRlcyByb29tIGZvciB0aGUgY2hhcmFjdGVycyBpbiBbc3RhdGVdLCBhbmQgaGFuZGxlcyBwYWRkaW5nIGNvcnJlY3RseS4KICBzdGF0aWMgVWludDhMaXN0IF9hbGxvY2F0ZUJ1ZmZlcigKICAgICAgU3RyaW5nIGlucHV0LCBpbnQgc3RhcnQsIGludCBlbmQsIGludCBzdGF0ZSkgewogICAgYXNzZXJ0KHN0YXRlID49IDApOwogICAgdmFyIHBhZGRpbmdTdGFydCA9IF90cmltUGFkZGluZ0NoYXJzKGlucHV0LCBzdGFydCwgZW5kKTsKICAgIHZhciBsZW5ndGggPSBfc3RhdGVDb3VudChzdGF0ZSkgKyAocGFkZGluZ1N0YXJ0IC0gc3RhcnQpOwogICAgLy8gVGhyZWUgYnl0ZXMgcGVyIGZ1bGwgZm91ciBieXRlcyBpbiB0aGUgaW5wdXQuCiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gKGxlbmd0aCA+PiAyKSAqIDM7CiAgICAvLyBJZiBwYWRkaW5nIHdhcyBzZWVuLCB0aGVuIHRoaXMgaXMgdGhlIGxhc3QgY2h1bmssIGFuZCB0aGUgZmluYWwgcGFydGlhbAogICAgLy8gY2h1bmsgc2hvdWxkIGJlIGRlY29kZWQgdG9vLgogICAgdmFyIHJlbWFpbmRlckxlbmd0aCA9IGxlbmd0aCAmIDM7CiAgICBpZiAocmVtYWluZGVyTGVuZ3RoICE9IDAgJiYgcGFkZGluZ1N0YXJ0IDwgZW5kKSB7CiAgICAgIGJ1ZmZlckxlbmd0aCArPSByZW1haW5kZXJMZW5ndGggLSAxOwogICAgfQogICAgaWYgKGJ1ZmZlckxlbmd0aCA+IDApIHJldHVybiBVaW50OExpc3QoYnVmZmVyTGVuZ3RoKTsKICAgIC8vIElmIHRoZSBpbnB1dCBwbHVzIHN0YXRlIGlzIGxlc3MgdGhhbiBmb3VyIGNoYXJhY3RlcnMsIGFuZCBpdCdzIG5vdAogICAgLy8gYXQgdGhlIGVuZCBvZiBpbnB1dCwgbm8gYnVmZmVyIGlzIG5lZWRlZC4KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoZSBzdGFydCBvZiBwYWRkaW5nIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0LgogIC8vLwogIC8vLyBSZXR1cm5zIHRoZSBlbmQgb2YgaW5wdXQgaWYgdGhlcmUgaXMgbm8gcGFkZGluZy4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IHRoZSBkZWNvZGluZyBidWZmZXIgaGFzIHRoZSBleGFjdCBzaXplCiAgLy8vIGl0IG5lZWRzIHdoZW4gaW5wdXQgaXMgdmFsaWQsIGFuZCBhdCBsZWFzdCBlbm91Z2ggYnl0ZXMgdG8gcmVhY2ggdGhlIGVycm9yCiAgLy8vIHdoZW4gaW5wdXQgaXMgaW52YWxpZC4KICAvLy8KICAvLy8gTmV2ZXIgY291bnQgbW9yZSB0aGFuIHR3byBwYWRkaW5nIHNlcXVlbmNlcyBzaW5jZSBhbnkgbW9yZSB0aGFuIHRoYXQKICAvLy8gd2lsbCByYWlzZSBhbiBlcnJvciBhbnl3YXksIGFuZCB3ZSBvbmx5IGNhcmUgYWJvdXQgYmVpbmcgcHJlY2lzZSBmb3IKICAvLy8gc3VjY2Vzc2Z1bCBjb252ZXJzaW9ucy4KICBzdGF0aWMgaW50IF90cmltUGFkZGluZ0NoYXJzKFN0cmluZyBpbnB1dCwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICAvLyBUaGlzIG1heSBjb3VudCAnJT0nIGFzIHR3byBwYWRkaW5ncy4gVGhhdCdzIG9rLCBpdCB3aWxsIGVyciBsYXRlciwKICAgIC8vIGJ1dCB0aGUgYnVmZmVyIHdpbGwgYmUgbGFyZ2UgZW5vdWdoIHRvIHJlYWNoIHRoZSBlcnJvci4KICAgIHZhciBwYWRkaW5nID0gMDsKICAgIHZhciBpbmRleCA9IGVuZDsKICAgIHZhciBuZXdFbmQgPSBlbmQ7CiAgICB3aGlsZSAoaW5kZXggPiBzdGFydCAmJiBwYWRkaW5nIDwgMikgewogICAgICBpbmRleC0tOwogICAgICB2YXIgY2hhciA9IGlucHV0LmNvZGVVbml0QXQoaW5kZXgpOwogICAgICBpZiAoY2hhciA9PSBfcGFkZGluZ0NoYXIpIHsKICAgICAgICBwYWRkaW5nKys7CiAgICAgICAgbmV3RW5kID0gaW5kZXg7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKChjaGFyIHwgMHgyMCkgPT0gX2NoYXJfZCkgewogICAgICAgIGlmIChpbmRleCA9PSBzdGFydCkgYnJlYWs7CiAgICAgICAgaW5kZXgtLTsKICAgICAgICBjaGFyID0gaW5wdXQuY29kZVVuaXRBdChpbmRleCk7CiAgICAgIH0KICAgICAgaWYgKGNoYXIgPT0gX2NoYXJfMykgewogICAgICAgIGlmIChpbmRleCA9PSBzdGFydCkgYnJlYWs7CiAgICAgICAgaW5kZXgtLTsKICAgICAgICBjaGFyID0gaW5wdXQuY29kZVVuaXRBdChpbmRleCk7CiAgICAgIH0KICAgICAgaWYgKGNoYXIgPT0gX2NoYXJfcGVyY2VudCkgewogICAgICAgIHBhZGRpbmcrKzsKICAgICAgICBuZXdFbmQgPSBpbmRleDsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBicmVhazsKICAgIH0KICAgIHJldHVybiBuZXdFbmQ7CiAgfQoKICAvLy8gQ2hlY2sgdGhhdCB0aGUgcmVtYWluZGVyIG9mIHRoZSBzdHJpbmcgaXMgdmFsaWQgcGFkZGluZy4KICAvLy8KICAvLy8gVmFsaWQgcGFkZGluZyBpcyBhIGNvcnJlY3QgbnVtYmVyICgwLCAxIG9yIDIpIG9mIGA9YCBjaGFyYWN0ZXJzCiAgLy8vIG9yIGAlM0RgIHNlcXVlbmNlcyBkZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiBwcmVjZWRpbmcgYmFzZTY0IGNoYXJhY3RlcnMuCiAgLy8vIFRoZSBbc3RhdGVdIHBhcmFtZXRlciBlbmNvZGVzIHdoaWNoIHBhZGRpbmcgY29udGludWF0aW9ucyBhcmUgYWxsb3dlZAogIC8vLyBhcyB0aGUgbnVtYmVyIG9mIGV4cGVjdGVkIGNoYXJhY3RlcnMuIFRoYXQgbnVtYmVyIGlzIHRoZSBudW1iZXIgb2YKICAvLy8gZXhwZWN0ZWQgcGFkZGluZyBjaGFyYWN0ZXJzIHRpbWVzIDMgbWludXMgdGhlIG51bWJlciBvZiBwYWRkaW5nIGNoYXJhY3RlcnMKICAvLy8gc2VlbiBzbyBmYXIsIHdoZXJlIGA9YCBjb3VudHMgYXMgMyBjb3VudHMgYXMgdGhyZWUgY2hhcmFjdGVycywKICAvLy8gYW5kIHRoZSBwYWRkaW5nIHNlcXVlbmNlIGAlM0RgIGNvdW50cyBhcyBvbmUgY2hhcmFjdGVyIHBlciBjaGFyYWN0ZXIuCiAgLy8vCiAgLy8vIFRoZSBudW1iZXIgb2YgbWlzc2luZyBjaGFyYWN0ZXJzIGlzIGFsd2F5cyBiZXR3ZWVuIDAgYW5kIDUgYmVjYXVzZSB3ZQogIC8vLyBvbmx5IGNhbGwgdGhpcyBmdW5jdGlvbiBhZnRlciBoYXZpbmcgc2VlbiBhdCBsZWFzdCBvbmUgYD1gIG9yIGAlYAogIC8vLyBjaGFyYWN0ZXIuCiAgLy8vIElmIHRoZSBudW1iZXIgb2YgbWlzc2luZyBjaGFyYWN0ZXJzIGlzIG5vdCAzIG9yIDAsIHdlIGhhdmUgc2VlbiAoYXQgbGVhc3QpCiAgLy8vIGEgYCVgIGNoYXJhY3RlciBhbmQgZXhwZWN0cyB0aGUgcmVzdCBvZiB0aGUgYCUzRGAgc2VxdWVuY2UsIGFuZCBhIGA9YCBpcwogIC8vLyBub3QgYWxsb3dlZC4gV2hlbiBtaXNzaW5nIDMgY2hhcmFjdGVycywgZWl0aGVyIGA9YCBvciBgJWAgaXMgYWxsb3dlZC4KICAvLy8KICAvLy8gV2hlbiB0aGUgdmFsdWUgaXMgMCwgbm8gbW9yZSBwYWRkaW5nIChvciBhbnkgb3RoZXIgY2hhcmFjdGVyKSBpcyBhbGxvd2VkLgogIHN0YXRpYyBpbnQgX2NoZWNrUGFkZGluZyhTdHJpbmcgaW5wdXQsIGludCBzdGFydCwgaW50IGVuZCwgaW50IHN0YXRlKSB7CiAgICBhc3NlcnQoX2hhc1NlZW5QYWRkaW5nKHN0YXRlKSk7CiAgICBpZiAoc3RhcnQgPT0gZW5kKSByZXR1cm4gc3RhdGU7CiAgICB2YXIgZXhwZWN0ZWRQYWRkaW5nID0gX3N0YXRlUGFkZGluZyhzdGF0ZSk7CiAgICBhc3NlcnQoZXhwZWN0ZWRQYWRkaW5nID49IDApOwogICAgYXNzZXJ0KGV4cGVjdGVkUGFkZGluZyA8IDYpOwogICAgd2hpbGUgKGV4cGVjdGVkUGFkZGluZyA+IDApIHsKICAgICAgdmFyIGNoYXIgPSBpbnB1dC5jb2RlVW5pdEF0KHN0YXJ0KTsKICAgICAgaWYgKGV4cGVjdGVkUGFkZGluZyA9PSAzKSB7CiAgICAgICAgaWYgKGNoYXIgPT0gX3BhZGRpbmdDaGFyKSB7CiAgICAgICAgICBleHBlY3RlZFBhZGRpbmcgLT0gMzsKICAgICAgICAgIHN0YXJ0Kys7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKGNoYXIgPT0gX2NoYXJfcGVyY2VudCkgewogICAgICAgICAgZXhwZWN0ZWRQYWRkaW5nLS07CiAgICAgICAgICBzdGFydCsrOwogICAgICAgICAgaWYgKHN0YXJ0ID09IGVuZCkgYnJlYWs7CiAgICAgICAgICBjaGFyID0gaW5wdXQuY29kZVVuaXRBdChzdGFydCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyBQYXJ0aWFsIHBhZGRpbmcgbWVhbnMgd2UgaGF2ZSBzZWVuIHBhcnQgb2YgYSAiJTNEIiBlc2NhcGUuCiAgICAgIHZhciBleHBlY3RlZFBhcnRpYWxQYWRkaW5nID0gZXhwZWN0ZWRQYWRkaW5nOwogICAgICBpZiAoZXhwZWN0ZWRQYXJ0aWFsUGFkZGluZyA+IDMpIGV4cGVjdGVkUGFydGlhbFBhZGRpbmcgLT0gMzsKICAgICAgaWYgKGV4cGVjdGVkUGFydGlhbFBhZGRpbmcgPT0gMikgewogICAgICAgIC8vIEV4cGVjdHMgJzMnCiAgICAgICAgaWYgKGNoYXIgIT0gX2NoYXJfMykgYnJlYWs7CiAgICAgICAgc3RhcnQrKzsKICAgICAgICBleHBlY3RlZFBhZGRpbmctLTsKICAgICAgICBpZiAoc3RhcnQgPT0gZW5kKSBicmVhazsKICAgICAgICBjaGFyID0gaW5wdXQuY29kZVVuaXRBdChzdGFydCk7CiAgICAgIH0KICAgICAgLy8gRXhwZWN0cyAnRCcgb3IgJ2QnLgogICAgICBpZiAoKGNoYXIgfCAweDIwKSAhPSBfY2hhcl9kKSBicmVhazsKICAgICAgc3RhcnQrKzsKICAgICAgZXhwZWN0ZWRQYWRkaW5nLS07CiAgICAgIGlmIChzdGFydCA9PSBlbmQpIGJyZWFrOwogICAgfQogICAgaWYgKHN0YXJ0ICE9IGVuZCkgewogICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oIkludmFsaWQgcGFkZGluZyBjaGFyYWN0ZXIiLCBpbnB1dCwgc3RhcnQpOwogICAgfQogICAgcmV0dXJuIF9lbmNvZGVQYWRkaW5nU3RhdGUoZXhwZWN0ZWRQYWRkaW5nKTsKICB9Cn0KCmNsYXNzIF9CYXNlNjREZWNvZGVyU2luayBleHRlbmRzIFN0cmluZ0NvbnZlcnNpb25TaW5rQmFzZSB7CiAgLy8vIE91dHB1dCBzaW5rCiAgZmluYWwgU2luazxMaXN0PGludD4+IF9zaW5rOwogIGZpbmFsIF9CYXNlNjREZWNvZGVyIF9kZWNvZGVyID0gX0Jhc2U2NERlY29kZXIoKTsKCiAgX0Jhc2U2NERlY29kZXJTaW5rKHRoaXMuX3NpbmspOwoKICB2b2lkIGFkZChTdHJpbmcgc3RyaW5nKSB7CiAgICBpZiAoc3RyaW5nLmlzRW1wdHkpIHJldHVybjsKICAgIHZhciBidWZmZXIgPSBfZGVjb2Rlci5kZWNvZGUoc3RyaW5nLCAwLCBzdHJpbmcubGVuZ3RoKTsKICAgIGlmIChidWZmZXIgIT0gbnVsbCkgX3NpbmsuYWRkKGJ1ZmZlcik7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX2RlY29kZXIuY2xvc2UobnVsbCwgbnVsbCk7CiAgICBfc2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCBhZGRTbGljZShTdHJpbmcgc3RyaW5nLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBzdHJpbmcubGVuZ3RoKTsKICAgIGlmIChzdGFydCA9PSBlbmQpIHJldHVybjsKICAgIHZhciBidWZmZXIgPSBfZGVjb2Rlci5kZWNvZGUoc3RyaW5nLCBzdGFydCwgZW5kKTsKICAgIGlmIChidWZmZXIgIT0gbnVsbCkgX3NpbmsuYWRkKGJ1ZmZlcik7CiAgICBpZiAoaXNMYXN0KSB7CiAgICAgIF9kZWNvZGVyLmNsb3NlKHN0cmluZywgZW5kKTsKICAgICAgX3NpbmsuY2xvc2UoKTsKICAgIH0KICB9Cn0Kg1sATk48AQ8BFgFJBDI7PAQOBE9LPQRKPyoBTAQ5OzwEDgRSTkA1AVIEURc+AVUEJkQBfQRKHkABKicBSQRILARQD0hKEDUgOkoBKQE2ARkGNwZDSkNAAUQGQysGGiJOOE1NQj5BGhkZHDM7GyYaJBgpH0wdHD4SRjwqETBEFQoIRCYrGi0uNzgiSEwwDBo5MAowJUAmGhQKCEYGGjcfRC43SioPPTceO1EKIB0XCghBBjweHUghDTUiHDlPCBtFTwgGEwQBSzgbHU0YEhYGMR1OBhwdQhIYBgQCAUwLTAEtBD8EPzsXASwzASQiLD8pBAFBKEcGNAQCAS8XLShKATArSgE8JAE6IwEnASkGLkI9EgEiGgEfRAFDMSEoBAEnPAEoOwE1RwFFBkQGSUoaSyIGLEcYGjIeASUmJTknLC4GLQ1OKUskEQQBT0MiOjABSUlPFCgbFlAXIFFRUEkbEggGKClREgg0BgFJExYbKQsGH1EEATMGQw0fURcWTk4sLA0aT05OLAYEAgE7FQZOQRkBPgEtRC0GRBtGBAIBQx8rBAERHAQBRTk7JgQBQAIBOxwhATQ5AUE+GjEZBhIVBgQCAToiIQEzLAFBPho4BgQCAUwLTAElBEsENDsZAUkGQj4GQ0pDPkArJDQfEwQBRiUEAgFHFzwkATojASsiASsiATEiIgFLBkkRBkNGSQ9AR0dHR0dHR0cGARoxKysBQgZKSEkdBjA2SSwGUE8GUD8SAUY6KyoEASwmGB8EATElGCEEAVA4IiJJBAFHKBc1BAE3AS0GNE8lNxgaISM5EwYrPUATBAE4JitGBhYdQwYlBAEtBkZEHU0hJRsaHyABIiQsTE0TFCgmFjUXPyEaMTw7NBQKEjI0GiRQDCsqESRQDCoKSkwLSk0vOTY4CDwGLTEGPwskJi4GOgQBTwZSJDUYPT41Kk8kJjYrBjpKMREEAUwGNwZJUR0GS0seQ0o/FRUWKw8qIhMYEggmIxEoCB0jESgIIxMYEggNBhMEAT8GRlFMSVFFTAZMSBFRT0wGUEokJDAiISIqIiQgExEKJR0TIyoREQoIRDRDKRckERshKAgdKw8ZHwYYSAYxBAIBPBIfNAEiARwgPCsEAREgEwQBQkEeNisSIxUGBAIBGGRhcnQ6Y29udmVydC9iYXNlNjQuZGFydElvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9jb252ZXJ0L2J5dGVfY29udmVyc2lvbi5kYXJ0jWQvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5jb252ZXJ0OwoKLy8vIFRoZSBbQnl0ZUNvbnZlcnNpb25TaW5rXSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIGNvbnZlcnRlcnMgdG8KLy8vIGVmZmljaWVudGx5IHRyYW5zbWl0IGJ5dGUgZGF0YS4KLy8vCi8vLyBJbnN0ZWFkIG9mIGxpbWl0aW5nIHRoZSBpbnRlcmZhY2UgdG8gb25lIG5vbi1jaHVua2VkIGxpc3Qgb2YgYnl0ZXMgaXQKLy8vIGFjY2VwdHMgaXRzIGlucHV0IGluIGNodW5rcyAodGhlbXNlbHZlcyBiZWluZyBsaXN0cyBvZiBieXRlcykuCi8vLwovLy8gVGhpcyBhYnN0cmFjdCBjbGFzcyB3aWxsIGxpa2VseSBnZXQgbW9yZSBtZXRob2RzIG92ZXIgdGltZS4gSW1wbGVtZW50ZXJzIGFyZQovLy8gdXJnZWQgdG8gZXh0ZW5kIG9yIG1peCBpbiBbQnl0ZUNvbnZlcnNpb25TaW5rQmFzZV0gdG8gZW5zdXJlIHRoYXQgdGhlaXIKLy8vIGNsYXNzIGNvdmVycyB0aGUgbmV3bHkgYWRkZWQgbWV0aG9kcy4KYWJzdHJhY3QgY2xhc3MgQnl0ZUNvbnZlcnNpb25TaW5rIGV4dGVuZHMgQ2h1bmtlZENvbnZlcnNpb25TaW5rPExpc3Q8aW50Pj4gewogIEJ5dGVDb252ZXJzaW9uU2luaygpOwogIGZhY3RvcnkgQnl0ZUNvbnZlcnNpb25TaW5rLndpdGhDYWxsYmFjaygKICAgICAgdm9pZCBjYWxsYmFjayhMaXN0PGludD4gYWNjdW11bGF0ZWQpKSA9IF9CeXRlQ2FsbGJhY2tTaW5rOwogIGZhY3RvcnkgQnl0ZUNvbnZlcnNpb25TaW5rLmZyb20oU2luazxMaXN0PGludD4+IHNpbmspID0gX0J5dGVBZGFwdGVyU2luazsKCiAgLy8vIEFkZHMgdGhlIG5leHQgW2NodW5rXSB0byBgdGhpc2AuCiAgLy8vCiAgLy8vIEFkZHMgdGhlIGJ5dGVzIGRlZmluZWQgYnkgW3N0YXJ0XSBhbmQgW2VuZF0tZXhjbHVzaXZlIHRvIGB0aGlzYC4KICAvLy8KICAvLy8gSWYgW2lzTGFzdF0gaXMgYHRydWVgIGNsb3NlcyBgdGhpc2AuCiAgLy8vCiAgLy8vIENvbnRyYXJ5IHRvIGBhZGRgIHRoZSBnaXZlbiBbY2h1bmtdIG11c3Qgbm90IGJlIGhlbGQgb250by4gT25jZSB0aGUgbWV0aG9kCiAgLy8vIHJldHVybnMsIGl0IGlzIHNhZmUgdG8gb3ZlcndyaXRlIHRoZSBkYXRhIGluIGl0LgogIHZvaWQgYWRkU2xpY2UoTGlzdDxpbnQ+IGNodW5rLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KTsKCiAgLy8gVE9ETyhmbG9pdHNjaCk6IGFkZCBtb3JlIG1ldGhvZHM6CiAgLy8gLSBpdGVyYXRlQnl0ZXMuCn0KCi8vLyBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgYmFzZS1jbGFzcyBmb3IgY29udmVydGVycyB0aGF0IG5lZWQgdG8gYWNjZXB0IGJ5dGUKLy8vIGlucHV0cy4KYWJzdHJhY3QgY2xhc3MgQnl0ZUNvbnZlcnNpb25TaW5rQmFzZSBleHRlbmRzIEJ5dGVDb252ZXJzaW9uU2luayB7CiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGNodW5rKTsKICB2b2lkIGNsb3NlKCk7CgogIHZvaWQgYWRkU2xpY2UoTGlzdDxpbnQ+IGNodW5rLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBhZGQoY2h1bmsuc3VibGlzdChzdGFydCwgZW5kKSk7CiAgICBpZiAoaXNMYXN0KSBjbG9zZSgpOwogIH0KfQoKLy8vIFRoaXMgY2xhc3MgYWRhcHRzIGEgc2ltcGxlIFtTaW5rXSB0byBhIFtCeXRlQ29udmVyc2lvblNpbmtdLgovLy8KLy8vIEFsbCBhZGRpdGlvbmFsIG1ldGhvZHMgb2YgdGhlIFtCeXRlQ29udmVyc2lvblNpbmtdIChjb21wYXJlZCB0byB0aGUKLy8vIENodW5rZWRDb252ZXJzaW9uU2luaykgYXJlIHJlZGlyZWN0ZWQgdG8gdGhlIGBhZGRgIG1ldGhvZC4KY2xhc3MgX0J5dGVBZGFwdGVyU2luayBleHRlbmRzIEJ5dGVDb252ZXJzaW9uU2lua0Jhc2UgewogIGZpbmFsIFNpbms8TGlzdDxpbnQ+PiBfc2luazsKCiAgX0J5dGVBZGFwdGVyU2luayh0aGlzLl9zaW5rKTsKCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGNodW5rKSB7CiAgICBfc2luay5hZGQoY2h1bmspOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9zaW5rLmNsb3NlKCk7CiAgfQp9CgovLy8gVGhpcyBjbGFzcyBhY2N1bXVsYXRlcyBhbGwgY2h1bmtzIGludG8gb25lIGxpc3Qgb2YgYnl0ZXMKLy8vIGFuZCBpbnZva2VzIGEgY2FsbGJhY2sgd2hlbiB0aGUgc2luayBpcyBjbG9zZWQuCi8vLwovLy8gVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byB0ZXJtaW5hdGUgYSBjaHVua2VkIGNvbnZlcnNpb24uCmNsYXNzIF9CeXRlQ2FsbGJhY2tTaW5rIGV4dGVuZHMgQnl0ZUNvbnZlcnNpb25TaW5rQmFzZSB7CiAgc3RhdGljIGNvbnN0IF9JTklUSUFMX0JVRkZFUl9TSVpFID0gMTAyNDsKCiAgZmluYWwgdm9pZCBGdW5jdGlvbihMaXN0PGludD4pIF9jYWxsYmFjazsKICBMaXN0PGludD4gX2J1ZmZlciA9IFVpbnQ4TGlzdChfSU5JVElBTF9CVUZGRVJfU0laRSk7CiAgaW50IF9idWZmZXJJbmRleCA9IDA7CgogIF9CeXRlQ2FsbGJhY2tTaW5rKHZvaWQgY2FsbGJhY2soTGlzdDxpbnQ+IGFjY3VtdWxhdGVkKSkKICAgICAgOiBfY2FsbGJhY2sgPSBjYWxsYmFjazsKCiAgdm9pZCBhZGQoSXRlcmFibGU8aW50PiBjaHVuaykgewogICAgdmFyIGZyZWVDb3VudCA9IF9idWZmZXIubGVuZ3RoIC0gX2J1ZmZlckluZGV4OwogICAgaWYgKGNodW5rLmxlbmd0aCA+IGZyZWVDb3VudCkgewogICAgICAvLyBHcm93IHRoZSBidWZmZXIuCiAgICAgIHZhciBvbGRMZW5ndGggPSBfYnVmZmVyLmxlbmd0aDsKICAgICAgdmFyIG5ld0xlbmd0aCA9IF9yb3VuZFRvUG93ZXJPZjIoY2h1bmsubGVuZ3RoICsgb2xkTGVuZ3RoKSAqIDI7CiAgICAgIHZhciBncm93biA9IFVpbnQ4TGlzdChuZXdMZW5ndGgpOwogICAgICBncm93bi5zZXRSYW5nZSgwLCBfYnVmZmVyLmxlbmd0aCwgX2J1ZmZlcik7CiAgICAgIF9idWZmZXIgPSBncm93bjsKICAgIH0KICAgIF9idWZmZXIuc2V0UmFuZ2UoX2J1ZmZlckluZGV4LCBfYnVmZmVySW5kZXggKyBjaHVuay5sZW5ndGgsIGNodW5rKTsKICAgIF9idWZmZXJJbmRleCArPSBjaHVuay5sZW5ndGg7CiAgfQoKICBzdGF0aWMgaW50IF9yb3VuZFRvUG93ZXJPZjIoaW50IHYpIHsKICAgIGFzc2VydCh2ID4gMCk7CiAgICB2LS07CiAgICB2IHw9IHYgPj4gMTsKICAgIHYgfD0gdiA+PiAyOwogICAgdiB8PSB2ID4+IDQ7CiAgICB2IHw9IHYgPj4gODsKICAgIHYgfD0gdiA+PiAxNjsKICAgIHYrKzsKICAgIHJldHVybiB2OwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9jYWxsYmFjayhfYnVmZmVyLnN1Ymxpc3QoMCwgX2J1ZmZlckluZGV4KSk7CiAgfQp9CnEATk48AQ8BFgFFJARKQwRRTCpNGCtBTAEnBkcGKwZRN0MBJxUCAU0MQx0QAUQkGQQCAUEESD84HwEgAR4WBAEREwQCAT00BD45LAEsNxgBOh4BIjMkGiZGKDIXBkgiBAEnEwkREREREgkOBAERMQQCASFkYXJ0OmNvbnZlcnQvYnl0ZV9jb252ZXJzaW9uLmRhcnRMb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvY29udmVydC9jaHVua2VkX2NvbnZlcnNpb24uZGFydIp/Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuY29udmVydDsKCi8vLyBBIFtDaHVua2VkQ29udmVyc2lvblNpbmtdIGlzIHVzZWQgdG8gdHJhbnNtaXQgZGF0YSBtb3JlIGVmZmljaWVudGx5IGJldHdlZW4KLy8vIHR3byBjb252ZXJ0ZXJzIGR1cmluZyBjaHVua2VkIGNvbnZlcnNpb25zLgovLy8KLy8vIFRoZSBiYXNpYyBgQ2h1bmtlZENvbnZlcnNpb25TaW5rYCBpcyBqdXN0IGEgW1NpbmtdLCBhbmQgY29udmVydGVycyBzaG91bGQKLy8vIHdvcmsgd2l0aCBhIHBsYWluIGBTaW5rYCwgYnV0IG1heSB3b3JrIG1vcmUgZWZmaWNpZW50bHkgd2l0aCBjZXJ0YWluCi8vLyBzcGVjaWFsaXplZCB0eXBlcyBvZiBgQ2h1bmtlZENvbnZlcnNpb25TaW5rYC4KLy8vCi8vLyBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGltcGxlbWVudGF0aW9ucyBvZiBgQ2h1bmtlZENvbnZlcnNpb25TaW5rYCBleHRlbmQKLy8vIHRoaXMgY2xhc3MsIHRvIGluaGVyaXQgYW55IGZ1cnRoZXIgbWV0aG9kcyB0aGF0IG1heSBiZSBhZGRlZCB0byB0aGUgY2xhc3MuCmFic3RyYWN0IGNsYXNzIENodW5rZWRDb252ZXJzaW9uU2luazxUPiBpbXBsZW1lbnRzIFNpbms8VD4gewogIENodW5rZWRDb252ZXJzaW9uU2luaygpOwogIGZhY3RvcnkgQ2h1bmtlZENvbnZlcnNpb25TaW5rLndpdGhDYWxsYmFjaygKICAgICAgdm9pZCBjYWxsYmFjayhMaXN0PFQ+IGFjY3VtdWxhdGVkKSkgPSBfU2ltcGxlQ2FsbGJhY2tTaW5rPFQ+OwoKICAvLy8gQWRkcyBjaHVua2VkIGRhdGEgdG8gdGhpcyBzaW5rLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBpcyBhbHNvIHVzZWQgd2hlbiBjb252ZXJ0ZXJzIGFyZSB1c2VkIGFzIFtTdHJlYW1UcmFuc2Zvcm1lcl1zLgogIHZvaWQgYWRkKFQgY2h1bmspOwoKICAvLy8gQ2xvc2VzIHRoZSBzaW5rLgogIC8vLwogIC8vLyBUaGlzIHNpZ25hbHMgdGhlIGVuZCBvZiB0aGUgY2h1bmtlZCBjb252ZXJzaW9uLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQKICAvLy8gd2hlbiBjb252ZXJ0ZXJzIGFyZSB1c2VkIGFzIFtTdHJlYW1UcmFuc2Zvcm1lcl0ncy4KICB2b2lkIGNsb3NlKCk7Cn0KCi8vLyBUaGlzIGNsYXNzIGFjY3VtdWxhdGVzIGFsbCBjaHVua3MgYW5kIGludm9rZXMgYSBjYWxsYmFjayB3aXRoIGEgbGlzdCBvZgovLy8gdGhlIGNodW5rcyB3aGVuIHRoZSBzaW5rIGlzIGNsb3NlZC4KLy8vCi8vLyBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIHRvIHRlcm1pbmF0ZSBhIGNodW5rZWQgY29udmVyc2lvbi4KY2xhc3MgX1NpbXBsZUNhbGxiYWNrU2luazxUPiBleHRlbmRzIENodW5rZWRDb252ZXJzaW9uU2luazxUPiB7CiAgZmluYWwgdm9pZCBGdW5jdGlvbihMaXN0PFQ+KSBfY2FsbGJhY2s7CiAgZmluYWwgTGlzdDxUPiBfYWNjdW11bGF0ZWQgPSA8VD5bXTsKCiAgX1NpbXBsZUNhbGxiYWNrU2luayh0aGlzLl9jYWxsYmFjayk7CgogIHZvaWQgYWRkKFQgY2h1bmspIHsKICAgIF9hY2N1bXVsYXRlZC5hZGQoY2h1bmspOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9jYWxsYmFjayhfYWNjdW11bGF0ZWQpOwogIH0KfQoKLy8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgbG9naWMgZm9yIGEgY2h1bmtlZCBjb252ZXJzaW9uIGFzIGEKLy8vIHN0cmVhbSB0cmFuc2Zvcm1lci4KLy8vCi8vLyBJdCBpcyB1c2VkIGFzIHN0cmF0ZWd5IGluIHRoZSBbRXZlbnRUcmFuc2Zvcm1TdHJlYW1dLgovLy8KLy8vIEl0IGFsc28gaW1wbGVtZW50cyB0aGUgW0NodW5rZWRDb252ZXJzaW9uU2lua10gaW50ZXJmYWNlIHNvIHRoYXQgaXQKLy8vIGNhbiBiZSB1c2VkIGFzIG91dHB1dCBzaW5rIGluIGEgY2h1bmtlZCBjb252ZXJzaW9uLgpjbGFzcyBfQ29udmVydGVyU3RyZWFtRXZlbnRTaW5rPFMsIFQ+IGltcGxlbWVudHMgRXZlbnRTaW5rPFM+IHsKICAvLy8gVGhlIG91dHB1dCBzaW5rIGZvciB0aGUgY29udmVydGVyLgogIGZpbmFsIEV2ZW50U2luazxUPiBfZXZlbnRTaW5rOwoKICAvLy8gVGhlIGlucHV0IHNpbmsgZm9yIG5ldyBkYXRhLiBBbGwgZGF0YSB0aGF0IGlzIHJlY2VpdmVkIHdpdGgKICAvLy8gW2hhbmRsZURhdGFdIGlzIGFkZGVkIGludG8gdGhpcyBzaW5rLgogIGZpbmFsIFNpbms8Uz4gX2NodW5rZWRTaW5rOwoKICBfQ29udmVydGVyU3RyZWFtRXZlbnRTaW5rKENvbnZlcnRlcjxTLCBUPiBjb252ZXJ0ZXIsIEV2ZW50U2luazxUPiBzaW5rKQogICAgICA6IF9ldmVudFNpbmsgPSBzaW5rLAogICAgICAgIF9jaHVua2VkU2luayA9IGNvbnZlcnRlci5zdGFydENodW5rZWRDb252ZXJzaW9uKHNpbmspOwoKICB2b2lkIGFkZChTIG8pIHsKICAgIF9jaHVua2VkU2luay5hZGQobyk7CiAgfQoKICB2b2lkIGFkZEVycm9yKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIF9ldmVudFNpbmsuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9jaHVua2VkU2luay5jbG9zZSgpOwogIH0KfQpWAE5OPAEPARYBUC8ETkkyBE1PPRsuRAEmBlEVARcGTDkQAgFMKAQ+QComAScBFh0EAREdBAIBQhgEOgRIOEApIQFCLB4BShs/ARIZBAE5LAQBERoEAgEkZGFydDpjb252ZXJ0L2NodW5rZWRfY29udmVyc2lvbi5kYXJ0P29yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2NvbnZlcnQvY29kZWMuZGFydIyaLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuY29udmVydDsKCi8vLyBBIFtDb2RlY10gZW5jb2RlcyBhbmQgKGlmIHN1cHBvcnRlZCkgZGVjb2RlcyBkYXRhLgovLy8KLy8vIENvZGVjcyBjYW4gYmUgZnVzZWQuIEZvciBleGFtcGxlIGZ1c2luZyBbanNvbl0gYW5kIFt1dGY4XSBwcm9kdWNlcwovLy8gYW4gZW5jb2RlciB0aGF0IGNhbiBjb252ZXJ0IEpzb24gb2JqZWN0cyBkaXJlY3RseSB0byBieXRlcywgb3IgY2FuIGRlY29kZQovLy8gYnl0ZXMgZGlyZWN0bHkgdG8ganNvbiBvYmplY3RzLgovLy8KLy8vIEZ1c2VkIGNvZGVjcyBnZW5lcmFsbHkgYXR0ZW1wdCB0byBvcHRpbWl6ZSB0aGUgb3BlcmF0aW9ucyBhbmQgY2FuIGJlIGZhc3RlcgovLy8gdGhhbiBleGVjdXRpbmcgZWFjaCBzdGVwIG9mIGFuIGVuY29kaW5nIHNlcGFyYXRlbHkuCmFic3RyYWN0IGNsYXNzIENvZGVjPFMsIFQ+IHsKICBjb25zdCBDb2RlYygpOwoKICAvLy8gRW5jb2RlcyBbaW5wdXRdLgogIC8vLwogIC8vLyBUaGUgaW5wdXQgaXMgZW5jb2RlZCBhcyBpZiBieSBgZW5jb2Rlci5jb252ZXJ0YC4KICBUIGVuY29kZShTIGlucHV0KSA9PiBlbmNvZGVyLmNvbnZlcnQoaW5wdXQpOwoKICAvLy8gRGVjb2RlcyBbZW5jb2RlZF0gZGF0YS4KICAvLy8KICAvLy8gVGhlIGlucHV0IGlzIGRlY29kZWQgYXMgaWYgYnkgYGRlY29kZXIuY29udmVydGAuCiAgUyBkZWNvZGUoVCBlbmNvZGVkKSA9PiBkZWNvZGVyLmNvbnZlcnQoZW5jb2RlZCk7CgogIC8vLyBSZXR1cm5zIHRoZSBlbmNvZGVyIGZyb20gW1NdIHRvIFtUXS4KICAvLy8KICAvLy8gSXQgbWF5IGJlIHN0YXRlZnVsIGFuZCBzaG91bGQgbm90IGJlIHJldXNlZC4KICBDb252ZXJ0ZXI8UywgVD4gZ2V0IGVuY29kZXI7CgogIC8vLyBSZXR1cm5zIHRoZSBkZWNvZGVyIG9mIGB0aGlzYCwgY29udmVydGluZyBmcm9tIFtUXSB0byBbU10uCiAgLy8vCiAgLy8vIEl0IG1heSBiZSBzdGF0ZWZ1bCBhbmQgc2hvdWxkIG5vdCBiZSByZXVzZWQuCiAgQ29udmVydGVyPFQsIFM+IGdldCBkZWNvZGVyOwoKICAvLy8gRnVzZXMgYHRoaXNgIHdpdGggYG90aGVyYC4KICAvLy8KICAvLy8gV2hlbiBlbmNvZGluZywgdGhlIHJlc3VsdGluZyBjb2RlYyBlbmNvZGVzIHdpdGggYHRoaXNgIGJlZm9yZQogIC8vLyBlbmNvZGluZyB3aXRoIFtvdGhlcl0uCiAgLy8vCiAgLy8vIFdoZW4gZGVjb2RpbmcsIHRoZSByZXN1bHRpbmcgY29kZWMgZGVjb2RlcyB3aXRoIFtvdGhlcl0gYmVmb3JlIGRlY29kaW5nCiAgLy8vIHdpdGggYHRoaXNgLgogIC8vLwogIC8vLyBJbiBzb21lIGNhc2VzIG9uZSBuZWVkcyB0byB1c2UgdGhlIFtpbnZlcnRlZF0gY29kZWNzIHRvIGJlIGFibGUgdG8gZnVzZQogIC8vLyB0aGVtIGNvcnJlY3RseS4gVGhhdCBpcywgdGhlIG91dHB1dCB0eXBlIG9mIGB0aGlzYCAoW1RdKSBtdXN0IG1hdGNoIHRoZQogIC8vLyBpbnB1dCB0eXBlIG9mIHRoZSBzZWNvbmQgY29kZWMgW290aGVyXS4KICAvLy8KICAvLy8gRXhhbXBsZXM6CiAgLy8vIGBgYGRhcnQKICAvLy8gZmluYWwganNvblRvQnl0ZXMgPSBqc29uLmZ1c2UodXRmOCk7CiAgLy8vIExpc3Q8aW50PiBieXRlcyA9IGpzb25Ub0J5dGVzLmVuY29kZShbImpzb24tb2JqZWN0Il0pOwogIC8vLyB2YXIgZGVjb2RlZCA9IGpzb25Ub0J5dGVzLmRlY29kZShieXRlcyk7CiAgLy8vIGFzc2VydChkZWNvZGVkIGlzIExpc3QgJiYgZGVjb2RlZFswXSA9PSAianNvbi1vYmplY3QiKTsKICAvLy8KICAvLy8gdmFyIGludmVydGVkID0ganNvbi5pbnZlcnRlZDsKICAvLy8gdmFyIGpzb25JZGVudGl0eSA9IGpzb24uZnVzZShpbnZlcnRlZCk7CiAgLy8vIHZhciBqc29uT2JqZWN0ID0ganNvbklkZW50aXR5LmVuY29kZShbIjEiLCAyXSk7CiAgLy8vIGFzc2VydChqc29uT2JqZWN0IGlzIExpc3QgJiYganNvbk9iamVjdFswXSA9PSAiMSIgJiYganNvbk9iamVjdFsxXSA9PSAyKTsKICAvLy8gYGBgCiAgLy8gVE9ETyhmbG9pdHNjaCk6IHVzZSBiZXR0ZXIgZXhhbXBsZSB3aXRoIGxpbmUtc3BsaXR0ZXIgb25jZSB0aGF0IG9uZSBpcwogIC8vIGluIHRoaXMgbGlicmFyeS4KICBDb2RlYzxTLCBSPiBmdXNlPFI+KENvZGVjPFQsIFI+IG90aGVyKSB7CiAgICByZXR1cm4gX0Z1c2VkQ29kZWM8UywgVCwgUj4odGhpcywgb3RoZXIpOwogIH0KCiAgLy8vIEludmVydHMgYHRoaXNgLgogIC8vLwogIC8vLyBUaGUgW2VuY29kZXJdIGFuZCBbZGVjb2Rlcl0gb2YgdGhlIHJlc3VsdGluZyBjb2RlYyBhcmUgc3dhcHBlZC4KICBDb2RlYzxULCBTPiBnZXQgaW52ZXJ0ZWQgPT4gX0ludmVydGVkQ29kZWM8VCwgUz4odGhpcyk7Cn0KCi8vLyBGdXNlcyB0aGUgZ2l2ZW4gY29kZWNzLgovLy8KLy8vIEluIHRoZSBub24tY2h1bmtlZCBjb252ZXJzaW9uIHNpbXBseSBpbnZva2VzIHRoZSBub24tY2h1bmtlZCBjb252ZXJzaW9ucyBpbgovLy8gc2VxdWVuY2UuCmNsYXNzIF9GdXNlZENvZGVjPFMsIE0sIFQ+IGV4dGVuZHMgQ29kZWM8UywgVD4gewogIGZpbmFsIENvZGVjPFMsIE0+IF9maXJzdDsKICBmaW5hbCBDb2RlYzxNLCBUPiBfc2Vjb25kOwoKICBDb252ZXJ0ZXI8UywgVD4gZ2V0IGVuY29kZXIgPT4gX2ZpcnN0LmVuY29kZXIuZnVzZTxUPihfc2Vjb25kLmVuY29kZXIpOwogIENvbnZlcnRlcjxULCBTPiBnZXQgZGVjb2RlciA9PiBfc2Vjb25kLmRlY29kZXIuZnVzZTxTPihfZmlyc3QuZGVjb2Rlcik7CgogIF9GdXNlZENvZGVjKHRoaXMuX2ZpcnN0LCB0aGlzLl9zZWNvbmQpOwp9CgpjbGFzcyBfSW52ZXJ0ZWRDb2RlYzxULCBTPiBleHRlbmRzIENvZGVjPFQsIFM+IHsKICBmaW5hbCBDb2RlYzxTLCBUPiBfY29kZWM7CgogIF9JbnZlcnRlZENvZGVjKENvZGVjPFMsIFQ+IGNvZGVjKSA6IF9jb2RlYyA9IGNvZGVjOwoKICBDb252ZXJ0ZXI8VCwgUz4gZ2V0IGVuY29kZXIgPT4gX2NvZGVjLmRlY29kZXI7CiAgQ29udmVydGVyPFMsIFQ+IGdldCBkZWNvZGVyID0+IF9jb2RlYy5lbmNvZGVyOwoKICBDb2RlYzxTLCBUPiBnZXQgaW52ZXJ0ZWQgPT4gX2NvZGVjOwp9CmUATk48AQ8BFgE3BEdOJARQOB0RARcGNy8BHgY3MwErBjMfAUEGMx8BIQZEHQZOEwZOTi4GEA4rPS8+BiQuNlAKTBYrLgQBFgZGOgIBHARQDjEcHQFKSgEqAgExHAE2ATExASYCARdkYXJ0OmNvbnZlcnQvY29kZWMuZGFydENvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9jb252ZXJ0L2NvbnZlcnRlci5kYXJ0iqUvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5jb252ZXJ0OwoKLy8vIEEgW0NvbnZlcnRlcl0gY29udmVydHMgZGF0YSBmcm9tIG9uZSByZXByZXNlbnRhdGlvbiBpbnRvIGFub3RoZXIuCi8vLwovLy8gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBpbXBsZW1lbnRhdGlvbnMgb2YgYENvbnZlcnRlcmAgZXh0ZW5kIHRoaXMgY2xhc3MsCi8vLyB0byBpbmhlcml0IGFueSBmdXJ0aGVyIG1ldGhvZHMgdGhhdCBtYXkgYmUgYWRkZWQgdG8gdGhlIGNsYXNzLgphYnN0cmFjdCBjbGFzcyBDb252ZXJ0ZXI8UywgVD4gZXh0ZW5kcyBTdHJlYW1UcmFuc2Zvcm1lckJhc2U8UywgVD4gewogIGNvbnN0IENvbnZlcnRlcigpOwoKICAvLy8gQWRhcHRzIFtzb3VyY2VdIHRvIGJlIGEgYENvbnZlcnRlcjxUUywgVFQ+YC4KICAvLy8KICAvLy8gVGhpcyBhbGxvd3MgW3NvdXJjZV0gdG8gYmUgdXNlZCBhdCB0aGUgbmV3IHR5cGUsIGJ1dCBhdCBydW4tdGltZSBpdAogIC8vLyBtdXN0IHNhdGlzZnkgdGhlIHJlcXVpcmVtZW50cyBvZiBib3RoIHRoZSBuZXcgdHlwZSBhbmQgaXRzIG9yaWdpbmFsIHR5cGUuCiAgLy8vCiAgLy8vIENvbnZlcnNpb24gaW5wdXQgbXVzdCBiZSBib3RoIFtTU10gYW5kIFtUU10gYW5kIHRoZSBvdXRwdXQgY3JlYXRlZCBieQogIC8vLyBbc291cmNlXSBmb3IgdGhvc2UgaW5wdXQgbXVzdCBiZSBib3RoIFtTVF0gYW5kIFtUVF0uCiAgc3RhdGljIENvbnZlcnRlcjxUUywgVFQ+IGNhc3RGcm9tPFNTLCBTVCwgVFMsIFRUPihDb252ZXJ0ZXI8U1MsIFNUPiBzb3VyY2UpID0+CiAgICAgIENhc3RDb252ZXJ0ZXI8U1MsIFNULCBUUywgVFQ+KHNvdXJjZSk7CgogIC8vLyBDb252ZXJ0cyBbaW5wdXRdIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbnZlcnNpb24uCiAgVCBjb252ZXJ0KFMgaW5wdXQpOwoKICAvLy8gRnVzZXMgYHRoaXNgIHdpdGggW290aGVyXS4KICAvLy8KICAvLy8gRW5jb2Rpbmcgd2l0aCB0aGUgcmVzdWx0aW5nIGNvbnZlcnRlciBpcyBlcXVpdmFsZW50IHRvIGNvbnZlcnRpbmcgd2l0aAogIC8vLyBgdGhpc2AgYmVmb3JlIGNvbnZlcnRpbmcgd2l0aCBgb3RoZXJgLgogIENvbnZlcnRlcjxTLCBUVD4gZnVzZTxUVD4oQ29udmVydGVyPFQsIFRUPiBvdGhlcikgewogICAgcmV0dXJuIF9GdXNlZENvbnZlcnRlcjxTLCBULCBUVD4odGhpcywgb3RoZXIpOwogIH0KCiAgLy8vIFN0YXJ0cyBhIGNodW5rZWQgY29udmVyc2lvbi4KICAvLy8KICAvLy8gVGhlIHJldHVybmVkIHNpbmsgc2VydmVzIGFzIGlucHV0IGZvciB0aGUgbG9uZy1ydW5uaW5nIGNvbnZlcnNpb24uIFRoZQogIC8vLyBnaXZlbiBbc2lua10gc2VydmVzIGFzIG91dHB1dC4KICBTaW5rPFM+IHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxUPiBzaW5rKSB7CiAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJUaGlzIGNvbnZlcnRlciBkb2VzIG5vdCBzdXBwb3J0IGNodW5rZWQgY29udmVyc2lvbnM6ICR0aGlzIik7CiAgfQoKICBTdHJlYW08VD4gYmluZChTdHJlYW08Uz4gc3RyZWFtKSB7CiAgICByZXR1cm4gU3RyZWFtPFQ+LmV2ZW50VHJhbnNmb3JtZWQoCiAgICAgICAgc3RyZWFtLCAoRXZlbnRTaW5rIHNpbmspID0+IF9Db252ZXJ0ZXJTdHJlYW1FdmVudFNpbmsodGhpcywgc2luaykpOwogIH0KCiAgLy8vIFByb3ZpZGVzIGEgYENvbnZlcnRlcjxSUywgUlQ+YCB2aWV3IG9mIHRoaXMgc3RyZWFtIHRyYW5zZm9ybWVyLgogIC8vLwogIC8vLyBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVyIHdpbGwgY2hlY2sgYXQgcnVuLXRpbWUgdGhhdCBhbGwgY29udmVyc2lvbgogIC8vLyBpbnB1dHMgYXJlIGFjdHVhbGx5IGluc3RhbmNlcyBvZiBbU10sCiAgLy8vIGFuZCBpdCB3aWxsIGNoZWNrIHRoYXQgYWxsIGNvbnZlcnNpb24gb3V0cHV0IHByb2R1Y2VkIGJ5IHRoaXMgY29udmVydGVyCiAgLy8vIGFyZSBhY3R1YWxseSBpbnN0YW5jZXMgb2YgW1JUXS4KICBDb252ZXJ0ZXI8UlMsIFJUPiBjYXN0PFJTLCBSVD4oKSA9PiBDb252ZXJ0ZXIuY2FzdEZyb208UywgVCwgUlMsIFJUPih0aGlzKTsKfQoKLy8vIEZ1c2VzIHR3byBjb252ZXJ0ZXJzLgovLy8KLy8vIEZvciBhIG5vbi1jaHVua2VkIGNvbnZlcnNpb24gY29udmVydHMgdGhlIGlucHV0IGluIHNlcXVlbmNlLgpjbGFzcyBfRnVzZWRDb252ZXJ0ZXI8UywgTSwgVD4gZXh0ZW5kcyBDb252ZXJ0ZXI8UywgVD4gewogIGZpbmFsIENvbnZlcnRlcjxTLCBNPiBfZmlyc3Q7CiAgZmluYWwgQ29udmVydGVyPE0sIFQ+IF9zZWNvbmQ7CgogIF9GdXNlZENvbnZlcnRlcih0aGlzLl9maXJzdCwgdGhpcy5fc2Vjb25kKTsKCiAgVCBjb252ZXJ0KFMgaW5wdXQpID0+IF9zZWNvbmQuY29udmVydChfZmlyc3QuY29udmVydChpbnB1dCkpOwoKICBTaW5rPFM+IHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxUPiBzaW5rKSB7CiAgICByZXR1cm4gX2ZpcnN0LnN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oX3NlY29uZC5zdGFydENodW5rZWRDb252ZXJzaW9uKHNpbmspKTsKICB9Cn0KTABOTjwBDwEWAUYETUNFFQEzBkpQBkw7US0BQRYBIQZNLTYzBAEjBk0lMRxHBAElJ0wEAUYGSyxOJk4CARoEQTkgIQEuAUABMVAEAgEbZGFydDpjb252ZXJ0L2NvbnZlcnRlci5kYXJ0Qm9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2NvbnZlcnQvZW5jb2RpbmcuZGFydIoJLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuY29udmVydDsKCi8vLyBPcGVuLWVuZGVkIEVuY29kaW5nIGVudW0uCmFic3RyYWN0IGNsYXNzIEVuY29kaW5nIGV4dGVuZHMgQ29kZWM8U3RyaW5nLCBMaXN0PGludD4+IHsKICBjb25zdCBFbmNvZGluZygpOwoKICAvLy8gUmV0dXJucyB0aGUgZW5jb2RlciBmcm9tIGBTdHJpbmdgIHRvIGBMaXN0PGludD5gLgogIC8vLwogIC8vLyBJdCBtYXkgYmUgc3RhdGVmdWwgYW5kIHNob3VsZCBub3QgYmUgcmV1c2VkLgogIENvbnZlcnRlcjxTdHJpbmcsIExpc3Q8aW50Pj4gZ2V0IGVuY29kZXI7CgogIC8vLyBSZXR1cm5zIHRoZSBkZWNvZGVyIG9mIGB0aGlzYCwgY29udmVydGluZyBmcm9tIGBMaXN0PGludD5gIHRvIGBTdHJpbmdgLgogIC8vLwogIC8vLyBJdCBtYXkgYmUgc3RhdGVmdWwgYW5kIHNob3VsZCBub3QgYmUgcmV1c2VkLgogIENvbnZlcnRlcjxMaXN0PGludD4sIFN0cmluZz4gZ2V0IGRlY29kZXI7CgogIEZ1dHVyZTxTdHJpbmc+IGRlY29kZVN0cmVhbShTdHJlYW08TGlzdDxpbnQ+PiBieXRlU3RyZWFtKSB7CiAgICByZXR1cm4gZGVjb2RlcgogICAgICAgIC5iaW5kKGJ5dGVTdHJlYW0pCiAgICAgICAgLmZvbGQoU3RyaW5nQnVmZmVyKCksCiAgICAgICAgICAgIChTdHJpbmdCdWZmZXIgYnVmZmVyLCBTdHJpbmcgc3RyaW5nKSA9PiBidWZmZXIuLndyaXRlKHN0cmluZykpCiAgICAgICAgLnRoZW4oKFN0cmluZ0J1ZmZlciBidWZmZXIpID0+IGJ1ZmZlci50b1N0cmluZygpKTsKICB9CgogIC8vLyBOYW1lIG9mIHRoZSBlbmNvZGluZy4KICAvLy8KICAvLy8gSWYgdGhlIGVuY29kaW5nIGlzIHN0YW5kYXJkaXplZCwgdGhpcyBpcyB0aGUgbG93ZXItY2FzZSB2ZXJzaW9uIG9mIG9uZSBvZgogIC8vLyB0aGUgSUFOQSBvZmZpY2lhbCBuYW1lcyBmb3IgdGhlIGNoYXJhY3RlciBzZXQgKHNlZQogIC8vLyBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzL2NoYXJhY3Rlci1zZXRzLnhtbCkKICBTdHJpbmcgZ2V0IG5hbWU7CgogIC8vIEFsbCBhbGlhc2VzIChpbiBsb3dlcmNhc2UpIG9mIHN1cHBvcnRlZCBlbmNvZGluZyBmcm9tCiAgLy8gaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9jaGFyYWN0ZXItc2V0cy9jaGFyYWN0ZXItc2V0cy54bWwuCiAgc3RhdGljIGZpbmFsIE1hcDxTdHJpbmcsIEVuY29kaW5nPiBfbmFtZVRvRW5jb2RpbmcgPSA8U3RyaW5nLCBFbmNvZGluZz57CiAgICAvLyBJU09fODg1OS0xOjE5ODcuCiAgICAiaXNvXzg4NTktMToxOTg3IjogbGF0aW4xLAogICAgImlzby1pci0xMDAiOiBsYXRpbjEsCiAgICAiaXNvXzg4NTktMSI6IGxhdGluMSwKICAgICJpc28tODg1OS0xIjogbGF0aW4xLAogICAgImxhdGluMSI6IGxhdGluMSwKICAgICJsMSI6IGxhdGluMSwKICAgICJpYm04MTkiOiBsYXRpbjEsCiAgICAiY3A4MTkiOiBsYXRpbjEsCiAgICAiY3Npc29sYXRpbjEiOiBsYXRpbjEsCgogICAgLy8gVVMtQVNDSUkuCiAgICAiaXNvLWlyLTYiOiBhc2NpaSwKICAgICJhbnNpX3gzLjQtMTk2OCI6IGFzY2lpLAogICAgImFuc2lfeDMuNC0xOTg2IjogYXNjaWksCiAgICAiaXNvXzY0Ni5pcnY6MTk5MSI6IGFzY2lpLAogICAgImlzbzY0Ni11cyI6IGFzY2lpLAogICAgInVzLWFzY2lpIjogYXNjaWksCiAgICAidXMiOiBhc2NpaSwKICAgICJpYm0zNjciOiBhc2NpaSwKICAgICJjcDM2NyI6IGFzY2lpLAogICAgImNzYXNjaWkiOiBhc2NpaSwKICAgICJhc2NpaSI6IGFzY2lpLCAvLyBUaGlzIGlzIG5vdCBpbiB0aGUgSUFOQSBvZmZpY2lhbCBuYW1lcy4KCiAgICAvLyBVVEYtOC4KICAgICJjc3V0ZjgiOiB1dGY4LAogICAgInV0Zi04IjogdXRmOAogIH07CgogIC8vLyBHZXRzIGFuIFtFbmNvZGluZ10gb2JqZWN0IGZyb20gdGhlIG5hbWUgb2YgdGhlIGNoYXJhY3RlciBzZXQKICAvLy8gbmFtZS4gVGhlIG5hbWVzIHVzZWQgYXJlIHRoZSBJQU5BIG9mZmljaWFsIG5hbWVzIGZvciB0aGUKICAvLy8gY2hhcmFjdGVyIHNldCAoc2VlCiAgLy8vIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvY2hhcmFjdGVyLXNldHMvY2hhcmFjdGVyLXNldHMueG1sKS4KICAvLy8KICAvLy8gVGhlIFtuYW1lXSBwYXNzZWQgaXMgY2FzZSBpbnNlbnNpdGl2ZS4KICAvLy8KICAvLy8gSWYgY2hhcmFjdGVyIHNldCBpcyBub3Qgc3VwcG9ydGVkIFs6bnVsbDpdIGlzIHJldHVybmVkLgogIHN0YXRpYyBFbmNvZGluZyBnZXRCeU5hbWUoU3RyaW5nIG5hbWUpIHsKICAgIGlmIChuYW1lID09IG51bGwpIHJldHVybiBudWxsOwogICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKICAgIHJldHVybiBfbmFtZVRvRW5jb2RpbmdbbmFtZV07CiAgfQp9ClUATk48AQ8BFgEeOxQBOAYzLAFOBjMsAT4TGh5LOwQBHAZQOUkTATtISxgfGhoaFhIWFRsBERcdHR8YFxEVFBY/AQ4UEgUBQz8ZSgYtBj4rIx8iBAIBGmRhcnQ6Y29udmVydC9lbmNvZGluZy5kYXJ0RW9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2NvbnZlcnQvaHRtbF9lc2NhcGUuZGFydJ/XLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuY29udmVydDsKCi8vLyBBIGBTdHJpbmdgIGNvbnZlcnRlciB0aGF0IGNvbnZlcnRzIGNoYXJhY3RlcnMgdG8gSFRNTCBlbnRpdGllcy4KLy8vCi8vLyBUaGlzIGlzIGludGVuZGVkIHRvIHNhbml0aXplIHRleHQgYmVmb3JlIGluc2VydGluZyB0aGUgdGV4dCBpbnRvIGFuIEhUTUwKLy8vIGRvY3VtZW50LiBDaGFyYWN0ZXJzIHRoYXQgYXJlIG1lYW5pbmdmdWwgaW4gSFRNTCBhcmUgY29udmVydGVkIHRvCi8vLyBIVE1MIGVudGl0aWVzIChsaWtlIGAmYW1wO2AgZm9yIGAmYCkuCi8vLwovLy8gVGhlIGdlbmVyYWwgY29udmVydGVyIGVzY2FwZXMgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbWVhbmluZ2Z1bCBpbiBIVE1MCi8vLyBhdHRyaWJ1dGVzIG9yIG5vcm1hbCBlbGVtZW50IGNvbnRleHQuIEVsZW1lbnRzIHdpdGggc3BlY2lhbCBjb250ZW50IHR5cGVzCi8vLyAobGlrZSBDU1Mgb3IgSmF2YVNjcmlwdCkgbWF5IG5lZWQgYSBtb3JlIHNwZWNpYWxpemVkIGVzY2FwaW5nIHRoYXQKLy8vIHVuZGVyc3RhbmRzIHRoYXQgY29udGVudCB0eXBlLgovLy8KLy8vIElmIHRoZSBjb250ZXh0IHdoZXJlIHRoZSB0ZXh0IHdpbGwgYmUgaW5zZXJ0ZWQgaXMga25vd24gaW4gbW9yZSBkZXRhaWwsCi8vLyBpdCdzIHBvc3NpYmxlIHRvIG9taXQgZXNjYXBpbmcgc29tZSBjaGFyYWN0ZXJzIChsaWtlIHF1b3RlcyB3aGVuIG5vdAovLy8gaW5zaWRlIGFuIGF0dHJpYnV0ZSB2YWx1ZSkuCi8vLwovLy8gVGhlIGVzY2FwZWQgdGV4dCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBxdW90ZWQgSFRNTCBhdHRyaWJ1dGVzIHZhbHVlcwovLy8gb3IgYXMgdGV4dCBjb250ZW50IG9mIGEgbm9ybWFsIGVsZW1lbnQuIFVzaW5nIHRoZSBlc2NhcGVkIHRleHQgaW5zaWRlIGEKLy8vIHRhZywgYnV0IG5vdCBpbnNpZGUgYSBxdW90ZWQgYXR0cmlidXRlIHZhbHVlLCBpcyBzdGlsbCBkYW5nZXJvdXMuCmNvbnN0IEh0bWxFc2NhcGUgaHRtbEVzY2FwZSA9IEh0bWxFc2NhcGUoKTsKCi8vLyBIVE1MIGVzY2FwZSBtb2Rlcy4KLy8vCi8vLyBBbGxvd3Mgc3BlY2lmeWluZyBhIG1vZGUgZm9yIEhUTUwgZXNjYXBpbmcgdGhhdCBkZXBlbmQgb24gdGhlIGNvbnRleHQKLy8vIHdoZXJlIHRoZSBlc2NhcGVkIHJlc3VsdCBpcyBnb2luZyB0byBiZSB1c2VkLgovLy8gVGhlIHJlbGV2YW50IGNvbnRleHRzIGFyZToKLy8vCi8vLyAqIGFzIHRleHQgY29udGVudCBvZiBhbiBIVE1MIGVsZW1lbnQuCi8vLyAqIGFzIHZhbHVlIG9mIGEgKHNpbmdsZS0gb3IgZG91YmxlLSkgcXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS4KLy8vCi8vLyBBbGwgbW9kZXMgcmVxdWlyZSBlc2NhcGluZyBvZiBgJmAgKGFtcGVyc2FuZCkgY2hhcmFjdGVycywgYW5kIG1heQovLy8gZW5hYmxlIGVzY2FwaW5nIG9mIG1vcmUgY2hhcmFjdGVycy4KLy8vCi8vLyBDdXN0b20gZXNjYXBlIG1vZGVzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZSBbSHRtbEVzY2FwZU1vZGUuSHRtbEVzY2FwZU1vZGVdCi8vLyBjb25zdHJ1Y3Rvci4KY2xhc3MgSHRtbEVzY2FwZU1vZGUgewogIGZpbmFsIFN0cmluZyBfbmFtZTsKCiAgLy8vIFdoZXRoZXIgdG8gZXNjYXBlICc8JyBhbmQgJz4nLgogIGZpbmFsIGJvb2wgZXNjYXBlTHRHdDsKCiAgLy8vIFdoZXRoZXIgdG8gZXNjYXBlICciJyAocXVvdGUpLgogIGZpbmFsIGJvb2wgZXNjYXBlUXVvdDsKCiAgLy8vIFdoZXRoZXIgdG8gZXNjYXBlICInIiAoYXBvc3Ryb3BoZSkuCiAgZmluYWwgYm9vbCBlc2NhcGVBcG9zOwoKICAvLy8gV2hldGhlciB0byBlc2NhcGUgIi8iIChmb3J3YXJkIHNsYXNoLCBzb2xpZHVzKS4KICAvLy8KICAvLy8gRXNjYXBpbmcgYSBzbGFzaCBpcyByZWNvbW1lbmRlZCB0byBhdm9pZCBjcm9zcy1zaXRlIHNjcmlwdGluZyBhdHRhY2tzIGJ5CiAgLy8vIFt0aGUgT3BlbiBXZWIgQXBwbGljYXRpb24gU2VjdXJpdHkgUHJvamVjdF0oaHR0cHM6Ly93d3cub3dhc3Aub3JnL2luZGV4LnBocC9YU1NfKENyb3NzX1NpdGVfU2NyaXB0aW5nKV9QcmV2ZW50aW9uX0NoZWF0X1NoZWV0I1JVTEVfLjIzMV8tX0hUTUxfRXNjYXBlX0JlZm9yZV9JbnNlcnRpbmdfVW50cnVzdGVkX0RhdGFfaW50b19IVE1MX0VsZW1lbnRfQ29udGVudCkKICBmaW5hbCBib29sIGVzY2FwZVNsYXNoOwoKICAvLy8gRGVmYXVsdCBlc2NhcGluZyBtb2RlIHdoaWNoIGVzY2FwZSBhbGwgY2hhcmFjdGVycy4KICAvLy8KICAvLy8gVGhlIHJlc3VsdCBvZiBzdWNoIGFuIGVzY2FwaW5nIGlzIHVzYWJsZSBib3RoIGluIGVsZW1lbnQgY29udGVudCBhbmQKICAvLy8gaW4gYW55IGF0dHJpYnV0ZSB2YWx1ZS4KICAvLy8KICAvLy8gVGhlIGVzY2FwaW5nIG9ubHkgd29ya3MgZm9yIGVsZW1lbnRzIHdpdGggbm9ybWFsIEhUTUwgY29udGVudCwKICAvLy8gYW5kIG5vdCBmb3IsIGZvciBleGFtcGxlLCBzY3JpcHQgb3Igc3R5bGUgZWxlbWVudCBjb250ZW50LAogIC8vLyB3aGljaCByZXF1aXJlIGVzY2FwZXMgbWF0Y2hpbmcgdGhlaXIgcGFydGljdWxhciBjb250ZW50IHN5bnRheC4KICBzdGF0aWMgY29uc3QgSHRtbEVzY2FwZU1vZGUgdW5rbm93biA9CiAgICAgIEh0bWxFc2NhcGVNb2RlLl8oJ3Vua25vd24nLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKCiAgLy8vIEVzY2FwaW5nIG1vZGUgZm9yIHRleHQgZ29pbmcgaW50byBkb3VibGUtcXVvdGVkIEhUTUwgYXR0cmlidXRlIHZhbHVlcy4KICAvLy8KICAvLy8gVGhlIHJlc3VsdCBzaG91bGQgbm90IGJlIHVzZWQgYXMgdGhlIGNvbnRlbnQgb2YgYW4gdW5xdW90ZWQKICAvLy8gb3Igc2luZ2xlLXF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuCiAgLy8vCiAgLy8vIEVzY2FwZXMgZG91YmxlIHF1b3RlcyAoYCJgKSBidXQgbm90IHNpbmdsZSBxdW90ZXMgKGAnYCksCiAgLy8vIGFuZCBlc2NhcGVzIGA8YCBhbmQgYD5gIGNoYXJhY3RlcnMgYmVjYXVzZSB0aGV5IGFyZSBub3QgYWxsb3dlZAogIC8vLyBpbiBzdHJpY3QgWEhUTUwgYXR0cmlidXRlcwogIHN0YXRpYyBjb25zdCBIdG1sRXNjYXBlTW9kZSBhdHRyaWJ1dGUgPQogICAgICBIdG1sRXNjYXBlTW9kZS5fKCdhdHRyaWJ1dGUnLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UpOwoKICAvLy8gRXNjYXBpbmcgbW9kZSBmb3IgdGV4dCBnb2luZyBpbnRvIHNpbmdsZS1xdW90ZWQgSFRNTCBhdHRyaWJ1dGUgdmFsdWVzLgogIC8vLwogIC8vLyBUaGUgcmVzdWx0IHNob3VsZCBub3QgYmUgdXNlZCBhcyB0aGUgY29udGVudCBvZiBhbiB1bnF1b3RlZAogIC8vLyBvciBkb3VibGUtcXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS4KICAvLy8KICAvLy8gRXNjYXBlcyBzaW5nbGUgcXVvdGVzIChgJ2ApIGJ1dCBub3QgZG91YmxlIHF1b3RlcyAoYCJgKSwKICAvLy8gYW5kIGVzY2FwZXMgYDxgIGFuZCBgPmAgY2hhcmFjdGVycyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBhbGxvd2VkCiAgLy8vIGluIHN0cmljdCBYSFRNTCBhdHRyaWJ1dGVzCiAgc3RhdGljIGNvbnN0IEh0bWxFc2NhcGVNb2RlIHNxQXR0cmlidXRlID0KICAgICAgSHRtbEVzY2FwZU1vZGUuXygnYXR0cmlidXRlJywgdHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNlKTsKCiAgLy8vIEVzY2FwaW5nIG1vZGUgZm9yIHRleHQgZ29pbmcgaW50byBIVE1MIGVsZW1lbnQgY29udGVudC4KICAvLy8KICAvLy8gVGhlIGVzY2FwaW5nIG9ubHkgd29ya3MgZm9yIGVsZW1lbnRzIHdpdGggbm9ybWFsIEhUTUwgY29udGVudCwKICAvLy8gYW5kIG5vdCBmb3IsIGZvciBleGFtcGxlLCBzY3JpcHQgb3Igc3R5bGUgZWxlbWVudCBjb250ZW50LAogIC8vLyB3aGljaCByZXF1aXJlIGVzY2FwZXMgbWF0Y2hpbmcgdGhlaXIgcGFydGljdWxhciBjb250ZW50IHN5bnRheC4KICAvLy8KICAvLy8gRXNjYXBlcyBgPGAgYW5kIGA+YCBjaGFyYWN0ZXJzLgogIHN0YXRpYyBjb25zdCBIdG1sRXNjYXBlTW9kZSBlbGVtZW50ID0KICAgICAgSHRtbEVzY2FwZU1vZGUuXygnZWxlbWVudCcsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwoKICBjb25zdCBIdG1sRXNjYXBlTW9kZS5fKHRoaXMuX25hbWUsIHRoaXMuZXNjYXBlTHRHdCwgdGhpcy5lc2NhcGVRdW90LAogICAgICB0aGlzLmVzY2FwZUFwb3MsIHRoaXMuZXNjYXBlU2xhc2gpOwoKICAvLy8gQ3JlYXRlIGEgY3VzdG9tIGVzY2FwaW5nIG1vZGUuCiAgLy8vCiAgLy8vIEFsbCBtb2RlcyBlc2NhcGUgYCZgLgogIC8vLyBUaGUgbW9kZSBjYW4gZnVydGhlciBiZSBzZXQgdG8gZXNjYXBlIGA8YCBhbmQgYD5gIChbZXNjYXBlTHRHdF0pLAogIC8vLyBgImAgKFtlc2NhcGVRdW90XSksIGAnYCAoW2VzY2FwZUFwb3NdKSwgYW5kL29yIGAvYCAoW2VzY2FwZVNsYXNoXSkuCiAgY29uc3QgSHRtbEVzY2FwZU1vZGUoCiAgICAgIHtTdHJpbmcgbmFtZSA9ICJjdXN0b20iLAogICAgICB0aGlzLmVzY2FwZUx0R3QgPSBmYWxzZSwKICAgICAgdGhpcy5lc2NhcGVRdW90ID0gZmFsc2UsCiAgICAgIHRoaXMuZXNjYXBlQXBvcyA9IGZhbHNlLAogICAgICB0aGlzLmVzY2FwZVNsYXNoID0gZmFsc2V9KQogICAgICA6IF9uYW1lID0gbmFtZTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gX25hbWU7Cn0KCi8vLyBDb252ZXJ0ZXIgd2hpY2ggZXNjYXBlcyBjaGFyYWN0ZXJzIHdpdGggc3BlY2lhbCBtZWFuaW5nIGluIEhUTUwuCi8vLwovLy8gVGhlIGNvbnZlcnRlciBmaW5kcyBjaGFyYWN0ZXJzIHRoYXQgYXJlIHNpZ25pZmljYW50IGluIEhUTUwgc291cmNlIGFuZAovLy8gcmVwbGFjZXMgdGhlbSB3aXRoIGNvcnJlc3BvbmRpbmcgSFRNTCBlbnRpdGllcy4KLy8vCi8vLyBUaGUgY2hhcmFjdGVycyB0aGF0IG5lZWQgZXNjYXBpbmcgaW4gSFRNTCBhcmU6Ci8vLwovLy8gKiBgJmAgKGFtcGVyc2FuZCkgYWx3YXlzIG5lZWQgdG8gYmUgZXNjYXBlZC4KLy8vICogYDxgIChsZXNzIHRoYW4pIGFuZCAnPicgKGdyZWF0ZXIgdGhhbikgd2hlbiBpbnNpZGUgYW4gZWxlbWVudC4KLy8vICogYCJgIChxdW90ZSkgd2hlbiBpbnNpZGUgYSBkb3VibGUtcXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS4KLy8vICogYCdgIChhcG9zdHJvcGhlKSB3aGVuIGluc2lkZSBhIHNpbmdsZS1xdW90ZWQgYXR0cmlidXRlIHZhbHVlLgovLy8gICAgICAgQXBvc3Ryb3BoZSBpcyBlc2NhcGVkIGFzIGAmIzM5O2AgaW5zdGVhZCBvZiBgJmFwb3M7YCBzaW5jZQovLy8gICAgICAgbm90IGFsbCBicm93c2VycyB1bmRlcnN0YW5kIGAmYXBvcztgLgovLy8gKiBgL2AgKHNsYXNoKSBpcyByZWNvbW1lbmRlZCB0byBiZSBlc2NhcGVkIGJlY2F1c2UgaXQgbWF5IGJlIHVzZWQKLy8vICAgICAgIHRvIHRlcm1pbmF0ZSBhbiBlbGVtZW50IGluIHNvbWUgSFRNTCBkaWFsZWN0cy4KLy8vCi8vLyBFc2NhcGluZyBgPmAgKGdyZWF0ZXIgdGhhbikgaXNuJ3QgbmVjZXNzYXJ5LCBidXQgdGhlIHJlc3VsdCBpcyBvZnRlbgovLy8gZm91bmQgdG8gYmUgZWFzaWVyIHRvIHJlYWQgaWYgZ3JlYXRlci10aGFuIGlzIGFsc28gZXNjYXBlZCB3aGVuZXZlcgovLy8gbGVzcy10aGFuIGlzLgpjbGFzcyBIdG1sRXNjYXBlIGV4dGVuZHMgQ29udmVydGVyPFN0cmluZywgU3RyaW5nPiB7CiAgLy8vIFRoZSBbSHRtbEVzY2FwZU1vZGVdIHVzZWQgYnkgdGhlIGNvbnZlcnRlci4KICBmaW5hbCBIdG1sRXNjYXBlTW9kZSBtb2RlOwoKICAvLy8gQ3JlYXRlIGNvbnZlcnRlciB0aGF0IGVzY2FwZXMgSFRNTCBjaGFyYWN0ZXJzLgogIC8vLwogIC8vLyBJZiBbbW9kZV0gaXMgcHJvdmlkZWQgYXMgZWl0aGVyIFtIdG1sRXNjYXBlTW9kZS5hdHRyaWJ1dGVdIG9yCiAgLy8vIFtIdG1sRXNjYXBlTW9kZS5lbGVtZW50XSwgb25seSB0aGUgY29ycmVzcG9uZGluZyBzdWJzZXQgb2YgSFRNTAogIC8vLyBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkLgogIC8vLyBUaGUgZGVmYXVsdCBpcyB0byBlc2NhcGUgYWxsIEhUTUwgY2hhcmFjdGVycy4KICBjb25zdCBIdG1sRXNjYXBlKFt0aGlzLm1vZGUgPSBIdG1sRXNjYXBlTW9kZS51bmtub3duXSk7CgogIFN0cmluZyBjb252ZXJ0KFN0cmluZyB0ZXh0KSB7CiAgICB2YXIgdmFsID0gX2NvbnZlcnQodGV4dCwgMCwgdGV4dC5sZW5ndGgpOwogICAgcmV0dXJuIHZhbCA9PSBudWxsID8gdGV4dCA6IHZhbDsKICB9CgogIC8vLyBDb252ZXJ0cyB0aGUgc3Vic3RyaW5nIG9mIHRleHQgZnJvbSBzdGFydCB0byBlbmQuCiAgLy8vCiAgLy8vIFJldHVybnMgYG51bGxgIGlmIG5vIGNoYW5nZXMgd2VyZSBuZWNlc3NhcnksIG90aGVyd2lzZSByZXR1cm5zCiAgLy8vIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLgogIFN0cmluZyBfY29udmVydChTdHJpbmcgdGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBTdHJpbmdCdWZmZXIgcmVzdWx0OwogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgdmFyIGNoID0gdGV4dFtpXTsKICAgICAgU3RyaW5nIHJlcGxhY2VtZW50OwogICAgICBzd2l0Y2ggKGNoKSB7CiAgICAgICAgY2FzZSAnJic6CiAgICAgICAgICByZXBsYWNlbWVudCA9ICcmYW1wOyc7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICciJzoKICAgICAgICAgIGlmIChtb2RlLmVzY2FwZVF1b3QpIHJlcGxhY2VtZW50ID0gJyZxdW90Oyc7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICInIjoKICAgICAgICAgIGlmIChtb2RlLmVzY2FwZUFwb3MpIHJlcGxhY2VtZW50ID0gJyYjMzk7JzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJzwnOgogICAgICAgICAgaWYgKG1vZGUuZXNjYXBlTHRHdCkgcmVwbGFjZW1lbnQgPSAnJmx0Oyc7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICc+JzoKICAgICAgICAgIGlmIChtb2RlLmVzY2FwZUx0R3QpIHJlcGxhY2VtZW50ID0gJyZndDsnOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnLyc6CiAgICAgICAgICBpZiAobW9kZS5lc2NhcGVTbGFzaCkgcmVwbGFjZW1lbnQgPSAnJiM0NzsnOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgaWYgKHJlcGxhY2VtZW50ICE9IG51bGwpIHsKICAgICAgICByZXN1bHQgPz89IFN0cmluZ0J1ZmZlcigpOwogICAgICAgIGlmIChpID4gc3RhcnQpIHJlc3VsdC53cml0ZSh0ZXh0LnN1YnN0cmluZyhzdGFydCwgaSkpOwogICAgICAgIHJlc3VsdC53cml0ZShyZXBsYWNlbWVudCk7CiAgICAgICAgc3RhcnQgPSBpICsgMTsKICAgICAgfQogICAgfQogICAgaWYgKHJlc3VsdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGlmIChlbmQgPiBzdGFydCkgcmVzdWx0LndyaXRlKHRleHQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpKTsKICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKICB9CgogIFN0cmluZ0NvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxTdHJpbmc+IHNpbmspIHsKICAgIHJldHVybiBfSHRtbEVzY2FwZVNpbmsodGhpcywKICAgICAgICBzaW5rIGlzIFN0cmluZ0NvbnZlcnNpb25TaW5rID8gc2luayA6IFN0cmluZ0NvbnZlcnNpb25TaW5rLmZyb20oc2luaykpOwogIH0KfQoKY2xhc3MgX0h0bWxFc2NhcGVTaW5rIGV4dGVuZHMgU3RyaW5nQ29udmVyc2lvblNpbmtCYXNlIHsKICBmaW5hbCBIdG1sRXNjYXBlIF9lc2NhcGU7CiAgZmluYWwgU3RyaW5nQ29udmVyc2lvblNpbmsgX3Npbms7CgogIF9IdG1sRXNjYXBlU2luayh0aGlzLl9lc2NhcGUsIHRoaXMuX3NpbmspOwoKICB2b2lkIGFkZFNsaWNlKFN0cmluZyBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgdmFyIHZhbCA9IF9lc2NhcGUuX2NvbnZlcnQoY2h1bmssIHN0YXJ0LCBlbmQpOwogICAgaWYgKHZhbCA9PSBudWxsKSB7CiAgICAgIF9zaW5rLmFkZFNsaWNlKGNodW5rLCBzdGFydCwgZW5kLCBpc0xhc3QpOwogICAgfSBlbHNlIHsKICAgICAgX3NpbmsuYWRkKHZhbCk7CiAgICAgIGlmIChpc0xhc3QpIF9zaW5rLmNsb3NlKCk7CiAgICB9CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX3NpbmsuY2xvc2UoKTsKICB9Cn0KgOMATk48AQ8BFgFEBE1GKgRNTkcjBExJIAROTEYsARcESjIfBCpBBEYoBFERFxYBJRkBJRkBKhkBNgZPgNcaATkGSx4GRUFGKDsBTQZCKAY/RiEqPwFNBkIoBj9GISw/AT4GRUFGBiYoPgFHKgElBhxIShgfHx8fIRYBHgIBRQRLNAQzBDFFP0RFMEY5BElIEjUyHQE1BkRGHjQ6ASAuJQQBOAZFHDUZKBgaFBIhERI3ERI2ERI1ERI1ERI3EQghIz8jFwgGJT8eBAFDIVAEAgE5HCQBLQFBMxcxDRYhBgQBERMEAgEdZGFydDpjb252ZXJ0L2h0bWxfZXNjYXBlLmRhcnQ+b3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvY29udmVydC9qc29uLmRhcnTAAIqILy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuY29udmVydDsKCi8vLyBFcnJvciB0aHJvd24gYnkgSlNPTiBzZXJpYWxpemF0aW9uIGlmIGFuIG9iamVjdCBjYW5ub3QgYmUgc2VyaWFsaXplZC4KLy8vCi8vLyBUaGUgW3Vuc3VwcG9ydGVkT2JqZWN0XSBmaWVsZCBob2xkcyB0aGF0IG9iamVjdCB0aGF0IGZhaWxlZCB0byBiZSBzZXJpYWxpemVkLgovLy8KLy8vIElmIGFuIG9iamVjdCBpc24ndCBkaXJlY3RseSBzZXJpYWxpemFibGUsIHRoZSBzZXJpYWxpemVyIGNhbGxzIHRoZSBgdG9Kc29uYAovLy8gbWV0aG9kIG9uIHRoZSBvYmplY3QuIElmIHRoYXQgY2FsbCBmYWlscywgdGhlIGVycm9yIHdpbGwgYmUgc3RvcmVkIGluIHRoZQovLy8gW2NhdXNlXSBmaWVsZC4gSWYgdGhlIGNhbGwgcmV0dXJucyBhbiBvYmplY3QgdGhhdCBpc24ndCBkaXJlY3RseQovLy8gc2VyaWFsaXphYmxlLCB0aGUgW2NhdXNlXSBpcyBudWxsLgpjbGFzcyBKc29uVW5zdXBwb3J0ZWRPYmplY3RFcnJvciBleHRlbmRzIEVycm9yIHsKICAvLy8gVGhlIG9iamVjdCB0aGF0IGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLgogIGZpbmFsIE9iamVjdCB1bnN1cHBvcnRlZE9iamVjdDsKCiAgLy8vIFRoZSBleGNlcHRpb24gdGhyb3duIHdoZW4gdHJ5aW5nIHRvIGNvbnZlcnQgdGhlIG9iamVjdC4KICBmaW5hbCBPYmplY3QgY2F1c2U7CgogIC8vLyBUaGUgcGFydGlhbCByZXN1bHQgb2YgdGhlIGNvbnZlcnNpb24sIHVwIHVudGlsIHRoZSBlcnJvciBoYXBwZW5lZC4KICAvLy8KICAvLy8gTWF5IGJlIG51bGwuCiAgZmluYWwgU3RyaW5nIHBhcnRpYWxSZXN1bHQ7CgogIEpzb25VbnN1cHBvcnRlZE9iamVjdEVycm9yKHRoaXMudW5zdXBwb3J0ZWRPYmplY3QsCiAgICAgIHt0aGlzLmNhdXNlLCB0aGlzLnBhcnRpYWxSZXN1bHR9KTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgdmFyIHNhZmVTdHJpbmcgPSBFcnJvci5zYWZlVG9TdHJpbmcodW5zdXBwb3J0ZWRPYmplY3QpOwogICAgU3RyaW5nIHByZWZpeDsKICAgIGlmIChjYXVzZSAhPSBudWxsKSB7CiAgICAgIHByZWZpeCA9ICJDb252ZXJ0aW5nIG9iamVjdCB0byBhbiBlbmNvZGFibGUgb2JqZWN0IGZhaWxlZDoiOwogICAgfSBlbHNlIHsKICAgICAgcHJlZml4ID0gIkNvbnZlcnRpbmcgb2JqZWN0IGRpZCBub3QgcmV0dXJuIGFuIGVuY29kYWJsZSBvYmplY3Q6IjsKICAgIH0KICAgIHJldHVybiAiJHByZWZpeCAkc2FmZVN0cmluZyI7CiAgfQp9CgovLy8gUmVwb3J0cyB0aGF0IGFuIG9iamVjdCBjb3VsZCBub3QgYmUgc3RyaW5naWZpZWQgZHVlIHRvIGN5Y2xpYyByZWZlcmVuY2VzLgovLy8KLy8vIEFuIG9iamVjdCB0aGF0IHJlZmVyZW5jZXMgaXRzZWxmIGNhbm5vdCBiZSBzZXJpYWxpemVkIGJ5Ci8vLyBbSnNvbkNvZGVjLmVuY29kZV0vW0pzb25FbmNvZGVyLmNvbnZlcnRdLgovLy8gV2hlbiB0aGUgY3ljbGUgaXMgZGV0ZWN0ZWQsIGEgW0pzb25DeWNsaWNFcnJvcl0gaXMgdGhyb3duLgpjbGFzcyBKc29uQ3ljbGljRXJyb3IgZXh0ZW5kcyBKc29uVW5zdXBwb3J0ZWRPYmplY3RFcnJvciB7CiAgLy8vIFRoZSBmaXJzdCBvYmplY3QgdGhhdCB3YXMgZGV0ZWN0ZWQgYXMgcGFydCBvZiBhIGN5Y2xlLgogIEpzb25DeWNsaWNFcnJvcihPYmplY3Qgb2JqZWN0KSA6IHN1cGVyKG9iamVjdCk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkN5Y2xpYyBlcnJvciBpbiBKU09OIHN0cmluZ2lmeSI7Cn0KCi8vLyBBbiBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgW0pzb25Db2RlY10uCi8vLwovLy8gVGhpcyBpbnN0YW5jZSBwcm92aWRlcyBhIGNvbnZlbmllbnQgYWNjZXNzIHRvIHRoZSBtb3N0IGNvbW1vbiBKU09OCi8vLyB1c2UgY2FzZXMuCi8vLwovLy8gRXhhbXBsZXM6Ci8vLwovLy8gICAgIHZhciBlbmNvZGVkID0ganNvbi5lbmNvZGUoWzEsIDIsIHsgImEiOiBudWxsIH1dKTsKLy8vICAgICB2YXIgZGVjb2RlZCA9IGpzb24uZGVjb2RlKCdbImZvbyIsIHsgImJhciI6IDQ5OSB9XScpOwovLy8KLy8vIFRoZSB0b3AtbGV2ZWwgW2pzb25FbmNvZGVdIGFuZCBbanNvbkRlY29kZV0gZnVuY3Rpb25zIG1heSBiZSB1c2VkIGluc3RlYWQgaWYKLy8vIGEgbG9jYWwgdmFyaWFibGUgc2hhZG93cyB0aGUgW2pzb25dIGNvbnN0YW50Lgpjb25zdCBKc29uQ29kZWMganNvbiA9IEpzb25Db2RlYygpOwoKLy8vIENvbnZlcnRzIFt2YWx1ZV0gdG8gYSBKU09OIHN0cmluZy4KLy8vCi8vLyBJZiB2YWx1ZSBjb250YWlucyBvYmplY3RzIHRoYXQgYXJlIG5vdCBkaXJlY3RseSBlbmNvZGFibGUgdG8gYSBKU09OCi8vLyBzdHJpbmcgKGEgdmFsdWUgdGhhdCBpcyBub3QgYSBudW1iZXIsIGJvb2xlYW4sIHN0cmluZywgbnVsbCwgbGlzdCBvciBhIG1hcAovLy8gd2l0aCBzdHJpbmcga2V5cyksIHRoZSBbdG9FbmNvZGFibGVdIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY29udmVydCBpdCB0byBhbgovLy8gb2JqZWN0IHRoYXQgbXVzdCBiZSBkaXJlY3RseSBlbmNvZGFibGUuCi8vLwovLy8gSWYgW3RvRW5jb2RhYmxlXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUKLy8vIHJlc3VsdCBvZiBjYWxsaW5nIGAudG9Kc29uKClgIG9uIHRoZSB1bmVuY29kYWJsZSBvYmplY3QuCi8vLwovLy8gU2hvcnRoYW5kIGZvciBganNvbi5lbmNvZGVgLiBVc2VmdWwgaWYgYSBsb2NhbCB2YXJpYWJsZSBzaGFkb3dzIHRoZSBnbG9iYWwKLy8vIFtqc29uXSBjb25zdGFudC4KU3RyaW5nIGpzb25FbmNvZGUoT2JqZWN0IHZhbHVlLCB7T2JqZWN0IHRvRW5jb2RhYmxlKE9iamVjdCBub25FbmNvZGFibGUpfSkgPT4KICAgIGpzb24uZW5jb2RlKHZhbHVlLCB0b0VuY29kYWJsZTogdG9FbmNvZGFibGUpOwoKLy8vIFBhcnNlcyB0aGUgc3RyaW5nIGFuZCByZXR1cm5zIHRoZSByZXN1bHRpbmcgSnNvbiBvYmplY3QuCi8vLwovLy8gVGhlIG9wdGlvbmFsIFtyZXZpdmVyXSBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBvYmplY3Qgb3IgbGlzdAovLy8gcHJvcGVydHkgdGhhdCBoYXMgYmVlbiBwYXJzZWQgZHVyaW5nIGRlY29kaW5nLiBUaGUgYGtleWAgYXJndW1lbnQgaXMgZWl0aGVyCi8vLyB0aGUgaW50ZWdlciBsaXN0IGluZGV4IGZvciBhIGxpc3QgcHJvcGVydHksIHRoZSBzdHJpbmcgbWFwIGtleSBmb3Igb2JqZWN0Ci8vLyBwcm9wZXJ0aWVzLCBvciBgbnVsbGAgZm9yIHRoZSBmaW5hbCByZXN1bHQuCi8vLwovLy8gVGhlIGRlZmF1bHQgW3Jldml2ZXJdICh3aGVuIG5vdCBwcm92aWRlZCkgaXMgdGhlIGlkZW50aXR5IGZ1bmN0aW9uLgovLy8KLy8vIFNob3J0aGFuZCBmb3IgYGpzb24uZGVjb2RlYC4gVXNlZnVsIGlmIGEgbG9jYWwgdmFyaWFibGUgc2hhZG93cyB0aGUgZ2xvYmFsCi8vLyBbanNvbl0gY29uc3RhbnQuCmR5bmFtaWMganNvbkRlY29kZShTdHJpbmcgc291cmNlLCB7T2JqZWN0IHJldml2ZXIoT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKX0pID0+CiAgICBqc29uLmRlY29kZShzb3VyY2UsIHJldml2ZXI6IHJldml2ZXIpOwoKLy8vIEEgW0pzb25Db2RlY10gZW5jb2RlcyBKU09OIG9iamVjdHMgdG8gc3RyaW5ncyBhbmQgZGVjb2RlcyBzdHJpbmdzIHRvCi8vLyBKU09OIG9iamVjdHMuCi8vLwovLy8gRXhhbXBsZXM6Ci8vLwovLy8gICAgIHZhciBlbmNvZGVkID0ganNvbi5lbmNvZGUoWzEsIDIsIHsgImEiOiBudWxsIH1dKTsKLy8vICAgICB2YXIgZGVjb2RlZCA9IGpzb24uZGVjb2RlKCdbImZvbyIsIHsgImJhciI6IDQ5OSB9XScpOwpjbGFzcyBKc29uQ29kZWMgZXh0ZW5kcyBDb2RlYzxPYmplY3QsIFN0cmluZz4gewogIGZpbmFsIEZ1bmN0aW9uKE9iamVjdCBrZXksIE9iamVjdCB2YWx1ZSkgX3Jldml2ZXI7CiAgZmluYWwgRnVuY3Rpb24oZHluYW1pYykgX3RvRW5jb2RhYmxlOwoKICAvLy8gQ3JlYXRlcyBhIGBKc29uQ29kZWNgIHdpdGggdGhlIGdpdmVuIHJldml2ZXIgYW5kIGVuY29kaW5nIGZ1bmN0aW9uLgogIC8vLwogIC8vLyBUaGUgW3Jldml2ZXJdIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgZGVjb2RpbmcuIEl0IGlzIGludm9rZWQgb25jZSBmb3IKICAvLy8gZWFjaCBvYmplY3Qgb3IgbGlzdCBwcm9wZXJ0eSB0aGF0IGhhcyBiZWVuIHBhcnNlZC4KICAvLy8gVGhlIGBrZXlgIGFyZ3VtZW50IGlzIGVpdGhlciB0aGUgaW50ZWdlciBsaXN0IGluZGV4IGZvciBhIGxpc3QgcHJvcGVydHksCiAgLy8vIHRoZSBzdHJpbmcgbWFwIGtleSBmb3Igb2JqZWN0IHByb3BlcnRpZXMsIG9yIGBudWxsYCBmb3IgdGhlIGZpbmFsIHJlc3VsdC4KICAvLy8KICAvLy8gSWYgW3Jldml2ZXJdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgdmFsdWUgYXJndW1lbnQuCiAgLy8vCiAgLy8vIFRoZSBbdG9FbmNvZGFibGVdIGZ1bmN0aW9uIGlzIHVzZWQgZHVyaW5nIGVuY29kaW5nLiBJdCBpcyBpbnZva2VkIGZvcgogIC8vLyB2YWx1ZXMgdGhhdCBhcmUgbm90IGRpcmVjdGx5IGVuY29kYWJsZSB0byBhIHN0cmluZyAoYSB2YWx1ZSB0aGF0IGlzIG5vdCBhCiAgLy8vIG51bWJlciwgYm9vbGVhbiwgc3RyaW5nLCBudWxsLCBsaXN0IG9yIGEgbWFwIHdpdGggc3RyaW5nIGtleXMpLiBUaGUKICAvLy8gZnVuY3Rpb24gbXVzdCByZXR1cm4gYW4gb2JqZWN0IHRoYXQgaXMgZGlyZWN0bHkgZW5jb2RhYmxlLiBUaGUgZWxlbWVudHMgb2YKICAvLy8gYSByZXR1cm5lZCBsaXN0IGFuZCB2YWx1ZXMgb2YgYSByZXR1cm5lZCBtYXAgZG8gbm90IG5lZWQgdG8gYmUgZGlyZWN0bHkKICAvLy8gZW5jb2RhYmxlLCBhbmQgaWYgdGhleSBhcmVuJ3QsIGB0b0VuY29kYWJsZWAgd2lsbCBiZSB1c2VkIG9uIHRoZW0gYXMgd2VsbC4KICAvLy8gUGxlYXNlIG5vdGljZSB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGNhdXNlIGFuIGluZmluaXRlIHJlY3Vyc2l2ZSByZWdyZXNzCiAgLy8vIGluIHRoaXMgd2F5LCBieSBlZmZlY3RpdmVseSBjcmVhdGluZyBhbiBpbmZpbml0ZSBkYXRhIHN0cnVjdHVyZSB0aHJvdWdoCiAgLy8vIHJlcGVhdGVkIGNhbGwgdG8gYHRvRW5jb2RhYmxlYC4KICAvLy8KICAvLy8gSWYgW3RvRW5jb2RhYmxlXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUKICAvLy8gcmVzdWx0IG9mIGNhbGxpbmcgYC50b0pzb24oKWAgb24gdGhlIHVuZW5jb2RhYmxlIG9iamVjdC4KICBjb25zdCBKc29uQ29kZWMoe3Jldml2ZXIoT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKSwgdG9FbmNvZGFibGUodmFyIG9iamVjdCl9KQogICAgICA6IF9yZXZpdmVyID0gcmV2aXZlciwKICAgICAgICBfdG9FbmNvZGFibGUgPSB0b0VuY29kYWJsZTsKCiAgLy8vIENyZWF0ZXMgYSBgSnNvbkNvZGVjYCB3aXRoIHRoZSBnaXZlbiByZXZpdmVyLgogIC8vLwogIC8vLyBUaGUgW3Jldml2ZXJdIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNoIG9iamVjdCBvciBsaXN0IHByb3BlcnR5CiAgLy8vIHRoYXQgaGFzIGJlZW4gcGFyc2VkIGR1cmluZyBkZWNvZGluZy4gVGhlIGBrZXlgIGFyZ3VtZW50IGlzIGVpdGhlciB0aGUKICAvLy8gaW50ZWdlciBsaXN0IGluZGV4IGZvciBhIGxpc3QgcHJvcGVydHksIHRoZSBzdHJpbmcgbWFwIGtleSBmb3Igb2JqZWN0CiAgLy8vIHByb3BlcnRpZXMsIG9yIGBudWxsYCBmb3IgdGhlIGZpbmFsIHJlc3VsdC4KICBKc29uQ29kZWMud2l0aFJldml2ZXIocmV2aXZlcihPYmplY3Qga2V5LCBPYmplY3QgdmFsdWUpKQogICAgICA6IHRoaXMocmV2aXZlcjogcmV2aXZlcik7CgogIC8vLyBQYXJzZXMgdGhlIHN0cmluZyBhbmQgcmV0dXJucyB0aGUgcmVzdWx0aW5nIEpzb24gb2JqZWN0LgogIC8vLwogIC8vLyBUaGUgb3B0aW9uYWwgW3Jldml2ZXJdIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNoIG9iamVjdCBvciBsaXN0CiAgLy8vIHByb3BlcnR5IHRoYXQgaGFzIGJlZW4gcGFyc2VkIGR1cmluZyBkZWNvZGluZy4gVGhlIGBrZXlgIGFyZ3VtZW50IGlzIGVpdGhlcgogIC8vLyB0aGUgaW50ZWdlciBsaXN0IGluZGV4IGZvciBhIGxpc3QgcHJvcGVydHksIHRoZSBzdHJpbmcgbWFwIGtleSBmb3Igb2JqZWN0CiAgLy8vIHByb3BlcnRpZXMsIG9yIGBudWxsYCBmb3IgdGhlIGZpbmFsIHJlc3VsdC4KICAvLy8KICAvLy8gVGhlIGRlZmF1bHQgW3Jldml2ZXJdICh3aGVuIG5vdCBwcm92aWRlZCkgaXMgdGhlIGlkZW50aXR5IGZ1bmN0aW9uLgogIGR5bmFtaWMgZGVjb2RlKFN0cmluZyBzb3VyY2UsIHtyZXZpdmVyKE9iamVjdCBrZXksIE9iamVjdCB2YWx1ZSl9KSB7CiAgICByZXZpdmVyID8/PSBfcmV2aXZlcjsKICAgIGlmIChyZXZpdmVyID09IG51bGwpIHJldHVybiBkZWNvZGVyLmNvbnZlcnQoc291cmNlKTsKICAgIHJldHVybiBKc29uRGVjb2RlcihyZXZpdmVyKS5jb252ZXJ0KHNvdXJjZSk7CiAgfQoKICAvLy8gQ29udmVydHMgW3ZhbHVlXSB0byBhIEpTT04gc3RyaW5nLgogIC8vLwogIC8vLyBJZiB2YWx1ZSBjb250YWlucyBvYmplY3RzIHRoYXQgYXJlIG5vdCBkaXJlY3RseSBlbmNvZGFibGUgdG8gYSBKU09OCiAgLy8vIHN0cmluZyAoYSB2YWx1ZSB0aGF0IGlzIG5vdCBhIG51bWJlciwgYm9vbGVhbiwgc3RyaW5nLCBudWxsLCBsaXN0IG9yIGEgbWFwCiAgLy8vIHdpdGggc3RyaW5nIGtleXMpLCB0aGUgW3RvRW5jb2RhYmxlXSBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbnZlcnQgaXQgdG8gYW4KICAvLy8gb2JqZWN0IHRoYXQgbXVzdCBiZSBkaXJlY3RseSBlbmNvZGFibGUuCiAgLy8vCiAgLy8vIElmIFt0b0VuY29kYWJsZV0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlCiAgLy8vIHJlc3VsdCBvZiBjYWxsaW5nIGAudG9Kc29uKClgIG9uIHRoZSB1bmVuY29kYWJsZSBvYmplY3QuCiAgU3RyaW5nIGVuY29kZShPYmplY3QgdmFsdWUsIHt0b0VuY29kYWJsZShvYmplY3QpfSkgewogICAgdG9FbmNvZGFibGUgPz89IF90b0VuY29kYWJsZTsKICAgIGlmICh0b0VuY29kYWJsZSA9PSBudWxsKSByZXR1cm4gZW5jb2Rlci5jb252ZXJ0KHZhbHVlKTsKICAgIHJldHVybiBKc29uRW5jb2Rlcih0b0VuY29kYWJsZSkuY29udmVydCh2YWx1ZSk7CiAgfQoKICBKc29uRW5jb2RlciBnZXQgZW5jb2RlciB7CiAgICBpZiAoX3RvRW5jb2RhYmxlID09IG51bGwpIHJldHVybiBjb25zdCBKc29uRW5jb2RlcigpOwogICAgcmV0dXJuIEpzb25FbmNvZGVyKF90b0VuY29kYWJsZSk7CiAgfQoKICBKc29uRGVjb2RlciBnZXQgZGVjb2RlciB7CiAgICBpZiAoX3Jldml2ZXIgPT0gbnVsbCkgcmV0dXJuIGNvbnN0IEpzb25EZWNvZGVyKCk7CiAgICByZXR1cm4gSnNvbkRlY29kZXIoX3Jldml2ZXIpOwogIH0KfQoKLy8vIFRoaXMgY2xhc3MgY29udmVydHMgSlNPTiBvYmplY3RzIHRvIHN0cmluZ3MuCmNsYXNzIEpzb25FbmNvZGVyIGV4dGVuZHMgQ29udmVydGVyPE9iamVjdCwgU3RyaW5nPiB7CiAgLy8vIFRoZSBzdHJpbmcgdXNlZCBmb3IgaW5kZW50aW9uLgogIC8vLwogIC8vLyBXaGVuIGdlbmVyYXRpbmcgbXVsdGktbGluZSBvdXRwdXQsIHRoaXMgc3RyaW5nIGlzIGluc2VydGVkIG9uY2UgYXQgdGhlCiAgLy8vIGJlZ2lubmluZyBvZiBlYWNoIGluZGVudGVkIGxpbmUgZm9yIGVhY2ggbGV2ZWwgb2YgaW5kZW50YXRpb24uCiAgLy8vCiAgLy8vIElmIGBudWxsYCwgdGhlIG91dHB1dCBpcyBlbmNvZGVkIGFzIGEgc2luZ2xlIGxpbmUuCiAgZmluYWwgU3RyaW5nIGluZGVudDsKCiAgLy8vIEZ1bmN0aW9uIGNhbGxlZCBvbiBub24tZW5jb2RhYmxlIG9iamVjdHMgdG8gcmV0dXJuIGEgcmVwbGFjZW1lbnQKICAvLy8gZW5jb2RhYmxlIG9iamVjdCB0aGF0IHdpbGwgYmUgZW5jb2RlZCBpbiB0aGUgb3JpZ25hbCdzIHBsYWNlLgogIGZpbmFsIEZ1bmN0aW9uKGR5bmFtaWMpIF90b0VuY29kYWJsZTsKCiAgLy8vIENyZWF0ZXMgYSBKU09OIGVuY29kZXIuCiAgLy8vCiAgLy8vIFRoZSBKU09OIGVuY29kZXIgaGFuZGxlcyBudW1iZXJzLCBzdHJpbmdzLCBib29sZWFucywgbnVsbCwgbGlzdHMgYW5kCiAgLy8vIG1hcHMgd2l0aCBzdHJpbmcga2V5cyBkaXJlY3RseS4KICAvLy8KICAvLy8gQW55IG90aGVyIG9iamVjdCBpcyBhdHRlbXB0ZWQgY29udmVydGVkIGJ5IFt0b0VuY29kYWJsZV0gdG8gYW4KICAvLy8gb2JqZWN0IHRoYXQgaXMgb2Ygb25lIG9mIHRoZSBjb252ZXJ0aWJsZSB0eXBlcy4KICAvLy8KICAvLy8gSWYgW3RvRW5jb2RhYmxlXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBjYWxsaW5nIGAudG9Kc29uKClgIG9uCiAgLy8vIHRoZSBvYmplY3QuCiAgY29uc3QgSnNvbkVuY29kZXIoW3RvRW5jb2RhYmxlKG9iamVjdCldKQogICAgICA6IGluZGVudCA9IG51bGwsCiAgICAgICAgX3RvRW5jb2RhYmxlID0gdG9FbmNvZGFibGU7CgogIC8vLyBDcmVhdGVzIGEgSlNPTiBlbmNvZGVyIHRoYXQgY3JlYXRlcyBtdWx0aS1saW5lIEpTT04uCiAgLy8vCiAgLy8vIFRoZSBlbmNvZGluZyBvZiBlbGVtZW50cyBvZiBsaXN0cyBhbmQgbWFwcyBhcmUgaW5kZW50ZWQgYW5kIHB1dCBvbiBzZXBhcmF0ZQogIC8vLyBsaW5lcy4gVGhlIFtpbmRlbnRdIHN0cmluZyBpcyBwcmVwZW5kZWQgdG8gdGhlc2UgZWxlbWVudHMsIG9uY2UgZm9yIGVhY2gKICAvLy8gbGV2ZWwgb2YgaW5kZW50YXRpb24uCiAgLy8vCiAgLy8vIElmIFtpbmRlbnRdIGlzIGBudWxsYCwgdGhlIG91dHB1dCBpcyBlbmNvZGVkIGFzIGEgc2luZ2xlIGxpbmUuCiAgLy8vCiAgLy8vIFRoZSBKU09OIGVuY29kZXIgaGFuZGxlcyBudW1iZXJzLCBzdHJpbmdzLCBib29sZWFucywgbnVsbCwgbGlzdHMgYW5kCiAgLy8vIG1hcHMgd2l0aCBzdHJpbmcga2V5cyBkaXJlY3RseS4KICAvLy8KICAvLy8gQW55IG90aGVyIG9iamVjdCBpcyBhdHRlbXB0ZWQgY29udmVydGVkIGJ5IFt0b0VuY29kYWJsZV0gdG8gYW4KICAvLy8gb2JqZWN0IHRoYXQgaXMgb2Ygb25lIG9mIHRoZSBjb252ZXJ0aWJsZSB0eXBlcy4KICAvLy8KICAvLy8gSWYgW3RvRW5jb2RhYmxlXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBjYWxsaW5nIGAudG9Kc29uKClgIG9uCiAgLy8vIHRoZSBvYmplY3QuCiAgY29uc3QgSnNvbkVuY29kZXIud2l0aEluZGVudCh0aGlzLmluZGVudCwgW3RvRW5jb2RhYmxlKG9iamVjdCldKQogICAgICA6IF90b0VuY29kYWJsZSA9IHRvRW5jb2RhYmxlOwoKICAvLy8gQ29udmVydHMgW29iamVjdF0gdG8gYSBKU09OIFtTdHJpbmddLgogIC8vLwogIC8vLyBEaXJlY3RseSBzZXJpYWxpemFibGUgdmFsdWVzIGFyZSBbbnVtXSwgW1N0cmluZ10sIFtib29sXSwgYW5kIFtOdWxsXSwgYXMKICAvLy8gd2VsbCBhcyBzb21lIFtMaXN0XSBhbmQgW01hcF0gdmFsdWVzLiBGb3IgW0xpc3RdLCB0aGUgZWxlbWVudHMgbXVzdCBhbGwgYmUKICAvLy8gc2VyaWFsaXphYmxlLiBGb3IgW01hcF0sIHRoZSBrZXlzIG11c3QgYmUgW1N0cmluZ10gYW5kIHRoZSB2YWx1ZXMgbXVzdCBiZQogIC8vLyBzZXJpYWxpemFibGUuCiAgLy8vCiAgLy8vIElmIGEgdmFsdWUgb2YgYW55IG90aGVyIHR5cGUgaXMgYXR0ZW1wdGVkIHRvIGJlIHNlcmlhbGl6ZWQsIHRoZQogIC8vLyBgdG9FbmNvZGFibGVgIGZ1bmN0aW9uIHByb3ZpZGVkIGluIHRoZSBjb25zdHJ1Y3RvciBpcyBjYWxsZWQgd2l0aCB0aGUgdmFsdWUKICAvLy8gYXMgYXJndW1lbnQuIFRoZSByZXN1bHQsIHdoaWNoIG11c3QgYmUgYSBkaXJlY3RseSBzZXJpYWxpemFibGUgdmFsdWUsIGlzCiAgLy8vIHNlcmlhbGl6ZWQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgdmFsdWUuCiAgLy8vCiAgLy8vIElmIHRoZSBjb252ZXJzaW9uIHRocm93cywgb3IgcmV0dXJucyBhIHZhbHVlIHRoYXQgaXMgbm90IGRpcmVjdGx5CiAgLy8vIHNlcmlhbGl6YWJsZSwgYSBbSnNvblVuc3VwcG9ydGVkT2JqZWN0RXJyb3JdIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgLy8vIElmIHRoZSBjYWxsIHRocm93cywgdGhlIGVycm9yIGlzIGNhdWdodCBhbmQgc3RvcmVkIGluIHRoZQogIC8vLyBbSnNvblVuc3VwcG9ydGVkT2JqZWN0RXJyb3JdJ3MgWzpjYXVzZTpdIGZpZWxkLgogIC8vLwogIC8vLyBJZiBhIFtMaXN0XSBvciBbTWFwXSBjb250YWlucyBhIHJlZmVyZW5jZSB0byBpdHNlbGYsIGRpcmVjdGx5IG9yIHRocm91Z2gKICAvLy8gb3RoZXIgbGlzdHMgb3IgbWFwcywgaXQgY2Fubm90IGJlIHNlcmlhbGl6ZWQgYW5kIGEgW0pzb25DeWNsaWNFcnJvcl0gaXMKICAvLy8gdGhyb3duLgogIC8vLwogIC8vLyBbb2JqZWN0XSBzaG91bGQgbm90IGNoYW5nZSBkdXJpbmcgc2VyaWFsaXphdGlvbi4KICAvLy8KICAvLy8gSWYgYW4gb2JqZWN0IGlzIHNlcmlhbGl6ZWQgbW9yZSB0aGFuIG9uY2UsIFtjb252ZXJ0XSBtYXkgY2FjaGUgdGhlIHRleHQKICAvLy8gZm9yIGl0LiBJbiBvdGhlciB3b3JkcywgaWYgdGhlIGNvbnRlbnQgb2YgYW4gb2JqZWN0IGNoYW5nZXMgYWZ0ZXIgaXQgaXMKICAvLy8gZmlyc3Qgc2VyaWFsaXplZCwgdGhlIG5ldyB2YWx1ZXMgbWF5IG5vdCBiZSByZWZsZWN0ZWQgaW4gdGhlIHJlc3VsdC4KICBTdHJpbmcgY29udmVydChPYmplY3Qgb2JqZWN0KSA9PgogICAgICBfSnNvblN0cmluZ1N0cmluZ2lmaWVyLnN0cmluZ2lmeShvYmplY3QsIF90b0VuY29kYWJsZSwgaW5kZW50KTsKCiAgLy8vIFN0YXJ0cyBhIGNodW5rZWQgY29udmVyc2lvbi4KICAvLy8KICAvLy8gVGhlIGNvbnZlcnRlciB3b3JrcyBtb3JlIGVmZmljaWVudGx5IGlmIHRoZSBnaXZlbiBbc2lua10gaXMgYQogIC8vLyBbU3RyaW5nQ29udmVyc2lvblNpbmtdLgogIC8vLwogIC8vLyBSZXR1cm5zIGEgY2h1bmtlZC1jb252ZXJzaW9uIHNpbmsgdGhhdCBhY2NlcHRzIGF0IG1vc3Qgb25lIG9iamVjdC4gSXQgaXMKICAvLy8gYW4gZXJyb3IgdG8gaW52b2tlIGBhZGRgIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSByZXR1cm5lZCBzaW5rLgogIENodW5rZWRDb252ZXJzaW9uU2luazxPYmplY3Q+IHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxTdHJpbmc+IHNpbmspIHsKICAgIGlmIChzaW5rIGlzIF9VdGY4RW5jb2RlclNpbmspIHsKICAgICAgcmV0dXJuIF9Kc29uVXRmOEVuY29kZXJTaW5rKAogICAgICAgICAgc2luay5fc2luaywKICAgICAgICAgIF90b0VuY29kYWJsZSwKICAgICAgICAgIEpzb25VdGY4RW5jb2Rlci5fdXRmOEVuY29kZShpbmRlbnQpLAogICAgICAgICAgSnNvblV0ZjhFbmNvZGVyLl9kZWZhdWx0QnVmZmVyU2l6ZSk7CiAgICB9CiAgICByZXR1cm4gX0pzb25FbmNvZGVyU2luaygKICAgICAgICBzaW5rIGlzIFN0cmluZ0NvbnZlcnNpb25TaW5rID8gc2luayA6IFN0cmluZ0NvbnZlcnNpb25TaW5rLmZyb20oc2luayksCiAgICAgICAgX3RvRW5jb2RhYmxlLAogICAgICAgIGluZGVudCk7CiAgfQoKICAvLyBPdmVycmlkZSB0aGUgYmFzZSBjbGFzcydzIGJpbmQsIHRvIHByb3ZpZGUgYSBiZXR0ZXIgdHlwZS4KICBTdHJlYW08U3RyaW5nPiBiaW5kKFN0cmVhbTxPYmplY3Q+IHN0cmVhbSkgPT4gc3VwZXIuYmluZChzdHJlYW0pOwoKICBDb252ZXJ0ZXI8T2JqZWN0LCBUPiBmdXNlPFQ+KENvbnZlcnRlcjxTdHJpbmcsIFQ+IG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMgVXRmOEVuY29kZXIpIHsKICAgICAgLy8gVGhlIGluc3RhbmNlIGNoZWNrIGd1YXJhbnRlZXMgdGhhdCBgVGAgaXMgKGEgc3VidHlwZSBvZikgTGlzdDxpbnQ+LAogICAgICAvLyBidXQgdGhlIHN0YXRpYyB0eXBlIHN5c3RlbSBkb2Vzbid0IGtub3cgdGhhdCwgYW5kIHNvIHdlIGNhc3QuCiAgICAgIC8vIENhc3QgdGhyb3VnaCBkeW5hbWljIHRvIGtlZXAgdGhlIGNhc3QgaW1wbGljaXQgZm9yIGJ1aWxkcyB1c2luZwogICAgICAvLyB1bmNoZWNrZWQgaW1wbGljaXQgY2FzdHMuCiAgICAgIHJldHVybiBKc29uVXRmOEVuY29kZXIoaW5kZW50LCBfdG9FbmNvZGFibGUpIGFzIGR5bmFtaWM7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuZnVzZTxUPihvdGhlcik7CiAgfQp9CgovLy8gRW5jb2RlciB0aGF0IGVuY29kZXMgYSBzaW5nbGUgb2JqZWN0IGFzIGEgVVRGLTggZW5jb2RlZCBKU09OIHN0cmluZy4KLy8vCi8vLyBUaGlzIGVuY29kZXIgd29ya3MgZXF1aXZhbGVudGx5IHRvIGZpcnN0IGNvbnZlcnRpbmcgdGhlIG9iamVjdCB0bwovLy8gYSBKU09OIHN0cmluZywgYW5kIHRoZW4gVVRGLTggZW5jb2RpbmcgdGhlIHN0cmluZywgYnV0IHdpdGhvdXQKLy8vIGNyZWF0aW5nIGFuIGludGVybWVkaWF0ZSBzdHJpbmcuCmNsYXNzIEpzb25VdGY4RW5jb2RlciBleHRlbmRzIENvbnZlcnRlcjxPYmplY3QsIExpc3Q8aW50Pj4gewogIC8vLyBEZWZhdWx0IGJ1ZmZlciBzaXplIHVzZWQgYnkgdGhlIEpTT04tdG8tVVRGLTggZW5jb2Rlci4KICBzdGF0aWMgY29uc3QgaW50IF9kZWZhdWx0QnVmZmVyU2l6ZSA9IDI1NjsKICBAZGVwcmVjYXRlZAogIHN0YXRpYyBjb25zdCBpbnQgREVGQVVMVF9CVUZGRVJfU0laRSA9IF9kZWZhdWx0QnVmZmVyU2l6ZTsKCiAgLy8vIEluZGVudGF0aW9uIHVzZWQgaW4gcHJldHR5LXByaW50IG1vZGUsIGBudWxsYCBpZiBub3QgcHJldHR5LgogIGZpbmFsIExpc3Q8aW50PiBfaW5kZW50OwoKICAvLy8gRnVuY3Rpb24gY2FsbGVkIHdpdGggZWFjaCB1bi1lbmNvZGFibGUgb2JqZWN0IGVuY291bnRlcmVkLgogIGZpbmFsIEZ1bmN0aW9uKGR5bmFtaWMpIF90b0VuY29kYWJsZTsKCiAgLy8vIFVURi04IGJ1ZmZlciBzaXplLgogIGZpbmFsIGludCBfYnVmZmVyU2l6ZTsKCiAgLy8vIENyZWF0ZSBjb252ZXJ0ZXIuCiAgLy8vCiAgLy8vIElmIFtpbmRlbnRdIGlzIG5vbi1gbnVsbGAsIHRoZSBjb252ZXJ0ZXIgYXR0ZW1wdHMgdG8gInByZXR0eS1wcmludCIgdGhlCiAgLy8vIEpTT04sIGFuZCB1c2VzIGBpbmRlbnRgIGFzIHRoZSBpbmRlbnRhdGlvbi4gT3RoZXJ3aXNlIHRoZSByZXN1bHQgaGFzIG5vCiAgLy8vIHdoaXRlc3BhY2Ugb3V0c2lkZSBvZiBzdHJpbmcgbGl0ZXJhbHMuCiAgLy8vIElmIGBpbmRlbnRgIGNvbnRhaW5zIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHZhbGlkIEpTT04gd2hpdGVzcGFjZQogIC8vLyBjaGFyYWN0ZXJzLCB0aGUgcmVzdWx0IHdpbGwgbm90IGJlIHZhbGlkIEpTT04uIEpTT04gd2hpdGVzcGFjZSBjaGFyYWN0ZXJzCiAgLy8vIGFyZSBzcGFjZSAoVSswMDIwKSwgdGFiIChVKzAwMDkpLCBsaW5lIGZlZWQgKFUrMDAwYSkgYW5kIGNhcnJpYWdlIHJldHVybgogIC8vLyAoVSswMDBkKSAoW0VDTUEKICAvLy8gNDA0XShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvcHVibGljYXRpb25zL3N0YW5kYXJkcy9FY21hLTQwNC5odG0pKS4KICAvLy8KICAvLy8gVGhlIFtidWZmZXJTaXplXSBpcyB0aGUgc2l6ZSBvZiB0aGUgaW50ZXJuYWwgYnVmZmVycyB1c2VkIHRvIGNvbGxlY3QKICAvLy8gVVRGLTggY29kZSB1bml0cy4KICAvLy8gSWYgdXNpbmcgW3N0YXJ0Q2h1bmtlZENvbnZlcnNpb25dLCBpdCB3aWxsIGJlIHRoZSBzaXplIG9mIHRoZSBjaHVua3MuCiAgLy8vCiAgLy8vIFRoZSBKU09OIGVuY29kZXIgaGFuZGxlcyBudW1iZXJzLCBzdHJpbmdzLCBib29sZWFucywgbnVsbCwgbGlzdHMgYW5kIG1hcHMKICAvLy8gZGlyZWN0bHkuCiAgLy8vCiAgLy8vIEFueSBvdGhlciBvYmplY3QgaXMgYXR0ZW1wdGVkIGNvbnZlcnRlZCBieSBbdG9FbmNvZGFibGVdIHRvIGFuIG9iamVjdCB0aGF0CiAgLy8vIGlzIG9mIG9uZSBvZiB0aGUgY29udmVydGlibGUgdHlwZXMuCiAgLy8vCiAgLy8vIElmIFt0b0VuY29kYWJsZV0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gY2FsbGluZyBgLnRvSnNvbigpYCBvbiB0aGUKICAvLy8gb2JqZWN0LgogIEpzb25VdGY4RW5jb2RlcigKICAgICAgW1N0cmluZyBpbmRlbnQsIHRvRW5jb2RhYmxlKG9iamVjdCksIGludCBidWZmZXJTaXplID0gX2RlZmF1bHRCdWZmZXJTaXplXSkKICAgICAgOiBfaW5kZW50ID0gX3V0ZjhFbmNvZGUoaW5kZW50KSwKICAgICAgICBfdG9FbmNvZGFibGUgPSB0b0VuY29kYWJsZSwKICAgICAgICBfYnVmZmVyU2l6ZSA9IGJ1ZmZlclNpemU7CgogIHN0YXRpYyBMaXN0PGludD4gX3V0ZjhFbmNvZGUoU3RyaW5nIHN0cmluZykgewogICAgaWYgKHN0cmluZyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGlmIChzdHJpbmcuaXNFbXB0eSkgcmV0dXJuIFVpbnQ4TGlzdCgwKTsKICAgIGNoZWNrQXNjaWk6CiAgICB7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKHN0cmluZy5jb2RlVW5pdEF0KGkpID49IDB4ODApIGJyZWFrIGNoZWNrQXNjaWk7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0cmluZy5jb2RlVW5pdHM7CiAgICB9CiAgICByZXR1cm4gdXRmOC5lbmNvZGUoc3RyaW5nKTsKICB9CgogIC8vLyBDb252ZXJ0IFtvYmplY3RdIGludG8gVVRGLTggZW5jb2RlZCBKU09OLgogIExpc3Q8aW50PiBjb252ZXJ0KE9iamVjdCBvYmplY3QpIHsKICAgIHZhciBieXRlcyA9IDxMaXN0PGludD4+W107CiAgICAvLyBUaGUgYHN0cmluZ2lmeWAgZnVuY3Rpb24gYWx3YXlzIGNvbnZlcnRzIGludG8gY2h1bmtzLgogICAgLy8gQ29sbGVjdCB0aGUgY2h1bmtzIGludG8gdGhlIGBieXRlc2AgbGlzdCwgdGhlbiBjb21iaW5lIHRoZW0gYWZ0ZXJ3YXJkcy4KICAgIHZvaWQgYWRkQ2h1bmsoVWludDhMaXN0IGNodW5rLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgICAgaWYgKHN0YXJ0ID4gMCB8fCBlbmQgPCBjaHVuay5sZW5ndGgpIHsKICAgICAgICB2YXIgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICAgICAgY2h1bmsgPQogICAgICAgICAgICBVaW50OExpc3QudmlldyhjaHVuay5idWZmZXIsIGNodW5rLm9mZnNldEluQnl0ZXMgKyBzdGFydCwgbGVuZ3RoKTsKICAgICAgfQogICAgICBieXRlcy5hZGQoY2h1bmspOwogICAgfQoKICAgIF9Kc29uVXRmOFN0cmluZ2lmaWVyLnN0cmluZ2lmeSgKICAgICAgICBvYmplY3QsIF9pbmRlbnQsIF90b0VuY29kYWJsZSwgX2J1ZmZlclNpemUsIGFkZENodW5rKTsKICAgIGlmIChieXRlcy5sZW5ndGggPT0gMSkgcmV0dXJuIGJ5dGVzWzBdOwogICAgdmFyIGxlbmd0aCA9IDA7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGxlbmd0aCArPSBieXRlc1tpXS5sZW5ndGg7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gVWludDhMaXN0KGxlbmd0aCk7CiAgICBmb3IgKHZhciBpID0gMCwgb2Zmc2V0ID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBieXRlTGlzdCA9IGJ5dGVzW2ldOwogICAgICBpbnQgZW5kID0gb2Zmc2V0ICsgYnl0ZUxpc3QubGVuZ3RoOwogICAgICByZXN1bHQuc2V0UmFuZ2Uob2Zmc2V0LCBlbmQsIGJ5dGVMaXN0KTsKICAgICAgb2Zmc2V0ID0gZW5kOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBTdGFydCBhIGNodW5rZWQgY29udmVyc2lvbi4KICAvLy8KICAvLy8gT25seSBvbmUgb2JqZWN0IGNhbiBiZSBwYXNzZWQgaW50byB0aGUgcmV0dXJuZWQgc2luay4KICAvLy8KICAvLy8gVGhlIGFyZ3VtZW50IFtzaW5rXSB3aWxsIHJlY2VpdmUgYnl0ZSBsaXN0cyBpbiBzaXplcyBkZXBlbmRpbmcgb24gdGhlCiAgLy8vIGBidWZmZXJTaXplYCBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yIHdoZW4gY3JlYXRpbmcgdGhpcyBlbmNvZGVyLgogIENodW5rZWRDb252ZXJzaW9uU2luazxPYmplY3Q+IHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxMaXN0PGludD4+IHNpbmspIHsKICAgIEJ5dGVDb252ZXJzaW9uU2luayBieXRlU2luazsKICAgIGlmIChzaW5rIGlzIEJ5dGVDb252ZXJzaW9uU2luaykgewogICAgICBieXRlU2luayA9IHNpbms7CiAgICB9IGVsc2UgewogICAgICBieXRlU2luayA9IEJ5dGVDb252ZXJzaW9uU2luay5mcm9tKHNpbmspOwogICAgfQogICAgcmV0dXJuIF9Kc29uVXRmOEVuY29kZXJTaW5rKGJ5dGVTaW5rLCBfdG9FbmNvZGFibGUsIF9pbmRlbnQsIF9idWZmZXJTaXplKTsKICB9CgogIC8vIE92ZXJyaWRlIHRoZSBiYXNlIGNsYXNzJ3MgYmluZCwgdG8gcHJvdmlkZSBhIGJldHRlciB0eXBlLgogIFN0cmVhbTxMaXN0PGludD4+IGJpbmQoU3RyZWFtPE9iamVjdD4gc3RyZWFtKSB7CiAgICByZXR1cm4gc3VwZXIuYmluZChzdHJlYW0pOwogIH0KfQoKLy8vIEltcGxlbWVudHMgdGhlIGNodW5rZWQgY29udmVyc2lvbiBmcm9tIG9iamVjdCB0byBpdHMgSlNPTiByZXByZXNlbnRhdGlvbi4KLy8vCi8vLyBUaGUgc2luayBvbmx5IGFjY2VwdHMgb25lIHZhbHVlLCBidXQgd2lsbCBwcm9kdWNlIG91dHB1dCBpbiBhIGNodW5rZWQgd2F5LgpjbGFzcyBfSnNvbkVuY29kZXJTaW5rIGV4dGVuZHMgQ2h1bmtlZENvbnZlcnNpb25TaW5rPE9iamVjdD4gewogIGZpbmFsIFN0cmluZyBfaW5kZW50OwogIGZpbmFsIEZ1bmN0aW9uKGR5bmFtaWMpIF90b0VuY29kYWJsZTsKICBmaW5hbCBTdHJpbmdDb252ZXJzaW9uU2luayBfc2luazsKICBib29sIF9pc0RvbmUgPSBmYWxzZTsKCiAgX0pzb25FbmNvZGVyU2luayh0aGlzLl9zaW5rLCB0aGlzLl90b0VuY29kYWJsZSwgdGhpcy5faW5kZW50KTsKCiAgLy8vIEVuY29kZXMgdGhlIGdpdmVuIG9iamVjdCBbb10uCiAgLy8vCiAgLy8vIEl0IGlzIGFuIGVycm9yIHRvIGludm9rZSB0aGlzIG1ldGhvZCBtb3JlIHRoYW4gb25jZSBvbiBhbnkgaW5zdGFuY2UuIFdoaWxlCiAgLy8vIHRoaXMgbWFrZXMgdGhlIGlucHV0IGVmZmVjdGl2ZWx5IG5vbi1jaHVua2VkIHRoZSBvdXRwdXQgd2lsbCBiZSBnZW5lcmF0ZWQKICAvLy8gaW4gYSBjaHVua2VkIHdheS4KICB2b2lkIGFkZChPYmplY3QgbykgewogICAgaWYgKF9pc0RvbmUpIHsKICAgICAgdGhyb3cgU3RhdGVFcnJvcigiT25seSBvbmUgY2FsbCB0byBhZGQgYWxsb3dlZCIpOwogICAgfQogICAgX2lzRG9uZSA9IHRydWU7CiAgICB2YXIgc3RyaW5nU2luayA9IF9zaW5rLmFzU3RyaW5nU2luaygpOwogICAgX0pzb25TdHJpbmdTdHJpbmdpZmllci5wcmludE9uKG8sIHN0cmluZ1NpbmssIF90b0VuY29kYWJsZSwgX2luZGVudCk7CiAgICBzdHJpbmdTaW5rLmNsb3NlKCk7CiAgfQoKICB2b2lkIGNsb3NlKCkgey8qIGRvIG5vdGhpbmcgKi99Cn0KCi8vLyBTaW5rIHJldHVybmVkIHdoZW4gc3RhcnRpbmcgYSBjaHVua2VkIGNvbnZlcnNpb24gZnJvbSBvYmplY3QgdG8gYnl0ZXMuCmNsYXNzIF9Kc29uVXRmOEVuY29kZXJTaW5rIGV4dGVuZHMgQ2h1bmtlZENvbnZlcnNpb25TaW5rPE9iamVjdD4gewogIC8vLyBUaGUgYnl0ZSBzaW5rIHJlY2VpdmVpbmcgdGhlIGVuY29kZWQgY2h1bmtzLgogIGZpbmFsIEJ5dGVDb252ZXJzaW9uU2luayBfc2luazsKICBmaW5hbCBMaXN0PGludD4gX2luZGVudDsKICBmaW5hbCBGdW5jdGlvbihkeW5hbWljKSBfdG9FbmNvZGFibGU7CiAgZmluYWwgaW50IF9idWZmZXJTaXplOwogIGJvb2wgX2lzRG9uZSA9IGZhbHNlOwogIF9Kc29uVXRmOEVuY29kZXJTaW5rKAogICAgICB0aGlzLl9zaW5rLCB0aGlzLl90b0VuY29kYWJsZSwgdGhpcy5faW5kZW50LCB0aGlzLl9idWZmZXJTaXplKTsKCiAgLy8vIENhbGxiYWNrIGNhbGxlZCBmb3IgZWFjaCBzbGljZSBvZiByZXN1bHQgYnl0ZXMuCiAgdm9pZCBfYWRkQ2h1bmsoVWludDhMaXN0IGNodW5rLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIF9zaW5rLmFkZFNsaWNlKGNodW5rLCBzdGFydCwgZW5kLCBmYWxzZSk7CiAgfQoKICB2b2lkIGFkZChPYmplY3Qgb2JqZWN0KSB7CiAgICBpZiAoX2lzRG9uZSkgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKCJPbmx5IG9uZSBjYWxsIHRvIGFkZCBhbGxvd2VkIik7CiAgICB9CiAgICBfaXNEb25lID0gdHJ1ZTsKICAgIF9Kc29uVXRmOFN0cmluZ2lmaWVyLnN0cmluZ2lmeSgKICAgICAgICBvYmplY3QsIF9pbmRlbnQsIF90b0VuY29kYWJsZSwgX2J1ZmZlclNpemUsIF9hZGRDaHVuayk7CiAgICBfc2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIGlmICghX2lzRG9uZSkgewogICAgICBfaXNEb25lID0gdHJ1ZTsKICAgICAgX3NpbmsuY2xvc2UoKTsKICAgIH0KICB9Cn0KCi8vLyBUaGlzIGNsYXNzIHBhcnNlcyBKU09OIHN0cmluZ3MgYW5kIGJ1aWxkcyB0aGUgY29ycmVzcG9uZGluZyBvYmplY3RzLgpjbGFzcyBKc29uRGVjb2RlciBleHRlbmRzIENvbnZlcnRlcjxTdHJpbmcsIE9iamVjdD4gewogIGZpbmFsIEZ1bmN0aW9uKE9iamVjdCBrZXksIE9iamVjdCB2YWx1ZSkgX3Jldml2ZXI7CgogIC8vLyBDb25zdHJ1Y3RzIGEgbmV3IEpzb25EZWNvZGVyLgogIC8vLwogIC8vLyBUaGUgW3Jldml2ZXJdIG1heSBiZSBgbnVsbGAuCiAgY29uc3QgSnNvbkRlY29kZXIoW3Jldml2ZXIoT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKV0pIDogX3Jldml2ZXIgPSByZXZpdmVyOwoKICAvLy8gQ29udmVydHMgdGhlIGdpdmVuIEpTT04tc3RyaW5nIFtpbnB1dF0gdG8gaXRzIGNvcnJlc3BvbmRpbmcgb2JqZWN0LgogIC8vLwogIC8vLyBQYXJzZWQgSlNPTiB2YWx1ZXMgYXJlIG9mIHRoZSB0eXBlcyBbbnVtXSwgW1N0cmluZ10sIFtib29sXSwgW051bGxdLAogIC8vLyBbTGlzdF1zIG9mIHBhcnNlZCBKU09OIHZhbHVlcyBvciBbTWFwXXMgZnJvbSBbU3RyaW5nXSB0byBwYXJzZWQgSlNPTgogIC8vLyB2YWx1ZXMuCiAgLy8vCiAgLy8vIElmIGB0aGlzYCB3YXMgaW5pdGlhbGl6ZWQgd2l0aCBhIHJldml2ZXIsIHRoZW4gdGhlIHBhcnNpbmcgb3BlcmF0aW9uCiAgLy8vIGludm9rZXMgdGhlIHJldml2ZXIgb24gZXZlcnkgb2JqZWN0IG9yIGxpc3QgcHJvcGVydHkgdGhhdCBoYXMgYmVlbiBwYXJzZWQuCiAgLy8vIFRoZSBhcmd1bWVudHMgYXJlIHRoZSBwcm9wZXJ0eSBuYW1lIChbU3RyaW5nXSkgb3IgbGlzdCBpbmRleCAoW2ludF0pLCBhbmQKICAvLy8gdGhlIHZhbHVlIGlzIHRoZSBwYXJzZWQgdmFsdWUuIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHJldml2ZXIgaXMgdXNlZCBhcwogIC8vLyB0aGUgdmFsdWUgb2YgdGhhdCBwcm9wZXJ0eSBpbnN0ZWFkIHRoZSBwYXJzZWQgdmFsdWUuCiAgLy8vCiAgLy8vIFRocm93cyBbRm9ybWF0RXhjZXB0aW9uXSBpZiB0aGUgaW5wdXQgaXMgbm90IHZhbGlkIEpTT04gdGV4dC4KICBkeW5hbWljIGNvbnZlcnQoU3RyaW5nIGlucHV0KSA9PiBfcGFyc2VKc29uKGlucHV0LCBfcmV2aXZlcik7CgogIC8vLyBTdGFydHMgYSBjb252ZXJzaW9uIGZyb20gYSBjaHVua2VkIEpTT04gc3RyaW5nIHRvIGl0cyBjb3JyZXNwb25kaW5nIG9iamVjdC4KICAvLy8KICAvLy8gVGhlIG91dHB1dCBbc2lua10gcmVjZWl2ZXMgZXhhY3RseSBvbmUgZGVjb2RlZCBlbGVtZW50IHRocm91Z2ggYGFkZGAuCiAgZXh0ZXJuYWwgU3RyaW5nQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPE9iamVjdD4gc2luayk7CgogIC8vIE92ZXJyaWRlIHRoZSBiYXNlIGNsYXNzJ3MgYmluZCwgdG8gcHJvdmlkZSBhIGJldHRlciB0eXBlLgogIFN0cmVhbTxPYmplY3Q+IGJpbmQoU3RyZWFtPFN0cmluZz4gc3RyZWFtKSA9PiBzdXBlci5iaW5kKHN0cmVhbSk7Cn0KCi8vIEludGVybmFsIG9wdGltaXplZCBKU09OIHBhcnNpbmcgaW1wbGVtZW50YXRpb24uCmV4dGVybmFsIF9wYXJzZUpzb24oU3RyaW5nIHNvdXJjZSwgcmV2aXZlcihrZXksIHZhbHVlKSk7CgovLyBJbXBsZW1lbnRhdGlvbiBvZiBlbmNvZGVyL3N0cmluZ2lmaWVyLgoKZHluYW1pYyBfZGVmYXVsdFRvRW5jb2RhYmxlKGR5bmFtaWMgb2JqZWN0KSA9PiBvYmplY3QudG9Kc29uKCk7CgovLy8gSlNPTiBlbmNvZGVyIHRoYXQgdHJhdmVyc2VzIGFuIG9iamVjdCBzdHJ1Y3R1cmUgYW5kIHdyaXRlcyBKU09OIHNvdXJjZS4KLy8vCi8vLyBUaGlzIGlzIGFuIGFic3RyYWN0IGltcGxlbWVudGF0aW9uIHRoYXQgZG9lc24ndCBkZWNpZGUgb24gdGhlIG91dHB1dAovLy8gZm9ybWF0LCBidXQgd3JpdGVzIHRoZSBKU09OIHRocm91Z2ggYWJzdHJhY3QgbWV0aG9kcyBsaWtlIFt3cml0ZVN0cmluZ10uCmFic3RyYWN0IGNsYXNzIF9Kc29uU3RyaW5naWZpZXIgewogIC8vIENoYXJhY3RlciBjb2RlIGNvbnN0YW50cy4KICBzdGF0aWMgY29uc3QgaW50IGJhY2tzcGFjZSA9IDB4MDg7CiAgc3RhdGljIGNvbnN0IGludCB0YWIgPSAweDA5OwogIHN0YXRpYyBjb25zdCBpbnQgbmV3bGluZSA9IDB4MGE7CiAgc3RhdGljIGNvbnN0IGludCBjYXJyaWFnZVJldHVybiA9IDB4MGQ7CiAgc3RhdGljIGNvbnN0IGludCBmb3JtRmVlZCA9IDB4MGM7CiAgc3RhdGljIGNvbnN0IGludCBxdW90ZSA9IDB4MjI7CiAgc3RhdGljIGNvbnN0IGludCBjaGFyXzAgPSAweDMwOwogIHN0YXRpYyBjb25zdCBpbnQgYmFja3NsYXNoID0gMHg1YzsKICBzdGF0aWMgY29uc3QgaW50IGNoYXJfYiA9IDB4NjI7CiAgc3RhdGljIGNvbnN0IGludCBjaGFyX2YgPSAweDY2OwogIHN0YXRpYyBjb25zdCBpbnQgY2hhcl9uID0gMHg2ZTsKICBzdGF0aWMgY29uc3QgaW50IGNoYXJfciA9IDB4NzI7CiAgc3RhdGljIGNvbnN0IGludCBjaGFyX3QgPSAweDc0OwogIHN0YXRpYyBjb25zdCBpbnQgY2hhcl91ID0gMHg3NTsKCiAgLy8vIExpc3Qgb2Ygb2JqZWN0cyBjdXJyZW50bHkgYmVpbmcgdHJhdmVyc2VkLiBVc2VkIHRvIGRldGVjdCBjeWNsZXMuCiAgZmluYWwgTGlzdCBfc2VlbiA9IFtdOwoKICAvLy8gRnVuY3Rpb24gY2FsbGVkIGZvciBlYWNoIHVuLWVuY29kYWJsZSBvYmplY3QgZW5jb3VudGVyZWQuCiAgZmluYWwgRnVuY3Rpb24oZHluYW1pYykgX3RvRW5jb2RhYmxlOwoKICBfSnNvblN0cmluZ2lmaWVyKHRvRW5jb2RhYmxlKG8pKQogICAgICA6IF90b0VuY29kYWJsZSA9IHRvRW5jb2RhYmxlID8/IF9kZWZhdWx0VG9FbmNvZGFibGU7CgogIFN0cmluZyBnZXQgX3BhcnRpYWxSZXN1bHQ7CgogIC8vLyBBcHBlbmQgYSBzdHJpbmcgdG8gdGhlIEpTT04gb3V0cHV0LgogIHZvaWQgd3JpdGVTdHJpbmcoU3RyaW5nIGNoYXJhY3RlcnMpOwoKICAvLy8gQXBwZW5kIHBhcnQgb2YgYSBzdHJpbmcgdG8gdGhlIEpTT04gb3V0cHV0LgogIHZvaWQgd3JpdGVTdHJpbmdTbGljZShTdHJpbmcgY2hhcmFjdGVycywgaW50IHN0YXJ0LCBpbnQgZW5kKTsKCiAgLy8vIEFwcGVuZCBhIHNpbmdsZSBjaGFyYWN0ZXIsIGdpdmVuIGJ5IGl0cyBjb2RlIHBvaW50LCB0byB0aGUgSlNPTiBvdXRwdXQuCiAgdm9pZCB3cml0ZUNoYXJDb2RlKGludCBjaGFyQ29kZSk7CgogIC8vLyBXcml0ZSBhIG51bWJlciB0byB0aGUgSlNPTiBvdXRwdXQuCiAgdm9pZCB3cml0ZU51bWJlcihudW0gbnVtYmVyKTsKCiAgLy8gKCcwJyArIHgpIG9yICgnYScgKyB4IC0gMTApCiAgc3RhdGljIGludCBoZXhEaWdpdChpbnQgeCkgPT4geCA8IDEwID8gNDggKyB4IDogODcgKyB4OwoKICAvLy8gV3JpdGUsIGFuZCBzdWl0YWJseSBlc2NhcGUsIGEgc3RyaW5nJ3MgY29udGVudCBhcyBhIEpTT04gc3RyaW5nIGxpdGVyYWwuCiAgdm9pZCB3cml0ZVN0cmluZ0NvbnRlbnQoU3RyaW5nIHMpIHsKICAgIHZhciBvZmZzZXQgPSAwOwogICAgZmluYWwgbGVuZ3RoID0gcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBjaGFyQ29kZSA9IHMuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNoYXJDb2RlID4gYmFja3NsYXNoKSBjb250aW51ZTsKICAgICAgaWYgKGNoYXJDb2RlIDwgMzIpIHsKICAgICAgICBpZiAoaSA+IG9mZnNldCkgd3JpdGVTdHJpbmdTbGljZShzLCBvZmZzZXQsIGkpOwogICAgICAgIG9mZnNldCA9IGkgKyAxOwogICAgICAgIHdyaXRlQ2hhckNvZGUoYmFja3NsYXNoKTsKICAgICAgICBzd2l0Y2ggKGNoYXJDb2RlKSB7CiAgICAgICAgICBjYXNlIGJhY2tzcGFjZToKICAgICAgICAgICAgd3JpdGVDaGFyQ29kZShjaGFyX2IpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgdGFiOgogICAgICAgICAgICB3cml0ZUNoYXJDb2RlKGNoYXJfdCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBuZXdsaW5lOgogICAgICAgICAgICB3cml0ZUNoYXJDb2RlKGNoYXJfbik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBmb3JtRmVlZDoKICAgICAgICAgICAgd3JpdGVDaGFyQ29kZShjaGFyX2YpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgY2FycmlhZ2VSZXR1cm46CiAgICAgICAgICAgIHdyaXRlQ2hhckNvZGUoY2hhcl9yKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB3cml0ZUNoYXJDb2RlKGNoYXJfdSk7CiAgICAgICAgICAgIHdyaXRlQ2hhckNvZGUoY2hhcl8wKTsKICAgICAgICAgICAgd3JpdGVDaGFyQ29kZShjaGFyXzApOwogICAgICAgICAgICB3cml0ZUNoYXJDb2RlKGhleERpZ2l0KChjaGFyQ29kZSA+PiA0KSAmIDB4ZikpOwogICAgICAgICAgICB3cml0ZUNoYXJDb2RlKGhleERpZ2l0KGNoYXJDb2RlICYgMHhmKSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChjaGFyQ29kZSA9PSBxdW90ZSB8fCBjaGFyQ29kZSA9PSBiYWNrc2xhc2gpIHsKICAgICAgICBpZiAoaSA+IG9mZnNldCkgd3JpdGVTdHJpbmdTbGljZShzLCBvZmZzZXQsIGkpOwogICAgICAgIG9mZnNldCA9IGkgKyAxOwogICAgICAgIHdyaXRlQ2hhckNvZGUoYmFja3NsYXNoKTsKICAgICAgICB3cml0ZUNoYXJDb2RlKGNoYXJDb2RlKTsKICAgICAgfQogICAgfQogICAgaWYgKG9mZnNldCA9PSAwKSB7CiAgICAgIHdyaXRlU3RyaW5nKHMpOwogICAgfSBlbHNlIGlmIChvZmZzZXQgPCBsZW5ndGgpIHsKICAgICAgd3JpdGVTdHJpbmdTbGljZShzLCBvZmZzZXQsIGxlbmd0aCk7CiAgICB9CiAgfQoKICAvLy8gQ2hlY2sgaWYgYW4gZW5jb3VudGVyZWQgb2JqZWN0IGlzIGFscmVhZHkgYmVpbmcgdHJhdmVyc2VkLgogIC8vLwogIC8vLyBSZWNvcmRzIHRoZSBvYmplY3QgaWYgaXQgaXNuJ3QgYWxyZWFkeSBzZWVuLiBTaG91bGQgaGF2ZSBhIG1hdGNoaW5nIGNhbGwgdG8KICAvLy8gW19yZW1vdmVTZWVuXSB3aGVuIHRoZSBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHRyYXZlcnNlZC4KICB2b2lkIF9jaGVja0N5Y2xlKG9iamVjdCkgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfc2Vlbi5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaWRlbnRpY2FsKG9iamVjdCwgX3NlZW5baV0pKSB7CiAgICAgICAgdGhyb3cgSnNvbkN5Y2xpY0Vycm9yKG9iamVjdCk7CiAgICAgIH0KICAgIH0KICAgIF9zZWVuLmFkZChvYmplY3QpOwogIH0KCiAgLy8vIFJlbW92ZSBbb2JqZWN0XSBmcm9tIHRoZSBsaXN0IG9mIGN1cnJlbnRseSB0cmF2ZXJzZWQgb2JqZWN0cy4KICAvLy8KICAvLy8gU2hvdWxkIGJlIGNhbGxlZCBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIgb2YgdGhlIG1hdGNoaW5nIFtfY2hlY2tDeWNsZV0KICAvLy8gY2FsbHMuCiAgdm9pZCBfcmVtb3ZlU2VlbihvYmplY3QpIHsKICAgIGFzc2VydChfc2Vlbi5pc05vdEVtcHR5KTsKICAgIGFzc2VydChpZGVudGljYWwoX3NlZW4ubGFzdCwgb2JqZWN0KSk7CiAgICBfc2Vlbi5yZW1vdmVMYXN0KCk7CiAgfQoKICAvLy8gV3JpdGUgYW4gb2JqZWN0LgogIC8vLwogIC8vLyBJZiBbb2JqZWN0XSBpc24ndCBkaXJlY3RseSBlbmNvZGFibGUsIHRoZSBbX3RvRW5jb2RhYmxlXSBmdW5jdGlvbiBnZXRzIG9uZQogIC8vLyBjaGFuY2UgdG8gcmV0dXJuIGEgcmVwbGFjZW1lbnQgd2hpY2ggaXMgZW5jb2RhYmxlLgogIHZvaWQgd3JpdGVPYmplY3Qob2JqZWN0KSB7CiAgICAvLyBUcmllcyBzdHJpbmdpZnlpbmcgb2JqZWN0IGRpcmVjdGx5LiBJZiBpdCdzIG5vdCBhIHNpbXBsZSB2YWx1ZSwgTGlzdCBvcgogICAgLy8gTWFwLCBjYWxsIHRvSnNvbigpIHRvIGdldCBhIGN1c3RvbSByZXByZXNlbnRhdGlvbiBhbmQgdHJ5IHNlcmlhbGl6aW5nCiAgICAvLyB0aGF0LgogICAgaWYgKHdyaXRlSnNvblZhbHVlKG9iamVjdCkpIHJldHVybjsKICAgIF9jaGVja0N5Y2xlKG9iamVjdCk7CiAgICB0cnkgewogICAgICB2YXIgY3VzdG9tSnNvbiA9IF90b0VuY29kYWJsZShvYmplY3QpOwogICAgICBpZiAoIXdyaXRlSnNvblZhbHVlKGN1c3RvbUpzb24pKSB7CiAgICAgICAgdGhyb3cgSnNvblVuc3VwcG9ydGVkT2JqZWN0RXJyb3Iob2JqZWN0LCBwYXJ0aWFsUmVzdWx0OiBfcGFydGlhbFJlc3VsdCk7CiAgICAgIH0KICAgICAgX3JlbW92ZVNlZW4ob2JqZWN0KTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgdGhyb3cgSnNvblVuc3VwcG9ydGVkT2JqZWN0RXJyb3Iob2JqZWN0LAogICAgICAgICAgY2F1c2U6IGUsIHBhcnRpYWxSZXN1bHQ6IF9wYXJ0aWFsUmVzdWx0KTsKICAgIH0KICB9CgogIC8vLyBTZXJpYWxpemUgYSBbbnVtXSwgW1N0cmluZ10sIFtib29sXSwgW051bGxdLCBbTGlzdF0gb3IgW01hcF0gdmFsdWUuCiAgLy8vCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgb25lIG9mIHRoZXNlIHR5cGVzLCBhbmQgZmFsc2UgaWYgbm90LgogIC8vLyBJZiBhIHZhbHVlIGlzIGJvdGggYSBbTGlzdF0gYW5kIGEgW01hcF0sIGl0J3Mgc2VyaWFsaXplZCBhcyBhIFtMaXN0XS4KICBib29sIHdyaXRlSnNvblZhbHVlKG9iamVjdCkgewogICAgaWYgKG9iamVjdCBpcyBudW0pIHsKICAgICAgaWYgKCFvYmplY3QuaXNGaW5pdGUpIHJldHVybiBmYWxzZTsKICAgICAgd3JpdGVOdW1iZXIob2JqZWN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbChvYmplY3QsIHRydWUpKSB7CiAgICAgIHdyaXRlU3RyaW5nKCd0cnVlJyk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwob2JqZWN0LCBmYWxzZSkpIHsKICAgICAgd3JpdGVTdHJpbmcoJ2ZhbHNlJyk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIGlmIChvYmplY3QgPT0gbnVsbCkgewogICAgICB3cml0ZVN0cmluZygnbnVsbCcpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSBpZiAob2JqZWN0IGlzIFN0cmluZykgewogICAgICB3cml0ZVN0cmluZygnIicpOwogICAgICB3cml0ZVN0cmluZ0NvbnRlbnQob2JqZWN0KTsKICAgICAgd3JpdGVTdHJpbmcoJyInKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgaWYgKG9iamVjdCBpcyBMaXN0KSB7CiAgICAgIF9jaGVja0N5Y2xlKG9iamVjdCk7CiAgICAgIHdyaXRlTGlzdChvYmplY3QpOwogICAgICBfcmVtb3ZlU2VlbihvYmplY3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSBpZiAob2JqZWN0IGlzIE1hcCkgewogICAgICBfY2hlY2tDeWNsZShvYmplY3QpOwogICAgICAvLyB3cml0ZU1hcCBjYW4gZmFpbCBpZiBrZXlzIGFyZSBub3QgYWxsIHN0cmluZ3MuCiAgICAgIHZhciBzdWNjZXNzID0gd3JpdGVNYXAob2JqZWN0KTsKICAgICAgX3JlbW92ZVNlZW4ob2JqZWN0KTsKICAgICAgcmV0dXJuIHN1Y2Nlc3M7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQoKICAvLy8gU2VyaWFsaXplIGEgW0xpc3RdLgogIHZvaWQgd3JpdGVMaXN0KExpc3QgbGlzdCkgewogICAgd3JpdGVTdHJpbmcoJ1snKTsKICAgIGlmIChsaXN0LmlzTm90RW1wdHkpIHsKICAgICAgd3JpdGVPYmplY3QobGlzdFswXSk7CiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgIHdyaXRlU3RyaW5nKCcsJyk7CiAgICAgICAgd3JpdGVPYmplY3QobGlzdFtpXSk7CiAgICAgIH0KICAgIH0KICAgIHdyaXRlU3RyaW5nKCddJyk7CiAgfQoKICAvLy8gU2VyaWFsaXplIGEgW01hcF0uCiAgYm9vbCB3cml0ZU1hcChNYXAgbWFwKSB7CiAgICBpZiAobWFwLmlzRW1wdHkpIHsKICAgICAgd3JpdGVTdHJpbmcoInt9Iik7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgdmFyIGtleVZhbHVlTGlzdCA9IExpc3QobWFwLmxlbmd0aCAqIDIpOwogICAgdmFyIGkgPSAwOwogICAgdmFyIGFsbFN0cmluZ0tleXMgPSB0cnVlOwogICAgbWFwLmZvckVhY2goKGtleSwgdmFsdWUpIHsKICAgICAgaWYgKGtleSBpcyEgU3RyaW5nKSB7CiAgICAgICAgYWxsU3RyaW5nS2V5cyA9IGZhbHNlOwogICAgICB9CiAgICAgIGtleVZhbHVlTGlzdFtpKytdID0ga2V5OwogICAgICBrZXlWYWx1ZUxpc3RbaSsrXSA9IHZhbHVlOwogICAgfSk7CiAgICBpZiAoIWFsbFN0cmluZ0tleXMpIHJldHVybiBmYWxzZTsKICAgIHdyaXRlU3RyaW5nKCd7Jyk7CiAgICB2YXIgc2VwYXJhdG9yID0gJyInOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlWYWx1ZUxpc3QubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgd3JpdGVTdHJpbmcoc2VwYXJhdG9yKTsKICAgICAgc2VwYXJhdG9yID0gJywiJzsKICAgICAgd3JpdGVTdHJpbmdDb250ZW50KGtleVZhbHVlTGlzdFtpXSk7CiAgICAgIHdyaXRlU3RyaW5nKCciOicpOwogICAgICB3cml0ZU9iamVjdChrZXlWYWx1ZUxpc3RbaSArIDFdKTsKICAgIH0KICAgIHdyaXRlU3RyaW5nKCd9Jyk7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCi8vLyBBIG1vZGlmaWNhdGlvbiBvZiBbX0pzb25TdHJpbmdpZmllcl0gd2hpY2ggaW5kZW50cyB0aGUgY29udGVudHMgb2YgW0xpc3RdIGFuZAovLy8gW01hcF0gb2JqZWN0cyB1c2luZyB0aGUgc3BlY2lmaWVkIGluZGVudCB2YWx1ZS4KLy8vCi8vLyBTdWJjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgW3dyaXRlSW5kZW50YXRpb25dLgphYnN0cmFjdCBjbGFzcyBfSnNvblByZXR0eVByaW50TWl4aW4gaW1wbGVtZW50cyBfSnNvblN0cmluZ2lmaWVyIHsKICBpbnQgX2luZGVudExldmVsID0gMDsKCiAgLy8vIEFkZCBbaW5kZW50TGV2ZWxdIGluZGVudGF0aW9ucyB0byB0aGUgSlNPTiBvdXRwdXQuCiAgdm9pZCB3cml0ZUluZGVudGF0aW9uKGludCBpbmRlbnRMZXZlbCk7CgogIHZvaWQgd3JpdGVMaXN0KExpc3QgbGlzdCkgewogICAgaWYgKGxpc3QuaXNFbXB0eSkgewogICAgICB3cml0ZVN0cmluZygnW10nKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlU3RyaW5nKCdbXG4nKTsKICAgICAgX2luZGVudExldmVsKys7CiAgICAgIHdyaXRlSW5kZW50YXRpb24oX2luZGVudExldmVsKTsKICAgICAgd3JpdGVPYmplY3QobGlzdFswXSk7CiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgIHdyaXRlU3RyaW5nKCcsXG4nKTsKICAgICAgICB3cml0ZUluZGVudGF0aW9uKF9pbmRlbnRMZXZlbCk7CiAgICAgICAgd3JpdGVPYmplY3QobGlzdFtpXSk7CiAgICAgIH0KICAgICAgd3JpdGVTdHJpbmcoJ1xuJyk7CiAgICAgIF9pbmRlbnRMZXZlbC0tOwogICAgICB3cml0ZUluZGVudGF0aW9uKF9pbmRlbnRMZXZlbCk7CiAgICAgIHdyaXRlU3RyaW5nKCddJyk7CiAgICB9CiAgfQoKICBib29sIHdyaXRlTWFwKE1hcCBtYXApIHsKICAgIGlmIChtYXAuaXNFbXB0eSkgewogICAgICB3cml0ZVN0cmluZygie30iKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICB2YXIga2V5VmFsdWVMaXN0ID0gTGlzdChtYXAubGVuZ3RoICogMik7CiAgICB2YXIgaSA9IDA7CiAgICB2YXIgYWxsU3RyaW5nS2V5cyA9IHRydWU7CiAgICBtYXAuZm9yRWFjaCgoa2V5LCB2YWx1ZSkgewogICAgICBpZiAoa2V5IGlzISBTdHJpbmcpIHsKICAgICAgICBhbGxTdHJpbmdLZXlzID0gZmFsc2U7CiAgICAgIH0KICAgICAga2V5VmFsdWVMaXN0W2krK10gPSBrZXk7CiAgICAgIGtleVZhbHVlTGlzdFtpKytdID0gdmFsdWU7CiAgICB9KTsKICAgIGlmICghYWxsU3RyaW5nS2V5cykgcmV0dXJuIGZhbHNlOwogICAgd3JpdGVTdHJpbmcoJ3tcbicpOwogICAgX2luZGVudExldmVsKys7CiAgICB2YXIgc2VwYXJhdG9yID0gIiI7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleVZhbHVlTGlzdC5sZW5ndGg7IGkgKz0gMikgewogICAgICB3cml0ZVN0cmluZyhzZXBhcmF0b3IpOwogICAgICBzZXBhcmF0b3IgPSAiLFxuIjsKICAgICAgd3JpdGVJbmRlbnRhdGlvbihfaW5kZW50TGV2ZWwpOwogICAgICB3cml0ZVN0cmluZygnIicpOwogICAgICB3cml0ZVN0cmluZ0NvbnRlbnQoa2V5VmFsdWVMaXN0W2ldKTsKICAgICAgd3JpdGVTdHJpbmcoJyI6ICcpOwogICAgICB3cml0ZU9iamVjdChrZXlWYWx1ZUxpc3RbaSArIDFdKTsKICAgIH0KICAgIHdyaXRlU3RyaW5nKCdcbicpOwogICAgX2luZGVudExldmVsLS07CiAgICB3cml0ZUluZGVudGF0aW9uKF9pbmRlbnRMZXZlbCk7CiAgICB3cml0ZVN0cmluZygnfScpOwogICAgcmV0dXJuIHRydWU7CiAgfQp9CgovLy8gQSBzcGVjaWFsaXphdGlvbiBvZiBbX0pzb25TdHJpbmdpZmllcl0gdGhhdCB3cml0ZXMgaXRzIEpTT04gdG8gYSBzdHJpbmcuCmNsYXNzIF9Kc29uU3RyaW5nU3RyaW5naWZpZXIgZXh0ZW5kcyBfSnNvblN0cmluZ2lmaWVyIHsKICBmaW5hbCBTdHJpbmdTaW5rIF9zaW5rOwoKICBfSnNvblN0cmluZ1N0cmluZ2lmaWVyKHRoaXMuX3NpbmssIGR5bmFtaWMgRnVuY3Rpb24oZHluYW1pYykgX3RvRW5jb2RhYmxlKQogICAgICA6IHN1cGVyKF90b0VuY29kYWJsZSk7CgogIC8vLyBDb252ZXJ0IG9iamVjdCB0byBhIHN0cmluZy4KICAvLy8KICAvLy8gVGhlIFt0b0VuY29kYWJsZV0gZnVuY3Rpb24gaXMgdXNlZCB0byBjb252ZXJ0IG5vbi1lbmNvZGFibGUgb2JqZWN0cwogIC8vLyB0byBlbmNvZGFibGUgb25lcy4KICAvLy8KICAvLy8gSWYgW2luZGVudF0gaXMgbm90IGBudWxsYCwgdGhlIHJlc3VsdGluZyBKU09OIHdpbGwgYmUgInByZXR0eS1wcmludGVkIgogIC8vLyB3aXRoIG5ld2xpbmVzIGFuZCBpbmRlbnRhdGlvbi4gVGhlIGBpbmRlbnRgIHN0cmluZyBpcyBhZGRlZCBhcyBpbmRlbnRhdGlvbgogIC8vLyBmb3IgZWFjaCBpbmRlbnRhdGlvbiBsZXZlbC4gSXQgc2hvdWxkIG9ubHkgY29udGFpbiB2YWxpZCBKU09OIHdoaXRlc3BhY2UKICAvLy8gY2hhcmFjdGVycyAoc3BhY2UsIHRhYiwgY2FycmlhZ2UgcmV0dXJuIG9yIGxpbmUgZmVlZCkuCiAgc3RhdGljIFN0cmluZyBzdHJpbmdpZnkob2JqZWN0LCB0b0VuY29kYWJsZShvKSwgU3RyaW5nIGluZGVudCkgewogICAgdmFyIG91dHB1dCA9IFN0cmluZ0J1ZmZlcigpOwogICAgcHJpbnRPbihvYmplY3QsIG91dHB1dCwgdG9FbmNvZGFibGUsIGluZGVudCk7CiAgICByZXR1cm4gb3V0cHV0LnRvU3RyaW5nKCk7CiAgfQoKICAvLy8gQ29udmVydCBvYmplY3QgdG8gYSBzdHJpbmcsIGFuZCB3cml0ZSB0aGUgcmVzdWx0IHRvIHRoZSBbb3V0cHV0XSBzaW5rLgogIC8vLwogIC8vLyBUaGUgcmVzdWx0IGlzIHdyaXR0ZW4gcGllY2VtYWxseSB0byB0aGUgc2luay4KICBzdGF0aWMgdm9pZCBwcmludE9uKAogICAgICBvYmplY3QsIFN0cmluZ1Npbmsgb3V0cHV0LCB0b0VuY29kYWJsZShvKSwgU3RyaW5nIGluZGVudCkgewogICAgX0pzb25TdHJpbmdpZmllciBzdHJpbmdpZmllcjsKICAgIGlmIChpbmRlbnQgPT0gbnVsbCkgewogICAgICBzdHJpbmdpZmllciA9IF9Kc29uU3RyaW5nU3RyaW5naWZpZXIob3V0cHV0LCB0b0VuY29kYWJsZSk7CiAgICB9IGVsc2UgewogICAgICBzdHJpbmdpZmllciA9IF9Kc29uU3RyaW5nU3RyaW5naWZpZXJQcmV0dHkob3V0cHV0LCB0b0VuY29kYWJsZSwgaW5kZW50KTsKICAgIH0KICAgIHN0cmluZ2lmaWVyLndyaXRlT2JqZWN0KG9iamVjdCk7CiAgfQoKICBTdHJpbmcgZ2V0IF9wYXJ0aWFsUmVzdWx0ID0+IF9zaW5rIGlzIFN0cmluZ0J1ZmZlciA/IF9zaW5rLnRvU3RyaW5nKCkgOiBudWxsOwoKICB2b2lkIHdyaXRlTnVtYmVyKG51bSBudW1iZXIpIHsKICAgIF9zaW5rLndyaXRlKG51bWJlci50b1N0cmluZygpKTsKICB9CgogIHZvaWQgd3JpdGVTdHJpbmcoU3RyaW5nIHN0cmluZykgewogICAgX3Npbmsud3JpdGUoc3RyaW5nKTsKICB9CgogIHZvaWQgd3JpdGVTdHJpbmdTbGljZShTdHJpbmcgc3RyaW5nLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIF9zaW5rLndyaXRlKHN0cmluZy5zdWJzdHJpbmcoc3RhcnQsIGVuZCkpOwogIH0KCiAgdm9pZCB3cml0ZUNoYXJDb2RlKGludCBjaGFyQ29kZSkgewogICAgX3Npbmsud3JpdGVDaGFyQ29kZShjaGFyQ29kZSk7CiAgfQp9CgpjbGFzcyBfSnNvblN0cmluZ1N0cmluZ2lmaWVyUHJldHR5IGV4dGVuZHMgX0pzb25TdHJpbmdTdHJpbmdpZmllcgogICAgd2l0aCBfSnNvblByZXR0eVByaW50TWl4aW4gewogIGZpbmFsIFN0cmluZyBfaW5kZW50OwoKICBfSnNvblN0cmluZ1N0cmluZ2lmaWVyUHJldHR5KFN0cmluZ1Npbmsgc2luaywgdG9FbmNvZGFibGUobyksIHRoaXMuX2luZGVudCkKICAgICAgOiBzdXBlcihzaW5rLCB0b0VuY29kYWJsZSk7CgogIHZvaWQgd3JpdGVJbmRlbnRhdGlvbihpbnQgY291bnQpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgd3JpdGVTdHJpbmcoX2luZGVudCk7CiAgfQp9CgovLy8gU3BlY2lhbGl6YXRpb24gb2YgW19Kc29uU3RyaW5naWZpZXJdIHRoYXQgd3JpdGVzIHRoZSBKU09OIGFzIFVURi04LgovLy8KLy8vIFRoZSBKU09OIHRleHQgaXMgVVRGLTggZW5jb2RlZCBhbmQgd3JpdHRlbiB0byBbVWludDhMaXN0XSBidWZmZXJzLgovLy8gVGhlIGJ1ZmZlcnMgYXJlIHRoZW4gcGFzc2VkIGJhY2sgdG8gYSB1c2VyIHByb3ZpZGVkIGNhbGxiYWNrIG1ldGhvZC4KY2xhc3MgX0pzb25VdGY4U3RyaW5naWZpZXIgZXh0ZW5kcyBfSnNvblN0cmluZ2lmaWVyIHsKICBmaW5hbCBpbnQgYnVmZmVyU2l6ZTsKICBmaW5hbCB2b2lkIEZ1bmN0aW9uKFVpbnQ4TGlzdCBsaXN0LCBpbnQgc3RhcnQsIGludCBlbmQpIGFkZENodW5rOwogIFVpbnQ4TGlzdCBidWZmZXI7CiAgaW50IGluZGV4ID0gMDsKCiAgX0pzb25VdGY4U3RyaW5naWZpZXIodG9FbmNvZGFibGUobyksIHRoaXMuYnVmZmVyU2l6ZSwgdGhpcy5hZGRDaHVuaykKICAgICAgOiBidWZmZXIgPSBVaW50OExpc3QoYnVmZmVyU2l6ZSksCiAgICAgICAgc3VwZXIodG9FbmNvZGFibGUpOwoKICAvLy8gQ29udmVydCBbb2JqZWN0XSB0byBVVEYtOCBlbmNvZGVkIEpTT04uCiAgLy8vCiAgLy8vIENhbGxzIFthZGRDaHVua10gd2l0aCBzbGljZXMgb2YgVVRGLTggY29kZSB1bml0cy4KICAvLy8gVGhlc2Ugd2lsbCB0eXBpY2FsbHkgaGF2ZSBzaXplIFtidWZmZXJTaXplXSwgYnV0IG1heSBiZSBzaG9ydGVyLgogIC8vLyBUaGUgYnVmZmVycyBhcmUgbm90IHJldXNlZCwgc28gdGhlIFthZGRDaHVua10gY2FsbCBtYXkga2VlcCBhbmQgcmV1c2UgdGhlCiAgLy8vIGNodW5rcy4KICAvLy8KICAvLy8gSWYgW2luZGVudF0gaXMgbm9uLWBudWxsYCwgdGhlIHJlc3VsdCB3aWxsIGJlICJwcmV0dHktcHJpbnRlZCIgd2l0aCBleHRyYQogIC8vLyBuZXdsaW5lcyBhbmQgaW5kZW50YXRpb24sIHVzaW5nIFtpbmRlbnRdIGFzIHRoZSBpbmRlbnRhdGlvbi4KICBzdGF0aWMgdm9pZCBzdHJpbmdpZnkoT2JqZWN0IG9iamVjdCwgTGlzdDxpbnQ+IGluZGVudCwgdG9FbmNvZGFibGUobyksCiAgICAgIGludCBidWZmZXJTaXplLCB2b2lkIGFkZENodW5rKFVpbnQ4TGlzdCBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kKSkgewogICAgX0pzb25VdGY4U3RyaW5naWZpZXIgc3RyaW5naWZpZXI7CiAgICBpZiAoaW5kZW50ICE9IG51bGwpIHsKICAgICAgc3RyaW5naWZpZXIgPQogICAgICAgICAgX0pzb25VdGY4U3RyaW5naWZpZXJQcmV0dHkodG9FbmNvZGFibGUsIGluZGVudCwgYnVmZmVyU2l6ZSwgYWRkQ2h1bmspOwogICAgfSBlbHNlIHsKICAgICAgc3RyaW5naWZpZXIgPSBfSnNvblV0ZjhTdHJpbmdpZmllcih0b0VuY29kYWJsZSwgYnVmZmVyU2l6ZSwgYWRkQ2h1bmspOwogICAgfQogICAgc3RyaW5naWZpZXIud3JpdGVPYmplY3Qob2JqZWN0KTsKICAgIHN0cmluZ2lmaWVyLmZsdXNoKCk7CiAgfQoKICAvLy8gTXVzdCBiZSBjYWxsZWQgYXQgdGhlIGVuZCB0byBwdXNoIHRoZSBsYXN0IGNodW5rIHRvIHRoZSBbYWRkQ2h1bmtdCiAgLy8vIGNhbGxiYWNrLgogIHZvaWQgZmx1c2goKSB7CiAgICBpZiAoaW5kZXggPiAwKSB7CiAgICAgIGFkZENodW5rKGJ1ZmZlciwgMCwgaW5kZXgpOwogICAgfQogICAgYnVmZmVyID0gbnVsbDsKICAgIGluZGV4ID0gMDsKICB9CgogIFN0cmluZyBnZXQgX3BhcnRpYWxSZXN1bHQgPT4gbnVsbDsKCiAgdm9pZCB3cml0ZU51bWJlcihudW0gbnVtYmVyKSB7CiAgICB3cml0ZUFzY2lpU3RyaW5nKG51bWJlci50b1N0cmluZygpKTsKICB9CgogIC8vLyBXcml0ZSBhIHN0cmluZyB0aGF0IGlzIGtub3duIHRvIG5vdCBoYXZlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgogIHZvaWQgd3JpdGVBc2NpaVN0cmluZyhTdHJpbmcgc3RyaW5nKSB7CiAgICAvLyBUT0RPKGxybik6IE9wdGltaXplIGJ5IGNvcHlpbmcgZGlyZWN0bHkgaW50byBidWZmZXIgaW5zdGVhZCBvZiBnb2luZwogICAgLy8gdGhyb3VnaCB3cml0ZUNoYXJDb2RlOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGNoYXIgPSBzdHJpbmcuY29kZVVuaXRBdChpKTsKICAgICAgYXNzZXJ0KGNoYXIgPD0gMHg3Zik7CiAgICAgIHdyaXRlQnl0ZShjaGFyKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVTdHJpbmcoU3RyaW5nIHN0cmluZykgewogICAgd3JpdGVTdHJpbmdTbGljZShzdHJpbmcsIDAsIHN0cmluZy5sZW5ndGgpOwogIH0KCiAgdm9pZCB3cml0ZVN0cmluZ1NsaWNlKFN0cmluZyBzdHJpbmcsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgLy8gVE9ETyhscm4pOiBPcHRpbWl6ZSBieSBjb3B5aW5nIGRpcmVjdGx5IGludG8gYnVmZmVyIGluc3RlYWQgb2YgZ29pbmcKICAgIC8vIHRocm91Z2ggd3JpdGVDaGFyQ29kZS93cml0ZUJ5dGUuIEFzc3VtcHRpb24gaXMgdGhlIG1vc3QgY2hhcmFjdGVycwogICAgLy8gaW4gc3RhcmluZ3MgYXJlIHBsYWluIEFTQ0lJLgogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgdmFyIGNoYXIgPSBzdHJpbmcuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNoYXIgPD0gMHg3ZikgewogICAgICAgIHdyaXRlQnl0ZShjaGFyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoKGNoYXIgJiAweEZDMDApID09IDB4RDgwMCAmJiBpICsgMSA8IGVuZCkgewogICAgICAgICAgLy8gTGVhZCBzdXJyb2dhdGUuCiAgICAgICAgICB2YXIgbmV4dENoYXIgPSBzdHJpbmcuY29kZVVuaXRBdChpICsgMSk7CiAgICAgICAgICBpZiAoKG5leHRDaGFyICYgMHhGQzAwKSA9PSAweERDMDApIHsKICAgICAgICAgICAgLy8gVGFpbCBzdXJyb2dhdGUuCiAgICAgICAgICAgIGNoYXIgPSAweDEwMDAwICsgKChjaGFyICYgMHgzZmYpIDw8IDEwKSArIChuZXh0Q2hhciAmIDB4M2ZmKTsKICAgICAgICAgICAgd3JpdGVGb3VyQnl0ZUNoYXJDb2RlKGNoYXIpOwogICAgICAgICAgICBpKys7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB3cml0ZU11bHRpQnl0ZUNoYXJDb2RlKGNoYXIpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlQ2hhckNvZGUoaW50IGNoYXJDb2RlKSB7CiAgICBpZiAoY2hhckNvZGUgPD0gMHg3ZikgewogICAgICB3cml0ZUJ5dGUoY2hhckNvZGUpOwogICAgICByZXR1cm47CiAgICB9CiAgICB3cml0ZU11bHRpQnl0ZUNoYXJDb2RlKGNoYXJDb2RlKTsKICB9CgogIHZvaWQgd3JpdGVNdWx0aUJ5dGVDaGFyQ29kZShpbnQgY2hhckNvZGUpIHsKICAgIGlmIChjaGFyQ29kZSA8PSAweDdmZikgewogICAgICB3cml0ZUJ5dGUoMHhDMCB8IChjaGFyQ29kZSA+PiA2KSk7CiAgICAgIHdyaXRlQnl0ZSgweDgwIHwgKGNoYXJDb2RlICYgMHgzZikpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoY2hhckNvZGUgPD0gMHhmZmZmKSB7CiAgICAgIHdyaXRlQnl0ZSgweEUwIHwgKGNoYXJDb2RlID4+IDEyKSk7CiAgICAgIHdyaXRlQnl0ZSgweDgwIHwgKChjaGFyQ29kZSA+PiA2KSAmIDB4M2YpKTsKICAgICAgd3JpdGVCeXRlKDB4ODAgfCAoY2hhckNvZGUgJiAweDNmKSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHdyaXRlRm91ckJ5dGVDaGFyQ29kZShjaGFyQ29kZSk7CiAgfQoKICB2b2lkIHdyaXRlRm91ckJ5dGVDaGFyQ29kZShpbnQgY2hhckNvZGUpIHsKICAgIGFzc2VydChjaGFyQ29kZSA8PSAweDEwZmZmZik7CiAgICB3cml0ZUJ5dGUoMHhGMCB8IChjaGFyQ29kZSA+PiAxOCkpOwogICAgd3JpdGVCeXRlKDB4ODAgfCAoKGNoYXJDb2RlID4+IDEyKSAmIDB4M2YpKTsKICAgIHdyaXRlQnl0ZSgweDgwIHwgKChjaGFyQ29kZSA+PiA2KSAmIDB4M2YpKTsKICAgIHdyaXRlQnl0ZSgweDgwIHwgKGNoYXJDb2RlICYgMHgzZikpOwogIH0KCiAgdm9pZCB3cml0ZUJ5dGUoaW50IGJ5dGUpIHsKICAgIGFzc2VydChieXRlIDw9IDB4ZmYpOwogICAgaWYgKGluZGV4ID09IGJ1ZmZlci5sZW5ndGgpIHsKICAgICAgYWRkQ2h1bmsoYnVmZmVyLCAwLCBpbmRleCk7CiAgICAgIGJ1ZmZlciA9IFVpbnQ4TGlzdChidWZmZXJTaXplKTsKICAgICAgaW5kZXggPSAwOwogICAgfQogICAgYnVmZmVyW2luZGV4KytdID0gYnl0ZTsKICB9Cn0KCi8vLyBQcmV0dHktcHJpbnRpbmcgdmVyc2lvbiBvZiBbX0pzb25VdGY4U3RyaW5naWZpZXJdLgpjbGFzcyBfSnNvblV0ZjhTdHJpbmdpZmllclByZXR0eSBleHRlbmRzIF9Kc29uVXRmOFN0cmluZ2lmaWVyCiAgICB3aXRoIF9Kc29uUHJldHR5UHJpbnRNaXhpbiB7CiAgZmluYWwgTGlzdDxpbnQ+IGluZGVudDsKICBfSnNvblV0ZjhTdHJpbmdpZmllclByZXR0eSh0b0VuY29kYWJsZShvKSwgdGhpcy5pbmRlbnQsIGludCBidWZmZXJTaXplLAogICAgICB2b2lkIGFkZENodW5rKFVpbnQ4TGlzdCBidWZmZXIsIGludCBzdGFydCwgaW50IGVuZCkpCiAgICAgIDogc3VwZXIodG9FbmNvZGFibGUsIGJ1ZmZlclNpemUsIGFkZENodW5rKTsKCiAgdm9pZCB3cml0ZUluZGVudGF0aW9uKGludCBjb3VudCkgewogICAgdmFyIGluZGVudCA9IHRoaXMuaW5kZW50OwogICAgdmFyIGluZGVudExlbmd0aCA9IGluZGVudC5sZW5ndGg7CiAgICBpZiAoaW5kZW50TGVuZ3RoID09IDEpIHsKICAgICAgdmFyIGNoYXIgPSBpbmRlbnRbMF07CiAgICAgIHdoaWxlIChjb3VudCA+IDApIHsKICAgICAgICB3cml0ZUJ5dGUoY2hhcik7CiAgICAgICAgY291bnQgLT0gMTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICB3aGlsZSAoY291bnQgPiAwKSB7CiAgICAgIGNvdW50LS07CiAgICAgIHZhciBlbmQgPSBpbmRleCArIGluZGVudExlbmd0aDsKICAgICAgaWYgKGVuZCA8PSBidWZmZXIubGVuZ3RoKSB7CiAgICAgICAgYnVmZmVyLnNldFJhbmdlKGluZGV4LCBlbmQsIGluZGVudCk7CiAgICAgICAgaW5kZXggPSBl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MHg2YywgMHhlNSwgMHg2MiwgMHhlNiwKLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MiwgMHg2NywgMHg3MiwgMHhmOCwgMHg2NF0pOwovLy8gYGBgCmNvbnN0IExhdGluMUNvZGVjIGxhdGluMSA9IExhdGluMUNvZGVjKCk7Cgpjb25zdCBpbnQgX2xhdGluMU1hc2sgPSAweEZGOwoKLy8vIEEgW0xhdGluMUNvZGVjXSBlbmNvZGVzIHN0cmluZ3MgdG8gSVNPIExhdGluLTEgKGFrYSBJU08tODg1OS0xKSBieXRlcwovLy8gYW5kIGRlY29kZXMgTGF0aW4tMSBieXRlcyB0byBzdHJpbmdzLgpjbGFzcyBMYXRpbjFDb2RlYyBleHRlbmRzIEVuY29kaW5nIHsKICBmaW5hbCBib29sIF9hbGxvd0ludmFsaWQ7CgogIC8vLyBJbnN0YW50aWF0ZXMgYSBuZXcgW0xhdGluMUNvZGVjXS4KICAvLy8KICAvLy8gSWYgW2FsbG93SW52YWxpZF0gaXMgdHJ1ZSwgdGhlIFtkZWNvZGVdIG1ldGhvZCBhbmQgdGhlIGNvbnZlcnRlcgogIC8vLyByZXR1cm5lZCBieSBbZGVjb2Rlcl0gd2lsbCBkZWZhdWx0IHRvIGFsbG93aW5nIGludmFsaWQgdmFsdWVzLiBJbnZhbGlkCiAgLy8vIHZhbHVlcyBhcmUgZGVjb2RlZCBpbnRvIHRoZSBVbmljb2RlIFJlcGxhY2VtZW50IGNoYXJhY3RlciAoVStGRkZEKS4KICAvLy8gQ2FsbHMgdG8gdGhlIFtkZWNvZGVdIG1ldGhvZCBjYW4gb3ZlcnJpZGUgdGhpcyBkZWZhdWx0LgogIC8vLwogIC8vLyBFbmNvZGVycyB3aWxsIG5vdCBhY2NlcHQgaW52YWxpZCAobm9uIExhdGluLTEpIGNoYXJhY3RlcnMuCiAgY29uc3QgTGF0aW4xQ29kZWMoe2Jvb2wgYWxsb3dJbnZhbGlkID0gZmFsc2V9KSA6IF9hbGxvd0ludmFsaWQgPSBhbGxvd0ludmFsaWQ7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGlzIGNvZGVjLCAiaXNvLTg4NTktMSIuCiAgU3RyaW5nIGdldCBuYW1lID0+ICJpc28tODg1OS0xIjsKCiAgVWludDhMaXN0IGVuY29kZShTdHJpbmcgc291cmNlKSA9PiBlbmNvZGVyLmNvbnZlcnQoc291cmNlKTsKCiAgLy8vIERlY29kZXMgdGhlIExhdGluLTEgW2J5dGVzXSAoYSBsaXN0IG9mIHVuc2lnbmVkIDgtYml0IGludGVnZXJzKSB0byB0aGUKICAvLy8gY29ycmVzcG9uZGluZyBzdHJpbmcuCiAgLy8vCiAgLy8vIElmIFtieXRlc10gY29udGFpbnMgdmFsdWVzIHRoYXQgYXJlIG5vdCBpbiB0aGUgcmFuZ2UgMCAuLiAyNTUsIHRoZSBkZWNvZGVyCiAgLy8vIHdpbGwgZXZlbnR1YWxseSB0aHJvdyBhIFtGb3JtYXRFeGNlcHRpb25dLgogIC8vLwogIC8vLyBJZiBbYWxsb3dJbnZhbGlkXSBpcyBub3QgcHJvdmlkZWQsIGl0IGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSB1c2VkIHRvIGNyZWF0ZQogIC8vLyB0aGlzIFtMYXRpbjFDb2RlY10uCiAgU3RyaW5nIGRlY29kZShMaXN0PGludD4gYnl0ZXMsIHtib29sIGFsbG93SW52YWxpZH0pIHsKICAgIGFsbG93SW52YWxpZCA/Pz0gX2FsbG93SW52YWxpZDsKICAgIGlmIChhbGxvd0ludmFsaWQpIHsKICAgICAgcmV0dXJuIGNvbnN0IExhdGluMURlY29kZXIoYWxsb3dJbnZhbGlkOiB0cnVlKS5jb252ZXJ0KGJ5dGVzKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBjb25zdCBMYXRpbjFEZWNvZGVyKGFsbG93SW52YWxpZDogZmFsc2UpLmNvbnZlcnQoYnl0ZXMpOwogICAgfQogIH0KCiAgTGF0aW4xRW5jb2RlciBnZXQgZW5jb2RlciA9PiBjb25zdCBMYXRpbjFFbmNvZGVyKCk7CgogIExhdGluMURlY29kZXIgZ2V0IGRlY29kZXIgPT4gX2FsbG93SW52YWxpZAogICAgICA/IGNvbnN0IExhdGluMURlY29kZXIoYWxsb3dJbnZhbGlkOiB0cnVlKQogICAgICA6IGNvbnN0IExhdGluMURlY29kZXIoYWxsb3dJbnZhbGlkOiBmYWxzZSk7Cn0KCi8vLyBUaGlzIGNsYXNzIGNvbnZlcnRzIHN0cmluZ3Mgb2Ygb25seSBJU08gTGF0aW4tMSBjaGFyYWN0ZXJzIHRvIGJ5dGVzLgpjbGFzcyBMYXRpbjFFbmNvZGVyIGV4dGVuZHMgX1VuaWNvZGVTdWJzZXRFbmNvZGVyIHsKICBjb25zdCBMYXRpbjFFbmNvZGVyKCkgOiBzdXBlcihfbGF0aW4xTWFzayk7Cn0KCi8vLyBUaGlzIGNsYXNzIGNvbnZlcnRzIExhdGluLTEgYnl0ZXMgKGxpc3RzIG9mIHVuc2lnbmVkIDgtYml0IGludGVnZXJzKQovLy8gdG8gYSBzdHJpbmcuCmNsYXNzIExhdGluMURlY29kZXIgZXh0ZW5kcyBfVW5pY29kZVN1YnNldERlY29kZXIgewogIC8vLyBJbnN0YW50aWF0ZXMgYSBuZXcgW0xhdGluMURlY29kZXJdLgogIC8vLwogIC8vLyBUaGUgb3B0aW9uYWwgW2FsbG93SW52YWxpZF0gYXJndW1lbnQgZGVmaW5lcyBob3cgW2NvbnZlcnRdIGRlYWxzCiAgLy8vIHdpdGggaW52YWxpZCBieXRlcy4KICAvLy8KICAvLy8gSWYgaXQgaXMgYHRydWVgLCBbY29udmVydF0gcmVwbGFjZXMgaW52YWxpZCBieXRlcyB3aXRoIHRoZSBVbmljb2RlCiAgLy8vIFJlcGxhY2VtZW50IGNoYXJhY3RlciBgVStGRkZEYCAo77+9KS4KICAvLy8gT3RoZXJ3aXNlIGl0IHRocm93cyBhIFtGb3JtYXRFeGNlcHRpb25dLgogIGNvbnN0IExhdGluMURlY29kZXIoe2Jvb2wgYWxsb3dJbnZhbGlkID0gZmFsc2V9KQogICAgICA6IHN1cGVyKGFsbG93SW52YWxpZCwgX2xhdGluMU1hc2spOwoKICAvLy8gU3RhcnRzIGEgY2h1bmtlZCBjb252ZXJzaW9uLgogIC8vLwogIC8vLyBUaGUgY29udmVydGVyIHdvcmtzIG1vcmUgZWZmaWNpZW50bHkgaWYgdGhlIGdpdmVuIFtzaW5rXSBpcyBhCiAgLy8vIFtTdHJpbmdDb252ZXJzaW9uU2lua10uCiAgQnl0ZUNvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxTdHJpbmc+IHNpbmspIHsKICAgIFN0cmluZ0NvbnZlcnNpb25TaW5rIHN0cmluZ1Npbms7CiAgICBpZiAoc2luayBpcyBTdHJpbmdDb252ZXJzaW9uU2luaykgewogICAgICBzdHJpbmdTaW5rID0gc2luazsKICAgIH0gZWxzZSB7CiAgICAgIHN0cmluZ1NpbmsgPSBTdHJpbmdDb252ZXJzaW9uU2luay5mcm9tKHNpbmspOwogICAgfQogICAgLy8gVE9ETyhscm4pOiBVc2Ugc3RyaW5nU2luay5hc1V0ZjE2U2luaygpIGlmIGl0IGJlY29tZXMgYXZhaWxhYmxlLgogICAgaWYgKCFfYWxsb3dJbnZhbGlkKSByZXR1cm4gX0xhdGluMURlY29kZXJTaW5rKHN0cmluZ1NpbmspOwogICAgcmV0dXJuIF9MYXRpbjFBbGxvd0ludmFsaWREZWNvZGVyU2luayhzdHJpbmdTaW5rKTsKICB9Cn0KCmNsYXNzIF9MYXRpbjFEZWNvZGVyU2luayBleHRlbmRzIEJ5dGVDb252ZXJzaW9uU2lua0Jhc2UgewogIFN0cmluZ0NvbnZlcnNpb25TaW5rIF9zaW5rOwogIF9MYXRpbjFEZWNvZGVyU2luayh0aGlzLl9zaW5rKTsKCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9zaW5rLmNsb3NlKCk7CiAgICBfc2luayA9IG51bGw7CiAgfQoKICB2b2lkIGFkZChMaXN0PGludD4gc291cmNlKSB7CiAgICBhZGRTbGljZShzb3VyY2UsIDAsIHNvdXJjZS5sZW5ndGgsIGZhbHNlKTsKICB9CgogIHZvaWQgX2FkZFNsaWNlVG9TaW5rKExpc3Q8aW50PiBzb3VyY2UsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIC8vIElmIF9zaW5rIHdhcyBhIFVURi0xNiBjb252ZXJzaW9uIHNpbmssIGp1c3QgYWRkIHRoZSBzbGljZSBkaXJlY3RseSB3aXRoCiAgICAvLyBfc2luay5hZGRTbGljZShzb3VyY2UsIHN0YXJ0LCBlbmQsIGlzTGFzdCkuCiAgICAvLyBUaGUgY29kZSBiZWxvdyBpcyBhbiBtb2RlcmF0ZWx5IHN0dXBpZCB3b3JrYXJvdW5kIHVudGlsIGEgcmVhbAogICAgLy8gc29sdXRpb24gY2FuIGJlIG1hZGUuCiAgICBfc2luay5hZGQoU3RyaW5nLmZyb21DaGFyQ29kZXMoc291cmNlLCBzdGFydCwgZW5kKSk7CiAgICBpZiAoaXNMYXN0KSBjbG9zZSgpOwogIH0KCiAgdm9pZCBhZGRTbGljZShMaXN0PGludD4gc291cmNlLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBzb3VyY2UubGVuZ3RoKTsKICAgIGlmIChzdGFydCA9PSBlbmQpIHJldHVybjsKICAgIGlmIChzb3VyY2UgaXMhIFVpbnQ4TGlzdCkgewogICAgICAvLyBMaXN0IG1heSBjb250YWluIHZhbHVlIG91dHNpZGUgb2YgdGhlIDAuLjI1NSByYW5nZS4gSWYgc28sIHRocm93LgogICAgICAvLyBUZWNobmljYWxseSwgd2UgY291bGQgZXhjdXNlIFVpbnQ4Q2xhbXBlZExpc3QgYXMgd2VsbCwgYnV0IGl0IHVubGlrZWx5CiAgICAgIC8vIHRvIGJlIHJlbGV2YW50LgogICAgICBfY2hlY2tWYWxpZExhdGluMShzb3VyY2UsIHN0YXJ0LCBlbmQpOwogICAgfQogICAgX2FkZFNsaWNlVG9TaW5rKHNvdXJjZSwgc3RhcnQsIGVuZCwgaXNMYXN0KTsKICB9CgogIHN0YXRpYyB2b2lkIF9jaGVja1ZhbGlkTGF0aW4xKExpc3Q8aW50PiBzb3VyY2UsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgdmFyIG1hc2sgPSAwOwogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgbWFzayB8PSBzb3VyY2VbaV07CiAgICB9CiAgICBpZiAobWFzayA+PSAwICYmIG1hc2sgPD0gX2xhdGluMU1hc2spIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgX3JlcG9ydEludmFsaWRMYXRpbjEoc291cmNlLCBzdGFydCwgZW5kKTsgLy8gQWx3YXlzIHRocm93cy4KICB9CgogIHN0YXRpYyB2b2lkIF9yZXBvcnRJbnZhbGlkTGF0aW4xKExpc3Q8aW50PiBzb3VyY2UsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgLy8gRmluZCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG5vbi1MYXRpbi0xIGNoYXJhY3RlciBjb2RlLgogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgdmFyIGNoYXIgPSBzb3VyY2VbaV07CiAgICAgIGlmIChjaGFyIDwgMCB8fCBjaGFyID4gX2xhdGluMU1hc2spIHsKICAgICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICJTb3VyY2UgY29udGFpbnMgbm9uLUxhdGluLTEgY2hhcmFjdGVycy4iLCBzb3VyY2UsIGkpOwogICAgICB9CiAgICB9CiAgICAvLyBVbnJlYWNoYWJsZSAtIHdlIG9ubHkgY2FsbCB0aGUgZnVuY3Rpb24gaWYgdGhlIGxvb3AgYWJvdmUgdGhyb3dzLgogICAgYXNzZXJ0KGZhbHNlKTsKICB9Cn0KCmNsYXNzIF9MYXRpbjFBbGxvd0ludmFsaWREZWNvZGVyU2luayBleHRlbmRzIF9MYXRpbjFEZWNvZGVyU2luayB7CiAgX0xhdGluMUFsbG93SW52YWxpZERlY29kZXJTaW5rKFN0cmluZ0NvbnZlcnNpb25TaW5rIHNpbmspIDogc3VwZXIoc2luayk7CgogIHZvaWQgYWRkU2xpY2UoTGlzdDxpbnQ+IHNvdXJjZSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgc291cmNlLmxlbmd0aCk7CiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICB2YXIgY2hhciA9IHNvdXJjZVtpXTsKICAgICAgaWYgKGNoYXIgPiBfbGF0aW4xTWFzayB8fCBjaGFyIDwgMCkgewogICAgICAgIGlmIChpID4gc3RhcnQpIF9hZGRTbGljZVRvU2luayhzb3VyY2UsIHN0YXJ0LCBpLCBmYWxzZSk7CiAgICAgICAgLy8gQWRkIFVURi04IGVuY29kaW5nIG9mIFUrRkZGRC4KICAgICAgICBfYWRkU2xpY2VUb1NpbmsoY29uc3QgWzB4RkZGRF0sIDAsIDEsIGZhbHNlKTsKICAgICAgICBzdGFydCA9IGkgKyAxOwogICAgICB9CiAgICB9CiAgICBpZiAoc3RhcnQgPCBlbmQpIHsKICAgICAgX2FkZFNsaWNlVG9TaW5rKHNvdXJjZSwgc3RhcnQsIGVuZCwgaXNMYXN0KTsKICAgIH0KICAgIGlmIChpc0xhc3QpIHsKICAgICAgY2xvc2UoKTsKICAgIH0KICB9Cn0KgLoATk48AQ8BFgFEBE4PBA4MLz9BCCoBHgFKKiUcASgGR01KPgZBUQEsIwE+AU0cBlExBlEaOCQYRQ1GBgQBNgEtMDICAUk0LgIBSRE0KgZHGgZJKi8zKgEjBkQeQSUoGQ00Bkg/NwQCAToeIgERExIEAR8vBAFMTzNGHTkZBAFFQR4gS1AZLQYxBAFIEigZBiwOBkAEAUs/KBwsH0MIBkkTBAIBQksBRTsoHCxBKTYXCAYXMwYSDwYEAgEYZGFydDpjb252ZXJ0L2xhdGluMS5kYXJ0R29yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2NvbnZlcnQvbGluZV9zcGxpdHRlci5kYXJ0k4wvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5jb252ZXJ0OwoKLy8gQ2hhcmFjdGVyIGNvbnN0YW50cy4KY29uc3QgaW50IF9MRiA9IDEwOwpjb25zdCBpbnQgX0NSID0gMTM7CgovLy8gQSBbU3RyZWFtVHJhbnNmb3JtZXJdIHRoYXQgc3BsaXRzIGEgW1N0cmluZ10gaW50byBpbmRpdmlkdWFsIGxpbmVzLgovLy8KLy8vIEEgbGluZSBpcyB0ZXJtaW5hdGVkIGJ5IGVpdGhlciBhIENSIChVKzAwMEQpLCBhIExGIChVKzAwMEEpLCBhCi8vLyBDUitMRiBzZXF1ZW5jZSAoRE9TIGxpbmUgZW5kaW5nKSwKLy8vIGFuZCBhIGZpbmFsIG5vbi1lbXB0eSBsaW5lIGNhbiBiZSBlbmRlZCBieSB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCi8vLwovLy8gVGhlIHJldHVybmVkIGxpbmVzIGRvIG5vdCBjb250YWluIHRoZSBsaW5lIHRlcm1pbmF0b3JzLgoKY2xhc3MgTGluZVNwbGl0dGVyIGV4dGVuZHMgU3RyZWFtVHJhbnNmb3JtZXJCYXNlPFN0cmluZywgU3RyaW5nPiB7CiAgY29uc3QgTGluZVNwbGl0dGVyKCk7CgogIC8vLyBTcGxpdCBbbGluZXNdIGludG8gaW5kaXZpZHVhbCBsaW5lcy4KICAvLy8KICAvLy8gSWYgW3N0YXJ0XSBhbmQgW2VuZF0gYXJlIHByb3ZpZGVkLCBvbmx5IHNwbGl0IHRoZSBjb250ZW50cyBvZgogIC8vLyBgbGluZXMuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpYC4gVGhlIFtzdGFydF0gYW5kIFtlbmRdIHZhbHVlcyBtdXN0CiAgLy8vIHNwZWNpZnkgYSB2YWxpZCBzdWItcmFuZ2Ugb2YgW2xpbmVzXQogIC8vLyAoYDAgPD0gc3RhcnQgPD0gZW5kIDw9IGxpbmVzLmxlbmd0aGApLgogIHN0YXRpYyBJdGVyYWJsZTxTdHJpbmc+IHNwbGl0KFN0cmluZyBsaW5lcywgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSBzeW5jKiB7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBsaW5lcy5sZW5ndGgpOwogICAgdmFyIHNsaWNlU3RhcnQgPSBzdGFydDsKICAgIHZhciBjaGFyID0gMDsKICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIHZhciBwcmV2aW91c0NoYXIgPSBjaGFyOwogICAgICBjaGFyID0gbGluZXMuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNoYXIgIT0gX0NSKSB7CiAgICAgICAgaWYgKGNoYXIgIT0gX0xGKSBjb250aW51ZTsKICAgICAgICBpZiAocHJldmlvdXNDaGFyID09IF9DUikgewogICAgICAgICAgc2xpY2VTdGFydCA9IGkgKyAxOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHlpZWxkIGxpbmVzLnN1YnN0cmluZyhzbGljZVN0YXJ0LCBpKTsKICAgICAgc2xpY2VTdGFydCA9IGkgKyAxOwogICAgfQogICAgaWYgKHNsaWNlU3RhcnQgPCBlbmQpIHsKICAgICAgeWllbGQgbGluZXMuc3Vic3RyaW5nKHNsaWNlU3RhcnQsIGVuZCk7CiAgICB9CiAgfQoKICBMaXN0PFN0cmluZz4gY29udmVydChTdHJpbmcgZGF0YSkgewogICAgdmFyIGxpbmVzID0gPFN0cmluZz5bXTsKICAgIHZhciBlbmQgPSBkYXRhLmxlbmd0aDsKICAgIHZhciBzbGljZVN0YXJ0ID0gMDsKICAgIHZhciBjaGFyID0gMDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5kOyBpKyspIHsKICAgICAgdmFyIHByZXZpb3VzQ2hhciA9IGNoYXI7CiAgICAgIGNoYXIgPSBkYXRhLmNvZGVVbml0QXQoaSk7CiAgICAgIGlmIChjaGFyICE9IF9DUikgewogICAgICAgIGlmIChjaGFyICE9IF9MRikgY29udGludWU7CiAgICAgICAgaWYgKHByZXZpb3VzQ2hhciA9PSBfQ1IpIHsKICAgICAgICAgIHNsaWNlU3RhcnQgPSBpICsgMTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBsaW5lcy5hZGQoZGF0YS5zdWJzdHJpbmcoc2xpY2VTdGFydCwgaSkpOwogICAgICBzbGljZVN0YXJ0ID0gaSArIDE7CiAgICB9CiAgICBpZiAoc2xpY2VTdGFydCA8IGVuZCkgewogICAgICBsaW5lcy5hZGQoZGF0YS5zdWJzdHJpbmcoc2xpY2VTdGFydCwgZW5kKSk7CiAgICB9CiAgICByZXR1cm4gbGluZXM7CiAgfQoKICBTdHJpbmdDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8U3RyaW5nPiBzaW5rKSB7CiAgICByZXR1cm4gX0xpbmVTcGxpdHRlclNpbmsoCiAgICAgICAgc2luayBpcyBTdHJpbmdDb252ZXJzaW9uU2luayA/IHNpbmsgOiBTdHJpbmdDb252ZXJzaW9uU2luay5mcm9tKHNpbmspKTsKICB9CgogIFN0cmVhbTxTdHJpbmc+IGJpbmQoU3RyZWFtPFN0cmluZz4gc3RyZWFtKSB7CiAgICByZXR1cm4gU3RyZWFtPFN0cmluZz4uZXZlbnRUcmFuc2Zvcm1lZCgKICAgICAgICBzdHJlYW0sIChFdmVudFNpbms8U3RyaW5nPiBzaW5rKSA9PiBfTGluZVNwbGl0dGVyRXZlbnRTaW5rKHNpbmspKTsKICB9Cn0KCi8vIFRPRE8oZmxvaXRzY2gpOiBkZWFsIHdpdGggdXRmOC4KY2xhc3MgX0xpbmVTcGxpdHRlclNpbmsgZXh0ZW5kcyBTdHJpbmdDb252ZXJzaW9uU2lua0Jhc2UgewogIGZpbmFsIFN0cmluZ0NvbnZlcnNpb25TaW5rIF9zaW5rOwoKICAvLy8gVGhlIGNhcnJ5LW92ZXIgZnJvbSB0aGUgcHJldmlvdXMgY2h1bmsuCiAgLy8vCiAgLy8vIElmIHRoZSBwcmV2aW91cyBzbGljZSBlbmRlZCBpbiBhIGxpbmUgd2l0aG91dCBhIGxpbmUgdGVybWluYXRvciwKICAvLy8gdGhlbiB0aGUgbmV4dCBzbGljZSBtYXkgY29udGludWUgdGhlIGxpbmUuCiAgU3RyaW5nIF9jYXJyeTsKCiAgLy8vIFdoZXRoZXIgdG8gc2tpcCBhIGxlYWRpbmcgTEYgY2hhcmFjdGVyIGZyb20gdGhlIG5leHQgc2xpY2UuCiAgLy8vCiAgLy8vIElmIHRoZSBwcmV2aW91cyBzbGljZSBlbmRlZCBvbiBhIENSIGNoYXJhY3RlciwgYSBmb2xsb3dpbmcgTEYKICAvLy8gd291bGQgYmUgcGFydCBvZiB0aGUgc2FtZSBsaW5lIHRlcm1pbmF0aW9uLCBhbmQgc2hvdWxkIGJlIGlnbm9yZWQuCiAgLy8vCiAgLy8vIE9ubHkgYHRydWVgIHdoZW4gW19jYXJyeV0gaXMgYG51bGxgLgogIGJvb2wgX3NraXBMZWFkaW5nTEYgPSBmYWxzZTsKCiAgX0xpbmVTcGxpdHRlclNpbmsodGhpcy5fc2luayk7CgogIHZvaWQgYWRkU2xpY2UoU3RyaW5nIGNodW5rLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBjaHVuay5sZW5ndGgpOwogICAgLy8gSWYgdGhlIGNodW5rIGlzIGVtcHR5LCBpdCdzIHByb2JhYmx5IGJlY2F1c2UgaXQncyB0aGUgbGFzdCBvbmUuCiAgICAvLyBIYW5kbGUgdGhhdCBoZXJlLCBzbyB3ZSBrbm93IHRoZSByYW5nZSBpcyBub24tZW1wdHkgYmVsb3cuCiAgICBpZiAoc3RhcnQgPj0gZW5kKSB7CiAgICAgIGlmIChpc0xhc3QpIGNsb3NlKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChfY2FycnkgIT0gbnVsbCkgewogICAgICBhc3NlcnQoIV9za2lwTGVhZGluZ0xGKTsKICAgICAgY2h1bmsgPSBfY2FycnkgKyBjaHVuay5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7CiAgICAgIHN0YXJ0ID0gMDsKICAgICAgZW5kID0gY2h1bmsubGVuZ3RoOwogICAgICBfY2FycnkgPSBudWxsOwogICAgfSBlbHNlIGlmIChfc2tpcExlYWRpbmdMRikgewogICAgICBpZiAoY2h1bmsuY29kZVVuaXRBdChzdGFydCkgPT0gX0xGKSB7CiAgICAgICAgc3RhcnQgKz0gMTsKICAgICAgfQogICAgICBfc2tpcExlYWRpbmdMRiA9IGZhbHNlOwogICAgfQogICAgX2FkZExpbmVzKGNodW5rLCBzdGFydCwgZW5kKTsKICAgIGlmIChpc0xhc3QpIGNsb3NlKCk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgaWYgKF9jYXJyeSAhPSBudWxsKSB7CiAgICAgIF9zaW5rLmFkZChfY2FycnkpOwogICAgICBfY2FycnkgPSBudWxsOwogICAgfQogICAgX3NpbmsuY2xvc2UoKTsKICB9CgogIHZvaWQgX2FkZExpbmVzKFN0cmluZyBsaW5lcywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICB2YXIgc2xpY2VTdGFydCA9IHN0YXJ0OwogICAgdmFyIGNoYXIgPSAwOwogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgdmFyIHByZXZpb3VzQ2hhciA9IGNoYXI7CiAgICAgIGNoYXIgPSBsaW5lcy5jb2RlVW5pdEF0KGkpOwogICAgICBpZiAoY2hhciAhPSBfQ1IpIHsKICAgICAgICBpZiAoY2hhciAhPSBfTEYpIGNvbnRpbnVlOwogICAgICAgIGlmIChwcmV2aW91c0NoYXIgPT0gX0NSKSB7CiAgICAgICAgICBzbGljZVN0YXJ0ID0gaSArIDE7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgX3NpbmsuYWRkKGxpbmVzLnN1YnN0cmluZyhzbGljZVN0YXJ0LCBpKSk7CiAgICAgIHNsaWNlU3RhcnQgPSBpICsgMTsKICAgIH0KICAgIGlmIChzbGljZVN0YXJ0IDwgZW5kKSB7CiAgICAgIF9jYXJyeSA9IGxpbmVzLnN1YnN0cmluZyhzbGljZVN0YXJ0LCBlbmQpOwogICAgfSBlbHNlIHsKICAgICAgX3NraXBMZWFkaW5nTEYgPSAoY2hhciA9PSBfQ1IpOwogICAgfQogIH0KfQoKY2xhc3MgX0xpbmVTcGxpdHRlckV2ZW50U2luayBleHRlbmRzIF9MaW5lU3BsaXR0ZXJTaW5rCiAgICBpbXBsZW1lbnRzIEV2ZW50U2luazxTdHJpbmc+IHsKICBmaW5hbCBFdmVudFNpbms8U3RyaW5nPiBfZXZlbnRTaW5rOwoKICBfTGluZVNwbGl0dGVyRXZlbnRTaW5rKEV2ZW50U2luazxTdHJpbmc+IGV2ZW50U2luaykKICAgICAgOiBfZXZlbnRTaW5rID0gZXZlbnRTaW5rLAogICAgICAgIHN1cGVyKFN0cmluZ0NvbnZlcnNpb25TaW5rLmZyb20oZXZlbnRTaW5rKSk7CgogIHZvaWQgYWRkRXJyb3IoT2JqZWN0IG8sIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBfZXZlbnRTaW5rLmFkZEVycm9yKG8sIHN0YWNrVHJhY2UpOwogIH0KfQqAsABOTjwBDwEWARgUFAFIBEMmRgQ8AUMYASsGREcrLVBAHBIoHyIZIyMeFAoILBoGHC4GBAEmHBsYEiQfIRkjIx4UCggwGgYcMgYSBAFDHlAEAS8sSwQCASM7JAEuBkcxEQFCBkRJBisfASEBQUBHQhgbDgYaHzQRGhUhLBQIHgYiGQQBERoZFQYTBAE1HBIoHyIZIyMeFAoIMRoGHDENJgYEAgE3IyYBNiA1ATUoBAIBH2RhcnQ6Y29udmVydC9saW5lX3NwbGl0dGVyLmRhcnRLb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvY29udmVydC9zdHJpbmdfY29udmVyc2lvbi5kYXJ0pZIvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5jb252ZXJ0OwoKLy8vIFRoaXMgY2xhc3MgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciBjb252ZXJ0ZXJzIHRvCi8vLyBlZmZpY2llbnRseSB0cmFuc21pdCBTdHJpbmcgZGF0YS4KLy8vCi8vLyBJbnN0ZWFkIG9mIGxpbWl0aW5nIHRoZSBpbnRlcmZhY2UgdG8gb25lIG5vbi1jaHVua2VkIFN0cmluZyBpdCBhY2NlcHRzCi8vLyBwYXJ0aWFsIHN0cmluZ3Mgb3IgY2FuIGJlIHRyYW5zZm9ybWVkIGludG8gYSBieXRlIHNpbmsgdGhhdAovLy8gYWNjZXB0cyBVVEYtOCBjb2RlIHVuaXRzLgovLy8KLy8vIFRoaXMgYWJzdHJhY3QgY2xhc3Mgd2lsbCBsaWtlbHkgZ2V0IG1vcmUgbWV0aG9kcyBvdmVyIHRpbWUuIEltcGxlbWVudGVycyBhcmUKLy8vIHVyZ2VkIHRvIGV4dGVuZCBbU3RyaW5nQ29udmVyc2lvblNpbmtCYXNlXSBvciB0byBtaXggaW4KLy8vIFtTdHJpbmdDb252ZXJzaW9uU2lua01peGluXSwgdG8gZW5zdXJlIHRoYXQgdGhlaXIgY2xhc3MgY292ZXJzIHRoZSBuZXdseQovLy8gYWRkZWQgbWV0aG9kcy4KYWJzdHJhY3QgY2xhc3MgU3RyaW5nQ29udmVyc2lvblNpbmsgZXh0ZW5kcyBDaHVua2VkQ29udmVyc2lvblNpbms8U3RyaW5nPiB7CiAgU3RyaW5nQ29udmVyc2lvblNpbmsoKTsKICBmYWN0b3J5IFN0cmluZ0NvbnZlcnNpb25TaW5rLndpdGhDYWxsYmFjayh2b2lkIGNhbGxiYWNrKFN0cmluZyBhY2N1bXVsYXRlZCkpID0KICAgICAgX1N0cmluZ0NhbGxiYWNrU2luazsKICBmYWN0b3J5IFN0cmluZ0NvbnZlcnNpb25TaW5rLmZyb20oU2luazxTdHJpbmc+IHNpbmspID0gX1N0cmluZ0FkYXB0ZXJTaW5rOwoKICAvLy8gQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSB3cmFwcGluZyB0aGUgZ2l2ZW4gW3NpbmtdLgogIC8vLwogIC8vLyBFdmVyeSBzdHJpbmcgdGhhdCBpcyBhZGRlZCB0byB0aGUgcmV0dXJuZWQgaW5zdGFuY2UgaXMgZm9yd2FyZGVkIHRvCiAgLy8vIHRoZSBbc2lua10uIFRoZSBpbnN0YW5jZSBpcyBhbGxvd2VkIHRvIGJ1ZmZlciBhbmQgaXMgbm90IHJlcXVpcmVkIHRvCiAgLy8vIGZvcndhcmQgaW1tZWRpYXRlbHkuCiAgZmFjdG9yeSBTdHJpbmdDb252ZXJzaW9uU2luay5mcm9tU3RyaW5nU2luayhTdHJpbmdTaW5rIHNpbmspID0KICAgICAgX1N0cmluZ1NpbmtDb252ZXJzaW9uU2luazxTdHJpbmdTaW5rPjsKCiAgLy8vIEFkZHMgdGhlIG5leHQgW2NodW5rXSB0byBgdGhpc2AuCiAgLy8vCiAgLy8vIEFkZHMgdGhlIHN1YnN0cmluZyBkZWZpbmVkIGJ5IFtzdGFydF0gYW5kIFtlbmRdLWV4Y2x1c2l2ZSB0byBgdGhpc2AuCiAgLy8vCiAgLy8vIElmIFtpc0xhc3RdIGlzIGB0cnVlYCBjbG9zZXMgYHRoaXNgLgogIHZvaWQgYWRkU2xpY2UoU3RyaW5nIGNodW5rLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KTsKCiAgLy8vIFJldHVybnMgYHRoaXNgIGFzIGEgc2luayB0aGF0IGFjY2VwdHMgVVRGLTggaW5wdXQuCiAgLy8vCiAgLy8vIElmIHVzZWQsIHRoaXMgbWV0aG9kIG11c3QgYmUgdGhlIGZpcnN0IGFuZCBvbmx5IGNhbGwgdG8gYHRoaXNgLiBJdAogIC8vLyBpbnZhbGlkYXRlcyBgdGhpc2AuIEFsbCBmdXJ0aGVyIG9wZXJhdGlvbnMgbXVzdCBiZSBwZXJmb3JtZWQgb24gdGhlIHJlc3VsdC4KICBCeXRlQ29udmVyc2lvblNpbmsgYXNVdGY4U2luayhib29sIGFsbG93TWFsZm9ybWVkKTsKICAvLyAtIGFzUnVuZVNpbmsKICAvLyAtIGFzQ29kZVVuaXRzU2luawoKICAvLy8gUmV0dXJucyBgdGhpc2AgYXMgYSBbQ2xvc2FibGVTdHJpbmdTaW5rXS4KICAvLy8KICAvLy8gSWYgdXNlZCwgdGhpcyBtZXRob2QgbXVzdCBiZSB0aGUgZmlyc3QgYW5kIG9ubHkgY2FsbCB0byBgdGhpc2AuIEl0CiAgLy8vIGludmFsaWRhdGVzIGB0aGlzYC4gQWxsIGZ1cnRoZXIgb3BlcmF0aW9ucyBtdXN0IGJlIHBlcmZvcm1lZCBvbiB0aGUgcmVzdWx0LgogIENsb3NhYmxlU3RyaW5nU2luayBhc1N0cmluZ1NpbmsoKTsKfQoKLy8vIEEgW0Nsb3NhYmxlU3RyaW5nU2lua10gZXh0ZW5kcyB0aGUgW1N0cmluZ1NpbmtdIGludGVyZmFjZSBieSBhZGRpbmcgYQovLy8gYGNsb3NlYCBtZXRob2QuCmFic3RyYWN0IGNsYXNzIENsb3NhYmxlU3RyaW5nU2luayBleHRlbmRzIFN0cmluZ1NpbmsgewogIC8vLyBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIGNvbWJpbmluZyBhIFtTdHJpbmdTaW5rXSBbc2lua10gYW5kIGEgY2FsbGJhY2sKICAvLy8gW29uQ2xvc2VdIHdoaWNoIGlzIGludm9rZWQgd2hlbiB0aGUgcmV0dXJuZWQgaW5zdGFuY2UgaXMgY2xvc2VkLgogIGZhY3RvcnkgQ2xvc2FibGVTdHJpbmdTaW5rLmZyb21TdHJpbmdTaW5rKFN0cmluZ1Npbmsgc2luaywgdm9pZCBvbkNsb3NlKCkpID0KICAgICAgX0Nsb3NhYmxlU3RyaW5nU2luazsKCiAgLy8vIENsb3NlcyBgdGhpc2AgYW5kIGZsdXNoZXMgYW55IG91dHN0YW5kaW5nIGRhdGEuCiAgdm9pZCBjbG9zZSgpOwp9CgovLy8gVGhpcyBjbGFzcyB3cmFwcyBhbiBleGlzdGluZyBbU3RyaW5nU2lua10gYW5kIGludm9rZXMgYQovLy8gY2xvc3VyZSB3aGVuIFtjbG9zZV0gaXMgaW52b2tlZC4KY2xhc3MgX0Nsb3NhYmxlU3RyaW5nU2luayBpbXBsZW1lbnRzIENsb3NhYmxlU3RyaW5nU2luayB7CiAgZmluYWwgdm9pZCBGdW5jdGlvbigpIF9jYWxsYmFjazsKICBmaW5hbCBTdHJpbmdTaW5rIF9zaW5rOwoKICBfQ2xvc2FibGVTdHJpbmdTaW5rKHRoaXMuX3NpbmssIHRoaXMuX2NhbGxiYWNrKTsKCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9jYWxsYmFjaygpOwogIH0KCiAgdm9pZCB3cml0ZUNoYXJDb2RlKGludCBjaGFyQ29kZSkgewogICAgX3Npbmsud3JpdGVDaGFyQ29kZShjaGFyQ29kZSk7CiAgfQoKICB2b2lkIHdyaXRlKE9iamVjdCBvKSB7CiAgICBfc2luay53cml0ZShvKTsKICB9CgogIHZvaWQgd3JpdGVsbihbT2JqZWN0IG8gPSAiIl0pIHsKICAgIF9zaW5rLndyaXRlbG4obyk7CiAgfQoKICB2b2lkIHdyaXRlQWxsKEl0ZXJhYmxlIG9iamVjdHMsIFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKSB7CiAgICBfc2luay53cml0ZUFsbChvYmplY3RzLCBzZXBhcmF0b3IpOwogIH0KfQoKLy8vIFRoaXMgY2xhc3Mgd3JhcHMgYW4gZXhpc3RpbmcgW1N0cmluZ0NvbnZlcnNpb25TaW5rXSBhbmQgZXhwb3NlcyBhCi8vLyBbQ2xvc2FibGVTdHJpbmdTaW5rXSBpbnRlcmZhY2UuIFRoZSB3cmFwcGVkIHNpbmsgb25seSBuZWVkcyB0byBpbXBsZW1lbnQKLy8vIGBhZGRgIGFuZCBgY2xvc2VgLgovLyBUT0RPKGZsb2l0c2NoKTogbWFrZSB0aGlzIGNsYXNzIHB1YmxpYz8KY2xhc3MgX1N0cmluZ0NvbnZlcnNpb25TaW5rQXNTdHJpbmdTaW5rQWRhcHRlciBpbXBsZW1lbnRzIENsb3NhYmxlU3RyaW5nU2luayB7CiAgc3RhdGljIGNvbnN0IF9NSU5fU1RSSU5HX1NJWkUgPSAxNjsKCiAgU3RyaW5nQnVmZmVyIF9idWZmZXI7CiAgU3RyaW5nQ29udmVyc2lvblNpbmsgX2NodW5rZWRTaW5rOwoKICBfU3RyaW5nQ29udmVyc2lvblNpbmtBc1N0cmluZ1NpbmtBZGFwdGVyKHRoaXMuX2NodW5rZWRTaW5rKQogICAgICA6IF9idWZmZXIgPSBTdHJpbmdCdWZmZXIoKTsKCiAgdm9pZCBjbG9zZSgpIHsKICAgIGlmIChfYnVmZmVyLmlzTm90RW1wdHkpIF9mbHVzaCgpOwogICAgX2NodW5rZWRTaW5rLmNsb3NlKCk7CiAgfQoKICB2b2lkIHdyaXRlQ2hhckNvZGUoaW50IGNoYXJDb2RlKSB7CiAgICBfYnVmZmVyLndyaXRlQ2hhckNvZGUoY2hhckNvZGUpOwogICAgaWYgKF9idWZmZXIubGVuZ3RoID4gX01JTl9TVFJJTkdfU0laRSkgX2ZsdXNoKCk7CiAgfQoKICB2b2lkIHdyaXRlKE9iamVjdCBvKSB7CiAgICBpZiAoX2J1ZmZlci5pc05vdEVtcHR5KSBfZmx1c2goKTsKICAgIF9jaHVua2VkU2luay5hZGQoby50b1N0cmluZygpKTsKICB9CgogIHZvaWQgd3JpdGVsbihbT2JqZWN0IG8gPSAiIl0pIHsKICAgIF9idWZmZXIud3JpdGVsbihvKTsKICAgIGlmIChfYnVmZmVyLmxlbmd0aCA+IF9NSU5fU1RSSU5HX1NJWkUpIF9mbHVzaCgpOwogIH0KCiAgdm9pZCB3cml0ZUFsbChJdGVyYWJsZSBvYmplY3RzLCBbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgewogICAgaWYgKF9idWZmZXIuaXNOb3RFbXB0eSkgX2ZsdXNoKCk7CiAgICB2YXIgaXRlcmF0b3IgPSBvYmplY3RzLml0ZXJhdG9yOwogICAgaWYgKCFpdGVyYXRvci5tb3ZlTmV4dCgpKSByZXR1cm47CiAgICBpZiAoc2VwYXJhdG9yLmlzRW1wdHkpIHsKICAgICAgZG8gewogICAgICAgIF9jaHVua2VkU2luay5hZGQoaXRlcmF0b3IuY3VycmVudC50b1N0cmluZygpKTsKICAgICAgfSB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSk7CiAgICB9IGVsc2UgewogICAgICBfY2h1bmtlZFNpbmsuYWRkKGl0ZXJhdG9yLmN1cnJlbnQudG9TdHJpbmcoKSk7CiAgICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgICAgd3JpdGUoc2VwYXJhdG9yKTsKICAgICAgICBfY2h1bmtlZFNpbmsuYWRkKGl0ZXJhdG9yLmN1cnJlbnQudG9TdHJpbmcoKSk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgX2ZsdXNoKCkgewogICAgdmFyIGFjY3VtdWxhdGVkID0gX2J1ZmZlci50b1N0cmluZygpOwogICAgX2J1ZmZlci5jbGVhcigpOwogICAgX2NodW5rZWRTaW5rLmFkZChhY2N1bXVsYXRlZCk7CiAgfQp9CgovLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhIGJhc2UtY2xhc3MgZm9yIGNvbnZlcnRlcnMgdGhhdCBuZWVkIHRvIGFjY2VwdCBTdHJpbmcKLy8vIGlucHV0cy4KYWJzdHJhY3QgY2xhc3MgU3RyaW5nQ29udmVyc2lvblNpbmtCYXNlIGV4dGVuZHMgU3RyaW5nQ29udmVyc2lvblNpbmtNaXhpbiB7fQoKLy8vIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBtaXhpbiBmb3IgY29udmVydGVycyB0aGF0IG5lZWQgdG8gYWNjZXB0IFN0cmluZwovLy8gaW5wdXRzLgphYnN0cmFjdCBjbGFzcyBTdHJpbmdDb252ZXJzaW9uU2lua01peGluIGltcGxlbWVudHMgU3RyaW5nQ29udmVyc2lvblNpbmsgewogIHZvaWQgYWRkU2xpY2UoU3RyaW5nIHN0ciwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCk7CiAgdm9pZCBjbG9zZSgpOwoKICB2b2lkIGFkZChTdHJpbmcgc3RyKSB7CiAgICBhZGRTbGljZShzdHIsIDAsIHN0ci5sZW5ndGgsIGZhbHNlKTsKICB9CgogIEJ5dGVDb252ZXJzaW9uU2luayBhc1V0ZjhTaW5rKGJvb2wgYWxsb3dNYWxmb3JtZWQpIHsKICAgIHJldHVybiBfVXRmOENvbnZlcnNpb25TaW5rKHRoaXMsIGFsbG93TWFsZm9ybWVkKTsKICB9CgogIENsb3NhYmxlU3RyaW5nU2luayBhc1N0cmluZ1NpbmsoKSB7CiAgICByZXR1cm4gX1N0cmluZ0NvbnZlcnNpb25TaW5rQXNTdHJpbmdTaW5rQWRhcHRlcih0aGlzKTsKICB9Cn0KCi8vLyBUaGlzIGNsYXNzIGlzIGEgW1N0cmluZ0NvbnZlcnNpb25TaW5rXSB0aGF0IHdyYXBzIGEgW1N0cmluZ1NpbmtdLgpjbGFzcyBfU3RyaW5nU2lua0NvbnZlcnNpb25TaW5rPFRTdHJpbmdTaW5rIGV4dGVuZHMgU3RyaW5nU2luaz4KICAgIGV4dGVuZHMgU3RyaW5nQ29udmVyc2lvblNpbmtCYXNlIHsKICBUU3RyaW5nU2luayBfc3RyaW5nU2luazsKICBfU3RyaW5nU2lua0NvbnZlcnNpb25TaW5rKHRoaXMuX3N0cmluZ1NpbmspOwoKICB2b2lkIGNsb3NlKCkge30KICB2b2lkIGFkZFNsaWNlKFN0cmluZyBzdHIsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIGlmIChzdGFydCAhPSAwIHx8IGVuZCAhPSBzdHIubGVuZ3RoKSB7CiAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgICAgX3N0cmluZ1Npbmsud3JpdGVDaGFyQ29kZShzdHIuY29kZVVuaXRBdChpKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIF9zdHJpbmdTaW5rLndyaXRlKHN0cik7CiAgICB9CiAgICBpZiAoaXNMYXN0KSBjbG9zZSgpOwogIH0KCiAgdm9pZCBhZGQoU3RyaW5nIHN0cikgewogICAgX3N0cmluZ1Npbmsud3JpdGUoc3RyKTsKICB9CgogIEJ5dGVDb252ZXJzaW9uU2luayBhc1V0ZjhTaW5rKGJvb2wgYWxsb3dNYWxmb3JtZWQpIHsKICAgIHJldHVybiBfVXRmOFN0cmluZ1NpbmtBZGFwdGVyKHRoaXMsIF9zdHJpbmdTaW5rLCBhbGxvd01hbGZvcm1lZCk7CiAgfQoKICBDbG9zYWJsZVN0cmluZ1NpbmsgYXNTdHJpbmdTaW5rKCkgewogICAgcmV0dXJuIENsb3NhYmxlU3RyaW5nU2luay5mcm9tU3RyaW5nU2luayhfc3RyaW5nU2luaywgY2xvc2UpOwogIH0KfQoKLy8vIFRoaXMgY2xhc3MgYWNjdW11bGF0ZXMgYWxsIGNodW5rcyBpbnRvIG9uZSBzdHJpbmcKLy8vIGFuZCBpbnZva2VzIGEgY2FsbGJhY2sgd2hlbiB0aGUgc2luayBpcyBjbG9zZWQuCi8vLwovLy8gVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byB0ZXJtaW5hdGUgYSBjaHVua2VkIGNvbnZlcnNpb24uCmNsYXNzIF9TdHJpbmdDYWxsYmFja1NpbmsgZXh0ZW5kcyBfU3RyaW5nU2lua0NvbnZlcnNpb25TaW5rPFN0cmluZ0J1ZmZlcj4gewogIGZpbmFsIHZvaWQgRnVuY3Rpb24oU3RyaW5nKSBfY2FsbGJhY2s7CiAgX1N0cmluZ0NhbGxiYWNrU2luayh0aGlzLl9jYWxsYmFjaykgOiBzdXBlcihTdHJpbmdCdWZmZXIoKSk7CgogIHZvaWQgY2xvc2UoKSB7CiAgICB2YXIgYWNjdW11bGF0ZWQgPSBfc3RyaW5nU2luay50b1N0cmluZygpOwogICAgX3N0cmluZ1NpbmsuY2xlYXIoKTsKICAgIF9jYWxsYmFjayhhY2N1bXVsYXRlZCk7CiAgfQoKICBCeXRlQ29udmVyc2lvblNpbmsgYXNVdGY4U2luayhib29sIGFsbG93TWFsZm9ybWVkKSB7CiAgICByZXR1cm4gX1V0ZjhTdHJpbmdTaW5rQWRhcHRlcih0aGlzLCBfc3RyaW5nU2luaywgYWxsb3dNYWxmb3JtZWQpOwogIH0KfQoKLy8vIFRoaXMgY2xhc3MgYWRhcHRzIGEgc2ltcGxlIFtDaHVua2VkQ29udmVyc2lvblNpbmtdIHRvIGEKLy8vIFtTdHJpbmdDb252ZXJzaW9uU2lua10uCi8vLwovLy8gQWxsIGFkZGl0aW9uYWwgbWV0aG9kcyBvZiB0aGUgW1N0cmluZ0NvbnZlcnNpb25TaW5rXSAoY29tcGFyZWQgdG8gdGhlCi8vLyBDaHVua2VkQ29udmVyc2lvblNpbmspIGFyZSByZWRpcmVjdGVkIHRvIHRoZSBgYWRkYCBtZXRob2QuCmNsYXNzIF9TdHJpbmdBZGFwdGVyU2luayBleHRlbmRzIFN0cmluZ0NvbnZlcnNpb25TaW5rQmFzZSB7CiAgZmluYWwgU2luazxTdHJpbmc+IF9zaW5rOwoKICBfU3RyaW5nQWRhcHRlclNpbmsodGhpcy5fc2luayk7CgogIHZvaWQgYWRkKFN0cmluZyBzdHIpIHsKICAgIF9zaW5rLmFkZChzdHIpOwogIH0KCiAgdm9pZCBhZGRTbGljZShTdHJpbmcgc3RyLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBpZiAoc3RhcnQgPT0gMCAmJiBlbmQgPT0gc3RyLmxlbmd0aCkgewogICAgICBhZGQoc3RyKTsKICAgIH0gZWxzZSB7CiAgICAgIGFkZChzdHIuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpKTsKICAgIH0KICAgIGlmIChpc0xhc3QpIGNsb3NlKCk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX3NpbmsuY2xvc2UoKTsKICB9Cn0KCi8vLyBEZWNvZGVzIFVURi04IGNvZGUgdW5pdHMgYW5kIHN0b3JlcyB0aGVtIGluIGEgW1N0cmluZ1NpbmtdLgpjbGFzcyBfVXRmOFN0cmluZ1NpbmtBZGFwdGVyIGV4dGVuZHMgQnl0ZUNvbnZlcnNpb25TaW5rIHsKICBmaW5hbCBfVXRmOERlY29kZXIgX2RlY29kZXI7CiAgZmluYWwgU2luayBfc2luazsKCiAgX1V0ZjhTdHJpbmdTaW5rQWRhcHRlcih0aGlzLl9zaW5rLCBTdHJpbmdTaW5rIHN0cmluZ1NpbmssIGJvb2wgYWxsb3dNYWxmb3JtZWQpCiAgICAgIDogX2RlY29kZXIgPSBfVXRmOERlY29kZXIoc3RyaW5nU2luaywgYWxsb3dNYWxmb3JtZWQpOwoKICB2b2lkIGNsb3NlKCkgewogICAgX2RlY29kZXIuY2xvc2UoKTsKICAgIGlmIChfc2luayAhPSBudWxsKSBfc2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGNodW5rKSB7CiAgICBhZGRTbGljZShjaHVuaywgMCwgY2h1bmsubGVuZ3RoLCBmYWxzZSk7CiAgfQoKICB2b2lkIGFkZFNsaWNlKAogICAgICBMaXN0PGludD4gY29kZVVuaXRzLCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGlzTGFzdCkgewogICAgX2RlY29kZXIuY29udmVydChjb2RlVW5pdHMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTsKICAgIGlmIChpc0xhc3QpIGNsb3NlKCk7CiAgfQp9CgovLy8gRGVjb2RlcyBVVEYtOCBjb2RlIHVuaXRzLgovLy8KLy8vIEZvcndhcmRzIHRoZSBkZWNvZGVkIHN0cmluZ3MgdG8gdGhlIGdpdmVuIFtTdHJpbmdDb252ZXJzaW9uU2lua10uCi8vIFRPRE8oZmxvaXRzY2gpOiBtYWtlIHRoaXMgY2xhc3MgcHVibGljPwpjbGFzcyBfVXRmOENvbnZlcnNpb25TaW5rIGV4dGVuZHMgQnl0ZUNvbnZlcnNpb25TaW5rIHsKICBmaW5hbCBfVXRmOERlY29kZXIgX2RlY29kZXI7CiAgZmluYWwgU3RyaW5nQ29udmVyc2lvblNpbmsgX2NodW5rZWRTaW5rOwogIGZpbmFsIFN0cmluZ0J1ZmZlciBfYnVmZmVyOwogIF9VdGY4Q29udmVyc2lvblNpbmsoU3RyaW5nQ29udmVyc2lvblNpbmsgc2luaywgYm9vbCBhbGxvd01hbGZvcm1lZCkKICAgICAgOiB0aGlzLl8oc2luaywgU3RyaW5nQnVmZmVyKCksIGFsbG93TWFsZm9ybWVkKTsKCiAgX1V0ZjhDb252ZXJzaW9uU2luay5fKAogICAgICB0aGlzLl9jaHVua2VkU2luaywgU3RyaW5nQnVmZmVyIHN0cmluZ0J1ZmZlciwgYm9vbCBhbGxvd01hbGZvcm1lZCkKICAgICAgOiBfZGVjb2RlciA9IF9VdGY4RGVjb2RlcihzdHJpbmdCdWZmZXIsIGFsbG93TWFsZm9ybWVkKSwKICAgICAgICBfYnVmZmVyID0gc3RyaW5nQnVmZmVyOwoKICB2b2lkIGNsb3NlKCkgewogICAgX2RlY29kZXIuY2xvc2UoKTsKICAgIGlmIChfYnVmZmVyLmlzTm90RW1wdHkpIHsKICAgICAgdmFyIGFjY3VtdWxhdGVkID0gX2J1ZmZlci50b1N0cmluZygpOwogICAgICBfYnVmZmVyLmNsZWFyKCk7CiAgICAgIF9jaHVua2VkU2luay5hZGRTbGljZShhY2N1bXVsYXRlZCwgMCwgYWNjdW11bGF0ZWQubGVuZ3RoLCB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIF9jaHVua2VkU2luay5jbG9zZSgpOwogICAgfQogIH0KCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGNodW5rKSB7CiAgICBhZGRTbGljZShjaHVuaywgMCwgY2h1bmsubGVuZ3RoLCBmYWxzZSk7CiAgfQoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiBjaHVuaywgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBpc0xhc3QpIHsKICAgIF9kZWNvZGVyLmNvbnZlcnQoY2h1bmssIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTsKICAgIGlmIChfYnVmZmVyLmlzTm90RW1wdHkpIHsKICAgICAgdmFyIGFjY3VtdWxhdGVkID0gX2J1ZmZlci50b1N0cmluZygpOwogICAgICBfY2h1bmtlZFNpbmsuYWRkU2xpY2UoYWNjdW11bGF0ZWQsIDAsIGFjY3VtdWxhdGVkLmxlbmd0aCwgaXNMYXN0KTsKICAgICAgX2J1ZmZlci5jbGVhcigpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoaXNMYXN0KSBjbG9zZSgpOwogIH0KfQqBQgBOTjwBDwEWATcmBEtAHgRRPE0TTBpRG00BOAZKSxtBLQEnBksGK0ABOQZJUjYSFwEwBklSJQIBShQ3TEdPGwE2EAIBPCU6IxoBMwEREQQBJSMEARkUBAEiFgQBPSgEAgFGTRcrTyYBGCUBPiIBESYaBAElJTUEARkmJAQBIhg1BAE9JiUmHQs3JQ01JBo3CAYEARIqFSMEAgFPDE0BSgxLPhABGSkEATc2BAEmOwQCAUZAJxsvARI/Kyo2CA0eBhkEARkcBAE3RgQBJkIEAgE2NAQ+TCk/AREuGRwEATdGBAIBPBwESj88HAEiARkUBAE/KxANJgYZBAEREwQCAUA6HxQBUT0BERYmBAEeLQQBEUg3GQQCAR4ERis3HyseRjYBGUk/IAERFh4sF0cNHAYEAR4tBAFOMx4sSRcOBhkEAgEjZGFydDpjb252ZXJ0L3N0cmluZ19jb252ZXJzaW9uLmRhcnQ9b3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvY29udmVydC91dGYuZGFydMAATpcvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5jb252ZXJ0OwoKLy8vIFRoZSBVbmljb2RlIFJlcGxhY2VtZW50IGNoYXJhY3RlciBgVStGRkZEYCAo77+9KS4KY29uc3QgaW50IHVuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlclJ1bmUgPSAweEZGRkQ7CgovLy8gVGhlIFVuaWNvZGUgQnl0ZSBPcmRlciBNYXJrZXIgKEJPTSkgY2hhcmFjdGVyIGBVK0ZFRkZgLgpjb25zdCBpbnQgdW5pY29kZUJvbUNoYXJhY3RlclJ1bmUgPSAweEZFRkY7CgovLy8gQW4gaW5zdGFuY2Ugb2YgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFtVdGY4Q29kZWNdLgovLy8KLy8vIFRoaXMgaW5zdGFuY2UgcHJvdmlkZXMgYSBjb252ZW5pZW50IGFjY2VzcyB0byB0aGUgbW9zdCBjb21tb24gVVRGLTgKLy8vIHVzZSBjYXNlcy4KLy8vCi8vLyBFeGFtcGxlczoKLy8vCi8vLyAgICAgdmFyIGVuY29kZWQgPSB1dGY4LmVuY29kZSgiw47DscWjw6lyw7HDpcWjw67DtsOxw6XEvMOuxb7DpcWjw67hu53DsSIpOwovLy8gICAgIHZhciBkZWNvZGVkID0gdXRmOC5kZWNvZGUoWzB4NjIsIDB4NmMsIDB4YzMsIDB4YTUsIDB4NjIsIDB4YzMsIDB4YTYsCi8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MiwgMHg2NywgMHg3MiwgMHhjMywgMHhiOCwgMHg2NF0pOwpjb25zdCBVdGY4Q29kZWMgdXRmOCA9IFV0ZjhDb2RlYygpOwoKLy8vIEEgW1V0ZjhDb2RlY10gZW5jb2RlcyBzdHJpbmdzIHRvIHV0Zi04IGNvZGUgdW5pdHMgKGJ5dGVzKSBhbmQgZGVjb2RlcwovLy8gVVRGLTggY29kZSB1bml0cyB0byBzdHJpbmdzLgpjbGFzcyBVdGY4Q29kZWMgZXh0ZW5kcyBFbmNvZGluZyB7CiAgZmluYWwgYm9vbCBfYWxsb3dNYWxmb3JtZWQ7CgogIC8vLyBJbnN0YW50aWF0ZXMgYSBuZXcgW1V0ZjhDb2RlY10uCiAgLy8vCiAgLy8vIFRoZSBvcHRpb25hbCBbYWxsb3dNYWxmb3JtZWRdIGFyZ3VtZW50IGRlZmluZXMgaG93IFtkZWNvZGVyXSAoYW5kIFtkZWNvZGVdKQogIC8vLyBkZWFsIHdpdGggaW52YWxpZCBvciB1bnRlcm1pbmF0ZWQgY2hhcmFjdGVyIHNlcXVlbmNlcy4KICAvLy8KICAvLy8gSWYgaXQgaXMgYHRydWVgIChhbmQgbm90IG92ZXJyaWRkZW4gYXQgdGhlIG1ldGhvZCBpbnZvY2F0aW9uKSBbZGVjb2RlXSBhbmQKICAvLy8gdGhlIFtkZWNvZGVyXSByZXBsYWNlIGludmFsaWQgKG9yIHVudGVybWluYXRlZCkgb2N0ZXQKICAvLy8gc2VxdWVuY2VzIHdpdGggdGhlIFVuaWNvZGUgUmVwbGFjZW1lbnQgY2hhcmFjdGVyIGBVK0ZGRkRgICjvv70pLiBPdGhlcndpc2UKICAvLy8gdGhleSB0aHJvdyBhIFtGb3JtYXRFeGNlcHRpb25dLgogIGNvbnN0IFV0ZjhDb2RlYyh7Ym9vbCBhbGxvd01hbGZvcm1lZCA9IGZhbHNlfSkKICAgICAgOiBfYWxsb3dNYWxmb3JtZWQgPSBhbGxvd01hbGZvcm1lZDsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoaXMgY29kZWMsICJ1dGYtOCIuCiAgU3RyaW5nIGdldCBuYW1lID0+ICJ1dGYtOCI7CgogIC8vLyBEZWNvZGVzIHRoZSBVVEYtOCBbY29kZVVuaXRzXSAoYSBsaXN0IG9mIHVuc2lnbmVkIDgtYml0IGludGVnZXJzKSB0byB0aGUKICAvLy8gY29ycmVzcG9uZGluZyBzdHJpbmcuCiAgLy8vCiAgLy8vIElmIHRoZSBbY29kZVVuaXRzXSBzdGFydCB3aXRoIHRoZSBlbmNvZGluZyBvZiBhCiAgLy8vIFt1bmljb2RlQm9tQ2hhcmFjdGVyUnVuZV0sIHRoYXQgY2hhcmFjdGVyIGlzIGRpc2NhcmRlZC4KICAvLy8KICAvLy8gSWYgW2FsbG93TWFsZm9ybWVkXSBpcyBgdHJ1ZWAgdGhlIGRlY29kZXIgcmVwbGFjZXMgaW52YWxpZCAob3IKICAvLy8gdW50ZXJtaW5hdGVkKSBjaGFyYWN0ZXIgc2VxdWVuY2VzIHdpdGggdGhlIFVuaWNvZGUgUmVwbGFjZW1lbnQgY2hhcmFjdGVyCiAgLy8vIGBVK0ZGRkRgICjvv70pLiBPdGhlcndpc2UgaXQgdGhyb3dzIGEgW0Zvcm1hdEV4Y2VwdGlvbl0uCiAgLy8vCiAgLy8vIElmIFthbGxvd01hbGZvcm1lZF0gaXMgbm90IGdpdmVuLCBpdCBkZWZhdWx0cyB0byB0aGUgYGFsbG93TWFsZm9ybWVkYCB0aGF0CiAgLy8vIHdhcyB1c2VkIHRvIGluc3RhbnRpYXRlIGB0aGlzYC4KICBTdHJpbmcgZGVjb2RlKExpc3Q8aW50PiBjb2RlVW5pdHMsIHtib29sIGFsbG93TWFsZm9ybWVkfSkgewogICAgYWxsb3dNYWxmb3JtZWQgPz89IF9hbGxvd01hbGZvcm1lZDsKICAgIHJldHVybiBVdGY4RGVjb2RlcihhbGxvd01hbGZvcm1lZDogYWxsb3dNYWxmb3JtZWQpLmNvbnZlcnQoY29kZVVuaXRzKTsKICB9CgogIFV0ZjhFbmNvZGVyIGdldCBlbmNvZGVyID0+IGNvbnN0IFV0ZjhFbmNvZGVyKCk7CiAgVXRmOERlY29kZXIgZ2V0IGRlY29kZXIgewogICAgcmV0dXJuIFV0ZjhEZWNvZGVyKGFsbG93TWFsZm9ybWVkOiBfYWxsb3dNYWxmb3JtZWQpOwogIH0KfQoKLy8vIFRoaXMgY2xhc3MgY29udmVydHMgc3RyaW5ncyB0byB0aGVpciBVVEYtOCBjb2RlIHVuaXRzIChhIGxpc3Qgb2YKLy8vIHVuc2lnbmVkIDgtYml0IGludGVnZXJzKS4KY2xhc3MgVXRmOEVuY29kZXIgZXh0ZW5kcyBDb252ZXJ0ZXI8U3RyaW5nLCBMaXN0PGludD4+IHsKICBjb25zdCBVdGY4RW5jb2RlcigpOwoKICAvLy8gQ29udmVydHMgW3N0cmluZ10gdG8gaXRzIFVURi04IGNvZGUgdW5pdHMgKGEgbGlzdCBvZgogIC8vLyB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VycykuCiAgLy8vCiAgLy8vIElmIFtzdGFydF0gYW5kIFtlbmRdIGFyZSBwcm92aWRlZCwgb25seSB0aGUgc3Vic3RyaW5nCiAgLy8vIGBzdHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpYCBpcyBjb252ZXJ0ZWQuCiAgVWludDhMaXN0IGNvbnZlcnQoU3RyaW5nIHN0cmluZywgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgICB2YXIgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aDsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHN0cmluZ0xlbmd0aCk7CiAgICB2YXIgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBpZiAobGVuZ3RoID09IDApIHJldHVybiBVaW50OExpc3QoMCk7CiAgICAvLyBDcmVhdGUgYSBuZXcgZW5jb2RlciB3aXRoIGEgbGVuZ3RoIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBiaWcgZW5vdWdoLgogICAgLy8gQSBzaW5nbGUgY29kZSB1bml0IHVzZXMgYXQgbW9zdCAzIGJ5dGVzLCBhIHN1cnJvZ2F0ZSBwYWlyIGF0IG1vc3QgNC4KICAgIHZhciBlbmNvZGVyID0gX1V0ZjhFbmNvZGVyLndpdGhCdWZmZXJTaXplKGxlbmd0aCAqIDMpOwogICAgdmFyIGVuZFBvc2l0aW9uID0gZW5jb2Rlci5fZmlsbEJ1ZmZlcihzdHJpbmcsIHN0YXJ0LCBlbmQpOwogICAgYXNzZXJ0KGVuZFBvc2l0aW9uID49IGVuZCAtIDEpOwogICAgaWYgKGVuZFBvc2l0aW9uICE9IGVuZCkgewogICAgICAvLyBFbmNvZGluZyBza2lwcGVkIHRoZSBsYXN0IGNvZGUgdW5pdC4KICAgICAgLy8gVGhhdCBjYW4gb25seSBoYXBwZW4gaWYgdGhlIGxhc3QgY29kZSB1bml0IGlzIGEgbGVhZHN1cnJvZ2F0ZS4KICAgICAgLy8gRm9yY2UgZW5jb2Rpbmcgb2YgdGhlIGxlYWQgc3Vycm9nYXRlIGJ5IGl0c2VsZi4KICAgICAgdmFyIGxhc3RDb2RlVW5pdCA9IHN0cmluZy5jb2RlVW5pdEF0KGVuZCAtIDEpOwogICAgICBhc3NlcnQoX2lzTGVhZFN1cnJvZ2F0ZShsYXN0Q29kZVVuaXQpKTsKICAgICAgLy8gV2UgdXNlIGEgbm9uLXN1cnJvZ2F0ZSBhcyBgbmV4dFVuaXRgIHNvIHRoYXQgX3dyaXRlU3Vycm9nYXRlIGp1c3QKICAgICAgLy8gd3JpdGVzIHRoZSBsZWFkLXN1cnJvZ2F0ZS4KICAgICAgdmFyIHdhc0NvbWJpbmVkID0gZW5jb2Rlci5fd3JpdGVTdXJyb2dhdGUobGFzdENvZGVVbml0LCAwKTsKICAgICAgYXNzZXJ0KCF3YXNDb21iaW5lZCk7CiAgICB9CiAgICByZXR1cm4gZW5jb2Rlci5fYnVmZmVyLnN1Ymxpc3QoMCwgZW5jb2Rlci5fYnVmZmVySW5kZXgpOwogIH0KCiAgLy8vIFN0YXJ0cyBhIGNodW5rZWQgY29udmVyc2lvbi4KICAvLy8KICAvLy8gVGhlIGNvbnZlcnRlciB3b3JrcyBtb3JlIGVmZmljaWVudGx5IGlmIHRoZSBnaXZlbiBbc2lua10gaXMgYQogIC8vLyBbQnl0ZUNvbnZlcnNpb25TaW5rXS4KICBTdHJpbmdDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8TGlzdDxpbnQ+PiBzaW5rKSB7CiAgICByZXR1cm4gX1V0ZjhFbmNvZGVyU2luaygKICAgICAgICBzaW5rIGlzIEJ5dGVDb252ZXJzaW9uU2luayA/IHNpbmsgOiBCeXRlQ29udmVyc2lvblNpbmsuZnJvbShzaW5rKSk7CiAgfQoKICAvLyBPdmVycmlkZSB0aGUgYmFzZS1jbGFzc2VzIGJpbmQsIHRvIHByb3ZpZGUgYSBiZXR0ZXIgdHlwZS4KICBTdHJlYW08TGlzdDxpbnQ+PiBiaW5kKFN0cmVhbTxTdHJpbmc+IHN0cmVhbSkgPT4gc3VwZXIuYmluZChzdHJlYW0pOwp9CgovLy8gVGhpcyBjbGFzcyBlbmNvZGVzIFN0cmluZ3MgdG8gVVRGLTggY29kZSB1bml0cyAodW5zaWduZWQgOCBiaXQgaW50ZWdlcnMpLgovLyBUT0RPKGZsb2l0c2NoKTogbWFrZSB0aGlzIGNsYXNzIHB1YmxpYy4KY2xhc3MgX1V0ZjhFbmNvZGVyIHsKICBpbnQgX2NhcnJ5ID0gMDsKICBpbnQgX2J1ZmZlckluZGV4ID0gMDsKICBmaW5hbCBVaW50OExpc3QgX2J1ZmZlcjsKCiAgc3RhdGljIGNvbnN0IF9ERUZBVUxUX0JZVEVfQlVGRkVSX1NJWkUgPSAxMDI0OwoKICBfVXRmOEVuY29kZXIoKSA6IHRoaXMud2l0aEJ1ZmZlclNpemUoX0RFRkFVTFRfQllURV9CVUZGRVJfU0laRSk7CgogIF9VdGY4RW5jb2Rlci53aXRoQnVmZmVyU2l6ZShpbnQgYnVmZmVyU2l6ZSkKICAgICAgOiBfYnVmZmVyID0gX2NyZWF0ZUJ1ZmZlcihidWZmZXJTaXplKTsKCiAgLy8vIEFsbG93IGFuIGltcGxlbWVudGF0aW9uIHRvIHBpY2sgdGhlIG1vc3QgZWZmaWNpZW50IHdheSBvZiBzdG9yaW5nIGJ5dGVzLgogIHN0YXRpYyBVaW50OExpc3QgX2NyZWF0ZUJ1ZmZlcihpbnQgc2l6ZSkgPT4gVWludDhMaXN0KHNpemUpOwoKICAvLy8gVHJpZXMgdG8gY29tYmluZSB0aGUgZ2l2ZW4gW2xlYWRpbmdTdXJyb2dhdGVdIHdpdGggdGhlIFtuZXh0Q29kZVVuaXRdIGFuZAogIC8vLyB3cml0ZXMgaXQgdG8gW19idWZmZXJdLgogIC8vLwogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIFtuZXh0Q29kZVVuaXRdIHdhcyBjb21iaW5lZCB3aXRoIHRoZQogIC8vLyBbbGVhZGluZ1N1cnJvZ2F0ZV0uIElmIGl0IHdhc24ndCB0aGVuIG5leHRDb2RlVW5pdCB3YXMgbm90IGEgdHJhaWxpbmcKICAvLy8gc3Vycm9nYXRlIGFuZCBoYXMgbm90IGJlZW4gd3JpdHRlbiB5ZXQuCiAgLy8vCiAgLy8vIEl0IGlzIHNhZmUgdG8gcGFzcyAwIGZvciBbbmV4dENvZGVVbml0XSBpbiB3aGljaCBjYXNlIG9ubHkgdGhlIGxlYWRpbmcKICAvLy8gc3Vycm9nYXRlIGlzIHdyaXR0ZW4uCiAgYm9vbCBfd3JpdGVTdXJyb2dhdGUoaW50IGxlYWRpbmdTdXJyb2dhdGUsIGludCBuZXh0Q29kZVVuaXQpIHsKICAgIGlmIChfaXNUYWlsU3Vycm9nYXRlKG5leHRDb2RlVW5pdCkpIHsKICAgICAgdmFyIHJ1bmUgPSBfY29tYmluZVN1cnJvZ2F0ZVBhaXIobGVhZGluZ1N1cnJvZ2F0ZSwgbmV4dENvZGVVbml0KTsKICAgICAgLy8gSWYgdGhlIHJ1bmUgaXMgZW5jb2RlZCB3aXRoIDIgY29kZS11bml0cyB0aGVuIGl0IG11c3QgYmUgZW5jb2RlZAogICAgICAvLyB3aXRoIDQgYnl0ZXMgaW4gVVRGLTguCiAgICAgIGFzc2VydChydW5lID4gX1RIUkVFX0JZVEVfTElNSVQpOwogICAgICBhc3NlcnQocnVuZSA8PSBfRk9VUl9CWVRFX0xJTUlUKTsKICAgICAgX2J1ZmZlcltfYnVmZmVySW5kZXgrK10gPSAweEYwIHwgKHJ1bmUgPj4gMTgpOwogICAgICBfYnVmZmVyW19idWZmZXJJbmRleCsrXSA9IDB4ODAgfCAoKHJ1bmUgPj4gMTIpICYgMHgzZik7CiAgICAgIF9idWZmZXJbX2J1ZmZlckluZGV4KytdID0gMHg4MCB8ICgocnVuZSA+PiA2KSAmIDB4M2YpOwogICAgICBfYnVmZmVyW19idWZmZXJJbmRleCsrXSA9IDB4ODAgfCAocnVuZSAmIDB4M2YpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiBhbGxvdyB0byB0aHJvdyBvbiBtYWxmb3JtZWQgc3RyaW5ncy4KICAgICAgLy8gRW5jb2RlIHRoZSBoYWxmLXN1cnJvZ2F0ZSBkaXJlY3RseSBpbnRvIFVURi04LiBUaGlzIHlpZWxkcwogICAgICAvLyBpbnZhbGlkIFVURi04LCBidXQgd2Ugc3RhcnRlZCBvdXQgd2l0aCBpbnZhbGlkIFVURi0xNi4KCiAgICAgIC8vIFN1cnJvZ2F0ZXMgYXJlIGFsd2F5cyBlbmNvZGVkIGluIDMgYnl0ZXMgaW4gVVRGLTguCiAgICAgIF9idWZmZXJbX2J1ZmZlckluZGV4KytdID0gMHhFMCB8IChsZWFkaW5nU3Vycm9nYXRlID4+IDEyKTsKICAgICAgX2J1ZmZlcltfYnVmZmVySW5kZXgrK10gPSAweDgwIHwgKChsZWFkaW5nU3Vycm9nYXRlID4+IDYpICYgMHgzZik7CiAgICAgIF9idWZmZXJbX2J1ZmZlckluZGV4KytdID0gMHg4MCB8IChsZWFkaW5nU3Vycm9nYXRlICYgMHgzZik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIC8vLyBGaWxscyB0aGUgW19idWZmZXJdIHdpdGggYXMgbWFueSBjaGFyYWN0ZXJzIGFzIHBvc3NpYmxlLgogIC8vLwogIC8vLyBEb2VzIG5vdCBlbmNvZGUgYW55IHRyYWlsaW5nIGxlYWQtc3Vycm9nYXRlLiBUaGlzIG11c3QgYmUgZG9uZSBieSB0aGUKICAvLy8gY2FsbGVyLgogIC8vLwogIC8vLyBSZXR1cm5zIHRoZSBwb3NpdGlvbiBpbiB0aGUgc3RyaW5nLiBUaGUgcmV0dXJuZWQgaW5kZXggcG9pbnRzIHRvIHRoZQogIC8vLyBmaXJzdCBjb2RlIHVuaXQgdGhhdCBoYXNuJ3QgYmVlbiBlbmNvZGVkLgogIGludCBfZmlsbEJ1ZmZlcihTdHJpbmcgc3RyLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIGlmIChzdGFydCAhPSBlbmQgJiYgX2lzTGVhZFN1cnJvZ2F0ZShzdHIuY29kZVVuaXRBdChlbmQgLSAxKSkpIHsKICAgICAgLy8gRG9uJ3QgaGFuZGxlIGEgdHJhaWxpbmcgbGVhZC1zdXJyb2dhdGUgaW4gdGhpcyBsb29wLiBUaGUgY2FsbGVyIGhhcwogICAgICAvLyB0byBkZWFsIHdpdGggdGhvc2UuCiAgICAgIGVuZC0tOwogICAgfQogICAgaW50IHN0cmluZ0luZGV4OwogICAgZm9yIChzdHJpbmdJbmRleCA9IHN0YXJ0OyBzdHJpbmdJbmRleCA8IGVuZDsgc3RyaW5nSW5kZXgrKykgewogICAgICB2YXIgY29kZVVuaXQgPSBzdHIuY29kZVVuaXRBdChzdHJpbmdJbmRleCk7CiAgICAgIC8vIEFTQ0lJIGhhcyB0aGUgc2FtZSByZXByZXNlbnRhdGlvbiBpbiBVVEYtOCBhbmQgVVRGLTE2LgogICAgICBpZiAoY29kZVVuaXQgPD0gX09ORV9CWVRFX0xJTUlUKSB7CiAgICAgICAgaWYgKF9idWZmZXJJbmRleCA+PSBfYnVmZmVyLmxlbmd0aCkgYnJlYWs7CiAgICAgICAgX2J1ZmZlcltfYnVmZmVySW5kZXgrK10gPSBjb2RlVW5pdDsKICAgICAgfSBlbHNlIGlmIChfaXNMZWFkU3Vycm9nYXRlKGNvZGVVbml0KSkgewogICAgICAgIGlmIChfYnVmZmVySW5kZXggKyAzID49IF9idWZmZXIubGVuZ3RoKSBicmVhazsKICAgICAgICAvLyBOb3RlIHRoYXQgaXQgaXMgc2FmZSB0byByZWFkIHRoZSBuZXh0IGNvZGUgdW5pdC4gV2UgZGVjcmVtZW50ZWQKICAgICAgICAvLyBbZW5kXSBhYm92ZSB3aGVuIHRoZSBsYXN0IHZhbGlkIGNvZGUgdW5pdCB3YXMgYSBsZWFkaW5nIHN1cnJvZ2F0ZS4KICAgICAgICB2YXIgbmV4dENvZGVVbml0ID0gc3RyLmNvZGVVbml0QXQoc3RyaW5nSW5kZXggKyAxKTsKICAgICAgICB2YXIgd2FzQ29tYmluZWQgPSBfd3JpdGVTdXJyb2dhdGUoY29kZVVuaXQsIG5leHRDb2RlVW5pdCk7CiAgICAgICAgaWYgKHdhc0NvbWJpbmVkKSBzdHJpbmdJbmRleCsrOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBydW5lID0gY29kZVVuaXQ7CiAgICAgICAgaWYgKHJ1bmUgPD0gX1RXT19CWVRFX0xJTUlUKSB7CiAgICAgICAgICBpZiAoX2J1ZmZlckluZGV4ICsgMSA+PSBfYnVmZmVyLmxlbmd0aCkgYnJlYWs7CiAgICAgICAgICBfYnVmZmVyW19idWZmZXJJbmRleCsrXSA9IDB4QzAgfCAocnVuZSA+PiA2KTsKICAgICAgICAgIF9idWZmZXJbX2J1ZmZlckluZGV4KytdID0gMHg4MCB8IChydW5lICYgMHgzZik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFzc2VydChydW5lIDw9IF9USFJFRV9CWVRFX0xJTUlUKTsKICAgICAgICAgIGlmIChfYnVmZmVySW5kZXggKyAyID49IF9idWZmZXIubGVuZ3RoKSBicmVhazsKICAgICAgICAgIF9idWZmZXJbX2J1ZmZlckluZGV4KytdID0gMHhFMCB8IChydW5lID4+IDEyKTsKICAgICAgICAgIF9idWZmZXJbX2J1ZmZlckluZGV4KytdID0gMHg4MCB8ICgocnVuZSA+PiA2KSAmIDB4M2YpOwogICAgICAgICAgX2J1ZmZlcltfYnVmZmVySW5kZXgrK10gPSAweDgwIHwgKHJ1bmUgJiAweDNmKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzdHJpbmdJbmRleDsKICB9Cn0KCi8vLyBUaGlzIGNsYXNzIGVuY29kZXMgY2h1bmtlZCBzdHJpbmdzIHRvIFVURi04IGNvZGUgdW5pdHMgKHVuc2lnbmVkIDgtYml0Ci8vLyBpbnRlZ2VycykuCmNsYXNzIF9VdGY4RW5jb2RlclNpbmsgZXh0ZW5kcyBfVXRmOEVuY29kZXIgd2l0aCBTdHJpbmdDb252ZXJzaW9uU2lua01peGluIHsKICBmaW5hbCBCeXRlQ29udmVyc2lvblNpbmsgX3Npbms7CgogIF9VdGY4RW5jb2RlclNpbmsodGhpcy5fc2luayk7CgogIHZvaWQgY2xvc2UoKSB7CiAgICBpZiAoX2NhcnJ5ICE9IDApIHsKICAgICAgLy8gYWRkU2xpY2Ugd2lsbCBjYWxsIGNsb3NlIGFnYWluLCBidXQgdGhlbiB0aGUgY2FycnkgbXVzdCBiZSBlcXVhbCB0byAwLgogICAgICBhZGRTbGljZSgiIiwgMCwgMCwgdHJ1ZSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIF9zaW5rLmNsb3NlKCk7CiAgfQoKICB2b2lkIGFkZFNsaWNlKFN0cmluZyBzdHIsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIF9idWZmZXJJbmRleCA9IDA7CgogICAgaWYgKHN0YXJ0ID09IGVuZCAmJiAhaXNMYXN0KSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoX2NhcnJ5ICE9IDApIHsKICAgICAgdmFyIG5leHRDb2RlVW5pdCA9IDA7CiAgICAgIGlmIChzdGFydCAhPSBlbmQpIHsKICAgICAgICBuZXh0Q29kZVVuaXQgPSBzdHIuY29kZVVuaXRBdChzdGFydCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KGlzTGFzdCk7CiAgICAgIH0KICAgICAgdmFyIHdhc0NvbWJpbmVkID0gX3dyaXRlU3Vycm9nYXRlKF9jYXJyeSwgbmV4dENvZGVVbml0KTsKICAgICAgLy8gRWl0aGVyIHdlIGdvdCBhIG5vbi1lbXB0eSBzdHJpbmcsIG9yIHdlIG11c3Qgbm90IGhhdmUgYmVlbiBjb21iaW5lZC4KICAgICAgYXNzZXJ0KCF3YXNDb21iaW5lZCB8fCBzdGFydCAhPSBlbmQpOwogICAgICBpZiAod2FzQ29tYmluZWQpIHN0YXJ0Kys7CiAgICAgIF9jYXJyeSA9IDA7CiAgICB9CiAgICBkbyB7CiAgICAgIHN0YXJ0ID0gX2ZpbGxCdWZmZXIoc3RyLCBzdGFydCwgZW5kKTsKICAgICAgdmFyIGlzTGFzdFNsaWNlID0gaXNMYXN0ICYmIChzdGFydCA9PSBlbmQpOwogICAgICBpZiAoc3RhcnQgPT0gZW5kIC0gMSAmJiBfaXNMZWFkU3Vycm9nYXRlKHN0ci5jb2RlVW5pdEF0KHN0YXJ0KSkpIHsKICAgICAgICBpZiAoaXNMYXN0ICYmIF9idWZmZXJJbmRleCA8IF9idWZmZXIubGVuZ3RoIC0gMykgewogICAgICAgICAgLy8gVGhlcmUgaXMgc3RpbGwgc3BhY2UgZm9yIHRoZSBsYXN0IGluY29tcGxldGUgc3Vycm9nYXRlLgogICAgICAgICAgLy8gV2UgdXNlIGEgbm9uLXN1cnJvZ2F0ZSBhcyBzZWNvbmQgYXJndW1lbnQuIFRoaXMgd2F5IHRoZQogICAgICAgICAgLy8gZnVuY3Rpb24gd2lsbCBqdXN0IGFkZCB0aGUgc3Vycm9nYXRlLWhhbGYgdG8gdGhlIGJ1ZmZlci4KICAgICAgICAgIHZhciBoYXNCZWVuQ29tYmluZWQgPSBfd3JpdGVTdXJyb2dhdGUoc3RyLmNvZGVVbml0QXQoc3RhcnQpLCAwKTsKICAgICAgICAgIGFzc2VydCghaGFzQmVlbkNvbWJpbmVkKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gT3RoZXJ3aXNlIHN0b3JlIGl0IGluIHRoZSBjYXJyeS4gSWYgaXNMYXN0IGlzIHRydWUsIHRoZW4KICAgICAgICAgIC8vIGNsb3NlIHdpbGwgZmx1c2ggdGhlIGxhc3QgY2FycnkuCiAgICAgICAgICBfY2FycnkgPSBzdHIuY29kZVVuaXRBdChzdGFydCk7CiAgICAgICAgfQogICAgICAgIHN0YXJ0Kys7CiAgICAgIH0KICAgICAgX3NpbmsuYWRkU2xpY2UoX2J1ZmZlciwgMCwgX2J1ZmZlckluZGV4LCBpc0xhc3RTbGljZSk7CiAgICAgIF9idWZmZXJJbmRleCA9IDA7CiAgICB9IHdoaWxlIChzdGFydCA8IGVuZCk7CiAgICBpZiAoaXNMYXN0KSBjbG9zZSgpOwogIH0KCiAgLy8gVE9ETyhmbG9pdHNjaCk6IGltcGxlbWVudCBhc1V0ZjhTaW5rLiBTbGlndGhseSBjb21wbGljYXRlZCBiZWNhdXNlIGl0CiAgLy8gbmVlZHMgdG8gZGVhbCB3aXRoIG1hbGZvcm1lZCBpbnB1dC4KfQoKLy8vIFRoaXMgY2xhc3MgY29udmVydHMgVVRGLTggY29kZSB1bml0cyAobGlzdHMgb2YgdW5zaWduZWQgOC1iaXQgaW50ZWdlcnMpCi8vLyB0byBhIHN0cmluZy4KY2xhc3MgVXRmOERlY29kZXIgZXh0ZW5kcyBDb252ZXJ0ZXI8TGlzdDxpbnQ+LCBTdHJpbmc+IHsKICBmaW5hbCBib29sIF9hbGxvd01hbGZvcm1lZDsKCiAgLy8vIEluc3RhbnRpYXRlcyBhIG5ldyBbVXRmOERlY29kZXJdLgogIC8vLwogIC8vLyBUaGUgb3B0aW9uYWwgW2FsbG93TWFsZm9ybWVkXSBhcmd1bWVudCBkZWZpbmVzIGhvdyBbY29udmVydF0gZGVhbHMKICAvLy8gd2l0aCBpbnZhbGlkIG9yIHVudGVybWluYXRlZCBjaGFyYWN0ZXIgc2VxdWVuY2VzLgogIC8vLwogIC8vLyBJZiBpdCBpcyBgdHJ1ZWAgW2NvbnZlcnRdIHJlcGxhY2VzIGludmFsaWQgKG9yIHVudGVybWluYXRlZCkgY2hhcmFjdGVyCiAgLy8vIHNlcXVlbmNlcyB3aXRoIHRoZSBVbmljb2RlIFJlcGxhY2VtZW50IGNoYXJhY3RlciBgVStGRkZEYCAo77+9KS4gT3RoZXJ3aXNlCiAgLy8vIGl0IHRocm93cyBhIFtGb3JtYXRFeGNlcHRpb25dLgogIGNvbnN0IFV0ZjhEZWNvZGVyKHtib29sIGFsbG93TWFsZm9ybWVkID0gZmFsc2V9KQogICAgICA6IF9hbGxvd01hbGZvcm1lZCA9IGFsbG93TWFsZm9ybWVkOwoKICAvLy8gQ29udmVydHMgdGhlIFVURi04IFtjb2RlVW5pdHNdIChhIGxpc3Qgb2YgdW5zaWduZWQgOC1iaXQgaW50ZWdlcnMpIHRvIHRoZQogIC8vLyBjb3JyZXNwb25kaW5nIHN0cmluZy4KICAvLy8KICAvLy8gVXNlcyB0aGUgY29kZSB1bml0cyBmcm9tIFtzdGFydF0gdG8sIGJ1dCBubyBpbmNsdWRpbmcsIFtlbmRdLgogIC8vLyBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgY29kZVVuaXRzLmxlbmd0aGAuCiAgLy8vCiAgLy8vIElmIHRoZSBbY29kZVVuaXRzXSBzdGFydCB3aXRoIHRoZSBlbmNvZGluZyBvZiBhCiAgLy8vIFt1bmljb2RlQm9tQ2hhcmFjdGVyUnVuZV0sIHRoYXQgY2hhcmFjdGVyIGlzIGRpc2NhcmRlZC4KICBTdHJpbmcgY29udmVydChMaXN0PGludD4gY29kZVVuaXRzLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIC8vIEFsbG93IHRoZSBpbXBsZW1lbnRhdGlvbiB0byBpbnRlcmNlcHQgYW5kIHNwZWNpYWxpemUgYmFzZWQgb24gdGhlIHR5cGUKICAgIC8vIG9mIGNvZGVVbml0cy4KICAgIHZhciByZXN1bHQgPSBfY29udmVydEludGVyY2VwdGVkKF9hbGxvd01hbGZvcm1lZCwgY29kZVVuaXRzLCBzdGFydCwgZW5kKTsKICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgewogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIHZhciBsZW5ndGggPSBjb2RlVW5pdHMubGVuZ3RoOwogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgbGVuZ3RoKTsKCiAgICAvLyBGYXN0IGNhc2UgZm9yIEFTQ0lJIHN0cmluZ3MgYXZvaWRzIFN0cmluZ0J1ZmZlci9fVXRmOERlY29kZXIuCiAgICBpbnQgb25lQnl0ZXMgPSBfc2Nhbk9uZUJ5dGVDaGFyYWN0ZXJzKGNvZGVVbml0cywgc3RhcnQsIGVuZCk7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyOwogICAgYm9vbCBpc0ZpcnN0Q2hhcmFjdGVyID0gdHJ1ZTsKICAgIGlmIChvbmVCeXRlcyA+IDApIHsKICAgICAgdmFyIGZpcnN0UGFydCA9IFN0cmluZy5mcm9tQ2hhckNvZGVzKGNvZGVVbml0cywgc3RhcnQsIHN0YXJ0ICsgb25lQnl0ZXMpOwogICAgICBzdGFydCArPSBvbmVCeXRlczsKICAgICAgaWYgKHN0YXJ0ID09IGVuZCkgewogICAgICAgIHJldHVybiBmaXJzdFBhcnQ7CiAgICAgIH0KICAgICAgYnVmZmVyID0gU3RyaW5nQnVmZmVyKGZpcnN0UGFydCk7CiAgICAgIGlzRmlyc3RDaGFyYWN0ZXIgPSBmYWxzZTsKICAgIH0KCiAgICBidWZmZXIgPz89IFN0cmluZ0J1ZmZlcigpOwogICAgdmFyIGRlY29kZXIgPSBfVXRmOERlY29kZXIoYnVmZmVyLCBfYWxsb3dNYWxmb3JtZWQpOwogICAgZGVjb2Rlci5faXNGaXJzdENoYXJhY3RlciA9IGlzRmlyc3RDaGFyYWN0ZXI7CiAgICBkZWNvZGVyLmNvbnZlcnQoY29kZVVuaXRzLCBzdGFydCwgZW5kKTsKICAgIGRlY29kZXIuZmx1c2goY29kZVVuaXRzLCBlbmQpOwogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgLy8vIFN0YXJ0cyBhIGNodW5rZWQgY29udmVyc2lvbi4KICAvLy8KICAvLy8gVGhlIGNvbnZlcnRlciB3b3JrcyBtb3JlIGVmZmljaWVudGx5IGlmIHRoZSBnaXZlbiBbc2lua10gaXMgYQogIC8vLyBbU3RyaW5nQ29udmVyc2lvblNpbmtdLgogIEJ5dGVDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8U3RyaW5nPiBzaW5rKSB7CiAgICBTdHJpbmdDb252ZXJzaW9uU2luayBzdHJpbmdTaW5rOwogICAgaWYgKHNpbmsgaXMgU3RyaW5nQ29udmVyc2lvblNpbmspIHsKICAgICAgc3RyaW5nU2luayA9IHNpbms7CiAgICB9IGVsc2UgewogICAgICBzdHJpbmdTaW5rID0gU3RyaW5nQ29udmVyc2lvblNpbmsuZnJvbShzaW5rKTsKICAgIH0KICAgIHJldHVybiBzdHJpbmdTaW5rLmFzVXRmOFNpbmsoX2FsbG93TWFsZm9ybWVkKTsKICB9CgogIC8vIE92ZXJyaWRlIHRoZSBiYXNlLWNsYXNzZXMgYmluZCwgdG8gcHJvdmlkZSBhIGJldHRlciB0eXBlLgogIFN0cmVhbTxTdHJpbmc+IGJpbmQoU3RyZWFtPExpc3Q8aW50Pj4gc3RyZWFtKSA9PiBzdXBlci5iaW5kKHN0cmVhbSk7CgogIGV4dGVybmFsIENvbnZlcnRlcjxMaXN0PGludD4sIFQ+IGZ1c2U8VD4oQ29udmVydGVyPFN0cmluZywgVD4gbmV4dCk7CgogIGV4dGVybmFsIHN0YXRpYyBTdHJpbmcgX2NvbnZlcnRJbnRlcmNlcHRlZCgKICAgICAgYm9vbCBhbGxvd01hbGZvcm1lZCwgTGlzdDxpbnQ+IGNvZGVVbml0cywgaW50IHN0YXJ0LCBpbnQgZW5kKTsKfQoKLy8gVVRGLTggY29uc3RhbnRzLgpjb25zdCBpbnQgX09ORV9CWVRFX0xJTUlUID0gMHg3ZjsgLy8gNyBiaXRzCmNvbnN0IGludCBfVFdPX0JZVEVfTElNSVQgPSAweDdmZjsgLy8gMTEgYml0cwpjb25zdCBpbnQgX1RIUkVFX0JZVEVfTElNSVQgPSAweGZmZmY7IC8vIDE2IGJpdHMKY29uc3QgaW50IF9GT1VSX0JZVEVfTElNSVQgPSAweDEwZmZmZjsgLy8gMjEgYml0cywgdHJ1bmNhdGVkIHRvIFVuaWNvZGUgbWF4LgoKLy8gVVRGLTE2IGNvbnN0YW50cy4KY29uc3QgaW50IF9TVVJST0dBVEVfVEFHX01BU0sgPSAweEZDMDA7CmNvbnN0IGludCBfU1VSUk9HQVRFX1ZBTFVFX01BU0sgPSAweDNGRjsKY29uc3QgaW50IF9MRUFEX1NVUlJPR0FURV9NSU4gPSAweEQ4MDA7CmNvbnN0IGludCBfVEFJTF9TVVJST0dBVEVfTUlOID0gMHhEQzAwOwoKYm9vbCBfaXNMZWFkU3Vycm9nYXRlKGludCBjb2RlVW5pdCkgPT4KICAgIChjb2RlVW5pdCAmIF9TVVJST0dBVEVfVEFHX01BU0spID09IF9MRUFEX1NVUlJPR0FURV9NSU47CmJvb2wgX2lzVGFpbFN1cnJvZ2F0ZShpbnQgY29kZVVuaXQpID0+CiAgICAoY29kZVVuaXQgJiBfU1VSUk9HQVRFX1RBR19NQVNLKSA9PSBfVEFJTF9TVVJST0dBVEVfTUlOOwppbnQgX2NvbWJpbmVTdXJyb2dhdGVQYWlyKGludCBsZWFkLCBpbnQgdGFpbCkgPT4KICAgIDB4MTAwMDAgKyAoKGxlYWQgJiBfU1VSUk9HQVRFX1ZBTFVFX01BU0spIDw8IDEwKSB8CiAgICAodGFpbCAmIF9TVVJST0dBVEVfVkFMVUVfTUFTSyk7CgovLy8gRGVjb2RlcyBVVEYtOC4KLy8vCi8vLyBUaGUgZGVjb2RlciBoYW5kbGVzIGNodW5rZWQgaW5wdXQuCi8vIFRPRE8oZmxvaXRzY2gpOiBtYWtlIHRoaXMgY2xhc3MgcHVibGljLgpjbGFzcyBfVXRmOERlY29kZXIgewogIGZpbmFsIGJvb2wgX2FsbG93TWFsZm9ybWVkOwogIGZpbmFsIFN0cmluZ1NpbmsgX3N0cmluZ1Npbms7CiAgYm9vbCBfaXNGaXJzdENoYXJhY3RlciA9IHRydWU7CiAgaW50IF92YWx1ZSA9IDA7CiAgaW50IF9leHBlY3RlZFVuaXRzID0gMDsKICBpbnQgX2V4dHJhVW5pdHMgPSAwOwoKICBfVXRmOERlY29kZXIodGhpcy5fc3RyaW5nU2luaywgdGhpcy5fYWxsb3dNYWxmb3JtZWQpOwoKICBib29sIGdldCBoYXNQYXJ0aWFsSW5wdXQgPT4gX2V4cGVjdGVkVW5pdHMgPiAwOwoKICAvLyBMaW1pdHMgb2Ygb25lIHRocm91Z2ggZm91ciBieXRlIGVuY29kaW5ncy4KICBzdGF0aWMgY29uc3QgTGlzdDxpbnQ+IF9MSU1JVFMgPSA8aW50PlsKICAgIF9PTkVfQllURV9MSU1JVCwKICAgIF9UV09fQllURV9MSU1JVCwKICAgIF9USFJFRV9CWVRFX0xJTUlULAogICAgX0ZPVVJfQllURV9MSU1JVAogIF07CgogIHZvaWQgY2xvc2UoKSB7CiAgICBmbHVzaCgpOwogIH0KCiAgLy8vIEZsdXNoZXMgdGhpcyBkZWNvZGVyIGFzIGlmIGNsb3NlZC4KICAvLy8KICAvLy8gVGhpcyBtZXRob2QgdGhyb3dzIGlmIHRoZSBpbnB1dCB3YXMgcGFydGlhbCBhbmQgdGhlIGRlY29kZXIgd2FzCiAgLy8vIGNvbnN0cnVjdGVkIHdpdGggYGFsbG93TWFsZm9ybWVkYCBzZXQgdG8gYGZhbHNlYC4KICAvLy8KICAvLy8gVGhlIFtzb3VyY2VdIGFuZCBbb2Zmc2V0XSBvZiB0aGUgY3VycmVudCBwb3NpdGlvbiBtYXkgYmUgcHJvdmlkZWQsCiAgLy8vIGFuZCBhcmUgaW5jbHVkZWQgaW4gdGhlIGV4Y2VwdGlvbiBpZiBvbmUgaXMgdGhyb3duLgogIHZvaWQgZmx1c2goW0xpc3Q8aW50PiBzb3VyY2UsIGludCBvZmZzZXRdKSB7CiAgICBpZiAoaGFzUGFydGlhbElucHV0KSB7CiAgICAgIGlmICghX2FsbG93TWFsZm9ybWVkKSB7CiAgICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKAogICAgICAgICAgICAiVW5maW5pc2hlZCBVVEYtOCBvY3RldCBzZXF1ZW5jZSIsIHNvdXJjZSwgb2Zmc2V0KTsKICAgICAgfQogICAgICBfc3RyaW5nU2luay53cml0ZUNoYXJDb2RlKHVuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlclJ1bmUpOwogICAgICBfdmFsdWUgPSAwOwogICAgICBfZXhwZWN0ZWRVbml0cyA9IDA7CiAgICAgIF9leHRyYVVuaXRzID0gMDsKICAgIH0KICB9CgogIHZvaWQgY29udmVydChMaXN0PGludD4gY29kZVVuaXRzLCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4KSB7CiAgICB2YXIgdmFsdWUgPSBfdmFsdWU7CiAgICB2YXIgZXhwZWN0ZWRVbml0cyA9IF9leHBlY3RlZFVuaXRzOwogICAgdmFyIGV4dHJhVW5pdHMgPSBfZXh0cmFVbml0czsKICAgIF92YWx1ZSA9IDA7CiAgICBfZXhwZWN0ZWRVbml0cyA9IDA7CiAgICBfZXh0cmFVbml0cyA9IDA7CgogICAgdmFyIGkgPSBzdGFydEluZGV4OwogICAgbG9vcDoKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIG11bHRpYnl0ZToKICAgICAgaWYgKGV4cGVjdGVkVW5pdHMgPiAwKSB7CiAgICAgICAgZG8gewogICAgICAgICAgaWYgKGkgPT0gZW5kSW5kZXgpIHsKICAgICAgICAgICAgYnJlYWsgbG9vcDsKICAgICAgICAgIH0KICAgICAgICAgIHZhciB1bml0ID0gY29kZVVuaXRzW2ldOwogICAgICAgICAgaWYgKCh1bml0ICYgMHhDMCkgIT0gMHg4MCkgewogICAgICAgICAgICBleHBlY3RlZFVuaXRzID0gMDsKICAgICAgICAgICAgaWYgKCFfYWxsb3dNYWxmb3JtZWQpIHsKICAgICAgICAgICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICJCYWQgVVRGLTggZW5jb2RpbmcgMHgke3VuaXQudG9SYWRpeFN0cmluZygxNil9IiwKICAgICAgICAgICAgICAgICAgY29kZVVuaXRzLAogICAgICAgICAgICAgICAgICBpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfaXNGaXJzdENoYXJhY3RlciA9IGZhbHNlOwogICAgICAgICAgICBfc3RyaW5nU2luay53cml0ZUNoYXJDb2RlKHVuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlclJ1bmUpOwogICAgICAgICAgICBicmVhayBtdWx0aWJ5dGU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YWx1ZSA9ICh2YWx1ZSA8PCA2KSB8ICh1bml0ICYgMHgzZik7CiAgICAgICAgICAgIGV4cGVjdGVkVW5pdHMtLTsKICAgICAgICAgICAgaSsrOwogICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKGV4cGVjdGVkVW5pdHMgPiAwKTsKICAgICAgICBpZiAodmFsdWUgPD0gX0xJTUlUU1tleHRyYVVuaXRzIC0gMV0pIHsKICAgICAgICAgIC8vIE92ZXJseSBsb25nIGVuY29kaW5nLiBUaGUgdmFsdWUgY291bGQgYmUgZW5jb2RlZCB3aXRoIGEgc2hvcnRlcgogICAgICAgICAgLy8gZW5jb2RpbmcuCiAgICAgICAgICBpZiAoIV9hbGxvd01hbGZvcm1lZCkgewogICAgICAgICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAiT3ZlcmxvbmcgZW5jb2Rpbmcgb2YgMHgke3ZhbHVlLnRvUmFkaXhTdHJpbmcoMTYpfSIsCiAgICAgICAgICAgICAgICBjb2RlVW5pdHMsCiAgICAgICAgICAgICAgICBpIC0gZXh0cmFVbml0cyAtIDEpOwogICAgICAgICAgfQogICAgICAgICAgZXhwZWN0ZWRVbml0cyA9IGV4dHJhVW5pdHMgPSAwOwogICAgICAgICAgdmFsdWUgPSB1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXJSdW5lOwogICAgICAgIH0KICAgICAgICBpZiAodmFsdWUgPiBfRk9VUl9CWVRFX0xJTUlUKSB7CiAgICAgICAgICBpZiAoIV9hbGxvd01hbGZvcm1lZCkgewogICAgICAgICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAiQ2hhcmFjdGVyIG91dHNpZGUgdmFsaWQgVW5pY29kZSByYW5nZTogIgogICAgICAgICAgICAgICAgIjB4JHt2YWx1ZS50b1JhZGl4U3RyaW5nKDE2KX0iLAogICAgICAgICAgICAgICAgY29kZVVuaXRzLAogICAgICAgICAgICAgICAgaSAtIGV4dHJhVW5pdHMgLSAxKTsKICAgICAgICAgIH0KICAgICAgICAgIHZhbHVlID0gdW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyUnVuZTsKICAgICAgICB9CiAgICAgICAgaWYgKCFfaXNGaXJzdENoYXJhY3RlciB8fCB2YWx1ZSAhPSB1bmljb2RlQm9tQ2hhcmFjdGVyUnVuZSkgewogICAgICAgICAgX3N0cmluZ1Npbmsud3JpdGVDaGFyQ29kZSh2YWx1ZSk7CiAgICAgICAgfQogICAgICAgIF9pc0ZpcnN0Q2hhcmFjdGVyID0gZmFsc2U7CiAgICAgIH0KCiAgICAgIHdoaWxlIChpIDwgZW5kSW5kZXgpIHsKICAgICAgICB2YXIgb25lQnl0ZXMgPSBfc2Nhbk9uZUJ5dGVDaGFyYWN0ZXJzKGNvZGVVbml0cywgaSwgZW5kSW5kZXgpOwogICAgICAgIGlmIChvbmVCeXRlcyA+IDApIHsKICAgICAgICAgIF9pc0ZpcnN0Q2hhcmFjdGVyID0gZmFsc2U7CiAgICAgICAgICBhc3NlcnQoaSArIG9uZUJ5dGVzIDw9IGVuZEluZGV4KTsKICAgICAgICAgIF9zdHJpbmdTaW5rLndyaXRlKFN0cmluZy5mcm9tQ2hhckNvZGVzKGNvZGVVbml0cywgaSwgaSArIG9uZUJ5dGVzKSk7CgogICAgICAgICAgaSArPSBvbmVCeXRlczsKICAgICAgICAgIGlmIChpID09IGVuZEluZGV4KSBicmVhazsKICAgICAgICB9CiAgICAgICAgdmFyIHVuaXQgPSBjb2RlVW5pdHNbaSsrXTsKICAgICAgICAvLyBUT0RPKGZsb2l0c2NoKTogdGhlIHdheSB3ZSB0ZXN0IHdlIGNvdWxkIHBvdGVudGlhbGx5IGFsbG93CiAgICAgICAgLy8gdW5pdHMgdGhhdCBhcmUgdG9vIGxhcmdlLCBpZiB0aGV5IGhhcHBlbiB0byBoYXZlIHRoZQogICAgICAgIC8vIHJpZ2h0IGJpdC1wYXR0ZXJuLiAoU2FtZSBpcyB0cnVlIGZvciB0aGUgbXVsdGlieXRlIGxvb3AgYWJvdmUpLgogICAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiBvcHRpbWl6ZSB0aGlzIGxvb3AuIFNlZToKICAgICAgICAvLyBodHRwczovL2NvZGVyZXZpZXcuY2hyb21pdW0ub3JnLzIyOTI5MDIyL2RpZmYvMS9zZGsvbGliL2NvbnZlcnQvdXRmLmRhcnQ/Y29sdW1uX3dpZHRoPTgwCiAgICAgICAgaWYgKHVuaXQgPCAwKSB7CiAgICAgICAgICAvLyBUT0RPKGZsb2l0c2NoKTogc2hvdWxkIHRoaXMgYmUgdW5pdCA8PSAwID8KICAgICAgICAgIGlmICghX2FsbG93TWFsZm9ybWVkKSB7CiAgICAgICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICJOZWdhdGl2ZSBVVEYtOCBjb2RlIHVuaXQ6IC0weCR7KC11bml0KS50b1JhZGl4U3RyaW5nKDE2KX0iLAogICAgICAgICAgICAgICAgY29kZVVuaXRzLAogICAgICAgICAgICAgICAgaSAtIDEpOwogICAgICAgICAgfQogICAgICAgICAgX3N0cmluZ1Npbmsud3JpdGVDaGFyQ29kZSh1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXJSdW5lKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYXNzZXJ0KHVuaXQgPiBfT05FX0JZVEVfTElNSVQpOwogICAgICAgICAgaWYgKCh1bml0ICYgMHhFMCkgPT0gMHhDMCkgewogICAgICAgICAgICB2YWx1ZSA9IHVuaXQgJiAweDFGOwogICAgICAgICAgICBleHBlY3RlZFVuaXRzID0gZXh0cmFVbml0cyA9IDE7CiAgICAgICAgICAgIGNvbnRpbnVlIGxvb3A7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoKHVuaXQgJiAweEYwKSA9PSAweEUwKSB7CiAgICAgICAgICAgIHZhbHVlID0gdW5pdCAmIDB4MEY7CiAgICAgICAgICAgIGV4cGVjdGVkVW5pdHMgPSBleHRyYVVuaXRzID0gMjsKICAgICAgICAgICAgY29udGludWUgbG9vcDsKICAgICAgICAgIH0KICAgICAgICAgIC8vIDB4RjUsIDB4RjYgLi4uIDB4RkYgbmV2ZXIgYXBwZWFyIGluIHZhbGlkIFVURi04IHNlcXVlbmNlcy4KICAgICAgICAgIGlmICgodW5pdCAmIDB4RjgpID09IDB4RjAgJiYgdW5pdCA8IDB4RjUpIHsKICAgICAgICAgICAgdmFsdWUgPSB1bml0ICYgMHgwNzsKICAgICAgICAgICAgZXhwZWN0ZWRVbml0cyA9IGV4dHJhVW5pdHMgPSAzOwogICAgICAgICAgICBjb250aW51ZSBsb29wOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFfYWxsb3dNYWxmb3JtZWQpIHsKICAgICAgICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgIkJhZCBVVEYtOCBlbmNvZGluZyAweCR7dW5pdC50b1JhZGl4U3RyaW5nKDE2KX0iLAogICAgICAgICAgICAgICAgY29kZVVuaXRzLAogICAgICAgICAgICAgICAgaSAtIDEpOwogICAgICAgICAgfQogICAgICAgICAgdmFsdWUgPSB1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXJSdW5lOwogICAgICAgICAgZXhwZWN0ZWRVbml0cyA9IGV4dHJhVW5pdHMgPSAwOwogICAgICAgICAgX2lzRmlyc3RDaGFyYWN0ZXIgPSBmYWxzZTsKICAgICAgICAgIF9zdHJpbmdTaW5rLndyaXRlQ2hhckNvZGUodmFsdWUpOwogICAgICAgIH0KICAgICAgfQogICAgICBicmVhayBsb29wOwogICAgfQogICAgaWYgKGV4cGVjdGVkVW5pdHMgPiAwKSB7CiAgICAgIF92YWx1ZSA9IHZhbHVlOwogICAgICBfZXhwZWN0ZWRVbml0cyA9IGV4cGVjdGVkVW5pdHM7CiAgICAgIF9leHRyYVVuaXRzID0gZXh0cmFVbml0czsKICAgIH0KICB9Cn0KCi8vIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBpbiBbdW5pdHNdIHN0YXJ0aW5nIGF0IG9mZnNldCBbZnJvbV0gd2hpY2ggaGF2ZQovLyB0aGUgbGVmdG1vc3QgYml0IHNldCB0byAwLgovLwovLyBUbyBpbmNyZWFzZSBwZXJmb3JtYW5jZSBvZiB0aGlzIGNyaXRpY2FsIG1ldGhvZCB3ZSBoYXZlIGEgc3BlY2lhbCB2YXJpYW50IG9mCi8vIGl0IGltcGxlbWVudGVkIGluIHRoZSBWTSdzIHBhdGNoIGZpbGVzLCB3aGljaCBpcyB3aHkgd2UgbWFrZSBpdCBleHRlcm5hbC4KZXh0ZXJuYWwgaW50IF9zY2FuT25lQnl0ZUNoYXJhY3RlcnMoTGlzdDxpbnQ+IHVuaXRzLCBpbnQgZnJvbSwgaW50IGVuZEluZGV4KTsKgjAATk48AQ8BFgE0NAE8LAFCBEgPBA4EO01JJAFKISMeASYGUj0GUTxPJjEqASceAU8cBjY+BkVPPQZRJj4oSwQBMhw5BAIBRR45FwE7IAY8Mz8mQB4qT0w7PyQeLkg5NS5LJEIcBj0EASMGRBxGHUwEAT9HAgFOKxUSGBsBMQFDAS4tAU8/AVAeBj9MLgZNHEEqSEogKCg1Pj02Ew0+REABPEFJQhQGBAE/BkwOBkswNEVNHQ0GFUIyQCkzLC83S048QygPHSc5ODoRLTk5QToKCAYYBAIBSw9NIgEgAREXUCAOBhMEAT8WASMOBgEXHBouDxgIP04sIBIGCSwySTtFRUZLJBFGLioKEQg9GBsZBAFLKQIBTBE5HgEoBkk4Bk1PJTMqAVAcBkQ+BjY+Qk4VThoVBgEjOgFFQhkiGFAZGhoIKCAGAR85MiwjHgQBIwZEHkElKBkNNAYzBAE/RwFHAS5FAgEULC4xTQEVKCkoKAEnPSc9MTckARMEJysVHiAhEhoXATgBMgEwKhUVFxUFARENBAEpBkY4Bkk6LxseH0AIQhIaFwYEAUQYKCIQGBUBGAoTER8NHxgMIycfJCVEHRYOJ0gdEzIdEQwlME0XIiNFGyUMKjMKKCIjOjAbJQwzCkYsCiMIAR1HHCUsTwEZJAojRkBLNGQYOCIjTRsYDEYRKichLBsMJyEsGwxINiEsGwwiI0IbGAwzKiUsCggSBh0WJiAGBAIBTx4DUE1OARVkYXJ0OmNvbnZlcnQvdXRmLmRhcnRFb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvZGV2ZWxvcGVyL2RldmVsb3Blci5kYXJ0iXwvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vLyBJbnRlcmFjdCB3aXRoIGRldmVsb3BlciB0b29scyBzdWNoIGFzIHRoZSBkZWJ1Z2dlciBhbmQgaW5zcGVjdG9yLgovLy8KLy8vIFRoaXMgbGlicmFyeSBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQgYW5kIGhhcyBzZXBhcmF0ZSBpbXBsZW1lbnRhdGlvbnMgZm9yCi8vLyBib3RoIHdlYiBhbmQgdGhlIERhcnQgVk0uIEEgc3BlY2lmaWMgcGxhdGZvcm0gbWF5IG5vdCBzdXBwb3J0IGFsbAovLy8gb3BlcmF0aW9ucy4KLy8vCi8vLyBUbyB1c2UgdGhpcyBsaWJyYXJ5IGluIHlvdXIgY29kZToKLy8vCi8vLyAgICAgaW1wb3J0ICdkYXJ0OmRldmVsb3Blcic7Ci8vLwovLy8ge0BjYXRlZ29yeSBDb3JlfQpsaWJyYXJ5IGRhcnQuZGV2ZWxvcGVyOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwppbXBvcnQgJ2RhcnQ6aXNvbGF0ZScgc2hvdyBJc29sYXRlLCBSYXdSZWNlaXZlUG9ydCwgU2VuZFBvcnQ7CgpwYXJ0ICdleHRlbnNpb24uZGFydCc7CnBhcnQgJ3Byb2ZpbGVyLmRhcnQnOwpwYXJ0ICdzZXJ2aWNlLmRhcnQnOwpwYXJ0ICd0aW1lbGluZS5kYXJ0JzsKCi8vLyBJZiBbd2hlbl0gaXMgdHJ1ZSwgc3RvcCB0aGUgcHJvZ3JhbSBhcyBpZiBhIGJyZWFrcG9pbnQgd2VyZSBoaXQgYXQgdGhlCi8vLyBmb2xsb3dpbmcgc3RhdGVtZW50LgovLy8KLy8vIFJldHVybnMgdGhlIHZhbHVlIG9mIFt3aGVuXS4gU29tZSBkZWJ1Z2dlcnMgbWF5IGRpc3BsYXkgW21lc3NhZ2VdLgovLy8KLy8vIE5PVEU6IFdoZW4gaW52b2tlZCwgdGhlIGlzb2xhdGUgd2lsbCBub3QgcmV0dXJuIHVudGlsIGEgZGVidWdnZXIKLy8vIGNvbnRpbnVlcyBleGVjdXRpb24uIFdoZW4gcnVubmluZyBpbiB0aGUgRGFydCBWTSwgdGhlIGJlaGF2aW91ciBpcyB0aGUgc2FtZQovLy8gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCBhIGRlYnVnZ2VyIGlzIGNvbm5lY3RlZC4gV2hlbiBjb21waWxlZCB0bwovLy8gSmF2YVNjcmlwdCwgdGhpcyB1c2VzIHRoZSAiZGVidWdnZXIiIHN0YXRlbWVudCwgYW5kIGJlaGF2ZXMgZXhhY3RseSBhcwovLy8gdGhhdCBkb2VzLgpleHRlcm5hbCBib29sIGRlYnVnZ2VyKHtib29sIHdoZW46IHRydWUsIFN0cmluZyBtZXNzYWdlfSk7CgovLy8gU2VuZCBhIHJlZmVyZW5jZSB0byBbb2JqZWN0XSB0byBhbnkgYXR0YWNoZWQgZGVidWdnZXJzLgovLy8KLy8vIERlYnVnZ2VycyBtYXkgb3BlbiBhbiBpbnNwZWN0b3Igb24gdGhlIG9iamVjdC4gUmV0dXJucyB0aGUgYXJndW1lbnQuCmV4dGVybmFsIE9iamVjdCBpbnNwZWN0KE9iamVjdCBvYmplY3QpOwoKLy8vIEVtaXQgYSBsb2cgZXZlbnQuCi8vLwovLy8gVGhpcyBmdW5jdGlvbiB3YXMgZGVzaWduZWQgdG8gbWFwIGNsb3NlbHkgdG8gdGhlIGxvZ2dpbmcgaW5mb3JtYXRpb24KLy8vIGNvbGxlY3RlZCBieSBgcGFja2FnZTpsb2dnaW5nYC4KLy8vCi8vLyAtIFttZXNzYWdlXSBpcyB0aGUgbG9nIG1lc3NhZ2UKLy8vIC0gW3RpbWVdIChvcHRpb25hbCkgaXMgdGhlIHRpbWVzdGFtcAovLy8gLSBbc2VxdWVuY2VOdW1iZXJdIChvcHRpb25hbCkgaXMgYSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgc2VxdWVuY2UgbnVtYmVyCi8vLyAtIFtsZXZlbF0gKG9wdGlvbmFsKSBpcyB0aGUgc2V2ZXJpdHkgbGV2ZWwgKGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyMDAwKTsgc2VlCi8vLyAgIHRoZSBgcGFja2FnZTpsb2dnaW5nYCBgTGV2ZWxgIGNsYXNzIGZvciBhbiBvdmVydmlldyBvZiB0aGUgcG9zc2libGUgdmFsdWVzCi8vLyAtIFtuYW1lXSAob3B0aW9uYWwpIGlzIHRoZSBuYW1lIG9mIHRoZSBzb3VyY2Ugb2YgdGhlIGxvZyBtZXNzYWdlCi8vLyAtIFt6b25lXSAob3B0aW9uYWwpIHRoZSB6b25lIHdoZXJlIHRoZSBsb2cgd2FzIGVtaXR0ZWQKLy8vIC0gW2Vycm9yXSAob3B0aW9uYWwpIGFuIGVycm9yIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBsb2cgZXZlbnQKLy8vIC0gW3N0YWNrVHJhY2VdIChvcHRpb25hbCkgYSBzdGFjayB0cmFjZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBsb2cgZXZlbnQKZXh0ZXJuYWwgdm9pZCBsb2coCiAgU3RyaW5nIG1lc3NhZ2UsIHsKICBEYXRlVGltZSB0aW1lLAogIGludCBzZXF1ZW5jZU51bWJlciwKICBpbnQgbGV2ZWw6IDAsCiAgU3RyaW5nIG5hbWU6ICcnLAogIFpvbmUgem9uZSwKICBPYmplY3QgZXJyb3IsCiAgU3RhY2tUcmFjZSBzdGFja1RyYWNlLAp9KTsKRwBOTjwBDwFGBExGEAQmBCEEFRgBFRc+ARcWFRYBSxkERwRFUEtLDzsBPARJKAEWBEkkBCMpUFFRRTtISxMUERYQEw0QGQQBDmRhcnQ6ZGV2ZWxvcGVyRW9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2RldmVsb3Blci9leHRlbnNpb24uZGFydJe5Ly8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuZGV2ZWxvcGVyOwoKLy8vIEEgcmVzcG9uc2UgdG8gYSBzZXJ2aWNlIHByb3RvY29sIGV4dGVuc2lvbiBSUEMuCi8vLwovLy8gSWYgdGhlIFJQQyB3YXMgc3VjY2Vzc2Z1bCwgdXNlIFtTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UucmVzdWx0XSwgb3RoZXJ3aXNlCi8vLyB1c2UgW1NlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5lcnJvcl0uCmNsYXNzIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZSB7CiAgLy8vIFRoZSByZXN1bHQgb2YgYSBzdWNjZXNzZnVsIHNlcnZpY2UgcHJvdG9jb2wgZXh0ZW5zaW9uIFJQQy4KICBmaW5hbCBTdHJpbmcgcmVzdWx0OwoKICAvLy8gVGhlIGVycm9yIGNvZGUgYXNzb2NpYXRlZCB3aXRoIGEgZmFpbGVkIHNlcnZpY2UgcHJvdG9jb2wgZXh0ZW5zaW9uIFJQQy4KICBmaW5hbCBpbnQgZXJyb3JDb2RlOwoKICAvLy8gVGhlIGRldGFpbHMgb2YgYSBmYWlsZWQgc2VydmljZSBwcm90b2NvbCBleHRlbnNpb24gUlBDLgogIGZpbmFsIFN0cmluZyBlcnJvckRldGFpbDsKCiAgLy8vIENyZWF0ZXMgYSBzdWNjZXNzZnVsIHJlc3BvbnNlIHRvIGEgc2VydmljZSBwcm90b2NvbCBleHRlbnNpb24gUlBDLgogIC8vLwogIC8vLyBSZXF1aXJlcyBbcmVzdWx0XSB0byBiZSBhIEpTT04gb2JqZWN0IGVuY29kZWQgYXMgYSBzdHJpbmcuIFdoZW4gZm9ybWluZwogIC8vLyB0aGUgSlNPTi1SUEMgbWVzc2FnZSBbcmVzdWx0XSB3aWxsIGJlIGlubGluZWQgZGlyZWN0bHkuCiAgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLnJlc3VsdChTdHJpbmcgcmVzdWx0KQogICAgICA6IHJlc3VsdCA9IHJlc3VsdCwKICAgICAgICBlcnJvckNvZGUgPSBudWxsLAogICAgICAgIGVycm9yRGV0YWlsID0gbnVsbCB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChyZXN1bHQsICJyZXN1bHQiKTsKICB9CgogIC8vLyBDcmVhdGVzIGFuIGVycm9yIHJlc3BvbnNlIHRvIGEgc2VydmljZSBwcm90b2NvbCBleHRlbnNpb24gUlBDLgogIC8vLwogIC8vLyBSZXF1aXJlcyBbZXJyb3JDb2RlXSB0byBiZSBbaW52YWxpZFBhcmFtc10gb3IgYmV0d2VlbiBbZXh0ZW5zaW9uRXJyb3JNaW5dCiAgLy8vIGFuZCBbZXh0ZW5zaW9uRXJyb3JNYXhdLiBSZXF1aXJlcyBbZXJyb3JEZXRhaWxdIHRvIGJlIGEgSlNPTiBvYmplY3QKICAvLy8gZW5jb2RlZCBhcyBhIHN0cmluZy4gV2hlbiBmb3JtaW5nIHRoZSBKU09OLVJQQyBtZXNzYWdlIFtlcnJvckRldGFpbF0gd2lsbAogIC8vLyBiZSBpbmxpbmVkIGRpcmVjdGx5LgogIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5lcnJvcihpbnQgZXJyb3JDb2RlLCBTdHJpbmcgZXJyb3JEZXRhaWwpCiAgICAgIDogcmVzdWx0ID0gbnVsbCwKICAgICAgICBlcnJvckNvZGUgPSBlcnJvckNvZGUsCiAgICAgICAgZXJyb3JEZXRhaWwgPSBlcnJvckRldGFpbCB7CiAgICBfdmFsaWRhdGVFcnJvckNvZGUoZXJyb3JDb2RlKTsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGVycm9yRGV0YWlsLCAiZXJyb3JEZXRhaWwiKTsKICB9CgogIC8vLyBJbnZhbGlkIG1ldGhvZCBwYXJhbWV0ZXIocykgZXJyb3IgY29kZS4KICBAZGVwcmVjYXRlZAogIHN0YXRpYyBjb25zdCBrSW52YWxpZFBhcmFtcyA9IGludmFsaWRQYXJhbXM7CgogIC8vLyBHZW5lcmljIGV4dGVuc2lvbiBlcnJvciBjb2RlLgogIEBkZXByZWNhdGVkCiAgc3RhdGljIGNvbnN0IGtFeHRlbnNpb25FcnJvciA9IGV4dGVuc2lvbkVycm9yOwoKICAvLy8gTWF4aW11bSBleHRlbnNpb24gcHJvdmlkZWQgZXJyb3IgY29kZS4KICBAZGVwcmVjYXRlZAogIHN0YXRpYyBjb25zdCBrRXh0ZW5zaW9uRXJyb3JNYXggPSBleHRlbnNpb25FcnJvck1heDsKCiAgLy8vIE1pbmltdW0gZXh0ZW5zaW9uIHByb3ZpZGVkIGVycm9yIGNvZGUuCiAgQGRlcHJlY2F0ZWQKICBzdGF0aWMgY29uc3Qga0V4dGVuc2lvbkVycm9yTWluID0gZXh0ZW5zaW9uRXJyb3JNaW47CgogIC8vLyBJbnZhbGlkIG1ldGhvZCBwYXJhbWV0ZXIocykgZXJyb3IgY29kZS4KICBzdGF0aWMgY29uc3QgaW52YWxpZFBhcmFtcyA9IC0zMjYwMjsKCiAgLy8vIEdlbmVyaWMgZXh0ZW5zaW9uIGVycm9yIGNvZGUuCiAgc3RhdGljIGNvbnN0IGV4dGVuc2lvbkVycm9yID0gLTMyMDAwOwoKICAvLy8gTWF4aW11bSBleHRlbnNpb24gcHJvdmlkZWQgZXJyb3IgY29kZS4KICBzdGF0aWMgY29uc3QgZXh0ZW5zaW9uRXJyb3JNYXggPSAtMzIwMDA7CgogIC8vLyBNaW5pbXVtIGV4dGVuc2lvbiBwcm92aWRlZCBlcnJvciBjb2RlLgogIHN0YXRpYyBjb25zdCBleHRlbnNpb25FcnJvck1pbiA9IC0zMjAxNjsKCiAgc3RhdGljIFN0cmluZyBfZXJyb3JDb2RlTWVzc2FnZShpbnQgZXJyb3JDb2RlKSB7CiAgICBfdmFsaWRhdGVFcnJvckNvZGUoZXJyb3JDb2RlKTsKICAgIGlmIChlcnJvckNvZGUgPT0gaW52YWxpZFBhcmFtcykgewogICAgICByZXR1cm4gIkludmFsaWQgcGFyYW1zIjsKICAgIH0KICAgIHJldHVybiAiU2VydmVyIGVycm9yIjsKICB9CgogIHN0YXRpYyBfdmFsaWRhdGVFcnJvckNvZGUoaW50IGVycm9yQ29kZSkgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoZXJyb3JDb2RlLCAiZXJyb3JDb2RlIik7CiAgICBpZiAoZXJyb3JDb2RlID09IGludmFsaWRQYXJhbXMpIHJldHVybjsKICAgIGlmICgoZXJyb3JDb2RlID49IGV4dGVuc2lvbkVycm9yTWluKSAmJiAoZXJyb3JDb2RlIDw9IGV4dGVuc2lvbkVycm9yTWF4KSkgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZShlcnJvckNvZGUsICJlcnJvckNvZGUiLCAiT3V0IG9mIHJhbmdlIik7CiAgfQoKICAvLy8gRGV0ZXJtaW5lcyBpZiB0aGlzIHJlc3BvbnNlIHJlcHJlc2VudHMgYW4gZXJyb3IuCiAgYm9vbCBpc0Vycm9yKCkgPT4gKGVycm9yQ29kZSAhPSBudWxsKSAmJiAoZXJyb3JEZXRhaWwgIT0gbnVsbCk7CgogIC8vIGlnbm9yZTogdW51c2VkX2VsZW1lbnQsIGNhbGxlZCBmcm9tIHJ1bnRpbWUvbGliL2RldmVsb3Blci5kYXJ0CiAgU3RyaW5nIF90b1N0cmluZygpIHsKICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgewogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGVycm9yQ29kZSAhPSBudWxsKTsKICAgICAgYXNzZXJ0KGVycm9yRGV0YWlsICE9IG51bGwpOwogICAgICByZXR1cm4ganNvbi5lbmNvZGUoewogICAgICAgICdjb2RlJzogZXJyb3JDb2RlLAogICAgICAgICdtZXNzYWdlJzogX2Vycm9yQ29kZU1lc3NhZ2UoZXJyb3JDb2RlKSwKICAgICAgICAnZGF0YSc6IHsnZGV0YWlscyc6IGVycm9yRGV0YWlsfQogICAgICB9KTsKICAgIH0KICB9Cn0KCi8vLyBBIHNlcnZpY2UgcHJvdG9jb2wgZXh0ZW5zaW9uIGhhbmRsZXIuIFJlZ2lzdGVyZWQgd2l0aCBbcmVnaXN0ZXJFeHRlbnNpb25dLgovLy8KLy8vIE11c3QgY29tcGxldGUgdG8gYSBbU2VydmljZUV4dGVuc2lvblJlc3BvbnNlXS4gW21ldGhvZF0gaXMgdGhlIG1ldGhvZCBuYW1lCi8vLyBvZiB0aGUgc2VydmljZSBwcm90b2NvbCByZXF1ZXN0LCBhbmQgW3BhcmFtZXRlcnNdIGlzIGEgbWFwIGhvbGRpbmcgdGhlCi8vLyBwYXJhbWV0ZXJzIHRvIHRoZSBzZXJ2aWNlIHByb3RvY29sIHJlcXVlc3QuCi8vLwovLy8gKk5PVEUqOiBhbGwgcGFyYW1ldGVyIG5hbWVzIGFuZCB2YWx1ZXMgYXJlIGVuY29kZWQgYXMgc3RyaW5ncy4KdHlwZWRlZiBGdXR1cmU8U2VydmljZUV4dGVuc2lvblJlc3BvbnNlPiBTZXJ2aWNlRXh0ZW5zaW9uSGFuZGxlcigKICAgIFN0cmluZyBtZXRob2QsIE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1ldGVycyk7CgovLy8gUmVnaXN0ZXIgYSBbU2VydmljZUV4dGVuc2lvbkhhbmRsZXJdIHRoYXQgd2lsbCBiZSBpbnZva2VkIGluIHRoaXMgaXNvbGF0ZQovLy8gZm9yIFttZXRob2RdLiAqTk9URSo6IFNlcnZpY2UgcHJvdG9jb2wgZXh0ZW5zaW9ucyBtdXN0IGJlIHJlZ2lzdGVyZWQKLy8vIGluIGVhY2ggaXNvbGF0ZS4KLy8vCi8vLyAqTk9URSo6IFttZXRob2RdIG11c3QgYmVnaW4gd2l0aCAnZXh0LicgYW5kIHlvdSBzaG91bGQgdXNlIHRoZSBmb2xsb3dpbmcKLy8vIHN0cnVjdHVyZSB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBvdGhlciBwYWNrYWdlczogJ2V4dC5wYWNrYWdlLmNvbW1hbmQnLgovLy8gVGhhdCBpcywgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSAnZXh0LicgcHJlZml4LCBzaG91bGQgYmUgdGhlIHJlZ2lzdGVyaW5nCi8vLyBwYWNrYWdlIG5hbWUgZm9sbG93ZWQgYnkgYW5vdGhlciBwZXJpb2QgKCcuJykgYW5kIHRoZW4gdGhlIGNvbW1hbmQgbmFtZS4KLy8vIEZvciBleGFtcGxlOiAnZXh0LmRhcnQuaW8uZ2V0T3BlbkZpbGVzJy4KLy8vCi8vLyBCZWNhdXNlIHNlcnZpY2UgZXh0ZW5zaW9ucyBhcmUgaXNvbGF0ZSBzcGVjaWZpYywgY2xpZW50cyB1c2luZyBleHRlbnNpb25zCi8vLyBtdXN0IGFsd2F5cyBpbmNsdWRlIGFuICdpc29sYXRlSWQnIHBhcmFtZXRlciB3aXRoIGVhY2ggUlBDLgp2b2lkIHJlZ2lzdGVyRXh0ZW5zaW9uKFN0cmluZyBtZXRob2QsIFNlcnZpY2VFeHRlbnNpb25IYW5kbGVyIGhhbmRsZXIpIHsKICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChtZXRob2QsICdtZXRob2QnKTsKICBpZiAoIW1ldGhvZC5zdGFydHNXaXRoKCdleHQuJykpIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKG1ldGhvZCwgJ21ldGhvZCcsICdNdXN0IGJlZ2luIHdpdGggZXh0LicpOwogIH0KICBpZiAoX2xvb2t1cEV4dGVuc2lvbihtZXRob2QpICE9IG51bGwpIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdFeHRlbnNpb24gYWxyZWFkeSByZWdpc3RlcmVkOiAkbWV0aG9kJyk7CiAgfQogIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGhhbmRsZXIsICdoYW5kbGVyJyk7CiAgX3JlZ2lzdGVyRXh0ZW5zaW9uKG1ldGhvZCwgaGFuZGxlcik7Cn0KCi8vLyBQb3N0IGFuIGV2ZW50IG9mIFtldmVudEtpbmRdIHdpdGggcGF5bG9hZCBvZiBbZXZlbnREYXRhXSB0byB0aGUgYEV4dGVuc2lvbmAKLy8vIGV2ZW50IHN0cmVhbS4Kdm9pZCBwb3N0RXZlbnQoU3RyaW5nIGV2ZW50S2luZCwgTWFwIGV2ZW50RGF0YSkgewogIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGV2ZW50S2luZCwgJ2V2ZW50S2luZCcpOwogIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGV2ZW50RGF0YSwgJ2V2ZW50RGF0YScpOwogIFN0cmluZyBldmVudERhdGFBc1N0cmluZyA9IGpzb24uZW5jb2RlKGV2ZW50RGF0YSk7CiAgX3Bvc3RFdmVudChldmVudEtpbmQsIGV2ZW50RGF0YUFzU3RyaW5nKTsKfQoKZXh0ZXJuYWwgdm9pZCBfcG9zdEV2ZW50KFN0cmluZyBldmVudEtpbmQsIFN0cmluZyBldmVudERhdGEpOwoKLy8gQm90aCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHdyaXR0ZW4gaW5zaWRlIEMrKyB0byBhdm9pZCB1cGRhdGluZyB0aGUgZGF0YQovLyBzdHJ1Y3R1cmVzIGluIERhcnQsIGdldHRpbmcgYW4gT09CLCBhbmQgb2JzZXJ2aW5nIHN0YWxlIHN0YXRlLiBEbyBub3QgbW92ZQovLyB0aGVzZSBpbnRvIERhcnQgY29kZSB1bmxlc3MgeW91IGNhbiBlbnN1cmUgdGhhdCB0aGUgb3BlcmF0aW9ucyB3aWxsIGNhbiBiZQovLyBkb25lIGF0b21pY2FsbHkuIE5hdGl2ZSBjb2RlIGxpdmVzIGluIHZtL2lzb2xhdGUuY2MtCi8vIExvb2t1cFNlcnZpY2VFeHRlbnNpb25IYW5kbGVyIGFuZCBSZWdpc3RlclNlcnZpY2VFeHRlbnNpb25IYW5kbGVyLgpleHRlcm5hbCBTZXJ2aWNlRXh0ZW5zaW9uSGFuZGxlciBfbG9va3VwRXh0ZW5zaW9uKFN0cmluZyBtZXRob2QpOwpleHRlcm5hbCBfcmVnaXN0ZXJFeHRlbnNpb24oU3RyaW5nIG1ldGhvZCwgU2VydmljZUV4dGVuc2lvbkhhbmRsZXIgaGFuZGxlcik7CoClAE5OPAEPARgBNARQKiFBFwFOFwE+HAFJBk4+MRkaHTIEAUUGUEpQG0QXHyQjPAQBLg4vASQOMQEtDjcBLQ43AS4nASQoAS0rAS0rATMjJh8GGwQBLTgsUA4GSwQBN0IBRBcaFQ0hIxsbMSkKBgQCAU8ET0swBENCNAFOSRUETU1QTS0ETkBJMCRNBCpGBDInAgFQEjI2NjUsAgE+AU1OTjhGQk0BHWRhcnQ6ZGV2ZWxvcGVyL2V4dGVuc2lvbi5kYXJ0RG9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2RldmVsb3Blci90aW1lbGluZS5kYXJ0q0UvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5kZXZlbG9wZXI7Cgpjb25zdCBib29sIF9oYXNUaW1lbGluZSA9CiAgICBjb25zdCBib29sLmZyb21FbnZpcm9ubWVudCgiZGFydC5kZXZlbG9wZXIudGltZWxpbmUiLCBkZWZhdWx0VmFsdWU6IHRydWUpOwoKLy8vIEEgdHlwZWRlZiBmb3IgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50IHRvIFtUaW1lbGluZS50aW1lU3luY10uCnR5cGVkZWYgVGltZWxpbmVTeW5jRnVuY3Rpb248VD4gPSBUIEZ1bmN0aW9uKCk7CgovLyBUT0RPOiBUaGlzIHR5cGVkZWYgaXMgbm90IHVzZWQuCnR5cGVkZWYgRnV0dXJlIFRpbWVsaW5lQXN5bmNGdW5jdGlvbigpOwoKLy8vIEEgY2xhc3MgdG8gcmVwcmVzZW50IEZsb3cgZXZlbnRzLgovLy8KLy8vIFtGbG93XSBvYmplY3RzIGFyZSB1c2VkIHRvIHRocmVhZCBmbG93IGV2ZW50cyBiZXR3ZWVuIHRpbWVsaW5lIHNsaWNlcywKLy8vIGZvciBleGFtcGxlLCB0aG9zZSBjcmVhdGVkIHdpdGggdGhlIFtUaW1lbGluZV0gY2xhc3MgYmVsb3cuIEFkZGluZwovLy8gW0Zsb3ddIG9iamVjdHMgY2F1c2UgYXJyb3dzIHRvIGJlIGRyYXduIGJldHdlZW4gc2xpY2VzIGluIENocm9tZSdzIHRyYWNlCi8vLyB2aWV3ZXIuIFRoZSBhcnJvd3Mgc3RhcnQgYXQgZS5nIFtUaW1lbGluZV0gZXZlbnRzIHRoYXQgYXJlIHBhc3NlZCBhCi8vLyBbRmxvdy5iZWdpbl0gb2JqZWN0LCBnbyB0aHJvdWdoIFtUaW1lbGluZV0gZXZlbnRzIHRoYXQgYXJlIHBhc3NlZCBhCi8vLyBbRmxvdy5zdGVwXSBvYmplY3QsIGFuZCBlbmQgYXQgW1RpbWVsaW5lXSBldmVudHMgdGhhdCBhcmUgcGFzc2VkIGEKLy8vIFtGbG93LmVuZF0gb2JqZWN0LCBhbGwgaGF2aW5nIHRoZSBzYW1lIFtGbG93LmlkXS4gRm9yIGV4YW1wbGU6Ci8vLwovLy8gYGBgZGFydAovLy8gdmFyIGZsb3cgPSBGbG93LmJlZ2luKCk7Ci8vLyBUaW1lbGluZS50aW1lU3luYygnZmxvd190ZXN0JywgKCkgewovLy8gICBkb1NvbWV0aGluZygpOwovLy8gfSwgZmxvdzogZmxvdyk7Ci8vLwovLy8gVGltZWxpbmUudGltZVN5bmMoJ2Zsb3dfdGVzdCcsICgpIHsKLy8vICAgZG9Tb21ldGhpbmcoKTsKLy8vIH0sIGZsb3c6IEZsb3cuc3RlcChmbG93LmlkKSk7Ci8vLwovLy8gVGltZWxpbmUudGltZVN5bmMoJ2Zsb3dfdGVzdCcsICgpIHsKLy8vICAgZG9Tb21ldGhpbmcoKTsKLy8vIH0sIGZsb3c6IEZsb3cuZW5kKGZsb3cuaWQpKTsKLy8vIGBgYApjbGFzcyBGbG93IHsKICAvLyBUaGVzZSB2YWx1ZXMgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgZW51bSAiRXZlbnRUeXBlIiBpbgogIC8vIHJ1bnRpbWUvdm0vdGltZWxpbmUuaC4KICBzdGF0aWMgY29uc3QgaW50IF9iZWdpbiA9IDk7CiAgc3RhdGljIGNvbnN0IGludCBfc3RlcCA9IDEwOwogIHN0YXRpYyBjb25zdCBpbnQgX2VuZCA9IDExOwoKICBmaW5hbCBpbnQgX3R5cGU7CgogIC8vLyBUaGUgZmxvdyBpZCBvZiB0aGUgZmxvdyBldmVudC4KICBmaW5hbCBpbnQgaWQ7CgogIEZsb3cuXyh0aGlzLl90eXBlLCB0aGlzLmlkKTsKCiAgLy8vIEEgImJlZ2luIiBGbG93IGV2ZW50LgogIC8vLwogIC8vLyBXaGVuIHBhc3NlZCB0byBhIFtUaW1lbGluZV0gbWV0aG9kLCBnZW5lcmF0ZXMgYSAiYmVnaW4iIEZsb3cgZXZlbnQuCiAgLy8vIElmIFtpZF0gaXMgbm90IHByb3ZpZGVkLCBhbiBpZCB0aGF0IGNvbmZsaWN0cyB3aXRoIG5vIG90aGVyIERhcnQtZ2VuZXJhdGVkCiAgLy8vIGZsb3cgaWQncyB3aWxsIGJlIGdlbmVyYXRlZC4KICBzdGF0aWMgRmxvdyBiZWdpbih7aW50IGlkfSkgewogICAgcmV0dXJuIG5ldyBGbG93Ll8oX2JlZ2luLCBpZCA/PyBfZ2V0TmV4dEFzeW5jSWQoKSk7CiAgfQoKICAvLy8gQSAic3RlcCIgRmxvdyBldmVudC4KICAvLy8KICAvLy8gV2hlbiBwYXNzZWQgdG8gYSBbVGltZWxpbmVdIG1ldGhvZCwgZ2VuZXJhdGVzIGEgInN0ZXAiIEZsb3cgZXZlbnQuCiAgLy8vIFRoZSBbaWRdIGFyZ3VtZW50IGlzIHJlcXVpcmVkLiBJdCBjYW4gY29tZSBlaXRoZXIgZnJvbSBhbm90aGVyIFtGbG93XQogIC8vLyBldmVudCwgb3Igc29tZSBpZCB0aGF0IGNvbWVzIGZyb20gdGhlIGVudmlyb25tZW50LgogIHN0YXRpYyBGbG93IHN0ZXAoaW50IGlkKSA9PiBuZXcgRmxvdy5fKF9zdGVwLCBpZCk7CgogIC8vLyBBbiAiZW5kIiBGbG93IGV2ZW50LgogIC8vLwogIC8vLyBXaGVuIHBhc3NlZCB0byBhIFtUaW1lbGluZV0gbWV0aG9kLCBnZW5lcmF0ZXMgYSAiZW5kIiBGbG93IGV2ZW50LgogIC8vLyBUaGUgW2lkXSBhcmd1bWVudCBpcyByZXF1aXJlZC4gSXQgY2FuIGNvbWUgZWl0aGVyIGZyb20gYW5vdGhlciBbRmxvd10KICAvLy8gZXZlbnQsIG9yIHNvbWUgaWQgdGhhdCBjb21lcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4KICBzdGF0aWMgRmxvdyBlbmQoaW50IGlkKSA9PiBuZXcgRmxvdy5fKF9lbmQsIGlkKTsKfQoKLy8vIEFkZCB0byB0aGUgdGltZWxpbmUuCi8vLwovLy8gW1RpbWVsaW5lXSdzIG1ldGhvZHMgYWRkIHN5bmNocm9ub3VzIGV2ZW50cyB0byB0aGUgdGltZWxpbmUuIFdoZW4KLy8vIGdlbmVyYXRpbmcgYSB0aW1lbGluZSBpbiBDaHJvbWUncyB0cmFjaW5nIGZvcm1hdCwgdXNpbmcgW1RpbWVsaW5lXSBnZW5lcmF0ZXMKLy8vICJDb21wbGV0ZSIgZXZlbnRzLiBbVGltZWxpbmVdJ3MgW3N0YXJ0U3luY10gYW5kIFtmaW5pc2hTeW5jXSBjYW4gYmUgdXNlZAovLy8gZXhwbGljaXRseSwgb3IgaW1wbGljaXRseSBieSB3cmFwcGluZyBhIGNsb3N1cmUgaW4gW3RpbWVTeW5jXS4gRm9yIGV4YW1wbGU6Ci8vLwovLy8gYGBgZGFydAovLy8gVGltZWxpbmUuc3RhcnRTeW5jKCJEb2luZyBTb21ldGhpbmciKTsKLy8vIGRvU29tZXRoaW5nKCk7Ci8vLyBUaW1lbGluZS5maW5pc2hTeW5jKCk7Ci8vLyBgYGAKLy8vCi8vLyBPcjoKLy8vCi8vLyBgYGBkYXJ0Ci8vLyBUaW1lbGluZS50aW1lU3luYygiRG9pbmcgU29tZXRoaW5nIiwgKCkgewovLy8gICBkb1NvbWV0aGluZygpOwovLy8gfSk7Ci8vLyBgYGAKY2xhc3MgVGltZWxpbmUgewogIC8vLyBTdGFydCBhIHN5bmNocm9ub3VzIG9wZXJhdGlvbiBsYWJlbGVkIFtuYW1lXS4gT3B0aW9uYWxseSB0YWtlcwogIC8vLyBhIFtNYXBdIG9mIFthcmd1bWVudHNdLiBUaGlzIHNsaWNlIG1heSBhbHNvIG9wdGlvbmFsbHkgYmUgYXNzb2NpYXRlZCB3aXRoCiAgLy8vIGEgW0Zsb3ddIGV2ZW50LiBUaGlzIG9wZXJhdGlvbiBtdXN0IGJlIGZpbmlzaGVkIGJlZm9yZQogIC8vLyByZXR1cm5pbmcgdG8gdGhlIGV2ZW50IHF1ZXVlLgogIHN0YXRpYyB2b2lkIHN0YXJ0U3luYyhTdHJpbmcgbmFtZSwge01hcCBhcmd1bWVudHMsIEZsb3cgZmxvd30pIHsKICAgIGlmICghX2hhc1RpbWVsaW5lKSByZXR1cm47CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChuYW1lLCAnbmFtZScpOwogICAgaWYgKCFfaXNEYXJ0U3RyZWFtRW5hYmxlZCgpKSB7CiAgICAgIC8vIFB1c2ggYSBudWxsIG9udG8gdGhlIHN0YWNrIGFuZCByZXR1cm4uCiAgICAgIF9zdGFjay5hZGQobnVsbCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHZhciBibG9jayA9IG5ldyBfU3luY0Jsb2NrLl8obmFtZSk7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgYmxvY2suX2FyZ3VtZW50cyA9IGFyZ3VtZW50czsKICAgIH0KICAgIGlmIChmbG93ICE9IG51bGwpIHsKICAgICAgYmxvY2suZmxvdyA9IGZsb3c7CiAgICB9CiAgICBfc3RhY2suYWRkKGJsb2NrKTsKICAgIGJsb2NrLl9zdGFydFN5bmMoKTsKICB9CgogIC8vLyBGaW5pc2ggdGhlIGxhc3Qgc3luY2hyb25vdXMgb3BlcmF0aW9uIHRoYXQgd2FzIHN0YXJ0ZWQuCiAgc3RhdGljIHZvaWQgZmluaXNoU3luYygpIHsKICAgIGlmICghX2hhc1RpbWVsaW5lKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChfc3RhY2subGVuZ3RoID09IDApIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoJ1VuZXZlbiBjYWxscyB0byBzdGFydFN5bmMgYW5kIGZpbmlzaFN5bmMnKTsKICAgIH0KICAgIC8vIFBvcCB0b3AgaXRlbSBvZmYgb2Ygc3RhY2suCiAgICB2YXIgYmxvY2sgPSBfc3RhY2sucmVtb3ZlTGFzdCgpOwogICAgaWYgKGJsb2NrID09IG51bGwpIHsKICAgICAgLy8gRGFydCBzdHJlYW0gd2FzIGRpc2FibGVkIHdoZW4gc3RhcnRTeW5jIHdhcyBjYWxsZWQuCiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIEZpbmlzaCBpdC4KICAgIGJsb2NrLmZpbmlzaCgpOwogIH0KCiAgLy8vIEVtaXQgYW4gaW5zdGFudCBldmVudC4KICBzdGF0aWMgdm9pZCBpbnN0YW50U3luYyhTdHJpbmcgbmFtZSwge01hcCBhcmd1bWVudHN9KSB7CiAgICBpZiAoIV9oYXNUaW1lbGluZSkgcmV0dXJuOwogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwobmFtZSwgJ25hbWUnKTsKICAgIGlmICghX2lzRGFydFN0cmVhbUVuYWJsZWQoKSkgewogICAgICAvLyBTdHJlYW0gaXMgZGlzYWJsZWQuCiAgICAgIHJldHVybjsKICAgIH0KICAgIE1hcCBpbnN0YW50QXJndW1lbnRzOwogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGluc3RhbnRBcmd1bWVudHMgPSBuZXcgTWFwLmZyb20oYXJndW1lbnRzKTsKICAgIH0KICAgIF9yZXBvcnRJbnN0YW50RXZlbnQoJ0RhcnQnLCBuYW1lLCBfYXJndW1lbnRzQXNKc29uKGluc3RhbnRBcmd1bWVudHMpKTsKICB9CgogIC8vLyBBIHV0aWxpdHkgbWV0aG9kIHRvIHRpbWUgYSBzeW5jaHJvbm91cyBbZnVuY3Rpb25dLiBJbnRlcm5hbGx5IGNhbGxzCiAgLy8vIFtmdW5jdGlvbl0gYnJhY2tldGVkIGJ5IGNhbGxzIHRvIFtzdGFydFN5bmNdIGFuZCBbZmluaXNoU3luY10uCiAgc3RhdGljIFQgdGltZVN5bmM8VD4oU3RyaW5nIG5hbWUsIFRpbWVsaW5lU3luY0Z1bmN0aW9uPFQ+IGZ1bmN0aW9uLAogICAgICB7TWFwIGFyZ3VtZW50cywgRmxvdyBmbG93fSkgewogICAgc3RhcnRTeW5jKG5hbWUsIGFyZ3VtZW50czogYXJndW1lbnRzLCBmbG93OiBmbG93KTsKICAgIHRyeSB7CiAgICAgIHJldHVybiBmdW5jdGlvbigpOwogICAgfSBmaW5hbGx5IHsKICAgICAgZmluaXNoU3luYygpOwogICAgfQogIH0KCiAgLy8vIFRoZSBjdXJyZW50IHRpbWUgc3RhbXAgZnJvbSB0aGUgY2xvY2sgdXNlZCBieSB0aGUgdGltZWxpbmUuIFVuaXRzIGFyZQogIC8vLyBtaWNyb3NlY29uZHMuCiAgLy8vCiAgLy8vIFdoZW4gcnVuIG9uIHRoZSBEYXJ0IFZNLCB1c2VzIHRoZSBzYW1lIG1vbm90b25pYyBjbG9jayBhcyB0aGUgZW1iZWRkaW5nCiAgLy8vIEFQSSdzIGBEYXJ0X1RpbWVsaW5lR2V0TWljcm9zYC4KICBzdGF0aWMgaW50IGdldCBub3cgPT4gX2dldFRyYWNlQ2xvY2soKTsKICBzdGF0aWMgZmluYWwgTGlzdDxfU3luY0Jsb2NrPiBfc3RhY2sgPSBuZXcgTGlzdDxfU3luY0Jsb2NrPigpOwp9CgovLy8gQW4gYXN5bmNocm9ub3VzIHRhc2sgb24gdGhlIHRpbWVsaW5lLiBBbiBhc3luY2hyb25vdXMgdGFzayBjYW4gaGF2ZSBtYW55Ci8vLyAobmVzdGVkKSBzeW5jaHJvbm91cyBvcGVyYXRpb25zLiBTeW5jaHJvbm91cyBvcGVyYXRpb25zIGNhbiBsaXZlIGxvbmdlciB0aGFuCi8vLyB0aGUgY3VycmVudCBpc29sYXRlIGV2ZW50LiBUbyBwYXNzIGEgW1RpbWVsaW5lVGFza10gdG8gYW5vdGhlciBpc29sYXRlLAovLy8geW91IG11c3QgZmlyc3QgY2FsbCBbcGFzc10gdG8gZ2V0IHRoZSB0YXNrIGlkIGFuZCB0aGVuIGNvbnN0cnVjdCBhIG5ldwovLy8gW1RpbWVsaW5lVGFza10gaW4gdGhlIG90aGVyIGlzb2xhdGUuCmNsYXNzIFRpbWVsaW5lVGFzayB7CiAgLy8vIENyZWF0ZSBhIHRhc2suIFRoZSB0YXNrIElEIHdpbGwgYmUgc2V0IGJ5IHRoZSBzeXN0ZW0uCiAgLy8vCiAgLy8vIElmIFtwYXJlbnRdIGlzIHByb3ZpZGVkLCB0aGUgcGFyZW50J3MgdGFzayBJRCBpcyBwcm92aWRlZCBhcyBhcmd1bWVudAogIC8vLyAncGFyZW50SWQnIHdoZW4gW3N0YXJ0XSBpcyBjYWxsZWQuIEluIERldlRvb2xzLCB0aGlzIGFyZ3VtZW50IHdpbGwgcmVzdWx0CiAgLy8vIGluIHRoaXMgW1RpbWVsaW5lVGFza10gYmVpbmcgbGlua2VkIHRvIHRoZSBbcGFyZW50XSBbVGltZWxpbmVUYXNrXS4KICBUaW1lbGluZVRhc2soe1RpbWVsaW5lVGFzayBwYXJlbnR9KQogICAgICA6IF9wYXJlbnQgPSBwYXJlbnQsCiAgICAgICAgX3Rhc2tJZCA9IF9nZXROZXh0QXN5bmNJZCgpIHt9CgogIC8vLyBDcmVhdGUgYSB0YXNrIHdpdGggYW4gZXhwbGljaXQgW3Rhc2tJZF0uIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBhcmUKICAvLy8gcGFzc2luZyBhIHRhc2sgZnJvbSBvbmUgaXNvbGF0ZSB0byBhbm90aGVyLgogIC8vLwogIC8vLyBJbXBvcnRhbnQgbm90ZTogb25seSBwcm92aWRlIHRhc2sgSURzIHdoaWNoIGhhdmUgYmVlbiBvYnRhaW5lZCBhcyBhCiAgLy8vIHJlc3VsdCBvZiBpbnZva2luZyBbVGltZWxpbmVUYXNrLnBhc3NdLiBTcGVjaWZ5aW5nIGEgY3VzdG9tIElEIGNhbiBsZWFkCiAgLy8vIHRvIElEIGNvbGxpc2lvbnMsIHJlc3VsdGluZyBpbiBpbmNvcnJlY3QgcmVuZGVyaW5nIG9mIHRpbWVsaW5lIGV2ZW50cy4KICBUaW1lbGluZVRhc2sud2l0aFRhc2tJZChpbnQgdGFza0lkKQogICAgICA6IF9wYXJlbnQgPSBudWxsLAogICAgICAgIF90YXNrSWQgPSB0YXNrSWQgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwodGFza0lkLCAndGFza0lkJyk7CiAgfQoKICAvLy8gU3RhcnQgYSBzeW5jaHJvbm91cyBvcGVyYXRpb24gd2l0aGluIHRoaXMgdGFzayBuYW1lZCBbbmFtZV0uCiAgLy8vIE9wdGlvbmFsbHkgdGFrZXMgYSBbTWFwXSBvZiBbYXJndW1lbnRzXS4KICB2b2lkIHN0YXJ0KFN0cmluZyBuYW1lLCB7TWFwIGFyZ3VtZW50c30pIHsKICAgIGlmICghX2hhc1RpbWVsaW5lKSByZXR1cm47CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChuYW1lLCAnbmFtZScpOwogICAgdmFyIGJsb2NrID0gbmV3IF9Bc3luY0Jsb2NrLl8obmFtZSwgX3Rhc2tJZCk7CiAgICBfc3RhY2suYWRkKGJsb2NrKTsKICAgIGJsb2NrLl9zdGFydCh7CiAgICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCkgLi4uYXJndW1lbnRzLAogICAgICBpZiAoX3BhcmVudCAhPSBudWxsKSAncGFyZW50SWQnOiBfcGFyZW50Ll90YXNrSWQudG9SYWRpeFN0cmluZygxNiksCiAgICB9KTsKICB9CgogIC8vLyBFbWl0IGFuIGluc3RhbnQgZXZlbnQgZm9yIHRoaXMgdGFzay4KICAvLy8gT3B0aW9uYWxseSB0YWtlcyBhIFtNYXBdIG9mIFthcmd1bWVudHNdLgogIHZvaWQgaW5zdGFudChTdHJpbmcgbmFtZSwge01hcCBhcmd1bWVudHN9KSB7CiAgICBpZiAoIV9oYXNUaW1lbGluZSkgcmV0dXJuOwogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwobmFtZSwgJ25hbWUnKTsKICAgIE1hcCBpbnN0YW50QXJndW1lbnRzOwogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGluc3RhbnRBcmd1bWVudHMgPSBuZXcgTWFwLmZyb20oYXJndW1lbnRzKTsKICAgIH0KICAgIF9yZXBvcnRUYXNrRXZlbnQoCiAgICAgICAgX3Rhc2tJZCwgJ24nLCAnRGFydCcsIG5hbWUsIF9hcmd1bWVudHNBc0pzb24oaW5zdGFudEFyZ3VtZW50cykpOwogIH0KCiAgLy8vIEZpbmlzaCB0aGUgbGFzdCBzeW5jaHJvbm91cyBvcGVyYXRpb24gdGhhdCB3YXMgc3RhcnRlZC4KICAvLy8gT3B0aW9uYWxseSB0YWtlcyBhIFtNYXBdIG9mIFthcmd1bWVudHNdLgogIHZvaWQgZmluaXNoKHtNYXAgYXJndW1lbnRzfSkgewogICAgaWYgKCFfaGFzVGltZWxpbmUpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKF9zdGFjay5sZW5ndGggPT0gMCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcignVW5ldmVuIGNhbGxzIHRvIHN0YXJ0IGFuZCBmaW5pc2gnKTsKICAgIH0KICAgIC8vIFBvcCB0b3AgaXRlbSBvZmYgb2Ygc3RhY2suCiAgICB2YXIgYmxvY2sgPSBfc3RhY2sucmVtb3ZlTGFzdCgpOwogICAgYmxvY2suX2ZpbmlzaChhcmd1bWVudHMpOwogIH0KCiAgLy8vIFJldHJpZXZlIHRoZSBbVGltZWxpbmVUYXNrXSdzIHRhc2sgaWQuIFdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZQogIC8vLyBzdGFjayBpcyBub3QgZW1wdHkuCiAgaW50IHBhc3MoKSB7CiAgICBpZiAoX3N0YWNrLmxlbmd0aCA+IDApIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoCiAgICAgICAgICAnWW91IGNhbm5vdCBwYXNzIGEgVGltZWxpbmVUYXNrIHdpdGhvdXQgZmluaXNoaW5nIGFsbCBzdGFydGVkICcKICAgICAgICAgICdvcGVyYXRpb25zJyk7CiAgICB9CiAgICBpbnQgciA9IF90YXNrSWQ7CiAgICByZXR1cm4gcjsKICB9CgogIGZpbmFsIFRpbWVsaW5lVGFzayBfcGFyZW50OwogIGZpbmFsIGludCBfdGFza0lkOwogIGZpbmFsIExpc3Q8X0FzeW5jQmxvY2s+IF9zdGFjayA9IFtdOwp9CgovLy8gQW4gYXN5bmNocm9ub3VzIGJsb2NrIG9mIHRpbWUgb24gdGhlIHRpbWVsaW5lLiBUaGlzIGJsb2NrIGNhbiBiZSBrZXB0Ci8vLyBvcGVuIGFjcm9zcyBpc29sYXRlIG1lc3NhZ2VzLgpjbGFzcyBfQXN5bmNCbG9jayB7CiAgLy8vIFRoZSBjYXRlZ29yeSB0aGlzIGJsb2NrIGJlbG9uZ3MgdG8uCiAgZmluYWwgU3RyaW5nIGNhdGVnb3J5ID0gJ0RhcnQnOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhpcyBibG9jay4KICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgLy8vIFRoZSBhc3luY2hyb25vdXMgdGFzayBpZC4KICBmaW5hbCBpbnQgX3Rhc2tJZDsKCiAgX0FzeW5jQmxvY2suXyh0aGlzLm5hbWUsIHRoaXMuX3Rhc2tJZCk7CgogIC8vIEVtaXQgdGhlIHN0YXJ0IGV2ZW50LgogIHZvaWQgX3N0YXJ0KE1hcCBhcmd1bWVudHMpIHsKICAgIF9yZXBvcnRUYXNrRXZlbnQoX3Rhc2tJZCwgJ2InLCBjYXRlZ29yeSwgbmFtZSwgX2FyZ3VtZW50c0FzSnNvbihhcmd1bWVudHMpKTsKICB9CgogIC8vIEVtaXQgdGhlIGZpbmlzaCBldmVudC4KICB2b2lkIF9maW5pc2goTWFwIGFyZ3VtZW50cykgewogICAgX3JlcG9ydFRhc2tFdmVudChfdGFza0lkLCAnZScsIGNhdGVnb3J5LCBuYW1lLCBfYXJndW1lbnRzQXNKc29uKGFyZ3VtZW50cykpOwogIH0KfQoKLy8vIEEgc3luY2hyb25vdXMgYmxvY2sgb2YgdGltZSBvbiB0aGUgdGltZWxpbmUuIFRoaXMgYmxvY2sgc2hvdWxkIG5vdCBiZQovLy8ga2VwdCBvcGVuIGFjcm9zcyBpc29sYXRlIG1lc3NhZ2VzLgpjbGFzcyBfU3luY0Jsb2NrIHsKICAvLy8gVGhlIGNhdGVnb3J5IHRoaXMgYmxvY2sgYmVsb25ncyB0by4KICBmaW5hbCBTdHJpbmcgY2F0ZWdvcnkgPSAnRGFydCc7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGlzIGJsb2NrLgogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvLy8gQW4gKG9wdGlvbmFsKSBzZXQgb2YgYXJndW1lbnRzIHdoaWNoIHdpbGwgYmUgc2VyaWFsaXplZCB0byBKU09OIGFuZAogIC8vLyBhc3NvY2lhdGVkIHdpdGggdGhpcyBibG9jay4KICBNYXAgX2FyZ3VtZW50czsKCiAgLy8vIEFuIChvcHRpb25hbCkgZmxvdyBldmVudCBhc3NvY2lhdGVkIHdpdGggdGhpcyBibG9jay4KICBGbG93IF9mbG93OwoKICBfU3luY0Jsb2NrLl8odGhpcy5uYW1lKTsKCiAgLy8vIFN0YXJ0IHRoaXMgYmxvY2sgb2YgdGltZS4KICB2b2lkIF9zdGFydFN5bmMoKSB7CiAgICBfcmVwb3J0VGFza0V2ZW50KDAsICdCJywgY2F0ZWdvcnksIG5hbWUsIF9hcmd1bWVudHNBc0pzb24oX2FyZ3VtZW50cykpOwogIH0KCiAgLy8vIEZpbmlzaCB0aGlzIGJsb2NrIG9mIHRpbWUuIEF0IHRoaXMgcG9pbnQsIHRoaXMgYmxvY2sgY2FuIG5vIGxvbmdlciBiZQogIC8vLyB1c2VkLgogIHZvaWQgZmluaXNoKCkgewogICAgLy8gUmVwb3J0IGV2ZW50IHRvIHJ1bnRpbWUuCiAgICBfcmVwb3J0VGFza0V2ZW50KDAsICdFJywgY2F0ZWdvcnksIG5hbWUsIF9hcmd1bWVudHNBc0pzb24oX2FyZ3VtZW50cykpOwogICAgaWYgKF9mbG93ICE9IG51bGwpIHsKICAgICAgX3JlcG9ydEZsb3dFdmVudChjYXRlZ29yeSwgIiR7X2Zsb3cuaWR9IiwgX2Zsb3cuX3R5cGUsIF9mbG93LmlkLAogICAgICAgICAgX2FyZ3VtZW50c0FzSnNvbihudWxsKSk7CiAgICB9CiAgfQoKICB2b2lkIHNldCBmbG93KEZsb3cgZikgewogICAgX2Zsb3cgPSBmOwogIH0KfQoKU3RyaW5nIF9hcmd1bWVudHNBc0pzb24oTWFwIGFyZ3VtZW50cykgewogIGlmICgoYXJndW1lbnRzID09IG51bGwpIHx8IChhcmd1bWVudHMubGVuZ3RoID09IDApKSB7CiAgICAvLyBGYXN0IHBhdGggbm8gYXJndW1lbnRzLiBBdm9pZCBjYWxsaW5nIGpzb25FbmNvZGUuCiAgICByZXR1cm4gJ3t9JzsKICB9CiAgcmV0dXJuIGpzb24uZW5jb2RlKGFyZ3VtZW50cyk7Cn0KCi8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIERhcnQgVGltZWxpbmUgc3RyZWFtIGlzIGVuYWJsZWQuCmV4dGVybmFsIGJvb2wgX2lzRGFydFN0cmVhbUVuYWJsZWQoKTsKCi8vLyBSZXR1cm5zIHRoZSBuZXh0IGFzeW5jIHRhc2sgaWQuCmV4dGVybmFsIGludCBfZ2V0TmV4dEFzeW5jSWQoKTsKCi8vLyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIGZyb20gdGhlIHRyYWNlIGNsb2NrLgpleHRlcm5hbCBpbnQgX2dldFRyYWNlQ2xvY2soKTsKCi8vLyBSZXBvcnRzIGFuIGV2ZW50IGZvciBhIHRhc2suCmV4dGVybmFsIHZvaWQgX3JlcG9ydFRhc2tFdmVudChpbnQgdGFza0lkLCBTdHJpbmcgcGhhc2UsIFN0cmluZyBjYXRlZ29yeSwKICAgIFN0cmluZyBuYW1lLCBTdHJpbmcgYXJndW1lbnRzQXNKc29uKTsKCi8vLyBSZXBvcnRzIGEgZmxvdyBldmVudC4KZXh0ZXJuYWwgdm9pZCBfcmVwb3J0Rmxvd0V2ZW50KAogICAgU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbmFtZSwgaW50IHR5cGUsIGludCBpZCwgU3RyaW5nIGFyZ3VtZW50c0FzSnNvbik7CgovLy8gUmVwb3J0cyBhbiBpbnN0YW50IGV2ZW50LgpleHRlcm5hbCB2b2lkIF9yZXBvcnRJbnN0YW50RXZlbnQoCiAgICBTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBuYW1lLCBTdHJpbmcgYXJndW1lbnRzQXNKc29uKTsKgWMATk48AQ8BGAEaTwFAMAEjKAEmBEtHTUhIR0MEDB0oFRQEKBUiBCgVIQgNRBwfHx4BEwElEAEfARwGSlEjIDgEARsGSUw5NQEbBkhMOTMCARkERlFNUAQMKxMbCAQIBAwuFQgIEUVQPSRDHy4jMBgOBigdJAYYGQYXGAQBPh0ZDgYeSAYiJRk9DgYSFAQBHTofLiMdDgYaHTIGSwQBSkVGJDcKGRAUBgQBTBQGTiYqQQIBTVFMSykVPAZMUEomGicBSTIGSk5NJhgbMgQBQy8tHy4yFxMrSggEASsvLx8uGh0yBhZJBAE+LyEZDgYeQAYiJR4EAUwaDx0cShkGFQ4EAR4VJwIBSiIUKiIBHhUBIBUBKgEbH1EEARwgUQQCAUonEyoiAR4VAUoiEgE7DgEbASAWTAQBTAwSIEwZRyMGBAEaDwQCASk4OREEIQIBOSYBJCABNB8BIUoqARogTQEeIzsBHGRhcnQ6ZGV2ZWxvcGVyL3RpbWVsaW5lLmRhcnRLb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvX2ludGVybmFsL3ZtL2xpYi9wcm9maWxlci5kYXJ0gywvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vIHBhcnQgb2YgImRldmVsb3Blci5kYXJ0IjsKCkBwYXRjaApjbGFzcyBVc2VyVGFnIHsKICBAcGF0Y2gKICBmYWN0b3J5IFVzZXJUYWcoU3RyaW5nIGxhYmVsKSB7CiAgICByZXR1cm4gbmV3IF9Vc2VyVGFnKGxhYmVsKTsKICB9CiAgQHBhdGNoCiAgc3RhdGljIFVzZXJUYWcgZ2V0IGRlZmF1bHRUYWcgPT4gX2dldERlZmF1bHRUYWcoKTsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfVXNlclRhZyBpbXBsZW1lbnRzIFVzZXJUYWcgewogIGZhY3RvcnkgX1VzZXJUYWcoU3RyaW5nIGxhYmVsKSBuYXRpdmUgIlVzZXJUYWdfbmV3IjsKICBTdHJpbmcgZ2V0IGxhYmVsIG5hdGl2ZSAiVXNlclRhZ19sYWJlbCI7CiAgVXNlclRhZyBtYWtlQ3VycmVudCgpIG5hdGl2ZSAiVXNlclRhZ19tYWtlQ3VycmVudCI7Cn0KCkBwYXRjaApVc2VyVGFnIGdldEN1cnJlbnRUYWcoKSA9PiBfZ2V0Q3VycmVudFRhZygpOwpVc2VyVGFnIF9nZXRDdXJyZW50VGFnKCkgbmF0aXZlICJQcm9maWxlcl9nZXRDdXJyZW50VGFnIjsKClVzZXJUYWcgX2dldERlZmF1bHRUYWcoKSBuYXRpdmUgIlVzZXJUYWdfZGVmYXVsdFRhZyI7CiAATk48AQ8BHQEHEAkiIAQJNQIBGiQ3KzYCAQctOgE2ASJkYXJ0OmRldmVsb3Blci1wYXRjaC9wcm9maWxlci5kYXJ0RG9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2RldmVsb3Blci9wcm9maWxlci5kYXJ0j70vLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5kZXZlbG9wZXI7CgovLy8gQSBVc2VyVGFnIGNhbiBiZSB1c2VkIHRvIGdyb3VwIHNhbXBsZXMgaW4gdGhlIE9ic2VydmF0b3J5IHByb2ZpbGVyLgphYnN0cmFjdCBjbGFzcyBVc2VyVGFnIHsKICAvLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIFVzZXJUYWcgaW5zdGFuY2VzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYnkgYSBwcm9ncmFtLgogIHN0YXRpYyBjb25zdCBNQVhfVVNFUl9UQUdTID0gNjQ7CgogIGV4dGVybmFsIGZhY3RvcnkgVXNlclRhZyhTdHJpbmcgbGFiZWwpOwoKICAvLy8gTGFiZWwgb2YgW3RoaXNdLgogIFN0cmluZyBnZXQgbGFiZWw7CgogIC8vLyBNYWtlIFt0aGlzXSB0aGUgY3VycmVudCB0YWcgZm9yIHRoZSBpc29sYXRlLiBSZXR1cm5zIHRoZSBjdXJyZW50IHRhZwogIC8vLyBiZWZvcmUgc2V0dGluZy4KICBVc2VyVGFnIG1ha2VDdXJyZW50KCk7CgogIC8vLyBUaGUgZGVmYXVsdCBbVXNlclRhZ10gd2l0aCBsYWJlbCAnRGVmYXVsdCcuCiAgZXh0ZXJuYWwgc3RhdGljIFVzZXJUYWcgZ2V0IGRlZmF1bHRUYWc7Cn0KCi8vLyBSZXR1cm5zIHRoZSBjdXJyZW50IFtVc2VyVGFnXSBmb3IgdGhlIGlzb2xhdGUuCmV4dGVybmFsIFVzZXJUYWcgZ2V0Q3VycmVudFRhZygpOwoKLy8vIEFic3RyYWN0IFtNZXRyaWNdIGNsYXNzLiBNZXRyaWMgbmFtZXMgbXVzdCBiZSB1bmlxdWUsIGFyZSBoaWVyYXJjaGljYWwsCi8vLyBhbmQgdXNlIHBlcmlvZHMgYXMgc2VwYXJhdG9ycy4gRm9yIGV4YW1wbGUsICdhLmIuYycuIFVuaXF1ZW5lc3MgaXMgb25seQovLy8gZW5mb3JjZWQgd2hlbiBhIE1ldHJpYyBpcyByZWdpc3RlcmVkLiBUaGUgbmFtZSBvZiBhIG1ldHJpYyBjYW5ub3QgY29udGFpbgovLy8gdGhlIHNsYXNoICgnLycpIGNoYXJhY3Rlci4KYWJzdHJhY3QgY2xhc3MgTWV0cmljIHsKICAvLy8gW25hbWVdIG9mIHRoaXMgbWV0cmljLgogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvLy8gW2Rlc2NyaXB0aW9uXSBvZiB0aGlzIG1ldHJpYy4KICBmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb247CgogIE1ldHJpYyh0aGlzLm5hbWUsIHRoaXMuZGVzY3JpcHRpb24pIHsKICAgIGlmICgobmFtZSA9PSAndm0nKSB8fCBuYW1lLmNvbnRhaW5zKCcvJykpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgTWV0cmljIG5hbWUuJyk7CiAgICB9CiAgfQoKICBNYXAgX3RvSlNPTigpOwp9CgovLy8gQSBtZWFzdXJlZCB2YWx1ZSB3aXRoIGEgbWluIGFuZCBtYXguIEluaXRpYWwgdmFsdWUgaXMgbWluLiBWYWx1ZSB3aWxsCi8vLyBiZSBjbGFtcGVkIHRvIHRoZSBpbnRlcnZhbCBbbWluLCBtYXhdLgpjbGFzcyBHYXVnZSBleHRlbmRzIE1ldHJpYyB7CiAgZmluYWwgZG91YmxlIG1pbjsKICBmaW5hbCBkb3VibGUgbWF4OwoKICBkb3VibGUgX3ZhbHVlOwogIGRvdWJsZSBnZXQgdmFsdWUgPT4gX3ZhbHVlOwogIHNldCB2YWx1ZShkb3VibGUgdikgewogICAgaWYgKHYgPCBtaW4pIHsKICAgICAgdiA9IG1pbjsKICAgIH0gZWxzZSBpZiAodiA+IG1heCkgewogICAgICB2ID0gbWF4OwogICAgfQogICAgX3ZhbHVlID0gdjsKICB9CgogIEdhdWdlKFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzY3JpcHRpb24sIHRoaXMubWluLCB0aGlzLm1heCkKICAgICAgOiBzdXBlcihuYW1lLCBkZXNjcmlwdGlvbikgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwobWluLCAnbWluJyk7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChtYXgsICdtYXgnKTsKICAgIGlmICghKG1pbiA8IG1heCkpIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdtaW4gbXVzdCBiZSBsZXNzIHRoYW4gbWF4Jyk7CiAgICBfdmFsdWUgPSBtaW47CiAgfQoKICBNYXAgX3RvSlNPTigpIHsKICAgIHZhciBtYXAgPSB7CiAgICAgICd0eXBlJzogJ0dhdWdlJywKICAgICAgJ2lkJzogJ21ldHJpY3MvJG5hbWUnLAogICAgICAnbmFtZSc6IG5hbWUsCiAgICAgICdkZXNjcmlwdGlvbic6IGRlc2NyaXB0aW9uLAogICAgICAndmFsdWUnOiB2YWx1ZSwKICAgICAgJ21pbic6IG1pbiwKICAgICAgJ21heCc6IG1heCwKICAgIH07CiAgICByZXR1cm4gbWFwOwogIH0KfQoKLy8vIEEgY2hhbmdpbmcgdmFsdWUuIEluaXRpYWwgdmFsdWUgaXMgMC4wLgpjbGFzcyBDb3VudGVyIGV4dGVuZHMgTWV0cmljIHsKICBDb3VudGVyKFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzY3JpcHRpb24pIDogc3VwZXIobmFtZSwgZGVzY3JpcHRpb24pOwoKICBkb3VibGUgX3ZhbHVlID0gMC4wOwogIGRvdWJsZSBnZXQgdmFsdWUgPT4gX3ZhbHVlOwogIHNldCB2YWx1ZShkb3VibGUgdikgewogICAgX3ZhbHVlID0gdjsKICB9CgogIE1hcCBfdG9KU09OKCkgewogICAgdmFyIG1hcCA9IHsKICAgICAgJ3R5cGUnOiAnQ291bnRlcicsCiAgICAgICdpZCc6ICdtZXRyaWNzLyRuYW1lJywKICAgICAgJ25hbWUnOiBuYW1lLAogICAgICAnZGVzY3JpcHRpb24nOiBkZXNjcmlwdGlvbiwKICAgICAgJ3ZhbHVlJzogdmFsdWUsCiAgICB9OwogICAgcmV0dXJuIG1hcDsKICB9Cn0KCmNsYXNzIE1ldHJpY3MgewogIHN0YXRpYyBmaW5hbCBNYXA8U3RyaW5nLCBNZXRyaWM+IF9tZXRyaWNzID0gbmV3IE1hcDxTdHJpbmcsIE1ldHJpYz4oKTsKCiAgLy8vIFJlZ2lzdGVyIFtNZXRyaWNdcyB0byBtYWtlIHRoZW0gdmlzaWJsZSB0byBPYnNlcnZhdG9yeS4KICBzdGF0aWMgdm9pZCByZWdpc3RlcihNZXRyaWMgbWV0cmljKSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChtZXRyaWMsICdtZXRyaWMnKTsKICAgIGlmIChfbWV0cmljc1ttZXRyaWMubmFtZV0gIT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignUmVnaXN0ZXJlZCBtZXRyaWNzIGhhdmUgdW5pcXVlIG5hbWVzJyk7CiAgICB9CiAgICBfbWV0cmljc1ttZXRyaWMubmFtZV0gPSBtZXRyaWM7CiAgfQoKICAvLy8gRGVyZWdpc3RlciBbTWV0cmljXXMgdG8gbWFrZSB0aGVtIG5vdCB2aXNpYmxlIHRvIE9ic2VydmF0b3J5LgogIHN0YXRpYyB2b2lkIGRlcmVnaXN0ZXIoTWV0cmljIG1ldHJpYykgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwobWV0cmljLCAnbWV0cmljJyk7CiAgICBfbWV0cmljcy5yZW1vdmUobWV0cmljLm5hbWUpOwogIH0KCiAgLy8gaWdub3JlOiB1bnVzZWRfZWxlbWVudCwgY2FsbGVkIGZyb20gbmF0aXZlIGNvZGUKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICFjb25zdCBib29sLmZyb21FbnZpcm9ubWVudCgiZGFydC52bS5wcm9kdWN0IikpCiAgc3RhdGljIFN0cmluZyBfcHJpbnRNZXRyaWMoU3RyaW5nIGlkKSB7CiAgICB2YXIgbWV0cmljID0gX21ldHJpY3NbaWRdOwogICAgaWYgKG1ldHJpYyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIGpzb24uZW5jb2RlKG1ldHJpYy5fdG9KU09OKCkpOwogIH0KCiAgLy8gaWdub3JlOiB1bnVzZWRfZWxlbWVudCwgY2FsbGVkIGZyb20gbmF0aXZlIGNvZGUKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICFjb25zdCBib29sLmZyb21FbnZpcm9ubWVudCgiZGFydC52bS5wcm9kdWN0IikpCiAgc3RhdGljIFN0cmluZyBfcHJpbnRNZXRyaWNzKCkgewogICAgdmFyIG1ldHJpY3MgPSBbXTsKICAgIGZvciAodmFyIG1ldHJpYyBpbiBfbWV0cmljcy52YWx1ZXMpIHsKICAgICAgbWV0cmljcy5hZGQobWV0cmljLl90b0pTT04oKSk7CiAgICB9CiAgICB2YXIgbWFwID0gewogICAgICAndHlwZSc6ICdNZXRyaWNMaXN0JywKICAgICAgJ21ldHJpY3MnOiBtZXRyaWNzLAogICAgfTsKICAgIHJldHVybiBqc29uLmVuY29kZShtYXApOwogIH0KfQqAmgBOTjwBDwEYAUgZUCMBKgEXFAFLFhkBMioCATMiAUxMTh8YHRUBJBwBKDA3BgQBEQIBSisdFBQBER4YEw8aDwYQBAE9IywsTBIEARIQFx0UIhYSEgcQBAIBLB9HARceGBAEARIQGR0UIhYHEAQCARBJAT4oMilHBiQEAUQqMiIEATVMKh8aEwYqBAE1TCIWKiUGEBwaBx0EAgEcZGFydDpkZXZlbG9wZXIvcHJvZmlsZXIuZGFydENvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9kZXZlbG9wZXIvc2VydmljZS5kYXJ0j5EvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5kZXZlbG9wZXI7CgovLy8gU2VydmljZSBwcm90b2NvbCBpcyB0aGUgcHJvdG9jb2wgdGhhdCBhIGNsaWVudCBsaWtlIHRoZSBPYnNlcnZhdG9yeQovLy8gY291bGQgdXNlIHRvIGFjY2VzcyB0aGUgc2VydmljZXMgcHJvdmlkZWQgYnkgdGhlIERhcnQgVk0gZm9yCi8vLyBkZWJ1Z2dpbmcgYW5kIGluc3BlY3RpbmcgRGFydCBwcm9ncmFtcy4gVGhpcyBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlCi8vLyB2ZXJzaW9uIG51bWJlciBhbmQgVXJpIGZvciBhY2Nlc3NpbmcgdGhpcyBzZXJ2aWNlLgpjbGFzcyBTZXJ2aWNlUHJvdG9jb2xJbmZvIHsKICAvLy8gVGhlIG1ham9yIHZlcnNpb24gb2YgdGhlIHByb3RvY29sLiBJZiB0aGUgcnVubmluZyBEYXJ0IGVudmlyb25tZW50IGRvZXMKICAvLy8gbm90IHN1cHBvcnQgdGhlIHNlcnZpY2UgcHJvdG9jb2wsIHRoaXMgaXMgMC4KICBmaW5hbCBpbnQgbWFqb3JWZXJzaW9uID0gX2dldFNlcnZpY2VNYWpvclZlcnNpb24oKTsKCiAgLy8vIFRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbC4gSWYgdGhlIHJ1bm5pbmcgRGFydCBlbnZpcm9ubWVudCBkb2VzCiAgLy8vIG5vdCBzdXBwb3J0IHRoZSBzZXJ2aWNlIHByb3RvY29sLCB0aGlzIGlzIDAuCiAgZmluYWwgaW50IG1pbm9yVmVyc2lvbiA9IF9nZXRTZXJ2aWNlTWlub3JWZXJzaW9uKCk7CgogIC8vLyBUaGUgVXJpIHRvIGFjY2VzcyB0aGUgc2VydmljZS4gSWYgdGhlIHdlYiBzZXJ2ZXIgaXMgbm90IHJ1bm5pbmcsIHRoaXMKICAvLy8gd2lsbCBiZSBudWxsLgogIGZpbmFsIFVyaSBzZXJ2ZXJVcmk7CgogIFNlcnZpY2VQcm90b2NvbEluZm8odGhpcy5zZXJ2ZXJVcmkpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBpZiAoc2VydmVyVXJpICE9IG51bGwpIHsKICAgICAgcmV0dXJuICdEYXJ0IFZNIFNlcnZpY2UgUHJvdG9jb2wgdiRtYWpvclZlcnNpb24uJG1pbm9yVmVyc2lvbiAnCiAgICAgICAgICAnbGlzdGVuaW5nIG9uICRzZXJ2ZXJVcmknOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICdEYXJ0IFZNIFNlcnZpY2UgUHJvdG9jb2wgdiRtYWpvclZlcnNpb24uJG1pbm9yVmVyc2lvbic7CiAgICB9CiAgfQp9CgovLy8gQWNjZXNzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXJ2aWNlIHByb3RvY29sIGFuZCBjb250cm9sIHRoZSB3ZWIgc2VydmVyCi8vLyB0aGF0IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgc2VydmljZXMgcHJvdmlkZWQgYnkgdGhlIERhcnQgVk0gZm9yCi8vLyBkZWJ1Z2dpbmcgYW5kIGluc3BlY3RpbmcgRGFydCBwcm9ncmFtcy4KY2xhc3MgU2VydmljZSB7CiAgLy8vIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VydmljZSBwcm90b2NvbCAodmVyc2lvbiBudW1iZXIgYW5kCiAgLy8vIFVyaSB0byBhY2Nlc3MgdGhlIHNlcnZpY2UpLgogIHN0YXRpYyBGdXR1cmU8U2VydmljZVByb3RvY29sSW5mbz4gZ2V0SW5mbygpIGFzeW5jIHsKICAgIC8vIFBvcnQgdG8gcmVjZWl2ZSByZXNwb25zZSBmcm9tIHNlcnZpY2UgaXNvbGF0ZS4KICAgIGZpbmFsIFJhd1JlY2VpdmVQb3J0IHJlY2VpdmVQb3J0ID0gbmV3IFJhd1JlY2VpdmVQb3J0KCk7CiAgICBmaW5hbCBDb21wbGV0ZXI8VXJpPiB1cmlDb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPFVyaT4oKTsKICAgIHJlY2VpdmVQb3J0LmhhbmRsZXIgPSAoVXJpIHVyaSkgPT4gdXJpQ29tcGxldGVyLmNvbXBsZXRlKHVyaSk7CiAgICAvLyBSZXF1ZXN0IHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzZXJ2aWNlIGlzb2xhdGUuCiAgICBfZ2V0U2VydmVySW5mbyhyZWNlaXZlUG9ydC5zZW5kUG9ydCk7CiAgICAvLyBBd2FpdCB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmljZSBpc29sYXRlLgogICAgVXJpIHVyaSA9IGF3YWl0IHVyaUNvbXBsZXRlci5mdXR1cmU7CiAgICAvLyBDbG9zZSB0aGUgcG9ydC4KICAgIHJlY2VpdmVQb3J0LmNsb3NlKCk7CiAgICByZXR1cm4gbmV3IFNlcnZpY2VQcm90b2NvbEluZm8odXJpKTsKICB9CgogIC8vLyBDb250cm9sIHRoZSB3ZWIgc2VydmVyIHRoYXQgdGhlIHNlcnZpY2UgcHJvdG9jb2wgaXMgYWNjZXNzZWQgdGhyb3VnaC4KICAvLy8gVGhlIFtlbmFibGVdIGFyZ3VtZW50IG11c3QgYmUgYSBib29sZWFuIGFuZCBpcyB1c2VkIGFzIGEgdG9nZ2xlIHRvCiAgLy8vIGVuYWJsZSAodHJ1ZSkgb3IgZGlzYWJsZSAoZmFsc2UpIHRoZSB3ZWIgc2VydmVyIHNlcnZpY2luZyByZXF1ZXN0cy4KICBzdGF0aWMgRnV0dXJlPFNlcnZpY2VQcm90b2NvbEluZm8+IGNvbnRyb2xXZWJTZXJ2ZXIoCiAgICAgIHtib29sIGVuYWJsZTogZmFsc2V9KSBhc3luYyB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChlbmFibGUsICdlbmFibGUnKTsKICAgIC8vIFBvcnQgdG8gcmVjZWl2ZSByZXNwb25zZSBmcm9tIHNlcnZpY2UgaXNvbGF0ZS4KICAgIGZpbmFsIFJhd1JlY2VpdmVQb3J0IHJlY2VpdmVQb3J0ID0gbmV3IFJhd1JlY2VpdmVQb3J0KCk7CiAgICBmaW5hbCBDb21wbGV0ZXI8VXJpPiB1cmlDb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPFVyaT4oKTsKICAgIHJlY2VpdmVQb3J0LmhhbmRsZXIgPSAoVXJpIHVyaSkgPT4gdXJpQ29tcGxldGVyLmNvbXBsZXRlKHVyaSk7CiAgICAvLyBSZXF1ZXN0IHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzZXJ2aWNlIGlzb2xhdGUuCiAgICBfd2ViU2VydmVyQ29udHJvbChyZWNlaXZlUG9ydC5zZW5kUG9ydCwgZW5hYmxlKTsKICAgIC8vIEF3YWl0IHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2aWNlIGlzb2xhdGUuCiAgICBVcmkgdXJpID0gYXdhaXQgdXJpQ29tcGxldGVyLmZ1dHVyZTsKICAgIC8vIENsb3NlIHRoZSBwb3J0LgogICAgcmVjZWl2ZVBvcnQuY2xvc2UoKTsKICAgIHJldHVybiBuZXcgU2VydmljZVByb3RvY29sSW5mbyh1cmkpOwogIH0KCiAgLy8vIFJldHVybnMgYSBbU3RyaW5nXSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIElEIG9mIFtpc29sYXRlXS4KICAvLy8KICAvLy8gUmV0dXJucyBudWxsIGlmIHRoZSBydW5uaW5nIERhcnQgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2VydmljZQogIC8vLyBwcm90b2NvbC4KICBzdGF0aWMgU3RyaW5nIGdldElzb2xhdGVJRChJc29sYXRlIGlzb2xhdGUpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGlzb2xhdGUsICdpc29sYXRlJyk7CiAgICByZXR1cm4gX2dldElzb2xhdGVJREZyb21TZW5kUG9ydChpc29sYXRlLmNvbnRyb2xQb3J0KTsKICB9Cn0KCi8vLyBbc2VuZFBvcnRdIHdpbGwgcmVjZWl2ZSBhIFVyaSBvciBudWxsLgpleHRlcm5hbCB2b2lkIF9nZXRTZXJ2ZXJJbmZvKFNlbmRQb3J0IHNlbmRQb3J0KTsKCi8vLyBbc2VuZFBvcnRdIHdpbGwgcmVjZWl2ZSBhIFVyaSBvciBudWxsLgpleHRlcm5hbCB2b2lkIF93ZWJTZXJ2ZXJDb250cm9sKFNlbmRQb3J0IHNlbmRQb3J0LCBib29sIGVuYWJsZSk7CgovLy8gUmV0dXJucyB0aGUgbWFqb3IgdmVyc2lvbiBvZiB0aGUgc2VydmljZSBwcm90b2NvbC4KZXh0ZXJuYWwgaW50IF9nZXRTZXJ2aWNlTWFqb3JWZXJzaW9uKCk7CgovLy8gUmV0dXJucyB0aGUgbWlub3IgdmVyc2lvbiBvZiB0aGUgc2VydmljZSBwcm90b2NvbC4KZXh0ZXJuYWwgaW50IF9nZXRTZXJ2aWNlTWlub3JWZXJzaW9uKCk7CgovLy8gUmV0dXJucyB0aGUgc2VydmljZSBpZCBmb3IgdGhlIGlzb2xhdGUgdGhhdCBvd25zIFtzZW5kUG9ydF0uCmV4dGVybmFsIFN0cmluZyBfZ2V0SXNvbGF0ZUlERnJvbVNlbmRQb3J0KFNlbmRQb3J0IHNlbmRQb3J0KTsKZgBOTjwBDwEYAUhBSDccTjM2AU4zNgFMFBcBJwEWHUYlDUYGBAIBTUUsEEUiNzY9PkM5KjQpFxkpBAFMSUo3JDI2PT5DOTU0KRcZKQQBQQZQEDA0OwQCASsxAStBATcoATcoAUE+ARtkYXJ0OmRldmVsb3Blci9zZXJ2aWNlLmRhcnRMb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvX2ludGVybmFsL3ZtL2xpYi9kZXZlbG9wZXIuZGFydJUGLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgovLy8gTm90ZTogdGhlIFZNIGNvbmNhdGVuYXRlcyBhbGwgcGF0Y2ggZmlsZXMgaW50byBhIHNpbmdsZSBwYXRjaCBmaWxlLiBUaGlzCi8vLyBmaWxlIGlzIHRoZSBmaXJzdCBwYXRjaCBpbiAiZGFydDpkZXZlbG9wZXIiIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgaW1wb3J0cwovLy8gdXNlZCBieSBwYXRjaGVzIG9mIHRoYXQgbGlicmFyeS4gV2UgcGxhbiB0byBjaGFuZ2UgdGhpcyB3aGVuIHdlIGhhdmUgYQovLy8gc2hhcmVkIGZyb250IGVuZCBhbmQgc2ltcGx5IHVzZSBwYXJ0cy4KCmltcG9ydCAiZGFydDpfaW50ZXJuYWwiIHNob3cgcGF0Y2g7CgppbXBvcnQgImRhcnQ6YXN5bmMiIHNob3cgRnV0dXJlLCBab25lOwoKaW1wb3J0ICJkYXJ0Omlzb2xhdGUiIHNob3cgU2VuZFBvcnQ7CgovLy8gVGhlc2UgYXJlIHRoZSBhZGRpdGlvbmFsIHBhcnRzIG9mIHRoaXMgcGF0Y2ggbGlicmFyeToKLy8gcGFydCAicHJvZmlsZXIuZGFydCIKLy8gcGFydCAidGltZWxpbmUuZGFydCIKCkBwYXRjaApib29sIGRlYnVnZ2VyKHtib29sIHdoZW46IHRydWUsIFN0cmluZyBtZXNzYWdlfSkgbmF0aXZlICJEZXZlbG9wZXJfZGVidWdnZXIiOwoKQHBhdGNoCk9iamVjdCBpbnNwZWN0KE9iamVjdCBvYmplY3QpIG5hdGl2ZSAiRGV2ZWxvcGVyX2luc3BlY3QiOwoKQHBhdGNoCnZvaWQgbG9nKFN0cmluZyBtZXNzYWdlLAogICAge0RhdGVUaW1lIHRpbWUsCiAgICBpbnQgc2VxdWVuY2VOdW1iZXIsCiAgICBpbnQgbGV2ZWw6IDAsCiAgICBTdHJpbmcgbmFtZTogJycsCiAgICBab25lIHpvbmUsCiAgICBPYmplY3QgZXJyb3IsCiAgICBTdGFja1RyYWNlIHN0YWNrVHJhY2V9KSB7CiAgaWYgKG1lc3NhZ2UgaXMhIFN0cmluZykgewogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUobWVzc2FnZSwgIm1lc3NhZ2UiLCAiTXVzdCBiZSBhIFN0cmluZyIpOwogIH0KICB0aW1lID8/PSBuZXcgRGF0ZVRpbWUubm93KCk7CiAgaWYgKHRpbWUgaXMhIERhdGVUaW1lKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSh0aW1lLCAidGltZSIsICJNdXN0IGJlIGEgRGF0ZVRpbWUiKTsKICB9CiAgaWYgKHNlcXVlbmNlTnVtYmVyID09IG51bGwpIHsKICAgIHNlcXVlbmNlTnVtYmVyID0gX25leHRTZXF1ZW5jZU51bWJlcisrOwogIH0gZWxzZSB7CiAgICBfbmV4dFNlcXVlbmNlTnVtYmVyID0gc2VxdWVuY2VOdW1iZXIgKyAxOwogIH0KICBfbG9nKG1lc3NhZ2UsIHRpbWUubWlsbGlzZWNvbmRzU2luY2VFcG9jaCwgc2VxdWVuY2VOdW1iZXIsIGxldmVsLCBuYW1lLCB6b25lLAogICAgICBlcnJvciwgc3RhY2tUcmFjZSk7Cn0KCmludCBfbmV4dFNlcXVlbmNlTnVtYmVyID0gMDsKCl9sb2coU3RyaW5nIG1lc3NhZ2UsIGludCB0aW1lc3RhbXAsIGludCBzZXF1ZW5jZU51bWJlciwgaW50IGxldmVsLCBTdHJpbmcgbmFtZSwKICAgIFpvbmUgem9uZSwgT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIG5hdGl2ZSAiRGV2ZWxvcGVyX2xvZyI7CgpAcGF0Y2gKdm9pZCBfcG9zdEV2ZW50KFN0cmluZyBldmVudEtpbmQsIFN0cmluZyBldmVudERhdGEpCiAgICBuYXRpdmUgIkRldmVsb3Blcl9wb3N0RXZlbnQiOwoKQHBhdGNoClNlcnZpY2VFeHRlbnNpb25IYW5kbGVyIF9sb29rdXBFeHRlbnNpb24oU3RyaW5nIG1ldGhvZCkKICAgIG5hdGl2ZSAiRGV2ZWxvcGVyX2xvb2t1cEV4dGVuc2lvbiI7CgpAcGF0Y2gKX3JlZ2lzdGVyRXh0ZW5zaW9uKFN0cmluZyBtZXRob2QsIFNlcnZpY2VFeHRlbnNpb25IYW5kbGVyIGhhbmRsZXIpCiAgICBuYXRpdmUgIkRldmVsb3Blcl9yZWdpc3RlckV4dGVuc2lvbiI7CgovLyBUaGlzIGNvZGUgaXMgb25seSBpbnZva2VkIHdoZW4gdGhlcmUgaXMgbm8gb3RoZXIgRGFydCBjb2RlIG9uIHRoZSBzdGFjay4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAhY29uc3QgYm9vbC5mcm9tRW52aXJvbm1lbnQoImRhcnQudm0ucHJvZHVjdCIpKQpfcnVuRXh0ZW5zaW9uKAogICAgU2VydmljZUV4dGVuc2lvbkhhbmRsZXIgaGFuZGxlciwKICAgIFN0cmluZyBtZXRob2QsCiAgICBMaXN0PFN0cmluZz4gcGFyYW1ldGVyS2V5cywKICAgIExpc3Q8U3RyaW5nPiBwYXJhbWV0ZXJWYWx1ZXMsCiAgICBTZW5kUG9ydCByZXBseVBvcnQsCiAgICBPYmplY3QgaWQsCiAgICBib29sIHRyYWNlX3NlcnZpY2UpIHsKICB2YXIgcGFyYW1ldGVycyA9IDxTdHJpbmcsIFN0cmluZz57fTsKICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtZXRlcktleXMubGVuZ3RoOyBpKyspIHsKICAgIHBhcmFtZXRlcnNbcGFyYW1ldGVyS2V5c1tpXV0gPSBwYXJhbWV0ZXJWYWx1ZXNbaV07CiAgfQogIHZhciByZXNwb25zZTsKICB0cnkgewogICAgcmVzcG9uc2UgPSBoYW5kbGVyKG1ldGhvZCwgcGFyYW1ldGVycyk7CiAgfSBjYXRjaCAoZSwgc3QpIHsKICAgIHZhciBlcnJvckRldGFpbHMgPSAoc3QgPT0gbnVsbCkgPyAnJGUnIDogJyRlXG4kc3QnOwogICAgcmVzcG9uc2UgPSBuZXcgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLmVycm9yKAogICAgICAgIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5rRXh0ZW5zaW9uRXJyb3IsIGVycm9yRGV0YWlscyk7CiAgICBfcG9zdFJlc3BvbnNlKHJlcGx5UG9ydCwgaWQsIHJlc3BvbnNlLCB0cmFjZV9zZXJ2aWNlKTsKICAgIHJldHVybjsKICB9CiAgaWYgKHJlc3BvbnNlIGlzISBGdXR1cmUpIHsKICAgIHJlc3BvbnNlID0gbmV3IFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5lcnJvcigKICAgICAgICBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2Uua0V4dGVuc2lvbkVycm9yLAogICAgICAgICJFeHRlbnNpb24gaGFuZGxlciBtdXN0IHJldHVybiBhIEZ1dHVyZSIpOwogICAgX3Bvc3RSZXNwb25zZShyZXBseVBvcnQsIGlkLCByZXNwb25zZSwgdHJhY2Vfc2VydmljZSk7CiAgICByZXR1cm47CiAgfQogIHJlc3BvbnNlLmNhdGNoRXJyb3IoKGUsIHN0KSB7CiAgICAvLyBDYXRjaCBhbnkgZXJyb3JzIGVhZ2VybHkgYW5kIHdyYXAgdGhlbSBpbiBhIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS4KICAgIHZhciBlcnJvckRldGFpbHMgPSAoc3QgPT0gbnVsbCkgPyAnJGUnIDogJyRlXG4kc3QnOwogICAgcmV0dXJuIG5ldyBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UuZXJyb3IoCiAgICAgICAgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLmtFeHRlbnNpb25FcnJvciwgZXJyb3JEZXRhaWxzKTsKICB9KS50aGVuKChyZXNwb25zZSkgewogICAgLy8gUG9zdCB0aGUgdmFsaWQgcmVzcG9uc2Ugb3IgdGhlIHdyYXBwZWQgZXJyb3IgYWZ0ZXIgdmVyaWZ5aW5nIHRoYXQKICAgIC8vIHRoZSByZXNwb25zZSBpcyBhIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS4KICAgIGlmIChyZXNwb25zZSBpcyEgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlKSB7CiAgICAgIHJlc3BvbnNlID0gbmV3IFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5lcnJvcigKICAgICAgICAgIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5rRXh0ZW5zaW9uRXJyb3IsCiAgICAgICAgICAiRXh0ZW5zaW9uIGhhbmRsZXIgbXVzdCBjb21wbGV0ZSB0byBhIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZSIpOwogICAgfQogICAgX3Bvc3RSZXNwb25zZShyZXBseVBvcnQsIGlkLCByZXNwb25zZSwgdHJhY2Vfc2VydmljZSk7CiAgfSkuY2F0Y2hFcnJvcigoZSwgc3QpIHsKICAgIC8vIFdlIGRvIG5vdCBleHBlY3QgYW55IGVycm9ycyB0byBvY2N1ciBpbiB0aGUgLnRoZW4gb3IgLmNhdGNoRXJyb3IgYmxvY2tzCiAgICAvLyBidXQsIHN1cHByZXNzIHRoZW0ganVzdCBpbiBjYXNlLgogIH0pOwp9CgovLyBUaGlzIGNvZGUgaXMgb25seSBpbnZva2VkIGJ5IF9ydW5FeHRlbnNpb24uCl9wb3N0UmVzcG9uc2UoU2VuZFBvcnQgcmVwbHlQb3J0LCBPYmplY3QgaWQsIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZSByZXNwb25zZSwKICAgIGJvb2wgdHJhY2Vfc2VydmljZSkgewogIGFzc2VydChyZXBseVBvcnQgIT0gbnVsbCk7CiAgaWYgKGlkID09IG51bGwpIHsKICAgIGlmICh0cmFjZV9zZXJ2aWNlKSB7CiAgICAgIHByaW50KCJ2bS1zZXJ2aWNlOiBwb3N0aW5nIG5vIHJlc3BvbnNlIGZvciByZXF1ZXN0Iik7CiAgICB9CiAgICAvLyBObyBpZCAtPiBubyByZXNwb25zZS4KICAgIHJlcGx5UG9ydC5zZW5kKG51bGwpOwogICAgcmV0dXJuOwogIH0KICBhc3NlcnQoaWQgIT0gbnVsbCk7CiAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogIHNiLndyaXRlKCd7Impzb25ycGMiOiIyLjAiLCcpOwogIGlmIChyZXNwb25zZS5pc0Vycm9yKCkpIHsKICAgIGlmICh0cmFjZV9zZXJ2aWNlKSB7CiAgICAgIHByaW50KCJ2bS1zZXJ2aWNlOiBwb3N0aW5nIGVycm9yIHJlc3BvbnNlIGZvciByZXF1ZXN0ICRpZCIpOwogICAgfQogICAgc2Iud3JpdGUoJyJlcnJvciI6Jyk7CiAgfSBlbHNlIHsKICAgIGlmICh0cmFjZV9zZXJ2aWNlKSB7CiAgICAgIHByaW50KCJ2bS1zZXJ2aWNlOiBwb3N0aW5nIHJlc3BvbnNlIGZvciByZXF1ZXN0ICRpZCIpOwogICAgfQogICAgc2Iud3JpdGUoJyJyZXN1bHQiOicpOwogIH0KICBzYi53cml0ZSgnJHtyZXNwb25zZS5fdG9TdHJpbmcoKX0sJyk7CiAgaWYgKGlkIGlzIFN0cmluZykgewogICAgc2Iud3JpdGUoJyJpZCI6IiRpZCJ9Jyk7CiAgfSBlbHNlIHsKICAgIHNiLndyaXRlKCciaWQiOiRpZH0nKTsKICB9CiAgcmVwbHlQb3J0LnNlbmQoc2IudG9TdHJpbmcoKSk7Cn0KCkBwYXRjaAppbnQgX2dldFNlcnZpY2VNYWpvclZlcnNpb24oKSBuYXRpdmUgIkRldmVsb3Blcl9nZXRTZXJ2aWNlTWFqb3JWZXJzaW9uIjsKCkBwYXRjaAppbnQgX2dldFNlcnZpY2VNaW5vclZlcnNpb24oKSBuYXRpdmUgIkRldmVsb3Blcl9nZXRTZXJ2aWNlTWlub3JWZXJzaW9uIjsKCkBwYXRjaAp2b2lkIF9nZXRTZXJ2ZXJJbmZvKFNlbmRQb3J0IHNlbmRQb3J0KSBuYXRpdmUgIkRldmVsb3Blcl9nZXRTZXJ2ZXJJbmZvIjsKCkBwYXRjaAp2b2lkIF93ZWJTZXJ2ZXJDb250cm9sKFNlbmRQb3J0IHNlbmRQb3J0LCBib29sIGVuYWJsZSkKICAgIG5hdGl2ZSAiRGV2ZWxvcGVyX3dlYlNlcnZlckNvbnRyb2wiOwoKQHBhdGNoClN0cmluZyBfZ2V0SXNvbGF0ZUlERnJvbVNlbmRQb3J0KFNlbmRQb3J0IHNlbmRQb3J0KQogICAgbmF0aXZlICJEZXZlbG9wZXJfZ2V0SXNvbGF0ZUlERnJvbVNlbmRQb3J0IjsKgK0ATk48AQ8BTU9LKwEkAScBJQE6GBgBB04BBzoBBxkUGBIVDxIeHEsEHxtHBCAsCy4EUBoCAR0BUEwBBzQiAQc4KAEHQyoBTEoPJRMgIhgPGiczNwQQCCwUODNBOwwEHTMyMzsMBCBNOC9BF0kzMTU0TAY7Gk8oBgIBL1AaHRQZPAYdGgwEFighHBlDBhoLGT0GGwQoFh0LGwQhAgEHSQEHSQEHSQEHNykBBzQxASNkYXJ0OmRldmVsb3Blci1wYXRjaC9kZXZlbG9wZXIuZGFydEtvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vbGliL3RpbWVsaW5lLmRhcnSDci8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKLy8gcGFydCBvZiAiZGV2ZWxvcGVyLmRhcnQiOwoKQHBhdGNoCmJvb2wgX2lzRGFydFN0cmVhbUVuYWJsZWQoKSBuYXRpdmUgIlRpbWVsaW5lX2lzRGFydFN0cmVhbUVuYWJsZWQiOwoKQHBhdGNoCmludCBfZ2V0VHJhY2VDbG9jaygpIG5hdGl2ZSAiVGltZWxpbmVfZ2V0VHJhY2VDbG9jayI7CgpAcGF0Y2gKaW50IF9nZXROZXh0QXN5bmNJZCgpIG5hdGl2ZSAiVGltZWxpbmVfZ2V0TmV4dEFzeW5jSWQiOwoKQHBhdGNoCnZvaWQgX3JlcG9ydFRhc2tFdmVudChpbnQgdGFza0lkLCBTdHJpbmcgcGhhc2UsIFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG5hbWUsCiAgICBTdHJpbmcgYXJndW1lbnRzQXNKc29uKSBuYXRpdmUgIlRpbWVsaW5lX3JlcG9ydFRhc2tFdmVudCI7CgpAcGF0Y2gKdm9pZCBfcmVwb3J0Rmxvd0V2ZW50KFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG5hbWUsIGludCB0eXBlLCBpbnQgaWQsCiAgICBTdHJpbmcgYXJndW1lbnRzQXNKc29uKSBuYXRpdmUgIlRpbWVsaW5lX3JlcG9ydEZsb3dFdmVudCI7CgpAcGF0Y2gKdm9pZCBfcmVwb3J0SW5zdGFudEV2ZW50KFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG5hbWUsIFN0cmluZyBhcmd1bWVudHNBc0pzb24pCiAgICBuYXRpdmUgIlRpbWVsaW5lX3JlcG9ydEluc3RhbnRFdmVudCI7Ch4ATk48AQ8BHQEHQwEHNgEHOAEHTj8BB0Y/AQdPKgEiZGFydDpkZXZlbG9wZXItcGF0Y2gvdGltZWxpbmUuZGFydDlvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9mZmkvZmZpLmRhcnTAAFnOLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQoKLy8gQGRhcnQgPSAyLjYKCi8qKgogKiBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZSBmb3IgaW50ZXJvcGVyYWJpbGl0eSB3aXRoIHRoZSBDIHByb2dyYW1taW5nIGxhbmd1YWdlLgogKgogKiAqKk5PVEUqKjogRGFydDpGRkkgaXMgaW4gYmV0YSwgYW5kIGJyZWFraW5nIEFQSSBjaGFuZ2VzIG1pZ2h0IHN0aWxsIGhhcHBlbi4KICoKICogRm9yIGZ1cnRoZXIgZGV0YWlscywgcGxlYXNlIHNlZTogaHR0cHM6Ly9kYXJ0LmRldi9zZXJ2ZXIvYy1pbnRlcm9wCiAqCiAqIHtAY2F0ZWdvcnkgVk19CiAqLwpsaWJyYXJ5IGRhcnQuZmZpOwoKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwppbXBvcnQgJ2RhcnQ6aXNvbGF0ZSc7CgpwYXJ0ICJuYXRpdmVfdHlwZS5kYXJ0IjsKcGFydCAiYW5ub3RhdGlvbnMuZGFydCI7CnBhcnQgImR5bmFtaWNfbGlicmFyeS5kYXJ0IjsKcGFydCAic3RydWN0LmRhcnQiOwoKLy8vIE51bWJlciBvZiBieXRlcyB1c2VkIGJ5IG5hdGl2ZSB0eXBlIFQuCi8vLwovLy8gSW5jbHVkZXMgcGFkZGluZyBhbmQgYWxpZ25tZW50IG9mIHN0cnVjdHMuCmV4dGVybmFsIGludCBzaXplT2Y8VCBleHRlbmRzIE5hdGl2ZVR5cGU+KCk7CgovLy8gUmVwcmVzZW50cyBhIHBvaW50ZXIgaW50byB0aGUgbmF0aXZlIEMgbWVtb3J5IGNvcnJlc3BvbmRpbmcgdG8gIk5VTEwiLCBlLmcuCi8vLyBhIHBvaW50ZXIgd2l0aCBhZGRyZXNzIDAuCmZpbmFsIFBvaW50ZXI8TnVsbD4gbnVsbHB0ciA9IFBvaW50ZXIuZnJvbUFkZHJlc3MoMCk7CgovLy8gUmVwcmVzZW50cyBhIHBvaW50ZXIgaW50byB0aGUgbmF0aXZlIEMgbWVtb3J5LiBDYW5ub3QgYmUgZXh0ZW5kZWQuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgUG9pbnRlcjxUIGV4dGVuZHMgTmF0aXZlVHlwZT4gZXh0ZW5kcyBOYXRpdmVUeXBlIHsKICAvLy8gQ29uc3RydWN0aW9uIGZyb20gcmF3IGludGVnZXIuCiAgZXh0ZXJuYWwgZmFjdG9yeSBQb2ludGVyLmZyb21BZGRyZXNzKGludCBwdHIpOwoKICAvLy8gQ29udmVydCBEYXJ0IGZ1bmN0aW9uIHRvIGEgQyBmdW5jdGlvbiBwb2ludGVyLCBhdXRvbWF0aWNhbGx5IG1hcnNoYWxsaW5nCiAgLy8vIHRoZSBhcmd1bWVudHMgYW5kIHJldHVybiB2YWx1ZQogIC8vLwogIC8vLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIHdoaWxlIGNhbGxpbmcgYGYoKWAsIHRoZSBuYXRpdmUgZnVuY3Rpb24gd2lsbAogIC8vLyByZXR1cm4gYGV4Y2VwdGlvbmFsUmV0dXJuYCwgd2hpY2ggbXVzdCBiZSBhc3NpZ25hYmxlIHRvIHJldHVybiB0eXBlIG9mIGBmYC4KICAvLy8KICAvLy8gVGhlIHJldHVybmVkIGZ1bmN0aW9uIGFkZHJlc3MgY2FuIG9ubHkgYmUgaW52b2tlZCBvbiB0aGUgbXV0YXRvciAobWFpbikKICAvLy8gdGhyZWFkIG9mIHRoZSBjdXJyZW50IGlzb2xhdGUuIEl0IHdpbGwgYWJvcnQgdGhlIHByb2Nlc3MgaWYgaW52b2tlZCBvbiBhbnkKICAvLy8gb3RoZXIgdGhyZWFkLgogIC8vLwogIC8vLyBUaGUgcG9pbnRlciByZXR1cm5lZCB3aWxsIHJlbWFpbiBhbGl2ZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjdXJyZW50CiAgLy8vIGlzb2xhdGUncyBsaWZldGltZS4gQWZ0ZXIgdGhlIGlzb2xhdGUgaXQgd2FzIGNyZWF0ZWQgaW4gaXMgdGVybWluYXRlZCwKICAvLy8gaW52b2tpbmcgaXQgZnJvbSBuYXRpdmUgY29kZSB3aWxsIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvci4KICAvLy8KICAvLy8gRG9lcyBub3QgYWNjZXB0IGR5bmFtaWMgaW52b2NhdGlvbnMgLS0gd2hlcmUgdGhlIHR5cGUgb2YgdGhlIHJlY2VpdmVyIGlzCiAgLy8vIFtkeW5hbWljXS4KICBleHRlcm5hbCBzdGF0aWMgUG9pbnRlcjxOYXRpdmVGdW5jdGlvbjxUPj4gZnJvbUZ1bmN0aW9uPFQgZXh0ZW5kcyBGdW5jdGlvbj4oCiAgICAgIEBEYXJ0UmVwcmVzZW50YXRpb25PZigiVCIpIEZ1bmN0aW9uIGYsCiAgICAgIFtPYmplY3QgZXhjZXB0aW9uYWxSZXR1cm5dKTsKCiAgLy8vIEFjY2VzcyB0byB0aGUgcmF3IHBvaW50ZXIgdmFsdWUuCiAgLy8vIE9uIDMyLWJpdCBzeXN0ZW1zLCB0aGUgdXBwZXIgMzItYml0cyBvZiB0aGUgcmVzdWx0IGFyZSAwLgogIGV4dGVybmFsIGludCBnZXQgYWRkcmVzczsKCiAgLy8vIFBvaW50ZXIgYXJpdGhtZXRpYyAodGFrZXMgZWxlbWVudCBzaXplIGludG8gYWNjb3VudCkuCiAgZXh0ZXJuYWwgUG9pbnRlcjxUPiBlbGVtZW50QXQoaW50IGluZGV4KTsKCiAgLy8vIENhc3QgUG9pbnRlcjxUPiB0byBhIFBvaW50ZXI8Vj4uCiAgZXh0ZXJuYWwgUG9pbnRlcjxVPiBjYXN0PFUgZXh0ZW5kcyBOYXRpdmVUeXBlPigpOwoKICAvLy8gQ29udmVydCB0byBEYXJ0IGZ1bmN0aW9uLCBhdXRvbWF0aWNhbGx5IG1hcnNoYWxsaW5nIHRoZSBhcmd1bWVudHMKICAvLy8gYW5kIHJldHVybiB2YWx1ZS4KICAvLy8KICAvLy8gQ2FuIG9ubHkgYmUgY2FsbGVkIG9uIFtQb2ludGVyXTxbTmF0aXZlRnVuY3Rpb25dPi4gRG9lcyBub3QgYWNjZXB0IGR5bmFtaWMKICAvLy8gaW52b2NhdGlvbnMgLS0gd2hlcmUgdGhlIHR5cGUgb2YgdGhlIHJlY2VpdmVyIGlzIFtkeW5hbWljXS4KICBleHRlcm5hbCBSIGFzRnVuY3Rpb248QERhcnRSZXByZXNlbnRhdGlvbk9mKCJUIikgUiBleHRlbmRzIEZ1bmN0aW9uPigpOwoKICAvLy8gRXF1YWxpdHkgZm9yIFBvaW50ZXJzIG9ubHkgZGVwZW5kcyBvbiB0aGVpciBhZGRyZXNzLgogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChvdGhlciA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gYWRkcmVzcyA9PSBvdGhlci5hZGRyZXNzOwogIH0KCiAgLy8vIFRoZSBoYXNoIGNvZGUgZm9yIGEgUG9pbnRlciBvbmx5IGRlcGVuZHMgb24gaXRzIGFkZHJlc3MuCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gYWRkcmVzcy5oYXNoQ29kZTsKICB9Cn0KCi8vCi8vIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0IGJ5IGhhbmQuCi8vCi8vIENvZGUgZ2VuZXJhdGVkIGJ5IGBydW50aW1lL3Rvb2xzL2ZmaS9zZGtfbGliX2ZmaV9nZW5lcmF0b3IuZGFydGAuCi8vCgovLy8gRXh0ZW5zaW9uIG9uIFtQb2ludGVyXSBzcGVjaWFsaXplZCBmb3IgdGhlIHR5cGUgYXJndW1lbnQgW0ludDhdLgpleHRlbnNpb24gSW50OFBvaW50ZXIgb24gUG9pbnRlcjxJbnQ4PiB7CiAgLy8vIFRoZSA4LWJpdCB0d28ncyBjb21wbGVtZW50IGludGVnZXIgYXQgW2FkZHJlc3NdLgogIC8vLwogIC8vLyBBIERhcnQgaW50ZWdlciBpcyB0cnVuY2F0ZWQgdG8gOCBiaXRzIChhcyBpZiBieSBgLnRvU2lnbmVkKDgpYCkgYmVmb3JlCiAgLy8vIGJlaW5nIHN0b3JlZCwgYW5kIHRoZSA4LWJpdCB2YWx1ZSBpcyBzaWduLWV4dGVuZGVkIHdoZW4gaXQgaXMgbG9hZGVkLgogIGV4dGVybmFsIGludCBnZXQgdmFsdWU7CgogIC8vLyBUaGUgOC1iaXQgdHdvJ3MgY29tcGxlbWVudCBpbnRlZ2VyIGF0IFthZGRyZXNzXS4KICAvLy8KICAvLy8gQSBEYXJ0IGludGVnZXIgaXMgdHJ1bmNhdGVkIHRvIDggYml0cyAoYXMgaWYgYnkgYC50b1NpZ25lZCg4KWApIGJlZm9yZQogIC8vLyBiZWluZyBzdG9yZWQsIGFuZCB0aGUgOC1iaXQgdmFsdWUgaXMgc2lnbi1leHRlbmRlZCB3aGVuIGl0IGlzIGxvYWRlZC4KICBleHRlcm5hbCB2b2lkIHNldCB2YWx1ZShpbnQgdmFsdWUpOwoKICAvLy8gVGhlIDgtYml0IHR3bydzIGNvbXBsZW1lbnQgaW50ZWdlciBhdCBgYWRkcmVzcyArIGluZGV4YC4KICAvLy8KICAvLy8gQSBEYXJ0IGludGVnZXIgaXMgdHJ1bmNhdGVkIHRvIDggYml0cyAoYXMgaWYgYnkgYC50b1NpZ25lZCg4KWApIGJlZm9yZQogIC8vLyBiZWluZyBzdG9yZWQsIGFuZCB0aGUgOC1iaXQgdmFsdWUgaXMgc2lnbi1leHRlbmRlZCB3aGVuIGl0IGlzIGxvYWRlZC4KICBleHRlcm5hbCBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KTsKCiAgLy8vIFRoZSA4LWJpdCB0d28ncyBjb21wbGVtZW50IGludGVnZXIgYXQgYGFkZHJlc3MgKyBpbmRleGAuCiAgLy8vCiAgLy8vIEEgRGFydCBpbnRlZ2VyIGlzIHRydW5jYXRlZCB0byA4IGJpdHMgKGFzIGlmIGJ5IGAudG9TaWduZWQoOClgKSBiZWZvcmUKICAvLy8gYmVpbmcgc3RvcmVkLCBhbmQgdGhlIDgtYml0IHZhbHVlIGlzIHNpZ24tZXh0ZW5kZWQgd2hlbiBpdCBpcyBsb2FkZWQuCiAgZXh0ZXJuYWwgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpOwoKICAvLy8gQ3JlYXRlcyBhIHR5cGVkIGxpc3QgdmlldyBiYWNrZWQgYnkgbWVtb3J5IGluIHRoZSBhZGRyZXNzIHNwYWNlLgogIC8vLwogIC8vLyBUaGUgcmV0dXJuZWQgdmlldyB3aWxsIGFsbG93IGFjY2VzcyB0byB0aGUgbWVtb3J5IHJhbmdlIGZyb20gW2FkZHJlc3NdCiAgLy8vIHRvIGBhZGRyZXNzICsgbGVuZ3RoYC4KICAvLy8KICAvLy8gVGhlIHVzZXIgaGFzIHRvIGVuc3VyZSB0aGUgbWVtb3J5IHJhbmdlIGlzIGFjY2Vzc2libGUgd2hpbGUgdXNpbmcgdGhlCiAgLy8vIHJldHVybmVkIGxpc3QuCiAgZXh0ZXJuYWwgSW50OExpc3QgYXNUeXBlZExpc3QoaW50IGxlbmd0aCk7Cn0KCi8vLyBFeHRlbnNpb24gb24gW1BvaW50ZXJdIHNwZWNpYWxpemVkIGZvciB0aGUgdHlwZSBhcmd1bWVudCBbSW50MTZdLgpleHRlbnNpb24gSW50MTZQb2ludGVyIG9uIFBvaW50ZXI8SW50MTY+IHsKICAvLy8gVGhlIDE2LWJpdCB0d28ncyBjb21wbGVtZW50IGludGVnZXIgYXQgW2FkZHJlc3NdLgogIC8vLwogIC8vLyBBIERhcnQgaW50ZWdlciBpcyB0cnVuY2F0ZWQgdG8gMTYgYml0cyAoYXMgaWYgYnkgYC50b1NpZ25lZCgxNilgKSBiZWZvcmUKICAvLy8gYmVpbmcgc3RvcmVkLCBhbmQgdGhlIDE2LWJpdCB2YWx1ZSBpcyBzaWduLWV4dGVuZGVkIHdoZW4gaXQgaXMgbG9hZGVkLgogIC8vLwogIC8vLyBUaGUgW2FkZHJlc3NdIG11c3QgYmUgMi1ieXRlIGFsaWduZWQuCiAgZXh0ZXJuYWwgaW50IGdldCB2YWx1ZTsKCiAgLy8vIFRoZSAxNi1iaXQgdHdvJ3MgY29tcGxlbWVudCBpbnRlZ2VyIGF0IFthZGRyZXNzXS4KICAvLy8KICAvLy8gQSBEYXJ0IGludGVnZXIgaXMgdHJ1bmNhdGVkIHRvIDE2IGJpdHMgKGFzIGlmIGJ5IGAudG9TaWduZWQoMTYpYCkgYmVmb3JlCiAgLy8vIGJlaW5nIHN0b3JlZCwgYW5kIHRoZSAxNi1iaXQgdmFsdWUgaXMgc2lnbi1leHRlbmRlZCB3aGVuIGl0IGlzIGxvYWRlZC4KICAvLy8KICAvLy8gVGhlIFthZGRyZXNzXSBtdXN0IGJlIDItYnl0ZSBhbGlnbmVkLgogIGV4dGVybmFsIHZvaWQgc2V0IHZhbHVlKGludCB2YWx1ZSk7CgogIC8vLyBUaGUgMTYtYml0IHR3bydzIGNvbXBsZW1lbnQgaW50ZWdlciBhdCBgYWRkcmVzcyArIDIgKiBpbmRleGAuCiAgLy8vCiAgLy8vIEEgRGFydCBpbnRlZ2VyIGlzIHRydW5jYXRlZCB0byAxNiBiaXRzIChhcyBpZiBieSBgLnRvU2lnbmVkKDE2KWApIGJlZm9yZQogIC8vLyBiZWluZyBzdG9yZWQsIGFuZCB0aGUgMTYtYml0IHZhbHVlIGlzIHNpZ24tZXh0ZW5kZWQgd2hlbiBpdCBpcyBsb2FkZWQuCiAgLy8vCiAgLy8vIFRoZSBbYWRkcmVzc10gbXVzdCBiZSAyLWJ5dGUgYWxpZ25lZC4KICBleHRlcm5hbCBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KTsKCiAgLy8vIFRoZSAxNi1iaXQgdHdvJ3MgY29tcGxlbWVudCBpbnRlZ2VyIGF0IGBhZGRyZXNzICsgMiAqIGluZGV4YC4KICAvLy8KICAvLy8gQSBEYXJ0IGludGVnZXIgaXMgdHJ1bmNhdGVkIHRvIDE2IGJpdHMgKGFzIGlmIGJ5IGAudG9TaWduZWQoMTYpYCkgYmVmb3JlCiAgLy8vIGJlaW5nIHN0b3JlZCwgYW5kIHRoZSAxNi1iaXQgdmFsdWUgaXMgc2lnbi1leHRlbmRlZCB3aGVuIGl0IGlzIGxvYWRlZC4KICAvLy8KICAvLy8gVGhlIFthZGRyZXNzXSBtdXN0IGJlIDItYnl0ZSBhbGlnbmVkLgogIGV4dGVybmFsIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKTsKCiAgLy8vIENyZWF0ZXMgYSB0eXBlZCBsaXN0IHZpZXcgYmFja2VkIGJ5IG1lbW9yeSBpbiB0aGUgYWRkcmVzcyBzcGFjZS4KICAvLy8KICAvLy8gVGhlIHJldHVybmVkIHZpZXcgd2lsbCBhbGxvdyBhY2Nlc3MgdG8gdGhlIG1lbW9yeSByYW5nZSBmcm9tIFthZGRyZXNzXQogIC8vLyB0byBgYWRkcmVzcyArIDIgKiBsZW5ndGhgLgogIC8vLwogIC8vLyBUaGUgdXNlciBoYXMgdG8gZW5zdXJlIHRoZSBtZW1vcnkgcmFuZ2UgaXMgYWNjZXNzaWJsZSB3aGlsZSB1c2luZyB0aGUKICAvLy8gcmV0dXJuZWQgbGlzdC4KICAvLy8KICAvLy8gVGhlIFthZGRyZXNzXSBtdXN0IGJlIDItYnl0ZSBhbGlnbmVkLgogIGV4dGVybmFsIEludDE2TGlzdCBhc1R5cGVkTGlzdChpbnQgbGVuZ3RoKTsKfQoKLy8vIEV4dGVuc2lvbiBvbiBbUG9pbnRlcl0gc3BlY2lhbGl6ZWQgZm9yIHRoZSB0eXBlIGFyZ3VtZW50IFtJbnQzMl0uCmV4dGVuc2lvbiBJbnQzMlBvaW50ZXIgb24gUG9pbnRlcjxJbnQzMj4gewogIC8vLyBUaGUgMzItYml0IHR3bydzIGNvbXBsZW1lbnQgaW50ZWdlciBhdCBbYWRkcmVzc10uCiAgLy8vCiAgLy8vIEEgRGFydCBpbnRlZ2VyIGlzIHRydW5jYXRlZCB0byAzMiBiaXRzIChhcyBpZiBieSBgLnRvU2lnbmVkKDMyKWApIGJlZm9yZQogIC8vLyBiZWluZyBzdG9yZWQsIGFuZCB0aGUgMzItYml0IHZhbHVlIGlzIHNpZ24tZXh0ZW5kZWQgd2hlbiBpdCBpcyBsb2FkZWQuCiAgLy8vCiAgLy8vIFRoZSBbYWRkcmVzc10gbXVzdCBiZSA0LWJ5dGUgYWxpZ25lZC4KICBleHRlcm5hbCBpbnQgZ2V0IHZhbHVlOwoKICAvLy8gVGhlIDMyLWJpdCB0d28ncyBjb21wbGVtZW50IGludGVnZXIgYXQgW2FkZHJlc3NdLgogIC8vLwogIC8vLyBBIERhcnQgaW50ZWdlciBpcyB0cnVuY2F0ZWQgdG8gMzIgYml0cyAoYXMgaWYgYnkgYC50b1NpZ25lZCgzMilgKSBiZWZvcmUKICAvLy8gYmVpbmcgc3RvcmVkLCBhbmQgdGhlIDMyLWJpdCB2YWx1ZSBpcyBzaWduLWV4dGVuZGVkIHdoZW4gaXQgaXMgbG9hZGVkLgogIC8vLwogIC8vLyBUaGUgW2FkZHJlc3NdIG11c3QgYmUgNC1ieXRlIGFsaWduZWQuCiAgZXh0ZXJuYWwgdm9pZCBzZXQgdmFsdWUoaW50IHZhbHVlKTsKCiAgLy8vIFRoZSAzMi1iaXQgdHdvJ3MgY29tcGxlbWVudCBpbnRlZ2VyIGF0IGBhZGRyZXNzICsgNCAqIGluZGV4YC4KICAvLy8KICAvLy8gQSBEYXJ0IGludGVnZXIgaXMgdHJ1bmNhdGVkIHRvIDMyIGJpdHMgKGFzIGlmIGJ5IGAudG9TaWduZWQoMzIpYCkgYmVmb3JlCiAgLy8vIGJlaW5nIHN0b3JlZCwgYW5kIHRoZSAzMi1iaXQgdmFsdWUgaXMgc2lnbi1leHRlbmRlZCB3aGVuIGl0IGlzIGxvYWRlZC4KICAvLy8KICAvLy8gVGhlIFthZGRyZXNzXSBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkLgogIGV4dGVybmFsIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpOwoKICAvLy8gVGhlIDMyLWJpdCB0d28ncyBjb21wbGVtZW50IGludGVnZXIgYXQgYGFkZHJlc3MgKyA0ICogaW5kZXhgLgogIC8vLwogIC8vLyBBIERhcnQgaW50ZWdlciBpcyB0cnVuY2F0ZWQgdG8gMzIgYml0cyAoYXMgaWYgYnkgYC50b1NpZ25lZCgzMilgKSBiZWZvcmUKICAvLy8gYmVpbmcgc3RvcmVkLCBhbmQgdGhlIDMyLWJpdCB2YWx1ZSBpcyBzaWduLWV4dGVuZGVkIHdoZW4gaXQgaXMgbG9hZGVkLgogIC8vLwogIC8vLyBUaGUgW2FkZHJlc3NdIG11c3QgYmUgNC1ieXRlIGFsaWduZWQuCiAgZXh0ZXJuYWwgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpOwoKICAvLy8gQ3JlYXRlcyBhIHR5cGVkIGxpc3QgdmlldyBiYWNrZWQgYnkgbWVtb3J5IGluIHRoZSBhZGRyZXNzIHNwYWNlLgogIC8vLwogIC8vLyBUaGUgcmV0dXJuZWQgdmlldyB3aWxsIGFsbG93IGFjY2VzcyB0byB0aGUgbWVtb3J5IHJhbmdlIGZyb20gW2FkZHJlc3NdCiAgLy8vIHRvIGBhZGRyZXNzICsgNCAqIGxlbmd0aGAuCiAgLy8vCiAgLy8vIFRoZSB1c2VyIGhhcyB0byBlbnN1cmUgdGhlIG1lbW9yeSByYW5nZSBpcyBhY2Nlc3NpYmxlIHdoaWxlIHVzaW5nIHRoZQogIC8vLyByZXR1cm5lZCBsaXN0LgogIC8vLwogIC8vLyBUaGUgW2FkZHJlc3NdIG11c3QgYmUgNC1ieXRlIGFsaWduZWQuCiAgZXh0ZXJuYWwgSW50MzJMaXN0IGFzVHlwZWRMaXN0KGludCBsZW5ndGgpOwp9CgovLy8gRXh0ZW5zaW9uIG9uIFtQb2ludGVyXSBzcGVjaWFsaXplZCBmb3IgdGhlIHR5cGUgYXJndW1lbnQgW0ludDY0XS4KZXh0ZW5zaW9uIEludDY0UG9pbnRlciBvbiBQb2ludGVyPEludDY0PiB7CiAgLy8vIFRoZSA2NC1iaXQgdHdvJ3MgY29tcGxlbWVudCBpbnRlZ2VyIGF0IFthZGRyZXNzXS4KICAvLy8KICAvLy8gVGhlIFthZGRyZXNzXSBtdXN0IGJlIDgtYnl0ZSBhbGlnbmVkLgogIGV4dGVybmFsIGludCBnZXQgdmFsdWU7CgogIC8vLyBUaGUgNjQtYml0IHR3bydzIGNvbXBsZW1lbnQgaW50ZWdlciBhdCBbYWRkcmVzc10uCiAgLy8vCiAgLy8vIFRoZSBbYWRkcmVzc10gbXVzdCBiZSA4LWJ5dGUgYWxpZ25lZC4KICBleHRlcm5hbCB2b2lkIHNldCB2YWx1ZShpbnQgdmFsdWUpOwoKICAvLy8gVGhlIDY0LWJpdCB0d28ncyBjb21wbGVtZW50IGludGVnZXIgYXQgYGFkZHJlc3MgKyA4ICogaW5kZXhgLgogIC8vLwogIC8vLyBUaGUgW2FkZHJlc3NdIG11c3QgYmUgOC1ieXRlIGFsaWduZWQuCiAgZXh0ZXJuYWwgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCk7CgogIC8vLyBUaGUgNjQtYml0IHR3bydzIGNvbXBsZW1lbnQgaW50ZWdlciBhdCBgYWRkcmVzcyArIDggKiBpbmRleGAuCiAgLy8vCiAgLy8vIFRoZSBbYWRkcmVzc10gbXVzdCBiZSA4LWJ5dGUgYWxpZ25lZC4KICBleHRlcm5hbCB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSk7CgogIC8vLyBDcmVhdGVzIGEgdHlwZWQgbGlzdCB2aWV3IGJhY2tlZCBieSBtZW1vcnkgaW4gdGhlIGFkZHJlc3Mgc3BhY2UuCiAgLy8vCiAgLy8vIFRoZSByZXR1cm5lZCB2aWV3IHdpbGwgYWxsb3cgYWNjZXNzIHRvIHRoZSBtZW1vcnkgcmFuZ2UgZnJvbSBbYWRkcmVzc10KICAvLy8gdG8gYGFkZHJlc3MgKyA4ICogbGVuZ3RoYC4KICAvLy8KICAvLy8gVGhlIHVzZXIgaGFzIHRvIGVuc3VyZSB0aGUgbWVtb3J5IHJhbmdlIGlzIGFjY2Vzc2libGUgd2hpbGUgdXNpbmcgdGhlCiAgLy8vIHJldHVybmVkIGxpc3QuCiAgLy8vCiAgLy8vIFRoZSBbYWRkcmVzc10gbXVzdCBiZSA4LWJ5dGUgYWxpZ25lZC4KICBleHRlcm5hbCBJbnQ2NExpc3QgYXNUeXBlZExpc3QoaW50IGxlbmd0aCk7Cn0KCi8vLyBFeHRlbnNpb24gb24gW1BvaW50ZXJdIHNwZWNpYWxpemVkIGZvciB0aGUgdHlwZSBhcmd1bWVudCBbVWludDhdLgpleHRlbnNpb24gVWludDhQb2ludGVyIG9uIFBvaW50ZXI8VWludDg+IHsKICAvLy8gVGhlIDgtYml0IHVuc2lnbmVkIGludGVnZXIgYXQgW2FkZHJlc3NdLgogIC8vLwogIC8vLyBBIERhcnQgaW50ZWdlciBpcyB0cnVuY2F0ZWQgdG8gOCBiaXRzIChhcyBpZiBieSBgLnRvVW5zaWduZWQoOClgKSBiZWZvcmUKICAvLy8gYmVpbmcgc3RvcmVkLCBhbmQgdGhlIDgtYml0IHZhbHVlIGlzIHplcm8tZXh0ZW5kZWQgd2hlbiBpdCBpcyBsb2FkZWQuCiAgZXh0ZXJuYWwgaW50IGdldCB2YWx1ZTsKCiAgLy8vIFRoZSA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGF0IFthZGRyZXNzXS4KICAvLy8KICAvLy8gQSBEYXJ0IGludGVnZXIgaXMgdHJ1bmNhdGVkIHRvIDggYml0cyAoYXMgaWYgYnkgYC50b1Vuc2lnbmVkKDgpYCkgYmVmb3JlCiAgLy8vIGJlaW5nIHN0b3JlZCwgYW5kIHRoZSA4LWJpdCB2YWx1ZSBpcyB6ZXJvLWV4dGVuZGVkIHdoZW4gaXQgaXMgbG9hZGVkLgogIGV4dGVybmFsIHZvaWQgc2V0IHZhbHVlKGludCB2YWx1ZSk7CgogIC8vLyBUaGUgOC1iaXQgdW5zaWduZWQgaW50ZWdlciBhdCBgYWRkcmVzcyArIGluZGV4YC4KICAvLy8KICAvLy8gQSBEYXJ0IGludGVnZXIgaXMgdHJ1bmNhdGVkIHRvIDggYml0cyAoYXMgaWYgYnkgYC50b1Vuc2lnbmVkKDgpYCkgYmVmb3JlCiAgLy8vIGJlaW5nIHN0b3JlZCwgYW5kIHRoZSA4LWJpdCB2YWx1ZSBpcyB6ZXJvLWV4dGVuZGVkIHdoZW4gaXQgaXMgbG9hZGVkLgogIGV4dGVybmFsIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpOwoKICAvLy8gVGhlIDgtYml0IHVuc2lnbmVkIGludGVnZXIgYXQgYGFkZHJlc3MgKyBpbmRleGAuCiAgLy8vCiAgLy8vIEEgRGFydCBpbnRlZ2VyIGlzIHRydW5jYXRlZCB0byA4IGJpdHMgKGFzIGlmIGJ5IGAudG9VbnNpZ25lZCg4KWApIGJlZm9yZQogIC8vLyBiZWluZyBzdG9yZWQsIGFuZCB0aGUgOC1iaXQgdmFsdWUgaXMgemVyby1leHRlbmRlZCB3aGVuIGl0IGlzIGxvYWRlZC4KICBleHRlcm5hbCB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSk7CgogIC8vLyBDcmVhdGVzIGEgdHlwZWQgbGlzdCB2aWV3IGJhY2tlZCBieSBtZW1vcnkgaW4gdGhlIGFkZHJlc3Mgc3BhY2UuCiAgLy8vCiAgLy8vIFRoZSByZXR1cm5lZCB2aWV3IHdpbGwgYWxsb3cgYWNjZXNzIHRvIHRoZSBtZW1vcnkgcmFuZ2UgZnJvbSBbYWRkcmVzc10KICAvLy8gdG8gYGFkZHJlc3MgKyBsZW5ndGhgLgogIC8vLwogIC8vLyBUaGUgdXNlciBoYXMgdG8gZW5zdXJlIHRoZSBtZW1vcnkgcmFuZ2UgaXMgYWNjZXNzaWJsZSB3aGlsZSB1c2luZyB0aGUKICAvLy8gcmV0dXJuZWQgbGlzdC4KICBleHRlcm5hbCBVaW50OExpc3QgYXNUeXBlZExpc3QoaW50IGxlbmd0aCk7Cn0KCi8vLyBFeHRlbnNpb24gb24gW1BvaW50ZXJdIHNwZWNpYWxpemVkIGZvciB0aGUgdHlwZSBhcmd1bWVudCBbVWludDE2XS4KZXh0ZW5zaW9uIFVpbnQxNlBvaW50ZXIgb24gUG9pbnRlcjxVaW50MTY+IHsKICAvLy8gVGhlIDE2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGF0IFthZGRyZXNzXS4KICAvLy8KICAvLy8gQSBEYXJ0IGludGVnZXIgaXMgdHJ1bmNhdGVkIHRvIDE2IGJpdHMgKGFzIGlmIGJ5IGAudG9VbnNpZ25lZCgxNilgKSBiZWZvcmUKICAvLy8gYmVpbmcgc3RvcmVkLCBhbmQgdGhlIDE2LWJpdCB2YWx1ZSBpcyB6ZXJvLWV4dGVuZGVkIHdoZW4gaXQgaXMgbG9hZGVkLgogIC8vLwogIC8vLyBUaGUgW2FkZHJlc3NdIG11c3QgYmUgMi1ieXRlIGFsaWduZWQuCiAgZXh0ZXJuYWwgaW50IGdldCB2YWx1ZTsKCiAgLy8vIFRoZSAxNi1iaXQgdW5zaWduZWQgaW50ZWdlciBhdCBbYWRkcmVzc10uCiAgLy8vCiAgLy8vIEEgRGFydCBpbnRlZ2VyIGlzIHRydW5jYXRlZCB0byAxNiBiaXRzIChhcyBpZiBieSBgLnRvVW5zaWduZWQoMTYpYCkgYmVmb3JlCiAgLy8vIGJlaW5nIHN0b3JlZCwgYW5kIHRoZSAxNi1iaXQgdmFsdWUgaXMgemVyby1leHRlbmRlZCB3aGVuIGl0IGlzIGxvYWRlZC4KICAvLy8KICAvLy8gVGhlIFthZGRyZXNzXSBtdXN0IGJlIDItYnl0ZSBhbGlnbmVkLgogIGV4dGVybmFsIHZvaWQgc2V0IHZhbHVlKGludCB2YWx1ZSk7CgogIC8vLyBUaGUgMTYtYml0IHVuc2lnbmVkIGludGVnZXIgYXQgYGFkZHJlc3MgKyAyICogaW5kZXhgLgogIC8vLwogIC8vLyBBIERhcnQgaW50ZWdlciBpcyB0cnVuY2F0ZWQgdG8gMTYgYml0cyAoYXMgaWYgYnkgYC50b1Vuc2lnbmVkKDE2KWApIGJlZm9yZQogIC8vLyBiZWluZyBzdG9yZWQsIGFuZCB0aGUgMTYtYml0IHZhbHVlIGlzIHplcm8tZXh0ZW5kZWQgd2hlbiBpdCBpcyBsb2FkZWQuCiAgLy8vCiAgLy8vIFRoZSBbYWRkcmVzc10gbXVzdCBiZSAyLWJ5dGUgYWxpZ25lZC4KICBleHRlcm5hbCBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KTsKCiAgLy8vIFRoZSAxNi1iaXQgdW5zaWduZWQgaW50ZWdlciBhdCBgYWRkcmVzcyArIDIgKiBpbmRleGAuCiAgLy8vCiAgLy8vIEEgRGFydCBpbnRlZ2VyIGlzIHRydW5jYXRlZCB0byAxNiBiaXRzIChhcyBpZiBieSBgLnRvVW5zaWduZWQoMTYpYCkgYmVmb3JlCiAgLy8vIGJlaW5nIHN0b3JlZCwgYW5kIHRoZSAxNi1iaXQgdmFsdWUgaXMgemVyby1leHRlbmRlZCB3aGVuIGl0IGlzIGxvYWRlZC4KICAvLy8KICAvLy8gVGhlIFthZGRyZXNzXSBtdXN0IGJlIDItYnl0ZSBhbGlnbmVkLgogIGV4dGVybmFsIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKTsKCiAgLy8vIENyZWF0ZXMgYSB0eXBlZCBsaXN0IHZpZXcgYmFja2VkIGJ5IG1lbW9yeSBpbiB0aGUgYWRkcmVzcyBzcGFjZS4KICAvLy8KICAvLy8gVGhlIHJldHVybmVkIHZpZXcgd2lsbCBhbGxvdyBhY2Nlc3MgdG8gdGhlIG1lbW9yeSByYW5nZSBmcm9tIFthZGRyZXNzXQogIC8vLyB0byBgYWRkcmVzcyArIDIgKiBsZW5ndGhgLgogIC8vLwogIC8vLyBUaGUgdXNlciBoYXMgdG8gZW5zdXJlIHRoZSBtZW1vcnkgcmFuZ2UgaXMgYWNjZXNzaWJsZSB3aGlsZSB1c2luZyB0aGUKICAvLy8gcmV0dXJuZWQgbGlzdC4KICAvLy8KICAvLy8gVGhlIFthZGRyZXNzXSBtdXN0IGJlIDItYnl0ZSBhbGlnbmVkLgogIGV4dGVybmFsIFVpbnQxNkxpc3QgYXNUeXBlZExpc3QoaW50IGxlbmd0aCk7Cn0KCi8vLyBFeHRlbnNpb24gb24gW1BvaW50ZXJdIHNwZWNpYWxpemVkIGZvciB0aGUgdHlwZSBhcmd1bWVudCBbVWludDMyXS4KZXh0ZW5zaW9uIFVpbnQzMlBvaW50ZXIgb24gUG9pbnRlcjxVaW50MzI+IHsKICAvLy8gVGhlIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGF0IFthZGRyZXNzXS4KICAvLy8KICAvLy8gQSBEYXJ0IGludGVnZXIgaXMgdHJ1bmNhdGVkIHRvIDMyIGJpdHMgKGFzIGlmIGJ5IGAudG9VbnNpZ25lZCgzMilgKSBiZWZvcmUKICAvLy8gYmVpbmcgc3RvcmVkLCBhbmQgdGhlIDMyLWJpdCB2YWx1ZSBpcyB6ZXJvLWV4dGVuZGVkIHdoZW4gaXQgaXMgbG9hZGVkLgogIC8vLwogIC8vLyBUaGUgW2FkZHJlc3NdIG11c3QgYmUgNC1ieXRlIGFsaWduZWQuCiAgZXh0ZXJuYWwgaW50IGdldCB2YWx1ZTsKCiAgLy8vIFRoZSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciBhdCBbYWRkcmVzc10uCiAgLy8vCiAgLy8vIEEgRGFydCBpbnRlZ2VyIGlzIHRydW5jYXRlZCB0byAzMiBiaXRzIChhcyBpZiBieSBgLnRvVW5zaWduZWQoMzIpYCkgYmVmb3JlCiAgLy8vIGJlaW5nIHN0b3JlZCwgYW5kIHRoZSAzMi1iaXQgdmFsdWUgaXMgemVyby1leHRlbmRlZCB3aGVuIGl0IGlzIGxvYWRlZC4KICAvLy8KICAvLy8gVGhlIFthZGRyZXNzXSBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkLgogIGV4dGVybmFsIHZvaWQgc2V0IHZhbHVlKGludCB2YWx1ZSk7CgogIC8vLyBUaGUgMzItYml0IHVuc2lnbmVkIGludGVnZXIgYXQgYGFkZHJlc3MgKyA0ICogaW5kZXhgLgogIC8vLwogIC8vLyBBIERhcnQgaW50ZWdlciBpcyB0cnVuY2F0ZWQgdG8gMzIgYml0cyAoYXMgaWYgYnkgYC50b1Vuc2lnbmVkKDMyKWApIGJlZm9yZQogIC8vLyBiZWluZyBzdG9yZWQsIGFuZCB0aGUgMzItYml0IHZhbHVlIGlzIHplcm8tZXh0ZW5kZWQgd2hlbiBpdCBpcyBsb2FkZWQuCiAgLy8vCiAgLy8vIFRoZSBbYWRkcmVzc10gbXVzdCBiZSA0LWJ5dGUgYWxpZ25lZC4KICBleHRlcm5hbCBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KTsKCiAgLy8vIFRoZSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciBhdCBgYWRkcmVzcyArIDQgKiBpbmRleGAuCiAgLy8vCiAgLy8vIEEgRGFydCBpbnRlZ2VyIGlzIHRydW5jYXRlZCB0byAzMiBiaXRzIChhcyBpZiBieSBgLnRvVW5zaWduZWQoMzIpYCkgYmVmb3JlCiAgLy8vIGJlaW5nIHN0b3JlZCwgYW5kIHRoZSAzMi1iaXQgdmFsdWUgaXMgemVyby1leHRlbmRlZCB3aGVuIGl0IGlzIGxvYWRlZC4KICAvLy8KICAvLy8gVGhlIFthZGRyZXNzXSBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkLgogIGV4dGVybmFsIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKTsKCiAgLy8vIENyZWF0ZXMgYSB0eXBlZCBsaXN0IHZpZXcgYmFja2VkIGJ5IG1lbW9yeSBpbiB0aGUgYWRkcmVzcyBzcGFjZS4KICAvLy8KICAvLy8gVGhlIHJldHVybmVkIHZpZXcgd2lsbCBhbGxvdyBhY2Nlc3MgdG8gdGhlIG1lbW9yeSByYW5nZSBmcm9tIFthZGRyZXNzXQogIC8vLyB0byBgYWRkcmVzcyArIDQgKiBsZW5ndGhgLgogIC8vLwogIC8vLyBUaGUgdXNlciBoYXMgdG8gZW5zdXJlIHRoZSBtZW1vcnkgcmFuZ2UgaXMgYWNjZXNzaWJsZSB3aGlsZSB1c2luZyB0aGUKICAvLy8gcmV0dXJuZWQgbGlzdC4KICAvLy8KICAvLy8gVGhlIFthZGRyZXNzXSBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkLgogIGV4dGVybmFsIFVpbnQzMkxpc3QgYXNUeXBlZExpc3QoaW50IGxlbmd0aCk7Cn0KCi8vLyBFeHRlbnNpb24gb24gW1BvaW50ZXJdIHNwZWNpYWxpemVkIGZvciB0aGUgdHlwZSBhcmd1bWVudCBbVWludDY0XS4KZXh0ZW5zaW9uIFVpbnQ2NFBvaW50ZXIgb24gUG9pbnRlcjxVaW50NjQ+IHsKICAvLy8gVGhlIDY0LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGF0IFthZGRyZXNzXS4KICAvLy8KICAvLy8gVGhlIFthZGRyZXNzXSBtdXN0IGJlIDgtYnl0ZSBhbGlnbmVkLgogIGV4dGVybmFsIGludCBnZXQgdmFsdWU7CgogIC8vLyBUaGUgNjQtYml0IHVuc2lnbmVkIGludGVnZXIgYXQgW2FkZHJlc3NdLgogIC8vLwogIC8vLyBUaGUgW2FkZHJlc3NdIG11c3QgYmUgOC1ieXRlIGFsaWduZWQuCiAgZXh0ZXJuYWwgdm9pZCBzZXQgdmFsdWUoaW50IHZhbHVlKTsKCiAgLy8vIFRoZSA2NC1iaXQgdW5zaWduZWQgaW50ZWdlciBhdCBgYWRkcmVzcyArIDggKiBpbmRleGAuCiAgLy8vCiAgLy8vIFRoZSBbYWRkcmVzc10gbXVzdCBiZSA4LWJ5dGUgYWxpZ25lZC4KICBleHRlcm5hbCBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KTsKCiAgLy8vIFRoZSA2NC1iaXQgdW5zaWduZWQgaW50ZWdlciBhdCBgYWRkcmVzcyArIDggKiBpbmRleGAuCiAgLy8vCiAgLy8vIFRoZSBbYWRkcmVzc10gbXVzdCBiZSA4LWJ5dGUgYWxpZ25lZC4KICBleHRlcm5hbCB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSk7CgogIC8vLyBDcmVhdGVzIGEgdHlwZWQgbGlzdCB2aWV3IGJhY2tlZCBieSBtZW1vcnkgaW4gdGhlIGFkZHJlc3Mgc3BhY2UuCiAgLy8vCiAgLy8vIFRoZSByZXR1cm5lZCB2aWV3IHdpbGwgYWxsb3cgYWNjZXNzIHRvIHRoZSBtZW1vcnkgcmFuZ2UgZnJvbSBbYWRkcmVzc10KICAvLy8gdG8gYGFkZHJlc3MgKyA4ICogbGVuZ3RoYC4KICAvLy8KICAvLy8gVGhlIHVzZXIgaGFzIHRvIGVuc3VyZSB0aGUgbWVtb3J5IHJhbmdlIGlzIGFjY2Vzc2libGUgd2hpbGUgdXNpbmcgdGhlCiAgLy8vIHJldHVybmVkIGxpc3QuCiAgLy8vCiAgLy8vIFRoZSBbYWRkcmVzc10gbXVzdCBiZSA4LWJ5dGUgYWxpZ25lZC4KICBleHRlcm5hbCBVaW50NjRMaXN0IGFzVHlwZWRMaXN0KGludCBsZW5ndGgpOwp9CgovLy8gRXh0ZW5zaW9uIG9uIFtQb2ludGVyXSBzcGVjaWFsaXplZCBmb3IgdGhlIHR5cGUgYXJndW1lbnQgW0ludFB0cl0uCmV4dGVuc2lvbiBJbnRQdHJQb2ludGVyIG9uIFBvaW50ZXI8SW50UHRyPiB7CiAgLy8vIFRoZSAzMiBvciA2NC1iaXQgdHdvJ3MgY29tcGxlbWVudCBpbnRlZ2VyIGF0IFthZGRyZXNzXS4KICAvLy8KICAvLy8gT24gMzItYml0IHBsYXRmb3JtcyB0aGlzIGlzIGEgMzItYml0IGludGVnZXIsIGFuZCBvbiA2NC1iaXQgcGxhdGZvcm1zCiAgLy8vIHRoaXMgaXMgYSA2NC1iaXQgaW50ZWdlci4KICAvLy8KICAvLy8gT24gMzItYml0IHBsYXRmb3JtcyBhIERhcnQgaW50ZWdlciBpcyB0cnVuY2F0ZWQgdG8gMzIgYml0cyAoYXMgaWYgYnkKICAvLy8gYC50b1NpZ25lZCgzMilgKSBiZWZvcmUgYmVpbmcgc3RvcmVkLCBhbmQgdGhlIDMyLWJpdCB2YWx1ZSBpcwogIC8vLyBzaWduLWV4dGVuZGVkIHdoZW4gaXQgaXMgbG9hZGVkLgogIC8vLwogIC8vLyBPbiAzMi1iaXQgcGxhdGZvcm1zIHRoZSBbYWRkcmVzc10gbXVzdCBiZSA0LWJ5dGUgYWxpZ25lZCwgYW5kIG9uIDY0LWJpdAogIC8vLyBwbGF0Zm9ybXMgdGhlIFthZGRyZXNzXSBtdXN0IGJlIDgtYnl0ZSBhbGlnbmVkLgogIGV4dGVybmFsIGludCBnZXQgdmFsdWU7CgogIC8vLyBUaGUgMzIgb3IgNjQtYml0IHR3bydzIGNvbXBsZW1lbnQgaW50ZWdlciBhdCBbYWRkcmVzc10uCiAgLy8vCiAgLy8vIE9uIDMyLWJpdCBwbGF0Zm9ybXMgdGhpcyBpcyBhIDMyLWJpdCBpbnRlZ2VyLCBhbmQgb24gNjQtYml0IHBsYXRmb3JtcwogIC8vLyB0aGlzIGlzIGEgNjQtYml0IGludGVnZXIuCiAgLy8vCiAgLy8vIE9uIDMyLWJpdCBwbGF0Zm9ybXMgYSBEYXJ0IGludGVnZXIgaXMgdHJ1bmNhdGVkIHRvIDMyIGJpdHMgKGFzIGlmIGJ5CiAgLy8vIGAudG9TaWduZWQoMzIpYCkgYmVmb3JlIGJlaW5nIHN0b3JlZCwgYW5kIHRoZSAzMi1iaXQgdmFsdWUgaXMKICAvLy8gc2lnbi1leHRlbmRlZCB3aGVuIGl0IGlzIGxvYWRlZC4KICAvLy8KICAvLy8gT24gMzItYml0IHBsYXRmb3JtcyB0aGUgW2FkZHJlc3NdIG11c3QgYmUgNC1ieXRlIGFsaWduZWQsIGFuZCBvbiA2NC1iaXQKICAvLy8gcGxhdGZvcm1zIHRoZSBbYWRkcmVzc10gbXVzdCBiZSA4LWJ5dGUgYWxpZ25lZC4KICBleHRlcm5hbCB2b2lkIHNldCB2YWx1ZShpbnQgdmFsdWUpOwoKICAvLy8gVGhlIDMyIG9yIDY0LWJpdCB0d28ncyBjb21wbGVtZW50IGludGVnZXIgYXQgYGFkZHJlc3MgKyAoNCBvciA4KSAqIGluZGV4YC4KICAvLy8KICAvLy8gT24gMzItYml0IHBsYXRmb3JtcyB0aGlzIGlzIGEgMzItYml0IGludGVnZXIsIGFuZCBvbiA2NC1iaXQgcGxhdGZvcm1zCiAgLy8vIHRoaXMgaXMgYSA2NC1iaXQgaW50ZWdlci4KICAvLy8KICAvLy8gT24gMzItYml0IHBsYXRmb3JtcyBhIERhcnQgaW50ZWdlciBpcyB0cnVuY2F0ZWQgdG8gMzIgYml0cyAoYXMgaWYgYnkKICAvLy8gYC50b1NpZ25lZCgzMilgKSBiZWZvcmUgYmVpbmcgc3RvcmVkLCBhbmQgdGhlIDMyLWJpdCB2YWx1ZSBpcwogIC8vLyBzaWduLWV4dGVuZGVkIHdoZW4gaXQgaXMgbG9hZGVkLgogIC8vLwogIC8vLyBPbiAzMi1iaXQgcGxhdGZvcm1zIHRoZSBbYWRkcmVzc10gbXVzdCBiZSA0LWJ5dGUgYWxpZ25lZCwgYW5kIG9uIDY0LWJpdAogIC8vLyBwbGF0Zm9ybXMgdGhlIFthZGRyZXNzXSBtdXN0IGJlIDgtYnl0ZSBhbGlnbmVkLgogIGV4dGVybmFsIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpOwoKICAvLy8gVGhlIDMyIG9yIDY0LWJpdCB0d28ncyBjb21wbGVtZW50IGludGVnZXIgYXQgYGFkZHJlc3MgKyAoNCBvciA4KSAqIGluZGV4YC4KICAvLy8KICAvLy8gT24gMzItYml0IHBsYXRmb3JtcyB0aGlzIGlzIGEgMzItYml0IGludGVnZXIsIGFuZCBvbiA2NC1iaXQgcGxhdGZvcm1zCiAgLy8vIHRoaXMgaXMgYSA2NC1iaXQgaW50ZWdlci4KICAvLy8KICAvLy8gT24gMzItYml0IHBsYXRmb3JtcyBhIERhcnQgaW50ZWdlciBpcyB0cnVuY2F0ZWQgdG8gMzIgYml0cyAoYXMgaWYgYnkKICAvLy8gYC50b1NpZ25lZCgzMilgKSBiZWZvcmUgYmVpbmcgc3RvcmVkLCBhbmQgdGhlIDMyLWJpdCB2YWx1ZSBpcwogIC8vLyBzaWduLWV4dGVuZGVkIHdoZW4gaXQgaXMgbG9hZGVkLgogIC8vLwogIC8vLyBPbiAzMi1iaXQgcGxhdGZvcm1zIHRoZSBbYWRkcmVzc10gbXVzdCBiZSA0LWJ5dGUgYWxpZ25lZCwgYW5kIG9uIDY0LWJpdAogIC8vLyBwbGF0Zm9ybXMgdGhlIFthZGRyZXNzXSBtdXN0IGJlIDgtYnl0ZSBhbGlnbmVkLgogIGV4dGVybmFsIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKTsKfQoKLy8vIEV4dGVuc2lvbiBvbiBbUG9pbnRlcl0gc3BlY2lhbGl6ZWQgZm9yIHRoZSB0eXBlIGFyZ3VtZW50IFtGbG9hdF0uCmV4dGVuc2lvbiBGbG9hdFBvaW50ZXIgb24gUG9pbnRlcjxGbG9hdD4gewogIC8vLyBUaGUgZmxvYXQgYXQgW2FkZHJlc3NdLgogIC8vLwogIC8vLyBBIERhcnQgZG91YmxlIGxvc2VzIHByZWNpc2lvbiBiZWZvcmUgYmVpbmcgc3RvcmVkLCBhbmQgdGhlIGZsb2F0IHZhbHVlIGlzCiAgLy8vIGNvbnZlcnRlZCB0byBhIGRvdWJsZSB3aGVuIGl0IGlzIGxvYWRlZC4KICAvLy8KICAvLy8gVGhlIFthZGRyZXNzXSBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkLgogIGV4dGVybmFsIGRvdWJsZSBnZXQgdmFsdWU7CgogIC8vLyBUaGUgZmxvYXQgYXQgW2FkZHJlc3NdLgogIC8vLwogIC8vLyBBIERhcnQgZG91YmxlIGxvc2VzIHByZWNpc2lvbiBiZWZvcmUgYmVpbmcgc3RvcmVkLCBhbmQgdGhlIGZsb2F0IHZhbHVlIGlzCiAgLy8vIGNvbnZlcnRlZCB0byBhIGRvdWJsZSB3aGVuIGl0IGlzIGxvYWRlZC4KICAvLy8KICAvLy8gVGhlIFthZGRyZXNzXSBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkLgogIGV4dGVybmFsIHZvaWQgc2V0IHZhbHVlKGRvdWJsZSB2YWx1ZSk7CgogIC8vLyBUaGUgZmxvYXQgYXQgYGFkZHJlc3MgKyA0ICogaW5kZXhgLgogIC8vLwogIC8vLyBBIERhcnQgZG91YmxlIGxvc2VzIHByZWNpc2lvbiBiZWZvcmUgYmVpbmcgc3RvcmVkLCBhbmQgdGhlIGZsb2F0IHZhbHVlIGlzCiAgLy8vIGNvbnZlcnRlZCB0byBhIGRvdWJsZSB3aGVuIGl0IGlzIGxvYWRlZC4KICAvLy8KICAvLy8gVGhlIFthZGRyZXNzXSBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkLgogIGV4dGVybmFsIGRvdWJsZSBvcGVyYXRvciBbXShpbnQgaW5kZXgpOwoKICAvLy8gVGhlIGZsb2F0IGF0IGBhZGRyZXNzICsgNCAqIGluZGV4YC4KICAvLy8KICAvLy8gQSBEYXJ0IGRvdWJsZSBsb3NlcyBwcmVjaXNpb24gYmVmb3JlIGJlaW5nIHN0b3JlZCwgYW5kIHRoZSBmbG9hdCB2YWx1ZSBpcwogIC8vLyBjb252ZXJ0ZWQgdG8gYSBkb3VibGUgd2hlbiBpdCBpcyBsb2FkZWQuCiAgLy8vCiAgLy8vIFRoZSBbYWRkcmVzc10gbXVzdCBiZSA0LWJ5dGUgYWxpZ25lZC4KICBleHRlcm5hbCB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGRvdWJsZSB2YWx1ZSk7CgogIC8vLyBDcmVhdGVzIGEgdHlwZWQgbGlzdCB2aWV3IGJhY2tlZCBieSBtZW1vcnkgaW4gdGhlIGFkZHJlc3Mgc3BhY2UuCiAgLy8vCiAgLy8vIFRoZSByZXR1cm5lZCB2aWV3IHdpbGwgYWxsb3cgYWNjZXNzIHRvIHRoZSBtZW1vcnkgcmFuZ2UgZnJvbSBbYWRkcmVzc10KICAvLy8gdG8gYGFkZHJlc3MgKyA0ICogbGVuZ3RoYC4KICAvLy8KICAvLy8gVGhlIHVzZXIgaGFzIHRvIGVuc3VyZSB0aGUgbWVtb3J5IHJhbmdlIGlzIGFjY2Vzc2libGUgd2hpbGUgdXNpbmcgdGhlCiAgLy8vIHJldHVybmVkIGxpc3QuCiAgLy8vCiAgLy8vIFRoZSBbYWRkcmVzc10gbXVzdCBiZSA0LWJ5dGUgYWxpZ25lZC4KICBleHRlcm5hbCBGbG9hdDMyTGlzdCBhc1R5cGVkTGlzdChpbnQgbGVuZ3RoKTsKfQoKLy8vIEV4dGVuc2lvbiBvbiBbUG9pbnRlcl0gc3BlY2lhbGl6ZWQgZm9yIHRoZSB0eXBlIGFyZ3VtZW50IFtEb3VibGVdLgpleHRlbnNpb24gRG91YmxlUG9pbnRlciBvbiBQb2ludGVyPERvdWJsZT4gewogIC8vLyBUaGUgZG91YmxlIGF0IFthZGRyZXNzXS4KICAvLy8KICAvLy8gVGhlIFthZGRyZXNzXSBtdXN0IGJlIDgtYnl0ZSBhbGlnbmVkLgogIGV4dGVybmFsIGRvdWJsZSBnZXQgdmFsdWU7CgogIC8vLyBUaGUgZG91YmxlIGF0IFthZGRyZXNzXS4KICAvLy8KICAvLy8gVGhlIFthZGRyZXNzXSBtdXN0IGJlIDgtYnl0ZSBhbGlnbmVkLgogIGV4dGVybmFsIHZvaWQgc2V0IHZhbHVlKGRvdWJsZSB2YWx1ZSk7CgogIC8vLyBUaGUgZG91YmxlIGF0IGBhZGRyZXNzICsgOCAqIGluZGV4YC4KICAvLy8KICAvLy8gVGhlIFthZGRyZXNzXSBtdXN0IGJlIDgtYnl0ZSBhbGlnbmVkLgogIGV4dGVybmFsIGRvdWJsZSBvcGVyYXRvciBbXShpbnQgaW5kZXgpOwoKICAvLy8gVGhlIGRvdWJsZSBhdCBgYWRkcmVzcyArIDggKiBpbmRleGAuCiAgLy8vCiAgLy8vIFRoZSBbYWRkcmVzc10gbXVzdCBiZSA4LWJ5dGUgYWxpZ25lZC4KICBleHRlcm5hbCB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGRvdWJsZSB2YWx1ZSk7CgogIC8vLyBDcmVhdGVzIGEgdHlwZWQgbGlzdCB2aWV3IGJhY2tlZCBieSBtZW1vcnkgaW4gdGhlIGFkZHJlc3Mgc3BhY2UuCiAgLy8vCiAgLy8vIFRoZSByZXR1cm5lZCB2aWV3IHdpbGwgYWxsb3cgYWNjZXNzIHRvIHRoZSBtZW1vcnkgcmFuZ2UgZnJvbSBbYWRkcmVzc10KICAvLy8gdG8gYGFkZHJlc3MgKyA4ICogbGVuZ3RoYC4KICAvLy8KICAvLy8gVGhlIHVzZXIgaGFzIHRvIGVuc3VyZSB0aGUgbWVtb3J5IHJhbmdlIGlzIGFjY2Vzc2libGUgd2hpbGUgdXNpbmcgdGhlCiAgLy8vIHJldHVybmVkIGxpc3QuCiAgLy8vCiAgLy8vIFRoZSBbYWRkcmVzc10gbXVzdCBiZSA4LWJ5dGUgYWxpZ25lZC4KICBleHRlcm5hbCBGbG9hdDY0TGlzdCBhc1R5cGVkTGlzdChpbnQgbGVuZ3RoKTsKfQoKLy8KLy8gRW5kIG9mIGdlbmVyYXRlZCBjb2RlLgovLwoKLy8vIEV4dGVuc2lvbiBvbiBbUG9pbnRlcl0gc3BlY2lhbGl6ZWQgZm9yIHRoZSB0eXBlIGFyZ3VtZW50IFtQb2ludGVyXS4KZXh0ZW5zaW9uIFBvaW50ZXJQb2ludGVyPFQgZXh0ZW5kcyBOYXRpdmVUeXBlPiBvbiBQb2ludGVyPFBvaW50ZXI8VD4+IHsKICAvLy8gVGhlIHBvaW50ZXIgYXQgW2FkZHJlc3NdLgogIC8vLwogIC8vLyBBIFtQb2ludGVyXSBpcyB1bmJveGVkIGJlZm9yZSBiZWluZyBzdG9yZWQgKGFzIGlmIGJ5IGAuYWRkcmVzc2ApLCBhbmQgdGhlCiAgLy8vIHBvaW50ZXIgaXMgYm94ZWQgKGFzIGlmIGJ5IGBQb2ludGVyLmZyb21BZGRyZXNzYCkgd2hlbiBsb2FkZWQuCiAgLy8vCiAgLy8vIE9uIDMyLWJpdCBwbGF0Zm9ybXMgdGhlIFthZGRyZXNzXSBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkLCBhbmQgb24gNjQtYml0CiAgLy8vIHBsYXRmb3JtcyB0aGUgW2FkZHJlc3NdIG11c3QgYmUgOC1ieXRlIGFsaWduZWQuCiAgZXh0ZXJuYWwgUG9pbnRlcjxUPiBnZXQgdmFsdWU7CgogIC8vLyBTdG9yZSBhIERhcnQgdmFsdWUgaW50byB0aGlzIGxvY2F0aW9uLgogIC8vLwogIC8vLyBBIFtQb2ludGVyXSBpcyB1bmJveGVkIGJlZm9yZSBiZWluZyBzdG9yZWQgKGFzIGlmIGJ5IGAuYWRkcmVzc2ApLCBhbmQgdGhlCiAgLy8vIHBvaW50ZXIgaXMgYm94ZWQgKGFzIGlmIGJ5IGBQb2ludGVyLmZyb21BZGRyZXNzYCkgd2hlbiBsb2FkZWQuCiAgLy8vCiAgLy8vIE9uIDMyLWJpdCBwbGF0Zm9ybXMgdGhlIFthZGRyZXNzXSBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkLCBhbmQgb24gNjQtYml0CiAgLy8vIHBsYXRmb3JtcyB0aGUgW2FkZHJlc3NdIG11c3QgYmUgOC1ieXRlIGFsaWduZWQuCiAgZXh0ZXJuYWwgdm9pZCBzZXQgdmFsdWUoUG9pbnRlcjxUPiB2YWx1ZSk7CgogIC8vLyBMb2FkIGEgRGFydCB2YWx1ZSBmcm9tIHRoaXMgbG9jYXRpb24gb2Zmc2V0IGJ5IFtpbmRleF0uCiAgLy8vCiAgLy8vIEEgW1BvaW50ZXJdIGlzIHVuYm94ZWQgYmVmb3JlIGJlaW5nIHN0b3JlZCAoYXMgaWYgYnkgYC5hZGRyZXNzYCksIGFuZCB0aGUKICAvLy8gcG9pbnRlciBpcyBib3hlZCAoYXMgaWYgYnkgYFBvaW50ZXIuZnJvbUFkZHJlc3NgKSB3aGVuIGxvYWRlZC4KICAvLy8KICAvLy8gT24gMzItYml0IHBsYXRmb3JtcyB0aGUgW2FkZHJlc3NdIG11c3QgYmUgNC1ieXRlIGFsaWduZWQsIGFuZCBvbiA2NC1iaXQKICAvLy8gcGxhdGZvcm1zIHRoZSBbYWRkcmVzc10gbXVzdCBiZSA4LWJ5dGUgYWxpZ25lZC4KICBleHRlcm5hbCBQb2ludGVyPFQ+IG9wZXJhdG9yIFtdKGludCBpbmRleCk7CgogIC8vLyBTdG9yZSBhIERhcnQgdmFsdWUgaW50byB0aGlzIGxvY2F0aW9uIG9mZnNldCBieSBbaW5kZXhdLgogIC8vLwogIC8vLyBBIFtQb2ludGVyXSBpcyB1bmJveGVkIGJlZm9yZSBiZWluZyBzdG9yZWQgKGFzIGlmIGJ5IGAuYWRkcmVzc2ApLCBhbmQgdGhlCiAgLy8vIHBvaW50ZXIgaXMgYm94ZWQgKGFzIGlmIGJ5IGBQb2ludGVyLmZyb21BZGRyZXNzYCkgd2hlbiBsb2FkZWQuCiAgLy8vCiAgLy8vIE9uIDMyLWJpdCBwbGF0Zm9ybXMgdGhlIFthZGRyZXNzXSBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkLCBhbmQgb24gNjQtYml0CiAgLy8vIHBsYXRmb3JtcyB0aGUgW2FkZHJlc3NdIG11c3QgYmUgOC1ieXRlIGFsaWduZWQuCiAgZXh0ZXJuYWwgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBQb2ludGVyPFQ+IHZhbHVlKTsKfQoKLy8vIEV4dGVuc2lvbiBvbiBbUG9pbnRlcl0gc3BlY2lhbGl6ZWQgZm9yIHRoZSB0eXBlIGFyZ3VtZW50IFtTdHJ1Y3RdLgpleHRlbnNpb24gU3RydWN0UG9pbnRlcjxUIGV4dGVuZHMgU3RydWN0PiBvbiBQb2ludGVyPFQ+IHsKICAvLy8gQ3JlYXRlcyBhIHJlZmVyZW5jZSB0byBhY2Nlc3MgdGhlIGZpZWxkcyBvZiB0aGlzIHN0cnVjdCBiYWNrZWQgYnkgbmF0aXZlCiAgLy8vIG1lbW9yeSBhdCBbYWRkcmVzc10uCiAgLy8vCiAgLy8vIFRoZSBbYWRkcmVzc10gbXVzdCBiZSBhbGlnbmVkIGFjY29yZGluZyB0byB0aGUgc3RydWN0IGFsaWdubWVudCBydWxlcyBvZgogIC8vLyB0aGUgcGxhdGZvcm0uCiAgZXh0ZXJuYWwgVCBnZXQgcmVmOwoKICAvLy8gQ3JlYXRlcyBhIHJlZmVyZW5jZSB0byBhY2Nlc3MgdGhlIGZpZWxkcyBvZiB0aGlzIHN0cnVjdCBiYWNrZWQgYnkgbmF0aXZlCiAgLy8vIG1lbW9yeSBhdCBgYWRkcmVzcyArIHNpemVPZjxUPigpICogaW5kZXhgLgogIC8vLwogIC8vLyBUaGUgW2FkZHJlc3NdIG11c3QgYmUgYWxpZ25lZCBhY2NvcmRpbmcgdG8gdGhlIHN0cnVjdCBhbGlnbm1lbnQgcnVsZXMgb2YKICAvLy8gdGhlIHBsYXRmb3JtLgogIGV4dGVybmFsIFQgb3BlcmF0b3IgW10oaW50IGluZGV4KTsKfQoKLy8vIEV4dGVuc2lvbiB0byByZXRyaWV2ZSB0aGUgbmF0aXZlIGBEYXJ0X1BvcnRgIGZyb20gYSBbU2VuZFBvcnRdLgpleHRlbnNpb24gTmF0aXZlUG9ydCBvbiBTZW5kUG9ydCB7CiAgLy8vIFRoZSBuYXRpdmUgcG9ydCBvZiB0aGlzIFtTZW5kUG9ydF0uCiAgLy8vCiAgLy8vIFRoZSByZXR1cm5lZCBuYXRpdmUgcG9ydCBjYW4gZm9yIGV4YW1wbGUgYmUgdXNlZCBieSBDIGNvZGUgdG8gcG9zdAogIC8vLyBtZXNzYWdlcyB0byB0aGUgY29ubmVjdGVkIFtSZWNlaXZlUG9ydF0gdmlhIGBEYXJ0X1Bvc3RDT2JqZWN0KClgIC0gc2VlCiAgLy8vIGBkYXJ0X25hdGl2ZV9hcGkuaGAuCiAgZXh0ZXJuYWwgaW50IGdldCBuYXRpdmVQb3J0Owp9CoJxAE5OOwEPAQRUA08DRgMSBBIBGhcBGRkdFAErBC8tAVAeNgFHGjklMQFPJQZOUgZOURQGTU1CBk8RTy0jASdAHAE8LAEnNAFIGAZRQkoBOxwlJQQBPxUdBAIBAzkDRQMBRSk3Bk1MGgE3Bk1MJgE/Bk1MJwE/Bk1MNAFHBk0dBkwVLQIBRis4Bk9NBiwaATgGT00GLCYBRAZPTQYsJwFEBk9NBiw0AUcGTSEGTBUGLC4CAUYrOAZPTQYsGgE4Bk9NBiwmAUQGT00GLCcBRAZPTQYsNAFHBk0hBkwVBiwuAgFGKzgGLBoBOAYsJgFEBiwnAUQGLDQBRwZNIQZMFQYsLgIBRisvBk9MGgEvBk9MJgE3Bk9MJwE3Bk9MNAFHBk0dBkwVLgIBRy0wBlFNBiwaATAGUU0GLCYBPAZRTQYsJwE8BlFNBiw0AUcGTSEGTBUGLC8CAUctMAZRTQYsGgEwBlFNBiwmATwGUU0GLCcBPAZRTQYsNAFHBk0hBkwVBiwvAgFHLTAGLBoBMAYsJgE8BiwnATwGLDQBRwZNIQZMFQYsLwIBRy0+BkwgBktEJwZONhoBPgZMIAZLRCcGTjYmAVEGTCAGS0QnBk42JwFRBkwgBktEJwZONjQCAUYrHgZQLwYsHQEeBlAvBiwpASoGUC8GLCoBKgZQLwYsNwFHBk0hBkwVBiwwAgFHLR8GLB0BHwYsKQErBiwqASsGLDcBRwZNIQZMFQYsMAIBAxoDAUhIIAZQRQZONiEBLQZQRQZONi0BPgZQRQZONi4BPwZQRQZONjsCAUc6TxsGTxQWAU8xBk8UJQIBRCMqBklNGx8CAQhkYXJ0OmZmaUxvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vbGliL2ZmaV9wYXRjaC5kYXJ0tbUvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vIEFsbCBpbXBvcnRzIG11c3QgYmUgaW4gYWxsIEZGSSBwYXRjaCBmaWxlcyB0byBub3QgZGVwZW5kIG9uIHRoZSBvcmRlcgovLyB0aGUgcGF0Y2hlcyBhcmUgYXBwbGllZC4KaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIgc2hvdyBwYXRjaDsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwppbXBvcnQgJ2RhcnQ6aXNvbGF0ZSc7Cgpjb25zdCBNYXA8VHlwZSwgaW50PiBfa25vd25TaXplcyA9IHsKICBJbnQ4OiAxLAogIFVpbnQ4OiAxLAogIEludDE2OiAyLAogIFVpbnQxNjogMiwKICBJbnQzMjogNCwKICBVaW50MzI6IDQsCiAgSW50NjQ6IDgsCiAgVWludDY0OiA4LAogIEZsb2F0OiA0LAogIERvdWJsZTogOCwKfTsKCmZpbmFsIGludCBfaW50UHRyU2l6ZSA9IFs4LCA0LCA0XVtfYWJpKCldOwoKQHBhdGNoCmludCBzaXplT2Y8VCBleHRlbmRzIE5hdGl2ZVR5cGU+KCkgewogIC8vIFRoaXMgaXMgbm90IHN1cGVyIGZhc3QsIGJ1dCBpdCBpcyBmYXN0ZXIgdGhhbiBhIHJ1bnRpbWUgZW50cnkuCiAgLy8gSG90IGxvb3BzIHdpdGggZWxlbWVudEF0KCkubG9hZCgpIGRvIG5vdCB1c2UgdGhpcyBzaXplT2YsIGVsZW1lbnRBdCBpcwogIC8vIG9wdGltaXplZCBwZXIgTmF0aXZlVHlwZSBzdGF0aWNhbGx5IHRvIHByZXZlbnQgdXNlIG9mIHNpemVPZiBhdCBydW50aW1lLgogIGZpbmFsIGludCBrbm93blNpemUgPSBfa25vd25TaXplc1tUXTsKICBpZiAoa25vd25TaXplICE9IG51bGwpIHJldHVybiBrbm93blNpemU7CiAgaWYgKFQgPT0gSW50UHRyKSByZXR1cm4gX2ludFB0clNpemU7CiAgaWYgKFQgPT0gUG9pbnRlcikgcmV0dXJuIF9pbnRQdHJTaXplOwogIC8vIEZvciBzdHJ1Y3RzIHdlIGZhbGwgYmFjayB0byBhIHJ1bnRpbWUgZW50cnkuCiAgcmV0dXJuIF9zaXplT2Y8VD4oKTsKfQoKaW50IF9zaXplT2Y8VCBleHRlbmRzIE5hdGl2ZVR5cGU+KCkgbmF0aXZlICJGZmlfc2l6ZU9mIjsKCi8vIEltcGxlbWVudGVkIGluIHRoZSBtZXRob2QgcmVjb2duaXplciwgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgdXNlcyBydW50aW1lLgpQb2ludGVyPFQ+IF9mcm9tQWRkcmVzczxUIGV4dGVuZHMgTmF0aXZlVHlwZT4oaW50IHB0cikgbmF0aXZlICJGZmlfZnJvbUFkZHJlc3MiOwoKLy8gVGhlIHJlYWwgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiAoZm9yIGludGVyZmFjZSBjYWxscykgbGl2ZXMgaW4KLy8gQnVpbGRGZmlBc0Z1bmN0aW9uQ2FsbCBpbiB0aGUgS2VybmVsIGZyb250ZW5kLiBObyBjYWxscyBjYW4gYWN0dWFsbHkgcmVhY2gKLy8gdGhpcyBmdW5jdGlvbi4KRFMgX2FzRnVuY3Rpb25JbnRlcm5hbDxEUyBleHRlbmRzIEZ1bmN0aW9uLCBOUyBleHRlbmRzIEZ1bmN0aW9uPigKICAgIFBvaW50ZXI8TmF0aXZlRnVuY3Rpb248TlM+PiBwdHIpIG5hdGl2ZSAiRmZpX2FzRnVuY3Rpb25JbnRlcm5hbCI7CgpkeW5hbWljIF9hc0V4dGVybmFsVHlwZWREYXRhKFBvaW50ZXIgcHRyLCBpbnQgY291bnQpCiAgICBuYXRpdmUgIkZmaV9hc0V4dGVybmFsVHlwZWREYXRhIjsKCi8vIFJldHVybnMgYSBGdW5jdGlvbiBvYmplY3QgZm9yIGEgbmF0aXZlIGNhbGxiYWNrLgovLwovLyBDYWxscyB0byBbUG9pbnRlci5mcm9tRnVuY3Rpb25dIGFyZSByZS13cml0dGVuIGJ5IHRoZSBGRSBpbnRvIGNhbGxzIHRvIHRoaXMKLy8gbWV0aG9kICsgX3BvaW50ZXJGcm9tRnVuY3Rpb24uIEFsbCB0aHJlZSBhcmd1bWVudHMgbXVzdCBiZSBjb25zdGFudHMuCi8vCi8vIEluIEFPVCB3ZSBldmFsdWF0ZSBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGR1cmluZyBwcmVjb21waWxhdGlvbiBhbmQgcmVwbGFjZQovLyB0aGVtIHdpdGggQ29uc3RhbnQgaW5zdHJ1Y3Rpb24gcmVmZXJlbmNpbmcgdGhlIGNhbGxiYWNrIHRyYW1wb2xpbmUsIHRvIGVuc3VyZQovLyB0aGF0IGl0IHdpbGwgYmUgcHJlY29tcGlsZWQuCi8vCi8vIEluIGFsbCBKSVQgbW9kZXMgd2UgY2FsbCBhIG5hdGl2ZSBydW50aW1lIGVudHJ5LiBXZSAqY2Fubm90KiB1c2UgdGhlIElMCi8vIGltcGxlbWVudGF0aW9uLCBzaW5jZSB0aGF0IHdvdWxkIHB1bGwgdGhlIGNhbGxiYWNrIHRyYW1wb2xpbmUgaW50byBKSVQKLy8gc25hcHNob3RzLiBUaGUgY2FsbGJhY2sgdHJhbXBvbGluZXMgY2FuIG9ubHkgYmUgc2VyaWFsaXplZCBpbnRvIEFPVCBzbmFwc2hvdHMKLy8gYmVjYXVzZSB0aGV5IGVtYmVkIHRoZSBhZGRyZXNzZXMgb2YgcnVudGltZSByb3V0aW5lcyBpbiBKSVQgbW9kZS4KT2JqZWN0IF9uYXRpdmVDYWxsYmFja0Z1bmN0aW9uPE5TIGV4dGVuZHMgRnVuY3Rpb24+KEZ1bmN0aW9uIHRhcmdldCwKICAgIE9iamVjdCBleGNlcHRpb25hbFJldHVybikgbmF0aXZlICJGZmlfbmF0aXZlQ2FsbGJhY2tGdW5jdGlvbiI7CgpQb2ludGVyPE5TPiBfcG9pbnRlckZyb21GdW5jdGlvbjxOUyBleHRlbmRzIE5hdGl2ZUZ1bmN0aW9uPihPYmplY3QgZnVuY3Rpb24pCiAgICBuYXRpdmUgIkZmaV9wb2ludGVyRnJvbUZ1bmN0aW9uIjsKCkBwYXRjaApAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIFBvaW50ZXI8VCBleHRlbmRzIE5hdGl2ZVR5cGU+IHsKICBAcGF0Y2gKICBmYWN0b3J5IFBvaW50ZXIuZnJvbUFkZHJlc3MoaW50IHB0cikgPT4gX2Zyb21BZGRyZXNzKHB0cik7CgogIC8vIEFsbCBzdGF0aWMgY2FsbHMgdG8gdGhpcyBtZXRob2QgYXJlIHJlcGxhY2VkIGJ5IHRoZSBGRSBpbnRvCiAgLy8gX25hdGl2ZUNhbGxiYWNrRnVuY3Rpb24gKyBfcG9pbnRlckZyb21GdW5jdGlvbi4KICAvLwogIC8vIFdlIHN0aWxsIG5lZWQgdG8gdGhyb3cgYW4gZXJyb3Igb24gYSBkeW5hbWljIGludm9jYXRpb25zLCBpbnZvY2F0aW9ucwogIC8vIHRocm91Z2ggdGVhcm9mZnMgb3IgcmVmbGVjdGl2ZSBjYWxscy4KICBAcGF0Y2gKICBzdGF0aWMgUG9pbnRlcjxOYXRpdmVGdW5jdGlvbjxUPj4gZnJvbUZ1bmN0aW9uPFQgZXh0ZW5kcyBGdW5jdGlvbj4oCiAgICAgIEBEYXJ0UmVwcmVzZW50YXRpb25PZigiVCIpIEZ1bmN0aW9uIGYsCiAgICAgIFtPYmplY3QgZXhjZXB0aW9uYWxSZXR1cm5dKSB7CiAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJQb2ludGVyLmZyb21GdW5jdGlvbiBjYW5ub3QgYmUgY2FsbGVkIGR5bmFtaWNhbGx5LiIpOwogIH0KCiAgLy8gSW1wbGVtZW50ZWQgaW4gdGhlIG1ldGhvZCByZWNvZ25pemVyLCBieXRlY29kZSBpbnRlcnByZXRlciB1c2VzIHJ1bnRpbWUuCiAgQHBhdGNoCiAgaW50IGdldCBhZGRyZXNzIG5hdGl2ZSAiRmZpX2FkZHJlc3MiOwoKICAvLyBGb3Igc3RhdGljYWxseSBrbm93biB0eXBlcywgdGhpcyBpcyByZXdpcmVkLgogIC8vIChNZXRob2Qgc2l6ZU9mIGlzIHNsb3csIHNlZSBub3RlcyBhYm92ZS4pCiAgQHBhdGNoCiAgUG9pbnRlcjxUPiBlbGVtZW50QXQoaW50IGluZGV4KSA9PgogICAgICBQb2ludGVyLmZyb21BZGRyZXNzKGFkZHJlc3MgKyBzaXplT2Y8VD4oKSAqIGluZGV4KTsKCiAgQHBhdGNoCiAgUG9pbnRlcjxUPiBfb2Zmc2V0QnkoaW50IG9mZnNldEluQnl0ZXMpID0+CiAgICAgIFBvaW50ZXIuZnJvbUFkZHJlc3MoYWRkcmVzcyArIG9mZnNldEluQnl0ZXMpOwoKICBAcGF0Y2gKICBQb2ludGVyPFU+IGNhc3Q8VSBleHRlbmRzIE5hdGl2ZVR5cGU+KCkgPT4gUG9pbnRlci5mcm9tQWRkcmVzcyhhZGRyZXNzKTsKCiAgQHBhdGNoCiAgUiBhc0Z1bmN0aW9uPFIgZXh0ZW5kcyBGdW5jdGlvbj4oKSB7CiAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCJQb2ludGVyLmFzRnVuY3Rpb24gY2Fubm90IGJlIGNhbGxlZCBkeW5hbWljYWxseS4iKTsKICB9Cn0KCi8vLyBSZXR1cm5zIGFuIGludGVnZXIgZW5jb2RpbmcgdGhlIEFCSSB1c2VkIGZvciBzaXplIGFuZCBhbGlnbm1lbnQKLy8vIGNhbGN1bGF0aW9ucy4gU2VlIHBrZy92bS9saWIvdHJhbnNmb3JtYXRpb25zL2ZmaS5kYXJ0LgpAcHJhZ21hKCd2bTpwcmVmZXItaW5saW5lJykKaW50IF9hYmkoKQogICAgbmF0aXZlICJSZWNvZ25pemVkIG1ldGhvZDogbWV0aG9kIGlzIGRpcmVjdGx5IGludGVycHJldGVkIGJ5IHRoZSBieXRlY29kZSBpbnRlcnByZXRlciBvciBJUiBncmFwaCBpcyBidWlsdCBpbiB0aGUgZmxvdyBncmFwaCBidWlsZGVyLiI7CgovLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIG1ldGhvZCByZWNvZ25pemVyLCBidXQgdGhlCi8vIGJ5dGVjb2RlIGludGVycHJldGVyIHVzZXMgbmF0aXZlIGVudHJpZXMuCi8vCi8vIFRPRE8oMzgxNzIpOiBTaW5jZSB0aGVzZSBhcmUgbm90IGlubGluZWQgKGZvcmNlIG9wdGltaXplKSwgdGhleSBmb3JjZQovLyBhbGxvY2F0aW5nIGEgUG9pbnRlciB3aXRoIGluIGVsZW1lbnRBdC9vZmZzZXRCeS4gQWxsb2NhdGluZyB0aGVzZSBwb2ludGVycwovLyBhbmQgR0NpbmcgbmV3IHNwYWNlcyB0YWtlcyBhIGxvdCBvZiB0aGUgYmVuY2htYXJrIHRpbWUuIFRoZSBuZXh0IHNwZWVkdXAgaXMKLy8gZ2V0dGluZyByaWQgb2YgdGhlc2UgYWxsb2NhdGlvbnMgYnkgaW5saW5pbmcgdGhlc2UgZnVuY3Rpb25zLgovLwovLyBUT0RPKDM3NzczKTogQ2hhbmdlIF9sb2FkSW50OCBldGMgdG8gdGFrZSBhbiBpbmRleC4KaW50IF9sb2FkSW50OChQb2ludGVyPEludDg+IHBvaW50ZXIsIGludCBpbmRleCkgbmF0aXZlICJGZmlfbG9hZEludDgiOwoKaW50IF9sb2FkSW50MTYoUG9pbnRlcjxJbnQxNj4gcG9pbnRlciwgaW50IGluZGV4KSBuYXRpdmUgIkZmaV9sb2FkSW50MTYiOwoKaW50IF9sb2FkSW50MzIoUG9pbnRlcjxJbnQzMj4gcG9pbnRlciwgaW50IGluZGV4KSBuYXRpdmUgIkZmaV9sb2FkSW50MzIiOwoKaW50IF9sb2FkSW50NjQoUG9pbnRlcjxJbnQ2ND4gcG9pbnRlciwgaW50IGluZGV4KSBuYXRpdmUgIkZmaV9sb2FkSW50NjQiOwoKaW50IF9sb2FkVWludDgoUG9pbnRlcjxVaW50OD4gcG9pbnRlciwgaW50IGluZGV4KSBuYXRpdmUgIkZmaV9sb2FkVWludDgiOwoKaW50IF9sb2FkVWludDE2KFBvaW50ZXI8VWludDE2PiBwb2ludGVyLCBpbnQgaW5kZXgpIG5hdGl2ZSAiRmZpX2xvYWRVaW50MTYiOwoKaW50IF9sb2FkVWludDMyKFBvaW50ZXI8VWludDMyPiBwb2ludGVyLCBpbnQgaW5kZXgpIG5hdGl2ZSAiRmZpX2xvYWRVaW50MzIiOwoKaW50IF9sb2FkVWludDY0KFBvaW50ZXI8VWludDY0PiBwb2ludGVyLCBpbnQgaW5kZXgpIG5hdGl2ZSAiRmZpX2xvYWRVaW50NjQiOwoKaW50IF9sb2FkSW50UHRyKFBvaW50ZXI8SW50UHRyPiBwb2ludGVyLCBpbnQgaW5kZXgpIG5hdGl2ZSAiRmZpX2xvYWRJbnRQdHIiOwoKZG91YmxlIF9sb2FkRmxvYXQoUG9pbnRlcjxGbG9hdD4gcG9pbnRlciwgaW50IGluZGV4KSBuYXRpdmUgIkZmaV9sb2FkRmxvYXQiOwoKZG91YmxlIF9sb2FkRG91YmxlKFBvaW50ZXI8RG91YmxlPiBwb2ludGVyLCBpbnQgaW5kZXgpIG5hdGl2ZSAiRmZpX2xvYWREb3VibGUiOwoKUG9pbnRlcjxTPiBfbG9hZFBvaW50ZXI8UyBleHRlbmRzIE5hdGl2ZVR5cGU+KAogICAgUG9pbnRlcjxQb2ludGVyPFM+PiBwb2ludGVyLCBpbnQgaW5kZXgpIG5hdGl2ZSAiRmZpX2xvYWRQb2ludGVyIjsKClMgX2xvYWRTdHJ1Y3Q8UyBleHRlbmRzIFN0cnVjdD4oUG9pbnRlcjxTPiBwb2ludGVyLCBpbnQgaW5kZXgpCiAgICBuYXRpdmUgIkZmaV9sb2FkU3RydWN0IjsKCnZvaWQgX3N0b3JlSW50OChQb2ludGVyPEludDg+IHBvaW50ZXIsIGludCBpbmRleCwgaW50IHZhbHVlKQogICAgbmF0aXZlICJGZmlfc3RvcmVJbnQ4IjsKCnZvaWQgX3N0b3JlSW50MTYoUG9pbnRlcjxJbnQxNj4gcG9pbnRlciwgaW50IGluZGV4LCBpbnQgdmFsdWUpCiAgICBuYXRpdmUgIkZmaV9zdG9yZUludDE2IjsKCnZvaWQgX3N0b3JlSW50MzIoUG9pbnRlcjxJbnQzMj4gcG9pbnRlciwgaW50IGluZGV4LCBpbnQgdmFsdWUpCiAgICBuYXRpdmUgIkZmaV9zdG9yZUludDMyIjsKCnZvaWQgX3N0b3JlSW50NjQoUG9pbnRlcjxJbnQ2ND4gcG9pbnRlciwgaW50IGluZGV4LCBpbnQgdmFsdWUpCiAgICBuYXRpdmUgIkZmaV9zdG9yZUludDY0IjsKCnZvaWQgX3N0b3JlVWludDgoUG9pbnRlcjxVaW50OD4gcG9pbnRlciwgaW50IGluZGV4LCBpbnQgdmFsdWUpCiAgICBuYXRpdmUgIkZmaV9zdG9yZVVpbnQ4IjsKCnZvaWQgX3N0b3JlVWludDE2KFBvaW50ZXI8VWludDE2PiBwb2ludGVyLCBpbnQgaW5kZXgsIGludCB2YWx1ZSkKICAgIG5hdGl2ZSAiRmZpX3N0b3JlVWludDE2IjsKCnZvaWQgX3N0b3JlVWludDMyKFBvaW50ZXI8VWludDMyPiBwb2ludGVyLCBpbnQgaW5kZXgsIGludCB2YWx1ZSkKICAgIG5hdGl2ZSAiRmZpX3N0b3JlVWludDMyIjsKCnZvaWQgX3N0b3JlVWludDY0KFBvaW50ZXI8VWludDY0PiBwb2ludGVyLCBpbnQgaW5kZXgsIGludCB2YWx1ZSkKICAgIG5hdGl2ZSAiRmZpX3N0b3JlVWludDY0IjsKCnZvaWQgX3N0b3JlSW50UHRyKFBvaW50ZXI8SW50UHRyPiBwb2ludGVyLCBpbnQgaW5kZXgsIGludCB2YWx1ZSkKICAgIG5hdGl2ZSAiRmZpX3N0b3JlSW50UHRyIjsKCnZvaWQgX3N0b3JlRmxvYXQoUG9pbnRlcjxGbG9hdD4gcG9pbnRlciwgaW50IGluZGV4LCBkb3VibGUgdmFsdWUpCiAgICBuYXRpdmUgIkZmaV9zdG9yZUZsb2F0IjsKCnZvaWQgX3N0b3JlRG91YmxlKFBvaW50ZXI8RG91YmxlPiBwb2ludGVyLCBpbnQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKICAgIG5hdGl2ZSAiRmZpX3N0b3JlRG91YmxlIjsKCnZvaWQgX3N0b3JlUG9pbnRlcjxTIGV4dGVuZHMgTmF0aXZlVHlwZT4oUG9pbnRlcjxQb2ludGVyPFM+PiBwb2ludGVyLCBpbnQgaW5kZXgsCiAgICBQb2ludGVyPFM+IHZhbHVlKSBuYXRpdmUgIkZmaV9zdG9yZVBvaW50ZXIiOwoKUG9pbnRlcjxJbnQ4PiBfZWxlbWVudEF0SW50OChQb2ludGVyPEludDg+IHBvaW50ZXIsIGludCBpbmRleCkgPT4KICAgIFBvaW50ZXIuZnJvbUFkZHJlc3MocG9pbnRlci5hZGRyZXNzICsgMSAqIGluZGV4KTsKClBvaW50ZXI8SW50MTY+IF9lbGVtZW50QXRJbnQxNihQb2ludGVyPEludDE2PiBwb2ludGVyLCBpbnQgaW5kZXgpID0+CiAgICBQb2ludGVyLmZyb21BZGRyZXNzKHBvaW50ZXIuYWRkcmVzcyArIDIgKiBpbmRleCk7CgpQb2ludGVyPEludDMyPiBfZWxlbWVudEF0SW50MzIoUG9pbnRlcjxJbnQzMj4gcG9pbnRlciwgaW50IGluZGV4KSA9PgogICAgUG9pbnRlci5mcm9tQWRkcmVzcyhwb2ludGVyLmFkZHJlc3MgKyA0ICogaW5kZXgpOwoKUG9pbnRlcjxJbnQ2ND4gX2VsZW1lbnRBdEludDY0KFBvaW50ZXI8SW50NjQ+IHBvaW50ZXIsIGludCBpbmRleCkgPT4KICAgIFBvaW50ZXIuZnJvbUFkZHJlc3MocG9pbnRlci5hZGRyZXNzICsgOCAqIGluZGV4KTsKClBvaW50ZXI8VWludDg+IF9lbGVtZW50QXRVaW50OChQb2ludGVyPFVpbnQ4PiBwb2ludGVyLCBpbnQgaW5kZXgpID0+CiAgICBQb2ludGVyLmZyb21BZGRyZXNzKHBvaW50ZXIuYWRkcmVzcyArIDEgKiBpbmRleCk7CgpQb2ludGVyPFVpbnQxNj4gX2VsZW1lbnRBdFVpbnQxNihQb2ludGVyPFVpbnQxNj4gcG9pbnRlciwgaW50IGluZGV4KSA9PgogICAgUG9pbnRlci5mcm9tQWRkcmVzcyhwb2ludGVyLmFkZHJlc3MgKyAyICogaW5kZXgpOwoKUG9pbnRlcjxVaW50MzI+IF9lbGVtZW50QXRVaW50MzIoUG9pbnRlcjxVaW50MzI+IHBvaW50ZXIsIGludCBpbmRleCkgPT4KICAgIFBvaW50ZXIuZnJvbUFkZHJlc3MocG9pbnRlci5hZGRyZXNzICsgNCAqIGluZGV4KTsKClBvaW50ZXI8VWludDY0PiBfZWxlbWVudEF0VWludDY0KFBvaW50ZXI8VWludDY0PiBwb2ludGVyLCBpbnQgaW5kZXgpID0+CiAgICBQb2ludGVyLmZyb21BZGRyZXNzKHBvaW50ZXIuYWRkcmVzcyArIDggKiBpbmRleCk7CgpQb2ludGVyPEludFB0cj4gX2VsZW1lbnRBdEludFB0cihQb2ludGVyPEludFB0cj4gcG9pbnRlciwgaW50IGluZGV4KSA9PgogICAgUG9pbnRlci5mcm9tQWRkcmVzcyhwb2ludGVyLmFkZHJlc3MgKyBfaW50UHRyU2l6ZSAqIGluZGV4KTsKClBvaW50ZXI8RmxvYXQ+IF9lbGVtZW50QXRGbG9hdChQb2ludGVyPEZsb2F0PiBwb2ludGVyLCBpbnQgaW5kZXgpID0+CiAgICBQb2ludGVyLmZyb21BZGRyZXNzKHBvaW50ZXIuYWRkcmVzcyArIDQgKiBpbmRleCk7CgpQb2ludGVyPERvdWJsZT4gX2VsZW1lbnRBdERvdWJsZShQb2ludGVyPERvdWJsZT4gcG9pbnRlciwgaW50IGluZGV4KSA9PgogICAgUG9pbnRlci5mcm9tQWRkcmVzcyhwb2ludGVyLmFkZHJlc3MgKyA4ICogaW5kZXgpOwoKUG9pbnRlcjxQb2ludGVyPFM+PiBfZWxlbWVudEF0UG9pbnRlcjxTIGV4dGVuZHMgTmF0aXZlVHlwZT4oCiAgICAgICAgUG9pbnRlcjxQb2ludGVyPFM+PiBwb2ludGVyLCBpbnQgaW5kZXgpID0+CiAgICBQb2ludGVyLmZyb21BZGRyZXNzKHBvaW50ZXIuYWRkcmVzcyArIF9pbnRQdHJTaXplICogaW5kZXgpOwoKLy8KLy8gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGdlbmVyYXRlZCwgZG8gbm90IGVkaXQgYnkgaGFuZC4KLy8KLy8gQ29kZSBnZW5lcmF0ZWQgYnkgYHJ1bnRpbWUvdG9vbHMvZmZpL3Nka19saWJfZmZpX2dlbmVyYXRvci5kYXJ0YC4KLy8KCmV4dGVuc2lvbiBJbnQ4UG9pbnRlciBvbiBQb2ludGVyPEludDg+IHsKICBAcGF0Y2gKICBpbnQgZ2V0IHZhbHVlID0+IF9sb2FkSW50OCh0aGlzLCAwKTsKCiAgQHBhdGNoCiAgc2V0IHZhbHVlKGludCB2YWx1ZSkgPT4gX3N0b3JlSW50OCh0aGlzLCAwLCB2YWx1ZSk7CgogIEBwYXRjaAogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpID0+IF9sb2FkSW50OCh0aGlzLCBpbmRleCk7CgogIEBwYXRjaAogIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgPT4gX3N0b3JlSW50OCh0aGlzLCBpbmRleCwgdmFsdWUpOwoKICBAcGF0Y2gKICBJbnQ4TGlzdCBhc1R5cGVkTGlzdChpbnQgZWxlbWVudHMpID0+IF9hc0V4dGVybmFsVHlwZWREYXRhKHRoaXMsIGVsZW1lbnRzKTsKfQoKZXh0ZW5zaW9uIEludDE2UG9pbnRlciBvbiBQb2ludGVyPEludDE2PiB7CiAgQHBhdGNoCiAgaW50IGdldCB2YWx1ZSA9PiBfbG9hZEludDE2KHRoaXMsIDApOwoKICBAcGF0Y2gKICBzZXQgdmFsdWUoaW50IHZhbHVlKSA9PiBfc3RvcmVJbnQxNih0aGlzLCAwLCB2YWx1ZSk7CgogIEBwYXRjaAogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpID0+IF9sb2FkSW50MTYodGhpcywgaW5kZXgpOwoKICBAcGF0Y2gKICBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpID0+IF9zdG9yZUludDE2KHRoaXMsIGluZGV4LCB2YWx1ZSk7CgogIEBwYXRjaAogIEludDE2TGlzdCBhc1R5cGVkTGlzdChpbnQgZWxlbWVudHMpID0+IF9hc0V4dGVybmFsVHlwZWREYXRhKHRoaXMsIGVsZW1lbnRzKTsKfQoKZXh0ZW5zaW9uIEludDMyUG9pbnRlciBvbiBQb2ludGVyPEludDMyPiB7CiAgQHBhdGNoCiAgaW50IGdldCB2YWx1ZSA9PiBfbG9hZEludDMyKHRoaXMsIDApOwoKICBAcGF0Y2gKICBzZXQgdmFsdWUoaW50IHZhbHVlKSA9PiBfc3RvcmVJbnQzMih0aGlzLCAwLCB2YWx1ZSk7CgogIEBwYXRjaAogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpID0+IF9sb2FkSW50MzIodGhpcywgaW5kZXgpOwoKICBAcGF0Y2gKICBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpID0+IF9zdG9yZUludDMyKHRoaXMsIGluZGV4LCB2YWx1ZSk7CgogIEBwYXRjaAogIEludDMyTGlzdCBhc1R5cGVkTGlzdChpbnQgZWxlbWVudHMpID0+IF9hc0V4dGVybmFsVHlwZWREYXRhKHRoaXMsIGVsZW1lbnRzKTsKfQoKZXh0ZW5zaW9uIEludDY0UG9pbnRlciBvbiBQb2ludGVyPEludDY0PiB7CiAgQHBhdGNoCiAgaW50IGdldCB2YWx1ZSA9PiBfbG9hZEludDY0KHRoaXMsIDApOwoKICBAcGF0Y2gKICBzZXQgdmFsdWUoaW50IHZhbHVlKSA9PiBfc3RvcmVJbnQ2NCh0aGlzLCAwLCB2YWx1ZSk7CgogIEBwYXRjaAogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpID0+IF9sb2FkSW50NjQodGhpcywgaW5kZXgpOwoKICBAcGF0Y2gKICBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpID0+IF9zdG9yZUludDY0KHRoaXMsIGluZGV4LCB2YWx1ZSk7CgogIEBwYXRjaAogIEludDY0TGlzdCBhc1R5cGVkTGlzdChpbnQgZWxlbWVudHMpID0+IF9hc0V4dGVybmFsVHlwZWREYXRhKHRoaXMsIGVsZW1lbnRzKTsKfQoKZXh0ZW5zaW9uIFVpbnQ4UG9pbnRlciBvbiBQb2ludGVyPFVpbnQ4PiB7CiAgQHBhdGNoCiAgaW50IGdldCB2YWx1ZSA9PiBfbG9hZFVpbnQ4KHRoaXMsIDApOwoKICBAcGF0Y2gKICBzZXQgdmFsdWUoaW50IHZhbHVlKSA9PiBfc3RvcmVVaW50OCh0aGlzLCAwLCB2YWx1ZSk7CgogIEBwYXRjaAogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpID0+IF9sb2FkVWludDgodGhpcywgaW5kZXgpOwoKICBAcGF0Y2gKICBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpID0+IF9zdG9yZVVpbnQ4KHRoaXMsIGluZGV4LCB2YWx1ZSk7CgogIEBwYXRjaAogIFVpbnQ4TGlzdCBhc1R5cGVkTGlzdChpbnQgZWxlbWVudHMpID0+IF9hc0V4dGVybmFsVHlwZWREYXRhKHRoaXMsIGVsZW1lbnRzKTsKfQoKZXh0ZW5zaW9uIFVpbnQxNlBvaW50ZXIgb24gUG9pbnRlcjxVaW50MTY+IHsKICBAcGF0Y2gKICBpbnQgZ2V0IHZhbHVlID0+IF9sb2FkVWludDE2KHRoaXMsIDApOwoKICBAcGF0Y2gKICBzZXQgdmFsdWUoaW50IHZhbHVlKSA9PiBfc3RvcmVVaW50MTYodGhpcywgMCwgdmFsdWUpOwoKICBAcGF0Y2gKICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSA9PiBfbG9hZFVpbnQxNih0aGlzLCBpbmRleCk7CgogIEBwYXRjaAogIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgPT4gX3N0b3JlVWludDE2KHRoaXMsIGluZGV4LCB2YWx1ZSk7CgogIEBwYXRjaAogIFVpbnQxNkxpc3QgYXNUeXBlZExpc3QoaW50IGVsZW1lbnRzKSA9PiBfYXNFeHRlcm5hbFR5cGVkRGF0YSh0aGlzLCBlbGVtZW50cyk7Cn0KCmV4dGVuc2lvbiBVaW50MzJQb2ludGVyIG9uIFBvaW50ZXI8VWludDMyPiB7CiAgQHBhdGNoCiAgaW50IGdldCB2YWx1ZSA9PiBfbG9hZFVpbnQzMih0aGlzLCAwKTsKCiAgQHBhdGNoCiAgc2V0IHZhbHVlKGludCB2YWx1ZSkgPT4gX3N0b3JlVWludDMyKHRoaXMsIDAsIHZhbHVlKTsKCiAgQHBhdGNoCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgPT4gX2xvYWRVaW50MzIodGhpcywgaW5kZXgpOwoKICBAcGF0Y2gKICBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpID0+IF9zdG9yZVVpbnQzMih0aGlzLCBpbmRleCwgdmFsdWUpOwoKICBAcGF0Y2gKICBVaW50MzJMaXN0IGFzVHlwZWRMaXN0KGludCBlbGVtZW50cykgPT4gX2FzRXh0ZXJuYWxUeXBlZERhdGEodGhpcywgZWxlbWVudHMpOwp9CgpleHRlbnNpb24gVWludDY0UG9pbnRlciBvbiBQb2ludGVyPFVpbnQ2ND4gewogIEBwYXRjaAogIGludCBnZXQgdmFsdWUgPT4gX2xvYWRVaW50NjQodGhpcywgMCk7CgogIEBwYXRjaAogIHNldCB2YWx1ZShpbnQgdmFsdWUpID0+IF9zdG9yZVVpbnQ2NCh0aGlzLCAwLCB2YWx1ZSk7CgogIEBwYXRjaAogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpID0+IF9sb2FkVWludDY0KHRoaXMsIGluZGV4KTsKCiAgQHBhdGNoCiAgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSA9PiBfc3RvcmVVaW50NjQodGhpcywgaW5kZXgsIHZhbHVlKTsKCiAgQHBhdGNoCiAgVWludDY0TGlzdCBhc1R5cGVkTGlzdChpbnQgZWxlbWVudHMpID0+IF9hc0V4dGVybmFsVHlwZWREYXRhKHRoaXMsIGVsZW1lbnRzKTsKfQoKZXh0ZW5zaW9uIEludFB0clBvaW50ZXIgb24gUG9pbnRlcjxJbnRQdHI+IHsKICBAcGF0Y2gKICBpbnQgZ2V0IHZhbHVlID0+IF9sb2FkSW50UHRyKHRoaXMsIDApOwoKICBAcGF0Y2gKICBzZXQgdmFsdWUoaW50IHZhbHVlKSA9PiBfc3RvcmVJbnRQdHIodGhpcywgMCwgdmFsdWUpOwoKICBAcGF0Y2gKICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSA9PiBfbG9hZEludFB0cih0aGlzLCBpbmRleCk7CgogIEBwYXRjaAogIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgPT4gX3N0b3JlSW50UHRyKHRoaXMsIGluZGV4LCB2YWx1ZSk7Cn0KCmV4dGVuc2lvbiBGbG9hdFBvaW50ZXIgb24gUG9pbnRlcjxGbG9hdD4gewogIEBwYXRjaAogIGRvdWJsZSBnZXQgdmFsdWUgPT4gX2xvYWRGbG9hdCh0aGlzLCAwKTsKCiAgQHBhdGNoCiAgc2V0IHZhbHVlKGRvdWJsZSB2YWx1ZSkgPT4gX3N0b3JlRmxvYXQodGhpcywgMCwgdmFsdWUpOwoKICBAcGF0Y2gKICBkb3VibGUgb3BlcmF0b3IgW10oaW50IGluZGV4KSA9PiBfbG9hZEZsb2F0KHRoaXMsIGluZGV4KTsKCiAgQHBhdGNoCiAgb3BlcmF0b3IgW109KGludCBpbmRleCwgZG91YmxlIHZhbHVlKSA9PiBfc3RvcmVGbG9hdCh0aGlzLCBpbmRleCwgdmFsdWUpOwoKICBAcGF0Y2gKICBGbG9hdDMyTGlzdCBhc1R5cGVkTGlzdChpbnQgZWxlbWVudHMpID0+IF9hc0V4dGVybmFsVHlwZWREYXRhKHRoaXMsIGVsZW1lbnRzKTsKfQoKZXh0ZW5zaW9uIERvdWJsZVBvaW50ZXIgb24gUG9pbnRlcjxEb3VibGU+IHsKICBAcGF0Y2gKICBkb3VibGUgZ2V0IHZhbHVlID0+IF9sb2FkRG91YmxlKHRoaXMsIDApOwoKICBAcGF0Y2gKICBzZXQgdmFsdWUoZG91YmxlIHZhbHVlKSA9PiBfc3RvcmVEb3VibGUodGhpcywgMCwgdmFsdWUpOwoKICBAcGF0Y2gKICBkb3VibGUgb3BlcmF0b3IgW10oaW50IGluZGV4KSA9PiBfbG9hZERvdWJsZSh0aGlzLCBpbmRleCk7CgogIEBwYXRjaAogIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgPT4gX3N0b3JlRG91YmxlKHRoaXMsIGluZGV4LCB2YWx1ZSk7CgogIEBwYXRjaAogIEZsb2F0NjRMaXN0IGFzVHlwZWRMaXN0KGludCBlbGVtZW50cykgPT4gX2FzRXh0ZXJuYWxUeXBlZERhdGEodGhpcywgZWxlbWVudHMpOwp9CgovLwovLyBFbmQgb2YgZ2VuZXJhdGVkIGNvZGUuCi8vCgpleHRlbnNpb24gUG9pbnRlclBvaW50ZXI8VCBleHRlbmRzIE5hdGl2ZVR5cGU+IG9uIFBvaW50ZXI8UG9pbnRlcjxUPj4gewogIEBwYXRjaAogIFBvaW50ZXI8VD4gZ2V0IHZhbHVlID0+IF9sb2FkUG9pbnRlcih0aGlzLCAwKTsKCiAgQHBhdGNoCiAgc2V0IHZhbHVlKFBvaW50ZXI8VD4gdmFsdWUpID0+IF9zdG9yZVBvaW50ZXIodGhpcywgMCwgdmFsdWUpOwoKICBAcGF0Y2gKICBQb2ludGVyPFQ+IG9wZXJhdG9yIFtdKGludCBpbmRleCkgPT4gX2xvYWRQb2ludGVyKHRoaXMsIGluZGV4KTsKCiAgQHBhdGNoCiAgb3BlcmF0b3IgW109KGludCBpbmRleCwgUG9pbnRlcjxUPiB2YWx1ZSkgPT4KICAgICAgX3N0b3JlUG9pbnRlcih0aGlzLCBpbmRleCwgdmFsdWUpOwp9CgpleHRlbnNpb24gU3RydWN0UG9pbnRlcjxUIGV4dGVuZHMgU3RydWN0PiBvbiBQb2ludGVyPFQ+IHsKICBAcGF0Y2gKICBUIGdldCByZWYgPT4gX2xvYWRTdHJ1Y3QodGhpcywgMCk7CgogIEBwYXRjaAogIFQgb3BlcmF0b3IgW10oaW50IGluZGV4KSA9PiBfbG9hZFN0cnVjdCh0aGlzLCBpbmRleCk7Cn0KCmV4dGVuc2lvbiBOYXRpdmVQb3J0IG9uIFNlbmRQb3J0IHsKICBAcGF0Y2gKICBpbnQgZ2V0IG5hdGl2ZVBvcnQgbmF0aXZlICJTZW5kUG9ydEltcGxfZ2V0X2lkIjsKfQqBxgBOTjwBDwFJHCQaFwElCwwMDQwNDA0MDQMBKwEHJURMTigrJygyFwIBOQFMUQFLThJCRgE1JgE0A09JA09RIANLSlFFRUMBTSYBBxomCT0BQTUFSysJRi0kHD8EAU4JKAEyLwklOgEJLTQBCUsBCSdQBAIBRDscC4CMAU0tA0lOT0EDN0cBSgFKAUoBSgFNAU0BTQFNAU0BUAEvRgE/HQE9HAE/HQE/HQE/HQE/HQFBHgFBHgFBHgFBHgFCHQFEHgFRMQFCNgFFNgFFNgFFNgFFNgFINgFINgFINgFIQAFFNgFINgE9M0ABAzkDRQMBKQknAQk2AQk4AQlIAQlOAgErCSgBCTcBCTkBCUkBCU8CASsJKAEJNwEJOQEJSQEJTwIBKwkoAQk3AQk5AQlJAQlPAgErCSgBCTcBCTkBCUkBCU8CAS0JKQEJOAEJOgEJSgEJUAIBLQkpAQk4AQk6AQlKAQlQAgEtCSkBCTgBCToBCUoBCVACAS0JKQEJOAEJOgEJSgIBKwkrAQk6AQk8AQlMAQlRAgEtCSwBCTsBCT0BCU0BCVECAQMaAwFICTEBCUABCUIBCS8pAgE6CSUBCTgCASMJMwIBHWRhcnQ6ZmZpLXBhdGNoL2ZmaV9wYXRjaC5kYXJ0QW9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2ZmaS9uYXRpdmVfdHlwZS5kYXJ0jtsvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5mZmk7CgovLy8gW05hdGl2ZVR5cGVdJ3Mgc3VidHlwZXMgcmVwcmVzZW50IGEgbmF0aXZlIHR5cGUgaW4gQy4KLy8vCi8vLyBbTmF0aXZlVHlwZV0ncyBzdWJ0eXBlcyBhcmUgbm90IGNvbnN0cnVjdGlibGUgaW4gdGhlIERhcnQgY29kZSBhbmQgc2VydmUKLy8vIHB1cmVseSBhcyBtYXJrZXJzIGluIHR5cGUgc2lnbmF0dXJlcy4KYWJzdHJhY3QgY2xhc3MgTmF0aXZlVHlwZSB7CiAgY29uc3QgTmF0aXZlVHlwZSgpOwp9CgovLy8gW19OYXRpdmVJbnRlZ2VyXSdzIHN1YnR5cGVzIHJlcHJlc2VudCBhIG5hdGl2ZSBpbnRlZ2VyIGluIEMuCi8vLwovLy8gW19OYXRpdmVJbnRlZ2VyXSdzIHN1YnR5cGVzIGFyZSBub3QgY29uc3RydWN0aWJsZSBpbiB0aGUgRGFydCBjb2RlIGFuZCBzZXJ2ZQovLy8gcHVyZWx5IGFzIG1hcmtlcnMgaW4gdHlwZSBzaWduYXR1cmVzLgpjbGFzcyBfTmF0aXZlSW50ZWdlciBleHRlbmRzIE5hdGl2ZVR5cGUgewogIGNvbnN0IF9OYXRpdmVJbnRlZ2VyKCk7Cn0KCi8vLyBbX05hdGl2ZURvdWJsZV0ncyBzdWJ0eXBlcyByZXByZXNlbnQgYSBuYXRpdmUgZmxvYXQgb3IgZG91YmxlIGluIEMuCi8vLwovLy8gW19OYXRpdmVEb3VibGVdJ3Mgc3VidHlwZXMgYXJlIG5vdCBjb25zdHJ1Y3RpYmxlIGluIHRoZSBEYXJ0IGNvZGUgYW5kIHNlcnZlCi8vLyBwdXJlbHkgYXMgbWFya2VycyBpbiB0eXBlIHNpZ25hdHVyZXMuCmNsYXNzIF9OYXRpdmVEb3VibGUgZXh0ZW5kcyBOYXRpdmVUeXBlIHsKICBjb25zdCBfTmF0aXZlRG91YmxlKCk7Cn0KCi8vLyBSZXByZXNlbnRzIGEgbmF0aXZlIHNpZ25lZCA4IGJpdCBpbnRlZ2VyIGluIEMuCi8vLwovLy8gW0ludDhdIGlzIG5vdCBjb25zdHJ1Y3RpYmxlIGluIHRoZSBEYXJ0IGNvZGUgYW5kIHNlcnZlcyBwdXJlbHkgYXMgbWFya2VyIGluCi8vLyB0eXBlIHNpZ25hdHVyZXMuCmNsYXNzIEludDggZXh0ZW5kcyBfTmF0aXZlSW50ZWdlciB7CiAgY29uc3QgSW50OCgpOwp9CgovLy8gUmVwcmVzZW50cyBhIG5hdGl2ZSBzaWduZWQgMTYgYml0IGludGVnZXIgaW4gQy4KLy8vCi8vLyBbSW50MTZdIGlzIG5vdCBjb25zdHJ1Y3RpYmxlIGluIHRoZSBEYXJ0IGNvZGUgYW5kIHNlcnZlcyBwdXJlbHkgYXMgbWFya2VyIGluCi8vLyB0eXBlIHNpZ25hdHVyZXMuCmNsYXNzIEludDE2IGV4dGVuZHMgX05hdGl2ZUludGVnZXIgewogIGNvbnN0IEludDE2KCk7Cn0KCi8vLyBSZXByZXNlbnRzIGEgbmF0aXZlIHNpZ25lZCAzMiBiaXQgaW50ZWdlciBpbiBDLgovLy8KLy8vIFtJbnQzMl0gaXMgbm90IGNvbnN0cnVjdGlibGUgaW4gdGhlIERhcnQgY29kZSBhbmQgc2VydmVzIHB1cmVseSBhcyBtYXJrZXIgaW4KLy8vIHR5cGUgc2lnbmF0dXJlcy4KY2xhc3MgSW50MzIgZXh0ZW5kcyBfTmF0aXZlSW50ZWdlciB7CiAgY29uc3QgSW50MzIoKTsKfQoKLy8vIFJlcHJlc2VudHMgYSBuYXRpdmUgc2lnbmVkIDY0IGJpdCBpbnRlZ2VyIGluIEMuCi8vLwovLy8gW0ludDY0XSBpcyBub3QgY29uc3RydWN0aWJsZSBpbiB0aGUgRGFydCBjb2RlIGFuZCBzZXJ2ZXMgcHVyZWx5IGFzIG1hcmtlciBpbgovLy8gdHlwZSBzaWduYXR1cmVzLgpjbGFzcyBJbnQ2NCBleHRlbmRzIF9OYXRpdmVJbnRlZ2VyIHsKICBjb25zdCBJbnQ2NCgpOwp9CgovLy8gUmVwcmVzZW50cyBhIG5hdGl2ZSB1bnNpZ25lZCA4IGJpdCBpbnRlZ2VyIGluIEMuCi8vLwovLy8gW1VpbnQ4XSBpcyBub3QgY29uc3RydWN0aWJsZSBpbiB0aGUgRGFydCBjb2RlIGFuZCBzZXJ2ZXMgcHVyZWx5IGFzIG1hcmtlciBpbgovLy8gdHlwZSBzaWduYXR1cmVzLgpjbGFzcyBVaW50OCBleHRlbmRzIF9OYXRpdmVJbnRlZ2VyIHsKICBjb25zdCBVaW50OCgpOwp9CgovLy8gUmVwcmVzZW50cyBhIG5hdGl2ZSB1bnNpZ25lZCAxNiBiaXQgaW50ZWdlciBpbiBDLgovLy8KLy8vIFtVaW50MTZdIGlzIG5vdCBjb25zdHJ1Y3RpYmxlIGluIHRoZSBEYXJ0IGNvZGUgYW5kIHNlcnZlcyBwdXJlbHkgYXMgbWFya2VyCi8vLyBpbiB0eXBlIHNpZ25hdHVyZXMuCmNsYXNzIFVpbnQxNiBleHRlbmRzIF9OYXRpdmVJbnRlZ2VyIHsKICBjb25zdCBVaW50MTYoKTsKfQoKLy8vIFJlcHJlc2VudHMgYSBuYXRpdmUgdW5zaWduZWQgMzIgYml0IGludGVnZXIgaW4gQy4KLy8vCi8vLyBbVWludDMyXSBpcyBub3QgY29uc3RydWN0aWJsZSBpbiB0aGUgRGFydCBjb2RlIGFuZCBzZXJ2ZXMgcHVyZWx5IGFzIG1hcmtlcgovLy8gaW4gdHlwZSBzaWduYXR1cmVzLgpjbGFzcyBVaW50MzIgZXh0ZW5kcyBfTmF0aXZlSW50ZWdlciB7CiAgY29uc3QgVWludDMyKCk7Cn0KCi8vLyBSZXByZXNlbnRzIGEgbmF0aXZlIHVuc2lnbmVkIDY0IGJpdCBpbnRlZ2VyIGluIEMuCi8vLwovLy8gW1VpbnQ2NF0gaXMgbm90IGNvbnN0cnVjdGlibGUgaW4gdGhlIERhcnQgY29kZSBhbmQgc2VydmVzIHB1cmVseSBhcyBtYXJrZXIKLy8vIGluIHR5cGUgc2lnbmF0dXJlcy4KY2xhc3MgVWludDY0IGV4dGVuZHMgX05hdGl2ZUludGVnZXIgewogIGNvbnN0IFVpbnQ2NCgpOwp9CgovLy8gUmVwcmVzZW50cyBhIG5hdGl2ZSBwb2ludGVyLXNpemVkIGludGVnZXIgaW4gQy4KLy8vCi8vLyBbSW50UHRyXSBpcyBub3QgY29uc3RydWN0aWJsZSBpbiB0aGUgRGFydCBjb2RlIGFuZCBzZXJ2ZXMgcHVyZWx5IGFzIG1hcmtlcgovLy8gaW4gdHlwZSBzaWduYXR1cmVzLgpjbGFzcyBJbnRQdHIgZXh0ZW5kcyBfTmF0aXZlSW50ZWdlciB7CiAgY29uc3QgSW50UHRyKCk7Cn0KCi8vLyBSZXByZXNlbnRzIGEgbmF0aXZlIDMyIGJpdCBmbG9hdCBpbiBDLgovLy8KLy8vIFtGbG9hdF0gaXMgbm90IGNvbnN0cnVjdGlibGUgaW4gdGhlIERhcnQgY29kZSBhbmQgc2VydmVzIHB1cmVseSBhcyBtYXJrZXIKLy8vIGluIHR5cGUgc2lnbmF0dXJlcy4KY2xhc3MgRmxvYXQgZXh0ZW5kcyBfTmF0aXZlRG91YmxlIHsKICBjb25zdCBGbG9hdCgpOwp9CgovLy8gUmVwcmVzZW50cyBhIG5hdGl2ZSA2NCBiaXQgZG91YmxlIGluIEMuCi8vLwovLy8gW0RvdWJsZV0gaXMgbm90IGNvbnN0cnVjdGlibGUgaW4gdGhlIERhcnQgY29kZSBhbmQgc2VydmVzIHB1cmVseSBhcyBtYXJrZXIKLy8vIGluIHR5cGUgc2lnbmF0dXJlcy4KY2xhc3MgRG91YmxlIGV4dGVuZHMgX05hdGl2ZURvdWJsZSB7CiAgY29uc3QgRG91YmxlKCk7Cn0KCi8vLyBSZXByZXNlbnRzIGEgdm9pZCB0eXBlIGluIEMuCi8vLwovLy8gW1ZvaWRdIGlzIG5vdCBjb25zdHJ1Y3RpYmxlIGluIHRoZSBEYXJ0IGNvZGUgYW5kIHNlcnZlcyBwdXJlbHkgYXMgbWFya2VyIGluCi8vLyB0eXBlIHNpZ25hdHVyZXMuCkB1bnNpemVkCmFic3RyYWN0IGNsYXNzIFZvaWQgZXh0ZW5kcyBOYXRpdmVUeXBlIHt9CgovLy8gUmVwcmVzZW50cyBhIGZ1bmN0aW9uIHR5cGUgaW4gQy4KLy8vCi8vLyBbTmF0aXZlRnVuY3Rpb25dIGlzIG5vdCBjb25zdHJ1Y3RpYmxlIGluIHRoZSBEYXJ0IGNvZGUgYW5kIHNlcnZlcyBwdXJlbHkgYXMKLy8vIG1hcmtlciBpbiB0eXBlIHNpZ25hdHVyZXMuCkB1bnNpemVkCmFic3RyYWN0IGNsYXNzIE5hdGl2ZUZ1bmN0aW9uPFQgZXh0ZW5kcyBGdW5jdGlvbj4gZXh0ZW5kcyBOYXRpdmVUeXBlIHt9CoCHAE5OPAEPARIBOgRNKhwWAgFBBFEqKhoCAUgEUCopGQIBMwRQFSQQAgE0BFEVJRECATQEURUlEQIBNARRFSURAgE1BFEVJRECATYETxgmEgIBNgRPGCYSAgE2BE8YJhICATQETxgmEgIBKwROGCQRAgEsBE8YJRICASEEUBUJKgElBFAfCUgBGWRhcnQ6ZmZpL25hdGl2ZV90eXBlLmRhcnRBb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvZmZpL2Fubm90YXRpb25zLmRhcnSF6i8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmZmaTsKCmNsYXNzIERhcnRSZXByZXNlbnRhdGlvbk9mIHsKICAvLy8gUmVwcmVzZW50cyB0aGUgRGFydCB0eXBlIGNvcnJlc3BvbmRpbmcgdG8gYSBbTmF0aXZlVHlwZV0uCiAgLy8vCiAgLy8vIFtJbnQ4XSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBbaW50XQogIC8vLyBbSW50MTZdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gW2ludF0KICAvLy8gW0ludDMyXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IFtpbnRdCiAgLy8vIFtJbnQ2NF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBbaW50XQogIC8vLyBbVWludDhdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gW2ludF0KICAvLy8gW1VpbnQxNl0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IFtpbnRdCiAgLy8vIFtVaW50MzJdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBbaW50XQogIC8vLyBbVWludDY0XSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gW2ludF0KICAvLy8gW0ludFB0cl0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IFtpbnRdCiAgLy8vIFtEb3VibGVdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBbZG91YmxlXQogIC8vLyBbRmxvYXRdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gW2RvdWJsZV0KICAvLy8gW1BvaW50ZXJdPFQ+ICAgICAgICAgICAgICAgICAgICAgICAgIC0+IFtQb2ludGVyXTxUPgogIC8vLyBbTmF0aXZlRnVuY3Rpb25dPFQxIEZ1bmN0aW9uKFQyLCBUMykgLT4gUzEgRnVuY3Rpb24oUzIsIFMzKQogIC8vLyAgICB3aGVyZSBEYXJ0UmVwcmVzZW50YXRpb25PZihUbikgLT4gU24KICAvLy8gVCBleHRlbmRzIFN0cnVjdCAgICAgICAgICAgICAgICAgIC0+IFQKICBjb25zdCBEYXJ0UmVwcmVzZW50YXRpb25PZihTdHJpbmcgbmF0aXZlVHlwZSk7Cn0KCmNsYXNzIFVuc2l6ZWQgewogIGNvbnN0IFVuc2l6ZWQoKTsKfQoKLy8vIFRoaXMgW05hdGl2ZVR5cGVdIGRvZXMgbm90IGhhdmUgcHJlZGVmaW5lZCBzaXplLgovLy8KLy8vIFVuc2l6ZWQgTmF0aXZlVHlwZXMgZG8gbm90IHN1cHBvcnQgW3NpemVPZl0gYmVjYXVzZSB0aGVpciBzaXplIGlzIHVua25vd24uCi8vLyBDb25zZXF1ZW50bHksIFthbGxvY2F0ZV0sIFtQb2ludGVyLmxvYWRdLCBbUG9pbnRlci5zdG9yZV0sIGFuZAovLy8gW1BvaW50ZXIuZWxlbWVudEF0XSBhcmUgbm90IGF2YWlsYWJsZS4KY29uc3QgdW5zaXplZCA9IGNvbnN0IFVuc2l6ZWQoKTsKKQBOTjwBDwESAR1ABjQ0NDQ0NDQ0NDc3O0IuLTECARATAgE1BE9DKyEBGWRhcnQ6ZmZpL2Fubm90YXRpb25zLmRhcnRFb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvZmZpL2R5bmFtaWNfbGlicmFyeS5kYXJ0hoYvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5mZmk7CgovLy8gUmVwcmVzZW50cyBhIGR5bmFtaWNhbGx5IGxvYWRlZCBDIGxpYnJhcnkuCmNsYXNzIER5bmFtaWNMaWJyYXJ5IHsKICAvLy8gQ3JlYXRlcyBhIGR5bmFtaWMgbGlicmFyeSBob2xkaW5nIGFsbCBnbG9iYWwgc3ltYm9scy4KICAvLy8KICAvLy8gQW55IHN5bWJvbCBpbiBhIGxpYnJhcnkgY3VycmVudGx5IGxvYWRlZCB3aXRoIGdsb2JhbCB2aXNpYmlsaXR5IChpbmNsdWRpbmcKICAvLy8gdGhlIGV4ZWN1dGFibGUgaXRzZWxmKSBtYXkgYmUgcmVzb2x2ZWQgaW4gdGhpcyBsaWJyYXJ5LgogIC8vLwogIC8vLyBUaGlzIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzLCBpbnN0ZWFkIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgZXh0ZXJuYWwgZmFjdG9yeSBEeW5hbWljTGlicmFyeS5wcm9jZXNzKCk7CgogIC8vLyBDcmVhdGVzIGEgZHluYW1pYyBsaWJyYXJ5IHJlcHJlc2VudGluZyB0aGUgcnVubmluZyBleGVjdXRhYmxlLgogIGV4dGVybmFsIGZhY3RvcnkgRHluYW1pY0xpYnJhcnkuZXhlY3V0YWJsZSgpOwoKICAvLy8gTG9hZHMgYSBkeW5hbWljIGxpYnJhcnkgZmlsZSB3aXRoIGxvY2FsIHZpc2liaWxpdHkuCiAgLy8vCiAgLy8vIFRocm93cyBhbiBbQXJndW1lbnRFcnJvcl0gaWYgbG9hZGluZyB0aGUgZHluYW1pYyBsaWJyYXJ5IGZhaWxzLgogIGV4dGVybmFsIGZhY3RvcnkgRHluYW1pY0xpYnJhcnkub3BlbihTdHJpbmcgbmFtZSk7CgogIC8vLyBMb29rcyB1cCBhIHN5bWJvbCBpbiB0aGUgW0R5bmFtaWNMaWJyYXJ5XSBhbmQgcmV0dXJucyBpdHMgYWRkcmVzcyBpbgogIC8vLyBtZW1vcnkuIEVxdWl2YWxlbnQgb2YgZGxzeW0uCiAgLy8vCiAgLy8vIFRocm93cyBhbiBbQXJndW1lbnRFcnJvcl0gaWYgaXQgZmFpbHMgdG8gbG9va3VwIHRoZSBzeW1ib2wuCiAgZXh0ZXJuYWwgUG9pbnRlcjxUPiBsb29rdXA8VCBleHRlbmRzIE5hdGl2ZVR5cGU+KFN0cmluZyBzeW1ib2xOYW1lKTsKCiAgLy8vIEhlbHBlciB0aGF0IGNvbWJpbmVzIGxvb2t1cCBhbmQgY2FzdCB0byBhIERhcnQgZnVuY3Rpb24uCiAgZXh0ZXJuYWwgRiBsb29rdXBGdW5jdGlvbjxUIGV4dGVuZHMgRnVuY3Rpb24sIEYgZXh0ZW5kcyBGdW5jdGlvbj4oCiAgICAgIFN0cmluZyBzeW1ib2xOYW1lKTsKCiAgLy8vIER5bmFtaWMgbGlicmFyaWVzIGFyZSBlcXVhbCBpZiB0aGV5IGxvYWQgdGhlIHNhbWUgbGlicmFyeS4KICBleHRlcm5hbCBib29sIG9wZXJhdG9yID09KG90aGVyKTsKCiAgLy8vIFRoZSBoYXNoIGNvZGUgZm9yIGEgRHluYW1pY0xpYnJhcnkgb25seSBkZXBlbmRzIG9uIHRoZSBsb2FkZWQgbGlicmFyeQogIGV4dGVybmFsIGludCBnZXQgaGFzaENvZGU7CgogIC8vLyBUaGUgaGFuZGxlIHRvIHRoZSBkeW5hbWljIGxpYnJhcnkuCiAgZXh0ZXJuYWwgUG9pbnRlcjxWb2lkPiBnZXQgaGFuZGxlOwp9Ci8ATk48AQ8BEgEvFzwGUT4GUC0BRTABOgZGNQFLIwZCRwE/RRoBQSQBTB0BKSUCAR1kYXJ0OmZmaS9keW5hbWljX2xpYnJhcnkuZGFydFxvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vbGliL2ZmaV9keW5hbWljX2xpYnJhcnlfcGF0Y2guZGFydIb4Ly8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgovLyBBbGwgaW1wb3J0cyBtdXN0IGJlIGluIGFsbCBGRkkgcGF0Y2ggZmlsZXMgdG8gbm90IGRlcGVuZCBvbiB0aGUgb3JkZXIKLy8gdGhlIHBhdGNoZXMgYXJlIGFwcGxpZWQuCmltcG9ydCAiZGFydDpfaW50ZXJuYWwiIHNob3cgcGF0Y2g7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKaW1wb3J0ICdkYXJ0Omlzb2xhdGUnOwoKRHluYW1pY0xpYnJhcnkgX29wZW4oU3RyaW5nIG5hbWUpIG5hdGl2ZSAiRmZpX2RsX29wZW4iOwpEeW5hbWljTGlicmFyeSBfcHJvY2Vzc0xpYnJhcnkoKSBuYXRpdmUgIkZmaV9kbF9wcm9jZXNzTGlicmFyeSI7CkR5bmFtaWNMaWJyYXJ5IF9leGVjdXRhYmxlTGlicmFyeSgpIG5hdGl2ZSAiRmZpX2RsX2V4ZWN1dGFibGVMaWJyYXJ5IjsKCkBwYXRjaApAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIER5bmFtaWNMaWJyYXJ5IHsKICBAcGF0Y2gKICBmYWN0b3J5IER5bmFtaWNMaWJyYXJ5Lm9wZW4oU3RyaW5nIG5hbWUpIHsKICAgIHJldHVybiBfb3BlbihuYW1lKTsKICB9CgogIEBwYXRjaAogIGZhY3RvcnkgRHluYW1pY0xpYnJhcnkucHJvY2VzcygpID0+IF9wcm9jZXNzTGlicmFyeSgpOwoKICBAcGF0Y2gKICBmYWN0b3J5IER5bmFtaWNMaWJyYXJ5LmV4ZWN1dGFibGUoKSA9PiBfZXhlY3V0YWJsZUxpYnJhcnkoKTsKCiAgQHBhdGNoCiAgUG9pbnRlcjxUPiBsb29rdXA8VCBleHRlbmRzIE5hdGl2ZVR5cGU+KFN0cmluZyBzeW1ib2xOYW1lKQogICAgICBuYXRpdmUgIkZmaV9kbF9sb29rdXAiOwoKICAvLyBUaGUgcmVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGxpdmVzIGluIEZmaVVzZVNpdGVUcmFuc2Zvcm1lcgogIC8vIGZvciBpbnRlcmZhY2UgY2FsbHMuIE9ubHkgZHluYW1pYyBjYWxscyAod2hpY2ggYXJlIGlsbGVnYWwpIHJlYWNoIHRoaXMKICAvLyBpbXBsZW1lbnRhdGlvbi4KICBAcGF0Y2gKICBGIGxvb2t1cEZ1bmN0aW9uPFQgZXh0ZW5kcyBGdW5jdGlvbiwgRiBleHRlbmRzIEZ1bmN0aW9uPihTdHJpbmcgc3ltYm9sTmFtZSkgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiRHluYW1pYyBpbnZvY2F0aW9uIG9mIGxvb2t1cEZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIik7CiAgfQoKICAvLyBUT0RPKGRhY29oYXJrZXMpOiBFeHBvc2UgdGhpcyB0byB1c2Vycywgb3IgZXh0ZW5kIFBvaW50ZXI/CiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9zZGsvaXNzdWVzLzM1ODgxCiAgaW50IGdldEhhbmRsZSgpIG5hdGl2ZSAiRmZpX2RsX2dldEhhbmRsZSI7CgogIEBwYXRjaAogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChvdGhlciA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gZ2V0SGFuZGxlKCkgPT0gb3RoZXIuZ2V0SGFuZGxlKCk7CiAgfQoKICBAcGF0Y2gKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBnZXRIYW5kbGUoKS5oYXNoQ29kZTsKICB9CgogIEBwYXRjaAogIFBvaW50ZXI8Vm9pZD4gZ2V0IGhhbmRsZSA9PiBQb2ludGVyLmZyb21BZGRyZXNzKGdldEhhbmRsZSgpKTsKfQo/AE5OPAEPAUkcJBoXAThBRwEHGhcJLRgEAQk5AQk/AQk9HgFNTBUJUBxDBAFAMy0BCRwlLQQBCRUhBAEJQAIBLWRhcnQ6ZmZpLXBhdGNoL2ZmaV9keW5hbWljX2xpYnJhcnlfcGF0Y2guZGFydDxvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9mZmkvc3RydWN0LmRhcnSFay8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmZmaTsKCi8vLyBUaGlzIGNsYXNzIGlzIGV4dGVuZGVkIHRvIGRlZmluZSBzdHJ1Y3RzLgovLy8KLy8vIEZpZWxkcyBpbiBhIHN0cnVjdCwgYW5ub3RhdGVkIHdpdGggYSBzdWJ0eXBlIG9mIFtOYXRpdmVUeXBlXSwgYXJlCi8vLyBhdXRvbWF0aWNhbGx5IHRyYW5zZm9ybWVkIGludG8gd3JhcHBlcnMgdG8gYWNjZXNzIHRoZSBmaWVsZHMgb2YgdGhlIHN0cnVjdAovLy8gaW4gbmF0aXZlIG1lbW9yeS4KLy8vCi8vLyBBbGwgZmllbGRzIGluIGEgc3RydWN0IG11c3QgZWl0aGVyIGhhdmUgYSB0eXBlIHdoaWNoIGV4dGVuZHMgW05hdGl2ZVR5cGVdIG9yCi8vLyBlbHNlIGhhdmUgYW4gYW5ub3RhdGlvbiBpbmRpY2F0aW5nIHRoZSBjb3JyZXNwb25kaW5nIG5hdGl2ZSB0eXBlIChlLmcuCi8vLyAiQEludDMyKCkiIGZvciAiaW50IikuCi8vLwovLy8gSW5zdGFuY2VzIG9mIGEgc3ViY2xhc3Mgb2YgW1N0cnVjdF0gaGF2ZSByZWZlcmVuY2Ugc2VtYW50aWNzIGFuZCBhcmUgYmFja2VkCi8vLyBieSBuYXRpdmUgbWVtb3J5LiBUaGUgbWF5IGFsbG9jYXRlZCB2aWEgYWxsb2NhdGlvbiBvciBsb2FkZWQgZnJvbSBhCi8vLyBbUG9pbnRlcl0sIGJ1dCBub3QgYnkgYSBnZW5lcmF0aXZlIGNvbnN0cnVjdG9yLgphYnN0cmFjdCBjbGFzcyBTdHJ1Y3QgZXh0ZW5kcyBOYXRpdmVUeXBlIHsKICBmaW5hbCBQb2ludGVyPFN0cnVjdD4gX2FkZHJlc3NPZjsKCiAgLy8vIENvbnN0cnVjdCBhIHJlZmVyZW5jZSB0byB0aGUgW251bGxwdHJdLgogIC8vLwogIC8vLyBVc2UgW1N0cnVjdFBvaW50ZXJdJ3MgYC5yZWZgIHRvIGdhaW4gcmVmZXJlbmNlcyB0byBuYXRpdmUgbWVtb3J5IGJhY2tlZAogIC8vLyBzdHJ1Y3RzLgogIFN0cnVjdCgpIDogX2FkZHJlc3NPZiA9IG51bGxwdHI7CgogIFN0cnVjdC5fZnJvbVBvaW50ZXIodGhpcy5fYWRkcmVzc09mKTsKfQoKLy8vIEV4dGVuc2lvbiBvbiBbU3RydWN0XSBzcGVjaWFsaXplZCBmb3IgaXQncyBzdWJ0eXBlcy4KZXh0ZW5zaW9uIFN0cnVjdEFkZHJlc3NPZjxUIGV4dGVuZHMgU3RydWN0PiBvbiBUIHsKICAvLy8gUmV0dXJucyB0aGUgYWRkcmVzcyBiYWNraW5nIHRoZSByZWZlcmVuY2UuCiAgUG9pbnRlcjxUPiBnZXQgYWRkcmVzc09mID0+IF9hZGRyZXNzT2YgYXMgUG9pbnRlcjxUPjsKfQooAE5OPAEPARIBLgRGTxYEUUsbBFBINCskAS4GTg8jASgCATkzMTgCARRkYXJ0OmZmaS9zdHJ1Y3QuZGFydENvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9pbnRlcm5hbC9pbnRlcm5hbC5kYXJ0tbIvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCmxpYnJhcnkgZGFydC5faW50ZXJuYWw7CgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnCiAgICBzaG93CiAgICAgICAgRnV0dXJlLAogICAgICAgIFN0cmVhbSwKICAgICAgICBTdHJlYW1TdWJzY3JpcHRpb24sCiAgICAgICAgU3RyZWFtVHJhbnNmb3JtZXIsCiAgICAgICAgU3RyZWFtVHJhbnNmb3JtZXJCYXNlLAogICAgICAgIFpvbmU7CmltcG9ydCAnZGFydDpjb252ZXJ0JyBzaG93IENvbnZlcnRlcjsKaW1wb3J0ICdkYXJ0OmNvcmUnIGhpZGUgU3ltYm9sOwppbXBvcnQgJ2RhcnQ6Y29yZScgYXMgY29yZTsKaW1wb3J0ICdkYXJ0Om1hdGgnIHNob3cgUmFuZG9tOwoKcGFydCAnYXN5bmNfY2FzdC5kYXJ0JzsKcGFydCAnY2FzdC5kYXJ0JzsKcGFydCAnZXJyb3JzLmRhcnQnOwpwYXJ0ICdpdGVyYWJsZS5kYXJ0JzsKcGFydCAnbGlzdC5kYXJ0JzsKcGFydCAncHJpbnQuZGFydCc7CnBhcnQgJ3NvcnQuZGFydCc7CnBhcnQgJ3N5bWJvbC5kYXJ0JzsKcGFydCAnbGlua2VkX2xpc3QuZGFydCc7CgovLyBQb3dlcnMgb2YgMTAgdXAgdG8gMTBeMjIgYXJlIHJlcHJlc2VudGFibGUgYXMgZG91Ymxlcy4KLy8gUG93ZXJzIG9mIDEwIGFib3ZlIHRoYXQgYXJlIG9ubHkgYXBwcm94aW1hdGUgZHVlIHRvIGxhY2sgb2YgcHJlY2lzc2lvbi4KLy8gVXNlZCBieSBkb3VibGUtcGFyc2luZy4KY29uc3QgUE9XRVJTX09GX1RFTiA9IGNvbnN0IFsKICAxLjAsIC8vIDAKICAxMC4wLAogIDEwMC4wLAogIDEwMDAuMCwKICAxMDAwMC4wLAogIDEwMDAwMC4wLCAvLyA1CiAgMTAwMDAwMC4wLAogIDEwMDAwMDAwLjAsCiAgMTAwMDAwMDAwLjAsCiAgMTAwMDAwMDAwMC4wLAogIDEwMDAwMDAwMDAwLjAsIC8vIDEwCiAgMTAwMDAwMDAwMDAwLjAsCiAgMTAwMDAwMDAwMDAwMC4wLAogIDEwMDAwMDAwMDAwMDAwLjAsCiAgMTAwMDAwMDAwMDAwMDAwLjAsCiAgMTAwMDAwMDAwMDAwMDAwMC4wLCAvLyAxNQogIDEwMDAwMDAwMDAwMDAwMDAwLjAsCiAgMTAwMDAwMDAwMDAwMDAwMDAwLjAsCiAgMTAwMDAwMDAwMDAwMDAwMDAwMC4wLAogIDEwMDAwMDAwMDAwMDAwMDAwMDAwLjAsCiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwLjAsIC8vIDIwCiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wLAogIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAsCl07CgovKioKICogQW4gW0l0ZXJhYmxlXSBvZiB0aGUgVVRGLTE2IGNvZGUgdW5pdHMgb2YgYSBbU3RyaW5nXSBpbiBpbmRleCBvcmRlci4KICovCmNsYXNzIENvZGVVbml0cyBleHRlbmRzIFVubW9kaWZpYWJsZUxpc3RCYXNlPGludD4gewogIC8qKiBUaGUgc3RyaW5nIHRoYXQgdGhpcyBpcyB0aGUgY29kZSB1bml0cyBvZi4gKi8KICBmaW5hbCBTdHJpbmcgX3N0cmluZzsKCiAgQ29kZVVuaXRzKHRoaXMuX3N0cmluZyk7CgogIGludCBnZXQgbGVuZ3RoID0+IF9zdHJpbmcubGVuZ3RoOwogIGludCBvcGVyYXRvciBbXShpbnQgaSkgPT4gX3N0cmluZy5jb2RlVW5pdEF0KGkpOwoKICBzdGF0aWMgU3RyaW5nIHN0cmluZ09mKENvZGVVbml0cyB1KSA9PiB1Ll9zdHJpbmc7Cn0KCi8vLyBNYXJrcyBhIGZ1bmN0aW9uIG9yIGxpYnJhcnkgYXMgaGF2aW5nIGFuIGV4dGVybmFsIGltcGxlbWVudGF0aW9uICgibmF0aXZlIgovLy8gaW4gdGhlIERhcnQgVk0pLgovLy8KLy8vIE9uIGEgZnVuY3Rpb24sIHRoaXMgcHJvdmlkZXMgYSBiYWNrZW5kLXNwZWNpZmljIFN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIHRvCi8vLyBpZGVudGlmeSB0aGUgZnVuY3Rpb24ncyBpbXBsZW1lbnRhdGlvbi4KLy8vCi8vLyBPbiBhIGxpYnJhcnksIGl0IHByb3ZpZGVzIGEgVXJpIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9jYXRlIHRoZSBuYXRpdmUKLy8vIGxpYnJhcnkncyBpbXBsZW1lbnRhdGlvbi4KY2xhc3MgRXh0ZXJuYWxOYW1lIHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBjb25zdCBFeHRlcm5hbE5hbWUodGhpcy5uYW1lKTsKfQoKLy8gU2hhcmVkIGhleC1wYXJzaW5nIHV0aWxpdGllcy4KCi8vLyBQYXJzZXMgYSBzaW5nbGUgaGV4LWRpZ2l0IGFzIGNvZGUgdW5pdC4KLy8vCi8vLyBSZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUgaWYgdGhlIGNoYXJhY3RlciBpcyBub3QgYSB2YWxpZCBoZXgtZGlnaXQuCmludCBoZXhEaWdpdFZhbHVlKGludCBjaGFyKSB7CiAgYXNzZXJ0KGNoYXIgPj0gMCAmJiBjaGFyIDw9IDB4RkZGRik7CiAgY29uc3QgaW50IGRpZ2l0MCA9IDB4MzA7CiAgY29uc3QgaW50IGEgPSAweDYxOwogIGNvbnN0IGludCBmID0gMHg2NjsKICBpbnQgZGlnaXQgPSBjaGFyIF4gZGlnaXQwOwogIGlmIChkaWdpdCA8PSA5KSByZXR1cm4gZGlnaXQ7CiAgaW50IGxldHRlciA9IChjaGFyIHwgMHgyMCk7CiAgaWYgKGEgPD0gbGV0dGVyICYmIGxldHRlciA8PSBmKSByZXR1cm4gbGV0dGVyIC0gKGEgLSAxMCk7CiAgcmV0dXJuIC0xOwp9CgovLy8gUGFyc2VzIHR3byBoZXggZGlnaXRzIGluIGEgc3RyaW5nLgovLy8KLy8vIFJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZSBpZiBlaXRoZXIgZGlnaXQgaXNuJ3QgdmFsaWQuCmludCBwYXJzZUhleEJ5dGUoU3RyaW5nIHNvdXJjZSwgaW50IGluZGV4KSB7CiAgYXNzZXJ0KGluZGV4ICsgMiA8PSBzb3VyY2UubGVuZ3RoKTsKICBpbnQgZGlnaXQxID0gaGV4RGlnaXRWYWx1ZShzb3VyY2UuY29kZVVuaXRBdChpbmRleCkpOwogIGludCBkaWdpdDIgPSBoZXhEaWdpdFZhbHVlKHNvdXJjZS5jb2RlVW5pdEF0KGluZGV4ICsgMSkpOwogIHJldHVybiBkaWdpdDEgKiAxNiArIGRpZ2l0MiAtIChkaWdpdDIgJiAyNTYpOwp9CgovLy8gR2l2ZW4gYW4gW2luc3RhbmNlXSBvZiBzb21lIGdlbmVyaWMgdHlwZSBbVF0sIGFuZCBbZXh0cmFjdF0sIGEgZmlyc3QtY2xhc3MKLy8vIGdlbmVyaWMgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgc2FtZSBudW1iZXIgb2YgdHlwZSBwYXJhbWV0ZXJzIGFzIFtUXSwKLy8vIGludm9rZXMgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgdHlwZSBhcmd1bWVudHMgdGhhdCB3ZXJlIHBhc3NlZCB0byBUCi8vLyB3aGVuIFtpbnN0YW5jZV0gd2FzIGNvbnN0cnVjdGVkLgovLy8KLy8vIEV4YW1wbGU6Ci8vLwovLy8gYGBgZGFydAovLy8gY2xhc3MgVHdvPEEsIEI+IHt9Ci8vLwovLy8gcHJpbnQoZXh0cmFjdFR5cGVBcmd1bWVudHM8TGlzdD4oPGludD5bXSwgPFQ+KCkgPT4gbmV3IFNldDxUPigpKSk7Ci8vLyAvLyBQcmludHM6IEluc3RhbmNlIG9mICdTZXQ8aW50PicuCi8vLwovLy8gcHJpbnQoZXh0cmFjdFR5cGVBcmd1bWVudHM8TWFwPig8U3RyaW5nLCBib29sPnt9LAovLy8gICAgIDxULCBTPigpID0+IG5ldyBUd288VCwgUz4pKTsKLy8vIC8vIFByaW50czogSW5zdGFuY2Ugb2YgJ1R3bzxTdHJpbmcsIGJvb2w+Jy4KLy8vIGBgYAovLy8KLy8vIFRoZSB0eXBlIGFyZ3VtZW50IFQgaXMgaW1wb3J0YW50IHRvIGNob29zZSB3aGljaCBzcGVjaWZpYyB0eXBlIHBhcmFtZXRlcgovLy8gbGlzdCBpbiBbaW5zdGFuY2VdJ3MgdHlwZSBoaWVyYXJjaHkgaXMgYmVpbmcgZXh0cmFjdGVkLiBDb25zaWRlcjoKLy8vCi8vLyBgYGBkYXJ0Ci8vLyBjbGFzcyBBPFQ+IHt9Ci8vLyBjbGFzcyBCPFQ+IHt9Ci8vLwovLy8gY2xhc3MgQyBpbXBsZW1lbnRzIEE8aW50PiwgQjxTdHJpbmc+IHt9Ci8vLwovLy8gbWFpbigpIHsKLy8vICAgdmFyIGMgPSBuZXcgQygpOwovLy8gICBwcmludChleHRyYWN0VHlwZUFyZ3VtZW50czxBPihjLCA8VD4oKSA9PiA8VD5bXSkpOwovLy8gICAvLyBQcmludHM6IEluc3RhbmNlIG9mICdMaXN0PGludD4nLgovLy8KLy8vICAgcHJpbnQoZXh0cmFjdFR5cGVBcmd1bWVudHM8Qj4oYywgPFQ+KCkgPT4gPFQ+W10pKTsKLy8vICAgLy8gUHJpbnRzOiBJbnN0YW5jZSBvZiAnTGlzdDxTdHJpbmc+Jy4KLy8vIH0KLy8vIGBgYAovLy8KLy8vIEEgY2FsbGVyIG11c3Qgbm90OgovLy8KLy8vICogICBQYXNzIGBudWxsYCBmb3IgW2luc3RhbmNlXS4KLy8vICogICBVc2UgYSBub24tY2xhc3MgdHlwZSAoaS5lLiBhIGZ1bmN0aW9uIHR5cGUpIGZvciBbVF0uCi8vLyAqICAgVXNlIGEgbm9uLWdlbmVyaWMgdHlwZSBmb3IgW1RdLgovLy8gKiAgIFBhc3MgYW4gaW5zdGFuY2Ugb2YgYSBnZW5lcmljIHR5cGUgYW5kIGEgZnVuY3Rpb24gdGhhdCBkb24ndCBib3RoIHRha2UKLy8vICAgICB0aGUgc2FtZSBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHM6Ci8vLwovLy8gICAgIGBgYGRhcnQKLy8vICAgICBleHRyYWN0VHlwZUFyZ3VtZW50czxMaXN0Pig8aW50PltdLCA8VCwgUz4oKSA9PiBudWxsKTsKLy8vICAgICBgYGAKLy8vCi8vLyBTZWUgdGhpcyBpc3N1ZSBmb3IgbW9yZSBjb250ZXh0OgovLy8gaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9zZGsvaXNzdWVzLzMxMzcxCmV4dGVybmFsIE9iamVjdCBleHRyYWN0VHlwZUFyZ3VtZW50czxUPihUIGluc3RhbmNlLCBGdW5jdGlvbiBleHRyYWN0KTsKCi8vLyBBbm5vdGF0aW9uIGNsYXNzIG1hcmtpbmcgdGhlIHZlcnNpb24gd2hlcmUgU0RLIEFQSSB3YXMgYWRkZWQuCi8vLwovLy8gQSBgU2luY2VgIGFubm90YXRpb24gY2FuIGJlIGFwcGxpZWQgdG8gYSBsaWJyYXJ5IGRlY2xhcmF0aW9uLAovLy8gYW55IHB1YmxpYyBkZWNsYXJhdGlvbiBpbiBhIGxpYnJhcnksIG9yIGluIGEgY2xhc3MsIG9yIHRvCi8vLyBhbiBvcHRpb25hbCBwYXJhbWV0ZXIuCi8vLwovLy8gSXQgc2lnbmlmaWVzIHRoYXQgdGhlIGV4cG9ydCwgbWVtYmVyIG9yIHBhcmFtZXRlciB3YXMgKmFkZGVkKiBpbgovLy8gdGhhdCB2ZXJzaW9uLgovLy8KLy8vIFdoZW4gYXBwbGllZCB0byBhIGxpYnJhcnkgZGVjbGFyYXRpb24sIGl0IGFsc28gYSBhcHBsaWVzIHRvCi8vLyBhbGwgbWVtYmVycyBkZWNsYXJlZCBvciBleHBvcnRlZCBieSB0aGF0IGxpYnJhcnkuCi8vLyBJZiBhcHBsaWVkIHRvIGEgY2xhc3MsIGl0IGFsc28gYXBwbGllcyB0byBhbGwgbWVtYmVycyBhbmQgY29uc3RydWN0b3JzCi8vLyBvZiB0aGF0IGNsYXNzLgovLy8gSWYgYXBwbGllZCB0byBhIGNsYXNzIG1ldGhvZCwgb3IgcGFyYW1ldGVyIG9mIHN1Y2gsCi8vLyBhbnkgbWV0aG9kIGltcGxlbWVudGluZyB0aGF0IGludGVyZmFjZSBtZXRob2QgaXMgYWxzbyBhbm5vdGF0ZWQuCi8vLyBJIG11bHRpcGxlIGBTaW5jZWAgYW5ub3RhdGlvbnMgYXBwbHkgdG8gdGhlIHNhbWUgZGVjbGFyYXRpb24gb3IKLy8vIHBhcmFtZXRlciwgdGhlIGxhdGVzdCB2ZXJzaW9uIHRha2VzIHByZWNlbmRlbmNlLgovLy8KLy8vIEFueSB1c2Ugb2YgYSBtYXJrZWQgQVBJIG1heSB0cmlnZ2VyIGEgd2FybmluZyBpZiB0aGUgdXNpbmcgY29kZQovLy8gZG9lcyBub3QgcmVxdWlyZSBhbiBTREsgdmVyc2lvbiBndWFyYW50ZWVpbmcgdGhhdCB0aGUgQVBJIGlzIGF2YWlsYWJsZSwKLy8vIHVubGVzcyB0aGUgQVBJIGZlYXR1cmUgaXMgYWxzbyBwcm92aWRlZCBieSBzb21ldGhpbmcgZWxzZS4KLy8vIEl0IGlzIG9ubHkgYSBwcm9ibGVtIGlmIGFuIGFubm90YXRlZCBmZWF0dXJlIGlzIHVzZWQsIGFuZCB0aGUgYW5ub3RhdGVkCi8vLyBBUEkgaXMgdGhlICpvbmx5KiB0aGluZyBwcm92aWRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkuCi8vLyBGb3IgZXhhbXBsZSwgdXNpbmcgYEZ1dHVyZWAgZXhwb3J0ZWQgYnkgYGRhcnQ6Y29yZWAgaXMgbm90IGEgcHJvYmxlbQovLy8gaWYgdGhlIHNhbWUgbGlicmFyeSBhbHNvIGltcG9ydHMgYGRhcnQ6YXN5bmNgLCBhbmQgdXNpbmcgYW4gb3B0aW9uYWwKLy8vIHBhcmFtZXRlciBvbiBhbiBpbnRlcmZhY2UgaXMgbm90IGEgcHJvYmxlbSBpZiB0aGUgc2FtZSB0eXBlIGFsc28KLy8vIGltcGxlbWVudHMgYW5vdGhlciBpbnRlcmZhY2UgcHJvdmlkaW5nIHRoZSBzYW1lIHBhcmFtZXRlci4KLy8vCi8vLyBUaGUgdmVyc2lvbiBtdXN0IGJlIGEgc2VtYW50aWMgdmVyc2lvbiAobGlrZSBgMS40LjJgIG9yIGAwLjkuNC1yZWMuNGApLAovLy8gb3IgdGhlIGZpcnN0IHR3byBudW1iZXJzIG9mIGEgc2VtYW50aWMgdmVyc2lvbiAobGlrZSBgMS4wYCBvciBgMi4yYCksCi8vLyByZXByZXNlbnRpbmcgYSBzdGFibGUgcmVsZWFzZSwgYW5kIGVxdWl2YWxlbnQgdG8gdGhlIHNlbWFudGljIHZlcnNpb24KLy8vIHlvdSBnZXQgYnkgYXBwZW5kaW5nIGEgYC4wYC4KQFNpbmNlKCIyLjIiKQpjbGFzcyBTaW5jZSB7CiAgZmluYWwgU3RyaW5nIHZlcnNpb247CiAgY29uc3QgU2luY2UodGhpcy52ZXJzaW9uKTsKfQoKLyoqCiAqIEhUVFAgc3RhdHVzIGNvZGVzLiAgRXhwb3J0ZWQgaW4gZGFydDppbyBhbmQgZGFydDpodG1sLgogKi8KYWJzdHJhY3QgY2xhc3MgSHR0cFN0YXR1cyB7CiAgc3RhdGljIGNvbnN0IGludCBjb250aW51ZV8gPSAxMDA7CiAgc3RhdGljIGNvbnN0IGludCBzd2l0Y2hpbmdQcm90b2NvbHMgPSAxMDE7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgcHJvY2Vzc2luZyA9IDEwMjsKICBzdGF0aWMgY29uc3QgaW50IG9rID0gMjAwOwogIHN0YXRpYyBjb25zdCBpbnQgY3JlYXRlZCA9IDIwMTsKICBzdGF0aWMgY29uc3QgaW50IGFjY2VwdGVkID0gMjAyOwogIHN0YXRpYyBjb25zdCBpbnQgbm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uID0gMjAzOwogIHN0YXRpYyBjb25zdCBpbnQgbm9Db250ZW50ID0gMjA0OwogIHN0YXRpYyBjb25zdCBpbnQgcmVzZXRDb250ZW50ID0gMjA1OwogIHN0YXRpYyBjb25zdCBpbnQgcGFydGlhbENvbnRlbnQgPSAyMDY7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgbXVsdGlTdGF0dXMgPSAyMDc7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgYWxyZWFkeVJlcG9ydGVkID0gMjA4OwogIEBTaW5jZSgiMi4xIikKICBzdGF0aWMgY29uc3QgaW50IGltVXNlZCA9IDIyNjsKICBzdGF0aWMgY29uc3QgaW50IG11bHRpcGxlQ2hvaWNlcyA9IDMwMDsKICBzdGF0aWMgY29uc3QgaW50IG1vdmVkUGVybWFuZW50bHkgPSAzMDE7CiAgc3RhdGljIGNvbnN0IGludCBmb3VuZCA9IDMwMjsKICBzdGF0aWMgY29uc3QgaW50IG1vdmVkVGVtcG9yYXJpbHkgPSAzMDI7IC8vIENvbW1vbiBhbGlhcyBmb3IgZm91bmQuCiAgc3RhdGljIGNvbnN0IGludCBzZWVPdGhlciA9IDMwMzsKICBzdGF0aWMgY29uc3QgaW50IG5vdE1vZGlmaWVkID0gMzA0OwogIHN0YXRpYyBjb25zdCBpbnQgdXNlUHJveHkgPSAzMDU7CiAgc3RhdGljIGNvbnN0IGludCB0ZW1wb3JhcnlSZWRpcmVjdCA9IDMwNzsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBwZXJtYW5lbnRSZWRpcmVjdCA9IDMwODsKICBzdGF0aWMgY29uc3QgaW50IGJhZFJlcXVlc3QgPSA0MDA7CiAgc3RhdGljIGNvbnN0IGludCB1bmF1dGhvcml6ZWQgPSA0MDE7CiAgc3RhdGljIGNvbnN0IGludCBwYXltZW50UmVxdWlyZWQgPSA0MDI7CiAgc3RhdGljIGNvbnN0IGludCBmb3JiaWRkZW4gPSA0MDM7CiAgc3RhdGljIGNvbnN0IGludCBub3RGb3VuZCA9IDQwNDsKICBzdGF0aWMgY29uc3QgaW50IG1ldGhvZE5vdEFsbG93ZWQgPSA0MDU7CiAgc3RhdGljIGNvbnN0IGludCBub3RBY2NlcHRhYmxlID0gNDA2OwogIHN0YXRpYyBjb25zdCBpbnQgcHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkID0gNDA3OwogIHN0YXRpYyBjb25zdCBpbnQgcmVxdWVzdFRpbWVvdXQgPSA0MDg7CiAgc3RhdGljIGNvbnN0IGludCBjb25mbGljdCA9IDQwOTsKICBzdGF0aWMgY29uc3QgaW50IGdvbmUgPSA0MTA7CiAgc3RhdGljIGNvbnN0IGludCBsZW5ndGhSZXF1aXJlZCA9IDQxMTsKICBzdGF0aWMgY29uc3QgaW50IHByZWNvbmRpdGlvbkZhaWxlZCA9IDQxMjsKICBzdGF0aWMgY29uc3QgaW50IHJlcXVlc3RFbnRpdHlUb29MYXJnZSA9IDQxMzsKICBzdGF0aWMgY29uc3QgaW50IHJlcXVlc3RVcmlUb29Mb25nID0gNDE0OwogIHN0YXRpYyBjb25zdCBpbnQgdW5zdXBwb3J0ZWRNZWRpYVR5cGUgPSA0MTU7CiAgc3RhdGljIGNvbnN0IGludCByZXF1ZXN0ZWRSYW5nZU5vdFNhdGlzZmlhYmxlID0gNDE2OwogIHN0YXRpYyBjb25zdCBpbnQgZXhwZWN0YXRpb25GYWlsZWQgPSA0MTc7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgbWlzZGlyZWN0ZWRSZXF1ZXN0ID0gNDIxOwogIEBTaW5jZSgiMi4xIikKICBzdGF0aWMgY29uc3QgaW50IHVucHJvY2Vzc2FibGVFbnRpdHkgPSA0MjI7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgbG9ja2VkID0gNDIzOwogIEBTaW5jZSgiMi4xIikKICBzdGF0aWMgY29uc3QgaW50IGZhaWxlZERlcGVuZGVuY3kgPSA0MjQ7CiAgc3RhdGljIGNvbnN0IGludCB1cGdyYWRlUmVxdWlyZWQgPSA0MjY7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgcHJlY29uZGl0aW9uUmVxdWlyZWQgPSA0Mjg7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgdG9vTWFueVJlcXVlc3RzID0gNDI5OwogIEBTaW5jZSgiMi4xIikKICBzdGF0aWMgY29uc3QgaW50IHJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZSA9IDQzMTsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBjb25uZWN0aW9uQ2xvc2VkV2l0aG91dFJlc3BvbnNlID0gNDQ0OwogIEBTaW5jZSgiMi4xIikKICBzdGF0aWMgY29uc3QgaW50IHVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zID0gNDUxOwogIEBTaW5jZSgiMi4xIikKICBzdGF0aWMgY29uc3QgaW50IGNsaWVudENsb3NlZFJlcXVlc3QgPSA0OTk7CiAgc3RhdGljIGNvbnN0IGludCBpbnRlcm5hbFNlcnZlckVycm9yID0gNTAwOwogIHN0YXRpYyBjb25zdCBpbnQgbm90SW1wbGVtZW50ZWQgPSA1MDE7CiAgc3RhdGljIGNvbnN0IGludCBiYWRHYXRld2F5ID0gNTAyOwogIHN0YXRpYyBjb25zdCBpbnQgc2VydmljZVVuYXZhaWxhYmxlID0gNTAzOwogIHN0YXRpYyBjb25zdCBpbnQgZ2F0ZXdheVRpbWVvdXQgPSA1MDQ7CiAgc3RhdGljIGNvbnN0IGludCBodHRwVmVyc2lvbk5vdFN1cHBvcnRlZCA9IDUwNTsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCB2YXJpYW50QWxzb05lZ290aWF0ZXMgPSA1MDY7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgaW5zdWZmaWNpZW50U3RvcmFnZSA9IDUwNzsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBsb29wRGV0ZWN0ZWQgPSA1MDg7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgbm90RXh0ZW5kZWQgPSA1MTA7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgbmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQgPSA1MTE7CiAgLy8gQ2xpZW50IGdlbmVyYXRlZCBzdGF0dXMgY29kZS4KICBzdGF0aWMgY29uc3QgaW50IG5ldHdvcmtDb25uZWN0VGltZW91dEVycm9yID0gNTk5OwoKICBARGVwcmVjYXRlZCgiVXNlIGNvbnRpbnVlXyBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IENPTlRJTlVFID0gY29udGludWVfOwogIEBEZXByZWNhdGVkKCJVc2Ugc3dpdGNoaW5nUHJvdG9jb2xzIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgU1dJVENISU5HX1BST1RPQ09MUyA9IHN3aXRjaGluZ1Byb3RvY29sczsKICBARGVwcmVjYXRlZCgiVXNlIG9rIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgT0sgPSBvazsKICBARGVwcmVjYXRlZCgiVXNlIGNyZWF0ZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBDUkVBVEVEID0gY3JlYXRlZDsKICBARGVwcmVjYXRlZCgiVXNlIGFjY2VwdGVkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgQUNDRVBURUQgPSBhY2NlcHRlZDsKICBARGVwcmVjYXRlZCgiVXNlIG5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbiBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OID0gbm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOwogIEBEZXByZWNhdGVkKCJVc2Ugbm9Db250ZW50IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTk9fQ09OVEVOVCA9IG5vQ29udGVudDsKICBARGVwcmVjYXRlZCgiVXNlIHJlc2V0Q29udGVudCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFJFU0VUX0NPTlRFTlQgPSByZXNldENvbnRlbnQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBwYXJ0aWFsQ29udGVudCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFBBUlRJQUxfQ09OVEVOVCA9IHBhcnRpYWxDb250ZW50OwogIEBEZXByZWNhdGVkKCJVc2UgbXVsdGlwbGVDaG9pY2VzIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTVVMVElQTEVfQ0hPSUNFUyA9IG11bHRpcGxlQ2hvaWNlczsKICBARGVwcmVjYXRlZCgiVXNlIG1vdmVkUGVybWFuZW50bHkgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBNT1ZFRF9QRVJNQU5FTlRMWSA9IG1vdmVkUGVybWFuZW50bHk7CiAgQERlcHJlY2F0ZWQoIlVzZSBmb3VuZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IEZPVU5EID0gZm91bmQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBtb3ZlZFRlbXBvcmFyaWx5IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTU9WRURfVEVNUE9SQVJJTFkgPSBtb3ZlZFRlbXBvcmFyaWx5OwogIEBEZXByZWNhdGVkKCJVc2Ugc2VlT3RoZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBTRUVfT1RIRVIgPSBzZWVPdGhlcjsKICBARGVwcmVjYXRlZCgiVXNlIG5vdE1vZGlmaWVkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTk9UX01PRElGSUVEID0gbm90TW9kaWZpZWQ7CiAgQERlcHJlY2F0ZWQoIlVzZSB1c2VQcm94eSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFVTRV9QUk9YWSA9IHVzZVByb3h5OwogIEBEZXByZWNhdGVkKCJVc2UgdGVtcG9yYXJ5UmVkaXJlY3QgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBURU1QT1JBUllfUkVESVJFQ1QgPSB0ZW1wb3JhcnlSZWRpcmVjdDsKICBARGVwcmVjYXRlZCgiVXNlIGJhZFJlcXVlc3QgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBCQURfUkVRVUVTVCA9IGJhZFJlcXVlc3Q7CiAgQERlcHJlY2F0ZWQoIlVzZSB1bmF1dGhvcml6ZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBVTkFVVEhPUklaRUQgPSB1bmF1dGhvcml6ZWQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBwYXltZW50UmVxdWlyZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBQQVlNRU5UX1JFUVVJUkVEID0gcGF5bWVudFJlcXVpcmVkOwogIEBEZXByZWNhdGVkKCJVc2UgZm9yYmlkZGVuIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgRk9SQklEREVOID0gZm9yYmlkZGVuOwogIEBEZXByZWNhdGVkKCJVc2Ugbm90Rm91bmQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBOT1RfRk9VTkQgPSBub3RGb3VuZDsKICBARGVwcmVjYXRlZCgiVXNlIG1ldGhvZE5vdEFsbG93ZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBNRVRIT0RfTk9UX0FMTE9XRUQgPSBtZXRob2ROb3RBbGxvd2VkOwogIEBEZXByZWNhdGVkKCJVc2Ugbm90QWNjZXB0YWJsZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE5PVF9BQ0NFUFRBQkxFID0gbm90QWNjZXB0YWJsZTsKICBARGVwcmVjYXRlZCgiVXNlIHByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEID0gcHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOwogIEBEZXByZWNhdGVkKCJVc2UgcmVxdWVzdFRpbWVvdXQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBSRVFVRVNUX1RJTUVPVVQgPSByZXF1ZXN0VGltZW91dDsKICBARGVwcmVjYXRlZCgiVXNlIGNvbmZsaWN0IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgQ09ORkxJQ1QgPSBjb25mbGljdDsKICBARGVwcmVjYXRlZCgiVXNlIGdvbmUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBHT05FID0gZ29uZTsKICBARGVwcmVjYXRlZCgiVXNlIGxlbmd0aFJlcXVpcmVkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTEVOR1RIX1JFUVVJUkVEID0gbGVuZ3RoUmVxdWlyZWQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBwcmVjb25kaXRpb25GYWlsZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBQUkVDT05ESVRJT05fRkFJTEVEID0gcHJlY29uZGl0aW9uRmFpbGVkOwogIEBEZXByZWNhdGVkKCJVc2UgcmVxdWVzdEVudGl0eVRvb0xhcmdlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgUkVRVUVTVF9FTlRJVFlfVE9PX0xBUkdFID0gcmVxdWVzdEVudGl0eVRvb0xhcmdlOwogIEBEZXByZWNhdGVkKCJVc2UgcmVxdWVzdFVyaVRvb0xvbmcgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBSRVFVRVNUX1VSSV9UT09fTE9ORyA9IHJlcXVlc3RVcmlUb29Mb25nOwogIEBEZXByZWNhdGVkKCJVc2UgdW5zdXBwb3J0ZWRNZWRpYVR5cGUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBVTlNVUFBPUlRFRF9NRURJQV9UWVBFID0gdW5zdXBwb3J0ZWRNZWRpYVR5cGU7CiAgQERlcHJlY2F0ZWQoIlVzZSByZXF1ZXN0ZWRSYW5nZU5vdFNhdGlzZmlhYmxlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgUkVRVUVTVEVEX1JBTkdFX05PVF9TQVRJU0ZJQUJMRSA9CiAgICAgIHJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGU7CiAgQERlcHJlY2F0ZWQoIlVzZSBleHBlY3RhdGlvbkZhaWxlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IEVYUEVDVEFUSU9OX0ZBSUxFRCA9IGV4cGVjdGF0aW9uRmFpbGVkOwogIEBEZXByZWNhdGVkKCJVc2UgdXBncmFkZVJlcXVpcmVkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgVVBHUkFERV9SRVFVSVJFRCA9IHVwZ3JhZGVSZXF1aXJlZDsKICBARGVwcmVjYXRlZCgiVXNlIGludGVybmFsU2VydmVyRXJyb3IgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBJTlRFUk5BTF9TRVJWRVJfRVJST1IgPSBpbnRlcm5hbFNlcnZlckVycm9yOwogIEBEZXByZWNhdGVkKCJVc2Ugbm90SW1wbGVtZW50ZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBOT1RfSU1QTEVNRU5URUQgPSBub3RJbXBsZW1lbnRlZDsKICBARGVwcmVjYXRlZCgiVXNlIGJhZEdhdGV3YXkgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBCQURfR0FURVdBWSA9IGJhZEdhdGV3YXk7CiAgQERlcHJlY2F0ZWQoIlVzZSBzZXJ2aWNlVW5hdmFpbGFibGUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBTRVJWSUNFX1VOQVZBSUxBQkxFID0gc2VydmljZVVuYXZhaWxhYmxlOwogIEBEZXByZWNhdGVkKCJVc2UgZ2F0ZXdheVRpbWVvdXQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBHQVRFV0FZX1RJTUVPVVQgPSBnYXRld2F5VGltZW91dDsKICBARGVwcmVjYXRlZCgiVXNlIGh0dHBWZXJzaW9uTm90U3VwcG9ydGVkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgSFRUUF9WRVJTSU9OX05PVF9TVVBQT1JURUQgPSBodHRwVmVyc2lvbk5vdFN1cHBvcnRlZDsKICBARGVwcmVjYXRlZCgiVXNlIG5ldHdvcmtDb25uZWN0VGltZW91dEVycm9yIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTkVUV09SS19DT05ORUNUX1RJTUVPVVRfRVJST1IgPSBuZXR3b3JrQ29ubmVjdFRpbWVvdXRFcnJvcjsKfQqBgwBOTjwBDwEYARoBFAkQEBwbHw4mIBwgARgSFBYSExIUGQE6SxseDAgJCgsRDQ4PEBcSExQVHBcYGRohHB0DAQRIBDQ0GAEbASQzATQCAU8VBE8sBEoeFRUhAgEhASwESB4nGxYWHSAePA0CAScEOi0mODwwAgFPS0wlBA0EDBcERycENiUwCARNRgQMEhIELAQNFzkqBDktBggEFwQkPShPKwQQPwwEJTJHAUIEQj4bBEUSBEA2SxM4RUQ1BERMP0w5SUlFPwRMSkohDg4YHQIBBDoEHCQtECUdIiM2JCcpECYQKhAhKisgRiMmIywQLCUnKiQjKyg2KSMfKS0wLC83LBAtEC4QIRArKhAvECoQNhA6EDUQLi4pJS0pMhAwEC4QJxAmEDgjNQEnKTA9IBwlJiYoOVAnKyoxLDUtNy45IyIuOSYpKS8mKS87KC0qMC03JyomKS46KzM5UCw1JigiICw1MD0zRS89MkI6NSQvOy03MUAsNSgtMD0sNTVJOE8CAQ5kYXJ0Ol9pbnRlcm5hbENvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9pbnRlcm5hbC9pdGVyYWJsZS5kYXJ0wABegy8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0Ll9pbnRlcm5hbDsKCi8qKgogKiBNYXJrZXIgaW50ZXJmYWNlIGZvciBbSXRlcmFibGVdIHN1YmNsYXNzZXMgdGhhdCBoYXZlIGFuIGVmZmljaWVudAogKiBbbGVuZ3RoXSBpbXBsZW1lbnRhdGlvbi4KICovCmFic3RyYWN0IGNsYXNzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPFQ+IGV4dGVuZHMgSXRlcmFibGU8VD4gewogIGNvbnN0IEVmZmljaWVudExlbmd0aEl0ZXJhYmxlKCk7CiAgLyoqCiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBpdGVyYWJsZS4KICAgKgogICAqIFRoaXMgaXMgYW4gZWZmaWNpZW50IG9wZXJhdGlvbiB0aGF0IGRvZXNuJ3QgcmVxdWlyZSBpdGVyYXRpbmcgdGhyb3VnaAogICAqIHRoZSBlbGVtZW50cy4KICAgKi8KICBpbnQgZ2V0IGxlbmd0aDsKfQoKLyoqCiAqIEFuIFtJdGVyYWJsZV0gZm9yIGNsYXNzZXMgdGhhdCBoYXZlIGVmZmljaWVudCBbbGVuZ3RoXSBhbmQgW2VsZW1lbnRBdF0uCiAqCiAqIEFsbCBvdGhlciBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBbbGVuZ3RoXSBhbmQgW2VsZW1lbnRBdF0sCiAqIGluY2x1ZGluZyBbaXRlcmF0b3JdLgogKi8KYWJzdHJhY3QgY2xhc3MgTGlzdEl0ZXJhYmxlPEU+IGV4dGVuZHMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4gewogIGludCBnZXQgbGVuZ3RoOwogIEUgZWxlbWVudEF0KGludCBpKTsKCiAgY29uc3QgTGlzdEl0ZXJhYmxlKCk7CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PiBuZXcgTGlzdEl0ZXJhdG9yPEU+KHRoaXMpOwoKICB2b2lkIGZvckVhY2godm9pZCBhY3Rpb24oRSBlbGVtZW50KSkgewogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBhY3Rpb24oZWxlbWVudEF0KGkpKTsKICAgICAgaWYgKGxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICB9CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gbGVuZ3RoID09IDA7CgogIEUgZ2V0IGZpcnN0IHsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICByZXR1cm4gZWxlbWVudEF0KDApOwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICBpZiAobGVuZ3RoID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgcmV0dXJuIGVsZW1lbnRBdChsZW5ndGggLSAxKTsKICB9CgogIEUgZ2V0IHNpbmdsZSB7CiAgICBpZiAobGVuZ3RoID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgaWYgKGxlbmd0aCA+IDEpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgIHJldHVybiBlbGVtZW50QXQoMCk7CiAgfQoKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChlbGVtZW50QXQoaSkgPT0gZWxlbWVudCkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBib29sIGV2ZXJ5KGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICghdGVzdChlbGVtZW50QXQoaSkpKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGJvb2wgYW55KGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnRBdChpKSkpIHJldHVybiB0cnVlOwogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgRSBmaXJzdFdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCB7RSBvckVsc2UoKX0pIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgRSBlbGVtZW50ID0gZWxlbWVudEF0KGkpOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBsYXN0V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgewogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IGxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIEUgZWxlbWVudCA9IGVsZW1lbnRBdChpKTsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHJldHVybiBlbGVtZW50OwogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgfQogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgc2luZ2xlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgewogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgRSBtYXRjaCA9IG51bGw7CiAgICBib29sIG1hdGNoRm91bmQgPSBmYWxzZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgRSBlbGVtZW50ID0gZWxlbWVudEF0KGkpOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIGlmIChtYXRjaEZvdW5kKSB7CiAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICAgICAgfQogICAgICAgIG1hdGNoRm91bmQgPSB0cnVlOwogICAgICAgIG1hdGNoID0gZWxlbWVudDsKICAgICAgfQogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgfQogICAgaWYgKG1hdGNoRm91bmQpIHJldHVybiBtYXRjaDsKICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBTdHJpbmcgam9pbihbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgewogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgaWYgKCFzZXBhcmF0b3IuaXNFbXB0eSkgewogICAgICBpZiAobGVuZ3RoID09IDApIHJldHVybiAiIjsKICAgICAgU3RyaW5nIGZpcnN0ID0gIiR7ZWxlbWVudEF0KDApfSI7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKGZpcnN0KTsKICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIGJ1ZmZlci53cml0ZShzZXBhcmF0b3IpOwogICAgICAgIGJ1ZmZlci53cml0ZShlbGVtZW50QXQoaSkpOwogICAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICAgIH0gZWxzZSB7CiAgICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBidWZmZXIud3JpdGUoZWxlbWVudEF0KGkpKTsKICAgICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgICB9CiAgfQoKICBJdGVyYWJsZTxFPiB3aGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gc3VwZXIud2hlcmUodGVzdCk7CgogIEl0ZXJhYmxlPFQ+IG1hcDxUPihUIGYoRSBlbGVtZW50KSkgPT4gbmV3IE1hcHBlZExpc3RJdGVyYWJsZTxFLCBUPih0aGlzLCBmKTsKCiAgRSByZWR1Y2UoRSBjb21iaW5lKEUgdmFsdWUsIEUgZWxlbWVudCkpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICBFIHZhbHVlID0gZWxlbWVudEF0KDApOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB2YWx1ZSA9IGNvbWJpbmUodmFsdWUsIGVsZW1lbnRBdChpKSk7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBUIGZvbGQ8VD4oVCBpbml0aWFsVmFsdWUsIFQgY29tYmluZShUIHByZXZpb3VzVmFsdWUsIEUgZWxlbWVudCkpIHsKICAgIHZhciB2YWx1ZSA9IGluaXRpYWxWYWx1ZTsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgdmFsdWUgPSBjb21iaW5lKHZhbHVlLCBlbGVtZW50QXQoaSkpOwogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgSXRlcmFibGU8RT4gc2tpcChpbnQgY291bnQpID0+IG5ldyBTdWJMaXN0SXRlcmFibGU8RT4odGhpcywgY291bnQsIG51bGwpOwoKICBJdGVyYWJsZTxFPiBza2lwV2hpbGUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IHN1cGVyLnNraXBXaGlsZSh0ZXN0KTsKCiAgSXRlcmFibGU8RT4gdGFrZShpbnQgY291bnQpID0+IG5ldyBTdWJMaXN0SXRlcmFibGU8RT4odGhpcywgMCwgY291bnQpOwoKICBJdGVyYWJsZTxFPiB0YWtlV2hpbGUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IHN1cGVyLnRha2VXaGlsZSh0ZXN0KTsKCiAgTGlzdDxFPiB0b0xpc3Qoe2Jvb2wgZ3Jvd2FibGU6IHRydWV9KSB7CiAgICBMaXN0PEU+IHJlc3VsdDsKICAgIGlmIChncm93YWJsZSkgewogICAgICByZXN1bHQgPSA8RT5bXS4ubGVuZ3RoID0gbGVuZ3RoOwogICAgfSBlbHNlIHsKICAgICAgcmVzdWx0ID0gbmV3IExpc3Q8RT4obGVuZ3RoKTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0W2ldID0gZWxlbWVudEF0KGkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFNldDxFPiB0b1NldCgpIHsKICAgIFNldDxFPiByZXN1bHQgPSBuZXcgU2V0PEU+KCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdC5hZGQoZWxlbWVudEF0KGkpKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CgpjbGFzcyBTdWJMaXN0SXRlcmFibGU8RT4gZXh0ZW5kcyBMaXN0SXRlcmFibGU8RT4gewogIGZpbmFsIEl0ZXJhYmxlPEU+IF9pdGVyYWJsZTsgLy8gSGFzIGVmZmljaWVudCBsZW5ndGggYW5kIGVsZW1lbnRBdC4KICBmaW5hbCBpbnQgX3N0YXJ0OwogIC8qKiBJZiBudWxsLCByZXByZXNlbnRzIHRoZSBsZW5ndGggb2YgdGhlIGl0ZXJhYmxlLiAqLwogIGZpbmFsIGludCBfZW5kT3JMZW5ndGg7CgogIFN1Ykxpc3RJdGVyYWJsZSh0aGlzLl9pdGVyYWJsZSwgdGhpcy5fc3RhcnQsIHRoaXMuX2VuZE9yTGVuZ3RoKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrTm90TmVnYXRpdmUoX3N0YXJ0LCAic3RhcnQiKTsKICAgIGlmIChfZW5kT3JMZW5ndGggIT0gbnVsbCkgewogICAgICBSYW5nZUVycm9yLmNoZWNrTm90TmVnYXRpdmUoX2VuZE9yTGVuZ3RoLCAiZW5kIik7CiAgICAgIGlmIChfc3RhcnQgPiBfZW5kT3JMZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShfc3RhcnQsIDAsIF9lbmRPckxlbmd0aCwgInN0YXJ0Iik7CiAgICAgIH0KICAgIH0KICB9CgogIGludCBnZXQgX2VuZEluZGV4IHsKICAgIGludCBsZW5ndGggPSBfaXRlcmFibGUubGVuZ3RoOwogICAgaWYgKF9lbmRPckxlbmd0aCA9PSBudWxsIHx8IF9lbmRPckxlbmd0aCA+IGxlbmd0aCkgcmV0dXJuIGxlbmd0aDsKICAgIHJldHVybiBfZW5kT3JMZW5ndGg7CiAgfQoKICBpbnQgZ2V0IF9zdGFydEluZGV4IHsKICAgIGludCBsZW5ndGggPSBfaXRlcmFibGUubGVuZ3RoOwogICAgaWYgKF9zdGFydCA+IGxlbmd0aCkgcmV0dXJuIGxlbmd0aDsKICAgIHJldHVybiBfc3RhcnQ7CiAgfQoKICBpbnQgZ2V0IGxlbmd0aCB7CiAgICBpbnQgbGVuZ3RoID0gX2l0ZXJhYmxlLmxlbmd0aDsKICAgIGlmIChfc3RhcnQgPj0gbGVuZ3RoKSByZXR1cm4gMDsKICAgIGlmIChfZW5kT3JMZW5ndGggPT0gbnVsbCB8fCBfZW5kT3JMZW5ndGggPj0gbGVuZ3RoKSB7CiAgICAgIHJldHVybiBsZW5ndGggLSBfc3RhcnQ7CiAgICB9CiAgICByZXR1cm4gX2VuZE9yTGVuZ3RoIC0gX3N0YXJ0OwogIH0KCiAgRSBlbGVtZW50QXQoaW50IGluZGV4KSB7CiAgICBpbnQgcmVhbEluZGV4ID0gX3N0YXJ0SW5kZXggKyBpbmRleDsKICAgIGlmIChpbmRleCA8IDAgfHwgcmVhbEluZGV4ID49IF9lbmRJbmRleCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2l0ZXJhYmxlLmVsZW1lbnRBdChyZWFsSW5kZXgpOwogIH0KCiAgSXRlcmFibGU8RT4gc2tpcChpbnQgY291bnQpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tOb3ROZWdhdGl2ZShjb3VudCwgImNvdW50Iik7CiAgICBpbnQgbmV3U3RhcnQgPSBfc3RhcnQgKyBjb3VudDsKICAgIGlmIChfZW5kT3JMZW5ndGggIT0gbnVsbCAmJiBuZXdTdGFydCA+PSBfZW5kT3JMZW5ndGgpIHsKICAgICAgcmV0dXJuIG5ldyBFbXB0eUl0ZXJhYmxlPEU+KCk7CiAgICB9CiAgICByZXR1cm4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxFPihfaXRlcmFibGUsIG5ld1N0YXJ0LCBfZW5kT3JMZW5ndGgpOwogIH0KCiAgSXRlcmFibGU8RT4gdGFrZShpbnQgY291bnQpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tOb3ROZWdhdGl2ZShjb3VudCwgImNvdW50Iik7CiAgICBpZiAoX2VuZE9yTGVuZ3RoID09IG51bGwpIHsKICAgICAgcmV0dXJuIG5ldyBTdWJMaXN0SXRlcmFibGU8RT4oX2l0ZXJhYmxlLCBfc3RhcnQsIF9zdGFydCArIGNvdW50KTsKICAgIH0gZWxzZSB7CiAgICAgIGludCBuZXdFbmQgPSBfc3RhcnQgKyBjb3VudDsKICAgICAgaWYgKF9lbmRPckxlbmd0aCA8IG5ld0VuZCkgcmV0dXJuIHRoaXM7CiAgICAgIHJldHVybiBuZXcgU3ViTGlzdEl0ZXJhYmxlPEU+KF9pdGVyYWJsZSwgX3N0YXJ0LCBuZXdFbmQpOwogICAgfQogIH0KCiAgTGlzdDxFPiB0b0xpc3Qoe2Jvb2wgZ3Jvd2FibGU6IHRydWV9KSB7CiAgICBpbnQgc3RhcnQgPSBfc3RhcnQ7CiAgICBpbnQgZW5kID0gX2l0ZXJhYmxlLmxlbmd0aDsKICAgIGlmIChfZW5kT3JMZW5ndGggIT0gbnVsbCAmJiBfZW5kT3JMZW5ndGggPCBlbmQpIGVuZCA9IF9lbmRPckxlbmd0aDsKICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIGlmIChsZW5ndGggPCAwKSBsZW5ndGggPSAwOwogICAgTGlzdDxFPiByZXN1bHQgPQogICAgICAgIGdyb3dhYmxlID8gKG5ldyBMaXN0PEU+KCkuLmxlbmd0aCA9IGxlbmd0aCkgOiBuZXcgTGlzdDxFPihsZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICByZXN1bHRbaV0gPSBfaXRlcmFibGUuZWxlbWVudEF0KHN0YXJ0ICsgaSk7CiAgICAgIGlmIChfaXRlcmFibGUubGVuZ3RoIDwgZW5kKSB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCi8qKgogKiBBbiBbSXRlcmF0b3JdIHRoYXQgaXRlcmF0ZXMgYSBsaXN0LWxpa2UgW0l0ZXJhYmxlXS4KICoKICogQWxsIGl0ZXJhdGlvbnMgaXMgZG9uZSBpbiB0ZXJtcyBvZiBbSXRlcmFibGUubGVuZ3RoXSBhbmQKICogW0l0ZXJhYmxlLmVsZW1lbnRBdF0uIFRoZXNlIG9wZXJhdGlvbnMgYXJlIGZhc3QgZm9yIGxpc3QtbGlrZQogKiBpdGVyYWJsZXMuCiAqLwpjbGFzcyBMaXN0SXRlcmF0b3I8RT4gaW1wbGVtZW50cyBJdGVyYXRvcjxFPiB7CiAgZmluYWwgSXRlcmFibGU8RT4gX2l0ZXJhYmxlOwogIGZpbmFsIGludCBfbGVuZ3RoOwogIGludCBfaW5kZXg7CiAgRSBfY3VycmVudDsKCiAgTGlzdEl0ZXJhdG9yKEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKQogICAgICA6IF9pdGVyYWJsZSA9IGl0ZXJhYmxlLAogICAgICAgIF9sZW5ndGggPSBpdGVyYWJsZS5sZW5ndGgsCiAgICAgICAgX2luZGV4ID0gMDsKCiAgRSBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGludCBsZW5ndGggPSBfaXRlcmFibGUubGVuZ3RoOwogICAgaWYgKF9sZW5ndGggIT0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IoX2l0ZXJhYmxlKTsKICAgIH0KICAgIGlmIChfaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIF9jdXJyZW50ID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgX2N1cnJlbnQgPSBfaXRlcmFibGUuZWxlbWVudEF0KF9pbmRleCk7CiAgICBfaW5kZXgrKzsKICAgIHJldHVybiB0cnVlOwogIH0KfQoKdHlwZWRlZiBUIF9UcmFuc2Zvcm1hdGlvbjxTLCBUPihTIHZhbHVlKTsKCmNsYXNzIE1hcHBlZEl0ZXJhYmxlPFMsIFQ+IGV4dGVuZHMgSXRlcmFibGU8VD4gewogIGZpbmFsIEl0ZXJhYmxlPFM+IF9pdGVyYWJsZTsKICBmaW5hbCBfVHJhbnNmb3JtYXRpb248UywgVD4gX2Y7CgogIGZhY3RvcnkgTWFwcGVkSXRlcmFibGUoSXRlcmFibGU8Uz4gaXRlcmFibGUsIFQgZnVuY3Rpb24oUyB2YWx1ZSkpIHsKICAgIGlmIChpdGVyYWJsZSBpcyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZSkgewogICAgICByZXR1cm4gbmV3IEVmZmljaWVudExlbmd0aE1hcHBlZEl0ZXJhYmxlPFMsIFQ+KGl0ZXJhYmxlLCBmdW5jdGlvbik7CiAgICB9CiAgICByZXR1cm4gbmV3IE1hcHBlZEl0ZXJhYmxlPFMsIFQ+Ll8oaXRlcmFibGUsIGZ1bmN0aW9uKTsKICB9CgogIE1hcHBlZEl0ZXJhYmxlLl8odGhpcy5faXRlcmFibGUsIHRoaXMuX2YpOwoKICBJdGVyYXRvcjxUPiBnZXQgaXRlcmF0b3IgPT4gbmV3IE1hcHBlZEl0ZXJhdG9yPFMsIFQ+KF9pdGVyYWJsZS5pdGVyYXRvciwgX2YpOwoKICAvLyBMZW5ndGggcmVsYXRlZCBmdW5jdGlvbnMgYXJlIGluZGVwZW5kZW50IG9mIHRoZSBtYXBwaW5nLgogIGludCBnZXQgbGVuZ3RoID0+IF9pdGVyYWJsZS5sZW5ndGg7CiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfaXRlcmFibGUuaXNFbXB0eTsKCiAgLy8gSW5kZXggYmFzZWQgbG9va3VwIGNhbiBiZSBkb25lIGJlZm9yZSB0cmFuc2Zvcm1pbmcuCiAgVCBnZXQgZmlyc3QgPT4gX2YoX2l0ZXJhYmxlLmZpcnN0KTsKICBUIGdldCBsYXN0ID0+IF9mKF9pdGVyYWJsZS5sYXN0KTsKICBUIGdldCBzaW5nbGUgPT4gX2YoX2l0ZXJhYmxlLnNpbmdsZSk7CiAgVCBlbGVtZW50QXQoaW50IGluZGV4KSA9PiBfZihfaXRlcmFibGUuZWxlbWVudEF0KGluZGV4KSk7Cn0KCmNsYXNzIEVmZmljaWVudExlbmd0aE1hcHBlZEl0ZXJhYmxlPFMsIFQ+IGV4dGVuZHMgTWFwcGVkSXRlcmFibGU8UywgVD4KICAgIGltcGxlbWVudHMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8VD4gewogIEVmZmljaWVudExlbmd0aE1hcHBlZEl0ZXJhYmxlKEl0ZXJhYmxlPFM+IGl0ZXJhYmxlLCBUIGZ1bmN0aW9uKFMgdmFsdWUpKQogICAgICA6IHN1cGVyLl8oaXRlcmFibGUsIGZ1bmN0aW9uKTsKfQoKY2xhc3MgTWFwcGVkSXRlcmF0b3I8UywgVD4gZXh0ZW5kcyBJdGVyYXRvcjxUPiB7CiAgVCBfY3VycmVudDsKICBmaW5hbCBJdGVyYXRvcjxTPiBfaXRlcmF0b3I7CiAgZmluYWwgX1RyYW5zZm9ybWF0aW9uPFMsIFQ+IF9mOwoKICBNYXBwZWRJdGVyYXRvcih0aGlzLl9pdGVyYXRvciwgdGhpcy5fZik7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoX2l0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgX2N1cnJlbnQgPSBfZihfaXRlcmF0b3IuY3VycmVudCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgX2N1cnJlbnQgPSBudWxsOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgVCBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKfQoKLyoqCiAqIFNwZWNpYWxpemVkIGFsdGVybmF0aXZlIHRvIFtNYXBwZWRJdGVyYWJsZV0gZm9yIG1hcHBlZCBbTGlzdF1zLgogKgogKiBFeHBlY3RzIGVmZmljaWVudCBgbGVuZ3RoYCBhbmQgYGVsZW1lbnRBdGAgb24gdGhlIHNvdXJjZSBpdGVyYWJsZS4KICovCmNsYXNzIE1hcHBlZExpc3RJdGVyYWJsZTxTLCBUPiBleHRlbmRzIExpc3RJdGVyYWJsZTxUPiB7CiAgZmluYWwgSXRlcmFibGU8Uz4gX3NvdXJjZTsKICBmaW5hbCBfVHJhbnNmb3JtYXRpb248UywgVD4gX2Y7CgogIE1hcHBlZExpc3RJdGVyYWJsZSh0aGlzLl9zb3VyY2UsIHRoaXMuX2YpOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfc291cmNlLmxlbmd0aDsKICBUIGVsZW1lbnRBdChpbnQgaW5kZXgpID0+IF9mKF9zb3VyY2UuZWxlbWVudEF0KGluZGV4KSk7Cn0KCnR5cGVkZWYgYm9vbCBfRWxlbWVudFByZWRpY2F0ZTxFPihFIGVsZW1lbnQpOwoKY2xhc3MgV2hlcmVJdGVyYWJsZTxFPiBleHRlbmRzIEl0ZXJhYmxlPEU+IHsKICBmaW5hbCBJdGVyYWJsZTxFPiBfaXRlcmFibGU7CiAgZmluYWwgX0VsZW1lbnRQcmVkaWNhdGU8RT4gX2Y7CgogIFdoZXJlSXRlcmFibGUodGhpcy5faXRlcmFibGUsIHRoaXMuX2YpOwoKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgPT4gbmV3IFdoZXJlSXRlcmF0b3I8RT4oX2l0ZXJhYmxlLml0ZXJhdG9yLCBfZik7CgogIC8vIFNwZWNpYWxpemF0aW9uIG9mIFtJdGVyYWJsZS5tYXBdIHRvIG5vbi1FZmZpY2llbnRMZW5ndGhJdGVyYWJsZS4KICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKEUgZWxlbWVudCkpID0+IG5ldyBNYXBwZWRJdGVyYWJsZTxFLCBUPi5fKHRoaXMsIGYpOwp9CgpjbGFzcyBXaGVyZUl0ZXJhdG9yPEU+IGV4dGVuZHMgSXRlcmF0b3I8RT4gewogIGZpbmFsIEl0ZXJhdG9yPEU+IF9pdGVyYXRvcjsKICBmaW5hbCBfRWxlbWVudFByZWRpY2F0ZTxFPiBfZjsKCiAgV2hlcmVJdGVyYXRvcih0aGlzLl9pdGVyYXRvciwgdGhpcy5fZik7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICB3aGlsZSAoX2l0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgaWYgKF9mKF9pdGVyYXRvci5jdXJyZW50KSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBFIGdldCBjdXJyZW50ID0+IF9pdGVyYXRvci5jdXJyZW50Owp9Cgp0eXBlZGVmIEl0ZXJhYmxlPFQ+IF9FeHBhbmRGdW5jdGlvbjxTLCBUPihTIHNvdXJjZUVsZW1lbnQpOwoKY2xhc3MgRXhwYW5kSXRlcmFibGU8UywgVD4gZXh0ZW5kcyBJdGVyYWJsZTxUPiB7CiAgZmluYWwgSXRlcmFibGU8Uz4gX2l0ZXJhYmxlOwogIGZpbmFsIF9FeHBhbmRGdW5jdGlvbjxTLCBUPiBfZjsKCiAgRXhwYW5kSXRlcmFibGUodGhpcy5faXRlcmFibGUsIHRoaXMuX2YpOwoKICBJdGVyYXRvcjxUPiBnZXQgaXRlcmF0b3IgPT4gbmV3IEV4cGFuZEl0ZXJhdG9yPFMsIFQ+KF9pdGVyYWJsZS5pdGVyYXRvciwgX2YpOwp9CgpjbGFzcyBFeHBhbmRJdGVyYXRvcjxTLCBUPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPFQ+IHsKICBmaW5hbCBJdGVyYXRvcjxTPiBfaXRlcmF0b3I7CiAgZmluYWwgX0V4cGFuZEZ1bmN0aW9uPFMsIFQ+IF9mOwogIC8vIEluaXRpYWxpemUgX2N1cnJlbnRFeHBhbnNpb24gdG8gYW4gZW1wdHkgaXRlcmFibGUuIEEgbnVsbCB2YWx1ZQogIC8vIG1hcmtzIHRoZSBlbmQgb2YgaXRlcmF0aW9uLCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBjYWxsIF9mIGJlZm9yZQogIC8vIHRoZSBmaXJzdCBtb3ZlTmV4dCBjYWxsLgogIEl0ZXJhdG9yPFQ+IF9jdXJyZW50RXhwYW5zaW9uID0gY29uc3QgRW1wdHlJdGVyYXRvcigpOwogIFQgX2N1cnJlbnQ7CgogIEV4cGFuZEl0ZXJhdG9yKHRoaXMuX2l0ZXJhdG9yLCB0aGlzLl9mKTsKCiAgVCBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChfY3VycmVudEV4cGFuc2lvbiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICB3aGlsZSAoIV9jdXJyZW50RXhwYW5zaW9uLm1vdmVOZXh0KCkpIHsKICAgICAgX2N1cnJlbnQgPSBudWxsOwogICAgICBpZiAoX2l0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgICAvLyBJZiBfZiB0aHJvd3MsIHRoaXMgZW5kcyBpdGVyYXRpb24uIE90aGVyd2lzZSBfY3VycmVudEV4cGFuc2lvbiBhbmQKICAgICAgICAvLyBfY3VycmVudCB3aWxsIGJlIHNldCBhZ2FpbiBiZWxvdy4KICAgICAgICBfY3VycmVudEV4cGFuc2lvbiA9IG51bGw7CiAgICAgICAgX2N1cnJlbnRFeHBhbnNpb24gPSBfZihfaXRlcmF0b3IuY3VycmVudCkuaXRlcmF0b3I7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICBfY3VycmVudCA9IF9jdXJyZW50RXhwYW5zaW9uLmN1cnJlbnQ7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCmNsYXNzIFRha2VJdGVyYWJsZTxFPiBleHRlbmRzIEl0ZXJhYmxlPEU+IHsKICBmaW5hbCBJdGVyYWJsZTxFPiBfaXRlcmFibGU7CiAgZmluYWwgaW50IF90YWtlQ291bnQ7CgogIGZhY3RvcnkgVGFrZUl0ZXJhYmxlKEl0ZXJhYmxlPEU+IGl0ZXJhYmxlLCBpbnQgdGFrZUNvdW50KSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbCh0YWtlQ291bnQsICJ0YWtlQ291bnQiKTsKICAgIFJhbmdlRXJyb3IuY2hlY2tOb3ROZWdhdGl2ZSh0YWtlQ291bnQsICJ0YWtlQ291bnQiKTsKICAgIGlmIChpdGVyYWJsZSBpcyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZSkgewogICAgICByZXR1cm4gbmV3IEVmZmljaWVudExlbmd0aFRha2VJdGVyYWJsZTxFPihpdGVyYWJsZSwgdGFrZUNvdW50KTsKICAgIH0KICAgIHJldHVybiBuZXcgVGFrZUl0ZXJhYmxlPEU+Ll8oaXRlcmFibGUsIHRha2VDb3VudCk7CiAgfQoKICBUYWtlSXRlcmFibGUuXyh0aGlzLl9pdGVyYWJsZSwgdGhpcy5fdGFrZUNvdW50KTsKCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yIHsKICAgIHJldHVybiBuZXcgVGFrZUl0ZXJhdG9yPEU+KF9pdGVyYWJsZS5pdGVyYXRvciwgX3Rha2VDb3VudCk7CiAgfQp9CgpjbGFzcyBFZmZpY2llbnRMZW5ndGhUYWtlSXRlcmFibGU8RT4gZXh0ZW5kcyBUYWtlSXRlcmFibGU8RT4KICAgIGltcGxlbWVudHMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4gewogIEVmZmljaWVudExlbmd0aFRha2VJdGVyYWJsZShJdGVyYWJsZTxFPiBpdGVyYWJsZSwgaW50IHRha2VDb3VudCkKICAgICAgOiBzdXBlci5fKGl0ZXJhYmxlLCB0YWtlQ291bnQpOwoKICBpbnQgZ2V0IGxlbmd0aCB7CiAgICBpbnQgaXRlcmFibGVMZW5ndGggPSBfaXRlcmFibGUubGVuZ3RoOwogICAgaWYgKGl0ZXJhYmxlTGVuZ3RoID4gX3Rha2VDb3VudCkgcmV0dXJuIF90YWtlQ291bnQ7CiAgICByZXR1cm4gaXRlcmFibGVMZW5ndGg7CiAgfQp9CgpjbGFzcyBUYWtlSXRlcmF0b3I8RT4gZXh0ZW5kcyBJdGVyYXRvcjxFPiB7CiAgZmluYWwgSXRlcmF0b3I8RT4gX2l0ZXJhdG9yOwogIGludCBfcmVtYWluaW5nOwoKICBUYWtlSXRlcmF0b3IodGhpcy5faXRlcmF0b3IsIHRoaXMuX3JlbWFpbmluZykgewogICAgYXNzZXJ0KF9yZW1haW5pbmcgPj0gMCk7CiAgfQoKICBib29sIG1vdmVOZXh0KCkgewogICAgX3JlbWFpbmluZy0tOwogICAgaWYgKF9yZW1haW5pbmcgPj0gMCkgewogICAgICByZXR1cm4gX2l0ZXJhdG9yLm1vdmVOZXh0KCk7CiAgICB9CiAgICBfcmVtYWluaW5nID0gLTE7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBFIGdldCBjdXJyZW50IHsKICAgIGlmIChfcmVtYWluaW5nIDwgMCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX2l0ZXJhdG9yLmN1cnJlbnQ7CiAgfQp9CgpjbGFzcyBUYWtlV2hpbGVJdGVyYWJsZTxFPiBleHRlbmRzIEl0ZXJhYmxlPEU+IHsKICBmaW5hbCBJdGVyYWJsZTxFPiBfaXRlcmFibGU7CiAgZmluYWwgX0VsZW1lbnRQcmVkaWNhdGU8RT4gX2Y7CgogIFRha2VXaGlsZUl0ZXJhYmxlKHRoaXMuX2l0ZXJhYmxlLCB0aGlzLl9mKTsKCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yIHsKICAgIHJldHVybiBuZXcgVGFrZVdoaWxlSXRlcmF0b3I8RT4oX2l0ZXJhYmxlLml0ZXJhdG9yLCBfZik7CiAgfQp9CgpjbGFzcyBUYWtlV2hpbGVJdGVyYXRvcjxFPiBleHRlbmRzIEl0ZXJhdG9yPEU+IHsKICBmaW5hbCBJdGVyYXRvcjxFPiBfaXRlcmF0b3I7CiAgZmluYWwgX0VsZW1lbnRQcmVkaWNhdGU8RT4gX2Y7CiAgYm9vbCBfaXNGaW5pc2hlZCA9IGZhbHNlOwoKICBUYWtlV2hpbGVJdGVyYXRvcih0aGlzLl9pdGVyYXRvciwgdGhpcy5fZik7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoX2lzRmluaXNoZWQpIHJldHVybiBmYWxzZTsKICAgIGlmICghX2l0ZXJhdG9yLm1vdmVOZXh0KCkgfHwgIV9mKF9pdGVyYXRvci5jdXJyZW50KSkgewogICAgICBfaXNGaW5pc2hlZCA9IHRydWU7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgRSBnZXQgY3VycmVudCB7CiAgICBpZiAoX2lzRmluaXNoZWQpIHJldHVybiBudWxsOwogICAgcmV0dXJuIF9pdGVyYXRvci5jdXJyZW50OwogIH0KfQoKY2xhc3MgU2tpcEl0ZXJhYmxlPEU+IGV4dGVuZHMgSXRlcmFibGU8RT4gewogIGZpbmFsIEl0ZXJhYmxlPEU+IF9pdGVyYWJsZTsKICBmaW5hbCBpbnQgX3NraXBDb3VudDsKCiAgZmFjdG9yeSBTa2lwSXRlcmFibGUoSXRlcmFibGU8RT4gaXRlcmFibGUsIGludCBjb3VudCkgewogICAgaWYgKGl0ZXJhYmxlIGlzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlKSB7CiAgICAgIHJldHVybiBuZXcgRWZmaWNpZW50TGVuZ3RoU2tpcEl0ZXJhYmxlPEU+KGl0ZXJhYmxlLCBjb3VudCk7CiAgICB9CiAgICByZXR1cm4gbmV3IFNraXBJdGVyYWJsZTxFPi5fKGl0ZXJhYmxlLCBfY2hlY2tDb3VudChjb3VudCkpOwogIH0KCiAgU2tpcEl0ZXJhYmxlLl8odGhpcy5faXRlcmFibGUsIHRoaXMuX3NraXBDb3VudCk7CgogIEl0ZXJhYmxlPEU+IHNraXAoaW50IGNvdW50KSB7CiAgICByZXR1cm4gbmV3IFNraXBJdGVyYWJsZTxFPi5fKF9pdGVyYWJsZSwgX3NraXBDb3VudCArIF9jaGVja0NvdW50KGNvdW50KSk7CiAgfQoKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgewogICAgcmV0dXJuIG5ldyBTa2lwSXRlcmF0b3I8RT4oX2l0ZXJhYmxlLml0ZXJhdG9yLCBfc2tpcENvdW50KTsKICB9Cn0KCmNsYXNzIEVmZmljaWVudExlbmd0aFNraXBJdGVyYWJsZTxFPiBleHRlbmRzIFNraXBJdGVyYWJsZTxFPgogICAgaW1wbGVtZW50cyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxFPiB7CiAgZmFjdG9yeSBFZmZpY2llbnRMZW5ndGhTa2lwSXRlcmFibGUoSXRlcmFibGU8RT4gaXRlcmFibGUsIGludCBjb3VudCkgewogICAgcmV0dXJuIG5ldyBFZmZpY2llbnRMZW5ndGhTa2lwSXRlcmFibGU8RT4uXyhpdGVyYWJsZSwgX2NoZWNrQ291bnQoY291bnQpKTsKICB9CgogIEVmZmljaWVudExlbmd0aFNraXBJdGVyYWJsZS5fKEl0ZXJhYmxlPEU+IGl0ZXJhYmxlLCBpbnQgY291bnQpCiAgICAgIDogc3VwZXIuXyhpdGVyYWJsZSwgY291bnQpOwoKICBpbnQgZ2V0IGxlbmd0aCB7CiAgICBpbnQgbGVuZ3RoID0gX2l0ZXJhYmxlLmxlbmd0aCAtIF9za2lwQ291bnQ7CiAgICBpZiAobGVuZ3RoID49IDApIHJldHVybiBsZW5ndGg7CiAgICByZXR1cm4gMDsKICB9CgogIEl0ZXJhYmxlPEU+IHNraXAoaW50IGNvdW50KSB7CiAgICByZXR1cm4gbmV3IEVmZmljaWVudExlbmd0aFNraXBJdGVyYWJsZTxFPi5fKAogICAgICAgIF9pdGVyYWJsZSwgX3NraXBDb3VudCArIF9jaGVja0NvdW50KGNvdW50KSk7CiAgfQp9CgppbnQgX2NoZWNrQ291bnQoaW50IGNvdW50KSB7CiAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoY291bnQsICJjb3VudCIpOwogIFJhbmdlRXJyb3IuY2hlY2tOb3ROZWdhdGl2ZShjb3VudCwgImNvdW50Iik7CiAgcmV0dXJuIGNvdW50Owp9CgpjbGFzcyBTa2lwSXRlcmF0b3I8RT4gZXh0ZW5kcyBJdGVyYXRvcjxFPiB7CiAgZmluYWwgSXRlcmF0b3I8RT4gX2l0ZXJhdG9yOwogIGludCBfc2tpcENvdW50OwoKICBTa2lwSXRlcmF0b3IodGhpcy5faXRlcmF0b3IsIHRoaXMuX3NraXBDb3VudCkgewogICAgYXNzZXJ0KF9za2lwQ291bnQgPj0gMCk7CiAgfQoKICBib29sIG1vdmVOZXh0KCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfc2tpcENvdW50OyBpKyspIF9pdGVyYXRvci5tb3ZlTmV4dCgpOwogICAgX3NraXBDb3VudCA9IDA7CiAgICByZXR1cm4gX2l0ZXJhdG9yLm1vdmVOZXh0KCk7CiAgfQoKICBFIGdldCBjdXJyZW50ID0+IF9pdGVyYXRvci5jdXJyZW50Owp9CgpjbGFzcyBTa2lwV2hpbGVJdGVyYWJsZTxFPiBleHRlbmRzIEl0ZXJhYmxlPEU+IHsKICBmaW5hbCBJdGVyYWJsZTxFPiBfaXRlcmFibGU7CiAgZmluYWwgX0VsZW1lbnRQcmVkaWNhdGU8RT4gX2Y7CgogIFNraXBXaGlsZUl0ZXJhYmxlKHRoaXMuX2l0ZXJhYmxlLCB0aGlzLl9mKTsKCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yIHsKICAgIHJldHVybiBuZXcgU2tpcFdoaWxlSXRlcmF0b3I8RT4oX2l0ZXJhYmxlLml0ZXJhdG9yLCBfZik7CiAgfQp9CgpjbGFzcyBTa2lwV2hpbGVJdGVyYXRvcjxFPiBleHRlbmRzIEl0ZXJhdG9yPEU+IHsKICBmaW5hbCBJdGVyYXRvcjxFPiBfaXRlcmF0b3I7CiAgZmluYWwgX0VsZW1lbnRQcmVkaWNhdGU8RT4gX2Y7CiAgYm9vbCBfaGFzU2tpcHBlZCA9IGZhbHNlOwoKICBTa2lwV2hpbGVJdGVyYXRvcih0aGlzLl9pdGVyYXRvciwgdGhpcy5fZik7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoIV9oYXNTa2lwcGVkKSB7CiAgICAgIF9oYXNTa2lwcGVkID0gdHJ1ZTsKICAgICAgd2hpbGUgKF9pdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgICAgaWYgKCFfZihfaXRlcmF0b3IuY3VycmVudCkpIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX2l0ZXJhdG9yLm1vdmVOZXh0KCk7CiAgfQoKICBFIGdldCBjdXJyZW50ID0+IF9pdGVyYXRvci5jdXJyZW50Owp9CgovKioKICogVGhlIGFsd2F5cyBlbXB0eSBbSXRlcmFibGVdLgogKi8KY2xhc3MgRW1wdHlJdGVyYWJsZTxFPiBleHRlbmRzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+IHsKICBjb25zdCBFbXB0eUl0ZXJhYmxlKCk7CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PiBjb25zdCBFbXB0eUl0ZXJhdG9yKCk7CgogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihFIGVsZW1lbnQpKSB7fQoKICBib29sIGdldCBpc0VtcHR5ID0+IHRydWU7CgogIGludCBnZXQgbGVuZ3RoID0+IDA7CgogIEUgZ2V0IGZpcnN0IHsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgZ2V0IHNpbmdsZSB7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgZWxlbWVudEF0KGludCBpbmRleCkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoaW5kZXgsIDAsIDAsICJpbmRleCIpOwogIH0KCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgPT4gZmFsc2U7CgogIGJvb2wgZXZlcnkoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IHRydWU7CgogIGJvb2wgYW55KGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiBmYWxzZTsKCiAgRSBmaXJzdFdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCB7RSBvckVsc2UoKX0pIHsKICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGxhc3RXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBzaW5nbGVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgU3RyaW5nIGpvaW4oW1N0cmluZyBzZXBhcmF0b3IgPSAiIl0pID0+ICIiOwoKICBJdGVyYWJsZTxFPiB3aGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gdGhpczsKCiAgSXRlcmFibGU8VD4gbWFwPFQ+KFQgZihFIGVsZW1lbnQpKSA9PiBuZXcgRW1wdHlJdGVyYWJsZTxUPigpOwoKICBFIHJlZHVjZShFIGNvbWJpbmUoRSB2YWx1ZSwgRSBlbGVtZW50KSkgewogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBUIGZvbGQ8VD4oVCBpbml0aWFsVmFsdWUsIFQgY29tYmluZShUIHByZXZpb3VzVmFsdWUsIEUgZWxlbWVudCkpIHsKICAgIHJldHVybiBpbml0aWFsVmFsdWU7CiAgfQoKICBJdGVyYWJsZTxFPiBza2lwKGludCBjb3VudCkgewogICAgUmFuZ2VFcnJvci5jaGVja05vdE5lZ2F0aXZlKGNvdW50LCAiY291bnQiKTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgSXRlcmFibGU8RT4gc2tpcFdoaWxlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiB0aGlzOwoKICBJdGVyYWJsZTxFPiB0YWtlKGludCBjb3VudCkgewogICAgUmFuZ2VFcnJvci5jaGVja05vdE5lZ2F0aXZlKGNvdW50LCAiY291bnQiKTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgSXRlcmFibGU8RT4gdGFrZVdoaWxlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiB0aGlzOwoKICBMaXN0PEU+IHRvTGlzdCh7Ym9vbCBncm93YWJsZTogdHJ1ZX0pID0+IGdyb3dhYmxlID8gPEU+W10gOiBuZXcgTGlzdDxFPigwKTsKCiAgU2V0PEU+IHRvU2V0KCkgPT4gbmV3IFNldDxFPigpOwp9CgovKiogVGhlIGFsd2F5cyBlbXB0eSBpdGVyYXRvci4gKi8KY2xhc3MgRW1wdHlJdGVyYXRvcjxFPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPEU+IHsKICBjb25zdCBFbXB0eUl0ZXJhdG9yKCk7CiAgYm9vbCBtb3ZlTmV4dCgpID0+IGZhbHNlOwogIEUgZ2V0IGN1cnJlbnQgPT4gbnVsbDsKfQoKY2xhc3MgRm9sbG93ZWRCeUl0ZXJhYmxlPEU+IGV4dGVuZHMgSXRlcmFibGU8RT4gewogIGZpbmFsIEl0ZXJhYmxlPEU+IF9maXJzdDsKICBmaW5hbCBJdGVyYWJsZTxFPiBfc2Vjb25kOwogIEZvbGxvd2VkQnlJdGVyYWJsZSh0aGlzLl9maXJzdCwgdGhpcy5fc2Vjb25kKTsKCiAgZmFjdG9yeSBGb2xsb3dlZEJ5SXRlcmFibGUuZmlyc3RFZmZpY2llbnQoCiAgICAgIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+IGZpcnN0LCBJdGVyYWJsZTxFPiBzZWNvbmQpIHsKICAgIGlmIChzZWNvbmQgaXMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4pIHsKICAgICAgcmV0dXJuIG5ldyBFZmZpY2llbnRMZW5ndGhGb2xsb3dlZEJ5SXRlcmFibGU8RT4oZmlyc3QsIHNlY29uZCk7CiAgICB9CiAgICByZXR1cm4gbmV3IEZvbGxvd2VkQnlJdGVyYWJsZTxFPihmaXJzdCwgc2Vjb25kKTsKICB9CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PiBuZXcgRm9sbG93ZWRCeUl0ZXJhdG9yKF9maXJzdCwgX3NlY29uZCk7CgogIGludCBnZXQgbGVuZ3RoID0+IF9maXJzdC5sZW5ndGggKyBfc2Vjb25kLmxlbmd0aDsKICBib29sIGdldCBpc0VtcHR5ID0+IF9maXJzdC5pc0VtcHR5ICYmIF9zZWNvbmQuaXNFbXB0eTsKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9maXJzdC5pc05vdEVtcHR5IHx8IF9zZWNvbmQuaXNOb3RFbXB0eTsKCiAgLy8gTWF5IGJlIG1vcmUgZWZmaWNpZW50IGlmIGVpdGhlciBpdGVyYWJsZSBpcyBhIFNldC4KICBib29sIGNvbnRhaW5zKE9iamVjdCB2YWx1ZSkgPT4KICAgICAgX2ZpcnN0LmNvbnRhaW5zKHZhbHVlKSB8fCBfc2Vjb25kLmNvbnRhaW5zKHZhbHVlKTsKCiAgRSBnZXQgZmlyc3QgewogICAgdmFyIGl0ZXJhdG9yID0gX2ZpcnN0Lml0ZXJhdG9yOwogICAgaWYgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHJldHVybiBpdGVyYXRvci5jdXJyZW50OwogICAgcmV0dXJuIF9zZWNvbmQuZmlyc3Q7CiAgfQoKICBFIGdldCBsYXN0IHsKICAgIHZhciBpdGVyYXRvciA9IF9zZWNvbmQuaXRlcmF0b3I7CiAgICBpZiAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICBFIGxhc3QgPSBpdGVyYXRvci5jdXJyZW50OwogICAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgbGFzdCA9IGl0ZXJhdG9yLmN1cnJlbnQ7CiAgICAgIHJldHVybiBsYXN0OwogICAgfQogICAgcmV0dXJuIF9maXJzdC5sYXN0OwogIH0KCiAgLy8gSWYgbGluZWFyIHNlcXVlbmNlcyBvZiBgZm9sbG93ZWRCeWAgYmVjb21lcyBhbiBpc3N1ZSwgd2UgY2FuIGZsYXR0ZW4KICAvLyBpbnRvIGEgbGlzdCBvZiBpdGVyYWJsZXMgaW5zdGVhZCBvZiBhIHRyZWUgb3Igc3BpbmUuCn0KCmNsYXNzIEVmZmljaWVudExlbmd0aEZvbGxvd2VkQnlJdGVyYWJsZTxFPiBleHRlbmRzIEZvbGxvd2VkQnlJdGVyYWJsZTxFPgogICAgaW1wbGVtZW50cyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxFPiB7CiAgRWZmaWNpZW50TGVuZ3RoRm9sbG93ZWRCeUl0ZXJhYmxlKAogICAgICBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxFPiBmaXJzdCwgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4gc2Vjb25kKQogICAgICA6IHN1cGVyKGZpcnN0LCBzZWNvbmQpOwoKICBJdGVyYWJsZTxFPiBza2lwKGludCBjb3VudCkgewogICAgaW50IGZpcnN0TGVuZ3RoID0gX2ZpcnN0Lmxlbmd0aDsKICAgIGlmIChjb3VudCA+PSBmaXJzdExlbmd0aCkgcmV0dXJuIF9zZWNvbmQuc2tpcChjb3VudCAtIGZpcnN0TGVuZ3RoKTsKICAgIHJldHVybiBuZXcgRWZmaWNpZW50TGVuZ3RoRm9sbG93ZWRCeUl0ZXJhYmxlPEU+KAogICAgICAgIF9maXJzdC5za2lwKGNvdW50KSwgX3NlY29uZCk7CiAgfQoKICBJdGVyYWJsZTxFPiB0YWtlKGludCBjb3VudCkgewogICAgaW50IGZpcnN0TGVuZ3RoID0gX2ZpcnN0Lmxlbmd0aDsKICAgIGlmIChjb3VudCA8PSBmaXJzdExlbmd0aCkgcmV0dXJuIF9maXJzdC50YWtlKGNvdW50KTsKICAgIHJldHVybiBuZXcgRWZmaWNpZW50TGVuZ3RoRm9sbG93ZWRCeUl0ZXJhYmxlPEU+KAogICAgICAgIF9maXJzdCwgX3NlY29uZC50YWtlKGNvdW50IC0gZmlyc3RMZW5ndGgpKTsKICB9CgogIEUgZWxlbWVudEF0KGludCBpbmRleCkgewogICAgaW50IGZpcnN0TGVuZ3RoID0gX2ZpcnN0Lmxlbmd0aDsKICAgIGlmIChpbmRleCA8IGZpcnN0TGVuZ3RoKSByZXR1cm4gX2ZpcnN0LmVsZW1lbnRBdChpbmRleCk7CiAgICByZXR1cm4gX3NlY29uZC5lbGVtZW50QXQoaW5kZXggLSBmaXJzdExlbmd0aCk7CiAgfQoKICBFIGdldCBmaXJzdCB7CiAgICBpZiAoX2ZpcnN0LmlzTm90RW1wdHkpIHJldHVybiBfZmlyc3QuZmlyc3Q7CiAgICByZXR1cm4gX3NlY29uZC5maXJzdDsKICB9CgogIEUgZ2V0IGxhc3QgewogICAgaWYgKF9zZWNvbmQuaXNOb3RFbXB0eSkgcmV0dXJuIF9zZWNvbmQubGFzdDsKICAgIHJldHVybiBfZmlyc3QubGFzdDsKICB9Cn0KCmNsYXNzIEZvbGxvd2VkQnlJdGVyYXRvcjxFPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPEU+IHsKICBJdGVyYXRvcjxFPiBfY3VycmVudEl0ZXJhdG9yOwogIEl0ZXJhYmxlPEU+IF9uZXh0SXRlcmFibGU7CgogIEZvbGxvd2VkQnlJdGVyYXRvcihJdGVyYWJsZTxFPiBmaXJzdCwgdGhpcy5fbmV4dEl0ZXJhYmxlKQogICAgICA6IF9jdXJyZW50SXRlcmF0b3IgPSBmaXJzdC5pdGVyYXRvcjsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChfY3VycmVudEl0ZXJhdG9yLm1vdmVOZXh0KCkpIHJldHVybiB0cnVlOwogICAgaWYgKF9uZXh0SXRlcmFibGUgIT0gbnVsbCkgewogICAgICBfY3VycmVudEl0ZXJhdG9yID0gX25leHRJdGVyYWJsZS5pdGVyYXRvcjsKICAgICAgX25leHRJdGVyYWJsZSA9IG51bGw7CiAgICAgIHJldHVybiBfY3VycmVudEl0ZXJhdG9yLm1vdmVOZXh0KCk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBFIGdldCBjdXJyZW50ID0+IF9jdXJyZW50SXRlcmF0b3IuY3VycmVudDsKfQoKY2xhc3MgV2hlcmVUeXBlSXRlcmFibGU8VD4gZXh0ZW5kcyBJdGVyYWJsZTxUPiB7CiAgZmluYWwgSXRlcmFibGU8T2JqZWN0PiBfc291cmNlOwogIFdoZXJlVHlwZUl0ZXJhYmxlKHRoaXMuX3NvdXJjZSk7CiAgSXRlcmF0b3I8VD4gZ2V0IGl0ZXJhdG9yID0+IG5ldyBXaGVyZVR5cGVJdGVyYXRvcjxUPihfc291cmNlLml0ZXJhdG9yKTsKfQoKY2xhc3MgV2hlcmVUeXBlSXRlcmF0b3I8VD4gaW1wbGVtZW50cyBJdGVyYXRvcjxUPiB7CiAgZmluYWwgSXRlcmF0b3I8T2JqZWN0PiBfc291cmNlOwogIFdoZXJlVHlwZUl0ZXJhdG9yKHRoaXMuX3NvdXJjZSk7CiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIHdoaWxlIChfc291cmNlLm1vdmVOZXh0KCkpIHsKICAgICAgaWYgKF9zb3VyY2UuY3VycmVudCBpcyBUKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIFQgZ2V0IGN1cnJlbnQgPT4gX3NvdXJjZS5jdXJyZW50Owp9CgovKioKICogQ3JlYXRlcyBlcnJvcnMgdGhyb3cgYnkgW0l0ZXJhYmxlXSB3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bGwgcGF0Y2ggZmlsZXMgaW50byBhIHNpbmdsZSBwYXRjaCBmaWxlLiBUaGlzCi8vLyBmaWxlIGlzIHRoZSBmaXJzdCBwYXRjaCBpbiAiZGFydDpfaW50ZXJuYWwiIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgaW1wb3J0cwovLy8gdXNlZCBieSBwYXRjaGVzIG9mIHRoYXQgbGlicmFyeS4gV2UgcGxhbiB0byBjaGFuZ2UgdGhpcyB3aGVuIHdlIGhhdmUgYQovLy8gc2hhcmVkIGZyb250IGVuZCBhbmQgc2ltcGx5IHVzZSBwYXJ0cy4KCmltcG9ydCAiZGFydDpjb3JlIiBoaWRlIFN5bWJvbDsKCmltcG9ydCAiZGFydDp0eXBlZF9kYXRhIiBzaG93IEludDMyTGlzdDsKCi8vLyBUaGVzZSBhcmUgdGhlIGFkZGl0aW9uYWwgcGFydHMgb2YgdGhpcyBwYXRjaCBsaWJyYXJ5OgovLyBwYXJ0ICJjbGFzc19pZF9mYXN0YS5kYXJ0IjsKLy8gcGFydCAicHJpbnRfcGF0Y2guZGFydCI7Ci8vIHBhcnQgInN5bWJvbF9wYXRjaC5kYXJ0IjsKCkBwYXRjaApMaXN0PFQ+IG1ha2VMaXN0Rml4ZWRMZW5ndGg8VD4oTGlzdDxUPiBncm93YWJsZUxpc3QpCiAgICBuYXRpdmUgIkludGVybmFsX21ha2VMaXN0Rml4ZWRMZW5ndGgiOwoKQHBhdGNoCkxpc3Q8VD4gbWFrZUZpeGVkTGlzdFVubW9kaWZpYWJsZTxUPihMaXN0PFQ+IGZpeGVkTGVuZ3RoTGlzdCkKICAgIG5hdGl2ZSAiSW50ZXJuYWxfbWFrZUZpeGVkTGlzdFVubW9kaWZpYWJsZSI7CgpAcGF0Y2gKT2JqZWN0IGV4dHJhY3RUeXBlQXJndW1lbnRzPFQ+KFQgaW5zdGFuY2UsIEZ1bmN0aW9uIGV4dHJhY3QpCiAgICBuYXRpdmUgIkludGVybmFsX2V4dHJhY3RUeXBlQXJndW1lbnRzIjsKCmNsYXNzIFZNTGlicmFyeUhvb2tzIHsKICAvLyBFeGFtcGxlOiAiZGFydDppc29sYXRlIF9UaW1lci5fZmFjdG9yeSIKICBzdGF0aWMgdmFyIHRpbWVyRmFjdG9yeTsKCiAgLy8gRXhhbXBsZTogImRhcnQ6aW8gX0V2ZW50SGFuZGxlci5fc2VuZERhdGEiCiAgc3RhdGljIHZhciBldmVudEhhbmRsZXJTZW5kRGF0YTsKCiAgLy8gQSBudWxsYXJ5IGNsb3N1cmUgdGhhdCBhbnN3ZXJzIHRoZSBjdXJyZW50IGNsb2NrIHZhbHVlIGluIG1pbGxpc2Vjb25kcy4KICAvLyBFeGFtcGxlOiAiZGFydDppbyBfRXZlbnRIYW5kbGVyLl90aW1lck1pbGxpc2Vjb25kQ2xvY2siCiAgc3RhdGljIHZhciB0aW1lck1pbGxpc2Vjb25kQ2xvY2s7CgogIC8vIEltcGxlbWVudGF0aW9uIG9mIFJlc291cmNlLnJlYWRBc0J5dGVzLgogIHN0YXRpYyB2YXIgcmVzb3VyY2VSZWFkQXNCeXRlczsKCiAgLy8gSW1wbGVtZW50YXRpb24gb2YgcGFja2FnZSByb290L21hcCBwcm92aXNpb24uCiAgc3RhdGljIHZhciBwYWNrYWdlUm9vdFN0cmluZzsKICBzdGF0aWMgdmFyIHBhY2thZ2VDb25maWdTdHJpbmc7CiAgc3RhdGljIHZhciBwYWNrYWdlUm9vdFVyaUZ1dHVyZTsKICBzdGF0aWMgdmFyIHBhY2thZ2VDb25maWdVcmlGdXR1cmU7CiAgc3RhdGljIHZhciByZXNvbHZlUGFja2FnZVVyaUZ1dHVyZTsKCiAgc3RhdGljIHZhciBfY29tcHV0ZVNjcmlwdFVyaTsKICBzdGF0aWMgdmFyIF9jYWNoZWRTY3JpcHQ7CiAgc3RhdGljIHNldCBwbGF0Zm9ybVNjcmlwdCh2YXIgZikgewogICAgX2NvbXB1dGVTY3JpcHRVcmkgPSBmOwogICAgX2NhY2hlZFNjcmlwdCA9IG51bGw7CiAgfQoKICBzdGF0aWMgZ2V0IHBsYXRmb3JtU2NyaXB0IHsKICAgIGlmIChfY2FjaGVkU2NyaXB0ID09IG51bGwgJiYgX2NvbXB1dGVTY3JpcHRVcmkgIT0gbnVsbCkgewogICAgICBfY2FjaGVkU2NyaXB0ID0gX2NvbXB1dGVTY3JpcHRVcmkoKTsKICAgIH0KICAgIHJldHVybiBfY2FjaGVkU2NyaXB0OwogIH0KfQoKZmluYWwgYm9vbCBpczY0Qml0ID0gX2lucXVpcmVJczY0Qml0KCk7Cgpib29sIF9pbnF1aXJlSXM2NEJpdCgpIG5hdGl2ZSAiSW50ZXJuYWxfaW5xdWlyZUlzNjRCaXQiOwoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCkBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCmJvb2wgX2NsYXNzUmFuZ2VDaGVjayhpbnQgY2lkLCBpbnQgbG93ZXJMaW1pdCwgaW50IHVwcGVyTGltaXQpIHsKICByZXR1cm4gY2lkID49IGxvd2VyTGltaXQgJiYgY2lkIDw9IHVwcGVyTGltaXQ7Cn0KCi8vIFV0aWxpdHkgY2xhc3Mgbm93IG9ubHkgdXNlZCBieSB0aGUgVk0uCmNsYXNzIExpc3RzIHsKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBzdGF0aWMgdm9pZCBjb3B5KExpc3Qgc3JjLCBpbnQgc3JjU3RhcnQsIExpc3QgZHN0LCBpbnQgZHN0U3RhcnQsIGludCBjb3VudCkgewogICAgaWYgKHNyY1N0YXJ0IDwgZHN0U3RhcnQpIHsKICAgICAgZm9yIChpbnQgaSA9IHNyY1N0YXJ0ICsgY291bnQgLSAxLCBqID0gZHN0U3RhcnQgKyBjb3VudCAtIDE7CiAgICAgICAgICBpID49IHNyY1N0YXJ0OwogICAgICAgICAgaS0tLCBqLS0pIHsKICAgICAgICBkc3Rbal0gPSBzcmNbaV07CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IGkgPSBzcmNTdGFydCwgaiA9IGRzdFN0YXJ0OyBpIDwgc3JjU3RhcnQgKyBjb3VudDsgaSsrLCBqKyspIHsKICAgICAgICBkc3Rbal0gPSBzcmNbaV07CiAgICAgIH0KICAgIH0KICB9Cn0KCi8vIFByZXBlbmQgdGhlIHBhcmVudCB0eXBlIGFyZ3VtZW50cyAobWF5YmUgbnVsbCkgb2YgbGVuZ3RoICdwYXJlbnRMZW4nIHRvIHRoZQovLyBmdW5jdGlvbiB0eXBlIGFyZ3VtZW50cyAobWF5IGJlIG51bGwpLiBUaGUgcmVzdWx0IGlzIG51bGwgaWYgYm90aCBpbnB1dAovLyB2ZWN0b3JzIGFyZSBudWxsIG9yIGlzIGEgbmV3bHkgYWxsb2NhdGVkIGFuZCBjYW5vbmljYWxpemVkIHZlY3RvciBvZiBsZW5ndGgKLy8gJ3RvdGFsTGVuJy4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCl9wcmVwZW5kVHlwZUFyZ3VtZW50cyhmdW5jdGlvblR5cGVBcmd1bWVudHMsIHBhcmVudFR5cGVBcmd1bWVudHMsIHBhcmVudExlbiwKICAgIHRvdGFsTGVuKSBuYXRpdmUgIkludGVybmFsX3ByZXBlbmRUeXBlQXJndW1lbnRzIjsKCi8vIENoZWNrIHRoYXQgYSBzZXQgb2YgdHlwZSBhcmd1bWVudHMgc2F0aXNmeSB0aGUgdHlwZSBwYXJhbWV0ZXIgYm91bmRzIG9uIGEKLy8gY2xvc3VyZS4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCl9ib3VuZHNDaGVja0ZvclBhcnRpYWxJbnN0YW50aWF0aW9uKGNsb3N1cmUsIHR5cGVBcmdzKQogICAgbmF0aXZlICJJbnRlcm5hbF9ib3VuZHNDaGVja0ZvclBhcnRpYWxJbnN0YW50aWF0aW9uIjsKCi8vIENhbGxlZCBieSBJUlJlZ0V4cE1hY3JvQXNzZW1ibGVyOjpHcm93U3RhY2suCkludDMyTGlzdCBfZ3Jvd1JlZ0V4cFN0YWNrKEludDMyTGlzdCBzdGFjaykgewogIGZpbmFsIG5ld1N0YWNrID0gbmV3IEludDMyTGlzdChzdGFjay5sZW5ndGggKiAyKTsKICBmb3IgKGludCBpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSsrKSB7CiAgICBuZXdTdGFja1tpXSA9IHN0YWNrW2ldOwogIH0KICByZXR1cm4gbmV3U3RhY2s7Cn0KCi8vIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gc2tpcCBpbXBsaWNpdCBvciBleHBsaWNpdCBjaGVja2VkIGRvd24gY2FzdHMgaW4KLy8gdGhlIHBhcnRzIG9mIHRoZSBjb3JlIGxpYnJhcnkgaW1wbGVtZW50YXRpb24gd2hlcmUgd2Uga25vdyBieSBjb25zdHJ1Y3Rpb24gdGhlCi8vIHR5cGUgb2YgYSB2YWx1ZS4KLy8KLy8gSW1wb3J0YW50OiB0aGlzIGlzIHVuc2FmZSBhbmQgbXVzdCBiZSB1c2VkIHdpdGggY2FyZS4KVCB1bnNhZmVDYXN0PFQ+KE9iamVjdCB2KSBuYXRpdmUgIkludGVybmFsX3Vuc2FmZUNhc3QiOwqAgABOTjwBDwFNT0srASABKQE6HxwdAQc1KwEHPjEBBz0sARctGwEwIwFNPSQBLSIBMyAiIyUmASAcJRsaBAEePisGGgQCASgBOQEiJhxBMQIBKg4eUB9DGRYZCA1NGQgGBAIBT0tPDyJNNgFNDCI3OgEwLjQrHAQTAgFQUhQDOTgBKGRhcnQ6X2ludGVybmFsLXBhdGNoL2ludGVybmFsX3BhdGNoLmRhcnRRb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvX2ludGVybmFsL3ZtL2xpYi9jbGFzc19pZF9mYXN0YS5kYXJ0g7UvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vIHBhcnQgb2YgImludGVybmFsX3BhdGNoLmRhcnQiOwoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBDbGFzc0lEIHsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgc3RhdGljIGludCBnZXRJRChPYmplY3QgdmFsdWUpIG5hdGl2ZSAiQ2xhc3NJRF9nZXRJRCI7CgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBzdGF0aWMgZmluYWwgaW50IGNpZEFycmF5ID0gMDsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgc3RhdGljIGZpbmFsIGludCBjaWRFeHRlcm5hbE9uZUJ5dGVTdHJpbmcgPSAwOwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBzdGF0aWMgZmluYWwgaW50IGNpZEdyb3dhYmxlT2JqZWN0QXJyYXkgPSAwOwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBzdGF0aWMgZmluYWwgaW50IGNpZEltbXV0YWJsZUFycmF5ID0gMDsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgc3RhdGljIGZpbmFsIGludCBjaWRPbmVCeXRlU3RyaW5nID0gMDsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgc3RhdGljIGZpbmFsIGludCBjaWRUd29CeXRlU3RyaW5nID0gMDsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgc3RhdGljIGZpbmFsIGludCBjaWRVaW50OEFycmF5VmlldyA9IDA7Cn0KHwBOTjwBDwEiARoQJDQ5ARwhHDEcLxwqHCkcKRwqAgEoZGFydDpfaW50ZXJuYWwtcGF0Y2gvY2xhc3NfaWRfZmFzdGEuZGFydEBvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9pbnRlcm5hbC9wYXRjaC5kYXJ0gU0vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgImRhcnQ6X2ludGVybmFsIjsKCmNsYXNzIF9QYXRjaCB7CiAgY29uc3QgX1BhdGNoKCk7Cn0KCmNvbnN0IF9QYXRjaCBwYXRjaCA9IGNvbnN0IF9QYXRjaCgpOwoPAE5OPAEPARoBDxICASUBH2RhcnQ6X2ludGVybmFsLXBhdGNoL3BhdGNoLmRhcnRFb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvaW50ZXJuYWwvYXN5bmNfY2FzdC5kYXJ0jXAvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5faW50ZXJuYWw7CgovLyBDYXN0aW5nIHdyYXBwZXJzIGZvciBhc3luY2hyb25vdXMgY2xhc3Nlcy4KCmNsYXNzIENhc3RTdHJlYW08UywgVD4gZXh0ZW5kcyBTdHJlYW08VD4gewogIGZpbmFsIFN0cmVhbTxTPiBfc291cmNlOwogIENhc3RTdHJlYW0odGhpcy5fc291cmNlKTsKICBib29sIGdldCBpc0Jyb2FkY2FzdCA9PiBfc291cmNlLmlzQnJvYWRjYXN0OwoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gbGlzdGVuKHZvaWQgb25EYXRhKFQgZGF0YSksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICByZXR1cm4gbmV3IENhc3RTdHJlYW1TdWJzY3JpcHRpb248UywgVD4oCiAgICAgICAgX3NvdXJjZS5saXN0ZW4obnVsbCwgb25Eb25lOiBvbkRvbmUsIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpKQogICAgICAuLm9uRGF0YShvbkRhdGEpCiAgICAgIC4ub25FcnJvcihvbkVycm9yKTsKICB9CgogIFN0cmVhbTxSPiBjYXN0PFI+KCkgPT4gbmV3IENhc3RTdHJlYW08UywgUj4oX3NvdXJjZSk7Cn0KCmNsYXNzIENhc3RTdHJlYW1TdWJzY3JpcHRpb248UywgVD4gaW1wbGVtZW50cyBTdHJlYW1TdWJzY3JpcHRpb248VD4gewogIGZpbmFsIFN0cmVhbVN1YnNjcmlwdGlvbjxTPiBfc291cmNlOwoKICAvLy8gWm9uZSB3aGVyZSBsaXN0ZW4gd2FzIGNhbGxlZC4KICBmaW5hbCBab25lIF96b25lID0gWm9uZS5jdXJyZW50OwoKICAvLy8gVXNlcidzIGRhdGEgaGFuZGxlci4gTWF5IGJlIG51bGwuCiAgdm9pZCBGdW5jdGlvbihUKSBfaGFuZGxlRGF0YTsKCiAgLy8vIENvcHkgb2YgX3NvdXJjZSdzIGhhbmRsZUVycm9yIHNvIHdlIGNhbiByZXBvcnQgZXJyb3JzIGluIG9uRGF0YS4KICAvLy8gTWF5IGJlIG51bGwuCiAgRnVuY3Rpb24gX2hhbmRsZUVycm9yOwoKICBDYXN0U3RyZWFtU3Vic2NyaXB0aW9uKHRoaXMuX3NvdXJjZSkgewogICAgX3NvdXJjZS5vbkRhdGEoX29uRGF0YSk7CiAgfQoKICBGdXR1cmUgY2FuY2VsKCkgPT4gX3NvdXJjZS5jYW5jZWwoKTsKCiAgdm9pZCBvbkRhdGEodm9pZCBoYW5kbGVEYXRhKFQgZGF0YSkpIHsKICAgIF9oYW5kbGVEYXRhID0gaGFuZGxlRGF0YSA9PSBudWxsCiAgICAgICAgPyBudWxsCiAgICAgICAgOiBfem9uZS5yZWdpc3RlclVuYXJ5Q2FsbGJhY2s8ZHluYW1pYywgVD4oaGFuZGxlRGF0YSk7CiAgfQoKICB2b2lkIG9uRXJyb3IoRnVuY3Rpb24gaGFuZGxlRXJyb3IpIHsKICAgIF9zb3VyY2Uub25FcnJvcihoYW5kbGVFcnJvcik7CiAgICBpZiAoaGFuZGxlRXJyb3IgPT0gbnVsbCkgewogICAgICBfaGFuZGxlRXJyb3IgPSBudWxsOwogICAgfSBlbHNlIGlmIChoYW5kbGVFcnJvciBpcyBGdW5jdGlvbihOdWxsLCBOdWxsKSkgewogICAgICBfaGFuZGxlRXJyb3IgPSBfem9uZQogICAgICAgICAgLnJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2s8ZHluYW1pYywgT2JqZWN0LCBTdGFja1RyYWNlPihoYW5kbGVFcnJvcik7CiAgICB9IGVsc2UgewogICAgICBfaGFuZGxlRXJyb3IgPSBfem9uZS5yZWdpc3RlclVuYXJ5Q2FsbGJhY2s8ZHluYW1pYywgT2JqZWN0PihoYW5kbGVFcnJvcik7CiAgICB9CiAgfQoKICB2b2lkIG9uRG9uZSh2b2lkIGhhbmRsZURvbmUoKSkgewogICAgX3NvdXJjZS5vbkRvbmUoaGFuZGxlRG9uZSk7CiAgfQoKICB2b2lkIF9vbkRhdGEoUyBkYXRhKSB7CiAgICBpZiAoX2hhbmRsZURhdGEgPT0gbnVsbCkgcmV0dXJuOwogICAgVCB0YXJnZXREYXRhOwogICAgdHJ5IHsKICAgICAgdGFyZ2V0RGF0YSA9IGRhdGEgYXMgVDsKICAgIH0gY2F0Y2ggKGVycm9yLCBzdGFjaykgewogICAgICBpZiAoX2hhbmRsZUVycm9yID09IG51bGwpIHsKICAgICAgICBfem9uZS5oYW5kbGVVbmNhdWdodEVycm9yKGVycm9yLCBzdGFjayk7CiAgICAgIH0gZWxzZSBpZiAoX2hhbmRsZUVycm9yIGlzIEZ1bmN0aW9uKE51bGwsIE51bGwpKSB7CiAgICAgICAgX3pvbmUucnVuQmluYXJ5R3VhcmRlZChfaGFuZGxlRXJyb3IsIGVycm9yLCBzdGFjayk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3pvbmUucnVuVW5hcnlHdWFyZGVkKF9oYW5kbGVFcnJvciwgZXJyb3IpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIF96b25lLnJ1blVuYXJ5R3VhcmRlZChfaGFuZGxlRGF0YSwgdGFyZ2V0RGF0YSk7CiAgfQoKICB2b2lkIHBhdXNlKFtGdXR1cmUgcmVzdW1lU2lnbmFsXSkgewogICAgX3NvdXJjZS5wYXVzZShyZXN1bWVTaWduYWwpOwogIH0KCiAgdm9pZCByZXN1bWUoKSB7CiAgICBfc291cmNlLnJlc3VtZSgpOwogIH0KCiAgYm9vbCBnZXQgaXNQYXVzZWQgPT4gX3NvdXJjZS5pc1BhdXNlZDsKCiAgRnV0dXJlPEU+IGFzRnV0dXJlPEU+KFtFIGZ1dHVyZVZhbHVlXSkgPT4gX3NvdXJjZS5hc0Z1dHVyZTxFPihmdXR1cmVWYWx1ZSk7Cn0KCmNsYXNzIENhc3RTdHJlYW1UcmFuc2Zvcm1lcjxTUywgU1QsIFRTLCBUVD4KICAgIGV4dGVuZHMgU3RyZWFtVHJhbnNmb3JtZXJCYXNlPFRTLCBUVD4gewogIGZpbmFsIFN0cmVhbVRyYW5zZm9ybWVyPFNTLCBTVD4gX3NvdXJjZTsKICBDYXN0U3RyZWFtVHJhbnNmb3JtZXIodGhpcy5fc291cmNlKTsKCiAgU3RyZWFtVHJhbnNmb3JtZXI8UlMsIFJUPiBjYXN0PFJTLCBSVD4oKSA9PgogICAgICBuZXcgQ2FzdFN0cmVhbVRyYW5zZm9ybWVyPFNTLCBTVCwgUlMsIFJUPihfc291cmNlKTsKICBTdHJlYW08VFQ+IGJpbmQoU3RyZWFtPFRTPiBzdHJlYW0pID0+CiAgICAgIF9zb3VyY2UuYmluZChzdHJlYW0uY2FzdDxTUz4oKSkuY2FzdDxUVD4oKTsKfQoKY2xhc3MgQ2FzdENvbnZlcnRlcjxTUywgU1QsIFRTLCBUVD4gZXh0ZW5kcyBDb252ZXJ0ZXI8VFMsIFRUPiB7CiAgZmluYWwgQ29udmVydGVyPFNTLCBTVD4gX3NvdXJjZTsKICBDYXN0Q29udmVydGVyKHRoaXMuX3NvdXJjZSk7CgogIFRUIGNvbnZlcnQoVFMgaW5wdXQpID0+IF9zb3VyY2UuY29udmVydChpbnB1dCBhcyBTUykgYXMgVFQ7CgogIC8vIGNhc3QgaXMgaW5oZXJpdGVkIGZyb20gQ29udmVydGVyLgoKICBTdHJlYW08VFQ+IGJpbmQoU3RyZWFtPFRTPiBzdHJlYW0pID0+CiAgICAgIF9zb3VyY2UuYmluZChzdHJlYW0uY2FzdDxTUz4oKSkuY2FzdDxUVD4oKTsKCiAgQ29udmVydGVyPFJTLCBSVD4gY2FzdDxSUywgUlQ+KCkgPT4KICAgICAgbmV3IENhc3RDb252ZXJ0ZXI8U1MsIFNULCBSUywgUlQ+KF9zb3VyY2UpOwp9Cn0ATk48AQ8BGAEuASsbHC8BND8tTBcaBAE4AgFGJwEkIwEoIAFHExkBKR0EAScBKSUPPwQBJyIfGzYbTQ1QBgQBIyAEARklEgoeHSIxOTwPNAgOBjQEASYhBAESFgQBKQFOAgEsLCsnAS46KDICAUAjHwE+AScBKDIBJjICAR5kYXJ0Ol9pbnRlcm5hbC9hc3luY19jYXN0LmRhcnQ/b3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvaW50ZXJuYWwvY2FzdC5kYXJ0plovLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5faW50ZXJuYWw7CgovLyBDYXN0aW5nIHdyYXBwZXJzIGZvciBjb2xsZWN0aW9uIGNsYXNzZXMuCgphYnN0cmFjdCBjbGFzcyBfQ2FzdEl0ZXJhYmxlQmFzZTxTLCBUPiBleHRlbmRzIEl0ZXJhYmxlPFQ+IHsKICBJdGVyYWJsZTxTPiBnZXQgX3NvdXJjZTsKCiAgSXRlcmF0b3I8VD4gZ2V0IGl0ZXJhdG9yID0+IG5ldyBDYXN0SXRlcmF0b3I8UywgVD4oX3NvdXJjZS5pdGVyYXRvcik7CgogIC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVycyB1c2UgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb24gdGhlCiAgLy8gdGhyb3dpbmcgaXRlcmF0b3IuIFRoZXNlIGFyZSBhbGwgb3BlcmF0aW9ucyB0aGF0IGhhdmUgbm8gbW9yZSBlZmZpY2llbnQKICAvLyBpbXBsZW1lbnRhdGlvbiB0aGFuIHZpc2l0aW5nIGV2ZXJ5IGVsZW1lbnQgaW4gb3JkZXIsCiAgLy8gb3IgdGhhdCBoYXMgbm8gbW9yZSBlZmZpY2llbnQgd2F5IHRvIGdldCB0aGUgY29ycmVjdCB0eXBlICh0b0xpc3QsIHRvU2V0KS4KICAvLwogIC8vICogbWFwCiAgLy8gKiB3aGVyZQogIC8vICogZXhwYW5kCiAgLy8gKiBmb3JFYWNoCiAgLy8gKiByZWR1Y2UKICAvLyAqIGZvbGQKICAvLyAqIGV2ZXJ5CiAgLy8gKiBhbnkKICAvLyAqIGpvaW4KICAvLyAqIHRvTGlzdAogIC8vICogdG9TZXQKICAvLyAqIHNraXBXaGlsZQogIC8vICogdGFrZVdoaWxlCiAgLy8gKiBmaXJzdFdoZXJlCiAgLy8gKiBzaW5nbGVXaGVyZQoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfc291cmNlLmxlbmd0aDsKICBib29sIGdldCBpc0VtcHR5ID0+IF9zb3VyY2UuaXNFbXB0eTsKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9zb3VyY2UuaXNOb3RFbXB0eTsKCiAgSXRlcmFibGU8VD4gc2tpcChpbnQgY291bnQpID0+IG5ldyBDYXN0SXRlcmFibGU8UywgVD4oX3NvdXJjZS5za2lwKGNvdW50KSk7CiAgSXRlcmFibGU8VD4gdGFrZShpbnQgY291bnQpID0+IG5ldyBDYXN0SXRlcmFibGU8UywgVD4oX3NvdXJjZS50YWtlKGNvdW50KSk7CgogIFQgZWxlbWVudEF0KGludCBpbmRleCkgPT4gX3NvdXJjZS5lbGVtZW50QXQoaW5kZXgpIGFzIFQ7CiAgVCBnZXQgZmlyc3QgPT4gX3NvdXJjZS5maXJzdCBhcyBUOwogIFQgZ2V0IGxhc3QgPT4gX3NvdXJjZS5sYXN0IGFzIFQ7CiAgVCBnZXQgc2luZ2xlID0+IF9zb3VyY2Uuc2luZ2xlIGFzIFQ7CgogIGJvb2wgY29udGFpbnMoT2JqZWN0IG90aGVyKSA9PiBfc291cmNlLmNvbnRhaW5zKG90aGVyKTsKCiAgLy8gTWlnaHQgYmUgaW1wbGVtZW50ZWQgYnkgdGVzdGluZyBiYWNrd2FyZHMgZnJvbSB0aGUgZW5kLAogIC8vIHNvIHVzZSB0aGUgX3NvdXJjZSdzIGltcGxlbWVudGF0aW9uLgogIFQgbGFzdFdoZXJlKGJvb2wgdGVzdChUIGVsZW1lbnQpLCB7VCBvckVsc2UoKX0pID0+CiAgICAgIF9zb3VyY2UubGFzdFdoZXJlKChTIGVsZW1lbnQpID0+IHRlc3QoZWxlbWVudCBhcyBUKSwKICAgICAgICAgIG9yRWxzZTogKG9yRWxzZSA9PSBudWxsKSA/IG51bGwgOiAoKSA9PiBvckVsc2UoKSBhcyBTKSBhcyBUOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBfc291cmNlLnRvU3RyaW5nKCk7Cn0KCmNsYXNzIENhc3RJdGVyYXRvcjxTLCBUPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPFQ+IHsKICBJdGVyYXRvcjxTPiBfc291cmNlOwogIENhc3RJdGVyYXRvcih0aGlzLl9zb3VyY2UpOwogIGJvb2wgbW92ZU5leHQoKSA9PiBfc291cmNlLm1vdmVOZXh0KCk7CiAgVCBnZXQgY3VycmVudCA9PiBfc291cmNlLmN1cnJlbnQgYXMgVDsKfQoKY2xhc3MgQ2FzdEl0ZXJhYmxlPFMsIFQ+IGV4dGVuZHMgX0Nhc3RJdGVyYWJsZUJhc2U8UywgVD4gewogIGZpbmFsIEl0ZXJhYmxlPFM+IF9zb3VyY2U7CgogIENhc3RJdGVyYWJsZS5fKHRoaXMuX3NvdXJjZSk7CgogIGZhY3RvcnkgQ2FzdEl0ZXJhYmxlKEl0ZXJhYmxlPFM+IHNvdXJjZSkgewogICAgaWYgKHNvdXJjZSBpcyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxTPikgewogICAgICByZXR1cm4gbmV3IF9FZmZpY2llbnRMZW5ndGhDYXN0SXRlcmFibGU8UywgVD4oc291cmNlKTsKICAgIH0KICAgIHJldHVybiBuZXcgQ2FzdEl0ZXJhYmxlPFMsIFQ+Ll8oc291cmNlKTsKICB9CgogIEl0ZXJhYmxlPFI+IGNhc3Q8Uj4oKSA9PiBuZXcgQ2FzdEl0ZXJhYmxlPFMsIFI+KF9zb3VyY2UpOwp9CgpjbGFzcyBfRWZmaWNpZW50TGVuZ3RoQ2FzdEl0ZXJhYmxlPFMsIFQ+IGV4dGVuZHMgQ2FzdEl0ZXJhYmxlPFMsIFQ+CiAgICBpbXBsZW1lbnRzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPFQ+IHsKICBfRWZmaWNpZW50TGVuZ3RoQ2FzdEl0ZXJhYmxlKEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPFM+IHNvdXJjZSkKICAgICAgOiBzdXBlci5fKHNvdXJjZSk7Cn0KCmFic3RyYWN0IGNsYXNzIF9DYXN0TGlzdEJhc2U8UywgVD4gZXh0ZW5kcyBfQ2FzdEl0ZXJhYmxlQmFzZTxTLCBUPgogICAgd2l0aCBMaXN0TWl4aW48VD4gewogIExpc3Q8Uz4gZ2V0IF9zb3VyY2U7CgogIC8vIFVzaW5nIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZyb20gTGlzdE1peGluOgogIC8vICogcmV2ZXJzZWQKICAvLyAqIHNodWZmbGUKICAvLyAqIGluZGV4T2YKICAvLyAqIGxhc3RJbmRleE9mCiAgLy8gKiBjbGVhcgogIC8vICogc3VibGlzdAogIC8vICogYXNNYXAKCiAgVCBvcGVyYXRvciBbXShpbnQgaW5kZXgpID0+IF9zb3VyY2VbaW5kZXhdIGFzIFQ7CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgVCB2YWx1ZSkgewogICAgX3NvdXJjZVtpbmRleF0gPSB2YWx1ZSBhcyBTOwogIH0KCiAgdm9pZCBzZXQgbGVuZ3RoKGludCBsZW5ndGgpIHsKICAgIF9zb3VyY2UubGVuZ3RoID0gbGVuZ3RoOwogIH0KCiAgdm9pZCBhZGQoVCB2YWx1ZSkgewogICAgX3NvdXJjZS5hZGQodmFsdWUgYXMgUyk7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxUPiB2YWx1ZXMpIHsKICAgIF9zb3VyY2UuYWRkQWxsKG5ldyBDYXN0SXRlcmFibGU8VCwgUz4odmFsdWVzKSk7CiAgfQoKICB2b2lkIHNvcnQoW2ludCBjb21wYXJlKFQgdjEsIFQgdjIpXSkgewogICAgX3NvdXJjZS5zb3J0KAogICAgICAgIGNvbXBhcmUgPT0gbnVsbCA/IG51bGwgOiAoUyB2MSwgUyB2MikgPT4gY29tcGFyZSh2MSBhcyBULCB2MiBhcyBUKSk7CiAgfQoKICB2b2lkIHNodWZmbGUoW1JhbmRvbSByYW5kb21dKSB7CiAgICBfc291cmNlLnNodWZmbGUocmFuZG9tKTsKICB9CgogIHZvaWQgaW5zZXJ0KGludCBpbmRleCwgVCBlbGVtZW50KSB7CiAgICBfc291cmNlLmluc2VydChpbmRleCwgZWxlbWVudCBhcyBTKTsKICB9CgogIHZvaWQgaW5zZXJ0QWxsKGludCBpbmRleCwgSXRlcmFibGU8VD4gZWxlbWVudHMpIHsKICAgIF9zb3VyY2UuaW5zZXJ0QWxsKGluZGV4LCBuZXcgQ2FzdEl0ZXJhYmxlPFQsIFM+KGVsZW1lbnRzKSk7CiAgfQoKICB2b2lkIHNldEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPFQ+IGVsZW1lbnRzKSB7CiAgICBfc291cmNlLnNldEFsbChpbmRleCwgbmV3IENhc3RJdGVyYWJsZTxULCBTPihlbGVtZW50cykpOwogIH0KCiAgYm9vbCByZW1vdmUoT2JqZWN0IHZhbHVlKSA9PiBfc291cmNlLnJlbW92ZSh2YWx1ZSk7CgogIFQgcmVtb3ZlQXQoaW50IGluZGV4KSA9PiBfc291cmNlLnJlbW92ZUF0KGluZGV4KSBhcyBUOwoKICBUIHJlbW92ZUxhc3QoKSA9PiBfc291cmNlLnJlbW92ZUxhc3QoKSBhcyBUOwoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChUIGVsZW1lbnQpKSB7CiAgICBfc291cmNlLnJlbW92ZVdoZXJlKChTIGVsZW1lbnQpID0+IHRlc3QoZWxlbWVudCBhcyBUKSk7CiAgfQoKICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChUIGVsZW1lbnQpKSB7CiAgICBfc291cmNlLnJldGFpbldoZXJlKChTIGVsZW1lbnQpID0+IHRlc3QoZWxlbWVudCBhcyBUKSk7CiAgfQoKICBJdGVyYWJsZTxUPiBnZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpID0+CiAgICAgIG5ldyBDYXN0SXRlcmFibGU8UywgVD4oX3NvdXJjZS5nZXRSYW5nZShzdGFydCwgZW5kKSk7CgogIHZvaWQgc2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxUPiBpdGVyYWJsZSwgW2ludCBza2lwQ291bnQgPSAwXSkgewogICAgX3NvdXJjZS5zZXRSYW5nZShzdGFydCwgZW5kLCBuZXcgQ2FzdEl0ZXJhYmxlPFQsIFM+KGl0ZXJhYmxlKSwgc2tpcENvdW50KTsKICB9CgogIHZvaWQgcmVtb3ZlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBfc291cmNlLnJlbW92ZVJhbmdlKHN0YXJ0LCBlbmQpOwogIH0KCiAgdm9pZCBmaWxsUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBbVCBmaWxsVmFsdWVdKSB7CiAgICBfc291cmNlLmZpbGxSYW5nZShzdGFydCwgZW5kLCBmaWxsVmFsdWUgYXMgUyk7CiAgfQoKICB2b2lkIHJlcGxhY2VSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPFQ+IHJlcGxhY2VtZW50KSB7CiAgICBfc291cmNlLnJlcGxhY2VSYW5nZShzdGFydCwgZW5kLCBuZXcgQ2FzdEl0ZXJhYmxlPFQsIFM+KHJlcGxhY2VtZW50KSk7CiAgfQp9CgpjbGFzcyBDYXN0TGlzdDxTLCBUPiBleHRlbmRzIF9DYXN0TGlzdEJhc2U8UywgVD4gewogIGZpbmFsIExpc3Q8Uz4gX3NvdXJjZTsKICBDYXN0TGlzdCh0aGlzLl9zb3VyY2UpOwoKICBMaXN0PFI+IGNhc3Q8Uj4oKSA9PiBuZXcgQ2FzdExpc3Q8UywgUj4oX3NvdXJjZSk7Cn0KCmNsYXNzIENhc3RTZXQ8UywgVD4gZXh0ZW5kcyBfQ2FzdEl0ZXJhYmxlQmFzZTxTLCBUPiBpbXBsZW1lbnRzIFNldDxUPiB7CiAgZmluYWwgU2V0PFM+IF9zb3VyY2U7CgogIC8vLyBDcmVhdGVzIGEgbmV3IGVtcHR5IHNldCBvZiB0aGUgc2FtZSAqa2luZCogYXMgW19zb3VyY2VdLAogIC8vLyBidXQgd2l0aCBgPFI+YCBhcyB0eXBlIGFyZ3VtZW50LgogIC8vLyBVc2VkIGJ5IFt0b1NldF0gYW5kIFt1bmlvbl0uCiAgZmluYWwgU2V0PFI+IEZ1bmN0aW9uPFI+KCkgX2VtcHR5U2V0OwoKICBDYXN0U2V0KHRoaXMuX3NvdXJjZSwgdGhpcy5fZW1wdHlTZXQpOwoKICBzdGF0aWMgU2V0PFI+IF9kZWZhdWx0RW1wdHlTZXQ8Uj4oKSA9PiBuZXcgU2V0PFI+KCk7CgogIFNldDxSPiBjYXN0PFI+KCkgPT4gbmV3IENhc3RTZXQ8UywgUj4oX3NvdXJjZSwgX2VtcHR5U2V0KTsKICBib29sIGFkZChUIHZhbHVlKSA9PiBfc291cmNlLmFkZCh2YWx1ZSBhcyBTKTsKCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8VD4gZWxlbWVudHMpIHsKICAgIF9zb3VyY2UuYWRkQWxsKG5ldyBDYXN0SXRlcmFibGU8VCwgUz4oZWxlbWVudHMpKTsKICB9CgogIGJvb2wgcmVtb3ZlKE9iamVjdCBvYmplY3QpID0+IF9zb3VyY2UucmVtb3ZlKG9iamVjdCk7CgogIHZvaWQgcmVtb3ZlQWxsKEl0ZXJhYmxlPE9iamVjdD4gb2JqZWN0cykgewogICAgX3NvdXJjZS5yZW1vdmVBbGwob2JqZWN0cyk7CiAgfQoKICB2b2lkIHJldGFpbkFsbChJdGVyYWJsZTxPYmplY3Q+IG9iamVjdHMpIHsKICAgIF9zb3VyY2UucmV0YWluQWxsKG9iamVjdHMpOwogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoVCBlbGVtZW50KSkgewogICAgX3NvdXJjZS5yZW1vdmVXaGVyZSgoUyBlbGVtZW50KSA9PiB0ZXN0KGVsZW1lbnQgYXMgVCkpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoVCBlbGVtZW50KSkgewogICAgX3NvdXJjZS5yZXRhaW5XaGVyZSgoUyBlbGVtZW50KSA9PiB0ZXN0KGVsZW1lbnQgYXMgVCkpOwogIH0KCiAgYm9vbCBjb250YWluc0FsbChJdGVyYWJsZTxPYmplY3Q+IG9iamVjdHMpID0+IF9zb3VyY2UuY29udGFpbnNBbGwob2JqZWN0cyk7CgogIFNldDxUPiBpbnRlcnNlY3Rpb24oU2V0PE9iamVjdD4gb3RoZXIpIHsKICAgIGlmIChfZW1wdHlTZXQgIT0gbnVsbCkgcmV0dXJuIF9jb25kaXRpb25hbEFkZChvdGhlciwgdHJ1ZSk7CiAgICByZXR1cm4gbmV3IENhc3RTZXQ8UywgVD4oX3NvdXJjZS5pbnRlcnNlY3Rpb24ob3RoZXIpLCBudWxsKTsKICB9CgogIFNldDxUPiBkaWZmZXJlbmNlKFNldDxPYmplY3Q+IG90aGVyKSB7CiAgICBpZiAoX2VtcHR5U2V0ICE9IG51bGwpIHJldHVybiBfY29uZGl0aW9uYWxBZGQob3RoZXIsIGZhbHNlKTsKICAgIHJldHVybiBuZXcgQ2FzdFNldDxTLCBUPihfc291cmNlLmRpZmZlcmVuY2Uob3RoZXIpLCBudWxsKTsKICB9CgogIFNldDxUPiBfY29uZGl0aW9uYWxBZGQoU2V0PE9iamVjdD4gb3RoZXIsIGJvb2wgb3RoZXJDb250YWlucykgewogICAgU2V0PFQ+IHJlc3VsdCA9IChfZW1wdHlTZXQgPT0gbnVsbCkgPyBuZXcgU2V0PFQ+KCkgOiBfZW1wdHlTZXQ8VD4oKTsKICAgIGZvciAodmFyIGVsZW1lbnQgaW4gX3NvdXJjZSkgewogICAgICBUIGNhc3RFbGVtZW50ID0gZWxlbWVudCBhcyBUOwogICAgICBpZiAob3RoZXJDb250YWlucyA9PSBvdGhlci5jb250YWlucyhjYXN0RWxlbWVudCkpIHJlc3VsdC5hZGQoY2FzdEVsZW1lbnQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFNldDxUPiB1bmlvbihTZXQ8VD4gb3RoZXIpID0+IF9jbG9uZSgpLi5hZGRBbGwob3RoZXIpOwoKICB2b2lkIGNsZWFyKCkgewogICAgX3NvdXJjZS5jbGVhcigpOwogIH0KCiAgU2V0PFQ+IF9jbG9uZSgpIHsKICAgIFNldDxUPiByZXN1bHQgPSAoX2VtcHR5U2V0ID09IG51bGwpID8gbmV3IFNldDxUPigpIDogX2VtcHR5U2V0PFQ+KCk7CiAgICByZXN1bHQuYWRkQWxsKHRoaXMpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFNldDxUPiB0b1NldCgpID0+IF9jbG9uZSgpOwoKICBUIGxvb2t1cChPYmplY3Qga2V5KSA9PiBfc291cmNlLmxvb2t1cChrZXkpIGFzIFQ7Cn0KCmNsYXNzIENhc3RNYXA8U0ssIFNWLCBLLCBWPiBleHRlbmRzIE1hcEJhc2U8SywgVj4gewogIGZpbmFsIE1hcDxTSywgU1Y+IF9zb3VyY2U7CgogIENhc3RNYXAodGhpcy5fc291cmNlKTsKCiAgTWFwPFJLLCBSVj4gY2FzdDxSSywgUlY+KCkgPT4gbmV3IENhc3RNYXA8U0ssIFNWLCBSSywgUlY+KF9zb3VyY2UpOwoKICBib29sIGNvbnRhaW5zVmFsdWUoT2JqZWN0IHZhbHVlKSA9PiBfc291cmNlLmNvbnRhaW5zVmFsdWUodmFsdWUpOwoKICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBrZXkpID0+IF9zb3VyY2UuY29udGFpbnNLZXkoa2V5KTsKCiAgViBvcGVyYXRvciBbXShPYmplY3Qga2V5KSA9PiBfc291cmNlW2tleV0gYXMgVjsKCiAgdm9pZCBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpIHsKICAgIF9zb3VyY2Vba2V5IGFzIFNLXSA9IHZhbHVlIGFzIFNWOwogIH0KCiAgViBwdXRJZkFic2VudChLIGtleSwgViBpZkFic2VudCgpKSA9PiBfc291cmNlLnB1dElmQWJzZW50KAogICAgICBrZXkgYXMgU0ssIChpZkFic2VudCA9PSBudWxsKSA/IG51bGwgOiAoKSA9PiBpZkFic2VudCgpIGFzIFNWKSBhcyBWOwoKICB2b2lkIGFkZEFsbChNYXA8SywgVj4gb3RoZXIpIHsKICAgIF9zb3VyY2UuYWRkQWxsKG5ldyBDYXN0TWFwPEssIFYsIFNLLCBTVj4ob3RoZXIpKTsKICB9CgogIFYgcmVtb3ZlKE9iamVjdCBrZXkpID0+IF9zb3VyY2UucmVtb3ZlKGtleSkgYXMgVjsKCiAgdm9pZCBjbGVhcigpIHsKICAgIF9zb3VyY2UuY2xlYXIoKTsKICB9CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoSyBrZXksIFYgdmFsdWUpKSB7CiAgICBfc291cmNlLmZvckVhY2goKFNLIGtleSwgU1YgdmFsdWUpIHsKICAgICAgZihrZXkgYXMgSywgdmFsdWUgYXMgVik7CiAgICB9KTsKICB9CgogIEl0ZXJhYmxlPEs+IGdldCBrZXlzID0+IG5ldyBDYXN0SXRlcmFibGU8U0ssIEs+KF9zb3VyY2Uua2V5cyk7CgogIEl0ZXJhYmxlPFY+IGdldCB2YWx1ZXMgPT4gbmV3IENhc3RJdGVyYWJsZTxTViwgVj4oX3NvdXJjZS52YWx1ZXMpOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfc291cmNlLmxlbmd0aDsKCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfc291cmNlLmlzRW1wdHk7CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX3NvdXJjZS5pc05vdEVtcHR5OwoKICBWIHVwZGF0ZShLIGtleSwgViB1cGRhdGUoViB2YWx1ZSksIHtWIGlmQWJzZW50KCl9KSB7CiAgICByZXR1cm4gX3NvdXJjZS51cGRhdGUoa2V5IGFzIFNLLCAoU1YgdmFsdWUpID0+IHVwZGF0ZSh2YWx1ZSBhcyBWKSBhcyBTViwKICAgICAgICBpZkFic2VudDogKGlmQWJzZW50ID09IG51bGwpID8gbnVsbCA6ICgpID0+IGlmQWJzZW50KCkgYXMgU1YpIGFzIFY7CiAgfQoKICB2b2lkIHVwZGF0ZUFsbChWIHVwZGF0ZShLIGtleSwgViB2YWx1ZSkpIHsKICAgIF9zb3VyY2UudXBkYXRlQWxsKChTSyBrZXksIFNWIHZhbHVlKSA9PiB1cGRhdGUoa2V5IGFzIEssIHZhbHVlIGFzIFYpIGFzIFNWKTsKICB9CgogIEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBnZXQgZW50cmllcyB7CiAgICByZXR1cm4gX3NvdXJjZS5lbnRyaWVzLm1hcDxNYXBFbnRyeTxLLCBWPj4oCiAgICAgICAgKE1hcEVudHJ5PFNLLCBTVj4gZSkgPT4gbmV3IE1hcEVudHJ5PEssIFY+KGUua2V5IGFzIEssIGUudmFsdWUgYXMgVikpOwogIH0KCiAgdm9pZCBhZGRFbnRyaWVzKEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBlbnRyaWVzKSB7CiAgICBmb3IgKHZhciBlbnRyeSBpbiBlbnRyaWVzKSB7CiAgICAgIF9zb3VyY2VbZW50cnkua2V5IGFzIFNLXSA9IGVudHJ5LnZhbHVlIGFzIFNWOwogICAgfQogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoSyBrZXksIFYgdmFsdWUpKSB7CiAgICBfc291cmNlLnJlbW92ZVdoZXJlKChTSyBrZXksIFNWIHZhbHVlKSA9PiB0ZXN0KGtleSBhcyBLLCB2YWx1ZSBhcyBWKSk7CiAgfQp9CgpjbGFzcyBDYXN0UXVldWU8UywgVD4gZXh0ZW5kcyBfQ2FzdEl0ZXJhYmxlQmFzZTxTLCBUPiBpbXBsZW1lbnRzIFF1ZXVlPFQ+IHsKICBmaW5hbCBRdWV1ZTxTPiBfc291cmNlOwogIENhc3RRdWV1ZSh0aGlzLl9zb3VyY2UpOwogIFF1ZXVlPFI+IGNhc3Q8Uj4oKSA9PiBuZXcgQ2FzdFF1ZXVlPFMsIFI+KF9zb3VyY2UpOwoKICBUIHJlbW92ZUZpcnN0KCkgPT4gX3NvdXJjZS5yZW1vdmVGaXJzdCgpIGFzIFQ7CiAgVCByZW1vdmVMYXN0KCkgPT4gX3NvdXJjZS5yZW1vdmVMYXN0KCkgYXMgVDsKCiAgdm9pZCBhZGQoVCB2YWx1ZSkgewogICAgX3NvdXJjZS5hZGQodmFsdWUgYXMgUyk7CiAgfQoKICB2b2lkIGFkZEZpcnN0KFQgdmFsdWUpIHsKICAgIF9zb3VyY2UuYWRkRmlyc3QodmFsdWUgYXMgUyk7CiAgfQoKICB2b2lkIGFkZExhc3QoVCB2YWx1ZSkgewogICAgX3NvdXJjZS5hZGRMYXN0KHZhbHVlIGFzIFMpOwogIH0KCiAgYm9vbCByZW1vdmUoT2JqZWN0IG90aGVyKSA9PiBfc291cmNlLnJlbW92ZShvdGhlcik7CiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8VD4gZWxlbWVudHMpIHsKICAgIF9zb3VyY2UuYWRkQWxsKG5ldyBDYXN0SXRlcmFibGU8VCwgUz4oZWxlbWVudHMpKTsKICB9CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KFQgZWxlbWVudCkpIHsKICAgIF9zb3VyY2UucmVtb3ZlV2hlcmUoKFMgZWxlbWVudCkgPT4gdGVzdChlbGVtZW50IGFzIFQpKTsKICB9CgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KFQgZWxlbWVudCkpIHsKICAgIF9zb3VyY2UucmV0YWluV2hlcmUoKFMgZWxlbWVudCkgPT4gdGVzdChlbGVtZW50IGFzIFQpKTsKICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfc291cmNlLmNsZWFyKCk7CiAgfQp9CoFtAE5OPAEPARgBLAE9GwFIAUFNOlAFCw0ODw4MDQsMDg0RERITASQnLQFOTgE7JSMnAToBPSo1O0cBKwIBMhceKSkCATsdASABLTA9Bi0EATwCAUQsQhkCAUMYFwE2EA8PEw0PDQEzASohBAEgHQQBFh0EASQ0BAEpEk0EASIdBAEmKQQBNEAEATE9BAE2ATkBLwErPAQBKzwEAS48AVFPBAEpJQQBNjMEAUNLBAIBMxkaATQCAUgYAT8nIygBKQE3AT0wASY2BAE4AS0gBAEtIAQBKzwEASs8BAFOAStAQQQBKUE/BAFCSSMkUQYTBAE5AREVBAEUSRkTBAEeATQCATQdARkBRgFEATwBMgEmJgQBPUsBITYEATQBERUEASkpHwgEAUEBRQEkAScBLQE3TUwEAS1RBAEpME8EATYhNAYEATBLBAIBTBobNgExLwEWHQQBGyIEARohBAE2JjYEASs8BAErPAQBERUEAgEYZGFydDpfaW50ZXJuYWwvY2FzdC5kYXJ0QW9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2ludGVybmFsL2Vycm9ycy5kYXJ0gk4vLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5faW50ZXJuYWw7CgpjbGFzcyBMYXRlSW5pdGlhbGl6YXRpb25FcnJvckltcGwgZXh0ZW5kcyBFcnJvcgogICAgaW1wbGVtZW50cyBMYXRlSW5pdGlhbGl6YXRpb25FcnJvciB7CiAgZmluYWwgU3RyaW5nIF9tZXNzYWdlOwoKICBMYXRlSW5pdGlhbGl6YXRpb25FcnJvckltcGwoW3RoaXMuX21lc3NhZ2VdKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgdmFyIG1lc3NhZ2UgPSBfbWVzc2FnZTsKICAgIHJldHVybiAobWVzc2FnZSAhPSBudWxsKQogICAgICAgID8gIkxhdGVJbml0aWFsaXphdGlvbkVycm9yOiAkbWVzc2FnZSIKICAgICAgICA6ICJMYXRlSW5pdGlhbGl6YXRpb25FcnJvciI7CiAgfQp9ChcATk48AQ8BGAEwKRkBMAEWHB0uJQQCARpkYXJ0Ol9pbnRlcm5hbC9lcnJvcnMuZGFydD9vcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9pbnRlcm5hbC9saXN0LmRhcnSu4S8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0Ll9pbnRlcm5hbDsKCi8qKgogKiBNaXhpbiB0aGF0IHRocm93cyBvbiB0aGUgbGVuZ3RoIGNoYW5naW5nIG9wZXJhdGlvbnMgb2YgW0xpc3RdLgogKgogKiBJbnRlbmRlZCB0byBtaXgtaW4gb24gdG9wIG9mIFtMaXN0TWl4aW5dIGZvciBmaXhlZC1sZW5ndGggbGlzdHMuCiAqLwphYnN0cmFjdCBjbGFzcyBGaXhlZExlbmd0aExpc3RNaXhpbjxFPiB7CiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYSBmaXhlZCBsZW5ndGggbGlzdC4gKi8KICBzZXQgbGVuZ3RoKGludCBuZXdMZW5ndGgpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJDYW5ub3QgY2hhbmdlIHRoZSBsZW5ndGggb2YgYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYSBmaXhlZCBsZW5ndGggbGlzdC4gKi8KICB2b2lkIGFkZChFIHZhbHVlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGFkZCB0byBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhIGZpeGVkIGxlbmd0aCBsaXN0LiAqLwogIHZvaWQgaW5zZXJ0KGludCBpbmRleCwgRSB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYSBmaXhlZCBsZW5ndGggbGlzdC4gKi8KICB2b2lkIGluc2VydEFsbChpbnQgYXQsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGFkZCB0byBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhIGZpeGVkIGxlbmd0aCBsaXN0LiAqLwogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGFkZCB0byBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhIGZpeGVkIGxlbmd0aCBsaXN0LiAqLwogIGJvb2wgcmVtb3ZlKE9iamVjdCBlbGVtZW50KSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGEgZml4ZWQgbGVuZ3RoIGxpc3QuICovCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhIGZpeGVkIGxlbmd0aCBsaXN0LiAqLwogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYSBmaXhlZCBsZW5ndGggbGlzdC4gKi8KICB2b2lkIGNsZWFyKCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBjbGVhciBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhIGZpeGVkIGxlbmd0aCBsaXN0LiAqLwogIEUgcmVtb3ZlQXQoaW50IGluZGV4KSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGEgZml4ZWQgbGVuZ3RoIGxpc3QuICovCiAgRSByZW1vdmVMYXN0KCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhIGZpeGVkIGxlbmd0aCBsaXN0LiAqLwogIHZvaWQgcmVtb3ZlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGEgZml4ZWQgbGVuZ3RoIGxpc3QuICovCiAgdm9pZCByZXBsYWNlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQp9CgovKioKICogTWl4aW4gZm9yIGFuIHVubW9kaWZpYWJsZSBbTGlzdF0gY2xhc3MuCiAqCiAqIFRoaXMgb3ZlcnJpZGVzIGFsbCBtdXRhdGluZyBtZXRob2RzIHdpdGggbWV0aG9kcyB0aGF0IHRocm93LgogKiBUaGlzIG1peGluIGlzIGludGVuZGVkIHRvIGJlIG1peGVkIGluIG9uIHRvcCBvZiBbTGlzdE1peGluXSBvbgogKiB1bm1vZGlmaWFibGUgbGlzdHMuCiAqLwphYnN0cmFjdCBjbGFzcyBVbm1vZGlmaWFibGVMaXN0TWl4aW48RT4gaW1wbGVtZW50cyBMaXN0PEU+IHsKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIEUgdmFsdWUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICBzZXQgbGVuZ3RoKGludCBuZXdMZW5ndGgpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJDYW5ub3QgY2hhbmdlIHRoZSBsZW5ndGggb2YgYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIHNldCBmaXJzdChFIGVsZW1lbnQpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICBzZXQgbGFzdChFIGVsZW1lbnQpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICB2b2lkIHNldEFsbChpbnQgYXQsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgdm9pZCBhZGQoRSB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIHZvaWQgaW5zZXJ0KGludCBpbmRleCwgRSBlbGVtZW50KSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGFkZCB0byBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgdm9pZCBpbnNlcnRBbGwoaW50IGF0LCBJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGFkZCB0byBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgYm9vbCByZW1vdmUoT2JqZWN0IGVsZW1lbnQpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIHZvaWQgc29ydChbQ29tcGFyYXRvcjxFPiBjb21wYXJlXSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIHZvaWQgc2h1ZmZsZShbUmFuZG9tIHJhbmRvbV0pIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICB2b2lkIGNsZWFyKCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBjbGVhciBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgRSByZW1vdmVBdChpbnQgaW5kZXgpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIEUgcmVtb3ZlTGFzdCgpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIHZvaWQgc2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxFPiBpdGVyYWJsZSwgW2ludCBza2lwQ291bnQgPSAwXSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIHZvaWQgcmVtb3ZlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICB2b2lkIHJlcGxhY2VSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICB2b2lkIGZpbGxSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIFtFIGZpbGxWYWx1ZV0pIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQp9CgovKioKICogQWJzdHJhY3QgaW1wbGVtZW50YXRpb24gb2YgYSBmaXhlZC1sZW5ndGggbGlzdC4KICoKICogQWxsIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQgaW4gdGVybXMgb2YgYGxlbmd0aGAsIGBvcGVyYXRvcltdYCBhbmQKICogYG9wZXJhdG9yW109YCwgd2hpY2ggbmVlZCB0byBiZSBpbXBsZW1lbnRlZC4KICovCmFic3RyYWN0IGNsYXNzIEZpeGVkTGVuZ3RoTGlzdEJhc2U8RT4gPSBMaXN0QmFzZTxFPgogICAgd2l0aCBGaXhlZExlbmd0aExpc3RNaXhpbjxFPjsKCi8qKgogKiBBYnN0cmFjdCBpbXBsZW1lbnRhdGlvbiBvZiBhbiB1bm1vZGlmaWFibGUgbGlzdC4KICoKICogQWxsIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQgaW4gdGVybXMgb2YgYGxlbmd0aGAgYW5kIGBvcGVyYXRvcltdYCwKICogd2hpY2ggbmVlZCB0byBiZSBpbXBsZW1lbnRlZC4KICovCmFic3RyYWN0IGNsYXNzIFVubW9kaWZpYWJsZUxpc3RCYXNlPEU+ID0gTGlzdEJhc2U8RT4KICAgIHdpdGggVW5tb2RpZmlhYmxlTGlzdE1peGluPEU+OwoKY2xhc3MgX0xpc3RJbmRpY2VzSXRlcmFibGUgZXh0ZW5kcyBMaXN0SXRlcmFibGU8aW50PiB7CiAgTGlzdCBfYmFja2VkTGlzdDsKCiAgX0xpc3RJbmRpY2VzSXRlcmFibGUodGhpcy5fYmFja2VkTGlzdCk7CgogIGludCBnZXQgbGVuZ3RoID0+IF9iYWNrZWRMaXN0Lmxlbmd0aDsKICBpbnQgZWxlbWVudEF0KGludCBpbmRleCkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkSW5kZXgoaW5kZXgsIHRoaXMpOwogICAgcmV0dXJuIGluZGV4OwogIH0KfQoKY2xhc3MgTGlzdE1hcFZpZXc8RT4gZXh0ZW5kcyBVbm1vZGlmaWFibGVNYXBCYXNlPGludCwgRT4gewogIExpc3Q8RT4gX3ZhbHVlczsKCiAgTGlzdE1hcFZpZXcodGhpcy5fdmFsdWVzKTsKCiAgRSBvcGVyYXRvciBbXShPYmplY3Qga2V5KSA9PiBjb250YWluc0tleShrZXkpID8gX3ZhbHVlc1trZXldIDogbnVsbDsKICBpbnQgZ2V0IGxlbmd0aCA9PiBfdmFsdWVzLmxlbmd0aDsKCiAgSXRlcmFibGU8RT4gZ2V0IHZhbHVlcyA9PiBuZXcgU3ViTGlzdEl0ZXJhYmxlPEU+KF92YWx1ZXMsIDAsIG51bGwpOwogIEl0ZXJhYmxlPGludD4gZ2V0IGtleXMgPT4gbmV3IF9MaXN0SW5kaWNlc0l0ZXJhYmxlKF92YWx1ZXMpOwoKICBib29sIGdldCBpc0VtcHR5ID0+IF92YWx1ZXMuaXNFbXB0eTsKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF92YWx1ZXMuaXNOb3RFbXB0eTsKICBib29sIGNvbnRhaW5zVmFsdWUoT2JqZWN0IHZhbHVlKSA9PiBfdmFsdWVzLmNvbnRhaW5zKHZhbHVlKTsKICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBrZXkpID0+IGtleSBpcyBpbnQgJiYga2V5ID49IDAgJiYga2V5IDwgbGVuZ3RoOwoKICB2b2lkIGZvckVhY2godm9pZCBmKGludCBrZXksIEUgdmFsdWUpKSB7CiAgICBpbnQgbGVuZ3RoID0gX3ZhbHVlcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGYoaSwgX3ZhbHVlc1tpXSk7CiAgICAgIGlmIChsZW5ndGggIT0gX3ZhbHVlcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKF92YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQp9CgpjbGFzcyBSZXZlcnNlZExpc3RJdGVyYWJsZTxFPiBleHRlbmRzIExpc3RJdGVyYWJsZTxFPiB7CiAgSXRlcmFibGU8RT4gX3NvdXJjZTsKICBSZXZlcnNlZExpc3RJdGVyYWJsZSh0aGlzLl9zb3VyY2UpOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfc291cmNlLmxlbmd0aDsKCiAgRSBlbGVtZW50QXQoaW50IGluZGV4KSA9PiBfc291cmNlLmVsZW1lbnRBdChfc291cmNlLmxlbmd0aCAtIDEgLSBpbmRleCk7Cn0KCi8qKgogKiBDcmVhdGVzIGVycm9ycyB0aHJvd24gYnkgdW5tb2RpZmlhYmxlIGxpc3RzIHdoZW4gdGhleSBhcmUgYXR0ZW1wdGVkIG1vZGlmaWVkLgogKgogKiBUaGlzIGNsYXNzIGNyZWF0ZXMgW1Vuc3VwcG9ydGVkRXJyb3JdcyB3aXRoIHNwZWNpYWxpemVkIG1lc3NhZ2VzLgogKi8KYWJzdHJhY3QgY2xhc3MgVW5tb2RpZmlhYmxlTGlzdEVycm9yIHsKICAvKiogRXJyb3IgdGhyb3duIHdoZW4gdHJ5aW5nIHRvIGFkZCBlbGVtZW50cyB0byBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICBzdGF0aWMgVW5zdXBwb3J0ZWRFcnJvciBhZGQoKSA9PgogICAgICBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGFkZCB0byB1bm1vZGlmaWFibGUgTGlzdCIpOwoKICAvKiogRXJyb3IgdGhyb3duIHdoZW4gdHJ5aW5nIHRvIGFkZCBlbGVtZW50cyB0byBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICBzdGF0aWMgVW5zdXBwb3J0ZWRFcnJvciBjaGFuZ2UoKSA9PgogICAgICBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGNoYW5nZSB0aGUgY29udGVudCBvZiBhbiB1bm1vZGlmaWFibGUgTGlzdCIpOwoKICAvKiogRXJyb3IgdGhyb3duIHdoZW4gdHJ5aW5nIHRvIGNoYW5nZSB0aGUgbGVuZ3RoIG9mIGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIHN0YXRpYyBVbnN1cHBvcnRlZEVycm9yIGxlbmd0aCgpID0+CiAgICAgIG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgY2hhbmdlIGxlbmd0aCBvZiB1bm1vZGlmaWFibGUgTGlzdCIpOwoKICAvKiogRXJyb3IgdGhyb3duIHdoZW4gdHJ5aW5nIHRvIHJlbW92ZSBlbGVtZW50cyBmcm9tIGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIHN0YXRpYyBVbnN1cHBvcnRlZEVycm9yIHJlbW92ZSgpID0+CiAgICAgIG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gdW5tb2RpZmlhYmxlIExpc3QiKTsKfQoKLyoqCiAqIENyZWF0ZXMgZXJyb3JzIHRocm93biBieSBub24tZ3Jvd2FibGUgbGlzdHMgd2hlbiB0aGV5IGFyZSBhdHRlbXB0ZWQgbW9kaWZpZWQuCiAqCiAqIFRoaXMgY2xhc3MgY3JlYXRlcyBbVW5zdXBwb3J0ZWRFcnJvcl1zIHdpdGggc3BlY2lhbGl6ZWQgbWVzc2FnZXMuCiAqLwphYnN0cmFjdCBjbGFzcyBOb25Hcm93YWJsZUxpc3RFcnJvciB7CiAgLyoqIEVycm9yIHRocm93biB3aGVuIHRyeWluZyB0byBhZGQgZWxlbWVudHMgdG8gYW4gbm9uLWdyb3dhYmxlIGxpc3QuICovCiAgc3RhdGljIFVuc3VwcG9ydGVkRXJyb3IgYWRkKCkgPT4KICAgICAgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gbm9uLWdyb3dhYmxlIExpc3QiKTsKCiAgLyoqIEVycm9yIHRocm93biB3aGVuIHRyeWluZyB0byBjaGFuZ2UgdGhlIGxlbmd0aCBvZiBhbiBub24tZ3Jvd2FibGUgbGlzdC4gKi8KICBzdGF0aWMgVW5zdXBwb3J0ZWRFcnJvciBsZW5ndGgoKSA9PgogICAgICBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGNoYW5nZSBsZW5ndGggb2Ygbm9uLWdyb3dhYmxlIExpc3QiKTsKCiAgLyoqIEVycm9yIHRocm93biB3aGVuIHRyeWluZyB0byByZW1vdmUgZWxlbWVudHMgZnJvbSBhbiBub24tZ3Jvd2FibGUgbGlzdC4gKi8KICBzdGF0aWMgVW5zdXBwb3J0ZWRFcnJvciByZW1vdmUoKSA9PgogICAgICBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIG5vbi1ncm93YWJsZSBMaXN0Iik7Cn0KCi8qKgogKiBDb252ZXJ0cyBhIGdyb3dhYmxlIGxpc3QgdG8gYSBmaXhlZCBsZW5ndGggbGlzdCB3aXRoIHRoZSBzYW1lIGVsZW1lbnRzLgogKgogKiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCiAqIE9ubHkgd29ya3Mgb24gZ3Jvd2FibGUgbGlzdHMgYXMgY3JlYXRlZCBieSBgW11gIG9yIGBuZXcgTGlzdCgpYC4KICogTWF5IHRocm93IG9uIGFueSBvdGhlciBsaXN0LgogKgogKiBUaGUgb3BlcmF0aW9uIGlzIGVmZmljaWVudC4gSXQgZG9lc24ndCBjb3B5IHRoZSBlbGVtZW50cywgYnV0IGNvbnZlcnRzCiAqIHRoZSBleGlzdGluZyBsaXN0IGRpcmVjdGx5IHRvIGEgZml4ZWQgbGVuZ3RoIGxpc3QuCiAqIFRoYXQgbWVhbnMgdGhhdCBpdCBpcyBhIGRlc3RydWN0aXZlIGNvbnZlcnNpb24uCiAqIFRoZSBvcmlnaW5hbCBsaXN0IHNob3VsZCBub3QgYmUgdXNlZCBhZnRlcndhcmRzLgogKgogKiBUaGUgcmV0dXJuZWQgbGlzdCBtYXkgYmUgdGhlIHNhbWUgbGlzdCBhcyB0aGUgb3JpZ2luYWwsCiAqIG9yIGl0IG1heSBiZSBhIGRpZmZlcmVudCBsaXN0IChhY2NvcmRpbmcgdG8gW2lkZW50aWNhbF0pLgogKiBUaGUgb3JpZ2luYWwgbGlzdCBtYXkgaGF2ZSBjaGFuZ2VkIHR5cGUgdG8gYmUgYSBmaXhlZCBsaXN0LAogKiBvciBiZWNvbWUgZW1wdHkgb3IgYmVlbiBvdGhlcndpc2UgbW9kaWZpZWQuCiAqIEl0IHdpbGwgc3RpbGwgYmUgYSB2YWxpZCBvYmplY3QsIHNvIHJlZmVyZW5jZXMgdG8gaXQgd2lsbCBub3QsIGUuZy4sIGNyYXNoCiAqIHRoZSBydW50aW1lIGlmIGFjY2Vzc2VkLCBidXQgbm8gcHJvbWlzZXMgYXJlIG1hZGUgd3J0LiBpdHMgY29udGVudHMuCiAqCiAqIFRoaXMgdW5zcGVjaWZpZWQgYmVoYXZpb3IgaXMgdGhlIHJlYXNvbiB0aGUgZnVuY3Rpb24gaXMgbm90IGV4cG9zZWQgdG8KICogdXNlcnMuIFdlIGFsbG93IHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIHRvIG1ha2UgdGhlIG1vc3QgZWZmaWNpZW50CiAqIGNvbnZlcnNpb24sIGF0IHRoZSBjb3N0IG9mIGxlYXZpbmcgdGhlIG9yaWdpbmFsIGxpc3QgaW4gYW4gdW5zcGVjaWZpZWQKICogc3RhdGUuCiAqLwpleHRlcm5hbCBMaXN0PFQ+IG1ha2VMaXN0Rml4ZWRMZW5ndGg8VD4oTGlzdDxUPiBncm93YWJsZUxpc3QpOwoKLyoqCiAqIENvbnZlcnRzIGEgZml4ZWQtbGVuZ3RoIGxpc3QgdG8gYW4gdW5tb2RpZmlhYmxlIGxpc3QuCiAqCiAqIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KICogT25seSB3b3JrcyBmb3IgY29yZSBmaXhlZC1sZW5ndGggbGlzdHMgYXMgY3JlYXRlZCBieSBgbmV3IExpc3QobGVuZ3RoKWAsCiAqIG9yIGFzIHJldHVybmVkIGJ5IFttYWtlTGlzdEZpeGVkTGVuZ3RoXS4KICoKICogVGhlIG9wZXJhdGlvbiBpcyBlZmZpY2llbnQuIEl0IGRvZXNuJ3QgY29weSB0aGUgZWxlbWVudHMsIGJ1dCBjb252ZXJ0cwogKiB0aGUgZXhpc3RpbmcgbGlzdCBkaXJlY3RseSB0byBhIGZpeGVkIGxlbmd0aCBsaXN0LgogKiBUaGF0IG1lYW5zIHRoYXQgaXQgaXMgYSBkZXN0cnVjdGl2ZSBjb252ZXJzaW9uLgogKiBUaGUgb3JpZ2luYWwgbGlzdCBzaG91bGQgbm90IGJlIHVzZWQgYWZ0ZXJ3YXJkcy4KICoKICogVGhlIHVubW9kaWZpYWJsZSBsaXN0IHR5cGUgaXMgc2ltaWxhciB0byB0aGUgb25lIHVzZWQgYnkgY29uc3QgbGlzdHMuCiAqLwpleHRlcm5hbCBMaXN0PFQ+IG1ha2VGaXhlZExpc3RVbm1vZGlmaWFibGU8VD4oTGlzdDxUPiBmaXhlZExlbmd0aExpc3QpOwqBWQBOTjwBDwEYAQRCA0QEKUEeIDwEAUEWRQQBQSRFBAFBMUUEAUEmRQQBQSBKBAFBK0oEAUErSgQBQRFEBAFBGkoEAUETSgQBQSlKBAFBQEoEAgEEKwNAQhcEPUIqRgQBQh4gPQQBGUYEARhGBAFCLkYEAUIWRgQBQiZGBAFCMUYEAUImRgQBQiBLBAFCK0sEAUIrSwQBQidGBAFCIkYEAUIRRQQBQhpLBAFCE0sEAUJRRgQBQilLBAFCQEsEAUI2RgQCAQQzA0UwBDQiAQQ0A0UhBDUjATcUASoBKB0tEgQCATsTAR0BRyQBRj8BJy0/SgErIScYJjgIBgQCATgXJgEkAUsCAQRRA0UEJ0sjPwFLJlEBUCZJAVAmRAIBBFEDRQQmSyM/AVAmSQFQJkQCAQRLAxpEIANKNjM0Azs9Py9OSANKTEoKBD8BBDkDGkwsA0o2MzQDSQRIARhkYXJ0Ol9pbnRlcm5hbC9saXN0LmRhcnQ/b3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvaW50ZXJuYWwvc29ydC5kYXJ0r9UvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5faW50ZXJuYWw7CgovKioKICogRHVhbC1QaXZvdCBRdWlja3NvcnQgYWxnb3JpdGhtLgogKgogKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIGR1YWwtcGl2b3QgcXVpY2tzb3J0IGFsZ29yaXRobSBhcyBwcmVzZW50ZWQgaW4KICogVmxhZGltaXIgWWFyb3NsYXZza2l5J3MgcGFwZXIuCiAqCiAqIFNvbWUgaW1wcm92ZW1lbnRzIGhhdmUgYmVlbiBjb3BpZWQgZnJvbSBBbmRyb2lkJ3MgaW1wbGVtZW50YXRpb24uCiAqLwpjbGFzcyBTb3J0IHsKICAvLyBXaGVuIGEgbGlzdCBoYXMgbGVzcyB0aGVuIFs6X0lOU0VSVElPTl9TT1JUX1RIUkVTSE9MRDpdIGVsZW1lbnRzIGl0IHdpbGwKICAvLyBiZSBzb3J0ZWQgYnkgYW4gaW5zZXJ0aW9uIHNvcnQuCiAgc3RhdGljIGNvbnN0IGludCBfSU5TRVJUSU9OX1NPUlRfVEhSRVNIT0xEID0gMzI7CgogIC8qKgogICAqIFNvcnRzIGFsbCBlbGVtZW50cyBvZiB0aGUgZ2l2ZW4gbGlzdCBbOmE6XSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuCiAgICogWzpjb21wYXJlOl0gZnVuY3Rpb24uCiAgICoKICAgKiBUaGUgWzpjb21wYXJlOl0gZnVuY3Rpb24gdGFrZXMgdHdvIGFyZ3VtZW50cyBbOng6XSBhbmQgWzp5Ol0gYW5kIHJldHVybnMKICAgKiAgLTEgaWYgWzp4IDwgeTpdLAogICAqICAgMCBpZiBbOnggPT0geTpdLCBhbmQKICAgKiAgIDEgaWYgWzp4ID4geTpdLgogICAqCiAgICogVGhlIGZ1bmN0aW9uJ3MgYmVoYXZpb3IgbXVzdCBiZSBjb25zaXN0ZW50LiBJdCBtdXN0IG5vdCByZXR1cm4gZGlmZmVyZW50CiAgICogcmVzdWx0cyBmb3IgdGhlIHNhbWUgdmFsdWVzLgogICAqLwogIHN0YXRpYyB2b2lkIHNvcnQ8RT4oTGlzdDxFPiBhLCBpbnQgY29tcGFyZShFIGEsIEUgYikpIHsKICAgIF9kb1NvcnQoYSwgMCwgYS5sZW5ndGggLSAxLCBjb21wYXJlKTsKICB9CgogIC8qKgogICAqIFNvcnRzIGFsbCBlbGVtZW50cyBpbiB0aGUgcmFuZ2UgWzpmcm9tOl0gKGluY2x1c2l2ZSkgdG8gWzp0bzpdIChleGNsdXNpdmUpCiAgICogb2YgdGhlIGdpdmVuIGxpc3QgWzphOl0uCiAgICoKICAgKiBJZiB0aGUgZ2l2ZW4gcmFuZ2UgaXMgaW52YWxpZCBhbiAiT3V0T2ZSYW5nZSIgZXJyb3IgaXMgcmFpc2VkLgogICAqIFRPRE8oZmxvaXRzY2gpOiBkbyB3ZSB3YW50IGFuIGVycm9yPwogICAqCiAgICogU2VlIFs6c29ydDpdIGZvciByZXF1aXJlbWVudHMgb2YgdGhlIFs6Y29tcGFyZTpdIGZ1bmN0aW9uLgogICAqLwogIHN0YXRpYyB2b2lkIHNvcnRSYW5nZTxFPihMaXN0PEU+IGEsIGludCBmcm9tLCBpbnQgdG8sIGludCBjb21wYXJlKEUgYSwgRSBiKSkgewogICAgaWYgKChmcm9tIDwgMCkgfHwgKHRvID4gYS5sZW5ndGgpIHx8ICh0byA8IGZyb20pKSB7CiAgICAgIHRocm93ICJPdXRPZlJhbmdlIjsKICAgIH0KICAgIF9kb1NvcnQoYSwgZnJvbSwgdG8gLSAxLCBjb21wYXJlKTsKICB9CgogIC8qKgogICAqIFNvcnRzIHRoZSBsaXN0IGluIHRoZSBpbnRlcnZhbCBbOmxlZnQ6XSB0byBbOnJpZ2h0Ol0gKGJvdGggaW5jbHVzaXZlKS4KICAgKi8KICBzdGF0aWMgdm9pZCBfZG9Tb3J0PEU+KAogICAgICBMaXN0PEU+IGEsIGludCBsZWZ0LCBpbnQgcmlnaHQsIGludCBjb21wYXJlKEUgYSwgRSBiKSkgewogICAgaWYgKChyaWdodCAtIGxlZnQpIDw9IF9JTlNFUlRJT05fU09SVF9USFJFU0hPTEQpIHsKICAgICAgX2luc2VydGlvblNvcnQoYSwgbGVmdCwgcmlnaHQsIGNvbXBhcmUpOwogICAgfSBlbHNlIHsKICAgICAgX2R1YWxQaXZvdFF1aWNrc29ydChhLCBsZWZ0LCByaWdodCwgY29tcGFyZSk7CiAgICB9CiAgfQoKICBzdGF0aWMgdm9pZCBfaW5zZXJ0aW9uU29ydDxFPigKICAgICAgTGlzdDxFPiBhLCBpbnQgbGVmdCwgaW50IHJpZ2h0LCBpbnQgY29tcGFyZShFIGEsIEUgYikpIHsKICAgIGZvciAoaW50IGkgPSBsZWZ0ICsgMTsgaSA8PSByaWdodDsgaSsrKSB7CiAgICAgIHZhciBlbCA9IGFbaV07CiAgICAgIGludCBqID0gaTsKICAgICAgd2hpbGUgKChqID4gbGVmdCkgJiYgKGNvbXBhcmUoYVtqIC0gMV0sIGVsKSA+IDApKSB7CiAgICAgICAgYVtqXSA9IGFbaiAtIDFdOwogICAgICAgIGotLTsKICAgICAgfQogICAgICBhW2pdID0gZWw7CiAgICB9CiAgfQoKICBzdGF0aWMgdm9pZCBfZHVhbFBpdm90UXVpY2tzb3J0PEU+KAogICAgICBMaXN0PEU+IGEsIGludCBsZWZ0LCBpbnQgcmlnaHQsIGludCBjb21wYXJlKEUgYSwgRSBiKSkgewogICAgYXNzZXJ0KHJpZ2h0IC0gbGVmdCA+IF9JTlNFUlRJT05fU09SVF9USFJFU0hPTEQpOwoKICAgIC8vIENvbXB1dGUgdGhlIHR3byBwaXZvdHMgYnkgbG9va2luZyBhdCA1IGVsZW1lbnRzLgogICAgaW50IHNpeHRoID0gKHJpZ2h0IC0gbGVmdCArIDEpIH4vIDY7CiAgICBpbnQgaW5kZXgxID0gbGVmdCArIHNpeHRoOwogICAgaW50IGluZGV4NSA9IHJpZ2h0IC0gc2l4dGg7CiAgICBpbnQgaW5kZXgzID0gKGxlZnQgKyByaWdodCkgfi8gMjsgLy8gVGhlIG1pZHBvaW50LgogICAgaW50IGluZGV4MiA9IGluZGV4MyAtIHNpeHRoOwogICAgaW50IGluZGV4NCA9IGluZGV4MyArIHNpeHRoOwoKICAgIHZhciBlbDEgPSBhW2luZGV4MV07CiAgICB2YXIgZWwyID0gYVtpbmRleDJdOwogICAgdmFyIGVsMyA9IGFbaW5kZXgzXTsKICAgIHZhciBlbDQgPSBhW2luZGV4NF07CiAgICB2YXIgZWw1ID0gYVtpbmRleDVdOwoKICAgIC8vIFNvcnQgdGhlIHNlbGVjdGVkIDUgZWxlbWVudHMgdXNpbmcgYSBzb3J0aW5nIG5ldHdvcmsuCiAgICBpZiAoY29tcGFyZShlbDEsIGVsMikgPiAwKSB7CiAgICAgIHZhciB0ID0gZWwxOwogICAgICBlbDEgPSBlbDI7CiAgICAgIGVsMiA9IHQ7CiAgICB9CiAgICBpZiAoY29tcGFyZShlbDQsIGVsNSkgPiAwKSB7CiAgICAgIHZhciB0ID0gZWw0OwogICAgICBlbDQgPSBlbDU7CiAgICAgIGVsNSA9IHQ7CiAgICB9CiAgICBpZiAoY29tcGFyZShlbDEsIGVsMykgPiAwKSB7CiAgICAgIHZhciB0ID0gZWwxOwogICAgICBlbDEgPSBlbDM7CiAgICAgIGVsMyA9IHQ7CiAgICB9CiAgICBpZiAoY29tcGFyZShlbDIsIGVsMykgPiAwKSB7CiAgICAgIHZhciB0ID0gZWwyOwogICAgICBlbDIgPSBlbDM7CiAgICAgIGVsMyA9IHQ7CiAgICB9CiAgICBpZiAoY29tcGFyZShlbDEsIGVsNCkgPiAwKSB7CiAgICAgIHZhciB0ID0gZWwxOwogICAgICBlbDEgPSBlbDQ7CiAgICAgIGVsNCA9IHQ7CiAgICB9CiAgICBpZiAoY29tcGFyZShlbDMsIGVsNCkgPiAwKSB7CiAgICAgIHZhciB0ID0gZWwzOwogICAgICBlbDMgPSBlbDQ7CiAgICAgIGVsNCA9IHQ7CiAgICB9CiAgICBpZiAoY29tcGFyZShlbDIsIGVsNSkgPiAwKSB7CiAgICAgIHZhciB0ID0gZWwyOwogICAgICBlbDIgPSBlbDU7CiAgICAgIGVsNSA9IHQ7CiAgICB9CiAgICBpZiAoY29tcGFyZShlbDIsIGVsMykgPiAwKSB7CiAgICAgIHZhciB0ID0gZWwyOwogICAgICBlbDIgPSBlbDM7CiAgICAgIGVsMyA9IHQ7CiAgICB9CiAgICBpZiAoY29tcGFyZShlbDQsIGVsNSkgPiAwKSB7CiAgICAgIHZhciB0ID0gZWw0OwogICAgICBlbDQgPSBlbDU7CiAgICAgIGVsNSA9IHQ7CiAgICB9CgogICAgdmFyIHBpdm90MSA9IGVsMjsKICAgIHZhciBwaXZvdDIgPSBlbDQ7CgogICAgLy8gZWwyIGFuZCBlbDQgaGF2ZSBiZWVuIHNhdmVkIGluIHRoZSBwaXZvdCB2YXJpYWJsZXMuIFRoZXkgd2lsbCBiZSB3cml0dGVuCiAgICAvLyBiYWNrLCBvbmNlIHRoZSBwYXJ0aXRpb25pbmcgaXMgZmluaXNoZWQuCiAgICBhW2luZGV4MV0gPSBlbDE7CiAgICBhW2luZGV4M10gPSBlbDM7CiAgICBhW2luZGV4NV0gPSBlbDU7CgogICAgYVtpbmRleDJdID0gYVtsZWZ0XTsKICAgIGFbaW5kZXg0XSA9IGFbcmlnaHRdOwoKICAgIGludCBsZXNzID0gbGVmdCArIDE7IC8vIEZpcnN0IGVsZW1lbnQgaW4gdGhlIG1pZGRsZSBwYXJ0aXRpb24uCiAgICBpbnQgZ3JlYXQgPSByaWdodCAtIDE7IC8vIExhc3QgZWxlbWVudCBpbiB0aGUgbWlkZGxlIHBhcnRpdGlvbi4KCiAgICBib29sIHBpdm90c19hcmVfZXF1YWwgPSAoY29tcGFyZShwaXZvdDEsIHBpdm90MikgPT0gMCk7CiAgICBpZiAocGl2b3RzX2FyZV9lcXVhbCkgewogICAgICB2YXIgcGl2b3QgPSBwaXZvdDE7CiAgICAgIC8vIERlZ2VuZXJhdGVkIGNhc2Ugd2hlcmUgdGhlIHBhcnRpdGlvbmluZyBiZWNvbWVzIGEgRHV0Y2ggbmF0aW9uYWwgZmxhZwogICAgICAvLyBwcm9ibGVtLgogICAgICAvLwogICAgICAvLyBbIHwgIDwgcGl2b3QgIHwgPT0gcGl2b3QgfCB1bnBhcnRpdGlvbmVkIHwgPiBwaXZvdCAgfCBdCiAgICAgIC8vICBeICAgICAgICAgICAgIF4gICAgICAgICAgXiAgICAgICAgICAgICBeICAgICAgICAgICAgXgogICAgICAvLyBsZWZ0ICAgICAgICAgbGVzcyAgICAgICAgIGsgICAgICAgICAgIGdyZWF0ICAgICAgICAgcmlnaHQKICAgICAgLy8KICAgICAgLy8gYVtsZWZ0XSBhbmQgYVtyaWdodF0gYXJlIHVuZGVmaW5lZCBhbmQgYXJlIGZpbGxlZCBhZnRlciB0aGUKICAgICAgLy8gcGFydGl0aW9uaW5nLgogICAgICAvLwogICAgICAvLyBJbnZhcmlhbnRzOgogICAgICAvLyAgIDEpIGZvciB4IGluIF1sZWZ0LCBsZXNzWyA6IHggPCBwaXZvdC4KICAgICAgLy8gICAyKSBmb3IgeCBpbiBbbGVzcywga1sgOiB4ID09IHBpdm90LgogICAgICAvLyAgIDMpIGZvciB4IGluIF1ncmVhdCwgcmlnaHRbIDogeCA+IHBpdm90LgogICAgICBmb3IgKGludCBrID0gbGVzczsgayA8PSBncmVhdDsgaysrKSB7CiAgICAgICAgdmFyIGFrID0gYVtrXTsKICAgICAgICBpbnQgY29tcCA9IGNvbXBhcmUoYWssIHBpdm90KTsKICAgICAgICBpZiAoY29tcCA9PSAwKSBjb250aW51ZTsKICAgICAgICBpZiAoY29tcCA8IDApIHsKICAgICAgICAgIGlmIChrICE9IGxlc3MpIHsKICAgICAgICAgICAgYVtrXSA9IGFbbGVzc107CiAgICAgICAgICAgIGFbbGVzc10gPSBhazsKICAgICAgICAgIH0KICAgICAgICAgIGxlc3MrKzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gY29tcCA+IDAuCiAgICAgICAgICAvLwogICAgICAgICAgLy8gRmluZCB0aGUgZmlyc3QgZWxlbWVudCA8PSBwaXZvdCBpbiB0aGUgcmFuZ2UgW2sgLSAxLCBncmVhdF0gYW5kCiAgICAgICAgICAvLyBwdXQgWzphazpdIHRoZXJlLiBXZSBrbm93IHRoYXQgc3VjaCBhbiBlbGVtZW50IG11c3QgZXhpc3Q6CiAgICAgICAgICAvLyBXaGVuIGsgPT0gbGVzcywgdGhlbiBlbDMgKHdoaWNoIGlzIGVxdWFsIHRvIHBpdm90KSBsaWVzIGluIHRoZQogICAgICAgICAgLy8gaW50ZXJ2YWwuIE90aGVyd2lzZSBhW2sgLSAxXSA9PSBwaXZvdCBhbmQgdGhlIHNlYXJjaCBzdG9wcyBhdCBrLTEuCiAgICAgICAgICAvLyBOb3RlIHRoYXQgaW4gdGhlIGxhdHRlciBjYXNlIGludmFyaWFudCAyIHdpbGwgYmUgdmlvbGF0ZWQgZm9yIGEKICAgICAgICAgIC8vIHNob3J0IGFtb3VudCBvZiB0aW1lLiBUaGUgaW52YXJpYW50IHdpbGwgYmUgcmVzdG9yZWQgd2hlbiB0aGUKICAgICAgICAgIC8vIHBpdm90cyBhcmUgcHV0IGludG8gdGhlaXIgZmluYWwgcG9zaXRpb25zLgogICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgY29tcCA9IGNvbXBhcmUoYVtncmVhdF0sIHBpdm90KTsKICAgICAgICAgICAgaWYgKGNvbXAgPiAwKSB7CiAgICAgICAgICAgICAgZ3JlYXQtLTsKICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBvbmx5IGxvY2F0aW9uIGluIHRoZSB3aGlsZS1sb29wIHdoZXJlIGEgbmV3CiAgICAgICAgICAgICAgLy8gaXRlcmF0aW9uIGlzIHN0YXJ0ZWQuCiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tcCA8IDApIHsKICAgICAgICAgICAgICAvLyBUcmlwbGUgZXhjaGFuZ2UuCiAgICAgICAgICAgICAgYVtrXSA9IGFbbGVzc107CiAgICAgICAgICAgICAgYVtsZXNzKytdID0gYVtncmVhdF07CiAgICAgICAgICAgICAgYVtncmVhdC0tXSA9IGFrOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIC8vIGNvbXAgPT0gMDsKICAgICAgICAgICAgICBhW2tdID0gYVtncmVhdF07CiAgICAgICAgICAgICAgYVtncmVhdC0tXSA9IGFrOwogICAgICAgICAgICAgIC8vIE5vdGU6IGlmIGdyZWF0IDwgayB0aGVuIHdlIHdpbGwgZXhpdCB0aGUgb3V0ZXIgbG9vcCBhbmQgZml4CiAgICAgICAgICAgICAgLy8gaW52YXJpYW50IDIgKHdoaWNoIHdlIGp1c3QgdmlvbGF0ZWQpLgogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBXZSBwYXJ0aXRpb24gdGhlIGxpc3QgaW50byB0aHJlZSBwYXJ0czoKICAgICAgLy8gIDEuIDwgcGl2b3QxCiAgICAgIC8vICAyLiA+PSBwaXZvdDEgJiYgPD0gcGl2b3QyCiAgICAgIC8vICAzLiA+IHBpdm90MgogICAgICAvLwogICAgICAvLyBEdXJpbmcgdGhlIGxvb3Agd2UgaGF2ZToKICAgICAgLy8gWyB8IDwgcGl2b3QxIHwgPj0gcGl2b3QxICYmIDw9IHBpdm90MiB8IHVucGFydGl0aW9uZWQgIHwgPiBwaXZvdDIgIHwgXQogICAgICAvLyAgXiAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICBeICAgICAgICAgICAgIF4KICAgICAgLy8gbGVmdCAgICAgICAgIGxlc3MgICAgICAgICAgICAgICAgICAgICBrICAgICAgICAgICAgICBncmVhdCAgICAgICAgcmlnaHQKICAgICAgLy8KICAgICAgLy8gYVtsZWZ0XSBhbmQgYVtyaWdodF0gYXJlIHVuZGVmaW5lZCBhbmQgYXJlIGZpbGxlZCBhZnRlciB0aGUKICAgICAgLy8gcGFydGl0aW9uaW5nLgogICAgICAvLwogICAgICAvLyBJbnZhcmlhbnRzOgogICAgICAvLyAgIDEuIGZvciB4IGluIF1sZWZ0LCBsZXNzWyA6IHggPCBwaXZvdDEKICAgICAgLy8gICAyLiBmb3IgeCBpbiBbbGVzcywga1sgOiBwaXZvdDEgPD0geCAmJiB4IDw9IHBpdm90MgogICAgICAvLyAgIDMuIGZvciB4IGluIF1ncmVhdCwgcmlnaHRbIDogeCA+IHBpdm90MgogICAgICBmb3IgKGludCBrID0gbGVzczsgayA8PSBncmVhdDsgaysrKSB7CiAgICAgICAgdmFyIGFrID0gYVtrXTsKICAgICAgICBpbnQgY29tcF9waXZvdDEgPSBjb21wYXJlKGFrLCBwaXZvdDEpOwogICAgICAgIGlmIChjb21wX3Bpdm90MSA8IDApIHsKICAgICAgICAgIGlmIChrICE9IGxlc3MpIHsKICAgICAgICAgICAgYVtrXSA9IGFbbGVzc107CiAgICAgICAgICAgIGFbbGVzc10gPSBhazsKICAgICAgICAgIH0KICAgICAgICAgIGxlc3MrKzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaW50IGNvbXBfcGl2b3QyID0gY29tcGFyZShhaywgcGl2b3QyKTsKICAgICAgICAgIGlmIChjb21wX3Bpdm90MiA+IDApIHsKICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICBpbnQgY29tcCA9IGNvbXBhcmUoYVtncmVhdF0sIHBpdm90Mik7CiAgICAgICAgICAgICAgaWYgKGNvbXAgPiAwKSB7CiAgICAgICAgICAgICAgICBncmVhdC0tOwogICAgICAgICAgICAgICAgaWYgKGdyZWF0IDwgaykgYnJlYWs7CiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBvbmx5IGxvY2F0aW9uIGluc2lkZSB0aGUgbG9vcCB3aGVyZSBhIG5ldwogICAgICAgICAgICAgICAgLy8gaXRlcmF0aW9uIGlzIHN0YXJ0ZWQuCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gYVtncmVhdF0gPD0gcGl2b3QyLgogICAgICAgICAgICAgICAgY29tcCA9IGNvbXBhcmUoYVtncmVhdF0sIHBpdm90MSk7CiAgICAgICAgICAgICAgICBpZiAoY29tcCA8IDApIHsKICAgICAgICAgICAgICAgICAgLy8gVHJpcGxlIGV4Y2hhbmdlLgogICAgICAgICAgICAgICAgICBhW2tdID0gYVtsZXNzXTsKICAgICAgICAgICAgICAgICAgYVtsZXNzKytdID0gYVtncmVhdF07CiAgICAgICAgICAgICAgICAgIGFbZ3JlYXQtLV0gPSBhazsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIC8vIGFbZ3JlYXRdID49IHBpdm90MS4KICAgICAgICAgICAgICAgICAgYVtrXSA9IGFbZ3JlYXRdOwogICAgICAgICAgICAgICAgICBhW2dyZWF0LS1dID0gYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBNb3ZlIHBpdm90cyBpbnRvIHRoZWlyIGZpbmFsIHBvc2l0aW9ucy4KICAgIC8vIFdlIHNocnVuayB0aGUgbGlzdCBmcm9tIGJvdGggc2lkZXMgKGFbbGVmdF0gYW5kIGFbcmlnaHRdIGhhdmUKICAgIC8vIG1lYW5pbmdsZXNzIHZhbHVlcyBpbiB0aGVtKSBhbmQgbm93IHdlIG1vdmUgZWxlbWVudHMgZnJvbSB0aGUgZmlyc3QKICAgIC8vIGFuZCB0aGlyZCBwYXJ0aXRpb24gaW50byB0aGVzZSBsb2NhdGlvbnMgc28gdGhhdCB3ZSBjYW4gc3RvcmUgdGhlCiAgICAvLyBwaXZvdHMuCiAgICBhW2xlZnRdID0gYVtsZXNzIC0gMV07CiAgICBhW2xlc3MgLSAxXSA9IHBpdm90MTsKICAgIGFbcmlnaHRdID0gYVtncmVhdCArIDFdOwogICAgYVtncmVhdCArIDFdID0gcGl2b3QyOwoKICAgIC8vIFRoZSBsaXN0IGlzIG5vdyBwYXJ0aXRpb25lZCBpbnRvIHRocmVlIHBhcnRpdGlvbnM6CiAgICAvLyBbIDwgcGl2b3QxICAgfCA+PSBwaXZvdDEgJiYgPD0gcGl2b3QyICAgfCAgPiBwaXZvdDIgICBdCiAgICAvLyAgXiAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgIF4KICAgIC8vIGxlZnQgICAgICAgICBsZXNzICAgICAgICAgICAgICAgICAgICAgZ3JlYXQgICAgICAgIHJpZ2h0CgogICAgLy8gUmVjdXJzaXZlIGRlc2NlbnQuIChEb24ndCBpbmNsdWRlIHRoZSBwaXZvdCB2YWx1ZXMuKQogICAgX2RvU29ydChhLCBsZWZ0LCBsZXNzIC0gMiwgY29tcGFyZSk7CiAgICBfZG9Tb3J0KGEsIGdyZWF0ICsgMiwgcmlnaHQsIGNvbXBhcmUpOwoKICAgIGlmIChwaXZvdHNfYXJlX2VxdWFsKSB7CiAgICAgIC8vIEFsbCBlbGVtZW50cyBpbiB0aGUgc2Vjb25kIHBhcnRpdGlvbiBhcmUgZXF1YWwgdG8gdGhlIHBpdm90LiBObwogICAgICAvLyBuZWVkIHRvIHNvcnQgdGhlbS4KICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIEluIHRoZW9yeSBpdCBzaG91bGQgYmUgZW5vdWdoIHRvIGNhbGwgX2RvU29ydCByZWN1cnNpdmVseSBvbiB0aGUgc2Vjb25kCiAgICAvLyBwYXJ0aXRpb24uCiAgICAvLyBUaGUgQW5kcm9pZCBzb3VyY2UgaG93ZXZlciByZW1vdmVzIHRoZSBwaXZvdCBlbGVtZW50cyBmcm9tIHRoZSByZWN1cnNpdmUKICAgIC8vIGNhbGwgaWYgdGhlIHNlY29uZCBwYXJ0aXRpb24gaXMgdG9vIGxhcmdlIChtb3JlIHRoYW4gMi8zIG9mIHRoZSBsaXN0KS4KICAgIGlmIChsZXNzIDwgaW5kZXgxICYmIGdyZWF0ID4gaW5kZXg1KSB7CiAgICAgIHdoaWxlIChjb21wYXJlKGFbbGVzc10sIHBpdm90MSkgPT0gMCkgewogICAgICAgIGxlc3MrKzsKICAgICAgfQogICAgICB3aGlsZSAoY29tcGFyZShhW2dyZWF0XSwgcGl2b3QyKSA9PSAwKSB7CiAgICAgICAgZ3JlYXQtLTsKICAgICAgfQoKICAgICAgLy8gQ29weSBwYXN0ZSBvZiB0aGUgcHJldmlvdXMgMy13YXkgcGFydGl0aW9uaW5nIHdpdGggYWRhcHRpb25zLgogICAgICAvLwogICAgICAvLyBXZSBwYXJ0aXRpb24gdGhlIGxpc3QgaW50byB0aHJlZSBwYXJ0czoKICAgICAgLy8gIDEuID09IHBpdm90MQogICAgICAvLyAgMi4gPiBwaXZvdDEgJiYgPCBwaXZvdDIKICAgICAgLy8gIDMuID09IHBpdm90MgogICAgICAvLwogICAgICAvLyBEdXJpbmcgdGhlIGxvb3Agd2UgaGF2ZToKICAgICAgLy8gWyA9PSBwaXZvdDEgfCA+IHBpdm90MSAmJiA8IHBpdm90MiB8IHVucGFydGl0aW9uZWQgIHwgPT0gcGl2b3QyIF0KICAgICAgLy8gICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgXgogICAgICAvLyAgICAgICAgICAgIGxlc3MgICAgICAgICAgICAgICAgICAgICBrICAgICAgICAgICAgICBncmVhdAogICAgICAvLwogICAgICAvLyBJbnZhcmlhbnRzOgogICAgICAvLyAgIDEuIGZvciB4IGluIFsgKiwgbGVzc1sgOiB4ID09IHBpdm90MQogICAgICAvLyAgIDIuIGZvciB4IGluIFtsZXNzLCBrWyA6IHBpdm90MSA8IHggJiYgeCA8IHBpdm90MgogICAgICAvLyAgIDMuIGZvciB4IGluIF1ncmVhdCwgKiBdIDogeCA9PSBwaXZvdDIKICAgICAgZm9yIChpbnQgayA9IGxlc3M7IGsgPD0gZ3JlYXQ7IGsrKykgewogICAgICAgIHZhciBhayA9IGFba107CiAgICAgICAgaW50IGNvbXBfcGl2b3QxID0gY29tcGFyZShhaywgcGl2b3QxKTsKICAgICAgICBpZiAoY29tcF9waXZvdDEgPT0gMCkgewogICAgICAgICAgaWYgKGsgIT0gbGVzcykgewogICAgICAgICAgICBhW2tdID0gYVtsZXNzXTsKICAgICAgICAgICAgYVtsZXNzXSA9IGFrOwogICAgICAgICAgfQogICAgICAgICAgbGVzcysrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbnQgY29tcF9waXZvdDIgPSBjb21wYXJlKGFrLCBwaXZvdDIpOwogICAgICAgICAgaWYgKGNvbXBfcGl2b3QyID09IDApIHsKICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICBpbnQgY29tcCA9IGNvbXBhcmUoYVtncmVhdF0sIHBpdm90Mik7CiAgICAgICAgICAgICAgaWYgKGNvbXAgPT0gMCkgewogICAgICAgICAgICAgICAgZ3JlYXQtLTsKICAgICAgICAgICAgICAgIGlmIChncmVhdCA8IGspIGJyZWFrOwogICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgb25seSBsb2NhdGlvbiBpbnNpZGUgdGhlIGxvb3Agd2hlcmUgYSBuZXcKICAgICAgICAgICAgICAgIC8vIGl0ZXJhdGlvbiBpcyBzdGFydGVkLgogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIGFbZ3JlYXRdIDwgcGl2b3QyLgogICAgICAgICAgICAgICAgY29tcCA9IGNvbXBhcmUoYVtncmVhdF0sIHBpdm90MSk7CiAgICAgICAgICAgICAgICBpZiAoY29tcCA8IDApIHsKICAgICAgICAgICAgICAgICAgLy8gVHJpcGxlIGV4Y2hhbmdlLgogICAgICAgICAgICAgICAgICBhW2tdID0gYVtsZXNzXTsKICAgICAgICAgICAgICAgICAgYVtsZXNzKytdID0gYVtncmVhdF07CiAgICAgICAgICAgICAgICAgIGFbZ3JlYXQtLV0gPSBhazsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIC8vIGFbZ3JlYXRdID09IHBpdm90MS4KICAgICAgICAgICAgICAgICAgYVtrXSA9IGFbZ3JlYXRdOwogICAgICAgICAgICAgICAgICBhW2dyZWF0LS1dID0gYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gVGhlIHNlY29uZCBwYXJ0aXRpb24gaGFzIG5vdyBiZWVuIGNsZWFyZWQgb2YgcGl2b3QgZWxlbWVudHMgYW5kIGxvb2tzCiAgICAgIC8vIGFzIGZvbGxvd3M6CiAgICAgIC8vIFsgICogIHwgID4gcGl2b3QxICYmIDwgcGl2b3QyICB8ICogXQogICAgICAvLyAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICBeCiAgICAgIC8vICAgICAgIGxlc3MgICAgICAgICAgICAgICAgICBncmVhdAogICAgICAvLyBTb3J0IHRoZSBzZWNvbmQgcGFydGl0aW9uIHVzaW5nIHJlY3Vyc2l2ZSBkZXNjZW50LgogICAgICBfZG9Tb3J0KGEsIGxlc3MsIGdyZWF0LCBjb21wYXJlKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRoZSBzZWNvbmQgcGFydGl0aW9uIGxvb2tzIGFzIGZvbGxvd3M6CiAgICAgIC8vIFsgICogIHwgID49IHBpdm90MSAmJiA8PSBwaXZvdDIgIHwgKiBdCiAgICAgIC8vICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgXgogICAgICAvLyAgICAgICBsZXNzICAgICAgICAgICAgICAgICAgICBncmVhdAogICAgICAvLyBTaW1wbHkgc29ydCBpdCBieSByZWN1cnNpdmUgZGVzY2VudC4KICAgICAgX2RvU29ydChhLCBsZXNzLCBncmVhdCwgY29tcGFyZSk7CiAgICB9CiAgfQp9CoGFAE5OPAEPARgBBCMDTCIDRQQNTiUzAQZHGwVOFxwXBU4iBjoqBAEGUB4FRCoFQAZROBoGJwQBBkwGGj83Lw00BgQBIT8uFRE6GQ0IEQYEASY/NgE4KR8gNyEhARkZGRkZAT0hExEPBiETEQ8GIRMRDwYhExEPBiETEQ8GIRMRDwYhExEPBiETEQ8GIRMRDwYBFhYBUDAVFRUBGRoBQ0QBPBwaTxIJQUBDCUUXCRUxLzMsFychGBscGgwSERcNTUhMUE1LOBktHBdJJxgjIh4kHxUVHB8fTTcVDgwKCA0xFiQWCSJQT1EJRRcJFTE+MywXLx8bHBoMEhExIRs0HhkmSSkaFycyICYiKCMZKSMjEhcQDgwKCAYBL0VLSQ8bGh0bATo/PkABPCkrARxJHA4GAU8SUE4rLhAILxEIAUcJMRciFwkiSz5CCRUwPDEsFy8gGxwaDBIRMSIbNB8ZJkkpGhcmMiAmIigjGSkjIxIXEA4MCghPFS4pKzwoDTAwKy0uKAYEAgEYZGFydDpfaW50ZXJuYWwvc29ydC5kYXJ0QW9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2ludGVybmFsL3N5bWJvbC5kYXJ0kscvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5faW50ZXJuYWw7CgovKioKICogSW1wbGVtZW50YXRpb24gb2YgW2NvcmUuU3ltYm9sXS4gIFRoaXMgY2xhc3MgdXNlcyB0aGUgc2FtZSBuYW1lIGFzCiAqIGEgY29yZSBjbGFzcyBzbyBhIHVzZXIgY2FuJ3QgdGVsbCB0aGUgZGlmZmVyZW5jZS4KICoKICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBjbGFzcyBpcyB0byBoaWRlIFtfbmFtZV0gZnJvbSB1c2VyIGNvZGUsIGJ1dAogKiBtYWtlIGl0IGFjY2Vzc2libGUgdG8gRGFydCBwbGF0Zm9ybSBjb2RlIHZpYSB0aGUgc3RhdGljIG1ldGhvZAogKiBbZ2V0TmFtZV0uCiAqLwpjbGFzcyBTeW1ib2wgaW1wbGVtZW50cyBjb3JlLlN5bWJvbCB7CiAgZmluYWwgU3RyaW5nIF9uYW1lOwoKICAvKioKICAgKiBTb3VyY2Ugb2YgUmVnRXhwIG1hdGNoaW5nIERhcnQgcmVzZXJ2ZWQgd29yZHMuCiAgICoKICAgKiBSZXNlcnZlZCB3b3JkcyBhcmUgbm90IGFsbG93ZWQgYXMgaWRlbnRpZmllcnMuCiAgICovCiAgc3RhdGljIGNvbnN0IFN0cmluZyByZXNlcnZlZFdvcmRSRSA9CiAgICAgIHInKD86YXNzZXJ0fGJyZWFrfGMoPzphKD86c2V8dGNoKXxsYXNzfG9uKD86c3R8dGludWUpKXxkKD86ZWZhdWx0fG8pfCcKICAgICAgcidlKD86bHNlfG51bXx4dGVuZHMpfGYoPzphbHNlfGluYWwoPzpseSk/fG9yKXxpW2Zuc118big/OmV3fHVsbCl8JwogICAgICByJ3JldCg/Omhyb3d8dXJuKXxzKD86dXBlcnx3aXRjaCl8dCg/OmgoPzppc3xyb3cpfHIoPzp1ZXx5KSl8JwogICAgICByJ3YoPzphcnxvaWQpfHcoPzpoaWxlfGl0aCkpJzsKICAvKioKICAgKiBTb3VyY2Ugb2YgUmVnRXhwIG1hdGNoaW5nIGFueSBwdWJsaWMgaWRlbnRpZmllci4KICAgKgogICAqIEEgcHVibGljIGlkZW50aWZpZXIgaXMgYSB2YWxpZCBpZGVudGlmaWVyIChub3QgYSByZXNlcnZlZCB3b3JkKQogICAqIHRoYXQgZG9lc24ndCBzdGFydCB3aXRoICdfJy4KICAgKi8KICBzdGF0aWMgY29uc3QgU3RyaW5nIHB1YmxpY0lkZW50aWZpZXJSRSA9CiAgICAgIHInKD8hJyAnJHJlc2VydmVkV29yZFJFJyByJ1xiKD8hXCQpKVthLXpBLVokXVtcdyRdKic7CiAgLyoqCiAgICogU291cmNlIG9mIFJlZ0V4cCBtYXRjaGluZyBhbnkgaWRlbnRpZmllci4KICAgKgogICAqIEl0IG1hdGNoZXMgaWRlbnRpZmllcnMgYnV0IG5vdCByZXNlcnZlZCB3b3Jkcy4gVGhlIGlkZW50aWZpZXJzCiAgICogbWF5IHN0YXJ0IHdpdGggJ18nLgogICAqLwogIHN0YXRpYyBjb25zdCBTdHJpbmcgaWRlbnRpZmllclJFID0KICAgICAgcicoPyEnICckcmVzZXJ2ZWRXb3JkUkUnIHInXGIoPyFcJCkpW2EtekEtWiRfXVtcdyRdKic7CiAgLyoqCiAgICogU291cmNlIG9mIFJlZ0V4cCBtYXRjaGluZyBhIGRlY2xhcmFibGUgb3BlcmF0b3IgbmFtZXMuCiAgICoKICAgKiBUaGUgb3BlcmF0b3JzIHRoYXQgY2FuIGJlIGRlY2xhcmVkIHVzaW5nIGBvcGVyYXRvcmAgZGVjbGFyYXRpb25zIGFyZQogICAqIGFsc28gdGhlIG9ubHkgb25lcyBhbGxvd2VkIGFzIHN5bWJvbHMuIFRoZSBuYW1lIG9mIHRoZSBvcGVyYXRvcnMgaXMKICAgKiB0aGUgc2FtZSBhcyB0aGUgb3BlcmF0b3IgaXRzZWxmIGV4Y2VwdCBmb3IgdW5hcnkgbWludXMsIHdoZXJlIHRoZSBuYW1lCiAgICogaXMgInVuYXJ5LSIuCiAgICovCiAgc3RhdGljIGNvbnN0IFN0cmluZyBvcGVyYXRvclJFID0KICAgICAgcicoPzpbXC0rKi8lJnxeXXxcW1xdPT98PT18fi8/fDxbPD1dP3w+Wz49XT98dW5hcnktKSc7CgogIC8vIEdyYW1tYXIgaWYgc3ltYm9sczoKICAvLyAgICBzeW1ib2wgOjo9IHF1YWxpZmllZE5hbWUgfCA8ZW1wdHk+CiAgLy8gICAgcXVhbGlmaWVkTmFtZSA6Oj0gcHVibGljSWRlbnRpZmllciAnLicgcXVhbGlmaWVkTmFtZSB8IG5hbWUKICAvLyAgICBuYW1lIDo6PSBwdWJsaWNJZGVudGlmaWVyCiAgLy8gICAgICAgICAgIHwgcHVibGljSWRlbnRpZmllciAnPScKICAvLyAgICAgICAgICAgfCBvcGVyYXRvcgogIC8vIHdoZXJlIHB1YmxpY0lkZW50aWZpZXIgaXMgYW55IHZhbGlkIGlkZW50aWZpZXIgKG5vdCBhIHJlc2VydmVkIHdvcmQpCiAgLy8gdGhhdCBpc24ndCBwcml2YXRlIChkb2Vzbid0IHN0YXJ0IHdpdGggJ18nKS4KICAvLwogIC8vIFJhaWxyb2FkIGRpYWdyYW0gb2YgdGhlIGFjY2VwdGVkIGdyYW1tYXI6CiAgLy8KICAvLyAgICAvLS0tLS0tLS0tLS0tLS0tLVwKICAvLyAgICB8ICAgICAgICAgICAgICAgIHwKICAvLyAgICB8ICAgICAgICAgIC8tWy5dLS8gICAgIC8tWz1dLVwKICAvLyAgICBcICAgICAgICAgLyAgICAgICAgICAgLyAgICAgICBcCiAgLy8gIC0tLS0tLS1baWRdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4KICAvLyAgICAgICBcICAgICAgICAgICAgICAgICAgICAgLwogIC8vICAgICAgICBcLS0tLS0tW29wZXJhdG9yXS0tLS8KICAvLyAgICAgICAgICAgIFwgICAgICAgICAgICAgIC8KICAvLyAgICAgICAgICAgICBcLS0tLS0tLS0tLS0tLwogIC8vCgogIC8qKgogICAqIFJlZ0V4cCB0aGF0IHZhbGlkYXRlcyBhIG5vbi1lbXB0eSBub24tcHJpdmF0ZSBzeW1ib2wuCiAgICoKICAgKiBUaGUgZW1wdHkgc3ltYm9sIGlzIGhhbmRsZWQgYmVmb3JlIHRoaXMgcmVnZXhwIGlzIHVzZWQsIGFuZCBpcyBub3QKICAgKiBhY2NlcHRlZC4KICAgKi8KICBzdGF0aWMgZmluYWwgUmVnRXhwIHB1YmxpY1N5bWJvbFBhdHRlcm4gPSBuZXcgUmVnRXhwKAogICAgICAnXig/OiRvcGVyYXRvclJFXCR8JHB1YmxpY0lkZW50aWZpZXJSRSg/Oj0/XCR8Wy5dKD8hXCQpKSkrP1wkJyk7CgogIC8vIFRoZSBncmFtbWFyIG9mIHN5bWJvbHMgdGhhdCBtYXkgYmUgcHJpdmF0ZSBpcyB0aGUgc2FtZSBhcyBmb3IgcHVibGljCiAgLy8gc3ltYm9scywgZXhjZXB0IHRoYXQgInB1YmxpY0lkZW50aWZpZXIiIGlzIHJlcGxhY2VkIGJ5ICJpZGVudGlmaWVyIiwKICAvLyB3aGljaCBtYXRjaGVzIGFueSBpZGVudGlmaWVyLgoKICAvKioKICAgKiBSZWdFeHAgdGhhdCB2YWxpZGF0ZXMgYSBub24tZW1wdHkgc3ltYm9sLgogICAqCiAgICogUHJpdmF0ZSBzeW1ib2xzIGFyZSBhY2NlcHRlZC4KICAgKgogICAqIFRoZSBlbXB0eSBzeW1ib2wgaXMgaGFuZGxlZCBiZWZvcmUgdGhpcyByZWdleHAgaXMgdXNlZCwgYW5kIGlzIG5vdAogICAqIGFjY2VwdGVkLgogICAqLwogIHN0YXRpYyBmaW5hbCBSZWdFeHAgc3ltYm9sUGF0dGVybiA9CiAgICAgIG5ldyBSZWdFeHAoJ14oPzokb3BlcmF0b3JSRVwkfCRpZGVudGlmaWVyUkUoPzo9P1wkfFsuXSg/IVwkKSkpKz9cJCcpOwoKICBleHRlcm5hbCBjb25zdCBTeW1ib2woU3RyaW5nIG5hbWUpOwoKICAvKioKICAgKiBQbGF0Zm9ybS1wcml2YXRlIG1ldGhvZCB1c2VkIGJ5IHRoZSBtaXJyb3Igc3lzdGVtIHRvIGNyZWF0ZQogICAqIG90aGVyd2lzZSBpbnZhbGlkIG5hbWVzLgogICAqLwogIGNvbnN0IFN5bWJvbC51bnZhbGlkYXRlZCh0aGlzLl9uYW1lKTsKCiAgLy8gVGhpcyBpcyBjYWxsZWQgYnkgZGFydDJqcy4KICBTeW1ib2wudmFsaWRhdGVkKFN0cmluZyBuYW1lKSA6IHRoaXMuX25hbWUgPSB2YWxpZGF0ZVB1YmxpY1N5bWJvbChuYW1lKTsKCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgPT4gb3RoZXIgaXMgU3ltYm9sICYmIF9uYW1lID09IG90aGVyLl9uYW1lOwoKICBleHRlcm5hbCBpbnQgZ2V0IGhhc2hDb2RlOwoKICBleHRlcm5hbCB0b1N0cmluZygpOwoKICAvLy8gUGxhdGZvcm0tcHJpdmF0ZSBhY2Nlc3NvciB3aGljaCBjYW5ub3QgYmUgY2FsbGVkIGZyb20gdXNlciBsaWJyYXJpZXMuCiAgc3RhdGljIFN0cmluZyBnZXROYW1lKFN5bWJvbCBzeW1ib2wpID0+IHN5bWJvbC5fbmFtZTsKCiAgc3RhdGljIFN0cmluZyB2YWxpZGF0ZVB1YmxpY1N5bWJvbChTdHJpbmcgbmFtZSkgewogICAgaWYgKG5hbWUuaXNFbXB0eSB8fCBwdWJsaWNTeW1ib2xQYXR0ZXJuLmhhc01hdGNoKG5hbWUpKSByZXR1cm4gbmFtZTsKICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ18nKSkgewogICAgICAvLyBUaGVyZSBtYXkgYmUgb3RoZXIgcHJpdmF0ZSBwYXJ0cyBpbiBhIHF1YWxpZmllZCBuYW1lIHRoYW4gdGhlIGZpcnN0CiAgICAgIC8vIG9uZSwgYnV0IHRoaXMgaXMgYSBjb21tb24gY2FzZSB0aGF0IGRlc2VydmVzIGEgc3BlY2lmaWMgZXJyb3IKICAgICAgLy8gbWVzc2FnZS4KICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJyIkbmFtZSIgaXMgYSBwcml2YXRlIGlkZW50aWZpZXInKTsKICAgIH0KICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCciJG5hbWUiIGlzIG5vdCBhIHZhbGlkIChxdWFsaWZpZWQpIHN5bWJvbCBuYW1lJyk7CiAgfQoKICAvKioKICAgKiBDaGVja3Mgd2hldGhlciBuYW1lIGlzIGEgdmFsaWQgc3ltYm9sIG5hbWUuCiAgICoKICAgKiBUaGlzIHRlc3QgYWxsb3dzIGJvdGggcHJpdmF0ZSBhbmQgbm9uLXByaXZhdGUgc3ltYm9scy4KICAgKi8KICBzdGF0aWMgYm9vbCBpc1ZhbGlkU3ltYm9sKFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gKG5hbWUuaXNFbXB0eSB8fCBzeW1ib2xQYXR0ZXJuLmhhc01hdGNoKG5hbWUpKTsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBTdHJpbmcgY29tcHV0ZVVubWFuZ2xlZE5hbWUoU3ltYm9sIHN5bWJvbCk7Cn0KgJIATk48AQ8BGAEERjUDREIOBCYWAQY0BTQGJ01KRSUGNgVFIgYrPAYvBUQZBiU9BjwFSklMEgYjPQEZK0QiJhpKMgUvBRsbJygsIyIhIAUBBjsFSA8GOEcBSkojAQYvBSMFSA8GJkwBJgEGQR4GKAEgSwFGAR0BFwFMOAE0SSBNRxJCBk8EAQYxBTwGKzsEAT4CARpkYXJ0Ol9pbnRlcm5hbC9zeW1ib2wuZGFydE9vcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vbGliL3N5bWJvbF9wYXRjaC5kYXJ0hpMvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vIHBhcnQgb2YgImludGVybmFsX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIFN5bWJvbCB7CiAgQHBhdGNoCiAgY29uc3QgU3ltYm9sKFN0cmluZyBuYW1lKSA6IHRoaXMuX25hbWUgPSBuYW1lOwoKICBAcGF0Y2gKICB0b1N0cmluZygpID0+ICdTeW1ib2woIiR7Y29tcHV0ZVVubWFuZ2xlZE5hbWUodGhpcyl9IiknOwoKICBAcGF0Y2gKICBzdGF0aWMgU3RyaW5nIGNvbXB1dGVVbm1hbmdsZWROYW1lKFN5bWJvbCBzeW1ib2wpIHsKICAgIFN0cmluZyBzdHJpbmcgPSBTeW1ib2wuZ2V0TmFtZShzeW1ib2wpOwoKICAgIC8vIGdldDpmb28gLT4gZm9vCiAgICAvLyBzZXQ6Zm9vIC0+IGZvbz0KICAgIC8vIGdldDpfZm9vQHh4eCAtPiBfZm9vCiAgICAvLyBzZXQ6X2Zvb0B4eHggLT4gX2Zvbz0KICAgIC8vIENsYXNzLl9jb25zdHJ1Y3RvckB4eHggLT4gQ2xhc3MuX2NvbnN0cnVjdG9yCiAgICAvLyBfQ2xhc3NAeHh4Ll9jb25zdHJ1Y3RvckB4eHggLT4gX0NsYXNzLl9jb25zdHJ1Y3RvcgogICAgLy8gbGliLl9TQHh4eCB3aXRoIGxpYi5fTTFAeHh4LCBsaWIuX00yQHh4eCAtPiBsaWIuX1Mgd2l0aCBsaWIuX00xLCBsaWIuX00yCiAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgYm9vbCBhZGRfc2V0dGVyX3N1ZmZpeCA9IGZhbHNlOwogICAgdmFyIHBvcyA9IDA7CiAgICBpZiAoc3RyaW5nLmxlbmd0aCA+PSA0ICYmIHN0cmluZ1szXSA9PSAnOicpIHsKICAgICAgLy8gRHJvcCAnZ2V0Oicgb3IgJ3NldDonIHByZWZpeC4KICAgICAgcG9zID0gNDsKICAgICAgaWYgKHN0cmluZ1swXSA9PSAncycpIHsKICAgICAgICBhZGRfc2V0dGVyX3N1ZmZpeCA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIC8vIFNraXAgZXZlcnl0aGluZyBiZXR3ZWVuIEFUIGFuZCBQRVJJT0QsIFNQQUNFLCBDT01NQSBvciBFTkQKICAgIGJvb2wgc2tpcCA9IGZhbHNlOwogICAgZm9yICg7IHBvcyA8IHN0cmluZy5sZW5ndGg7IHBvcysrKSB7CiAgICAgIHZhciBjaGFyID0gc3RyaW5nW3Bvc107CiAgICAgIGlmIChjaGFyID09ICdAJykgewogICAgICAgIHNraXAgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKGNoYXIgPT0gJy4nIHx8IGNoYXIgPT0gJyAnIHx8IGNoYXIgPT0gJywnKSB7CiAgICAgICAgc2tpcCA9IGZhbHNlOwogICAgICB9CiAgICAgIGlmICghc2tpcCkgewogICAgICAgIHJlc3VsdC53cml0ZShjaGFyKTsKICAgICAgfQogICAgfQogICAgaWYgKGFkZF9zZXR0ZXJfc3VmZml4KSB7CiAgICAgIHJlc3VsdC53cml0ZSgnPScpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogIH0KCiAgQHBhdGNoCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICBjb25zdCBhcmJpdHJhcnlQcmltZSA9IDY2NDU5NzsKICAgIHJldHVybiAweDFmZmZmZmZmICYgKGFyYml0cmFyeVByaW1lICogX25hbWUuaGFzaENvZGUpOwogIH0KfQpAAE5OPAEPASIBBw8JMQEJOwEJNiwBFhccHTQ6UC4kETInDx4iCAZCFykeGRU+FggTHAgGHRkGHgQBCRUjOwQCASZkYXJ0Ol9pbnRlcm5hbC1wYXRjaC9zeW1ib2xfcGF0Y2guZGFydEZvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9pbnRlcm5hbC9saW5rZWRfbGlzdC5kYXJ0jNUvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5faW50ZXJuYWw7CgovLy8gQSBydWRpbWVudGFyeSBsaW5rZWQgbGlzdC4KY2xhc3MgTGlua2VkTGlzdDxUIGV4dGVuZHMgTGlua2VkTGlzdEVudHJ5PFQ+PiBleHRlbmRzIEl0ZXJhYmxlQmFzZTxUPiB7CiAgVCBmaXJzdDsKICBUIGxhc3Q7CiAgaW50IGxlbmd0aCA9IDA7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gbGVuZ3RoID09IDA7CgogIC8qKgogICAqIEFkZHMgW25ld0xhc3RdIHRvIHRoZSBlbmQgb2YgdGhpcyBsaW5rZWQgbGlzdC4KICAgKi8KICB2b2lkIGFkZChUIG5ld0xhc3QpIHsKICAgIGFzc2VydChuZXdMYXN0Ll9uZXh0ID09IG51bGwgJiYgbmV3TGFzdC5fcHJldmlvdXMgPT0gbnVsbCk7CiAgICBpZiAobGFzdCAhPSBudWxsKSB7CiAgICAgIGFzc2VydChsYXN0Ll9uZXh0ID09IG51bGwpOwogICAgICBsYXN0Ll9uZXh0ID0gbmV3TGFzdDsKICAgIH0gZWxzZSB7CiAgICAgIGZpcnN0ID0gbmV3TGFzdDsKICAgIH0KICAgIG5ld0xhc3QuX3ByZXZpb3VzID0gbGFzdDsKICAgIGxhc3QgPSBuZXdMYXN0OwogICAgbGFzdC5fbGlzdCA9IHRoaXM7CiAgICBsZW5ndGgrKzsKICB9CgogIC8qKgogICAqIEFkZHMgW25ld0ZpcnN0XSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgbGlua2VkIGxpc3QuCiAgICovCiAgdm9pZCBhZGRGaXJzdChUIG5ld0ZpcnN0KSB7CiAgICBpZiAoZmlyc3QgIT0gbnVsbCkgewogICAgICBhc3NlcnQoZmlyc3QuX3ByZXZpb3VzID09IG51bGwpOwogICAgICBmaXJzdC5fcHJldmlvdXMgPSBuZXdGaXJzdDsKICAgIH0gZWxzZSB7CiAgICAgIGxhc3QgPSBuZXdGaXJzdDsKICAgIH0KICAgIG5ld0ZpcnN0Ll9uZXh0ID0gZmlyc3Q7CiAgICBmaXJzdCA9IG5ld0ZpcnN0OwogICAgZmlyc3QuX2xpc3QgPSB0aGlzOwogICAgbGVuZ3RoKys7CiAgfQoKICAvKioKICAgKiBSZW1vdmVzIHRoZSBnaXZlbiBbbm9kZV0gZnJvbSB0aGlzIGxpc3QuCiAgICoKICAgKiBJZiB0aGUgZW50cnkgaXMgbm90IGluIHRoaXMgbGlua2VkIGxpc3Qgbm90aGluZyBoYXBwZW5zLgogICAqCiAgICogQWxzbyBzZWUgW0xpbmtlZExpc3RFbnRyeS51bmxpbmtdLgogICAqLwogIHZvaWQgcmVtb3ZlKFQgbm9kZSkgewogICAgaWYgKG5vZGUuX2xpc3QgIT0gdGhpcykgcmV0dXJuOwogICAgbGVuZ3RoLS07CiAgICBpZiAobm9kZS5fcHJldmlvdXMgPT0gbnVsbCkgewogICAgICBhc3NlcnQoaWRlbnRpY2FsKG5vZGUsIGZpcnN0KSk7CiAgICAgIGZpcnN0ID0gbm9kZS5fbmV4dDsKICAgIH0gZWxzZSB7CiAgICAgIG5vZGUuX3ByZXZpb3VzLl9uZXh0ID0gbm9kZS5fbmV4dDsKICAgIH0KICAgIGlmIChub2RlLl9uZXh0ID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGlkZW50aWNhbChub2RlLCBsYXN0KSk7CiAgICAgIGxhc3QgPSBub2RlLl9wcmV2aW91czsKICAgIH0gZWxzZSB7CiAgICAgIG5vZGUuX25leHQuX3ByZXZpb3VzID0gbm9kZS5fcHJldmlvdXM7CiAgICB9CiAgICBub2RlLl9uZXh0ID0gbm9kZS5fcHJldmlvdXMgPSBudWxsOwogICAgbm9kZS5fbGlzdCA9IG51bGw7CiAgfQoKICBJdGVyYXRvcjxUPiBnZXQgaXRlcmF0b3IgPT4gbmV3IF9MaW5rZWRMaXN0SXRlcmF0b3I8VD4odGhpcyk7Cn0KCmNsYXNzIExpbmtlZExpc3RFbnRyeTxUIGV4dGVuZHMgTGlua2VkTGlzdEVudHJ5PFQ+PiB7CiAgVCBfbmV4dDsKICBUIF9wcmV2aW91czsKICBMaW5rZWRMaXN0PFQ+IF9saXN0OwoKICAvKioKICAgKiBVbmxpbmtzIHRoZSBlbGVtZW50IGZyb20gaXRzIGxpbmtlZCBsaXN0LgogICAqCiAgICogSWYgdGhlIGVudHJ5IGlzIG5vdCBpbiBhIGxpbmtlZCBsaXN0LCBkb2VzIG5vdGhpbmcuIE90aGVyd2lzZSwgdGhpcwogICAqIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyBbTGlua2VkTGlzdC5yZW1vdmVdIG9uIHRoZSBsaXN0IHRoaXMgZW50cnkKICAgKiBpcyBjdXJyZW50bHkgaW4uCiAgICovCiAgdm9pZCB1bmxpbmsoKSB7CiAgICBpZiAoX2xpc3QgPT0gbnVsbCkgcmV0dXJuOwogICAgX2xpc3QucmVtb3ZlKHRoaXMpOwogIH0KfQoKY2xhc3MgX0xpbmtlZExpc3RJdGVyYXRvcjxUIGV4dGVuZHMgTGlua2VkTGlzdEVudHJ5PFQ+PiBpbXBsZW1lbnRzIEl0ZXJhdG9yPFQ+IHsKICAvLy8gVGhlIGN1cnJlbnQgZWxlbWVudCBvZiB0aGUgaXRlcmF0b3IuCiAgLy8gVGhpcyBmaWVsZCBpcyB3cml0ZWFibGUsIGJ1dCBzaG91bGQgb25seSByZWFkIGJ5IHVzZXJzIG9mIHRoaXMgY2xhc3MuCiAgVCBjdXJyZW50OwoKICAvLy8gVGhlIGxpc3QgdGhlIGl0ZXJhdG9yIGl0ZXJhdGVzIG92ZXIuCiAgLy8vCiAgLy8vIFNldCB0byBbbnVsbF0gaWYgdGhlIHByb3ZpZGVkIGxpc3Qgd2FzIGVtcHR5IChpbmRpY2F0aW5nIHRoYXQgdGhlcmUgd2VyZQogIC8vLyBubyBlbnRyaWVzIHRvIGl0ZXJhdGUgb3ZlcikuCiAgLy8vCiAgLy8vIFNldCB0byBbbnVsbF0gYXMgc29vbiBhcyBbbW92ZU5leHRdIHdhcyBpbnZva2VkIChpbmRpY2F0aW5nIHRoYXQgdGhlCiAgLy8vIGl0ZXJhdG9yIGhhcyB0byB3b3JrIHdpdGggW2N1cnJlbnRdIGZyb20gbm93IG9uLgogIExpbmtlZExpc3Q8VD4gX2xpc3Q7CgogIF9MaW5rZWRMaXN0SXRlcmF0b3IodGhpcy5fbGlzdCkgewogICAgaWYgKF9saXN0Lmxlbmd0aCA9PSAwKSBfbGlzdCA9IG51bGw7CiAgfQoKICBib29sIG1vdmVOZXh0KCkgewogICAgLy8gY3VycmVudCBpcyBudWxsIGlmIHRoZSBpdGVyYXRvciBoYXNuJ3Qgc3RhcnRlZCBpdGVyYXRpbmcsIG9yIGlmIHRoZQogICAgLy8gaXRlcmF0aW9uIGlzIGZpbmlzaGVkLiBJbiB0aGUgZmlyc3QgY2FzZSwgdGhlIFtfbGlzdF0gZmllbGQgaXMgbm90IG51bGwuCiAgICBpZiAoY3VycmVudCA9PSBudWxsKSB7CiAgICAgIGlmIChfbGlzdCA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgIGFzc2VydChfbGlzdC5sZW5ndGggPiAwKTsKICAgICAgY3VycmVudCA9IF9saXN0LmZpcnN0OwogICAgICBfbGlzdCA9IG51bGw7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgY3VycmVudCA9IGN1cnJlbnQuX25leHQ7CiAgICByZXR1cm4gY3VycmVudCAhPSBudWxsOwogIH0KfQqAggBOTjwBDwEYAR9JCwoSASMBBjQGGEAYIhwNFwYeFBcOBAEGOwYeGSciDRcGHBYYDgQBBi4FPgUoBhgkDiImGg0pBh4lHQ0tBigXBAFAAgE2Cw8XAQYvBUlJFgYSHxgEAgFRK0sNASsGTyMGSzcXASQpBAEUS1AbJyAdFBMGHRwEAgEfZGFydDpfaW50ZXJuYWwvbGlua2VkX2xpc3QuZGFydE5vcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vbGliL3ByaW50X3BhdGNoLmRhcnSDDC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKLy8gcGFydCBvZiAiaW50ZXJuYWxfcGF0Y2guZGFydCI7CgovLyBBIHByaW50LWNsb3N1cmUgZ2V0cyBhIFN0cmluZyB0aGF0IHNob3VsZCBiZSBwcmludGVkLiBJbiBnZW5lcmFsIHRoZQovLyBzdHJpbmcgaXMgYSBsaW5lLCBidXQgaXQgbWF5IGNvbnRhaW4gIlxuIiBjaGFyYWN0ZXJzLgp0eXBlZGVmIHZvaWQgX1ByaW50Q2xvc3VyZShTdHJpbmcgbGluZSk7CgpAcGF0Y2gKdm9pZCBwcmludFRvQ29uc29sZShTdHJpbmcgbGluZSkgewogIF9wcmludENsb3N1cmUobGluZSk7Cn0KCnZvaWQgX3Vuc3VwcG9ydGVkUHJpbnQoU3RyaW5nIGxpbmUpIHsKICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiJ3ByaW50JyBpcyBub3Qgc3VwcG9ydGVkIik7Cn0KCi8vIF9wcmludENsb3N1cmUgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBlbWJlZGRlciB0byBzdXBwbHkgYSBkaWZmZXJlbnQKLy8gcHJpbnQgaW1wbGVtZW50YXRpb24uCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKX1ByaW50Q2xvc3VyZSBfcHJpbnRDbG9zdXJlID0gX3Vuc3VwcG9ydGVkUHJpbnQ7ChsATk48AQ8BIgFIOSkBByMXAgEmOgIBShkaMQElZGFydDpfaW50ZXJuYWwtcGF0Y2gvcHJpbnRfcGF0Y2guZGFydEBvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9pbnRlcm5hbC9wcmludC5kYXJ0gkUvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5faW50ZXJuYWw7CgovKioKICogVGhpcyBmdW5jdGlvbiBpcyBzZXQgYnkgdGhlIGZpcnN0IGFsbG9jYXRpb24gb2YgYSBab25lLgogKgogKiBPbmNlIHRoZSBmdW5jdGlvbiBpcyBzZXQgdGhlIGNvcmUgYHByaW50YCBmdW5jdGlvbiBjYWxscyB0aGlzIGNsb3N1cmUgaW5zdGVhZAogKiBvZiBbcHJpbnRUb0NvbnNvbGVdLgogKgogKiBUaGlzIGRlY291cGxlcyB0aGUgY29yZSBsaWJyYXJ5IGZyb20gdGhlIGFzeW5jIGxpYnJhcnkuCiAqLwp2b2lkIEZ1bmN0aW9uKFN0cmluZykgcHJpbnRUb1pvbmUgPSBudWxsOwoKZXh0ZXJuYWwgdm9pZCBwcmludFRvQ29uc29sZShTdHJpbmcgbGluZSk7ChUATk48AQ8BGAEEOwNRGAM7BCoBKwEZZGFydDpfaW50ZXJuYWwvcHJpbnQuZGFydEFvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9pc29sYXRlL2lzb2xhdGUuZGFydMAAdywvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8qKgogKiBDb25jdXJyZW50IHByb2dyYW1taW5nIHVzaW5nIF9pc29sYXRlc186CiAqIGluZGVwZW5kZW50IHdvcmtlcnMgdGhhdCBhcmUgc2ltaWxhciB0byB0aHJlYWRzCiAqIGJ1dCBkb24ndCBzaGFyZSBtZW1vcnksCiAqIGNvbW11bmljYXRpbmcgb25seSB2aWEgbWVzc2FnZXMuCiAqCiAqIFRvIHVzZSB0aGlzIGxpYnJhcnkgaW4geW91ciBjb2RlOgogKgogKiAgICAgaW1wb3J0ICdkYXJ0Omlzb2xhdGUnOwogKgogKiB7QGNhdGVnb3J5IFZNfQogKi8KbGlicmFyeSBkYXJ0Lmlzb2xhdGU7CgppbXBvcnQgImRhcnQ6YXN5bmMiOwppbXBvcnQgImRhcnQ6X2ludGVybmFsIiBzaG93IFNpbmNlOwppbXBvcnQgImRhcnQ6dHlwZWRfZGF0YSIgc2hvdyBCeXRlQnVmZmVyLCBUeXBlZERhdGEsIFVpbnQ4TGlzdDsKCnBhcnQgImNhcGFiaWxpdHkuZGFydCI7CgovKioKICogVGhyb3duIHdoZW4gYW4gaXNvbGF0ZSBjYW5ub3QgYmUgY3JlYXRlZC4KICovCmNsYXNzIElzb2xhdGVTcGF3bkV4Y2VwdGlvbiBpbXBsZW1lbnRzIEV4Y2VwdGlvbiB7CiAgLyoqIEVycm9yIG1lc3NhZ2UgcmVwb3J0ZWQgYnkgdGhlIHNwYXduIG9wZXJhdGlvbi4gKi8KICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgSXNvbGF0ZVNwYXduRXhjZXB0aW9uKHRoaXMubWVzc2FnZSk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIklzb2xhdGVTcGF3bkV4Y2VwdGlvbjogJG1lc3NhZ2UiOwp9CgovKioKICogQW4gaXNvbGF0ZWQgRGFydCBleGVjdXRpb24gY29udGV4dC4KICoKICogQWxsIERhcnQgY29kZSBydW5zIGluIGFuIGlzb2xhdGUsIGFuZCBjb2RlIGNhbiBhY2Nlc3MgY2xhc3NlcyBhbmQgdmFsdWVzCiAqIG9ubHkgZnJvbSB0aGUgc2FtZSBpc29sYXRlLiBEaWZmZXJlbnQgaXNvbGF0ZXMgY2FuIGNvbW11bmljYXRlIGJ5IHNlbmRpbmcKICogdmFsdWVzIHRocm91Z2ggcG9ydHMgKHNlZSBbUmVjZWl2ZVBvcnRdLCBbU2VuZFBvcnRdKS4KICoKICogQW4gYElzb2xhdGVgIG9iamVjdCBpcyBhIHJlZmVyZW5jZSB0byBhbiBpc29sYXRlLCB1c3VhbGx5IGRpZmZlcmVudCBmcm9tCiAqIHRoZSBjdXJyZW50IGlzb2xhdGUuCiAqIEl0IHJlcHJlc2VudHMsIGFuZCBjYW4gYmUgdXNlZCB0byBjb250cm9sLCB0aGUgb3RoZXIgaXNvbGF0ZS4KICoKICogV2hlbiBzcGF3bmluZyBhIG5ldyBpc29sYXRlLCB0aGUgc3Bhd25pbmcgaXNvbGF0ZSByZWNlaXZlcyBhbiBgSXNvbGF0ZWAKICogb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbmV3IGlzb2xhdGUgd2hlbiB0aGUgc3Bhd24gb3BlcmF0aW9uIHN1Y2NlZWRzLgogKgogKiBJc29sYXRlcyBydW4gY29kZSBpbiBpdHMgb3duIGV2ZW50IGxvb3AsIGFuZCBlYWNoIGV2ZW50IG1heSBydW4gc21hbGxlciB0YXNrcwogKiBpbiBhIG5lc3RlZCBtaWNyb3Rhc2sgcXVldWUuCiAqCiAqIEFuIGBJc29sYXRlYCBvYmplY3QgYWxsb3dzIG90aGVyIGlzb2xhdGVzIHRvIGNvbnRyb2wgdGhlIGV2ZW50IGxvb3AKICogb2YgdGhlIGlzb2xhdGUgdGhhdCBpdCByZXByZXNlbnRzLCBhbmQgdG8gaW5zcGVjdCB0aGUgaXNvbGF0ZSwKICogZm9yIGV4YW1wbGUgYnkgcGF1c2luZyB0aGUgaXNvbGF0ZSBvciBieSBnZXR0aW5nIGV2ZW50cyB3aGVuIHRoZSBpc29sYXRlCiAqIGhhcyBhbiB1bmNhdWdodCBlcnJvci4KICoKICogVGhlIFtjb250cm9sUG9ydF0gaWRlbnRpZmllcyBhbmQgZ2l2ZXMgYWNjZXNzIHRvIGNvbnRyb2xsaW5nIHRoZSBpc29sYXRlLAogKiBhbmQgdGhlIFtwYXVzZUNhcGFiaWxpdHldIGFuZCBbdGVybWluYXRlQ2FwYWJpbGl0eV0gZ3VhcmQgYWNjZXNzCiAqIHRvIHNvbWUgY29udHJvbCBvcGVyYXRpb25zLgogKiBGb3IgZXhhbXBsZSwgY2FsbGluZyBbcGF1c2VdIG9uIGFuIGBJc29sYXRlYCBvYmplY3QgY3JlYXRlZCB3aXRob3V0IGEKICogW3BhdXNlQ2FwYWJpbGl0eV0sIGhhcyBubyBlZmZlY3QuCiAqCiAqIFRoZSBgSXNvbGF0ZWAgb2JqZWN0IHByb3ZpZGVkIGJ5IGEgc3Bhd24gb3BlcmF0aW9uIHdpbGwgaGF2ZSB0aGUKICogY29udHJvbCBwb3J0IGFuZCBjYXBhYmlsaXRpZXMgbmVlZGVkIHRvIGNvbnRyb2wgdGhlIGlzb2xhdGUuCiAqIE5ldyBpc29sYXRlIG9iamVjdHMgY2FuIGJlIGNyZWF0ZWQgd2l0aG91dCBzb21lIG9mIHRoZXNlIGNhcGFiaWxpdGllcwogKiBpZiBuZWNlc3NhcnksIHVzaW5nIHRoZSBbSXNvbGF0ZS5Jc29sYXRlXSBjb25zdHJ1Y3Rvci4KICoKICogQW4gYElzb2xhdGVgIG9iamVjdCBjYW5ub3QgYmUgc2VudCBvdmVyIGEgYFNlbmRQb3J0YCwgYnV0IHRoZSBjb250cm9sIHBvcnQKICogYW5kIGNhcGFiaWxpdGllcyBjYW4gYmUgc2VudCwgYW5kIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbmluZwogKiBgSXNvbGF0ZWAgb2JqZWN0IGluIHRoZSByZWNlaXZpbmcgcG9ydCdzIGlzb2xhdGUuCiAqLwpjbGFzcyBJc29sYXRlIHsKICAvKiogQXJndW1lbnQgdG8gYHBpbmdgIGFuZCBga2lsbGA6IEFzayBmb3IgaW1tZWRpYXRlIGFjdGlvbi4gKi8KICBzdGF0aWMgY29uc3QgaW50IGltbWVkaWF0ZSA9IDA7CiAgLyoqIEFyZ3VtZW50IHRvIGBwaW5nYCBhbmQgYGtpbGxgOiBBc2sgZm9yIGFjdGlvbiBiZWZvcmUgdGhlIG5leHQgZXZlbnQuICovCiAgc3RhdGljIGNvbnN0IGludCBiZWZvcmVOZXh0RXZlbnQgPSAxOwoKICAvKioKICAgKiBDb250cm9sIHBvcnQgdXNlZCB0byBzZW5kIGNvbnRyb2wgbWVzc2FnZXMgdG8gdGhlIGlzb2xhdGUuCiAgICoKICAgKiBUaGUgY29udHJvbCBwb3J0IGlkZW50aWZpZXMgdGhlIGlzb2xhdGUuCiAgICoKICAgKiBBbiBgSXNvbGF0ZWAgb2JqZWN0IGFsbG93cyBzZW5kaW5nIGNvbnRyb2wgbWVzc2FnZXMKICAgKiB0aHJvdWdoIHRoZSBjb250cm9sIHBvcnQuCiAgICoKICAgKiBTb21lIGNvbnRyb2wgbWVzc2FnZXMgcmVxdWlyZSBhIHNwZWNpZmljIGNhcGFiaWxpdHkgdG8gYmUgcGFzc2VkIGFsb25nCiAgICogd2l0aCB0aGUgbWVzc2FnZSAoc2VlIFtwYXVzZUNhcGFiaWxpdHldIGFuZCBbdGVybWluYXRlQ2FwYWJpbGl0eV0pLAogICAqIG90aGVyd2lzZSB0aGUgbWVzc2FnZSBpcyBpZ25vcmVkIGJ5IHRoZSBpc29sYXRlLgogICAqLwogIGZpbmFsIFNlbmRQb3J0IGNvbnRyb2xQb3J0OwoKICAvKioKICAgKiBDYXBhYmlsaXR5IGdyYW50aW5nIHRoZSBhYmlsaXR5IHRvIHBhdXNlIHRoZSBpc29sYXRlLgogICAqCiAgICogVGhpcyBjYXBhYmlsaXR5IGlzIHJlcXVpcmVkIGJ5IFtwYXVzZV0uCiAgICogSWYgdGhlIGNhcGFiaWxpdHkgaXMgYG51bGxgLCBvciBpZiBpdCBpcyBub3QgdGhlIGNvcnJlY3QgcGF1c2UgY2FwYWJpbGl0eQogICAqIG9mIHRoZSBpc29sYXRlIGlkZW50aWZpZWQgYnkgW2NvbnRyb2xQb3J0XSwKICAgKiB0aGVuIGNhbGxzIHRvIFtwYXVzZV0gd2lsbCBoYXZlIG5vIGVmZmVjdC4KICAgKgogICAqIElmIHRoZSBpc29sYXRlIGlzIHNwYXduZWQgaW4gYSBwYXVzZWQgc3RhdGUsIHVzZSB0aGlzIGNhcGFiaWxpdHkgYXMKICAgKiBhcmd1bWVudCB0byB0aGUgW3Jlc3VtZV0gbWV0aG9kIGluIG9yZGVyIHRvIHJlc3VtZSB0aGUgcGF1c2VkIGlzb2xhdGUuCiAgICovCiAgZmluYWwgQ2FwYWJpbGl0eSBwYXVzZUNhcGFiaWxpdHk7CgogIC8qKgogICAqIENhcGFiaWxpdHkgZ3JhbnRpbmcgdGhlIGFiaWxpdHkgdG8gdGVybWluYXRlIHRoZSBpc29sYXRlLgogICAqCiAgICogVGhpcyBjYXBhYmlsaXR5IGlzIHJlcXVpcmVkIGJ5IFtraWxsXSBhbmQgW3NldEVycm9yc0ZhdGFsXS4KICAgKiBJZiB0aGUgY2FwYWJpbGl0eSBpcyBgbnVsbGAsIG9yIGlmIGl0IGlzIG5vdCB0aGUgY29ycmVjdCB0ZXJtaW5hdGlvbgogICAqIGNhcGFiaWxpdHkgb2YgdGhlIGlzb2xhdGUgaWRlbnRpZmllZCBieSBbY29udHJvbFBvcnRdLAogICAqIHRoZW4gY2FsbHMgdG8gdGhvc2UgbWV0aG9kcyB3aWxsIGhhdmUgbm8gZWZmZWN0LgogICAqLwogIGZpbmFsIENhcGFiaWxpdHkgdGVybWluYXRlQ2FwYWJpbGl0eTsKCiAgLyoqCiAgICogVGhlIG5hbWUgb2YgdGhlIFtJc29sYXRlXSBkaXNwbGF5ZWQgZm9yIGRlYnVnIHB1cnBvc2VzLgogICAqCiAgICogVGhpcyBjYW4gYmUgc2V0IHVzaW5nIHRoZSBgZGVidWdOYW1lYCBwYXJhbWV0ZXIgaW4gW3NwYXduXSBhbmQgW3NwYXduVXJpXS4KICAgKgogICAqIFRoaXMgbmFtZSBkb2VzIG5vdCB1bmlxdWVseSBpZGVudGlmeSBhbiBpc29sYXRlLiBNdWx0aXBsZSBpc29sYXRlcyBpbiB0aGUKICAgKiBzYW1lIHByb2Nlc3MgbWF5IGhhdmUgdGhlIHNhbWUgYGRlYnVnTmFtZWAuCiAgICoKICAgKiBGb3IgYSBnaXZlbiBpc29sYXRlLCB0aGlzIHZhbHVlIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIHZhbHVlcyByZXR1cm5lZCBieQogICAqIGBEYXJ0X0RlYnVnTmFtZWAgaW4gdGhlIEMgZW1iZWRkaW5nIEFQSSBhbmQgdGhlIGBkZWJ1Z05hbWVgIHByb3BlcnR5IGluCiAgICogW0lzb2xhdGVNaXJyb3JdLgogICAqLwogIEBTaW5jZSgiMi4zIikKICBleHRlcm5hbCBTdHJpbmcgZ2V0IGRlYnVnTmFtZTsKCiAgLyoqCiAgICogQ3JlYXRlIGEgbmV3IFtJc29sYXRlXSBvYmplY3Qgd2l0aCBhIHJlc3RyaWN0ZWQgc2V0IG9mIGNhcGFiaWxpdGllcy4KICAgKgogICAqIFRoZSBwb3J0IHNob3VsZCBiZSBhIGNvbnRyb2wgcG9ydCBmb3IgYW4gaXNvbGF0ZSwgYXMgdGFrZW4gZnJvbQogICAqIGFub3RoZXIgYElzb2xhdGVgIG9iamVjdC4KICAgKgogICAqIFRoZSBjYXBhYmlsaXRpZXMgc2hvdWxkIGJlIHRoZSBzdWJzZXQgb2YgdGhlIGNhcGFiaWxpdGllcyB0aGF0IGFyZQogICAqIGF2YWlsYWJsZSB0byB0aGUgb3JpZ2luYWwgaXNvbGF0ZS4KICAgKiBDYXBhYmlsaXRpZXMgb2YgYW4gaXNvbGF0ZSBhcmUgbG9ja2VkIHRvIHRoYXQgaXNvbGF0ZSwgYW5kIGhhdmUgbm8gZWZmZWN0CiAgICogYW55d2hlcmUgZWxzZSwgc28gdGhlIGNhcGFiaWxpdGllcyBzaG91bGQgY29tZSBmcm9tIHRoZSBzYW1lIGlzb2xhdGUgYXMKICAgKiB0aGUgY29udHJvbCBwb3J0LgogICAqCiAgICogQ2FuIGFsc28gYmUgdXNlZCB0byBjcmVhdGUgYW4gW0lzb2xhdGVdIG9iamVjdCBmcm9tIGEgY29udHJvbCBwb3J0LCBhbmQKICAgKiBhbnkgYXZhaWxhYmxlIGNhcGFiaWxpdGllcywgdGhhdCBoYXZlIGJlZW4gc2VudCB0aHJvdWdoIGEgW1NlbmRQb3J0XS4KICAgKgogICAqIEV4YW1wbGU6CiAgICogYGBgZGFydAogICAqIElzb2xhdGUgaXNvbGF0ZSA9IGZpbmRTb21lSXNvbGF0ZSgpOwogICAqIElzb2xhdGUgcmVzdHJpY3RlZElzb2xhdGUgPSBuZXcgSXNvbGF0ZShpc29sYXRlLmNvbnRyb2xQb3J0KTsKICAgKiB1bnRydXN0ZWRDb2RlKHJlc3RyaWN0ZWRJc29sYXRlKTsKICAgKiBgYGAKICAgKiBUaGlzIGV4YW1wbGUgY3JlYXRlcyBhIG5ldyBgSXNvbGF0ZWAgb2JqZWN0IHRoYXQgY2Fubm90IGJlIHVzZWQgdG8KICAgKiBwYXVzZSBvciB0ZXJtaW5hdGUgdGhlIGlzb2xhdGUuIEFsbCB0aGUgdW50cnVzdGVkIGNvZGUgY2FuIGRvIGlzIHRvCiAgICogaW5zcGVjdCB0aGUgaXNvbGF0ZSBhbmQgc2VlIHVuY2F1Z2h0IGVycm9ycyBvciB3aGVuIGl0IHRlcm1pbmF0ZXMuCiAgICovCiAgSXNvbGF0ZSh0aGlzLmNvbnRyb2xQb3J0LCB7dGhpcy5wYXVzZUNhcGFiaWxpdHksIHRoaXMudGVybWluYXRlQ2FwYWJpbGl0eX0pOwoKICAvKioKICAgKiBSZXR1cm4gYW4gW0lzb2xhdGVdIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgaXNvbGF0ZS4KICAgKgogICAqIFRoZSBjdXJyZW50IGlzb2xhdGUgZm9yIGNvZGUgdXNpbmcgW2N1cnJlbnRdCiAgICogaXMgdGhlIGlzb2xhdGUgcnVubmluZyB0aGUgY29kZS4KICAgKgogICAqIFRoZSBpc29sYXRlIG9iamVjdCBwcm92aWRlcyB0aGUgY2FwYWJpbGl0aWVzIHJlcXVpcmVkIHRvIGluc3BlY3QsCiAgICogcGF1c2Ugb3Iga2lsbCB0aGUgaXNvbGF0ZSwgYW5kIGFsbG93cyBncmFudGluZyB0aGVzZSBjYXBhYmlsaXRpZXMKICAgKiB0byBvdGhlcnMuCiAgICoKICAgKiBJdCBpcyBwb3NzaWJsZSB0byBwYXVzZSB0aGUgY3VycmVudCBpc29sYXRlLCBidXQgZG9pbmcgc28gKndpdGhvdXQqCiAgICogZmlyc3QgcGFzc2luZyB0aGUgYWJpbGl0eSB0byByZXN1bWUgaXQgYWdhaW4gdG8gYW5vdGhlciBpc29sYXRlLAogICAqIGlzIGEgc3VyZSB3YXkgdG8gaGFuZyB5b3VyIHByb2dyYW0uCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIElzb2xhdGUgZ2V0IGN1cnJlbnQ7CgogIC8qKgogICAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgcGFja2FnZSBjb25maWd1cmF0aW9uIG9mIHRoZSBjdXJyZW50IGlzb2xhdGUsIGlmIGFueS4KICAgKgogICAqIFRoaXMgZ2V0dGVyIHJldHVybnMgYG51bGxgLCBhcyB0aGUgYHBhY2thZ2VzL2AgZGlyZWN0b3J5IGlzIG5vdCBzdXBwb3J0ZWQKICAgKiBpbiBEYXJ0IDIuCiAgICovCiAgQERlcHJlY2F0ZWQoJ3BhY2thZ2VzLyBkaXJlY3RvcnkgcmVzb2x1dGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIERhcnQgMi4nKQogIGV4dGVybmFsIHN0YXRpYyBGdXR1cmU8VXJpPiBnZXQgcGFja2FnZVJvb3Q7CgogIC8qKgogICAqIFRoZSBwYWNrYWdlIHJvb3Qgb2YgdGhlIGN1cnJlbnQgaXNvbGF0ZSwgaWYgYW55LgogICAqCiAgICogSWYgdGhlIGlzb2xhdGUgaXMgdXNpbmcgYSBbcGFja2FnZVJvb3RdIG9yIHRoZSBpc29sYXRlIGhhcyBub3QgYmVlbgogICAqIHNldHVwIGZvciBwYWNrYWdlIHJlc29sdXRpb24sIHRoaXMgZ2V0dGVyIHJldHVybnMgYG51bGxgLCBvdGhlcndpc2UgaXQKICAgKiByZXR1cm5zIHRoZSBwYWNrYWdlIGNvbmZpZyBVUkkuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxVcmk+IGdldCBwYWNrYWdlQ29uZmlnOwoKICAvKioKICAgKiBNYXBzIGEgcGFja2FnZTogVVJJIHRvIGEgbm9uLXBhY2thZ2UgVXJpLgogICAqCiAgICogSWYgdGhlcmUgaXMgbm8gdmFsaWQgbWFwcGluZyBmcm9tIHRoZSBwYWNrYWdlOiBVUkkgaW4gdGhlIGN1cnJlbnQKICAgKiBpc29sYXRlLCB0aGVuIHRoaXMgY2FsbCByZXR1cm5zIGBudWxsYC4gTm9uLXBhY2thZ2U6IFVSSXMgYXJlCiAgICogcmV0dXJuZWQgdW5tb2RpZmllZC4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgRnV0dXJlPFVyaT4gcmVzb2x2ZVBhY2thZ2VVcmkoVXJpIHBhY2thZ2VVcmkpOwoKICAvKioKICAgKiBDcmVhdGVzIGFuZCBzcGF3bnMgYW4gaXNvbGF0ZSB0aGF0IHNoYXJlcyB0aGUgc2FtZSBjb2RlIGFzIHRoZSBjdXJyZW50CiAgICogaXNvbGF0ZS4KICAgKgogICAqIFRoZSBhcmd1bWVudCBbZW50cnlQb2ludF0gc3BlY2lmaWVzIHRoZSBpbml0aWFsIGZ1bmN0aW9uIHRvIGNhbGwKICAgKiBpbiB0aGUgc3Bhd25lZCBpc29sYXRlLgogICAqIFRoZSBlbnRyeS1wb2ludCBmdW5jdGlvbiBpcyBpbnZva2VkIGluIHRoZSBuZXcgaXNvbGF0ZSB3aXRoIFttZXNzYWdlXQogICAqIGFzIHRoZSBvbmx5IGFyZ3VtZW50LgogICAqCiAgICogVGhlIGZ1bmN0aW9uIG11c3QgYmUgYSB0b3AtbGV2ZWwgZnVuY3Rpb24gb3IgYSBzdGF0aWMgbWV0aG9kCiAgICogdGhhdCBjYW4gYmUgY2FsbGVkIHdpdGggYSBzaW5nbGUgYXJndW1lbnQsCiAgICogdGhhdCBpcywgYSBjb21waWxlLXRpbWUgY29uc3RhbnQgZnVuY3Rpb24gdmFsdWUKICAgKiB3aGljaCBhY2NlcHRzIGF0IGxlYXN0IG9uZSBwb3NpdGlvbmFsIHBhcmFtZXRlcgogICAqIGFuZCBoYXMgYXQgbW9zdCBvbmUgcmVxdWlyZWQgcG9zaXRpb25hbCBwYXJhbWV0ZXIuCiAgICogVGhlIGZ1bmN0aW9uIG1heSBhY2NlcHQgYW55IG51bWJlciBvZiBvcHRpb25hbCBwYXJhbWV0ZXJzLAogICAqIGFzIGxvbmcgYXMgaXQgKmNhbiogYmUgY2FsbGVkIHdpdGgganVzdCBhIHNpbmdsZSBhcmd1bWVudC4KICAgKiBUaGUgZnVuY3Rpb24gbXVzdCBub3QgYmUgdGhlIHZhbHVlIG9mIGEgZnVuY3Rpb24gZXhwcmVzc2lvbgogICAqIG9yIGFuIGluc3RhbmNlIG1ldGhvZCB0ZWFyLW9mZi4KICAgKgogICAqIFVzdWFsbHkgdGhlIGluaXRpYWwgW21lc3NhZ2VdIGNvbnRhaW5zIGEgW1NlbmRQb3J0XSBzbwogICAqIHRoYXQgdGhlIHNwYXduZXIgYW5kIHNwYXduZWUgY2FuIGNvbW11bmljYXRlIHdpdGggZWFjaCBvdGhlci4KICAgKgogICAqIElmIHRoZSBbcGF1c2VkXSBwYXJhbWV0ZXIgaXMgc2V0IHRvIGB0cnVlYCwKICAgKiB0aGUgaXNvbGF0ZSB3aWxsIHN0YXJ0IHVwIGluIGEgcGF1c2VkIHN0YXRlLAogICAqIGp1c3QgYmVmb3JlIGNhbGxpbmcgdGhlIFtlbnRyeVBvaW50XSBmdW5jdGlvbiB3aXRoIHRoZSBbbWVzc2FnZV0sCiAgICogYXMgaWYgYnkgYW4gaW5pdGlhbCBjYWxsIG9mIGBpc29sYXRlLnBhdXNlKGlzb2xhdGUucGF1c2VDYXBhYmlsaXR5KWAuCiAgICogVG8gcmVzdW1lIHRoZSBpc29sYXRlLCBjYWxsIGBpc29sYXRlLnJlc3VtZShpc29sYXRlLnBhdXNlQ2FwYWJpbGl0eSlgLgogICAqCiAgICogSWYgdGhlIFtlcnJvcnNBcmVGYXRhbF0sIFtvbkV4aXRdIGFuZC9vciBbb25FcnJvcl0gcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQsCiAgICogdGhlIGlzb2xhdGUgd2lsbCBhY3QgYXMgaWYsIHJlc3BlY3RpdmVseSwgW3NldEVycm9yc0ZhdGFsXSwKICAgKiBbYWRkT25FeGl0TGlzdGVuZXJdIGFuZCBbYWRkRXJyb3JMaXN0ZW5lcl0gd2VyZSBjYWxsZWQgd2l0aCB0aGUKICAgKiBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciBhbmQgd2FzIHByb2Nlc3NlZCBiZWZvcmUgdGhlIGlzb2xhdGUgc3RhcnRzCiAgICogcnVubmluZy4KICAgKgogICAqIElmIFtkZWJ1Z05hbWVdIGlzIHByb3ZpZGVkLCB0aGUgc3Bhd25lZCBbSXNvbGF0ZV0gd2lsbCBiZSBpZGVudGlmaWFibGUgYnkKICAgKiB0aGlzIG5hbWUgaW4gZGVidWdnZXJzIGFuZCBsb2dnaW5nLgogICAqCiAgICogSWYgW2Vycm9yc0FyZUZhdGFsXSBpcyBvbWl0dGVkLCB0aGUgcGxhdGZvcm0gbWF5IGNob29zZSBhIGRlZmF1bHQgYmVoYXZpb3IKICAgKiBvciBpbmhlcml0IHRoZSBjdXJyZW50IGlzb2xhdGUncyBiZWhhdmlvci4KICAgKgogICAqIFlvdSBjYW4gYWxzbyBjYWxsIHRoZSBbc2V0RXJyb3JzRmF0YWxdLCBbYWRkT25FeGl0TGlzdGVuZXJdIGFuZAogICAqIFthZGRFcnJvckxpc3RlbmVyXSBtZXRob2RzIG9uIHRoZSByZXR1cm5lZCBpc29sYXRlLCBidXQgdW5sZXNzIHRoZQogICAqIGlzb2xhdGUgd2FzIHN0YXJ0ZWQgYXMgW3BhdXNlZF0sIGl0IG1heSBhbHJlYWR5IGhhdmUgdGVybWluYXRlZAogICAqIGJlZm9yZSB0aG9zZSBtZXRob2RzIGNhbiBjb21wbGV0ZS4KICAgKgogICAqIFJldHVybnMgYSBmdXR1cmUgd2hpY2ggd2lsbCBjb21wbGV0ZSB3aXRoIGFuIFtJc29sYXRlXSBpbnN0YW5jZSBpZiB0aGUKICAgKiBzcGF3bmluZyBzdWNjZWVkZWQuIEl0IHdpbGwgY29tcGxldGUgd2l0aCBhbiBlcnJvciBvdGhlcndpc2UuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxJc29sYXRlPiBzcGF3bjxUPigKICAgICAgdm9pZCBlbnRyeVBvaW50KFQgbWVzc2FnZSksIFQgbWVzc2FnZSwKICAgICAge2Jvb2wgcGF1c2VkOiBmYWxzZSwKICAgICAgYm9vbCBlcnJvcnNBcmVGYXRhbCwKICAgICAgU2VuZFBvcnQgb25FeGl0LAogICAgICBTZW5kUG9ydCBvbkVycm9yLAogICAgICBAU2luY2UoIjIuMyIpIFN0cmluZyBkZWJ1Z05hbWV9KTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhbmQgc3Bhd25zIGFuIGlzb2xhdGUgdGhhdCBydW5zIHRoZSBjb2RlIGZyb20gdGhlIGxpYnJhcnkgd2l0aAogICAqIHRoZSBzcGVjaWZpZWQgVVJJLgogICAqCiAgICogVGhlIGlzb2xhdGUgc3RhcnRzIGV4ZWN1dGluZyB0aGUgdG9wLWxldmVsIGBtYWluYCBmdW5jdGlvbiBvZiB0aGUgbGlicmFyeQogICAqIHdpdGggdGhlIGdpdmVuIFVSSS4KICAgKgogICAqIFRoZSB0YXJnZXQgYG1haW5gIG11c3QgYmUgY2FsbGFibGUgd2l0aCB6ZXJvLCBvbmUgb3IgdHdvIGFyZ3VtZW50cy4KICAgKiBFeGFtcGxlczoKICAgKgogICAqICogYG1haW4oKWAKICAgKiAqIGBtYWluKGFyZ3MpYAogICAqICogYG1haW4oYXJncywgbWVzc2FnZSlgCiAgICoKICAgKiBXaGVuIHByZXNlbnQsIHRoZSBwYXJhbWV0ZXIgYGFyZ3NgIGlzIHNldCB0byB0aGUgcHJvdmlkZWQgW2FyZ3NdIGxpc3QuCiAgICogV2hlbiBwcmVzZW50LCB0aGUgcGFyYW1ldGVyIGBtZXNzYWdlYCBpcyBzZXQgdG8gdGhlIGluaXRpYWwgW21lc3NhZ2VdLgogICAqCiAgICogSWYgdGhlIFtwYXVzZWRdIHBhcmFtZXRlciBpcyBzZXQgdG8gYHRydWVgLAogICAqIHRoZSBpc29sYXRlIHdpbGwgc3RhcnQgdXAgaW4gYSBwYXVzZWQgc3RhdGUsCiAgICogYXMgaWYgYnkgYW4gaW5pdGlhbCBjYWxsIG9mIGBpc29sYXRlLnBhdXNlKGlzb2xhdGUucGF1c2VDYXBhYmlsaXR5KWAuCiAgICogVG8gcmVzdW1lIHRoZSBpc29sYXRlLCBjYWxsIGBpc29sYXRlLnJlc3VtZShpc29sYXRlLnBhdXNlQ2FwYWJpbGl0eSlgLgogICAqCiAgICogSWYgdGhlIFtlcnJvcnNBcmVGYXRhbF0sIFtvbkV4aXRdIGFuZC9vciBbb25FcnJvcl0gcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQsCiAgICogdGhlIGlzb2xhdGUgd2lsbCBhY3QgYXMgaWYsIHJlc3BlY3RpdmVseSwgW3NldEVycm9yc0ZhdGFsXSwKICAgKiBbYWRkT25FeGl0TGlzdGVuZXJdIGFuZCBbYWRkRXJyb3JMaXN0ZW5lcl0gd2VyZSBjYWxsZWQgd2l0aCB0aGUKICAgKiBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciBhbmQgd2FzIHByb2Nlc3NlZCBiZWZvcmUgdGhlIGlzb2xhdGUgc3RhcnRzCiAgICogcnVubmluZy4KICAgKgogICAqIFlvdSBjYW4gYWxzbyBjYWxsIHRoZSBbc2V0RXJyb3JzRmF0YWxdLCBbYWRkT25FeGl0TGlzdGVuZXJdIGFuZAogICAqIFthZGRFcnJvckxpc3RlbmVyXSBtZXRob2RzIG9uIHRoZSByZXR1cm5lZCBpc29sYXRlLCBidXQgdW5sZXNzIHRoZQogICAqIGlzb2xhdGUgd2FzIHN0YXJ0ZWQgYXMgW3BhdXNlZF0sIGl0IG1heSBhbHJlYWR5IGhhdmUgdGVybWluYXRlZAogICAqIGJlZm9yZSB0aG9zZSBtZXRob2RzIGNhbiBjb21wbGV0ZS4KICAgKgogICAqIElmIHRoZSBbY2hlY2tlZF0gcGFyYW1ldGVyIGlzIHNldCB0byBgdHJ1ZWAgb3IgYGZhbHNlYCwKICAgKiB0aGUgbmV3IGlzb2xhdGUgd2lsbCBydW4gY29kZSBpbiBjaGVja2VkIG1vZGUgKGVuYWJsaW5nIGFzc2VydHMgYW5kIHR5cGUKICAgKiBjaGVja3MpLCByZXNwZWN0aXZlbHkgaW4gcHJvZHVjdGlvbiBtb2RlIChkaXNhYmxpbmcgYXNzZXJ0cyBhbmQgdHlwZQogICAqIGNoZWNrcyksIGlmIHBvc3NpYmxlLiBJZiB0aGUgcGFyYW1ldGVyIGlzIG9taXR0ZWQsIHRoZSBuZXcgaXNvbGF0ZSB3aWxsCiAgICogaW5oZXJpdCB0aGUgdmFsdWUgZnJvbSB0aGUgY3VycmVudCBpc29sYXRlLgogICAqCiAgICogSW4gRGFydDIgc3Ryb25nIG1vZGUsIHRoZSBgY2hlY2tlZGAgcGFyYW1ldGVyIG9ubHkgY29udHJvbHMgYXNzZXJ0cywgYnV0CiAgICogbm90IHR5cGUgY2hlY2tzLgogICAqCiAgICogSXQgbWF5IG5vdCBhbHdheXMgYmUgcG9zc2libGUgdG8gaG9ub3IgdGhlIGBjaGVja2VkYCBwYXJhbWV0ZXIuCiAgICogSWYgdGhlIGlzb2xhdGUgY29kZSB3YXMgcHJlLWNvbXBpbGVkLCBpdCBtYXkgbm90IGJlIHBvc3NpYmxlIHRvIGNoYW5nZQogICAqIHRoZSBjaGVja2VkIG1vZGUgc2V0dGluZyBkeW5hbWljYWxseS4KICAgKiBJbiB0aGF0IGNhc2UsIHRoZSBgY2hlY2tlZGAgcGFyYW1ldGVyIGlzIGlnbm9yZWQuCiAgICoKICAgKiBXQVJOSU5HOiBUaGUgW2NoZWNrZWRdIHBhcmFtZXRlciBpcyBub3QgaW1wbGVtZW50ZWQgb24gYWxsIHBsYXRmb3JtcyB5ZXQuCiAgICoKICAgKiBJZiB0aGUgW3BhY2thZ2VDb25maWddIHBhcmFtZXRlciBpcyBwcm92aWRlZCwgdGhlbiBpdCBpcyB1c2VkIHRvIGZpbmQgdGhlCiAgICogbG9jYXRpb24gb2YgYSBwYWNrYWdlIHJlc29sdXRpb24gY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgc3Bhd25lZAogICAqIGlzb2xhdGUuCiAgICoKICAgKiBJZiB0aGUgW2F1dG9tYXRpY1BhY2thZ2VSZXNvbHV0aW9uXSBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQsIHRoZW4gdGhlCiAgICogbG9jYXRpb24gb2YgdGhlIHBhY2thZ2Ugc291cmNlcyBpbiB0aGUgc3Bhd25lZCBpc29sYXRlIGlzIGF1dG9tYXRpY2FsbHkKICAgKiBkZXRlcm1pbmVkLgogICAqCiAgICogVGhlIFtlbnZpcm9ubWVudF0gaXMgYSBtYXBwaW5nIGZyb20gc3RyaW5ncyB0byBzdHJpbmdzIHdoaWNoIHRoZQogICAqIHNwYXduZWQgaXNvbGF0ZSB1c2VzIHdoZW4gbG9va2luZyB1cCBbU3RyaW5nLmZyb21FbnZpcm9ubWVudF0gdmFsdWVzLgogICAqIFRoZSBzeXN0ZW0gbWF5IGFkZCBpdHMgb3duIGVudHJpZXMgdG8gZW52aXJvbm1lbnQgYXMgd2VsbC4KICAgKiBJZiBgZW52aXJvbm1lbnRgIGlzIG9taXR0ZWQsIHRoZSBzcGF3bmVkIGlzb2xhdGUgaGFzIHRoZSBzYW1lIGVudmlyb25tZW50CiAgICogZGVjbGFyYXRpb25zIGFzIHRoZSBzcGF3bmluZyBpc29sYXRlLgogICAqCiAgICogV0FSTklORzogVGhlIFtlbnZpcm9ubWVudF0gcGFyYW1ldGVyIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBhbGwKICAgKiBwbGF0Zm9ybXMgeWV0LgogICAqCiAgICogSWYgW2RlYnVnTmFtZV0gaXMgcHJvdmlkZWQsIHRoZSBzcGF3bmVkIFtJc29sYXRlXSB3aWxsIGJlIGlkZW50aWZpYWJsZSBieQogICAqIHRoaXMgbmFtZSBpbiBkZWJ1Z2dlcnMgYW5kIGxvZ2dpbmcuCiAgICoKICAgKiBSZXR1cm5zIGEgZnV0dXJlIHRoYXQgd2lsbCBjb21wbGV0ZSB3aXRoIGFuIFtJc29sYXRlXSBpbnN0YW5jZSBpZiB0aGUKICAgKiBzcGF3bmluZyBzdWNjZWVkZWQuIEl0IHdpbGwgY29tcGxldGUgd2l0aCBhbiBlcnJvciBvdGhlcndpc2UuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxJc29sYXRlPiBzcGF3blVyaSgKICAgICAgVXJpIHVyaSwKICAgICAgTGlzdDxTdHJpbmc+IGFyZ3MsCiAgICAgIHZhciBtZXNzYWdlLAogICAgICB7Ym9vbCBwYXVzZWQ6IGZhbHNlLAogICAgICBTZW5kUG9ydCBvbkV4aXQsCiAgICAgIFNlbmRQb3J0IG9uRXJyb3IsCiAgICAgIGJvb2wgZXJyb3JzQXJlRmF0YWwsCiAgICAgIGJvb2wgY2hlY2tlZCwKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCwKICAgICAgQERlcHJlY2F0ZWQoJ1RoZSBwYWNrYWdlcy8gZGlyIGlzIG5vdCBzdXBwb3J0ZWQgaW4gRGFydCAyJykKICAgICAgICAgIFVyaSBwYWNrYWdlUm9vdCwKICAgICAgVXJpIHBhY2thZ2VDb25maWcsCiAgICAgIGJvb2wgYXV0b21hdGljUGFja2FnZVJlc29sdXRpb246IGZhbHNlLAogICAgICBAU2luY2UoIjIuMyIpCiAgICAgICAgICBTdHJpbmcgZGVidWdOYW1lfSk7CgogIC8qKgogICAqIFJlcXVlc3RzIHRoZSBpc29sYXRlIHRvIHBhdXNlLgogICAqCiAgICogV2hlbiB0aGUgaXNvbGF0ZSByZWNlaXZlcyB0aGUgcGF1c2UgY29tbWFuZCwgaXQgc3RvcHMKICAgKiBwcm9jZXNzaW5nIGV2ZW50cyBmcm9tIHRoZSBldmVudCBsb29wIHF1ZXVlLgogICAqIEl0IG1heSBzdGlsbCBhZGQgbmV3IGV2ZW50cyB0byB0aGUgcXVldWUgaW4gcmVzcG9uc2UgdG8sIGUuZy4sIHRpbWVycwogICAqIG9yIHJlY2VpdmUtcG9ydCBtZXNzYWdlcy4gV2hlbiB0aGUgaXNvbGF0ZSBpcyByZXN1bWVkLAogICAqIGl0IHN0YXJ0cyBoYW5kbGluZyB0aGUgYWxyZWFkeSBlbnF1ZXVlZCBldmVudHMuCiAgICoKICAgKiBUaGUgcGF1c2UgcmVxdWVzdCBpcyBzZW50IHRocm91Z2ggdGhlIGlzb2xhdGUncyBjb21tYW5kIHBvcnQsCiAgICogd2hpY2ggYnlwYXNzZXMgdGhlIHJlY2VpdmluZyBpc29sYXRlJ3MgZXZlbnQgbG9vcC4KICAgKiBUaGUgcGF1c2UgdGFrZXMgZWZmZWN0IHdoZW4gaXQgaXMgcmVjZWl2ZWQsIHBhdXNpbmcgdGhlIGV2ZW50IGxvb3AKICAgKiBhcyBpdCBpcyBhdCB0aGF0IHRpbWUuCiAgICoKICAgKiBUaGUgW3Jlc3VtZUNhcGFiaWxpdHldIGlzIHVzZWQgdG8gaWRlbnRpdHkgdGhlIHBhdXNlLAogICAqIGFuZCBtdXN0IGJlIHVzZWQgYWdhaW4gdG8gZW5kIHRoZSBwYXVzZSB1c2luZyBbcmVzdW1lXS4KICAgKiBJZiBbcmVzdW1lQ2FwYWJpbGl0eV0gaXMgb21pdHRlZCwgYSBuZXcgY2FwYWJpbGl0eSBvYmplY3QgaXMgY3JlYXRlZAogICAqIGFuZCB1c2VkIGluc3RlYWQuCiAgICoKICAgKiBJZiBhbiBpc29sYXRlIGlzIHBhdXNlZCBtb3JlIHRoYW4gb25jZSB1c2luZyB0aGUgc2FtZSBjYXBhYmlsaXR5LAogICAqIG9ubHkgb25lIHJlc3VtZSB3aXRoIHRoYXQgY2FwYWJpbGl0eSBpcyBuZWVkZWQgdG8gZW5kIHRoZSBwYXVzZS4KICAgKgogICAqIElmIGFuIGlzb2xhdGUgaXMgcGF1c2VkIHVzaW5nIG1vcmUgdGhhbiBvbmUgY2FwYWJpbGl0eSwKICAgKiBlYWNoIHBhdXNlIG11c3QgYmUgaW5kaXZpZHVhbGx5IGVuZGVkIGJlZm9yZSB0aGUgaXNvbGF0ZSByZXN1bWVzLgogICAqCiAgICogUmV0dXJucyB0aGUgY2FwYWJpbGl0eSB0aGF0IG11c3QgYmUgdXNlZCB0byBlbmQgdGhlIHBhdXNlLgogICAqIFRoaXMgaXMgZWl0aGVyIFtyZXN1bWVDYXBhYmlsaXR5XSwgb3IgYSBuZXcgY2FwYWJpbGl0eSB3aGVuCiAgICogW3Jlc3VtZUNhcGFiaWxpdHldIGlzIG9taXR0ZWQuCiAgICoKICAgKiBJZiBbcGF1c2VDYXBhYmlsaXR5XSBpcyBgbnVsbGAsIG9yIGl0J3Mgbm90IHRoZSBwYXVzZSBjYXBhYmlsaXR5CiAgICogb2YgdGhlIGlzb2xhdGUgaWRlbnRpZmllZCBieSBbY29udHJvbFBvcnRdLAogICAqIHRoZSBwYXVzZSByZXF1ZXN0IGlzIGlnbm9yZWQgYnkgdGhlIHJlY2VpdmluZyBpc29sYXRlLgogICAqLwogIENhcGFiaWxpdHkgcGF1c2UoW0NhcGFiaWxpdHkgcmVzdW1lQ2FwYWJpbGl0eV0pIHsKICAgIHJlc3VtZUNhcGFiaWxpdHkgPz89IG5ldyBDYXBhYmlsaXR5KCk7CiAgICBfcGF1c2UocmVzdW1lQ2FwYWJpbGl0eSk7CiAgICByZXR1cm4gcmVzdW1lQ2FwYWJpbGl0eTsKICB9CgogIC8qKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBbcGF1c2VdLiAqLwogIGV4dGVybmFsIHZvaWQgX3BhdXNlKENhcGFiaWxpdHkgcmVzdW1lQ2FwYWJpbGl0eSk7CgogIC8qKgogICAqIFJlc3VtZXMgYSBwYXVzZWQgaXNvbGF0ZS4KICAgKgogICAqIFNlbmRzIGEgbWVzc2FnZSB0byBhbiBpc29sYXRlIHJlcXVlc3RpbmcgdGhhdCBpdCBlbmRzIGEgcGF1c2UKICAgKiB0aGF0IHdhcyBwcmV2aW91c2x5IHJlcXVlc3RlZC4KICAgKgogICAqIFdoZW4gYWxsIGFjdGl2ZSBwYXVzZSByZXF1ZXN0cyBoYXZlIGJlZW4gY2FuY2VsbGVkLCB0aGUgaXNvbGF0ZQogICAqIHdpbGwgY29udGludWUgcHJvY2Vzc2luZyBldmVudHMgYW5kIGhhbmRsaW5nIG5vcm1hbCBtZXNzYWdlcy4KICAgKgogICAqIElmIHRoZSBbcmVzdW1lQ2FwYWJpbGl0eV0gaXMgbm90IG9uZSB0aGF0IGhhcyBwcmV2aW91c2x5IGJlZW4gdXNlZAogICAqIHRvIHBhdXNlIHRoZSBpc29sYXRlLCBvciBpdCBoYXMgYWxyZWFkeSBiZWVuIHVzZWQgdG8gcmVzdW1lIGZyb20KICAgKiB0aGF0IHBhdXNlLCB0aGUgcmVzdW1lIGNhbGwgaGFzIG5vIGVmZmVjdC4KICAgKi8KICBleHRlcm5hbCB2b2lkIHJlc3VtZShDYXBhYmlsaXR5IHJlc3VtZUNhcGFiaWxpdHkpOwoKICAvKioKICAgKiBSZXF1ZXN0cyBhbiBleGl0IG1lc3NhZ2Ugb24gW3Jlc3BvbnNlUG9ydF0gd2hlbiB0aGUgaXNvbGF0ZSB0ZXJtaW5hdGVzLgogICAqCiAgICogVGhlIGlzb2xhdGUgd2lsbCBzZW5kIFtyZXNwb25zZV0gYXMgYSBtZXNzYWdlIG9uIFtyZXNwb25zZVBvcnRdIGFzIHRoZSBsYXN0CiAgICogdGhpbmcgYmVmb3JlIGl0IHRlcm1pbmF0ZXMuIEl0IHdpbGwgcnVuIG5vIGZ1cnRoZXIgY29kZSBhZnRlciB0aGUgbWVzc2FnZQogICAqIGhhcyBiZWVuIHNlbnQuCiAgICoKICAgKiBBZGRpbmcgdGhlIHNhbWUgcG9ydCBtb3JlIHRoYW4gb25jZSB3aWxsIG9ubHkgY2F1c2UgaXQgdG8gcmVjZWl2ZSBvbmUgZXhpdAogICAqIG1lc3NhZ2UsIHVzaW5nIHRoZSBsYXN0IHJlc3BvbnNlIHZhbHVlIHRoYXQgd2FzIGFkZGVkLAogICAqIGFuZCBpdCBvbmx5IG5lZWRzIHRvIGJlIHJlbW92ZWQgb25jZSB1c2luZyBbcmVtb3ZlT25FeGl0TGlzdGVuZXJdLgogICAqCiAgICogSWYgdGhlIGlzb2xhdGUgaGFzIHRlcm1pbmF0ZWQgYmVmb3JlIGl0IGNhbiByZWNlaXZlIHRoaXMgcmVxdWVzdCwKICAgKiBubyBleGl0IG1lc3NhZ2Ugd2lsbCBiZSBzZW50LgogICAqCiAgICogVGhlIFtyZXNwb25zZV0gb2JqZWN0IG11c3QgZm9sbG93IHRoZSBzYW1lIHJlc3RyaWN0aW9ucyBhcyBlbmZvcmNlZCBieQogICAqIFtTZW5kUG9ydC5zZW5kXS4KICAgKiBJdCBpcyByZWNvbW1lbmRlZCB0byBvbmx5IHVzZSBzaW1wbGUgdmFsdWVzIHRoYXQgY2FuIGJlIHNlbnQgdG8gYWxsCiAgICogaXNvbGF0ZXMsIGxpa2UgYG51bGxgLCBib29sZWFucywgbnVtYmVycyBvciBzdHJpbmdzLgogICAqCiAgICogU2luY2UgaXNvbGF0ZXMgcnVuIGNvbmN1cnJlbnRseSwgaXQncyBwb3NzaWJsZSBmb3IgaXQgdG8gZXhpdCBiZWZvcmUgdGhlCiAgICogZXhpdCBsaXN0ZW5lciBpcyBlc3RhYmxpc2hlZCwgYW5kIGluIHRoYXQgY2FzZSBubyByZXNwb25zZSB3aWxsIGJlCiAgICogc2VudCBvbiBbcmVzcG9uc2VQb3J0XS4KICAgKiBUbyBhdm9pZCB0aGlzLCBlaXRoZXIgdXNlIHRoZSBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciB0byB0aGUgc3Bhd24KICAgKiBmdW5jdGlvbiwgb3Igc3RhcnQgdGhlIGlzb2xhdGUgcGF1c2VkLCBhZGQgdGhlIGxpc3RlbmVyIGFuZAogICAqIHRoZW4gcmVzdW1lIHRoZSBpc29sYXRlLgogICAqLwogIC8qIFRPRE8obHJuKTogQ2FuIHdlIGRvIGJldHRlcj8gQ2FuIHRoZSBzeXN0ZW0gcmVjb2duaXplIHRoaXMgbWVzc2FnZSBhbmQKICAgKiBzZW5kIGEgcmVwbHkgaWYgdGhlIHJlY2VpdmluZyBpc29sYXRlIGlzIGRlYWQ/CiAgICovCiAgZXh0ZXJuYWwgdm9pZCBhZGRPbkV4aXRMaXN0ZW5lcihTZW5kUG9ydCByZXNwb25zZVBvcnQsIHtPYmplY3QgcmVzcG9uc2V9KTsKCiAgLyoqCiAgICogU3RvcHMgbGlzdGVuaW5nIGZvciBleGl0IG1lc3NhZ2VzIGZyb20gdGhlIGlzb2xhdGUuCiAgICoKICAgKiBSZXF1ZXN0cyBmb3IgdGhlIGlzb2xhdGUgdG8gbm90IHNlbmQgZXhpdCBtZXNzYWdlcyBvbiBbcmVzcG9uc2VQb3J0XS4KICAgKiBJZiB0aGUgaXNvbGF0ZSBpc24ndCBleHBlY3RpbmcgdG8gc2VuZCBleGl0IG1lc3NhZ2VzIG9uIFtyZXNwb25zZVBvcnRdLAogICAqIGJlY2F1c2UgdGhlIHBvcnQgaGFzbid0IGJlZW4gYWRkZWQgdXNpbmcgW2FkZE9uRXhpdExpc3RlbmVyXSwKICAgKiBvciBiZWNhdXNlIGl0IGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZCwgdGhlIHJlcXVlc3QgaXMgaWdub3JlZC4KICAgKgogICAqIElmIHRoZSBzYW1lIHBvcnQgaGFzIGJlZW4gcGFzc2VkIHZpYSBbYWRkT25FeGl0TGlzdGVuZXJdIG1vcmUgdGhhbiBvbmNlLAogICAqIG9ubHkgb25lIGNhbGwgdG8gYHJlbW92ZU9uRXhpdExpc3RlbmVyYCBpcyBuZWVkZWQgdG8gc3RvcCBpdCBmcm9tIHJlY2VpdmluZwogICAqIGV4aXQgbWVzc2FnZXMuCiAgICoKICAgKiBDbG9zaW5nIHRoZSByZWNlaXZlIHBvcnQgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIFtyZXNwb25zZVBvcnRdIGRvZXMKICAgKiBub3Qgc3RvcCB0aGUgaXNvbGF0ZSBmcm9tIHNlbmRpbmcgdW5jYXVnaHQgZXJyb3JzLCB0aGV5IGFyZSBqdXN0IGdvaW5nIHRvCiAgICogYmUgbG9zdC4KICAgKgogICAqIEFuIGV4aXQgbWVzc2FnZSBtYXkgc3RpbGwgYmUgc2VudCBpZiB0aGUgaXNvbGF0ZSB0ZXJtaW5hdGVzCiAgICogYmVmb3JlIHRoaXMgcmVxdWVzdCBpcyByZWNlaXZlZCBhbmQgcHJvY2Vzc2VkLgogICAqLwogIGV4dGVybmFsIHZvaWQgcmVtb3ZlT25FeGl0TGlzdGVuZXIoU2VuZFBvcnQgcmVzcG9uc2VQb3J0KTsKCiAgLyoqCiAgICogU2V0cyB3aGV0aGVyIHVuY2F1Z2h0IGVycm9ycyB3aWxsIHRlcm1pbmF0ZSB0aGUgaXNvbGF0ZS4KICAgKgogICAqIElmIGVycm9ycyBhcmUgZmF0YWwsIGFueSB1bmNhdWdodCBlcnJvciB3aWxsIHRlcm1pbmF0ZSB0aGUgaXNvbGF0ZQogICAqIGV2ZW50IGxvb3AgYW5kIHNodXQgZG93biB0aGUgaXNvbGF0ZS4KICAgKgogICAqIFRoaXMgY2FsbCByZXF1aXJlcyB0aGUgW3Rlcm1pbmF0ZUNhcGFiaWxpdHldIGZvciB0aGUgaXNvbGF0ZS4KICAgKiBJZiB0aGUgY2FwYWJpbGl0eSBpcyBhYnNlbnQgb3IgaW5jb3JyZWN0LCBubyBjaGFuZ2UgaXMgbWFkZS4KICAgKgogICAqIFNpbmNlIGlzb2xhdGVzIHJ1biBjb25jdXJyZW50bHksIGl0J3MgcG9zc2libGUgZm9yIHRoZSByZWNlaXZpbmcgaXNvbGF0ZQogICAqIHRvIGV4aXQgZHVlIHRvIGFuIGVycm9yLCBiZWZvcmUgYSByZXF1ZXN0LCB1c2luZyB0aGlzIG1ldGhvZCwgaGFzIGJlZW4KICAgKiByZWNlaXZlZCBhbmQgcHJvY2Vzc2VkLgogICAqIFRvIGF2b2lkIHRoaXMsIGVpdGhlciB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVyIHRvIHRoZSBzcGF3bgogICAqIGZ1bmN0aW9uLCBvciBzdGFydCB0aGUgaXNvbGF0ZSBwYXVzZWQsIHNldCBlcnJvcnMgbm9uLWZhdGFsIGFuZAogICAqIHRoZW4gcmVzdW1lIHRoZSBpc29sYXRlLgogICAqLwogIGV4dGVybmFsIHZvaWQgc2V0RXJyb3JzRmF0YWwoYm9vbCBlcnJvcnNBcmVGYXRhbCk7CgogIC8qKgogICAqIFJlcXVlc3RzIHRoZSBpc29sYXRlIHRvIHNodXQgZG93bi4KICAgKgogICAqIFRoZSBpc29sYXRlIGlzIHJlcXVlc3RlZCB0byB0ZXJtaW5hdGUgaXRzZWxmLgogICAqIFRoZSBbcHJpb3JpdHldIGFyZ3VtZW50IHNwZWNpZmllcyB3aGVuIHRoaXMgbXVzdCBoYXBwZW4uCiAgICoKICAgKiBUaGUgW3ByaW9yaXR5XSwgd2hlbiBwcm92aWRlZCwgbXVzdCBiZSBvbmUgb2YgW2ltbWVkaWF0ZV0gb3IKICAgKiBbYmVmb3JlTmV4dEV2ZW50XSAodGhlIGRlZmF1bHQpLgogICAqIFRoZSBzaHV0ZG93biBpcyBwZXJmb3JtZWQgYXQgZGlmZmVyZW50IHRpbWVzIGRlcGVuZGluZyBvbiB0aGUgcHJpb3JpdHk6CiAgICoKICAgKiAqIGBpbW1lZGlhdGVgOiBUaGUgaXNvbGF0ZSBzaHV0cyBkb3duIGFzIHNvb24gYXMgcG9zc2libGUuCiAgICogICAgIENvbnRyb2wgbWVzc2FnZXMgYXJlIGhhbmRsZWQgaW4gb3JkZXIsIHNvIGFsbCBwcmV2aW91c2x5IHNlbnQgY29udHJvbAogICAqICAgICBldmVudHMgZnJvbSB0aGlzIGlzb2xhdGUgd2lsbCBhbGwgaGF2ZSBiZWVuIHByb2Nlc3NlZC4KICAgKiAgICAgVGhlIHNodXRkb3duIHNob3VsZCBoYXBwZW4gbm8gbGF0ZXIgdGhhbiBpZiBzZW50IHdpdGgKICAgKiAgICAgYGJlZm9yZU5leHRFdmVudGAuCiAgICogICAgIEl0IG1heSBoYXBwZW4gZWFybGllciBpZiB0aGUgc3lzdGVtIGhhcyBhIHdheSB0byBzaHV0IGRvd24gY2xlYW5seQogICAqICAgICBhdCBhbiBlYXJsaWVyIHRpbWUsIGV2ZW4gZHVyaW5nIHRoZSBleGVjdXRpb24gb2YgYW5vdGhlciBldmVudC4KICAgKiAqIGBiZWZvcmVOZXh0RXZlbnRgOiBUaGUgc2h1dGRvd24gaXMgc2NoZWR1bGVkIGZvciB0aGUgbmV4dCB0aW1lCiAgICogICAgIGNvbnRyb2wgcmV0dXJucyB0byB0aGUgZXZlbnQgbG9vcCBvZiB0aGUgcmVjZWl2aW5nIGlzb2xhdGUsCiAgICogICAgIGFmdGVyIHRoZSBjdXJyZW50IGV2ZW50LCBhbmQgYW55IGFscmVhZHkgc2NoZWR1bGVkIGNvbnRyb2wgZXZlbnRzLAogICAqICAgICBhcmUgY29tcGxldGVkLgogICAqCiAgICogSWYgW3Rlcm1pbmF0ZUNhcGFiaWxpdHldIGlzIGBudWxsYCwgb3IgaXQncyBub3QgdGhlIHRlcm1pbmF0ZSBjYXBhYmlsaXR5CiAgICogb2YgdGhlIGlzb2xhdGUgaWRlbnRpZmllZCBieSBbY29udHJvbFBvcnRdLAogICAqIHRoZSBraWxsIHJlcXVlc3QgaXMgaWdub3JlZCBieSB0aGUgcmVjZWl2aW5nIGlzb2xhdGUuCiAgICovCiAgZXh0ZXJuYWwgdm9pZCBraWxsKHtpbnQgcHJpb3JpdHk6IGJlZm9yZU5leHRFdmVudH0pOwoKICAvKioKICAgKiBSZXF1ZXN0cyB0aGF0IHRoZSBpc29sYXRlIHNlbmQgW3Jlc3BvbnNlXSBvbiB0aGUgW3Jlc3BvbnNlUG9ydF0uCiAgICoKICAgKiBUaGUgW3Jlc3BvbnNlXSBvYmplY3QgbXVzdCBmb2xsb3cgdGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIGVuZm9yY2VkIGJ5CiAgICogW1NlbmRQb3J0LnNlbmRdLgogICAqIEl0IGlzIHJlY29tbWVuZGVkIHRvIG9ubHkgdXNlIHNpbXBsZSB2YWx1ZXMgdGhhdCBjYW4gYmUgc2VudCB0byBhbGwKICAgKiBpc29sYXRlcywgbGlrZSBgbnVsbGAsIGJvb2xlYW5zLCBudW1iZXJzIG9yIHN0cmluZ3MuCiAgICoKICAgKiBJZiB0aGUgaXNvbGF0ZSBpcyBhbGl2ZSwgaXQgd2lsbCBldmVudHVhbGx5IHNlbmQgYHJlc3BvbnNlYAogICAqIChkZWZhdWx0aW5nIHRvIGBudWxsYCkgb24gdGhlIHJlc3BvbnNlIHBvcnQuCiAgICoKICAgKiBUaGUgW3ByaW9yaXR5XSBtdXN0IGJlIG9uZSBvZiBbaW1tZWRpYXRlXSBvciBbYmVmb3JlTmV4dEV2ZW50XS4KICAgKiBUaGUgcmVzcG9uc2UgaXMgc2VudCBhdCBkaWZmZXJlbnQgdGltZXMgZGVwZW5kaW5nIG9uIHRoZSBwaW5nIHR5cGU6CiAgICoKICAgKiAqIGBpbW1lZGlhdGVgOiBUaGUgaXNvbGF0ZSByZXNwb25kcyBhcyBzb29uIGFzIGl0IHJlY2VpdmVzIHRoZQogICAqICAgICBjb250cm9sIG1lc3NhZ2UuIFRoaXMgaXMgYWZ0ZXIgYW55IHByZXZpb3VzIGNvbnRyb2wgbWVzc2FnZQogICAqICAgICBmcm9tIHRoZSBzYW1lIGlzb2xhdGUgaGFzIGJlZW4gcmVjZWl2ZWQgYW5kIHByb2Nlc3NlZCwKICAgKiAgICAgYnV0IG1heSBiZSBkdXJpbmcgZXhlY3V0aW9uIG9mIGFub3RoZXIgZXZlbnQuCiAgICogKiBgYmVmb3JlTmV4dEV2ZW50YDogVGhlIHJlc3BvbnNlIGlzIHNjaGVkdWxlZCBmb3IgdGhlIG5leHQgdGltZQogICAqICAgICBjb250cm9sIHJldHVybnMgdG8gdGhlIGV2ZW50IGxvb3Agb2YgdGhlIHJlY2VpdmluZyBpc29sYXRlLAogICAqICAgICBhZnRlciB0aGUgY3VycmVudCBldmVudCwgYW5kIGFueSBhbHJlYWR5IHNjaGVkdWxlZCBjb250cm9sIGV2ZW50cywKICAgKiAgICAgYXJlIGNvbXBsZXRlZC4KICAgKi8KICBleHRlcm5hbCB2b2lkIHBpbmcoU2VuZFBvcnQgcmVzcG9uc2VQb3J0LAogICAgICB7T2JqZWN0IHJlc3BvbnNlLCBpbnQgcHJpb3JpdHk6IGltbWVkaWF0ZX0pOwoKICAvKioKICAgKiBSZXF1ZXN0cyB0aGF0IHVuY2F1Z2h0IGVycm9ycyBvZiB0aGUgaXNvbGF0ZSBhcmUgc2VudCBiYWNrIHRvIFtwb3J0XS4KICAgKgogICAqIFRoZSBlcnJvcnMgYXJlIHNlbnQgYmFjayBhcyB0d28gZWxlbWVudHMgbGlzdHMuCiAgICogVGhlIGZpcnN0IGVsZW1lbnQgaXMgYSBgU3RyaW5nYCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXJyb3IsIHVzdWFsbHkKICAgKiBjcmVhdGVkIGJ5IGNhbGxpbmcgYHRvU3RyaW5nYCBvbiB0aGUgZXJyb3IuCiAgICogVGhlIHNlY29uZCBlbGVtZW50IGlzIGEgYFN0cmluZ2AgcmVwcmVzZW50YXRpb24gb2YgYW4gYWNjb21wYW55aW5nCiAgICogc3RhY2sgdHJhY2UsIG9yIGBudWxsYCBpZiBubyBzdGFjayB0cmFjZSB3YXMgcHJvdmlkZWQuCiAgICogVG8gY29udmVydCB0aGlzIGJhY2sgdG8gYSBbU3RhY2tUcmFjZV0gb2JqZWN0LCB1c2UgW1N0YWNrVHJhY2UuZnJvbVN0cmluZ10uCiAgICoKICAgKiBMaXN0ZW5pbmcgdXNpbmcgdGhlIHNhbWUgcG9ydCBtb3JlIHRoYW4gb25jZSBkb2VzIG5vdGhpbmcuCiAgICogQSBwb3J0IHdpbGwgb25seSByZWNlaXZlIGVhY2ggZXJyb3Igb25jZSwKICAgKiBhbmQgd2lsbCBvbmx5IG5lZWQgdG8gYmUgcmVtb3ZlZCBvbmNlIHVzaW5nIFtyZW1vdmVFcnJvckxpc3RlbmVyXS4KCiAgICogQ2xvc2luZyB0aGUgcmVjZWl2ZSBwb3J0IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBwb3J0IGRvZXMgbm90IHN0b3AKICAgKiB0aGUgaXNvbGF0ZSBmcm9tIHNlbmRpbmcgdW5jYXVnaHQgZXJyb3JzLCB0aGV5IGFyZSBqdXN0IGdvaW5nIHRvIGJlIGxvc3QuCiAgICogSW5zdGVhZCB1c2UgW3JlbW92ZUVycm9yTGlzdGVuZXJdIHRvIHN0b3AgcmVjZWl2aW5nIGVycm9ycyBvbiBbcG9ydF0uCiAgICoKICAgKiBTaW5jZSBpc29sYXRlcyBydW4gY29uY3VycmVudGx5LCBpdCdzIHBvc3NpYmxlIGZvciBpdCB0byBleGl0IGJlZm9yZSB0aGUKICAgKiBlcnJvciBsaXN0ZW5lciBpcyBlc3RhYmxpc2hlZC4gVG8gYXZvaWQgdGhpcywgc3RhcnQgdGhlIGlzb2xhdGUgcGF1c2VkLAogICAqIGFkZCB0aGUgbGlzdGVuZXIgYW5kIHRoZW4gcmVzdW1lIHRoZSBpc29sYXRlLgogICAqLwogIGV4dGVybmFsIHZvaWQgYWRkRXJyb3JMaXN0ZW5lcihTZW5kUG9ydCBwb3J0KTsKCiAgLyoqCiAgICogU3RvcHMgbGlzdGVuaW5nIGZvciB1bmNhdWdodCBlcnJvcnMgZnJvbSB0aGUgaXNvbGF0ZS4KICAgKgogICAqIFJlcXVlc3RzIGZvciB0aGUgaXNvbGF0ZSB0byBub3Qgc2VuZCB1bmNhdWdodCBlcnJvcnMgb24gW3BvcnRdLgogICAqIElmIHRoZSBpc29sYXRlIGlzbid0IGV4cGVjdGluZyB0byBzZW5kIHVuY2F1Z2h0IGVycm9ycyBvbiBbcG9ydF0sCiAgICogYmVjYXVzZSB0aGUgcG9ydCBoYXNuJ3QgYmVlbiBhZGRlZCB1c2luZyBbYWRkRXJyb3JMaXN0ZW5lcl0sCiAgICogb3IgYmVjYXVzZSBpdCBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQsIHRoZSByZXF1ZXN0IGlzIGlnbm9yZWQuCiAgICoKICAgKiBJZiB0aGUgc2FtZSBwb3J0IGhhcyBiZWVuIHBhc3NlZCB2aWEgW2FkZEVycm9yTGlzdGVuZXJdIG1vcmUgdGhhbiBvbmNlLAogICAqIG9ubHkgb25lIGNhbGwgdG8gYHJlbW92ZUVycm9yTGlzdGVuZXJgIGlzIG5lZWRlZCB0byBzdG9wIGl0IGZyb20gcmVjZWl2aW5nCiAgICogdW5jYXVnaHQgZXJyb3JzLgogICAqCiAgICogVW5jYXVnaHQgZXJyb3JzIG1lc3NhZ2UgbWF5IHN0aWxsIGJlIHNlbnQgYnkgdGhlIGlzb2xhdGUKICAgKiB1bnRpbCB0aGlzIHJlcXVlc3QgaXMgcmVjZWl2ZWQgYW5kIHByb2Nlc3NlZC4KICAgKi8KICBleHRlcm5hbCB2b2lkIHJlbW92ZUVycm9yTGlzdGVuZXIoU2VuZFBvcnQgcG9ydCk7CgogIC8qKgogICAqIFJldHVybnMgYSBicm9hZGNhc3Qgc3RyZWFtIG9mIHVuY2F1Z2h0IGVycm9ycyBmcm9tIHRoZSBpc29sYXRlLgogICAqCiAgICogRWFjaCBlcnJvciBpcyBwcm92aWRlZCBhcyBhbiBlcnJvciBldmVudCBvbiB0aGUgc3RyZWFtLgogICAqCiAgICogVGhlIGFjdHVhbCBlcnJvciBvYmplY3QgYW5kIHN0YWNrVHJhY2VzIHdpbGwgbm90IG5lY2Vzc2FyaWx5CiAgICogYmUgdGhlIHNhbWUgb2JqZWN0IHR5cGVzIGFzIGluIHRoZSBhY3R1YWwgaXNvbGF0ZSwgYnV0IHRoZXkgd2lsbAogICAqIGFsd2F5cyBoYXZlIHRoZSBzYW1lIFtPYmplY3QudG9TdHJpbmddIHJlc3VsdC4KICAgKgogICAqIFRoaXMgc3RyZWFtIGlzIGJhc2VkIG9uIFthZGRFcnJvckxpc3RlbmVyXSBhbmQgW3JlbW92ZUVycm9yTGlzdGVuZXJdLgogICAqLwogIFN0cmVhbSBnZXQgZXJyb3JzIHsKICAgIFN0cmVhbUNvbnRyb2xsZXIgY29udHJvbGxlcjsKICAgIFJhd1JlY2VpdmVQb3J0IHBvcnQ7CiAgICB2b2lkIGhhbmRsZUVycm9yKG1lc3NhZ2UpIHsKICAgICAgTGlzdCBsaXN0TWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgIFN0cmluZyBlcnJvckRlc2NyaXB0aW9uID0gbGlzdE1lc3NhZ2VbMF07CiAgICAgIFN0cmluZyBzdGFja0Rlc2NyaXB0aW9uID0gbGlzdE1lc3NhZ2VbMV07CiAgICAgIHZhciBlcnJvciA9IG5ldyBSZW1vdGVFcnJvcihlcnJvckRlc2NyaXB0aW9uLCBzdGFja0Rlc2NyaXB0aW9uKTsKICAgICAgY29udHJvbGxlci5hZGRFcnJvcihlcnJvciwgZXJyb3Iuc3RhY2tUcmFjZSk7CiAgICB9CgogICAgY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyLmJyb2FkY2FzdCgKICAgICAgICBzeW5jOiB0cnVlLAogICAgICAgIG9uTGlzdGVuOiAoKSB7CiAgICAgICAgICBwb3J0ID0gbmV3IFJhd1JlY2VpdmVQb3J0KGhhbmRsZUVycm9yKTsKICAgICAgICAgIHRoaXMuYWRkRXJyb3JMaXN0ZW5lcihwb3J0LnNlbmRQb3J0KTsKICAgICAgICB9LAogICAgICAgIG9uQ2FuY2VsOiAoKSB7CiAgICAgICAgICB0aGlzLnJlbW92ZUVycm9yTGlzdGVuZXIocG9ydC5zZW5kUG9ydCk7CiAgICAgICAgICBwb3J0LmNsb3NlKCk7CiAgICAgICAgICBwb3J0ID0gbnVsbDsKICAgICAgICB9KTsKICAgIHJldHVybiBjb250cm9sbGVyLnN0cmVhbTsKICB9Cn0KCi8qKgogKiBTZW5kcyBtZXNzYWdlcyB0byBpdHMgW1JlY2VpdmVQb3J0XXMuCiAqCiAqIFtTZW5kUG9ydF1zIGFyZSBjcmVhdGVkIGZyb20gW1JlY2VpdmVQb3J0XXMuIEFueSBtZXNzYWdlIHNlbnQgdGhyb3VnaAogKiBhIFtTZW5kUG9ydF0gaXMgZGVsaXZlcmVkIHRvIGl0cyBjb3JyZXNwb25kaW5nIFtSZWNlaXZlUG9ydF0uIFRoZXJlIG1pZ2h0IGJlCiAqIG1hbnkgW1NlbmRQb3J0XXMgZm9yIHRoZSBzYW1lIFtSZWNlaXZlUG9ydF0uCiAqCiAqIFtTZW5kUG9ydF1zIGNhbiBiZSB0cmFuc21pdHRlZCB0byBvdGhlciBpc29sYXRlcywgYW5kIHRoZXkgcHJlc2VydmUgZXF1YWxpdHkKICogd2hlbiBzZW50LgogKi8KYWJzdHJhY3QgY2xhc3MgU2VuZFBvcnQgaW1wbGVtZW50cyBDYXBhYmlsaXR5IHsKICAvKioKICAgKiBTZW5kcyBhbiBhc3luY2hyb25vdXMgW21lc3NhZ2VdIHRocm91Z2ggdGhpcyBzZW5kIHBvcnQsIHRvIGl0cwogICAqIGNvcnJlc3BvbmRpbmcgYFJlY2VpdmVQb3J0YC4KICAgKgogICAqIFRoZSBjb250ZW50IG9mIFttZXNzYWdlXSBjYW4gYmU6IHByaW1pdGl2ZSB2YWx1ZXMgKG51bGwsIG51bSwgYm9vbCwgZG91YmxlLAogICAqIFN0cmluZyksIGluc3RhbmNlcyBvZiBbU2VuZFBvcnRdLCBhbmQgbGlzdHMgYW5kIG1hcHMgd2hvc2UgZWxlbWVudHMgYXJlIGFueQogICAqIG9mIHRoZXNlLiBMaXN0IGFuZCBtYXBzIGFyZSBhbHNvIGFsbG93ZWQgdG8gYmUgY3ljbGljLgogICAqCiAgICogSW4gdGhlIHNwZWNpYWwgY2lyY3Vtc3RhbmNlcyB3aGVuIHR3byBpc29sYXRlcyBzaGFyZSB0aGUgc2FtZSBjb2RlIGFuZCBhcmUKICAgKiBydW5uaW5nIGluIHRoZSBzYW1lIHByb2Nlc3MgKGUuZy4gaXNvbGF0ZXMgY3JlYXRlZCB2aWEgW0lzb2xhdGUuc3Bhd25dKSwgaXQKICAgKiBpcyBhbHNvIHBvc3NpYmxlIHRvIHNlbmQgb2JqZWN0IGluc3RhbmNlcyAod2hpY2ggd291bGQgYmUgY29waWVkIGluIHRoZQogICAqIHByb2Nlc3MpLiBUaGlzIGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBieSB0aGUgZGFydCB2bS4KICAgKgogICAqIFRoZSBzZW5kIGhhcHBlbnMgaW1tZWRpYXRlbHkgYW5kIGRvZXNuJ3QgYmxvY2suICBUaGUgY29ycmVzcG9uZGluZyByZWNlaXZlCiAgICogcG9ydCBjYW4gcmVjZWl2ZSB0aGUgbWVzc2FnZSBhcyBzb29uIGFzIGl0cyBpc29sYXRlJ3MgZXZlbnQgbG9vcCBpcyByZWFkeQogICAqIHRvIGRlbGl2ZXIgaXQsIGluZGVwZW5kZW50bHkgb2Ygd2hhdCB0aGUgc2VuZGluZyBpc29sYXRlIGlzIGRvaW5nLgogICAqLwogIHZvaWQgc2VuZCh2YXIgbWVzc2FnZSk7CgogIC8qKgogICAqIFRlc3RzIHdoZXRoZXIgW290aGVyXSBpcyBhIFtTZW5kUG9ydF0gcG9pbnRpbmcgdG8gdGhlIHNhbWUKICAgKiBbUmVjZWl2ZVBvcnRdIGFzIHRoaXMgb25lLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPT0odmFyIG90aGVyKTsKCiAgLyoqCiAgICogUmV0dXJucyBhbiBpbW11dGFibGUgaGFzaCBjb2RlIGZvciB0aGlzIHNlbmQgcG9ydCB0aGF0IGlzCiAgICogY29uc2lzdGVudCB3aXRoIHRoZSA9PSBvcGVyYXRvci4KICAgKi8KICBpbnQgZ2V0IGhhc2hDb2RlOwp9CgovKioKICogVG9nZXRoZXIgd2l0aCBbU2VuZFBvcnRdLCB0aGUgb25seSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIGJldHdlZW4gaXNvbGF0ZXMuCiAqCiAqIFtSZWNlaXZlUG9ydF1zIGhhdmUgYSBgc2VuZFBvcnRgIGdldHRlciB3aGljaCByZXR1cm5zIGEgW1NlbmRQb3J0XS4KICogQW55IG1lc3NhZ2UgdGhhdCBpcyBzZW50IHRocm91Z2ggdGhpcyBbU2VuZFBvcnRdCiAqIGlzIGRlbGl2ZXJlZCB0byB0aGUgW1JlY2VpdmVQb3J0XSBpdCBoYXMgYmVlbiBjcmVhdGVkIGZyb20uIFRoZXJlLCB0aGUKICogbWVzc2FnZSBpcyBkaXNwYXRjaGVkIHRvIHRoZSBgUmVjZWl2ZVBvcnRgJ3MgbGlzdGVuZXIuCiAqCiAqIEEgW1JlY2VpdmVQb3J0XSBpcyBhIG5vbi1icm9hZGNhc3Qgc3RyZWFtLiBUaGlzIG1lYW5zIHRoYXQgaXQgYnVmZmVycwogKiBpbmNvbWluZyBtZXNzYWdlcyB1bnRpbCBhIGxpc3RlbmVyIGlzIHJlZ2lzdGVyZWQuIE9ubHkgb25lIGxpc3RlbmVyIGNhbgogKiByZWNlaXZlIG1lc3NhZ2VzLiBTZWUgW1N0cmVhbS5hc0Jyb2FkY2FzdFN0cmVhbV0gZm9yIHRyYW5zZm9ybWluZyB0aGUgcG9ydAogKiB0byBhIGJyb2FkY2FzdCBzdHJlYW0uCiAqCiAqIEEgW1JlY2VpdmVQb3J0XSBtYXkgaGF2ZSBtYW55IFtTZW5kUG9ydF1zLgogKi8KYWJzdHJhY3QgY2xhc3MgUmVjZWl2ZVBvcnQgaW1wbGVtZW50cyBTdHJlYW0gewogIC8qKgogICAqIE9wZW5zIGEgbG9uZy1saXZlZCBwb3J0IGZvciByZWNlaXZpbmcgbWVzc2FnZXMuCiAgICoKICAgKiBBIFtSZWNlaXZlUG9ydF0gaXMgYSBub24tYnJvYWRjYXN0IHN0cmVhbS4gVGhpcyBtZWFucyB0aGF0IGl0IGJ1ZmZlcnMKICAgKiBpbmNvbWluZyBtZXNzYWdlcyB1bnRpbCBhIGxpc3RlbmVyIGlzIHJlZ2lzdGVyZWQuIE9ubHkgb25lIGxpc3RlbmVyIGNhbgogICAqIHJlY2VpdmUgbWVzc2FnZXMuIFNlZSBbU3RyZWFtLmFzQnJvYWRjYXN0U3RyZWFtXSBmb3IgdHJhbnNmb3JtaW5nIHRoZSBwb3J0CiAgICogdG8gYSBicm9hZGNhc3Qgc3RyZWFtLgogICAqCiAgICogQSByZWNlaXZlIHBvcnQgaXMgY2xvc2VkIGJ5IGNhbmNlbGluZyBpdHMgc3Vic2NyaXB0aW9uLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgUmVjZWl2ZVBvcnQoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtSZWNlaXZlUG9ydF0gZnJvbSBhIFtSYXdSZWNlaXZlUG9ydF0uCiAgICoKICAgKiBUaGUgaGFuZGxlciBvZiB0aGUgZ2l2ZW4gW3Jhd1BvcnRdIGlzIG92ZXJ3cml0dGVuIGR1cmluZyB0aGUgY29uc3RydWN0aW9uCiAgICogb2YgdGhlIHJlc3VsdC4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IFJlY2VpdmVQb3J0LmZyb21SYXdSZWNlaXZlUG9ydChSYXdSZWNlaXZlUG9ydCByYXdQb3J0KTsKCiAgLyoqCiAgICogSW5oZXJpdGVkIGZyb20gW1N0cmVhbV0uCiAgICoKICAgKiBOb3RlIHRoYXQgW29uRXJyb3JdIGFuZCBbY2FuY2VsT25FcnJvcl0gYXJlIGlnbm9yZWQgc2luY2UgYSBSZWNlaXZlUG9ydAogICAqIHdpbGwgbmV2ZXIgcmVjZWl2ZSBhbiBlcnJvci4KICAgKgogICAqIFRoZSBbb25Eb25lXSBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHN0cmVhbSBjbG9zZXMuCiAgICogVGhlIHN0cmVhbSBjbG9zZXMgd2hlbiBbY2xvc2VdIGlzIGNhbGxlZC4KICAgKi8KICBTdHJlYW1TdWJzY3JpcHRpb24gbGlzdGVuKHZvaWQgb25EYXRhKHZhciBtZXNzYWdlKSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pOwoKICAvKioKICAgKiBDbG9zZXMgYHRoaXNgLgogICAqCiAgICogSWYgdGhlIHN0cmVhbSBoYXMgbm90IGJlZW4gY2FuY2VsZWQgeWV0LCBhZGRzIGEgY2xvc2UtZXZlbnQgdG8gdGhlIGV2ZW50CiAgICogcXVldWUgYW5kIGRpc2NhcmRzIGFueSBmdXJ0aGVyIGluY29taW5nIG1lc3NhZ2VzLgogICAqCiAgICogSWYgdGhlIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGNhbmNlbGVkIHRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QuCiAgICovCiAgdm9pZCBjbG9zZSgpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgW1NlbmRQb3J0XSB0aGF0IHNlbmRzIHRvIHRoaXMgcmVjZWl2ZSBwb3J0LgogICAqLwogIFNlbmRQb3J0IGdldCBzZW5kUG9ydDsKfQoKYWJzdHJhY3QgY2xhc3MgUmF3UmVjZWl2ZVBvcnQgewogIC8qKgogICAqIE9wZW5zIGEgbG9uZy1saXZlZCBwb3J0IGZvciByZWNlaXZpbmcgbWVzc2FnZXMuCiAgICoKICAgKiBBIFtSYXdSZWNlaXZlUG9ydF0gaXMgbG93IGxldmVsIGFuZCBkb2VzIG5vdCB3b3JrIHdpdGggW1pvbmVdcy4gSXQKICAgKiBjYW4gbm90IGJlIHBhdXNlZC4gVGhlIGRhdGEtaGFuZGxlciBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIGZpcnN0CiAgICogZXZlbnQgaXMgcmVjZWl2ZWQuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBSYXdSZWNlaXZlUG9ydChbRnVuY3Rpb24gaGFuZGxlcl0pOwoKICAvKioKICAgKiBTZXRzIHRoZSBoYW5kbGVyIHRoYXQgaXMgaW52b2tlZCBmb3IgZXZlcnkgaW5jb21pbmcgbWVzc2FnZS4KICAgKgogICAqIFRoZSBoYW5kbGVyIGlzIGludm9rZWQgaW4gdGhlIHJvb3Qtem9uZSAoW1pvbmUucm9vdF0pLgogICAqLwogIHZvaWQgc2V0IGhhbmRsZXIoRnVuY3Rpb24gbmV3SGFuZGxlcik7CgogIC8qKgogICAqIENsb3NlcyB0aGUgcG9ydC4KICAgKgogICAqIEFmdGVyIGEgY2FsbCB0byB0aGlzIG1ldGhvZCBhbnkgaW5jb21pbmcgbWVzc2FnZSBpcyBzaWxlbnRseSBkcm9wcGVkLgogICAqLwogIHZvaWQgY2xvc2UoKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIFtTZW5kUG9ydF0gdGhhdCBzZW5kcyB0byB0aGlzIHJhdyByZWNlaXZlIHBvcnQuCiAgICovCiAgU2VuZFBvcnQgZ2V0IHNlbmRQb3J0Owp9CgovKioKICogRGVzY3JpcHRpb24gb2YgYW4gZXJyb3IgZnJvbSBhbm90aGVyIGlzb2xhdGUuCiAqCiAqIFRoaXMgZXJyb3IgaGFzIHRoZSBzYW1lIGB0b1N0cmluZygpYCBhbmQgYHN0YWNrVHJhY2UudG9TdHJpbmcoKWAgYmVoYXZpb3IKICogYXMgdGhlIG9yaWdpbmFsIGVycm9yLCBidXQgaGFzIG5vIG90aGVyIGZlYXR1cmVzIG9mIHRoZSBvcmlnaW5hbCBlcnJvci4KICovCmNsYXNzIFJlbW90ZUVycm9yIGltcGxlbWVudHMgRXJyb3IgewogIGZpbmFsIFN0cmluZyBfZGVzY3JpcHRpb247CiAgZmluYWwgU3RhY2tUcmFjZSBzdGFja1RyYWNlOwogIFJlbW90ZUVycm9yKFN0cmluZyBkZXNjcmlwdGlvbiwgU3RyaW5nIHN0YWNrRGVzY3JpcHRpb24pCiAgICAgIDogX2Rlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24sCiAgICAgICAgc3RhY2tUcmFjZSA9IG5ldyBTdGFja1RyYWNlLmZyb21TdHJpbmcoc3RhY2tEZXNjcmlwdGlvbik7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gX2Rlc2NyaXB0aW9uOwp9CgovKioKICogQW4gZWZmaWNpZW50bHkgdHJhbnNmZXJhYmxlIHNlcXVlbmNlIG9mIGJ5dGUgdmFsdWVzLgogKgogKiBBIFtUcmFuc2ZlcmFibGVUeXBlZERhdGFdIGlzIGNyZWF0ZWQgZnJvbSBhIG51bWJlciBvZiBieXRlcy4KICogVGhpcyB3aWxsIHRha2UgdGltZSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiBieXRlcy4KICoKICogVGhlIFtUcmFuc2ZlcmFibGVUeXBlZERhdGFdIGNhbiBiZSBtb3ZlZCBiZXR3ZWVuIGlzb2xhdGVzLCBzbwogKiBzZW5kaW5nIGl0IHRocm91Z2ggYSBzZW5kIHBvcnQgd2lsbCBvbmx5IHRha2UgY29uc3RhbnQgdGltZS4KICoKICogV2hlbiBzZW50IHRoaXMgd2F5LCB0aGUgbG9jYWwgdHJhbnNmZXJhYmxlIGNhbiBubyBsb25nZXIgYmUgbWF0ZXJpYWxpemVkLAogKiBhbmQgdGhlIHJlY2VpdmVkIG9iamVjdCBpcyBub3cgdGhlIG9ubHkgd2F5IHRvIG1hdGVyaWFsaXplIHRoZSBkYXRhLgogKi8KQFNpbmNlKCIyLjMuMiIpCmFic3RyYWN0IGNsYXNzIFRyYW5zZmVyYWJsZVR5cGVkRGF0YSB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBbVHJhbnNmZXJhYmxlVHlwZWREYXRh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dGU6IHRoZSBWTSBjb25jYXRlbmF0ZXMgYWxsIHBhdGNoIGZpbGVzIGludG8gYSBzaW5nbGUgcGF0Y2ggZmlsZS4gVGhpcwovLy8gZmlsZSBpcyB0aGUgZmlyc3QgcGF0Y2ggaW4gImRhcnQ6aXNvbGF0ZSIgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBpbXBvcnRzCi8vLyB1c2VkIGJ5IHBhdGNoZXMgb2YgdGhhdCBsaWJyYXJ5LiBXZSBwbGFuIHRvIGNoYW5nZSB0aGlzIHdoZW4gd2UgaGF2ZSBhCi8vLyBzaGFyZWQgZnJvbnQgZW5kIGFuZCBzaW1wbHkgdXNlIHBhcnRzLgoKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIgc2hvdyBDbGFzc0lELCBWTUxpYnJhcnlIb29rcywgcGF0Y2g7CgppbXBvcnQgImRhcnQ6YXN5bmMiCiAgICBzaG93IENvbXBsZXRlciwgRnV0dXJlLCBTdHJlYW0sIFN0cmVhbUNvbnRyb2xsZXIsIFN0cmVhbVN1YnNjcmlwdGlvbiwgVGltZXI7CgppbXBvcnQgImRhcnQ6Y29sbGVjdGlvbiIgc2hvdyBIYXNoTWFwOwppbXBvcnQgImRhcnQ6dHlwZWRfZGF0YSIgc2hvdyBCeXRlQnVmZmVyLCBUeXBlZERhdGEsIFVpbnQ4TGlzdDsKCi8vLyBUaGVzZSBhcmUgdGhlIGFkZGl0aW9uYWwgcGFydHMgb2YgdGhpcyBwYXRjaCBsaWJyYXJ5OgovLyBwYXJ0ICJ0aW1lcl9pbXBsLmRhcnQiOwoKQHBhdGNoCmNsYXNzIFJlY2VpdmVQb3J0IHsKICBAcGF0Y2gKICBmYWN0b3J5IFJlY2VpdmVQb3J0KCkgPT4gbmV3IF9SZWNlaXZlUG9ydEltcGwoKTsKCiAgQHBhdGNoCiAgZmFjdG9yeSBSZWNlaXZlUG9ydC5mcm9tUmF3UmVjZWl2ZVBvcnQoUmF3UmVjZWl2ZVBvcnQgcmF3UG9ydCkgewogICAgcmV0dXJuIG5ldyBfUmVjZWl2ZVBvcnRJbXBsLmZyb21SYXdSZWNlaXZlUG9ydChyYXdQb3J0KTsKICB9Cn0KCkBwYXRjaApjbGFzcyBDYXBhYmlsaXR5IHsKICBAcGF0Y2gKICBmYWN0b3J5IENhcGFiaWxpdHkoKSA9PiBuZXcgX0NhcGFiaWxpdHlJbXBsKCk7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0NhcGFiaWxpdHlJbXBsIGltcGxlbWVudHMgQ2FwYWJpbGl0eSB7CiAgZmFjdG9yeSBfQ2FwYWJpbGl0eUltcGwoKSBuYXRpdmUgIkNhcGFiaWxpdHlJbXBsX2ZhY3RvcnkiOwoKICBib29sIG9wZXJhdG9yID09KHZhciBvdGhlcikgewogICAgcmV0dXJuIChvdGhlciBpcyBfQ2FwYWJpbGl0eUltcGwpICYmIF9lcXVhbHMob3RoZXIpOwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gX2dldF9oYXNoY29kZSgpOwogIH0KCiAgX2VxdWFscyhvdGhlcikgbmF0aXZlICJDYXBhYmlsaXR5SW1wbF9lcXVhbHMiOwogIF9nZXRfaGFzaGNvZGUoKSBuYXRpdmUgIkNhcGFiaWxpdHlJbXBsX2dldF9oYXNoY29kZSI7Cn0KCkBwYXRjaApjbGFzcyBSYXdSZWNlaXZlUG9ydCB7CiAgLyoqCiAgICogT3BlbnMgYSBsb25nLWxpdmVkIHBvcnQgZm9yIHJlY2VpdmluZyBtZXNzYWdlcy4KICAgKgogICAqIEEgW1Jhd1JlY2VpdmVQb3J0XSBpcyBsb3cgbGV2ZWwgYW5kIGRvZXMgbm90IHdvcmsgd2l0aCBbWm9uZV1zLiBJdAogICAqIGNhbiBub3QgYmUgcGF1c2VkLiBUaGUgZGF0YS1oYW5kbGVyIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgZmlyc3QKICAgKiBldmVudCBpcyByZWNlaXZlZC4KICAgKi8KICBAcGF0Y2gKICBmYWN0b3J5IFJhd1JlY2VpdmVQb3J0KFtGdW5jdGlvbiBoYW5kbGVyXSkgewogICAgX1Jhd1JlY2VpdmVQb3J0SW1wbCByZXN1bHQgPSBuZXcgX1Jhd1JlY2VpdmVQb3J0SW1wbCgpOwogICAgcmVzdWx0LmhhbmRsZXIgPSBoYW5kbGVyOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCmNsYXNzIF9SZWNlaXZlUG9ydEltcGwgZXh0ZW5kcyBTdHJlYW0gaW1wbGVtZW50cyBSZWNlaXZlUG9ydCB7CiAgX1JlY2VpdmVQb3J0SW1wbCgpIDogdGhpcy5mcm9tUmF3UmVjZWl2ZVBvcnQobmV3IFJhd1JlY2VpdmVQb3J0KCkpOwoKICBfUmVjZWl2ZVBvcnRJbXBsLmZyb21SYXdSZWNlaXZlUG9ydCh0aGlzLl9yYXdQb3J0KSB7CiAgICBfY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyKG9uQ2FuY2VsOiBjbG9zZSwgc3luYzogdHJ1ZSk7CiAgICBfcmF3UG9ydC5oYW5kbGVyID0gX2NvbnRyb2xsZXIuYWRkOwogIH0KCiAgU2VuZFBvcnQgZ2V0IHNlbmRQb3J0IHsKICAgIHJldHVybiBfcmF3UG9ydC5zZW5kUG9ydDsKICB9CgogIFN0cmVhbVN1YnNjcmlwdGlvbiBsaXN0ZW4odm9pZCBvbkRhdGEodmFyIG1lc3NhZ2UpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgcmV0dXJuIF9jb250cm9sbGVyLnN0cmVhbS5saXN0ZW4ob25EYXRhLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsIG9uRG9uZTogb25Eb25lLCBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKTsKICB9CgogIGNsb3NlKCkgewogICAgX3Jhd1BvcnQuY2xvc2UoKTsKICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgfQoKICBmaW5hbCBSYXdSZWNlaXZlUG9ydCBfcmF3UG9ydDsKICBTdHJlYW1Db250cm9sbGVyIF9jb250cm9sbGVyOwp9Cgp0eXBlZGVmIHZvaWQgX0ltbWVkaWF0ZUNhbGxiYWNrKCk7CgovLy8gVGhlIGNhbGxiYWNrIHRoYXQgaGFzIGJlZW4gcmVnaXN0ZXJlZCB0aHJvdWdoIGBzY2hlZHVsZUltbWVkaWF0ZWAuCl9JbW1lZGlhdGVDYWxsYmFjayBfcGVuZGluZ0ltbWVkaWF0ZUNhbGxiYWNrOwoKLy8vIFRoZSBjbG9zdXJlIHRoYXQgc2hvdWxkIGJlIHVzZWQgYXMgc2NoZWR1bGVJbW1lZGlhdGVDbG9zdXJlLCB3aGVuIHRoZSBWTQovLy8gaXMgcmVzcG9uc2libGUgZm9yIHRoZSBldmVudCBsb29wLgp2b2lkIF9pc29sYXRlU2NoZWR1bGVJbW1lZGlhdGUodm9pZCBjYWxsYmFjaygpKSB7CiAgYXNzZXJ0KChfcGVuZGluZ0ltbWVkaWF0ZUNhbGxiYWNrID09IG51bGwpIHx8CiAgICAgIChfcGVuZGluZ0ltbWVkaWF0ZUNhbGxiYWNrID09IGNhbGxiYWNrKSk7CiAgX3BlbmRpbmdJbW1lZGlhdGVDYWxsYmFjayA9IGNhbGxiYWNrOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKdm9pZCBfcnVuUGVuZGluZ0ltbWVkaWF0ZUNhbGxiYWNrKCkgewogIGZpbmFsIGNhbGxiYWNrID0gX3BlbmRpbmdJbW1lZGlhdGVDYWxsYmFjazsKICBpZiAoY2FsbGJhY2sgIT0gbnVsbCkgewogICAgX3BlbmRpbmdJbW1lZGlhdGVDYWxsYmFjayA9IG51bGw7CiAgICBjYWxsYmFjaygpOwogIH0KfQoKLy8vIFRoZSBlbWJlZGRlciBjYW4gZXhlY3V0ZSB0aGlzIGZ1bmN0aW9uIHRvIGdldCBob2xkIG9mCi8vLyBbX2lzb2xhdGVTY2hlZHVsZUltbWVkaWF0ZV0gYWJvdmUuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQpGdW5jdGlvbiBfZ2V0SXNvbGF0ZVNjaGVkdWxlSW1tZWRpYXRlQ2xvc3VyZSgpIHsKICByZXR1cm4gX2lzb2xhdGVTY2hlZHVsZUltbWVkaWF0ZTsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfUmF3UmVjZWl2ZVBvcnRJbXBsIGltcGxlbWVudHMgUmF3UmVjZWl2ZVBvcnQgewogIGZhY3RvcnkgX1Jhd1JlY2VpdmVQb3J0SW1wbCgpIG5hdGl2ZSAiUmF3UmVjZWl2ZVBvcnRJbXBsX2ZhY3RvcnkiOwoKICBjbG9zZSgpIHsKICAgIC8vIENsb3NlIHRoZSBwb3J0IGFuZCByZW1vdmUgaXQgZnJvbSB0aGUgaGFuZGxlciBtYXAuCiAgICBfaGFuZGxlck1hcC5yZW1vdmUodGhpcy5fY2xvc2VJbnRlcm5hbCgpKTsKICB9CgogIFNlbmRQb3J0IGdldCBzZW5kUG9ydCB7CiAgICByZXR1cm4gX2dldF9zZW5kcG9ydCgpOwogIH0KCiAgYm9vbCBvcGVyYXRvciA9PSh2YXIgb3RoZXIpIHsKICAgIHJldHVybiAob3RoZXIgaXMgX1Jhd1JlY2VpdmVQb3J0SW1wbCkgJiYKICAgICAgICAodGhpcy5fZ2V0X2lkKCkgPT0gb3RoZXIuX2dldF9pZCgpKTsKICB9CgogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIHNlbmRQb3J0Lmhhc2hDb2RlOwogIH0KCiAgLyoqKiogSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlscyAqKioqLwogIF9nZXRfaWQoKSBuYXRpdmUgIlJhd1JlY2VpdmVQb3J0SW1wbF9nZXRfaWQiOwogIF9nZXRfc2VuZHBvcnQoKSBuYXRpdmUgIlJhd1JlY2VpdmVQb3J0SW1wbF9nZXRfc2VuZHBvcnQiOwoKICAvLyBDYWxsZWQgZnJvbSB0aGUgVk0gdG8gcmV0cmlldmUgdGhlIGhhbmRsZXIgZm9yIGEgbWVzc2FnZS4KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKICBzdGF0aWMgX2xvb2t1cEhhbmRsZXIoaW50IGlkKSB7CiAgICB2YXIgcmVzdWx0ID0gX2hhbmRsZXJNYXBbaWRdOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIENhbGxlZCBmcm9tIHRoZSBWTSB0byBkaXNwYXRjaCB0byB0aGUgaGFuZGxlci4KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKICBzdGF0aWMgdm9pZCBfaGFuZGxlTWVzc2FnZShGdW5jdGlvbiBoYW5kbGVyLCB2YXIgbWVzc2FnZSkgewogICAgLy8gVE9ETyhmbG9pdHNjaCk6IHRoaXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgYW55IGV4Y2VwdGlvbiBhYm9ydHMgdGhlCiAgICAvLyBWTS4gT25jZSB3ZSBoYXZlIG5vbi1mYXRhbCBnbG9iYWwgZXhjZXB0aW9ucyB3ZSBuZWVkIHRvIGNhdGNoIGVycm9ycwogICAgLy8gc28gdGhhdCB3ZSBjYW4gcnVuIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzLgogICAgaGFuZGxlcihtZXNzYWdlKTsKICAgIF9ydW5QZW5kaW5nSW1tZWRpYXRlQ2FsbGJhY2soKTsKICB9CgogIC8vIENhbGwgaW50byB0aGUgVk0gdG8gY2xvc2UgdGhlIFZNIG1haW50YWluZWQgbWFwcGluZ3MuCiAgX2Nsb3NlSW50ZXJuYWwoKSBuYXRpdmUgIlJhd1JlY2VpdmVQb3J0SW1wbF9jbG9zZUludGVybmFsIjsKCiAgdm9pZCBzZXQgaGFuZGxlcihGdW5jdGlvbiB2YWx1ZSkgewogICAgX2hhbmRsZXJNYXBbdGhpcy5fZ2V0X2lkKCldID0gdmFsdWU7CiAgfQoKICAvLyBUT0RPKGlwb3N2YSk6IElkZWFsbHkga2VlcCB0aGlzIG1hcCBpbiB0aGUgVk0uCiAgLy8gaWQgdG8gaGFuZGxlciBtYXBwaW5nLgogIHN0YXRpYyBfaW5pdEhhbmRsZXJNYXAoKSB7CiAgICAvLyBUT0RPKDE4NTExKTogV29ya2Fyb3VuZCBiYWQgQ2hlY2tTbWkgaG9pc3RpbmcuCiAgICB2YXIgdGVtcE1hcCA9IG5ldyBIYXNoTWFwKCk7CiAgICAvLyBDb2xsZWN0IGZlZWRiYWNrIHRoYXQgbm90IGFsbCBrZXlzIGFyZSBTbWlzLgogICAgdGVtcE1hcFsiLiJdID0gMTsKICAgIHRlbXBNYXBbIi4iXSA9IDI7CgogICAgcmV0dXJuIG5ldyBIYXNoTWFwKCk7CiAgfQoKICBzdGF0aWMgZmluYWwgTWFwIF9oYW5kbGVyTWFwID0gX2luaXRIYW5kbGVyTWFwKCk7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1NlbmRQb3J0SW1wbCBpbXBsZW1lbnRzIFNlbmRQb3J0IHsKICBmYWN0b3J5IF9TZW5kUG9ydEltcGwuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8qLS0tIHB1YmxpYyBpbnRlcmZhY2UgLS0tKi8KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKICB2b2lkIHNlbmQodmFyIG1lc3NhZ2UpIHsKICAgIF9zZW5kSW50ZXJuYWwobWVzc2FnZSk7CiAgfQoKICBib29sIG9wZXJhdG9yID09KHZhciBvdGhlcikgewogICAgcmV0dXJuIChvdGhlciBpcyBfU2VuZFBvcnRJbXBsKSAmJiAodGhpcy5fZ2V0X2lkKCkgPT0gb3RoZXIuX2dldF9pZCgpKTsKICB9CgogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIF9nZXRfaGFzaGNvZGUoKTsKICB9CgogIC8qLS0tIHByaXZhdGUgaW1wbGVtZW50YXRpb24gLS0tKi8KICBfZ2V0X2lkKCkgbmF0aXZlICJTZW5kUG9ydEltcGxfZ2V0X2lkIjsKICBfZ2V0X2hhc2hjb2RlKCkgbmF0aXZlICJTZW5kUG9ydEltcGxfZ2V0X2hhc2hjb2RlIjsKCiAgLy8gRm9yd2FyZCB0aGUgaW1wbGVtZW50YXRpb24gb2Ygc2VuZGluZyBtZXNzYWdlcyB0byB0aGUgVk0uCiAgdm9pZCBfc2VuZEludGVybmFsKHZhciBtZXNzYWdlKSBuYXRpdmUgIlNlbmRQb3J0SW1wbF9zZW5kSW50ZXJuYWxfIjsKfQoKdHlwZWRlZiBfTnVsbGFyeUZ1bmN0aW9uKCk7CnR5cGVkZWYgX1VuYXJ5RnVuY3Rpb24oTnVsbCBhcmdzKTsKdHlwZWRlZiBfQmluYXJ5RnVuY3Rpb24oTnVsbCBhcmdzLCBOdWxsIG1lc3NhZ2UpOwoKLyoqCiAqIFRha2VzIHRoZSByZWFsIGVudHJ5IHBvaW50IGFzIGFyZ3VtZW50IGFuZCBpbnZva2VzIGl0IHdpdGggdGhlCiAqIGluaXRpYWwgbWVzc2FnZS4gIERlZmVycyBleGVjdXRpb24gb2YgdGhlIGVudHJ5IHBvaW50IHVudGlsIHRoZQogKiBpc29sYXRlIGlzIGluIHRoZSBtZXNzYWdlIGxvb3AuCiAqLwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKdm9pZCBfc3RhcnRNYWluSXNvbGF0ZShGdW5jdGlvbiBlbnRyeVBvaW50LCBMaXN0PFN0cmluZz4gYXJncykgewogIF9zdGFydElzb2xhdGUoCiAgICAgIG51bGwsIC8vIG5vIHBhcmVudCBwb3J0CiAgICAgIGVudHJ5UG9pbnQsCiAgICAgIGFyZ3MsCiAgICAgIG51bGwsIC8vIG5vIG1lc3NhZ2UKICAgICAgdHJ1ZSwgLy8gaXNTcGF3blVyaQogICAgICBudWxsLCAvLyBubyBjb250cm9sIHBvcnQKICAgICAgbnVsbCk7IC8vIG5vIGNhcGFiaWxpdGllcwp9CgovKioKICogUmV0dXJucyB0aGUgX3N0YXJ0TWFpbklzb2xhdGUgZnVuY3Rpb24uIFRoaXMgY2xvc3VyaXphdGlvbiBhbGxvd3MgZW1iZWRkZXJzCiAqIHRvIHNldHVwIHRyYW1wb2xpbmVzIHRvIHRoZSBtYWluIGZ1bmN0aW9uLiBUaGlzIHdvcmthcm91bmQgY2FuIGJlIHJlbW92ZWQKICogb25jZSBzdXBwb3J0IGZvciBAcHJhZ21hKCJ2bTplbnRyeV9wb2ludCIsICJnZXQiKSBhcyBkb2N1bWVudGVkIGluCiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8zNTcyMCBsYW5kcy4KICovCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQpGdW5jdGlvbiBfZ2V0U3RhcnRNYWluSXNvbGF0ZUZ1bmN0aW9uKCkgewogIHJldHVybiBfc3RhcnRNYWluSXNvbGF0ZTsKfQoKLyoqCiAqIFRha2VzIHRoZSByZWFsIGVudHJ5IHBvaW50IGFzIGFyZ3VtZW50IGFuZCBpbnZva2VzIGl0IHdpdGggdGhlIGluaXRpYWwKICogbWVzc2FnZS4KICovCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQp2b2lkIF9zdGFydElzb2xhdGUoCiAgICBTZW5kUG9ydCBwYXJlbnRQb3J0LAogICAgRnVuY3Rpb24gZW50cnlQb2ludCwKICAgIExpc3Q8U3RyaW5nPiBhcmdzLAogICAgdmFyIG1lc3NhZ2UsCiAgICBib29sIGlzU3Bhd25VcmksCiAgICBSYXdSZWNlaXZlUG9ydCBjb250cm9sUG9ydCwKICAgIExpc3QgY2FwYWJpbGl0aWVzKSB7CiAgLy8gVGhlIGNvbnRyb2wgcG9ydCAoYWthIHRoZSBtYWluIGlzb2xhdGUgcG9ydCkgZG9lcyBub3QgaGFuZGxlIGFueSBtZXNzYWdlcy4KICBpZiAoY29udHJvbFBvcnQgIT0gbnVsbCkgewogICAgY29udHJvbFBvcnQuaGFuZGxlciA9IChfKSB7fTsgLy8gTm9ib2R5IGhvbWUgb24gdGhlIGNvbnRyb2wgcG9ydC4KICB9CgogIGlmIChwYXJlbnRQb3J0ICE9IG51bGwpIHsKICAgIC8vIEJ1aWxkIGEgbWVzc2FnZSB0byBvdXIgcGFyZW50IGlzb2xhdGUgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUKICAgIC8vIGN1cnJlbnQgaXNvbGF0ZSdzIGNvbnRyb2wgcG9ydCBhbmQgY2FwYWJpbGl0aWVzLgogICAgLy8KICAgIC8vIFRPRE8oZmxvaXRzY2gpOiBTZW5kIGFuIGVycm9yIG1lc3NhZ2UgaWYgd2UgY2FuJ3QgZmluZCB0aGUgZW50cnkgcG9pbnQuCiAgICB2YXIgcmVhZHlNZXNzYWdlID0gbmV3IExpc3QoMik7CiAgICByZWFkeU1lc3NhZ2VbMF0gPSBjb250cm9sUG9ydC5zZW5kUG9ydDsKICAgIHJlYWR5TWVzc2FnZVsxXSA9IGNhcGFiaWxpdGllczsKCiAgICAvLyBPdXQgb2YgYW4gZXhjZXNzIG9mIHBhcmFub2lhIHdlIGNsZWFyIHRoZSBjYXBhYmlsaXRpZXMgZnJvbSB0aGUKICAgIC8vIHN0YWNrLiAgTm90IHJlYWxseSBuZWNlc3NhcnkuCiAgICBjYXBhYmlsaXRpZXMgPSBudWxsOwogICAgcGFyZW50UG9ydC5zZW5kKHJlYWR5TWVzc2FnZSk7CiAgfQogIGFzc2VydChjYXBhYmlsaXRpZXMgPT0gbnVsbCk7CgogIC8vIERlbGF5IGFsbCB1c2VyIGNvZGUgaGFuZGxpbmcgdG8gdGhlIG5leHQgcnVuIG9mIHRoZSBtZXNzYWdlIGxvb3AuIFRoaXMKICAvLyBhbGxvd3MgdXMgdG8gaW50ZXJjZXB0IGNlcnRhaW4gY29uZGl0aW9ucyBpbiB0aGUgZXZlbnQgZGlzcGF0Y2gsIHN1Y2ggYXMKICAvLyBzdGFydGluZyBpbiBwYXVzZWQgc3RhdGUuCiAgUmF3UmVjZWl2ZVBvcnQgcG9ydCA9IG5ldyBSYXdSZWNlaXZlUG9ydCgpOwogIHBvcnQuaGFuZGxlciA9IChfKSB7CiAgICBwb3J0LmNsb3NlKCk7CgogICAgaWYgKGlzU3Bhd25VcmkpIHsKICAgICAgaWYgKGVudHJ5UG9pbnQgaXMgX0JpbmFyeUZ1bmN0aW9uKSB7CiAgICAgICAgKGVudHJ5UG9pbnQgYXMgZHluYW1pYykoYXJncywgbWVzc2FnZSk7CiAgICAgIH0gZWxzZSBpZiAoZW50cnlQb2ludCBpcyBfVW5hcnlGdW5jdGlvbikgewogICAgICAgIChlbnRyeVBvaW50IGFzIGR5bmFtaWMpKGFyZ3MpOwogICAgICB9IGVsc2UgewogICAgICAgIGVudHJ5UG9pbnQoKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZW50cnlQb2ludChtZXNzYWdlKTsKICAgIH0KICB9OwogIC8vIE1ha2Ugc3VyZSB0aGUgbWVzc2FnZSBoYW5kbGVyIGlzIHRyaWdnZXJlZC4KICBwb3J0LnNlbmRQb3J0LnNlbmQobnVsbCk7Cn0KCkBwYXRjaApjbGFzcyBJc29sYXRlIHsKICBzdGF0aWMgZmluYWwgX2N1cnJlbnRJc29sYXRlID0gX2dldEN1cnJlbnRJc29sYXRlKCk7CiAgc3RhdGljIGZpbmFsIF9yb290VXJpID0gX2dldEN1cnJlbnRSb290VXJpKCk7CgogIEBwYXRjaAogIHN0YXRpYyBJc29sYXRlIGdldCBjdXJyZW50ID0+IF9jdXJyZW50SXNvbGF0ZTsKCiAgQHBhdGNoCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gX2dldERlYnVnTmFtZShjb250cm9sUG9ydCk7CgogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmU8VXJpPiBnZXQgcGFja2FnZVJvb3QgewogICAgcmV0dXJuIEZ1dHVyZS52YWx1ZShudWxsKTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmU8VXJpPiBnZXQgcGFja2FnZUNvbmZpZyB7CiAgICB2YXIgaG9vayA9IFZNTGlicmFyeUhvb2tzLnBhY2thZ2VDb25maWdVcmlGdXR1cmU7CiAgICBpZiAoaG9vayA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJJc29sYXRlLnBhY2thZ2VDb25maWciKTsKICAgIH0KICAgIHJldHVybiBob29rKCk7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgRnV0dXJlPFVyaT4gcmVzb2x2ZVBhY2thZ2VVcmkoVXJpIHBhY2thZ2VVcmkpIHsKICAgIHZhciBob29rID0gVk1MaWJyYXJ5SG9va3MucmVzb2x2ZVBhY2thZ2VVcmlGdXR1cmU7CiAgICBpZiAoaG9vayA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJJc29sYXRlLnJlc29sdmVQYWNrYWdlVXJpIik7CiAgICB9CiAgICByZXR1cm4gaG9vayhwYWNrYWdlVXJpKTsKICB9CgogIHN0YXRpYyBib29sIF9wYWNrYWdlU3VwcG9ydGVkKCkgPT4KICAgICAgKFZNTGlicmFyeUhvb2tzLnBhY2thZ2VSb290VXJpRnV0dXJlICE9IG51bGwpICYmCiAgICAgIChWTUxpYnJhcnlIb29rcy5wYWNrYWdlQ29uZmlnVXJpRnV0dXJlICE9IG51bGwpICYmCiAgICAgIChWTUxpYnJhcnlIb29rcy5yZXNvbHZlUGFja2FnZVVyaUZ1dHVyZSAhPSBudWxsKTsKCiAgQHBhdGNoCiAgc3RhdGljIEZ1dHVyZTxJc29sYXRlPiBzcGF3bjxUPih2b2lkIGVudHJ5UG9pbnQoVCBtZXNzYWdlKSwgVCBtZXNzYWdlLAogICAgICB7Ym9vbCBwYXVzZWQ6IGZhbHNlLAogICAgICBib29sIGVycm9yc0FyZUZhdGFsLAogICAgICBTZW5kUG9ydCBvbkV4aXQsCiAgICAgIFNlbmRQb3J0IG9uRXJyb3IsCiAgICAgIFN0cmluZyBkZWJ1Z05hbWV9KSBhc3luYyB7CiAgICAvLyBgcGF1c2VkYCBpc24ndCBoYW5kbGVkIHlldC4KICAgIFJhd1JlY2VpdmVQb3J0IHJlYWR5UG9ydDsKICAgIHRyeSB7CiAgICAgIC8vIENoZWNrIGZvciB0aGUgdHlwZSBvZiBgZW50cnlQb2ludGAgb24gdGhlIHNwYXduaW5nIGlzb2xhdGUgdG8gbWFrZQogICAgICAvLyBlcnJvci1oYW5kbGluZyBlYXNpZXIuCiAgICAgIGlmIChlbnRyeVBvaW50IGlzISBfVW5hcnlGdW5jdGlvbikgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKGVudHJ5UG9pbnQpOwogICAgICB9CiAgICAgIC8vIFRoZSBWTSB3aWxsIGludm9rZSBbX3N0YXJ0SXNvbGF0ZV0gd2l0aCBlbnRyeVBvaW50IGFzIGFyZ3VtZW50LgogICAgICByZWFkeVBvcnQgPSBuZXcgUmF3UmVjZWl2ZVBvcnQoKTsKCiAgICAgIC8vIFdlIGRvIG5vdCBpbmhlcml0IHRoZSBwYWNrYWdlIGNvbmZpZyBzZXR0aW5ncyBmcm9tIHRoZSBwYXJlbnQgaXNvbGF0ZSwKICAgICAgLy8gaW5zdGVhZCB3ZSB1c2UgdGhlIHZhbHVlcyB0aGF0IHdlcmUgc2V0IG9uIHRoZSBjb21tYW5kIGxpbmUuCiAgICAgIHZhciBwYWNrYWdlQ29uZmlnID0gVk1MaWJyYXJ5SG9va3MucGFja2FnZUNvbmZpZ1N0cmluZzsKICAgICAgdmFyIHNjcmlwdCA9IFZNTGlicmFyeUhvb2tzLnBsYXRmb3JtU2NyaXB0OwogICAgICBpZiAoc2NyaXB0ID09IG51bGwpIHsKICAgICAgICAvLyBXZSBkbyBub3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gc3VwcG9ydCBzcGF3bmluZyB0aGUgbmV3CiAgICAgICAgLy8gaXNvbGF0ZS4KICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiSXNvbGF0ZS5zcGF3biIpOwogICAgICB9CiAgICAgIGlmIChzY3JpcHQuc2NoZW1lID09ICJwYWNrYWdlIikgewogICAgICAgIHNjcmlwdCA9IGF3YWl0IElzb2xhdGUucmVzb2x2ZVBhY2thZ2VVcmkoc2NyaXB0KTsKICAgICAgfQoKICAgICAgX3NwYXduRnVuY3Rpb24oCiAgICAgICAgICByZWFkeVBvcnQuc2VuZFBvcnQsCiAgICAgICAgICBzY3JpcHQudG9TdHJpbmcoKSwKICAgICAgICAgIGVudHJ5UG9pbnQsCiAgICAgICAgICBtZXNzYWdlLAogICAgICAgICAgcGF1c2VkLAogICAgICAgICAgZXJyb3JzQXJlRmF0YWwsCiAgICAgICAgICBvbkV4aXQsCiAgICAgICAgICBvbkVycm9yLAogICAgICAgICAgbnVsbCwKICAgICAgICAgIHBhY2thZ2VDb25maWcsCiAgICAgICAgICBkZWJ1Z05hbWUpOwogICAgICByZXR1cm4gYXdhaXQgX3NwYXduQ29tbW9uKHJlYWR5UG9ydCk7CiAgICB9IGNhdGNoIChlLCBzdCkgewogICAgICBpZiAocmVhZHlQb3J0ICE9IG51bGwpIHsKICAgICAgICByZWFkeVBvcnQuY2xvc2UoKTsKICAgICAgfQogICAgICByZXR1cm4gYXdhaXQgbmV3IEZ1dHVyZTxJc29sYXRlPi5lcnJvcihlLCBzdCk7CiAgICB9CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgRnV0dXJlPElzb2xhdGU+IHNwYXduVXJpKFVyaSB1cmksIExpc3Q8U3RyaW5nPiBhcmdzLCB2YXIgbWVzc2FnZSwKICAgICAge2Jvb2wgcGF1c2VkOiBmYWxzZSwKICAgICAgU2VuZFBvcnQgb25FeGl0LAogICAgICBTZW5kUG9ydCBvbkVycm9yLAogICAgICBib29sIGVycm9yc0FyZUZhdGFsLAogICAgICBib29sIGNoZWNrZWQsCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQsCiAgICAgIFVyaSBwYWNrYWdlUm9vdCwKICAgICAgVXJpIHBhY2thZ2VDb25maWcsCiAgICAgIGJvb2wgYXV0b21hdGljUGFja2FnZVJlc29sdXRpb246IGZhbHNlLAogICAgICBTdHJpbmcgZGVidWdOYW1lfSkgYXN5bmMgewogICAgUmF3UmVjZWl2ZVBvcnQgcmVhZHlQb3J0OwogICAgaWYgKGVudmlyb25tZW50ICE9IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcigiZW52aXJvbm1lbnQiKTsKICAgIH0KCiAgICAvLyBWZXJpZnkgdGhhdCBubyBtdXR1YWxseSBleGNsdXNpdmUgYXJndW1lbnRzIGhhdmUgYmVlbiBwYXNzZWQuCiAgICBpZiAoYXV0b21hdGljUGFja2FnZVJlc29sdXRpb24pIHsKICAgICAgaWYgKHBhY2thZ2VSb290ICE9IG51bGwpIHsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiQ2Fubm90IHNpbXVsdGFuZW91c2x5IHJlcXVlc3QgIgogICAgICAgICAgICAiYXV0b21hdGljUGFja2FnZVJlc29sdXRpb24gYW5kIHNwZWNpZnkgYSIKICAgICAgICAgICAgInBhY2thZ2VSb290LiIpOwogICAgICB9CiAgICAgIGlmIChwYWNrYWdlQ29uZmlnICE9IG51bGwpIHsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiQ2Fubm90IHNpbXVsdGFuZW91c2x5IHJlcXVlc3QgIgogICAgICAgICAgICAiYXV0b21hdGljUGFja2FnZVJlc29sdXRpb24gYW5kIHNwZWNpZnkgYSIKICAgICAgICAgICAgInBhY2thZ2VDb25maWcuIik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmICgocGFja2FnZVJvb3QgIT0gbnVsbCkgJiYgKHBhY2thZ2VDb25maWcgIT0gbnVsbCkpIHsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiQ2Fubm90IHNpbXVsdGFuZW91c2x5IHNwZWNpZnkgYSAiCiAgICAgICAgICAgICJwYWNrYWdlUm9vdCBhbmQgYSBwYWNrYWdlQ29uZmlnLiIpOwogICAgICB9CiAgICB9CiAgICB0cnkgewogICAgICAvLyBSZXNvbHZlIHRoZSB1cmkgYWdhaW5zdCB0aGUgY3VycmVudCBpc29sYXRlJ3Mgcm9vdCBVcmkgZmlyc3QuCiAgICAgIHZhciBzcGF3bmVkVXJpID0gX3Jvb3RVcmkucmVzb2x2ZVVyaSh1cmkpOwoKICAgICAgLy8gSW5oZXJpdCB0aGlzIGlzb2xhdGUncyBwYWNrYWdlIHJlc29sdXRpb24gc2V0dXAgaWYgbm90IG92ZXJyaWRkZW4uCiAgICAgIGlmICghYXV0b21hdGljUGFja2FnZVJlc29sdXRpb24gJiYKICAgICAgICAgIChwYWNrYWdlUm9vdCA9PSBudWxsKSAmJgogICAgICAgICAgKHBhY2thZ2VDb25maWcgPT0gbnVsbCkpIHsKICAgICAgICBpZiAoSXNvbGF0ZS5fcGFja2FnZVN1cHBvcnRlZCgpKSB7CiAgICAgICAgICBwYWNrYWdlUm9vdCA9IGF3YWl0IElzb2xhdGUucGFja2FnZVJvb3Q7CiAgICAgICAgICBwYWNrYWdlQ29uZmlnID0gYXdhaXQgSXNvbGF0ZS5wYWNrYWdlQ29uZmlnOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gRW5zdXJlIHRvIHJlc29sdmUgcGFja2FnZTogVVJJcyBiZWluZyBoYW5kZWQgaW4gYXMgcGFyYW1ldGVycy4KICAgICAgaWYgKHBhY2thZ2VSb290ICE9IG51bGwpIHsKICAgICAgICAvLyBgcGFja2FnZXMvYCBkaXJlY3RvcnkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gRm9yY2UgaXQgbnVsbC4KICAgICAgICAvLyBUT0RPKG1mYWlyaHVyc3QpIFNob3VsZCB0aGlzIHRocm93IGFuIGV4Y2VwdGlvbj8KICAgICAgICBwYWNrYWdlUm9vdCA9IG51bGw7CiAgICAgIH0gZWxzZSBpZiAocGFja2FnZUNvbmZpZyAhPSBudWxsKSB7CiAgICAgICAgLy8gQXZvaWQgY2FsbGluZyByZXNvbHZlUGFja2FnZVVyaSBpZiBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGluIGNhc2UKICAgICAgICAvLyB0aGUgQVBJIGlzIG5vdCBzdXBwb3J0ZWQuCiAgICAgICAgaWYgKHBhY2thZ2VDb25maWcuc2NoZW1lID09ICJwYWNrYWdlIikgewogICAgICAgICAgcGFja2FnZUNvbmZpZyA9IGF3YWl0IElzb2xhdGUucmVzb2x2ZVBhY2thZ2VVcmkocGFja2FnZUNvbmZpZyk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBUaGUgVk0gd2lsbCBpbnZva2UgW19zdGFydElzb2xhdGVdIGFuZCBub3QgYG1haW5gLgogICAgICByZWFkeVBvcnQgPSBuZXcgUmF3UmVjZWl2ZVBvcnQoKTsKICAgICAgdmFyIHBhY2thZ2VSb290U3RyaW5nID0gcGFja2FnZVJvb3Q/LnRvU3RyaW5nKCk7CiAgICAgIHZhciBwYWNrYWdlQ29uZmlnU3RyaW5nID0gcGFja2FnZUNvbmZpZz8udG9TdHJpbmcoKTsKCiAgICAgIF9zcGF3blVyaSgKICAgICAgICAgIHJlYWR5UG9ydC5zZW5kUG9ydCwKICAgICAgICAgIHNwYXduZWRVcmkudG9TdHJpbmcoKSwKICAgICAgICAgIGFyZ3MsCiAgICAgICAgICBtZXNzYWdlLAogICAgICAgICAgcGF1c2VkLAogICAgICAgICAgb25FeGl0LAogICAgICAgICAgb25FcnJvciwKICAgICAgICAgIGVycm9yc0FyZUZhdGFsLAogICAgICAgICAgY2hlY2tlZCwKICAgICAgICAgIG51bGwsCiAgICAgICAgICAvKiBlbnZpcm9ubWVudCAqLwogICAgICAgICAgcGFja2FnZVJvb3RTdHJpbmcsCiAgICAgICAgICBwYWNrYWdlQ29uZmlnU3RyaW5nLAogICAgICAgICAgZGVidWdOYW1lKTsKICAgICAgcmV0dXJuIGF3YWl0IF9zcGF3bkNvbW1vbihyZWFkeVBvcnQpOwogICAgfSBjYXRjaCAoZSkgewogICAgICBpZiAocmVhZHlQb3J0ICE9IG51bGwpIHsKICAgICAgICByZWFkeVBvcnQuY2xvc2UoKTsKICAgICAgfQogICAgICByZXRocm93OwogICAgfQogIH0KCiAgc3RhdGljIEZ1dHVyZTxJc29sYXRlPiBfc3Bhd25Db21tb24oUmF3UmVjZWl2ZVBvcnQgcmVhZHlQb3J0KSB7CiAgICBDb21wbGV0ZXIgY29tcGxldGVyID0gbmV3IENvbXBsZXRlcjxJc29sYXRlPi5zeW5jKCk7CiAgICByZWFkeVBvcnQuaGFuZGxlciA9IChyZWFkeU1lc3NhZ2UpIHsKICAgICAgcmVhZHlQb3J0LmNsb3NlKCk7CiAgICAgIGlmIChyZWFkeU1lc3NhZ2UgaXMgTGlzdCAmJiByZWFkeU1lc3NhZ2UubGVuZ3RoID09IDIpIHsKICAgICAgICBTZW5kUG9ydCBjb250cm9sUG9ydCA9IHJlYWR5TWVzc2FnZVswXTsKICAgICAgICBMaXN0IGNhcGFiaWxpdGllcyA9IHJlYWR5TWVzc2FnZVsxXTsKICAgICAgICBjb21wbGV0ZXIuY29tcGxldGUobmV3IElzb2xhdGUoY29udHJvbFBvcnQsCiAgICAgICAgICAgIHBhdXNlQ2FwYWJpbGl0eTogY2FwYWJpbGl0aWVzWzBdLAogICAgICAgICAgICB0ZXJtaW5hdGVDYXBhYmlsaXR5OiBjYXBhYmlsaXRpZXNbMV0pKTsKICAgICAgfSBlbHNlIGlmIChyZWFkeU1lc3NhZ2UgaXMgU3RyaW5nKSB7CiAgICAgICAgLy8gV2UgZW5jb3VudGVyZWQgYW4gZXJyb3Igd2hpbGUgc3RhcnRpbmcgdGhlIG5ldyBpc29sYXRlLgogICAgICAgIGNvbXBsZXRlci5jb21wbGV0ZUVycm9yKG5ldyBJc29sYXRlU3Bhd25FeGNlcHRpb24oCiAgICAgICAgICAgICdVbmFibGUgdG8gc3Bhd24gaXNvbGF0ZTogJHtyZWFkeU1lc3NhZ2V9JykpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbi4KICAgICAgICBjb21wbGV0ZXIuY29tcGxldGVFcnJvcihuZXcgSXNvbGF0ZVNwYXduRXhjZXB0aW9uKAogICAgICAgICAgICAiSW50ZXJuYWwgZXJyb3I6IHVuZXhwZWN0ZWQgZm9ybWF0IGZvciByZWFkeSBtZXNzYWdlOiAiCiAgICAgICAgICAgICInJHtyZWFkeU1lc3NhZ2V9JyIpKTsKICAgICAgfQogICAgfTsKICAgIHJldHVybiBjb21wbGV0ZXIuZnV0dXJlOwogIH0KCiAgLy8gVE9ETyhpcG9zdmEpOiBDbGVhbnVwIHRvIGhhdmUgb25seSBvbmUgZGVmaW5pdGlvbi4KICAvLyBUaGVzZSB2YWx1ZXMgbmVlZCB0byBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgY2xhc3MgSXNvbGF0ZU1lc3NhZ2VIYW5kbGVyCiAgLy8gaW4gdm0vaXNvbGF0ZS5jYy4KICBzdGF0aWMgY29uc3QgX1BBVVNFID0gMTsKICBzdGF0aWMgY29uc3QgX1JFU1VNRSA9IDI7CiAgc3RhdGljIGNvbnN0IF9QSU5HID0gMzsKICBzdGF0aWMgY29uc3QgX0tJTEwgPSA0OwogIHN0YXRpYyBjb25zdCBfQUREX0VYSVQgPSA1OwogIHN0YXRpYyBjb25zdCBfREVMX0VYSVQgPSA2OwogIHN0YXRpYyBjb25zdCBfQUREX0VSUk9SID0gNzsKICBzdGF0aWMgY29uc3QgX0RFTF9FUlJPUiA9IDg7CiAgc3RhdGljIGNvbnN0IF9FUlJPUl9GQVRBTCA9IDk7CgogIHN0YXRpYyB2b2lkIF9zcGF3bkZ1bmN0aW9uKAogICAgICBTZW5kUG9ydCByZWFkeVBvcnQsCiAgICAgIFN0cmluZyB1cmksCiAgICAgIEZ1bmN0aW9uIHRvcExldmVsRnVuY3Rpb24sCiAgICAgIHZhciBtZXNzYWdlLAogICAgICBib29sIHBhdXNlZCwKICAgICAgYm9vbCBlcnJvcnNBcmVGYXRhbCwKICAgICAgU2VuZFBvcnQgb25FeGl0LAogICAgICBTZW5kUG9ydCBvbkVycm9yLAogICAgICBTdHJpbmcgcGFja2FnZVJvb3QsCiAgICAgIFN0cmluZyBwYWNrYWdlQ29uZmlnLAogICAgICBTdHJpbmcgZGVidWdOYW1lKSBuYXRpdmUgIklzb2xhdGVfc3Bhd25GdW5jdGlvbiI7CgogIHN0YXRpYyB2b2lkIF9zcGF3blVyaSgKICAgICAgU2VuZFBvcnQgcmVhZHlQb3J0LAogICAgICBTdHJpbmcgdXJpLAogICAgICBMaXN0PFN0cmluZz4gYXJncywKICAgICAgdmFyIG1lc3NhZ2UsCiAgICAgIGJvb2wgcGF1c2VkLAogICAgICBTZW5kUG9ydCBvbkV4aXQsCiAgICAgIFNlbmRQb3J0IG9uRXJyb3IsCiAgICAgIGJvb2wgZXJyb3JzQXJlRmF0YWwsCiAgICAgIGJvb2wgY2hlY2tlZCwKICAgICAgTGlzdCBlbnZpcm9ubWVudCwKICAgICAgU3RyaW5nIHBhY2thZ2VSb290LAogICAgICBTdHJpbmcgcGFja2FnZUNvbmZpZywKICAgICAgU3RyaW5nIGRlYnVnTmFtZSkgbmF0aXZlICJJc29sYXRlX3NwYXduVXJpIjsKCiAgc3RhdGljIHZvaWQgX3NlbmRPT0IocG9ydCwgbXNnKSBuYXRpdmUgIklzb2xhdGVfc2VuZE9PQiI7CgogIHN0YXRpYyBTdHJpbmcgX2dldERlYnVnTmFtZShTZW5kUG9ydCBjb250cm9sUG9ydCkKICAgICAgbmF0aXZlICJJc29sYXRlX2dldERlYnVnTmFtZSI7CgogIEBwYXRjaAogIHZvaWQgX3BhdXNlKENhcGFiaWxpdHkgcmVzdW1lQ2FwYWJpbGl0eSkgewogICAgdmFyIG1zZyA9IG5ldyBMaXN0KDQpCiAgICAgIC4uWzBdID0gMCAvLyBNYWtlIHJvb20gZm9yIE9PQiBtZXNzYWdlIHR5cGUuCiAgICAgIC4uWzFdID0gX1BBVVNFCiAgICAgIC4uWzJdID0gcGF1c2VDYXBhYmlsaXR5CiAgICAgIC4uWzNdID0gcmVzdW1lQ2FwYWJpbGl0eTsKICAgIF9zZW5kT09CKGNvbnRyb2xQb3J0LCBtc2cpOwogIH0KCiAgQHBhdGNoCiAgdm9pZCByZXN1bWUoQ2FwYWJpbGl0eSByZXN1bWVDYXBhYmlsaXR5KSB7CiAgICB2YXIgbXNnID0gbmV3IExpc3QoNCkKICAgICAgLi5bMF0gPSAwIC8vIE1ha2Ugcm9vbSBmb3IgT09CIG1lc3NhZ2UgdHlwZS4KICAgICAgLi5bMV0gPSBfUkVTVU1FCiAgICAgIC4uWzJdID0gcGF1c2VDYXBhYmlsaXR5CiAgICAgIC4uWzNdID0gcmVzdW1lQ2FwYWJpbGl0eTsKICAgIF9zZW5kT09CKGNvbnRyb2xQb3J0LCBtc2cpOwogIH0KCiAgQHBhdGNoCiAgdm9pZCBhZGRPbkV4aXRMaXN0ZW5lcihTZW5kUG9ydCByZXNwb25zZVBvcnQsIHtPYmplY3QgcmVzcG9uc2V9KSB7CiAgICB2YXIgbXNnID0gbmV3IExpc3QoNCkKICAgICAgLi5bMF0gPSAwIC8vIE1ha2Ugcm9vbSBmb3IgT09CIG1lc3NhZ2UgdHlwZS4KICAgICAgLi5bMV0gPSBfQUREX0VYSVQKICAgICAgLi5bMl0gPSByZXNwb25zZVBvcnQKICAgICAgLi5bM10gPSByZXNwb25zZTsKICAgIF9zZW5kT09CKGNvbnRyb2xQb3J0LCBtc2cpOwogIH0KCiAgQHBhdGNoCiAgdm9pZCByZW1vdmVPbkV4aXRMaXN0ZW5lcihTZW5kUG9ydCByZXNwb25zZVBvcnQpIHsKICAgIHZhciBtc2cgPSBuZXcgTGlzdCgzKQogICAgICAuLlswXSA9IDAgLy8gTWFrZSByb29tIGZvciBPT0IgbWVzc2FnZSB0eXBlLgogICAgICAuLlsxXSA9IF9ERUxfRVhJVAogICAgICAuLlsyXSA9IHJlc3BvbnNlUG9ydDsKICAgIF9zZW5kT09CKGNvbnRyb2xQb3J0LCBtc2cpOwogIH0KCiAgQHBhdGNoCiAgdm9pZCBzZXRFcnJvcnNGYXRhbChib29sIGVycm9yc0FyZUZhdGFsKSB7CiAgICB2YXIgbXNnID0gbmV3IExpc3QoNCkKICAgICAgLi5bMF0gPSAwIC8vIE1ha2Ugcm9vbSBmb3IgT09CIG1lc3NhZ2UgdHlwZS4KICAgICAgLi5bMV0gPSBfRVJST1JfRkFUQUwKICAgICAgLi5bMl0gPSB0ZXJtaW5hdGVDYXBhYmlsaXR5CiAgICAgIC4uWzNdID0gZXJyb3JzQXJlRmF0YWw7CiAgICBfc2VuZE9PQihjb250cm9sUG9ydCwgbXNnKTsKICB9CgogIEBwYXRjaAogIHZvaWQga2lsbCh7aW50IHByaW9yaXR5OiBiZWZvcmVOZXh0RXZlbnR9KSB7CiAgICB2YXIgbXNnID0gbmV3IExpc3QoNCkKICAgICAgLi5bMF0gPSAwIC8vIE1ha2Ugcm9vbSBmb3IgT09CIG1lc3NhZ2UgdHlwZS4KICAgICAgLi5bMV0gPSBfS0lMTAogICAgICAuLlsyXSA9IHRlcm1pbmF0ZUNhcGFiaWxpdHkKICAgICAgLi5bM10gPSBwcmlvcml0eTsKICAgIF9zZW5kT09CKGNvbnRyb2xQb3J0LCBtc2cpOwogIH0KCiAgQHBhdGNoCiAgdm9pZCBwaW5nKFNlbmRQb3J0IHJlc3BvbnNlUG9ydCwge09iamVjdCByZXNwb25zZSwgaW50IHByaW9yaXR5OiBpbW1lZGlhdGV9KSB7CiAgICB2YXIgbXNnID0gbmV3IExpc3QoNSkKICAgICAgLi5bMF0gPSAwIC8vIE1ha2Ugcm9vbSBmb3IgT09NIG1lc3NhZ2UgdHlwZS4KICAgICAgLi5bMV0gPSBfUElORwogICAgICAuLlsyXSA9IHJlc3BvbnNlUG9ydAogICAgICAuLlszXSA9IHByaW9yaXR5CiAgICAgIC4uWzRdID0gcmVzcG9uc2U7CiAgICBfc2VuZE9PQihjb250cm9sUG9ydCwgbXNnKTsKICB9CgogIEBwYXRjaAogIHZvaWQgYWRkRXJyb3JMaXN0ZW5lcihTZW5kUG9ydCBwb3J0KSB7CiAgICB2YXIgbXNnID0gbmV3IExpc3QoMykKICAgICAgLi5bMF0gPSAwIC8vIE1ha2Ugcm9vbSBmb3IgT09CIG1lc3NhZ2UgdHlwZS4KICAgICAgLi5bMV0gPSBfQUREX0VSUk9SCiAgICAgIC4uWzJdID0gcG9ydDsKICAgIF9zZW5kT09CKGNvbnRyb2xQb3J0LCBtc2cpOwogIH0KCiAgQHBhdGNoCiAgdm9pZCByZW1vdmVFcnJvckxpc3RlbmVyKFNlbmRQb3J0IHBvcnQpIHsKICAgIHZhciBtc2cgPSBuZXcgTGlzdCgzKQogICAgICAuLlswXSA9IDAgLy8gTWFrZSByb29tIGZvciBPT0IgbWVzc2FnZSB0eXBlLgogICAgICAuLlsxXSA9IF9ERUxfRVJST1IKICAgICAgLi5bMl0gPSBwb3J0OwogICAgX3NlbmRPT0IoY29udHJvbFBvcnQsIG1zZyk7CiAgfQoKICBzdGF0aWMgSXNvbGF0ZSBfZ2V0Q3VycmVudElzb2xhdGUoKSB7CiAgICBMaXN0IHBvcnRBbmRDYXBhYmlsaXRpZXMgPSBfZ2V0UG9ydEFuZENhcGFiaWxpdGllc09mQ3VycmVudElzb2xhdGUoKTsKICAgIHJldHVybiBuZXcgSXNvbGF0ZShwb3J0QW5kQ2FwYWJpbGl0aWVzWzBdLAogICAgICAgIHBhdXNlQ2FwYWJpbGl0eTogcG9ydEFuZENhcGFiaWxpdGllc1sxXSwKICAgICAgICB0ZXJtaW5hdGVDYXBhYmlsaXR5OiBwb3J0QW5kQ2FwYWJpbGl0aWVzWzJdKTsKICB9CgogIHN0YXRpYyBMaXN0IF9nZXRQb3J0QW5kQ2FwYWJpbGl0aWVzT2ZDdXJyZW50SXNvbGF0ZSgpCiAgICAgIG5hdGl2ZSAiSXNvbGF0ZV9nZXRQb3J0QW5kQ2FwYWJpbGl0aWVzT2ZDdXJyZW50SXNvbGF0ZSI7CgogIHN0YXRpYyBVcmkgX2dldEN1cnJlbnRSb290VXJpKCkgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIFVyaS5wYXJzZShfZ2V0Q3VycmVudFJvb3RVcmlTdHIoKSk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgc3RhdGljIFN0cmluZyBfZ2V0Q3VycmVudFJvb3RVcmlTdHIoKSBuYXRpdmUgIklzb2xhdGVfZ2V0Q3VycmVudFJvb3RVcmlTdHIiOwp9CgpAcGF0Y2gKYWJzdHJhY3QgY2xhc3MgVHJhbnNmZXJhYmxlVHlwZWREYXRhIHsKICBAcGF0Y2gKICBmYWN0b3J5IFRyYW5zZmVyYWJsZVR5cGVkRGF0YS5mcm9tTGlzdChMaXN0PFR5cGVkRGF0YT4gY2h1bmtzKSB7CiAgICBpZiAoY2h1bmtzID09IG51bGwpIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcihjaHVua3MpOwogICAgfQogICAgZmluYWwgaW50IGNpZCA9IENsYXNzSUQuZ2V0SUQoY2h1bmtzKTsKICAgIGlmIChjaWQgIT0gQ2xhc3NJRC5jaWRBcnJheSAmJgogICAgICAgIGNpZCAhPSBDbGFzc0lELmNpZEdyb3dhYmxlT2JqZWN0QXJyYXkgJiYKICAgICAgICBjaWQgIT0gQ2xhc3NJRC5jaWRJbW11dGFibGVBcnJheSkgewogICAgICBjaHVua3MgPSBMaXN0LnVubW9kaWZpYWJsZShjaHVua3MpOwogICAgfQogICAgcmV0dXJuIF9UcmFuc2ZlcmFibGVUeXBlZERhdGFJbXBsKGNodW5rcyk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9UcmFuc2ZlcmFibGVUeXBlZERhdGFJbXBsIGltcGxlbWVudHMgVHJhbnNmZXJhYmxlVHlwZWREYXRhIHsKICBmYWN0b3J5IF9UcmFuc2ZlcmFibGVUeXBlZERhdGFJbXBsKExpc3Q8VHlwZWREYXRhPiBsaXN0KQogICAgICBuYXRpdmUgIlRyYW5zZmVyYWJsZVR5cGVkRGF0YV9mYWN0b3J5IjsKCiAgQnl0ZUJ1ZmZlciBtYXRlcmlhbGl6ZSgpIHsKICAgIHJldHVybiBfbWF0ZXJpYWxpemVJbnRvVWludDhMaXN0KCkuYnVmZmVyOwogIH0KCiAgVWludDhMaXN0IF9tYXRlcmlhbGl6ZUludG9VaW50OExpc3QoKQogICAgICBuYXRpdmUgIlRyYW5zZmVyYWJsZVR5cGVkRGF0YV9tYXRlcmlhbGl6ZSI7Cn0Kgr4ATk48AQ8BTU1LKwE9ARRRASdAATobAQcUCTMBCUM9BAIBBxMJMQIBGi49ASA5BAEVHAQBMTgCAQcXBjUFSEYYBgkvPB4TBAIBP0YBN0UoBAEaHgQBNj8tSQQBDBYZBAEhIAIBIwFHLgFNJzIwMCgCASImLhomEAQCATonIjEkAgEaNkUBDDovBAEaHAQBIC0tBAEVHgQBLjA8AT8kIiITBAE0JD5NTDMWJAQBOz4BJSkEATQcHTYhNBYWARoEATQCARoqLBkEAR8kGxwEASBMBAEVHAQBJSo2AT9HAgEcIzIBBEJDIwQiQREeEgwaGh8gAgEET01GOAQiKhwCAQRKDAQiFBkZFxEVIBlQHUYEARxFOAdPJCwkAUclGSMEIAFMTh8uFxIBFiswMScPFggNGwYFMRwCAQcQNzABCTEBCTYBCScfBAEJKTYYOwYTBAEJOTcYPwYdBAElNzk4AQlJGxsXGCEjHgpMICstCEkoAVBGPjIcSRQ1CCg6CAEWHh0WExIaEhMQGRYsFh8bCDUGBAEJSxsXGBsUJxcZLiEeHzMGAUUmIUE3HQgjQTcfCA0+QzEIBgpHMQFMKSMlKzM3CggBSCFIPBwqTSUxSgoIATwoNzsBER4hEBMSEhMaExAcHR8WLBIfGwgPBgQBQjkpGT4wLTQuNCtDOzoPIjtEIwgHHQQBOE8XGxwaGh4eHx8hAR4aEiETExsXGBocOAEZGhIZExMXGBsUGBocMwE8ATQlAQktGjMVHiAgBAEJLRozFh4gIAQBCUUaMxgbGCAEAQk1GjMYHCAEAQktGjMbIh4gBAEJLxozFCIYIAQBCVEaMxQbFxggBAEJKRozGRQgBAEJLBozGRQgBAEoSi8xNgQBOD8BJAoxEhMGBAFPAgEHJwlDGiMGKyMxLCoGLwQCARpEOy4BHS8EASgyAgElZGFydDppc29sYXRlLXBhdGNoL2lzb2xhdGVfcGF0Y2guZGFydE1vcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vbGliL3RpbWVyX2ltcGwuZGFydLukLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgovLyBwYXJ0IG9mICJpc29sYXRlX3BhdGNoLmRhcnQiOwoKLy8gVGltZXIgaGVhcCBpbXBsZW1lbnRlZCBhcyBhIGFycmF5LWJhc2VkIGJpbmFyeSBoZWFwWzBdLgovLyBUaGlzIGFsbG93cyBmb3IgTygxKSBgZmlyc3RgLCBPKGxvZyhuKSkgYHJlbW92ZWAvYHJlbW92ZUZpcnN0YCBhbmQgTyhsb2cobikpCi8vIGBhZGRgLgovLwovLyBUbyBlbnN1cmUgdGhlIHRpbWVycyBhcmUgb3JkZXJlZCBieSBpbnNlcnRpb24gdGltZSwgdGhlIF9UaW1lciBjbGFzcyBoYXMgYQovLyBgX2lkYCBmaWVsZCBzZXQgd2hlbiBhZGRlZCB0byB0aGUgaGVhcC4KLy8KLy8gWzBdIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmluYXJ5X2hlYXAKY2xhc3MgX1RpbWVySGVhcCB7CiAgTGlzdDxfVGltZXI+IF9saXN0OwogIGludCBfdXNlZCA9IDA7CgogIF9UaW1lckhlYXAoW2ludCBpbml0U2l6ZSA9IDddKQogICAgICA6IF9saXN0ID0gTGlzdDxfVGltZXI+LmZpbGxlZChpbml0U2l6ZSwgX1RpbWVyLl9zZW50aW5lbFRpbWVyKTsKCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfdXNlZCA9PSAwOwoKICBfVGltZXIgZ2V0IGZpcnN0ID0+IF9saXN0WzBdOwoKICBib29sIGlzRmlyc3QoX1RpbWVyIHRpbWVyKSA9PiB0aW1lci5faW5kZXhPck5leHQgPT0gMDsKCiAgdm9pZCBhZGQoX1RpbWVyIHRpbWVyKSB7CiAgICBpZiAoX3VzZWQgPT0gX2xpc3QubGVuZ3RoKSB7CiAgICAgIF9yZXNpemUoKTsKICAgIH0KICAgIHRpbWVyLl9pbmRleE9yTmV4dCA9IF91c2VkKys7CiAgICBfbGlzdFt0aW1lci5faW5kZXhPck5leHRdID0gdGltZXI7CiAgICBfYnViYmxlVXAodGltZXIpOwogIH0KCiAgX1RpbWVyIHJlbW92ZUZpcnN0KCkgewogICAgdmFyIGYgPSBmaXJzdDsKICAgIHJlbW92ZShmKTsKICAgIHJldHVybiBmOwogIH0KCiAgdm9pZCByZW1vdmUoX1RpbWVyIHRpbWVyKSB7CiAgICBfdXNlZC0tOwogICAgaWYgKGlzRW1wdHkpIHsKICAgICAgX2xpc3RbMF0gPSBudWxsOwogICAgICB0aW1lci5faW5kZXhPck5leHQgPSBudWxsOwogICAgICByZXR1cm47CiAgICB9CiAgICB2YXIgbGFzdCA9IF9saXN0W191c2VkXTsKICAgIGlmICghaWRlbnRpY2FsKGxhc3QsIHRpbWVyKSkgewogICAgICBsYXN0Ll9pbmRleE9yTmV4dCA9IHRpbWVyLl9pbmRleE9yTmV4dDsKICAgICAgX2xpc3RbbGFzdC5faW5kZXhPck5leHRdID0gbGFzdDsKICAgICAgaWYgKGxhc3QuX2NvbXBhcmVUbyh0aW1lcikgPCAwKSB7CiAgICAgICAgX2J1YmJsZVVwKGxhc3QpOwogICAgICB9IGVsc2UgewogICAgICAgIF9idWJibGVEb3duKGxhc3QpOwogICAgICB9CiAgICB9CiAgICBfbGlzdFtfdXNlZF0gPSBudWxsOwogICAgdGltZXIuX2luZGV4T3JOZXh0ID0gbnVsbDsKICB9CgogIHZvaWQgX3Jlc2l6ZSgpIHsKICAgIHZhciBuZXdMaXN0ID0KICAgICAgICBMaXN0PF9UaW1lcj4uZmlsbGVkKF9saXN0Lmxlbmd0aCAqIDIgKyAxLCBfVGltZXIuX3NlbnRpbmVsVGltZXIpOwogICAgbmV3TGlzdC5zZXRSYW5nZSgwLCBfdXNlZCwgX2xpc3QpOwogICAgX2xpc3QgPSBuZXdMaXN0OwogIH0KCiAgdm9pZCBfYnViYmxlVXAoX1RpbWVyIHRpbWVyKSB7CiAgICB3aGlsZSAoIWlzRmlyc3QodGltZXIpKSB7CiAgICAgIF9UaW1lciBwYXJlbnQgPSBfcGFyZW50KHRpbWVyKTsKICAgICAgaWYgKHRpbWVyLl9jb21wYXJlVG8ocGFyZW50KSA8IDApIHsKICAgICAgICBfc3dhcCh0aW1lciwgcGFyZW50KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBfYnViYmxlRG93bihfVGltZXIgdGltZXIpIHsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGludCBsZWZ0SW5kZXggPSBfbGVmdENoaWxkSW5kZXgodGltZXIuX2luZGV4T3JOZXh0KTsKICAgICAgaW50IHJpZ2h0SW5kZXggPSBfcmlnaHRDaGlsZEluZGV4KHRpbWVyLl9pbmRleE9yTmV4dCk7CiAgICAgIF9UaW1lciBuZXdlc3QgPSB0aW1lcjsKICAgICAgaWYgKGxlZnRJbmRleCA8IF91c2VkICYmIF9saXN0W2xlZnRJbmRleF0uX2NvbXBhcmVUbyhuZXdlc3QpIDwgMCkgewogICAgICAgIG5ld2VzdCA9IF9saXN0W2xlZnRJbmRleF07CiAgICAgIH0KICAgICAgaWYgKHJpZ2h0SW5kZXggPCBfdXNlZCAmJiBfbGlzdFtyaWdodEluZGV4XS5fY29tcGFyZVRvKG5ld2VzdCkgPCAwKSB7CiAgICAgICAgbmV3ZXN0ID0gX2xpc3RbcmlnaHRJbmRleF07CiAgICAgIH0KICAgICAgaWYgKGlkZW50aWNhbChuZXdlc3QsIHRpbWVyKSkgewogICAgICAgIC8vIFdlIGFyZSB3aGVyZSB3ZSBzaG91bGQgYmUsIGJyZWFrLgogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIF9zd2FwKG5ld2VzdCwgdGltZXIpOwogICAgfQogIH0KCiAgdm9pZCBfc3dhcChfVGltZXIgZmlyc3QsIF9UaW1lciBzZWNvbmQpIHsKICAgIGludCB0bXAgPSBmaXJzdC5faW5kZXhPck5leHQ7CiAgICBmaXJzdC5faW5kZXhPck5leHQgPSBzZWNvbmQuX2luZGV4T3JOZXh0OwogICAgc2Vjb25kLl9pbmRleE9yTmV4dCA9IHRtcDsKICAgIF9saXN0W2ZpcnN0Ll9pbmRleE9yTmV4dF0gPSBmaXJzdDsKICAgIF9saXN0W3NlY29uZC5faW5kZXhPck5leHRdID0gc2Vjb25kOwogIH0KCiAgX1RpbWVyIF9wYXJlbnQoX1RpbWVyIHRpbWVyKSA9PiBfbGlzdFtfcGFyZW50SW5kZXgodGltZXIuX2luZGV4T3JOZXh0KV07CgogIHN0YXRpYyBpbnQgX3BhcmVudEluZGV4KGludCBpbmRleCkgPT4gKGluZGV4IC0gMSkgfi8gMjsKICBzdGF0aWMgaW50IF9sZWZ0Q2hpbGRJbmRleChpbnQgaW5kZXgpID0+IDIgKiBpbmRleCArIDE7CiAgc3RhdGljIGludCBfcmlnaHRDaGlsZEluZGV4KGludCBpbmRleCkgPT4gMiAqIGluZGV4ICsgMjsKfQoKY2xhc3MgX1RpbWVyIGltcGxlbWVudHMgVGltZXIgewogIC8vIENhbmNlbHMgdGhlIHRpbWVyIGluIHRoZSBldmVudCBoYW5kbGVyLgogIHN0YXRpYyBjb25zdCBfTk9fVElNRVIgPSAtMTsKCiAgLy8gQSBzZW50aW5lbCB0aW1lci4KICBzdGF0aWMgX1RpbWVyIF9zZW50aW5lbFRpbWVyID0gX1RpbWVyLl9zZW50aW5lbCgpOwoKICAvLyBXZSBkaXN0aW5ndWlzaCB3aGF0IGtpbmQgb2YgbWVzc2FnZSBhcnJpdmVkIGJhc2VkIG9uIHRoZSB2YWx1ZSBiZWluZyBzZW50LgogIHN0YXRpYyBjb25zdCBfWkVST19FVkVOVCA9IDE7CiAgc3RhdGljIGNvbnN0IF9USU1FT1VUX0VWRU5UID0gbnVsbDsKCiAgLy8gVGltZXJzIGFyZSBvcmRlcmVkIGJ5IHdha2V1cCB0aW1lLiBUaW1lcnMgd2l0aCBhIHRpbWVvdXQgdmFsdWUgb2YgPiAwIGRvCiAgLy8gZW5kIHVwIG9uIHRoZSBUaW1lckhlYXAuIFRpbWVycyB3aXRoIGEgdGltZW91dCBvZiAwIGFyZSBxdWV1ZWQgaW4gYSBsaXN0LgogIHN0YXRpYyBmaW5hbCBfaGVhcCA9IG5ldyBfVGltZXJIZWFwKCk7CiAgc3RhdGljIF9UaW1lciBfZmlyc3RaZXJvVGltZXI7CiAgc3RhdGljIF9UaW1lciBfbGFzdFplcm9UaW1lciA9IF9zZW50aW5lbFRpbWVyOwoKICAvLyBXZSB1c2UgYW4gaWQgdG8gYmUgYWJsZSB0byBzb3J0IHRpbWVycyB3aXRoIHRoZSBzYW1lIGV4cGlyYXRpb24gdGltZS4KICAvLyBpZHMgYXJlIHJlY3ljbGVkIGFmdGVyIElEX01BU0sgZW5xdWV1ZXMgb3Igd2hlbiB0aGUgdGltZXIgcXVldWUgaXMgZW1wdHkuCiAgc3RhdGljIGNvbnN0IF9JRF9NQVNLID0gMHgxZmZmZmZmZjsKICBzdGF0aWMgaW50IF9pZENvdW50ID0gMDsKCiAgc3RhdGljIFJhd1JlY2VpdmVQb3J0IF9yZWNlaXZlUG9ydDsKICBzdGF0aWMgU2VuZFBvcnQgX3NlbmRQb3J0OwogIHN0YXRpYyBpbnQgX3NjaGVkdWxlZFdha2V1cFRpbWUgPSAwOwoKICBzdGF0aWMgYm9vbCBfaGFuZGxpbmdDYWxsYmFja3MgPSBmYWxzZTsKCiAgRnVuY3Rpb24gX2NhbGxiYWNrOyAvLyBDbG9zdXJlIHRvIGNhbGwgd2hlbiB0aW1lciBmaXJlcy4gbnVsbCBpZiBjYW5jZWxlZC4KICBpbnQgX3dha2V1cFRpbWU7IC8vIEV4cGlyYXRpb24gdGltZS4KICBmaW5hbCBpbnQgX21pbGxpU2Vjb25kczsgLy8gRHVyYXRpb24gc3BlY2lmaWVkIGF0IGNyZWF0aW9uLgogIGZpbmFsIGJvb2wgX3JlcGVhdGluZzsgLy8gSW5kaWNhdGVzIHBlcmlvZGljIHRpbWVycy4KICB2YXIgX2luZGV4T3JOZXh0OyAvLyBJbmRleCBpZiBwYXJ0IG9mIHRoZSBUaW1lckhlYXAsIGxpbmsgb3RoZXJ3aXNlLgogIGludCBfaWQ7IC8vIEluY3JlbWVudGluZyBpZCB0byBlbmFibGUgc29ydGluZyBvZiB0aW1lcnMgd2l0aCBzYW1lIGV4cGlyeS4KCiAgaW50IF90aWNrID0gMDsgLy8gQmFja2luZyBmb3IgW3RpY2tdLAoKICAvLyBHZXQgdGhlIG5leHQgYXZhaWxhYmxlIGlkLiBXZSBhY2NlcHQgY29sbGlzaW9ucyBhbmQgcmVvcmRlcmluZyB3aGVuIHRoZQogIC8vIF9pZENvdW50IG92ZXJmbG93cyBhbmQgdGhlIHRpbWVycyBleHBpcmUgYXQgdGhlIHNhbWUgbWlsbGlzZWNvbmQuCiAgc3RhdGljIGludCBfbmV4dElkKCkgewogICAgdmFyIHJlc3VsdCA9IF9pZENvdW50OwogICAgX2lkQ291bnQgPSAoX2lkQ291bnQgKyAxKSAmIF9JRF9NQVNLOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIF9UaW1lci5fc2VudGluZWwoKQogICAgICA6IF9jYWxsYmFjayA9IG51bGwsCiAgICAgICAgX3dha2V1cFRpbWUgPSAwLAogICAgICAgIF9taWxsaVNlY29uZHMgPSAwLAogICAgICAgIF9yZXBlYXRpbmcgPSBmYWxzZSwKICAgICAgICBfaW5kZXhPck5leHQgPSBudWxsLAogICAgICAgIF9pZCA9IC0xOwoKICBfVGltZXIuX2ludGVybmFsKAogICAgICB0aGlzLl9jYWxsYmFjaywgdGhpcy5fd2FrZXVwVGltZSwgdGhpcy5fbWlsbGlTZWNvbmRzLCB0aGlzLl9yZXBlYXRpbmcpCiAgICAgIDogX2lkID0gX25leHRJZCgpOwoKICBzdGF0aWMgX1RpbWVyIF9jcmVhdGVUaW1lcigKICAgICAgdm9pZCBjYWxsYmFjayhUaW1lciB0aW1lciksIGludCBtaWxsaVNlY29uZHMsIGJvb2wgcmVwZWF0aW5nKSB7CiAgICAvLyBOZWdhdGl2ZSB0aW1lb3V0cyBhcmUgdHJlYXRlZCBhcyBpZiAwIHRpbWVvdXQuCiAgICBpZiAobWlsbGlTZWNvbmRzIDwgMCkgewogICAgICBtaWxsaVNlY29uZHMgPSAwOwogICAgfQogICAgLy8gQWRkIG9uZSBiZWNhdXNlIERhdGVUaW1lLm5vdygpIGlzIGFzc3VtZWQgdG8gcm91bmQgZG93bgogICAgLy8gdG8gbmVhcmVzdCBtaWxsaXNlY29uZCwgbm90IHVwLCBzbyB0aGF0IHRpbWUgKyBkdXJhdGlvbiBpcyBiZWZvcmUKICAgIC8vIGR1cmF0aW9uIG1pbGxpc2Vjb25kcyBmcm9tIG5vdy4gVXNpbmcgbWljcm9zZWNvbmQgdGltZXJzIGxpa2UKICAgIC8vIFN0b3B3YXRjaCBhbGxvd3MgZGV0ZWN0aW5nIHRoYXQgdGhlIHRpbWVyIGZpcmVzIGVhcmx5LgogICAgaW50IG5vdyA9IFZNTGlicmFyeUhvb2tzLnRpbWVyTWlsbGlzZWNvbmRDbG9jaygpOwogICAgaW50IHdha2V1cFRpbWUgPSAobWlsbGlTZWNvbmRzID09IDApID8gbm93IDogKG5vdyArIDEgKyBtaWxsaVNlY29uZHMpOwoKICAgIF9UaW1lciB0aW1lciA9CiAgICAgICAgbmV3IF9UaW1lci5faW50ZXJuYWwoY2FsbGJhY2ssIHdha2V1cFRpbWUsIG1pbGxpU2Vjb25kcywgcmVwZWF0aW5nKTsKICAgIC8vIEVucXVldWUgdGhpcyBuZXdseSBjcmVhdGVkIHRpbWVyIGluIHRoZSBhcHByb3ByaWF0ZSBzdHJ1Y3R1cmUgYW5kCiAgICAvLyBub3RpZnkgaWYgbmVjZXNzYXJ5LgogICAgdGltZXIuX2VucXVldWUoKTsKICAgIHJldHVybiB0aW1lcjsKICB9CgogIGZhY3RvcnkgX1RpbWVyKGludCBtaWxsaVNlY29uZHMsIHZvaWQgY2FsbGJhY2soVGltZXIgdGltZXIpKSB7CiAgICByZXR1cm4gX2NyZWF0ZVRpbWVyKGNhbGxiYWNrLCBtaWxsaVNlY29uZHMsIGZhbHNlKTsKICB9CgogIGZhY3RvcnkgX1RpbWVyLnBlcmlvZGljKGludCBtaWxsaVNlY29uZHMsIHZvaWQgY2FsbGJhY2soVGltZXIgdGltZXIpKSB7CiAgICByZXR1cm4gX2NyZWF0ZVRpbWVyKGNhbGxiYWNrLCBtaWxsaVNlY29uZHMsIHRydWUpOwogIH0KCiAgYm9vbCBnZXQgX2lzSW5IZWFwID0+IF9pbmRleE9yTmV4dCBpcyBpbnQ7CgogIGludCBfY29tcGFyZVRvKF9UaW1lciBvdGhlcikgewogICAgaW50IGMgPSBfd2FrZXVwVGltZSAtIG90aGVyLl93YWtldXBUaW1lOwogICAgaWYgKGMgIT0gMCkgcmV0dXJuIGM7CiAgICByZXR1cm4gX2lkIC0gb3RoZXIuX2lkOwogIH0KCiAgYm9vbCBnZXQgaXNBY3RpdmUgPT4gX2NhbGxiYWNrICE9IG51bGw7CgogIGludCBnZXQgdGljayA9PiBfdGljazsKCiAgLy8gQ2FuY2VscyBhIHNldCB0aW1lci4gVGhlIHRpbWVyIGlzIHJlbW92ZWQgZnJvbSB0aGUgdGltZXIgaGVhcCBpZiBpdCBpcyBhCiAgLy8gbm9uLXplcm8gdGltZXIuIFplcm8gdGltZXJzIGFyZSBrZXB0IGluIHRoZSBsaXN0IGFzIHRoZXkgbmVlZCB0byBjb25zdW1lCiAgLy8gdGhlIGNvcnJlc3BvbmRpbmcgcGVuZGluZyBtZXNzYWdlLgogIHZvaWQgY2FuY2VsKCkgewogICAgX2NhbGxiYWNrID0gbnVsbDsKICAgIC8vIE9ubHkgaGVhcCB0aW1lcnMgYXJlIHJlYWxseSByZW1vdmVkLiBaZXJvIHRpbWVycyBuZWVkIHRvIGNvbnN1bWUgdGhlaXIKICAgIC8vIGNvcnJlc3BvbmRpbmcgd2FrZXVwIG1lc3NhZ2Ugc28gdGhleSBhcmUgbGVmdCBpbiB0aGUgcXVldWUuCiAgICBpZiAoIV9pc0luSGVhcCkgcmV0dXJuOwogICAgYm9vbCB1cGRhdGUgPSBfaGVhcC5pc0ZpcnN0KHRoaXMpOwogICAgX2hlYXAucmVtb3ZlKHRoaXMpOwogICAgaWYgKHVwZGF0ZSkgewogICAgICBfbm90aWZ5RXZlbnRIYW5kbGVyKCk7CiAgICB9CiAgfQoKICB2b2lkIF9hZHZhbmNlV2FrZXVwVGltZSgpIHsKICAgIC8vIFJlY2FsY3VsYXRlIHRoZSBuZXh0IHdha2V1cCB0aW1lLiBGb3IgcmVwZWF0aW5nIHRpbWVycyB3aXRoIGEgMCB0aW1lb3V0CiAgICAvLyB0aGUgbmV4dCB3YWtldXAgdGltZSBpcyBub3cuCiAgICBfaWQgPSBfbmV4dElkKCk7CiAgICBpZiAoX21pbGxpU2Vjb25kcyA+IDApIHsKICAgICAgX3dha2V1cFRpbWUgKz0gX21pbGxpU2Vjb25kczsKICAgIH0gZWxzZSB7CiAgICAgIF93YWtldXBUaW1lID0gVk1MaWJyYXJ5SG9va3MudGltZXJNaWxsaXNlY29uZENsb2NrKCk7CiAgICB9CiAgfQoKICAvLyBBZGRzIGEgdGltZXIgdG8gdGhlIGhlYXAgb3IgdGltZXIgbGlzdC4gVGltZXJzIHdpdGggdGhlIHNhbWUgd2FrZXVwIHRpbWUKICAvLyBhcmUgZW5xdWV1ZWQgaW4gb3JkZXIgYW5kIG5vdGlmaWVkIGluIEZJRk8gb3JkZXIuCiAgdm9pZCBfZW5xdWV1ZSgpIHsKICAgIGlmIChfbWlsbGlTZWNvbmRzID09IDApIHsKICAgICAgaWYgKF9maXJzdFplcm9UaW1lciA9PSBudWxsKSB7CiAgICAgICAgX2xhc3RaZXJvVGltZXIgPSB0aGlzOwogICAgICAgIF9maXJzdFplcm9UaW1lciA9IHRoaXM7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2xhc3RaZXJvVGltZXIuX2luZGV4T3JOZXh0ID0gdGhpczsKICAgICAgICBfbGFzdFplcm9UaW1lciA9IHRoaXM7CiAgICAgIH0KICAgICAgLy8gRXZlcnkgemVybyB0aW1lciBnZXRzIGl0cyBvd24gZXZlbnQuCiAgICAgIF9ub3RpZnlaZXJvSGFuZGxlcigpOwogICAgfSBlbHNlIHsKICAgICAgX2hlYXAuYWRkKHRoaXMpOwogICAgICBpZiAoX2hlYXAuaXNGaXJzdCh0aGlzKSkgewogICAgICAgIF9ub3RpZnlFdmVudEhhbmRsZXIoKTsKICAgICAgfQogICAgfQogIH0KCiAgLy8gRW5xdWV1ZSBvbmUgbWVzc2FnZSBmb3IgZWFjaCB6ZXJvIHRpbWVyLiBUbyBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoIGZyb20KICAvLyBFdmVudEhhbmRsZXIgbWVzc2FnZXMgd2Ugc2VuZCBhIF9aRVJPX0VWRU5UIGluc3RlYWQgb2YgYSBfVElNRU9VVF9FVkVOVC4KICBzdGF0aWMgdm9pZCBfbm90aWZ5WmVyb0hhbmRsZXIoKSB7CiAgICB2YXIgcG9ydCA9IF9zZW5kUG9ydDsKICAgIGlmIChwb3J0ID09IG51bGwpIHsKICAgICAgcG9ydCA9IF9jcmVhdGVUaW1lckhhbmRsZXIoKTsKICAgICAgX3NlbmRQb3J0ID0gcG9ydDsKICAgIH0KICAgIHBvcnQuc2VuZChfWkVST19FVkVOVCk7CiAgfQoKICAvLyBIYW5kbGUgdGhlIG5vdGlmaWNhdGlvbiBvZiBhIHplcm8gdGltZXIuIE1ha2Ugc3VyZSB0byBhbHNvIGV4ZWN1dGUgbm9uLXplcm8KICAvLyB0aW1lcnMgd2l0aCBhIGxvd2VyIGV4cGlyYXRpb24gdGltZS4KICBzdGF0aWMgTGlzdCBfcXVldWVGcm9tWmVyb0V2ZW50KCkgewogICAgdmFyIHBlbmRpbmdUaW1lcnMgPSBuZXcgTGlzdCgpOwogICAgX1RpbWVyIGZ0aW1lciA9IF9maXJzdFplcm9UaW1lcjsKICAgIGlmIChmdGltZXIgIT0gbnVsbCkgewogICAgICAvLyBDb2xsZWN0IHBlbmRpbmcgdGltZXJzIGZyb20gdGhlIHRpbWVyIGhlYXAgdGhhdCBoYXZlIGFuIGV4cGlyYXRpb24gcHJpb3IKICAgICAgLy8gdG8gdGhlIGN1cnJlbnRseSBub3RpZmllZCB6ZXJvIHRpbWVyLgogICAgICB2YXIgdGltZXI7CiAgICAgIHdoaWxlICghX2hlYXAuaXNFbXB0eSAmJiAoX2hlYXAuZmlyc3QuX2NvbXBhcmVUbyhmdGltZXIpIDwgMCkpIHsKICAgICAgICB0aW1lciA9IF9oZWFwLnJlbW92ZUZpcnN0KCk7CiAgICAgICAgcGVuZGluZ1RpbWVycy5hZGQodGltZXIpOwogICAgICB9CiAgICAgIC8vIEFwcGVuZCB0aGUgZmlyc3QgemVybyB0aW1lciB0byB0aGUgcGVuZGluZyB0aW1lcnMuCiAgICAgIHRpbWVyID0gX2ZpcnN0WmVyb1RpbWVyOwogICAgICBfZmlyc3RaZXJvVGltZXIgPSB0aW1lci5faW5kZXhPck5leHQ7CiAgICAgIHRpbWVyLl9pbmRleE9yTmV4dCA9IG51bGw7CiAgICAgIHBlbmRpbmdUaW1lcnMuYWRkKHRpbWVyKTsKICAgIH0KICAgIHJldHVybiBwZW5kaW5nVGltZXJzOwogIH0KCiAgc3RhdGljIHZvaWQgX25vdGlmeUV2ZW50SGFuZGxlcigpIHsKICAgIGlmIChfaGFuZGxpbmdDYWxsYmFja3MpIHsKICAgICAgLy8gV2hpbGUgd2UgYXJlIGFscmVhZHkgaGFuZGxpbmcgY2FsbGJhY2tzIHdlIHdpbGwgbm90IG5vdGlmeSB0aGUgZXZlbnQKICAgICAgLy8gaGFuZGxlci4gX2hhbmRsZVRpbWVvdXQgd2lsbCBjYWxsIF9ub3RpZnlFdmVudEhhbmRsZXIgb25jZSBhbGwgcGVuZGluZwogICAgICAvLyB0aW1lcnMgYXJlIHByb2Nlc3NlZC4KICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIElmIHRoZXJlIGFyZSBubyBwZW5kaW5nIHRpbWVycy4gQ2xvc2UgZG93biB0aGUgcmVjZWl2ZSBwb3J0LgogICAgaWYgKChfZmlyc3RaZXJvVGltZXIgPT0gbnVsbCkgJiYgX2hlYXAuaXNFbXB0eSkgewogICAgICAvLyBObyBwZW5kaW5nIHRpbWVyczogQ2xvc2UgdGhlIHJlY2VpdmUgcG9ydCBhbmQgbGV0IHRoZSBldmVudCBoYW5kbGVyCiAgICAgIC8vIGtub3cuCiAgICAgIGlmIChfc2VuZFBvcnQgIT0gbnVsbCkgewogICAgICAgIF9jYW5jZWxXYWtldXAoKTsKICAgICAgICBfc2h1dGRvd25UaW1lckhhbmRsZXIoKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYgKF9oZWFwLmlzRW1wdHkpIHsKICAgICAgLy8gT25seSB6ZXJvIHRpbWVycyBhcmUgbGVmdC4gQ2FuY2VsIGFueSBzY2hlZHVsZWQgd2FrZXVwcy4KICAgICAgX2NhbmNlbFdha2V1cCgpOwogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gT25seSBzZW5kIGEgbWVzc2FnZSBpZiB0aGUgcmVxdWVzdGVkIHdha2V1cCB0aW1lIGRpZmZlcnMgZnJvbSB0aGUKICAgIC8vIGFscmVhZHkgc2NoZWR1bGVkIHdha2V1cCB0aW1lLgogICAgdmFyIHdha2V1cFRpbWUgPSBfaGVhcC5maXJzdC5fd2FrZXVwVGltZTsKICAgIGlmICgoX3NjaGVkdWxlZFdha2V1cFRpbWUgPT0gMCkgfHwgKHdha2V1cFRpbWUgIT0gX3NjaGVkdWxlZFdha2V1cFRpbWUpKSB7CiAgICAgIF9zY2hlZHVsZVdha2V1cCh3YWtldXBUaW1lKTsKICAgIH0KICB9CgogIHN0YXRpYyBMaXN0IF9xdWV1ZUZyb21UaW1lb3V0RXZlbnQoKSB7CiAgICB2YXIgcGVuZGluZ1RpbWVycyA9IG5ldyBMaXN0KCk7CiAgICBfVGltZXIgZnRpbWVyID0gX2ZpcnN0WmVyb1RpbWVyOwogICAgaWYgKGZ0aW1lciAhPSBudWxsKSB7CiAgICAgIC8vIENvbGxlY3QgcGVuZGluZyB0aW1lcnMgZnJvbSB0aGUgdGltZXIgaGVhcCB0aGF0IGhhdmUgYW4gZXhwaXJhdGlvbgogICAgICAvLyBwcmlvciB0byB0aGUgbmV4dCB6ZXJvIHRpbWVyLgogICAgICAvLyBCeSBkZWZpbml0aW9uIHRoZSBmaXJzdCB6ZXJvIHRpbWVyIGhhcyBiZWVuIHNjaGVkdWxlZCBiZWZvcmUgdGhlCiAgICAgIC8vIGN1cnJlbnQgdGltZSwgbWVhbmluZyBhbGwgdGltZXJzIHdoaWNoIGFyZSAibGVzcyB0aGFuIiB0aGUgZmlyc3QgemVybwogICAgICAvLyB0aW1lciBhcmUgZXhwaXJlZC4gVGhlIGZpcnN0IHplcm8gdGltZXIgd2lsbCBiZSBkaXNwYXRjaGVkIHdoZW4gaXRzCiAgICAgIC8vIGNvcnJlc3BvbmRpbmcgbWVzc2FnZSBpcyBkZWxpdmVyZWQuCiAgICAgIHZhciB0aW1lcjsKICAgICAgd2hpbGUgKCFfaGVhcC5pc0VtcHR5ICYmIChfaGVhcC5maXJzdC5fY29tcGFyZVRvKGZ0aW1lcikgPCAwKSkgewogICAgICAgIHRpbWVyID0gX2hlYXAucmVtb3ZlRmlyc3QoKTsKICAgICAgICBwZW5kaW5nVGltZXJzLmFkZCh0aW1lcik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIENvbGxlY3QgcGVuZGluZyB0aW1lcnMgZnJvbSB0aGUgdGltZXIgaGVhcCB3aGljaCBoYXZlIGV4cGlyZWQgYXQgdGhpcwogICAgICAvLyB0aW1lLgogICAgICB2YXIgY3VycmVudFRpbWUgPSBWTUxpYnJhcnlIb29rcy50aW1lck1pbGxpc2Vjb25kQ2xvY2soKTsKICAgICAgdmFyIHRpbWVyOwogICAgICB3aGlsZSAoIV9oZWFwLmlzRW1wdHkgJiYgKF9oZWFwLmZpcnN0Ll93YWtldXBUaW1lIDw9IGN1cnJlbnRUaW1lKSkgewogICAgICAgIHRpbWVyID0gX2hlYXAucmVtb3ZlRmlyc3QoKTsKICAgICAgICBwZW5kaW5nVGltZXJzLmFkZCh0aW1lcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBwZW5kaW5nVGltZXJzOwogIH0KCiAgc3RhdGljIHZvaWQgX3J1blRpbWVycyhMaXN0IHBlbmRpbmdUaW1lcnMpIHsKICAgIC8vIElmIHRoZXJlIGFyZSBubyBwZW5kaW5nIHRpbWVycyBjdXJyZW50bHkgcmVzZXQgdGhlIGlkIHNwYWNlIGJlZm9yZSB3ZQogICAgLy8gaGF2ZSBhIGNoYW5jZSB0byBlbnF1ZXVlIG5ldyB0aW1lcnMuCiAgICBpZiAoX2hlYXAuaXNFbXB0eSAmJiAoX2ZpcnN0WmVyb1RpbWVyID09IG51bGwpKSB7CiAgICAgIF9pZENvdW50ID0gMDsKICAgIH0KCiAgICAvLyBGYXN0IGV4aXQgaWYgbm8gcGVuZGluZyB0aW1lcnMuCiAgICBpZiAocGVuZGluZ1RpbWVycy5sZW5ndGggPT0gMCkgewogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gVHJpZ2dlciBhbGwgb2YgdGhlIHBlbmRpbmcgdGltZXJzLiBOZXcgdGltZXJzIGFkZGVkIGFzIHBhcnQgb2YgdGhlCiAgICAvLyBjYWxsYmFja3Mgd2lsbCBiZSBlbnF1ZXVlZCBub3cgYW5kIG5vdGlmaWVkIGluIHRoZSBuZXh0IHNwaW4gYXQgdGhlCiAgICAvLyBlYXJsaWVzdC4KICAgIF9oYW5kbGluZ0NhbGxiYWNrcyA9IHRydWU7CiAgICB2YXIgaSA9IDA7CiAgICB0cnkgewogICAgICBmb3IgKDsgaSA8IHBlbmRpbmdUaW1lcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAvLyBOZXh0IHBlbmRpbmcgdGltZXIuCiAgICAgICAgdmFyIHRpbWVyID0gcGVuZGluZ1RpbWVyc1tpXTsKICAgICAgICB0aW1lci5faW5kZXhPck5leHQgPSBudWxsOwoKICAgICAgICAvLyBPbmUgb2YgdGhlIHRpbWVycyBpbiB0aGUgcGVuZGluZ190aW1lcnMgbGlzdCBjYW4gY2FuY2VsCiAgICAgICAgLy8gb25lIG9mIHRoZSBsYXRlciB0aW1lcnMgd2hpY2ggd2lsbCBzZXQgdGhlIGNhbGxiYWNrIHRvCiAgICAgICAgLy8gbnVsbC4gT3IgdGhlIHBlbmRpbmcgemVybyB0aW1lciBoYXMgYmVlbiBjYW5jZWxlZCBlYXJsaWVyLgogICAgICAgIGlmICh0aW1lci5fY2FsbGJhY2sgIT0gbnVsbCkgewogICAgICAgICAgdmFyIGNhbGxiYWNrID0gdGltZXIuX2NhbGxiYWNrOwogICAgICAgICAgaWYgKCF0aW1lci5fcmVwZWF0aW5nKSB7CiAgICAgICAgICAgIC8vIE1hcmsgdGltZXIgYXMgaW5hY3RpdmUuCiAgICAgICAgICAgIHRpbWVyLl9jYWxsYmFjayA9IG51bGw7CiAgICAgICAgICB9IGVsc2UgaWYgKHRpbWVyLl9taWxsaVNlY29uZHMgPiAwKSB7CiAgICAgICAgICAgIHZhciBtcyA9IHRpbWVyLl9taWxsaVNlY29uZHM7CiAgICAgICAgICAgIGludCBvdmVyZHVlID0KICAgICAgICAgICAgICAgIFZNTGlicmFyeUhvb2tzLnRpbWVyTWlsbGlzZWNvbmRDbG9jaygpIC0gdGltZXIuX3dha2V1cFRpbWU7CiAgICAgICAgICAgIGlmIChvdmVyZHVlID4gbXMpIHsKICAgICAgICAgICAgICBpbnQgbWlzc2VkVGlja3MgPSBvdmVyZHVlIH4vIG1zOwogICAgICAgICAgICAgIHRpbWVyLl93YWtldXBUaW1lICs9IG1pc3NlZFRpY2tzICogbXM7CiAgICAgICAgICAgICAgdGltZXIuX3RpY2sgKz0gbWlzc2VkVGlja3M7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHRpbWVyLl90aWNrICs9IDE7CgogICAgICAgICAgY2FsbGJhY2sodGltZXIpOwogICAgICAgICAgLy8gUmUtaW5zZXJ0IHJlcGVhdGluZyB0aW1lciBpZiBub3QgY2FuY2VsZWQuCiAgICAgICAgICBpZiAodGltZXIuX3JlcGVhdGluZyAmJiAodGltZXIuX2NhbGxiYWNrICE9IG51bGwpKSB7CiAgICAgICAgICAgIHRpbWVyLl9hZHZhbmNlV2FrZXVwVGltZSgpOwogICAgICAgICAgICB0aW1lci5fZW5xdWV1ZSgpOwogICAgICAgICAgfQogICAgICAgICAgLy8gRXhlY3V0ZSBwZW5kaW5nIG1pY3JvIHRhc2tzLgogICAgICAgICAgX3J1blBlbmRpbmdJbW1lZGlhdGVDYWxsYmFjaygpOwogICAgICAgIH0KICAgICAgfQogICAgfSBmaW5hbGx5IHsKICAgICAgX2hhbmRsaW5nQ2FsbGJhY2tzID0gZmFsc2U7CiAgICAgIC8vIFJlLXF1ZXVlIHRpbWVycyB3ZSBkaWRuJ3QgZ2V0IHRvLgogICAgICBmb3IgKGkrKzsgaSA8IHBlbmRpbmdUaW1lcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgdGltZXIgPSBwZW5kaW5nVGltZXJzW2ldOwogICAgICAgIHRpbWVyLl9lbnF1ZXVlKCk7CiAgICAgIH0KICAgICAgX25vdGlmeUV2ZW50SGFuZGxlcigpOwogICAgfQogIH0KCiAgc3RhdGljIHZvaWQgX2hhbmRsZU1lc3NhZ2UobXNnKSB7CiAgICB2YXIgcGVuZGluZ1RpbWVyczsKICAgIGlmIChtc2cgPT0gX1pFUk9fRVZFTlQpIHsKICAgICAgcGVuZGluZ1RpbWVycyA9IF9xdWV1ZUZyb21aZXJvRXZlbnQoKTsKICAgICAgYXNzZXJ0KHBlbmRpbmdUaW1lcnMubGVuZ3RoID4gMCk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQobXNnID09IF9USU1FT1VUX0VWRU5UKTsKICAgICAgX3NjaGVkdWxlZFdha2V1cFRpbWUgPSAwOyAvLyBDb25zdW1lZCB0aGUgbGFzdCBzY2hlZHVsZWQgd2FrZXVwIG5vdy4KICAgICAgcGVuZGluZ1RpbWVycyA9IF9xdWV1ZUZyb21UaW1lb3V0RXZlbnQoKTsKICAgIH0KICAgIF9ydW5UaW1lcnMocGVuZGluZ1RpbWVycyk7CiAgICAvLyBOb3RpZnkgdGhlIGV2ZW50IGhhbmRsZXIgb3Igc2h1dGRvd24gdGhlIHBvcnQgaWYgbm8gbW9yZSBwZW5kaW5nCiAgICAvLyB0aW1lcnMgYXJlIHByZXNlbnQuCiAgICBfbm90aWZ5RXZlbnRIYW5kbGVyKCk7CiAgfQoKICAvLyBUZWxsIHRoZSBldmVudCBoYW5kbGVyIHRvIHdha2UgdGhpcyBpc29sYXRlIGF0IGEgc3BlY2lmaWMgdGltZS4KICBzdGF0aWMgdm9pZCBfc2NoZWR1bGVXYWtldXAoaW50IHdha2V1cFRpbWUpIHsKICAgIHZhciBwb3J0ID0gX3NlbmRQb3J0OwogICAgaWYgKHBvcnQgPT0gbnVsbCkgewogICAgICBwb3J0ID0gX2NyZWF0ZVRpbWVySGFuZGxlcigpOwogICAgICBfc2VuZFBvcnQgPSBwb3J0OwogICAgfQogICAgVk1MaWJyYXJ5SG9va3MuZXZlbnRIYW5kbGVyU2VuZERhdGEobnVsbCwgcG9ydCwgd2FrZXVwVGltZSk7CiAgICBfc2NoZWR1bGVkV2FrZXVwVGltZSA9IHdha2V1cFRpbWU7CiAgfQoKICAvLyBDYW5jZWwgcGVuZGluZyB3YWtldXBzIGluIHRoZSBldmVudCBoYW5kbGVyLgogIHN0YXRpYyB2b2lkIF9jYW5jZWxXYWtldXAoKSB7CiAgICBpZiAoX3NlbmRQb3J0ICE9IG51bGwpIHsKICAgICAgVk1MaWJyYXJ5SG9va3MuZXZlbnRIYW5kbGVyU2VuZERhdGEobnVsbCwgX3NlbmRQb3J0LCBfTk9fVElNRVIpOwogICAgICBfc2NoZWR1bGVkV2FrZXVwVGltZSA9IDA7CiAgICB9CiAgfQoKICAvLyBDcmVhdGUgYSByZWNlaXZlIHBvcnQgYW5kIHJlZ2lzdGVyIGEgbWVzc2FnZSBoYW5kbGVyIGZvciB0aGUgdGltZXIKICAvLyBldmVudHMuCiAgc3RhdGljIFNlbmRQb3J0IF9jcmVhdGVUaW1lckhhbmRsZXIoKSB7CiAgICBhc3NlcnQoX3JlY2VpdmVQb3J0ID09IG51bGwpOwogICAgYXNzZXJ0KF9zZW5kUG9ydCA9PSBudWxsKTsKICAgIFJhd1JlY2VpdmVQb3J0IHBvcnQgPSBuZXcgUmF3UmVjZWl2ZVBvcnQoX2hhbmRsZU1lc3NhZ2UpOwogICAgX3JlY2VpdmVQb3J0ID0gcG9ydDsKICAgIF9zZW5kUG9ydCA9IHBvcnQuc2VuZFBvcnQ7CiAgICBfc2NoZWR1bGVkV2FrZXVwVGltZSA9IDA7CiAgICByZXR1cm4gcG9ydC5zZW5kUG9ydDsKICB9CgogIHN0YXRpYyB2b2lkIF9zaHV0ZG93blRpbWVySGFuZGxlcigpIHsKICAgIHZhciBwb3J0ID0gX3JlY2VpdmVQb3J0OwogICAgaWYgKHBvcnQgIT0gbnVsbCkgewogICAgICBwb3J0LmNsb3NlKCk7CiAgICAgIF9yZWNlaXZlUG9ydCA9IG51bGw7CiAgICB9CiAgICBfc2VuZFBvcnQgPSBudWxsOwogICAgX3NjaGVkdWxlZFdha2V1cFRpbWUgPSAwOwogIH0KCiAgLy8gVGhlIFRpbWVyIGZhY3RvcnkgcmVnaXN0ZXJlZCB3aXRoIHRoZSBkYXJ0OmFzeW5jIGxpYnJhcnkgYnkgdGhlIGVtYmVkZGVyLgogIHN0YXRpYyBUaW1lciBfZmFjdG9yeSgKICAgICAgaW50IG1pbGxpU2Vjb25kcywgdm9pZCBjYWxsYmFjayhUaW1lciB0aW1lciksIGJvb2wgcmVwZWF0aW5nKSB7CiAgICBpZiAocmVwZWF0aW5nKSB7CiAgICAgIHJldHVybiBuZXcgX1RpbWVyLnBlcmlvZGljKG1pbGxpU2Vjb25kcywgY2FsbGJhY2spOwogICAgfQogICAgcmV0dXJuIG5ldyBfVGltZXIobWlsbGlTZWNvbmRzLCBjYWxsYmFjayk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKX3NldHVwSG9va3MoKSB7CiAgVk1MaWJyYXJ5SG9va3MudGltZXJGYWN0b3J5ID0gX1RpbWVyLl9mYWN0b3J5Owp9CoHrAE5OPAEPASEBO1AKA04rAzATFhEBIUYBIgEgATkBGyERBiInFgQBGRMPDgQBHg0TFyEOBh0jLicoGQ8bCAYZHwQBExJKJxUEASEeJioeDw8IBgQBIxM7PR1KIwhMJAgmLQ8IHAYEASwiLh8nKQQBSwE6OjsCASAtHwEXNQFQICYBTk8pITEBS08mGwEmHScBKgFNJz43R0wBKAFNRxkbKhMEARUaGRscHRIBFE0ZAR5GNhwYBj9JRT42SwETTUkcFhIEAUE4BAFKNwQBLQEhLRocBAEqARkBTk4oEhZOQxwnGBIdBgQBHk8kFR0kDTwGBAFONxQeJR8gDywfCC4cDRchHwgGBAFNTiUaGCQYBhwEAVEqJiQlGlIvEUclIgg8HywhIAYaBAEmHk5QHw4GAUQ2TQ8fGSEIDiBCFw4GAUkmLk8jBgQBKSQlGkwnSk9NLRFHJSIIDU8PQBFLJSIIBhoEAS9NLDYUBgEnJQ4GAUpLER8PCi4fJiMBQ0JGJyojJyQwKhpMIC81Kg4MHAEbOD8oHgwqKgoIECIrMSYaCB0GBAEkFx4tKA0lSzAGH0gbGwQBRTAaGCQYBkEnBAEyIB1HIAYEAUgNKiIfPhkfHhoEASgdGBQbBhYeBAFPGUYVOgYvBAIBIhAxAgEiZGFydDppc29sYXRlLXBhdGNoL3RpbWVyX2ltcGwuZGFydERvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9pc29sYXRlL2NhcGFiaWxpdHkuZGFydIT5Ly8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuaXNvbGF0ZTsKCi8qKgogKiBBbiB1bmZvcmdlYWJsZSBvYmplY3QgdGhhdCBjb21lcyBiYWNrIGFzIGVxdWFsIHdoZW4gcGFzc2VkIHRocm91Z2ggb3RoZXIKICogaXNvbGF0ZXMuCiAqCiAqIFNlbmRpbmcgYSBjYXBhYmlsaXR5IG9iamVjdCB0byBhbm90aGVyIGlzb2xhdGUsIGFuZCBnZXR0aW5nIGl0IGJhY2ssCiAqIHdpbGwgcHJvZHVjZSBhbiBvYmplY3QgdGhhdCBpcyBlcXVhbCB0byB0aGUgb3JpZ2luYWwuCiAqIFRoZXJlIGlzIG5vIG90aGVyIHdheSB0byBjcmVhdGUgb2JqZWN0cyBlcXVhbCB0byBhIGNhcGFiaWxpdHkgb2JqZWN0LgogKgogKiBDYXBhYmlsaXRpZXMgY2FuIGJlIHVzZWQgYXMgYWNjZXNzIGd1YXJkczogQSByZW1vdGUgaXNvbGF0ZSBjYW4gc2VuZAogKiBhIHJlcXVlc3QgZm9yIGFuIG9wZXJhdGlvbiwgYnV0IGl0IGlzIG9ubHkgYWxsb3dlZCBpZiB0aGUgcmVxdWVzdCBjb250YWlucwogKiB0aGUgY29ycmVjdCBjYXBhYmlsaXR5IG9iamVjdC4KICoKICogVGhpcyBhbGxvd3MgZXhwb3NpbmcgdGhlIHNhbWUgaW50ZXJmYWNlIHRvIG11bHRpcGxlIGNsaWVudHMsCiAqIGJ1dCByZXN0cmljdGluZyBzb21lIG9wZXJhdGlvbnMgdG8gb25seSB0aG9zZSBjbGllbnRzCiAqIHRoYXQgaGF2ZSBhbHNvIGJlZW4gZ2l2ZW4gdGhlIGNvcnJlc3BvbmRpbmcgY2FwYWJpbGl0eS4KICoKICogQ2FwYWJpbGl0aWVzIGNhbiBiZSB1c2VkIGluc2lkZSBhIHNpbmdsZSBpc29sYXRlLAogKiBidXQgdGhleSBoYXZlIG5vIGFkdmFudGFnZSBvdmVyCiAqIGp1c3QgdXNpbmcgYG5ldyBPYmplY3RgIHRvIGNyZWF0ZSBhIHVuaXF1ZSBvYmplY3QsCiAqIGFuZCBpdCBvZmZlcnMgbm8gcmVhbCBzZWN1cml0eSBhZ2FpbnN0IG90aGVyIGNvZGUKICogcnVubmluZyBpbiB0aGUgc2FtZSBpc29sYXRlLgogKi8KY2xhc3MgQ2FwYWJpbGl0eSB7CiAgLyoqCiAgICogQ3JlYXRlIGEgbmV3IHVuZm9yZ2VhYmxlIGNhcGFiaWxpdHkgb2JqZWN0LgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgQ2FwYWJpbGl0eSgpOwp9CiYATk48AQ8BFgEETA0DSDlJA0hOIgNAOTsDNSM2NSAEEwYxBiECARxkYXJ0Omlzb2xhdGUvY2FwYWJpbGl0eS5kYXJ0O29yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL21hdGgvbWF0aC5kYXJ0mVgvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vLyBNYXRoZW1hdGljYWwgY29uc3RhbnRzIGFuZCBmdW5jdGlvbnMsIHBsdXMgYSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KLy8vCi8vLyBUbyB1c2UgdGhpcyBsaWJyYXJ5IGluIHlvdXIgY29kZToKLy8vCi8vLyAgICAgaW1wb3J0ICdkYXJ0Om1hdGgnOwovLy8KLy8vIHtAY2F0ZWdvcnkgQ29yZX0KbGlicmFyeSBkYXJ0Lm1hdGg7CgpwYXJ0ICJqZW5raW5zX3NtaV9oYXNoLmRhcnQiOwpwYXJ0ICJwb2ludC5kYXJ0IjsKcGFydCAicmFuZG9tLmRhcnQiOwpwYXJ0ICJyZWN0YW5nbGUuZGFydCI7CgovLy8gQmFzZSBvZiB0aGUgbmF0dXJhbCBsb2dhcml0aG1zLgovLy8KLy8vIFR5cGljYWxseSB3cml0dGVuIGFzICJlIi4KY29uc3QgZG91YmxlIGUgPSAyLjcxODI4MTgyODQ1OTA0NTsKCi8vLyBOYXR1cmFsIGxvZ2FyaXRobSBvZiAxMC4KLy8vCi8vLyBUaGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgMTAgaXMgdGhlIG51bWJlciBzdWNoIHRoYXQgYHBvdyhFLCBMTjEwKSA9PSAxMGAuCi8vLyBUaGlzIHZhbHVlIGlzIG5vdCBleGFjdCwgYnV0IGl0IGlzIHRoZSBjbG9zZXN0IHJlcHJlc2VudGFibGUgZG91YmxlIHRvIHRoZQovLy8gZXhhY3QgbWF0aGVtYXRpY2FsIHZhbHVlLgpjb25zdCBkb3VibGUgbG4xMCA9IDIuMzAyNTg1MDkyOTk0MDQ2OwoKLy8vIE5hdHVyYWwgbG9nYXJpdGhtIG9mIDIuCi8vLwovLy8gVGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIDIgaXMgdGhlIG51bWJlciBzdWNoIHRoYXQgYHBvdyhFLCBMTjIpID09IDJgLgovLy8gVGhpcyB2YWx1ZSBpcyBub3QgZXhhY3QsIGJ1dCBpdCBpcyB0aGUgY2xvc2VzdCByZXByZXNlbnRhYmxlIGRvdWJsZSB0byB0aGUKLy8vIGV4YWN0IG1hdGhlbWF0aWNhbCB2YWx1ZS4KY29uc3QgZG91YmxlIGxuMiA9IDAuNjkzMTQ3MTgwNTU5OTQ1MzsKCi8vLyBCYXNlLTIgbG9nYXJpdGhtIG9mIFtlXS4KY29uc3QgZG91YmxlIGxvZzJlID0gMS40NDI2OTUwNDA4ODg5NjM0OwoKLy8vIEJhc2UtMTAgbG9nYXJpdGhtIG9mIFtlXS4KY29uc3QgZG91YmxlIGxvZzEwZSA9IDAuNDM0Mjk0NDgxOTAzMjUxODsKCi8vLyBUaGUgUEkgY29uc3RhbnQuCmNvbnN0IGRvdWJsZSBwaSA9IDMuMTQxNTkyNjUzNTg5NzkzMjsKCi8vLyBTcXVhcmUgcm9vdCBvZiAxLzIuCmNvbnN0IGRvdWJsZSBzcXJ0MV8yID0gMC43MDcxMDY3ODExODY1NDc2OwoKLy8vIFNxdWFyZSByb290IG9mIDIuCmNvbnN0IGRvdWJsZSBzcXJ0MiA9IDEuNDE0MjEzNTYyMzczMDk1MTsKCi8vLyBSZXR1cm5zIHRoZSBsZXNzZXIgb2YgdHdvIG51bWJlcnMuCi8vLwovLy8gUmV0dXJucyBOYU4gaWYgZWl0aGVyIGFyZ3VtZW50IGlzIE5hTi4KLy8vIFRoZSBsZXNzZXIgb2YgYC0wLjBgIGFuZCBgMC4wYCBpcyBgLTAuMGAuCi8vLyBJZiB0aGUgYXJndW1lbnRzIGFyZSBvdGhlcndpc2UgZXF1YWwgKGluY2x1ZGluZyBpbnQgYW5kIGRvdWJsZXMgd2l0aCB0aGUKLy8vIHNhbWUgbWF0aGVtYXRpY2FsIHZhbHVlKSB0aGVuIGl0IGlzIHVuc3BlY2lmaWVkIHdoaWNoIG9mIHRoZSB0d28gYXJndW1lbnRzCi8vLyBpcyByZXR1cm5lZC4KZXh0ZXJuYWwgVCBtaW48VCBleHRlbmRzIG51bT4oVCBhLCBUIGIpOwoKLy8vIFJldHVybnMgdGhlIGxhcmdlciBvZiB0d28gbnVtYmVycy4KLy8vCi8vLyBSZXR1cm5zIE5hTiBpZiBlaXRoZXIgYXJndW1lbnQgaXMgTmFOLgovLy8gVGhlIGxhcmdlciBvZiBgLTAuMGAgYW5kIGAwLjBgIGlzIGAwLjBgLiBJZiB0aGUgYXJndW1lbnRzIGFyZQovLy8gb3RoZXJ3aXNlIGVxdWFsIChpbmNsdWRpbmcgaW50IGFuZCBkb3VibGVzIHdpdGggdGhlIHNhbWUgbWF0aGVtYXRpY2FsIHZhbHVlKQovLy8gdGhlbiBpdCBpcyB1bnNwZWNpZmllZCB3aGljaCBvZiB0aGUgdHdvIGFyZ3VtZW50cyBpcyByZXR1cm5lZC4KZXh0ZXJuYWwgVCBtYXg8VCBleHRlbmRzIG51bT4oVCBhLCBUIGIpOwoKLy8vIEEgdmFyaWFudCBvZiBbYXRhbl0uCi8vLwovLy8gQ29udmVydHMgYm90aCBhcmd1bWVudHMgdG8gW2RvdWJsZV1zLgovLy8KLy8vIFJldHVybnMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgYmV0d2VlbiB0aGUgcG9zaXRpdmUgeC1heGlzCi8vLyBhbmQgdGhlIHZlY3RvciAoW2JdLFthXSkuCi8vLyBUaGUgcmVzdWx0IGlzIGluIHRoZSByYW5nZSAtUEkuLlBJLgovLy8KLy8vIElmIFtiXSBpcyBwb3NpdGl2ZSwgdGhpcyBpcyB0aGUgc2FtZSBhcyBgYXRhbihhL2IpYC4KLy8vCi8vLyBUaGUgcmVzdWx0IGlzIG5lZ2F0aXZlIHdoZW4gW2FdIGlzIG5lZ2F0aXZlIChpbmNsdWRpbmcgd2hlbiBbYV0gaXMgdGhlCi8vLyBkb3VibGUgLTAuMCkuCi8vLwovLy8gSWYgW2FdIGlzIGVxdWFsIHRvIHplcm8sIHRoZSB2ZWN0b3IgKFtiXSxbYV0pIGlzIGNvbnNpZGVyZWQgcGFyYWxsZWwgdG8KLy8vIHRoZSB4LWF4aXMsIGV2ZW4gaWYgW2JdIGlzIGFsc28gZXF1YWwgdG8gemVyby4gVGhlIHNpZ24gb2YgW2JdIGRldGVybWluZXMKLy8vIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHZlY3RvciBhbG9uZyB0aGUgeC1heGlzLgovLy8KLy8vIFJldHVybnMgTmFOIGlmIGVpdGhlciBhcmd1bWVudCBpcyBOYU4uCmV4dGVybmFsIGRvdWJsZSBhdGFuMihudW0gYSwgbnVtIGIpOwoKLy8vIFJldHVybnMgW3hdIHRvIHRoZSBwb3dlciBvZiBbZXhwb25lbnRdLgovLy8KLy8vIElmIFt4XSBpcyBhbiBbaW50XSBhbmQgW2V4cG9uZW50XSBpcyBhIG5vbi1uZWdhdGl2ZSBbaW50XSwgdGhlIHJlc3VsdCBpcwovLy8gYW4gW2ludF0sIG90aGVyd2lzZSBib3RoIGFyZ3VtZW50cyBhcmUgY29udmVydGVkIHRvIGRvdWJsZXMgZmlyc3QsIGFuZCB0aGUKLy8vIHJlc3VsdCBpcyBhIFtkb3VibGVdLgovLy8KLy8vIEZvciBpbnRlZ2VycywgdGhlIHBvd2VyIGlzIGFsd2F5cyBlcXVhbCB0byB0aGUgbWF0aGVtYXRpY2FsIHJlc3VsdCBvZiBgeGAgdG8KLy8vIHRoZSBwb3dlciBgZXhwb25lbnRgLCBvbmx5IGxpbWl0ZWQgYnkgdGhlIGF2YWlsYWJsZSBtZW1vcnkuCi8vLwovLy8gRm9yIGRvdWJsZXMsIGBwb3coeCwgeSlgIGhhbmRsZXMgZWRnZSBjYXNlcyBhcyBmb2xsb3dzOgovLy8KLy8vIC0gaWYgYHlgIGlzIHplcm8gKDAuMCBvciAtMC4wKSwgdGhlIHJlc3VsdCBpcyBhbHdheXMgMS4wLgovLy8gLSBpZiBgeGAgaXMgMS4wLCB0aGUgcmVzdWx0IGlzIGFsd2F5cyAxLjAuCi8vLyAtIG90aGVyd2lzZSwgaWYgZWl0aGVyIGB4YCBvciBgeWAgaXMgTmFOIHRoZW4gdGhlIHJlc3VsdCBpcyBOYU4uCi8vLyAtIGlmIGB4YCBpcyBuZWdhdGl2ZSAoYnV0IG5vdCAtMC4wKSBhbmQgYHlgIGlzIGEgZmluaXRlIG5vbi1pbnRlZ2VyLCB0aGUKLy8vICAgcmVzdWx0IGlzIE5hTi4KLy8vIC0gaWYgYHhgIGlzIEluZmluaXR5IGFuZCBgeWAgaXMgbmVnYXRpdmUsIHRoZSByZXN1bHQgaXMgMC4wLgovLy8gLSBpZiBgeGAgaXMgSW5maW5pdHkgYW5kIGB5YCBpcyBwb3NpdGl2ZSwgdGhlIHJlc3VsdCBpcyBJbmZpbml0eS4KLy8vIC0gaWYgYHhgIGlzIDAuMCBhbmQgYHlgIGlzIG5lZ2F0aXZlLCB0aGUgcmVzdWx0IGlzIEluZmluaXR5LgovLy8gLSBpZiBgeGAgaXMgMC4wIGFuZCBgeWAgaXMgcG9zaXRpdmUsIHRoZSByZXN1bHQgaXMgMC4wLgovLy8gLSBpZiBgeGAgaXMgLUluZmluaXR5IG9yIC0wLjAgYW5kIGB5YCBpcyBhbiBvZGQgaW50ZWdlciwgdGhlbiB0aGUgcmVzdWx0IGlzCi8vLyAgIGAtcG93KC14ICx5KWAuCi8vLyAtIGlmIGB4YCBpcyAtSW5maW5pdHkgb3IgLTAuMCBhbmQgYHlgIGlzIG5vdCBhbiBvZGQgaW50ZWdlciwgdGhlbiB0aGUgcmVzdWx0Ci8vLyAgIGlzIHRoZSBzYW1lIGFzIGBwb3coLXggLCB5KWAuCi8vLyAtIGlmIGB5YCBpcyBJbmZpbml0eSBhbmQgdGhlIGFic29sdXRlIHZhbHVlIG9mIGB4YCBpcyBsZXNzIHRoYW4gMSwgdGhlCi8vLyAgIHJlc3VsdCBpcyAwLjAuCi8vLyAtIGlmIGB5YCBpcyBJbmZpbml0eSBhbmQgYHhgIGlzIC0xLCB0aGUgcmVzdWx0IGlzIDEuMC4KLy8vIC0gaWYgYHlgIGlzIEluZmluaXR5IGFuZCB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYHhgIGlzIGdyZWF0ZXIgdGhhbiAxLAovLy8gICB0aGUgcmVzdWx0IGlzIEluZmluaXR5LgovLy8gLSBpZiBgeWAgaXMgLUluZmluaXR5LCB0aGUgcmVzdWx0IGlzIGAxL3Bvdyh4LCBJbmZpbml0eSlgLgovLy8KLy8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGBwb3dgIGZ1bmN0aW9uIGRlZmluZWQgaW4gdGhlIElFRUUgU3RhbmRhcmQKLy8vIDc1NC0yMDA4LgovLy8KLy8vIE5vdGljZSB0aGF0IHRoZSByZXN1bHQgbWF5IG92ZXJmbG93LiBJZiBpbnRlZ2VycyBhcmUgcmVwcmVzZW50ZWQgYXMgNjQtYml0Ci8vLyBudW1iZXJzLCBhbiBpbnRlZ2VyIHJlc3VsdCBtYXkgYmUgdHJ1bmNhdGVkLCBhbmQgYSBkb3VibGUgcmVzdWx0IG1heQovLy8gb3ZlcmZsb3cgdG8gcG9zaXRpdmUgb3IgbmVnYXRpdmUgW2RvdWJsZS5pbmZpbml0eV0uCmV4dGVybmFsIG51bSBwb3cobnVtIHgsIG51bSBleHBvbmVudCk7CgovLy8gQ29udmVydHMgW3JhZGlhbnNdIHRvIGEgW2RvdWJsZV0gYW5kIHJldHVybnMgdGhlIHNpbmUgb2YgdGhlIHZhbHVlLgovLy8KLy8vIElmIFtyYWRpYW5zXSBpcyBub3QgYSBmaW5pdGUgbnVtYmVyLCB0aGUgcmVzdWx0IGlzIE5hTi4KZXh0ZXJuYWwgZG91YmxlIHNpbihudW0gcmFkaWFucyk7CgovLy8gQ29udmVydHMgW3JhZGlhbnNdIHRvIGEgW2RvdWJsZV0gYW5kIHJldHVybnMgdGhlIGNvc2luZSBvZiB0aGUgdmFsdWUuCi8vLwovLy8gSWYgW3JhZGlhbnNdIGlzIG5vdCBhIGZpbml0ZSBudW1iZXIsIHRoZSByZXN1bHQgaXMgTmFOLgpleHRlcm5hbCBkb3VibGUgY29zKG51bSByYWRpYW5zKTsKCi8vLyBDb252ZXJ0cyBbcmFkaWFuc10gdG8gYSBbZG91YmxlXSBhbmQgcmV0dXJucyB0aGUgdGFuZ2VudCBvZiB0aGUgdmFsdWUuCi8vLwovLy8gVGhlIHRhbmdlbnQgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBgc2luKHJhZGlhbnMpL2NvcyhyYWRpYW5zKWAgYW5kIG1heSBiZQovLy8gaW5maW5pdGUgKHBvc2l0aXZlIG9yIG5lZ2F0aXZlKSB3aGVuIGBjb3MocmFkaWFucylgIGlzIGVxdWFsIHRvIHplcm8uCi8vLyBJZiBbcmFkaWFuc10gaXMgbm90IGEgZmluaXRlIG51bWJlciwgdGhlIHJlc3VsdCBpcyBOYU4uCmV4dGVybmFsIGRvdWJsZSB0YW4obnVtIHJhZGlhbnMpOwoKLy8vIENvbnZlcnRzIFt4XSB0byBhIFtkb3VibGVdIGFuZCByZXR1cm5zIGl0cyBhcmMgY29zaW5lIGluIHJhZGlhbnMuCi8vLwovLy8gUmV0dXJucyBhIHZhbHVlIGluIHRoZSByYW5nZSAwLi5QSSwgb3IgTmFOIGlmIFt4XSBpcyBvdXRzaWRlCi8vLyB0aGUgcmFuZ2UgLTEuLjEuCmV4dGVybmFsIGRvdWJsZSBhY29zKG51bSB4KTsKCi8vLyBDb252ZXJ0cyBbeF0gdG8gYSBbZG91YmxlXSBhbmQgcmV0dXJucyBpdHMgYXJjIHNpbmUgaW4gcmFkaWFucy4KLy8vCi8vLyBSZXR1cm5zIGEgdmFsdWUgaW4gdGhlIHJhbmdlIC1QSS8yLi5QSS8yLCBvciBOYU4gaWYgW3hdIGlzIG91dHNpZGUKLy8vIHRoZSByYW5nZSAtMS4uMS4KZXh0ZXJuYWwgZG91YmxlIGFzaW4obnVtIHgpOwoKLy8vIENvbnZlcnRzIFt4XSB0byBhIFtkb3VibGVdIGFuZCByZXR1cm5zIGl0cyBhcmMgdGFuZ2VudCBpbiByYWRpYW5zLgovLy8KLy8vIFJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgLVBJLzIuLlBJLzIsIG9yIE5hTiBpZiBbeF0gaXMgTmFOLgpleHRlcm5hbCBkb3VibGUgYXRhbihudW0geCk7CgovLy8gQ29udmVydHMgW3hdIHRvIGEgW2RvdWJsZV0gYW5kIHJldHVybnMgdGhlIHBvc2l0aXZlIHNxdWFyZSByb290IG9mIHRoZQovLy8gdmFsdWUuCi8vLwovLy8gUmV0dXJucyAtMC4wIGlmIFt4XSBpcyAtMC4wLCBhbmQgTmFOIGlmIFt4XSBpcyBvdGhlcndpc2UgbmVnYXRpdmUgb3IgTmFOLgpleHRlcm5hbCBkb3VibGUgc3FydChudW0geCk7CgovLy8gQ29udmVydHMgW3hdIHRvIGEgW2RvdWJsZV0gYW5kIHJldHVybnMgdGhlIG5hdHVyYWwgZXhwb25lbnQsIFtlXSwKLy8vIHRvIHRoZSBwb3dlciBbeF0uCi8vLwovLy8gUmV0dXJucyBOYU4gaWYgW3hdIGlzIE5hTi4KZXh0ZXJuYWwgZG91YmxlIGV4cChudW0geCk7CgovLy8gQ29udmVydHMgW3hdIHRvIGEgW2RvdWJsZV0gYW5kIHJldHVybnMgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIHRoZSB2YWx1ZS4KLy8vCi8vLyBSZXR1cm5zIG5lZ2F0aXZlIGluZmluaXR5IGlmIFt4XSBpcyBlcXVhbCB0byB6ZXJvLgovLy8gUmV0dXJucyBOYU4gaWYgW3hdIGlzIE5hTiBvciBsZXNzIHRoYW4gemVyby4KZXh0ZXJuYWwgZG91YmxlIGxvZyhudW0geCk7CoC3AE5OPAEPAUoEJgQcBBUTAR4TFBcBJAQeJAEdBE5PHicBHARLTx4nAR0pAR4qARUmARgrARYpAScEKy5NTxEpAScEK0JRQykBGQQqBD0eKAQ5BEsSBExOMgQrJQEsBE1PGgRRQAQ8BD4vRU0VQUZBPFAVUSRLFTtKHj8ESA4ET0k4JwFIBDwiAUoEPCIBSwRRSjwiAUYEQRUdAUQERxUdAUcERB0BSwsETh0BRhYEHxwBTwQ3MRwBCWRhcnQ6bWF0aE1vcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vbGliL21hdGhfcGF0Y2guZGFydKM2Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgovLy8gTm90ZTogdGhlIFZNIGNvbmNhdGVuYXRlcyBhbGwgcGF0Y2ggZmlsZXMgaW50byBhIHNpbmdsZSBwYXRjaCBmaWxlLiBUaGlzCi8vLyBmaWxlIGlzIHRoZSBmaXJzdCBwYXRjaCBpbiAiZGFydDptYXRoIiB3aGljaCBjb250YWlucyBhbGwgdGhlIGltcG9ydHMgdXNlZAovLy8gYnkgcGF0Y2hlcyBvZiB0aGF0IGxpYnJhcnkuIFdlIHBsYW4gdG8gY2hhbmdlIHRoaXMgd2hlbiB3ZSBoYXZlIGEgc2hhcmVkCi8vLyBmcm9udCBlbmQgYW5kIHNpbXBseSB1c2UgcGFydHMuCgppbXBvcnQgImRhcnQ6X2ludGVybmFsIiBzaG93IHBhdGNoOwoKaW1wb3J0ICJkYXJ0OnR5cGVkX2RhdGEiIHNob3cgVWludDMyTGlzdDsKCi8vLyBUaGVyZSBhcmUgbm8gcGFydHMgb2YgdGhpcyBwYXRjaCBsaWJyYXJ5LgoKQHBhdGNoCkBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQpUIG1pbjxUIGV4dGVuZHMgbnVtPihUIGEsIFQgYikgewogIGlmIChhID4gYikgcmV0dXJuIGI7CiAgaWYgKGEgPCBiKSByZXR1cm4gYTsKICBpZiAoYiBpcyBkb3VibGUpIHsKICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgTmFOIGFuZCAtMC4wLiBJZiBvbmUgYXJndW1lbnQgaXMgTmFOIHJldHVybiBOYU4uCiAgICAvLyBbbWluXSBtdXN0IGFsc28gZGlzdGluZ3Vpc2ggYmV0d2VlbiAtMC4wIGFuZCAwLjAuCiAgICBpZiAoYSBpcyBkb3VibGUpIHsKICAgICAgaWYgKGEgPT0gMC4wKSB7CiAgICAgICAgLy8gYSBpcyBlaXRoZXIgMC4wIG9yIC0wLjAuIGIgaXMgZWl0aGVyIDAuMCwgLTAuMCBvciBOYU4uCiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyByZXR1cm5zIC0wLjAgaWYgZWl0aGVyIGEgb3IgYiBpcyAtMC4wLCBhbmQgaXQKICAgICAgICAvLyByZXR1cm5zIE5hTiBpZiBiIGlzIE5hTi4KICAgICAgICBudW0gbiA9IChhICsgYikgKiBhICogYjsKICAgICAgICByZXR1cm4gbjsKICAgICAgfQogICAgfQogICAgLy8gQ2hlY2sgZm9yIE5hTiBhbmQgYiA9PSAtMC4wLgogICAgaWYgKGEgPT0gMCAmJiBiLmlzTmVnYXRpdmUgfHwgYi5pc05hTikgcmV0dXJuIGI7CiAgICByZXR1cm4gYTsKICB9CiAgcmV0dXJuIGE7Cn0KCkBwYXRjaApAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKVCBtYXg8VCBleHRlbmRzIG51bT4oVCBhLCBUIGIpIHsKICBpZiAoYSA+IGIpIHJldHVybiBhOwogIGlmIChhIDwgYikgcmV0dXJuIGI7CiAgaWYgKGIgaXMgZG91YmxlKSB7CiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIE5hTiBhbmQgLTAuMC4gSWYgb25lIGFyZ3VtZW50IGlzIE5hTiByZXR1cm4gTmFOLgogICAgLy8gW21heF0gbXVzdCBhbHNvIGRpc3Rpbmd1aXNoIGJldHdlZW4gLTAuMCBhbmQgMC4wLgogICAgaWYgKGEgaXMgZG91YmxlKSB7CiAgICAgIGlmIChhID09IDAuMCkgewogICAgICAgIC8vIGEgaXMgZWl0aGVyIDAuMCBvciAtMC4wLiBiIGlzIGVpdGhlciAwLjAsIC0wLjAsIG9yIE5hTi4KICAgICAgICAvLyBUaGUgZm9sbG93aW5nIHJldHVybnMgMC4wIGlmIGVpdGhlciBhIG9yIGIgaXMgMC4wLCBhbmQgaXQKICAgICAgICAvLyByZXR1cm5zIE5hTiBpZiBiIGlzIE5hTi4KICAgICAgICBudW0gbiA9IGEgKyBiOwogICAgICAgIHJldHVybiBuOwogICAgICB9CiAgICB9CiAgICAvLyBDaGVjayBmb3IgTmFOLgogICAgaWYgKGIuaXNOYU4pIHJldHVybiBiOwogICAgcmV0dXJuIGE7CiAgfQogIC8vIG1heCgtMC4wLCAwKSBtdXN0IHJldHVybiAwLgogIGlmIChiID09IDAgJiYgYS5pc05lZ2F0aXZlKSByZXR1cm4gYjsKICByZXR1cm4gYTsKfQoKLy8gSWYgW3hdIGlzIGFuIFtpbnRdIGFuZCBbZXhwb25lbnRdIGlzIGEgbm9uLW5lZ2F0aXZlIFtpbnRdLCB0aGUgcmVzdWx0IGlzCi8vIGFuIFtpbnRdLCBvdGhlcndpc2UgdGhlIHJlc3VsdCBpcyBhIFtkb3VibGVdLgpAcGF0Y2gKQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCm51bSBwb3cobnVtIHgsIG51bSBleHBvbmVudCkgewogIGlmICgoeCBpcyBpbnQpICYmIChleHBvbmVudCBpcyBpbnQpICYmIChleHBvbmVudCA+PSAwKSkgewogICAgcmV0dXJuIF9pbnRQb3coeCwgZXhwb25lbnQpOwogIH0KICByZXR1cm4gX2RvdWJsZVBvdyh4LnRvRG91YmxlKCksIGV4cG9uZW50LnRvRG91YmxlKCkpOwp9CgpAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCmRvdWJsZSBfZG91YmxlUG93KGRvdWJsZSBiYXNlLCBkb3VibGUgZXhwb25lbnQpIHsKICBpZiAoZXhwb25lbnQgPT0gMC4wKSB7CiAgICByZXR1cm4gMS4wOyAvLyBFQ01BLTI2MiAxNS44LjIuMTMKICB9CiAgLy8gU3BlZWQgdXAgc2ltcGxlIGNhc2VzLgogIGlmIChleHBvbmVudCA9PSAxLjApIHJldHVybiBiYXNlOwogIGlmIChleHBvbmVudCA9PSAyLjApIHJldHVybiBiYXNlICogYmFzZTsKICBpZiAoZXhwb25lbnQgPT0gMy4wKSByZXR1cm4gYmFzZSAqIGJhc2UgKiBiYXNlOwoKICBpZiAoYmFzZSA9PSAxLjApIHJldHVybiAxLjA7CgogIGlmIChiYXNlLmlzTmFOIHx8IGV4cG9uZW50LmlzTmFOKSB7CiAgICByZXR1cm4gZG91YmxlLm5hbjsKICB9CiAgaWYgKChiYXNlICE9IC1kb3VibGUuaW5maW5pdHkpICYmIChleHBvbmVudCA9PSAwLjUpKSB7CiAgICBpZiAoYmFzZSA9PSAwLjApIHsKICAgICAgcmV0dXJuIDAuMDsKICAgIH0KICAgIHJldHVybiBzcXJ0KGJhc2UpOwogIH0KICByZXR1cm4gX3BvdyhiYXNlLnRvRG91YmxlKCksIGV4cG9uZW50LnRvRG91YmxlKCkpOwp9Cgpkb3VibGUgX3Bvdyhkb3VibGUgYmFzZSwgZG91YmxlIGV4cG9uZW50KSBuYXRpdmUgIk1hdGhfZG91YmxlUG93IjsKCmludCBfaW50UG93KGludCBiYXNlLCBpbnQgZXhwb25lbnQpIHsKICAvLyBFeHBvbmVudGlhdGlvbiBieSBzcXVhcmluZy4KICBpbnQgcmVzdWx0ID0gMTsKICB3aGlsZSAoZXhwb25lbnQgIT0gMCkgewogICAgaWYgKChleHBvbmVudCAmIDEpID09IDEpIHsKICAgICAgcmVzdWx0ICo9IGJhc2U7CiAgICB9CiAgICBleHBvbmVudCA+Pj0gMTsKICAgIC8vIFNraXAgdW5uZWNlc3Nhcnkgb3BlcmF0aW9uIChjYW4gb3ZlcmZsb3cgdG8gTWludCkuCiAgICBpZiAoZXhwb25lbnQgIT0gMCkgewogICAgICBiYXNlICo9IGJhc2U7CiAgICB9CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KCkBwYXRjaApAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCkBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCmRvdWJsZSBhdGFuMihudW0gYSwgbnVtIGIpID0+IF9hdGFuMihhLnRvRG91YmxlKCksIGIudG9Eb3VibGUoKSk7CkBwYXRjaApAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCkBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCmRvdWJsZSBzaW4obnVtIHJhZGlhbnMpID0+IF9zaW4ocmFkaWFucy50b0RvdWJsZSgpKTsKQHBhdGNoCkBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfRG91YmxlIikKQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKZG91YmxlIGNvcyhudW0gcmFkaWFucykgPT4gX2NvcyhyYWRpYW5zLnRvRG91YmxlKCkpOwpAcGF0Y2gKQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQpAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQpkb3VibGUgdGFuKG51bSByYWRpYW5zKSA9PiBfdGFuKHJhZGlhbnMudG9Eb3VibGUoKSk7CkBwYXRjaApAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCkBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCmRvdWJsZSBhY29zKG51bSB4KSA9PiBfYWNvcyh4LnRvRG91YmxlKCkpOwpAcGF0Y2gKQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQpAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQpkb3VibGUgYXNpbihudW0geCkgPT4gX2FzaW4oeC50b0RvdWJsZSgpKTsKQHBhdGNoCkBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfRG91YmxlIikKQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKZG91YmxlIGF0YW4obnVtIHgpID0+IF9hdGFuKHgudG9Eb3VibGUoKSk7CkBwYXRjaApAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCkBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCmRvdWJsZSBzcXJ0KG51bSB4KSA9PiBfc3FydCh4LnRvRG91YmxlKCkpOwpAcGF0Y2gKQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCmRvdWJsZSBleHAobnVtIHgpID0+IF9leHAoeC50b0RvdWJsZSgpKTsKQHBhdGNoCkBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQpkb3VibGUgbG9nKG51bSB4KSA9PiBfbG9nKHgudG9Eb3VibGUoKSk7Cgpkb3VibGUgX2F0YW4yKGRvdWJsZSBhLCBkb3VibGUgYikgbmF0aXZlICJNYXRoX2F0YW4yIjsKZG91YmxlIF9zaW4oZG91YmxlIHgpIG5hdGl2ZSAiTWF0aF9zaW4iOwpkb3VibGUgX2Nvcyhkb3VibGUgeCkgbmF0aXZlICJNYXRoX2NvcyI7CmRvdWJsZSBfdGFuKGRvdWJsZSB4KSBuYXRpdmUgIk1hdGhfdGFuIjsKZG91YmxlIF9hY29zKGRvdWJsZSB4KSBuYXRpdmUgIk1hdGhfYWNvcyI7CmRvdWJsZSBfYXNpbihkb3VibGUgeCkgbmF0aXZlICJNYXRoX2FzaW4iOwpkb3VibGUgX2F0YW4oZG91YmxlIHgpIG5hdGl2ZSAiTWF0aF9hdGFuIjsKZG91YmxlIF9zcXJ0KGRvdWJsZSB4KSBuYXRpdmUgIk1hdGhfc3FydCI7CmRvdWJsZSBfZXhwKGRvdWJsZSB4KSBuYXRpdmUgIk1hdGhfZXhwIjsKZG91YmxlIF9sb2coZG91YmxlIHgpIG5hdGl2ZSAiTWF0aF9sb2ciOwoKLy8gVE9ETyhpcG9zdmEpOiBIYW5kbGUgcGF0Y2ggbWV0aG9kcyB3aXRoaW4gYSBwYXRjaCBjbGFzcyBjb3JyZWN0bHkuCkBwYXRjaApjbGFzcyBSYW5kb20gewogIEBwYXRjaAogIGZhY3RvcnkgUmFuZG9tKFtpbnQgc2VlZF0pIHsKICAgIHZhciBzdGF0ZSA9IF9SYW5kb20uX3NldHVwU2VlZCgoc2VlZCA9PSBudWxsKSA/IF9SYW5kb20uX25leHRTZWVkKCkgOiBzZWVkKTsKICAgIC8vIENyYW5rIGEgY291cGxlIG9mIHRpbWVzIHRvIGRpc3RyaWJ1dGUgdGhlIHNlZWQgYml0cyBhIGJpdCBmdXJ0aGVyLgogICAgcmV0dXJuIG5ldyBfUmFuZG9tLl93aXRoU3RhdGUoc3RhdGUpCiAgICAgIC4uX25leHRTdGF0ZSgpCiAgICAgIC4uX25leHRTdGF0ZSgpCiAgICAgIC4uX25leHRTdGF0ZSgpCiAgICAgIC4uX25leHRTdGF0ZSgpOwogIH0KCiAgQHBhdGNoCiAgZmFjdG9yeSBSYW5kb20uc2VjdXJlKCkgewogICAgcmV0dXJuIG5ldyBfU2VjdXJlUmFuZG9tKCk7CiAgfQp9CgpjbGFzcyBfUmFuZG9tIGltcGxlbWVudHMgUmFuZG9tIHsKICAvLyBJbnRlcm5hbCBzdGF0ZSBvZiB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGZpbmFsIFVpbnQzMkxpc3QgX3N0YXRlOwogIHN0YXRpYyBjb25zdCBfa1NUQVRFX0xPID0gMDsKICBzdGF0aWMgY29uc3QgX2tTVEFURV9ISSA9IDE7IC8vIFVudXNlZCBpbiBEYXJ0IGNvZGUuCgogIF9SYW5kb20uX3dpdGhTdGF0ZSh0aGlzLl9zdGF0ZSk7CgogIC8vIFRoZSBhbGdvcml0aG0gdXNlZCBoZXJlIGlzIE11bHRpcGx5IHdpdGggQ2FycnkgKE1XQykgd2l0aCBhIEJhc2UgYiA9IDJeMzIuCiAgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NdWx0aXBseS13aXRoLWNhcnJ5CiAgLy8gVGhlIGNvbnN0YW50IEEgaXMgc2VsZWN0ZWQgZnJvbSAiTnVtZXJpY2FsIFJlY2lwZXMgM3JkIEVkaXRpb24iIHAuMzQ4IEIxLgoKICAvLyBJbXBsZW1lbnRzOgogIC8vICAgY29uc3QgX0EgPSAweGZmZmZkYTYxOwogIC8vICAgdmFyIHN0YXRlID0KICAvLyAgICAgICAoKF9BICogKF9zdGF0ZVtfa1NUQVRFX0xPXSkpICsgX3N0YXRlW19rU1RBVEVfSEldKSAmICgoMSA8PCA2NCkgLSAxKTsKICAvLyAgIF9zdGF0ZVtfa1NUQVRFX0xPXSA9IHN0YXRlICYgKCgxIDw8IDMyKSAtIDEpOwogIC8vICAgX3N0YXRlW19rU1RBVEVfSEldID0gc3RhdGUgPj4gMzI7CiAgLy8gVGhpcyBpcyBhIG5hdGl2ZSB0byBwcmV2ZW50IDY0LWJpdCBvcGVyYXRpb25zIGluIERhcnQsIHdoaWNoCiAgLy8gZmFpbCB3aXRoIC0tdGhyb3dfb25famF2YXNjcmlwdF9pbnRfb3ZlcmZsb3cuCiAgLy8gVE9ETyhyZWdpcyk6IEltcGxlbWVudCBpbiBEYXJ0IGFuZCByZW1vdmUgUmFuZG9tX25leHRTdGF0ZSBpbiBtYXRoLmNjLgogIHZvaWQgX25leHRTdGF0ZSgpIG5hdGl2ZSAiUmFuZG9tX25leHRTdGF0ZSI7CgogIGludCBuZXh0SW50KGludCBtYXgpIHsKICAgIGNvbnN0IGxpbWl0ID0gMHgzRkZGRkZGRjsKICAgIGlmICgobWF4IDw9IDApIHx8ICgobWF4ID4gbGltaXQpICYmIChtYXggPiBfUE9XMl8zMikpKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKAogICAgICAgICAgbWF4LCAxLCBfUE9XMl8zMiwgIm1heCIsICJNdXN0IGJlIHBvc2l0aXZlIGFuZCA8PSAyXjMyIik7CiAgICB9CiAgICBpZiAoKG1heCAmIC1tYXgpID09IG1heCkgewogICAgICAvLyBGYXN0IGNhc2UgZm9yIHBvd2VycyBvZiB0d28uCiAgICAgIF9uZXh0U3RhdGUoKTsKICAgICAgcmV0dXJuIF9zdGF0ZVtfa1NUQVRFX0xPXSAmIChtYXggLSAxKTsKICAgIH0KCiAgICB2YXIgcm5kMzI7CiAgICB2YXIgcmVzdWx0OwogICAgZG8gewogICAgICBfbmV4dFN0YXRlKCk7CiAgICAgIHJuZDMyID0gX3N0YXRlW19rU1RBVEVfTE9dOwogICAgICByZXN1bHQgPSBybmQzMiAlIG1heDsKICAgIH0gd2hpbGUgKChybmQzMiAtIHJlc3VsdCArIG1heCkgPiBfUE9XMl8zMik7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgZG91YmxlIG5leHREb3VibGUoKSB7CiAgICByZXR1cm4gKChuZXh0SW50KDEgPDwgMjYpICogX1BPVzJfMjdfRCkgKyBuZXh0SW50KDEgPDwgMjcpKSAvIF9QT1cyXzUzX0Q7CiAgfQoKICBib29sIG5leHRCb29sKCkgewogICAgcmV0dXJuIG5leHRJbnQoMikgPT0gMDsKICB9CgogIC8vIENvbnN0YW50cyB1c2VkIGJ5IHRoZSBhbGdvcml0aG0uCiAgc3RhdGljIGNvbnN0IF9QT1cyXzMyID0gMSA8PCAzMjsKICBzdGF0aWMgY29uc3QgX1BPVzJfNTNfRCA9IDEuMCAqICgxIDw8IDUzKTsKICBzdGF0aWMgY29uc3QgX1BPVzJfMjdfRCA9IDEuMCAqICgxIDw8IDI3KTsKCiAgLy8gVXNlIGEgc2luZ2xldG9uIFJhbmRvbSBvYmplY3QgdG8gZ2V0IGEgbmV3IHNlZWQgaWYgbm8gc2VlZCB3YXMgcGFzc2VkLgogIHN0YXRpYyBmaW5hbCBfcHJuZyA9IG5ldyBfUmFuZG9tLl93aXRoU3RhdGUoX2luaXRpYWxTZWVkKCkpOwoKICAvLyBUaGlzIGlzIGEgbmF0aXZlIHRvIHByZXZlbnQgNjQtYml0IG9wZXJhdGlvbnMgaW4gRGFydCwgd2hpY2gKICAvLyBmYWlsIHdpdGggLS10aHJvd19vbl9qYXZhc2NyaXB0X2ludF9vdmVyZmxvdy4KICAvLyBUT0RPKHJlZ2lzKTogSW1wbGVtZW50IGhlcmUgaW4gRGFydCBhbmQgcmVtb3ZlIG5hdGl2ZSBpbiBtYXRoLmNjLgogIHN0YXRpYyBVaW50MzJMaXN0IF9zZXR1cFNlZWQoaW50IHNlZWQpIG5hdGl2ZSAiUmFuZG9tX3NldHVwU2VlZCI7CiAgLy8gR2V0IGEgc2VlZCBmcm9tIHRoZSBWTSdzIHJhbmRvbSBudW1iZXIgcHJvdmlkZXIuCiAgc3RhdGljIFVpbnQzMkxpc3QgX2luaXRpYWxTZWVkKCkgbmF0aXZlICJSYW5kb21faW5pdGlhbFNlZWQiOwoKICBzdGF0aWMgaW50IF9uZXh0U2VlZCgpIHsKICAgIC8vIFRyaWdnZXIgdGhlIFBSTkcgb25jZSB0byBjaGFuZ2UgdGhlIGludGVybmFsIHN0YXRlLgogICAgX3BybmcuX25leHRTdGF0ZSgpOwogICAgcmV0dXJuIF9wcm5nLl9zdGF0ZVtfa1NUQVRFX0xPXTsKICB9Cn0KCmNsYXNzIF9TZWN1cmVSYW5kb20gaW1wbGVtZW50cyBSYW5kb20gewogIF9TZWN1cmVSYW5kb20oKSB7CiAgICAvLyBUaHJvdyBlYXJseSBpbiBjb25zdHJ1Y3RvciBpZiBlbnRyb3B5IHNvdXJjZSBpcyBub3QgaG9va2VkIHVwLgogICAgX2dldEJ5dGVzKDEpOwogIH0KCiAgLy8gUmV0dXJuIGNvdW50IGJ5dGVzIG9mIGVudHJvcHkgYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyOyBjb3VudCA8PSA4LgogIHN0YXRpYyBpbnQgX2dldEJ5dGVzKGludCBjb3VudCkgbmF0aXZlICJTZWN1cmVSYW5kb21fZ2V0Qnl0ZXMiOwoKICBpbnQgbmV4dEludChpbnQgbWF4KSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsdWVJbkludGVydmFsKAogICAgICAgIG1heCwgMSwgX1BPVzJfMzIsICJtYXgiLCAiTXVzdCBiZSBwb3NpdGl2ZSBhbmQgPD0gMl4zMiIpOwogICAgZmluYWwgYnl0ZUNvdW50ID0gKChtYXggLSAxKS5iaXRMZW5ndGggKyA3KSA+PiAzOwogICAgaWYgKGJ5dGVDb3VudCA9PSAwKSB7CiAgICAgIHJldHVybiAwOyAvLyBOb3QgcmFuZG9tIGlmIG1heCA9PSAxLgogICAgfQogICAgdmFyIHJuZDsKICAgIHZhciByZXN1bHQ7CiAgICBkbyB7CiAgICAgIHJuZCA9IF9nZXRCeXRlcyhieXRlQ291bnQpOwogICAgICByZXN1bHQgPSBybmQgJSBtYXg7CiAgICB9IHdoaWxlICgocm5kIC0gcmVzdWx0ICsgbWF4KSA+ICgxIDw8IChieXRlQ291bnQgPDwgMykpKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBkb3VibGUgbmV4dERvdWJsZSgpIHsKICAgIHJldHVybiAoX2dldEJ5dGVzKDcpID4+IDMpIC8gX1BPVzJfNTNfRDsKICB9CgogIGJvb2wgbmV4dEJvb2woKSB7CiAgICByZXR1cm4gX2dldEJ5dGVzKDEpLmlzRXZlbjsKICB9CgogIC8vIENvbnN0YW50cyB1c2VkIGJ5IHRoZSBhbGdvcml0aG0uCiAgc3RhdGljIGNvbnN0IF9QT1cyXzMyID0gMSA8PCAzMjsKICBzdGF0aWMgY29uc3QgX1BPVzJfNTNfRCA9IDEuMCAqICgxIDw8IDUzKTsKfQqBMQBOTjwBDwFNT00kASQBKgEuAQccIRcXFUk5FxZCRyQhEggGJDUOBAwCAQccIRcXFUk5FxZDRSQXEggGFhsOBCEoDAIBTDEHHB88IQQ4AgE1MhkmBBwkKzIBHwEmFwQ5FxIGFwQ1AgFDASYhEhofFgYUOhkUBgQRAgEHNRtCBzUbNQc1GzUHNRs1BzUbKwc1GysHNRsrBzUbKwccKQccKQE3KSkpKysrKykpAUYHDwkfUUopFRUVFgQBCRwgBAIBIjQcGx83ASMBUDZPAREeE1E1KUIzTC8BGR49IkQGHyYULQYBDxAJFCIcMRMEARhOBAEUHAQBJiMtLQFMPwFCM0dENkABGzsYJQQCASgURhIEAUZCARklQjYaKwYNEAkiGj4TBAEYLQQBFCAEASYjLQIBH2RhcnQ6bWF0aC1wYXRjaC9tYXRoX3BhdGNoLmRhcnRHb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvbWF0aC9qZW5raW5zX3NtaV9oYXNoLmRhcnSFQy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQubWF0aDsKCi8vLyBUaGlzIGlzIHRoZSBbSmVua2lucyBoYXNoIGZ1bmN0aW9uXVsxXSBidXQgdXNpbmcgbWFza2luZyB0byBrZWVwCi8vLyB2YWx1ZXMgaW4gU01JIHJhbmdlLgovLy8KLy8vIFsxXTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9KZW5raW5zX2hhc2hfZnVuY3Rpb24KLy8vCi8vLyBVc2U6Ci8vLyBIYXNoIGVhY2ggdmFsdWUgd2l0aCB0aGUgaGFzaCBvZiB0aGUgcHJldmlvdXMgdmFsdWUsIHRoZW4gZ2V0IHRoZSBmaW5hbAovLy8gaGFzaCBieSBjYWxsaW5nIGZpbmlzaC4KLy8vCi8vLyAgICAgdmFyIGhhc2ggPSAwOwovLy8gICAgIGZvciAodmFyIHZhbHVlIGluIHZhbHVlcykgewovLy8gICAgICAgaGFzaCA9IEplbmtpbnNTbWlIYXNoLmNvbWJpbmUoaGFzaCwgdmFsdWUuaGFzaENvZGUpOwovLy8gICAgIH0KLy8vICAgICBoYXNoID0gSmVua2luc1NtaUhhc2guZmluaXNoKGhhc2gpOwpjbGFzcyBfSmVua2luc1NtaUhhc2ggewogIC8vIFRPRE8oMTE2MTcpOiBUaGlzIGNsYXNzIHNob3VsZCBiZSBvcHRpbWl6ZWQgYW5kIHN0YW5kYXJkaXplZCBlbHNld2hlcmUuCgogIHN0YXRpYyBpbnQgY29tYmluZShpbnQgaGFzaCwgaW50IHZhbHVlKSB7CiAgICBoYXNoID0gMHgxZmZmZmZmZiAmIChoYXNoICsgdmFsdWUpOwogICAgaGFzaCA9IDB4MWZmZmZmZmYgJiAoaGFzaCArICgoMHgwMDA3ZmZmZiAmIGhhc2gpIDw8IDEwKSk7CiAgICByZXR1cm4gaGFzaCBeIChoYXNoID4+IDYpOwogIH0KCiAgc3RhdGljIGludCBmaW5pc2goaW50IGhhc2gpIHsKICAgIGhhc2ggPSAweDFmZmZmZmZmICYgKGhhc2ggKyAoKDB4MDNmZmZmZmYgJiBoYXNoKSA8PCAzKSk7CiAgICBoYXNoID0gaGFzaCBeIChoYXNoID4+IDExKTsKICAgIHJldHVybiAweDFmZmZmZmZmICYgKGhhc2ggKyAoKDB4MDAwMDNmZmYgJiBoYXNoKSA8PCAxNSkpOwogIH0KCiAgc3RhdGljIGludCBoYXNoMihhLCBiKSA9PiBmaW5pc2goY29tYmluZShjb21iaW5lKDAsIGEpLCBiKSk7CgogIHN0YXRpYyBpbnQgaGFzaDQoYSwgYiwgYywgZCkgPT4KICAgICAgZmluaXNoKGNvbWJpbmUoY29tYmluZShjb21iaW5lKGNvbWJpbmUoMCwgYSksIGIpLCBjKSwgZCkpOwp9CisATk48DwETAUUZBDwECUwcBBYkPwosGE0BLCg+HwQBID0gPgQBPwEiQQIBH2RhcnQ6bWF0aC9qZW5raW5zX3NtaV9oYXNoLmRhcnQ8b3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvbWF0aC9wb2ludC5kYXJ0igIvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0Lm1hdGg7CgovLy8gQSB1dGlsaXR5IGNsYXNzIGZvciByZXByZXNlbnRpbmcgdHdvLWRpbWVuc2lvbmFsIHBvc2l0aW9ucy4KY2xhc3MgUG9pbnQ8VCBleHRlbmRzIG51bT4gewogIGZpbmFsIFQgeDsKICBmaW5hbCBUIHk7CgogIGNvbnN0IFBvaW50KFQgeCwgVCB5KQogICAgICA6IHRoaXMueCA9IHgsCiAgICAgICAgdGhpcy55ID0geTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1BvaW50KCR4LCAkeSknOwoKICAvLy8gQSBgUG9pbnRgIGlzIG9ubHkgZXF1YWwgdG8gYW5vdGhlciBgUG9pbnRgIHdpdGggdGhlIHNhbWUgY29vcmRpbmF0ZXMuCiAgLy8vCiAgLy8vIFRoaXMgcG9pbnQgaXMgZXF1YWwgdG8gYG90aGVyYCBpZiwgYW5kIG9ubHkgaWYsCiAgLy8vIGBvdGhlcmAgaXMgYSBgUG9pbnRgIHdpdGgKICAvLy8gW3hdIGVxdWFsIHRvIGBvdGhlci54YCBhbmQgW3ldIGVxdWFsIHRvIGBvdGhlci55YC4KICBib29sIG9wZXJhdG9yID09KGR5bmFtaWMgb3RoZXIpID0+CiAgICAgIC8vIENhbm5vdCBjaGFuZ2UgcGFyYW1ldGVyIHR5cGUgdG8gYE9iamVjdGAgaW4gY2FzZSBzb21lIGNsYXNzCiAgICAgIC8vIGluaGVyaXRzIHRoZSB0eXBlIGFuZCB1c2VzIHRoZWlyIGFyZ3VtZW50IGR5bmFtaWNhbGx5LgogICAgICBvdGhlciBpcyBQb2ludCAmJiB4ID09IG90aGVyLnggJiYgeSA9PSBvdGhlci55OwoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IF9KZW5raW5zU21pSGFzaC5oYXNoMih4Lmhhc2hDb2RlLCB5Lmhhc2hDb2RlKTsKCiAgLy8vIEFkZCBbb3RoZXJdIHRvIGB0aGlzYCwgYXMgaWYgYm90aCBwb2ludHMgd2VyZSB2ZWN0b3JzLgogIC8vLwogIC8vLyBSZXR1cm5zIHRoZSByZXN1bHRpbmcgInZlY3RvciIgYXMgYSBQb2ludC4KICBQb2ludDxUPiBvcGVyYXRvciArKFBvaW50PFQ+IG90aGVyKSB7CiAgICByZXR1cm4gUG9pbnQ8VD4oeCArIG90aGVyLngsIHkgKyBvdGhlci55KTsKICB9CgogIC8vLyBTdWJ0cmFjdCBbb3RoZXJdIGZyb20gYHRoaXNgLCBhcyBpZiBib3RoIHBvaW50cyB3ZXJlIHZlY3RvcnMuCiAgLy8vCiAgLy8vIFJldHVybnMgdGhlIHJlc3VsdGluZyAidmVjdG9yIiBhcyBhIFBvaW50LgogIFBvaW50PFQ+IG9wZXJhdG9yIC0oUG9pbnQ8VD4gb3RoZXIpIHsKICAgIHJldHVybiBQb2ludDxUPih4IC0gb3RoZXIueCwgeSAtIG90aGVyLnkpOwogIH0KCiAgLy8vIFNjYWxlIHRoaXMgcG9pbnQgYnkgW2ZhY3Rvcl0gYXMgaWYgaXQgd2VyZSBhIHZlY3Rvci4KICAvLy8KICAvLy8gKkltcG9ydGFudCogKk5vdGUqOiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgYSBgbnVtYCBhcyBpdHMgYXJndW1lbnQgb25seSBzbwogIC8vLyB0aGF0IHlvdSBjYW4gc2NhbGUgUG9pbnQ8ZG91YmxlPiBvYmplY3RzIGJ5IGFuIGBpbnRgIGZhY3Rvci4gQmVjYXVzZSB0aGUKICAvLy8gc3RhciBvcGVyYXRvciBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSB0eXBlIG9mIFBvaW50IHRoYXQgb3JpZ2luYWxseSBjYWxsZWQKICAvLy8gaXQsIHBhc3NpbmcgaW4gYSBkb3VibGUgW2ZhY3Rvcl0gb24gYSBgUG9pbnQ8aW50PmAgX2NhdXNlc18gX2FfCiAgLy8vIF9ydW50aW1lXyBfZXJyb3JfIGluIGNoZWNrZWQgbW9kZS4KICBQb2ludDxUPiBvcGVyYXRvciAqKG51bSAvKlR8aW50Ki8gZmFjdG9yKSB7CiAgICByZXR1cm4gUG9pbnQ8VD4oKHggKiBmYWN0b3IpLCAoeSAqIGZhY3RvcikpOwogIH0KCiAgLy8vIEdldCB0aGUgc3RyYWlnaHQgbGluZSAoRXVjbGlkZWFuKSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBvcmlnaW4gKDAsIDApIGFuZAogIC8vLyB0aGlzIHBvaW50LgogIGRvdWJsZSBnZXQgbWFnbml0dWRlID0+IHNxcnQoeCAqIHggKyB5ICogeSk7CgogIC8vLyBSZXR1cm5zIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGB0aGlzYCBhbmQgW290aGVyXS4KICBkb3VibGUgZGlzdGFuY2VUbyhQb2ludDxUPiBvdGhlcikgewogICAgdmFyIGR4ID0geCAtIG90aGVyLng7CiAgICB2YXIgZHkgPSB5IC0gb3RoZXIueTsKICAgIHJldHVybiBzcXJ0KGR4ICogZHggKyBkeSAqIGR5KTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gYHRoaXNgIGFuZCBbb3RoZXJdLgogIC8vLwogIC8vLyBTcXVhcmVkIGRpc3RhbmNlcyBjYW4gYmUgdXNlZCBmb3IgY29tcGFyaXNvbnMgd2hlbiB0aGUgYWN0dWFsIHZhbHVlIGlzIG5vdAogIC8vLyByZXF1aXJlZC4KICBUIHNxdWFyZWREaXN0YW5jZVRvKFBvaW50PFQ+IG90aGVyKSB7CiAgICB2YXIgZHggPSB4IC0gb3RoZXIueDsKICAgIHZhciBkeSA9IHkgLSBvdGhlci55OwogICAgcmV0dXJuIGR4ICogZHggKyBkeSAqIGR5OwogIH0KfQpOAE5OPA8BEwFAHQ0NARgUFAEoAUwGNiA5JUVANgFFAT0GMSgvBAFEBjEoLwQBOwZQT1FGKS4xBAFPEi8BNyYaGiQEAT8GURAoGhoeBAIBFGRhcnQ6bWF0aC9wb2ludC5kYXJ0PW9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL21hdGgvcmFuZG9tLmRhcnSGCi8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0Lm1hdGg7CgovLy8gQSBnZW5lcmF0b3Igb2YgcmFuZG9tIGJvb2wsIGludCwgb3IgZG91YmxlIHZhbHVlcy4KLy8vCi8vLyBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzdXBwbGllcyBhIHN0cmVhbSBvZiBwc2V1ZG8tcmFuZG9tIGJpdHMgdGhhdCBhcmUKLy8vIG5vdCBzdWl0YWJsZSBmb3IgY3J5cHRvZ3JhcGhpYyBwdXJwb3Nlcy4KLy8vCi8vLyBVc2UgdGhlIFtSYW5kb20uc2VjdXJlXSBjb25zdHJ1Y3RvciBmb3IgY3J5cHRvZ3JhcGhpYyBwdXJwb3Nlcy4KYWJzdHJhY3QgY2xhc3MgUmFuZG9tIHsKICAvLy8gQ3JlYXRlcyBhIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgogIC8vLwogIC8vLyBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIFtzZWVkXSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlCiAgLy8vIGludGVybmFsIHN0YXRlIG9mIHRoZSBnZW5lcmF0b3IuIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKICAvLy8gcmFuZG9tIHN0cmVhbSBjYW4gY2hhbmdlIGJldHdlZW4gcmVsZWFzZXMgb2YgdGhlIGxpYnJhcnkuCiAgZXh0ZXJuYWwgZmFjdG9yeSBSYW5kb20oW2ludCBzZWVkXSk7CgogIC8vLyBDcmVhdGVzIGEgY3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgogIC8vLwogIC8vLyBJZiB0aGUgcHJvZ3JhbSBjYW5ub3QgcHJvdmlkZSBhIGNyeXB0b2dyYXBoaWNhbGx5IHNlY3VyZQogIC8vLyBzb3VyY2Ugb2YgcmFuZG9tIG51bWJlcnMsIGl0IHRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0uCiAgZXh0ZXJuYWwgZmFjdG9yeSBSYW5kb20uc2VjdXJlKCk7CgogIC8vLyBHZW5lcmF0ZXMgYSBub24tbmVnYXRpdmUgcmFuZG9tIGludGVnZXIgdW5pZm9ybWx5IGRpc3RyaWJ1dGVkIGluIHRoZSByYW5nZQogIC8vLyBmcm9tIDAsIGluY2x1c2l2ZSwgdG8gW21heF0sIGV4Y2x1c2l2ZS4KICAvLy8KICAvLy8gSW1wbGVtZW50YXRpb24gbm90ZTogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgW21heF0gdmFsdWVzCiAgLy8vIGJldHdlZW4gMSBhbmQgKDE8PDMyKSBpbmNsdXNpdmUuCiAgaW50IG5leHRJbnQoaW50IG1heCk7CgogIC8vLyBHZW5lcmF0ZXMgYSBub24tbmVnYXRpdmUgcmFuZG9tIGZsb2F0aW5nIHBvaW50IHZhbHVlIHVuaWZvcm1seSBkaXN0cmlidXRlZAogIC8vLyBpbiB0aGUgcmFuZ2UgZnJvbSAwLjAsIGluY2x1c2l2ZSwgdG8gMS4wLCBleGNsdXNpdmUuCiAgZG91YmxlIG5leHREb3VibGUoKTsKCiAgLy8vIEdlbmVyYXRlcyBhIHJhbmRvbSBib29sZWFuIHZhbHVlLgogIGJvb2wgbmV4dEJvb2woKTsKfQosAE5OPAEPARMBNwRQLQREGCkGPkFAJwFCBj9BJAFRLgZMJxgBUTsXASgTAgEVZGFydDptYXRoL3JhbmRvbS5kYXJ0QG9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL21hdGgvcmVjdGFuZ2xlLmRhcnShbC8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQubWF0aDsKCi8vLyBBIGJhc2UgY2xhc3MgZm9yIHJlcHJlc2VudGluZyB0d28tZGltZW5zaW9uYWwgYXhpcy1hbGlnbmVkIHJlY3RhbmdsZXMuCi8vLwovLy8gVGhpcyByZWN0YW5nbGUgdXNlcyBhIGxlZnQtaGFuZGVkIENhcnRlc2lhbiBjb29yZGluYXRlIHN5c3RlbSwgd2l0aCB4Ci8vLyBkaXJlY3RlZCB0byB0aGUgcmlnaHQgYW5kIHkgZGlyZWN0ZWQgZG93biwgYXMgcGVyIHRoZSBjb252ZW50aW9uIGluIDJECi8vLyBjb21wdXRlciBncmFwaGljcy4KLy8vCi8vLyBTZWUgYWxzbzoKLy8vICAgIFtXM0MgQ29vcmRpbmF0ZSBTeXN0ZW1zIFNwZWNpZmljYXRpb25dKGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9jb29yZHMuaHRtbCNJbml0aWFsQ29vcmRpbmF0ZVN5c3RlbSkuCi8vLwovLy8gVGhlIHJlY3RhbmdsZSBpcyB0aGUgc2V0IG9mIHBvaW50cyB3aXRoIHJlcHJlc2VudGFibGUgY29vcmRpbmF0ZXMgZ3JlYXRlcgovLy8gdGhhbiBvciBlcXVhbCB0byBsZWZ0L3RvcCwgYW5kIHdpdGggZGlzdGFuY2UgdG8gbGVmdC90b3Agbm8gZ3JlYXRlciB0aGFuCi8vLyB3aWR0aC9oZWlnaHQgKHRvIHRoZSBsaW1pdCBvZiB0aGUgcHJlY2lzaW9uIG9mIHRoZSBjb29yZGluYXRlcykuCmFic3RyYWN0IGNsYXNzIF9SZWN0YW5nbGVCYXNlPFQgZXh0ZW5kcyBudW0+IHsKICBjb25zdCBfUmVjdGFuZ2xlQmFzZSgpOwoKICAvLy8gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgbGVmdCBlZGdlLgogIFQgZ2V0IGxlZnQ7CgogIC8vLyBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSB0b3AgZWRnZS4KICBUIGdldCB0b3A7CgogIC8vLyBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZS4KICBUIGdldCB3aWR0aDsKCiAgLy8vIFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZS4KICBUIGdldCBoZWlnaHQ7CgogIC8vLyBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSByaWdodCBlZGdlLgogIFQgZ2V0IHJpZ2h0ID0+IGxlZnQgKyB3aWR0aDsKCiAgLy8vIFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGJvdHRvbSBlZGdlLgogIFQgZ2V0IGJvdHRvbSA9PiB0b3AgKyBoZWlnaHQ7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnUmVjdGFuZ2xlICgkbGVmdCwgJHRvcCkgJHdpZHRoIHggJGhlaWdodCc7CiAgfQoKICBib29sIG9wZXJhdG9yID09KGR5bmFtaWMgb3RoZXIpID0+CiAgICAgIC8vIENhbid0IGNoYW5nZSBhcmd1bWVudCB0eXBlIHRvIGBPYmplY3RgIHNpbmNlIHN1YmNsYXNzZXMgaW5oZXJpdCBpdAogICAgICAvLyBhbmQgdXNlcyB0aGVpciBhcmd1bWVudCBkeW5hbWljYWxseS4KICAgICAgb3RoZXIgaXMgUmVjdGFuZ2xlICYmCiAgICAgIGxlZnQgPT0gb3RoZXIubGVmdCAmJgogICAgICB0b3AgPT0gb3RoZXIudG9wICYmCiAgICAgIHJpZ2h0ID09IG90aGVyLnJpZ2h0ICYmCiAgICAgIGJvdHRvbSA9PSBvdGhlci5ib3R0b207CgogIGludCBnZXQgaGFzaENvZGUgPT4gX0plbmtpbnNTbWlIYXNoLmhhc2g0KAogICAgICBsZWZ0Lmhhc2hDb2RlLCB0b3AuaGFzaENvZGUsIHJpZ2h0Lmhhc2hDb2RlLCBib3R0b20uaGFzaENvZGUpOwoKICAvLy8gQ29tcHV0ZXMgdGhlIGludGVyc2VjdGlvbiBvZiBgdGhpc2AgYW5kIFtvdGhlcl0uCiAgLy8vCiAgLy8vIFRoZSBpbnRlcnNlY3Rpb24gb2YgdHdvIGF4aXMtYWxpZ25lZCByZWN0YW5nbGVzLCBpZiBhbnksIGlzIGFsd2F5cyBhbm90aGVyCiAgLy8vIGF4aXMtYWxpZ25lZCByZWN0YW5nbGUuCiAgLy8vCiAgLy8vIFJldHVybnMgdGhlIGludGVyc2VjdGlvbiBvZiB0aGlzIGFuZCBgb3RoZXJgLCBvciBgbnVsbGAgaWYgdGhleSBkb24ndAogIC8vLyBpbnRlcnNlY3QuCiAgUmVjdGFuZ2xlPFQ+IGludGVyc2VjdGlvbihSZWN0YW5nbGU8VD4gb3RoZXIpIHsKICAgIHZhciB4MCA9IG1heChsZWZ0LCBvdGhlci5sZWZ0KTsKICAgIHZhciB4MSA9IG1pbihsZWZ0ICsgd2lkdGgsIG90aGVyLmxlZnQgKyBvdGhlci53aWR0aCk7CgogICAgaWYgKHgwIDw9IHgxKSB7CiAgICAgIHZhciB5MCA9IG1heCh0b3AsIG90aGVyLnRvcCk7CiAgICAgIHZhciB5MSA9IG1pbih0b3AgKyBoZWlnaHQsIG90aGVyLnRvcCArIG90aGVyLmhlaWdodCk7CgogICAgICBpZiAoeTAgPD0geTEpIHsKICAgICAgICByZXR1cm4gUmVjdGFuZ2xlPFQ+KHgwLCB5MCwgeDEgLSB4MCwgeTEgLSB5MCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiBgdGhpc2AgaW50ZXJzZWN0cyBbb3RoZXJdLgogIGJvb2wgaW50ZXJzZWN0cyhSZWN0YW5nbGU8bnVtPiBvdGhlcikgewogICAgcmV0dXJuIChsZWZ0IDw9IG90aGVyLmxlZnQgKyBvdGhlci53aWR0aCAmJgogICAgICAgIG90aGVyLmxlZnQgPD0gbGVmdCArIHdpZHRoICYmCiAgICAgICAgdG9wIDw9IG90aGVyLnRvcCArIG90aGVyLmhlaWdodCAmJgogICAgICAgIG90aGVyLnRvcCA8PSB0b3AgKyBoZWlnaHQpOwogIH0KCiAgLy8vIFJldHVybnMgYSBuZXcgcmVjdGFuZ2xlIHdoaWNoIGNvbXBsZXRlbHkgY29udGFpbnMgYHRoaXNgIGFuZCBbb3RoZXJdLgogIFJlY3RhbmdsZTxUPiBib3VuZGluZ0JveChSZWN0YW5nbGU8VD4gb3RoZXIpIHsKICAgIHZhciByaWdodCA9IG1heCh0aGlzLmxlZnQgKyB0aGlzLndpZHRoLCBvdGhlci5sZWZ0ICsgb3RoZXIud2lkdGgpOwogICAgdmFyIGJvdHRvbSA9IG1heCh0aGlzLnRvcCArIHRoaXMuaGVpZ2h0LCBvdGhlci50b3AgKyBvdGhlci5oZWlnaHQpOwoKICAgIHZhciBsZWZ0ID0gbWluKHRoaXMubGVmdCwgb3RoZXIubGVmdCk7CiAgICB2YXIgdG9wID0gbWluKHRoaXMudG9wLCBvdGhlci50b3ApOwoKICAgIHJldHVybiBSZWN0YW5nbGU8VD4obGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRvcCk7CiAgfQoKICAvLy8gVGVzdHMgd2hldGhlciBgdGhpc2AgZW50aXJlbHkgY29udGFpbnMgW2Fub3RoZXJdLgogIGJvb2wgY29udGFpbnNSZWN0YW5nbGUoUmVjdGFuZ2xlPG51bT4gYW5vdGhlcikgewogICAgcmV0dXJuIGxlZnQgPD0gYW5vdGhlci5sZWZ0ICYmCiAgICAgICAgbGVmdCArIHdpZHRoID49IGFub3RoZXIubGVmdCArIGFub3RoZXIud2lkdGggJiYKICAgICAgICB0b3AgPD0gYW5vdGhlci50b3AgJiYKICAgICAgICB0b3AgKyBoZWlnaHQgPj0gYW5vdGhlci50b3AgKyBhbm90aGVyLmhlaWdodDsKICB9CgogIC8vLyBUZXN0cyB3aGV0aGVyIFthbm90aGVyXSBpcyBpbnNpZGUgb3IgYWxvbmcgdGhlIGVkZ2VzIG9mIGB0aGlzYC4KICBib29sIGNvbnRhaW5zUG9pbnQoUG9pbnQ8bnVtPiBhbm90aGVyKSB7CiAgICByZXR1cm4gYW5vdGhlci54ID49IGxlZnQgJiYKICAgICAgICBhbm90aGVyLnggPD0gbGVmdCArIHdpZHRoICYmCiAgICAgICAgYW5vdGhlci55ID49IHRvcCAmJgogICAgICAgIGFub3RoZXIueSA8PSB0b3AgKyBoZWlnaHQ7CiAgfQoKICBQb2ludDxUPiBnZXQgdG9wTGVmdCA9PiBQb2ludDxUPih0aGlzLmxlZnQsIHRoaXMudG9wKTsKICBQb2ludDxUPiBnZXQgdG9wUmlnaHQgPT4gUG9pbnQ8VD4odGhpcy5sZWZ0ICsgdGhpcy53aWR0aCwgdGhpcy50b3ApOwogIFBvaW50PFQ+IGdldCBib3R0b21SaWdodCA9PgogICAgICBQb2ludDxUPih0aGlzLmxlZnQgKyB0aGlzLndpZHRoLCB0aGlzLnRvcCArIHRoaXMuaGVpZ2h0KTsKICBQb2ludDxUPiBnZXQgYm90dG9tTGVmdCA9PiBQb2ludDxUPih0aGlzLmxlZnQsIHRoaXMudG9wICsgdGhpcy5oZWlnaHQpOwp9CgovLy8gQSBjbGFzcyBmb3IgcmVwcmVzZW50aW5nIHR3by1kaW1lbnNpb25hbCByZWN0YW5nbGVzIHdob3NlIHByb3BlcnRpZXMgYXJlCi8vLyBpbW11dGFibGUuCmNsYXNzIFJlY3RhbmdsZTxUIGV4dGVuZHMgbnVtPiBleHRlbmRzIF9SZWN0YW5nbGVCYXNlPFQ+IHsKICBmaW5hbCBUIGxlZnQ7CiAgZmluYWwgVCB0b3A7CiAgZmluYWwgVCB3aWR0aDsKICBmaW5hbCBUIGhlaWdodDsKCiAgLy8vIENyZWF0ZSBhIHJlY3RhbmdsZSBzcGFubmVkIGJ5IGAobGVmdCwgdG9wKWAgYW5kCiAgLy8vIGAobGVmdCt3aWR0aCwgdG9wK2hlaWdodClgLgogIC8vLwogIC8vLyBUaGUgcmVjdGFuZ2xlIGNvbnRhaW5zIHRoZSBwb2ludHMKICAvLy8gd2l0aCB4LWNvb3JkaW5hdGUgYmV0d2VlbiBgbGVmdGAgYW5kIGBsZWZ0ICsgd2lkdGhgLCBhbmQKICAvLy8gd2l0aCB5LWNvb3JkaW5hdGUgYmV0d2VlbiBgdG9wYCBhbmQgYHRvcCArIGhlaWdodGAsIGJvdGggaW5jbHVzaXZlLgogIC8vLwogIC8vLyBUaGUgYHdpZHRoYCBhbmQgYGhlaWdodGAgc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZS4KICAvLy8gSWYgYHdpZHRoYCBvciBgaGVpZ2h0YCBhcmUgbmVnYXRpdmUsIHRoZXkgYXJlIGNsYW1wZWQgdG8gemVyby4KICAvLy8KICAvLy8gSWYgYHdpZHRoYCBhbmQgYGhlaWdodGAgYXJlIHplcm8sIHRoZSAicmVjdGFuZ2xlIiBjb21wcmlzZXMgb25seSB0aGUKICAvLy8gc2luZ2xlIHBvaW50IGAobGVmdCwgdG9wKWAuCiAgY29uc3QgUmVjdGFuZ2xlKHRoaXMubGVmdCwgdGhpcy50b3AsIFQgd2lkdGgsIFQgaGVpZ2h0KQogICAgICA6IHRoaXMud2lkdGggPSAod2lkdGggPCAwKSA/IC13aWR0aCAqIDAgOiB3aWR0aCwgLy8gSW5saW5lIF9jbGFtcFRvWmVyby4KICAgICAgICB0aGlzLmhlaWdodCA9IChoZWlnaHQgPCAwKSA/IC1oZWlnaHQgKiAwIDogaGVpZ2h0OwoKICAvLy8gQ3JlYXRlIGEgcmVjdGFuZ2xlIHNwYW5uZWQgYnkgdGhlIHBvaW50cyBbYV0gYW5kIFtiXTsKICAvLy8KICAvLy8gVGhlIHJlY3RhbmdsZSBjb250YWlucyB0aGUgcG9pbnRzCiAgLy8vIHdpdGggeC1jb29yZGluYXRlIGJldHdlZW4gYGEueGAgYW5kIGBiLnhgLCBhbmQKICAvLy8gd2l0aCB5LWNvb3JkaW5hdGUgYmV0d2VlbiBgYS55YCBhbmQgYGIueWAsIGJvdGggaW5jbHVzaXZlLgogIC8vLwogIC8vLyBJZiB0aGUgZGlzdGFuY2UgYmV0d2VlbiBgYS54YCBhbmQgYGIueGAgaXMgbm90IHJlcHJlc2VudGFibGUKICAvLy8gKHdoaWNoIGNhbiBoYXBwZW4gaWYgb25lIG9yIGJvdGggaXMgYSBkb3VibGUpLAogIC8vLyB0aGUgYWN0dWFsIHJpZ2h0IGVkZ2UgbWlnaHQgYmUgc2xpZ2h0bHkgb2ZmIGZyb20gYG1heChhLngsIGIueClgLgogIC8vLyBTaW1pbGFyIGZvciB0aGUgeS1jb29yZGluYXRlcyBhbmQgdGhlIGJvdHRvbSBlZGdlLgogIGZhY3RvcnkgUmVjdGFuZ2xlLmZyb21Qb2ludHMoUG9pbnQ8VD4gYSwgUG9pbnQ8VD4gYikgewogICAgVCBsZWZ0ID0gbWluKGEueCwgYi54KTsKICAgIFQgd2lkdGggPSBtYXgoYS54LCBiLngpIC0gbGVmdDsKICAgIFQgdG9wID0gbWluKGEueSwgYi55KTsKICAgIFQgaGVpZ2h0ID0gbWF4KGEueSwgYi55KSAtIHRvcDsKICAgIHJldHVybiBSZWN0YW5nbGU8VD4obGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTsKICB9Cn0KCi8vLyBBIGNsYXNzIGZvciByZXByZXNlbnRpbmcgdHdvLWRpbWVuc2lvbmFsIGF4aXMtYWxpZ25lZCByZWN0YW5nbGVzIHdpdGgKLy8vIG11dGFibGUgcHJvcGVydGllcy4KY2xhc3MgTXV0YWJsZVJlY3RhbmdsZTxUIGV4dGVuZHMgbnVtPiBleHRlbmRzIF9SZWN0YW5nbGVCYXNlPFQ+CiAgICBpbXBsZW1lbnRzIFJlY3RhbmdsZTxUPiB7CiAgLy8vIFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGxlZnQgZWRnZS4KICAvLy8KICAvLy8gU2V0dGluZyB0aGUgdmFsdWUgd2lsbCBtb3ZlIHRoZSByZWN0YW5nbGUgd2l0aG91dCBjaGFuZ2luZyBpdHMgd2lkdGguCiAgVCBsZWZ0OwoKICAvLy8gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgbGVmdCBlZGdlLgogIC8vLwogIC8vLyBTZXR0aW5nIHRoZSB2YWx1ZSB3aWxsIG1vdmUgdGhlIHJlY3RhbmdsZSB3aXRob3V0IGNoYW5naW5nIGl0cyBoZWlnaHQuCiAgVCB0b3A7CiAgVCBfd2lkdGg7CiAgVCBfaGVpZ2h0OwoKICAvLy8gQ3JlYXRlIGEgbXV0YWJsZSByZWN0YW5nbGUgc3Bhbm5lZCBieSBgKGxlZnQsIHRvcClgIGFuZAogIC8vLyBgKGxlZnQrd2lkdGgsIHRvcCtoZWlnaHQpYC4KICAvLy8KICAvLy8gVGhlIHJlY3RhbmdsZSBjb250YWlucyB0aGUgcG9pbnRzCiAgLy8vIHdpdGggeC1jb29yZGluYXRlIGJldHdlZW4gYGxlZnRgIGFuZCBgbGVmdCArIHdpZHRoYCwgYW5kCiAgLy8vIHdpdGggeS1jb29yZGluYXRlIGJldHdlZW4gYHRvcGAgYW5kIGB0b3AgKyBoZWlnaHRgLCBib3RoIGluY2x1c2l2ZS4KICAvLy8KICAvLy8gVGhlIGB3aWR0aGAgYW5kIGBoZWlnaHRgIHNob3VsZCBiZSBub24tbmVnYXRpdmUuCiAgLy8vIElmIGB3aWR0aGAgb3IgYGhlaWdodGAgYXJlIG5lZ2F0aXZlLCB0aGV5IGFyZSBjbGFtcGVkIHRvIHplcm8uCiAgLy8vCiAgLy8vIElmIGB3aWR0aGAgYW5kIGBoZWlnaHRgIGFyZSB6ZXJvLCB0aGUgInJlY3RhbmdsZSIgY29tcHJpc2VzIG9ubHkgdGhlCiAgLy8vIHNpbmdsZSBwb2ludCBgKGxlZnQsIHRvcClgLgogIE11dGFibGVSZWN0YW5nbGUodGhpcy5sZWZ0LCB0aGlzLnRvcCwgVCB3aWR0aCwgVCBoZWlnaHQpCiAgICAgIDogdGhpcy5fd2lkdGggPSAod2lkdGggPCAwKSA/IF9jbGFtcFRvWmVybzxUPih3aWR0aCkgOiB3aWR0aCwKICAgICAgICB0aGlzLl9oZWlnaHQgPSAoaGVpZ2h0IDwgMCkgPyBfY2xhbXBUb1plcm88VD4oaGVpZ2h0KSA6IGhlaWdodDsKCiAgLy8vIENyZWF0ZSBhIG11dGFibGUgcmVjdGFuZ2xlIHNwYW5uZWQgYnkgdGhlIHBvaW50cyBbYV0gYW5kIFtiXTsKICAvLy8KICAvLy8gVGhlIHJlY3RhbmdsZSBjb250YWlucyB0aGUgcG9pbnRzCiAgLy8vIHdpdGggeC1jb29yZGluYXRlIGJldHdlZW4gYGEueGAgYW5kIGBiLnhgLCBhbmQKICAvLy8gd2l0aCB5LWNvb3JkaW5hdGUgYmV0d2VlbiBgYS55YCBhbmQgYGIueWAsIGJvdGggaW5jbHVzaXZlLgogIC8vLwogIC8vLyBJZiB0aGUgZGlzdGFuY2UgYmV0d2VlbiBgYS54YCBhbmQgYGIueGAgaXMgbm90IHJlcHJlc2VudGFibGUKICAvLy8gKHdoaWNoIGNhbiBoYXBwZW4gaWYgb25lIG9yIGJvdGggaXMgYSBkb3VibGUpLAogIC8vLyB0aGUgYWN0dWFsIHJpZ2h0IGVkZ2UgbWlnaHQgYmUgc2xpZ2h0bHkgb2ZmIGZyb20gYG1heChhLngsIGIueClgLgogIC8vLyBTaW1pbGFyIGZvciB0aGUgeS1jb29yZGluYXRlcyBhbmQgdGhlIGJvdHRvbSBlZGdlLgogIGZhY3RvcnkgTXV0YWJsZVJlY3RhbmdsZS5mcm9tUG9pbnRzKFBvaW50PFQ+IGEsIFBvaW50PFQ+IGIpIHsKICAgIFQgbGVmdCA9IG1pbihhLngsIGIueCk7CiAgICBUIHdpZHRoID0gbWF4KGEueCwgYi54KSAtIGxlZnQ7CiAgICBUIHRvcCA9IG1pbihhLnksIGIueSk7CiAgICBUIGhlaWdodCA9IG1heChhLnksIGIueSkgLSB0b3A7CiAgICByZXR1cm4gTXV0YWJsZVJlY3RhbmdsZTxUPihsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOwogIH0KCiAgVCBnZXQgd2lkdGggPT4gX3dpZHRoOwoKICAvLy8gU2V0cyB0aGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZS4KICAvLy8KICAvLy8gVGhlIHdpZHRoIG11c3QgYmUgbm9uLW5lZ2F0aXZlLgogIC8vLyBJZiBhIG5lZ2F0aXZlIHdpZHRoIGlzIHN1cHBsaWVkLCBpdCBpcyBjbGFtcGVkIHRvIHplcm8uCiAgLy8vCiAgLy8vIFNldHRpbmcgdGhlIHZhbHVlIHdpbGwgY2hhbmdlIHRoZSByaWdodCBlZGdlIG9mIHRoZSByZWN0YW5nbGUsCiAgLy8vIGJ1dCB3aWxsIG5vdCBjaGFuZ2UgW2xlZnRdLgogIHNldCB3aWR0aChUIHdpZHRoKSB7CiAgICBpZiAod2lkdGggPCAwKSB3aWR0aCA9IF9jbGFtcFRvWmVybzxUPih3aWR0aCk7CiAgICBfd2lkdGggPSB3aWR0aDsKICB9CgogIFQgZ2V0IGhlaWdodCA9PiBfaGVpZ2h0OwoKICAvLy8gU2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUuCiAgLy8vCiAgLy8vIFRoZSBoZWlnaHQgbXVzdCBiZSBub24tbmVnYXRpdmUuCiAgLy8vIElmIGEgbmVnYXRpdmUgaGVpZ2h0IGlzIHN1cHBsaWVkLCBpdCBpcyBjbGFtcGVkIHRvIHplcm8uCiAgLy8vCiAgLy8vIFNldHRpbmcgdGhlIHZhbHVlIHdpbGwgY2hhbmdlIHRoZSBib3R0b20gZWRnZSBvZiB0aGUgcmVjdGFuZ2xlLAogIC8vLyBidXQgd2lsbCBub3QgY2hhbmdlIFt0b3BdLgogIHNldCBoZWlnaHQoVCBoZWlnaHQpIHsKICAgIGlmIChoZWlnaHQgPCAwKSBoZWlnaHQgPSBfY2xhbXBUb1plcm88VD4oaGVpZ2h0KTsKICAgIF9oZWlnaHQgPSBoZWlnaHQ7CiAgfQp9CgovLy8gQ29udmVydHMgYSBuZWdhdGl2ZSBbaW50XSBvciBbZG91YmxlXSB0byBhIHplcm8tdmFsdWUgb2YgdGhlIHNhbWUgdHlwZS4KLy8vCi8vLyBSZXR1cm5zIGAwYCBpZiB2YWx1ZSBpcyBpbnQsIGAwLjBgIGlmIHZhbHVlIGlzIGRvdWJsZS4KVCBfY2xhbXBUb1plcm88VCBleHRlbmRzIG51bT4oVCB2YWx1ZSkgewogIGFzc2VydCh2YWx1ZSA8IDApOwogIHJldHVybiAtdmFsdWUgKiAwOwp9CoD7AE5OPA8BEwFLBEpLFwQObQROTUUvGgEpDgEoDQEiDwEjEAEqHwErIAEWNwQBJUwuHBwaHh4BLUUBNwZRHgZMETIkOgEUJDwBFjcIBhEEATEqMCYrJAQBTDFHSAErKAFABAE4MyM4HjYEAUYrICUcIwQBOUceQEoCAU0POxAPERIBNiIGKD9KBjdFBksiOk87ATwGKDVBBkM1SDk5HCQbJDMEAgFKGEAeKQZMCgEpBk0JDA0BPiIGKD9KBjdFBksiO0RIAUQGKDVBBkM1SDlAHCQbJDoEARkBJwYmPgZFIhczFAQBGwEoBic/BkYhGTYWBAIBTAQ7KRUVAgEYZGFydDptYXRoL3JlY3RhbmdsZS5kYXJ0QW9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL21pcnJvcnMvbWlycm9ycy5kYXJ0wADCqi8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKLy8gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGUgbWlycm9ycyBsaWJyYXJ5LCB3ZSBhZG9wdCBhIG5hbWluZwovLyBjb252ZW50aW9uIHdpdGggcmVzcGVjdCB0byBnZXR0ZXJzIGFuZCBzZXR0ZXJzLiAgU3BlY2lmaWNhbGx5LCBmb3IKLy8gc29tZSB2YXJpYWJsZSBvciBmaWVsZC4uLgovLwovLyAgIHZhciBteUZpZWxkOwovLwovLyAuLi50aGUgZ2V0dGVyIGlzIG5hbWVkICdteUZpZWxkJyBhbmQgdGhlIHNldHRlciBpcyBuYW1lZAovLyAnbXlGaWVsZD0nLiAgVGhpcyBhbGxvd3MgdXMgdG8gYXNzaWduIHVuaXF1ZSBuYW1lcyB0byBnZXR0ZXJzIGFuZAovLyBzZXR0ZXJzIGZvciB0aGUgcHVycG9zZXMgb2YgbWVtYmVyIGxvb2t1cC4KCi8qKgogKiBCYXNpYyByZWZsZWN0aW9uIGluIERhcnQsCiAqIHdpdGggc3VwcG9ydCBmb3IgaW50cm9zcGVjdGlvbiBhbmQgZHluYW1pYyBpbnZvY2F0aW9uLgogKgogKiAqSW50cm9zcGVjdGlvbiogaXMgdGhhdCBzdWJzZXQgb2YgcmVmbGVjdGlvbiBieSB3aGljaCBhIHJ1bm5pbmcKICogcHJvZ3JhbSBjYW4gZXhhbWluZSBpdHMgb3duIHN0cnVjdHVyZS4gRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24KICogdGhhdCBwcmludHMgb3V0IHRoZSBuYW1lcyBvZiBhbGwgdGhlIG1lbWJlcnMgb2YgYW4gYXJiaXRyYXJ5IG9iamVjdC4KICoKICogKkR5bmFtaWMgaW52b2NhdGlvbiogcmVmZXJzIHRoZSBhYmlsaXR5IHRvIGV2YWx1YXRlIGNvZGUgdGhhdAogKiBoYXMgbm90IGJlZW4gbGl0ZXJhbGx5IHNwZWNpZmllZCBhdCBjb21waWxlIHRpbWUsIHN1Y2ggYXMgY2FsbGluZyBhIG1ldGhvZAogKiB3aG9zZSBuYW1lIGlzIHByb3ZpZGVkIGFzIGFuIGFyZ3VtZW50IChiZWNhdXNlIGl0IGlzIGxvb2tlZCB1cAogKiBpbiBhIGRhdGFiYXNlLCBvciBwcm92aWRlZCBpbnRlcmFjdGl2ZWx5IGJ5IHRoZSB1c2VyKS4KICoKICogIyMgSG93IHRvIGludGVycHJldCB0aGlzIGxpYnJhcnkncyBkb2N1bWVudGF0aW9uCiAqCiAqIEFzIGEgcnVsZSwgdGhlIG5hbWVzIG9mIERhcnQgZGVjbGFyYXRpb25zIGFyZSByZXByZXNlbnRlZCB1c2luZwogKiBpbnN0YW5jZXMgb2YgY2xhc3MgW1N5bWJvbF0uIFdoZW5ldmVyIHRoZSBkb2Mgc3BlYWtzIG9mIGFuIG9iamVjdCAqcyoKICogb2YgY2xhc3MgW1N5bWJvbF0gZGVub3RpbmcgYSBuYW1lLCBpdCBtZWFucyB0aGUgc3RyaW5nIHRoYXQKICogd2FzIHVzZWQgdG8gY29uc3RydWN0ICpzKi4KICoKICogVGhlIGRvY3VtZW50YXRpb24gZnJlcXVlbnRseSBhYnVzZXMgbm90YXRpb24gd2l0aAogKiBEYXJ0IHBzZXVkby1jb2RlIHN1Y2ggYXMgWzpvLngoYSk6XSwgd2hlcmUKICogbyBhbmQgYSBhcmUgZGVmaW5lZCB0byBiZSBvYmplY3RzOyB3aGF0IGlzIGFjdHVhbGx5IG1lYW50IGluIHRoZXNlCiAqIGNhc2VzIGlzIFs6bycueChhJyk6XSB3aGVyZSAqbycqIGFuZCAqYScqIGFyZSBEYXJ0IHZhcmlhYmxlcwogKiBib3VuZCB0byAqbyogYW5kICphKiByZXNwZWN0aXZlbHkuIEZ1cnRoZXJtb3JlLCAqbycqIGFuZCAqYScqCiAqIGFyZSBhc3N1bWVkIHRvIGJlIGZyZXNoIHZhcmlhYmxlcyAobWVhbmluZyB0aGF0IHRoZXkgYXJlCiAqIGRpc3RpbmN0IGZyb20gYW55IG90aGVyIHZhcmlhYmxlcyBpbiB0aGUgcHJvZ3JhbSkuCiAqCiAqIFNvbWV0aW1lcyB0aGUgZG9jdW1lbnRhdGlvbiByZWZlcnMgdG8gKnNlcmlhbGl6YWJsZSogb2JqZWN0cy4KICogQW4gb2JqZWN0IGlzIHNlcmlhbGl6YWJsZSBhY3Jvc3MgaXNvbGF0ZXMgaWYgYW5kIG9ubHkgaWYgaXQgaXMgYW4gaW5zdGFuY2Ugb2YKICogbnVtLCBib29sLCBTdHJpbmcsIGEgbGlzdCBvZiBvYmplY3RzIHRoYXQgYXJlIHNlcmlhbGl6YWJsZQogKiBhY3Jvc3MgaXNvbGF0ZXMsIG9yIGEgbWFwIHdpdGgga2V5cyBhbmQgdmFsdWVzIHRoYXQgYXJlIGFsbCBzZXJpYWxpemFibGUgYWNyb3NzCiAqIGlzb2xhdGVzLgogKgogKiAjIyBTdGF0dXM6IFVuc3RhYmxlCiAqCiAqIFRoZSBkYXJ0Om1pcnJvcnMgbGlicmFyeSBpcyB1bnN0YWJsZSBhbmQgaXRzIEFQSSBtaWdodCBjaGFuZ2Ugc2xpZ2h0bHkgYXMgYQogKiByZXN1bHQgb2YgdXNlciBmZWVkYmFjay4gVGhpcyBsaWJyYXJ5IGlzIHBsYXRmb3JtIGRlcGVuZGVudCBhbmQgdGhlcmVmb3JlIGl0CiAqIGhhcyBpbXBsZW1lbnRhdGlvbnMgZm9yIGJvdGggZGFydDJqcyBhbmQgdGhlIERhcnQgVk0uIEJvdGggYXJlIHVuZGVyCiAqIGRldmVsb3BtZW50IGFuZCBtYXkgbm90IHN1cHBvcnQgYWxsIG9wZXJhdGlvbnMgeWV0LgogKgogKiB7QGNhdGVnb3J5IFZNfQogKi8KbGlicmFyeSBkYXJ0Lm1pcnJvcnM7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRnV0dXJlOwppbXBvcnQgImRhcnQ6X2ludGVybmFsIiBzaG93IFNpbmNlOwoKLyoqCiAqIEEgW01pcnJvclN5c3RlbV0gaXMgdGhlIG1haW4gaW50ZXJmYWNlIHVzZWQgdG8gcmVmbGVjdCBvbiBhIHNldCBvZgogKiBhc3NvY2lhdGVkIGxpYnJhcmllcy4KICoKICogQXQgcnVudGltZSBlYWNoIHJ1bm5pbmcgaXNvbGF0ZSBoYXMgYSBkaXN0aW5jdCBbTWlycm9yU3lzdGVtXS4KICoKICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBoYXZlIGEgW01pcnJvclN5c3RlbV0gd2hpY2ggcmVwcmVzZW50cyBhIHNldAogKiBvZiBsaWJyYXJpZXMgd2hpY2ggYXJlIG5vdCBydW5uaW5nIC0tIHBlcmhhcHMgYXQgY29tcGlsZS10aW1lLiAgSW4KICogdGhpcyBjYXNlLCBhbGwgYXZhaWxhYmxlIHJlZmxlY3RpdmUgZnVuY3Rpb25hbGl0eSB3b3VsZCBiZQogKiBzdXBwb3J0ZWQsIGJ1dCBydW50aW1lIGZ1bmN0aW9uYWxpdHkgKHN1Y2ggYXMgaW52b2tpbmcgYSBmdW5jdGlvbgogKiBvciBpbnNwZWN0aW5nIHRoZSBjb250ZW50cyBvZiBhIHZhcmlhYmxlKSB3b3VsZCBmYWlsIGR5bmFtaWNhbGx5LgogKi8KYWJzdHJhY3QgY2xhc3MgTWlycm9yU3lzdGVtIHsKICAvKioKICAgKiBBbGwgbGlicmFyaWVzIGtub3duIHRvIHRoZSBtaXJyb3Igc3lzdGVtLCBpbmRleGVkIGJ5IHRoZWlyIFVSSS4KICAgKgogICAqIFJldHVybnMgYW4gdW5tb2RpZmlhYmxlIG1hcCBvZiB0aGUgbGlicmFyaWVzIHdpdGggW0xpYnJhcnlNaXJyb3IudXJpXSBhcwogICAqIGtleXMuCiAgICoKICAgKiBGb3IgYSBydW50aW1lIG1pcnJvciBzeXN0ZW0sIG9ubHkgbGlicmFyaWVzIHdoaWNoIGFyZSBjdXJyZW50bHkgbG9hZGVkCiAgICogYXJlIGluY2x1ZGVkLCBhbmQgcmVwZWF0ZWQgY2FsbHMgb2YgdGhpcyBtZXRob2QgbWF5IHJldHVybiBkaWZmZXJlbnQgbWFwcwogICAqIGFzIGxpYnJhcmllcyBhcmUgbG9hZGVkLgogICAqLwogIE1hcDxVcmksIExpYnJhcnlNaXJyb3I+IGdldCBsaWJyYXJpZXM7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHVuaXF1ZSBsaWJyYXJ5IG5hbWVkIFtsaWJyYXJ5TmFtZV0gaWYgaXQgZXhpc3RzLgogICAqCiAgICogSWYgbm8gdW5pcXVlIGxpYnJhcnkgZXhpc3RzLCBhbiBlcnJvciBpcyB0aHJvd24uCiAgICovCiAgZXh0ZXJuYWwgTGlicmFyeU1pcnJvciBmaW5kTGlicmFyeShTeW1ib2wgbGlicmFyeU5hbWUpOwoKICAvKioKICAgKiBBIG1pcnJvciBvbiB0aGUgaXNvbGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBbTWlycm9yU3lzdGVtXS4KICAgKgogICAqIFRoaXMgbWF5IGJlIG51bGwgaWYgdGhpcyBtaXJyb3Igc3lzdGVtIGlzIG5vdCBydW5uaW5nLgogICAqLwogIElzb2xhdGVNaXJyb3IgZ2V0IGlzb2xhdGU7CgogIC8qKgogICAqIEEgbWlycm9yIG9uIHRoZSBbOmR5bmFtaWM6XSB0eXBlLgogICAqLwogIFR5cGVNaXJyb3IgZ2V0IGR5bmFtaWNUeXBlOwoKICAvKioKICAgKiBBIG1pcnJvciBvbiB0aGUgWzp2b2lkOl0gdHlwZS4KICAgKi8KICBUeXBlTWlycm9yIGdldCB2b2lkVHlwZTsKCiAgLyoqCiAgICogQSBtaXJyb3Igb24gdGhlIFs6TmV2ZXI6XSB0eXBlLgogICAqLwogIEBTaW5jZSgiMi44IikKICBUeXBlTWlycm9yIGdldCBuZXZlclR5cGU7CgogIC8qKgogICAqIFJldHVybnMgdGhlIG5hbWUgb2YgW3N5bWJvbF0uCiAgICoKICAgKiBUaGUgZm9sbG93aW5nIHRleHQgaXMgbm9uLW5vcm1hdGl2ZToKICAgKgogICAqIFVzaW5nIHRoaXMgbWV0aG9kIG1heSByZXN1bHQgaW4gbGFyZ2VyIG91dHB1dC4gIElmIHBvc3NpYmxlLCB1c2UKICAgKiBbTWlycm9yc1VzZWRdIHRvIHNwZWNpZnkgd2hpY2ggc3ltYm9scyBtdXN0IGJlIHJldGFpbmVkIGluIGNsZWFyIHRleHQuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIFN0cmluZyBnZXROYW1lKFN5bWJvbCBzeW1ib2wpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgc3ltYm9sIGZvciBbbmFtZV0uCiAgICoKICAgKiBJZiBbbGlicmFyeV0gaXMgbm90IGEgW0xpYnJhcnlNaXJyb3JdIG9yIGlmIFtuYW1lXSBpcyBhIHByaXZhdGUgaWRlbnRpZmllcgogICAqIGFuZCBbbGlicmFyeV0gaXMgYG51bGxgLCB0aHJvd3MgYW4gW0FyZ3VtZW50RXJyb3JdLiBJZiBbbmFtZV0gaXMgYSBwcml2YXRlCiAgICogaWRlbnRpZmllciwgdGhlIHN5bWJvbCByZXR1cm5lZCBpcyB3aXRoIHJlc3BlY3QgdG8gW2xpYnJhcnldLgogICAqCiAgICogVGhlIGZvbGxvd2luZyB0ZXh0IGlzIG5vbi1ub3JtYXRpdmU6CiAgICoKICAgKiBVc2luZyB0aGlzIG1ldGhvZCBtYXkgcmVzdWx0IGluIGxhcmdlciBvdXRwdXQuICBJZiBwb3NzaWJsZSwgdXNlCiAgICogdGhlIGNvbnN0IGNvbnN0cnVjdG9yIG9mIFtTeW1ib2xdIG9yIHN5bWJvbCBsaXRlcmFscy4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgU3ltYm9sIGdldFN5bWJvbChTdHJpbmcgbmFtZSwgW0xpYnJhcnlNaXJyb3IgbGlicmFyeV0pOwp9CgovKioKICogUmV0dXJucyBhIFtNaXJyb3JTeXN0ZW1dIGZvciB0aGUgY3VycmVudCBpc29sYXRlLgogKi8KZXh0ZXJuYWwgTWlycm9yU3lzdGVtIGN1cnJlbnRNaXJyb3JTeXN0ZW0oKTsKCi8qKgogKiBSZWZsZWN0cyBhbiBpbnN0YW5jZS4KICoKICogUmV0dXJucyBhbiBbSW5zdGFuY2VNaXJyb3JdIHJlZmxlY3RpbmcgW3JlZmxlY3RlZV0uIElmIFtyZWZsZWN0ZWVdIGlzIGEKICogZnVuY3Rpb24gb3IgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhIFs6Y2FsbDpdIG1ldGhvZCwgdGhlIHJldHVybmVkCiAqIGluc3RhbmNlIG1pcnJvciB3aWxsIGJlIGEgW0Nsb3N1cmVNaXJyb3JdLgogKgogKiBOb3RlIHRoYXQgc2luY2Ugb25lIGNhbm5vdCBvYnRhaW4gYW4gb2JqZWN0IGZyb20gYW5vdGhlciBpc29sYXRlLCB0aGlzCiAqIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgdG8gb2J0YWluICBtaXJyb3JzIG9uIG9iamVjdHMgb2YgdGhlIGN1cnJlbnQKICogaXNvbGF0ZS4KICovCmV4dGVybmFsIEluc3RhbmNlTWlycm9yIHJlZmxlY3QoZHluYW1pYyByZWZsZWN0ZWUpOwoKLyoqCiAqIFJlZmxlY3RzIGEgY2xhc3MgZGVjbGFyYXRpb24uCiAqCiAqIExldCAqQyogYmUgdGhlIG9yaWdpbmFsIGNsYXNzIGRlY2xhcmF0aW9uIG9mIHRoZSBjbGFzcyByZXByZXNlbnRlZCBieSBba2V5XS4KICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgW0NsYXNzTWlycm9yXSByZWZsZWN0aW5nICpDKi4KICoKICogSWYgW2tleV0gaXMgbm90IGFuIGluc3RhbmNlIG9mIFtUeXBlXSwgdGhlbiB0aGlzIGZ1bmN0aW9uIHRocm93cyBhbgogKiBbQXJndW1lbnRFcnJvcl0uIElmIFtrZXldIGlzIHRoZSBUeXBlIGZvciBkeW5hbWljIG9yIGEgZnVuY3Rpb24gdHlwZWRlZiwKICogdGhyb3dzIGFuIFtBcmd1bWVudEVycm9yXS4KICoKICogTm90ZSB0aGF0IHNpbmNlIG9uZSBjYW5ub3Qgb2J0YWluIGEgW1R5cGVdIG9iamVjdCBmcm9tIGFub3RoZXIgaXNvbGF0ZSwgdGhpcwogKiBmdW5jdGlvbiBjYW4gb25seSBiZSB1c2VkIHRvIG9idGFpbiBjbGFzcyBtaXJyb3JzIG9uIGNsYXNzZXMgb2YgdGhlIGN1cnJlbnQKICogaXNvbGF0ZS4KICovCmV4dGVybmFsIENsYXNzTWlycm9yIHJlZmxlY3RDbGFzcyhUeXBlIGtleSk7CgovKioKICogUmVmbGVjdHMgdGhlIHR5cGUgcmVwcmVzZW50ZWQgYnkgW2tleV0uCiAqCiAqIElmIFtrZXldIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBbVHlwZV0sIHRoZW4gdGhpcyBmdW5jdGlvbiB0aHJvd3MgYW4KICogW0FyZ3VtZW50RXJyb3JdLgogKgogKiBPcHRpb25hbGx5IHRha2VzIGEgbGlzdCBvZiBbdHlwZUFyZ3VtZW50c10gZm9yIGdlbmVyaWMgY2xhc3Nlcy4gSWYgdGhlIGxpc3QKICogaXMgcHJvdmlkZWQsIHRoZW4gdGhlIFtrZXldIG11c3QgYmUgYSBnZW5lcmljIGNsYXNzIHR5cGUsIGFuZCB0aGUgbnVtYmVyIG9mCiAqIHRoZSBwcm92aWRlZCB0eXBlIGFyZ3VtZW50cyBtdXN0IGJlIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgdHlwZSB2YXJpYWJsZXMKICogZGVjbGFyZWQgYnkgdGhlIGNsYXNzLgogKgogKiBOb3RlIHRoYXQgc2luY2Ugb25lIGNhbm5vdCBvYnRhaW4gYSBbVHlwZV0gb2JqZWN0IGZyb20gYW5vdGhlciBpc29sYXRlLCB0aGlzCiAqIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgdG8gb2J0YWluIHR5cGUgbWlycm9ycyBvbiB0eXBlcyBvZiB0aGUgY3VycmVudAogKiBpc29sYXRlLgogKi8KZXh0ZXJuYWwgVHlwZU1pcnJvciByZWZsZWN0VHlwZShUeXBlIGtleSwgW0xpc3Q8VHlwZT4gdHlwZUFyZ3VtZW50c10pOwoKLyoqCiAqIEEgW01pcnJvcl0gcmVmbGVjdHMgc29tZSBEYXJ0IGxhbmd1YWdlIGVudGl0eS4KICoKICogRXZlcnkgW01pcnJvcl0gb3JpZ2luYXRlcyBmcm9tIHNvbWUgW01pcnJvclN5c3RlbV0uCiAqLwphYnN0cmFjdCBjbGFzcyBNaXJyb3Ige30KCi8qKgogKiBBbiBbSXNvbGF0ZU1pcnJvcl0gcmVmbGVjdHMgYW4gaXNvbGF0ZS4KICovCmFic3RyYWN0IGNsYXNzIElzb2xhdGVNaXJyb3IgaW1wbGVtZW50cyBNaXJyb3IgewogIC8qKgogICAqIEEgdW5pcXVlIG5hbWUgdXNlZCB0byByZWZlciB0byB0aGUgaXNvbGF0ZSBpbiBkZWJ1Z2dpbmcgbWVzc2FnZXMuCiAgICovCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWU7CgogIC8qKgogICAqIFdoZXRoZXIgdGhpcyBtaXJyb3IgcmVmbGVjdHMgdGhlIGN1cnJlbnRseSBydW5uaW5nIGlzb2xhdGUuCiAgICovCiAgYm9vbCBnZXQgaXNDdXJyZW50OwoKICAvKioKICAgKiBUaGUgcm9vdCBsaWJyYXJ5IGZvciB0aGUgcmVmbGVjdGVkIGlzb2xhdGUuCiAgICovCiAgTGlicmFyeU1pcnJvciBnZXQgcm9vdExpYnJhcnk7CgogIC8qKgogICAqIFdoZXRoZXIgW290aGVyXSBpcyBhbiBbSXNvbGF0ZU1pcnJvcl0gb24gdGhlIHNhbWUgaXNvbGF0ZSBhcyB0aGlzIG1pcnJvci4KICAgKgogICAqIFRoZSBlcXVhbGl0eSBob2xkcyBpZiBhbmQgb25seSBpZgogICAqCiAgICogMS4gW290aGVyXSBpcyBhIG1pcnJvciBvZiB0aGUgc2FtZSBraW5kLCBhbmQKICAgKiAyLiB0aGUgaXNvbGF0ZSBiZWluZyByZWZsZWN0ZWQgYnkgdGhpcyBtaXJyb3IgaXMgdGhlIHNhbWUgaXNvbGF0ZSBiZWluZwogICAqICAgIHJlZmxlY3RlZCBieSBbb3RoZXJdLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpOwoKICAvKioKICAgKiBMb2FkcyB0aGUgbGlicmFyeSBhdCB0aGUgZ2l2ZW4gdXJpIGludG8gdGhpcyBpc29sYXRlLgogICAqCiAgICogV0FSTklORzogWW91IGFyZSBzdHJvbmdseSBlbmNvdXJhZ2VkIHRvIHVzZSBJc29sYXRlLnNwYXduVXJpIGluc3RlYWQgd2hlbgogICAqIHBvc3NpYmxlLiBJc29sYXRlTWlycm9yLmxvYWRVcmkgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIHN5bmNocm9ub3VzCiAgICogY29tbXVuaWNhdGlvbiBvciBzaGFyZWQgc3RhdGUgd2l0aCBkeW5hbWljYWxseSBsb2FkZWQgY29kZSBpcyBuZWVkZWQuCiAgICoKICAgKiBJZiBhIGxpYnJhcnkgd2l0aCB0aGUgc2FtZSBjYW5vbmljYWxpemVkIHVyaSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZCwKICAgKiB0aGUgZXhpc3RpbmcgbGlicmFyeSB3aWxsIGJlIHJldHVybmVkLiAoVGhlIGlzb2xhdGUgd2lsbCBub3QgbG9hZCBhIG5ldwogICAqIGNvcHkgb2YgdGhlIGxpYnJhcnkuKQogICAqCiAgICogVGhpcyBiZWhhdmlvciBpcyBzaW1pbGFyIHRvIHRoZSBiZWhhdmlvciBvZiBhbiBpbXBvcnQgc3RhdGVtZW50IHRoYXQKICAgKiBhcHBlYXJzIGluIHRoZSByb290IGxpYnJhcnksIGV4Y2VwdCB0aGF0IHRoZSBpbXBvcnQgc2NvcGUgb2YgdGhlIHJvb3QKICAgKiBsaWJyYXJ5IGlzIG5vdCBjaGFuZ2VkLgogICAqLwogIEZ1dHVyZTxMaWJyYXJ5TWlycm9yPiBsb2FkVXJpKFVyaSB1cmkpOwp9CgovKioKICogQSBbRGVjbGFyYXRpb25NaXJyb3JdIHJlZmxlY3RzIHNvbWUgZW50aXR5IGRlY2xhcmVkIGluIGEgRGFydCBwcm9ncmFtLgogKi8KYWJzdHJhY3QgY2xhc3MgRGVjbGFyYXRpb25NaXJyb3IgaW1wbGVtZW50cyBNaXJyb3IgewogIC8qKgogICAqIFRoZSBzaW1wbGUgbmFtZSBmb3IgdGhpcyBEYXJ0IGxhbmd1YWdlIGVudGl0eS4KICAgKgogICAqIFRoZSBzaW1wbGUgbmFtZSBpcyBpbiBtb3N0IGNhc2VzIHRoZSBpZGVudGlmaWVyIG5hbWUgb2YgdGhlIGVudGl0eSwKICAgKiBzdWNoIGFzICdteU1ldGhvZCcgZm9yIGEgbWV0aG9kLCBbOnZvaWQgbXlNZXRob2QoKSB7Li4ufTpdIG9yICdteWxpYnJhcnknCiAgICogZm9yIGEgWzpsaWJyYXJ5ICdteWxpYnJhcnknOzpdIGRlY2xhcmF0aW9uLgogICAqLwogIFN5bWJvbCBnZXQgc2ltcGxlTmFtZTsKCiAgLyoqCiAgICogVGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lIGZvciB0aGlzIERhcnQgbGFuZ3VhZ2UgZW50aXR5LgogICAqCiAgICogVGhpcyBuYW1lIGlzIHF1YWxpZmllZCBieSB0aGUgbmFtZSBvZiB0aGUgb3duZXIuIEZvciBpbnN0YW5jZSwKICAgKiB0aGUgcXVhbGlmaWVkIG5hbWUgb2YgYSBtZXRob2QgJ21ldGhvZCcgaW4gY2xhc3MgJ0NsYXNzJyBpbgogICAqIGxpYnJhcnkgJ2xpYnJhcnknIGlzICdsaWJyYXJ5LkNsYXNzLm1ldGhvZCcuCiAgICoKICAgKiBSZXR1cm5zIGEgW1N5bWJvbF0gY29uc3RydWN0ZWQgZnJvbSBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlCiAgICogZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHJlZmxlY3RlZS4KICAgKiBMZXQgKm8qIGJlIHRoZSBbb3duZXJdIG9mIHRoaXMgbWlycm9yLCBsZXQgKnIqIGJlIHRoZSByZWZsZWN0ZWUgb2YKICAgKiB0aGlzIG1pcnJvciwgbGV0ICpwKiBiZSB0aGUgZnVsbHkgcXVhbGlmaWVkCiAgICogbmFtZSBvZiB0aGUgcmVmbGVjdGVlIG9mICpvKiwgYW5kIGxldCAqcyogYmUgdGhlIHNpbXBsZSBuYW1lIG9mICpyKgogICAqIGNvbXB1dGVkIGJ5IFtzaW1wbGVOYW1lXS4KICAgKiBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgKnIqIGlzIHRoZQogICAqIGNvbmNhdGVuYXRpb24gb2YgKnAqLCAnLicsIGFuZCAqcyouCiAgICoKICAgKiBCZWNhdXNlIGFuIGlzb2xhdGUgY2FuIGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBsaWJyYXJ5IHdpdGggdGhlIHNhbWUgbmFtZSAoYXQKICAgKiBkaWZmZXJlbnQgVVJJcyksIGEgZnVsbHktcXVhbGlmaWVkIG5hbWUgZG9lcyBub3QgdW5pcXVlbHkgaWRlbnRpZnkgYW55CiAgICogbGFuZ3VhZ2UgZW50aXR5LgogICAqLwogIFN5bWJvbCBnZXQgcXVhbGlmaWVkTmFtZTsKCiAgLyoqCiAgICogQSBtaXJyb3Igb24gdGhlIG93bmVyIG9mIHRoaXMgRGFydCBsYW5ndWFnZSBlbnRpdHkuCiAgICoKICAgKiBUaGUgb3duZXIgaXMgdGhlIGRlY2xhcmF0aW9uIGltbWVkaWF0ZWx5IHN1cnJvdW5kaW5nIHRoZSByZWZsZWN0ZWU6CiAgICoKICAgKiAqIEZvciBhIGxpYnJhcnksIHRoZSBvd25lciBpcyBbOm51bGw6XS4KICAgKiAqIEZvciBhIGNsYXNzIGRlY2xhcmF0aW9uLCB0eXBlZGVmIG9yIHRvcCBsZXZlbCBmdW5jdGlvbiBvciB2YXJpYWJsZSwgdGhlCiAgICogICBvd25lciBpcyB0aGUgZW5jbG9zaW5nIGxpYnJhcnkuCiAgICogKiBGb3IgYSBtaXhpbiBhcHBsaWNhdGlvbiBgUyB3aXRoIE1gLCB0aGUgb3duZXIgaXMgdGhlIG93bmVyIG9mIGBNYC4KICAgKiAqIEZvciBhIGNvbnN0cnVjdG9yLCB0aGUgb3duZXIgaXMgdGhlIGltbWVkaWF0ZWx5IGVuY2xvc2luZyBjbGFzcy4KICAgKiAqIEZvciBhIG1ldGhvZCwgaW5zdGFuY2UgdmFyaWFibGUgb3IgYSBzdGF0aWMgdmFyaWFibGUsIHRoZSBvd25lciBpcyB0aGUKICAgKiAgIGltbWVkaWF0ZWx5IGVuY2xvc2luZyBjbGFzcywgdW5sZXNzIHRoZSBjbGFzcyBpcyBhIG1peGluIGFwcGxpY2F0aW9uCiAgICogICBgUyB3aXRoIE1gLCBpbiB3aGljaCBjYXNlIHRoZSBvd25lciBpcyBgTWAuIE5vdGUgdGhhdCBgTWAgbWF5IGJlIGFuCiAgICogICBpbnZvY2F0aW9uIG9mIGEgZ2VuZXJpYy4KICAgKiAqIEZvciBhIHBhcmFtZXRlciwgbG9jYWwgdmFyaWFibGUgb3IgbG9jYWwgZnVuY3Rpb24gdGhlIG93bmVyIGlzIHRoZQogICAqICAgaW1tZWRpYXRlbHkgZW5jbG9zaW5nIGZ1bmN0aW9uLgogICAqLwogIERlY2xhcmF0aW9uTWlycm9yIGdldCBvd25lcjsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIGRlY2xhcmF0aW9uIGlzIGxpYnJhcnkgcHJpdmF0ZS4KICAgKgogICAqIEFsd2F5cyByZXR1cm5zIGBmYWxzZWAgZm9yIGEgbGlicmFyeSBkZWNsYXJhdGlvbiwKICAgKiBvdGhlcndpc2UgcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGRlY2xhcmF0aW9uJ3MgbmFtZSBzdGFydHMgd2l0aCBhbgogICAqIHVuZGVyc2NvcmUgY2hhcmFjdGVyIChgX2ApLCBhbmQgYGZhbHNlYCBpZiBpdCBkb2Vzbid0LgogICAqLwogIGJvb2wgZ2V0IGlzUHJpdmF0ZTsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIGRlY2xhcmF0aW9uIGlzIHRvcC1sZXZlbC4KICAgKgogICAqIEEgZGVjbGFyYXRpb24gaXMgY29uc2lkZXJlZCB0b3AtbGV2ZWwgaWYgaXRzIFtvd25lcl0gaXMgYSBbTGlicmFyeU1pcnJvcl0uCiAgICovCiAgYm9vbCBnZXQgaXNUb3BMZXZlbDsKCiAgLyoqCiAgICogVGhlIHNvdXJjZSBsb2NhdGlvbiBvZiB0aGlzIERhcnQgbGFuZ3VhZ2UgZW50aXR5LCBvciBbOm51bGw6XSBpZiB0aGUKICAgKiBlbnRpdHkgaXMgc3ludGhldGljLgogICAqCiAgICogSWYgdGhlIHJlZmxlY3RlZSBpcyBhIHZhcmlhYmxlLCB0aGUgcmV0dXJuZWQgbG9jYXRpb24gZ2l2ZXMgdGhlIHBvc2l0aW9uCiAgICogb2YgdGhlIHZhcmlhYmxlIG5hbWUgYXQgaXRzIHBvaW50IG9mIGRlY2xhcmF0aW9uLgogICAqCiAgICogSWYgdGhlIHJlZmxlY3RlZSBpcyBhIGxpYnJhcnksIGNsYXNzLCB0eXBlZGVmLCBmdW5jdGlvbiBvciB0eXBlIHZhcmlhYmxlCiAgICogd2l0aCBhc3NvY2lhdGVkIG1ldGFkYXRhLCB0aGUgcmV0dXJuZWQgbG9jYXRpb24gZ2l2ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZQogICAqIGZpcnN0IG1ldGFkYXRhIGRlY2xhcmF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVmbGVjdGVlLgogICAqCiAgICogT3RoZXJ3aXNlOgogICAqCiAgICogSWYgdGhlIHJlZmxlY3RlZSBpcyBhIGxpYnJhcnksIHRoZSByZXR1cm5lZCBsb2NhdGlvbiBnaXZlcyB0aGUgcG9zaXRpb24gb2YKICAgKiB0aGUga2V5d29yZCAnbGlicmFyeScgYXQgdGhlIHJlZmxlY3RlZSdzIHBvaW50IG9mIGRlY2xhcmF0aW9uLCBpZiB0aGUKICAgKiByZWZsZWN0ZWUgaXMgYSBuYW1lZCBsaWJyYXJ5LCBvciB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBmaXJzdCBsaW5lIGluCiAgICogdGhlIGNvbXBpbGF0aW9uIHVuaXQgZGVmaW5pbmcgdGhlIHJlZmxlY3RlZSBpZiB0aGUgcmVmbGVjdGVlIGlzIGFub255bW91cy4KICAgKgogICAqIElmIHRoZSByZWZsZWN0ZWUgaXMgYW4gYWJzdHJhY3QgY2xhc3MsIHRoZSByZXR1cm5lZCBsb2NhdGlvbiBnaXZlcyB0aGUKICAgKiBwb3NpdGlvbiBvZiB0aGUga2V5d29yZCAnYWJzdHJhY3QnIGF0IHRoZSByZWZsZWN0ZWUncyBwb2ludCBvZiBkZWNsYXJhdGlvbi4KICAgKiBPdGhlcndpc2UsIGlmIHRoZSByZWZsZWN0ZWUgaXMgYSBjbGFzcywgdGhlIHJldHVybmVkIGxvY2F0aW9uIGdpdmVzIHRoZQogICAqIHBvc2l0aW9uIG9mIHRoZSBrZXl3b3JkICdjbGFzcycgYXQgdGhlIHJlZmxlY3RlZSdzIHBvaW50IG9mIGRlY2xhcmF0aW9uLgogICAqCiAgICogSWYgdGhlIHJlZmxlY3RlZSBpcyBhIHR5cGVkZWYgdGhlIHJldHVybmVkIGxvY2F0aW9uIGdpdmVzIHRoZSBwb3NpdGlvbiBvZgogICAqIHRoZSBvZiB0aGUga2V5d29yZCAndHlwZWRlZicgYXQgdGhlIHJlZmxlY3RlZSdzIHBvaW50IG9mIGRlY2xhcmF0aW9uLgogICAqCiAgICogSWYgdGhlIHJlZmxlY3RlZSBpcyBhIGZ1bmN0aW9uIHdpdGggYSBkZWNsYXJlZCByZXR1cm4gdHlwZSwgdGhlIHJldHVybmVkCiAgICogbG9jYXRpb24gZ2l2ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBmdW5jdGlvbidzIHJldHVybiB0eXBlIGF0IHRoZQogICAqIHJlZmxlY3RlZSdzIHBvaW50IG9mIGRlY2xhcmF0aW9uLiBPdGhlcndpc2UuIHRoZSByZXR1cm5lZCBsb2NhdGlvbiBnaXZlcwogICAqIHRoZSBwb3NpdGlvbiBvZiB0aGUgZnVuY3Rpb24ncyBuYW1lIGF0IHRoZSByZWZsZWN0ZWUncyBwb2ludCBvZgogICAqIGRlY2xhcmF0aW9uLgogICAqCiAgICogVGhpcyBvcGVyYXRpb24gaXMgb3B0aW9uYWwgYW5kIG1heSB0aHJvdyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0uCiAgICovCiAgU291cmNlTG9jYXRpb24gZ2V0IGxvY2F0aW9uOwoKICAvKioKICAgKiBBIGxpc3Qgb2YgdGhlIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlY2xhcmF0aW9uLgogICAqCiAgICogTGV0ICpEKiBiZSB0aGUgZGVjbGFyYXRpb24gdGhpcyBtaXJyb3IgcmVmbGVjdHMuCiAgICogSWYgKkQqIGlzIGRlY29yYXRlZCB3aXRoIGFubm90YXRpb25zICpBMSwgLi4uLCBBbioKICAgKiB3aGVyZSAqbiA+IDAqLCB0aGVuIGZvciBlYWNoIGFubm90YXRpb24gKkFpKiBhc3NvY2lhdGVkCiAgICogd2l0aCAqRCwgMSA8PSBpIDw9IG4qLCBsZXQgKmNpKiBiZSB0aGUgY29uc3RhbnQgb2JqZWN0CiAgICogc3BlY2lmaWVkIGJ5ICpBaSouIFRoZW4gdGhpcyBtZXRob2QgcmV0dXJucyBhIGxpc3Qgd2hvc2UKICAgKiBtZW1iZXJzIGFyZSBpbnN0YW5jZSBtaXJyb3JzIG9uICpjMSwgLi4uLCBjbiouCiAgICogSWYgbm8gYW5ub3RhdGlvbnMgYXJlIGFzc29jaWF0ZWQgd2l0aCAqRCosIHRoZW4KICAgKiBhbiBlbXB0eSBsaXN0IGlzIHJldHVybmVkLgogICAqCiAgICogSWYgZXZhbHVhdGluZyBhbnkgb2YgKmMxLCAuLi4sIGNuKiB3b3VsZCBjYXVzZSBhCiAgICogY29tcGlsYXRpb24gZXJyb3IKICAgKiB0aGUgZWZmZWN0IGlzIHRoZSBzYW1lIGFzIGlmIGEgbm9uLXJlZmxlY3RpdmUgY29tcGlsYXRpb24gZXJyb3IKICAgKiBoYWQgYmVlbiBlbmNvdW50ZXJlZC4KICAgKi8KICBMaXN0PEluc3RhbmNlTWlycm9yPiBnZXQgbWV0YWRhdGE7Cn0KCi8qKgogKiBBbiBbT2JqZWN0TWlycm9yXSBpcyBhIGNvbW1vbiBzdXBlcmludGVyZmFjZSBvZiBbSW5zdGFuY2VNaXJyb3JdLAogKiBbQ2xhc3NNaXJyb3JdLCBhbmQgW0xpYnJhcnlNaXJyb3JdIHRoYXQgcmVwcmVzZW50cyB0aGVpciBzaGFyZWQKICogZnVuY3Rpb25hbGl0eS4KICoKICogRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGUgbWlycm9ycyBsaWJyYXJ5LCB0aGVzZSB0eXBlcyBhcmUgYWxsCiAqIG9iamVjdC1saWtlLCBpbiB0aGF0IHRoZXkgc3VwcG9ydCBtZXRob2QgaW52b2NhdGlvbiBhbmQgZmllbGQKICogYWNjZXNzLiAgUmVhbCBEYXJ0IG9iamVjdHMgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZSBbSW5zdGFuY2VNaXJyb3JdCiAqIHR5cGUuCiAqCiAqIFNlZSBbSW5zdGFuY2VNaXJyb3JdLCBbQ2xhc3NNaXJyb3JdLCBhbmQgW0xpYnJhcnlNaXJyb3JdLgogKi8KYWJzdHJhY3QgY2xhc3MgT2JqZWN0TWlycm9yIGltcGxlbWVudHMgTWlycm9yIHsKICAvKioKICAgKiBJbnZva2VzIHRoZSBuYW1lZCBmdW5jdGlvbiBhbmQgcmV0dXJucyBhIG1pcnJvciBvbiB0aGUgcmVzdWx0LgogICAqCiAgICogTGV0ICpvKiBiZSB0aGUgb2JqZWN0IHJlZmxlY3RlZCBieSB0aGlzIG1pcnJvciwgbGV0ICpmKiBiZSB0aGUgc2ltcGxlIG5hbWUKICAgKiBvZiB0aGUgbWVtYmVyIGRlbm90ZWQgYnkgW21lbWJlck5hbWVdLCBsZXQgKmExLCAuLi4sIGFuKiBiZSB0aGUgZWxlbWVudHMKICAgKiBvZiBbcG9zaXRpb25hbEFyZ3VtZW50c10sIGxldCAqazEsIC4uLiwga20qIGJlIHRoZSBpZGVudGlmaWVycyBkZW5vdGVkIGJ5CiAgICogdGhlIGVsZW1lbnRzIG9mIFtuYW1lZEFyZ3VtZW50cy5rZXlzXSwgYW5kIGxldCAqdjEsIC4uLiwgdm0qIGJlIHRoZQogICAqIGVsZW1lbnRzIG9mIFtuYW1lZEFyZ3VtZW50cy52YWx1ZXNdLiBUaGVuIHRoaXMgbWV0aG9kIHdpbGwgcGVyZm9ybSB0aGUKICAgKiBtZXRob2QgaW52b2NhdGlvbiAqby5mKGExLCAuLi4sIGFuLCBrMTogdjEsIC4uLiwga206IHZtKSogaW4gYSBzY29wZSB0aGF0CiAgICogaGFzIGFjY2VzcyB0byB0aGUgcHJpdmF0ZSBtZW1iZXJzIG9mICpvKiAoaWYgKm8qIGlzIGEgY2xhc3Mgb3IgbGlicmFyeSkgb3IKICAgKiB0aGUgcHJpdmF0ZSBtZW1iZXJzIG9mIHRoZSBjbGFzcyBvZiAqbyogKG90aGVyd2lzZSkuCiAgICoKICAgKiBJZiB0aGUgaW52b2NhdGlvbiByZXR1cm5zIGEgcmVzdWx0ICpyKiwgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcmVzdWx0IG9mCiAgICogY2FsbGluZyBbcmVmbGVjdF1cKCpyKlwpLgogICAqCiAgICogSWYgdGhlIGludm9jYXRpb24gY2F1c2VzIGEgY29tcGlsYXRpb24gZXJyb3IgdGhlIGVmZmVjdCBpcyB0aGUgc2FtZSBhcyBpZgogICAqIGEgbm9uLXJlZmxlY3RpdmUgY29tcGlsYXRpb24gZXJyb3IgaGFkIGJlZW4gZW5jb3VudGVyZWQuCiAgICoKICAgKiBJZiB0aGUgaW52b2NhdGlvbiB0aHJvd3MgYW4gZXhjZXB0aW9uICplKiAodGhhdCBpdCBkb2VzIG5vdCBjYXRjaCksIHRoaXMKICAgKiBtZXRob2QgdGhyb3dzICplKi4KICAgKi8KICBJbnN0YW5jZU1pcnJvciBpbnZva2UoU3ltYm9sIG1lbWJlck5hbWUsIExpc3Q8ZHluYW1pYz4gcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgW01hcDxTeW1ib2wsIGR5bmFtaWM+IG5hbWVkQXJndW1lbnRzXSk7CgogIC8qKgogICAqIEludm9rZXMgYSBnZXR0ZXIgYW5kIHJldHVybnMgYSBtaXJyb3Igb24gdGhlIHJlc3VsdC4KICAgKgogICAqIFRoZSBnZXR0ZXIgY2FuIGJlIHRoZSBpbXBsaWNpdCBnZXR0ZXIgZm9yIGEgZmllbGQgb3IgYSB1c2VyLWRlZmluZWQgZ2V0dGVyCiAgICogbWV0aG9kLgogICAqCiAgICogTGV0ICpvKiBiZSB0aGUgb2JqZWN0IHJlZmxlY3RlZCBieSB0aGlzIG1pcnJvciwKICAgKiBsZXQgKmYqIGJlIHRoZSBzaW1wbGUgbmFtZSBvZiB0aGUgZ2V0dGVyIGRlbm90ZWQgYnkgW2ZpZWxkTmFtZV0uCiAgICoKICAgKiBUaGVuIHRoaXMgbWV0aG9kIHdpbGwgcGVyZm9ybSB0aGUgZ2V0dGVyIGludm9jYXRpb24gKm8uZiogaW4gYSBzY29wZSB0aGF0CiAgICogaGFzIGFjY2VzcyB0byB0aGUgcHJpdmF0ZSBtZW1iZXJzIG9mICpvKiAoaWYgKm8qIGlzIGEgY2xhc3Mgb3IgbGlicmFyeSkgb3IKICAgKiB0aGUgcHJpdmF0ZSBtZW1iZXJzIG9mIHRoZSBjbGFzcyBvZiAqbyogKG90aGVyd2lzZSkuCiAgICoKICAgKiBJZiB0aGlzIG1pcnJvciBpcyBhbiBbSW5zdGFuY2VNaXJyb3JdLCBhbmQgW2ZpZWxkTmFtZV0gZGVub3RlcyBhbiBpbnN0YW5jZQogICAqIG1ldGhvZCBvbiBpdHMgcmVmbGVjdGVlLCB0aGUgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIGlzIGFuIGluc3RhbmNlCiAgICogbWlycm9yIG9uIGEgY2xvc3VyZSBjb3JyZXNwb25kaW5nIHRvIHRoYXQgbWV0aG9kLgogICAqCiAgICogSWYgdGhpcyBtaXJyb3IgaXMgYSBbTGlicmFyeU1pcnJvcl0sIGFuZCBbZmllbGROYW1lXSBkZW5vdGVzIGEgdG9wLWxldmVsCiAgICogbWV0aG9kIGluIHRoZSBjb3JyZXNwb25kaW5nIGxpYnJhcnksIHRoZSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gaXMgYW4KICAgKiBpbnN0YW5jZSBtaXJyb3Igb24gYSBjbG9zdXJlIGNvcnJlc3BvbmRpbmcgdG8gdGhhdCBtZXRob2QuCiAgICoKICAgKiBJZiB0aGlzIG1pcnJvciBpcyBhIFtDbGFzc01pcnJvcl0sIGFuZCBbZmllbGROYW1lXSBkZW5vdGVzIGEgc3RhdGljIG1ldGhvZAogICAqIGluIHRoZSBjb3JyZXNwb25kaW5nIGNsYXNzLCB0aGUgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIGlzIGFuIGluc3RhbmNlCiAgICogbWlycm9yIG9uIGEgY2xvc3VyZSBjb3JyZXNwb25kaW5nIHRvIHRoYXQgbWV0aG9kLgogICAqCiAgICogSWYgdGhlIGludm9jYXRpb24gcmV0dXJucyBhIHJlc3VsdCAqciosIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHJlc3VsdCBvZgogICAqIGNhbGxpbmcgW3JlZmxlY3RdXCgqcipcKS4KICAgKgogICAqIElmIHRoZSBpbnZvY2F0aW9uIGNhdXNlcyBhIGNvbXBpbGF0aW9uIGVycm9yLCB0aGUgZWZmZWN0IGlzIHRoZSBzYW1lIGFzIGlmCiAgICogYSBub24tcmVmbGVjdGl2ZSBjb21waWxhdGlvbiBlcnJvciBoYWQgYmVlbiBlbmNvdW50ZXJlZC4KICAgKgogICAqIElmIHRoZSBpbnZvY2F0aW9uIHRocm93cyBhbiBleGNlcHRpb24gKmUqICh0aGF0IGl0IGRvZXMgbm90IGNhdGNoKSwgdGhpcwogICAqIG1ldGhvZCB0aHJvd3MgKmUqLgogICAqLwogIC8vIFRPRE8oYWhlKTogUmVtb3ZlIHN0dWZmIGFib3V0IHNjb3BlIGFuZCBwcml2YXRlIG1lbWJlcnMuIFtmaWVsZE5hbWVdIGlzIGEKICAvLyBjYXBhYmlsaXR5IGdpdmluZyBhY2Nlc3MgdG8gcHJpdmF0ZSBtZW1iZXJzLgogIEluc3RhbmNlTWlycm9yIGdldEZpZWxkKFN5bWJvbCBmaWVsZE5hbWUpOwoKICAvKioKICAgKiBJbnZva2VzIGEgc2V0dGVyIGFuZCByZXR1cm5zIGEgbWlycm9yIG9uIHRoZSByZXN1bHQuCiAgICoKICAgKiBUaGUgc2V0dGVyIG1heSBiZSBlaXRoZXIgdGhlIGltcGxpY2l0IHNldHRlciBmb3IgYSBub24tZmluYWwgZmllbGQgb3IgYQogICAqIHVzZXItZGVmaW5lZCBzZXR0ZXIgbWV0aG9kLgogICAqCiAgICogTGV0ICpvKiBiZSB0aGUgb2JqZWN0IHJlZmxlY3RlZCBieSB0aGlzIG1pcnJvciwKICAgKiBsZXQgKmYqIGJlIHRoZSBzaW1wbGUgbmFtZSBvZiB0aGUgZ2V0dGVyIGRlbm90ZWQgYnkgW2ZpZWxkTmFtZV0sCiAgICogYW5kIGxldCAqYSogYmUgdGhlIG9iamVjdCBib3VuZCB0byBbdmFsdWVdLgogICAqCiAgICogVGhlbiB0aGlzIG1ldGhvZCB3aWxsIHBlcmZvcm0gdGhlIHNldHRlciBpbnZvY2F0aW9uICpvLmYgPSBhKiBpbiBhIHNjb3BlCiAgICogdGhhdCBoYXMgYWNjZXNzIHRvIHRoZSBwcml2YXRlIG1lbWJlcnMgb2YgKm8qIChpZiAqbyogaXMgYSBjbGFzcyBvcgogICAqIGxpYnJhcnkpIG9yIHRoZSBwcml2YXRlIG1lbWJlcnMgb2YgdGhlIGNsYXNzIG9mICpvKiAob3RoZXJ3aXNlKS4KICAgKgogICAqIElmIHRoZSBpbnZvY2F0aW9uIHJldHVybnMgYSByZXN1bHQgKnIqLCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSByZXN1bHQgb2YKICAgKiBjYWxsaW5nIFtyZWZsZWN0XVwoW3ZhbHVlXVwpLgogICAqCiAgICogSWYgdGhlIGludm9jYXRpb24gY2F1c2VzIGEgY29tcGlsYXRpb24gZXJyb3IsIHRoZSBlZmZlY3QgaXMgdGhlIHNhbWUgYXMgaWYKICAgKiBhIG5vbi1yZWZsZWN0aXZlIGNvbXBpbGF0aW9uIGVycm9yIGhhZCBiZWVuIGVuY291bnRlcmVkLgogICAqCiAgICogSWYgdGhlIGludm9jYXRpb24gdGhyb3dzIGFuIGV4Y2VwdGlvbiAqZSogKHRoYXQgaXQgZG9lcyBub3QgY2F0Y2gpIHRoaXMKICAgKiBtZXRob2QgdGhyb3dzICplKi4KICAgKi8KICBJbnN0YW5jZU1pcnJvciBzZXRGaWVsZChTeW1ib2wgZmllbGROYW1lLCBkeW5hbWljIHZhbHVlKTsKCiAgLyoqCiAgICogUGVyZm9ybXMgW2ludm9jYXRpb25dIG9uIHRoZSByZWZsZWN0ZWUgb2YgdGhpcyBbT2JqZWN0TWlycm9yXS4KICAgKgogICAqIEVxdWl2YWxlbnQgdG8KICAgKgogICAqICAgICBpZiAoaW52b2NhdGlvbi5pc0dldHRlcikgewogICAqICAgICAgIHJldHVybiB0aGlzLmdldEZpZWxkKGludm9jYXRpb24ubWVtYmVyTmFtZSkucmVmbGVjdGVlOwogICAqICAgICB9IGVsc2UgaWYgKGludm9jYXRpb24uaXNTZXR0ZXIpIHsKICAgKiAgICAgICByZXR1cm4gdGhpcy5zZXRGaWVsZChpbnZvY2F0aW9uLm1lbWJlck5hbWUsCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52b2NhdGlvbi5wb3NpdGlvbmFsQXJndW1lbnRzWzBdKS5yZWZsZWN0ZWU7CiAgICogICAgIH0gZWxzZSB7CiAgICogICAgICAgcmV0dXJuIHRoaXMuaW52b2tlKGludm9jYXRpb24ubWVtYmVyTmFtZSwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaW52b2NhdGlvbi5wb3NpdGlvbmFsQXJndW1lbnRzLAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uLm5hbWVkQXJndW1lbnRzKS5yZWZsZWN0ZWU7CiAgICogICAgIH0KICAgKi8KICBkZWxlZ2F0ZShJbnZvY2F0aW9uIGludm9jYXRpb24pOwp9CgovKioKICogQW4gW0luc3RhbmNlTWlycm9yXSByZWZsZWN0cyBhbiBpbnN0YW5jZSBvZiBhIERhcnQgbGFuZ3VhZ2Ugb2JqZWN0LgogKi8KYWJzdHJhY3QgY2xhc3MgSW5zdGFuY2VNaXJyb3IgaW1wbGVtZW50cyBPYmplY3RNaXJyb3IgewogIC8qKgogICAqIEEgbWlycm9yIG9uIHRoZSB0eXBlIG9mIHRoZSByZWZsZWN0ZWUuCiAgICoKICAgKiBSZXR1cm5zIGEgbWlycm9yIG9uIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIHJlZmxlY3RlZS4KICAgKiBUaGUgY2xhc3Mgb2YgdGhlIHJlZmxlY3RlZSBtYXkgZGlmZmVyIGZyb20KICAgKiB0aGUgb2JqZWN0IHJldHVybmVkIGJ5IGludm9raW5nIFtydW50aW1lVHlwZV0gb24KICAgKiB0aGUgcmVmbGVjdGVlLgogICAqLwogIENsYXNzTWlycm9yIGdldCB0eXBlOwoKICAvKioKICAgKiBXaGV0aGVyIFtyZWZsZWN0ZWVdIHdpbGwgcmV0dXJuIHRoZSBpbnN0YW5jZSByZWZsZWN0ZWQgYnkgdGhpcyBtaXJyb3IuCiAgICoKICAgKiBUaGlzIHdpbGwgYWx3YXlzIGJlIHRydWUgaW4gdGhlIGxvY2FsIGNhc2UgKHJlZmxlY3RpbmcgaW5zdGFuY2VzIGluIHRoZQogICAqIHNhbWUgaXNvbGF0ZSksIGJ1dCBvbmx5IHRydWUgaW4gdGhlIHJlbW90ZSBjYXNlIGlmIHRoaXMgbWlycm9yIHJlZmxlY3RzIGEKICAgKiBzaW1wbGUgdmFsdWUuCiAgICoKICAgKiBBIHZhbHVlIGlzIHNpbXBsZSBpZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBob2xkczoKICAgKgogICAqICogdGhlIHZhbHVlIGlzIFs6bnVsbDpdCiAgICogKiB0aGUgdmFsdWUgaXMgb2YgdHlwZSBbbnVtXQogICAqICogdGhlIHZhbHVlIGlzIG9mIHR5cGUgW2Jvb2xdCiAgICogKiB0aGUgdmFsdWUgaXMgb2YgdHlwZSBbU3RyaW5nXQogICAqLwogIGJvb2wgZ2V0IGhhc1JlZmxlY3RlZTsKCiAgLyoqCiAgICogSWYgdGhlIFtJbnN0YW5jZU1pcnJvcl0gcmVmbGVjdHMgYW4gaW5zdGFuY2UgaXQgaXMgbWVhbmluZ2Z1bCB0bwogICAqIGhhdmUgYSBsb2NhbCByZWZlcmVuY2UgdG8sIHdlIHByb3ZpZGUgYWNjZXNzIHRvIHRoZSBhY3R1YWwKICAgKiBpbnN0YW5jZSBoZXJlLgogICAqCiAgICogSWYgeW91IGFjY2VzcyBbcmVmbGVjdGVlXSB3aGVuIFtoYXNSZWZsZWN0ZWVdIGlzIGZhbHNlLCBhbgogICAqIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICovCiAgZHluYW1pYyBnZXQgcmVmbGVjdGVlOwoKICAvKioKICAgKiBXaGV0aGVyIHRoaXMgbWlycm9yIGlzIGVxdWFsIHRvIFtvdGhlcl0uCiAgICoKICAgKiBUaGUgZXF1YWxpdHkgaG9sZHMgaWYgYW5kIG9ubHkgaWYKICAgKgogICAqIDEuIFtvdGhlcl0gaXMgYSBtaXJyb3Igb2YgdGhlIHNhbWUga2luZCwgYW5kCiAgICogMi4gZWl0aGVyCiAgICoKICAgKiAgICBhLiBbaGFzUmVmbGVjdGVlXSBpcyB0cnVlIGFuZCBzbyBpcwogICAqICAgIFs6aWRlbnRpY2FsKHJlZmxlY3RlZSwgb3RoZXIucmVmbGVjdGVlKTpdLCBvcgogICAqCiAgICogICAgYi4gdGhlIHJlbW90ZSBvYmplY3RzIHJlZmxlY3RlZCBieSB0aGlzIG1pcnJvciBhbmQgYnkgW290aGVyXSBhcmUKICAgKiAgICBpZGVudGljYWwuCiAgICovCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcik7Cn0KCi8qKgogKiBBIFtDbG9zdXJlTWlycm9yXSByZWZsZWN0cyBhIGNsb3N1cmUuCiAqCiAqIEEgW0Nsb3N1cmVNaXJyb3JdIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgaXRzIHJlZmxlY3RlZSBhbmQKICogaW50cm9zcGVjdCBpdHMgZnVuY3Rpb24uCiAqLwphYnN0cmFjdCBjbGFzcyBDbG9zdXJlTWlycm9yIGltcGxlbWVudHMgSW5zdGFuY2VNaXJyb3IgewogIC8qKgogICAqIEEgbWlycm9yIG9uIHRoZSBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBjbG9zdXJlLgogICAqCiAgICogVGhlIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCBhbiBpbXBsaWNpdCBjbG9zdXJlIG9mIGEgZnVuY3Rpb24gaXMgdGhhdAogICAqIGZ1bmN0aW9uLgogICAqCiAgICogVGhlIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGEgWzpjYWxsOl0KICAgKiBtZXRob2QgaXMgdGhhdCBbOmNhbGw6XSBtZXRob2QuCiAgICoKICAgKiBBIERhcnQgaW1wbGVtZW50YXRpb24gbWlnaHQgY2hvb3NlIHRvIGNyZWF0ZSBhIGNsYXNzIGZvciBlYWNoIGNsb3N1cmUKICAgKiBleHByZXNzaW9uLCBpbiB3aGljaCBjYXNlIFs6ZnVuY3Rpb246XSB3b3VsZCBiZSB0aGUgc2FtZSBhcwogICAqIFs6dHlwZS5kZWNsYXJhdGlvbnNbI2NhbGxdOl0uIEJ1dCB0aGUgRGFydCBsYW5ndWFnZSBtb2RlbCBkb2VzIG5vdCByZXF1aXJlCiAgICogdGhpcy4gQSBtb3JlIHR5cGljYWwgaW1wbGVtZW50YXRpb24gaW52b2x2ZXMgYSBzaW5nbGUgY2xvc3VyZSBjbGFzcyBmb3IKICAgKiBlYWNoIHR5cGUgc2lnbmF0dXJlLCB3aGVyZSB0aGUgY2FsbCBtZXRob2QgZGlzcGF0Y2hlcyB0byBhIGZ1bmN0aW9uIGhlbGQKICAgKiBpbiB0aGUgY2xvc3VyZSByYXRoZXIgdGhlIGNhbGwgbWV0aG9kCiAgICogZGlyZWN0bHkgaW1wbGVtZW50aW5nIHRoZSBjbG9zdXJlIGJvZHkuIFNvIG9uZSBjYW5ub3QgcmVseSBvbiBjbG9zdXJlcyBmcm9tCiAgICogZGlzdGluY3QgY2xvc3VyZSBleHByZXNzaW9ucyBoYXZpbmcgZGlzdGluY3QgY2xhc3NlcyAoWzp0eXBlOl0pLCBidXQgb25lCiAgICogY2FuIHJlbHkgb24gdGhlbSBoYXZpbmcgZGlzdGluY3QgZnVuY3Rpb25zIChbOmZ1bmN0aW9uOl0pLgogICAqLwogIE1ldGhvZE1pcnJvciBnZXQgZnVuY3Rpb247CgogIC8qKgogICAqIEV4ZWN1dGVzIHRoZSBjbG9zdXJlIGFuZCByZXR1cm5zIGEgbWlycm9yIG9uIHRoZSByZXN1bHQuCiAgICoKICAgKiBMZXQgKmYqIGJlIHRoZSBjbG9zdXJlIHJlZmxlY3RlZCBieSB0aGlzIG1pcnJvciwKICAgKiBsZXQgKmExLCAuLi4sIGFuKiBiZSB0aGUgZWxlbWVudHMgb2YgW3Bvc2l0aW9uYWxBcmd1bWVudHNdLAogICAqIGxldCAqazEsIC4uLiwga20qIGJlIHRoZSBpZGVudGlmaWVycyBkZW5vdGVkIGJ5IHRoZSBlbGVtZW50cyBvZgogICAqIFtuYW1lZEFyZ3VtZW50cy5rZXlzXSwKICAgKiBhbmQgbGV0ICp2MSwgLi4uLCB2bSogYmUgdGhlIGVsZW1lbnRzIG9mIFtuYW1lZEFyZ3VtZW50cy52YWx1ZXNdLgogICAqCiAgICogVGhlbiB0aGlzIG1ldGhvZCB3aWxsIHBlcmZvcm0gdGhlIG1ldGhvZCBpbnZvY2F0aW9uCiAgICogKmYoYTEsIC4uLiwgYW4sIGsxOiB2MSwgLi4uLCBrbTogdm0pKi4KICAgKgogICAqIElmIHRoZSBpbnZvY2F0aW9uIHJldHVybnMgYSByZXN1bHQgKnIqLCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSByZXN1bHQgb2YKICAgKiBjYWxsaW5nIFtyZWZsZWN0XVwoKnIqXCkuCiAgICoKICAgKiBJZiB0aGUgaW52b2NhdGlvbiBjYXVzZXMgYSBjb21waWxhdGlvbiBlcnJvciwgdGhlIGVmZmVjdCBpcyB0aGUgc2FtZSBhcyBpZgogICAqIGEgbm9uLXJlZmxlY3RpdmUgY29tcGlsYXRpb24gZXJyb3IgaGFkIGJlZW4gZW5jb3VudGVyZWQuCiAgICoKICAgKiBJZiB0aGUgaW52b2NhdGlvbiB0aHJvd3MgYW4gZXhjZXB0aW9uICplKiAodGhhdCBpdCBkb2VzIG5vdCBjYXRjaCksIHRoaXMKICAgKiBtZXRob2QgdGhyb3dzICplKi4KICAgKi8KICBJbnN0YW5jZU1pcnJvciBhcHBseShMaXN0PGR5bmFtaWM+IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIFtNYXA8U3ltYm9sLCBkeW5hbWljPiBuYW1lZEFyZ3VtZW50c10pOwp9CgovKioKICogQSBbTGlicmFyeU1pcnJvcl0gcmVmbGVjdHMgYSBEYXJ0IGxhbmd1YWdlIGxpYnJhcnksIHByb3ZpZGluZwogKiBhY2Nlc3MgdG8gdGhlIHZhcmlhYmxlcywgZnVuY3Rpb25zLCBhbmQgY2xhc3NlcyBvZiB0aGUKICogbGlicmFyeS4KICovCmFic3RyYWN0IGNsYXNzIExpYnJhcnlNaXJyb3IgaW1wbGVtZW50cyBEZWNsYXJhdGlvbk1pcnJvciwgT2JqZWN0TWlycm9yIHsKICAvKioKICAgKiBUaGUgYWJzb2x1dGUgdXJpIG9mIHRoZSBsaWJyYXJ5LgogICAqLwogIFVyaSBnZXQgdXJpOwoKICAvKioKICAgKiBSZXR1cm5zIGFuIGltbXV0YWJsZSBtYXAgb2YgdGhlIGRlY2xhcmF0aW9ucyBhY3R1YWxseSBnaXZlbiBpbiB0aGUgbGlicmFyeS4KICAgKgogICAqIFRoaXMgbWFwIGluY2x1ZGVzIGFsbCByZWd1bGFyIG1ldGhvZHMsIGdldHRlcnMsIHNldHRlcnMsIGZpZWxkcywgY2xhc3NlcwogICAqIGFuZCB0eXBlZGVmcyBhY3R1YWxseSBkZWNsYXJlZCBpbiB0aGUgbGlicmFyeS4gVGhlIG1hcCBpcyBrZXllZCBieSB0aGUKICAgKiBzaW1wbGUgbmFtZXMgb2YgdGhlIGRlY2xhcmF0aW9ucy4KICAgKi8KICBNYXA8U3ltYm9sLCBEZWNsYXJhdGlvbk1pcnJvcj4gZ2V0IGRlY2xhcmF0aW9uczsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIG1pcnJvciBpcyBlcXVhbCB0byBbb3RoZXJdLgogICAqCiAgICogVGhlIGVxdWFsaXR5IGhvbGRzIGlmIGFuZCBvbmx5IGlmCiAgICoKICAgKiAxLiBbb3RoZXJdIGlzIGEgbWlycm9yIG9mIHRoZSBzYW1lIGtpbmQsIGFuZAogICAqIDIuIFRoZSBsaWJyYXJ5IGJlaW5nIHJlZmxlY3RlZCBieSB0aGlzIG1pcnJvciBhbmQgdGhlIGxpYnJhcnkgYmVpbmcKICAgKiAgICByZWZsZWN0ZWQgYnkgW290aGVyXSBhcmUgdGhlIHNhbWUgbGlicmFyeSBpbiB0aGUgc2FtZSBpc29sYXRlLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgaW1wb3J0cyBhbmQgZXhwb3J0cyBpbiB0aGlzIGxpYnJhcnk7CiAgICovCiAgTGlzdDxMaWJyYXJ5RGVwZW5kZW5jeU1pcnJvcj4gZ2V0IGxpYnJhcnlEZXBlbmRlbmNpZXM7Cn0KCi8vLyBBIG1pcnJvciBvbiBhbiBpbXBvcnQgb3IgZXhwb3J0IGRlY2xhcmF0aW9uLgphYnN0cmFjdCBjbGFzcyBMaWJyYXJ5RGVwZW5kZW5jeU1pcnJvciBpbXBsZW1lbnRzIE1pcnJvciB7CiAgLy8vIElzIGB0cnVlYCBpZiB0aGlzIGRlcGVuZGVuY3kgaXMgYW4gaW1wb3J0LgogIGJvb2wgZ2V0IGlzSW1wb3J0OwoKICAvLy8gSXMgYHRydWVgIGlmIHRoaXMgZGVwZW5kZW5jeSBpcyBhbiBleHBvcnQuCiAgYm9vbCBnZXQgaXNFeHBvcnQ7CgogIC8vLyBSZXR1cm5zIHRydWUgaWZmIHRoaXMgZGVwZW5kZW5jeSBpcyBhIGRlZmVycmVkIGltcG9ydC4gT3RoZXJ3aXNlIHJldHVybnMKICAvLy8gZmFsc2UuCiAgYm9vbCBnZXQgaXNEZWZlcnJlZDsKCiAgLy8vIFJldHVybnMgdGhlIGxpYnJhcnkgbWlycm9yIG9mIHRoZSBsaWJyYXJ5IHRoYXQgaW1wb3J0cyBvciBleHBvcnRzIHRoZQogIC8vLyBbdGFyZ2V0TGlicmFyeV0uCiAgTGlicmFyeU1pcnJvciBnZXQgc291cmNlTGlicmFyeTsKCiAgLy8vIFJldHVybnMgdGhlIGxpYnJhcnkgbWlycm9yIG9mIHRoZSBsaWJyYXJ5IHRoYXQgaXMgaW1wb3J0ZWQgb3IgZXhwb3J0ZWQsCiAgLy8vIG9yIG51bGwgaWYgdGhlIGxpYnJhcnkgaXMgbm90IGxvYWRlZC4KICBMaWJyYXJ5TWlycm9yIGdldCB0YXJnZXRMaWJyYXJ5OwoKICAvLy8gUmV0dXJucyB0aGUgcHJlZml4IGlmIHRoaXMgaXMgYSBwcmVmaXhlZCBpbXBvcnQgYW5kIGBudWxsYCBvdGhlcndpc2UuCiAgU3ltYm9sIGdldCBwcmVmaXg7CgogIC8vLyBSZXR1cm5zIHRoZSBsaXN0IG9mIHNob3cvaGlkZSBjb21iaW5hdG9ycyBvbiB0aGUgaW1wb3J0L2V4cG9ydAogIC8vLyBkZWNsYXJhdGlvbi4KICBMaXN0PENvbWJpbmF0b3JNaXJyb3I+IGdldCBjb21iaW5hdG9yczsKCiAgLy8vIFJldHVybnMgdGhlIHNvdXJjZSBsb2NhdGlvbiBmb3IgdGhpcyBpbXBvcnQvZXhwb3J0IGRlY2xhcmF0aW9uLgogIFNvdXJjZUxvY2F0aW9uIGdldCBsb2NhdGlvbjsKCiAgTGlzdDxJbnN0YW5jZU1pcnJvcj4gZ2V0IG1ldGFkYXRhOwoKICAvLy8gUmV0dXJucyBhIGZ1dHVyZSB0aGF0IGNvbXBsZXRlcyB3aXRoIGEgbGlicmFyeSBtaXJyb3Igb24gdGhlIGxpYnJhcnkgYmVpbmcKICAvLy8gaW1wb3J0ZWQgb3IgZXhwb3J0ZWQgd2hlbiBpdCBpcyBsb2FkZWQsIGFuZCBpbml0aWF0ZXMgYSBsb2FkIG9mIHRoYXQKICAvLy8gbGlicmFyeSBpZiBpdCBpcyBub3QgbG9hZGVkLgogIEZ1dHVyZTxMaWJyYXJ5TWlycm9yPiBsb2FkTGlicmFyeSgpOwp9CgovLy8gQSBtaXJyb3Igb24gYSBzaG93L2hpZGUgY29tYmluYXRvciBkZWNsYXJlZCBvbiBhIGxpYnJhcnkgZGVwZW5kZW5jeS4KYWJzdHJhY3QgY2xhc3MgQ29tYmluYXRvck1pcnJvciBpbXBsZW1lbnRzIE1pcnJvciB7CiAgLy8vIFRoZSBsaXN0IG9mIGlkZW50aWZpZXJzIG9uIHRoZSBjb21iaW5hdG9yLgogIExpc3Q8U3ltYm9sPiBnZXQgaWRlbnRpZmllcnM7CgogIC8vLyBJcyBgdHJ1ZWAgaWYgdGhpcyBpcyBhICdzaG93JyBjb21iaW5hdG9yLgogIGJvb2wgZ2V0IGlzU2hvdzsKCiAgLy8vIElzIGB0cnVlYCBpZiB0aGlzIGlzIGEgJ2hpZGUnIGNvbWJpbmF0b3IuCiAgYm9vbCBnZXQgaXNIaWRlOwp9CgovKioKICogQSBbVHlwZU1pcnJvcl0gcmVmbGVjdHMgYSBEYXJ0IGxhbmd1YWdlIGNsYXNzLCB0eXBlZGVmLAogKiBmdW5jdGlvbiB0eXBlIG9yIHR5cGUgdmFyaWFibGUuCiAqLwphYnN0cmFjdCBjbGFzcyBUeXBlTWlycm9yIGltcGxlbWVudHMgRGVjbGFyYXRpb25NaXJyb3IgewogIC8qKgogICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIG1pcnJvciByZWZsZWN0cyBkeW5hbWljLCBhIG5vbi1nZW5lcmljIGNsYXNzIG9yCiAgICogdHlwZWRlZiwgb3IgYW4gaW5zdGFudGlhdGVkIGdlbmVyaWMgY2xhc3Mgb3IgdHlwZWRlZiBpbiB0aGUgY3VycmVudAogICAqIGlzb2xhdGUuIE90aGVyd2lzZSwgcmV0dXJucyBmYWxzZS4KICAgKi8KICBib29sIGdldCBoYXNSZWZsZWN0ZWRUeXBlOwoKICAvKioKICAgKiBJZiBbOmhhc1JlZmxlY3RlZFR5cGU6XSByZXR1cm5zIHRydWUsIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgW1R5cGVdLgogICAqIE90aGVyd2lzZSwgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdIGlzIHRocm93bi4KICAgKi8KICBUeXBlIGdldCByZWZsZWN0ZWRUeXBlOwoKICAvKioKICAgKiBBbiBpbW11dGFibGUgbGlzdCB3aXRoIG1pcnJvcnMgZm9yIGFsbCB0eXBlIHZhcmlhYmxlcyBmb3IgdGhpcyB0eXBlLgogICAqCiAgICogSWYgdGhpcyB0eXBlIGlzIGEgZ2VuZXJpYyBkZWNsYXJhdGlvbiBvciBhbiBpbnZvY2F0aW9uIG9mIGEgZ2VuZXJpYwogICAqIGRlY2xhcmF0aW9uLCB0aGUgcmV0dXJuZWQgbGlzdCBjb250YWlucyBtaXJyb3JzIG9uIHRoZSB0eXBlIHZhcmlhYmxlcwogICAqIGRlY2xhcmVkIGluIHRoZSBvcmlnaW5hbCBkZWNsYXJhdGlvbi4KICAgKiBPdGhlcndpc2UsIHRoZSByZXR1cm5lZCBsaXN0IGlzIGVtcHR5LgogICAqCiAgICogVGhpcyBsaXN0IHByZXNlcnZlcyB0aGUgb3JkZXIgb2YgZGVjbGFyYXRpb24gb2YgdGhlIHR5cGUgdmFyaWFibGVzLgogICAqLwogIExpc3Q8VHlwZVZhcmlhYmxlTWlycm9yPiBnZXQgdHlwZVZhcmlhYmxlczsKCiAgLyoqCiAgICogQW4gaW1tdXRhYmxlIGxpc3Qgd2l0aCBtaXJyb3JzIGZvciBhbGwgdHlwZSBhcmd1bWVudHMgZm9yCiAgICogdGhpcyB0eXBlLgogICAqCiAgICogSWYgdGhlIHJlZmxlY3RlZSBpcyBhbiBpbnZvY2F0aW9uIG9mIGEgZ2VuZXJpYyBjbGFzcywKICAgKiB0aGUgdHlwZSBhcmd1bWVudHMgYXJlIHRoZSBiaW5kaW5ncyBvZiBpdHMgdHlwZSBwYXJhbWV0ZXJzLgogICAqIElmIHRoZSByZWZsZWN0ZWUgaXMgdGhlIG9yaWdpbmFsIGRlY2xhcmF0aW9uIG9mIGEgZ2VuZXJpYywKICAgKiBpdCBoYXMgbm8gdHlwZSBhcmd1bWVudHMgYW5kIHRoaXMgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgbGlzdC4KICAgKiBJZiB0aGUgcmVmbGVjdGVlIGlzIG5vdCBnZW5lcmljLCB0aGVuCiAgICogaXQgaGFzIG5vIHR5cGUgYXJndW1lbnRzIGFuZCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IGxpc3QuCiAgICoKICAgKiBUaGlzIGxpc3QgcHJlc2VydmVzIHRoZSBvcmRlciBvZiBkZWNsYXJhdGlvbiBvZiB0aGUgdHlwZSB2YXJpYWJsZXMuCiAgICovCiAgTGlzdDxUeXBlTWlycm9yPiBnZXQgdHlwZUFyZ3VtZW50czsKCiAgLyoqCiAgICogSXMgdGhpcyB0aGUgb3JpZ2luYWwgZGVjbGFyYXRpb24gb2YgdGhpcyB0eXBlPwogICAqCiAgICogRm9yIG1vc3QgY2xhc3NlcywgdGhleSBhcmUgdGhlaXIgb3duIG9yaWdpbmFsIGRlY2xhcmF0aW9uLiAgRm9yCiAgICogZ2VuZXJpYyBjbGFzc2VzLCBob3dldmVyLCB0aGVyZSBpcyBhIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlCiAgICogb3JpZ2luYWwgY2xhc3MgZGVjbGFyYXRpb24sIHdoaWNoIGhhcyB1bmJvdW5kIHR5cGUgdmFyaWFibGVzLCBhbmQKICAgKiB0aGUgaW5zdGFudGlhdGlvbnMgb2YgZ2VuZXJpYyBjbGFzc2VzLCB3aGljaCBoYXZlIGJvdW5kIHR5cGUKICAgKiB2YXJpYWJsZXMuCiAgICovCiAgYm9vbCBnZXQgaXNPcmlnaW5hbERlY2xhcmF0aW9uOwoKICAvKioKICAgKiBBIG1pcnJvciBvbiB0aGUgb3JpZ2luYWwgZGVjbGFyYXRpb24gb2YgdGhpcyB0eXBlLgogICAqCiAgICogRm9yIG1vc3QgY2xhc3NlcywgdGhleSBhcmUgdGhlaXIgb3duIG9yaWdpbmFsIGRlY2xhcmF0aW9uLiAgRm9yCiAgICogZ2VuZXJpYyBjbGFzc2VzLCBob3dldmVyLCB0aGVyZSBpcyBhIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlCiAgICogb3JpZ2luYWwgY2xhc3MgZGVjbGFyYXRpb24sIHdoaWNoIGhhcyB1bmJvdW5kIHR5cGUgdmFyaWFibGVzLCBhbmQKICAgKiB0aGUgaW5zdGFudGlhdGlvbnMgb2YgZ2VuZXJpYyBjbGFzc2VzLCB3aGljaCBoYXZlIGJvdW5kIHR5cGUKICAgKiB2YXJpYWJsZXMuCiAgICovCiAgVHlwZU1pcnJvciBnZXQgb3JpZ2luYWxEZWNsYXJhdGlvbjsKCiAgLyoqCiAgICogQ2hlY2tzIHRoZSBzdWJ0eXBlIHJlbGF0aW9uc2hpcCwgZGVub3RlZCBieSBgPDpgIGluIHRoZSBsYW5ndWFnZQogICAqIHNwZWNpZmljYXRpb24uCiAgICoKICAgKiBUaGlzIGlzIHRoZSB0eXBlIHJlbGF0aW9uc2hpcCB1c2VkIGluIGBpc2AgdGVzdCBjaGVja3MuCiAgICovCiAgYm9vbCBpc1N1YnR5cGVPZihUeXBlTWlycm9yIG90aGVyKTsKCiAgLyoqCiAgICogQ2hlY2tzIHRoZSBhc3NpZ25hYmlsaXR5IHJlbGF0aW9uc2hpcCwgZGVub3RlZCBieSBgPD0+YCBpbiB0aGUgbGFuZ3VhZ2UKICAgKiBzcGVjaWZpY2F0aW9uLgogICAqCiAgICogVGhpcyBpcyB0aGUgdHlwZSByZWxhdGlvbnNoaXAgdGVzdGVkIG9uIGFzc2lnbm1lbnQgaW4gY2hlY2tlZCBtb2RlLgogICAqLwogIGJvb2wgaXNBc3NpZ25hYmxlVG8oVHlwZU1pcnJvciBvdGhlcik7Cn0KCi8qKgogKiBBIFtDbGFzc01pcnJvcl0gcmVmbGVjdHMgYSBEYXJ0IGxhbmd1YWdlIGNsYXNzLgogKi8KYWJzdHJhY3QgY2xhc3MgQ2xhc3NNaXJyb3IgaW1wbGVtZW50cyBUeXBlTWlycm9yLCBPYmplY3RNaXJyb3IgewogIC8qKgogICAqIEEgbWlycm9yIG9uIHRoZSBzdXBlcmNsYXNzIG9uIHRoZSByZWZsZWN0ZWUuCiAgICoKICAgKiBJZiB0aGlzIHR5cGUgaXMgWzpPYmplY3Q6XSwgdGhlIHN1cGVyY2xhc3Mgd2lsbCBiZSBudWxsLgogICAqLwogIENsYXNzTWlycm9yIGdldCBzdXBlcmNsYXNzOwoKICAvKioKICAgKiBBIGxpc3Qgb2YgbWlycm9ycyBvbiB0aGUgc3VwZXJpbnRlcmZhY2VzIG9mIHRoZSByZWZsZWN0ZWUuCiAgICovCiAgTGlzdDxDbGFzc01pcnJvcj4gZ2V0IHN1cGVyaW50ZXJmYWNlczsKCiAgLyoqCiAgICogSXMgdGhlIHJlZmxlY3RlZSBhYnN0cmFjdD8KICAgKi8KICBib29sIGdldCBpc0Fic3RyYWN0OwoKICAvKioKICAgKiBJcyB0aGUgcmVmbGVjdGVlIGFuIGVudW0/CiAgICovCiAgYm9vbCBnZXQgaXNFbnVtOwoKICAvKioKICAgKiBSZXR1cm5zIGFuIGltbXV0YWJsZSBtYXAgb2YgdGhlIGRlY2xhcmF0aW9ucyBhY3R1YWxseSBnaXZlbiBpbiB0aGUgY2xhc3MKICAgKiBkZWNsYXJhdGlvbi4KICAgKgogICAqIFRoaXMgbWFwIGluY2x1ZGVzIGFsbCByZWd1bGFyIG1ldGhvZHMsIGdldHRlcnMsIHNldHRlcnMsIGZpZWxkcywKICAgKiBjb25zdHJ1Y3RvcnMgYW5kIHR5cGUgdmFyaWFibGVzIGFjdHVhbGx5IGRlY2xhcmVkIGluIHRoZSBjbGFzcy4gQm90aAogICAqIHN0YXRpYyBhbmQgaW5zdGFuY2UgbWVtYmVycyBhcmUgaW5jbHVkZWQsIGJ1dCBubyBpbmhlcml0ZWQgbWVtYmVycyBhcmUKICAgKiBpbmNsdWRlZC4gVGhlIG1hcCBpcyBrZXllZCBieSB0aGUgc2ltcGxlIG5hbWVzIG9mIHRoZSBkZWNsYXJhdGlvbnMuCiAgICoKICAgKiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgaW5oZXJpdGVkIG1lbWJlcnMuCiAgICovCiAgTWFwPFN5bWJvbCwgRGVjbGFyYXRpb25NaXJyb3I+IGdldCBkZWNsYXJhdGlvbnM7CgogIC8qKgogICAqIFJldHVybnMgYSBtYXAgb2YgdGhlIG1ldGhvZHMsIGdldHRlcnMgYW5kIHNldHRlcnMgb2YgYW4gaW5zdGFuY2Ugb2YgdGhlCiAgICogY2xhc3MuCiAgICoKICAgKiBUaGUgaW50ZW50IGlzIHRvIGNhcHR1cmUgdGhvc2UgbWVtYmVycyB0aGF0IGNvbnN0aXR1dGUgdGhlIEFQSSBvZiBhbgogICAqIGluc3RhbmNlLiBIZW5jZSBmaWVsZHMgYXJlIG5vdCBpbmNsdWRlZCwgYnV0IHRoZSBnZXR0ZXJzIGFuZCBzZXR0ZXJzCiAgICogaW1wbGljaXRseSBpbnRyb2R1Y2VkIGJ5IGZpZWxkcyBhcmUgaW5jbHVkZWQuIFRoZSBtYXAgaW5jbHVkZXMgbWV0aG9kcywKICAgKiBnZXR0ZXJzIGFuZCBzZXR0ZXJzIHRoYXQgYXJlIGluaGVyaXRlZCBhcyB3ZWxsIGFzIHRob3NlIGludHJvZHVjZWQgYnkgdGhlCiAgICogY2xhc3MgaXRzZWxmLgogICAqCiAgICogVGhlIG1hcCBpcyBrZXllZCBieSB0aGUgc2ltcGxlIG5hbWVzIG9mIHRoZSBtZW1iZXJzLgogICAqLwogIE1hcDxTeW1ib2wsIE1ldGhvZE1pcnJvcj4gZ2V0IGluc3RhbmNlTWVtYmVyczsKCiAgLyoqCiAgICogUmV0dXJucyBhIG1hcCBvZiB0aGUgc3RhdGljIG1ldGhvZHMsIGdldHRlcnMgYW5kIHNldHRlcnMgb2YgdGhlIGNsYXNzLgogICAqCiAgICogVGhlIGludGVudCBpcyB0byBjYXB0dXJlIHRob3NlIG1lbWJlcnMgdGhhdCBjb25zdGl0dXRlIHRoZSBBUEkgb2YgYSBjbGFzcy4KICAgKiBIZW5jZSBmaWVsZHMgYXJlIG5vdCBpbmNsdWRlZCwgYnV0IHRoZSBnZXR0ZXJzIGFuZCBzZXR0ZXJzIGltcGxpY2l0bHkKICAgKiBpbnRyb2R1Y2VkIGJ5IGZpZWxkcyBhcmUgaW5jbHVkZWQuCiAgICoKICAgKiBUaGUgbWFwIGlzIGtleWVkIGJ5IHRoZSBzaW1wbGUgbmFtZXMgb2YgdGhlIG1lbWJlcnMuCiAgICovCiAgTWFwPFN5bWJvbCwgTWV0aG9kTWlycm9yPiBnZXQgc3RhdGljTWVtYmVyczsKCiAgLyoqCiAgICogVGhlIG1peGluIG9mIHRoaXMgY2xhc3MuCiAgICoKICAgKiBJZiB0aGlzIGNsYXNzIGlzIHRoZSByZXN1bHQgb2YgYSBtaXhpbiBhcHBsaWNhdGlvbiBvZiB0aGUgZm9ybSBTIHdpdGggTSwKICAgKiByZXR1cm5zIGEgY2xhc3MgbWlycm9yIG9uIE0uIE90aGVyd2lzZSByZXR1cm5zIGEgY2xhc3MgbWlycm9yIG9uCiAgICogdGhlIHJlZmxlY3RlZS4KICAgKi8KICBDbGFzc01pcnJvciBnZXQgbWl4aW47CgogIC8qKgogICAqIEludm9rZXMgdGhlIG5hbWVkIGNvbnN0cnVjdG9yIGFuZCByZXR1cm5zIGEgbWlycm9yIG9uIHRoZSByZXN1bHQuCiAgICoKICAgKiBMZXQgKmMqIGJlIHRoZSBjbGFzcyByZWZsZWN0ZWQgYnkgdGhpcyBtaXJyb3IsCiAgICogbGV0ICphMSwgLi4uLCBhbiogYmUgdGhlIGVsZW1lbnRzIG9mIFtwb3NpdGlvbmFsQXJndW1lbnRzXSwKICAgKiBsZXQgKmsxLCAuLi4sIGttKiBiZSB0aGUgaWRlbnRpZmllcnMgZGVub3RlZCBieSB0aGUgZWxlbWVudHMgb2YKICAgKiBbbmFtZWRBcmd1bWVudHMua2V5c10sCiAgICogYW5kIGxldCAqdjEsIC4uLiwgdm0qIGJlIHRoZSBlbGVtZW50cyBvZiBbbmFtZWRBcmd1bWVudHMudmFsdWVzXS4KICAgKgogICAqIElmIFtjb25zdHJ1Y3Rvck5hbWVdIHdhcyBjcmVhdGVkIGZyb20gdGhlIGVtcHR5IHN0cmluZywgdGhlbiB0aGlzIG1ldGhvZAogICAqIHdpbGwgZXhlY3V0ZSB0aGUgaW5zdGFuY2UgY3JlYXRpb24gZXhwcmVzc2lvbgogICAqICpuZXcgYyhhMSwgLi4uLCBhbiwgazE6IHYxLCAuLi4sIGttOiB2bSkqIGluIGEgc2NvcGUgdGhhdCBoYXMgYWNjZXNzIHRvCiAgICogdGhlIHByaXZhdGUgbWVtYmVycyBvZiAqYyouCiAgICoKICAgKiBPdGhlcndpc2UsIGxldCAqZiogYmUgdGhlIHNpbXBsZSBuYW1lIG9mIHRoZSBjb25zdHJ1Y3RvciBkZW5vdGVkIGJ5CiAgICogW2NvbnN0cnVjdG9yTmFtZV0uIFRoZW4gdGhpcyBtZXRob2Qgd2lsbCBleGVjdXRlIHRoZSBpbnN0YW5jZSBjcmVhdGlvbgogICAqIGV4cHJlc3Npb24gKm5ldyBjLmYoYTEsIC4uLiwgYW4sIGsxOiB2MSwgLi4uLCBrbTogdm0pKiBpbiBhIHNjb3BlIHRoYXQgaGFzCiAgICogYWNjZXNzIHRvIHRoZSBwcml2YXRlIG1lbWJlcnMgb2YgKmMqLgogICAqCiAgICogSW4gZWl0aGVyIGNhc2U6CiAgICoKICAgKiAqIElmIHRoZSBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBhIHJlc3VsdCAqciosIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlCiAgICogICByZXN1bHQgb2YgY2FsbGluZyBbcmVmbGVjdF1cKCpyKlwpLgogICAqICogSWYgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbiBjYXVzZXMgYSBjb21waWxhdGlvbiBlcnJvciwgdGhlIGVmZmVjdCBpcwogICAqICAgdGhlIHNhbWUgYXMgaWYgYSBub24tcmVmbGVjdGl2ZSBjb21waWxhdGlvbiBlcnJvciBoYWQgYmVlbiBlbmNvdW50ZXJlZC4KICAgKiAqIElmIGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24gdGhyb3dzIGFuIGV4Y2VwdGlvbiAqZSogKHRoYXQgaXQgZG9lcyBub3QKICAgKiAgIGNhdGNoKSwgdGhpcyBtZXRob2QgdGhyb3dzICplKi4KICAgKi8KICBJbnN0YW5jZU1pcnJvciBuZXdJbnN0YW5jZSgKICAgICAgU3ltYm9sIGNvbnN0cnVjdG9yTmFtZSwgTGlzdDxkeW5hbWljPiBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBbTWFwPFN5bWJvbCwgZHluYW1pYz4gbmFtZWRBcmd1bWVudHNdKTsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIG1pcnJvciBpcyBlcXVhbCB0byBbb3RoZXJdLgogICAqCiAgICogVGhlIGVxdWFsaXR5IGhvbGRzIGlmIGFuZCBvbmx5IGlmCiAgICoKICAgKiAxLiBbb3RoZXJdIGlzIGEgbWlycm9yIG9mIHRoZSBzYW1lIGtpbmQsIGFuZAogICAqIDIuIFRoaXMgbWlycm9yIGFuZCBbb3RoZXJdIHJlZmxlY3QgdGhlIHNhbWUgY2xhc3MuCiAgICoKICAgKiBOb3RlIHRoYXQgaWYgdGhlIHJlZmxlY3RlZCBjbGFzcyBpcyBhbiBpbnZvY2F0aW9uIG9mIGEgZ2VuZXJpYyBjbGFzcywgMi4KICAgKiBpbXBsaWVzIHRoYXQgdGhlIHJlZmxlY3RlZCBjbGFzcyBhbmQgW290aGVyXSBoYXZlIGVxdWFsIHR5cGUgYXJndW1lbnRzLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGNsYXNzIGRlbm90ZWQgYnkgdGhlIHJlY2VpdmVyIGlzIGEgc3ViY2xhc3Mgb2YgdGhlCiAgICogY2xhc3MgZGVub3RlZCBieSB0aGUgYXJndW1lbnQuCiAgICoKICAgKiBOb3RlIHRoYXQgdGhlIHN1YmNsYXNzIHJlbGF0aW9uc2hpcCBpcyByZWZsZXhpdmUuCiAgICovCiAgYm9vbCBpc1N1YmNsYXNzT2YoQ2xhc3NNaXJyb3Igb3RoZXIpOwp9CgovKioKICogQSBbRnVuY3Rpb25UeXBlTWlycm9yXSByZXByZXNlbnRzIHRoZSB0eXBlIG9mIGEgZnVuY3Rpb24gaW4gdGhlCiAqIERhcnQgbGFuZ3VhZ2UuCiAqLwphYnN0cmFjdCBjbGFzcyBGdW5jdGlvblR5cGVNaXJyb3IgaW1wbGVtZW50cyBDbGFzc01pcnJvciB7CiAgLyoqCiAgICogUmV0dXJucyB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIHJlZmxlY3RlZS4KICAgKi8KICBUeXBlTWlycm9yIGdldCByZXR1cm5UeXBlOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgcGFyYW1ldGVyIHR5cGVzIG9mIHRoZSByZWZsZWN0ZWUuCiAgICovCiAgTGlzdDxQYXJhbWV0ZXJNaXJyb3I+IGdldCBwYXJhbWV0ZXJzOwoKICAvKioKICAgKiBBIG1pcnJvciBvbiB0aGUgWzpjYWxsOl0gbWV0aG9kIGZvciB0aGUgcmVmbGVjdGVlLgogICAqLwogIC8vIFRoaXMgaXMgb25seSBoZXJlIGJlY2F1c2UgaW4gdGhlIHBhc3QgdGhlIFZNIGRpZCBub3QgaW1wbGVtZW50IGEgY2FsbAogIC8vIG1ldGhvZCBvbiBjbG9zdXJlcy4KICBNZXRob2RNaXJyb3IgZ2V0IGNhbGxNZXRob2Q7Cn0KCi8qKgogKiBBIFtUeXBlVmFyaWFibGVNaXJyb3JdIHJlcHJlc2VudHMgYSB0eXBlIHBhcmFtZXRlciBvZiBhIGdlbmVyaWMgdHlwZS4KICovCmFic3RyYWN0IGNsYXNzIFR5cGVWYXJpYWJsZU1pcnJvciBleHRlbmRzIFR5cGVNaXJyb3IgewogIC8qKgogICAqIEEgbWlycm9yIG9uIHRoZSB0eXBlIHRoYXQgaXMgdGhlIHVwcGVyIGJvdW5kIG9mIHRoaXMgdHlwZSB2YXJpYWJsZS4KICAgKi8KICBUeXBlTWlycm9yIGdldCB1cHBlckJvdW5kOwoKICAvKioKICAgKiBJcyB0aGUgcmVmbGVjdGVlIHN0YXRpYz8KICAgKgogICAqIEZvciB0aGUgcHVycG9zZXMgb2YgdGhlIG1pcnJvcnMgbGlicmFyeSwgdHlwZSB2YXJpYWJsZXMgYXJlIGNvbnNpZGVyZWQKICAgKiBub24tc3RhdGljLgogICAqLwogIGJvb2wgZ2V0IGlzU3RhdGljOwoKICAvKioKICAgKiBXaGV0aGVyIFtvdGhlcl0gaXMgYSBbVHlwZVZhcmlhYmxlTWlycm9yXSBvbiB0aGUgc2FtZSB0eXBlIHZhcmlhYmxlIGFzIHRoaXMKICAgKiBtaXJyb3IuCiAgICoKICAgKiBUaGUgZXF1YWxpdHkgaG9sZHMgaWYgYW5kIG9ubHkgaWYKICAgKgogICAqIDEuIFtvdGhlcl0gaXMgYSBtaXJyb3Igb2YgdGhlIHNhbWUga2luZCwgYW5kCiAgICogMi4gWzpzaW1wbGVOYW1lID09IG90aGVyLnNpbXBsZU5hbWU6XSBhbmQgWzpvd25lciA9PSBvdGhlci5vd25lcjpdLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpOwp9CgovKioKICogQSBbVHlwZWRlZk1pcnJvcl0gcmVwcmVzZW50cyBhIHR5cGVkZWYgaW4gYSBEYXJ0IGxhbmd1YWdlIHByb2dyYW0uCiAqLwphYnN0cmFjdCBjbGFzcyBUeXBlZGVmTWlycm9yIGltcGxlbWVudHMgVHlwZU1pcnJvciB7CiAgLyoqCiAgICogVGhlIGRlZmluaW5nIHR5cGUgZm9yIHRoaXMgdHlwZWRlZi4KICAgKgogICAqIElmIHRoZSB0eXBlIHJlZmVycmVkIHRvIGJ5IHRoZSByZWZsZWN0ZWUgaXMgYSBmdW5jdGlvbiB0eXBlICpGKiwgdGhlCiAgICogcmVzdWx0IHdpbGwgYmUgWzpGdW5jdGlvblR5cGVNaXJyb3I6XSByZWZsZWN0aW5nICpGKiB3aGljaCBpcyBhYnN0cmFjdAogICAqIGFuZCBoYXMgYW4gYWJzdHJhY3QgbWV0aG9kIFs6Y2FsbDpdIHdob3NlIHNpZ25hdHVyZSBjb3JyZXNwb25kcyB0byAqRiouCiAgICogRm9yIGluc3RhbmNlIFs6dm9pZCBmKGludCk6XSBpcyB0aGUgcmVmZXJlbnQgZm9yIFs6dHlwZWRlZiB2b2lkIGYoaW50KTpdLgogICAqLwogIEZ1bmN0aW9uVHlwZU1pcnJvciBnZXQgcmVmZXJlbnQ7Cn0KCi8qKgogKiBBIFtNZXRob2RNaXJyb3JdIHJlZmxlY3RzIGEgRGFydCBsYW5ndWFnZSBmdW5jdGlvbiwgbWV0aG9kLAogKiBjb25zdHJ1Y3RvciwgZ2V0dGVyLCBvciBzZXR0ZXIuCiAqLwphYnN0cmFjdCBjbGFzcyBNZXRob2RNaXJyb3IgaW1wbGVtZW50cyBEZWNsYXJhdGlvbk1pcnJvciB7CiAgLyoqCiAgICogQSBtaXJyb3Igb24gdGhlIHJldHVybiB0eXBlIGZvciB0aGUgcmVmbGVjdGVlLgogICAqLwogIFR5cGVNaXJyb3IgZ2V0IHJldHVyblR5cGU7CgogIC8qKgogICAqIFRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIHJlZmxlY3RlZSwgaWYgYXZhaWxhYmxlLiBPdGhlcndpc2UgbnVsbC4KICAgKi8KICBTdHJpbmcgZ2V0IHNvdXJjZTsKCiAgLyoqCiAgICogQSBsaXN0IG9mIG1pcnJvcnMgb24gdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSByZWZsZWN0ZWUuCiAgICovCiAgTGlzdDxQYXJhbWV0ZXJNaXJyb3I+IGdldCBwYXJhbWV0ZXJzOwoKICAvKioKICAgKiBBIGZ1bmN0aW9uIGlzIGNvbnNpZGVyZWQgbm9uLXN0YXRpYyBpZmYgaXQgaXMgcGVybWl0ZWQgdG8gcmVmZXIgdG8gJ3RoaXMnLgogICAqCiAgICogTm90ZSB0aGF0IGdlbmVyYXRpdmUgY29uc3RydWN0b3JzIGFyZSBjb25zaWRlcmVkIG5vbi1zdGF0aWMsIHdoZXJlYXMKICAgKiBmYWN0b3J5IGNvbnN0cnVjdG9ycyBhcmUgY29uc2lkZXJlZCBzdGF0aWMuCiAgICovCiAgYm9vbCBnZXQgaXNTdGF0aWM7CgogIC8qKgogICAqIElzIHRoZSByZWZsZWN0ZWUgYWJzdHJhY3Q/CiAgICovCiAgYm9vbCBnZXQgaXNBYnN0cmFjdDsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSByZWZsZWN0ZWUgaXMgc3ludGhldGljLCBhbmQgcmV0dXJucyBmYWxzZSBvdGhlcndpc2UuCiAgICoKICAgKiBBIHJlZmxlY3RlZSBpcyBzeW50aGV0aWMgaWYgaXQgaXMgYSBnZXR0ZXIgb3Igc2V0dGVyIGltcGxpY2l0bHkgaW50cm9kdWNlZAogICAqIGZvciBhIGZpZWxkIG9yIFR5cGUsIG9yIGlmIGl0IGlzIGEgY29uc3RydWN0b3IgdGhhdCB3YXMgaW1wbGljaXRseQogICAqIGludHJvZHVjZWQgYXMgYSBkZWZhdWx0IGNvbnN0cnVjdG9yIG9yIGFzIHBhcnQgb2YgYSBtaXhpbiBhcHBsaWNhdGlvbi4KICAgKi8KICBib29sIGdldCBpc1N5bnRoZXRpYzsKCiAgLyoqCiAgICogSXMgdGhlIHJlZmxlY3RlZSBhIHJlZ3VsYXIgZnVuY3Rpb24gb3IgbWV0aG9kPwogICAqCiAgICogQSBmdW5jdGlvbiBvciBtZXRob2QgaXMgcmVndWxhciBpZiBpdCBpcyBub3QgYSBnZXR0ZXIsIHNldHRlciwgb3IKICAgKiBjb25zdHJ1Y3Rvci4gIE5vdGUgdGhhdCBvcGVyYXRvcnMsIGJ5IHRoaXMgZGVmaW5pdGlvbiwgYXJlCiAgICogcmVndWxhciBtZXRob2RzLgogICAqLwogIGJvb2wgZ2V0IGlzUmVndWxhck1ldGhvZDsKCiAgLyoqCiAgICogSXMgdGhlIHJlZmxlY3RlZSBhbiBvcGVyYXRvcj8KICAgKi8KICBib29sIGdldCBpc09wZXJhdG9yOwoKICAvKioKICAgKiBJcyB0aGUgcmVmbGVjdGVlIGEgZ2V0dGVyPwogICAqLwogIGJvb2wgZ2V0IGlzR2V0dGVyOwoKICAvKioKICAgKiBJcyB0aGUgcmVmbGVjdGVlIGEgc2V0dGVyPwogICAqLwogIGJvb2wgZ2V0IGlzU2V0dGVyOwoKICAvKioKICAgKiBJcyB0aGUgcmVmbGVjdGVlIGEgY29uc3RydWN0b3I/CiAgICovCiAgYm9vbCBnZXQgaXNDb25zdHJ1Y3RvcjsKCiAgLyoqCiAgICogVGhlIGNvbnN0cnVjdG9yIG5hbWUgZm9yIG5hbWVkIGNvbnN0cnVjdG9ycyBhbmQgZmFjdG9yeSBtZXRob2RzLgogICAqCiAgICogRm9yIHVubmFtZWQgY29uc3RydWN0b3JzLCB0aGlzIGlzIHRoZSBlbXB0eSBzdHJpbmcuICBGb3IKICAgKiBub24tY29uc3RydWN0b3JzLCB0aGlzIGlzIHRoZSBlbXB0eSBzdHJpbmcuCiAgICoKICAgKiBGb3IgZXhhbXBsZSwgWzonYmFyJzpdIGlzIHRoZSBjb25zdHJ1Y3RvciBuYW1lIGZvciBjb25zdHJ1Y3RvcgogICAqIFs6Rm9vLmJhcjpdIG9mIHR5cGUgWzpGb286XS4KICAgKi8KICBTeW1ib2wgZ2V0IGNvbnN0cnVjdG9yTmFtZTsKCiAgLyoqCiAgICogSXMgdGhlIHJlZmxlY3RlZSBhIGNvbnN0IGNvbnN0cnVjdG9yPwogICAqLwogIGJvb2wgZ2V0IGlzQ29uc3RDb25zdHJ1Y3RvcjsKCiAgLyoqCiAgICogSXMgdGhlIHJlZmxlY3RlZSBhIGdlbmVyYXRpdmUgY29uc3RydWN0b3I/CiAgICovCiAgYm9vbCBnZXQgaXNHZW5lcmF0aXZlQ29uc3RydWN0b3I7CgogIC8qKgogICAqIElzIHRoZSByZWZsZWN0ZWUgYSByZWRpcmVjdGluZyBjb25zdHJ1Y3Rvcj8KICAgKi8KICBib29sIGdldCBpc1JlZGlyZWN0aW5nQ29uc3RydWN0b3I7CgogIC8qKgogICAqIElzIHRoZSByZWZsZWN0ZWUgYSBmYWN0b3J5IGNvbnN0cnVjdG9yPwogICAqLwogIGJvb2wgZ2V0IGlzRmFjdG9yeUNvbnN0cnVjdG9yOwoKICAvKioKICAgKiBJcyB0aGUgcmVmbGVjdGVlIGFuIGV4dGVuc2lvbiBtZXRob2Q/CiAgICovCiAgYm9vbCBnZXQgaXNFeHRlbnNpb25NZW1iZXI7CgogIC8qKgogICAqIFdoZXRoZXIgdGhpcyBtaXJyb3IgaXMgZXF1YWwgdG8gW290aGVyXS4KICAgKgogICAqIFRoZSBlcXVhbGl0eSBob2xkcyBpZiBhbmQgb25seSBpZgogICAqCiAgICogMS4gW290aGVyXSBpcyBhIG1pcnJvciBvZiB0aGUgc2FtZSBraW5kLCBhbmQKICAgKiAyLiBbOnNpbXBsZU5hbWUgPT0gb3RoZXIuc2ltcGxlTmFtZTpdIGFuZCBbOm93bmVyID09IG90aGVyLm93bmVyOl0uCiAgICovCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcik7Cn0KCi8qKgogKiBBIFtWYXJpYWJsZU1pcnJvcl0gcmVmbGVjdHMgYSBEYXJ0IGxhbmd1YWdlIHZhcmlhYmxlIGRlY2xhcmF0aW9uLgogKi8KYWJzdHJhY3QgY2xhc3MgVmFyaWFibGVNaXJyb3IgaW1wbGVtZW50cyBEZWNsYXJhdGlvbk1pcnJvciB7CiAgLyoqCiAgICogUmV0dXJucyBhIG1pcnJvciBvbiB0aGUgdHlwZSBvZiB0aGUgcmVmbGVjdGVlLgogICAqLwogIFR5cGVNaXJyb3IgZ2V0IHR5cGU7CgogIC8qKgogICAqIFJldHVybnMgWzp0cnVlOl0gaWYgdGhlIHJlZmxlY3RlZSBpcyBhIHN0YXRpYyB2YXJpYWJsZS4KICAgKiBPdGhlcndpc2UgcmV0dXJucyBbOmZhbHNlOl0uCiAgICoKICAgKiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoZSBtaXJyb3IgbGlicmFyeSwgdG9wLWxldmVsIHZhcmlhYmxlcyBhcmUKICAgKiBpbXBsaWNpdGx5IGRlY2xhcmVkIHN0YXRpYy4KICAgKi8KICBib29sIGdldCBpc1N0YXRpYzsKCiAgLyoqCiAgICogUmV0dXJucyBbOnRydWU6XSBpZiB0aGUgcmVmbGVjdGVlIGlzIGEgZmluYWwgdmFyaWFibGUuCiAgICogT3RoZXJ3aXNlIHJldHVybnMgWzpmYWxzZTpdLgogICAqLwogIGJvb2wgZ2V0IGlzRmluYWw7CgogIC8qKgogICAqIFJldHVybnMgWzp0cnVlOl0gaWYgdGhlIHJlZmxlY3RlZSBpcyBkZWNsYXJlZCBbOmNvbnN0Ol0uCiAgICogT3RoZXJ3aXNlIHJldHVybnMgWzpmYWxzZTpdLgogICAqLwogIGJvb2wgZ2V0IGlzQ29uc3Q7CgogIC8qKgogICAqIElzIHRoZSByZWZsZWN0ZWUgYW4gZXh0ZW5zaW9uIG1lbWJlcj8KICAgKi8KICBib29sIGdldCBpc0V4dGVuc2lvbk1lbWJlcjsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIG1pcnJvciBpcyBlcXVhbCB0byBbb3RoZXJdLgogICAqCiAgICogVGhlIGVxdWFsaXR5IGhvbGRzIGlmIGFuZCBvbmx5IGlmCiAgICoKICAgKiAxLiBbb3RoZXJdIGlzIGEgbWlycm9yIG9mIHRoZSBzYW1lIGtpbmQsIGFuZAogICAqIDIuIFs6c2ltcGxlTmFtZSA9PSBvdGhlci5zaW1wbGVOYW1lOl0gYW5kIFs6b3duZXIgPT0gb3RoZXIub3duZXI6XS4KICAgKi8KICBib29sIG9wZXJhdG9yID09KG90aGVyKTsKfQoKLyoqCiAqIEEgW1BhcmFtZXRlck1pcnJvcl0gcmVmbGVjdHMgYSBEYXJ0IGZvcm1hbCBwYXJhbWV0ZXIgZGVjbGFyYXRpb24uCiAqLwphYnN0cmFjdCBjbGFzcyBQYXJhbWV0ZXJNaXJyb3IgaW1wbGVtZW50cyBWYXJpYWJsZU1pcnJvciB7CiAgLyoqCiAgICogQSBtaXJyb3Igb24gdGhlIHR5cGUgb2YgdGhpcyBwYXJhbWV0ZXIuCiAgICovCiAgVHlwZU1pcnJvciBnZXQgdHlwZTsKCiAgLyoqCiAgICogUmV0dXJucyBbOnRydWU6XSBpZiB0aGUgcmVmbGVjdGVlIGlzIGFuIG9wdGlvbmFsIHBhcmFtZXRlci4KICAgKiBPdGhlcndpc2UgcmV0dXJucyBbOmZhbHNlOl0uCiAgICovCiAgYm9vbCBnZXQgaXNPcHRpb25hbDsKCiAgLyoqCiAgICogUmV0dXJucyBbOnRydWU6XSBpZiB0aGUgcmVmbGVjdGVlIGlzIGEgbmFtZWQgcGFyYW1ldGVyLgogICAqIE90aGVyd2lzZSByZXR1cm5zIFs6ZmFsc2U6XS4KICAgKi8KICBib29sIGdldCBpc05hbWVkOwoKICAvKioKICAgKiBSZXR1cm5zIFs6dHJ1ZTpdIGlmIHRoZSByZWZsZWN0ZWUgaGFzIGV4cGxpY2l0bHkgZGVjbGFyZWQgYSBkZWZhdWx0IHZhbHVlLgogICAqIE90aGVyd2lzZSByZXR1cm5zIFs6ZmFsc2U6XS4KICAgKi8KICBib29sIGdldCBoYXNEZWZhdWx0VmFsdWU7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYW4gb3B0aW9uYWwgcGFyYW1ldGVyLgogICAqCiAgICogUmV0dXJucyBhbiBbSW5zdGFuY2VNaXJyb3JdIG9uIHRoZSAoY29tcGlsZS10aW1lIGNvbnN0YW50KQogICAqIGRlZmF1bHQgdmFsdWUgZm9yIGFuIG9wdGlvbmFsIHBhcmFtZXRlci4KICAgKiBJZiBubyBkZWZhdWx0IHZhbHVlIGlzIGRlY2xhcmVkLCBpdCBkZWZhdWx0cyB0byBgbnVsbGAKICAgKiBhbmQgYSBtaXJyb3Igb2YgYG51bGxgIGlzIHJldHVybmVkLgogICAqCiAgICogUmV0dXJucyBgbnVsbGAgZm9yIGEgcmVxdWlyZWQgcGFyYW1ldGVyLgogICAqLwogIEluc3RhbmNlTWlycm9yIGdldCBkZWZhdWx0VmFsdWU7Cn0KCi8qKgogKiBBIFtTb3VyY2VMb2NhdGlvbl0gZGVzY3JpYmVzIHRoZSBzcGFuIG9mIGFuIGVudGl0eSBpbiBEYXJ0IHNvdXJjZSBjb2RlLgogKi8KYWJzdHJhY3QgY2xhc3MgU291cmNlTG9jYXRpb24gewogIC8qKgogICAqIFRoZSAxLWJhc2VkIGxpbmUgbnVtYmVyIGZvciB0aGlzIHNvdXJjZSBsb2NhdGlvbi4KICAgKgogICAqIEEgdmFsdWUgb2YgMCBtZWFucyB0aGF0IHRoZSBsaW5lIG51bWJlciBpcyB1bmtub3duLgogICAqLwogIGludCBnZXQgbGluZTsKCiAgLyoqCiAgICogVGhlIDEtYmFzZWQgY29sdW1uIG51bWJlciBmb3IgdGhpcyBzb3VyY2UgbG9jYXRpb24uCiAgICoKICAgKiBBIHZhbHVlIG9mIDAgbWVhbnMgdGhhdCB0aGUgY29sdW1uIG51bWJlciBpcyB1bmtub3duLgogICAqLwogIGludCBnZXQgY29sdW1uOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBVUkkgd2hlcmUgdGhlIHNvdXJjZSBvcmlnaW5hdGVkLgogICAqLwogIFVyaSBnZXQgc291cmNlVXJpOwp9CgovKioKICogQ2xhc3MgdXNlZCBmb3IgZW5jb2RpbmcgY29tbWVudHMgYXMgbWV0YWRhdGEgYW5ub3RhdGlvbnMuCiAqLwpjbGFzcyBDb21tZW50IHsKICAvKioKICAgKiBUaGUgY29tbWVudCB0ZXh0IGFzIHdyaXR0ZW4gaW4gdGhlIHNvdXJjZSB0ZXh0LgogICAqLwogIGZpbmFsIFN0cmluZyB0ZXh0OwoKICAvKioKICAgKiBUaGUgY29tbWVudCB0ZXh0IHdpdGhvdXQgdGhlIHN0YXJ0LCBlbmQsIGFuZCBwYWRkaW5nIHRleHQuCiAgICoKICAgKiBGb3IgZXhhbXBsZSwgaWYgW3RleHRdIGlzIFs6IC8qKiBDb21tZW50IHRleHQuICovIDpdIHRoZW4gdGhlIFt0cmltbWVkVGV4dF0KICAgKiBpcyBbOiBDb21tZW50IHRleHQuIDpdLgogICAqLwogIGZpbmFsIFN0cmluZyB0cmltbWVkVGV4dDsKCiAgLyoqCiAgICogSXMgWzp0cnVlOl0gaWYgdGhpcyBjb21tZW50IGlzIGEgZG9jdW1lbnRhdGlvbiBjb21tZW50LgogICAqCiAgICogVGhhdCBpcywgdGhhdCB0aGUgY29tbWVudCBpcyBlaXRoZXIgZW5jbG9zZWQgaW4gWzogLyoqIC4uLiAqLyA6XSBvciBzdGFydHMKICAgKiB3aXRoIFs6IC8vLyA6XS4KICAgKi8KICBmaW5hbCBib29sIGlzRG9jQ29tbWVudDsKCiAgY29uc3QgQ29tbWVudCh0aGlzLnRleHQsIHRoaXMudHJpbW1lZFRleHQsIHRoaXMuaXNEb2NDb21tZW50KTsKfQoKLyoqCiAqIEFubm90YXRpb24gZGVzY3JpYmluZyBob3cgImRhcnQ6bWlycm9ycyIgaXMgdXNlZCAoRVhQRVJJTUVOVEFMKS4KICoKICogV2hlbiB1c2VkIGFzIG1ldGFkYXRhIG9uIGFuIGltcG9ydCBvZiAiZGFydDptaXJyb3JzIiBpbiBsaWJyYXJ5ICpMKiwgdGhpcwogKiBjbGFzcyBkZXNjcmliZXMgaG93ICJkYXJ0Om1pcnJvcnMiIGlzIHVzZWQgYnkgbGlicmFyeSAqTCogdW5sZXNzIG92ZXJyaWRkZW4uCiAqIFNlZSBbb3ZlcnJpZGVdLgogKgogKiBUaGUgZm9sbG93aW5nIHRleHQgaXMgbm9uLW5vcm1hdGl2ZToKICoKICogSW4gc29tZSBzY2VuYXJpb3MsIGZvciBleGFtcGxlLCB3aGVuIG1pbmlmeWluZyBEYXJ0IGNvZGUsIG9yIHdoZW4gZ2VuZXJhdGluZwogKiBKYXZhU2NyaXB0IGNvZGUgZnJvbSBhIERhcnQgcHJvZ3JhbSwgdGhlIHNpemUgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZSBvdXRwdXQKICogY2FuIHN1ZmZlciBmcm9tIHVzZSBvZiByZWZsZWN0aW9uLiAgSW4gdGhvc2UgY2FzZXMsIHRlbGxpbmcgdGhlIGNvbXBpbGVyCiAqIHdoYXQgaXMgdXNlZCwgY2FuIGhhdmUgYSBzaWduaWZpY2FudCBpbXBhY3QuCiAqCiAqIEV4YW1wbGUgdXNhZ2U6CiAqCiAqICAgICBATWlycm9yc1VzZWQoc3ltYm9sczogJ2ZvbycpCiAqICAgICBpbXBvcnQgJ2RhcnQ6bWlycm9ycyc7CiAqCiAqICAgICBjbGFzcyBGb28gewogKiAgICAgICBub1N1Y2hNZXRob2QoSW52b2NhdGlvbiBpbnZvY2F0aW9uKSB7CiAqICAgICAgICAgcHJpbnQoTWlycm9yU3lzdGVtLmdldE5hbWUoaW52b2NhdGlvbi5tZW1iZXJOYW1lKSk7CiAqICAgICAgIH0KICogICAgIH0KICoKICogICAgIG1haW4oKSB7CiAqICAgICAgIG5ldyBGb28oKS5mb28oKTsgLy8gUHJpbnRzICJmb28iLgogKiAgICAgICBuZXcgRm9vKCkuYmFyKCk7IC8vIE1pZ2h0IHByaW50IGFuIGFyYml0cmFyeSAobWFuZ2xlZCkgbmFtZSwgImJhciIuCiAqICAgICB9CiAqCiAqIEZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBbTWlycm9yc1VzZWRdIGNvbnN0cnVjdG9yCiAqIHNlZSB0aGUgY29tbWVudHMgZm9yIFtzeW1ib2xzXSwgW3RhcmdldHNdLCBbbWV0YVRhcmdldHNdIGFuZCBbb3ZlcnJpZGVdLgogKgogKiBBbiBpbXBvcnQgb2YgYGRhcnQ6bWlycm9yc2AgbWF5IGhhdmUgbXVsdGlwbGUgW01pcnJvcnNVc2VkXSBhbm5vdGF0aW9ucy4gVGhpcwogKiBpcyBwYXJ0aWN1bGFybHkgaGVscGZ1bCB0byBzcGVjaWZ5IG92ZXJyaWRlcyBmb3Igc3BlY2lmaWMgbGlicmFyaWVzLiBGb3IKICogZXhhbXBsZToKICoKICogICAgIEBNaXJyb3JzVXNlZCh0YXJnZXRzOiAnZm9vLkJhcicsIG92ZXJyaWRlOiAnZm9vJykKICogICAgIEBNaXJyb3JzVXNlZCh0YXJnZXRzOiAnQmFyJykKICogICAgIGltcG9ydCAnZGFydDptaXJyb3JzJzsKICoKICogd2lsbCBlbnN1cmUgdGhhdCB0aGUgdGFyZ2V0IGBCYXJgIGZyb20gdGhlIGN1cnJlbnQgbGlicmFyeSBhbmQgZnJvbSBsaWJyYXJ5CiAqIGBmb29gIGlzIGF2YWlsYWJsZSBmb3IgcmVmbGVjdGlvbi4gU2VlIGFsc28gW292ZXJyaWRlXS4KICovCkBEZXByZWNhdGVkKCJObyBsb25nZXIgaGFzIGFueSBlZmZlY3QuIFdpbGwgYmUgcmVtb3ZlZCBpbiBhIGxhdGVyIHJlbGVhc2UuIikKY2xhc3MgTWlycm9yc1VzZWQgewogIC8vIE5vdGU6IHRoZSBmaWVsZHMgb2YgdGhpcyBjbGFzcyBhcmUgdW50eXBlZC4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgbW9zdAogIC8vIGNvbnZlbmllbnQgd2F5IHRvIHNwZWNpZnkgc3ltYm9scyB0b2RheSBpcyB1c2luZyBhIHNpbmdsZSBzdHJpbmcuIEluCiAgLy8gc29tZSBjYXNlcywgYSBjb25zdCBsaXN0IG9mIGNsYXNzZXMgbWlnaHQgYmUgY29udmVuaWVudC4gU29tZQogIC8vIG1pZ2h0IHByZWZlciB0byB1c2UgYSBjb25zdCBsaXN0IG9mIHN5bWJvbHMuCgogIC8qKgogICAqIFRoZSBsaXN0IG9mIHN0cmluZ3MgcGFzc2VkIHRvIG5ldyBbU3ltYm9sXSwgYW5kIHN5bWJvbHMgdGhhdCBtaWdodCBiZQogICAqIHBhc3NlZCB0byBbTWlycm9yU3lzdGVtLmdldE5hbWVdLgogICAqCiAgICogQ29tYmluZWQgd2l0aCB0aGUgbmFtZXMgb2YgW3RhcmdldHNdLCBbbWV0YVRhcmdldHNdIGFuZCB0aGVpciBtZW1iZXJzLAogICAqIHRoaXMgZm9ybXMgdGhlIGNvbXBsZXRlIGxpc3Qgb2Ygc3RyaW5ncyBwYXNzZWQgdG8gbmV3IFtTeW1ib2xdLCBhbmQKICAgKiBzeW1ib2xzIHRoYXQgbWlnaHQgYmUgcGFzc2VkIHRvIFtNaXJyb3JTeXN0ZW0uZ2V0TmFtZV0gYnkgdGhlIGxpYnJhcnkgdG8KICAgKiB3aGljaCB0aGlzIG1ldGFkYXRhIGFwcGxpZXMuCiAgICoKICAgKiBUaGUgZm9sbG93aW5nIHRleHQgaXMgbm9uLW5vcm1hdGl2ZToKICAgKgogICAqIERhcnQyanMgY3VycmVudGx5IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZm9ybWF0cyB0byBzcGVjaWZ5IHN5bWJvbHM6CiAgICoKICAgKiAqIEEgY29uc3RhbnQgW0xpc3RdIG9mIFtTdHJpbmddIGNvbnN0YW50cyByZXByZXNlbnRpbmcgc3ltYm9sIG5hbWVzLAogICAqICAgZS5nLiwgYGNvbnN0IFsnZm9vJywgJ2JhciddYC4KICAgKiAqIEEgc2luZ2xlIFtTdHJpbmddIGNvbnN0YW50IHdob3NlIHZhbHVlIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YKICAgKiAgIHN5bWJvbCBuYW1lcywgZS5nLiwgYCJmb28sIGJhciJgLgogICAqCiAgICogU3BlY2lmeWluZyB0aGUgYHN5bWJvbHNgIGZpZWxkIHR1cm5zIG9mZiB0aGUgZm9sbG93aW5nIHdhcm5pbmdzIGVtaXR0ZWQgYnkKICAgKiBkYXJ0MmpzOgogICAqCiAgICogKiBVc2luZyAiTWlycm9yU3lzdGVtLmdldE5hbWUiIG1heSByZXN1bHQgaW4gbGFyZ2VyIG91dHB1dC4KICAgKiAqIFVzaW5nICJuZXcgU3ltYm9sIiBtYXkgcmVzdWx0IGluIGxhcmdlciBvdXRwdXQuCiAgICoKICAgKiBGb3IgZXhhbXBsZSwgaWYgeW91J3JlIHVzaW5nIFtub1N1Y2hNZXRob2RdIHRvIGludGVyYWN0IHdpdGggYSBkYXRhYmFzZSwKICAgKiBleHRyYWN0IGFsbCB0aGUgcG9zc2libGUgY29sdW1uIG5hbWVzIGFuZCBpbmNsdWRlIHRoZW0gaW4gdGhpcyBsaXN0LgogICAqIFNpbWlsYXJseSwgaWYgeW91J3JlIHVzaW5nIFtub1N1Y2hNZXRob2RdIHRvIGludGVyYWN0IHdpdGggYW5vdGhlcgogICAqIGxhbmd1YWdlIChKYXZhU2NyaXB0LCBmb3IgZXhhbXBsZSkgZXh0cmFjdCBhbGwgdGhlIGlkZW50aWZpZXJzIGZyb20gdGhlCiAgICogQVBJIHlvdSB1c2UgYW5kIGluY2x1ZGUgdGhlbSBpbiB0aGlzIGxpc3QuCiAgICoKICAgKiBOb3RlIHRoYXQgc3BlY2lmeWluZyBhIHN5bWJvbCBvbmx5IGVuc3VyZXMgdGhhdCB0aGUgc3ltYm9sIHdpbGwgYmUKICAgKiBhdmFpbGFibGUgdW5kZXIgdGhhdCBuYW1lIGF0IHJ1bnRpbWUuIEl0IGRvZXMgbm90IG1hcmsgdGFyZ2V0cyB3aXRoCiAgICogdGhhdCBuYW1lIGFzIGF2YWlsYWJsZSBmb3IgcmVmbGVjdGlvbi4gU2VlIFt0YXJnZXRzXSBhbmQgW21ldGFUYXJnZXRzXQogICAqIGZvciB0aGF0IHB1cnBvc2UuCiAgICovCiAgZmluYWwgc3ltYm9sczsKCiAgLyoqCiAgICogQSBsaXN0IG9mIHJlZmxlY3RpdmUgdGFyZ2V0cy4KICAgKgogICAqIENvbWJpbmVkIHdpdGggW21ldGFUYXJnZXRzXSwgdGhpcyBwcm92aWRlcyB0aGUgY29tcGxldGUgbGlzdCBvZiByZWZsZWN0aXZlCiAgICogdGFyZ2V0cyB1c2VkIGJ5IHRoZSBsaWJyYXJ5IHRvIHdoaWNoIHRoaXMgbWV0YWRhdGEgYXBwbGllcy4KICAgKgogICAqIFRoZSBmb2xsb3dpbmcgdGV4dCBpcyBub24tbm9ybWF0aXZlOgogICAqCiAgICogRm9yIG5vdywgdGhlcmUgaXMgbm8gZm9ybWFsIGRlc2NyaXB0aW9uIG9mIHdoYXQgYSByZWZsZWN0aXZlIHRhcmdldCBpcy4KICAgKiBJbmZvcm1hbGx5LCBhIHRhcmdldCBpcyBhIGxpYnJhcnksIGEgY2xhc3MsIGEgbWV0aG9kIG9yIGEgZmllbGQuCiAgICoKICAgKiBEYXJ0MmpzIGN1cnJlbnRseSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGZvcm1hdHMgdG8gc3BlY2lmeSB0YXJnZXRzOgogICAqCiAgICogKiBBIGNvbnN0YW50IFtMaXN0XSBjb250YWluaW5nIFtTdHJpbmddIGNvbnN0YW50cyByZXByZXNlbnRpbmcgKHF1YWxpZmllZCkKICAgKiAgIG5hbWVzIG9mIHRhcmdldHMgYW5kIERhcnQgdHlwZXMuCiAgICogKiBBIHNpbmdsZSBbU3RyaW5nXSBjb25zdGFudCB3aG9zZSB2YWx1ZSBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mCiAgICogICAocXVhbGlmaWVkKSBuYW1lcy4KICAgKiAqIEEgc2luZ2xlIERhcnQgdHlwZS4KICAgKgogICAqIEEgKHF1YWxpZmllZCkgbmFtZSBpcyByZXNvbHZlZCB0byBhIHRhcmdldCBhcyBmb2xsb3dzOgogICAqCiAgICogMS4gSWYgdGhlIHF1YWxpZmllZCBuYW1lIG1hdGNoZXMgYSBsaWJyYXJ5IG5hbWUsIHRoZSBtYXRjaGluZyBsaWJyYXJ5IGlzCiAgICogICAgdGhlIHRhcmdldC4KICAgKiAyLiBFbHNlLCBmaW5kIHRoZSBsb25nZXN0IHByZWZpeCBvZiB0aGUgbmFtZSBzdWNoIHRoYXQgdGhlIHByZWZpeCBlbmRzCiAgICogICAganVzdCBiZWZvcmUgYSBgLmAgYW5kIGlzIGEgbGlicmFyeSBuYW1lLgogICAqIDMuIFVzZSB0aGF0IGxpYnJhcnkgYXMgY3VycmVudCBzY29wZS4gSWYgbm8gbWF0Y2hpbmcgcHJlZml4IHdhcyBmb3VuZCwgdXNlCiAgICogICAgdGhlIGN1cnJlbnQgbGlicmFyeSwgaS5lLiwgdGhlIGxpYnJhcnkgd2hlcmUgdGhlIFtNaXJyb3JzVXNlZF0KICAgKiAgICBhbm5vdGF0aW9uIHdhcyBwbGFjZWQuCiAgICogNC4gU3BsaXQgdGhlIHJlbWFpbmluZyBzdWZmaXggKHRoZSBlbnRpcmUgbmFtZSBpZiBubyBsaWJyYXJ5IG5hbWUgd2FzCiAgICogICAgZm91bmQgaW4gc3RlcCAzKSBpbnRvIGEgbGlzdCBvZiBbU3RyaW5nXSB1c2luZyBgLmAgYXMgYQogICAqICAgIHNlcGFyYXRvci4KICAgKiA1LiBTZWxlY3QgYWxsIHRhcmdldHMgaW4gdGhlIGN1cnJlbnQgc2NvcGUgd2hvc2UgbmFtZSBtYXRjaGVzIGEgW1N0cmluZ10KICAgKiAgICBmcm9tIHRoZSBsaXN0LgogICAqCiAgICogRm9yIGV4YW1wbGU6CiAgICoKICAgKiAgICAgbGlicmFyeSBteS5saWJyYXJ5Lm9uZTsKICAgKgogICAqICAgICBjbGFzcyBBIHsKICAgKiAgICAgICB2YXIgYUZpZWxkOwogICAqICAgICB9CiAgICoKICAgKiAgICAgbGlicmFyeSBtYWluOwogICAqCiAgICogICAgIEBNaXJyb3JzVXNlZCh0YXJnZXRzOiAibXkubGlicmFyeS5vbmUuQS5hRmllbGQiKQogICAqICAgICBpbXBvcnQgImRhcnQ6bWlycm9ycyI7CiAgICoKICAgKiBUaGUgW01pcnJvcnNVc2VkXSBhbm5vdGF0aW9uIHNwZWNpZmllcyBgQWAgYW5kIGBhRmllbGRgIGZyb20gbGlicmFyeQogICAqIGBteS5saWJyYXJ5Lm9uZWAgYXMgdGFyZ2V0cy4gVGhpcyB3aWxsIG1hcmsgdGhlIGNsYXNzIGBBYCBhcyBhIHJlZmxlY3RpdmUKICAgKiB0YXJnZXQuIFRoZSB0YXJnZXQgc3BlY2lmaWNhdGlvbiBmb3IgYGFGaWVsZGAgaGFzIG5vIGVmZmVjdCwgYXMgdGhlcmUgaXMKICAgKiBubyB0YXJnZXQgaW4gYG15LmxpYnJhcnkub25lYCB3aXRoIHRoYXQgbmFtZS4KICAgKgogICAqIE5vdGUgdGhhdCBldmVyeXRoaW5nIHdpdGhpbiBhIHRhcmdldCBhbHNvIGlzIGF2YWlsYWJsZSBmb3IgcmVmbGVjdGlvbi4KICAgKiBTbywgaWYgYSBsaWJyYXJ5IGlzIHNwZWNpZmllZCBhcyB0YXJnZXQsIGFsbCBjbGFzc2VzIGluIHRoYXQgbGlicmFyeQogICAqIGJlY29tZSB0YXJnZXRzIGZvciByZWZsZWN0aW9uLiBMaWtld2lzZSwgaWYgYSBjbGFzcyBpcyBhIHRhcmdldCwgYWxsCiAgICogaXRzIG1ldGhvZHMgYW5kIGZpZWxkcyBiZWNvbWUgdGFyZ2V0cyBmb3IgcmVmbGVjdGlvbi4gQXMgYSBjb25zZXF1ZW5jZSwKICAgKiBgYUZpZWxkYCBpbiB0aGUgYWJvdmUgZXhhbXBsZSBpcyBhbHNvIGEgcmVmbGVjdGl2ZSB0YXJnZXQuCiAgICoKICAgKi8KICBmaW5hbCB0YXJnZXRzOwoKICAvKioKICAgKiBBIGxpc3Qgb2YgY2xhc3NlcyB0aGF0IHdoZW4gdXNlZCBhcyBtZXRhZGF0YSBpbmRpY2F0ZXMgYSByZWZsZWN0aXZlCiAgICogdGFyZ2V0LiBTZWUgYWxzbyBbdGFyZ2V0c10uCiAgICoKICAgKiBUaGUgZm9sbG93aW5nIHRleHQgaXMgbm9uLW5vcm1hdGl2ZToKICAgKgogICAqIFRoZSBmb3JtYXQgZm9yIHNwZWNpZnlpbmcgdGhlIGxpc3Qgb2YgY2xhc3NlcyBpcyB0aGUgc2FtZSBhcyB1c2VkIGZvcgogICAqIHNwZWNpZnlpbmcgW3RhcmdldHNdLiBIb3dldmVyLCBhcyBhIGxpYnJhcnkgY2Fubm90IGJlIHVzZWQgYXMgYSBtZXRhZGF0YQogICAqIGFubm90YXRpb24gaW4gRGFydCwgYWRkaW5nIGEgbGlicmFyeSB0byB0aGUgbGlzdCBvZiBbbWV0YVRhcmdldHNdIGhhcyBubwogICAqIGVmZmVjdC4gSW4gcGFydGljdWxhciwgYWRkaW5nIGEgbGlicmFyeSB0byBbbWV0YVRhcmdldHNdIGRvZXMgbm90IG1ha2UKICAgKiB0aGUgbGlicmFyeSdzIGNsYXNzZXMgdmFsaWQgbWV0YWRhdGEgYW5ub3RhdGlvbnMgdG8gZW5hYmxlIHJlZmxlY3Rpb24uCiAgICoKICAgKiBJZiBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHNwZWNpZmllZCBpbiBbbWV0YVRhcmdldHNdIGlzIHVzZWQgYXMKICAgKiBtZXRhZGF0YSBhbm5vdGF0aW9uIG9uIGEgbGlicmFyeSwgY2xhc3MsIGZpZWxkIG9yIG1ldGhvZCwgdGhhdCBsaWJyYXJ5LAogICAqIGNsYXNzLCBmaWVsZCBvciAgbWV0aG9kIGlzIGFkZGVkIHRvIHRoZSBzZXQgb2YgdGFyZ2V0cyBmb3IgcmVmbGVjdGlvbi4KICAgKgogICAqIEV4YW1wbGUgdXNhZ2U6CiAgICoKICAgKiAgICAgbGlicmFyeSBleGFtcGxlOwogICAqICAgICBATWlycm9yc1VzZWQobWV0YVRhcmdldHM6ICJleGFtcGxlLlJlZmxlY3RhYmxlIikKICAgKiAgICAgaW1wb3J0ICJkYXJ0Om1pcnJvcnMiOwogICAqCiAgICogICAgIGNsYXNzIFJlZmxlY3RhYmxlIHsKICAgKiAgICAgICBjb25zdCBSZWZsZWN0YWJsZSgpOwogICAqICAgICB9CiAgICoKICAgKiAgICAgY2xhc3MgRm9vIHsKICAgKiAgICAgICBAUmVmbGVjdGFibGUoKQogICAqICAgICAgIHJlZmxlY3RhYmxlTWV0aG9kKCkgeyAuLi4gfQogICAqCiAgICogICAgICAgbm9uUmVmbGVjdGFibGVNZXRob2QoKSB7IC4uLiB9CiAgICogICAgIH0KICAgKgogICAqIEluIHRoZSBhYm92ZSBleGFtcGxlLiBgcmVmbGVjdGFibGVNZXRob2RgIGlzIG1hcmtlZCBhcyByZWZsZWN0YWJsZSBieQogICAqIHVzaW5nIHRoZSBgUmVmbGVjdGFibGVgIGNsYXNzLCB3aGljaCBpbiB0dXJuIGlzIHNwZWNpZmllZCBpbiB0aGUKICAgKiBbbWV0YVRhcmdldHNdIGFubm90YXRpb24uCiAgICoKICAgKiBUaGUgbWV0aG9kIGBub25SZWZsZWN0YWJsZU1ldGhvZGAgbGFja3MgYSBtZXRhZGF0YSBhbm5vdGF0aW9uIGFuZCB0aHVzCiAgICogd2lsbCBub3QgYmUgcmVmbGVjdGFibGUgYXQgcnVudGltZS4KICAgKi8KICBmaW5hbCBtZXRhVGFyZ2V0czsKCiAgLyoqCiAgICogQSBsaXN0IG9mIGxpYnJhcnkgbmFtZXMgb3IgIioiLgogICAqCiAgICogV2hlbiB1c2VkIGFzIG1ldGFkYXRhIG9uIGFuIGltcG9ydCBvZiAiZGFydDptaXJyb3JzIiwgdGhpcyBtZXRhZGF0YSBkb2VzCiAgICogbm90IGFwcGx5IHRvIHRoZSBsaWJyYXJ5IGluIHdoaWNoIHRoZSBhbm5vdGF0aW9uIGlzIHVzZWQsIGJ1dCBpbnN0ZWFkCiAgICogYXBwbGllcyB0byB0aGUgb3RoZXIgbGlicmFyaWVzIChhbGwgbGlicmFyaWVzIGlmICIqIiBpcyB1c2VkKS4KICAgKgogICAqIFRoZSBmb2xsb3dpbmcgdGV4dCBpcyBub24tbm9ybWF0aXZlOgogICAqCiAgICogRGFydDJqcyBjdXJyZW50bHkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBmb3JtYXRzIHRvIHNwZWNpZnkgbGlicmFyaWVzOgogICAqCiAgICogKiBBIGNvbnN0YW50IFtMaXN0XSBjb250YWluaW5nIFtTdHJpbmddIGNvbnN0YW50cyByZXByZXNlbnRpbmcgbmFtZXMgb2YKICAgKiAgIGxpYnJhcmllcy4KICAgKiAqIEEgc2luZ2xlIFtTdHJpbmddIGNvbnN0YW50IHdob3NlIHZhbHVlIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YKICAgKiAgIGxpYnJhcnkgbmFtZXMuCiAgICoKICAgKiBDb25jZXB0dWFsbHksIGEgW01pcnJvcnNVc2VkXSBhbm5vdGF0aW9uIHdpdGggW292ZXJyaWRlXSBoYXMgdGhlIHNhbWUKICAgKiBlZmZlY3QgYXMgcGxhY2luZyB0aGUgYW5ub3RhdGlvbiBkaXJlY3RseSBvbiB0aGUgaW1wb3J0IG9mIGBkYXJ0Om1pcnJvcnNgCiAgICogaW4gZWFjaCBvZiB0aGUgcmVmZXJlbmNlZCBsaWJyYXJpZXMuIFRodXMsIGlmIHRoZSBsaWJyYXJ5IGhhZCBubwogICAqIFtNaXJyb3JzVXNlZF0gYW5ub3RhdGlvbiBiZWZvcmUsIGl0cyB1bmNvbmRpdGlvbmFsIGltcG9ydCBvZgogICAqIGBkYXJ0Om1pcnJvcnNgIGlzIG92ZXJyaWRkZW4gYnkgYW4gYW5ub3RhdGVkIGltcG9ydC4KICAgKgogICAqIE5vdGUgdGhhdCwgbGlrZSBtdWx0aXBsZSBleHBsaWNpdCBbTWlycm9yc1VzZWRdIGFubm90YXRpb25zLCB1c2luZwogICAqIG92ZXJyaWRlIG9uIGEgbGlicmFyeSB3aXRoIGFuIGV4aXN0aW5nIFtNaXJyb3JzVXNlZF0gYW5ub3RhdGlvbiBpcwogICAqIGFkZGl0aXZlLiBUaGF0IGlzLCB0aGUgb3ZlcmFsbCBzZXQgb2YgcmVmbGVjdGl2ZSB0YXJnZXRzIGlzIHRoZSB1bmlvbgogICAqIG9mIHRoZSByZWZsZWN0aXZlIHRhcmdldHMgdGhhdCBhcmlzZSBmcm9tIHRoZSBvcmlnaW5hbCBhbmQgdGhlCiAgICogb3ZlcnJpZGluZyBbTWlycm9yc1VzZWRdIGFubm90YXRpb25zLgogICAqCiAgICogVGhlIHVzZSBvZiBbb3ZlcnJpZGVdIGlzIG9ubHkgbWVhbmluZ2Z1bCBmb3IgbGlicmFyaWVzIHRoYXQgaGF2ZSBhbgogICAqIGltcG9ydCBvZiBgZGFydDptaXJyb3JzYCB3aXRob3V0IGFubm90YXRpb24gYmVjYXVzZSBvdGhlcndpc2UgaXQgd291bGQKICAgKiB3b3JrIGV4YWN0bHkgdGhlIHNhbWUgd2F5IHdpdGhvdXQgdGhlIFtvdmVycmlkZV0gcGFyYW1ldGVyLgogICAqCiAgICogV2hpbGUgdGhlIGFubm90YXRpb24gd2lsbCBhcHBseSB0byB0aGUgZ2l2ZW4gdGFyZ2V0IGxpYnJhcmllcywgdGhlCiAgICogW3N5bWJvbHNdLCBbdGFyZ2V0c10gYW5kIFttZXRhVGFyZ2V0c10gYXJlIHN0aWxsIGV2YWx1YXRlZCBpbiB0aGUKICAgKiBzY29wZSBvZiB0aGUgYW5ub3RhdGlvbi4gVGh1cywgdG8gc2VsZWN0IGEgdGFyZ2V0IGZyb20gbGlicmFyeSBgZm9vYCwKICAgKiBhIHF1YWxpZmllZCBuYW1lIGhhcyB0byBiZSB1c2VkIG9yLCBpZiB0aGUgdGFyZ2V0IGlzIHZpc2libGUgaW4gdGhlCiAgICogY3VycmVudCBzY29wZSwgaXRzIHR5cGUgbWF5IGJlIHJlZmVyZW5jZWQuCiAgICoKICAgKiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlIG1hcmtzIGFsbCB0YXJnZXRzIGluIHRoZSBsaWJyYXJ5IGBmb29gCiAgICogYXMgcmVmbGVjdGFibGUgdGhhdCBoYXZlIGEgbWV0YWRhdGEgYW5ub3RhdGlvbiB1c2luZyB0aGUgYFJlZmxlY3RhYmxlYAogICAqIGNsYXNzIGZyb20gdGhlIHNhbWUgbGlicmFyeS4KICAgKgogICAqICAgICBATWlycm9yc1VzZWQobWV0YVRhcmdldHM6ICJmb28uUmVmbGVjdGFibGUiLCBvdmVycmlkZTogImZvbyIpCiAgICoKICAgKiBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGNvZGUgd291bGQgcmVxdWlyZSB0aGUgdXNlIG9mIHRoZSBgUmVmbGVjdGFibGVgCiAgICogY2xhc3MgZnJvbSB0aGUgY3VycmVudCBsaWJyYXJ5LCBpbnN0ZWFkLgogICAqCiAgICogICAgIEBNaXJyb3JzVXNlZChtZXRhVGFyZ2V0czogIlJlZmxlY3RhYmxlIiwgb3ZlcnJpZGU6ICJmb28iKQogICAqCiAgICovCiAgZmluYWwgb3ZlcnJpZGU7CgogIC8qKgogICAqIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3Ig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Yi9taXJyb3JzX2ltcGwuZGFydMAAuZEvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vIHBhcnQgb2YgIm1pcnJvcnNfcGF0Y2guZGFydCI7Cgp2YXIgX2RpcnR5ID0gZmFsc2U7IC8vIFNldCB0byB0cnVlIGJ5IHRoZSBWTSB3aGVuIG1vcmUgbGlicmFyaWVzIGFyZSBsb2FkZWQuCgpjbGFzcyBfSW50ZXJuYWxNaXJyb3JFcnJvciBleHRlbmRzIEVycm9yIHsKICBmaW5hbCBTdHJpbmcgX21zZzsKICBfSW50ZXJuYWxNaXJyb3JFcnJvcih0aGlzLl9tc2cpOwogIFN0cmluZyB0b1N0cmluZygpID0+IF9tc2c7Cn0KClN0cmluZyBfbihTeW1ib2wgc3ltYm9sKSA9PiBpbnRlcm5hbC5TeW1ib2wuZ2V0TmFtZShzeW1ib2wgYXMgaW50ZXJuYWwuU3ltYm9sKTsKClN5bWJvbCBfcyhTdHJpbmcgbmFtZSkgewogIHJldHVybiBuZXcgaW50ZXJuYWwuU3ltYm9sLnVudmFsaWRhdGVkKG5hbWUpOwp9CgpTeW1ib2wgX3NPcHQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICByZXR1cm4gbmV3IGludGVybmFsLlN5bWJvbC51bnZhbGlkYXRlZChuYW1lKTsKfQoKU3ltYm9sIF9jb21wdXRlUXVhbGlmaWVkTmFtZShEZWNsYXJhdGlvbk1pcnJvciBvd25lciwgU3ltYm9sIHNpbXBsZU5hbWUpIHsKICBpZiAob3duZXIgPT0gbnVsbCkgcmV0dXJuIHNpbXBsZU5hbWU7CiAgcmV0dXJuIF9zKCcke19uKG93bmVyLnF1YWxpZmllZE5hbWUpfS4ke19uKHNpbXBsZU5hbWUpfScpOwp9CgpTdHJpbmcgX21ha2VTaWduYXR1cmVTdHJpbmcoCiAgICBUeXBlTWlycm9yIHJldHVyblR5cGUsIExpc3Q8UGFyYW1ldGVyTWlycm9yPiBwYXJhbWV0ZXJzKSB7CiAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICBidWYud3JpdGUoJygnKTsKICBib29sIGZvdW5kX29wdGlvbmFsX3Bvc2l0aW9uYWwgPSBmYWxzZTsKICBib29sIGZvdW5kX29wdGlvbmFsX25hbWVkID0gZmFsc2U7CgogIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgdmFyIHBhcmFtID0gcGFyYW1ldGVyc1tpXTsKICAgIGlmIChwYXJhbS5pc09wdGlvbmFsICYmIHBhcmFtLmlzTmFtZWQgJiYgIWZvdW5kX29wdGlvbmFsX25hbWVkKSB7CiAgICAgIGJ1Zi53cml0ZSgneycpOwogICAgICBmb3VuZF9vcHRpb25hbF9uYW1lZCA9IHRydWU7CiAgICB9CiAgICBpZiAocGFyYW0uaXNPcHRpb25hbCAmJiAhcGFyYW0uaXNOYW1lZCAmJiAhZm91bmRfb3B0aW9uYWxfcG9zaXRpb25hbCkgewogICAgICBidWYud3JpdGUoJ1snKTsKICAgICAgZm91bmRfb3B0aW9uYWxfcG9zaXRpb25hbCA9IHRydWU7CiAgICB9CiAgICBpZiAocGFyYW0uaXNOYW1lZCkgewogICAgICBidWYud3JpdGUoX24ocGFyYW0uc2ltcGxlTmFtZSkpOwogICAgICBidWYud3JpdGUoJzogJyk7CiAgICB9CiAgICBidWYud3JpdGUoX24ocGFyYW0udHlwZS5xdWFsaWZpZWROYW1lKSk7CiAgICBpZiAoaSA8IChwYXJhbWV0ZXJzLmxlbmd0aCAtIDEpKSB7CiAgICAgIGJ1Zi53cml0ZSgnLCAnKTsKICAgIH0KICB9CiAgaWYgKGZvdW5kX29wdGlvbmFsX25hbWVkKSB7CiAgICBidWYud3JpdGUoJ30nKTsKICB9CiAgaWYgKGZvdW5kX29wdGlvbmFsX3Bvc2l0aW9uYWwpIHsKICAgIGJ1Zi53cml0ZSgnXScpOwogIH0KICBidWYud3JpdGUoJykgLT4gJyk7CiAgYnVmLndyaXRlKF9uKHJldHVyblR5cGUucXVhbGlmaWVkTmFtZSkpOwogIHJldHVybiBidWYudG9TdHJpbmcoKTsKfQoKU291cmNlTG9jYXRpb24gX2xvY2F0aW9uKHJlZmxlY3RlZSkgbmF0aXZlICJEZWNsYXJhdGlvbk1pcnJvcl9sb2NhdGlvbiI7CgpMaXN0PGR5bmFtaWM+IF9tZXRhZGF0YShyZWZsZWN0ZWUpIG5hdGl2ZSAnRGVjbGFyYXRpb25NaXJyb3JfbWV0YWRhdGEnOwoKTGlzdDxJbnN0YW5jZU1pcnJvcj4gX3dyYXBNZXRhZGF0YShMaXN0IHJlZmxlY3RlZXMpIHsKICB2YXIgbWlycm9ycyA9IG5ldyBMaXN0PEluc3RhbmNlTWlycm9yPigpOwogIGZvciAodmFyIHJlZmxlY3RlZSBpbiByZWZsZWN0ZWVzKSB7CiAgICBtaXJyb3JzLmFkZChyZWZsZWN0KHJlZmxlY3RlZSkpOwogIH0KICByZXR1cm4gbmV3IFVubW9kaWZpYWJsZUxpc3RWaWV3PEluc3RhbmNlTWlycm9yPihtaXJyb3JzKTsKfQoKYm9vbCBfc3VidHlwZVRlc3QoVHlwZSBhLCBUeXBlIGIpIG5hdGl2ZSAnVHlwZU1pcnJvcl9zdWJ0eXBlVGVzdCc7CgpjbGFzcyBfTWlycm9yU3lzdGVtIGV4dGVuZHMgTWlycm9yU3lzdGVtIHsKICBmaW5hbCBUeXBlTWlycm9yIGR5bmFtaWNUeXBlID0gbmV3IF9TcGVjaWFsVHlwZU1pcnJvci5fKCdkeW5hbWljJyk7CiAgZmluYWwgVHlwZU1pcnJvciB2b2lkVHlwZSA9IG5ldyBfU3BlY2lhbFR5cGVNaXJyb3IuXygndm9pZCcpOwogIGZpbmFsIFR5cGVNaXJyb3IgbmV2ZXJUeXBlID0gbmV3IF9TcGVjaWFsVHlwZU1pcnJvci5fKCdOZXZlcicpOwoKICB2YXIgX2xpYnJhcmllczsKICBNYXA8VXJpLCBMaWJyYXJ5TWlycm9yPiBnZXQgbGlicmFyaWVzIHsKICAgIGlmICgoX2xpYnJhcmllcyA9PSBudWxsKSB8fCBfZGlydHkpIHsKICAgICAgX2xpYnJhcmllcyA9IG5ldyBNYXA8VXJpLCBMaWJyYXJ5TWlycm9yPigpOwogICAgICBmb3IgKExpYnJhcnlNaXJyb3IgbGliIGluIF9jb21wdXRlTGlicmFyaWVzKCkpIHsKICAgICAgICBfbGlicmFyaWVzW2xpYi51cmldID0gbGliOwogICAgICB9CiAgICAgIF9saWJyYXJpZXMgPSBuZXcgVW5tb2RpZmlhYmxlTWFwVmlldzxVcmksIExpYnJhcnlNaXJyb3I+KF9saWJyYXJpZXMpOwogICAgICBfZGlydHkgPSBmYWxzZTsKICAgIH0KICAgIHJldHVybiBfbGlicmFyaWVzOwogIH0KCiAgc3RhdGljIExpc3Q8ZHluYW1pYz4gX2NvbXB1dGVMaWJyYXJpZXMoKSBuYXRpdmUgIk1pcnJvclN5c3RlbV9saWJyYXJpZXMiOwoKICBJc29sYXRlTWlycm9yIF9pc29sYXRlOwogIElzb2xhdGVNaXJyb3IgZ2V0IGlzb2xhdGUgewogICAgdmFyIGkgPSBfaXNvbGF0ZTsKICAgIGlmIChpICE9IG51bGwpIHJldHVybiBpOwogICAgcmV0dXJuIF9pc29sYXRlID0gX2NvbXB1dGVJc29sYXRlKCk7CiAgfQoKICBzdGF0aWMgSXNvbGF0ZU1pcnJvciBfY29tcHV0ZUlzb2xhdGUoKSBuYXRpdmUgIk1pcnJvclN5c3RlbV9pc29sYXRlIjsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIk1pcnJvclN5c3RlbSBmb3IgaXNvbGF0ZSAnJHtpc29sYXRlLmRlYnVnTmFtZX0nIjsKfQoKY2xhc3MgX1NvdXJjZUxvY2F0aW9uIGltcGxlbWVudHMgU291cmNlTG9jYXRpb24gewogIF9Tb3VyY2VMb2NhdGlvbi5fKHVyaVN0cmluZywgdGhpcy5saW5lLCB0aGlzLmNvbHVtbikKICAgICAgOiB0aGlzLnNvdXJjZVVyaSA9IFVyaS5wYXJzZSh1cmlTdHJpbmcpOwoKICAvLyBMaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zIGFyZSAxLW9yaWdpbiwgb3IgMCBpZiB1bmtub3duLgogIGZpbmFsIGludCBsaW5lOwogIGZpbmFsIGludCBjb2x1bW47CgogIGZpbmFsIFVyaSBzb3VyY2VVcmk7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiBjb2x1bW4gPT0gMCA/ICIkc291cmNlVXJpOiRsaW5lIiA6ICIkc291cmNlVXJpOiRsaW5lOiRjb2x1bW4iOwogIH0KfQoKY2xhc3MgX0lzb2xhdGVNaXJyb3IgZXh0ZW5kcyBNaXJyb3IgaW1wbGVtZW50cyBJc29sYXRlTWlycm9yIHsKICBmaW5hbCBTdHJpbmcgZGVidWdOYW1lOwogIGZpbmFsIExpYnJhcnlNaXJyb3Igcm9vdExpYnJhcnk7CgogIF9Jc29sYXRlTWlycm9yLl8odGhpcy5kZWJ1Z05hbWUsIHRoaXMucm9vdExpYnJhcnkpOwoKICBib29sIGdldCBpc0N1cnJlbnQgPT4gdHJ1ZTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIklzb2xhdGVNaXJyb3Igb24gJyRkZWJ1Z05hbWUnIjsKCiAgRnV0dXJlPExpYnJhcnlNaXJyb3I+IGxvYWRVcmkoVXJpIHVyaSkgYXN5bmMgewogICAgdmFyIHJlc3VsdCA9IF9sb2FkVXJpKHVyaS50b1N0cmluZygpKTsKICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgewogICAgICAvLyBDZW5zb3JlZCBsaWJyYXJ5LgogICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJDYW5ub3QgbG9hZCAkdXJpIik7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIExpYnJhcnlNaXJyb3IgX2xvYWRVcmkoU3RyaW5nIHVyaSkgbmF0aXZlICJJc29sYXRlTWlycm9yX2xvYWRVcmkiOwp9CgpjbGFzcyBfU3ludGhldGljQWNjZXNzb3IgaW1wbGVtZW50cyBNZXRob2RNaXJyb3IgewogIGZpbmFsIERlY2xhcmF0aW9uTWlycm9yIG93bmVyOwogIGZpbmFsIFN5bWJvbCBzaW1wbGVOYW1lOwogIGZpbmFsIGJvb2wgaXNHZXR0ZXI7CiAgZmluYWwgYm9vbCBpc1N0YXRpYzsKICBmaW5hbCBib29sIGlzVG9wTGV2ZWw7CiAgZmluYWwgX3RhcmdldDsKCiAgX1N5bnRoZXRpY0FjY2Vzc29yKHRoaXMub3duZXIsIHRoaXMuc2ltcGxlTmFtZSwgdGhpcy5pc0dldHRlciwgdGhpcy5pc1N0YXRpYywKICAgICAgdGhpcy5pc1RvcExldmVsLCB0aGlzLl90YXJnZXQpOwoKICBib29sIGdldCBpc1N5bnRoZXRpYyA9PiB0cnVlOwogIGJvb2wgZ2V0IGlzUmVndWxhck1ldGhvZCA9PiBmYWxzZTsKICBib29sIGdldCBpc09wZXJhdG9yID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzQ29uc3RydWN0b3IgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNDb25zdENvbnN0cnVjdG9yID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzRmFjdG9yeUNvbnN0cnVjdG9yID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzRXh0ZXJuYWwgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNSZWRpcmVjdGluZ0NvbnN0cnVjdG9yID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzQWJzdHJhY3QgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNFeHRlbnNpb25NZW1iZXIgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzU2V0dGVyID0+ICFpc0dldHRlcjsKICBib29sIGdldCBpc1ByaXZhdGUgPT4gX24oc2ltcGxlTmFtZSkuc3RhcnRzV2l0aCgnXycpOwoKICBTeW1ib2wgZ2V0IHF1YWxpZmllZE5hbWUgPT4gX2NvbXB1dGVRdWFsaWZpZWROYW1lKG93bmVyLCBzaW1wbGVOYW1lKTsKICBTeW1ib2wgZ2V0IGNvbnN0cnVjdG9yTmFtZSA9PiBTeW1ib2wuZW1wdHk7CgogIFR5cGVNaXJyb3IgZ2V0IHJldHVyblR5cGUgPT4gX3RhcmdldC50eXBlOwogIExpc3Q8UGFyYW1ldGVyTWlycm9yPiBnZXQgcGFyYW1ldGVycyB7CiAgICBpZiAoaXNHZXR0ZXIpIHJldHVybiBjb25zdCA8UGFyYW1ldGVyTWlycm9yPltdOwogICAgcmV0dXJuIG5ldyBVbm1vZGlmaWFibGVMaXN0VmlldzxQYXJhbWV0ZXJNaXJyb3I+KAogICAgICAgIDxQYXJhbWV0ZXJNaXJyb3I+W25ldyBfU3ludGhldGljU2V0dGVyUGFyYW1ldGVyKHRoaXMsIHRoaXMuX3RhcmdldCldKTsKICB9CgogIFNvdXJjZUxvY2F0aW9uIGdldCBsb2NhdGlvbiA9PiBudWxsOwogIExpc3Q8SW5zdGFuY2VNaXJyb3I+IGdldCBtZXRhZGF0YSA9PiBjb25zdCA8SW5zdGFuY2VNaXJyb3I+W107CiAgU3RyaW5nIGdldCBzb3VyY2UgPT4gbnVsbDsKfQoKY2xhc3MgX1N5bnRoZXRpY1NldHRlclBhcmFtZXRlciBpbXBsZW1lbnRzIFBhcmFtZXRlck1pcnJvciB7CiAgZmluYWwgRGVjbGFyYXRpb25NaXJyb3Igb3duZXI7CiAgZmluYWwgVmFyaWFibGVNaXJyb3IgX3RhcmdldDsKCiAgX1N5bnRoZXRpY1NldHRlclBhcmFtZXRlcih0aGlzLm93bmVyLCB0aGlzLl90YXJnZXQpOwoKICBTeW1ib2wgZ2V0IHNpbXBsZU5hbWUgPT4gX3RhcmdldC5zaW1wbGVOYW1lOwogIFN5bWJvbCBnZXQgcXVhbGlmaWVkTmFtZSA9PiBfY29tcHV0ZVF1YWxpZmllZE5hbWUob3duZXIsIHNpbXBsZU5hbWUpOwogIFR5cGVNaXJyb3IgZ2V0IHR5cGUgPT4gX3RhcmdldC50eXBlOwoKICBib29sIGdldCBpc09wdGlvbmFsID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzTmFtZWQgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNTdGF0aWMgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNUb3BMZXZlbCA9PiBmYWxzZTsKICBib29sIGdldCBpc0NvbnN0ID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzRmluYWwgPT4gdHJ1ZTsKICBib29sIGdldCBpc1ByaXZhdGUgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNFeHRlbnNpb25NZW1iZXIgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaGFzRGVmYXVsdFZhbHVlID0+IGZhbHNlOwogIEluc3RhbmNlTWlycm9yIGdldCBkZWZhdWx0VmFsdWUgPT4gbnVsbDsKICBTb3VyY2VMb2NhdGlvbiBnZXQgbG9jYXRpb24gPT4gbnVsbDsKICBMaXN0PEluc3RhbmNlTWlycm9yPiBnZXQgbWV0YWRhdGEgPT4gY29uc3QgPEluc3RhbmNlTWlycm9yPltdOwp9CgphYnN0cmFjdCBjbGFzcyBfT2JqZWN0TWlycm9yIGV4dGVuZHMgTWlycm9yIGltcGxlbWVudHMgT2JqZWN0TWlycm9yIHsKICBfaW52b2tlKHJlZmxlY3RlZSwgZnVuY3Rpb25OYW1lLCBhcmd1bWVudHMsIGFyZ3VtZW50TmFtZXMpOwogIF9pbnZva2VHZXR0ZXIocmVmbGVjdGVlLCBnZXR0ZXJOYW1lKTsKICBfaW52b2tlU2V0dGVyKHJlZmxlY3RlZSwgc2V0dGVyTmFtZSwgdmFsdWUpOwoKICBmaW5hbCBfcmVmbGVjdGVlOyAvLyBNYXkgYmUgYSBNaXJyb3JSZWZlcmVuY2Ugb3IgYW4gb3JkaW5hcnkgb2JqZWN0LgoKICBfT2JqZWN0TWlycm9yLl8odGhpcy5fcmVmbGVjdGVlKTsKCiAgSW5zdGFuY2VNaXJyb3IgaW52b2tlKFN5bWJvbCBtZW1iZXJOYW1lLCBMaXN0PGR5bmFtaWM+IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIFtNYXA8U3ltYm9sLCBkeW5hbWljPiBuYW1lZEFyZ3VtZW50c10pIHsKICAgIGludCBudW1Qb3NpdGlvbmFsQXJndW1lbnRzID0gcG9zaXRpb25hbEFyZ3VtZW50cy5sZW5ndGg7CiAgICBpbnQgbnVtTmFtZWRBcmd1bWVudHMgPSBuYW1lZEFyZ3VtZW50cyAhPSBudWxsID8gbmFtZWRBcmd1bWVudHMubGVuZ3RoIDogMDsKICAgIGludCBudW1Bcmd1bWVudHMgPSBudW1Qb3NpdGlvbmFsQXJndW1lbnRzICsgbnVtTmFtZWRBcmd1bWVudHM7CiAgICBMaXN0IGFyZ3VtZW50cyA9IG5ldyBMaXN0KG51bUFyZ3VtZW50cyk7CiAgICBhcmd1bWVudHMuc2V0UmFuZ2UoMCwgbnVtUG9zaXRpb25hbEFyZ3VtZW50cywgcG9zaXRpb25hbEFyZ3VtZW50cyk7CiAgICBMaXN0IG5hbWVzID0gbmV3IExpc3QobnVtTmFtZWRBcmd1bWVudHMpOwogICAgaW50IGFyZ3VtZW50SW5kZXggPSBudW1Qb3NpdGlvbmFsQXJndW1lbnRzOwogICAgaW50IG5hbWVJbmRleCA9IDA7CiAgICBpZiAobnVtTmFtZWRBcmd1bWVudHMgPiAwKSB7CiAgICAgIG5hbWVkQXJndW1lbnRzLmZvckVhY2goKG5hbWUsIHZhbHVlKSB7CiAgICAgICAgYXJndW1lbnRzW2FyZ3VtZW50SW5kZXgrK10gPSB2YWx1ZTsKICAgICAgICBuYW1lc1tuYW1lSW5kZXgrK10gPSBfbihuYW1lKTsKICAgICAgfSk7CiAgICB9CgogICAgcmV0dXJuIHJlZmxlY3QodGhpcy5faW52b2tlKF9yZWZsZWN0ZWUsIF9uKG1lbWJlck5hbWUpLCBhcmd1bWVudHMsIG5hbWVzKSk7CiAgfQoKICBJbnN0YW5jZU1pcnJvciBnZXRGaWVsZChTeW1ib2wgbWVtYmVyTmFtZSkgewogICAgcmV0dXJuIHJlZmxlY3QodGhpcy5faW52b2tlR2V0dGVyKF9yZWZsZWN0ZWUsIF9uKG1lbWJlck5hbWUpKSk7CiAgfQoKICBJbnN0YW5jZU1pcnJvciBzZXRGaWVsZChTeW1ib2wgbWVtYmVyTmFtZSwgZHluYW1pYyB2YWx1ZSkgewogICAgdGhpcy5faW52b2tlU2V0dGVyKF9yZWZsZWN0ZWUsIF9uKG1lbWJlck5hbWUpLCB2YWx1ZSk7CiAgICByZXR1cm4gcmVmbGVjdCh2YWx1ZSk7CiAgfQoKICBkZWxlZ2F0ZShJbnZvY2F0aW9uIGludm9jYXRpb24pIHsKICAgIGlmIChpbnZvY2F0aW9uLmlzTWV0aG9kKSB7CiAgICAgIHJldHVybiB0aGlzCiAgICAgICAgICAuaW52b2tlKGludm9jYXRpb24ubWVtYmVyTmFtZSwgaW52b2NhdGlvbi5wb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICAgICAgICAgIGludm9jYXRpb24ubmFtZWRBcmd1bWVudHMpCiAgICAgICAgICAucmVmbGVjdGVlOwogICAgfQogICAgaWYgKGludm9jYXRpb24uaXNHZXR0ZXIpIHsKICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGQoaW52b2NhdGlvbi5tZW1iZXJOYW1lKS5yZWZsZWN0ZWU7CiAgICB9CiAgICBpZiAoaW52b2NhdGlvbi5pc1NldHRlcikgewogICAgICB2YXIgdW53cmFwcGVkID0gX24oaW52b2NhdGlvbi5tZW1iZXJOYW1lKTsKICAgICAgdmFyIHdpdGhvdXRFcXVhbCA9IF9zKHVud3JhcHBlZC5zdWJzdHJpbmcoMCwgdW53cmFwcGVkLmxlbmd0aCAtIDEpKTsKICAgICAgdmFyIGFyZyA9IGludm9jYXRpb24ucG9zaXRpb25hbEFyZ3VtZW50c1swXTsKICAgICAgdGhpcy5zZXRGaWVsZCh3aXRob3V0RXF1YWwsIGFyZykucmVmbGVjdGVlOwogICAgICByZXR1cm4gYXJnOwogICAgfQogICAgdGhyb3cgIlVOUkVBQ0hBQkxFIjsKICB9Cn0KCmNsYXNzIF9JbnN0YW5jZU1pcnJvciBleHRlbmRzIF9PYmplY3RNaXJyb3IgaW1wbGVtZW50cyBJbnN0YW5jZU1pcnJvciB7CiAgX0luc3RhbmNlTWlycm9yLl8ocmVmbGVjdGVlKSA6IHN1cGVyLl8ocmVmbGVjdGVlKTsKCiAgQ2xhc3NNaXJyb3IgX3R5cGU7CiAgQ2xhc3NNaXJyb3IgZ2V0IHR5cGUgewogICAgdmFyIHQgPSBfdHlwZTsKICAgIGlmICh0ICE9IG51bGwpIHJldHVybiB0OwoKICAgIC8vIE5vdGUgaXQgbm90IHNhZmUgdG8gdXNlIHJlZmxlY3RlZS5ydW50aW1lVHlwZSBiZWNhdXNlIHJ1bnRpbWVUeXBlIG1heQogICAgLy8gYmUgb3ZlcnJpZGRlbi4KICAgIHJldHVybiBfdHlwZSA9IHJlZmxlY3RUeXBlKF9jb21wdXRlVHlwZShyZWZsZWN0ZWUpKSBhcyBDbGFzc01pcnJvcjsKICB9CgogIC8vIExvY2FsSW5zdGFuY2VNaXJyb3JzIGFsd2F5cyByZWZsZWN0IGxvY2FsIGluc3RhbmNlcwogIGJvb2wgZ2V0IGhhc1JlZmxlY3RlZSA9PiB0cnVlOwoKICBnZXQgcmVmbGVjdGVlID0+IF9yZWZsZWN0ZWU7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICdJbnN0YW5jZU1pcnJvciBvbiAke0Vycm9yLnNhZmVUb1N0cmluZyhfcmVmbGVjdGVlKX0nOwoKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgX0luc3RhbmNlTWlycm9yICYmIGlkZW50aWNhbChfcmVmbGVjdGVlLCBvdGhlci5fcmVmbGVjdGVlKTsKICB9CgogIGludCBnZXQgaGFzaENvZGUgewogICAgLy8gQXZvaWQgaGFzaCBjb2xsaXNpb25zIHdpdGggdGhlIHJlZmxlY3RlZS4gVGhpcyBjb25zdGFudCBpcyBpbiBTbWkgcmFuZ2UKICAgIC8vIGFuZCBoYXBwZW5zIHRvIGJlIHRoZSBpbm5lciBwYWRkaW5nIGZyb20gUkZDIDIxMDQuCiAgICByZXR1cm4gaWRlbnRpdHlIYXNoQ29kZShfcmVmbGVjdGVlKSBeIDB4MzYzNjM2MzY7CiAgfQoKICBJbnN0YW5jZU1pcnJvciBnZXRGaWVsZChTeW1ib2wgbWVtYmVyTmFtZSkgewogICAgcmV0dXJuIHJlZmxlY3QoX2ludm9rZUdldHRlcihfcmVmbGVjdGVlLCBfbihtZW1iZXJOYW1lKSkpOwogIH0KCiAgSW5zdGFuY2VNaXJyb3Igc2V0RmllbGQoU3ltYm9sIG1lbWJlck5hbWUsIGR5bmFtaWMgYXJnKSB7CiAgICBfaW52b2tlU2V0dGVyKF9yZWZsZWN0ZWUsIF9uKG1lbWJlck5hbWUpLCBhcmcpOwogICAgcmV0dXJuIHJlZmxlY3QoYXJnKTsKICB9CgogIC8vIE92ZXJyaWRlIHRvIGluY2x1ZGUgdGhlIHJlY2VpdmVyIGluIHRoZSBhcmd1bWVudHMuCiAgSW5zdGFuY2VNaXJyb3IgaW52b2tlKFN5bWJvbCBtZW1iZXJOYW1lLCBMaXN0PGR5bmFtaWM+IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIFtNYXA8U3ltYm9sLCBkeW5hbWljPiBuYW1lZEFyZ3VtZW50c10pIHsKICAgIGludCBudW1Qb3NpdGlvbmFsQXJndW1lbnRzID0gcG9zaXRpb25hbEFyZ3VtZW50cy5sZW5ndGggKyAxOyAvLyBSZWNlaXZlci4KICAgIGludCBudW1OYW1lZEFyZ3VtZW50cyA9IG5hbWVkQXJndW1lbnRzICE9IG51bGwgPyBuYW1lZEFyZ3VtZW50cy5sZW5ndGggOiAwOwogICAgaW50IG51bUFyZ3VtZW50cyA9IG51bVBvc2l0aW9uYWxBcmd1bWVudHMgKyBudW1OYW1lZEFyZ3VtZW50czsKICAgIExpc3QgYXJndW1lbnRzID0gbmV3IExpc3QobnVtQXJndW1lbnRzKTsKICAgIGFyZ3VtZW50c1swXSA9IF9yZWZsZWN0ZWU7IC8vIFJlY2VpdmVyLgogICAgYXJndW1lbnRzLnNldFJhbmdlKDEsIG51bVBvc2l0aW9uYWxBcmd1bWVudHMsIHBvc2l0aW9uYWxBcmd1bWVudHMpOwogICAgTGlzdCBuYW1lcyA9IG5ldyBMaXN0KG51bU5hbWVkQXJndW1lbnRzKTsKICAgIGludCBhcmd1bWVudEluZGV4ID0gbnVtUG9zaXRpb25hbEFyZ3VtZW50czsKICAgIGludCBuYW1lSW5kZXggPSAwOwogICAgaWYgKG51bU5hbWVkQXJndW1lbnRzID4gMCkgewogICAgICBuYW1lZEFyZ3VtZW50cy5mb3JFYWNoKChuYW1lLCB2YWx1ZSkgewogICAgICAgIGFyZ3VtZW50c1thcmd1bWVudEluZGV4KytdID0gdmFsdWU7CiAgICAgICAgbmFtZXNbbmFtZUluZGV4KytdID0gX24obmFtZSk7CiAgICAgIH0pOwogICAgfQoKICAgIHJldHVybiByZWZsZWN0KHRoaXMuX2ludm9rZShfcmVmbGVjdGVlLCBfbihtZW1iZXJOYW1lKSwgYXJndW1lbnRzLCBuYW1lcykpOwogIH0KCiAgX2ludm9rZShyZWZsZWN0ZWUsIGZ1bmN0aW9uTmFtZSwgYXJndW1lbnRzLCBhcmd1bWVudE5hbWVzKQogICAgICBuYXRpdmUgJ0luc3RhbmNlTWlycm9yX2ludm9rZSc7CgogIF9pbnZva2VHZXR0ZXIocmVmbGVjdGVlLCBnZXR0ZXJOYW1lKSBuYXRpdmUgJ0luc3RhbmNlTWlycm9yX2ludm9rZUdldHRlcic7CgogIF9pbnZva2VTZXR0ZXIocmVmbGVjdGVlLCBzZXR0ZXJOYW1lLCB2YWx1ZSkKICAgICAgbmF0aXZlICdJbnN0YW5jZU1pcnJvcl9pbnZva2VTZXR0ZXInOwoKICBzdGF0aWMgX2NvbXB1dGVUeXBlKHJlZmxlY3RlZSkgbmF0aXZlICdJbnN0YW5jZU1pcnJvcl9jb21wdXRlVHlwZSc7Cn0KCmNsYXNzIF9DbG9zdXJlTWlycm9yIGV4dGVuZHMgX0luc3RhbmNlTWlycm9yIGltcGxlbWVudHMgQ2xvc3VyZU1pcnJvciB7CiAgX0Nsb3N1cmVNaXJyb3IuXyhyZWZsZWN0ZWUpIDogc3VwZXIuXyhyZWZsZWN0ZWUpOwoKICBNZXRob2RNaXJyb3IgX2Z1bmN0aW9uOwogIE1ldGhvZE1pcnJvciBnZXQgZnVuY3Rpb24gewogICAgdmFyIGYgPSBfZnVuY3Rpb247CiAgICBpZiAoZiAhPSBudWxsKSByZXR1cm4gZjsKICAgIHJldHVybiBfZnVuY3Rpb24gPSBfY29tcHV0ZUZ1bmN0aW9uKHJlZmxlY3RlZSk7CiAgfQoKICBJbnN0YW5jZU1pcnJvciBhcHBseShMaXN0PGR5bmFtaWM+IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIFtNYXA8U3ltYm9sLCBkeW5hbWljPiBuYW1lZEFyZ3VtZW50c10pIHsKICAgIHJldHVybiB0aGlzLmludm9rZSgjY2FsbCwgcG9zaXRpb25hbEFyZ3VtZW50cywgbmFtZWRBcmd1bWVudHMpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkNsb3N1cmVNaXJyb3Igb24gJyR7RXJyb3Iuc2FmZVRvU3RyaW5nKF9yZWZsZWN0ZWUpfSciOwoKICBzdGF0aWMgX2NvbXB1dGVGdW5jdGlvbihyZWZsZWN0ZWUpIG5hdGl2ZSAnQ2xvc3VyZU1pcnJvcl9mdW5jdGlvbic7Cn0KCmFic3RyYWN0IGNsYXNzIF9UeXBlTWlycm9yIHsKICBUeXBlIGdldCBfcmVmbGVjdGVkVHlwZTsKfQoKY2xhc3MgX0NsYXNzTWlycm9yIGV4dGVuZHMgX09iamVjdE1pcnJvciBpbXBsZW1lbnRzIENsYXNzTWlycm9yLCBfVHlwZU1pcnJvciB7CiAgZmluYWwgVHlwZSBfcmVmbGVjdGVkVHlwZTsKICBTeW1ib2wgX3NpbXBsZU5hbWU7CiAgRGVjbGFyYXRpb25NaXJyb3IgX293bmVyOwogIGZpbmFsIGJvb2wgaXNBYnN0cmFjdDsKICBmaW5hbCBib29sIF9pc0dlbmVyaWM7CgogIC8vIFNpbmNlIERhcnQgMiwgbWl4aW5zIGFyZSBlcmFzZWQgYnkga2VybmVsIHRyYW5zZm9ybWF0aW9uLgogIC8vIFJlc3VsdGluZyBjbGFzc2VzIGhhdmUgdGhpcyBmbGFnIHNldCwgYW5kIG1peGVkLWluIHR5cGUgaXMgcHVsbGVkIGludG8KICAvLyB0aGUgZW5kIG9mIGludGVyZmFjZXMgbGlzdC4KICBmaW5hbCBib29sIF9pc1RyYW5zZm9ybWVkTWl4aW5BcHBsaWNhdGlvbjsKCiAgZmluYWwgYm9vbCBfaXNHZW5lcmljRGVjbGFyYXRpb247CiAgZmluYWwgYm9vbCBpc0VudW07CiAgVHlwZSBfaW5zdGFudGlhdG9yOwoKICBfQ2xhc3NNaXJyb3IuXygKICAgICAgcmVmbGVjdGVlLAogICAgICByZWZsZWN0ZWRUeXBlLAogICAgICBTdHJpbmcgc2ltcGxlTmFtZSwKICAgICAgdGhpcy5fb3duZXIsCiAgICAgIHRoaXMuaXNBYnN0cmFjdCwKICAgICAgdGhpcy5faXNHZW5lcmljLAogICAgICB0aGlzLl9pc1RyYW5zZm9ybWVkTWl4aW5BcHBsaWNhdGlvbiwKICAgICAgdGhpcy5faXNHZW5lcmljRGVjbGFyYXRpb24sCiAgICAgIHRoaXMuaXNFbnVtKQogICAgICA6IHRoaXMuX3NpbXBsZU5hbWUgPSBfc09wdChzaW1wbGVOYW1lKSwKICAgICAgICB0aGlzLl9yZWZsZWN0ZWRUeXBlID0gcmVmbGVjdGVkVHlwZSwKICAgICAgICB0aGlzLl9pbnN0YW50aWF0b3IgPSByZWZsZWN0ZWRUeXBlLAogICAgICAgIHN1cGVyLl8ocmVmbGVjdGVlKTsKCiAgYm9vbCBnZXQgaGFzUmVmbGVjdGVkVHlwZSA9PiAhX2lzR2VuZXJpY0RlY2xhcmF0aW9uOwogIFR5cGUgZ2V0IHJlZmxlY3RlZFR5cGUgewogICAgaWYgKCFoYXNSZWZsZWN0ZWRUeXBlKSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgIkRlY2xhcmF0aW9ucyBvZiBnZW5lcmljcyBoYXZlIG5vIHJlZmxlY3RlZCB0eXBlIik7CiAgICB9CiAgICByZXR1cm4gX3JlZmxlY3RlZFR5cGU7CiAgfQoKICBTeW1ib2wgZ2V0IHNpbXBsZU5hbWUgewogICAgLy8gQWxsIGJ1dCBhbm9ueW1vdXMgbWl4aW4gYXBwbGljYXRpb25zIGhhdmUgdGhlaXIgbmFtZSBzZXQgYXQgY29uc3RydWN0aW9uLgogICAgdmFyIG4gPSBfc2ltcGxlTmFtZTsKICAgIGlmIChuICE9IG51bGwpIHJldHVybiBuOwoKICAgIHJldHVybiBfc2ltcGxlTmFtZSA9IHRoaXMuX21peGluQXBwbGljYXRpb25OYW1lOwogIH0KCiAgU3ltYm9sIF9xdWFsaWZpZWROYW1lOwogIFN5bWJvbCBnZXQgcXVhbGlmaWVkTmFtZSB7CiAgICB2YXIgbiA9IF9xdWFsaWZpZWROYW1lOwogICAgaWYgKG4gIT0gbnVsbCkgcmV0dXJuIG47CgogICAgcmV0dXJuIF9xdWFsaWZpZWROYW1lID0gX2NvbXB1dGVRdWFsaWZpZWROYW1lKG93bmVyLCBzaW1wbGVOYW1lKTsKICB9CgogIERlY2xhcmF0aW9uTWlycm9yIGdldCBvd25lciB7CiAgICB2YXIgbyA9IF9vd25lcjsKICAgIGlmIChvICE9IG51bGwpIHJldHVybiBvOwoKICAgIHZhciB1cmkgPSBfQ2xhc3NNaXJyb3IuX2xpYnJhcnlVcmkoX3JlZmxlY3RlZSk7CiAgICByZXR1cm4gX293bmVyID0gY3VycmVudE1pcnJvclN5c3RlbSgpLmxpYnJhcmllc1tVcmkucGFyc2UodXJpKV07CiAgfQoKICBib29sIGdldCBpc1ByaXZhdGUgPT4gX24oc2ltcGxlTmFtZSkuc3RhcnRzV2l0aCgnXycpOwoKICBib29sIGdldCBpc1RvcExldmVsID0+IHRydWU7CgogIFNvdXJjZUxvY2F0aW9uIGdldCBsb2NhdGlvbiB7CiAgICByZXR1cm4gX2xvY2F0aW9uKF9yZWZsZWN0ZWUpOwogIH0KCiAgX0NsYXNzTWlycm9yIF90cnVlU3VwZXJjbGFzc0ZpZWxkOwogIF9DbGFzc01pcnJvciBnZXQgX3RydWVTdXBlcmNsYXNzIHsKICAgIGlmIChfdHJ1ZVN1cGVyY2xhc3NGaWVsZCA9PSBudWxsKSB7CiAgICAgIFR5cGUgc3VwZXJ0eXBlID0gaXNPcmlnaW5hbERlY2xhcmF0aW9uCiAgICAgICAgICA/IF9zdXBlcnR5cGUoX3JlZmxlY3RlZFR5cGUpCiAgICAgICAgICA6IF9zdXBlcnR5cGVJbnN0YW50aWF0ZWQoX3JlZmxlY3RlZFR5cGUpOwogICAgICBpZiAoc3VwZXJ0eXBlID09IG51bGwpIHsKICAgICAgICAvLyBPYmplY3QgaGFzIG5vIHN1cGVyY2xhc3MuCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgdmFyIHN1cGVydHlwZU1pcnJvciA9IHJlZmxlY3RUeXBlKHN1cGVydHlwZSkgYXMgX0NsYXNzTWlycm9yOwogICAgICBzdXBlcnR5cGVNaXJyb3IuX2luc3RhbnRpYXRvciA9IF9pbnN0YW50aWF0b3I7CiAgICAgIF90cnVlU3VwZXJjbGFzc0ZpZWxkID0gc3VwZXJ0eXBlTWlycm9yOwogICAgfQogICAgcmV0dXJuIF90cnVlU3VwZXJjbGFzc0ZpZWxkOwogIH0KCiAgQ2xhc3NNaXJyb3IgZ2V0IHN1cGVyY2xhc3MgewogICAgcmV0dXJuIF90cnVlU3VwZXJjbGFzczsKICB9CgogIHZhciBfc3VwZXJpbnRlcmZhY2VzOwogIExpc3Q8Q2xhc3NNaXJyb3I+IGdldCBzdXBlcmludGVyZmFjZXMgewogICAgdmFyIGkgPSBfc3VwZXJpbnRlcmZhY2VzOwogICAgaWYgKGkgIT0gbnVsbCkgcmV0dXJuIGk7CgogICAgdmFyIGludGVyZmFjZVR5cGVzID0gaXNPcmlnaW5hbERlY2xhcmF0aW9uCiAgICAgICAgPyBfbmF0aXZlSW50ZXJmYWNlcyhfcmVmbGVjdGVkVHlwZSkKICAgICAgICA6IF9uYXRpdmVJbnRlcmZhY2VzSW5zdGFudGlhdGVkKF9yZWZsZWN0ZWRUeXBlKTsKICAgIGlmIChfaXNUcmFuc2Zvcm1lZE1peGluQXBwbGljYXRpb24pIHsKICAgICAgaW50ZXJmYWNlVHlwZXMgPSBpbnRlcmZhY2VUeXBlcy5zdWJsaXN0KDAsIGludGVyZmFjZVR5cGVzLmxlbmd0aCAtIDEpOwogICAgfQogICAgdmFyIGludGVyZmFjZU1pcnJvcnMgPSBuZXcgTGlzdDxDbGFzc01pcnJvcj4oKTsKICAgIGZvciAodmFyIGludGVyZmFjZVR5cGUgaW4gaW50ZXJmYWNlVHlwZXMpIHsKICAgICAgaW50ZXJmYWNlTWlycm9ycy5hZGQocmVmbGVjdFR5cGUoaW50ZXJmYWNlVHlwZSkgYXMgQ2xhc3NNaXJyb3IpOwogICAgfQogICAgcmV0dXJuIF9zdXBlcmludGVyZmFjZXMgPQogICAgICAgIG5ldyBVbm1vZGlmaWFibGVMaXN0VmlldzxDbGFzc01pcnJvcj4oaW50ZXJmYWNlTWlycm9ycyk7CiAgfQoKICBTeW1ib2wgZ2V0IF9taXhpbkFwcGxpY2F0aW9uTmFtZSB7CiAgICB2YXIgbWl4aW5zID0gbmV3IExpc3Q8Q2xhc3NNaXJyb3I+KCk7CiAgICB2YXIga2xhc3MgPSB0aGlzOwogICAgd2hpbGUgKF9uYXRpdmVNaXhpbihrbGFzcy5fcmVmbGVjdGVkVHlwZSkgIT0gbnVsbCkgewogICAgICBtaXhpbnMuYWRkKGtsYXNzLm1peGluKTsKICAgICAga2xhc3MgPSBrbGFzcy5zdXBlcmNsYXNzIGFzIF9DbGFzc01pcnJvcjsKICAgIH0KICAgIHJldHVybiBfcyhfbihrbGFzcy5xdWFsaWZpZWROYW1lKSArCiAgICAgICAgJyB3aXRoICcgKwogICAgICAgIG1peGlucy5yZXZlcnNlZC5tYXAoKENsYXNzTWlycm9yIG0pID0+IF9uKG0ucXVhbGlmaWVkTmFtZSkpLmpvaW4oJywgJykpOwogIH0KCiAgQ2xhc3NNaXJyb3IgX21peGluOwogIENsYXNzTWlycm9yIGdldCBtaXhpbiB7CiAgICB2YXIgbSA9IF9taXhpbjsKICAgIGlmIChtICE9IG51bGwpIHJldHVybiBtOwoKICAgIFR5cGUgbWl4aW5UeXBlID0gX25hdGl2ZU1peGluSW5zdGFudGlhdGVkKF9yZWZsZWN0ZWRUeXBlLCBfaW5zdGFudGlhdG9yKTsKICAgIGlmIChtaXhpblR5cGUgPT0gbnVsbCkgewogICAgICAvLyBUaGUgcmVmbGVjdGVlIGlzIG5vdCBhIG1peGluIGFwcGxpY2F0aW9uLgogICAgICByZXR1cm4gX21peGluID0gdGhpczsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfbWl4aW4gPSByZWZsZWN0VHlwZShtaXhpblR5cGUpIGFzIENsYXNzTWlycm9yOwogICAgfQogIH0KCiAgdmFyIF9jYWNoZWRTdGF0aWNNZW1iZXJzOwogIE1hcDxTeW1ib2wsIE1ldGhvZE1pcnJvcj4gZ2V0IHN0YXRpY01lbWJlcnMgewogICAgdmFyIG0gPSBfY2FjaGVkU3RhdGljTWVtYmVyczsKICAgIGlmIChtICE9IG51bGwpIG07CgogICAgdmFyIHJlc3VsdCA9IG5ldyBNYXA8U3ltYm9sLCBNZXRob2RNaXJyb3I+KCk7CiAgICB2YXIgbGlicmFyeSA9IHRoaXMub3duZXIgYXMgTGlicmFyeU1pcnJvcjsKICAgIGRlY2xhcmF0aW9ucy52YWx1ZXMuZm9yRWFjaCgoZGVjbCkgewogICAgICBpZiAoZGVjbCBpcyBNZXRob2RNaXJyb3IgJiYgZGVjbC5pc1N0YXRpYyAmJiAhZGVjbC5pc0NvbnN0cnVjdG9yKSB7CiAgICAgICAgcmVzdWx0W2RlY2wuc2ltcGxlTmFtZV0gPSBkZWNsOwogICAgICB9CiAgICAgIGlmIChkZWNsIGlzIFZhcmlhYmxlTWlycm9yICYmIGRlY2wuaXNTdGF0aWMpIHsKICAgICAgICB2YXIgZ2V0dGVyTmFtZSA9IGRlY2wuc2ltcGxlTmFtZTsKICAgICAgICByZXN1bHRbZ2V0dGVyTmFtZV0gPQogICAgICAgICAgICBuZXcgX1N5bnRoZXRpY0FjY2Vzc29yKHRoaXMsIGdldHRlck5hbWUsIHRydWUsIHRydWUsIGZhbHNlLCBkZWNsKTsKICAgICAgICBpZiAoIWRlY2wuaXNGaW5hbCkgewogICAgICAgICAgdmFyIHNldHRlck5hbWUgPSBfYXNTZXR0ZXIoZGVjbC5zaW1wbGVOYW1lLCBsaWJyYXJ5KTsKICAgICAgICAgIHJlc3VsdFtzZXR0ZXJOYW1lXSA9IG5ldyBfU3ludGhldGljQWNjZXNzb3IoCiAgICAgICAgICAgICAgdGhpcywgc2V0dGVyTmFtZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBkZWNsKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIF9jYWNoZWRTdGF0aWNNZW1iZXJzID0KICAgICAgICBuZXcgVW5tb2RpZmlhYmxlTWFwVmlldzxTeW1ib2wsIE1ldGhvZE1pcnJvcj4ocmVzdWx0KTsKICB9CgogIHZhciBfY2FjaGVkSW5zdGFuY2VNZW1iZXJzOwogIE1hcDxTeW1ib2wsIE1ldGhvZE1pcnJvcj4gZ2V0IGluc3RhbmNlTWVtYmVycyB7CiAgICB2YXIgbSA9IF9jYWNoZWRJbnN0YW5jZU1lbWJlcnM7CiAgICBpZiAobSAhPSBudWxsKSByZXR1cm4gbTsKCiAgICB2YXIgcmVzdWx0ID0gbmV3IE1hcDxTeW1ib2wsIE1ldGhvZE1pcnJvcj4oKTsKICAgIHZhciBsaWJyYXJ5ID0gdGhpcy5vd25lciBhcyBMaWJyYXJ5TWlycm9yOwogICAgdmFyIHN1cCA9IHN1cGVyY2xhc3M7CiAgICBpZiAoc3VwICE9IG51bGwpIHsKICAgICAgcmVzdWx0LmFkZEFsbChzdXAuaW5zdGFuY2VNZW1iZXJzKTsKICAgIH0KICAgIGRlY2xhcmF0aW9ucy52YWx1ZXMuZm9yRWFjaCgoZGVjbCkgewogICAgICBpZiAoZGVjbCBpcyBNZXRob2RNaXJyb3IgJiYKICAgICAgICAgICFkZWNsLmlzU3RhdGljICYmCiAgICAgICAgICAhZGVjbC5pc0NvbnN0cnVjdG9yICYmCiAgICAgICAgICAhZGVjbC5pc0Fic3RyYWN0KSB7CiAgICAgICAgcmVzdWx0W2RlY2wuc2ltcGxlTmFtZV0gPSBkZWNsOwogICAgICB9CiAgICAgIGlmIChkZWNsIGlzIFZhcmlhYmxlTWlycm9yICYmICFkZWNsLmlzU3RhdGljKSB7CiAgICAgICAgdmFyIGdldHRlck5hbWUgPSBkZWNsLnNpbXBsZU5hbWU7CiAgICAgICAgcmVzdWx0W2dldHRlck5hbWVdID0KICAgICAgICAgICAgbmV3IF9TeW50aGV0aWNBY2Nlc3Nvcih0aGlzLCBnZXR0ZXJOYW1lLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGRlY2wpOwogICAgICAgIGlmICghZGVjbC5pc0ZpbmFsKSB7CiAgICAgICAgICB2YXIgc2V0dGVyTmFtZSA9IF9hc1NldHRlcihkZWNsLnNpbXBsZU5hbWUsIGxpYnJhcnkpOwogICAgICAgICAgcmVzdWx0W3NldHRlck5hbWVdID0gbmV3IF9TeW50aGV0aWNBY2Nlc3NvcigKICAgICAgICAgICAgICB0aGlzLCBzZXR0ZXJOYW1lLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBkZWNsKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIF9jYWNoZWRJbnN0YW5jZU1lbWJlcnMgPQogICAgICAgIG5ldyBVbm1vZGlmaWFibGVNYXBWaWV3PFN5bWJvbCwgTWV0aG9kTWlycm9yPihyZXN1bHQpOwogIH0KCiAgTWFwPFN5bWJvbCwgRGVjbGFyYXRpb25NaXJyb3I+IF9kZWNsYXJhdGlvbnM7CiAgTWFwPFN5bWJvbCwgRGVjbGFyYXRpb25NaXJyb3I+IGdldCBkZWNsYXJhdGlvbnMgewogICAgdmFyIGQgPSBfZGVjbGFyYXRpb25zOwogICAgaWYgKGQgIT0gbnVsbCkgcmV0dXJuIGQ7CgogICAgdmFyIGRlY2xzID0gbmV3IE1hcDxTeW1ib2wsIERlY2xhcmF0aW9uTWlycm9yPigpOwoKICAgIHZhciBtZW1iZXJzID0gX2NvbXB1dGVNZW1iZXJzKG1peGluLCBfaW5zdGFudGlhdG9yLCBfcmVmbGVjdGVlKTsKICAgIGZvciAodmFyIG1lbWJlciBpbiBtZW1iZXJzKSB7CiAgICAgIGRlY2xzW21lbWJlci5zaW1wbGVOYW1lXSA9IG1lbWJlcjsKICAgIH0KCiAgICB2YXIgY29uc3RydWN0b3JzID0gX2NvbXB1dGVDb25zdHJ1Y3RvcnMoX2luc3RhbnRpYXRvciwgX3JlZmxlY3RlZSk7CiAgICB2YXIgc3RyaW5nTmFtZSA9IF9uKHNpbXBsZU5hbWUpOwogICAgZm9yICh2YXIgY29uc3RydWN0b3IgaW4gY29uc3RydWN0b3JzKSB7CiAgICAgIGNvbnN0cnVjdG9yLl9wYXRjaENvbnN0cnVjdG9yTmFtZShzdHJpbmdOYW1lKTsKICAgICAgZGVjbHNbY29uc3RydWN0b3Iuc2ltcGxlTmFtZV0gPSBjb25zdHJ1Y3RvcjsKICAgIH0KCiAgICBmb3IgKHZhciB0eXBlVmFyaWFibGUgaW4gdHlwZVZhcmlhYmxlcykgewogICAgICBkZWNsc1t0eXBlVmFyaWFibGUuc2ltcGxlTmFtZV0gPSB0eXBlVmFyaWFibGU7CiAgICB9CgogICAgcmV0dXJuIF9kZWNsYXJhdGlvbnMgPQogICAgICAgIG5ldyBVbm1vZGlmaWFibGVNYXBWaWV3PFN5bWJvbCwgRGVjbGFyYXRpb25NaXJyb3I+KGRlY2xzKTsKICB9CgogIC8vIE5vdGU6IHJldHVybnMgY29ycmVjdCByZXN1bHQgb25seSBmb3IgRGFydCAxIGFub255bW91cyBtaXhpbiBhcHBsaWNhdGlvbnMuCiAgYm9vbCBnZXQgX2lzQW5vbnltb3VzTWl4aW5BcHBsaWNhdGlvbiB7CiAgICBpZiAobWl4aW4gPT0gdGhpcykgcmV0dXJuIGZhbHNlOyAvLyBOb3QgYSBtaXhpbiBhcHBsaWNhdGlvbi4KICAgIHJldHVybiB0cnVlOwogIH0KCiAgTGlzdDxUeXBlVmFyaWFibGVNaXJyb3I+IF90eXBlVmFyaWFibGVzOwogIExpc3Q8VHlwZVZhcmlhYmxlTWlycm9yPiBnZXQgdHlwZVZhcmlhYmxlcyB7CiAgICB2YXIgdiA9IF90eXBlVmFyaWFibGVzOwogICAgaWYgKHYgIT0gbnVsbCkgcmV0dXJuIHY7CgogICAgaWYgKCFfaXNUcmFuc2Zvcm1lZE1peGluQXBwbGljYXRpb24gJiYgX2lzQW5vbnltb3VzTWl4aW5BcHBsaWNhdGlvbikgewogICAgICByZXR1cm4gX3R5cGVWYXJpYWJsZXMgPSBjb25zdCA8VHlwZVZhcmlhYmxlTWlycm9yPltdOwogICAgfQogICAgdmFyIHJlc3VsdCA9IG5ldyBMaXN0PFR5cGVWYXJpYWJsZU1pcnJvcj4oKTsKCiAgICBMaXN0IHBhcmFtcyA9IF9DbGFzc01pcnJvcl90eXBlX3ZhcmlhYmxlcyhfcmVmbGVjdGVlKTsKICAgIENsYXNzTWlycm9yIG93bmVyID0gb3JpZ2luYWxEZWNsYXJhdGlvbjsKICAgIHZhciBtaXJyb3I7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkgKz0gMikgewogICAgICBtaXJyb3IgPSBuZXcgX1R5cGVWYXJpYWJsZU1pcnJvci5fKHBhcmFtc1tpICsgMV0sIHBhcmFtc1tpXSwgb3duZXIpOwogICAgICByZXN1bHQuYWRkKG1pcnJvcik7CiAgICB9CiAgICByZXR1cm4gX3R5cGVWYXJpYWJsZXMgPQogICAgICAgIG5ldyBVbm1vZGlmaWFibGVMaXN0VmlldzxUeXBlVmFyaWFibGVNaXJyb3I+KHJlc3VsdCk7CiAgfQoKICBMaXN0PFR5cGVNaXJyb3I+IF90eXBlQXJndW1lbnRzOwogIExpc3Q8VHlwZU1pcnJvcj4gZ2V0IHR5cGVBcmd1bWVudHMgewogICAgdmFyIGEgPSBfdHlwZUFyZ3VtZW50czsKICAgIGlmIChhICE9IG51bGwpIHJldHVybiBhOwoKICAgIGlmIChfaXNHZW5lcmljRGVjbGFyYXRpb24gfHwKICAgICAgICAoIV9pc1RyYW5zZm9ybWVkTWl4aW5BcHBsaWNhdGlvbiAmJiBfaXNBbm9ueW1vdXNNaXhpbkFwcGxpY2F0aW9uKSkgewogICAgICByZXR1cm4gX3R5cGVBcmd1bWVudHMgPSBjb25zdCA8VHlwZU1pcnJvcj5bXTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfdHlwZUFyZ3VtZW50cyA9IG5ldyBVbm1vZGlmaWFibGVMaXN0VmlldzxUeXBlTWlycm9yPigKICAgICAgICAgIF9jb21wdXRlVHlwZUFyZ3VtZW50cyhfcmVmbGVjdGVkVHlwZSkuY2FzdDxUeXBlTWlycm9yPigpKTsKICAgIH0KICB9CgogIGJvb2wgZ2V0IGlzT3JpZ2luYWxEZWNsYXJhdGlvbiA9PiAhX2lzR2VuZXJpYyB8fCBfaXNHZW5lcmljRGVjbGFyYXRpb247CgogIENsYXNzTWlycm9yIGdldCBvcmlnaW5hbERlY2xhcmF0aW9uIHsKICAgIGlmIChpc09yaWdpbmFsRGVjbGFyYXRpb24pIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gcmVmbGVjdENsYXNzKF9yZWZsZWN0ZWRUeXBlKTsKICAgIH0KICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJDbGFzc01pcnJvciBvbiAnJHtNaXJyb3JTeXN0ZW0uZ2V0TmFtZShzaW1wbGVOYW1lKX0nIjsKCiAgSW5zdGFuY2VNaXJyb3IgbmV3SW5zdGFuY2UoCiAgICAgIFN5bWJvbCBjb25zdHJ1Y3Rvck5hbWUsIExpc3Q8ZHluYW1pYz4gcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgW01hcDxTeW1ib2wsIGR5bmFtaWM+IG5hbWVkQXJndW1lbnRzXSkgewogICAgLy8gTmF0aXZlIGNvZGUgd2lsbCBhZGQgdGhlIDEgb3IgMiBpbXBsaWNpdCBhcmd1bWVudHMgZGVwZW5kaW5nIG9uIHdoZXRoZXIKICAgIC8vIHdlIGVuZCB1cCBpbnZva2luZyBhIGZhY3Rvcnkgb3IgY29uc3RydWN0b3IgcmVzcGVjdGl2ZWx5LgogICAgaW50IG51bVBvc2l0aW9uYWxBcmd1bWVudHMgPSBwb3NpdGlvbmFsQXJndW1lbnRzLmxlbmd0aDsKICAgIGludCBudW1OYW1lZEFyZ3VtZW50cyA9IG5hbWVkQXJndW1lbnRzICE9IG51bGwgPyBuYW1lZEFyZ3VtZW50cy5sZW5ndGggOiAwOwogICAgaW50IG51bUFyZ3VtZW50cyA9IG51bVBvc2l0aW9uYWxBcmd1bWVudHMgKyBudW1OYW1lZEFyZ3VtZW50czsKICAgIExpc3QgYXJndW1lbnRzID0gbmV3IExpc3QobnVtQXJndW1lbnRzKTsKICAgIGFyZ3VtZW50cy5zZXRSYW5nZSgwLCBudW1Qb3NpdGlvbmFsQXJndW1lbnRzLCBwb3NpdGlvbmFsQXJndW1lbnRzKTsKICAgIExpc3QgbmFtZXMgPSBuZXcgTGlzdChudW1OYW1lZEFyZ3VtZW50cyk7CiAgICBpbnQgYXJndW1lbnRJbmRleCA9IG51bVBvc2l0aW9uYWxBcmd1bWVudHM7CiAgICBpbnQgbmFtZUluZGV4ID0gMDsKICAgIGlmIChudW1OYW1lZEFyZ3VtZW50cyA+IDApIHsKICAgICAgbmFtZWRBcmd1bWVudHMuZm9yRWFjaCgobmFtZSwgdmFsdWUpIHsKICAgICAgICBhcmd1bWVudHNbYXJndW1lbnRJbmRleCsrXSA9IHZhbHVlOwogICAgICAgIG5hbWVzW25hbWVJbmRleCsrXSA9IF9uKG5hbWUpOwogICAgICB9KTsKICAgIH0KCiAgICByZXR1cm4gcmVmbGVjdChfaW52b2tlQ29uc3RydWN0b3IoCiAgICAgICAgX3JlZmxlY3RlZSwgX3JlZmxlY3RlZFR5cGUsIF9uKGNvbnN0cnVjdG9yTmFtZSksIGFyZ3VtZW50cywgbmFtZXMpKTsKICB9CgogIExpc3Q8SW5zdGFuY2VNaXJyb3I+IGdldCBtZXRhZGF0YSB7CiAgICByZXR1cm4gX3dyYXBNZXRhZGF0YShfbWV0YWRhdGEoX3JlZmxlY3RlZSkpOwogIH0KCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgcmV0dXJuIHRoaXMucnVudGltZVR5cGUgPT0gb3RoZXIucnVudGltZVR5cGUgJiYKICAgICAgICB0aGlzLl9yZWZsZWN0ZWUgPT0gb3RoZXIuX3JlZmxlY3RlZSAmJgogICAgICAgIHRoaXMuX3JlZmxlY3RlZFR5cGUgPT0gb3RoZXIuX3JlZmxlY3RlZFR5cGUgJiYKICAgICAgICB0aGlzLl9pc0dlbmVyaWNEZWNsYXJhdGlvbiA9PSBvdGhlci5faXNHZW5lcmljRGVjbGFyYXRpb247CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHNpbXBsZU5hbWUuaGFzaENvZGU7CgogIGJvb2wgaXNTdWJ0eXBlT2YoVHlwZU1pcnJvciBvdGhlcikgewogICAgaWYgKG90aGVyID09IGN1cnJlbnRNaXJyb3JTeXN0ZW0oKS5keW5hbWljVHlwZSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgPT0gY3VycmVudE1pcnJvclN5c3RlbSgpLnZvaWRUeXBlKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciA9PSBjdXJyZW50TWlycm9yU3lzdGVtKCkubmV2ZXJUeXBlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX3N1YnR5cGVUZXN0KF9yZWZsZWN0ZWRUeXBlLCAob3RoZXIgYXMgX1R5cGVNaXJyb3IpLl9yZWZsZWN0ZWRUeXBlKTsKICB9CgogIGJvb2wgaXNBc3NpZ25hYmxlVG8oVHlwZU1pcnJvciBvdGhlcikgewogICAgaWYgKG90aGVyID09IGN1cnJlbnRNaXJyb3JTeXN0ZW0oKS5keW5hbWljVHlwZSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgPT0gY3VycmVudE1pcnJvclN5c3RlbSgpLnZvaWRUeXBlKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciA9PSBjdXJyZW50TWlycm9yU3lzdGVtKCkubmV2ZXJUeXBlKSByZXR1cm4gZmFsc2U7CiAgICBmaW5hbCBvdGhlclJlZmxlY3RlZFR5cGUgPSAob3RoZXIgYXMgX1R5cGVNaXJyb3IpLl9yZWZsZWN0ZWRUeXBlOwogICAgcmV0dXJuIF9zdWJ0eXBlVGVzdChfcmVmbGVjdGVkVHlwZSwgb3RoZXJSZWZsZWN0ZWRUeXBlKSB8fAogICAgICAgIF9zdWJ0eXBlVGVzdChvdGhlclJlZmxlY3RlZFR5cGUsIF9yZWZsZWN0ZWRUeXBlKTsKICB9CgogIGJvb2wgaXNTdWJjbGFzc09mKENsYXNzTWlycm9yIG90aGVyKSB7CiAgICBpZiAob3RoZXIgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCdvdGhlcicpOwogICAgfQogICAgQ2xhc3NNaXJyb3Igb3RoZXJEZWNsYXJhdGlvbiA9IG90aGVyLm9yaWdpbmFsRGVjbGFyYXRpb24gYXMgQ2xhc3NNaXJyb3I7CiAgICBDbGFzc01pcnJvciBjID0gdGhpczsKICAgIHdoaWxlIChjICE9IG51bGwpIHsKICAgICAgYyA9IGMub3JpZ2luYWxEZWNsYXJhdGlvbiBhcyBDbGFzc01pcnJvcjsKICAgICAgaWYgKGMgPT0gb3RoZXJEZWNsYXJhdGlvbikgcmV0dXJuIHRydWU7CiAgICAgIGMgPSBjLnN1cGVyY2xhc3MgYXMgQ2xhc3NNaXJyb3I7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF9saWJyYXJ5VXJpKHJlZmxlY3RlZSkgbmF0aXZlICJDbGFzc01pcnJvcl9saWJyYXJ5VXJpIjsKCiAgc3RhdGljIFR5cGUgX3N1cGVydHlwZShyZWZsZWN0ZWRUeXBlKSBuYXRpdmUgIkNsYXNzTWlycm9yX3N1cGVydHlwZSI7CgogIHN0YXRpYyBUeXBlIF9zdXBlcnR5cGVJbnN0YW50aWF0ZWQocmVmbGVjdGVkVHlwZSkKICAgICAgbmF0aXZlICJDbGFzc01pcnJvcl9zdXBlcnR5cGVfaW5zdGFudGlhdGVkIjsKCiAgc3RhdGljIExpc3Q8ZHluYW1pYz4gX25hdGl2ZUludGVyZmFjZXMocmVmbGVjdGVkVHlwZSkKICAgICAgbmF0aXZlICJDbGFzc01pcnJvcl9pbnRlcmZhY2VzIjsKCiAgc3RhdGljIExpc3Q8ZHluYW1pYz4gX25hdGl2ZUludGVyZmFjZXNJbnN0YW50aWF0ZWQocmVmbGVjdGVkVHlwZSkKICAgICAgbmF0aXZlICJDbGFzc01pcnJvcl9pbnRlcmZhY2VzX2luc3RhbnRpYXRlZCI7CgogIHN0YXRpYyBUeXBlIF9uYXRpdmVNaXhpbihyZWZsZWN0ZWRUeXBlKSBuYXRpdmUgIkNsYXNzTWlycm9yX21peGluIjsKCiAgc3RhdGljIFR5cGUgX25hdGl2ZU1peGluSW5zdGFudGlhdGVkKHJlZmxlY3RlZFR5cGUsIGluc3RhbnRpYXRvcikKICAgICAgbmF0aXZlICJDbGFzc01pcnJvcl9taXhpbl9pbnN0YW50aWF0ZWQiOwoKICBzdGF0aWMgTGlzdDxkeW5hbWljPiBfY29tcHV0ZU1lbWJlcnMob3duZXIsIHJlZmxlY3RlZSwgaW5zdGFudGlhdG9yKQogICAgICBuYXRpdmUgIkNsYXNzTWlycm9yX21lbWJlcnMiOwoKICBMaXN0PGR5bmFtaWM+IF9jb21wdXRlQ29uc3RydWN0b3JzKHJlZmxlY3RlZSwgaW5zdGFudGlhdG9yKQogICAgICBuYXRpdmUgIkNsYXNzTWlycm9yX2NvbnN0cnVjdG9ycyI7CgogIF9pbnZva2UocmVmbGVjdGVlLCBtZW1iZXJOYW1lLCBhcmd1bWVudHMsIGFyZ3VtZW50TmFtZXMpCiAgICAgIG5hdGl2ZSAnQ2xhc3NNaXJyb3JfaW52b2tlJzsKCiAgX2ludm9rZUdldHRlcihyZWZsZWN0ZWUsIGdldHRlck5hbWUpIG5hdGl2ZSAnQ2xhc3NNaXJyb3JfaW52b2tlR2V0dGVyJzsKCiAgX2ludm9rZVNldHRlcihyZWZsZWN0ZWUsIHNldHRlck5hbWUsIHZhbHVlKSBuYXRpdmUgJ0NsYXNzTWlycm9yX2ludm9rZVNldHRlcic7CgogIHN0YXRpYyBfaW52b2tlQ29uc3RydWN0b3IocmVmbGVjdGVlLCB0eXBlLCBjb25zdHJ1Y3Rvck5hbWUsIGFyZ3VtZW50cywKICAgICAgYXJndW1lbnROYW1lcykgbmF0aXZlICdDbGFzc01pcnJvcl9pbnZva2VDb25zdHJ1Y3Rvcic7CgogIHN0YXRpYyBMaXN0PGR5bmFtaWM+IF9DbGFzc01pcnJvcl90eXBlX3ZhcmlhYmxlcyhyZWZsZWN0ZWUpCiAgICAgIG5hdGl2ZSAiQ2xhc3NNaXJyb3JfdHlwZV92YXJpYWJsZXMiOwoKICBzdGF0aWMgTGlzdDxkeW5hbWljPiBfY29tcHV0ZVR5cGVBcmd1bWVudHMocmVmbGVjdGVlKQogICAgICBuYXRpdmUgIkNsYXNzTWlycm9yX3R5cGVfYXJndW1lbnRzIjsKfQoKY2xhc3MgX0Z1bmN0aW9uVHlwZU1pcnJvciBleHRlbmRzIF9DbGFzc01pcnJvciBpbXBsZW1lbnRzIEZ1bmN0aW9uVHlwZU1pcnJvciB7CiAgZmluYWwgX2Z1bmN0aW9uUmVmbGVjdGVlOwogIF9GdW5jdGlvblR5cGVNaXJyb3IuXyhyZWZsZWN0ZWUsIHRoaXMuX2Z1bmN0aW9uUmVmbGVjdGVlLCByZWZsZWN0ZWRUeXBlKQogICAgICA6IHN1cGVyLl8ocmVmbGVjdGVlLCByZWZsZWN0ZWRUeXBlLCBudWxsLCBudWxsLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAogICAgICAgICAgICBmYWxzZSwgZmFsc2UpOwoKICBib29sIGdldCBfaXNBbm9ueW1vdXNNaXhpbkFwcGxpY2F0aW9uID0+IGZhbHNlOwoKICAvLyBGdW5jdGlvblR5cGVNaXJyb3JzIGhhdmUgYSBzaW1wbGVOYW1lIGdlbmVyYXRlZCBmcm9tIHRoZWlyIHNpZ25hdHVyZS4KICBTeW1ib2wgX3NpbXBsZU5hbWU7CiAgU3ltYm9sIGdldCBzaW1wbGVOYW1lIHsKICAgIHZhciBuID0gX3NpbXBsZU5hbWU7CiAgICBpZiAobiAhPSBudWxsKSByZXR1cm4gbjsKICAgIHJldHVybiBfc2ltcGxlTmFtZSA9IF9zKF9tYWtlU2lnbmF0dXJlU3RyaW5nKHJldHVyblR5cGUsIHBhcmFtZXRlcnMpKTsKICB9CgogIE1ldGhvZE1pcnJvciBfY2FsbE1ldGhvZDsKICBNZXRob2RNaXJyb3IgZ2V0IGNhbGxNZXRob2QgewogICAgdmFyIG0gPSBfY2FsbE1ldGhvZDsKICAgIGlmIChtICE9IG51bGwpIHJldHVybiBtOwogICAgcmV0dXJuIF9jYWxsTWV0aG9kID0gX0Z1bmN0aW9uVHlwZU1pcnJvcl9jYWxsX21ldGhvZChfZnVuY3Rpb25SZWZsZWN0ZWUpOwogIH0KCiAgVHlwZU1pcnJvciBfcmV0dXJuVHlwZTsKICBUeXBlTWlycm9yIGdldCByZXR1cm5UeXBlIHsKICAgIHZhciB0ID0gX3JldHVyblR5cGU7CiAgICBpZiAodCAhPSBudWxsKSByZXR1cm4gdDsKICAgIHJldHVybiBfcmV0dXJuVHlwZSA9CiAgICAgICAgcmVmbGVjdFR5cGUoX0Z1bmN0aW9uVHlwZU1pcnJvcl9yZXR1cm5fdHlwZShfZnVuY3Rpb25SZWZsZWN0ZWUpKTsKICB9CgogIExpc3Q8UGFyYW1ldGVyTWlycm9yPiBfcGFyYW1ldGVyczsKICBMaXN0PFBhcmFtZXRlck1pcnJvcj4gZ2V0IHBhcmFtZXRlcnMgewogICAgdmFyIHAgPSBfcGFyYW1ldGVyczsKICAgIGlmIChwICE9IG51bGwpIHJldHVybiBwOwogICAgcmV0dXJuIF9wYXJhbWV0ZXJzID0gbmV3IFVubW9kaWZpYWJsZUxpc3RWaWV3PFBhcmFtZXRlck1pcnJvcj4oCiAgICAgICAgX0Z1bmN0aW9uVHlwZU1pcnJvcl9wYXJhbWV0ZXJzKF9mdW5jdGlvblJlZmxlY3RlZSkKICAgICAgICAgICAgLmNhc3Q8UGFyYW1ldGVyTWlycm9yPigpKTsKICB9CgogIGJvb2wgZ2V0IGlzT3JpZ2luYWxEZWNsYXJhdGlvbiA9PiB0cnVlOwogIENsYXNzTWlycm9yIGdldCBvcmlnaW5hbERlY2xhcmF0aW9uID0+IHRoaXM7CiAgTGlzdDxUeXBlVmFyaWFibGVNaXJyb3I+IGdldCB0eXBlVmFyaWFibGVzID0+IGNvbnN0IDxUeXBlVmFyaWFibGVNaXJyb3I+W107CiAgTGlzdDxUeXBlTWlycm9yPiBnZXQgdHlwZUFyZ3VtZW50cyA9PiBjb25zdCA8VHlwZU1pcnJvcj5bXTsKICBMaXN0PEluc3RhbmNlTWlycm9yPiBnZXQgbWV0YWRhdGEgPT4gY29uc3QgPEluc3RhbmNlTWlycm9yPltdOwogIFNvdXJjZUxvY2F0aW9uIGdldCBsb2NhdGlvbiA9PiBudWxsOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiRnVuY3Rpb25UeXBlTWlycm9yIG9uICcke19uKHNpbXBsZU5hbWUpfSciOwoKICBNZXRob2RNaXJyb3IgX0Z1bmN0aW9uVHlwZU1pcnJvcl9jYWxsX21ldGhvZChmdW5jdGlvblJlZmxlY3RlZSkKICAgICAgbmF0aXZlICJGdW5jdGlvblR5cGVNaXJyb3JfY2FsbF9tZXRob2QiOwoKICBzdGF0aWMgVHlwZSBfRnVuY3Rpb25UeXBlTWlycm9yX3JldHVybl90eXBlKGZ1bmN0aW9uUmVmbGVjdGVlKQogICAgICBuYXRpdmUgIkZ1bmN0aW9uVHlwZU1pcnJvcl9yZXR1cm5fdHlwZSI7CgogIExpc3Q8ZHluYW1pYz4gX0Z1bmN0aW9uVHlwZU1pcnJvcl9wYXJhbWV0ZXJzKGZ1bmN0aW9uUmVmbGVjdGVlKQogICAgICBuYXRpdmUgIkZ1bmN0aW9uVHlwZU1pcnJvcl9wYXJhbWV0ZXJzIjsKfQoKYWJzdHJhY3QgY2xhc3MgX0RlY2xhcmF0aW9uTWlycm9yIGV4dGVuZHMgTWlycm9yIGltcGxlbWVudHMgRGVjbGFyYXRpb25NaXJyb3IgewogIGZpbmFsIF9yZWZsZWN0ZWU7CiAgU3ltYm9sIF9zaW1wbGVOYW1lOwoKICBfRGVjbGFyYXRpb25NaXJyb3IuXyh0aGlzLl9yZWZsZWN0ZWUsIHRoaXMuX3NpbXBsZU5hbWUpOwoKICBTeW1ib2wgZ2V0IHNpbXBsZU5hbWUgPT4gX3NpbXBsZU5hbWU7CgogIFN5bWJvbCBfcXVhbGlmaWVkTmFtZTsKICBTeW1ib2wgZ2V0IHF1YWxpZmllZE5hbWUgewogICAgdmFyIG4gPSBfcXVhbGlmaWVkTmFtZTsKICAgIGlmIChuICE9IG51bGwpIHJldHVybiBuOwogICAgcmV0dXJuIF9xdWFsaWZpZWROYW1lID0gX2NvbXB1dGVRdWFsaWZpZWROYW1lKG93bmVyLCBzaW1wbGVOYW1lKTsKICB9CgogIGJvb2wgZ2V0IGlzUHJpdmF0ZSA9PiBfbihzaW1wbGVOYW1lKS5zdGFydHNXaXRoKCdfJyk7CgogIFNvdXJjZUxvY2F0aW9uIGdldCBsb2NhdGlvbiB7CiAgICByZXR1cm4gX2xvY2F0aW9uKF9yZWZsZWN0ZWUpOwogIH0KCiAgTGlzdDxJbnN0YW5jZU1pcnJvcj4gZ2V0IG1ldGFkYXRhIHsKICAgIHJldHVybiBfd3JhcE1ldGFkYXRhKF9tZXRhZGF0YShfcmVmbGVjdGVlKSk7CiAgfQoKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICByZXR1cm4gdGhpcy5ydW50aW1lVHlwZSA9PSBvdGhlci5ydW50aW1lVHlwZSAmJgogICAgICAgIHRoaXMuX3JlZmxlY3RlZSA9PSBvdGhlci5fcmVmbGVjdGVlOwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSA9PiBzaW1wbGVOYW1lLmhhc2hDb2RlOwp9CgpjbGFzcyBfVHlwZVZhcmlhYmxlTWlycm9yIGV4dGVuZHMgX0RlY2xhcmF0aW9uTWlycm9yCiAgICBpbXBsZW1lbnRzIFR5cGVWYXJpYWJsZU1pcnJvciwgX1R5cGVNaXJyb3IgewogIF9UeXBlVmFyaWFibGVNaXJyb3IuXyhyZWZsZWN0ZWUsIFN0cmluZyBzaW1wbGVOYW1lLCB0aGlzLl9vd25lcikKICAgICAgOiBzdXBlci5fKHJlZmxlY3RlZSwgX3Moc2ltcGxlTmFtZSkpOwoKICBEZWNsYXJhdGlvbk1pcnJvciBfb3duZXI7CiAgRGVjbGFyYXRpb25NaXJyb3IgZ2V0IG93bmVyIHsKICAgIHZhciBvID0gX293bmVyOwogICAgaWYgKG8gIT0gbnVsbCkgcmV0dXJuIG87CiAgICByZXR1cm4gX293bmVyID0gKF9UeXBlVmFyaWFibGVNaXJyb3Jfb3duZXIoX3JlZmxlY3RlZSkgYXMgVHlwZU1pcnJvcikKICAgICAgICAub3JpZ2luYWxEZWNsYXJhdGlvbjsKICB9CgogIGJvb2wgZ2V0IGlzU3RhdGljID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzVG9wTGV2ZWwgPT4gZmFsc2U7CgogIFR5cGVNaXJyb3IgX3VwcGVyQm91bmQ7CiAgVHlwZU1pcnJvciBnZXQgdXBwZXJCb3VuZCB7CiAgICB2YXIgYiA9IF91cHBlckJvdW5kOwogICAgaWYgKGIgIT0gbnVsbCkgcmV0dXJuIGI7CiAgICByZXR1cm4gX3VwcGVyQm91bmQgPQogICAgICAgIHJlZmxlY3RUeXBlKF9UeXBlVmFyaWFibGVNaXJyb3JfdXBwZXJfYm91bmQoX3JlZmxlY3RlZSkpOwogIH0KCiAgYm9vbCBnZXQgaGFzUmVmbGVjdGVkVHlwZSA9PiBmYWxzZTsKICBUeXBlIGdldCByZWZsZWN0ZWRUeXBlIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdUeXBlIHZhcmlhYmxlcyBoYXZlIG5vIHJlZmxlY3RlZCB0eXBlJyk7CiAgfQoKICBUeXBlIGdldCBfcmVmbGVjdGVkVHlwZSA9PiBfcmVmbGVjdGVlOwoKICBMaXN0PFR5cGVWYXJpYWJsZU1pcnJvcj4gZ2V0IHR5cGVWYXJpYWJsZXMgPT4gY29uc3QgPFR5cGVWYXJpYWJsZU1pcnJvcj5bXTsKICBMaXN0PFR5cGVNaXJyb3I+IGdldCB0eXBlQXJndW1lbnRzID0+IGNvbnN0IDxUeXBlTWlycm9yPltdOwoKICBib29sIGdldCBpc09yaWdpbmFsRGVjbGFyYXRpb24gPT4gdHJ1ZTsKICBUeXBlTWlycm9yIGdldCBvcmlnaW5hbERlY2xhcmF0aW9uID0+IHRoaXM7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJUeXBlVmFyaWFibGVNaXJyb3Igb24gJyR7X24oc2ltcGxlTmFtZSl9JyI7CgogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIHJldHVybiBvdGhlciBpcyBUeXBlVmFyaWFibGVNaXJyb3IgJiYKICAgICAgICBzaW1wbGVOYW1lID09IG90aGVyLnNpbXBsZU5hbWUgJiYKICAgICAgICBvd25lciA9PSBvdGhlci5vd25lcjsKICB9CgogIGludCBnZXQgaGFzaENvZGUgPT4gc2ltcGxlTmFtZS5oYXNoQ29kZTsKCiAgYm9vbCBpc1N1YnR5cGVPZihUeXBlTWlycm9yIG90aGVyKSB7CiAgICBpZiAob3RoZXIgPT0gY3VycmVudE1pcnJvclN5c3RlbSgpLmR5bmFtaWNUeXBlKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciA9PSBjdXJyZW50TWlycm9yU3lzdGVtKCkudm9pZFR5cGUpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyID09IGN1cnJlbnRNaXJyb3JTeXN0ZW0oKS5uZXZlclR5cGUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBfc3VidHlwZVRlc3QoX3JlZmxlY3RlZFR5cGUsIChvdGhlciBhcyBfVHlwZU1pcnJvcikuX3JlZmxlY3RlZFR5cGUpOwogIH0KCiAgYm9vbCBpc0Fzc2lnbmFibGVUbyhUeXBlTWlycm9yIG90aGVyKSB7CiAgICBpZiAob3RoZXIgPT0gY3VycmVudE1pcnJvclN5c3RlbSgpLmR5bmFtaWNUeXBlKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciA9PSBjdXJyZW50TWlycm9yU3lzdGVtKCkudm9pZFR5cGUpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyID09IGN1cnJlbnRNaXJyb3JTeXN0ZW0oKS5uZXZlclR5cGUpIHJldHVybiBmYWxzZTsKICAgIGZpbmFsIG90aGVyUmVmbGVjdGVkVHlwZSA9IChvdGhlciBhcyBfVHlwZU1pcnJvcikuX3JlZmxlY3RlZFR5cGU7CiAgICByZXR1cm4gX3N1YnR5cGVUZXN0KF9yZWZsZWN0ZWRUeXBlLCBvdGhlclJlZmxlY3RlZFR5cGUpIHx8CiAgICAgICAgX3N1YnR5cGVUZXN0KG90aGVyUmVmbGVjdGVkVHlwZSwgX3JlZmxlY3RlZFR5cGUpOwogIH0KCiAgc3RhdGljIERlY2xhcmF0aW9uTWlycm9yIF9UeXBlVmFyaWFibGVNaXJyb3Jfb3duZXIocmVmbGVjdGVlKQogICAgICBuYXRpdmUgIlR5cGVWYXJpYWJsZU1pcnJvcl9vd25lciI7CgogIHN0YXRpYyBUeXBlIF9UeXBlVmFyaWFibGVNaXJyb3JfdXBwZXJfYm91bmQocmVmbGVjdGVlKQogICAgICBuYXRpdmUgIlR5cGVWYXJpYWJsZU1pcnJvcl91cHBlcl9ib3VuZCI7Cn0KCmNsYXNzIF9UeXBlZGVmTWlycm9yIGV4dGVuZHMgX0RlY2xhcmF0aW9uTWlycm9yCiAgICBpbXBsZW1lbnRzIFR5cGVkZWZNaXJyb3IsIF9UeXBlTWlycm9yIHsKICBmaW5hbCBUeXBlIF9yZWZsZWN0ZWRUeXBlOwogIGZpbmFsIGJvb2wgX2lzR2VuZXJpYzsKICBmaW5hbCBib29sIF9pc0dlbmVyaWNEZWNsYXJhdGlvbjsKCiAgX1R5cGVkZWZNaXJyb3IocmVmbGVjdGVlLCB0aGlzLl9yZWZsZWN0ZWRUeXBlLCBTdHJpbmcgc2ltcGxlTmFtZSwKICAgICAgdGhpcy5faXNHZW5lcmljLCB0aGlzLl9pc0dlbmVyaWNEZWNsYXJhdGlvbiwgdGhpcy5fb3duZXIpCiAgICAgIDogc3VwZXIuXyhyZWZsZWN0ZWUsIF9zKHNpbXBsZU5hbWUpKTsKCiAgYm9vbCBnZXQgaXNUb3BMZXZlbCA9PiB0cnVlOwoKICBEZWNsYXJhdGlvbk1pcnJvciBfb3duZXI7CiAgRGVjbGFyYXRpb25NaXJyb3IgZ2V0IG93bmVyIHsKICAgIHZhciBvID0gX293bmVyOwogICAgaWYgKG8gIT0gbnVsbCkgcmV0dXJuIG87CiAgICB2YXIgdXJpID0gX0NsYXNzTWlycm9yLl9saWJyYXJ5VXJpKF9yZWZsZWN0ZWUpOwogICAgcmV0dXJuIF9vd25lciA9IGN1cnJlbnRNaXJyb3JTeXN0ZW0oKS5saWJyYXJpZXNbVXJpLnBhcnNlKHVyaSldOwogIH0KCiAgX0Z1bmN0aW9uVHlwZU1pcnJvciBfcmVmZXJlbnQ7CiAgRnVuY3Rpb25UeXBlTWlycm9yIGdldCByZWZlcmVudCB7CiAgICB2YXIgciA9IF9yZWZlcmVudDsKICAgIGlmIChyICE9IG51bGwpIHJldHVybiByOwogICAgdmFyIHJlc3VsdCA9IF9uYXRpdmVSZWZlcmVudChfcmVmbGVjdGVkVHlwZSkgYXMgX0Z1bmN0aW9uVHlwZU1pcnJvcjsKICAgIHJlc3VsdC5faW5zdGFudGlhdG9yID0gX3JlZmxlY3RlZFR5cGU7CiAgICByZXR1cm4gX3JlZmVyZW50ID0gcmVzdWx0OwogIH0KCiAgYm9vbCBnZXQgaGFzUmVmbGVjdGVkVHlwZSA9PiAhX2lzR2VuZXJpY0RlY2xhcmF0aW9uOwogIFR5cGUgZ2V0IHJlZmxlY3RlZFR5cGUgewogICAgaWYgKCFoYXNSZWZsZWN0ZWRUeXBlKSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgIkRlY2xhcmF0aW9ucyBvZiBnZW5lcmljcyBoYXZlIG5vIHJlZmxlY3RlZCB0eXBlIik7CiAgICB9CiAgICByZXR1cm4gX3JlZmxlY3RlZFR5cGU7CiAgfQoKICBib29sIGdldCBpc09yaWdpbmFsRGVjbGFyYXRpb24gPT4gIV9pc0dlbmVyaWMgfHwgX2lzR2VuZXJpY0RlY2xhcmF0aW9uOwoKICBUeXBlZGVmTWlycm9yIGdldCBvcmlnaW5hbERlY2xhcmF0aW9uIHsKICAgIGlmIChpc09yaWdpbmFsRGVjbGFyYXRpb24pIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX25hdGl2ZURlY2xhcmF0aW9uKF9yZWZsZWN0ZWRUeXBlKTsKICAgIH0KICB9CgogIExpc3Q8VHlwZVZhcmlhYmxlTWlycm9yPiBfdHlwZVZhcmlhYmxlczsKICBMaXN0PFR5cGVWYXJpYWJsZU1pcnJvcj4gZ2V0IHR5cGVWYXJpYWJsZXMgewogICAgdmFyIHYgPSBfdHlwZVZhcmlhYmxlczsKICAgIGlmICh2ICE9IG51bGwpIHJldHVybiB2OwoKICAgIHZhciByZXN1bHQgPSBuZXcgTGlzdDxUeXBlVmFyaWFibGVNaXJyb3I+KCk7CiAgICBMaXN0IHBhcmFtcyA9IF9DbGFzc01pcnJvci5fQ2xhc3NNaXJyb3JfdHlwZV92YXJpYWJsZXMoX3JlZmxlY3RlZSk7CiAgICBUeXBlZGVmTWlycm9yIG93bmVyID0gb3JpZ2luYWxEZWNsYXJhdGlvbjsKICAgIHZhciBtaXJyb3I7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkgKz0gMikgewogICAgICBtaXJyb3IgPSBuZXcgX1R5cGVWYXJpYWJsZU1pcnJvci5fKHBhcmFtc1tpICsgMV0sIHBhcmFtc1tpXSwgb3duZXIpOwogICAgICByZXN1bHQuYWRkKG1pcnJvcik7CiAgICB9CiAgICByZXR1cm4gX3R5cGVWYXJpYWJsZXMgPQogICAgICAgIG5ldyBVbm1vZGlmaWFibGVMaXN0VmlldzxUeXBlVmFyaWFibGVNaXJyb3I+KHJlc3VsdCk7CiAgfQoKICBMaXN0PFR5cGVNaXJyb3I+IF90eXBlQXJndW1lbnRzOwogIExpc3Q8VHlwZU1pcnJvcj4gZ2V0IHR5cGVBcmd1bWVudHMgewogICAgdmFyIGEgPSBfdHlwZUFyZ3VtZW50czsKICAgIGlmIChhICE9IG51bGwpIHJldHVybiBhOwoKICAgIGlmIChfaXNHZW5lcmljRGVjbGFyYXRpb24pIHsKICAgICAgcmV0dXJuIF90eXBlQXJndW1lbnRzID0gY29uc3QgPFR5cGVNaXJyb3I+W107CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX3R5cGVBcmd1bWVudHMgPSBuZXcgVW5tb2RpZmlhYmxlTGlzdFZpZXc8VHlwZU1pcnJvcj4oCiAgICAgICAgICBfQ2xhc3NNaXJyb3IuX2NvbXB1dGVUeXBlQXJndW1lbnRzKF9yZWZsZWN0ZWRUeXBlKQogICAgICAgICAgICAgIC5jYXN0PFR5cGVNaXJyb3I+KCkpOwogICAgfQogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIlR5cGVkZWZNaXJyb3Igb24gJyR7X24oc2ltcGxlTmFtZSl9JyI7CgogIGJvb2wgaXNTdWJ0eXBlT2YoVHlwZU1pcnJvciBvdGhlcikgewogICAgaWYgKG90aGVyID09IGN1cnJlbnRNaXJyb3JTeXN0ZW0oKS5keW5hbWljVHlwZSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgPT0gY3VycmVudE1pcnJvclN5c3RlbSgpLnZvaWRUeXBlKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciA9PSBjdXJyZW50TWlycm9yU3lzdGVtKCkubmV2ZXJUeXBlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX3N1YnR5cGVUZXN0KF9yZWZsZWN0ZWRUeXBlLCAob3RoZXIgYXMgX1R5cGVNaXJyb3IpLl9yZWZsZWN0ZWRUeXBlKTsKICB9CgogIGJvb2wgaXNBc3NpZ25hYmxlVG8oVHlwZU1pcnJvciBvdGhlcikgewogICAgaWYgKG90aGVyID09IGN1cnJlbnRNaXJyb3JTeXN0ZW0oKS5keW5hbWljVHlwZSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgPT0gY3VycmVudE1pcnJvclN5c3RlbSgpLnZvaWRUeXBlKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciA9PSBjdXJyZW50TWlycm9yU3lzdGVtKCkubmV2ZXJUeXBlKSByZXR1cm4gZmFsc2U7CiAgICBmaW5hbCBvdGhlclJlZmxlY3RlZFR5cGUgPSAob3RoZXIgYXMgX1R5cGVNaXJyb3IpLl9yZWZsZWN0ZWRUeXBlOwogICAgcmV0dXJuIF9zdWJ0eXBlVGVzdChfcmVmbGVjdGVkVHlwZSwgb3RoZXJSZWZsZWN0ZWRUeXBlKSB8fAogICAgICAgIF9zdWJ0eXBlVGVzdChvdGhlclJlZmxlY3RlZFR5cGUsIF9yZWZsZWN0ZWRUeXBlKTsKICB9CgogIHN0YXRpYyBGdW5jdGlvblR5cGVNaXJyb3IgX25hdGl2ZVJlZmVyZW50KHJlZmxlY3RlZFR5cGUpCiAgICAgIG5hdGl2ZSAiVHlwZWRlZk1pcnJvcl9yZWZlcmVudCI7CgogIHN0YXRpYyBUeXBlZGVmTWlycm9yIF9uYXRpdmVEZWNsYXJhdGlvbihyZWZsZWN0ZWRUeXBlKQogICAgICBuYXRpdmUgIlR5cGVkZWZNaXJyb3JfZGVjbGFyYXRpb24iOwp9CgpTeW1ib2wgX2FzU2V0dGVyKFN5bWJvbCBnZXR0ZXIsIExpYnJhcnlNaXJyb3IgbGlicmFyeSkgewogIHZhciB1bndyYXBwZWQgPSBNaXJyb3JTeXN0ZW0uZ2V0TmFtZShnZXR0ZXIpOwogIHJldHVybiBNaXJyb3JTeXN0ZW0uZ2V0U3ltYm9sKCcke3Vud3JhcHBlZH09JywgbGlicmFyeSk7Cn0KCmNsYXNzIF9MaWJyYXJ5TWlycm9yIGV4dGVuZHMgX09iamVjdE1pcnJvciBpbXBsZW1lbnRzIExpYnJhcnlNaXJyb3IgewogIGZpbmFsIFN5bWJvbCBzaW1wbGVOYW1lOwogIGZpbmFsIFVyaSB1cmk7CgogIF9MaWJyYXJ5TWlycm9yLl8ocmVmbGVjdGVlLCBTdHJpbmcgc2ltcGxlTmFtZSwgU3RyaW5nIHVybCkKICAgICAgOiB0aGlzLnNpbXBsZU5hbWUgPSBfcyhzaW1wbGVOYW1lKSwKICAgICAgICB0aGlzLnVyaSA9IFVyaS5wYXJzZSh1cmwpLAogICAgICAgIHN1cGVyLl8ocmVmbGVjdGVlKTsKCiAgLy8gVGhlIHNpbXBsZSBuYW1lIGFuZCB0aGUgcXVhbGlmaWVkIG5hbWUgYXJlIHRoZSBzYW1lIGZvciBhIGxpYnJhcnkuCiAgU3ltYm9sIGdldCBxdWFsaWZpZWROYW1lID0+IHNpbXBsZU5hbWU7CgogIERlY2xhcmF0aW9uTWlycm9yIGdldCBvd25lciA9PiBudWxsOwoKICBib29sIGdldCBpc1ByaXZhdGUgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNUb3BMZXZlbCA9PiBmYWxzZTsKCiAgVHlwZSBnZXQgX2luc3RhbnRpYXRvciA9PiBudWxsOwoKICBNYXA8U3ltYm9sLCBEZWNsYXJhdGlvbk1pcnJvcj4gX2RlY2xhcmF0aW9uczsKICBNYXA8U3ltYm9sLCBEZWNsYXJhdGlvbk1pcnJvcj4gZ2V0IGRlY2xhcmF0aW9ucyB7CiAgICB2YXIgZCA9IF9kZWNsYXJhdGlvbnM7CiAgICBpZiAoZCAhPSBudWxsKSByZXR1cm4gZDsKCiAgICB2YXIgZGVjbHMgPSBuZXcgTWFwPFN5bWJvbCwgRGVjbGFyYXRpb25NaXJyb3I+KCk7CiAgICB2YXIgbWVtYmVycyA9IF9jb21wdXRlTWVtYmVycyhfcmVmbGVjdGVlKTsKICAgIGZvciAodmFyIG1lbWJlciBpbiBtZW1iZXJzKSB7CiAgICAgIGRlY2xzW21lbWJlci5zaW1wbGVOYW1lXSA9IG1lbWJlcjsKICAgIH0KCiAgICByZXR1cm4gX2RlY2xhcmF0aW9ucyA9CiAgICAgICAgbmV3IFVubW9kaWZpYWJsZU1hcFZpZXc8U3ltYm9sLCBEZWNsYXJhdGlvbk1pcnJvcj4oZGVjbHMpOwogIH0KCiAgU291cmNlTG9jYXRpb24gZ2V0IGxvY2F0aW9uIHsKICAgIHJldHVybiBfbG9jYXRpb24oX3JlZmxlY3RlZSk7CiAgfQoKICBMaXN0PEluc3RhbmNlTWlycm9yPiBnZXQgbWV0YWRhdGEgewogICAgcmV0dXJuIF93cmFwTWV0YWRhdGEoX21ldGFkYXRhKF9yZWZsZWN0ZWUpKTsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIHJldHVybiB0aGlzLnJ1bnRpbWVUeXBlID09IG90aGVyLnJ1bnRpbWVUeXBlICYmCiAgICAgICAgdGhpcy5fcmVmbGVjdGVlID09IG90aGVyLl9yZWZsZWN0ZWU7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHNpbXBsZU5hbWUuaGFzaENvZGU7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJMaWJyYXJ5TWlycm9yIG9uICcke19uKHNpbXBsZU5hbWUpfSciOwoKICB2YXIgX2NhY2hlZExpYnJhcnlEZXBlbmRlbmNpZXM7CiAgZ2V0IGxpYnJhcnlEZXBlbmRlbmNpZXMgewogICAgdmFyIGQgPSBfY2FjaGVkTGlicmFyeURlcGVuZGVuY2llczsKICAgIGlmIChkICE9IG51bGwpIHJldHVybiBkOwogICAgcmV0dXJuIF9jYWNoZWRMaWJyYXJ5RGVwZW5kZW5jaWVzID0KICAgICAgICBuZXcgVW5tb2RpZmlhYmxlTGlzdFZpZXc8TGlicmFyeURlcGVuZGVuY3lNaXJyb3I+KAogICAgICAgICAgICBfbGlicmFyeURlcGVuZGVuY2llcyhfcmVmbGVjdGVlKS5jYXN0PExpYnJhcnlEZXBlbmRlbmN5TWlycm9yPigpKTsKICB9CgogIExpc3Q8ZHluYW1pYz4gX2xpYnJhcnlEZXBlbmRlbmNpZXMocmVmbGVjdGVlKQogICAgICBuYXRpdmUgJ0xpYnJhcnlNaXJyb3JfbGlicmFyeURlcGVuZGVuY2llcyc7CgogIF9pbnZva2UocmVmbGVjdGVlLCBtZW1iZXJOYW1lLCBhcmd1bWVudHMsIGFyZ3VtZW50TmFtZXMpCiAgICAgIG5hdGl2ZSAnTGlicmFyeU1pcnJvcl9pbnZva2UnOwoKICBfaW52b2tlR2V0dGVyKHJlZmxlY3RlZSwgZ2V0dGVyTmFtZSkgbmF0aXZlICdMaWJyYXJ5TWlycm9yX2ludm9rZUdldHRlcic7CgogIF9pbnZva2VTZXR0ZXIocmVmbGVjdGVlLCBzZXR0ZXJOYW1lLCB2YWx1ZSkKICAgICAgbmF0aXZlICdMaWJyYXJ5TWlycm9yX2ludm9rZVNldHRlcic7CgogIExpc3Q8ZHluYW1pYz4gX2NvbXB1dGVNZW1iZXJzKHJlZmxlY3RlZSkgbmF0aXZlICJMaWJyYXJ5TWlycm9yX21lbWJlcnMiOwp9CgpjbGFzcyBfTGlicmFyeURlcGVuZGVuY3lNaXJyb3IgZXh0ZW5kcyBNaXJyb3IKICAgIGltcGxlbWVudHMgTGlicmFyeURlcGVuZGVuY3lNaXJyb3IgewogIGZpbmFsIExpYnJhcnlNaXJyb3Igc291cmNlTGlicmFyeTsKICB2YXIgX3RhcmdldE1pcnJvck9yUHJlZml4OwogIGZpbmFsIExpc3Q8Q29tYmluYXRvck1pcnJvcj4gY29tYmluYXRvcnM7CiAgZmluYWwgU3ltYm9sIHByZWZpeDsKICBmaW5hbCBib29sIGlzSW1wb3J0OwogIGZpbmFsIGJvb2wgaXNEZWZlcnJlZDsKICBmaW5hbCBMaXN0PEluc3RhbmNlTWlycm9yPiBtZXRhZGF0YTsKCiAgX0xpYnJhcnlEZXBlbmRlbmN5TWlycm9yLl8oCiAgICAgIHRoaXMuc291cmNlTGlicmFyeSwKICAgICAgdGhpcy5fdGFyZ2V0TWlycm9yT3JQcmVmaXgsCiAgICAgIExpc3Q8ZHluYW1pYz4gbXV0YWJsZUNvbWJpbmF0b3JzLAogICAgICBwcmVmaXhTdHJpbmcsCiAgICAgIHRoaXMuaXNJbXBvcnQsCiAgICAgIHRoaXMuaXNEZWZlcnJlZCwKICAgICAgTGlzdDxkeW5hbWljPiB1bndyYXBwZWRNZXRhZGF0YSkKICAgICAgOiBwcmVmaXggPSBfc09wdChwcmVmaXhTdHJpbmcpLAogICAgICAgIGNvbWJpbmF0b3JzID0gbmV3IFVubW9kaWZpYWJsZUxpc3RWaWV3PENvbWJpbmF0b3JNaXJyb3I+KAogICAgICAgICAgICBtdXRhYmxlQ29tYmluYXRvcnMuY2FzdDxDb21iaW5hdG9yTWlycm9yPigpKSwKICAgICAgICBtZXRhZGF0YSA9IF93cmFwTWV0YWRhdGEodW53cmFwcGVkTWV0YWRhdGEpOwoKICBib29sIGdldCBpc0V4cG9ydCA9PiAhaXNJbXBvcnQ7CgogIExpYnJhcnlNaXJyb3IgZ2V0IHRhcmdldExpYnJhcnkgewogICAgaWYgKF90YXJnZXRNaXJyb3JPclByZWZpeCBpcyBfTGlicmFyeU1pcnJvcikgewogICAgICByZXR1cm4gX3RhcmdldE1pcnJvck9yUHJlZml4OwogICAgfQogICAgdmFyIG1pcnJvck9yTnVsbCA9IF90cnlVcGdyYWRlUHJlZml4KF90YXJnZXRNaXJyb3JPclByZWZpeCk7CiAgICBpZiAobWlycm9yT3JOdWxsICE9IG51bGwpIHsKICAgICAgX3RhcmdldE1pcnJvck9yUHJlZml4ID0gbWlycm9yT3JOdWxsOwogICAgfQogICAgcmV0dXJuIG1pcnJvck9yTnVsbDsKICB9CgogIEZ1dHVyZTxMaWJyYXJ5TWlycm9yPiBsb2FkTGlicmFyeSgpIHsKICAgIGlmIChfdGFyZ2V0TWlycm9yT3JQcmVmaXggaXMgX0xpYnJhcnlNaXJyb3IpIHsKICAgICAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUoX3RhcmdldE1pcnJvck9yUHJlZml4KTsKICAgIH0KICAgIHZhciBzYXZlZFByZWZpeCA9IF90YXJnZXRNaXJyb3JPclByZWZpeDsKICAgIHJldHVybiBzYXZlZFByZWZpeC5sb2FkTGlicmFyeSgpLnRoZW4oKF8pIHsKICAgICAgcmV0dXJuIF90cnlVcGdyYWRlUHJlZml4KHNhdmVkUHJlZml4KTsKICAgIH0pOwogIH0KCiAgc3RhdGljIExpYnJhcnlNaXJyb3IgX3RyeVVwZ3JhZGVQcmVmaXgobGlicmFyeVByZWZpeCkKICAgICAgbmF0aXZlICJMaWJyYXJ5TWlycm9yX2Zyb21QcmVmaXgiOwoKICBTb3VyY2VMb2NhdGlvbiBnZXQgbG9jYXRpb24gPT4gbnVsbDsKfQoKY2xhc3MgX0NvbWJpbmF0b3JNaXJyb3IgZXh0ZW5kcyBNaXJyb3IgaW1wbGVtZW50cyBDb21iaW5hdG9yTWlycm9yIHsKICBmaW5hbCBMaXN0PFN5bWJvbD4gaWRlbnRpZmllcnM7CiAgZmluYWwgYm9vbCBpc1Nob3c7CgogIF9Db21iaW5hdG9yTWlycm9yLl8oaWRlbnRpZmllclN0cmluZywgdGhpcy5pc1Nob3cpCiAgICAgIDogdGhpcy5pZGVudGlmaWVycyA9CiAgICAgICAgICAgIG5ldyBVbm1vZGlmaWFibGVMaXN0VmlldzxTeW1ib2w+KDxTeW1ib2w+W19zKGlkZW50aWZpZXJTdHJpbmcpXSk7CgogIGJvb2wgZ2V0IGlzSGlkZSA9PiAhaXNTaG93Owp9CgpjbGFzcyBfTWV0aG9kTWlycm9yIGV4dGVuZHMgX0RlY2xhcmF0aW9uTWlycm9yIGltcGxlbWVudHMgTWV0aG9kTWlycm9yIHsKICBmaW5hbCBUeXBlIF9pbnN0YW50aWF0b3I7CiAgZmluYWwgYm9vbCBpc1N0YXRpYzsKICBmaW5hbCBpbnQgX2tpbmRGbGFnczsKCiAgX01ldGhvZE1pcnJvci5fKHJlZmxlY3RlZSwgU3RyaW5nIHNpbXBsZU5hbWUsIHRoaXMuX293bmVyLCB0aGlzLl9pbnN0YW50aWF0b3IsCiAgICAgIHRoaXMuaXNTdGF0aWMsIHRoaXMuX2tpbmRGbGFncykKICAgICAgOiBzdXBlci5fKHJlZmxlY3RlZSwgX3Moc2ltcGxlTmFtZSkpOwoKICBzdGF0aWMgY29uc3Qga0Fic3RyYWN0ID0gMDsKICBzdGF0aWMgY29uc3Qga0dldHRlciA9IDE7CiAgc3RhdGljIGNvbnN0IGtTZXR0ZXIgPSAyOwogIHN0YXRpYyBjb25zdCBrQ29uc3RydWN0b3IgPSAzOwogIHN0YXRpYyBjb25zdCBrQ29uc3RDdG9yID0gNDsKICBzdGF0aWMgY29uc3Qga0dlbmVyYXRpdmVDdG9yID0gNTsKICBzdGF0aWMgY29uc3Qga1JlZGlyZWN0aW5nQ3RvciA9IDY7CiAgc3RhdGljIGNvbnN0IGtGYWN0b3J5Q3RvciA9IDc7CiAgc3RhdGljIGNvbnN0IGtFeHRlcm5hbCA9IDg7CiAgc3RhdGljIGNvbnN0IGtTeW50aGV0aWMgPSA5OwogIHN0YXRpYyBjb25zdCBrRXh0ZW5zaW9uTWVtYmVyID0gMTA7CgogIC8vIFRoZXNlIG9mZnNldHMgbXVjaCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aG9zZSBpbiBtaXJyb3JzLmguCiAgYm9vbCBnZXQgaXNBYnN0cmFjdCA9PiAwICE9IChfa2luZEZsYWdzICYgKDEgPDwga0Fic3RyYWN0KSk7CiAgYm9vbCBnZXQgaXNHZXR0ZXIgPT4gMCAhPSAoX2tpbmRGbGFncyAmICgxIDw8IGtHZXR0ZXIpKTsKICBib29sIGdldCBpc1NldHRlciA9PiAwICE9IChfa2luZEZsYWdzICYgKDEgPDwga1NldHRlcikpOwogIGJvb2wgZ2V0IGlzQ29uc3RydWN0b3IgPT4gMCAhPSAoX2tpbmRGbGFncyAmICgxIDw8IGtDb25zdHJ1Y3RvcikpOwogIGJvb2wgZ2V0IGlzQ29uc3RDb25zdHJ1Y3RvciA9PiAwICE9IChfa2luZEZsYWdzICYgKDEgPDwga0NvbnN0Q3RvcikpOwogIGJvb2wgZ2V0IGlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yID0+CiAgICAgIDAgIT0gKF9raW5kRmxhZ3MgJiAoMSA8PCBrR2VuZXJhdGl2ZUN0b3IpKTsKICBib29sIGdldCBpc1JlZGlyZWN0aW5nQ29uc3RydWN0b3IgPT4KICAgICAgMCAhPSAoX2tpbmRGbGFncyAmICgxIDw8IGtSZWRpcmVjdGluZ0N0b3IpKTsKICBib29sIGdldCBpc0ZhY3RvcnlDb25zdHJ1Y3RvciA9PiAwICE9IChfa2luZEZsYWdzICYgKDEgPDwga0ZhY3RvcnlDdG9yKSk7CiAgYm9vbCBnZXQgaXNFeHRlcm5hbCA9PiAwICE9IChfa2luZEZsYWdzICYgKDEgPDwga0V4dGVybmFsKSk7CiAgYm9vbCBnZXQgaXNTeW50aGV0aWMgPT4gMCAhPSAoX2tpbmRGbGFncyAmICgxIDw8IGtTeW50aGV0aWMpKTsKICBib29sIGdldCBpc0V4dGVuc2lvbk1lbWJlciA9PiAwICE9IChfa2luZEZsYWdzICYgKDEgPDwga0V4dGVuc2lvbk1lbWJlcikpOwoKICBzdGF0aWMgY29uc3QgX29wZXJhdG9ycyA9IGNvbnN0IFsKICAgICIlIiwgIiYiLCAiKiIsICIrIiwgIi0iLCAiLyIsICI8IiwgIjw8IiwgLy8KICAgICI8PSIsICI9PSIsICI+IiwgIj49IiwgIj4+IiwgIltdIiwgIltdPSIsCiAgICAiXiIsICJ8IiwgIn4iLCAidW5hcnktIiwgIn4vIiwKICBdOwogIGJvb2wgZ2V0IGlzT3BlcmF0b3IgPT4gX29wZXJhdG9ycy5jb250YWlucyhfbihzaW1wbGVOYW1lKSk7CgogIERlY2xhcmF0aW9uTWlycm9yIF9vd25lcjsKICBEZWNsYXJhdGlvbk1pcnJvciBnZXQgb3duZXIgewogICAgLy8gRm9yIG5lc3RlZCBjbG9zdXJlcyBpdCBpcyBwb3NzaWJsZSwgdGhhdCB0aGUgbWlycm9yIGZvciB0aGUgb3duZXIgaGFzIG5vdAogICAgLy8gYmVlbiBjcmVhdGVkIHlldC4KICAgIHZhciBvID0gX293bmVyOwogICAgaWYgKG8gIT0gbnVsbCkgcmV0dXJuIG87CiAgICByZXR1cm4gX293bmVyID0gX01ldGhvZE1pcnJvcl9vd25lcihfcmVmbGVjdGVlLCBfaW5zdGFudGlhdG9yKTsKICB9CgogIGJvb2wgZ2V0IGlzUHJpdmF0ZSA9PgogICAgICBfbihzaW1wbGVOYW1lKS5zdGFydHNXaXRoKCdfJykgfHwgX24oY29uc3RydWN0b3JOYW1lKS5zdGFydHNXaXRoKCdfJyk7CgogIGJvb2wgZ2V0IGlzVG9wTGV2ZWwgPT4gb3duZXIgaXMgTGlicmFyeU1pcnJvcjsKCiAgVHlwZU1pcnJvciBfcmV0dXJuVHlwZTsKICBUeXBlTWlycm9yIGdldCByZXR1cm5UeXBlIHsKICAgIHZhciB0ID0gX3JldHVyblR5cGU7CiAgICBpZiAodCAhPSBudWxsKSByZXR1cm4gdDsKICAgIGlmIChpc0NvbnN0cnVjdG9yKSB7CiAgICAgIHJldHVybiBfcmV0dXJuVHlwZSA9IG93bmVyIGFzIF9DbGFzc01pcnJvcjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfcmV0dXJuVHlwZSA9CiAgICAgICAgICByZWZsZWN0VHlwZShfTWV0aG9kTWlycm9yX3JldHVybl90eXBlKF9yZWZsZWN0ZWUsIF9pbnN0YW50aWF0b3IpKTsKICAgIH0KICB9CgogIExpc3Q8UGFyYW1ldGVyTWlycm9yPiBfcGFyYW1ldGVyczsKICBMaXN0PFBhcmFtZXRlck1pcnJvcj4gZ2V0IHBhcmFtZXRlcnMgewogICAgdmFyIHAgPSBfcGFyYW1ldGVyczsKICAgIGlmIChwICE9IG51bGwpIHJldHVybiBwOwogICAgcmV0dXJuIF9wYXJhbWV0ZXJzID0gbmV3IFVubW9kaWZpYWJsZUxpc3RWaWV3PFBhcmFtZXRlck1pcnJvcj4oCiAgICAgICAgX01ldGhvZE1pcnJvcl9wYXJhbWV0ZXJzKF9yZWZsZWN0ZWUpLmNhc3Q8UGFyYW1ldGVyTWlycm9yPigpKTsKICB9CgogIGJvb2wgZ2V0IGlzUmVndWxhck1ldGhvZCA9PiAhaXNHZXR0ZXIgJiYgIWlzU2V0dGVyICYmICFpc0NvbnN0cnVjdG9yOwoKICBTeW1ib2wgX2NvbnN0cnVjdG9yTmFtZTsKICBTeW1ib2wgZ2V0IGNvbnN0cnVjdG9yTmFtZSB7CiAgICB2YXIgbiA9IF9jb25zdHJ1Y3Rvck5hbWU7CiAgICBpZiAobiAhPSBudWxsKSByZXR1cm4gbjsKCiAgICBpZiAoIWlzQ29uc3RydWN0b3IpIHsKICAgICAgcmV0dXJuIF9jb25zdHJ1Y3Rvck5hbWUgPSBfcygnJyk7CiAgICB9IGVsc2UgewogICAgICB2YXIgcGFydHMgPSBNaXJyb3JTeXN0ZW0uZ2V0TmFtZShzaW1wbGVOYW1lKS5zcGxpdCgnLicpOwogICAgICBpZiAocGFydHMubGVuZ3RoID4gMikgewogICAgICAgIHRocm93IG5ldyBfSW50ZXJuYWxNaXJyb3JFcnJvcigKICAgICAgICAgICAgJ0ludGVybmFsIGVycm9yIGluIE1ldGhvZE1pcnJvci5jb25zdHJ1Y3Rvck5hbWU6ICcKICAgICAgICAgICAgJ21hbGZvcm1lZCBuYW1lIDwkc2ltcGxlTmFtZT4nKTsKICAgICAgfSBlbHNlIGlmIChwYXJ0cy5sZW5ndGggPT0gMikgewogICAgICAgIExpYnJhcnlNaXJyb3IgZGVmaW5pbmdMaWJyYXJ5ID0gb3duZXIub3duZXIgYXMgX0xpYnJhcnlNaXJyb3I7CiAgICAgICAgcmV0dXJuIF9jb25zdHJ1Y3Rvck5hbWUgPQogICAgICAgICAgICBNaXJyb3JTeXN0ZW0uZ2V0U3ltYm9sKHBhcnRzWzFdLCBkZWZpbmluZ0xpYnJhcnkpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBfY29uc3RydWN0b3JOYW1lID0gX3MoJycpOwogICAgICB9CiAgICB9CiAgfQoKICBTdHJpbmcgZ2V0IHNvdXJjZSA9PiBfTWV0aG9kTWlycm9yX3NvdXJjZShfcmVmbGVjdGVlKTsKCiAgdm9pZCBfcGF0Y2hDb25zdHJ1Y3Rvck5hbWUob3duZXJOYW1lKSB7CiAgICB2YXIgY24gPSBfbihjb25zdHJ1Y3Rvck5hbWUpOwogICAgaWYgKGNuID09ICcnKSB7CiAgICAgIF9zaW1wbGVOYW1lID0gX3Mob3duZXJOYW1lKTsKICAgIH0gZWxzZSB7CiAgICAgIF9zaW1wbGVOYW1lID0gX3Mob3duZXJOYW1lICsgIi4iICsgY24pOwogICAgfQogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIk1ldGhvZE1pcnJvciBvbiAnJHtNaXJyb3JTeXN0ZW0uZ2V0TmFtZShzaW1wbGVOYW1lKX0nIjsKCiAgc3RhdGljIGR5bmFtaWMgX01ldGhvZE1pcnJvcl9vd25lcihyZWZsZWN0ZWUsIGluc3RhbnRpYXRvcikKICAgICAgbmF0aXZlICJNZXRob2RNaXJyb3Jfb3duZXIiOwoKICBzdGF0aWMgZHluYW1pYyBfTWV0aG9kTWlycm9yX3JldHVybl90eXBlKHJlZmxlY3RlZSwgaW5zdGFudGlhdG9yKQogICAgICBuYXRpdmUgIk1ldGhvZE1pcnJvcl9yZXR1cm5fdHlwZSI7CgogIExpc3Q8ZHluYW1pYz4gX01ldGhvZE1pcnJvcl9wYXJhbWV0ZXJzKHJlZmxlY3RlZSkKICAgICAgbmF0aXZlICJNZXRob2RNaXJyb3JfcGFyYW1ldGVycyI7CgogIHN0YXRpYyBTdHJpbmcgX01ldGhvZE1pcnJvcl9zb3VyY2UocmVmbGVjdGVlKSBuYXRpdmUgIk1ldGhvZE1pcnJvcl9zb3VyY2UiOwp9CgpjbGFzcyBfVmFyaWFibGVNaXJyb3IgZXh0ZW5kcyBfRGVjbGFyYXRpb25NaXJyb3IgaW1wbGVtZW50cyBWYXJpYWJsZU1pcnJvciB7CiAgZmluYWwgRGVjbGFyYXRpb25NaXJyb3Igb3duZXI7CiAgZmluYWwgYm9vbCBpc1N0YXRpYzsKICBmaW5hbCBib29sIGlzRmluYWw7CiAgZmluYWwgYm9vbCBpc0NvbnN0OwogIGZpbmFsIGJvb2wgaXNFeHRlbnNpb25NZW1iZXI7CgogIF9WYXJpYWJsZU1pcnJvci5fKHJlZmxlY3RlZSwgU3RyaW5nIHNpbXBsZU5hbWUsIHRoaXMub3duZXIsIHRoaXMuX3R5cGUsCiAgICAgIHRoaXMuaXNTdGF0aWMsIHRoaXMuaXNGaW5hbCwgdGhpcy5pc0NvbnN0LCB0aGlzLmlzRXh0ZW5zaW9uTWVtYmVyKQogICAgICA6IHN1cGVyLl8ocmVmbGVjdGVlLCBfcyhzaW1wbGVOYW1lKSk7CgogIGJvb2wgZ2V0IGlzVG9wTGV2ZWwgPT4gb3duZXIgaXMgTGlicmFyeU1pcnJvcjsKCiAgVHlwZSBnZXQgX2luc3RhbnRpYXRvciB7CiAgICBmaW5hbCBvID0gb3duZXI7IC8vIE5vdGU6IG5lZWQgbG9jYWwgdmFyaWFibGUgZm9yIHByb21vdGlvbiB0byBoYXBwZW4uCiAgICBpZiAobyBpcyBfQ2xhc3NNaXJyb3IpIHsKICAgICAgcmV0dXJuIG8uX2luc3RhbnRpYXRvcjsKICAgIH0gZWxzZSBpZiAobyBpcyBfTWV0aG9kTWlycm9yKSB7CiAgICAgIHJldHVybiBvLl9pbnN0YW50aWF0b3I7CiAgICB9IGVsc2UgaWYgKG8gaXMgX0xpYnJhcnlNaXJyb3IpIHsKICAgICAgcmV0dXJuIG8uX2luc3RhbnRpYXRvcjsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJ1bmV4cGVjdGVkIG93bmVyICR7b3duZXJ9Iik7CiAgICB9CiAgfQoKICBUeXBlTWlycm9yIF90eXBlOwogIFR5cGVNaXJyb3IgZ2V0IHR5cGUgewogICAgdmFyIHQgPSBfdHlwZTsKICAgIGlmICh0ICE9IG51bGwpIHJldHVybiB0OwogICAgcmV0dXJuIF90eXBlID0gcmVmbGVjdFR5cGUoX1ZhcmlhYmxlTWlycm9yX3R5cGUoX3JlZmxlY3RlZSwgX2luc3RhbnRpYXRvcikpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgIlZhcmlhYmxlTWlycm9yIG9uICcke01pcnJvclN5c3RlbS5nZXROYW1lKHNpbXBsZU5hbWUpfSciOwoKICBzdGF0aWMgX1ZhcmlhYmxlTWlycm9yX3R5cGUocmVmbGVjdGVlLCBpbnN0YW50aWF0b3IpCiAgICAgIG5hdGl2ZSAiVmFyaWFibGVNaXJyb3JfdHlwZSI7Cn0KCmNsYXNzIF9QYXJhbWV0ZXJNaXJyb3IgZXh0ZW5kcyBfVmFyaWFibGVNaXJyb3IgaW1wbGVtZW50cyBQYXJhbWV0ZXJNaXJyb3IgewogIGZpbmFsIGludCBfcG9zaXRpb247CiAgZmluYWwgYm9vbCBpc09wdGlvbmFsOwogIGZpbmFsIGJvb2wgaXNOYW1lZDsKICBmaW5hbCBMaXN0IF91bm1pcnJvcmVkTWV0YWRhdGE7CgogIF9QYXJhbWV0ZXJNaXJyb3IuXygKICAgICAgcmVmbGVjdGVlLAogICAgICBTdHJpbmcgc2ltcGxlTmFtZSwKICAgICAgRGVjbGFyYXRpb25NaXJyb3Igb3duZXIsCiAgICAgIHRoaXMuX3Bvc2l0aW9uLAogICAgICB0aGlzLmlzT3B0aW9uYWwsCiAgICAgIHRoaXMuaXNOYW1lZCwKICAgICAgYm9vbCBpc0ZpbmFsLAogICAgICB0aGlzLl9kZWZhdWx0VmFsdWVSZWZsZWN0ZWUsCiAgICAgIHRoaXMuX3VubWlycm9yZWRNZXRhZGF0YSkKICAgICAgOiBzdXBlci5fKAogICAgICAgICAgICByZWZsZWN0ZWUsCiAgICAgICAgICAgIHNpbXBsZU5hbWUsCiAgICAgICAgICAgIG93bmVyLAogICAgICAgICAgICBudWxsLCAvLyBXZSBvdmVycmlkZSB0aGUgdHlwZS4KICAgICAgICAgICAgZmFsc2UsIC8vIGlzU3RhdGljIGRvZXMgbm90IGFwcGx5LgogICAgICAgICAgICBpc0ZpbmFsLAogICAgICAgICAgICBmYWxzZSwgLy8gTm90IGNvbnN0LgogICAgICAgICAgICBmYWxzZSAvLyBOb3QgZXh0ZW5zaW9uIG1lbWJlci4KICAgICAgICAgICAgKTsKCiAgT2JqZWN0IF9kZWZhdWx0VmFsdWVSZWZsZWN0ZWU7CiAgSW5zdGFuY2VNaXJyb3IgX2RlZmF1bHRWYWx1ZTsKICBJbnN0YW5jZU1pcnJvciBnZXQgZGVmYXVsdFZhbHVlIHsKICAgIGlmICghaXNPcHRpb25hbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmIChfZGVmYXVsdFZhbHVlID09IG51bGwpIHsKICAgICAgX2RlZmF1bHRWYWx1ZSA9IHJlZmxlY3QoX2RlZmF1bHRWYWx1ZVJlZmxlY3RlZSk7CiAgICB9CiAgICByZXR1cm4gX2RlZmF1bHRWYWx1ZTsKICB9CgogIGJvb2wgZ2V0IGhhc0RlZmF1bHRWYWx1ZSA9PiBfZGVmYXVsdFZhbHVlUmVmbGVjdGVlICE9IG51bGw7CgogIFNvdXJjZUxvY2F0aW9uIGdldCBsb2NhdGlvbiB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiUGFyYW1ldGVyTWlycm9yLmxvY2F0aW9uIHVuaW1wbGVtZW50ZWQiKTsKICB9CgogIExpc3Q8SW5zdGFuY2VNaXJyb3I+IGdldCBtZXRhZGF0YSB7CiAgICB2YXIgbSA9IF91bm1pcnJvcmVkTWV0YWRhdGE7CiAgICBpZiAobSA9PSBudWxsKSByZXR1cm4gY29uc3QgPEluc3RhbmNlTWlycm9yPltdOwogICAgcmV0dXJuIF93cmFwTWV0YWRhdGEobSk7CiAgfQoKICBUeXBlTWlycm9yIF90eXBlOwogIFR5cGVNaXJyb3IgZ2V0IHR5cGUgewogICAgdmFyIHQgPSBfdHlwZTsKICAgIGlmICh0ICE9IG51bGwpIHJldHVybiB0OwogICAgcmV0dXJuIF90eXBlID0gcmVmbGVjdFR5cGUoCiAgICAgICAgX1BhcmFtZXRlck1pcnJvcl90eXBlKF9yZWZsZWN0ZWUsIF9wb3NpdGlvbiwgX2luc3RhbnRpYXRvcikpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIlBhcmFtZXRlck1pcnJvciBvbiAnJHtfbihzaW1wbGVOYW1lKX0nIjsKCiAgc3RhdGljIFR5cGUgX1BhcmFtZXRlck1pcnJvcl90eXBlKF9yZWZsZWN0ZWUsIF9wb3NpdGlvbiwgaW5zdGFudGlhdG9yKQogICAgICBuYXRpdmUgIlBhcmFtZXRlck1pcnJvcl90eXBlIjsKfQoKY2xhc3MgX1NwZWNpYWxUeXBlTWlycm9yIGV4dGVuZHMgTWlycm9yCiAgICBpbXBsZW1lbnRzIFR5cGVNaXJyb3IsIERlY2xhcmF0aW9uTWlycm9yIHsKICBmaW5hbCBTeW1ib2wgc2ltcGxlTmFtZTsKCiAgX1NwZWNpYWxUeXBlTWlycm9yLl8oU3RyaW5nIG5hbWUpIDogc2ltcGxlTmFtZSA9IF9zKG5hbWUpOwoKICBib29sIGdldCBpc1ByaXZhdGUgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNUb3BMZXZlbCA9PiB0cnVlOwoKICBEZWNsYXJhdGlvbk1pcnJvciBnZXQgb3duZXIgPT4gbnVsbDsKCiAgU291cmNlTG9jYXRpb24gZ2V0IGxvY2F0aW9uID0+IG51bGw7CiAgTGlzdDxJbnN0YW5jZU1pcnJvcj4gZ2V0IG1ldGFkYXRhID0+IGNvbnN0IDxJbnN0YW5jZU1pcnJvcj5bXTsKCiAgYm9vbCBnZXQgaGFzUmVmbGVjdGVkVHlwZSA9PiBzaW1wbGVOYW1lID09ICNkeW5hbWljOwogIFR5cGUgZ2V0IHJlZmxlY3RlZFR5cGUgewogICAgaWYgKHNpbXBsZU5hbWUgPT0gI2R5bmFtaWMpIHJldHVybiBkeW5hbWljOwogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoInZvaWQgaGFzIG5vIHJlZmxlY3RlZCB0eXBlIik7CiAgfQoKICBMaXN0PFR5cGVWYXJpYWJsZU1pcnJvcj4gZ2V0IHR5cGVWYXJpYWJsZXMgPT4gY29uc3QgPFR5cGVWYXJpYWJsZU1pcnJvcj5bXTsKICBMaXN0PFR5cGVNaXJyb3I+IGdldCB0eXBlQXJndW1lbnRzID0+IGNvbnN0IDxUeXBlTWlycm9yPltdOwoKICBib29sIGdldCBpc09yaWdpbmFsRGVjbGFyYXRpb24gPT4gdHJ1ZTsKICBUeXBlTWlycm9yIGdldCBvcmlnaW5hbERlY2xhcmF0aW9uID0+IHRoaXM7CgogIFN5bWJvbCBnZXQgcXVhbGlmaWVkTmFtZSA9PiBzaW1wbGVOYW1lOwoKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIF9TcGVjaWFsVHlwZU1pcnJvcikgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdGhpcy5zaW1wbGVOYW1lID09IG90aGVyLnNpbXBsZU5hbWU7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHNpbXBsZU5hbWUuaGFzaENvZGU7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJUeXBlTWlycm9yIG9uICcke19uKHNpbXBsZU5hbWUpfSciOwoKICBib29sIGlzU3VidHlwZU9mKFR5cGVNaXJyb3Igb3RoZXIpIHsKICAgIHJldHVybiBzaW1wbGVOYW1lID09ICNkeW5hbWljIHx8IG90aGVyIGlzIF9TcGVjaWFsVHlwZU1pcnJvcjsKICB9CgogIGJvb2wgaXNBc3NpZ25hYmxlVG8oVHlwZU1pcnJvciBvdGhlcikgewogICAgcmV0dXJuIHNpbXBsZU5hbWUgPT0gI2R5bmFtaWMgfHwgb3RoZXIgaXMgX1NwZWNpYWxUeXBlTWlycm9yOwogIH0KfQoKY2xhc3MgX01pcnJvcnMgewogIHN0YXRpYyBNaXJyb3JTeXN0ZW0gX2N1cnJlbnRNaXJyb3JTeXN0ZW0gPSBuZXcgX01pcnJvclN5c3RlbSgpOwogIHN0YXRpYyBNaXJyb3JTeXN0ZW0gY3VycmVudE1pcnJvclN5c3RlbSgpIHsKICAgIHJldHVybiBfY3VycmVudE1pcnJvclN5c3RlbTsKICB9CgogIC8vIENyZWF0ZXMgYSBuZXcgbG9jYWwgbWlycm9yIGZvciBzb21lIE9iamVjdC4KICBzdGF0aWMgSW5zdGFuY2VNaXJyb3IgcmVmbGVjdChkeW5hbWljIHJlZmxlY3RlZSkgewogICAgcmV0dXJuIHJlZmxlY3RlZSBpcyBGdW5jdGlvbgogICAgICAgID8gbmV3IF9DbG9zdXJlTWlycm9yLl8ocmVmbGVjdGVlKQogICAgICAgIDogbmV3IF9JbnN0YW5jZU1pcnJvci5fKHJlZmxlY3RlZSk7CiAgfQoKICBzdGF0aWMgX0NsYXNzTWlycm9yIF9tYWtlTG9jYWxDbGFzc01pcnJvcihUeXBlIGtleSkKICAgICAgbmF0aXZlICJNaXJyb3JzX21ha2VMb2NhbENsYXNzTWlycm9yIjsKICBzdGF0aWMgVHlwZU1pcnJvciBfbWFrZUxvY2FsVHlwZU1pcnJvcihUeXBlIGtleSkKICAgICAgbmF0aXZlICJNaXJyb3JzX21ha2VMb2NhbFR5cGVNaXJyb3IiOwogIHN0YXRpYyBUeXBlIF9pbnN0YW50aWF0ZUdlbmVyaWNUeXBlKFR5cGUga2V5LCB0eXBlQXJndW1lbnRzKQogICAgICBuYXRpdmUgIk1pcnJvcnNfaW5zdGFudGlhdGVHZW5lcmljVHlwZSI7CgogIHN0YXRpYyBFeHBhbmRvPF9DbGFzc01pcnJvcj4gX2RlY2xhcmF0aW9uQ2FjaGUgPSBuZXcgRXhwYW5kbygiQ2xhc3NNaXJyb3IiKTsKICBzdGF0aWMgRXhwYW5kbzxUeXBlTWlycm9yPiBfaW5zdGFudGlhdGlvbkNhY2hlID0gbmV3IEV4cGFuZG8oIlR5cGVNaXJyb3IiKTsKCiAgc3RhdGljIENsYXNzTWlycm9yIHJlZmxlY3RDbGFzcyhUeXBlIGtleSkgewogICAgdmFyIGNsYXNzTWlycm9yID0gX2RlY2xhcmF0aW9uQ2FjaGVba2V5XTsKICAgIGlmIChjbGFzc01pcnJvciA9PSBudWxsKSB7CiAgICAgIGNsYXNzTWlycm9yID0gX21ha2VMb2NhbENsYXNzTWlycm9yKGtleSk7CiAgICAgIF9kZWNsYXJhdGlvbkNhY2hlW2tleV0gPSBjbGFzc01pcnJvcjsKICAgICAgaWYgKCFjbGFzc01pcnJvci5faXNHZW5lcmljKSB7CiAgICAgICAgX2luc3RhbnRpYXRpb25DYWNoZVtrZXldID0gY2xhc3NNaXJyb3I7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjbGFzc01pcnJvcjsKICB9CgogIHN0YXRpYyBUeXBlTWlycm9yIHJlZmxlY3RUeXBlKFR5cGUga2V5LCBbTGlzdDxUeXBlPiB0eXBlQXJndW1lbnRz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Y2UuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIG5hdGl2ZSAiTWlycm9yUmVmZXJlbmNlX2VxdWFscyI7Cn0KEgBOTjwBDwEhARoZLxkEATsCAShkYXJ0Om1pcnJvcnMtcGF0Y2gvbWlycm9yX3JlZmVyZW5jZS5kYXJ0UG9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL19pbnRlcm5hbC92bS9saWIvbWlycm9yc19wYXRjaC5kYXJ0itQvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vLyBOb3RlOiB0aGUgVk0gY29uY2F0ZW5hdGVzIGFsbCBwYXRjaCBmaWxlcyBpbnRvIGEgc2luZ2xlIHBhdGNoIGZpbGUuIFRoaXMKLy8vIGZpbGUgaXMgdGhlIGZpcnN0IHBhdGNoIGluICJkYXJ0Ol9pbnRlcm5hbCIgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBpbXBvcnRzCi8vLyB1c2VkIGJ5IHBhdGNoZXMgb2YgdGhhdCBsaWJyYXJ5LiBXZSBwbGFuIHRvIGNoYW5nZSB0aGlzIHdoZW4gd2UgaGF2ZSBhCi8vLyBzaGFyZWQgZnJvbnQgZW5kIGFuZCBzaW1wbHkgdXNlIHBhcnRzLgoKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIgYXMgaW50ZXJuYWw7CgppbXBvcnQgImRhcnQ6X2ludGVybmFsIiBzaG93IHBhdGNoOwoKaW1wb3J0ICJkYXJ0OmFzeW5jIiBzaG93IEZ1dHVyZTsKCmltcG9ydCAiZGFydDpjb2xsZWN0aW9uIiBzaG93IFVubW9kaWZpYWJsZUxpc3RWaWV3LCBVbm1vZGlmaWFibGVNYXBWaWV3OwoKLy8vIFRoZXNlIGFyZSB0aGUgYWRkaXRpb25hbCBwYXJ0cyBvZiB0aGlzIHBhdGNoIGxpYnJhcnk6Ci8vIHBhcnQgIm1pcnJvcnNfaW1wbC5kYXJ0IjsKLy8gcGFydCAibWlycm9yX3JlZmVyZW5jZS5kYXJ0IjsKCi8qKgogKiBSZXR1cm5zIGEgW01pcnJvclN5c3RlbV0gZm9yIHRoZSBjdXJyZW50IGlzb2xhdGUuCiAqLwpAcGF0Y2gKTWlycm9yU3lzdGVtIGN1cnJlbnRNaXJyb3JTeXN0ZW0oKSB7CiAgcmV0dXJuIF9NaXJyb3JzLmN1cnJlbnRNaXJyb3JTeXN0ZW0oKTsKfQoKLyoqCiAqIFJldHVybnMgYW4gW0luc3RhbmNlTWlycm9yXSBmb3Igc29tZSBEYXJ0IGxhbmd1YWdlIG9iamVjdC4KICoKICogVGhpcyBvbmx5IHdvcmtzIGlmIHRoaXMgbWlycm9yIHN5c3RlbSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlCiAqIGN1cnJlbnQgcnVubmluZyBpc29sYXRlLgogKi8KQHBhdGNoCkluc3RhbmNlTWlycm9yIHJlZmxlY3QoZHluYW1pYyByZWZsZWN0ZWUpIHsKICByZXR1cm4gX01pcnJvcnMucmVmbGVjdChyZWZsZWN0ZWUpOwp9CgovKioKICogUmV0dXJucyBhIFtDbGFzc01pcnJvcl0gZm9yIHRoZSBjbGFzcyByZXByZXNlbnRlZCBieSBhIERhcnQKICogVHlwZSBvYmplY3QuCiAqCiAqIFRoaXMgb25seSB3b3JrcyB3aXRoIG9iamVjdHMgbG9jYWwgdG8gdGhlIGN1cnJlbnQgaXNvbGF0ZS4KICovCkBwYXRjaApDbGFzc01pcnJvciByZWZsZWN0Q2xhc3MoVHlwZSBrZXkpIHsKICByZXR1cm4gX01pcnJvcnMucmVmbGVjdENsYXNzKGtleSk7Cn0KCkBwYXRjaApUeXBlTWlycm9yIHJlZmxlY3RUeXBlKFR5cGUga2V5LCBbTGlzdDxUeXBlPiB0eXBlQXJndW1lbnRzXSkgewogIHJldHVybiBfTWlycm9ycy5yZWZsZWN0VHlwZShrZXksIHR5cGVBcmd1bWVudHMpOwp9CgpAcGF0Y2gKY2xhc3MgTWlycm9yU3lzdGVtIHsKICBAcGF0Y2gKICBMaWJyYXJ5TWlycm9yIGZpbmRMaWJyYXJ5KFN5bWJvbCBsaWJyYXJ5TmFtZSkgewogICAgdmFyIGNhbmRpZGF0ZXMgPQogICAgICAgIGxpYnJhcmllcy52YWx1ZXMud2hlcmUoKGxpYikgPT4gbGliLnNpbXBsZU5hbWUgPT0gbGlicmFyeU5hbWUpOwogICAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIGNhbmRpZGF0ZXMuc2luZ2xlOwogICAgfQogICAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoID4gMSkgewogICAgICB2YXIgdXJpcyA9IGNhbmRpZGF0ZXMubWFwKChsaWIpID0+IGxpYi51cmkudG9TdHJpbmcoKSkudG9MaXN0KCk7CiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRoZXJlIGFyZSBtdWx0aXBsZSBsaWJyYXJpZXMgbmFtZWQgIgogICAgICAgICAgIicke2dldE5hbWUobGlicmFyeU5hbWUpfSc6ICR1cmlzIik7CiAgICB9CiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUaGVyZSBpcyBubyBsaWJyYXJ5IG5hbWVkICcke2dldE5hbWUobGlicmFyeU5hbWUpfSciKTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBTdHJpbmcgZ2V0TmFtZShTeW1ib2wgc3ltYm9sKSB7CiAgICByZXR1cm4gaW50ZXJuYWwuU3ltYm9sLmNvbXB1dGVVbm1hbmdsZWROYW1lKHN5bWJvbCBhcyBpbnRlcm5hbC5TeW1ib2wpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIFN5bWJvbCBnZXRTeW1ib2woU3RyaW5nIG5hbWUsIFtMaWJyYXJ5TWlycm9yIGxpYnJhcnldKSB7CiAgICBpZiAoKGxpYnJhcnkgIT0gbnVsbCAmJiBsaWJyYXJ5IGlzISBfTGlicmFyeU1pcnJvcikgfHwKICAgICAgICAoKG5hbWUubGVuZ3RoID4gMCkgJiYgKG5hbWVbMF0gPT0gJ18nKSAmJiAobGlicmFyeSA9PSBudWxsKSkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IobGlicmFyeSk7CiAgICB9CiAgICBpZiAobGlicmFyeSAhPSBudWxsKSB7CiAgICAgIG5hbWUgPSBfbWFuZ2xlTmFtZShuYW1lLCAobGlicmFyeSBhcyBfTGlicmFyeU1pcnJvcikuX3JlZmxlY3RlZSk7CiAgICB9CiAgICByZXR1cm4gbmV3IGludGVybmFsLlN5bWJvbC51bnZhbGlkYXRlZChuYW1lKTsKICB9CgogIHN0YXRpYyBfbWFuZ2xlTmFtZShTdHJpbmcgbmFtZSwgX01pcnJvclJlZmVyZW5jZSBsaWIpCiAgICAgIG5hdGl2ZSAiTWlycm9yc19tYW5nbGVOYW1lIjsKfQphAE5OPAEPAU1PSysBJQEkASEBSQE6HSEBBDUEByUpAgEEPgNAHAQHLCYCAQQ/EAM+BAclJQIBBz8zAgEHFQkyFUgiIAYhR0AvBlAEAQkpTAQBCUI7SCgGG0gGMgQBOCMCASVkYXJ0Om1pcnJvcnMtcGF0Y2gvbWlycm9yc19wYXRjaC5kYXJ0R29yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL3R5cGVkX2RhdGEvdHlwZWRfZGF0YS5kYXJ0wAHirC8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKLy8vIExpc3RzIHRoYXQgZWZmaWNpZW50bHkgaGFuZGxlIGZpeGVkIHNpemVkIGRhdGEKLy8vIChmb3IgZXhhbXBsZSwgdW5zaWduZWQgOCBieXRlIGludGVnZXJzKSBhbmQgU0lNRCBudW1lcmljIHR5cGVzLgovLy8KLy8vIFRvIHVzZSB0aGlzIGxpYnJhcnkgaW4geW91ciBjb2RlOgovLy8KLy8vICAgICBpbXBvcnQgJ2RhcnQ6dHlwZWRfZGF0YSc7Ci8vLwovLy8ge0BjYXRlZ29yeSBDb3JlfQpsaWJyYXJ5IGRhcnQudHlwZWRfZGF0YTsKCmltcG9ydCAiZGFydDpfaW50ZXJuYWwiIHNob3cgU2luY2UsIFVubW9kaWZpYWJsZUxpc3RCYXNlOwoKcGFydCAidW5tb2RpZmlhYmxlX3R5cGVkX2RhdGEuZGFydCI7CgovKioKICogQSBzZXF1ZW5jZSBvZiBieXRlcyB1bmRlcmx5aW5nIGEgdHlwZWQgZGF0YSBvYmplY3QuCiAqCiAqIFVzZWQgdG8gcHJvY2VzcyBsYXJnZSBxdWFudGl0aWVzIG9mIGJpbmFyeSBvciBudW1lcmljYWwgZGF0YQogKiBtb3JlIGVmZmljaWVudGx5IHVzaW5nIGEgdHlwZWQgdmlldy4KICovCmFic3RyYWN0IGNsYXNzIEJ5dGVCdWZmZXIgewogIC8qKgogICAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGlzIGJ5dGUgYnVmZmVyLCBpbiBieXRlcy4KICAgKi8KICBpbnQgZ2V0IGxlbmd0aEluQnl0ZXM7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbVWludDhMaXN0XSBfdmlld18gb2YgYSByZWdpb24gb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRoZSB2aWV3IGlzIGJhY2tlZCBieSB0aGUgYnl0ZXMgb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKiBBbnkgY2hhbmdlcyBtYWRlIHRvIHRoZSBgVWludDhMaXN0YCB3aWxsIGFsc28gY2hhbmdlIHRoZSBidWZmZXIsCiAgICogYW5kIHZpY2UgdmVyc2EuCiAgICoKICAgKiBUaGUgdmlld2VkIHJlZ2lvbiBzdGFydCBhdCBbb2Zmc2V0SW5CeXRlc10gYW5kIGNvbnRhaW5zIFtsZW5ndGhdIGJ5dGVzLgogICAqIElmIFtsZW5ndGhdIGlzIG9taXR0ZWQsIHRoZSByYW5nZSBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KICAgKgogICAqIFRoZSBzdGFydCBpbmRleCBhbmQgbGVuZ3RoIG11c3QgZGVzY3JpYmUgYSB2YWxpZCByYW5nZSBvZiB0aGUgYnVmZmVyOgogICAqCiAgICogKiBgb2Zmc2V0SW5CeXRlc2AgbXVzdCBub3QgYmUgbmVnYXRpdmUsCiAgICogKiBgbGVuZ3RoYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwgYW5kCiAgICogKiBgb2Zmc2V0SW5CeXRlcyArIGxlbmd0aGAgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIFtsZW5ndGhJbkJ5dGVzXS4KICAgKi8KICBVaW50OExpc3QgYXNVaW50OExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0ludDhMaXN0XSBfdmlld18gb2YgYSByZWdpb24gb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRoZSB2aWV3IGlzIGJhY2tlZCBieSB0aGUgYnl0ZXMgb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKiBBbnkgY2hhbmdlcyBtYWRlIHRvIHRoZSBgSW50OExpc3RgIHdpbGwgYWxzbyBjaGFuZ2UgdGhlIGJ1ZmZlciwKICAgKiBhbmQgdmljZSB2ZXJzYS4KICAgKgogICAqIFRoZSB2aWV3ZWQgcmVnaW9uIHN0YXJ0IGF0IFtvZmZzZXRJbkJ5dGVzXSBhbmQgY29udGFpbnMgW2xlbmd0aF0gYnl0ZXMuCiAgICogSWYgW2xlbmd0aF0gaXMgb21pdHRlZCwgdGhlIHJhbmdlIGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgogICAqCiAgICogVGhlIHN0YXJ0IGluZGV4IGFuZCBsZW5ndGggbXVzdCBkZXNjcmliZSBhIHZhbGlkIHJhbmdlIG9mIHRoZSBidWZmZXI6CiAgICoKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwKICAgKiAqIGBsZW5ndGhgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLCBhbmQKICAgKiAqIGBvZmZzZXRJbkJ5dGVzICsgbGVuZ3RoYCBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gW2xlbmd0aEluQnl0ZXNdLgogICAqLwogIEludDhMaXN0IGFzSW50OExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1VpbnQ4Q2xhbXBlZExpc3RdIF92aWV3XyBvZiBhIHJlZ2lvbiBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhlIHZpZXcgaXMgYmFja2VkIGJ5IHRoZSBieXRlcyBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqIEFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGBVaW50OENsYW1wZWRMaXN0YCB3aWxsIGFsc28gY2hhbmdlIHRoZSBidWZmZXIsCiAgICogYW5kIHZpY2UgdmVyc2EuCiAgICoKICAgKiBUaGUgdmlld2VkIHJlZ2lvbiBzdGFydCBhdCBbb2Zmc2V0SW5CeXRlc10gYW5kIGNvbnRhaW5zIFtsZW5ndGhdIGJ5dGVzLgogICAqIElmIFtsZW5ndGhdIGlzIG9taXR0ZWQsIHRoZSByYW5nZSBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KICAgKgogICAqIFRoZSBzdGFydCBpbmRleCBhbmQgbGVuZ3RoIG11c3QgZGVzY3JpYmUgYSB2YWxpZCByYW5nZSBvZiB0aGUgYnVmZmVyOgogICAqCiAgICogKiBgb2Zmc2V0SW5CeXRlc2AgbXVzdCBub3QgYmUgbmVnYXRpdmUsCiAgICogKiBgbGVuZ3RoYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwgYW5kCiAgICogKiBgb2Zmc2V0SW5CeXRlcyArIGxlbmd0aGAgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIFtsZW5ndGhJbkJ5dGVzXS4KICAgKi8KICBVaW50OENsYW1wZWRMaXN0IGFzVWludDhDbGFtcGVkTGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbVWludDE2TGlzdF0gX3ZpZXdfIG9mIGEgcmVnaW9uIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaGUgdmlldyBpcyBiYWNrZWQgYnkgdGhlIGJ5dGVzIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICogQW55IGNoYW5nZXMgbWFkZSB0byB0aGUgYFVpbnQxNkxpc3RgIHdpbGwgYWxzbyBjaGFuZ2UgdGhlIGJ1ZmZlciwKICAgKiBhbmQgdmljZSB2ZXJzYS4KICAgKgogICAqIFRoZSB2aWV3ZWQgcmVnaW9uIHN0YXJ0IGF0IFtvZmZzZXRJbkJ5dGVzXSwgd2hpY2ggbXVzdCBiZSAxNi1iaXQgYWxpZ25lZCwKICAgKiBhbmQgY29udGFpbnMgW2xlbmd0aF0gMTYtYml0IGludGVnZXJzLgogICAqIElmIFtsZW5ndGhdIGlzIG9taXR0ZWQsIHRoZSByYW5nZSBleHRlbmRzIGFzIGZhciB0b3dhcmRzIHRoZSBlbmQgb2YKICAgKiB0aGUgYnVmZmVyIGFzIHBvc3NpYmxlIC0KICAgKiBpZiBbbGVuZ3RoSW5CeXRlc10gaXMgbm90IGV2ZW4sIHRoZSBsYXN0IGJ5dGUgY2FuJ3QgYmUgcGFydCBvZiB0aGUgdmlldy4KICAgKgogICAqIFRoZSBzdGFydCBpbmRleCBhbmQgbGVuZ3RoIG11c3QgZGVzY3JpYmUgYSB2YWxpZCAxNi1iaXQgYWxpZ25lZCByYW5nZQogICAqIG9mIHRoZSBidWZmZXI6CiAgICoKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IGJlIGRpdmlzaWJsZSBieSB0d28sCiAgICogKiBgbGVuZ3RoYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwgYW5kCiAgICogKiBgb2Zmc2V0SW5CeXRlcyArIGxlbmd0aCAqIDJgIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBbbGVuZ3RoSW5CeXRlc10uCiAgICovCiAgVWludDE2TGlzdCBhc1VpbnQxNkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0ludDE2TGlzdF0gX3ZpZXdfIG9mIGEgcmVnaW9uIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaGUgdmlldyBpcyBiYWNrZWQgYnkgdGhlIGJ5dGVzIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICogQW55IGNoYW5nZXMgbWFkZSB0byB0aGUgYEludDE2TGlzdGAgd2lsbCBhbHNvIGNoYW5nZSB0aGUgYnVmZmVyLAogICAqIGFuZCB2aWNlIHZlcnNhLgogICAqCiAgICogVGhlIHZpZXdlZCByZWdpb24gc3RhcnQgYXQgW29mZnNldEluQnl0ZXNdLCB3aGljaCBtdXN0IGJlIDE2LWJpdCBhbGlnbmVkLAogICAqIGFuZCBjb250YWlucyBbbGVuZ3RoXSAxNi1iaXQgaW50ZWdlcnMuCiAgICogSWYgW2xlbmd0aF0gaXMgb21pdHRlZCwgdGhlIHJhbmdlIGV4dGVuZHMgYXMgZmFyIHRvd2FyZHMgdGhlIGVuZCBvZgogICAqIHRoZSBidWZmZXIgYXMgcG9zc2libGUgLQogICAqIGlmIFtsZW5ndGhJbkJ5dGVzXSBpcyBub3QgZXZlbiwgdGhlIGxhc3QgYnl0ZSBjYW4ndCBiZSBwYXJ0IG9mIHRoZSB2aWV3LgogICAqCiAgICogVGhlIHN0YXJ0IGluZGV4IGFuZCBsZW5ndGggbXVzdCBkZXNjcmliZSBhIHZhbGlkIDE2LWJpdCBhbGlnbmVkIHJhbmdlCiAgICogb2YgdGhlIGJ1ZmZlcjoKICAgKgogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLAogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3QgYmUgZGl2aXNpYmxlIGJ5IHR3bywKICAgKiAqIGBsZW5ndGhgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLCBhbmQKICAgKiAqIGBvZmZzZXRJbkJ5dGVzICsgbGVuZ3RoICogMmAgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIFtsZW5ndGhJbkJ5dGVzXS4KICAgKi8KICBJbnQxNkxpc3QgYXNJbnQxNkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1VpbnQzMkxpc3RdIF92aWV3XyBvZiBhIHJlZ2lvbiBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhlIHZpZXcgaXMgYmFja2VkIGJ5IHRoZSBieXRlcyBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqIEFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGBVaW50MzJMaXN0YCB3aWxsIGFsc28gY2hhbmdlIHRoZSBidWZmZXIsCiAgICogYW5kIHZpY2UgdmVyc2EuCiAgICoKICAgKiBUaGUgdmlld2VkIHJlZ2lvbiBzdGFydCBhdCBbb2Zmc2V0SW5CeXRlc10sIHdoaWNoIG11c3QgYmUgMzItYml0IGFsaWduZWQsCiAgICogYW5kIGNvbnRhaW5zIFtsZW5ndGhdIDMyLWJpdCBpbnRlZ2Vycy4KICAgKiBJZiBbbGVuZ3RoXSBpcyBvbWl0dGVkLCB0aGUgcmFuZ2UgZXh0ZW5kcyBhcyBmYXIgdG93YXJkcyB0aGUgZW5kIG9mCiAgICogdGhlIGJ1ZmZlciBhcyBwb3NzaWJsZSAtCiAgICogaWYgW2xlbmd0aEluQnl0ZXNdIGlzIG5vdCBkaXZpc2libGUgYnkgZm91ciwgdGhlIGxhc3QgYnl0ZXMgY2FuJ3QgYmUgcGFydAogICAqIG9mIHRoZSB2aWV3LgogICAqCiAgICogVGhlIHN0YXJ0IGluZGV4IGFuZCBsZW5ndGggbXVzdCBkZXNjcmliZSBhIHZhbGlkIDMyLWJpdCBhbGlnbmVkIHJhbmdlCiAgICogb2YgdGhlIGJ1ZmZlcjoKICAgKgogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLAogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3QgYmUgZGl2aXNpYmxlIGJ5IGZvdXIsCiAgICogKiBgbGVuZ3RoYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwgYW5kCiAgICogKiBgb2Zmc2V0SW5CeXRlcyArIGxlbmd0aCAqIDRgIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBbbGVuZ3RoSW5CeXRlc10uCiAgICovCiAgVWludDMyTGlzdCBhc1VpbnQzMkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0ludDMyTGlzdF0gX3ZpZXdfIG9mIGEgcmVnaW9uIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaGUgdmlldyBpcyBiYWNrZWQgYnkgdGhlIGJ5dGVzIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICogQW55IGNoYW5nZXMgbWFkZSB0byB0aGUgYEludDMyTGlzdGAgd2lsbCBhbHNvIGNoYW5nZSB0aGUgYnVmZmVyLAogICAqIGFuZCB2aWNlIHZlcnNhLgogICAqCiAgICogVGhlIHZpZXdlZCByZWdpb24gc3RhcnQgYXQgW29mZnNldEluQnl0ZXNdLCB3aGljaCBtdXN0IGJlIDMyLWJpdCBhbGlnbmVkLAogICAqIGFuZCBjb250YWlucyBbbGVuZ3RoXSAzMi1iaXQgaW50ZWdlcnMuCiAgICogSWYgW2xlbmd0aF0gaXMgb21pdHRlZCwgdGhlIHJhbmdlIGV4dGVuZHMgYXMgZmFyIHRvd2FyZHMgdGhlIGVuZCBvZgogICAqIHRoZSBidWZmZXIgYXMgcG9zc2libGUgLQogICAqIGlmIFtsZW5ndGhJbkJ5dGVzXSBpcyBub3QgZGl2aXNpYmxlIGJ5IGZvdXIsIHRoZSBsYXN0IGJ5dGVzIGNhbid0IGJlIHBhcnQKICAgKiBvZiB0aGUgdmlldy4KICAgKgogICAqIFRoZSBzdGFydCBpbmRleCBhbmQgbGVuZ3RoIG11c3QgZGVzY3JpYmUgYSB2YWxpZCAzMi1iaXQgYWxpZ25lZCByYW5nZQogICAqIG9mIHRoZSBidWZmZXI6CiAgICoKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IGJlIGRpdmlzaWJsZSBieSBmb3VyLAogICAqICogYGxlbmd0aGAgbXVzdCBub3QgYmUgbmVnYXRpdmUsIGFuZAogICAqICogYG9mZnNldEluQnl0ZXMgKyBsZW5ndGggKiA0YCBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gW2xlbmd0aEluQnl0ZXNdLgogICAqLwogIEludDMyTGlzdCBhc0ludDMyTGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbVWludDY0TGlzdF0gX3ZpZXdfIG9mIGEgcmVnaW9uIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaGUgdmlldyBpcyBiYWNrZWQgYnkgdGhlIGJ5dGVzIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICogQW55IGNoYW5nZXMgbWFkZSB0byB0aGUgYFVpbnQ2NExpc3RgIHdpbGwgYWxzbyBjaGFuZ2UgdGhlIGJ1ZmZlciwKICAgKiBhbmQgdmljZSB2ZXJzYS4KICAgKgogICAqIFRoZSB2aWV3ZWQgcmVnaW9uIHN0YXJ0IGF0IFtvZmZzZXRJbkJ5dGVzXSwgd2hpY2ggbXVzdCBiZSA2NC1iaXQgYWxpZ25lZCwKICAgKiBhbmQgY29udGFpbnMgW2xlbmd0aF0gNjQtYml0IGludGVnZXJzLgogICAqIElmIFtsZW5ndGhdIGlzIG9taXR0ZWQsIHRoZSByYW5nZSBleHRlbmRzIGFzIGZhciB0b3dhcmRzIHRoZSBlbmQgb2YKICAgKiB0aGUgYnVmZmVyIGFzIHBvc3NpYmxlIC0KICAgKiBpZiBbbGVuZ3RoSW5CeXRlc10gaXMgbm90IGRpdmlzaWJsZSBieSBlaWdodCwgdGhlIGxhc3QgYnl0ZXMgY2FuJ3QgYmUgcGFydAogICAqIG9mIHRoZSB2aWV3LgogICAqCiAgICogVGhlIHN0YXJ0IGluZGV4IGFuZCBsZW5ndGggbXVzdCBkZXNjcmliZSBhIHZhbGlkIDY0LWJpdCBhbGlnbmVkIHJhbmdlCiAgICogb2YgdGhlIGJ1ZmZlcjoKICAgKgogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLAogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3QgYmUgZGl2aXNpYmxlIGJ5IGVpZ2h0LAogICAqICogYGxlbmd0aGAgbXVzdCBub3QgYmUgbmVnYXRpdmUsIGFuZAogICAqICogYG9mZnNldEluQnl0ZXMgKyBsZW5ndGggKiA4YCBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gW2xlbmd0aEluQnl0ZXNdLgogICAqLwogIFVpbnQ2NExpc3QgYXNVaW50NjRMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtJbnQ2NExpc3RdIF92aWV3XyBvZiBhIHJlZ2lvbiBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhlIHZpZXcgaXMgYmFja2VkIGJ5IHRoZSBieXRlcyBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqIEFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGBJbnQ2NExpc3RgIHdpbGwgYWxzbyBjaGFuZ2UgdGhlIGJ1ZmZlciwKICAgKiBhbmQgdmljZSB2ZXJzYS4KICAgKgogICAqIFRoZSB2aWV3ZWQgcmVnaW9uIHN0YXJ0IGF0IFtvZmZzZXRJbkJ5dGVzXSwgd2hpY2ggbXVzdCBiZSA2NC1iaXQgYWxpZ25lZCwKICAgKiBhbmQgY29udGFpbnMgW2xlbmd0aF0gNjQtYml0IGludGVnZXJzLgogICAqIElmIFtsZW5ndGhdIGlzIG9taXR0ZWQsIHRoZSByYW5nZSBleHRlbmRzIGFzIGZhciB0b3dhcmRzIHRoZSBlbmQgb2YKICAgKiB0aGUgYnVmZmVyIGFzIHBvc3NpYmxlIC0KICAgKiBpZiBbbGVuZ3RoSW5CeXRlc10gaXMgbm90IGRpdmlzaWJsZSBieSBlaWdodCwgdGhlIGxhc3QgYnl0ZXMgY2FuJ3QgYmUgcGFydAogICAqIG9mIHRoZSB2aWV3LgogICAqCiAgICogVGhlIHN0YXJ0IGluZGV4IGFuZCBsZW5ndGggbXVzdCBkZXNjcmliZSBhIHZhbGlkIDY0LWJpdCBhbGlnbmVkIHJhbmdlCiAgICogb2YgdGhlIGJ1ZmZlcjoKICAgKgogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLAogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3QgYmUgZGl2aXNpYmxlIGJ5IGVpZ2h0LAogICAqICogYGxlbmd0aGAgbXVzdCBub3QgYmUgbmVnYXRpdmUsIGFuZAogICAqICogYG9mZnNldEluQnl0ZXMgKyBsZW5ndGggKiA4YCBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gW2xlbmd0aEluQnl0ZXNdLgogICAqLwogIEludDY0TGlzdCBhc0ludDY0TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbSW50MzJ4NExpc3RdIF92aWV3XyBvZiBhIHJlZ2lvbiBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhlIHZpZXcgaXMgYmFja2VkIGJ5IHRoZSBieXRlcyBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqIEFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGBJbnQzMng0TGlzdGAgd2lsbCBhbHNvIGNoYW5nZSB0aGUgYnVmZmVyLAogICAqIGFuZCB2aWNlIHZlcnNhLgogICAqCiAgICogVGhlIHZpZXdlZCByZWdpb24gc3RhcnQgYXQgW29mZnNldEluQnl0ZXNdLCB3aGljaCBtdXN0IGJlIDEyOC1iaXQgYWxpZ25lZCwKICAgKiBhbmQgY29udGFpbnMgW2xlbmd0aF0gMTI4LWJpdCBpbnRlZ2Vycy4KICAgKiBJZiBbbGVuZ3RoXSBpcyBvbWl0dGVkLCB0aGUgcmFuZ2UgZXh0ZW5kcyBhcyBmYXIgdG93YXJkcyB0aGUgZW5kIG9mCiAgICogdGhlIGJ1ZmZlciBhcyBwb3NzaWJsZSAtCiAgICogaWYgW2xlbmd0aEluQnl0ZXNdIGlzIG5vdCBkaXZpc2libGUgYnkgMTYsIHRoZSBsYXN0IGJ5dGVzIGNhbid0IGJlIHBhcnQKICAgKiBvZiB0aGUgdmlldy4KICAgKgogICAqIFRoZSBzdGFydCBpbmRleCBhbmQgbGVuZ3RoIG11c3QgZGVzY3JpYmUgYSB2YWxpZCAxMjgtYml0IGFsaWduZWQgcmFuZ2UKICAgKiBvZiB0aGUgYnVmZmVyOgogICAqCiAgICogKiBgb2Zmc2V0SW5CeXRlc2AgbXVzdCBub3QgYmUgbmVnYXRpdmUsCiAgICogKiBgb2Zmc2V0SW5CeXRlc2AgbXVzdCBiZSBkaXZpc2libGUgYnkgc2l4dGVlbiwKICAgKiAqIGBsZW5ndGhgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLCBhbmQKICAgKiAqIGBvZmZzZXRJbkJ5dGVzICsgbGVuZ3RoICogMTZgIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBbbGVuZ3RoSW5CeXRlc10uCiAgICovCiAgSW50MzJ4NExpc3QgYXNJbnQzMng0TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbRmxvYXQzMkxpc3RdIF92aWV3XyBvZiBhIHJlZ2lvbiBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhlIHZpZXcgaXMgYmFja2VkIGJ5IHRoZSBieXRlcyBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqIEFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGBGbG9hdDMyTGlzdGAgd2lsbCBhbHNvIGNoYW5nZSB0aGUgYnVmZmVyLAogICAqIGFuZCB2aWNlIHZlcnNhLgogICAqCiAgICogVGhlIHZpZXdlZCByZWdpb24gc3RhcnQgYXQgW29mZnNldEluQnl0ZXNdLCB3aGljaCBtdXN0IGJlIDMyLWJpdCBhbGlnbmVkLAogICAqIGFuZCBjb250YWlucyBbbGVuZ3RoXSAzMi1iaXQgaW50ZWdlcnMuCiAgICogSWYgW2xlbmd0aF0gaXMgb21pdHRlZCwgdGhlIHJhbmdlIGV4dGVuZHMgYXMgZmFyIHRvd2FyZHMgdGhlIGVuZCBvZgogICAqIHRoZSBidWZmZXIgYXMgcG9zc2libGUgLQogICAqIGlmIFtsZW5ndGhJbkJ5dGVzXSBpcyBub3QgZGl2aXNpYmxlIGJ5IGZvdXIsIHRoZSBsYXN0IGJ5dGVzIGNhbid0IGJlIHBhcnQKICAgKiBvZiB0aGUgdmlldy4KICAgKgogICAqIFRoZSBzdGFydCBpbmRleCBhbmQgbGVuZ3RoIG11c3QgZGVzY3JpYmUgYSB2YWxpZCAzMi1iaXQgYWxpZ25lZCByYW5nZQogICAqIG9mIHRoZSBidWZmZXI6CiAgICoKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IGJlIGRpdmlzaWJsZSBieSBmb3VyLAogICAqICogYGxlbmd0aGAgbXVzdCBub3QgYmUgbmVnYXRpdmUsIGFuZAogICAqICogYG9mZnNldEluQnl0ZXMgKyBsZW5ndGggKiA0YCBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gW2xlbmd0aEluQnl0ZXNdLgogICAqLwogIEZsb2F0MzJMaXN0IGFzRmxvYXQzMkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0Zsb2F0NjRMaXN0XSBfdmlld18gb2YgYSByZWdpb24gb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRoZSB2aWV3IGlzIGJhY2tlZCBieSB0aGUgYnl0ZXMgb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKiBBbnkgY2hhbmdlcyBtYWRlIHRvIHRoZSBgRmxvYXQ2NExpc3RgIHdpbGwgYWxzbyBjaGFuZ2UgdGhlIGJ1ZmZlciwKICAgKiBhbmQgdmljZSB2ZXJzYS4KICAgKgogICAqIFRoZSB2aWV3ZWQgcmVnaW9uIHN0YXJ0IGF0IFtvZmZzZXRJbkJ5dGVzXSwgd2hpY2ggbXVzdCBiZSA2NC1iaXQgYWxpZ25lZCwKICAgKiBhbmQgY29udGFpbnMgW2xlbmd0aF0gNjQtYml0IGludGVnZXJzLgogICAqIElmIFtsZW5ndGhdIGlzIG9taXR0ZWQsIHRoZSByYW5nZSBleHRlbmRzIGFzIGZhciB0b3dhcmRzIHRoZSBlbmQgb2YKICAgKiB0aGUgYnVmZmVyIGFzIHBvc3NpYmxlIC0KICAgKiBpZiBbbGVuZ3RoSW5CeXRlc10gaXMgbm90IGRpdmlzaWJsZSBieSBlaWdodCwgdGhlIGxhc3QgYnl0ZXMgY2FuJ3QgYmUgcGFydAogICAqIG9mIHRoZSB2aWV3LgogICAqCiAgICogVGhlIHN0YXJ0IGluZGV4IGFuZCBsZW5ndGggbXVzdCBkZXNjcmliZSBhIHZhbGlkIDY0LWJpdCBhbGlnbmVkIHJhbmdlCiAgICogb2YgdGhlIGJ1ZmZlcjoKICAgKgogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLAogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3QgYmUgZGl2aXNpYmxlIGJ5IGVpZ2h0LAogICAqICogYGxlbmd0aGAgbXVzdCBub3QgYmUgbmVnYXRpdmUsIGFuZAogICAqICogYG9mZnNldEluQnl0ZXMgKyBsZW5ndGggKiA4YCBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gW2xlbmd0aEluQnl0ZXNdLgogICAqLwogIEZsb2F0NjRMaXN0IGFzRmxvYXQ2NExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0Zsb2F0MzJ4NExpc3RdIF92aWV3XyBvZiBhIHJlZ2lvbiBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhlIHZpZXcgaXMgYmFja2VkIGJ5IHRoZSBieXRlcyBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqIEFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGBGbG9hdDMyeDRMaXN0YCB3aWxsIGFsc28gY2hhbmdlIHRoZSBidWZmZXIsCiAgICogYW5kIHZpY2UgdmVyc2EuCiAgICoKICAgKiBUaGUgdmlld2VkIHJlZ2lvbiBzdGFydCBhdCBbb2Zmc2V0SW5CeXRlc10sIHdoaWNoIG11c3QgYmUgMTI4LWJpdCBhbGlnbmVkLAogICAqIGFuZCBjb250YWlucyBbbGVuZ3RoXSAxMjgtYml0IGludGVnZXJzLgogICAqIElmIFtsZW5ndGhdIGlzIG9taXR0ZWQsIHRoZSByYW5nZSBleHRlbmRzIGFzIGZhciB0b3dhcmRzIHRoZSBlbmQgb2YKICAgKiB0aGUgYnVmZmVyIGFzIHBvc3NpYmxlIC0KICAgKiBpZiBbbGVuZ3RoSW5CeXRlc10gaXMgbm90IGRpdmlzaWJsZSBieSAxNiwgdGhlIGxhc3QgYnl0ZXMgY2FuJ3QgYmUgcGFydAogICAqIG9mIHRoZSB2aWV3LgogICAqCiAgICogVGhlIHN0YXJ0IGluZGV4IGFuZCBsZW5ndGggbXVzdCBkZXNjcmliZSBhIHZhbGlkIDEyOC1iaXQgYWxpZ25lZCByYW5nZQogICAqIG9mIHRoZSBidWZmZXI6CiAgICoKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IGJlIGRpdmlzaWJsZSBieSBzaXh0ZWVuLAogICAqICogYGxlbmd0aGAgbXVzdCBub3QgYmUgbmVnYXRpdmUsIGFuZAogICAqICogYG9mZnNldEluQnl0ZXMgKyBsZW5ndGggKiAxNmAgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIFtsZW5ndGhJbkJ5dGVzXS4KICAgKi8KICBGbG9hdDMyeDRMaXN0IGFzRmxvYXQzMng0TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbRmxvYXQ2NHgyTGlzdF0gX3ZpZXdfIG9mIGEgcmVnaW9uIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaGUgdmlldyBpcyBiYWNrZWQgYnkgdGhlIGJ5dGVzIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICogQW55IGNoYW5nZXMgbWFkZSB0byB0aGUgYEZsb2F0NjR4Mkxpc3RgIHdpbGwgYWxzbyBjaGFuZ2UgdGhlIGJ1ZmZlciwKICAgKiBhbmQgdmljZSB2ZXJzYS4KICAgKgogICAqIFRoZSB2aWV3ZWQgcmVnaW9uIHN0YXJ0IGF0IFtvZmZzZXRJbkJ5dGVzXSwgd2hpY2ggbXVzdCBiZSAxMjgtYml0IGFsaWduZWQsCiAgICogYW5kIGNvbnRhaW5zIFtsZW5ndGhdIDEyOC1iaXQgaW50ZWdlcnMuCiAgICogSWYgW2xlbmd0aF0gaXMgb21pdHRlZCwgdGhlIHJhbmdlIGV4dGVuZHMgYXMgZmFyIHRvd2FyZHMgdGhlIGVuZCBvZgogICAqIHRoZSBidWZmZXIgYXMgcG9zc2libGUgLQogICAqIGlmIFtsZW5ndGhJbkJ5dGVzXSBpcyBub3QgZGl2aXNpYmxlIGJ5IDE2LCB0aGUgbGFzdCBieXRlcyBjYW4ndCBiZSBwYXJ0CiAgICogb2YgdGhlIHZpZXcuCiAgICoKICAgKiBUaGUgc3RhcnQgaW5kZXggYW5kIGxlbmd0aCBtdXN0IGRlc2NyaWJlIGEgdmFsaWQgMTI4LWJpdCBhbGlnbmVkIHJhbmdlCiAgICogb2YgdGhlIGJ1ZmZlcjoKICAgKgogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLAogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3QgYmUgZGl2aXNpYmxlIGJ5IHNpeHRlZW4sCiAgICogKiBgbGVuZ3RoYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwgYW5kCiAgICogKiBgb2Zmc2V0SW5CeXRlcyArIGxlbmd0aCAqIDE2YCBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gW2xlbmd0aEluQnl0ZXNdLgogICAqLwogIEZsb2F0NjR4Mkxpc3QgYXNGbG9hdDY0eDJMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtCeXRlRGF0YV0gX3ZpZXdfIG9mIGEgcmVnaW9uIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaGUgdmlldyBpcyBiYWNrZWQgYnkgdGhlIGJ5dGVzIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICogQW55IGNoYW5nZXMgbWFkZSB0byB0aGUgYEJ5dGVEYXRhYCB3aWxsIGFsc28gY2hhbmdlIHRoZSBidWZmZXIsCiAgICogYW5kIHZpY2UgdmVyc2EuCiAgICoKICAgKiBUaGUgdmlld2VkIHJlZ2lvbiBzdGFydCBhdCBbb2Zmc2V0SW5CeXRlc10gYW5kIGNvbnRhaW5zIFtsZW5ndGhdIGJ5dGVzLgogICAqIElmIFtsZW5ndGhdIGlzIG9taXR0ZWQsIHRoZSByYW5nZSBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KICAgKgogICAqIFRoZSBzdGFydCBpbmRleCBhbmQgbGVuZ3RoIG11c3QgZGVzY3JpYmUgYSB2YWxpZCByYW5nZSBvZiB0aGUgYnVmZmVyOgogICAqCiAgICogKiBgb2Zmc2V0SW5CeXRlc2AgbXVzdCBub3QgYmUgbmVnYXRpdmUsCiAgICogKiBgbGVuZ3RoYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwgYW5kCiAgICogKiBgb2Zmc2V0SW5CeXRlcyArIGxlbmd0aGAgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIFtsZW5ndGhJbkJ5dGVzXS4KICAgKi8KICBCeXRlRGF0YSBhc0J5dGVEYXRhKFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKTsKfQoKLyoqCiAqIEEgdHlwZWQgdmlldyBvZiBhIHNlcXVlbmNlIG9mIGJ5dGVzLgogKi8KYWJzdHJhY3QgY2xhc3MgVHlwZWREYXRhIHsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHJlcHJlc2VudGF0aW9uIG9mIGVhY2ggZWxlbWVudCBpbiB0aGlzCiAgICogbGlzdC4KICAgKi8KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlczsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgb2Zmc2V0IGluIGJ5dGVzIGludG8gdGhlIHVuZGVybHlpbmcgYnl0ZSBidWZmZXIgb2YgdGhpcyB2aWV3LgogICAqLwogIGludCBnZXQgb2Zmc2V0SW5CeXRlczsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoaXMgdmlldywgaW4gYnl0ZXMuCiAgICovCiAgaW50IGdldCBsZW5ndGhJbkJ5dGVzOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBieXRlIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhpcyBvYmplY3QuCiAgICovCiAgQnl0ZUJ1ZmZlciBnZXQgYnVmZmVyOwp9CgphYnN0cmFjdCBjbGFzcyBfVHlwZWRJbnRMaXN0IGV4dGVuZHMgVHlwZWREYXRhIHsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoaXMgbGlzdCBhbmQgW290aGVyXS4KICAgKgogICAqIElmIG90aGVyIGlzIGFsc28gYSB0eXBlZC1kYXRhIGludGVnZXIgbGlzdCwgdGhlIHJldHVybmVkIGxpc3Qgd2lsbAogICAqIGJlIGEgdHlwZS1kYXRhIGludGVnZXIgbGlzdCBjYXBhYmxlIG9mIGNvbnRhaW5pbmcgYWxsIHRoZSBlbGVtZW50cyBvZgogICAqIHRoaXMgbGlzdCBhbmQgb2YgW290aGVyXS4KICAgKiBPdGhlcndpc2UgdGhlIHJldHVybmVkIGxpc3Qgd2lsbCBiZSBhIG5vcm1hbCBncm93YWJsZSBgTGlzdDxpbnQ+YC4KICAgKi8KICBMaXN0PGludD4gb3BlcmF0b3IgKyhMaXN0PGludD4gb3RoZXIpOwp9CgphYnN0cmFjdCBjbGFzcyBfVHlwZWRGbG9hdExpc3QgZXh0ZW5kcyBUeXBlZERhdGEgewogIC8qKgogICAqIFJldHVybnMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhpcyBsaXN0IGFuZCBbb3RoZXJdLgogICAqCiAgICogSWYgb3RoZXIgaXMgYWxzbyBhIHR5cGVkLWRhdGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGxpc3QsCiAgICogdGhlIHJldHVybmVkIGxpc3Qgd2lsbCBiZSBhIHR5cGUtZGF0YSBmbG9hdCBsaXN0IGNhcGFibGUgb2YgY29udGFpbmluZwogICAqIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhpcyBsaXN0IGFuZCBvZiBbb3RoZXJdLgogICAqIE90aGVyd2lzZSB0aGUgcmV0dXJuZWQgbGlzdCB3aWxsIGJlIGEgbm9ybWFsIGdyb3dhYmxlIGBMaXN0PGRvdWJsZT5gLgogICAqLwogIExpc3Q8ZG91YmxlPiBvcGVyYXRvciArKExpc3Q8ZG91YmxlPiBvdGhlcik7Cn0KCi8qKgogKiBEZXNjcmliZXMgZW5kaWFubmVzcyB0byBiZSB1c2VkIHdoZW4gYWNjZXNzaW5nIG9yIHVwZGF0aW5nIGEKICogc2VxdWVuY2Ugb2YgYnl0ZXMuCiAqLwpjbGFzcyBFbmRpYW4gewogIGZpbmFsIGJvb2wgX2xpdHRsZUVuZGlhbjsKICBjb25zdCBFbmRpYW4uXyh0aGlzLl9saXR0bGVFbmRpYW4pOwoKICBzdGF0aWMgY29uc3QgRW5kaWFuIGJpZyA9IGNvbnN0IEVuZGlhbi5fKGZhbHNlKTsKICBzdGF0aWMgY29uc3QgRW5kaWFuIGxpdHRsZSA9IGNvbnN0IEVuZGlhbi5fKHRydWUpOwogIHN0YXRpYyBmaW5hbCBFbmRpYW4gaG9zdCA9CiAgICAgIChuZXcgQnl0ZURhdGEudmlldyhuZXcgVWludDE2TGlzdC5mcm9tTGlzdChbMV0pLmJ1ZmZlcikpLmdldEludDgoMCkgPT0gMQogICAgICAgICAgPyBsaXR0bGUKICAgICAgICAgIDogYmlnOwp9CgovKioKICogQSBmaXhlZC1sZW5ndGgsIHJhbmRvbS1hY2Nlc3Mgc2VxdWVuY2Ugb2YgYnl0ZXMgdGhhdCBhbHNvIHByb3ZpZGVzIHJhbmRvbQogKiBhbmQgdW5hbGlnbmVkIGFjY2VzcyB0byB0aGUgZml4ZWQtd2lkdGggaW50ZWdlcnMgYW5kIGZsb2F0aW5nIHBvaW50CiAqIG51bWJlcnMgcmVwcmVzZW50ZWQgYnkgdGhvc2UgYnl0ZXMuCiAqCiAqIGBCeXRlRGF0YWAgbWF5IGJlIHVzZWQgdG8gcGFjayBhbmQgdW5wYWNrIGRhdGEgZnJvbSBleHRlcm5hbCBzb3VyY2VzCiAqIChzdWNoIGFzIG5ldHdvcmtzIG9yIGZpbGVzIHN5c3RlbXMpLCBhbmQgdG8gcHJvY2VzcyBsYXJnZSBxdWFudGl0aWVzCiAqIG9mIG51bWVyaWNhbCBkYXRhIG1vcmUgZWZmaWNpZW50bHkgdGhhbiB3b3VsZCBiZSBwb3NzaWJsZQogKiB3aXRoIG9yZGluYXJ5IFtMaXN0XSBpbXBsZW1lbnRhdGlvbnMuCiAqIGBCeXRlRGF0YWAgY2FuIHNhdmUgc3BhY2UsIGJ5IGVsaW1pbmF0aW5nIHRoZSBuZWVkIGZvciBvYmplY3QgaGVhZGVycywKICogYW5kIHRpbWUsIGJ5IGVsaW1pbmF0aW5nIHRoZSBuZWVkIGZvciBkYXRhIGNvcGllcy4KICogRmluYWxseSwgYEJ5dGVEYXRhYCBtYXkgYmUgdXNlZCB0byBpbnRlbnRpb25hbGx5IHJlaW50ZXJwcmV0IHRoZSBieXRlcwogKiByZXByZXNlbnRpbmcgb25lIGFyaXRobWV0aWMgdHlwZSBhcyBhbm90aGVyLgogKiBGb3IgZXhhbXBsZSB0aGlzIGNvZGUgZnJhZ21lbnQgZGV0ZXJtaW5lIHdoYXQgMzItYml0IHNpZ25lZCBpbnRlZ2VyCiAqIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBieXRlcyBvZiBhIDMyLWJpdCBmbG9hdGluZyBwb2ludCBudW1iZXIKICogKGJvdGggc3RvcmVkIGFzIGJpZyBlbmRpYW4pOgogKgogKiAgICAgdmFyIGJkYXRhID0gbmV3IEJ5dGVEYXRhKDgpOwogKiAgICAgYmRhdGEuc2V0RmxvYXQzMigwLCAzLjA0KTsKICogICAgIGludCBodWggPSBiZGF0YS5nZXRJbnQzMigwKTsgLy8gMHg0MDQyOGY1YwogKi8KYWJzdHJhY3QgY2xhc3MgQnl0ZURhdGEgaW1wbGVtZW50cyBUeXBlZERhdGEgewogIC8qKgogICAqIENyZWF0ZXMgYSBbQnl0ZURhdGFdIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIChpbiBlbGVtZW50cyksIGFsbCBvZgogICAqIHdob3NlIGJ5dGVzIGFyZSBpbml0aWFsbHkgemVyby4KICAgKi8KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgZXh0ZXJuYWwgZmFjdG9yeSBCeXRlRGF0YShpbnQgbGVuZ3RoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBbQnl0ZURhdGFdIF92aWV3XyBvZiB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBpbiBbYnVmZmVyXS4KICAgKgogICAqIENoYW5nZXMgaW4gdGhlIFtCeXRlRGF0YV0gd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBieXRlCiAgICogYnVmZmVyIGFuZCB2aWNlIHZlcnNhLgogICAqIElmIHRoZSBbb2Zmc2V0SW5CeXRlc10gaW5kZXggb2YgdGhlIHJlZ2lvbiBpcyBub3Qgc3BlY2lmaWVkLAogICAqIGl0IGRlZmF1bHRzIHRvIHplcm8gKHRoZSBmaXJzdCBieXRlIGluIHRoZSBieXRlIGJ1ZmZlcikuCiAgICogSWYgdGhlIGxlbmd0aCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBgbnVsbGAsCiAgICogd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIHZpZXcgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIG9yIFtsZW5ndGhdIGFyZSBuZWdhdGl2ZSwgb3IKICAgKiBpZiBbb2Zmc2V0SW5CeXRlc10gKyAoW2xlbmd0aF0gKiBlbGVtZW50U2l6ZUluQnl0ZXMpIGlzIGdyZWF0ZXIgdGhhbgogICAqIHRoZSBsZW5ndGggb2YgW2J1ZmZlcl0uCiAgICoKICAgKiBOb3RlIHRoYXQgd2hlbiBjcmVhdGluZyBhIHZpZXcgZnJvbSBhIFtUeXBlZERhdGFdIGxpc3Qgb3IgYnl0ZSBkYXRhLAogICAqIHRoYXQgbGlzdCBvciBieXRlIGRhdGEgbWF5IGl0c2VsZiBiZSBhIHZpZXcgb24gYSBsYXJnZXIgYnVmZmVyCiAgICogd2l0aCBhIFtUeXBlZERhdGEub2Zmc2V0SW5CeXRlc10gZ3JlYXRlciB0aGFuIHplcm8uCiAgICogTWVyZWx5IGRvaW5nIGBCeXRlRGF0YS52aWV3KG90aGVyLmJ1ZmZlciwgMCwgY291bnQpYCBtYXkgbm90CiAgICogcG9pbnQgdG8gdGhlIGJ5dGVzIHlvdSBpbnRlbmRlZC4gSW5zdGVhZCB5b3UgbWF5IG5lZWQgdG8gZG86CiAgICogYGBgZGFydAogICAqIEJ5dGVEYXRhLnZpZXcob3RoZXIuYnVmZmVyLCBvdGhlci5vZmZzZXRJbkJ5dGVzLCBjb3VudCkKICAgKiBgYGAKICAgKiBBbHRlcm5hdGl2ZWx5LCB1c2UgW0J5dGVEYXRhLnN1Ymxpc3RWaWV3XQogICAqIHdoaWNoIGluY2x1ZGVzIHRoaXMgY29tcHV0YXRpb24uCiAgICogYGBgZGFydAogICAqIEJ5dGVEYXRhLnN1Ymxpc3RWaWV3KG90aGVyLCAwLCBjb3VudCkKICAgKiBgYGAKICAgKiAoVGhlIHRoaXJkIGFyZ3VtZW50IGlzIGFuIGVuZCBpbmRleCByYXRoZXIgdGhhbiBhIGxlbmd0aCwgc28gaWYKICAgKiB5b3Ugc3RhcnQgZnJvbSBhIHBvc2l0aW9uIGdyZWF0ZXIgdGhhbiB6ZXJvLCB5b3UgbmVlZCBub3QKICAgKiByZWR1Y2UgdGhlIGNvdW50IGNvcnJlc3BvbmRpbmdseSkuCiAgICovCiAgZmFjdG9yeSBCeXRlRGF0YS52aWV3KEJ5dGVCdWZmZXIgYnVmZmVyLAogICAgICBbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgcmV0dXJuIGJ1ZmZlci5hc0J5dGVEYXRhKG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgW0J5dGVEYXRhXSB2aWV3IG9uIGEgcmFuZ2Ugb2YgZWxlbWVudHMgb2YgW2RhdGFdLgogICAqCiAgICogQ3JlYXRlcyBhIHZpZXcgb24gdGhlIHJhbmdlIG9mIGBkYXRhLmJ1ZmZlcmAgd2hpY2ggY29ycmVzcG9uZHMKICAgKiB0byB0aGUgZWxlbWVudHMgb2YgW2RhdGFdIGZyb20gW3N0YXJ0XSB1bnRpbCBbZW5kXS4KICAgKiBJZiBbZGF0YV0gaXMgYSB0eXBlZCBkYXRhIGxpc3QsIGxpa2UgW1VpbnQxNkxpc3RdLCB0aGVuIHRoZSB2aWV3IGlzIG9uCiAgICogdGhlIGJ5dGVzIG9mIHRoZSBlbGVtZW50cyB3aXRoIGluZGljZXMgZnJvbSBbc3RhcnRdIHVudGlsIFtlbmRdLgogICAqIElmIFtkYXRhXSBpcyBhIFtCeXRlRGF0YV0sIGl0J3MgdHJlYXRlZCBsaWtlIGEgbGlzdCBvZiBieXRlcy4KICAgKgogICAqIElmIHByb3ZpZGVkLCBbc3RhcnRdIGFuZCBbZW5kXSBtdXN0IHNhdGlzZnkKICAgKgogICAqIDAgJmxlOyBgc3RhcnRgICZsZTsgYGVuZGAgJmxlOyAqZWxlbWVudENvdW50KgogICAqCiAgICogd2hlcmUgKmVsZW1lbnRDb3VudCogaXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBbZGF0YV0sIHdoaWNoCiAgICogaXMgdGhlIHNhbWUgYXMgdGhlIFtMaXN0Lmxlbmd0aF0gb2YgYSB0eXBlZCBkYXRhIGxpc3QuCiAgICoKICAgKiBJZiBvbWl0dGVkLCBbc3RhcnRdIGRlZmF1bHRzIHRvIHplcm8gYW5kIFtlbmRdIHRvICplbGVtZW50Q291bnQqLgogICAqLwogIEBTaW5jZSgiMi44IikKICBmYWN0b3J5IEJ5dGVEYXRhLnN1Ymxpc3RWaWV3KFR5cGVkRGF0YSBkYXRhLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIGludCBlbGVtZW50U2l6ZSA9IGRhdGEuZWxlbWVudFNpemVJbkJ5dGVzOwogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2UoCiAgICAgICAgc3RhcnQsIGVuZCwgZGF0YS5sZW5ndGhJbkJ5dGVzIH4vIGVsZW1lbnRTaXplKTsKICAgIHJldHVybiBkYXRhLmJ1ZmZlci5hc0J5dGVEYXRhKAogICAgICAgIGRhdGEub2Zmc2V0SW5CeXRlcyArIHN0YXJ0ICogZWxlbWVudFNpemUsIChlbmQgLSBzdGFydCkgKiBlbGVtZW50U2l6ZSk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSAocG9zc2libHkgbmVnYXRpdmUpIGludGVnZXIgcmVwcmVzZW50ZWQgYnkgdGhlIGJ5dGUgYXQgdGhlCiAgICogc3BlY2lmaWVkIFtieXRlT2Zmc2V0XSBpbiB0aGlzIG9iamVjdCwgaW4gdHdvJ3MgY29tcGxlbWVudCBiaW5hcnkKICAgKiByZXByZXNlbnRhdGlvbi4KICAgKgogICAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBiZXR3ZWVuIC0xMjggYW5kIDEyNywgaW5jbHVzaXZlLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbYnl0ZU9mZnNldF0gaXMgbmVnYXRpdmUsIG9yCiAgICogZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBsZW5ndGggb2YgdGhpcyBvYmplY3QuCiAgICovCiAgaW50IGdldEludDgoaW50IGJ5dGVPZmZzZXQpOwoKICAvKioKICAgKiBTZXRzIHRoZSBieXRlIGF0IHRoZSBzcGVjaWZpZWQgW2J5dGVPZmZzZXRdIGluIHRoaXMgb2JqZWN0IHRvIHRoZQogICAqIHR3bydzIGNvbXBsZW1lbnQgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgW3ZhbHVlXSwgd2hpY2gKICAgKiBtdXN0IGZpdCBpbiBhIHNpbmdsZSBieXRlLgogICAqCiAgICogSW4gb3RoZXIgd29yZHMsIFt2YWx1ZV0gbXVzdCBiZSBiZXR3ZWVuIC0xMjggYW5kIDEyNywgaW5jbHVzaXZlLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbYnl0ZU9mZnNldF0gaXMgbmVnYXRpdmUsIG9yCiAgICogZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBsZW5ndGggb2YgdGhpcyBvYmplY3QuCiAgICovCiAgdm9pZCBzZXRJbnQ4KGludCBieXRlT2Zmc2V0LCBpbnQgdmFsdWUpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBwb3NpdGl2ZSBpbnRlZ2VyIHJlcHJlc2VudGVkIGJ5IHRoZSBieXRlIGF0IHRoZSBzcGVjaWZpZWQKICAgKiBbYnl0ZU9mZnNldF0gaW4gdGhpcyBvYmplY3QsIGluIHVuc2lnbmVkIGJpbmFyeSBmb3JtLgogICAqCiAgICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGJldHdlZW4gMCBhbmQgMjU1LCBpbmNsdXNpdmUuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtieXRlT2Zmc2V0XSBpcyBuZWdhdGl2ZSwgb3IKICAgKiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGxlbmd0aCBvZiB0aGlzIG9iamVjdC4KICAgKi8KICBpbnQgZ2V0VWludDgoaW50IGJ5dGVPZmZzZXQpOwoKICAvKioKICAgKiBTZXRzIHRoZSBieXRlIGF0IHRoZSBzcGVjaWZpZWQgW2J5dGVPZmZzZXRdIGluIHRoaXMgb2JqZWN0IHRvIHRoZQogICAqIHVuc2lnbmVkIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3BlY2lmaWVkIFt2YWx1ZV0sIHdoaWNoIG11c3QgZml0CiAgICogaW4gYSBzaW5nbGUgYnl0ZS4KICAgKgogICAqIEluIG90aGVyIHdvcmRzLCBbdmFsdWVdIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNTUsIGluY2x1c2l2ZS4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW2J5dGVPZmZzZXRdIGlzIG5lZ2F0aXZlLAogICAqIG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0LgogICAqLwogIHZvaWQgc2V0VWludDgoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIChwb3NzaWJseSBuZWdhdGl2ZSkgaW50ZWdlciByZXByZXNlbnRlZCBieSB0aGUgdHdvIGJ5dGVzIGF0CiAgICogdGhlIHNwZWNpZmllZCBbYnl0ZU9mZnNldF0gaW4gdGhpcyBvYmplY3QsIGluIHR3bydzIGNvbXBsZW1lbnQgYmluYXJ5CiAgICogZm9ybS4KICAgKgogICAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBiZXR3ZWVuIC0yPHN1cD4xNTwvc3VwPiBhbmQgMjxzdXA+MTU8L3N1cD4gLSAxLAogICAqIGluY2x1c2l2ZS4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW2J5dGVPZmZzZXRdIGlzIG5lZ2F0aXZlLCBvcgogICAqIGBieXRlT2Zmc2V0ICsgMmAgaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcyBvYmplY3QuCiAgICovCiAgaW50IGdldEludDE2KGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKTsKCiAgLyoqCiAgICogU2V0cyB0aGUgdHdvIGJ5dGVzIHN0YXJ0aW5nIGF0IHRoZSBzcGVjaWZpZWQgW2J5dGVPZmZzZXRdIGluIHRoaXMKICAgKiBvYmplY3QgdG8gdGhlIHR3bydzIGNvbXBsZW1lbnQgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzcGVjaWZpZWQKICAgKiBbdmFsdWVdLCB3aGljaCBtdXN0IGZpdCBpbiB0d28gYnl0ZXMuCiAgICoKICAgKiBJbiBvdGhlciB3b3JkcywgW3ZhbHVlXSBtdXN0IGxpZQogICAqIGJldHdlZW4gLTI8c3VwPjE1PC9zdXA+IGFuZCAyPHN1cD4xNTwvc3VwPiAtIDEsIGluY2x1c2l2ZS4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW2J5dGVPZmZzZXRdIGlzIG5lZ2F0aXZlLCBvcgogICAqIGBieXRlT2Zmc2V0ICsgMmAgaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcyBvYmplY3QuCiAgICovCiAgdm9pZCBzZXRJbnQxNihpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlLCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcG9zaXRpdmUgaW50ZWdlciByZXByZXNlbnRlZCBieSB0aGUgdHdvIGJ5dGVzIHN0YXJ0aW5nCiAgICogYXQgdGhlIHNwZWNpZmllZCBbYnl0ZU9mZnNldF0gaW4gdGhpcyBvYmplY3QsIGluIHVuc2lnbmVkIGJpbmFyeQogICAqIGZvcm0uCiAgICoKICAgKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYmV0d2VlbiAwIGFuZCAgMjxzdXA+MTY8L3N1cD4gLSAxLCBpbmNsdXNpdmUuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtieXRlT2Zmc2V0XSBpcyBuZWdhdGl2ZSwgb3IKICAgKiBgYnl0ZU9mZnNldCArIDJgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0LgogICAqLwogIGludCBnZXRVaW50MTYoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pOwoKICAvKioKICAgKiBTZXRzIHRoZSB0d28gYnl0ZXMgc3RhcnRpbmcgYXQgdGhlIHNwZWNpZmllZCBbYnl0ZU9mZnNldF0gaW4gdGhpcyBvYmplY3QKICAgKiB0byB0aGUgdW5zaWduZWQgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgW3ZhbHVlXSwKICAgKiB3aGljaCBtdXN0IGZpdCBpbiB0d28gYnl0ZXMuCiAgICoKICAgKiBJbiBvdGhlciB3b3JkcywgW3ZhbHVlXSBtdXN0IGJlIGJldHdlZW4KICAgKiAwIGFuZCAyPHN1cD4xNjwvc3VwPiAtIDEsIGluY2x1c2l2ZS4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW2J5dGVPZmZzZXRdIGlzIG5lZ2F0aXZlLCBvcgogICAqIGBieXRlT2Zmc2V0ICsgMmAgaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcyBvYmplY3QuCiAgICovCiAgdm9pZCBzZXRVaW50MTYoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIChwb3NzaWJseSBuZWdhdGl2ZSkgaW50ZWdlciByZXByZXNlbnRlZCBieSB0aGUgZm91ciBieXRlcyBhdAogICAqIHRoZSBzcGVjaWZpZWQgW2J5dGVPZmZzZXRdIGluIHRoaXMgb2JqZWN0LCBpbiB0d28ncyBjb21wbGVtZW50IGJpbmFyeQogICAqIGZvcm0uCiAgICoKICAgKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYmV0d2VlbiAtMjxzdXA+MzE8L3N1cD4gYW5kIDI8c3VwPjMxPC9zdXA+IC0gMSwKICAgKiBpbmNsdXNpdmUuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtieXRlT2Zmc2V0XSBpcyBuZWdhdGl2ZSwgb3IKICAgKiBgYnl0ZU9mZnNldCArIDRgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0LgogICAqLwogIGludCBnZXRJbnQzMihpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSk7CgogIC8qKgogICAqIFNldHMgdGhlIGZvdXIgYnl0ZXMgc3RhcnRpbmcgYXQgdGhlIHNwZWNpZmllZCBbYnl0ZU9mZnNldF0gaW4gdGhpcwogICAqIG9iamVjdCB0byB0aGUgdHdvJ3MgY29tcGxlbWVudCBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNwZWNpZmllZAogICAqIFt2YWx1ZV0sIHdoaWNoIG11c3QgZml0IGluIGZvdXIgYnl0ZXMuCiAgICoKICAgKiBJbiBvdGhlciB3b3JkcywgW3ZhbHVlXSBtdXN0IGxpZQogICAqIGJldHdlZW4gLTI8c3VwPjMxPC9zdXA+IGFuZCAyPHN1cD4zMTwvc3VwPiAtIDEsIGluY2x1c2l2ZS4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW2J5dGVPZmZzZXRdIGlzIG5lZ2F0aXZlLCBvcgogICAqIGBieXRlT2Zmc2V0ICsgNGAgaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcyBvYmplY3QuCiAgICovCiAgdm9pZCBzZXRJbnQzMihpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlLCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcG9zaXRpdmUgaW50ZWdlciByZXByZXNlbnRlZCBieSB0aGUgZm91ciBieXRlcyBzdGFydGluZwogICAqIGF0IHRoZSBzcGVjaWZpZWQgW2J5dGVPZmZzZXRdIGluIHRoaXMgb2JqZWN0LCBpbiB1bnNpZ25lZCBiaW5hcnkKICAgKiBmb3JtLgogICAqCiAgICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGJldHdlZW4gMCBhbmQgIDI8c3VwPjMyPC9zdXA+IC0gMSwgaW5jbHVzaXZlLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbYnl0ZU9mZnNldF0gaXMgbmVnYXRpdmUsIG9yCiAgICogYGJ5dGVPZmZzZXQgKyA0YCBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzIG9iamVjdC4KICAgKi8KICBpbnQgZ2V0VWludDMyKGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKTsKCiAgLyoqCiAgICogU2V0cyB0aGUgZm91ciBieXRlcyBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIFtieXRlT2Zmc2V0XSBpbiB0aGlzIG9iamVjdAogICAqIHRvIHRoZSB1bnNpZ25lZCBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNwZWNpZmllZCBbdmFsdWVdLAogICAqIHdoaWNoIG11c3QgZml0IGluIGZvdXIgYnl0ZXMuCiAgICoKICAgKiBJbiBvdGhlciB3b3JkcywgW3ZhbHVlXSBtdXN0IGJlIGJldHdlZW4KICAgKiAwIGFuZCAyPHN1cD4zMjwvc3VwPiAtIDEsIGluY2x1c2l2ZS4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW2J5dGVPZmZzZXRdIGlzIG5lZ2F0aXZlLCBvcgogICAqIGBieXRlT2Zmc2V0ICsgNGAgaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcyBvYmplY3QuCiAgICovCiAgdm9pZCBzZXRVaW50MzIoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIChwb3NzaWJseSBuZWdhdGl2ZSkgaW50ZWdlciByZXByZXNlbnRlZCBieSB0aGUgZWlnaHQgYnl0ZXMgYXQKICAgKiB0aGUgc3BlY2lmaWVkIFtieXRlT2Zmc2V0XSBpbiB0aGlzIG9iamVjdCwgaW4gdHdvJ3MgY29tcGxlbWVudCBiaW5hcnkKICAgKiBmb3JtLgogICAqCiAgICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGJldHdlZW4gLTI8c3VwPjYzPC9zdXA+IGFuZCAyPHN1cD42Mzwvc3VwPiAtIDEsCiAgICogaW5jbHVzaXZlLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbYnl0ZU9mZnNldF0gaXMgbmVnYXRpdmUsIG9yCiAgICogYGJ5dGVPZmZzZXQgKyA4YCBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzIG9iamVjdC4KICAgKi8KICBpbnQgZ2V0SW50NjQoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pOwoKICAvKioKICAgKiBTZXRzIHRoZSBlaWdodCBieXRlcyBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIFtieXRlT2Zmc2V0XSBpbiB0aGlzCiAgICogb2JqZWN0IHRvIHRoZSB0d28ncyBjb21wbGVtZW50IGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3BlY2lmaWVkCiAgICogW3ZhbHVlXSwgd2hpY2ggbXVzdCBmaXQgaW4gZWlnaHQgYnl0ZXMuCiAgICoKICAgKiBJbiBvdGhlciB3b3JkcywgW3ZhbHVlXSBtdXN0IGxpZQogICAqIGJldHdlZW4gLTI8c3VwPjYzPC9zdXA+IGFuZCAyPHN1cD42Mzwvc3VwPiAtIDEsIGluY2x1c2l2ZS4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW2J5dGVPZmZzZXRdIGlzIG5lZ2F0aXZlLCBvcgogICAqIGBieXRlT2Zmc2V0ICsgOGAgaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcyBvYmplY3QuCiAgICovCiAgdm9pZCBzZXRJbnQ2NChpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlLCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcG9zaXRpdmUgaW50ZWdlciByZXByZXNlbnRlZCBieSB0aGUgZWlnaHQgYnl0ZXMgc3RhcnRpbmcKICAgKiBhdCB0aGUgc3BlY2lmaWVkIFtieXRlT2Zmc2V0XSBpbiB0aGlzIG9iamVjdCwgaW4gdW5zaWduZWQgYmluYXJ5CiAgICogZm9ybS4KICAgKgogICAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBiZXR3ZWVuIDAgYW5kICAyPHN1cD42NDwvc3VwPiAtIDEsIGluY2x1c2l2ZS4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW2J5dGVPZmZzZXRdIGlzIG5lZ2F0aXZlLCBvcgogICAqIGBieXRlT2Zmc2V0ICsgOGAgaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcyBvYmplY3QuCiAgICovCiAgaW50IGdldFVpbnQ2NChpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSk7CgogIC8qKgogICAqIFNldHMgdGhlIGVpZ2h0IGJ5dGVzIHN0YXJ0aW5nIGF0IHRoZSBzcGVjaWZpZWQgW2J5dGVPZmZzZXRdIGluIHRoaXMgb2JqZWN0CiAgICogdG8gdGhlIHVuc2lnbmVkIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3BlY2lmaWVkIFt2YWx1ZV0sCiAgICogd2hpY2ggbXVzdCBmaXQgaW4gZWlnaHQgYnl0ZXMuCiAgICoKICAgKiBJbiBvdGhlciB3b3JkcywgW3ZhbHVlXSBtdXN0IGJlIGJldHdlZW4KICAgKiAwIGFuZCAyPHN1cD42NDwvc3VwPiAtIDEsIGluY2x1c2l2ZS4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW2J5dGVPZmZzZXRdIGlzIG5lZ2F0aXZlLCBvcgogICAqIGBieXRlT2Zmc2V0ICsgOGAgaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcyBvYmplY3QuCiAgICovCiAgdm9pZCBzZXRVaW50NjQoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGZsb2F0aW5nIHBvaW50IG51bWJlciByZXByZXNlbnRlZCBieSB0aGUgZm91ciBieXRlcyBhdAogICAqIHRoZSBzcGVjaWZpZWQgW2J5dGVPZmZzZXRdIGluIHRoaXMgb2JqZWN0LCBpbiBJRUVFIDc1NAogICAqIHNpbmdsZS1wcmVjaXNpb24gYmluYXJ5IGZsb2F0aW5nLXBvaW50IGZvcm1hdCAoYmluYXJ5MzIpLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbYnl0ZU9mZnNldF0gaXMgbmVnYXRpdmUsIG9yCiAgICogYGJ5dGVPZmZzZXQgKyA0YCBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzIG9iamVjdC4KICAgKi8KICBkb3VibGUgZ2V0RmxvYXQzMihpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSk7CgogIC8qKgogICAqIFNldHMgdGhlIGZvdXIgYnl0ZXMgc3RhcnRpbmcgYXQgdGhlIHNwZWNpZmllZCBbYnl0ZU9mZnNldF0gaW4gdGhpcwogICAqIG9iamVjdCB0byB0aGUgSUVFRSA3NTQgc2luZ2xlLXByZWNpc2lvbiBiaW5hcnkgZmxvYXRpbmctcG9pbnQKICAgKiAoYmluYXJ5MzIpIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgW3ZhbHVlXS4KICAgKgogICAqICoqTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGNhbiBsb3NlIHByZWNpc2lvbi4qKiBUaGUgaW5wdXQgW3ZhbHVlXSBpcwogICAqIGEgNjQtYml0IGZsb2F0aW5nIHBvaW50IHZhbHVlLCB3aGljaCB3aWxsIGJlIGNvbnZlcnRlZCB0byAzMi1iaXQKICAgKiBmbG9hdGluZyBwb2ludCB2YWx1ZSBieSBJRUVFIDc1NCByb3VuZGluZyBydWxlcyBiZWZvcmUgaXQgaXMgc3RvcmVkLgogICAqIElmIFt2YWx1ZV0gY2Fubm90IGJlIHJlcHJlc2VudGVkIGV4YWN0bHkgYXMgYSBiaW5hcnkzMiwgaXQgd2lsbCBiZQogICAqIGNvbnZlcnRlZCB0byB0aGUgbmVhcmVzdCBiaW5hcnkzMiB2YWx1ZS4gIElmIHR3byBiaW5hcnkzMiB2YWx1ZXMgYXJlCiAgICogZXF1YWxseSBjbG9zZSwgdGhlIG9uZSB3aG9zZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgaXMgemVybyB3aWxsIGJlIHVzZWQuCiAgICogTm90ZSB0aGF0IGZpbml0ZSAoYnV0IGxhcmdlKSB2YWx1ZXMgY2FuIGJlIGNvbnZlcnRlZCB0byBpbmZpbml0eSwgYW5kCiAgICogc21hbGwgbm9uLXplcm8gdmFsdWVzIGNhbiBiZSBjb252ZXJ0ZWQgdG8gemVyby4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW2J5dGVPZmZzZXRdIGlzIG5lZ2F0aXZlLCBvcgogICAqIGBieXRlT2Zmc2V0ICsgNGAgaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcyBvYmplY3QuCiAgICovCiAgdm9pZCBzZXRGbG9hdDMyKGludCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBmbG9hdGluZyBwb2ludCBudW1iZXIgcmVwcmVzZW50ZWQgYnkgdGhlIGVpZ2h0IGJ5dGVzIGF0CiAgICogdGhlIHNwZWNpZmllZCBbYnl0ZU9mZnNldF0gaW4gdGhpcyBvYmplY3QsIGluIElFRUUgNzU0CiAgICogZG91YmxlLXByZWNpc2lvbiBiaW5hcnkgZmxvYXRpbmctcG9pbnQgZm9ybWF0IChiaW5hcnk2NCkuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtieXRlT2Zmc2V0XSBpcyBuZWdhdGl2ZSwgb3IKICAgKiBgYnl0ZU9mZnNldCArIDhgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0LgogICAqLwogIGRvdWJsZSBnZXRGbG9hdDY0KGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKTsKCiAgLyoqCiAgICogU2V0cyB0aGUgZWlnaHQgYnl0ZXMgc3RhcnRpbmcgYXQgdGhlIHNwZWNpZmllZCBbYnl0ZU9mZnNldF0gaW4gdGhpcwogICAqIG9iamVjdCB0byB0aGUgSUVFRSA3NTQgZG91YmxlLXByZWNpc2lvbiBiaW5hcnkgZmxvYXRpbmctcG9pbnQKICAgKiAoYmluYXJ5NjQpIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgW3ZhbHVlXS4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW2J5dGVPZmZzZXRdIGlzIG5lZ2F0aXZlLCBvcgogICAqIGBieXRlT2Zmc2V0ICsgOGAgaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcyBvYmplY3QuCiAgICovCiAgdm9pZCBzZXRGbG9hdDY0KGludCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pOwp9CgovKioKICogQSBmaXhlZC1sZW5ndGggbGlzdCBvZiA4LWJpdCBzaWduZWQgaW50ZWdlcnMuCiAqCiAqIEZvciBsb25nIGxpc3RzLCB0aGlzIGltcGxlbWVudGF0aW9uIGNhbiBiZSBjb25zaWRlcmFibHkKICogbW9yZSBzcGFjZS0gYW5kIHRpbWUtZWZmaWNpZW50IHRoYW4gdGhlIGRlZmF1bHQgW0xpc3RdIGltcGxlbWVudGF0aW9uLgogKgogKiBJbnRlZ2VycyBzdG9yZWQgaW4gdGhlIGxpc3QgYXJlIHRydW5jYXRlZCB0byB0aGVpciBsb3cgZWlnaHQgYml0cywKICogaW50ZXJwcmV0ZWQgYXMgYSBzaWduZWQgOC1iaXQgdHdvJ3MgY29tcGxlbWVudCBpbnRlZ2VyIHdpdGggdmFsdWVzIGluIHRoZQogKiByYW5nZSAtMTI4IHRvICsxMjcuCiAqLwphYnN0cmFjdCBjbGFzcyBJbnQ4TGlzdCBpbXBsZW1lbnRzIExpc3Q8aW50PiwgX1R5cGVkSW50TGlzdCB7CiAgLyoqCiAgICogQ3JlYXRlcyBhbiBbSW50OExpc3RdIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIChpbiBlbGVtZW50cyksIGFsbCBvZgogICAqIHdob3NlIGVsZW1lbnRzIGFyZSBpbml0aWFsbHkgemVyby4KICAgKgogICAqIFRoZSBsaXN0IGlzIGJhY2tlZCBieSBhIFtCeXRlQnVmZmVyXSBjb250YWluaW5nIHByZWNpc2VseSBbbGVuZ3RoXSBieXRlcy4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEludDhMaXN0KGludCBsZW5ndGgpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0ludDhMaXN0XSB3aXRoIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgW2VsZW1lbnRzXSBsaXN0CiAgICogYW5kIGNvcGllcyBvdmVyIHRoZSBlbGVtZW50cy4KICAgKgogICAqIFZhbHVlcyBhcmUgdHJ1bmNhdGVkIHRvIGZpdCBpbiB0aGUgbGlzdCB3aGVuIHRoZXkgYXJlIGNvcGllZCwKICAgKiB0aGUgc2FtZSB3YXkgc3RvcmluZyB2YWx1ZXMgdHJ1bmNhdGVzIHRoZW0uCiAgICoKICAgKiBUaGUgbGlzdCBpcyBiYWNrZWQgYnkgYSBbQnl0ZUJ1ZmZlcl0gY29udGFpbmluZyBwcmVjaXNlbHkgYGVsZW1lbnRzLmxlbmd0aGAKICAgKiBieXRlcy4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEludDhMaXN0LmZyb21MaXN0KExpc3Q8aW50PiBlbGVtZW50cyk7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gW0ludDhMaXN0XSBfdmlld18gb2YgdGhlIHNwZWNpZmllZCByZWdpb24gaW4gW2J1ZmZlcl0uCiAgICoKICAgKiBDaGFuZ2VzIGluIHRoZSBbSW50OExpc3RdIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgYnl0ZQogICAqIGJ1ZmZlciBhbmQgdmljZSB2ZXJzYS4KICAgKiBJZiB0aGUgW29mZnNldEluQnl0ZXNdIGluZGV4IG9mIHRoZSByZWdpb24gaXMgbm90IHNwZWNpZmllZCwKICAgKiBpdCBkZWZhdWx0cyB0byB6ZXJvICh0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgYnl0ZSBidWZmZXIpLgogICAqIElmIHRoZSBsZW5ndGggaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gYG51bGxgLAogICAqIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSB2aWV3IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBvciBbbGVuZ3RoXSBhcmUgbmVnYXRpdmUsIG9yCiAgICogaWYgW29mZnNldEluQnl0ZXNdICsgKFtsZW5ndGhdICogZWxlbWVudFNpemVJbkJ5dGVzKSBpcyBncmVhdGVyIHRoYW4KICAgKiB0aGUgbGVuZ3RoIG9mIFtidWZmZXJdLgogICAqCiAgICogTm90ZSB0aGF0IHdoZW4gY3JlYXRpbmcgYSB2aWV3IGZyb20gYSBbVHlwZWREYXRhXSBsaXN0IG9yIGJ5dGUgZGF0YSwKICAgKiB0aGF0IGxpc3Qgb3IgYnl0ZSBkYXRhIG1heSBpdHNlbGYgYmUgYSB2aWV3IG9uIGEgbGFyZ2VyIGJ1ZmZlcgogICAqIHdpdGggYSBbVHlwZWREYXRhLm9mZnNldEluQnl0ZXNdIGdyZWF0ZXIgdGhhbiB6ZXJvLgogICAqIE1lcmVseSBkb2luZyBgSW50OExpc3QudmlldyhvdGhlci5idWZmZXIsIDAsIGNvdW50KWAgbWF5IG5vdAogICAqIHBvaW50IHRvIHRoZSBieXRlcyB5b3UgaW50ZW5kZWQuIEluc3RlYWQgeW91IG1heSBuZWVkIHRvIGRvOgogICAqIGBgYGRhcnQKICAgKiBJbnQ4TGlzdC52aWV3KG90aGVyLmJ1ZmZlciwgb3RoZXIub2Zmc2V0SW5CeXRlcywgY291bnQpCiAgICogYGBgCiAgICogQWx0ZXJuYXRpdmVseSwgdXNlIFtJbnQ4TGlzdC5zdWJsaXN0Vmlld10KICAgKiB3aGljaCBpbmNsdWRlcyB0aGlzIGNvbXB1dGF0aW9uLgogICAqIGBgYGRhcnQKICAgKiBJbnQ4TGlzdC5zdWJsaXN0VmlldyhvdGhlciwgMCwgY291bnQpCiAgICogYGBgCiAgICogKFRoZSB0aGlyZCBhcmd1bWVudCBpcyBhbiBlbmQgaW5kZXggcmF0aGVyIHRoYW4gYSBsZW5ndGgsIHNvIGlmCiAgICogeW91IHN0YXJ0IGZyb20gYSBwb3NpdGlvbiBncmVhdGVyIHRoYW4gemVybywgeW91IG5lZWQgbm90CiAgICogcmVkdWNlIHRoZSBjb3VudCBjb3JyZXNwb25kaW5nbHkpLgogICAqLwogIGZhY3RvcnkgSW50OExpc3QudmlldyhCeXRlQnVmZmVyIGJ1ZmZlciwKICAgICAgW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIHJldHVybiBidWZmZXIuYXNJbnQ4TGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBbSW50OExpc3RdIHZpZXcgb24gYSByYW5nZSBvZiBlbGVtZW50cyBvZiBbZGF0YV0uCiAgICoKICAgKiBDcmVhdGVzIGEgdmlldyBvbiB0aGUgcmFuZ2Ugb2YgYGRhdGEuYnVmZmVyYCB3aGljaCBjb3JyZXNwb25kcwogICAqIHRvIHRoZSBlbGVtZW50cyBvZiBbZGF0YV0gZnJvbSBbc3RhcnRdIHVudGlsIFtlbmRdLgogICAqIElmIFtkYXRhXSBpcyBhIHR5cGVkIGRhdGEgbGlzdCwgbGlrZSBbVWludDE2TGlzdF0sIHRoZW4gdGhlIHZpZXcgaXMgb24KICAgKiB0aGUgYnl0ZXMgb2YgdGhlIGVsZW1lbnRzIHdpdGggaW5kaWNlcyBmcm9tIFtzdGFydF0gdW50aWwgW2VuZF0uCiAgICogSWYgW2RhdGFdIGlzIGEgW0J5dGVEYXRhXSwgaXQncyB0cmVhdGVkIGxpa2UgYSBsaXN0IG9mIGJ5dGVzLgogICAqCiAgICogSWYgcHJvdmlkZWQsIFtzdGFydF0gYW5kIFtlbmRdIG11c3Qgc2F0aXNmeQogICAqCiAgICogMCAmbGU7IGBzdGFydGAgJmxlOyBgZW5kYCAmbGU7ICplbGVtZW50Q291bnQqCiAgICoKICAgKiB3aGVyZSAqZWxlbWVudENvdW50KiBpcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIFtkYXRhXSwgd2hpY2gKICAgKiBpcyB0aGUgc2FtZSBhcyB0aGUgW0xpc3QubGVuZ3RoXSBvZiBhIHR5cGVkIGRhdGEgbGlzdC4KICAgKgogICAqIElmIG9taXR0ZWQsIFtzdGFydF0gZGVmYXVsdHMgdG8gemVybyBhbmQgW2VuZF0gdG8gKmVsZW1lbnRDb3VudCouCiAgICovCiAgQFNpbmNlKCIyLjgiKQogIGZhY3RvcnkgSW50OExpc3Quc3VibGlzdFZpZXcoVHlwZWREYXRhIGRhdGEsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgaW50IGVsZW1lbnRTaXplID0gZGF0YS5lbGVtZW50U2l6ZUluQnl0ZXM7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZSgKICAgICAgICBzdGFydCwgZW5kLCBkYXRhLmxlbmd0aEluQnl0ZXMgfi8gZWxlbWVudFNpemUpOwogICAgcmV0dXJuIGRhdGEuYnVmZmVyLmFzSW50OExpc3QoCiAgICAgICAgZGF0YS5vZmZzZXRJbkJ5dGVzICsgc3RhcnQgKiBlbGVtZW50U2l6ZSwgKGVuZCAtIHN0YXJ0KSAqIGVsZW1lbnRTaXplKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBiZXR3ZWVuIFtzdGFydF0gYW5kIFtlbmRdLgogICAqCiAgICogVGhlIG5ldyBsaXN0IGlzIGFuIGBJbnQ4TGlzdGAgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcyBsaXN0IGF0CiAgICogcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbc3RhcnRdIGFuZCBsZXNzIHRoYW4gW2VuZF0gaW4gdGhlIHNhbWUKICAgKiBvcmRlciBhcyB0aGV5IG9jY3VyIGluIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiB2YXIgbnVtYmVycyA9IEludDhMaXN0LmZyb21MaXN0KFswLCAxLCAyLCAzLCA0XSk7CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpKTsgLy8gWzEsIDJdCiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpLnJ1bnRpbWVUeXBlKTsgLy8gSW50OExpc3QKICAgKiBgYGAKICAgKgogICAqIElmIFtlbmRdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRoZSBbbGVuZ3RoXSBvZiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEpKTsgLy8gWzEsIDIsIDMsIDRdCiAgICogYGBgCiAgICoKICAgKiBUaGUgYHN0YXJ0YCBhbmQgYGVuZGAgcG9zaXRpb25zIG11c3Qgc2F0aXNmeSB0aGUgcmVsYXRpb25zCiAgICogMCDiiaQgYHN0YXJ0YCDiiaQgYGVuZGAg4omkIGB0aGlzLmxlbmd0aGAKICAgKiBJZiBgZW5kYCBpcyBlcXVhbCB0byBgc3RhcnRgLCB0aGVuIHRoZSByZXR1cm5lZCBsaXN0IGlzIGVtcHR5LgogICAqLwogIEludDhMaXN0IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pOwoKICBzdGF0aWMgY29uc3QgaW50IGJ5dGVzUGVyRWxlbWVudCA9IDE7Cn0KCi8qKgogKiBBIGZpeGVkLWxlbmd0aCBsaXN0IG9mIDgtYml0IHVuc2lnbmVkIGludGVnZXJzLgogKgogKiBGb3IgbG9uZyBsaXN0cywgdGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgY29uc2lkZXJhYmx5CiAqIG1vcmUgc3BhY2UtIGFuZCB0aW1lLWVmZmljaWVudCB0aGFuIHRoZSBkZWZhdWx0IFtMaXN0XSBpbXBsZW1lbnRhdGlvbi4KICoKICogSW50ZWdlcnMgc3RvcmVkIGluIHRoZSBsaXN0IGFyZSB0cnVuY2F0ZWQgdG8gdGhlaXIgbG93IGVpZ2h0IGJpdHMsCiAqIGludGVycHJldGVkIGFzIGFuIHVuc2lnbmVkIDgtYml0IGludGVnZXIgd2l0aCB2YWx1ZXMgaW4gdGhlCiAqIHJhbmdlIDAgdG8gMjU1LgogKi8KYWJzdHJhY3QgY2xhc3MgVWludDhMaXN0IGltcGxlbWVudHMgTGlzdDxpbnQ+LCBfVHlwZWRJbnRMaXN0IHsKICAvKioKICAgKiBDcmVhdGVzIGEgW1VpbnQ4TGlzdF0gb2YgdGhlIHNwZWNpZmllZCBsZW5ndGggKGluIGVsZW1lbnRzKSwgYWxsIG9mCiAgICogd2hvc2UgZWxlbWVudHMgYXJlIGluaXRpYWxseSB6ZXJvLgogICAqCiAgICogVGhlIGxpc3QgaXMgYmFja2VkIGJ5IGEgW0J5dGVCdWZmZXJdIGNvbnRhaW5pbmcgcHJlY2lzZWx5IFtsZW5ndGhdIGJ5dGVzLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgVWludDhMaXN0KGludCBsZW5ndGgpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1VpbnQ4TGlzdF0gd2l0aCB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIFtlbGVtZW50c10gbGlzdAogICAqIGFuZCBjb3BpZXMgb3ZlciB0aGUgZWxlbWVudHMuCiAgICoKICAgKiBWYWx1ZXMgYXJlIHRydW5jYXRlZCB0byBmaXQgaW4gdGhlIGxpc3Qgd2hlbiB0aGV5IGFyZSBjb3BpZWQsCiAgICogdGhlIHNhbWUgd2F5IHN0b3JpbmcgdmFsdWVzIHRydW5jYXRlcyB0aGVtLgogICAqCiAgICogVGhlIGxpc3QgaXMgYmFja2VkIGJ5IGEgW0J5dGVCdWZmZXJdIGNvbnRhaW5pbmcgcHJlY2lzZWx5IGBlbGVtZW50cy5sZW5ndGhgCiAgICogYnl0ZXMuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBVaW50OExpc3QuZnJvbUxpc3QoTGlzdDxpbnQ+IGVsZW1lbnRzKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtVaW50OExpc3RdIF92aWV3XyBvZiB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBpbiBbYnVmZmVyXS4KICAgKgogICAqIENoYW5nZXMgaW4gdGhlIFtVaW50OExpc3RdIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgYnl0ZQogICAqIGJ1ZmZlciBhbmQgdmljZSB2ZXJzYS4KICAgKiBJZiB0aGUgW29mZnNldEluQnl0ZXNdIGluZGV4IG9mIHRoZSByZWdpb24gaXMgbm90IHNwZWNpZmllZCwKICAgKiBpdCBkZWZhdWx0cyB0byB6ZXJvICh0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgYnl0ZSBidWZmZXIpLgogICAqIElmIHRoZSBsZW5ndGggaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gYG51bGxgLAogICAqIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSB2aWV3IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBvciBbbGVuZ3RoXSBhcmUgbmVnYXRpdmUsIG9yCiAgICogaWYgW29mZnNldEluQnl0ZXNdICsgKFtsZW5ndGhdICogZWxlbWVudFNpemVJbkJ5dGVzKSBpcyBncmVhdGVyIHRoYW4KICAgKiB0aGUgbGVuZ3RoIG9mIFtidWZmZXJdLgogICAqCiAgICogTm90ZSB0aGF0IHdoZW4gY3JlYXRpbmcgYSB2aWV3IGZyb20gYSBbVHlwZWREYXRhXSBsaXN0IG9yIGJ5dGUgZGF0YSwKICAgKiB0aGF0IGxpc3Qgb3IgYnl0ZSBkYXRhIG1heSBpdHNlbGYgYmUgYSB2aWV3IG9uIGEgbGFyZ2VyIGJ1ZmZlcgogICAqIHdpdGggYSBbVHlwZWREYXRhLm9mZnNldEluQnl0ZXNdIGdyZWF0ZXIgdGhhbiB6ZXJvLgogICAqIE1lcmVseSBkb2luZyBgVWludDhMaXN0LnZpZXcob3RoZXIuYnVmZmVyLCAwLCBjb3VudClgIG1heSBub3QKICAgKiBwb2ludCB0byB0aGUgYnl0ZXMgeW91IGludGVuZGVkLiBJbnN0ZWFkIHlvdSBtYXkgbmVlZCB0byBkbzoKICAgKiBgYGBkYXJ0CiAgICogVWludDhMaXN0LnZpZXcob3RoZXIuYnVmZmVyLCBvdGhlci5vZmZzZXRJbkJ5dGVzLCBjb3VudCkKICAgKiBgYGAKICAgKiBBbHRlcm5hdGl2ZWx5LCB1c2UgW1VpbnQ4TGlzdC5zdWJsaXN0Vmlld10KICAgKiB3aGljaCBpbmNsdWRlcyB0aGlzIGNvbXB1dGF0aW9uLgogICAqIGBgYGRhcnQKICAgKiBVaW50OExpc3Quc3VibGlzdFZpZXcob3RoZXIsIDAsIGNvdW50KQogICAqIGBgYAogICAqIChUaGUgdGhpcmQgYXJndW1lbnQgaXMgYW4gZW5kIGluZGV4IHJhdGhlciB0aGFuIGEgbGVuZ3RoLCBzbyBpZgogICAqIHlvdSBzdGFydCBmcm9tIGEgcG9zaXRpb24gZ3JlYXRlciB0aGFuIHplcm8sIHlvdSBuZWVkIG5vdAogICAqIHJlZHVjZSB0aGUgY291bnQgY29ycmVzcG9uZGluZ2x5KS4KICAgKi8KICBmYWN0b3J5IFVpbnQ4TGlzdC52aWV3KEJ5dGVCdWZmZXIgYnVmZmVyLAogICAgICBbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgcmV0dXJuIGJ1ZmZlci5hc1VpbnQ4TGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtVaW50OExpc3RdIHZpZXcgb24gYSByYW5nZSBvZiBlbGVtZW50cyBvZiBbZGF0YV0uCiAgICoKICAgKiBDcmVhdGVzIGEgdmlldyBvbiB0aGUgcmFuZ2Ugb2YgYGRhdGEuYnVmZmVyYCB3aGljaCBjb3JyZXNwb25kcwogICAqIHRvIHRoZSBlbGVtZW50cyBvZiBbZGF0YV0gZnJvbSBbc3RhcnRdIHVudGlsIFtlbmRdLgogICAqIElmIFtkYXRhXSBpcyBhIHR5cGVkIGRhdGEgbGlzdCwgbGlrZSBbVWludDE2TGlzdF0sIHRoZW4gdGhlIHZpZXcgaXMgb24KICAgKiB0aGUgYnl0ZXMgb2YgdGhlIGVsZW1lbnRzIHdpdGggaW5kaWNlcyBmcm9tIFtzdGFydF0gdW50aWwgW2VuZF0uCiAgICogSWYgW2RhdGFdIGlzIGEgW0J5dGVEYXRhXSwgaXQncyB0cmVhdGVkIGxpa2UgYSBsaXN0IG9mIGJ5dGVzLgogICAqCiAgICogSWYgcHJvdmlkZWQsIFtzdGFydF0gYW5kIFtlbmRdIG11c3Qgc2F0aXNmeQogICAqCiAgICogMCAmbGU7IGBzdGFydGAgJmxlOyBgZW5kYCAmbGU7ICplbGVtZW50Q291bnQqCiAgICoKICAgKiB3aGVyZSAqZWxlbWVudENvdW50KiBpcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIFtkYXRhXSwgd2hpY2gKICAgKiBpcyB0aGUgc2FtZSBhcyB0aGUgW0xpc3QubGVuZ3RoXSBvZiBhIHR5cGVkIGRhdGEgbGlzdC4KICAgKgogICAqIElmIG9taXR0ZWQsIFtzdGFydF0gZGVmYXVsdHMgdG8gemVybyBhbmQgW2VuZF0gdG8gKmVsZW1lbnRDb3VudCouCiAgICovCiAgQFNpbmNlKCIyLjgiKQogIGZhY3RvcnkgVWludDhMaXN0LnN1Ymxpc3RWaWV3KFR5cGVkRGF0YSBkYXRhLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIGludCBlbGVtZW50U2l6ZSA9IGRhdGEuZWxlbWVudFNpemVJbkJ5dGVzOwogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2UoCiAgICAgICAgc3RhcnQsIGVuZCwgZGF0YS5sZW5ndGhJbkJ5dGVzIH4vIGVsZW1lbnRTaXplKTsKICAgIHJldHVybiBkYXRhLmJ1ZmZlci5hc1VpbnQ4TGlzdCgKICAgICAgICBkYXRhLm9mZnNldEluQnl0ZXMgKyBzdGFydCAqIGVsZW1lbnRTaXplLCAoZW5kIC0gc3RhcnQpICogZWxlbWVudFNpemUpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIGNvbmNhdGVuYXRpb24gb2YgdGhpcyBsaXN0IGFuZCBbb3RoZXJdLgogICAqCiAgICogSWYgW290aGVyXSBpcyBhbHNvIGEgdHlwZWQtZGF0YSBsaXN0LCB0aGVuIHRoZSByZXR1cm4gbGlzdCB3aWxsIGJlIGEKICAgKiB0eXBlZCBkYXRhIGxpc3QgY2FwYWJsZSBvZiBob2xkaW5nIGJvdGggdW5zaWduZWQgOC1iaXQgaW50ZWdlcnMgYW5kCiAgICogdGhlIGVsZW1lbnRzIG9mIFtvdGhlcl0sIG90aGVyd2lzZSBpdCdsbCBiZSBhIG5vcm1hbCBsaXN0IG9mIGludGVnZXJzLgogICAqLwogIExpc3Q8aW50PiBvcGVyYXRvciArKExpc3Q8aW50PiBvdGhlcik7CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBiZXR3ZWVuIFtzdGFydF0gYW5kIFtlbmRdLgogICAqCiAgICogVGhlIG5ldyBsaXN0IGlzIGEgYFVpbnQ4TGlzdGAgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcyBsaXN0IGF0CiAgICogcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbc3RhcnRdIGFuZCBsZXNzIHRoYW4gW2VuZF0gaW4gdGhlIHNhbWUKICAgKiBvcmRlciBhcyB0aGV5IG9jY3VyIGluIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiB2YXIgbnVtYmVycyA9IFVpbnQ4TGlzdC5mcm9tTGlzdChbMCwgMSwgMiwgMywgNF0pOwogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKSk7IC8vIFsxLCAyXQogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKS5ydW50aW1lVHlwZSk7IC8vIFVpbnQ4TGlzdAogICAqIGBgYAogICAqCiAgICogSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIFtsZW5ndGhdIG9mIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSkpOyAvLyBbMSwgMiwgMywgNF0KICAgKiBgYGAKICAgKgogICAqIFRoZSBgc3RhcnRgIGFuZCBgZW5kYCBwb3NpdGlvbnMgbXVzdCBzYXRpc2Z5IHRoZSByZWxhdGlvbnMKICAgKiAwIOKJpCBgc3RhcnRgIOKJpCBgZW5kYCDiiaQgYHRoaXMubGVuZ3RoYAogICAqIElmIGBlbmRgIGlzIGVxdWFsIHRvIGBzdGFydGAsIHRoZW4gdGhlIHJldHVybmVkIGxpc3QgaXMgZW1wdHkuCiAgICovCiAgVWludDhMaXN0IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pOwoKICBzdGF0aWMgY29uc3QgaW50IGJ5dGVzUGVyRWxlbWVudCA9IDE7Cn0KCi8qKgogKiBBIGZpeGVkLWxlbmd0aCBsaXN0IG9mIDgtYml0IHVuc2lnbmVkIGludGVnZXJzLgogKgogKiBGb3IgbG9uZyBsaXN0cywgdGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgY29uc2lkZXJhYmx5CiAqIG1vcmUgc3BhY2UtIGFuZCB0aW1lLWVmZmljaWVudCB0aGFuIHRoZSBkZWZhdWx0IFtMaXN0XSBpbXBsZW1lbnRhdGlvbi4KICoKICogSW50ZWdlcnMgc3RvcmVkIGluIHRoZSBsaXN0IGFyZSBjbGFtcGVkIHRvIGFuIHVuc2lnbmVkIGVpZ2h0IGJpdCB2YWx1ZS4KICogVGhhdCBpcywgYWxsIHZhbHVlcyBiZWxvdyB6ZXJvIGFyZSBzdG9yZWQgYXMgemVybwogKiBhbmQgYWxsIHZhbHVlcyBhYm92ZSAyNTUgYXJlIHN0b3JlZCBhcyAyNTUuCiAqLwphYnN0cmFjdCBjbGFzcyBVaW50OENsYW1wZWRMaXN0IGltcGxlbWVudHMgTGlzdDxpbnQ+LCBfVHlwZWRJbnRMaXN0IHsKICAvKioKICAgKiBDcmVhdGVzIGEgW1VpbnQ4Q2xhbXBlZExpc3RdIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIChpbiBlbGVtZW50cyksIGFsbCBvZgogICAqIHdob3NlIGVsZW1lbnRzIGFyZSBpbml0aWFsbHkgemVyby4KICAgKgogICAqIFRoZSBsaXN0IGlzIGJhY2tlZCBieSBhIFtCeXRlQnVmZmVyXSBjb250YWluaW5nIHByZWNpc2VseSBbbGVuZ3RoXSBieXRlcy4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IFVpbnQ4Q2xhbXBlZExpc3QoaW50IGxlbmd0aCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbVWludDhDbGFtcGVkTGlzdF0gb2YgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgW2VsZW1lbnRzXQogICAqIGxpc3QgYW5kIGNvcGllcyBvdmVyIHRoZSB2YWx1ZXMgY2xhbXBpbmcgd2hlbiBuZWVkZWQuCiAgICoKICAgKiBWYWx1ZXMgYXJlIGNsYW1wZWQgdG8gZml0IGluIHRoZSBsaXN0IHdoZW4gdGhleSBhcmUgY29waWVkLAogICAqIHRoZSBzYW1lIHdheSBzdG9yaW5nIHZhbHVlcyBjbGFtcHMgdGhlbS4KICAgKgogICAqIFRoZSBsaXN0IGlzIGJhY2tlZCBieSBhIFtCeXRlQnVmZmVyXSBjb250YWluaW5nIHByZWNpc2VseSBgZWxlbWVudHMubGVuZ3RoYAogICAqIGJ5dGVzLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgVWludDhDbGFtcGVkTGlzdC5mcm9tTGlzdChMaXN0PGludD4gZWxlbWVudHMpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1VpbnQ4Q2xhbXBlZExpc3RdIF92aWV3XyBvZiB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBpbiB0aGUKICAgKiBzcGVjaWZpZWQgYnl0ZSBbYnVmZmVyXS4KICAgKgogICAqIENoYW5nZXMgaW4gdGhlIFtVaW50OExpc3RdIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgYnl0ZSBidWZmZXIKICAgKiBhbmQgdmljZSB2ZXJzYS4KICAgKiBJZiB0aGUgW29mZnNldEluQnl0ZXNdIGluZGV4IG9mIHRoZSByZWdpb24gaXMgbm90IHNwZWNpZmllZCwKICAgKiBpdCBkZWZhdWx0cyB0byB6ZXJvICh0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgYnl0ZSBidWZmZXIpLgogICAqIElmIHRoZSBsZW5ndGggaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gYG51bGxgLAogICAqIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSB2aWV3IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBvciBbbGVuZ3RoXSBhcmUgbmVnYXRpdmUsIG9yCiAgICogaWYgW29mZnNldEluQnl0ZXNdICsgKFtsZW5ndGhdICogZWxlbWVudFNpemVJbkJ5dGVzKSBpcyBncmVhdGVyIHRoYW4KICAgKiB0aGUgbGVuZ3RoIG9mIFtidWZmZXJdLgogICAqCiAgICogTm90ZSB0aGF0IHdoZW4gY3JlYXRpbmcgYSB2aWV3IGZyb20gYSBbVHlwZWREYXRhXSBsaXN0IG9yIGJ5dGUgZGF0YSwKICAgKiB0aGF0IGxpc3Qgb3IgYnl0ZSBkYXRhIG1heSBpdHNlbGYgYmUgYSB2aWV3IG9uIGEgbGFyZ2VyIGJ1ZmZlcgogICAqIHdpdGggYSBbVHlwZWREYXRhLm9mZnNldEluQnl0ZXNdIGdyZWF0ZXIgdGhhbiB6ZXJvLgogICAqIE1lcmVseSBkb2luZyBgVWludDhDbGFtcGVkTGlzdC52aWV3KG90aGVyLmJ1ZmZlciwgMCwgY291bnQpYCBtYXkgbm90CiAgICogcG9pbnQgdG8gdGhlIGJ5dGVzIHlvdSBpbnRlbmRlZC4gSW5zdGVhZCB5b3UgbWF5IG5lZWQgdG8gZG86CiAgICogYGBgZGFydAogICAqIFVpbnQ4Q2xhbXBlZExpc3QudmlldyhvdGhlci5idWZmZXIsIG90aGVyLm9mZnNldEluQnl0ZXMsIGNvdW50KQogICAqIGBgYAogICAqIEFsdGVybmF0aXZlbHksIHVzZSBbVWludDhDbGFtcGVkTGlzdC5zdWJsaXN0Vmlld10KICAgKiB3aGljaCBpbmNsdWRlcyB0aGlzIGNvbXB1dGF0aW9uLgogICAqIGBgYGRhcnQKICAgKiBVaW50OENsYW1wZWRMaXN0LnN1Ymxpc3RWaWV3KG90aGVyLCAwLCBjb3VudCkKICAgKiBgYGAKICAgKiAoVGhlIHRoaXJkIGFyZ3VtZW50IGlzIGFuIGVuZCBpbmRleCByYXRoZXIgdGhhbiBhIGxlbmd0aCwgc28gaWYKICAgKiB5b3Ugc3RhcnQgZnJvbSBhIHBvc2l0aW9uIGdyZWF0ZXIgdGhhbiB6ZXJvLCB5b3UgbmVlZCBub3QKICAgKiByZWR1Y2UgdGhlIGNvdW50IGNvcnJlc3BvbmRpbmdseSkuCiAgICovCiAgZmFjdG9yeSBVaW50OENsYW1wZWRMaXN0LnZpZXcoQnl0ZUJ1ZmZlciBidWZmZXIsCiAgICAgIFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICByZXR1cm4gYnVmZmVyLmFzVWludDhDbGFtcGVkTGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtVaW50OENsYW1wZWRMaXN0XSB2aWV3IG9uIGEgcmFuZ2Ugb2YgZWxlbWVudHMgb2YgW2RhdGFdLgogICAqCiAgICogQ3JlYXRlcyBhIHZpZXcgb24gdGhlIHJhbmdlIG9mIGBkYXRhLmJ1ZmZlcmAgd2hpY2ggY29ycmVzcG9uZHMKICAgKiB0byB0aGUgZWxlbWVudHMgb2YgW2RhdGFdIGZyb20gW3N0YXJ0XSB1bnRpbCBbZW5kXS4KICAgKiBJZiBbZGF0YV0gaXMgYSB0eXBlZCBkYXRhIGxpc3QsIGxpa2UgW1VpbnQxNkxpc3RdLCB0aGVuIHRoZSB2aWV3IGlzIG9uCiAgICogdGhlIGJ5dGVzIG9mIHRoZSBlbGVtZW50cyB3aXRoIGluZGljZXMgZnJvbSBbc3RhcnRdIHVudGlsIFtlbmRdLgogICAqIElmIFtkYXRhXSBpcyBhIFtCeXRlRGF0YV0sIGl0J3MgdHJlYXRlZCBsaWtlIGEgbGlzdCBvZiBieXRlcy4KICAgKgogICAqIElmIHByb3ZpZGVkLCBbc3RhcnRdIGFuZCBbZW5kXSBtdXN0IHNhdGlzZnkKICAgKgogICAqIDAgJmxlOyBgc3RhcnRgICZsZTsgYGVuZGAgJmxlOyAqZWxlbWVudENvdW50KgogICAqCiAgICogd2hlcmUgKmVsZW1lbnRDb3VudCogaXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBbZGF0YV0sIHdoaWNoCiAgICogaXMgdGhlIHNhbWUgYXMgdGhlIFtMaXN0Lmxlbmd0aF0gb2YgYSB0eXBlZCBkYXRhIGxpc3QuCiAgICoKICAgKiBJZiBvbWl0dGVkLCBbc3RhcnRdIGRlZmF1bHRzIHRvIHplcm8gYW5kIFtlbmRdIHRvICplbGVtZW50Q291bnQqLgogICAqLwogIEBTaW5jZSgiMi44IikKICBmYWN0b3J5IFVpbnQ4Q2xhbXBlZExpc3Quc3VibGlzdFZpZXcoVHlwZWREYXRhIGRhdGEsCiAgICAgIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgaW50IGVsZW1lbnRTaXplID0gZGF0YS5lbGVtZW50U2l6ZUluQnl0ZXM7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZSgKICAgICAgICBzdGFydCwgZW5kLCBkYXRhLmxlbmd0aEluQnl0ZXMgfi8gZWxlbWVudFNpemUpOwogICAgcmV0dXJuIGRhdGEuYnVmZmVyLmFzVWludDhDbGFtcGVkTGlzdCgKICAgICAgICBkYXRhLm9mZnNldEluQnl0ZXMgKyBzdGFydCAqIGVsZW1lbnRTaXplLCAoZW5kIC0gc3RhcnQpICogZWxlbWVudFNpemUpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIGJldHdlZW4gW3N0YXJ0XSBhbmQgW2VuZF0uCiAgICoKICAgKiBUaGUgbmV3IGxpc3QgaXMgYSBgVWludDhDbGFtcGVkTGlzdGAgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcwogICAqIGxpc3QgYXQgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbc3RhcnRdIGFuZCBsZXNzIHRoYW4gW2VuZF0gaW4KICAgKiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IG9jY3VyIGluIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiB2YXIgbnVtYmVycyA9IFVpbnQ4Q2xhbXBlZExpc3QuZnJvbUxpc3QoWzAsIDEsIDIsIDMsIDRdKTsKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykpOyAvLyBbMSwgMl0KICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykucnVudGltZVR5cGUpOyAvLyBVaW50OENsYW1wZWRMaXN0CiAgICogYGBgCiAgICoKICAgKiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgW2xlbmd0aF0gb2YgdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxKSk7IC8vIFsxLCAyLCAzLCA0XQogICAqIGBgYAogICAqCiAgICogVGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9ucyBtdXN0IHNhdGlzZnkgdGhlIHJlbGF0aW9ucwogICAqIDAg4omkIGBzdGFydGAg4omkIGBlbmRgIOKJpCBgdGhpcy5sZW5ndGhgCiAgICogSWYgYGVuZGAgaXMgZXF1YWwgdG8gYHN0YXJ0YCwgdGhlbiB0aGUgcmV0dXJuZWQgbGlzdCBpcyBlbXB0eS4KICAgKi8KICBVaW50OENsYW1wZWRMaXN0IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pOwoKICBzdGF0aWMgY29uc3QgaW50IGJ5dGVzUGVyRWxlbWVudCA9IDE7Cn0KCi8qKgogKiBBIGZpeGVkLWxlbmd0aCBsaXN0IG9mIDE2LWJpdCBzaWduZWQgaW50ZWdlcnMgdGhhdCBpcyB2aWV3YWJsZSBhcyBhCiAqIFtUeXBlZERhdGFdLgogKgogKiBGb3IgbG9uZyBsaXN0cywgdGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgY29uc2lkZXJhYmx5CiAqIG1vcmUgc3BhY2UtIGFuZCB0aW1lLWVmZmljaWVudCB0aGFuIHRoZSBkZWZhdWx0IFtMaXN0XSBpbXBsZW1lbnRhdGlvbi4KICoKICogSW50ZWdlcnMgc3RvcmVkIGluIHRoZSBsaXN0IGFyZSB0cnVuY2F0ZWQgdG8gdGhlaXIgbG93IDE2IGJpdHMsCiAqIGludGVycHJldGVkIGFzIGEgc2lnbmVkIDE2LWJpdCB0d28ncyBjb21wbGVtZW50IGludGVnZXIgd2l0aCB2YWx1ZXMgaW4gdGhlCiAqIHJhbmdlIC0zMjc2OCB0byArMzI3NjcuCiAqLwphYnN0cmFjdCBjbGFzcyBJbnQxNkxpc3QgaW1wbGVtZW50cyBMaXN0PGludD4sIF9UeXBlZEludExpc3QgewogIC8qKgogICAqIENyZWF0ZXMgYW4gW0ludDE2TGlzdF0gb2YgdGhlIHNwZWNpZmllZCBsZW5ndGggKGluIGVsZW1lbnRzKSwgYWxsIG9mCiAgICogd2hvc2UgZWxlbWVudHMgYXJlIGluaXRpYWxseSB6ZXJvLgogICAqCiAgICogVGhlIGxpc3QgaXMgYmFja2VkIGJ5IGEgW0J5dGVCdWZmZXJdIGNvbnRhaW5pbmcgcHJlY2lzZWx5CiAgICogW2xlbmd0aF0gdGltZXMgMiBieXRlcy4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEludDE2TGlzdChpbnQgbGVuZ3RoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtJbnQxNkxpc3RdIHdpdGggdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBbZWxlbWVudHNdIGxpc3QKICAgKiBhbmQgY29waWVzIG92ZXIgdGhlIGVsZW1lbnRzLgogICAqCiAgICogVmFsdWVzIGFyZSB0cnVuY2F0ZWQgdG8gZml0IGluIHRoZSBsaXN0IHdoZW4gdGhleSBhcmUgY29waWVkLAogICAqIHRoZSBzYW1lIHdheSBzdG9yaW5nIHZhbHVlcyB0cnVuY2F0ZXMgdGhlbS4KICAgKgogICAqIFRoZSBsaXN0IGlzIGJhY2tlZCBieSBhIFtCeXRlQnVmZmVyXSBjb250YWluaW5nIHByZWNpc2VseQogICAqIGBlbGVtZW50cy5sZW5ndGhgIHRpbWVzIDIgYnl0ZXMuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBJbnQxNkxpc3QuZnJvbUxpc3QoTGlzdDxpbnQ+IGVsZW1lbnRzKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBbSW50MTZMaXN0XSBfdmlld18gb2YgdGhlIHNwZWNpZmllZCByZWdpb24gaW4gW2J1ZmZlcl0uCiAgICoKICAgKiBDaGFuZ2VzIGluIHRoZSBbSW50MTZMaXN0XSB3aWxsIGJlIHZpc2libGUgaW4gdGhlIGJ5dGUKICAgKiBidWZmZXIgYW5kIHZpY2UgdmVyc2EuCiAgICogSWYgdGhlIFtvZmZzZXRJbkJ5dGVzXSBpbmRleCBvZiB0aGUgcmVnaW9uIGlzIG5vdCBzcGVjaWZpZWQsCiAgICogaXQgZGVmYXVsdHMgdG8gemVybyAodGhlIGZpcnN0IGJ5dGUgaW4gdGhlIGJ5dGUgYnVmZmVyKS4KICAgKiBJZiB0aGUgbGVuZ3RoIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIGBudWxsYCwKICAgKiB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgdmlldyBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbb2Zmc2V0SW5CeXRlc10gb3IgW2xlbmd0aF0gYXJlIG5lZ2F0aXZlLCBvcgogICAqIGlmIFtvZmZzZXRJbkJ5dGVzXSArIChbbGVuZ3RoXSAqIGVsZW1lbnRTaXplSW5CeXRlcykgaXMgZ3JlYXRlciB0aGFuCiAgICogdGhlIGxlbmd0aCBvZiBbYnVmZmVyXS4KICAgKgogICAqIFRocm93cyBbQXJndW1lbnRFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIGlzIG5vdCBhIG11bHRpcGxlIG9mCiAgICogW2J5dGVzUGVyRWxlbWVudF0uCiAgICoKICAgKiBOb3RlIHRoYXQgd2hlbiBjcmVhdGluZyBhIHZpZXcgZnJvbSBhIFtUeXBlZERhdGFdIGxpc3Qgb3IgYnl0ZSBkYXRhLAogICAqIHRoYXQgbGlzdCBvciBieXRlIGRhdGEgbWF5IGl0c2VsZiBiZSBhIHZpZXcgb24gYSBsYXJnZXIgYnVmZmVyCiAgICogd2l0aCBhIFtUeXBlZERhdGEub2Zmc2V0SW5CeXRlc10gZ3JlYXRlciB0aGFuIHplcm8uCiAgICogTWVyZWx5IGRvaW5nIGBJbnQxNkxpc3QudmlldyhvdGhlci5idWZmZXIsIDAsIGNvdW50KWAgbWF5IG5vdAogICAqIHBvaW50IHRvIHRoZSBieXRlcyB5b3UgaW50ZW5kZWQuIEluc3RlYWQgeW91IG1heSBuZWVkIHRvIGRvOgogICAqIGBgYGRhcnQKICAgKiBJbnQxNkxpc3QudmlldyhvdGhlci5idWZmZXIsIG90aGVyLm9mZnNldEluQnl0ZXMsIGNvdW50KQogICAqIGBgYAogICAqIEFsdGVybmF0aXZlbHksIHVzZSBbSW50MTZMaXN0LnN1Ymxpc3RWaWV3XQogICAqIHdoaWNoIGluY2x1ZGVzIHRoaXMgY29tcHV0YXRpb24uCiAgICogYGBgZGFydAogICAqIEludDE2TGlzdC5zdWJsaXN0VmlldyhvdGhlciwgMCwgY291bnQpCiAgICogYGBgCiAgICogKFRoZSB0aGlyZCBhcmd1bWVudCBpcyBhbiBlbmQgaW5kZXggcmF0aGVyIHRoYW4gYSBsZW5ndGgsIHNvIGlmCiAgICogeW91IHN0YXJ0IGZyb20gYSBwb3NpdGlvbiBncmVhdGVyIHRoYW4gemVybywgeW91IG5lZWQgbm90CiAgICogcmVkdWNlIHRoZSBjb3VudCBjb3JyZXNwb25kaW5nbHkpLgogICAqLwogIGZhY3RvcnkgSW50MTZMaXN0LnZpZXcoQnl0ZUJ1ZmZlciBidWZmZXIsCiAgICAgIFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICByZXR1cm4gYnVmZmVyLmFzSW50MTZMaXN0KG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGFuIFtJbnQxNkxpc3RdIHZpZXcgb24gYSByYW5nZSBvZiBlbGVtZW50cyBvZiBbZGF0YV0uCiAgICoKICAgKiBDcmVhdGVzIGEgdmlldyBvbiB0aGUgcmFuZ2Ugb2YgYGRhdGEuYnVmZmVyYCB3aGljaCBjb3JyZXNwb25kcwogICAqIHRvIHRoZSBlbGVtZW50cyBvZiBbZGF0YV0gZnJvbSBbc3RhcnRdIHVudGlsIFtlbmRdLgogICAqIElmIFtkYXRhXSBpcyBhIHR5cGVkIGRhdGEgbGlzdCwgbGlrZSBbVWludDE2TGlzdF0sIHRoZW4gdGhlIHZpZXcgaXMgb24KICAgKiB0aGUgYnl0ZXMgb2YgdGhlIGVsZW1lbnRzIHdpdGggaW5kaWNlcyBmcm9tIFtzdGFydF0gdW50aWwgW2VuZF0uCiAgICogSWYgW2RhdGFdIGlzIGEgW0J5dGVEYXRhXSwgaXQncyB0cmVhdGVkIGxpa2UgYSBsaXN0IG9mIGJ5dGVzLgogICAqCiAgICogSWYgcHJvdmlkZWQsIFtzdGFydF0gYW5kIFtlbmRdIG11c3Qgc2F0aXNmeQogICAqCiAgICogMCAmbGU7IGBzdGFydGAgJmxlOyBgZW5kYCAmbGU7ICplbGVtZW50Q291bnQqCiAgICoKICAgKiB3aGVyZSAqZWxlbWVudENvdW50KiBpcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIFtkYXRhXSwgd2hpY2gKICAgKiBpcyB0aGUgc2FtZSBhcyB0aGUgW0xpc3QubGVuZ3RoXSBvZiBhIHR5cGVkIGRhdGEgbGlzdC4KICAgKgogICAqIElmIG9taXR0ZWQsIFtzdGFydF0gZGVmYXVsdHMgdG8gemVybyBhbmQgW2VuZF0gdG8gKmVsZW1lbnRDb3VudCouCiAgICoKICAgKiBUaGUgc3RhcnQgYW5kIGVuZCBpbmRpY2VzIG9mIHRoZSByYW5nZSBvZiBieXRlcyBiZWluZyB2aWV3ZWQgbXVzdCBiZQogICAqIG11bHRpcGxlcyBvZiB0d28uCiAgICovCiAgQFNpbmNlKCIyLjgiKQogIGZhY3RvcnkgSW50MTZMaXN0LnN1Ymxpc3RWaWV3KFR5cGVkRGF0YSBkYXRhLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIGludCBlbGVtZW50U2l6ZSA9IGRhdGEuZWxlbWVudFNpemVJbkJ5dGVzOwogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2UoCiAgICAgICAgc3RhcnQsIGVuZCwgZGF0YS5sZW5ndGhJbkJ5dGVzIH4vIGVsZW1lbnRTaXplKTsKICAgIGludCBieXRlTGVuZ3RoID0gKGVuZCAtIHN0YXJ0KSAqIGVsZW1lbnRTaXplOwogICAgaWYgKGJ5dGVMZW5ndGggJSBieXRlc1BlckVsZW1lbnQgIT0gMCkgewogICAgICB0aHJvdyBBcmd1bWVudEVycm9yKCJUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHZpZXcgbXVzdCBiZSBhIG11bHRpcGxlIG9mICIgKwogICAgICAgICAgIiRieXRlc1BlckVsZW1lbnQiKTsKICAgIH0KICAgIHJldHVybiBkYXRhLmJ1ZmZlci5hc0ludDE2TGlzdChkYXRhLm9mZnNldEluQnl0ZXMgKyBzdGFydCAqIGVsZW1lbnRTaXplLAogICAgICAgIGJ5dGVMZW5ndGggfi8gYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBiZXR3ZWVuIFtzdGFydF0gYW5kIFtlbmRdLgogICAqCiAgICogVGhlIG5ldyBsaXN0IGlzIGFuIGBJbnQxNkxpc3RgIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIHRoaXMKICAgKiBsaXN0IGF0IHBvc2l0aW9ucyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gW3N0YXJ0XSBhbmQgbGVzcyB0aGFuIFtlbmRdIGluCiAgICogdGhlIHNhbWUgb3JkZXIgYXMgdGhleSBvY2N1ciBpbiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogdmFyIG51bWJlcnMgPSBJbnQxNkxpc3QuZnJvbUxpc3QoWzAsIDEsIDIsIDMsIDRdKTsKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykpOyAvLyBbMSwgMl0KICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykucnVudGltZVR5cGUpOyAvLyBJbnQxNkxpc3QKICAgKiBgYGAKICAgKgogICAqIElmIFtlbmRdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRoZSBbbGVuZ3RoXSBvZiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEpKTsgLy8gWzEsIDIsIDMsIDRdCiAgICogYGBgCiAgICoKICAgKiBUaGUgYHN0YXJ0YCBhbmQgYGVuZGAgcG9zaXRpb25zIG11c3Qgc2F0aXNmeSB0aGUgcmVsYXRpb25zCiAgICogMCDiiaQgYHN0YXJ0YCDiiaQgYGVuZGAg4omkIGB0aGlzLmxlbmd0aGAKICAgKiBJZiBgZW5kYCBpcyBlcXVhbCB0byBgc3RhcnRgLCB0aGVuIHRoZSByZXR1cm5lZCBsaXN0IGlzIGVtcHR5LgogICAqLwogIEludDE2TGlzdCBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKTsKCiAgc3RhdGljIGNvbnN0IGludCBieXRlc1BlckVsZW1lbnQgPSAyOwp9CgovKioKICogQSBmaXhlZC1sZW5ndGggbGlzdCBvZiAxNi1iaXQgdW5zaWduZWQgaW50ZWdlcnMgdGhhdCBpcyB2aWV3YWJsZSBhcyBhCiAqIFtUeXBlZERhdGFdLgogKgogKiBGb3IgbG9uZyBsaXN0cywgdGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgY29uc2lkZXJhYmx5CiAqIG1vcmUgc3BhY2UtIGFuZCB0aW1lLWVmZmljaWVudCB0aGFuIHRoZSBkZWZhdWx0IFtMaXN0XSBpbXBsZW1lbnRhdGlvbi4KICoKICogSW50ZWdlcnMgc3RvcmVkIGluIHRoZSBsaXN0IGFyZSB0cnVuY2F0ZWQgdG8gdGhlaXIgbG93IDE2IGJpdHMsCiAqIGludGVycHJldGVkIGFzIGFuIHVuc2lnbmVkIDE2LWJpdCBpbnRlZ2VyIHdpdGggdmFsdWVzIGluIHRoZQogKiByYW5nZSAwIHRvIDY1NTM1LgogKi8KYWJzdHJhY3QgY2xhc3MgVWludDE2TGlzdCBpbXBsZW1lbnRzIExpc3Q8aW50PiwgX1R5cGVkSW50TGlzdCB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIFtVaW50MTZMaXN0XSBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aCAoaW4gZWxlbWVudHMpLCBhbGwKICAgKiBvZiB3aG9zZSBlbGVtZW50cyBhcmUgaW5pdGlhbGx5IHplcm8uCiAgICoKICAgKiBUaGUgbGlzdCBpcyBiYWNrZWQgYnkgYSBbQnl0ZUJ1ZmZlcl0gY29udGFpbmluZyBwcmVjaXNlbHkKICAgKiBbbGVuZ3RoXSB0aW1lcyAyIGJ5dGVzLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgVWludDE2TGlzdChpbnQgbGVuZ3RoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtVaW50MTZMaXN0XSB3aXRoIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgW2VsZW1lbnRzXSBsaXN0CiAgICogYW5kIGNvcGllcyBvdmVyIHRoZSBlbGVtZW50cy4KICAgKgogICAqIFZhbHVlcyBhcmUgdHJ1bmNhdGVkIHRvIGZpdCBpbiB0aGUgbGlzdCB3aGVuIHRoZXkgYXJlIGNvcGllZCwKICAgKiB0aGUgc2FtZSB3YXkgc3RvcmluZyB2YWx1ZXMgdHJ1bmNhdGVzIHRoZW0uCiAgICoKICAgKiBUaGUgbGlzdCBpcyBiYWNrZWQgYnkgYSBbQnl0ZUJ1ZmZlcl0gY29udGFpbmluZyBwcmVjaXNlbHkKICAgKiBgZWxlbWVudHMubGVuZ3RoYCB0aW1lcyAyIGJ5dGVzLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgVWludDE2TGlzdC5mcm9tTGlzdChMaXN0PGludD4gZWxlbWVudHMpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1VpbnQxNkxpc3RdIF92aWV3XyBvZiB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBpbgogICAqIHRoZSBzcGVjaWZpZWQgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBDaGFuZ2VzIGluIHRoZSBbVWludDE2TGlzdF0gd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBieXRlIGJ1ZmZlcgogICAqIGFuZCB2aWNlIHZlcnNhLgogICAqIElmIHRoZSBbb2Zmc2V0SW5CeXRlc10gaW5kZXggb2YgdGhlIHJlZ2lvbiBpcyBub3Qgc3BlY2lmaWVkLAogICAqIGl0IGRlZmF1bHRzIHRvIHplcm8gKHRoZSBmaXJzdCBieXRlIGluIHRoZSBieXRlIGJ1ZmZlcikuCiAgICogSWYgdGhlIGxlbmd0aCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBgbnVsbGAsCiAgICogd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIHZpZXcgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIG9yIFtsZW5ndGhdIGFyZSBuZWdhdGl2ZSwgb3IKICAgKiBpZiBbb2Zmc2V0SW5CeXRlc10gKyAoW2xlbmd0aF0gKiBlbGVtZW50U2l6ZUluQnl0ZXMpIGlzIGdyZWF0ZXIgdGhhbgogICAqIHRoZSBsZW5ndGggb2YgW2J1ZmZlcl0uCiAgICoKICAgKiBUaHJvd3MgW0FyZ3VtZW50RXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBpcyBub3QgYSBtdWx0aXBsZSBvZgogICAqIFtieXRlc1BlckVsZW1lbnRdLgogICAqCiAgICogTm90ZSB0aGF0IHdoZW4gY3JlYXRpbmcgYSB2aWV3IGZyb20gYSBbVHlwZWREYXRhXSBsaXN0IG9yIGJ5dGUgZGF0YSwKICAgKiB0aGF0IGxpc3Qgb3IgYnl0ZSBkYXRhIG1heSBpdHNlbGYgYmUgYSB2aWV3IG9uIGEgbGFyZ2VyIGJ1ZmZlcgogICAqIHdpdGggYSBbVHlwZWREYXRhLm9mZnNldEluQnl0ZXNdIGdyZWF0ZXIgdGhhbiB6ZXJvLgogICAqIE1lcmVseSBkb2luZyBgVWludDE2TGlzdC52aWV3KG90aGVyLmJ1ZmZlciwgMCwgY291bnQpYCBtYXkgbm90CiAgICogcG9pbnQgdG8gdGhlIGJ5dGVzIHlvdSBpbnRlbmRlZC4gSW5zdGVhZCB5b3UgbWF5IG5lZWQgdG8gZG86CiAgICogYGBgZGFydAogICAqIFVpbnQxNkxpc3QudmlldyhvdGhlci5idWZmZXIsIG90aGVyLm9mZnNldEluQnl0ZXMsIGNvdW50KQogICAqIGBgYAogICAqIEFsdGVybmF0aXZlbHksIHVzZSBbVWludDE2TGlzdC5zdWJsaXN0Vmlld10KICAgKiB3aGljaCBpbmNsdWRlcyB0aGlzIGNvbXB1dGF0aW9uLgogICAqIGBgYGRhcnQKICAgKiBVaW50MTZMaXN0LnN1Ymxpc3RWaWV3KG90aGVyLCAwLCBjb3VudCkKICAgKiBgYGAKICAgKiAoVGhlIHRoaXJkIGFyZ3VtZW50IGlzIGFuIGVuZCBpbmRleCByYXRoZXIgdGhhbiBhIGxlbmd0aCwgc28gaWYKICAgKiB5b3Ugc3RhcnQgZnJvbSBhIHBvc2l0aW9uIGdyZWF0ZXIgdGhhbiB6ZXJvLCB5b3UgbmVlZCBub3QKICAgKiByZWR1Y2UgdGhlIGNvdW50IGNvcnJlc3BvbmRpbmdseSkuCiAgICovCiAgZmFjdG9yeSBVaW50MTZMaXN0LnZpZXcoQnl0ZUJ1ZmZlciBidWZmZXIsCiAgICAgIFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICByZXR1cm4gYnVmZmVyLmFzVWludDE2TGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtVaW50MTZMaXN0XSB2aWV3IG9uIGEgcmFuZ2Ugb2YgZWxlbWVudHMgb2YgW2RhdGFdLgogICAqCiAgICogQ3JlYXRlcyBhIHZpZXcgb24gdGhlIHJhbmdlIG9mIGBkYXRhLmJ1ZmZlcmAgd2hpY2ggY29ycmVzcG9uZHMKICAgKiB0byB0aGUgZWxlbWVudHMgb2YgW2RhdGFdIGZyb20gW3N0YXJ0XSB1bnRpbCBbZW5kXS4KICAgKiBJZiBbZGF0YV0gaXMgYSB0eXBlZCBkYXRhIGxpc3QsIGxpa2UgW1VpbnQxNkxpc3RdLCB0aGVuIHRoZSB2aWV3IGlzIG9uCiAgICogdGhlIGJ5dGVzIG9mIHRoZSBlbGVtZW50cyB3aXRoIGluZGljZXMgZnJvbSBbc3RhcnRdIHVudGlsIFtlbmRdLgogICAqIElmIFtkYXRhXSBpcyBhIFtCeXRlRGF0YV0sIGl0J3MgdHJlYXRlZCBsaWtlIGEgbGlzdCBvZiBieXRlcy4KICAgKgogICAqIElmIHByb3ZpZGVkLCBbc3RhcnRdIGFuZCBbZW5kXSBtdXN0IHNhdGlzZnkKICAgKgogICAqIDAgJmxlOyBgc3RhcnRgICZsZTsgYGVuZGAgJmxlOyAqZWxlbWVudENvdW50KgogICAqCiAgICogd2hlcmUgKmVsZW1lbnRDb3VudCogaXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBbZGF0YV0sIHdoaWNoCiAgICogaXMgdGhlIHNhbWUgYXMgdGhlIFtMaXN0Lmxlbmd0aF0gb2YgYSB0eXBlZCBkYXRhIGxpc3QuCiAgICoKICAgKiBJZiBvbWl0dGVkLCBbc3RhcnRdIGRlZmF1bHRzIHRvIHplcm8gYW5kIFtlbmRdIHRvICplbGVtZW50Q291bnQqLgogICAqCiAgICogVGhlIHN0YXJ0IGFuZCBlbmQgaW5kaWNlcyBvZiB0aGUgcmFuZ2Ugb2YgYnl0ZXMgYmVpbmcgdmlld2VkIG11c3QgYmUKICAgKiBtdWx0aXBsZXMgb2YgdHdvLgogICAqLwogIEBTaW5jZSgiMi44IikKICBmYWN0b3J5IFVpbnQxNkxpc3Quc3VibGlzdFZpZXcoVHlwZWREYXRhIGRhdGEsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgaW50IGVsZW1lbnRTaXplID0gZGF0YS5lbGVtZW50U2l6ZUluQnl0ZXM7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZSgKICAgICAgICBzdGFydCwgZW5kLCBkYXRhLmxlbmd0aEluQnl0ZXMgfi8gZWxlbWVudFNpemUpOwogICAgaW50IGJ5dGVMZW5ndGggPSAoZW5kIC0gc3RhcnQpICogZWxlbWVudFNpemU7CiAgICBpZiAoYnl0ZUxlbmd0aCAlIGJ5dGVzUGVyRWxlbWVudCAhPSAwKSB7CiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoIlRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdmlldyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgIiArCiAgICAgICAgICAiJGJ5dGVzUGVyRWxlbWVudCIpOwogICAgfQogICAgcmV0dXJuIGRhdGEuYnVmZmVyLmFzVWludDE2TGlzdChkYXRhLm9mZnNldEluQnl0ZXMgKyBzdGFydCAqIGVsZW1lbnRTaXplLAogICAgICAgIGJ5dGVMZW5ndGggfi8gYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBiZXR3ZWVuIFtzdGFydF0gYW5kIFtlbmRdLgogICAqCiAgICogVGhlIG5ldyBsaXN0IGlzIGEgYFVpbnQxNkxpc3RgIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIHRoaXMKICAgKiBsaXN0IGF0IHBvc2l0aW9ucyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gW3N0YXJ0XSBhbmQgbGVzcyB0aGFuIFtlbmRdIGluCiAgICogdGhlIHNhbWUgb3JkZXIgYXMgdGhleSBvY2N1ciBpbiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogdmFyIG51bWJlcnMgPSBVaW50MTZMaXN0LmZyb21MaXN0KFswLCAxLCAyLCAzLCA0XSk7CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpKTsgLy8gWzEsIDJdCiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpLnJ1bnRpbWVUeXBlKTsgLy8gVWludDE2TGlzdAogICAqIGBgYAogICAqCiAgICogSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIFtsZW5ndGhdIG9mIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSkpOyAvLyBbMSwgMiwgMywgNF0KICAgKiBgYGAKICAgKgogICAqIFRoZSBgc3RhcnRgIGFuZCBgZW5kYCBwb3NpdGlvbnMgbXVzdCBzYXRpc2Z5IHRoZSByZWxhdGlvbnMKICAgKiAwIOKJpCBgc3RhcnRgIOKJpCBgZW5kYCDiiaQgYHRoaXMubGVuZ3RoYAogICAqIElmIGBlbmRgIGlzIGVxdWFsIHRvIGBzdGFydGAsIHRoZW4gdGhlIHJldHVybmVkIGxpc3QgaXMgZW1wdHkuCiAgICovCiAgVWludDE2TGlzdCBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKTsKCiAgc3RhdGljIGNvbnN0IGludCBieXRlc1BlckVsZW1lbnQgPSAyOwp9CgovKioKICogQSBmaXhlZC1sZW5ndGggbGlzdCBvZiAzMi1iaXQgc2lnbmVkIGludGVnZXJzIHRoYXQgaXMgdmlld2FibGUgYXMgYQogKiBbVHlwZWREYXRhXS4KICoKICogRm9yIGxvbmcgbGlzdHMsIHRoaXMgaW1wbGVtZW50YXRpb24gY2FuIGJlIGNvbnNpZGVyYWJseQogKiBtb3JlIHNwYWNlLSBhbmQgdGltZS1lZmZpY2llbnQgdGhhbiB0aGUgZGVmYXVsdCBbTGlzdF0gaW1wbGVtZW50YXRpb24uCiAqCiAqIEludGVnZXJzIHN0b3JlZCBpbiB0aGUgbGlzdCBhcmUgdHJ1bmNhdGVkIHRvIHRoZWlyIGxvdyAzMiBiaXRzLAogKiBpbnRlcnByZXRlZCBhcyBhIHNpZ25lZCAzMi1iaXQgdHdvJ3MgY29tcGxlbWVudCBpbnRlZ2VyIHdpdGggdmFsdWVzIGluIHRoZQogKiByYW5nZSAtMjE0NzQ4MzY0OCB0byAyMTQ3NDgzNjQ3LgogKi8KYWJzdHJhY3QgY2xhc3MgSW50MzJMaXN0IGltcGxlbWVudHMgTGlzdDxpbnQ+LCBfVHlwZWRJbnRMaXN0IHsKICAvKioKICAgKiBDcmVhdGVzIGFuIFtJbnQzMkxpc3RdIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIChpbiBlbGVtZW50cyksIGFsbCBvZgogICAqIHdob3NlIGVsZW1lbnRzIGFyZSBpbml0aWFsbHkgemVyby4KICAgKgogICAqIFRoZSBsaXN0IGlzIGJhY2tlZCBieSBhIFtCeXRlQnVmZmVyXSBjb250YWluaW5nIHByZWNpc2VseQogICAqIFtsZW5ndGhdIHRpbWVzIDQgYnl0ZXMuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBJbnQzMkxpc3QoaW50IGxlbmd0aCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbSW50MzJMaXN0XSB3aXRoIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgW2VsZW1lbnRzXSBsaXN0CiAgICogYW5kIGNvcGllcyBvdmVyIHRoZSBlbGVtZW50cy4KICAgKgogICAqIFZhbHVlcyBhcmUgdHJ1bmNhdGVkIHRvIGZpdCBpbiB0aGUgbGlzdCB3aGVuIHRoZXkgYXJlIGNvcGllZCwKICAgKiB0aGUgc2FtZSB3YXkgc3RvcmluZyB2YWx1ZXMgdHJ1bmNhdGVzIHRoZW0uCiAgICoKICAgKiBUaGUgbGlzdCBpcyBiYWNrZWQgYnkgYSBbQnl0ZUJ1ZmZlcl0gY29udGFpbmluZyBwcmVjaXNlbHkKICAgKiBgZWxlbWVudHMubGVuZ3RoYCB0aW1lcyA0IGJ5dGVzLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgSW50MzJMaXN0LmZyb21MaXN0KExpc3Q8aW50PiBlbGVtZW50cyk7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gW0ludDMyTGlzdF0gX3ZpZXdfIG9mIHRoZSBzcGVjaWZpZWQgcmVnaW9uIGluIFtidWZmZXJdLgogICAqCiAgICogQ2hhbmdlcyBpbiB0aGUgW0ludDMyTGlzdF0gd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBieXRlCiAgICogYnVmZmVyIGFuZCB2aWNlIHZlcnNhLgogICAqIElmIHRoZSBbb2Zmc2V0SW5CeXRlc10gaW5kZXggb2YgdGhlIHJlZ2lvbiBpcyBub3Qgc3BlY2lmaWVkLAogICAqIGl0IGRlZmF1bHRzIHRvIHplcm8gKHRoZSBmaXJzdCBieXRlIGluIHRoZSBieXRlIGJ1ZmZlcikuCiAgICogSWYgdGhlIGxlbmd0aCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBgbnVsbGAsCiAgICogd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIHZpZXcgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIG9yIFtsZW5ndGhdIGFyZSBuZWdhdGl2ZSwgb3IKICAgKiBpZiBbb2Zmc2V0SW5CeXRlc10gKyAoW2xlbmd0aF0gKiBlbGVtZW50U2l6ZUluQnl0ZXMpIGlzIGdyZWF0ZXIgdGhhbgogICAqIHRoZSBsZW5ndGggb2YgW2J1ZmZlcl0uCiAgICoKICAgKiBUaHJvd3MgW0FyZ3VtZW50RXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBpcyBub3QgYSBtdWx0aXBsZSBvZgogICAqIFtieXRlc1BlckVsZW1lbnRdLgogICAqCiAgICogTm90ZSB0aGF0IHdoZW4gY3JlYXRpbmcgYSB2aWV3IGZyb20gYSBbVHlwZWREYXRhXSBsaXN0IG9yIGJ5dGUgZGF0YSwKICAgKiB0aGF0IGxpc3Qgb3IgYnl0ZSBkYXRhIG1heSBpdHNlbGYgYmUgYSB2aWV3IG9uIGEgbGFyZ2VyIGJ1ZmZlcgogICAqIHdpdGggYSBbVHlwZWREYXRhLm9mZnNldEluQnl0ZXNdIGdyZWF0ZXIgdGhhbiB6ZXJvLgogICAqIE1lcmVseSBkb2luZyBgSW50MzJMaXN0LnZpZXcob3RoZXIuYnVmZmVyLCAwLCBjb3VudClgIG1heSBub3QKICAgKiBwb2ludCB0byB0aGUgYnl0ZXMgeW91IGludGVuZGVkLiBJbnN0ZWFkIHlvdSBtYXkgbmVlZCB0byBkbzoKICAgKiBgYGBkYXJ0CiAgICogSW50MzJMaXN0LnZpZXcob3RoZXIuYnVmZmVyLCBvdGhlci5vZmZzZXRJbkJ5dGVzLCBjb3VudCkKICAgKiBgYGAKICAgKiBBbHRlcm5hdGl2ZWx5LCB1c2UgW0ludDMyTGlzdC5zdWJsaXN0Vmlld10KICAgKiB3aGljaCBpbmNsdWRlcyB0aGlzIGNvbXB1dGF0aW9uLgogICAqIGBgYGRhcnQKICAgKiBJbnQzMkxpc3Quc3VibGlzdFZpZXcob3RoZXIsIDAsIGNvdW50KQogICAqIGBgYAogICAqIChUaGUgdGhpcmQgYXJndW1lbnQgaXMgYW4gZW5kIGluZGV4IHJhdGhlciB0aGFuIGEgbGVuZ3RoLCBzbyBpZgogICAqIHlvdSBzdGFydCBmcm9tIGEgcG9zaXRpb24gZ3JlYXRlciB0aGFuIHplcm8sIHlvdSBuZWVkIG5vdAogICAqIHJlZHVjZSB0aGUgY291bnQgY29ycmVzcG9uZGluZ2x5KS4KICAgKi8KICBmYWN0b3J5IEludDMyTGlzdC52aWV3KEJ5dGVCdWZmZXIgYnVmZmVyLAogICAgICBbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgcmV0dXJuIGJ1ZmZlci5hc0ludDMyTGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBbSW50MzJMaXN0XSB2aWV3IG9uIGEgcmFuZ2Ugb2YgZWxlbWVudHMgb2YgW2RhdGFdLgogICAqCiAgICogQ3JlYXRlcyBhIHZpZXcgb24gdGhlIHJhbmdlIG9mIGBkYXRhLmJ1ZmZlcmAgd2hpY2ggY29ycmVzcG9uZHMKICAgKiB0byB0aGUgZWxlbWVudHMgb2YgW2RhdGFdIGZyb20gW3N0YXJ0XSB1bnRpbCBbZW5kXS4KICAgKiBJZiBbZGF0YV0gaXMgYSB0eXBlZCBkYXRhIGxpc3QsIGxpa2UgW1VpbnQxNkxpc3RdLCB0aGVuIHRoZSB2aWV3IGlzIG9uCiAgICogdGhlIGJ5dGVzIG9mIHRoZSBlbGVtZW50cyB3aXRoIGluZGljZXMgZnJvbSBbc3RhcnRdIHVudGlsIFtlbmRdLgogICAqIElmIFtkYXRhXSBpcyBhIFtCeXRlRGF0YV0sIGl0J3MgdHJlYXRlZCBsaWtlIGEgbGlzdCBvZiBieXRlcy4KICAgKgogICAqIElmIHByb3ZpZGVkLCBbc3RhcnRdIGFuZCBbZW5kXSBtdXN0IHNhdGlzZnkKICAgKgogICAqIDAgJmxlOyBgc3RhcnRgICZsZTsgYGVuZGAgJmxlOyAqZWxlbWVudENvdW50KgogICAqCiAgICogd2hlcmUgKmVsZW1lbnRDb3VudCogaXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBbZGF0YV0sIHdoaWNoCiAgICogaXMgdGhlIHNhbWUgYXMgdGhlIFtMaXN0Lmxlbmd0aF0gb2YgYSB0eXBlZCBkYXRhIGxpc3QuCiAgICoKICAgKiBJZiBvbWl0dGVkLCBbc3RhcnRdIGRlZmF1bHRzIHRvIHplcm8gYW5kIFtlbmRdIHRvICplbGVtZW50Q291bnQqLgogICAqCiAgICogVGhlIHN0YXJ0IGFuZCBlbmQgaW5kaWNlcyBvZiB0aGUgcmFuZ2Ugb2YgYnl0ZXMgYmVpbmcgdmlld2VkIG11c3QgYmUKICAgKiBtdWx0aXBsZXMgb2YgZm91ci4KICAgKi8KICBAU2luY2UoIjIuOCIpCiAgZmFjdG9yeSBJbnQzMkxpc3Quc3VibGlzdFZpZXcoVHlwZWREYXRhIGRhdGEsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgaW50IGVsZW1lbnRTaXplID0gZGF0YS5lbGVtZW50U2l6ZUluQnl0ZXM7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZSgKICAgICAgICBzdGFydCwgZW5kLCBkYXRhLmxlbmd0aEluQnl0ZXMgfi8gZWxlbWVudFNpemUpOwogICAgaW50IGJ5dGVMZW5ndGggPSAoZW5kIC0gc3RhcnQpICogZWxlbWVudFNpemU7CiAgICBpZiAoYnl0ZUxlbmd0aCAlIGJ5dGVzUGVyRWxlbWVudCAhPSAwKSB7CiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoIlRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdmlldyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgIiArCiAgICAgICAgICAiJGJ5dGVzUGVyRWxlbWVudCIpOwogICAgfQogICAgcmV0dXJuIGRhdGEuYnVmZmVyLmFzSW50MzJMaXN0KGRhdGEub2Zmc2V0SW5CeXRlcyArIHN0YXJ0ICogZWxlbWVudFNpemUsCiAgICAgICAgYnl0ZUxlbmd0aCB+LyBieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIGJldHdlZW4gW3N0YXJ0XSBhbmQgW2VuZF0uCiAgICoKICAgKiBUaGUgbmV3IGxpc3QgaXMgYW4gYEludDMyTGlzdGAgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcwogICAqIGxpc3QgYXQgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbc3RhcnRdIGFuZCBsZXNzIHRoYW4gW2VuZF0gaW4KICAgKiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IG9jY3VyIGluIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiB2YXIgbnVtYmVycyA9IEludDMyTGlzdC5mcm9tTGlzdChbMCwgMSwgMiwgMywgNF0pOwogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKSk7IC8vIFsxLCAyXQogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKS5ydW50aW1lVHlwZSk7IC8vIEludDMyTGlzdAogICAqIGBgYAogICAqCiAgICogSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIFtsZW5ndGhdIG9mIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSkpOyAvLyBbMSwgMiwgMywgNF0KICAgKiBgYGAKICAgKgogICAqIFRoZSBgc3RhcnRgIGFuZCBgZW5kYCBwb3NpdGlvbnMgbXVzdCBzYXRpc2Z5IHRoZSByZWxhdGlvbnMKICAgKiAwIOKJpCBgc3RhcnRgIOKJpCBgZW5kYCDiiaQgYHRoaXMubGVuZ3RoYAogICAqIElmIGBlbmRgIGlzIGVxdWFsIHRvIGBzdGFydGAsIHRoZW4gdGhlIHJldHVybmVkIGxpc3QgaXMgZW1wdHkuCiAgICovCiAgSW50MzJMaXN0IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pOwoKICBzdGF0aWMgY29uc3QgaW50IGJ5dGVzUGVyRWxlbWVudCA9IDQ7Cn0KCi8qKgogKiBBIGZpeGVkLWxlbmd0aCBsaXN0IG9mIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VycyB0aGF0IGlzIHZpZXdhYmxlIGFzIGEKICogW1R5cGVkRGF0YV0uCiAqCiAqIEZvciBsb25nIGxpc3RzLCB0aGlzIGltcGxlbWVudGF0aW9uIGNhbiBiZSBjb25zaWRlcmFibHkKICogbW9yZSBzcGFjZS0gYW5kIHRpbWUtZWZmaWNpZW50IHRoYW4gdGhlIGRlZmF1bHQgW0xpc3RdIGltcGxlbWVudGF0aW9uLgogKgogKiBJbnRlZ2VycyBzdG9yZWQgaW4gdGhlIGxpc3QgYXJlIHRydW5jYXRlZCB0byB0aGVpciBsb3cgMzIgYml0cywKICogaW50ZXJwcmV0ZWQgYXMgYW4gdW5zaWduZWQgMzItYml0IGludGVnZXIgd2l0aCB2YWx1ZXMgaW4gdGhlCiAqIHJhbmdlIDAgdG8gNDI5NDk2NzI5NS4KICovCmFic3RyYWN0IGNsYXNzIFVpbnQzMkxpc3QgaW1wbGVtZW50cyBMaXN0PGludD4sIF9UeXBlZEludExpc3QgewogIC8qKgogICAqIENyZWF0ZXMgYSBbVWludDMyTGlzdF0gb2YgdGhlIHNwZWNpZmllZCBsZW5ndGggKGluIGVsZW1lbnRzKSwgYWxsCiAgICogb2Ygd2hvc2UgZWxlbWVudHMgYXJlIGluaXRpYWxseSB6ZXJvLgogICAqCiAgICogVGhlIGxpc3QgaXMgYmFja2VkIGJ5IGEgW0J5dGVCdWZmZXJdIGNvbnRhaW5pbmcgcHJlY2lzZWx5CiAgICogW2xlbmd0aF0gdGltZXMgNCBieXRlcy4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IFVpbnQzMkxpc3QoaW50IGxlbmd0aCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbVWludDMyTGlzdF0gd2l0aCB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIFtlbGVtZW50c10gbGlzdAogICAqIGFuZCBjb3BpZXMgb3ZlciB0aGUgZWxlbWVudHMuCiAgICoKICAgKiBWYWx1ZXMgYXJlIHRydW5jYXRlZCB0byBmaXQgaW4gdGhlIGxpc3Qgd2hlbiB0aGV5IGFyZSBjb3BpZWQsCiAgICogdGhlIHNhbWUgd2F5IHN0b3JpbmcgdmFsdWVzIHRydW5jYXRlcyB0aGVtLgogICAqCiAgICogVGhlIGxpc3QgaXMgYmFja2VkIGJ5IGEgW0J5dGVCdWZmZXJdIGNvbnRhaW5pbmcgcHJlY2lzZWx5CiAgICogYGVsZW1lbnRzLmxlbmd0aGAgdGltZXMgNCBieXRlcy4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IFVpbnQzMkxpc3QuZnJvbUxpc3QoTGlzdDxpbnQ+IGVsZW1lbnRzKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtVaW50MzJMaXN0XSBfdmlld18gb2YgdGhlIHNwZWNpZmllZCByZWdpb24gaW4KICAgKiB0aGUgc3BlY2lmaWVkIGJ5dGUgYnVmZmVyLgogICAqCiAgICogQ2hhbmdlcyBpbiB0aGUgW1VpbnQzMkxpc3RdIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgYnl0ZSBidWZmZXIKICAgKiBhbmQgdmljZSB2ZXJzYS4KICAgKiBJZiB0aGUgW29mZnNldEluQnl0ZXNdIGluZGV4IG9mIHRoZSByZWdpb24gaXMgbm90IHNwZWNpZmllZCwKICAgKiBpdCBkZWZhdWx0cyB0byB6ZXJvICh0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgYnl0ZSBidWZmZXIpLgogICAqIElmIHRoZSBsZW5ndGggaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gYG51bGxgLAogICAqIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSB2aWV3IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBvciBbbGVuZ3RoXSBhcmUgbmVnYXRpdmUsIG9yCiAgICogaWYgW29mZnNldEluQnl0ZXNdICsgKFtsZW5ndGhdICogZWxlbWVudFNpemVJbkJ5dGVzKSBpcyBncmVhdGVyIHRoYW4KICAgKiB0aGUgbGVuZ3RoIG9mIFtidWZmZXJdLgogICAqCiAgICogVGhyb3dzIFtBcmd1bWVudEVycm9yXSBpZiBbb2Zmc2V0SW5CeXRlc10gaXMgbm90IGEgbXVsdGlwbGUgb2YKICAgKiBbYnl0ZXNQZXJFbGVtZW50XS4KICAgKgogICAqIE5vdGUgdGhhdCB3aGVuIGNyZWF0aW5nIGEgdmlldyBmcm9tIGEgW1R5cGVkRGF0YV0gbGlzdCBvciBieXRlIGRhdGEsCiAgICogdGhhdCBsaXN0IG9yIGJ5dGUgZGF0YSBtYXkgaXRzZWxmIGJlIGEgdmlldyBvbiBhIGxhcmdlciBidWZmZXIKICAgKiB3aXRoIGEgW1R5cGVkRGF0YS5vZmZzZXRJbkJ5dGVzXSBncmVhdGVyIHRoYW4gemVyby4KICAgKiBNZXJlbHkgZG9pbmcgYFVpbnQzMkxpc3QudmlldyhvdGhlci5idWZmZXIsIDAsIGNvdW50KWAgbWF5IG5vdAogICAqIHBvaW50IHRvIHRoZSBieXRlcyB5b3UgaW50ZW5kZWQuIEluc3RlYWQgeW91IG1heSBuZWVkIHRvIGRvOgogICAqIGBgYGRhcnQKICAgKiBVaW50MzJMaXN0LnZpZXcob3RoZXIuYnVmZmVyLCBvdGhlci5vZmZzZXRJbkJ5dGVzLCBjb3VudCkKICAgKiBgYGAKICAgKiBBbHRlcm5hdGl2ZWx5LCB1c2UgW1VpbnQzMkxpc3Quc3VibGlzdFZpZXddCiAgICogd2hpY2ggaW5jbHVkZXMgdGhpcyBjb21wdXRhdGlvbi4KICAgKiBgYGBkYXJ0CiAgICogVWludDMyTGlzdC5zdWJsaXN0VmlldyhvdGhlciwgMCwgY291bnQpCiAgICogYGBgCiAgICogKFRoZSB0aGlyZCBhcmd1bWVudCBpcyBhbiBlbmQgaW5kZXggcmF0aGVyIHRoYW4gYSBsZW5ndGgsIHNvIGlmCiAgICogeW91IHN0YXJ0IGZyb20gYSBwb3NpdGlvbiBncmVhdGVyIHRoYW4gemVybywgeW91IG5lZWQgbm90CiAgICogcmVkdWNlIHRoZSBjb3VudCBjb3JyZXNwb25kaW5nbHkpLgogICAqLwogIGZhY3RvcnkgVWludDMyTGlzdC52aWV3KEJ5dGVCdWZmZXIgYnVmZmVyLAogICAgICBbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgcmV0dXJuIGJ1ZmZlci5hc1VpbnQzMkxpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSBbVWludDMyTGlzdF0gdmlldyBvbiBhIHJhbmdlIG9mIGVsZW1lbnRzIG9mIFtkYXRhXS4KICAgKgogICAqIENyZWF0ZXMgYSB2aWV3IG9uIHRoZSByYW5nZSBvZiBgZGF0YS5idWZmZXJgIHdoaWNoIGNvcnJlc3BvbmRzCiAgICogdG8gdGhlIGVsZW1lbnRzIG9mIFtkYXRhXSBmcm9tIFtzdGFydF0gdW50aWwgW2VuZF0uCiAgICogSWYgW2RhdGFdIGlzIGEgdHlwZWQgZGF0YSBsaXN0LCBsaWtlIFtVaW50MTZMaXN0XSwgdGhlbiB0aGUgdmlldyBpcyBvbgogICAqIHRoZSBieXRlcyBvZiB0aGUgZWxlbWVudHMgd2l0aCBpbmRpY2VzIGZyb20gW3N0YXJ0XSB1bnRpbCBbZW5kXS4KICAgKiBJZiBbZGF0YV0gaXMgYSBbQnl0ZURhdGFdLCBpdCdzIHRyZWF0ZWQgbGlrZSBhIGxpc3Qgb2YgYnl0ZXMuCiAgICoKICAgKiBJZiBwcm92aWRlZCwgW3N0YXJ0XSBhbmQgW2VuZF0gbXVzdCBzYXRpc2Z5CiAgICoKICAgKiAwICZsZTsgYHN0YXJ0YCAmbGU7IGBlbmRgICZsZTsgKmVsZW1lbnRDb3VudCoKICAgKgogICAqIHdoZXJlICplbGVtZW50Q291bnQqIGlzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gW2RhdGFdLCB3aGljaAogICAqIGlzIHRoZSBzYW1lIGFzIHRoZSBbTGlzdC5sZW5ndGhdIG9mIGEgdHlwZWQgZGF0YSBsaXN0LgogICAqCiAgICogSWYgb21pdHRlZCwgW3N0YXJ0XSBkZWZhdWx0cyB0byB6ZXJvIGFuZCBbZW5kXSB0byAqZWxlbWVudENvdW50Ki4KICAgKgogICAqIFRoZSBzdGFydCBhbmQgZW5kIGluZGljZXMgb2YgdGhlIHJhbmdlIG9mIGJ5dGVzIGJlaW5nIHZpZXdlZCBtdXN0IGJlCiAgICogbXVsdGlwbGVzIG9mIGZvdXIuCiAgICovCiAgQFNpbmNlKCIyLjgiKQogIGZhY3RvcnkgVWludDMyTGlzdC5zdWJsaXN0VmlldyhUeXBlZERhdGEgZGF0YSwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgICBpbnQgZWxlbWVudFNpemUgPSBkYXRhLmVsZW1lbnRTaXplSW5CeXRlczsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKAogICAgICAgIHN0YXJ0LCBlbmQsIGRhdGEubGVuZ3RoSW5CeXRlcyB+LyBlbGVtZW50U2l6ZSk7CiAgICBpbnQgYnl0ZUxlbmd0aCA9IChlbmQgLSBzdGFydCkgKiBlbGVtZW50U2l6ZTsKICAgIGlmIChieXRlTGVuZ3RoICUgYnl0ZXNQZXJFbGVtZW50ICE9IDApIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigiVGhlIG51bWJlciBvZiBieXRlcyB0byB2aWV3IG11c3QgYmUgYSBtdWx0aXBsZSBvZiAiICsKICAgICAgICAgICIkYnl0ZXNQZXJFbGVtZW50Iik7CiAgICB9CiAgICByZXR1cm4gZGF0YS5idWZmZXIuYXNVaW50MzJMaXN0KGRhdGEub2Zmc2V0SW5CeXRlcyArIHN0YXJ0ICogZWxlbWVudFNpemUsCiAgICAgICAgYnl0ZUxlbmd0aCB+LyBieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIGJldHdlZW4gW3N0YXJ0XSBhbmQgW2VuZF0uCiAgICoKICAgKiBUaGUgbmV3IGxpc3QgaXMgYSBgVWludDMyTGlzdGAgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcwogICAqIGxpc3QgYXQgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbc3RhcnRdIGFuZCBsZXNzIHRoYW4gW2VuZF0gaW4KICAgKiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IG9jY3VyIGluIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiB2YXIgbnVtYmVycyA9IFVpbnQzMkxpc3QuZnJvbUxpc3QoWzAsIDEsIDIsIDMsIDRdKTsKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykpOyAvLyBbMSwgMl0KICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykucnVudGltZVR5cGUpOyAvLyBVaW50MzJMaXN0CiAgICogYGBgCiAgICoKICAgKiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgW2xlbmd0aF0gb2YgdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxKSk7IC8vIFsxLCAyLCAzLCA0XQogICAqIGBgYAogICAqCiAgICogVGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9ucyBtdXN0IHNhdGlzZnkgdGhlIHJlbGF0aW9ucwogICAqIDAg4omkIGBzdGFydGAg4omkIGBlbmRgIOKJpCBgdGhpcy5sZW5ndGhgCiAgICogSWYgYGVuZGAgaXMgZXF1YWwgdG8gYHN0YXJ0YCwgdGhlbiB0aGUgcmV0dXJuZWQgbGlzdCBpcyBlbXB0eS4KICAgKi8KICBVaW50MzJMaXN0IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pOwoKICBzdGF0aWMgY29uc3QgaW50IGJ5dGVzUGVyRWxlbWVudCA9IDQ7Cn0KCi8qKgogKiBBIGZpeGVkLWxlbmd0aCBsaXN0IG9mIDY0LWJpdCBzaWduZWQgaW50ZWdlcnMgdGhhdCBpcyB2aWV3YWJsZSBhcyBhCiAqIFtUeXBlZERhdGFdLgogKgogKiBGb3IgbG9uZyBsaXN0cywgdGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgY29uc2lkZXJhYmx5CiAqIG1vcmUgc3BhY2UtIGFuZCB0aW1lLWVmZmljaWVudCB0aGFuIHRoZSBkZWZhdWx0IFtMaXN0XSBpbXBsZW1lbnRhdGlvbi4KICoKICogSW50ZWdlcnMgc3RvcmVkIGluIHRoZSBsaXN0IGFyZSB0cnVuY2F0ZWQgdG8gdGhlaXIgbG93IDY0IGJpdHMsCiAqIGludGVycHJldGVkIGFzIGEgc2lnbmVkIDY0LWJpdCB0d28ncyBjb21wbGVtZW50IGludGVnZXIgd2l0aCB2YWx1ZXMgaW4gdGhlCiAqIHJhbmdlIC05MjIzMzcyMDM2ODU0Nzc1ODA4IHRvICs5MjIzMzcyMDM2ODU0Nzc1ODA3LgogKi8KYWJzdHJhY3QgY2xhc3MgSW50NjRMaXN0IGltcGxlbWVudHMgTGlzdDxpbnQ+LCBfVHlwZWRJbnRMaXN0IHsKICAvKioKICAgKiBDcmVhdGVzIGFuIFtJbnQ2NExpc3RdIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIChpbiBlbGVtZW50cyksIGFsbCBvZgogICAqIHdob3NlIGVsZW1lbnRzIGFyZSBpbml0aWFsbHkgemVyby4KICAgKgogICAqIFRoZSBsaXN0IGlzIGJhY2tlZCBieSBhIFtCeXRlQnVmZmVyXSBjb250YWluaW5nIHByZWNpc2VseQogICAqIFtsZW5ndGhdIHRpbWVzIDggYnl0ZXMuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBJbnQ2NExpc3QoaW50IGxlbmd0aCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbSW50NjRMaXN0XSB3aXRoIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgW2VsZW1lbnRzXSBsaXN0CiAgICogYW5kIGNvcGllcyBvdmVyIHRoZSBlbGVtZW50cy4KICAgKgogICAqIFZhbHVlcyBhcmUgdHJ1bmNhdGVkIHRvIGZpdCBpbiB0aGUgbGlzdCB3aGVuIHRoZXkgYXJlIGNvcGllZCwKICAgKiB0aGUgc2FtZSB3YXkgc3RvcmluZyB2YWx1ZXMgdHJ1bmNhdGVzIHRoZW0uCiAgICoKICAgKiBUaGUgbGlzdCBpcyBiYWNrZWQgYnkgYSBbQnl0ZUJ1ZmZlcl0gY29udGFpbmluZyBwcmVjaXNlbHkKICAgKiBgZWxlbWVudHMubGVuZ3RoYCB0aW1lcyA4IGJ5dGVzLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgSW50NjRMaXN0LmZyb21MaXN0KExpc3Q8aW50PiBlbGVtZW50cyk7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gW0ludDY0TGlzdF0gX3ZpZXdfIG9mIHRoZSBzcGVjaWZpZWQgcmVnaW9uIGluIFtidWZmZXJdLgogICAqCiAgICogQ2hhbmdlcyBpbiB0aGUgW0ludDY0TGlzdF0gd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBieXRlIGJ1ZmZlcgogICAqIGFuZCB2aWNlIHZlcnNhLgogICAqIElmIHRoZSBbb2Zmc2V0SW5CeXRlc10gaW5kZXggb2YgdGhlIHJlZ2lvbiBpcyBub3Qgc3BlY2lmaWVkLAogICAqIGl0IGRlZmF1bHRzIHRvIHplcm8gKHRoZSBmaXJzdCBieXRlIGluIHRoZSBieXRlIGJ1ZmZlcikuCiAgICogSWYgdGhlIGxlbmd0aCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBgbnVsbGAsCiAgICogd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIHZpZXcgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIG9yIFtsZW5ndGhdIGFyZSBuZWdhdGl2ZSwgb3IKICAgKiBpZiBbb2Zmc2V0SW5CeXRlc10gKyAoW2xlbmd0aF0gKiBlbGVtZW50U2l6ZUluQnl0ZXMpIGlzIGdyZWF0ZXIgdGhhbgogICAqIHRoZSBsZW5ndGggb2YgW2J1ZmZlcl0uCiAgICoKICAgKiBUaHJvd3MgW0FyZ3VtZW50RXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBpcyBub3QgYSBtdWx0aXBsZSBvZgogICAqIFtieXRlc1BlckVsZW1lbnRdLgogICAqCiAgICogTm90ZSB0aGF0IHdoZW4gY3JlYXRpbmcgYSB2aWV3IGZyb20gYSBbVHlwZWREYXRhXSBsaXN0IG9yIGJ5dGUgZGF0YSwKICAgKiB0aGF0IGxpc3Qgb3IgYnl0ZSBkYXRhIG1heSBpdHNlbGYgYmUgYSB2aWV3IG9uIGEgbGFyZ2VyIGJ1ZmZlcgogICAqIHdpdGggYSBbVHlwZWREYXRhLm9mZnNldEluQnl0ZXNdIGdyZWF0ZXIgdGhhbiB6ZXJvLgogICAqIE1lcmVseSBkb2luZyBgSW50NjRMaXN0LnZpZXcob3RoZXIuYnVmZmVyLCAwLCBjb3VudClgIG1heSBub3QKICAgKiBwb2ludCB0byB0aGUgYnl0ZXMgeW91IGludGVuZGVkLiBJbnN0ZWFkIHlvdSBtYXkgbmVlZCB0byBkbzoKICAgKiBgYGBkYXJ0CiAgICogSW50NjRMaXN0LnZpZXcob3RoZXIuYnVmZmVyLCBvdGhlci5vZmZzZXRJbkJ5dGVzLCBjb3VudCkKICAgKiBgYGAKICAgKiBBbHRlcm5hdGl2ZWx5LCB1c2UgW0ludDY0TGlzdC5zdWJsaXN0Vmlld10KICAgKiB3aGljaCBpbmNsdWRlcyB0aGlzIGNvbXB1dGF0aW9uLgogICAqIGBgYGRhcnQKICAgKiBJbnQ2NExpc3Quc3VibGlzdFZpZXcob3RoZXIsIDAsIGNvdW50KQogICAqIGBgYAogICAqIChUaGUgdGhpcmQgYXJndW1lbnQgaXMgYW4gZW5kIGluZGV4IHJhdGhlciB0aGFuIGEgbGVuZ3RoLCBzbyBpZgogICAqIHlvdSBzdGFydCBmcm9tIGEgcG9zaXRpb24gZ3JlYXRlciB0aGFuIHplcm8sIHlvdSBuZWVkIG5vdAogICAqIHJlZHVjZSB0aGUgY291bnQgY29ycmVzcG9uZGluZ2x5KS4KICAgKi8KICBmYWN0b3J5IEludDY0TGlzdC52aWV3KEJ5dGVCdWZmZXIgYnVmZmVyLAogICAgICBbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgcmV0dXJuIGJ1ZmZlci5hc0ludDY0TGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBbSW50NjRMaXN0XSB2aWV3IG9uIGEgcmFuZ2Ugb2YgZWxlbWVudHMgb2YgW2RhdGFdLgogICAqCiAgICogQ3JlYXRlcyBhIHZpZXcgb24gdGhlIHJhbmdlIG9mIGBkYXRhLmJ1ZmZlcmAgd2hpY2ggY29ycmVzcG9uZHMKICAgKiB0byB0aGUgZWxlbWVudHMgb2YgW2RhdGFdIGZyb20gW3N0YXJ0XSB1bnRpbCBbZW5kXS4KICAgKiBJZiBbZGF0YV0gaXMgYSB0eXBlZCBkYXRhIGxpc3QsIGxpa2UgW1VpbnQxNkxpc3RdLCB0aGVuIHRoZSB2aWV3IGlzIG9uCiAgICogdGhlIGJ5dGVzIG9mIHRoZSBlbGVtZW50cyB3aXRoIGluZGljZXMgZnJvbSBbc3RhcnRdIHVudGlsIFtlbmRdLgogICAqIElmIFtkYXRhXSBpcyBhIFtCeXRlRGF0YV0sIGl0J3MgdHJlYXRlZCBsaWtlIGEgbGlzdCBvZiBieXRlcy4KICAgKgogICAqIElmIHByb3ZpZGVkLCBbc3RhcnRdIGFuZCBbZW5kXSBtdXN0IHNhdGlzZnkKICAgKgogICAqIDAgJmxlOyBgc3RhcnRgICZsZTsgYGVuZGAgJmxlOyAqZWxlbWVudENvdW50KgogICAqCiAgICogd2hlcmUgKmVsZW1lbnRDb3VudCogaXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBbZGF0YV0sIHdoaWNoCiAgICogaXMgdGhlIHNhbWUgYXMgdGhlIFtMaXN0Lmxlbmd0aF0gb2YgYSB0eXBlZCBkYXRhIGxpc3QuCiAgICoKICAgKiBJZiBvbWl0dGVkLCBbc3RhcnRdIGRlZmF1bHRzIHRvIHplcm8gYW5kIFtlbmRdIHRvICplbGVtZW50Q291bnQqLgogICAqCiAgICogVGhlIHN0YXJ0IGFuZCBlbmQgaW5kaWNlcyBvZiB0aGUgcmFuZ2Ugb2YgYnl0ZXMgYmVpbmcgdmlld2VkIG11c3QgYmUKICAgKiBtdWx0aXBsZXMgb2YgZWlnaHQuCiAgICovCiAgQFNpbmNlKCIyLjgiKQogIGZhY3RvcnkgSW50NjRMaXN0LnN1Ymxpc3RWaWV3KFR5cGVkRGF0YSBkYXRhLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIGludCBlbGVtZW50U2l6ZSA9IGRhdGEuZWxlbWVudFNpemVJbkJ5dGVzOwogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2UoCiAgICAgICAgc3RhcnQsIGVuZCwgZGF0YS5sZW5ndGhJbkJ5dGVzIH4vIGVsZW1lbnRTaXplKTsKICAgIGludCBieXRlTGVuZ3RoID0gKGVuZCAtIHN0YXJ0KSAqIGVsZW1lbnRTaXplOwogICAgaWYgKGJ5dGVMZW5ndGggJSBieXRlc1BlckVsZW1lbnQgIT0gMCkgewogICAgICB0aHJvdyBBcmd1bWVudEVycm9yKCJUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHZpZXcgbXVzdCBiZSBhIG11bHRpcGxlIG9mICIgKwogICAgICAgICAgIiRieXRlc1BlckVsZW1lbnQiKTsKICAgIH0KICAgIHJldHVybiBkYXRhLmJ1ZmZlci5hc0ludDY0TGlzdChkYXRhLm9mZnNldEluQnl0ZXMgKyBzdGFydCAqIGVsZW1lbnRTaXplLAogICAgICAgIGJ5dGVMZW5ndGggfi8gYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBiZXR3ZWVuIFtzdGFydF0gYW5kIFtlbmRdLgogICAqCiAgICogVGhlIG5ldyBsaXN0IGlzIGFuIGBJbnQ2NExpc3RgIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIHRoaXMKICAgKiBsaXN0IGF0IHBvc2l0aW9ucyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gW3N0YXJ0XSBhbmQgbGVzcyB0aGFuIFtlbmRdIGluCiAgICogdGhlIHNhbWUgb3JkZXIgYXMgdGhleSBvY2N1ciBpbiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogdmFyIG51bWJlcnMgPSBJbnQ2NExpc3QuZnJvbUxpc3QoWzAsIDEsIDIsIDMsIDRdKTsKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykpOyAvLyBbMSwgMl0KICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykucnVudGltZVR5cGUpOyAvLyBJbnQ2NExpc3QKICAgKiBgYGAKICAgKgogICAqIElmIFtlbmRdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRoZSBbbGVuZ3RoXSBvZiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEpKTsgLy8gWzEsIDIsIDMsIDRdCiAgICogYGBgCiAgICoKICAgKiBUaGUgYHN0YXJ0YCBhbmQgYGVuZGAgcG9zaXRpb25zIG11c3Qgc2F0aXNmeSB0aGUgcmVsYXRpb25zCiAgICogMCDiiaQgYHN0YXJ0YCDiiaQgYGVuZGAg4omkIGB0aGlzLmxlbmd0aGAKICAgKiBJZiBgZW5kYCBpcyBlcXVhbCB0byBgc3RhcnRgLCB0aGVuIHRoZSByZXR1cm5lZCBsaXN0IGlzIGVtcHR5LgogICAqLwogIEludDY0TGlzdCBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKTsKCiAgc3RhdGljIGNvbnN0IGludCBieXRlc1BlckVsZW1lbnQgPSA4Owp9CgovKioKICogQSBmaXhlZC1sZW5ndGggbGlzdCBvZiA2NC1iaXQgdW5zaWduZWQgaW50ZWdlcnMgdGhhdCBpcyB2aWV3YWJsZSBhcyBhCiAqIFtUeXBlZERhdGFdLgogKgogKiBGb3IgbG9uZyBsaXN0cywgdGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgY29uc2lkZXJhYmx5CiAqIG1vcmUgc3BhY2UtIGFuZCB0aW1lLWVmZmljaWVudCB0aGFuIHRoZSBkZWZhdWx0IFtMaXN0XSBpbXBsZW1lbnRhdGlvbi4KICoKICogSW50ZWdlcnMgc3RvcmVkIGluIHRoZSBsaXN0IGFyZSB0cnVuY2F0ZWQgdG8gdGhlaXIgbG93IDY0IGJpdHMsCiAqIGludGVycHJldGVkIGFzIGFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHdpdGggdmFsdWVzIGluIHRoZQogKiByYW5nZSAwIHRvIDE4NDQ2NzQ0MDczNzA5NTUxNjE1LgogKi8KYWJzdHJhY3QgY2xhc3MgVWludDY0TGlzdCBpbXBsZW1lbnRzIExpc3Q8aW50PiwgX1R5cGVkSW50TGlzdCB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIFtVaW50NjRMaXN0XSBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aCAoaW4gZWxlbWVudHMpLCBhbGwKICAgKiBvZiB3aG9zZSBlbGVtZW50cyBhcmUgaW5pdGlhbGx5IHplcm8uCiAgICoKICAgKiBUaGUgbGlzdCBpcyBiYWNrZWQgYnkgYSBbQnl0ZUJ1ZmZlcl0gY29udGFpbmluZyBwcmVjaXNlbHkKICAgKiBbbGVuZ3RoXSB0aW1lcyA4IGJ5dGVzLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgVWludDY0TGlzdChpbnQgbGVuZ3RoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtVaW50NjRMaXN0XSB3aXRoIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgW2VsZW1lbnRzXSBsaXN0CiAgICogYW5kIGNvcGllcyBvdmVyIHRoZSBlbGVtZW50cy4KICAgKgogICAqIFZhbHVlcyBhcmUgdHJ1bmNhdGVkIHRvIGZpdCBpbiB0aGUgbGlzdCB3aGVuIHRoZXkgYXJlIGNvcGllZCwKICAgKiB0aGUgc2FtZSB3YXkgc3RvcmluZyB2YWx1ZXMgdHJ1bmNhdGVzIHRoZW0uCiAgICoKICAgKiBUaGUgbGlzdCBpcyBiYWNrZWQgYnkgYSBbQnl0ZUJ1ZmZlcl0gY29udGFpbmluZyBwcmVjaXNlbHkKICAgKiBgZWxlbWVudHMubGVuZ3RoYCB0aW1lcyA4IGJ5dGVzLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgVWludDY0TGlzdC5mcm9tTGlzdChMaXN0PGludD4gZWxlbWVudHMpOwoKICAvKioKICAgKiBDcmVhdGVzIGFuIFtVaW50NjRMaXN0XSBfdmlld18gb2YgdGhlIHNwZWNpZmllZCByZWdpb24gaW4KICAgKiB0aGUgc3BlY2lmaWVkIGJ5dGUgYnVmZmVyLgogICAqCiAgICogQ2hhbmdlcyBpbiB0aGUgW1VpbnQ2NExpc3RdIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgYnl0ZSBidWZmZXIKICAgKiBhbmQgdmljZSB2ZXJzYS4KICAgKiBJZiB0aGUgW29mZnNldEluQnl0ZXNdIGluZGV4IG9mIHRoZSByZWdpb24gaXMgbm90IHNwZWNpZmllZCwKICAgKiBpdCBkZWZhdWx0cyB0byB6ZXJvICh0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgYnl0ZSBidWZmZXIpLgogICAqIElmIHRoZSBsZW5ndGggaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gYG51bGxgLAogICAqIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSB2aWV3IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBvciBbbGVuZ3RoXSBhcmUgbmVnYXRpdmUsIG9yCiAgICogaWYgW29mZnNldEluQnl0ZXNdICsgKFtsZW5ndGhdICogZWxlbWVudFNpemVJbkJ5dGVzKSBpcyBncmVhdGVyIHRoYW4KICAgKiB0aGUgbGVuZ3RoIG9mIFtidWZmZXJdLgogICAqCiAgICogVGhyb3dzIFtBcmd1bWVudEVycm9yXSBpZiBbb2Zmc2V0SW5CeXRlc10gaXMgbm90IGEgbXVsdGlwbGUgb2YKICAgKiBbYnl0ZXNQZXJFbGVtZW50XS4KICAgKgogICAqIE5vdGUgdGhhdCB3aGVuIGNyZWF0aW5nIGEgdmlldyBmcm9tIGEgW1R5cGVkRGF0YV0gbGlzdCBvciBieXRlIGRhdGEsCiAgICogdGhhdCBsaXN0IG9yIGJ5dGUgZGF0YSBtYXkgaXRzZWxmIGJlIGEgdmlldyBvbiBhIGxhcmdlciBidWZmZXIKICAgKiB3aXRoIGEgW1R5cGVkRGF0YS5vZmZzZXRJbkJ5dGVzXSBncmVhdGVyIHRoYW4gemVyby4KICAgKiBNZXJlbHkgZG9pbmcgYFVpbnQ2NExpc3QudmlldyhvdGhlci5idWZmZXIsIDAsIGNvdW50KWAgbWF5IG5vdAogICAqIHBvaW50IHRvIHRoZSBieXRlcyB5b3UgaW50ZW5kZWQuIEluc3RlYWQgeW91IG1heSBuZWVkIHRvIGRvOgogICAqIGBgYGRhcnQKICAgKiBVaW50NjRMaXN0LnZpZXcob3RoZXIuYnVmZmVyLCBvdGhlci5vZmZzZXRJbkJ5dGVzLCBjb3VudCkKICAgKiBgYGAKICAgKiBBbHRlcm5hdGl2ZWx5LCB1c2UgW1VpbnQ2NExpc3Quc3VibGlzdFZpZXddCiAgICogd2hpY2ggaW5jbHVkZXMgdGhpcyBjb21wdXRhdGlvbi4KICAgKiBgYGBkYXJ0CiAgICogVWludDY0TGlzdC5zdWJsaXN0VmlldyhvdGhlciwgMCwgY291bnQpCiAgICogYGBgCiAgICogKFRoZSB0aGlyZCBhcmd1bWVudCBpcyBhbiBlbmQgaW5kZXggcmF0aGVyIHRoYW4gYSBsZW5ndGgsIHNvIGlmCiAgICogeW91IHN0YXJ0IGZyb20gYSBwb3NpdGlvbiBncmVhdGVyIHRoYW4gemVybywgeW91IG5lZWQgbm90CiAgICogcmVkdWNlIHRoZSBjb3VudCBjb3JyZXNwb25kaW5nbHkpLgogICAqLwogIGZhY3RvcnkgVWludDY0TGlzdC52aWV3KEJ5dGVCdWZmZXIgYnVmZmVyLAogICAgICBbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgcmV0dXJuIGJ1ZmZlci5hc1VpbnQ2NExpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSBbVWludDY0TGlzdF0gdmlldyBvbiBhIHJhbmdlIG9mIGVsZW1lbnRzIG9mIFtkYXRhXS4KICAgKgogICAqIENyZWF0ZXMgYSB2aWV3IG9uIHRoZSByYW5nZSBvZiBgZGF0YS5idWZmZXJgIHdoaWNoIGNvcnJlc3BvbmRzCiAgICogdG8gdGhlIGVsZW1lbnRzIG9mIFtkYXRhXSBmcm9tIFtzdGFydF0gdW50aWwgW2VuZF0uCiAgICogSWYgW2RhdGFdIGlzIGEgdHlwZWQgZGF0YSBsaXN0LCBsaWtlIFtVaW50MTZMaXN0XSwgdGhlbiB0aGUgdmlldyBpcyBvbgogICAqIHRoZSBieXRlcyBvZiB0aGUgZWxlbWVudHMgd2l0aCBpbmRpY2VzIGZyb20gW3N0YXJ0XSB1bnRpbCBbZW5kXS4KICAgKiBJZiBbZGF0YV0gaXMgYSBbQnl0ZURhdGFdLCBpdCdzIHRyZWF0ZWQgbGlrZSBhIGxpc3Qgb2YgYnl0ZXMuCiAgICoKICAgKiBJZiBwcm92aWRlZCwgW3N0YXJ0XSBhbmQgW2VuZF0gbXVzdCBzYXRpc2Z5CiAgICoKICAgKiAwICZsZTsgYHN0YXJ0YCAmbGU7IGBlbmRgICZsZTsgKmVsZW1lbnRDb3VudCoKICAgKgogICAqIHdoZXJlICplbGVtZW50Q291bnQqIGlzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gW2RhdGFdLCB3aGljaAogICAqIGlzIHRoZSBzYW1lIGFzIHRoZSBbTGlzdC5sZW5ndGhdIG9mIGEgdHlwZWQgZGF0YSBsaXN0LgogICAqCiAgICogSWYgb21pdHRlZCwgW3N0YXJ0XSBkZWZhdWx0cyB0byB6ZXJvIGFuZCBbZW5kXSB0byAqZWxlbWVudENvdW50Ki4KICAgKgogICAqIFRoZSBzdGFydCBhbmQgZW5kIGluZGljZXMgb2YgdGhlIHJhbmdlIG9mIGJ5dGVzIGJlaW5nIHZpZXdlZCBtdXN0IGJlCiAgICogbXVsdGlwbGVzIG9mIGVpZ2h0LgogICAqLwogIEBTaW5jZSgiMi44IikKICBmYWN0b3J5IFVpbnQ2NExpc3Quc3VibGlzdFZpZXcoVHlwZWREYXRhIGRhdGEsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgaW50IGVsZW1lbnRTaXplID0gZGF0YS5lbGVtZW50U2l6ZUluQnl0ZXM7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZSgKICAgICAgICBzdGFydCwgZW5kLCBkYXRhLmxlbmd0aEluQnl0ZXMgfi8gZWxlbWVudFNpemUpOwogICAgaW50IGJ5dGVMZW5ndGggPSAoZW5kIC0gc3RhcnQpICogZWxlbWVudFNpemU7CiAgICBpZiAoYnl0ZUxlbmd0aCAlIGJ5dGVzUGVyRWxlbWVudCAhPSAwKSB7CiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoIlRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdmlldyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgIiArCiAgICAgICAgICAiJGJ5dGVzUGVyRWxlbWVudCIpOwogICAgfQogICAgcmV0dXJuIGRhdGEuYnVmZmVyLmFzVWludDY0TGlzdChkYXRhLm9mZnNldEluQnl0ZXMgKyBzdGFydCAqIGVsZW1lbnRTaXplLAogICAgICAgIGJ5dGVMZW5ndGggfi8gYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBiZXR3ZWVuIFtzdGFydF0gYW5kIFtlbmRdLgogICAqCiAgICogVGhlIG5ldyBsaXN0IGlzIGEgYFVpbnQ2NExpc3RgIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIHRoaXMKICAgKiBsaXN0IGF0IHBvc2l0aW9ucyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gW3N0YXJ0XSBhbmQgbGVzcyB0aGFuIFtlbmRdIGluCiAgICogdGhlIHNhbWUgb3JkZXIgYXMgdGhleSBvY2N1ciBpbiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogdmFyIG51bWJlcnMgPSBVaW50NjRMaXN0LmZyb21MaXN0KFswLCAxLCAyLCAzLCA0XSk7CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpKTsgLy8gWzEsIDJdCiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpLnJ1bnRpbWVUeXBlKTsgLy8gVWludDY0TGlzdAogICAqIGBgYAogICAqCiAgICogSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIFtsZW5ndGhdIG9mIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSkpOyAvLyBbMSwgMiwgMywgNF0KICAgKiBgYGAKICAgKgogICAqIFRoZSBgc3RhcnRgIGFuZCBgZW5kYCBwb3NpdGlvbnMgbXVzdCBzYXRpc2Z5IHRoZSByZWxhdGlvbnMKICAgKiAwIOKJpCBgc3RhcnRgIOKJpCBgZW5kYCDiiaQgYHRoaXMubGVuZ3RoYAogICAqIElmIGBlbmRgIGlzIGVxdWFsIHRvIGBzdGFydGAsIHRoZW4gdGhlIHJldHVybmVkIGxpc3QgaXMgZW1wdHkuCiAgICovCiAgVWludDY0TGlzdCBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKTsKCiAgc3RhdGljIGNvbnN0IGludCBieXRlc1BlckVsZW1lbnQgPSA4Owp9CgovKioKICogQSBmaXhlZC1sZW5ndGggbGlzdCBvZiBJRUVFIDc1NCBzaW5nbGUtcHJlY2lzaW9uIGJpbmFyeSBmbG9hdGluZy1wb2ludAogKiBudW1iZXJzIHRoYXQgaXMgdmlld2FibGUgYXMgYSBbVHlwZWREYXRhXS4KICoKICogRm9yIGxvbmcgbGlzdHMsIHRoaXMKICogaW1wbGVtZW50YXRpb24gY2FuIGJlIGNvbnNpZGVyYWJseSBtb3JlIHNwYWNlLSBhbmQgdGltZS1lZmZpY2llbnQgdGhhbgogKiB0aGUgZGVmYXVsdCBbTGlzdF0gaW1wbGVtZW50YXRpb24uCiAqCiAqIERvdWJsZSB2YWx1ZXMgc3RvcmVkIGluIHRoZSBsaXN0IGFyZSBjb252ZXJ0ZWQgdG8gdGhlIG5lYXJlc3QKICogc2luZ2xlLXByZWNpc2lvbiB2YWx1ZS4gVmFsdWVzIHJlYWQgYXJlIGNvbnZlcnRlZCB0byBhIGRvdWJsZQogKiB2YWx1ZSB3aXRoIHRoZSBzYW1lIHZhbHVlLgogKi8KYWJzdHJhY3QgY2xhc3MgRmxvYXQzMkxpc3QgaW1wbGVtZW50cyBMaXN0PGRvdWJsZT4sIF9UeXBlZEZsb2F0TGlzdCB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIFtGbG9hdDMyTGlzdF0gb2YgdGhlIHNwZWNpZmllZCBsZW5ndGggKGluIGVsZW1lbnRzKSwgYWxsIG9mCiAgICogd2hvc2UgZWxlbWVudHMgYXJlIGluaXRpYWxseSB6ZXJvLgogICAqCiAgICogVGhlIGxpc3QgaXMgYmFja2VkIGJ5IGEgW0J5dGVCdWZmZXJdIGNvbnRhaW5pbmcgcHJlY2lzZWx5CiAgICogW2xlbmd0aF0gdGltZXMgNCBieXRlcy4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEZsb2F0MzJMaXN0KGludCBsZW5ndGgpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0Zsb2F0MzJMaXN0XSB3aXRoIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgW2VsZW1lbnRzXSBsaXN0CiAgICogYW5kIGNvcGllcyBvdmVyIHRoZSBlbGVtZW50cy4KICAgKgogICAqIFZhbHVlcyBhcmUgdHJ1bmNhdGVkIHRvIGZpdCBpbiB0aGUgbGlzdCB3aGVuIHRoZXkgYXJlIGNvcGllZCwKICAgKiB0aGUgc2FtZSB3YXkgc3RvcmluZyB2YWx1ZXMgdHJ1bmNhdGVzIHRoZW0uCiAgICoKICAgKiBUaGUgbGlzdCBpcyBiYWNrZWQgYnkgYSBbQnl0ZUJ1ZmZlcl0gY29udGFpbmluZyBwcmVjaXNlbHkKICAgKiBgZWxlbWVudHMubGVuZ3RoYCB0aW1lcyA0IGJ5dGVzLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQzMkxpc3QuZnJvbUxpc3QoTGlzdDxkb3VibGU+IGVsZW1lbnRzKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtGbG9hdDMyTGlzdF0gX3ZpZXdfIG9mIHRoZSBzcGVjaWZpZWQgcmVnaW9uIGluIFtidWZmZXJdLgogICAqCiAgICogQ2hhbmdlcyBpbiB0aGUgW0Zsb2F0MzJMaXN0XSB3aWxsIGJlIHZpc2libGUgaW4gdGhlIGJ5dGUKICAgKiBidWZmZXIgYW5kIHZpY2UgdmVyc2EuCiAgICogSWYgdGhlIFtvZmZzZXRJbkJ5dGVzXSBpbmRleCBvZiB0aGUgcmVnaW9uIGlzIG5vdCBzcGVjaWZpZWQsCiAgICogaXQgZGVmYXVsdHMgdG8gemVybyAodGhlIGZpcnN0IGJ5dGUgaW4gdGhlIGJ5dGUgYnVmZmVyKS4KICAgKiBJZiB0aGUgbGVuZ3RoIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIGBudWxsYCwKICAgKiB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgdmlldyBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbb2Zmc2V0SW5CeXRlc10gb3IgW2xlbmd0aF0gYXJlIG5lZ2F0aXZlLCBvcgogICAqIGlmIFtvZmZzZXRJbkJ5dGVzXSArIChbbGVuZ3RoXSAqIGVsZW1lbnRTaXplSW5CeXRlcykgaXMgZ3JlYXRlciB0aGFuCiAgICogdGhlIGxlbmd0aCBvZiBbYnVmZmVyXS4KICAgKgogICAqIFRocm93cyBbQXJndW1lbnRFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIGlzIG5vdCBhIG11bHRpcGxlIG9mCiAgICogW2J5dGVzUGVyRWxlbWVudF0uCiAgICoKICAgKiBOb3RlIHRoYXQgd2hlbiBjcmVhdGluZyBhIHZpZXcgZnJvbSBhIFtUeXBlZERhdGFdIGxpc3Qgb3IgYnl0ZSBkYXRhLAogICAqIHRoYXQgbGlzdCBvciBieXRlIGRhdGEgbWF5IGl0c2VsZiBiZSBhIHZpZXcgb24gYSBsYXJnZXIgYnVmZmVyCiAgICogd2l0aCBhIFtUeXBlZERhdGEub2Zmc2V0SW5CeXRlc10gZ3JlYXRlciB0aGFuIHplcm8uCiAgICogTWVyZWx5IGRvaW5nIGBGbG9hdDMyTGlzdC52aWV3KG90aGVyLmJ1ZmZlciwgMCwgY291bnQpYCBtYXkgbm90CiAgICogcG9pbnQgdG8gdGhlIGJ5dGVzIHlvdSBpbnRlbmRlZC4gSW5zdGVhZCB5b3UgbWF5IG5lZWQgdG8gZG86CiAgICogYGBgZGFydAogICAqIEZsb2F0MzJMaXN0LnZpZXcob3RoZXIuYnVmZmVyLCBvdGhlci5vZmZzZXRJbkJ5dGVzLCBjb3VudCkKICAgKiBgYGAKICAgKiBBbHRlcm5hdGl2ZWx5LCB1c2UgW0Zsb2F0MzJMaXN0LnN1Ymxpc3RWaWV3XQogICAqIHdoaWNoIGluY2x1ZGVzIHRoaXMgY29tcHV0YXRpb24uCiAgICogYGBgZGFydAogICAqIEZsb2F0MzJMaXN0LnN1Ymxpc3RWaWV3KG90aGVyLCAwLCBjb3VudCkKICAgKiBgYGAKICAgKiAoVGhlIHRoaXJkIGFyZ3VtZW50IGlzIGFuIGVuZCBpbmRleCByYXRoZXIgdGhhbiBhIGxlbmd0aCwgc28gaWYKICAgKiB5b3Ugc3RhcnQgZnJvbSBhIHBvc2l0aW9uIGdyZWF0ZXIgdGhhbiB6ZXJvLCB5b3UgbmVlZCBub3QKICAgKiByZWR1Y2UgdGhlIGNvdW50IGNvcnJlc3BvbmRpbmdseSkuCiAgICovCiAgZmFjdG9yeSBGbG9hdDMyTGlzdC52aWV3KEJ5dGVCdWZmZXIgYnVmZmVyLAogICAgICBbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgcmV0dXJuIGJ1ZmZlci5hc0Zsb2F0MzJMaXN0KG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGFuIFtGbG9hdDMyTGlzdF0gdmlldyBvbiBhIHJhbmdlIG9mIGVsZW1lbnRzIG9mIFtkYXRhXS4KICAgKgogICAqIENyZWF0ZXMgYSB2aWV3IG9uIHRoZSByYW5nZSBvZiBgZGF0YS5idWZmZXJgIHdoaWNoIGNvcnJlc3BvbmRzCiAgICogdG8gdGhlIGVsZW1lbnRzIG9mIFtkYXRhXSBmcm9tIFtzdGFydF0gdW50aWwgW2VuZF0uCiAgICogSWYgW2RhdGFdIGlzIGEgdHlwZWQgZGF0YSBsaXN0LCBsaWtlIFtVaW50MTZMaXN0XSwgdGhlbiB0aGUgdmlldyBpcyBvbgogICAqIHRoZSBieXRlcyBvZiB0aGUgZWxlbWVudHMgd2l0aCBpbmRpY2VzIGZyb20gW3N0YXJ0XSB1bnRpbCBbZW5kXS4KICAgKiBJZiBbZGF0YV0gaXMgYSBbQnl0ZURhdGFdLCBpdCdzIHRyZWF0ZWQgbGlrZSBhIGxpc3Qgb2YgYnl0ZXMuCiAgICoKICAgKiBJZiBwcm92aWRlZCwgW3N0YXJ0XSBhbmQgW2VuZF0gbXVzdCBzYXRpc2Z5CiAgICoKICAgKiAwICZsZTsgYHN0YXJ0YCAmbGU7IGBlbmRgICZsZTsgKmVsZW1lbnRDb3VudCoKICAgKgogICAqIHdoZXJlICplbGVtZW50Q291bnQqIGlzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gW2RhdGFdLCB3aGljaAogICAqIGlzIHRoZSBzYW1lIGFzIHRoZSBbTGlzdC5sZW5ndGhdIG9mIGEgdHlwZWQgZGF0YSBsaXN0LgogICAqCiAgICogSWYgb21pdHRlZCwgW3N0YXJ0XSBkZWZhdWx0cyB0byB6ZXJvIGFuZCBbZW5kXSB0byAqZWxlbWVudENvdW50Ki4KICAgKgogICAqIFRoZSBzdGFydCBhbmQgZW5kIGluZGljZXMgb2YgdGhlIHJhbmdlIG9mIGJ5dGVzIGJlaW5nIHZpZXdlZCBtdXN0IGJlCiAgICogbXVsdGlwbGVzIG9mIGZvdXIuCiAgICovCiAgQFNpbmNlKCIyLjgiKQogIGZhY3RvcnkgRmxvYXQzMkxpc3Quc3VibGlzdFZpZXcoVHlwZWREYXRhIGRhdGEsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgaW50IGVsZW1lbnRTaXplID0gZGF0YS5lbGVtZW50U2l6ZUluQnl0ZXM7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZSgKICAgICAgICBzdGFydCwgZW5kLCBkYXRhLmxlbmd0aEluQnl0ZXMgfi8gZWxlbWVudFNpemUpOwogICAgaW50IGJ5dGVMZW5ndGggPSAoZW5kIC0gc3RhcnQpICogZWxlbWVudFNpemU7CiAgICBpZiAoYnl0ZUxlbmd0aCAlIGJ5dGVzUGVyRWxlbWVudCAhPSAwKSB7CiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoIlRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdmlldyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgIiArCiAgICAgICAgICAiJGJ5dGVzUGVyRWxlbWVudCIpOwogICAgfQogICAgcmV0dXJuIGRhdGEuYnVmZmVyLmFzRmxvYXQzMkxpc3QoZGF0YS5vZmZzZXRJbkJ5dGVzICsgc3RhcnQgKiBlbGVtZW50U2l6ZSwKICAgICAgICBieXRlTGVuZ3RoIH4vIGJ5dGVzUGVyRWxlbWVudCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgZWxlbWVudHMgYmV0d2VlbiBbc3RhcnRdIGFuZCBbZW5kXS4KICAgKgogICAqIFRoZSBuZXcgbGlzdCBpcyBhIGBGbG9hdDMyTGlzdGAgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcwogICAqIGxpc3QgYXQgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbc3RhcnRdIGFuZCBsZXNzIHRoYW4gW2VuZF0gaW4KICAgKiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IG9jY3VyIGluIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiB2YXIgbnVtYmVycyA9IEZsb2F0MzJMaXN0LmZyb21MaXN0KFswLCAxLCAyLCAzLCA0XSk7CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpKTsgLy8gWzEsIDJdCiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpLnJ1bnRpbWVUeXBlKTsgLy8gRmxvYXQzMkxpc3QKICAgKiBgYGAKICAgKgogICAqIElmIFtlbmRdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRoZSBbbGVuZ3RoXSBvZiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEpKTsgLy8gWzEsIDIsIDMsIDRdCiAgICogYGBgCiAgICoKICAgKiBUaGUgYHN0YXJ0YCBhbmQgYGVuZGAgcG9zaXRpb25zIG11c3Qgc2F0aXNmeSB0aGUgcmVsYXRpb25zCiAgICogMCDiiaQgYHN0YXJ0YCDiiaQgYGVuZGAg4omkIGB0aGlzLmxlbmd0aGAKICAgKiBJZiBgZW5kYCBpcyBlcXVhbCB0byBgc3RhcnRgLCB0aGVuIHRoZSByZXR1cm5lZCBsaXN0IGlzIGVtcHR5LgogICAqLwogIEZsb2F0MzJMaXN0IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pOwoKICBzdGF0aWMgY29uc3QgaW50IGJ5dGVzUGVyRWxlbWVudCA9IDQ7Cn0KCi8qKgogKiBBIGZpeGVkLWxlbmd0aCBsaXN0IG9mIElFRUUgNzU0IGRvdWJsZS1wcmVjaXNpb24gYmluYXJ5IGZsb2F0aW5nLXBvaW50CiAqIG51bWJlcnMgIHRoYXQgaXMgdmlld2FibGUgYXMgYSBbVHlwZWREYXRhXS4KICoKICogRm9yIGxvbmcgbGlzdHMsIHRoaXMKICogaW1wbGVtZW50YXRpb24gY2FuIGJlIGNvbnNpZGVyYWJseSBtb3JlIHNwYWNlLSBhbmQgdGltZS1lZmZpY2llbnQgdGhhbgogKiB0aGUgZGVmYXVsdCBbTGlzdF0gaW1wbGVtZW50YXRpb24uCiAqLwphYnN0cmFjdCBjbGFzcyBGbG9hdDY0TGlzdCBpbXBsZW1lbnRzIExpc3Q8ZG91YmxlPiwgX1R5cGVkRmxvYXRMaXN0IHsKICAvKioKICAgKiBDcmVhdGVzIGEgW0Zsb2F0NjRMaXN0XSBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aCAoaW4gZWxlbWVudHMpLCBhbGwgb2YKICAgKiB3aG9zZSBlbGVtZW50cyBhcmUgaW5pdGlhbGx5IHplcm8uCiAgICoKICAgKiBUaGUgbGlzdCBpcyBiYWNrZWQgYnkgYSBbQnl0ZUJ1ZmZlcl0gY29udGFpbmluZyBwcmVjaXNlbHkKICAgKiBbbGVuZ3RoXSB0aW1lcyA4IGJ5dGVzLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQ2NExpc3QoaW50IGxlbmd0aCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbRmxvYXQ2NExpc3RdIHdpdGggdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBbZWxlbWVudHNdIGxpc3QKICAgKiBhbmQgY29waWVzIG92ZXIgdGhlIGVsZW1lbnRzLgogICAqCiAgICogVGhlIGxpc3QgaXMgYmFja2VkIGJ5IGEgW0J5dGVCdWZmZXJdIGNvbnRhaW5pbmcgcHJlY2lzZWx5CiAgICogYGVsZW1lbnRzLmxlbmd0aGAgdGltZXMgOCBieXRlcy4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEZsb2F0NjRMaXN0LmZyb21MaXN0KExpc3Q8ZG91YmxlPiBlbGVtZW50cyk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbRmxvYXQ2NExpc3RdIF92aWV3XyBvZiB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBpbiBbYnVmZmVyXS4KICAgKgogICAqIENoYW5nZXMgaW4gdGhlIFtGbG9hdDY0TGlzdF0gd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBieXRlCiAgICogYnVmZmVyIGFuZCB2aWNlIHZlcnNhLgogICAqIElmIHRoZSBbb2Zmc2V0SW5CeXRlc10gaW5kZXggb2YgdGhlIHJlZ2lvbiBpcyBub3Qgc3BlY2lmaWVkLAogICAqIGl0IGRlZmF1bHRzIHRvIHplcm8gKHRoZSBmaXJzdCBieXRlIGluIHRoZSBieXRlIGJ1ZmZlcikuCiAgICogSWYgdGhlIGxlbmd0aCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBgbnVsbGAsCiAgICogd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIHZpZXcgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIG9yIFtsZW5ndGhdIGFyZSBuZWdhdGl2ZSwgb3IKICAgKiBpZiBbb2Zmc2V0SW5CeXRlc10gKyAoW2xlbmd0aF0gKiBlbGVtZW50U2l6ZUluQnl0ZXMpIGlzIGdyZWF0ZXIgdGhhbgogICAqIHRoZSBsZW5ndGggb2YgW2J1ZmZlcl0uCiAgICoKICAgKiBUaHJvd3MgW0FyZ3VtZW50RXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBpcyBub3QgYSBtdWx0aXBsZSBvZgogICAqIFtieXRlc1BlckVsZW1lbnRdLgogICAqCiAgICogTm90ZSB0aGF0IHdoZW4gY3JlYXRpbmcgYSB2aWV3IGZyb20gYSBbVHlwZWREYXRhXSBsaXN0IG9yIGJ5dGUgZGF0YSwKICAgKiB0aGF0IGxpc3Qgb3IgYnl0ZSBkYXRhIG1heSBpdHNlbGYgYmUgYSB2aWV3IG9uIGEgbGFyZ2VyIGJ1ZmZlcgogICAqIHdpdGggYSBbVHlwZWREYXRhLm9mZnNldEluQnl0ZXNdIGdyZWF0ZXIgdGhhbiB6ZXJvLgogICAqIE1lcmVseSBkb2luZyBgRmxvYXQ2NExpc3QudmlldyhvdGhlci5idWZmZXIsIDAsIGNvdW50KWAgbWF5IG5vdAogICAqIHBvaW50IHRvIHRoZSBieXRlcyB5b3UgaW50ZW5kZWQuIEluc3RlYWQgeW91IG1heSBuZWVkIHRvIGRvOgogICAqIGBgYGRhcnQKICAgKiBGbG9hdDY0TGlzdC52aWV3KG90aGVyLmJ1ZmZlciwgb3RoZXIub2Zmc2V0SW5CeXRlcywgY291bnQpCiAgICogYGBgCiAgICogQWx0ZXJuYXRpdmVseSwgdXNlIFtGbG9hdDY0TGlzdC5zdWJsaXN0Vmlld10KICAgKiB3aGljaCBpbmNsdWRlcyB0aGlzIGNvbXB1dGF0aW9uLgogICAqIGBgYGRhcnQKICAgKiBGbG9hdDY0TGlzdC5zdWJsaXN0VmlldyhvdGhlciwgMCwgY291bnQpCiAgICogYGBgCiAgICogKFRoZSB0aGlyZCBhcmd1bWVudCBpcyBhbiBlbmQgaW5kZXggcmF0aGVyIHRoYW4gYSBsZW5ndGgsIHNvIGlmCiAgICogeW91IHN0YXJ0IGZyb20gYSBwb3NpdGlvbiBncmVhdGVyIHRoYW4gemVybywgeW91IG5lZWQgbm90CiAgICogcmVkdWNlIHRoZSBjb3VudCBjb3JyZXNwb25kaW5nbHkpLgogICAqLwogIGZhY3RvcnkgRmxvYXQ2NExpc3QudmlldyhCeXRlQnVmZmVyIGJ1ZmZlciwKICAgICAgW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIHJldHVybiBidWZmZXIuYXNGbG9hdDY0TGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtGbG9hdDY0TGlzdF0gdmlldyBvbiBhIHJhbmdlIG9mIGVsZW1lbnRzIG9mIFtkYXRhXS4KICAgKgogICAqIENyZWF0ZXMgYSB2aWV3IG9uIHRoZSByYW5nZSBvZiBgZGF0YS5idWZmZXJgIHdoaWNoIGNvcnJlc3BvbmRzCiAgICogdG8gdGhlIGVsZW1lbnRzIG9mIFtkYXRhXSBmcm9tIFtzdGFydF0gdW50aWwgW2VuZF0uCiAgICogSWYgW2RhdGFdIGlzIGEgdHlwZWQgZGF0YSBsaXN0LCBsaWtlIFtVaW50MTZMaXN0XSwgdGhlbiB0aGUgdmlldyBpcyBvbgogICAqIHRoZSBieXRlcyBvZiB0aGUgZWxlbWVudHMgd2l0aCBpbmRpY2VzIGZyb20gW3N0YXJ0XSB1bnRpbCBbZW5kXS4KICAgKiBJZiBbZGF0YV0gaXMgYSBbQnl0ZURhdGFdLCBpdCdzIHRyZWF0ZWQgbGlrZSBhIGxpc3Qgb2YgYnl0ZXMuCiAgICoKICAgKiBJZiBwcm92aWRlZCwgW3N0YXJ0XSBhbmQgW2VuZF0gbXVzdCBzYXRpc2Z5CiAgICoKICAgKiAwICZsZTsgYHN0YXJ0YCAmbGU7IGBlbmRgICZsZTsgKmVsZW1lbnRDb3VudCoKICAgKgogICAqIHdoZXJlICplbGVtZW50Q291bnQqIGlzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gW2RhdGFdLCB3aGljaAogICAqIGlzIHRoZSBzYW1lIGFzIHRoZSBbTGlzdC5sZW5ndGhdIG9mIGEgdHlwZWQgZGF0YSBsaXN0LgogICAqCiAgICogSWYgb21pdHRlZCwgW3N0YXJ0XSBkZWZhdWx0cyB0byB6ZXJvIGFuZCBbZW5kXSB0byAqZWxlbWVudENvdW50Ki4KICAgKgogICAqIFRoZSBzdGFydCBhbmQgZW5kIGluZGljZXMgb2YgdGhlIHJhbmdlIG9mIGJ5dGVzIGJlaW5nIHZpZXdlZCBtdXN0IGJlCiAgICogbXVsdGlwbGVzIG9mIGVpZ2h0LgogICAqLwogIEBTaW5jZSgiMi44IikKICBmYWN0b3J5IEZsb2F0NjRMaXN0LnN1Ymxpc3RWaWV3KFR5cGVkRGF0YSBkYXRhLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIGludCBlbGVtZW50U2l6ZSA9IGRhdGEuZWxlbWVudFNpemVJbkJ5dGVzOwogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2UoCiAgICAgICAgc3RhcnQsIGVuZCwgZGF0YS5sZW5ndGhJbkJ5dGVzIH4vIGVsZW1lbnRTaXplKTsKICAgIGludCBieXRlTGVuZ3RoID0gKGVuZCAtIHN0YXJ0KSAqIGVsZW1lbnRTaXplOwogICAgaWYgKGJ5dGVMZW5ndGggJSBieXRlc1BlckVsZW1lbnQgIT0gMCkgewogICAgICB0aHJvdyBBcmd1bWVudEVycm9yKCJUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHZpZXcgbXVzdCBiZSBhIG11bHRpcGxlIG9mICIgKwogICAgICAgICAgIiRieXRlc1BlckVsZW1lbnQiKTsKICAgIH0KICAgIHJldHVybiBkYXRhLmJ1ZmZlci5hc0Zsb2F0NjRMaXN0KGRhdGEub2Zmc2V0SW5CeXRlcyArIHN0YXJ0ICogZWxlbWVudFNpemUsCiAgICAgICAgYnl0ZUxlbmd0aCB+LyBieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIGJldHdlZW4gW3N0YXJ0XSBhbmQgW2VuZF0uCiAgICoKICAgKiBUaGUgbmV3IGxpc3QgaXMgYSBgRmxvYXQ2NExpc3RgIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIHRoaXMKICAgKiBsaXN0IGF0IHBvc2l0aW9ucyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gW3N0YXJ0XSBhbmQgbGVzcyB0aGFuIFtlbmRdIGluCiAgICogdGhlIHNhbWUgb3JkZXIgYXMgdGhleSBvY2N1ciBpbiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogdmFyIG51bWJlcnMgPSBGbG9hdDY0TGlzdC5mcm9tTGlzdChbMCwgMSwgMiwgMywgNF0pOwogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKSk7IC8vIFsxLCAyXQogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKS5ydW50aW1lVHlwZSk7IC8vIEZsb2F0NjRMaXN0CiAgICogYGBgCiAgICoKICAgKiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgW2xlbmd0aF0gb2YgdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxKSk7IC8vIFsxLCAyLCAzLCA0XQogICAqIGBgYAogICAqCiAgICogVGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9ucyBtdXN0IHNhdGlzZnkgdGhlIHJlbGF0aW9ucwogICAqIDAg4omkIGBzdGFydGAg4omkIGBlbmRgIOKJpCBgdGhpcy5sZW5ndGhgCiAgICogSWYgYGVuZGAgaXMgZXF1YWwgdG8gYHN0YXJ0YCwgdGhlbiB0aGUgcmV0dXJuZWQgbGlzdCBpcyBlbXB0eS4KICAgKi8KICBGbG9hdDY0TGlzdCBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKTsKCiAgc3RhdGljIGNvbnN0IGludCBieXRlc1BlckVsZW1lbnQgPSA4Owp9CgovKioKICogQSBmaXhlZC1sZW5ndGggbGlzdCBvZiBGbG9hdDMyeDQgbnVtYmVycyB0aGF0IGlzIHZpZXdhYmxlIGFzIGEKICogW1R5cGVkRGF0YV0uCiAqCiAqIEZvciBsb25nIGxpc3RzLCB0aGlzIGltcGxlbWVudGF0aW9uIHdpbGwgYmUgY29uc2lkZXJhYmx5IG1vcmUKICogc3BhY2UtIGFuZCB0aW1lLWVmZmljaWVudCB0aGFuIHRoZSBkZWZhdWx0IFtMaXN0XSBpbXBsZW1lbnRhdGlvbi4KICovCmFic3RyYWN0IGNsYXNzIEZsb2F0MzJ4NExpc3QgaW1wbGVtZW50cyBMaXN0PEZsb2F0MzJ4ND4sIFR5cGVkRGF0YSB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIFtGbG9hdDMyeDRMaXN0XSBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aCAoaW4gZWxlbWVudHMpLAogICAqIGFsbCBvZiB3aG9zZSBlbGVtZW50cyBhcmUgaW5pdGlhbGx5IHplcm8uCiAgICoKICAgKiBUaGUgbGlzdCBpcyBiYWNrZWQgYnkgYSBbQnl0ZUJ1ZmZlcl0gY29udGFpbmluZyBwcmVjaXNlbHkKICAgKiBbbGVuZ3RoXSB0aW1lcyAxNiBieXRlcy4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEZsb2F0MzJ4NExpc3QoaW50IGxlbmd0aCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbRmxvYXQzMng0TGlzdF0gd2l0aCB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIFtlbGVtZW50c10gbGlzdAogICAqIGFuZCBjb3BpZXMgb3ZlciB0aGUgZWxlbWVudHMuCiAgICoKICAgKiBUaGUgbGlzdCBpcyBiYWNrZWQgYnkgYSBbQnl0ZUJ1ZmZlcl0gY29udGFpbmluZyBwcmVjaXNlbHkKICAgKiBgZWxlbWVudHMubGVuZ3RoYCB0aW1lcyAxNiBieXRlcy4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEZsb2F0MzJ4NExpc3QuZnJvbUxpc3QoTGlzdDxGbG9hdDMyeDQ+IGVsZW1lbnRzKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtGbG9hdDMyeDRMaXN0XSBfdmlld18gb2YgdGhlIHNwZWNpZmllZCByZWdpb24gaW4gW2J1ZmZlcl0uCiAgICoKICAgKiBDaGFuZ2VzIGluIHRoZSBbRmxvYXQzMng0TGlzdF0gd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBieXRlCiAgICogYnVmZmVyIGFuZCB2aWNlIHZlcnNhLgogICAqIElmIHRoZSBbb2Zmc2V0SW5CeXRlc10gaW5kZXggb2YgdGhlIHJlZ2lvbiBpcyBub3Qgc3BlY2lmaWVkLAogICAqIGl0IGRlZmF1bHRzIHRvIHplcm8gKHRoZSBmaXJzdCBieXRlIGluIHRoZSBieXRlIGJ1ZmZlcikuCiAgICogSWYgdGhlIGxlbmd0aCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBgbnVsbGAsCiAgICogd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIHZpZXcgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIG9yIFtsZW5ndGhdIGFyZSBuZWdhdGl2ZSwgb3IKICAgKiBpZiBbb2Zmc2V0SW5CeXRlc10gKyAoW2xlbmd0aF0gKiBlbGVtZW50U2l6ZUluQnl0ZXMpIGlzIGdyZWF0ZXIgdGhhbgogICAqIHRoZSBsZW5ndGggb2YgW2J1ZmZlcl0uCiAgICoKICAgKiBUaHJvd3MgW0FyZ3VtZW50RXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBpcyBub3QgYSBtdWx0aXBsZSBvZgogICAqIFtieXRlc1BlckVsZW1lbnRdLgogICAqCiAgICogTm90ZSB0aGF0IHdoZW4gY3JlYXRpbmcgYSB2aWV3IGZyb20gYSBbVHlwZWREYXRhXSBsaXN0IG9yIGJ5dGUgZGF0YSwKICAgKiB0aGF0IGxpc3Qgb3IgYnl0ZSBkYXRhIG1heSBpdHNlbGYgYmUgYSB2aWV3IG9uIGEgbGFyZ2VyIGJ1ZmZlcgogICAqIHdpdGggYSBbVHlwZWREYXRhLm9mZnNldEluQnl0ZXNdIGdyZWF0ZXIgdGhhbiB6ZXJvLgogICAqIE1lcmVseSBkb2luZyBgRmxvYXQzMng0TGlzdC52aWV3KG90aGVyLmJ1ZmZlciwgMCwgY291bnQpYCBtYXkgbm90CiAgICogcG9pbnQgdG8gdGhlIGJ5dGVzIHlvdSBpbnRlbmRlZC4gSW5zdGVhZCB5b3UgbWF5IG5lZWQgdG8gZG86CiAgICogYGBgZGFydAogICAqIEZsb2F0MzJ4NExpc3QudmlldyhvdGhlci5idWZmZXIsIG90aGVyLm9mZnNldEluQnl0ZXMsIGNvdW50KQogICAqIGBgYAogICAqIEFsdGVybmF0aXZlbHksIHVzZSBbRmxvYXQzMng0TGlzdC5zdWJsaXN0Vmlld10KICAgKiB3aGljaCBpbmNsdWRlcyB0aGlzIGNvbXB1dGF0aW9uLgogICAqIGBgYGRhcnQKICAgKiBGbG9hdDMyeDRMaXN0LnN1Ymxpc3RWaWV3KG90aGVyLCAwLCBjb3VudCkKICAgKiBgYGAKICAgKiAoVGhlIHRoaXJkIGFyZ3VtZW50IGlzIGFuIGVuZCBpbmRleCByYXRoZXIgdGhhbiBhIGxlbmd0aCwgc28gaWYKICAgKiB5b3Ugc3RhcnQgZnJvbSBhIHBvc2l0aW9uIGdyZWF0ZXIgdGhhbiB6ZXJvLCB5b3UgbmVlZCBub3QKICAgKiByZWR1Y2UgdGhlIGNvdW50IGNvcnJlc3BvbmRpbmdseSkuCiAgICovCiAgZmFjdG9yeSBGbG9hdDMyeDRMaXN0LnZpZXcoQnl0ZUJ1ZmZlciBidWZmZXIsCiAgICAgIFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICByZXR1cm4gYnVmZmVyLmFzRmxvYXQzMng0TGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtGbG9hdDMyeDRMaXN0XSB2aWV3IG9uIGEgcmFuZ2Ugb2YgZWxlbWVudHMgb2YgW2RhdGFdLgogICAqCiAgICogQ3JlYXRlcyBhIHZpZXcgb24gdGhlIHJhbmdlIG9mIGBkYXRhLmJ1ZmZlcmAgd2hpY2ggY29ycmVzcG9uZHMKICAgKiB0byB0aGUgZWxlbWVudHMgb2YgW2RhdGFdIGZyb20gW3N0YXJ0XSB1bnRpbCBbZW5kXS4KICAgKiBJZiBbZGF0YV0gaXMgYSB0eXBlZCBkYXRhIGxpc3QsIGxpa2UgW1VpbnQxNkxpc3RdLCB0aGVuIHRoZSB2aWV3IGlzIG9uCiAgICogdGhlIGJ5dGVzIG9mIHRoZSBlbGVtZW50cyB3aXRoIGluZGljZXMgZnJvbSBbc3RhcnRdIHVudGlsIFtlbmRdLgogICAqIElmIFtkYXRhXSBpcyBhIFtCeXRlRGF0YV0sIGl0J3MgdHJlYXRlZCBsaWtlIGEgbGlzdCBvZiBieXRlcy4KICAgKgogICAqIElmIHByb3ZpZGVkLCBbc3RhcnRdIGFuZCBbZW5kXSBtdXN0IHNhdGlzZnkKICAgKgogICAqIDAgJmxlOyBgc3RhcnRgICZsZTsgYGVuZGAgJmxlOyAqZWxlbWVudENvdW50KgogICAqCiAgICogd2hlcmUgKmVsZW1lbnRDb3VudCogaXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBbZGF0YV0sIHdoaWNoCiAgICogaXMgdGhlIHNhbWUgYXMgdGhlIFtMaXN0Lmxlbmd0aF0gb2YgYSB0eXBlZCBkYXRhIGxpc3QuCiAgICoKICAgKiBJZiBvbWl0dGVkLCBbc3RhcnRdIGRlZmF1bHRzIHRvIHplcm8gYW5kIFtlbmRdIHRvICplbGVtZW50Q291bnQqLgogICAqCiAgICogVGhlIHN0YXJ0IGFuZCBlbmQgaW5kaWNlcyBvZiB0aGUgcmFuZ2Ugb2YgYnl0ZXMgYmVpbmcgdmlld2VkIG11c3QgYmUKICAgKiBtdWx0aXBsZXMgb2Ygc2l4dGVlbi4KICAgKi8KICBAU2luY2UoIjIuOCIpCiAgZmFjdG9yeSBGbG9hdDMyeDRMaXN0LnN1Ymxpc3RWaWV3KFR5cGVkRGF0YSBkYXRhLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIGludCBlbGVtZW50U2l6ZSA9IGRhdGEuZWxlbWVudFNpemVJbkJ5dGVzOwogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2UoCiAgICAgICAgc3RhcnQsIGVuZCwgZGF0YS5sZW5ndGhJbkJ5dGVzIH4vIGVsZW1lbnRTaXplKTsKICAgIGludCBieXRlTGVuZ3RoID0gKGVuZCAtIHN0YXJ0KSAqIGVsZW1lbnRTaXplOwogICAgaWYgKGJ5dGVMZW5ndGggJSBieXRlc1BlckVsZW1lbnQgIT0gMCkgewogICAgICB0aHJvdyBBcmd1bWVudEVycm9yKCJUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHZpZXcgbXVzdCBiZSBhIG11bHRpcGxlIG9mICIgKwogICAgICAgICAgIiRieXRlc1BlckVsZW1lbnQiKTsKICAgIH0KICAgIHJldHVybiBkYXRhLmJ1ZmZlci5hc0Zsb2F0MzJ4NExpc3QoZGF0YS5vZmZzZXRJbkJ5dGVzICsgc3RhcnQgKiBlbGVtZW50U2l6ZSwKICAgICAgICBieXRlTGVuZ3RoIH4vIGJ5dGVzUGVyRWxlbWVudCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoaXMgbGlzdCBhbmQgW290aGVyXS4KICAgKgogICAqIElmIFtvdGhlcl0gaXMgYWxzbyBhIFtGbG9hdDMyeDRMaXN0XSwgdGhlIHJlc3VsdCBpcyBhIG5ldyBbRmxvYXQzMng0TGlzdF0sCiAgICogb3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgYSBub3JtYWwgZ3Jvd2FibGUgYExpc3Q8RmxvYXQzMng0PmAuCiAgICovCiAgTGlzdDxGbG9hdDMyeDQ+IG9wZXJhdG9yICsoTGlzdDxGbG9hdDMyeDQ+IG90aGVyKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIGJldHdlZW4gW3N0YXJ0XSBhbmQgW2VuZF0uCiAgICoKICAgKiBUaGUgbmV3IGxpc3QgaXMgYSBgRmxvYXQzMng0TGlzdGAgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcwogICAqIGxpc3QgYXQgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbc3RhcnRdIGFuZCBsZXNzIHRoYW4gW2VuZF0gaW4KICAgKiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IG9jY3VyIGluIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiB2YXIgbnVtYmVycyA9IEZsb2F0MzJ4NExpc3QuZnJvbUxpc3QoWzAsIDEsIDIsIDMsIDRdKTsKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykpOyAvLyBbMSwgMl0KICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykucnVudGltZVR5cGUpOyAvLyBGbG9hdDMyeDRMaXN0CiAgICogYGBgCiAgICoKICAgKiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgW2xlbmd0aF0gb2YgdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxKSk7IC8vIFsxLCAyLCAzLCA0XQogICAqIGBgYAogICAqCiAgICogVGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9ucyBtdXN0IHNhdGlzZnkgdGhlIHJlbGF0aW9ucwogICAqIDAg4omkIGBzdGFydGAg4omkIGBlbmRgIOKJpCBgdGhpcy5sZW5ndGhgCiAgICogSWYgYGVuZGAgaXMgZXF1YWwgdG8gYHN0YXJ0YCwgdGhlbiB0aGUgcmV0dXJuZWQgbGlzdCBpcyBlbXB0eS4KICAgKi8KICBGbG9hdDMyeDRMaXN0IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pOwoKICBzdGF0aWMgY29uc3QgaW50IGJ5dGVzUGVyRWxlbWVudCA9IDE2Owp9CgovKioKICogQSBmaXhlZC1sZW5ndGggbGlzdCBvZiBJbnQzMng0IG51bWJlcnMgdGhhdCBpcyB2aWV3YWJsZSBhcyBhCiAqIFtUeXBlZERhdGFdLgogKgogKiBGb3IgbG9uZyBsaXN0cywgdGhpcyBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIGNvbnNpZGVyYWJseSBtb3JlCiAqIHNwYWNlLSBhbmQgdGltZS1lZmZpY2llbnQgdGhhbiB0aGUgZGVmYXVsdCBbTGlzdF0gaW1wbGVtZW50YXRpb24uCiAqLwphYnN0cmFjdCBjbGFzcyBJbnQzMng0TGlzdCBpbXBsZW1lbnRzIExpc3Q8SW50MzJ4ND4sIFR5cGVkRGF0YSB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIFtJbnQzMng0TGlzdF0gb2YgdGhlIHNwZWNpZmllZCBsZW5ndGggKGluIGVsZW1lbnRzKSwKICAgKiBhbGwgb2Ygd2hvc2UgZWxlbWVudHMgYXJlIGluaXRpYWxseSB6ZXJvLgogICAqCiAgICogVGhlIGxpc3QgaXMgYmFja2VkIGJ5IGEgW0J5dGVCdWZmZXJdIGNvbnRhaW5pbmcgcHJlY2lzZWx5CiAgICogW2xlbmd0aF0gdGltZXMgMTYgYnl0ZXMuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBJbnQzMng0TGlzdChpbnQgbGVuZ3RoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtJbnQzMng0TGlzdF0gd2l0aCB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIFtlbGVtZW50c10gbGlzdAogICAqIGFuZCBjb3BpZXMgb3ZlciB0aGUgZWxlbWVudHMuCiAgICoKICAgKiBUaGUgbGlzdCBpcyBiYWNrZWQgYnkgYSBbQnl0ZUJ1ZmZlcl0gY29udGFpbmluZyBwcmVjaXNlbHkKICAgKiBgZWxlbWVudHMubGVuZ3RoYCB0aW1lcyAxNiBieXRlcy4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEludDMyeDRMaXN0LmZyb21MaXN0KExpc3Q8SW50MzJ4ND4gZWxlbWVudHMpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0ludDMyeDRMaXN0XSBfdmlld18gb2YgdGhlIHNwZWNpZmllZCByZWdpb24gaW4gW2J1ZmZlcl0uCiAgICoKICAgKiBDaGFuZ2VzIGluIHRoZSBbSW50MzJ4NExpc3RdIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgYnl0ZQogICAqIGJ1ZmZlciBhbmQgdmljZSB2ZXJzYS4KICAgKiBJZiB0aGUgW29mZnNldEluQnl0ZXNdIGluZGV4IG9mIHRoZSByZWdpb24gaXMgbm90IHNwZWNpZmllZCwKICAgKiBpdCBkZWZhdWx0cyB0byB6ZXJvICh0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgYnl0ZSBidWZmZXIpLgogICAqIElmIHRoZSBsZW5ndGggaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gYG51bGxgLAogICAqIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSB2aWV3IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBvciBbbGVuZ3RoXSBhcmUgbmVnYXRpdmUsIG9yCiAgICogaWYgW29mZnNldEluQnl0ZXNdICsgKFtsZW5ndGhdICogZWxlbWVudFNpemVJbkJ5dGVzKSBpcyBncmVhdGVyIHRoYW4KICAgKiB0aGUgbGVuZ3RoIG9mIFtidWZmZXJdLgogICAqCiAgICogVGhyb3dzIFtBcmd1bWVudEVycm9yXSBpZiBbb2Zmc2V0SW5CeXRlc10gaXMgbm90IGEgbXVsdGlwbGUgb2YKICAgKiBbYnl0ZXNQZXJFbGVtZW50XS4KICAgKgogICAqIE5vdGUgdGhhdCB3aGVuIGNyZWF0aW5nIGEgdmlldyBmcm9tIGEgW1R5cGVkRGF0YV0gbGlzdCBvciBieXRlIGRhdGEsCiAgICogdGhhdCBsaXN0IG9yIGJ5dGUgZGF0YSBtYXkgaXRzZWxmIGJlIGEgdmlldyBvbiBhIGxhcmdlciBidWZmZXIKICAgKiB3aXRoIGEgW1R5cGVkRGF0YS5vZmZzZXRJbkJ5dGVzXSBncmVhdGVyIHRoYW4gemVyby4KICAgKiBNZXJlbHkgZG9pbmcgYEludDMyeDRMaXN0LnZpZXcob3RoZXIuYnVmZmVyLCAwLCBjb3VudClgIG1heSBub3QKICAgKiBwb2ludCB0byB0aGUgYnl0ZXMgeW91IGludGVuZGVkLiBJbnN0ZWFkIHlvdSBtYXkgbmVlZCB0byBkbzoKICAgKiBgYGBkYXJ0CiAgICogSW50MzJ4NExpc3QudmlldyhvdGhlci5idWZmZXIsIG90aGVyLm9mZnNldEluQnl0ZXMsIGNvdW50KQogICAqIGBgYAogICAqIEFsdGVybmF0aXZlbHksIHVzZSBbSW50MzJ4NExpc3Quc3VibGlzdFZpZXddCiAgICogd2hpY2ggaW5jbHVkZXMgdGhpcyBjb21wdXRhdGlvbi4KICAgKiBgYGBkYXJ0CiAgICogSW50MzJ4NExpc3Quc3VibGlzdFZpZXcob3RoZXIsIDAsIGNvdW50KQogICAqIGBgYAogICAqIChUaGUgdGhpcmQgYXJndW1lbnQgaXMgYW4gZW5kIGluZGV4IHJhdGhlciB0aGFuIGEgbGVuZ3RoLCBzbyBpZgogICAqIHlvdSBzdGFydCBmcm9tIGEgcG9zaXRpb24gZ3JlYXRlciB0aGFuIHplcm8sIHlvdSBuZWVkIG5vdAogICAqIHJlZHVjZSB0aGUgY291bnQgY29ycmVzcG9uZGluZ2x5KS4KICAgKi8KICBmYWN0b3J5IEludDMyeDRMaXN0LnZpZXcoQnl0ZUJ1ZmZlciBidWZmZXIsCiAgICAgIFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICByZXR1cm4gYnVmZmVyLmFzSW50MzJ4NExpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYW4gW0ludDMyeDRMaXN0XSB2aWV3IG9uIGEgcmFuZ2Ugb2YgZWxlbWVudHMgb2YgW2RhdGFdLgogICAqCiAgICogQ3JlYXRlcyBhIHZpZXcgb24gdGhlIHJhbmdlIG9mIGBkYXRhLmJ1ZmZlcmAgd2hpY2ggY29ycmVzcG9uZHMKICAgKiB0byB0aGUgZWxlbWVudHMgb2YgW2RhdGFdIGZyb20gW3N0YXJ0XSB1bnRpbCBbZW5kXS4KICAgKiBJZiBbZGF0YV0gaXMgYSB0eXBlZCBkYXRhIGxpc3QsIGxpa2UgW1VpbnQxNkxpc3RdLCB0aGVuIHRoZSB2aWV3IGlzIG9uCiAgICogdGhlIGJ5dGVzIG9mIHRoZSBlbGVtZW50cyB3aXRoIGluZGljZXMgZnJvbSBbc3RhcnRdIHVudGlsIFtlbmRdLgogICAqIElmIFtkYXRhXSBpcyBhIFtCeXRlRGF0YV0sIGl0J3MgdHJlYXRlZCBsaWtlIGEgbGlzdCBvZiBieXRlcy4KICAgKgogICAqIElmIHByb3ZpZGVkLCBbc3RhcnRdIGFuZCBbZW5kXSBtdXN0IHNhdGlzZnkKICAgKgogICAqIDAgJmxlOyBgc3RhcnRgICZsZTsgYGVuZGAgJmxlOyAqZWxlbWVudENvdW50KgogICAqCiAgICogd2hlcmUgKmVsZW1lbnRDb3VudCogaXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBbZGF0YV0sIHdoaWNoCiAgICogaXMgdGhlIHNhbWUgYXMgdGhlIFtMaXN0Lmxlbmd0aF0gb2YgYSB0eXBlZCBkYXRhIGxpc3QuCiAgICoKICAgKiBJZiBvbWl0dGVkLCBbc3RhcnRdIGRlZmF1bHRzIHRvIHplcm8gYW5kIFtlbmRdIHRvICplbGVtZW50Q291bnQqLgogICAqCiAgICogVGhlIHN0YXJ0IGFuZCBlbmQgaW5kaWNlcyBvZiB0aGUgcmFuZ2Ugb2YgYnl0ZXMgYmVpbmcgdmlld2VkIG11c3QgYmUKICAgKiBtdWx0aXBsZXMgb2Ygc2l4dGVlbi4KICAgKi8KICBAU2luY2UoIjIuOCIpCiAgZmFjdG9yeSBJbnQzMng0TGlzdC5zdWJsaXN0VmlldyhUeXBlZERhdGEgZGF0YSwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgICBpbnQgZWxlbWVudFNpemUgPSBkYXRhLmVsZW1lbnRTaXplSW5CeXRlczsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKAogICAgICAgIHN0YXJ0LCBlbmQsIGRhdGEubGVuZ3RoSW5CeXRlcyB+LyBlbGVtZW50U2l6ZSk7CiAgICBpbnQgYnl0ZUxlbmd0aCA9IChlbmQgLSBzdGFydCkgKiBlbGVtZW50U2l6ZTsKICAgIGlmIChieXRlTGVuZ3RoICUgYnl0ZXNQZXJFbGVtZW50ICE9IDApIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigiVGhlIG51bWJlciBvZiBieXRlcyB0byB2aWV3IG11c3QgYmUgYSBtdWx0aXBsZSBvZiAiICsKICAgICAgICAgICIkYnl0ZXNQZXJFbGVtZW50Iik7CiAgICB9CiAgICByZXR1cm4gZGF0YS5idWZmZXIuYXNJbnQzMng0TGlzdChkYXRhLm9mZnNldEluQnl0ZXMgKyBzdGFydCAqIGVsZW1lbnRTaXplLAogICAgICAgIGJ5dGVMZW5ndGggfi8gYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhpcyBsaXN0IGFuZCBbb3RoZXJdLgogICAqCiAgICogSWYgW290aGVyXSBpcyBhbHNvIGEgW0ludDMyeDRMaXN0XSwgdGhlIHJlc3VsdCBpcyBhIG5ldyBbSW50MzJ4NExpc3RdLAogICAqIG90aGVyd2lzZSB0aGUgcmVzdWx0IGlzIGEgbm9ybWFsIGdyb3dhYmxlIGBMaXN0PEludDMyeDQ+YC4KICAgKi8KICBMaXN0PEludDMyeDQ+IG9wZXJhdG9yICsoTGlzdDxJbnQzMng0PiBvdGhlcik7CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBiZXR3ZWVuIFtzdGFydF0gYW5kIFtlbmRdLgogICAqCiAgICogVGhlIG5ldyBsaXN0IGlzIGFuIGBJbnQzMng0bGlzdGAgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcwogICAqIGxpc3QgYXQgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbc3RhcnRdIGFuZCBsZXNzIHRoYW4gW2VuZF0gaW4KICAgKiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IG9jY3VyIGluIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiB2YXIgbnVtYmVycyA9IEludDMyeDRsaXN0LmZyb21MaXN0KFswLCAxLCAyLCAzLCA0XSk7CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpKTsgLy8gWzEsIDJdCiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpLnJ1bnRpbWVUeXBlKTsgLy8gSW50MzJ4NGxpc3QKICAgKiBgYGAKICAgKgogICAqIElmIFtlbmRdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRoZSBbbGVuZ3RoXSBvZiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEpKTsgLy8gWzEsIDIsIDMsIDRdCiAgICogYGBgCiAgICoKICAgKiBUaGUgYHN0YXJ0YCBhbmQgYGVuZGAgcG9zaXRpb25zIG11c3Qgc2F0aXNmeSB0aGUgcmVsYXRpb25zCiAgICogMCDiiaQgYHN0YXJ0YCDiiaQgYGVuZGAg4omkIGB0aGlzLmxlbmd0aGAKICAgKiBJZiBgZW5kYCBpcyBlcXVhbCB0byBgc3RhcnRgLCB0aGVuIHRoZSByZXR1cm5lZCBsaXN0IGlzIGVtcHR5LgogICAqLwogIEludDMyeDRMaXN0IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pOwoKICBzdGF0aWMgY29uc3QgaW50IGJ5dGVzUGVyRWxlbWVudCA9IDE2Owp9CgovKioKICogQSBmaXhlZC1sZW5ndGggbGlzdCBvZiBGbG9hdDY0eDIgbnVtYmVycyB0aGF0IGlzIHZpZXdhYmxlIGFzIGEKICogW1R5cGVkRGF0YV0uCiAqCiAqIEZvciBsb25nIGxpc3RzLCB0aGlzIGltcGxlbWVudGF0aW9uIHdpbGwgYmUgY29uc2lkZXJhYmx5IG1vcmUKICogc3BhY2UtIGFuZCB0aW1lLWVmZmljaWVudCB0aGFuIHRoZSBkZWZhdWx0IFtMaXN0XSBpbXBsZW1lbnRhdGlvbi4KICovCmFic3RyYWN0IGNsYXNzIEZsb2F0NjR4Mkxpc3QgaW1wbGVtZW50cyBMaXN0PEZsb2F0NjR4Mj4sIFR5cGVkRGF0YSB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIFtGbG9hdDY0eDJMaXN0XSBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aCAoaW4gZWxlbWVudHMpLAogICAqIGFsbCBvZiB3aG9zZSBlbGVtZW50cyBoYXZlIGFsbCBsYW5lcyBzZXQgdG8gemVyby4KICAgKgogICAqIFRoZSBsaXN0IGlzIGJhY2tlZCBieSBhIFtCeXRlQnVmZmVyXSBjb250YWluaW5nIHByZWNpc2VseQogICAqIFtsZW5ndGhdIHRpbWVzIDE2IGJ5dGVzLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQ2NHgyTGlzdChpbnQgbGVuZ3RoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtGbG9hdDY0eDJMaXN0XSB3aXRoIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgW2VsZW1lbnRzXSBsaXN0CiAgICogYW5kIGNvcGllcyBvdmVyIHRoZSBlbGVtZW50cy4KICAgKgogICAqIFRoZSBsaXN0IGlzIGJhY2tlZCBieSBhIFtCeXRlQnVmZmVyXSBjb250YWluaW5nIHByZWNpc2VseQogICAqIGBlbGVtZW50cy5sZW5ndGhgIHRpbWVzIDE2IGJ5dGVzLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQ2NHgyTGlzdC5mcm9tTGlzdChMaXN0PEZsb2F0NjR4Mj4gZWxlbWVudHMpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoaXMgbGlzdCBhbmQgW290aGVyXS4KICAgKgogICAqIElmIFtvdGhlcl0gaXMgYWxzbyBhIFtGbG9hdDY0eDJMaXN0XSwgdGhlIHJlc3VsdCBpcyBhIG5ldyBbRmxvYXQ2NHgyTGlzdF0sCiAgICogb3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgYSBub3JtYWwgZ3Jvd2FibGUgYExpc3Q8RmxvYXQ2NHgyPmAuCiAgICovCiAgTGlzdDxGbG9hdDY0eDI+IG9wZXJhdG9yICsoTGlzdDxGbG9hdDY0eDI+IG90aGVyKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtGbG9hdDY0eDJMaXN0XSBfdmlld18gb2YgdGhlIHNwZWNpZmllZCByZWdpb24gaW4gW2J1ZmZlcl0uCiAgICoKICAgKiBDaGFuZ2VzIGluIHRoZSBbRmxvYXQ2NHgyTGlzdF0gd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBieXRlCiAgICogYnVmZmVyIGFuZCB2aWNlIHZlcnNhLgogICAqIElmIHRoZSBbb2Zmc2V0SW5CeXRlc10gaW5kZXggb2YgdGhlIHJlZ2lvbiBpcyBub3Qgc3BlY2lmaWVkLAogICAqIGl0IGRlZmF1bHRzIHRvIHplcm8gKHRoZSBmaXJzdCBieXRlIGluIHRoZSBieXRlIGJ1ZmZlcikuCiAgICogSWYgdGhlIGxlbmd0aCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBgbnVsbGAsCiAgICogd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIHZpZXcgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIG9yIFtsZW5ndGhdIGFyZSBuZWdhdGl2ZSwgb3IKICAgKiBpZiBbb2Zmc2V0SW5CeXRlc10gKyAoW2xlbmd0aF0gKiBlbGVtZW50U2l6ZUluQnl0ZXMpIGlzIGdyZWF0ZXIgdGhhbgogICAqIHRoZSBsZW5ndGggb2YgW2J1ZmZlcl0uCiAgICoKICAgKiBUaHJvd3MgW0FyZ3VtZW50RXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBpcyBub3QgYSBtdWx0aXBsZSBvZgogICAqIFtieXRlc1BlckVsZW1lbnRdLgogICAqCiAgICogTm90ZSB0aGF0IHdoZW4gY3JlYXRpbmcgYSB2aWV3IGZyb20gYSBbVHlwZWREYXRhXSBsaXN0IG9yIGJ5dGUgZGF0YSwKICAgKiB0aGF0IGxpc3Qgb3IgYnl0ZSBkYXRhIG1heSBpdHNlbGYgYmUgYSB2aWV3IG9uIGEgbGFyZ2VyIGJ1ZmZlcgogICAqIHdpdGggYSBbVHlwZWREYXRhLm9mZnNldEluQnl0ZXNdIGdyZWF0ZXIgdGhhbiB6ZXJvLgogICAqIE1lcmVseSBkb2luZyBgRmxvYXQ2NHgyTGlzdC52aWV3KG90aGVyLmJ1ZmZlciwgMCwgY291bnQpYCBtYXkgbm90CiAgICogcG9pbnQgdG8gdGhlIGJ5dGVzIHlvdSBpbnRlbmRlZC4gSW5zdGVhZCB5b3UgbWF5IG5lZWQgdG8gZG86CiAgICogYGBgZGFydAogICAqIEZsb2F0NjR4Mkxpc3QudmlldyhvdGhlci5idWZmZXIsIG90aGVyLm9mZnNldEluQnl0ZXMsIGNvdW50KQogICAqIGBgYAogICAqIEFsdGVybmF0aXZlbHksIHVzZSBbRmxvYXQ2NHgyTGlzdC5zdWJsaXN0Vmlld10KICAgKiB3aGljaCBpbmNsdWRlcyB0aGlzIGNvbXB1dGF0aW9uLgogICAqIGBgYGRhcnQKICAgKiBGbG9hdDY0eDJMaXN0LnN1Ymxpc3RWaWV3KG90aGVyLCAwLCBjb3VudCkKICAgKiBgYGAKICAgKiAoVGhlIHRoaXJkIGFyZ3VtZW50IGlzIGFuIGVuZCBpbmRleCByYXRoZXIgdGhhbiBhIGxlbmd0aCwgc28gaWYKICAgKiB5b3Ugc3RhcnQgZnJvbSBhIHBvc2l0aW9uIGdyZWF0ZXIgdGhhbiB6ZXJvLCB5b3UgbmVlZCBub3QKICAgKiByZWR1Y2UgdGhlIGNvdW50IGNvcnJlc3BvbmRpbmdseSkuCiAgICovCiAgZmFjdG9yeSBGbG9hdDY0eDJMaXN0LnZpZXcoQnl0ZUJ1ZmZlciBidWZmZXIsCiAgICAgIFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICByZXR1cm4gYnVmZmVyLmFzRmxvYXQ2NHgyTGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBbRmxvYXQ2NHgyTGlzdF0gdmlldyBvbiBhIHJhbmdlIG9mIGVsZW1lbnRzIG9mIFtkYXRhXS4KICAgKgogICAqIENyZWF0ZXMgYSB2aWV3IG9uIHRoZSByYW5nZSBvZiBgZGF0YS5idWZmZXJgIHdoaWNoIGNvcnJlc3BvbmRzCiAgICogdG8gdGhlIGVsZW1lbnRzIG9mIFtkYXRhXSBmcm9tIFtzdGFydF0gdW50aWwgW2VuZF0uCiAgICogSWYgW2RhdGFdIGlzIGEgdHlwZWQgZGF0YSBsaXN0LCBsaWtlIFtVaW50MTZMaXN0XSwgdGhlbiB0aGUgdmlldyBpcyBvbgogICAqIHRoZSBieXRlcyBvZiB0aGUgZWxlbWVudHMgd2l0aCBpbmRpY2VzIGZyb20gW3N0YXJ0XSB1bnRpbCBbZW5kXS4KICAgKiBJZiBbZGF0YV0gaXMgYSBbQnl0ZURhdGFdLCBpdCdzIHRyZWF0ZWQgbGlrZSBhIGxpc3Qgb2YgYnl0ZXMuCiAgICoKICAgKiBJZiBwcm92aWRlZCwgW3N0YXJ0XSBhbmQgW2VuZF0gbXVzdCBzYXRpc2Z5CiAgICoKICAgKiAwICZsZTsgYHN0YXJ0YCAmbGU7IGBlbmRgICZsZTsgKmVsZW1lbnRDb3VudCoKICAgKgogICAqIHdoZXJlICplbGVtZW50Q291bnQqIGlzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gW2RhdGFdLCB3aGljaAogICAqIGlzIHRoZSBzYW1lIGFzIHRoZSBbTGlzdC5sZW5ndGhdIG9mIGEgdHlwZWQgZGF0YSBsaXN0LgogICAqCiAgICogSWYgb21pdHRlZCwgW3N0YXJ0XSBkZWZhdWx0cyB0byB6ZXJvIGFuZCBbZW5kXSB0byAqZWxlbWVudENvdW50Ki4KICAgKgogICAqIFRoZSBzdGFydCBhbmQgZW5kIGluZGljZXMgb2YgdGhlIHJhbmdlIG9mIGJ5dGVzIGJlaW5nIHZpZXdlZCBtdXN0IGJlCiAgICogbXVsdGlwbGVzIG9mIHNpeHRlZW4uCiAgICovCiAgQFNpbmNlKCIyLjgiKQogIGZhY3RvcnkgRmxvYXQ2NHgyTGlzdC5zdWJsaXN0VmlldyhUeXBlZERhdGEgZGF0YSwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgICBpbnQgZWxlbWVudFNpemUgPSBkYXRhLmVsZW1lbnRTaXplSW5CeXRlczsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKAogICAgICAgIHN0YXJ0LCBlbmQsIGRhdGEubGVuZ3RoSW5CeXRlcyB+LyBlbGVtZW50U2l6ZSk7CiAgICBpbnQgYnl0ZUxlbmd0aCA9IChlbmQgLSBzdGFydCkgKiBlbGVtZW50U2l6ZTsKICAgIGlmIChieXRlTGVuZ3RoICUgYnl0ZXNQZXJFbGVtZW50ICE9IDApIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigiVGhlIG51bWJlciBvZiBieXRlcyB0byB2aWV3IG11c3QgYmUgYSBtdWx0aXBsZSBvZiAiICsKICAgICAgICAgICIkYnl0ZXNQZXJFbGVtZW50Iik7CiAgICB9CiAgICByZXR1cm4gZGF0YS5idWZmZXIuYXNGbG9hdDY0eDJMaXN0KGRhdGEub2Zmc2V0SW5CeXRlcyArIHN0YXJ0ICogZWxlbWVudFNpemUsCiAgICAgICAgYnl0ZUxlbmd0aCB+LyBieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIGJldHdlZW4gW3N0YXJ0XSBhbmQgW2VuZF0uCiAgICoKICAgKiBUaGUgbmV3IGxpc3QgaXMgYSBgRmxvYXQ2NHgyTGlzdGAgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcwogICAqIGxpc3QgYXQgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbc3RhcnRdIGFuZCBsZXNzIHRoYW4gW2VuZF0gaW4KICAgKiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IG9jY3VyIGluIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiB2YXIgbnVtYmVycyA9IEZsb2F0NjR4Mkxpc3QuZnJvbUxpc3QoWzAsIDEsIDIsIDMsIDRdKTsKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykpOyAvLyBbMSwgMl0KICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykucnVudGltZVR5cGUpOyAvLyBGbG9hdDY0eDJMaXN0CiAgICogYGBgCiAgICoKICAgKiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgW2xlbmd0aF0gb2YgdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxKSk7IC8vIFsxLCAyLCAzLCA0XQogICAqIGBgYAogICAqCiAgICogVGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9ucyBtdXN0IHNhdGlzZnkgdGhlIHJlbGF0aW9ucwogICAqIDAg4omkIGBzdGFydGAg4omkIGBlbmRgIOKJpCBgdGhpcy5sZW5ndGhgCiAgICogSWYgYGVuZGAgaXMgZXF1YWwgdG8gYHN0YXJ0YCwgdGhlbiB0aGUgcmV0dXJuZWQgbGlzdCBpcyBlbXB0eS4KICAgKi8KICBGbG9hdDY0eDJMaXN0IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pOwoKICBzdGF0aWMgY29uc3QgaW50IGJ5dGVzUGVyRWxlbWVudCA9IDE2Owp9CgovKioKICogRmxvYXQzMng0IGltbXV0YWJsZSB2YWx1ZSB0eXBlIGFuZCBvcGVyYXRpb25zLgogKgogKiBGbG9hdDMyeDQgc3RvcmVzIDQgMzItYml0IGZsb2F0aW5nIHBvaW50IHZhbHVlcyBpbiAibGFuZXMiLgogKiBUaGUgbGFuZXMgYXJlICJ4IiwgInkiLCAieiIsIGFuZCAidyIgcmVzcGVjdGl2ZWx5LgogKi8KYWJzdHJhY3QgY2xhc3MgRmxvYXQzMng0IHsKICBleHRlcm5hbCBmYWN0b3J5IEZsb2F0MzJ4NChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6LCBkb3VibGUgdyk7CiAgZXh0ZXJuYWwgZmFjdG9yeSBGbG9hdDMyeDQuc3BsYXQoZG91YmxlIHYpOwogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQzMng0Lnplcm8oKTsKICBleHRlcm5hbCBmYWN0b3J5IEZsb2F0MzJ4NC5mcm9tSW50MzJ4NEJpdHMoSW50MzJ4NCB4KTsKCiAgLy8vIFNldHMgdGhlIHggYW5kIHkgbGFuZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSB2YWx1ZXMgaW4gW3ZdIGFuZCBzZXRzIHRoZSB6CiAgLy8vIGFuZCB3IGxhbmVzIHRvIDAuMC4KICBleHRlcm5hbCBmYWN0b3J5IEZsb2F0MzJ4NC5mcm9tRmxvYXQ2NHgyKEZsb2F0NjR4MiB2KTsKCiAgLy8vIEFkZGl0aW9uIG9wZXJhdG9yLgogIEZsb2F0MzJ4NCBvcGVyYXRvciArKEZsb2F0MzJ4NCBvdGhlcik7CgogIC8vLyBOZWdhdGUgb3BlcmF0b3IuCiAgRmxvYXQzMng0IG9wZXJhdG9yIC0oKTsKCiAgLy8vIFN1YnRyYWN0aW9uIG9wZXJhdG9yLgogIEZsb2F0MzJ4NCBvcGVyYXRvciAtKEZsb2F0MzJ4NCBvdGhlcik7CgogIC8vLyBNdWx0aXBsaWNhdGlvbiBvcGVyYXRvci4KICBGbG9hdDMyeDQgb3BlcmF0b3IgKihGbG9hdDMyeDQgb3RoZXIpOwoKICAvLy8gRGl2aXNpb24gb3BlcmF0b3IuCiAgRmxvYXQzMng0IG9wZXJhdG9yIC8oRmxvYXQzMng0IG90aGVyKTsKCiAgLy8vIFJlbGF0aW9uYWwgbGVzcyB0aGFuLgogIEludDMyeDQgbGVzc1RoYW4oRmxvYXQzMng0IG90aGVyKTsKCiAgLy8vIFJlbGF0aW9uYWwgbGVzcyB0aGFuIG9yIGVxdWFsLgogIEludDMyeDQgbGVzc1RoYW5PckVxdWFsKEZsb2F0MzJ4NCBvdGhlcik7CgogIC8vLyBSZWxhdGlvbmFsIGdyZWF0ZXIgdGhhbi4KICBJbnQzMng0IGdyZWF0ZXJUaGFuKEZsb2F0MzJ4NCBvdGhlcik7CgogIC8vLyBSZWxhdGlvbmFsIGdyZWF0ZXIgdGhhbiBvciBlcXVhbC4KICBJbnQzMng0IGdyZWF0ZXJUaGFuT3JFcXVhbChGbG9hdDMyeDQgb3RoZXIpOwoKICAvLy8gUmVsYXRpb25hbCBlcXVhbC4KICBJbnQzMng0IGVxdWFsKEZsb2F0MzJ4NCBvdGhlcik7CgogIC8vLyBSZWxhdGlvbmFsIG5vdC1lcXVhbC4KICBJbnQzMng0IG5vdEVxdWFsKEZsb2F0MzJ4NCBvdGhlcik7CgogIC8vLyBSZXR1cm5zIGEgY29weSBvZiBbdGhpc10gZWFjaCBsYW5lIGJlaW5nIHNjYWxlZCBieSBbc10uCiAgLy8vIEVxdWl2YWxlbnQgdG8gdGhpcyAqIG5ldyBGbG9hdDMyeDQuc3BsYXQocykKICBGbG9hdDMyeDQgc2NhbGUoZG91YmxlIHMpOwoKICAvLy8gUmV0dXJucyB0aGUgbGFuZS13aXNlIGFic29sdXRlIHZhbHVlIG9mIHRoaXMgW0Zsb2F0MzJ4NF0uCiAgRmxvYXQzMng0IGFicygpOwoKICAvLy8gTGFuZS13aXNlIGNsYW1wIFt0aGlzXSB0byBiZSBpbiB0aGUgcmFuZ2UgW2xvd2VyTGltaXRdLVt1cHBlckxpbWl0XS4KICBGbG9hdDMyeDQgY2xhbXAoRmxvYXQzMng0IGxvd2VyTGltaXQsIEZsb2F0MzJ4NCB1cHBlckxpbWl0KTsKCiAgLy8vIEV4dHJhY3RlZCB4IHZhbHVlLgogIGRvdWJsZSBnZXQgeDsKCiAgLy8vIEV4dHJhY3RlZCB5IHZhbHVlLgogIGRvdWJsZSBnZXQgeTsKCiAgLy8vIEV4dHJhY3RlZCB6IHZhbHVlLgogIGRvdWJsZSBnZXQgejsKCiAgLy8vIEV4dHJhY3RlZCB3IHZhbHVlLgogIGRvdWJsZSBnZXQgdzsKCiAgLy8vIEV4dHJhY3QgdGhlIHNpZ24gYml0cyBmcm9tIGVhY2ggbGFuZSByZXR1cm4gdGhlbSBpbiB0aGUgZmlyc3QgNCBiaXRzLgogIC8vLyAieCIgbGFuZSBpcyBiaXQgMC4KICAvLy8gInkiIGxhbmUgaXMgYml0IDEuCiAgLy8vICJ6IiBsYW5lIGlzIGJpdCAyLgogIC8vLyAidyIgbGFuZSBpcyBiaXQgMy4KICBpbnQgZ2V0IHNpZ25NYXNrOwoKICAvLy8gTWFzayBwYXNzZWQgdG8gW3NodWZmbGVdIG9yIFtzaHVmZmxlTWl4XS4KICBzdGF0aWMgY29uc3QgaW50IHh4eHggPSAweDA7CiAgc3RhdGljIGNvbnN0IGludCB4eHh5ID0gMHg0MDsKICBzdGF0aWMgY29uc3QgaW50IHh4eHogPSAweDgwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh4dyA9IDB4QzA7CiAgc3RhdGljIGNvbnN0IGludCB4eHl4ID0gMHgxMDsKICBzdGF0aWMgY29uc3QgaW50IHh4eXkgPSAweDUwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh5eiA9IDB4OTA7CiAgc3RhdGljIGNvbnN0IGludCB4eHl3ID0gMHhEMDsKICBzdGF0aWMgY29uc3QgaW50IHh4enggPSAweDIwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh6eSA9IDB4NjA7CiAgc3RhdGljIGNvbnN0IGludCB4eHp6ID0gMHhBMDsKICBzdGF0aWMgY29uc3QgaW50IHh4encgPSAweEUwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh3eCA9IDB4MzA7CiAgc3RhdGljIGNvbnN0IGludCB4eHd5ID0gMHg3MDsKICBzdGF0aWMgY29uc3QgaW50IHh4d3ogPSAweEIwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh3dyA9IDB4RjA7CiAgc3RhdGljIGNvbnN0IGludCB4eXh4ID0gMHg0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl4eSA9IDB4NDQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXh6ID0gMHg4NDsKICBzdGF0aWMgY29uc3QgaW50IHh5eHcgPSAweEM0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl5eCA9IDB4MTQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXl5ID0gMHg1NDsKICBzdGF0aWMgY29uc3QgaW50IHh5eXogPSAweDk0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl5dyA9IDB4RDQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXp4ID0gMHgyNDsKICBzdGF0aWMgY29uc3QgaW50IHh5enkgPSAweDY0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl6eiA9IDB4QTQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXp3ID0gMHhFNDsKICBzdGF0aWMgY29uc3QgaW50IHh5d3ggPSAweDM0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl3eSA9IDB4NzQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXd6ID0gMHhCNDsKICBzdGF0aWMgY29uc3QgaW50IHh5d3cgPSAweEY0OwogIHN0YXRpYyBjb25zdCBpbnQgeHp4eCA9IDB4ODsKICBzdGF0aWMgY29uc3QgaW50IHh6eHkgPSAweDQ4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp4eiA9IDB4ODg7CiAgc3RhdGljIGNvbnN0IGludCB4enh3ID0gMHhDODsKICBzdGF0aWMgY29uc3QgaW50IHh6eXggPSAweDE4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp5eSA9IDB4NTg7CiAgc3RhdGljIGNvbnN0IGludCB4enl6ID0gMHg5ODsKICBzdGF0aWMgY29uc3QgaW50IHh6eXcgPSAweEQ4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp6eCA9IDB4Mjg7CiAgc3RhdGljIGNvbnN0IGludCB4enp5ID0gMHg2ODsKICBzdGF0aWMgY29uc3QgaW50IHh6enogPSAweEE4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp6dyA9IDB4RTg7CiAgc3RhdGljIGNvbnN0IGludCB4end4ID0gMHgzODsKICBzdGF0aWMgY29uc3QgaW50IHh6d3kgPSAweDc4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp3eiA9IDB4Qjg7CiAgc3RhdGljIGNvbnN0IGludCB4end3ID0gMHhGODsKICBzdGF0aWMgY29uc3QgaW50IHh3eHggPSAweEM7CiAgc3RhdGljIGNvbnN0IGludCB4d3h5ID0gMHg0QzsKICBzdGF0aWMgY29uc3QgaW50IHh3eHogPSAweDhDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd4dyA9IDB4Q0M7CiAgc3RhdGljIGNvbnN0IGludCB4d3l4ID0gMHgxQzsKICBzdGF0aWMgY29uc3QgaW50IHh3eXkgPSAweDVDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd5eiA9IDB4OUM7CiAgc3RhdGljIGNvbnN0IGludCB4d3l3ID0gMHhEQzsKICBzdGF0aWMgY29uc3QgaW50IHh3enggPSAweDJDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd6eSA9IDB4NkM7CiAgc3RhdGljIGNvbnN0IGludCB4d3p6ID0gMHhBQzsKICBzdGF0aWMgY29uc3QgaW50IHh3encgPSAweEVDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd3eCA9IDB4M0M7CiAgc3RhdGljIGNvbnN0IGludCB4d3d5ID0gMHg3QzsKICBzdGF0aWMgY29uc3QgaW50IHh3d3ogPSAweEJDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd3dyA9IDB4RkM7CiAgc3RhdGljIGNvbnN0IGludCB5eHh4ID0gMHgxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh4eSA9IDB4NDE7CiAgc3RhdGljIGNvbnN0IGludCB5eHh6ID0gMHg4MTsKICBzdGF0aWMgY29uc3QgaW50IHl4eHcgPSAweEMxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh5eCA9IDB4MTE7CiAgc3RhdGljIGNvbnN0IGludCB5eHl5ID0gMHg1MTsKICBzdGF0aWMgY29uc3QgaW50IHl4eXogPSAweDkxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh5dyA9IDB4RDE7CiAgc3RhdGljIGNvbnN0IGludCB5eHp4ID0gMHgyMTsKICBzdGF0aWMgY29uc3QgaW50IHl4enkgPSAweDYxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh6eiA9IDB4QTE7CiAgc3RhdGljIGNvbnN0IGludCB5eHp3ID0gMHhFMTsKICBzdGF0aWMgY29uc3QgaW50IHl4d3ggPSAweDMxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh3eSA9IDB4NzE7CiAgc3RhdGljIGNvbnN0IGludCB5eHd6ID0gMHhCMTsKICBzdGF0aWMgY29uc3QgaW50IHl4d3cgPSAweEYxOwogIHN0YXRpYyBjb25zdCBpbnQgeXl4eCA9IDB4NTsKICBzdGF0aWMgY29uc3QgaW50IHl5eHkgPSAweDQ1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl4eiA9IDB4ODU7CiAgc3RhdGljIGNvbnN0IGludCB5eXh3ID0gMHhDNTsKICBzdGF0aWMgY29uc3QgaW50IHl5eXggPSAweDE1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl5eSA9IDB4NTU7CiAgc3RhdGljIGNvbnN0IGludCB5eXl6ID0gMHg5NTsKICBzdGF0aWMgY29uc3QgaW50IHl5eXcgPSAweEQ1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl6eCA9IDB4MjU7CiAgc3RhdGljIGNvbnN0IGludCB5eXp5ID0gMHg2NTsKICBzdGF0aWMgY29uc3QgaW50IHl5enogPSAweEE1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl6dyA9IDB4RTU7CiAgc3RhdGljIGNvbnN0IGludCB5eXd4ID0gMHgzNTsKICBzdGF0aWMgY29uc3QgaW50IHl5d3kgPSAweDc1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl3eiA9IDB4QjU7CiAgc3RhdGljIGNvbnN0IGludCB5eXd3ID0gMHhGNTsKICBzdGF0aWMgY29uc3QgaW50IHl6eHggPSAweDk7CiAgc3RhdGljIGNvbnN0IGludCB5enh5ID0gMHg0OTsKICBzdGF0aWMgY29uc3QgaW50IHl6eHogPSAweDg5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp4dyA9IDB4Qzk7CiAgc3RhdGljIGNvbnN0IGludCB5enl4ID0gMHgxOTsKICBzdGF0aWMgY29uc3QgaW50IHl6eXkgPSAweDU5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp5eiA9IDB4OTk7CiAgc3RhdGljIGNvbnN0IGludCB5enl3ID0gMHhEOTsKICBzdGF0aWMgY29uc3QgaW50IHl6enggPSAweDI5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp6eSA9IDB4Njk7CiAgc3RhdGljIGNvbnN0IGludCB5enp6ID0gMHhBOTsKICBzdGF0aWMgY29uc3QgaW50IHl6encgPSAweEU5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp3eCA9IDB4Mzk7CiAgc3RhdGljIGNvbnN0IGludCB5end5ID0gMHg3OTsKICBzdGF0aWMgY29uc3QgaW50IHl6d3ogPSAweEI5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp3dyA9IDB4Rjk7CiAgc3RhdGljIGNvbnN0IGludCB5d3h4ID0gMHhEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd4eSA9IDB4NEQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3h6ID0gMHg4RDsKICBzdGF0aWMgY29uc3QgaW50IHl3eHcgPSAweENEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd5eCA9IDB4MUQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3l5ID0gMHg1RDsKICBzdGF0aWMgY29uc3QgaW50IHl3eXogPSAweDlEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd5dyA9IDB4REQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3p4ID0gMHgyRDsKICBzdGF0aWMgY29uc3QgaW50IHl3enkgPSAweDZEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd6eiA9IDB4QUQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3p3ID0gMHhFRDsKICBzdGF0aWMgY29uc3QgaW50IHl3d3ggPSAweDNEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd3eSA9IDB4N0Q7CiAgc3RhdGljIGNvbnN0IGludCB5d3d6ID0gMHhCRDsKICBzdGF0aWMgY29uc3QgaW50IHl3d3cgPSAweEZEOwogIHN0YXRpYyBjb25zdCBpbnQgenh4eCA9IDB4MjsKICBzdGF0aWMgY29uc3QgaW50IHp4eHkgPSAweDQyOwogIHN0YXRpYyBjb25zdCBpbnQgenh4eiA9IDB4ODI7CiAgc3RhdGljIGNvbnN0IGludCB6eHh3ID0gMHhDMjsKICBzdGF0aWMgY29uc3QgaW50IHp4eXggPSAweDEyOwogIHN0YXRpYyBjb25zdCBpbnQgenh5eSA9IDB4NTI7CiAgc3RhdGljIGNvbnN0IGludCB6eHl6ID0gMHg5MjsKICBzdGF0aWMgY29uc3QgaW50IHp4eXcgPSAweEQyOwogIHN0YXRpYyBjb25zdCBpbnQgenh6eCA9IDB4MjI7CiAgc3RhdGljIGNvbnN0IGludCB6eHp5ID0gMHg2MjsKICBzdGF0aWMgY29uc3QgaW50IHp4enogPSAweEEyOwogIHN0YXRpYyBjb25zdCBpbnQgenh6dyA9IDB4RTI7CiAgc3RhdGljIGNvbnN0IGludCB6eHd4ID0gMHgzMjsKICBzdGF0aWMgY29uc3QgaW50IHp4d3kgPSAweDcyOwogIHN0YXRpYyBjb25zdCBpbnQgenh3eiA9IDB4QjI7CiAgc3RhdGljIGNvbnN0IGludCB6eHd3ID0gMHhGMjsKICBzdGF0aWMgY29uc3QgaW50IHp5eHggPSAweDY7CiAgc3RhdGljIGNvbnN0IGludCB6eXh5ID0gMHg0NjsKICBzdGF0aWMgY29uc3QgaW50IHp5eHogPSAweDg2OwogIHN0YXRpYyBjb25zdCBpbnQgenl4dyA9IDB4QzY7CiAgc3RhdGljIGNvbnN0IGludCB6eXl4ID0gMHgxNjsKICBzdGF0aWMgY29uc3QgaW50IHp5eXkgPSAweDU2OwogIHN0YXRpYyBjb25zdCBpbnQgenl5eiA9IDB4OTY7CiAgc3RhdGljIGNvbnN0IGludCB6eXl3ID0gMHhENjsKICBzdGF0aWMgY29uc3QgaW50IHp5enggPSAweDI2OwogIHN0YXRpYyBjb25zdCBpbnQgenl6eSA9IDB4NjY7CiAgc3RhdGljIGNvbnN0IGludCB6eXp6ID0gMHhBNjsKICBzdGF0aWMgY29uc3QgaW50IHp5encgPSAweEU2OwogIHN0YXRpYyBjb25zdCBpbnQgenl3eCA9IDB4MzY7CiAgc3RhdGljIGNvbnN0IGludCB6eXd5ID0gMHg3NjsKICBzdGF0aWMgY29uc3QgaW50IHp5d3ogPSAweEI2OwogIHN0YXRpYyBjb25zdCBpbnQgenl3dyA9IDB4RjY7CiAgc3RhdGljIGNvbnN0IGludCB6enh4ID0gMHhBOwogIHN0YXRpYyBjb25zdCBpbnQgenp4eSA9IDB4NEE7CiAgc3RhdGljIGNvbnN0IGludCB6enh6ID0gMHg4QTsKICBzdGF0aWMgY29uc3QgaW50IHp6eHcgPSAweENBOwogIHN0YXRpYyBjb25zdCBpbnQgenp5eCA9IDB4MUE7CiAgc3RhdGljIGNvbnN0IGludCB6enl5ID0gMHg1QTsKICBzdGF0aWMgY29uc3QgaW50IHp6eXogPSAweDlBOwogIHN0YXRpYyBjb25zdCBpbnQgenp5dyA9IDB4REE7CiAgc3RhdGljIGNvbnN0IGludCB6enp4ID0gMHgyQTsKICBzdGF0aWMgY29uc3QgaW50IHp6enkgPSAweDZBOwogIHN0YXRpYyBjb25zdCBpbnQgenp6eiA9IDB4QUE7CiAgc3RhdGljIGNvbnN0IGludCB6enp3ID0gMHhFQTsKICBzdGF0aWMgY29uc3QgaW50IHp6d3ggPSAweDNBOwogIHN0YXRpYyBjb25zdCBpbnQgenp3eSA9IDB4N0E7CiAgc3RhdGljIGNvbnN0IGludCB6end6ID0gMHhCQTsKICBzdGF0aWMgY29uc3QgaW50IHp6d3cgPSAweEZBOwogIHN0YXRpYyBjb25zdCBpbnQgend4eCA9IDB4RTsKICBzdGF0aWMgY29uc3QgaW50IHp3eHkgPSAweDRFOwogIHN0YXRpYyBjb25zdCBpbnQgend4eiA9IDB4OEU7CiAgc3RhdGljIGNvbnN0IGludCB6d3h3ID0gMHhDRTsKICBzdGF0aWMgY29uc3QgaW50IHp3eXggPSAweDFFOwogIHN0YXRpYyBjb25zdCBpbnQgend5eSA9IDB4NUU7CiAgc3RhdGljIGNvbnN0IGludCB6d3l6ID0gMHg5RTsKICBzdGF0aWMgY29uc3QgaW50IHp3eXcgPSAweERFOwogIHN0YXRpYyBjb25zdCBpbnQgend6eCA9IDB4MkU7CiAgc3RhdGljIGNvbnN0IGludCB6d3p5ID0gMHg2RTsKICBzdGF0aWMgY29uc3QgaW50IHp3enogPSAweEFFOwogIHN0YXRpYyBjb25zdCBpbnQgend6dyA9IDB4RUU7CiAgc3RhdGljIGNvbnN0IGludCB6d3d4ID0gMHgzRTsKICBzdGF0aWMgY29uc3QgaW50IHp3d3kgPSAweDdFOwogIHN0YXRpYyBjb25zdCBpbnQgend3eiA9IDB4QkU7CiAgc3RhdGljIGNvbnN0IGludCB6d3d3ID0gMHhGRTsKICBzdGF0aWMgY29uc3QgaW50IHd4eHggPSAweDM7CiAgc3RhdGljIGNvbnN0IGludCB3eHh5ID0gMHg0MzsKICBzdGF0aWMgY29uc3QgaW50IHd4eHogPSAweDgzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h4dyA9IDB4QzM7CiAgc3RhdGljIGNvbnN0IGludCB3eHl4ID0gMHgxMzsKICBzdGF0aWMgY29uc3QgaW50IHd4eXkgPSAweDUzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h5eiA9IDB4OTM7CiAgc3RhdGljIGNvbnN0IGludCB3eHl3ID0gMHhEMzsKICBzdGF0aWMgY29uc3QgaW50IHd4enggPSAweDIzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h6eSA9IDB4NjM7CiAgc3RhdGljIGNvbnN0IGludCB3eHp6ID0gMHhBMzsKICBzdGF0aWMgY29uc3QgaW50IHd4encgPSAweEUzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h3eCA9IDB4MzM7CiAgc3RhdGljIGNvbnN0IGludCB3eHd5ID0gMHg3MzsKICBzdGF0aWMgY29uc3QgaW50IHd4d3ogPSAweEIzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h3dyA9IDB4RjM7CiAgc3RhdGljIGNvbnN0IGludCB3eXh4ID0gMHg3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l4eSA9IDB4NDc7CiAgc3RhdGljIGNvbnN0IGludCB3eXh6ID0gMHg4NzsKICBzdGF0aWMgY29uc3QgaW50IHd5eHcgPSAweEM3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l5eCA9IDB4MTc7CiAgc3RhdGljIGNvbnN0IGludCB3eXl5ID0gMHg1NzsKICBzdGF0aWMgY29uc3QgaW50IHd5eXogPSAweDk3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l5dyA9IDB4RDc7CiAgc3RhdGljIGNvbnN0IGludCB3eXp4ID0gMHgyNzsKICBzdGF0aWMgY29uc3QgaW50IHd5enkgPSAweDY3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l6eiA9IDB4QTc7CiAgc3RhdGljIGNvbnN0IGludCB3eXp3ID0gMHhFNzsKICBzdGF0aWMgY29uc3QgaW50IHd5d3ggPSAweDM3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l3eSA9IDB4Nzc7CiAgc3RhdGljIGNvbnN0IGludCB3eXd6ID0gMHhCNzsKICBzdGF0aWMgY29uc3QgaW50IHd5d3cgPSAweEY3OwogIHN0YXRpYyBjb25zdCBpbnQgd3p4eCA9IDB4QjsKICBzdGF0aWMgY29uc3QgaW50IHd6eHkgPSAweDRCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p4eiA9IDB4OEI7CiAgc3RhdGljIGNvbnN0IGludCB3enh3ID0gMHhDQjsKICBzdGF0aWMgY29uc3QgaW50IHd6eXggPSAweDFCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p5eSA9IDB4NUI7CiAgc3RhdGljIGNvbnN0IGludCB3enl6ID0gMHg5QjsKICBzdGF0aWMgY29uc3QgaW50IHd6eXcgPSAweERCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p6eCA9IDB4MkI7CiAgc3RhdGljIGNvbnN0IGludCB3enp5ID0gMHg2QjsKICBzdGF0aWMgY29uc3QgaW50IHd6enogPSAweEFCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p6dyA9IDB4RUI7CiAgc3RhdGljIGNvbnN0IGludCB3end4ID0gMHgzQjsKICBzdGF0aWMgY29uc3QgaW50IHd6d3kgPSAweDdCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p3eiA9IDB4QkI7CiAgc3RhdGljIGNvbnN0IGludCB3end3ID0gMHhGQjsKICBzdGF0aWMgY29uc3QgaW50IHd3eHggPSAweEY7CiAgc3RhdGljIGNvbnN0IGludCB3d3h5ID0gMHg0RjsKICBzdGF0aWMgY29uc3QgaW50IHd3eHogPSAweDhGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d4dyA9IDB4Q0Y7CiAgc3RhdGljIGNvbnN0IGludCB3d3l4ID0gMHgxRjsKICBzdGF0aWMgY29uc3QgaW50IHd3eXkgPSAweDVGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d5eiA9IDB4OUY7CiAgc3RhdGljIGNvbnN0IGludCB3d3l3ID0gMHhERjsKICBzdGF0aWMgY29uc3QgaW50IHd3enggPSAweDJGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d6eSA9IDB4NkY7CiAgc3RhdGljIGNvbnN0IGludCB3d3p6ID0gMHhBRjsKICBzdGF0aWMgY29uc3QgaW50IHd3encgPSAweEVGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d3eCA9IDB4M0Y7CiAgc3RhdGljIGNvbnN0IGludCB3d3d5ID0gMHg3RjsKICBzdGF0aWMgY29uc3QgaW50IHd3d3ogPSAweEJGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d3dyA9IDB4RkY7CgogIC8vLyBTaHVmZmxlIHRoZSBsYW5lIHZhbHVlcy4gW21hc2tdIG11c3QgYmUgb25lIG9mIHRoZSAyNTYgc2h1ZmZsZSBjb25zdGFudHMuCiAgRmxvYXQzMng0IHNodWZmbGUoaW50IG1hc2spOwoKICAvLy8gU2h1ZmZsZSB0aGUgbGFuZSB2YWx1ZXMgaW4gW3RoaXNdIGFuZCBbb3RoZXJdLiBUaGUgcmV0dXJuZWQKICAvLy8gRmxvYXQzMng0IHdpbGwgaGF2ZSBYWSBsYW5lcyBmcm9tIFt0aGlzXSBhbmQgWlcgbGFuZXMgZnJvbSBbb3RoZXJdLgogIC8vLyBVc2VzIHRoZSBzYW1lIFttYXNrXSBhcyBbc2h1ZmZsZV0uCiAgRmxvYXQzMng0IHNodWZmbGVNaXgoRmxvYXQzMng0IG90aGVyLCBpbnQgbWFzayk7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtGbG9hdDMyeDRdIGNvcGllZCBmcm9tIFt0aGlzXSB3aXRoIGEgbmV3IHggdmFsdWUuCiAgRmxvYXQzMng0IHdpdGhYKGRvdWJsZSB4KTsKCiAgLy8vIFJldHVybnMgYSBuZXcgW0Zsb2F0MzJ4NF0gY29waWVkIGZyb20gW3RoaXNdIHdpdGggYSBuZXcgeSB2YWx1ZS4KICBGbG9hdDMyeDQgd2l0aFkoZG91YmxlIHkpOwoKICAvLy8gUmV0dXJucyBhIG5ldyBbRmxvYXQzMng0XSBjb3BpZWQgZnJvbSBbdGhpc10gd2l0aCBhIG5ldyB6IHZhbHVlLgogIEZsb2F0MzJ4NCB3aXRoWihkb3VibGUgeik7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtGbG9hdDMyeDRdIGNvcGllZCBmcm9tIFt0aGlzXSB3aXRoIGEgbmV3IHcgdmFsdWUuCiAgRmxvYXQzMng0IHdpdGhXKGRvdWJsZSB3KTsKCiAgLy8vIFJldHVybnMgdGhlIGxhbmUtd2lzZSBtaW5pbXVtIHZhbHVlIGluIFt0aGlzXSBvciBbb3RoZXJdLgogIEZsb2F0MzJ4NCBtaW4oRmxvYXQzMng0IG90aGVyKTsKCiAgLy8vIFJldHVybnMgdGhlIGxhbmUtd2lzZSBtYXhpbXVtIHZhbHVlIGluIFt0aGlzXSBvciBbb3RoZXJdLgogIEZsb2F0MzJ4NCBtYXgoRmxvYXQzMng0IG90aGVyKTsKCiAgLy8vIFJldHVybnMgdGhlIHNxdWFyZSByb290IG9mIFt0aGlzXS4KICBGbG9hdDMyeDQgc3FydCgpOwoKICAvLy8gUmV0dXJucyB0aGUgcmVjaXByb2NhbCBvZiBbdGhpc10uCiAgRmxvYXQzMng0IHJlY2lwcm9jYWwoKTsKCiAgLy8vIFJldHVybnMgdGhlIHNxdWFyZSByb290IG9mIHRoZSByZWNpcHJvY2FsIG9mIFt0aGlzXS4KICBGbG9hdDMyeDQgcmVjaXByb2NhbFNxcnQoKTsKfQoKLyoqCiAqIEludDMyeDQgYW5kIG9wZXJhdGlvbnMuCiAqCiAqIEludDMyeDQgc3RvcmVzIDQgMzItYml0IGJpdC1tYXNrcyBpbiAibGFuZXMiLgogKiBUaGUgbGFuZXMgYXJlICJ4IiwgInkiLCAieiIsIGFuZCAidyIgcmVzcGVjdGl2ZWx5LgogKi8KYWJzdHJhY3QgY2xhc3MgSW50MzJ4NCB7CiAgZXh0ZXJuYWwgZmFjdG9yeSBJbnQzMng0KGludCB4LCBpbnQgeSwgaW50IHosIGludCB3KTsKICBleHRlcm5hbCBmYWN0b3J5IEludDMyeDQuYm9vbChib29sIHgsIGJvb2wgeSwgYm9vbCB6LCBib29sIHcpOwogIGV4dGVybmFsIGZhY3RvcnkgSW50MzJ4NC5mcm9tRmxvYXQzMng0Qml0cyhGbG9hdDMyeDQgeCk7CgogIC8vLyBUaGUgYml0LXdpc2Ugb3Igb3BlcmF0b3IuCiAgSW50MzJ4NCBvcGVyYXRvciB8KEludDMyeDQgb3RoZXIpOwoKICAvLy8gVGhlIGJpdC13aXNlIGFuZCBvcGVyYXRvci4KICBJbnQzMng0IG9wZXJhdG9yICYoSW50MzJ4NCBvdGhlcik7CgogIC8vLyBUaGUgYml0LXdpc2UgeG9yIG9wZXJhdG9yLgogIEludDMyeDQgb3BlcmF0b3IgXihJbnQzMng0IG90aGVyKTsKCiAgLy8vIEFkZGl0aW9uIG9wZXJhdG9yLgogIEludDMyeDQgb3BlcmF0b3IgKyhJbnQzMng0IG90aGVyKTsKCiAgLy8vIFN1YnRyYWN0aW9uIG9wZXJhdG9yLgogIEludDMyeDQgb3BlcmF0b3IgLShJbnQzMng0IG90aGVyKTsKCiAgLy8vIEV4dHJhY3QgMzItYml0IG1hc2sgZnJvbSB4IGxhbmUuCiAgaW50IGdldCB4OwoKICAvLy8gRXh0cmFjdCAzMi1iaXQgbWFzayBmcm9tIHkgbGFuZS4KICBpbnQgZ2V0IHk7CgogIC8vLyBFeHRyYWN0IDMyLWJpdCBtYXNrIGZyb20geiBsYW5lLgogIGludCBnZXQgejsKCiAgLy8vIEV4dHJhY3QgMzItYml0IG1hc2sgZnJvbSB3IGxhbmUuCiAgaW50IGdldCB3OwoKICAvLy8gRXh0cmFjdCB0aGUgdG9wIGJpdCBmcm9tIGVhY2ggbGFuZSByZXR1cm4gdGhlbSBpbiB0aGUgZmlyc3QgNCBiaXRzLgogIC8vLyAieCIgbGFuZSBpcyBiaXQgMC4KICAvLy8gInkiIGxhbmUgaXMgYml0IDEuCiAgLy8vICJ6IiBsYW5lIGlzIGJpdCAyLgogIC8vLyAidyIgbGFuZSBpcyBiaXQgMy4KICBpbnQgZ2V0IHNpZ25NYXNrOwoKICAvLy8gTWFzayBwYXNzZWQgdG8gW3NodWZmbGVdIG9yIFtzaHVmZmxlTWl4XS4KICBzdGF0aWMgY29uc3QgaW50IHh4eHggPSAweDA7CiAgc3RhdGljIGNvbnN0IGludCB4eHh5ID0gMHg0MDsKICBzdGF0aWMgY29uc3QgaW50IHh4eHogPSAweDgwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh4dyA9IDB4QzA7CiAgc3RhdGljIGNvbnN0IGludCB4eHl4ID0gMHgxMDsKICBzdGF0aWMgY29uc3QgaW50IHh4eXkgPSAweDUwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh5eiA9IDB4OTA7CiAgc3RhdGljIGNvbnN0IGludCB4eHl3ID0gMHhEMDsKICBzdGF0aWMgY29uc3QgaW50IHh4enggPSAweDIwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh6eSA9IDB4NjA7CiAgc3RhdGljIGNvbnN0IGludCB4eHp6ID0gMHhBMDsKICBzdGF0aWMgY29uc3QgaW50IHh4encgPSAweEUwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh3eCA9IDB4MzA7CiAgc3RhdGljIGNvbnN0IGludCB4eHd5ID0gMHg3MDsKICBzdGF0aWMgY29uc3QgaW50IHh4d3ogPSAweEIwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh3dyA9IDB4RjA7CiAgc3RhdGljIGNvbnN0IGludCB4eXh4ID0gMHg0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl4eSA9IDB4NDQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXh6ID0gMHg4NDsKICBzdGF0aWMgY29uc3QgaW50IHh5eHcgPSAweEM0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl5eCA9IDB4MTQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXl5ID0gMHg1NDsKICBzdGF0aWMgY29uc3QgaW50IHh5eXogPSAweDk0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl5dyA9IDB4RDQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXp4ID0gMHgyNDsKICBzdGF0aWMgY29uc3QgaW50IHh5enkgPSAweDY0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl6eiA9IDB4QTQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXp3ID0gMHhFNDsKICBzdGF0aWMgY29uc3QgaW50IHh5d3ggPSAweDM0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl3eSA9IDB4NzQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXd6ID0gMHhCNDsKICBzdGF0aWMgY29uc3QgaW50IHh5d3cgPSAweEY0OwogIHN0YXRpYyBjb25zdCBpbnQgeHp4eCA9IDB4ODsKICBzdGF0aWMgY29uc3QgaW50IHh6eHkgPSAweDQ4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp4eiA9IDB4ODg7CiAgc3RhdGljIGNvbnN0IGludCB4enh3ID0gMHhDODsKICBzdGF0aWMgY29uc3QgaW50IHh6eXggPSAweDE4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp5eSA9IDB4NTg7CiAgc3RhdGljIGNvbnN0IGludCB4enl6ID0gMHg5ODsKICBzdGF0aWMgY29uc3QgaW50IHh6eXcgPSAweEQ4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp6eCA9IDB4Mjg7CiAgc3RhdGljIGNvbnN0IGludCB4enp5ID0gMHg2ODsKICBzdGF0aWMgY29uc3QgaW50IHh6enogPSAweEE4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp6dyA9IDB4RTg7CiAgc3RhdGljIGNvbnN0IGludCB4end4ID0gMHgzODsKICBzdGF0aWMgY29uc3QgaW50IHh6d3kgPSAweDc4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp3eiA9IDB4Qjg7CiAgc3RhdGljIGNvbnN0IGludCB4end3ID0gMHhGODsKICBzdGF0aWMgY29uc3QgaW50IHh3eHggPSAweEM7CiAgc3RhdGljIGNvbnN0IGludCB4d3h5ID0gMHg0QzsKICBzdGF0aWMgY29uc3QgaW50IHh3eHogPSAweDhDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd4dyA9IDB4Q0M7CiAgc3RhdGljIGNvbnN0IGludCB4d3l4ID0gMHgxQzsKICBzdGF0aWMgY29uc3QgaW50IHh3eXkgPSAweDVDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd5eiA9IDB4OUM7CiAgc3RhdGljIGNvbnN0IGludCB4d3l3ID0gMHhEQzsKICBzdGF0aWMgY29uc3QgaW50IHh3enggPSAweDJDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd6eSA9IDB4NkM7CiAgc3RhdGljIGNvbnN0IGludCB4d3p6ID0gMHhBQzsKICBzdGF0aWMgY29uc3QgaW50IHh3encgPSAweEVDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd3eCA9IDB4M0M7CiAgc3RhdGljIGNvbnN0IGludCB4d3d5ID0gMHg3QzsKICBzdGF0aWMgY29uc3QgaW50IHh3d3ogPSAweEJDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd3dyA9IDB4RkM7CiAgc3RhdGljIGNvbnN0IGludCB5eHh4ID0gMHgxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh4eSA9IDB4NDE7CiAgc3RhdGljIGNvbnN0IGludCB5eHh6ID0gMHg4MTsKICBzdGF0aWMgY29uc3QgaW50IHl4eHcgPSAweEMxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh5eCA9IDB4MTE7CiAgc3RhdGljIGNvbnN0IGludCB5eHl5ID0gMHg1MTsKICBzdGF0aWMgY29uc3QgaW50IHl4eXogPSAweDkxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh5dyA9IDB4RDE7CiAgc3RhdGljIGNvbnN0IGludCB5eHp4ID0gMHgyMTsKICBzdGF0aWMgY29uc3QgaW50IHl4enkgPSAweDYxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh6eiA9IDB4QTE7CiAgc3RhdGljIGNvbnN0IGludCB5eHp3ID0gMHhFMTsKICBzdGF0aWMgY29uc3QgaW50IHl4d3ggPSAweDMxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh3eSA9IDB4NzE7CiAgc3RhdGljIGNvbnN0IGludCB5eHd6ID0gMHhCMTsKICBzdGF0aWMgY29uc3QgaW50IHl4d3cgPSAweEYxOwogIHN0YXRpYyBjb25zdCBpbnQgeXl4eCA9IDB4NTsKICBzdGF0aWMgY29uc3QgaW50IHl5eHkgPSAweDQ1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl4eiA9IDB4ODU7CiAgc3RhdGljIGNvbnN0IGludCB5eXh3ID0gMHhDNTsKICBzdGF0aWMgY29uc3QgaW50IHl5eXggPSAweDE1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl5eSA9IDB4NTU7CiAgc3RhdGljIGNvbnN0IGludCB5eXl6ID0gMHg5NTsKICBzdGF0aWMgY29uc3QgaW50IHl5eXcgPSAweEQ1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl6eCA9IDB4MjU7CiAgc3RhdGljIGNvbnN0IGludCB5eXp5ID0gMHg2NTsKICBzdGF0aWMgY29uc3QgaW50IHl5enogPSAweEE1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl6dyA9IDB4RTU7CiAgc3RhdGljIGNvbnN0IGludCB5eXd4ID0gMHgzNTsKICBzdGF0aWMgY29uc3QgaW50IHl5d3kgPSAweDc1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl3eiA9IDB4QjU7CiAgc3RhdGljIGNvbnN0IGludCB5eXd3ID0gMHhGNTsKICBzdGF0aWMgY29uc3QgaW50IHl6eHggPSAweDk7CiAgc3RhdGljIGNvbnN0IGludCB5enh5ID0gMHg0OTsKICBzdGF0aWMgY29uc3QgaW50IHl6eHogPSAweDg5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp4dyA9IDB4Qzk7CiAgc3RhdGljIGNvbnN0IGludCB5enl4ID0gMHgxOTsKICBzdGF0aWMgY29uc3QgaW50IHl6eXkgPSAweDU5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp5eiA9IDB4OTk7CiAgc3RhdGljIGNvbnN0IGludCB5enl3ID0gMHhEOTsKICBzdGF0aWMgY29uc3QgaW50IHl6enggPSAweDI5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp6eSA9IDB4Njk7CiAgc3RhdGljIGNvbnN0IGludCB5enp6ID0gMHhBOTsKICBzdGF0aWMgY29uc3QgaW50IHl6encgPSAweEU5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp3eCA9IDB4Mzk7CiAgc3RhdGljIGNvbnN0IGludCB5end5ID0gMHg3OTsKICBzdGF0aWMgY29uc3QgaW50IHl6d3ogPSAweEI5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp3dyA9IDB4Rjk7CiAgc3RhdGljIGNvbnN0IGludCB5d3h4ID0gMHhEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd4eSA9IDB4NEQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3h6ID0gMHg4RDsKICBzdGF0aWMgY29uc3QgaW50IHl3eHcgPSAweENEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd5eCA9IDB4MUQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3l5ID0gMHg1RDsKICBzdGF0aWMgY29uc3QgaW50IHl3eXogPSAweDlEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd5dyA9IDB4REQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3p4ID0gMHgyRDsKICBzdGF0aWMgY29uc3QgaW50IHl3enkgPSAweDZEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd6eiA9IDB4QUQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3p3ID0gMHhFRDsKICBzdGF0aWMgY29uc3QgaW50IHl3d3ggPSAweDNEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd3eSA9IDB4N0Q7CiAgc3RhdGljIGNvbnN0IGludCB5d3d6ID0gMHhCRDsKICBzdGF0aWMgY29uc3QgaW50IHl3d3cgPSAweEZEOwogIHN0YXRpYyBjb25zdCBpbnQgenh4eCA9IDB4MjsKICBzdGF0aWMgY29uc3QgaW50IHp4eHkgPSAweDQyOwogIHN0YXRpYyBjb25zdCBpbnQgenh4eiA9IDB4ODI7CiAgc3RhdGljIGNvbnN0IGludCB6eHh3ID0gMHhDMjsKICBzdGF0aWMgY29uc3QgaW50IHp4eXggPSAweDEyOwogIHN0YXRpYyBjb25zdCBpbnQgenh5eSA9IDB4NTI7CiAgc3RhdGljIGNvbnN0IGludCB6eHl6ID0gMHg5MjsKICBzdGF0aWMgY29uc3QgaW50IHp4eXcgPSAweEQyOwogIHN0YXRpYyBjb25zdCBpbnQgenh6eCA9IDB4MjI7CiAgc3RhdGljIGNvbnN0IGludCB6eHp5ID0gMHg2MjsKICBzdGF0aWMgY29uc3QgaW50IHp4enogPSAweEEyOwogIHN0YXRpYyBjb25zdCBpbnQgenh6dyA9IDB4RTI7CiAgc3RhdGljIGNvbnN0IGludCB6eHd4ID0gMHgzMjsKICBzdGF0aWMgY29uc3QgaW50IHp4d3kgPSAweDcyOwogIHN0YXRpYyBjb25zdCBpbnQgenh3eiA9IDB4QjI7CiAgc3RhdGljIGNvbnN0IGludCB6eHd3ID0gMHhGMjsKICBzdGF0aWMgY29uc3QgaW50IHp5eHggPSAweDY7CiAgc3RhdGljIGNvbnN0IGludCB6eXh5ID0gMHg0NjsKICBzdGF0aWMgY29uc3QgaW50IHp5eHogPSAweDg2OwogIHN0YXRpYyBjb25zdCBpbnQgenl4dyA9IDB4QzY7CiAgc3RhdGljIGNvbnN0IGludCB6eXl4ID0gMHgxNjsKICBzdGF0aWMgY29uc3QgaW50IHp5eXkgPSAweDU2OwogIHN0YXRpYyBjb25zdCBpbnQgenl5eiA9IDB4OTY7CiAgc3RhdGljIGNvbnN0IGludCB6eXl3ID0gMHhENjsKICBzdGF0aWMgY29uc3QgaW50IHp5enggPSAweDI2OwogIHN0YXRpYyBjb25zdCBpbnQgenl6eSA9IDB4NjY7CiAgc3RhdGljIGNvbnN0IGludCB6eXp6ID0gMHhBNjsKICBzdGF0aWMgY29uc3QgaW50IHp5encgPSAweEU2OwogIHN0YXRpYyBjb25zdCBpbnQgenl3eCA9IDB4MzY7CiAgc3RhdGljIGNvbnN0IGludCB6eXd5ID0gMHg3NjsKICBzdGF0aWMgY29uc3QgaW50IHp5d3ogPSAweEI2OwogIHN0YXRpYyBjb25zdCBpbnQgenl3dyA9IDB4RjY7CiAgc3RhdGljIGNvbnN0IGludCB6enh4ID0gMHhBOwogIHN0YXRpYyBjb25zdCBpbnQgenp4eSA9IDB4NEE7CiAgc3RhdGljIGNvbnN0IGludCB6enh6ID0gMHg4QTsKICBzdGF0aWMgY29uc3QgaW50IHp6eHcgPSAweENBOwogIHN0YXRpYyBjb25zdCBpbnQgenp5eCA9IDB4MUE7CiAgc3RhdGljIGNvbnN0IGludCB6enl5ID0gMHg1QTsKICBzdGF0aWMgY29uc3QgaW50IHp6eXogPSAweDlBOwogIHN0YXRpYyBjb25zdCBpbnQgenp5dyA9IDB4REE7CiAgc3RhdGljIGNvbnN0IGludCB6enp4ID0gMHgyQTsKICBzdGF0aWMgY29uc3QgaW50IHp6enkgPSAweDZBOwogIHN0YXRpYyBjb25zdCBpbnQgenp6eiA9IDB4QUE7CiAgc3RhdGljIGNvbnN0IGludCB6enp3ID0gMHhFQTsKICBzdGF0aWMgY29uc3QgaW50IHp6d3ggPSAweDNBOwogIHN0YXRpYyBjb25zdCBpbnQgenp3eSA9IDB4N0E7CiAgc3RhdGljIGNvbnN0IGludCB6end6ID0gMHhCQTsKICBzdGF0aWMgY29uc3QgaW50IHp6d3cgPSAweEZBOwogIHN0YXRpYyBjb25zdCBpbnQgend4eCA9IDB4RTsKICBzdGF0aWMgY29uc3QgaW50IHp3eHkgPSAweDRFOwogIHN0YXRpYyBjb25zdCBpbnQgend4eiA9IDB4OEU7CiAgc3RhdGljIGNvbnN0IGludCB6d3h3ID0gMHhDRTsKICBzdGF0aWMgY29uc3QgaW50IHp3eXggPSAweDFFOwogIHN0YXRpYyBjb25zdCBpbnQgend5eSA9IDB4NUU7CiAgc3RhdGljIGNvbnN0IGludCB6d3l6ID0gMHg5RTsKICBzdGF0aWMgY29uc3QgaW50IHp3eXcgPSAweERFOwogIHN0YXRpYyBjb25zdCBpbnQgend6eCA9IDB4MkU7CiAgc3RhdGljIGNvbnN0IGludCB6d3p5ID0gMHg2RTsKICBzdGF0aWMgY29uc3QgaW50IHp3enogPSAweEFFOwogIHN0YXRpYyBjb25zdCBpbnQgend6dyA9IDB4RUU7CiAgc3RhdGljIGNvbnN0IGludCB6d3d4ID0gMHgzRTsKICBzdGF0aWMgY29uc3QgaW50IHp3d3kgPSAweDdFOwogIHN0YXRpYyBjb25zdCBpbnQgend3eiA9IDB4QkU7CiAgc3RhdGljIGNvbnN0IGludCB6d3d3ID0gMHhGRTsKICBzdGF0aWMgY29uc3QgaW50IHd4eHggPSAweDM7CiAgc3RhdGljIGNvbnN0IGludCB3eHh5ID0gMHg0MzsKICBzdGF0aWMgY29uc3QgaW50IHd4eHogPSAweDgzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h4dyA9IDB4QzM7CiAgc3RhdGljIGNvbnN0IGludCB3eHl4ID0gMHgxMzsKICBzdGF0aWMgY29uc3QgaW50IHd4eXkgPSAweDUzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h5eiA9IDB4OTM7CiAgc3RhdGljIGNvbnN0IGludCB3eHl3ID0gMHhEMzsKICBzdGF0aWMgY29uc3QgaW50IHd4enggPSAweDIzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h6eSA9IDB4NjM7CiAgc3RhdGljIGNvbnN0IGludCB3eHp6ID0gMHhBMzsKICBzdGF0aWMgY29uc3QgaW50IHd4encgPSAweEUzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h3eCA9IDB4MzM7CiAgc3RhdGljIGNvbnN0IGludCB3eHd5ID0gMHg3MzsKICBzdGF0aWMgY29uc3QgaW50IHd4d3ogPSAweEIzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h3dyA9IDB4RjM7CiAgc3RhdGljIGNvbnN0IGludCB3eXh4ID0gMHg3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l4eSA9IDB4NDc7CiAgc3RhdGljIGNvbnN0IGludCB3eXh6ID0gMHg4NzsKICBzdGF0aWMgY29uc3QgaW50IHd5eHcgPSAweEM3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l5eCA9IDB4MTc7CiAgc3RhdGljIGNvbnN0IGludCB3eXl5ID0gMHg1NzsKICBzdGF0aWMgY29uc3QgaW50IHd5eXogPSAweDk3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l5dyA9IDB4RDc7CiAgc3RhdGljIGNvbnN0IGludCB3eXp4ID0gMHgyNzsKICBzdGF0aWMgY29uc3QgaW50IHd5enkgPSAweDY3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l6eiA9IDB4QTc7CiAgc3RhdGljIGNvbnN0IGludCB3eXp3ID0gMHhFNzsKICBzdGF0aWMgY29uc3QgaW50IHd5d3ggPSAweDM3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l3eSA9IDB4Nzc7CiAgc3RhdGljIGNvbnN0IGludCB3eXd6ID0gMHhCNzsKICBzdGF0aWMgY29uc3QgaW50IHd5d3cgPSAweEY3OwogIHN0YXRpYyBjb25zdCBpbnQgd3p4eCA9IDB4QjsKICBzdGF0aWMgY29uc3QgaW50IHd6eHkgPSAweDRCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p4eiA9IDB4OEI7CiAgc3RhdGljIGNvbnN0IGludCB3enh3ID0gMHhDQjsKICBzdGF0aWMgY29uc3QgaW50IHd6eXggPSAweDFCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p5eSA9IDB4NUI7CiAgc3RhdGljIGNvbnN0IGludCB3enl6ID0gMHg5QjsKICBzdGF0aWMgY29uc3QgaW50IHd6eXcgPSAweERCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p6eCA9IDB4MkI7CiAgc3RhdGljIGNvbnN0IGludCB3enp5ID0gMHg2QjsKICBzdGF0aWMgY29uc3QgaW50IHd6enogPSAweEFCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p6dyA9IDB4RUI7CiAgc3RhdGljIGNvbnN0IGludCB3end4ID0gMHgzQjsKICBzdGF0aWMgY29uc3QgaW50IHd6d3kgPSAweDdCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p3eiA9IDB4QkI7CiAgc3RhdGljIGNvbnN0IGludCB3end3ID0gMHhGQjsKICBzdGF0aWMgY29uc3QgaW50IHd3eHggPSAweEY7CiAgc3RhdGljIGNvbnN0IGludCB3d3h5ID0gMHg0RjsKICBzdGF0aWMgY29uc3QgaW50IHd3eHogPSAweDhGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d4dyA9IDB4Q0Y7CiAgc3RhdGljIGNvbnN0IGludCB3d3l4ID0gMHgxRjsKICBzdGF0aWMgY29uc3QgaW50IHd3eXkgPSAweDVGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d5eiA9IDB4OUY7CiAgc3RhdGljIGNvbnN0IGludCB3d3l3ID0gMHhERjsKICBzdGF0aWMgY29uc3QgaW50IHd3enggPSAweDJGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d6eSA9IDB4NkY7CiAgc3RhdGljIGNvbnN0IGludCB3d3p6ID0gMHhBRjsKICBzdGF0aWMgY29uc3QgaW50IHd3encgPSAweEVGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d3eCA9IDB4M0Y7CiAgc3RhdGljIGNvbnN0IGludCB3d3d5ID0gMHg3RjsKICBzdGF0aWMgY29uc3QgaW50IHd3d3ogPSAweEJGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d3dyA9IDB4RkY7CgogIC8vLyBTaHVmZmxlIHRoZSBsYW5lIHZhbHVlcy4gW21hc2tdIG11c3QgYmUgb25lIG9mIHRoZSAyNTYgc2h1ZmZsZSBjb25zdGFudHMuCiAgSW50MzJ4NCBzaHVmZmxlKGludCBtYXNrKTsKCiAgLy8vIFNodWZmbGUgdGhlIGxhbmUgdmFsdWVzIGluIFt0aGlzXSBhbmQgW290aGVyXS4gVGhlIHJldHVybmVkCiAgLy8vIEludDMyeDQgd2lsbCBoYXZlIFhZIGxhbmVzIGZyb20gW3RoaXNdIGFuZCBaVyBsYW5lcyBmcm9tIFtvdGhlcl0uCiAgLy8vIFVzZXMgdGhlIHNhbWUgW21hc2tdIGFzIFtzaHVmZmxlXS4KICBJbnQzMng0IHNodWZmbGVNaXgoSW50MzJ4NCBvdGhlciwgaW50IG1hc2spOwoKICAvLy8gUmV0dXJucyBhIG5ldyBbSW50MzJ4NF0gY29waWVkIGZyb20gW3RoaXNdIHdpdGggYSBuZXcgeCB2YWx1ZS4KICBJbnQzMng0IHdpdGhYKGludCB4KTsKCiAgLy8vIFJldHVybnMgYSBuZXcgW0ludDMyeDRdIGNvcGllZCBmcm9tIFt0aGlzXSB3aXRoIGEgbmV3IHkgdmFsdWUuCiAgSW50MzJ4NCB3aXRoWShpbnQgeSk7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtJbnQzMng0XSBjb3BpZWQgZnJvbSBbdGhpc10gd2l0aCBhIG5ldyB6IHZhbHVlLgogIEludDMyeDQgd2l0aFooaW50IHopOwoKICAvLy8gUmV0dXJucyBhIG5ldyBbSW50MzJ4NF0gY29waWVkIGZyb20gW3RoaXNdIHdpdGggYSBuZXcgdyB2YWx1ZS4KICBJbnQzMng0IHdpdGhXKGludCB3KTsKCiAgLy8vIEV4dHJhY3RlZCB4IHZhbHVlLiBSZXR1cm5zIGZhbHNlIGZvciAwLCB0cnVlIGZvciBhbnkgb3RoZXIgdmFsdWUuCiAgYm9vbCBnZXQgZmxhZ1g7CgogIC8vLyBFeHRyYWN0ZWQgeSB2YWx1ZS4gUmV0dXJucyBmYWxzZSBmb3IgMCwgdHJ1ZSBmb3IgYW55IG90aGVyIHZhbHVlLgogIGJvb2wgZ2V0IGZsYWdZOwoKICAvLy8gRXh0cmFjdGVkIHogdmFsdWUuIFJldHVybnMgZmFsc2UgZm9yIDAsIHRydWUgZm9yIGFueSBvdGhlciB2YWx1ZS4KICBib29sIGdldCBmbGFnWjsKCiAgLy8vIEV4dHJhY3RlZCB3IHZhbHVlLiBSZXR1cm5zIGZhbHNlIGZvciAwLCB0cnVlIGZvciBhbnkgb3RoZXIgdmFsdWUuCiAgYm9vbCBnZXQgZmxhZ1c7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtJbnQzMng0XSBjb3BpZWQgZnJvbSBbdGhpc10gd2l0aCBhIG5ldyB4IHZhbHVlLgogIEludDMyeDQgd2l0aEZsYWdYKGJvb2wgeCk7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtJbnQzMng0XSBjb3BpZWQgZnJvbSBbdGhpc10gd2l0aCBhIG5ldyB5IHZhbHVlLgogIEludDMyeDQgd2l0aEZsYWdZKGJvb2wgeSk7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtJbnQzMng0XSBjb3BpZWQgZnJvbSBbdGhpc10gd2l0aCBhIG5ldyB6IHZhbHVlLgogIEludDMyeDQgd2l0aEZsYWdaKGJvb2wgeik7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtJbnQzMng0XSBjb3BpZWQgZnJvbSBbdGhpc10gd2l0aCBhIG5ldyB3IHZhbHVlLgogIEludDMyeDQgd2l0aEZsYWdXKGJvb2wgdyk7CgogIC8vLyBNZXJnZSBbdHJ1ZVZhbHVlXSBhbmQgW2ZhbHNlVmFsdWVdIGJhc2VkIG9uIFt0aGlzXScgYml0IG1hc2s6CiAgLy8vIFNlbGVjdCBiaXQgZnJvbSBbdHJ1ZVZhbHVlXSB3aGVuIGJpdCBpbiBbdGhpc10gaXMgb24uCiAgLy8vIFNlbGVjdCBiaXQgZnJvbSBbZmFsc2VWYWx1ZV0gd2hlbiBiaXQgaW4gW3RoaXNdIGlzIG9mZi4KICBGbG9hdDMyeDQgc2VsZWN0KEZsb2F0MzJ4NCB0cnVlVmFsdWUsIEZsb2F0MzJ4NCBmYWxzZVZhbHVlKTsKfQoKLyoqCiAqIEZsb2F0NjR4MiBpbW11dGFibGUgdmFsdWUgdHlwZSBhbmQgb3BlcmF0aW9ucy4KICoKICogRmxvYXQ2NHgyIHN0b3JlcyAyIDY0LWJpdCBmbG9hdGluZyBwb2ludCB2YWx1ZXMgaW4gImxhbmVzIi4KICogVGhlIGxhbmVzIGFyZSAieCIgYW5kICJ5IiByZXNwZWN0aXZlbHkuCiAqLwphYnN0cmFjdCBjbGFzcyBGbG9hdDY0eDIgewogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQ2NHgyKGRvdWJsZSB4LCBkb3VibGUgeSk7CiAgZXh0ZXJuYWwgZmFjdG9yeSBGbG9hdDY0eDIuc3BsYXQoZG91YmxlIHYpOwogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQ2NHgyLnplcm8oKTsKCiAgLy8vIFVzZXMgdGhlICJ4IiBhbmQgInkiIGxhbmVzIGZyb20gW3ZdLgogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQ2NHgyLmZyb21GbG9hdDMyeDQoRmxvYXQzMng0IHYpOwoKICAvLy8gQWRkaXRpb24gb3BlcmF0b3IuCiAgRmxvYXQ2NHgyIG9wZXJhdG9yICsoRmxvYXQ2NHgyIG90aGVyKTsKCiAgLy8vIE5lZ2F0ZSBvcGVyYXRvci4KICBGbG9hdDY0eDIgb3BlcmF0b3IgLSgpOwoKICAvLy8gU3VidHJhY3Rpb24gb3BlcmF0b3IuCiAgRmxvYXQ2NHgyIG9wZXJhdG9yIC0oRmxvYXQ2NHgyIG90aGVyKTsKCiAgLy8vIE11bHRpcGxpY2F0aW9uIG9wZXJhdG9yLgogIEZsb2F0NjR4MiBvcGVyYXRvciAqKEZsb2F0NjR4MiBvdGhlcik7CgogIC8vLyBEaXZpc2lvbiBvcGVyYXRvci4KICBGbG9hdDY0eDIgb3BlcmF0b3IgLyhGbG9hdDY0eDIgb3RoZXIpOwoKICAvLy8gUmV0dXJucyBhIGNvcHkgb2YgW3RoaXNdIGVhY2ggbGFuZSBiZWluZyBzY2FsZWQgYnkgW3NdLgogIC8vLyBFcXVpdmFsZW50IHRvIHRoaXMgKiBuZXcgRmxvYXQ2NHgyLnNwbGF0KHMpCiAgRmxvYXQ2NHgyIHNjYWxlKGRvdWJsZSBzKTsKCiAgLy8vIFJldHVybnMgdGhlIGxhbmUtd2lzZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzIFtGbG9hdDY0eDJdLgogIEZsb2F0NjR4MiBhYnMoKTsKCiAgLy8vIExhbmUtd2lzZSBjbGFtcCBbdGhpc10gdG8gYmUgaW4gdGhlIHJhbmdlIFtsb3dlckxpbWl0XS1bdXBwZXJMaW1pdF0uCiAgRmxvYXQ2NHgyIGNsYW1wKEZsb2F0NjR4MiBsb3dlckxpbWl0LCBGbG9hdDY0eDIgdXBwZXJMaW1pdCk7CgogIC8vLyBFeHRyYWN0ZWQgeCB2YWx1ZS4KICBkb3VibGUgZ2V0IHg7CgogIC8vLyBFeHRyYWN0ZWQgeSB2YWx1ZS4KICBkb3VibGUgZ2V0IHk7CgogIC8vLyBFeHRyYWN0IHRoZSBzaWduIGJpdHMgZnJvbSBlYWNoIGxhbmUgcmV0dXJuIHRoZW0gaW4gdGhlIGZpcnN0IDIgYml0cy4KICAvLy8gIngiIGxhbmUgaXMgYml0IDAuCiAgLy8vICJ5IiBsYW5lIGlzIGJpdCAxLgogIGludCBnZXQgc2lnbk1hc2s7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtGbG9hdDY0eDJdIGNvcGllZCBmcm9tIFt0aGlzXSB3aXRoIGEgbmV3IHggdmFsdWUuCiAgRmxvYXQ2NHgyIHdpdGhYKGRvdWJsZSB4KTsKCiAgLy8vIFJldHVybnMgYSBuZXcgW0Zsb2F0NjR4Ml0gY29waWVkIGZyb20gW3RoaXNdIHdpdGggYSBuZXcgeSB2YWx1ZS4KICBGbG9hdDY0eDIgd2l0aFkoZG91YmxlIHkpOwoKICAvLy8gUmV0dXJucyB0aGUgbGFuZS13aXNlIG1pbmltdW0gdmFsdWUgaW4gW3RoaXNdIG9yIFtvdGhlcl0uCiAgRmxvYXQ2NHgyIG1pbihGbG9hdDY0eDIgb3RoZXIpOwoKICAvLy8gUmV0dXJucyB0aGUgbGFuZS13aXNlIG1heGltdW0gdmFsdWUgaW4gW3RoaXNdIG9yIFtvdGhlcl0uCiAgRmxvYXQ2NHgyIG1heChGbG9hdDY0eDIgb3RoZXIpOwoKICAvLy8gUmV0dXJucyB0aGUgbGFuZS13aXNlIHNxdWFyZSByb290IG9mIFt0aGlzXS4KICBGbG9hdDY0eDIgc3FydCgpOwp9Co1mAE5OPAEPATNEBCYEIgQVGQE6ASUBBDcDQCgEHAY3BhkBBkMFOkYVBU1JBUsFLSpKBj4BBkIFOkUVBU1JBUsFLSpKBjwBBkoFOk0VBU1JBUsFLSpKBkwBBkQFOkcVBU8sSR5OBUsUBS0xKk4GQAEGQwU6RhUFTyxJHk4FSxQFLTEqTgY+AQZEBTpHFQVPLEkeTxIFSxQFLTIqTgZAAQZDBTpGFQVPLEkeTxIFSxQFLTIqTgY+AQZEBTpHFQVPLEkeUBIFSxQFLTMqTgZAAQZDBTpGFQVPLEkeUBIFSxQFLTMqTgY+AQZFBTpIFQVQLUkeTRIFTBQFLTUqTwZCAQZFBTpIFQVPLEkeTxIFSxQFLTIqTgZCAQZFBTpIFQVPLEkeUBIFSxQFLTMqTgZCAQZHBTpKFQVQLUkeTRIFTBQFLTUqTwZGAQZHBTpKFQVQLUkeTRIFTBQFLTUqTwZGAQZCBTpFFQVNSQVLBS0qSgY8AgEEKAQbBk8LBh4BBk8GGQEGMAYZAQY6BhkCATEGOQVISx9IBikCATMGOQU/TDNLBi8CAQRAFgQPHCYBMzUdTxMRAgEETUcnA0hIPSlKNkowR0EgAyQiMgQvBkglBhwpAQZHBTscQj48SgVJSh0FSkQ5QkINPQkvJg0rCUU/KAYrLTUEAQZBBUQ5TEZDBTEFMwVFPAVHBhBLLyY4I1AEAQZMRxUFPwU5OQYfAQZHTCAFRgU5OQYrAQZLOwU8BTk5BiABBkdNFwVDBTY8BiwBBk1LCwVOEAU5QQY+AQZHSysFJkAFOUEGSgEGSEYLBUwFOUEGPwEGTkUiBS0qBTlBBksBBk5LCwVOEAU5QQY+AQZISywFJkAFOUEGSgEGSUYLBUwFOUEGPwEGT0UjBS0qBTlBBksBBk9LCwVOEAU5QQY+AQZJSy0FJkAFOUEGSgEGSkYLBUwFOUEGPwEGUEUkBS0qBTlBBksBBkg8PwU5QQZDAQZIQzkFSEZKSEpOSzUFOUEGTwEGSTw/BTlBBkMBBklDOQU5QQZPAgEEMQM7SgNGTRcEPgZJKAVPBikBBkYjBUMxBVEMBjoBBkcFOxxCPjxKBUlKHQVKRDlCQg09CS8mDSsJRT8oBistNQQBBkIFRDlMRkMFMQUzBUU8BUcGEEsvJjgjUAQBBksFS1AnBQ03LTsJBUQFDTAJBUApRAYqASgCAQQzAztKA0Y/EwQ/BkkoBU8GKgEGRyMFQzEFUQwGOwEGRwU8HEI+PEoFSUodBUpEOUNCDT4JMCYNLAlFPygGLC02BAEGQgVEOUxGQwUxBTMFRTwFRwYQTC8mOCRQBAEGNwVKSUwGKQEGSwVLUCcFDTgtPAkFRAUNMAkFQClEBisBKAIBBDMDO0oDSzUvBEYGUCgFTwYxAQZFOwVBLgVRDAZCAQZIHgVDFUI+PEoFSUodBUpEOUpCDUUJNyYNMwlFPygGMy09BAEGSQVEOUxGQwUxBTMFRTwFRwYQNyIvJjgrUAQBBksFSk8wBQ0/LUMJBUQFDTAJBUApRAYyASgCAQRHEAM7SgNDThsEPwZKKAU/HQYqAQZHIwVDMQU/JgY7AQZIBTwcQj48SgVJSh0FRBgFSkQ5Q0INPgkwJg0sCUU/KAYsLTYEAQZDBUQ5TEZDBTEFMwVFPAVHBUoXBhBMLyY4Mi1RHwZNKAQBBksFRE8wBQ04LTwJBUQFDTAJBUApRAYrASgCAQRJEAM7SgNDQBUEQAZHKwU/HQYrAQZIIwVDMQU/JgY8AQY+IAVEFUI+PEoFSUodBUQYBUpEOURCDT8JMSYNLQlFPygGLS03BAEGQwVEOUxGQwUxBTMFRTwFRwVKFwYQTS8mODItUR8GTigEAQZLBURPMAUNOS09CQVEBQ0wCQVAKUQGLAEoAgEERxADO0oDQ04kBD8GSigFPx0GKgEGRyMFQzEFPyYGOwEGSAU8HEI+PEoFSUodBUQYBUpEOUNCDT4JMCYNLAlFPygGLC02BAEGQwVEOUxGQwUxBTMFRTwFRwVKGAYQTC8mODItUR8GTSgEAQZLBURPMAUNOC08CQVEBQ0wCQVAKUQGKwEoAgEESRADO0oDQ0AaBEAGRysFPx0GKwEGSCMFQzEFPyYGPAEGPiAFRBVCPjxKBUlKHQVEGAVKRDlEQg0/CTEmDS0JRT8oBi0tNwQBBkMFRDlMRkMFMQUzBUU8BUcFShgGEE0vJjgyLVEfBk4oBAEGSwVETzAFDTktPQkFRAUNMAkFQClEBiwBKAIBBEcQAztKA0NONwQ/BkooBT8dBioBBkcjBUMxBT8mBjsBBkgFQxVCPjxKBUlKHQVEGAVKRDlDQg0+CTAmDSwJRT8oBiwtNgQBBkMFRDlMRkMFMQUzBUU8BUcFShkGEEwvJjgyLVEfBk0oBAEGSwVETzAFDTgtPAkFRAUNMAkFQClEBisBKAIBBEkQAztKA0NAJARABkcrBT8dBisBBkgjBUMxBT8mBjwBBj8gBUQVQj48SgVJSh0FRBgFSkQ5REINPwkxJg0tCUU/KAYtLTcEAQZDBUQ5TEZDBTEFMwVFPAVHBUoZBhBNLyY4Mi1RHwZOKAQBBksFRE8wBQ05LT0JBUQFDTAJBUApRAYsASgCAQRKLgMYSiYDQUEeBEYGSygFPx0GLAEGSSMFQzEFPyYGQAEGSQU+HEI+PEoFSUodBUQYBUpEOUVCDUAJMiYNLglFPygGLi04BAEGRQVEOUxGQwUxBTMFRTwFRwVKGAYQTi8mODItUR8GTygEAQZLBUVPMAUNOi0+CQVEBQ0wCQVAKUQGLQEoAgEESi8DGEomBEYGSygFPx0GLAEGSSMFPyYGQAEGSQU+HEI+PEoFSUodBUQYBUpEOUVCDUAJMiYNLglFPygGLi04BAEGRAVEOUxGQwUxBTMFRTwFRwVKGQYQTi8mODItUR8GTygEAQZLBUVPMAUNOi0+CQVEBQ0wCQVAKUQGLQEoAgEEQhADQUUERQZGLwU/HgYuAQZLIwU/JwZFAQZLBUAcQj48SgVJSh0FRBgFSkQ5R0INQgk0Jg0wCUU/KAYwLToEAQZGBUQ5TEZDBTEFMwVFPAVHBUobBhBQLyY4Mi1RHwZRKAQBBjkFUEIGNQEGSwVHTzAFDTwtQAkFRAUNMAkFQClEBi8BKQIBBEAQA0FFBEEGRC8FPx4GLAEGSSMFPycGQQEGSQU+HEI+PEoFSUodBUQYBUpEOUVCDUAJMiYNLglFPygGLi04BAEGRQVEOUxGQwUxBTMFRTwFRwVKGwYQTi8mODItUR8GTygEAQY5BUxABjEBBksFRk8wBQ06LT4JBUQFDTAJBUApRAYtASkCAQRCEANBRQRFBkY3BT8eBi4BBksjBT8nBkUBBjkFUEIGNQEGSwVAHEI+PEoFSUodBUQYBUpEOUdCDUIJNCYNMAlFPygGMC06BAEGRwVEOUxGQwUxBTMFRTwFRwVKGwYQUC8mODItUR8GUSgEAQZLBUdPMAUNPC1ACQVEBQ0wCQVAKUQGLwEpAgEEMgM/NgQbRi4lOQFOGjkBGSkBFxoBHCkBHykBGSkBHCUBJSwBHygBKC8BGCIBHCUBPjIdAUATAUs/ARkQARkQARkQARkQAUwZGRkZFAEwHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIAFQHwFCSikzAUcdAUcdAUcdAUcdAUAiAUAiASkUASgaATseAgEEGwMxNgQZOEE7ASAlASElASElARklARwlAScNAScNAScNAScNAUoZGRkZFAEwHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIAFQHQFCSCkvAUUYAUUYAUUYAUUYAUgSAUgSAUgSAUgSAUUdAUUdAUUdAUUdAUQ8Pj8CAQQyAz8rBBsyLiUBKzkBGSkBFxoBHCkBHykBGSkBPjIdAUATAUs/ARkQARkQAUwZGRQBRx0BRx0BQCIBQCIBMxQCAQ9kYXJ0OnR5cGVkX2RhdGFTb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvX2ludGVybmFsL3ZtL2xpYi90eXBlZF9kYXRhX3BhdGNoLmRhcnTAAiTOLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgovLy8gTm90ZTogdGhlIFZNIGNvbmNhdGVuYXRlcyBhbGwgcGF0Y2ggZmlsZXMgaW50byBhIHNpbmdsZSBwYXRjaCBmaWxlLiBUaGlzCi8vLyBmaWxlIGlzIHRoZSBmaXJzdCBwYXRjaCBpbiAiZGFydDp0eXBlZF9kYXRhIiB3aGljaCBjb250YWlucyBhbGwgdGhlIGltcG9ydHMKLy8vIHVzZWQgYnkgcGF0Y2hlcyBvZiB0aGF0IGxpYnJhcnkuIFdlIHBsYW4gdG8gY2hhbmdlIHRoaXMgd2hlbiB3ZSBoYXZlIGEKLy8vIHNoYXJlZCBmcm9udCBlbmQgYW5kIHNpbXBseSB1c2UgcGFydHMuCgppbXBvcnQgImRhcnQ6X2ludGVybmFsIgogICAgc2hvdwogICAgICAgIENsYXNzSUQsCiAgICAgICAgQ29kZVVuaXRzLAogICAgICAgIEV4cGFuZEl0ZXJhYmxlLAogICAgICAgIEZvbGxvd2VkQnlJdGVyYWJsZSwKICAgICAgICBJdGVyYWJsZUVsZW1lbnRFcnJvciwKICAgICAgICBMaXN0TWFwVmlldywKICAgICAgICBMaXN0cywKICAgICAgICBNYXBwZWRJdGVyYWJsZSwKICAgICAgICBNYXBwZWRJdGVyYWJsZSwKICAgICAgICBSZXZlcnNlZExpc3RJdGVyYWJsZSwKICAgICAgICBTa2lwV2hpbGVJdGVyYWJsZSwKICAgICAgICBTb3J0LAogICAgICAgIFN1Ykxpc3RJdGVyYWJsZSwKICAgICAgICBUYWtlV2hpbGVJdGVyYWJsZSwKICAgICAgICBXaGVyZUl0ZXJhYmxlLAogICAgICAgIFdoZXJlVHlwZUl0ZXJhYmxlLAogICAgICAgIHBhdGNoOwoKaW1wb3J0ICJkYXJ0OmNvbGxlY3Rpb24iIHNob3cgTGlzdEJhc2U7CgppbXBvcnQgJ2RhcnQ6bWF0aCcgc2hvdyBSYW5kb207CgovLy8gVGhlcmUgYXJlIG5vIHBhcnRzIGluIHBhdGNoIGxpYnJhcnk6CgpAcGF0Y2gKY2xhc3MgQnl0ZURhdGEgaW1wbGVtZW50cyBUeXBlZERhdGEgewogIEBwYXRjaAogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBmYWN0b3J5IEJ5dGVEYXRhKGludCBsZW5ndGgpIHsKICAgIGZpbmFsIGxpc3QgPSBuZXcgVWludDhMaXN0KGxlbmd0aCkgYXMgX1R5cGVkTGlzdDsKICAgIF9yYW5nZUNoZWNrKGxpc3QubGVuZ3RoSW5CeXRlcywgMCwgbGVuZ3RoKTsKICAgIHJldHVybiBuZXcgX0J5dGVEYXRhVmlldy5fKGxpc3QsIDAsIGxlbmd0aCk7CiAgfQoKICAvLyBDYWxsZWQgZGlyZWN0bHkgZnJvbSBDIGNvZGUuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGZhY3RvcnkgQnl0ZURhdGEuX3ZpZXcoX1R5cGVkTGlzdCB0eXBlZERhdGEsIGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgbGVuZ3RoKSB7CiAgICBfcmFuZ2VDaGVjayh0eXBlZERhdGEubGVuZ3RoSW5CeXRlcywgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICAgIHJldHVybiBuZXcgX0J5dGVEYXRhVmlldy5fKHR5cGVkRGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9Cn0KCi8vIEJhc2VkIGNsYXNzIGZvciBfVHlwZWRMaXN0IHRoYXQgcHJvdmlkZXMgY29tbW9uIG1ldGhvZHMgZm9yIGltcGxlbWVudGluZwovLyB0aGUgY29sbGVjdGlvbiBhbmQgbGlzdCBpbnRlcmZhY2VzLgovLyBUaGlzIGNsYXNzIGRvZXMgbm90IGV4dGVuZCBMaXN0QmFzZTxUPiBzaW5jZSB0aGF0IHdvdWxkIGFkZCB0eXBlIGFyZ3VtZW50cwovLyB0byBpbnN0YW5jZXMgb2YgX1R5cGVMaXN0QmFzZS4gSW5zdGVhZCB0aGUgc3ViY2xhc3NlcyB1c2UgdHlwZSBzcGVjaWZpYwovLyBtaXhpbnMgKGxpa2UgX0ludExpc3RNaXhpbiwgX0RvdWJsZUxpc3RNaXhpbikgdG8gaW1wbGVtZW50IExpc3RCYXNlPFQ+LgphYnN0cmFjdCBjbGFzcyBfVHlwZWRMaXN0QmFzZSB7CiAgaW50IGdldCBsZW5ndGg7CiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXM7CiAgaW50IGdldCBvZmZzZXRJbkJ5dGVzOwogIF9CeXRlQnVmZmVyIGdldCBidWZmZXI7CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIENvbGxlY3Rpb24gaW50ZXJmYWNlLgogIFN0cmluZyBqb2luKFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKSB7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgYnVmZmVyLndyaXRlQWxsKHRoaXMgYXMgSXRlcmFibGUsIHNlcGFyYXRvcik7CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICBib29sIGdldCBpc0VtcHR5IHsKICAgIHJldHVybiB0aGlzLmxlbmd0aCA9PSAwOwogIH0KCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiAhaXNFbXB0eTsKCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgTGlzdCBpbnRlcmZhY2UuCgogIHNldCBsZW5ndGgobmV3TGVuZ3RoKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlc2l6ZSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICBib29sIHJlbW92ZShPYmplY3QgZWxlbWVudCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIHJlbW92ZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIHJlcGxhY2VSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlIGl0ZXJhYmxlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgT2JqZWN0IGludGVyZmFjZS4KICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBMaXN0QmFzZS5saXN0VG9TdHJpbmcodGhpcyBhcyBMaXN0KTsKCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgoKICAvLyBSZXR1cm5zIHRydWUgaWYgb3BlcmF0aW9uIHN1Y2NlZWRzLgogIC8vICdmcm9tQ2lkJyBhbmQgJ3RvQ2lkJyBtYXkgYmUgY2lkLXMgb2YgdGhlIHZpZXdzIGFuZCB0aGVyZWZvcmUgbWF5IG5vdAogIC8vIG1hdGNoIHRoZSBjaWRzIG9mICd0aGlzJyBhbmQgJ2Zyb20nLgogIC8vIFVzZXMgdG9DaWQgYW5kIGZyb21DaWQgdG8gZGVjaWRlIGlmIGNsYW1waW5nIGlzIG5lY2Vzc2FyeS4KICAvLyBFbGVtZW50IHNpemUgb2YgdG9DaWQgYW5kIGZyb21DaWQgbXVzdCBtYXRjaCAodGVzdCBhdCBjYWxsZXIpLgogIGJvb2wgX3NldFJhbmdlKGludCBzdGFydEluQnl0ZXMsIGludCBsZW5ndGhJbkJ5dGVzLCBfVHlwZWRMaXN0QmFzZSBmcm9tLAogICAgICBpbnQgc3RhcnRGcm9tSW5CeXRlcywgaW50IHRvQ2lkLCBpbnQgZnJvbUNpZCkgbmF0aXZlICJUeXBlZERhdGFfc2V0UmFuZ2UiOwp9CgptaXhpbiBfSW50TGlzdE1peGluIGltcGxlbWVudHMgTGlzdDxpbnQ+IHsKICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlczsKICBpbnQgZ2V0IG9mZnNldEluQnl0ZXM7CiAgX0J5dGVCdWZmZXIgZ2V0IGJ1ZmZlcjsKCiAgSXRlcmFibGU8VD4gd2hlcmVUeXBlPFQ+KCkgPT4gbmV3IFdoZXJlVHlwZUl0ZXJhYmxlPFQ+KHRoaXMpOwoKICBJdGVyYWJsZTxpbnQ+IGZvbGxvd2VkQnkoSXRlcmFibGU8aW50PiBvdGhlcikgPT4KICAgICAgbmV3IEZvbGxvd2VkQnlJdGVyYWJsZTxpbnQ+LmZpcnN0RWZmaWNpZW50KHRoaXMsIG90aGVyKTsKCiAgTGlzdDxSPiBjYXN0PFI+KCkgPT4gTGlzdC5jYXN0RnJvbTxpbnQsIFI+KHRoaXMpOwogIHZvaWQgc2V0IGZpcnN0KGludCB2YWx1ZSkgewogICAgaWYgKHRoaXMubGVuZ3RoID09IDApIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KDAsIHRoaXMpOwogICAgdGhpc1swXSA9IHZhbHVlOwogIH0KCiAgdm9pZCBzZXQgbGFzdChpbnQgdmFsdWUpIHsKICAgIGlmICh0aGlzLmxlbmd0aCA9PSAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleCgwLCB0aGlzKTsKICAgIHRoaXNbdGhpcy5sZW5ndGggLSAxXSA9IHZhbHVlOwogIH0KCiAgaW50IGluZGV4V2hlcmUoYm9vbCB0ZXN0KGludCBlbGVtZW50KSwgW2ludCBzdGFydCA9IDBdKSB7CiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDA7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBpZiAodGVzdCh0aGlzW2ldKSkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBpbnQgbGFzdEluZGV4V2hlcmUoYm9vbCB0ZXN0KGludCBlbGVtZW50KSwgW2ludCBzdGFydF0pIHsKICAgIGlmIChzdGFydCA9PSBudWxsIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSBzdGFydCA9IHRoaXMubGVuZ3RoIC0gMTsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA+PSAwOyBpLS0pIHsKICAgICAgaWYgKHRlc3QodGhpc1tpXSkpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgTGlzdDxpbnQ+IG9wZXJhdG9yICsoTGlzdDxpbnQ+IG90aGVyKSB7CiAgICBpbnQgdG90YWxMZW5ndGggPSB0aGlzLmxlbmd0aCArIG90aGVyLmxlbmd0aDsKICAgIHJldHVybiA8aW50PltdCiAgICAgIC4ubGVuZ3RoID0gdG90YWxMZW5ndGgKICAgICAgLi5zZXRSYW5nZSgwLCB0aGlzLmxlbmd0aCwgdGhpcykKICAgICAgLi5zZXRSYW5nZSh0aGlzLmxlbmd0aCwgdG90YWxMZW5ndGgsIG90aGVyKTsKICB9CgogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB2b2lkIHNodWZmbGUoW1JhbmRvbSByYW5kb21dKSB7CiAgICByYW5kb20gPz89IG5ldyBSYW5kb20oKTsKICAgIHZhciBpID0gdGhpcy5sZW5ndGg7CiAgICB3aGlsZSAoaSA+IDEpIHsKICAgICAgaW50IHBvcyA9IHJhbmRvbS5uZXh0SW50KGkpOwogICAgICBpIC09IDE7CiAgICAgIHZhciB0bXAgPSB0aGlzW2ldOwogICAgICB0aGlzW2ldID0gdGhpc1twb3NdOwogICAgICB0aGlzW3Bvc10gPSB0bXA7CiAgICB9CiAgfQoKICBJdGVyYWJsZTxpbnQ+IHdoZXJlKGJvb2wgZihpbnQgZWxlbWVudCkpID0+IG5ldyBXaGVyZUl0ZXJhYmxlPGludD4odGhpcywgZik7CgogIEl0ZXJhYmxlPGludD4gdGFrZShpbnQgbikgPT4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxpbnQ+KHRoaXMsIDAsIG4pOwoKICBJdGVyYWJsZTxpbnQ+IHRha2VXaGlsZShib29sIHRlc3QoaW50IGVsZW1lbnQpKSA9PgogICAgICBuZXcgVGFrZVdoaWxlSXRlcmFibGU8aW50Pih0aGlzLCB0ZXN0KTsKCiAgSXRlcmFibGU8aW50PiBza2lwKGludCBuKSA9PiBuZXcgU3ViTGlzdEl0ZXJhYmxlPGludD4odGhpcywgbiwgbnVsbCk7CgogIEl0ZXJhYmxlPGludD4gc2tpcFdoaWxlKGJvb2wgdGVzdChpbnQgZWxlbWVudCkpID0+CiAgICAgIG5ldyBTa2lwV2hpbGVJdGVyYWJsZTxpbnQ+KHRoaXMsIHRlc3QpOwoKICBJdGVyYWJsZTxpbnQ+IGdldCByZXZlcnNlZCA9PiBuZXcgUmV2ZXJzZWRMaXN0SXRlcmFibGU8aW50Pih0aGlzKTsKCiAgTWFwPGludCwgaW50PiBhc01hcCgpID0+IG5ldyBMaXN0TWFwVmlldzxpbnQ+KHRoaXMpOwoKICBJdGVyYWJsZTxpbnQ+IGdldFJhbmdlKGludCBzdGFydCwgW2ludCBlbmRdKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICByZXR1cm4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxpbnQ+KHRoaXMsIHN0YXJ0LCBlbmQpOwogIH0KCiAgSXRlcmF0b3I8aW50PiBnZXQgaXRlcmF0b3IgPT4gbmV3IF9UeXBlZExpc3RJdGVyYXRvcjxpbnQ+KHRoaXMpOwoKICBMaXN0PGludD4gdG9MaXN0KHtib29sIGdyb3dhYmxlOiB0cnVlfSkgewogICAgcmV0dXJuIG5ldyBMaXN0PGludD4uZnJvbSh0aGlzLCBncm93YWJsZTogZ3Jvd2FibGUpOwogIH0KCiAgU2V0PGludD4gdG9TZXQoKSB7CiAgICByZXR1cm4gbmV3IFNldDxpbnQ+LmZyb20odGhpcyk7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmKGludCBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBmKHRoaXNbaV0pOwogICAgfQogIH0KCiAgaW50IHJlZHVjZShpbnQgY29tYmluZShpbnQgdmFsdWUsIGludCBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgaWYgKGxlbiA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHZhciB2YWx1ZSA9IHRoaXNbMF07CiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgKytpKSB7CiAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgdGhpc1tpXSk7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBUIGZvbGQ8VD4oVCBpbml0aWFsVmFsdWUsIFQgY29tYmluZShUIGluaXRpYWxWYWx1ZSwgaW50IGVsZW1lbnQpKSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIGluaXRpYWxWYWx1ZSA9IGNvbWJpbmUoaW5pdGlhbFZhbHVlLCB0aGlzW2ldKTsKICAgIH0KICAgIHJldHVybiBpbml0aWFsVmFsdWU7CiAgfQoKICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKGludCBlbGVtZW50KSkgPT4gbmV3IE1hcHBlZEl0ZXJhYmxlPGludCwgVD4odGhpcywgZik7CgogIEl0ZXJhYmxlPFQ+IGV4cGFuZDxUPihJdGVyYWJsZTxUPiBmKGludCBlbGVtZW50KSkgPT4KICAgICAgbmV3IEV4cGFuZEl0ZXJhYmxlPGludCwgVD4odGhpcywgZik7CgogIGJvb2wgZXZlcnkoYm9vbCBmKGludCBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpZiAoIWYodGhpc1tpXSkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgYm9vbCBhbnkoYm9vbCBmKGludCBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpZiAoZih0aGlzW2ldKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBpbnQgZmlyc3RXaGVyZShib29sIHRlc3QoaW50IGVsZW1lbnQpLCB7aW50IG9yRWxzZSgpfSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBpbnQgbGFzdFdoZXJlKGJvb2wgdGVzdChpbnQgZWxlbWVudCksIHtpbnQgb3JFbHNlKCl9KSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICB9CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgaW50IHNpbmdsZVdoZXJlKGJvb2wgdGVzdChpbnQgZWxlbWVudCksIHtpbnQgb3JFbHNlKCl9KSB7CiAgICB2YXIgcmVzdWx0ID0gbnVsbDsKICAgIGJvb2wgZm91bmRNYXRjaGluZyA9IGZhbHNlOwogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHsKICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsKICAgICAgICBmb3VuZE1hdGNoaW5nID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHJldHVybiByZXN1bHQ7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgaW50IGVsZW1lbnRBdChpbnQgaW5kZXgpIHsKICAgIHJldHVybiB0aGlzW2luZGV4XTsKICB9CgogIHZvaWQgYWRkKGludCB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8aW50PiB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBpbnNlcnQoaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgaW5zZXJ0IGludG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBpbnNlcnRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxpbnQ+IHZhbHVlcykgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBpbnNlcnQgaW50byBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIHNvcnQoW2ludCBjb21wYXJlKGludCBhLCBpbnQgYildKSB7CiAgICBTb3J0LnNvcnQodGhpcywgY29tcGFyZSA/PyBDb21wYXJhYmxlLmNvbXBhcmUpOwogIH0KCiAgaW50IGluZGV4T2YoaW50IGVsZW1lbnQsIFtpbnQgc3RhcnQgPSAwXSkgewogICAgaWYgKHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB7CiAgICAgIHJldHVybiAtMTsKICAgIH0gZWxzZSBpZiAoc3RhcnQgPCAwKSB7CiAgICAgIHN0YXJ0ID0gMDsKICAgIH0KICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBpbnQgbGFzdEluZGV4T2YoaW50IGVsZW1lbnQsIFtpbnQgc3RhcnQgPSBudWxsXSkgewogICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHsKICAgICAgc3RhcnQgPSB0aGlzLmxlbmd0aCAtIDE7CiAgICB9IGVsc2UgaWYgKHN0YXJ0IDwgMCkgewogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGlmICh0aGlzW2ldID09IGVsZW1lbnQpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgaW50IHJlbW92ZUxhc3QoKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIGludCByZW1vdmVBdChpbnQgaW5kZXgpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoaW50IGVsZW1lbnQpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KGludCBlbGVtZW50KSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICBpbnQgZ2V0IGZpcnN0IHsKICAgIGlmIChsZW5ndGggPiAwKSByZXR1cm4gdGhpc1swXTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgaW50IGdldCBsYXN0IHsKICAgIGlmIChsZW5ndGggPiAwKSByZXR1cm4gdGhpc1tsZW5ndGggLSAxXTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgaW50IGdldCBzaW5nbGUgewogICAgaWYgKGxlbmd0aCA9PSAxKSByZXR1cm4gdGhpc1swXTsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgfQoKICB2b2lkIHNldEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPGludD4gaXRlcmFibGUpIHsKICAgIGZpbmFsIGVuZCA9IGl0ZXJhYmxlLmxlbmd0aCArIGluZGV4OwogICAgc2V0UmFuZ2UoaW5kZXgsIGVuZCwgaXRlcmFibGUpOwogIH0KCiAgdm9pZCBmaWxsUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBbaW50IGZpbGxWYWx1ZV0pIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7CiAgICAgIHRoaXNbaV0gPSBmaWxsVmFsdWU7CiAgICB9CiAgfQp9CgptaXhpbiBfVHlwZWRJbnRMaXN0TWl4aW48U3Bhd25lZFR5cGUgZXh0ZW5kcyBMaXN0PGludD4+IG9uIF9JbnRMaXN0TWl4aW4KICAgIGltcGxlbWVudHMgTGlzdDxpbnQ+IHsKICBTcGF3bmVkVHlwZSBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKTsKCiAgdm9pZCBzZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPGludD4gZnJvbSwgW2ludCBza2lwQ291bnQgPSAwXSkgewogICAgLy8gQ2hlY2sgcmFuZ2VzLgogICAgaWYgKDAgPiBzdGFydCB8fCBzdGFydCA+IGVuZCB8fCBlbmQgPiBsZW5ndGgpIHsKICAgICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgbGVuZ3RoKTsgLy8gQWx3YXlzIHRocm93cy4KICAgICAgYXNzZXJ0KGZhbHNlKTsKICAgIH0KICAgIGlmIChza2lwQ291bnQgPCAwKSB7CiAgICAgIHRocm93IFJhbmdlRXJyb3IucmFuZ2Uoc2tpcENvdW50LCAwLCBudWxsLCAic2tpcENvdW50Iik7CiAgICB9CgogICAgZmluYWwgY291bnQgPSBlbmQgLSBzdGFydDsKICAgIGlmICgoZnJvbS5sZW5ndGggLSBza2lwQ291bnQpIDwgY291bnQpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vRmV3KCk7CiAgICB9CgogICAgaWYgKGNvdW50ID09IDApIHJldHVybjsKCiAgICBpZiAoZnJvbSBpcyBfVHlwZWRMaXN0QmFzZSkgewogICAgICAvLyBOb3RlOiBfVHlwZWRMaXN0QmFzZSBpcyBub3QgcmVsYXRlZCB0byBJdGVyYWJsZTxpbnQ+IHNvIHRoZXJlIGlzCiAgICAgIC8vIG5vIHByb21vdGlvbiBoZXJlLgogICAgICBmaW5hbCBmcm9tQXNUeXBlZExpc3QgPSBmcm9tIGFzIF9UeXBlZExpc3RCYXNlOwogICAgICBpZiAodGhpcy5lbGVtZW50U2l6ZUluQnl0ZXMgPT0gZnJvbUFzVHlwZWRMaXN0LmVsZW1lbnRTaXplSW5CeXRlcykgewogICAgICAgIGlmICgoY291bnQgPCAxMCkgJiYgKGZyb21Bc1R5cGVkTGlzdC5idWZmZXIgIT0gdGhpcy5idWZmZXIpKSB7CiAgICAgICAgICBMaXN0cy5jb3B5KGZyb20gYXMgTGlzdDxpbnQ+LCBza2lwQ291bnQsIHRoaXMsIHN0YXJ0LCBjb3VudCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmJ1ZmZlci5fZGF0YS5fc2V0UmFuZ2UoCiAgICAgICAgICAgIHN0YXJ0ICogZWxlbWVudFNpemVJbkJ5dGVzICsgdGhpcy5vZmZzZXRJbkJ5dGVzLAogICAgICAgICAgICBjb3VudCAqIGVsZW1lbnRTaXplSW5CeXRlcywKICAgICAgICAgICAgZnJvbUFzVHlwZWRMaXN0LmJ1ZmZlci5fZGF0YSwKICAgICAgICAgICAgc2tpcENvdW50ICogZWxlbWVudFNpemVJbkJ5dGVzICsgZnJvbUFzVHlwZWRMaXN0Lm9mZnNldEluQnl0ZXMsCiAgICAgICAgICAgIENsYXNzSUQuZ2V0SUQodGhpcyksCiAgICAgICAgICAgIENsYXNzSUQuZ2V0SUQoZnJvbSkpKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGZyb21Bc1R5cGVkTGlzdC5idWZmZXIgPT0gdGhpcy5idWZmZXIpIHsKICAgICAgICAvLyBEaWZmZXJlbnQgZWxlbWVudCBzaXplcywgYnV0IHNhbWUgYnVmZmVyIG1lYW5zIHRoYXQgd2UgbmVlZAogICAgICAgIC8vIGFuIGludGVybWVkaWF0ZSBzdHJ1Y3R1cmUuCiAgICAgICAgLy8gVE9ETyhzcmRqYW4pOiBPcHRpbWl6ZSB0byBza2lwIGNvcHlpbmcgaWYgdGhlIHJhbmdlIGRvZXMgbm90IG92ZXJsYXAuCiAgICAgICAgZmluYWwgZnJvbUFzTGlzdCA9IGZyb20gYXMgTGlzdDxpbnQ+OwogICAgICAgIGZpbmFsIHRlbXBCdWZmZXIgPSBfY3JlYXRlTGlzdChjb3VudCk7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgICB0ZW1wQnVmZmVyW2ldID0gZnJvbUFzTGlzdFtza2lwQ291bnQgKyBpXTsKICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgICAgIHRoaXNbaV0gPSB0ZW1wQnVmZmVyW2kgLSBzdGFydF07CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQoKICAgIExpc3Qgb3RoZXJMaXN0OwogICAgaW50IG90aGVyU3RhcnQ7CiAgICBpZiAoZnJvbSBpcyBMaXN0PGludD4pIHsKICAgICAgb3RoZXJMaXN0ID0gZnJvbTsKICAgICAgb3RoZXJTdGFydCA9IHNraXBDb3VudDsKICAgIH0gZWxzZSB7CiAgICAgIG90aGVyTGlzdCA9IGZyb20uc2tpcChza2lwQ291bnQpLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgICBvdGhlclN0YXJ0ID0gMDsKICAgIH0KICAgIGlmIChvdGhlclN0YXJ0ICsgY291bnQgPiBvdGhlckxpc3QubGVuZ3RoKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb0ZldygpOwogICAgfQogICAgTGlzdHMuY29weShvdGhlckxpc3QsIG90aGVyU3RhcnQsIHRoaXMsIHN0YXJ0LCBjb3VudCk7CiAgfQoKICBTcGF3bmVkVHlwZSBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKSB7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICB2YXIgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBTcGF3bmVkVHlwZSByZXN1bHQgPSBfY3JlYXRlTGlzdChsZW5ndGgpOwogICAgcmVzdWx0LnNldFJhbmdlKDAsIGxlbmd0aCwgdGhpcywgc3RhcnQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCm1peGluIF9Eb3VibGVMaXN0TWl4aW4gaW1wbGVtZW50cyBMaXN0PGRvdWJsZT4gewogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzOwogIGludCBnZXQgb2Zmc2V0SW5CeXRlczsKICBfQnl0ZUJ1ZmZlciBnZXQgYnVmZmVyOwoKICBJdGVyYWJsZTxUPiB3aGVyZVR5cGU8VD4oKSA9PiBuZXcgV2hlcmVUeXBlSXRlcmFibGU8VD4odGhpcyk7CgogIEl0ZXJhYmxlPGRvdWJsZT4gZm9sbG93ZWRCeShJdGVyYWJsZTxkb3VibGU+IG90aGVyKSA9PgogICAgICBuZXcgRm9sbG93ZWRCeUl0ZXJhYmxlPGRvdWJsZT4uZmlyc3RFZmZpY2llbnQodGhpcywgb3RoZXIpOwoKICBMaXN0PFI+IGNhc3Q8Uj4oKSA9PiBMaXN0LmNhc3RGcm9tPGRvdWJsZSwgUj4odGhpcyk7CiAgdm9pZCBzZXQgZmlyc3QoZG91YmxlIHZhbHVlKSB7CiAgICBpZiAodGhpcy5sZW5ndGggPT0gMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoMCwgdGhpcyk7CiAgICB0aGlzWzBdID0gdmFsdWU7CiAgfQoKICB2b2lkIHNldCBsYXN0KGRvdWJsZSB2YWx1ZSkgewogICAgaWYgKHRoaXMubGVuZ3RoID09IDApIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KDAsIHRoaXMpOwogICAgdGhpc1t0aGlzLmxlbmd0aCAtIDFdID0gdmFsdWU7CiAgfQoKICBpbnQgaW5kZXhXaGVyZShib29sIHRlc3QoZG91YmxlIGVsZW1lbnQpLCBbaW50IHN0YXJ0ID0gMF0pIHsKICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMDsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh0ZXN0KHRoaXNbaV0pKSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIGludCBsYXN0SW5kZXhXaGVyZShib29sIHRlc3QoZG91YmxlIGVsZW1lbnQpLCBbaW50IHN0YXJ0XSkgewogICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHN0YXJ0ID0gdGhpcy5sZW5ndGggLSAxOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpID49IDA7IGktLSkgewogICAgICBpZiAodGVzdCh0aGlzW2ldKSkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBMaXN0PGRvdWJsZT4gb3BlcmF0b3IgKyhMaXN0PGRvdWJsZT4gb3RoZXIpIHsKICAgIGludCB0b3RhbExlbmd0aCA9IHRoaXMubGVuZ3RoICsgb3RoZXIubGVuZ3RoOwogICAgcmV0dXJuIDxkb3VibGU+W10KICAgICAgLi5sZW5ndGggPSB0b3RhbExlbmd0aAogICAgICAuLnNldFJhbmdlKDAsIHRoaXMubGVuZ3RoLCB0aGlzKQogICAgICAuLnNldFJhbmdlKHRoaXMubGVuZ3RoLCB0b3RhbExlbmd0aCwgb3RoZXIpOwogIH0KCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpZiAodGhpc1tpXSA9PSBlbGVtZW50KSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgc2h1ZmZsZShbUmFuZG9tIHJhbmRvbV0pIHsKICAgIHJhbmRvbSA/Pz0gbmV3IFJhbmRvbSgpOwogICAgdmFyIGkgPSB0aGlzLmxlbmd0aDsKICAgIHdoaWxlIChpID4gMSkgewogICAgICBpbnQgcG9zID0gcmFuZG9tLm5leHRJbnQoaSk7CiAgICAgIGkgLT0gMTsKICAgICAgdmFyIHRtcCA9IHRoaXNbaV07CiAgICAgIHRoaXNbaV0gPSB0aGlzW3Bvc107CiAgICAgIHRoaXNbcG9zXSA9IHRtcDsKICAgIH0KICB9CgogIEl0ZXJhYmxlPGRvdWJsZT4gd2hlcmUoYm9vbCBmKGRvdWJsZSBlbGVtZW50KSkgPT4KICAgICAgbmV3IFdoZXJlSXRlcmFibGU8ZG91YmxlPih0aGlzLCBmKTsKCiAgSXRlcmFibGU8ZG91YmxlPiB0YWtlKGludCBuKSA9PiBuZXcgU3ViTGlzdEl0ZXJhYmxlPGRvdWJsZT4odGhpcywgMCwgbik7CgogIEl0ZXJhYmxlPGRvdWJsZT4gdGFrZVdoaWxlKGJvb2wgdGVzdChkb3VibGUgZWxlbWVudCkpID0+CiAgICAgIG5ldyBUYWtlV2hpbGVJdGVyYWJsZTxkb3VibGU+KHRoaXMsIHRlc3QpOwoKICBJdGVyYWJsZTxkb3VibGU+IHNraXAoaW50IG4pID0+IG5ldyBTdWJMaXN0SXRlcmFibGU8ZG91YmxlPih0aGlzLCBuLCBudWxsKTsKCiAgSXRlcmFibGU8ZG91YmxlPiBza2lwV2hpbGUoYm9vbCB0ZXN0KGRvdWJsZSBlbGVtZW50KSkgPT4KICAgICAgbmV3IFNraXBXaGlsZUl0ZXJhYmxlPGRvdWJsZT4odGhpcywgdGVzdCk7CgogIEl0ZXJhYmxlPGRvdWJsZT4gZ2V0IHJldmVyc2VkID0+IG5ldyBSZXZlcnNlZExpc3RJdGVyYWJsZTxkb3VibGU+KHRoaXMpOwoKICBNYXA8aW50LCBkb3VibGU+IGFzTWFwKCkgPT4gbmV3IExpc3RNYXBWaWV3PGRvdWJsZT4odGhpcyk7CgogIEl0ZXJhYmxlPGRvdWJsZT4gZ2V0UmFuZ2UoaW50IHN0YXJ0LCBbaW50IGVuZF0pIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIHJldHVybiBuZXcgU3ViTGlzdEl0ZXJhYmxlPGRvdWJsZT4odGhpcywgc3RhcnQsIGVuZCk7CiAgfQoKICBJdGVyYXRvcjxkb3VibGU+IGdldCBpdGVyYXRvciA9PiBuZXcgX1R5cGVkTGlzdEl0ZXJhdG9yPGRvdWJsZT4odGhpcyk7CgogIExpc3Q8ZG91YmxlPiB0b0xpc3Qoe2Jvb2wgZ3Jvd2FibGU6IHRydWV9KSB7CiAgICByZXR1cm4gbmV3IExpc3Q8ZG91YmxlPi5mcm9tKHRoaXMsIGdyb3dhYmxlOiBncm93YWJsZSk7CiAgfQoKICBTZXQ8ZG91YmxlPiB0b1NldCgpIHsKICAgIHJldHVybiBuZXcgU2V0PGRvdWJsZT4uZnJvbSh0aGlzKTsKICB9CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoZG91YmxlIGVsZW1lbnQpKSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGYodGhpc1tpXSk7CiAgICB9CiAgfQoKICBkb3VibGUgcmVkdWNlKGRvdWJsZSBjb21iaW5lKGRvdWJsZSB2YWx1ZSwgZG91YmxlIGVsZW1lbnQpKSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBpZiAobGVuID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgdmFyIHZhbHVlID0gdGhpc1swXTsKICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyArK2kpIHsKICAgICAgdmFsdWUgPSBjb21iaW5lKHZhbHVlLCB0aGlzW2ldKTsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIFQgZm9sZDxUPihUIGluaXRpYWxWYWx1ZSwgVCBjb21iaW5lKFQgaW5pdGlhbFZhbHVlLCBkb3VibGUgZWxlbWVudCkpIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgaW5pdGlhbFZhbHVlID0gY29tYmluZShpbml0aWFsVmFsdWUsIHRoaXNbaV0pOwogICAgfQogICAgcmV0dXJuIGluaXRpYWxWYWx1ZTsKICB9CgogIEl0ZXJhYmxlPFQ+IG1hcDxUPihUIGYoZG91YmxlIGVsZW1lbnQpKSA9PgogICAgICBuZXcgTWFwcGVkSXRlcmFibGU8ZG91YmxlLCBUPih0aGlzLCBmKTsKCiAgSXRlcmFibGU8VD4gZXhwYW5kPFQ+KEl0ZXJhYmxlPFQ+IGYoZG91YmxlIGVsZW1lbnQpKSA9PgogICAgICBuZXcgRXhwYW5kSXRlcmFibGU8ZG91YmxlLCBUPih0aGlzLCBmKTsKCiAgYm9vbCBldmVyeShib29sIGYoZG91YmxlIGVsZW1lbnQpKSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIGlmICghZih0aGlzW2ldKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBib29sIGFueShib29sIGYoZG91YmxlIGVsZW1lbnQpKSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIGlmIChmKHRoaXNbaV0pKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGRvdWJsZSBmaXJzdFdoZXJlKGJvb2wgdGVzdChkb3VibGUgZWxlbWVudCksIHtkb3VibGUgb3JFbHNlKCl9KSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIHZhciBlbGVtZW50ID0gdGhpc1tpXTsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHJldHVybiBlbGVtZW50OwogICAgfQogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIGRvdWJsZSBsYXN0V2hlcmUoYm9vbCB0ZXN0KGRvdWJsZSBlbGVtZW50KSwge2RvdWJsZSBvckVsc2UoKX0pIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkgewogICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgIH0KICAgIH0KICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBkb3VibGUgc2luZ2xlV2hlcmUoYm9vbCB0ZXN0KGRvdWJsZSBlbGVtZW50KSwge2RvdWJsZSBvckVsc2UoKX0pIHsKICAgIHZhciByZXN1bHQgPSBudWxsOwogICAgYm9vbCBmb3VuZE1hdGNoaW5nID0gZmFsc2U7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIHZhciBlbGVtZW50ID0gdGhpc1tpXTsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHsKICAgICAgICBpZiAoZm91bmRNYXRjaGluZykgewogICAgICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vTWFueSgpOwogICAgICAgIH0KICAgICAgICByZXN1bHQgPSBlbGVtZW50OwogICAgICAgIGZvdW5kTWF0Y2hpbmcgPSB0cnVlOwogICAgICB9CiAgICB9CiAgICBpZiAoZm91bmRNYXRjaGluZykgcmV0dXJuIHJlc3VsdDsKICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBkb3VibGUgZWxlbWVudEF0KGludCBpbmRleCkgewogICAgcmV0dXJuIHRoaXNbaW5kZXhdOwogIH0KCiAgdm9pZCBhZGQoZG91YmxlIHZhbHVlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGFkZCB0byBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxkb3VibGU+IHZhbHVlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGFkZCB0byBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIGluc2VydChpbnQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBpbnNlcnQgaW50byBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIGluc2VydEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPGRvdWJsZT4gdmFsdWVzKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGluc2VydCBpbnRvIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgc29ydChbaW50IGNvbXBhcmUoZG91YmxlIGEsIGRvdWJsZSBiKV0pIHsKICAgIFNvcnQuc29ydCh0aGlzLCBjb21wYXJlID8/IENvbXBhcmFibGUuY29tcGFyZSk7CiAgfQoKICBpbnQgaW5kZXhPZihkb3VibGUgZWxlbWVudCwgW2ludCBzdGFydCA9IDBdKSB7CiAgICBpZiAoc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIC0xOwogICAgfSBlbHNlIGlmIChzdGFydCA8IDApIHsKICAgICAgc3RhcnQgPSAwOwogICAgfQogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgdGhpcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodGhpc1tpXSA9PSBlbGVtZW50KSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIGludCBsYXN0SW5kZXhPZihkb3VibGUgZWxlbWVudCwgW2ludCBzdGFydCA9IG51bGxdKSB7CiAgICBpZiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgewogICAgICBzdGFydCA9IHRoaXMubGVuZ3RoIC0gMTsKICAgIH0gZWxzZSBpZiAoc3RhcnQgPCAwKSB7CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA+PSAwOyBpLS0pIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBkb3VibGUgcmVtb3ZlTGFzdCgpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgZG91YmxlIHJlbW92ZUF0KGludCBpbmRleCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChkb3VibGUgZWxlbWVudCkpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoZG91YmxlIGVsZW1lbnQpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIGRvdWJsZSBnZXQgZmlyc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzWzBdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBkb3VibGUgZ2V0IGxhc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzW2xlbmd0aCAtIDFdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBkb3VibGUgZ2V0IHNpbmdsZSB7CiAgICBpZiAobGVuZ3RoID09IDEpIHJldHVybiB0aGlzWzBdOwogICAgaWYgKGxlbmd0aCA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICB9CgogIHZvaWQgc2V0QWxsKGludCBpbmRleCwgSXRlcmFibGU8ZG91YmxlPiBpdGVyYWJsZSkgewogICAgZmluYWwgZW5kID0gaXRlcmFibGUubGVuZ3RoICsgaW5kZXg7CiAgICBzZXRSYW5nZShpbmRleCwgZW5kLCBpdGVyYWJsZSk7CiAgfQoKICB2b2lkIGZpbGxSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIFtkb3VibGUgZmlsbFZhbHVlXSkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHsKICAgICAgdGhpc1tpXSA9IGZpbGxWYWx1ZTsKICAgIH0KICB9Cn0KCm1peGluIF9UeXBlZERvdWJsZUxpc3RNaXhpbjxTcGF3bmVkVHlwZSBleHRlbmRzIExpc3Q8ZG91YmxlPj4KICAgIG9uIF9Eb3VibGVMaXN0TWl4aW4gaW1wbGVtZW50cyBMaXN0PGRvdWJsZT4gewogIFNwYXduZWRUeXBlIF9jcmVhdGVMaXN0KGludCBsZW5ndGgpOwoKICB2b2lkIHNldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGU8ZG91YmxlPiBmcm9tLAogICAgICBbaW50IHNraXBDb3VudCA9IDBdKSB7CiAgICAvLyBDaGVjayByYW5nZXMuCiAgICBpZiAoMCA+IHN0YXJ0IHx8IHN0YXJ0ID4gZW5kIHx8IGVuZCA+IGxlbmd0aCkgewogICAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBsZW5ndGgpOyAvLyBBbHdheXMgdGhyb3dzLgogICAgICBhc3NlcnQoZmFsc2UpOwogICAgfQogICAgaWYgKHNraXBDb3VudCA8IDApIHsKICAgICAgdGhyb3cgUmFuZ2VFcnJvci5yYW5nZShza2lwQ291bnQsIDAsIG51bGwsICJza2lwQ291bnQiKTsKICAgIH0KCiAgICBmaW5hbCBjb3VudCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKChmcm9tLmxlbmd0aCAtIHNraXBDb3VudCkgPCBjb3VudCkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29GZXcoKTsKICAgIH0KCiAgICBpZiAoY291bnQgPT0gMCkgcmV0dXJuOwoKICAgIGlmIChmcm9tIGlzIF9UeXBlZExpc3RCYXNlKSB7CiAgICAgIC8vIE5vdGU6IF9UeXBlZExpc3RCYXNlIGlzIG5vdCByZWxhdGVkIHRvIEl0ZXJhYmxlPGRvdWJsZT4gc28gdGhlcmUgaXMKICAgICAgLy8gbm8gcHJvbW90aW9uIGhlcmUuCiAgICAgIGZpbmFsIGZyb21Bc1R5cGVkTGlzdCA9IGZyb20gYXMgX1R5cGVkTGlzdEJhc2U7CiAgICAgIGlmICh0aGlzLmVsZW1lbnRTaXplSW5CeXRlcyA9PSBmcm9tQXNUeXBlZExpc3QuZWxlbWVudFNpemVJbkJ5dGVzKSB7CiAgICAgICAgaWYgKChjb3VudCA8IDEwKSAmJiAoZnJvbUFzVHlwZWRMaXN0LmJ1ZmZlciAhPSB0aGlzLmJ1ZmZlcikpIHsKICAgICAgICAgIExpc3RzLmNvcHkoZnJvbSBhcyBMaXN0PGRvdWJsZT4sIHNraXBDb3VudCwgdGhpcywgc3RhcnQsIGNvdW50KTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYnVmZmVyLl9kYXRhLl9zZXRSYW5nZSgKICAgICAgICAgICAgc3RhcnQgKiBlbGVtZW50U2l6ZUluQnl0ZXMgKyB0aGlzLm9mZnNldEluQnl0ZXMsCiAgICAgICAgICAgIGNvdW50ICogZWxlbWVudFNpemVJbkJ5dGVzLAogICAgICAgICAgICBmcm9tQXNUeXBlZExpc3QuYnVmZmVyLl9kYXRhLAogICAgICAgICAgICBza2lwQ291bnQgKiBlbGVtZW50U2l6ZUluQnl0ZXMgKyBmcm9tQXNUeXBlZExpc3Qub2Zmc2V0SW5CeXRlcywKICAgICAgICAgICAgQ2xhc3NJRC5nZXRJRCh0aGlzKSwKICAgICAgICAgICAgQ2xhc3NJRC5nZXRJRChmcm9tKSkpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZnJvbUFzVHlwZWRMaXN0LmJ1ZmZlciA9PSB0aGlzLmJ1ZmZlcikgewogICAgICAgIC8vIERpZmZlcmVudCBlbGVtZW50IHNpemVzLCBidXQgc2FtZSBidWZmZXIgbWVhbnMgdGhhdCB3ZSBuZWVkCiAgICAgICAgLy8gYW4gaW50ZXJtZWRpYXRlIHN0cnVjdHVyZS4KICAgICAgICAvLyBUT0RPKHNyZGphbik6IE9wdGltaXplIHRvIHNraXAgY29weWluZyBpZiB0aGUgcmFuZ2UgZG9lcyBub3Qgb3ZlcmxhcC4KICAgICAgICBmaW5hbCBmcm9tQXNMaXN0ID0gZnJvbSBhcyBMaXN0PGRvdWJsZT47CiAgICAgICAgZmluYWwgdGVtcEJ1ZmZlciA9IF9jcmVhdGVMaXN0KGNvdW50KTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgIHRlbXBCdWZmZXJbaV0gPSBmcm9tQXNMaXN0W3NraXBDb3VudCArIGldOwogICAgICAgIH0KICAgICAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICAgICAgdGhpc1tpXSA9IHRlbXBCdWZmZXJbaSAtIHN0YXJ0XTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CgogICAgTGlzdCBvdGhlckxpc3Q7CiAgICBpbnQgb3RoZXJTdGFydDsKICAgIGlmIChmcm9tIGlzIExpc3Q8ZG91YmxlPikgewogICAgICBvdGhlckxpc3QgPSBmcm9tOwogICAgICBvdGhlclN0YXJ0ID0gc2tpcENvdW50OwogICAgfSBlbHNlIHsKICAgICAgb3RoZXJMaXN0ID0gZnJvbS5za2lwKHNraXBDb3VudCkudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICAgIG90aGVyU3RhcnQgPSAwOwogICAgfQogICAgaWYgKG90aGVyU3RhcnQgKyBjb3VudCA+IG90aGVyTGlzdC5sZW5ndGgpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vRmV3KCk7CiAgICB9CiAgICBMaXN0cy5jb3B5KG90aGVyTGlzdCwgb3RoZXJTdGFydCwgdGhpcywgc3RhcnQsIGNvdW50KTsKICB9CgogIFNwYXduZWRUeXBlIHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pIHsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIHZhciBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIFNwYXduZWRUeXBlIHJlc3VsdCA9IF9jcmVhdGVMaXN0KGxlbmd0aCk7CiAgICByZXN1bHQuc2V0UmFuZ2UoMCwgbGVuZ3RoLCB0aGlzLCBzdGFydCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX0Zsb2F0MzJ4NExpc3RNaXhpbiBpbXBsZW1lbnRzIExpc3Q8RmxvYXQzMng0PiB7CiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXM7CiAgaW50IGdldCBvZmZzZXRJbkJ5dGVzOwogIF9CeXRlQnVmZmVyIGdldCBidWZmZXI7CgogIEZsb2F0MzJ4NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCk7CgogIEl0ZXJhYmxlPFQ+IHdoZXJlVHlwZTxUPigpID0+IG5ldyBXaGVyZVR5cGVJdGVyYWJsZTxUPih0aGlzKTsKCiAgSXRlcmFibGU8RmxvYXQzMng0PiBmb2xsb3dlZEJ5KEl0ZXJhYmxlPEZsb2F0MzJ4ND4gb3RoZXIpID0+CiAgICAgIG5ldyBGb2xsb3dlZEJ5SXRlcmFibGU8RmxvYXQzMng0Pi5maXJzdEVmZmljaWVudCh0aGlzLCBvdGhlcik7CgogIExpc3Q8Uj4gY2FzdDxSPigpID0+IExpc3QuY2FzdEZyb208RmxvYXQzMng0LCBSPih0aGlzKTsKICB2b2lkIHNldCBmaXJzdChGbG9hdDMyeDQgdmFsdWUpIHsKICAgIGlmICh0aGlzLmxlbmd0aCA9PSAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleCgwLCB0aGlzKTsKICAgIHRoaXNbMF0gPSB2YWx1ZTsKICB9CgogIHZvaWQgc2V0IGxhc3QoRmxvYXQzMng0IHZhbHVlKSB7CiAgICBpZiAodGhpcy5sZW5ndGggPT0gMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoMCwgdGhpcyk7CiAgICB0aGlzW3RoaXMubGVuZ3RoIC0gMV0gPSB2YWx1ZTsKICB9CgogIGludCBpbmRleFdoZXJlKGJvb2wgdGVzdChGbG9hdDMyeDQgZWxlbWVudCksIFtpbnQgc3RhcnQgPSAwXSkgewogICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRlc3QodGhpc1tpXSkpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgaW50IGxhc3RJbmRleFdoZXJlKGJvb2wgdGVzdChGbG9hdDMyeDQgZWxlbWVudCksIFtpbnQgc3RhcnRdKSB7CiAgICBpZiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgc3RhcnQgPSB0aGlzLmxlbmd0aCAtIDE7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGlmICh0ZXN0KHRoaXNbaV0pKSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIExpc3Q8RmxvYXQzMng0PiBvcGVyYXRvciArKExpc3Q8RmxvYXQzMng0PiBvdGhlcikgewogICAgaW50IHRvdGFsTGVuZ3RoID0gdGhpcy5sZW5ndGggKyBvdGhlci5sZW5ndGg7CiAgICByZXR1cm4gPEZsb2F0MzJ4ND5bXQogICAgICAuLmxlbmd0aCA9IHRvdGFsTGVuZ3RoCiAgICAgIC4uc2V0UmFuZ2UoMCwgdGhpcy5sZW5ndGgsIHRoaXMpCiAgICAgIC4uc2V0UmFuZ2UodGhpcy5sZW5ndGgsIHRvdGFsTGVuZ3RoLCBvdGhlcik7CiAgfQoKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIGlmICh0aGlzW2ldID09IGVsZW1lbnQpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBzaHVmZmxlKFtSYW5kb20gcmFuZG9tXSkgewogICAgcmFuZG9tID8/PSBuZXcgUmFuZG9tKCk7CiAgICB2YXIgaSA9IHRoaXMubGVuZ3RoOwogICAgd2hpbGUgKGkgPiAxKSB7CiAgICAgIGludCBwb3MgPSByYW5kb20ubmV4dEludChpKTsKICAgICAgaSAtPSAxOwogICAgICB2YXIgdG1wID0gdGhpc1tpXTsKICAgICAgdGhpc1tpXSA9IHRoaXNbcG9zXTsKICAgICAgdGhpc1twb3NdID0gdG1wOwogICAgfQogIH0KCiAgdm9pZCBzZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPEZsb2F0MzJ4ND4gZnJvbSwKICAgICAgW2ludCBza2lwQ291bnQgPSAwXSkgewogICAgLy8gQ2hlY2sgcmFuZ2VzLgogICAgaWYgKDAgPiBzdGFydCB8fCBzdGFydCA+IGVuZCB8fCBlbmQgPiBsZW5ndGgpIHsKICAgICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgbGVuZ3RoKTsgLy8gQWx3YXlzIHRocm93cy4KICAgICAgYXNzZXJ0KGZhbHNlKTsKICAgIH0KICAgIGlmIChza2lwQ291bnQgPCAwKSB7CiAgICAgIHRocm93IFJhbmdlRXJyb3IucmFuZ2Uoc2tpcENvdW50LCAwLCBudWxsLCAic2tpcENvdW50Iik7CiAgICB9CgogICAgZmluYWwgY291bnQgPSBlbmQgLSBzdGFydDsKICAgIGlmICgoZnJvbS5sZW5ndGggLSBza2lwQ291bnQpIDwgY291bnQpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vRmV3KCk7CiAgICB9CgogICAgaWYgKGNvdW50ID09IDApIHJldHVybjsKCiAgICBpZiAoZnJvbSBpcyBfVHlwZWRMaXN0QmFzZSkgewogICAgICAvLyBOb3RlOiBfVHlwZWRMaXN0QmFzZSBpcyBub3QgcmVsYXRlZCB0byBJdGVyYWJsZTxGbG9hdDMyeDQ+IHNvIHRoZXJlIGlzCiAgICAgIC8vIG5vIHByb21vdGlvbiBoZXJlLgogICAgICBmaW5hbCBmcm9tQXNUeXBlZExpc3QgPSBmcm9tIGFzIF9UeXBlZExpc3RCYXNlOwogICAgICBpZiAodGhpcy5lbGVtZW50U2l6ZUluQnl0ZXMgPT0gZnJvbUFzVHlwZWRMaXN0LmVsZW1lbnRTaXplSW5CeXRlcykgewogICAgICAgIGlmICgoY291bnQgPCAxMCkgJiYgKGZyb21Bc1R5cGVkTGlzdC5idWZmZXIgIT0gdGhpcy5idWZmZXIpKSB7CiAgICAgICAgICBMaXN0cy5jb3B5KGZyb20gYXMgTGlzdDxGbG9hdDMyeDQ+LCBza2lwQ291bnQsIHRoaXMsIHN0YXJ0LCBjb3VudCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmJ1ZmZlci5fZGF0YS5fc2V0UmFuZ2UoCiAgICAgICAgICAgIHN0YXJ0ICogZWxlbWVudFNpemVJbkJ5dGVzICsgdGhpcy5vZmZzZXRJbkJ5dGVzLAogICAgICAgICAgICBjb3VudCAqIGVsZW1lbnRTaXplSW5CeXRlcywKICAgICAgICAgICAgZnJvbUFzVHlwZWRMaXN0LmJ1ZmZlci5fZGF0YSwKICAgICAgICAgICAgc2tpcENvdW50ICogZWxlbWVudFNpemVJbkJ5dGVzICsgZnJvbUFzVHlwZWRMaXN0Lm9mZnNldEluQnl0ZXMsCiAgICAgICAgICAgIENsYXNzSUQuZ2V0SUQodGhpcyksCiAgICAgICAgICAgIENsYXNzSUQuZ2V0SUQoZnJvbSkpKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGZyb21Bc1R5cGVkTGlzdC5idWZmZXIgPT0gdGhpcy5idWZmZXIpIHsKICAgICAgICAvLyBEaWZmZXJlbnQgZWxlbWVudCBzaXplcywgYnV0IHNhbWUgYnVmZmVyIG1lYW5zIHRoYXQgd2UgbmVlZAogICAgICAgIC8vIGFuIGludGVybWVkaWF0ZSBzdHJ1Y3R1cmUuCiAgICAgICAgLy8gVE9ETyhzcmRqYW4pOiBPcHRpbWl6ZSB0byBza2lwIGNvcHlpbmcgaWYgdGhlIHJhbmdlIGRvZXMgbm90IG92ZXJsYXAuCiAgICAgICAgZmluYWwgZnJvbUFzTGlzdCA9IGZyb20gYXMgTGlzdDxGbG9hdDMyeDQ+OwogICAgICAgIGZpbmFsIHRlbXBCdWZmZXIgPSBfY3JlYXRlTGlzdChjb3VudCk7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgICB0ZW1wQnVmZmVyW2ldID0gZnJvbUFzTGlzdFtza2lwQ291bnQgKyBpXTsKICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgICAgIHRoaXNbaV0gPSB0ZW1wQnVmZmVyW2kgLSBzdGFydF07CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQoKICAgIExpc3Qgb3RoZXJMaXN0OwogICAgaW50IG90aGVyU3RhcnQ7CiAgICBpZiAoZnJvbSBpcyBMaXN0PEZsb2F0MzJ4ND4pIHsKICAgICAgb3RoZXJMaXN0ID0gZnJvbTsKICAgICAgb3RoZXJTdGFydCA9IHNraXBDb3VudDsKICAgIH0gZWxzZSB7CiAgICAgIG90aGVyTGlzdCA9IGZyb20uc2tpcChza2lwQ291bnQpLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgICBvdGhlclN0YXJ0ID0gMDsKICAgIH0KICAgIGlmIChvdGhlclN0YXJ0ICsgY291bnQgPiBvdGhlckxpc3QubGVuZ3RoKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb0ZldygpOwogICAgfQogICAgTGlzdHMuY29weShvdGhlckxpc3QsIG90aGVyU3RhcnQsIHRoaXMsIHN0YXJ0LCBjb3VudCk7CiAgfQoKICBJdGVyYWJsZTxGbG9hdDMyeDQ+IHdoZXJlKGJvb2wgZihGbG9hdDMyeDQgZWxlbWVudCkpID0+CiAgICAgIG5ldyBXaGVyZUl0ZXJhYmxlPEZsb2F0MzJ4ND4odGhpcywgZik7CgogIEl0ZXJhYmxlPEZsb2F0MzJ4ND4gdGFrZShpbnQgbikgPT4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxGbG9hdDMyeDQ+KHRoaXMsIDAsIG4pOwoKICBJdGVyYWJsZTxGbG9hdDMyeDQ+IHRha2VXaGlsZShib29sIHRlc3QoRmxvYXQzMng0IGVsZW1lbnQpKSA9PgogICAgICBuZXcgVGFrZVdoaWxlSXRlcmFibGU8RmxvYXQzMng0Pih0aGlzLCB0ZXN0KTsKCiAgSXRlcmFibGU8RmxvYXQzMng0PiBza2lwKGludCBuKSA9PgogICAgICBuZXcgU3ViTGlzdEl0ZXJhYmxlPEZsb2F0MzJ4ND4odGhpcywgbiwgbnVsbCk7CgogIEl0ZXJhYmxlPEZsb2F0MzJ4ND4gc2tpcFdoaWxlKGJvb2wgdGVzdChGbG9hdDMyeDQgZWxlbWVudCkpID0+CiAgICAgIG5ldyBTa2lwV2hpbGVJdGVyYWJsZTxGbG9hdDMyeDQ+KHRoaXMsIHRlc3QpOwoKICBJdGVyYWJsZTxGbG9hdDMyeDQ+IGdldCByZXZlcnNlZCA9PiBuZXcgUmV2ZXJzZWRMaXN0SXRlcmFibGU8RmxvYXQzMng0Pih0aGlzKTsKCiAgTWFwPGludCwgRmxvYXQzMng0PiBhc01hcCgpID0+IG5ldyBMaXN0TWFwVmlldzxGbG9hdDMyeDQ+KHRoaXMpOwoKICBJdGVyYWJsZTxGbG9hdDMyeDQ+IGdldFJhbmdlKGludCBzdGFydCwgW2ludCBlbmRdKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICByZXR1cm4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxGbG9hdDMyeDQ+KHRoaXMsIHN0YXJ0LCBlbmQpOwogIH0KCiAgSXRlcmF0b3I8RmxvYXQzMng0PiBnZXQgaXRlcmF0b3IgPT4gbmV3IF9UeXBlZExpc3RJdGVyYXRvcjxGbG9hdDMyeDQ+KHRoaXMpOwoKICBMaXN0PEZsb2F0MzJ4ND4gdG9MaXN0KHtib29sIGdyb3dhYmxlOiB0cnVlfSkgewogICAgcmV0dXJuIG5ldyBMaXN0PEZsb2F0MzJ4ND4uZnJvbSh0aGlzLCBncm93YWJsZTogZ3Jvd2FibGUpOwogIH0KCiAgU2V0PEZsb2F0MzJ4ND4gdG9TZXQoKSB7CiAgICByZXR1cm4gbmV3IFNldDxGbG9hdDMyeDQ+LmZyb20odGhpcyk7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmKEZsb2F0MzJ4NCBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBmKHRoaXNbaV0pOwogICAgfQogIH0KCiAgRmxvYXQzMng0IHJlZHVjZShGbG9hdDMyeDQgY29tYmluZShGbG9hdDMyeDQgdmFsdWUsIEZsb2F0MzJ4NCBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgaWYgKGxlbiA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHZhciB2YWx1ZSA9IHRoaXNbMF07CiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgKytpKSB7CiAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgdGhpc1tpXSk7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBUIGZvbGQ8VD4oVCBpbml0aWFsVmFsdWUsIFQgY29tYmluZShUIGluaXRpYWxWYWx1ZSwgRmxvYXQzMng0IGVsZW1lbnQpKSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIGluaXRpYWxWYWx1ZSA9IGNvbWJpbmUoaW5pdGlhbFZhbHVlLCB0aGlzW2ldKTsKICAgIH0KICAgIHJldHVybiBpbml0aWFsVmFsdWU7CiAgfQoKICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKEZsb2F0MzJ4NCBlbGVtZW50KSkgPT4KICAgICAgbmV3IE1hcHBlZEl0ZXJhYmxlPEZsb2F0MzJ4NCwgVD4odGhpcywgZik7CgogIEl0ZXJhYmxlPFQ+IGV4cGFuZDxUPihJdGVyYWJsZTxUPiBmKEZsb2F0MzJ4NCBlbGVtZW50KSkgPT4KICAgICAgbmV3IEV4cGFuZEl0ZXJhYmxlPEZsb2F0MzJ4NCwgVD4odGhpcywgZik7CgogIGJvb2wgZXZlcnkoYm9vbCBmKEZsb2F0MzJ4NCBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpZiAoIWYodGhpc1tpXSkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgYm9vbCBhbnkoYm9vbCBmKEZsb2F0MzJ4NCBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpZiAoZih0aGlzW2ldKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBGbG9hdDMyeDQgZmlyc3RXaGVyZShib29sIHRlc3QoRmxvYXQzMng0IGVsZW1lbnQpLCB7RmxvYXQzMng0IG9yRWxzZSgpfSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBGbG9hdDMyeDQgbGFzdFdoZXJlKGJvb2wgdGVzdChGbG9hdDMyeDQgZWxlbWVudCksIHtGbG9hdDMyeDQgb3JFbHNlKCl9KSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICB9CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRmxvYXQzMng0IHNpbmdsZVdoZXJlKGJvb2wgdGVzdChGbG9hdDMyeDQgZWxlbWVudCksIHtGbG9hdDMyeDQgb3JFbHNlKCl9KSB7CiAgICB2YXIgcmVzdWx0ID0gbnVsbDsKICAgIGJvb2wgZm91bmRNYXRjaGluZyA9IGZhbHNlOwogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHsKICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsKICAgICAgICBmb3VuZE1hdGNoaW5nID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHJldHVybiByZXN1bHQ7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRmxvYXQzMng0IGVsZW1lbnRBdChpbnQgaW5kZXgpIHsKICAgIHJldHVybiB0aGlzW2luZGV4XTsKICB9CgogIHZvaWQgYWRkKEZsb2F0MzJ4NCB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RmxvYXQzMng0PiB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBpbnNlcnQoaW50IGluZGV4LCBGbG9hdDMyeDQgdmFsdWUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgaW5zZXJ0IGludG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBpbnNlcnRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxGbG9hdDMyeDQ+IHZhbHVlcykgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBpbnNlcnQgaW50byBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIHNvcnQoW2ludCBjb21wYXJlKEZsb2F0MzJ4NCBhLCBGbG9hdDMyeDQgYildKSB7CiAgICBpZiAoY29tcGFyZSA9PSBudWxsKSB7CiAgICAgIHRocm93ICJTSU1EIGRvbid0IGhhdmUgZGVmYXVsdCBjb21wYXJlLiI7CiAgICB9CiAgICBTb3J0LnNvcnQodGhpcywgY29tcGFyZSk7CiAgfQoKICBpbnQgaW5kZXhPZihGbG9hdDMyeDQgZWxlbWVudCwgW2ludCBzdGFydCA9IDBdKSB7CiAgICBpZiAoc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIC0xOwogICAgfSBlbHNlIGlmIChzdGFydCA8IDApIHsKICAgICAgc3RhcnQgPSAwOwogICAgfQogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgdGhpcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodGhpc1tpXSA9PSBlbGVtZW50KSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIGludCBsYXN0SW5kZXhPZihGbG9hdDMyeDQgZWxlbWVudCwgW2ludCBzdGFydCA9IG51bGxdKSB7CiAgICBpZiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgewogICAgICBzdGFydCA9IHRoaXMubGVuZ3RoIC0gMTsKICAgIH0gZWxzZSBpZiAoc3RhcnQgPCAwKSB7CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA+PSAwOyBpLS0pIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBGbG9hdDMyeDQgcmVtb3ZlTGFzdCgpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgRmxvYXQzMng0IHJlbW92ZUF0KGludCBpbmRleCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChGbG9hdDMyeDQgZWxlbWVudCkpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRmxvYXQzMng0IGVsZW1lbnQpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIEZsb2F0MzJ4NCBnZXQgZmlyc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzWzBdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBGbG9hdDMyeDQgZ2V0IGxhc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzW2xlbmd0aCAtIDFdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBGbG9hdDMyeDQgZ2V0IHNpbmdsZSB7CiAgICBpZiAobGVuZ3RoID09IDEpIHJldHVybiB0aGlzWzBdOwogICAgaWYgKGxlbmd0aCA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICB9CgogIEZsb2F0MzJ4NExpc3Qgc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSkgewogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgdmFyIGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgRmxvYXQzMng0TGlzdCByZXN1bHQgPSBfY3JlYXRlTGlzdChsZW5ndGgpOwogICAgcmVzdWx0LnNldFJhbmdlKDAsIGxlbmd0aCwgdGhpcywgc3RhcnQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgc2V0QWxsKGludCBpbmRleCwgSXRlcmFibGU8RmxvYXQzMng0PiBpdGVyYWJsZSkgewogICAgZmluYWwgZW5kID0gaXRlcmFibGUubGVuZ3RoICsgaW5kZXg7CiAgICBzZXRSYW5nZShpbmRleCwgZW5kLCBpdGVyYWJsZSk7CiAgfQoKICB2b2lkIGZpbGxSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIFtGbG9hdDMyeDQgZmlsbFZhbHVlXSkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHsKICAgICAgdGhpc1tpXSA9IGZpbGxWYWx1ZTsKICAgIH0KICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9JbnQzMng0TGlzdE1peGluIGltcGxlbWVudHMgTGlzdDxJbnQzMng0PiB7CiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXM7CiAgaW50IGdldCBvZmZzZXRJbkJ5dGVzOwogIF9CeXRlQnVmZmVyIGdldCBidWZmZXI7CgogIEludDMyeDRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpOwoKICBJdGVyYWJsZTxUPiB3aGVyZVR5cGU8VD4oKSA9PiBuZXcgV2hlcmVUeXBlSXRlcmFibGU8VD4odGhpcyk7CgogIEl0ZXJhYmxlPEludDMyeDQ+IGZvbGxvd2VkQnkoSXRlcmFibGU8SW50MzJ4ND4gb3RoZXIpID0+CiAgICAgIG5ldyBGb2xsb3dlZEJ5SXRlcmFibGU8SW50MzJ4ND4uZmlyc3RFZmZpY2llbnQodGhpcywgb3RoZXIpOwoKICBMaXN0PFI+IGNhc3Q8Uj4oKSA9PiBMaXN0LmNhc3RGcm9tPEludDMyeDQsIFI+KHRoaXMpOwogIHZvaWQgc2V0IGZpcnN0KEludDMyeDQgdmFsdWUpIHsKICAgIGlmICh0aGlzLmxlbmd0aCA9PSAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleCgwLCB0aGlzKTsKICAgIHRoaXNbMF0gPSB2YWx1ZTsKICB9CgogIHZvaWQgc2V0IGxhc3QoSW50MzJ4NCB2YWx1ZSkgewogICAgaWYgKHRoaXMubGVuZ3RoID09IDApIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KDAsIHRoaXMpOwogICAgdGhpc1t0aGlzLmxlbmd0aCAtIDFdID0gdmFsdWU7CiAgfQoKICBpbnQgaW5kZXhXaGVyZShib29sIHRlc3QoSW50MzJ4NCBlbGVtZW50KSwgW2ludCBzdGFydCA9IDBdKSB7CiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDA7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBpZiAodGVzdCh0aGlzW2ldKSkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBpbnQgbGFzdEluZGV4V2hlcmUoYm9vbCB0ZXN0KEludDMyeDQgZWxlbWVudCksIFtpbnQgc3RhcnRdKSB7CiAgICBpZiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgc3RhcnQgPSB0aGlzLmxlbmd0aCAtIDE7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGlmICh0ZXN0KHRoaXNbaV0pKSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIExpc3Q8SW50MzJ4ND4gb3BlcmF0b3IgKyhMaXN0PEludDMyeDQ+IG90aGVyKSB7CiAgICBpbnQgdG90YWxMZW5ndGggPSB0aGlzLmxlbmd0aCArIG90aGVyLmxlbmd0aDsKICAgIHJldHVybiA8SW50MzJ4ND5bXQogICAgICAuLmxlbmd0aCA9IHRvdGFsTGVuZ3RoCiAgICAgIC4uc2V0UmFuZ2UoMCwgdGhpcy5sZW5ndGgsIHRoaXMpCiAgICAgIC4uc2V0UmFuZ2UodGhpcy5sZW5ndGgsIHRvdGFsTGVuZ3RoLCBvdGhlcik7CiAgfQoKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIGlmICh0aGlzW2ldID09IGVsZW1lbnQpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBzaHVmZmxlKFtSYW5kb20gcmFuZG9tXSkgewogICAgcmFuZG9tID8/PSBuZXcgUmFuZG9tKCk7CiAgICB2YXIgaSA9IHRoaXMubGVuZ3RoOwogICAgd2hpbGUgKGkgPiAxKSB7CiAgICAgIGludCBwb3MgPSByYW5kb20ubmV4dEludChpKTsKICAgICAgaSAtPSAxOwogICAgICB2YXIgdG1wID0gdGhpc1tpXTsKICAgICAgdGhpc1tpXSA9IHRoaXNbcG9zXTsKICAgICAgdGhpc1twb3NdID0gdG1wOwogICAgfQogIH0KCiAgdm9pZCBzZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPEludDMyeDQ+IGZyb20sCiAgICAgIFtpbnQgc2tpcENvdW50ID0gMF0pIHsKICAgIC8vIENoZWNrIHJhbmdlcy4KICAgIGlmICgwID4gc3RhcnQgfHwgc3RhcnQgPiBlbmQgfHwgZW5kID4gbGVuZ3RoKSB7CiAgICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGxlbmd0aCk7IC8vIEFsd2F5cyB0aHJvd3MuCiAgICAgIGFzc2VydChmYWxzZSk7CiAgICB9CiAgICBpZiAoc2tpcENvdW50IDwgMCkgewogICAgICB0aHJvdyBSYW5nZUVycm9yLnJhbmdlKHNraXBDb3VudCwgMCwgbnVsbCwgInNraXBDb3VudCIpOwogICAgfQoKICAgIGZpbmFsIGNvdW50ID0gZW5kIC0gc3RhcnQ7CiAgICBpZiAoKGZyb20ubGVuZ3RoIC0gc2tpcENvdW50KSA8IGNvdW50KSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb0ZldygpOwogICAgfQoKICAgIGlmIChjb3VudCA9PSAwKSByZXR1cm47CgogICAgaWYgKGZyb20gaXMgX1R5cGVkTGlzdEJhc2UpIHsKICAgICAgLy8gTm90ZTogX1R5cGVkTGlzdEJhc2UgaXMgbm90IHJlbGF0ZWQgdG8gSXRlcmFibGU8SW50MzJ4ND4gc28gdGhlcmUgaXMKICAgICAgLy8gbm8gcHJvbW90aW9uIGhlcmUuCiAgICAgIGZpbmFsIGZyb21Bc1R5cGVkTGlzdCA9IGZyb20gYXMgX1R5cGVkTGlzdEJhc2U7CiAgICAgIGlmICh0aGlzLmVsZW1lbnRTaXplSW5CeXRlcyA9PSBmcm9tQXNUeXBlZExpc3QuZWxlbWVudFNpemVJbkJ5dGVzKSB7CiAgICAgICAgaWYgKChjb3VudCA8IDEwKSAmJiAoZnJvbUFzVHlwZWRMaXN0LmJ1ZmZlciAhPSB0aGlzLmJ1ZmZlcikpIHsKICAgICAgICAgIExpc3RzLmNvcHkoZnJvbSBhcyBMaXN0PEludDMyeDQ+LCBza2lwQ291bnQsIHRoaXMsIHN0YXJ0LCBjb3VudCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmJ1ZmZlci5fZGF0YS5fc2V0UmFuZ2UoCiAgICAgICAgICAgIHN0YXJ0ICogZWxlbWVudFNpemVJbkJ5dGVzICsgdGhpcy5vZmZzZXRJbkJ5dGVzLAogICAgICAgICAgICBjb3VudCAqIGVsZW1lbnRTaXplSW5CeXRlcywKICAgICAgICAgICAgZnJvbUFzVHlwZWRMaXN0LmJ1ZmZlci5fZGF0YSwKICAgICAgICAgICAgc2tpcENvdW50ICogZWxlbWVudFNpemVJbkJ5dGVzICsgZnJvbUFzVHlwZWRMaXN0Lm9mZnNldEluQnl0ZXMsCiAgICAgICAgICAgIENsYXNzSUQuZ2V0SUQodGhpcyksCiAgICAgICAgICAgIENsYXNzSUQuZ2V0SUQoZnJvbSkpKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGZyb21Bc1R5cGVkTGlzdC5idWZmZXIgPT0gdGhpcy5idWZmZXIpIHsKICAgICAgICAvLyBEaWZmZXJlbnQgZWxlbWVudCBzaXplcywgYnV0IHNhbWUgYnVmZmVyIG1lYW5zIHRoYXQgd2UgbmVlZAogICAgICAgIC8vIGFuIGludGVybWVkaWF0ZSBzdHJ1Y3R1cmUuCiAgICAgICAgLy8gVE9ETyhzcmRqYW4pOiBPcHRpbWl6ZSB0byBza2lwIGNvcHlpbmcgaWYgdGhlIHJhbmdlIGRvZXMgbm90IG92ZXJsYXAuCiAgICAgICAgZmluYWwgZnJvbUFzTGlzdCA9IGZyb20gYXMgTGlzdDxJbnQzMng0PjsKICAgICAgICBmaW5hbCB0ZW1wQnVmZmVyID0gX2NyZWF0ZUxpc3QoY291bnQpOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICAgICAgdGVtcEJ1ZmZlcltpXSA9IGZyb21Bc0xpc3Rbc2tpcENvdW50ICsgaV07CiAgICAgICAgfQogICAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgICAgICB0aGlzW2ldID0gdGVtcEJ1ZmZlcltpIC0gc3RhcnRdOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KCiAgICBMaXN0IG90aGVyTGlzdDsKICAgIGludCBvdGhlclN0YXJ0OwogICAgaWYgKGZyb20gaXMgTGlzdDxJbnQzMng0PikgewogICAgICBvdGhlckxpc3QgPSBmcm9tOwogICAgICBvdGhlclN0YXJ0ID0gc2tpcENvdW50OwogICAgfSBlbHNlIHsKICAgICAgb3RoZXJMaXN0ID0gZnJvbS5za2lwKHNraXBDb3VudCkudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICAgIG90aGVyU3RhcnQgPSAwOwogICAgfQogICAgaWYgKG90aGVyU3RhcnQgKyBjb3VudCA+IG90aGVyTGlzdC5sZW5ndGgpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vRmV3KCk7CiAgICB9CiAgICBMaXN0cy5jb3B5KG90aGVyTGlzdCwgb3RoZXJTdGFydCwgdGhpcywgc3RhcnQsIGNvdW50KTsKICB9CgogIEl0ZXJhYmxlPEludDMyeDQ+IHdoZXJlKGJvb2wgZihJbnQzMng0IGVsZW1lbnQpKSA9PgogICAgICBuZXcgV2hlcmVJdGVyYWJsZTxJbnQzMng0Pih0aGlzLCBmKTsKCiAgSXRlcmFibGU8SW50MzJ4ND4gdGFrZShpbnQgbikgPT4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxJbnQzMng0Pih0aGlzLCAwLCBuKTsKCiAgSXRlcmFibGU8SW50MzJ4ND4gdGFrZVdoaWxlKGJvb2wgdGVzdChJbnQzMng0IGVsZW1lbnQpKSA9PgogICAgICBuZXcgVGFrZVdoaWxlSXRlcmFibGU8SW50MzJ4ND4odGhpcywgdGVzdCk7CgogIEl0ZXJhYmxlPEludDMyeDQ+IHNraXAoaW50IG4pID0+IG5ldyBTdWJMaXN0SXRlcmFibGU8SW50MzJ4ND4odGhpcywgbiwgbnVsbCk7CgogIEl0ZXJhYmxlPEludDMyeDQ+IHNraXBXaGlsZShib29sIHRlc3QoSW50MzJ4NCBlbGVtZW50KSkgPT4KICAgICAgbmV3IFNraXBXaGlsZUl0ZXJhYmxlPEludDMyeDQ+KHRoaXMsIHRlc3QpOwoKICBJdGVyYWJsZTxJbnQzMng0PiBnZXQgcmV2ZXJzZWQgPT4gbmV3IFJldmVyc2VkTGlzdEl0ZXJhYmxlPEludDMyeDQ+KHRoaXMpOwoKICBNYXA8aW50LCBJbnQzMng0PiBhc01hcCgpID0+IG5ldyBMaXN0TWFwVmlldzxJbnQzMng0Pih0aGlzKTsKCiAgSXRlcmFibGU8SW50MzJ4ND4gZ2V0UmFuZ2UoaW50IHN0YXJ0LCBbaW50IGVuZF0pIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIHJldHVybiBuZXcgU3ViTGlzdEl0ZXJhYmxlPEludDMyeDQ+KHRoaXMsIHN0YXJ0LCBlbmQpOwogIH0KCiAgSXRlcmF0b3I8SW50MzJ4ND4gZ2V0IGl0ZXJhdG9yID0+IG5ldyBfVHlwZWRMaXN0SXRlcmF0b3I8SW50MzJ4ND4odGhpcyk7CgogIExpc3Q8SW50MzJ4ND4gdG9MaXN0KHtib29sIGdyb3dhYmxlOiB0cnVlfSkgewogICAgcmV0dXJuIG5ldyBMaXN0PEludDMyeDQ+LmZyb20odGhpcywgZ3Jvd2FibGU6IGdyb3dhYmxlKTsKICB9CgogIFNldDxJbnQzMng0PiB0b1NldCgpIHsKICAgIHJldHVybiBuZXcgU2V0PEludDMyeDQ+LmZyb20odGhpcyk7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmKEludDMyeDQgZWxlbWVudCkpIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgZih0aGlzW2ldKTsKICAgIH0KICB9CgogIEludDMyeDQgcmVkdWNlKEludDMyeDQgY29tYmluZShJbnQzMng0IHZhbHVlLCBJbnQzMng0IGVsZW1lbnQpKSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBpZiAobGVuID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgdmFyIHZhbHVlID0gdGhpc1swXTsKICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyArK2kpIHsKICAgICAgdmFsdWUgPSBjb21iaW5lKHZhbHVlLCB0aGlzW2ldKTsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIFQgZm9sZDxUPihUIGluaXRpYWxWYWx1ZSwgVCBjb21iaW5lKFQgaW5pdGlhbFZhbHVlLCBJbnQzMng0IGVsZW1lbnQpKSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIGluaXRpYWxWYWx1ZSA9IGNvbWJpbmUoaW5pdGlhbFZhbHVlLCB0aGlzW2ldKTsKICAgIH0KICAgIHJldHVybiBpbml0aWFsVmFsdWU7CiAgfQoKICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKEludDMyeDQgZWxlbWVudCkpID0+CiAgICAgIG5ldyBNYXBwZWRJdGVyYWJsZTxJbnQzMng0LCBUPih0aGlzLCBmKTsKCiAgSXRlcmFibGU8VD4gZXhwYW5kPFQ+KEl0ZXJhYmxlPFQ+IGYoSW50MzJ4NCBlbGVtZW50KSkgPT4KICAgICAgbmV3IEV4cGFuZEl0ZXJhYmxlPEludDMyeDQsIFQ+KHRoaXMsIGYpOwoKICBib29sIGV2ZXJ5KGJvb2wgZihJbnQzMng0IGVsZW1lbnQpKSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIGlmICghZih0aGlzW2ldKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBib29sIGFueShib29sIGYoSW50MzJ4NCBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpZiAoZih0aGlzW2ldKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBJbnQzMng0IGZpcnN0V2hlcmUoYm9vbCB0ZXN0KEludDMyeDQgZWxlbWVudCksIHtJbnQzMng0IG9yRWxzZSgpfSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBJbnQzMng0IGxhc3RXaGVyZShib29sIHRlc3QoSW50MzJ4NCBlbGVtZW50KSwge0ludDMyeDQgb3JFbHNlKCl9KSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICB9CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgSW50MzJ4NCBzaW5nbGVXaGVyZShib29sIHRlc3QoSW50MzJ4NCBlbGVtZW50KSwge0ludDMyeDQgb3JFbHNlKCl9KSB7CiAgICB2YXIgcmVzdWx0ID0gbnVsbDsKICAgIGJvb2wgZm91bmRNYXRjaGluZyA9IGZhbHNlOwogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHsKICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsKICAgICAgICBmb3VuZE1hdGNoaW5nID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHJldHVybiByZXN1bHQ7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgSW50MzJ4NCBlbGVtZW50QXQoaW50IGluZGV4KSB7CiAgICByZXR1cm4gdGhpc1tpbmRleF07CiAgfQoKICB2b2lkIGFkZChJbnQzMng0IHZhbHVlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGFkZCB0byBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxJbnQzMng0PiB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBpbnNlcnQoaW50IGluZGV4LCBJbnQzMng0IHZhbHVlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGluc2VydCBpbnRvIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgaW5zZXJ0QWxsKGludCBpbmRleCwgSXRlcmFibGU8SW50MzJ4ND4gdmFsdWVzKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGluc2VydCBpbnRvIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgc29ydChbaW50IGNvbXBhcmUoSW50MzJ4NCBhLCBJbnQzMng0IGIpXSkgewogICAgaWYgKGNvbXBhcmUgPT0gbnVsbCkgewogICAgICB0aHJvdyAiU0lNRCBkb24ndCBoYXZlIGRlZmF1bHQgY29tcGFyZS4iOwogICAgfQogICAgU29ydC5zb3J0KHRoaXMsIGNvbXBhcmUpOwogIH0KCiAgaW50IGluZGV4T2YoSW50MzJ4NCBlbGVtZW50LCBbaW50IHN0YXJ0ID0gMF0pIHsKICAgIGlmIChzdGFydCA+PSB0aGlzLmxlbmd0aCkgewogICAgICByZXR1cm4gLTE7CiAgICB9IGVsc2UgaWYgKHN0YXJ0IDwgMCkgewogICAgICBzdGFydCA9IDA7CiAgICB9CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh0aGlzW2ldID09IGVsZW1lbnQpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgaW50IGxhc3RJbmRleE9mKEludDMyeDQgZWxlbWVudCwgW2ludCBzdGFydCA9IG51bGxdKSB7CiAgICBpZiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgewogICAgICBzdGFydCA9IHRoaXMubGVuZ3RoIC0gMTsKICAgIH0gZWxzZSBpZiAoc3RhcnQgPCAwKSB7CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA+PSAwOyBpLS0pIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBJbnQzMng0IHJlbW92ZUxhc3QoKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIEludDMyeDQgcmVtb3ZlQXQoaW50IGluZGV4KSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEludDMyeDQgZWxlbWVudCkpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoSW50MzJ4NCBlbGVtZW50KSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICBJbnQzMng0IGdldCBmaXJzdCB7CiAgICBpZiAobGVuZ3RoID4gMCkgcmV0dXJuIHRoaXNbMF07CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEludDMyeDQgZ2V0IGxhc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzW2xlbmd0aCAtIDFdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBJbnQzMng0IGdldCBzaW5nbGUgewogICAgaWYgKGxlbmd0aCA9PSAxKSByZXR1cm4gdGhpc1swXTsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgfQoKICBJbnQzMng0TGlzdCBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKSB7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICB2YXIgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBJbnQzMng0TGlzdCByZXN1bHQgPSBfY3JlYXRlTGlzdChsZW5ndGgpOwogICAgcmVzdWx0LnNldFJhbmdlKDAsIGxlbmd0aCwgdGhpcywgc3RhcnQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgc2V0QWxsKGludCBpbmRleCwgSXRlcmFibGU8SW50MzJ4ND4gaXRlcmFibGUpIHsKICAgIGZpbmFsIGVuZCA9IGl0ZXJhYmxlLmxlbmd0aCArIGluZGV4OwogICAgc2V0UmFuZ2UoaW5kZXgsIGVuZCwgaXRlcmFibGUpOwogIH0KCiAgdm9pZCBmaWxsUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBbSW50MzJ4NCBmaWxsVmFsdWVdKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkgewogICAgICB0aGlzW2ldID0gZmlsbFZhbHVlOwogICAgfQogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX0Zsb2F0NjR4Mkxpc3RNaXhpbiBpbXBsZW1lbnRzIExpc3Q8RmxvYXQ2NHgyPiB7CiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXM7CiAgaW50IGdldCBvZmZzZXRJbkJ5dGVzOwogIF9CeXRlQnVmZmVyIGdldCBidWZmZXI7CgogIEZsb2F0NjR4Mkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCk7CgogIEl0ZXJhYmxlPFQ+IHdoZXJlVHlwZTxUPigpID0+IG5ldyBXaGVyZVR5cGVJdGVyYWJsZTxUPih0aGlzKTsKCiAgSXRlcmFibGU8RmxvYXQ2NHgyPiBmb2xsb3dlZEJ5KEl0ZXJhYmxlPEZsb2F0NjR4Mj4gb3RoZXIpID0+CiAgICAgIG5ldyBGb2xsb3dlZEJ5SXRlcmFibGU8RmxvYXQ2NHgyPi5maXJzdEVmZmljaWVudCh0aGlzLCBvdGhlcik7CgogIExpc3Q8Uj4gY2FzdDxSPigpID0+IExpc3QuY2FzdEZyb208RmxvYXQ2NHgyLCBSPih0aGlzKTsKICB2b2lkIHNldCBmaXJzdChGbG9hdDY0eDIgdmFsdWUpIHsKICAgIGlmICh0aGlzLmxlbmd0aCA9PSAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleCgwLCB0aGlzKTsKICAgIHRoaXNbMF0gPSB2YWx1ZTsKICB9CgogIHZvaWQgc2V0IGxhc3QoRmxvYXQ2NHgyIHZhbHVlKSB7CiAgICBpZiAodGhpcy5sZW5ndGggPT0gMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoMCwgdGhpcyk7CiAgICB0aGlzW3RoaXMubGVuZ3RoIC0gMV0gPSB2YWx1ZTsKICB9CgogIGludCBpbmRleFdoZXJlKGJvb2wgdGVzdChGbG9hdDY0eDIgZWxlbWVudCksIFtpbnQgc3RhcnQgPSAwXSkgewogICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRlc3QodGhpc1tpXSkpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgaW50IGxhc3RJbmRleFdoZXJlKGJvb2wgdGVzdChGbG9hdDY0eDIgZWxlbWVudCksIFtpbnQgc3RhcnRdKSB7CiAgICBpZiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgc3RhcnQgPSB0aGlzLmxlbmd0aCAtIDE7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGlmICh0ZXN0KHRoaXNbaV0pKSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIExpc3Q8RmxvYXQ2NHgyPiBvcGVyYXRvciArKExpc3Q8RmxvYXQ2NHgyPiBvdGhlcikgewogICAgaW50IHRvdGFsTGVuZ3RoID0gdGhpcy5sZW5ndGggKyBvdGhlci5sZW5ndGg7CiAgICByZXR1cm4gPEZsb2F0NjR4Mj5bXQogICAgICAuLmxlbmd0aCA9IHRvdGFsTGVuZ3RoCiAgICAgIC4uc2V0UmFuZ2UoMCwgdGhpcy5sZW5ndGgsIHRoaXMpCiAgICAgIC4uc2V0UmFuZ2UodGhpcy5sZW5ndGgsIHRvdGFsTGVuZ3RoLCBvdGhlcik7CiAgfQoKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIGlmICh0aGlzW2ldID09IGVsZW1lbnQpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBzaHVmZmxlKFtSYW5kb20gcmFuZG9tXSkgewogICAgcmFuZG9tID8/PSBuZXcgUmFuZG9tKCk7CiAgICB2YXIgaSA9IHRoaXMubGVuZ3RoOwogICAgd2hpbGUgKGkgPiAxKSB7CiAgICAgIGludCBwb3MgPSByYW5kb20ubmV4dEludChpKTsKICAgICAgaSAtPSAxOwogICAgICB2YXIgdG1wID0gdGhpc1tpXTsKICAgICAgdGhpc1tpXSA9IHRoaXNbcG9zXTsKICAgICAgdGhpc1twb3NdID0gdG1wOwogICAgfQogIH0KCiAgdm9pZCBzZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPEZsb2F0NjR4Mj4gZnJvbSwKICAgICAgW2ludCBza2lwQ291bnQgPSAwXSkgewogICAgLy8gQ2hlY2sgcmFuZ2VzLgogICAgaWYgKDAgPiBzdGFydCB8fCBzdGFydCA+IGVuZCB8fCBlbmQgPiBsZW5ndGgpIHsKICAgICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgbGVuZ3RoKTsgLy8gQWx3YXlzIHRocm93cy4KICAgICAgYXNzZXJ0KGZhbHNlKTsKICAgIH0KICAgIGlmIChza2lwQ291bnQgPCAwKSB7CiAgICAgIHRocm93IFJhbmdlRXJyb3IucmFuZ2Uoc2tpcENvdW50LCAwLCBudWxsLCAic2tpcENvdW50Iik7CiAgICB9CgogICAgZmluYWwgY291bnQgPSBlbmQgLSBzdGFydDsKICAgIGlmICgoZnJvbS5sZW5ndGggLSBza2lwQ291bnQpIDwgY291bnQpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vRmV3KCk7CiAgICB9CgogICAgaWYgKGNvdW50ID09IDApIHJldHVybjsKCiAgICBpZiAoZnJvbSBpcyBfVHlwZWRMaXN0QmFzZSkgewogICAgICAvLyBOb3RlOiBfVHlwZWRMaXN0QmFzZSBpcyBub3QgcmVsYXRlZCB0byBJdGVyYWJsZTxGbG9hdDY0eDI+IHNvIHRoZXJlIGlzCiAgICAgIC8vIG5vIHByb21vdGlvbiBoZXJlLgogICAgICBmaW5hbCBmcm9tQXNUeXBlZExpc3QgPSBmcm9tIGFzIF9UeXBlZExpc3RCYXNlOwogICAgICBpZiAodGhpcy5lbGVtZW50U2l6ZUluQnl0ZXMgPT0gZnJvbUFzVHlwZWRMaXN0LmVsZW1lbnRTaXplSW5CeXRlcykgewogICAgICAgIGlmICgoY291bnQgPCAxMCkgJiYgKGZyb21Bc1R5cGVkTGlzdC5idWZmZXIgIT0gdGhpcy5idWZmZXIpKSB7CiAgICAgICAgICBMaXN0cy5jb3B5KGZyb20gYXMgTGlzdDxGbG9hdDY0eDI+LCBza2lwQ291bnQsIHRoaXMsIHN0YXJ0LCBjb3VudCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmJ1ZmZlci5fZGF0YS5fc2V0UmFuZ2UoCiAgICAgICAgICAgIHN0YXJ0ICogZWxlbWVudFNpemVJbkJ5dGVzICsgdGhpcy5vZmZzZXRJbkJ5dGVzLAogICAgICAgICAgICBjb3VudCAqIGVsZW1lbnRTaXplSW5CeXRlcywKICAgICAgICAgICAgZnJvbUFzVHlwZWRMaXN0LmJ1ZmZlci5fZGF0YSwKICAgICAgICAgICAgc2tpcENvdW50ICogZWxlbWVudFNpemVJbkJ5dGVzICsgZnJvbUFzVHlwZWRMaXN0Lm9mZnNldEluQnl0ZXMsCiAgICAgICAgICAgIENsYXNzSUQuZ2V0SUQodGhpcyksCiAgICAgICAgICAgIENsYXNzSUQuZ2V0SUQoZnJvbSkpKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGZyb21Bc1R5cGVkTGlzdC5idWZmZXIgPT0gdGhpcy5idWZmZXIpIHsKICAgICAgICAvLyBEaWZmZXJlbnQgZWxlbWVudCBzaXplcywgYnV0IHNhbWUgYnVmZmVyIG1lYW5zIHRoYXQgd2UgbmVlZAogICAgICAgIC8vIGFuIGludGVybWVkaWF0ZSBzdHJ1Y3R1cmUuCiAgICAgICAgLy8gVE9ETyhzcmRqYW4pOiBPcHRpbWl6ZSB0byBza2lwIGNvcHlpbmcgaWYgdGhlIHJhbmdlIGRvZXMgbm90IG92ZXJsYXAuCiAgICAgICAgZmluYWwgZnJvbUFzTGlzdCA9IGZyb20gYXMgTGlzdDxGbG9hdDY0eDI+OwogICAgICAgIGZpbmFsIHRlbXBCdWZmZXIgPSBfY3JlYXRlTGlzdChjb3VudCk7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgICB0ZW1wQnVmZmVyW2ldID0gZnJvbUFzTGlzdFtza2lwQ291bnQgKyBpXTsKICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgICAgIHRoaXNbaV0gPSB0ZW1wQnVmZmVyW2kgLSBzdGFydF07CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQoKICAgIExpc3Qgb3RoZXJMaXN0OwogICAgaW50IG90aGVyU3RhcnQ7CiAgICBpZiAoZnJvbSBpcyBMaXN0PEZsb2F0NjR4Mj4pIHsKICAgICAgb3RoZXJMaXN0ID0gZnJvbTsKICAgICAgb3RoZXJTdGFydCA9IHNraXBDb3VudDsKICAgIH0gZWxzZSB7CiAgICAgIG90aGVyTGlzdCA9IGZyb20uc2tpcChza2lwQ291bnQpLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgICBvdGhlclN0YXJ0ID0gMDsKICAgIH0KICAgIGlmIChvdGhlclN0YXJ0ICsgY291bnQgPiBvdGhlckxpc3QubGVuZ3RoKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb0ZldygpOwogICAgfQogICAgTGlzdHMuY29weShvdGhlckxpc3QsIG90aGVyU3RhcnQsIHRoaXMsIHN0YXJ0LCBjb3VudCk7CiAgfQoKICBJdGVyYWJsZTxGbG9hdDY0eDI+IHdoZXJlKGJvb2wgZihGbG9hdDY0eDIgZWxlbWVudCkpID0+CiAgICAgIG5ldyBXaGVyZUl0ZXJhYmxlPEZsb2F0NjR4Mj4odGhpcywgZik7CgogIEl0ZXJhYmxlPEZsb2F0NjR4Mj4gdGFrZShpbnQgbikgPT4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxGbG9hdDY0eDI+KHRoaXMsIDAsIG4pOwoKICBJdGVyYWJsZTxGbG9hdDY0eDI+IHRha2VXaGlsZShib29sIHRlc3QoRmxvYXQ2NHgyIGVsZW1lbnQpKSA9PgogICAgICBuZXcgVGFrZVdoaWxlSXRlcmFibGU8RmxvYXQ2NHgyPih0aGlzLCB0ZXN0KTsKCiAgSXRlcmFibGU8RmxvYXQ2NHgyPiBza2lwKGludCBuKSA9PgogICAgICBuZXcgU3ViTGlzdEl0ZXJhYmxlPEZsb2F0NjR4Mj4odGhpcywgbiwgbnVsbCk7CgogIEl0ZXJhYmxlPEZsb2F0NjR4Mj4gc2tpcFdoaWxlKGJvb2wgdGVzdChGbG9hdDY0eDIgZWxlbWVudCkpID0+CiAgICAgIG5ldyBTa2lwV2hpbGVJdGVyYWJsZTxGbG9hdDY0eDI+KHRoaXMsIHRlc3QpOwoKICBJdGVyYWJsZTxGbG9hdDY0eDI+IGdldCByZXZlcnNlZCA9PiBuZXcgUmV2ZXJzZWRMaXN0SXRlcmFibGU8RmxvYXQ2NHgyPih0aGlzKTsKCiAgTWFwPGludCwgRmxvYXQ2NHgyPiBhc01hcCgpID0+IG5ldyBMaXN0TWFwVmlldzxGbG9hdDY0eDI+KHRoaXMpOwoKICBJdGVyYWJsZTxGbG9hdDY0eDI+IGdldFJhbmdlKGludCBzdGFydCwgW2ludCBlbmRdKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICByZXR1cm4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxGbG9hdDY0eDI+KHRoaXMsIHN0YXJ0LCBlbmQpOwogIH0KCiAgSXRlcmF0b3I8RmxvYXQ2NHgyPiBnZXQgaXRlcmF0b3IgPT4gbmV3IF9UeXBlZExpc3RJdGVyYXRvcjxGbG9hdDY0eDI+KHRoaXMpOwoKICBMaXN0PEZsb2F0NjR4Mj4gdG9MaXN0KHtib29sIGdyb3dhYmxlOiB0cnVlfSkgewogICAgcmV0dXJuIG5ldyBMaXN0PEZsb2F0NjR4Mj4uZnJvbSh0aGlzLCBncm93YWJsZTogZ3Jvd2FibGUpOwogIH0KCiAgU2V0PEZsb2F0NjR4Mj4gdG9TZXQoKSB7CiAgICByZXR1cm4gbmV3IFNldDxGbG9hdDY0eDI+LmZyb20odGhpcyk7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmKEZsb2F0NjR4MiBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBmKHRoaXNbaV0pOwogICAgfQogIH0KCiAgRmxvYXQ2NHgyIHJlZHVjZShGbG9hdDY0eDIgY29tYmluZShGbG9hdDY0eDIgdmFsdWUsIEZsb2F0NjR4MiBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgaWYgKGxlbiA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHZhciB2YWx1ZSA9IHRoaXNbMF07CiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgKytpKSB7CiAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgdGhpc1tpXSk7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBUIGZvbGQ8VD4oVCBpbml0aWFsVmFsdWUsIFQgY29tYmluZShUIGluaXRpYWxWYWx1ZSwgRmxvYXQ2NHgyIGVsZW1lbnQpKSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIGluaXRpYWxWYWx1ZSA9IGNvbWJpbmUoaW5pdGlhbFZhbHVlLCB0aGlzW2ldKTsKICAgIH0KICAgIHJldHVybiBpbml0aWFsVmFsdWU7CiAgfQoKICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKEZsb2F0NjR4MiBlbGVtZW50KSkgPT4KICAgICAgbmV3IE1hcHBlZEl0ZXJhYmxlPEZsb2F0NjR4MiwgVD4odGhpcywgZik7CgogIEl0ZXJhYmxlPFQ+IGV4cGFuZDxUPihJdGVyYWJsZTxUPiBmKEZsb2F0NjR4MiBlbGVtZW50KSkgPT4KICAgICAgbmV3IEV4cGFuZEl0ZXJhYmxlPEZsb2F0NjR4MiwgVD4odGhpcywgZik7CgogIGJvb2wgZXZlcnkoYm9vbCBmKEZsb2F0NjR4MiBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpZiAoIWYodGhpc1tpXSkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgYm9vbCBhbnkoYm9vbCBmKEZsb2F0NjR4MiBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpZiAoZih0aGlzW2ldKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBGbG9hdDY0eDIgZmlyc3RXaGVyZShib29sIHRlc3QoRmxvYXQ2NHgyIGVsZW1lbnQpLCB7RmxvYXQ2NHgyIG9yRWxzZSgpfSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBGbG9hdDY0eDIgbGFzdFdoZXJlKGJvb2wgdGVzdChGbG9hdDY0eDIgZWxlbWVudCksIHtGbG9hdDY0eDIgb3JFbHNlKCl9KSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICB9CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRmxvYXQ2NHgyIHNpbmdsZVdoZXJlKGJvb2wgdGVzdChGbG9hdDY0eDIgZWxlbWVudCksIHtGbG9hdDY0eDIgb3JFbHNlKCl9KSB7CiAgICB2YXIgcmVzdWx0ID0gbnVsbDsKICAgIGJvb2wgZm91bmRNYXRjaGluZyA9IGZhbHNlOwogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHsKICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsKICAgICAgICBmb3VuZE1hdGNoaW5nID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHJldHVybiByZXN1bHQ7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRmxvYXQ2NHgyIGVsZW1lbnRBdChpbnQgaW5kZXgpIHsKICAgIHJldHVybiB0aGlzW2luZGV4XTsKICB9CgogIHZvaWQgYWRkKEZsb2F0NjR4MiB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RmxvYXQ2NHgyPiB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBpbnNlcnQoaW50IGluZGV4LCBGbG9hdDY0eDIgdmFsdWUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgaW5zZXJ0IGludG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBpbnNlcnRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxGbG9hdDY0eDI+IHZhbHVlcykgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBpbnNlcnQgaW50byBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIHNvcnQoW2ludCBjb21wYXJlKEZsb2F0NjR4MiBhLCBGbG9hdDY0eDIgYildKSB7CiAgICBpZiAoY29tcGFyZSA9PSBudWxsKSB7CiAgICAgIHRocm93ICJTSU1EIGRvbid0IGhhdmUgZGVmYXVsdCBjb21wYXJlLiI7CiAgICB9CiAgICBTb3J0LnNvcnQodGhpcywgY29tcGFyZSk7CiAgfQoKICBpbnQgaW5kZXhPZihGbG9hdDY0eDIgZWxlbWVudCwgW2ludCBzdGFydCA9IDBdKSB7CiAgICBpZiAoc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIC0xOwogICAgfSBlbHNlIGlmIChzdGFydCA8IDApIHsKICAgICAgc3RhcnQgPSAwOwogICAgfQogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgdGhpcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodGhpc1tpXSA9PSBlbGVtZW50KSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIGludCBsYXN0SW5kZXhPZihGbG9hdDY0eDIgZWxlbWVudCwgW2ludCBzdGFydCA9IG51bGxdKSB7CiAgICBpZiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgewogICAgICBzdGFydCA9IHRoaXMubGVuZ3RoIC0gMTsKICAgIH0gZWxzZSBpZiAoc3RhcnQgPCAwKSB7CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA+PSAwOyBpLS0pIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBGbG9hdDY0eDIgcmVtb3ZlTGFzdCgpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgRmxvYXQ2NHgyIHJlbW92ZUF0KGludCBpbmRleCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChGbG9hdDY0eDIgZWxlbWVudCkpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRmxvYXQ2NHgyIGVsZW1lbnQpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIEZsb2F0NjR4MiBnZXQgZmlyc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzWzBdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBGbG9hdDY0eDIgZ2V0IGxhc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzW2xlbmd0aCAtIDFdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBGbG9hdDY0eDIgZ2V0IHNpbmdsZSB7CiAgICBpZiAobGVuZ3RoID09IDEpIHJldHVybiB0aGlzWzBdOwogICAgaWYgKGxlbmd0aCA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICB9CgogIEZsb2F0NjR4Mkxpc3Qgc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSkgewogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgdmFyIGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgRmxvYXQ2NHgyTGlzdCByZXN1bHQgPSBfY3JlYXRlTGlzdChsZW5ndGgpOwogICAgcmVzdWx0LnNldFJhbmdlKDAsIGxlbmd0aCwgdGhpcywgc3RhcnQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgc2V0QWxsKGludCBpbmRleCwgSXRlcmFibGU8RmxvYXQ2NHgyPiBpdGVyYWJsZSkgewogICAgZmluYWwgZW5kID0gaXRlcmFibGUubGVuZ3RoICsgaW5kZXg7CiAgICBzZXRSYW5nZShpbmRleCwgZW5kLCBpdGVyYWJsZSk7CiAgfQoKICB2b2lkIGZpbGxSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIFtGbG9hdDY0eDIgZmlsbFZhbHVlXSkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHsKICAgICAgdGhpc1tpXSA9IGZpbGxWYWx1ZTsKICAgIH0KICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0J5dGVCdWZmZXIgaW1wbGVtZW50cyBCeXRlQnVmZmVyIHsKICBmaW5hbCBfVHlwZWRMaXN0IF9kYXRhOwoKICBfQnl0ZUJ1ZmZlcih0aGlzLl9kYXRhKTsKCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGZhY3RvcnkgX0J5dGVCdWZmZXIuX05ldyhkYXRhKSA9PiBuZXcgX0J5dGVCdWZmZXIoZGF0YSk7CgogIC8vIEZvcndhcmQgY2FsbHMgdG8gX2RhdGEuCiAgaW50IGdldCBsZW5ndGhJbkJ5dGVzID0+IF9kYXRhLmxlbmd0aEluQnl0ZXM7CiAgaW50IGdldCBoYXNoQ29kZSA9PiBfZGF0YS5oYXNoQ29kZTsKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgPT4KICAgICAgKG90aGVyIGlzIF9CeXRlQnVmZmVyKSAmJiBpZGVudGljYWwoX2RhdGEsIG90aGVyLl9kYXRhKTsKCiAgQnl0ZURhdGEgYXNCeXRlRGF0YShbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgbGVuZ3RoID8/PSB0aGlzLmxlbmd0aEluQnl0ZXMgLSBvZmZzZXRJbkJ5dGVzOwogICAgX3JhbmdlQ2hlY2sodGhpcy5fZGF0YS5sZW5ndGhJbkJ5dGVzLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogICAgcmV0dXJuIG5ldyBfQnl0ZURhdGFWaWV3Ll8odGhpcy5fZGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIEludDhMaXN0IGFzSW50OExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIGxlbmd0aCA/Pz0gKHRoaXMubGVuZ3RoSW5CeXRlcyAtIG9mZnNldEluQnl0ZXMpIH4vIEludDhMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICAgIF9yYW5nZUNoZWNrKAogICAgICAgIHRoaXMubGVuZ3RoSW5CeXRlcywgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoICogSW50OExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIHJldHVybiBuZXcgX0ludDhBcnJheVZpZXcuXyh0aGlzLl9kYXRhLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgVWludDhMaXN0IGFzVWludDhMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICBsZW5ndGggPz89CiAgICAgICAgKHRoaXMubGVuZ3RoSW5CeXRlcyAtIG9mZnNldEluQnl0ZXMpIH4vIFVpbnQ4TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgICBfcmFuZ2VDaGVjaygKICAgICAgICB0aGlzLmxlbmd0aEluQnl0ZXMsIG9mZnNldEluQnl0ZXMsIGxlbmd0aCAqIFVpbnQ4TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogICAgcmV0dXJuIG5ldyBfVWludDhBcnJheVZpZXcuXyh0aGlzLl9kYXRhLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgVWludDhDbGFtcGVkTGlzdCBhc1VpbnQ4Q2xhbXBlZExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIGxlbmd0aCA/Pz0gKHRoaXMubGVuZ3RoSW5CeXRlcyAtIG9mZnNldEluQnl0ZXMpIH4vCiAgICAgICAgVWludDhDbGFtcGVkTGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgICBfcmFuZ2VDaGVjayh0aGlzLmxlbmd0aEluQnl0ZXMsIG9mZnNldEluQnl0ZXMsCiAgICAgICAgbGVuZ3RoICogVWludDhDbGFtcGVkTGlzdC5ieXRlc1BlckVsZW1lbnQpOwogICAgcmV0dXJuIG5ldyBfVWludDhDbGFtcGVkQXJyYXlWaWV3Ll8odGhpcy5fZGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIEludDE2TGlzdCBhc0ludDE2TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgbGVuZ3RoID8/PQogICAgICAgICh0aGlzLmxlbmd0aEluQnl0ZXMgLSBvZmZzZXRJbkJ5dGVzKSB+LyBJbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgX3JhbmdlQ2hlY2soCiAgICAgICAgdGhpcy5sZW5ndGhJbkJ5dGVzLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGggKiBJbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIF9vZmZzZXRBbGlnbm1lbnRDaGVjayhvZmZzZXRJbkJ5dGVzLCBJbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIHJldHVybiBuZXcgX0ludDE2QXJyYXlWaWV3Ll8odGhpcy5fZGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIFVpbnQxNkxpc3QgYXNVaW50MTZMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICBsZW5ndGggPz89CiAgICAgICAgKHRoaXMubGVuZ3RoSW5CeXRlcyAtIG9mZnNldEluQnl0ZXMpIH4vIFVpbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgX3JhbmdlQ2hlY2soCiAgICAgICAgdGhpcy5sZW5ndGhJbkJ5dGVzLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGggKiBVaW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgICBfb2Zmc2V0QWxpZ25tZW50Q2hlY2sob2Zmc2V0SW5CeXRlcywgVWludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogICAgcmV0dXJuIG5ldyBfVWludDE2QXJyYXlWaWV3Ll8odGhpcy5fZGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIEludDMyTGlzdCBhc0ludDMyTGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgbGVuZ3RoID8/PQogICAgICAgICh0aGlzLmxlbmd0aEluQnl0ZXMgLSBvZmZzZXRJbkJ5dGVzKSB+LyBJbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgX3JhbmdlQ2hlY2soCiAgICAgICAgdGhpcy5sZW5ndGhJbkJ5dGVzLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGggKiBJbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIF9vZmZzZXRBbGlnbm1lbnRDaGVjayhvZmZzZXRJbkJ5dGVzLCBJbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIHJldHVybiBuZXcgX0ludDMyQXJyYXlWaWV3Ll8odGhpcy5fZGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIFVpbnQzMkxpc3QgYXNVaW50MzJMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICBsZW5ndGggPz89CiAgICAgICAgKHRoaXMubGVuZ3RoSW5CeXRlcyAtIG9mZnNldEluQnl0ZXMpIH4vIFVpbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgX3JhbmdlQ2hlY2soCiAgICAgICAgdGhpcy5sZW5ndGhJbkJ5dGVzLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGggKiBVaW50MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgICBfb2Zmc2V0QWxpZ25tZW50Q2hlY2sob2Zmc2V0SW5CeXRlcywgVWludDMyTGlzdC5ieXRlc1BlckVsZW1lbnQpOwogICAgcmV0dXJuIG5ldyBfVWludDMyQXJyYXlWaWV3Ll8odGhpcy5fZGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIEludDY0TGlzdCBhc0ludDY0TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgbGVuZ3RoID8/PQogICAgICAgICh0aGlzLmxlbmd0aEluQnl0ZXMgLSBvZmZzZXRJbkJ5dGVzKSB+LyBJbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgX3JhbmdlQ2hlY2soCiAgICAgICAgdGhpcy5sZW5ndGhJbkJ5dGVzLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGggKiBJbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIF9vZmZzZXRBbGlnbm1lbnRDaGVjayhvZmZzZXRJbkJ5dGVzLCBJbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIHJldHVybiBuZXcgX0ludDY0QXJyYXlWaWV3Ll8odGhpcy5fZGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIFVpbnQ2NExpc3QgYXNVaW50NjRMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICBsZW5ndGggPz89CiAgICAgICAgKHRoaXMubGVuZ3RoSW5CeXRlcyAtIG9mZnNldEluQnl0ZXMpIH4vIFVpbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgX3JhbmdlQ2hlY2soCiAgICAgICAgdGhpcy5sZW5ndGhJbkJ5dGVzLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGggKiBVaW50NjRMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgICBfb2Zmc2V0QWxpZ25tZW50Q2hlY2sob2Zmc2V0SW5CeXRlcywgVWludDY0TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogICAgcmV0dXJuIG5ldyBfVWludDY0QXJyYXlWaWV3Ll8odGhpcy5fZGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIEZsb2F0MzJMaXN0IGFzRmxvYXQzMkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIGxlbmd0aCA/Pz0KICAgICAgICAodGhpcy5sZW5ndGhJbkJ5dGVzIC0gb2Zmc2V0SW5CeXRlcykgfi8gRmxvYXQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgX3JhbmdlQ2hlY2sodGhpcy5sZW5ndGhJbkJ5dGVzLCBvZmZzZXRJbkJ5dGVzLAogICAgICAgIGxlbmd0aCAqIEZsb2F0MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgICBfb2Zmc2V0QWxpZ25tZW50Q2hlY2sob2Zmc2V0SW5CeXRlcywgRmxvYXQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIHJldHVybiBuZXcgX0Zsb2F0MzJBcnJheVZpZXcuXyh0aGlzLl9kYXRhLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgRmxvYXQ2NExpc3QgYXNGbG9hdDY0TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgbGVuZ3RoID8/PQogICAgICAgICh0aGlzLmxlbmd0aEluQnl0ZXMgLSBvZmZzZXRJbkJ5dGVzKSB+LyBGbG9hdDY0TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgICBfcmFuZ2VDaGVjayh0aGlzLmxlbmd0aEluQnl0ZXMsIG9mZnNldEluQnl0ZXMsCiAgICAgICAgbGVuZ3RoICogRmxvYXQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIF9vZmZzZXRBbGlnbm1lbnRDaGVjayhvZmZzZXRJbkJ5dGVzLCBGbG9hdDY0TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogICAgcmV0dXJuIG5ldyBfRmxvYXQ2NEFycmF5Vmlldy5fKHRoaXMuX2RhdGEsIG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICBGbG9hdDMyeDRMaXN0IGFzRmxvYXQzMng0TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgbGVuZ3RoID8/PQogICAgICAgICh0aGlzLmxlbmd0aEluQnl0ZXMgLSBvZmZzZXRJbkJ5dGVzKSB+LyBGbG9hdDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICAgIF9yYW5nZUNoZWNrKHRoaXMubGVuZ3RoSW5CeXRlcywgb2Zmc2V0SW5CeXRlcywKICAgICAgICBsZW5ndGggKiBGbG9hdDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgICBfb2Zmc2V0QWxpZ25tZW50Q2hlY2sob2Zmc2V0SW5CeXRlcywgRmxvYXQzMng0TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogICAgcmV0dXJuIG5ldyBfRmxvYXQzMng0QXJyYXlWaWV3Ll8odGhpcy5fZGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIEludDMyeDRMaXN0IGFzSW50MzJ4NExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIGxlbmd0aCA/Pz0KICAgICAgICAodGhpcy5sZW5ndGhJbkJ5dGVzIC0gb2Zmc2V0SW5CeXRlcykgfi8gSW50MzJ4NExpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgX3JhbmdlQ2hlY2sodGhpcy5sZW5ndGhJbkJ5dGVzLCBvZmZzZXRJbkJ5dGVzLAogICAgICAgIGxlbmd0aCAqIEludDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgICBfb2Zmc2V0QWxpZ25tZW50Q2hlY2sob2Zmc2V0SW5CeXRlcywgSW50MzJ4NExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIHJldHVybiBuZXcgX0ludDMyeDRBcnJheVZpZXcuXyh0aGlzLl9kYXRhLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgRmxvYXQ2NHgyTGlzdCBhc0Zsb2F0NjR4Mkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIGxlbmd0aCA/Pz0KICAgICAgICAodGhpcy5sZW5ndGhJbkJ5dGVzIC0gb2Zmc2V0SW5CeXRlcykgfi8gRmxvYXQ2NHgyTGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgICBfcmFuZ2VDaGVjayh0aGlzLmxlbmd0aEluQnl0ZXMsIG9mZnNldEluQnl0ZXMsCiAgICAgICAgbGVuZ3RoICogRmxvYXQ2NHgyTGlzdC5ieXRlc1BlckVsZW1lbnQpOwogICAgX29mZnNldEFsaWdubWVudENoZWNrKG9mZnNldEluQnl0ZXMsIEZsb2F0NjR4Mkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIHJldHVybiBuZXcgX0Zsb2F0NjR4MkFycmF5Vmlldy5fKHRoaXMuX2RhdGEsIG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfVHlwZWRMaXN0IGV4dGVuZHMgX1R5cGVkTGlzdEJhc2UgewogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzOwoKICAvLyBEZWZhdWx0IG1ldGhvZCBpbXBsZW1lbnRpbmcgcGFydHMgb2YgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBvZmZzZXRJbkJ5dGVzIHsKICAgIHJldHVybiAwOwogIH0KCiAgaW50IGdldCBsZW5ndGhJbkJ5dGVzIHsKICAgIHJldHVybiBsZW5ndGggKiBlbGVtZW50U2l6ZUluQnl0ZXM7CiAgfQoKICBfQnl0ZUJ1ZmZlciBnZXQgYnVmZmVyID0+IG5ldyBfQnl0ZUJ1ZmZlcih0aGlzKTsKCiAgLy8gTWV0aG9kcyBpbXBsZW1lbnRpbmcgdGhlIGNvbGxlY3Rpb24gaW50ZXJmYWNlLgoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IGdldCBsZW5ndGggbmF0aXZlICJUeXBlZERhdGFfbGVuZ3RoIjsKCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IF9nZXRJbnQ4KGludCBvZmZzZXRJbkJ5dGVzKSBuYXRpdmUgIlR5cGVkRGF0YV9HZXRJbnQ4IjsKICB2b2lkIF9zZXRJbnQ4KGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgdmFsdWUpIG5hdGl2ZSAiVHlwZWREYXRhX1NldEludDgiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IF9nZXRVaW50OChpbnQgb2Zmc2V0SW5CeXRlcykgbmF0aXZlICJUeXBlZERhdGFfR2V0VWludDgiOwogIHZvaWQgX3NldFVpbnQ4KGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgdmFsdWUpIG5hdGl2ZSAiVHlwZWREYXRhX1NldFVpbnQ4IjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBfZ2V0SW50MTYoaW50IG9mZnNldEluQnl0ZXMpIG5hdGl2ZSAiVHlwZWREYXRhX0dldEludDE2IjsKICB2b2lkIF9zZXRJbnQxNihpbnQgb2Zmc2V0SW5CeXRlcywgaW50IHZhbHVlKSBuYXRpdmUgIlR5cGVkRGF0YV9TZXRJbnQxNiI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBpbnQgX2dldFVpbnQxNihpbnQgb2Zmc2V0SW5CeXRlcykgbmF0aXZlICJUeXBlZERhdGFfR2V0VWludDE2IjsKICB2b2lkIF9zZXRVaW50MTYoaW50IG9mZnNldEluQnl0ZXMsIGludCB2YWx1ZSkgbmF0aXZlICJUeXBlZERhdGFfU2V0VWludDE2IjsKCiAgaW50IF9nZXRJbnQzMihpbnQgb2Zmc2V0SW5CeXRlcykgbmF0aXZlICJUeXBlZERhdGFfR2V0SW50MzIiOwogIHZvaWQgX3NldEludDMyKGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgdmFsdWUpIG5hdGl2ZSAiVHlwZWREYXRhX1NldEludDMyIjsKCiAgaW50IF9nZXRVaW50MzIoaW50IG9mZnNldEluQnl0ZXMpIG5hdGl2ZSAiVHlwZWREYXRhX0dldFVpbnQzMiI7CiAgdm9pZCBfc2V0VWludDMyKGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgdmFsdWUpIG5hdGl2ZSAiVHlwZWREYXRhX1NldFVpbnQzMiI7CgogIGludCBfZ2V0SW50NjQoaW50IG9mZnNldEluQnl0ZXMpIG5hdGl2ZSAiVHlwZWREYXRhX0dldEludDY0IjsKICB2b2lkIF9zZXRJbnQ2NChpbnQgb2Zmc2V0SW5CeXRlcywgaW50IHZhbHVlKSBuYXRpdmUgIlR5cGVkRGF0YV9TZXRJbnQ2NCI7CgogIGludCBfZ2V0VWludDY0KGludCBvZmZzZXRJbkJ5dGVzKSBuYXRpdmUgIlR5cGVkRGF0YV9HZXRVaW50NjQiOwogIHZvaWQgX3NldFVpbnQ2NChpbnQgb2Zmc2V0SW5CeXRlcywgaW50IHZhbHVlKSBuYXRpdmUgIlR5cGVkRGF0YV9TZXRVaW50NjQiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCiAgZG91YmxlIF9nZXRGbG9hdDMyKGludCBvZmZzZXRJbkJ5dGVzKSBuYXRpdmUgIlR5cGVkRGF0YV9HZXRGbG9hdDMyIjsKICB2b2lkIF9zZXRGbG9hdDMyKGludCBvZmZzZXRJbkJ5dGVzLCBkb3VibGUgdmFsdWUpCiAgICAgIG5hdGl2ZSAiVHlwZWREYXRhX1NldEZsb2F0MzIiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCiAgZG91YmxlIF9nZXRGbG9hdDY0KGludCBvZmZzZXRJbkJ5dGVzKSBuYXRpdmUgIlR5cGVkRGF0YV9HZXRGbG9hdDY0IjsKICB2b2lkIF9zZXRGbG9hdDY0KGludCBvZmZzZXRJbkJ5dGVzLCBkb3VibGUgdmFsdWUpCiAgICAgIG5hdGl2ZSAiVHlwZWREYXRhX1NldEZsb2F0NjQiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IF9nZXRGbG9hdDMyeDQoaW50IG9mZnNldEluQnl0ZXMpIG5hdGl2ZSAiVHlwZWREYXRhX0dldEZsb2F0MzJ4NCI7CiAgdm9pZCBfc2V0RmxvYXQzMng0KGludCBvZmZzZXRJbkJ5dGVzLCBGbG9hdDMyeDQgdmFsdWUpCiAgICAgIG5hdGl2ZSAiVHlwZWREYXRhX1NldEZsb2F0MzJ4NCI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDMyeDQpCiAgSW50MzJ4NCBfZ2V0SW50MzJ4NChpbnQgb2Zmc2V0SW5CeXRlcykgbmF0aXZlICJUeXBlZERhdGFfR2V0SW50MzJ4NCI7CiAgdm9pZCBfc2V0SW50MzJ4NChpbnQgb2Zmc2V0SW5CeXRlcywgSW50MzJ4NCB2YWx1ZSkKICAgICAgbmF0aXZlICJUeXBlZERhdGFfU2V0SW50MzJ4NCI7CgogIEZsb2F0NjR4MiBfZ2V0RmxvYXQ2NHgyKGludCBvZmZzZXRJbkJ5dGVzKSBuYXRpdmUgIlR5cGVkRGF0YV9HZXRGbG9hdDY0eDIiOwogIHZvaWQgX3NldEZsb2F0NjR4MihpbnQgb2Zmc2V0SW5CeXRlcywgRmxvYXQ2NHgyIHZhbHVlKQogICAgICBuYXRpdmUgIlR5cGVkRGF0YV9TZXRGbG9hdDY0eDIiOwoKICAvKioKICAgKiBTdG9yZXMgdGhlIFtDb2RlVW5pdHNdIGFzIFVURi0xNiB1bml0cyBpbnRvIHRoaXMgVHlwZWREYXRhIGF0CiAgICogcG9zaXRpb25zIFtzdGFydF0uLltlbmRdICh1aW50MTYgaW5kaWNlcykuCiAgICovCiAgdm9pZCBfc2V0Q29kZVVuaXRzKAogICAgICBDb2RlVW5pdHMgdW5pdHMsIGludCBieXRlU3RhcnQsIGludCBsZW5ndGgsIGludCBza2lwQ291bnQpIHsKICAgIGFzc2VydChieXRlU3RhcnQgKyBsZW5ndGggKiBVaW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudCA8PSBsZW5ndGhJbkJ5dGVzKTsKICAgIFN0cmluZyBzdHJpbmcgPSBDb2RlVW5pdHMuc3RyaW5nT2YodW5pdHMpOwogICAgaW50IHNsaWNlRW5kID0gc2tpcENvdW50ICsgbGVuZ3RoOwogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2UoCiAgICAgICAgc2tpcENvdW50LCBzbGljZUVuZCwgc3RyaW5nLmxlbmd0aCwgInNraXBDb3VudCIsICJza2lwQ291bnQgKyBsZW5ndGgiKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgX3NldFVpbnQxNihieXRlU3RhcnQgKyBpICogVWludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQsCiAgICAgICAgICBzdHJpbmcuY29kZVVuaXRBdChza2lwQ291bnQgKyBpKSk7CiAgICB9CiAgfQp9CgpAcGF0Y2gKY2xhc3MgSW50OExpc3QgewogIEBwYXRjaAogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDhMaXN0KQogIGZhY3RvcnkgSW50OExpc3QoaW50IGxlbmd0aCkgbmF0aXZlICJUeXBlZERhdGFfSW50OEFycmF5X25ldyI7CgogIEBwYXRjaAogIGZhY3RvcnkgSW50OExpc3QuZnJvbUxpc3QoTGlzdDxpbnQ+IGVsZW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IEludDhMaXN0KGVsZW1lbnRzLmxlbmd0aCkKICAgICAgLi5zZXRSYW5nZSgwLCBlbGVtZW50cy5sZW5ndGgsIGVsZW1lbnRzKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0ludDhMaXN0IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48SW50OExpc3Q+CiAgICBpbXBsZW1lbnRzIEludDhMaXN0IHsKICBmYWN0b3J5IF9JbnQ4TGlzdC5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBMaXN0IGludGVyZmFjZS4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF9nZXRJbnQ4KGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0SW50OChpbmRleCwgX3RvSW50OCh2YWx1ZSkpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBJbnQ4TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgSW50OExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBJbnQ4TGlzdChsZW5ndGgpOwogIH0KfQoKQHBhdGNoCmNsYXNzIFVpbnQ4TGlzdCB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfVWludDhMaXN0KQogIGZhY3RvcnkgVWludDhMaXN0KGludCBsZW5ndGgpIG5hdGl2ZSAiVHlwZWREYXRhX1VpbnQ4QXJyYXlfbmV3IjsKCiAgQHBhdGNoCiAgZmFjdG9yeSBVaW50OExpc3QuZnJvbUxpc3QoTGlzdDxpbnQ+IGVsZW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IFVpbnQ4TGlzdChlbGVtZW50cy5sZW5ndGgpCiAgICAgIC4uc2V0UmFuZ2UoMCwgZWxlbWVudHMubGVuZ3RoLCBlbGVtZW50cyk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9VaW50OExpc3QgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxVaW50OExpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQ4TGlzdCB7CiAgZmFjdG9yeSBfVWludDhMaXN0Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2RzIGltcGxlbWVudGluZyBMaXN0IGludGVyZmFjZS4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF9nZXRVaW50OChpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldFVpbnQ4KGluZGV4LCBfdG9VaW50OCh2YWx1ZSkpOwogIH0KCiAgLy8gTWV0aG9kcyBpbXBsZW1lbnRpbmcgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gVWludDhMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBVaW50OExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBVaW50OExpc3QobGVuZ3RoKTsKICB9Cn0KCkBwYXRjaApjbGFzcyBVaW50OENsYW1wZWRMaXN0IHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9VaW50OENsYW1wZWRMaXN0KQogIGZhY3RvcnkgVWludDhDbGFtcGVkTGlzdChpbnQgbGVuZ3RoKSBuYXRpdmUgIlR5cGVkRGF0YV9VaW50OENsYW1wZWRBcnJheV9uZXciOwoKICBAcGF0Y2gKICBmYWN0b3J5IFVpbnQ4Q2xhbXBlZExpc3QuZnJvbUxpc3QoTGlzdDxpbnQ+IGVsZW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IFVpbnQ4Q2xhbXBlZExpc3QoZWxlbWVudHMubGVuZ3RoKQogICAgICAuLnNldFJhbmdlKDAsIGVsZW1lbnRzLmxlbmd0aCwgZWxlbWVudHMpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfVWludDhDbGFtcGVkTGlzdCBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPFVpbnQ4Q2xhbXBlZExpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQ4Q2xhbXBlZExpc3QgewogIGZhY3RvcnkgX1VpbnQ4Q2xhbXBlZExpc3QuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZHMgaW1wbGVtZW50aW5nIExpc3QgaW50ZXJmYWNlLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldFVpbnQ4KGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0VWludDgoaW5kZXgsIF90b0NsYW1wZWRVaW50OCh2YWx1ZSkpOwogIH0KCiAgLy8gTWV0aG9kcyBpbXBsZW1lbnRpbmcgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gVWludDhMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBVaW50OENsYW1wZWRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgVWludDhDbGFtcGVkTGlzdChsZW5ndGgpOwogIH0KfQoKQHBhdGNoCmNsYXNzIEludDE2TGlzdCB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MTZMaXN0KQogIGZhY3RvcnkgSW50MTZMaXN0KGludCBsZW5ndGgpIG5hdGl2ZSAiVHlwZWREYXRhX0ludDE2QXJyYXlfbmV3IjsKCiAgQHBhdGNoCiAgZmFjdG9yeSBJbnQxNkxpc3QuZnJvbUxpc3QoTGlzdDxpbnQ+IGVsZW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IEludDE2TGlzdChlbGVtZW50cy5sZW5ndGgpCiAgICAgIC4uc2V0UmFuZ2UoMCwgZWxlbWVudHMubGVuZ3RoLCBlbGVtZW50cyk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9JbnQxNkxpc3QgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxJbnQxNkxpc3Q+CiAgICBpbXBsZW1lbnRzIEludDE2TGlzdCB7CiAgZmFjdG9yeSBfSW50MTZMaXN0Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIExpc3QgaW50ZXJmYWNlLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRJbnQxNihpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRJbnQxNihpbmRleCwgX3RvSW50MTYodmFsdWUpKTsKICB9CgogIHZvaWQgc2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZSBpdGVyYWJsZSwgW2ludCBza2lwQ291bnQgPSAwXSkgewogICAgaWYgKGl0ZXJhYmxlIGlzIENvZGVVbml0cykgewogICAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgICAgaW50IGJ5dGVTdGFydCA9IHRoaXMub2Zmc2V0SW5CeXRlcyArIHN0YXJ0ICogSW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICAgICAgX3NldENvZGVVbml0cyhpdGVyYWJsZSwgYnl0ZVN0YXJ0LCBsZW5ndGgsIHNraXBDb3VudCk7CiAgICB9IGVsc2UgewogICAgICBzdXBlci5zZXRSYW5nZShzdGFydCwgZW5kLCBpdGVyYWJsZSwgc2tpcENvdW50KTsKICAgIH0KICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gSW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBJbnQxNkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBJbnQxNkxpc3QobGVuZ3RoKTsKICB9CgogIGludCBfZ2V0SW5kZXhlZEludDE2KGludCBpbmRleCkgewogICAgcmV0dXJuIF9nZXRJbnQxNihpbmRleCAqIEludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZEludDE2KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBfc2V0SW50MTYoaW5kZXggKiBJbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcGF0Y2gKY2xhc3MgVWludDE2TGlzdCB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfVWludDE2TGlzdCkKICBmYWN0b3J5IFVpbnQxNkxpc3QoaW50IGxlbmd0aCkgbmF0aXZlICJUeXBlZERhdGFfVWludDE2QXJyYXlfbmV3IjsKCiAgQHBhdGNoCiAgZmFjdG9yeSBVaW50MTZMaXN0LmZyb21MaXN0KExpc3Q8aW50PiBlbGVtZW50cykgewogICAgcmV0dXJuIG5ldyBVaW50MTZMaXN0KGVsZW1lbnRzLmxlbmd0aCkKICAgICAgLi5zZXRSYW5nZSgwLCBlbGVtZW50cy5sZW5ndGgsIGVsZW1lbnRzKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1VpbnQxNkxpc3QgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxVaW50MTZMaXN0PgogICAgaW1wbGVtZW50cyBVaW50MTZMaXN0IHsKICBmYWN0b3J5IF9VaW50MTZMaXN0Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBMaXN0IGludGVyZmFjZS4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF9nZXRJbmRleGVkVWludDE2KGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0SW5kZXhlZFVpbnQxNihpbmRleCwgX3RvVWludDE2KHZhbHVlKSk7CiAgfQoKICB2b2lkIHNldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGUgaXRlcmFibGUsIFtpbnQgc2tpcENvdW50ID0gMF0pIHsKICAgIGlmIChpdGVyYWJsZSBpcyBDb2RlVW5pdHMpIHsKICAgICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICAgIGludCBieXRlU3RhcnQgPSB0aGlzLm9mZnNldEluQnl0ZXMgKyBzdGFydCAqIFVpbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgICBfc2V0Q29kZVVuaXRzKGl0ZXJhYmxlLCBieXRlU3RhcnQsIGxlbmd0aCwgc2tpcENvdW50KTsKICAgIH0gZWxzZSB7CiAgICAgIHN1cGVyLnNldFJhbmdlKHN0YXJ0LCBlbmQsIGl0ZXJhYmxlLCBza2lwQ291bnQpOwogICAgfQogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gVWludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgVWludDE2TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IFVpbnQxNkxpc3QobGVuZ3RoKTsKICB9CgogIGludCBfZ2V0SW5kZXhlZFVpbnQxNihpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZ2V0VWludDE2KGluZGV4ICogVWludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZFVpbnQxNihpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgX3NldFVpbnQxNihpbmRleCAqIFVpbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcGF0Y2gKY2xhc3MgSW50MzJMaXN0IHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMkxpc3QpCiAgZmFjdG9yeSBJbnQzMkxpc3QoaW50IGxlbmd0aCkgbmF0aXZlICJUeXBlZERhdGFfSW50MzJBcnJheV9uZXciOwoKICBAcGF0Y2gKICBmYWN0b3J5IEludDMyTGlzdC5mcm9tTGlzdChMaXN0PGludD4gZWxlbWVudHMpIHsKICAgIHJldHVybiBuZXcgSW50MzJMaXN0KGVsZW1lbnRzLmxlbmd0aCkKICAgICAgLi5zZXRSYW5nZSgwLCBlbGVtZW50cy5sZW5ndGgsIGVsZW1lbnRzKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0ludDMyTGlzdCBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPEludDMyTGlzdD4KICAgIGltcGxlbWVudHMgSW50MzJMaXN0IHsKICBmYWN0b3J5IF9JbnQzMkxpc3QuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZEludDMyKGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0SW5kZXhlZEludDMyKGluZGV4LCBfdG9JbnQzMih2YWx1ZSkpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBJbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEludDMyTGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEludDMyTGlzdChsZW5ndGgpOwogIH0KCiAgaW50IF9nZXRJbmRleGVkSW50MzIoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldEludDMyKGluZGV4ICogSW50MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgfQoKICB2b2lkIF9zZXRJbmRleGVkSW50MzIoaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIF9zZXRJbnQzMihpbmRleCAqIEludDMyTGlzdC5ieXRlc1BlckVsZW1lbnQsIHZhbHVlKTsKICB9Cn0KCkBwYXRjaApjbGFzcyBVaW50MzJMaXN0IHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9VaW50MzJMaXN0KQogIGZhY3RvcnkgVWludDMyTGlzdChpbnQgbGVuZ3RoKSBuYXRpdmUgIlR5cGVkRGF0YV9VaW50MzJBcnJheV9uZXciOwoKICBAcGF0Y2gKICBmYWN0b3J5IFVpbnQzMkxpc3QuZnJvbUxpc3QoTGlzdDxpbnQ+IGVsZW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IFVpbnQzMkxpc3QoZWxlbWVudHMubGVuZ3RoKQogICAgICAuLnNldFJhbmdlKDAsIGVsZW1lbnRzLmxlbmd0aCwgZWxlbWVudHMpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfVWludDMyTGlzdCBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPFVpbnQzMkxpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQzMkxpc3QgewogIGZhY3RvcnkgX1VpbnQzMkxpc3QuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZFVpbnQzMihpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRVaW50MzIoaW5kZXgsIF90b1VpbnQzMih2YWx1ZSkpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gVWludDMyTGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgVWludDMyTGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IFVpbnQzMkxpc3QobGVuZ3RoKTsKICB9CgogIGludCBfZ2V0SW5kZXhlZFVpbnQzMihpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZ2V0VWludDMyKGluZGV4ICogVWludDMyTGlzdC5ieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZFVpbnQzMihpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgX3NldFVpbnQzMihpbmRleCAqIFVpbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcGF0Y2gKY2xhc3MgSW50NjRMaXN0IHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQ2NExpc3QpCiAgZmFjdG9yeSBJbnQ2NExpc3QoaW50IGxlbmd0aCkgbmF0aXZlICJUeXBlZERhdGFfSW50NjRBcnJheV9uZXciOwoKICBAcGF0Y2gKICBmYWN0b3J5IEludDY0TGlzdC5mcm9tTGlzdChMaXN0PGludD4gZWxlbWVudHMpIHsKICAgIHJldHVybiBuZXcgSW50NjRMaXN0KGVsZW1lbnRzLmxlbmd0aCkKICAgICAgLi5zZXRSYW5nZSgwLCBlbGVtZW50cy5sZW5ndGgsIGVsZW1lbnRzKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0ludDY0TGlzdCBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPEludDY0TGlzdD4KICAgIGltcGxlbWVudHMgSW50NjRMaXN0IHsKICBmYWN0b3J5IF9JbnQ2NExpc3QuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZEludDY0KGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0SW5kZXhlZEludDY0KGluZGV4LCB2YWx1ZSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBJbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEludDY0TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEludDY0TGlzdChsZW5ndGgpOwogIH0KCiAgaW50IF9nZXRJbmRleGVkSW50NjQoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldEludDY0KGluZGV4ICogSW50NjRMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgfQoKICB2b2lkIF9zZXRJbmRleGVkSW50NjQoaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIF9zZXRJbnQ2NChpbmRleCAqIEludDY0TGlzdC5ieXRlc1BlckVsZW1lbnQsIHZhbHVlKTsKICB9Cn0KCkBwYXRjaApjbGFzcyBVaW50NjRMaXN0IHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9VaW50NjRMaXN0KQogIGZhY3RvcnkgVWludDY0TGlzdChpbnQgbGVuZ3RoKSBuYXRpdmUgIlR5cGVkRGF0YV9VaW50NjRBcnJheV9uZXciOwoKICBAcGF0Y2gKICBmYWN0b3J5IFVpbnQ2NExpc3QuZnJvbUxpc3QoTGlzdDxpbnQ+IGVsZW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IFVpbnQ2NExpc3QoZWxlbWVudHMubGVuZ3RoKQogICAgICAuLnNldFJhbmdlKDAsIGVsZW1lbnRzLmxlbmd0aCwgZWxlbWVudHMpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfVWludDY0TGlzdCBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPFVpbnQ2NExpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQ2NExpc3QgewogIGZhY3RvcnkgX1VpbnQ2NExpc3QuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZFVpbnQ2NChpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRVaW50NjQoaW5kZXgsIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIFVpbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIFVpbnQ2NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBVaW50NjRMaXN0KGxlbmd0aCk7CiAgfQoKICBpbnQgX2dldEluZGV4ZWRVaW50NjQoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldFVpbnQ2NChpbmRleCAqIFVpbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRVaW50NjQoaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIF9zZXRVaW50NjQoaW5kZXggKiBVaW50NjRMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHBhdGNoCmNsYXNzIEZsb2F0MzJMaXN0IHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyTGlzdCkKICBmYWN0b3J5IEZsb2F0MzJMaXN0KGludCBsZW5ndGgpIG5hdGl2ZSAiVHlwZWREYXRhX0Zsb2F0MzJBcnJheV9uZXciOwoKICBAcGF0Y2gKICBmYWN0b3J5IEZsb2F0MzJMaXN0LmZyb21MaXN0KExpc3Q8ZG91YmxlPiBlbGVtZW50cykgewogICAgcmV0dXJuIG5ldyBGbG9hdDMyTGlzdChlbGVtZW50cy5sZW5ndGgpCiAgICAgIC4uc2V0UmFuZ2UoMCwgZWxlbWVudHMubGVuZ3RoLCBlbGVtZW50cyk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9GbG9hdDMyTGlzdCBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0RvdWJsZUxpc3RNaXhpbiwgX1R5cGVkRG91YmxlTGlzdE1peGluPEZsb2F0MzJMaXN0PgogICAgaW1wbGVtZW50cyBGbG9hdDMyTGlzdCB7CiAgZmFjdG9yeSBfRmxvYXQzMkxpc3QuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfRG91YmxlIikKICBkb3VibGUgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRGbG9hdDMyKGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgZG91YmxlIHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0SW5kZXhlZEZsb2F0MzIoaW5kZXgsIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEZsb2F0MzJMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBGbG9hdDMyTGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEZsb2F0MzJMaXN0KGxlbmd0aCk7CiAgfQoKICBkb3VibGUgX2dldEluZGV4ZWRGbG9hdDMyKGludCBpbmRleCkgewogICAgcmV0dXJuIF9nZXRGbG9hdDMyKGluZGV4ICogRmxvYXQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRGbG9hdDMyKGludCBpbmRleCwgZG91YmxlIHZhbHVlKSB7CiAgICBfc2V0RmxvYXQzMihpbmRleCAqIEZsb2F0MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHBhdGNoCmNsYXNzIEZsb2F0NjRMaXN0IHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDY0TGlzdCkKICBmYWN0b3J5IEZsb2F0NjRMaXN0KGludCBsZW5ndGgpIG5hdGl2ZSAiVHlwZWREYXRhX0Zsb2F0NjRBcnJheV9uZXciOwoKICBAcGF0Y2gKICBmYWN0b3J5IEZsb2F0NjRMaXN0LmZyb21MaXN0KExpc3Q8ZG91YmxlPiBlbGVtZW50cykgewogICAgcmV0dXJuIG5ldyBGbG9hdDY0TGlzdChlbGVtZW50cy5sZW5ndGgpCiAgICAgIC4uc2V0UmFuZ2UoMCwgZWxlbWVudHMubGVuZ3RoLCBlbGVtZW50cyk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9GbG9hdDY0TGlzdCBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0RvdWJsZUxpc3RNaXhpbiwgX1R5cGVkRG91YmxlTGlzdE1peGluPEZsb2F0NjRMaXN0PgogICAgaW1wbGVtZW50cyBGbG9hdDY0TGlzdCB7CiAgZmFjdG9yeSBfRmxvYXQ2NExpc3QuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfRG91YmxlIikKICBkb3VibGUgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRGbG9hdDY0KGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgZG91YmxlIHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0SW5kZXhlZEZsb2F0NjQoaW5kZXgsIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEZsb2F0NjRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBGbG9hdDY0TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEZsb2F0NjRMaXN0KGxlbmd0aCk7CiAgfQoKICBkb3VibGUgX2dldEluZGV4ZWRGbG9hdDY0KGludCBpbmRleCkgewogICAgcmV0dXJuIF9nZXRGbG9hdDY0KGluZGV4ICogRmxvYXQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRGbG9hdDY0KGludCBpbmRleCwgZG91YmxlIHZhbHVlKSB7CiAgICBfc2V0RmxvYXQ2NChpbmRleCAqIEZsb2F0NjRMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHBhdGNoCmNsYXNzIEZsb2F0MzJ4NExpc3QgewogIEBwYXRjaAogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NExpc3QpCiAgZmFjdG9yeSBGbG9hdDMyeDRMaXN0KGludCBsZW5ndGgpIG5hdGl2ZSAiVHlwZWREYXRhX0Zsb2F0MzJ4NEFycmF5X25ldyI7CgogIEBwYXRjaAogIGZhY3RvcnkgRmxvYXQzMng0TGlzdC5mcm9tTGlzdChMaXN0PEZsb2F0MzJ4ND4gZWxlbWVudHMpIHsKICAgIHJldHVybiBuZXcgRmxvYXQzMng0TGlzdChlbGVtZW50cy5sZW5ndGgpCiAgICAgIC4uc2V0UmFuZ2UoMCwgZWxlbWVudHMubGVuZ3RoLCBlbGVtZW50cyk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9GbG9hdDMyeDRMaXN0IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfRmxvYXQzMng0TGlzdE1peGluCiAgICBpbXBsZW1lbnRzIEZsb2F0MzJ4NExpc3QgewogIGZhY3RvcnkgX0Zsb2F0MzJ4NExpc3QuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBGbG9hdDMyeDQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRGbG9hdDMyeDQoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBGbG9hdDMyeDQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRJbmRleGVkRmxvYXQzMng0KGluZGV4LCB2YWx1ZSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBGbG9hdDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBGbG9hdDMyeDRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgRmxvYXQzMng0TGlzdChsZW5ndGgpOwogIH0KCiAgRmxvYXQzMng0IF9nZXRJbmRleGVkRmxvYXQzMng0KGludCBpbmRleCkgewogICAgcmV0dXJuIF9nZXRGbG9hdDMyeDQoaW5kZXggKiBGbG9hdDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgfQoKICB2b2lkIF9zZXRJbmRleGVkRmxvYXQzMng0KGludCBpbmRleCwgRmxvYXQzMng0IHZhbHVlKSB7CiAgICBfc2V0RmxvYXQzMng0KGluZGV4ICogRmxvYXQzMng0TGlzdC5ieXRlc1BlckVsZW1lbnQsIHZhbHVlKTsKICB9Cn0KCkBwYXRjaApjbGFzcyBJbnQzMng0TGlzdCB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MzJ4NExpc3QpCiAgZmFjdG9yeSBJbnQzMng0TGlzdChpbnQgbGVuZ3RoKSBuYXRpdmUgIlR5cGVkRGF0YV9JbnQzMng0QXJyYXlfbmV3IjsKCiAgQHBhdGNoCiAgZmFjdG9yeSBJbnQzMng0TGlzdC5mcm9tTGlzdChMaXN0PEludDMyeDQ+IGVsZW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IEludDMyeDRMaXN0KGVsZW1lbnRzLmxlbmd0aCkKICAgICAgLi5zZXRSYW5nZSgwLCBlbGVtZW50cy5sZW5ndGgsIGVsZW1lbnRzKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0ludDMyeDRMaXN0IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfSW50MzJ4NExpc3RNaXhpbgogICAgaW1wbGVtZW50cyBJbnQzMng0TGlzdCB7CiAgZmFjdG9yeSBfSW50MzJ4NExpc3QuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDMyeDQpCiAgSW50MzJ4NCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZEludDMyeDQoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBJbnQzMng0IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0SW5kZXhlZEludDMyeDQoaW5kZXgsIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEludDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBJbnQzMng0TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEludDMyeDRMaXN0KGxlbmd0aCk7CiAgfQoKICBJbnQzMng0IF9nZXRJbmRleGVkSW50MzJ4NChpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZ2V0SW50MzJ4NChpbmRleCAqIEludDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgfQoKICB2b2lkIF9zZXRJbmRleGVkSW50MzJ4NChpbnQgaW5kZXgsIEludDMyeDQgdmFsdWUpIHsKICAgIF9zZXRJbnQzMng0KGluZGV4ICogSW50MzJ4NExpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcGF0Y2gKY2xhc3MgRmxvYXQ2NHgyTGlzdCB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQ2NHgyTGlzdCkKICBmYWN0b3J5IEZsb2F0NjR4Mkxpc3QoaW50IGxlbmd0aCkgbmF0aXZlICJUeXBlZERhdGFfRmxvYXQ2NHgyQXJyYXlfbmV3IjsKCiAgQHBhdGNoCiAgZmFjdG9yeSBGbG9hdDY0eDJMaXN0LmZyb21MaXN0KExpc3Q8RmxvYXQ2NHgyPiBlbGVtZW50cykgewogICAgcmV0dXJuIG5ldyBGbG9hdDY0eDJMaXN0KGVsZW1lbnRzLmxlbmd0aCkKICAgICAgLi5zZXRSYW5nZSgwLCBlbGVtZW50cy5sZW5ndGgsIGVsZW1lbnRzKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0Zsb2F0NjR4Mkxpc3QgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9GbG9hdDY0eDJMaXN0TWl4aW4KICAgIGltcGxlbWVudHMgRmxvYXQ2NHgyTGlzdCB7CiAgZmFjdG9yeSBfRmxvYXQ2NHgyTGlzdC5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQ2NHgyKQogIEZsb2F0NjR4MiBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZEZsb2F0NjR4MihpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIEZsb2F0NjR4MiB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRGbG9hdDY0eDIoaW5kZXgsIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEZsb2F0NjR4Mkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEZsb2F0NjR4Mkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBGbG9hdDY0eDJMaXN0KGxlbmd0aCk7CiAgfQoKICBGbG9hdDY0eDIgX2dldEluZGV4ZWRGbG9hdDY0eDIoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldEZsb2F0NjR4MihpbmRleCAqIEZsb2F0NjR4Mkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRGbG9hdDY0eDIoaW50IGluZGV4LCBGbG9hdDY0eDIgdmFsdWUpIHsKICAgIF9zZXRGbG9hdDY0eDIoaW5kZXggKiBGbG9hdDY0eDJMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRXh0ZXJuYWxJbnQ4QXJyYXkgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxJbnQ4TGlzdD4KICAgIGltcGxlbWVudHMgSW50OExpc3QgewogIGZhY3RvcnkgX0V4dGVybmFsSW50OEFycmF5Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBMaXN0IGludGVyZmFjZS4KICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEludDgoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRJbnQ4KGluZGV4LCB2YWx1ZSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBJbnQ4TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgSW50OExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBJbnQ4TGlzdChsZW5ndGgpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRXh0ZXJuYWxVaW50OEFycmF5IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48VWludDhMaXN0PgogICAgaW1wbGVtZW50cyBVaW50OExpc3QgewogIGZhY3RvcnkgX0V4dGVybmFsVWludDhBcnJheS5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgTGlzdCBpbnRlcmZhY2UuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0VWludDgoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRVaW50OChpbmRleCwgX3RvVWludDgodmFsdWUpKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIFVpbnQ4TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgVWludDhMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgVWludDhMaXN0KGxlbmd0aCk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbFVpbnQ4Q2xhbXBlZEFycmF5IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48VWludDhDbGFtcGVkTGlzdD4KICAgIGltcGxlbWVudHMgVWludDhDbGFtcGVkTGlzdCB7CiAgZmFjdG9yeSBfRXh0ZXJuYWxVaW50OENsYW1wZWRBcnJheS5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgTGlzdCBpbnRlcmZhY2UuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0VWludDgoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRVaW50OChpbmRleCwgX3RvQ2xhbXBlZFVpbnQ4KHZhbHVlKSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBVaW50OExpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIFVpbnQ4Q2xhbXBlZExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBVaW50OENsYW1wZWRMaXN0KGxlbmd0aCk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbEludDE2QXJyYXkgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxJbnQxNkxpc3Q+CiAgICBpbXBsZW1lbnRzIEludDE2TGlzdCB7CiAgZmFjdG9yeSBfRXh0ZXJuYWxJbnQxNkFycmF5Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBMaXN0IGludGVyZmFjZS4KICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRJbnQxNihpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRJbnQxNihpbmRleCwgX3RvSW50MTYodmFsdWUpKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgSW50MTZMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgSW50MTZMaXN0KGxlbmd0aCk7CiAgfQoKICBpbnQgX2dldEluZGV4ZWRJbnQxNihpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZ2V0SW50MTYoaW5kZXggKiBJbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRJbnQxNihpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgX3NldEludDE2KGluZGV4ICogSW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRXh0ZXJuYWxVaW50MTZBcnJheSBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPFVpbnQxNkxpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQxNkxpc3QgewogIGZhY3RvcnkgX0V4dGVybmFsVWludDE2QXJyYXkuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZFVpbnQxNihpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRVaW50MTYoaW5kZXgsIF90b1VpbnQxNih2YWx1ZSkpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gVWludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgVWludDE2TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IFVpbnQxNkxpc3QobGVuZ3RoKTsKICB9CgogIGludCBfZ2V0SW5kZXhlZFVpbnQxNihpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZ2V0VWludDE2KGluZGV4ICogVWludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZFVpbnQxNihpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgX3NldFVpbnQxNihpbmRleCAqIFVpbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbEludDMyQXJyYXkgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxJbnQzMkxpc3Q+CiAgICBpbXBsZW1lbnRzIEludDMyTGlzdCB7CiAgZmFjdG9yeSBfRXh0ZXJuYWxJbnQzMkFycmF5Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBMaXN0IGludGVyZmFjZS4KICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRJbnQzMihpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRJbnQzMihpbmRleCwgX3RvSW50MzIodmFsdWUpKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEludDMyTGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgSW50MzJMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgSW50MzJMaXN0KGxlbmd0aCk7CiAgfQoKICBpbnQgX2dldEluZGV4ZWRJbnQzMihpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZ2V0SW50MzIoaW5kZXggKiBJbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRJbnQzMihpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgX3NldEludDMyKGluZGV4ICogSW50MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRXh0ZXJuYWxVaW50MzJBcnJheSBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPFVpbnQzMkxpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQzMkxpc3QgewogIGZhY3RvcnkgX0V4dGVybmFsVWludDMyQXJyYXkuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZFVpbnQzMihpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRVaW50MzIoaW5kZXgsIF90b1VpbnQzMih2YWx1ZSkpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gVWludDMyTGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgVWludDMyTGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IFVpbnQzMkxpc3QobGVuZ3RoKTsKICB9CgogIGludCBfZ2V0SW5kZXhlZFVpbnQzMihpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZ2V0VWludDMyKGluZGV4ICogVWludDMyTGlzdC5ieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZFVpbnQzMihpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgX3NldFVpbnQzMihpbmRleCAqIFVpbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbEludDY0QXJyYXkgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxJbnQ2NExpc3Q+CiAgICBpbXBsZW1lbnRzIEludDY0TGlzdCB7CiAgZmFjdG9yeSBfRXh0ZXJuYWxJbnQ2NEFycmF5Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBMaXN0IGludGVyZmFjZS4KICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRJbnQ2NChpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRJbnQ2NChpbmRleCwgdmFsdWUpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gSW50NjRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBJbnQ2NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBJbnQ2NExpc3QobGVuZ3RoKTsKICB9CgogIGludCBfZ2V0SW5kZXhlZEludDY0KGludCBpbmRleCkgewogICAgcmV0dXJuIF9nZXRJbnQ2NChpbmRleCAqIEludDY0TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZEludDY0KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBfc2V0SW50NjQoaW5kZXggKiBJbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbFVpbnQ2NEFycmF5IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48VWludDY0TGlzdD4KICAgIGltcGxlbWVudHMgVWludDY0TGlzdCB7CiAgZmFjdG9yeSBfRXh0ZXJuYWxVaW50NjRBcnJheS5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgTGlzdCBpbnRlcmZhY2UuCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF9nZXRJbmRleGVkVWludDY0KGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0SW5kZXhlZFVpbnQ2NChpbmRleCwgdmFsdWUpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gVWludDY0TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgVWludDY0TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IFVpbnQ2NExpc3QobGVuZ3RoKTsKICB9CgogIGludCBfZ2V0SW5kZXhlZFVpbnQ2NChpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZ2V0VWludDY0KGluZGV4ICogVWludDY0TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZFVpbnQ2NChpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgX3NldFVpbnQ2NChpbmRleCAqIFVpbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbEZsb2F0MzJBcnJheSBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0RvdWJsZUxpc3RNaXhpbiwgX1R5cGVkRG91YmxlTGlzdE1peGluPEZsb2F0MzJMaXN0PgogICAgaW1wbGVtZW50cyBGbG9hdDMyTGlzdCB7CiAgZmFjdG9yeSBfRXh0ZXJuYWxGbG9hdDMyQXJyYXkuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIGRvdWJsZSBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZEZsb2F0MzIoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBkb3VibGUgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRJbmRleGVkRmxvYXQzMihpbmRleCwgdmFsdWUpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gRmxvYXQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEZsb2F0MzJMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgRmxvYXQzMkxpc3QobGVuZ3RoKTsKICB9CgogIGRvdWJsZSBfZ2V0SW5kZXhlZEZsb2F0MzIoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldEZsb2F0MzIoaW5kZXggKiBGbG9hdDMyTGlzdC5ieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZEZsb2F0MzIoaW50IGluZGV4LCBkb3VibGUgdmFsdWUpIHsKICAgIF9zZXRGbG9hdDMyKGluZGV4ICogRmxvYXQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbEZsb2F0NjRBcnJheSBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0RvdWJsZUxpc3RNaXhpbiwgX1R5cGVkRG91YmxlTGlzdE1peGluPEZsb2F0NjRMaXN0PgogICAgaW1wbGVtZW50cyBGbG9hdDY0TGlzdCB7CiAgZmFjdG9yeSBfRXh0ZXJuYWxGbG9hdDY0QXJyYXkuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIGRvdWJsZSBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZEZsb2F0NjQoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBkb3VibGUgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRJbmRleGVkRmxvYXQ2NChpbmRleCwgdmFsdWUpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gRmxvYXQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEZsb2F0NjRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgRmxvYXQ2NExpc3QobGVuZ3RoKTsKICB9CgogIGRvdWJsZSBfZ2V0SW5kZXhlZEZsb2F0NjQoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldEZsb2F0NjQoaW5kZXggKiBGbG9hdDY0TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZEZsb2F0NjQoaW50IGluZGV4LCBkb3VibGUgdmFsdWUpIHsKICAgIF9zZXRGbG9hdDY0KGluZGV4ICogRmxvYXQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbEZsb2F0MzJ4NEFycmF5IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfRmxvYXQzMng0TGlzdE1peGluCiAgICBpbXBsZW1lbnRzIEZsb2F0MzJ4NExpc3QgewogIGZhY3RvcnkgX0V4dGVybmFsRmxvYXQzMng0QXJyYXkuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIEZsb2F0MzJ4NCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZEZsb2F0MzJ4NChpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIEZsb2F0MzJ4NCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRGbG9hdDMyeDQoaW5kZXgsIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEZsb2F0MzJ4NExpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEZsb2F0MzJ4NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBGbG9hdDMyeDRMaXN0KGxlbmd0aCk7CiAgfQoKICBGbG9hdDMyeDQgX2dldEluZGV4ZWRGbG9hdDMyeDQoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldEZsb2F0MzJ4NChpbmRleCAqIEZsb2F0MzJ4NExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRGbG9hdDMyeDQoaW50IGluZGV4LCBGbG9hdDMyeDQgdmFsdWUpIHsKICAgIF9zZXRGbG9hdDMyeDQoaW5kZXggKiBGbG9hdDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRXh0ZXJuYWxJbnQzMng0QXJyYXkgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9JbnQzMng0TGlzdE1peGluCiAgICBpbXBsZW1lbnRzIEludDMyeDRMaXN0IHsKICBmYWN0b3J5IF9FeHRlcm5hbEludDMyeDRBcnJheS5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgTGlzdCBpbnRlcmZhY2UuCiAgSW50MzJ4NCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZEludDMyeDQoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBJbnQzMng0IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0SW5kZXhlZEludDMyeDQoaW5kZXgsIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEludDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBJbnQzMng0TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEludDMyeDRMaXN0KGxlbmd0aCk7CiAgfQoKICBJbnQzMng0IF9nZXRJbmRleGVkSW50MzJ4NChpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZ2V0SW50MzJ4NChpbmRleCAqIEludDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgfQoKICB2b2lkIF9zZXRJbmRleGVkSW50MzJ4NChpbnQgaW5kZXgsIEludDMyeDQgdmFsdWUpIHsKICAgIF9zZXRJbnQzMng0KGluZGV4ICogSW50MzJ4NExpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbEZsb2F0NjR4MkFycmF5IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfRmxvYXQ2NHgyTGlzdE1peGluCiAgICBpbXBsZW1lbnRzIEZsb2F0NjR4Mkxpc3QgewogIGZhY3RvcnkgX0V4dGVybmFsRmxvYXQ2NHgyQXJyYXkuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIEZsb2F0NjR4MiBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZEZsb2F0NjR4MihpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIEZsb2F0NjR4MiB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRGbG9hdDY0eDIoaW5kZXgsIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEZsb2F0NjR4Mkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEZsb2F0NjR4Mkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBGbG9hdDY0eDJMaXN0KGxlbmd0aCk7CiAgfQoKICBGbG9hdDY0eDIgX2dldEluZGV4ZWRGbG9hdDY0eDIoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldEZsb2F0NjR4MihpbmRleCAqIEZsb2F0NjR4Mkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRGbG9hdDY0eDIoaW50IGluZGV4LCBGbG9hdDY0eDIgdmFsdWUpIHsKICAgIF9zZXRGbG9hdDY0eDIoaW5kZXggKiBGbG9hdDY0eDJMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHBhdGNoCmNsYXNzIEZsb2F0MzJ4NCB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgZmFjdG9yeSBGbG9hdDMyeDQoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeiwgZG91YmxlIHcpIHsKICAgIF90aHJvd0lmTnVsbCh4LCAneCcpOwogICAgX3Rocm93SWZOdWxsKHksICd5Jyk7CiAgICBfdGhyb3dJZk51bGwoeiwgJ3onKTsKICAgIF90aHJvd0lmTnVsbCh3LCAndycpOwogICAgcmV0dXJuIF9GbG9hdDMyeDRGcm9tRG91Ymxlcyh4LCB5LCB6LCB3KTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBzdGF0aWMgX0Zsb2F0MzJ4NCBfRmxvYXQzMng0RnJvbURvdWJsZXMoCiAgICAgIGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHosIGRvdWJsZSB3KSBuYXRpdmUgIkZsb2F0MzJ4NF9mcm9tRG91YmxlcyI7CgogIEBwYXRjaAogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGZhY3RvcnkgRmxvYXQzMng0LnNwbGF0KGRvdWJsZSB2KSB7CiAgICBfdGhyb3dJZk51bGwodiwgJ3YnKTsKICAgIHJldHVybiBfRmxvYXQzMng0U3BsYXQodik7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgc3RhdGljIF9GbG9hdDMyeDQgX0Zsb2F0MzJ4NFNwbGF0KGRvdWJsZSB2KSBuYXRpdmUgIkZsb2F0MzJ4NF9zcGxhdCI7CgogIEBwYXRjaAogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBmYWN0b3J5IEZsb2F0MzJ4NC56ZXJvKCkgbmF0aXZlICJGbG9hdDMyeDRfemVybyI7CgogIEBwYXRjaAogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBmYWN0b3J5IEZsb2F0MzJ4NC5mcm9tSW50MzJ4NEJpdHMoSW50MzJ4NCB4KQogICAgICBuYXRpdmUgIkZsb2F0MzJ4NF9mcm9tSW50MzJ4NEJpdHMiOwoKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgZmFjdG9yeSBGbG9hdDMyeDQuZnJvbUZsb2F0NjR4MihGbG9hdDY0eDIgdikgbmF0aXZlICJGbG9hdDMyeDRfZnJvbUZsb2F0NjR4MiI7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0Zsb2F0MzJ4NCBpbXBsZW1lbnRzIEZsb2F0MzJ4NCB7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0KQogIEZsb2F0MzJ4NCBvcGVyYXRvciArKEZsb2F0MzJ4NCBvdGhlcikgbmF0aXZlICJGbG9hdDMyeDRfYWRkIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IG9wZXJhdG9yIC0oKSBuYXRpdmUgIkZsb2F0MzJ4NF9uZWdhdGUiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBGbG9hdDMyeDQgb3BlcmF0b3IgLShGbG9hdDMyeDQgb3RoZXIpIG5hdGl2ZSAiRmxvYXQzMng0X3N1YiI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0KQogIEZsb2F0MzJ4NCBvcGVyYXRvciAqKEZsb2F0MzJ4NCBvdGhlcikgbmF0aXZlICJGbG9hdDMyeDRfbXVsIjsKICBGbG9hdDMyeDQgb3BlcmF0b3IgLyhGbG9hdDMyeDQgb3RoZXIpIG5hdGl2ZSAiRmxvYXQzMng0X2RpdiI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MzJ4NCkKICBJbnQzMng0IGxlc3NUaGFuKEZsb2F0MzJ4NCBvdGhlcikgbmF0aXZlICJGbG9hdDMyeDRfY21wbHQiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDMyeDQpCiAgSW50MzJ4NCBsZXNzVGhhbk9yRXF1YWwoRmxvYXQzMng0IG90aGVyKSBuYXRpdmUgIkZsb2F0MzJ4NF9jbXBsdGUiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDMyeDQpCiAgSW50MzJ4NCBncmVhdGVyVGhhbihGbG9hdDMyeDQgb3RoZXIpIG5hdGl2ZSAiRmxvYXQzMng0X2NtcGd0IjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMng0KQogIEludDMyeDQgZ3JlYXRlclRoYW5PckVxdWFsKEZsb2F0MzJ4NCBvdGhlcikgbmF0aXZlICJGbG9hdDMyeDRfY21wZ3RlIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMng0KQogIEludDMyeDQgZXF1YWwoRmxvYXQzMng0IG90aGVyKSBuYXRpdmUgIkZsb2F0MzJ4NF9jbXBlcXVhbCI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MzJ4NCkKICBJbnQzMng0IG5vdEVxdWFsKEZsb2F0MzJ4NCBvdGhlcikgbmF0aXZlICJGbG9hdDMyeDRfY21wbmVxdWFsIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IHNjYWxlKGRvdWJsZSBzKSBuYXRpdmUgIkZsb2F0MzJ4NF9zY2FsZSI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0KQogIEZsb2F0MzJ4NCBhYnMoKSBuYXRpdmUgIkZsb2F0MzJ4NF9hYnMiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBGbG9hdDMyeDQgY2xhbXAoRmxvYXQzMng0IGxvd2VyTGltaXQsIEZsb2F0MzJ4NCB1cHBlckxpbWl0KQogICAgICBuYXRpdmUgIkZsb2F0MzJ4NF9jbGFtcCI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQogIGRvdWJsZSBnZXQgeCBuYXRpdmUgIkZsb2F0MzJ4NF9nZXRYIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCiAgZG91YmxlIGdldCB5IG5hdGl2ZSAiRmxvYXQzMng0X2dldFkiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfRG91YmxlIikKICBkb3VibGUgZ2V0IHogbmF0aXZlICJGbG9hdDMyeDRfZ2V0WiI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQogIGRvdWJsZSBnZXQgdyBuYXRpdmUgIkZsb2F0MzJ4NF9nZXRXIjsKICBpbnQgZ2V0IHNpZ25NYXNrIG5hdGl2ZSAiRmxvYXQzMng0X2dldFNpZ25NYXNrIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0KQogIEZsb2F0MzJ4NCBzaHVmZmxlKGludCBtYXNrKSBuYXRpdmUgIkZsb2F0MzJ4NF9zaHVmZmxlIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IHNodWZmbGVNaXgoRmxvYXQzMng0IHp3LCBpbnQgbWFzaykgbmF0aXZlICJGbG9hdDMyeDRfc2h1ZmZsZU1peCI7CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIEZsb2F0MzJ4NCB3aXRoWChkb3VibGUgeCkgewogICAgX3Rocm93SWZOdWxsKHgsICd4Jyk7CiAgICByZXR1cm4gX3dpdGhYKHgpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0KQogIEZsb2F0MzJ4NCBfd2l0aFgoZG91YmxlIHgpIG5hdGl2ZSAiRmxvYXQzMng0X3NldFgiOwoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBGbG9hdDMyeDQgd2l0aFkoZG91YmxlIHkpIHsKICAgIF90aHJvd0lmTnVsbCh5LCAneScpOwogICAgcmV0dXJuIF93aXRoWSh5KTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBGbG9hdDMyeDQgX3dpdGhZKGRvdWJsZSB5KSBuYXRpdmUgIkZsb2F0MzJ4NF9zZXRZIjsKCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgRmxvYXQzMng0IHdpdGhaKGRvdWJsZSB6KSB7CiAgICBfdGhyb3dJZk51bGwoeiwgJ3onKTsKICAgIHJldHVybiBfd2l0aFooeik7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IF93aXRoWihkb3VibGUgeikgbmF0aXZlICJGbG9hdDMyeDRfc2V0WiI7CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIEZsb2F0MzJ4NCB3aXRoVyhkb3VibGUgdykgewogICAgX3Rocm93SWZOdWxsKHcsICd3Jyk7CiAgICByZXR1cm4gX3dpdGhXKHcpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0KQogIEZsb2F0MzJ4NCBfd2l0aFcoZG91YmxlIHcpIG5hdGl2ZSAiRmxvYXQzMng0X3NldFciOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IG1pbihGbG9hdDMyeDQgb3RoZXIpIG5hdGl2ZSAiRmxvYXQzMng0X21pbiI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0KQogIEZsb2F0MzJ4NCBtYXgoRmxvYXQzMng0IG90aGVyKSBuYXRpdmUgIkZsb2F0MzJ4NF9tYXgiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBGbG9hdDMyeDQgc3FydCgpIG5hdGl2ZSAiRmxvYXQzMng0X3NxcnQiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBGbG9hdDMyeDQgcmVjaXByb2NhbCgpIG5hdGl2ZSAiRmxvYXQzMng0X3JlY2lwcm9jYWwiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBGbG9hdDMyeDQgcmVjaXByb2NhbFNxcnQoKSBuYXRpdmUgIkZsb2F0MzJ4NF9yZWNpcHJvY2FsU3FydCI7Cn0KCkBwYXRjaApjbGFzcyBJbnQzMng0IHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBmYWN0b3J5IEludDMyeDQoaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcpIHsKICAgIF90aHJvd0lmTnVsbCh4LCAneCcpOwogICAgX3Rocm93SWZOdWxsKHksICd5Jyk7CiAgICBfdGhyb3dJZk51bGwoeiwgJ3onKTsKICAgIF90aHJvd0lmTnVsbCh3LCAndycpOwogICAgcmV0dXJuIF9JbnQzMng0RnJvbUludHMoeCwgeSwgeiwgdyk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMng0KQogIHN0YXRpYyBfSW50MzJ4NCBfSW50MzJ4NEZyb21JbnRzKGludCB4LCBpbnQgeSwgaW50IHosIGludCB3KQogICAgICBuYXRpdmUgIkludDMyeDRfZnJvbUludHMiOwoKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBmYWN0b3J5IEludDMyeDQuYm9vbChib29sIHgsIGJvb2wgeSwgYm9vbCB6LCBib29sIHcpIHsKICAgIF90aHJvd0lmTnVsbCh4LCAneCcpOwogICAgX3Rocm93SWZOdWxsKHksICd5Jyk7CiAgICBfdGhyb3dJZk51bGwoeiwgJ3onKTsKICAgIF90aHJvd0lmTnVsbCh3LCAndycpOwogICAgcmV0dXJuIF9JbnQzMng0RnJvbUJvb2xzKHgsIHksIHosIHcpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MzJ4NCkKICBzdGF0aWMgX0ludDMyeDQgX0ludDMyeDRGcm9tQm9vbHMoYm9vbCB4LCBib29sIHksIGJvb2wgeiwgYm9vbCB3KQogICAgICBuYXRpdmUgIkludDMyeDRfZnJvbUJvb2xzIjsKCiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MzJ4NCkKICBmYWN0b3J5IEludDMyeDQuZnJvbUZsb2F0MzJ4NEJpdHMoRmxvYXQzMng0IHgpCiAgICAgIG5hdGl2ZSAiSW50MzJ4NF9mcm9tRmxvYXQzMng0Qml0cyI7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0ludDMyeDQgaW1wbGVtZW50cyBJbnQzMng0IHsKICBJbnQzMng0IG9wZXJhdG9yIHwoSW50MzJ4NCBvdGhlcikgbmF0aXZlICJJbnQzMng0X29yIjsKICBJbnQzMng0IG9wZXJhdG9yICYoSW50MzJ4NCBvdGhlcikgbmF0aXZlICJJbnQzMng0X2FuZCI7CiAgSW50MzJ4NCBvcGVyYXRvciBeKEludDMyeDQgb3RoZXIpIG5hdGl2ZSAiSW50MzJ4NF94b3IiOwogIEludDMyeDQgb3BlcmF0b3IgKyhJbnQzMng0IG90aGVyKSBuYXRpdmUgIkludDMyeDRfYWRkIjsKICBJbnQzMng0IG9wZXJhdG9yIC0oSW50MzJ4NCBvdGhlcikgbmF0aXZlICJJbnQzMng0X3N1YiI7CiAgaW50IGdldCB4IG5hdGl2ZSAiSW50MzJ4NF9nZXRYIjsKICBpbnQgZ2V0IHkgbmF0aXZlICJJbnQzMng0X2dldFkiOwogIGludCBnZXQgeiBuYXRpdmUgIkludDMyeDRfZ2V0WiI7CiAgaW50IGdldCB3IG5hdGl2ZSAiSW50MzJ4NF9nZXRXIjsKICBpbnQgZ2V0IHNpZ25NYXNrIG5hdGl2ZSAiSW50MzJ4NF9nZXRTaWduTWFzayI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MzJ4NCkKICBJbnQzMng0IHNodWZmbGUoaW50IG1hc2spIG5hdGl2ZSAiSW50MzJ4NF9zaHVmZmxlIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMng0KQogIEludDMyeDQgc2h1ZmZsZU1peChJbnQzMng0IHp3LCBpbnQgbWFzaykgbmF0aXZlICJJbnQzMng0X3NodWZmbGVNaXgiOwoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBJbnQzMng0IHdpdGhYKGludCB4KSB7CiAgICBfdGhyb3dJZk51bGwoeCwgJ3gnKTsKICAgIHJldHVybiBfd2l0aFgoeCk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMng0KQogIEludDMyeDQgX3dpdGhYKGludCB4KSBuYXRpdmUgIkludDMyeDRfc2V0WCI7CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIEludDMyeDQgd2l0aFkoaW50IHkpIHsKICAgIF90aHJvd0lmTnVsbCh5LCAneScpOwogICAgcmV0dXJuIF93aXRoWSh5KTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDMyeDQpCiAgSW50MzJ4NCBfd2l0aFkoaW50IHkpIG5hdGl2ZSAiSW50MzJ4NF9zZXRZIjsKCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgSW50MzJ4NCB3aXRoWihpbnQgeikgewogICAgX3Rocm93SWZOdWxsKHosICd6Jyk7CiAgICByZXR1cm4gX3dpdGhaKHopOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MzJ4NCkKICBJbnQzMng0IF93aXRoWihpbnQgeikgbmF0aXZlICJJbnQzMng0X3NldFoiOwoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBJbnQzMng0IHdpdGhXKGludCB3KSB7CiAgICBfdGhyb3dJZk51bGwodywgJ3cnKTsKICAgIHJldHVybiBfd2l0aFcodyk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMng0KQogIEludDMyeDQgX3dpdGhXKGludCB3KSBuYXRpdmUgIkludDMyeDRfc2V0VyI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBib29sIGdldCBmbGFnWCBuYXRpdmUgIkludDMyeDRfZ2V0RmxhZ1giOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBib29sIGdldCBmbGFnWSBuYXRpdmUgIkludDMyeDRfZ2V0RmxhZ1kiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBib29sIGdldCBmbGFnWiBuYXRpdmUgIkludDMyeDRfZ2V0RmxhZ1oiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBib29sIGdldCBmbGFnVyBuYXRpdmUgIkludDMyeDRfZ2V0RmxhZ1ciOwoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIiwgX0ludDMyeDQpCiAgSW50MzJ4NCB3aXRoRmxhZ1goYm9vbCB4KSB7CiAgICBfdGhyb3dJZk51bGwoeCwgJ3gnKTsKICAgIHJldHVybiBfd2l0aEZsYWdYKHgpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MzJ4NCkKICBJbnQzMng0IF93aXRoRmxhZ1goYm9vbCB4KSBuYXRpdmUgIkludDMyeDRfc2V0RmxhZ1giOwoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIiwgX0ludDMyeDQpCiAgSW50MzJ4NCB3aXRoRmxhZ1koYm9vbCB5KSB7CiAgICBfdGhyb3dJZk51bGwoeSwgJ3knKTsKICAgIHJldHVybiBfd2l0aEZsYWdZKHkpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MzJ4NCkKICBJbnQzMng0IF93aXRoRmxhZ1koYm9vbCB5KSBuYXRpdmUgIkludDMyeDRfc2V0RmxhZ1kiOwoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIiwgX0ludDMyeDQpCiAgSW50MzJ4NCB3aXRoRmxhZ1ooYm9vbCB6KSB7CiAgICBfdGhyb3dJZk51bGwoeiwgJ3onKTsKICAgIHJldHVybiBfd2l0aEZsYWdaKHopOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MzJ4NCkKICBJbnQzMng0IF93aXRoRmxhZ1ooYm9vbCB6KSBuYXRpdmUgIkludDMyeDRfc2V0RmxhZ1oiOwoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIiwgX0ludDMyeDQpCiAgSW50MzJ4NCB3aXRoRmxhZ1coYm9vbCB3KSB7CiAgICBfdGhyb3dJZk51bGwodywgJ3cnKTsKICAgIHJldHVybiBfd2l0aEZsYWdXKHcpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MzJ4NCkKICBJbnQzMng0IF93aXRoRmxhZ1coYm9vbCB3KSBuYXRpdmUgIkludDMyeDRfc2V0RmxhZ1ciOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IHNlbGVjdChGbG9hdDMyeDQgdHJ1ZVZhbHVlLCBGbG9hdDMyeDQgZmFsc2VWYWx1ZSkKICAgICAgbmF0aXZlICJJbnQzMng0X3NlbGVjdCI7Cn0KCkBwYXRjaApjbGFzcyBGbG9hdDY0eDIgewogIEBwYXRjaAogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGZhY3RvcnkgRmxvYXQ2NHgyKGRvdWJsZSB4LCBkb3VibGUgeSkgewogICAgX3Rocm93SWZOdWxsKHgsICd4Jyk7CiAgICBfdGhyb3dJZk51bGwoeSwgJ3knKTsKICAgIHJldHVybiBfRmxvYXQ2NHgyRnJvbURvdWJsZXMoeCwgeSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDY0eDIpCiAgc3RhdGljIF9GbG9hdDY0eDIgX0Zsb2F0NjR4MkZyb21Eb3VibGVzKGRvdWJsZSB4LCBkb3VibGUgeSkKICAgICAgbmF0aXZlICJGbG9hdDY0eDJfZnJvbURvdWJsZXMiOwoKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBmYWN0b3J5IEZsb2F0NjR4Mi5zcGxhdChkb3VibGUgdikgewogICAgX3Rocm93SWZOdWxsKHYsICd2Jyk7CiAgICByZXR1cm4gX0Zsb2F0NjR4MlNwbGF0KHYpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQ2NHgyKQogIHN0YXRpYyBfRmxvYXQ2NHgyIF9GbG9hdDY0eDJTcGxhdChkb3VibGUgdikgbmF0aXZlICJGbG9hdDY0eDJfc3BsYXQiOwoKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDY0eDIpCiAgZmFjdG9yeSBGbG9hdDY0eDIuemVybygpIG5hdGl2ZSAiRmxvYXQ2NHgyX3plcm8iOwoKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDY0eDIpCiAgZmFjdG9yeSBGbG9hdDY0eDIuZnJvbUZsb2F0MzJ4NChGbG9hdDMyeDQgdikgbmF0aXZlICJGbG9hdDY0eDJfZnJvbUZsb2F0MzJ4NCI7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0Zsb2F0NjR4MiBpbXBsZW1lbnRzIEZsb2F0NjR4MiB7CiAgRmxvYXQ2NHgyIG9wZXJhdG9yICsoRmxvYXQ2NHgyIG90aGVyKSBuYXRpdmUgIkZsb2F0NjR4Ml9hZGQiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0NjR4MikKICBGbG9hdDY0eDIgb3BlcmF0b3IgLSgpIG5hdGl2ZSAiRmxvYXQ2NHgyX25lZ2F0ZSI7CiAgRmxvYXQ2NHgyIG9wZXJhdG9yIC0oRmxvYXQ2NHgyIG90aGVyKSBuYXRpdmUgIkZsb2F0NjR4Ml9zdWIiOwogIEZsb2F0NjR4MiBvcGVyYXRvciAqKEZsb2F0NjR4MiBvdGhlcikgbmF0aXZlICJGbG9hdDY0eDJfbXVsIjsKICBGbG9hdDY0eDIgb3BlcmF0b3IgLyhGbG9hdDY0eDIgb3RoZXIpIG5hdGl2ZSAiRmxvYXQ2NHgyX2RpdiI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQ2NHgyKQogIEZsb2F0NjR4MiBzY2FsZShkb3VibGUgcykgbmF0aXZlICJGbG9hdDY0eDJfc2NhbGUiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0NjR4MikKICBGbG9hdDY0eDIgYWJzKCkgbmF0aXZlICJGbG9hdDY0eDJfYWJzIjsKICBGbG9hdDY0eDIgY2xhbXAoRmxvYXQ2NHgyIGxvd2VyTGltaXQsIEZsb2F0NjR4MiB1cHBlckxpbWl0KQogICAgICBuYXRpdmUgIkZsb2F0NjR4Ml9jbGFtcCI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQogIGRvdWJsZSBnZXQgeCBuYXRpdmUgIkZsb2F0NjR4Ml9nZXRYIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCiAgZG91YmxlIGdldCB5IG5hdGl2ZSAiRmxvYXQ2NHgyX2dldFkiOwogIGludCBnZXQgc2lnbk1hc2sgbmF0aXZlICJGbG9hdDY0eDJfZ2V0U2lnbk1hc2siOwoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBGbG9hdDY0eDIgd2l0aFgoZG91YmxlIHgpIHsKICAgIF90aHJvd0lmTnVsbCh4LCAneCcpOwogICAgcmV0dXJuIF93aXRoWCh4KTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0NjR4MikKICBGbG9hdDY0eDIgX3dpdGhYKGRvdWJsZSB4KSBuYXRpdmUgIkZsb2F0NjR4Ml9zZXRYIjsKCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgRmxvYXQ2NHgyIHdpdGhZKGRvdWJsZSB5KSB7CiAgICBfdGhyb3dJZk51bGwoeSwgJ3knKTsKICAgIHJldHVybiBfd2l0aFkoeSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDY0eDIpCiAgRmxvYXQ2NHgyIF93aXRoWShkb3VibGUgeSkgbmF0aXZlICJGbG9hdDY0eDJfc2V0WSI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0NjR4MikKICBGbG9hdDY0eDIgbWluKEZsb2F0NjR4MiBvdGhlcikgbmF0aXZlICJGbG9hdDY0eDJfbWluIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDY0eDIpCiAgRmxvYXQ2NHgyIG1heChGbG9hdDY0eDIgb3RoZXIpIG5hdGl2ZSAiRmxvYXQ2NHgyX21heCI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQ2NHgyKQogIEZsb2F0NjR4MiBzcXJ0KCkgbmF0aXZlICJGbG9hdDY0eDJfc3FydCI7Cn0KCmNsYXNzIF9UeXBlZExpc3RJdGVyYXRvcjxFPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPEU+IHsKICBmaW5hbCBMaXN0PEU+IF9hcnJheTsKICBmaW5hbCBpbnQgX2xlbmd0aDsKICBpbnQgX3Bvc2l0aW9uOwogIEUgX2N1cnJlbnQ7CgogIF9UeXBlZExpc3RJdGVyYXRvcihMaXN0IGFycmF5KQogICAgICA6IF9hcnJheSA9IGFycmF5LAogICAgICAgIF9sZW5ndGggPSBhcnJheS5sZW5ndGgsCiAgICAgICAgX3Bvc2l0aW9uID0gLTEgewogICAgYXNzZXJ0KGFycmF5IGlzIF9UeXBlZExpc3QgfHwgYXJyYXkgaXMgX1R5cGVkTGlzdFZpZXcpOwogIH0KCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGludCBuZXh0UG9zaXRpb24gPSBfcG9zaXRpb24gKyAxOwogICAgaWYgKG5leHRQb3NpdGlvbiA8IF9sZW5ndGgpIHsKICAgICAgX2N1cnJlbnQgPSBfYXJyYXlbbmV4dFBvc2l0aW9uXTsKICAgICAgX3Bvc2l0aW9uID0gbmV4dFBvc2l0aW9uOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIF9wb3NpdGlvbiA9IF9sZW5ndGg7CiAgICBfY3VycmVudCA9IG51bGw7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBFIGdldCBjdXJyZW50ID0+IF9jdXJyZW50Owp9CgphYnN0cmFjdCBjbGFzcyBfVHlwZWRMaXN0VmlldyBleHRlbmRzIF9UeXBlZExpc3RCYXNlIGltcGxlbWVudHMgVHlwZWREYXRhIHsKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBUeXBlZERhdGEgaW50ZXJmYWNlLgoKICBpbnQgZ2V0IGxlbmd0aEluQnl0ZXMgewogICAgcmV0dXJuIGxlbmd0aCAqIGVsZW1lbnRTaXplSW5CeXRlczsKICB9CgogIF9CeXRlQnVmZmVyIGdldCBidWZmZXIgewogICAgcmV0dXJuIF90eXBlZERhdGEuYnVmZmVyOwogIH0KCiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBfVHlwZWRMaXN0IGdldCBfdHlwZWREYXRhIG5hdGl2ZSAiVHlwZWREYXRhVmlld190eXBlZERhdGEiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IGdldCBvZmZzZXRJbkJ5dGVzIG5hdGl2ZSAiVHlwZWREYXRhVmlld19vZmZzZXRJbkJ5dGVzIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXQgbGVuZ3RoIG5hdGl2ZSAiVHlwZWREYXRhVmlld19sZW5ndGgiOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9JbnQ4QXJyYXlWaWV3IGV4dGVuZHMgX1R5cGVkTGlzdFZpZXcKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPEludDhMaXN0PgogICAgaW1wbGVtZW50cyBJbnQ4TGlzdCB7CiAgLy8gQ29uc3RydWN0b3IuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50OEFycmF5VmlldykKICBmYWN0b3J5IF9JbnQ4QXJyYXlWaWV3Ll8oX1R5cGVkTGlzdCBidWZmZXIsIGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgbGVuZ3RoKQogICAgICBuYXRpdmUgIlR5cGVkRGF0YVZpZXdfSW50OEFycmF5Vmlld19uZXciOwoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIExpc3QgaW50ZXJmYWNlLgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfdHlwZWREYXRhCiAgICAgICAgLl9nZXRJbnQ4KG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBJbnQ4TGlzdC5ieXRlc1BlckVsZW1lbnQpKTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfdHlwZWREYXRhLl9zZXRJbnQ4KAogICAgICAgIG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBJbnQ4TGlzdC5ieXRlc1BlckVsZW1lbnQpLCBfdG9JbnQ4KHZhbHVlKSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEludDhMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBJbnQ4TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEludDhMaXN0KGxlbmd0aCk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9VaW50OEFycmF5VmlldyBleHRlbmRzIF9UeXBlZExpc3RWaWV3CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxVaW50OExpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQ4TGlzdCB7CiAgLy8gQ29uc3RydWN0b3IuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfVWludDhBcnJheVZpZXcpCiAgZmFjdG9yeSBfVWludDhBcnJheVZpZXcuXyhfVHlwZWRMaXN0IGJ1ZmZlciwgaW50IG9mZnNldEluQnl0ZXMsIGludCBsZW5ndGgpCiAgICAgIG5hdGl2ZSAiVHlwZWREYXRhVmlld19VaW50OEFycmF5Vmlld19uZXciOwoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIExpc3QgaW50ZXJmYWNlLgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfdHlwZWREYXRhCiAgICAgICAgLl9nZXRVaW50OChvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogVWludDhMaXN0LmJ5dGVzUGVyRWxlbWVudCkpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF90eXBlZERhdGEuX3NldFVpbnQ4KAogICAgICAgIG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBVaW50OExpc3QuYnl0ZXNQZXJFbGVtZW50KSwgX3RvVWludDgodmFsdWUpKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gVWludDhMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBVaW50OExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBVaW50OExpc3QobGVuZ3RoKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1VpbnQ4Q2xhbXBlZEFycmF5VmlldyBleHRlbmRzIF9UeXBlZExpc3RWaWV3CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxVaW50OENsYW1wZWRMaXN0PgogICAgaW1wbGVtZW50cyBVaW50OENsYW1wZWRMaXN0IHsKICAvLyBDb25zdHJ1Y3Rvci4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9VaW50OENsYW1wZWRBcnJheVZpZXcpCiAgZmFjdG9yeSBfVWludDhDbGFtcGVkQXJyYXlWaWV3Ll8oX1R5cGVkTGlzdCBidWZmZXIsIGludCBvZmZzZXRJbkJ5dGVzLAogICAgICBpbnQgbGVuZ3RoKSBuYXRpdmUgIlR5cGVkRGF0YVZpZXdfVWludDhDbGFtcGVkQXJyYXlWaWV3X25ldyI7CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgTGlzdCBpbnRlcmZhY2UuCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF90eXBlZERhdGEKICAgICAgICAuX2dldFVpbnQ4KG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBVaW50OExpc3QuYnl0ZXNQZXJFbGVtZW50KSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3R5cGVkRGF0YS5fc2V0VWludDgob2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIFVpbnQ4TGlzdC5ieXRlc1BlckVsZW1lbnQpLAogICAgICAgIF90b0NsYW1wZWRVaW50OCh2YWx1ZSkpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBVaW50OExpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIFVpbnQ4Q2xhbXBlZExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBVaW50OENsYW1wZWRMaXN0KGxlbmd0aCk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9JbnQxNkFycmF5VmlldyBleHRlbmRzIF9UeXBlZExpc3RWaWV3CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxJbnQxNkxpc3Q+CiAgICBpbXBsZW1lbnRzIEludDE2TGlzdCB7CiAgLy8gQ29uc3RydWN0b3IuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MTZBcnJheVZpZXcpCiAgZmFjdG9yeSBfSW50MTZBcnJheVZpZXcuXyhfVHlwZWRMaXN0IGJ1ZmZlciwgaW50IG9mZnNldEluQnl0ZXMsIGludCBsZW5ndGgpCiAgICAgIG5hdGl2ZSAiVHlwZWREYXRhVmlld19JbnQxNkFycmF5Vmlld19uZXciOwoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIExpc3QgaW50ZXJmYWNlLgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfdHlwZWREYXRhCiAgICAgICAgLl9nZXRJbnQxNihvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogSW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudCkpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF90eXBlZERhdGEuX3NldEludDE2KAogICAgICAgIG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBJbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50KSwgX3RvSW50MTYodmFsdWUpKTsKICB9CgogIHZvaWQgc2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZSBpdGVyYWJsZSwgW2ludCBza2lwQ291bnQgPSAwXSkgewogICAgaWYgKGl0ZXJhYmxlIGlzIENvZGVVbml0cykgewogICAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgICAgaW50IGJ5dGVTdGFydCA9IHRoaXMub2Zmc2V0SW5CeXRlcyArIHN0YXJ0ICogSW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICAgICAgX3R5cGVkRGF0YS5fc2V0Q29kZVVuaXRzKGl0ZXJhYmxlLCBieXRlU3RhcnQsIGxlbmd0aCwgc2tpcENvdW50KTsKICAgIH0gZWxzZSB7CiAgICAgIHN1cGVyLnNldFJhbmdlKHN0YXJ0LCBlbmQsIGl0ZXJhYmxlLCBza2lwQ291bnQpOwogICAgfQogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBUeXBlZERhdGEgaW50ZXJmYWNlLgoKICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gSW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBJbnQxNkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBJbnQxNkxpc3QobGVuZ3RoKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1VpbnQxNkFycmF5VmlldyBleHRlbmRzIF9UeXBlZExpc3RWaWV3CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxVaW50MTZMaXN0PgogICAgaW1wbGVtZW50cyBVaW50MTZMaXN0IHsKICAvLyBDb25zdHJ1Y3Rvci4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9VaW50MTZBcnJheVZpZXcpCiAgZmFjdG9yeSBfVWludDE2QXJyYXlWaWV3Ll8oX1R5cGVkTGlzdCBidWZmZXIsIGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgbGVuZ3RoKQogICAgICBuYXRpdmUgIlR5cGVkRGF0YVZpZXdfVWludDE2QXJyYXlWaWV3X25ldyI7CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgTGlzdCBpbnRlcmZhY2UuCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF90eXBlZERhdGEKICAgICAgICAuX2dldFVpbnQxNihvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogVWludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQpKTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfdHlwZWREYXRhLl9zZXRVaW50MTYoCiAgICAgICAgb2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIFVpbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50KSwgX3RvVWludDE2KHZhbHVlKSk7CiAgfQoKICB2b2lkIHNldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGUgaXRlcmFibGUsIFtpbnQgc2tpcENvdW50ID0gMF0pIHsKICAgIGlmIChpdGVyYWJsZSBpcyBDb2RlVW5pdHMpIHsKICAgICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICAgIGludCBieXRlU3RhcnQgPSB0aGlzLm9mZnNldEluQnl0ZXMgKyBzdGFydCAqIFVpbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgICBfdHlwZWREYXRhLl9zZXRDb2RlVW5pdHMoaXRlcmFibGUsIGJ5dGVTdGFydCwgbGVuZ3RoLCBza2lwQ291bnQpOwogICAgfSBlbHNlIHsKICAgICAgc3VwZXIuc2V0UmFuZ2Uoc3RhcnQsIGVuZCwgaXRlcmFibGUsIHNraXBDb3VudCk7CiAgICB9CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIFR5cGVkRGF0YSBpbnRlcmZhY2UuCgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBVaW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KCiAgVWludDE2TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IFVpbnQxNkxpc3QobGVuZ3RoKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0ludDMyQXJyYXlWaWV3IGV4dGVuZHMgX1R5cGVkTGlzdFZpZXcKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPEludDMyTGlzdD4KICAgIGltcGxlbWVudHMgSW50MzJMaXN0IHsKICAvLyBDb25zdHJ1Y3Rvci4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMkFycmF5VmlldykKICBmYWN0b3J5IF9JbnQzMkFycmF5Vmlldy5fKF9UeXBlZExpc3QgYnVmZmVyLCBpbnQgb2Zmc2V0SW5CeXRlcywgaW50IGxlbmd0aCkKICAgICAgbmF0aXZlICJUeXBlZERhdGFWaWV3X0ludDMyQXJyYXlWaWV3X25ldyI7CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgTGlzdCBpbnRlcmZhY2UuCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF90eXBlZERhdGEKICAgICAgICAuX2dldEludDMyKG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBJbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50KSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3R5cGVkRGF0YS5fc2V0SW50MzIoCiAgICAgICAgb2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIEludDMyTGlzdC5ieXRlc1BlckVsZW1lbnQpLCBfdG9JbnQzMih2YWx1ZSkpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBJbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEludDMyTGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEludDMyTGlzdChsZW5ndGgpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfVWludDMyQXJyYXlWaWV3IGV4dGVuZHMgX1R5cGVkTGlzdFZpZXcKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPFVpbnQzMkxpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQzMkxpc3QgewogIC8vIENvbnN0cnVjdG9yLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX1VpbnQzMkFycmF5VmlldykKICBmYWN0b3J5IF9VaW50MzJBcnJheVZpZXcuXyhfVHlwZWRMaXN0IGJ1ZmZlciwgaW50IG9mZnNldEluQnl0ZXMsIGludCBsZW5ndGgpCiAgICAgIG5hdGl2ZSAiVHlwZWREYXRhVmlld19VaW50MzJBcnJheVZpZXdfbmV3IjsKCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBMaXN0IGludGVyZmFjZS4KICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX3R5cGVkRGF0YQogICAgICAgIC5fZ2V0VWludDMyKG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBVaW50MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCkpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF90eXBlZERhdGEuX3NldFVpbnQzMigKICAgICAgICBvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogVWludDMyTGlzdC5ieXRlc1BlckVsZW1lbnQpLCBfdG9VaW50MzIodmFsdWUpKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gVWludDMyTGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgVWludDMyTGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IFVpbnQzMkxpc3QobGVuZ3RoKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0ludDY0QXJyYXlWaWV3IGV4dGVuZHMgX1R5cGVkTGlzdFZpZXcKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPEludDY0TGlzdD4KICAgIGltcGxlbWVudHMgSW50NjRMaXN0IHsKICAvLyBDb25zdHJ1Y3Rvci4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQ2NEFycmF5VmlldykKICBmYWN0b3J5IF9JbnQ2NEFycmF5Vmlldy5fKF9UeXBlZExpc3QgYnVmZmVyLCBpbnQgb2Zmc2V0SW5CeXRlcywgaW50IGxlbmd0aCkKICAgICAgbmF0aXZlICJUeXBlZERhdGFWaWV3X0ludDY0QXJyYXlWaWV3X25ldyI7CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgTGlzdCBpbnRlcmZhY2UuCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF90eXBlZERhdGEKICAgICAgICAuX2dldEludDY0KG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBJbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50KSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3R5cGVkRGF0YS5fc2V0SW50NjQoCiAgICAgICAgb2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIEludDY0TGlzdC5ieXRlc1BlckVsZW1lbnQpLCB2YWx1ZSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEludDY0TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgSW50NjRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgSW50NjRMaXN0KGxlbmd0aCk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9VaW50NjRBcnJheVZpZXcgZXh0ZW5kcyBfVHlwZWRMaXN0VmlldwogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48VWludDY0TGlzdD4KICAgIGltcGxlbWVudHMgVWludDY0TGlzdCB7CiAgLy8gQ29uc3RydWN0b3IuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfVWludDY0QXJyYXlWaWV3KQogIGZhY3RvcnkgX1VpbnQ2NEFycmF5Vmlldy5fKF9UeXBlZExpc3QgYnVmZmVyLCBpbnQgb2Zmc2V0SW5CeXRlcywgaW50IGxlbmd0aCkKICAgICAgbmF0aXZlICJUeXBlZERhdGFWaWV3X1VpbnQ2NEFycmF5Vmlld19uZXciOwoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIExpc3QgaW50ZXJmYWNlLgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfdHlwZWREYXRhCiAgICAgICAgLl9nZXRVaW50NjQob2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIFVpbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50KSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3R5cGVkRGF0YS5fc2V0VWludDY0KAogICAgICAgIG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBVaW50NjRMaXN0LmJ5dGVzUGVyRWxlbWVudCksIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gVWludDY0TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgVWludDY0TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IFVpbnQ2NExpc3QobGVuZ3RoKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0Zsb2F0MzJBcnJheVZpZXcgZXh0ZW5kcyBfVHlwZWRMaXN0VmlldwogICAgd2l0aCBfRG91YmxlTGlzdE1peGluLCBfVHlwZWREb3VibGVMaXN0TWl4aW48RmxvYXQzMkxpc3Q+CiAgICBpbXBsZW1lbnRzIEZsb2F0MzJMaXN0IHsKICAvLyBDb25zdHJ1Y3Rvci4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyQXJyYXlWaWV3KQogIGZhY3RvcnkgX0Zsb2F0MzJBcnJheVZpZXcuXyhfVHlwZWRMaXN0IGJ1ZmZlciwgaW50IG9mZnNldEluQnl0ZXMsIGludCBsZW5ndGgpCiAgICAgIG5hdGl2ZSAiVHlwZWREYXRhVmlld19GbG9hdDMyQXJyYXlWaWV3X25ldyI7CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgTGlzdCBpbnRlcmZhY2UuCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgZG91YmxlIG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF90eXBlZERhdGEKICAgICAgICAuX2dldEZsb2F0MzIob2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIEZsb2F0MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCkpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBkb3VibGUgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF90eXBlZERhdGEuX3NldEZsb2F0MzIoCiAgICAgICAgb2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIEZsb2F0MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCksIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gRmxvYXQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEZsb2F0MzJMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgRmxvYXQzMkxpc3QobGVuZ3RoKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0Zsb2F0NjRBcnJheVZpZXcgZXh0ZW5kcyBfVHlwZWRMaXN0VmlldwogICAgd2l0aCBfRG91YmxlTGlzdE1peGluLCBfVHlwZWREb3VibGVMaXN0TWl4aW48RmxvYXQ2NExpc3Q+CiAgICBpbXBsZW1lbnRzIEZsb2F0NjRMaXN0IHsKICAvLyBDb25zdHJ1Y3Rvci4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDY0QXJyYXlWaWV3KQogIGZhY3RvcnkgX0Zsb2F0NjRBcnJheVZpZXcuXyhfVHlwZWRMaXN0IGJ1ZmZlciwgaW50IG9mZnNldEluQnl0ZXMsIGludCBsZW5ndGgpCiAgICAgIG5hdGl2ZSAiVHlwZWREYXRhVmlld19GbG9hdDY0QXJyYXlWaWV3X25ldyI7CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgTGlzdCBpbnRlcmZhY2UuCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgZG91YmxlIG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF90eXBlZERhdGEKICAgICAgICAuX2dldEZsb2F0NjQob2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIEZsb2F0NjRMaXN0LmJ5dGVzUGVyRWxlbWVudCkpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBkb3VibGUgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF90eXBlZERhdGEuX3NldEZsb2F0NjQoCiAgICAgICAgb2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIEZsb2F0NjRMaXN0LmJ5dGVzUGVyRWxlbWVudCksIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gRmxvYXQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEZsb2F0NjRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgRmxvYXQ2NExpc3QobGVuZ3RoKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0Zsb2F0MzJ4NEFycmF5VmlldyBleHRlbmRzIF9UeXBlZExpc3RWaWV3CiAgICB3aXRoIF9GbG9hdDMyeDRMaXN0TWl4aW4KICAgIGltcGxlbWVudHMgRmxvYXQzMng0TGlzdCB7CiAgLy8gQ29uc3RydWN0b3IuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0QXJyYXlWaWV3KQogIGZhY3RvcnkgX0Zsb2F0MzJ4NEFycmF5Vmlldy5fKF9UeXBlZExpc3QgYnVmZmVyLCBpbnQgb2Zmc2V0SW5CeXRlcywKICAgICAgaW50IGxlbmd0aCkgbmF0aXZlICJUeXBlZERhdGFWaWV3X0Zsb2F0MzJ4NEFycmF5Vmlld19uZXciOwoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIExpc3QgaW50ZXJmYWNlLgogIEZsb2F0MzJ4NCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfdHlwZWREYXRhCiAgICAgICAgLl9nZXRGbG9hdDMyeDQob2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIEZsb2F0MzJ4NExpc3QuYnl0ZXNQZXJFbGVtZW50KSk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIEZsb2F0MzJ4NCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3R5cGVkRGF0YS5fc2V0RmxvYXQzMng0KAogICAgICAgIG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBGbG9hdDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudCksIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gRmxvYXQzMng0TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgRmxvYXQzMng0TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEZsb2F0MzJ4NExpc3QobGVuZ3RoKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0ludDMyeDRBcnJheVZpZXcgZXh0ZW5kcyBfVHlwZWRMaXN0VmlldwogICAgd2l0aCBfSW50MzJ4NExpc3RNaXhpbgogICAgaW1wbGVtZW50cyBJbnQzMng0TGlzdCB7CiAgLy8gQ29uc3RydWN0b3IuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MzJ4NEFycmF5VmlldykKICBmYWN0b3J5IF9JbnQzMng0QXJyYXlWaWV3Ll8oX1R5cGVkTGlzdCBidWZmZXIsIGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgbGVuZ3RoKQogICAgICBuYXRpdmUgIlR5cGVkRGF0YVZpZXdfSW50MzJ4NEFycmF5Vmlld19uZXciOwoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIExpc3QgaW50ZXJmYWNlLgogIEludDMyeDQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX3R5cGVkRGF0YQogICAgICAgIC5fZ2V0SW50MzJ4NChvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogSW50MzJ4NExpc3QuYnl0ZXNQZXJFbGVtZW50KSk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIEludDMyeDQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF90eXBlZERhdGEuX3NldEludDMyeDQoCiAgICAgICAgb2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIEludDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudCksIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gSW50MzJ4NExpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEludDMyeDRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgSW50MzJ4NExpc3QobGVuZ3RoKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0Zsb2F0NjR4MkFycmF5VmlldyBleHRlbmRzIF9UeXBlZExpc3RWaWV3CiAgICB3aXRoIF9GbG9hdDY0eDJMaXN0TWl4aW4KICAgIGltcGxlbWVudHMgRmxvYXQ2NHgyTGlzdCB7CiAgLy8gQ29uc3RydWN0b3IuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQ2NHgyQXJyYXlWaWV3KQogIGZhY3RvcnkgX0Zsb2F0NjR4MkFycmF5Vmlldy5fKF9UeXBlZExpc3QgYnVmZmVyLCBpbnQgb2Zmc2V0SW5CeXRlcywKICAgICAgaW50IGxlbmd0aCkgbmF0aXZlICJUeXBlZERhdGFWaWV3X0Zsb2F0NjR4MkFycmF5Vmlld19uZXciOwoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIExpc3QgaW50ZXJmYWNlLgogIEZsb2F0NjR4MiBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfdHlwZWREYXRhCiAgICAgICAgLl9nZXRGbG9hdDY0eDIob2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIEZsb2F0NjR4Mkxpc3QuYnl0ZXNQZXJFbGVtZW50KSk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIEZsb2F0NjR4MiB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3R5cGVkRGF0YS5fc2V0RmxvYXQ2NHgyKAogICAgICAgIG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBGbG9hdDY0eDJMaXN0LmJ5dGVzUGVyRWxlbWVudCksIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gRmxvYXQ2NHgyTGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgRmxvYXQ2NHgyTGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEZsb2F0NjR4Mkxpc3QobGVuZ3RoKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0J5dGVEYXRhVmlldyBpbXBsZW1lbnRzIEJ5dGVEYXRhIHsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9CeXRlRGF0YVZpZXcpCiAgZmFjdG9yeSBfQnl0ZURhdGFWaWV3Ll8oX1R5cGVkTGlzdCBidWZmZXIsIGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgbGVuZ3RoKQogICAgICBuYXRpdmUgIlR5cGVkRGF0YVZpZXdfQnl0ZURhdGFWaWV3X25ldyI7CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgVHlwZWREYXRhIGludGVyZmFjZS4KICBfQnl0ZUJ1ZmZlciBnZXQgYnVmZmVyIHsKICAgIHJldHVybiBfdHlwZWREYXRhLmJ1ZmZlcjsKICB9CgogIGludCBnZXQgbGVuZ3RoSW5CeXRlcyB7CiAgICByZXR1cm4gbGVuZ3RoOwogIH0KCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIDE7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIEJ5dGVEYXRhIGludGVyZmFjZS4KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IGdldEludDgoaW50IGJ5dGVPZmZzZXQpIHsKICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBieXRlT2Zmc2V0ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChieXRlT2Zmc2V0LCB0aGlzLCAiYnl0ZU9mZnNldCIpOwogICAgfQogICAgcmV0dXJuIF90eXBlZERhdGEuX2dldEludDgob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBzZXRJbnQ4KGludCBieXRlT2Zmc2V0LCBpbnQgdmFsdWUpIHsKICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBieXRlT2Zmc2V0ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChieXRlT2Zmc2V0LCB0aGlzLCAiYnl0ZU9mZnNldCIpOwogICAgfQogICAgX3R5cGVkRGF0YS5fc2V0SW50OChvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCwgdmFsdWUpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IGdldFVpbnQ4KGludCBieXRlT2Zmc2V0KSB7CiAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoYnl0ZU9mZnNldCwgdGhpcywgImJ5dGVPZmZzZXQiKTsKICAgIH0KICAgIHJldHVybiBfdHlwZWREYXRhLl9nZXRVaW50OChvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIHNldFVpbnQ4KGludCBieXRlT2Zmc2V0LCBpbnQgdmFsdWUpIHsKICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBieXRlT2Zmc2V0ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChieXRlT2Zmc2V0LCB0aGlzLCAiYnl0ZU9mZnNldCIpOwogICAgfQogICAgX3R5cGVkRGF0YS5fc2V0VWludDgob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQsIHZhbHVlKTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXRJbnQxNihpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgewogICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGJ5dGVPZmZzZXQgKyAxID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShieXRlT2Zmc2V0LCAwLCBsZW5ndGggLSAyLCAiYnl0ZU9mZnNldCIpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF90eXBlZERhdGEuX2dldEludDE2KG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0KTsKICAgIGlmIChpZGVudGljYWwoZW5kaWFuLCBFbmRpYW4uaG9zdCkpIHsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHJldHVybiBfYnl0ZVN3YXAxNihyZXN1bHQpLnRvU2lnbmVkKDE2KTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgc2V0SW50MTYoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgewogICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGJ5dGVPZmZzZXQgKyAxID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShieXRlT2Zmc2V0LCAwLCBsZW5ndGggLSAyLCAiYnl0ZU9mZnNldCIpOwogICAgfQogICAgX3R5cGVkRGF0YS5fc2V0SW50MTYob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQsCiAgICAgICAgaWRlbnRpY2FsKGVuZGlhbiwgRW5kaWFuLmhvc3QpID8gdmFsdWUgOiBfYnl0ZVN3YXAxNih2YWx1ZSkpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IGdldFVpbnQxNihpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgewogICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGJ5dGVPZmZzZXQgKyAxID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShieXRlT2Zmc2V0LCAwLCBsZW5ndGggLSAyLCAiYnl0ZU9mZnNldCIpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF90eXBlZERhdGEuX2dldFVpbnQxNihvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCk7CiAgICBpZiAoaWRlbnRpY2FsKGVuZGlhbiwgRW5kaWFuLmhvc3QpKSB7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gX2J5dGVTd2FwMTYocmVzdWx0KTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgc2V0VWludDE2KGludCBieXRlT2Zmc2V0LCBpbnQgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pIHsKICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBieXRlT2Zmc2V0ICsgMSA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoYnl0ZU9mZnNldCwgMCwgbGVuZ3RoIC0gMiwgImJ5dGVPZmZzZXQiKTsKICAgIH0KICAgIF90eXBlZERhdGEuX3NldFVpbnQxNihvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCwKICAgICAgICBpZGVudGljYWwoZW5kaWFuLCBFbmRpYW4uaG9zdCkgPyB2YWx1ZSA6IF9ieXRlU3dhcDE2KHZhbHVlKSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0SW50MzIoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pIHsKICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBieXRlT2Zmc2V0ICsgMyA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoYnl0ZU9mZnNldCwgMCwgbGVuZ3RoIC0gNCwgImJ5dGVPZmZzZXQiKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfdHlwZWREYXRhLl9nZXRJbnQzMihvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCk7CiAgICBpZiAoaWRlbnRpY2FsKGVuZGlhbiwgRW5kaWFuLmhvc3QpKSB7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gX2J5dGVTd2FwMzIocmVzdWx0KS50b1NpZ25lZCgzMik7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIHNldEludDMyKGludCBieXRlT2Zmc2V0LCBpbnQgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pIHsKICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBieXRlT2Zmc2V0ICsgMyA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoYnl0ZU9mZnNldCwgMCwgbGVuZ3RoIC0gNCwgImJ5dGVPZmZzZXQiKTsKICAgIH0KICAgIF90eXBlZERhdGEuX3NldEludDMyKG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0LAogICAgICAgIGlkZW50aWNhbChlbmRpYW4sIEVuZGlhbi5ob3N0KSA/IHZhbHVlIDogX2J5dGVTd2FwMzIodmFsdWUpKTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXRVaW50MzIoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pIHsKICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBieXRlT2Zmc2V0ICsgMyA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoYnl0ZU9mZnNldCwgMCwgbGVuZ3RoIC0gNCwgImJ5dGVPZmZzZXQiKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfdHlwZWREYXRhLl9nZXRVaW50MzIob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQpOwogICAgaWYgKGlkZW50aWNhbChlbmRpYW4sIEVuZGlhbi5ob3N0KSkgewogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgcmV0dXJuIF9ieXRlU3dhcDMyKHJlc3VsdCk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIHNldFVpbnQzMihpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlLCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSB7CiAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCArIDMgPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGJ5dGVPZmZzZXQsIDAsIGxlbmd0aCAtIDQsICJieXRlT2Zmc2V0Iik7CiAgICB9CiAgICBfdHlwZWREYXRhLl9zZXRVaW50MzIob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQsCiAgICAgICAgaWRlbnRpY2FsKGVuZGlhbiwgRW5kaWFuLmhvc3QpID8gdmFsdWUgOiBfYnl0ZVN3YXAzMih2YWx1ZSkpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IGdldEludDY0KGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSB7CiAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCArIDcgPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGJ5dGVPZmZzZXQsIDAsIGxlbmd0aCAtIDgsICJieXRlT2Zmc2V0Iik7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX3R5cGVkRGF0YS5fZ2V0SW50NjQob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQpOwogICAgaWYgKGlkZW50aWNhbChlbmRpYW4sIEVuZGlhbi5ob3N0KSkgewogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgcmV0dXJuIF9ieXRlU3dhcDY0KHJlc3VsdCkudG9TaWduZWQoNjQpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBzZXRJbnQ2NChpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlLCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSB7CiAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCArIDcgPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGJ5dGVPZmZzZXQsIDAsIGxlbmd0aCAtIDgsICJieXRlT2Zmc2V0Iik7CiAgICB9CiAgICBfdHlwZWREYXRhLl9zZXRJbnQ2NChvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCwKICAgICAgICBpZGVudGljYWwoZW5kaWFuLCBFbmRpYW4uaG9zdCkgPyB2YWx1ZSA6IF9ieXRlU3dhcDY0KHZhbHVlKSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0VWludDY0KGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSB7CiAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCArIDcgPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGJ5dGVPZmZzZXQsIDAsIGxlbmd0aCAtIDgsICJieXRlT2Zmc2V0Iik7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX3R5cGVkRGF0YS5fZ2V0VWludDY0KG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0KTsKICAgIGlmIChpZGVudGljYWwoZW5kaWFuLCBFbmRpYW4uaG9zdCkpIHsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHJldHVybiBfYnl0ZVN3YXA2NChyZXN1bHQpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBzZXRVaW50NjQoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgewogICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGJ5dGVPZmZzZXQgKyA3ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShieXRlT2Zmc2V0LCAwLCBsZW5ndGggLSA4LCAiYnl0ZU9mZnNldCIpOwogICAgfQogICAgX3R5cGVkRGF0YS5fc2V0VWludDY0KG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0LAogICAgICAgIGlkZW50aWNhbChlbmRpYW4sIEVuZGlhbi5ob3N0KSA/IHZhbHVlIDogX2J5dGVTd2FwNjQodmFsdWUpKTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGRvdWJsZSBnZXRGbG9hdDMyKGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSB7CiAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCArIDMgPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGJ5dGVPZmZzZXQsIDAsIGxlbmd0aCAtIDQsICJieXRlT2Zmc2V0Iik7CiAgICB9CiAgICBpZiAoaWRlbnRpY2FsKGVuZGlhbiwgRW5kaWFuLmhvc3QpKSB7CiAgICAgIHJldHVybiBfdHlwZWREYXRhLl9nZXRGbG9hdDMyKG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0KTsKICAgIH0KICAgIF9jb252VTMyWzBdID0KICAgICAgICBfYnl0ZVN3YXAzMihfdHlwZWREYXRhLl9nZXRVaW50MzIob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQpKTsKICAgIHJldHVybiBfY29udkYzMlswXTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgc2V0RmxvYXQzMihpbnQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSB7CiAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCArIDMgPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGJ5dGVPZmZzZXQsIDAsIGxlbmd0aCAtIDQsICJieXRlT2Zmc2V0Iik7CiAgICB9CiAgICBpZiAoaWRlbnRpY2FsKGVuZGlhbiwgRW5kaWFuLmhvc3QpKSB7CiAgICAgIF90eXBlZERhdGEuX3NldEZsb2F0MzIob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQsIHZhbHVlKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgX2NvbnZGMzJbMF0gPSB2YWx1ZTsKICAgIF90eXBlZERhdGEuX3NldFVpbnQzMihvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCwgX2J5dGVTd2FwMzIoX2NvbnZVMzJbMF0pKTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGRvdWJsZSBnZXRGbG9hdDY0KGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSB7CiAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCArIDcgPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGJ5dGVPZmZzZXQsIDAsIGxlbmd0aCAtIDgsICJieXRlT2Zmc2V0Iik7CiAgICB9CiAgICBpZiAoaWRlbnRpY2FsKGVuZGlhbiwgRW5kaWFuLmhvc3QpKSB7CiAgICAgIHJldHVybiBfdHlwZWREYXRhLl9nZXRGbG9hdDY0KG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0KTsKICAgIH0KICAgIF9jb252VTY0WzBdID0KICAgICAgICBfYnl0ZVN3YXA2NChfdHlwZWREYXRhLl9nZXRVaW50NjQob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQpKTsKICAgIHJldHVybiBfY29udkY2NFswXTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgc2V0RmxvYXQ2NChpbnQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSB7CiAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCArIDcgPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGJ5dGVPZmZzZXQsIDAsIGxlbmd0aCAtIDgsICJieXRlT2Zmc2V0Iik7CiAgICB9CiAgICBpZiAoaWRlbnRpY2FsKGVuZGlhbiwgRW5kaWFuLmhvc3QpKSB7CiAgICAgIF90eXBlZERhdGEuX3NldEZsb2F0NjQob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQsIHZhbHVlKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgX2NvbnZGNjRbMF0gPSB2YWx1ZTsKICAgIF90eXBlZERhdGEuX3NldFVpbnQ2NChvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCwgX2J5dGVTd2FwNjQoX2NvbnZVNjRbMF0pKTsKICB9CgogIEZsb2F0MzJ4NCBnZXRGbG9hdDMyeDQoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pIHsKICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBieXRlT2Zmc2V0ICsgMyA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoYnl0ZU9mZnNldCwgMCwgbGVuZ3RoIC0gNCwgImJ5dGVPZmZzZXQiKTsKICAgIH0KICAgIC8vIFRPRE8oam9obm1jY3V0Y2hhbikgOiBOZWVkIHRvIHJlc29sdmUgdGhpcyBmb3IgZW5kaWFuaXR5LgogICAgcmV0dXJuIF90eXBlZERhdGEuX2dldEZsb2F0MzJ4NChvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCk7CiAgfQoKICB2b2lkIHNldEZsb2F0MzJ4NChpbnQgYnl0ZU9mZnNldCwgRmxvYXQzMng0IHZhbHVlLAogICAgICBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSB7CiAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCArIDMgPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGJ5dGVPZmZzZXQsIDAsIGxlbmd0aCAtIDQsICJieXRlT2Zmc2V0Iik7CiAgICB9CiAgICAvLyBUT0RPKGpvaG5tY2N1dGNoYW4pIDogTmVlZCB0byByZXNvbHZlIHRoaXMgZm9yIGVuZGlhbml0eS4KICAgIF90eXBlZERhdGEuX3NldEZsb2F0MzJ4NChvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCwgdmFsdWUpOwogIH0KCiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBfVHlwZWRMaXN0IGdldCBfdHlwZWREYXRhIG5hdGl2ZSAiVHlwZWREYXRhVmlld190eXBlZERhdGEiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IGdldCBvZmZzZXRJbkJ5dGVzIG5hdGl2ZSAiVHlwZWREYXRhVmlld19vZmZzZXRJbkJ5dGVzIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXQgbGVuZ3RoIG5hdGl2ZSAiVHlwZWREYXRhVmlld19sZW5ndGgiOwp9CgpAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKaW50IF9ieXRlU3dhcDE2KGludCB2YWx1ZSkgewogIHJldHVybiAoKHZhbHVlICYgMHhGRjAwKSA+PiA4KSB8ICgodmFsdWUgJiAweDAwRkYpIDw8IDgpOwp9CgpAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKaW50IF9ieXRlU3dhcDMyKGludCB2YWx1ZSkgewogIHZhbHVlID0gKCh2YWx1ZSAmIDB4RkYwMEZGMDApID4+IDgpIHwgKCh2YWx1ZSAmIDB4MDBGRjAwRkYpIDw8IDgpOwogIHZhbHVlID0gKCh2YWx1ZSAmIDB4RkZGRjAwMDApID4+IDE2KSB8ICgodmFsdWUgJiAweDAwMDBGRkZGKSA8PCAxNik7CiAgcmV0dXJuIHZhbHVlOwp9CgpAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKaW50IF9ieXRlU3dhcDY0KGludCB2YWx1ZSkgewogIHJldHVybiAoX2J5dGVTd2FwMzIodmFsdWUpIDw8IDMyKSB8IF9ieXRlU3dhcDMyKHZhbHVlID4+IDMyKTsKfQoKZmluYWwgX2NvbnZVMzIgPSBuZXcgVWludDMyTGlzdCgyKTsKZmluYWwgX2NvbnZVNjQgPSBuZXcgVWludDY0TGlzdC52aWV3KF9jb252VTMyLmJ1ZmZlcik7CmZpbmFsIF9jb252RjMyID0gbmV3IEZsb2F0MzJMaXN0LnZpZXcoX2NvbnZVMzIuYnVmZmVyKTsKZmluYWwgX2NvbnZGNjQgPSBuZXcgRmxvYXQ2NExpc3QudmlldyhfY29udlUzMi5idWZmZXIpOwoKLy8gVG9wIGxldmVsIHV0aWxpdHkgbWV0aG9kcy4KQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCmludCBfdG9JbnQoaW50IHZhbHVlLCBpbnQgbWFzaykgewogIHZhbHVlICY9IG1hc2s7CiAgaWYgKHZhbHVlID4gKG1hc2sgPj4gMSkpIHZhbHVlIC09IG1hc2sgKyAxOwogIHJldHVybiB2YWx1ZTsKfQoKQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCmludCBfdG9JbnQ4KGludCB2YWx1ZSkgewogIHJldHVybiBfdG9JbnQodmFsdWUsIDB4RkYpOwp9CgpAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKaW50IF90b1VpbnQ4KGludCB2YWx1ZSkgewogIHJldHVybiB2YWx1ZSAmIDB4RkY7Cn0KCkBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKaW50IF90b0NsYW1wZWRVaW50OChpbnQgdmFsdWUpIHsKICBpZiAodmFsdWUgPCAwKSByZXR1cm4gMDsKICBpZiAodmFsdWUgPiAweEZGKSByZXR1cm4gMHhGRjsKICByZXR1cm4gdmFsdWU7Cn0KCkBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQppbnQgX3RvSW50MTYoaW50IHZhbHVlKSB7CiAgcmV0dXJuIF90b0ludCh2YWx1ZSwgMHhGRkZGKTsKfQoKQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCmludCBfdG9VaW50MTYoaW50IHZhbHVlKSB7CiAgcmV0dXJuIHZhbHVlICYgMHhGRkZGOwp9CgpAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKaW50IF90b0ludDMyKGludCB2YWx1ZSkgewogIHJldHVybiBfdG9JbnQodmFsdWUsIDB4RkZGRkZGRkYpOwp9CgpAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKaW50IF90b1VpbnQzMihpbnQgdmFsdWUpIHsKICByZXR1cm4gdmFsdWUgJiAweEZGRkZGRkZGOwp9CgpAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKdm9pZCBfdGhyb3dJZk51bGwodmFsLCBTdHJpbmcgbmFtZSkgewogIGlmICh2YWwgPT0gbnVsbCkgewogICAgdGhyb3cgQXJndW1lbnRFcnJvci5ub3ROdWxsKG5hbWUpOwogIH0KfQoKLy8gSW4gYWRkaXRpb24gdG8gZXhwbGljaXRseSBjaGVja2luZyB0aGUgcmFuZ2UsIHRoaXMgbWV0aG9kIGltcGxpY2l0bHkgZW5zdXJlcwovLyB0aGF0IGFsbCBhcmd1bWVudHMgYXJlIG5vbi1udWxsIChhIG5vIHN1Y2ggbWV0aG9kIGVycm9yIGdldHMgdGhyb3duCi8vIG90aGVyd2lzZSkuCnZvaWQgX3JhbmdlQ2hlY2soaW50IGxpc3RMZW5ndGgsIGludCBzdGFydCwgaW50IGxlbmd0aCkgewogIGlmIChsZW5ndGggPCAwKSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci52YWx1ZShsZW5ndGgpOwogIH0KICBpZiAoc3RhcnQgPCAwKSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci52YWx1ZShzdGFydCk7CiAgfQogIGlmIChzdGFydCArIGxlbmd0aCA+IGxpc3RMZW5ndGgpIHsKICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnZhbHVlKHN0YXJ0ICsgbGVuZ3RoKTsKICB9Cn0KCnZvaWQgX29mZnNldEFsaWdubWVudENoZWNrKGludCBvZmZzZXQsIGludCBhbGlnbm1lbnQpIHsKICBpZiAoKG9mZnNldCAlIGFsaWdubWVudCkgIT0gMCkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ09mZnNldCAoJG9mZnNldCkgbXVzdCBiZSBhIG11bHRpcGxlIG9mICcKICAgICAgICAnQllURVNfUEVSX0VMRU1FTlQgKCRhbGlnbm1lbnQpJyk7CiAgfQp9CpLCAE5OPAEPAU1QSysBGAkRExgcHhUPGBgeGw4ZGxcbDwEoASABKQEHJgkcITYwMQQBIhxQQUIEAgFMJ05LSyAS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NksGRCoVBiAEAR5MNksGNkYEAR4/NksGQyoVBi0EAR5LNksGNUYEAR5ANksGRCoVBiAEAR5MNksGNkYEAR5ENksGKkEGEkgYBAEeUDZLBipBDgYZUQQBHkQ2SwYqQQYSSBgEAR5QNksGKkEOBhlRBAFJNksGQUEEATUmNksGQUEEASkePgE0Hj4BNB4wAgEcHTwCARwdRUcQAgEcHUACASQ3ODgBHhwiES4QAgEcGR4CARwaFwIBMiEbIRACARwaIAIBHBsZAgEcGiQCARwbHQIBHCYVJwQCAVBHDzoUKAQTJwQlMAQCATgjQysEAgErZGFydDp0eXBlZF9kYXRhLXBhdGNoL3R5cGVkX2RhdGFfcGF0Y2guZGFydFRvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi90eXBlZF9kYXRhL3VubW9kaWZpYWJsZV90eXBlZF9kYXRhLmRhcnSsTi8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LnR5cGVkX2RhdGE7CgovKioKICogQSByZWFkLW9ubHkgdmlldyBvZiBhIFtCeXRlQnVmZmVyXS4KICovCmNsYXNzIFVubW9kaWZpYWJsZUJ5dGVCdWZmZXJWaWV3IGltcGxlbWVudHMgQnl0ZUJ1ZmZlciB7CiAgZmluYWwgQnl0ZUJ1ZmZlciBfZGF0YTsKCiAgVW5tb2RpZmlhYmxlQnl0ZUJ1ZmZlclZpZXcoQnl0ZUJ1ZmZlciBkYXRhKSA6IF9kYXRhID0gZGF0YTsKCiAgaW50IGdldCBsZW5ndGhJbkJ5dGVzID0+IF9kYXRhLmxlbmd0aEluQnl0ZXM7CgogIFVpbnQ4TGlzdCBhc1VpbnQ4TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgPT4KICAgICAgbmV3IFVubW9kaWZpYWJsZVVpbnQ4TGlzdFZpZXcoX2RhdGEuYXNVaW50OExpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKSk7CgogIEludDhMaXN0IGFzSW50OExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pID0+CiAgICAgIG5ldyBVbm1vZGlmaWFibGVJbnQ4TGlzdFZpZXcoX2RhdGEuYXNJbnQ4TGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpKTsKCiAgVWludDhDbGFtcGVkTGlzdCBhc1VpbnQ4Q2xhbXBlZExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pID0+CiAgICAgIG5ldyBVbm1vZGlmaWFibGVVaW50OENsYW1wZWRMaXN0VmlldygKICAgICAgICAgIF9kYXRhLmFzVWludDhDbGFtcGVkTGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpKTsKCiAgVWludDE2TGlzdCBhc1VpbnQxNkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pID0+CiAgICAgIG5ldyBVbm1vZGlmaWFibGVVaW50MTZMaXN0VmlldyhfZGF0YS5hc1VpbnQxNkxpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKSk7CgogIEludDE2TGlzdCBhc0ludDE2TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgPT4KICAgICAgbmV3IFVubW9kaWZpYWJsZUludDE2TGlzdFZpZXcoX2RhdGEuYXNJbnQxNkxpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKSk7CgogIFVpbnQzMkxpc3QgYXNVaW50MzJMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSA9PgogICAgICBuZXcgVW5tb2RpZmlhYmxlVWludDMyTGlzdFZpZXcoX2RhdGEuYXNVaW50MzJMaXN0KG9mZnNldEluQnl0ZXMsIGxlbmd0aCkpOwoKICBJbnQzMkxpc3QgYXNJbnQzMkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pID0+CiAgICAgIG5ldyBVbm1vZGlmaWFibGVJbnQzMkxpc3RWaWV3KF9kYXRhLmFzSW50MzJMaXN0KG9mZnNldEluQnl0ZXMsIGxlbmd0aCkpOwoKICBVaW50NjRMaXN0IGFzVWludDY0TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgPT4KICAgICAgbmV3IFVubW9kaWZpYWJsZVVpbnQ2NExpc3RWaWV3KF9kYXRhLmFzVWludDY0TGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpKTsKCiAgSW50NjRMaXN0IGFzSW50NjRMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSA9PgogICAgICBuZXcgVW5tb2RpZmlhYmxlSW50NjRMaXN0VmlldyhfZGF0YS5hc0ludDY0TGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpKTsKCiAgSW50MzJ4NExpc3QgYXNJbnQzMng0TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgPT4KICAgICAgbmV3IFVubW9kaWZpYWJsZUludDMyeDRMaXN0VmlldygKICAgICAgICAgIF9kYXRhLmFzSW50MzJ4NExpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKSk7CgogIEZsb2F0MzJMaXN0IGFzRmxvYXQzMkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pID0+CiAgICAgIG5ldyBVbm1vZGlmaWFibGVGbG9hdDMyTGlzdFZpZXcoCiAgICAgICAgICBfZGF0YS5hc0Zsb2F0MzJMaXN0KG9mZnNldEluQnl0ZXMsIGxlbmd0aCkpOwoKICBGbG9hdDY0TGlzdCBhc0Zsb2F0NjRMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSA9PgogICAgICBuZXcgVW5tb2RpZmlhYmxlRmxvYXQ2NExpc3RWaWV3KAogICAgICAgICAgX2RhdGEuYXNGbG9hdDY0TGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpKTsKCiAgRmxvYXQzMng0TGlzdCBhc0Zsb2F0MzJ4NExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pID0+CiAgICAgIG5ldyBVbm1vZGlmaWFibGVGbG9hdDMyeDRMaXN0VmlldygKICAgICAgICAgIF9kYXRhLmFzRmxvYXQzMng0TGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpKTsKCiAgRmxvYXQ2NHgyTGlzdCBhc0Zsb2F0NjR4Mkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pID0+CiAgICAgIG5ldyBVbm1vZGlmaWFibGVGbG9hdDY0eDJMaXN0VmlldygKICAgICAgICAgIF9kYXRhLmFzRmxvYXQ2NHgyTGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpKTsKCiAgQnl0ZURhdGEgYXNCeXRlRGF0YShbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgPT4KICAgICAgbmV3IFVubW9kaWZpYWJsZUJ5dGVEYXRhVmlldyhfZGF0YS5hc0J5dGVEYXRhKG9mZnNldEluQnl0ZXMsIGxlbmd0aCkpOwp9CgovKioKICogQSByZWFkLW9ubHkgdmlldyBvZiBhIFtCeXRlRGF0YV0uCiAqLwpjbGFzcyBVbm1vZGlmaWFibGVCeXRlRGF0YVZpZXcgaW1wbGVtZW50cyBCeXRlRGF0YSB7CiAgZmluYWwgQnl0ZURhdGEgX2RhdGE7CgogIFVubW9kaWZpYWJsZUJ5dGVEYXRhVmlldyhCeXRlRGF0YSBkYXRhKSA6IF9kYXRhID0gZGF0YTsKCiAgaW50IGdldEludDgoaW50IGJ5dGVPZmZzZXQpID0+IF9kYXRhLmdldEludDgoYnl0ZU9mZnNldCk7CgogIHZvaWQgc2V0SW50OChpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlKSA9PiBfdW5zdXBwb3J0ZWQoKTsKCiAgaW50IGdldFVpbnQ4KGludCBieXRlT2Zmc2V0KSA9PiBfZGF0YS5nZXRVaW50OChieXRlT2Zmc2V0KTsKCiAgdm9pZCBzZXRVaW50OChpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlKSA9PiBfdW5zdXBwb3J0ZWQoKTsKCiAgaW50IGdldEludDE2KGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSA9PgogICAgICBfZGF0YS5nZXRJbnQxNihieXRlT2Zmc2V0LCBlbmRpYW4pOwoKICB2b2lkIHNldEludDE2KGludCBieXRlT2Zmc2V0LCBpbnQgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pID0+CiAgICAgIF91bnN1cHBvcnRlZCgpOwoKICBpbnQgZ2V0VWludDE2KGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSA9PgogICAgICBfZGF0YS5nZXRVaW50MTYoYnl0ZU9mZnNldCwgZW5kaWFuKTsKCiAgdm9pZCBzZXRVaW50MTYoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgPT4KICAgICAgX3Vuc3VwcG9ydGVkKCk7CgogIGludCBnZXRJbnQzMihpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgPT4KICAgICAgX2RhdGEuZ2V0SW50MzIoYnl0ZU9mZnNldCwgZW5kaWFuKTsKCiAgdm9pZCBzZXRJbnQzMihpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlLCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSA9PgogICAgICBfdW5zdXBwb3J0ZWQoKTsKCiAgaW50IGdldFVpbnQzMihpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgPT4KICAgICAgX2RhdGEuZ2V0VWludDMyKGJ5dGVPZmZzZXQsIGVuZGlhbik7CgogIHZvaWQgc2V0VWludDMyKGludCBieXRlT2Zmc2V0LCBpbnQgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pID0+CiAgICAgIF91bnN1cHBvcnRlZCgpOwoKICBpbnQgZ2V0SW50NjQoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pID0+CiAgICAgIF9kYXRhLmdldEludDY0KGJ5dGVPZmZzZXQsIGVuZGlhbik7CgogIHZvaWQgc2V0SW50NjQoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgPT4KICAgICAgX3Vuc3VwcG9ydGVkKCk7CgogIGludCBnZXRVaW50NjQoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pID0+CiAgICAgIF9kYXRhLmdldFVpbnQ2NChieXRlT2Zmc2V0LCBlbmRpYW4pOwoKICB2b2lkIHNldFVpbnQ2NChpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlLCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSA9PgogICAgICBfdW5zdXBwb3J0ZWQoKTsKCiAgZG91YmxlIGdldEZsb2F0MzIoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pID0+CiAgICAgIF9kYXRhLmdldEZsb2F0MzIoYnl0ZU9mZnNldCwgZW5kaWFuKTsKCiAgdm9pZCBzZXRGbG9hdDMyKGludCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pID0+CiAgICAgIF91bnN1cHBvcnRlZCgpOwoKICBkb3VibGUgZ2V0RmxvYXQ2NChpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgPT4KICAgICAgX2RhdGEuZ2V0RmxvYXQ2NChieXRlT2Zmc2V0LCBlbmRpYW4pOwoKICB2b2lkIHNldEZsb2F0NjQoaW50IGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgPT4KICAgICAgX3Vuc3VwcG9ydGVkKCk7CgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzID0+IF9kYXRhLmVsZW1lbnRTaXplSW5CeXRlczsKCiAgaW50IGdldCBvZmZzZXRJbkJ5dGVzID0+IF9kYXRhLm9mZnNldEluQnl0ZXM7CgogIGludCBnZXQgbGVuZ3RoSW5CeXRlcyA9PiBfZGF0YS5sZW5ndGhJbkJ5dGVzOwoKICBCeXRlQnVmZmVyIGdldCBidWZmZXIgPT4gbmV3IFVubW9kaWZpYWJsZUJ5dGVCdWZmZXJWaWV3KF9kYXRhLmJ1ZmZlcik7CgogIHZvaWQgX3Vuc3VwcG9ydGVkKCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkFuIFVubW9kaWZpYWJsZUJ5dGVEYXRhVmlldyBtYXkgbm90IGJlIG1vZGlmaWVkIik7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfVW5tb2RpZmlhYmxlTGlzdE1peGluPE4sIEwgZXh0ZW5kcyBMaXN0PE4+LAogICAgVEQgZXh0ZW5kcyBUeXBlZERhdGE+IHsKICBMIGdldCBfbGlzdDsKICBURCBnZXQgX2RhdGEgPT4gKF9saXN0IGFzIFREKTsKCiAgaW50IGdldCBsZW5ndGggPT4gX2xpc3QubGVuZ3RoOwoKICBOIG9wZXJhdG9yIFtdKGludCBpbmRleCkgPT4gX2xpc3RbaW5kZXhdOwoKICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyA9PiBfZGF0YS5lbGVtZW50U2l6ZUluQnl0ZXM7CgogIGludCBnZXQgb2Zmc2V0SW5CeXRlcyA9PiBfZGF0YS5vZmZzZXRJbkJ5dGVzOwoKICBpbnQgZ2V0IGxlbmd0aEluQnl0ZXMgPT4gX2RhdGEubGVuZ3RoSW5CeXRlczsKCiAgQnl0ZUJ1ZmZlciBnZXQgYnVmZmVyID0+IG5ldyBVbm1vZGlmaWFibGVCeXRlQnVmZmVyVmlldyhfZGF0YS5idWZmZXIpOwoKICBMIF9jcmVhdGVMaXN0KGludCBsZW5ndGgpOwoKICBMIHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pIHsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGxlbmd0aCk7CiAgICBpbnQgc3VibGlzdExlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgTCByZXN1bHQgPSBfY3JlYXRlTGlzdChzdWJsaXN0TGVuZ3RoKTsKICAgIHJlc3VsdC5zZXRSYW5nZSgwLCBzdWJsaXN0TGVuZ3RoLCBfbGlzdCwgc3RhcnQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCi8qKgogKiBWaWV3IG9mIGEgW1VpbnQ4TGlzdF0gdGhhdCBkaXNhbGxvd3MgbW9kaWZpY2F0aW9uLgogKi8KY2xhc3MgVW5tb2RpZmlhYmxlVWludDhMaXN0VmlldyBleHRlbmRzIFVubW9kaWZpYWJsZUxpc3RCYXNlPGludD4KICAgIHdpdGggX1VubW9kaWZpYWJsZUxpc3RNaXhpbjxpbnQsIFVpbnQ4TGlzdCwgVWludDhMaXN0PgogICAgaW1wbGVtZW50cyBVaW50OExpc3QgewogIGZpbmFsIFVpbnQ4TGlzdCBfbGlzdDsKICBVbm1vZGlmaWFibGVVaW50OExpc3RWaWV3KFVpbnQ4TGlzdCBsaXN0KSA6IF9saXN0ID0gbGlzdDsKCiAgVWludDhMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpID0+IFVpbnQ4TGlzdChsZW5ndGgpOwp9CgovKioKICogVmlldyBvZiBhIFtJbnQ4TGlzdF0gdGhhdCBkaXNhbGxvd3MgbW9kaWZpY2F0aW9uLgogKi8KY2xhc3MgVW5tb2RpZmlhYmxlSW50OExpc3RWaWV3IGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8aW50PgogICAgd2l0aCBfVW5tb2RpZmlhYmxlTGlzdE1peGluPGludCwgSW50OExpc3QsIEludDhMaXN0PgogICAgaW1wbGVtZW50cyBJbnQ4TGlzdCB7CiAgZmluYWwgSW50OExpc3QgX2xpc3Q7CiAgVW5tb2RpZmlhYmxlSW50OExpc3RWaWV3KEludDhMaXN0IGxpc3QpIDogX2xpc3QgPSBsaXN0OwoKICBJbnQ4TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSA9PiBJbnQ4TGlzdChsZW5ndGgpOwp9CgovKioKICogVmlldyBvZiBhIFtVaW50OENsYW1wZWRMaXN0XSB0aGF0IGRpc2FsbG93cyBtb2RpZmljYXRpb24uCiAqLwpjbGFzcyBVbm1vZGlmaWFibGVVaW50OENsYW1wZWRMaXN0VmlldyBleHRlbmRzIFVubW9kaWZpYWJsZUxpc3RCYXNlPGludD4KICAgIHdpdGggX1VubW9kaWZpYWJsZUxpc3RNaXhpbjxpbnQsIFVpbnQ4Q2xhbXBlZExpc3QsIFVpbnQ4Q2xhbXBlZExpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQ4Q2xhbXBlZExpc3QgewogIGZpbmFsIFVpbnQ4Q2xhbXBlZExpc3QgX2xpc3Q7CiAgVW5tb2RpZmlhYmxlVWludDhDbGFtcGVkTGlzdFZpZXcoVWludDhDbGFtcGVkTGlzdCBsaXN0KSA6IF9saXN0ID0gbGlzdDsKCiAgVWludDhDbGFtcGVkTGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSA9PiBVaW50OENsYW1wZWRMaXN0KGxlbmd0aCk7Cn0KCi8qKgogKiBWaWV3IG9mIGEgW1VpbnQxNkxpc3RdIHRoYXQgZGlzYWxsb3dzIG1vZGlmaWNhdGlvbi4KICovCmNsYXNzIFVubW9kaWZpYWJsZVVpbnQxNkxpc3RWaWV3IGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8aW50PgogICAgd2l0aCBfVW5tb2RpZmlhYmxlTGlzdE1peGluPGludCwgVWludDE2TGlzdCwgVWludDE2TGlzdD4KICAgIGltcGxlbWVudHMgVWludDE2TGlzdCB7CiAgZmluYWwgVWludDE2TGlzdCBfbGlzdDsKICBVbm1vZGlmaWFibGVVaW50MTZMaXN0VmlldyhVaW50MTZMaXN0IGxpc3QpIDogX2xpc3QgPSBsaXN0OwoKICBVaW50MTZMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpID0+IFVpbnQxNkxpc3QobGVuZ3RoKTsKfQoKLyoqCiAqIFZpZXcgb2YgYSBbSW50MTZMaXN0XSB0aGF0IGRpc2FsbG93cyBtb2RpZmljYXRpb24uCiAqLwpjbGFzcyBVbm1vZGlmaWFibGVJbnQxNkxpc3RWaWV3IGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8aW50PgogICAgd2l0aCBfVW5tb2RpZmlhYmxlTGlzdE1peGluPGludCwgSW50MTZMaXN0LCBJbnQxNkxpc3Q+CiAgICBpbXBsZW1lbnRzIEludDE2TGlzdCB7CiAgZmluYWwgSW50MTZMaXN0IF9saXN0OwogIFVubW9kaWZpYWJsZUludDE2TGlzdFZpZXcoSW50MTZMaXN0IGxpc3QpIDogX2xpc3QgPSBsaXN0OwoKICBJbnQxNkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgPT4gSW50MTZMaXN0KGxlbmd0aCk7Cn0KCi8qKgogKiBWaWV3IG9mIGEgW1VpbnQzMkxpc3RdIHRoYXQgZGlzYWxsb3dzIG1vZGlmaWNhdGlvbi4KICovCmNsYXNzIFVubW9kaWZpYWJsZVVpbnQzMkxpc3RWaWV3IGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8aW50PgogICAgd2l0aCBfVW5tb2RpZmlhYmxlTGlzdE1peGluPGludCwgVWludDMyTGlzdCwgVWludDMyTGlzdD4KICAgIGltcGxlbWVudHMgVWludDMyTGlzdCB7CiAgZmluYWwgVWludDMyTGlzdCBfbGlzdDsKICBVbm1vZGlmaWFibGVVaW50MzJMaXN0VmlldyhVaW50MzJMaXN0IGxpc3QpIDogX2xpc3QgPSBsaXN0OwoKICBVaW50MzJMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpID0+IFVpbnQzMkxpc3QobGVuZ3RoKTsKfQoKLyoqCiAqIFZpZXcgb2YgYSBbSW50MzJMaXN0XSB0aGF0IGRpc2FsbG93cyBtb2RpZmljYXRpb24uCiAqLwpjbGFzcyBVbm1vZGlmaWFibGVJbnQzMkxpc3RWaWV3IGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8aW50PgogICAgd2l0aCBfVW5tb2RpZmlhYmxlTGlzdE1peGluPGludCwgSW50MzJMaXN0LCBJbnQzMkxpc3Q+CiAgICBpbXBsZW1lbnRzIEludDMyTGlzdCB7CiAgZmluYWwgSW50MzJMaXN0IF9saXN0OwogIFVubW9kaWZpYWJsZUludDMyTGlzdFZpZXcoSW50MzJMaXN0IGxpc3QpIDogX2xpc3QgPSBsaXN0OwoKICBJbnQzMkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgPT4gSW50MzJMaXN0KGxlbmd0aCk7Cn0KCi8qKgogKiBWaWV3IG9mIGEgW1VpbnQ2NExpc3RdIHRoYXQgZGlzYWxsb3dzIG1vZGlmaWNhdGlvbi4KICovCmNsYXNzIFVubW9kaWZpYWJsZVVpbnQ2NExpc3RWaWV3IGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8aW50PgogICAgd2l0aCBfVW5tb2RpZmlhYmxlTGlzdE1peGluPGludCwgVWludDY0TGlzdCwgVWludDY0TGlzdD4KICAgIGltcGxlbWVudHMgVWludDY0TGlzdCB7CiAgZmluYWwgVWludDY0TGlzdCBfbGlzdDsKICBVbm1vZGlmaWFibGVVaW50NjRMaXN0VmlldyhVaW50NjRMaXN0IGxpc3QpIDogX2xpc3QgPSBsaXN0OwoKICBVaW50NjRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpID0+IFVpbnQ2NExpc3QobGVuZ3RoKTsKfQoKLyoqCiAqIFZpZXcgb2YgYSBbSW50NjRMaXN0XSB0aGF0IGRpc2FsbG93cyBtb2RpZmljYXRpb24uCiAqLwpjbGFzcyBVbm1vZGlmaWFibGVJbnQ2NExpc3RWaWV3IGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8aW50PgogICAgd2l0aCBfVW5tb2RpZmlhYmxlTGlzdE1peGluPGludCwgSW50NjRMaXN0LCBJbnQ2NExpc3Q+CiAgICBpbXBsZW1lbnRzIEludDY0TGlzdCB7CiAgZmluYWwgSW50NjRMaXN0IF9saXN0OwogIFVubW9kaWZpYWJsZUludDY0TGlzdFZpZXcoSW50NjRMaXN0IGxpc3QpIDogX2xpc3QgPSBsaXN0OwoKICBJbnQ2NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgPT4gSW50NjRMaXN0KGxlbmd0aCk7Cn0KCi8qKgogKiBWaWV3IG9mIGEgW0ludDMyeDRMaXN0XSB0aGF0IGRpc2FsbG93cyBtb2RpZmljYXRpb24uCiAqLwpjbGFzcyBVbm1vZGlmaWFibGVJbnQzMng0TGlzdFZpZXcgZXh0ZW5kcyBVbm1vZGlmaWFibGVMaXN0QmFzZTxJbnQzMng0PgogICAgd2l0aCBfVW5tb2RpZmlhYmxlTGlzdE1peGluPEludDMyeDQsIEludDMyeDRMaXN0LCBJbnQzMng0TGlzdD4KICAgIGltcGxlbWVudHMgSW50MzJ4NExpc3QgewogIGZpbmFsIEludDMyeDRMaXN0IF9saXN0OwogIFVubW9kaWZpYWJsZUludDMyeDRMaXN0VmlldyhJbnQzMng0TGlzdCBsaXN0KSA6IF9saXN0ID0gbGlzdDsKCiAgSW50MzJ4NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgPT4gSW50MzJ4NExpc3QobGVuZ3RoKTsKfQoKLyoqCiAqIFZpZXcgb2YgYSBbRmxvYXQzMng0TGlzdF0gdGhhdCBkaXNhbGxvd3MgbW9kaWZpY2F0aW9uLgogKi8KY2xhc3MgVW5tb2RpZmlhYmxlRmxvYXQzMng0TGlzdFZpZXcgZXh0ZW5kcyBVbm1vZGlmaWFibGVMaXN0QmFzZTxGbG9hdDMyeDQ+CiAgICB3aXRoIF9Vbm1vZGlmaWFibGVMaXN0TWl4aW48RmxvYXQzMng0LCBGbG9hdDMyeDRMaXN0LCBGbG9hdDMyeDRMaXN0PgogICAgaW1wbGVtZW50cyBGbG9hdDMyeDRMaXN0IHsKICBmaW5hbCBGbG9hdDMyeDRMaXN0IF9saXN0OwogIFVubW9kaWZpYWJsZUZsb2F0MzJ4NExpc3RWaWV3KEZsb2F0MzJ4NExpc3QgbGlzdCkgOiBfbGlzdCA9IGxpc3Q7CgogIEZsb2F0MzJ4NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgPT4gRmxvYXQzMng0TGlzdChsZW5ndGgpOwp9CgovKioKICogVmlldyBvZiBhIFtGbG9hdDY0eDJMaXN0XSB0aGF0IGRpc2FsbG93cyBtb2RpZmljYXRpb24uCiAqLwpjbGFzcyBVbm1vZGlmaWFibGVGbG9hdDY0eDJMaXN0VmlldyBleHRlbmRzIFVubW9kaWZpYWJsZUxpc3RCYXNlPEZsb2F0NjR4Mj4KICAgIHdpdGggX1VubW9kaWZpYWJsZUxpc3RNaXhpbjxGbG9hdDY0eDIsIEZsb2F0NjR4Mkxpc3QsIEZsb2F0NjR4Mkxpc3Q+CiAgICBpbXBsZW1lbnRzIEZsb2F0NjR4Mkxpc3QgewogIGZpbmFsIEZsb2F0NjR4Mkxpc3QgX2xpc3Q7CiAgVW5tb2RpZmlhYmxlRmxvYXQ2NHgyTGlzdFZpZXcoRmxvYXQ2NHgyTGlzdCBsaXN0KSA6IF9saXN0ID0gbGlzdDsKCiAgRmxvYXQ2NHgyTGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSA9PiBGbG9hdDY0eDJMaXN0KGxlbmd0aCk7Cn0KCi8qKgogKiBWaWV3IG9mIGEgW0Zsb2F0MzJMaXN0XSB0aGF0IGRpc2FsbG93cyBtb2RpZmljYXRpb24uCiAqLwpjbGFzcyBVbm1vZGlmaWFibGVGbG9hdDMyTGlzdFZpZXcgZXh0ZW5kcyBVbm1vZGlmaWFibGVMaXN0QmFzZTxkb3VibGU+CiAgICB3aXRoIF9Vbm1vZGlmaWFibGVMaXN0TWl4aW48ZG91YmxlLCBGbG9hdDMyTGlzdCwgRmxvYXQzMkxpc3Q+CiAgICBpbXBsZW1lbnRzIEZsb2F0MzJMaXN0IHsKICBmaW5hbCBGbG9hdDMyTGlzdCBfbGlzdDsKICBVbm1vZGlmaWFibGVGbG9hdDMyTGlzdFZpZXcoRmxvYXQzMkxpc3QgbGlzdCkgOiBfbGlzdCA9IGxpc3Q7CgogIEZsb2F0MzJMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpID0+IEZsb2F0MzJMaXN0KGxlbmd0aCk7Cn0KCi8qKgogKiBWaWV3IG9mIGEgW0Zsb2F0NjRMaXN0XSB0aGF0IGRpc2FsbG93cyBtb2RpZmljYXRpb24uCiAqLwpjbGFzcyBVbm1vZGlmaWFibGVGbG9hdDY0TGlzdFZpZXcgZXh0ZW5kcyBVbm1vZGlmaWFibGVMaXN0QmFzZTxkb3VibGU+CiAgICB3aXRoIF9Vbm1vZGlmaWFibGVMaXN0TWl4aW48ZG91YmxlLCBGbG9hdDY0TGlzdCwgRmxvYXQ2NExpc3Q+CiAgICBpbXBsZW1lbnRzIEZsb2F0NjRMaXN0IHsKICBmaW5hbCBGbG9hdDY0TGlzdCBfbGlzdDsKICBVbm1vZGlmaWFibGVGbG9hdDY0TGlzdFZpZXcoRmxvYXQ2NExpc3QgbGlzdCkgOiBfbGlzdCA9IGxpc3Q7CgogIEZsb2F0NjRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpID0+IEZsb2F0NjRMaXN0KGxlbmd0aCk7Cn0KgVkATk48AQ8BGQEEJwQ5GgE+ATABQE8BPk0BTiw8AUJRAUBPAUJRAUBPAUJRAUBPAUQnNwFEJzcBRCc3AUgpOQFIKTkBPk0CAQQlBDUYAToBPAE9AT4BPgFAKgFMFgFBKwFNFgFAKgFMFgFBKwFNFgFAKgFMFgFBKwFNFgFFLAFRFgFFLAFRFgE6ATABMAFJARggPAQCATwcDyEBIgEsAToBMAEwAUkBHQEkOiUrNRMEAgEENgRCOxsZPAE6AgEENQRBORoYOgE4AgEEPQRJSSIgSgFIAgEENwRDPRwaPgE8AgEENgRCOxsZPAE6AgEENwRDPRwaPgE8AgEENgRCOxsZPAE6AgEENwRDPRwaPgE8AgEENgRCOxsZPAE6AgEEOARIQx0bQAE+AgEEOgRMSR8dRAFCAgEEOgRMSR8dRAFCAgEEOARHQh0bQAE+AgEEOARHQh0bQAE+AgEsZGFydDp0eXBlZF9kYXRhL3VubW9kaWZpYWJsZV90eXBlZF9kYXRhLmRhcnRNb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvaHRtbC9kYXJ0aXVtL25hdGl2ZXdyYXBwZXJzLmRhcnSBjS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKbGlicmFyeSBuYXRpdmV3cmFwcGVyczsKCmNsYXNzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMSB7fQoKY2xhc3MgTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MyIHt9CgpjbGFzcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczMge30KCmNsYXNzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzNCB7fQoRAE5OPAEPARgBIgEiASIBIgETZGFydDpuYXRpdmV3cmFwcGVyczdvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9pby9pby5kYXJ0n2UvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8qKgogKiBGaWxlLCBzb2NrZXQsIEhUVFAsIGFuZCBvdGhlciBJL08gc3VwcG9ydCBmb3Igbm9uLXdlYiBhcHBsaWNhdGlvbnMuCiAqCiAqICoqSW1wb3J0YW50OioqIEJyb3dzZXItYmFzZWQgYXBwbGljYXRpb25zIGNhbid0IHVzZSB0aGlzIGxpYnJhcnkuCiAqIE9ubHkgc2VydmVycywgY29tbWFuZC1saW5lIHNjcmlwdHMsIGFuZCBGbHV0dGVyIG1vYmlsZSBhcHBzIGNhbiBpbXBvcnQKICogYW5kIHVzZSBkYXJ0OmlvLgogKgogKiBUaGlzIGxpYnJhcnkgYWxsb3dzIHlvdSB0byB3b3JrIHdpdGggZmlsZXMsIGRpcmVjdG9yaWVzLAogKiBzb2NrZXRzLCBwcm9jZXNzZXMsIEhUVFAgc2VydmVycyBhbmQgY2xpZW50cywgYW5kIG1vcmUuCiAqIE1hbnkgb3BlcmF0aW9ucyByZWxhdGVkIHRvIGlucHV0IGFuZCBvdXRwdXQgYXJlIGFzeW5jaHJvbm91cwogKiBhbmQgYXJlIGhhbmRsZWQgdXNpbmcgW0Z1dHVyZV1zIG9yIFtTdHJlYW1dcywgYm90aCBvZiB3aGljaAogKiBhcmUgZGVmaW5lZCBpbiB0aGUgW2RhcnQ6YXN5bmMKICogbGlicmFyeV0oLi4vZGFydC1hc3luYy9kYXJ0LWFzeW5jLWxpYnJhcnkuaHRtbCkuCiAqCiAqIFRvIHVzZSB0aGUgZGFydDppbyBsaWJyYXJ5IGluIHlvdXIgY29kZToKICoKICogICAgIGltcG9ydCAnZGFydDppbyc7CiAqCiAqIEZvciBhbiBpbnRyb2R1Y3Rpb24gdG8gSS9PIGluIERhcnQsIHNlZSB0aGUgW2RhcnQ6aW8gbGlicmFyeQogKiB0b3VyXShodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZGFydC12bS9pby1saWJyYXJ5LXRvdXIpLgogKgogKiAjIyBGaWxlLCBEaXJlY3RvcnksIGFuZCBMaW5rCiAqCiAqIEFuIGluc3RhbmNlIG9mIFtGaWxlXSwgW0RpcmVjdG9yeV0sIG9yIFtMaW5rXSByZXByZXNlbnRzIGEgZmlsZSwKICogZGlyZWN0b3J5LCBvciBsaW5rLCByZXNwZWN0aXZlbHksIGluIHRoZSBuYXRpdmUgZmlsZSBzeXN0ZW0uCiAqCiAqIFlvdSBjYW4gbWFuaXB1bGF0ZSB0aGUgZmlsZSBzeXN0ZW0gdGhyb3VnaCBvYmplY3RzIG9mIHRoZXNlIHR5cGVzLgogKiBGb3IgZXhhbXBsZSwgeW91IGNhbiByZW5hbWUgYSBmaWxlIG9yIGRpcmVjdG9yeToKICoKICogICAgIEZpbGUgbXlGaWxlID0gbmV3IEZpbGUoJ215RmlsZS50eHQnKTsKICogICAgIG15RmlsZS5yZW5hbWUoJ3lvdXJGaWxlLnR4dCcpLnRoZW4oKF8pID0+IHByaW50KCdmaWxlIHJlbmFtZWQnKSk7CiAqCiAqIE1hbnkgbWV0aG9kcyBwcm92aWRlZCBieSB0aGUgRmlsZSwgRGlyZWN0b3J5LCBhbmQgTGluayBjbGFzc2VzCiAqIHJ1biBhc3luY2hyb25vdXNseSBhbmQgcmV0dXJuIGEgRnV0dXJlLgogKgogKiAjIyBGaWxlU3lzdGVtRW50aXR5CiAqCiAqIEZpbGUsIERpcmVjdG9yeSwgYW5kIExpbmsgYWxsIGV4dGVuZCBbRmlsZVN5c3RlbUVudGl0eV0uCiAqIEluIGFkZGl0aW9uIHRvIGJlaW5nIHRoZSBzdXBlcmNsYXNzIGZvciB0aGVzZSBjbGFzc2VzLAogKiBGaWxlU3lzdGVtRW50aXR5IGhhcyBhIG51bWJlciBvZiBzdGF0aWMgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIHBhdGhzLgogKgogKiBUbyBnZXQgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXRoLAogKiB5b3UgY2FuIHVzZSB0aGUgRmlsZVN5c3RlbUVudGl0eSBzdGF0aWMgbWV0aG9kcwogKiBzdWNoIGFzICdpc0RpcmVjdG9yeScsICdpc0ZpbGUnLCBhbmQgJ2V4aXN0cycuCiAqIEJlY2F1c2UgZmlsZSBzeXN0ZW0gYWNjZXNzIGludm9sdmVzIEkvTywgdGhlc2UgbWV0aG9kcwogKiBhcmUgYXN5bmNocm9ub3VzIGFuZCByZXR1cm4gYSBGdXR1cmUuCiAqCiAqICAgICBGaWxlU3lzdGVtRW50aXR5LmlzRGlyZWN0b3J5KG15UGF0aCkudGhlbigoaXNEaXIpIHsKICogICAgICAgaWYgKGlzRGlyKSB7CiAqICAgICAgICAgcHJpbnQoJyRteVBhdGggaXMgYSBkaXJlY3RvcnknKTsKICogICAgICAgfSBlbHNlIHsKICogICAgICAgICBwcmludCgnJG15UGF0aCBpcyBub3QgYSBkaXJlY3RvcnknKTsKICogICAgICAgfQogKiAgICAgfSk7CiAqCiAqICMjIEh0dHBTZXJ2ZXIgYW5kIEh0dHBDbGllbnQKICoKICogVGhlIGNsYXNzZXMgW0h0dHBTZXJ2ZXJdIGFuZCBbSHR0cENsaWVudF0KICogcHJvdmlkZSBIVFRQIHNlcnZlciBhbmQgSFRUUCBjbGllbnQgZnVuY3Rpb25hbGl0eS4KICoKICogVGhlIFtIdHRwU2VydmVyXSBjbGFzcyBwcm92aWRlcyB0aGUgYmFzaWMgZnVuY3Rpb25hbGl0eSBmb3IKICogaW1wbGVtZW50aW5nIGFuIEhUVFAgc2VydmVyLgogKiBGb3Igc29tZSBoaWdoZXItbGV2ZWwgYnVpbGRpbmctYmxvY2tzLCB3ZSByZWNvbW1lbmQgdGhhdCB5b3UgdHJ5CiAqIHRoZSBbc2hlbGZdKGh0dHBzOi8vcHViLmRldi9wYWNrYWdlcy9zaGVsZikKICogcHViIHBhY2thZ2UsIHdoaWNoIGNvbnRhaW5zCiAqIGEgc2V0IG9mIGhpZ2gtbGV2ZWwgY2xhc3NlcyB0aGF0LCB0b2dldGhlciB3aXRoIHRoZSBbSHR0cFNlcnZlcl0gY2xhc3MKICogaW4gdGhpcyBsaWJyYXJ5LCBtYWtlIGl0IGVhc2llciB0byBpbXBsZW1lbnQgSFRUUCBzZXJ2ZXJzLgogKgogKiAjIyBQcm9jZXNzCiAqCiAqIFRoZSBbUHJvY2Vzc10gY2xhc3MgcHJvdmlkZXMgYSB3YXkgdG8gcnVuIGEgcHJvY2VzcyBvbgogKiB0aGUgbmF0aXZlIG1hY2hpbmUuCiAqIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGUgc3Bhd25zIGEgcHJvY2VzcyB0aGF0IHJlY3Vyc2l2ZWx5IGxpc3RzCiAqIHRoZSBmaWxlcyB1bmRlciBgd2ViYC4KICoKICogICAgIFByb2Nlc3Muc3RhcnQoJ2xzJywgWyctUicsICd3ZWInXSkudGhlbigocHJvY2VzcykgewogKiAgICAgICBzdGRvdXQuYWRkU3RyZWFtKHByb2Nlc3Muc3Rkb3V0KTsKICogICAgICAgc3RkZXJyLmFkZFN0cmVhbShwcm9jZXNzLnN0ZGVycik7CiAqICAgICAgIHByb2Nlc3MuZXhpdENvZGUudGhlbihwcmludCk7CiAqICAgICB9KTsKICoKICogVXNpbmcgYHN0YXJ0KClgIHJldHVybnMgYSBGdXR1cmUsIHdoaWNoIGNvbXBsZXRlcyB3aXRoIGEgW1Byb2Nlc3NdIG9iamVjdAogKiB3aGVuIHRoZSBwcm9jZXNzIGhhcyBzdGFydGVkLiBUaGlzIFtQcm9jZXNzXSBvYmplY3QgYWxsb3dzIHlvdSB0byBpbnRlcmFjdAogKiB3aXRoIHRoZSBwcm9jZXNzIHdoaWxlIGl0IGlzIHJ1bm5pbmcuIFVzaW5nIGBydW4oKWAgcmV0dXJucyBhIEZ1dHVyZSwgd2hpY2gKICogY29tcGxldGVzIHdpdGggYSBbUHJvY2Vzc1Jlc3VsdF0gb2JqZWN0IHdoZW4gdGhlIHNwYXduZWQgcHJvY2VzcyBoYXMKICogdGVybWluYXRlZC4gVGhpcyBbUHJvY2Vzc1Jlc3VsdF0gb2JqZWN0IGNvbGxlY3RzIHRoZSBvdXRwdXQgYW5kIGV4aXQgY29kZQogKiBmcm9tIHRoZSBwcm9jZXNzLgogKgogKiBXaGVuIHVzaW5nIGBzdGFydCgpYCwKICogeW91IG5lZWQgdG8gcmVhZCBhbGwgZGF0YSBjb21pbmcgb24gdGhlIHN0ZG91dCBhbmQgc3RkZXJyIHN0cmVhbXMgb3RoZXJ3aXNlCiAqIHRoZSBzeXN0ZW0gcmVzb3VyY2VzIHdpbGwgbm90IGJlIGZyZWVkLgogKgogKiAjIyBXZWJTb2NrZXQKICoKICogVGhlIFtXZWJTb2NrZXRdIGNsYXNzIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSB3ZWIgc29ja2V0IHByb3RvY29sLiBUaGlzCiAqIGFsbG93cyBmdWxsLWR1cGxleCBjb21tdW5pY2F0aW9ucyBiZXR3ZWVuIGNsaWVudCBhbmQgc2VydmVyIGFwcGxpY2F0aW9ucy4KICoKICogQSB3ZWIgc29ja2V0IHNlcnZlciB1c2VzIGEgbm9ybWFsIEhUVFAgc2VydmVyIGZvciBhY2NlcHRpbmcgd2ViIHNvY2tldAogKiBjb25uZWN0aW9ucy4gVGhlIGluaXRpYWwgaGFuZHNoYWtlIGlzIGEgSFRUUCByZXF1ZXN0IHdoaWNoIGlzIHRoZW4gdXBncmFkZWQgdG8gYQogKiB3ZWIgc29ja2V0IGNvbm5lY3Rpb24uCiAqIFRoZSBzZXJ2ZXIgdXBncmFkZXMgdGhlIHJlcXVlc3QgdXNpbmcgW1dlYlNvY2tldFRyYW5zZm9ybWVyXQogKiBhbmQgbGlzdGVucyBmb3IgdGhlIGRhdGEgb24gdGhlIHJldHVybmVkIHdlYiBzb2NrZXQuCiAqIEZvciBleGFtcGxlLCBoZXJlJ3MgYSBtaW5pIHNlcnZlciB0aGF0IGxpc3RlbnMgZm9yICd3cycgZGF0YQogKiBvbiBhIFdlYlNvY2tldDoKICoKICogICAgIHJ1blpvbmVkKCgpIGFzeW5jIHsKICogICAgICAgdmFyIHNlcnZlciA9IGF3YWl0IEh0dHBTZXJ2ZXIuYmluZCgnMTI3LjAuMC4xJywgNDA0MCk7CiAqICAgICAgIHNlcnZlci5saXN0ZW4oKEh0dHBSZXF1ZXN0IHJlcSkgYXN5bmMgewogKiAgICAgICAgIGlmIChyZXEudXJpLnBhdGggPT0gJy93cycpIHsKICogICAgICAgICAgIHZhciBzb2NrZXQgPSBhd2FpdCBXZWJTb2NrZXRUcmFuc2Zvcm1lci51cGdyYWRlKHJlcSk7CiAqICAgICAgICAgICBzb2NrZXQubGlzdGVuKGhhbmRsZU1zZyk7CiAqICAgICAgICAgfQogKiAgICAgICB9KTsKICogICAgIH0sIG9uRXJyb3I6IChlKSA9PiBwcmludCgiQW4gZXJyb3Igb2NjdXJyZWQuIikpOwogKgogKiBUaGUgY2xpZW50IGNvbm5lY3RzIHRvIHRoZSBXZWJTb2NrZXQgdXNpbmcgdGhlIGBjb25uZWN0KClgIG1ldGhvZAogKiBhbmQgYSBVUkkgdGhhdCB1c2VzIHRoZSBXZWIgU29ja2V0IHByb3RvY29sLgogKiBUaGUgY2xpZW50IGNhbiB3cml0ZSB0byB0aGUgV2ViU29ja2V0IHdpdGggdGhlIGBhZGQoKWAgbWV0aG9kLgogKiBGb3IgZXhhbXBsZSwKICoKICogICAgIHZhciBzb2NrZXQgPSBhd2FpdCBXZWJTb2NrZXQuY29ubmVjdCgnd3M6Ly8xMjcuMC4wLjE6NDA0MC93cycpOwogKiAgICAgc29ja2V0LmFkZCgnSGVsbG8sIFdvcmxkIScpOwogKgogKiBDaGVjayBvdXQgdGhlCiAqIFt3ZWJzb2NrZXRfc2FtcGxlXShodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL2RhcnQtc2FtcGxlcy90cmVlL21hc3Rlci9odG1sNS93ZWIvd2Vic29ja2V0cy9iYXNpY3MpCiAqIGFwcCwgd2hpY2ggdXNlcyBXZWJTb2NrZXRzIHRvIGNvbW11bmljYXRlIHdpdGggYSBzZXJ2ZXIuCiAqCiAqICMjIFNvY2tldCBhbmQgU2VydmVyU29ja2V0CiAqCiAqIENsaWVudHMgYW5kIHNlcnZlcnMgdXNlIFtTb2NrZXRdcyB0byBjb21tdW5pY2F0ZSB1c2luZyB0aGUgVENQIHByb3RvY29sLgogKiBVc2UgW1NlcnZlclNvY2tldF0gb24gdGhlIHNlcnZlciBzaWRlIGFuZCBbU29ja2V0XSBvbiB0aGUgY2xpZW50LgogKiBUaGUgc2VydmVyIGNyZWF0ZXMgYSBsaXN0ZW5pbmcgc29ja2V0IHVzaW5nIHRoZSBgYmluZCgpYCBtZXRob2QgYW5kCiAqIHRoZW4gbGlzdGVucyBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMgb24gdGhlIHNvY2tldC4gRm9yIGV4YW1wbGU6CiAqCiAqICAgICBTZXJ2ZXJTb2NrZXQuYmluZCgnMTI3LjAuMC4xJywgNDA0MSkKICogICAgICAgLnRoZW4oKHNlcnZlclNvY2tldCkgewogKiAgICAgICAgIHNlcnZlclNvY2tldC5saXN0ZW4oKHNvY2tldCkgewogKiAgICAgICAgICAgc29ja2V0LnRyYW5zZm9ybSh1dGY4LmRlY29kZXIpLmxpc3RlbihwcmludCk7CiAqICAgICAgICAgfSk7CiAqICAgICAgIH0pOwogKgogKiBBIGNsaWVudCBjb25uZWN0cyBhIFNvY2tldCB1c2luZyB0aGUgYGNvbm5lY3QoKWAgbWV0aG9kLAogKiB3aGljaCByZXR1cm5zIGEgRnV0dXJlLgogKiBVc2luZyBgd3JpdGUoKWAsIGB3cml0ZWxuKClgLCBvciBgd3JpdGVBbGwoKWAgYXJlIHRoZSBlYXNpZXN0IHdheXMgdG8KICogc2VuZCBkYXRhIG92ZXIgdGhlIHNvY2tldC4KICogRm9yIGV4YW1wbGU6CiAqCiAqICAgICBTb2NrZXQuY29ubmVjdCgnMTI3LjAuMC4xJywgNDA0MSkudGhlbigoc29ja2V0KSB7CiAqICAgICAgIHNvY2tldC53cml0ZSgnSGVsbG8sIFdvcmxkIScpOwogKiAgICAgfSk7CiAqCiAqIEJlc2lkZXMgW1NvY2tldF0gYW5kIFtTZXJ2ZXJTb2NrZXRdLCB0aGUgW1Jhd1NvY2tldF0gYW5kCiAqIFtSYXdTZXJ2ZXJTb2NrZXRdIGNsYXNzZXMgYXJlIGF2YWlsYWJsZSBmb3IgbG93ZXItbGV2ZWwgYWNjZXNzCiAqIHRvIGFzeW5jIHNvY2tldCBJTy4KICoKICogIyMgU3RhbmRhcmQgb3V0cHV0LCBlcnJvciwgYW5kIGlucHV0IHN0cmVhbXMKICoKICogVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIHRoZSBzdGFuZGFyZCBvdXRwdXQsIGVycm9yLCBhbmQgaW5wdXQKICogc3RyZWFtcywgbmFtZWQgJ3N0ZG91dCcsICdzdGRlcnInLCBhbmQgJ3N0ZGluJywgcmVzcGVjdGl2ZWx5LgogKgogKiBUaGUgc3Rkb3V0IGFuZCBzdGRlcnIgc3RyZWFtcyBhcmUgYm90aCBbSU9TaW5rXXMgYW5kIGhhdmUgdGhlIHNhbWUgc2V0CiAqIG9mIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMuCiAqCiAqIFRvIHdyaXRlIGEgc3RyaW5nIHRvICdzdGRvdXQnOgogKgogKiAgICAgc3Rkb3V0LndyaXRlbG4oJ0hlbGxvLCBXb3JsZCEnKTsKICoKICogVG8gd3JpdGUgYSBsaXN0IG9mIG9iamVjdHMgdG8gJ3N0ZGVycic6CiAqCiAqICAgICBzdGRlcnIud3JpdGVBbGwoWyAnVGhhdCAnLCAnaXMgJywgJ2FuICcsICdlcnJvci4nLCAnXG4nXSk7CiAqCiAqIFRoZSBzdGFuZGFyZCBpbnB1dCBzdHJlYW0gaXMgYSB0cnVlIFtTdHJlYW1dLCBzbyBpdCBpbmhlcml0cwogKiBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIGZyb20gdGhlIFN0cmVhbSBjbGFzcy4KICoKICogVG8gcmVhZCB0ZXh0IHN5bmNocm9ub3VzbHkgZnJvbSB0aGUgY29tbWFuZCBsaW5lCiAqICh0aGUgcHJvZ3JhbSBibG9ja3Mgd2FpdGluZyBmb3IgdXNlciB0byB0eXBlIGluZm9ybWF0aW9uKToKICoKICogICAgICBTdHJpbmcgaW5wdXRUZXh0ID0gc3RkaW4ucmVhZExpbmVTeW5jKCk7CiAqCiAqIHtAY2F0ZWdvcnkgVk19CiAqLwpsaWJyYXJ5IGRhcnQuaW87CgppbXBvcnQgJ2RhcnQ6YXN5bmMnOwppbXBvcnQgJ2RhcnQ6X2ludGVybmFsJyBoaWRlIFN5bWJvbDsKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nCiAgICBzaG93IEhhc2hNYXAsIEhhc2hTZXQsIFF1ZXVlLCBMaXN0UXVldWUsIE1hcEJhc2UsIFVubW9kaWZpYWJsZU1hcFZpZXc7CmltcG9ydCAnZGFydDpjb252ZXJ0JzsKaW1wb3J0ICdkYXJ0OmRldmVsb3BlcicgaGlkZSBsb2c7CmltcG9ydCAnZGFydDpfaHR0cCcgc2hvdyBIdHRwQ2xpZW50OwppbXBvcnQgJ2RhcnQ6aXNvbGF0ZSc7CmltcG9ydCAnZGFydDptYXRoJzsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwoKZXhwb3J0ICdkYXJ0Ol9odHRwJzsKZXhwb3J0ICdkYXJ0Ol9pbnRlcm5hbCcgc2hvdyBIdHRwU3RhdHVzOwoKcGFydCAnYnl0ZXNfYnVpbGRlci5kYXJ0JzsKcGFydCAnY29tbW9uLmRhcnQnOwpwYXJ0ICdkYXRhX3RyYW5zZm9ybWVyLmRhcnQnOwpwYXJ0ICdkaXJlY3RvcnkuZGFydCc7CnBhcnQgJ2RpcmVjdG9yeV9pbXBsLmRhcnQnOwpwYXJ0ICdlbWJlZGRlcl9jb25maWcuZGFydCc7CnBhcnQgJ2V2ZW50aGFuZGxlci5kYXJ0JzsKcGFydCAnZmlsZS5kYXJ0JzsKcGFydCAnZmlsZV9pbXBsLmRhcnQnOwpwYXJ0ICdmaWxlX3N5c3RlbV9lbnRpdHkuZGFydCc7CnBhcnQgJ2lvX3Jlc291cmNlX2luZm8uZGFydCc7CnBhcnQgJ2lvX3NpbmsuZGFydCc7CnBhcnQgJ2lvX3NlcnZpY2UuZGFydCc7CnBhcnQgJ2xpbmsuZGFydCc7CnBhcnQgJ25hbWVzcGFjZV9pbXBsLmRhcnQnOwpwYXJ0ICduZXR3b3JrX3Byb2ZpbGluZy5kYXJ0JzsKcGFydCAnb3ZlcnJpZGVzLmRhcnQnOwpwYXJ0ICdwbGF0Zm9ybS5kYXJ0JzsKcGFydCAncGxhdGZvcm1faW1wbC5kYXJ0JzsKcGFydCAncHJvY2Vzcy5kYXJ0JzsKcGFydCAnc2VjdXJlX3NlcnZlcl9zb2NrZXQuZGFydCc7CnBhcnQgJ3NlY3VyZV9zb2NrZXQuZGFydCc7CnBhcnQgJ3NlY3VyaXR5X2NvbnRleHQuZGFydCc7CnBhcnQgJ3NlcnZpY2Vfb2JqZWN0LmRhcnQnOwpwYXJ0ICdzb2NrZXQuZGFydCc7CnBhcnQgJ3N0ZGlvLmRhcnQnOwpwYXJ0ICdzdHJpbmdfdHJhbnNmb3JtZXIuZGFydCc7CnBhcnQgJ3N5bmNfc29ja2V0LmRhcnQnOwqA6QBOTjwBDwEERwNFShQDPDtAPyI0AywDGQNAPAMgA0RAA0Y0Ay1JA0IrAxcDPDpLAyQzMjopAzsWLBIwCwsDIAMtNgM/IEQvH0o+Aw4DOhdLGgM7KysnCwNNTk9ITRUDGU8rAxADTE0DSlQaQDhAEwMbQDEoQycNDTgDRTBCEANHJAMRaTwDHgNMRUdFAywgKjsPDQM8G0keEAM5KAsDPEIXAzADP0EDSh4DIgMoAysDQgNAMQM0PgMxAxIEEQEVJRlLFyIlFxQaARUpARsUHhccHRoSFyAeFRgSHB8XFhsVIhseHBQTIBkBB2RhcnQ6aW9Sb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvX2ludGVybmFsL3ZtL2Jpbi9kaXJlY3RvcnlfcGF0Y2guZGFydIk+Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgovLyBwYXJ0IG9mICJjb21tb25fcGF0Y2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgX0RpcmVjdG9yeSB7CiAgQHBhdGNoCiAgc3RhdGljIF9jdXJyZW50KF9OYW1lc3BhY2UgbmFtZXNwYWNlKSBuYXRpdmUgIkRpcmVjdG9yeV9DdXJyZW50IjsKICBAcGF0Y2gKICBzdGF0aWMgX3NldEN1cnJlbnQoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKQogICAgICBuYXRpdmUgIkRpcmVjdG9yeV9TZXRDdXJyZW50IjsKICBAcGF0Y2gKICBzdGF0aWMgX2NyZWF0ZVRlbXAoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKQogICAgICBuYXRpdmUgIkRpcmVjdG9yeV9DcmVhdGVUZW1wIjsKICBAcGF0Y2gKICBzdGF0aWMgU3RyaW5nIF9zeXN0ZW1UZW1wKF9OYW1lc3BhY2UgbmFtZXNwYWNlKSBuYXRpdmUgIkRpcmVjdG9yeV9TeXN0ZW1UZW1wIjsKICBAcGF0Y2gKICBzdGF0aWMgX2V4aXN0cyhfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpCiAgICAgIG5hdGl2ZSAiRGlyZWN0b3J5X0V4aXN0cyI7CiAgQHBhdGNoCiAgc3RhdGljIF9jcmVhdGUoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKQogICAgICBuYXRpdmUgIkRpcmVjdG9yeV9DcmVhdGUiOwogIEBwYXRjaAogIHN0YXRpYyBfZGVsZXRlTmF0aXZlKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCwgYm9vbCByZWN1cnNpdmUpCiAgICAgIG5hdGl2ZSAiRGlyZWN0b3J5X0RlbGV0ZSI7CiAgQHBhdGNoCiAgc3RhdGljIF9yZW5hbWUoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoLCBTdHJpbmcgbmV3UGF0aCkKICAgICAgbmF0aXZlICJEaXJlY3RvcnlfUmVuYW1lIjsKICBAcGF0Y2gKICBzdGF0aWMgdm9pZCBfZmlsbFdpdGhEaXJlY3RvcnlMaXN0aW5nKAogICAgICBfTmFtZXNwYWNlIG5hbWVzcGFjZSwKICAgICAgTGlzdDxGaWxlU3lzdGVtRW50aXR5PiBsaXN0LAogICAgICBVaW50OExpc3QgcmF3UGF0aCwKICAgICAgYm9vbCByZWN1cnNpdmUsCiAgICAgIGJvb2wgZm9sbG93TGlua3MpIG5hdGl2ZSAiRGlyZWN0b3J5X0ZpbGxXaXRoRGlyZWN0b3J5TGlzdGluZyI7Cn0KCkBwYXRjaApjbGFzcyBfQXN5bmNEaXJlY3RvcnlMaXN0ZXJPcHMgewogIEBwYXRjaAogIGZhY3RvcnkgX0FzeW5jRGlyZWN0b3J5TGlzdGVyT3BzKGludCBwb2ludGVyKSA9PgogICAgICBuZXcgX0FzeW5jRGlyZWN0b3J5TGlzdGVyT3BzSW1wbChwb2ludGVyKTsKfQoKY2xhc3MgX0FzeW5jRGlyZWN0b3J5TGlzdGVyT3BzSW1wbCBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMQogICAgaW1wbGVtZW50cyBfQXN5bmNEaXJlY3RvcnlMaXN0ZXJPcHMgewogIF9Bc3luY0RpcmVjdG9yeUxpc3Rlck9wc0ltcGwuXygpOwoKICBmYWN0b3J5IF9Bc3luY0RpcmVjdG9yeUxpc3Rlck9wc0ltcGwoaW50IHBvaW50ZXIpID0+CiAgICAgIG5ldyBfQXN5bmNEaXJlY3RvcnlMaXN0ZXJPcHNJbXBsLl8oKS4uX3NldFBvaW50ZXIocG9pbnRlcik7CgogIHZvaWQgX3NldFBvaW50ZXIoaW50IHBvaW50ZXIpCiAgICAgIG5hdGl2ZSAiRGlyZWN0b3J5X1NldEFzeW5jRGlyZWN0b3J5TGlzdGVyUG9pbnRlciI7CiAgaW50IGdldFBvaW50ZXIoKSBuYXRpdmUgIkRpcmVjdG9yeV9HZXRBc3luY0RpcmVjdG9yeUxpc3RlclBvaW50ZXIiOwp9CgovLyBDb3JlbGliICdVcmkuYmFzZScgaW1wbGVtZW50YXRpb24uCi8vIFVyaS5iYXNlIGlzIHN1c2NlcHRpYmxlIHRvIGNoYW5nZXMgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuClVyaSBfdXJpQmFzZUNsb3N1cmUoKSB7CiAgdmFyIHJlc3VsdCA9IF9EaXJlY3RvcnkuX2N1cnJlbnQoX05hbWVzcGFjZS5fbmFtZXNwYWNlKTsKICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKAogICAgICAgICJHZXR0aW5nIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgZmFpbGVkIiwgIiIsIHJlc3VsdCk7CiAgfQogIHJldHVybiBuZXcgVXJpLmRpcmVjdG9yeShyZXN1bHQpOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKX2dldFVyaUJhc2VDbG9zdXJlKCkgPT4gX3VyaUJhc2VDbG9zdXJlOwpLAE5OPAEPASABBxMJRAk+JQk+JQlRCTohCTohCVAhCUohCSkcIxkWRQIBByEJMzECAUQqJAE3QgEgOUYCASZIGDsbI0EEJAIBIikBImRhcnQ6aW8tcGF0Y2gvZGlyZWN0b3J5X3BhdGNoLmRhcnRNb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvX2ludGVybmFsL3ZtL2Jpbi9maWxlX3BhdGNoLmRhcnS4JS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKLy8gcGFydCBvZiAiY29tbW9uX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIF9GaWxlIHsKICBAcGF0Y2gKICBzdGF0aWMgX2V4aXN0cyhfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpIG5hdGl2ZSAiRmlsZV9FeGlzdHMiOwogIEBwYXRjaAogIHN0YXRpYyBfY3JlYXRlKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCkgbmF0aXZlICJGaWxlX0NyZWF0ZSI7CiAgQHBhdGNoCiAgc3RhdGljIF9jcmVhdGVMaW5rKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCwgU3RyaW5nIHRhcmdldCkKICAgICAgbmF0aXZlICJGaWxlX0NyZWF0ZUxpbmsiOwogIEBwYXRjaAogIHN0YXRpYyBfbGlua1RhcmdldChfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpCiAgICAgIG5hdGl2ZSAiRmlsZV9MaW5rVGFyZ2V0IjsKICBAcGF0Y2gKICBzdGF0aWMgX2RlbGV0ZU5hdGl2ZShfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpCiAgICAgIG5hdGl2ZSAiRmlsZV9EZWxldGUiOwogIEBwYXRjaAogIHN0YXRpYyBfZGVsZXRlTGlua05hdGl2ZShfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpCiAgICAgIG5hdGl2ZSAiRmlsZV9EZWxldGVMaW5rIjsKICBAcGF0Y2gKICBzdGF0aWMgX3JlbmFtZShfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IG9sZFBhdGgsIFN0cmluZyBuZXdQYXRoKQogICAgICBuYXRpdmUgIkZpbGVfUmVuYW1lIjsKICBAcGF0Y2gKICBzdGF0aWMgX3JlbmFtZUxpbmsoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCBvbGRQYXRoLCBTdHJpbmcgbmV3UGF0aCkKICAgICAgbmF0aXZlICJGaWxlX1JlbmFtZUxpbmsiOwogIEBwYXRjaAogIHN0YXRpYyBfY29weShfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IG9sZFBhdGgsIFN0cmluZyBuZXdQYXRoKQogICAgICBuYXRpdmUgIkZpbGVfQ29weSI7CiAgQHBhdGNoCiAgc3RhdGljIF9sZW5ndGhGcm9tUGF0aChfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpCiAgICAgIG5hdGl2ZSAiRmlsZV9MZW5ndGhGcm9tUGF0aCI7CiAgQHBhdGNoCiAgc3RhdGljIF9sYXN0TW9kaWZpZWQoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKQogICAgICBuYXRpdmUgIkZpbGVfTGFzdE1vZGlmaWVkIjsKICBAcGF0Y2gKICBzdGF0aWMgX3NldExhc3RNb2RpZmllZChfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgsIGludCBtaWxsaXMpCiAgICAgIG5hdGl2ZSAiRmlsZV9TZXRMYXN0TW9kaWZpZWQiOwogIEBwYXRjaAogIHN0YXRpYyBfbGFzdEFjY2Vzc2VkKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCkKICAgICAgbmF0aXZlICJGaWxlX0xhc3RBY2Nlc3NlZCI7CiAgQHBhdGNoCiAgc3RhdGljIF9zZXRMYXN0QWNjZXNzZWQoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoLCBpbnQgbWlsbGlzKQogICAgICBuYXRpdmUgIkZpbGVfU2V0TGFzdEFjY2Vzc2VkIjsKICBAcGF0Y2gKICBzdGF0aWMgX29wZW4oX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoLCBpbnQgbW9kZSkKICAgICAgbmF0aXZlICJGaWxlX09wZW4iOwogIEBwYXRjaAogIHN0YXRpYyBpbnQgX29wZW5TdGRpbyhpbnQgZmQpIG5hdGl2ZSAiRmlsZV9PcGVuU3RkaW8iOwp9CgpAcGF0Y2gKY2xhc3MgX1JhbmRvbUFjY2Vzc0ZpbGVPcHMgewogIEBwYXRjaAogIGZhY3RvcnkgX1JhbmRvbUFjY2Vzc0ZpbGVPcHMoaW50IHBvaW50ZXIpID0+CiAgICAgIG5ldyBfUmFuZG9tQWNjZXNzRmlsZU9wc0ltcGwocG9pbnRlcik7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1JhbmRvbUFjY2Vzc0ZpbGVPcHNJbXBsIGV4dGVuZHMgTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MxCiAgICBpbXBsZW1lbnRzIF9SYW5kb21BY2Nlc3NGaWxlT3BzIHsKICBfUmFuZG9tQWNjZXNzRmlsZU9wc0ltcGwuXygpOwoKICBmYWN0b3J5IF9SYW5kb21BY2Nlc3NGaWxlT3BzSW1wbChpbnQgcG9pbnRlcikgPT4KICAgICAgbmV3IF9SYW5kb21BY2Nlc3NGaWxlT3BzSW1wbC5fKCkuLl9zZXRQb2ludGVyKHBvaW50ZXIpOwoKICB2b2lkIF9zZXRQb2ludGVyKGludCBwb2ludGVyKSBuYXRpdmUgIkZpbGVfU2V0UG9pbnRlciI7CgogIGludCBnZXRQb2ludGVyKCkgbmF0aXZlICJGaWxlX0dldFBvaW50ZXIiOwogIGludCBjbG9zZSgpIG5hdGl2ZSAiRmlsZV9DbG9zZSI7CiAgcmVhZEJ5dGUoKSBuYXRpdmUgIkZpbGVfUmVhZEJ5dGUiOwogIHJlYWQoaW50IGJ5dGVzKSBuYXRpdmUgIkZpbGVfUmVhZCI7CiAgcmVhZEludG8oTGlzdDxpbnQ+IGJ1ZmZlciwgaW50IHN0YXJ0LCBpbnQgZW5kKSBuYXRpdmUgIkZpbGVfUmVhZEludG8iOwogIHdyaXRlQnl0ZShpbnQgdmFsdWUpIG5hdGl2ZSAiRmlsZV9Xcml0ZUJ5dGUiOwogIHdyaXRlRnJvbShMaXN0PGludD4gYnVmZmVyLCBpbnQgc3RhcnQsIGludCBlbmQpIG5hdGl2ZSAiRmlsZV9Xcml0ZUZyb20iOwogIHBvc2l0aW9uKCkgbmF0aXZlICJGaWxlX1Bvc2l0aW9uIjsKICBzZXRQb3NpdGlvbihpbnQgcG9zaXRpb24pIG5hdGl2ZSAiRmlsZV9TZXRQb3NpdGlvbiI7CiAgdHJ1bmNhdGUoaW50IGxlbmd0aCkgbmF0aXZlICJGaWxlX1RydW5jYXRlIjsKICBsZW5ndGgoKSBuYXRpdmUgIkZpbGVfTGVuZ3RoIjsKICBmbHVzaCgpIG5hdGl2ZSAiRmlsZV9GbHVzaCI7CiAgbG9jayhpbnQgbG9jaywgaW50IHN0YXJ0LCBpbnQgZW5kKSBuYXRpdmUgIkZpbGVfTG9jayI7Cn0KCmNsYXNzIF9XYXRjaGVyUGF0aCB7CiAgZmluYWwgaW50IHBhdGhJZDsKICBmaW5hbCBTdHJpbmcgcGF0aDsKICBmaW5hbCBpbnQgZXZlbnRzOwogIGludCBjb3VudCA9IDA7CiAgX1dhdGNoZXJQYXRoKHRoaXMucGF0aElkLCB0aGlzLnBhdGgsIHRoaXMuZXZlbnRzKTsKfQoKQHBhdGNoCmNsYXNzIF9GaWxlU3lzdGVtV2F0Y2hlciB7CiAgdm9pZCBfcGF0aFdhdGNoZWRFbmQoKTsKCiAgc3RhdGljIGludCBfaWQ7CiAgc3RhdGljIGZpbmFsIE1hcDxpbnQsIF9XYXRjaGVyUGF0aD4gX2lkTWFwID0ge307CgogIGZpbmFsIFN0cmluZyBfcGF0aDsKICBmaW5hbCBpbnQgX2V2ZW50czsKICBmaW5hbCBib29sIF9yZWN1cnNpdmU7CgogIF9XYXRjaGVyUGF0aCBfd2F0Y2hlclBhdGg7CgogIFN0cmVhbUNvbnRyb2xsZXI8RmlsZVN5c3RlbUV2ZW50PiBfYnJvYWRjYXN0Q29udHJvbGxlcjsKCiAgQHBhdGNoCiAgc3RhdGljIFN0cmVhbTxGaWxlU3lzdGVtRXZlbnQ+IF93YXRjaCgKICAgICAgU3RyaW5nIHBhdGgsIGludCBldmVudHMsIGJvb2wgcmVjdXJzaXZlKSB7CiAgICBpZiAoUGxhdGZvcm0uaXNMaW51eCkgewogICAgICByZXR1cm4gbmV3IF9Jbm90aWZ5RmlsZVN5c3RlbVdhdGNoZXIocGF0aCwgZXZlbnRzLCByZWN1cnNpdmUpLl9zdHJlYW07CiAgICB9CiAgICBpZiAoUGxhdGZvcm0uaXNXaW5kb3dzKSB7CiAgICAgIHJldHVybiBuZXcgX1dpbjMyRmlsZVN5c3RlbVdhdGNoZXIocGF0aCwgZXZlbnRzLCByZWN1cnNpdmUpLl9zdHJlYW07CiAgICB9CiAgICBpZiAoUGxhdGZvcm0uaXNNYWNPUykgewogICAgICByZXR1cm4gbmV3IF9GU0V2ZW50U3RyZWFtRmlsZVN5c3RlbVdhdGNoZXIocGF0aCwgZXZlbnRzLCByZWN1cnNpdmUpCiAgICAgICAgICAuX3N0cmVhbTsKICAgIH0KICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKAogICAgICAgICJGaWxlIHN5c3RlbSB3YXRjaGluZyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0iKTsKICB9CgogIF9GaWxlU3lzdGVtV2F0Y2hlci5fKHRoaXMuX3BhdGgsIHRoaXMuX2V2ZW50cywgdGhpcy5fcmVjdXJzaXZlKSB7CiAgICBpZiAoIWlzU3VwcG9ydGVkKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKAogICAgICAgICAgIkZpbGUgc3lzdGVtIHdhdGNoaW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIsIF9wYXRoKTsKICAgIH0KICAgIF9icm9hZGNhc3RDb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8RmlsZVN5c3RlbUV2ZW50Pi5icm9hZGNhc3QoCiAgICAgICAgb25MaXN0ZW46IF9saXN0ZW4sIG9uQ2FuY2VsOiBfY2FuY2VsKTsKICB9CgogIFN0cmVhbTxGaWxlU3lzdGVtRXZlbnQ+IGdldCBfc3RyZWFtID0+IF9icm9hZGNhc3RDb250cm9sbGVyLnN0cmVhbTsKCiAgdm9pZCBfbGlzdGVuKCkgewogICAgaWYgKF9pZCA9PSBudWxsKSB7CiAgICAgIHRyeSB7CiAgICAgICAgX2lkID0gX2luaXRXYXRjaGVyKCk7CiAgICAgICAgX25ld1dhdGNoZXIoKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIF9icm9hZGNhc3RDb250cm9sbGVyLmFkZEVycm9yKG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKAogICAgICAgICAgICAiRmFpbGVkIHRvIGluaXRpYWxpemUgZmlsZSBzeXN0ZW0gZW50aXR5IHdhdGNoZXIiLCBudWxsLCBlKSk7CiAgICAgICAgX2Jyb2FkY2FzdENvbnRyb2xsZXIuY2xvc2UoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIHZhciBwYXRoSWQ7CiAgICB0cnkgewogICAgICBwYXRoSWQgPQogICAgICAgICAgX3dhdGNoUGF0aChfaWQsIF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3BhdGgsIF9ldmVudHMsIF9yZWN1cnNpdmUpOwogICAgfSBjYXRjaCAoZSkgewogICAgICBfYnJvYWRjYXN0Q29udHJvbGxlcgogICAgICAgICAgLmFkZEVycm9yKG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJGYWlsZWQgdG8gd2F0Y2ggcGF0aCIsIF9wYXRoLCBlKSk7CiAgICAgIF9icm9hZGNhc3RDb250cm9sbGVyLmNsb3NlKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghX2lkTWFwLmNvbnRhaW5zS2V5KHBhdGhJZCkpIHsKICAgICAgX2lkTWFwW3BhdGhJZF0gPSBuZXcgX1dhdGNoZXJQYXRoKHBhdGhJZCwgX3BhdGgsIF9ldmVudHMpOwogICAgfQogICAgX3dhdGNoZXJQYXRoID0gX2lkTWFwW3BhdGhJZF07CiAgICBfd2F0Y2hlclBhdGguY291bnQrKzsKICAgIF9wYXRoV2F0Y2hlZCgpLnBpcGUoX2Jyb2FkY2FzdENvbnRyb2xsZXIpOwogIH0KCiAgdm9pZCBfY2FuY2VsKCkgewogICAgaWYgKF93YXRjaGVyUGF0aCAhPSBudWxsKSB7CiAgICAgIGFzc2VydChfd2F0Y2hlclBhdGguY291bnQgPiAwKTsKICAgICAgX3dhdGNoZXJQYXRoLmNvdW50LS07CiAgICAgIGlmIChfd2F0Y2hlclBhdGguY291bnQgPT0gMCkgewogICAgICAgIGlmIChfaWRNYXAuY29udGFpbnNLZXkoX3dhdGNoZXJQYXRoLnBhdGhJZCkpIHsKICAgICAgICAgIF91bndhdGNoUGF0aChfaWQsIF93YXRjaGVyUGF0aC5wYXRoSWQpOwogICAgICAgICAgX3BhdGhXYXRjaGVkRW5kKCk7CiAgICAgICAgICBfaWRNYXAucmVtb3ZlKF93YXRjaGVyUGF0aC5wYXRoSWQpOwogICAgICAgIH0KICAgICAgfQogICAgICBfd2F0Y2hlclBhdGggPSBudWxsOwogICAgfQogICAgaWYgKF9pZE1hcC5pc0VtcHR5ICYmIF9pZCAhPSBudWxsKSB7CiAgICAgIF9jbG9zZVdhdGNoZXIoX2lkKTsKICAgICAgX2RvbmVXYXRjaGVyKCk7CiAgICAgIF9pZCA9IG51bGw7CiAgICB9CiAgfQoKICAvLyBDYWxsZWQgd2hlbiAoYW5kIGFmdGVyKSBhIG5ldyB3YXRjaGVyIGluc3RhbmNlIGlzIGNyZWF0ZWQgYW5kIGF2YWlsYWJsZS4KICB2b2lkIF9uZXdXYXRjaGVyKCkge30KICAvLyBDYWxsZWQgd2hlbiBhIHdhdGNoZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KICB2b2lkIF9kb25lV2F0Y2hlcigpIHt9CiAgLy8gQ2FsbGVkIHdoZW4gYSBuZXcgcGF0aCBpcyBiZWluZyB3YXRjaGVkLgogIFN0cmVhbSBfcGF0aFdhdGNoZWQoKSB7fQogIC8vIENhbGxlZCB3aGVuIGEgcGF0aCBpcyBubyBsb25nZXIgYmVpbmcgd2F0Y2hlZC4KICB2b2lkIF9kb25lUGF0aFdhdGNoZWQoKSB7fQoKICBzdGF0aWMgX1dhdGNoZXJQYXRoIF9wYXRoRnJvbVBhdGhJZChpbnQgcGF0aElkKSB7CiAgICByZXR1cm4gX2lkTWFwW3BhdGhJZF07CiAgfQoKICBzdGF0aWMgU3RyZWFtIF9saXN0ZW5PblNvY2tldChpbnQgc29ja2V0SWQsIGludCBpZCwgaW50IHBhdGhJZCkgewogICAgdmFyIG5hdGl2ZSA9IG5ldyBfTmF0aXZlU29ja2V0LndhdGNoKHNvY2tldElkKTsKICAgIHZhciBzb2NrZXQgPSBuZXcgX1Jhd1NvY2tldChuYXRpdmUpOwogICAgcmV0dXJuIHNvY2tldC5leHBhbmQoKGV2ZW50KSB7CiAgICAgIHZhciBzdG9wcyA9IFtdOwogICAgICB2YXIgZXZlbnRzID0gW107CiAgICAgIHZhciBwYWlyID0ge307CiAgICAgIGlmIChldmVudCA9PSBSYXdTb2NrZXRFdmVudC5yZWFkKSB7CiAgICAgICAgU3RyaW5nIGdldFBhdGgoZXZlbnQpIHsKICAgICAgICAgIHZhciBwYXRoID0gX3BhdGhGcm9tUGF0aElkKGV2ZW50WzRdKS5wYXRoOwogICAgICAgICAgaWYgKGV2ZW50WzJdICE9IG51bGwgJiYgZXZlbnRbMl0uaXNOb3RFbXB0eSkgewogICAgICAgICAgICBwYXRoICs9IFBsYXRmb3JtLnBhdGhTZXBhcmF0b3I7CiAgICAgICAgICAgIHBhdGggKz0gZXZlbnRbMl07CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gcGF0aDsKICAgICAgICB9CgogICAgICAgIGJvb2wgZ2V0SXNEaXIoZXZlbnQpIHsKICAgICAgICAgIGlmIChQbGF0Zm9ybS5pc1dpbmRvd3MpIHsKICAgICAgICAgICAgLy8gV2luZG93cyBkb2VzIG5vdCBnZXQgJ2lzRGlyJyBhcyBwYXJ0IG9mIHRoZSBldmVudC4KICAgICAgICAgICAgLy8gTGlua3Mgc2hvdWxkIGFsc28gYmUgc2tpcHBlZC4KICAgICAgICAgICAgcmV0dXJuIEZpbGVTeXN0ZW1FbnRpdHkuaXNEaXJlY3RvcnlTeW5jKGdldFBhdGgoZXZlbnQpKSAmJgogICAgICAgICAgICAgICAgIUZpbGVTeXN0ZW1FbnRpdHkuaXNMaW5rU3luYyhnZXRQYXRoKGV2ZW50KSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gKGV2ZW50WzBdICYgRmlsZVN5c3RlbUV2ZW50Ll9pc0RpcikgIT0gMDsKICAgICAgICB9CgogICAgICAgIHZvaWQgYWRkKGlkLCBldmVudCkgewogICAgICAgICAgaWYgKChldmVudC50eXBlICYgX3BhdGhGcm9tUGF0aElkKGlkKS5ldmVudHMpID09IDApIHJldHVybjsKICAgICAgICAgIGV2ZW50cy5hZGQoW2lkLCBldmVudF0pOwogICAgICAgIH0KCiAgICAgICAgdm9pZCByZXdyaXRlTW92ZShldmVudCwgaXNEaXIpIHsKICAgICAgICAgIGlmIChldmVudFszXSkgewogICAgICAgICAgICBhZGQoZXZlbnRbNF0sIG5ldyBGaWxlU3lzdGVtQ3JlYXRlRXZlbnQuXyhnZXRQYXRoKGV2ZW50KSwgaXNEaXIpKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFkZChldmVudFs0XSwgbmV3IEZpbGVTeXN0ZW1EZWxldGVFdmVudC5fKGdldFBhdGgoZXZlbnQpLCBpc0RpcikpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaW50IGV2ZW50Q291bnQ7CiAgICAgICAgZG8gewogICAgICAgICAgZXZlbnRDb3VudCA9IDA7CiAgICAgICAgICBmb3IgKHZhciBldmVudCBpbiBfcmVhZEV2ZW50cyhpZCwgcGF0aElkKSkgewogICAgICAgICAgICBpZiAoZXZlbnQgPT0gbnVsbCkgY29udGludWU7CiAgICAgICAgICAgIGV2ZW50Q291bnQrKzsKICAgICAgICAgICAgaW50IHBhdGhJZCA9IGV2ZW50WzRdOwogICAgICAgICAgICBpZiAoIV9pZE1hcC5jb250YWluc0tleShwYXRoSWQpKSB7CiAgICAgICAgICAgICAgLy8gUGF0aCBpcyBubyBsb25nZXIgYmVpbmcgd2F0aGVkLgogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJvb2wgaXNEaXIgPSBnZXRJc0RpcihldmVudCk7CiAgICAgICAgICAgIHZhciBwYXRoID0gZ2V0UGF0aChldmVudCk7CiAgICAgICAgICAgIGlmICgoZXZlbnRbMF0gJiBGaWxlU3lzdGVtRXZlbnQuY3JlYXRlKSAhPSAwKSB7CiAgICAgICAgICAgICAgYWRkKGV2ZW50WzRdLCBuZXcgRmlsZVN5c3RlbUNyZWF0ZUV2ZW50Ll8ocGF0aCwgaXNEaXIpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoKGV2ZW50WzBdICYgRmlsZVN5c3RlbUV2ZW50Lm1vZGlmeSkgIT0gMCkgewogICAgICAgICAgICAgIGFkZChldmVudFs0XSwgbmV3IEZpbGVTeXN0ZW1Nb2RpZnlFdmVudC5fKHBhdGgsIGlzRGlyLCB0cnVlKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKChldmVudFswXSAmIEZpbGVTeXN0ZW1FdmVudC5fbW9kaWZ5QXR0cmlidXRlcykgIT0gMCkgewogICAgICAgICAgICAgIGFkZChldmVudFs0XSwgbmV3IEZpbGVTeXN0ZW1Nb2RpZnlFdmVudC5fKHBhdGgsIGlzRGlyLCBmYWxzZSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgoZXZlbnRbMF0gJiBGaWxlU3lzdGVtRXZlbnQubW92ZSkgIT0gMCkgewogICAgICAgICAgICAgIGludCBsaW5rID0gZXZlbnRbMV07CiAgICAgICAgICAgICAgaWYgKGxpbmsgPiAwKSB7CiAgICAgICAgICAgICAgICBwYWlyLnB1dElmQWJzZW50KHBhdGhJZCwgKCkgPT4ge30pOwogICAgICAgICAgICAgICAgaWYgKHBhaXJbcGF0aElkXS5jb250YWluc0tleShsaW5rKSkgewogICAgICAgICAgICAgICAgICBhZGQoCiAgICAgICAgICAgICAgICAgICAgICBldmVudFs0XSwKICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWxlU3lzdGVtTW92ZUV2ZW50Ll8oCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UGF0aChwYWlyW3BhdGhJZF1bbGlua10pLCBpc0RpciwgcGF0aCkpOwogICAgICAgICAgICAgICAgICBwYWlyW3BhdGhJZF0ucmVtb3ZlKGxpbmspOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgcGFpcltwYXRoSWRdW2xpbmtdID0gZXZlbnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJld3JpdGVNb3ZlKGV2ZW50LCBpc0Rpcik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgoZXZlbnRbMF0gJiBGaWxlU3lzdGVtRXZlbnQuZGVsZXRlKSAhPSAwKSB7CiAgICAgICAgICAgICAgYWRkKGV2ZW50WzRdLCBuZXcgRmlsZVN5c3RlbURlbGV0ZUV2ZW50Ll8ocGF0aCwgaXNEaXIpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoKGV2ZW50WzBdICYgRmlsZVN5c3RlbUV2ZW50Ll9kZWxldGVTZWxmKSAhPSAwKSB7CiAgICAgICAgICAgICAgYWRkKGV2ZW50WzRdLCBuZXcgRmlsZVN5c3RlbURlbGV0ZUV2ZW50Ll8ocGF0aCwgaXNEaXIpKTsKICAgICAgICAgICAgICAvLyBTaWduYWwgZG9uZSBldmVudC4KICAgICAgICAgICAgICBzdG9wcy5hZGQoW2V2ZW50WzRdLCBudWxsXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlIChldmVudENvdW50ID4gMCk7CiAgICAgICAgLy8gQmUgc3VyZSB0byBjbGVhciB0aGlzIG1hbnVhbGx5LCBhcyB0aGUgc29ja2V0cyBhcmUgbm90IHJlYWQgdGhyb3VnaAogICAgICAgIC8vIHRoZSBfTmF0aXZlU29ja2V0IGludGVyZmFjZS4KICAgICAgICBuYXRpdmUuYXZhaWxhYmxlID0gMDsKICAgICAgICBmb3IgKHZhciBtYXAgaW4gcGFpci52YWx1ZXMpIHsKICAgICAgICAgIGZvciAodmFyIGV2ZW50IGluIG1hcC52YWx1ZXMpIHsKICAgICAgICAgICAgcmV3cml0ZU1vdmUoZXZlbnQsIGdldElzRGlyKGV2ZW50KSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGV2ZW50ID09IFJhd1NvY2tldEV2ZW50LmNsb3NlZCkgewogICAgICAgIC8vIEFmdGVyIHRoaXMgcG9pbnQgd2Ugc2hvdWxkIG5vdCB0cnkgdG8gZG8gYW55dGhpbmcgd2l0aCBwYXRoSWQgYXMKICAgICAgICAvLyB0aGUgaGFuZGxlIGl0IHJlcHJlc2VudGVkIGlzIGNsb3NlZCBhbmQgZ29uZSBub3cuCiAgICAgICAgaWYgKF9pZE1hcC5jb250YWluc0tleShwYXRoSWQpKSB7CiAgICAgICAgICBfaWRNYXAucmVtb3ZlKHBhdGhJZCk7CiAgICAgICAgICBpZiAoX2lkTWFwLmlzRW1wdHkgJiYgX2lkICE9IG51bGwpIHsKICAgICAgICAgICAgX2Nsb3NlV2F0Y2hlcihfaWQpOwogICAgICAgICAgICBfaWQgPSBudWxsOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChldmVudCA9PSBSYXdTb2NrZXRFdmVudC5yZWFkQ2xvc2VkKSB7CiAgICAgICAgLy8gSWYgRGlyZWN0b3J5IHdhdGNoZXIgYnVmZmVyIG92ZXJmbG93cywgaXQgd2lsbCBzZW5kIGFuIHJlYWRDbG9zZWQgZXZlbnQuCiAgICAgICAgLy8gTm9ybWFsIGNsb3Npbmcgd2lsbCBjYW5jZWwgc3RyZWFtIHN1YnNjcmlwdGlvbiBzbyB0aGF0IHBhdGggaXMKICAgICAgICAvLyBubyBsb25nZXIgYmVpbmcgd2F0Y2hlZCwgbm90IHByZXNlbnQgaW4gX2lkTWFwLgogICAgICAgIGlmIChfaWRNYXAuY29udGFpbnNLZXkocGF0aElkKSkgewogICAgICAgICAgdmFyIHBhdGggPSBfcGF0aEZyb21QYXRoSWQocGF0aElkKS5wYXRoOwogICAgICAgICAgX2lkTWFwLnJlbW92ZShwYXRoSWQpOwogICAgICAgICAgaWYgKF9pZE1hcC5pc0VtcHR5ICYmIF9pZCAhPSBudWxsKSB7CiAgICAgICAgICAgIF9jbG9zZVdhdGNoZXIoX2lkKTsKICAgICAgICAgICAgX2lkID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIHRocm93IEZpbGVTeXN0ZW1FeGNlcHRpb24oCiAgICAgICAgICAgICAgJ0RpcmVjdG9yeSB3YXRjaGVyIGNsb3NlZCB1bmV4cGVjdGVkbHknLCBwYXRoKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KGZhbHNlKTsKICAgICAgfQogICAgICBldmVudHMuYWRkQWxsKHN0b3BzKTsKICAgICAgcmV0dXJuIGV2ZW50czsKICAgIH0pOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIGJvb2wgZ2V0IGlzU3VwcG9ydGVkIG5hdGl2ZSAiRmlsZVN5c3RlbVdhdGNoZXJfSXNTdXBwb3J0ZWQiOwoKICBzdGF0aWMgaW50IF9pbml0V2F0Y2hlcigpIG5hdGl2ZSAiRmlsZVN5c3RlbVdhdGNoZXJfSW5pdFdhdGNoZXIiOwogIHN0YXRpYyB2b2lkIF9jbG9zZVdhdGNoZXIoaW50IGlkKSBuYXRpdmUgIkZpbGVTeXN0ZW1XYXRjaGVyX0Nsb3NlV2F0Y2hlciI7CgogIHN0YXRpYyBpbnQgX3dhdGNoUGF0aChpbnQgaWQsIF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBTdHJpbmcgcGF0aCwgaW50IGV2ZW50cywKICAgICAgYm9vbCByZWN1cnNpdmUpIG5hdGl2ZSAiRmlsZVN5c3RlbVdhdGNoZXJfV2F0Y2hQYXRoIjsKICBzdGF0aWMgdm9pZCBfdW53YXRjaFBhdGgoaW50IGlkLCBpbnQgcGF0aF9pZCkKICAgICAgbmF0aXZlICJGaWxlU3lzdGVtV2F0Y2hlcl9VbndhdGNoUGF0aCI7CiAgc3RhdGljIExpc3QgX3JlYWRFdmVudHMoaW50IGlkLCBpbnQgcGF0aF9pZCkKICAgICAgbmF0aXZlICJGaWxlU3lzdGVtV2F0Y2hlcl9SZWFkRXZlbnRzIjsKICBzdGF0aWMgaW50IF9nZXRTb2NrZXRJZChpbnQgaWQsIGludCBwYXRoX2lkKQogICAgICBuYXRpdmUgIkZpbGVTeXN0ZW1XYXRjaGVyX0dldFNvY2tldElkIjsKfQoKY2xhc3MgX0lub3RpZnlGaWxlU3lzdGVtV2F0Y2hlciBleHRlbmRzIF9GaWxlU3lzdGVtV2F0Y2hlciB7CiAgc3RhdGljIGZpbmFsIE1hcDxpbnQsIFN0cmVhbUNvbnRyb2xsZXI+IF9pZE1hcCA9IHt9OwogIHN0YXRpYyBTdHJlYW1TdWJzY3JpcHRpb24gX3N1YnNjcmlwdGlvbjsKCiAgX0lub3RpZnlGaWxlU3lzdGVtV2F0Y2hlcihwYXRoLCBldmVudHMsIHJlY3Vyc2l2ZSkKICAgICAgOiBzdXBlci5fKHBhdGgsIGV2ZW50cywgcmVjdXJzaXZlKTsKCiAgdm9pZCBfbmV3V2F0Y2hlcigpIHsKICAgIGludCBpZCA9IF9GaWxlU3lzdGVtV2F0Y2hlci5faWQ7CiAgICBfc3Vic2NyaXB0aW9uID0KICAgICAgICBfRmlsZVN5c3RlbVdhdGNoZXIuX2xpc3Rlbk9uU29ja2V0KGlkLCBpZCwgMCkubGlzdGVuKChldmVudCkgewogICAgICBpZiAoX2lkTWFwLmNvbnRhaW5zS2V5KGV2ZW50WzBdKSkgewogICAgICAgIGlmIChldmVudFsxXSAhPSBudWxsKSB7CiAgICAgICAgICBfaWRNYXBbZXZlbnRbMF1dLmFkZChldmVudFsxXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF9pZE1hcFtldmVudFswXV0uY2xvc2UoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogIH0KCiAgdm9pZCBfZG9uZVdhdGNoZXIoKSB7CiAgICBfc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogIH0KCiAgU3RyZWFtIF9wYXRoV2F0Y2hlZCgpIHsKICAgIHZhciBwYXRoSWQgPSBfd2F0Y2hlclBhdGgucGF0aElkOwogICAgaWYgKCFfaWRNYXAuY29udGFpbnNLZXkocGF0aElkKSkgewogICAgICBfaWRNYXBbcGF0aElkXSA9IG5ldyBTdHJlYW1Db250cm9sbGVyPEZpbGVTeXN0ZW1FdmVudD4uYnJvYWRjYXN0KCk7CiAgICB9CiAgICByZXR1cm4gX2lkTWFwW3BhdGhJZF0uc3RyZWFtOwogIH0KCiAgdm9pZCBfcGF0aFdhdGNoZWRFbmQoKSB7CiAgICB2YXIgcGF0aElkID0gX3dhdGNoZXJQYXRoLnBhdGhJZDsKICAgIGlmICghX2lkTWFwLmNvbnRhaW5zS2V5KHBhdGhJZCkpIHJldHVybjsKICAgIF9pZE1hcFtwYXRoSWRdLmNsb3NlKCk7CiAgICBfaWRNYXAucmVtb3ZlKHBhdGhJZCk7CiAgfQp9CgpjbGFzcyBfV2luMzJGaWxlU3lzdGVtV2F0Y2hlciBleHRlbmRzIF9GaWxlU3lzdGVtV2F0Y2hlciB7CiAgU3RyZWFtU3Vic2NyaXB0aW9uIF9zdWJzY3JpcHRpb247CiAgU3RyZWFtQ29udHJvbGxlciBfY29udHJvbGxlcjsKCiAgX1dpbjMyRmlsZVN5c3RlbVdhdGNoZXIocGF0aCwgZXZlbnRzLCByZWN1cnNpdmUpCiAgICAgIDogc3VwZXIuXyhwYXRoLCBldmVudHMsIHJlY3Vyc2l2ZSk7CgogIFN0cmVhbSBfcGF0aFdhdGNoZWQoKSB7CiAgICB2YXIgcGF0aElkID0gX3dhdGNoZXJQYXRoLnBhdGhJZDsKICAgIF9jb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8RmlsZVN5c3RlbUV2ZW50PigpOwogICAgX3N1YnNjcmlwdGlvbiA9CiAgICAgICAgX0ZpbGVTeXN0ZW1XYXRjaGVyLl9saXN0ZW5PblNvY2tldChwYXRoSWQsIDAsIHBhdGhJZCkubGlzdGVuKChldmVudCkgewogICAgICBhc3NlcnQoZXZlbnRbMF0gPT0gcGF0aElkKTsKICAgICAgaWYgKGV2ZW50WzFdICE9IG51bGwpIHsKICAgICAgICBfY29udHJvbGxlci5hZGQoZXZlbnRbMV0pOwogICAgICB9IGVsc2UgewogICAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIF9jb250cm9sbGVyLnN0cmVhbTsKICB9CgogIHZvaWQgX3BhdGhXYXRjaGVkRW5kKCkgewogICAgX3N1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgfQp9CgpjbGFzcyBfRlNFdmVudFN0cmVhbUZpbGVTeXN0ZW1XYXRjaGVyIGV4dGVuZHMgX0ZpbGVTeXN0ZW1XYXRjaGVyIHsKICBTdHJlYW1TdWJzY3JpcHRpb24gX3N1YnNjcmlwdGlvbjsKICBTdHJlYW1Db250cm9sbGVyIF9jb250cm9sbGVyOwoKICBfRlNFdmVudFN0cmVhbUZpbGVTeXN0ZW1XYXRjaGVyKHBhdGgsIGV2ZW50cywgcmVjdXJzaXZlKQogICAgICA6IHN1cGVyLl8ocGF0aCwgZXZlbnRzLCByZWN1cnNpdmUpOwoKICBTdHJlYW0gX3BhdGhXYXRjaGVkKCkgewogICAgdmFyIHBhdGhJZCA9IF93YXRjaGVyUGF0aC5wYXRoSWQ7CiAgICB2YXIgc29ja2V0SWQgPSBfRmlsZVN5c3RlbVdhdGNoZXIuX2dldFNvY2tldElkKDAsIHBhdGhJZCk7CiAgICBfY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPEZpbGVTeXN0ZW1FdmVudD4oKTsKICAgIF9zdWJzY3JpcHRpb24gPQogICAgICAgIF9GaWxlU3lzdGVtV2F0Y2hlci5fbGlzdGVuT25Tb2NrZXQoc29ja2V0SWQsIDAsIHBhdGhJZCkubGlzdGVuKChldmVudCkgewogICAgICBpZiAoZXZlbnRbMV0gIT0gbnVsbCkgewogICAgICAgIF9jb250cm9sbGVyLmFkZChldmVudFsxXSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gX2NvbnRyb2xsZXIuc3RyZWFtOwogIH0KCiAgdm9pZCBfcGF0aFdhdGNoZWRFbmQoKSB7CiAgICBfc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQpVaW50OExpc3QgX21ha2VVaW50OExpc3RWaWV3KFVpbnQ4TGlzdCBzb3VyY2UsIGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgbGVuZ3RoKSB7CiAgcmV0dXJuIG5ldyBVaW50OExpc3Qudmlldyhzb3VyY2UuYnVmZmVyLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwp9CoHDAE5OPAEPASABBw4JUAlQCU0gCT4gCUAcCUQgCUocCU4gCUgaCUIkCUAiCU8lCUAiCU8lCUIaCTkCAQcdCS8tAgEaQCYgATM+AToBLSMlJkkwSyU3LyEfOQIBFRQVFBE1AgEHGxoBEjMBFhUZAR0BOgEJKTEcTQYeSwYcShQGI0MEAUQYJUwGTC8EAUYBExcMHhcUP0omEAgGEAoPThIbUCQOBidBBiMaLwQBEyAmHCU3Mh0uCggbBikaFhIGBAFOGDAZLhs0HQE0GwQBRDQpIxYXFSogNTksHgwXCgEfJEItRz4MOwoBHkYjCgEpGk8TTwwKARgNGjcpGiMvMRgOKic8Rw48TQ5HTg46Ix40NhcgMUYtGS4SFysQDjxHDkFHJCsODCJPKB4nKjEMCjNMPSohLyAYDAo3VEo7KjMhLyAYDCU+Cg8XCBwVCAQBCUYBRE0BTzwwLi8tLy4CAT03KwE1KgEXJRRHKiAqESQKCAgEARgcBAEaJidKBiIEARsmLRwbBAIBOyQgATMqARomOxRPIh4jDx0ICB8EARscGQQCAUMkIAE7KgEaJj87FFEeIw8dCAgfBAEbHBkEAgEiUEMCAR1kYXJ0OmlvLXBhdGNoL2ZpbGVfcGF0Y2guZGFydE9vcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vYmluL2ZpbHRlcl9wYXRjaC5kYXJ0hr4vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vIHBhcnQgb2YgImNvbW1vbl9wYXRjaC5kYXJ0IjsKCmNsYXNzIF9GaWx0ZXJJbXBsIGV4dGVuZHMgTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MxIGltcGxlbWVudHMgUmF3WkxpYkZpbHRlciB7CiAgdm9pZCBwcm9jZXNzKExpc3Q8aW50PiBkYXRhLCBpbnQgc3RhcnQsIGludCBlbmQpIG5hdGl2ZSAiRmlsdGVyX1Byb2Nlc3MiOwoKICBMaXN0PGludD4gcHJvY2Vzc2VkKHtib29sIGZsdXNoOiB0cnVlLCBib29sIGVuZDogZmFsc2V9KQogICAgICBuYXRpdmUgIkZpbHRlcl9Qcm9jZXNzZWQiOwp9CgpjbGFzcyBfWkxpYkluZmxhdGVGaWx0ZXIgZXh0ZW5kcyBfRmlsdGVySW1wbCB7CiAgX1pMaWJJbmZsYXRlRmlsdGVyKGludCB3aW5kb3dCaXRzLCBMaXN0PGludD4gZGljdGlvbmFyeSwgYm9vbCByYXcpIHsKICAgIF9pbml0KHdpbmRvd0JpdHMsIGRpY3Rpb25hcnksIHJhdyk7CiAgfQogIHZvaWQgX2luaXQoaW50IHdpbmRvd0JpdHMsIExpc3Q8aW50PiBkaWN0aW9uYXJ5LCBib29sIHJhdykKICAgICAgbmF0aXZlICJGaWx0ZXJfQ3JlYXRlWkxpYkluZmxhdGUiOwp9CgpjbGFzcyBfWkxpYkRlZmxhdGVGaWx0ZXIgZXh0ZW5kcyBfRmlsdGVySW1wbCB7CiAgX1pMaWJEZWZsYXRlRmlsdGVyKGJvb2wgZ3ppcCwgaW50IGxldmVsLCBpbnQgd2luZG93Qml0cywgaW50IG1lbUxldmVsLAogICAgICBpbnQgc3RyYXRlZ3ksIExpc3Q8aW50PiBkaWN0aW9uYXJ5LCBib29sIHJhdykgewogICAgX2luaXQoZ3ppcCwgbGV2ZWwsIHdpbmRvd0JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSwgZGljdGlvbmFyeSwgcmF3KTsKICB9CiAgdm9pZCBfaW5pdChib29sIGd6aXAsIGludCBsZXZlbCwgaW50IHdpbmRvd0JpdHMsIGludCBtZW1MZXZlbCwgaW50IHN0cmF0ZWd5LAogICAgICBMaXN0PGludD4gZGljdGlvbmFyeSwgYm9vbCByYXcpIG5hdGl2ZSAiRmlsdGVyX0NyZWF0ZVpMaWJEZWZsYXRlIjsKfQoKQHBhdGNoCmNsYXNzIFJhd1pMaWJGaWx0ZXIgewogIEBwYXRjaAogIHN0YXRpYyBSYXdaTGliRmlsdGVyIF9tYWtlWkxpYkRlZmxhdGVGaWx0ZXIoCiAgICAgICAgICBib29sIGd6aXAsCiAgICAgICAgICBpbnQgbGV2ZWwsCiAgICAgICAgICBpbnQgd2luZG93Qml0cywKICAgICAgICAgIGludCBtZW1MZXZlbCwKICAgICAgICAgIGludCBzdHJhdGVneSwKICAgICAgICAgIExpc3Q8aW50PiBkaWN0aW9uYXJ5LAogICAgICAgICAgYm9vbCByYXcpID0+CiAgICAgIG5ldyBfWkxpYkRlZmxhdGVGaWx0ZXIoCiAgICAgICAgICBnemlwLCBsZXZlbCwgd2luZG93Qml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5LCBkaWN0aW9uYXJ5LCByYXcpOwogIEBwYXRjaAogIHN0YXRpYyBSYXdaTGliRmlsdGVyIF9tYWtlWkxpYkluZmxhdGVGaWx0ZXIoCiAgICAgICAgICBpbnQgd2luZG93Qml0cywgTGlzdDxpbnQ+IGRpY3Rpb25hcnksIGJvb2wgcmF3KSA9PgogICAgICBuZXcgX1pMaWJJbmZsYXRlRmlsdGVyKHdpbmRvd0JpdHMsIGRpY3Rpb25hcnksIHJhdyk7Cn0KNABOTjwBDwEgAU5MATshAgEvRygEPSkCAS9JNkkET0kCAQcWCS8VFRoYGCAXHkkJLz07AgEfZGFydDppby1wYXRjaC9maWx0ZXJfcGF0Y2guZGFydFNvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vYmluL2lvX3NlcnZpY2VfcGF0Y2guZGFydIuWLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgovLyBwYXJ0IG9mICJjb21tb25fcGF0Y2guZGFydCI7CgpjbGFzcyBfSU9TZXJ2aWNlUG9ydHMgewogIC8vIFdlIGxpbWl0IHRoZSBudW1iZXIgb2YgSU8gU2VydmljZSBwb3J0cyBwZXIgaXNvbGF0ZSBzbyB0aGF0IHdlIGRvbid0CiAgLy8gc3Bhd24gdG9vIG1hbnkgdGhyZWFkcyBhbGwgYXQgb25jZSwgd2hpY2ggY2FuIGNyYXNoIHRoZSBWTSBvbiBXaW5kb3dzLgogIHN0YXRpYyBjb25zdCBpbnQgbWF4UG9ydHMgPSAzMjsKICBMaXN0PFNlbmRQb3J0PiBfcG9ydHMgPSA8U2VuZFBvcnQ+W107CiAgTGlzdDxTZW5kUG9ydD4gX2ZyZWVQb3J0cyA9IDxTZW5kUG9ydD5bXTsKICBNYXA8aW50LCBTZW5kUG9ydD4gX3VzZWRQb3J0cyA9IG5ldyBIYXNoTWFwPGludCwgU2VuZFBvcnQ+KCk7CgogIF9JT1NlcnZpY2VQb3J0cygpOwoKICBTZW5kUG9ydCBfZ2V0UG9ydChpbnQgZm9yUmVxdWVzdElkKSB7CiAgICBpZiAoX2ZyZWVQb3J0cy5pc0VtcHR5ICYmIF91c2VkUG9ydHMubGVuZ3RoIDwgbWF4UG9ydHMpIHsKICAgICAgZmluYWwgU2VuZFBvcnQgcG9ydCA9IF9uZXdTZXJ2aWNlUG9ydCgpOwogICAgICBfcG9ydHMuYWRkKHBvcnQpOwogICAgICBfZnJlZVBvcnRzLmFkZChwb3J0KTsKICAgIH0KICAgIGlmICghX2ZyZWVQb3J0cy5pc0VtcHR5KSB7CiAgICAgIGZpbmFsIFNlbmRQb3J0IHBvcnQgPSBfZnJlZVBvcnRzLnJlbW92ZUxhc3QoKTsKICAgICAgYXNzZXJ0KCFfdXNlZFBvcnRzLmNvbnRhaW5zS2V5KGZvclJlcXVlc3RJZCkpOwogICAgICBfdXNlZFBvcnRzW2ZvclJlcXVlc3RJZF0gPSBwb3J0OwogICAgICByZXR1cm4gcG9ydDsKICAgIH0KICAgIC8vIFdlIGhhdmUgYWxyZWFkeSBhbGxvY2F0ZWQgdGhlIG1heCBudW1iZXIgb2YgcG9ydHMuIFJlLXVzZSBhbgogICAgLy8gZXhpc3Rpbmcgb25lLgogICAgZmluYWwgU2VuZFBvcnQgcG9ydCA9IF9wb3J0c1tmb3JSZXF1ZXN0SWQgJSBtYXhQb3J0c107CiAgICBfdXNlZFBvcnRzW2ZvclJlcXVlc3RJZF0gPSBwb3J0OwogICAgcmV0dXJuIHBvcnQ7CiAgfQoKICB2b2lkIF9yZXR1cm5Qb3J0KGludCBmb3JSZXF1ZXN0SWQpIHsKICAgIGZpbmFsIFNlbmRQb3J0IHBvcnQgPSBfdXNlZFBvcnRzLnJlbW92ZShmb3JSZXF1ZXN0SWQpOwogICAgaWYgKCFfdXNlZFBvcnRzLnZhbHVlcy5jb250YWlucyhwb3J0KSkgewogICAgICBfZnJlZVBvcnRzLmFkZChwb3J0KTsKICAgIH0KICB9CgogIHN0YXRpYyBTZW5kUG9ydCBfbmV3U2VydmljZVBvcnQoKSBuYXRpdmUgIklPU2VydmljZV9OZXdTZXJ2aWNlUG9ydCI7Cn0KCkBwYXRjaApjbGFzcyBfSU9TZXJ2aWNlIHsKICBzdGF0aWMgX0lPU2VydmljZVBvcnRzIF9zZXJ2aWNlUG9ydHMgPSBuZXcgX0lPU2VydmljZVBvcnRzKCk7CiAgc3RhdGljIFJhd1JlY2VpdmVQb3J0IF9yZWNlaXZlUG9ydDsKICBzdGF0aWMgU2VuZFBvcnQgX3JlcGx5VG9Qb3J0OwogIHN0YXRpYyBIYXNoTWFwPGludCwgQ29tcGxldGVyPiBfbWVzc2FnZU1hcCA9IG5ldyBIYXNoTWFwPGludCwgQ29tcGxldGVyPigpOwogIHN0YXRpYyBpbnQgX2lkID0gMDsKCiAgQHBhdGNoCiAgc3RhdGljIEZ1dHVyZSBfZGlzcGF0Y2goaW50IHJlcXVlc3QsIExpc3QgZGF0YSkgewogICAgaW50IGlkOwogICAgZG8gewogICAgICBpZCA9IF9nZXROZXh0SWQoKTsKICAgIH0gd2hpbGUgKF9tZXNzYWdlTWFwLmNvbnRhaW5zS2V5KGlkKSk7CiAgICBmaW5hbCBTZW5kUG9ydCBzZXJ2aWNlUG9ydCA9IF9zZXJ2aWNlUG9ydHMuX2dldFBvcnQoaWQpOwogICAgX2Vuc3VyZUluaXRpYWxpemUoKTsKICAgIGZpbmFsIENvbXBsZXRlciBjb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyKCk7CiAgICBfbWVzc2FnZU1hcFtpZF0gPSBjb21wbGV0ZXI7CiAgICB0cnkgewogICAgICBzZXJ2aWNlUG9ydC5zZW5kKDxkeW5hbWljPltpZCwgX3JlcGx5VG9Qb3J0LCByZXF1ZXN0LCBkYXRhXSk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBfbWVzc2FnZU1hcC5yZW1vdmUoaWQpLmNvbXBsZXRlKGVycm9yKTsKICAgICAgaWYgKF9tZXNzYWdlTWFwLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgX2ZpbmFsaXplKCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjb21wbGV0ZXIuZnV0dXJlOwogIH0KCiAgc3RhdGljIHZvaWQgX2Vuc3VyZUluaXRpYWxpemUoKSB7CiAgICBpZiAoX3JlY2VpdmVQb3J0ID09IG51bGwpIHsKICAgICAgX3JlY2VpdmVQb3J0ID0gbmV3IFJhd1JlY2VpdmVQb3J0KCk7CiAgICAgIF9yZXBseVRvUG9ydCA9IF9yZWNlaXZlUG9ydC5zZW5kUG9ydDsKICAgICAgX3JlY2VpdmVQb3J0LmhhbmRsZXIgPSAoZGF0YSkgewogICAgICAgIGFzc2VydChkYXRhIGlzIExpc3QgJiYgZGF0YS5sZW5ndGggPT0gMik7CiAgICAgICAgX21lc3NhZ2VNYXAucmVtb3ZlKGRhdGFbMF0pLmNvbXBsZXRlKGRhdGFbMV0pOwogICAgICAgIF9zZXJ2aWNlUG9ydHMuX3JldHVyblBvcnQoZGF0YVswXSk7CiAgICAgICAgaWYgKF9tZXNzYWdlTWFwLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICBfZmluYWxpemUoKTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfQoKICBzdGF0aWMgdm9pZCBfZmluYWxpemUoKSB7CiAgICBfaWQgPSAwOwogICAgX3JlY2VpdmVQb3J0LmNsb3NlKCk7CiAgICBfcmVjZWl2ZVBvcnQgPSBudWxsOwogIH0KCiAgc3RhdGljIGludCBfZ2V0TmV4dElkKCkgewogICAgaWYgKF9pZCA9PSAweDdGRkZGRkZGKSBfaWQgPSAwOwogICAgcmV0dXJuIF9pZCsrOwogIH0KfQpoAE5OPAEPASABGEpMIigsQAEVASg+LxgcBh81NScTBkQVOyURBAEnOy0cBgQBRwIBBxNAJiBOFgEJNAwJGSs9GTEhCkQWLiUVCAYdBAEkICssJjI3LCcXCgkGBAEcDRoZBAEcJBIEAgEjZGFydDppby1wYXRjaC9pb19zZXJ2aWNlX3BhdGNoLmRhcnRSb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvX2ludGVybmFsL3ZtL2Jpbi9uYW1lc3BhY2VfcGF0Y2guZGFydIZrLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9OYW1lc3BhY2VJbXBsIGV4dGVuZHMgTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MxIGltcGxlbWVudHMgX05hbWVzcGFjZSB7CiAgX05hbWVzcGFjZUltcGwuXygpOwoKICBzdGF0aWMgX05hbWVzcGFjZUltcGwgX2NyZWF0ZShfTmFtZXNwYWNlSW1wbCBuYW1lc3BhY2UsIHZhciBuKQogICAgICBuYXRpdmUgIk5hbWVzcGFjZV9DcmVhdGUiOwogIHN0YXRpYyBpbnQgX2dldFBvaW50ZXIoX05hbWVzcGFjZUltcGwgbmFtZXNwYWNlKQogICAgICBuYXRpdmUgIk5hbWVzcGFjZV9HZXRQb2ludGVyIjsKICBzdGF0aWMgaW50IF9nZXREZWZhdWx0KCkgbmF0aXZlICJOYW1lc3BhY2VfR2V0RGVmYXVsdCI7CgogIC8vIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyAibmFtZXNwYWNlcyIsIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUKICAvLyBlbWJlZGRlciB3aXRoIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBuYW1lc3BhY2UgaW5mb3JtYXRpb24uCiAgc3RhdGljIF9OYW1lc3BhY2VJbXBsIF9jYWNoZWROYW1lc3BhY2UgPSBudWxsOwogIHN0YXRpYyB2b2lkIF9zZXR1cE5hbWVzcGFjZSh2YXIgbmFtZXNwYWNlKSB7CiAgICBfY2FjaGVkTmFtZXNwYWNlID0gX2NyZWF0ZShuZXcgX05hbWVzcGFjZUltcGwuXygpLCBuYW1lc3BhY2UpOwogIH0KCiAgc3RhdGljIF9OYW1lc3BhY2VJbXBsIGdldCBfbmFtZXNwYWNlIHsKICAgIGlmIChfY2FjaGVkTmFtZXNwYWNlID09IG51bGwpIHsKICAgICAgLy8gVGhlIGVtYmVkZGVyIGhhcyBub3Qgc3VwcGxpZWQgYSBuYW1lc3BhY2UgYmVmb3JlIG9uZSBpcyBuZWVkZWQsIHNvCiAgICAgIC8vIGluc3RlYWQgdXNlIGEgc2FmZS1pc2ggZGVmYXVsdCB2YWx1ZS4KICAgICAgX2NhY2hlZE5hbWVzcGFjZSA9IF9jcmVhdGUobmV3IF9OYW1lc3BhY2VJbXBsLl8oKSwgX2dldERlZmF1bHQoKSk7CiAgICB9CiAgICByZXR1cm4gX2NhY2hlZE5hbWVzcGFjZTsKICB9CgogIHN0YXRpYyBpbnQgZ2V0IF9uYW1lc3BhY2VQb2ludGVyID0+IF9nZXRQb2ludGVyKF9uYW1lc3BhY2UpOwp9CgpAcGF0Y2gKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfTmFtZXNwYWNlIHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKICBzdGF0aWMgdm9pZCBfc2V0dXBOYW1lc3BhY2UodmFyIG5hbWVzcGFjZSkgewogICAgX05hbWVzcGFjZUltcGwuX3NldHVwTmFtZXNwYWNlKG5hbWVzcGFjZSk7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgX05hbWVzcGFjZSBnZXQgX25hbWVzcGFjZSA9PiBfTmFtZXNwYWNlSW1wbC5fbmFtZXNwYWNlOwoKICBAcGF0Y2gKICBzdGF0aWMgaW50IGdldCBfbmFtZXNwYWNlUG9pbnRlciA9PiBfTmFtZXNwYWNlSW1wbC5fbmFtZXNwYWNlUG9pbnRlcjsKfQo0AE5OPAEPARpOFgFBITMlOgFJQDEvQwQBKSRML0kGHQQBPwIBBxoTCSQvLwQBCUEBCUgCASJkYXJ0OmlvLXBhdGNoL25hbWVzcGFjZV9wYXRjaC5kYXJ0UG9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL19pbnRlcm5hbC92bS9iaW4vcHJvY2Vzc19wYXRjaC5kYXJ0wABLMy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKLy8gcGFydCBvZiAiY29tbW9uX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIF9XaW5kb3dzQ29kZVBhZ2VEZWNvZGVyIHsKICBAcGF0Y2gKICBzdGF0aWMgU3RyaW5nIF9kZWNvZGVCeXRlcyhMaXN0PGludD4gYnl0ZXMpIG5hdGl2ZSAiU3lzdGVtRW5jb2RpbmdUb1N0cmluZyI7Cn0KCkBwYXRjaApjbGFzcyBfV2luZG93c0NvZGVQYWdlRW5jb2RlciB7CiAgQHBhdGNoCiAgc3RhdGljIExpc3Q8aW50PiBfZW5jb2RlU3RyaW5nKFN0cmluZyBzdHJpbmcpIG5hdGl2ZSAiU3RyaW5nVG9TeXN0ZW1FbmNvZGluZyI7Cn0KCkBwYXRjaApjbGFzcyBQcm9jZXNzIHsKICBAcGF0Y2gKICBzdGF0aWMgRnV0dXJlPFByb2Nlc3M+IHN0YXJ0KFN0cmluZyBleGVjdXRhYmxlLCBMaXN0PFN0cmluZz4gYXJndW1lbnRzLAogICAgICB7U3RyaW5nIHdvcmtpbmdEaXJlY3RvcnksCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQsCiAgICAgIGJvb2wgaW5jbHVkZVBhcmVudEVudmlyb25tZW50OiB0cnVlLAogICAgICBib29sIHJ1bkluU2hlbGw6IGZhbHNlLAogICAgICBQcm9jZXNzU3RhcnRNb2RlIG1vZGU6IFByb2Nlc3NTdGFydE1vZGUubm9ybWFsfSkgewogICAgX1Byb2Nlc3NJbXBsIHByb2Nlc3MgPSBuZXcgX1Byb2Nlc3NJbXBsKAogICAgICAgIGV4ZWN1dGFibGUsCiAgICAgICAgYXJndW1lbnRzLAogICAgICAgIHdvcmtpbmdEaXJlY3RvcnksCiAgICAgICAgZW52aXJvbm1lbnQsCiAgICAgICAgaW5jbHVkZVBhcmVudEVudmlyb25tZW50LAogICAgICAgIHJ1bkluU2hlbGwsCiAgICAgICAgbW9kZSk7CiAgICByZXR1cm4gcHJvY2Vzcy5fc3RhcnQoKTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmU8UHJvY2Vzc1Jlc3VsdD4gcnVuKFN0cmluZyBleGVjdXRhYmxlLCBMaXN0PFN0cmluZz4gYXJndW1lbnRzLAogICAgICB7U3RyaW5nIHdvcmtpbmdEaXJlY3RvcnksCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQsCiAgICAgIGJvb2wgaW5jbHVkZVBhcmVudEVudmlyb25tZW50OiB0cnVlLAogICAgICBib29sIHJ1bkluU2hlbGw6IGZhbHNlLAogICAgICBFbmNvZGluZyBzdGRvdXRFbmNvZGluZzogc3lzdGVtRW5jb2RpbmcsCiAgICAgIEVuY29kaW5nIHN0ZGVyckVuY29kaW5nOiBzeXN0ZW1FbmNvZGluZ30pIHsKICAgIHJldHVybiBfcnVuTm9uSW50ZXJhY3RpdmVQcm9jZXNzKAogICAgICAgIGV4ZWN1dGFibGUsCiAgICAgICAgYXJndW1lbnRzLAogICAgICAgIHdvcmtpbmdEaXJlY3RvcnksCiAgICAgICAgZW52aXJvbm1lbnQsCiAgICAgICAgaW5jbHVkZVBhcmVudEVudmlyb25tZW50LAogICAgICAgIHJ1bkluU2hlbGwsCiAgICAgICAgc3Rkb3V0RW5jb2RpbmcsCiAgICAgICAgc3RkZXJyRW5jb2RpbmcpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIFByb2Nlc3NSZXN1bHQgcnVuU3luYyhTdHJpbmcgZXhlY3V0YWJsZSwgTGlzdDxTdHJpbmc+IGFyZ3VtZW50cywKICAgICAge1N0cmluZyB3b3JraW5nRGlyZWN0b3J5LAogICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50LAogICAgICBib29sIGluY2x1ZGVQYXJlbnRFbnZpcm9ubWVudDogdHJ1ZSwKICAgICAgYm9vbCBydW5JblNoZWxsOiBmYWxzZSwKICAgICAgRW5jb2Rpbmcgc3Rkb3V0RW5jb2Rpbmc6IHN5c3RlbUVuY29kaW5nLAogICAgICBFbmNvZGluZyBzdGRlcnJFbmNvZGluZzogc3lzdGVtRW5jb2Rpbmd9KSB7CiAgICByZXR1cm4gX3J1bk5vbkludGVyYWN0aXZlUHJvY2Vzc1N5bmMoCiAgICAgICAgZXhlY3V0YWJsZSwKICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgd29ya2luZ0RpcmVjdG9yeSwKICAgICAgICBlbnZpcm9ubWVudCwKICAgICAgICBpbmNsdWRlUGFyZW50RW52aXJvbm1lbnQsCiAgICAgICAgcnVuSW5TaGVsbCwKICAgICAgICBzdGRvdXRFbmNvZGluZywKICAgICAgICBzdGRlcnJFbmNvZGluZyk7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgYm9vbCBraWxsUGlkKGludCBwaWQsIFtQcm9jZXNzU2lnbmFsIHNpZ25hbCA9IFByb2Nlc3NTaWduYWwuc2lndGVybV0pIHsKICAgIGlmIChzaWduYWwgaXMhIFByb2Nlc3NTaWduYWwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkFyZ3VtZW50ICdzaWduYWwnIG11c3QgYmUgYSBQcm9jZXNzU2lnbmFsIik7CiAgICB9CiAgICByZXR1cm4gX1Byb2Nlc3NVdGlscy5fa2lsbFBpZChwaWQsIHNpZ25hbC5fc2lnbmFsTnVtYmVyKTsKICB9Cn0KCkxpc3Q8X1NpZ25hbENvbnRyb2xsZXI+IF9zaWduYWxDb250cm9sbGVycyA9IG5ldyBMaXN0KDMyKTsKCmNsYXNzIF9TaWduYWxDb250cm9sbGVyIHsKICBmaW5hbCBQcm9jZXNzU2lnbmFsIHNpZ25hbDsKCiAgU3RyZWFtQ29udHJvbGxlcjxQcm9jZXNzU2lnbmFsPiBfY29udHJvbGxlcjsKICB2YXIgX2lkOwoKICBfU2lnbmFsQ29udHJvbGxlcih0aGlzLnNpZ25hbCkgewogICAgX2NvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcjxQcm9jZXNzU2lnbmFsPi5icm9hZGNhc3QoCiAgICAgICAgb25MaXN0ZW46IF9saXN0ZW4sIG9uQ2FuY2VsOiBfY2FuY2VsKTsKICB9CgogIFN0cmVhbTxQcm9jZXNzU2lnbmFsPiBnZXQgc3RyZWFtID0+IF9jb250cm9sbGVyLnN0cmVhbTsKCiAgdm9pZCBfbGlzdGVuKCkgewogICAgdmFyIGlkID0gX3NldFNpZ25hbEhhbmRsZXIoc2lnbmFsLl9zaWduYWxOdW1iZXIpOwogICAgaWYgKGlkIGlzISBpbnQpIHsKICAgICAgX2NvbnRyb2xsZXIKICAgICAgICAgIC5hZGRFcnJvcihuZXcgU2lnbmFsRXhjZXB0aW9uKCJGYWlsZWQgdG8gbGlzdGVuIGZvciAkc2lnbmFsIiwgaWQpKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgX2lkID0gaWQ7CiAgICB2YXIgc29ja2V0ID0gbmV3IF9SYXdTb2NrZXQobmV3IF9OYXRpdmVTb2NrZXQud2F0Y2hTaWduYWwoaWQpKTsKICAgIHNvY2tldC5saXN0ZW4oKGV2ZW50KSB7CiAgICAgIGlmIChldmVudCA9PSBSYXdTb2NrZXRFdmVudC5yZWFkKSB7CiAgICAgICAgdmFyIGJ5dGVzID0gc29ja2V0LnJlYWQoKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBfY29udHJvbGxlci5hZGQoc2lnbmFsKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogIH0KCiAgdm9pZCBfY2FuY2VsKCkgewogICAgaWYgKF9pZCAhPSBudWxsKSB7CiAgICAgIF9jbGVhclNpZ25hbEhhbmRsZXIoc2lnbmFsLl9zaWduYWxOdW1iZXIpOwogICAgICBfaWQgPSBudWxsOwogICAgfQogIH0KCiAgc3RhdGljIF9zZXRTaWduYWxIYW5kbGVyKGludCBzaWduYWwpIG5hdGl2ZSAiUHJvY2Vzc19TZXRTaWduYWxIYW5kbGVyIjsKICBzdGF0aWMgaW50IF9jbGVhclNpZ25hbEhhbmRsZXIoaW50IHNpZ25hbCkKICAgICAgbmF0aXZlICJQcm9jZXNzX0NsZWFyU2lnbmFsSGFuZGxlciI7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQpGdW5jdGlvbiBfZ2V0V2F0Y2hTaWduYWxJbnRlcm5hbCgpID0+IF9Qcm9jZXNzVXRpbHMuX3dhdGNoU2lnbmFsSW50ZXJuYWw7CgpAcGF0Y2gKY2xhc3MgX1Byb2Nlc3NVdGlscyB7CiAgQHBhdGNoCiAgc3RhdGljIHZvaWQgX2V4aXQoaW50IHN0YXR1cykgbmF0aXZlICJQcm9jZXNzX0V4aXQiOwogIEBwYXRjaAogIHN0YXRpYyB2b2lkIF9zZXRFeGl0Q29kZShpbnQgc3RhdHVzKSBuYXRpdmUgIlByb2Nlc3NfU2V0RXhpdENvZGUiOwogIEBwYXRjaAogIHN0YXRpYyBpbnQgX2dldEV4aXRDb2RlKCkgbmF0aXZlICJQcm9jZXNzX0dldEV4aXRDb2RlIjsKICBAcGF0Y2gKICBzdGF0aWMgdm9pZCBfc2xlZXAoaW50IG1pbGxpcykgbmF0aXZlICJQcm9jZXNzX1NsZWVwIjsKICBAcGF0Y2gKICBzdGF0aWMgaW50IF9waWQoUHJvY2VzcyBwcm9jZXNzKSBuYXRpdmUgIlByb2Nlc3NfUGlkIjsKICBzdGF0aWMgYm9vbCBfa2lsbFBpZChpbnQgcGlkLCBpbnQgc2lnbmFsKSBuYXRpdmUgIlByb2Nlc3NfS2lsbFBpZCI7CiAgQHBhdGNoCiAgc3RhdGljIFN0cmVhbTxQcm9jZXNzU2lnbmFsPiBfd2F0Y2hTaWduYWwoUHJvY2Vzc1NpZ25hbCBzaWduYWwpIHsKICAgIGlmIChzaWduYWwgIT0gUHJvY2Vzc1NpZ25hbC5zaWdodXAgJiYKICAgICAgICBzaWduYWwgIT0gUHJvY2Vzc1NpZ25hbC5zaWdpbnQgJiYKICAgICAgICBzaWduYWwgIT0gUHJvY2Vzc1NpZ25hbC5zaWd0ZXJtICYmCiAgICAgICAgKFBsYXRmb3JtLmlzV2luZG93cyB8fAogICAgICAgICAgICAoc2lnbmFsICE9IFByb2Nlc3NTaWduYWwuc2lndXNyMSAmJgogICAgICAgICAgICAgICAgc2lnbmFsICE9IFByb2Nlc3NTaWduYWwuc2lndXNyMiAmJgogICAgICAgICAgICAgICAgc2lnbmFsICE9IFByb2Nlc3NTaWduYWwuc2lnd2luY2gpKSkgewogICAgICB0aHJvdyBuZXcgU2lnbmFsRXhjZXB0aW9uKAogICAgICAgICAgIkxpc3RlbmluZyBmb3Igc2lnbmFsICRzaWduYWwgaXMgbm90IHN1cHBvcnRlZCIpOwogICAgfQogICAgcmV0dXJuIF93YXRjaFNpZ25hbEludGVybmFsKHNpZ25hbCk7CiAgfQoKICBzdGF0aWMgU3RyZWFtPFByb2Nlc3NTaWduYWw+IF93YXRjaFNpZ25hbEludGVybmFsKFByb2Nlc3NTaWduYWwgc2lnbmFsKSB7CiAgICBpZiAoX3NpZ25hbENvbnRyb2xsZXJzW3NpZ25hbC5fc2lnbmFsTnVtYmVyXSA9PSBudWxsKSB7CiAgICAgIF9zaWduYWxDb250cm9sbGVyc1tzaWduYWwuX3NpZ25hbE51bWJlcl0gPSBuZXcgX1NpZ25hbENvbnRyb2xsZXIoc2lnbmFsKTsKICAgIH0KICAgIHJldHVybiBfc2lnbmFsQ29udHJvbGxlcnNbc2lnbmFsLl9zaWduYWxOdW1iZXJdLnN0cmVhbTsKICB9Cn0KCkBwYXRjaApjbGFzcyBQcm9jZXNzSW5mbyB7CiAgQHBhdGNoCiAgc3RhdGljIGludCBnZXQgbWF4UnNzIHsKICAgIHZhciByZXN1bHQgPSBfbWF4UnNzKCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgcmVzdWx0OwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBpbnQgZ2V0IGN1cnJlbnRSc3MgewogICAgdmFyIHJlc3VsdCA9IF9jdXJyZW50UnNzKCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgcmVzdWx0OwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBfbWF4UnNzKCkgbmF0aXZlICJQcm9jZXNzSW5mb19NYXhSU1MiOwogIHN0YXRpYyBfY3VycmVudFJzcygpIG5hdGl2ZSAiUHJvY2Vzc0luZm9fQ3VycmVudFJTUyI7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1Byb2Nlc3NTdGFydFN0YXR1cyB7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAic2V0IikKICBpbnQgX2Vycm9yQ29kZTsgLy8gU2V0IHRvIE9TIGVycm9yIGNvZGUgaWYgcHJvY2VzcyBzdGFydCBmYWlsZWQuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAic2V0IikKICBTdHJpbmcgX2Vycm9yTWVzc2FnZTsgLy8gU2V0IHRvIE9TIGVycm9yIG1lc3NhZ2UgaWYgcHJvY2VzcyBzdGFydCBmYWlsZWQuCn0KCi8vIFRoZSBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczEgY2FuIG5vdCBiZSB1c2VkIHdpdGggYSBtaXhpbiwgZHVlIHRvIG1pc3NpbmcKLy8gaW1wbGljaXQgY29uc3RydWN0b3IuCmNsYXNzIF9Qcm9jZXNzSW1wbE5hdGl2ZVdyYXBwZXIgZXh0ZW5kcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczEge30KCmNsYXNzIF9Qcm9jZXNzSW1wbCBleHRlbmRzIF9Qcm9jZXNzSW1wbE5hdGl2ZVdyYXBwZXIgaW1wbGVtZW50cyBQcm9jZXNzIHsKICBfUHJvY2Vzc1Jlc291cmNlSW5mbyBfcmVzb3VyY2VJbmZvOwogIHN0YXRpYyBib29sIGNvbm5lY3RlZFJlc291cmNlSGFuZGxlciA9IGZhbHNlOwoKICBfUHJvY2Vzc0ltcGwoCiAgICAgIFN0cmluZyBwYXRoLAogICAgICBMaXN0PFN0cmluZz4gYXJndW1lbnRzLAogICAgICB0aGlzLl93b3JraW5nRGlyZWN0b3J5LAogICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50LAogICAgICBib29sIGluY2x1ZGVQYXJlbnRFbnZpcm9ubWVudCwKICAgICAgYm9vbCBydW5JblNoZWxsLAogICAgICBQcm9jZXNzU3RhcnRNb2RlIG1vZGUpCiAgICAgIDogc3VwZXIoKSB7CiAgICBpZiAoIWNvbm5lY3RlZFJlc291cmNlSGFuZGxlcikgewogICAgICByZWdpc3RlckV4dGVuc2lvbigKICAgICAgICAgICdleHQuZGFydC5pby5nZXRQcm9jZXNzZXMnLCBfUHJvY2Vzc1Jlc291cmNlSW5mby5nZXRTdGFydGVkUHJvY2Vzc2VzKTsKICAgICAgcmVnaXN0ZXJFeHRlbnNpb24oJ2V4dC5kYXJ0LmlvLmdldFByb2Nlc3NCeUlkJywKICAgICAgICAgIF9Qcm9jZXNzUmVzb3VyY2VJbmZvLmdldFByb2Nlc3NJbmZvTWFwQnlJZCk7CiAgICAgIGNvbm5lY3RlZFJlc291cmNlSGFuZGxlciA9IHRydWU7CiAgICB9CgogICAgaWYgKHJ1bkluU2hlbGwpIHsKICAgICAgYXJndW1lbnRzID0gX2dldFNoZWxsQXJndW1lbnRzKHBhdGgsIGFyZ3VtZW50cyk7CiAgICAgIHBhdGggPSBfZ2V0U2hlbGxDb21tYW5kKCk7CiAgICB9CgogICAgaWYgKHBhdGggaXMhIFN0cmluZykgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiUGF0aCBpcyBub3QgYSBTdHJpbmc6ICRwYXRoIik7CiAgICB9CgogICAgaWYgKFBsYXRmb3JtLmlzV2luZG93cyAmJiBwYXRoLmNvbnRhaW5zKCcgJykgJiYgIXBhdGguY29udGFpbnMoJyInKSkgewogICAgICAvLyBFc2NhcGUgcGF0aHMgdGhhdCBtYXkgY29udGFpbiBzcGFjZXMKICAgICAgLy8gQnVnOiBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMzc3NTEKICAgICAgX3BhdGggPSAnIiRwYXRoIic7CiAgICB9IGVsc2UgewogICAgICBfcGF0aCA9IHBhdGg7CiAgICB9CgogICAgaWYgKGFyZ3VtZW50cyBpcyEgTGlzdCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiQXJndW1lbnRzIGlzIG5vdCBhIExpc3Q6ICRhcmd1bWVudHMiKTsKICAgIH0KICAgIGludCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOwogICAgX2FyZ3VtZW50cyA9IG5ldyBMaXN0PFN0cmluZz4obGVuKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTsKICAgICAgaWYgKGFyZyBpcyEgU3RyaW5nKSB7CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIk5vbi1zdHJpbmcgYXJndW1lbnQ6ICRhcmciKTsKICAgICAgfQogICAgICBfYXJndW1lbnRzW2ldID0gYXJndW1lbnRzW2ldOwogICAgICBpZiAoUGxhdGZvcm0uaXNXaW5kb3dzKSB7CiAgICAgICAgX2FyZ3VtZW50c1tpXSA9IF93aW5kb3dzQXJndW1lbnRFc2NhcGUoX2FyZ3VtZW50c1tpXSk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoX3dvcmtpbmdEaXJlY3RvcnkgIT0gbnVsbCAmJiBfd29ya2luZ0RpcmVjdG9yeSBpcyEgU3RyaW5nKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKAogICAgICAgICAgIldvcmtpbmdEaXJlY3RvcnkgaXMgbm90IGEgU3RyaW5nOiAkX3dvcmtpbmdEaXJlY3RvcnkiKTsKICAgIH0KCiAgICBfZW52aXJvbm1lbnQgPSBbXTsKICAgIC8vIEVuc3VyZSB0aGF0IHdlIGhhdmUgYSBub24tbnVsbCBlbnZpcm9ubWVudC4KICAgIGVudmlyb25tZW50ID0gKGVudmlyb25tZW50ID09IG51bGwpID8gKGNvbnN0IHt9KSA6IGVudmlyb25tZW50OwogICAgaWYgKGVudmlyb25tZW50IGlzISBNYXApIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkVudmlyb25tZW50IGlzIG5vdCBhIG1hcDogJGVudmlyb25tZW50Iik7CiAgICB9CiAgICBlbnZpcm9ubWVudC5mb3JFYWNoKChrZXksIHZhbHVlKSB7CiAgICAgIGlmIChrZXkgaXMhIFN0cmluZyB8fCB2YWx1ZSBpcyEgU3RyaW5nKSB7CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAgICJFbnZpcm9ubWVudCBrZXkgb3IgdmFsdWUgaXMgbm90IGEgc3RyaW5nOiAoJGtleSwgJHZhbHVlKSIpOwogICAgICB9CiAgICAgIF9lbnZpcm9ubWVudC5hZGQoJyRrZXk9JHZhbHVlJyk7CiAgICB9KTsKICAgIGlmIChpbmNsdWRlUGFyZW50RW52aXJvbm1lbnQpIHsKICAgICAgUGxhdGZvcm0uZW52aXJvbm1lbnQuZm9yRWFjaCgoa2V5LCB2YWx1ZSkgewogICAgICAgIGFzc2VydChrZXkgaXMgU3RyaW5nKTsKICAgICAgICBhc3NlcnQodmFsdWUgaXMgU3RyaW5nKTsKICAgICAgICAvLyBEbyBub3Qgb3ZlcnJpZGUga2V5cyBhbHJlYWR5IHNldCBhcyBwYXJ0IG9mIGVudmlyb25tZW50LgogICAgICAgIGlmICghZW52aXJvbm1lbnQuY29udGFpbnNLZXkoa2V5KSkgewogICAgICAgICAgX2Vudmlyb25tZW50LmFkZCgnJGtleT0kdmFsdWUnKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQoKICAgIGlmIChtb2RlIGlzISBQcm9jZXNzU3RhcnRNb2RlKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJNb2RlIGlzIG5vdCBhIFByb2Nlc3NTdGFydE1vZGU6ICRtb2RlIik7CiAgICB9CiAgICBfbW9kZSA9IG1vZGU7CgogICAgaWYgKF9tb2RlSGFzU3RkaW8obW9kZSkpIHsKICAgICAgLy8gc3RkaW4gZ29pbmcgdG8gcHJvY2Vzcy4KICAgICAgX3N0ZGluID0gbmV3IF9TdGRTaW5rKG5ldyBfU29ja2V0Ll93cml0ZVBpcGUoKS4uX293bmVyID0gdGhpcyk7CiAgICAgIC8vIHN0ZG91dCBjb21pbmcgZnJvbSBwcm9jZXNzLgogICAgICBfc3Rkb3V0ID0gbmV3IF9TdGRTdHJlYW0obmV3IF9Tb2NrZXQuX3JlYWRQaXBlKCkuLl9vd25lciA9IHRoaXMpOwogICAgICAvLyBzdGRlcnIgY29taW5nIGZyb20gcHJvY2Vzcy4KICAgICAgX3N0ZGVyciA9IG5ldyBfU3RkU3RyZWFtKG5ldyBfU29ja2V0Ll9yZWFkUGlwZSgpLi5fb3duZXIgPSB0aGlzKTsKICAgIH0KICAgIGlmIChfbW9kZUlzQXR0YWNoZWQobW9kZSkpIHsKICAgICAgX2V4aXRIYW5kbGVyID0gbmV3IF9Tb2NrZXQuX3JlYWRQaXBlKCk7CiAgICB9CiAgICBfZW5kZWQgPSBmYWxzZTsKICAgIF9zdGFydGVkID0gZmFsc2U7CiAgfQoKICBfTmF0aXZlU29ja2V0IGdldCBfc3RkaW5OYXRpdmVTb2NrZXQgPT4KICAgICAgKF9zdGRpbi5fc2luayBhcyBfU29ja2V0KS5fbmF0aXZlU29ja2V0OwogIF9OYXRpdmVTb2NrZXQgZ2V0IF9zdGRvdXROYXRpdmVTb2NrZXQgPT4KICAgICAgKF9zdGRvdXQuX3N0cmVhbSBhcyBfU29ja2V0KS5fbmF0aXZlU29ja2V0OwogIF9OYXRpdmVTb2NrZXQgZ2V0IF9zdGRlcnJOYXRpdmVTb2NrZXQgPT4KICAgICAgKF9zdGRlcnIuX3N0cmVhbSBhcyBfU29ja2V0KS5fbmF0aXZlU29ja2V0OwoKICBzdGF0aWMgYm9vbCBfbW9kZUlzQXR0YWNoZWQoUHJvY2Vzc1N0YXJ0TW9kZSBtb2RlKSB7CiAgICByZXR1cm4gKG1vZGUgPT0gUHJvY2Vzc1N0YXJ0TW9kZS5ub3JtYWwpIHx8CiAgICAgICAgKG1vZGUgPT0gUHJvY2Vzc1N0YXJ0TW9kZS5pbmhlcml0U3RkaW8pOwogIH0KCiAgc3RhdGljIGJvb2wgX21vZGVIYXNTdGRpbyhQcm9jZXNzU3RhcnRNb2RlIG1vZGUpIHsKICAgIHJldHVybiAobW9kZSA9PSBQcm9jZXNzU3RhcnRNb2RlLm5vcm1hbCkgfHwKICAgICAgICAobW9kZSA9PSBQcm9jZXNzU3RhcnRNb2RlLmRldGFjaGVkV2l0aFN0ZGlvKTsKICB9CgogIHN0YXRpYyBTdHJpbmcgX2dldFNoZWxsQ29tbWFuZCgpIHsKICAgIGlmIChQbGF0Zm9ybS5pc1dpbmRvd3MpIHsKICAgICAgcmV0dXJuICdjbWQuZXhlJzsKICAgIH0KICAgIHJldHVybiAnL2Jpbi9zaCc7CiAgfQoKICBzdGF0aWMgTGlzdDxTdHJpbmc+IF9nZXRTaGVsbEFyZ3VtZW50cygKICAgICAgU3RyaW5nIGV4ZWN1dGFibGUsIExpc3Q8U3RyaW5nPiBhcmd1bWVudHMpIHsKICAgIExpc3Q8U3RyaW5nPiBzaGVsbEFyZ3VtZW50cyA9IFtdOwogICAgaWYgKFBsYXRmb3JtLmlzV2luZG93cykgewogICAgICBzaGVsbEFyZ3VtZW50cy5hZGQoJy9jJyk7CiAgICAgIHNoZWxsQXJndW1lbnRzLmFkZChleGVjdXRhYmxlKTsKICAgICAgZm9yICh2YXIgYXJnIGluIGFyZ3VtZW50cykgewogICAgICAgIHNoZWxsQXJndW1lbnRzLmFkZChhcmcpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB2YXIgY29tbWFuZExpbmUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgIGV4ZWN1dGFibGUgPSBleGVjdXRhYmxlLnJlcGxhY2VBbGwoIiciLCAiJ1wiJ1wiJyIpOwogICAgICBjb21tYW5kTGluZS53cml0ZSgiJyRleGVjdXRhYmxlJyIpOwogICAgICBzaGVsbEFyZ3VtZW50cy5hZGQoIi1jIik7CiAgICAgIGZvciAodmFyIGFyZyBpbiBhcmd1bWVudHMpIHsKICAgICAgICBhcmcgPSBhcmcucmVwbGFjZUFsbCgiJyIsICInXCInXCInIik7CiAgICAgICAgY29tbWFuZExpbmUud3JpdGUoIiAnJGFyZyciKTsKICAgICAgfQogICAgICBzaGVsbEFyZ3VtZW50cy5hZGQoY29tbWFuZExpbmUudG9TdHJpbmcoKSk7CiAgICB9CiAgICByZXR1cm4gc2hlbGxBcmd1bWVudHM7CiAgfQoKICBTdHJpbmcgX3dpbmRvd3NBcmd1bWVudEVzY2FwZShTdHJpbmcgYXJndW1lbnQpIHsKICAgIHZhciByZXN1bHQgPSBhcmd1bWVudDsKICAgIGlmIChhcmd1bWVudC5jb250YWlucygnXHQnKSB8fAogICAgICAgIGFyZ3VtZW50LmNvbnRhaW5zKCcgJykgfHwKICAgICAgICBhcmd1bWVudC5jb250YWlucygnIicpKSB7CiAgICAgIC8vIFByb2R1Y2Ugc29tZXRoaW5nIHRoYXQgdGhlIEMgcnVudGltZSBvbiBXaW5kb3dzIHdpbGwgcGFyc2UKICAgICAgLy8gYmFjayBhcyB0aGlzIHN0cmluZy4KCiAgICAgIC8vIFJlcGxhY2UgYW55IG51bWJlciBvZiAnXCcgZm9sbG93ZWQgYnkgJyInIHdpdGgKICAgICAgLy8gdHdpY2UgYXMgbWFueSAnXCcgZm9sbG93ZWQgYnkgJ1wiJy4KICAgICAgdmFyIGJhY2tzbGFzaCA9ICdcXCcuY29kZVVuaXRBdCgwKTsKICAgICAgdmFyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICB2YXIgbmV4dFBvcyA9IDA7CiAgICAgIHZhciBxdW90ZVBvcyA9IGFyZ3VtZW50LmluZGV4T2YoJyInLCBuZXh0UG9zKTsKICAgICAgd2hpbGUgKHF1b3RlUG9zICE9IC0xKSB7CiAgICAgICAgdmFyIG51bUJhY2tzbGFzaCA9IDA7CiAgICAgICAgdmFyIHBvcyA9IHF1b3RlUG9zIC0gMTsKICAgICAgICB3aGlsZSAocG9zID49IDAgJiYgYXJndW1lbnQuY29kZVVuaXRBdChwb3MpID09IGJhY2tzbGFzaCkgewogICAgICAgICAgbnVtQmFja3NsYXNoKys7CiAgICAgICAgICBwb3MtLTsKICAgICAgICB9CiAgICAgICAgc2Iud3JpdGUoYXJndW1lbnQuc3Vic3RyaW5nKG5leHRQb3MsIHF1b3RlUG9zIC0gbnVtQmFja3NsYXNoKSk7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1CYWNrc2xhc2g7IGkrKykgewogICAgICAgICAgc2Iud3JpdGUocidcXCcpOwogICAgICAgIH0KICAgICAgICBzYi53cml0ZShyJ1wiJyk7CiAgICAgICAgbmV4dFBvcyA9IHF1b3RlUG9zICsgMTsKICAgICAgICBxdW90ZVBvcyA9IGFyZ3VtZW50LmluZGV4T2YoJyInLCBuZXh0UG9zKTsKICAgICAgfQogICAgICBzYi53cml0ZShhcmd1bWVudC5zdWJzdHJpbmcobmV4dFBvcywgYXJndW1lbnQubGVuZ3RoKSk7CiAgICAgIHJlc3VsdCA9IHNiLnRvU3RyaW5nKCk7CgogICAgICAvLyBBZGQgJyInIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBhbmQgcmVwbGFjZSBhbGwgJ1wnIGF0CiAgICAgIC8vIHRoZSBlbmQgd2l0aCB0d28gJ1wnLgogICAgICBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoJyInKTsKICAgICAgc2Iud3JpdGUocmVzdWx0KTsKICAgICAgbmV4dFBvcyA9IGFyZ3VtZW50Lmxlbmd0aCAtIDE7CiAgICAgIHdoaWxlIChhcmd1bWVudC5jb2RlVW5pdEF0KG5leHRQb3MpID09IGJhY2tzbGFzaCkgewogICAgICAgIHNiLndyaXRlKCdcXCcpOwogICAgICAgIG5leHRQb3MtLTsKICAgICAgfQogICAgICBzYi53cml0ZSgnIicpOwogICAgICByZXN1bHQgPSBzYi50b1N0cmluZygpOwogICAgfQoKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBpbnQgX2ludEZyb21CeXRlcyhMaXN0PGludD4gYnl0ZXMsIGludCBvZmZzZXQpIHsKICAgIHJldHVybiAoYnl0ZXNbb2Zmc2V0XSArCiAgICAgICAgKGJ5dGVzW29mZnNldCArIDFdIDw8IDgpICsKICAgICAgICAoYnl0ZXNbb2Zmc2V0ICsgMl0gPDwgMTYpICsKICAgICAgICAoYnl0ZXNbb2Zmc2V0ICsgM10gPDwgMjQpKTsKICB9CgogIEZ1dHVyZTxQcm9jZXNzPiBfc3RhcnQoKSB7CiAgICB2YXIgY29tcGxldGVyID0gbmV3IENvbXBsZXRlcjxQcm9jZXNzPigpOwogICAgaWYgKF9tb2RlSXNBdHRhY2hlZChfbW9kZSkpIHsKICAgICAgX2V4aXRDb2RlID0gbmV3IENvbXBsZXRlcjxpbnQ+KCk7CiAgICB9CiAgICAvLyBUT0RPKGFnZXIpOiBNYWtlIHRoZSBhY3R1YWwgcHJvY2VzcyBzdGFydGluZyByZWFsbHkgYXN5bmMgaW5zdGVhZCBvZgogICAgLy8gc2ltdWxhdGluZyBpdCB3aXRoIGEgdGltZXIuCiAgICBUaW1lci5ydW4oKCkgewogICAgICB2YXIgc3RhdHVzID0gbmV3IF9Qcm9jZXNzU3RhcnRTdGF0dXMoKTsKICAgICAgYm9vbCBzdWNjZXNzID0gX3N0YXJ0TmF0aXZlKAogICAgICAgICAgX05hbWVzcGFjZS5fbmFtZXNwYWNlLAogICAgICAgICAgX3BhdGgsCiAgICAgICAgICBfYXJndW1lbnRzLAogICAgICAgICAgX3dvcmtpbmdEaXJlY3RvcnksCiAgICAgICAgICBfZW52aXJvbm1lbnQsCiAgICAgICAgICBfbW9kZS5fbW9kZSwKICAgICAgICAgIF9tb2RlSGFzU3RkaW8oX21vZGUpID8gX3N0ZGluTmF0aXZlU29ja2V0IDogbnVsbCwKICAgICAgICAgIF9tb2RlSGFzU3RkaW8oX21vZGUpID8gX3N0ZG91dE5hdGl2ZVNvY2tldCA6IG51bGwsCiAgICAgICAgICBfbW9kZUhhc1N0ZGlvKF9tb2RlKSA/IF9zdGRlcnJOYXRpdmVTb2NrZXQgOiBudWxsLAogICAgICAgICAgX21vZGVJc0F0dGFjaGVkKF9tb2RlKSA/IF9leGl0SGFuZGxlci5fbmF0aXZlU29ja2V0IDogbnVsbCwKICAgICAgICAgIHN0YXR1cyk7CiAgICAgIGlmICghc3VjY2VzcykgewogICAgICAgIGNvbXBsZXRlci5jb21wbGV0ZUVycm9yKG5ldyBQcm9jZXNzRXhjZXB0aW9uKAogICAgICAgICAgICBfcGF0aCwgX2FyZ3VtZW50cywgc3RhdHVzLl9lcnJvck1lc3NhZ2UsIHN0YXR1cy5fZXJyb3JDb2RlKSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBfc3RhcnRlZCA9IHRydWU7CiAgICAgIF9yZXNvdXJjZUluZm8gPSBuZXcgX1Byb2Nlc3NSZXNvdXJjZUluZm8odGhpcyk7CgogICAgICAvLyBTZXR1cCBhbiBleGl0IGhhbmRsZXIgdG8gaGFuZGxlIGludGVybmFsIGNsZWFudXAgYW5kIHBvc3NpYmxlCiAgICAgIC8vIGNhbGxiYWNrIHdoZW4gYSBwcm9jZXNzIHRlcm1pbmF0ZXMuCiAgICAgIGlmIChfbW9kZUlzQXR0YWNoZWQoX21vZGUpKSB7CiAgICAgICAgaW50IGV4aXREYXRhUmVhZCA9IDA7CiAgICAgICAgZmluYWwgaW50IEVYSVRfREFUQV9TSVpFID0gODsKICAgICAgICBMaXN0PGludD4gZXhpdERhdGFCdWZmZXIgPSBuZXcgTGlzdDxpbnQ+KEVYSVRfREFUQV9TSVpFKTsKICAgICAgICBfZXhpdEhhbmRsZXIubGlzdGVuKChkYXRhKSB7CiAgICAgICAgICBpbnQgZXhpdENvZGUoTGlzdDxpbnQ+IGludHMpIHsKICAgICAgICAgICAgdmFyIGNvZGUgPSBfaW50RnJvbUJ5dGVzKGludHMsIDApOwogICAgICAgICAgICB2YXIgbmVnYXRpdmUgPSBfaW50RnJvbUJ5dGVzKGludHMsIDQpOwogICAgICAgICAgICBhc3NlcnQobmVnYXRpdmUgPT0gMCB8fCBuZWdhdGl2ZSA9PSAxKTsKICAgICAgICAgICAgcmV0dXJuIChuZWdhdGl2ZSA9PSAwKSA/IGNvZGUgOiAtY29kZTsKICAgICAgICAgIH0KCiAgICAgICAgICB2b2lkIGhhbmRsZUV4aXQoKSB7CiAgICAgICAgICAgIF9lbmRlZCA9IHRydWU7CiAgICAgICAgICAgIF9leGl0Q29kZS5jb21wbGV0ZShleGl0Q29kZShleGl0RGF0YUJ1ZmZlcikpOwogICAgICAgICAgICAvLyBLaWxsIHN0ZGluLCBoZWxwaW5nIGhhbmQgaWYgdGhlIHVzZXIgZm9yZ290IHRvIGRvIGl0LgogICAgICAgICAgICBpZiAoX21vZGVIYXNTdGRpbyhfbW9kZSkpIHsKICAgICAgICAgICAgICAoX3N0ZGluLl9zaW5rIGFzIF9Tb2NrZXQpLmRlc3Ryb3koKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfcmVzb3VyY2VJbmZvLnN0b3BwZWQoKTsKICAgICAgICAgIH0KCiAgICAgICAgICBleGl0RGF0YUJ1ZmZlci5zZXRSYW5nZSgKICAgICAgICAgICAgICBleGl0RGF0YVJlYWQsIGV4aXREYXRhUmVhZCArIGRhdGEubGVuZ3RoLCBkYXRhKTsKICAgICAgICAgIGV4aXREYXRhUmVhZCArPSBkYXRhLmxlbmd0aDsKICAgICAgICAgIGlmIChleGl0RGF0YVJlYWQgPT0gRVhJVF9EQVRBX1NJWkUpIHsKICAgICAgICAgICAgaGFuZGxlRXhpdCgpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CgogICAgICBjb21wbGV0ZXIuY29tcGxldGUodGhpcyk7CiAgICB9KTsKICAgIHJldHVybiBjb21wbGV0ZXIuZnV0dXJlOwogIH0KCiAgUHJvY2Vzc1Jlc3VsdCBfcnVuQW5kV2FpdChFbmNvZGluZyBzdGRvdXRFbmNvZGluZywgRW5jb2Rpbmcgc3RkZXJyRW5jb2RpbmcpIHsKICAgIHZhciBzdGF0dXMgPSBuZXcgX1Byb2Nlc3NTdGFydFN0YXR1cygpOwogICAgX2V4aXRDb2RlID0gbmV3IENvbXBsZXRlcjxpbnQ+KCk7CiAgICBib29sIHN1Y2Nlc3MgPSBfc3RhcnROYXRpdmUoCiAgICAgICAgX05hbWVzcGFjZS5fbmFtZXNwYWNlLAogICAgICAgIF9wYXRoLAogICAgICAgIF9hcmd1bWVudHMsCiAgICAgICAgX3dvcmtpbmdEaXJlY3RvcnksCiAgICAgICAgX2Vudmlyb25tZW50LAogICAgICAgIFByb2Nlc3NTdGFydE1vZGUubm9ybWFsLl9tb2RlLAogICAgICAgIF9zdGRpbk5hdGl2ZVNvY2tldCwKICAgICAgICBfc3Rkb3V0TmF0aXZlU29ja2V0LAogICAgICAgIF9zdGRlcnJOYXRpdmVTb2NrZXQsCiAgICAgICAgX2V4aXRIYW5kbGVyLl9uYXRpdmVTb2NrZXQsCiAgICAgICAgc3RhdHVzKTsKICAgIGlmICghc3VjY2VzcykgewogICAgICB0aHJvdyBuZXcgUHJvY2Vzc0V4Y2VwdGlvbigKICAgICAgICAgIF9wYXRoLCBfYXJndW1lbnRzLCBzdGF0dXMuX2Vycm9yTWVzc2FnZSwgc3RhdHVzLl9lcnJvckNvZGUpOwogICAgfQoKICAgIF9yZXNvdXJjZUluZm8gPSBuZXcgX1Byb2Nlc3NSZXNvdXJjZUluZm8odGhpcyk7CgogICAgdmFyIHJlc3VsdCA9IF93YWl0KF9zdGRpbk5hdGl2ZVNvY2tldCwgX3N0ZG91dE5hdGl2ZVNvY2tldCwKICAgICAgICBfc3RkZXJyTmF0aXZlU29ja2V0LCBfZXhpdEhhbmRsZXIuX25hdGl2ZVNvY2tldCk7CgogICAgZ2V0T3V0cHV0KG91dHB1dCwgZW5jb2RpbmcpIHsKICAgICAgaWYgKGVuY29kaW5nID09IG51bGwpIHJldHVybiBvdXRwdXQ7CiAgICAgIHJldHVybiBlbmNvZGluZy5kZWNvZGUob3V0cHV0KTsKICAgIH0KCiAgICBfcmVzb3VyY2VJbmZvLnN0b3BwZWQoKTsKCiAgICByZXR1cm4gbmV3IFByb2Nlc3NSZXN1bHQoCiAgICAgICAgcmVzdWx0WzBdLAogICAgICAgIHJlc3VsdFsxXSwKICAgICAgICBnZXRPdXRwdXQocmVzdWx0WzJdLCBzdGRvdXRFbmNvZGluZyksCiAgICAgICAgZ2V0T3V0cHV0KHJlc3VsdFszXSwgc3RkZXJyRW5jb2RpbmcpKTsKICB9CgogIGJvb2wgX3N0YXJ0TmF0aXZlKAogICAgICBfTmFtZXNwYWNlIG5hbWVzcGFjZSwKICAgICAgU3RyaW5nIHBhdGgsCiAgICAgIExpc3Q8U3RyaW5nPiBhcmd1bWVudHMsCiAgICAgIFN0cmluZyB3b3JraW5nRGlyZWN0b3J5LAogICAgICBMaXN0PFN0cmluZz4gZW52aXJvbm1lbnQsCiAgICAgIGludCBtb2RlLAogICAgICBfTmF0aXZlU29ja2V0IHN0ZGluLAogICAgICBfTmF0aXZlU29ja2V0IHN0ZG91dCwKICAgICAgX05hdGl2ZVNvY2tldCBzdGRlcnIsCiAgICAgIF9OYXRpdmVTb2NrZXQgZXhpdEhhbmRsZXIsCiAgICAgIF9Qcm9jZXNzU3RhcnRTdGF0dXMgc3RhdHVzKSBuYXRpdmUgIlByb2Nlc3NfU3RhcnQiOwoKICBfd2FpdChfTmF0aXZlU29ja2V0IHN0ZGluLCBfTmF0aXZlU29ja2V0IHN0ZG91dCwgX05hdGl2ZVNvY2tldCBzdGRlcnIsCiAgICAgIF9OYXRpdmVTb2NrZXQgZXhpdEhhbmRsZXIpIG5hdGl2ZSAiUHJvY2Vzc19XYWl0IjsKCiAgU3RyZWFtPExpc3Q8aW50Pj4gZ2V0IHN0ZG91dCB7CiAgICByZXR1cm4gX3N0ZG91dDsKICB9CgogIFN0cmVhbTxMaXN0PGludD4+IGdldCBzdGRlcnIgewogICAgcmV0dXJuIF9zdGRlcnI7CiAgfQoKICBJT1NpbmsgZ2V0IHN0ZGluIHsKICAgIHJldHVybiBfc3RkaW47CiAgfQoKICBGdXR1cmU8aW50PiBnZXQgZXhpdENvZGUgPT4gX2V4aXRDb2RlICE9IG51bGwgPyBfZXhpdENvZGUuZnV0dXJlIDogbnVsbDsKCiAgYm9vbCBraWxsKFtQcm9jZXNzU2lnbmFsIHNpZ25hbCA9IFByb2Nlc3NTaWduYWwuc2lndGVybV0pIHsKICAgIGlmIChzaWduYWwgaXMhIFByb2Nlc3NTaWduYWwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkFyZ3VtZW50ICdzaWduYWwnIG11c3QgYmUgYSBQcm9jZXNzU2lnbmFsIik7CiAgICB9CiAgICBhc3NlcnQoX3N0YXJ0ZWQpOwogICAgaWYgKF9lbmRlZCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9Qcm9jZXNzVXRpbHMuX2tpbGxQaWQocGlkLCBzaWduYWwuX3NpZ25hbE51bWJlcik7CiAgfQoKICBpbnQgZ2V0IHBpZCA9PiBfUHJvY2Vzc1V0aWxzLl9waWQodGhpcyk7CgogIFN0cmluZyBfcGF0aDsKICBMaXN0PFN0cmluZz4gX2FyZ3VtZW50czsKICBTdHJpbmcgX3dvcmtpbmdEaXJlY3Rvcnk7CiAgTGlzdDxTdHJpbmc+IF9lbnZpcm9ubWVudDsKICBQcm9jZXNzU3RhcnRNb2RlIF9tb2RlOwogIC8vIFByaXZhdGUgbWV0aG9kcyBvZiBTb2NrZXQgYXJlIHVzZWQgYnkgX2luLCBfb3V0LCBhbmQgX2Vyci4KICBfU3RkU2luayBfc3RkaW47CiAgX1N0ZFN0cmVhbSBfc3Rkb3V0OwogIF9TdGRTdHJlYW0gX3N0ZGVycjsKICBfU29ja2V0IF9leGl0SGFuZGxlcjsKICBib29sIF9lbmRlZDsKICBib29sIF9zdGFydGVkOwogIENvbXBsZXRlcjxpbnQ+IF9leGl0Q29kZTsKfQoKLy8gX05vbkludGVyYWN0aXZlUHJvY2VzcyBpcyBhIHdyYXBwZXIgYXJvdW5kIGFuIGludGVyYWN0aXZlIHByb2Nlc3MKLy8gdGhhdCBidWZmZXJzIG91dHB1dCBzbyBpdCBjYW4gYmUgZGVsaXZlcmVkIHdoZW4gdGhlIHByb2Nlc3MgZXhpdHMuCi8vIF9Ob25JbnRlcmFjdGl2ZVByb2Nlc3MgaXMgdXNlZCB0byBpbXBsZW1lbnQgdGhlIFByb2Nlc3MucnVuCi8vIG1ldGhvZC4KRnV0dXJlPFByb2Nlc3NSZXN1bHQ+IF9ydW5Ob25JbnRlcmFjdGl2ZVByb2Nlc3MoCiAgICBTdHJpbmcgcGF0aCwKICAgIExpc3Q8U3RyaW5nPiBhcmd1bWVudHMsCiAgICBTdHJpbmcgd29ya2luZ0RpcmVjdG9yeSwKICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQsCiAgICBib29sIGluY2x1ZGVQYXJlbnRFbnZpcm9ubWVudCwKICAgIGJvb2wgcnVuSW5TaGVsbCwKICAgIEVuY29kaW5nIHN0ZG91dEVuY29kaW5nLAogICAgRW5jb2Rpbmcgc3RkZXJyRW5jb2RpbmcpIHsKICAvLyBTdGFydCB0aGUgdW5kZXJseWluZyBwcm9jZXNzLgogIHJldHVybiBQcm9jZXNzLnN0YXJ0KHBhdGgsIGFyZ3VtZW50cywKICAgICAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHdvcmtpbmdEaXJlY3RvcnksCiAgICAgICAgICBlbnZpcm9ubWVudDogZW52aXJvbm1lbnQsCiAgICAgICAgICBpbmNsdWRlUGFyZW50RW52aXJvbm1lbnQ6IGluY2x1ZGVQYXJlbnRFbnZpcm9ubWVudCwKICAgICAgICAgIHJ1bkluU2hlbGw6IHJ1bkluU2hlbGwpCiAgICAgIC50aGVuKChQcm9jZXNzIHApIHsKICAgIGludCBwaWQgPSBwLnBpZDsKCiAgICAvLyBNYWtlIHN1cmUgdGhlIHByb2Nlc3Mgc3RkaW4gaXMgY2xvc2VkLgogICAgcC5zdGRpbi5jbG9zZSgpOwoKICAgIC8vIFNldHVwIHN0ZG91dCBhbmQgc3RkZXJyIGhhbmRsaW5nLgogICAgRnV0dXJlIGZvbGRTdHJlYW0oU3RyZWFtPExpc3Q8aW50Pj4gc3RyZWFtLCBFbmNvZGluZyBlbmNvZGluZykgewogICAgICBpZiAoZW5jb2RpbmcgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBzdHJlYW0KICAgICAgICAgICAgLmZvbGQobmV3IEJ5dGVzQnVpbGRlcigpLCAoYnVpbGRlciwgZGF0YSkgPT4gYnVpbGRlci4uYWRkKGRhdGEpKQogICAgICAgICAgICAudGhlbigoYnVpbGRlcikgPT4gYnVpbGRlci50YWtlQnl0ZXMoKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHN0cmVhbS50cmFuc2Zvcm0oZW5jb2RpbmcuZGVjb2RlcikuZm9sZChuZXcgU3RyaW5nQnVmZmVyKCksCiAgICAgICAgICAgIChidWYsIGRhdGEpIHsKICAgICAgICAgIGJ1Zi53cml0ZShkYXRhKTsKICAgICAgICAgIHJldHVybiBidWY7CiAgICAgICAgfSkudGhlbigoc2IpID0+IHNiLnRvU3RyaW5nKCkpOwogICAgICB9CiAgICB9CgogICAgRnV0dXJlIHN0ZG91dCA9IGZvbGRTdHJlYW0ocC5zdGRvdXQsIHN0ZG91dEVuY29kaW5nKTsKICAgIEZ1dHVyZSBzdGRlcnIgPSBmb2xkU3RyZWFtKHAuc3RkZXJyLCBzdGRlcnJFbmNvZGluZyk7CgogICAgcmV0dXJuIEZ1dHVyZS53YWl0KFtwLmV4aXRDb2RlLCBzdGRvdXQsIHN0ZGVycl0pLnRoZW4oKHJlc3VsdCkgewogICAgICByZXR1cm4gbmV3IFByb2Nlc3NSZXN1bHQocGlkLCByZXN1bHRbMF0sIHJlc3VsdFsxXSwgcmVzdWx0WzJdKTsKICAgIH0pOwogIH0pOwp9CgpQcm9jZXNzUmVzdWx0IF9ydW5Ob25JbnRlcmFjdGl2ZVByb2Nlc3NTeW5jKAogICAgU3RyaW5nIGV4ZWN1dGFibGUsCiAgICBMaXN0PFN0cmluZz4gYXJndW1lbnRzLAogICAgU3RyaW5nIHdvcmtpbmdEaXJlY3RvcnksCiAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50LAogICAgYm9vbCBpbmNsdWRlUGFyZW50RW52aXJvbm1lbnQsCiAgICBib29sIHJ1bkluU2hlbGwsCiAgICBFbmNvZGluZyBzdGRvdXRFbmNvZGluZywKICAgIEVuY29kaW5nIHN0ZGVyckVuY29kaW5nKSB7CiAgdmFyIHByb2Nlc3MgPSBuZXcgX1Byb2Nlc3NJbXBsKAogICAgICBleGVjdXRhYmxlLAogICAgICBhcmd1bWVudHMsCiAgICAgIHdvcmtpbmdEaXJlY3RvcnksCiAgICAgIGVudmlyb25tZW50LAogICAgICBpbmNsdWRlUGFyZW50RW52aXJvbm1lbnQsCiAgICAgIHJ1bkluU2hlbGwsCiAgICAgIFByb2Nlc3NTdGFydE1vZGUubm9ybWFsKTsKICByZXR1cm4gcHJvY2Vzcy5fcnVuQW5kV2FpdChzdGRvdXRFbmNvZGluZywgc3RkZXJyRW5jb2RpbmcpOwp9CoKGAE5OPAEPASABByAJTwIBByAJUQIBBxAJSiAnKx45LRQTGhUiFA8dBAEJTiAnKx4vMiYUExoVIhQYGQQBCUogJyseLzIqFBMaFSIUGBkEAQlRJEwGPgQCATsBGh4BLwsBI0EvBAE6ARM2FhJODgYORBwqIzEjCggIBAETFzESBgQBSi0rAgEiSgEHFgk3CUUJOgk5CTlGCUQqKisfMDM2ITwGKQQBTDxQBjwEAgEHFAkaHB0UBhMEAQkeIB0UBhMEATA4AgEaHCNDI0wCAU0ZRAFKJjABEBMeHiclFx0SJRlRNjcnBgEWNyEGARs+BgFLLjwZDRQGAR5GBiAoJB4cPggkID8IBgFFH0MGARczRB9JBicwIUkIJwgkMh8hRC0rCgoGASVIBhIBHyFGJUglSAYhLgYUFgQBKi8rMisyATcwMQQBNTA2BAElHhgGFgQBKjMmHiAmIyEIDSw6KiAjLiYIMgYbBAEzGyMiIkQeATgtKiMXNR8eIEQaEQpIMRsKGSAzCD4eAUEfIhglOhgTCBUeBgETBAEzHCMkJAQBHS4iKAZMIxMuIyERFh0YFzw9PUYTFjZKEAgBFzYBRy0kHiZCJSkvMzQzDAEeGzpFKDMOJQwBIz8nMBoMDAgBIAgdBAFQLCYhHw8UGxYnHB0dJBEUIkcGATQBQDoBIismBgEdAR4TEy4vBAEVHBMeHyAQGxwcIToBSTgBIRQEASEUBAEVEwQBSwE+JEwGFh4+BAErARAbHB0aQBMWFhgPERwCAUVGPwsxERwdJSMVHR8jKC4kPiIaFQEuFQEpRR4WTTUPSxobFigIBgE6OgFFRggGAgEtFxwdJSMVHR8iEhEYEyASID4CASBkYXJ0OmlvLXBhdGNoL3Byb2Nlc3NfcGF0Y2guZGFydE9vcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vYmluL3NvY2tldF9wYXRjaC5kYXJ0wAEB9C8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKLy8gcGFydCBvZiAiY29tbW9uX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIFJhd1NlcnZlclNvY2tldCB7CiAgQHBhdGNoCiAgc3RhdGljIEZ1dHVyZTxSYXdTZXJ2ZXJTb2NrZXQ+IGJpbmQoYWRkcmVzcywgaW50IHBvcnQsCiAgICAgIHtpbnQgYmFja2xvZzogMCwgYm9vbCB2Nk9ubHk6IGZhbHNlLCBib29sIHNoYXJlZDogZmFsc2V9KSB7CiAgICByZXR1cm4gX1Jhd1NlcnZlclNvY2tldC5iaW5kKGFkZHJlc3MsIHBvcnQsIGJhY2tsb2csIHY2T25seSwgc2hhcmVkKTsKICB9Cn0KCkBwYXRjaApjbGFzcyBSYXdTb2NrZXQgewogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmU8UmF3U29ja2V0PiBjb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7c291cmNlQWRkcmVzcywgRHVyYXRpb24gdGltZW91dH0pIHsKICAgIHJldHVybiBfUmF3U29ja2V0LmNvbm5lY3QoaG9zdCwgcG9ydCwgc291cmNlQWRkcmVzcywgdGltZW91dCk7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgRnV0dXJlPENvbm5lY3Rpb25UYXNrPFJhd1NvY2tldD4+IHN0YXJ0Q29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge3NvdXJjZUFkZHJlc3N9KSB7CiAgICByZXR1cm4gX1Jhd1NvY2tldC5zdGFydENvbm5lY3QoaG9zdCwgcG9ydCwgc291cmNlQWRkcmVzcyk7CiAgfQp9CgpAcGF0Y2gKY2xhc3MgUmF3U29ja2V0T3B0aW9uIHsKICBzdGF0aWMgZmluYWwgTGlzdDxpbnQ+IF9vcHRpb25zQ2FjaGUgPQogICAgICBMaXN0PGludD4oX1Jhd1NvY2tldE9wdGlvbnMudmFsdWVzLmxlbmd0aCk7CgogIEBwYXRjaAogIHN0YXRpYyBpbnQgX2dldE9wdGlvblZhbHVlKGludCBrZXkpIHsKICAgIGlmIChrZXkgPiBfUmF3U29ja2V0T3B0aW9ucy52YWx1ZXMubGVuZ3RoKSB7CiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IudmFsdWUoa2V5LCAna2V5Jyk7CiAgICB9CiAgICBfb3B0aW9uc0NhY2hlW2tleV0gPz89IF9nZXROYXRpdmVPcHRpb25WYWx1ZShrZXkpOwogICAgcmV0dXJuIF9vcHRpb25zQ2FjaGVba2V5XTsKICB9CgogIHN0YXRpYyBpbnQgX2dldE5hdGl2ZU9wdGlvblZhbHVlKGludCBrZXkpCiAgICAgIG5hdGl2ZSAiUmF3U29ja2V0T3B0aW9uX0dldE9wdGlvblZhbHVlIjsKfQoKQHBhdGNoCmNsYXNzIEludGVybmV0QWRkcmVzcyB7CiAgQHBhdGNoCiAgc3RhdGljIEludGVybmV0QWRkcmVzcyBnZXQgTE9PUEJBQ0tfSVBfVjQgewogICAgcmV0dXJuIF9JbnRlcm5ldEFkZHJlc3MubG9vcGJhY2tJUHY0OwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIEludGVybmV0QWRkcmVzcyBnZXQgTE9PUEJBQ0tfSVBfVjYgewogICAgcmV0dXJuIF9JbnRlcm5ldEFkZHJlc3MubG9vcGJhY2tJUHY2OwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIEludGVybmV0QWRkcmVzcyBnZXQgQU5ZX0lQX1Y0IHsKICAgIHJldHVybiBfSW50ZXJuZXRBZGRyZXNzLmFueUlQdjQ7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgSW50ZXJuZXRBZGRyZXNzIGdldCBBTllfSVBfVjYgewogICAgcmV0dXJuIF9JbnRlcm5ldEFkZHJlc3MuYW55SVB2NjsKICB9CgogIEBwYXRjaAogIGZhY3RvcnkgSW50ZXJuZXRBZGRyZXNzKFN0cmluZyBhZGRyZXNzKSB7CiAgICByZXR1cm4gbmV3IF9JbnRlcm5ldEFkZHJlc3MucGFyc2UoYWRkcmVzcyk7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgRnV0dXJlPExpc3Q8SW50ZXJuZXRBZGRyZXNzPj4gbG9va3VwKFN0cmluZyBob3N0LAogICAgICB7SW50ZXJuZXRBZGRyZXNzVHlwZSB0eXBlOiBJbnRlcm5ldEFkZHJlc3NUeXBlLmFueX0pIHsKICAgIHJldHVybiBfTmF0aXZlU29ja2V0Lmxvb2t1cChob3N0LCB0eXBlOiB0eXBlKTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBJbnRlcm5ldEFkZHJlc3MgX2Nsb25lV2l0aE5ld0hvc3QoCiAgICAgIEludGVybmV0QWRkcmVzcyBhZGRyZXNzLCBTdHJpbmcgaG9zdCkgewogICAgcmV0dXJuIChhZGRyZXNzIGFzIF9JbnRlcm5ldEFkZHJlc3MpLl9jbG9uZVdpdGhOZXdIb3N0KGhvc3QpOwogIH0KfQoKQHBhdGNoCmNsYXNzIE5ldHdvcmtJbnRlcmZhY2UgewogIEBwYXRjaAogIHN0YXRpYyBib29sIGdldCBsaXN0U3VwcG9ydGVkIHsKICAgIHJldHVybiBfbGlzdFN1cHBvcnRlZCgpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIEZ1dHVyZTxMaXN0PE5ldHdvcmtJbnRlcmZhY2U+PiBsaXN0KAogICAgICB7Ym9vbCBpbmNsdWRlTG9vcGJhY2s6IGZhbHNlLAogICAgICBib29sIGluY2x1ZGVMaW5rTG9jYWw6IGZhbHNlLAogICAgICBJbnRlcm5ldEFkZHJlc3NUeXBlIHR5cGU6IEludGVybmV0QWRkcmVzc1R5cGUuYW55fSkgewogICAgcmV0dXJuIF9OYXRpdmVTb2NrZXQubGlzdEludGVyZmFjZXMoCiAgICAgICAgaW5jbHVkZUxvb3BiYWNrOiBpbmNsdWRlTG9vcGJhY2ssCiAgICAgICAgaW5jbHVkZUxpbmtMb2NhbDogaW5jbHVkZUxpbmtMb2NhbCwKICAgICAgICB0eXBlOiB0eXBlKTsKICB9CgogIHN0YXRpYyBib29sIF9saXN0U3VwcG9ydGVkKCkgbmF0aXZlICJOZXR3b3JrSW50ZXJmYWNlX0xpc3RTdXBwb3J0ZWQiOwp9Cgp2b2lkIF90aHJvd09uQmFkUG9ydChpbnQgcG9ydCkgewogIGlmICgocG9ydCA9PSBudWxsKSB8fCAocG9ydCA8IDApIHx8IChwb3J0ID4gMHhGRkZGKSkgewogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkludmFsaWQgcG9ydCAkcG9ydCIpOwogIH0KfQoKdm9pZCBfdGhyb3dPbkJhZFR0bChpbnQgdHRsKSB7CiAgaWYgKHR0bCA9PSBudWxsIHx8IHR0bCA8IDEgfHwgdHRsID4gMjU1KSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignSW52YWxpZCB0dGwgJHR0bCcpOwogIH0KfQoKY2xhc3MgX0ludGVybmV0QWRkcmVzcyBpbXBsZW1lbnRzIEludGVybmV0QWRkcmVzcyB7CiAgc3RhdGljIGNvbnN0IGludCBfYWRkcmVzc0xvb3BiYWNrSVB2NCA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBfYWRkcmVzc0xvb3BiYWNrSVB2NiA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBfYWRkcmVzc0FueUlQdjQgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgX2FkZHJlc3NBbnlJUHY2ID0gMzsKICBzdGF0aWMgY29uc3QgaW50IF9JUHY0QWRkckxlbmd0aCA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBfSVB2NkFkZHJMZW5ndGggPSAxNjsKCiAgc3RhdGljIF9JbnRlcm5ldEFkZHJlc3MgbG9vcGJhY2tJUHY0ID0KICAgICAgX0ludGVybmV0QWRkcmVzcy5maXhlZChfYWRkcmVzc0xvb3BiYWNrSVB2NCk7CiAgc3RhdGljIF9JbnRlcm5ldEFkZHJlc3MgbG9vcGJhY2tJUHY2ID0KICAgICAgX0ludGVybmV0QWRkcmVzcy5maXhlZChfYWRkcmVzc0xvb3BiYWNrSVB2Nik7CiAgc3RhdGljIF9JbnRlcm5ldEFkZHJlc3MgYW55SVB2NCA9IF9JbnRlcm5ldEFkZHJlc3MuZml4ZWQoX2FkZHJlc3NBbnlJUHY0KTsKICBzdGF0aWMgX0ludGVybmV0QWRkcmVzcyBhbnlJUHY2ID0gX0ludGVybmV0QWRkcmVzcy5maXhlZChfYWRkcmVzc0FueUlQdjYpOwoKICBmaW5hbCBTdHJpbmcgYWRkcmVzczsKICBmaW5hbCBTdHJpbmcgX2hvc3Q7CiAgZmluYWwgVWludDhMaXN0IF9pbl9hZGRyOwogIGZpbmFsIGludCBfc2NvcGVfaWQ7CgogIEludGVybmV0QWRkcmVzc1R5cGUgZ2V0IHR5cGUgPT4gX2luX2FkZHIubGVuZ3RoID09IF9JUHY0QWRkckxlbmd0aAogICAgICA/IEludGVybmV0QWRkcmVzc1R5cGUuSVB2NAogICAgICA6IEludGVybmV0QWRkcmVzc1R5cGUuSVB2NjsKCiAgU3RyaW5nIGdldCBob3N0ID0+IF9ob3N0ICE9IG51bGwgPyBfaG9zdCA6IGFkZHJlc3M7CgogIFVpbnQ4TGlzdCBnZXQgcmF3QWRkcmVzcyA9PiBuZXcgVWludDhMaXN0LmZyb21MaXN0KF9pbl9hZGRyKTsKCiAgYm9vbCBnZXQgaXNMb29wYmFjayB7CiAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgY2FzZSBJbnRlcm5ldEFkZHJlc3NUeXBlLklQdjQ6CiAgICAgICAgcmV0dXJuIF9pbl9hZGRyWzBdID09IDEyNzsKCiAgICAgIGNhc2UgSW50ZXJuZXRBZGRyZXNzVHlwZS5JUHY2OgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX0lQdjZBZGRyTGVuZ3RoIC0gMTsgaSsrKSB7CiAgICAgICAgICBpZiAoX2luX2FkZHJbaV0gIT0gMCkgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gX2luX2FkZHJbX0lQdjZBZGRyTGVuZ3RoIC0gMV0gPT0gMTsKICAgIH0KICB9CgogIGJvb2wgZ2V0IGlzTGlua0xvY2FsIHsKICAgIHN3aXRjaCAodHlwZSkgewogICAgICBjYXNlIEludGVybmV0QWRkcmVzc1R5cGUuSVB2NDoKICAgICAgICAvLyBDaGVja2luZyBmb3IgMTY5LjI1NC4wLjAvMTYuCiAgICAgICAgcmV0dXJuIF9pbl9hZGRyWzBdID09IDE2OSAmJiBfaW5fYWRkclsxXSA9PSAyNTQ7CgogICAgICBjYXNlIEludGVybmV0QWRkcmVzc1R5cGUuSVB2NjoKICAgICAgICAvLyBDaGVja2luZyBmb3IgZmU4MDo6LzEwLgogICAgICAgIHJldHVybiBfaW5fYWRkclswXSA9PSAweEZFICYmIChfaW5fYWRkclsxXSAmIDB4QjApID09IDB4ODA7CiAgICB9CiAgfQoKICBib29sIGdldCBpc011bHRpY2FzdCB7CiAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgY2FzZSBJbnRlcm5ldEFkZHJlc3NUeXBlLklQdjQ6CiAgICAgICAgLy8gQ2hlY2tpbmcgZm9yIDIyNC4wLjAuMCB0aHJvdWdoIDIzOS4yNTUuMjU1LjI1NS4KICAgICAgICByZXR1cm4gX2luX2FkZHJbMF0gPj0gMjI0ICYmIF9pbl9hZGRyWzBdIDwgMjQwOwoKICAgICAgY2FzZSBJbnRlcm5ldEFkZHJlc3NUeXBlLklQdjY6CiAgICAgICAgLy8gQ2hlY2tpbmcgZm9yIGZmMDA6Oi84LgogICAgICAgIHJldHVybiBfaW5fYWRkclswXSA9PSAweEZGOwogICAgfQogIH0KCiAgRnV0dXJlPEludGVybmV0QWRkcmVzcz4gcmV2ZXJzZSgpID0+IF9OYXRpdmVTb2NrZXQucmV2ZXJzZUxvb2t1cCh0aGlzKTsKCiAgX0ludGVybmV0QWRkcmVzcyh0aGlzLmFkZHJlc3MsIHRoaXMuX2hvc3QsIHRoaXMuX2luX2FkZHIsCiAgICAgIFt0aGlzLl9zY29wZV9pZCA9IDBdKTsKCiAgZmFjdG9yeSBfSW50ZXJuZXRBZGRyZXNzLnBhcnNlKFN0cmluZyBhZGRyZXNzKSB7CiAgICBpZiAoYWRkcmVzcyBpcyEgU3RyaW5nKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJJbnZhbGlkIGludGVybmV0IGFkZHJlc3MgJGFkZHJlc3MiKTsKICAgIH0KICAgIHZhciBpbl9hZGRyID0gX3BhcnNlKGFkZHJlc3MpOwogICAgaWYgKGluX2FkZHIgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiSW52YWxpZCBpbnRlcm5ldCBhZGRyZXNzICRhZGRyZXNzIik7CiAgICB9CiAgICByZXR1cm4gbmV3IF9JbnRlcm5ldEFkZHJlc3MoYWRkcmVzcywgbnVsbCwgaW5fYWRkcik7CiAgfQoKICBmYWN0b3J5IF9JbnRlcm5ldEFkZHJlc3MuZml4ZWQoaW50IGlkKSB7CiAgICBzd2l0Y2ggKGlkKSB7CiAgICAgIGNhc2UgX2FkZHJlc3NMb29wYmFja0lQdjQ6CiAgICAgICAgdmFyIGluX2FkZHIgPSBuZXcgVWludDhMaXN0KF9JUHY0QWRkckxlbmd0aCk7CiAgICAgICAgaW5fYWRkclswXSA9IDEyNzsKICAgICAgICBpbl9hZGRyW19JUHY0QWRkckxlbmd0aCAtIDFdID0gMTsKICAgICAgICByZXR1cm4gbmV3IF9JbnRlcm5ldEFkZHJlc3MoIjEyNy4wLjAuMSIsIG51bGwsIGluX2FkZHIpOwogICAgICBjYXNlIF9hZGRyZXNzTG9vcGJhY2tJUHY2OgogICAgICAgIHZhciBpbl9hZGRyID0gbmV3IFVpbnQ4TGlzdChfSVB2NkFkZHJMZW5ndGgpOwogICAgICAgIGluX2FkZHJbX0lQdjZBZGRyTGVuZ3RoIC0gMV0gPSAxOwogICAgICAgIHJldHVybiBuZXcgX0ludGVybmV0QWRkcmVzcygiOjoxIiwgbnVsbCwgaW5fYWRkcik7CiAgICAgIGNhc2UgX2FkZHJlc3NBbnlJUHY0OgogICAgICAgIHZhciBpbl9hZGRyID0gbmV3IFVpbnQ4TGlzdChfSVB2NEFkZHJMZW5ndGgpOwogICAgICAgIHJldHVybiBuZXcgX0ludGVybmV0QWRkcmVzcygiMC4wLjAuMCIsICIwLjAuMC4wIiwgaW5fYWRkcik7CiAgICAgIGNhc2UgX2FkZHJlc3NBbnlJUHY2OgogICAgICAgIHZhciBpbl9hZGRyID0gbmV3IFVpbnQ4TGlzdChfSVB2NkFkZHJMZW5ndGgpOwogICAgICAgIHJldHVybiBuZXcgX0ludGVybmV0QWRkcmVzcygiOjoiLCAiOjoiLCBpbl9hZGRyKTsKICAgICAgZGVmYXVsdDoKICAgICAgICBhc3NlcnQoZmFsc2UpOwogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICB9CiAgfQoKICAvLyBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIF9JbnRlcm5ldEFkZHJlc3MgcmVwbGFjaW5nIHRoZSBob3N0LgogIF9JbnRlcm5ldEFkZHJlc3MgX2Nsb25lV2l0aE5ld0hvc3QoU3RyaW5nIGhvc3QpIHsKICAgIHJldHVybiBuZXcgX0ludGVybmV0QWRkcmVzcygKICAgICAgICBhZGRyZXNzLCBob3N0LCBuZXcgVWludDhMaXN0LmZyb21MaXN0KF9pbl9hZGRyKSk7CiAgfQoKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoIShvdGhlciBpcyBfSW50ZXJuZXRBZGRyZXNzKSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKG90aGVyLnR5cGUgIT0gdHlwZSkgcmV0dXJuIGZhbHNlOwogICAgYm9vbCBlcXVhbHMgPSB0cnVlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfaW5fYWRkci5sZW5ndGggJiYgZXF1YWxzOyBpKyspIHsKICAgICAgZXF1YWxzID0gb3RoZXIuX2luX2FkZHJbaV0gPT0gX2luX2FkZHJbaV07CiAgICB9CiAgICByZXR1cm4gZXF1YWxzOwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICBpbnQgcmVzdWx0ID0gMTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX2luX2FkZHIubGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0ID0gKHJlc3VsdCAqIDMxICsgX2luX2FkZHJbaV0pICYgMHgzRkZGRkZGRjsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gIkludGVybmV0QWRkcmVzcygnJGFkZHJlc3MnLCAke3R5cGUubmFtZX0pIjsKICB9CgogIHN0YXRpYyBVaW50OExpc3QgX3BhcnNlKFN0cmluZyBhZGRyZXNzKSBuYXRpdmUgIkludGVybmV0QWRkcmVzc19QYXJzZSI7Cn0KCmNsYXNzIF9OZXR3b3JrSW50ZXJmYWNlIGltcGxlbWVudHMgTmV0d29ya0ludGVyZmFjZSB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgZmluYWwgaW50IGluZGV4OwogIGZpbmFsIExpc3Q8SW50ZXJuZXRBZGRyZXNzPiBhZGRyZXNzZXMgPSBbXTsKCiAgX05ldHdvcmtJbnRlcmZhY2UodGhpcy5uYW1lLCB0aGlzLmluZGV4KTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICJOZXR3b3JrSW50ZXJmYWNlKCckbmFtZScsICRhZGRyZXNzZXMpIjsKICB9Cn0KCi8vIFRoZSBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczEgY2Fubm90IGJlIHVzZWQgd2l0aCBhIG1peGluLCBkdWUgdG8gbWlzc2luZwovLyBpbXBsaWNpdCBjb25zdHJ1Y3Rvci4KY2xhc3MgX05hdGl2ZVNvY2tldE5hdGl2ZVdyYXBwZXIgZXh0ZW5kcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczEge30KCi8vIFRoZSBfTmF0aXZlU29ja2V0IGNsYXNzIGVuY2Fwc3VsYXRlcyBhbiBPUyBzb2NrZXQuCmNsYXNzIF9OYXRpdmVTb2NrZXQgZXh0ZW5kcyBfTmF0aXZlU29ja2V0TmF0aXZlV3JhcHBlciB3aXRoIF9TZXJ2aWNlT2JqZWN0IHsKICAvLyBCaXQgZmxhZ3MgdXNlZCB3aGVuIGNvbW11bmljYXRpbmcgYmV0d2VlbiB0aGUgZXZlbnRoYW5kbGVyIGFuZAogIC8vIGRhcnQgY29kZS4gVGhlIEVWRU5UIGZsYWdzIGFyZSB1c2VkIHRvIGluZGljYXRlIGV2ZW50cyBvZgogIC8vIGludGVyZXN0IHdoZW4gc2VuZGluZyBhIG1lc3NhZ2UgZnJvbSBkYXJ0IGNvZGUgdG8gdGhlCiAgLy8gZXZlbnRoYW5kbGVyLiBXaGVuIHJlY2VpdmluZyBhIG1lc3NhZ2UgZnJvbSB0aGUgZXZlbnRoYW5kbGVyIHRoZQogIC8vIEVWRU5UIGZsYWdzIGluZGljYXRlIHRoZSBldmVudHMgdGhhdCBhY3R1YWxseSBoYXBwZW5lZC4gVGhlCiAgLy8gQ09NTUFORCBmbGFncyBhcmUgdXNlZCB0byBzZW5kIGNvbW1hbmRzIGZyb20gZGFydCB0byB0aGUKICAvLyBldmVudGhhbmRsZXIuIENPTU1BTkQgZmxhZ3MgYXJlIG5ldmVyIHJlY2VpdmVkIGZyb20gdGhlCiAgLy8gZXZlbnRoYW5kbGVyLiBBZGRpdGlvbmFsIGZsYWdzIGFyZSB1c2VkIHRvIGNvbW11bmljYXRlIG90aGVyCiAgLy8gaW5mb3JtYXRpb24uCiAgc3RhdGljIGNvbnN0IGludCByZWFkRXZlbnQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgd3JpdGVFdmVudCA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBlcnJvckV2ZW50ID0gMjsKICBzdGF0aWMgY29uc3QgaW50IGNsb3NlZEV2ZW50ID0gMzsKICBzdGF0aWMgY29uc3QgaW50IGRlc3Ryb3llZEV2ZW50ID0gNDsKICBzdGF0aWMgY29uc3QgaW50IGZpcnN0RXZlbnQgPSByZWFkRXZlbnQ7CiAgc3RhdGljIGNvbnN0IGludCBsYXN0RXZlbnQgPSBkZXN0cm95ZWRFdmVudDsKICBzdGF0aWMgY29uc3QgaW50IGV2ZW50Q291bnQgPSBsYXN0RXZlbnQgLSBmaXJzdEV2ZW50ICsgMTsKCiAgc3RhdGljIGNvbnN0IGludCBjbG9zZUNvbW1hbmQgPSA4OwogIHN0YXRpYyBjb25zdCBpbnQgc2h1dGRvd25SZWFkQ29tbWFuZCA9IDk7CiAgc3RhdGljIGNvbnN0IGludCBzaHV0ZG93bldyaXRlQ29tbWFuZCA9IDEwOwogIC8vIFRoZSBsb3dlciBiaXRzIG9mIHJldHVyblRva2VuQ29tbWFuZCBtZXNzYWdlcyBjb250YWlucyB0aGUgbnVtYmVyCiAgLy8gb2YgdG9rZW5zIHJldHVybmVkLgogIHN0YXRpYyBjb25zdCBpbnQgcmV0dXJuVG9rZW5Db21tYW5kID0gMTE7CiAgc3RhdGljIGNvbnN0IGludCBzZXRFdmVudE1hc2tDb21tYW5kID0gMTI7CiAgc3RhdGljIGNvbnN0IGludCBmaXJzdENvbW1hbmQgPSBjbG9zZUNvbW1hbmQ7CiAgc3RhdGljIGNvbnN0IGludCBsYXN0Q29tbWFuZCA9IHNldEV2ZW50TWFza0NvbW1hbmQ7CgogIC8vIFR5cGUgZmxhZyBzZW5kIHRvIHRoZSBldmVudGhhbmRsZXIgcHJvdmlkaW5nIGFkZGl0aW9uYWwKICAvLyBpbmZvcm1hdGlvbiBvbiB0aGUgdHlwZSBvZiB0aGUgZmlsZSBkZXNjcmlwdG9yLgogIHN0YXRpYyBjb25zdCBpbnQgbGlzdGVuaW5nU29ja2V0ID0gMTY7CiAgc3RhdGljIGNvbnN0IGludCBwaXBlU29ja2V0ID0gMTc7CiAgc3RhdGljIGNvbnN0IGludCB0eXBlTm9ybWFsU29ja2V0ID0gMDsKICBzdGF0aWMgY29uc3QgaW50IHR5cGVMaXN0ZW5pbmdTb2NrZXQgPSAxIDw8IGxpc3RlbmluZ1NvY2tldDsKICBzdGF0aWMgY29uc3QgaW50IHR5cGVQaXBlID0gMSA8PCBwaXBlU29ja2V0OwogIHN0YXRpYyBjb25zdCBpbnQgdHlwZVR5cGVNYXNrID0gdHlwZUxpc3RlbmluZ1NvY2tldCB8IHBpcGVTb2NrZXQ7CgogIC8vIFByb3RvY29sIGZsYWdzLgogIC8vIEtlZXAgaW4gc3luYyB3aXRoIFNvY2tldFR5cGUgZW51bSBpbiBzb2NrZXQuaC4KICBzdGF0aWMgY29uc3QgaW50IHRjcFNvY2tldCA9IDE4OwogIHN0YXRpYyBjb25zdCBpbnQgdWRwU29ja2V0ID0gMTk7CiAgc3RhdGljIGNvbnN0IGludCBpbnRlcm5hbFNvY2tldCA9IDIwOwogIHN0YXRpYyBjb25zdCBpbnQgaW50ZXJuYWxTaWduYWxTb2NrZXQgPSAyMTsKICBzdGF0aWMgY29uc3QgaW50IHR5cGVUY3BTb2NrZXQgPSAxIDw8IHRjcFNvY2tldDsKICBzdGF0aWMgY29uc3QgaW50IHR5cGVVZHBTb2NrZXQgPSAxIDw8IHVkcFNvY2tldDsKICBzdGF0aWMgY29uc3QgaW50IHR5cGVJbnRlcm5hbFNvY2tldCA9IDEgPDwgaW50ZXJuYWxTb2NrZXQ7CiAgc3RhdGljIGNvbnN0IGludCB0eXBlSW50ZXJuYWxTaWduYWxTb2NrZXQgPSAxIDw8IGludGVybmFsU2lnbmFsU29ja2V0OwogIHN0YXRpYyBjb25zdCBpbnQgdHlwZVByb3RvY29sTWFzayA9IHR5cGVUY3BTb2NrZXQgfAogICAgICB0eXBlVWRwU29ja2V0IHwKICAgICAgdHlwZUludGVybmFsU29ja2V0IHwKICAgICAgdHlwZUludGVybmFsU2lnbmFsU29ja2V0OwoKICAvLyBOYXRpdmUgcG9ydCBtZXNzYWdlcy4KICBzdGF0aWMgY29uc3QgaG9zdE5hbWVMb29rdXBNZXNzYWdlID0gMDsKICBzdGF0aWMgY29uc3QgbGlzdEludGVyZmFjZXNNZXNzYWdlID0gMTsKICBzdGF0aWMgY29uc3QgcmV2ZXJzZUxvb2t1cE1lc3NhZ2UgPSAyOwoKICAvLyBQcm90b2NvbCBmbGFncy4KICBzdGF0aWMgY29uc3QgaW50IHByb3RvY29sSVB2NCA9IDEgPDwgMDsKICBzdGF0aWMgY29uc3QgaW50IHByb3RvY29sSVB2NiA9IDEgPDwgMTsKCiAgc3RhdGljIGNvbnN0IGludCBub3JtYWxUb2tlbkJhdGNoU2l6ZSA9IDg7CiAgc3RhdGljIGNvbnN0IGludCBsaXN0ZW5pbmdUb2tlbkJhdGNoU2l6ZSA9IDI7CgogIHN0YXRpYyBjb25zdCBEdXJhdGlvbiBfcmV0cnlEdXJhdGlvbiA9IGNvbnN0IER1cmF0aW9uKG1pbGxpc2Vjb25kczogMjUwKTsKICBzdGF0aWMgY29uc3QgRHVyYXRpb24gX3JldHJ5RHVyYXRpb25Mb29wYmFjayA9CiAgICAgIGNvbnN0IER1cmF0aW9uKG1pbGxpc2Vjb25kczogMjUpOwoKICAvLyBTb2NrZXQgY2xvc2Ugc3RhdGUKICBib29sIGlzQ2xvc2VkID0gZmFsc2U7CiAgYm9vbCBpc0Nsb3NpbmcgPSBmYWxzZTsKICBib29sIGlzQ2xvc2VkUmVhZCA9IGZhbHNlOwogIGJvb2wgY2xvc2VkUmVhZEV2ZW50U2VudCA9IGZhbHNlOwogIGJvb2wgaXNDbG9zZWRXcml0ZSA9IGZhbHNlOwogIENvbXBsZXRlciBjbG9zZUNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXIuc3luYygpOwoKICAvLyBIYW5kbGVycyBhbmQgcmVjZWl2ZSBwb3J0IGZvciBzb2NrZXQgZXZlbnRzIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIuCiAgZmluYWwgTGlzdCBldmVudEhhbmRsZXJzID0gbmV3IExpc3QoZXZlbnRDb3VudCArIDEpOwogIFJhd1JlY2VpdmVQb3J0IGV2ZW50UG9ydDsKICBib29sIGZsYWdzU2VudCA9IGZhbHNlOwoKICAvLyBUaGUgdHlwZSBmbGFncyBmb3IgdGhpcyBzb2NrZXQuCiAgZmluYWwgaW50IHR5cGVGbGFnczsKCiAgLy8gSG9sZHMgdGhlIHBvcnQgb2YgdGhlIHNvY2tldCwgMCBpZiBub3Qga25vd24uCiAgaW50IGxvY2FsUG9ydCA9IDA7CgogIC8vIEhvbGRzIHRoZSBhZGRyZXNzIHVzZWQgdG8gY29ubmVjdCBvciBiaW5kIHRoZSBzb2NrZXQuCiAgSW50ZXJuZXRBZGRyZXNzIGxvY2FsQWRkcmVzczsKCiAgaW50IGF2YWlsYWJsZSA9IDA7CgogIGludCB0b2tlbnMgPSAwOwoKICBib29sIHNlbmRSZWFkRXZlbnRzID0gZmFsc2U7CiAgYm9vbCByZWFkRXZlbnRJc3N1ZWQgPSBmYWxzZTsKCiAgYm9vbCBzZW5kV3JpdGVFdmVudHMgPSBmYWxzZTsKICBib29sIHdyaXRlRXZlbnRJc3N1ZWQgPSBmYWxzZTsKICBib29sIHdyaXRlQXZhaWxhYmxlID0gZmFsc2U7CgogIHN0YXRpYyBib29sIGNvbm5lY3RlZFJlc291cmNlSGFuZGxlciA9IGZhbHNlOwogIF9SZWFkV3JpdGVSZXNvdXJjZUluZm8gcmVzb3VyY2VJbmZvOwoKICAvLyBUaGUgb3duZXIgb2JqZWN0IGlzIHRoZSBvYmplY3QgdGhhdCB0aGUgU29ja2V0IGlzIGJlaW5nIHVzZWQgYnksIGUuZy4KICAvLyBhIEh0dHBTZXJ2ZXIsIGEgV2ViU29ja2V0IGNvbm5lY3Rpb24sIGEgcHJvY2VzcyBwaXBlLCBldGMuCiAgT2JqZWN0IG93bmVyOwoKICBzdGF0aWMgRnV0dXJlPExpc3Q8SW50ZXJuZXRBZGRyZXNzPj4gbG9va3VwKFN0cmluZyBob3N0LAogICAgICB7SW50ZXJuZXRBZGRyZXNzVHlwZSB0eXBlOiBJbnRlcm5ldEFkZHJlc3NUeXBlLmFueX0pIHsKICAgIHJldHVybiBfSU9TZXJ2aWNlLl9kaXNwYXRjaChfSU9TZXJ2aWNlLnNvY2tldExvb2t1cCwgW2hvc3QsIHR5cGUuX3ZhbHVlXSkKICAgICAgICAudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKGlzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBjcmVhdGVFcnJvcihyZXNwb25zZSwgIkZhaWxlZCBob3N0IGxvb2t1cDogJyRob3N0JyIpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiByZXNwb25zZS5za2lwKDEpLm1hcDxJbnRlcm5ldEFkZHJlc3M+KChyZXN1bHQpIHsKICAgICAgICAgIHZhciB0eXBlID0gbmV3IEludGVybmV0QWRkcmVzc1R5cGUuX2Zyb20ocmVzdWx0WzBdKTsKICAgICAgICAgIHJldHVybiBuZXcgX0ludGVybmV0QWRkcmVzcyhyZXN1bHRbMV0sIGhvc3QsIHJlc3VsdFsyXSwgcmVzdWx0WzNdKTsKICAgICAgICB9KS50b0xpc3QoKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBzdGF0aWMgRnV0dXJlPEludGVybmV0QWRkcmVzcz4gcmV2ZXJzZUxvb2t1cChJbnRlcm5ldEFkZHJlc3MgYWRkcikgewogICAgcmV0dXJuIF9JT1NlcnZpY2UuX2Rpc3BhdGNoKF9JT1NlcnZpY2Uuc29ja2V0UmV2ZXJzZUxvb2t1cCwKICAgICAgICBbKGFkZHIgYXMgX0ludGVybmV0QWRkcmVzcykuX2luX2FkZHJdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IGNyZWF0ZUVycm9yKHJlc3BvbnNlLCAiRmFpbGVkIHJldmVyc2UgaG9zdCBsb29rdXAiLCBhZGRyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gKGFkZHIgYXMgX0ludGVybmV0QWRkcmVzcykuX2Nsb25lV2l0aE5ld0hvc3QocmVzcG9uc2UpOwogICAgICB9CiAgICB9KTsKICB9CgogIHN0YXRpYyBGdXR1cmU8TGlzdDxOZXR3b3JrSW50ZXJmYWNlPj4gbGlzdEludGVyZmFjZXMoCiAgICAgIHtib29sIGluY2x1ZGVMb29wYmFjazogZmFsc2UsCiAgICAgIGJvb2wgaW5jbHVkZUxpbmtMb2NhbDogZmFsc2UsCiAgICAgIEludGVybmV0QWRkcmVzc1R5cGUgdHlwZTogSW50ZXJuZXRBZGRyZXNzVHlwZS5hbnl9KSB7CiAgICByZXR1cm4gX0lPU2VydmljZS5fZGlzcGF0Y2goX0lPU2VydmljZS5zb2NrZXRMaXN0SW50ZXJmYWNlcywgW3R5cGUuX3ZhbHVlXSkKICAgICAgICAudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKGlzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBjcmVhdGVFcnJvcihyZXNwb25zZSwgIkZhaWxlZCBsaXN0aW5nIGludGVyZmFjZXMiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgbWFwID0gcmVzcG9uc2Uuc2tpcCgxKS5mb2xkKG5ldyBNYXA8U3RyaW5nLCBOZXR3b3JrSW50ZXJmYWNlPigpLAogICAgICAgICAgICAobWFwLCByZXN1bHQpIHsKICAgICAgICAgIHZhciB0eXBlID0gbmV3IEludGVybmV0QWRkcmVzc1R5cGUuX2Zyb20ocmVzdWx0WzBdKTsKICAgICAgICAgIHZhciBuYW1lID0gcmVzdWx0WzNdOwogICAgICAgICAgdmFyIGluZGV4ID0gcmVzdWx0WzRdOwogICAgICAgICAgdmFyIGFkZHJlc3MgPSBuZXcgX0ludGVybmV0QWRkcmVzcyhyZXN1bHRbMV0sICIiLCByZXN1bHRbMl0pOwogICAgICAgICAgaWYgKCFpbmNsdWRlTGlua0xvY2FsICYmIGFkZHJlc3MuaXNMaW5rTG9jYWwpIHJldHVybiBtYXA7CiAgICAgICAgICBpZiAoIWluY2x1ZGVMb29wYmFjayAmJiBhZGRyZXNzLmlzTG9vcGJhY2spIHJldHVybiBtYXA7CiAgICAgICAgICBtYXAucHV0SWZBYnNlbnQobmFtZSwgKCkgPT4gbmV3IF9OZXR3b3JrSW50ZXJmYWNlKG5hbWUsIGluZGV4KSk7CiAgICAgICAgICBtYXBbbmFtZV0uYWRkcmVzc2VzLmFkZChhZGRyZXNzKTsKICAgICAgICAgIHJldHVybiBtYXA7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIG1hcC52YWx1ZXMudG9MaXN0KCk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgc3RhdGljIFN0cmluZyBlc2NhcGVMaW5rTG9jYWxBZGRyZXNzKFN0cmluZyBob3N0KSB7CiAgICAvLyBpZiB0aGUgaG9zdCBjb250YWlucyBlc2NhcGUsIGhvc3QgaXMgYW4gSVB2NiBhZGRyZXNzIHdpdGggc2NvcGUgSUQuCiAgICAvLyBSZW1vdmUgJzI1JyBiZWZvcmUgZmVlZGluZyBpbnRvIG5hdGl2ZSBjYWxscy4KICAgIGludCBpbmRleCA9IGhvc3QuaW5kZXhPZignJScpOwogICAgaWYgKGluZGV4ID49IDApIHsKICAgICAgaWYgKCFjaGVja0xpbmtMb2NhbEFkZHJlc3MoaG9zdCkpIHsKICAgICAgICAvLyBUaGUgb25seSB3ZWxsIGRlZmluZWQgdXNhZ2UgaXMgbGluay1sb2NhbCBhZGRyZXNzLiBDaGVja3MgU2VjdGlvbiA0IG9mIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2ODc0LgogICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIHZhbGlkIGxpbmstbG9jYWwgYWRkcmVzcyBhbmQgY29udGFpbnMgZXNjYXBlIGNoYXJhY3RlciwgdGhyb3cgYW4gZXhjZXB0aW9uLgogICAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICcke2hvc3R9IGlzIG5vdCBhIHZhbGlkIGxpbmstbG9jYWwgYWRkcmVzcyBidXQgY29udGFpbnMgJS4gU2NvcGUgaWQgc2hvdWxkIGJlIHVzZWQgYXMgcGFydCBvZiBsaW5rLWxvY2FsIGFkZHJlc3MuJywKICAgICAgICAgICAgaG9zdCwKICAgICAgICAgICAgaW5kZXgpOwogICAgICB9CiAgICAgIGlmIChob3N0LnN0YXJ0c1dpdGgoIjI1IiwgaW5kZXggKyAxKSkgewogICAgICAgIC8vIFJlbW92ZSAnMjUnIGFmdGVyICclJyBpZiBwcmVzZW50CiAgICAgICAgaG9zdCA9IGhvc3QucmVwbGFjZVJhbmdlKGluZGV4ICsgMSwgaW5kZXggKyAzLCAnJyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBob3N0OwogIH0KCiAgc3RhdGljIGJvb2wgY2hlY2tMaW5rTG9jYWxBZGRyZXNzKFN0cmluZyBob3N0KSB7CiAgICAvLyBUaGUgc2hvcnRlc3QgcG9zc2libGUgbGluay1sb2NhbCBhZGRyZXNzIGlzIFtmZTgwOjoxXQogICAgaWYgKGhvc3QubGVuZ3RoIDwgNykgcmV0dXJuIGZhbHNlOwogICAgdmFyIGNoYXIgPSBob3N0WzJdOwogICAgcmV0dXJuIGhvc3Quc3RhcnRzV2l0aCgnZmUnKSAmJgogICAgICAgIChjaGFyID09ICc4JyB8fCBjaGFyID09ICc5JyB8fCBjaGFyID09ICdhJyB8fCBjaGFyID09ICdiJyk7CiAgfQoKICBzdGF0aWMgRnV0dXJlPENvbm5lY3Rpb25UYXNrPF9OYXRpdmVTb2NrZXQ+PiBzdGFydENvbm5lY3QoCiAgICAgIGhvc3QsIGludCBwb3J0LCBzb3VyY2VBZGRyZXNzKSB7CiAgICBpZiAoaG9zdCBpcyBTdHJpbmcpIHsKICAgICAgaG9zdCA9IGVzY2FwZUxpbmtMb2NhbEFkZHJlc3MoaG9zdCk7CiAgICB9CiAgICBfdGhyb3dPbkJhZFBvcnQocG9ydCk7CiAgICBpZiAoc291cmNlQWRkcmVzcyAhPSBudWxsICYmIHNvdXJjZUFkZHJlc3MgaXMhIF9JbnRlcm5ldEFkZHJlc3MpIHsKICAgICAgaWYgKHNvdXJjZUFkZHJlc3MgaXMgU3RyaW5nKSB7CiAgICAgICAgc291cmNlQWRkcmVzcyA9IG5ldyBJbnRlcm5ldEFkZHJlc3Moc291cmNlQWRkcmVzcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKGhvc3QpLnRoZW4oKGhvc3QpIHsKICAgICAgaWYgKGhvc3QgaXMgX0ludGVybmV0QWRkcmVzcykgcmV0dXJuIFtob3N0XTsKICAgICAgcmV0dXJuIGxvb2t1cChob3N0KS50aGVuKChhZGRyZXNzZXMpIHsKICAgICAgICBpZiAoYWRkcmVzc2VzLmlzRW1wdHkpIHsKICAgICAgICAgIHRocm93IGNyZWF0ZUVycm9yKG51bGwsICJGYWlsZWQgaG9zdCBsb29rdXA6ICckaG9zdCciKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFkZHJlc3NlczsKICAgICAgfSk7CiAgICB9KS50aGVuKChhZGRyZXNzZXMpIHsKICAgICAgdmFyIGNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXI8X05hdGl2ZVNvY2tldD4oKTsKICAgICAgdmFyIGl0ID0gKGFkZHJlc3NlcyBhcyBMaXN0PEludGVybmV0QWRkcmVzcz4pLml0ZXJhdG9yOwogICAgICB2YXIgZXJyb3IgPSBudWxsOwogICAgICB2YXIgY29ubmVjdGluZyA9IG5ldyBIYXNoTWFwKCk7CgogICAgICB2b2lkIGNvbm5lY3ROZXh0KCkgewogICAgICAgIGlmICghaXQubW92ZU5leHQoKSkgewogICAgICAgICAgaWYgKGNvbm5lY3RpbmcuaXNFbXB0eSkgewogICAgICAgICAgICBhc3NlcnQoZXJyb3IgIT0gbnVsbCk7CiAgICAgICAgICAgIGNvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZmluYWwgX0ludGVybmV0QWRkcmVzcyBhZGRyZXNzID0gaXQuY3VycmVudDsKICAgICAgICB2YXIgc29ja2V0ID0gbmV3IF9OYXRpdmVTb2NrZXQubm9ybWFsKCk7CiAgICAgICAgc29ja2V0LmxvY2FsQWRkcmVzcyA9IGFkZHJlc3M7CiAgICAgICAgdmFyIHJlc3VsdDsKICAgICAgICBpZiAoc291cmNlQWRkcmVzcyA9PSBudWxsKSB7CiAgICAgICAgICByZXN1bHQgPSBzb2NrZXQubmF0aXZlQ3JlYXRlQ29ubmVjdCgKICAgICAgICAgICAgICBhZGRyZXNzLl9pbl9hZGRyLCBwb3J0LCBhZGRyZXNzLl9zY29wZV9pZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFzc2VydChzb3VyY2VBZGRyZXNzIGlzIF9JbnRlcm5ldEFkZHJlc3MpOwogICAgICAgICAgcmVzdWx0ID0gc29ja2V0Lm5hdGl2ZUNyZWF0ZUJpbmRDb25uZWN0KGFkZHJlc3MuX2luX2FkZHIsIHBvcnQsCiAgICAgICAgICAgICAgc291cmNlQWRkcmVzcy5faW5fYWRkciwgYWRkcmVzcy5fc2NvcGVfaWQpOwogICAgICAgIH0KICAgICAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgICAgIC8vIEtlZXAgZmlyc3QgZXJyb3IsIGlmIHByZXNlbnQuCiAgICAgICAgICBpZiAoZXJyb3IgPT0gbnVsbCkgewogICAgICAgICAgICBpbnQgZXJyb3JDb2RlID0gcmVzdWx0LmVycm9yQ29kZTsKICAgICAgICAgICAgaWYgKHNvdXJjZUFkZHJlc3MgIT0gbnVsbCAmJgogICAgICAgICAgICAgICAgZXJyb3JDb2RlICE9IG51bGwgJiYKICAgICAgICAgICAgICAgIHNvY2tldC5pc0JpbmRFcnJvcihlcnJvckNvZGUpKSB7CiAgICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVFcnJvcihyZXN1bHQsICJCaW5kIGZhaWxlZCIsIHNvdXJjZUFkZHJlc3MpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGVycm9yID0gY3JlYXRlRXJyb3IocmVzdWx0LCAiQ29ubmVjdGlvbiBmYWlsZWQiLCBhZGRyZXNzLCBwb3J0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgY29ubmVjdE5leHQoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gUXVlcnkgdGhlIGxvY2FsIHBvcnQgZm9yIGVycm9yIG1lc3NhZ2VzLgogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgc29ja2V0LnBvcnQ7CiAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGlmIChlcnJvciA9PSBudWxsKSB7CiAgICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVFcnJvcihlLCAiQ29ubmVjdGlvbiBmYWlsZWQiLCBhZGRyZXNzLCBwb3J0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25uZWN0TmV4dCgpOwogICAgICAgICAgfQogICAgICAgICAgLy8gU2V0IHVwIHRpbWVyIGZvciB3aGVuIHdlIHNob3VsZCByZXRyeSB0aGUgbmV4dCBhZGRyZXNzCiAgICAgICAgICAvLyAoaWYgYW55KS4KICAgICAgICAgIHZhciBkdXJhdGlvbiA9CiAgICAgICAgICAgICAgYWRkcmVzcy5pc0xvb3BiYWNrID8gX3JldHJ5RHVyYXRpb25Mb29wYmFjayA6IF9yZXRyeUR1cmF0aW9uOwogICAgICAgICAgdmFyIHRpbWVyID0gbmV3IFRpbWVyKGR1cmF0aW9uLCBjb25uZWN0TmV4dCk7CiAgICAgICAgICBzZXR1cFJlc291cmNlSW5mbyhzb2NrZXQpOwoKICAgICAgICAgIGNvbm5lY3Rpbmdbc29ja2V0XSA9IHRpbWVyOwogICAgICAgICAgLy8gU2V0dXAgaGFuZGxlcnMgZm9yIHJlY2VpdmluZyB0aGUgZmlyc3Qgd3JpdGUgZXZlbnQgd2hpY2gKICAgICAgICAgIC8vIGluZGljYXRlIHRoYXQgdGhlIHNvY2tldCBpcyBmdWxseSBjb25uZWN0ZWQuCiAgICAgICAgICBzb2NrZXQuc2V0SGFuZGxlcnMod3JpdGU6ICgpIHsKICAgICAgICAgICAgdGltZXIuY2FuY2VsKCk7CiAgICAgICAgICAgIGNvbm5lY3RpbmcucmVtb3ZlKHNvY2tldCk7CiAgICAgICAgICAgIC8vIEZyb20gJ21hbiAyIGNvbm5lY3QnOgogICAgICAgICAgICAvLyBBZnRlciBzZWxlY3QoMikgaW5kaWNhdGVzIHdyaXRhYmlsaXR5LCB1c2UgZ2V0c29ja29wdCgyKSB0byByZWFkCiAgICAgICAgICAgIC8vIHRoZSBTT19FUlJPUiBvcHRpb24gYXQgbGV2ZWwgU09MX1NPQ0tFVCB0byBkZXRlcm1pbmUgd2hldGhlcgogICAgICAgICAgICAvLyBjb25uZWN0KCkgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSAoU09fRVJST1IgaXMgemVybykgb3IKICAgICAgICAgICAgLy8gdW5zdWNjZXNzZnVsbHkuCiAgICAgICAgICAgIE9TRXJyb3Igb3NFcnJvciA9IHNvY2tldC5uYXRpdmVHZXRFcnJvcigpOwogICAgICAgICAgICBpZiAob3NFcnJvci5lcnJvckNvZGUgIT0gMCkgewogICAgICAgICAgICAgIHNvY2tldC5jbG9zZSgpOwogICAgICAgICAgICAgIGlmIChlcnJvciA9PSBudWxsKSBlcnJvciA9IG9zRXJyb3I7CiAgICAgICAgICAgICAgaWYgKGNvbm5lY3RpbmcuaXNFbXB0eSkgY29ubmVjdE5leHQoKTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc29ja2V0LnNldExpc3RlbmluZyhyZWFkOiBmYWxzZSwgd3JpdGU6IGZhbHNlKTsKICAgICAgICAgICAgY29tcGxldGVyLmNvbXBsZXRlKHNvY2tldCk7CiAgICAgICAgICAgIGNvbm5lY3RpbmcuZm9yRWFjaCgocywgdCkgewogICAgICAgICAgICAgIHQuY2FuY2VsKCk7CiAgICAgICAgICAgICAgcy5jbG9zZSgpOwogICAgICAgICAgICAgIHMuc2V0SGFuZGxlcnMoKTsKICAgICAgICAgICAgICBzLnNldExpc3RlbmluZyhyZWFkOiBmYWxzZSwgd3JpdGU6IGZhbHNlKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbm5lY3RpbmcuY2xlYXIoKTsKICAgICAgICAgIH0sIGVycm9yOiAoZSwgc3QpIHsKICAgICAgICAgICAgdGltZXIuY2FuY2VsKCk7CiAgICAgICAgICAgIHNvY2tldC5jbG9zZSgpOwogICAgICAgICAgICAvLyBLZWVwIGZpcnN0IGVycm9yLCBpZiBwcmVzZW50LgogICAgICAgICAgICBpZiAoZXJyb3IgPT0gbnVsbCkgZXJyb3IgPSBlOwogICAgICAgICAgICBjb25uZWN0aW5nLnJlbW92ZShzb2NrZXQpOwogICAgICAgICAgICBpZiAoY29ubmVjdGluZy5pc0VtcHR5KSBjb25uZWN0TmV4dCgpOwogICAgICAgICAgfSk7CiAgICAgICAgICBzb2NrZXQuc2V0TGlzdGVuaW5nKHJlYWQ6IGZhbHNlLCB3cml0ZTogdHJ1ZSk7CiAgICAgICAgfQogICAgICB9CgogICAgICB2b2lkIG9uQ2FuY2VsKCkgewogICAgICAgIGNvbm5lY3RpbmcuZm9yRWFjaCgocywgdCkgewogICAgICAgICAgdC5jYW5jZWwoKTsKICAgICAgICAgIHMuY2xvc2UoKTsKICAgICAgICAgIHMuc2V0SGFuZGxlcnMoKTsKICAgICAgICAgIHMuc2V0TGlzdGVuaW5nKHJlYWQ6IGZhbHNlLCB3cml0ZTogZmFsc2UpOwogICAgICAgICAgaWYgKGVycm9yID09IG51bGwpIHsKICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVFcnJvcihudWxsLAogICAgICAgICAgICAgICAgIkNvbm5lY3Rpb24gYXR0ZW1wdCBjYW5jZWxsZWQsIGhvc3Q6ICR7aG9zdH0sIHBvcnQ6ICR7cG9ydH0iKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBjb25uZWN0aW5nLmNsZWFyKCk7CiAgICAgICAgaWYgKCFjb21wbGV0ZXIuaXNDb21wbGV0ZWQpIHsKICAgICAgICAgIGNvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGNvbm5lY3ROZXh0KCk7CiAgICAgIHJldHVybiBuZXcgQ29ubmVjdGlvblRhc2s8X05hdGl2ZVNvY2tldD4uXygKICAgICAgICAgIHNvY2tldDogY29tcGxldGVyLmZ1dHVyZSwgb25DYW5jZWw6IG9uQ2FuY2VsKTsKICAgIH0pOwogIH0KCiAgc3RhdGljIEZ1dHVyZTxfTmF0aXZlU29ja2V0PiBjb25uZWN0KAogICAgICBob3N0LCBpbnQgcG9ydCwgc291cmNlQWRkcmVzcywgRHVyYXRpb24gdGltZW91dCkgewogICAgcmV0dXJuIHN0YXJ0Q29ubmVjdChob3N0LCBwb3J0LCBzb3VyY2VBZGRyZXNzKQogICAgICAgIC50aGVuKChDb25uZWN0aW9uVGFzazxfTmF0aXZlU29ja2V0PiB0YXNrKSB7CiAgICAgIEZ1dHVyZTxfTmF0aXZlU29ja2V0PiBzb2NrZXRGdXR1cmUgPSB0YXNrLnNvY2tldDsKICAgICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkgewogICAgICAgIHNvY2tldEZ1dHVyZSA9IHNvY2tldEZ1dHVyZS50aW1lb3V0KHRpbWVvdXQsIG9uVGltZW91dDogKCkgewogICAgICAgICAgdGFzay5jYW5jZWwoKTsKICAgICAgICAgIHRocm93IGNyZWF0ZUVycm9yKAogICAgICAgICAgICAgIG51bGwsICJDb25uZWN0aW9uIHRpbWVkIG91dCwgaG9zdDogJHtob3N0fSwgcG9ydDogJHtwb3J0fSIpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiBzb2NrZXRGdXR1cmU7CiAgICB9KTsKICB9CgogIHN0YXRpYyBGdXR1cmU8X0ludGVybmV0QWRkcmVzcz4gX3Jlc29sdmVIb3N0KGhvc3QpIGFzeW5jIHsKICAgIGlmIChob3N0IGlzIF9JbnRlcm5ldEFkZHJlc3MpIHsKICAgICAgcmV0dXJuIGhvc3Q7CiAgICB9IGVsc2UgewogICAgICBmaW5hbCBsaXN0ID0gYXdhaXQgbG9va3VwKGhvc3QpOwogICAgICBpZiAobGlzdC5pc0VtcHR5KSB7CiAgICAgICAgdGhyb3cgY3JlYXRlRXJyb3IobnVsbCwgIkZhaWxlZCBob3N0IGxvb2t1cDogJyRob3N0JyIpOwogICAgICB9CiAgICAgIHJldHVybiBsaXN0LmZpcnN0IGFzIF9JbnRlcm5ldEFkZHJlc3M7CiAgICB9CiAgfQoKICBzdGF0aWMgRnV0dXJlPF9OYXRpdmVTb2NrZXQ+IGJpbmQoCiAgICAgIGhvc3QsIGludCBwb3J0LCBpbnQgYmFja2xvZywgYm9vbCB2Nk9ubHksIGJvb2wgc2hhcmVkKSBhc3luYyB7CiAgICBfdGhyb3dPbkJhZFBvcnQocG9ydCk7CiAgICBpZiAoaG9zdCBpcyBTdHJpbmcpIHsKICAgICAgaG9zdCA9IGVzY2FwZUxpbmtMb2NhbEFkZHJlc3MoaG9zdCk7CiAgICB9CiAgICBmaW5hbCBhZGRyZXNzID0gYXdhaXQgX3Jlc29sdmVIb3N0KGhvc3QpOwoKICAgIHZhciBzb2NrZXQgPSBuZXcgX05hdGl2ZVNvY2tldC5saXN0ZW4oKTsKICAgIHNvY2tldC5sb2NhbEFkZHJlc3MgPSBhZGRyZXNzOwogICAgdmFyIHJlc3VsdCA9IHNvY2tldC5uYXRpdmVDcmVhdGVCaW5kTGlzdGVuKAogICAgICAgIGFkZHJlc3MuX2luX2FkZHIsIHBvcnQsIGJhY2tsb2csIHY2T25seSwgc2hhcmVkLCBhZGRyZXNzLl9zY29wZV9pZCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IFNvY2tldEV4Y2VwdGlvbigiRmFpbGVkIHRvIGNyZWF0ZSBzZXJ2ZXIgc29ja2V0IiwKICAgICAgICAgIG9zRXJyb3I6IHJlc3VsdCwgYWRkcmVzczogYWRkcmVzcywgcG9ydDogcG9ydCk7CiAgICB9CiAgICBpZiAocG9ydCAhPSAwKSBzb2NrZXQubG9jYWxQb3J0ID0gcG9ydDsKICAgIHNldHVwUmVzb3VyY2VJbmZvKHNvY2tldCk7CiAgICBzb2NrZXQuY29ubmVjdFRvRXZlbnRIYW5kbGVyKCk7CiAgICByZXR1cm4gc29ja2V0OwogIH0KCiAgc3RhdGljIHZvaWQgc2V0dXBSZXNvdXJjZUluZm8oX05hdGl2ZVNvY2tldCBzb2NrZXQpIHsKICAgIHNvY2tldC5yZXNvdXJjZUluZm8gPSBuZXcgX1NvY2tldFJlc291cmNlSW5mbyhzb2NrZXQpOwogIH0KCiAgc3RhdGljIEZ1dHVyZTxfTmF0aXZlU29ja2V0PiBiaW5kRGF0YWdyYW0oCiAgICAgIGhvc3QsIGludCBwb3J0LCBib29sIHJldXNlQWRkcmVzcywgYm9vbCByZXVzZVBvcnQsIGludCB0dGwpIGFzeW5jIHsKICAgIF90aHJvd09uQmFkUG9ydChwb3J0KTsKICAgIF90aHJvd09uQmFkVHRsKHR0bCk7CgogICAgZmluYWwgYWRkcmVzcyA9IGF3YWl0IF9yZXNvbHZlSG9zdChob3N0KTsKCiAgICB2YXIgc29ja2V0ID0gbmV3IF9OYXRpdmVTb2NrZXQuZGF0YWdyYW0oYWRkcmVzcyk7CiAgICB2YXIgcmVzdWx0ID0gc29ja2V0Lm5hdGl2ZUNyZWF0ZUJpbmREYXRhZ3JhbSgKICAgICAgICBhZGRyZXNzLl9pbl9hZGRyLCBwb3J0LCByZXVzZUFkZHJlc3MsIHJldXNlUG9ydCwgdHRsKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgU29ja2V0RXhjZXB0aW9uKCJGYWlsZWQgdG8gY3JlYXRlIGRhdGFncmFtIHNvY2tldCIsCiAgICAgICAgICBvc0Vycm9yOiByZXN1bHQsIGFkZHJlc3M6IGFkZHJlc3MsIHBvcnQ6IHBvcnQpOwogICAgfQogICAgaWYgKHBvcnQgIT0gMCkgc29ja2V0LmxvY2FsUG9ydCA9IHBvcnQ7CiAgICBzZXR1cFJlc291cmNlSW5mbyhzb2NrZXQpOwogICAgcmV0dXJuIHNvY2tldDsKICB9CgogIF9OYXRpdmVTb2NrZXQuZGF0YWdyYW0odGhpcy5sb2NhbEFkZHJlc3MpCiAgICAgIDogdHlwZUZsYWdzID0gdHlwZU5vcm1hbFNvY2tldCB8IHR5cGVVZHBTb2NrZXQ7CgogIF9OYXRpdmVTb2NrZXQubm9ybWFsKCkgOiB0eXBlRmxhZ3MgPSB0eXBlTm9ybWFsU29ja2V0IHwgdHlwZVRjcFNvY2tldDsKCiAgX05hdGl2ZVNvY2tldC5saXN0ZW4oKSA6IHR5cGVGbGFncyA9IHR5cGVMaXN0ZW5pbmdTb2NrZXQgfCB0eXBlVGNwU29ja2V0IHsKICAgIGlzQ2xvc2VkV3JpdGUgPSB0cnVlOwogIH0KCiAgX05hdGl2ZVNvY2tldC5waXBlKCkgOiB0eXBlRmxhZ3MgPSB0eXBlUGlwZTsKCiAgX05hdGl2ZVNvY2tldC5fd2F0Y2hDb21tb24oaW50IGlkLCBpbnQgdHlwZSkKICAgICAgOiB0eXBlRmxhZ3MgPSB0eXBlTm9ybWFsU29ja2V0IHwgdHlwZSB7CiAgICBpc0Nsb3NlZFdyaXRlID0gdHJ1ZTsKICAgIG5hdGl2ZVNldFNvY2tldElkKGlkLCB0eXBlRmxhZ3MpOwogIH0KCiAgX05hdGl2ZVNvY2tldC53YXRjaFNpZ25hbChpbnQgaWQpCiAgICAgIDogdGhpcy5fd2F0Y2hDb21tb24oaWQsIHR5cGVJbnRlcm5hbFNpZ25hbFNvY2tldCk7CgogIF9OYXRpdmVTb2NrZXQud2F0Y2goaW50IGlkKSA6IHRoaXMuX3dhdGNoQ29tbW9uKGlkLCB0eXBlSW50ZXJuYWxTb2NrZXQpOwoKICBib29sIGdldCBpc0xpc3RlbmluZyA9PiAodHlwZUZsYWdzICYgdHlwZUxpc3RlbmluZ1NvY2tldCkgIT0gMDsKICBib29sIGdldCBpc1BpcGUgPT4gKHR5cGVGbGFncyAmIHR5cGVQaXBlKSAhPSAwOwogIGJvb2wgZ2V0IGlzSW50ZXJuYWwgPT4gKHR5cGVGbGFncyAmIHR5cGVJbnRlcm5hbFNvY2tldCkgIT0gMDsKICBib29sIGdldCBpc0ludGVybmFsU2lnbmFsID0+ICh0eXBlRmxhZ3MgJiB0eXBlSW50ZXJuYWxTaWduYWxTb2NrZXQpICE9IDA7CiAgYm9vbCBnZXQgaXNUY3AgPT4gKHR5cGVGbGFncyAmIHR5cGVUY3BTb2NrZXQpICE9IDA7CiAgYm9vbCBnZXQgaXNVZHAgPT4gKHR5cGVGbGFncyAmIHR5cGVVZHBTb2NrZXQpICE9IDA7CgogIE1hcCBfdG9KU09OKGJvb2wgcmVmKSA9PiB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKCk7CiAgU3RyaW5nIGdldCBfc2VydmljZVR5cGVQYXRoID0+IHRocm93IG5ldyBVbmltcGxlbWVudGVkRXJyb3IoKTsKICBTdHJpbmcgZ2V0IF9zZXJ2aWNlVHlwZU5hbWUgPT4gdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcigpOwoKICBVaW50OExpc3QgcmVhZChpbnQgbGVuKSB7CiAgICBpZiAobGVuICE9IG51bGwgJiYgbGVuIDw9IDApIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIklsbGVnYWwgbGVuZ3RoICRsZW4iKTsKICAgIH0KICAgIGlmIChpc0Nsb3NpbmcgfHwgaXNDbG9zZWQpIHJldHVybiBudWxsOwogICAgbGVuID0gbWluKGF2YWlsYWJsZSwgbGVuID09IG51bGwgPyBhdmFpbGFibGUgOiBsZW4pOwogICAgaWYgKGxlbiA9PSAwKSByZXR1cm4gbnVsbDsKICAgIHZhciByZXN1bHQgPSBuYXRpdmVSZWFkKGxlbik7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgcmVwb3J0RXJyb3IocmVzdWx0LCBTdGFja1RyYWNlLmN1cnJlbnQsICJSZWFkIGZhaWxlZCIpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgewogICAgICBhdmFpbGFibGUgLT0gcmVzdWx0Lmxlbmd0aDsKICAgICAgLy8gVE9ETyhyaWNvdyk6IFJlbW92ZSB3aGVuIHdlIHRyYWNrIGludGVybmFsIGFuZCBwaXBlIHVzZXMuCiAgICAgIGFzc2VydChyZXNvdXJjZUluZm8gIT0gbnVsbCB8fCBpc1BpcGUgfHwgaXNJbnRlcm5hbCB8fCBpc0ludGVybmFsU2lnbmFsKTsKICAgICAgaWYgKHJlc291cmNlSW5mbyAhPSBudWxsKSB7CiAgICAgICAgcmVzb3VyY2VJbmZvLnRvdGFsUmVhZCArPSByZXN1bHQubGVuZ3RoOwogICAgICB9CiAgICB9CiAgICAvLyBUT0RPKHJpY293KTogUmVtb3ZlIHdoZW4gd2UgdHJhY2sgaW50ZXJuYWwgYW5kIHBpcGUgdXNlcy4KICAgIGFzc2VydChyZXNvdXJjZUluZm8gIT0gbnVsbCB8fCBpc1BpcGUgfHwgaXNJbnRlcm5hbCB8fCBpc0ludGVybmFsU2lnbmFsKTsKICAgIGlmIChyZXNvdXJjZUluZm8gIT0gbnVsbCkgewogICAgICByZXNvdXJjZUluZm8uZGlkUmVhZCgpOwogICAgfQogICAgaWYgKCFjb25zdCBib29sLmZyb21FbnZpcm9ubWVudCgiZGFydC52bS5wcm9kdWN0IikpIHsKICAgICAgX1NvY2tldFByb2ZpbGUuY29sbGVjdFN0YXRpc3RpYygKICAgICAgICAgIG5hdGl2ZUdldFNvY2tldElkKCksIF9Tb2NrZXRQcm9maWxlVHlwZS5yZWFkQnl0ZXMsIHJlc3VsdD8ubGVuZ3RoKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBEYXRhZ3JhbSByZWNlaXZlKCkgewogICAgaWYgKGlzQ2xvc2luZyB8fCBpc0Nsb3NlZCkgcmV0dXJuIG51bGw7CiAgICB2YXIgcmVzdWx0ID0gbmF0aXZlUmVjdkZyb20oKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICByZXBvcnRFcnJvcihyZXN1bHQsIFN0YWNrVHJhY2UuY3VycmVudCwgIlJlY2VpdmUgZmFpbGVkIik7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7CiAgICAgIC8vIFJlYWQgdGhlIG5leHQgYXZhaWxhYmxlLiBBdmFpbGFibGUgaXMgb25seSBmb3IgdGhlIG5leHQgZGF0YWdyYW0sIG5vdAogICAgICAvLyB0aGUgc3VtIG9mIGFsbCBkYXRhZ3JhbXMgcGVuZGluZywgc28gd2UgbmVlZCB0byBjYWxsIGFmdGVyIGVhY2gKICAgICAgLy8gcmVjZWl2ZS4gSWYgYXZhaWxhYmxlIGJlY29tZXMgPiAwLCB0aGUgX05hdGl2ZVNvY2tldCB3aWxsIGNvbnRpbnVlIHRvCiAgICAgIC8vIGVtaXQgcmVhZCBldmVudHMuCiAgICAgIGF2YWlsYWJsZSA9IG5hdGl2ZUF2YWlsYWJsZSgpOwogICAgICAvLyBUT0RPKHJpY293KTogUmVtb3ZlIHdoZW4gd2UgdHJhY2sgaW50ZXJuYWwgYW5kIHBpcGUgdXNlcy4KICAgICAgYXNzZXJ0KHJlc291cmNlSW5mbyAhPSBudWxsIHx8IGlzUGlwZSB8fCBpc0ludGVybmFsIHx8IGlzSW50ZXJuYWxTaWduYWwpOwogICAgICBpZiAocmVzb3VyY2VJbmZvICE9IG51bGwpIHsKICAgICAgICByZXNvdXJjZUluZm8udG90YWxSZWFkICs9IHJlc3VsdC5kYXRhLmxlbmd0aDsKICAgICAgfQogICAgfQogICAgLy8gVE9ETyhyaWNvdyk6IFJlbW92ZSB3aGVuIHdlIHRyYWNrIGludGVybmFsIGFuZCBwaXBlIHVzZXMuCiAgICBhc3NlcnQocmVzb3VyY2VJbmZvICE9IG51bGwgfHwgaXNQaXBlIHx8IGlzSW50ZXJuYWwgfHwgaXNJbnRlcm5hbFNpZ25hbCk7CiAgICBpZiAocmVzb3VyY2VJbmZvICE9IG51bGwpIHsKICAgICAgcmVzb3VyY2VJbmZvLmRpZFJlYWQoKTsKICAgIH0KICAgIGlmICghY29uc3QgYm9vbC5mcm9tRW52aXJvbm1lbnQoImRhcnQudm0ucHJvZHVjdCIpKSB7CiAgICAgIF9Tb2NrZXRQcm9maWxlLmNvbGxlY3RTdGF0aXN0aWMobmF0aXZlR2V0U29ja2V0SWQoKSwKICAgICAgICAgIF9Tb2NrZXRQcm9maWxlVHlwZS5yZWFkQnl0ZXMsIHJlc3VsdD8uZGF0YT8ubGVuZ3RoKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBpbnQgd3JpdGUoTGlzdDxpbnQ+IGJ1ZmZlciwgaW50IG9mZnNldCwgaW50IGJ5dGVzKSB7CiAgICBpZiAoYnVmZmVyIGlzISBMaXN0KSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigpOwogICAgaWYgKG9mZnNldCA9PSBudWxsKSBvZmZzZXQgPSAwOwogICAgaWYgKGJ5dGVzID09IG51bGwpIHsKICAgICAgaWYgKG9mZnNldCA+IGJ1ZmZlci5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci52YWx1ZShvZmZzZXQpOwogICAgICB9CiAgICAgIGJ5dGVzID0gYnVmZmVyLmxlbmd0aCAtIG9mZnNldDsKICAgIH0KICAgIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvci52YWx1ZShvZmZzZXQpOwogICAgaWYgKGJ5dGVzIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IudmFsdWUoYnl0ZXMpOwogICAgaWYgKChvZmZzZXQgKyBieXRlcykgPiBidWZmZXIubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnZhbHVlKG9mZnNldCArIGJ5dGVzKTsKICAgIH0KICAgIGlmIChvZmZzZXQgaXMhIGludCB8fCBieXRlcyBpcyEgaW50KSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJJbnZhbGlkIGFyZ3VtZW50cyB0byB3cml0ZSBvbiBTb2NrZXQiKTsKICAgIH0KICAgIGlmIChpc0Nsb3NpbmcgfHwgaXNDbG9zZWQpIHJldHVybiAwOwogICAgaWYgKGJ5dGVzID09IDApIHJldHVybiAwOwogICAgX0J1ZmZlckFuZFN0YXJ0IGJ1ZmZlckFuZFN0YXJ0ID0KICAgICAgICBfZW5zdXJlRmFzdEFuZFNlcmlhbGl6YWJsZUJ5dGVEYXRhKGJ1ZmZlciwgb2Zmc2V0LCBvZmZzZXQgKyBieXRlcyk7CiAgICBpZiAoIWNvbnN0IGJvb2wuZnJvbUVudmlyb25tZW50KCJkYXJ0LnZtLnByb2R1Y3QiKSkgewogICAgICBfU29ja2V0UHJvZmlsZS5jb2xsZWN0U3RhdGlzdGljKAogICAgICAgICAgbmF0aXZlR2V0U29ja2V0SWQoKSwKICAgICAgICAgIF9Tb2NrZXRQcm9maWxlVHlwZS53cml0ZUJ5dGVzLAogICAgICAgICAgYnVmZmVyQW5kU3RhcnQuYnVmZmVyLmxlbmd0aCAtIGJ1ZmZlckFuZFN0YXJ0LnN0YXJ0KTsKICAgIH0KICAgIHZhciByZXN1bHQgPQogICAgICAgIG5hdGl2ZVdyaXRlKGJ1ZmZlckFuZFN0YXJ0LmJ1ZmZlciwgYnVmZmVyQW5kU3RhcnQuc3RhcnQsIGJ5dGVzKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICBPU0Vycm9yIG9zRXJyb3IgPSByZXN1bHQ7CiAgICAgIFN0YWNrVHJhY2Ugc3QgPSBTdGFja1RyYWNlLmN1cnJlbnQ7CiAgICAgIHNjaGVkdWxlTWljcm90YXNrKCgpID0+IHJlcG9ydEVycm9yKG9zRXJyb3IsIHN0LCAiV3JpdGUgZmFpbGVkIikpOwogICAgICByZXN1bHQgPSAwOwogICAgfQogICAgLy8gVGhlIHJlc3VsdCBtYXkgYmUgbmVnYXRpdmUsIGlmIHdlIGZvcmNlZCBhIHNob3J0IHdyaXRlIGZvciB0ZXN0aW5nCiAgICAvLyBwdXJwb3NlLiBJbiBzdWNoIGNhc2UsIGRvbid0IG1hcmsgd3JpdGVBdmFpbGFibGUgYXMgZmFsc2UsIGFzIHdlIGRvbid0CiAgICAvLyBrbm93IGlmIHdlJ2xsIHJlY2VpdmUgYW4gZXZlbnQuIEl0J3MgYmV0dGVyIHRvIGp1c3QgcmV0cnkuCiAgICBpZiAocmVzdWx0ID49IDAgJiYgcmVzdWx0IDwgYnl0ZXMpIHsKICAgICAgd3JpdGVBdmFpbGFibGUgPSBmYWxzZTsKICAgIH0KICAgIC8vIE5lZ2F0ZSB0aGUgcmVzdWx0LCBhcyBzdGF0ZWQgYWJvdmUuCiAgICBpZiAocmVzdWx0IDwgMCkgcmVzdWx0ID0gLXJlc3VsdDsKICAgIC8vIFRPRE8ocmljb3cpOiBSZW1vdmUgd2hlbiB3ZSB0cmFjayBpbnRlcm5hbCBhbmQgcGlwZSB1c2VzLgogICAgYXNzZXJ0KHJlc291cmNlSW5mbyAhPSBudWxsIHx8IGlzUGlwZSB8fCBpc0ludGVybmFsIHx8IGlzSW50ZXJuYWxTaWduYWwpOwogICAgaWYgKHJlc291cmNlSW5mbyAhPSBudWxsKSB7CiAgICAgIHJlc291cmNlSW5mby5hZGRXcml0ZShyZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGludCBzZW5kKExpc3Q8aW50PiBidWZmZXIsIGludCBvZmZzZXQsIGludCBieXRlcywgSW50ZXJuZXRBZGRyZXNzIGFkZHJlc3MsCiAgICAgIGludCBwb3J0KSB7CiAgICBfdGhyb3dPbkJhZFBvcnQocG9ydCk7CiAgICBpZiAoaXNDbG9zaW5nIHx8IGlzQ2xvc2VkKSByZXR1cm4gMDsKICAgIF9CdWZmZXJBbmRTdGFydCBidWZmZXJBbmRTdGFydCA9CiAgICAgICAgX2Vuc3VyZUZhc3RBbmRTZXJpYWxpemFibGVCeXRlRGF0YShidWZmZXIsIG9mZnNldCwgYnl0ZXMpOwogICAgaWYgKCFjb25zdCBib29sLmZyb21FbnZpcm9ubWVudCgiZGFydC52bS5wcm9kdWN0IikpIHsKICAgICAgX1NvY2tldFByb2ZpbGUuY29sbGVjdFN0YXRpc3RpYygKICAgICAgICAgIG5hdGl2ZUdldFNvY2tldElkKCksCiAgICAgICAgICBfU29ja2V0UHJvZmlsZVR5cGUud3JpdGVCeXRlcywKICAgICAgICAgIGJ1ZmZlckFuZFN0YXJ0LmJ1ZmZlci5sZW5ndGggLSBidWZmZXJBbmRTdGFydC5zdGFydCk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gbmF0aXZlU2VuZFRvKGJ1ZmZlckFuZFN0YXJ0LmJ1ZmZlciwgYnVmZmVyQW5kU3RhcnQuc3RhcnQsCiAgICAgICAgYnl0ZXMsIChhZGRyZXNzIGFzIF9JbnRlcm5ldEFkZHJlc3MpLl9pbl9hZGRyLCBwb3J0KTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICBPU0Vycm9yIG9zRXJyb3IgPSByZXN1bHQ7CiAgICAgIFN0YWNrVHJhY2Ugc3QgPSBTdGFja1RyYWNlLmN1cnJlbnQ7CiAgICAgIHNjaGVkdWxlTWljcm90YXNrKCgpID0+IHJlcG9ydEVycm9yKG9zRXJyb3IsIHN0LCAiU2VuZCBmYWlsZWQiKSk7CiAgICAgIHJlc3VsdCA9IDA7CiAgICB9CiAgICAvLyBUT0RPKHJpY293KTogUmVtb3ZlIHdoZW4gd2UgdHJhY2sgaW50ZXJuYWwgYW5kIHBpcGUgdXNlcy4KICAgIGFzc2VydChyZXNvdXJjZUluZm8gIT0gbnVsbCB8fCBpc1BpcGUgfHwgaXNJbnRlcm5hbCB8fCBpc0ludGVybmFsU2lnbmFsKTsKICAgIGlmIChyZXNvdXJjZUluZm8gIT0gbnVsbCkgewogICAgICByZXNvdXJjZUluZm8uYWRkV3JpdGUocmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBfTmF0aXZlU29ja2V0IGFjY2VwdCgpIHsKICAgIC8vIERvbid0IGlzc3VlIGFjY2VwdCBpZiB3ZSdyZSBjbG9zaW5nLgogICAgaWYgKGlzQ2xvc2luZyB8fCBpc0Nsb3NlZCkgcmV0dXJuIG51bGw7CiAgICBhc3NlcnQoYXZhaWxhYmxlID4gMCk7CiAgICBhdmFpbGFibGUtLTsKICAgIHRva2VucysrOwogICAgcmV0dXJuVG9rZW5zKGxpc3RlbmluZ1Rva2VuQmF0Y2hTaXplKTsKICAgIHZhciBzb2NrZXQgPSBuZXcgX05hdGl2ZVNvY2tldC5ub3JtYWwoKTsKICAgIGlmIChuYXRpdmVBY2NlcHQoc29ja2V0KSAhPSB0cnVlKSByZXR1cm4gbnVsbDsKICAgIHNvY2tldC5sb2NhbFBvcnQgPSBsb2NhbFBvcnQ7CiAgICBzb2NrZXQubG9jYWxBZGRyZXNzID0gYWRkcmVzczsKICAgIHNldHVwUmVzb3VyY2VJbmZvKHNvY2tldCk7CiAgICAvLyBUT0RPKHJpY293KTogUmVtb3ZlIHdoZW4gd2UgdHJhY2sgaW50ZXJuYWwgYW5kIHBpcGUgdXNlcy4KICAgIGFzc2VydChyZXNvdXJjZUluZm8gIT0gbnVsbCB8fCBpc1BpcGUgfHwgaXNJbnRlcm5hbCB8fCBpc0ludGVybmFsU2lnbmFsKTsKICAgIGlmIChyZXNvdXJjZUluZm8gIT0gbnVsbCkgewogICAgICAvLyBXZSB0cmFjayB0aGlzIGFzIHJlYWQgb25lIGJ5dGUuCiAgICAgIHJlc291cmNlSW5mby5hZGRSZWFkKDEpOwogICAgfQogICAgcmV0dXJuIHNvY2tldDsKICB9CgogIGludCBnZXQgcG9ydCB7CiAgICBpZiAobG9jYWxQb3J0ICE9IDApIHJldHVybiBsb2NhbFBvcnQ7CiAgICBpZiAoaXNDbG9zaW5nIHx8IGlzQ2xvc2VkKSB0aHJvdyBjb25zdCBTb2NrZXRFeGNlcHRpb24uY2xvc2VkKCk7CiAgICB2YXIgcmVzdWx0ID0gbmF0aXZlR2V0UG9ydCgpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB0aHJvdyByZXN1bHQ7CiAgICByZXR1cm4gbG9jYWxQb3J0ID0gcmVzdWx0OwogIH0KCiAgaW50IGdldCByZW1vdGVQb3J0IHsKICAgIGlmIChpc0Nsb3NpbmcgfHwgaXNDbG9zZWQpIHRocm93IGNvbnN0IFNvY2tldEV4Y2VwdGlvbi5jbG9zZWQoKTsKICAgIHZhciByZXN1bHQgPSBuYXRpdmVHZXRSZW1vdGVQZWVyKCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHRocm93IHJlc3VsdDsKICAgIHJldHVybiByZXN1bHRbMV07CiAgfQoKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3MgPT4gbG9jYWxBZGRyZXNzOwoKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IHJlbW90ZUFkZHJlc3MgewogICAgaWYgKGlzQ2xvc2luZyB8fCBpc0Nsb3NlZCkgdGhyb3cgY29uc3QgU29ja2V0RXhjZXB0aW9uLmNsb3NlZCgpOwogICAgdmFyIHJlc3VsdCA9IG5hdGl2ZUdldFJlbW90ZVBlZXIoKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgdGhyb3cgcmVzdWx0OwogICAgdmFyIGFkZHIgPSByZXN1bHRbMF07CiAgICB2YXIgdHlwZSA9IG5ldyBJbnRlcm5ldEFkZHJlc3NUeXBlLl9mcm9tKGFkZHJbMF0pOwogICAgcmV0dXJuIG5ldyBfSW50ZXJuZXRBZGRyZXNzKGFkZHJbMV0sIG51bGwsIGFkZHJbMl0pOwogIH0KCiAgdm9pZCBpc3N1ZVJlYWRFdmVudCgpIHsKICAgIGlmIChjbG9zZWRSZWFkRXZlbnRTZW50KSByZXR1cm47CiAgICBpZiAocmVhZEV2ZW50SXNzdWVkKSByZXR1cm47CiAgICByZWFkRXZlbnRJc3N1ZWQgPSB0cnVlOwogICAgdm9pZCBpc3N1ZSgpIHsKICAgICAgcmVhZEV2ZW50SXNzdWVkID0gZmFsc2U7CiAgICAgIGlmIChpc0Nsb3NpbmcpIHJldHVybjsKICAgICAgaWYgKCFzZW5kUmVhZEV2ZW50cykgcmV0dXJuOwogICAgICBpZiAoYXZhaWxhYmxlID09IDApIHsKICAgICAgICBpZiAoaXNDbG9zZWRSZWFkICYmICFjbG9zZWRSZWFkRXZlbnRTZW50KSB7CiAgICAgICAgICBpZiAoaXNDbG9zZWRXcml0ZSkgY2xvc2UoKTsKICAgICAgICAgIHZhciBoYW5kbGVyID0gZXZlbnRIYW5kbGVyc1tjbG9zZWRFdmVudF07CiAgICAgICAgICBpZiAoaGFuZGxlciA9PSBudWxsKSByZXR1cm47CiAgICAgICAgICBjbG9zZWRSZWFkRXZlbnRTZW50ID0gdHJ1ZTsKICAgICAgICAgIGhhbmRsZXIoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHZhciBoYW5kbGVyID0gZXZlbnRIYW5kbGVyc1tyZWFkRXZlbnRdOwogICAgICBpZiAoaGFuZGxlciA9PSBudWxsKSByZXR1cm47CiAgICAgIHJlYWRFdmVudElzc3VlZCA9IHRydWU7CiAgICAgIGhhbmRsZXIoKTsKICAgICAgc2NoZWR1bGVNaWNyb3Rhc2soaXNzdWUpOwogICAgfQoKICAgIHNjaGVkdWxlTWljcm90YXNrKGlzc3VlKTsKICB9CgogIHZvaWQgaXNzdWVXcml0ZUV2ZW50KHtib29sIGRlbGF5ZWQ6IHRydWV9KSB7CiAgICBpZiAod3JpdGVFdmVudElzc3VlZCkgcmV0dXJuOwogICAgaWYgKCF3cml0ZUF2YWlsYWJsZSkgcmV0dXJuOwogICAgdm9pZCBpc3N1ZSgpIHsKICAgICAgd3JpdGVFdmVudElzc3VlZCA9IGZhbHNlOwogICAgICBpZiAoIXdyaXRlQXZhaWxhYmxlKSByZXR1cm47CiAgICAgIGlmIChpc0Nsb3NpbmcpIHJldHVybjsKICAgICAgaWYgKCFzZW5kV3JpdGVFdmVudHMpIHJldHVybjsKICAgICAgc2VuZFdyaXRlRXZlbnRzID0gZmFsc2U7CiAgICAgIHZhciBoYW5kbGVyID0gZXZlbnRIYW5kbGVyc1t3cml0ZUV2ZW50XTsKICAgICAgaWYgKGhhbmRsZXIgPT0gbnVsbCkgcmV0dXJuOwogICAgICBoYW5kbGVyKCk7CiAgICB9CgogICAgaWYgKGRlbGF5ZWQpIHsKICAgICAgd3JpdGVFdmVudElzc3VlZCA9IHRydWU7CiAgICAgIHNjaGVkdWxlTWljcm90YXNrKGlzc3VlKTsKICAgIH0gZWxzZSB7CiAgICAgIGlzc3VlKCk7CiAgICB9CiAgfQoKICAvLyBNdWx0aXBsZXhlcyBzb2NrZXQgZXZlbnRzIHRvIHRoZSBzb2NrZXQgaGFuZGxlcnMuCiAgdm9pZCBtdWx0aXBsZXgoT2JqZWN0IGV2ZW50c09iaikgewogICAgLy8gVE9ETyhwYXVsYmVycnkpOiB3aGVuIGlzc3VlICMzMTMwNSBpcyBmaXhlZCwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gc2ltcGx5CiAgICAvLyBkZWNsYXJlIGBldmVudHNgIGFzIGEgYGNvdmFyaWFudCBpbnRgIHBhcmFtZXRlci4KICAgIGludCBldmVudHMgPSBldmVudHNPYmo7CiAgICBmb3IgKGludCBpID0gZmlyc3RFdmVudDsgaSA8PSBsYXN0RXZlbnQ7IGkrKykgewogICAgICBpZiAoKChldmVudHMgJiAoMSA8PCBpKSkgIT0gMCkpIHsKICAgICAgICBpZiAoKGkgPT0gY2xvc2VkRXZlbnQgfHwgaSA9PSByZWFkRXZlbnQpICYmIGlzQ2xvc2VkUmVhZCkgY29udGludWU7CiAgICAgICAgaWYgKGlzQ2xvc2luZyAmJiBpICE9IGRlc3Ryb3llZEV2ZW50KSBjb250aW51ZTsKICAgICAgICBpZiAoaSA9PSBjbG9zZWRFdmVudCAmJiAhaXNMaXN0ZW5pbmcgJiYgIWlzQ2xvc2luZyAmJiAhaXNDbG9zZWQpIHsKICAgICAgICAgIGlzQ2xvc2VkUmVhZCA9IHRydWU7CiAgICAgICAgICBpc3N1ZVJlYWRFdmVudCgpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICBpZiAoaSA9PSB3cml0ZUV2ZW50KSB7CiAgICAgICAgICB3cml0ZUF2YWlsYWJsZSA9IHRydWU7CiAgICAgICAgICBpc3N1ZVdyaXRlRXZlbnQoZGVsYXllZDogZmFsc2UpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICBpZiAoaSA9PSByZWFkRXZlbnQpIHsKICAgICAgICAgIGlmIChpc0xpc3RlbmluZykgewogICAgICAgICAgICBhdmFpbGFibGUrKzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGF2YWlsYWJsZSA9IG5hdGl2ZUF2YWlsYWJsZSgpOwogICAgICAgICAgICBpc3N1ZVJlYWRFdmVudCgpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciBoYW5kbGVyID0gZXZlbnRIYW5kbGVyc1tpXTsKICAgICAgICBpZiAoaSA9PSBkZXN0cm95ZWRFdmVudCkgewogICAgICAgICAgYXNzZXJ0KGlzQ2xvc2luZyk7CiAgICAgICAgICBhc3NlcnQoIWlzQ2xvc2VkKTsKICAgICAgICAgIC8vIFRPRE8ocmljb3cpOiBSZW1vdmUvdXBkYXRlIHdoZW4gd2UgdHJhY2sgaW50ZXJuYWwgYW5kIHBpcGUgdXNlcy4KICAgICAgICAgIGFzc2VydCgKICAgICAgICAgICAgICByZXNvdXJjZUluZm8gIT0gbnVsbCB8fCBpc1BpcGUgfHwgaXNJbnRlcm5hbCB8fCBpc0ludGVybmFsU2lnbmFsKTsKICAgICAgICAgIGlmIChyZXNvdXJjZUluZm8gIT0gbnVsbCkgewogICAgICAgICAgICBfU29ja2V0UmVzb3VyY2VJbmZvLlNvY2tldENsb3NlZChyZXNvdXJjZUluZm8pOwogICAgICAgICAgfQogICAgICAgICAgaXNDbG9zZWQgPSB0cnVlOwogICAgICAgICAgY2xvc2VDb21wbGV0ZXIuY29tcGxldGUoKTsKICAgICAgICAgIGRpc2Nvbm5lY3RGcm9tRXZlbnRIYW5kbGVyKCk7CiAgICAgICAgICBpZiAoaGFuZGxlciAhPSBudWxsKSBoYW5kbGVyKCk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgIGlmIChpID09IGVycm9yRXZlbnQpIHsKICAgICAgICAgIGlmICghaXNDbG9zaW5nKSB7CiAgICAgICAgICAgIHJlcG9ydEVycm9yKG5hdGl2ZUdldEVycm9yKCksIG51bGwsICIiKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKCFpc0Nsb3NlZCkgewogICAgICAgICAgLy8gSWYgdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkIHJpZ2h0IGFmdGVyIGl0J3MgYWNjZXB0ZWQsIHRoZXJlJ3MgYQogICAgICAgICAgLy8gY2hhbmNlIHRoZSBjbG9zZS1oYW5kbGVyIGlzIG5vdCBzZXQuCiAgICAgICAgICBpZiAoaGFuZGxlciAhPSBudWxsKSBoYW5kbGVyKCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoIWlzTGlzdGVuaW5nKSB7CiAgICAgIHRva2VucysrOwogICAgICByZXR1cm5Ub2tlbnMobm9ybWFsVG9rZW5CYXRjaFNpemUpOwogICAgfQogIH0KCiAgdm9pZCByZXR1cm5Ub2tlbnMoaW50IHRva2VuQmF0Y2hTaXplKSB7CiAgICBpZiAoIWlzQ2xvc2luZyAmJiAhaXNDbG9zZWQpIHsKICAgICAgYXNzZXJ0KGV2ZW50UG9ydCAhPSBudWxsKTsKICAgICAgLy8gUmV0dXJuIGluIGJhdGNoZXMuCiAgICAgIGlmICh0b2tlbnMgPT0gdG9rZW5CYXRjaFNpemUpIHsKICAgICAgICBhc3NlcnQodG9rZW5zIDwgKDEgPDwgZmlyc3RDb21tYW5kKSk7CiAgICAgICAgc2VuZFRvRXZlbnRIYW5kbGVyKCgxIDw8IHJldHVyblRva2VuQ29tbWFuZCkgfCB0b2tlbnMpOwogICAgICAgIHRva2VucyA9IDA7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgc2V0SGFuZGxlcnMoe3JlYWQsIHdyaXRlLCBlcnJvciwgY2xvc2VkLCBkZXN0cm95ZWR9KSB7CiAgICBldmVudEhhbmRsZXJzW3JlYWRFdmVudF0gPSByZWFkOwogICAgZXZlbnRIYW5kbGVyc1t3cml0ZUV2ZW50XSA9IHdyaXRlOwogICAgZXZlbnRIYW5kbGVyc1tlcnJvckV2ZW50XSA9IGVycm9yOwogICAgZXZlbnRIYW5kbGVyc1tjbG9zZWRFdmVudF0gPSBjbG9zZWQ7CiAgICBldmVudEhhbmRsZXJzW2Rlc3Ryb3llZEV2ZW50XSA9IGRlc3Ryb3llZDsKICB9CgogIHZvaWQgc2V0TGlzdGVuaW5nKHtyZWFkOiB0cnVlLCB3cml0ZTogdHJ1ZX0pIHsKICAgIHNlbmRSZWFkRXZlbnRzID0gcmVhZDsKICAgIHNlbmRXcml0ZUV2ZW50cyA9IHdyaXRlOwogICAgaWYgKHJlYWQpIGlzc3VlUmVhZEV2ZW50KCk7CiAgICBpZiAod3JpdGUpIGlzc3VlV3JpdGVFdmVudCgpOwogICAgaWYgKCFmbGFnc1NlbnQgJiYgIWlzQ2xvc2luZykgewogICAgICBmbGFnc1NlbnQgPSB0cnVlOwogICAgICBpbnQgZmxhZ3MgPSAxIDw8IHNldEV2ZW50TWFza0NvbW1hbmQ7CiAgICAgIGlmICghaXNDbG9zZWRSZWFkKSBmbGFncyB8PSAxIDw8IHJlYWRFdmVudDsKICAgICAgaWYgKCFpc0Nsb3NlZFdyaXRlKSBmbGFncyB8PSAxIDw8IHdyaXRlRXZlbnQ7CiAgICAgIHNlbmRUb0V2ZW50SGFuZGxlcihmbGFncyk7CiAgICB9CiAgfQoKICBGdXR1cmUgY2xvc2UoKSB7CiAgICBpZiAoIWlzQ2xvc2luZyAmJiAhaXNDbG9zZWQpIHsKICAgICAgc2VuZFRvRXZlbnRIYW5kbGVyKDEgPDwgY2xvc2VDb21tYW5kKTsKICAgICAgaXNDbG9zaW5nID0gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBjbG9zZUNvbXBsZXRlci5mdXR1cmU7CiAgfQoKICB2b2lkIHNodXRkb3duKFNvY2tldERpcmVjdGlvbiBkaXJlY3Rpb24pIHsKICAgIGlmICghaXNDbG9zaW5nICYmICFpc0Nsb3NlZCkgewogICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgICAgIGNhc2UgU29ja2V0RGlyZWN0aW9uLnJlY2VpdmU6CiAgICAgICAgICBzaHV0ZG93blJlYWQoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgU29ja2V0RGlyZWN0aW9uLnNlbmQ6CiAgICAgICAgICBzaHV0ZG93bldyaXRlKCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFNvY2tldERpcmVjdGlvbi5ib3RoOgogICAgICAgICAgY2xvc2UoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihkaXJlY3Rpb24pOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHNodXRkb3duV3JpdGUoKSB7CiAgICBpZiAoIWlzQ2xvc2luZyAmJiAhaXNDbG9zZWQpIHsKICAgICAgaWYgKGNsb3NlZFJlYWRFdmVudFNlbnQpIHsKICAgICAgICBjbG9zZSgpOwogICAgICB9IGVsc2UgewogICAgICAgIHNlbmRUb0V2ZW50SGFuZGxlcigxIDw8IHNodXRkb3duV3JpdGVDb21tYW5kKTsKICAgICAgfQogICAgICBpc0Nsb3NlZFdyaXRlID0gdHJ1ZTsKICAgIH0KICB9CgogIHZvaWQgc2h1dGRvd25SZWFkKCkgewogICAgaWYgKCFpc0Nsb3NpbmcgJiYgIWlzQ2xvc2VkKSB7CiAgICAgIGlmIChpc0Nsb3NlZFdyaXRlKSB7CiAgICAgICAgY2xvc2UoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzZW5kVG9FdmVudEhhbmRsZXIoMSA8PCBzaHV0ZG93blJlYWRDb21tYW5kKTsKICAgICAgfQogICAgICBpc0Nsb3NlZFJlYWQgPSB0cnVlOwogICAgfQogIH0KCiAgdm9pZCBzZW5kVG9FdmVudEhhbmRsZXIoaW50IGRhdGEpIHsKICAgIGludCBmdWxsRGF0YSA9ICh0eXBlRmxhZ3MgJiB0eXBlVHlwZU1hc2spIHwgZGF0YTsKICAgIGFzc2VydCghaXNDbG9zaW5nKTsKICAgIGNvbm5lY3RUb0V2ZW50SGFuZGxlcigpOwogICAgX0V2ZW50SGFuZGxlci5fc2VuZERhdGEodGhpcywgZXZlbnRQb3J0LnNlbmRQb3J0LCBmdWxsRGF0YSk7CiAgfQoKICB2b2lkIGNvbm5lY3RUb0V2ZW50SGFuZGxlcigpIHsKICAgIGFzc2VydCghaXNDbG9zZWQpOwogICAgaWYgKGV2ZW50UG9ydCA9PSBudWxsKSB7CiAgICAgIGV2ZW50UG9ydCA9IG5ldyBSYXdSZWNlaXZlUG9ydChtdWx0aXBsZXgpOwogICAgfQogICAgaWYgKCFjb25uZWN0ZWRSZXNvdXJjZUhhbmRsZXIpIHsKICAgICAgcmVnaXN0ZXJFeHRlbnNpb24oCiAgICAgICAgICAnZXh0LmRhcnQuaW8uZ2V0T3BlblNvY2tldHMnLCBfU29ja2V0UmVzb3VyY2VJbmZvLmdldE9wZW5Tb2NrZXRzKTsKICAgICAgcmVnaXN0ZXJFeHRlbnNpb24oJ2V4dC5kYXJ0LmlvLmdldFNvY2tldEJ5SUQnLAogICAgICAgICAgX1NvY2tldFJlc291cmNlSW5mby5nZXRTb2NrZXRJbmZvTWFwQnlJRCk7CgogICAgICBjb25uZWN0ZWRSZXNvdXJjZUhhbmRsZXIgPSB0cnVlOwogICAgfQogIH0KCiAgdm9pZCBkaXNjb25uZWN0RnJvbUV2ZW50SGFuZGxlcigpIHsKICAgIGFzc2VydChldmVudFBvcnQgIT0gbnVsbCk7CiAgICBldmVudFBvcnQuY2xvc2UoKTsKICAgIGV2ZW50UG9ydCA9IG51bGw7CiAgICAvLyBOb3cgdGhhdCB3ZSBkb24ndCB0cmFjayB0aGlzIFNvY2tldCBhbnltb3JlLCB3ZSBjYW4gY2xlYXIgdGhlIG93bmVyCiAgICAvLyBmaWVsZC4KICAgIG93bmVyID0gbnVsbDsKICB9CgogIC8vIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBlcnJvciByZXNwb25zZSBmcm9tIGEgbmF0aXZlIHBvcnQgY2FsbC4KICBzdGF0aWMgYm9vbCBpc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpIHsKICAgIHJldHVybiByZXNwb25zZSBpcyBMaXN0ICYmIHJlc3BvbnNlWzBdICE9IF9zdWNjZXNzUmVzcG9uc2U7CiAgfQoKICAvLyBDcmVhdGUgdGhlIGFwcHJvcHJpYXRlIGVycm9yL2V4Y2VwdGlvbiBmcm9tIGRpZmZlcmVudCByZXR1cm5lZAogIC8vIGVycm9yIG9iamVjdHMuCiAgc3RhdGljIGNyZWF0ZUVycm9yKGVycm9yLCBTdHJpbmcgbWVzc2FnZSwKICAgICAgW0ludGVybmV0QWRkcmVzcyBhZGRyZXNzLCBpbnQgcG9ydF0pIHsKICAgIGlmIChlcnJvciBpcyBPU0Vycm9yKSB7CiAgICAgIHJldHVybiBuZXcgU29ja2V0RXhjZXB0aW9uKG1lc3NhZ2UsCiAgICAgICAgICBvc0Vycm9yOiBlcnJvciwgYWRkcmVzczogYWRkcmVzcywgcG9ydDogcG9ydCk7CiAgICB9IGVsc2UgaWYgKGVycm9yIGlzIExpc3QpIHsKICAgICAgYXNzZXJ0KGlzRXJyb3JSZXNwb25zZShlcnJvcikpOwogICAgICBzd2l0Y2ggKGVycm9yWzBdKSB7CiAgICAgICAgY2FzZSBfaWxsZWdhbEFyZ3VtZW50UmVzcG9uc2U6CiAgICAgICAgICByZXR1cm4gbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgICAgICBjYXNlIF9vc0Vycm9yUmVzcG9uc2U6CiAgICAgICAgICByZXR1cm4gbmV3IFNvY2tldEV4Y2VwdGlvbihtZXNzYWdlLAogICAgICAgICAgICAgIG9zRXJyb3I6IG5ldyBPU0Vycm9yKGVycm9yWzJdLCBlcnJvclsxXSksCiAgICAgICAgICAgICAgYWRkcmVzczogYWRkcmVzcywKICAgICAgICAgICAgICBwb3J0OiBwb3J0KTsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuIG5ldyBFeGNlcHRpb24oIlVua25vd24gZXJyb3IiKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBTb2NrZXRFeGNlcHRpb24obWVzc2FnZSwgYWRkcmVzczogYWRkcmVzcywgcG9ydDogcG9ydCk7CiAgICB9CiAgfQoKICB2b2lkIHJlcG9ydEVycm9yKGVycm9yLCBTdGFja1RyYWNlIHN0LCBTdHJpbmcgbWVzc2FnZSkgewogICAgdmFyIGUgPSBjcmVhdGVFcnJvcihlcnJvciwgbWVzc2FnZSwgYWRkcmVzcywgbG9jYWxQb3J0KTsKICAgIC8vIEludm9rZSB0aGUgZXJyb3IgaGFuZGxlciBpZiBhbnkuCiAgICBpZiAoZXZlbnRIYW5kbGVyc1tlcnJvckV2ZW50XSAhPSBudWxsKSB7CiAgICAgIGV2ZW50SGFuZGxlcnNbZXJyb3JFdmVudF0oZSwgc3QpOwogICAgfQogICAgLy8gRm9yIGFsbCBlcnJvcnMgd2UgY2xvc2UgdGhlIHNvY2tldAogICAgY2xvc2UoKTsKICB9CgogIGdldE9wdGlvbihTb2NrZXRPcHRpb24gb3B0aW9uKSB7CiAgICBpZiAob3B0aW9uID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoIm9wdGlvbiIpOwogICAgdmFyIHJlc3VsdCA9IG5hdGl2ZUdldE9wdGlvbihvcHRpb24uX3ZhbHVlLCBhZGRyZXNzLnR5cGUuX3ZhbHVlKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgdGhyb3cgcmVzdWx0OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGJvb2wgc2V0T3B0aW9uKFNvY2tldE9wdGlvbiBvcHRpb24sIHZhbHVlKSB7CiAgICBpZiAob3B0aW9uID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoIm9wdGlvbiIpOwogICAgdmFyIHJlc3VsdCA9IG5hdGl2ZVNldE9wdGlvbihvcHRpb24uX3ZhbHVlLCBhZGRyZXNzLnR5cGUuX3ZhbHVlLCB2YWx1ZSk7CiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHRocm93IHJlc3VsdDsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgVWludDhMaXN0IGdldFJhd09wdGlvbihSYXdTb2NrZXRPcHRpb24gb3B0aW9uKSB7CiAgICBpZiAob3B0aW9uID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoIm9wdGlvbiIpOwogICAgaWYgKG9wdGlvbi52YWx1ZSA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJvcHRpb24udmFsdWUiKTsKCiAgICB2YXIgcmVzdWx0ID0gbmF0aXZlR2V0UmF3T3B0aW9uKG9wdGlvbi5sZXZlbCwgb3B0aW9uLm9wdGlvbiwgb3B0aW9uLnZhbHVlKTsKICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgdGhyb3cgcmVzdWx0OwogICAgcmV0dXJuIG9wdGlvbi52YWx1ZTsKICB9CgogIHZvaWQgc2V0UmF3T3B0aW9uKFJhd1NvY2tldE9wdGlvbiBvcHRpb24pIHsKICAgIGlmIChvcHRpb24gPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgib3B0aW9uIik7CiAgICBpZiAob3B0aW9uLnZhbHVlID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoIm9wdGlvbi52YWx1ZSIpOwoKICAgIHZhciByZXN1bHQgPSBuYXRpdmVTZXRSYXdPcHRpb24ob3B0aW9uLmxldmVsLCBvcHRpb24ub3B0aW9uLCBvcHRpb24udmFsdWUpOwogICAgaWYgKHJlc3VsdCAhPSBudWxsKSB0aHJvdyByZXN1bHQ7CiAgfQoKICBJbnRlcm5ldEFkZHJlc3MgbXVsdGljYXN0QWRkcmVzcygKICAgICAgSW50ZXJuZXRBZGRyZXNzIGFkZHIsIE5ldHdvcmtJbnRlcmZhY2UgaW50ZXJmYWNlKSB7CiAgICAvLyBPbiBNYWMgT1MgdXNpbmcgdGhlIGludGVyZmFjZSBpbmRleCBmb3Igam9pbmluZyBJUHY0IG11bHRpY2FzdCBncm91cHMKICAgIC8vIGlzIG5vdCBzdXBwb3J0ZWQuIEhlcmUgdGhlIElQIGFkZHJlc3Mgb2YgdGhlIGludGVyZmFjZSBpcyBuZWVkZWQuCiAgICBpZiAoUGxhdGZvcm0uaXNNYWNPUyAmJiBhZGRyLnR5cGUgPT0gSW50ZXJuZXRBZGRyZXNzVHlwZS5JUHY0KSB7CiAgICAgIGlmIChpbnRlcmZhY2UgIT0gbnVsbCkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW50ZXJmYWNlLmFkZHJlc3Nlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgaWYgKGludGVyZmFjZS5hZGRyZXNzZXNbaV0udHlwZSA9PSBJbnRlcm5ldEFkZHJlc3NUeXBlLklQdjQpIHsKICAgICAgICAgICAgcmV0dXJuIGludGVyZmFjZS5hZGRyZXNzZXNbaV07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIE5vIElQdjQgYWRkcmVzcyBmb3VuZCBvbiB0aGUgaW50ZXJmYWNlLgogICAgICAgIHRocm93IG5ldyBTb2NrZXRFeGNlcHRpb24oCiAgICAgICAgICAgICJUaGUgbmV0d29yayBpbnRlcmZhY2UgZG9lcyBub3QgaGF2ZSBhbiBhZGRyZXNzICIKICAgICAgICAgICAgIm9mIHRoZSBzYW1lIGZhbWlseSBhcyB0aGUgbXVsdGljYXN0IGFkZHJlc3MiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBEZWZhdWx0IHRvIHRoZSBBTlkgYWRkcmVzcyBpZiBubyBpbnRlcmZhY2UgaXMgc3BlY2lmaWVkLgogICAgICAgIHJldHVybiBJbnRlcm5ldEFkZHJlc3MuYW55SVB2NDsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICB2b2lkIGpvaW5NdWx0aWNhc3QoSW50ZXJuZXRBZGRyZXNzIGFkZHIsIE5ldHdvcmtJbnRlcmZhY2UgaW50ZXJmYWNlKSB7CiAgICBfSW50ZXJuZXRBZGRyZXNzIGludGVyZmFjZUFkZHIgPSBtdWx0aWNhc3RBZGRyZXNzKGFkZHIsIGludGVyZmFjZSk7CiAgICB2YXIgaW50ZXJmYWNlSW5kZXggPSBpbnRlcmZhY2UgPT0gbnVsbCA/IDAgOiBpbnRlcmZhY2UuaW5kZXg7CiAgICB2YXIgcmVzdWx0ID0gbmF0aXZlSm9pbk11bHRpY2FzdCgoYWRkciBhcyBfSW50ZXJuZXRBZGRyZXNzKS5faW5fYWRkciwKICAgICAgICBpbnRlcmZhY2VBZGRyPy5faW5fYWRkciwgaW50ZXJmYWNlSW5kZXgpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB0aHJvdyByZXN1bHQ7CiAgfQoKICB2b2lkIGxlYXZlTXVsdGljYXN0KEludGVybmV0QWRkcmVzcyBhZGRyLCBOZXR3b3JrSW50ZXJmYWNlIGludGVyZmFjZSkgewogICAgX0ludGVybmV0QWRkcmVzcyBpbnRlcmZhY2VBZGRyID0gbXVsdGljYXN0QWRkcmVzcyhhZGRyLCBpbnRlcmZhY2UpOwogICAgdmFyIGludGVyZmFjZUluZGV4ID0gaW50ZXJmYWNlID09IG51bGwgPyAwIDogaW50ZXJmYWNlLmluZGV4OwogICAgdmFyIHJlc3VsdCA9IG5hdGl2ZUxlYXZlTXVsdGljYXN0KChhZGRyIGFzIF9JbnRlcm5ldEFkZHJlc3MpLl9pbl9hZGRyLAogICAgICAgIGludGVyZmFjZUFkZHI/Ll9pbl9hZGRyLCBpbnRlcmZhY2VJbmRleCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHRocm93IHJlc3VsdDsKICB9CgogIHZvaWQgbmF0aXZlU2V0U29ja2V0SWQoaW50IGlkLCBpbnQgdHlwZUZsYWdzKSBuYXRpdmUgIlNvY2tldF9TZXRTb2NrZXRJZCI7CiAgbmF0aXZlQXZhaWxhYmxlKCkgbmF0aXZlICJTb2NrZXRfQXZhaWxhYmxlIjsKICBuYXRpdmVSZWFkKGludCBsZW4pIG5hdGl2ZSAiU29ja2V0X1JlYWQiOwogIG5hdGl2ZVJlY3ZGcm9tKCkgbmF0aXZlICJTb2NrZXRfUmVjdkZyb20iOwogIG5hdGl2ZVdyaXRlKExpc3Q8aW50PiBidWZmZXIsIGludCBvZmZzZXQsIGludCBieXRlcykKICAgICAgbmF0aXZlICJTb2NrZXRfV3JpdGVMaXN0IjsKICBuYXRpdmVTZW5kVG8oTGlzdDxpbnQ+IGJ1ZmZlciwgaW50IG9mZnNldCwgaW50IGJ5dGVzLCBVaW50OExpc3QgYWRkcmVzcywKICAgICAgaW50IHBvcnQpIG5hdGl2ZSAiU29ja2V0X1NlbmRUbyI7CiAgbmF0aXZlQ3JlYXRlQ29ubmVjdChVaW50OExpc3QgYWRkciwgaW50IHBvcnQsIGludCBzY29wZV9pZCkKICAgICAgbmF0aXZlICJTb2NrZXRfQ3JlYXRlQ29ubmVjdCI7CiAgbmF0aXZlQ3JlYXRlQmluZENvbm5lY3QoVWludDhMaXN0IGFkZHIsIGludCBwb3J0LCBVaW50OExpc3Qgc291cmNlQWRkciwKICAgICAgaW50IHNjb3BlX2lkKSBuYXRpdmUgIlNvY2tldF9DcmVhdGVCaW5kQ29ubmVjdCI7CiAgYm9vbCBpc0JpbmRFcnJvcihpbnQgZXJyb3JOdW1iZXIpIG5hdGl2ZSAiU29ja2V0QmFzZV9Jc0JpbmRFcnJvciI7CiAgbmF0aXZlQ3JlYXRlQmluZExpc3RlbihVaW50OExpc3QgYWRkciwgaW50IHBvcnQsIGludCBiYWNrbG9nLCBib29sIHY2T25seSwKICAgICAgYm9vbCBzaGFyZWQsIGludCBzY29wZV9pZCkgbmF0aXZlICJTZXJ2ZXJTb2NrZXRfQ3JlYXRlQmluZExpc3RlbiI7CiAgbmF0aXZlQ3JlYXRlQmluZERhdGFncmFtKFVpbnQ4TGlzdCBhZGRyLCBpbnQgcG9ydCwgYm9vbCByZXVzZUFkZHJlc3MsCiAgICAgIGJvb2wgcmV1c2VQb3J0LCBpbnQgdHRsKSBuYXRpdmUgIlNvY2tldF9DcmVhdGVCaW5kRGF0YWdyYW0iOwogIG5hdGl2ZUFjY2VwdChfTmF0aXZlU29ja2V0IHNvY2tldCkgbmF0aXZlICJTZXJ2ZXJTb2NrZXRfQWNjZXB0IjsKICBpbnQgbmF0aXZlR2V0UG9ydCgpIG5hdGl2ZSAiU29ja2V0X0dldFBvcnQiOwogIExpc3QgbmF0aXZlR2V0UmVtb3RlUGVlcigpIG5hdGl2ZSAiU29ja2V0X0dldFJlbW90ZVBlZXIiOwogIGludCBuYXRpdmVHZXRTb2NrZXRJZCgpIG5hdGl2ZSAiU29ja2V0X0dldFNvY2tldElkIjsKICBPU0Vycm9yIG5hdGl2ZUdldEVycm9yKCkgbmF0aXZlICJTb2NrZXRfR2V0RXJyb3IiOwogIG5hdGl2ZUdldE9wdGlvbihpbnQgb3B0aW9uLCBpbnQgcHJvdG9jb2wpIG5hdGl2ZSAiU29ja2V0X0dldE9wdGlvbiI7CiAgT1NFcnJvciBuYXRpdmVHZXRSYXdPcHRpb24oaW50IGxldmVsLCBpbnQgb3B0aW9uLCBVaW50OExpc3QgZGF0YSkKICAgICAgbmF0aXZlICJTb2NrZXRfR2V0UmF3T3B0aW9uIjsKICBPU0Vycm9yIG5hdGl2ZVNldE9wdGlvbihpbnQgb3B0aW9uLCBpbnQgcHJvdG9jb2wsIHZhbHVlKQogICAgICBuYXRpdmUgIlNvY2tldF9TZXRPcHRpb24iOwogIE9TRXJyb3IgbmF0aXZlU2V0UmF3T3B0aW9uKGludCBsZXZlbCwgaW50IG9wdGlvbiwgVWludDhMaXN0IGRhdGEpCiAgICAgIG5hdGl2ZSAiU29ja2V0X1NldFJhd09wdGlvbiI7CiAgT1NFcnJvciBuYXRpdmVKb2luTXVsdGljYXN0KFVpbnQ4TGlzdCBhZGRyLCBVaW50OExpc3QgaW50ZXJmYWNlQWRkciwKICAgICAgaW50IGludGVyZmFjZUluZGV4KSBuYXRpdmUgIlNvY2tldF9Kb2luTXVsdGljYXN0IjsKICBib29sIG5hdGl2ZUxlYXZlTXVsdGljYXN0KFVpbnQ4TGlzdCBhZGRyLCBVaW50OExpc3QgaW50ZXJmYWNlQWRkciwKICAgICAgaW50IGludGVyZmFjZUluZGV4KSBuYXRpdmUgIlNvY2tldF9MZWF2ZU11bHRpY2FzdCI7Cn0KCmNsYXNzIF9SYXdTZXJ2ZXJTb2NrZXQgZXh0ZW5kcyBTdHJlYW08UmF3U29ja2V0PiBpbXBsZW1lbnRzIFJhd1NlcnZlclNvY2tldCB7CiAgZmluYWwgX05hdGl2ZVNvY2tldCBfc29ja2V0OwogIFN0cmVhbUNvbnRyb2xsZXI8UmF3U29ja2V0PiBfY29udHJvbGxlcjsKICBSZWNlaXZlUG9ydCBfcmVmZXJlbmNlUG9ydDsKICBib29sIF92Nk9ubHk7CgogIHN0YXRpYyBGdXR1cmU8X1Jhd1NlcnZlclNvY2tldD4gYmluZCgKICAgICAgYWRkcmVzcywgaW50IHBvcnQsIGludCBiYWNrbG9nLCBib29sIHY2T25seSwgYm9vbCBzaGFyZWQpIHsKICAgIF90aHJvd09uQmFkUG9ydChwb3J0KTsKICAgIGlmIChiYWNrbG9nIDwgMCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkludmFsaWQgYmFja2xvZyAkYmFja2xvZyIpOwogICAgcmV0dXJuIF9OYXRpdmVTb2NrZXQuYmluZChhZGRyZXNzLCBwb3J0LCBiYWNrbG9nLCB2Nk9ubHksIHNoYXJlZCkKICAgICAgICAudGhlbigoc29ja2V0KSA9PiBuZXcgX1Jhd1NlcnZlclNvY2tldChzb2NrZXQsIHY2T25seSkpOwogIH0KCiAgX1Jhd1NlcnZlclNvY2tldCh0aGlzLl9zb2NrZXQsIHRoaXMuX3Y2T25seSk7CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxSYXdTb2NrZXQ+IGxpc3Rlbih2b2lkIG9uRGF0YShSYXdTb2NrZXQgZXZlbnQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgaWYgKF9jb250cm9sbGVyICE9IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlN0cmVhbSB3YXMgYWxyZWFkeSBsaXN0ZW5lZCB0byIpOwogICAgfQogICAgdmFyIHpvbmUgPSBab25lLmN1cnJlbnQ7CiAgICBfY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyKAogICAgICAgIHN5bmM6IHRydWUsCiAgICAgICAgb25MaXN0ZW46IF9vblN1YnNjcmlwdGlvblN0YXRlQ2hhbmdlLAogICAgICAgIG9uQ2FuY2VsOiBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSwKICAgICAgICBvblBhdXNlOiBfb25QYXVzZVN0YXRlQ2hhbmdlLAogICAgICAgIG9uUmVzdW1lOiBfb25QYXVzZVN0YXRlQ2hhbmdlKTsKICAgIF9zb2NrZXQuc2V0SGFuZGxlcnMocmVhZDogem9uZS5iaW5kQ2FsbGJhY2tHdWFyZGVkKCgpIHsKICAgICAgd2hpbGUgKF9zb2NrZXQuYXZhaWxhYmxlID4gMCkgewogICAgICAgIHZhciBzb2NrZXQgPSBfc29ja2V0LmFjY2VwdCgpOwogICAgICAgIGlmIChzb2NrZXQgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgIGlmICghY29uc3QgYm9vbC5mcm9tRW52aXJvbm1lbnQoImRhcnQudm0ucHJvZHVjdCIpKSB7CiAgICAgICAgICBfU29ja2V0UHJvZmlsZS5jb2xsZWN0TmV3U29ja2V0KHNvY2tldC5uYXRpdmVHZXRTb2NrZXRJZCgpLAogICAgICAgICAgICAgIF90Y3BTb2NrZXQsIHNvY2tldC5hZGRyZXNzLCBzb2NrZXQucG9ydCk7CiAgICAgICAgfQogICAgICAgIF9jb250cm9sbGVyLmFkZChfUmF3U29ja2V0KHNvY2tldCkpOwogICAgICAgIGlmIChfY29udHJvbGxlci5pc1BhdXNlZCkgcmV0dXJuOwogICAgICB9CiAgICB9KSwgZXJyb3I6IHpvbmUuYmluZEJpbmFyeUNhbGxiYWNrR3VhcmRlZCgoZSwgc3QpIHsKICAgICAgX2NvbnRyb2xsZXIuYWRkRXJyb3IoZSwgc3QpOwogICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgfSksIGRlc3Ryb3llZDogKCkgewogICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgICBpZiAoX3JlZmVyZW5jZVBvcnQgIT0gbnVsbCkgewogICAgICAgIF9yZWZlcmVuY2VQb3J0LmNsb3NlKCk7CiAgICAgICAgX3JlZmVyZW5jZVBvcnQgPSBudWxsOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBfY29udHJvbGxlci5zdHJlYW0ubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQoKICBpbnQgZ2V0IHBvcnQgPT4gX3NvY2tldC5wb3J0OwoKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3MgPT4gX3NvY2tldC5hZGRyZXNzOwoKICBGdXR1cmU8UmF3U2VydmVyU29ja2V0PiBjbG9zZSgpIHsKICAgIHJldHVybiBfc29ja2V0LmNsb3NlKCkudGhlbjxSYXdTZXJ2ZXJTb2NrZXQ+KChfKSB7CiAgICAgIGlmIChfcmVmZXJlbmNlUG9ydCAhPSBudWxsKSB7CiAgICAgICAgX3JlZmVyZW5jZVBvcnQuY2xvc2UoKTsKICAgICAgICBfcmVmZXJlbmNlUG9ydCA9IG51bGw7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9KTsKICB9CgogIHZvaWQgX3BhdXNlKCkgewogICAgX3NvY2tldC5zZXRMaXN0ZW5pbmcocmVhZDogZmFsc2UsIHdyaXRlOiBmYWxzZSk7CiAgfQoKICB2b2lkIF9yZXN1bWUoKSB7CiAgICBfc29ja2V0LnNldExpc3RlbmluZyhyZWFkOiB0cnVlLCB3cml0ZTogZmFsc2UpOwogIH0KCiAgdm9pZCBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSgpIHsKICAgIGlmIChfY29udHJvbGxlci5oYXNMaXN0ZW5lcikgewogICAgICBfcmVzdW1lKCk7CiAgICB9IGVsc2UgewogICAgICBfc29ja2V0LmNsb3NlKCk7CiAgICB9CiAgfQoKICB2b2lkIF9vblBhdXNlU3RhdGVDaGFuZ2UoKSB7CiAgICBpZiAoX2NvbnRyb2xsZXIuaXNQYXVzZWQpIHsKICAgICAgX3BhdXNlKCk7CiAgICB9IGVsc2UgewogICAgICBfcmVzdW1lKCk7CiAgICB9CiAgfQoKICB2b2lkIHNldCBfb3duZXIob3duZXIpIHsKICAgIF9zb2NrZXQub3duZXIgPSBvd25lcjsKICB9Cn0KCmNsYXNzIF9SYXdTb2NrZXQgZXh0ZW5kcyBTdHJlYW08UmF3U29ja2V0RXZlbnQ+IGltcGxlbWVudHMgUmF3U29ja2V0IHsKICBmaW5hbCBfTmF0aXZlU29ja2V0IF9zb2NrZXQ7CiAgU3RyZWFtQ29udHJvbGxlcjxSYXdTb2NrZXRFdmVudD4gX2NvbnRyb2xsZXI7CiAgYm9vbCBfcmVhZEV2ZW50c0VuYWJsZWQgPSB0cnVlOwogIGJvb2wgX3dyaXRlRXZlbnRzRW5hYmxlZCA9IHRydWU7CgogIC8vIEZsYWcgdG8gaGFuZGxlIEN0cmwtRCBjbG9zaW5nIG9mIHN0ZGlvIG9uIE1hYyBPUy4KICBib29sIF9pc01hY09TVGVybWluYWxJbnB1dCA9IGZhbHNlOwoKICBzdGF0aWMgRnV0dXJlPFJhd1NvY2tldD4gY29ubmVjdCgKICAgICAgaG9zdCwgaW50IHBvcnQsIHNvdXJjZUFkZHJlc3MsIER1cmF0aW9uIHRpbWVvdXQpIHsKICAgIHJldHVybiBfTmF0aXZlU29ja2V0LmNvbm5lY3QoaG9zdCwgcG9ydCwgc291cmNlQWRkcmVzcywgdGltZW91dCkKICAgICAgICAudGhlbigoc29ja2V0KSB7CiAgICAgIGlmICghY29uc3QgYm9vbC5mcm9tRW52aXJvbm1lbnQoImRhcnQudm0ucHJvZHVjdCIpKSB7CiAgICAgICAgX1NvY2tldFByb2ZpbGUuY29sbGVjdE5ld1NvY2tldCgKICAgICAgICAgICAgc29ja2V0Lm5hdGl2ZUdldFNvY2tldElkKCksIF90Y3BTb2NrZXQsIHNvY2tldC5hZGRyZXNzLCBwb3J0KTsKICAgICAgfQogICAgICByZXR1cm4gX1Jhd1NvY2tldChzb2NrZXQpOwogICAgfSk7CiAgfQoKICBzdGF0aWMgRnV0dXJlPENvbm5lY3Rpb25UYXNrPF9SYXdTb2NrZXQ+PiBzdGFydENvbm5lY3QoCiAgICAgIGhvc3QsIGludCBwb3J0LCBzb3VyY2VBZGRyZXNzKSB7CiAgICByZXR1cm4gX05hdGl2ZVNvY2tldC5zdGFydENvbm5lY3QoaG9zdCwgcG9ydCwgc291cmNlQWRkcmVzcykKICAgICAgICAudGhlbigoQ29ubmVjdGlvblRhc2s8X05hdGl2ZVNvY2tldD4gbmF0aXZlVGFzaykgewogICAgICBmaW5hbCBGdXR1cmU8X1Jhd1NvY2tldD4gcmF3ID0KICAgICAgICAgIG5hdGl2ZVRhc2suc29ja2V0LnRoZW4oKF9OYXRpdmVTb2NrZXQgbmF0aXZlU29ja2V0KSB7CiAgICAgICAgaWYgKCFjb25zdCBib29sLmZyb21FbnZpcm9ubWVudCgiZGFydC52bS5wcm9kdWN0IikpIHsKICAgICAgICAgIF9Tb2NrZXRQcm9maWxlLmNvbGxlY3ROZXdTb2NrZXQobmF0aXZlU29ja2V0Lm5hdGl2ZUdldFNvY2tldElkKCksCiAgICAgICAgICAgICAgX3RjcFNvY2tldCwgbmF0aXZlU29ja2V0LmFkZHJlc3MsIHBvcnQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gX1Jhd1NvY2tldChuYXRpdmVTb2NrZXQpOwogICAgICB9KTsKICAgICAgcmV0dXJuIENvbm5lY3Rpb25UYXNrPF9SYXdTb2NrZXQ+Ll8oCiAgICAgICAgICBzb2NrZXQ6IHJhdywgb25DYW5jZWw6IG5hdGl2ZVRhc2suX29uQ2FuY2VsKTsKICAgIH0pOwogIH0KCiAgX1Jhd1NvY2tldCh0aGlzLl9zb2NrZXQpIHsKICAgIHZhciB6b25lID0gWm9uZS5jdXJyZW50OwogICAgX2NvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcigKICAgICAgICBzeW5jOiB0cnVlLAogICAgICAgIG9uTGlzdGVuOiBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSwKICAgICAgICBvbkNhbmNlbDogX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2UsCiAgICAgICAgb25QYXVzZTogX29uUGF1c2VTdGF0ZUNoYW5nZSwKICAgICAgICBvblJlc3VtZTogX29uUGF1c2VTdGF0ZUNoYW5nZSk7CiAgICBfc29ja2V0LnNldEhhbmRsZXJzKAogICAgICAgIHJlYWQ6ICgpID0+IF9jb250cm9sbGVyLmFkZChSYXdTb2NrZXRFdmVudC5yZWFkKSwKICAgICAgICB3cml0ZTogKCkgewogICAgICAgICAgLy8gVGhlIHdyaXRlIGV2ZW50IGhhbmRsZXIgaXMgYXV0b21hdGljYWxseSBkaXNhYmxlZCBieSB0aGUKICAgICAgICAgIC8vIGV2ZW50IGhhbmRsZXIgd2hlbiBpdCBmaXJlcy4KICAgICAgICAgIHdyaXRlRXZlbnRzRW5hYmxlZCA9IGZhbHNlOwogICAgICAgICAgX2NvbnRyb2xsZXIuYWRkKFJhd1NvY2tldEV2ZW50LndyaXRlKTsKICAgICAgICB9LAogICAgICAgIGNsb3NlZDogKCkgPT4gX2NvbnRyb2xsZXIuYWRkKFJhd1NvY2tldEV2ZW50LnJlYWRDbG9zZWQpLAogICAgICAgIGRlc3Ryb3llZDogKCkgewogICAgICAgICAgX2NvbnRyb2xsZXIuYWRkKFJhd1NvY2tldEV2ZW50LmNsb3NlZCk7CiAgICAgICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgICAgIH0sCiAgICAgICAgZXJyb3I6IHpvbmUuYmluZEJpbmFyeUNhbGxiYWNrR3VhcmRlZCgoZSwgc3QpIHsKICAgICAgICAgIF9jb250cm9sbGVyLmFkZEVycm9yKGUsIHN0KTsKICAgICAgICAgIF9zb2NrZXQuY2xvc2UoKTsKICAgICAgICB9KSk7CiAgfQoKICBmYWN0b3J5IF9SYXdTb2NrZXQuX3dyaXRlUGlwZSgpIHsKICAgIHZhciBuYXRpdmUgPSBuZXcgX05hdGl2ZVNvY2tldC5waXBlKCk7CiAgICBuYXRpdmUuaXNDbG9zZWRSZWFkID0gdHJ1ZTsKICAgIG5hdGl2ZS5jbG9zZWRSZWFkRXZlbnRTZW50ID0gdHJ1ZTsKICAgIHJldHVybiBuZXcgX1Jhd1NvY2tldChuYXRpdmUpOwogIH0KCiAgZmFjdG9yeSBfUmF3U29ja2V0Ll9yZWFkUGlwZShpbnQgZmQpIHsKICAgIHZhciBuYXRpdmUgPSBuZXcgX05hdGl2ZVNvY2tldC5waXBlKCk7CiAgICBuYXRpdmUuaXNDbG9zZWRXcml0ZSA9IHRydWU7CiAgICBpZiAoZmQgIT0gbnVsbCkgX2dldFN0ZGlvSGFuZGxlKG5hdGl2ZSwgZmQpOwogICAgdmFyIHJlc3VsdCA9IG5ldyBfUmF3U29ja2V0KG5hdGl2ZSk7CiAgICBpZiAoZmQgIT0gbnVsbCkgewogICAgICB2YXIgc29ja2V0VHlwZSA9IF9TdGRJT1V0aWxzLl9uYXRpdmVTb2NrZXRUeXBlKHJlc3VsdC5fc29ja2V0KTsKICAgICAgcmVzdWx0Ll9pc01hY09TVGVybWluYWxJbnB1dCA9CiAgICAgICAgICBQbGF0Zm9ybS5pc01hY09TICYmIHNvY2tldFR5cGUgPT0gX3N0ZGlvSGFuZGxlVHlwZVRlcm1pbmFsOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxSYXdTb2NrZXRFdmVudD4gbGlzdGVuKHZvaWQgb25EYXRhKFJhd1NvY2tldEV2ZW50IGV2ZW50KSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIHJldHVybiBfY29udHJvbGxlci5zdHJlYW0ubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQoKICBpbnQgYXZhaWxhYmxlKCkgPT4gX3NvY2tldC5hdmFpbGFibGU7CgogIFVpbnQ4TGlzdCByZWFkKFtpbnQgbGVuXSkgewogICAgaWYgKF9pc01hY09TVGVybWluYWxJbnB1dCkgewogICAgICB2YXIgYXZhaWxhYmxlID0gdGhpcy5hdmFpbGFibGUoKTsKICAgICAgaWYgKGF2YWlsYWJsZSA9PSAwKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIGRhdGEgPSBfc29ja2V0LnJlYWQobGVuKTsKICAgICAgaWYgKGRhdGEgPT0gbnVsbCB8fCBkYXRhLmxlbmd0aCA8IGF2YWlsYWJsZSkgewogICAgICAgIC8vIFJlYWRpbmcgbGVzcyB0aGFuIGF2YWlsYWJsZSBmcm9tIGEgTWFjIE9TIHRlcm1pbmFsIGluZGljYXRlIEN0cmwtRC4KICAgICAgICAvLyBUaGlzIGlzIGludGVycHJldGVkIGFzIHJlYWQgY2xvc2VkLgogICAgICAgIHNjaGVkdWxlTWljcm90YXNrKCgpID0+IF9jb250cm9sbGVyLmFkZChSYXdTb2NrZXRFdmVudC5yZWFkQ2xvc2VkKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGRhdGE7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX3NvY2tldC5yZWFkKGxlbik7CiAgICB9CiAgfQoKICBpbnQgd3JpdGUoTGlzdDxpbnQ+IGJ1ZmZlciwgW2ludCBvZmZzZXQsIGludCBjb3VudF0pID0+CiAgICAgIF9zb2NrZXQud3JpdGUoYnVmZmVyLCBvZmZzZXQsIGNvdW50KTsKCiAgRnV0dXJlPFJhd1NvY2tldD4gY2xvc2UoKSA9PiBfc29ja2V0LmNsb3NlKCkudGhlbjxSYXdTb2NrZXQ+KChfKSB7CiAgICAgICAgaWYgKCFjb25zdCBib29sLmZyb21FbnZpcm9ubWVudCgiZGFydC52bS5wcm9kdWN0IikpIHsKICAgICAgICAgIF9Tb2NrZXRQcm9maWxlLmNvbGxlY3RTdGF0aXN0aWMoCiAgICAgICAgICAgICAgX3NvY2tldC5uYXRpdmVHZXRTb2NrZXRJZCgpLCBfU29ja2V0UHJvZmlsZVR5cGUuZW5kVGltZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9KTsKCiAgdm9pZCBzaHV0ZG93bihTb2NrZXREaXJlY3Rpb24gZGlyZWN0aW9uKSA9PiBfc29ja2V0LnNodXRkb3duKGRpcmVjdGlvbik7CgogIGludCBnZXQgcG9ydCA9PiBfc29ja2V0LnBvcnQ7CgogIGludCBnZXQgcmVtb3RlUG9ydCA9PiBfc29ja2V0LnJlbW90ZVBvcnQ7CgogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzcyA9PiBfc29ja2V0LmFkZHJlc3M7CgogIEludGVybmV0QWRkcmVzcyBnZXQgcmVtb3RlQWRkcmVzcyA9PiBfc29ja2V0LnJlbW90ZUFkZHJlc3M7CgogIGJvb2wgZ2V0IHJlYWRFdmVudHNFbmFibGVkID0+IF9yZWFkRXZlbnRzRW5hYmxlZDsKICB2b2lkIHNldCByZWFkRXZlbnRzRW5hYmxlZChib29sIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgIT0gX3JlYWRFdmVudHNFbmFibGVkKSB7CiAgICAgIF9yZWFkRXZlbnRzRW5hYmxlZCA9IHZhbHVlOwogICAgICBpZiAoIV9jb250cm9sbGVyLmlzUGF1c2VkKSBfcmVzdW1lKCk7CiAgICB9CiAgfQoKICBib29sIGdldCB3cml0ZUV2ZW50c0VuYWJsZWQgPT4gX3dyaXRlRXZlbnRzRW5hYmxlZDsKICB2b2lkIHNldCB3cml0ZUV2ZW50c0VuYWJsZWQoYm9vbCB2YWx1ZSkgewogICAgaWYgKHZhbHVlICE9IF93cml0ZUV2ZW50c0VuYWJsZWQpIHsKICAgICAgX3dyaXRlRXZlbnRzRW5hYmxlZCA9IHZhbHVlOwogICAgICBpZiAoIV9jb250cm9sbGVyLmlzUGF1c2VkKSBfcmVzdW1lKCk7CiAgICB9CiAgfQoKICBib29sIHNldE9wdGlvbihTb2NrZXRPcHRpb24gb3B0aW9uLCBib29sIGVuYWJsZWQpID0+CiAgICAgIF9zb2NrZXQuc2V0T3B0aW9uKG9wdGlvbiwgZW5hYmxlZCk7CgogIFVpbnQ4TGlzdCBnZXRSYXdPcHRpb24oUmF3U29ja2V0T3B0aW9uIG9wdGlvbikgPT4KICAgICAgX3NvY2tldC5nZXRSYXdPcHRpb24ob3B0aW9uKTsKICB2b2lkIHNldFJhd09wdGlvbihSYXdTb2NrZXRPcHRpb24gb3B0aW9uKSA9PiBfc29ja2V0LnNldFJhd09wdGlvbihvcHRpb24pOwoKICBfcGF1c2UoKSB7CiAgICBfc29ja2V0LnNldExpc3RlbmluZyhyZWFkOiBmYWxzZSwgd3JpdGU6IGZhbHNlKTsKICB9CgogIHZvaWQgX3Jlc3VtZSgpIHsKICAgIF9zb2NrZXQuc2V0TGlzdGVuaW5nKHJlYWQ6IF9yZWFkRXZlbnRzRW5hYmxlZCwgd3JpdGU6IF93cml0ZUV2ZW50c0VuYWJsZWQpOwogIH0KCiAgdm9pZCBfb25QYXVzZVN0YXRlQ2hhbmdlKCkgewogICAgaWYgKF9jb250cm9sbGVyLmlzUGF1c2VkKSB7CiAgICAgIF9wYXVzZSgpOwogICAgfSBlbHNlIHsKICAgICAgX3Jlc3VtZSgpOwogICAgfQogIH0KCiAgdm9pZCBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSgpIHsKICAgIGlmIChfY29udHJvbGxlci5oYXNMaXN0ZW5lcikgewogICAgICBfcmVzdW1lKCk7CiAgICB9IGVsc2UgewogICAgICBfc29ja2V0LmNsb3NlKCk7CiAgICB9CiAgfQoKICB2b2lkIHNldCBfb3duZXIob3duZXIpIHsKICAgIF9zb2NrZXQub3duZXIgPSBvd25lcjsKICB9Cn0KCkBwYXRjaApjbGFzcyBTZXJ2ZXJTb2NrZXQgewogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmU8U2VydmVyU29ja2V0PiBfYmluZChhZGRyZXNzLCBpbnQgcG9ydCwKICAgICAge2ludCBiYWNrbG9nOiAwLCBib29sIHY2T25seTogZmFsc2UsIGJvb2wgc2hhcmVkOiBmYWxzZX0pIHsKICAgIHJldHVybiBfU2VydmVyU29ja2V0LmJpbmQoYWRkcmVzcywgcG9ydCwgYmFja2xvZywgdjZPbmx5LCBzaGFyZWQpOwogIH0KfQoKY2xhc3MgX1NlcnZlclNvY2tldCBleHRlbmRzIFN0cmVhbTxTb2NrZXQ+IGltcGxlbWVudHMgU2VydmVyU29ja2V0IHsKICBmaW5hbCBfc29ja2V0OwoKICBzdGF0aWMgRnV0dXJlPF9TZXJ2ZXJTb2NrZXQ+IGJpbmQoCiAgICAgIGFkZHJlc3MsIGludCBwb3J0LCBpbnQgYmFja2xvZywgYm9vbCB2Nk9ubHksIGJvb2wgc2hhcmVkKSB7CiAgICByZXR1cm4gX1Jhd1NlcnZlclNvY2tldC5iaW5kKGFkZHJlc3MsIHBvcnQsIGJhY2tsb2csIHY2T25seSwgc2hhcmVkKQogICAgICAgIC50aGVuKChzb2NrZXQpID0+IG5ldyBfU2VydmVyU29ja2V0KHNvY2tldCkpOwogIH0KCiAgX1NlcnZlclNvY2tldCh0aGlzLl9zb2NrZXQpOwoKICBTdHJlYW1TdWJzY3JpcHRpb248U29ja2V0PiBsaXN0ZW4odm9pZCBvbkRhdGEoU29ja2V0IGV2ZW50KSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIHJldHVybiBfc29ja2V0Lm1hcDxTb2NrZXQ+KChyYXdTb2NrZXQpID0+IG5ldyBfU29ja2V0KHJhd1NvY2tldCkpLmxpc3RlbigKICAgICAgICBvbkRhdGEsCiAgICAgICAgb25FcnJvcjogb25FcnJvciwKICAgICAgICBvbkRvbmU6IG9uRG9uZSwKICAgICAgICBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKTsKICB9CgogIGludCBnZXQgcG9ydCA9PiBfc29ja2V0LnBvcnQ7CgogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzcyA9PiBfc29ja2V0LmFkZHJlc3M7CgogIEZ1dHVyZTxTZXJ2ZXJTb2NrZXQ+IGNsb3NlKCkgPT4KICAgICAgX3NvY2tldC5jbG9zZSgpLnRoZW48U2VydmVyU29ja2V0PigoXykgPT4gdGhpcyk7CgogIHZvaWQgc2V0IF9vd25lcihvd25lcikgewogICAgX3NvY2tldC5fb3duZXIgPSBvd25lcjsKICB9Cn0KCkBwYXRjaApjbGFzcyBTb2NrZXQgewogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmU8U29ja2V0PiBfY29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge3NvdXJjZUFkZHJlc3MsIER1cmF0aW9uIHRpbWVvdXR9KSB7CiAgICByZXR1cm4gUmF3U29ja2V0LmNvbm5lY3QoaG9zdCwgcG9ydCwKICAgICAgICAgICAgc291cmNlQWRkcmVzczogc291cmNlQWRkcmVzcywgdGltZW91dDogdGltZW91dCkKICAgICAgICAudGhlbigoc29ja2V0KSA9PiBuZXcgX1NvY2tldChzb2NrZXQpKTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmU8Q29ubmVjdGlvblRhc2s8U29ja2V0Pj4gX3N0YXJ0Q29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge3NvdXJjZUFkZHJlc3N9KSB7CiAgICByZXR1cm4gUmF3U29ja2V0LnN0YXJ0Q29ubmVjdChob3N0LCBwb3J0LCBzb3VyY2VBZGRyZXNzOiBzb3VyY2VBZGRyZXNzKQogICAgICAgIC50aGVuKChyYXdUYXNrKSB7CiAgICAgIEZ1dHVyZTxTb2NrZXQ+IHNvY2tldCA9CiAgICAgICAgICByYXdUYXNrLnNvY2tldC50aGVuKChyYXdTb2NrZXQpID0+IG5ldyBfU29ja2V0KHJhd1NvY2tldCkpOwogICAgICByZXR1cm4gbmV3IENvbm5lY3Rpb25UYXNrPFNvY2tldD4uXygKICAgICAgICAgIHNvY2tldDogc29ja2V0LCBvbkNhbmNlbDogcmF3VGFzay5fb25DYW5jZWwpOwogICAgfSk7CiAgfQp9CgpjbGFzcyBfU29ja2V0U3RyZWFtQ29uc3VtZXIgZXh0ZW5kcyBTdHJlYW1Db25zdW1lcjxMaXN0PGludD4+IHsKICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogIGZpbmFsIF9Tb2NrZXQgc29ja2V0OwogIGludCBvZmZzZXQ7CiAgTGlzdDxpbnQ+IGJ1ZmZlcjsKICBib29sIHBhdXNlZCA9IGZhbHNlOwogIENvbXBsZXRlciBzdHJlYW1Db21wbGV0ZXI7CgogIF9Tb2NrZXRTdHJlYW1Db25zdW1lcih0aGlzLnNvY2tldCk7CgogIEZ1dHVyZTxTb2NrZXQ+IGFkZFN0cmVhbShTdHJlYW08TGlzdDxpbnQ+PiBzdHJlYW0pIHsKICAgIHNvY2tldC5fZW5zdXJlUmF3U29ja2V0U3Vic2NyaXB0aW9uKCk7CiAgICBzdHJlYW1Db21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPFNvY2tldD4oKTsKICAgIGlmIChzb2NrZXQuX3JhdyAhPSBudWxsKSB7CiAgICAgIHN1YnNjcmlwdGlvbiA9IHN0cmVhbS5saXN0ZW4oKGRhdGEpIHsKICAgICAgICBhc3NlcnQoIXBhdXNlZCk7CiAgICAgICAgYXNzZXJ0KGJ1ZmZlciA9PSBudWxsKTsKICAgICAgICBidWZmZXIgPSBkYXRhOwogICAgICAgIG9mZnNldCA9IDA7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHdyaXRlKCk7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgc29ja2V0LmRlc3Ryb3koKTsKICAgICAgICAgIHN0b3AoKTsKICAgICAgICAgIGRvbmUoZSk7CiAgICAgICAgfQogICAgICB9LCBvbkVycm9yOiAoZXJyb3IsIFtzdGFja1RyYWNlXSkgewogICAgICAgIHNvY2tldC5kZXN0cm95KCk7CiAgICAgICAgZG9uZShlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIH0sIG9uRG9uZTogKCkgewogICAgICAgIGRvbmUoKTsKICAgICAgfSwgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICB9CiAgICByZXR1cm4gc3RyZWFtQ29tcGxldGVyLmZ1dHVyZTsKICB9CgogIEZ1dHVyZTxTb2NrZXQ+IGNsb3NlKCkgewogICAgc29ja2V0Ll9jb25zdW1lckRvbmUoKTsKICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKHNvY2tldCk7CiAgfQoKICB2b2lkIHdyaXRlKCkgewogICAgaWYgKHN1YnNjcmlwdGlvbiA9PSBudWxsKSByZXR1cm47CiAgICBhc3NlcnQoYnVmZmVyICE9IG51bGwpOwogICAgLy8gV3JpdGUgYXMgbXVjaCBhcyBwb3NzaWJsZS4KICAgIG9mZnNldCArPSBzb2NrZXQuX3dyaXRlKGJ1ZmZlciwgb2Zmc2V0LCBidWZmZXIubGVuZ3RoIC0gb2Zmc2V0KTsKICAgIGlmIChvZmZzZXQgPCBidWZmZXIubGVuZ3RoKSB7CiAgICAgIGlmICghcGF1c2VkKSB7CiAgICAgICAgcGF1c2VkID0gdHJ1ZTsKICAgICAgICBzdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgICAgfQogICAgICBzb2NrZXQuX2VuYWJsZVdyaXRlRXZlbnQoKTsKICAgIH0gZWxzZSB7CiAgICAgIGJ1ZmZlciA9IG51bGw7CiAgICAgIGlmIChwYXVzZWQpIHsKICAgICAgICBwYXVzZWQgPSBmYWxzZTsKICAgICAgICBzdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgZG9uZShbZXJyb3IsIHN0YWNrVHJhY2VdKSB7CiAgICBpZiAoc3RyZWFtQ29tcGxldGVyICE9IG51bGwpIHsKICAgICAgaWYgKGVycm9yICE9IG51bGwpIHsKICAgICAgICBzdHJlYW1Db21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3RyZWFtQ29tcGxldGVyLmNvbXBsZXRlKHNvY2tldCk7CiAgICAgIH0KICAgICAgc3RyZWFtQ29tcGxldGVyID0gbnVsbDsKICAgIH0KICB9CgogIHZvaWQgc3RvcCgpIHsKICAgIGlmIChzdWJzY3JpcHRpb24gPT0gbnVsbCkgcmV0dXJuOwogICAgc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogICAgc3Vic2NyaXB0aW9uID0gbnVsbDsKICAgIHBhdXNlZCA9IGZhbHNlOwogICAgc29ja2V0Ll9kaXNhYmxlV3JpdGVFdmVudCgpOwogIH0KfQoKY2xhc3MgX1NvY2tldCBleHRlbmRzIFN0cmVhbTxVaW50OExpc3Q+IGltcGxlbWVudHMgU29ja2V0IHsKICBSYXdTb2NrZXQgX3JhdzsgLy8gU2V0IHRvIG51bGwgd2hlbiB0aGUgcmF3IHNvY2tldCBpcyBjbG9zZWQuCiAgYm9vbCBfY2xvc2VkID0gZmFsc2U7IC8vIFNldCB0byB0cnVlIHdoZW4gdGhlIHJhdyBzb2NrZXQgaXMgY2xvc2VkLgogIFN0cmVhbUNvbnRyb2xsZXI8VWludDhMaXN0PiBfY29udHJvbGxlcjsKICBib29sIF9jb250cm9sbGVyQ2xvc2VkID0gZmFsc2U7CiAgX1NvY2tldFN0cmVhbUNvbnN1bWVyIF9jb25zdW1lcjsKICBJT1NpbmsgX3Npbms7CiAgdmFyIF9zdWJzY3JpcHRpb247CiAgdmFyIF9kZXRhY2hSZWFkeTsKCiAgX1NvY2tldCh0aGlzLl9yYXcpIHsKICAgIF9jb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8VWludDhMaXN0PigKICAgICAgICBzeW5jOiB0cnVlLAogICAgICAgIG9uTGlzdGVuOiBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSwKICAgICAgICBvbkNhbmNlbDogX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2UsCiAgICAgICAgb25QYXVzZTogX29uUGF1c2VTdGF0ZUNoYW5nZSwKICAgICAgICBvblJlc3VtZTogX29uUGF1c2VTdGF0ZUNoYW5nZSk7CiAgICBfY29uc3VtZXIgPSBuZXcgX1NvY2tldFN0cmVhbUNvbnN1bWVyKHRoaXMpOwogICAgX3NpbmsgPSBuZXcgSU9TaW5rKF9jb25zdW1lcik7CgogICAgLy8gRGlzYWJsZSByZWFkIGV2ZW50cyB1bnRpbCB0aGVyZSBpcyBhIHN1YnNjcmlwdGlvbi4KICAgIF9yYXcucmVhZEV2ZW50c0VuYWJsZWQgPSBmYWxzZTsKCiAgICAvLyBEaXNhYmxlIHdyaXRlIGV2ZW50cyB1bnRpbCB0aGUgY29uc3VtZXIgbmVlZHMgaXQgZm9yIHBlbmRpbmcgd3JpdGVzLgogICAgX3Jhdy53cml0ZUV2ZW50c0VuYWJsZWQgPSBmYWxzZTsKICB9CgogIGZhY3RvcnkgX1NvY2tldC5fd3JpdGVQaXBlKCkgewogICAgcmV0dXJuIG5ldyBfU29ja2V0KG5ldyBfUmF3U29ja2V0Ll93cml0ZVBpcGUoKSk7CiAgfQoKICBmYWN0b3J5IF9Tb2NrZXQuX3JlYWRQaXBlKFtpbnQgZmRdKSB7CiAgICByZXR1cm4gbmV3IF9Tb2NrZXQobmV3IF9SYXdTb2NrZXQuX3JlYWRQaXBlKGZkKSk7CiAgfQoKICAvLyBOb3RlOiB0aGlzIGNvZGUgc2VlbXMgYSBiaXQgc3VzcGljaW91cyBiZWNhdXNlIF9yYXcgY2FuIGJlIF9SYXdTb2NrZXQgYW5kCiAgLy8gaXQgY2FuIGJlIF9SYXdTZWN1cmVTb2NrZXQgYmVjYXVzZSBfU2VjdXJlU29ja2V0IGV4dGVuZHMgX1NvY2tldAogIC8vIGFuZCB0aGVzZSB0d28gdHlwZXMgYXJlIGluY29tcGF0aWJsZSBiZWNhdXNlIF9SYXdTZWN1cmVTb2NrZXQuX3NvY2tldAogIC8vIGlzIFNvY2tldCBhbmQgbm90IF9OYXRpdmVTb2NrZXQuCiAgX05hdGl2ZVNvY2tldCBnZXQgX25hdGl2ZVNvY2tldCA9PiAoX3JhdyBhcyBfUmF3U29ja2V0KS5fc29ja2V0OwoKICBTdHJlYW1TdWJzY3JpcHRpb248VWludDhMaXN0PiBsaXN0ZW4odm9pZCBvbkRhdGEoVWludDhMaXN0IGV2ZW50KSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIHJldHVybiBfY29udHJvbGxlci5zdHJlYW0ubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQoKICBFbmNvZGluZyBnZXQgZW5jb2RpbmcgPT4gX3NpbmsuZW5jb2Rpbmc7CgogIHZvaWQgc2V0IGVuY29kaW5nKEVuY29kaW5nIHZhbHVlKSB7CiAgICBfc2luay5lbmNvZGluZyA9IHZhbHVlOwogIH0KCiAgdm9pZCB3cml0ZShPYmplY3Qgb2JqKSA9PiBfc2luay53cml0ZShvYmopOwoKICB2b2lkIHdyaXRlbG4oW09iamVjdCBvYmogPSAiIl0pID0+IF9zaW5rLndyaXRlbG4ob2JqKTsKCiAgdm9pZCB3cml0ZUNoYXJDb2RlKGludCBjaGFyQ29kZSkgPT4gX3Npbmsud3JpdGVDaGFyQ29kZShjaGFyQ29kZSk7CgogIHZvaWQgd3JpdGVBbGwoSXRlcmFibGUgb2JqZWN0cywgW3NlcCA9ICIiXSkgPT4gX3Npbmsud3JpdGVBbGwob2JqZWN0cywgc2VwKTsKCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGJ5dGVzKSA9PiBfc2luay5hZGQoYnl0ZXMpOwoKICB2b2lkIGFkZEVycm9yKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3Qgc2VuZCBlcnJvcnMgb24gc29ja2V0cyIpOwogIH0KCiAgRnV0dXJlIGFkZFN0cmVhbShTdHJlYW08TGlzdDxpbnQ+PiBzdHJlYW0pIHsKICAgIHJldHVybiBfc2luay5hZGRTdHJlYW0oc3RyZWFtKTsKICB9CgogIEZ1dHVyZSBmbHVzaCgpID0+IF9zaW5rLmZsdXNoKCk7CgogIEZ1dHVyZSBjbG9zZSgpID0+IF9zaW5rLmNsb3NlKCk7CgogIEZ1dHVyZSBnZXQgZG9uZSA9PiBfc2luay5kb25lOwoKICB2b2lkIGRlc3Ryb3koKSB7CiAgICAvLyBEZXN0cm95IGNhbiBhbHdheXMgYmUgY2FsbGVkIHRvIGdldCByaWQgb2YgYSBzb2NrZXQuCiAgICBpZiAoX3JhdyA9PSBudWxsKSByZXR1cm47CiAgICBfY29uc3VtZXIuc3RvcCgpOwogICAgX2Nsb3NlUmF3U29ja2V0KCk7CiAgICBfY29udHJvbGxlckNsb3NlZCA9IHRydWU7CiAgICBfY29udHJvbGxlci5jbG9zZSgpOwogIH0KCiAgYm9vbCBzZXRPcHRpb24oU29ja2V0T3B0aW9uIG9wdGlvbiwgYm9vbCBlbmFibGVkKSB7CiAgICBpZiAoX3JhdyA9PSBudWxsKSB0aHJvdyBjb25zdCBTb2NrZXRFeGNlcHRpb24uY2xvc2VkKCk7CiAgICByZXR1cm4gX3Jhdy5zZXRPcHRpb24ob3B0aW9uLCBlbmFibGVkKTsKICB9CgogIFVpbnQ4TGlzdCBnZXRSYXdPcHRpb24oUmF3U29ja2V0T3B0aW9uIG9wdGlvbikgewogICAgaWYgKF9yYXcgPT0gbnVsbCkgdGhyb3cgY29uc3QgU29ja2V0RXhjZXB0aW9uLmNsb3NlZCgpOwogICAgcmV0dXJuIF9yYXcuZ2V0UmF3T3B0aW9uKG9wdGlvbik7CiAgfQoKICB2b2lkIHNldFJhd09wdGlvbihSYXdTb2NrZXRPcHRpb24gb3B0aW9uKSB7CiAgICBpZiAoX3JhdyA9PSBudWxsKSB0aHJvdyBjb25zdCBTb2NrZXRFeGNlcHRpb24uY2xvc2VkKCk7CiAgICBfcmF3LnNldFJhd09wdGlvbihvcHRpb24pOwogIH0KCiAgaW50IGdldCBwb3J0IHsKICAgIGlmIChfcmF3ID09IG51bGwpIHRocm93IGNvbnN0IFNvY2tldEV4Y2VwdGlvbi5jbG9zZWQoKTsKICAgIHJldHVybiBfcmF3LnBvcnQ7CiAgfQoKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3MgewogICAgaWYgKF9yYXcgPT0gbnVsbCkgdGhyb3cgY29uc3QgU29ja2V0RXhjZXB0aW9uLmNsb3NlZCgpOwogICAgcmV0dXJuIF9yYXcuYWRkcmVzczsKICB9CgogIGludCBnZXQgcmVtb3RlUG9ydCB7CiAgICBpZiAoX3JhdyA9PSBudWxsKSB0aHJvdyBjb25zdCBTb2NrZXRFeGNlcHRpb24uY2xvc2VkKCk7CiAgICByZXR1cm4gX3Jhdy5yZW1vdGVQb3J0OwogIH0KCiAgSW50ZXJuZXRBZGRyZXNzIGdldCByZW1vdGVBZGRyZXNzIHsKICAgIGlmIChfcmF3ID09IG51bGwpIHRocm93IGNvbnN0IFNvY2tldEV4Y2VwdGlvbi5jbG9zZWQoKTsKICAgIHJldHVybiBfcmF3LnJlbW90ZUFkZHJlc3M7CiAgfQoKICBGdXR1cmUgX2RldGFjaFJhdygpIHsKICAgIF9kZXRhY2hSZWFkeSA9IG5ldyBDb21wbGV0ZXIoKTsKICAgIF9zaW5rLmNsb3NlKCk7CiAgICByZXR1cm4gX2RldGFjaFJlYWR5LmZ1dHVyZS50aGVuKChfKSB7CiAgICAgIGFzc2VydChfY29uc3VtZXIuYnVmZmVyID09IG51bGwpOwogICAgICB2YXIgcmF3ID0gX3JhdzsKICAgICAgX3JhdyA9IG51bGw7CiAgICAgIHJldHVybiBbcmF3LCBfc3Vic2NyaXB0aW9uXTsKICAgIH0pOwogIH0KCiAgLy8gRW5zdXJlIGEgc3Vic2NyaXB0aW9uIG9uIHRoZSByYXcgc29ja2V0LiBCb3RoIHRoZSBzdHJlYW0gYW5kIHRoZQogIC8vIGNvbnN1bWVyIG5lZWRzIGEgc3Vic2NyaXB0aW9uIGFzIHRoZXkgc2hhcmUgdGhlIGVycm9yIGFuZCBkb25lCiAgLy8gZXZlbnRzIGZyb20gdGhlIHJhdyBzb2NrZXQuCiAgdm9pZCBfZW5zdXJlUmF3U29ja2V0U3Vic2NyaXB0aW9uKCkgewogICAgaWYgKF9zdWJzY3JpcHRpb24gPT0gbnVsbCAmJiBfcmF3ICE9IG51bGwpIHsKICAgICAgX3N1YnNjcmlwdGlvbiA9IF9yYXcubGlzdGVuKF9vbkRhdGEsCiAgICAgICAgICBvbkVycm9yOiBfb25FcnJvciwgb25Eb25lOiBfb25Eb25lLCBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIH0KICB9CgogIF9jbG9zZVJhd1NvY2tldCgpIHsKICAgIHZhciB0bXAgPSBfcmF3OwogICAgX3JhdyA9IG51bGw7CiAgICBfY2xvc2VkID0gdHJ1ZTsKICAgIHRtcC5jbG9zZSgpOwogIH0KCiAgdm9pZCBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSgpIHsKICAgIGlmIChfY29udHJvbGxlci5oYXNMaXN0ZW5lcikgewogICAgICBfZW5zdXJlUmF3U29ja2V0U3Vic2NyaXB0aW9uKCk7CiAgICAgIC8vIEVuYWJsZSByZWFkIGV2ZW50cyBmb3IgcHJvdmlkaW5nIGRhdGEgdG8gc3Vic2NyaXB0aW9uLgogICAgICBpZiAoX3JhdyAhPSBudWxsKSB7CiAgICAgICAgX3Jhdy5yZWFkRXZlbnRzRW5hYmxlZCA9IHRydWU7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIF9jb250cm9sbGVyQ2xvc2VkID0gdHJ1ZTsKICAgICAgaWYgKF9yYXcgIT0gbnVsbCkgewogICAgICAgIF9yYXcuc2h1dGRvd24oU29ja2V0RGlyZWN0aW9uLnJlY2VpdmUpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9vblBhdXNlU3RhdGVDaGFuZ2UoKSB7CiAgICBpZiAoX3JhdyAhPSBudWxsKSB7CiAgICAgIF9yYXcucmVhZEV2ZW50c0VuYWJsZWQgPSAhX2NvbnRyb2xsZXIuaXNQYXVzZWQ7CiAgICB9CiAgfQoKICB2b2lkIF9vbkRhdGEoZXZlbnQpIHsKICAgIHN3aXRjaCAoZXZlbnQpIHsKICAgICAgY2FzZSBSYXdTb2NrZXRFdmVudC5yZWFkOgogICAgICAgIGlmIChfcmF3ID09IG51bGwpIGJyZWFrOwogICAgICAgIHZhciBidWZmZXIgPSBfcmF3LnJlYWQoKTsKICAgICAgICBpZiAoYnVmZmVyICE9IG51bGwpIF9jb250cm9sbGVyLmFkZChidWZmZXIpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFJhd1NvY2tldEV2ZW50LndyaXRlOgogICAgICAgIF9jb25zdW1lci53cml0ZSgpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFJhd1NvY2tldEV2ZW50LnJlYWRDbG9zZWQ6CiAgICAgICAgX2NvbnRyb2xsZXJDbG9zZWQgPSB0cnVlOwogICAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQoKICB2b2lkIF9vbkRvbmUoKSB7CiAgICBpZiAoIV9jb250cm9sbGVyQ2xvc2VkKSB7CiAgICAgIF9jb250cm9sbGVyQ2xvc2VkID0gdHJ1ZTsKICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgIH0KICAgIF9jb25zdW1lci5kb25lKCk7CiAgfQoKICB2b2lkIF9vbkVycm9yKGVycm9yLCBzdGFja1RyYWNlKSB7CiAgICBpZiAoIV9jb250cm9sbGVyQ2xvc2VkKSB7CiAgICAgIF9jb250cm9sbGVyQ2xvc2VkID0gdHJ1ZTsKICAgICAgX2NvbnRyb2xsZXIuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgfQogICAgX2NvbnN1bWVyLmRvbmUoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgaW50IF93cml0ZShMaXN0PGludD4gZGF0YSwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgewogICAgaWYgKF9yYXcgIT0gbnVsbCkgewogICAgICByZXR1cm4gX3Jhdy53cml0ZShkYXRhLCBvZmZzZXQsIGxlbmd0aCk7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CgogIHZvaWQgX2VuYWJsZVdyaXRlRXZlbnQoKSB7CiAgICBpZiAoX3JhdyAhPSBudWxsKSB7CiAgICAgIF9yYXcud3JpdGVFdmVudHNFbmFibGVkID0gdHJ1ZTsKICAgIH0KICB9CgogIHZvaWQgX2Rpc2FibGVXcml0ZUV2ZW50KCkgewogICAgaWYgKF9yYXcgIT0gbnVsbCkgewogICAgICBfcmF3LndyaXRlRXZlbnRzRW5hYmxlZCA9IGZhbHNlOwogICAgfQogIH0KCiAgdm9pZCBfY29uc3VtZXJEb25lKCkgewogICAgaWYgKF9kZXRhY2hSZWFkeSAhPSBudWxsKSB7CiAgICAgIF9kZXRhY2hSZWFkeS5jb21wbGV0ZShudWxsKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChfcmF3ICE9IG51bGwpIHsKICAgICAgICBfcmF3LnNodXRkb3duKFNvY2tldERpcmVjdGlvbi5zZW5kKTsKICAgICAgICBfZGlzYWJsZVdyaXRlRXZlbnQoKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBzZXQgX293bmVyKG93bmVyKSB7CiAgICAvLyBOb3RlOiBfcmF3IGNhbiBiZSBfUmF3U29ja2V0IGFuZCBfUmF3U2VjdXJlU29ja2V0IHdoaWNoIGFyZSB0d28KICAgIC8vIGluY29tcGF0aWJsZSB0eXBlcy4KICAgIChfcmF3IGFzIGR5bmFtaWMpLl9vd25lciA9IG93bmVyOwogIH0KfQoKQHBhdGNoCmNsYXNzIFJhd0RhdGFncmFtU29ja2V0IHsKICBAcGF0Y2gKICBzdGF0aWMgRnV0dXJlPFJhd0RhdGFncmFtU29ja2V0PiBiaW5kKGhvc3QsIGludCBwb3J0LAogICAgICB7Ym9vbCByZXVzZUFkZHJlc3M6IHRydWUsIGJvb2wgcmV1c2VQb3J0OiBmYWxzZSwgaW50IHR0bDogMX0pIHsKICAgIHJldHVybiBfUmF3RGF0YWdyYW1Tb2NrZXQuYmluZChob3N0LCBwb3J0LCByZXVzZUFkZHJlc3MsIHJldXNlUG9ydCwgdHRsKTsKICB9Cn0KCmNsYXNzIF9SYXdEYXRhZ3JhbVNvY2tldCBleHRlbmRzIFN0cmVhbTxSYXdTb2NrZXRFdmVudD4KICAgIGltcGxlbWVudHMgUmF3RGF0YWdyYW1Tb2NrZXQgewogIF9OYXRpdmVTb2NrZXQgX3NvY2tldDsKICBTdHJlYW1Db250cm9sbGVyPFJhd1NvY2tldEV2ZW50PiBfY29udHJvbGxlcjsKICBib29sIF9yZWFkRXZlbnRzRW5hYmxlZCA9IHRydWU7CiAgYm9vbCBfd3JpdGVFdmVudHNFbmFibGVkID0gdHJ1ZTsKCiAgX1Jhd0RhdGFncmFtU29ja2V0KHRoaXMuX3NvY2tldCkgewogICAgdmFyIHpvbmUgPSBab25lLmN1cnJlbnQ7CiAgICBfY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPFJhd1NvY2tldEV2ZW50PigKICAgICAgICBzeW5jOiB0cnVlLAogICAgICAgIG9uTGlzdGVuOiBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSwKICAgICAgICBvbkNhbmNlbDogX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2UsCiAgICAgICAgb25QYXVzZTogX29uUGF1c2VTdGF0ZUNoYW5nZSwKICAgICAgICBvblJlc3VtZTogX29uUGF1c2VTdGF0ZUNoYW5nZSk7CiAgICBfc29ja2V0LnNldEhhbmRsZXJzKAogICAgICAgIHJlYWQ6ICgpID0+IF9jb250cm9sbGVyLmFkZChSYXdTb2NrZXRFdmVudC5yZWFkKSwKICAgICAgICB3cml0ZTogKCkgewogICAgICAgICAgLy8gVGhlIHdyaXRlIGV2ZW50IGhhbmRsZXIgaXMgYXV0b21hdGljYWxseSBkaXNhYmxlZCBieSB0aGUKICAgICAgICAgIC8vIGV2ZW50IGhhbmRsZXIgd2hlbiBpdCBmaXJlcy4KICAgICAgICAgIHdyaXRlRXZlbnRzRW5hYmxlZCA9IGZhbHNlOwogICAgICAgICAgX2NvbnRyb2xsZXIuYWRkKFJhd1NvY2tldEV2ZW50LndyaXRlKTsKICAgICAgICB9LAogICAgICAgIGNsb3NlZDogKCkgPT4gX2NvbnRyb2xsZXIuYWRkKFJhd1NvY2tldEV2ZW50LnJlYWRDbG9zZWQpLAogICAgICAgIGRlc3Ryb3llZDogKCkgewogICAgICAgICAgX2NvbnRyb2xsZXIuYWRkKFJhd1NvY2tldEV2ZW50LmNsb3NlZCk7CiAgICAgICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgICAgIH0sCiAgICAgICAgZXJyb3I6IHpvbmUuYmluZEJpbmFyeUNhbGxiYWNrR3VhcmRlZCgoZSwgc3QpIHsKICAgICAgICAgIF9jb250cm9sbGVyLmFkZEVycm9yKGUsIHN0KTsKICAgICAgICAgIF9zb2NrZXQuY2xvc2UoKTsKICAgICAgICB9KSk7CiAgfQoKICBzdGF0aWMgRnV0dXJlPFJhd0RhdGFncmFtU29ja2V0PiBiaW5kKAogICAgICBob3N0LCBpbnQgcG9ydCwgYm9vbCByZXVzZUFkZHJlc3MsIGJvb2wgcmV1c2VQb3J0LCBpbnQgdHRsKSB7CiAgICBfdGhyb3dPbkJhZFBvcnQocG9ydCk7CiAgICBfdGhyb3dPbkJhZFR0bCh0dGwpOwogICAgcmV0dXJuIF9OYXRpdmVTb2NrZXQuYmluZERhdGFncmFtKGhvc3QsIHBvcnQsIHJldXNlQWRkcmVzcywgcmV1c2VQb3J0LCB0dGwpCiAgICAgICAgLnRoZW4oKHNvY2tldCkgewogICAgICBpZiAoIWNvbnN0IGJvb2wuZnJvbUVudmlyb25tZW50KCJkYXJ0LnZtLnByb2R1Y3QiKSkgewogICAgICAgIF9Tb2NrZXRQcm9maWxlLmNvbGxlY3ROZXdTb2NrZXQoCiAgICAgICAgICAgIHNvY2tldC5uYXRpdmVHZXRTb2NrZXRJZCgpLCBfdWRwU29ja2V0LCBzb2NrZXQuYWRkcmVzcywgcG9ydCk7CiAgICAgIH0KICAgICAgcmV0dXJuIF9SYXdEYXRhZ3JhbVNvY2tldChzb2NrZXQpOwogICAgfSk7CiAgfQoKICBTdHJlYW1TdWJzY3JpcHRpb248UmF3U29ja2V0RXZlbnQ+IGxpc3Rlbih2b2lkIG9uRGF0YShSYXdTb2NrZXRFdmVudCBldmVudCksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICByZXR1cm4gX2NvbnRyb2xsZXIuc3RyZWFtLmxpc3RlbihvbkRhdGEsCiAgICAgICAgb25FcnJvcjogb25FcnJvciwgb25Eb25lOiBvbkRvbmUsIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgRnV0dXJlIGNsb3NlKCkgPT4gX3NvY2tldC5jbG9zZSgpLnRoZW48UmF3RGF0YWdyYW1Tb2NrZXQ+KChfKSB7CiAgICAgICAgaWYgKCFjb25zdCBib29sLmZyb21FbnZpcm9ubWVudCgiZGFydC52bS5wcm9kdWN0IikpIHsKICAgICAgICAgIF9Tb2NrZXRQcm9maWxlLmNvbGxlY3RTdGF0aXN0aWMoCiAgICAgICAgICAgICAgX3NvY2tldC5uYXRpdmVHZXRTb2NrZXRJZCgpLCBfU29ja2V0UHJvZmlsZVR5cGUuZW5kVGltZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9KTsKCiAgaW50IHNlbmQoTGlzdDxpbnQ+IGJ1ZmZlciwgSW50ZXJuZXRBZGRyZXNzIGFkZHJlc3MsIGludCBwb3J0KSA9PgogICAgICBfc29ja2V0LnNlbmQoYnVmZmVyLCAwLCBidWZmZXIubGVuZ3RoLCBhZGRyZXNzLCBwb3J0KTsKCiAgRGF0YWdyYW0gcmVjZWl2ZSgpIHsKICAgIHJldHVybiBfc29ja2V0LnJlY2VpdmUoKTsKICB9CgogIHZvaWQgam9pbk11bHRpY2FzdChJbnRlcm5ldEFkZHJlc3MgZ3JvdXAsIFtOZXR3b3JrSW50ZXJmYWNlIGludGVyZmFjZV0pIHsKICAgIF9zb2NrZXQuam9pbk11bHRpY2FzdChncm91cCwgaW50ZXJmYWNlKTsKICB9CgogIHZvaWQgbGVhdmVNdWx0aWNhc3QoSW50ZXJuZXRBZGRyZXNzIGdyb3VwLCBbTmV0d29ya0ludGVyZmFjZSBpbnRlcmZhY2VdKSB7CiAgICBfc29ja2V0LmxlYXZlTXVsdGljYXN0KGdyb3VwLCBpbnRlcmZhY2UpOwogIH0KCiAgYm9vbCBnZXQgcmVhZEV2ZW50c0VuYWJsZWQgPT4gX3JlYWRFdmVudHNFbmFibGVkOwogIHZvaWQgc2V0IHJlYWRFdmVudHNFbmFibGVkKGJvb2wgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSAhPSBfcmVhZEV2ZW50c0VuYWJsZWQpIHsKICAgICAgX3JlYWRFdmVudHNFbmFibGVkID0gdmFsdWU7CiAgICAgIGlmICghX2NvbnRyb2xsZXIuaXNQYXVzZWQpIF9yZXN1bWUoKTsKICAgIH0KICB9CgogIGJvb2wgZ2V0IHdyaXRlRXZlbnRzRW5hYmxlZCA9PiBfd3JpdGVFdmVudHNFbmFibGVkOwogIHZvaWQgc2V0IHdyaXRlRXZlbnRzRW5hYmxlZChib29sIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgIT0gX3dyaXRlRXZlbnRzRW5hYmxlZCkgewogICAgICBfd3JpdGVFdmVudHNFbmFibGVkID0gdmFsdWU7CiAgICAgIGlmICghX2NvbnRyb2xsZXIuaXNQYXVzZWQpIF9yZXN1bWUoKTsKICAgIH0KICB9CgogIGJvb2wgZ2V0IG11bHRpY2FzdExvb3BiYWNrID0+CiAgICAgIF9zb2NrZXQuZ2V0T3B0aW9uKFNvY2tldE9wdGlvbi5faXBNdWx0aWNhc3RMb29wKTsKICB2b2lkIHNldCBtdWx0aWNhc3RMb29wYmFjayhib29sIHZhbHVlKSA9PgogICAgICBfc29ja2V0LnNldE9wdGlvbihTb2NrZXRPcHRpb24uX2lwTXVsdGljYXN0TG9vcCwgdmFsdWUpOwoKICBpbnQgZ2V0IG11bHRpY2FzdEhvcHMgPT4gX3NvY2tldC5nZXRPcHRpb24oU29ja2V0T3B0aW9uLl9pcE11bHRpY2FzdEhvcHMpOwogIHZvaWQgc2V0IG11bHRpY2FzdEhvcHMoaW50IHZhbHVlKSA9PgogICAgICBfc29ja2V0LnNldE9wdGlvbihTb2NrZXRPcHRpb24uX2lwTXVsdGljYXN0SG9wcywgdmFsdWUpOwoKICBOZXR3b3JrSW50ZXJmYWNlIGdldCBtdWx0aWNhc3RJbnRlcmZhY2UgPT4gdGhyb3cgIk5vdCBpbXBsZW1lbnRlZCI7CiAgdm9pZCBzZXQgbXVsdGljYXN0SW50ZXJmYWNlKE5ldHdvcmtJbnRlcmZhY2UgdmFsdWUpID0+CiAgICAgIHRocm93ICJOb3QgaW1wbGVtZW50ZWQiOwoKICBib29sIGdldCBicm9hZGNhc3RFbmFibGVkID0+IF9zb2NrZXQuZ2V0T3B0aW9uKFNvY2tldE9wdGlvbi5faXBCcm9hZGNhc3QpOwogIHZvaWQgc2V0IGJyb2FkY2FzdEVuYWJsZWQoYm9vbCB2YWx1ZSkgPT4KICAgICAgX3NvY2tldC5zZXRPcHRpb24oU29ja2V0T3B0aW9uLl9pcEJyb2FkY2FzdCwgdmFsdWUpOwoKICBpbnQgZ2V0IHBvcnQgPT4gX3NvY2tldC5wb3J0OwoKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3MgPT4gX3NvY2tldC5hZGRyZXNzOwoKICBfcGF1c2UoKSB7CiAgICBfc29ja2V0LnNldExpc3RlbmluZyhyZWFkOiBmYWxzZSwgd3JpdGU6IGZhbHNlKTsKICB9CgogIHZvaWQgX3Jlc3VtZSgpIHsKICAgIF9zb2NrZXQuc2V0TGlzdGVuaW5nKHJlYWQ6IF9yZWFkRXZlbnRzRW5hYmxlZCwgd3JpdGU6IF93cml0ZUV2ZW50c0VuYWJsZWQpOwogIH0KCiAgdm9pZCBfb25QYXVzZVN0YXRlQ2hhbmdlKCkgewogICAgaWYgKF9jb250cm9sbGVyLmlzUGF1c2VkKSB7CiAgICAgIF9wYXVzZSgpOwogICAgfSBlbHNlIHsKICAgICAgX3Jlc3VtZSgpOwogICAgfQogIH0KCiAgdm9pZCBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSgpIHsKICAgIGlmIChfY29udHJvbGxlci5oYXNMaXN0ZW5lcikgewogICAgICBfcmVzdW1lKCk7CiAgICB9IGVsc2UgewogICAgICBfc29ja2V0LmNsb3NlKCk7CiAgICB9CiAgfQoKICBVaW50OExpc3QgZ2V0UmF3T3B0aW9uKFJhd1NvY2tldE9wdGlvbiBvcHRpb24pID0+CiAgICAgIF9zb2NrZXQuZ2V0UmF3T3B0aW9uKG9wdGlvbik7CiAgdm9pZCBzZXRSYXdPcHRpb24oUmF3U29ja2V0T3B0aW9uIG9wdGlvbikgPT4gX3NvY2tldC5zZXRSYXdPcHRpb24ob3B0aW9uKTsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCkRhdGFncmFtIF9tYWtlRGF0YWdyYW0oCiAgICBVaW50OExpc3QgZGF0YSwgU3RyaW5nIGFkZHJlc3MsIFVpbnQ4TGlzdCBpbl9hZGRyLCBp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ZCB7CiAgICBpZiAoX19zZXJ2aWNlSWQgPT0gMCkgX19zZXJ2aWNlSWQgPSBfbmV4dFNlcnZpY2VJZCsrOwogICAgcmV0dXJuIF9fc2VydmljZUlkOwogIH0KCiAgTWFwIF90b0pTT04oYm9vbCByZWYpOwoKICBTdHJpbmcgZ2V0IF9zZXJ2aWNlUGF0aCA9PiAiJF9zZXJ2aWNlVHlwZVBhdGgvJF9zZXJ2aWNlSWQiOwoKICBTdHJpbmcgZ2V0IF9zZXJ2aWNlVHlwZVBhdGg7CgogIFN0cmluZyBnZXQgX3NlcnZpY2VUeXBlTmFtZTsKCiAgU3RyaW5nIF9zZXJ2aWNlVHlwZShib29sIHJlZikgewogICAgaWYgKHJlZikgcmV0dXJuICJAJF9zZXJ2aWNlVHlwZU5hbWUiOwogICAgcmV0dXJuIF9zZXJ2aWNlVHlwZU5hbWU7CiAgfQp9CiEATk48AQ8BEQEYATkgFxc6GAQBGQE+AR8BHwEiKh0EAgEbZGFydDppby9zZXJ2aWNlX29iamVjdC5kYXJ0Vm9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL19pbnRlcm5hbC92bS9iaW4vc2VjdXJlX3NvY2tldF9wYXRjaC5kYXJ0ncEvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vIHBhcnQgb2YgImNvbW1vbl9wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBTZWN1cmVTb2NrZXQgewogIEBwYXRjaAogIGZhY3RvcnkgU2VjdXJlU29ja2V0Ll8oUmF3U2VjdXJlU29ja2V0IHJhd1NvY2tldCkgPT4KICAgICAgbmV3IF9TZWN1cmVTb2NrZXQocmF3U29ja2V0KTsKfQoKQHBhdGNoCmNsYXNzIF9TZWN1cmVGaWx0ZXIgewogIEBwYXRjaAogIGZhY3RvcnkgX1NlY3VyZUZpbHRlci5fKCkgPT4gbmV3IF9TZWN1cmVGaWx0ZXJJbXBsLl8oKTsKfQoKQHBhdGNoCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgWDUwOUNlcnRpZmljYXRlIHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgZmFjdG9yeSBYNTA5Q2VydGlmaWNhdGUuXygpID0+IG5ldyBfWDUwOUNlcnRpZmljYXRlSW1wbC5fKCk7Cn0KCmNsYXNzIF9TZWN1cmVTb2NrZXQgZXh0ZW5kcyBfU29ja2V0IGltcGxlbWVudHMgU2VjdXJlU29ja2V0IHsKICBfUmF3U2VjdXJlU29ja2V0IGdldCBfcmF3ID0+IHN1cGVyLl9yYXcgYXMgX1Jhd1NlY3VyZVNvY2tldDsKCiAgX1NlY3VyZVNvY2tldChSYXdTZWN1cmVTb2NrZXQgcmF3KSA6IHN1cGVyKHJhdyk7CgogIHZvaWQgcmVuZWdvdGlhdGUoCiAgICAgIHtib29sIHVzZVNlc3Npb25DYWNoZTogdHJ1ZSwKICAgICAgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlLAogICAgICBib29sIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2V9KSB7CiAgICBfcmF3LnJlbmVnb3RpYXRlKAogICAgICAgIHVzZVNlc3Npb25DYWNoZTogdXNlU2Vzc2lvbkNhY2hlLAogICAgICAgIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTogcmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICAgIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZTogcmVxdWlyZUNsaWVudENlcnRpZmljYXRlKTsKICB9CgogIFg1MDlDZXJ0aWZpY2F0ZSBnZXQgcGVlckNlcnRpZmljYXRlIHsKICAgIGlmIChfcmF3ID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoInBlZXJDZXJ0aWZpY2F0ZSBjYWxsZWQgb24gZGVzdHJveWVkIFNlY3VyZVNvY2tldCIpOwogICAgfQogICAgcmV0dXJuIF9yYXcucGVlckNlcnRpZmljYXRlOwogIH0KCiAgU3RyaW5nIGdldCBzZWxlY3RlZFByb3RvY29sIHsKICAgIGlmIChfcmF3ID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoInNlbGVjdGVkUHJvdG9jb2wgY2FsbGVkIG9uIGRlc3Ryb3llZCBTZWN1cmVTb2NrZXQiKTsKICAgIH0KICAgIHJldHVybiBfcmF3LnNlbGVjdGVkUHJvdG9jb2w7CiAgfQp9CgovKioKICogX1NlY3VyZUZpbHRlckltcGwgd3JhcHMgYSBmaWx0ZXIgdGhhdCBlbmNyeXB0cyBhbmQgZGVjcnlwdHMgZGF0YSB0cmF2ZWxsaW5nCiAqIG92ZXIgYW4gZW5jcnlwdGVkIHNvY2tldC4gIFRoZSBmaWx0ZXIgYWxzbyBoYW5kbGVzIHRoZSBoYW5kc2hha2luZwogKiBhbmQgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uLgogKgogKiBUaGUgZmlsdGVyIGV4cG9zZXMgaXRzIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycyBhcyBEYXJ0IG9iamVjdHMgdGhhdAogKiBhcmUgYmFja2VkIGJ5IGFuIGV4dGVybmFsIEMgYXJyYXkgb2YgYnl0ZXMsIHNvIHRoYXQgYm90aCBEYXJ0IGNvZGUgYW5kCiAqIG5hdGl2ZSBjb2RlIGNhbiBhY2Nlc3MgdGhlIHNhbWUgZGF0YS4KICovCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1NlY3VyZUZpbHRlckltcGwgZXh0ZW5kcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczEKICAgIGltcGxlbWVudHMgX1NlY3VyZUZpbHRlciB7CiAgLy8gUGVyZm9ybWFuY2UgaXMgaW1wcm92ZWQgaWYgYSBmdWxsIGJ1ZmZlciBvZiBwbGFpbnRleHQgZml0cwogIC8vIGluIHRoZSBlbmNyeXB0ZWQgYnVmZmVyLCB3aGVuIGVuY3J5cHRlZC4KICAvLyBTSVpFIGFuZCBFTkNSWVBURURfU0laRSBhcmUgcmVmZXJlbmNlZCBmcm9tIEMrKy4KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgc3RhdGljIGZpbmFsIGludCBTSVpFID0gOCAqIDEwMjQ7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHN0YXRpYyBmaW5hbCBpbnQgRU5DUllQVEVEX1NJWkUgPSAxMCAqIDEwMjQ7CgogIF9TZWN1cmVGaWx0ZXJJbXBsLl8oKSB7CiAgICBidWZmZXJzID0gbmV3IExpc3Q8X0V4dGVybmFsQnVmZmVyPihfUmF3U2VjdXJlU29ja2V0LmJ1ZmZlckNvdW50KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX1Jhd1NlY3VyZVNvY2tldC5idWZmZXJDb3VudDsgKytpKSB7CiAgICAgIGJ1ZmZlcnNbaV0gPSBuZXcgX0V4dGVybmFsQnVmZmVyKAogICAgICAgICAgX1Jhd1NlY3VyZVNvY2tldC5faXNCdWZmZXJFbmNyeXB0ZWQoaSkgPyBFTkNSWVBURURfU0laRSA6IFNJWkUpOwogICAgfQogIH0KCiAgdm9pZCBjb25uZWN0KAogICAgICBTdHJpbmcgaG9zdE5hbWUsCiAgICAgIFNlY3VyaXR5Q29udGV4dCBjb250ZXh0LAogICAgICBib29sIGlzX3NlcnZlciwKICAgICAgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsCiAgICAgIGJvb2wgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlLAogICAgICBVaW50OExpc3QgcHJvdG9jb2xzKSBuYXRpdmUgIlNlY3VyZVNvY2tldF9Db25uZWN0IjsKCiAgdm9pZCBkZXN0cm95KCkgewogICAgYnVmZmVycyA9IG51bGw7CiAgICBfZGVzdHJveSgpOwogIH0KCiAgdm9pZCBfZGVzdHJveSgpIG5hdGl2ZSAiU2VjdXJlU29ja2V0X0Rlc3Ryb3kiOwoKICB2b2lkIGhhbmRzaGFrZSgpIG5hdGl2ZSAiU2VjdXJlU29ja2V0X0hhbmRzaGFrZSI7CgogIHZvaWQgcmVoYW5kc2hha2UoKSA9PiB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKCk7CgogIGludCBwcm9jZXNzQnVmZmVyKGludCBidWZmZXJJbmRleCkgPT4gdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcigpOwoKICBTdHJpbmcgc2VsZWN0ZWRQcm90b2NvbCgpIG5hdGl2ZSAiU2VjdXJlU29ja2V0X0dldFNlbGVjdGVkUHJvdG9jb2wiOwoKICB2b2lkIHJlbmVnb3RpYXRlKGJvb2wgdXNlU2Vzc2lvbkNhY2hlLCBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgYm9vbCByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUpIG5hdGl2ZSAiU2VjdXJlU29ja2V0X1JlbmVnb3RpYXRlIjsKCiAgdm9pZCBpbml0KCkgbmF0aXZlICJTZWN1cmVTb2NrZXRfSW5pdCI7CgogIFg1MDlDZXJ0aWZpY2F0ZSBnZXQgcGVlckNlcnRpZmljYXRlIG5hdGl2ZSAiU2VjdXJlU29ja2V0X1BlZXJDZXJ0aWZpY2F0ZSI7CgogIHZvaWQgcmVnaXN0ZXJCYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrKEZ1bmN0aW9uIGNhbGxiYWNrKQogICAgICBuYXRpdmUgIlNlY3VyZVNvY2tldF9SZWdpc3RlckJhZENlcnRpZmljYXRlQ2FsbGJhY2siOwoKICB2b2lkIHJlZ2lzdGVySGFuZHNoYWtlQ29tcGxldGVDYWxsYmFjayhGdW5jdGlvbiBoYW5kc2hha2VDb21wbGV0ZUhhbmRsZXIpCiAgICAgIG5hdGl2ZSAiU2VjdXJlU29ja2V0X1JlZ2lzdGVySGFuZHNoYWtlQ29tcGxldGVDYWxsYmFjayI7CgogIC8vIFRoaXMgaXMgYSBzZWN1cml0eSBpc3N1ZSwgYXMgaXQgZXhwb3NlcyBhIHJhdyBwb2ludGVyIHRvIERhcnQgY29kZS4KICBpbnQgX3BvaW50ZXIoKSBuYXRpdmUgIlNlY3VyZVNvY2tldF9GaWx0ZXJQb2ludGVyIjsKCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiZ2V0IikKICBMaXN0PF9FeHRlcm5hbEJ1ZmZlcj4gYnVmZmVyczsKfQoKQHBhdGNoCmNsYXNzIFNlY3VyaXR5Q29udGV4dCB7CiAgQHBhdGNoCiAgZmFjdG9yeSBTZWN1cml0eUNvbnRleHQoe2Jvb2wgd2l0aFRydXN0ZWRSb290czogZmFsc2V9KSB7CiAgICByZXR1cm4gbmV3IF9TZWN1cml0eUNvbnRleHQod2l0aFRydXN0ZWRSb290cyk7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgU2VjdXJpdHlDb250ZXh0IGdldCBkZWZhdWx0Q29udGV4dCB7CiAgICByZXR1cm4gX1NlY3VyaXR5Q29udGV4dC5kZWZhdWx0Q29udGV4dDsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBib29sIGdldCBhbHBuU3VwcG9ydGVkID0+IHRydWU7Cn0KCmNsYXNzIF9TZWN1cml0eUNvbnRleHQgZXh0ZW5kcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczEKICAgIGltcGxlbWVudHMgU2VjdXJpdHlDb250ZXh0IHsKICBfU2VjdXJpdHlDb250ZXh0KGJvb2wgd2l0aFRydXN0ZWRSb290cykgewogICAgX2NyZWF0ZU5hdGl2ZUNvbnRleHQoKTsKICAgIGlmICh3aXRoVHJ1c3RlZFJvb3RzKSB7CiAgICAgIF90cnVzdEJ1aWx0aW5Sb290cygpOwogICAgfQogIH0KCiAgdm9pZCBfY3JlYXRlTmF0aXZlQ29udGV4dCgpIG5hdGl2ZSAiU2VjdXJpdHlDb250ZXh0X0FsbG9jYXRlIjsKCiAgc3RhdGljIGZpbmFsIFNlY3VyaXR5Q29udGV4dCBkZWZhdWx0Q29udGV4dCA9IG5ldyBfU2VjdXJpdHlDb250ZXh0KHRydWUpOwoKICB2b2lkIHVzZVByaXZhdGVLZXkoU3RyaW5nIGZpbGUsIHtTdHJpbmcgcGFzc3dvcmR9KSB7CiAgICBMaXN0PGludD4gYnl0ZXMgPSAobmV3IEZpbGUoZmlsZSkpLnJlYWRBc0J5dGVzU3luYygpOwogICAgdXNlUHJpdmF0ZUtleUJ5dGVzKGJ5dGVzLCBwYXNzd29yZDogcGFzc3dvcmQpOwogIH0KCiAgdm9pZCB1c2VQcml2YXRlS2V5Qnl0ZXMoTGlzdDxpbnQ+IGtleUJ5dGVzLCB7U3RyaW5nIHBhc3N3b3JkfSkKICAgICAgbmF0aXZlICJTZWN1cml0eUNvbnRleHRfVXNlUHJpdmF0ZUtleUJ5dGVzIjsKCiAgdm9pZCBzZXRUcnVzdGVkQ2VydGlmaWNhdGVzKFN0cmluZyBmaWxlLCB7U3RyaW5nIHBhc3N3b3JkfSkgewogICAgTGlzdDxpbnQ+IGJ5dGVzID0gKG5ldyBGaWxlKGZpbGUpKS5yZWFkQXNCeXRlc1N5bmMoKTsKICAgIHNldFRydXN0ZWRDZXJ0aWZpY2F0ZXNCeXRlcyhieXRlcywgcGFzc3dvcmQ6IHBhc3N3b3JkKTsKICB9CgogIHZvaWQgc2V0VHJ1c3RlZENlcnRpZmljYXRlc0J5dGVzKExpc3Q8aW50PiBjZXJ0Qnl0ZXMsIHtTdHJpbmcgcGFzc3dvcmR9KQogICAgICBuYXRpdmUgIlNlY3VyaXR5Q29udGV4dF9TZXRUcnVzdGVkQ2VydGlmaWNhdGVzQnl0ZXMiOwoKICB2b2lkIHVzZUNlcnRpZmljYXRlQ2hhaW4oU3RyaW5nIGZpbGUsIHtTdHJpbmcgcGFzc3dvcmR9KSB7CiAgICBMaXN0PGludD4gYnl0ZXMgPSAobmV3IEZpbGUoZmlsZSkpLnJlYWRBc0J5dGVzU3luYygpOwogICAgdXNlQ2VydGlmaWNhdGVDaGFpbkJ5dGVzKGJ5dGVzLCBwYXNzd29yZDogcGFzc3dvcmQpOwogIH0KCiAgdm9pZCB1c2VDZXJ0aWZpY2F0ZUNoYWluQnl0ZXMoTGlzdDxpbnQ+IGNoYWluQnl0ZXMsIHtTdHJpbmcgcGFzc3dvcmR9KQogICAgICBuYXRpdmUgIlNlY3VyaXR5Q29udGV4dF9Vc2VDZXJ0aWZpY2F0ZUNoYWluQnl0ZXMiOwoKICB2b2lkIHNldENsaWVudEF1dGhvcml0aWVzKFN0cmluZyBmaWxlLCB7U3RyaW5nIHBhc3N3b3JkfSkgewogICAgTGlzdDxpbnQ+IGJ5dGVzID0gKG5ldyBGaWxlKGZpbGUpKS5yZWFkQXNCeXRlc1N5bmMoKTsKICAgIHNldENsaWVudEF1dGhvcml0aWVzQnl0ZXMoYnl0ZXMsIHBhc3N3b3JkOiBwYXNzd29yZCk7CiAgfQoKICB2b2lkIHNldENsaWVudEF1dGhvcml0aWVzQnl0ZXMoTGlzdDxpbnQ+IGF1dGhDZXJ0Qnl0ZXMsIHtTdHJpbmcgcGFzc3dvcmR9KQogICAgICBuYXRpdmUgIlNlY3VyaXR5Q29udGV4dF9TZXRDbGllbnRBdXRob3JpdGllc0J5dGVzIjsKCiAgdm9pZCBzZXRBbHBuUHJvdG9jb2xzKExpc3Q8U3RyaW5nPiBwcm90b2NvbHMsIGJvb2wgaXNTZXJ2ZXIpIHsKICAgIFVpbnQ4TGlzdCBlbmNvZGVkUHJvdG9jb2xzID0KICAgICAgICBTZWN1cml0eUNvbnRleHQuX3Byb3RvY29sc1RvTGVuZ3RoRW5jb2RpbmcocHJvdG9jb2xzKTsKICAgIF9zZXRBbHBuUHJvdG9jb2xzKGVuY29kZWRQcm90b2NvbHMsIGlzU2VydmVyKTsKICB9CgogIHZvaWQgX3NldEFscG5Qcm90b2NvbHMoVWludDhMaXN0IHByb3RvY29scywgYm9vbCBpc1NlcnZlcikKICAgICAgbmF0aXZlICJTZWN1cml0eUNvbnRleHRfU2V0QWxwblByb3RvY29scyI7CiAgdm9pZCBfdHJ1c3RCdWlsdGluUm9vdHMoKSBuYXRpdmUgIlNlY3VyaXR5Q29udGV4dF9UcnVzdEJ1aWx0aW5Sb290cyI7Cn0KCi8qKgogKiBfWDUwOUNlcnRpZmljYXRlSW1wbCB3cmFwcyBhbiBYNTA5IGNlcnRpZmljYXRlIG9iamVjdCBoZWxkIGJ5IHRoZSBCb3JpbmdTU0wKICogbGlicmFyeS4gSXQgZXhwb3NlcyB0aGUgZmllbGRzIG9mIHRoZSBjZXJ0aWZpY2F0ZSBvYmplY3QuCiAqLwpjbGFzcyBfWDUwOUNlcnRpZmljYXRlSW1wbCBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMQogICAgaW1wbGVtZW50cyBYNTA5Q2VydGlmaWNhdGUgewogIC8vIFRoZSBuYXRpdmUgZmllbGQgbXVzdCBiZSBzZXQgbWFudWFsbHkgb24gYSBuZXcgb2JqZWN0LCBpbiBuYXRpdmUgY29kZS4KICAvLyBUaGlzIGlzIGRvbmUgYnkgV3JhcHBlZFg1MDkgaW4gc2VjdXJlX3NvY2tldC5jYy4KICBfWDUwOUNlcnRpZmljYXRlSW1wbC5fKCk7CgogIFVpbnQ4TGlzdCBfY2FjaGVkRGVyOwogIFVpbnQ4TGlzdCBnZXQgX2RlciBuYXRpdmUgIlg1MDlfRGVyIjsKICBVaW50OExpc3QgZ2V0IGRlciB7CiAgICBpZiAoX2NhY2hlZERlciA9PSBudWxsKSB7CiAgICAgIF9jYWNoZWREZXIgPSBfZGVyOwogICAgfQogICAgcmV0dXJuIF9jYWNoZWREZXI7CiAgfQoKICBTdHJpbmcgX2NhY2hlZFBlbTsKICBTdHJpbmcgZ2V0IF9wZW0gbmF0aXZlICJYNTA5X1BlbSI7CiAgU3RyaW5nIGdldCBwZW0gewogICAgaWYgKF9jYWNoZWRQZW0gPT0gbnVsbCkgewogICAgICBfY2FjaGVkUGVtID0gX3BlbTsKICAgIH0KICAgIHJldHVybiBfY2FjaGVkUGVtOwogIH0KCiAgVWludDhMaXN0IF9jYWNoZWRTaGExOwogIFVpbnQ4TGlzdCBnZXQgX3NoYTEgbmF0aXZlICJYNTA5X1NoYTEiOwogIFVpbnQ4TGlzdCBnZXQgc2hhMSB7CiAgICBpZiAoX2NhY2hlZFNoYTEgPT0gbnVsbCkgewogICAgICBfY2FjaGVkU2hhMSA9IF9zaGExOwogICAgfQogICAgcmV0dXJuIF9jYWNoZWRTaGExOwogIH0KCiAgU3RyaW5nIGdldCBzdWJqZWN0IG5hdGl2ZSAiWDUwOV9TdWJqZWN0IjsKICBTdHJpbmcgZ2V0IGlzc3VlciBuYXRpdmUgIlg1MDlfSXNzdWVyIjsKICBEYXRlVGltZSBnZXQgc3RhcnRWYWxpZGl0eSB7CiAgICByZXR1cm4gbmV3IERhdGVUaW1lLmZyb21NaWxsaXNlY29uZHNTaW5jZUVwb2NoKF9zdGFydFZhbGlkaXR5KCksCiAgICAgICAgaXNVdGM6IHRydWUpOwogIH0KCiAgRGF0ZVRpbWUgZ2V0IGVuZFZhbGlkaXR5IHsKICAgIHJldHVybiBuZXcgRGF0ZVRpbWUuZnJvbU1pbGxpc2Vjb25kc1NpbmNlRXBvY2goX2VuZFZhbGlkaXR5KCksIGlzVXRjOiB0cnVlKTsKICB9CgogIGludCBfc3RhcnRWYWxpZGl0eSgpIG5hdGl2ZSAiWDUwOV9TdGFydFZhbGlkaXR5IjsKICBpbnQgX2VuZFZhbGlkaXR5KCkgbmF0aXZlICJYNTA5X0VuZFZhbGlkaXR5IjsKfQqA/wBOTjwBDwEgAQcVCTckAgEHFgk6AgEHGhgJHD8CAT4/ATMBFCMsLxYqPD0EASgYUAYhBAEgGFEGIgQCAQRPRiEDSEopBBo5H0AuNhwkHC8BGkc9KEsGBAEQFx8WJSU6ARMUEAQBMQE0ATgBSAFHAUhIASoBTQE5PAFMPwFJNgEjIQIBBxgJPDMEAQkuLAQBCSkCATghLBwcHAYEAUEBTAE3OjMEAUEzAUA6PAQBSzwBPTo5BAFJOQE+OjoEAU06AUEhPzMEAT0xSAIBBE89BDwhTDYcARgoFh4ZBhcEARUlEx4ZBhcEARkqFx8bBhgEASwqH0UWBAEdUQQBNDACASZkYXJ0OmlvLXBhdGNoL3NlY3VyZV9zb2NrZXRfcGF0Y2guZGFydFRvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vYmluL3N5bmNfc29ja2V0X3BhdGNoLmRhcnSm8i8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKLy8gcGFydCBvZiAiY29tbW9uX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIFJhd1N5bmNocm9ub3VzU29ja2V0IHsKICBAcGF0Y2gKICBzdGF0aWMgUmF3U3luY2hyb25vdXNTb2NrZXQgY29ubmVjdFN5bmMoaG9zdCwgaW50IHBvcnQpIHsKICAgIHJldHVybiBfUmF3U3luY2hyb25vdXNTb2NrZXQuY29ubmVjdFN5bmMoaG9zdCwgcG9ydCk7CiAgfQp9CgpjbGFzcyBfUmF3U3luY2hyb25vdXNTb2NrZXQgaW1wbGVtZW50cyBSYXdTeW5jaHJvbm91c1NvY2tldCB7CiAgZmluYWwgX05hdGl2ZVN5bmNocm9ub3VzU29ja2V0IF9zb2NrZXQ7CgogIF9SYXdTeW5jaHJvbm91c1NvY2tldCh0aGlzLl9zb2NrZXQpOwoKICBzdGF0aWMgUmF3U3luY2hyb25vdXNTb2NrZXQgY29ubmVjdFN5bmMoaG9zdCwgaW50IHBvcnQpIHsKICAgIF90aHJvd09uQmFkUG9ydChwb3J0KTsKICAgIHJldHVybiBuZXcgX1Jhd1N5bmNocm9ub3VzU29ja2V0KAogICAgICAgIF9OYXRpdmVTeW5jaHJvbm91c1NvY2tldC5jb25uZWN0U3luYyhob3N0LCBwb3J0KSk7CiAgfQoKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3MgPT4gX3NvY2tldC5hZGRyZXNzOwogIGludCBnZXQgcG9ydCA9PiBfc29ja2V0LnBvcnQ7CiAgSW50ZXJuZXRBZGRyZXNzIGdldCByZW1vdGVBZGRyZXNzID0+IF9zb2NrZXQucmVtb3RlQWRkcmVzczsKICBpbnQgZ2V0IHJlbW90ZVBvcnQgPT4gX3NvY2tldC5yZW1vdGVQb3J0OwoKICBpbnQgYXZhaWxhYmxlKCkgPT4gX3NvY2tldC5hdmFpbGFibGU7CgogIHZvaWQgY2xvc2VTeW5jKCkgPT4gX3NvY2tldC5jbG9zZVN5bmMoKTsKCiAgaW50IHJlYWRJbnRvU3luYyhMaXN0PGludD4gYnVmZmVyLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pID0+CiAgICAgIF9zb2NrZXQucmVhZEludG9TeW5jKGJ1ZmZlciwgc3RhcnQsIGVuZCk7CgogIExpc3Q8aW50PiByZWFkU3luYyhpbnQgYnl0ZXMpID0+IF9zb2NrZXQucmVhZFN5bmMoYnl0ZXMpOwoKICB2b2lkIHNodXRkb3duKFNvY2tldERpcmVjdGlvbiBkaXJlY3Rpb24pID0+IF9zb2NrZXQuc2h1dGRvd24oZGlyZWN0aW9uKTsKCiAgdm9pZCB3cml0ZUZyb21TeW5jKExpc3Q8aW50PiBidWZmZXIsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgPT4KICAgICAgX3NvY2tldC53cml0ZUZyb21TeW5jKGJ1ZmZlciwgc3RhcnQsIGVuZCk7Cn0KCi8vIFRoZSBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczEgY2FuIG5vdCBiZSB1c2VkIHdpdGggYSBtaXhpbiwgZHVlIHRvIG1pc3NpbmcKLy8gaW1wbGljaXQgY29uc3RydWN0b3IuCmNsYXNzIF9OYXRpdmVTeW5jaHJvbm91c1NvY2tldE5hdGl2ZVdyYXBwZXIgZXh0ZW5kcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczEge30KCi8vIFRoZSBfTmF0aXZlU3luY2hyb25vdXNTb2NrZXQgY2xhc3MgZW5jYXBzdWxhdGVzIGEgc3luY2hyb25vdXMgT1Mgc29ja2V0LgpjbGFzcyBfTmF0aXZlU3luY2hyb25vdXNTb2NrZXQgZXh0ZW5kcyBfTmF0aXZlU3luY2hyb25vdXNTb2NrZXROYXRpdmVXcmFwcGVyIHsKICAvLyBTb2NrZXQgY2xvc2Ugc3RhdGUuCiAgYm9vbCBpc0Nsb3NlZCA9IGZhbHNlOwogIGJvb2wgaXNDbG9zZWRSZWFkID0gZmFsc2U7CiAgYm9vbCBpc0Nsb3NlZFdyaXRlID0gZmFsc2U7CgogIC8vIEhvbGRzIHRoZSBhZGRyZXNzIHVzZWQgdG8gY29ubmVjdCB0aGUgc29ja2V0LgogIEludGVybmV0QWRkcmVzcyBsb2NhbEFkZHJlc3M7CgogIC8vIEhvbGRzIHRoZSBwb3J0IG9mIHRoZSBzb2NrZXQsIDAgaWYgbm90IGtub3duLgogIGludCBsb2NhbFBvcnQgPSAwOwoKICBfUmVhZFdyaXRlUmVzb3VyY2VJbmZvIHJlc291cmNlSW5mbzsKCiAgc3RhdGljIF9OYXRpdmVTeW5jaHJvbm91c1NvY2tldCBjb25uZWN0U3luYyhob3N0LCBpbnQgcG9ydCkgewogICAgaWYgKGhvc3QgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiUGFyYW1ldGVyIGhvc3QgY2Fubm90IGJlIG51bGwiKTsKICAgIH0KICAgIExpc3Q8X0ludGVybmV0QWRkcmVzcz4gYWRkcmVzc2VzID0gbnVsbDsKICAgIHZhciBlcnJvciA9IG51bGw7CiAgICBpZiAoaG9zdCBpcyBfSW50ZXJuZXRBZGRyZXNzKSB7CiAgICAgIGFkZHJlc3NlcyA9IFtob3N0XTsKICAgIH0gZWxzZSB7CiAgICAgIHRyeSB7CiAgICAgICAgYWRkcmVzc2VzID0gbG9va3VwKGhvc3QpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgZXJyb3IgPSBlOwogICAgICB9CiAgICAgIGlmIChlcnJvciAhPSBudWxsIHx8IGFkZHJlc3NlcyA9PSBudWxsIHx8IGFkZHJlc3Nlcy5pc0VtcHR5KSB7CiAgICAgICAgdGhyb3cgY3JlYXRlRXJyb3IoZXJyb3IsICJGYWlsZWQgaG9zdCBsb29rdXA6ICckaG9zdCciKTsKICAgICAgfQogICAgfQogICAgYXNzZXJ0KGFkZHJlc3NlcyBpcyBMaXN0KTsKICAgIHZhciBpdCA9IGFkZHJlc3Nlcy5pdGVyYXRvcjsKICAgIF9OYXRpdmVTeW5jaHJvbm91c1NvY2tldCBjb25uZWN0TmV4dCgpIHsKICAgICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB7CiAgICAgICAgLy8gQ291bGQgbm90IGNvbm5lY3QuIFRocm93IHRoZSBmaXJzdCBjb25uZWN0aW9uIGVycm9yIHdlIGVuY291bnRlcmVkLgogICAgICAgIGFzc2VydChlcnJvciAhPSBudWxsKTsKICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgfQogICAgICB2YXIgYWRkcmVzcyA9IGl0LmN1cnJlbnQ7CiAgICAgIHZhciBzb2NrZXQgPSBuZXcgX05hdGl2ZVN5bmNocm9ub3VzU29ja2V0KCk7CiAgICAgIHNvY2tldC5sb2NhbEFkZHJlc3MgPSBhZGRyZXNzOwogICAgICB2YXIgcmVzdWx0ID0gc29ja2V0Ll9uYXRpdmVDcmVhdGVDb25uZWN0U3luYyhhZGRyZXNzLl9pbl9hZGRyLCBwb3J0KTsKICAgICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgICAgLy8gS2VlcCBmaXJzdCBlcnJvciwgaWYgcHJlc2VudC4KICAgICAgICBpZiAoZXJyb3IgPT0gbnVsbCkgewogICAgICAgICAgZXJyb3IgPSBjcmVhdGVFcnJvcihyZXN1bHQsICJDb25uZWN0aW9uIGZhaWxlZCIsIGFkZHJlc3MsIHBvcnQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY29ubmVjdE5leHQoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBRdWVyeSB0aGUgbG9jYWwgcG9ydCwgZm9yIGVycm9yIG1lc3NhZ2VzLgogICAgICAgIHRyeSB7CiAgICAgICAgICBzb2NrZXQucG9ydDsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICBpZiAoZXJyb3IgPT0gbnVsbCkgewogICAgICAgICAgICBlcnJvciA9IGNyZWF0ZUVycm9yKGUsICJDb25uZWN0aW9uIGZhaWxlZCIsIGFkZHJlc3MsIHBvcnQpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGNvbm5lY3ROZXh0KCk7CiAgICAgICAgfQogICAgICAgIHNldHVwUmVzb3VyY2VJbmZvKHNvY2tldCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHNvY2tldDsKICAgIH0KCiAgICByZXR1cm4gY29ubmVjdE5leHQoKTsKICB9CgogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzcyA9PiBsb2NhbEFkZHJlc3M7CiAgaW50IGdldCBhdmFpbGFibGUgPT4gX25hdGl2ZUF2YWlsYWJsZSgpOwoKICBpbnQgZ2V0IHBvcnQgewogICAgaWYgKGxvY2FsUG9ydCAhPSAwKSB7CiAgICAgIHJldHVybiBsb2NhbFBvcnQ7CiAgICB9CiAgICBpZiAoaXNDbG9zZWQpIHsKICAgICAgdGhyb3cgY29uc3QgU29ja2V0RXhjZXB0aW9uLmNsb3NlZCgpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9uYXRpdmVHZXRQb3J0KCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgcmVzdWx0OwogICAgfQogICAgcmV0dXJuIGxvY2FsUG9ydCA9IHJlc3VsdDsKICB9CgogIEludGVybmV0QWRkcmVzcyBnZXQgcmVtb3RlQWRkcmVzcyB7CiAgICBpZiAoaXNDbG9zZWQpIHsKICAgICAgdGhyb3cgY29uc3QgU29ja2V0RXhjZXB0aW9uLmNsb3NlZCgpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9uYXRpdmVHZXRSZW1vdGVQZWVyKCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgcmVzdWx0OwogICAgfQogICAgdmFyIGFkZHIgPSByZXN1bHRbMF07CiAgICByZXR1cm4gbmV3IF9JbnRlcm5ldEFkZHJlc3MoYWRkclsxXSwgbnVsbCwgYWRkclsyXSk7CiAgfQoKICBpbnQgZ2V0IHJlbW90ZVBvcnQgewogICAgaWYgKGlzQ2xvc2VkKSB7CiAgICAgIHRocm93IGNvbnN0IFNvY2tldEV4Y2VwdGlvbi5jbG9zZWQoKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfbmF0aXZlR2V0UmVtb3RlUGVlcigpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IHJlc3VsdDsKICAgIH0KICAgIHJldHVybiByZXN1bHRbMV07CiAgfQoKICB2b2lkIGNsb3NlU3luYygpIHsKICAgIGlmICghaXNDbG9zZWQpIHsKICAgICAgX25hdGl2ZUNsb3NlU3luYygpOwogICAgICBfU29ja2V0UmVzb3VyY2VJbmZvLlNvY2tldENsb3NlZChyZXNvdXJjZUluZm8pOwogICAgICBpc0Nsb3NlZCA9IHRydWU7CiAgICB9CiAgfQoKICAvLyBDcmVhdGUgdGhlIGFwcHJvcHJpYXRlIGVycm9yL2V4Y2VwdGlvbiBmcm9tIGRpZmZlcmVudCByZXR1cm5lZAogIC8vIGVycm9yIG9iamVjdHMuCiAgc3RhdGljIGNyZWF0ZUVycm9yKGVycm9yLCBTdHJpbmcgbWVzc2FnZSwKICAgICAgW0ludGVybmV0QWRkcmVzcyBhZGRyZXNzLCBpbnQgcG9ydF0pIHsKICAgIGlmIChlcnJvciBpcyBPU0Vycm9yKSB7CiAgICAgIHJldHVybiBuZXcgU29ja2V0RXhjZXB0aW9uKG1lc3NhZ2UsCiAgICAgICAgICBvc0Vycm9yOiBlcnJvciwgYWRkcmVzczogYWRkcmVzcywgcG9ydDogcG9ydCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IFNvY2tldEV4Y2VwdGlvbihtZXNzYWdlLCBhZGRyZXNzOiBhZGRyZXNzLCBwb3J0OiBwb3J0KTsKICAgIH0KICB9CgogIHN0YXRpYyBMaXN0PF9JbnRlcm5ldEFkZHJlc3M+IGxvb2t1cChTdHJpbmcgaG9zdCwKICAgICAge0ludGVybmV0QWRkcmVzc1R5cGUgdHlwZTogSW50ZXJuZXRBZGRyZXNzVHlwZS5BTll9KSB7CiAgICB2YXIgcmVzcG9uc2UgPSBfbmF0aXZlTG9va3VwUmVxdWVzdChob3N0LCB0eXBlLl92YWx1ZSk7CiAgICBpZiAocmVzcG9uc2UgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyByZXNwb25zZTsKICAgIH0KICAgIExpc3Q8X0ludGVybmV0QWRkcmVzcz4gYWRkcmVzc2VzID0KICAgICAgICBuZXcgTGlzdDxfSW50ZXJuZXRBZGRyZXNzPihyZXNwb25zZS5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXNwb25zZS5sZW5ndGg7ICsraSkgewogICAgICB2YXIgcmVzdWx0ID0gcmVzcG9uc2VbaV07CiAgICAgIGFkZHJlc3Nlc1tpXSA9IG5ldyBfSW50ZXJuZXRBZGRyZXNzKHJlc3VsdFsxXSwgaG9zdCwgcmVzdWx0WzJdKTsKICAgIH0KICAgIHJldHVybiBhZGRyZXNzZXM7CiAgfQoKICBpbnQgcmVhZEludG9TeW5jKExpc3Q8aW50PiBidWZmZXIsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgX2NoZWNrQXZhaWxhYmxlKCk7CiAgICBpZiAoaXNDbG9zZWRSZWFkKSB7CiAgICAgIHRocm93IG5ldyBTb2NrZXRFeGNlcHRpb24oIlNvY2tldCBpcyBjbG9zZWQgZm9yIHJlYWRpbmciKTsKICAgIH0KCiAgICBpZiAoKGJ1ZmZlciBpcyEgTGlzdCkgfHwKICAgICAgICAoKHN0YXJ0ICE9IG51bGwpICYmIChzdGFydCBpcyEgaW50KSkgfHwKICAgICAgICAoKGVuZCAhPSBudWxsKSAmJiAoZW5kIGlzISBpbnQpKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiSW52YWxpZCBhcmd1bWVudHMgdG8gcmVhZEludG9TeW5jIik7CiAgICB9CiAgICBpZiAoc3RhcnQgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigic3RhcnQgY2Fubm90IGJlIG51bGwiKTsKICAgIH0KICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGJ1ZmZlci5sZW5ndGgpOwogICAgaWYgKGVuZCA9PSBzdGFydCkgewogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfbmF0aXZlUmVhZEludG8oYnVmZmVyLCBzdGFydCwgKGVuZCAtIHN0YXJ0KSk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IFNvY2tldEV4Y2VwdGlvbigicmVhZEludG9TeW5jIGZhaWxlZCIsIG9zRXJyb3I6IHJlc3VsdCk7CiAgICB9CiAgICByZXNvdXJjZUluZm8uYWRkUmVhZChyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIExpc3Q8aW50PiByZWFkU3luYyhpbnQgbGVuKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIGlmIChpc0Nsb3NlZFJlYWQpIHsKICAgICAgdGhyb3cgbmV3IFNvY2tldEV4Y2VwdGlvbigiU29ja2V0IGlzIGNsb3NlZCBmb3IgcmVhZGluZyIpOwogICAgfQoKICAgIGlmICgobGVuICE9IG51bGwpICYmIChsZW4gPCAwKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiSWxsZWdhbCBsZW5ndGggJGxlbiIpOwogICAgfQogICAgaWYgKGxlbiA9PSAwKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9uYXRpdmVSZWFkKGxlbik7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgcmVzdWx0OwogICAgfQogICAgYXNzZXJ0KHJlc291cmNlSW5mbyAhPSBudWxsKTsKICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgewogICAgICBpZiAocmVzb3VyY2VJbmZvICE9IG51bGwpIHsKICAgICAgICByZXNvdXJjZUluZm8udG90YWxSZWFkICs9IHJlc3VsdC5sZW5ndGg7CiAgICAgIH0KICAgIH0KICAgIGlmIChyZXNvdXJjZUluZm8gIT0gbnVsbCkgewogICAgICByZXNvdXJjZUluZm8uZGlkUmVhZCgpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyB2b2lkIHNldHVwUmVzb3VyY2VJbmZvKF9OYXRpdmVTeW5jaHJvbm91c1NvY2tldCBzb2NrZXQpIHsKICAgIHNvY2tldC5yZXNvdXJjZUluZm8gPSBuZXcgX1NvY2tldFJlc291cmNlSW5mbyhzb2NrZXQpOwogIH0KCiAgdm9pZCBzaHV0ZG93bihTb2NrZXREaXJlY3Rpb24gZGlyZWN0aW9uKSB7CiAgICBpZiAoaXNDbG9zZWQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKICAgICAgY2FzZSBTb2NrZXREaXJlY3Rpb24ucmVjZWl2ZToKICAgICAgICBzaHV0ZG93blJlYWQoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTb2NrZXREaXJlY3Rpb24uc2VuZDoKICAgICAgICBzaHV0ZG93bldyaXRlKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU29ja2V0RGlyZWN0aW9uLmJvdGg6CiAgICAgICAgY2xvc2VTeW5jKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoZGlyZWN0aW9uKTsKICAgIH0KICB9CgogIHZvaWQgc2h1dGRvd25SZWFkKCkgewogICAgaWYgKGlzQ2xvc2VkIHx8IGlzQ2xvc2VkUmVhZCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoaXNDbG9zZWRXcml0ZSkgewogICAgICBjbG9zZVN5bmMoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9uYXRpdmVTaHV0ZG93blJlYWQoKTsKICAgIH0KICAgIGlzQ2xvc2VkUmVhZCA9IHRydWU7CiAgfQoKICB2b2lkIHNodXRkb3duV3JpdGUoKSB7CiAgICBpZiAoaXNDbG9zZWQgfHwgaXNDbG9zZWRXcml0ZSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoaXNDbG9zZWRSZWFkKSB7CiAgICAgIGNsb3NlU3luYygpOwogICAgfSBlbHNlIHsKICAgICAgX25hdGl2ZVNodXRkb3duV3JpdGUoKTsKICAgIH0KICAgIGlzQ2xvc2VkV3JpdGUgPSB0cnVlOwogIH0KCiAgdm9pZCB3cml0ZUZyb21TeW5jKExpc3Q8aW50PiBidWZmZXIsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgX2NoZWNrQXZhaWxhYmxlKCk7CiAgICBpZiAoaXNDbG9zZWRXcml0ZSkgewogICAgICB0aHJvdyBuZXcgU29ja2V0RXhjZXB0aW9uKCJTb2NrZXQgaXMgY2xvc2VkIGZvciB3cml0aW5nIik7CiAgICB9CiAgICBpZiAoKGJ1ZmZlciBpcyEgTGlzdCkgfHwKICAgICAgICAoKHN0YXJ0ICE9IG51bGwpICYmIChzdGFydCBpcyEgaW50KSkgfHwKICAgICAgICAoKGVuZCAhPSBudWxsKSAmJiAoZW5kIGlzISBpbnQpKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiSW52YWxpZCBhcmd1bWVudHMgdG8gd3JpdGVGcm9tU3luYyIpOwogICAgfQogICAgaWYgKHN0YXJ0ID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoInN0YXJ0IGNhbm5vdCBiZSBlcXVhbCB0byBudWxsIik7CiAgICB9CgogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgYnVmZmVyLmxlbmd0aCk7CiAgICBpZiAoZW5kID09IHN0YXJ0KSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBfQnVmZmVyQW5kU3RhcnQgYnVmZmVyQW5kU3RhcnQgPQogICAgICAgIF9lbnN1cmVGYXN0QW5kU2VyaWFsaXphYmxlQnl0ZURhdGEoYnVmZmVyLCBzdGFydCwgZW5kKTsKICAgIHZhciByZXN1bHQgPSBfbmF0aXZlV3JpdGUoYnVmZmVyQW5kU3RhcnQuYnVmZmVyLCBidWZmZXJBbmRTdGFydC5zdGFydCwKICAgICAgICBlbmQgLSAoc3RhcnQgLSBidWZmZXJBbmRTdGFydC5zdGFydCkpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBTb2NrZXRFeGNlcHRpb24oIndyaXRlRnJvbVN5bmMgZmFpbGVkIiwgb3NFcnJvcjogcmVzdWx0KTsKICAgIH0KICAgIGFzc2VydChyZXNvdXJjZUluZm8gIT0gbnVsbCk7CiAgICBpZiAocmVzb3VyY2VJbmZvICE9IG51bGwpIHsKICAgICAgcmVzb3VyY2VJbmZvLmFkZFdyaXRlKHJlc3VsdCk7CiAgICB9CiAgfQoKICB2b2lkIF9jaGVja0F2YWlsYWJsZSgpIHsKICAgIGlmIChpc0Nsb3NlZCkgewogICAgICB0aHJvdyBjb25zdCBTb2NrZXRFeGNlcHRpb24uY2xvc2VkKCk7CiAgICB9CiAgfQoKICAvLyBOYXRpdmUgbWV0aG9kIGRlY2xhcmF0aW9ucy4KICBzdGF0aWMgX25hdGl2ZUxvb2t1cFJlcXVlc3QoaG9zdCwgaW50IHR5cGUpCiAgICAgIG5hdGl2ZSAiU3luY2hyb25vdXNTb2NrZXRfTG9va3VwUmVxdWVzdCI7CiAgX25hdGl2ZUNyZWF0ZUNvbm5lY3RTeW5jKGhvc3QsIGludCBwb3J0KQogICAgICBuYXRpdmUgIlN5bmNocm9ub3VzU29ja2V0X0NyZWF0ZUNvbm5lY3RTeW5jIjsKICBfbmF0aXZlQXZhaWxhYmxlKCkgbmF0aXZlICJTeW5jaHJvbm91c1NvY2tldF9BdmFpbGFibGUiOwogIF9uYXRpdmVDbG9zZVN5bmMoKSBuYXRpdmUgIlN5bmNocm9ub3VzU29ja2V0X0Nsb3NlU3luYyI7CiAgaW50IF9uYXRpdmVHZXRQb3J0KCkgbmF0aXZlICJTeW5jaHJvbm91c1NvY2tldF9HZXRQb3J0IjsKICBMaXN0IF9uYXRpdmVHZXRSZW1vdGVQZWVyKCkgbmF0aXZlICJTeW5jaHJvbm91c1NvY2tldF9HZXRSZW1vdGVQZWVyIjsKICBfbmF0aXZlUmVhZChpbnQgbGVuKSBuYXRpdmUgIlN5bmNocm9ub3VzU29ja2V0X1JlYWQiOwogIF9uYXRpdmVSZWFkSW50byhMaXN0PGludD4gYnVmZmVyLCBpbnQgb2Zmc2V0LCBpbnQgYnl0ZXMpCiAgICAgIG5hdGl2ZSAiU3luY2hyb25vdXNTb2NrZXRfUmVhZExpc3QiOwogIF9uYXRpdmVTaHV0ZG93blJlYWQoKSBuYXRpdmUgIlN5bmNocm9ub3VzU29ja2V0X1NodXRkb3duUmVhZCI7CiAgX25hdGl2ZVNodXRkb3duV3JpdGUoKSBuYXRpdmUgIlN5bmNocm9ub3VzU29ja2V0X1NodXRkb3duV3JpdGUiOwogIF9uYXRpdmVXcml0ZShMaXN0PGludD4gYnVmZmVyLCBpbnQgb2Zmc2V0LCBpbnQgYnl0ZXMpCiAgICAgIG5hdGl2ZSAiU3luY2hyb25vdXNTb2NrZXRfV3JpdGVMaXN0IjsKfQqBYQBOTjwBDwEgAQcdCTw6BAIBPioBJwE8GyY7BAEyID4sASgBKwFCMAE8AUsBRDECAU0ZUAFMTxkZHR4BMyABMxUBJwFAGEAGLRYkGg0MIhQTCEVBCAYfIS0cTx8VCCAzJUwfKR1LCh4PNQ4XFh9IDCAKIwgVBgEaBAEvKwERGhgGFCwGIx0UBh8EASYULAYpHRQGGjkEARcULAYpHRQGFgQBFRUaNhcGBAFEFCwtHCo5DUkGBAE0PTwfFgYnNTAgRwYWBAE7FxhBBgEdMCxEBhk3BkEYEAZAHUkGIhMEASAXGEEGASY2BhQTBiMdFAYiGiIxCAYgHgYTBAFDOwQBLRQOBhkkGA8hGQ8hFQ8PLAYEARgkDgYZEw0dBhkEARklDgYYEw0eBhoEAT0XGUEGHTAsRQYZQAYBQRgOBgElQEsvHUoGIiAlBgQBGxQsBgQBIS4wKzQ7OztIODsrQUM4LAIBJGRhcnQ6aW8tcGF0Y2gvc3luY19zb2NrZXRfcGF0Y2guZGFydEJvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9pby9ieXRlc19idWlsZGVyLmRhcnSV7i8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmlvOwoKLyoqCiAqIEJ1aWxkcyBhIGxpc3Qgb2YgYnl0ZXMsIGFsbG93aW5nIGJ5dGVzIGFuZCBsaXN0cyBvZiBieXRlcyB0byBiZSBhZGRlZCBhdCB0aGUKICogZW5kLgogKgogKiBVc2VkIHRvIGVmZmljaWVudGx5IGNvbGxlY3QgYnl0ZXMgYW5kIGxpc3RzIG9mIGJ5dGVzLgogKi8KYWJzdHJhY3QgY2xhc3MgQnl0ZXNCdWlsZGVyIHsKICAvKioKICAgKiBDb25zdHJ1Y3QgYSBuZXcgZW1wdHkgW0J5dGVzQnVpbGRlcl0uCiAgICoKICAgKiBJZiBbY29weV0gaXMgdHJ1ZSwgdGhlIGRhdGEgaXMgYWx3YXlzIGNvcGllZCB3aGVuIGFkZGVkIHRvIHRoZSBsaXN0LiBJZgogICAqIGl0IFtjb3B5XSBpcyBmYWxzZSwgdGhlIGRhdGEgaXMgb25seSBjb3BpZWQgaWYgbmVlZGVkLiBUaGF0IG1lYW5zIHRoYXQgaWYKICAgKiB0aGUgbGlzdHMgYXJlIGNoYW5nZWQgYWZ0ZXIgYWRkZWQgdG8gdGhlIFtCeXRlc0J1aWxkZXJdLCBpdCBtYXkgZWZmZWN0IHRoZQogICAqIG91dHB1dC4gRGVmYXVsdCBpcyBgdHJ1ZWAuCiAgICovCiAgZmFjdG9yeSBCeXRlc0J1aWxkZXIoe2Jvb2wgY29weTogdHJ1ZX0pIHsKICAgIGlmIChjb3B5KSB7CiAgICAgIHJldHVybiBuZXcgX0NvcHlpbmdCeXRlc0J1aWxkZXIoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgX0J5dGVzQnVpbGRlcigpOwogICAgfQogIH0KCiAgLyoqCiAgICogQXBwZW5kcyBbYnl0ZXNdIHRvIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBidWlsZGVyLgogICAqCiAgICogRWFjaCB2YWx1ZSBvZiBbYnl0ZXNdIHdpbGwgYmUgYml0LXJlcHJlc2VudGF0aW9uIHRydW5jYXRlZCB0byB0aGUgcmFuZ2UKICAgKiAwIC4uIDI1NS4KICAgKi8KICB2b2lkIGFkZChMaXN0PGludD4gYnl0ZXMpOwoKICAvKioKICAgKiBBcHBlbmQgW2J5dGVdIHRvIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBidWlsZGVyLgogICAqCiAgICogVGhlIFtieXRlXSB3aWxsIGJlIGJpdC1yZXByZXNlbnRhdGlvbiB0cnVuY2F0ZWQgdG8gdGhlIHJhbmdlIDAgLi4gMjU1LgogICAqLwogIHZvaWQgYWRkQnl0ZShpbnQgYnl0ZSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGNvbnRlbnRzIG9mIGB0aGlzYCBhbmQgY2xlYXJzIGB0aGlzYC4KICAgKgogICAqIFRoZSBsaXN0IHJldHVybmVkIGlzIGEgdmlldyBvZiB0aGUgaW50ZXJuYWwgYnVmZmVyLCBsaW1pdGVkIHRvIHRoZQogICAqIFtsZW5ndGhdLgogICAqLwogIFVpbnQ4TGlzdCB0YWtlQnl0ZXMoKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIGJ1aWxkZXIuCiAgICoKICAgKiBMZWF2ZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBidWlsZGVyIGludGFjdC4KICAgKi8KICBVaW50OExpc3QgdG9CeXRlcygpOwoKICAvKioKICAgKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWlsZGVyLgogICAqLwogIGludCBnZXQgbGVuZ3RoOwoKICAvKioKICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYnVmZmVyIGlzIGVtcHR5LgogICAqLwogIGJvb2wgZ2V0IGlzRW1wdHk7CgogIC8qKgogICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBidWZmZXIgaXMgbm90IGVtcHR5LgogICAqLwogIGJvb2wgZ2V0IGlzTm90RW1wdHk7CgogIC8qKgogICAqIENsZWFyIHRoZSBjb250ZW50cyBvZiB0aGUgYnVpbGRlci4KICAgKi8KICB2b2lkIGNsZWFyKCk7Cn0KCmNsYXNzIF9Db3B5aW5nQnl0ZXNCdWlsZGVyIGltcGxlbWVudHMgQnl0ZXNCdWlsZGVyIHsKICAvLyBTdGFydCB3aXRoIDEwMjQgYnl0ZXMuCiAgc3RhdGljIGNvbnN0IGludCBfaW5pdFNpemUgPSAxMDI0OwoKICAvLyBTYWZlIGZvciByZXVzZSBiZWNhdXNlIGEgZml4ZWQtbGVuZ3RoIGVtcHR5IGxpc3QgaXMgaW1tdXRhYmxlLgogIHN0YXRpYyBmaW5hbCBfZW1wdHlMaXN0ID0gbmV3IFVpbnQ4TGlzdCgwKTsKCiAgaW50IF9sZW5ndGggPSAwOwogIFVpbnQ4TGlzdCBfYnVmZmVyOwoKICBfQ29weWluZ0J5dGVzQnVpbGRlcihbaW50IGluaXRpYWxDYXBhY2l0eSA9IDBdKQogICAgICA6IF9idWZmZXIgPSAoaW5pdGlhbENhcGFjaXR5IDw9IDApCiAgICAgICAgICAgID8gX2VtcHR5TGlzdAogICAgICAgICAgICA6IG5ldyBVaW50OExpc3QoX3BvdzJyb3VuZHVwKGluaXRpYWxDYXBhY2l0eSkpOwoKICB2b2lkIGFkZChMaXN0PGludD4gYnl0ZXMpIHsKICAgIGludCBieXRlc0xlbmd0aCA9IGJ5dGVzLmxlbmd0aDsKICAgIGlmIChieXRlc0xlbmd0aCA9PSAwKSByZXR1cm47CiAgICBpbnQgcmVxdWlyZWQgPSBfbGVuZ3RoICsgYnl0ZXNMZW5ndGg7CiAgICBpZiAoX2J1ZmZlci5sZW5ndGggPCByZXF1aXJlZCkgewogICAgICBfZ3JvdyhyZXF1aXJlZCk7CiAgICB9CiAgICBhc3NlcnQoX2J1ZmZlci5sZW5ndGggPj0gcmVxdWlyZWQpOwogICAgaWYgKGJ5dGVzIGlzIFVpbnQ4TGlzdCkgewogICAgICBfYnVmZmVyLnNldFJhbmdlKF9sZW5ndGgsIHJlcXVpcmVkLCBieXRlcyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ5dGVzTGVuZ3RoOyBpKyspIHsKICAgICAgICBfYnVmZmVyW19sZW5ndGggKyBpXSA9IGJ5dGVzW2ldOwogICAgICB9CiAgICB9CiAgICBfbGVuZ3RoID0gcmVxdWlyZWQ7CiAgfQoKICB2b2lkIGFkZEJ5dGUoaW50IGJ5dGUpIHsKICAgIGlmIChfYnVmZmVyLmxlbmd0aCA9PSBfbGVuZ3RoKSB7CiAgICAgIC8vIFRoZSBncm93IGFsZ29yaXRobSBhbHdheXMgYXQgbGVhc3QgZG91Ymxlcy4KICAgICAgLy8gSWYgd2UgYWRkZWQgb25lIHRvIF9sZW5ndGggaXQgd291bGQgcXVhZHJ1cGxlIHVubmVjZXNzYXJpbHkuCiAgICAgIF9ncm93KF9sZW5ndGgpOwogICAgfQogICAgYXNzZXJ0KF9idWZmZXIubGVuZ3RoID4gX2xlbmd0aCk7CiAgICBfYnVmZmVyW19sZW5ndGhdID0gYnl0ZTsKICAgIF9sZW5ndGgrKzsKICB9CgogIHZvaWQgX2dyb3coaW50IHJlcXVpcmVkKSB7CiAgICAvLyBXZSB3aWxsIGNyZWF0ZSBhIGxpc3QgaW4gdGhlIHJhbmdlIG9mIDItNCB0aW1lcyBsYXJnZXIgdGhhbgogICAgLy8gcmVxdWlyZWQuCiAgICBpbnQgbmV3U2l6ZSA9IHJlcXVpcmVkICogMjsKICAgIGlmIChuZXdTaXplIDwgX2luaXRTaXplKSB7CiAgICAgIG5ld1NpemUgPSBfaW5pdFNpemU7CiAgICB9IGVsc2UgewogICAgICBuZXdTaXplID0gX3BvdzJyb3VuZHVwKG5ld1NpemUpOwogICAgfQogICAgdmFyIG5ld0J1ZmZlciA9IG5ldyBVaW50OExpc3QobmV3U2l6ZSk7CiAgICBuZXdCdWZmZXIuc2V0UmFuZ2UoMCwgX2J1ZmZlci5sZW5ndGgsIF9idWZmZXIpOwogICAgX2J1ZmZlciA9IG5ld0J1ZmZlcjsKICB9CgogIFVpbnQ4TGlzdCB0YWtlQnl0ZXMoKSB7CiAgICBpZiAoX2xlbmd0aCA9PSAwKSByZXR1cm4gX2VtcHR5TGlzdDsKICAgIHZhciBidWZmZXIgPQogICAgICAgIG5ldyBVaW50OExpc3QudmlldyhfYnVmZmVyLmJ1ZmZlciwgX2J1ZmZlci5vZmZzZXRJbkJ5dGVzLCBfbGVuZ3RoKTsKICAgIGNsZWFyKCk7CiAgICByZXR1cm4gYnVmZmVyOwogIH0KCiAgVWludDhMaXN0IHRvQnl0ZXMoKSB7CiAgICBpZiAoX2xlbmd0aCA9PSAwKSByZXR1cm4gX2VtcHR5TGlzdDsKICAgIHJldHVybiBuZXcgVWludDhMaXN0LmZyb21MaXN0KAogICAgICAgIG5ldyBVaW50OExpc3QudmlldyhfYnVmZmVyLmJ1ZmZlciwgX2J1ZmZlci5vZmZzZXRJbkJ5dGVzLCBfbGVuZ3RoKSk7CiAgfQoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfbGVuZ3RoOwoKICBib29sIGdldCBpc0VtcHR5ID0+IF9sZW5ndGggPT0gMDsKCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfbGVuZ3RoICE9IDA7CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfbGVuZ3RoID0gMDsKICAgIF9idWZmZXIgPSBfZW1wdHlMaXN0OwogIH0KCiAgc3RhdGljIGludCBfcG93MnJvdW5kdXAoaW50IHgpIHsKICAgIGFzc2VydCh4ID4gMCk7CiAgICAtLXg7CiAgICB4IHw9IHggPj4gMTsKICAgIHggfD0geCA+PiAyOwogICAgeCB8PSB4ID4+IDQ7CiAgICB4IHw9IHggPj4gODsKICAgIHggfD0geCA+PiAxNjsKICAgIHJldHVybiB4ICsgMTsKICB9Cn0KCmNsYXNzIF9CeXRlc0J1aWxkZXIgaW1wbGVtZW50cyBCeXRlc0J1aWxkZXIgewogIGludCBfbGVuZ3RoID0gMDsKICBmaW5hbCBMaXN0PFVpbnQ4TGlzdD4gX2NodW5rcyA9IFtdOwoKICB2b2lkIGFkZChMaXN0PGludD4gYnl0ZXMpIHsKICAgIFVpbnQ4TGlzdCB0eXBlZEJ5dGVzOwogICAgaWYgKGJ5dGVzIGlzIFVpbnQ4TGlzdCkgewogICAgICB0eXBlZEJ5dGVzID0gYnl0ZXM7CiAgICB9IGVsc2UgewogICAgICB0eXBlZEJ5dGVzID0gbmV3IFVpbnQ4TGlzdC5mcm9tTGlzdChieXRlcyk7CiAgICB9CiAgICBfY2h1bmtzLmFkZCh0eXBlZEJ5dGVzKTsKICAgIF9sZW5ndGggKz0gdHlwZWRCeXRlcy5sZW5ndGg7CiAgfQoKICB2b2lkIGFkZEJ5dGUoaW50IGJ5dGUpIHsKICAgIF9jaHVua3MuYWRkKG5ldyBVaW50OExpc3QoMSkuLlswXSA9IGJ5dGUpOwogICAgX2xlbmd0aCsrOwogIH0KCiAgVWludDhMaXN0IHRha2VCeXRlcygpIHsKICAgIGlmIChfbGVuZ3RoID09IDApIHJldHVybiBfQ29weWluZ0J5dGVzQnVpbGRlci5fZW1wdHlMaXN0OwogICAgaWYgKF9jaHVua3MubGVuZ3RoID09IDEpIHsKICAgICAgdmFyIGJ1ZmZlciA9IF9jaHVua3NbMF07CiAgICAgIGNsZWFyKCk7CiAgICAgIHJldHVybiBidWZmZXI7CiAgICB9CiAgICB2YXIgYnVmZmVyID0gbmV3IFVpbnQ4TGlzdChfbGVuZ3RoKTsKICAgIGludCBvZmZzZXQgPSAwOwogICAgZm9yICh2YXIgY2h1bmsgaW4gX2NodW5rcykgewogICAgICBidWZmZXIuc2V0UmFuZ2Uob2Zmc2V0LCBvZmZzZXQgKyBjaHVuay5sZW5ndGgsIGNodW5rKTsKICAgICAgb2Zmc2V0ICs9IGNodW5rLmxlbmd0aDsKICAgIH0KICAgIGNsZWFyKCk7CiAgICByZXR1cm4gYnVmZmVyOwogIH0KCiAgVWludDhMaXN0IHRvQnl0ZXMoKSB7CiAgICBpZiAoX2xlbmd0aCA9PSAwKSByZXR1cm4gX0NvcHlpbmdCeXRlc0J1aWxkZXIuX2VtcHR5TGlzdDsKICAgIHZhciBidWZmZXIgPSBuZXcgVWludDhMaXN0KF9sZW5ndGgpOwogICAgaW50IG9mZnNldCA9IDA7CiAgICBmb3IgKHZhciBjaHVuayBpbiBfY2h1bmtzKSB7CiAgICAgIGJ1ZmZlci5zZXRSYW5nZShvZmZzZXQsIG9mZnNldCArIGNodW5rLmxlbmd0aCwgY2h1bmspOwogICAgICBvZmZzZXQgKz0gY2h1bmsubGVuZ3RoOwogICAgfQogICAgcmV0dXJuIGJ1ZmZlcjsKICB9CgogIGludCBnZXQgbGVuZ3RoID0+IF9sZW5ndGg7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2xlbmd0aCA9PSAwOwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9sZW5ndGggIT0gMDsKCiAgdm9pZCBjbGVhcigpIHsKICAgIF9sZW5ndGggPSAwOwogICAgX2NodW5rcy5jbGVhcigpOwogIH0KfQqA7gBOTjwBDwERAQRQCAM5BB4GKwVNT1AgBiwQKQ0iBgQBBj0FTQ8GHQEGOwVMBhoBBjcFSA8GGQEGPAUwBhcBBikGEgEGLAYUAQYwBhcBBigGEAIBNRwlAUQuARMVATIpGTwBHiQiKiUXBigeMg0uKQgGGAQBGyU1RhYGJh0PBAEdQxEgHxsNJwYsNBkEARopEUwNEwQBGCkjTQQBHQEkAScBEREaBAEjEwkREREREhIEAgEuEyYBHhoeGg0yBh0iBAEbLw8EARo+Hx8PFQYpFCE9HgYNEwQBGD4pFCE9HgYTBAEdASQBJwERERUEAgEaZGFydDppby9ieXRlc19idWlsZGVyLmRhcnQ7b3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvaW8vY29tbW9uLmRhcnSOcy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmlvOwoKLy8gQ29uc3RhbnRzIHVzZWQgd2hlbiB3b3JraW5nIHdpdGggbmF0aXZlIHBvcnRzLgovLyBUaGVzZSBtdXN0IG1hdGNoIHRoZSBjb25zdGFudHMgaW4gcnVudGltZS9iaW4vZGFydHV0aWxzLmggY2xhc3MgQ09iamVjdC4KY29uc3QgaW50IF9zdWNjZXNzUmVzcG9uc2UgPSAwOwpjb25zdCBpbnQgX2lsbGVnYWxBcmd1bWVudFJlc3BvbnNlID0gMTsKY29uc3QgaW50IF9vc0Vycm9yUmVzcG9uc2UgPSAyOwpjb25zdCBpbnQgX2ZpbGVDbG9zZWRSZXNwb25zZSA9IDM7Cgpjb25zdCBpbnQgX2Vycm9yUmVzcG9uc2VFcnJvclR5cGUgPSAwOwpjb25zdCBpbnQgX29zRXJyb3JSZXNwb25zZUVycm9yQ29kZSA9IDE7CmNvbnN0IGludCBfb3NFcnJvclJlc3BvbnNlTWVzc2FnZSA9IDI7CgovLyBGdW5jdGlvbnMgdXNlZCB0byByZWNlaXZlIGV4Y2VwdGlvbnMgZnJvbSBuYXRpdmUgcG9ydHMuCmJvb2wgX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkgPT4KICAgIHJlc3BvbnNlIGlzIExpc3QgJiYgcmVzcG9uc2VbMF0gIT0gX3N1Y2Nlc3NSZXNwb25zZTsKCi8qKgogKiBSZXR1cm5zIGFuIEV4Y2VwdGlvbiBvciBhbiBFcnJvcgogKi8KX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgU3RyaW5nIG1lc3NhZ2UsIFN0cmluZyBwYXRoKSB7CiAgYXNzZXJ0KF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKTsKICBzd2l0Y2ggKHJlc3BvbnNlW19lcnJvclJlc3BvbnNlRXJyb3JUeXBlXSkgewogICAgY2FzZSBfaWxsZWdhbEFyZ3VtZW50UmVzcG9uc2U6CiAgICAgIHJldHVybiBuZXcgQXJndW1lbnRFcnJvcigiJG1lc3NhZ2U6ICRwYXRoIik7CiAgICBjYXNlIF9vc0Vycm9yUmVzcG9uc2U6CiAgICAgIHZhciBlcnIgPSBuZXcgT1NFcnJvcihyZXNwb25zZVtfb3NFcnJvclJlc3BvbnNlTWVzc2FnZV0sCiAgICAgICAgICByZXNwb25zZVtfb3NFcnJvclJlc3BvbnNlRXJyb3JDb2RlXSk7CiAgICAgIHJldHVybiBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbihtZXNzYWdlLCBwYXRoLCBlcnIpOwogICAgY2FzZSBfZmlsZUNsb3NlZFJlc3BvbnNlOgogICAgICByZXR1cm4gbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oIkZpbGUgY2xvc2VkIiwgcGF0aCk7CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gbmV3IEV4Y2VwdGlvbigiVW5rbm93biBlcnJvciIpOwogIH0KfQoKLyoqCiAqIEJhc2UgY2xhc3MgZm9yIGFsbCBJTyByZWxhdGVkIGV4Y2VwdGlvbnMuCiAqLwphYnN0cmFjdCBjbGFzcyBJT0V4Y2VwdGlvbiBpbXBsZW1lbnRzIEV4Y2VwdGlvbiB7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIklPRXhjZXB0aW9uIjsKfQoKLyoqCiAgKiBBbiBbT1NFcnJvcl0gb2JqZWN0IGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IGFuIGVycm9yIGZyb20gdGhlCiAgKiBvcGVyYXRpbmcgc3lzdGVtLgogICovCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgT1NFcnJvciB7CiAgLyoqIENvbnN0YW50IHVzZWQgdG8gaW5kaWNhdGUgdGhhdCBubyBPUyBlcnJvciBjb2RlIGlzIGF2YWlsYWJsZS4gKi8KICBzdGF0aWMgY29uc3QgaW50IG5vRXJyb3JDb2RlID0gLTE7CgogIC8vLyBFcnJvciBtZXNzYWdlIHN1cHBsaWVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiBUaGlzIG1heSBiZSBgbnVsbGAgb3IKICAvLy8gZW1wdHkgaWYgbm8gbWVzc2FnZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGVycm9yLgogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwoKICAvLy8gRXJyb3IgY29kZSBzdXBwbGllZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4KICAvLy8KICAvLy8gV2lsbCBoYXZlIHRoZSB2YWx1ZSBbT1NFcnJvci5ub0Vycm9yQ29kZV0gaWYgdGhlcmUgaXMgbm8gZXJyb3IgY29kZQogIC8vLyBhc3NvY2lhdGVkIHdpdGggdGhlIGVycm9yLgogIGZpbmFsIGludCBlcnJvckNvZGU7CgogIC8qKiBDcmVhdGVzIGFuIE9TRXJyb3Igb2JqZWN0IGZyb20gYSBtZXNzYWdlIGFuZCBhbiBlcnJvckNvZGUuICovCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGNvbnN0IE9TRXJyb3IoW3RoaXMubWVzc2FnZSA9ICIiLCB0aGlzLmVycm9yQ29kZSA9IG5vRXJyb3JDb2RlXSk7CgogIC8qKiBDb252ZXJ0cyBhbiBPU0Vycm9yIG9iamVjdCB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbi4gKi8KICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgiT1MgRXJyb3IiKTsKICAgIGlmIChtZXNzYWdlLmlzTm90RW1wdHkpIHsKICAgICAgc2IuLndyaXRlKCI6ICIpLi53cml0ZShtZXNzYWdlKTsKICAgICAgaWYgKGVycm9yQ29kZSAhPSBub0Vycm9yQ29kZSkgewogICAgICAgIHNiLi53cml0ZSgiLCBlcnJubyA9ICIpLi53cml0ZShlcnJvckNvZGUudG9TdHJpbmcoKSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZXJyb3JDb2RlICE9IG5vRXJyb3JDb2RlKSB7CiAgICAgIHNiLi53cml0ZSgiOiBlcnJubyA9ICIpLi53cml0ZShlcnJvckNvZGUudG9TdHJpbmcoKSk7CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCi8vIE9iamVjdCBmb3IgaG9sZGluZyBhIGJ1ZmZlciBhbmQgYW4gb2Zmc2V0LgpjbGFzcyBfQnVmZmVyQW5kU3RhcnQgewogIExpc3Q8aW50PiBidWZmZXI7CiAgaW50IHN0YXJ0OwogIF9CdWZmZXJBbmRTdGFydCh0aGlzLmJ1ZmZlciwgdGhpcy5zdGFydCk7Cn0KCi8vIEVuc3VyZSB0aGF0IHRoZSBpbnB1dCBMaXN0IGNhbiBiZSBzZXJpYWxpemVkIHRocm91Z2ggYSBuYXRpdmUgcG9ydC4KLy8gT25seSBJbnQ4TGlzdCBhbmQgVWludDhMaXN0IExpc3RzIGFyZSBzZXJpYWxpemVkIGRpcmVjdGx5LgovLyBBbGwgb3RoZXIgbGlzdHMgYXJlIGZpcnN0IGNvcGllZCBpbnRvIGEgVWludDhMaXN0LiBUaGlzIGhhcyB0aGUgYWRkZWQKLy8gYmVuZWZpdCB0aGF0IGl0IGlzIGZhc3RlciB0byBhY2Nlc3MgZnJvbSB0aGUgQyBjb2RlIGFzIHdlbGwuCl9CdWZmZXJBbmRTdGFydCBfZW5zdXJlRmFzdEFuZFNlcmlhbGl6YWJsZUJ5dGVEYXRhKAogICAgTGlzdDxpbnQ+IGJ1ZmZlciwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgaWYgKGJ1ZmZlciBpcyBVaW50OExpc3QgfHwgYnVmZmVyIGlzIEludDhMaXN0KSB7CiAgICByZXR1cm4gbmV3IF9CdWZmZXJBbmRTdGFydChidWZmZXIsIHN0YXJ0KTsKICB9CiAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogIHZhciBuZXdCdWZmZXIgPSBuZXcgVWludDhMaXN0KGxlbmd0aCk7CiAgaW50IGogPSBzdGFydDsKICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICBuZXdCdWZmZXJbaV0gPSBidWZmZXJbal07CiAgICBqKys7CiAgfQogIHJldHVybiBuZXcgX0J1ZmZlckFuZFN0YXJ0KG5ld0J1ZmZlciwgMCk7Cn0KCmNsYXNzIF9JT0NyeXB0byB7CiAgZXh0ZXJuYWwgc3RhdGljIFVpbnQ4TGlzdCBnZXRSYW5kb21CeXRlcyhpbnQgY291bnQpOwp9CncATk48AQ8BEQEyTCAoICMBJyknATsjOQEEJARAJi8jMxs/MDoeOw0tBAIBBC0EMiYCAQRCFgUaEEclAUw4GAEzBkohFwFEHEQBQBYqGh4nJj4IKzwGGgQCAS4YFA0sAgFHPklANCwzLwQcKRElHgkELAIBEjcCARNkYXJ0OmlvL2NvbW1vbi5kYXJ0T29yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL19pbnRlcm5hbC92bS9iaW4vY29tbW9uX3BhdGNoLmRhcnSHQC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKLy8vIE5vdGU6IHRoZSBWTSBjb25jYXRlbmF0ZXMgYWxsIHBhdGNoIGZpbGVzIGludG8gYSBzaW5nbGUgcGF0Y2ggZmlsZS4gVGhpcwovLy8gZmlsZSBpcyB0aGUgZmlyc3QgcGF0Y2ggaW4gImRhcnQ6aW8iIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgaW1wb3J0cyB1c2VkIGJ5Ci8vLyBwYXRjaGVzIG9mIHRoYXQgbGlicmFyeS4gV2UgcGxhbiB0byBjaGFuZ2UgdGhpcyB3aGVuIHdlIGhhdmUgYSBzaGFyZWQgZnJvbnQKLy8vIGVuZCBhbmQgc2ltcGx5IHVzZSBwYXJ0cy4KCmltcG9ydCAiZGFydDpfaW50ZXJuYWwiIHNob3cgVk1MaWJyYXJ5SG9va3MsIHBhdGNoOwoKaW1wb3J0ICJkYXJ0OmFzeW5jIgogICAgc2hvdwogICAgICAgIENvbXBsZXRlciwKICAgICAgICBGdXR1cmUsCiAgICAgICAgU3RyZWFtLAogICAgICAgIFN0cmVhbUNvbnN1bWVyLAogICAgICAgIFN0cmVhbUNvbnRyb2xsZXIsCiAgICAgICAgU3RyZWFtU3Vic2NyaXB0aW9uLAogICAgICAgIFRpbWVyLAogICAgICAgIFpvbmUsCiAgICAgICAgc2NoZWR1bGVNaWNyb3Rhc2s7CgppbXBvcnQgImRhcnQ6Y29sbGVjdGlvbiIgc2hvdyBIYXNoTWFwOwoKaW1wb3J0ICJkYXJ0OmNvbnZlcnQiIHNob3cgRW5jb2RpbmcsIHV0Zjg7CgppbXBvcnQgImRhcnQ6ZGV2ZWxvcGVyIiBzaG93IHJlZ2lzdGVyRXh0ZW5zaW9uOwoKaW1wb3J0ICJkYXJ0Omlzb2xhdGUiIHNob3cgUmF3UmVjZWl2ZVBvcnQsIFJlY2VpdmVQb3J0LCBTZW5kUG9ydDsKCmltcG9ydCAiZGFydDptYXRoIiBzaG93IG1pbjsKCmltcG9ydCAiZGFydDpuYXRpdmV3cmFwcGVycyIgc2hvdyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczE7CgppbXBvcnQgImRhcnQ6dHlwZWRfZGF0YSIgc2hvdyBVaW50OExpc3Q7CgovLy8gVGhlc2UgYXJlIHRoZSBhZGRpdGlvbmFsIHBhcnRzIG9mIHRoaXMgcGF0Y2ggbGlicmFyeToKLy8gcGFydCAiZGlyZWN0b3J5X3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJldmVudGhhbmRsZXJfcGF0Y2guZGFydCI7Ci8vIHBhcnQgImZpbGVfcGF0Y2guZGFydCI7Ci8vIHBhcnQgImZpbGVfc3lzdGVtX2VudGl0eV9wYXRjaC5kYXJ0IjsKLy8gcGFydCAiZmlsdGVyX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJpb19zZXJ2aWNlX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJwbGF0Zm9ybV9wYXRjaC5kYXJ0IjsKLy8gcGFydCAicHJvY2Vzc19wYXRjaC5kYXJ0IjsKLy8gcGFydCAic29ja2V0X3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJzdGRpb19wYXRjaC5kYXJ0IjsKLy8gcGFydCAic2VjdXJlX3NvY2tldF9wYXRjaC5kYXJ0IjsKLy8gcGFydCAic3luY19zb2NrZXRfcGF0Y2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgX0lPQ3J5cHRvIHsKICBAcGF0Y2gKICBzdGF0aWMgVWludDhMaXN0IGdldFJhbmRvbUJ5dGVzKGludCBjb3VudCkgbmF0aXZlICJDcnlwdG9fR2V0UmFuZG9tQnl0ZXMiOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKX3NldHVwSG9va3MoKSB7CiAgVk1MaWJyYXJ5SG9va3MuZXZlbnRIYW5kbGVyU2VuZERhdGEgPSBfRXZlbnRIYW5kbGVyLl9zZW5kRGF0YTsKICBWTUxpYnJhcnlIb29rcy50aW1lck1pbGxpc2Vjb25kQ2xvY2sgPSBfRXZlbnRIYW5kbGVyLl90aW1lck1pbGxpc2Vjb25kQ2xvY2s7Cn0KQgBOTjwBDwFNUFAeATQBFAkTEBAYGhwPDhsBJwErATABQgEdATwBKQE6ICMbKR0hHx4dHCQiAQcSCU0CASIQQU8CAR9kYXJ0OmlvLXBhdGNoL2NvbW1vbl9wYXRjaC5kYXJ0RW9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2lvL2RhdGFfdHJhbnNmb3JtZXIuZGFydMAAVcUvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5pbzsKCi8qKgogKiBFeHBvc2VzIFpMaWIgb3B0aW9ucyBmb3IgaW5wdXQgcGFyYW1ldGVycy4KICoKICogU2VlIGh0dHA6Ly93d3cuemxpYi5uZXQvbWFudWFsLmh0bWwgZm9yIG1vcmUgZG9jdW1lbnRhdGlvbi4KICovCmFic3RyYWN0IGNsYXNzIFpMaWJPcHRpb24gewogIC8vLyBNaW5pbWFsIHZhbHVlIGZvciBbWkxpYkNvZGVjLndpbmRvd0JpdHNdLCBbWkxpYkVuY29kZXIud2luZG93Qml0c10KICAvLy8gYW5kIFtaTGliRGVjb2Rlci53aW5kb3dCaXRzXS4KICBzdGF0aWMgY29uc3QgaW50IG1pbldpbmRvd0JpdHMgPSA4OwogIEBEZXByZWNhdGVkKCJVc2UgbWluV2luZG93Qml0cyBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE1JTl9XSU5ET1dfQklUUyA9IDg7CgogIC8vLyBNYXhpbWFsIHZhbHVlIGZvciBbWkxpYkNvZGVjLndpbmRvd0JpdHNdLCBbWkxpYkVuY29kZXIud2luZG93Qml0c10KICAvLy8gYW5kIFtaTGliRGVjb2Rlci53aW5kb3dCaXRzXS4KICBzdGF0aWMgY29uc3QgaW50IG1heFdpbmRvd0JpdHMgPSAxNTsKICBARGVwcmVjYXRlZCgiVXNlIG1heFdpbmRvd0JpdHMgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBNQVhfV0lORE9XX0JJVFMgPSAxNTsKCiAgLy8vIERlZmF1bHQgdmFsdWUgZm9yIFtaTGliQ29kZWMud2luZG93Qml0c10sIFtaTGliRW5jb2Rlci53aW5kb3dCaXRzXQogIC8vLyBhbmQgW1pMaWJEZWNvZGVyLndpbmRvd0JpdHNdLgogIHN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdFdpbmRvd0JpdHMgPSAxNTsKICBARGVwcmVjYXRlZCgiVXNlIGRlZmF1bHRXaW5kb3dCaXRzIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgREVGQVVMVF9XSU5ET1dfQklUUyA9IDE1OwoKICAvLy8gTWluaW1hbCB2YWx1ZSBmb3IgW1pMaWJDb2RlYy5sZXZlbF0gYW5kIFtaTGliRW5jb2Rlci5sZXZlbF0uCiAgc3RhdGljIGNvbnN0IGludCBtaW5MZXZlbCA9IC0xOwogIEBEZXByZWNhdGVkKCJVc2UgbWluTGV2ZWwgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBNSU5fTEVWRUwgPSAtMTsKCiAgLy8vIE1heGltYWwgdmFsdWUgZm9yIFtaTGliQ29kZWMubGV2ZWxdIGFuZCBbWkxpYkVuY29kZXIubGV2ZWxdCiAgc3RhdGljIGNvbnN0IGludCBtYXhMZXZlbCA9IDk7CiAgQERlcHJlY2F0ZWQoIlVzZSBtYXhMZXZlbCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE1BWF9MRVZFTCA9IDk7CgogIC8vLyBEZWZhdWx0IHZhbHVlIGZvciBbWkxpYkNvZGVjLmxldmVsXSBhbmQgW1pMaWJFbmNvZGVyLmxldmVsXS4KICBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRMZXZlbCA9IDY7CiAgQERlcHJlY2F0ZWQoIlVzZSBkZWZhdWx0TGV2ZWwgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBERUZBVUxUX0xFVkVMID0gNjsKCiAgLy8vIE1pbmltYWwgdmFsdWUgZm9yIFtaTGliQ29kZWMubWVtTGV2ZWxdIGFuZCBbWkxpYkVuY29kZXIubWVtTGV2ZWxdLgogIHN0YXRpYyBjb25zdCBpbnQgbWluTWVtTGV2ZWwgPSAxOwogIEBEZXByZWNhdGVkKCJVc2UgbWluTWVtTGV2ZWwgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBNSU5fTUVNX0xFVkVMID0gMTsKCiAgLy8vIE1heGltYWwgdmFsdWUgZm9yIFtaTGliQ29kZWMubWVtTGV2ZWxdIGFuZCBbWkxpYkVuY29kZXIubWVtTGV2ZWxdLgogIHN0YXRpYyBjb25zdCBpbnQgbWF4TWVtTGV2ZWwgPSA5OwogIEBEZXByZWNhdGVkKCJVc2UgbWF4TWVtTGV2ZWwgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBNQVhfTUVNX0xFVkVMID0gOTsKCiAgLy8vIERlZmF1bHQgdmFsdWUgZm9yIFtaTGliQ29kZWMubWVtTGV2ZWxdIGFuZCBbWkxpYkVuY29kZXIubWVtTGV2ZWxdLgogIHN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdE1lbUxldmVsID0gODsKICBARGVwcmVjYXRlZCgiVXNlIGRlZmF1bHRNZW1MZXZlbCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IERFRkFVTFRfTUVNX0xFVkVMID0gODsKCiAgLy8vIFJlY29tbWVuZGVkIHN0cmF0ZWd5IGZvciBkYXRhIHByb2R1Y2VkIGJ5IGEgZmlsdGVyIChvciBwcmVkaWN0b3IpCiAgc3RhdGljIGNvbnN0IGludCBzdHJhdGVneUZpbHRlcmVkID0gMTsKICBARGVwcmVjYXRlZCgiVXNlIHN0cmF0ZWd5RmlsdGVyZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBTVFJBVEVHWV9GSUxURVJFRCA9IDE7CgogIC8vLyBVc2UgdGhpcyBzdHJhdGVneSB0byBmb3JjZSBIdWZmbWFuIGVuY29kaW5nIG9ubHkgKG5vIHN0cmluZyBtYXRjaCkKICBzdGF0aWMgY29uc3QgaW50IHN0cmF0ZWd5SHVmZm1hbk9ubHkgPSAyOwogIEBEZXByZWNhdGVkKCJVc2Ugc3RyYXRlZ3lIdWZmbWFuT25seSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFNUUkFURUdZX0hVRkZNQU5fT05MWSA9IDI7CgogIC8vLyBVc2UgdGhpcyBzdHJhdGVneSB0byBsaW1pdCBtYXRjaCBkaXN0YW5jZXMgdG8gb25lIChydW4tbGVuZ3RoIGVuY29kaW5nKQogIHN0YXRpYyBjb25zdCBpbnQgc3RyYXRlZ3lSbGUgPSAzOwogIEBEZXByZWNhdGVkKCJVc2Ugc3RyYXRlZ3lSbGUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBTVFJBVEVHWV9STEUgPSAzOwoKICAvLy8gVGhpcyBzdHJhdGVneSBwcmV2ZW50cyB0aGUgdXNlIG9mIGR5bmFtaWMgSHVmZm1hbiBjb2RlcywgYWxsb3dpbmcgZm9yIGEKICAvLy8gc2ltcGxlciBkZWNvZGVyCiAgc3RhdGljIGNvbnN0IGludCBzdHJhdGVneUZpeGVkID0gNDsKICBARGVwcmVjYXRlZCgiVXNlIHN0cmF0ZWd5Rml4ZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBTVFJBVEVHWV9GSVhFRCA9IDQ7CgogIC8vLyBSZWNvbW1lbmRlZCBzdHJhdGVneSBmb3Igbm9ybWFsIGRhdGEKICBzdGF0aWMgY29uc3QgaW50IHN0cmF0ZWd5RGVmYXVsdCA9IDA7CiAgQERlcHJlY2F0ZWQoIlVzZSBzdHJhdGVneURlZmF1bHQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBTVFJBVEVHWV9ERUZBVUxUID0gMDsKfQoKLyoqCiAqIEFuIGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBbWkxpYkNvZGVjXS4KICovCmNvbnN0IFpMaWJDb2RlYyB6bGliID0gY29uc3QgWkxpYkNvZGVjLl9kZWZhdWx0KCk7CkBEZXByZWNhdGVkKCJVc2UgemxpYiBpbnN0ZWFkIikKY29uc3QgWkxpYkNvZGVjIFpMSUIgPSB6bGliOwoKLyoqCiAqIFRoZSBbWkxpYkNvZGVjXSBlbmNvZGVzIHJhdyBieXRlcyB0byBaTGliIGNvbXByZXNzZWQgYnl0ZXMgYW5kIGRlY29kZXMgWkxpYgogKiBjb21wcmVzc2VkIGJ5dGVzIHRvIHJhdyBieXRlcy4KICovCmNsYXNzIFpMaWJDb2RlYyBleHRlbmRzIENvZGVjPExpc3Q8aW50PiwgTGlzdDxpbnQ+PiB7CiAgLyoqCiAgICogV2hlbiB0cnVlLCBgR1ppcGAgZnJhbWVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGNvbXByZXNzZWQgZGF0YS4KICAgKi8KICBmaW5hbCBib29sIGd6aXA7CgogIC8qKgogICAqIFRoZSBjb21wcmVzc2lvbi1bbGV2ZWxdIGNhbiBiZSBzZXQgaW4gdGhlIHJhbmdlIG9mIGAtMS4uOWAsIHdpdGggYDZgIGJlaW5nCiAgICogdGhlIGRlZmF1bHQgY29tcHJlc3Npb24gbGV2ZWwuIExldmVscyBhYm92ZSBgNmAgd2lsbCBoYXZlIGhpZ2hlcgogICAqIGNvbXByZXNzaW9uIHJhdGVzIGF0IHRoZSBjb3N0IG9mIG1vcmUgQ1BVIGFuZCBtZW1vcnkgdXNhZ2UuIExldmVscyBiZWxvdwogICAqIGA2YCB3aWxsIHVzZSBsZXNzIENQVSBhbmQgbWVtb3J5IGF0IHRoZSBjb3N0IG9mIGxvd2VyIGNvbXByZXNzaW9uIHJhdGVzLgogICAqLwogIGZpbmFsIGludCBsZXZlbDsKCiAgLyoqCiAgICogU3BlY2lmaWVzIGhvdyBtdWNoIG1lbW9yeSBzaG91bGQgYmUgYWxsb2NhdGVkIGZvciB0aGUgaW50ZXJuYWwgY29tcHJlc3Npb24KICAgKiBzdGF0ZS4gYDFgIHVzZXMgbWluaW11bSBtZW1vcnkgYnV0IGlzIHNsb3cgYW5kIHJlZHVjZXMgY29tcHJlc3Npb24gcmF0aW87CiAgICogYDlgIHVzZXMgbWF4aW11bSBtZW1vcnkgZm9yIG9wdGltYWwgc3BlZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGA4YC4KICAgKgogICAqIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBkZWZsYXRlIGFyZSAoaW4gYnl0ZXMpOgogICAqCiAgICogICAgICgxIDw8ICh3aW5kb3dCaXRzICsgMikpICsgICgxIDw8IChtZW1MZXZlbCArIDkpKQogICAqIHRoYXQgaXM6IDEyOEsgZm9yIHdpbmRvd0JpdHMgPSAxNSArIDEyOEsgZm9yIG1lbUxldmVsID0gOCAoZGVmYXVsdCB2YWx1ZXMpCiAgICovCiAgZmluYWwgaW50IG1lbUxldmVsOwoKICAvKioKICAgKiBUdW5lcyB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiBVc2UgdGhlIHZhbHVlIHN0cmF0ZWd5RGVmYXVsdCBmb3Igbm9ybWFsCiAgICogZGF0YSwgc3RyYXRlZ3lGaWx0ZXJlZCBmb3IgZGF0YSBwcm9kdWNlZCBieSBhIGZpbHRlciAob3IgcHJlZGljdG9yKSwKICAgKiBzdHJhdGVneUh1ZmZtYW5Pbmx5IHRvIGZvcmNlIEh1ZmZtYW4gZW5jb2Rpbmcgb25seSAobm8gc3RyaW5nIG1hdGNoKSwgb3IKICAgKiBzdHJhdGVneVJsZSB0byBsaW1pdCBtYXRjaCBkaXN0YW5jZXMgdG8gb25lIChydW4tbGVuZ3RoIGVuY29kaW5nKS4KICAgKi8KICBmaW5hbCBpbnQgc3RyYXRlZ3k7CgogIC8qKgogICAqIEJhc2UgdHdvIGxvZ2FyaXRobSBvZiB0aGUgd2luZG93IHNpemUgKHRoZSBzaXplIG9mIHRoZSBoaXN0b3J5IGJ1ZmZlcikuIEl0CiAgICogc2hvdWxkIGJlIGluIHRoZSByYW5nZSA4Li4xNS4gTGFyZ2VyIHZhbHVlcyByZXN1bHQgaW4gYmV0dGVyIGNvbXByZXNzaW9uIGF0CiAgICogdGhlIGV4cGVuc2Ugb2YgbWVtb3J5IHVzYWdlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxNQogICAqLwogIGZpbmFsIGludCB3aW5kb3dCaXRzOwoKICAvKioKICAgKiBXaGVuIHRydWUsIGRlZmxhdGUgZ2VuZXJhdGVzIHJhdyBkYXRhIHdpdGggbm8gemxpYiBoZWFkZXIgb3IgdHJhaWxlciwgYW5kCiAgICogd2lsbCBub3QgY29tcHV0ZSBhbiBhZGxlcjMyIGNoZWNrIHZhbHVlCiAgICovCiAgZmluYWwgYm9vbCByYXc7CgogIC8qKgogICAqIEluaXRpYWwgY29tcHJlc3Npb24gZGljdGlvbmFyeS4KICAgKgogICAqIEl0IHNob3VsZCBjb25zaXN0IG9mIHN0cmluZ3MgKGJ5dGUgc2VxdWVuY2VzKSB0aGF0IGFyZSBsaWtlbHkgdG8gYmUKICAgKiBlbmNvdW50ZXJlZCBsYXRlciBpbiB0aGUgZGF0YSB0byBiZSBjb21wcmVzc2VkLCB3aXRoIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQKICAgKiBzdHJpbmdzIHByZWZlcmFibHkgcHV0IHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgZGljdGlvbmFyeS4gVXNpbmcgYQogICAqIGRpY3Rpb25hcnkgaXMgbW9zdCB1c2VmdWwgd2hlbiB0aGUgZGF0YSB0byBiZSBjb21wcmVzc2VkIGlzIHNob3J0IGFuZCBjYW4KICAgKiBiZSBwcmVkaWN0ZWQgd2l0aCBnb29kIGFjY3VyYWN5OyB0aGUgZGF0YSBjYW4gdGhlbiBiZSBjb21wcmVzc2VkIGJldHRlcgogICAqIHRoYW4gd2l0aCB0aGUgZGVmYXVsdCBlbXB0eSBkaWN0aW9uYXJ5LgogICAqLwogIGZpbmFsIExpc3Q8aW50PiBkaWN0aW9uYXJ5OwoKICBaTGliQ29kZWMoCiAgICAgIHt0aGlzLmxldmVsOiBaTGliT3B0aW9uLmRlZmF1bHRMZXZlbCwKICAgICAgdGhpcy53aW5kb3dCaXRzOiBaTGliT3B0aW9uLmRlZmF1bHRXaW5kb3dCaXRzLAogICAgICB0aGlzLm1lbUxldmVsOiBaTGliT3B0aW9uLmRlZmF1bHRNZW1MZXZlbCwKICAgICAgdGhpcy5zdHJhdGVneTogWkxpYk9wdGlvbi5zdHJhdGVneURlZmF1bHQsCiAgICAgIHRoaXMuZGljdGlvbmFyeSwKICAgICAgdGhpcy5yYXc6IGZhbHNlLAogICAgICB0aGlzLmd6aXA6IGZhbHNlfSkgewogICAgX3ZhbGlkYXRlWkxpYmVMZXZlbChsZXZlbCk7CiAgICBfdmFsaWRhdGVaTGliTWVtTGV2ZWwobWVtTGV2ZWwpOwogICAgX3ZhbGlkYXRlWkxpYlN0cmF0ZWd5KHN0cmF0ZWd5KTsKICAgIF92YWxpZGF0ZVpMaWJXaW5kb3dCaXRzKHdpbmRvd0JpdHMpOwogIH0KCiAgY29uc3QgWkxpYkNvZGVjLl9kZWZhdWx0KCkKICAgICAgOiBsZXZlbCA9IFpMaWJPcHRpb24uZGVmYXVsdExldmVsLAogICAgICAgIHdpbmRvd0JpdHMgPSBaTGliT3B0aW9uLmRlZmF1bHRXaW5kb3dCaXRzLAogICAgICAgIG1lbUxldmVsID0gWkxpYk9wdGlvbi5kZWZhdWx0TWVtTGV2ZWwsCiAgICAgICAgc3RyYXRlZ3kgPSBaTGliT3B0aW9uLnN0cmF0ZWd5RGVmYXVsdCwKICAgICAgICByYXcgPSBmYWxzZSwKICAgICAgICBnemlwID0gZmFsc2UsCiAgICAgICAgZGljdGlvbmFyeSA9IG51bGw7CgogIC8qKgogICAqIEdldCBhIFtaTGliRW5jb2Rlcl0gZm9yIGVuY29kaW5nIHRvIGBaTGliYCBjb21wcmVzc2VkIGRhdGEuCiAgICovCiAgWkxpYkVuY29kZXIgZ2V0IGVuY29kZXIgPT4gbmV3IFpMaWJFbmNvZGVyKAogICAgICBnemlwOiBmYWxzZSwKICAgICAgbGV2ZWw6IGxldmVsLAogICAgICB3aW5kb3dCaXRzOiB3aW5kb3dCaXRzLAogICAgICBtZW1MZXZlbDogbWVtTGV2ZWwsCiAgICAgIHN0cmF0ZWd5OiBzdHJhdGVneSwKICAgICAgZGljdGlvbmFyeTogZGljdGlvbmFyeSwKICAgICAgcmF3OiByYXcpOwoKICAvKioKICAgKiBHZXQgYSBbWkxpYkRlY29kZXJdIGZvciBkZWNvZGluZyBgWkxpYmAgY29tcHJlc3NlZCBkYXRhLgogICAqLwogIFpMaWJEZWNvZGVyIGdldCBkZWNvZGVyID0+CiAgICAgIG5ldyBaTGliRGVjb2Rlcih3aW5kb3dCaXRzOiB3aW5kb3dCaXRzLCBkaWN0aW9uYXJ5OiBkaWN0aW9uYXJ5LCByYXc6IHJhdyk7Cn0KCi8qKgogKiBBbiBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgW0daaXBDb2RlY10uCiAqLwpjb25zdCBHWmlwQ29kZWMgZ3ppcCA9IGNvbnN0IEdaaXBDb2RlYy5fZGVmYXVsdCgpOwpARGVwcmVjYXRlZCgiVXNlIGd6aXAgaW5zdGVhZCIpCmNvbnN0IEdaaXBDb2RlYyBHWklQID0gZ3ppcDsKCi8qKgogKiBUaGUgW0daaXBDb2RlY10gZW5jb2RlcyByYXcgYnl0ZXMgdG8gR1ppcCBjb21wcmVzc2VkIGJ5dGVzIGFuZCBkZWNvZGVzIEdaaXAKICogY29tcHJlc3NlZCBieXRlcyB0byByYXcgYnl0ZXMuCiAqCiAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gW1pMaWJDb2RlY10gYW5kIFtHWmlwQ29kZWNdIGlzIHRoYXQgdGhlIFtHWmlwQ29kZWNdCiAqIHdyYXBzIHRoZSBgWkxpYmAgY29tcHJlc3NlZCBieXRlcyBpbiBgR1ppcGAgZnJhbWVzLgogKi8KY2xhc3MgR1ppcENvZGVjIGV4dGVuZHMgQ29kZWM8TGlzdDxpbnQ+LCBMaXN0PGludD4+IHsKICAvKioKICAgKiBXaGVuIHRydWUsIGBHWmlwYCBmcmFtZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgY29tcHJlc3NlZCBkYXRhLgogICAqLwogIGZpbmFsIGJvb2wgZ3ppcDsKCiAgLyoqCiAgICogVGhlIGNvbXByZXNzaW9uLVtsZXZlbF0gY2FuIGJlIHNldCBpbiB0aGUgcmFuZ2Ugb2YgYC0xLi45YCwgd2l0aCBgNmAgYmVpbmcKICAgKiB0aGUgZGVmYXVsdCBjb21wcmVzc2lvbiBsZXZlbC4gTGV2ZWxzIGFib3ZlIGA2YCB3aWxsIGhhdmUgaGlnaGVyCiAgICogY29tcHJlc3Npb24gcmF0ZXMgYXQgdGhlIGNvc3Qgb2YgbW9yZSBDUFUgYW5kIG1lbW9yeSB1c2FnZS4gTGV2ZWxzIGJlbG93CiAgICogYDZgIHdpbGwgdXNlIGxlc3MgQ1BVIGFuZCBtZW1vcnkgYXQgdGhlIGNvc3Qgb2YgbG93ZXIgY29tcHJlc3Npb24gcmF0ZXMuCiAgICovCiAgZmluYWwgaW50IGxldmVsOwoKICAvKioKICAgKiBTcGVjaWZpZXMgaG93IG11Y2ggbWVtb3J5IHNob3VsZCBiZSBhbGxvY2F0ZWQgZm9yIHRoZSBpbnRlcm5hbCBjb21wcmVzc2lvbgogICAqIHN0YXRlLiBgMWAgdXNlcyBtaW5pbXVtIG1lbW9yeSBidXQgaXMgc2xvdyBhbmQgcmVkdWNlcyBjb21wcmVzc2lvbiByYXRpbzsKICAgKiBgOWAgdXNlcyBtYXhpbXVtIG1lbW9yeSBmb3Igb3B0aW1hbCBzcGVlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYDhgLgogICAqCiAgICogVGhlIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIGRlZmxhdGUgYXJlIChpbiBieXRlcyk6CiAgICoKICAgKiAgICAgKDEgPDwgKHdpbmRvd0JpdHMgKyAyKSkgKyAgKDEgPDwgKG1lbUxldmVsICsgOSkpCiAgICogdGhhdCBpczogMTI4SyBmb3Igd2luZG93Qml0cyA9IDE1ICsgMTI4SyBmb3IgbWVtTGV2ZWwgPSA4IChkZWZhdWx0IHZhbHVlcykKICAgKi8KICBmaW5hbCBpbnQgbWVtTGV2ZWw7CgogIC8qKgogICAqIFR1bmVzIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uIFVzZSB0aGUgdmFsdWUKICAgKiBbWkxpYk9wdGlvbi5zdHJhdGVneURlZmF1bHRdIGZvciBub3JtYWwgZGF0YSwKICAgKiBbWkxpYk9wdGlvbi5zdHJhdGVneUZpbHRlcmVkXSBmb3IgZGF0YSBwcm9kdWNlZCBieSBhIGZpbHRlcgogICAqIChvciBwcmVkaWN0b3IpLCBbWkxpYk9wdGlvbi5zdHJhdGVneUh1ZmZtYW5Pbmx5XSB0byBmb3JjZSBIdWZmbWFuCiAgICogZW5jb2Rpbmcgb25seSAobm8gc3RyaW5nIG1hdGNoKSwgb3IgW1pMaWJPcHRpb24uc3RyYXRlZ3lSbGVdIHRvIGxpbWl0CiAgICogbWF0Y2ggZGlzdGFuY2VzIHRvIG9uZSAocnVuLWxlbmd0aCBlbmNvZGluZykuCiAgICovCiAgZmluYWwgaW50IHN0cmF0ZWd5OwoKICAvKioKICAgKiBCYXNlIHR3byBsb2dhcml0aG0gb2YgdGhlIHdpbmRvdyBzaXplICh0aGUgc2l6ZSBvZiB0aGUgaGlzdG9yeSBidWZmZXIpLiBJdAogICAqIHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgYDguLjE1YC4gTGFyZ2VyIHZhbHVlcyByZXN1bHQgaW4gYmV0dGVyIGNvbXByZXNzaW9uCiAgICogYXQgdGhlIGV4cGVuc2Ugb2YgbWVtb3J5IHVzYWdlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgMTVgCiAgICovCiAgZmluYWwgaW50IHdpbmRvd0JpdHM7CgogIC8qKgogICAqIEluaXRpYWwgY29tcHJlc3Npb24gZGljdGlvbmFyeS4KICAgKgogICAqIEl0IHNob3VsZCBjb25zaXN0IG9mIHN0cmluZ3MgKGJ5dGUgc2VxdWVuY2VzKSB0aGF0IGFyZSBsaWtlbHkgdG8gYmUKICAgKiBlbmNvdW50ZXJlZCBsYXRlciBpbiB0aGUgZGF0YSB0byBiZSBjb21wcmVzc2VkLCB3aXRoIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQKICAgKiBzdHJpbmdzIHByZWZlcmFibHkgcHV0IHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgZGljdGlvbmFyeS4gVXNpbmcgYQogICAqIGRpY3Rpb25hcnkgaXMgbW9zdCB1c2VmdWwgd2hlbiB0aGUgZGF0YSB0byBiZSBjb21wcmVzc2VkIGlzIHNob3J0IGFuZCBjYW4KICAgKiBiZSBwcmVkaWN0ZWQgd2l0aCBnb29kIGFjY3VyYWN5OyB0aGUgZGF0YSBjYW4gdGhlbiBiZSBjb21wcmVzc2VkIGJldHRlcgogICAqIHRoYW4gd2l0aCB0aGUgZGVmYXVsdCBlbXB0eSBkaWN0aW9uYXJ5LgogICAqLwogIGZpbmFsIExpc3Q8aW50PiBkaWN0aW9uYXJ5OwoKICAvKioKICAgKiBXaGVuIHRydWUsIGRlZmxhdGUgZ2VuZXJhdGVzIHJhdyBkYXRhIHdpdGggbm8gemxpYiBoZWFkZXIgb3IgdHJhaWxlciwgYW5kCiAgICogd2lsbCBub3QgY29tcHV0ZSBhbiBhZGxlcjMyIGNoZWNrIHZhbHVlCiAgICovCiAgZmluYWwgYm9vbCByYXc7CgogIEdaaXBDb2RlYygKICAgICAge3RoaXMubGV2ZWw6IFpMaWJPcHRpb24uZGVmYXVsdExldmVsLAogICAgICB0aGlzLndpbmRvd0JpdHM6IFpMaWJPcHRpb24uZGVmYXVsdFdpbmRvd0JpdHMsCiAgICAgIHRoaXMubWVtTGV2ZWw6IFpMaWJPcHRpb24uZGVmYXVsdE1lbUxldmVsLAogICAgICB0aGlzLnN0cmF0ZWd5OiBaTGliT3B0aW9uLnN0cmF0ZWd5RGVmYXVsdCwKICAgICAgdGhpcy5kaWN0aW9uYXJ5LAogICAgICB0aGlzLnJhdzogZmFsc2UsCiAgICAgIHRoaXMuZ3ppcDogdHJ1ZX0pIHsKICAgIF92YWxpZGF0ZVpMaWJlTGV2ZWwobGV2ZWwpOwogICAgX3ZhbGlkYXRlWkxpYk1lbUxldmVsKG1lbUxldmVsKTsKICAgIF92YWxpZGF0ZVpMaWJTdHJhdGVneShzdHJhdGVneSk7CiAgICBfdmFsaWRhdGVaTGliV2luZG93Qml0cyh3aW5kb3dCaXRzKTsKICB9CgogIGNvbnN0IEdaaXBDb2RlYy5fZGVmYXVsdCgpCiAgICAgIDogbGV2ZWwgPSBaTGliT3B0aW9uLmRlZmF1bHRMZXZlbCwKICAgICAgICB3aW5kb3dCaXRzID0gWkxpYk9wdGlvbi5kZWZhdWx0V2luZG93Qml0cywKICAgICAgICBtZW1MZXZlbCA9IFpMaWJPcHRpb24uZGVmYXVsdE1lbUxldmVsLAogICAgICAgIHN0cmF0ZWd5ID0gWkxpYk9wdGlvbi5zdHJhdGVneURlZmF1bHQsCiAgICAgICAgcmF3ID0gZmFsc2UsCiAgICAgICAgZ3ppcCA9IHRydWUsCiAgICAgICAgZGljdGlvbmFyeSA9IG51bGw7CgogIC8qKgogICAqIEdldCBhIFtaTGliRW5jb2Rlcl0gZm9yIGVuY29kaW5nIHRvIGBHWmlwYCBjb21wcmVzc2VkIGRhdGEuCiAgICovCiAgWkxpYkVuY29kZXIgZ2V0IGVuY29kZXIgPT4gbmV3IFpMaWJFbmNvZGVyKAogICAgICBnemlwOiB0cnVlLAogICAgICBsZXZlbDogbGV2ZWwsCiAgICAgIHdpbmRvd0JpdHM6IHdpbmRvd0JpdHMsCiAgICAgIG1lbUxldmVsOiBtZW1MZXZlbCwKICAgICAgc3RyYXRlZ3k6IHN0cmF0ZWd5LAogICAgICBkaWN0aW9uYXJ5OiBkaWN0aW9uYXJ5LAogICAgICByYXc6IHJhdyk7CgogIC8qKgogICAqIEdldCBhIFtaTGliRGVjb2Rlcl0gZm9yIGRlY29kaW5nIGBHWmlwYCBjb21wcmVzc2VkIGRhdGEuCiAgICovCiAgWkxpYkRlY29kZXIgZ2V0IGRlY29kZXIgPT4KICAgICAgbmV3IFpMaWJEZWNvZGVyKHdpbmRvd0JpdHM6IHdpbmRvd0JpdHMsIGRpY3Rpb25hcnk6IGRpY3Rpb25hcnksIHJhdzogcmF3KTsKfQoKLyoqCiAqIFRoZSBbWkxpYkVuY29kZXJdIGVuY29kZXIgaXMgdXNlZCBieSBbWkxpYkNvZGVjXSBhbmQgW0daaXBDb2RlY10gdG8gY29tcHJlc3MKICogZGF0YS4KICovCmNsYXNzIFpMaWJFbmNvZGVyIGV4dGVuZHMgQ29udmVydGVyPExpc3Q8aW50PiwgTGlzdDxpbnQ+PiB7CiAgLyoqCiAgICogV2hlbiB0cnVlLCBgR1ppcGAgZnJhbWVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGNvbXByZXNzZWQgZGF0YS4KICAgKi8KICBmaW5hbCBib29sIGd6aXA7CgogIC8qKgogICAqIFRoZSBjb21wcmVzc2lvbi1bbGV2ZWxdIGNhbiBiZSBzZXQgaW4gdGhlIHJhbmdlIG9mIGAtMS4uOWAsIHdpdGggYDZgIGJlaW5nCiAgICogdGhlIGRlZmF1bHQgY29tcHJlc3Npb24gbGV2ZWwuIExldmVscyBhYm92ZSBgNmAgd2lsbCBoYXZlIGhpZ2hlcgogICAqIGNvbXByZXNzaW9uIHJhdGVzIGF0IHRoZSBjb3N0IG9mIG1vcmUgQ1BVIGFuZCBtZW1vcnkgdXNhZ2UuIExldmVscyBiZWxvdwogICAqIGA2YCB3aWxsIHVzZSBsZXNzIENQVSBhbmQgbWVtb3J5IGF0IHRoZSBjb3N0IG9mIGxvd2VyIGNvbXByZXNzaW9uIHJhdGVzLgogICAqLwogIGZpbmFsIGludCBsZXZlbDsKCiAgLyoqCiAgICogU3BlY2lmaWVzIGhvdyBtdWNoIG1lbW9yeSBzaG91bGQgYmUgYWxsb2NhdGVkIGZvciB0aGUgaW50ZXJuYWwgY29tcHJlc3Npb24KICAgKiBzdGF0ZS4gYDFgIHVzZXMgbWluaW11bSBtZW1vcnkgYnV0IGlzIHNsb3cgYW5kIHJlZHVjZXMgY29tcHJlc3Npb24gcmF0aW87CiAgICogYDlgIHVzZXMgbWF4aW11bSBtZW1vcnkgZm9yIG9wdGltYWwgc3BlZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGA4YC4KICAgKgogICAqIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBkZWZsYXRlIGFyZSAoaW4gYnl0ZXMpOgogICAqCiAgICogICAgICgxIDw8ICh3aW5kb3dCaXRzICsgMikpICsgICgxIDw8IChtZW1MZXZlbCArIDkpKQogICAqIHRoYXQgaXM6IDEyOEsgZm9yIHdpbmRvd0JpdHMgPSAxNSArIDEyOEsgZm9yIG1lbUxldmVsID0gOCAoZGVmYXVsdCB2YWx1ZXMpCiAgICovCiAgZmluYWwgaW50IG1lbUxldmVsOwoKICAvKioKICAgKiBUdW5lcyB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiBVc2UgdGhlIHZhbHVlCiAgICogW1pMaWJPcHRpb24uc3RyYXRlZ3lEZWZhdWx0XSBmb3Igbm9ybWFsIGRhdGEsCiAgICogW1pMaWJPcHRpb24uc3RyYXRlZ3lGaWx0ZXJlZF0gZm9yIGRhdGEgcHJvZHVjZWQgYnkgYSBmaWx0ZXIKICAgKiAob3IgcHJlZGljdG9yKSwgW1pMaWJPcHRpb24uc3RyYXRlZ3lIdWZmbWFuT25seV0gdG8gZm9yY2UgSHVmZm1hbgogICAqIGVuY29kaW5nIG9ubHkgKG5vIHN0cmluZyBtYXRjaCksIG9yIFtaTGliT3B0aW9uLnN0cmF0ZWd5UmxlXSB0byBsaW1pdAogICAqIG1hdGNoIGRpc3RhbmNlcyB0byBvbmUgKHJ1bi1sZW5ndGggZW5jb2RpbmcpLgogICAqLwogIGZpbmFsIGludCBzdHJhdGVneTsKCiAgLyoqCiAgICogQmFzZSB0d28gbG9nYXJpdGhtIG9mIHRoZSB3aW5kb3cgc2l6ZSAodGhlIHNpemUgb2YgdGhlIGhpc3RvcnkgYnVmZmVyKS4gSXQKICAgKiBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIGA4Li4xNWAuIExhcmdlciB2YWx1ZXMgcmVzdWx0IGluIGJldHRlciBjb21wcmVzc2lvbgogICAqIGF0IHRoZSBleHBlbnNlIG9mIG1lbW9yeSB1c2FnZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYDE1YAogICAqLwogIGZpbmFsIGludCB3aW5kb3dCaXRzOwoKICAvKioKICAgKiBJbml0aWFsIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkuCiAgICoKICAgKiBJdCBzaG91bGQgY29uc2lzdCBvZiBzdHJpbmdzIChieXRlIHNlcXVlbmNlcykgdGhhdCBhcmUgbGlrZWx5IHRvIGJlCiAgICogZW5jb3VudGVyZWQgbGF0ZXIgaW4gdGhlIGRhdGEgdG8gYmUgY29tcHJlc3NlZCwgd2l0aCB0aGUgbW9zdCBjb21tb25seSB1c2VkCiAgICogc3RyaW5ncyBwcmVmZXJhYmx5IHB1dCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIGRpY3Rpb25hcnkuIFVzaW5nIGEKICAgKiBkaWN0aW9uYXJ5IGlzIG1vc3QgdXNlZnVsIHdoZW4gdGhlIGRhdGEgdG8gYmUgY29tcHJlc3NlZCBpcyBzaG9ydCBhbmQgY2FuCiAgICogYmUgcHJlZGljdGVkIHdpdGggZ29vZCBhY2N1cmFjeTsgdGhlIGRhdGEgY2FuIHRoZW4gYmUgY29tcHJlc3NlZCBiZXR0ZXIKICAgKiB0aGFuIHdpdGggdGhlIGRlZmF1bHQgZW1wdHkgZGljdGlvbmFyeS4KICAgKi8KICBmaW5hbCBMaXN0PGludD4gZGljdGlvbmFyeTsKCiAgLyoqCiAgICogV2hlbiB0cnVlLCBkZWZsYXRlIGdlbmVyYXRlcyByYXcgZGF0YSB3aXRoIG5vIHpsaWIgaGVhZGVyIG9yIHRyYWlsZXIsIGFuZAogICAqIHdpbGwgbm90IGNvbXB1dGUgYW4gYWRsZXIzMiBjaGVjayB2YWx1ZQogICAqLwogIGZpbmFsIGJvb2wgcmF3OwoKICBaTGliRW5jb2RlcigKICAgICAge3RoaXMuZ3ppcDogZmFsc2UsCiAgICAgIHRoaXMubGV2ZWw6IFpMaWJPcHRpb24uZGVmYXVsdExldmVsLAogICAgICB0aGlzLndpbmRvd0JpdHM6IFpMaWJPcHRpb24uZGVmYXVsdFdpbmRvd0JpdHMsCiAgICAgIHRoaXMubWVtTGV2ZWw6IFpMaWJPcHRpb24uZGVmYXVsdE1lbUxldmVsLAogICAgICB0aGlzLnN0cmF0ZWd5OiBaTGliT3B0aW9uLnN0cmF0ZWd5RGVmYXVsdCwKICAgICAgdGhpcy5kaWN0aW9uYXJ5LAogICAgICB0aGlzLnJhdzogZmFsc2V9KSB7CiAgICBfdmFsaWRhdGVaTGliZUxldmVsKGxldmVsKTsKICAgIF92YWxpZGF0ZVpMaWJNZW1MZXZlbChtZW1MZXZlbCk7CiAgICBfdmFsaWRhdGVaTGliU3RyYXRlZ3koc3RyYXRlZ3kpOwogICAgX3ZhbGlkYXRlWkxpYldpbmRvd0JpdHMod2luZG93Qml0cyk7CiAgfQoKICAvKioKICAgKiBDb252ZXJ0IGEgbGlzdCBvZiBieXRlcyB1c2luZyB0aGUgb3B0aW9ucyBnaXZlbiB0byB0aGUgWkxpYkVuY29kZXIKICAgKiBjb25zdHJ1Y3Rvci4KICAgKi8KICBMaXN0PGludD4gY29udmVydChMaXN0PGludD4gYnl0ZXMpIHsKICAgIF9CdWZmZXJTaW5rIHNpbmsgPSBuZXcgX0J1ZmZlclNpbmsoKTsKICAgIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oc2luaykKICAgICAgLi5hZGQoYnl0ZXMpCiAgICAgIC4uY2xvc2UoKTsKICAgIHJldHVybiBzaW5rLmJ1aWxkZXIudGFrZUJ5dGVzKCk7CiAgfQoKICAvKioKICAgKiBTdGFydCBhIGNodW5rZWQgY29udmVyc2lvbiB1c2luZyB0aGUgb3B0aW9ucyBnaXZlbiB0byB0aGUgW1pMaWJFbmNvZGVyXQogICAqIGNvbnN0cnVjdG9yLiBXaGlsZSBpdCBhY2NlcHRzIGFueSBbU2lua10gdGFraW5nIFtMaXN0PGludD5dJ3MsCiAgICogdGhlIG9wdGltYWwgc2luayB0byBiZSBwYXNzZWQgYXMgW3NpbmtdIGlzIGEgW0J5dGVDb252ZXJzaW9uU2lua10uCiAgICovCiAgQnl0ZUNvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxMaXN0PGludD4+IHNpbmspIHsKICAgIGlmIChzaW5rIGlzISBCeXRlQ29udmVyc2lvblNpbmspIHsKICAgICAgc2luayA9IG5ldyBCeXRlQ29udmVyc2lvblNpbmsuZnJvbShzaW5rKTsKICAgIH0KICAgIHJldHVybiBuZXcgX1pMaWJFbmNvZGVyU2luay5fKAogICAgICAgIHNpbmssIGd6aXAsIGxldmVsLCB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3ksIGRpY3Rpb25hcnksIHJhdyk7CiAgfQp9CgovKioKICogVGhlIFtaTGliRGVjb2Rlcl0gaXMgdXNlZCBieSBbWkxpYkNvZGVjXSBhbmQgW0daaXBDb2RlY10gdG8gZGVjb21wcmVzcyBkYXRhLgogKi8KY2xhc3MgWkxpYkRlY29kZXIgZXh0ZW5kcyBDb252ZXJ0ZXI8TGlzdDxpbnQ+LCBMaXN0PGludD4+IHsKICAvKioKICAgKiBCYXNlIHR3byBsb2dhcml0aG0gb2YgdGhlIHdpbmRvdyBzaXplICh0aGUgc2l6ZSBvZiB0aGUgaGlzdG9yeSBidWZmZXIpLiBJdAogICAqIHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgYDguLjE1YC4gTGFyZ2VyIHZhbHVlcyByZXN1bHQgaW4gYmV0dGVyIGNvbXByZXNzaW9uCiAgICogYXQgdGhlIGV4cGVuc2Ugb2YgbWVtb3J5IHVzYWdlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgMTVgLgogICAqLwogIGZpbmFsIGludCB3aW5kb3dCaXRzOwoKICAvKioKICAgKiBJbml0aWFsIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkuCiAgICoKICAgKiBJdCBzaG91bGQgY29uc2lzdCBvZiBzdHJpbmdzIChieXRlIHNlcXVlbmNlcykgdGhhdCBhcmUgbGlrZWx5IHRvIGJlCiAgICogZW5jb3VudGVyZWQgbGF0ZXIgaW4gdGhlIGRhdGEgdG8gYmUgY29tcHJlc3NlZCwgd2l0aCB0aGUgbW9zdCBjb21tb25seSB1c2VkCiAgICogc3RyaW5ncyBwcmVmZXJhYmx5IHB1dCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIGRpY3Rpb25hcnkuIFVzaW5nIGEKICAgKiBkaWN0aW9uYXJ5IGlzIG1vc3QgdXNlZnVsIHdoZW4gdGhlIGRhdGEgdG8gYmUgY29tcHJlc3NlZCBpcyBzaG9ydCBhbmQgY2FuCiAgICogYmUgcHJlZGljdGVkIHdpdGggZ29vZCBhY2N1cmFjeTsgdGhlIGRhdGEgY2FuIHRoZW4gYmUgY29tcHJlc3NlZCBiZXR0ZXIKICAgKiB0aGFuIHdpdGggdGhlIGRlZmF1bHQgZW1wdHkgZGljdGlvbmFyeS4KICAgKi8KICBmaW5hbCBMaXN0PGludD4gZGljdGlvbmFyeTsKCiAgLyoqCiAgICogV2hlbiB0cnVlLCBkZWZsYXRlIGdlbmVyYXRlcyByYXcgZGF0YSB3aXRoIG5vIHpsaWIgaGVhZGVyIG9yIHRyYWlsZXIsIGFuZAogICAqIHdpbGwgbm90IGNvbXB1dGUgYW4gYWRsZXIzMiBjaGVjayB2YWx1ZQogICAqLwogIGZpbmFsIGJvb2wgcmF3OwoKICBaTGliRGVjb2RlcigKICAgICAge3RoaXMud2luZG93Qml0czogWkxpYk9wdGlvbi5kZWZhdWx0V2luZG93Qml0cywKICAgICAgdGhpcy5kaWN0aW9uYXJ5LAogICAgICB0aGlzLnJhdzogZmFsc2V9KSB7CiAgICBfdmFsaWRhdGVaTGliV2luZG93Qml0cyh3aW5kb3dCaXRzKTsKICB9CgogIC8qKgogICAqIENvbnZlcnQgYSBsaXN0IG9mIGJ5dGVzIHVzaW5nIHRoZSBvcHRpb25zIGdpdmVuIHRvIHRoZSBbWkxpYkRlY29kZXJdCiAgICogY29uc3RydWN0b3IuCiAgICovCiAgTGlzdDxpbnQ+IGNvbnZlcnQoTGlzdDxpbnQ+IGJ5dGVzKSB7CiAgICBfQnVmZmVyU2luayBzaW5rID0gbmV3IF9CdWZmZXJTaW5rKCk7CiAgICBzdGFydENodW5rZWRDb252ZXJzaW9uKHNpbmspCiAgICAgIC4uYWRkKGJ5dGVzKQogICAgICAuLmNsb3NlKCk7CiAgICByZXR1cm4gc2luay5idWlsZGVyLnRha2VCeXRlcygpOwogIH0KCiAgLyoqCiAgICogU3RhcnQgYSBjaHVua2VkIGNvbnZlcnNpb24uIFdoaWxlIGl0IGFjY2VwdHMgYW55IFtTaW5rXQogICAqIHRha2luZyBbTGlzdDxpbnQ+XSdzLCB0aGUgb3B0aW1hbCBzaW5rIHRvIGJlIHBhc3NlZCBhcyBbc2lua10gaXMgYQogICAqIFtCeXRlQ29udmVyc2lvblNpbmtdLgogICAqLwogIEJ5dGVDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8TGlzdDxpbnQ+PiBzaW5rKSB7CiAgICBpZiAoc2luayBpcyEgQnl0ZUNvbnZlcnNpb25TaW5rKSB7CiAgICAgIHNpbmsgPSBuZXcgQnl0ZUNvbnZlcnNpb25TaW5rLmZyb20oc2luayk7CiAgICB9CiAgICByZXR1cm4gbmV3IF9aTGliRGVjb2RlclNpbmsuXyhzaW5rLCB3aW5kb3dCaXRzLCBkaWN0aW9uYXJ5LCByYXcpOwogIH0KfQoKLyoqCiAqIFRoZSBbUmF3WkxpYkZpbHRlcl0gY2xhc3MgcHJvdmlkZXMgYSBsb3ctbGV2ZWwgaW50ZXJmYWNlIHRvIHpsaWIuCiAqLwphYnN0cmFjdCBjbGFzcyBSYXdaTGliRmlsdGVyIHsKICAvKioKICAgKiBSZXR1cm5zIGEgYSBbUmF3WkxpYkZpbHRlcl0gd2hvc2UgW3Byb2Nlc3NdIGFuZCBbcHJvY2Vzc2VkXSBtZXRob2RzCiAgICogY29tcHJlc3MgZGF0YS4KICAgKi8KICBmYWN0b3J5IFJhd1pMaWJGaWx0ZXIuZGVmbGF0ZUZpbHRlcih7CiAgICBib29sIGd6aXA6IGZhbHNlLAogICAgaW50IGxldmVsOiBaTGliT3B0aW9uLmRlZmF1bHRMZXZlbCwKICAgIGludCB3aW5kb3dCaXRzOiBaTGliT3B0aW9uLmRlZmF1bHRXaW5kb3dCaXRzLAogICAgaW50IG1lbUxldmVsOiBaTGliT3B0aW9uLmRlZmF1bHRNZW1MZXZlbCwKICAgIGludCBzdHJhdGVneTogWkxpYk9wdGlvbi5zdHJhdGVneURlZmF1bHQsCiAgICBMaXN0PGludD4gZGljdGlvbmFyeSwKICAgIGJvb2wgcmF3OiBmYWxzZSwKICB9KSB7CiAgICByZXR1cm4gX21ha2VaTGliRGVmbGF0ZUZpbHRlcigKICAgICAgICBnemlwLCBsZXZlbCwgd2luZG93Qml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5LCBkaWN0aW9uYXJ5LCByYXcpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIGEgW1Jhd1pMaWJGaWx0ZXJdIHdob3NlIFtwcm9jZXNzXSBhbmQgW3Byb2Nlc3NlZF0gbWV0aG9kcwogICAqIGRlY29tcHJlc3MgZGF0YS4KICAgKi8KICBmYWN0b3J5IFJhd1pMaWJGaWx0ZXIuaW5mbGF0ZUZpbHRlcih7CiAgICBpbnQgd2luZG93Qml0czogWkxpYk9wdGlvbi5kZWZhdWx0V2luZG93Qml0cywKICAgIExpc3Q8aW50PiBkaWN0aW9uYXJ5LAogICAgYm9vbCByYXc6IGZhbHNlLAogIH0pIHsKICAgIHJldHVybiBfbWFrZVpMaWJJbmZsYXRlRmlsdGVyKHdpbmRvd0JpdHMsIGRpY3Rpb25hcnksIHJhdyk7CiAgfQoKICAvKioKICAgKiBDYWxsIHRvIHByb2Nlc3MgYSBjaHVuayBvZiBkYXRhLiBBIGNhbGwgdG8gW3Byb2Nlc3NdIHNob3VsZCBvbmx5IGJlIG1hZGUKICAgKiB3aGVuIFtwcm9jZXNzZWRdIHJldHVybnMgWzpudWxsOl0uCiAgICovCiAgdm9pZCBwcm9jZXNzKExpc3Q8aW50PiBkYXRhLCBpbnQgc3RhcnQsIGludCBlbmQpOwoKICAvKioKICAgKiBHZXQgYSBjaHVuayBvZiBwcm9jZXNzZWQgZGF0YS4gV2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBkYXRhIGF2YWlsYWJsZSwKICAgKiBbcHJvY2Vzc2VkXSB3aWxsIHJldHVybiBbOm51bGw6XS4gU2V0IFtmbHVzaF0gdG8gWzpmYWxzZTpdIGZvciBub24tZmluYWwKICAgKiBjYWxscyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIHNvbWUgZmlsdGVycy4KICAgKgogICAqIFRoZSBsYXN0IGNhbGwgdG8gW3Byb2Nlc3NlZF0gc2hvdWxkIGhhdmUgW2VuZF0gc2V0IHRvIFs6dHJ1ZTpdLiBUaGlzIHdpbGwKICAgKiBtYWtlIHN1cmUgYW4gJ2VuZCcgcGFja2V0IGlzIHdyaXR0ZW4gb24gdGhlIHN0cmVhbS4KICAgKi8KICBMaXN0PGludD4gcHJvY2Vzc2VkKHtib29sIGZsdXNoOiB0cnVlLCBib29sIGVuZDogZmFsc2V9KTsKCiAgZXh0ZXJuYWwgc3RhdGljIFJhd1pMaWJGaWx0ZXIgX21ha2VaTGliRGVmbGF0ZUZpbHRlcigKICAgICAgYm9vbCBnemlwLAogICAgICBpbnQgbGV2ZWwsCiAgICAgIGludCB3aW5kb3dCaXRzLAogICAgICBpbnQgbWVtTGV2ZWwsCiAgICAgIGludCBzdHJhdGVneSwKICAgICAgTGlzdDxpbnQ+IGRpY3Rpb25hcnksCiAgICAgIGJvb2wgcmF3KTsKCiAgZXh0ZXJuYWwgc3RhdGljIFJhd1pMaWJGaWx0ZXIgX21ha2VaTGliSW5mbGF0ZUZpbHRlcigKICAgICAgaW50IHdpbmRvd0JpdHMsIExpc3Q8aW50PiBkaWN0aW9uYXJ5LCBib29sIHJhdyk7Cn0KCmNsYXNzIF9CdWZmZXJTaW5rIGV4dGVuZHMgQnl0ZUNvbnZlcnNpb25TaW5rIHsKICBmaW5hbCBCeXRlc0J1aWxkZXIgYnVpbGRlciA9IG5ldyBCeXRlc0J1aWxkZXIoY29weTogZmFsc2UpOwoKICB2b2lkIGFkZChMaXN0PGludD4gY2h1bmspIHsKICAgIGJ1aWxkZXIuYWRkKGNodW5rKTsKICB9CgogIHZvaWQgYWRkU2xpY2UoTGlzdDxpbnQ+IGNodW5rLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBpZiAoY2h1bmsgaXMgVWludDhMaXN0KSB7CiAgICAgIFVpbnQ4TGlzdCBsaXN0ID0gY2h1bms7CiAgICAgIGJ1aWxkZXIuYWRkKG5ldyBVaW50OExpc3QudmlldygKICAgICAgICAgIGxpc3QuYnVmZmVyLCBsaXN0Lm9mZnNldEluQnl0ZXMgKyBzdGFydCwgZW5kIC0gc3RhcnQpKTsKICAgIH0gZWxzZSB7CiAgICAgIGJ1aWxkZXIuYWRkKGNodW5rLnN1Ymxpc3Qoc3RhcnQsIGVuZCkpOwogICAgfQogIH0KCiAgdm9pZCBjbG9zZSgpIHt9Cn0KCmNsYXNzIF9aTGliRW5jb2RlclNpbmsgZXh0ZW5kcyBfRmlsdGVyU2luayB7CiAgX1pMaWJFbmNvZGVyU2luay5fKAogICAgICBCeXRlQ29udmVyc2lvblNpbmsgc2luaywKICAgICAgYm9vbCBnemlwLAogICAgICBpbnQgbGV2ZWwsCiAgICAgIGludCB3aW5kb3dCaXRzLAogICAgICBpbnQgbWVtTGV2ZWwsCiAgICAgIGludCBzdHJhdGVneSwKICAgICAgTGlzdDxpbnQ+IGRpY3Rpb25hcnksCiAgICAgIGJvb2wgcmF3KQogICAgICA6IHN1cGVyKAogICAgICAgICAgICBzaW5rLAogICAgICAgICAgICBSYXdaTGliRmlsdGVyLl9tYWtlWkxpYkRlZmxhdGVGaWx0ZXIoCiAgICAgICAgICAgICAgICBnemlwLCBsZXZlbCwgd2luZG93Qml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5LCBkaWN0aW9uYXJ5LCByYXcpKTsKfQoKY2xhc3MgX1pMaWJEZWNvZGVyU2luayBleHRlbmRzIF9GaWx0ZXJTaW5rIHsKICBfWkxpYkRlY29kZXJTaW5rLl8oCiAgICAgIEJ5dGVDb252ZXJzaW9uU2luayBzaW5rLCBpbnQgd2luZG93Qml0cywgTGlzdDxpbnQ+IGRpY3Rpb25hcnksIGJvb2wgcmF3KQogICAgICA6IHN1cGVyKHNpbmssCiAgICAgICAgICAgIFJhd1pMaWJGaWx0ZXIuX21ha2VaTGliSW5mbGF0ZUZpbHRlcih3aW5kb3dCaXRzLCBkaWN0aW9uYXJ5LCByYXcpKTsKfQoKY2xhc3MgX0ZpbHRlclNpbmsgZXh0ZW5kcyBCeXRlQ29udmVyc2lvblNpbmsgewogIGZpbmFsIFJhd1pMaWJGaWx0ZXIgX2ZpbHRlcjsKICBmaW5hbCBCeXRlQ29udmVyc2lvblNpbmsgX3Npbms7CiAgYm9vbCBfY2xvc2VkID0gZmFsc2U7CiAgYm9vbCBfZW1wdHkgPSB0cnVlOwoKICBfRmlsdGVyU2luayh0aGlzLl9zaW5rLCB0aGlzLl9maWx0ZXIpOwoKICB2b2lkIGFkZChMaXN0PGludD4gZGF0YSkgewogICAgYWRkU2xpY2UoZGF0YSwgMCwgZGF0YS5sZW5ndGgsIGZhbHNlKTsKICB9CgogIHZvaWQgYWRkU2xpY2UoTGlzdDxpbnQ+IGRhdGEsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIGlmIChfY2xvc2VkKSByZXR1cm47CiAgICBpZiAoZW5kID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoImVuZCIpOwogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgZGF0YS5sZW5ndGgpOwogICAgdHJ5IHsKICAgICAgX2VtcHR5ID0gZmFsc2U7CiAgICAgIF9CdWZmZXJBbmRTdGFydCBidWZmZXJBbmRTdGFydCA9CiAgICAgICAgICBfZW5zdXJlRmFzdEFuZFNlcmlhbGl6YWJsZUJ5dGVEYXRhKGRhdGEsIHN0YXJ0LCBlbmQpOwogICAgICBfZmlsdGVyLnByb2Nlc3MoYnVmZmVyQW5kU3RhcnQuYnVmZmVyLCBidWZmZXJBbmRTdGFydC5zdGFydCwKICAgICAgICAgIGVuZCAtIChzdGFydCAtIGJ1ZmZlckFuZFN0YXJ0LnN0YXJ0KSk7CiAgICAgIExpc3Q8aW50PiBvdXQ7CiAgICAgIHdoaWxlICgob3V0ID0gX2ZpbHRlci5wcm9jZXNzZWQoZmx1c2g6IGZhbHNlKSkgIT0gbnVsbCkgewogICAgICAgIF9zaW5rLmFkZChvdXQpOwogICAgICB9CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIF9jbG9zZWQgPSB0cnVlOwogICAgICByZXRocm93OwogICAgfQoKICAgIGlmIChpc0xhc3QpIGNsb3NlKCk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgaWYgKF9jbG9zZWQpIHJldHVybjsKICAgIC8vIEJlIHN1cmUgdG8gc2VuZCBwcm9jZXNzIGFuIGVtcHR5IGNodW5rIG9mIGRhdGEuIFdpdGhvdXQgdGhpcywgdGhlIGVtcHR5CiAgICAvLyBtZXNzYWdlIHdvdWxkIG5vdCBoYXZlIGEgR1ppcCBmcmFtZSAoaWYgY29tcHJlc3NlZCB3aXRoIEdaaXApLgogICAgaWYgKF9lbXB0eSkgX2ZpbHRlci5wcm9jZXNzKGNvbnN0IFtdLCAwLCAwKTsKICAgIHRyeSB7CiAgICAgIExpc3Q8aW50PiBvdXQ7CiAgICAgIHdoaWxlICgob3V0ID0gX2ZpbHRlci5wcm9jZXNzZWQoZW5kOiB0cnVlKSkgIT0gbnVsbCkgewogICAgICAgIF9zaW5rLmFkZChvdXQpOwogICAgICB9CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIC8vIFRPRE8oa2V2bW9vKTogbm90IHN1cmUgd2h5IHRoaXMgaXNuJ3QgYSB0cnkvZmluYWxseQogICAgICBfY2xvc2VkID0gdHJ1ZTsKICAgICAgdGhyb3cgZTsKICAgIH0KICAgIF9jbG9zZWQgPSB0cnVlOwogICAgX3NpbmsuY2xvc2UoKTsKICB9Cn0KCnZvaWQgX3ZhbGlkYXRlWkxpYldpbmRvd0JpdHMoaW50IHdpbmRvd0JpdHMpIHsKICBpZiAoWkxpYk9wdGlvbi5taW5XaW5kb3dCaXRzID4gd2luZG93Qml0cyB8fAogICAgICBaTGliT3B0aW9uLm1heFdpbmRvd0JpdHMgPCB3aW5kb3dCaXRzKSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZSgKICAgICAgICB3aW5kb3dCaXRzLCBaTGliT3B0aW9uLm1pbldpbmRvd0JpdHMsIFpMaWJPcHRpb24ubWF4V2luZG93Qml0cyk7CiAgfQp9Cgp2b2lkIF92YWxpZGF0ZVpMaWJlTGV2ZWwoaW50IGxldmVsKSB7CiAgaWYgKFpMaWJPcHRpb24ubWluTGV2ZWwgPiBsZXZlbCB8fCBaTGliT3B0aW9uLm1heExldmVsIDwgbGV2ZWwpIHsKICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGxldmVsLCBaTGliT3B0aW9uLm1pbkxldmVsLCBaTGliT3B0aW9uLm1heExl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dG9yeSBjYW4gYmUgW2Fic29sdXRlXSBvciByZWxhdGl2ZS4KICogWW91IGNhbiBnZXQgdGhlIHBhcmVudCBkaXJlY3RvcnkgdXNpbmcgdGhlIGdldHRlciBbcGFyZW50XSwKICogYSBwcm9wZXJ0eSBpbmhlcml0ZWQgZnJvbSBbRmlsZVN5c3RlbUVudGl0eV0uCiAqCiAqIEluIGFkZGl0aW9uIHRvIGJlaW5nIHVzZWQgYXMgYW4gaW5zdGFuY2UgdG8gYWNjZXNzIHRoZSBmaWxlIHN5c3RlbSwKICogRGlyZWN0b3J5IGhhcyBhIG51bWJlciBvZiBzdGF0aWMgcHJvcGVydGllcywgc3VjaCBhcyBbc3lzdGVtVGVtcF0sCiAqIHdoaWNoIGdldHMgdGhlIHN5c3RlbSdzIHRlbXBvcmFyeSBkaXJlY3RvcnksIGFuZCB0aGUgZ2V0dGVyIGFuZCBzZXR0ZXIKICogW2N1cnJlbnRdLCB3aGljaCB5b3UgY2FuIHVzZSB0byBhY2Nlc3Mgb3IgY2hhbmdlIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KICoKICogQ3JlYXRlIGEgbmV3IERpcmVjdG9yeSBvYmplY3Qgd2l0aCBhIHBhdGhuYW1lIHRvIGFjY2VzcyB0aGUgc3BlY2lmaWVkCiAqIGRpcmVjdG9yeSBvbiB0aGUgZmlsZSBzeXN0ZW0gZnJvbSB5b3VyIHByb2dyYW0uCiAqCiAqICAgICB2YXIgbXlEaXIgPSBuZXcgRGlyZWN0b3J5KCdteURpcicpOwogKgogKiBNb3N0IG1ldGhvZHMgaW4gdGhpcyBjbGFzcyBvY2N1ciBpbiBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIHBhaXJzLAogKiBmb3IgZXhhbXBsZSwgW2NyZWF0ZV0gYW5kIFtjcmVhdGVTeW5jXS4KICogVW5sZXNzIHlvdSBoYXZlIGEgc3BlY2lmaWMgcmVhc29uIGZvciB1c2luZyB0aGUgc3luY2hyb25vdXMgdmVyc2lvbgogKiBvZiBhIG1ldGhvZCwgcHJlZmVyIHRoZSBhc3luY2hyb25vdXMgdmVyc2lvbiB0byBhdm9pZCBibG9ja2luZyB5b3VyIHByb2dyYW0uCiAqCiAqICMjIENyZWF0ZSBhIGRpcmVjdG9yeQogKgogKiBUaGUgZm9sbG93aW5nIGNvZGUgc2FtcGxlIGNyZWF0ZXMgYSBkaXJlY3RvcnkgdXNpbmcgdGhlIFtjcmVhdGVdIG1ldGhvZC4KICogQnkgc2V0dGluZyB0aGUgYHJlY3Vyc2l2ZWAgcGFyYW1ldGVyIHRvIHRydWUsIHlvdSBjYW4gY3JlYXRlIHRoZQogKiBuYW1lZCBkaXJlY3RvcnkgYW5kIGFsbCBpdHMgbmVjZXNzYXJ5IHBhcmVudCBkaXJlY3RvcmllcywKICogaWYgdGhleSBkbyBub3QgYWxyZWFkeSBleGlzdC4KICoKICogICAgIGltcG9ydCAnZGFydDppbyc7CiAqCiAqICAgICB2b2lkIG1haW4oKSB7CiAqICAgICAgIC8vIENyZWF0ZXMgZGlyLyBhbmQgZGlyL3N1YmRpci8uCiAqICAgICAgIG5ldyBEaXJlY3RvcnkoJ2Rpci9zdWJkaXInKS5jcmVhdGUocmVjdXJzaXZlOiB0cnVlKQogKiAgICAgICAgIC8vIFRoZSBjcmVhdGVkIGRpcmVjdG9yeSBpcyByZXR1cm5lZCBhcyBhIEZ1dHVyZS4KICogICAgICAgICAudGhlbigoRGlyZWN0b3J5IGRpcmVjdG9yeSkgewogKiAgICAgICAgICAgcHJpbnQoZGlyZWN0b3J5LnBhdGgpOwogKiAgICAgICB9KTsKICogICAgIH0KICoKICogIyMgTGlzdCBhIGRpcmVjdG9yeQogKgogKiBVc2UgdGhlIFtsaXN0XSBvciBbbGlzdFN5bmNdIG1ldGhvZHMgdG8gZ2V0IHRoZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMKICogY29udGFpbmVkIGJ5IGEgZGlyZWN0b3J5LgogKiBTZXQgYHJlY3Vyc2l2ZWAgdG8gdHJ1ZSB0byByZWN1cnNpdmVseSBsaXN0IGFsbCBzdWJkaXJlY3Rvcmllcy4KICogU2V0IGBmb2xsb3dMaW5rc2AgdG8gdHJ1ZSB0byBmb2xsb3cgc3ltYm9saWMgbGlua3MuCiAqIFRoZSBsaXN0IG1ldGhvZCByZXR1cm5zIGEgW1N0cmVhbV0gdGhhdCBwcm92aWRlcyBGaWxlU3lzdGVtRW50aXR5CiAqIG9iamVjdHMuIFVzZSB0aGUgbGlzdGVuIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHByb2Nlc3MgZWFjaCBvYmplY3QKICogYXMgaXQgYmVjb21lIGF2YWlsYWJsZS4KICoKICogICAgIGltcG9ydCAnZGFydDppbyc7CiAqCiAqICAgICB2b2lkIG1haW4oKSB7CiAqICAgICAgIC8vIEdldCB0aGUgc3lzdGVtIHRlbXAgZGlyZWN0b3J5LgogKiAgICAgICB2YXIgc3lzdGVtVGVtcERpciA9IERpcmVjdG9yeS5zeXN0ZW1UZW1wOwogKgogKiAgICAgICAvLyBMaXN0IGRpcmVjdG9yeSBjb250ZW50cywgcmVjdXJzaW5nIGludG8gc3ViLWRpcmVjdG9yaWVzLAogKiAgICAgICAvLyBidXQgbm90IGZvbGxvd2luZyBzeW1ib2xpYyBsaW5rcy4KICogICAgICAgc3lzdGVtVGVtcERpci5saXN0KHJlY3Vyc2l2ZTogdHJ1ZSwgZm9sbG93TGlua3M6IGZhbHNlKQogKiAgICAgICAgIC5saXN0ZW4oKEZpbGVTeXN0ZW1FbnRpdHkgZW50aXR5KSB7CiAqICAgICAgICAgICBwcmludChlbnRpdHkucGF0aCk7CiAqICAgICAgICAgfSk7CiAqICAgICB9CiAqCiAqICMjIFRoZSB1c2Ugb2YgRnV0dXJlcwogKgogKiBJL08gb3BlcmF0aW9ucyBjYW4gYmxvY2sgYSBwcm9ncmFtIGZvciBzb21lIHBlcmlvZCBvZiB0aW1lIHdoaWxlIGl0IHdhaXRzIGZvcgogKiB0aGUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlLiBUbyBhdm9pZCB0aGlzLCBhbGwKICogbWV0aG9kcyBpbnZvbHZpbmcgSS9PIGhhdmUgYW4gYXN5bmNocm9ub3VzIHZhcmlhbnQgd2hpY2ggcmV0dXJucyBhIFtGdXR1cmVdLgogKiBUaGlzIGZ1dHVyZSBjb21wbGV0ZXMgd2hlbiB0aGUgSS9PIG9wZXJhdGlvbiBmaW5pc2hlcy4gV2hpbGUgdGhlIEkvTwogKiBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MsIHRoZSBEYXJ0IHByb2dyYW0gaXMgbm90IGJsb2NrZWQsCiAqIGFuZCBjYW4gcGVyZm9ybSBvdGhlciBvcGVyYXRpb25zLgogKgogKiBGb3IgZXhhbXBsZSwKICogdGhlIFtleGlzdHNdIG1ldGhvZCwgd2hpY2ggZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBkaXJlY3RvcnkgZXhpc3RzLAogKiByZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSB1c2luZyBhIEZ1dHVyZS4KICogVXNlIGB0aGVuYCB0byByZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uLCB3aGljaCBpcyBjYWxsZWQgd2hlbgogKiB0aGUgdmFsdWUgaXMgcmVhZHkuCiAqCiAqICAgICBpbXBvcnQgJ2RhcnQ6aW8nOwogKgogKiAgICAgbWFpbigpIHsKICogICAgICAgZmluYWwgbXlEaXIgPSBuZXcgRGlyZWN0b3J5KCdkaXInKTsKICogICAgICAgbXlEaXIuZXhpc3RzKCkudGhlbigoaXNUaGVyZSkgewogKiAgICAgICAgIGlzVGhlcmUgPyBwcmludCgnZXhpc3RzJykgOiBwcmludCgnbm9uLWV4aXN0ZW50Jyk7CiAqICAgICAgIH0pOwogKiAgICAgfQogKgogKgogKiBJbiBhZGRpdGlvbiB0byBleGlzdHMsIHRoZSBbc3RhdF0sIFtyZW5hbWVdLCBhbmQKICogb3RoZXIgbWV0aG9kcywgcmV0dXJuIEZ1dHVyZXMuCiAqCiAqICMjIE90aGVyIHJlc291cmNlcwogKgogKiAqIFtEYXJ0IGJ5IEV4YW1wbGVdKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kYXJ0LWJ5LWV4YW1wbGUvI2ZpbGVzLWRpcmVjdG9yaWVzLWFuZC1zeW1saW5rcykKICogICBwcm92aWRlcyBhZGRpdGlvbmFsIHRhc2stb3JpZW50ZWQgY29kZSBzYW1wbGVzIHRoYXQgc2hvdyBob3cgdG8gdXNlCiAqICAgdmFyaW91cyBBUEkgZnJvbSB0aGUgRGlyZWN0b3J5IGNsYXNzIGFuZCB0aGUgcmVsYXRlZCBbRmlsZV0gY2xhc3MuCiAqCiAqICogW0kvTyBmb3IgQ29tbWFuZC1MaW5lCiAqICAgQXBwc10oaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2RvY3MvZGFydC11cC1hbmQtcnVubmluZy9jaDAzLmh0bWwjZGFydGlvLS0taW8tZm9yLWNvbW1hbmQtbGluZS1hcHBzKQogKiAgIGEgc2VjdGlvbiBmcm9tIF9BIFRvdXIgb2YgdGhlIERhcnQgTGlicmFyaWVzXyBjb3ZlcnMgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgogKgogKiAqIFtXcml0ZSBDb21tYW5kLUxpbmUgQXBwc10oaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2RvY3MvdHV0b3JpYWxzL2NtZGxpbmUvKSwKICogICBhIHR1dG9yaWFsIGFib3V0IHdyaXRpbmcgY29tbWFuZC1saW5lIGFwcHMsIGluY2x1ZGVzIGluZm9ybWF0aW9uIGFib3V0CiAqICAgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgogKi8KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQphYnN0cmFjdCBjbGFzcyBEaXJlY3RvcnkgaW1wbGVtZW50cyBGaWxlU3lzdGVtRW50aXR5IHsKICAvKioKICAgKiBHZXRzIHRoZSBwYXRoIG9mIHRoaXMgZGlyZWN0b3J5LgogICAqLwogIFN0cmluZyBnZXQgcGF0aDsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtEaXJlY3RvcnldIG9iamVjdC4KICAgKgogICAqIElmIFtwYXRoXSBpcyBhIHJlbGF0aXZlIHBhdGgsIGl0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhlCiAgICogY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAoc2VlIFtEaXJlY3RvcnkuY3VycmVudF0pLCB3aGVuIHVzZWQuCiAgICoKICAgKiBJZiBbcGF0aF0gaXMgYW4gYWJzb2x1dGUgcGF0aCwgaXQgd2lsbCBiZSBpbW11bmUgdG8gY2hhbmdlcyB0byB0aGUKICAgKiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogICAqLwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBmYWN0b3J5IERpcmVjdG9yeShTdHJpbmcgcGF0aCkgewogICAgZmluYWwgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gbmV3IF9EaXJlY3RvcnkocGF0aCk7CiAgICB9CiAgICByZXR1cm4gb3ZlcnJpZGVzLmNyZWF0ZURpcmVjdG9yeShwYXRoKTsKICB9CgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBmYWN0b3J5IERpcmVjdG9yeS5mcm9tUmF3UGF0aChVaW50OExpc3QgcGF0aCkgewogICAgLy8gVE9ETyhia29ueWkpOiBIYW5kbGUgb3ZlcnJpZGVzLgogICAgcmV0dXJuIG5ldyBfRGlyZWN0b3J5LmZyb21SYXdQYXRoKHBhdGgpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlIGEgRGlyZWN0b3J5IG9iamVjdCBmcm9tIGEgVVJJLgogICAqCiAgICogSWYgW3VyaV0gY2Fubm90IHJlZmVyZW5jZSBhIGRpcmVjdG9yeSB0aGlzIHRocm93cyBbVW5zdXBwb3J0ZWRFcnJvcl0uCiAgICovCiAgZmFjdG9yeSBEaXJlY3RvcnkuZnJvbVVyaShVcmkgdXJpKSA9PiBuZXcgRGlyZWN0b3J5KHVyaS50b0ZpbGVQYXRoKCkpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgZGlyZWN0b3J5IG9iamVjdCBwb2ludGluZyB0byB0aGUgY3VycmVudCB3b3JraW5nCiAgICogZGlyZWN0b3J5LgogICAqLwogIHN0YXRpYyBEaXJlY3RvcnkgZ2V0IGN1cnJlbnQgewogICAgZmluYWwgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX0RpcmVjdG9yeS5jdXJyZW50OwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5nZXRDdXJyZW50RGlyZWN0b3J5KCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgW1VyaV0gcmVwcmVzZW50aW5nIHRoZSBkaXJlY3RvcnkncyBsb2NhdGlvbi4KICAgKgogICAqIFRoZSByZXR1cm5lZCBVUkkncyBzY2hlbWUgaXMgYWx3YXlzICJmaWxlIiBpZiB0aGUgZW50aXR5J3MgW3BhdGhdIGlzCiAgICogYWJzb2x1dGUsIG90aGVyd2lzZSB0aGUgc2NoZW1lIHdpbGwgYmUgZW1wdHkuCiAgICogVGhlIHJldHVybmVkIFVSSSdzIHBhdGggYWx3YXlzIGVuZHMgaW4gYSBzbGFzaCAoJy8nKS4KICAgKi8KICBVcmkgZ2V0IHVyaTsKCiAgLyoqCiAgICogU2V0cyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBvZiB0aGUgRGFydCBwcm9jZXNzIGluY2x1ZGluZwogICAqIGFsbCBydW5uaW5nIGlzb2xhdGVzLiBUaGUgbmV3IHZhbHVlIHNldCBjYW4gYmUgZWl0aGVyIGEgW0RpcmVjdG9yeV0KICAgKiBvciBhIFtTdHJpbmddLgogICAqCiAgICogVGhlIG5ldyB2YWx1ZSBpcyBwYXNzZWQgdG8gdGhlIE9TJ3Mgc3lzdGVtIGNhbGwgdW5jaGFuZ2VkLCBzbyBhCiAgICogcmVsYXRpdmUgcGF0aCBwYXNzZWQgYXMgdGhlIG5ldyB3b3JraW5nIGRpcmVjdG9yeSB3aWxsIGJlCiAgICogcmVzb2x2ZWQgYnkgdGhlIE9TLgogICAqCiAgICogTm90ZSB0aGF0IHNldHRpbmcgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXMgYSBzeW5jaHJvbm91cwogICAqIG9wZXJhdGlvbiBhbmQgdGhhdCBpdCBjaGFuZ2VzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiAqYWxsKgogICAqIGlzb2xhdGVzLgogICAqCiAgICogVXNlIHRoaXMgd2l0aCBjYXJlIC0gZXNwZWNpYWxseSB3aGVuIHdvcmtpbmcgd2l0aCBhc3luY2hyb25vdXMKICAgKiBvcGVyYXRpb25zIGFuZCBtdWx0aXBsZSBpc29sYXRlcy4gQ2hhbmdpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LAogICAqIHdoaWxlIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIGFyZSBwZW5kaW5nIG9yIHdoZW4gb3RoZXIgaXNvbGF0ZXMKICAgKiBhcmUgd29ya2luZyB3aXRoIHRoZSBmaWxlIHN5c3RlbSwgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCByZXN1bHRzLgogICAqLwogIHN0YXRpYyB2b2lkIHNldCBjdXJyZW50KHBhdGgpIHsKICAgIGZpbmFsIElPT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IElPT3ZlcnJpZGVzLmN1cnJlbnQ7CiAgICBpZiAob3ZlcnJpZGVzID09IG51bGwpIHsKICAgICAgX0RpcmVjdG9yeS5jdXJyZW50ID0gcGF0aDsKICAgICAgcmV0dXJuOwogICAgfQogICAgb3ZlcnJpZGVzLnNldEN1cnJlbnREaXJlY3RvcnkocGF0aCk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIHRoZSBkaXJlY3Rvcnkgd2l0aCB0aGlzIG5hbWUuCiAgICoKICAgKiBJZiBbcmVjdXJzaXZlXSBpcyBmYWxzZSwgb25seSB0aGUgbGFzdCBkaXJlY3RvcnkgaW4gdGhlIHBhdGggaXMKICAgKiBjcmVhdGVkLiBJZiBbcmVjdXJzaXZlXSBpcyB0cnVlLCBhbGwgbm9uLWV4aXN0aW5nIHBhdGggY29tcG9uZW50cwogICAqIGFyZSBjcmVhdGVkLiBJZiB0aGUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIG5vdGhpbmcgaXMgZG9uZS4KICAgKgogICAqIFJldHVybnMgYSBbOkZ1dHVyZTxEaXJlY3Rvcnk+Ol0gdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGlzCiAgICogZGlyZWN0b3J5IG9uY2UgaXQgaGFzIGJlZW4gY3JlYXRlZC4gSWYgdGhlIGRpcmVjdG9yeSBjYW5ub3QgYmUKICAgKiBjcmVhdGVkIHRoZSBmdXR1cmUgY29tcGxldGVzIHdpdGggYW4gZXhjZXB0aW9uLgogICAqLwogIEZ1dHVyZTxEaXJlY3Rvcnk+IGNyZWF0ZSh7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgY3JlYXRlcyB0aGUgZGlyZWN0b3J5IHdpdGggdGhpcyBuYW1lLgogICAqCiAgICogSWYgW3JlY3Vyc2l2ZV0gaXMgZmFsc2UsIG9ubHkgdGhlIGxhc3QgZGlyZWN0b3J5IGluIHRoZSBwYXRoIGlzCiAgICogY3JlYXRlZC4gSWYgW3JlY3Vyc2l2ZV0gaXMgdHJ1ZSwgYWxsIG5vbi1leGlzdGluZyBwYXRoIGNvbXBvbmVudHMKICAgKiBhcmUgY3JlYXRlZC4gSWYgdGhlIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyBub3RoaW5nIGlzIGRvbmUuCiAgICoKICAgKiBJZiB0aGUgZGlyZWN0b3J5IGNhbm5vdCBiZSBjcmVhdGVkIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICovCiAgdm9pZCBjcmVhdGVTeW5jKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KTsKCiAgLyoqCiAgICogR2V0cyB0aGUgc3lzdGVtIHRlbXAgZGlyZWN0b3J5LgogICAqCiAgICogR2V0cyB0aGUgZGlyZWN0b3J5IHByb3ZpZGVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGZvciBjcmVhdGluZwogICAqIHRlbXBvcmFyeSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgaW4uCiAgICogVGhlIGxvY2F0aW9uIG9mIHRoZSBzeXN0ZW0gdGVtcCBkaXJlY3RvcnkgaXMgcGxhdGZvcm0tZGVwZW5kZW50LAogICAqIGFuZCBtYXkgYmUgc2V0IGJ5IGFuIGVudmlyb25tZW50IHZhcmlhYmxlLgogICAqLwogIHN0YXRpYyBEaXJlY3RvcnkgZ2V0IHN5c3RlbVRlbXAgewogICAgZmluYWwgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX0RpcmVjdG9yeS5zeXN0ZW1UZW1wOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5nZXRTeXN0ZW1UZW1wRGlyZWN0b3J5KCk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiB0aGlzIGRpcmVjdG9yeS4gQWRkaXRpb25hbCByYW5kb20KICAgKiBjaGFyYWN0ZXJzIGFyZSBhcHBlbmRlZCB0byBbcHJlZml4XSB0byBwcm9kdWNlIGEgdW5pcXVlIGRpcmVjdG9yeQogICAqIG5hbWUuIElmIFtwcmVmaXhdIGlzIG1pc3Npbmcgb3IgbnVsbCwgdGhlIGVtcHR5IHN0cmluZyBpcyB1c2VkCiAgICogZm9yIFtwcmVmaXhdLgogICAqCiAgICogUmV0dXJucyBhIFs6RnV0dXJlPERpcmVjdG9yeT46XSB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoZSBuZXdseQogICAqIGNyZWF0ZWQgdGVtcG9yYXJ5IGRpcmVjdG9yeS4KICAgKi8KICBGdXR1cmU8RGlyZWN0b3J5PiBjcmVhdGVUZW1wKFtTdHJpbmcgcHJlZml4XSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgY3JlYXRlcyBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gdGhpcyBkaXJlY3RvcnkuCiAgICogQWRkaXRpb25hbCByYW5kb20gY2hhcmFjdGVycyBhcmUgYXBwZW5kZWQgdG8gW3ByZWZpeF0gdG8gcHJvZHVjZQogICAqIGEgdW5pcXVlIGRpcmVjdG9yeSBuYW1lLiBJZiBbcHJlZml4XSBpcyBtaXNzaW5nIG9yIG51bGwsIHRoZSBlbXB0eQogICAqIHN0cmluZyBpcyB1c2VkIGZvciBbcHJlZml4XS4KICAgKgogICAqIFJldHVybnMgdGhlIG5ld2x5IGNyZWF0ZWQgdGVtcG9yYXJ5IGRpcmVjdG9yeS4KICAgKi8KICBEaXJlY3RvcnkgY3JlYXRlVGVtcFN5bmMoW1N0cmluZyBwcmVmaXhdKTsKCiAgRnV0dXJlPFN0cmluZz4gcmVzb2x2ZVN5bWJvbGljTGlua3MoKTsKCiAgU3RyaW5nIHJlc29sdmVTeW1ib2xpY0xpbmtzU3luYygpOwoKICAvKioKICAgKiBSZW5hbWVzIHRoaXMgZGlyZWN0b3J5LiBSZXR1cm5zIGEgWzpGdXR1cmU8RGlyZWN0b3J5PjpdIHRoYXQgY29tcGxldGVzCiAgICogd2l0aCBhIFtEaXJlY3RvcnldIGluc3RhbmNlIGZvciB0aGUgcmVuYW1lZCBkaXJlY3RvcnkuCiAgICoKICAgKiBJZiBuZXdQYXRoIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LCB0aGF0IGRpcmVjdG9yeSBpcwogICAqIHJlcGxhY2VkLiBJZiBuZXdQYXRoIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZmlsZSwgdGhlIG9wZXJhdGlvbgogICAqIGZhaWxzIGFuZCB0aGUgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGV4Y2VwdGlvbi4KICAgKi8KICBGdXR1cmU8RGlyZWN0b3J5PiByZW5hbWUoU3RyaW5nIG5ld1BhdGgpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHJlbmFtZXMgdGhpcyBkaXJlY3RvcnkuIFJldHVybnMgYSBbRGlyZWN0b3J5XQogICAqIGluc3RhbmNlIGZvciB0aGUgcmVuYW1lZCBkaXJlY3RvcnkuCiAgICoKICAgKiBJZiBuZXdQYXRoIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LCB0aGF0IGRpcmVjdG9yeSBpcwogICAqIHJlcGxhY2VkLiBJZiBuZXdQYXRoIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZmlsZSB0aGUgb3BlcmF0aW9uCiAgICogZmFpbHMgYW5kIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICovCiAgRGlyZWN0b3J5IHJlbmFtZVN5bmMoU3RyaW5nIG5ld1BhdGgpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgW0RpcmVjdG9yeV0gaW5zdGFuY2Ugd2hvc2UgcGF0aCBpcyB0aGUgYWJzb2x1dGUgcGF0aCB0byBbdGhpc10uCiAgICoKICAgKiBUaGUgYWJzb2x1dGUgcGF0aCBpcyBjb21wdXRlZCBieSBwcmVmaXhpbmcKICAgKiBhIHJlbGF0aXZlIHBhdGggd2l0aCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSwgYW5kIHJldHVybmluZwogICAqIGFuIGFic29sdXRlIHBhdGggdW5jaGFuZ2VkLgogICAqLwogIERpcmVjdG9yeSBnZXQgYWJzb2x1dGU7CgogIC8qKgogICAqIExpc3RzIHRoZSBzdWItZGlyZWN0b3JpZXMgYW5kIGZpbGVzIG9mIHRoaXMgW0RpcmVjdG9yeV0uCiAgICogT3B0aW9uYWxseSByZWN1cnNlcyBpbnRvIHN1Yi1kaXJlY3Rvcmllcy4KICAgKgogICAqIElmIFtmb2xsb3dMaW5rc10gaXMgZmFsc2UsIHRoZW4gYW55IHN5bWJvbGljIGxpbmtzIGZvdW5kCiAgICogYXJlIHJlcG9ydGVkIGFzIFtMaW5rXSBvYmplY3RzLCByYXRoZXIgdGhhbiBhcyBkaXJlY3RvcmllcyBvciBmaWxlcywKICAgKiBhbmQgYXJlIG5vdCByZWN1cnNlZCBpbnRvLgogICAqCiAgICogSWYgW2ZvbGxvd0xpbmtzXSBpcyB0cnVlLCB0aGVuIHdvcmtpbmcgbGlua3MgYXJlIHJlcG9ydGVkIGFzCiAgICogZGlyZWN0b3JpZXMgb3IgZmlsZXMsIGRlcGVuZGluZyBvbgogICAqIHRoZWlyIHR5cGUsIGFuZCBsaW5rcyB0byBkaXJlY3RvcmllcyBhcmUgcmVjdXJzZWQgaW50by4KICAgKiBCcm9rZW4gbGlua3MgYXJlIHJlcG9ydGVkIGFzIFtMaW5rXSBvYmplY3RzLgogICAqIElmIGEgc3ltYm9saWMgbGluayBtYWtlcyBhIGxvb3AgaW4gdGhlIGZpbGUgc3lzdGVtLCB0aGVuIGEgcmVjdXJzaXZlCiAgICogbGlzdGluZyB3aWxsIG5vdCBmb2xsb3cgYSBsaW5rIHR3aWNlIGluIHRoZQogICAqIHNhbWUgcmVjdXJzaXZlIGRlc2NlbnQsIGJ1dCB3aWxsIHJlcG9ydCBpdCBhcyBhIFtMaW5rXQogICAqIHRoZSBzZWNvbmQgdGltZSBpdCBpcyBzZWVuLgogICAqCiAgICogVGhlIHJlc3VsdCBpcyBhIHN0cmVhbSBvZiBbRmlsZVN5c3RlbUVudGl0eV0gb2JqZWN0cwogICAqIGZvciB0aGUgZGlyZWN0b3JpZXMsIGZpbGVzLCBhbmQgbGlua3MuCiAgICovCiAgU3RyZWFtPEZpbGVTeXN0ZW1FbnRpdHk+IGxpc3QoCiAgICAgIHtib29sIHJlY3Vyc2l2ZTogZmFsc2UsIGJvb2wgZm9sbG93TGlua3M6IHRydWV9KTsKCiAgLyoqCiAgICogTGlzdHMgdGhlIHN1Yi1kaXJlY3RvcmllcyBhbmQgZmlsZXMgb2YgdGhpcyBbRGlyZWN0b3J5XS4KICAgKiBPcHRpb25hbGx5IHJlY3Vyc2VzIGludG8gc3ViLWRpcmVjdG9yaWVzLgogICAqCiAgICogSWYgW2ZvbGxvd0xpbmtzXSBpcyBmYWxzZSwgdGhlbiBhbnkgc3ltYm9saWMgbGlua3MgZm91bmQKICAgKiBhcmUgcmVwb3J0ZWQgYXMgW0xpbmtdIG9iamVjdHMsIHJhdGhlciB0aGFuIGFzIGRpcmVjdG9yaWVzIG9yIGZpbGVzLAogICAqIGFuZCBhcmUgbm90IHJlY3Vyc2VkIGludG8uCiAgICoKICAgKiBJZiBbZm9sbG93TGlua3NdIGlzIHRydWUsIHRoZW4gd29ya2luZyBsaW5rcyBhcmUgcmVwb3J0ZWQgYXMKICAgKiBkaXJlY3RvcmllcyBvciBmaWxlcywgZGVwZW5kaW5nIG9uCiAgICogdGhlaXIgdHlwZSwgYW5kIGxpbmtzIHRvIGRpcmVjdG9yaWVzIGFyZSByZWN1cnNlZCBpbnRvLgogICAqIEJyb2tlbiBsaW5rcyBhcmUgcmVwb3J0ZWQgYXMgW0xpbmtdIG9iamVjdHMuCiAgICogSWYgYSBsaW5rIG1ha2VzIGEgbG9vcCBpbiB0aGUgZmlsZSBzeXN0ZW0sIHRoZW4gYSByZWN1cnNpdmUKICAgKiBsaXN0aW5nIHdpbGwgbm90IGZvbGxvdyBhIGxpbmsgdHdpY2UgaW4gdGhlCiAgICogc2FtZSByZWN1cnNpdmUgZGVzY2VudCwgYnV0IHdpbGwgcmVwb3J0IGl0IGFzIGEgW0xpbmtdCiAgICogdGhlIHNlY29uZCB0aW1lIGl0IGlzIHNlZW4uCiAgICoKICAgKiBSZXR1cm5zIGEgW0xpc3RdIGNvbnRhaW5pbmcgW0ZpbGVTeXN0ZW1FbnRpdHldIG9iamVjdHMgZm9yIHRoZQogICAqIGRpcmVjdG9yaWVzLCBmaWxlcywgYW5kIGxpbmtzLgogICAqLwogIExpc3Q8RmlsZVN5c3RlbUVudGl0eT4gbGlzdFN5bmMoCiAgICAgIHtib29sIHJlY3Vyc2l2ZTogZmFsc2UsIGJvb2wgZm9sbG93TGlua3M6IHRydWV9KTsKCiAgLyoqCiAgICogUmV0dXJucyBhIGh1bWFuIHJlYWRhYmxlIHN0cmluZyBmb3IgdGhpcyBEaXJlY3RvcnkgaW5zdGFuY2UuCiAgICovCiAgU3RyaW5nIHRvU3RyaW5nKCk7Cn0KgVwATk48AQ8BEQEEQANOSj8xA0dGSksDSTMDKwNLK0dQAxkDTEQ9IQMZAxUqPT0pJA0JAxcDSR1DN0VEGwMZAxUrMwNFLkEvIQ8JAxkDUTFQSD4lAxBHK0QXAxkDEC0pPg0JAwM0IgMWA2FJSAMbalEDUkwcBBo3BiYGEwEGIwVKRQVIIAYcIzcdIwYsBAEcMictBAEGKwVLBkkBBkAQBiE3HSEGLAQBBjwFSjM7Bg8BBkZJFAVFPxkFRkIPBURHRkcGIjcdIQ4GKQQBBisFRUdDBT5ENQY1AQY5BUVHQwVABiwBBiUFRilGMAYkNx0kBi8EAQZIR0QTBUMiBjEBBkRGSCIFNAYtASkBJQEGTDwFREU3BiwBBkEpBUREJwYoAQZPBTBHIQYaAQY+LwU+SiAFQig9MkoxPCEFOiwGITgBBj4vBT5KIAVCKD0yQTE8IQVEJAYjOAEGQgYVAgEWZGFydDppby9kaXJlY3RvcnkuZGFydENvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9pby9kaXJlY3RvcnlfaW1wbC5kYXJ0tqovLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5pbzsKCmNsYXNzIF9EaXJlY3RvcnkgZXh0ZW5kcyBGaWxlU3lzdGVtRW50aXR5IGltcGxlbWVudHMgRGlyZWN0b3J5IHsKICBTdHJpbmcgX3BhdGg7CiAgVWludDhMaXN0IF9yYXdQYXRoOwoKICBfRGlyZWN0b3J5KFN0cmluZyBwYXRoKSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChwYXRoLCAncGF0aCcpOwogICAgX3BhdGggPSBwYXRoOwogICAgX3Jhd1BhdGggPSBGaWxlU3lzdGVtRW50aXR5Ll90b1V0ZjhBcnJheShfcGF0aCk7CiAgfQoKICBfRGlyZWN0b3J5LmZyb21SYXdQYXRoKFVpbnQ4TGlzdCByYXdQYXRoKSB7CiAgICBpZiAocmF3UGF0aCA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdyYXdQYXRoIGNhbm5vdCBiZSBudWxsJyk7CiAgICB9CiAgICBfcmF3UGF0aCA9IEZpbGVTeXN0ZW1FbnRpdHkuX3RvTnVsbFRlcm1pbmF0ZWRVdGY4QXJyYXkocmF3UGF0aCk7CiAgICBfcGF0aCA9IEZpbGVTeXN0ZW1FbnRpdHkuX3RvU3RyaW5nRnJvbVV0ZjhBcnJheShyYXdQYXRoKTsKICB9CgogIFN0cmluZyBnZXQgcGF0aCA9PiBfcGF0aDsKCiAgZXh0ZXJuYWwgc3RhdGljIF9jdXJyZW50KF9OYW1lc3BhY2UgbmFtZXNwYWNlKTsKICBleHRlcm5hbCBzdGF0aWMgX3NldEN1cnJlbnQoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKTsKICBleHRlcm5hbCBzdGF0aWMgX2NyZWF0ZVRlbXAoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKTsKICBleHRlcm5hbCBzdGF0aWMgU3RyaW5nIF9zeXN0ZW1UZW1wKF9OYW1lc3BhY2UgbmFtZXNwYWNlKTsKICBleHRlcm5hbCBzdGF0aWMgX2V4aXN0cyhfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpOwogIGV4dGVybmFsIHN0YXRpYyBfY3JlYXRlKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCk7CiAgZXh0ZXJuYWwgc3RhdGljIF9kZWxldGVOYXRpdmUoCiAgICAgIF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCwgYm9vbCByZWN1cnNpdmUpOwogIGV4dGVybmFsIHN0YXRpYyBfcmVuYW1lKAogICAgICBfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgsIFN0cmluZyBuZXdQYXRoKTsKICBleHRlcm5hbCBzdGF0aWMgdm9pZCBfZmlsbFdpdGhEaXJlY3RvcnlMaXN0aW5nKAogICAgICBfTmFtZXNwYWNlIG5hbWVzcGFjZSwKICAgICAgTGlzdDxGaWxlU3lzdGVtRW50aXR5PiBsaXN0LAogICAgICBVaW50OExpc3QgcmF3UGF0aCwKICAgICAgYm9vbCByZWN1cnNpdmUsCiAgICAgIGJvb2wgZm9sbG93TGlua3MpOwoKICBzdGF0aWMgRGlyZWN0b3J5IGdldCBjdXJyZW50IHsKICAgIHZhciByZXN1bHQgPSBfY3VycmVudChfTmFtZXNwYWNlLl9uYW1lc3BhY2UpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKAogICAgICAgICAgIkdldHRpbmcgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBmYWlsZWQiLCAiIiwgcmVzdWx0KTsKICAgIH0KICAgIHJldHVybiBuZXcgX0RpcmVjdG9yeShyZXN1bHQpOwogIH0KCiAgc3RhdGljIHZvaWQgc2V0IGN1cnJlbnQocGF0aCkgewogICAgVWludDhMaXN0IF9yYXdQYXRoOwogICAgaWYgKHBhdGggaXMgX0RpcmVjdG9yeSkgewogICAgICAvLyBGb3Igb3VyIGludGVybmFsIERpcmVjdG9yeSBpbXBsZW1lbnRhdGlvbiwgZ28gYWhlYWQgYW5kIHVzZSB0aGUgcmF3CiAgICAgIC8vIHBhdGguCiAgICAgIF9yYXdQYXRoID0gcGF0aC5fcmF3UGF0aDsKICAgIH0gZWxzZSBpZiAocGF0aCBpcyBEaXJlY3RvcnkpIHsKICAgICAgLy8gRklYTUUoYmtvbnlpKTogcGFja2FnZTpmaWxlIHBhc3NlcyBpbiBpbnN0YW5jZXMgb2YgY2xhc3NlcyB3aGljaCBkbwogICAgICAvLyBub3QgaGF2ZSBfcGF0aCBkZWZpbmVkLCBzbyB3ZSB3aWxsIGZhbGxiYWNrIHRvIHVzaW5nIHRoZSBleGlzdGluZwogICAgICAvLyBwYXRoIFN0cmluZyBmb3Igbm93LgogICAgICBfcmF3UGF0aCA9IEZpbGVTeXN0ZW1FbnRpdHkuX3RvVXRmOEFycmF5KHBhdGgucGF0aCk7CiAgICB9IGVsc2UgaWYgKHBhdGggaXMgU3RyaW5nKSB7CiAgICAgIF9yYXdQYXRoID0gRmlsZVN5c3RlbUVudGl0eS5fdG9VdGY4QXJyYXkocGF0aCk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignJHtFcnJvci5zYWZlVG9TdHJpbmcocGF0aCl9IGlzIG5vdCBhIFN0cmluZyBvcicKICAgICAgICAgICcgRGlyZWN0b3J5Jyk7CiAgICB9CiAgICBpZiAoIV9FbWJlZGRlckNvbmZpZy5fbWF5Q2hkaXIpIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAiVGhpcyBlbWJlZGRlciBkaXNhbGxvd3Mgc2V0dGluZyBEaXJlY3RvcnkuY3VycmVudCIpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9zZXRDdXJyZW50KF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgpOwogICAgaWYgKHJlc3VsdCBpcyBBcmd1bWVudEVycm9yKSB0aHJvdyByZXN1bHQ7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oCiAgICAgICAgICAiU2V0dGluZyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGZhaWxlZCIsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgfQoKICBVcmkgZ2V0IHVyaSB7CiAgICByZXR1cm4gbmV3IFVyaS5kaXJlY3RvcnkocGF0aCk7CiAgfQoKICBGdXR1cmU8Ym9vbD4gZXhpc3RzKCkgewogICAgcmV0dXJuIF9GaWxlLl9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoCiAgICAgICAgX0lPU2VydmljZS5kaXJlY3RvcnlFeGlzdHMsIFtudWxsLCBfcmF3UGF0aF0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25PckVycm9yRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAiRXhpc3RzIGZhaWxlZCIpOwogICAgICB9CiAgICAgIHJldHVybiByZXNwb25zZSA9PSAxOwogICAgfSk7CiAgfQoKICBib29sIGV4aXN0c1N5bmMoKSB7CiAgICB2YXIgcmVzdWx0ID0gX2V4aXN0cyhfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigiRXhpc3RzIGZhaWxlZCIsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gKHJlc3VsdCA9PSAxKTsKICB9CgogIERpcmVjdG9yeSBnZXQgYWJzb2x1dGUgPT4gbmV3IERpcmVjdG9yeShfYWJzb2x1dGVQYXRoKTsKCiAgRnV0dXJlPERpcmVjdG9yeT4gY3JlYXRlKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KSB7CiAgICBpZiAocmVjdXJzaXZlKSB7CiAgICAgIHJldHVybiBleGlzdHMoKS50aGVuKChleGlzdHMpIHsKICAgICAgICBpZiAoZXhpc3RzKSByZXR1cm4gdGhpczsKICAgICAgICBpZiAocGF0aCAhPSBwYXJlbnQucGF0aCkgewogICAgICAgICAgcmV0dXJuIHBhcmVudC5jcmVhdGUocmVjdXJzaXZlOiB0cnVlKS50aGVuKChfKSB7CiAgICAgICAgICAgIHJldHVybiBjcmVhdGUoKTsKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gY3JlYXRlKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfRmlsZS5fZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKAogICAgICAgICAgX0lPU2VydmljZS5kaXJlY3RvcnlDcmVhdGUsIFtudWxsLCBfcmF3UGF0aF0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgICB0aHJvdyBfZXhjZXB0aW9uT3JFcnJvckZyb21SZXNwb25zZShyZXNwb25zZSwgIkNyZWF0aW9uIGZhaWxlZCIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfSk7CiAgICB9CiAgfQoKICB2b2lkIGNyZWF0ZVN5bmMoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pIHsKICAgIGlmIChyZWN1cnNpdmUpIHsKICAgICAgaWYgKGV4aXN0c1N5bmMoKSkgcmV0dXJuOwogICAgICBpZiAocGF0aCAhPSBwYXJlbnQucGF0aCkgewogICAgICAgIHBhcmVudC5jcmVhdGVTeW5jKHJlY3Vyc2l2ZTogdHJ1ZSk7CiAgICAgIH0KICAgIH0KICAgIHZhciByZXN1bHQgPSBfY3JlYXRlKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJDcmVhdGlvbiBmYWlsZWQiLCBwYXRoLCByZXN1bHQpOwogICAgfQogIH0KCiAgc3RhdGljIERpcmVjdG9yeSBnZXQgc3lzdGVtVGVtcCA9PgogICAgICBuZXcgRGlyZWN0b3J5KF9zeXN0ZW1UZW1wKF9OYW1lc3BhY2UuX25hbWVzcGFjZSkpOwoKICBGdXR1cmU8RGlyZWN0b3J5PiBjcmVhdGVUZW1wKFtTdHJpbmcgcHJlZml4XSkgewogICAgcHJlZml4ID8/PSAnJzsKICAgIGlmIChwYXRoID09ICcnKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJEaXJlY3RvcnkuY3JlYXRlVGVtcCBjYWxsZWQgd2l0aCBhbiBlbXB0eSBwYXRoLiAiCiAgICAgICAgICAiVG8gdXNlIHRoZSBzeXN0ZW0gdGVtcCBkaXJlY3RvcnksIHVzZSBEaXJlY3Rvcnkuc3lzdGVtVGVtcCIpOwogICAgfQogICAgU3RyaW5nIGZ1bGxQcmVmaXg7CiAgICAvLyBGSVhNRShia29ueWkpOiBoZXJlIHdlJ3JlIHVzaW5nIGBwYXRoYCBkaXJlY3RseSwgd2hpY2ggbWlnaHQgY2F1c2UKICAgIC8vIGlzc3VlcyBpZiBpdCBpcyBub3QgVVRGLTggZW5jb2RlZC4KICAgIGlmIChwYXRoLmVuZHNXaXRoKCcvJykgfHwgKFBsYXRmb3JtLmlzV2luZG93cyAmJiBwYXRoLmVuZHNXaXRoKCdcXCcpKSkgewogICAgICBmdWxsUHJlZml4ID0gIiRwYXRoJHByZWZpeCI7CiAgICB9IGVsc2UgewogICAgICBmdWxsUHJlZml4ID0gIiRwYXRoJHtQbGF0Zm9ybS5wYXRoU2VwYXJhdG9yfSRwcmVmaXgiOwogICAgfQogICAgcmV0dXJuIF9GaWxlLl9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoX0lPU2VydmljZS5kaXJlY3RvcnlDcmVhdGVUZW1wLAogICAgICAgIFtudWxsLCBGaWxlU3lzdGVtRW50aXR5Ll90b1V0ZjhBcnJheShmdWxsUHJlZml4KV0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25PckVycm9yRnJvbVJlc3BvbnNlKAogICAgICAgICAgICByZXNwb25zZSwgIkNyZWF0aW9uIG9mIHRlbXBvcmFyeSBkaXJlY3RvcnkgZmFpbGVkIik7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBEaXJlY3RvcnkocmVzcG9uc2UpOwogICAgfSk7CiAgfQoKICBEaXJlY3RvcnkgY3JlYXRlVGVtcFN5bmMoW1N0cmluZyBwcmVmaXhdKSB7CiAgICBwcmVmaXggPz89ICcnOwogICAgaWYgKHBhdGggPT0gJycpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkRpcmVjdG9yeS5jcmVhdGVUZW1wIGNhbGxlZCB3aXRoIGFuIGVtcHR5IHBhdGguICIKICAgICAgICAgICJUbyB1c2UgdGhlIHN5c3RlbSB0ZW1wIGRpcmVjdG9yeSwgdXNlIERpcmVjdG9yeS5zeXN0ZW1UZW1wIik7CiAgICB9CiAgICBTdHJpbmcgZnVsbFByZWZpeDsKICAgIC8vIEZJWE1FKGJrb255aSk6IGhlcmUgd2UncmUgdXNpbmcgYHBhdGhgIGRpcmVjdGx5LCB3aGljaCBtaWdodCBjYXVzZQogICAgLy8gaXNzdWVzIGlmIGl0IGlzIG5vdCBVVEYtOCBlbmNvZGVkLgogICAgaWYgKHBhdGguZW5kc1dpdGgoJy8nKSB8fCAoUGxhdGZvcm0uaXNXaW5kb3dzICYmIHBhdGguZW5kc1dpdGgoJ1xcJykpKSB7CiAgICAgIGZ1bGxQcmVmaXggPSAiJHBhdGgkcHJlZml4IjsKICAgIH0gZWxzZSB7CiAgICAgIGZ1bGxQcmVmaXggPSAiJHBhdGgke1BsYXRmb3JtLnBhdGhTZXBhcmF0b3J9JHByZWZpeCI7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX2NyZWF0ZVRlbXAoCiAgICAgICAgX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBGaWxlU3lzdGVtRW50aXR5Ll90b1V0ZjhBcnJheShmdWxsUHJlZml4KSk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oCiAgICAgICAgICAiQ3JlYXRpb24gb2YgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmYWlsZWQiLCBmdWxsUHJlZml4LCByZXN1bHQpOwogICAgfQogICAgcmV0dXJuIG5ldyBEaXJlY3RvcnkocmVzdWx0KTsKICB9CgogIEZ1dHVyZTxEaXJlY3Rvcnk+IF9kZWxldGUoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pIHsKICAgIHJldHVybiBfRmlsZS5fZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKAogICAgICAgICAgICBfSU9TZXJ2aWNlLmRpcmVjdG9yeURlbGV0ZSwgW251bGwsIF9yYXdQYXRoLCByZWN1cnNpdmVdKQogICAgICAgIC50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uT3JFcnJvckZyb21SZXNwb25zZShyZXNwb25zZSwgIkRlbGV0aW9uIGZhaWxlZCIpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgfQoKICB2b2lkIF9kZWxldGVTeW5jKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KSB7CiAgICB2YXIgcmVzdWx0ID0gX2RlbGV0ZU5hdGl2ZShfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoLCByZWN1cnNpdmUpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJEZWxldGlvbiBmYWlsZWQiLCBwYXRoLCByZXN1bHQpOwogICAgfQogIH0KCiAgRnV0dXJlPERpcmVjdG9yeT4gcmVuYW1lKFN0cmluZyBuZXdQYXRoKSB7CiAgICByZXR1cm4gX0ZpbGUuX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICBfSU9TZXJ2aWNlLmRpcmVjdG9yeVJlbmFtZSwgW251bGwsIF9yYXdQYXRoLCBuZXdQYXRoXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbk9yRXJyb3JGcm9tUmVzcG9uc2UocmVzcG9uc2UsICJSZW5hbWUgZmFpbGVkIik7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBEaXJlY3RvcnkobmV3UGF0aCk7CiAgICB9KTsKICB9CgogIERpcmVjdG9yeSByZW5hbWVTeW5jKFN0cmluZyBuZXdQYXRoKSB7CiAgICBpZiAobmV3UGF0aCBpcyEgU3RyaW5nKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX3JlbmFtZShfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoLCBuZXdQYXRoKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigiUmVuYW1lIGZhaWxlZCIsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gbmV3IERpcmVjdG9yeShuZXdQYXRoKTsKICB9CgogIFN0cmVhbTxGaWxlU3lzdGVtRW50aXR5PiBsaXN0KAogICAgICB7Ym9vbCByZWN1cnNpdmU6IGZhbHNlLCBib29sIGZvbGxvd0xpbmtzOiB0cnVlfSkgewogICAgcmV0dXJuIG5ldyBfQXN5bmNEaXJlY3RvcnlMaXN0ZXIoCiAgICAgICAgICAgIC8vIEZJWE1FKGJrb255aSk6IGhlcmUgd2UncmUgdXNpbmcgYHBhdGhgIGRpcmVjdGx5LCB3aGljaCBtaWdodCBjYXVzZSBpc3N1ZXMKICAgICAgICAgICAgLy8gaWYgaXQgaXMgbm90IFVURi04IGVuY29kZWQuCiAgICAgICAgICAgIEZpbGVTeXN0ZW1FbnRpdHkuX3RvVXRmOEFycmF5KAogICAgICAgICAgICAgICAgRmlsZVN5c3RlbUVudGl0eS5fZW5zdXJlVHJhaWxpbmdQYXRoU2VwYXJhdG9ycyhwYXRoKSksCiAgICAgICAgICAgIHJlY3Vyc2l2ZSwKICAgICAgICAgICAgZm9sbG93TGlua3MpCiAgICAgICAgLnN0cmVhbTsKICB9CgogIExpc3Q8RmlsZVN5c3RlbUVudGl0eT4gbGlzdFN5bmMoCiAgICAgIHtib29sIHJlY3Vyc2l2ZTogZmFsc2UsIGJvb2wgZm9sbG93TGlua3M6IHRydWV9KSB7CiAgICBpZiAocmVjdXJzaXZlIGlzISBib29sIHx8IGZvbGxvd0xpbmtzIGlzISBib29sKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gPEZpbGVTeXN0ZW1FbnRpdHk+W107CiAgICBfZmlsbFdpdGhEaXJlY3RvcnlMaXN0aW5nKAogICAgICAgIF9OYW1lc3BhY2UuX25hbWVzcGFjZSwKICAgICAgICByZXN1bHQsCiAgICAgICAgLy8gRklYTUUoYmtvbnlpKTogaGVyZSB3ZSdyZSB1c2luZyBgcGF0aGAgZGlyZWN0bHksIHdoaWNoIG1pZ2h0IGNhdXNlIGlzc3VlcwogICAgICAgIC8vIGlmIGl0IGlzIG5vdCBVVEYtOCBlbmNvZGVkLgogICAgICAgIEZpbGVTeXN0ZW1FbnRpdHkuX3RvVXRmOEFycmF5KAogICAgICAgICAgICBGaWxlU3lzdGVtRW50aXR5Ll9lbnN1cmVUcmFpbGluZ1BhdGhTZXBhcmF0b3JzKHBhdGgpKSwKICAgICAgICByZWN1cnNpdmUsCiAgICAgICAgZm9sbG93TGlua3MpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJEaXJlY3Rvcnk6ICckcGF0aCciOwoKICBib29sIF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpID0+CiAgICAgIHJlc3BvbnNlIGlzIExpc3QgJiYgcmVzcG9uc2VbMF0gIT0gX3N1Y2Nlc3NSZXNwb25zZTsKCiAgX2V4Y2VwdGlvbk9yRXJyb3JGcm9tUmVzcG9uc2UocmVzcG9uc2UsIFN0cmluZyBtZXNzYWdlKSB7CiAgICBhc3NlcnQoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpOwogICAgc3dpdGNoIChyZXNwb25zZVtfZXJyb3JSZXNwb25zZUVycm9yVHlwZV0pIHsKICAgICAgY2FzZSBfaWxsZWdhbEFyZ3VtZW50UmVzcG9uc2U6CiAgICAgICAgcmV0dXJuIG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICAgIGNhc2UgX29zRXJyb3JSZXNwb25zZToKICAgICAgICB2YXIgZXJyID0gbmV3IE9TRXJyb3IocmVzcG9uc2VbX29zRXJyb3JSZXNwb25zZU1lc3NhZ2VdLAogICAgICAgICAgICByZXNwb25zZVtfb3NFcnJvclJlc3BvbnNlRXJyb3JDb2RlXSk7CiAgICAgICAgcmV0dXJuIG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKG1lc3NhZ2UsIHBhdGgsIGVycik7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIG5ldyBFeGNlcHRpb24oIlVua25vd24gZXJyb3IiKTsKICAgIH0KICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9Bc3luY0RpcmVjdG9yeUxpc3Rlck9wcyB7CiAgZXh0ZXJuYWwgZmFjdG9yeSBfQXN5bmNEaXJlY3RvcnlMaXN0ZXJPcHMoaW50IHBvaW50ZXIpOwoKICBpbnQgZ2V0UG9pbnRlcigpOwp9CgpjbGFzcyBfQXN5bmNEaXJlY3RvcnlMaXN0ZXIgewogIHN0YXRpYyBjb25zdCBpbnQgbGlzdEZpbGUgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgbGlzdERpcmVjdG9yeSA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBsaXN0TGluayA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBsaXN0RXJyb3IgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgbGlzdERvbmUgPSA0OwoKICBzdGF0aWMgY29uc3QgaW50IHJlc3BvbnNlVHlwZSA9IDA7CiAgc3RhdGljIGNvbnN0IGludCByZXNwb25zZVBhdGggPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgcmVzcG9uc2VDb21wbGV0ZSA9IDE7CiAgc3RhdGljIGNvbnN0IGludCByZXNwb25zZUVycm9yID0gMjsKCiAgZmluYWwgVWludDhMaXN0IHJhd1BhdGg7CiAgZmluYWwgYm9vbCByZWN1cnNpdmU7CiAgZmluYWwgYm9vbCBmb2xsb3dMaW5rczsKCiAgU3RyZWFtQ29udHJvbGxlcjxGaWxlU3lzdGVtRW50aXR5PiBjb250cm9sbGVyOwogIGJvb2wgY2FuY2VsZWQgPSBmYWxzZTsKICBib29sIG5leHRSdW5uaW5nID0gZmFsc2U7CiAgYm9vbCBjbG9zZWQgPSBmYWxzZTsKICBfQXN5bmNEaXJlY3RvcnlMaXN0ZXJPcHMgX29wczsKICBDb21wbGV0ZXIgY2xvc2VDb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyKCk7CgogIF9Bc3luY0RpcmVjdG9yeUxpc3Rlcih0aGlzLnJhd1BhdGgsIHRoaXMucmVjdXJzaXZlLCB0aGlzLmZvbGxvd0xpbmtzKSB7CiAgICBjb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8RmlsZVN5c3RlbUVudGl0eT4oCiAgICAgICAgb25MaXN0ZW46IG9uTGlzdGVuLCBvblJlc3VtZTogb25SZXN1bWUsIG9uQ2FuY2VsOiBvbkNhbmNlbCwgc3luYzogdHJ1ZSk7CiAgfQoKICAvLyBXQVJOSU5HOgogIC8vIENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQgb24gdGhlIG5hdGl2ZQogIC8vIG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIGFzeW5jIGRpcmVjdG9yeSBsaXN0ZXIgb3BlcmF0aW9ucy4gSXQgc2hvdWxkCiAgLy8gb25seSBiZSBjYWxsZWQgdG8gcGFzcyB0aGUgcG9pbnRlciB0byB0aGUgSU8gU2VydmljZSwgd2hpY2ggd2lsbCBkZWNyZW1lbnQKICAvLyB0aGUgcmVmZXJlbmNlIGNvdW50IHdoZW4gaXQgaXMgZmluaXNoZWQgd2l0aCBpdC4KICBpbnQgX3BvaW50ZXIoKSB7CiAgICByZXR1cm4gKF9vcHMgPT0gbnVsbCkgPyBudWxsIDogX29wcy5nZXRQb2ludGVyKCk7CiAgfQoKICBTdHJlYW08RmlsZVN5c3RlbUVudGl0eT4gZ2V0IHN0cmVhbSA9PiBjb250cm9sbGVyLnN0cmVhbTsKCiAgdm9pZCBvbkxpc3RlbigpIHsKICAgIF9GaWxlLl9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoX0lPU2VydmljZS5kaXJlY3RvcnlMaXN0U3RhcnQsCiAgICAgICAgW251bGwsIHJhd1BhdGgsIHJlY3Vyc2l2ZSwgZm9sbG93TGlua3NdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAocmVzcG9uc2UgaXMgaW50KSB7CiAgICAgICAgX29wcyA9IG5ldyBfQXN5bmNEaXJlY3RvcnlMaXN0ZXJPcHMocmVzcG9uc2UpOwogICAgICAgIG5leHQoKTsKICAgICAgfSBlbHNlIGlmIChyZXNwb25zZSBpcyBFcnJvcikgewogICAgICAgIGNvbnRyb2xsZXIuYWRkRXJyb3IocmVzcG9uc2UsIHJlc3BvbnNlLnN0YWNrVHJhY2UpOwogICAgICAgIGNsb3NlKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZXJyb3IocmVzcG9uc2UpOwogICAgICAgIGNsb3NlKCk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgdm9pZCBvblJlc3VtZSgpIHsKICAgIGlmICghbmV4dFJ1bm5pbmcpIHsKICAgICAgbmV4dCgpOwogICAgfQogIH0KCiAgRnV0dXJlIG9uQ2FuY2VsKCkgewogICAgY2FuY2VsZWQgPSB0cnVlOwogICAgLy8gSWYgd2UgYXJlIGFjdGl2ZSwgYnV0IG5vdCByZXF1ZXN0aW5nLCBjbG9zZS4KICAgIGlmICghbmV4dFJ1bm5pbmcpIHsKICAgICAgY2xvc2UoKTsKICAgIH0KCiAgICByZXR1cm4gY2xvc2VDb21wbGV0ZXIuZnV0dXJlOwogIH0KCiAgdm9pZCBuZXh0KCkgewogICAgaWYgKGNhbmNlbGVkKSB7CiAgICAgIGNsb3NlKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChjb250cm9sbGVyLmlzUGF1c2VkIHx8IG5leHRSdW5uaW5nKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHZhciBwb2ludGVyID0gX3BvaW50ZXIoKTsKICAgIGlmIChwb2ludGVyID09IG51bGwpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgbmV4dFJ1bm5pbmcgPSB0cnVlOwogICAgX0lPU2VydmljZS5fZGlzcGF0Y2goX0lPU2VydmljZS5kaXJlY3RvcnlMaXN0TmV4dCwgW3BvaW50ZXJdKQogICAgICAgIC50aGVuKChyZXN1bHQpIHsKICAgICAgbmV4dFJ1bm5pbmcgPSBmYWxzZTsKICAgICAgaWYgKHJlc3VsdCBpcyBMaXN0KSB7CiAgICAgICAgbmV4dCgpOwogICAgICAgIGFzc2VydChyZXN1bHQubGVuZ3RoICUgMiA9PSAwKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgYXNzZXJ0KGkgJSAyID09IDApOwogICAgICAgICAgc3dpdGNoIChyZXN1bHRbaSsrXSkgewogICAgICAgICAgICBjYXNlIGxpc3RGaWxlOgogICAgICAgICAgICAgIGNvbnRyb2xsZXIuYWRkKG5ldyBGaWxlLmZyb21SYXdQYXRoKHJlc3VsdFtpXSkpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIGxpc3REaXJlY3Rvcnk6CiAgICAgICAgICAgICAgY29udHJvbGxlci5hZGQobmV3IERpcmVjdG9yeS5mcm9tUmF3UGF0aChyZXN1bHRbaV0pKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBsaXN0TGluazoKICAgICAgICAgICAgICBjb250cm9sbGVyLmFkZChuZXcgTGluay5mcm9tUmF3UGF0aChyZXN1bHRbaV0pKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBsaXN0RXJyb3I6CiAgICAgICAgICAgICAgZXJyb3IocmVzdWx0W2ldKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBsaXN0RG9uZToKICAgICAgICAgICAgICBjYW5jZWxlZCA9IHRydWU7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBjb250cm9sbGVyLmFkZEVycm9yKG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJJbnRlcm5hbCBlcnJvciIpKTsKICAgICAgfQogICAgfSk7CiAgfQoKICB2b2lkIF9jbGVhbnVwKCkgewogICAgY29udHJvbGxlci5jbG9zZSgpOwogICAgY2xvc2VDb21wbGV0ZXIuY29tcGxldGUoKTsKICAgIF9vcHMgPSBudWxsOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIGlmIChjbG9zZWQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKG5leHRSdW5uaW5nKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNsb3NlZCA9IHRydWU7CgogICAgdmFyIHBvaW50ZXIgPSBfcG9pbnRlcigpOwogICAgaWYgKHBvaW50ZXIgPT0gbnVsbCkgewogICAgICBfY2xlYW51cCgpOwogICAgfSBlbHNlIHsKICAgICAgX0lPU2VydmljZS5fZGlzcGF0Y2goX0lPU2VydmljZS5kaXJlY3RvcnlMaXN0U3RvcCwgW3BvaW50ZXJdKQogICAgICAgICAgLndoZW5Db21wbGV0ZShfY2xlYW51cCk7CiAgICB9CiAgfQoKICB2b2lkIGVycm9yKG1lc3NhZ2UpIHsKICAgIHZhciBlcnJvclR5cGUgPSBtZXNzYWdlW3Jlc3BvbnNlRXJyb3JdW19lcnJvclJlc3BvbnNlRXJyb3JUeXBlXTsKICAgIGlmIChlcnJvclR5cGUgPT0gX2lsbGVnYWxBcmd1bWVudFJlc3BvbnNlKSB7CiAgICAgIGNvbnRyb2xsZXIuYWRkRXJyb3IobmV3IEFyZ3VtZW50RXJyb3IoKSk7CiAgICB9IGVsc2UgaWYgKGVycm9yVHlwZSA9PSBfb3NFcnJvclJlc3BvbnNlKSB7CiAgICAgIHZhciByZXNwb25zZUVycm9ySW5mbyA9IG1lc3NhZ2VbcmVzcG9uc2VFcnJvcl07CiAgICAgIHZhciBlcnIgPSBuZXcgT1NFcnJvcihyZXNwb25zZUVycm9ySW5mb1tfb3NFcnJvclJlc3BvbnNlTWVzc2FnZV0sCiAgICAgICAgICByZXNwb25zZUVycm9ySW5mb1tfb3NFcnJvclJlc3BvbnNlRXJyb3JDb2RlXSk7CiAgICAgIHZhciBlcnJvclBhdGggPSBtZXNzYWdlW3Jlc3BvbnNlUGF0aF07CiAgICAgIGlmIChlcnJvclBhdGggPT0gbnVsbCkgewogICAgICAgIGVycm9yUGF0aCA9IHV0ZjguZGVjb2RlKHJhd1BhdGgsIGFsbG93TWFsZm9ybWVkOiB0cnVlKTsKICAgICAgfSBlbHNlIGlmIChlcnJvclBhdGggaXMgVWludDhMaXN0KSB7CiAgICAgICAgZXJyb3JQYXRoID0gdXRmOC5kZWNvZGUobWVzc2FnZVtyZXNwb25zZVBhdGhdLCBhbGxvd01hbGZvcm1lZDogdHJ1ZSk7CiAgICAgIH0KICAgICAgY29udHJvbGxlci5hZGRFcnJvcigKICAgICAgICAgIG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJEaXJlY3RvcnkgbGlzdGluZyBmYWlsZWQiLCBlcnJvclBhdGgsIGVycikpOwogICAgfSBlbHNlIHsKICAgICAgY29udHJvbGxlci5hZGRFcnJvcihuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigiSW50ZXJuYWwgZXJyb3IiKSk7CiAgICB9CiAgfQp9CoHDAE5OPAEPAREBQRAWARwuEjUEAS4bOQZFPgQBHAEySEg8REQhQBtAMhwjGRYZASEyHSVDBiMEASIYHk0PICRNSx47ITYNTxkGJiJABj8vHSVFBgQBECQEARopSChICBwIBAEWOx1EBhoEAToBNhUmISM7HQ4RGwoKDStKKkwKFQoGBAEtFSAhLAgGOx1GBgQBJTkBMhMWUUkGF0oqTSMNPAZITSgtQQgmCAQBLhMWUUkGF0oqTSMNPAYeSx0lSQYiBAE3KUUbKEoIEwgEAS5MHUYGBAEtKVEoSAglCAQBKR4hBkQdRAYjBAEhOSZZKytHFxkRBAEjOTYhBicfHxBVJydDExYTBAEtASU7ATwoMSUkHUEyPA8vBgQCASo6ARQCAR4hJiEiIQElJSkmARsYGgExGRwXIS4BSjlRBAEOS01QNhM2BAE8ARRAQx03ECY8EQ8ZEQgIBAEUGA4GBAEWFTQYDwYBIgQBEBQPDgYuDgYeGw4GGEIZGxwQKDIeIRs/FSBEFRs/FRwgFRsfFgwKD0gICAQBFBgfEQQBERIOBhcOBhMBHhsSDUQjBgQBGEUxMDA2SDktH0ArTggbUA1GBgQCARtkYXJ0OmlvL2RpcmVjdG9yeV9pbXBsLmRhcnREb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvaW8vZW1iZWRkZXJfY29uZmlnLmRhcnSFOC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmlvOwoKLy8vIEVtYmVkZGVyLXNwZWNpZmljLCBmaW5lLWdyYWluZWQgZGFydDppbyBjb25maWd1cmF0aW9uLgovLy8KLy8vIFRoaXMgY2xhc3MgY29udGFpbnMgcGVyLUlzb2xhdGUgZmxhZ3MgdGhhdCBhbiBlbWJlZGRlciBjYW4gc2V0IHRvIHB1dAovLy8gZmluZS1ncmFpbmVkIGxpbWl0YXRpb25zIG9uIHdoYXQgcHJvY2Vzcy12aXNpYmxlIG9wZXJhdGlvbnMgSXNvbGF0ZXMgYXJlCi8vLyBwZXJtaXR0ZWQgdG8gdXNlIChlLmcuIGV4aXQoKSkuIEJ5IGRlZmF1bHQsIHRoZSB3aG9sZSBkYXJ0OmlvIEFQSSBpcwovLy8gZW5hYmxlZC4gV2hlbiBhIGRpc2FsbG93ZWQgb3BlcmF0aW9uIGlzIGF0dGVtcHRlZCwgYW4gYFVuc3VwcG9ydGVkRXJyb3JgIGlzCi8vLyB0aHJvd24uCkBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKYWJzdHJhY3QgY2xhc3MgX0VtYmVkZGVyQ29uZmlnIHsKICAvLy8gVGhlIElzb2xhdGUgbWF5IHNldCBEaXJlY3RvcnkuY3VycmVudC4KICBzdGF0aWMgYm9vbCBfbWF5Q2hkaXIgPSB0cnVlOwoKICAvLy8gVGhlIElzb2xhdGUgbWF5IGNhbGwgZXhpdCgpLgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBzdGF0aWMgYm9vbCBfbWF5RXhpdCA9IHRydWU7CgogIC8vIFRoZSBJc29sYXRlIG1heSBzZXQgU3RkaW4uZWNob01vZGUuCiAgQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQogIHN0YXRpYyBib29sIF9tYXlTZXRFY2hvTW9kZSA9IHRydWU7CgogIC8vIFRoZSBJc29sYXRlIG1heSBzZXQgU3RkaW4ubGluZU1vZGUuCiAgQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQogIHN0YXRpYyBib29sIF9tYXlTZXRMaW5lTW9kZSA9IHRydWU7CgogIC8vLyBUaGUgSXNvbGF0ZSBtYXkgY2FsbCBzbGVlcCgpLgogIEBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKICBzdGF0aWMgYm9vbCBfbWF5U2xlZXAgPSB0cnVlOwoKICAvLyBUT0RPKHpyYSk6IENvbnNpZGVyIGFkZGluZzoKICAvLyAtIGFuIG9wdGlvbiB0byBkaXNhbGxvdyBtb2RpZnlpbmcgU2VjdXJpdHlDb250ZXh0LmRlZmF1bHRDb250ZXh0CiAgLy8gLSBhbiBvcHRpb24gdG8gZGlzYWxsb3cgY2xvc2luZyBzdGRvdXQgYW5kIHN0ZGVyci4KfQoqAE5OPAEPAREBOwRKTUlQDBohLSABIxwfASkcJgEpHCYBJBwgASFGOAIBHGRhcnQ6aW8vZW1iZWRkZXJfY29uZmlnLmRhcnRBb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvaW8vZXZlbnRoYW5kbGVyLmRhcnSBYS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmlvOwoKY2xhc3MgX0V2ZW50SGFuZGxlciB7CiAgZXh0ZXJuYWwgc3RhdGljIHZvaWQgX3NlbmREYXRhKE9iamVjdCBzZW5kZXIsIFNlbmRQb3J0IHNlbmRQb3J0LCBpbnQgZGF0YSk7Cn0KDQBOTjwBDwERARZOAgEZZGFydDppby9ldmVudGhhbmRsZXIuZGFydFVvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vYmluL2V2ZW50aGFuZGxlcl9wYXRjaC5kYXJ0gfYvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vIHBhcnQgb2YgImNvbW1vbl9wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBfRXZlbnRIYW5kbGVyIHsKICBAcGF0Y2gKICBzdGF0aWMgdm9pZCBfc2VuZERhdGEoT2JqZWN0IHNlbmRlciwgU2VuZFBvcnQgc2VuZFBvcnQsIGludCBkYXRhKQogICAgICBuYXRpdmUgIkV2ZW50SGFuZGxlcl9TZW5kRGF0YSI7CgogIHN0YXRpYyBpbnQgX3RpbWVyTWlsbGlzZWNvbmRDbG9jaygpCiAgICAgIG5hdGl2ZSAiRXZlbnRIYW5kbGVyX1RpbWVyTWlsbGlzZWNvbmRDbG9jayI7Cn0KEwBOTjwBDwEgAQcWCUQmASYzAgElZGFydDppby1wYXRjaC9ldmVudGhhbmRsZXJfcGF0Y2guZGFydDlvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9pby9maWxlLmRhcnTAAIVALy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuaW87CgovKioKICogVGhlIG1vZGVzIGluIHdoaWNoIGEgRmlsZSBjYW4gYmUgb3BlbmVkLgogKi8KY2xhc3MgRmlsZU1vZGUgewogIC8vLyBUaGUgbW9kZSBmb3Igb3BlbmluZyBhIGZpbGUgb25seSBmb3IgcmVhZGluZy4KICBzdGF0aWMgY29uc3QgcmVhZCA9IGNvbnN0IEZpbGVNb2RlLl9pbnRlcm5hbCgwKTsKICBARGVwcmVjYXRlZCgiVXNlIHJlYWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFJFQUQgPSByZWFkOwoKICAvLy8gTW9kZSBmb3Igb3BlbmluZyBhIGZpbGUgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIFRoZSBmaWxlIGlzCiAgLy8vIG92ZXJ3cml0dGVuIGlmIGl0IGFscmVhZHkgZXhpc3RzLiBUaGUgZmlsZSBpcyBjcmVhdGVkIGlmIGl0IGRvZXMgbm90CiAgLy8vIGFscmVhZHkgZXhpc3QuCiAgc3RhdGljIGNvbnN0IHdyaXRlID0gY29uc3QgRmlsZU1vZGUuX2ludGVybmFsKDEpOwogIEBEZXByZWNhdGVkKCJVc2Ugd3JpdGUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFdSSVRFID0gd3JpdGU7CgogIC8vLyBNb2RlIGZvciBvcGVuaW5nIGEgZmlsZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyB0byB0aGUKICAvLy8gZW5kIG9mIGl0LiBUaGUgZmlsZSBpcyBjcmVhdGVkIGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCiAgc3RhdGljIGNvbnN0IGFwcGVuZCA9IGNvbnN0IEZpbGVNb2RlLl9pbnRlcm5hbCgyKTsKICBARGVwcmVjYXRlZCgiVXNlIGFwcGVuZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQVBQRU5EID0gYXBwZW5kOwoKICAvLy8gTW9kZSBmb3Igb3BlbmluZyBhIGZpbGUgZm9yIHdyaXRpbmcgKm9ubHkqLiBUaGUgZmlsZSBpcwogIC8vLyBvdmVyd3JpdHRlbiBpZiBpdCBhbHJlYWR5IGV4aXN0cy4gVGhlIGZpbGUgaXMgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdAogIC8vLyBhbHJlYWR5IGV4aXN0LgogIHN0YXRpYyBjb25zdCB3cml0ZU9ubHkgPSBjb25zdCBGaWxlTW9kZS5faW50ZXJuYWwoMyk7CiAgQERlcHJlY2F0ZWQoIlVzZSB3cml0ZU9ubHkgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFdSSVRFX09OTFkgPSB3cml0ZU9ubHk7CgogIC8vLyBNb2RlIGZvciBvcGVuaW5nIGEgZmlsZSBmb3Igd3JpdGluZyAqb25seSogdG8gdGhlCiAgLy8vIGVuZCBvZiBpdC4gVGhlIGZpbGUgaXMgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgogIHN0YXRpYyBjb25zdCB3cml0ZU9ubHlBcHBlbmQgPSBjb25zdCBGaWxlTW9kZS5faW50ZXJuYWwoNCk7CiAgQERlcHJlY2F0ZWQoIlVzZSB3cml0ZU9ubHlBcHBlbmQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFdSSVRFX09OTFlfQVBQRU5EID0gd3JpdGVPbmx5QXBwZW5kOwoKICBmaW5hbCBpbnQgX21vZGU7CgogIGNvbnN0IEZpbGVNb2RlLl9pbnRlcm5hbCh0aGlzLl9tb2RlKTsKfQoKLy8vIFRoZSBtb2RlIGZvciBvcGVuaW5nIGEgZmlsZSBvbmx5IGZvciByZWFkaW5nLgpARGVwcmVjYXRlZCgiVXNlIEZpbGVNb2RlLnJlYWQgaW5zdGVhZCIpCmNvbnN0IFJFQUQgPSBGaWxlTW9kZS5yZWFkOwoKLy8vIFRoZSBtb2RlIGZvciBvcGVuaW5nIGEgZmlsZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4gVGhlIGZpbGUgaXMKLy8vIG92ZXJ3cml0dGVuIGlmIGl0IGFscmVhZHkgZXhpc3RzLiBUaGUgZmlsZSBpcyBjcmVhdGVkIGlmIGl0IGRvZXMgbm90Ci8vLyBhbHJlYWR5IGV4aXN0LgpARGVwcmVjYXRlZCgiVXNlIEZpbGVNb2RlLndyaXRlIGluc3RlYWQiKQpjb25zdCBXUklURSA9IEZpbGVNb2RlLndyaXRlOwoKLy8vIFRoZSBtb2RlIGZvciBvcGVuaW5nIGEgZmlsZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyB0byB0aGUKLy8vIGVuZCBvZiBpdC4gVGhlIGZpbGUgaXMgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgpARGVwcmVjYXRlZCgiVXNlIEZpbGVNb2RlLmFwcGVuZCBpbnN0ZWFkIikKY29uc3QgQVBQRU5EID0gRmlsZU1vZGUuYXBwZW5kOwoKLy8vIE1vZGUgZm9yIG9wZW5pbmcgYSBmaWxlIGZvciB3cml0aW5nICpvbmx5Ki4gVGhlIGZpbGUgaXMKLy8vIG92ZXJ3cml0dGVuIGlmIGl0IGFscmVhZHkgZXhpc3RzLiBUaGUgZmlsZSBpcyBjcmVhdGVkIGlmIGl0IGRvZXMgbm90Ci8vLyBhbHJlYWR5IGV4aXN0LgpARGVwcmVjYXRlZCgiVXNlIEZpbGVNb2RlLndyaXRlT25seSBpbnN0ZWFkIikKY29uc3QgV1JJVEVfT05MWSA9IEZpbGVNb2RlLndyaXRlT25seTsKCi8vLyBNb2RlIGZvciBvcGVuaW5nIGEgZmlsZSBmb3Igd3JpdGluZyAqb25seSogdG8gdGhlCi8vLyBlbmQgb2YgaXQuIFRoZSBmaWxlIGlzIGNyZWF0ZWQgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4KQERlcHJlY2F0ZWQoIlVzZSBGaWxlTW9kZS53cml0ZU9ubHlBcHBlbmQgaW5zdGVhZCIpCmNvbnN0IFdSSVRFX09OTFlfQVBQRU5EID0gRmlsZU1vZGUud3JpdGVPbmx5QXBwZW5kOwoKLy8vIFR5cGUgb2YgbG9jayB3aGVuIHJlcXVlc3RpbmcgYSBsb2NrIG9uIGEgZmlsZS4KY2xhc3MgRmlsZUxvY2sgewogIC8vLyBTaGFyZWQgZmlsZSBsb2NrLgogIHN0YXRpYyBjb25zdCBzaGFyZWQgPSBjb25zdCBGaWxlTG9jay5faW50ZXJuYWwoMSk7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaGFyZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFNIQVJFRCA9IHNoYXJlZDsKCiAgLy8vIEV4Y2x1c2l2ZSBmaWxlIGxvY2suCiAgc3RhdGljIGNvbnN0IGV4Y2x1c2l2ZSA9IGNvbnN0IEZpbGVMb2NrLl9pbnRlcm5hbCgyKTsKICBARGVwcmVjYXRlZCgiVXNlIGV4Y2x1c2l2ZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgRVhDTFVTSVZFID0gZXhjbHVzaXZlOwoKICAvLy8gQmxvY2tpbmcgc2hhcmVkIGZpbGUgbG9jay4KICBzdGF0aWMgY29uc3QgYmxvY2tpbmdTaGFyZWQgPSBjb25zdCBGaWxlTG9jay5faW50ZXJuYWwoMyk7CiAgQERlcHJlY2F0ZWQoIlVzZSBibG9ja2luZ1NoYXJlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQkxPQ0tJTkdfU0hBUkVEID0gYmxvY2tpbmdTaGFyZWQ7CgogIC8vLyBCbG9ja2luZyBleGNsdXNpdmUgZmlsZSBsb2NrLgogIHN0YXRpYyBjb25zdCBibG9ja2luZ0V4Y2x1c2l2ZSA9IGNvbnN0IEZpbGVMb2NrLl9pbnRlcm5hbCg0KTsKICBARGVwcmVjYXRlZCgiVXNlIGJsb2NraW5nRXhjbHVzaXZlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBCTE9DS0lOR19FWENMVVNJVkUgPSBibG9ja2luZ0V4Y2x1c2l2ZTsKCiAgZmluYWwgaW50IF90eXBlOwoKICBjb25zdCBGaWxlTG9jay5faW50ZXJuYWwodGhpcy5fdHlwZSk7Cn0KCi8qKgogKiBBIHJlZmVyZW5jZSB0byBhIGZpbGUgb24gdGhlIGZpbGUgc3lzdGVtLgogKgogKiBBIEZpbGUgaW5zdGFuY2UgaXMgYW4gb2JqZWN0IHRoYXQgaG9sZHMgYSBbcGF0aF0gb24gd2hpY2ggb3BlcmF0aW9ucyBjYW4KICogYmUgcGVyZm9ybWVkLgogKiBZb3UgY2FuIGdldCB0aGUgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgZmlsZSB1c2luZyB0aGUgZ2V0dGVyIFtwYXJlbnRdLAogKiBhIHByb3BlcnR5IGluaGVyaXRlZCBmcm9tIFtGaWxlU3lzdGVtRW50aXR5XS4KICoKICogQ3JlYXRlIGEgbmV3IEZpbGUgb2JqZWN0IHdpdGggYSBwYXRobmFtZSB0byBhY2Nlc3MgdGhlIHNwZWNpZmllZCBmaWxlIG9uIHRoZQogKiBmaWxlIHN5c3RlbSBmcm9tIHlvdXIgcHJvZ3JhbS4KICoKICogICAgIHZhciBteUZpbGUgPSBuZXcgRmlsZSgnZmlsZS50eHQnKTsKICoKICogVGhlIEZpbGUgY2xhc3MgY29udGFpbnMgbWV0aG9kcyBmb3IgbWFuaXB1bGF0aW5nIGZpbGVzIGFuZCB0aGVpciBjb250ZW50cy4KICogVXNpbmcgbWV0aG9kcyBpbiB0aGlzIGNsYXNzLCB5b3UgY2FuIG9wZW4gYW5kIGNsb3NlIGZpbGVzLCByZWFkIHRvIGFuZCB3cml0ZQogKiBmcm9tIHRoZW0sIGNyZWF0ZSBhbmQgZGVsZXRlIHRoZW0sIGFuZCBjaGVjayBmb3IgdGhlaXIgZXhpc3RlbmNlLgogKgogKiBXaGVuIHJlYWRpbmcgb3Igd3JpdGluZyBhIGZpbGUsIHlvdSBjYW4gdXNlIHN0cmVhbXMgKHdpdGggW29wZW5SZWFkXSksCiAqIHJhbmRvbSBhY2Nlc3Mgb3BlcmF0aW9ucyAod2l0aCBbb3Blbl0pLAogKiBvciBjb252ZW5pZW5jZSBtZXRob2RzIHN1Y2ggYXMgW3JlYWRBc1N0cmluZ10sCiAqCiAqIE1vc3QgbWV0aG9kcyBpbiB0aGlzIGNsYXNzIG9jY3VyIGluIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgcGFpcnMsCiAqIGZvciBleGFtcGxlLCBbcmVhZEFzU3RyaW5nXSBhbmQgW3JlYWRBc1N0cmluZ1N5bmNdLgogKiBVbmxlc3MgeW91IGhhdmUgYSBzcGVjaWZpYyByZWFzb24gZm9yIHVzaW5nIHRoZSBzeW5jaHJvbm91cyB2ZXJzaW9uCiAqIG9mIGEgbWV0aG9kLCBwcmVmZXIgdGhlIGFzeW5jaHJvbm91cyB2ZXJzaW9uIHRvIGF2b2lkIGJsb2NraW5nIHlvdXIgcHJvZ3JhbS4KICoKICogIyMgSWYgcGF0aCBpcyBhIGxpbmsKICoKICogSWYgW3BhdGhdIGlzIGEgc3ltYm9saWMgbGluaywgcmF0aGVyIHRoYW4gYSBmaWxlLAogKiB0aGVuIHRoZSBtZXRob2RzIG9mIEZpbGUgb3BlcmF0ZSBvbiB0aGUgdWx0aW1hdGUgdGFyZ2V0IG9mIHRoZQogKiBsaW5rLCBleGNlcHQgZm9yIFtkZWxldGVdIGFuZCBbZGVsZXRlU3luY10sIHdoaWNoIG9wZXJhdGUgb24KICogdGhlIGxpbmsuCiAqCiAqICMjIFJlYWQgZnJvbSBhIGZpbGUKICoKICogVGhlIGZvbGxvd2luZyBjb2RlIHNhbXBsZSByZWFkcyB0aGUgZW50aXJlIGNvbnRlbnRzIGZyb20gYSBmaWxlIGFzIGEgc3RyaW5nCiAqIHVzaW5nIHRoZSBhc3luY2hyb25vdXMgW3JlYWRBc1N0cmluZ10gbWV0aG9kOgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmFzeW5jJzsKICogICAgIGltcG9ydCAnZGFydDppbyc7CiAqCiAqICAgICB2b2lkIG1haW4oKSB7CiAqICAgICAgIG5ldyBGaWxlKCdmaWxlLnR4dCcpLnJlYWRBc1N0cmluZygpLnRoZW4oKFN0cmluZyBjb250ZW50cykgewogKiAgICAgICAgIHByaW50KGNvbnRlbnRzKTsKICogICAgICAgfSk7CiAqICAgICB9CiAqCiAqIEEgbW9yZSBmbGV4aWJsZSBhbmQgdXNlZnVsIHdheSB0byByZWFkIGEgZmlsZSBpcyB3aXRoIGEgW1N0cmVhbV0uCiAqIE9wZW4gdGhlIGZpbGUgd2l0aCBbb3BlblJlYWRdLCB3aGljaCByZXR1cm5zIGEgc3RyZWFtIHRoYXQKICogcHJvdmlkZXMgdGhlIGRhdGEgaW4gdGhlIGZpbGUgYXMgY2h1bmtzIG9mIGJ5dGVzLgogKiBMaXN0ZW4gdG8gdGhlIHN0cmVhbSBmb3IgZGF0YSBhbmQgcHJvY2VzcyBhcyBuZWVkZWQuCiAqIFlvdSBjYW4gdXNlIHZhcmlvdXMgdHJhbnNmb3JtZXJzIGluIHN1Y2Nlc3Npb24gdG8gbWFuaXB1bGF0ZSB0aGUKICogZGF0YSBpbnRvIHRoZSByZXF1aXJlZCBmb3JtYXQgb3IgdG8gcHJlcGFyZSBpdCBmb3Igb3V0cHV0LgogKgogKiBZb3UgbWlnaHQgd2FudCB0byB1c2UgYSBzdHJlYW0gdG8gcmVhZCBsYXJnZSBmaWxlcywKICogdG8gbWFuaXB1bGF0ZSB0aGUgZGF0YSB3aXRoIHRyYW5zZm9ybWVycywKICogb3IgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBhbm90aGVyIEFQSSwgc3VjaCBhcyBbV2ViU29ja2V0XXMuCiAqCiAqICAgICBpbXBvcnQgJ2RhcnQ6aW8nOwogKiAgICAgaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwogKiAgICAgaW1wb3J0ICdkYXJ0OmFzeW5jJzsKICoKICogICAgIG1haW4oKSB7CiAqICAgICAgIGZpbmFsIGZpbGUgPSBuZXcgRmlsZSgnZmlsZS50eHQnKTsKICogICAgICAgU3RyZWFtPExpc3Q8aW50Pj4gaW5wdXRTdHJlYW0gPSBmaWxlLm9wZW5SZWFkKCk7CiAqCiAqICAgICAgIGlucHV0U3RyZWFtCiAqICAgICAgICAgLnRyYW5zZm9ybSh1dGY4LmRlY29kZXIpICAgICAgIC8vIERlY29kZSBieXRlcyB0byBVVEYtOC4KICogICAgICAgICAudHJhbnNmb3JtKG5ldyBMaW5lU3BsaXR0ZXIoKSkgLy8gQ29udmVydCBzdHJlYW0gdG8gaW5kaXZpZHVhbCBsaW5lcy4KICogICAgICAgICAubGlzdGVuKChTdHJpbmcgbGluZSkgeyAgICAgICAgLy8gUHJvY2VzcyByZXN1bHRzLgogKiAgICAgICAgICAgICBwcmludCgnJGxpbmU6ICR7bGluZS5sZW5ndGh9IGJ5dGVzJyk7CiAqICAgICAgICAgICB9LAogKiAgICAgICAgICAgb25Eb25lOiAoKSB7IHByaW50KCdGaWxlIGlzIG5vdyBjbG9zZWQuJyk7IH0sCiAqICAgICAgICAgICBvbkVycm9yOiAoZSkgeyBwcmludChlLnRvU3RyaW5nKCkpOyB9KTsKICogICAgIH0KICoKICogIyMgV3JpdGUgdG8gYSBmaWxlCiAqCiAqIFRvIHdyaXRlIGEgc3RyaW5nIHRvIGEgZmlsZSwgdXNlIHRoZSBbd3JpdGVBc1N0cmluZ10gbWV0aG9kOgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJzsKICoKICogICAgIHZvaWQgbWFpbigpIHsKICogICAgICAgZmluYWwgZmlsZW5hbWUgPSAnZmlsZS50eHQnOwogKiAgICAgICBuZXcgRmlsZShmaWxlbmFtZSkud3JpdGVBc1N0cmluZygnc29tZSBjb250ZW50JykKICogICAgICAgICAudGhlbigoRmlsZSBmaWxlKSB7CiAqICAgICAgICAgICAvLyBEbyBzb21ldGhpbmcgd2l0aCB0aGUgZmlsZS4KICogICAgICAgICB9KTsKICogICAgIH0KICoKICogWW91IGNhbiBhbHNvIHdyaXRlIHRvIGEgZmlsZSB1c2luZyBhIFtTdHJlYW1dLiBPcGVuIHRoZSBmaWxlIHdpdGgKICogW29wZW5Xcml0ZV0sIHdoaWNoIHJldHVybnMgYW4gW0lPU2lua10gdG8gd2hpY2ggeW91IGNhbiB3cml0ZSBkYXRhLgogKiBCZSBzdXJlIHRvIGNsb3NlIHRoZSBzaW5rIHdpdGggdGhlIFtJT1NpbmsuY2xvc2VdIG1ldGhvZC4KICoKICogICAgIGltcG9ydCAnZGFydDppbyc7CiAqCiAqICAgICB2b2lkIG1haW4oKSB7CiAqICAgICAgIHZhciBmaWxlID0gbmV3IEZpbGUoJ2ZpbGUudHh0Jyk7CiAqICAgICAgIHZhciBzaW5rID0gZmlsZS5vcGVuV3JpdGUoKTsKICogICAgICAgc2luay53cml0ZSgnRklMRSBBQ0NFU1NFRCAke25ldyBEYXRlVGltZS5ub3coKX1cbicpOwogKgogKiAgICAgICAvLyBDbG9zZSB0aGUgSU9TaW5rIHRvIGZyZWUgc3lzdGVtIHJlc291cmNlcy4KICogICAgICAgc2luay5jbG9zZSgpOwogKiAgICAgfQogKgogKiAjIyBUaGUgdXNlIG9mIEZ1dHVyZXMKICoKICogVG8gYXZvaWQgdW5pbnRlbnRpb25hbCBibG9ja2luZyBvZiB0aGUgcHJvZ3JhbSwKICogc2V2ZXJhbCBtZXRob2RzIHVzZSBhIFtGdXR1cmVdIHRvIHJldHVybiBhIHZhbHVlLiBGb3IgZXhhbXBsZSwKICogdGhlIFtsZW5ndGhdIG1ldGhvZCwgd2hpY2ggZ2V0cyB0aGUgbGVuZ3RoIG9mIGEgZmlsZSwgcmV0dXJucyBhIEZ1dHVyZS4KICogVXNlIGB0aGVuYCB0byByZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uLCB3aGljaCBpcyBjYWxsZWQgd2hlbgogKiB0aGUgdmFsdWUgaXMgcmVhZHkuCiAqCiAqICAgICBpbXBvcnQgJ2RhcnQ6aW8nOwogKgogKiAgICAgbWFpbigpIHsKICogICAgICAgZmluYWwgZmlsZSA9IG5ldyBGaWxlKCdmaWxlLnR4dCcpOwogKgogKiAgICAgICBmaWxlLmxlbmd0aCgpLnRoZW4oKGxlbikgewogKiAgICAgICAgIHByaW50KGxlbik7CiAqICAgICAgIH0pOwogKiAgICAgfQogKgogKiBJbiBhZGRpdGlvbiB0byBsZW5ndGgsIHRoZSBbZXhpc3RzXSwgW2xhc3RNb2RpZmllZF0sIFtzdGF0XSwgYW5kCiAqIG90aGVyIG1ldGhvZHMsIHJldHVybiBGdXR1cmVzLgogKgogKiAjIyBPdGhlciByZXNvdXJjZXMKICoKICogKiBbRGFydCBieSBFeGFtcGxlXShodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZGFydC1ieS1leGFtcGxlLyNmaWxlcy1kaXJlY3Rvcmllcy1hbmQtc3ltbGlua3MpCiAqICAgcHJvdmlkZXMgYWRkaXRpb25hbCB0YXNrLW9yaWVudGVkIGNvZGUgc2FtcGxlcyB0aGF0IHNob3cgaG93IHRvIHVzZQogKiAgIHZhcmlvdXMgQVBJIGZyb20gdGhlIERpcmVjdG9yeSBjbGFzcyBhbmQgdGhlIHJlbGF0ZWQgW0ZpbGVdIGNsYXNzLgogKgogKiAqIFtJL08gZm9yIENvbW1hbmQtTGluZQogKiAgIEFwcHNdKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL2RhcnQtdXAtYW5kLXJ1bm5pbmcvY2gwMy5odG1sI2RhcnRpby0tLWlvLWZvci1jb21tYW5kLWxpbmUtYXBwcykKICogICBhIHNlY3Rpb24gZnJvbSBfQSBUb3VyIG9mIHRoZSBEYXJ0IExpYnJhcmllc18gY292ZXJzIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KICoKICogKiBbV3JpdGUgQ29tbWFuZC1MaW5lIEFwcHNdKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL3R1dG9yaWFscy9jbWRsaW5lLyksCiAqICAgYSB0dXRvcmlhbCBhYm91dCB3cml0aW5nIGNvbW1hbmQtbGluZSBhcHBzLCBpbmNsdWRlcyBpbmZvcm1hdGlvbiBhYm91dAogKiAgIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KICovCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKYWJzdHJhY3QgY2xhc3MgRmlsZSBpbXBsZW1lbnRzIEZpbGVTeXN0ZW1FbnRpdHkgewogIC8qKgogICAqIENyZWF0ZXMgYSBbRmlsZV0gb2JqZWN0LgogICAqCiAgICogSWYgW3BhdGhdIGlzIGEgcmVsYXRpdmUgcGF0aCwgaXQgd2lsbCBiZSBpbnRlcnByZXRlZCByZWxhdGl2ZSB0byB0aGUKICAgKiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IChzZWUgW0RpcmVjdG9yeS5jdXJyZW50XSksIHdoZW4gdXNlZC4KICAgKgogICAqIElmIFtwYXRoXSBpcyBhbiBhYnNvbHV0ZSBwYXRoLCBpdCB3aWxsIGJlIGltbXVuZSB0byBjaGFuZ2VzIHRvIHRoZQogICAqIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCiAgICovCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGZhY3RvcnkgRmlsZShTdHJpbmcgcGF0aCkgewogICAgZmluYWwgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gbmV3IF9GaWxlKHBhdGgpOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5jcmVhdGVGaWxlKHBhdGgpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlIGEgRmlsZSBvYmplY3QgZnJvbSBhIFVSSS4KICAgKgogICAqIElmIFt1cmldIGNhbm5vdCByZWZlcmVuY2UgYSBmaWxlIHRoaXMgdGhyb3dzIFtVbnN1cHBvcnRlZEVycm9yXS4KICAgKi8KICBmYWN0b3J5IEZpbGUuZnJvbVVyaShVcmkgdXJpKSA9PiBuZXcgRmlsZSh1cmkudG9GaWxlUGF0aCgpKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIEZpbGUgb2JqZWN0IGZyb20gYSByYXcgcGF0aCwgdGhhdCBpcywgYSBzZXF1ZW5jZSBvZiBieXRlcwogICAqIGFzIHJlcHJlc2VudGVkIGJ5IHRoZSBPUy4KICAgKi8KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgZmFjdG9yeSBGaWxlLmZyb21SYXdQYXRoKFVpbnQ4TGlzdCByYXdQYXRoKSB7CiAgICAvLyBUT0RPKGJrb255aSk6IEhhbmRsZSBvdmVycmlkZXMuCiAgICByZXR1cm4gbmV3IF9GaWxlLmZyb21SYXdQYXRoKHJhd1BhdGgpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlIHRoZSBmaWxlLiBSZXR1cm5zIGEgYEZ1dHVyZTxGaWxlPmAgdGhhdCBjb21wbGV0ZXMgd2l0aAogICAqIHRoZSBmaWxlIHdoZW4gaXQgaGFzIGJlZW4gY3JlYXRlZC4KICAgKgogICAqIElmIFtyZWN1cnNpdmVdIGlzIGZhbHNlLCB0aGUgZGVmYXVsdCwgdGhlIGZpbGUgaXMgY3JlYXRlZCBvbmx5IGlmCiAgICogYWxsIGRpcmVjdG9yaWVzIGluIHRoZSBwYXRoIGV4aXN0LiBJZiBbcmVjdXJzaXZlXSBpcyB0cnVlLCBhbGwKICAgKiBub24tZXhpc3RpbmcgcGF0aCBjb21wb25lbnRzIGFyZSBjcmVhdGVkLgogICAqCiAgICogRXhpc3RpbmcgZmlsZXMgYXJlIGxlZnQgdW50b3VjaGVkIGJ5IFtjcmVhdGVdLiBDYWxsaW5nIFtjcmVhdGVdIG9uIGFuCiAgICogZXhpc3RpbmcgZmlsZSBtaWdodCBmYWlsIGlmIHRoZXJlIGFyZSByZXN0cmljdGl2ZSBwZXJtaXNzaW9ucyBvbgogICAqIHRoZSBmaWxlLgogICAqCiAgICogQ29tcGxldGVzIHRoZSBmdXR1cmUgd2l0aCBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIEZ1dHVyZTxGaWxlPiBjcmVhdGUoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGNyZWF0ZSB0aGUgZmlsZS4gRXhpc3RpbmcgZmlsZXMgYXJlIGxlZnQgdW50b3VjaGVkCiAgICogYnkgW2NyZWF0ZVN5bmNdLiBDYWxsaW5nIFtjcmVhdGVTeW5jXSBvbiBhbiBleGlzdGluZyBmaWxlIG1pZ2h0IGZhaWwKICAgKiBpZiB0aGVyZSBhcmUgcmVzdHJpY3RpdmUgcGVybWlzc2lvbnMgb24gdGhlIGZpbGUuCiAgICoKICAgKiBJZiBbcmVjdXJzaXZlXSBpcyBmYWxzZSwgdGhlIGRlZmF1bHQsIHRoZSBmaWxlIGlzIGNyZWF0ZWQKICAgKiBvbmx5IGlmIGFsbCBkaXJlY3RvcmllcyBpbiB0aGUgcGF0aCBleGlzdC4KICAgKiBJZiBbcmVjdXJzaXZlXSBpcyB0cnVlLCBhbGwgbm9uLWV4aXN0aW5nIHBhdGggY29tcG9uZW50cyBhcmUgY3JlYXRlZC4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIHZvaWQgY3JlYXRlU3luYyh7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSk7CgogIC8qKgogICAqIFJlbmFtZXMgdGhpcyBmaWxlLiBSZXR1cm5zIGEgYEZ1dHVyZTxGaWxlPmAgdGhhdCBjb21wbGV0ZXMKICAgKiB3aXRoIGEgW0ZpbGVdIGluc3RhbmNlIGZvciB0aGUgcmVuYW1lZCBmaWxlLgogICAqCiAgICogSWYgW25ld1BhdGhdIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZmlsZSwgdGhhdCBmaWxlIGlzCiAgICogcmVwbGFjZWQuIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGRpcmVjdG9yeSwgdGhlCiAgICogb3BlcmF0aW9uIGZhaWxzIGFuZCB0aGUgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGV4Y2VwdGlvbi4KICAgKi8KICBGdXR1cmU8RmlsZT4gcmVuYW1lKFN0cmluZyBuZXdQYXRoKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSByZW5hbWVzIHRoaXMgZmlsZS4gUmV0dXJucyBhIFtGaWxlXQogICAqIGluc3RhbmNlIGZvciB0aGUgcmVuYW1lZCBmaWxlLgogICAqCiAgICogSWYgW25ld1BhdGhdIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZmlsZSwgdGhhdCBmaWxlIGlzCiAgICogcmVwbGFjZWQuIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGRpcmVjdG9yeSB0aGUKICAgKiBvcGVyYXRpb24gZmFpbHMgYW5kIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICovCiAgRmlsZSByZW5hbWVTeW5jKFN0cmluZyBuZXdQYXRoKTsKCiAgLyoqCiAgICogQ29weSB0aGlzIGZpbGUuIFJldHVybnMgYSBgRnV0dXJlPEZpbGU+YCB0aGF0IGNvbXBsZXRlcwogICAqIHdpdGggYSBbRmlsZV0gaW5zdGFuY2UgZm9yIHRoZSBjb3BpZWQgZmlsZS4KICAgKgogICAqIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGZpbGUsIHRoYXQgZmlsZSBpcwogICAqIHJlcGxhY2VkLiBJZiBbbmV3UGF0aF0gaWRlbnRpZmllcyBhbiBleGlzdGluZyBkaXJlY3RvcnksIHRoZQogICAqIG9wZXJhdGlvbiBmYWlscyBhbmQgdGhlIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhbiBleGNlcHRpb24uCiAgICovCiAgRnV0dXJlPEZpbGU+IGNvcHkoU3RyaW5nIG5ld1BhdGgpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGNvcHkgdGhpcyBmaWxlLiBSZXR1cm5zIGEgW0ZpbGVdCiAgICogaW5zdGFuY2UgZm9yIHRoZSBjb3BpZWQgZmlsZS4KICAgKgogICAqIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGZpbGUsIHRoYXQgZmlsZSBpcwogICAqIHJlcGxhY2VkLiBJZiBbbmV3UGF0aF0gaWRlbnRpZmllcyBhbiBleGlzdGluZyBkaXJlY3RvcnkgdGhlCiAgICogb3BlcmF0aW9uIGZhaWxzIGFuZCBhbiBleGNlcHRpb24gaXMgdGhyb3duLgogICAqLwogIEZpbGUgY29weVN5bmMoU3RyaW5nIG5ld1BhdGgpOwoKICAvKioKICAgKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgZmlsZS4gUmV0dXJucyBhIGBGdXR1cmU8aW50PmAgdGhhdAogICAqIGNvbXBsZXRlcyB3aXRoIHRoZSBsZW5ndGggaW4gYnl0ZXMuCiAgICovCiAgRnV0dXJlPGludD4gbGVuZ3RoKCk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgZ2V0IHRoZSBsZW5ndGggb2YgdGhlIGZpbGUuCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICBpbnQgbGVuZ3RoU3luYygpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgW0ZpbGVdIGluc3RhbmNlIHdob3NlIHBhdGggaXMgdGhlIGFic29sdXRlIHBhdGggdG8gW3RoaXNdLgogICAqCiAgICogVGhlIGFic29sdXRlIHBhdGggaXMgY29tcHV0ZWQgYnkgcHJlZml4aW5nCiAgICogYSByZWxhdGl2ZSBwYXRoIHdpdGggdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksIGFuZCByZXR1cm5pbmcKICAgKiBhbiBhYnNvbHV0ZSBwYXRoIHVuY2hhbmdlZC4KICAgKi8KICBGaWxlIGdldCBhYnNvbHV0ZTsKCi8qKgogKiBHZXQgdGhlIGxhc3QtYWNjZXNzZWQgdGltZSBvZiB0aGUgZmlsZS4KICoKICogUmV0dXJucyBhIGBGdXR1cmU8RGF0ZVRpbWU+YCB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoZSBkYXRlIGFuZCB0aW1lIHdoZW4gdGhlCiAqIGZpbGUgd2FzIGxhc3QgYWNjZXNzZWQsIGlmIHRoZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuCiAqCiAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogKi8KICBGdXR1cmU8RGF0ZVRpbWU+IGxhc3RBY2Nlc3NlZCgpOwoKLyoqCiAqIEdldCB0aGUgbGFzdC1hY2Nlc3NlZCB0aW1lIG9mIHRoZSBmaWxlLgogKgogKiBSZXR1cm5zIHRoZSBkYXRlIGFuZCB0aW1lIHdoZW4gdGhlIGZpbGUgd2FzIGxhc3QgYWNjZXNzZWQsCiAqIGlmIHRoZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuIEJsb2NrcyB1bnRpbCB0aGUgaW5mb3JtYXRpb24gY2FuIGJlIHJldHVybmVkCiAqIG9yIGl0IGlzIGRldGVybWluZWQgdGhhdCB0aGUgaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZS4KICoKICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAqLwogIERhdGVUaW1lIGxhc3RBY2Nlc3NlZFN5bmMoKTsKCiAgLyoqCiAgICogTW9kaWZpZXMgdGhlIHRpbWUgdGhlIGZpbGUgd2FzIGxhc3QgYWNjZXNzZWQuCiAgICoKICAgKiBSZXR1cm5zIGEgW0Z1dHVyZV0gdGhhdCBjb21wbGV0ZXMgb25jZSB0aGUgb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQuCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIHRpbWUgY2Fubm90IGJlIHNldC4KICAgKi8KICBGdXR1cmUgc2V0TGFzdEFjY2Vzc2VkKERhdGVUaW1lIHRpbWUpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IG1vZGlmaWVzIHRoZSB0aW1lIHRoZSBmaWxlIHdhcyBsYXN0IGFjY2Vzc2VkLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSB0aW1lIGNhbm5vdCBiZSBzZXQuCiAgICovCiAgdm9pZCBzZXRMYXN0QWNjZXNzZWRTeW5jKERhdGVUaW1lIHRpbWUpOwoKLyoqCiAqIEdldCB0aGUgbGFzdC1tb2RpZmllZCB0aW1lIG9mIHRoZSBmaWxlLgogKgogKiBSZXR1cm5zIGEgYEZ1dHVyZTxEYXRlVGltZT5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhlIGRhdGUgYW5kIHRpbWUgd2hlbiB0aGUKICogZmlsZSB3YXMgbGFzdCBtb2RpZmllZCwgaWYgdGhlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4KICoKICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAqLwogIEZ1dHVyZTxEYXRlVGltZT4gbGFzdE1vZGlmaWVkKCk7CgovKioKICogR2V0IHRoZSBsYXN0LW1vZGlmaWVkIHRpbWUgb2YgdGhlIGZpbGUuCiAqCiAqIFJldHVybnMgdGhlIGRhdGUgYW5kIHRpbWUgd2hlbiB0aGUgZmlsZSB3YXMgbGFzdCBtb2RpZmllZCwKICogaWYgdGhlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4gQmxvY2tzIHVudGlsIHRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgcmV0dXJuZWQKICogb3IgaXQgaXMgZGV0ZXJtaW5lZCB0aGF0IHRoZSBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlLgogKgogKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICovCiAgRGF0ZVRpbWUgbGFzdE1vZGlmaWVkU3luYygpOwoKICAvKioKICAgKiBNb2RpZmllcyB0aGUgdGltZSB0aGUgZmlsZSB3YXMgbGFzdCBtb2RpZmllZC4KICAgKgogICAqIFJldHVybnMgYSBbRnV0dXJlXSB0aGF0IGNvbXBsZXRlcyBvbmNlIHRoZSBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZC4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgdGltZSBjYW5ub3QgYmUgc2V0LgogICAqLwogIEZ1dHVyZSBzZXRMYXN0TW9kaWZpZWQoRGF0ZVRpbWUgdGltZSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgbW9kaWZpZXMgdGhlIHRpbWUgdGhlIGZpbGUgd2FzIGxhc3QgbW9kaWZpZWQuCiAgICoKICAgKiBJZiB0aGUgYXR0cmlidXRlcyBjYW5ub3QgYmUgc2V0LCB0aHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0uCiAgICovCiAgdm9pZCBzZXRMYXN0TW9kaWZpZWRTeW5jKERhdGVUaW1lIHRpbWUpOwoKICAvKioKICAgKiBPcGVuIHRoZSBmaWxlIGZvciByYW5kb20gYWNjZXNzIG9wZXJhdGlvbnMuIFJldHVybnMgYQogICAqIGBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhlIG9wZW5lZAogICAqIHJhbmRvbSBhY2Nlc3MgZmlsZS4gW1JhbmRvbUFjY2Vzc0ZpbGVdcyBtdXN0IGJlIGNsb3NlZCB1c2luZyB0aGUKICAgKiBbUmFuZG9tQWNjZXNzRmlsZS5jbG9zZV0gbWV0aG9kLgogICAqCiAgICogRmlsZXMgY2FuIGJlIG9wZW5lZCBpbiB0aHJlZSBtb2RlczoKICAgKgogICAqIFtGaWxlTW9kZS5yZWFkXTogb3BlbiB0aGUgZmlsZSBmb3IgcmVhZGluZy4KICAgKgogICAqIFtGaWxlTW9kZS53cml0ZV06IG9wZW4gdGhlIGZpbGUgZm9yIGJvdGggcmVhZGluZyBhbmQgd3JpdGluZyBhbmQKICAgKiB0cnVuY2F0ZSB0aGUgZmlsZSB0byBsZW5ndGggemVyby4gSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QgdGhlCiAgICogZmlsZSBpcyBjcmVhdGVkLgogICAqCiAgICogW0ZpbGVNb2RlLmFwcGVuZF06IHNhbWUgYXMgW0ZpbGVNb2RlLndyaXRlXSBleGNlcHQgdGhhdCB0aGUgZmlsZSBpcwogICAqIG5vdCB0cnVuY2F0ZWQuCiAgICovCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IG9wZW4oe0ZpbGVNb2RlIG1vZGU6IEZpbGVNb2RlLnJlYWR9KTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBvcGVuIHRoZSBmaWxlIGZvciByYW5kb20gYWNjZXNzIG9wZXJhdGlvbnMuIFRoZQogICAqIHJlc3VsdCBpcyBhIFtSYW5kb21BY2Nlc3NGaWxlXSBvbiB3aGljaCByYW5kb20gYWNjZXNzIG9wZXJhdGlvbnMKICAgKiBjYW4gYmUgcGVyZm9ybWVkLiBPcGVuZWQgW1JhbmRvbUFjY2Vzc0ZpbGVdcyBtdXN0IGJlIGNsb3NlZCB1c2luZwogICAqIHRoZSBbUmFuZG9tQWNjZXNzRmlsZS5jbG9zZV0gbWV0aG9kLgogICAqCiAgICogU2VlIFtvcGVuXSBmb3IgaW5mb3JtYXRpb24gb24gdGhlIFttb2RlXSBhcmd1bWVudC4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIFJhbmRvbUFjY2Vzc0ZpbGUgb3BlblN5bmMoe0ZpbGVNb2RlIG1vZGU6IEZpbGVNb2RlLnJlYWR9KTsKCiAgLyoqCiAgICogQ3JlYXRlIGEgbmV3IGluZGVwZW5kZW50IFtTdHJlYW1dIGZvciB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlLgogICAqCiAgICogSWYgW3N0YXJ0XSBpcyBwcmVzZW50LCB0aGUgZmlsZSB3aWxsIGJlIHJlYWQgZnJvbSBieXRlLW9mZnNldCBbc3RhcnRdLgogICAqIE90aGVyd2lzZSBmcm9tIHRoZSBiZWdpbm5pbmcgKGluZGV4IDApLgogICAqCiAgICogSWYgW2VuZF0gaXMgcHJlc2VudCwgb25seSB1cCB0byBieXRlLWluZGV4IFtlbmRdIHdpbGwgYmUgcmVhZC4gT3RoZXJ3aXNlLAogICAqIHVudGlsIGVuZCBvZiBmaWxlLgogICAqCiAgICogSW4gb3JkZXIgdG8gbWFrZSBzdXJlIHRoYXQgc3lzdGVtIHJlc291cmNlcyBhcmUgZnJlZWQsIHRoZSBzdHJlYW0KICAgKiBtdXN0IGJlIHJlYWQgdG8gY29tcGxldGlvbiBvciB0aGUgc3Vic2NyaXB0aW9uIG9uIHRoZSBzdHJlYW0gbXVzdAogICAqIGJlIGNhbmNlbGxlZC4KICAgKi8KICBTdHJlYW08TGlzdDxpbnQ+PiBvcGVuUmVhZChbaW50IHN0YXJ0LCBpbnQgZW5kXSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgaW5kZXBlbmRlbnQgW0lPU2lua10gZm9yIHRoZSBmaWxlLiBUaGUKICAgKiBbSU9TaW5rXSBtdXN0IGJlIGNsb3NlZCB3aGVuIG5vIGxvbmdlciB1c2VkLCB0byBmcmVlCiAgICogc3lzdGVtIHJlc291cmNlcy4KICAgKgogICAqIEFuIFtJT1NpbmtdIGZvciBhIGZpbGUgY2FuIGJlIG9wZW5lZCBpbiB0d28gbW9kZXM6CiAgICoKICAgKiAqIFtGaWxlTW9kZS53cml0ZV06IHRydW5jYXRlcyB0aGUgZmlsZSB0byBsZW5ndGggemVyby4KICAgKiAqIFtGaWxlTW9kZS5hcHBlbmRdOiBzZXRzIHRoZSBpbml0aWFsIHdyaXRlIHBvc2l0aW9uIHRvIHRoZSBlbmQKICAgKiAgIG9mIHRoZSBmaWxlLgogICAqCiAgICogIFdoZW4gd3JpdGluZyBzdHJpbmdzIHRocm91Z2ggdGhlIHJldHVybmVkIFtJT1NpbmtdIHRoZSBlbmNvZGluZwogICAqICBzcGVjaWZpZWQgdXNpbmcgW2VuY29kaW5nXSB3aWxsIGJlIHVzZWQuIFRoZSByZXR1cm5lZCBbSU9TaW5rXQogICAqICBoYXMgYW4gYGVuY29kaW5nYCBwcm9wZXJ0eSB3aGljaCBjYW4gYmUgY2hhbmdlZCBhZnRlciB0aGUKICAgKiAgW0lPU2lua10gaGFzIGJlZW4gY3JlYXRlZC4KICAgKi8KICBJT1Npbmsgb3BlbldyaXRlKHtGaWxlTW9kZSBtb2RlOiBGaWxlTW9kZS53cml0ZSwgRW5jb2RpbmcgZW5jb2Rpbmc6IHV0Zjh9KTsKCiAgLyoqCiAgICogUmVhZCB0aGUgZW50aXJlIGZpbGUgY29udGVudHMgYXMgYSBsaXN0IG9mIGJ5dGVzLiBSZXR1cm5zIGEKICAgKiBgRnV0dXJlPFVpbnQ4TGlzdD5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhlIGxpc3Qgb2YgYnl0ZXMgdGhhdAogICAqIGlzIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4KICAgKi8KICBGdXR1cmU8VWludDhMaXN0PiByZWFkQXNCeXRlcygpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHJlYWQgdGhlIGVudGlyZSBmaWxlIGNvbnRlbnRzIGFzIGEgbGlzdCBvZiBieXRlcy4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIFVpbnQ4TGlzdCByZWFkQXNCeXRlc1N5bmMoKTsKCiAgLyoqCiAgICogUmVhZCB0aGUgZW50aXJlIGZpbGUgY29udGVudHMgYXMgYSBzdHJpbmcgdXNpbmcgdGhlIGdpdmVuCiAgICogW0VuY29kaW5nXS4KICAgKgogICAqIFJldHVybnMgYSBgRnV0dXJlPFN0cmluZz5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhlIHN0cmluZyBvbmNlCiAgICogdGhlIGZpbGUgY29udGVudHMgaGFzIGJlZW4gcmVhZC4KICAgKi8KICBGdXR1cmU8U3RyaW5nPiByZWFkQXNTdHJpbmcoe0VuY29kaW5nIGVuY29kaW5nOiB1dGY4fSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgcmVhZCB0aGUgZW50aXJlIGZpbGUgY29udGVudHMgYXMgYSBzdHJpbmcgdXNpbmcgdGhlCiAgICogZ2l2ZW4gW0VuY29kaW5nXS4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIFN0cmluZyByZWFkQXNTdHJpbmdTeW5jKHtFbmNvZGluZyBlbmNvZGluZzogdXRmOH0pOwoKICAvKioKICAgKiBSZWFkIHRoZSBlbnRpcmUgZmlsZSBjb250ZW50cyBhcyBsaW5lcyBvZiB0ZXh0IHVzaW5nIHRoZSBnaXZlbgogICAqIFtFbmNvZGluZ10uCiAgICoKICAgKiBSZXR1cm5zIGEgYEZ1dHVyZTxMaXN0PFN0cmluZz4+YCB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoZSBsaW5lcwogICAqIG9uY2UgdGhlIGZpbGUgY29udGVudHMgaGFzIGJlZW4gcmVhZC4KICAgKi8KICBGdXR1cmU8TGlzdDxTdHJpbmc+PiByZWFkQXNMaW5lcyh7RW5jb2RpbmcgZW5jb2Rpbmc6IHV0Zjh9KTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSByZWFkIHRoZSBlbnRpcmUgZmlsZSBjb250ZW50cyBhcyBsaW5lcyBvZiB0ZXh0CiAgICogdXNpbmcgdGhlIGdpdmVuIFtFbmNvZGluZ10uCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICBMaXN0PFN0cmluZz4gcmVhZEFzTGluZXNTeW5jKHtFbmNvZGluZyBlbmNvZGluZzogdXRmOH0pOwoKICAvKioKICAgKiBXcml0ZSBhIGxpc3Qgb2YgYnl0ZXMgdG8gYSBmaWxlLgogICAqCiAgICogT3BlbnMgdGhlIGZpbGUsIHdyaXRlcyB0aGUgbGlzdCBvZiBieXRlcyB0byBpdCwgYW5kIGNsb3NlcyB0aGUgZmlsZS4KICAgKiBSZXR1cm5zIGEgYEZ1dHVyZTxGaWxlPmAgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGlzIFtGaWxlXSBvYmplY3Qgb25jZQogICAqIHRoZSBlbnRpcmUgb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQuCiAgICoKICAgKiBCeSBkZWZhdWx0IFt3cml0ZUFzQnl0ZXNdIGNyZWF0ZXMgdGhlIGZpbGUgZm9yIHdyaXRpbmcgYW5kIHRydW5jYXRlcyB0aGUKICAgKiBmaWxlIGlmIGl0IGFscmVhZHkgZXhpc3RzLiBJbiBvcmRlciB0byBhcHBlbmQgdGhlIGJ5dGVzIHRvIGFuIGV4aXN0aW5nCiAgICogZmlsZSwgcGFzcyBbRmlsZU1vZGUuYXBwZW5kXSBhcyB0aGUgb3B0aW9uYWwgbW9kZSBwYXJhbWV0ZXIuCiAgICoKICAgKiBJZiB0aGUgYXJndW1lbnQgW2ZsdXNoXSBpcyBzZXQgdG8gYHRydWVgLCB0aGUgZGF0YSB3cml0dGVuIHdpbGwgYmUKICAgKiBmbHVzaGVkIHRvIHRoZSBmaWxlIHN5c3RlbSBiZWZvcmUgdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMuCiAgICovCiAgRnV0dXJlPEZpbGU+IHdyaXRlQXNCeXRlcyhMaXN0PGludD4gYnl0ZXMsCiAgICAgIHtGaWxlTW9kZSBtb2RlOiBGaWxlTW9kZS53cml0ZSwgYm9vbCBmbHVzaDogZmFsc2V9KTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSB3cml0ZSBhIGxpc3Qgb2YgYnl0ZXMgdG8gYSBmaWxlLgogICAqCiAgICogT3BlbnMgdGhlIGZpbGUsIHdyaXRlcyB0aGUgbGlzdCBvZiBieXRlcyB0byBpdCBhbmQgY2xvc2VzIHRoZSBmaWxlLgogICAqCiAgICogQnkgZGVmYXVsdCBbd3JpdGVBc0J5dGVzU3luY10gY3JlYXRlcyB0aGUgZmlsZSBmb3Igd3JpdGluZyBhbmQgdHJ1bmNhdGVzCiAgICogdGhlIGZpbGUgaWYgaXQgYWxyZWFkeSBleGlzdHMuIEluIG9yZGVyIHRvIGFwcGVuZCB0aGUgYnl0ZXMgdG8gYW4gZXhpc3RpbmcKICAgKiBmaWxlLCBwYXNzIFtGaWxlTW9kZS5hcHBlbmRdIGFzIHRoZSBvcHRpb25hbCBtb2RlIHBhcmFtZXRlci4KICAgKgogICAqIElmIHRoZSBbZmx1c2hdIGFyZ3VtZW50IGlzIHNldCB0byBgdHJ1ZWAgZGF0YSB3cml0dGVuIHdpbGwgYmUKICAgKiBmbHVzaGVkIHRvIHRoZSBmaWxlIHN5c3RlbSBiZWZvcmUgcmV0dXJuaW5nLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgdm9pZCB3cml0ZUFzQnl0ZXNTeW5jKExpc3Q8aW50PiBieXRlcywKICAgICAge0ZpbGVNb2RlIG1vZGU6IEZpbGVNb2RlLndyaXRlLCBib29sIGZsdXNoOiBmYWxzZX0pOwoKICAvKioKICAgKiBXcml0ZSBhIHN0cmluZyB0byBhIGZpbGUuCiAgICoKICAgKiBPcGVucyB0aGUgZmlsZSwgd3JpdGVzIHRoZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGVuY29kaW5nLCBhbmQgY2xvc2VzIHRoZQogICAqIGZpbGUuIFJldHVybnMgYSBgRnV0dXJlPEZpbGU+YCB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoaXMgW0ZpbGVdIG9iamVjdAogICAqIG9uY2UgdGhlIGVudGlyZSBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZC4KICAgKgogICAqIEJ5IGRlZmF1bHQgW3dyaXRlQXNTdHJpbmddIGNyZWF0ZXMgdGhlIGZpbGUgZm9yIHdyaXRpbmcgYW5kIHRydW5jYXRlcyB0aGUKICAgKiBmaWxlIGlmIGl0IGFscmVhZHkgZXhpc3RzLiBJbiBvcmRlciB0byBhcHBlbmQgdGhlIGJ5dGVzIHRvIGFuIGV4aXN0aW5nCiAgICogZmlsZSwgcGFzcyBbRmlsZU1vZGUuYXBwZW5kXSBhcyB0aGUgb3B0aW9uYWwgbW9kZSBwYXJhbWV0ZXIuCiAgICoKICAgKiBJZiB0aGUgYXJndW1lbnQgW2ZsdXNoXSBpcyBzZXQgdG8gYHRydWVgLCB0aGUgZGF0YSB3cml0dGVuIHdpbGwgYmUKICAgKiBmbHVzaGVkIHRvIHRoZSBmaWxlIHN5c3RlbSBiZWZvcmUgdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMuCiAgICoKICAgKi8KICBGdXR1cmU8RmlsZT4gd3JpdGVBc1N0cmluZyhTdHJpbmcgY29udGVudHMsCiAgICAgIHtGaWxlTW9kZSBtb2RlOiBGaWxlTW9kZS53cml0ZSwKICAgICAgRW5jb2RpbmcgZW5jb2Rpbmc6IHV0ZjgsCiAgICAgIGJvb2wgZmx1c2g6IGZhbHNlfSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgd3JpdGUgYSBzdHJpbmcgdG8gYSBmaWxlLgogICAqCiAgICogT3BlbnMgdGhlIGZpbGUsIHdyaXRlcyB0aGUgc3RyaW5nIGluIHRoZSBnaXZlbiBlbmNvZGluZywgYW5kIGNsb3NlcyB0aGUKICAgKiBmaWxlLgogICAqCiAgICogQnkgZGVmYXVsdCBbd3JpdGVBc1N0cmluZ1N5bmNdIGNyZWF0ZXMgdGhlIGZpbGUgZm9yIHdyaXRpbmcgYW5kCiAgICogdHJ1bmNhdGVzIHRoZSBmaWxlIGlmIGl0IGFscmVhZHkgZXhpc3RzLiBJbiBvcmRlciB0byBhcHBlbmQgdGhlIGJ5dGVzCiAgICogdG8gYW4gZXhpc3RpbmcgZmlsZSwgcGFzcyBbRmlsZU1vZGUuYXBwZW5kXSBhcyB0aGUgb3B0aW9uYWwgbW9kZQogICAqIHBhcmFtZXRlci4KICAgKgogICAqIElmIHRoZSBbZmx1c2hdIGFyZ3VtZW50IGlzIHNldCB0byBgdHJ1ZWAgZGF0YSB3cml0dGVuIHdpbGwgYmUKICAgKiBmbHVzaGVkIHRvIHRoZSBmaWxlIHN5c3RlbSBiZWZvcmUgcmV0dXJuaW5nLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgdm9pZCB3cml0ZUFzU3RyaW5nU3luYyhTdHJpbmcgY29udGVudHMsCiAgICAgIHtGaWxlTW9kZSBtb2RlOiBGaWxlTW9kZS53cml0ZSwKICAgICAgRW5jb2RpbmcgZW5jb2Rpbmc6IHV0ZjgsCiAgICAgIGJvb2wgZmx1c2g6IGZhbHNlfSk7CgogIC8qKgogICAqIEdldCB0aGUgcGF0aCBvZiB0aGUgZmlsZS4KICAgKi8KICBTdHJpbmcgZ2V0IHBhdGg7Cn0KCi8qKgogKiBgUmFuZG9tQWNjZXNzRmlsZWAgcHJvdmlkZXMgcmFuZG9tIGFjY2VzcyB0byB0aGUgZGF0YSBpbiBhCiAqIGZpbGUuCiAqCiAqIGBSYW5kb21BY2Nlc3NGaWxlYCBvYmplY3RzIGFyZSBvYnRhaW5lZCBieSBjYWxsaW5nIHRoZQogKiBgb3BlbmAgbWV0aG9kIG9uIGEgW0ZpbGVdIG9iamVjdC4KICoKICogQSBgUmFuZG9tQWNjZXNzRmlsZWAgaGF2ZSBib3RoIGFzeW5jaHJvbm91cyBhbmQgc3luY2hyb25vdXMKICogbWV0aG9kcy4gVGhlIGFzeW5jaHJvbm91cyBtZXRob2RzIGFsbCByZXR1cm4gYSBgRnV0dXJlYAogKiB3aGVyZWFzIHRoZSBzeW5jaHJvbm91cyBtZXRob2RzIHdpbGwgcmV0dXJuIHRoZSByZXN1bHQgZGlyZWN0bHksCiAqIGFuZCBibG9jayB0aGUgY3VycmVudCBpc29sYXRlIHVudGlsIHRoZSByZXN1bHQgaXMgcmVhZHkuCiAqCiAqIEF0IG1vc3Qgb25lIGFzeW5jaHJvbm91cyBtZXRob2QgY2FuIGJlIHBlbmRpbmcgb24gYSBnaXZlbiBgUmFuZG9tQWNjZXNzRmlsZWAKICogaW5zdGFuY2UgYXQgdGhlIHRpbWUuIElmIGFuIGFzeW5jaHJvbm91cyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gb25lIGlzCiAqIGFscmVhZHkgaW4gcHJvZ3Jlc3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaXMgdGhyb3duLgogKgogKiBJZiBhbiBhc3luY2hyb25vdXMgbWV0aG9kIGlzIHBlbmRpbmcgaXQgaXMgYWxzbyBub3QgcG9zc2libGUgdG8gY2FsbCBhbnkKICogc3luY2hyb25vdXMgbWV0aG9kcy4gVGhpcyB3aWxsIGFsc28gdGhyb3cgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0uCiAqLwphYnN0cmFjdCBjbGFzcyBSYW5kb21BY2Nlc3NGaWxlIHsKICAvKioKICAgKiBDbG9zZXMgdGhlIGZpbGUuIFJldHVybnMgYSBgRnV0dXJlYCB0aGF0CiAgICogY29tcGxldGVzIHdoZW4gaXQgaGFzIGJlZW4gY2xvc2VkLgogICAqLwogIEZ1dHVyZTx2b2lkPiBjbG9zZSgpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGNsb3NlcyB0aGUgZmlsZS4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIHZvaWQgY2xvc2VTeW5jKCk7CgogIC8qKgogICAqIFJlYWRzIGEgYnl0ZSBmcm9tIHRoZSBmaWxlLiBSZXR1cm5zIGEgYEZ1dHVyZTxpbnQ+YCB0aGF0CiAgICogY29tcGxldGVzIHdpdGggdGhlIGJ5dGUsIG9yIHdpdGggLTEgaWYgZW5kLW9mLWZpbGUgaGFzIGJlZW4gcmVhY2hlZC4KICAgKi8KICBGdXR1cmU8aW50PiByZWFkQnl0ZSgpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHJlYWRzIGEgc2luZ2xlIGJ5dGUgZnJvbSB0aGUgZmlsZS4gSWYgZW5kLW9mLWZpbGUKICAgKiBoYXMgYmVlbiByZWFjaGVkIC0xIGlzIHJldHVybmVkLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgaW50IHJlYWRCeXRlU3luYygpOwoKICAvKioKICAgKiBSZWFkcyBbYnl0ZXNdIGJ5dGVzIGZyb20gYSBmaWxlIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgYXMgYSBsaXN0IG9mIGJ5dGVzLgogICAqLwogIEZ1dHVyZTxVaW50OExpc3Q+IHJlYWQoaW50IGJ5dGVzKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSByZWFkcyBhIG1heGltdW0gb2YgW2J5dGVzXSBieXRlcyBmcm9tIGEgZmlsZSBhbmQKICAgKiByZXR1cm5zIHRoZSByZXN1bHQgaW4gYSBsaXN0IG9mIGJ5dGVzLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgVWludDhMaXN0IHJlYWRTeW5jKGludCBieXRlcyk7CgogIC8qKgogICAqIFJlYWRzIGludG8gYW4gZXhpc3RpbmcgW0xpc3Q8aW50Pl0gZnJvbSB0aGUgZmlsZS4gSWYgW3N0YXJ0XSBpcyBwcmVzZW50LAogICAqIHRoZSBieXRlcyB3aWxsIGJlIGZpbGxlZCBpbnRvIFtidWZmZXJdIGZyb20gYXQgaW5kZXggW3N0YXJ0XSwgb3RoZXJ3aXNlCiAgICogaW5kZXggMC4gSWYgW2VuZF0gaXMgcHJlc2VudCwgdGhlIFtlbmRdIC0gW3N0YXJ0XSBieXRlcyB3aWxsIGJlIHJlYWQgaW50bwogICAqIFtidWZmZXJdLCBvdGhlcndpc2UgdXAgdG8gW2J1ZmZlci5sZW5ndGhdLiBJZiBbZW5kXSA9PSBbc3RhcnRdIG5vdGhpbmcKICAgKiBoYXBwZW5zLgogICAqCiAgICogUmV0dXJucyBhIGBGdXR1cmU8aW50PmAgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCiAgICovCiAgRnV0dXJlPGludD4gcmVhZEludG8oTGlzdDxpbnQ+IGJ1ZmZlciwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSByZWFkcyBpbnRvIGFuIGV4aXN0aW5nIFtMaXN0PGludD5dIGZyb20gdGhlIGZpbGUgYW5kIHJldHVybnMKICAgKiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCiAgICoKICAgKiBJZiBbc3RhcnRdIGlzIHByZXNlbnQsIHRoZSBieXRlcyB3aWxsIGJlIGZpbGxlZCBpbnRvIFtidWZmZXJdIGZyb20gYXQKICAgKiBpbmRleCBbc3RhcnRdLCBvdGhlcndpc2UgaW5kZXggMC4gIElmIFtlbmRdIGlzIHByZXNlbnQsIHRoZQogICAqIFtlbmRdIC0gW3N0YXJ0XSBieXRlcyB3aWxsIGJlIHJlYWQgaW50byBbYnVmZmVyXSwgb3RoZXJ3aXNlIHVwIHRvCiAgICogW2J1ZmZlci5sZW5ndGhdLiBJZiBbZW5kXSA9PSBbc3RhcnRdIG5vdGhpbmcgaGFwcGVucy4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIGludCByZWFkSW50b1N5bmMoTGlzdDxpbnQ+IGJ1ZmZlciwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKTsKCiAgLyoqCiAgICogV3JpdGVzIGEgc2luZ2xlIGJ5dGUgdG8gdGhlIGZpbGUuIFJldHVybnMgYQogICAqIGBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhpcwogICAqIFJhbmRvbUFjY2Vzc0ZpbGUgd2hlbiB0aGUgd3JpdGUgY29tcGxldGVzLgogICAqLwogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiB3cml0ZUJ5dGUoaW50IHZhbHVlKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSB3cml0ZXMgYSBzaW5nbGUgYnl0ZSB0byB0aGUgZmlsZS4gUmV0dXJucyB0aGUKICAgKiBudW1iZXIgb2YgYnl0ZXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4uCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICBpbnQgd3JpdGVCeXRlU3luYyhpbnQgdmFsdWUpOwoKICAvKioKICAgKiBXcml0ZXMgZnJvbSBhIFtMaXN0PGludD5dIHRvIHRoZSBmaWxlLiBJdCB3aWxsIHJlYWQgdGhlIGJ1ZmZlciBmcm9tIGluZGV4CiAgICogW3N0YXJ0XSB0byBpbmRleCBbZW5kXS4gSWYgW3N0YXJ0XSBpcyBvbWl0dGVkLCBpdCdsbCBzdGFydCBmcm9tIGluZGV4IDAuCiAgICogSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgd2lsbCB3cml0ZSB0byBlbmQgb2YgW2J1ZmZlcl0uCiAgICoKICAgKiBSZXR1cm5zIGEgYEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPmAgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGlzCiAgICogW1JhbmRvbUFjY2Vzc0ZpbGVdIHdoZW4gdGhlIHdyaXRlIGNvbXBsZXRlcy4KICAgKi8KICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gd3JpdGVGcm9tKExpc3Q8aW50PiBidWZmZXIsCiAgICAgIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgd3JpdGVzIGZyb20gYSBbTGlzdDxpbnQ+XSB0byB0aGUgZmlsZS4gSXQgd2lsbCByZWFkIHRoZQogICAqIGJ1ZmZlciBmcm9tIGluZGV4IFtzdGFydF0gdG8gaW5kZXggW2VuZF0uIElmIFtzdGFydF0gaXMgb21pdHRlZCwgaXQnbGwKICAgKiBzdGFydCBmcm9tIGluZGV4IDAuIElmIFtlbmRdIGlzIG9taXR0ZWQsIGl0IHdpbGwgd3JpdGUgdG8gdGhlIGVuZCBvZgogICAqIFtidWZmZXJdLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgdm9pZCB3cml0ZUZyb21TeW5jKExpc3Q8aW50PiBidWZmZXIsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSk7CgogIC8qKgogICAqIFdyaXRlcyBhIHN0cmluZyB0byB0aGUgZmlsZSB1c2luZyB0aGUgZ2l2ZW4gW0VuY29kaW5nXS4gUmV0dXJucyBhCiAgICogYEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPmAgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGlzCiAgICogUmFuZG9tQWNjZXNzRmlsZSB3aGVuIHRoZSB3cml0ZSBjb21wbGV0ZXMuCiAgICovCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IHdyaXRlU3RyaW5nKFN0cmluZyBzdHJpbmcsCiAgICAgIHtFbmNvZGluZyBlbmNvZGluZzogdXRmOH0pOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHdyaXRlcyBhIHNpbmdsZSBzdHJpbmcgdG8gdGhlIGZpbGUgdXNpbmcgdGhlIGdpdmVuCiAgICogW0VuY29kaW5nXS4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIHZvaWQgd3JpdGVTdHJpbmdTeW5jKFN0cmluZyBzdHJpbmcsIHtFbmNvZGluZyBlbmNvZGluZzogdXRmOH0pOwoKICAvKioKICAgKiBHZXRzIHRoZSBjdXJyZW50IGJ5dGUgcG9zaXRpb24gaW4gdGhlIGZpbGUuIFJldHVybnMgYQogICAqIGBGdXR1cmU8aW50PmAgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGUgcG9zaXRpb24uCiAgICovCiAgRnV0dXJlPGludD4gcG9zaXRpb24oKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBnZXRzIHRoZSBjdXJyZW50IGJ5dGUgcG9zaXRpb24gaW4gdGhlIGZpbGUuCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICBpbnQgcG9zaXRpb25TeW5jKCk7CgogIC8qKgogICAqIFNldHMgdGhlIGJ5dGUgcG9zaXRpb24gaW4gdGhlIGZpbGUuIFJldHVybnMgYQogICAqIGBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhpcwogICAqIFJhbmRvbUFjY2Vzc0ZpbGUgd2hlbiB0aGUgcG9zaXRpb24gaGFzIGJlZW4gc2V0LgogICAqLwogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiBzZXRQb3NpdGlvbihpbnQgcG9zaXRpb24pOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHNldHMgdGhlIGJ5dGUgcG9zaXRpb24gaW4gdGhlIGZpbGUuCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICB2b2lkIHNldFBvc2l0aW9uU3luYyhpbnQgcG9zaXRpb24pOwoKICAvKioKICAgKiBUcnVuY2F0ZXMgKG9yIGV4dGVuZHMpIHRoZSBmaWxlIHRvIFtsZW5ndGhdIGJ5dGVzLiBSZXR1cm5zIGEKICAgKiBgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+YCB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoaXMKICAgKiBSYW5kb21BY2Nlc3NGaWxlIHdoZW4gdGhlIHRydW5jYXRpb24gaGFzIGJlZW4gcGVyZm9ybWVkLgogICAqLwogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiB0cnVuY2F0ZShpbnQgbGVuZ3RoKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSB0cnVuY2F0ZXMgKG9yIGV4dGVuZHMpIHRoZSBmaWxlIHRvIFtsZW5ndGhdIGJ5dGVzLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgdm9pZCB0cnVuY2F0ZVN5bmMoaW50IGxlbmd0aCk7CgogIC8qKgogICAqIEdldHMgdGhlIGxlbmd0aCBvZiB0aGUgZmlsZS4gUmV0dXJucyBhIGBGdXR1cmU8aW50PmAgdGhhdAogICAqIGNvbXBsZXRlcyB3aXRoIHRoZSBsZW5ndGggaW4gYnl0ZXMuCiAgICovCiAgRnV0dXJlPGludD4gbGVuZ3RoKCk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgZ2V0cyB0aGUgbGVuZ3RoIG9mIHRoZSBmaWxlLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgaW50IGxlbmd0aFN5bmMoKTsKCiAgLyoqCiAgICogRmx1c2hlcyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgdG8gZGlzay4gUmV0dXJucyBhCiAgICogYEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPmAgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGlzCiAgICogUmFuZG9tQWNjZXNzRmlsZSB3aGVuIHRoZSBmbHVzaCBvcGVyYXRpb24gY29tcGxldGVzLgogICAqLwogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiBmbHVzaCgpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGZsdXNoZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIHRvIGRpc2suCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICB2b2lkIGZsdXNoU3luYygpOwoKICAvKioKICAgKiBMb2NrcyB0aGUgZmlsZSBvciBwYXJ0IG9mIHRoZSBmaWxlLgogICAqCiAgICogQnkgZGVmYXVsdCBhbiBleGNsdXNpdmUgbG9jayB3aWxsIGJlIG9idGFpbmVkLCBidXQgdGhhdCBjYW4gYmUgb3ZlcnJpZGRlbgogICAqIGJ5IHRoZSBbbW9kZV0gYXJndW1lbnQuCiAgICoKICAgKiBMb2NrcyB0aGUgYnl0ZSByYW5nZSBmcm9tIFtzdGFydF0gdG8gW2VuZF0gb2YgdGhlIGZpbGUsIHdpdGggdGhlCiAgICogYnl0ZSBhdCBwb3NpdGlvbiBgZW5kYCBub3QgaW5jbHVkZWQuIElmIG5vIGFyZ3VtZW50cyBhcmUKICAgKiBzcGVjaWZpZWQsIHRoZSBmdWxsIGZpbGUgaXMgbG9ja2VkLCBJZiBvbmx5IGBzdGFydGAgaXMgc3BlY2lmaWVkCiAgICogdGhlIGZpbGUgaXMgbG9ja2VkIGZyb20gYnl0ZSBwb3NpdGlvbiBgc3RhcnRgIHRvIHRoZSBlbmQgb2YgdGhlCiAgICogZmlsZSwgbm8gbWF0dGVyIGhvdyBsYXJnZSBpdCBncm93cy4gSXQgaXMgcG9zc2libGUgdG8gc3BlY2lmeSBhbgogICAqIGV4cGxpY2l0IHZhbHVlIG9mIGBlbmRgIHdoaWNoIGlzIHBhc3QgdGhlIGN1cnJlbnQgbGVuZ3RoIG9mIHRoZSBmaWxlLgogICAqCiAgICogVG8gb2J0YWluIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIGEgZmlsZSBpdCBtdXN0IGJlIG9wZW5lZCBmb3Igd3JpdGluZy4KICAgKgogICAqIElmIFttb2RlXSBpcyBbRmlsZUxvY2suZXhjbHVzaXZlXSBvciBbRmlsZUxvY2suc2hhcmVkXSwgYW4gZXJyb3IgaXMKICAgKiBzaWduYWxlZCBpZiB0aGUgbG9jayBjYW5ub3QgYmUgb2J0YWluZWQuIElmIFttb2RlXSBpcwogICAqIFtGaWxlTG9jay5ibG9ja2luZ0V4Y2x1c2l2ZV0gb3IgW0ZpbGVMb2NrLmJsb2NraW5nU2hhcmVkXSwgdGhlCiAgICogcmV0dXJuZWQgW0Z1dHVyZV0gaXMgcmVzb2x2ZWQgb25seSB3aGVuIHRoZSBsb2NrIGhhcyBiZWVuIG9idGFpbmVkLgogICAqCiAgICogKk5PVEUqIGZpbGUgbG9ja2luZyBkb2VzIGhhdmUgc2xpZ2h0IGRpZmZlcmVuY2VzIGluIGJlaGF2aW9yIGFjcm9zcwogICAqIHBsYXRmb3JtczoKICAgKgogICAqIE9uIExpbnV4IGFuZCBPUyBYIHRoaXMgdXNlcyBhZHZpc29yeSBsb2Nrcywgd2hpY2ggaGF2ZSB0aGUKICAgKiBzdXJwcmlzaW5nIHNlbWFudGljcyB0aGF0IGFsbCBsb2NrcyBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBmaWxlCiAgICogYXJlIHJlbW92ZWQgd2hlbiAqYW55KiBmaWxlIGRlc2NyaXB0b3IgZm9yIHRoYXQgZmlsZSBpcyBjbG9zZWQgYnkKICAgKiB0aGUgcHJvY2Vzcy4gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYWN0dWFsbHkgbG9jayB0aGUgZmlsZSBmb3IKICAgKiBhY2Nlc3MuIEFsc28gbm90ZSB0aGF0IGFkdmlzb3J5IGxvY2tzIGFyZSBvbiBhIHByb2Nlc3MKICAgKiBsZXZlbC4gVGhpcyBtZWFucyB0aGF0IHNldmVyYWwgaXNvbGF0ZXMgaW4gdGhlIHNhbWUgcHJvY2VzcyBjYW4KICAgKiBvYnRhaW4gYW4gZXhjbHVzaXZlIGxvY2sgb24gdGhlIHNhbWUgZmlsZS4KICAgKgogICAqIE9uIFdpbmRvd3MgdGhlIHJlZ2lvbnMgdXNlZCBmb3IgbG9jayBhbmQgdW5sb2NrIG5lZWRzIHRvIG1hdGNoLiBJZiB0aGF0CiAgICogaXMgbm90IHRoZSBjYXNlIHVubG9ja2luZyB3aWxsIHJlc3VsdCBpbiB0aGUgT1MgZXJyb3IgIlRoZSBzZWdtZW50IGlzCiAgICogYWxyZWFkeSB1bmxvY2tlZCIuCiAgICovCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IGxvY2soCiAgICAgIFtGaWxlTG9jayBtb2RlID0gRmlsZUxvY2suZXhjbHVzaXZlLCBpbnQgc3RhcnQgPSAwLCBpbnQgZW5kID0gLTFdKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBsb2NrcyB0aGUgZmlsZSBvciBwYXJ0IG9mIHRoZSBmaWxlLgogICAqCiAgICogQnkgZGVmYXVsdCBhbiBleGNsdXNpdmUgbG9jayB3aWxsIGJlIG9idGFpbmVkLCBidXQgdGhhdCBjYW4gYmUgb3ZlcnJpZGRlbgogICAqIGJ5IHRoZSBbbW9kZV0gYXJndW1lbnQuCiAgICoKICAgKiBMb2NrcyB0aGUgYnl0ZSByYW5nZSBmcm9tIFtzdGFydF0gdG8gW2VuZF0gb2YgdGhlIGZpbGUgLHdpdGggdGhlCiAgICogYnl0ZSBhdCBwb3NpdGlvbiBgZW5kYCBub3QgaW5jbHVkZWQuIElmIG5vIGFyZ3VtZW50cyBhcmUKICAgKiBzcGVjaWZpZWQsIHRoZSBmdWxsIGZpbGUgaXMgbG9ja2VkLCBJZiBvbmx5IGBzdGFydGAgaXMgc3BlY2lmaWVkCiAgICogdGhlIGZpbGUgaXMgbG9ja2VkIGZyb20gYnl0ZSBwb3NpdGlvbiBgc3RhcnRgIHRvIHRoZSBlbmQgb2YgdGhlCiAgICogZmlsZSwgbm8gbWF0dGVyIGhvdyBsYXJnZSBpdCBncm93cy4gSXQgaXMgcG9zc2libGUgdG8gc3BlY2lmeSBhbgogICAqIGV4cGxpY2l0IHZhbHVlIG9mIGBlbmRgIHdoaWNoIGlzIHBhc3QgdGhlIGN1cnJlbnQgbGVuZ3RoIG9mIHRoZSBmaWxlLgogICAqCiAgICogVG8gb2J0YWluIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIGEgZmlsZSBpdCBtdXN0IGJlIG9wZW5lZCBmb3Igd3JpdGluZy4KICAgKgogICAqIElmIFttb2RlXSBpcyBbRmlsZUxvY2suZXhjbHVzaXZlXSBvciBbRmlsZUxvY2suc2hhcmVkXSwgYW4gZXhjZXB0aW9uIGlzCiAgICogdGhyb3duIGlmIHRoZSBsb2NrIGNhbm5vdCBiZSBvYnRhaW5lZC4gSWYgW21vZGVdIGlzCiAgICogW0ZpbGVMb2NrLmJsb2NraW5nRXhjbHVzaXZlXSBvciBbRmlsZUxvY2suYmxvY2tpbmdTaGFyZWRdLCB0aGUKICAgKiBjYWxsIHJldHVybnMgb25seSBhZnRlciB0aGUgbG9jayBoYXMgYmVlbiBvYnRhaW5lZC4KICAgKgogICAqICpOT1RFKiBmaWxlIGxvY2tpbmcgZG9lcyBoYXZlIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciBhY3Jvc3MKICAgKiBwbGF0Zm9ybXM6CiAgICoKICAgKiBPbiBMaW51eCBhbmQgT1MgWCB0aGlzIHVzZXMgYWR2aXNvcnkgbG9ja3MsIHdoaWNoIGhhdmUgdGhlCiAgICogc3VycHJpc2luZyBzZW1hbnRpY3MgdGhhdCBhbGwgbG9ja3MgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gZmlsZQogICAqIGFyZSByZW1vdmVkIHdoZW4gKmFueSogZmlsZSBkZXNjcmlwdG9yIGZvciB0aGF0IGZpbGUgaXMgY2xvc2VkIGJ5CiAgICogdGhlIHByb2Nlc3MuIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFjdHVhbGx5IGxvY2sgdGhlIGZpbGUgZm9yCiAgICogYWNjZXNzLiBBbHNvIG5vdGUgdGhhdCBhZHZpc29yeSBsb2NrcyBhcmUgb24gYSBwcm9jZXNzCiAgICogbGV2ZWwuIFRoaXMgbWVhbnMgdGhhdCBzZXZlcmFsIGlzb2xhdGVzIGluIHRoZSBzYW1lIHByb2Nlc3MgY2FuCiAgICogb2J0YWluIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZSBzYW1lIGZpbGUuCiAgICoKICAgKiBPbiBXaW5kb3dzIHRoZSByZWdpb25zIHVzZWQgZm9yIGxvY2sgYW5kIHVubG9jayBuZWVkcyB0byBtYXRjaC4gSWYgdGhhdAogICAqIGlzIG5vdCB0aGUgY2FzZSB1bmxvY2tpbmcgd2lsbCByZXN1bHQgaW4gdGhlIE9TIGVycm9yICJUaGUgc2VnbWVudCBpcwogICAqIGFscmVhZHkgdW5sb2NrZWQiLgogICAqCiAgICovCiAgdm9pZCBsb2NrU3luYygKICAgICAgW0ZpbGVMb2NrIG1vZGUgPSBGaWxlTG9jay5leGNsdXNpdmUsIGludCBzdGFydCA9IDAsIGludCBlbmQgPSAtMV0pOwoKICAvKioKICAgKiBVbmxvY2tzIHRoZSBmaWxlIG9yIHBhcnQgb2YgdGhlIGZpbGUuCiAgICoKICAgKiBVbmxvY2tzIHRoZSBieXRlIHJhbmdlIGZyb20gW3N0YXJ0XSB0byBbZW5kXSBvZiB0aGUgZmlsZSwgd2l0aAogICAqIHRoZSBieXRlIGF0IHBvc2l0aW9uIGBlbmRgIG5vdCBpbmNsdWRlZC4gSWYgbm8gYXJndW1lbnRzIGFyZQogICAqIHNwZWNpZmllZCwgdGhlIGZ1bGwgZmlsZSBpcyB1bmxvY2tlZCwgSWYgb25seSBgc3RhcnRgIGlzCiAgICogc3BlY2lmaWVkIHRoZSBmaWxlIGlzIHVubG9ja2VkIGZyb20gYnl0ZSBwb3NpdGlvbiBgc3RhcnRgIHRvIHRoZQogICAqIGVuZCBvZiB0aGUgZmlsZS4KICAgKgogICAqICpOT1RFKiBmaWxlIGxvY2tpbmcgZG9lcyBoYXZlIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciBhY3Jvc3MKICAgKiBwbGF0Zm9ybXM6CiAgICoKICAgKiBTZWUgW2xvY2tdIGZvciBtb3JlIGRldGFpbHMuCiAgICovCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IHVubG9jayhbaW50IHN0YXJ0ID0gMCwgaW50IGVuZCA9IC0xXSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgdW5sb2NrcyB0aGUgZmlsZSBvciBwYXJ0IG9mIHRoZSBmaWxlLgogICAqCiAgICogVW5sb2NrcyB0aGUgYnl0ZSByYW5nZSBmcm9tIFtzdGFydF0gdG8gW2VuZF0gb2YgdGhlIGZpbGUsIHdpdGgKICAgKiB0aGUgYnl0ZSBhdCBwb3NpdGlvbiBgZW5kYCBub3QgaW5jbHVkZWQuIElmIG5vIGFyZ3VtZW50cyBhcmUKICAgKiBzcGVjaWZpZWQsIHRoZSBmdWxsIGZpbGUgaXMgdW5sb2NrZWQsIElmIG9ubHkgYHN0YXJ0YCBpcwogICAqIHNwZWNpZmllZCB0aGUgZmlsZSBpcyB1bmxvY2tlZCBmcm9tIGJ5dGUgcG9zaXRpb24gYHN0YXJ0YCB0byB0aGUKICAgKiBlbmQgb2YgdGhlIGZpbGUuCiAgICoKICAgKiAqTk9URSogZmlsZSBsb2NraW5nIGRvZXMgaGF2ZSBzbGlnaHQgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3IgYWNyb3NzCiAgICogcGxhdGZvcm1zOgogICAqCiAgICogU2VlIFtsb2NrU3luY10gZm9yIG1vcmUgZGV0YWlscy4KICAgKi8KICB2b2lkIHVubG9ja1N5bmMoW2ludCBzdGFydCA9IDAsIGludCBlbmQgPSAtMV0pOwoKICAvKioKICAgKiBSZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIGZvciB0aGlzIFJhbmRvbUFjY2Vzc0ZpbGUgaW5zdGFuY2UuCiAgICovCiAgU3RyaW5nIHRvU3RyaW5nKCk7CgogIC8qKgogICAqIEdldHMgdGhlIHBhdGggb2YgdGhlIGZpbGUgdW5kZXJseWluZyB0aGlzIFJhbmRvbUFjY2Vzc0ZpbGUuCiAgICovCiAgU3RyaW5nIGdldCBwYXRoOwp9CgovKioKICogRXhjZXB0aW9uIHRocm93biB3aGVuIGEgZmlsZSBvcGVyYXRpb24gZmFpbHMuCiAqLwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIEZpbGVTeXN0ZW1FeGNlcHRpb24gaW1wbGVtZW50cyBJT0V4Y2VwdGlvbiB7CiAgLyoqCiAgICogTWVzc2FnZSBkZXNjcmliaW5nIHRoZSBlcnJvci4gVGhpcyBkb2VzIG5vdCBpbmNsdWRlIGFueSBkZXRhaWxlZAogICAqIGluZm9ybWF0aW9uIGZvcm0gdGhlIHVuZGVybHlpbmcgT1MgZXJyb3IuIENoZWNrIFtvc0Vycm9yXSBmb3IKICAgKiB0aGF0IGluZm9ybWF0aW9uLgogICAqLwogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwoKICAvKioKICAgKiBUaGUgZmlsZSBzeXN0ZW0gcGF0aCBvbiB3aGljaCB0aGUgZXJyb3Igb2NjdXJyZWQuIENhbiBiZSBgbnVsbGAKICAgKiBpZiB0aGUgZXhjZXB0aW9uIGRvZXMgbm90IHJlbGF0ZSBkaXJlY3RseSB0byBhIGZpbGUgc3lzdGVtIHBhdGguCiAgICovCiAgZmluYWwgU3RyaW5nIHBhdGg7CgogIC8qKgogICAqIFRoZSB1bmRlcmx5aW5nIE9TIGVycm9yLiBDYW4gYmUgYG51bGxgIGlmIHRoZSBleGNlcHRpb24gaXMgbm90CiAgICogcmFpc2VkIGR1ZSB0byBhbiBPUyBlcnJvci4KICAgKi8KICBmaW5hbCBPU0Vycm9yIG9zRXJyb3I7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbiB3aXRoIGFuIG9wdGlvbmFsIGVycm9yIG1lc3NhZ2UKICAgKiBbbWVzc2FnZV0sIG9wdGlvbmFsIGZpbGUgc3lzdGVtIHBhdGggW3BhdGhdIGFuZCBvcHRpb25hbCBPUyBlcnJvcgogICAqIFtvc0Vycm9yXS4KICAgKi8KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgY29uc3QgRmlsZVN5c3RlbUV4Y2VwdGlvbihbdGhpcy5tZXNzYWdlID0gIiIsIHRoaXMucGF0aCA9ICIiLCB0aGlzLm9zRXJyb3JdKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUo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ZiBkYXJ0LmlvOwoKLy8gUmVhZCB0aGUgZmlsZSBpbiBibG9ja3Mgb2Ygc2l6ZSA2NGsuCmNvbnN0IGludCBfYmxvY2tTaXplID0gNjQgKiAxMDI0OwoKY2xhc3MgX0ZpbGVTdHJlYW0gZXh0ZW5kcyBTdHJlYW08TGlzdDxpbnQ+PiB7CiAgLy8gU3RyZWFtIGNvbnRyb2xsZXIuCiAgU3RyZWFtQ29udHJvbGxlcjxVaW50OExpc3Q+IF9jb250cm9sbGVyOwoKICAvLyBJbmZvcm1hdGlvbiBhYm91dCB0aGUgdW5kZXJseWluZyBmaWxlLgogIFN0cmluZyBfcGF0aDsKICBSYW5kb21BY2Nlc3NGaWxlIF9vcGVuZWRGaWxlOwogIGludCBfcG9zaXRpb247CiAgaW50IF9lbmQ7CiAgZmluYWwgQ29tcGxldGVyIF9jbG9zZUNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXIoKTsKCiAgLy8gSGFzIHRoZSBzdHJlYW0gYmVlbiBwYXVzZWQgb3IgdW5zdWJzY3JpYmVkPwogIGJvb2wgX3Vuc3Vic2NyaWJlZCA9IGZhbHNlOwoKICAvLyBJcyB0aGVyZSBhIHJlYWQgY3VycmVudGx5IGluIHByb2dyZXNzPwogIGJvb2wgX3JlYWRJblByb2dyZXNzID0gdHJ1ZTsKICBib29sIF9jbG9zZWQgPSBmYWxzZTsKCiAgYm9vbCBfYXRFbmQgPSBmYWxzZTsKCiAgX0ZpbGVTdHJlYW0odGhpcy5fcGF0aCwgdGhpcy5fcG9zaXRpb24sIHRoaXMuX2VuZCkgewogICAgX3Bvc2l0aW9uID8/PSAwOwogIH0KCiAgX0ZpbGVTdHJlYW0uZm9yU3RkaW4oKSA6IF9wb3NpdGlvbiA9IDA7CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxVaW50OExpc3Q+IGxpc3Rlbih2b2lkIG9uRGF0YShVaW50OExpc3QgZXZlbnQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgX3NldHVwQ29udHJvbGxlcigpOwogICAgcmV0dXJuIF9jb250cm9sbGVyLnN0cmVhbS5saXN0ZW4ob25EYXRhLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsIG9uRG9uZTogb25Eb25lLCBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKTsKICB9CgogIHZvaWQgX3NldHVwQ29udHJvbGxlcigpIHsKICAgIF9jb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8VWludDhMaXN0PigKICAgICAgICBzeW5jOiB0cnVlLAogICAgICAgIG9uTGlzdGVuOiBfc3RhcnQsCiAgICAgICAgb25SZXN1bWU6IF9yZWFkQmxvY2ssCiAgICAgICAgb25DYW5jZWw6ICgpIHsKICAgICAgICAgIF91bnN1YnNjcmliZWQgPSB0cnVlOwogICAgICAgICAgcmV0dXJuIF9jbG9zZUZpbGUoKTsKICAgICAgICB9KTsKICB9CgogIEZ1dHVyZSBfY2xvc2VGaWxlKCkgewogICAgaWYgKF9yZWFkSW5Qcm9ncmVzcyB8fCBfY2xvc2VkKSB7CiAgICAgIHJldHVybiBfY2xvc2VDb21wbGV0ZXIuZnV0dXJlOwogICAgfQogICAgX2Nsb3NlZCA9IHRydWU7CgogICAgdm9pZCBkb25lKCkgewogICAgICBfY2xvc2VDb21wbGV0ZXIuY29tcGxldGUoKTsKICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgIH0KCiAgICBfb3BlbmVkRmlsZS5jbG9zZSgpLmNhdGNoRXJyb3IoX2NvbnRyb2xsZXIuYWRkRXJyb3IpLndoZW5Db21wbGV0ZShkb25lKTsKICAgIHJldHVybiBfY2xvc2VDb21wbGV0ZXIuZnV0dXJlOwogIH0KCiAgdm9pZCBfcmVhZEJsb2NrKCkgewogICAgLy8gRG9uJ3Qgc3RhcnQgYSBuZXcgcmVhZCBpZiBvbmUgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcy4KICAgIGlmIChfcmVhZEluUHJvZ3Jlc3MpIHJldHVybjsKICAgIGlmIChfYXRFbmQpIHsKICAgICAgX2Nsb3NlRmlsZSgpOwogICAgICByZXR1cm47CiAgICB9CiAgICBfcmVhZEluUHJvZ3Jlc3MgPSB0cnVlOwogICAgaW50IHJlYWRCeXRlcyA9IF9ibG9ja1NpemU7CiAgICBpZiAoX2VuZCAhPSBudWxsKSB7CiAgICAgIHJlYWRCeXRlcyA9IG1pbihyZWFkQnl0ZXMsIF9lbmQgLSBfcG9zaXRpb24pOwogICAgICBpZiAocmVhZEJ5dGVzIDwgMCkgewogICAgICAgIF9yZWFkSW5Qcm9ncmVzcyA9IGZhbHNlOwogICAgICAgIGlmICghX3Vuc3Vic2NyaWJlZCkgewogICAgICAgICAgX2NvbnRyb2xsZXIuYWRkRXJyb3IobmV3IFJhbmdlRXJyb3IoIkJhZCBlbmQgcG9zaXRpb246ICRfZW5kIikpOwogICAgICAgICAgX2Nsb3NlRmlsZSgpOwogICAgICAgICAgX3Vuc3Vic2NyaWJlZCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgX29wZW5lZEZpbGUucmVhZChyZWFkQnl0ZXMpLnRoZW4oKGJsb2NrKSB7CiAgICAgIF9yZWFkSW5Qcm9ncmVzcyA9IGZhbHNlOwogICAgICBpZiAoX3Vuc3Vic2NyaWJlZCkgewogICAgICAgIF9jbG9zZUZpbGUoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX3Bvc2l0aW9uICs9IGJsb2NrLmxlbmd0aDsKICAgICAgaWYgKGJsb2NrLmxlbmd0aCA8IHJlYWRCeXRlcyB8fCAoX2VuZCAhPSBudWxsICYmIF9wb3NpdGlvbiA9PSBfZW5kKSkgewogICAgICAgIF9hdEVuZCA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKCFfYXRFbmQgJiYgIV9jb250cm9sbGVyLmlzUGF1c2VkKSB7CiAgICAgICAgX3JlYWRCbG9jaygpOwogICAgICB9CiAgICAgIF9jb250cm9sbGVyLmFkZChibG9jayk7CiAgICAgIGlmIChfYXRFbmQpIHsKICAgICAgICBfY2xvc2VGaWxlKCk7CiAgICAgIH0KICAgIH0pLmNhdGNoRXJyb3IoKGUsIHMpIHsKICAgICAgaWYgKCFfdW5zdWJzY3JpYmVkKSB7CiAgICAgICAgX2NvbnRyb2xsZXIuYWRkRXJyb3IoZSwgcyk7CiAgICAgICAgX2Nsb3NlRmlsZSgpOwogICAgICAgIF91bnN1YnNjcmliZWQgPSB0cnVlOwogICAgICB9CiAgICB9KTsKICB9CgogIHZvaWQgX3N0YXJ0KCkgewogICAgaWYgKF9wb3NpdGlvbiA8IDApIHsKICAgICAgX2NvbnRyb2xsZXIuYWRkRXJyb3IobmV3IFJhbmdlRXJyb3IoIkJhZCBzdGFydCBwb3NpdGlvbjogJF9wb3NpdGlvbiIpKTsKICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgICAgX2Nsb3NlQ29tcGxldGVyLmNvbXBsZXRlKCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB2b2lkIG9uUmVhZHkoUmFuZG9tQWNjZXNzRmlsZSBmaWxlKSB7CiAgICAgIF9vcGVuZWRGaWxlID0gZmlsZTsKICAgICAgX3JlYWRJblByb2dyZXNzID0gZmFsc2U7CiAgICAgIF9yZWFkQmxvY2soKTsKICAgIH0KCiAgICB2b2lkIG9uT3BlbkZpbGUoUmFuZG9tQWNjZXNzRmlsZSBmaWxlKSB7CiAgICAgIGlmIChfcG9zaXRpb24gPiAwKSB7CiAgICAgICAgZmlsZS5zZXRQb3NpdGlvbihfcG9zaXRpb24pLnRoZW4ob25SZWFkeSwgb25FcnJvcjogKGUsIHMpIHsKICAgICAgICAgIF9jb250cm9sbGVyLmFkZEVycm9yKGUsIHMpOwogICAgICAgICAgX3JlYWRJblByb2dyZXNzID0gZmFsc2U7CiAgICAgICAgICBfY2xvc2VGaWxlKCk7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb25SZWFkeShmaWxlKTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgb3BlbkZhaWxlZChlcnJvciwgc3RhY2tUcmFjZSkgewogICAgICBfY29udHJvbGxlci5hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICAgIF9jbG9zZUNvbXBsZXRlci5jb21wbGV0ZSgpOwogICAgfQoKICAgIGlmIChfcGF0aCAhPSBudWxsKSB7CiAgICAgIG5ldyBGaWxlKF9wYXRoKQogICAgICAgICAgLm9wZW4obW9kZTogRmlsZU1vZGUucmVhZCkKICAgICAgICAgIC50aGVuKG9uT3BlbkZpbGUsIG9uRXJyb3I6IG9wZW5GYWlsZWQpOwogICAgfSBlbHNlIHsKICAgICAgdHJ5IHsKICAgICAgICBvbk9wZW5GaWxlKF9GaWxlLl9vcGVuU3RkaW9TeW5jKDApKTsKICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgIG9wZW5GYWlsZWQoZSwgcyk7CiAgICAgIH0KICAgIH0KICB9Cn0KCmNsYXNzIF9GaWxlU3RyZWFtQ29uc3VtZXIgZXh0ZW5kcyBTdHJlYW1Db25zdW1lcjxMaXN0PGludD4+IHsKICBGaWxlIF9maWxlOwogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiBfb3BlbkZ1dHVyZTsKCiAgX0ZpbGVTdHJlYW1Db25zdW1lcih0aGlzLl9maWxlLCBGaWxlTW9kZSBtb2RlKSB7CiAgICBfb3BlbkZ1dHVyZSA9IF9maWxlLm9wZW4obW9kZTogbW9kZSk7CiAgfQoKICBfRmlsZVN0cmVhbUNvbnN1bWVyLmZyb21TdGRpbyhpbnQgZmQpIHsKICAgIF9vcGVuRnV0dXJlID0gbmV3IEZ1dHVyZS52YWx1ZShfRmlsZS5fb3BlblN0ZGlvU3luYyhmZCkpOwogIH0KCiAgRnV0dXJlPEZpbGU+IGFkZFN0cmVhbShTdHJlYW08TGlzdDxpbnQ+PiBzdHJlYW0pIHsKICAgIENvbXBsZXRlcjxGaWxlPiBjb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPEZpbGU+LnN5bmMoKTsKICAgIF9vcGVuRnV0dXJlLnRoZW4oKG9wZW5lZEZpbGUpIHsKICAgICAgdmFyIF9zdWJzY3JpcHRpb247CiAgICAgIHZvaWQgZXJyb3IoZSwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgICAgICBfc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogICAgICAgIG9wZW5lZEZpbGUuY2xvc2UoKTsKICAgICAgICBjb21wbGV0ZXIuY29tcGxldGVFcnJvcihlLCBzdGFja1RyYWNlKTsKICAgICAgfQoKICAgICAgX3N1YnNjcmlwdGlvbiA9IHN0cmVhbS5saXN0ZW4oKGQpIHsKICAgICAgICBfc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIG9wZW5lZEZpbGUKICAgICAgICAgICAgICAud3JpdGVGcm9tKGQsIDAsIGQubGVuZ3RoKQogICAgICAgICAgICAgIC50aGVuKChfKSA9PiBfc3Vic2NyaXB0aW9uLnJlc3VtZSgpLCBvbkVycm9yOiBlcnJvcik7CiAgICAgICAgfSBjYXRjaCAoZSwgc3RhY2tUcmFjZSkgewogICAgICAgICAgZXJyb3IoZSwgc3RhY2tUcmFjZSk7CiAgICAgICAgfQogICAgICB9LCBvbkRvbmU6ICgpIHsKICAgICAgICBjb21wbGV0ZXIuY29tcGxldGUoX2ZpbGUpOwogICAgICB9LCBvbkVycm9yOiBlcnJvciwgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICB9KS5jYXRjaEVycm9yKGNvbXBsZXRlci5jb21wbGV0ZUVycm9yKTsKICAgIHJldHVybiBjb21wbGV0ZXIuZnV0dXJlOwogIH0KCiAgRnV0dXJlPEZpbGU+IGNsb3NlKCkgPT4KICAgICAgX29wZW5GdXR1cmUudGhlbigob3BlbmVkRmlsZSkgPT4gb3BlbmVkRmlsZS5jbG9zZSgpKS50aGVuKChfKSA9PiBfZmlsZSk7Cn0KCi8vIENsYXNzIGZvciBlbmNhcHN1bGF0aW5nIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgZmlsZXMuCmNsYXNzIF9GaWxlIGV4dGVuZHMgRmlsZVN5c3RlbUVudGl0eSBpbXBsZW1lbnRzIEZpbGUgewogIFN0cmluZyBfcGF0aDsKICBVaW50OExpc3QgX3Jhd1BhdGg7CgogIF9GaWxlKFN0cmluZyBwYXRoKSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChwYXRoLCAncGF0aCcpOwogICAgX3BhdGggPSBwYXRoOwogICAgX3Jhd1BhdGggPSBGaWxlU3lzdGVtRW50aXR5Ll90b1V0ZjhBcnJheShwYXRoKTsKICB9CgogIF9GaWxlLmZyb21SYXdQYXRoKFVpbnQ4TGlzdCByYXdQYXRoKSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChyYXdQYXRoLCAncmF3UGF0aCcpOwogICAgX3Jhd1BhdGggPSBGaWxlU3lzdGVtRW50aXR5Ll90b051bGxUZXJtaW5hdGVkVXRmOEFycmF5KHJhd1BhdGgpOwogICAgX3BhdGggPSBGaWxlU3lzdGVtRW50aXR5Ll90b1N0cmluZ0Zyb21VdGY4QXJyYXkocmF3UGF0aCk7CiAgfQoKICBTdHJpbmcgZ2V0IHBhdGggPT4gX3BhdGg7CgogIC8vIFdBUk5JTkc6CiAgLy8gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgaW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiB0aGUgbmF0aXZlCiAgLy8gbmFtZXNwYWNlIG9iamVjdC4gSXQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHRvIHBhc3MgdGhlIHBvaW50ZXIgdG8gdGhlCiAgLy8gSU9TZXJ2aWNlLCB3aGljaCB3aWxsIGRlY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IHdoZW4gaXQgaXMgZmluaXNoZWQKICAvLyB3aXRoIGl0LgogIHN0YXRpYyBpbnQgX25hbWVzcGFjZVBvaW50ZXIoKSA9PiBfTmFtZXNwYWNlLl9uYW1lc3BhY2VQb2ludGVyOwoKICBzdGF0aWMgRnV0dXJlIF9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoaW50IHJlcXVlc3QsIExpc3QgZGF0YSkgewogICAgZGF0YVswXSA9IF9uYW1lc3BhY2VQb2ludGVyKCk7CiAgICByZXR1cm4gX0lPU2VydmljZS5fZGlzcGF0Y2gocmVxdWVzdCwgZGF0YSk7CiAgfQoKICBGdXR1cmU8Ym9vbD4gZXhpc3RzKCkgewogICAgcmV0dXJuIF9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoX0lPU2VydmljZS5maWxlRXhpc3RzLCBbbnVsbCwgX3Jhd1BhdGhdKQogICAgICAgIC50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAiQ2Fubm90IGNoZWNrIGV4aXN0ZW5jZSIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiByZXNwb25zZTsKICAgIH0pOwogIH0KCiAgZXh0ZXJuYWwgc3RhdGljIF9leGlzdHMoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKTsKCiAgYm9vbCBleGlzdHNTeW5jKCkgewogICAgdmFyIHJlc3VsdCA9IF9leGlzdHMoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCk7CiAgICB0aHJvd0lmRXJyb3IocmVzdWx0LCAiQ2Fubm90IGNoZWNrIGV4aXN0ZW5jZSBvZiBmaWxlIiwgcGF0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRmlsZSBnZXQgYWJzb2x1dGUgPT4gbmV3IEZpbGUoX2Fic29sdXRlUGF0aCk7CgogIEZ1dHVyZTxGaWxlPiBjcmVhdGUoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pIHsKICAgIHZhciByZXN1bHQgPQogICAgICAgIHJlY3Vyc2l2ZSA/IHBhcmVudC5jcmVhdGUocmVjdXJzaXZlOiB0cnVlKSA6IG5ldyBGdXR1cmUudmFsdWUobnVsbCk7CiAgICByZXR1cm4gcmVzdWx0CiAgICAgICAgLnRoZW4oKF8pID0+CiAgICAgICAgICAgIF9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoX0lPU2VydmljZS5maWxlQ3JlYXRlLCBbbnVsbCwgX3Jhd1BhdGhdKSkKICAgICAgICAudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgIkNhbm5vdCBjcmVhdGUgZmlsZSIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgfQoKICBleHRlcm5hbCBzdGF0aWMgX2NyZWF0ZShfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpOwoKICBleHRlcm5hbCBzdGF0aWMgX2NyZWF0ZUxpbmsoCiAgICAgIF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCwgU3RyaW5nIHRhcmdldCk7CgogIGV4dGVybmFsIHN0YXRpYyBfbGlua1RhcmdldChfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpOwoKICB2b2lkIGNyZWF0ZVN5bmMoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pIHsKICAgIGlmIChyZWN1cnNpdmUpIHsKICAgICAgcGFyZW50LmNyZWF0ZVN5bmMocmVjdXJzaXZlOiB0cnVlKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfY3JlYXRlKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgpOwogICAgdGhyb3dJZkVycm9yKHJlc3VsdCwgIkNhbm5vdCBjcmVhdGUgZmlsZSIsIHBhdGgpOwogIH0KCiAgRnV0dXJlPEZpbGU+IF9kZWxldGUoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pIHsKICAgIGlmIChyZWN1cnNpdmUpIHsKICAgICAgcmV0dXJuIG5ldyBEaXJlY3RvcnkocGF0aCkuZGVsZXRlKHJlY3Vyc2l2ZTogdHJ1ZSkudGhlbigoXykgPT4gdGhpcyk7CiAgICB9CiAgICByZXR1cm4gX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZShfSU9TZXJ2aWNlLmZpbGVEZWxldGUsIFtudWxsLCBfcmF3UGF0aF0pCiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJDYW5ub3QgZGVsZXRlIGZpbGUiLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0pOwogIH0KCiAgZXh0ZXJuYWwgc3RhdGljIF9kZWxldGVOYXRpdmUoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKTsKCiAgZXh0ZXJuYWwgc3RhdGljIF9kZWxldGVMaW5rTmF0aXZlKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCk7CgogIHZvaWQgX2RlbGV0ZVN5bmMoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pIHsKICAgIGlmIChyZWN1cnNpdmUpIHsKICAgICAgcmV0dXJuIG5ldyBEaXJlY3RvcnkuZnJvbVJhd1BhdGgoX3Jhd1BhdGgpLmRlbGV0ZVN5bmMocmVjdXJzaXZlOiB0cnVlKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfZGVsZXRlTmF0aXZlKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgpOwogICAgdGhyb3dJZkVycm9yKHJlc3VsdCwgIkNhbm5vdCBkZWxldGUgZmlsZSIsIHBhdGgpOwogIH0KCiAgRnV0dXJlPEZpbGU+IHJlbmFtZShTdHJpbmcgbmV3UGF0aCkgewogICAgcmV0dXJuIF9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoCiAgICAgICAgX0lPU2VydmljZS5maWxlUmVuYW1lLCBbbnVsbCwgX3Jhd1BhdGgsIG5ld1BhdGhdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKAogICAgICAgICAgICByZXNwb25zZSwgIkNhbm5vdCByZW5hbWUgZmlsZSB0byAnJG5ld1BhdGgnIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBGaWxlKG5ld1BhdGgpOwogICAgfSk7CiAgfQoKICBleHRlcm5hbCBzdGF0aWMgX3JlbmFtZSgKICAgICAgX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCBvbGRQYXRoLCBTdHJpbmcgbmV3UGF0aCk7CgogIGV4dGVybmFsIHN0YXRpYyBfcmVuYW1lTGluaygKICAgICAgX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCBvbGRQYXRoLCBTdHJpbmcgbmV3UGF0aCk7CgogIEZpbGUgcmVuYW1lU3luYyhTdHJpbmcgbmV3UGF0aCkgewogICAgdmFyIHJlc3VsdCA9IF9yZW5hbWUoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCwgbmV3UGF0aCk7CiAgICB0aHJvd0lmRXJyb3IocmVzdWx0LCAiQ2Fubm90IHJlbmFtZSBmaWxlIHRvICckbmV3UGF0aCciLCBwYXRoKTsKICAgIHJldHVybiBuZXcgRmlsZShuZXdQYXRoKTsKICB9CgogIEZ1dHVyZTxGaWxlPiBjb3B5KFN0cmluZyBuZXdQYXRoKSB7CiAgICByZXR1cm4gX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICBfSU9TZXJ2aWNlLmZpbGVDb3B5LCBbbnVsbCwgX3Jhd1BhdGgsIG5ld1BhdGhdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKAogICAgICAgICAgICByZXNwb25zZSwgIkNhbm5vdCBjb3B5IGZpbGUgdG8gJyRuZXdQYXRoJyIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgRmlsZShuZXdQYXRoKTsKICAgIH0pOwogIH0KCiAgZXh0ZXJuYWwgc3RhdGljIF9jb3B5KAogICAgICBfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IG9sZFBhdGgsIFN0cmluZyBuZXdQYXRoKTsKCiAgRmlsZSBjb3B5U3luYyhTdHJpbmcgbmV3UGF0aCkgewogICAgdmFyIHJlc3VsdCA9IF9jb3B5KF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgsIG5ld1BhdGgpOwogICAgdGhyb3dJZkVycm9yKHJlc3VsdCwgIkNhbm5vdCBjb3B5IGZpbGUgdG8gJyRuZXdQYXRoJyIsIHBhdGgpOwogICAgcmV0dXJuIG5ldyBGaWxlKG5ld1BhdGgpOwogIH0KCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IG9wZW4oe0ZpbGVNb2RlIG1vZGU6IEZpbGVNb2RlLnJlYWR9KSB7CiAgICBpZiAobW9kZSAhPSBGaWxlTW9kZS5yZWFkICYmCiAgICAgICAgbW9kZSAhPSBGaWxlTW9kZS53cml0ZSAmJgogICAgICAgIG1vZGUgIT0gRmlsZU1vZGUuYXBwZW5kICYmCiAgICAgICAgbW9kZSAhPSBGaWxlTW9kZS53cml0ZU9ubHkgJiYKICAgICAgICBtb2RlICE9IEZpbGVNb2RlLndyaXRlT25seUFwcGVuZCkgewogICAgICByZXR1cm4gbmV3IEZ1dHVyZS5lcnJvcigKICAgICAgICAgIG5ldyBBcmd1bWVudEVycm9yKCdJbnZhbGlkIGZpbGUgbW9kZSBmb3IgdGhpcyBvcGVyYXRpb24nKSk7CiAgICB9CiAgICByZXR1cm4gX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICBfSU9TZXJ2aWNlLmZpbGVPcGVuLCBbbnVsbCwgX3Jhd1BhdGgsIG1vZGUuX21vZGVdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAiQ2Fubm90IG9wZW4gZmlsZSIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgX1JhbmRvbUFjY2Vzc0ZpbGUocmVzcG9uc2UsIHBhdGgpOwogICAgfSk7CiAgfQoKICBGdXR1cmU8aW50PiBsZW5ndGgoKSB7CiAgICByZXR1cm4gX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICBfSU9TZXJ2aWNlLmZpbGVMZW5ndGhGcm9tUGF0aCwgW251bGwsIF9yYXdQYXRoXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZSgKICAgICAgICAgICAgcmVzcG9uc2UsICJDYW5ub3QgcmV0cmlldmUgbGVuZ3RoIG9mIGZpbGUiLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICB9KTsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBfbGVuZ3RoRnJvbVBhdGgoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKTsKCiAgaW50IGxlbmd0aFN5bmMoKSB7CiAgICB2YXIgcmVzdWx0ID0gX2xlbmd0aEZyb21QYXRoKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgpOwogICAgdGhyb3dJZkVycm9yKHJlc3VsdCwgIkNhbm5vdCByZXRyaWV2ZSBsZW5ndGggb2YgZmlsZSIsIHBhdGgpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEZ1dHVyZTxEYXRlVGltZT4gbGFzdEFjY2Vzc2VkKCkgewogICAgcmV0dXJuIF9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoX0lPU2VydmljZS5maWxlTGFzdEFjY2Vzc2VkLCBbbnVsbCwgX3Jhd1BhdGhdKQogICAgICAgIC50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKAogICAgICAgICAgICByZXNwb25zZSwgIkNhbm5vdCByZXRyaWV2ZSBhY2Nlc3MgdGltZSIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUuZnJvbU1pbGxpc2Vjb25kc1NpbmNlRXBvY2gocmVzcG9uc2UpOwogICAgfSk7CiAgfQoKICBleHRlcm5hbCBzdGF0aWMgX2xhc3RBY2Nlc3NlZChfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpOwoKICBEYXRlVGltZSBsYXN0QWNjZXNzZWRTeW5jKCkgewogICAgdmFyIG1zID0gX2xhc3RBY2Nlc3NlZChfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoKTsKICAgIHRocm93SWZFcnJvcihtcywgIkNhbm5vdCByZXRyaWV2ZSBhY2Nlc3MgdGltZSIsIHBhdGgpOwogICAgcmV0dXJuIG5ldyBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaChtcyk7CiAgfQoKICBGdXR1cmUgc2V0TGFzdEFjY2Vzc2VkKERhdGVUaW1lIHRpbWUpIHsKICAgIGludCBtaWxsaXMgPSB0aW1lLm1pbGxpc2Vjb25kc1NpbmNlRXBvY2g7CiAgICByZXR1cm4gX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICAgICAgX0lPU2VydmljZS5maWxlU2V0TGFzdEFjY2Vzc2VkLCBbbnVsbCwgX3Jhd1BhdGgsIG1pbGxpc10pCiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJDYW5ub3Qgc2V0IGFjY2VzcyB0aW1lIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9KTsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBfc2V0TGFzdEFjY2Vzc2VkKAogICAgICBfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgsIGludCBtaWxsaXMpOwoKICB2b2lkIHNldExhc3RBY2Nlc3NlZFN5bmMoRGF0ZVRpbWUgdGltZSkgewogICAgaW50IG1pbGxpcyA9IHRpbWUubWlsbGlzZWNvbmRzU2luY2VFcG9jaDsKICAgIHZhciByZXN1bHQgPSBfc2V0TGFzdEFjY2Vzc2VkKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgsIG1pbGxpcyk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oCiAgICAgICAgICAiRmFpbGVkIHRvIHNldCBmaWxlIGFjY2VzcyB0aW1lIiwgcGF0aCwgcmVzdWx0KTsKICAgIH0KICB9CgogIEZ1dHVyZTxEYXRlVGltZT4gbGFzdE1vZGlmaWVkKCkgewogICAgcmV0dXJuIF9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoX0lPU2VydmljZS5maWxlTGFzdE1vZGlmaWVkLCBbbnVsbCwgX3Jhd1BhdGhdKQogICAgICAgIC50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKAogICAgICAgICAgICByZXNwb25zZSwgIkNhbm5vdCByZXRyaWV2ZSBtb2RpZmljYXRpb24gdGltZSIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUuZnJvbU1pbGxpc2Vjb25kc1NpbmNlRXBvY2gocmVzcG9uc2UpOwogICAgfSk7CiAgfQoKICBleHRlcm5hbCBzdGF0aWMgX2xhc3RNb2RpZmllZChfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpOwoKICBEYXRlVGltZSBsYXN0TW9kaWZpZWRTeW5jKCkgewogICAgdmFyIG1zID0gX2xhc3RNb2RpZmllZChfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoKTsKICAgIHRocm93SWZFcnJvcihtcywgIkNhbm5vdCByZXRyaWV2ZSBtb2RpZmljYXRpb24gdGltZSIsIHBhdGgpOwogICAgcmV0dXJuIG5ldyBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaChtcyk7CiAgfQoKICBGdXR1cmUgc2V0TGFzdE1vZGlmaWVkKERhdGVUaW1lIHRpbWUpIHsKICAgIGludCBtaWxsaXMgPSB0aW1lLm1pbGxpc2Vjb25kc1NpbmNlRXBvY2g7CiAgICByZXR1cm4gX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICAgICAgX0lPU2VydmljZS5maWxlU2V0TGFzdE1vZGlmaWVkLCBbbnVsbCwgX3Jhd1BhdGgsIG1pbGxpc10pCiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UoCiAgICAgICAgICAgIHJlc3BvbnNlLCAiQ2Fubm90IHNldCBtb2RpZmljYXRpb24gdGltZSIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfSk7CiAgfQoKICBleHRlcm5hbCBzdGF0aWMgX3NldExhc3RNb2RpZmllZCgKICAgICAgX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoLCBpbnQgbWlsbGlzKTsKCiAgdm9pZCBzZXRMYXN0TW9kaWZpZWRTeW5jKERhdGVUaW1lIHRpbWUpIHsKICAgIGludCBtaWxsaXMgPSB0aW1lLm1pbGxpc2Vjb25kc1NpbmNlRXBvY2g7CiAgICB2YXIgcmVzdWx0ID0gX3NldExhc3RNb2RpZmllZChfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoLCBtaWxsaXMpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKAogICAgICAgICAgIkZhaWxlZCB0byBzZXQgZmlsZSBtb2RpZmljYXRpb24gdGltZSIsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgfQoKICBleHRlcm5hbCBzdGF0aWMgX29wZW4oX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoLCBpbnQgbW9kZSk7CgogIFJhbmRvbUFjY2Vzc0ZpbGUgb3BlblN5bmMoe0ZpbGVNb2RlIG1vZGU6IEZpbGVNb2RlLnJlYWR9KSB7CiAgICBpZiAobW9kZSAhPSBGaWxlTW9kZS5yZWFkICYmCiAgICAgICAgbW9kZSAhPSBGaWxlTW9kZS53cml0ZSAmJgogICAgICAgIG1vZGUgIT0gRmlsZU1vZGUuYXBwZW5kICYmCiAgICAgICAgbW9kZSAhPSBGaWxlTW9kZS53cml0ZU9ubHkgJiYKICAgICAgICBtb2RlICE9IEZpbGVNb2RlLndyaXRlT25seUFwcGVuZCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignSW52YWxpZCBmaWxlIG1vZGUgZm9yIHRoaXMgb3BlcmF0aW9uJyk7CiAgICB9CiAgICB2YXIgaWQgPSBfb3BlbihfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoLCBtb2RlLl9tb2RlKTsKICAgIHRocm93SWZFcnJvcihpZCwgIkNhbm5vdCBvcGVuIGZpbGUiLCBwYXRoKTsKICAgIHJldHVybiBuZXcgX1JhbmRvbUFjY2Vzc0ZpbGUoaWQsIF9wYXRoKTsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBpbnQgX29wZW5TdGRpbyhpbnQgZmQpOwoKICBzdGF0aWMgUmFuZG9tQWNjZXNzRmlsZSBfb3BlblN0ZGlvU3luYyhpbnQgZmQpIHsKICAgIHZhciBpZCA9IF9vcGVuU3RkaW8oZmQpOwogICAgaWYgKGlkID09IDApIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oIkNhbm5vdCBvcGVuIHN0ZGlvIGZpbGUgZm9yOiAkZmQiKTsKICAgIH0KICAgIHJldHVybiBuZXcgX1JhbmRvbUFjY2Vzc0ZpbGUoaWQsICIiKTsKICB9CgogIFN0cmVhbTxMaXN0PGludD4+IG9wZW5SZWFkKFtpbnQgc3RhcnQsIGludCBlbmRdKSB7CiAgICByZXR1cm4gbmV3IF9GaWxlU3RyZWFtKHBhdGgsIHN0YXJ0LCBlbmQpOwogIH0KCiAgSU9TaW5rIG9wZW5Xcml0ZSh7RmlsZU1vZGUgbW9kZTogRmlsZU1vZGUud3JpdGUsIEVuY29kaW5nIGVuY29kaW5nOiB1dGY4fSkgewogICAgaWYgKG1vZGUgIT0gRmlsZU1vZGUud3JpdGUgJiYKICAgICAgICBtb2RlICE9IEZpbGVNb2RlLmFwcGVuZCAmJgogICAgICAgIG1vZGUgIT0gRmlsZU1vZGUud3JpdGVPbmx5ICYmCiAgICAgICAgbW9kZSAhPSBGaWxlTW9kZS53cml0ZU9ubHlBcHBlbmQpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgZmlsZSBtb2RlIGZvciB0aGlzIG9wZXJhdGlvbicpOwogICAgfQogICAgdmFyIGNvbnN1bWVyID0gbmV3IF9GaWxlU3RyZWFtQ29uc3VtZXIodGhpcywgbW9kZSk7CiAgICByZXR1cm4gbmV3IElPU2luayhjb25zdW1lciwgZW5jb2Rpbmc6IGVuY29kaW5nKTsKICB9CgogIEZ1dHVyZTxVaW50OExpc3Q+IHJlYWRBc0J5dGVzKCkgewogICAgRnV0dXJlPFVpbnQ4TGlzdD4gcmVhZERhdGFDaHVua2VkKFJhbmRvbUFjY2Vzc0ZpbGUgZmlsZSkgewogICAgICB2YXIgYnVpbGRlciA9IG5ldyBCeXRlc0J1aWxkZXIoY29weTogZmFsc2UpOwogICAgICB2YXIgY29tcGxldGVyID0gbmV3IENvbXBsZXRlcjxVaW50OExpc3Q+KCk7CiAgICAgIHZvaWQgcmVhZCgpIHsKICAgICAgICBmaWxlLnJlYWQoX2Jsb2NrU2l6ZSkudGhlbigoZGF0YSkgewogICAgICAgICAgaWYgKGRhdGEubGVuZ3RoID4gMCkgewogICAgICAgICAgICBidWlsZGVyLmFkZChkYXRhKTsKICAgICAgICAgICAgcmVhZCgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29tcGxldGVyLmNvbXBsZXRlKGJ1aWxkZXIudGFrZUJ5dGVzKCkpOwogICAgICAgICAgfQogICAgICAgIH0sIG9uRXJyb3I6IGNvbXBsZXRlci5jb21wbGV0ZUVycm9yKTsKICAgICAgfQoKICAgICAgcmVhZCgpOwogICAgICByZXR1cm4gY29tcGxldGVyLmZ1dHVyZTsKICAgIH0KCiAgICByZXR1cm4gb3BlbigpLnRoZW4oKGZpbGUpIHsKICAgICAgcmV0dXJuIGZpbGUubGVuZ3RoKCkudGhlbigobGVuZ3RoKSB7CiAgICAgICAgaWYgKGxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAvLyBNYXkgYmUgY2hhcmFjdGVyIGRldmljZSwgdHJ5IHRvIHJlYWQgaXQgaW4gY2h1bmtzLgogICAgICAgICAgcmV0dXJuIHJlYWREYXRhQ2h1bmtlZChmaWxlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZpbGUucmVhZChsZW5ndGgpOwogICAgICB9KS53aGVuQ29tcGxldGUoZmlsZS5jbG9zZSk7CiAgICB9KTsKICB9CgogIFVpbnQ4TGlzdCByZWFkQXNCeXRlc1N5bmMoKSB7CiAgICB2YXIgb3BlbmVkID0gb3BlblN5bmMoKTsKICAgIHRyeSB7CiAgICAgIFVpbnQ4TGlzdCBkYXRhOwogICAgICB2YXIgbGVuZ3RoID0gb3BlbmVkLmxlbmd0aFN5bmMoKTsKICAgICAgaWYgKGxlbmd0aCA9PSAwKSB7CiAgICAgICAgLy8gTWF5IGJlIGNoYXJhY3RlciBkZXZpY2UsIHRyeSB0byByZWFkIGl0IGluIGNodW5rcy4KICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBCeXRlc0J1aWxkZXIoY29weTogZmFsc2UpOwogICAgICAgIGRvIHsKICAgICAgICAgIGRhdGEgPSBvcGVuZWQucmVhZFN5bmMoX2Jsb2NrU2l6ZSk7CiAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSBidWlsZGVyLmFkZChkYXRhKTsKICAgICAgICB9IHdoaWxlIChkYXRhLmxlbmd0aCA+IDApOwogICAgICAgIGRhdGEgPSBidWlsZGVyLnRha2VCeXRlcygpOwogICAgICB9IGVsc2UgewogICAgICAgIGRhdGEgPSBvcGVuZWQucmVhZFN5bmMobGVuZ3RoKTsKICAgICAgfQogICAgICByZXR1cm4gZGF0YTsKICAgIH0gZmluYWxseSB7CiAgICAgIG9wZW5lZC5jbG9zZVN5bmMoKTsKICAgIH0KICB9CgogIFN0cmluZyBfdHJ5RGVjb2RlKExpc3Q8aW50PiBieXRlcywgRW5jb2RpbmcgZW5jb2RpbmcpIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiBlbmNvZGluZy5kZWNvZGUoYnl0ZXMpOwogICAgfSBjYXRjaCAoXykgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigKICAgICAgICAgICJGYWlsZWQgdG8gZGVjb2RlIGRhdGEgdXNpbmcgZW5jb2RpbmcgJyR7ZW5jb2RpbmcubmFtZX0nIiwgcGF0aCk7CiAgICB9CiAgfQoKICBGdXR1cmU8U3RyaW5nPiByZWFkQXNTdHJpbmcoe0VuY29kaW5nIGVuY29kaW5nOiB1dGY4fSkgewogICAgLy8gVE9ETyhkYXJ0OmlvKTogSWYgdGhlIGNoYW5nZSBpbiBhc3luYyBzZW1hbnRpY3MgdG8gcnVuIHN5bmNocm9ub3VzbHkKICAgIC8vIHVudGlsIGF3YWl0IGxhbmRzLCB0aGlzIGlzIGFzIGVmZmljaWVudCBhcwogICAgLy8gcmV0dXJuIF90cnlEZWNvZGUoYXdhaXQgcmVhZEFzQnl0ZXMoKSwgZW5jb2RpbmcpOwogICAgdmFyIHN0YWNrID0gU3RhY2tUcmFjZS5jdXJyZW50OwogICAgcmV0dXJuIHJlYWRBc0J5dGVzKCkudGhlbigoYnl0ZXMpIHsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gX3RyeURlY29kZShieXRlcywgZW5jb2RpbmcpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBGdXR1cmUuZXJyb3IoZSwgc3RhY2spOwogICAgICB9CiAgICB9KTsKICB9CgogIFN0cmluZyByZWFkQXNTdHJpbmdTeW5jKHtFbmNvZGluZyBlbmNvZGluZzogdXRmOH0pID0+CiAgICAgIF90cnlEZWNvZGUocmVhZEFzQnl0ZXNTeW5jKCksIGVuY29kaW5nKTsKCiAgRnV0dXJlPExpc3Q8U3RyaW5nPj4gcmVhZEFzTGluZXMoe0VuY29kaW5nIGVuY29kaW5nOiB1dGY4fSkgPT4KICAgICAgcmVhZEFzU3RyaW5nKGVuY29kaW5nOiBlbmNvZGluZykudGhlbihjb25zdCBMaW5lU3BsaXR0ZXIoKS5jb252ZXJ0KTsKCiAgTGlzdDxTdHJpbmc+IHJlYWRBc0xpbmVzU3luYyh7RW5jb2RpbmcgZW5jb2Rpbmc6IHV0Zjh9KSA9PgogICAgICBjb25zdCBMaW5lU3BsaXR0ZXIoKS5jb252ZXJ0KHJlYWRBc1N0cmluZ1N5bmMoZW5jb2Rpbmc6IGVuY29kaW5nKSk7CgogIEZ1dHVyZTxGaWxlPiB3cml0ZUFzQnl0ZXMoTGlzdDxpbnQ+IGJ5dGVzLAogICAgICB7RmlsZU1vZGUgbW9kZTogRmlsZU1vZGUud3JpdGUsIGJvb2wgZmx1c2g6IGZhbHNlfSkgewogICAgcmV0dXJuIG9wZW4obW9kZTogbW9kZSkudGhlbigoZmlsZSkgewogICAgICByZXR1cm4gZmlsZS53cml0ZUZyb20oYnl0ZXMsIDAsIGJ5dGVzLmxlbmd0aCkudGhlbjxGaWxlPigoXykgewogICAgICAgIGlmIChmbHVzaCkgcmV0dXJuIGZpbGUuZmx1c2goKS50aGVuKChfKSA9PiB0aGlzKTsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfSkud2hlbkNvbXBsZXRlKGZpbGUuY2xvc2UpOwogICAgfSk7CiAgfQoKICB2b2lkIHdyaXRlQXNCeXRlc1N5bmMoTGlzdDxpbnQ+IGJ5dGVzLAogICAgICB7RmlsZU1vZGUgbW9kZTogRmlsZU1vZGUud3JpdGUsIGJvb2wgZmx1c2g6IGZhbHNlfSkgewogICAgUmFuZG9tQWNjZXNzRmlsZSBvcGVuZWQgPSBvcGVuU3luYyhtb2RlOiBtb2RlKTsKICAgIHRyeSB7CiAgICAgIG9wZW5lZC53cml0ZUZyb21TeW5jKGJ5dGVzLCAwLCBieXRlcy5sZW5ndGgpOwogICAgICBpZiAoZmx1c2gpIG9wZW5lZC5mbHVzaFN5bmMoKTsKICAgIH0gZmluYWxseSB7CiAgICAgIG9wZW5lZC5jbG9zZVN5bmMoKTsKICAgIH0KICB9CgogIEZ1dHVyZTxGaWxlPiB3cml0ZUFzU3RyaW5nKFN0cmluZyBjb250ZW50cywKICAgICAge0ZpbGVNb2RlIG1vZGU6IEZpbGVNb2RlLndyaXRlLAogICAgICBFbmNvZGluZyBlbmNvZGluZzogdXRmOCwKICAgICAgYm9vbCBmbHVzaDogZmFsc2V9KSB7CiAgICB0cnkgewogICAgICByZXR1cm4gd3JpdGVBc0J5dGVzKGVuY29kaW5nLmVuY29kZShjb250ZW50cyksIG1vZGU6IG1vZGUsIGZsdXNoOiBmbHVzaCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHJldHVybiBuZXcgRnV0dXJlLmVycm9yKGUpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUFzU3RyaW5nU3luYyhTdHJpbmcgY29udGVudHMsCiAgICAgIHtGaWxlTW9kZSBtb2RlOiBGaWxlTW9kZS53cml0ZSwKICAgICAgRW5jb2RpbmcgZW5jb2Rpbmc6IHV0ZjgsCiAgICAgIGJvb2wgZmx1c2g6IGZhbHNlfSkgewogICAgd3JpdGVBc0J5dGVzU3luYyhlbmNvZGluZy5lbmNvZGUoY29udGVudHMpLCBtb2RlOiBtb2RlLCBmbHVzaDogZmx1c2gpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkZpbGU6ICckcGF0aCciOwoKICBzdGF0aWMgdGhyb3dJZkVycm9yKE9iamVjdCByZXN1bHQsIFN0cmluZyBtc2csIFN0cmluZyBwYXRoKSB7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24obXNnLCBwYXRoLCByZXN1bHQpOwogICAgfQogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX1JhbmRvbUFjY2Vzc0ZpbGVPcHMgewogIGV4dGVybmFsIGZhY3RvcnkgX1JhbmRvbUFjY2Vzc0ZpbGVPcHMoaW50IHBvaW50ZXIpOwoKICBpbnQgZ2V0UG9pbnRlcigpOwogIGludCBjbG9zZSgpOwogIHJlYWRCeXRlKCk7CiAgcmVhZChpbnQgYnl0ZXMpOwogIHJlYWRJbnRvKExpc3Q8aW50PiBidWZmZXIsIGludCBzdGFydCwgaW50IGVuZCk7CiAgd3JpdGVCeXRlKGludCB2YWx1ZSk7CiAgd3JpdGVGcm9tKExpc3Q8aW50PiBidWZmZXIsIGludCBzdGFydCwgaW50IGVuZCk7CiAgcG9zaXRpb24oKTsKICBzZXRQb3NpdGlvbihpbnQgcG9zaXRpb24pOwogIHRydW5jYXRlKGludCBsZW5ndGgpOwogIGxlbmd0aCgpOwogIGZsdXNoKCk7CiAgbG9jayhpbnQgbG9jaywgaW50IHN0YXJ0LCBpbnQgZW5kKTsKfQoKY2xhc3MgX1JhbmRvbUFjY2Vzc0ZpbGUgaW1wbGVtZW50cyBSYW5kb21BY2Nlc3NGaWxlIHsKICBzdGF0aWMgYm9vbCBfY29ubmVjdGVkUmVzb3VyY2VIYW5kbGVyID0gZmFsc2U7CgogIGZpbmFsIFN0cmluZyBwYXRoOwoKICBib29sIF9hc3luY0Rpc3BhdGNoZWQgPSBmYWxzZTsKICBTZW5kUG9ydCBfZmlsZVNlcnZpY2U7CgogIF9GaWxlUmVzb3VyY2VJbmZvIF9yZXNvdXJjZUluZm87CiAgX1JhbmRvbUFjY2Vzc0ZpbGVPcHMgX29wczsKCiAgX1JhbmRvbUFjY2Vzc0ZpbGUoaW50IHBvaW50ZXIsIHRoaXMucGF0aCkgewogICAgX29wcyA9IG5ldyBfUmFuZG9tQWNjZXNzRmlsZU9wcyhwb2ludGVyKTsKICAgIF9yZXNvdXJjZUluZm8gPSBuZXcgX0ZpbGVSZXNvdXJjZUluZm8odGhpcyk7CiAgICBfbWF5YmVDb25uZWN0SGFuZGxlcigpOwogIH0KCiAgdm9pZCBfbWF5YmVQZXJmb3JtQ2xlYW51cCgpIHsKICAgIGlmIChjbG9zZWQpIHsKICAgICAgX0ZpbGVSZXNvdXJjZUluZm8uRmlsZUNsb3NlZChfcmVzb3VyY2VJbmZvKTsKICAgIH0KICB9CgogIF9tYXliZUNvbm5lY3RIYW5kbGVyKCkgewogICAgaWYgKCFfY29ubmVjdGVkUmVzb3VyY2VIYW5kbGVyKSB7CiAgICAgIC8vIFRPRE8ocmljb3cpOiBXZSBwcm9iYWJseSBuZWVkIHRvIHNldCB0aGVzZSBpbiBzb21lIGluaXRpYWxpemF0aW9uIGNvZGUuCiAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXJlIGFsd2F5cyBhdmFpbGFibGUgZnJvbSB0aGUKICAgICAgLy8gb2JzZXJ2YXRvcnkgZXZlbiBpZiBubyBmaWxlcyAob3Igc29ja2V0cyBmb3IgdGhlIHNvY2tldCBvbmVzKSBhcmUKICAgICAgLy8gb3Blbi4KICAgICAgcmVnaXN0ZXJFeHRlbnNpb24oCiAgICAgICAgICAnZXh0LmRhcnQuaW8uZ2V0T3BlbkZpbGVzJywgX0ZpbGVSZXNvdXJjZUluZm8uZ2V0T3BlbkZpbGVzKTsKICAgICAgcmVnaXN0ZXJFeHRlbnNpb24oCiAgICAgICAgICAnZXh0LmRhcnQuaW8uZ2V0RmlsZUJ5SUQnLCBfRmlsZVJlc291cmNlSW5mby5nZXRGaWxlSW5mb01hcEJ5SUQpOwogICAgICBfY29ubmVjdGVkUmVzb3VyY2VIYW5kbGVyID0gdHJ1ZTsKICAgIH0KICB9CgogIEZ1dHVyZTx2b2lkPiBjbG9zZSgpIHsKICAgIHJldHVybiBfZGlzcGF0Y2goX0lPU2VydmljZS5maWxlQ2xvc2UsIFtudWxsXSwgbWFya0Nsb3NlZDogdHJ1ZSkKICAgICAgICAudGhlbigocmVzdWx0KSB7CiAgICAgIGlmIChyZXN1bHQgPT0gLTEpIHsKICAgICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigiQ2Fubm90IGNsb3NlIGZpbGUiLCBwYXRoKTsKICAgICAgfQogICAgICBjbG9zZWQgPSBjbG9zZWQgfHwgKHJlc3VsdCA9PSAwKTsKICAgICAgX21heWJlUGVyZm9ybUNsZWFudXAoKTsKICAgIH0pOwogIH0KCiAgdm9pZCBjbG9zZVN5bmMoKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIHZhciBpZCA9IF9vcHMuY2xvc2UoKTsKICAgIGlmIChpZCA9PSAtMSkgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigiQ2Fubm90IGNsb3NlIGZpbGUiLCBwYXRoKTsKICAgIH0KICAgIGNsb3NlZCA9IGNsb3NlZCB8fCAoaWQgPT0gMCk7CiAgICBfbWF5YmVQZXJmb3JtQ2xlYW51cCgpOwogIH0KCiAgRnV0dXJlPGludD4gcmVhZEJ5dGUoKSB7CiAgICByZXR1cm4gX2Rpc3BhdGNoKF9JT1NlcnZpY2UuZmlsZVJlYWRCeXRlLCBbbnVsbF0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJyZWFkQnl0ZSBmYWlsZWQiLCBwYXRoKTsKICAgICAgfQogICAgICBfcmVzb3VyY2VJbmZvLmFkZFJlYWQoMSk7CiAgICAgIHJldHVybiByZXNwb25zZTsKICAgIH0pOwogIH0KCiAgaW50IHJlYWRCeXRlU3luYygpIHsKICAgIF9jaGVja0F2YWlsYWJsZSgpOwogICAgdmFyIHJlc3VsdCA9IF9vcHMucmVhZEJ5dGUoKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigicmVhZEJ5dGUgZmFpbGVkIiwgcGF0aCwgcmVzdWx0KTsKICAgIH0KICAgIF9yZXNvdXJjZUluZm8uYWRkUmVhZCgxKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBGdXR1cmU8VWludDhMaXN0PiByZWFkKGludCBieXRlcykgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoYnl0ZXMsICdieXRlcycpOwogICAgcmV0dXJuIF9kaXNwYXRjaChfSU9TZXJ2aWNlLmZpbGVSZWFkLCBbbnVsbCwgYnl0ZXNdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAicmVhZCBmYWlsZWQiLCBwYXRoKTsKICAgICAgfQogICAgICBfcmVzb3VyY2VJbmZvLmFkZFJlYWQocmVzcG9uc2VbMV0ubGVuZ3RoKTsKICAgICAgVWludDhMaXN0IHJlc3VsdCA9IHJlc3BvbnNlWzFdOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSk7CiAgfQoKICBVaW50OExpc3QgcmVhZFN5bmMoaW50IGJ5dGVzKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGJ5dGVzLCAnYnl0ZXMnKTsKICAgIHZhciByZXN1bHQgPSBfb3BzLnJlYWQoYnl0ZXMpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJyZWFkU3luYyBmYWlsZWQiLCBwYXRoLCByZXN1bHQpOwogICAgfQogICAgX3Jlc291cmNlSW5mby5hZGRSZWFkKHJlc3VsdC5sZW5ndGgpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEZ1dHVyZTxpbnQ+IHJlYWRJbnRvKExpc3Q8aW50PiBidWZmZXIsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgaWYgKChidWZmZXIgaXMhIExpc3QpIHx8CiAgICAgICAgKChzdGFydCAhPSBudWxsKSAmJiAoc3RhcnQgaXMhIGludCkpIHx8CiAgICAgICAgKChlbmQgIT0gbnVsbCkgJiYgKGVuZCBpcyEgaW50KSkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgIH0KICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGJ1ZmZlci5sZW5ndGgpOwogICAgaWYgKGVuZCA9PSBzdGFydCkgewogICAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZSgwKTsKICAgIH0KICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIHJldHVybiBfZGlzcGF0Y2goX0lPU2VydmljZS5maWxlUmVhZEludG8sIFtudWxsLCBsZW5ndGhdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAicmVhZEludG8gZmFpbGVkIiwgcGF0aCk7CiAgICAgIH0KICAgICAgaW50IHJlYWQgPSByZXNwb25zZVsxXTsKICAgICAgTGlzdDxpbnQ+IGRhdGEgPSByZXNwb25zZVsyXTsKICAgICAgYnVmZmVyLnNldFJhbmdlKHN0YXJ0LCBzdGFydCArIHJlYWQsIGRhdGEpOwogICAgICBfcmVzb3VyY2VJbmZvLmFkZFJlYWQocmVhZCk7CiAgICAgIHJldHVybiByZWFkOwogICAgfSk7CiAgfQoKICBpbnQgcmVhZEludG9TeW5jKExpc3Q8aW50PiBidWZmZXIsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgX2NoZWNrQXZhaWxhYmxlKCk7CiAgICBpZiAoKGJ1ZmZlciBpcyEgTGlzdCkgfHwKICAgICAgICAoKHN0YXJ0ICE9IG51bGwpICYmIChzdGFydCBpcyEgaW50KSkgfHwKICAgICAgICAoKGVuZCAhPSBudWxsKSAmJiAoZW5kIGlzISBpbnQpKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigpOwogICAgfQogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgYnVmZmVyLmxlbmd0aCk7CiAgICBpZiAoZW5kID09IHN0YXJ0KSB7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9vcHMucmVhZEludG8oYnVmZmVyLCBzdGFydCwgZW5kKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigicmVhZEludG8gZmFpbGVkIiwgcGF0aCwgcmVzdWx0KTsKICAgIH0KICAgIF9yZXNvdXJjZUluZm8uYWRkUmVhZChyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiB3cml0ZUJ5dGUoaW50IHZhbHVlKSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbCh2YWx1ZSwgJ3ZhbHVlJyk7CiAgICByZXR1cm4gX2Rpc3BhdGNoKF9JT1NlcnZpY2UuZmlsZVdyaXRlQnl0ZSwgW251bGwsIHZhbHVlXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgIndyaXRlQnl0ZSBmYWlsZWQiLCBwYXRoKTsKICAgICAgfQogICAgICBfcmVzb3VyY2VJbmZvLmFkZFdyaXRlKDEpOwogICAgICByZXR1cm4gdGhpczsKICAgIH0pOwogIH0KCiAgaW50IHdyaXRlQnl0ZVN5bmMoaW50IHZhbHVlKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKHZhbHVlLCAndmFsdWUnKTsKICAgIHZhciByZXN1bHQgPSBfb3BzLndyaXRlQnl0ZSh2YWx1ZSk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oIndyaXRlQnl0ZSBmYWlsZWQiLCBwYXRoLCByZXN1bHQpOwogICAgfQogICAgX3Jlc291cmNlSW5mby5hZGRXcml0ZSgxKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gd3JpdGVGcm9tKExpc3Q8aW50PiBidWZmZXIsCiAgICAgIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgaWYgKChidWZmZXIgaXMhIExpc3QpIHx8CiAgICAgICAgKChzdGFydCAhPSBudWxsKSAmJiAoc3RhcnQgaXMhIGludCkpIHx8CiAgICAgICAgKChlbmQgIT0gbnVsbCkgJiYgKGVuZCBpcyEgaW50KSkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkludmFsaWQgYXJndW1lbnRzIHRvIHdyaXRlRnJvbSIpOwogICAgfQogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgYnVmZmVyLmxlbmd0aCk7CiAgICBpZiAoZW5kID09IHN0YXJ0KSB7CiAgICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKHRoaXMpOwogICAgfQogICAgX0J1ZmZlckFuZFN0YXJ0IHJlc3VsdDsKICAgIHRyeSB7CiAgICAgIHJlc3VsdCA9IF9lbnN1cmVGYXN0QW5kU2VyaWFsaXphYmxlQnl0ZURhdGEoYnVmZmVyLCBzdGFydCwgZW5kKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgcmV0dXJuIG5ldyBGdXR1cmUuZXJyb3IoZSk7CiAgICB9CgogICAgTGlzdCByZXF1ZXN0ID0gbmV3IExpc3QoNCk7CiAgICByZXF1ZXN0WzBdID0gbnVsbDsKICAgIHJlcXVlc3RbMV0gPSByZXN1bHQuYnVmZmVyOwogICAgcmVxdWVzdFsyXSA9IHJlc3VsdC5zdGFydDsKICAgIHJlcXVlc3RbM10gPSBlbmQgLSAoc3RhcnQgLSByZXN1bHQuc3RhcnQpOwogICAgcmV0dXJuIF9kaXNwYXRjaChfSU9TZXJ2aWNlLmZpbGVXcml0ZUZyb20sIHJlcXVlc3QpLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJ3cml0ZUZyb20gZmFpbGVkIiwgcGF0aCk7CiAgICAgIH0KICAgICAgX3Jlc291cmNlSW5mby5hZGRXcml0ZShlbmQgLSAoc3RhcnQgLSByZXN1bHQuc3RhcnQpKTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9KTsKICB9CgogIHZvaWQgd3JpdGVGcm9tU3luYyhMaXN0PGludD4gYnVmZmVyLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIF9jaGVja0F2YWlsYWJsZSgpOwogICAgaWYgKChidWZmZXIgaXMhIExpc3QpIHx8CiAgICAgICAgKChzdGFydCAhPSBudWxsKSAmJiAoc3RhcnQgaXMhIGludCkpIHx8CiAgICAgICAgKChlbmQgIT0gbnVsbCkgJiYgKGVuZCBpcyEgaW50KSkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkludmFsaWQgYXJndW1lbnRzIHRvIHdyaXRlRnJvbVN5bmMiKTsKICAgIH0KICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGJ1ZmZlci5sZW5ndGgpOwogICAgaWYgKGVuZCA9PSBzdGFydCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBfQnVmZmVyQW5kU3RhcnQgYnVmZmVyQW5kU3RhcnQgPQogICAgICAgIF9lbnN1cmVGYXN0QW5kU2VyaWFsaXphYmxlQnl0ZURhdGEoYnVmZmVyLCBzdGFydCwgZW5kKTsKICAgIHZhciByZXN1bHQgPSBfb3BzLndyaXRlRnJvbShidWZmZXJBbmRTdGFydC5idWZmZXIsIGJ1ZmZlckFuZFN0YXJ0LnN0YXJ0LAogICAgICAgIGVuZCAtIChzdGFydCAtIGJ1ZmZlckFuZFN0YXJ0LnN0YXJ0KSk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oIndyaXRlRnJvbSBmYWlsZWQiLCBwYXRoLCByZXN1bHQpOwogICAgfQogICAgX3Jlc291cmNlSW5mby5hZGRXcml0ZShlbmQgLSAoc3RhcnQgLSBidWZmZXJBbmRTdGFydC5zdGFydCkpOwogIH0KCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IHdyaXRlU3RyaW5nKFN0cmluZyBzdHJpbmcsCiAgICAgIHtFbmNvZGluZyBlbmNvZGluZzogdXRmOH0pIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGVuY29kaW5nLCAnZW5jb2RpbmcnKTsKICAgIHZhciBkYXRhID0gZW5jb2RpbmcuZW5jb2RlKHN0cmluZyk7CiAgICByZXR1cm4gd3JpdGVGcm9tKGRhdGEsIDAsIGRhdGEubGVuZ3RoKTsKICB9CgogIHZvaWQgd3JpdGVTdHJpbmdTeW5jKFN0cmluZyBzdHJpbmcsIHtFbmNvZGluZyBlbmNvZGluZzogdXRmOH0pIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGVuY29kaW5nLCAnZW5jb2RpbmcnKTsKICAgIHZhciBkYXRhID0gZW5jb2RpbmcuZW5jb2RlKHN0cmluZyk7CiAgICB3cml0ZUZyb21TeW5jKGRhdGEsIDAsIGRhdGEubGVuZ3RoKTsKICB9CgogIEZ1dHVyZTxpbnQ+IHBvc2l0aW9uKCkgewogICAgcmV0dXJuIF9kaXNwYXRjaChfSU9TZXJ2aWNlLmZpbGVQb3NpdGlvbiwgW251bGxdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAicG9zaXRpb24gZmFpbGVkIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgfSk7CiAgfQoKICBpbnQgcG9zaXRpb25TeW5jKCkgewogICAgX2NoZWNrQXZhaWxhYmxlKCk7CiAgICB2YXIgcmVzdWx0ID0gX29wcy5wb3NpdGlvbigpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJwb3NpdGlvbiBmYWlsZWQiLCBwYXRoLCByZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiBzZXRQb3NpdGlvbihpbnQgcG9zaXRpb24pIHsKICAgIHJldHVybiBfZGlzcGF0Y2goX0lPU2VydmljZS5maWxlU2V0UG9zaXRpb24sIFtudWxsLCBwb3NpdGlvbl0pCiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJzZXRQb3NpdGlvbiBmYWlsZWQiLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0pOwogIH0KCiAgdm9pZCBzZXRQb3NpdGlvblN5bmMoaW50IHBvc2l0aW9uKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIHZhciByZXN1bHQgPSBfb3BzLnNldFBvc2l0aW9uKHBvc2l0aW9uKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigic2V0UG9zaXRpb24gZmFpbGVkIiwgcGF0aCwgcmVzdWx0KTsKICAgIH0KICB9CgogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiB0cnVuY2F0ZShpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gX2Rpc3BhdGNoKF9JT1NlcnZpY2UuZmlsZVRydW5jYXRlLCBbbnVsbCwgbGVuZ3RoXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgInRydW5jYXRlIGZhaWxlZCIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgfQoKICB2b2lkIHRydW5jYXRlU3luYyhpbnQgbGVuZ3RoKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIHZhciByZXN1bHQgPSBfb3BzLnRydW5jYXRlKGxlbmd0aCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oInRydW5jYXRlIGZhaWxlZCIsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgfQoKICBGdXR1cmU8aW50PiBsZW5ndGgoKSB7CiAgICByZXR1cm4gX2Rpc3BhdGNoKF9JT1NlcnZpY2UuZmlsZUxlbmd0aCwgW251bGxdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAibGVuZ3RoIGZhaWxlZCIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiByZXNwb25zZTsKICAgIH0pOwogIH0KCiAgaW50IGxlbmd0aFN5bmMoKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIHZhciByZXN1bHQgPSBfb3BzLmxlbmd0aCgpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJsZW5ndGggZmFpbGVkIiwgcGF0aCwgcmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gZmx1c2goKSB7CiAgICByZXR1cm4gX2Rpc3BhdGNoKF9JT1NlcnZpY2UuZmlsZUZsdXNoLCBbbnVsbF0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJmbHVzaCBmYWlsZWQiLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0pOwogIH0KCiAgdm9pZCBmbHVzaFN5bmMoKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIHZhciByZXN1bHQgPSBfb3BzLmZsdXNoKCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oImZsdXNoIGZhaWxlZCIsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgfQoKICBzdGF0aWMgY29uc3QgaW50IGxvY2tVbmxvY2sgPSAwOwogIC8vIHN0YXRpYyBjb25zdCBpbnQgbG9ja1NoYXJlZCA9IDE7CiAgLy8gc3RhdGljIGNvbnN0IGludCBsb2NrRXhjbHVzaXZlID0gMjsKICAvLyBzdGF0aWMgY29uc3QgaW50IGxvY2tCbG9ja2luZ1NoYXJlZCA9IDM7CiAgLy8gc3RhdGljIGNvbnN0IGludCBsb2NrQmxvY2tpbmdFeGNsdXNpdmUgPSA0OwoKICBpbnQgX2ZpbGVMb2NrVmFsdWUoRmlsZUxvY2sgZmwpID0+IGZsLl90eXBlOwoKICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gbG9jaygKICAgICAgW0ZpbGVMb2NrIG1vZGUgPSBGaWxlTG9jay5leGNsdXNpdmUsIGludCBzdGFydCA9IDAsIGludCBlbmQgPSAtMV0pIHsKICAgIGlmICgobW9kZSBpcyEgRmlsZUxvY2spIHx8IChzdGFydCBpcyEgaW50KSB8fCAoZW5kIGlzISBpbnQpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICB9CiAgICBpZiAoKHN0YXJ0IDwgMCkgfHwgKGVuZCA8IC0xKSB8fCAoKGVuZCAhPSAtMSkgJiYgKHN0YXJ0ID49IGVuZCkpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICB9CiAgICBpbnQgbG9jayA9IF9maWxlTG9ja1ZhbHVlKG1vZGUpOwogICAgcmV0dXJuIF9kaXNwYXRjaChfSU9TZXJ2aWNlLmZpbGVMb2NrLCBbbnVsbCwgbG9jaywgc3RhcnQsIGVuZF0pCiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICdsb2NrIGZhaWxlZCcsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgfQoKICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gdW5sb2NrKFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kID0gLTFdKSB7CiAgICBpZiAoKHN0YXJ0IGlzISBpbnQpIHx8IChlbmQgaXMhIGludCkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgIH0KICAgIGlmIChzdGFydCA9PSBlbmQpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgIH0KICAgIHJldHVybiBfZGlzcGF0Y2goX0lPU2VydmljZS5maWxlTG9jaywgW251bGwsIGxvY2tVbmxvY2ssIHN0YXJ0LCBlbmRdKQogICAgICAgIC50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAndW5sb2NrIGZhaWxlZCcsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgfQoKICB2b2lkIGxvY2tTeW5jKAogICAgICBbRmlsZUxvY2sgbW9kZSA9IEZpbGVMb2NrLmV4Y2x1c2l2ZSwgaW50IHN0YXJ0ID0gMCwgaW50IGVuZCA9IC0xXSkgewogICAgX2NoZWNrQXZhaWxhYmxlKCk7CiAgICBpZiAoKG1vZGUgaXMhIEZpbGVMb2NrKSB8fCAoc3RhcnQgaXMhIGludCkgfHwgKGVuZCBpcyEgaW50KSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigpOwogICAgfQogICAgaWYgKChzdGFydCA8IDApIHx8IChlbmQgPCAtMSkgfHwgKChlbmQgIT0gLTEpICYmIChzdGFydCA+PSBlbmQpKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigpOwogICAgfQogICAgaW50IGxvY2sgPSBfZmlsZUxvY2tWYWx1ZShtb2RlKTsKICAgIHZhciByZXN1bHQgPSBfb3BzLmxvY2sobG9jaywgc3RhcnQsIGVuZCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oJ2xvY2sgZmFpbGVkJywgcGF0aCwgcmVzdWx0KTsKICAgIH0KICB9CgogIHZvaWQgdW5sb2NrU3luYyhbaW50IHN0YXJ0ID0gMCwgaW50IGVuZCA9IC0xXSkgewogICAgX2NoZWNrQXZhaWxhYmxlKCk7CiAgICBpZiAoKHN0YXJ0IGlzISBpbnQpIHx8IChlbmQgaXMhIGludCkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgIH0KICAgIGlmIChzdGFydCA9PSBlbmQpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfb3BzLmxvY2sobG9ja1VubG9jaywgc3RhcnQsIGVuZCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oJ3VubG9jayBmYWlsZWQnLCBwYXRoLCByZXN1bHQpOwogICAgfQogIH0KCiAgYm9vbCBjbG9zZWQgPSBmYWxzZTsKCiAgLy8gV0FSTklORzoKICAvLyBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9uIHRoZSBuYXRpdmUKICAvLyBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBmaWxlIG9wZXJhdGlvbnMuIEl0IHNob3VsZCBvbmx5IGJlIGNhbGxlZCB0bwogIC8vIHBhc3MgdGhlIHBvaW50ZXIgdG8gdGhlIElPIFNlcnZpY2UsIHdoaWNoIHdpbGwgZGVjcmVtZW50IHRoZSByZWZlcmVuY2UKICAvLyBjb3VudCB3aGVuIGl0IGlzIGZpbmlzaGVkIHdpdGggaXQuCiAgaW50IF9wb2ludGVyKCkgPT4gX29wcy5nZXRQb2ludGVyKCk7CgogIEZ1dHVyZSBfZGlzcGF0Y2goaW50IHJlcXVlc3QsIExpc3QgZGF0YSwge2Jvb2wgbWFya0Nsb3NlZDogZmFsc2V9KSB7CiAgICBpZiAoY2xvc2VkKSB7CiAgICAgIHJldHVybiBuZXcgRnV0dXJlLmVycm9yKG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJGaWxlIGNsb3NlZCIsIHBhdGgpKTsKICAgIH0KICAgIGlmIChfYXN5bmNEaXNwYXRjaGVkKSB7CiAgICAgIHZhciBtc2cgPSAiQW4gYXN5bmMgb3BlcmF0aW9uIGlzIGN1cnJlbnRseSBwZW5kaW5nIjsKICAgICAgcmV0dXJuIG5ldyBGdXR1cmUuZXJyb3IobmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24obXNnLCBwYXRoKSk7CiAgICB9CiAgICBpZiAobWFya0Nsb3NlZCkgewogICAgICAvLyBTZXQgY2xvc2VkIHRvIHRydWUgdG8gZW5zdXJlIHRoYXQgbm8gbW9yZSBhc3luYyByZXF1ZXN0cyBjYW4gYmUgaXNzdWVkCiAgICAgIC8vIGZvciB0aGlzIGZpbGUuCiAgICAgIGNsb3NlZCA9IHRydWU7CiAgICB9CiAgICBfYXN5bmNEaXNwYXRjaGVkID0gdHJ1ZTsKICAgIGRhdGFbMF0gPSBfcG9pbnRlcigpOwogICAgcmV0dXJuIF9JT1NlcnZpY2UuX2Rpc3BhdGNoKHJlcXVlc3QsIGRhdGEpLndoZW5Db21wbGV0ZSgoKSB7CiAgICAgIF9hc3luY0Rpc3BhdGNoZWQgPSBmYWxzZTsKICAgIH0pOwogIH0KCiAgdm9pZCBfY2hlY2tBdmFpbGFibGUoKSB7CiAgICBpZiAoX2FzeW5jRGlzcGF0Y2hlZCkgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigKICAgICAgICAgICJBbiBhc3luYyBvcGVyYXRpb24gaXMgY3VycmVudGx5IHBlbmRpbmciLCBwYXRoKTsKICAgIH0KICAgIGlmIChjbG9zZWQpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oIkZpbGUgY2xvc2VkIiwgcGF0aCk7CiAgICB9CiAgfQp9CoRLAE5OPAEPAREBKCIBLhgrASwQIBEMNQExHgEsHxgBFwE3FQQBKgFFPxgtSQQBHDMUGh4XIB8MBAEYJiUGFAESIhsGAU0jBAEWPSESFA4GHCAYNBshHksYIAoQCAYvHxsWEAghTRcILhYIHhQWCBscJBYeCAgEARIZThsiDgYBKhofFAYBLRtEJiMYDA8XCAYBKS8bIgYBGRYlMg0MLRcaCAYEAgE+DigBMyoEASo+BAE1PCQZLyAcMAgBKh8OFSlEIiAKFiMvLB0EARpPAgE/NxAWARcuEjQEASk0RT4EARwBDktLTQ5CAUEjMAQBGksbKFAIFwgEAUQBFjtCEwQBMAExEU0SFU0bKEwIEwgEAUQBHz8BSAEtFSoGOzYEATIVTAZLGyhMCBMIBAFKAU4BLhVOBkE2BAEoI0woJkEIIAgEARtAAR9AASRERB4EASYjSigmPwggCAQBGUABIkJCHgQBQiEiIyYsH0YGI00oSgg0CAQBGSNLKCY/CBcIBAFMARVDQhMEASRRGygmPAhACAQBSgEgPTs4BAEqLiNGGyhQCBMIBAEkPAEsLkwdJTsGBAEkURsoJkIIQAgEAUoBID1BOAQBKi4jRhsoJj0IEwgEASQ8ASwuTB0lQQYEAUwBPiEiIyYsRwZBMC0EASoBMx0TSAYqBAE1LgQBTyIjJixHBjg1BAEkPzMyFCwhHxQTNQwuCAEOHwYBICsbQCgKIiMIBAEgHQoWKBk+NQ0uMiMkDygIExAaBgQBOgolEiVMBgQBO0wyOSQoDCwUKwgIBAE4LwFBSwE9SgEtPCpFOhUjCAQBKTw0CjQlEBoGBAEuJh8cClASIgYEASomHxxLBAEoAUAdOAYEAgEmNgEUDw4TMhgzDh0YDAsmAgE2MQEVASEZASMdAS4uMRwEASASMwYEARsmUUdLDxlHGUwoBgQBGUUZGkIIKB4IBAEVFxsUQAYiHAQBG0goSQggFwgEARcXIh1GBh4TBAEmMEsoRQgxJhUIBAEiFzAjHUYGKhMEAUUdMCwhBkEYIgYeUChJCB4kMiMTCAQBQRcdMCwhBkEYEAY0HUYGIxMEATIwUChKCCETCAQBIRcwKB1HBh8TBAE3Ih0wLEEGQRglBhwKRxIiBgEgFyAfL0ooSgg8EwgEAUMXHTAsRQZBGA4GJUBNLx1HBkIEATYjNigsBAFDNigpBAEbSChJCBcIBAEXFyIdRgYTBAE3QxsoTAgTCAQBJxctHUkGBAEyUChJCBMIBAEiFygdRgYEARlGKEcIFwgEARUXIB1EBhMEASVFKEYIEwgEARUXHx1DBgQBIyYpLjEBLwEhS0MhBkghBiVEGyhFCBMIBAFDLCEGGCEGShsoRwgTCAQBEUsXQyEGSCEGJS4dQgYEATMXLCEGGCEGNB1EBgQBFwEOS01MKCcBRxJNBhw7QwYWUBgVBh0aQSAIBAEbHCU8BhI6BgQCARZkYXJ0OmlvL2ZpbGVfaW1wbC5kYXJ0R29yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2lvL2ZpbGVfc3lzdGVtX2VudGl0eS5kYXJ0wACHXS8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmlvOwoKLyoqCiAqIFRoZSB0eXBlIG9mIGFuIGVudGl0eSBvbiB0aGUgZmlsZSBzeXN0ZW0sIHN1Y2ggYXMgYSBmaWxlLCBkaXJlY3RvcnksIG9yIGxpbmsuCiAqCiAqIFRoZXNlIGNvbnN0YW50cyBhcmUgdXNlZCBieSB0aGUgW0ZpbGVTeXN0ZW1FbnRpdHldIGNsYXNzCiAqIHRvIGluZGljYXRlIHRoZSBvYmplY3QncyB0eXBlLgogKgogKi8KCmNsYXNzIEZpbGVTeXN0ZW1FbnRpdHlUeXBlIHsKICBzdGF0aWMgY29uc3QgZmlsZSA9IGNvbnN0IEZpbGVTeXN0ZW1FbnRpdHlUeXBlLl9pbnRlcm5hbCgwKTsKICBARGVwcmVjYXRlZCgiVXNlIGZpbGUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEZJTEUgPSBmaWxlOwoKICBzdGF0aWMgY29uc3QgZGlyZWN0b3J5ID0gY29uc3QgRmlsZVN5c3RlbUVudGl0eVR5cGUuX2ludGVybmFsKDEpOwogIEBEZXByZWNhdGVkKCJVc2UgZGlyZWN0b3J5IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBESVJFQ1RPUlkgPSBkaXJlY3Rvcnk7CgogIHN0YXRpYyBjb25zdCBsaW5rID0gY29uc3QgRmlsZVN5c3RlbUVudGl0eVR5cGUuX2ludGVybmFsKDIpOwogIEBEZXByZWNhdGVkKCJVc2UgbGluayBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgTElOSyA9IGxpbms7CgogIHN0YXRpYyBjb25zdCBub3RGb3VuZCA9IGNvbnN0IEZpbGVTeXN0ZW1FbnRpdHlUeXBlLl9pbnRlcm5hbCgzKTsKICBARGVwcmVjYXRlZCgiVXNlIG5vdEZvdW5kIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBOT1RfRk9VTkQgPSBub3RGb3VuZDsKCiAgc3RhdGljIGNvbnN0IF90eXBlTGlzdCA9IGNvbnN0IFsKICAgIEZpbGVTeXN0ZW1FbnRpdHlUeXBlLmZpbGUsCiAgICBGaWxlU3lzdGVtRW50aXR5VHlwZS5kaXJlY3RvcnksCiAgICBGaWxlU3lzdGVtRW50aXR5VHlwZS5saW5rLAogICAgRmlsZVN5c3RlbUVudGl0eVR5cGUubm90Rm91bmQsCiAgXTsKICBmaW5hbCBpbnQgX3R5cGU7CgogIGNvbnN0IEZpbGVTeXN0ZW1FbnRpdHlUeXBlLl9pbnRlcm5hbCh0aGlzLl90eXBlKTsKCiAgc3RhdGljIEZpbGVTeXN0ZW1FbnRpdHlUeXBlIF9sb29rdXAoaW50IHR5cGUpID0+IF90eXBlTGlzdFt0eXBlXTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBjb25zdCBbJ2ZpbGUnLCAnZGlyZWN0b3J5JywgJ2xpbmsnLCAnbm90Rm91bmQnXVtfdHlwZV07Cn0KCi8qKgogKiBBIEZpbGVTdGF0IG9iamVjdCByZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgUE9TSVggc3RhdCgpIGZ1bmN0aW9uCiAqIG9uIGEgZmlsZSBzeXN0ZW0gb2JqZWN0LiAgSXQgaXMgYW4gaW1tdXRhYmxlIG9iamVjdCwgcmVwcmVzZW50aW5nIHRoZQogKiBzbmFwc2hvdHRlZCB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIHN0YXQoKSBjYWxsLgogKi8KY2xhc3MgRmlsZVN0YXQgewogIC8vIFRoZXNlIG11c3QgYWdyZWUgd2l0aCBlbnVtIEZpbGVTdGF0IGluIGZpbGUuaC4KICBzdGF0aWMgY29uc3QgX3R5cGUgPSAwOwogIHN0YXRpYyBjb25zdCBfY2hhbmdlZFRpbWUgPSAxOwogIHN0YXRpYyBjb25zdCBfbW9kaWZpZWRUaW1lID0gMjsKICBzdGF0aWMgY29uc3QgX2FjY2Vzc2VkVGltZSA9IDM7CiAgc3RhdGljIGNvbnN0IF9tb2RlID0gNDsKICBzdGF0aWMgY29uc3QgX3NpemUgPSA1OwoKICBzdGF0aWMgY29uc3QgX25vdEZvdW5kID0gY29uc3QgRmlsZVN0YXQuX2ludGVybmFsTm90Rm91bmQoKTsKCiAgLyoqCiAgICogVGhlIHRpbWUgb2YgdGhlIGxhc3QgY2hhbmdlIHRvIHRoZSBkYXRhIG9yIG1ldGFkYXRhIG9mIHRoZSBmaWxlIHN5c3RlbQogICAqIG9iamVjdC4KICAgKgogICAqIE9uIFdpbmRvd3MgcGxhdGZvcm1zLCB0aGlzIGlzIGluc3RlYWQgdGhlIGZpbGUgY3JlYXRpb24gdGltZS4KICAgKi8KICBmaW5hbCBEYXRlVGltZSBjaGFuZ2VkOwoKICAvKioKICAgKiBUaGUgdGltZSBvZiB0aGUgbGFzdCBjaGFuZ2UgdG8gdGhlIGRhdGEgb2YgdGhlIGZpbGUgc3lzdGVtIG9iamVjdC4KICAgKi8KICBmaW5hbCBEYXRlVGltZSBtb2RpZmllZDsKCiAgLyoqCiAgICogVGhlIHRpbWUgb2YgdGhlIGxhc3QgYWNjZXNzIHRvIHRoZSBkYXRhIG9mIHRoZSBmaWxlIHN5c3RlbSBvYmplY3QuCiAgICoKICAgKiBPbiBXaW5kb3dzIHBsYXRmb3JtcywgdGhpcyBtYXkgaGF2ZSAxIGRheSBncmFudWxhcml0eSwgYW5kIGJlCiAgICogb3V0IG9mIGRhdGUgYnkgYW4gaG91ci4KICAgKi8KICBmaW5hbCBEYXRlVGltZSBhY2Nlc3NlZDsKCiAgLyoqCiAgICogVGhlIHR5cGUgb2YgdGhlIHVuZGVybHlpbmcgZmlsZSBzeXN0ZW0gb2JqZWN0LgogICAqCiAgICogW0ZpbGVTeXN0ZW1FbnRpdHlUeXBlLm5vdEZvdW5kXSBpZiBbc3RhdF0gb3IgW3N0YXRTeW5jXSBmYWlsZWQuCiAgICovCiAgZmluYWwgRmlsZVN5c3RlbUVudGl0eVR5cGUgdHlwZTsKCiAgLyoqCiAgICogVGhlIG1vZGUgb2YgdGhlIGZpbGUgc3lzdGVtIG9iamVjdC4KICAgKgogICAqIFBlcm1pc3Npb25zIGFyZSBlbmNvZGVkIGluIHRoZSBsb3dlciAxNiBiaXRzIG9mIHRoaXMgbnVtYmVyLCBhbmQgY2FuIGJlCiAgICogZGVjb2RlZCB1c2luZyB0aGUgW21vZGVTdHJpbmddIGdldHRlci4KICAgKi8KICBmaW5hbCBpbnQgbW9kZTsKCiAgLyoqCiAgICogVGhlIHNpemUgb2YgdGhlIGZpbGUgc3lzdGVtIG9iamVjdC4KICAgKi8KICBmaW5hbCBpbnQgc2l6ZTsKCiAgRmlsZVN0YXQuX2ludGVybmFsKHRoaXMuY2hhbmdlZCwgdGhpcy5tb2RpZmllZCwgdGhpcy5hY2Nlc3NlZCwgdGhpcy50eXBlLAogICAgICB0aGlzLm1vZGUsIHRoaXMuc2l6ZSk7CgogIGNvbnN0IEZpbGVTdGF0Ll9pbnRlcm5hbE5vdEZvdW5kKCkKICAgICAgOiBjaGFuZ2VkID0gbnVsbCwKICAgICAgICBtb2RpZmllZCA9IG51bGwsCiAgICAgICAgYWNjZXNzZWQgPSBudWxsLAogICAgICAgIHR5cGUgPSBGaWxlU3lzdGVtRW50aXR5VHlwZS5ub3RGb3VuZCwKICAgICAgICBtb2RlID0gMCwKICAgICAgICBzaXplID0gLTE7CgogIGV4dGVybmFsIHN0YXRpYyBfc3RhdFN5bmMoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFN0cmluZyBwYXRoKTsKCiAgLyoqCiAgICogQ2FsbHMgdGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBgc3RhdCgpYCBmdW5jdGlvbiAob3IgZXF1aXZhbGVudCkgb24gW3BhdGhdLgogICAqCiAgICogUmV0dXJucyBhIFtGaWxlU3RhdF0gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRhdGEgcmV0dXJuZWQgYnkgYHN0YXQoKWAuCiAgICogSWYgdGhlIGNhbGwgZmFpbHMsIHJldHVybnMgYSBbRmlsZVN0YXRdIG9iamVjdCB3aXRoIFtGaWxlU3RhdC50eXBlXSBzZXQgdG8KICAgKiBbRmlsZVN5c3RlbUVudGl0eVR5cGUubm90Rm91bmRdIGFuZCB0aGUgb3RoZXIgZmllbGRzIGludmFsaWQuCiAgICovCiAgc3RhdGljIEZpbGVTdGF0IHN0YXRTeW5jKFN0cmluZyBwYXRoKSB7CiAgICBmaW5hbCBJT092ZXJyaWRlcyBvdmVycmlkZXMgPSBJT092ZXJyaWRlcy5jdXJyZW50OwogICAgaWYgKG92ZXJyaWRlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfc3RhdFN5bmNJbnRlcm5hbChwYXRoKTsKICAgIH0KICAgIHJldHVybiBvdmVycmlkZXMuc3RhdFN5bmMocGF0aCk7CiAgfQoKICBzdGF0aWMgRmlsZVN0YXQgX3N0YXRTeW5jSW50ZXJuYWwoU3RyaW5nIHBhdGgpIHsKICAgIC8vIFRyYWlsaW5nIHBhdGggaXMgbm90IHN1cHBvcnRlZCBvbiBXaW5kb3dzLgogICAgaWYgKFBsYXRmb3JtLmlzV2luZG93cykgewogICAgICBwYXRoID0gRmlsZVN5c3RlbUVudGl0eS5fdHJpbVRyYWlsaW5nUGF0aFNlcGFyYXRvcnMocGF0aCk7CiAgICB9CiAgICB2YXIgZGF0YSA9IF9zdGF0U3luYyhfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIHBhdGgpOwogICAgaWYgKGRhdGEgaXMgT1NFcnJvcikgcmV0dXJuIEZpbGVTdGF0Ll9ub3RGb3VuZDsKICAgIHJldHVybiBuZXcgRmlsZVN0YXQuX2ludGVybmFsKAogICAgICAgIG5ldyBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaChkYXRhW19jaGFuZ2VkVGltZV0pLAogICAgICAgIG5ldyBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaChkYXRhW19tb2RpZmllZFRpbWVdKSwKICAgICAgICBuZXcgRGF0ZVRpbWUuZnJvbU1pbGxpc2Vjb25kc1NpbmNlRXBvY2goZGF0YVtfYWNjZXNzZWRUaW1lXSksCiAgICAgICAgRmlsZVN5c3RlbUVudGl0eVR5cGUuX2xvb2t1cChkYXRhW190eXBlXSksCiAgICAgICAgZGF0YVtfbW9kZV0sCiAgICAgICAgZGF0YVtfc2l6ZV0pOwogIH0KCiAgLyoqCiAgICogQXN5bmNocm9ub3VzbHkgY2FsbHMgdGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBgc3RhdCgpYCBmdW5jdGlvbiAob3IKICAgKiBlcXVpdmFsZW50KSBvbiBbcGF0aF0uCiAgICoKICAgKiBSZXR1cm5zIGEgW0Z1dHVyZV0gd2hpY2ggY29tcGxldGVzIHdpdGggdGhlIHNhbWUgcmVzdWx0cyBhcyBbc3RhdFN5bmNdLgogICAqLwogIHN0YXRpYyBGdXR1cmU8RmlsZVN0YXQ+IHN0YXQoU3RyaW5nIHBhdGgpIHsKICAgIGZpbmFsIElPT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IElPT3ZlcnJpZGVzLmN1cnJlbnQ7CiAgICBpZiAob3ZlcnJpZGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9zdGF0KHBhdGgpOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5zdGF0KHBhdGgpOwogIH0KCiAgc3RhdGljIEZ1dHVyZTxGaWxlU3RhdD4gX3N0YXQoU3RyaW5nIHBhdGgpIHsKICAgIC8vIFRyYWlsaW5nIHBhdGggaXMgbm90IHN1cHBvcnRlZCBvbiBXaW5kb3dzLgogICAgaWYgKFBsYXRmb3JtLmlzV2luZG93cykgewogICAgICBwYXRoID0gRmlsZVN5c3RlbUVudGl0eS5fdHJpbVRyYWlsaW5nUGF0aFNlcGFyYXRvcnMocGF0aCk7CiAgICB9CiAgICByZXR1cm4gX0ZpbGUuX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZShfSU9TZXJ2aWNlLmZpbGVTdGF0LCBbbnVsbCwgcGF0aF0pCiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHJldHVybiBGaWxlU3RhdC5fbm90Rm91bmQ7CiAgICAgIH0KICAgICAgLy8gVW53cmFwIHRoZSByZWFsIGxpc3QgZnJvbSB0aGUgIkknbSBub3QgYW4gZXJyb3IiIHdyYXBwZXIuCiAgICAgIExpc3QgZGF0YSA9IHJlc3BvbnNlWzFdOwogICAgICByZXR1cm4gbmV3IEZpbGVTdGF0Ll9pbnRlcm5hbCgKICAgICAgICAgIG5ldyBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaChkYXRhW19jaGFuZ2VkVGltZV0pLAogICAgICAgICAgbmV3IERhdGVUaW1lLmZyb21NaWxsaXNlY29uZHNTaW5jZUVwb2NoKGRhdGFbX21vZGlmaWVkVGltZV0pLAogICAgICAgICAgbmV3IERhdGVUaW1lLmZyb21NaWxsaXNlY29uZHNTaW5jZUVwb2NoKGRhdGFbX2FjY2Vzc2VkVGltZV0pLAogICAgICAgICAgRmlsZVN5c3RlbUVudGl0eVR5cGUuX2xvb2t1cChkYXRhW190eXBlXSksCiAgICAgICAgICBkYXRhW19tb2RlXSwKICAgICAgICAgIGRhdGFbX3NpemVdKTsKICAgIH0pOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIiIiCkZpbGVTdGF0OiB0eXBlICR0eXBlCiAgICAgICAgICBjaGFuZ2VkICRjaGFuZ2VkCiAgICAgICAgICBtb2RpZmllZCAkbW9kaWZpZWQKICAgICAgICAgIGFjY2Vzc2VkICRhY2Nlc3NlZAogICAgICAgICAgbW9kZSAke21vZGVTdHJpbmcoKX0KICAgICAgICAgIHNpemUgJHNpemUiIiI7CgogIC8qKgogICAqIFJldHVybnMgdGhlIG1vZGUgdmFsdWUgYXMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcuCiAgICoKICAgKiBUaGUgc3RyaW5nIGlzIGluIHRoZSBmb3JtYXQgInJ3eHJ3eHJ3eCIsIHJlZmxlY3RpbmcgdGhlIHVzZXIsIGdyb3VwLCBhbmQKICAgKiB3b3JsZCBwZXJtaXNzaW9ucyB0byByZWFkLCB3cml0ZSwgYW5kIGV4ZWN1dGUgdGhlIGZpbGUgc3lzdGVtIG9iamVjdCwgd2l0aAogICAqICItIiByZXBsYWNpbmcgdGhlIGxldHRlciBmb3IgbWlzc2luZyBwZXJtaXNzaW9ucy4gIEV4dHJhIHBlcm1pc3Npb24gYml0cwogICAqIG1heSBiZSByZXByZXNlbnRlZCBieSBwcmVwZW5kaW5nICIoc3VpZCkiLCAiKGd1aWQpIiwgYW5kL29yICIoc3RpY2t5KSIgdG8KICAgKiB0aGUgbW9kZSBzdHJpbmcuCiAgICovCiAgU3RyaW5nIG1vZGVTdHJpbmcoKSB7CiAgICB2YXIgcGVybWlzc2lvbnMgPSBtb2RlICYgMHhGRkY7CiAgICB2YXIgY29kZXMgPSBjb25zdCBbJy0tLScsICctLXgnLCAnLXctJywgJy13eCcsICdyLS0nLCAnci14JywgJ3J3LScsICdyd3gnXTsKICAgIHZhciByZXN1bHQgPSBbXTsKICAgIGlmICgocGVybWlzc2lvbnMgJiAweDgwMCkgIT0gMCkgcmVzdWx0LmFkZCgiKHN1aWQpICIpOwogICAgaWYgKChwZXJtaXNzaW9ucyAmIDB4NDAwKSAhPSAwKSByZXN1bHQuYWRkKCIoZ3VpZCkgIik7CiAgICBpZiAoKHBlcm1pc3Npb25zICYgMHgyMDApICE9IDApIHJlc3VsdC5hZGQoIihzdGlja3kpICIpOwogICAgcmVzdWx0CiAgICAgIC4uYWRkKGNvZGVzWyhwZXJtaXNzaW9ucyA+PiA2KSAmIDB4N10pCiAgICAgIC4uYWRkKGNvZGVzWyhwZXJtaXNzaW9ucyA+PiAzKSAmIDB4N10pCiAgICAgIC4uYWRkKGNvZGVzW3Blcm1pc3Npb25zICYgMHg3XSk7CiAgICByZXR1cm4gcmVzdWx0LmpvaW4oKTsKICB9Cn0KCi8qKgogKiBUaGUgY29tbW9uIHN1cGVyIGNsYXNzIGZvciBbRmlsZV0sIFtEaXJlY3RvcnldLCBhbmQgW0xpbmtdIG9iamVjdHMuCiAqCiAqIFtGaWxlU3lzdGVtRW50aXR5XSBvYmplY3RzIGFyZSByZXR1cm5lZCBmcm9tIGRpcmVjdG9yeSBsaXN0aW5nCiAqIG9wZXJhdGlvbnMuIFRvIGRldGVybWluZSBpZiBhIEZpbGVTeXN0ZW1FbnRpdHkgaXMgYSBbRmlsZV0sIGEKICogW0RpcmVjdG9yeV0sIG9yIGEgW0xpbmtdIHBlcmZvcm0gYSB0eXBlIGNoZWNrOgogKgogKiAgICAgaWYgKGVudGl0eSBpcyBGaWxlKSAoZW50aXR5IGFzIEZpbGUpLnJlYWRBc1N0cmluZ1N5bmMoKTsKICoKICogWW91IGNhbiBhbHNvIHVzZSB0aGUgW3R5cGVdIG9yIFt0eXBlU3luY10gbWV0aG9kcyB0byBkZXRlcm1pbmUKICogdGhlIHR5cGUgb2YgYSBmaWxlIHN5c3RlbSBvYmplY3QuCiAqCiAqIE1vc3QgbWV0aG9kcyBpbiB0aGlzIGNsYXNzIG9jY3VyIGluIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgcGFpcnMsCiAqIGZvciBleGFtcGxlLCBbZXhpc3RzXSBhbmQgW2V4aXN0c1N5bmNdLgogKiBVbmxlc3MgeW91IGhhdmUgYSBzcGVjaWZpYyByZWFzb24gZm9yIHVzaW5nIHRoZSBzeW5jaHJvbm91cyB2ZXJzaW9uCiAqIG9mIGEgbWV0aG9kLCBwcmVmZXIgdGhlIGFzeW5jaHJvbm91cyB2ZXJzaW9uIHRvIGF2b2lkIGJsb2NraW5nIHlvdXIgcHJvZ3JhbS4KICoKICogSGVyZSdzIHRoZSBleGlzdHMgbWV0aG9kIGluIGFjdGlvbjoKICoKICogICAgIGVudGl0eS5leGlzdHMoKS50aGVuKChpc1RoZXJlKSB7CiAqICAgICAgIGlzVGhlcmUgPyBwcmludCgnZXhpc3RzJykgOiBwcmludCgnbm9uLWV4aXN0ZW50Jyk7CiAqICAgICB9KTsKICoKICoKICogIyMgT3RoZXIgcmVzb3VyY2VzCiAqCiAqICogW0RhcnQgYnkKICogICBFeGFtcGxlXShodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZGFydC1ieS1leGFtcGxlLyNmaWxlcy1kaXJlY3Rvcmllcy1hbmQtc3ltbGlua3MpCiAqICAgcHJvdmlkZXMgYWRkaXRpb25hbCB0YXNrLW9yaWVudGVkIGNvZGUgc2FtcGxlcyB0aGF0IHNob3cgaG93IHRvIHVzZSB2YXJpb3VzCiAqICAgQVBJIGZyb20gdGhlIFtEaXJlY3RvcnldIGNsYXNzIGFuZCB0aGUgW0ZpbGVdIGNsYXNzLCBib3RoIHN1YmNsYXNzZXMgb2YKICogICBGaWxlU3lzdGVtRW50aXR5LgogKgogKiAqIFtJL08gZm9yIENvbW1hbmQtTGluZQogKiAgIEFwcHNdKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL2RhcnQtdXAtYW5kLXJ1bm5pbmcvY2gwMy5odG1sI2RhcnRpby0tLWlvLWZvci1jb21tYW5kLWxpbmUtYXBwcyksCiAqICAgYSBzZWN0aW9uIGZyb20gX0EgVG91ciBvZiB0aGUgRGFydCBMaWJyYXJpZXNfIGNvdmVycyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCiAqCiAqICogW1dyaXRlIENvbW1hbmQtTGluZSBBcHBzXShodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZG9jcy90dXRvcmlhbHMvY21kbGluZS8pLAogKiAgIGEgdHV0b3JpYWwgYWJvdXQgd3JpdGluZyBjb21tYW5kLWxpbmUgYXBwcywgaW5jbHVkZXMgaW5mb3JtYXRpb24gYWJvdXQKICogICBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCiAqLwphYnN0cmFjdCBjbGFzcyBGaWxlU3lzdGVtRW50aXR5IHsKICBTdHJpbmcgX3BhdGg7CiAgVWludDhMaXN0IF9yYXdQYXRoOwoKICBTdHJpbmcgZ2V0IHBhdGg7CgogIC8qKgogICAqIFJldHVybnMgYSBbVXJpXSByZXByZXNlbnRpbmcgdGhlIGZpbGUgc3lzdGVtIGVudGl0eSdzIGxvY2F0aW9uLgogICAqCiAgICogVGhlIHJldHVybmVkIFVSSSdzIHNjaGVtZSBpcyBhbHdheXMgImZpbGUiIGlmIHRoZSBlbnRpdHkncyBbcGF0aF0gaXMKICAgKiBhYnNvbHV0ZSwgb3RoZXJ3aXNlIHRoZSBzY2hlbWUgd2lsbCBiZSBlbXB0eS4KICAgKi8KICBVcmkgZ2V0IHVyaSA9PiBuZXcgVXJpLmZpbGUocGF0aCk7CgogIC8qKgogICAqIENoZWNrcyB3aGV0aGVyIHRoZSBmaWxlIHN5c3RlbSBlbnRpdHkgd2l0aCB0aGlzIHBhdGggZXhpc3RzLiBSZXR1cm5zCiAgICogYSBbOkZ1dHVyZTxib29sPjpdIHRoYXQgY29tcGxldGVzIHdpdGggdGhlIHJlc3VsdC4KICAgKgogICAqIFNpbmNlIEZpbGVTeXN0ZW1FbnRpdHkgaXMgYWJzdHJhY3QsIGV2ZXJ5IEZpbGVTeXN0ZW1FbnRpdHkgb2JqZWN0CiAgICogaXMgYWN0dWFsbHkgYW4gaW5zdGFuY2Ugb2Ygb25lIG9mIHRoZSBzdWJjbGFzc2VzIFtGaWxlXSwKICAgKiBbRGlyZWN0b3J5XSwgYW5kIFtMaW5rXS4gIENhbGxpbmcgW2V4aXN0c10gb24gYW4gaW5zdGFuY2Ugb2Ygb25lCiAgICogb2YgdGhlc2Ugc3ViY2xhc3NlcyBjaGVja3Mgd2hldGhlciB0aGUgb2JqZWN0IGV4aXN0cyBpbiB0aGUgZmlsZQogICAqIHN5c3RlbSBvYmplY3QgZXhpc3RzIGFuZCBpcyBvZiB0aGUgY29ycmVjdCB0eXBlIChmaWxlLCBkaXJlY3RvcnksCiAgICogb3IgbGluaykuICBUbyBjaGVjayB3aGV0aGVyIGEgcGF0aCBwb2ludHMgdG8gYW4gb2JqZWN0IG9uIHRoZQogICAqIGZpbGUgc3lzdGVtLCByZWdhcmRsZXNzIG9mIHRoZSBvYmplY3QncyB0eXBlLCB1c2UgdGhlIFt0eXBlXQogICAqIHN0YXRpYyBtZXRob2QuCiAgICoKICAgKi8KICBGdXR1cmU8Ym9vbD4gZXhpc3RzKCk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgY2hlY2tzIHdoZXRoZXIgdGhlIGZpbGUgc3lzdGVtIGVudGl0eSB3aXRoIHRoaXMgcGF0aAogICAqIGV4aXN0cy4KICAgKgogICAqIFNpbmNlIEZpbGVTeXN0ZW1FbnRpdHkgaXMgYWJzdHJhY3QsIGV2ZXJ5IEZpbGVTeXN0ZW1FbnRpdHkgb2JqZWN0CiAgICogaXMgYWN0dWFsbHkgYW4gaW5zdGFuY2Ugb2Ygb25lIG9mIHRoZSBzdWJjbGFzc2VzIFtGaWxlXSwKICAgKiBbRGlyZWN0b3J5XSwgYW5kIFtMaW5rXS4gIENhbGxpbmcgW2V4aXN0c1N5bmNdIG9uIGFuIGluc3RhbmNlIG9mCiAgICogb25lIG9mIHRoZXNlIHN1YmNsYXNzZXMgY2hlY2tzIHdoZXRoZXIgdGhlIG9iamVjdCBleGlzdHMgaW4gdGhlCiAgICogZmlsZSBzeXN0ZW0gb2JqZWN0IGV4aXN0cyBhbmQgaXMgb2YgdGhlIGNvcnJlY3QgdHlwZSAoZmlsZSwKICAgKiBkaXJlY3RvcnksIG9yIGxpbmspLiAgVG8gY2hlY2sgd2hldGhlciBhIHBhdGggcG9pbnRzIHRvIGFuIG9iamVjdAogICAqIG9uIHRoZSBmaWxlIHN5c3RlbSwgcmVnYXJkbGVzcyBvZiB0aGUgb2JqZWN0J3MgdHlwZSwgdXNlIHRoZQogICAqIFt0eXBlU3luY10gc3RhdGljIG1ldGhvZC4KICAgKi8KICBib29sIGV4aXN0c1N5bmMoKTsKCiAgLyoqCiAgICogUmVuYW1lcyB0aGlzIGZpbGUgc3lzdGVtIGVudGl0eS4KICAgKgogICAqIFJldHVybnMgYSBgRnV0dXJlPEZpbGVTeXN0ZW1FbnRpdHk+YCB0aGF0IGNvbXBsZXRlcyB3aXRoIGEKICAgKiBbRmlsZVN5c3RlbUVudGl0eV0gaW5zdGFuY2UgZm9yIHRoZSByZW5hbWVkIGZpbGUgc3lzdGVtIGVudGl0eS4KICAgKgogICAqIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGVudGl0eSBvZiB0aGUgc2FtZSB0eXBlLCB0aGF0IGVudGl0eQogICAqIGlzIHJlcGxhY2VkLiBJZiBbbmV3UGF0aF0gaWRlbnRpZmllcyBhbiBleGlzdGluZyBlbnRpdHkgb2YgYSBkaWZmZXJlbnQKICAgKiB0eXBlLCB0aGUgb3BlcmF0aW9uIGZhaWxzIGFuZCB0aGUgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGV4Y2VwdGlvbi4KICAgKi8KICBGdXR1cmU8RmlsZVN5c3RlbUVudGl0eT4gcmVuYW1lKFN0cmluZyBuZXdQYXRoKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSByZW5hbWVzIHRoaXMgZmlsZSBzeXN0ZW0gZW50aXR5LgogICAqCiAgICogUmV0dXJucyBhIFtGaWxlU3lzdGVtRW50aXR5XSBpbnN0YW5jZSBmb3IgdGhlIHJlbmFtZWQgZW50aXR5LgogICAqCiAgICogSWYgW25ld1BhdGhdIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZW50aXR5IG9mIHRoZSBzYW1lIHR5cGUsIHRoYXQgZW50aXR5CiAgICogaXMgcmVwbGFjZWQuIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGVudGl0eSBvZiBhIGRpZmZlcmVudAogICAqIHR5cGUsIHRoZSBvcGVyYXRpb24gZmFpbHMgYW5kIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICovCiAgRmlsZVN5c3RlbUVudGl0eSByZW5hbWVTeW5jKFN0cmluZyBuZXdQYXRoKTsKCiAgLyoqCiAgICogUmVzb2x2ZXMgdGhlIHBhdGggb2YgYSBmaWxlIHN5c3RlbSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlCiAgICogY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KICAgKgogICAqIFJlc29sdmVzIGFsbCBzeW1ib2xpYyBsaW5rcyBvbiB0aGUgcGF0aCBhbmQgcmVzb2x2ZXMgYWxsIGAuLmAgYW5kIGAuYCBwYXRoCiAgICogc2VnbWVudHMuCiAgICoKICAgKiBbcmVzb2x2ZVN5bWJvbGljTGlua3NdIHVzZXMgdGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBuYXRpdmUKICAgKiBmaWxlIHN5c3RlbSBBUEkgdG8gcmVzb2x2ZSB0aGUgcGF0aCwgdXNpbmcgdGhlIGByZWFscGF0aGAgZnVuY3Rpb24KICAgKiBvbiBsaW51eCBhbmQgT1MgWCwgYW5kIHRoZSBgR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlYCBmdW5jdGlvbiBvbgogICAqIFdpbmRvd3MuIElmIHRoZSBwYXRoIGRvZXMgbm90IHBvaW50IHRvIGFuIGV4aXN0aW5nIGZpbGUgc3lzdGVtIG9iamVjdCwKICAgKiBgcmVzb2x2ZVN5bWJvbGljTGlua3NgIHRocm93cyBhIGBGaWxlU3lzdGVtRXhjZXB0aW9uYC4KICAgKgogICAqIE9uIFdpbmRvd3MgdGhlIGAuLmAgc2VnbWVudHMgYXJlIHJlc29sdmVkIF9iZWZvcmVfIHJlc29sdmluZyB0aGUgc3ltYm9saWMKICAgKiBsaW5rLCBhbmQgb24gb3RoZXIgcGxhdGZvcm1zIHRoZSBzeW1ib2xpYyBsaW5rcyBhcmUgX3Jlc29sdmVkIHRvIHRoZWlyCiAgICogdGFyZ2V0XyBiZWZvcmUgYXBwbHlpbmcgYSBgLi5gIHRoYXQgZm9sbG93cy4KICAgKgogICAqIFRvIGVuc3VyZSB0aGUgc2FtZSBiZWhhdmlvciBvbiBhbGwgcGxhdGZvcm1zIHJlc29sdmUgYC4uYCBzZWdtZW50cyBiZWZvcmUKICAgKiBjYWxsaW5nIGByZXNvbHZlU3ltYm9saWNMaW5rc2AuIE9uZSB3YXkgb2YgZG9pbmcgdGhpcyBpcyB3aXRoIHRoZSBgVXJpYAogICAqIGNsYXNzOgogICAqCiAgICogICAgIHZhciBwYXRoID0gVXJpLnBhcnNlKCcuJykucmVzb2x2ZVVyaShuZXcgVXJpLmZpbGUoaW5wdXQpKS50b0ZpbGVQYXRoKCk7CiAgICogICAgIGlmIChwYXRoID09ICcnKSBwYXRoID0gJy4nOwogICAqICAgICBuZXcgRmlsZShwYXRoKS5yZXNvbHZlU3ltYm9saWNMaW5rcygpLnRoZW4oKHJlc29sdmVkKSB7CiAgICogICAgICAgcHJpbnQocmVzb2x2ZWQpOwogICAqICAgICB9KTsKICAgKgogICAqIHNpbmNlIGBVcmkucmVzb2x2ZWAgcmVtb3ZlcyBgLi5gIHNlZ21lbnRzLiBUaGlzIHdpbGwgcmVzdWx0IGluIHRoZSBXaW5kb3dzCiAgICogYmVoYXZpb3IuCiAgICovCiAgRnV0dXJlPFN0cmluZz4gcmVzb2x2ZVN5bWJvbGljTGlua3MoKSB7CiAgICByZXR1cm4gX0ZpbGUuX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICBfSU9TZXJ2aWNlLmZpbGVSZXNvbHZlU3ltYm9saWNMaW5rcywgW251bGwsIF9yYXdQYXRoXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZSgKICAgICAgICAgICAgcmVzcG9uc2UsICJDYW5ub3QgcmVzb2x2ZSBzeW1ib2xpYyBsaW5rcyIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiByZXNwb25zZTsKICAgIH0pOwogIH0KCiAgLyoqCiAgICogUmVzb2x2ZXMgdGhlIHBhdGggb2YgYSBmaWxlIHN5c3RlbSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlCiAgICogY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KICAgKgogICAqIFJlc29sdmVzIGFsbCBzeW1ib2xpYyBsaW5rcyBvbiB0aGUgcGF0aCBhbmQgcmVzb2x2ZXMgYWxsIGAuLmAgYW5kIGAuYCBwYXRoCiAgICogc2VnbWVudHMuCiAgICoKICAgKiBbcmVzb2x2ZVN5bWJvbGljTGlua3NTeW5jXSB1c2VzIHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MgbmF0aXZlCiAgICogZmlsZSBzeXN0ZW0gQVBJIHRvIHJlc29sdmUgdGhlIHBhdGgsIHVzaW5nIHRoZSBgcmVhbHBhdGhgIGZ1bmN0aW9uCiAgICogb24gbGludXggYW5kIE9TIFgsIGFuZCB0aGUgYEdldEZpbmFsUGF0aE5hbWVCeUhhbmRsZWAgZnVuY3Rpb24gb24KICAgKiBXaW5kb3dzLiBJZiB0aGUgcGF0aCBkb2VzIG5vdCBwb2ludCB0byBhbiBleGlzdGluZyBmaWxlIHN5c3RlbSBvYmplY3QsCiAgICogYHJlc29sdmVTeW1ib2xpY0xpbmtzU3luY2AgdGhyb3dzIGEgYEZpbGVTeXN0ZW1FeGNlcHRpb25gLgogICAqCiAgICogT24gV2luZG93cyB0aGUgYC4uYCBzZWdtZW50cyBhcmUgcmVzb2x2ZWQgX2JlZm9yZV8gcmVzb2x2aW5nIHRoZSBzeW1ib2xpYwogICAqIGxpbmssIGFuZCBvbiBvdGhlciBwbGF0Zm9ybXMgdGhlIHN5bWJvbGljIGxpbmtzIGFyZSBfcmVzb2x2ZWQgdG8gdGhlaXIKICAgKiB0YXJnZXRfIGJlZm9yZSBhcHBseWluZyBhIGAuLmAgdGhhdCBmb2xsb3dzLgogICAqCiAgICogVG8gZW5zdXJlIHRoZSBzYW1lIGJlaGF2aW9yIG9uIGFsbCBwbGF0Zm9ybXMgcmVzb2x2ZSBgLi5gIHNlZ21lbnRzIGJlZm9yZQogICAqIGNhbGxpbmcgYHJlc29sdmVTeW1ib2xpY0xpbmtzU3luY2AuIE9uZSB3YXkgb2YgZG9pbmcgdGhpcyBpcyB3aXRoIHRoZSBgVXJpYAogICAqIGNsYXNzOgogICAqCiAgICogICAgIHZhciBwYXRoID0gVXJpLnBhcnNlKCcuJykucmVzb2x2ZVVyaShuZXcgVXJpLmZpbGUoaW5wdXQpKS50b0ZpbGVQYXRoKCk7CiAgICogICAgIGlmIChwYXRoID09ICcnKSBwYXRoID0gJy4nOwogICAqICAgICB2YXIgcmVzb2x2ZWQgPSBuZXcgRmlsZShwYXRoKS5yZXNvbHZlU3ltYm9saWNMaW5rc1N5bmMoKTsKICAgKiAgICAgcHJpbnQocmVzb2x2ZWQpOwogICAqCiAgICogc2luY2UgYFVyaS5yZXNvbHZlYCByZW1vdmVzIGAuLmAgc2VnbWVudHMuIFRoaXMgd2lsbCByZXN1bHQgaW4gdGhlIFdpbmRvd3MKICAgKiBiZWhhdmlvci4KICAgKi8KICBTdHJpbmcgcmVzb2x2ZVN5bWJvbGljTGlua3NTeW5jKCkgewogICAgdmFyIHJlc3VsdCA9IF9yZXNvbHZlU3ltYm9saWNMaW5rcyhfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoKTsKICAgIF90aHJvd0lmRXJyb3IocmVzdWx0LCAiQ2Fubm90IHJlc29sdmUgc3ltYm9saWMgbGlua3MiLCBwYXRoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKioKICAgKiBDYWxscyB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzIHN0YXQoKSBmdW5jdGlvbiBvbiB0aGUgW3BhdGhdIG9mIHRoaXMKICAgKiBbRmlsZVN5c3RlbUVudGl0eV0uCiAgICoKICAgKiBJZGVudGljYWwgdG8gWzpGaWxlU3RhdC5zdGF0KHRoaXMucGF0aCk6XS4KICAgKgogICAqIFJldHVybnMgYSBbOkZ1dHVyZTxGaWxlU3RhdD46XSBvYmplY3QgY29udGFpbmluZyB0aGUgZGF0YSByZXR1cm5lZCBieQogICAqIHN0YXQoKS4KICAgKgogICAqIElmIHRoZSBjYWxsIGZhaWxzLCBjb21wbGV0ZXMgdGhlIGZ1dHVyZSB3aXRoIGEgW0ZpbGVTdGF0XSBvYmplY3QKICAgKiB3aXRoIGAudHlwZWAgc2V0IHRvIFtGaWxlU3lzdGVtRW50aXR5VHlwZS5ub3RGb3VuZF0gYW5kIHRoZSBvdGhlciBmaWVsZHMKICAgKiBpbnZhbGlkLgogICAqLwogIEZ1dHVyZTxGaWxlU3RhdD4gc3RhdCgpID0+IEZpbGVTdGF0LnN0YXQocGF0aCk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgY2FsbHMgdGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBzdGF0KCkgZnVuY3Rpb24gb24gdGhlCiAgICogW3BhdGhdIG9mIHRoaXMgW0ZpbGVTeXN0ZW1FbnRpdHldLgogICAqCiAgICogSWRlbnRpY2FsIHRvIFs6RmlsZVN0YXQuc3RhdFN5bmModGhpcy5wYXRoKTpdLgogICAqCiAgICogUmV0dXJucyBhIFtGaWxlU3RhdF0gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRhdGEgcmV0dXJuZWQgYnkgc3RhdCgpLgogICAqCiAgICogSWYgdGhlIGNhbGwgZmFpbHMsIHJldHVybnMgYSBbRmlsZVN0YXRdIG9iamVjdCB3aXRoIGAudHlwZWAgc2V0IHRvCiAgICogW0ZpbGVTeXN0ZW1FbnRpdHlUeXBlLm5vdEZvdW5kXSBhbmQgdGhlIG90aGVyIGZpZWxkcyBpbnZhbGlkLgogICAqLwogIEZpbGVTdGF0IHN0YXRTeW5jKCkgPT4gRmlsZVN0YXQuc3RhdFN5bmMocGF0aCk7CgogIC8qKgogICAqIERlbGV0ZXMgdGhpcyBbRmlsZVN5c3RlbUVudGl0eV0uCiAgICoKICAgKiBJZiB0aGUgW0ZpbGVTeXN0ZW1FbnRpdHldIGlzIGEgZGlyZWN0b3J5LCBhbmQgaWYgW3JlY3Vyc2l2ZV0gaXMgZmFsc2UsCiAgICogdGhlIGRpcmVjdG9yeSBtdXN0IGJlIGVtcHR5LiBPdGhlcndpc2UsIGlmIFtyZWN1cnNpdmVdIGlzIHRydWUsIHRoZQogICAqIGRpcmVjdG9yeSBhbmQgYWxsIHN1Yi1kaXJlY3RvcmllcyBhbmQgZmlsZXMgaW4gdGhlIGRpcmVjdG9yaWVzIGFyZQogICAqIGRlbGV0ZWQuIExpbmtzIGFyZSBub3QgZm9sbG93ZWQgd2hlbiBkZWxldGluZyByZWN1cnNpdmVseS4gT25seSB0aGUgbGluawogICAqIGlzIGRlbGV0ZWQsIG5vdCBpdHMgdGFyZ2V0LgogICAqCiAgICogSWYgW3JlY3Vyc2l2ZV0gaXMgdHJ1ZSwgdGhlIFtGaWxlU3lzdGVtRW50aXR5XSBpcyBkZWxldGVkIGV2ZW4gaWYgdGhlIHR5cGUKICAgKiBvZiB0aGUgW0ZpbGVTeXN0ZW1FbnRpdHldIGRvZXNuJ3QgbWF0Y2ggdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUgc3lzdGVtLgogICAqIFRoaXMgYmVoYXZpb3IgYWxsb3dzIFtkZWxldGVdIHRvIGJlIHVzZWQgdG8gdW5jb25kaXRpb25hbGx5IGRlbGV0ZSBhbnkgZmlsZQogICAqIHN5c3RlbSBvYmplY3QuCiAgICoKICAgKiBSZXR1cm5zIGEgWzpGdXR1cmU8RmlsZVN5c3RlbUVudGl0eT46XSB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoaXMKICAgKiBbRmlsZVN5c3RlbUVudGl0eV0gd2hlbiB0aGUgZGVsZXRpb24gaXMgZG9uZS4gSWYgdGhlIFtGaWxlU3lzdGVtRW50aXR5XQogICAqIGNhbm5vdCBiZSBkZWxldGVkLCB0aGUgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGV4Y2VwdGlvbi4KICAgKi8KICBGdXR1cmU8RmlsZVN5c3RlbUVudGl0eT4gZGVsZXRlKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KSA9PgogICAgICBfZGVsZXRlKHJlY3Vyc2l2ZTogcmVjdXJzaXZlKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBkZWxldGVzIHRoaXMgW0ZpbGVTeXN0ZW1FbnRpdHldLgogICAqCiAgICogSWYgdGhlIFtGaWxlU3lzdGVtRW50aXR5XSBpcyBhIGRpcmVjdG9yeSwgYW5kIGlmIFtyZWN1cnNpdmVdIGlzIGZhbHNlLAogICAqIHRoZSBkaXJlY3RvcnkgbXVzdCBiZSBlbXB0eS4gT3RoZXJ3aXNlLCBpZiBbcmVjdXJzaXZlXSBpcyB0cnVlLCB0aGUKICAgKiBkaXJlY3RvcnkgYW5kIGFsbCBzdWItZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGluIHRoZSBkaXJlY3RvcmllcyBhcmUKICAgKiBkZWxldGVkLiBMaW5rcyBhcmUgbm90IGZvbGxvd2VkIHdoZW4gZGVsZXRpbmcgcmVjdXJzaXZlbHkuIE9ubHkgdGhlIGxpbmsKICAgKiBpcyBkZWxldGVkLCBub3QgaXRzIHRhcmdldC4KICAgKgogICAqIElmIFtyZWN1cnNpdmVdIGlzIHRydWUsIHRoZSBbRmlsZVN5c3RlbUVudGl0eV0gaXMgZGVsZXRlZCBldmVuIGlmIHRoZSB0eXBlCiAgICogb2YgdGhlIFtGaWxlU3lzdGVtRW50aXR5XSBkb2Vzbid0IG1hdGNoIHRoZSBjb250ZW50IG9mIHRoZSBmaWxlIHN5c3RlbS4KICAgKiBUaGlzIGJlaGF2aW9yIGFsbG93cyBbZGVsZXRlU3luY10gdG8gYmUgdXNlZCB0byB1bmNvbmRpdGlvbmFsbHkgZGVsZXRlIGFueQogICAqIGZpbGUgc3lzdGVtIG9iamVjdC4KICAgKgogICAqIFRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIFtGaWxlU3lzdGVtRW50aXR5XSBjYW5ub3QgYmUgZGVsZXRlZC4KICAgKi8KICB2b2lkIGRlbGV0ZVN5bmMoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pID0+IF9kZWxldGVTeW5jKHJlY3Vyc2l2ZTogcmVjdXJzaXZlKTsKCiAgLyoqCiAgICogU3RhcnQgd2F0Y2hpbmcgdGhlIFtGaWxlU3lzdGVtRW50aXR5XSBmb3IgY2hhbmdlcy4KICAgKgogICAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHBsYXRmb3JtLWRlcGVuZGVudCBldmVudC1iYXNlZCBBUElzIGZvciByZWNlaXZpbmcKICAgKiBmaWxlLXN5c3RlbSBub3RpZmljYXRpb25zLCB0aHVzIGJlaGF2aW9yIGRlcGVuZHMgb24gdGhlIHBsYXRmb3JtLgogICAqCiAgICogICAqIGBXaW5kb3dzYDogVXNlcyBgUmVhZERpcmVjdG9yeUNoYW5nZXNXYC4gVGhlIGltcGxlbWVudGF0aW9uIG9ubHkKICAgKiAgICAgc3VwcG9ydHMgd2F0Y2hpbmcgZGlyZWN0b3JpZXMuIFJlY3Vyc2l2ZSB3YXRjaGluZyBpcyBzdXBwb3J0ZWQuCiAgICogICAqIGBMaW51eGA6IFVzZXMgYGlub3RpZnlgLiBUaGUgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgd2F0Y2hpbmcgYm90aAogICAqICAgICBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuIFJlY3Vyc2l2ZSB3YXRjaGluZyBpcyBub3Qgc3VwcG9ydGVkLgogICAqICAgICBOb3RlOiBXaGVuIHdhdGNoaW5nIGZpbGVzIGRpcmVjdGx5LCBkZWxldGUgZXZlbnRzIG1pZ2h0IG5vdCBoYXBwZW4KICAgKiAgICAgYXMgZXhwZWN0ZWQuCiAgICogICAqIGBPUyBYYDogVXNlcyBgRlNFdmVudHNgLiBUaGUgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgd2F0Y2hpbmcgYm90aAogICAqICAgICBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuIFJlY3Vyc2l2ZSB3YXRjaGluZyBpcyBzdXBwb3J0ZWQuCiAgICoKICAgKiBUaGUgc3lzdGVtIHdpbGwgc3RhcnQgbGlzdGVuaW5nIGZvciBldmVudHMgb25jZSB0aGUgcmV0dXJuZWQgW1N0cmVhbV0gaXMKICAgKiBiZWluZyBsaXN0ZW5lZCB0bywgbm90IHdoZW4gdGhlIGNhbGwgdG8gW3dhdGNoXSBpcyBpc3N1ZWQuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgYW4gZW5kbGVzcyBicm9hZGNhc3QgW1N0cmVhbV0sIHRoYXQgb25seSBzdG9wcyB3aGVuCiAgICogb25lIG9mIHRoZSBmb2xsb3dpbmcgaGFwcGVuczoKICAgKgogICAqICAgKiBUaGUgW1N0cmVhbV0gaXMgY2FuY2VsZWQsIGUuZy4gYnkgY2FsbGluZyBgY2FuY2VsYCBvbiB0aGUKICAgKiAgICAgIFtTdHJlYW1TdWJzY3JpcHRpb25dLgogICAqICAgKiBUaGUgW0ZpbGVTeXN0ZW1FbnRpdHldIGJlaW5nIHdhdGNoZWQsIGlzIGRlbGV0ZWQuCiAgICogICAqIFN5c3RlbSBXYXRjaGVyIGV4aXRzIHVuZXhwZWN0ZWRseS4gZS5nLiBPbiBgV2luZG93c2AgdGhpcyBoYXBwZW5zIHdoZW4KICAgKiAgICAgYnVmZmVyIHRoYXQgcmVjZWl2ZSBldmVudHMgZnJvbSBgUmVhZERpcmVjdG9yeUNoYW5nZXNXYCBvdmVyZmxvd3MuCiAgICoKICAgKiBVc2UgYGV2ZW50c2AgdG8gc3BlY2lmeSB3aGF0IGV2ZW50cyB0byBsaXN0ZW4gZm9yLiBUaGUgY29uc3RhbnRzIGluCiAgICogW0ZpbGVTeXN0ZW1FdmVudF0gY2FuIGJlIG9yJ2VkIHRvZ2V0aGVyIHRvIG1peCBldmVudHMuIERlZmF1bHQgaXMKICAgKiBbRmlsZVN5c3RlbUV2ZW50LkFMTF0uCiAgICoKICAgKiBBIG1vdmUgZXZlbnQgbWF5IGJlIHJlcG9ydGVkIGFzIHNlcGVyYXRlIGRlbGV0ZSBhbmQgY3JlYXRlIGV2ZW50cy4KICAgKi8KICBTdHJlYW08RmlsZVN5c3RlbUV2ZW50PiB3YXRjaCgKICAgICAge2ludCBldmVudHM6IEZpbGVTeXN0ZW1FdmVudC5hbGwsIGJvb2wgcmVjdXJzaXZlOiBmYWxzZX0pIHsKICAgIC8vIEZJWE1FKGJrb255aSk6IGZpbmQgYSB3YXkgdG8gZG8gdGhpcyB1c2luZyB0aGUgcmF3IHBhdGguCiAgICBmaW5hbCBTdHJpbmcgdHJpbW1lZFBhdGggPSBfdHJpbVRyYWlsaW5nUGF0aFNlcGFyYXRvcnMocGF0aCk7CiAgICBmaW5hbCBJT092ZXJyaWRlcyBvdmVycmlkZXMgPSBJT092ZXJyaWRlcy5jdXJyZW50OwogICAgaWYgKG92ZXJyaWRlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfRmlsZVN5c3RlbVdhdGNoZXIuX3dhdGNoKHRyaW1tZWRQYXRoLCBldmVudHMsIHJlY3Vyc2l2ZSk7CiAgICB9CiAgICByZXR1cm4gb3ZlcnJpZGVzLmZzV2F0Y2godHJpbW1lZFBhdGgsIGV2ZW50cywgcmVjdXJzaXZlKTsKICB9CgogIEZ1dHVyZTxGaWxlU3lzdGVtRW50aXR5PiBfZGVsZXRlKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KTsKICB2b2lkIF9kZWxldGVTeW5jKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KTsKCiAgc3RhdGljIEZ1dHVyZTxib29sPiBfaWRlbnRpY2FsKFN0cmluZyBwYXRoMSwgU3RyaW5nIHBhdGgyKSB7CiAgICByZXR1cm4gX0ZpbGUuX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICBfSU9TZXJ2aWNlLmZpbGVJZGVudGljYWwsIFtudWxsLCBwYXRoMSwgcGF0aDJdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLAogICAgICAgICAgICAiRXJyb3IgaW4gRmlsZVN5c3RlbUVudGl0eS5pZGVudGljYWwoJHBhdGgxLCAkcGF0aDIpIiwgIiIpOwogICAgICB9CiAgICAgIHJldHVybiByZXNwb25zZTsKICAgIH0pOwogIH0KCiAgLyoqCiAgICogQ2hlY2tzIHdoZXRoZXIgdHdvIHBhdGhzIHJlZmVyIHRvIHRoZSBzYW1lIG9iamVjdCBpbiB0aGUKICAgKiBmaWxlIHN5c3RlbS4KICAgKgogICAqIFJldHVybnMgYSBbOkZ1dHVyZTxib29sPjpdIHRoYXQgY29tcGxldGVzIHdpdGggdGhlIHJlc3VsdC4KICAgKgogICAqIENvbXBhcmluZyBhIGxpbmsgdG8gaXRzIHRhcmdldCByZXR1cm5zIGZhbHNlLCBhcyBkb2VzIGNvbXBhcmluZyB0d28gbGlua3MKICAgKiB0aGF0IHBvaW50IHRvIHRoZSBzYW1lIHRhcmdldC4gIFRvIGNoZWNrIHRoZSB0YXJnZXQgb2YgYSBsaW5rLCB1c2UKICAgKiBMaW5rLnRhcmdldCBleHBsaWNpdGx5IHRvIGZldGNoIGl0LiAgRGlyZWN0b3J5IGxpbmtzIGFwcGVhcmluZwogICAqIGluc2lkZSBhIHBhdGggYXJlIGZvbGxvd2VkLCB0aG91Z2gsIHRvIGZpbmQgdGhlIGZpbGUgc3lzdGVtIG9iamVjdC4KICAgKgogICAqIENvbXBsZXRlcyB0aGUgcmV0dXJuZWQgRnV0dXJlIHdpdGggYW4gZXJyb3IgaWYgb25lIG9mIHRoZSBwYXRocyBwb2ludHMKICAgKiB0byBhbiBvYmplY3QgdGhhdCBkb2VzIG5vdCBleGlzdC4KICAgKi8KICBzdGF0aWMgRnV0dXJlPGJvb2w+IGlkZW50aWNhbChTdHJpbmcgcGF0aDEsIFN0cmluZyBwYXRoMikgewogICAgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2lkZW50aWNhbChwYXRoMSwgcGF0aDIpOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5mc2VJZGVudGljYWwocGF0aDEsIHBhdGgyKTsKICB9CgogIHN0YXRpYyBmaW5hbCBSZWdFeHAgX2Fic29sdXRlV2luZG93c1BhdGhQYXR0ZXJuID0KICAgICAgbmV3IFJlZ0V4cChyJ14oXFxcXHxbYS16QS1aXTpbL1xcXSknKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIFtib29sXSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhpcyBvYmplY3QncyBwYXRoIGlzIGFic29sdXRlLgogICAqCiAgICogT24gV2luZG93cywgYSBwYXRoIGlzIGFic29sdXRlIGlmIGl0IHN0YXJ0cyB3aXRoIFxcXFwgb3IgYSBkcml2ZSBsZXR0ZXIKICAgKiBiZXR3ZWVuIGEgYW5kIHogKHVwcGVyIG9yIGxvd2VyIGNhc2UpIGZvbGxvd2VkIGJ5IDpcXCBvciA6Ly4KICAgKiBPbiBub24tV2luZG93cywgYSBwYXRoIGlzIGFic29sdXRlIGlmIGl0IHN0YXJ0cyB3aXRoIC8uCiAgICovCiAgYm9vbCBnZXQgaXNBYnNvbHV0ZSB7CiAgICBpZiAoUGxhdGZvcm0uaXNXaW5kb3dzKSB7CiAgICAgIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoX2Fic29sdXRlV2luZG93c1BhdGhQYXR0ZXJuKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoJy8nKTsKICAgIH0KICB9CgogIC8qKgogICAqIFJldHVybnMgYSBbRmlsZVN5c3RlbUVudGl0eV0gd2hvc2UgcGF0aCBpcyB0aGUgYWJzb2x1dGUgcGF0aCB0byBbdGhpc10uCiAgICoKICAgKiBUaGUgdHlwZSBvZiB0aGUgcmV0dXJuZWQgaW5zdGFuY2UgaXMgdGhlIHR5cGUgb2YgW3RoaXNdLgogICAqCiAgICogVGhlIGFic29sdXRlIHBhdGggaXMgY29tcHV0ZWQgYnkgcHJlZml4aW5nCiAgICogYSByZWxhdGl2ZSBwYXRoIHdpdGggdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksIGFuZCByZXR1cm5pbmcKICAgKiBhbiBhYnNvbHV0ZSBwYXRoIHVuY2hhbmdlZC4KICAgKi8KICBGaWxlU3lzdGVtRW50aXR5IGdldCBhYnNvbHV0ZTsKCiAgU3RyaW5nIGdldCBfYWJzb2x1dGVQYXRoIHsKICAgIGlmIChpc0Fic29sdXRlKSByZXR1cm4gcGF0aDsKICAgIFN0cmluZyBjdXJyZW50ID0gRGlyZWN0b3J5LmN1cnJlbnQucGF0aDsKICAgIGlmIChjdXJyZW50LmVuZHNXaXRoKCcvJykgfHwKICAgICAgICAoUGxhdGZvcm0uaXNXaW5kb3dzICYmIGN1cnJlbnQuZW5kc1dpdGgoJ1xcJykpKSB7CiAgICAgIHJldHVybiAnJGN1cnJlbnQkcGF0aCc7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJyRjdXJyZW50JHtQbGF0Zm9ybS5wYXRoU2VwYXJhdG9yfSRwYXRoJzsKICAgIH0KICB9CgogIFVpbnQ4TGlzdCBnZXQgX3Jhd0Fic29sdXRlUGF0aCB7CiAgICBpZiAoaXNBYnNvbHV0ZSkgcmV0dXJuIF9yYXdQYXRoOwogICAgdmFyIGN1cnJlbnQgPSBEaXJlY3RvcnkuY3VycmVudC5fcmF3UGF0aC50b0xpc3QoKTsKICAgIGFzc2VydChjdXJyZW50Lmxhc3QgPT0gMCk7CiAgICBjdXJyZW50LnJlbW92ZUxhc3QoKTsgLy8gUmVtb3ZlIG51bGwgdGVybWluYXRvci4KICAgIGlmICgoY3VycmVudC5sYXN0ID09ICcvJy5jb2RlVW5pdEF0KDApKSB8fAogICAgICAgIChQbGF0Zm9ybS5pc1dpbmRvd3MgJiYgKGN1cnJlbnQubGFzdCA9PSAnXFwnLmNvZGVVbml0QXQoMCkpKSkgewogICAgICBjdXJyZW50LmFkZEFsbChfcmF3UGF0aCk7CiAgICAgIHJldHVybiBuZXcgVWludDhMaXN0LmZyb21MaXN0KGN1cnJlbnQpOwogICAgfSBlbHNlIHsKICAgICAgY3VycmVudC5hZGRBbGwodXRmOC5lbmNvZGUoUGxhdGZvcm0ucGF0aFNlcGFyYXRvcikpOwogICAgICBjdXJyZW50LmFkZEFsbChfcmF3UGF0aCk7CiAgICAgIHJldHVybiBuZXcgVWludDhMaXN0LmZyb21MaXN0KGN1cnJlbnQpOwogICAgfQogIH0KCiAgc3RhdGljIGJvb2wgX2lkZW50aWNhbFN5bmMoU3RyaW5nIHBhdGgxLCBTdHJpbmcgcGF0aDIpIHsKICAgIHZhciByZXN1bHQgPSBfaWRlbnRpY2FsTmF0aXZlKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgcGF0aDEsIHBhdGgyKTsKICAgIF90aHJvd0lmRXJyb3IocmVzdWx0LCAnRXJyb3IgaW4gRmlsZVN5c3RlbUVudGl0eS5pZGVudGljYWxTeW5jJyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBjaGVja3Mgd2hldGhlciB0d28gcGF0aHMgcmVmZXIgdG8gdGhlIHNhbWUgb2JqZWN0IGluIHRoZQogICAqIGZpbGUgc3lzdGVtLgogICAqCiAgICogQ29tcGFyaW5nIGEgbGluayB0byBpdHMgdGFyZ2V0IHJldHVybnMgZmFsc2UsIGFzIGRvZXMgY29tcGFyaW5nIHR3byBsaW5rcwogICAqIHRoYXQgcG9pbnQgdG8gdGhlIHNhbWUgdGFyZ2V0LiAgVG8gY2hlY2sgdGhlIHRhcmdldCBvZiBhIGxpbmssIHVzZQogICAqIExpbmsudGFyZ2V0IGV4cGxpY2l0bHkgdG8gZmV0Y2ggaXQuICBEaXJlY3RvcnkgbGlua3MgYXBwZWFyaW5nCiAgICogaW5zaWRlIGEgcGF0aCBhcmUgZm9sbG93ZWQsIHRob3VnaCwgdG8gZmluZCB0aGUgZmlsZSBzeXN0ZW0gb2JqZWN0LgogICAqCiAgICogVGhyb3dzIGFuIGVycm9yIGlmIG9uZSBvZiB0aGUgcGF0aHMgcG9pbnRzIHRvIGFuIG9iamVjdCB0aGF0IGRvZXMgbm90CiAgICogZXhpc3QuCiAgICovCiAgc3RhdGljIGJvb2wgaWRlbnRpY2FsU3luYyhTdHJpbmcgcGF0aDEsIFN0cmluZyBwYXRoMikgewogICAgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2lkZW50aWNhbFN5bmMocGF0aDEsIHBhdGgyKTsKICAgIH0KICAgIHJldHVybiBvdmVycmlkZXMuZnNlSWRlbnRpY2FsU3luYyhwYXRoMSwgcGF0aDIpOwogIH0KCiAgLyoqCiAgICogVGVzdCBpZiBbd2F0Y2hdIGlzIHN1cHBvcnRlZCBvbiB0aGUgY3VycmVudCBzeXN0ZW0uCiAgICoKICAgKiBPUyBYIDEwLjYgYW5kIGJlbG93IGlzIG5vdCBzdXBwb3J0ZWQuCiAgICovCiAgc3RhdGljIGJvb2wgZ2V0IGlzV2F0Y2hTdXBwb3J0ZWQgewogICAgZmluYWwgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX0ZpbGVTeXN0ZW1XYXRjaGVyLmlzU3VwcG9ydGVkOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5mc1dhdGNoSXNTdXBwb3J0ZWQoKTsKICB9CgogIC8vIFRoZSBuYXRpdmUgbWV0aG9kcyB3aGljaCBkZXRlcm1pbmUgdHlwZSBvZiB0aGUgRmlsZVN5c3RlbUVudGl0eSByZXF1aXJlCiAgLy8gdGhhdCB0aGUgYnVmZmVyIHByb3ZpZGVkIGlzIG51bGwgdGVybWluYXRlZC4KICBzdGF0aWMgVWludDhMaXN0IF90b1V0ZjhBcnJheShTdHJpbmcgcykgPT4KICAgICAgX3RvTnVsbFRlcm1pbmF0ZWRVdGY4QXJyYXkodXRmOC5lbmNvZGUocykpOwoKICBzdGF0aWMgVWludDhMaXN0IF90b051bGxUZXJtaW5hdGVkVXRmOEFycmF5KFVpbnQ4TGlzdCBsKSB7CiAgICBpZiAobCA9PSBudWxsKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKGwuaXNOb3RFbXB0eSAmJiBsLmxhc3QgIT0gMCkgewogICAgICBmaW5hbCB0bXAgPSBuZXcgVWludDhMaXN0KGwubGVuZ3RoICsgMSk7CiAgICAgIHRtcC5zZXRSYW5nZSgwLCBsLmxlbmd0aCwgbCk7CiAgICAgIHJldHVybiB0bXA7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbDsKICAgIH0KICB9CgogIHN0YXRpYyBTdHJpbmcgX3RvU3RyaW5nRnJvbVV0ZjhBcnJheShVaW50OExpc3QgbCkgewogICAgaWYgKGwgPT0gbnVsbCkgewogICAgICByZXR1cm4gJyc7CiAgICB9CiAgICBVaW50OExpc3Qgbm9uTnVsbFRlcm1pbmF0ZWQgPSBsOwogICAgaWYgKGwubGFzdCA9PSAwKSB7CiAgICAgIG5vbk51bGxUZXJtaW5hdGVkID0KICAgICAgICAgIG5ldyBVaW50OExpc3QudmlldyhsLmJ1ZmZlciwgbC5vZmZzZXRJbkJ5dGVzLCBsLmxlbmd0aCAtIDEpOwogICAgfQogICAgcmV0dXJuIHV0ZjguZGVjb2RlKG5vbk51bGxUZXJtaW5hdGVkLCBhbGxvd01hbGZvcm1lZDogdHJ1ZSk7CiAgfQoKICAvKioKICAgKiBGaW5kcyB0aGUgdHlwZSBvZiBmaWxlIHN5c3RlbSBvYmplY3QgdGhhdCBhIHBhdGggcG9pbnRzIHRvLgogICAqCiAgICogUmV0dXJucyBhIFs6RnV0dXJlPEZpbGVTeXN0ZW1FbnRpdHlUeXBlPjpdIHRoYXQgY29tcGxldGVzIHdpdGggdGhlIHNhbWUKICAgKiByZXN1bHRzIGFzIFt0eXBlU3luY10uCiAgICovCiAgc3RhdGljIEZ1dHVyZTxGaWxlU3lzdGVtRW50aXR5VHlwZT4gdHlwZShTdHJpbmcgcGF0aCwKICAgICAge2Jvb2wgZm9sbG93TGlua3M6IHRydWV9KSB7CiAgICByZXR1cm4gX2dldFR5cGUoX3RvVXRmOEFycmF5KHBhdGgpLCBmb2xsb3dMaW5rcyk7CiAgfQoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGZpbmRzIHRoZSB0eXBlIG9mIGZpbGUgc3lzdGVtIG9iamVjdCB0aGF0IGEgcGF0aCBwb2ludHMgdG8uCiAgICoKICAgKiBSZXR1cm5zIGEgW0ZpbGVTeXN0ZW1FbnRpdHlUeXBlXS4KICAgKgogICAqIFJldHVybnMgW0ZpbGVTeXN0ZW1FbnRpdHlUeXBlLmxpbmtdIG9ubHkgaWYgW2ZvbGxvd0xpbmtzXSBpcyBmYWxzZSBhbmQgaWYKICAgKiBbcGF0aF0gcG9pbnRzIHRvIGEgbGluay4KICAgKgogICAqIFJldHVybnMgW0ZpbGVTeXN0ZW1FbnRpdHlUeXBlLm5vdEZvdW5kXSBpZiBbcGF0aF0gZG9lcyBub3QgcG9pbnQgdG8gYSBmaWxlCiAgICogc3lzdGVtIG9iamVjdCBvciBpZiBhbnkgb3RoZXIgZXJyb3Igb2NjdXJzIGluIGxvb2tpbmcgdXAgdGhlIHBhdGguCiAgICovCiAgc3RhdGljIEZpbGVTeXN0ZW1FbnRpdHlUeXBlIHR5cGVTeW5jKFN0cmluZyBwYXRoLCB7Ym9vbCBmb2xsb3dMaW5rczogdHJ1ZX0pIHsKICAgIHJldHVybiBfZ2V0VHlwZVN5bmMoX3RvVXRmOEFycmF5KHBhdGgpLCBmb2xsb3dMaW5rcyk7CiAgfQoKICAvKioKICAgKiBDaGVja3MgaWYgdHlwZShwYXRoLCBmb2xsb3dMaW5rczogZmFsc2UpIHJldHVybnMgRmlsZVN5c3RlbUVudGl0eVR5cGUubGluay4KICAgKi8KICBzdGF0aWMgRnV0dXJlPGJvb2w+IGlzTGluayhTdHJpbmcgcGF0aCkgPT4gX2lzTGlua1JhdyhfdG9VdGY4QXJyYXkocGF0aCkpOwoKICBzdGF0aWMgRnV0dXJlPGJvb2w+IF9pc0xpbmtSYXcoVWludDhMaXN0IHJhd1BhdGgpID0+IF9nZXRUeXBlKHJhd1BhdGgsIGZhbHNlKQogICAgICAudGhlbigodHlwZSkgPT4gKHR5cGUgPT0gRmlsZVN5c3RlbUVudGl0eVR5cGUubGluaykpOwoKICAvKioKICAgKiBDaGVja3MgaWYgdHlwZShwYXRoKSByZXR1cm5zIEZpbGVTeXN0ZW1FbnRpdHlUeXBlLmZpbGUuCiAgICovCiAgc3RhdGljIEZ1dHVyZTxib29sPiBpc0ZpbGUoU3RyaW5nIHBhdGgpID0+IF9nZXRUeXBlKF90b1V0ZjhBcnJheShwYXRoKSwgdHJ1ZSkKICAgICAgLnRoZW4oKHR5cGUpID0+ICh0eXBlID09IEZpbGVTeXN0ZW1FbnRpdHlUeXBlLmZpbGUpKTsKCiAgLyoqCiAgICogQ2hlY2tzIGlmIHR5cGUocGF0aCkgcmV0dXJucyBGaWxlU3lzdGVtRW50aXR5VHlwZS5kaXJlY3RvcnkuCiAgICovCiAgc3RhdGljIEZ1dHVyZTxib29sPiBpc0RpcmVjdG9yeShTdHJpbmcgcGF0aCkgPT4KICAgICAgX2dldFR5cGUoX3RvVXRmOEFycmF5KHBhdGgpLCB0cnVlKQogICAgICAgICAgLnRoZW4oKHR5cGUpID0+ICh0eXBlID09IEZpbGVTeXN0ZW1FbnRpdHlUeXBlLmRpcmVjdG9yeSkpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGNoZWNrcyBpZiB0eXBlU3luYyhwYXRoLCBmb2xsb3dMaW5rczogZmFsc2UpIHJldHVybnMKICAgKiBGaWxlU3lzdGVtRW50aXR5VHlwZS5saW5rLgogICAqLwogIHN0YXRpYyBib29sIGlzTGlua1N5bmMoU3RyaW5nIHBhdGgpID0+IF9pc0xpbmtSYXdTeW5jKF90b1V0ZjhBcnJheShwYXRoKSk7CgogIHN0YXRpYyBib29sIF9pc0xpbmtSYXdTeW5jKHJhd1BhdGgpID0+CiAgICAgIChfZ2V0VHlwZVN5bmMocmF3UGF0aCwgZmFsc2UpID09IEZpbGVTeXN0ZW1FbnRpdHlUeXBlLmxpbmspOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGNoZWNrcyBpZiB0eXBlU3luYyhwYXRoKSByZXR1cm5zCiAgICogRmlsZVN5c3RlbUVudGl0eVR5cGUuZmlsZS4KICAgKi8KICBzdGF0aWMgYm9vbCBpc0ZpbGVTeW5jKFN0cmluZyBwYXRoKSA9PgogICAgICAoX2dldFR5cGVTeW5jKF90b1V0ZjhBcnJheShwYXRoKSwgdHJ1ZSkgPT0gRmlsZVN5c3RlbUVudGl0eVR5cGUuZmlsZSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgY2hlY2tzIGlmIHR5cGVTeW5jKHBhdGgpIHJldHVybnMKICAgKiBGaWxlU3lzdGVtRW50aXR5VHlwZS5kaXJlY3RvcnkuCiAgICovCiAgc3RhdGljIGJvb2wgaXNEaXJlY3RvcnlTeW5jKFN0cmluZyBwYXRoKSA9PgogICAgICAoX2dldFR5cGVTeW5jKF90b1V0ZjhBcnJheShwYXRoKSwgdHJ1ZSkgPT0KICAgICAgICAgIEZpbGVTeXN0ZW1FbnRpdHlUeXBlLmRpcmVjdG9yeSk7CgogIGV4dGVybmFsIHN0YXRpYyBfZ2V0VHlwZU5hdGl2ZSgKICAgICAgX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoLCBib29sIGZvbGxvd0xpbmtzKTsKICBleHRlcm5hbCBzdGF0aWMgX2lkZW50aWNhbE5hdGl2ZSgKICAgICAgX05hbWVzcGFjZSBuYW1lc3BhY2UsIFN0cmluZyBwYXRoMSwgU3RyaW5nIHBhdGgyKTsKICBleHRlcm5hbCBzdGF0aWMgX3Jlc29sdmVTeW1ib2xpY0xpbmtzKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcGF0aCk7CgogIC8vIEZpbmRzIHRoZSBuZXh0LXRvLWxhc3QgY29tcG9uZW50IHdoZW4gZGl2aWRpbmcgYXQgcGF0aCBzZXBhcmF0b3JzLgogIHN0YXRpYyBmaW5hbCBSZWdFeHAgX3BhcmVudFJlZ0V4cCA9IFBsYXRmb3JtLmlzV2luZG93cwogICAgICA/IG5ldyBSZWdFeHAocidbXi9cXF1bL1xcXStbXi9cXF0nKQogICAgICA6IG5ldyBSZWdFeHAocidbXi9dLytbXi9dJyk7CgogIC8qKgogICAqIFJlbW92ZXMgdGhlIGZpbmFsIHBhdGggY29tcG9uZW50IG9mIGEgcGF0aCwgdXNpbmcgdGhlIHBsYXRmb3JtJ3MKICAgKiBwYXRoIHNlcGFyYXRvciB0byBzcGxpdCB0aGUgcGF0aC4KICAgKgogICAqIFdpbGwgbm90IHJlbW92ZSB0aGUgcm9vdCBjb21wb25lbnQgb2YgYSBXaW5kb3dzIHBhdGgsIGxpa2UgIkM6XFwiIG9yCiAgICogIlxcXFxzZXJ2ZXJfbmFtZVxcIi4gSWdub3JlcyB0cmFpbGluZyBwYXRoIHNlcGFyYXRvcnMsIGFuZCBsZWF2ZXMgbm8KICAgKiB0cmFpbGluZyBwYXRoIHNlcGFyYXRvcnMuCiAgICovCiAgc3RhdGljIFN0cmluZyBwYXJlbnRPZihTdHJpbmcgcGF0aCkgewogICAgaW50IHJvb3RFbmQgPSAtMTsKICAgIGlmIChQbGF0Zm9ybS5pc1dpbmRvd3MpIHsKICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChfYWJzb2x1dGVXaW5kb3dzUGF0aFBhdHRlcm4pKSB7CiAgICAgICAgLy8gUm9vdCBlbmRzIGF0IGZpcnN0IC8gb3IgXCBhZnRlciB0aGUgZmlyc3QgdHdvIGNoYXJhY3RlcnMuCiAgICAgICAgcm9vdEVuZCA9IHBhdGguaW5kZXhPZihuZXcgUmVnRXhwKHInWy9cXF0nKSwgMik7CiAgICAgICAgaWYgKHJvb3RFbmQgPT0gLTEpIHJldHVybiBwYXRoOwogICAgICB9IGVsc2UgaWYgKHBhdGguc3RhcnRzV2l0aCgnXFwnKSB8fCBwYXRoLnN0YXJ0c1dpdGgoJy8nKSkgewogICAgICAgIHJvb3RFbmQgPSAwOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHBhdGguc3RhcnRzV2l0aCgnLycpKSB7CiAgICAgIHJvb3RFbmQgPSAwOwogICAgfQogICAgLy8gSWdub3JlIHRyYWlsaW5nIHNsYXNoZXMuCiAgICAvLyBBbGwgbm9uLXRyaXZpYWwgY2FzZXMgaGF2ZSBzZXBhcmF0b3JzIGJldHdlZW4gdHdvIG5vbi1zZXBhcmF0b3JzLgogICAgaW50IHBvcyA9IHBhdGgubGFzdEluZGV4T2YoX3BhcmVudFJlZ0V4cCk7CiAgICBpZiAocG9zID4gcm9vdEVuZCkgewogICAgICByZXR1cm4gcGF0aC5zdWJzdHJpbmcoMCwgcG9zICsgMSk7CiAgICB9IGVsc2UgaWYgKHJvb3RFbmQgPiAtMSkgewogICAgICByZXR1cm4gcGF0aC5zdWJzdHJpbmcoMCwgcm9vdEVuZCArIDEpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICcuJzsKICAgIH0KICB9CgogIC8qKgogICAqIFRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBbdGhpc10uCiAgICovCiAgRGlyZWN0b3J5IGdldCBwYXJlbnQgPT4gbmV3IERpcmVjdG9yeShwYXJlbnRPZihwYXRoKSk7CgogIHN0YXRpYyBGaWxlU3lzdGVtRW50aXR5VHlwZSBfZ2V0VHlwZVN5bmNIZWxwZXIoCiAgICAgIFVpbnQ4TGlzdCByYXdQYXRoLCBib29sIGZvbGxvd0xpbmtzKSB7CiAgICB2YXIgcmVzdWx0ID0gX2dldFR5cGVOYXRpdmUoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCByYXdQYXRoLCBmb2xsb3dMaW5rcyk7CiAgICBfdGhyb3dJZkVycm9yKHJlc3VsdCwgJ0Vycm9yIGdldHRpbmcgdHlwZSBvZiBGaWxlU3lzdGVtRW50aXR5Jyk7CiAgICByZXR1cm4gRmlsZVN5c3RlbUVudGl0eVR5cGUuX2xvb2t1cChyZXN1bHQpOwogIH0KCiAgc3RhdGljIEZpbGVTeXN0ZW1FbnRpdHlUeXBlIF9nZXRUeXBlU3luYygKICAgICAgVWludDhMaXN0IHJhd1BhdGgsIGJvb2wgZm9sbG93TGlua3MpIHsKICAgIElPT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IElPT3ZlcnJpZGVzLmN1cnJlbnQ7CiAgICBpZiAob3ZlcnJpZGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9nZXRUeXBlU3luY0hlbHBlcihyYXdQYXRoLCBmb2xsb3dMaW5rcyk7CiAgICB9CiAgICByZXR1cm4gb3ZlcnJpZGVzLmZzZUdldFR5cGVTeW5jKAogICAgICAgIHV0ZjguZGVjb2RlKHJhd1BhdGgsIGFsbG93TWFsZm9ybWVkOiB0cnVlKSwgZm9sbG93TGlua3MpOwogIH0KCiAgc3RhdGljIEZ1dHVyZTxGaWxlU3lzdGVtRW50aXR5VHlwZT4gX2dldFR5cGVSZXF1ZXN0KAogICAgICBVaW50OExpc3QgcmF3UGF0aCwgYm9vbCBmb2xsb3dMaW5rcykgewogICAgcmV0dXJuIF9GaWxlLl9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoCiAgICAgICAgX0lPU2VydmljZS5maWxlVHlwZSwgW251bGwsIHJhd1BhdGgsIGZvbGxvd0xpbmtzXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgIkVycm9yIGdldHRpbmcgdHlwZSIsCiAgICAgICAgICAgIHV0ZjguZGVjb2RlKHJhd1BhdGgsIGFsbG93TWFsZm9ybWVkOiB0cnVlKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIEZpbGVTeXN0ZW1FbnRpdHlUeXBlLl9sb29rdXAocmVzcG9uc2UpOwogICAgfSk7CiAgfQoKICBzdGF0aWMgRnV0dXJlPEZpbGVTeXN0ZW1FbnRpdHlUeXBlPiBfZ2V0VHlwZSgKICAgICAgVWludDhMaXN0IHJhd1BhdGgsIGJvb2wgZm9sbG93TGlua3MpIHsKICAgIElPT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IElPT3ZlcnJpZGVzLmN1cnJlbnQ7CiAgICBpZiAob3ZlcnJpZGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9nZXRUeXBlUmVxdWVzdChyYXdQYXRoLCBmb2xsb3dMaW5rcyk7CiAgICB9CiAgICByZXR1cm4gb3ZlcnJpZGVzLmZzZUdldFR5cGUoCiAgICAgICAgdXRmOC5kZWNvZGUocmF3UGF0aCwgYWxsb3dNYWxmb3JtZWQ6IHRydWUpLCBmb2xsb3dMaW5rcyk7CiAgfQoKICBzdGF0aWMgX3Rocm93SWZFcnJvcihPYmplY3QgcmVzdWx0LCBTdHJpbmcgbXNnLCBbU3RyaW5nIHBhdGhdKSB7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24obXNnLCBwYXRoLCByZXN1bHQpOwogICAgfSBlbHNlIGlmIChyZXN1bHQgaXMgQXJndW1lbnRFcnJvcikgewogICAgICB0aHJvdyByZXN1bHQ7CiAgICB9CiAgfQoKICAvLyBUT0RPKGJrb255aSk6IGZpbmQgYSB3YXkgdG8gZG8gdGhpcyB3aXRoIHJhdyBwYXRocy4KICBzdGF0aWMgU3RyaW5nIF90cmltVHJhaWxpbmdQYXRoU2VwYXJhdG9ycyhTdHJpbmcgcGF0aCkgewogICAgLy8gRG9uJ3QgaGFuZGxlIGFyZ3VtZW50IGVycm9ycyBoZXJlLgogICAgaWYgKHBhdGggPT0gbnVsbCkgcmV0dXJuIHBhdGg7CiAgICBpZiAoUGxhdGZvcm0uaXNXaW5kb3dzKSB7CiAgICAgIHdoaWxlIChwYXRoLmxlbmd0aCA+IDEgJiYKICAgICAgICAgIChwYXRoLmVuZHNXaXRoKFBsYXRmb3JtLnBhdGhTZXBhcmF0b3IpIHx8IHBhdGguZW5kc1dpdGgoJy8nKSkpIHsKICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMCwgcGF0aC5sZW5ndGggLSAxKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgd2hpbGUgKHBhdGgubGVuZ3RoID4gMSAmJiBwYXRoLmVuZHNXaXRoKFBsYXRmb3JtLnBhdGhTZXBhcmF0b3IpKSB7CiAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGVuZ3RoIC0gMSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBwYXRoOwogIH0KCiAgLy8gVE9ETyhia29ueWkpOiBmaW5kIGEgd2F5IHRvIGRvIHRoaXMgd2l0aCByYXcgcGF0aHMuCiAgc3RhdGljIFN0cmluZyBfZW5zdXJlVHJhaWxpbmdQYXRoU2VwYXJhdG9ycyhTdHJpbmcgcGF0aCkgewogICAgLy8gRG9uJ3QgaGFuZGxlIGFyZ3VtZW50IGVycm9ycyBoZXJlLgogICAgaWYgKHBhdGggPT0gbnVsbCkgcmV0dXJuIHBhdGg7CiAgICBpZiAocGF0aC5pc0VtcHR5KSBwYXRoID0gJy4nOwogICAgaWYgKFBsYXRmb3JtLmlzV2luZG93cykgewogICAgICB3aGlsZSAoIXBhdGguZW5kc1dpdGgoUGxhdGZvcm0ucGF0aFNlcGFyYXRvcikgJiYgIXBhdGguZW5kc1dpdGgoJy8nKSkgewogICAgICAgIHBhdGggPSAiJHBhdGgke1BsYXRmb3JtLnBhdGhTZXBhcmF0b3J9IjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgd2hpbGUgKCFwYXRoLmVuZHNXaXRoKFBsYXRmb3JtLnBhdGhTZXBhcmF0b3IpKSB7CiAgICAgICAgcGF0aCA9ICIkcGF0aCR7UGxhdGZvcm0ucGF0aFNlcGFyYXRvcn0iOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcGF0aDsKICB9Cn0KCi8qKgogKiBCYXNlIGV2ZW50IGNsYXNzIGVtaXR0ZWQgYnkgW0ZpbGVTeXN0ZW1FbnRpdHkud2F0Y2hdLgogKi8KY2xhc3MgRmlsZVN5c3RlbUV2ZW50IHsKICAvKioKICAgKiBCaXRmaWVsZCBmb3IgW0ZpbGVTeXN0ZW1FbnRpdHkud2F0Y2hdLCB0byBlbmFibGUgW0ZpbGVTeXN0ZW1DcmVhdGVFdmVudF1zLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgY3JlYXRlID0gMSA8PCAwOwogIEBEZXByZWNhdGVkKCJVc2UgY3JlYXRlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgQ1JFQVRFID0gMSA8PCAwOwoKICAvKioKICAgKiBCaXRmaWVsZCBmb3IgW0ZpbGVTeXN0ZW1FbnRpdHkud2F0Y2hdLCB0byBlbmFibGUgW0ZpbGVTeXN0ZW1Nb2RpZnlFdmVudF1zLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgbW9kaWZ5ID0gMSA8PCAxOwogIEBEZXByZWNhdGVkKCJVc2UgbW9kaWZ5IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTU9ESUZZID0gMSA8PCAxOwoKICAvKioKICAgKiBCaXRmaWVsZCBmb3IgW0ZpbGVTeXN0ZW1FbnRpdHkud2F0Y2hdLCB0byBlbmFibGUgW0ZpbGVTeXN0ZW1EZWxldGVFdmVudF1zLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgZGVsZXRlID0gMSA8PCAyOwogIEBEZXByZWNhdGVkKCJVc2UgZGVsZXRlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgREVMRVRFID0gMSA8PCAyOwoKICAvKioKICAgKiBCaXRmaWVsZCBmb3IgW0ZpbGVTeXN0ZW1FbnRpdHkud2F0Y2hdLCB0byBlbmFibGUgW0ZpbGVTeXN0ZW1Nb3ZlRXZlbnRdcy4KICAgKi8KICBzdGF0aWMgY29uc3QgaW50IG1vdmUgPSAxIDw8IDM7CiAgQERlcHJlY2F0ZWQoIlVzZSBtb3ZlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTU9WRSA9IDEgPDwgMzsKCiAgLyoqCiAgICogQml0ZmllbGQgZm9yIFtGaWxlU3lzdGVtRW50aXR5LndhdGNoXSwgZm9yIGVuYWJsaW5nIGFsbCBvZiBbY3JlYXRlXSwKICAgKiBbbW9kaWZ5XSwgW2RlbGV0ZV0gYW5kIFttb3ZlXS4KICAgKi8KICBzdGF0aWMgY29uc3QgaW50IGFsbCA9IGNyZWF0ZSB8IG1vZGlmeSB8IGRlbGV0ZSB8IG1vdmU7CiAgQERlcHJlY2F0ZWQoIlVzZSBhbGwgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBBTEwgPSBjcmVhdGUgfCBtb2RpZnkgfCBkZWxldGUgfCBtb3ZlOwoKICBzdGF0aWMgY29uc3QgaW50IF9tb2RpZnlBdHRyaWJ1dGVzID0gMSA8PCA0OwogIHN0YXRpYyBjb25zdCBpbnQgX2RlbGV0ZVNlbGYgPSAxIDw8IDU7CiAgc3RhdGljIGNvbnN0IGludCBfaXNEaXIgPSAxIDw8IDY7CgogIC8qKgogICAqIFRoZSB0eXBlIG9mIGV2ZW50LiBTZWUgW0ZpbGVTeXN0ZW1FdmVudF0gZm9yIGEgbGlzdCBvZiBldmVudHMuCiAgICovCiAgZmluYWwgaW50IHR5cGU7CgogIC8qKgogICAqIFRoZSBwYXRoIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudC4KICAgKgogICAqIERlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0gYW5kIHRoZSBGaWxlU3lzdGVtRW50aXR5LCB0aGUgcGF0aCBtYXkgYmUKICAgKiByZWxhdGl2ZS4KICAgKi8KICBmaW5hbCBTdHJpbmcgcGF0aDsKCiAgLyoqCiAgICogSXMgYHRydWVgIGlmIHRoZSBldmVudCB0YXJnZXQgd2FzIGEgZGlyZWN0b3J5LgogICAqCiAgICogTm90ZSB0aGF0IGlmIHRoZSBmaWxlIGhhcyBiZWVuIGRlbGV0ZWQgYnkgdGhlIHRpbWUgdGhlIGV2ZW50IGhhcyBhcnJpdmVkLAogICAqIHRoaXMgd2lsbCBhbHdheXMgYmUgYGZhbHNlYCBvbiBXaW5kb3dzLiBJbiBwYXJ0aWN1bGFyLCBpdCB3aWxsIGFsd2F5cyBiZQogICAqIGBmYWxzZWAgZm9yIGBkZWxldGVgIGV2ZW50cy4KICAgKi8KICBmaW5hbCBib29sIGlzRGlyZWN0b3J5OwoKICBGaWxlU3lzdGVtRXZlbnQuXyh0aGlzLnR5cGUsIHRoaXMucGF0aCwgdGhpcy5pc0RpcmVjdG9yeSk7Cn0KCi8qKgogKiBGaWxlIHN5c3RlbSBldmVudCBmb3IgbmV3bHkgY3JlYXRlZCBmaWxlIHN5c3RlbSBvYmplY3RzLgogKi8KY2xhc3MgRmlsZVN5c3RlbUNyZWF0ZUV2ZW50IGV4dGVuZHMgRmlsZVN5c3RlbUV2ZW50IHsKICBGaWxlU3lzdGVtQ3JlYXRlRXZlbnQuXyhwYXRoLCBpc0RpcmVjdG9yeSkKICAgICAgOiBzdXBlci5fKEZpbGVTeXN0ZW1FdmVudC5jcmVhdGUsIHBhdGgsIGlzRGlyZWN0b3J5KTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkZpbGVTeXN0ZW1DcmVhdGVFdmVudCgnJHBhdGgnKSI7Cn0KCi8qKgogKiBGaWxlIHN5c3RlbSBldmVudCBmb3IgbW9kaWZpY2F0aW9ucyBvZiBmaWxlIHN5c3RlbSBvYmplY3RzLgogKi8KY2xhc3MgRmlsZVN5c3RlbU1vZGlmeUV2ZW50IGV4dGVuZHMgRmlsZVN5c3RlbUV2ZW50IHsKICAvKioKICAgKiBJZiB0aGUgY29udGVudCB3YXMgY2hhbmdlZCBhbmQgbm90IG9ubHkgdGhlIGF0dHJpYnV0ZXMsIFtjb250ZW50Q2hhbmdlZF0KICAgKiBpcyBgdHJ1ZWAuCiAgICovCiAgZmluYWwgYm9vbCBjb250ZW50Q2hhbmdlZDsKCiAgRmlsZVN5c3RlbU1vZGlmeUV2ZW50Ll8ocGF0aCwgaXNEaXJlY3RvcnksIHRoaXMuY29udGVudENoYW5nZWQpCiAgICAgIDogc3VwZXIuXyhGaWxlU3lzdGVtRXZlbnQubW9kaWZ5LCBwYXRoLCBpc0RpcmVjdG9yeSk7CgogIFN0cmluZyB0b1N0cmluZygpID0+CiAgICAgICJGaWxlU3lzdGVtTW9kaWZ5RXZlbnQoJyRwYXRoJywgY29udGVudENoYW5nZWQ9JGNvbnRlbnRDaGFuZ2VkKSI7Cn0KCi8qKgogKiBGaWxlIHN5c3RlbSBldmVudCBmb3IgZGVsZXRpb24gb2YgZmlsZSBzeXN0ZW0gb2JqZWN0cy4KICovCmNsYXNzIEZpbGVTeXN0ZW1EZWxldGVFdmVudCBleHRlbmRzIEZpbGVTeXN0ZW1FdmVudCB7CiAgRmlsZVN5c3RlbURlbGV0ZUV2ZW50Ll8ocGF0aCwgaXNEaXJlY3RvcnkpCiAgICAgIDogc3VwZXIuXyhGaWxlU3lzdGVtRXZlbnQuZGVsZXRlLCBwYXRoLCBpc0RpcmVjdG9yeSk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJGaWxlU3lzdGVtRGVsZXRlRXZlbnQoJyRwYXRoJykiOwp9CgovKioKICogRmlsZSBzeXN0ZW0gZXZlbnQgZm9yIG1vdmluZyBvZiBmaWxlIHN5c3RlbSBvYmplY3RzLgogKi8KY2xhc3MgRmlsZVN5c3RlbU1vdmVFdmVudCBleHRlbmRzIEZpbGVTeXN0ZW1FdmVudCB7CiAgLyoqCiAgICogSWYgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gaXMgYWJsZSB0byBpZGVudGlmeSB0aGUgZGVzdGluYXRpb24gb2YKICAgKiB0aGUgbW92ZWQgZmlsZSwgW2Rlc3RpbmF0aW9uXSB3aWxsIGJlIHNldC4gT3RoZXJ3aXNlLCBpdCB3aWxsIGJlIGBudWxsYC4KICAgKi8KICBmaW5hbCBTdHJpbmcgZGVzdGluYXRpb247CgogIEZpbGVTeXN0ZW1Nb3ZlRXZlbnQuXyhwYXRoLCBpc0RpcmVjdG9yeSwgdGhpcy5kZXN0aW5hdGlvbikKICAgICAgOiBzdXBlci5fKEZpbGVTeXN0ZW1FdmVudC5tb3ZlLCBwYXRoLCBpc0RpcmVjdG9yeSk7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHZhciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBidWZmZXIud3JpdGUoIkZpbGVTeXN0ZW1Nb3ZlRXZlbnQoJyRwYXRoJyIpOwogICAgaWYgKGRlc3RpbmF0aW9uICE9IG51bGwpIGJ1ZmZlci53cml0ZSgiLCAnJGRlc3RpbmF0aW9uJyIpOwogICAgYnVmZmVyLndyaXRlKCcpJyk7CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQp9CgpjbGFzcyBfRmlsZVN5c3RlbVdhdGNoZXIgewogIGV4dGVybmFsIHN0YXRpYyBTdHJlYW08RmlsZVN5c3RlbUV2ZW50PiBfd2F0Y2goCiAgICAgIFN0cmluZyBwYXRoLCBpbnQgZXZlbnRzLCBib29sIHJlY3Vyc2l2ZSk7CiAgZXh0ZXJuYWwgc3RhdGljIGJvb2wgZ2V0IGlzU3VwcG9ydGVkOwp9CoPxAE5OPAEPAREBBFEDPCIDBAEdPyIcAUQnJgE/IhwBQyYlASMfJB8jBRMBNAFETwIBBFBJMwQRNBohIiIaGgE/AQZMDQVDBhoBBkgGGwEGSAVDHQYbAQY0BUUGIwEGKQVNLAYSAQYpBhIBTB0BJRgZGS4SEwFAAQZPBUtQQwYqNx0mBiUEATMyHkEGNzQjRUZGMxUWBAEGRxwFTQYuNx0aBiEEAS8yHkEGSxsoIwhDHyVHSEg1FxgIBAEbFRsdHR8ZAQY4BU5QTk8WBhgkUBU7Oz0LLS0nGgQCAQRHA0JBMgNAA0IlA0srR1ADJwMoPAsDAxYDDlhRTRcDG2tRA1JMHAQiEBYBEwEGRQVKMwYlAQZKOAVHPkZGR0NCFAUGGQEGSA0FRz5GRUFHQh8GFQEGJgVARQVOTEsGMwEGNAVDBU5MOwYvAQY/IAVQDwU/SEdMPAVPTDIFT00MBVElQRwNBVAPBiopUSgmPggXCAQBBj8gBVAPBUNIR0xABU9MMgVPUQwFUSVDGgVQDwYmSUITBAEGSBkFMAVLDQVGTg4GMgEGRygFNAVJBUhDBjIBBiYFTElITiEFUE1RFAVFTUAGPiUBBjQFTElITiEFUE1QGQVGBlEBBjgFT0cFSklMRUwWTEEFTkAFTyMFQyA7UEwFSUccBUgGIUJAQjcdSAY+BAE9LQE/KUooL0gIFwgEAQY+EgVABU9IREkFTCcGPjEdJwYxBAE0LQEGSQVNQj0GGB47DSMGBAEGTQU+BTBHIQYhAR0hLSE6Hg03BgQBIyU3HzUvSCAuDTsgLgYEATtIRhMEAQZMEgVPSERJBUsMBjoxHSsGNQQBBjkFKwYlNx0tBisEAU0yLTIBPRUTBicvJBINEAYEATYVEQYlFxpHBkEEAQZBBU0cBjgiNgQBBk8FJwVPHgVQSAZQOgQBBlEGTQFQPAEGPQZQPAEGQgYyKUUBBkggBk0BKUMBBjQgBilNAQY0JQYuMSsBIkIkOU8BSDkqIwEGRicFSkofBigWHjpFOShCFQgnEwYgSS8ZKR8tDRIGBAEGJgY5ATItTkUxBAEsLTEdNwYlQgQBNy0pTShFOQg1CAQBMC0xHTQGIUIEAUMdOCoUBgQBOTsqIx4gSzMIDUkzCAYRBAE5PSojIh5OMQgNNzEIBhEEAgEEOQQYBlAGJCQkAQZQBiQkJAEGUAYkJCQBBk4GIiIiAQZKJAY6IToBLykkAQZEBhIBBigFSQ8GFQEGNAVPTiIGGgE9AgEEPAQ2LTwBOQIBBD8ENgZOEAYdAUI8ARdIAgEEOgQ2LTwBOQIBBDgENAZNTgYcAT06ARYlMT8XHgQCARsyMCgCAR9kYXJ0OmlvL2ZpbGVfc3lzdGVtX2VudGl0eS5kYXJ0W29yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL19pbnRlcm5hbC92bS9iaW4vZmlsZV9zeXN0ZW1fZW50aXR5X3BhdGNoLmRhcnSDAi8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKLy8gcGFydCBvZiAiY29tbW9uX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIEZpbGVTdGF0IHsKICBAcGF0Y2gKICBzdGF0aWMgX3N0YXRTeW5jKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBTdHJpbmcgcGF0aCkgbmF0aXZlICJGaWxlX1N0YXQiOwp9CgpAcGF0Y2gKY2xhc3MgRmlsZVN5c3RlbUVudGl0eSB7CiAgQHBhdGNoCiAgc3RhdGljIF9nZXRUeXBlTmF0aXZlKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCwKICAgICAgYm9vbCBmb2xsb3dMaW5rcykgbmF0aXZlICJGaWxlX0dldFR5cGUiOwogIEBwYXRjaAogIHN0YXRpYyBfaWRlbnRpY2FsTmF0aXZlKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBTdHJpbmcgcGF0aDEsIFN0cmluZyBwYXRoMikKICAgICAgbmF0aXZlICJGaWxlX0FyZUlkZW50aWNhbCI7CiAgQHBhdGNoCiAgc3RhdGljIF9yZXNvbHZlU3ltYm9saWNMaW5rcyhfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHBhdGgpCiAgICAgIG5hdGl2ZSAiRmlsZV9SZXNvbHZlU3ltYm9saWNMaW5rcyI7Cn0KHABOTjwBDwEgAQcRCUoCAQcZCUEvCUwiCUUqAgErZGFydDppby1wYXRjaC9maWxlX3N5c3RlbV9lbnRpdHlfcGF0Y2guZGFydEVvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9pby9pb19yZXNvdXJjZV9pbmZvLmRhcnSiDi8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmlvOwoKYWJzdHJhY3QgY2xhc3MgX0lPUmVzb3VyY2VJbmZvIHsKICBmaW5hbCBTdHJpbmcgdHlwZTsKICBmaW5hbCBpbnQgaWQ7CiAgU3RyaW5nIGdldCBuYW1lOwogIHN0YXRpYyBpbnQgX2NvdW50ID0gMDsKCiAgc3RhdGljIGZpbmFsIFN0b3B3YXRjaCBfc3cgPSBuZXcgU3RvcHdhdGNoKCkuLnN0YXJ0KCk7CiAgc3RhdGljIGZpbmFsIF9zdGFydFRpbWUgPSBuZXcgRGF0ZVRpbWUubm93KCkubWlsbGlzZWNvbmRzU2luY2VFcG9jaDsKCiAgc3RhdGljIGRvdWJsZSBnZXQgdGltZXN0YW1wID0+IF9zdGFydFRpbWUgKyBfc3cuZWxhcHNlZE1pY3Jvc2Vjb25kcyAvIDEwMDA7CgogIF9JT1Jlc291cmNlSW5mbyh0aGlzLnR5cGUpIDogaWQgPSBfSU9SZXNvdXJjZUluZm8uZ2V0TmV4dElEKCk7CgogIC8vLyBHZXQgdGhlIGZ1bGwgc2V0IG9mIHZhbHVlcyBmb3IgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyBub3JtYWxseQogIC8vLyBsb29rZWQgdXAgYmFzZWQgb24gYW4gaWQgZnJvbSBhIHJlZmVyZW5jZVZhbHVlTWFwLgogIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGdldCBmdWxsVmFsdWVNYXA7CgogIC8vLyBUaGUgcmVmZXJlbmNlIG1hcCwgdXNlZCB0byByZXR1cm4gYSBsaXN0IG9mIHZhbHVlcywgZS5nLiwgZ2V0dGluZwogIC8vLyBhbGwgb3BlbiBzb2NrZXRzLiBUaGUgc3RydWN0dXJlIG9mIHRoaXMgaXMgc2hhcmVkIGFtb25nIGFsbCBzdWJjbGFzc2VzLgogIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGdldCByZWZlcmVuY2VWYWx1ZU1hcCA9PiB7CiAgICAgICAgLy8gVGhlIHR5cGUgZm9yIGEgcmVmZXJlbmNlIG9iamVjdCBpcyBwcmVmaXhlZCB3aXRoIEAgaW4gb2JzZXJ2YXRvcnkuCiAgICAgICAgJ3R5cGUnOiAnQCR0eXBlJywKICAgICAgICAnaWQnOiBpZCwKICAgICAgICAnbmFtZSc6IG5hbWUsCiAgICAgIH07CgogIHN0YXRpYyBpbnQgZ2V0TmV4dElEKCkgPT4gX2NvdW50Kys7Cn0KCmFic3RyYWN0IGNsYXNzIF9SZWFkV3JpdGVSZXNvdXJjZUluZm8gZXh0ZW5kcyBfSU9SZXNvdXJjZUluZm8gewogIGludCB0b3RhbFJlYWQ7CiAgaW50IHRvdGFsV3JpdHRlbjsKICBpbnQgcmVhZENvdW50OwogIGludCB3cml0ZUNvdW50OwogIGRvdWJsZSBsYXN0UmVhZDsKICBkb3VibGUgbGFzdFdyaXRlOwoKICAvLyBOb3QgYWxsIGNhbGwgc2l0ZXMgdXNlIHRoaXMuIEluIHNvbWUgY2FzZXMsIGUuZy4sIGEgc29ja2V0LCBhIHJlYWQgZG9lcwogIC8vIG5vdCBhbHdheXMgbWVhbiB0aGF0IHdlIGFjdHVhbGx5IHJlYWQgc29tZSBieXRlcyAod2UgbWF5IGRvIGEgcmVhZCB0byBzZWUKICAvLyBpZiB0aGVyZSBhcmUgc29tZSBieXRlcyBhdmFpbGFibGUpLgogIHZvaWQgYWRkUmVhZChpbnQgYnl0ZXMpIHsKICAgIHRvdGFsUmVhZCArPSBieXRlczsKICAgIHJlYWRDb3VudCsrOwogICAgbGFzdFJlYWQgPSBfSU9SZXNvdXJjZUluZm8udGltZXN0YW1wOwogIH0KCiAgLy8gSW4gY2FzZXMgd2hlcmUgd2UgcmVhZCBidXQgZGlkIG5vdCBuZWNlc3NhcmlseSBnZXQgYW55IGJ5dGVzLCB1c2UgdGhpcyB0bwogIC8vIHVwZGF0ZSB0aGUgcmVhZENvdW50IGFuZCB0aW1lc3RhbXAuIE1hbnVhbGx5IHVwZGF0ZSB0b3RhbFJlYWQgaWYgYW55IGJ5dGVzCiAgLy8gd2hlcmUgYWN0dWFsbHkgcmVhZC4KICB2b2lkIGRpZFJlYWQoKSB7CiAgICBhZGRSZWFkKDApOwogIH0KCiAgdm9pZCBhZGRXcml0ZShpbnQgYnl0ZXMpIHsKICAgIHRvdGFsV3JpdHRlbiArPSBieXRlczsKICAgIHdyaXRlQ291bnQrKzsKICAgIGxhc3RXcml0ZSA9IF9JT1Jlc291cmNlSW5mby50aW1lc3RhbXA7CiAgfQoKICBfUmVhZFdyaXRlUmVzb3VyY2VJbmZvKFN0cmluZyB0eXBlKQogICAgICA6IHRvdGFsUmVhZCA9IDAsCiAgICAgICAgdG90YWxXcml0dGVuID0gMCwKICAgICAgICByZWFkQ291bnQgPSAwLAogICAgICAgIHdyaXRlQ291bnQgPSAwLAogICAgICAgIGxhc3RSZWFkID0gMC4wLAogICAgICAgIGxhc3RXcml0ZSA9IDAuMCwKICAgICAgICBzdXBlcih0eXBlKTsKCiAgTWFwPFN0cmluZywgZHluYW1pYz4gZ2V0IGZ1bGxWYWx1ZU1hcCA9PiB7CiAgICAgICAgJ3R5cGUnOiB0eXBlLAogICAgICAgICdpZCc6IGlkLAogICAgICAgICduYW1lJzogbmFtZSwKICAgICAgICAndG90YWxSZWFkJzogdG90YWxSZWFkLAogICAgICAgICd0b3RhbFdyaXR0ZW4nOiB0b3RhbFdyaXR0ZW4sCiAgICAgICAgJ3JlYWRDb3VudCc6IHJlYWRDb3VudCwKICAgICAgICAnd3JpdGVDb3VudCc6IHdyaXRlQ291bnQsCiAgICAgICAgJ2xhc3RSZWFkJzogbGFzdFJlYWQsCiAgICAgICAgJ2xhc3RXcml0ZSc6IGxhc3RXcml0ZQogICAgICB9Owp9CgpjbGFzcyBfRmlsZVJlc291cmNlSW5mbyBleHRlbmRzIF9SZWFkV3JpdGVSZXNvdXJjZUluZm8gewogIHN0YXRpYyBjb25zdCBTdHJpbmcgX3R5cGUgPSAnX2ZpbGUnOwoKICBmaW5hbCBmaWxlOwoKICBzdGF0aWMgTWFwPGludCwgX0ZpbGVSZXNvdXJjZUluZm8+IG9wZW5GaWxlcyA9CiAgICAgIG5ldyBNYXA8aW50LCBfRmlsZVJlc291cmNlSW5mbz4oKTsKCiAgX0ZpbGVSZXNvdXJjZUluZm8odGhpcy5maWxlKSA6IHN1cGVyKF90eXBlKSB7CiAgICBGaWxlT3BlbmVkKHRoaXMpOwogIH0KCiAgc3RhdGljIEZpbGVPcGVuZWQoX0ZpbGVSZXNvdXJjZUluZm8gaW5mbykgewogICAgYXNzZXJ0KCFvcGVuRmlsZXMuY29udGFpbnNLZXkoaW5mby5pZCkpOwogICAgb3BlbkZpbGVzW2luZm8uaWRdID0gaW5mbzsKICB9CgogIHN0YXRpYyBGaWxlQ2xvc2VkKF9GaWxlUmVzb3VyY2VJbmZvIGluZm8pIHsKICAgIGFzc2VydChvcGVuRmlsZXMuY29udGFpbnNLZXkoaW5mby5pZCkpOwogICAgb3BlbkZpbGVzLnJlbW92ZShpbmZvLmlkKTsKICB9CgogIHN0YXRpYyBJdGVyYWJsZTxNYXA8U3RyaW5nLCBkeW5hbWljPj4gZ2V0T3BlbkZpbGVzTGlzdCgpIHsKICAgIHJldHVybiBuZXcgTGlzdC5mcm9tKG9wZW5GaWxlcy52YWx1ZXMubWFwKChlKSA9PiBlLnJlZmVyZW5jZVZhbHVlTWFwKSk7CiAgfQoKICBzdGF0aWMgRnV0dXJlPFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZT4gZ2V0T3BlbkZpbGVzKGZ1bmN0aW9uLCBwYXJhbXMpIHsKICAgIGFzc2VydChmdW5jdGlvbiA9PSAnZXh0LmRhcnQuaW8uZ2V0T3BlbkZpbGVzJyk7CiAgICB2YXIgZGF0YSA9IHsndHlwZSc6ICdfb3BlbmZpbGVzJywgJ2RhdGEnOiBnZXRPcGVuRmlsZXNMaXN0KCl9OwogICAgdmFyIGpzb25WYWx1ZSA9IGpzb24uZW5jb2RlKGRhdGEpOwogICAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUobmV3IFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5yZXN1bHQoanNvblZhbHVlKSk7CiAgfQoKICBNYXA8U3RyaW5nLCBkeW5hbWljPiBnZXRGaWxlSW5mb01hcCgpIHsKICAgIHJldHVybiBmdWxsVmFsdWVNYXA7CiAgfQoKICBzdGF0aWMgRnV0dXJlPFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZT4gZ2V0RmlsZUluZm9NYXBCeUlEKGZ1bmN0aW9uLCBwYXJhbXMpIHsKICAgIGFzc2VydChwYXJhbXMuY29udGFpbnNLZXkoJ2lkJykpOwogICAgdmFyIGlkID0gaW50LnBhcnNlKHBhcmFtc1snaWQnXSk7CiAgICB2YXIgcmVzdWx0ID0KICAgICAgICBvcGVuRmlsZXMuY29udGFpbnNLZXkoaWQpID8gb3BlbkZpbGVzW2lkXS5nZXRGaWxlSW5mb01hcCgpIDoge307CiAgICB2YXIganNvblZhbHVlID0ganNvbi5lbmNvZGUocmVzdWx0KTsKICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKG5ldyBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UucmVzdWx0KGpzb25WYWx1ZSkpOwogIH0KCiAgU3RyaW5nIGdldCBuYW1lIHsKICAgIHJldHVybiAnJHtmaWxlLnBhdGh9JzsKICB9Cn0KCmNsYXNzIF9Qcm9jZXNzUmVzb3VyY2VJbmZvIGV4dGVuZHMgX0lPUmVzb3VyY2VJbmZvIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF90eXBlID0gJ19wcm9jZXNzJzsKICBmaW5hbCBwcm9jZXNzOwogIGZpbmFsIGRvdWJsZSBzdGFydGVkQXQ7CgogIHN0YXRpYyBNYXA8aW50LCBfUHJvY2Vzc1Jlc291cmNlSW5mbz4gc3RhcnRlZFByb2Nlc3NlcyA9CiAgICAgIG5ldyBNYXA8aW50LCBfUHJvY2Vzc1Jlc291cmNlSW5mbz4oKTsKCiAgX1Byb2Nlc3NSZXNvdXJjZUluZm8odGhpcy5wcm9jZXNzKQogICAgICA6IHN0YXJ0ZWRBdCA9IF9JT1Jlc291cmNlSW5mby50aW1lc3RhbXAsCiAgICAgICAgc3VwZXIoX3R5cGUpIHsKICAgIFByb2Nlc3NTdGFydGVkKHRoaXMpOwogIH0KCiAgU3RyaW5nIGdldCBuYW1lID0+IHByb2Nlc3MuX3BhdGg7CgogIHZvaWQgc3RvcHBlZCgpIHsKICAgIFByb2Nlc3NTdG9wcGVkKHRoaXMpOwogIH0KCiAgTWFwPFN0cmluZywgZHluYW1pYz4gZ2V0IGZ1bGxWYWx1ZU1hcCA9PiB7CiAgICAgICAgJ3R5cGUnOiB0eXBlLAogICAgICAgICdpZCc6IGlkLAogICAgICAgICduYW1lJzogbmFtZSwKICAgICAgICAncGlkJzogcHJvY2Vzcy5waWQsCiAgICAgICAgJ3N0YXJ0ZWRBdCc6IHN0YXJ0ZWRBdCwKICAgICAgICAnYXJndW1lbnRzJzogcHJvY2Vzcy5fYXJndW1lbnRzLAogICAgICAgICd3b3JraW5nRGlyZWN0b3J5JzoKICAgICAgICAgICAgcHJvY2Vzcy5fd29ya2luZ0RpcmVjdG9yeSA9PSBudWxsID8gJy4nIDogcHJvY2Vzcy5fd29ya2luZ0RpcmVjdG9yeSwKICAgICAgfTsKCiAgc3RhdGljIFByb2Nlc3NTdGFydGVkKF9Qcm9jZXNzUmVzb3VyY2VJbmZvIGluZm8pIHsKICAgIGFzc2VydCghc3RhcnRlZFByb2Nlc3Nlcy5jb250YWluc0tleShpbmZvLmlkKSk7CiAgICBzdGFydGVkUHJvY2Vzc2VzW2luZm8uaWRdID0gaW5mbzsKICB9CgogIHN0YXRpYyBQcm9jZXNzU3RvcHBlZChfUHJvY2Vzc1Jlc291cmNlSW5mbyBpbmZvKSB7CiAgICBhc3NlcnQoc3RhcnRlZFByb2Nlc3Nlcy5jb250YWluc0tleShpbmZvLmlkKSk7CiAgICBzdGFydGVkUHJvY2Vzc2VzLnJlbW92ZShpbmZvLmlkKTsKICB9CgogIHN0YXRpYyBJdGVyYWJsZTxNYXA8U3RyaW5nLCBkeW5hbWljPj4gZ2V0U3RhcnRlZFByb2Nlc3Nlc0xpc3QoKSA9PgogICAgICBuZXcgTGlzdC5mcm9tKHN0YXJ0ZWRQcm9jZXNzZXMudmFsdWVzLm1hcCgoZSkgPT4gZS5yZWZlcmVuY2VWYWx1ZU1hcCkpOwoKICBzdGF0aWMgRnV0dXJlPFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZT4gZ2V0U3RhcnRlZFByb2Nlc3NlcygKICAgICAgU3RyaW5nIGZ1bmN0aW9uLCBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtcykgewogICAgYXNzZXJ0KGZ1bmN0aW9uID09ICdleHQuZGFydC5pby5nZXRQcm9jZXNzZXMnKTsKICAgIHZhciBkYXRhID0geyd0eXBlJzogJ19zdGFydGVkcHJvY2Vzc2VzJywgJ2RhdGEnOiBnZXRTdGFydGVkUHJvY2Vzc2VzTGlzdCgpfTsKICAgIHZhciBqc29uVmFsdWUgPSBqc29uLmVuY29kZShkYXRhKTsKICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKG5ldyBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UucmVzdWx0KGpzb25WYWx1ZSkpOwogIH0KCiAgc3RhdGljIEZ1dHVyZTxTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2U+IGdldFByb2Nlc3NJbmZvTWFwQnlJZCgKICAgICAgU3RyaW5nIGZ1bmN0aW9uLCBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtcykgewogICAgdmFyIGlkID0gaW50LnBhcnNlKHBhcmFtc1snaWQnXSk7CiAgICB2YXIgcmVzdWx0ID0gc3RhcnRlZFByb2Nlc3Nlcy5jb250YWluc0tleShpZCkKICAgICAgICA/IHN0YXJ0ZWRQcm9jZXNzZXNbaWRdLmZ1bGxWYWx1ZU1hcAogICAgICAgIDoge307CiAgICB2YXIganNvblZhbHVlID0ganNvbi5lbmNvZGUocmVzdWx0KTsKICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKG5ldyBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UucmVzdWx0KGpzb25WYWx1ZSkpOwogIH0KfQoKY2xhc3MgX1NvY2tldFJlc291cmNlSW5mbyBleHRlbmRzIF9SZWFkV3JpdGVSZXNvdXJjZUluZm8gewogIHN0YXRpYyBjb25zdCBTdHJpbmcgX3RjcFN0cmluZyA9ICdUQ1AnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX3VkcFN0cmluZyA9ICdVRFAnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX3R5cGUgPSAnX3NvY2tldCc7CgogIGZpbmFsIC8qX05hdGl2ZVNvY2tldHwqLyBzb2NrZXQ7CgogIHN0YXRpYyBNYXA8aW50LCBfU29ja2V0UmVzb3VyY2VJbmZvPiBvcGVuU29ja2V0cyA9CiAgICAgIG5ldyBNYXA8aW50LCBfU29ja2V0UmVzb3VyY2VJbmZvPigpOwoKICBfU29ja2V0UmVzb3VyY2VJbmZvKHRoaXMuc29ja2V0KSA6IHN1cGVyKF90eXBlKSB7CiAgICBTb2NrZXRPcGVuZWQodGhpcyk7CiAgfQoKICBTdHJpbmcgZ2V0IG5hbWUgewogICAgaWYgKHNvY2tldC5pc0xpc3RlbmluZykgewogICAgICByZXR1cm4gJ2xpc3RlbmluZzoke3NvY2tldC5hZGRyZXNzLmhvc3R9OiR7c29ja2V0LnBvcnR9JzsKICAgIH0KICAgIHZhciByZW1vdGUgPSAnJzsKICAgIHRyeSB7CiAgICAgIHZhciByZW1vdGVIb3N0ID0gc29ja2V0LnJlbW90ZUFkZHJlc3MuaG9zdDsKICAgICAgdmFyIHJlbW90ZVBvcnQgPSBzb2NrZXQucmVtb3RlUG9ydDsKICAgICAgcmVtb3RlID0gJyAtPiAkcmVtb3RlSG9zdDokcmVtb3RlUG9ydCc7CiAgICB9IGNhdGNoIChlKSB7fSAvLyBpZ25vcmVkIGlmIHdlIGNhbid0IGdldCB0aGUgaW5mb3JtYXRpb24KICAgIHJldHVybiAnJHtzb2NrZXQuYWRkcmVzcy5ob3N0fToke3NvY2tldC5wb3J0fSRyZW1vdGUnOwogIH0KCiAgc3RhdGljIEl0ZXJhYmxlPE1hcDxTdHJpbmcsIGR5bmFtaWM+PiBnZXRPcGVuU29ja2V0c0xpc3QoKSB7CiAgICByZXR1cm4gbmV3IExpc3QuZnJvbShvcGVuU29ja2V0cy52YWx1ZXMubWFwKChlKSA9PiBlLnJlZmVyZW5jZVZhbHVlTWFwKSk7CiAgfQoKICBNYXA8U3RyaW5nLCBkeW5hbWljPiBnZXRTb2NrZXRJbmZvTWFwKCkgewogICAgdmFyIHJlc3VsdCA9IGZ1bGxWYWx1ZU1hcDsKICAgIHJlc3VsdFsnc29ja2V0VHlwZSddID0gc29ja2V0LmlzVGNwID8gX3RjcFN0cmluZyA6IF91ZHBTdHJpbmc7CiAgICByZXN1bHRbJ2xpc3RlbmluZyddID0gc29ja2V0LmlzTGlzdGVuaW5nOwogICAgcmVzdWx0Wydob3N0J10gPSBzb2NrZXQuYWRkcmVzcy5ob3N0OwogICAgcmVzdWx0Wydwb3J0J10gPSBzb2NrZXQucG9ydDsKICAgIGlmICghc29ja2V0LmlzTGlzdGVuaW5nKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmVzdWx0WydyZW1vdGVIb3N0J10gPSBzb2NrZXQucmVtb3RlQWRkcmVzcy5ob3N0OwogICAgICAgIHJlc3VsdFsncmVtb3RlUG9ydCddID0gc29ja2V0LnJlbW90ZVBvcnQ7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAvLyBVRFAuCiAgICAgICAgcmVzdWx0WydyZW1vdGVQb3J0J10gPSAnTkEnOwogICAgICAgIHJlc3VsdFsncmVtb3RlSG9zdCddID0gJ05BJzsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmVzdWx0WydyZW1vdGVQb3J0J10gPSAnTkEnOwogICAgICByZXN1bHRbJ3JlbW90ZUhvc3QnXSA9ICdOQSc7CiAgICB9CiAgICByZXN1bHRbJ2FkZHJlc3NUeXBlJ10gPSBzb2NrZXQuYWRkcmVzcy50eXBlLm5hbWU7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIEZ1dHVyZTxTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2U+IGdldFNvY2tldEluZm9NYXBCeUlEKAogICAgICBTdHJpbmcgZnVuY3Rpb24sIE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1zKSB7CiAgICBhc3NlcnQocGFyYW1zLmNvbnRhaW5zS2V5KCdpZCcpKTsKICAgIHZhciBpZCA9IGludC5wYXJzZShwYXJhbXNbJ2lkJ10pOwogICAgdmFyIHJlc3VsdCA9CiAgICAgICAgb3BlblNvY2tldHMuY29udGFpbnNLZXkoaWQpID8gb3BlblNvY2tldHNbaWRdLmdldFNvY2tldEluZm9NYXAoKSA6IHt9OwogICAgdmFyIGpzb25WYWx1ZSA9IGpzb24uZW5jb2RlKHJlc3VsdCk7CiAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZShuZXcgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLnJlc3VsdChqc29uVmFsdWUpKTsKICB9CgogIHN0YXRpYyBGdXR1cmU8U2VydmljZUV4dGVuc2lvblJlc3BvbnNlPiBnZXRPcGVuU29ja2V0cyhmdW5jdGlvbiwgcGFyYW1zKSB7CiAgICBhc3NlcnQoZnVuY3Rpb24gPT0gJ2V4dC5kYXJ0LmlvLmdldE9wZW5Tb2NrZXRzJyk7CiAgICB2YXIgZGF0YSA9IHsndHlwZSc6ICdfb3BlbnNvY2tldHMnLCAnZGF0YSc6IGdldE9wZW5Tb2NrZXRzTGlzdCgpfTsKICAgIHZhciBqc29uVmFsdWUgPSBqc29uLmVuY29kZShkYXRhKTsKICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKG5ldyBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UucmVzdWx0KGpzb25WYWx1ZSkpOwogIH0KCiAgc3RhdGljIFNvY2tldE9wZW5lZChfU29ja2V0UmVzb3VyY2VJbmZvIGluZm8pIHsKICAgIGFzc2VydCghb3BlblNvY2tldHMuY29udGFpbnNLZXkoaW5mby5pZCkpOwogICAgb3BlblNvY2tldHNbaW5mby5pZF0gPSBpbmZvOwogIH0KCiAgc3RhdGljIFNvY2tldENsb3NlZChfU29ja2V0UmVzb3VyY2VJbmZvIGluZm8pIHsKICAgIGFzc2VydChvcGVuU29ja2V0cy5jb250YWluc0tleShpbmZvLmlkKSk7CiAgICBvcGVuU29ja2V0cy5yZW1vdmUoaW5mby5pZCk7CiAgfQp9CoEeAE5OPAEPAREBIRUQExkBOUcBTgFBAVE5KQFITjJOGhIWCQEmAgFAERQREhMUAU1PKRwYESoEAU9QGhMQBAEdGxIrBAEmFxoXGBgZFQEtFhIWICYgIh4fCQIBOScBDgExKQEwFgQBLi0fBAEuLB8EAT1MBAFLNEMnTQQBKhkEAVEmJhFJKU0EARQbBAIBNSoRGgE7LAElLxcaBAEkARMaBAEtFhIWHCApHFEJATU0JgQBNTMmBAFFTgE/NTRRJ00EAUE1JjIsDilNBAIBOyoqKQEjATUrATQYBAEUHkAGFQoyKi4+OwQBP04EASwfQy4qIh8MOjIUECUlCA0jIwY2EwQBQDUmJhFPKU0EAU02RydNBAEyLyEEATIuIQQCAR1kYXJ0OmlvL2lvX3Jlc291cmNlX2luZm8uZGFydDxvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9pby9pb19zaW5rLmRhcnSkby8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmlvOwoKLyoqCiAqIEEgY29tYmluZWQgYnl0ZSBhbmQgdGV4dCBvdXRwdXQuCiAqCiAqIEFuIFtJT1NpbmtdIGNvbWJpbmVzIGEgW1N0cmVhbVNpbmtdIG9mIGJ5dGVzIHdpdGggYSBbU3RyaW5nU2lua10sCiAqIGFuZCBhbGxvd3MgZWFzeSBvdXRwdXQgb2YgYm90aCBieXRlcyBhbmQgdGV4dC4KICoKICogV3JpdGluZyB0ZXh0IChbd3JpdGVdKSBhbmQgYWRkaW5nIGJ5dGVzIChbYWRkXSkgbWF5IGJlIGludGVybGVhdmVkIGZyZWVseS4KICoKICogV2hpbGUgYSBzdHJlYW0gaXMgYmVpbmcgYWRkZWQgdXNpbmcgW2FkZFN0cmVhbV0sIGFueSBmdXJ0aGVyIGF0dGVtcHRzCiAqIHRvIGFkZCBvciB3cml0ZSB0byB0aGUgW0lPU2lua10gd2lsbCBmYWlsIHVudGlsIHRoZSBbYWRkU3RyZWFtXSBjb21wbGV0ZXMuCiAqCiAqIEl0IGlzIGFuIGVycm9yIHRvIGFkZCBkYXRhIHRvIHRoZSBbSU9TaW5rXSBhZnRlciB0aGUgc2luayBpcyBjbG9zZWQuCiAqLwphYnN0cmFjdCBjbGFzcyBJT1NpbmsgaW1wbGVtZW50cyBTdHJlYW1TaW5rPExpc3Q8aW50Pj4sIFN0cmluZ1NpbmsgewogIC8qKgogICAqIENyZWF0ZSBhbiBbSU9TaW5rXSB0aGF0IG91dHB1dHMgdG8gYSBbdGFyZ2V0XSBbU3RyZWFtQ29uc3VtZXJdIG9mIGJ5dGVzLgogICAqCiAgICogVGV4dCB3cml0dGVuIHRvIFtTdHJlYW1TaW5rXSBtZXRob2RzIGlzIGVuY29kZWQgdG8gYnl0ZXMgdXNpbmcgW2VuY29kaW5nXQogICAqIGJlZm9yZSBiZWluZyBvdXRwdXQgb24gW3RhcmdldF0uCiAgICovCiAgZmFjdG9yeSBJT1NpbmsoU3RyZWFtQ29uc3VtZXI8TGlzdDxpbnQ+PiB0YXJnZXQsIHtFbmNvZGluZyBlbmNvZGluZzogdXRmOH0pID0+CiAgICAgIG5ldyBfSU9TaW5rSW1wbCh0YXJnZXQsIGVuY29kaW5nKTsKCiAgLyoqCiAgICogVGhlIFtFbmNvZGluZ10gdXNlZCB3aGVuIHdyaXRpbmcgc3RyaW5ncy4gRGVwZW5kaW5nIG9uIHRoZQogICAqIHVuZGVybHlpbmcgY29uc3VtZXIgdGhpcyBwcm9wZXJ0eSBtaWdodCBiZSBtdXRhYmxlLgogICAqLwogIEVuY29kaW5nIGVuY29kaW5nOwoKICAvKioKICAgKiBBZGRzIGJ5dGUgW2RhdGFdIHRvIHRoZSB0YXJnZXQgY29uc3VtZXIsIGlnbm9yaW5nIFtlbmNvZGluZ10uCiAgICoKICAgKiBUaGUgW2VuY29kaW5nXSBkb2VzIG5vdCBhcHBseSB0byB0aGlzIG1ldGhvZCwgYW5kIHRoZSBgZGF0YWAgbGlzdCBpcyBwYXNzZWQKICAgKiBkaXJlY3RseSB0byB0aGUgdGFyZ2V0IGNvbnN1bWVyIGFzIGEgc3RyZWFtIGV2ZW50LgogICAqCiAgICogVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBiZSBjYWxsZWQgd2hlbiBhIHN0cmVhbSBpcyBjdXJyZW50bHkgYmVpbmcgYWRkZWQKICAgKiB1c2luZyBbYWRkU3RyZWFtXS4KICAgKgogICAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vbi1ibG9ja2luZy4gU2VlIFtmbHVzaF0gb3IgW2RvbmVdIGZvciBob3cgdG8gZ2V0IGFueQogICAqIGVycm9ycyBnZW5lcmF0ZWQgYnkgdGhpcyBjYWxsLgogICAqCiAgICogVGhlIGRhdGEgbGlzdCBzaG91bGQgbm90IGJlIG1vZGlmaWVkIGFmdGVyIGl0IGhhcyBiZWVuIHBhc3NlZCB0byBgYWRkYC4KICAgKi8KICB2b2lkIGFkZChMaXN0PGludD4gZGF0YSk7CgogIC8qKgogICAqIENvbnZlcnRzIFtvYmpdIHRvIGEgU3RyaW5nIGJ5IGludm9raW5nIFtPYmplY3QudG9TdHJpbmddIGFuZAogICAqIFthZGRdcyB0aGUgZW5jb2Rpbmcgb2YgdGhlIHJlc3VsdCB0byB0aGUgdGFyZ2V0IGNvbnN1bWVyLgogICAqCiAgICogVGhpcyBvcGVyYXRpb24gaXMgbm9uLWJsb2NraW5nLiBTZWUgW2ZsdXNoXSBvciBbZG9uZV0gZm9yIGhvdyB0byBnZXQgYW55CiAgICogZXJyb3JzIGdlbmVyYXRlZCBieSB0aGlzIGNhbGwuCiAgICovCiAgdm9pZCB3cml0ZShPYmplY3Qgb2JqKTsKCiAgLyoqCiAgICogSXRlcmF0ZXMgb3ZlciB0aGUgZ2l2ZW4gW29iamVjdHNdIGFuZCBbd3JpdGVdcyB0aGVtIGluIHNlcXVlbmNlLgogICAqCiAgICogSWYgW3NlcGFyYXRvcl0gaXMgcHJvdmlkZWQsIGEgYHdyaXRlYCB3aXRoIHRoZSBgc2VwYXJhdG9yYCBpcyBwZXJmb3JtZWQKICAgKiBiZXR3ZWVuIGFueSB0d28gZWxlbWVudHMgb2Ygb2JqZWN0c2AuCiAgICoKICAgKiBUaGlzIG9wZXJhdGlvbiBpcyBub24tYmxvY2tpbmcuIFNlZSBbZmx1c2hdIG9yIFtkb25lXSBmb3IgaG93IHRvIGdldCBhbnkKICAgKiBlcnJvcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgY2FsbC4KICAgKi8KICB2b2lkIHdyaXRlQWxsKEl0ZXJhYmxlIG9iamVjdHMsIFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKTsKCiAgLyoqCiAgICogQ29udmVydHMgW29ial0gdG8gYSBTdHJpbmcgYnkgaW52b2tpbmcgW09iamVjdC50b1N0cmluZ10gYW5kCiAgICogd3JpdGVzIHRoZSByZXN1bHQgdG8gYHRoaXNgLCBmb2xsb3dlZCBieSBhIG5ld2xpbmUuCiAgICoKICAgKiBUaGlzIG9wZXJhdGlvbiBpcyBub24tYmxvY2tpbmcuIFNlZSBbZmx1c2hdIG9yIFtkb25lXSBmb3IgaG93IHRvIGdldCBhbnkKICAgKiBlcnJvcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgY2FsbC4KICAgKi8KICB2b2lkIHdyaXRlbG4oW09iamVjdCBvYmogPSAiIl0pOwoKICAvKioKICAgKiBXcml0ZXMgdGhlIGNoYXJhY3RlciBvZiBbY2hhckNvZGVdLgogICAqCiAgICogVGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byBgd3JpdGUobmV3IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpKWAuCiAgICoKICAgKiBUaGlzIG9wZXJhdGlvbiBpcyBub24tYmxvY2tpbmcuIFNlZSBbZmx1c2hdIG9yIFtkb25lXSBmb3IgaG93IHRvIGdldCBhbnkKICAgKiBlcnJvcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgY2FsbC4KICAgKi8KICB2b2lkIHdyaXRlQ2hhckNvZGUoaW50IGNoYXJDb2RlKTsKCiAgLyoqCiAgICogUGFzc2VzIHRoZSBlcnJvciB0byB0aGUgdGFyZ2V0IGNvbnN1bWVyIGFzIGFuIGVycm9yIGV2ZW50LgogICAqCiAgICogVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBiZSBjYWxsZWQgd2hlbiBhIHN0cmVhbSBpcyBjdXJyZW50bHkgYmVpbmcgYWRkZWQKICAgKiB1c2luZyBbYWRkU3RyZWFtXS4KICAgKgogICAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vbi1ibG9ja2luZy4gU2VlIFtmbHVzaF0gb3IgW2RvbmVdIGZvciBob3cgdG8gZ2V0IGFueQogICAqIGVycm9ycyBnZW5lcmF0ZWQgYnkgdGhpcyBjYWxsLgogICAqLwogIHZvaWQgYWRkRXJyb3IoZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKTsKCiAgLyoqCiAgICogQWRkcyBhbGwgZWxlbWVudHMgb2YgdGhlIGdpdmVuIFtzdHJlYW1dIHRvIGB0aGlzYC4KICAgKgogICAqIFJldHVybnMgYSBbRnV0dXJlXSB0aGF0IGNvbXBsZXRlcyB3aGVuCiAgICogYWxsIGVsZW1lbnRzIG9mIHRoZSBnaXZlbiBbc3RyZWFtXSBhcmUgYWRkZWQgdG8gYHRoaXNgLgogICAqCiAgICogVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBiZSBjYWxsZWQgd2hlbiBhIHN0cmVhbSBpcyBjdXJyZW50bHkgYmVpbmcgYWRkZWQKICAgKiB1c2luZyB0aGlzIGZ1bmN0aW9uLgogICAqLwogIEZ1dHVyZSBhZGRTdHJlYW0oU3RyZWFtPExpc3Q8aW50Pj4gc3RyZWFtKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIFtGdXR1cmVdIHRoYXQgY29tcGxldGVzIG9uY2UgYWxsIGJ1ZmZlcmVkIGRhdGEgaXMgYWNjZXB0ZWQgYnkgdGhlCiAgICogdW5kZXJseWluZyBbU3RyZWFtQ29uc3VtZXJdLgogICAqCiAgICogVGhpcyBtZXRob2QgbXVzdCBub3QgYmUgY2FsbGVkIHdoaWxlIGFuIFthZGRTdHJlYW1dIGlzIGluY29tcGxldGUuCiAgICoKICAgKiBOT1RFOiBUaGlzIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgZGF0YSBiZWluZyBmbHVzaGVkIGJ5IHRoZQogICAqIG9wZXJhdGluZyBzeXN0ZW0uCiAgICovCiAgRnV0dXJlIGZsdXNoKCk7CgogIC8qKgogICAqIENsb3NlIHRoZSB0YXJnZXQgY29uc3VtZXIuCiAgICoKICAgKiBOT1RFOiBXcml0ZXMgdG8gdGhlIFtJT1NpbmtdIG1heSBiZSBidWZmZXJlZCwgYW5kIG1heSBub3QgYmUgZmx1c2hlZCBieQogICAqIGEgY2FsbCB0byBgY2xvc2UoKWAuIFRvIGZsdXNoIGFsbCBidWZmZXJlZCB3cml0ZXMsIGNhbGwgYGZsdXNoKClgIGJlZm9yZQogICAqIGNhbGxpbmcgYGNsb3NlKClgLgogICAqLwogIEZ1dHVyZSBjbG9zZSgpOwoKICAvKioKICAgKiBHZXQgYSBmdXR1cmUgdGhhdCB3aWxsIGNvbXBsZXRlIHdoZW4gdGhlIGNvbnN1bWVyIGNsb3Nlcywgb3Igd2hlbiBhbgogICAqIGVycm9yIG9jY3Vycy4gVGhpcyBmdXR1cmUgaXMgaWRlbnRpY2FsIHRvIHRoZSBmdXR1cmUgcmV0dXJuZWQgYnkKICAgKiBbY2xvc2VdLgogICAqLwogIEZ1dHVyZSBnZXQgZG9uZTsKfQoKY2xhc3MgX1N0cmVhbVNpbmtJbXBsPFQ+IGltcGxlbWVudHMgU3RyZWFtU2luazxUPiB7CiAgZmluYWwgU3RyZWFtQ29uc3VtZXI8VD4gX3RhcmdldDsKICBmaW5hbCBDb21wbGV0ZXIgX2RvbmVDb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyKCk7CiAgU3RyZWFtQ29udHJvbGxlcjxUPiBfY29udHJvbGxlckluc3RhbmNlOwogIENvbXBsZXRlciBfY29udHJvbGxlckNvbXBsZXRlcjsKICBib29sIF9pc0Nsb3NlZCA9IGZhbHNlOwogIGJvb2wgX2lzQm91bmQgPSBmYWxzZTsKICBib29sIF9oYXNFcnJvciA9IGZhbHNlOwoKICBfU3RyZWFtU2lua0ltcGwodGhpcy5fdGFyZ2V0KTsKCiAgdm9pZCBhZGQoVCBkYXRhKSB7CiAgICBpZiAoX2lzQ2xvc2VkKSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoIlN0cmVhbVNpbmsgaXMgY2xvc2VkIik7CiAgICB9CiAgICBfY29udHJvbGxlci5hZGQoZGF0YSk7CiAgfQoKICB2b2lkIGFkZEVycm9yKGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgaWYgKF9pc0Nsb3NlZCkgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKCJTdHJlYW1TaW5rIGlzIGNsb3NlZCIpOwogICAgfQogICAgX2NvbnRyb2xsZXIuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgRnV0dXJlIGFkZFN0cmVhbShTdHJlYW08VD4gc3RyZWFtKSB7CiAgICBpZiAoX2lzQm91bmQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlN0cmVhbVNpbmsgaXMgYWxyZWFkeSBib3VuZCB0byBhIHN0cmVhbSIpOwogICAgfQogICAgaWYgKF9oYXNFcnJvcikgcmV0dXJuIGRvbmU7CgogICAgX2lzQm91bmQgPSB0cnVlOwogICAgdmFyIGZ1dHVyZSA9IF9jb250cm9sbGVyQ29tcGxldGVyID09IG51bGwKICAgICAgICA/IF90YXJnZXQuYWRkU3RyZWFtKHN0cmVhbSkKICAgICAgICA6IF9jb250cm9sbGVyQ29tcGxldGVyLmZ1dHVyZS50aGVuKChfKSA9PiBfdGFyZ2V0LmFkZFN0cmVhbShzdHJlYW0pKTsKICAgIF9jb250cm9sbGVySW5zdGFuY2U/LmNsb3NlKCk7CgogICAgLy8gV2FpdCBmb3IgYW55IHBlbmRpbmcgZXZlbnRzIGluIFtfY29udHJvbGxlcl0gdG8gYmUgZGlzcGF0Y2hlZCBiZWZvcmUKICAgIC8vIGFkZGluZyBbc3RyZWFtXS4KICAgIHJldHVybiBmdXR1cmUud2hlbkNvbXBsZXRlKCgpIHsKICAgICAgX2lzQm91bmQgPSBmYWxzZTsKICAgIH0pOwogIH0KCiAgRnV0dXJlIGZsdXNoKCkgewogICAgaWYgKF9pc0JvdW5kKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJTdHJlYW1TaW5rIGlzIGJvdW5kIHRvIGEgc3RyZWFtIik7CiAgICB9CiAgICBpZiAoX2NvbnRyb2xsZXJJbnN0YW5jZSA9PSBudWxsKSByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZSh0aGlzKTsKICAgIC8vIEFkZGluZyBhbiBlbXB0eSBzdHJlYW0tY29udHJvbGxlciB3aWxsIHJldHVybiBhIGZ1dHVyZSB0aGF0IHdpbGwgY29tcGxldGUKICAgIC8vIHdoZW4gYWxsIGRhdGEgaXMgZG9uZS4KICAgIF9pc0JvdW5kID0gdHJ1ZTsKICAgIHZhciBmdXR1cmUgPSBfY29udHJvbGxlckNvbXBsZXRlci5mdXR1cmU7CiAgICBfY29udHJvbGxlckluc3RhbmNlLmNsb3NlKCk7CiAgICByZXR1cm4gZnV0dXJlLndoZW5Db21wbGV0ZSgoKSB7CiAgICAgIF9pc0JvdW5kID0gZmFsc2U7CiAgICB9KTsKICB9CgogIEZ1dHVyZSBjbG9zZSgpIHsKICAgIGlmIChfaXNCb3VuZCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiU3RyZWFtU2luayBpcyBib3VuZCB0byBhIHN0cmVhbSIpOwogICAgfQogICAgaWYgKCFfaXNDbG9zZWQpIHsKICAgICAgX2lzQ2xvc2VkID0gdHJ1ZTsKICAgICAgaWYgKF9jb250cm9sbGVySW5zdGFuY2UgIT0gbnVsbCkgewogICAgICAgIF9jb250cm9sbGVySW5zdGFuY2UuY2xvc2UoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfY2xvc2VUYXJnZXQoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGRvbmU7CiAgfQoKICB2b2lkIF9jbG9zZVRhcmdldCgpIHsKICAgIF90YXJnZXQuY2xvc2UoKS50aGVuKF9jb21wbGV0ZURvbmVWYWx1ZSwgb25FcnJvcjogX2NvbXBsZXRlRG9uZUVycm9yKTsKICB9CgogIEZ1dHVyZSBnZXQgZG9uZSA9PiBfZG9uZUNvbXBsZXRlci5mdXR1cmU7CgogIHZvaWQgX2NvbXBsZXRlRG9uZVZhbHVlKHZhbHVlKSB7CiAgICBpZiAoIV9kb25lQ29tcGxldGVyLmlzQ29tcGxldGVkKSB7CiAgICAgIF9kb25lQ29tcGxldGVyLmNvbXBsZXRlKHZhbHVlKTsKICAgIH0KICB9CgogIHZvaWQgX2NvbXBsZXRlRG9uZUVycm9yKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIGlmICghX2RvbmVDb21wbGV0ZXIuaXNDb21wbGV0ZWQpIHsKICAgICAgX2hhc0Vycm9yID0gdHJ1ZTsKICAgICAgX2RvbmVDb21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICB9CiAgfQoKICBTdHJlYW1Db250cm9sbGVyPFQ+IGdldCBfY29udHJvbGxlciB7CiAgICBpZiAoX2lzQm91bmQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlN0cmVhbVNpbmsgaXMgYm91bmQgdG8gYSBzdHJlYW0iKTsKICAgIH0KICAgIGlmIChfaXNDbG9zZWQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlN0cmVhbVNpbmsgaXMgY2xvc2VkIik7CiAgICB9CiAgICBpZiAoX2NvbnRyb2xsZXJJbnN0YW5jZSA9PSBudWxsKSB7CiAgICAgIF9jb250cm9sbGVySW5zdGFuY2UgPSBuZXcgU3RyZWFtQ29udHJvbGxlcjxUPihzeW5jOiB0cnVlKTsKICAgICAgX2NvbnRyb2xsZXJDb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyKCk7CiAgICAgIF90YXJnZXQuYWRkU3RyZWFtKF9jb250cm9sbGVyLnN0cmVhbSkudGhlbigoXykgewogICAgICAgIGlmIChfaXNCb3VuZCkgewogICAgICAgICAgLy8gQSBuZXcgc3RyZWFtIHRha2VzIG92ZXIgLSBmb3J3YXJkIHZhbHVlcyB0byB0aGF0IHN0cmVhbS4KICAgICAgICAgIF9jb250cm9sbGVyQ29tcGxldGVyLmNvbXBsZXRlKHRoaXMpOwogICAgICAgICAgX2NvbnRyb2xsZXJDb21wbGV0ZXIgPSBudWxsOwogICAgICAgICAgX2NvbnRyb2xsZXJJbnN0YW5jZSA9IG51bGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIE5vIG5ldyBzdHJlYW0sIC5jbG9zZSB3YXMgY2FsbGVkLiBDbG9zZSBfdGFyZ2V0LgogICAgICAgICAgX2Nsb3NlVGFyZ2V0KCk7CiAgICAgICAgfQogICAgICB9LCBvbkVycm9yOiAoZXJyb3IsIHN0YWNrVHJhY2UpIHsKICAgICAgICBpZiAoX2lzQm91bmQpIHsKICAgICAgICAgIC8vIEEgbmV3IHN0cmVhbSB0YWtlcyBvdmVyIC0gZm9yd2FyZCBlcnJvcnMgdG8gdGhhdCBzdHJlYW0uCiAgICAgICAgICBfY29udHJvbGxlckNvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgICAgIF9jb250cm9sbGVyQ29tcGxldGVyID0gbnVsbDsKICAgICAgICAgIF9jb250cm9sbGVySW5zdGFuY2UgPSBudWxsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBObyBuZXcgc3RyZWFtLiBObyBuZWVkIHRvIGNsb3NlIHRhcmdldCwgYXMgaXQgaGFzIGFscmVhZHkKICAgICAgICAgIC8vIGZhaWxlZC4KICAgICAgICAgIF9jb21wbGV0ZURvbmVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBfY29udHJvbGxlckluc3RhbmNlOwogIH0KfQoKY2xhc3MgX0lPU2lua0ltcGwgZXh0ZW5kcyBfU3RyZWFtU2lua0ltcGw8TGlzdDxpbnQ+PiBpbXBsZW1lbnRzIElPU2luayB7CiAgRW5jb2RpbmcgX2VuY29kaW5nOwogIGJvb2wgX2VuY29kaW5nTXV0YWJsZSA9IHRydWU7CgogIF9JT1NpbmtJbXBsKFN0cmVhbUNvbnN1bWVyPExpc3Q8aW50Pj4gdGFyZ2V0LCB0aGlzLl9lbmNvZGluZykgOiBzdXBlcih0YXJnZXQpOwoKICBFbmNvZGluZyBnZXQgZW5jb2RpbmcgPT4gX2VuY29kaW5nOwoKICB2b2lkIHNldCBlbmNvZGluZyhFbmNvZGluZyB2YWx1ZSkgewogICAgaWYgKCFfZW5jb2RpbmdNdXRhYmxlKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJJT1NpbmsgZW5jb2RpbmcgaXMgbm90IG11dGFibGUiKTsKICAgIH0KICAgIF9lbmNvZGluZyA9IHZhbHVlOwogIH0KCiAgdm9pZCB3cml0ZShPYmplY3Qgb2JqKSB7CiAgICBTdHJpbmcgc3RyaW5nID0gJyRvYmonOwogICAgaWYgKHN0cmluZy5pc0VtcHR5KSByZXR1cm47CiAgICBhZGQoX2VuY29kaW5nLmVuY29kZShzdHJpbmcpKTsKICB9CgogIHZvaWQgd3JpdGVBbGwoSXRlcmFibGUgb2JqZWN0cywgW1N0cmluZyBzZXBhcmF0b3IgPSAiIl0pIHsKICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gb2JqZWN0cy5pdGVyYXRvcjsKICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuOwogICAgaWYgKHNlcGFyYXRvci5pc0VtcHR5KSB7CiAgICAgIGRvIHsKICAgICAgICB3cml0ZShpdGVyYXRvci5jdXJyZW50KTsKICAgICAgfSB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZShpdGVyYXRvci5jdXJyZW50KTsKICAgICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgICB3cml0ZShzZXBhcmF0b3IpOwogICAgICAgIHdyaXRlKGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlbG4oW09iamVjdCBvYmplY3QgPSAiIl0pIHsKICAgIHdyaXRlKG9iamVjdCk7CiAgICB3cml0ZSgiXG4iKTsKICB9CgogIHZvaWQgd3JpdGVDaGFyQ29kZShpbnQgY2hhckNvZGUpIHsKICAgIHdyaXRlKG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKSk7CiAgfQp9CoFAAE5OPAEPAREBBCQDRTIDTgNJTgNIBEUGTgVPJgZRKQEGQDkGFQEGQwVROAVNGAVOJAVNBhwBBkI/BU4kBhoBBkYFTSsFTiQGPAEGQjkFTiQGIwEGKQVOBU4kBiQBBkAFTRgFTiQGMQEGOAUsPQVNGgYuAQZRIgVIBU0XBhIBBiAFTU4YBhIBBkpGDgYTAgE0IzQrIhoZGgEhARUVMAYbBAEyFTAGLQQBJxRHBiABFS4kTiIBTBgkGAgEARMUPwZEUR4VLiEkGAgEARMUPwYWGCklDxgIBhEEARhLBAEsASMnJgYEATonGDcGBAEoFD8GFTQGJ0EuNxhGLycmET4aCigYRkEnJhFHFTEKCgYgBAIBSRYgAVEBJgEmHT4GFwQBGxwgIwQBPSomHQshJQ0fJBohCAYEAScTEQQBJS4EAgEUZGFydDppby9pb19zaW5rLmRhcnQ/b3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvaW8vaW9fc2VydmljZS5kYXJ0iDcvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5pbzsKCmNsYXNzIF9JT1NlcnZpY2UgewogIC8vIFRoaXMgbGlzdCBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBsaXN0IGluIHJ1bnRpbWUvYmluL2lvX3NlcnZpY2UuaAogIHN0YXRpYyBjb25zdCBpbnQgZmlsZUV4aXN0cyA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlQ3JlYXRlID0gMTsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVEZWxldGUgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZVJlbmFtZSA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlQ29weSA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlT3BlbiA9IDU7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlUmVzb2x2ZVN5bWJvbGljTGlua3MgPSA2OwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZUNsb3NlID0gNzsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVQb3NpdGlvbiA9IDg7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlU2V0UG9zaXRpb24gPSA5OwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZVRydW5jYXRlID0gMTA7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlTGVuZ3RoID0gMTE7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlTGVuZ3RoRnJvbVBhdGggPSAxMjsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVMYXN0QWNjZXNzZWQgPSAxMzsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVTZXRMYXN0QWNjZXNzZWQgPSAxNDsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVMYXN0TW9kaWZpZWQgPSAxNTsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVTZXRMYXN0TW9kaWZpZWQgPSAxNjsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVGbHVzaCA9IDE3OwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZVJlYWRCeXRlID0gMTg7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlV3JpdGVCeXRlID0gMTk7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlUmVhZCA9IDIwOwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZVJlYWRJbnRvID0gMjE7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlV3JpdGVGcm9tID0gMjI7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlQ3JlYXRlTGluayA9IDIzOwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZURlbGV0ZUxpbmsgPSAyNDsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVSZW5hbWVMaW5rID0gMjU7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlTGlua1RhcmdldCA9IDI2OwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZVR5cGUgPSAyNzsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVJZGVudGljYWwgPSAyODsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVTdGF0ID0gMjk7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlTG9jayA9IDMwOwogIHN0YXRpYyBjb25zdCBpbnQgc29ja2V0TG9va3VwID0gMzE7CiAgc3RhdGljIGNvbnN0IGludCBzb2NrZXRMaXN0SW50ZXJmYWNlcyA9IDMyOwogIHN0YXRpYyBjb25zdCBpbnQgc29ja2V0UmV2ZXJzZUxvb2t1cCA9IDMzOwogIHN0YXRpYyBjb25zdCBpbnQgZGlyZWN0b3J5Q3JlYXRlID0gMzQ7CiAgc3RhdGljIGNvbnN0IGludCBkaXJlY3RvcnlEZWxldGUgPSAzNTsKICBzdGF0aWMgY29uc3QgaW50IGRpcmVjdG9yeUV4aXN0cyA9IDM2OwogIHN0YXRpYyBjb25zdCBpbnQgZGlyZWN0b3J5Q3JlYXRlVGVtcCA9IDM3OwogIHN0YXRpYyBjb25zdCBpbnQgZGlyZWN0b3J5TGlzdFN0YXJ0ID0gMzg7CiAgc3RhdGljIGNvbnN0IGludCBkaXJlY3RvcnlMaXN0TmV4dCA9IDM5OwogIHN0YXRpYyBjb25zdCBpbnQgZGlyZWN0b3J5TGlzdFN0b3AgPSA0MDsKICBzdGF0aWMgY29uc3QgaW50IGRpcmVjdG9yeVJlbmFtZSA9IDQxOwogIHN0YXRpYyBjb25zdCBpbnQgc3NsUHJvY2Vzc0ZpbHRlciA9IDQyOwoKICBleHRlcm5hbCBzdGF0aWMgRnV0dXJlIF9kaXNwYXRjaChpbnQgcmVxdWVzdCwgTGlzdCBkYXRhKTsKfQo6AE5OPAEPAREBE04jIyMjISExIiUoJiQsKi0qLSMmJyImJygoKCgiJyIiJi4tKSkpLSwrKykqATwCARdkYXJ0OmlvL2lvX3NlcnZpY2UuZGFydDlvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9pby9saW5rLmRhcnSoMy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmlvOwoKLyoqCiAqIFtMaW5rXSBvYmplY3RzIGFyZSByZWZlcmVuY2VzIHRvIGZpbGVzeXN0ZW0gbGlua3MuCiAqCiAqLwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmFic3RyYWN0IGNsYXNzIExpbmsgaW1wbGVtZW50cyBGaWxlU3lzdGVtRW50aXR5IHsKICAvKioKICAgKiBDcmVhdGVzIGEgTGluayBvYmplY3QuCiAgICovCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGZhY3RvcnkgTGluayhTdHJpbmcgcGF0aCkgewogICAgZmluYWwgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gbmV3IF9MaW5rKHBhdGgpOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5jcmVhdGVMaW5rKHBhdGgpOwogIH0KCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGZhY3RvcnkgTGluay5mcm9tUmF3UGF0aChVaW50OExpc3QgcmF3UGF0aCkgewogICAgLy8gVE9ETyhia29ueWkpOiBoYW5kbGUgb3ZlcnJpZGVzCiAgICByZXR1cm4gbmV3IF9MaW5rLmZyb21SYXdQYXRoKHJhd1BhdGgpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtMaW5rXSBvYmplY3QuCiAgICoKICAgKiBJZiBbcGF0aF0gaXMgYSByZWxhdGl2ZSBwYXRoLCBpdCB3aWxsIGJlIGludGVycHJldGVkIHJlbGF0aXZlIHRvIHRoZQogICAqIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgKHNlZSBbRGlyZWN0b3J5LmN1cnJlbnRdKSwgd2hlbiB1c2VkLgogICAqCiAgICogSWYgW3BhdGhdIGlzIGFuIGFic29sdXRlIHBhdGgsIGl0IHdpbGwgYmUgaW1tdW5lIHRvIGNoYW5nZXMgdG8gdGhlCiAgICogY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KICAgKi8KICBmYWN0b3J5IExpbmsuZnJvbVVyaShVcmkgdXJpKSA9PiBuZXcgTGluayh1cmkudG9GaWxlUGF0aCgpKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIHN5bWJvbGljIGxpbmsuIFJldHVybnMgYSBbOkZ1dHVyZTxMaW5rPjpdIHRoYXQgY29tcGxldGVzIHdpdGgKICAgKiB0aGUgbGluayB3aGVuIGl0IGhhcyBiZWVuIGNyZWF0ZWQuIElmIHRoZSBsaW5rIGV4aXN0cywKICAgKiB0aGUgZnV0dXJlIHdpbGwgY29tcGxldGUgd2l0aCBhbiBlcnJvci4KICAgKgogICAqIElmIFtyZWN1cnNpdmVdIGlzIGZhbHNlLCB0aGUgZGVmYXVsdCwgdGhlIGxpbmsgaXMgY3JlYXRlZAogICAqIG9ubHkgaWYgYWxsIGRpcmVjdG9yaWVzIGluIGl0cyBwYXRoIGV4aXN0LgogICAqIElmIFtyZWN1cnNpdmVdIGlzIHRydWUsIGFsbCBub24tZXhpc3RpbmcgcGF0aAogICAqIGNvbXBvbmVudHMgYXJlIGNyZWF0ZWQuIFRoZSBkaXJlY3RvcmllcyBpbiB0aGUgcGF0aCBvZiBbdGFyZ2V0XSBhcmUKICAgKiBub3QgYWZmZWN0ZWQsIHVubGVzcyB0aGV5IGFyZSBhbHNvIGluIFtwYXRoXS4KICAgKgogICAqIE9uIHRoZSBXaW5kb3dzIHBsYXRmb3JtLCB0aGlzIGNhbGwgd2lsbCBjcmVhdGUgYSB0cnVlIHN5bWJvbGljIGxpbmsKICAgKiBpbnN0ZWFkIG9mIGEgSnVuY3Rpb24uIEluIG9yZGVyIHRvIGNyZWF0ZSBhIHN5bWJvbGljIGxpbmsgb24gV2luZG93cywgRGFydAogICAqIG11c3QgYmUgcnVuIGluIEFkbWluaXN0cmF0b3IgbW9kZSBvciB0aGUgc3lzdGVtIG11c3QgaGF2ZSBEZXZlbG9wZXIgTW9kZQogICAqIGVuYWJsZWQsIG90aGVyd2lzZSBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSB3aWxsIGJlIHJhaXNlZCB3aXRoIAogICAqIGBFUlJPUl9QUklWSUxFR0VfTk9UX0hFTERgIHNldCBhcyB0aGUgZXJybm8gd2hlbiB0aGlzIGNhbGwgaXMgbWFkZS4KICAgKgogICAqIE9uIG90aGVyIHBsYXRmb3JtcywgdGhlIHBvc2l4IHN5bWxpbmsoKSBjYWxsIGlzIHVzZWQgdG8gbWFrZSBhIHN5bWJvbGljCiAgICogbGluayBjb250YWluaW5nIHRoZSBzdHJpbmcgW3RhcmdldF0uICBJZiBbdGFyZ2V0XSBpcyBhIHJlbGF0aXZlIHBhdGgsCiAgICogaXQgd2lsbCBiZSBpbnRlcnByZXRlZCByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGxpbmsuCiAgICovCiAgRnV0dXJlPExpbms+IGNyZWF0ZShTdHJpbmcgdGFyZ2V0LCB7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgY3JlYXRlIHRoZSBsaW5rLiBDYWxsaW5nIFtjcmVhdGVTeW5jXSBvbiBhbiBleGlzdGluZyBsaW5rCiAgICogd2lsbCB0aHJvdyBhbiBleGNlcHRpb24uCiAgICoKICAgKiBJZiBbcmVjdXJzaXZlXSBpcyBmYWxzZSwgdGhlIGRlZmF1bHQsIHRoZSBsaW5rIGlzIGNyZWF0ZWQgb25seSBpZiBhbGwKICAgKiBkaXJlY3RvcmllcyBpbiBpdHMgcGF0aCBleGlzdC4gSWYgW3JlY3Vyc2l2ZV0gaXMgdHJ1ZSwgYWxsCiAgICogbm9uLWV4aXN0aW5nIHBhdGggY29tcG9uZW50cyBhcmUgY3JlYXRlZC4gVGhlIGRpcmVjdG9yaWVzIGluCiAgICogdGhlIHBhdGggb2YgW3RhcmdldF0gYXJlIG5vdCBhZmZlY3RlZCwgdW5sZXNzIHRoZXkgYXJlIGFsc28gaW4gW3BhdGhdLgogICAqCiAgICogT24gdGhlIFdpbmRvd3MgcGxhdGZvcm0sIHRoaXMgY2FsbCB3aWxsIGNyZWF0ZSBhIHRydWUgc3ltYm9saWMgbGluawogICAqIGluc3RlYWQgb2YgYSBKdW5jdGlvbi4gSW4gb3JkZXIgdG8gY3JlYXRlIGEgc3ltYm9saWMgbGluayBvbiBXaW5kb3dzLCBEYXJ0CiAgICogbXVzdCBiZSBydW4gaW4gQWRtaW5pc3RyYXRvciBtb2RlIG9yIHRoZSBzeXN0ZW0gbXVzdCBoYXZlIERldmVsb3BlciBNb2RlCiAgICogZW5hYmxlZCwgb3RoZXJ3aXNlIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIHdpbGwgYmUgcmFpc2VkIHdpdGggCiAgICogYEVSUk9SX1BSSVZJTEVHRV9OT1RfSEVMRGAgc2V0IGFzIHRoZSBlcnJubyB3aGVuIHRoaXMgY2FsbCBpcyBtYWRlLgogICAqCiAgICogT24gb3RoZXIgcGxhdGZvcm1zLCB0aGUgcG9zaXggc3ltbGluaygpIGNhbGwgaXMgdXNlZCB0byBtYWtlIGEgc3ltYm9saWMKICAgKiBsaW5rIGNvbnRhaW5pbmcgdGhlIHN0cmluZyBbdGFyZ2V0XS4gIElmIFt0YXJnZXRdIGlzIGEgcmVsYXRpdmUgcGF0aCwKICAgKiBpdCB3aWxsIGJlIGludGVycHJldGVkIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgbGluay4KICAgKi8KICB2b2lkIGNyZWF0ZVN5bmMoU3RyaW5nIHRhcmdldCwge2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHVwZGF0ZXMgdGhlIGxpbmsuIENhbGxpbmcgW3VwZGF0ZVN5bmNdIG9uIGEgbm9uLWV4aXN0aW5nIGxpbmsKICAgKiB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbi4KICAgKi8KICB2b2lkIHVwZGF0ZVN5bmMoU3RyaW5nIHRhcmdldCk7CgogIC8qKgogICAqIFVwZGF0ZXMgdGhlIGxpbmsuIFJldHVybnMgYSBbOkZ1dHVyZTxMaW5rPjpdIHRoYXQgY29tcGxldGVzIHdpdGggdGhlCiAgICogbGluayB3aGVuIGl0IGhhcyBiZWVuIHVwZGF0ZWQuICBDYWxsaW5nIFt1cGRhdGVdIG9uIGEgbm9uLWV4aXN0aW5nIGxpbmsKICAgKiB3aWxsIGNvbXBsZXRlIGl0cyByZXR1cm5lZCBmdXR1cmUgd2l0aCBhbiBleGNlcHRpb24uCiAgICovCiAgRnV0dXJlPExpbms+IHVwZGF0ZShTdHJpbmcgdGFyZ2V0KTsKCiAgRnV0dXJlPFN0cmluZz4gcmVzb2x2ZVN5bWJvbGljTGlua3MoKTsKCiAgU3RyaW5nIHJlc29sdmVTeW1ib2xpY0xpbmtzU3luYygpOwoKICAvKioKICAgKiBSZW5hbWVzIHRoaXMgbGluay4gUmV0dXJucyBhIGBGdXR1cmU8TGluaz5gIHRoYXQgY29tcGxldGVzCiAgICogd2l0aCBhIFtMaW5rXSBpbnN0YW5jZSBmb3IgdGhlIHJlbmFtZWQgbGluay4KICAgKgogICAqIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGxpbmssIHRoYXQgbGluayBpcwogICAqIHJlcGxhY2VkLiBJZiBbbmV3UGF0aF0gaWRlbnRpZmllcyBhbiBleGlzdGluZyBmaWxlIG9yIGRpcmVjdG9yeSwKICAgKiB0aGUgb3BlcmF0aW9uIGZhaWxzIGFuZCB0aGUgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGV4Y2VwdGlvbi4KICAgKi8KICBGdXR1cmU8TGluaz4gcmVuYW1lKFN0cmluZyBuZXdQYXRoKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSByZW5hbWVzIHRoaXMgbGluay4gUmV0dXJucyBhIFtMaW5rXQogICAqIGluc3RhbmNlIGZvciB0aGUgcmVuYW1lZCBsaW5rLgogICAqCiAgICogSWYgW25ld1BhdGhdIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgbGluaywgdGhhdCBsaW5rIGlzCiAgICogcmVwbGFjZWQuIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGZpbGUgb3IgZGlyZWN0b3J5CiAgICogdGhlIG9wZXJhdGlvbiBmYWlscyBhbmQgYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KICAgKi8KICBMaW5rIHJlbmFtZVN5bmMoU3RyaW5nIG5ld1BhdGgpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgW0xpbmtdIGluc3RhbmNlIHdob3NlIHBhdGggaXMgdGhlIGFic29sdXRlIHBhdGggdG8gW3RoaXNdLgogICAqCiAgICogVGhlIGFic29sdXRlIHBhdGggaXMgY29tcHV0ZWQgYnkgcHJlZml4aW5nCiAgICogYSByZWxhdGl2ZSBwYXRoIHdpdGggdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksIGFuZCByZXR1cm5pbmcKICAgKiBhbiBhYnNvbHV0ZSBwYXRoIHVuY2hhbmdlZC4KICAgKi8KICBMaW5rIGdldCBhYnNvbHV0ZTsKCiAgLyoqCiAgICogR2V0cyB0aGUgdGFyZ2V0IG9mIHRoZSBsaW5rLiBSZXR1cm5zIGEgZnV0dXJlIHRoYXQgY29tcGxldGVzIHdpdGgKICAgKiB0aGUgcGF0aCB0byB0aGUgdGFyZ2V0LgogICAqCiAgICogSWYgdGhlIHJldHVybmVkIHRhcmdldCBpcyBhIHJlbGF0aXZlIHBhdGgsIGl0IGlzIHJlbGF0aXZlIHRvIHRoZQogICAqIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBsaW5rLgogICAqCiAgICogSWYgdGhlIGxpbmsgZG9lcyBub3QgZXhpc3QsIG9yIGlzIG5vdCBhIGxpbmssIHRoZSBmdXR1cmUgY29tcGxldGVzIHdpdGgKICAgKiBhIEZpbGVTeXN0ZW1FeGNlcHRpb24uCiAgICovCiAgRnV0dXJlPFN0cmluZz4gdGFyZ2V0KCk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgZ2V0cyB0aGUgdGFyZ2V0IG9mIHRoZSBsaW5rLiBSZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSB0YXJnZXQuCiAgICoKICAgKiBJZiB0aGUgcmV0dXJuZWQgdGFyZ2V0IGlzIGEgcmVsYXRpdmUgcGF0aCwgaXQgaXMgcmVsYXRpdmUgdG8gdGhlCiAgICogZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGxpbmsuCiAgICoKICAgKiBJZiB0aGUgbGluayBkb2VzIG5vdCBleGlzdCwgb3IgaXMgbm90IGEgbGluaywgdGhyb3dzIGEgRmlsZVN5c3RlbUV4Y2VwdGlvbi4KICAgKi8KICBTdHJpbmcgdGFyZ2V0U3luYygpOwp9CgpjbGFzcyBfTGluayBleHRlbmRzIEZpbGVTeXN0ZW1FbnRpdHkgaW1wbGVtZW50cyBMaW5rIHsKICBTdHJpbmcgX3BhdGg7CiAgVWludDhMaXN0IF9yYXdQYXRoOwoKICBfTGluayhTdHJpbmcgcGF0aCkgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwocGF0aCwgJ3BhdGgnKTsKICAgIF9wYXRoID0gcGF0aDsKICAgIF9yYXdQYXRoID0gRmlsZVN5c3RlbUVudGl0eS5fdG9VdGY4QXJyYXkocGF0aCk7CiAgfQoKICBfTGluay5mcm9tUmF3UGF0aChVaW50OExpc3QgcmF3UGF0aCkgewogICAgX3Jhd1BhdGggPSBGaWxlU3lzdGVtRW50aXR5Ll90b051bGxUZXJtaW5hdGVkVXRmOEFycmF5KHJhd1BhdGgpOwogICAgX3BhdGggPSBGaWxlU3lzdGVtRW50aXR5Ll90b1N0cmluZ0Zyb21VdGY4QXJyYXkocmF3UGF0aCk7CiAgfQoKICBTdHJpbmcgZ2V0IHBhdGggPT4gX3BhdGg7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJMaW5rOiAnJHBhdGgnIjsKCiAgRnV0dXJlPGJvb2w+IGV4aXN0cygpID0+IEZpbGVTeXN0ZW1FbnRpdHkuX2lzTGlua1JhdyhfcmF3UGF0aCk7CgogIGJvb2wgZXhpc3RzU3luYygpID0+IEZpbGVTeXN0ZW1FbnRpdHkuX2lzTGlua1Jhd1N5bmMoX3Jhd1BhdGgpOwoKICBMaW5rIGdldCBhYnNvbHV0ZSA9PiBuZXcgTGluay5mcm9tUmF3UGF0aChfcmF3QWJzb2x1dGVQYXRoKTsKCiAgRnV0dXJlPExpbms+IGNyZWF0ZShTdHJpbmcgdGFyZ2V0LCB7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSkgewogICAgdmFyIHJlc3VsdCA9CiAgICAgICAgcmVjdXJzaXZlID8gcGFyZW50LmNyZWF0ZShyZWN1cnNpdmU6IHRydWUpIDogbmV3IEZ1dHVyZS52YWx1ZShudWxsKTsKICAgIHJldHVybiByZXN1bHQKICAgICAgICAudGhlbigoXykgPT4gX0ZpbGUuX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICAgICAgX0lPU2VydmljZS5maWxlQ3JlYXRlTGluaywgW251bGwsIF9yYXdQYXRoLCB0YXJnZXRdKSkKICAgICAgICAudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZSgKICAgICAgICAgICAgcmVzcG9uc2UsICJDYW5ub3QgY3JlYXRlIGxpbmsgdG8gdGFyZ2V0ICckdGFyZ2V0JyIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgfQoKICB2b2lkIGNyZWF0ZVN5bmMoU3RyaW5nIHRhcmdldCwge2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pIHsKICAgIGlmIChyZWN1cnNpdmUpIHsKICAgICAgcGFyZW50LmNyZWF0ZVN5bmMocmVjdXJzaXZlOiB0cnVlKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfRmlsZS5fY3JlYXRlTGluayhfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoLCB0YXJnZXQpOwogICAgdGhyb3dJZkVycm9yKHJlc3VsdCwgIkNhbm5vdCBjcmVhdGUgbGluayIsIHBhdGgpOwogIH0KCiAgdm9pZCB1cGRhdGVTeW5jKFN0cmluZyB0YXJnZXQpIHsKICAgIC8vIFRPRE8oMTI0MTQpOiBSZXBsYWNlIHdpdGggYXRvbWljIHVwZGF0ZSwgd2hlcmUgc3VwcG9ydGVkIGJ5IHBsYXRmb3JtLgogICAgLy8gQXRvbWljYWxseSBjaGFuZ2luZyBhIGxpbmsgY2FuIGJlIGRvbmUgYnkgY3JlYXRpbmcgdGhlIG5ldyBsaW5rLCB3aXRoCiAgICAvLyBhIGRpZmZlcmVudCBuYW1lLCBhbmQgdXNpbmcgdGhlIHJlbmFtZSgpIHBvc2l4IGNhbGwgdG8gbW92ZSBpdCB0bwogICAgLy8gdGhlIG9sZCBuYW1lIGF0b21pY2FsbHkuCiAgICBkZWxldGVTeW5jKCk7CiAgICBjcmVhdGVTeW5jKHRhcmdldCk7CiAgfQoKICBGdXR1cmU8TGluaz4gdXBkYXRlKFN0cmluZyB0YXJnZXQpIHsKICAgIC8vIFRPRE8oMTI0MTQpOiBSZXBsYWNlIHdpdGggYXRvbWljIHVwZGF0ZSwgd2hlcmUgc3VwcG9ydGVkIGJ5IHBsYXRmb3JtLgogICAgLy8gQXRvbWljYWxseSBjaGFuZ2luZyBhIGxpbmsgY2FuIGJlIGRvbmUgYnkgY3JlYXRpbmcgdGhlIG5ldyBsaW5rLCB3aXRoCiAgICAvLyBhIGRpZmZlcmVudCBuYW1lLCBhbmQgdXNpbmcgdGhlIHJlbmFtZSgpIHBvc2l4IGNhbGwgdG8gbW92ZSBpdCB0bwogICAgLy8gdGhlIG9sZCBuYW1lIGF0b21pY2FsbHkuCiAgICByZXR1cm4gZGVsZXRlKCkudGhlbjxMaW5rPigoXykgPT4gY3JlYXRlKHRhcmdldCkpOwogIH0KCiAgRnV0dXJlPExpbms+IF9kZWxldGUoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pIHsKICAgIGlmIChyZWN1cnNpdmUpIHsKICAgICAgcmV0dXJuIG5ldyBEaXJlY3RvcnkuZnJvbVJhd1BhdGgoX3Jhd1BhdGgpCiAgICAgICAgICAuZGVsZXRlKHJlY3Vyc2l2ZTogdHJ1ZSkKICAgICAgICAgIC50aGVuKChfKSA9PiB0aGlzKTsKICAgIH0KICAgIHJldHVybiBfRmlsZS5fZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKAogICAgICAgIF9JT1NlcnZpY2UuZmlsZURlbGV0ZUxpbmssIFtudWxsLCBfcmF3UGF0aF0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJDYW5ub3QgZGVsZXRlIGxpbmsiLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0pOwogIH0KCiAgdm9pZCBfZGVsZXRlU3luYyh7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSkgewogICAgaWYgKHJlY3Vyc2l2ZSkgewogICAgICByZXR1cm4gbmV3IERpcmVjdG9yeS5mcm9tUmF3UGF0aChfcmF3UGF0aCkuZGVsZXRlU3luYyhyZWN1cnNpdmU6IHRydWUpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9GaWxlLl9kZWxldGVMaW5rTmF0aXZlKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgpOwogICAgdGhyb3dJZkVycm9yKHJlc3VsdCwgIkNhbm5vdCBkZWxldGUgbGluayIsIHBhdGgpOwogIH0KCiAgRnV0dXJlPExpbms+IHJlbmFtZShTdHJpbmcgbmV3UGF0aCkgewogICAgcmV0dXJuIF9GaWxlLl9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoCiAgICAgICAgX0lPU2VydmljZS5maWxlUmVuYW1lTGluaywgW251bGwsIF9yYXdQYXRoLCBuZXdQYXRoXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZSgKICAgICAgICAgICAgcmVzcG9uc2UsICJDYW5ub3QgcmVuYW1lIGxpbmsgdG8gJyRuZXdQYXRoJyIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgTGluayhuZXdQYXRoKTsKICAgIH0pOwogIH0KCiAgTGluayByZW5hbWVTeW5jKFN0cmluZyBuZXdQYXRoKSB7CiAgICB2YXIgcmVzdWx0ID0gX0ZpbGUuX3JlbmFtZUxpbmsoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCwgbmV3UGF0aCk7CiAgICB0aHJvd0lmRXJyb3IocmVzdWx0LCAiQ2Fubm90IHJlbmFtZSBsaW5rICckcGF0aCcgdG8gJyRuZXdQYXRoJyIpOwogICAgcmV0dXJuIG5ldyBMaW5rKG5ld1BhdGgpOwogIH0KCiAgRnV0dXJlPFN0cmluZz4gdGFyZ2V0KCkgewogICAgcmV0dXJuIF9GaWxlLl9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoCiAgICAgICAgX0lPU2VydmljZS5maWxlTGlua1RhcmdldCwgW251bGwsIF9yYXdQYXRoXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZSgKICAgICAgICAgICAgcmVzcG9uc2UsICJDYW5ub3QgZ2V0IHRhcmdldCBvZiBsaW5rIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgfSk7CiAgfQoKICBTdHJpbmcgdGFyZ2V0U3luYygpIHsKICAgIHZhciByZXN1bHQgPSBfRmlsZS5fbGlua1RhcmdldChfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoKTsKICAgIHRocm93SWZFcnJvcihyZXN1bHQsICJDYW5ub3QgcmVhZCBsaW5rIiwgcGF0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIHRocm93SWZFcnJvcihPYmplY3QgcmVzdWx0LCBTdHJpbmcgbXNnLCBbU3RyaW5nIHBhdGggPSAiIl0pIHsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbihtc2csIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgfQoKICBib29sIF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpIHsKICAgIHJldHVybiByZXNwb25zZSBpcyBMaXN0ICYmIHJlc3BvbnNlWzBdICE9IF9zdWNjZXNzUmVzcG9uc2U7CiAgfQoKICBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCBTdHJpbmcgbWVzc2FnZSwgU3RyaW5nIHBhdGgpIHsKICAgIGFzc2VydChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSk7CiAgICBzd2l0Y2ggKHJlc3BvbnNlW19lcnJvclJlc3BvbnNlRXJyb3JUeXBlXSkgewogICAgICBjYXNlIF9pbGxlZ2FsQXJndW1lbnRSZXNwb25zZToKICAgICAgICByZXR1cm4gbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgICAgY2FzZSBfb3NFcnJvclJlc3BvbnNlOgogICAgICAgIHZhciBlcnIgPSBuZXcgT1NFcnJvcihyZXNwb25zZVtfb3NFcnJvclJlc3BvbnNlTWVzc2FnZV0sCiAgICAgICAgICAgIHJlc3BvbnNlW19vc0Vycm9yUmVzcG9uc2VFcnJvckNvZGVdKTsKICAgICAgICByZXR1cm4gbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24obWVzc2FnZSwgcGF0aCwgZXJyKTsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gbmV3IEV4Y2VwdGlvbigiVW5rbm93biBlcnJvciIpOwogICAgfQogIH0KfQqBMABOTjwBDwERAQQ2AwQaMgYcBhweNx0eBicEARwwJisEAQYeBUpFBUggBj8BBk08LQU/MDNJMwVJUE5FSQVNS0sGPwEGTR4FS0BCTAVJUE5FSQVNS0sGOwEGUR4GIgEGSk06BiYBKQElAQZAMgU8RkUGJwEGNyQFPEU1BiMBBkoFMEchBhUBBkcdBUYkBU0cBhsBBlAFRiQFUQYXAgE3EBYBFy4SNAQBKUU+BAEcASgBQgFCAT8BQBFNEjNCGygmRwgTCAQBPBUqBk02BAEjTU1JIBIYBAEnTU1JIDcEATIVMSMeBilHKEwIEwgEAS4VTgZLNgQBKClQKCZBCCAIBAEkTkYeBAEcKUcoJjoIFwgEARhFNBMEAUcdOAYEASRABAFCKDElJB1BMjwPLwYEAgERZGFydDppby9saW5rLmRhcnRDb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvaW8vbmFtZXNwYWNlX2ltcGwuZGFydISOLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuaW87CgovLyBFYWNoIElzb2xhdGUgbWF5IHJ1biBpbiBhIGRpZmZlcmVudCAibmFtZXNwYWNlIiwgd2hpY2ggcHJvdmlkZXMgdGhlIHNjb3BlIGluCi8vIHdoaWNoIGZpbGUgcGF0aHMgYXJlIHJlc29sdmVkLgphYnN0cmFjdCBjbGFzcyBfTmFtZXNwYWNlIHsKICAvLyBUaGlzIGdldHRlciBkb2VzIG5vdCBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9uIHRoZSB1bmRlcmx5aW5nIG5hdGl2ZQogIC8vIG9iamVjdC4gSXQgY2Fubm90IGJlIHBhc3NlZCBpbiBhIGRpc3BhdGNoIG1lc3NhZ2UgdG8gdGhlIElPU2VydmljZSB0aHJlYWQuCiAgZXh0ZXJuYWwgc3RhdGljIF9OYW1lc3BhY2UgZ2V0IF9uYW1lc3BhY2U7CgogIC8vIFRoaXMgZ2V0dGVyIGRvZXMgaW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiB0aGUgdW5kZXJseWluZyBuYXRpdmUKICAvLyBvYmplY3QuIEl0IG11c3QgYmUgcGFzc2VkIGluIGEgZGlzcGF0Y2ggbWVzc2FnZSB0byB0aGUgSU9TZXJ2aWNlIHRocmVhZC4KICBleHRlcm5hbCBzdGF0aWMgaW50IGdldCBfbmFtZXNwYWNlUG9pbnRlcjsKCiAgLy8gVGhpcyBzZXRzIHVwIHRoZSBJc29sYXRlJ3MgbmFtZXNwYWNlLiBJdCBzaG91bGQgYmUgc2V0IHVwIGJ5IHRoZSBlbWJlZGRlci4KICAvLyBJZiBpdCBpcyBub3Qgc2V0IHVwIGJ5IHRoZSBlbWJlZGRlciwgcmVsYXRpdmUgcGF0aHMgd2lsbCBiZSByZXNvbHZlZAogIC8vIHJlbGF0aXZlIHRvIHRoZSBwcm9jZXNzJ3MgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgYWJzb2x1dGUgcGF0aHMgd2lsbAogIC8vIGJlIGxlZnQgcmVsYXRpdmUgdG8gdGhlIGZpbGUgc3lzdGVtIHJvb3QuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGV4dGVybmFsIHN0YXRpYyB2b2lkIF9zZXR1cE5hbWVzcGFjZSh2YXIgbmFtZXNwYWNlKTsKfQocAE5OPAEPAREBUCIcUFAtAUxOLQFQSlEvHDcCARtkYXJ0OmlvL25hbWVzcGFjZV9pbXBsLmRhcnRGb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvaW8vbmV0d29ya19wcm9maWxpbmcuZGFydJ/ILy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5pbzsKCmNvbnN0IGludCBfdmVyc2lvbk1ham9yID0gMTsKY29uc3QgaW50IF92ZXJzaW9uTWlub3IgPSAxOwoKY29uc3QgU3RyaW5nIF90Y3BTb2NrZXQgPSAndGNwJzsKY29uc3QgU3RyaW5nIF91ZHBTb2NrZXQgPSAndWRwJzsKCkBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JywgIWNvbnN0IGJvb2wuZnJvbUVudmlyb25tZW50KCJkYXJ0LnZtLnByb2R1Y3QiKSkKYWJzdHJhY3QgY2xhc3MgX05ldHdvcmtQcm9maWxpbmcgewogIC8vIEh0dHAgcmVsYXRpdmUgUlBDcwogIHN0YXRpYyBjb25zdCBfa0dldEh0dHBFbmFibGVUaW1lbGluZUxvZ2dpbmcgPQogICAgICAnZXh0LmRhcnQuaW8uZ2V0SHR0cEVuYWJsZVRpbWVsaW5lTG9nZ2luZyc7CiAgc3RhdGljIGNvbnN0IF9rU2V0SHR0cEVuYWJsZVRpbWVsaW5lTG9nZ2luZyA9CiAgICAgICdleHQuZGFydC5pby5zZXRIdHRwRW5hYmxlVGltZWxpbmVMb2dnaW5nJzsKICAvLyBTb2NrZXQgcmVsYXRpdmUgUlBDcwogIHN0YXRpYyBjb25zdCBfa0NsZWFyU29ja2V0UHJvZmlsZVJQQyA9ICdleHQuZGFydC5pby5jbGVhclNvY2tldFByb2ZpbGUnOwogIHN0YXRpYyBjb25zdCBfa0dldFNvY2tldFByb2ZpbGVSUEMgPSAnZXh0LmRhcnQuaW8uZ2V0U29ja2V0UHJvZmlsZSc7CiAgc3RhdGljIGNvbnN0IF9rUGF1c2VTb2NrZXRQcm9maWxpbmdSUEMgPSAnZXh0LmRhcnQuaW8ucGF1c2VTb2NrZXRQcm9maWxpbmcnOwogIHN0YXRpYyBjb25zdCBfa1N0YXJ0U29ja2V0UHJvZmlsaW5nUlBDID0gJ2V4dC5kYXJ0LmlvLnN0YXJ0U29ja2V0UHJvZmlsaW5nJzsKCiAgLy8gVE9ETyh6aWNoYW5nZ3VvKTogVGhpcyB2ZXJzaW9uIG51bWJlciByZXByZXNlbnRzIHRoZSB2ZXJzaW9uIG9mIHNlcnZpY2UKICAvLyBleHRlbnNpb24gb2YgZGFydDppby4gQ29uc2lkZXIgbW92aW5nIHRoaXMgb3V0IG9mIHdlYiBwcm9maWxlciBjbGFzcywKICAvLyBpZiBtb3JlIG1ldGhvZHMgYWRkZWQgdG8gZGFydDppbywKICBzdGF0aWMgY29uc3QgX2tHZXRWZXJzaW9uUlBDID0gJ2V4dC5kYXJ0LmlvLmdldFZlcnNpb24nOwoKICBAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCiAgc3RhdGljIHZvaWQgX3JlZ2lzdGVyU2VydmljZUV4dGVuc2lvbigpIHsKICAgIHJlZ2lzdGVyRXh0ZW5zaW9uKF9rR2V0SHR0cEVuYWJsZVRpbWVsaW5lTG9nZ2luZywgX3NlcnZpY2VFeHRlbnNpb25IYW5kbGVyKTsKICAgIHJlZ2lzdGVyRXh0ZW5zaW9uKF9rU2V0SHR0cEVuYWJsZVRpbWVsaW5lTG9nZ2luZywgX3NlcnZpY2VFeHRlbnNpb25IYW5kbGVyKTsKICAgIHJlZ2lzdGVyRXh0ZW5zaW9uKF9rR2V0U29ja2V0UHJvZmlsZVJQQywgX3NlcnZpY2VFeHRlbnNpb25IYW5kbGVyKTsKICAgIHJlZ2lzdGVyRXh0ZW5zaW9uKF9rU3RhcnRTb2NrZXRQcm9maWxpbmdSUEMsIF9zZXJ2aWNlRXh0ZW5zaW9uSGFuZGxlcik7CiAgICByZWdpc3RlckV4dGVuc2lvbihfa1BhdXNlU29ja2V0UHJvZmlsaW5nUlBDLCBfc2VydmljZUV4dGVuc2lvbkhhbmRsZXIpOwogICAgcmVnaXN0ZXJFeHRlbnNpb24oX2tDbGVhclNvY2tldFByb2ZpbGVSUEMsIF9zZXJ2aWNlRXh0ZW5zaW9uSGFuZGxlcik7CiAgICByZWdpc3RlckV4dGVuc2lvbihfa0dldFZlcnNpb25SUEMsIF9zZXJ2aWNlRXh0ZW5zaW9uSGFuZGxlcik7CiAgfQoKICBzdGF0aWMgRnV0dXJlPFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZT4gX3NlcnZpY2VFeHRlbnNpb25IYW5kbGVyKAogICAgICBTdHJpbmcgbWV0aG9kLCBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtZXRlcnMpIHsKICAgIHRyeSB7CiAgICAgIFN0cmluZyByZXNwb25zZUpzb247CiAgICAgIHN3aXRjaCAobWV0aG9kKSB7CiAgICAgICAgY2FzZSBfa0dldEh0dHBFbmFibGVUaW1lbGluZUxvZ2dpbmc6CiAgICAgICAgICByZXNwb25zZUpzb24gPSBfZ2V0SHR0cEVuYWJsZVRpbWVsaW5lTG9nZ2luZygpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBfa1NldEh0dHBFbmFibGVUaW1lbGluZUxvZ2dpbmc6CiAgICAgICAgICByZXNwb25zZUpzb24gPSBfc2V0SHR0cEVuYWJsZVRpbWVsaW5lTG9nZ2luZyhwYXJhbWV0ZXJzKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgX2tHZXRTb2NrZXRQcm9maWxlUlBDOgogICAgICAgICAgcmVzcG9uc2VKc29uID0gX1NvY2tldFByb2ZpbGUudG9Kc29uKCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIF9rU3RhcnRTb2NrZXRQcm9maWxpbmdSUEM6CiAgICAgICAgICByZXNwb25zZUpzb24gPSBfU29ja2V0UHJvZmlsZS5zdGFydCgpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBfa1BhdXNlU29ja2V0UHJvZmlsaW5nUlBDOgogICAgICAgICAgcmVzcG9uc2VKc29uID0gX1NvY2tldFByb2ZpbGUucGF1c2UoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgX2tDbGVhclNvY2tldFByb2ZpbGVSUEM6CiAgICAgICAgICByZXNwb25zZUpzb24gPSBfU29ja2V0UHJvZmlsZS5jbGVhcigpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBfa0dldFZlcnNpb25SUEM6CiAgICAgICAgICByZXNwb25zZUpzb24gPSBnZXRWZXJzaW9uKCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuIEZ1dHVyZS52YWx1ZShTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UuZXJyb3IoCiAgICAgICAgICAgICAgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLmV4dGVuc2lvbkVycm9yLAogICAgICAgICAgICAgICdNZXRob2QgJG1ldGhvZCBkb2VzIG5vdCBleGlzdCcpKTsKICAgICAgfQogICAgICByZXR1cm4gRnV0dXJlLnZhbHVlKFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5yZXN1bHQocmVzcG9uc2VKc29uKSk7CiAgICB9IGNhdGNoIChlcnJvck1lc3NhZ2UpIHsKICAgICAgcmV0dXJuIEZ1dHVyZS52YWx1ZShTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UuZXJyb3IoCiAgICAgICAgICBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UuaW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlKSk7CiAgICB9CiAgfQoKICBzdGF0aWMgU3RyaW5nIGdldFZlcnNpb24oKSA9PiBqc29uLmVuY29kZSh7CiAgICAgICAgJ3R5cGUnOiAnVmVyc2lvbicsCiAgICAgICAgJ21ham9yJzogX3ZlcnNpb25NYWpvciwKICAgICAgICAnbWlub3InOiBfdmVyc2lvbk1pbm9yLAogICAgICB9KTsKfQoKU3RyaW5nIF9zdWNjZXNzKCkgPT4ganNvbi5lbmNvZGUoewogICAgICAndHlwZSc6ICdTdWNjZXNzJywKICAgIH0pOwoKU3RyaW5nIF9pbnZhbGlkQXJndW1lbnQoU3RyaW5nIGFyZ3VtZW50LCBkeW5hbWljIHZhbHVlKSA9PgogICAgIlZhbHVlIGZvciBwYXJhbWV0ZXIgJyRhcmd1bWVudCcgaXMgbm90IHZhbGlkOiAkdmFsdWUiOwoKU3RyaW5nIF9taXNzaW5nQXJndW1lbnQoU3RyaW5nIGFyZ3VtZW50KSA9PiAiUGFyYW1ldGVyICckYXJndW1lbnQnIGlzIHJlcXVpcmVkIjsKClN0cmluZyBfZ2V0SHR0cEVuYWJsZVRpbWVsaW5lTG9nZ2luZygpID0+IGpzb24uZW5jb2RlKHsKICAgICAgJ3R5cGUnOiAnSHR0cFRpbWVsaW5lTG9nZ2luZ1N0YXRlJywKICAgICAgJ2VuYWJsZWQnOiBIdHRwQ2xpZW50LmVuYWJsZVRpbWVsaW5lTG9nZ2luZywKICAgIH0pOwoKU3RyaW5nIF9zZXRIdHRwRW5hYmxlVGltZWxpbmVMb2dnaW5nKE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1ldGVycykgewogIGNvbnN0IFN0cmluZyBrRW5hYmxlID0gJ2VuYWJsZSc7CiAgaWYgKCFwYXJhbWV0ZXJzLmNvbnRhaW5zS2V5KGtFbmFibGUpKSB7CiAgICB0aHJvdyBfbWlzc2luZ0FyZ3VtZW50KGtFbmFibGUpOwogIH0KICBmaW5hbCBlbmFibGUgPSBwYXJhbWV0ZXJzW2tFbmFibGVdLnRvTG93ZXJDYXNlKCk7CiAgaWYgKGVuYWJsZSAhPSAndHJ1ZScgJiYgZW5hYmxlICE9ICdmYWxzZScpIHsKICAgIHRocm93IF9pbnZhbGlkQXJndW1lbnQoa0VuYWJsZSwgZW5hYmxlKTsKICB9CiAgSHR0cENsaWVudC5lbmFibGVUaW1lbGluZUxvZ2dpbmcgPSAoZW5hYmxlID09ICd0cnVlJyk7CiAgcmV0dXJuIF9zdWNjZXNzKCk7Cn0KCmFic3RyYWN0IGNsYXNzIF9Tb2NrZXRQcm9maWxlIHsKICBzdGF0aWMgY29uc3QgX2tUeXBlID0gJ1NvY2tldFByb2ZpbGUnOwogIHN0YXRpYyBib29sIF9lbmFibGVTb2NrZXRQcm9maWxpbmcgPSBmYWxzZTsKICBzdGF0aWMgTWFwPGludCwgX1NvY2tldFN0YXRpc3RpYz4gX2lkVG9Tb2NrZXRTdGF0aXN0aWMgPSB7fTsKCiAgc3RhdGljIFN0cmluZyB0b0pzb24oKSA9PiBqc29uLmVuY29kZSh7CiAgICAgICAgJ3R5cGUnOiBfa1R5cGUsCiAgICAgICAgJ3NvY2tldHMnOiBfaWRUb1NvY2tldFN0YXRpc3RpYy52YWx1ZXMubWFwKChmKSA9PiBmLnRvTWFwKCkpLnRvTGlzdCgpLAogICAgICB9KTsKCiAgc3RhdGljIHZvaWQgY29sbGVjdE5ld1NvY2tldCgKICAgICAgaW50IGlkLCBTdHJpbmcgdHlwZSwgSW50ZXJuZXRBZGRyZXNzIGFkZHIsIGludCBwb3J0KSB7CiAgICBfU29ja2V0UHJvZmlsZS5jb2xsZWN0U3RhdGlzdGljKGlkLCBfU29ja2V0UHJvZmlsZVR5cGUuc3RhcnRUaW1lKTsKICAgIF9Tb2NrZXRQcm9maWxlLmNvbGxlY3RTdGF0aXN0aWMoaWQsIF9Tb2NrZXRQcm9maWxlVHlwZS5zb2NrZXRUeXBlLCB0eXBlKTsKICAgIF9Tb2NrZXRQcm9maWxlLmNvbGxlY3RTdGF0aXN0aWMoaWQsIF9Tb2NrZXRQcm9maWxlVHlwZS5hZGRyZXNzLCBhZGRyKTsKICAgIF9Tb2NrZXRQcm9maWxlLmNvbGxlY3RTdGF0aXN0aWMoaWQsIF9Tb2NrZXRQcm9maWxlVHlwZS5wb3J0LCBwb3J0KTsKICB9CgogIHN0YXRpYyB2b2lkIGNvbGxlY3RTdGF0aXN0aWMoaW50IGlkLCBfU29ja2V0UHJvZmlsZVR5cGUgdHlwZSwKICAgICAgW2R5bmFtaWMgb2JqZWN0XSkgewogICAgaWYgKCFfZW5hYmxlU29ja2V0UHJvZmlsaW5nKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIFNraXAgc29ja2V0IHRoYXQgc3RhcnRlZCBiZWZvcmUgX2VuYWJsZVNvY2tldFByb2ZpbGluZyB0dXJuZWQgb24uCiAgICBpZiAoIV9pZFRvU29ja2V0U3RhdGlzdGljLmNvbnRhaW5zS2V5KGlkKSAmJgogICAgICAgIHR5cGUgIT0gX1NvY2tldFByb2ZpbGVUeXBlLnN0YXJ0VGltZSkgcmV0dXJuOwogICAgX2lkVG9Tb2NrZXRTdGF0aXN0aWNbaWRdID8/PSBfU29ja2V0U3RhdGlzdGljKGlkKTsKICAgIF9Tb2NrZXRTdGF0aXN0aWMgc3RhdHMgPSBfaWRUb1NvY2tldFN0YXRpc3RpY1tpZF07CiAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgY2FzZSBfU29ja2V0UHJvZmlsZVR5cGUuc3RhcnRUaW1lOgogICAgICAgIHN0YXRzLnN0YXJ0VGltZSA9IFRpbWVsaW5lLm5vdzsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBfU29ja2V0UHJvZmlsZVR5cGUuZW5kVGltZToKICAgICAgICBzdGF0cy5lbmRUaW1lID0gVGltZWxpbmUubm93OwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIF9Tb2NrZXRQcm9maWxlVHlwZS5hZGRyZXNzOgogICAgICAgIGFzc2VydChvYmplY3QgaXMgSW50ZXJuZXRBZGRyZXNzKTsKICAgICAgICBzdGF0cy5hZGRyZXNzID0gKG9iamVjdCBhcyBJbnRlcm5ldEFkZHJlc3MpLnRvU3RyaW5nKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgX1NvY2tldFByb2ZpbGVUeXBlLnBvcnQ6CiAgICAgICAgYXNzZXJ0KG9iamVjdCBpcyBpbnQpOwogICAgICAgIHN0YXRzLnBvcnQgPSBvYmplY3Q7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgX1NvY2tldFByb2ZpbGVUeXBlLnNvY2tldFR5cGU6CiAgICAgICAgYXNzZXJ0KG9iamVjdCBpcyBTdHJpbmcpOwogICAgICAgIHN0YXRzLnNvY2tldFR5cGUgPSBvYmplY3Q7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgX1NvY2tldFByb2ZpbGVUeXBlLnJlYWRCeXRlczoKICAgICAgICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVybjsKICAgICAgICBhc3NlcnQob2JqZWN0IGlzIGludCk7CiAgICAgICAgc3RhdHMucmVhZEJ5dGVzID8/PSAwOwogICAgICAgIHN0YXRzLnJlYWRCeXRlcyArPSBvYmplY3Q7CiAgICAgICAgc3RhdHMubGFzdFJlYWRUaW1lID0gVGltZWxpbmUubm93OwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIF9Tb2NrZXRQcm9maWxlVHlwZS53cml0ZUJ5dGVzOgogICAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgIGFzc2VydChvYmplY3QgaXMgaW50KTsKICAgICAgICBzdGF0cy53cml0ZUJ5dGVzID8/PSAwOwogICAgICAgIHN0YXRzLndyaXRlQnl0ZXMgKz0gb2JqZWN0OwogICAgICAgIHN0YXRzLmxhc3RXcml0ZVRpbWUgPSBUaW1lbGluZS5ub3c7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigndHlwZSAke3R5cGV9IGRvZXMgbm90IGV4aXN0Jyk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQoKICBzdGF0aWMgU3RyaW5nIHN0YXJ0KCkgewogICAgX2VuYWJsZVNvY2tldFByb2ZpbGluZyA9IHRydWU7CiAgICByZXR1cm4gX3N1Y2Nlc3MoKTsKICB9CgogIHN0YXRpYyBTdHJpbmcgcGF1c2UoKSB7CiAgICBfZW5hYmxlU29ja2V0UHJvZmlsaW5nID0gZmFsc2U7CiAgICByZXR1cm4gX3N1Y2Nlc3MoKTsKICB9CgogIC8vIGNsZWFyIHRoZSBzdG9yYWdlIGlmIF9pZFRvU29ja2V0U3RhdGlzdGljIGhhcyBiZWVuIGluaXRpYWxpemVkLgogIHN0YXRpYyBTdHJpbmcgY2xlYXIoKSB7CiAgICBfaWRUb1NvY2tldFN0YXRpc3RpYz8uY2xlYXIoKTsKICAgIHJldHVybiBfc3VjY2VzcygpOwogIH0KfQoKLy8vIFRoZSBbX1NvY2tldFByb2ZpbGVUeXBlXSBpcyB1c2VkIGFzIGEgcGFyYW1ldGVyIGZvcgovLy8gW19Tb2NrZXRQcm9maWxlLmNvbGxlY3RTdGF0aXN0aWNdIHRvIGRldGVybWluZSB0aGUgdHlwZSBvZiBzdGF0aXN0aWMuCmVudW0gX1NvY2tldFByb2ZpbGVUeXBlIHsKICBzdGFydFRpbWUsCiAgZW5kVGltZSwKICBhZGRyZXNzLAogIHBvcnQsCiAgc29ja2V0VHlwZSwKICByZWFkQnl0ZXMsCiAgd3JpdGVCeXRlcwp9CgovLy8gU29ja2V0IHN0YXRpc3RpYwpjbGFzcyBfU29ja2V0U3RhdGlzdGljIHsKICBmaW5hbCBpbnQgaWQ7CiAgaW50IHN0YXJ0VGltZTsKICBpbnQgZW5kVGltZTsKICBTdHJpbmcgYWRkcmVzczsKICBpbnQgcG9ydDsKICBTdHJpbmcgc29ja2V0VHlwZTsKICBpbnQgcmVhZEJ5dGVzID0gMDsKICBpbnQgd3JpdGVCeXRlcyA9IDA7CiAgaW50IGxhc3RXcml0ZVRpbWU7CiAgaW50IGxhc3RSZWFkVGltZTsKCiAgX1NvY2tldFN0YXRpc3RpYyh0aGlzLmlkKTsKCiAgTWFwPFN0cmluZywgZHluYW1pYz4gdG9NYXAoKSB7CiAgICBmaW5hbCBtYXAgPSA8U3RyaW5nLCBkeW5hbWljPnsKICAgICAgJ2lkJzogaWQsCiAgICB9OwogICAgX3NldElmTm90TnVsbChtYXAsICdzdGFydFRpbWUnLCBzdGFydFRpbWUudG9TdHJpbmcoKSk7CiAgICBfc2V0SWZOb3ROdWxsKG1hcCwgJ2VuZFRpbWUnLCBlbmRUaW1lLnRvU3RyaW5nKCkpOwogICAgX3NldElmTm90TnVsbChtYXAsICdhZGRyZXNzJywgYWRkcmVzcyk7CiAgICBfc2V0SWZOb3ROdWxsKG1hcCwgJ3BvcnQnLCBwb3J0KTsKICAgIF9zZXRJZk5vdE51bGwobWFwLCAnc29ja2V0VHlwZScsIHNvY2tldFR5cGUpOwogICAgX3NldElmTm90TnVsbChtYXAsICdyZWFkQnl0ZXMnLCByZWFkQnl0ZXMpOwogICAgX3NldElmTm90TnVsbChtYXAsICd3cml0ZUJ5dGVzJywgd3JpdGVCeXRlcyk7CiAgICBfc2V0SWZOb3ROdWxsKG1hcCwgJ2xhc3RXcml0ZVRpbWUnLCBsYXN0V3JpdGVUaW1lKTsKICAgIF9zZXRJZk5vdE51bGwobWFwLCAnbGFzdFJlYWRUaW1lJywgbGFzdFJlYWRUaW1lKTsKICAgIHJldHVybiBtYXA7CiAgfQoKICB2b2lkIF9zZXRJZk5vdE51bGwoTWFwPFN0cmluZywgT2JqZWN0PiBqc29uLCBTdHJpbmcga2V5LCBPYmplY3QgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47CiAgICBqc29uW2tleV0gPSB2YWx1ZTsKICB9Cn0KgPkATU48AQ8BEQEdHQEhIQFKIxgwMjAyGktHT08BTUsnOwEcLFFRSExMSkIEAUQ3ChsYLToRLUQRJDIRKDERKDERJjERHicRET43MQhKHTpCBgQBLhsgIAoCASMZCAE7PAFRATgqMwgBRyMqJQQ0Ly0EORUCASApLj8BKhhPCgEgPUdOS0gEAUAaIw4GSTE2NzcUKSgPJyYPJytADyQfHQ8qIiMPKSQfHyMrDyokHyAkLA8PPA8GBAEaIxcEARokFwQBRRojFwQCAThKGg0LCwgODQ0CARUZEBEPEgwVFRYVFAEdASEjEAc7NywmMjAyODYQBAFLHxcEAgEeZGFydDppby9uZXR3b3JrX3Byb2ZpbGluZy5kYXJ0Pm9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2lvL292ZXJyaWRlcy5kYXJ0wABAUS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmlvOwoKZmluYWwgX2lvT3ZlcnJpZGVzVG9rZW4gPSBuZXcgT2JqZWN0KCk7Cgpjb25zdCBfYXN5bmNSdW5ab25lZCA9IHJ1blpvbmVkOwoKLy8vIFRoaXMgY2xhc3MgZmFjaWxpdGF0ZXMgb3ZlcnJpZGluZyB2YXJpb3VzIEFQSXMgb2YgZGFydDppbyB3aXRoIG1vY2sKLy8vIGltcGxlbWVudGF0aW9ucy4KLy8vCi8vLyBUaGlzIGFic3RyYWN0IGJhc2UgY2xhc3Mgc2hvdWxkIGJlIGV4dGVuZGVkIHdpdGggb3ZlcnJpZGVzIGZvciB0aGUKLy8vIG9wZXJhdGlvbnMgbmVlZGVkIHRvIGNvbnN0cnVjdCBtb2Nrcy4gVGhlIGltcGxlbWVudGF0aW9ucyBpbiB0aGlzIGJhc2UgY2xhc3MKLy8vIGRlZmF1bHQgdG8gdGhlIGFjdHVhbCBkYXJ0OmlvIGltcGxlbWVudGF0aW9uLiBGb3IgZXhhbXBsZToKLy8vCi8vLyBgYGAKLy8vIGNsYXNzIE15RGlyZWN0b3J5IGltcGxlbWVudHMgRGlyZWN0b3J5IHsKLy8vICAgLi4uCi8vLyAgIC8vIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBEaXJlY3RvcnkgaW50ZXJmYWNlCi8vLyAgIC4uLgovLy8gfQovLy8KLy8vIG1haW4oKSB7Ci8vLyAgIElPT3ZlcnJpZGVzLnJ1blpvbmVkKCgpIHsKLy8vICAgICAuLi4KLy8vICAgICAvLyBPcGVyYXRpb25zIHdpbGwgdXNlIE15RGlyZWN0b3J5IGluc3RlYWQgb2YgZGFydDppbydzIERpcmVjdG9yeQovLy8gICAgIC8vIGltcGxlbWVudGF0aW9uIHdoZW5ldmVyIERpcmVjdG9yeSBpcyB1c2VkLgovLy8gICAgIC4uLgovLy8gICB9LCBjcmVhdGVEaXJlY3Rvcnk6IChTdHJpbmcgcGF0aCkgPT4gbmV3IE15RGlyZWN0b3J5KHBhdGgpKTsKLy8vIH0KLy8vIGBgYAphYnN0cmFjdCBjbGFzcyBJT092ZXJyaWRlcyB7CiAgc3RhdGljIElPT3ZlcnJpZGVzIF9nbG9iYWw7CgogIHN0YXRpYyBJT092ZXJyaWRlcyBnZXQgY3VycmVudCB7CiAgICByZXR1cm4gWm9uZS5jdXJyZW50W19pb092ZXJyaWRlc1Rva2VuXSA/PyBfZ2xvYmFsOwogIH0KCiAgLy8vIFRoZSBbSU9PdmVycmlkZXNdIHRvIHVzZSBpbiB0aGUgcm9vdCBbWm9uZV0uCiAgLy8vCiAgLy8vIFRoZXNlIGFyZSB0aGUgW0lPT3ZlcnJpZGVzXSB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgcm9vdCBab25lLCBhbmQgaW4KICAvLy8gWm9uZSdzIHRoYXQgZG8gbm90IHNldCBbSU9PdmVycmlkZXNdIGFuZCB3aG9zZSBhbmNlc3RvcnMgdXAgdG8gdGhlIHJvb3QKICAvLy8gWm9uZSBkbyBub3Qgc2V0IFtJT092ZXJyaWRlc10uCiAgc3RhdGljIHNldCBnbG9iYWwoSU9PdmVycmlkZXMgb3ZlcnJpZGVzKSB7CiAgICBfZ2xvYmFsID0gb3ZlcnJpZGVzOwogIH0KCiAgLy8vIFJ1bnMgW2JvZHldIGluIGEgZnJlc2ggW1pvbmVdIHVzaW5nIHRoZSBwcm92aWRlZCBvdmVycmlkZXMuCiAgLy8vCiAgLy8vIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgY29ycmVzcG9uZGluZyBtZXRob2RzIG9mIElPT3ZlcnJpZGVzIGZvcgogIC8vLyBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHRoZSBvcHRpb25hbCBhcmd1bWVudHMgZG8uCiAgc3RhdGljIFIgcnVuWm9uZWQ8Uj4oUiBib2R5KCksCiAgICAgIHsKICAgICAgLy8gRGlyZWN0b3J5CiAgICAgIERpcmVjdG9yeSBGdW5jdGlvbihTdHJpbmcpIGNyZWF0ZURpcmVjdG9yeSwKICAgICAgRGlyZWN0b3J5IEZ1bmN0aW9uKCkgZ2V0Q3VycmVudERpcmVjdG9yeSwKICAgICAgdm9pZCBGdW5jdGlvbihTdHJpbmcpIHNldEN1cnJlbnREaXJlY3RvcnksCiAgICAgIERpcmVjdG9yeSBGdW5jdGlvbigpIGdldFN5c3RlbVRlbXBEaXJlY3RvcnksCgogICAgICAvLyBGaWxlCiAgICAgIEZpbGUgRnVuY3Rpb24oU3RyaW5nKSBjcmVhdGVGaWxlLAoKICAgICAgLy8gRmlsZVN0YXQKICAgICAgRnV0dXJlPEZpbGVTdGF0PiBGdW5jdGlvbihTdHJpbmcpIHN0YXQsCiAgICAgIEZpbGVTdGF0IEZ1bmN0aW9uKFN0cmluZykgc3RhdFN5bmMsCgogICAgICAvLyBGaWxlU3lzdGVtRW50aXR5CiAgICAgIEZ1dHVyZTxib29sPiBGdW5jdGlvbihTdHJpbmcsIFN0cmluZykgZnNlSWRlbnRpY2FsLAogICAgICBib29sIEZ1bmN0aW9uKFN0cmluZywgU3RyaW5nKSBmc2VJZGVudGljYWxTeW5jLAogICAgICBGdXR1cmU8RmlsZVN5c3RlbUVudGl0eVR5cGU+IEZ1bmN0aW9uKFN0cmluZywgYm9vbCkgZnNlR2V0VHlwZSwKICAgICAgRmlsZVN5c3RlbUVudGl0eVR5cGUgRnVuY3Rpb24oU3RyaW5nLCBib29sKSBmc2VHZXRUeXBlU3luYywKCiAgICAgIC8vIF9GaWxlU3lzdGVtV2F0Y2hlcgogICAgICBTdHJlYW08RmlsZVN5c3RlbUV2ZW50PiBGdW5jdGlvbihTdHJpbmcsIGludCwgYm9vbCkgZnNXYXRjaCwKICAgICAgYm9vbCBGdW5jdGlvbigpIGZzV2F0Y2hJc1N1cHBvcnRlZCwKCiAgICAgIC8vIExpbmsKICAgICAgTGluayBGdW5jdGlvbihTdHJpbmcpIGNyZWF0ZUxpbmssCgogICAgICAvLyBTb2NrZXQKICAgICAgRnV0dXJlPFNvY2tldD4gRnVuY3Rpb24oZHluYW1pYywgaW50LAogICAgICAgICAgICAgIHtkeW5hbWljIHNvdXJjZUFkZHJlc3MsIER1cmF0aW9uIHRpbWVvdXR9KQogICAgICAgICAgc29ja2V0Q29ubmVjdCwKICAgICAgRnV0dXJlPENvbm5lY3Rpb25UYXNrPFNvY2tldD4+IEZ1bmN0aW9uKGR5bmFtaWMsIGludCwKICAgICAgICAgICAgICB7ZHluYW1pYyBzb3VyY2VBZGRyZXNzfSkKICAgICAgICAgIHNvY2tldFN0YXJ0Q29ubmVjdCwKCiAgICAgIC8vIFNlcnZlclNvY2tldAogICAgICBGdXR1cmU8U2VydmVyU29ja2V0PiBGdW5jdGlvbihkeW5hbWljLCBpbnQsCiAgICAgICAgICAgICAge2ludCBiYWNrbG9nLCBib29sIHY2T25seSwgYm9vbCBzaGFyZWR9KQogICAgICAgICAgc2VydmVyU29ja2V0QmluZCwKCiAgICAgIC8vIE9wdGlvbmFsIFpvbmUgcGFyYW1ldGVycwogICAgICBab25lU3BlY2lmaWNhdGlvbiB6b25lU3BlY2lmaWNhdGlvbiwKICAgICAgRnVuY3Rpb24gb25FcnJvcn0pIHsKICAgIElPT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IG5ldyBfSU9PdmVycmlkZXNTY29wZSgKICAgICAgLy8gRGlyZWN0b3J5CiAgICAgIGNyZWF0ZURpcmVjdG9yeSwKICAgICAgZ2V0Q3VycmVudERpcmVjdG9yeSwKICAgICAgc2V0Q3VycmVudERpcmVjdG9yeSwKICAgICAgZ2V0U3lzdGVtVGVtcERpcmVjdG9yeSwKCiAgICAgIC8vIEZpbGUKICAgICAgY3JlYXRlRmlsZSwKCiAgICAgIC8vIEZpbGVTdGF0CiAgICAgIHN0YXQsCiAgICAgIHN0YXRTeW5jLAoKICAgICAgLy8gRmlsZVN5c3RlbUVudGl0eQogICAgICBmc2VJZGVudGljYWwsCiAgICAgIGZzZUlkZW50aWNhbFN5bmMsCiAgICAgIGZzZUdldFR5cGUsCiAgICAgIGZzZUdldFR5cGVTeW5jLAoKICAgICAgLy8gX0ZpbGVTeXN0ZW1XYXRjaGVyCiAgICAgIGZzV2F0Y2gsCiAgICAgIGZzV2F0Y2hJc1N1cHBvcnRlZCwKCiAgICAgIC8vIExpbmsKICAgICAgY3JlYXRlTGluaywKCiAgICAgIC8vIFNvY2tldAogICAgICBzb2NrZXRDb25uZWN0LAogICAgICBzb2NrZXRTdGFydENvbm5lY3QsCgogICAgICAvLyBTZXJ2ZXJTb2NrZXQKICAgICAgc2VydmVyU29ja2V0QmluZCwKICAgICk7CiAgICByZXR1cm4gX2FzeW5jUnVuWm9uZWQ8Uj4oYm9keSwKICAgICAgICB6b25lVmFsdWVzOiB7X2lvT3ZlcnJpZGVzVG9rZW46IG92ZXJyaWRlc30sCiAgICAgICAgem9uZVNwZWNpZmljYXRpb246IHpvbmVTcGVjaWZpY2F0aW9uLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IpOwogIH0KCiAgLy8vIFJ1bnMgW2JvZHldIGluIGEgZnJlc2ggW1pvbmVdIHVzaW5nIHRoZSBvdmVycmlkZXMgZm91bmQgaW4gW292ZXJyaWRlc10uCiAgLy8vCiAgLy8vIE5vdGUgdGhhdCBbb3ZlcnJpZGVzXSBzaG91bGQgYmUgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGV4dGVuZHMKICAvLy8gW0lPT3ZlcnJpZGVzXS4KICBzdGF0aWMgUiBydW5XaXRoSU9PdmVycmlkZXM8Uj4oUiBib2R5KCksIElPT3ZlcnJpZGVzIG92ZXJyaWRlcywKICAgICAge1pvbmVTcGVjaWZpY2F0aW9uIHpvbmVTcGVjaWZpY2F0aW9uLCBGdW5jdGlvbiBvbkVycm9yfSkgewogICAgcmV0dXJuIF9hc3luY1J1blpvbmVkPFI+KGJvZHksCiAgICAgICAgem9uZVZhbHVlczoge19pb092ZXJyaWRlc1Rva2VuOiBvdmVycmlkZXN9LAogICAgICAgIHpvbmVTcGVjaWZpY2F0aW9uOiB6b25lU3BlY2lmaWNhdGlvbiwKICAgICAgICBvbkVycm9yOiBvbkVycm9yKTsKICB9CgogIC8vIERpcmVjdG9yeQoKICAvLy8gQ3JlYXRlcyBhIG5ldyBbRGlyZWN0b3J5XSBvYmplY3QgZm9yIHRoZSBnaXZlbiBbcGF0aF0uCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb24gb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyBgbmV3IERpcmVjdG9yeSgpYCBhbmQgYG5ldyBEaXJlY3RvcnkuZnJvbVVyaSgpYC4KICBEaXJlY3RvcnkgY3JlYXRlRGlyZWN0b3J5KFN0cmluZyBwYXRoKSA9PiBuZXcgX0RpcmVjdG9yeShwYXRoKTsKCiAgLy8vIFJldHVybnMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb24gb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyB0aGUgc3RhdGljIGdldHRlciBgRGlyZWN0b3J5LmN1cnJlbnRgCiAgRGlyZWN0b3J5IGdldEN1cnJlbnREaXJlY3RvcnkoKSA9PiBfRGlyZWN0b3J5LmN1cnJlbnQ7CgogIC8vLyBTZXRzIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHRvIGJlIFtwYXRoXS4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGJlaGF2aW9yIG9mCiAgLy8vIHRoZSBzZXR0ZXIgYERpcmVjdG9yeS5jdXJyZW50YC4KICB2b2lkIHNldEN1cnJlbnREaXJlY3RvcnkoU3RyaW5nIHBhdGgpIHsKICAgIF9EaXJlY3RvcnkuY3VycmVudCA9IHBhdGg7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgc3lzdGVtIHRlbXBvcmFyeSBkaXJlY3RvcnkuCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb24gb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyBgRGlyZWN0b3J5LnN5c3RlbVRlbXBgLgogIERpcmVjdG9yeSBnZXRTeXN0ZW1UZW1wRGlyZWN0b3J5KCkgPT4gX0RpcmVjdG9yeS5zeXN0ZW1UZW1wOwoKICAvLyBGaWxlCgogIC8vLyBDcmVhdGVzIGEgbmV3IFtGaWxlXSBvYmplY3QgZm9yIHRoZSBnaXZlbiBbcGF0aF0uCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb24gb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyBgbmV3IEZpbGUoKWAgYW5kIGBuZXcgRmlsZS5mcm9tVXJpKClgLgogIEZpbGUgY3JlYXRlRmlsZShTdHJpbmcgcGF0aCkgPT4gbmV3IF9GaWxlKHBhdGgpOwoKICAvLyBGaWxlU3RhdAoKICAvLy8gQXN5bmNocm9ub3VzbHkgcmV0dXJucyBbRmlsZVN0YXRdIGluZm9ybWF0aW9uIGZvciBbcGF0aF0uCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb24gb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyBgRmlsZVN0YXQuc3RhdCgpYC4KICBGdXR1cmU8RmlsZVN0YXQ+IHN0YXQoU3RyaW5nIHBhdGgpIHsKICAgIHJldHVybiBGaWxlU3RhdC5fc3RhdChwYXRoKTsKICB9CgogIC8vLyBSZXR1cm5zIFtGaWxlU3RhdF0gaW5mb3JtYXRpb24gZm9yIFtwYXRoXS4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGJlaGF2aW9yIG9mCiAgLy8vIGBGaWxlU3RhdC5zdGF0U3luYygpYC4KICBGaWxlU3RhdCBzdGF0U3luYyhTdHJpbmcgcGF0aCkgewogICAgcmV0dXJuIEZpbGVTdGF0Ll9zdGF0U3luY0ludGVybmFsKHBhdGgpOwogIH0KCiAgLy8gRmlsZVN5c3RlbUVudGl0eQoKICAvLy8gQXN5bmNocm9ub3VzbHkgcmV0dXJucyBgdHJ1ZWAgaWYgW3BhdGgxXSBhbmQgW3BhdGgyXSBhcmUgcGF0aHMgdG8gdGhlCiAgLy8vIHNhbWUgZmlsZSBzeXN0ZW0gb2JqZWN0LgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gYEZpbGVTeXN0ZW1FbnRpdHkuaWRlbnRpY2FsYC4KICBGdXR1cmU8Ym9vbD4gZnNlSWRlbnRpY2FsKFN0cmluZyBwYXRoMSwgU3RyaW5nIHBhdGgyKSB7CiAgICByZXR1cm4gRmlsZVN5c3RlbUVudGl0eS5faWRlbnRpY2FsKHBhdGgxLCBwYXRoMik7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3BhdGgxXSBhbmQgW3BhdGgyXSBhcmUgcGF0aHMgdG8gdGhlCiAgLy8vIHNhbWUgZmlsZSBzeXN0ZW0gb2JqZWN0LgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gYEZpbGVTeXN0ZW1FbnRpdHkuaWRlbnRpY2FsU3luY2AuCiAgYm9vbCBmc2VJZGVudGljYWxTeW5jKFN0cmluZyBwYXRoMSwgU3RyaW5nIHBhdGgyKSB7CiAgICByZXR1cm4gRmlsZVN5c3RlbUVudGl0eS5faWRlbnRpY2FsU3luYyhwYXRoMSwgcGF0aDIpOwogIH0KCiAgLy8vIEFzeW5jaHJvbm91c2x5IHJldHVybnMgdGhlIFtGaWxlU3lzdGVtRW50aXR5VHlwZV0gZm9yIFtwYXRoXS4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGJlaGF2aW9yIG9mCiAgLy8vIGBGaWxlU3lzdGVtRW50aXR5LnR5cGVgLgogIEZ1dHVyZTxGaWxlU3lzdGVtRW50aXR5VHlwZT4gZnNlR2V0VHlwZShTdHJpbmcgcGF0aCwgYm9vbCBmb2xsb3dMaW5rcykgewogICAgcmV0dXJuIEZpbGVTeXN0ZW1FbnRpdHkuX2dldFR5cGVSZXF1ZXN0KHV0ZjguZW5jb2RlKHBhdGgpLCBmb2xsb3dMaW5rcyk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgW0ZpbGVTeXN0ZW1FbnRpdHlUeXBlXSBmb3IgW3BhdGhdLgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gYEZpbGVTeXN0ZW1FbnRpdHkudHlwZVN5bmNgLgogIEZpbGVTeXN0ZW1FbnRpdHlUeXBlIGZzZUdldFR5cGVTeW5jKFN0cmluZyBwYXRoLCBib29sIGZvbGxvd0xpbmtzKSB7CiAgICByZXR1cm4gRmlsZVN5c3RlbUVudGl0eS5fZ2V0VHlwZVN5bmNIZWxwZXIodXRmOC5lbmNvZGUocGF0aCksIGZvbGxvd0xpbmtzKTsKICB9CgogIC8vIF9GaWxlU3lzdGVtV2F0Y2hlcgoKICAvLy8gUmV0dXJucyBhIFtTdHJlYW1dIG9mIFtGaWxlU3lzdGVtRXZlbnRdcy4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGJlaGF2aW9yIG9mCiAgLy8vIGBGaWxlU3lzdGVtRW50aXR5LndhdGNoKClgLgogIFN0cmVhbTxGaWxlU3lzdGVtRXZlbnQ+IGZzV2F0Y2goU3RyaW5nIHBhdGgsIGludCBldmVudHMsIGJvb2wgcmVjdXJzaXZlKSB7CiAgICByZXR1cm4gX0ZpbGVTeXN0ZW1XYXRjaGVyLl93YXRjaChwYXRoLCBldmVudHMsIHJlY3Vyc2l2ZSk7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgd2hlbiBbRmlsZVN5c3RlbUVudGl0eS53YXRjaF0gaXMgc3VwcG9ydGVkLgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gYEZpbGVTeXN0ZW1FbnRpdHkuaXNXYXRjaFN1cHBvcnRlZGAuCiAgYm9vbCBmc1dhdGNoSXNTdXBwb3J0ZWQoKSA9PiBfRmlsZVN5c3RlbVdhdGNoZXIuaXNTdXBwb3J0ZWQ7CgogIC8vIExpbmsKCiAgLy8vIFJldHVybnMgYSBuZXcgW0xpbmtdIG9iamVjdCBmb3IgdGhlIGdpdmVuIFtwYXRoXS4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGJlaGF2aW9yIG9mCiAgLy8vIGBuZXcgTGluaygpYCBhbmQgYG5ldyBMaW5rLmZyb21VcmkoKWAuCiAgTGluayBjcmVhdGVMaW5rKFN0cmluZyBwYXRoKSA9PiBuZXcgX0xpbmsocGF0aCk7CgogIC8vIFNvY2tldAoKICAvLy8gQXN5bmNocm9ub3VzbHkgcmV0dXJucyBhIFtTb2NrZXRdIGNvbm5lY3RlZCB0byB0aGUgZ2l2ZW4gaG9zdCBhbmQgcG9ydC4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbnMgb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyBgU29ja2V0LmNvbm5lY3QoLi4uKWAuCiAgRnV0dXJlPFNvY2tldD4gc29ja2V0Q29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge3NvdXJjZUFkZHJlc3MsIER1cmF0aW9uIHRpbWVvdXR9KSB7CiAgICByZXR1cm4gU29ja2V0Ll9jb25uZWN0KGhvc3QsIHBvcnQsCiAgICAgICAgc291cmNlQWRkcmVzczogc291cmNlQWRkcmVzcywgdGltZW91dDogdGltZW91dCk7CiAgfQoKICAvLy8gQXN5bmNocm9ub3VzbHkgcmV0dXJucyBhIFtDb25uZWN0aW9uVGFza10gdGhhdCBjb25uZWN0cyB0byB0aGUgZ2l2ZW4gaG9zdAogIC8vLyBhbmQgcG9ydCB3aGVuIHN1Y2Nlc3NmdWwuCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb25zIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gYFNvY2tldC5zdGFydENvbm5lY3QoLi4uKWAuCiAgRnV0dXJlPENvbm5lY3Rpb25UYXNrPFNvY2tldD4+IHNvY2tldFN0YXJ0Q29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge3NvdXJjZUFkZHJlc3N9KSB7CiAgICByZXR1cm4gU29ja2V0Ll9zdGFydENvbm5lY3QoaG9zdCwgcG9ydCwgc291cmNlQWRkcmVzczogc291cmNlQWRkcmVzcyk7CiAgfQoKICAvLyBTZXJ2ZXJTb2NrZXQKCiAgLy8vIEFzeW5jaHJvbm91c2x5IHJldHVybnMgYSBbU2VydmVyU29ja2V0XSB0aGF0IGNvbm5lY3RzIHRvIHRoZSBnaXZlbiBhZGRyZXNzCiAgLy8vIGFuZCBwb3J0IHdoZW4gc3VjY2Vzc2Z1bC4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbnMgb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyBgU2VydmVyU29ja2V0LmJpbmQoLi4uKWAuCiAgRnV0dXJlPFNlcnZlclNvY2tldD4gc2VydmVyU29ja2V0QmluZChhZGRyZXNzLCBpbnQgcG9ydCwKICAgICAge2ludCBiYWNrbG9nOiAwLCBib29sIHY2T25seTogZmFsc2UsIGJvb2wgc2hhcmVkOiBmYWxzZX0pIHsKICAgIHJldHVybiBTZXJ2ZXJTb2NrZXQuX2JpbmQoYWRkcmVzcywgcG9ydCwKICAgICAgICBiYWNrbG9nOiBiYWNrbG9nLCB2Nk9ubHk6IHY2T25seSwgc2hhcmVkOiBzaGFyZWQpOwogIH0KfQoKY2xhc3MgX0lPT3ZlcnJpZGVzU2NvcGUgZXh0ZW5kcyBJT092ZXJyaWRlcyB7CiAgZmluYWwgSU9PdmVycmlkZXMgX3ByZXZpb3VzID0gSU9PdmVycmlkZXMuY3VycmVudDsKCiAgLy8gRGlyZWN0b3J5CiAgRGlyZWN0b3J5IEZ1bmN0aW9uKFN0cmluZykgX2NyZWF0ZURpcmVjdG9yeTsKICBEaXJlY3RvcnkgRnVuY3Rpb24oKSBfZ2V0Q3VycmVudERpcmVjdG9yeTsKICB2b2lkIEZ1bmN0aW9uKFN0cmluZykgX3NldEN1cnJlbnREaXJlY3Rvcnk7CiAgRGlyZWN0b3J5IEZ1bmN0aW9uKCkgX2dldFN5c3RlbVRlbXBEaXJlY3Rvcnk7CgogIC8vIEZpbGUKICBGaWxlIEZ1bmN0aW9uKFN0cmluZykgX2NyZWF0ZUZpbGU7CgogIC8vIEZpbGVTdGF0CiAgRnV0dXJlPEZpbGVTdGF0PiBGdW5jdGlvbihTdHJpbmcpIF9zdGF0OwogIEZpbGVTdGF0IEZ1bmN0aW9uKFN0cmluZykgX3N0YXRTeW5jOwoKICAvLyBGaWxlU3lzdGVtRW50aXR5CiAgRnV0dXJlPGJvb2w+IEZ1bmN0aW9uKFN0cmluZywgU3RyaW5nKSBfZnNlSWRlbnRpY2FsOwogIGJvb2wgRnVuY3Rpb24oU3RyaW5nLCBTdHJpbmcpIF9mc2VJZGVudGljYWxTeW5jOwogIEZ1dHVyZTxGaWxlU3lzdGVtRW50aXR5VHlwZT4gRnVuY3Rpb24oU3RyaW5nLCBib29sKSBfZnNlR2V0VHlwZTsKICBGaWxlU3lzdGVtRW50aXR5VHlwZSBGdW5jdGlvbihTdHJpbmcsIGJvb2wpIF9mc2VHZXRUeXBlU3luYzsKCiAgLy8gX0ZpbGVTeXN0ZW1XYXRjaGVyCiAgU3RyZWFtPEZpbGVTeXN0ZW1FdmVudD4gRnVuY3Rpb24oU3RyaW5nLCBpbnQsIGJvb2wpIF9mc1dhdGNoOwogIGJvb2wgRnVuY3Rpb24oKSBfZnNXYXRjaElzU3VwcG9ydGVkOwoKICAvLyBMaW5rCiAgTGluayBGdW5jdGlvbihTdHJpbmcpIF9jcmVhdGVMaW5rOwoKICAvLyBTb2NrZXQKICBGdXR1cmU8U29ja2V0PiBGdW5jdGlvbihkeW5hbWljLCBpbnQsCiAgICAgIHtkeW5hbWljIHNvdXJjZUFkZHJlc3MsIER1cmF0aW9uIHRpbWVvdXR9KSBfc29ja2V0Q29ubmVjdDsKICBGdXR1cmU8Q29ubmVjdGlvblRhc2s8U29ja2V0Pj4gRnVuY3Rpb24oZHluYW1pYywgaW50LCB7ZHluYW1pYyBzb3VyY2VBZGRyZXNzfSkKICAgICAgX3NvY2tldFN0YXJ0Q29ubmVjdDsKCiAgLy8gU2VydmVyU29ja2V0CiAgRnV0dXJlPFNlcnZlclNvY2tldD4gRnVuY3Rpb24oZHluYW1pYywgaW50LAogICAgICB7aW50IGJhY2tsb2csIGJvb2wgdjZPbmx5LCBib29sIHNoYXJlZH0pIF9zZXJ2ZXJTb2NrZXRCaW5kOwoKICBfSU9PdmVycmlkZXNTY29wZSgKICAgIC8vIERpcmVjdG9yeQogICAgdGhpcy5fY3JlYXRlRGlyZWN0b3J5LAogICAgdGhpcy5fZ2V0Q3VycmVudERpcmVjdG9yeSwKICAgIHRoaXMuX3NldEN1cnJlbnREaXJlY3RvcnksCiAgICB0aGlzLl9nZXRTeXN0ZW1UZW1wRGlyZWN0b3J5LAoKICAgIC8vIEZpbGUKICAgIHRoaXMuX2NyZWF0ZUZpbGUsCgogICAgLy8gRmlsZVN0YXQKICAgIHRoaXMuX3N0YXQsCiAgICB0aGlzLl9zdGF0U3luYywKCiAgICAvLyBGaWxlU3lzdGVtRW50aXR5CiAgICB0aGlzLl9mc2VJZGVudGljYWwsCiAgICB0aGlzLl9mc2VJZGVudGljYWxTeW5jLAogICAgdGhpcy5fZnNlR2V0VHlwZSwKICAgIHRoaXMuX2ZzZUdldFR5cGVTeW5jLAoKICAgIC8vIF9GaWxlU3lzdGVtV2F0Y2hlcgogICAgdGhpcy5fZnNXYXRjaCwKICAgIHRoaXMuX2ZzV2F0Y2hJc1N1cHBvcnRlZCwKCiAgICAvLyBMaW5rCiAgICB0aGlzLl9jcmVhdGVMaW5rLAoKICAgIC8vIFNvY2tldAogICAgdGhpcy5fc29ja2V0Q29ubmVjdCwKICAgIHRoaXMuX3NvY2tldFN0YXJ0Q29ubmVjdCwKCiAgICAvLyBTZXJ2ZXJTb2NrZXQKICAgIHRoaXMuX3NlcnZlclNvY2tldEJpbmQsCiAgKTsKCiAgLy8gRGlyZWN0b3J5CiAgQG92ZXJyaWRlCiAgRGlyZWN0b3J5IGNyZWF0ZURpcmVjdG9yeShTdHJpbmcgcGF0aCkgewogICAgaWYgKF9jcmVhdGVEaXJlY3RvcnkgIT0gbnVsbCkgcmV0dXJuIF9jcmVhdGVEaXJlY3RvcnkocGF0aCk7CiAgICBpZiAoX3ByZXZpb3VzICE9IG51bGwpIHJldHVybiBfcHJldmlvdXMuY3JlYXRlRGlyZWN0b3J5KHBhdGgpOwogICAgcmV0dXJuIHN1cGVyLmNyZWF0ZURpcmVjdG9yeShwYXRoKTsKICB9CgogIEBvdmVycmlkZQogIERpcmVjdG9yeSBnZXRDdXJyZW50RGlyZWN0b3J5KCkgewogICAgaWYgKF9nZXRDdXJyZW50RGlyZWN0b3J5ICE9IG51bGwpIHJldHVybiBfZ2V0Q3VycmVudERpcmVjdG9yeSgpOwogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSByZXR1cm4gX3ByZXZpb3VzLmdldEN1cnJlbnREaXJlY3RvcnkoKTsKICAgIHJldHVybiBzdXBlci5nZXRDdXJyZW50RGlyZWN0b3J5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHNldEN1cnJlbnREaXJlY3RvcnkoU3RyaW5nIHBhdGgpIHsKICAgIGlmIChfc2V0Q3VycmVudERpcmVjdG9yeSAhPSBudWxsKQogICAgICBfc2V0Q3VycmVudERpcmVjdG9yeShwYXRoKTsKICAgIGVsc2UgaWYgKF9wcmV2aW91cyAhPSBudWxsKQogICAgICBfcHJldmlvdXMuc2V0Q3VycmVudERpcmVjdG9yeShwYXRoKTsKICAgIGVsc2UKICAgICAgc3VwZXIuc2V0Q3VycmVudERpcmVjdG9yeShwYXRoKTsKICB9CgogIEBvdmVycmlkZQogIERpcmVjdG9yeSBnZXRTeXN0ZW1UZW1wRGlyZWN0b3J5KCkgewogICAgaWYgKF9nZXRTeXN0ZW1UZW1wRGlyZWN0b3J5ICE9IG51bGwpIHJldHVybiBfZ2V0U3lzdGVtVGVtcERpcmVjdG9yeSgpOwogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSByZXR1cm4gX3ByZXZpb3VzLmdldFN5c3RlbVRlbXBEaXJlY3RvcnkoKTsKICAgIHJldHVybiBzdXBlci5nZXRTeXN0ZW1UZW1wRGlyZWN0b3J5KCk7CiAgfQoKICAvLyBGaWxlCiAgQG92ZXJyaWRlCiAgRmlsZSBjcmVhdGVGaWxlKFN0cmluZyBwYXRoKSB7CiAgICBpZiAoX2NyZWF0ZUZpbGUgIT0gbnVsbCkgcmV0dXJuIF9jcmVhdGVGaWxlKHBhdGgpOwogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSByZXR1cm4gX3ByZXZpb3VzLmNyZWF0ZUZpbGUocGF0aCk7CiAgICByZXR1cm4gc3VwZXIuY3JlYXRlRmlsZShwYXRoKTsKICB9CgogIC8vIEZpbGVTdGF0CiAgQG92ZXJyaWRlCiAgRnV0dXJlPEZpbGVTdGF0PiBzdGF0KFN0cmluZyBwYXRoKSB7CiAgICBpZiAoX3N0YXQgIT0gbnVsbCkgcmV0dXJuIF9zdGF0KHBhdGgpOwogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSByZXR1cm4gX3ByZXZpb3VzLnN0YXQocGF0aCk7CiAgICByZXR1cm4gc3VwZXIuc3RhdChwYXRoKTsKICB9CgogIEBvdmVycmlkZQogIEZpbGVTdGF0IHN0YXRTeW5jKFN0cmluZyBwYXRoKSB7CiAgICBpZiAoX3N0YXQgIT0gbnVsbCkgcmV0dXJuIF9zdGF0U3luYyhwYXRoKTsKICAgIGlmIChfcHJldmlvdXMgIT0gbnVsbCkgcmV0dXJuIF9wcmV2aW91cy5zdGF0U3luYyhwYXRoKTsKICAgIHJldHVybiBzdXBlci5zdGF0U3luYyhwYXRoKTsKICB9CgogIC8vIEZpbGVTeXN0ZW1FbnRpdHkKICBAb3ZlcnJpZGUKICBGdXR1cmU8Ym9vbD4gZnNlSWRlbnRpY2FsKFN0cmluZyBwYXRoMSwgU3RyaW5nIHBhdGgyKSB7CiAgICBpZiAoX2ZzZUlkZW50aWNhbCAhPSBudWxsKSByZXR1cm4gX2ZzZUlkZW50aWNhbChwYXRoMSwgcGF0aDIpOwogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSByZXR1cm4gX3ByZXZpb3VzLmZzZUlkZW50aWNhbChwYXRoMSwgcGF0aDIpOwogICAgcmV0dXJuIHN1cGVyLmZzZUlkZW50aWNhbChwYXRoMSwgcGF0aDIpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBmc2VJZGVudGljYWxTeW5jKFN0cmluZyBwYXRoMSwgU3RyaW5nIHBhdGgyKSB7CiAgICBpZiAoX2ZzZUlkZW50aWNhbFN5bmMgIT0gbnVsbCkgcmV0dXJuIF9mc2VJZGVudGljYWxTeW5jKHBhdGgxLCBwYXRoMik7CiAgICBpZiAoX3ByZXZpb3VzICE9IG51bGwpIHJldHVybiBfcHJldmlvdXMuZnNlSWRlbnRpY2FsU3luYyhwYXRoMSwgcGF0aDIpOwogICAgcmV0dXJuIHN1cGVyLmZzZUlkZW50aWNhbFN5bmMocGF0aDEsIHBhdGgyKTsKICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxGaWxlU3lzdGVtRW50aXR5VHlwZT4gZnNlR2V0VHlwZShTdHJpbmcgcGF0aCwgYm9vbCBmb2xsb3dMaW5rcykgewogICAgaWYgKF9mc2VHZXRUeXBlICE9IG51bGwpIHJldHVybiBfZnNlR2V0VHlwZShwYXRoLCBmb2xsb3dMaW5rcyk7CiAgICBpZiAoX3ByZXZpb3VzICE9IG51bGwpIHJldHVybiBfcHJldmlvdXMuZnNlR2V0VHlwZShwYXRoLCBmb2xsb3dMaW5rcyk7CiAgICByZXR1cm4gc3VwZXIuZnNlR2V0VHlwZShwYXRoLCBmb2xsb3dMaW5rcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBGaWxlU3lzdGVtRW50aXR5VHlwZSBmc2VHZXRUeXBlU3luYyhTdHJpbmcgcGF0aCwgYm9vbCBmb2xsb3dMaW5rcykgewogICAgaWYgKF9mc2VHZXRUeXBlU3luYyAhPSBudWxsKSByZXR1cm4gX2ZzZUdldFR5cGVTeW5jKHBhdGgsIGZvbGxvd0xpbmtzKTsKICAgIGlmIChfcHJldmlvdXMgIT0gbnVsbCkgcmV0dXJuIF9wcmV2aW91cy5mc2VHZXRUeXBlU3luYyhwYXRoLCBmb2xsb3dMaW5rcyk7CiAgICByZXR1cm4gc3VwZXIuZnNlR2V0VHlwZVN5bmMocGF0aCwgZm9sbG93TGlua3MpOwogIH0KCiAgLy8gX0ZpbGVTeXN0ZW1XYXRjaGVyCiAgQG92ZXJyaWRlCiAgU3RyZWFtPEZpbGVTeXN0ZW1FdmVudD4gZnNXYXRjaChTdHJpbmcgcGF0aCwgaW50IGV2ZW50cywgYm9vbCByZWN1cnNpdmUpIHsKICAgIGlmIChfZnNXYXRjaCAhPSBudWxsKSByZXR1cm4gX2ZzV2F0Y2gocGF0aCwgZXZlbnRzLCByZWN1cnNpdmUpOwogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSByZXR1cm4gX3ByZXZpb3VzLmZzV2F0Y2gocGF0aCwgZXZlbnRzLCByZWN1cnNpdmUpOwogICAgcmV0dXJuIHN1cGVyLmZzV2F0Y2gocGF0aCwgZXZlbnRzLCByZWN1cnNpdmUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBmc1dhdGNoSXNTdXBwb3J0ZWQoKSB7CiAgICBpZiAoX2ZzV2F0Y2hJc1N1cHBvcnRlZCAhPSBudWxsKSByZXR1cm4gX2ZzV2F0Y2hJc1N1cHBvcnRlZCgpOwogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSByZXR1cm4gX3ByZXZpb3VzLmZzV2F0Y2hJc1N1cHBvcnRlZCgpOwogICAgcmV0dXJuIHN1cGVyLmZzV2F0Y2hJc1N1cHBvcnRlZCgpOwogIH0KCiAgLy8gTGluawogIEBvdmVycmlkZQogIExpbmsgY3JlYXRlTGluayhTdHJpbmcgcGF0aCkgewogICAgaWYgKF9jcmVhdGVMaW5rICE9IG51bGwpIHJldHVybiBfY3JlYXRlTGluayhwYXRoKTsKICAgIGlmIChfcHJldmlvdXMgIT0gbnVsbCkgcmV0dXJuIF9wcmV2aW91cy5jcmVhdGVMaW5rKHBhdGgpOwogICAgcmV0dXJuIHN1cGVyLmNyZWF0ZUxpbmsocGF0aCk7CiAgfQoKICAvLyBTb2NrZXQKICBAb3ZlcnJpZGUKICBGdXR1cmU8U29ja2V0PiBzb2NrZXRDb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7c291cmNlQWRkcmVzcywgRHVyYXRpb24gdGltZW91dH0pIHsKICAgIGlmIChfc29ja2V0Q29ubmVjdCAhPSBudWxsKSB7CiAgICAgIHJldHVybiBfc29ja2V0Q29ubmVjdChob3N0LCBwb3J0LAogICAgICAgICAgc291cmNlQWRkcmVzczogc291cmNlQWRkcmVzcywgdGltZW91dDogdGltZW91dCk7CiAgICB9CiAgICBpZiAoX3ByZXZpb3VzICE9IG51bGwpIHsKICAgICAgcmV0dXJuIF9wcmV2aW91cy5zb2NrZXRDb25uZWN0KGhvc3QsIHBvcnQsCiAgICAgICAgICBzb3VyY2VBZGRyZXNzOiBzb3VyY2VBZGRyZXNzLCB0aW1lb3V0OiB0aW1lb3V0KTsKICAgIH0KICAgIHJldHVybiBzdXBlci5zb2NrZXRDb25uZWN0KGhvc3QsIHBvcnQsCiAgICAgICAgc291cmNlQWRkcmVzczogc291cmNlQWRkcmVzcywgdGltZW91dDogdGltZW91dCk7CiAgfQoKICBAb3ZlcnJpZGUKICBGdXR1cmU8Q29ubmVjdGlvblRhc2s8U29ja2V0Pj4gc29ja2V0U3RhcnRDb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7c291cmNlQWRkcmVzc30pIHsKICAgIGlmIChfc29ja2V0U3RhcnRDb25uZWN0ICE9IG51bGwpIHsKICAgICAgcmV0dXJuIF9zb2NrZXRTdGFydENvbm5lY3QoaG9zdCwgcG9ydCwgc291cmNlQWRkcmVzczogc291cmNlQWRkcmVzcyk7CiAgICB9CiAgICBpZiAoX3ByZXZpb3VzICE9IG51bGwpIHsKICAgICAgcmV0dXJuIF9wcmV2aW91cy5zb2NrZXRTdGFydENvbm5lY3QoaG9zdCwgcG9ydCwKICAgICAgICAgIHNvdXJjZUFkZHJlc3M6IHNvdXJjZUFkZHJlc3MpOwogICAgfQogICAgcmV0dXJuIHN1cGVyLnNvY2tldFN0YXJ0Q29ubmVjdChob3N0LCBwb3J0LCBzb3VyY2VBZGRyZXNzOiBzb3VyY2VBZGRyZXNzKTsKICB9CgogIC8vIFNlcnZlclNvY2tldAogIEBvdmVycmlkZQogIEZ1dHVyZTxTZXJ2ZXJTb2NrZXQ+IHNlcnZlclNvY2tldEJpbmQoYWRkcmVzcywgaW50IHBvcnQsCiAgICAgIHtpbnQgYmFja2xvZzogMCwgYm9vbCB2Nk9ubHk6IGZhbHNlLCBib29sIHNoYXJlZDogZmFsc2V9KSB7CiAgICBpZiAoX3NlcnZlclNvY2tldEJpbmQgIT0gbnVsbCkgewogICAgICByZXR1cm4gX3NlcnZlclNvY2tldEJpbmQoYWRkcmVzcywgcG9ydCwKICAgICAgICAgIGJhY2tsb2c6IGJhY2tsb2csIHY2T25seTogdjZPbmx5LCBzaGFyZWQ6IHNoYXJlZCk7CiAgICB9CiAgICBpZiAoX3ByZXZpb3VzICE9IG51bGwpIHsKICAgICAgcmV0dXJuIF9wcmV2aW91cy5zZXJ2ZXJTb2NrZXRCaW5kKGFkZHJlc3MsIHBvcnQsCiAgICAgICAgICBiYWNrbG9nOiBiYWNrbG9nLCB2Nk9ubHk6IHY2T25seSwgc2hhcmVkOiBzaGFyZWQpOwogICAgfQogICAgcmV0dXJuIHN1cGVyLnNlcnZlclNvY2tldEJpbmQoYWRkcmVzcywgcG9ydCwKICAgICAgICBiYWNrbG9nOiBiYWNrbG9nLCB2Nk9ubHk6IHY2T25seSwgc2hhcmVkOiBzaGFyZWQpOwogIH0KfQqCEQBOTjwBDwERASgBIQFIFQRHUT8ECC0KNgoGBA0gDEo2DEMGCB0eASM3BAEzBk1OJS0ZBAFCBkw4IQgTMjAxMwEOKAESLioBGjo2RkIBHEMqAQ4oARAsORk8Jx4BFjI3HAEiKxszExcbGx4BDhIBEgwQARoUGBIWARwPGgEOEgEQFRoBFhgHIzQuGwQBTgZKFUJBIzQuGwQBDwE9Bk83QgEtBk8sOQE3Bk8mKh8EAS4GTx4/AQoBOAZPLTMBDgFABk8ZJyEEATEGTx0jLQQBFgFMHwZPJDo2BAE9HwZPKDY6BAFEBk8fS00EATUGTyNHUAQBGAEwBk8iTT8EAUEGTys/AQoBOAZPLTMBDAFOBlAdLysnOQQBUCAGUCJEGUsEARIBUSAGUCA7Qi07BAIBLjUBDy8tLjABCiUBDisnARY3M0M/ARhAJwEKJQEMKEFRGwESLkIBFREbHx8iAQwWARAQFAEYGBwWGgEaEx4BDBYBDhkeARQcBQEPDCtBQygEAQwkRUMoBAEMKiYiICsJJwQBDCdLRisEAQoMITc+IwQBDgwnKzgdBAEMIy88IQQBFgw6Q0gtBAEMNktMMQQBDEtESzAEAQxHTE80BAEYDE1ETjMEAQweQ0InBAEKDCE3PiMEAQwMLysiKDsGHTE7Bis5BAEMRBknTAYdNikGTwQBEgw7QiUuPQYdNz0GMTsEAgEWZGFydDppby9vdmVycmlkZXMuZGFydD1vcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9pby9wbGF0Zm9ybS5kYXJ0nfwvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5pbzsKCi8qKgogKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIGN1cnJlbnQgcHJvZ3JhbSBpcyBydW5uaW5nLgogKgogKiBQbGF0Zm9ybSBwcm92aWRlcyBpbmZvcm1hdGlvbiBzdWNoIGFzIHRoZSBvcGVyYXRpbmcgc3lzdGVtLAogKiB0aGUgaG9zdG5hbWUgb2YgdGhlIGNvbXB1dGVyLCB0aGUgdmFsdWUgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzLAogKiB0aGUgcGF0aCB0byB0aGUgcnVubmluZyBwcm9ncmFtLAogKiBhbmQgc28gb24uCiAqCiAqICMjIEdldCB0aGUgVVJJIHRvIHRoZSBjdXJyZW50IERhcnQgc2NyaXB0CiAqCiAqIFVzZSB0aGUgW3NjcmlwdF0gZ2V0dGVyIHRvIGdldCB0aGUgVVJJIHRvIHRoZSBjdXJyZW50bHkgcnVubmluZwogKiBEYXJ0IHNjcmlwdC4KICoKICogICAgIGltcG9ydCAnZGFydDppbycgc2hvdyBQbGF0Zm9ybTsKICoKICogICAgIHZvaWQgbWFpbigpIHsKICogICAgICAgLy8gR2V0IHRoZSBVUkkgb2YgdGhlIHNjcmlwdCBiZWluZyBydW4uCiAqICAgICAgIHZhciB1cmkgPSBQbGF0Zm9ybS5zY3JpcHQ7CiAqICAgICAgIC8vIENvbnZlcnQgdGhlIFVSSSB0byBhIHBhdGguCiAqICAgICAgIHZhciBwYXRoID0gdXJpLnRvRmlsZVBhdGgoKTsKICogICAgIH0KICoKICogIyMgR2V0IHRoZSB2YWx1ZSBvZiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZQogKgogKiBUaGUgW2Vudmlyb25tZW50XSBnZXR0ZXIgcmV0dXJucyBhIHRoZSBuYW1lcyBhbmQgdmFsdWVzIG9mIGVudmlyb25tZW50CiAqIHZhcmlhYmxlcyBpbiBhIFtNYXBdIHRoYXQgY29udGFpbnMga2V5LXZhbHVlIHBhaXJzIG9mIHN0cmluZ3MuIFRoZSBNYXAgaXMKICogdW5tb2RpZmlhYmxlLiBUaGlzIHNhbXBsZSBzaG93cyBob3cgdG8gZ2V0IHRoZSB2YWx1ZSBvZiB0aGUgYFBBVEhgCiAqIGVudmlyb25tZW50IHZhcmlhYmxlLgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJyBzaG93IFBsYXRmb3JtOwogKgogKiAgICAgdm9pZCBtYWluKCkgewogKiAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudlZhcnMgPSBQbGF0Zm9ybS5lbnZpcm9ubWVudDsKICogICAgICAgcHJpbnQoZW52VmFyc1snUEFUSCddKTsKICogICAgIH0KICoKICogIyMgRGV0ZXJtaW5lIHRoZSBPUwogKgogKiBZb3UgY2FuIGdldCB0aGUgbmFtZSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhcyBhIHN0cmluZyB3aXRoIHRoZQogKiBbb3BlcmF0aW5nU3lzdGVtXSBnZXR0ZXIuIFlvdSBjYW4gYWxzbyB1c2Ugb25lIG9mIHRoZSBzdGF0aWMgYm9vbGVhbgogKiBnZXR0ZXJzOiBbaXNNYWNPU10sIFtpc0xpbnV4XSwgYW5kIFtpc1dpbmRvd3NdLgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJyBzaG93IFBsYXRmb3JtLCBzdGRvdXQ7CiAqCiAqICAgICB2b2lkIG1haW4oKSB7CiAqICAgICAgIC8vIEdldCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhcyBhIHN0cmluZy4KICogICAgICAgU3RyaW5nIG9zID0gUGxhdGZvcm0ub3BlcmF0aW5nU3lzdGVtOwogKiAgICAgICAvLyBPciwgdXNlIGEgcHJlZGljYXRlIGdldHRlci4KICogICAgICAgaWYgKFBsYXRmb3JtLmlzTWFjT1MpIHsKICogICAgICAgICBwcmludCgnaXMgYSBNYWMnKTsKICogICAgICAgfSBlbHNlIHsKICogICAgICAgICBwcmludCgnaXMgbm90IGEgTWFjJyk7CiAqICAgICAgIH0KICogICAgIH0KICoKICogIyMgT3RoZXIgcmVzb3VyY2VzCiAqCiAqIFtEYXJ0IGJ5IEV4YW1wbGVdKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kYXJ0LWJ5LWV4YW1wbGUvI2RhcnQtaW8tYW5kLWNvbW1hbmQtbGluZS1hcHBzKQogKiBwcm92aWRlcyBhZGRpdGlvbmFsIHRhc2stb3JpZW50ZWQgY29kZSBzYW1wbGVzIHRoYXQgc2hvdyBob3cgdG8gdXNlCiAqIHZhcmlvdXMgQVBJIGZyb20gdGhlIFtkYXJ0OmlvXSBsaWJyYXJ5LgogKi8KY2xhc3MgUGxhdGZvcm0gewogIHN0YXRpYyBmaW5hbCBfbnVtYmVyT2ZQcm9jZXNzb3JzID0gX1BsYXRmb3JtLm51bWJlck9mUHJvY2Vzc29yczsKICBzdGF0aWMgZmluYWwgX3BhdGhTZXBhcmF0b3IgPSBfUGxhdGZvcm0ucGF0aFNlcGFyYXRvcjsKICBzdGF0aWMgZmluYWwgX29wZXJhdGluZ1N5c3RlbSA9IF9QbGF0Zm9ybS5vcGVyYXRpbmdTeXN0ZW07CiAgc3RhdGljIGZpbmFsIF9vcGVyYXRpbmdTeXN0ZW1WZXJzaW9uID0gX1BsYXRmb3JtLm9wZXJhdGluZ1N5c3RlbVZlcnNpb247CiAgc3RhdGljIGZpbmFsIF9sb2NhbEhvc3RuYW1lID0gX1BsYXRmb3JtLmxvY2FsSG9zdG5hbWU7CiAgc3RhdGljIGZpbmFsIF92ZXJzaW9uID0gX1BsYXRmb3JtLnZlcnNpb247CgogIC8qKgogICAqIFRoZSBudW1iZXIgb2YgaW5kaXZpZHVhbCBleGVjdXRpb24gdW5pdHMgb2YgdGhlIG1hY2hpbmUuCiAgICovCiAgc3RhdGljIGludCBnZXQgbnVtYmVyT2ZQcm9jZXNzb3JzID0+IF9udW1iZXJPZlByb2Nlc3NvcnM7CgogIC8qKgogICAqIFRoZSBwYXRoIHNlcGFyYXRvciB1c2VkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHRvIHNlcGFyYXRlCiAgICogY29tcG9uZW50cyBpbiBmaWxlIHBhdGhzLgogICAqLwogIHN0YXRpYyBTdHJpbmcgZ2V0IHBhdGhTZXBhcmF0b3IgPT4gX3BhdGhTZXBhcmF0b3I7CgogIC8qKgogICAqIEdldCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBsb2NhbGUuCiAgICovCiAgc3RhdGljIFN0cmluZyBnZXQgbG9jYWxlTmFtZSA9PiBfUGxhdGZvcm0ubG9jYWxlTmFtZSgpOwoKICAvKioKICAgKiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb3IgcGxhdGZvcm0uCiAgICovCiAgc3RhdGljIFN0cmluZyBnZXQgb3BlcmF0aW5nU3lzdGVtID0+IF9vcGVyYXRpbmdTeXN0ZW07CgogIC8qKgogICAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmVyc2lvbiBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvciBwbGF0Zm9ybS4KICAgKi8KICBzdGF0aWMgU3RyaW5nIGdldCBvcGVyYXRpbmdTeXN0ZW1WZXJzaW9uID0+IF9vcGVyYXRpbmdTeXN0ZW1WZXJzaW9uOwoKICAvKioKICAgKiBUaGUgbG9jYWwgaG9zdG5hbWUgZm9yIHRoZSBzeXN0ZW0uCiAgICovCiAgc3RhdGljIFN0cmluZyBnZXQgbG9jYWxIb3N0bmFtZSA9PiBfbG9jYWxIb3N0bmFtZTsKCiAgLyoqCiAgICogV2hldGhlciB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpcyBhIHZlcnNpb24gb2YKICAgKiBbTGludXhdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xpbnV4KS4KICAgKgogICAqIFRoaXMgdmFsdWUgaXMgYGZhbHNlYCBpZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpcyBhIHNwZWNpYWxpemVkCiAgICogdmVyc2lvbiBvZiBMaW51eCB0aGF0IGlkZW50aWZpZXMgaXRzZWxmIGJ5IGEgZGlmZmVyZW50IG5hbWUsCiAgICogZm9yIGV4YW1wbGUgQW5kcm9pZCAoc2VlIFtpc0FuZHJvaWRdKS4KICAgKi8KICBzdGF0aWMgZmluYWwgYm9vbCBpc0xpbnV4ID0gKF9vcGVyYXRpbmdTeXN0ZW0gPT0gImxpbnV4Iik7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIG9wZXJhdGluZyBzeXN0ZW0gaXMgYSB2ZXJzaW9uIG9mCiAgICogW21hY09TXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYWNPUykuCiAgICovCiAgc3RhdGljIGZpbmFsIGJvb2wgaXNNYWNPUyA9IChfb3BlcmF0aW5nU3lzdGVtID09ICJtYWNvcyIpOwoKICAvKioKICAgKiBXaGV0aGVyIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGlzIGEgdmVyc2lvbiBvZgogICAqIFtNaWNyb3NvZnQgV2luZG93c10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWljcm9zb2Z0X1dpbmRvd3MpLgogICAqLwogIHN0YXRpYyBmaW5hbCBib29sIGlzV2luZG93cyA9IChfb3BlcmF0aW5nU3lzdGVtID09ICJ3aW5kb3dzIik7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIG9wZXJhdGluZyBzeXN0ZW0gaXMgYSB2ZXJzaW9uIG9mCiAgICogW0FuZHJvaWRdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FuZHJvaWRfJTI4b3BlcmF0aW5nX3N5c3RlbSUyOSkuCiAgICovCiAgc3RhdGljIGZpbmFsIGJvb2wgaXNBbmRyb2lkID0gKF9vcGVyYXRpbmdTeXN0ZW0gPT0gImFuZHJvaWQiKTsKCiAgLyoqCiAgICogV2hldGhlciB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpcyBhIHZlcnNpb24gb2YKICAgKiBbaU9TXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JT1MpLgogICAqLwogIHN0YXRpYyBmaW5hbCBib29sIGlzSU9TID0gKF9vcGVyYXRpbmdTeXN0ZW0gPT0gImlvcyIpOwoKICAvKioKICAgKiBXaGV0aGVyIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGlzIGEgdmVyc2lvbiBvZgogICAqIFtGdWNoc2lhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Hb29nbGVfRnVjaHNpYSkuCiAgICovCiAgc3RhdGljIGZpbmFsIGJvb2wgaXNGdWNoc2lhID0gKF9vcGVyYXRpbmdTeXN0ZW0gPT0gImZ1Y2hzaWEiKTsKCiAgLyoqCiAgICogVGhlIGVudmlyb25tZW50IGZvciB0aGlzIHByb2Nlc3MgYXMgYSBtYXAgZnJvbSBzdHJpbmcga2V5IHRvIHN0cmluZyB2YWx1ZS4KICAgKgogICAqIFRoZSBtYXAgaXMgdW5tb2RpZmlhYmxlLAogICAqIGFuZCBpdHMgY29udGVudCBpcyByZXRyaWV2ZWQgZnJvbSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiBpdHMgZmlyc3QgdXNlLgogICAqCiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIG9uIFdpbmRvd3MgYXJlIGNhc2UtaW5zZW5zaXRpdmUsCiAgICogc28gb24gV2luZG93cyB0aGUgbWFwIGlzIGNhc2UtaW5zZW5zaXRpdmUgYW5kIHdpbGwgY29udmVydAogICAqIGFsbCBrZXlzIHRvIHVwcGVyIGNhc2UuCiAgICogT24gb3RoZXIgcGxhdGZvcm1zLCBrZXlzIGNhbiBiZSBkaXN0aW5ndWlzaGVkIGJ5IGNhc2UuCiAgICovCiAgc3RhdGljIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0IGVudmlyb25tZW50ID0+IF9QbGF0Zm9ybS5lbnZpcm9ubWVudDsKCiAgLyoqCiAgICogVGhlIHBhdGggb2YgdGhlIGV4ZWN1dGFibGUgdXNlZCB0byBydW4gdGhlIHNjcmlwdCBpbiB0aGlzIGlzb2xhdGUuCiAgICoKICAgKiBUaGUgbGl0ZXJhbCBwYXRoIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHNjcmlwdC4KICAgKiBUaGlzIHBhdGggbWlnaHQgYmUgcmVsYXRpdmUgb3IganVzdCBiZSBhIG5hbWUgZnJvbSB3aGljaCB0aGUgZXhlY3V0YWJsZQogICAqIHdhcyBmb3VuZCBieSBzZWFyY2hpbmcgdGhlIHN5c3RlbSBwYXRoLgogICAqCiAgICogVXNlIFtyZXNvbHZlZEV4ZWN1dGFibGVdIHRvIGdldCBhbiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBleGVjdXRhYmxlLgogICAqLwogIHN0YXRpYyBTdHJpbmcgZ2V0IGV4ZWN1dGFibGUgPT4gX1BsYXRmb3JtLmV4ZWN1dGFibGU7CgogIC8qKgogICAqIFRoZSBwYXRoIG9mIHRoZSBleGVjdXRhYmxlIHVzZWQgdG8gcnVuIHRoZSBzY3JpcHQgaW4gdGhpcwogICAqIGlzb2xhdGUgYWZ0ZXIgaXQgaGFzIGJlZW4gcmVzb2x2ZWQgYnkgdGhlIE9TLgogICAqCiAgICogVGhpcyBpcyB0aGUgYWJzb2x1dGUgcGF0aCwgd2l0aCBhbGwgc3ltbGlua3MgcmVzb2x2ZWQsIHRvIHRoZQogICAqIGV4ZWN1dGFibGUgdXNlZCB0byBydW4gdGhlIHNjcmlwdC4KICAgKi8KICBzdGF0aWMgU3RyaW5nIGdldCByZXNvbHZlZEV4ZWN1dGFibGUgPT4gX1BsYXRmb3JtLnJlc29sdmVkRXhlY3V0YWJsZTsKCiAgLyoqCiAgICogVGhlIGFic29sdXRlIFVSSSBvZiB0aGUgc2NyaXB0IGJlaW5nIHJ1biBpbiB0aGlzIGlzb2xhdGUuCiAgICoKICAgKiBJZiB0aGUgc2NyaXB0IGFyZ3VtZW50IG9uIHRoZSBjb21tYW5kIGxpbmUgaXMgcmVsYXRpdmUsCiAgICogaXQgaXMgcmVzb2x2ZWQgdG8gYW4gYWJzb2x1dGUgVVJJIGJlZm9yZSBmZXRjaGluZyB0aGUgc2NyaXB0LCBhbmQKICAgKiB0aGF0IGFic29sdXRlIFVSSSBpcyByZXR1cm5lZC4KICAgKgogICAqIFVSSSByZXNvbHV0aW9uIG9ubHkgZG9lcyBzdHJpbmcgbWFuaXB1bGF0aW9uIG9uIHRoZSBzY3JpcHQgcGF0aCwgYW5kIHRoaXMKICAgKiBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlIGZpbGUgc3lzdGVtJ3MgcGF0aCByZXNvbHV0aW9uIGJlaGF2aW9yLiBGb3IKICAgKiBleGFtcGxlLCBhIHN5bWJvbGljIGxpbmsgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgJy4uJyB3aWxsIG5vdCBiZQogICAqIGxvb2tlZCB1cC4KICAgKgogICAqIElmIHRoZSBleGVjdXRhYmxlIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgW3NjcmlwdF0sCiAgICogdGhlIFVSSSBpcyBlbXB0eS4KICAgKi8KICBzdGF0aWMgVXJpIGdldCBzY3JpcHQgPT4gX1BsYXRmb3JtLnNjcmlwdDsKCiAgLyoqCiAgICogVGhlIGZsYWdzIHBhc3NlZCB0byB0aGUgZXhlY3V0YWJsZSB1c2VkIHRvIHJ1biB0aGUgc2NyaXB0IGluIHRoaXMgaXNvbGF0ZS4KICAgKgogICAqIFRoZXNlIGFyZSB0aGUgY29tbWFuZC1saW5lIGZsYWdzIHRvIHRoZSBleGVjdXRhYmxlIHRoYXQgcHJlY2VkZXMKICAgKiB0aGUgc2NyaXB0IG5hbWUuCiAgICogUHJvdmlkZXMgYSBuZXcgbGlzdCBldmVyeSB0aW1lIHRoZSB2YWx1ZSBpcyByZWFkLgogICAqLwogIHN0YXRpYyBMaXN0PFN0cmluZz4gZ2V0IGV4ZWN1dGFibGVBcmd1bWVudHMgPT4gX1BsYXRmb3JtLmV4ZWN1dGFibGVBcmd1bWVudHM7CgogIC8qKgogICAqIFRoaXMgcmV0dXJucyBgbnVsbGAsIGFzIGBwYWNrYWdlcy9gIGRpcmVjdG9yaWVzIGFyZSBubyBsb25nZXIgc3VwcG9ydGVkLgogICAqCiAgICovCiAgQERlcHJlY2F0ZWQoJ3BhY2thZ2VzLyBkaXJlY3RvcnkgcmVzb2x1dGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIERhcnQgMicpCiAgc3RhdGljIFN0cmluZyBnZXQgcGFja2FnZVJvb3QgPT4gbnVsbDsgLy8gVE9ETyhtZmFpcmh1cnN0KTogcmVtb3ZlIHRoaXMKCiAgLyoqCiAgICogVGhlIGAtLXBhY2thZ2VzYCBmbGFnIHBhc3NlZCB0byB0aGUgZXhlY3V0YWJsZSB1c2VkIHRvIHJ1biB0aGUgc2NyaXB0CiAgICogaW4gdGhpcyBpc29sYXRlLgogICAqCiAgICogSWYgcHJlc2VudCwgaXQgc3BlY2lmaWVzIGEgZmlsZSBkZXNjcmliaW5nIGhvdyBEYXJ0IHBhY2thZ2VzIGFyZSBsb29rZWQgdXAuCiAgICoKICAgKiBJcyBgbnVsbGAgaWYgdGhlcmUgaXMgbm8gYC0tcGFja2FnZXNgIGZsYWcuCiAgICovCiAgc3RhdGljIFN0cmluZyBnZXQgcGFja2FnZUNvbmZpZyA9PiBfUGxhdGZvcm0ucGFja2FnZUNvbmZpZzsKCiAgLyoqCiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGN1cnJlbnQgRGFydCBydW50aW1lLgogICAqCiAgICogVGhlIHZhbHVlIGlzIGEgW3NlbWFudGljIHZlcnNpb25pbmddKGh0dHA6Ly9zZW12ZXIub3JnKQogICAqIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZlcnNpb24gb2YgdGhlIGN1cnJlbnQgRGFydCBydW50aW1lLAogICAqIHBvc3NpYmx5IGZvbGxvd2VkIGJ5IHdoaXRlc3BhY2UgYW5kIG90aGVyIHZlcnNpb24gYW5kCiAgICogYnVpbGQgZGV0YWlscy4KICAgKi8KICBzdGF0aWMgU3RyaW5nIGdldCB2ZXJzaW9uID0+IF92ZXJzaW9uOwp9CoDsAE5OPAEPAREBBE4DP0UkDgMtA0MQAycDFTEkJyYJAy8DSk1GGQMnAxU9IQkDFwNFSDMDLwMVMi8oIR4SIgsJAxYDXkcrBBFDOT1LOS0BBj4GPAEGQR8GNQEGKQY6AQY9BjkBBkwGRwEGKAY1AQYyMwVEQiwGPQEGMjMGPQEGMksGQQEGMk4GQQEGMi8GOQEGMj4GQQEGUAUeTgU8QB08BkcBBkgFM00tBUkGOAEGPzMFQygGSAEGPwU9RyQFT0tHEAU+FwYtAQZQBUYWNwZQAQZOBQZLSgEGSxYFUQUxBj4BBi4FPUI7FAYpAgEVZGFydDppby9wbGF0Zm9ybS5kYXJ0Qm9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2lvL3BsYXRmb3JtX2ltcGwuZGFydJadLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuaW87CgpjbGFzcyBfUGxhdGZvcm0gewogIGV4dGVybmFsIHN0YXRpYyBpbnQgX251bWJlck9mUHJvY2Vzc29ycygpOwogIGV4dGVybmFsIHN0YXRpYyBTdHJpbmcgX3BhdGhTZXBhcmF0b3IoKTsKICBleHRlcm5hbCBzdGF0aWMgU3RyaW5nIF9vcGVyYXRpbmdTeXN0ZW0oKTsKICBleHRlcm5hbCBzdGF0aWMgX29wZXJhdGluZ1N5c3RlbVZlcnNpb24oKTsKICBleHRlcm5hbCBzdGF0aWMgX2xvY2FsSG9zdG5hbWUoKTsKICBleHRlcm5hbCBzdGF0aWMgX2V4ZWN1dGFibGUoKTsKICBleHRlcm5hbCBzdGF0aWMgX3Jlc29sdmVkRXhlY3V0YWJsZSgpOwoKICAvKioKICAgKiBSZXRyaWV2ZSB0aGUgZW50cmllcyBvZiB0aGUgcHJvY2VzcyBlbnZpcm9ubWVudC4KICAgKgogICAqIFRoZSByZXN1bHQgaXMgYW4gW0l0ZXJhYmxlXSBvZiBzdHJpbmdzLCB3aGVyZSBlYWNoIHN0cmluZyByZXByZXNlbnRzCiAgICogYW4gZW52aXJvbm1lbnQgZW50cnkuCiAgICoKICAgKiBFbnZpcm9ubWVudCBlbnRyaWVzIHNob3VsZCBiZSBzdHJpbmdzIGNvbnRhaW5pbmcKICAgKiBhIG5vbi1lbXB0eSBuYW1lIGFuZCBhIHZhbHVlIHNlcGFyYXRlZCBieSBhICc9JyBjaGFyYWN0ZXIuCiAgICogVGhlIG5hbWUgZG9lcyBub3QgY29udGFpbiBhICc9JyBjaGFyYWN0ZXIsCiAgICogc28gdGhlIG5hbWUgaXMgZXZlcnl0aGluZyB1cCB0byB0aGUgZmlyc3QgJz0nIGNoYXJhY3Rlci4KICAgKiBWYWx1ZXMgYXJlIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0ICc9JyBjaGFyYWN0ZXIuCiAgICogQSB2YWx1ZSBtYXkgY29udGFpbiBmdXJ0aGVyICc9JyBjaGFyYWN0ZXJzLCBhbmQgaXQgbWF5IGJlIGVtcHR5LgogICAqCiAgICogUmV0dXJucyBhbiBbT1NFcnJvcl0gaWYgcmV0cmlldmluZyB0aGUgZW52aXJvbm1lbnQgZmFpbHMuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIF9lbnZpcm9ubWVudCgpOwogIGV4dGVybmFsIHN0YXRpYyBMaXN0PFN0cmluZz4gX2V4ZWN1dGFibGVBcmd1bWVudHMoKTsKICBleHRlcm5hbCBzdGF0aWMgU3RyaW5nIF9wYWNrYWdlUm9vdCgpOyAvLyBUT0RPKG1mYWlyaHVyc3QpOiByZW1vdmUgdGhpcwogIGV4dGVybmFsIHN0YXRpYyBTdHJpbmcgX3BhY2thZ2VDb25maWcoKTsKICBleHRlcm5hbCBzdGF0aWMgU3RyaW5nIF92ZXJzaW9uKCk7CiAgZXh0ZXJuYWwgc3RhdGljIFN0cmluZyBfbG9jYWxlTmFtZSgpOwogIGV4dGVybmFsIHN0YXRpYyBVcmkgX3NjcmlwdCgpOwoKICBzdGF0aWMgU3RyaW5nIGV4ZWN1dGFibGUgPSBfZXhlY3V0YWJsZSgpOwogIHN0YXRpYyBTdHJpbmcgcmVzb2x2ZWRFeGVjdXRhYmxlID0gX3Jlc29sdmVkRXhlY3V0YWJsZSgpOwogIHN0YXRpYyBTdHJpbmcgcGFja2FnZVJvb3Q7IC8vIFRPRE8obWZhaXJodXJzdCk6IHJlbW92ZSB0aGlzCiAgc3RhdGljIFN0cmluZyBwYWNrYWdlQ29uZmlnID0gX3BhY2thZ2VDb25maWcoKTsKCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHN0YXRpYyBTdHJpbmcgRnVuY3Rpb24oKSBfbG9jYWxlQ2xvc3VyZTsKICBzdGF0aWMgU3RyaW5nIGxvY2FsZU5hbWUoKSB7CiAgICBmaW5hbCByZXN1bHQgPSAoX2xvY2FsZUNsb3N1cmUgPT0gbnVsbCkgPyBfbG9jYWxlTmFtZSgpIDogX2xvY2FsZUNsb3N1cmUoKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gQ2FjaGUgdGhlIE9TIGVudmlyb25tZW50LiBUaGlzIGNhbiBiZSBhbiBPU0Vycm9yIGluc3RhbmNlIGlmCiAgLy8gcmV0cmlldmluZyB0aGUgZW52aXJvbm1lbnQgZmFpbGVkLgogIHN0YXRpYyB2YXIgLypPU0Vycm9yfE1hcDxTdHJpbmcsU3RyaW5nPiovIF9lbnZpcm9ubWVudENhY2hlOwoKICBzdGF0aWMgaW50IGdldCBudW1iZXJPZlByb2Nlc3NvcnMgPT4gX251bWJlck9mUHJvY2Vzc29ycygpOwogIHN0YXRpYyBTdHJpbmcgZ2V0IHBhdGhTZXBhcmF0b3IgPT4gX3BhdGhTZXBhcmF0b3IoKTsKICBzdGF0aWMgU3RyaW5nIGdldCBvcGVyYXRpbmdTeXN0ZW0gPT4gX29wZXJhdGluZ1N5c3RlbSgpOwogIHN0YXRpYyBVcmkgZ2V0IHNjcmlwdCA9PiBfc2NyaXB0KCk7CgogIHN0YXRpYyBTdHJpbmcgX2NhY2hlZE9TVmVyc2lvbjsKICBzdGF0aWMgU3RyaW5nIGdldCBvcGVyYXRpbmdTeXN0ZW1WZXJzaW9uIHsKICAgIGlmIChfY2FjaGVkT1NWZXJzaW9uID09IG51bGwpIHsKICAgICAgdmFyIHJlc3VsdCA9IF9vcGVyYXRpbmdTeXN0ZW1WZXJzaW9uKCk7CiAgICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICAgIHRocm93IHJlc3VsdDsKICAgICAgfQogICAgICBfY2FjaGVkT1NWZXJzaW9uID0gcmVzdWx0OwogICAgfQogICAgcmV0dXJuIF9jYWNoZWRPU1ZlcnNpb247CiAgfQoKICBzdGF0aWMgU3RyaW5nIGdldCBsb2NhbEhvc3RuYW1lIHsKICAgIHZhciByZXN1bHQgPSBfbG9jYWxIb3N0bmFtZSgpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IHJlc3VsdDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgTGlzdDxTdHJpbmc+IGdldCBleGVjdXRhYmxlQXJndW1lbnRzID0+IF9leGVjdXRhYmxlQXJndW1lbnRzKCk7CgogIHN0YXRpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldCBlbnZpcm9ubWVudCB7CiAgICBpZiAoX2Vudmlyb25tZW50Q2FjaGUgPT0gbnVsbCkgewogICAgICB2YXIgZW52ID0gX2Vudmlyb25tZW50KCk7CiAgICAgIGlmIChlbnYgaXMhIE9TRXJyb3IpIHsKICAgICAgICB2YXIgaXNXaW5kb3dzID0gb3BlcmF0aW5nU3lzdGVtID09ICd3aW5kb3dzJzsKICAgICAgICB2YXIgcmVzdWx0ID0gaXNXaW5kb3dzCiAgICAgICAgICAgID8gbmV3IF9DYXNlSW5zZW5zaXRpdmVTdHJpbmdNYXA8U3RyaW5nPigpCiAgICAgICAgICAgIDogbmV3IE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKICAgICAgICBmb3IgKHZhciBzdHIgaW4gZW52KSB7CiAgICAgICAgICBpZiAoc3RyID09IG51bGwpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBUaGUgU3RyaW5ncyByZXR1cm5lZCBieSBbX2Vudmlyb25tZW50KCldIGFyZSBleHBlY3RlZCB0byBiZQogICAgICAgICAgLy8gdmFsaWQgZW52aXJvbm1lbnQgZW50cmllcywgYnV0IGV4Y2VwdGlvbnMgaGF2ZSBiZWVuIHNlZW4KICAgICAgICAgIC8vIChlLmcuLCBhbiBlbnRyeSBvZiBqdXN0ICc9JyBoYXMgYmVlbiBzZWVuIG9uIE9TL1gpLgogICAgICAgICAgLy8gSW52YWxpZCBlbnRyaWVzIChsaW5lcyB3aXRob3V0IGEgJz0nIG9yIHdpdGggYW4gZW1wdHkgbmFtZSkKICAgICAgICAgIC8vIGFyZSBkaXNjYXJkZWQuCiAgICAgICAgICB2YXIgZXF1YWxzSW5kZXggPSBzdHIuaW5kZXhPZignPScpOwogICAgICAgICAgaWYgKGVxdWFsc0luZGV4ID4gMCkgewogICAgICAgICAgICByZXN1bHRbc3RyLnN1YnN0cmluZygwLCBlcXVhbHNJbmRleCldID0KICAgICAgICAgICAgICAgIHN0ci5zdWJzdHJpbmcoZXF1YWxzSW5kZXggKyAxKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgX2Vudmlyb25tZW50Q2FjaGUgPSBuZXcgVW5tb2RpZmlhYmxlTWFwVmlldzxTdHJpbmcsIFN0cmluZz4ocmVzdWx0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfZW52aXJvbm1lbnRDYWNoZSA9IGVudjsKICAgICAgfQogICAgfQoKICAgIGlmIChfZW52aXJvbm1lbnRDYWNoZSBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IF9lbnZpcm9ubWVudENhY2hlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIF9lbnZpcm9ubWVudENhY2hlOwogICAgfQogIH0KCiAgc3RhdGljIFN0cmluZyBnZXQgdmVyc2lvbiA9PiBfdmVyc2lvbigpOwp9CgovLyBFbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgb24gV2luZG93cy4gSW4gb3JkZXIKLy8gdG8gcmVmbGVjdCB0aGF0IHdlIHVzZSBhIGNhc2UtaW5zZW5zaXRpdmUgc3RyaW5nIG1hcCBvbiBXaW5kb3dzLgpjbGFzcyBfQ2FzZUluc2Vuc2l0aXZlU3RyaW5nTWFwPFY+IGV4dGVuZHMgTWFwQmFzZTxTdHJpbmcsIFY+IHsKICBmaW5hbCBNYXA8U3RyaW5nLCBWPiBfbWFwID0gbmV3IE1hcDxTdHJpbmcsIFY+KCk7CgogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgPT4KICAgICAga2V5IGlzIFN0cmluZyAmJiBfbWFwLmNvbnRhaW5zS2V5KGtleS50b1VwcGVyQ2FzZSgpKTsKICBib29sIGNvbnRhaW5zVmFsdWUoT2JqZWN0IHZhbHVlKSA9PiBfbWFwLmNvbnRhaW5zVmFsdWUodmFsdWUpOwogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgPT4ga2V5IGlzIFN0cmluZyA/IF9tYXBba2V5LnRvVXBwZXJDYXNlKCldIDogbnVsbDsKICB2b2lkIG9wZXJhdG9yIFtdPShTdHJpbmcga2V5LCBWIHZhbHVlKSB7CiAgICBfbWFwW2tleS50b1VwcGVyQ2FzZSgpXSA9IHZhbHVlOwogIH0KCiAgViBwdXRJZkFic2VudChTdHJpbmcga2V5LCBWIGlmQWJzZW50KCkpIHsKICAgIHJldHVybiBfbWFwLnB1dElmQWJzZW50KGtleS50b1VwcGVyQ2FzZSgpLCBpZkFic2VudCk7CiAgfQoKICB2b2lkIGFkZEFsbChNYXA8U3RyaW5nLCBWPiBvdGhlcikgewogICAgb3RoZXIuZm9yRWFjaCgoa2V5LCB2YWx1ZSkgPT4gdGhpc1trZXkudG9VcHBlckNhc2UoKV0gPSB2YWx1ZSk7CiAgfQoKICBWIHJlbW92ZShPYmplY3Qga2V5KSA9PiBrZXkgaXMgU3RyaW5nID8gX21hcC5yZW1vdmUoa2V5LnRvVXBwZXJDYXNlKCkpIDogbnVsbDsKCiAgdm9pZCBjbGVhcigpIHsKICAgIF9tYXAuY2xlYXIoKTsKICB9CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoU3RyaW5nIGtleSwgViB2YWx1ZSkpIHsKICAgIF9tYXAuZm9yRWFjaChmKTsKICB9CgogIEl0ZXJhYmxlPFN0cmluZz4gZ2V0IGtleXMgPT4gX21hcC5rZXlzOwogIEl0ZXJhYmxlPFY+IGdldCB2YWx1ZXMgPT4gX21hcC52YWx1ZXM7CiAgaW50IGdldCBsZW5ndGggPT4gX21hcC5sZW5ndGg7CiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfbWFwLmlzRW1wdHk7CiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfbWFwLmlzTm90RW1wdHk7CgogIEl0ZXJhYmxlPE1hcEVudHJ5PFN0cmluZywgVj4+IGdldCBlbnRyaWVzID0+IF9tYXAuZW50cmllczsKCiAgTWFwPEsyLCBWMj4gbWFwPEsyLCBWMj4oTWFwRW50cnk8SzIsIFYyPiB0cmFuc2Zvcm0oU3RyaW5nIGtleSwgViB2YWx1ZSkpID0+CiAgICAgIF9tYXAubWFwKHRyYW5zZm9ybSk7CgogIFYgdXBkYXRlKFN0cmluZyBrZXksIFYgdXBkYXRlKFYgdmFsdWUpLCB7ViBpZkFic2VudCgpfSkgPT4KICAgICAgX21hcC51cGRhdGUoa2V5LnRvVXBwZXJDYXNlKCksIHVwZGF0ZSwgaWZBYnNlbnQ6IGlmQWJzZW50KTsKCiAgdm9pZCB1cGRhdGVBbGwoViB1cGRhdGUoU3RyaW5nIGtleSwgViB2YWx1ZSkpIHsKICAgIF9tYXAudXBkYXRlQWxsKHVwZGF0ZSk7CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChTdHJpbmcga2V5LCBWIHZhbHVlKSkgewogICAgX21hcC5yZW1vdmVXaGVyZSh0ZXN0KTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+IF9tYXAudG9TdHJpbmcoKTsKfQqAtgBOTjwBDwERARItKy0tJCEpAQY2BUobBTZAMD46RgU/BiI3SislKCEBLDw+MgEcKx9QHRQGEwQBQig/AT43OyYBIi0kLh8WCCEGHQQBJCMdFAYTBAFJAS8lIB02HzYpHx0WDElGQUkcLiE0MAwKTQ8hCAYBKB8NIAYEASsCAUNEQDQBIjxBTyslBAEsOgQBJkQEAVEBERIEAS4VBAEqKSEkKgE9AU4bAT1CATIcBAE1HAQBKAIBGmRhcnQ6aW8vcGxhdGZvcm1faW1wbC5kYXJ0UW9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL19pbnRlcm5hbC92bS9iaW4vcGxhdGZvcm1fcGF0Y2guZGFydIeHLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgovLyBwYXJ0IG9mICJjb21tb25fcGF0Y2guZGFydCI7CgpAcGF0Y2gKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfUGxhdGZvcm0gewogIEBwYXRjaAogIHN0YXRpYyBpbnQgX251bWJlck9mUHJvY2Vzc29ycygpIG5hdGl2ZSAiUGxhdGZvcm1fTnVtYmVyT2ZQcm9jZXNzb3JzIjsKICBAcGF0Y2gKICBzdGF0aWMgU3RyaW5nIF9wYXRoU2VwYXJhdG9yKCkgbmF0aXZlICJQbGF0Zm9ybV9QYXRoU2VwYXJhdG9yIjsKICBAcGF0Y2gKICBzdGF0aWMgU3RyaW5nIF9vcGVyYXRpbmdTeXN0ZW0oKSBuYXRpdmUgIlBsYXRmb3JtX09wZXJhdGluZ1N5c3RlbSI7CiAgQHBhdGNoCiAgc3RhdGljIF9vcGVyYXRpbmdTeXN0ZW1WZXJzaW9uKCkgbmF0aXZlICJQbGF0Zm9ybV9PcGVyYXRpbmdTeXN0ZW1WZXJzaW9uIjsKICBAcGF0Y2gKICBzdGF0aWMgX2xvY2FsSG9zdG5hbWUoKSBuYXRpdmUgIlBsYXRmb3JtX0xvY2FsSG9zdG5hbWUiOwogIEBwYXRjaAogIHN0YXRpYyBfZXhlY3V0YWJsZSgpIG5hdGl2ZSAiUGxhdGZvcm1fRXhlY3V0YWJsZU5hbWUiOwogIEBwYXRjaAogIHN0YXRpYyBfcmVzb2x2ZWRFeGVjdXRhYmxlKCkgbmF0aXZlICJQbGF0Zm9ybV9SZXNvbHZlZEV4ZWN1dGFibGVOYW1lIjsKICBAcGF0Y2gKICBzdGF0aWMgX2Vudmlyb25tZW50KCkgbmF0aXZlICJQbGF0Zm9ybV9FbnZpcm9ubWVudCI7CiAgQHBhdGNoCiAgc3RhdGljIExpc3Q8U3RyaW5nPiBfZXhlY3V0YWJsZUFyZ3VtZW50cygpCiAgICAgIG5hdGl2ZSAiUGxhdGZvcm1fRXhlY3V0YWJsZUFyZ3VtZW50cyI7CiAgQHBhdGNoCiAgc3RhdGljIFN0cmluZyBfdmVyc2lvbigpIG5hdGl2ZSAiUGxhdGZvcm1fR2V0VmVyc2lvbiI7CgogIEBwYXRjaAogIHN0YXRpYyBTdHJpbmcgX2xvY2FsZU5hbWUoKSBuYXRpdmUgIlBsYXRmb3JtX0xvY2FsZU5hbWUiOwoKICBAcGF0Y2gKICBzdGF0aWMgU3RyaW5nIF9wYWNrYWdlUm9vdCgpID0+IFZNTGlicmFyeUhvb2tzLnBhY2thZ2VSb290U3RyaW5nOwogIEBwYXRjaAogIHN0YXRpYyBTdHJpbmcgX3BhY2thZ2VDb25maWcoKSA9PiBWTUxpYnJhcnlIb29rcy5wYWNrYWdlQ29uZmlnU3RyaW5nOwoKICBAcGF0Y2gKICBzdGF0aWMgVXJpIF9zY3JpcHQoKSA9PiBWTUxpYnJhcnlIb29rcy5wbGF0Zm9ybVNjcmlwdDsKCiAgLy8gVGhpcyBzY3JpcHQgc2luZ2xldG9uIGlzIHdyaXR0ZW4gdG8gYnkgdGhlIGVtYmVkZGVyIGlmIGFwcGxpY2FibGUuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHN0YXRpYyB2b2lkIHNldCBfbmF0aXZlU2NyaXB0KFN0cmluZyBwYXRoKSB7CiAgICBWTUxpYnJhcnlIb29rcy5wbGF0Zm9ybVNjcmlwdCA9ICgoKSB7CiAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoJ2h0dHA6JykgfHwKICAgICAgICAgIHBhdGguc3RhcnRzV2l0aCgnaHR0cHM6JykgfHwKICAgICAgICAgIHBhdGguc3RhcnRzV2l0aCgncGFja2FnZTonKSB8fAogICAgICAgICAgcGF0aC5zdGFydHNXaXRoKCdkYXJ0OicpIHx8CiAgICAgICAgICBwYXRoLnN0YXJ0c1dpdGgoJ2RhdGE6JykgfHwKICAgICAgICAgIHBhdGguc3RhcnRzV2l0aCgnZmlsZTonKSkgewogICAgICAgIHJldHVybiBVcmkucGFyc2UocGF0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIFVyaS5iYXNlLnJlc29sdmVVcmkobmV3IFVyaS5maWxlKHBhdGgpKTsKICAgICAgfQogICAgfSk7CiAgfQp9Cj8ATk48AQ8BIAEHGhIJSQlCCUYJTQk7CTkJSQk3CS0tCTkBCTwBCUQJSAEJOQFIHC8qJicpJiYmIA84CAgEAgEhZGFydDppby1wYXRjaC9wbGF0Zm9ybV9wYXRjaC5kYXJ0PG9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2lvL3Byb2Nlc3MuZGFydMAAZ/0vLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5pbzsKCi8vIFRPRE8oYWdlcik6IFRoZSBvbmx5IHJlYXNvbiBmb3IgdGhpcyBjbGFzcyBpcyB0aGF0IHdlCi8vIGNhbm5vdCBwYXRjaCBhIHRvcC1sZXZlbCBhdCB0aGlzIHBvaW50LgpjbGFzcyBfUHJvY2Vzc1V0aWxzIHsKICBleHRlcm5hbCBzdGF0aWMgdm9pZCBfZXhpdChpbnQgc3RhdHVzKTsKICBleHRlcm5hbCBzdGF0aWMgdm9pZCBfc2V0RXhpdENvZGUoaW50IHN0YXR1cyk7CiAgZXh0ZXJuYWwgc3RhdGljIGludCBfZ2V0RXhpdENvZGUoKTsKICBleHRlcm5hbCBzdGF0aWMgdm9pZCBfc2xlZXAoaW50IG1pbGxpcyk7CiAgZXh0ZXJuYWwgc3RhdGljIGludCBfcGlkKFByb2Nlc3MgcHJvY2Vzcyk7CiAgZXh0ZXJuYWwgc3RhdGljIFN0cmVhbTxQcm9jZXNzU2lnbmFsPiBfd2F0Y2hTaWduYWwoUHJvY2Vzc1NpZ25hbCBzaWduYWwpOwp9CgovKioKICogRXhpdCB0aGUgRGFydCBWTSBwcm9jZXNzIGltbWVkaWF0ZWx5IHdpdGggdGhlIGdpdmVuIGV4aXQgY29kZS4KICoKICogVGhpcyBkb2VzIG5vdCB3YWl0IGZvciBhbnkgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgdG8gdGVybWluYXRlLiBVc2luZwogKiBbZXhpdF0gaXMgdGhlcmVmb3JlIHZlcnkgbGlrZWx5IHRvIGxvc2UgZGF0YS4KICoKICogV2hpbGUgZGVidWdnaW5nLCB0aGUgVk0gd2lsbCBub3QgcmVzcGVjdCB0aGUgYC0tcGF1c2UtaXNvbGF0ZXMtb24tZXhpdGAKICogZmxhZyBpZiBbZXhpdF0gaXMgY2FsbGVkIGFzIGludm9raW5nIHRoaXMgbWV0aG9kIGNhdXNlcyB0aGUgRGFydCBWTQogKiBwcm9jZXNzIHRvIHNodXRkb3duIGltbWVkaWF0ZWx5LiBUbyBwcm9wZXJseSBicmVhayBvbiBleGl0LCBjb25zaWRlcgogKiBjYWxsaW5nIFtkZWJ1Z2dlcl0gZnJvbSBgZGFydDpkZXZlbG9wZXJgIG9yIFtJc29sYXRlLnBhdXNlXSBmcm9tCiAqIGBkYXJ0Omlzb2xhdGVgIG9uIFtJc29sYXRlLmN1cnJlbnRdIHRvIHBhdXNlIHRoZSBpc29sYXRlIGJlZm9yZQogKiBpbnZva2luZyBbZXhpdF0uCiAqCiAqIFRoZSBoYW5kbGluZyBvZiBleGl0IGNvZGVzIGlzIHBsYXRmb3JtIHNwZWNpZmljLgogKgogKiBPbiBMaW51eCBhbmQgT1MgWCBhbiBleGl0IGNvZGUgZm9yIG5vcm1hbCB0ZXJtaW5hdGlvbiB3aWxsIGFsd2F5cwogKiBiZSBpbiB0aGUgcmFuZ2UgWzAuLjI1NV0uIElmIGFuIGV4aXQgY29kZSBvdXRzaWRlIHRoaXMgcmFuZ2UgaXMKICogc2V0IHRoZSBhY3R1YWwgZXhpdCBjb2RlIHdpbGwgYmUgdGhlIGxvd2VyIDggYml0cyBtYXNrZWQgb2ZmIGFuZAogKiB0cmVhdGVkIGFzIGFuIHVuc2lnbmVkIHZhbHVlLiBFLmcuIHVzaW5nIGFuIGV4aXQgY29kZSBvZiAtMSB3aWxsCiAqIHJlc3VsdCBpbiBhbiBhY3R1YWwgZXhpdCBjb2RlIG9mIDI1NSBiZWluZyByZXBvcnRlZC4KICoKICogT24gV2luZG93cyB0aGUgZXhpdCBjb2RlIGNhbiBiZSBzZXQgdG8gYW55IDMyLWJpdCB2YWx1ZS4gSG93ZXZlcgogKiBzb21lIG9mIHRoZXNlIHZhbHVlcyBhcmUgcmVzZXJ2ZWQgZm9yIHJlcG9ydGluZyBzeXN0ZW0gZXJyb3JzIGxpa2UKICogY3Jhc2hlcy4KICoKICogQmVzaWRlcyB0aGlzIHRoZSBEYXJ0IGV4ZWN1dGFibGUgaXRzZWxmIHVzZXMgYW4gZXhpdCBjb2RlIG9mIGAyNTRgCiAqIGZvciByZXBvcnRpbmcgY29tcGlsZSB0aW1lIGVycm9ycyBhbmQgYW4gZXhpdCBjb2RlIG9mIGAyNTVgIGZvcgogKiByZXBvcnRpbmcgcnVudGltZSBlcnJvciAodW5oYW5kbGVkIGV4Y2VwdGlvbikuCiAqCiAqIER1ZSB0byB0aGVzZSBmYWN0cyBpdCBpcyByZWNvbW1lbmRlZCB0byBvbmx5IHVzZSBleGl0IGNvZGVzIGluIHRoZQogKiByYW5nZSBbMC4uMTI3XSBmb3IgY29tbXVuaWNhdGluZyB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgYSBEYXJ0CiAqIHByb2dyYW0gdG8gdGhlIHN1cnJvdW5kaW5nIGVudmlyb25tZW50LiBUaGlzIHdpbGwgYXZvaWQgYW55CiAqIGNyb3NzLXBsYXRmb3JtIGlzc3Vlcy4KICovCnZvaWQgZXhpdChpbnQgY29kZSkgewogIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGNvZGUsICJjb2RlIik7CiAgaWYgKCFfRW1iZWRkZXJDb25maWcuX21heUV4aXQpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJUaGlzIGVtYmVkZGVyIGRpc2FsbG93cyBjYWxsaW5nIGRhcnQ6aW8ncyBleGl0KCkiKTsKICB9CiAgX1Byb2Nlc3NVdGlscy5fZXhpdChjb2RlKTsKfQoKLyoqCiAqIFNldCB0aGUgZ2xvYmFsIGV4aXQgY29kZSBmb3IgdGhlIERhcnQgVk0uCiAqCiAqIFRoZSBleGl0IGNvZGUgaXMgZ2xvYmFsIGZvciB0aGUgRGFydCBWTSBhbmQgdGhlIGxhc3QgYXNzaWdubWVudCB0bwogKiBleGl0Q29kZSBmcm9tIGFueSBpc29sYXRlIGRldGVybWluZXMgdGhlIGV4aXQgY29kZSBvZiB0aGUgRGFydCBWTQogKiBvbiBub3JtYWwgdGVybWluYXRpb24uCiAqCiAqIERlZmF1bHQgdmFsdWUgaXMgYDBgLgogKgogKiBTZWUgW2V4aXRdIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjaG9zZSBhIHZhbHVlIGZvciB0aGUKICogZXhpdCBjb2RlLgogKi8Kdm9pZCBzZXQgZXhpdENvZGUoaW50IGNvZGUpIHsKICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChjb2RlLCAiY29kZSIpOwogIF9Qcm9jZXNzVXRpbHMuX3NldEV4aXRDb2RlKGNvZGUpOwp9CgovKioKICogR2V0IHRoZSBnbG9iYWwgZXhpdCBjb2RlIGZvciB0aGUgRGFydCBWTS4KICoKICogVGhlIGV4aXQgY29kZSBpcyBnbG9iYWwgZm9yIHRoZSBEYXJ0IFZNIGFuZCB0aGUgbGFzdCBhc3NpZ25tZW50IHRvCiAqIGV4aXRDb2RlIGZyb20gYW55IGlzb2xhdGUgZGV0ZXJtaW5lcyB0aGUgZXhpdCBjb2RlIG9mIHRoZSBEYXJ0IFZNCiAqIG9uIG5vcm1hbCB0ZXJtaW5hdGlvbi4KICoKICogU2VlIFtleGl0XSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY2hvc2UgYSB2YWx1ZSBmb3IgdGhlCiAqIGV4aXQgY29kZS4KICovCmludCBnZXQgZXhpdENvZGUgPT4gX1Byb2Nlc3NVdGlscy5fZ2V0RXhpdENvZGUoKTsKCi8qKgogKiBTbGVlcCBmb3IgdGhlIGR1cmF0aW9uIHNwZWNpZmllZCBpbiBbZHVyYXRpb25dLgogKgogKiBVc2UgdGhpcyB3aXRoIGNhcmUsIGFzIG5vIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIGNhbiBiZSBwcm9jZXNzZWQKICogaW4gYSBpc29sYXRlIHdoaWxlIGl0IGlzIGJsb2NrZWQgaW4gYSBbc2xlZXBdIGNhbGwuCiAqLwp2b2lkIHNsZWVwKER1cmF0aW9uIGR1cmF0aW9uKSB7CiAgaW50IG1pbGxpc2Vjb25kcyA9IGR1cmF0aW9uLmluTWlsbGlzZWNvbmRzOwogIGlmIChtaWxsaXNlY29uZHMgPCAwKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigic2xlZXA6IGR1cmF0aW9uIGNhbm5vdCBiZSBuZWdhdGl2ZSIpOwogIH0KICBpZiAoIV9FbWJlZGRlckNvbmZpZy5fbWF5U2xlZXApIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJUaGlzIGVtYmVkZGVyIGRpc2FsbG93cyBjYWxsaW5nIGRhcnQ6aW8ncyBzbGVlcCgpIik7CiAgfQogIF9Qcm9jZXNzVXRpbHMuX3NsZWVwKG1pbGxpc2Vjb25kcyk7Cn0KCi8qKgogKiBSZXR1cm5zIHRoZSBQSUQgb2YgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KICovCmludCBnZXQgcGlkID0+IF9Qcm9jZXNzVXRpbHMuX3BpZChudWxsKTsKCi8qKgogKiBbUHJvY2Vzc0luZm9dIHByb3ZpZGVzIG1ldGhvZHMgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlCiAqIGN1cnJlbnQgcHJvY2Vzcy4KICovCmNsYXNzIFByb2Nlc3NJbmZvIHsKICAvKioKICAgKiBUaGUgY3VycmVudCByZXNpZGVudCBzZXQgc2l6ZSBvZiBtZW1vcnkgZm9yIHRoZSBwcm9jZXNzLgogICAqCiAgICogTm90ZSB0aGF0IHRoZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50LiBGb3IgZXhhbXBsZSwKICAgKiBzb21lIG1lbW9yeSBhY2NvdW50ZWQgZm9yIGhlcmUgbWF5IGJlIHNoYXJlZCB3aXRoIG90aGVyIHByb2Nlc3Nlcywgb3IgaWYKICAgKiB0aGUgc2FtZSBwYWdlIGlzIG1hcHBlZCBpbnRvIGEgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UsIGl0IG1heSBiZSBjb3VudGVkCiAgICogdHdpY2UuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIGludCBnZXQgY3VycmVudFJzczsKCiAgLyoqCiAgICogVGhlIGhpZ2gtd2F0ZXJtYXJrIGluIGJ5dGVzIGZvciB0aGUgcmVzaWRlbnQgc2V0IHNpemUgb2YgbWVtb3J5IGZvciB0aGUKICAgKiBwcm9jZXNzLgogICAqCiAgICogTm90ZSB0aGF0IHRoZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50LiBGb3IgZXhhbXBsZSwKICAgKiBzb21lIG1lbW9yeSBhY2NvdW50ZWQgZm9yIGhlcmUgbWF5IGJlIHNoYXJlZCB3aXRoIG90aGVyIHByb2Nlc3Nlcywgb3IgaWYKICAgKiB0aGUgc2FtZSBwYWdlIGlzIG1hcHBlZCBpbnRvIGEgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UsIGl0IG1heSBiZSBjb3VudGVkCiAgICogdHdpY2UuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIGludCBnZXQgbWF4UnNzOwp9CgovKioKICogTW9kZXMgZm9yIHJ1bm5pbmcgYSBuZXcgcHJvY2Vzcy4KICovCmNsYXNzIFByb2Nlc3NTdGFydE1vZGUgewogIC8vLyBOb3JtYWwgY2hpbGQgcHJvY2Vzcy4KICBzdGF0aWMgY29uc3Qgbm9ybWFsID0gY29uc3QgUHJvY2Vzc1N0YXJ0TW9kZS5faW50ZXJuYWwoMCk7CiAgQERlcHJlY2F0ZWQoIlVzZSBub3JtYWwgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IE5PUk1BTCA9IG5vcm1hbDsKCiAgLy8vIFN0ZGlvIGhhbmRsZXMgYXJlIGluaGVyaXRlZCBieSB0aGUgY2hpbGQgcHJvY2Vzcy4KICBzdGF0aWMgY29uc3QgaW5oZXJpdFN0ZGlvID0gY29uc3QgUHJvY2Vzc1N0YXJ0TW9kZS5faW50ZXJuYWwoMSk7CiAgQERlcHJlY2F0ZWQoIlVzZSBpbmhlcml0U3RkaW8gaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IElOSEVSSVRfU1RESU8gPSBpbmhlcml0U3RkaW87CgogIC8vLyBEZXRhY2hlZCBjaGlsZCBwcm9jZXNzIHdpdGggbm8gb3BlbiBjb21tdW5pY2F0aW9uIGNoYW5uZWwuCiAgc3RhdGljIGNvbnN0IGRldGFjaGVkID0gY29uc3QgUHJvY2Vzc1N0YXJ0TW9kZS5faW50ZXJuYWwoMik7CiAgQERlcHJlY2F0ZWQoIlVzZSBkZXRhY2hlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgREVUQUNIRUQgPSBkZXRhY2hlZDsKCiAgLy8vIERldGFjaGVkIGNoaWxkIHByb2Nlc3Mgd2l0aCBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIgc3RpbGwgb3BlbgogIC8vLyBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBjaGlsZC4KICBzdGF0aWMgY29uc3QgZGV0YWNoZWRXaXRoU3RkaW8gPSBjb25zdCBQcm9jZXNzU3RhcnRNb2RlLl9pbnRlcm5hbCgzKTsKICBARGVwcmVjYXRlZCgiVXNlIGRldGFjaGVkV2l0aFN0ZGlvIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBERVRBQ0hFRF9XSVRIX1NURElPID0gZGV0YWNoZWRXaXRoU3RkaW87CgogIHN0YXRpYyBMaXN0PFByb2Nlc3NTdGFydE1vZGU+IGdldCB2YWx1ZXMgPT4gY29uc3QgPFByb2Nlc3NTdGFydE1vZGU+WwogICAgICAgIG5vcm1hbCwKICAgICAgICBpbmhlcml0U3RkaW8sCiAgICAgICAgZGV0YWNoZWQsCiAgICAgICAgZGV0YWNoZWRXaXRoU3RkaW8KICAgICAgXTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PgogICAgICBjb25zdCBbIm5vcm1hbCIsICJpbmhlcml0U3RkaW8iLCAiZGV0YWNoZWQiLCAiZGV0YWNoZWRXaXRoU3RkaW8iXVtfbW9kZV07CgogIGZpbmFsIGludCBfbW9kZTsKICBjb25zdCBQcm9jZXNzU3RhcnRNb2RlLl9pbnRlcm5hbCh0aGlzLl9tb2RlKTsKfQoKLyoqCiAqIFRoZSBtZWFucyB0byBleGVjdXRlIGEgcHJvZ3JhbS4KICoKICogVXNlIHRoZSBzdGF0aWMgW3N0YXJ0XSBhbmQgW3J1bl0gbWV0aG9kcyB0byBzdGFydCBhIG5ldyBwcm9jZXNzLgogKiBUaGUgcnVuIG1ldGhvZCBleGVjdXRlcyB0aGUgcHJvY2VzcyBub24taW50ZXJhY3RpdmVseSB0byBjb21wbGV0aW9uLgogKiBJbiBjb250cmFzdCwgdGhlIHN0YXJ0IG1ldGhvZCBhbGxvd3MgeW91ciBjb2RlIHRvIGludGVyYWN0IHdpdGggdGhlCiAqIHJ1bm5pbmcgcHJvY2Vzcy4KICoKICogIyMgU3RhcnQgYSBwcm9jZXNzIHdpdGggdGhlIHJ1biBtZXRob2QKICoKICogVGhlIGZvbGxvd2luZyBjb2RlIHNhbXBsZSB1c2VzIHRoZSBydW4gbWV0aG9kIHRvIGNyZWF0ZSBhIHByb2Nlc3MKICogdGhhdCBydW5zIHRoZSBVTklYIGNvbW1hbmQgYGxzYCwgd2hpY2ggbGlzdHMgdGhlIGNvbnRlbnRzIG9mIGEgZGlyZWN0b3J5LgogKiBUaGUgcnVuIG1ldGhvZCBjb21wbGV0ZXMgd2l0aCBhIFtQcm9jZXNzUmVzdWx0XSBvYmplY3Qgd2hlbiB0aGUgcHJvY2VzcwogKiB0ZXJtaW5hdGVzLiBUaGlzIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgb3V0cHV0IGFuZCBleGl0IGNvZGUgZnJvbSB0aGUKICogcHJvY2Vzcy4gVGhlIHJ1biBtZXRob2QgZG9lcyBub3QgcmV0dXJuIGEgUHJvY2VzcyBvYmplY3Q7IHRoaXMgcHJldmVudHMgeW91cgogKiBjb2RlIGZyb20gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcnVubmluZyBwcm9jZXNzLgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJzsKICoKICogICAgIG1haW4oKSB7CiAqICAgICAgIC8vIExpc3QgYWxsIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpbiBVTklYLWxpa2Ugc3lzdGVtcy4KICogICAgICAgUHJvY2Vzcy5ydW4oJ2xzJywgWyctbCddKS50aGVuKChQcm9jZXNzUmVzdWx0IHJlc3VsdHMpIHsKICogICAgICAgICBwcmludChyZXN1bHRzLnN0ZG91dCk7CiAqICAgICAgIH0pOwogKiAgICAgfQogKgogKiAjIyBTdGFydCBhIHByb2Nlc3Mgd2l0aCB0aGUgc3RhcnQgbWV0aG9kCiAqCiAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSB1c2VzIHN0YXJ0IHRvIGNyZWF0ZSB0aGUgcHJvY2Vzcy4KICogVGhlIHN0YXJ0IG1ldGhvZCByZXR1cm5zIGEgW0Z1dHVyZV0gZm9yIGEgUHJvY2VzcyBvYmplY3QuCiAqIFdoZW4gdGhlIGZ1dHVyZSBjb21wbGV0ZXMgdGhlIHByb2Nlc3MgaXMgc3RhcnRlZCBhbmQKICogeW91ciBjb2RlIGNhbiBpbnRlcmFjdCB3aXRoIHRoZQogKiBQcm9jZXNzOiB3cml0aW5nIHRvIHN0ZGluLCBsaXN0ZW5pbmcgdG8gc3Rkb3V0LCBhbmQgc28gb24uCiAqCiAqIFRoZSBmb2xsb3dpbmcgc2FtcGxlIHN0YXJ0cyB0aGUgVU5JWCBgY2F0YCB1dGlsaXR5LCB3aGljaCB3aGVuIGdpdmVuIG5vCiAqIGNvbW1hbmQtbGluZSBhcmd1bWVudHMsIGVjaG9zIGl0cyBpbnB1dC4KICogVGhlIHByb2dyYW0gd3JpdGVzIHRvIHRoZSBwcm9jZXNzJ3Mgc3RhbmRhcmQgaW5wdXQgc3RyZWFtCiAqIGFuZCBwcmludHMgZGF0YSBmcm9tIGl0cyBzdGFuZGFyZCBvdXRwdXQgc3RyZWFtLgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJzsKICogICAgIGltcG9ydCAnZGFydDpjb252ZXJ0JzsKICoKICogICAgIG1haW4oKSB7CiAqICAgICAgIFByb2Nlc3Muc3RhcnQoJ2NhdCcsIFtdKS50aGVuKChQcm9jZXNzIHByb2Nlc3MpIHsKICogICAgICAgICBwcm9jZXNzLnN0ZG91dAogKiAgICAgICAgICAgICAudHJhbnNmb3JtKHV0ZjguZGVjb2RlcikKICogICAgICAgICAgICAgLmxpc3RlbigoZGF0YSkgeyBwcmludChkYXRhKTsgfSk7CiAqICAgICAgICAgcHJvY2Vzcy5zdGRpbi53cml0ZWxuKCdIZWxsbywgd29ybGQhJyk7CiAqICAgICAgICAgcHJvY2Vzcy5zdGRpbi53cml0ZWxuKCdIZWxsbywgZ2FsYXh5IScpOwogKiAgICAgICAgIHByb2Nlc3Muc3RkaW4ud3JpdGVsbignSGVsbG8sIHVuaXZlcnNlIScpOwogKiAgICAgICB9KTsKICogICAgIH0KICoKICogIyMgU3RhbmRhcmQgSS9PIHN0cmVhbXMKICoKICogQXMgc2VlbiBpbiB0aGUgcHJldmlvdXMgY29kZSBzYW1wbGUsIHlvdSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgUHJvY2VzcydzCiAqIHN0YW5kYXJkIG91dHB1dCBzdHJlYW0gdGhyb3VnaCB0aGUgZ2V0dGVyIFtzdGRvdXRdLAogKiBhbmQgeW91IGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBQcm9jZXNzJ3Mgc3RhbmRhcmQgaW5wdXQgc3RyZWFtIHRocm91Z2gKICogdGhlIGdldHRlciBbc3RkaW5dLgogKiBJbiBhZGRpdGlvbiwgUHJvY2VzcyBwcm92aWRlcyBhIGdldHRlciBbc3RkZXJyXSBmb3IgdXNpbmcgdGhlIFByb2Nlc3MncwogKiBzdGFuZGFyZCBlcnJvciBzdHJlYW0uCiAqCiAqIEEgUHJvY2VzcydzIHN0cmVhbXMgYXJlIGRpc3RpbmN0IGZyb20gdGhlIHRvcC1sZXZlbCBzdHJlYW1zCiAqIGZvciB0aGUgY3VycmVudCBwcm9ncmFtLgogKgogKiAjIyBFeGl0IGNvZGVzCiAqCiAqIENhbGwgdGhlIFtleGl0Q29kZV0gbWV0aG9kIHRvIGdldCB0aGUgZXhpdCBjb2RlIG9mIHRoZSBwcm9jZXNzLgogKiBUaGUgZXhpdCBjb2RlIGluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm9ncmFtIHRlcm1pbmF0ZWQgc3VjY2Vzc2Z1bGx5CiAqICh1c3VhbGx5IGluZGljYXRlZCB3aXRoIGFuIGV4aXQgY29kZSBvZiAwKSBvciB3aXRoIGFuIGVycm9yLgogKgogKiBJZiB0aGUgc3RhcnQgbWV0aG9kIGlzIHVzZWQsIHRoZSBleGl0Q29kZSBpcyBhdmFpbGFibGUgdGhyb3VnaCBhIGZ1dHVyZQogKiBvbiB0aGUgUHJvY2VzcyBvYmplY3QgKGFzIHNob3duIGluIHRoZSBleGFtcGxlIGJlbG93KS4KICogSWYgdGhlIHJ1biBtZXRob2QgaXMgdXNlZCwgdGhlIGV4aXRDb2RlIGlzIGF2YWlsYWJsZQogKiB0aHJvdWdoIGEgZ2V0dGVyIG9uIHRoZSBQcm9jZXNzUmVzdWx0IGluc3RhbmNlLgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJzsKICoKICogICAgIG1haW4oKSB7CiAqICAgICAgIFByb2Nlc3Muc3RhcnQoJ2xzJywgWyctbCddKS50aGVuKChwcm9jZXNzKSB7CiAqICAgICAgICAgLy8gR2V0IHRoZSBleGl0IGNvZGUgZnJvbSB0aGUgbmV3IHByb2Nlc3MuCiAqICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZS50aGVuKChleGl0Q29kZSkgewogKiAgICAgICAgICAgcHJpbnQoJ2V4aXQgY29kZTogJGV4aXRDb2RlJyk7CiAqICAgICAgICAgfSk7CiAqICAgICAgIH0pOwogKiAgICAgfQogKgogKiAjIyBPdGhlciByZXNvdXJjZXMKICoKICogW0RhcnQgYnkgRXhhbXBsZV0oaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2RhcnQtYnktZXhhbXBsZS8jZGFydC1pby1hbmQtY29tbWFuZC1saW5lLWFwcHMpCiAqIHByb3ZpZGVzIGFkZGl0aW9uYWwgdGFzay1vcmllbnRlZCBjb2RlIHNhbXBsZXMgdGhhdCBzaG93IGhvdyB0byB1c2UKICogdmFyaW91cyBBUEkgZnJvbSB0aGUgW2RhcnQ6aW9dIGxpYnJhcnkuCiAqLwphYnN0cmFjdCBjbGFzcyBQcm9jZXNzIHsKICAvKioKICAgKiBSZXR1cm5zIGEgWzpGdXR1cmU6XSB3aGljaCBjb21wbGV0ZXMgd2l0aCB0aGUgZXhpdCBjb2RlIG9mIHRoZSBwcm9jZXNzCiAgICogd2hlbiB0aGUgcHJvY2VzcyBjb21wbGV0ZXMuCiAgICoKICAgKiBUaGUgaGFuZGxpbmcgb2YgZXhpdCBjb2RlcyBpcyBwbGF0Zm9ybSBzcGVjaWZpYy4KICAgKgogICAqIE9uIExpbnV4IGFuZCBPUyBYIGEgbm9ybWFsIGV4aXQgY29kZSB3aWxsIGJlIGEgcG9zaXRpdmUgdmFsdWUgaW4KICAgKiB0aGUgcmFuZ2UgWzAuLjI1NV0uIElmIHRoZSBwcm9jZXNzIHdhcyB0ZXJtaW5hdGVkIGR1ZSB0byBhIHNpZ25hbAogICAqIHRoZSBleGl0IGNvZGUgd2lsbCBiZSBhIG5lZ2F0aXZlIHZhbHVlIGluIHRoZSByYW5nZSBbLTI1NS4uLTFdLAogICAqIHdoZXJlIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgZXhpdCBjb2RlIGlzIHRoZSBzaWduYWwKICAgKiBudW1iZXIuIEZvciBleGFtcGxlLCBpZiBhIHByb2Nlc3MgY3Jhc2hlcyBkdWUgdG8gYSBzZWdtZW50YXRpb24KICAgKiB2aW9sYXRpb24gdGhlIGV4aXQgY29kZSB3aWxsIGJlIC0xMSwgYXMgdGhlIHNpZ25hbCBTSUdTRUdWIGhhcyB0aGUKICAgKiBudW1iZXIgMTEuCiAgICoKICAgKiBPbiBXaW5kb3dzIGEgcHJvY2VzcyBjYW4gcmVwb3J0IGFueSAzMi1iaXQgdmFsdWUgYXMgYW4gZXhpdAogICAqIGNvZGUuIFdoZW4gcmV0dXJuaW5nIHRoZSBleGl0IGNvZGUgdGhpcyBleGl0IGNvZGUgaXMgdHVybmVkIGludG8KICAgKiBhIHNpZ25lZCB2YWx1ZS4gU29tZSBzcGVjaWFsIHZhbHVlcyBhcmUgdXNlZCB0byByZXBvcnQKICAgKiB0ZXJtaW5hdGlvbiBkdWUgdG8gc29tZSBzeXN0ZW0gZXZlbnQuIEUuZy4gaWYgYSBwcm9jZXNzIGNyYXNoZXMKICAgKiBkdWUgdG8gYW4gYWNjZXNzIHZpb2xhdGlvbiB0aGUgMzItYml0IGV4aXQgY29kZSBpcyBgMHhjMDAwMDAwNWAsCiAgICogd2hpY2ggd2lsbCBiZSByZXR1cm5lZCBhcyB0aGUgbmVnYXRpdmUgbnVtYmVyIGAtMTA3Mzc0MTgxOWAuIFRvCiAgICogZ2V0IHRoZSBvcmlnaW5hbCAzMi1iaXQgdmFsdWUgdXNlIGAoMHgxMDAwMDAwMDAgKyBleGl0Q29kZSkgJgogICAqIDB4ZmZmZmZmZmZgLgogICAqCiAgICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgW3N0ZG91dF0gYW5kIFtzdGRlcnJdIGhhdmUgZmluaXNoZWQgcmVwb3J0aW5nCiAgICogdGhlIGJ1ZmZlcmVkIG91dHB1dCBvZiB0aGUgcHJvY2VzcyB3aGVuIHRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzLgogICAqIFRvIGJlIHN1cmUgdGhhdCBhbGwgb3V0cHV0IGlzIGNhcHR1cmVkLAogICAqIHdhaXQgZm9yIHRoZSBkb25lIGV2ZW50IG9uIHRoZSBzdHJlYW1zLgogICAqLwogIEZ1dHVyZTxpbnQ+IGdldCBleGl0Q29kZTsKCiAgLyoqCiAgICogU3RhcnRzIGEgcHJvY2VzcyBydW5uaW5nIHRoZSBbZXhlY3V0YWJsZV0gd2l0aCB0aGUgc3BlY2lmaWVkCiAgICogW2FyZ3VtZW50c10uIFJldHVybnMgYSBbOkZ1dHVyZTxQcm9jZXNzPjpdIHRoYXQgY29tcGxldGVzIHdpdGggYQogICAqIFByb2Nlc3MgaW5zdGFuY2Ugd2hlbiB0aGUgcHJvY2VzcyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkKICAgKiBzdGFydGVkLiBUaGF0IFtQcm9jZXNzXSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUKICAgKiBwcm9jZXNzLiBJZiB0aGUgcHJvY2VzcyBjYW5ub3QgYmUgc3RhcnRlZCB0aGUgcmV0dXJuZWQgW0Z1dHVyZV0KICAgKiBjb21wbGV0ZXMgd2l0aCBhbiBleGNlcHRpb24uCiAgICoKICAgKiBVc2UgW3dvcmtpbmdEaXJlY3RvcnldIHRvIHNldCB0aGUgd29ya2luZyBkaXJlY3RvcnkgZm9yIHRoZSBwcm9jZXNzLiBOb3RlCiAgICogdGhhdCB0aGUgY2hhbmdlIG9mIGRpcmVjdG9yeSBvY2N1cnMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgcHJvY2VzcyBvbiBzb21lCiAgICogcGxhdGZvcm1zLCB3aGljaCBtYXkgaGF2ZSBpbXBhY3Qgd2hlbiB1c2luZyByZWxhdGl2ZSBwYXRocyBmb3IgdGhlCiAgICogZXhlY3V0YWJsZSBhbmQgdGhlIGFyZ3VtZW50cy4KICAgKgogICAqIFVzZSBbZW52aXJvbm1lbnRdIHRvIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgcHJvY2Vzcy4gSWYgbm90CiAgICogc2V0IHRoZSBlbnZpcm9ubWVudCBvZiB0aGUgcGFyZW50IHByb2Nlc3MgaXMgaW5oZXJpdGVkLiBDdXJyZW50bHksIG9ubHkKICAgKiBVUy1BU0NJSSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHN1cHBvcnRlZCBhbmQgZXJyb3JzIGFyZSBsaWtlbHkgdG8gb2NjdXIKICAgKiBpZiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRoIGNvZGUtcG9pbnRzIG91dHNpZGUgdGhlIFVTLUFTQ0lJIHJhbmdlIGlzCiAgICogcGFzc2VkIGluLgogICAqCiAgICogSWYgW2luY2x1ZGVQYXJlbnRFbnZpcm9ubWVudF0gaXMgYHRydWVgLCB0aGUgcHJvY2VzcydzIGVudmlyb25tZW50IHdpbGwKICAgKiBpbmNsdWRlIHRoZSBwYXJlbnQgcHJvY2VzcydzIGVudmlyb25tZW50LCB3aXRoIFtlbnZpcm9ubWVudF0gdGFraW5nCiAgICogcHJlY2VkZW5jZS4gRGVmYXVsdCBpcyBgdHJ1ZWAuCiAgICoKICAgKiBJZiBbcnVuSW5TaGVsbF0gaXMgYHRydWVgLCB0aGUgcHJvY2VzcyB3aWxsIGJlIHNwYXduZWQgdGhyb3VnaCBhIHN5c3RlbQogICAqIHNoZWxsLiBPbiBMaW51eCBhbmQgT1MgWCwgWzovYmluL3NoOl0gaXMgdXNlZCwgd2hpbGUKICAgKiBbOiVXSU5ESVIlXHN5c3RlbTMyXGNtZC5leGU6XSBpcyB1c2VkIG9uIFdpbmRvd3MuCiAgICoKICAgKiBVc2VycyBtdXN0IHJlYWQgYWxsIGRhdGEgY29taW5nIG9uIHRoZSBbc3Rkb3V0XSBhbmQgW3N0ZGVycl0KICAgKiBzdHJlYW1zIG9mIHByb2Nlc3NlcyBzdGFydGVkIHdpdGggWzpQcm9jZXNzLnN0YXJ0Ol0uIElmIHRoZSB1c2VyCiAgICogZG9lcyBub3QgcmVhZCBhbGwgZGF0YSBvbiB0aGUgc3RyZWFtcyB0aGUgdW5kZXJseWluZyBzeXN0ZW0KICAgKiByZXNvdXJjZXMgd2lsbCBub3QgYmUgcmVsZWFzZWQgc2luY2UgdGhlcmUgaXMgc3RpbGwgcGVuZGluZyBkYXRhLgogICAqCiAgICogVGhlIGZvbGxvd2luZyBjb2RlIHVzZXMgYFByb2Nlc3Muc3RhcnRgIHRvIGdyZXAgZm9yIGBtYWluYCBpbiB0aGUKICAgKiBmaWxlIGB0ZXN0LmRhcnRgIG9uIExpbnV4LgogICAqCiAgICogICAgIFByb2Nlc3Muc3RhcnQoJ2dyZXAnLCBbJy1pJywgJ21haW4nLCAndGVzdC5kYXJ0J10pLnRoZW4oKHByb2Nlc3MpIHsKICAgKiAgICAgICBzdGRvdXQuYWRkU3RyZWFtKHByb2Nlc3Muc3Rkb3V0KTsKICAgKiAgICAgICBzdGRlcnIuYWRkU3RyZWFtKHByb2Nlc3Muc3RkZXJyKTsKICAgKiAgICAgfSk7CiAgICoKICAgKiBJZiBbbW9kZV0gaXMgW1Byb2Nlc3NTdGFydE1vZGUubm9ybWFsXSAodGhlIGRlZmF1bHQpIGEgY2hpbGQKICAgKiBwcm9jZXNzIHdpbGwgYmUgc3RhcnRlZCB3aXRoIGBzdGRpbmAsIGBzdGRvdXRgIGFuZCBgc3RkZXJyYAogICAqIGNvbm5lY3RlZC4KICAgKgogICAqIElmIGBtb2RlYCBpcyBbUHJvY2Vzc1N0YXJ0TW9kZS5kZXRhY2hlZF0gYSBkZXRhY2hlZCBwcm9jZXNzIHdpbGwKICAgKiBiZSBjcmVhdGVkLiBBIGRldGFjaGVkIHByb2Nlc3MgaGFzIG5vIGNvbm5lY3Rpb24gdG8gaXRzIHBhcmVudCwKICAgKiBhbmQgY2FuIGtlZXAgcnVubmluZyBvbiBpdHMgb3duIHdoZW4gdGhlIHBhcmVudCBkaWVzLiBUaGUgb25seQogICAqIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBmcm9tIGEgZGV0YWNoZWQgcHJvY2VzcyBpcyBpdHMgYHBpZGAuIFRoZXJlCiAgICogaXMgbm8gY29ubmVjdGlvbiB0byBpdHMgYHN0ZGluYCwgYHN0ZG91dGAgb3IgYHN0ZGVycmAsIG5vciB3aWxsCiAgICogdGhlIHByb2Nlc3MnIGV4aXQgY29kZSBiZWNvbWUgYXZhaWxhYmxlIHdoZW4gaXQgdGVybWluYXRlcy4KICAgKgogICAqIElmIGBtb2RlYCBpcyBbUHJvY2Vzc1N0YXJ0TW9kZS5kZXRhY2hlZFdpdGhTdGRpb10gYSBkZXRhY2hlZAogICAqIHByb2Nlc3Mgd2lsbCBiZSBjcmVhdGVkIHdoZXJlIHRoZSBgc3RkaW5gLCBgc3Rkb3V0YCBhbmQgYHN0ZGVycmAKICAgKiBhcmUgY29ubmVjdGVkLiBUaGUgY3JlYXRvciBjYW4gY29tbXVuaWNhdGUgd2l0aCB0aGUgY2hpbGQgdGhyb3VnaAogICAqIHRoZXNlLiBUaGUgZGV0YWNoZWQgcHJvY2VzcyB3aWxsIGtlZXAgcnVubmluZyBldmVuIGlmIHRoZXNlCiAgICogY29tbXVuaWNhdGlvbiBjaGFubmVscyBhcmUgY2xvc2VkLiBUaGUgcHJvY2VzcycgZXhpdCBjb2RlIHdpbGwKICAgKiBub3QgYmVjb21lIGF2YWlsYWJsZSB3aGVuIGl0IHRlcm1pbmF0ZWQuCiAgICoKICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgYG1vZGVgIGlzIGBQcm9jZXNzU3RhcnRNb2RlLm5vcm1hbGAuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxQcm9jZXNzPiBzdGFydCgKICAgICAgU3RyaW5nIGV4ZWN1dGFibGUsIExpc3Q8U3RyaW5nPiBhcmd1bWVudHMsCiAgICAgIHtTdHJpbmcgd29ya2luZ0RpcmVjdG9yeSwKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCwKICAgICAgYm9vbCBpbmNsdWRlUGFyZW50RW52aXJvbm1lbnQ6IHRydWUsCiAgICAgIGJvb2wgcnVuSW5TaGVsbDogZmFsc2UsCiAgICAgIFByb2Nlc3NTdGFydE1vZGUgbW9kZTogUHJvY2Vzc1N0YXJ0TW9kZS5ub3JtYWx9KTsKCiAgLyoqCiAgICogU3RhcnRzIGEgcHJvY2VzcyBhbmQgcnVucyBpdCBub24taW50ZXJhY3RpdmVseSB0byBjb21wbGV0aW9uLiBUaGUKICAgKiBwcm9jZXNzIHJ1biBpcyBbZXhlY3V0YWJsZV0gd2l0aCB0aGUgc3BlY2lmaWVkIFthcmd1bWVudHNdLgogICAqCiAgICogVXNlIFt3b3JraW5nRGlyZWN0b3J5XSB0byBzZXQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGUgcHJvY2Vzcy4gTm90ZQogICAqIHRoYXQgdGhlIGNoYW5nZSBvZiBkaXJlY3Rvcnkgb2NjdXJzIGJlZm9yZSBleGVjdXRpbmcgdGhlIHByb2Nlc3Mgb24gc29tZQogICAqIHBsYXRmb3Jtcywgd2hpY2ggbWF5IGhhdmUgaW1wYWN0IHdoZW4gdXNpbmcgcmVsYXRpdmUgcGF0aHMgZm9yIHRoZQogICAqIGV4ZWN1dGFibGUgYW5kIHRoZSBhcmd1bWVudHMuCiAgICoKICAgKiBVc2UgW2Vudmlyb25tZW50XSB0byBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIHByb2Nlc3MuIElmIG5vdAogICAqIHNldCB0aGUgZW52aXJvbm1lbnQgb2YgdGhlIHBhcmVudCBwcm9jZXNzIGlzIGluaGVyaXRlZC4gQ3VycmVudGx5LCBvbmx5CiAgICogVVMtQVNDSUkgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBzdXBwb3J0ZWQgYW5kIGVycm9ycyBhcmUgbGlrZWx5IHRvIG9jY3VyCiAgICogaWYgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgd2l0aCBjb2RlLXBvaW50cyBvdXRzaWRlIHRoZSBVUy1BU0NJSSByYW5nZSBpcwogICAqIHBhc3NlZCBpbi4KICAgKgogICAqIElmIFtpbmNsdWRlUGFyZW50RW52aXJvbm1lbnRdIGlzIGB0cnVlYCwgdGhlIHByb2Nlc3MncyBlbnZpcm9ubWVudCB3aWxsCiAgICogaW5jbHVkZSB0aGUgcGFyZW50IHByb2Nlc3MncyBlbnZpcm9ubWVudCwgd2l0aCBbZW52aXJvbm1lbnRdIHRha2luZwogICAqIHByZWNlZGVuY2UuIERlZmF1bHQgaXMgYHRydWVgLgogICAqCiAgICogSWYgW3J1bkluU2hlbGxdIGlzIHRydWUsIHRoZSBwcm9jZXNzIHdpbGwgYmUgc3Bhd25lZCB0aHJvdWdoIGEgc3lzdGVtCiAgICogc2hlbGwuIE9uIExpbnV4IGFuZCBPUyBYLCBgL2Jpbi9zaGAgaXMgdXNlZCwgd2hpbGUKICAgKiBgJVdJTkRJUiVcc3lzdGVtMzJcY21kLmV4ZWAgaXMgdXNlZCBvbiBXaW5kb3dzLgogICAqCiAgICogVGhlIGVuY29kaW5nIHVzZWQgZm9yIGRlY29kaW5nIGBzdGRvdXRgIGFuZCBgc3RkZXJyYCBpbnRvIHRleHQgaXMKICAgKiBjb250cm9sbGVkIHRocm91Z2ggW3N0ZG91dEVuY29kaW5nXSBhbmQgW3N0ZGVyckVuY29kaW5nXS4gVGhlCiAgICogZGVmYXVsdCBlbmNvZGluZyBpcyBbc3lzdGVtRW5jb2RpbmddLiBJZiBgbnVsbGAgaXMgdXNlZCBubwogICAqIGRlY29kaW5nIHdpbGwgaGFwcGVuIGFuZCB0aGUgW1Byb2Nlc3NSZXN1bHRdIHdpbGwgaG9sZCBiaW5hcnkKICAgKiBkYXRhLgogICAqCiAgICogUmV0dXJucyBhIGBGdXR1cmU8UHJvY2Vzc1Jlc3VsdD5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhlCiAgICogcmVzdWx0IG9mIHJ1bm5pbmcgdGhlIHByb2Nlc3MsIGkuZS4sIGV4aXQgY29kZSwgc3RhbmRhcmQgb3V0IGFuZAogICAqIHN0YW5kYXJkIGluLgogICAqCiAgICogVGhlIGZvbGxvd2luZyBjb2RlIHVzZXMgYFByb2Nlc3MucnVuYCB0byBncmVwIGZvciBgbWFpbmAgaW4gdGhlCiAgICogZmlsZSBgdGVzdC5kYXJ0YCBvbiBMaW51eC4KICAgKgogICAqICAgICBQcm9jZXNzLnJ1bignZ3JlcCcsIFsnLWknLCAnbWFpbicsICd0ZXN0LmRhcnQnXSkudGhlbigocmVzdWx0KSB7CiAgICogICAgICAgc3Rkb3V0LndyaXRlKHJlc3VsdC5zdGRvdXQpOwogICAqICAgICAgIHN0ZGVyci53cml0ZShyZXN1bHQuc3RkZXJyKTsKICAgKiAgICAgfSk7CiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxQcm9jZXNzUmVzdWx0PiBydW4oCiAgICAgIFN0cmluZyBleGVjdXRhYmxlLCBMaXN0PFN0cmluZz4gYXJndW1lbnRzLAogICAgICB7U3RyaW5nIHdvcmtpbmdEaXJlY3RvcnksCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQsCiAgICAgIGJvb2wgaW5jbHVkZVBhcmVudEVudmlyb25tZW50OiB0cnVlLAogICAgICBib29sIHJ1bkluU2hlbGw6IGZhbHNlLAogICAgICBFbmNvZGluZyBzdGRvdXRFbmNvZGluZzogc3lzdGVtRW5jb2RpbmcsCiAgICAgIEVuY29kaW5nIHN0ZGVyckVuY29kaW5nOiBzeXN0ZW1FbmNvZGluZ30pOwoKICAvKioKICAgKiBTdGFydHMgYSBwcm9jZXNzIGFuZCBydW5zIGl0IHRvIGNvbXBsZXRpb24uIFRoaXMgaXMgYSBzeW5jaHJvbm91cwogICAqIGNhbGwgYW5kIHdpbGwgYmxvY2sgdW50aWwgdGhlIGNoaWxkIHByb2Nlc3MgdGVybWluYXRlcy4KICAgKgogICAqIFRoZSBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIGZvciBgUHJvY2Vzcy5ydW5gLgogICAqCiAgICogUmV0dXJucyBhIGBQcm9jZXNzUmVzdWx0YCB3aXRoIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgcHJvY2VzcywKICAgKiBpLmUuLCBleGl0IGNvZGUsIHN0YW5kYXJkIG91dCBhbmQgc3RhbmRhcmQgaW4uCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIFByb2Nlc3NSZXN1bHQgcnVuU3luYygKICAgICAgU3RyaW5nIGV4ZWN1dGFibGUsIExpc3Q8U3RyaW5nPiBhcmd1bWVudHMsCiAgICAgIHtTdHJpbmcgd29ya2luZ0RpcmVjdG9yeSwKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCwKICAgICAgYm9vbCBpbmNsdWRlUGFyZW50RW52aXJvbm1lbnQ6IHRydWUsCiAgICAgIGJvb2wgcnVuSW5TaGVsbDogZmFsc2UsCiAgICAgIEVuY29kaW5nIHN0ZG91dEVuY29kaW5nOiBzeXN0ZW1FbmNvZGluZywKICAgICAgRW5jb2Rpbmcgc3RkZXJyRW5jb2Rpbmc6IHN5c3RlbUVuY29kaW5nfSk7CgogIC8qKgogICAqIEtpbGxzIHRoZSBwcm9jZXNzIHdpdGggaWQgW3BpZF0uCiAgICoKICAgKiBXaGVyZSBwb3NzaWJsZSwgc2VuZHMgdGhlIFtzaWduYWxdIHRvIHRoZSBwcm9jZXNzIHdpdGggaWQKICAgKiBgcGlkYC4gVGhpcyBpbmNsdWRlcyBMaW51eCBhbmQgT1MgWC4gVGhlIGRlZmF1bHQgc2lnbmFsIGlzCiAgICogW1Byb2Nlc3NTaWduYWwuc2lndGVybV0gd2hpY2ggd2lsbCBub3JtYWxseSB0ZXJtaW5hdGUgdGhlCiAgICogcHJvY2Vzcy4KICAgKgogICAqIE9uIHBsYXRmb3JtcyB3aXRob3V0IHNpZ25hbCBzdXBwb3J0LCBpbmNsdWRpbmcgV2luZG93cywgdGhlIGNhbGwKICAgKiBqdXN0IHRlcm1pbmF0ZXMgdGhlIHByb2Nlc3Mgd2l0aCBpZCBgcGlkYCBpbiBhIHBsYXRmb3JtIHNwZWNpZmljCiAgICogd2F5LCBhbmQgdGhlIGBzaWduYWxgIHBhcmFtZXRlciBpcyBpZ25vcmVkLgogICAqCiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNpZ25hbCBpcyBzdWNjZXNzZnVsbHkgZGVsaXZlcmVkIHRvIHRoZQogICAqIHByb2Nlc3MuIE90aGVyd2lzZSB0aGUgc2lnbmFsIGNvdWxkIG5vdCBiZSBzZW50LCB1c3VhbGx5IG1lYW5pbmcKICAgKiB0aGF0IHRoZSBwcm9jZXNzIGlzIGFscmVhZHkgZGVhZC4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgYm9vbCBraWxsUGlkKGludCBwaWQsCiAgICAgIFtQcm9jZXNzU2lnbmFsIHNpZ25hbCA9IFByb2Nlc3NTaWduYWwuc2lndGVybV0pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzdGFuZGFyZCBvdXRwdXQgc3RyZWFtIG9mIHRoZSBwcm9jZXNzIGFzIGEgWzpTdHJlYW06XS4KICAgKi8KICBTdHJlYW08TGlzdDxpbnQ+PiBnZXQgc3Rkb3V0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0gb2YgdGhlIHByb2Nlc3MgYXMgYSBbOlN0cmVhbTpdLgogICAqLwogIFN0cmVhbTxMaXN0PGludD4+IGdldCBzdGRlcnI7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHN0YW5kYXJkIGlucHV0IHN0cmVhbSBvZiB0aGUgcHJvY2VzcyBhcyBhbiBbSU9TaW5rXS4KICAgKi8KICBJT1NpbmsgZ2V0IHN0ZGluOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBwcm9jZXNzIGlkIG9mIHRoZSBwcm9jZXNzLgogICAqLwogIGludCBnZXQgcGlkOwoKICAvKioKICAgKiBLaWxscyB0aGUgcHJvY2Vzcy4KICAgKgogICAqIFdoZXJlIHBvc3NpYmxlLCBzZW5kcyB0aGUgW3NpZ25hbF0gdG8gdGhlIHByb2Nlc3MuIFRoaXMgaW5jbHVkZXMKICAgKiBMaW51eCBhbmQgT1MgWC4gVGhlIGRlZmF1bHQgc2lnbmFsIGlzIFtQcm9jZXNzU2lnbmFsLnNpZ3Rlcm1dCiAgICogd2hpY2ggd2lsbCBub3JtYWxseSB0ZXJtaW5hdGUgdGhlIHByb2Nlc3MuCiAgICoKICAgKiBPbiBwbGF0Zm9ybXMgd2l0aG91dCBzaWduYWwgc3VwcG9ydCwgaW5jbHVkaW5nIFdpbmRvd3MsIHRoZSBjYWxsCiAgICoganVzdCB0ZXJtaW5hdGVzIHRoZSBwcm9jZXNzIGluIGEgcGxhdGZvcm0gc3BlY2lmaWMgd2F5LCBhbmQgdGhlCiAgICogYHNpZ25hbGAgcGFyYW1ldGVyIGlzIGlnbm9yZWQuCiAgICoKICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc2lnbmFsIGlzIHN1Y2Nlc3NmdWxseSBkZWxpdmVyZWQgdG8gdGhlCiAgICogcHJvY2Vzcy4gT3RoZXJ3aXNlIHRoZSBzaWduYWwgY291bGQgbm90IGJlIHNlbnQsIHVzdWFsbHkgbWVhbmluZwogICAqIHRoYXQgdGhlIHByb2Nlc3MgaXMgYWxyZWFkeSBkZWFkLgogICAqLwogIGJvb2wga2lsbChbUHJvY2Vzc1NpZ25hbCBzaWduYWwgPSBQcm9jZXNzU2lnbmFsLnNpZ3Rlcm1dKTsKfQoKLyoqCiAqIFtQcm9jZXNzUmVzdWx0XSByZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgcnVubmluZyBhIG5vbi1pbnRlcmFjdGl2ZQogKiBwcm9jZXNzIHN0YXJ0ZWQgd2l0aCBbUHJvY2Vzcy5ydW5dIG9yIFtQcm9jZXNzLnJ1blN5bmNdLgogKi8KY2xhc3MgUHJvY2Vzc1Jlc3VsdCB7CiAgLyoqCiAgICogRXhpdCBjb2RlIGZvciB0aGUgcHJvY2Vzcy4KICAgKgogICAqIFNlZSBbUHJvY2Vzcy5leGl0Q29kZV0gZm9yIG1vcmUgaW5mb3JtYXRpb24gaW4gdGhlIGV4aXQgY29kZQogICAqIHZhbHVlLgogICAqLwogIGZpbmFsIGludCBleGl0Q29kZTsKCiAgLyoqCiAgICogU3RhbmRhcmQgb3V0cHV0IGZyb20gdGhlIHByb2Nlc3MuIFRoZSB2YWx1ZSB1c2VkIGZvciB0aGUKICAgKiBgc3Rkb3V0RW5jb2RpbmdgIGFyZ3VtZW50IHRvIGBQcm9jZXNzLnJ1bmAgZGV0ZXJtaW5lcyB0aGUgdHlwZS4gSWYKICAgKiBgbnVsbGAgd2FzIHVzZWQgdGhpcyB2YWx1ZSBpcyBvZiB0eXBlIGBMaXN0PGludD5gIG90aGVyd2lzZSBpdCBpcwogICAqIG9mIHR5cGUgYFN0cmluZ2AuCiAgICovCiAgZmluYWwgc3Rkb3V0OwoKICAvKioKICAgKiBTdGFuZGFyZCBlcnJvciBmcm9tIHRoZSBwcm9jZXNzLiBUaGUgdmFsdWUgdXNlZCBmb3IgdGhlCiAgICogYHN0ZGVyckVuY29kaW5nYCBhcmd1bWVudCB0byBgUHJvY2Vzcy5ydW5gIGRldGVybWluZXMgdGhlIHR5cGUuIElmCiAgICogYG51bGxgIHdhcyB1c2VkIHRoaXMgdmFsdWUgaXMgb2YgdHlwZSBgTGlzdDxpbnQ+YAogICAqIG90aGVyd2lzZSBpdCBpcyBvZiB0eXBlIGBTdHJpbmdgLgogICAqLwogIGZpbmFsIHN0ZGVycjsKCiAgLyoqCiAgICogUHJvY2VzcyBpZCBvZiB0aGUgcHJvY2Vzcy4KICAgKi8KICBmaW5hbCBpbnQgcGlkOwoKICBQcm9jZXNzUmVzdWx0KHRoaXMucGlkLCB0aGlzLmV4aXRDb2RlLCB0aGlzLnN0ZG91dCwgdGhpcy5zdGRlcnIpOwp9CgovKioKICogT24gUG9zaXggc3lzdGVtcywgW1Byb2Nlc3NTaWduYWxdIGlzIHVzZWQgdG8gc2VuZCBhIHNwZWNpZmljIHNpZ25hbAogKiB0byBhIGNoaWxkIHByb2Nlc3MsIHNlZSBbOlByb2Nlc3Mua2lsbDpdLgogKgogKiBTb21lIFtQcm9jZXNzU2lnbmFsXXMgY2FuIGFsc28gYmUgd2F0Y2hlZCwgYXMgYSB3YXkgdG8gaW50ZXJjZXB0IHRoZSBkZWZhdWx0CiAqIHNpZ25hbCBoYW5kbGVyIGFuZCBpbXBsZW1lbnQgYW5vdGhlci4gU2VlIFtQcm9jZXNzU2lnbmFsLndhdGNoXSBmb3IgbW9yZQogKiBpbmZvcm1hdGlvbi4KICovCmNsYXNzIFByb2Nlc3NTaWduYWwgewogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ2h1cCA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygxLCAiU0lHSFVQIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lnaW50ID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDIsICJTSUdJTlQiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWdxdWl0ID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDMsICJTSUdRVUlUIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lnaWxsID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDQsICJTSUdJTEwiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWd0cmFwID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDUsICJTSUdUUkFQIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lnYWJydCA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXyg2LCAiU0lHQUJSVCIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ2J1cyA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXyg3LCAiU0lHQlVTIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lnZnBlID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDgsICJTSUdGUEUiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWdraWxsID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDksICJTSUdLSUxMIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lndXNyMSA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygxMCwgIlNJR1VTUjEiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWdzZWd2ID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDExLCAiU0lHU0VHViIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3VzcjIgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMTIsICJTSUdVU1IyIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lncGlwZSA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygxMywgIlNJR1BJUEUiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWdhbHJtID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDE0LCAiU0lHQUxSTSIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3Rlcm0gPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMTUsICJTSUdURVJNIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lnY2hsZCA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygxNywgIlNJR0NITEQiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWdjb250ID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDE4LCAiU0lHQ09OVCIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3N0b3AgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMTksICJTSUdTVE9QIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lndHN0cCA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygyMCwgIlNJR1RTVFAiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWd0dGluID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDIxLCAiU0lHVFRJTiIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3R0b3UgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMjIsICJTSUdUVE9VIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lndXJnID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDIzLCAiU0lHVVJHIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lneGNwdSA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygyNCwgIlNJR1hDUFUiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWd4ZnN6ID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDI1LCAiU0lHWEZTWiIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3Z0YWxybSA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygyNiwgIlNJR1ZUQUxSTSIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3Byb2YgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMjcsICJTSUdQUk9GIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lnd2luY2ggPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMjgsICJTSUdXSU5DSCIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3BvbGwgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMjksICJTSUdQT0xMIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lnc3lzID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDMxLCAiU0lHU1lTIik7CgogIEBEZXByZWNhdGVkKCJVc2Ugc2lnaHVwIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR0hVUCA9IHNpZ2h1cDsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ2ludCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdJTlQgPSBzaWdpbnQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWdxdWl0IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1FVSVQgPSBzaWdxdWl0OwogIEBEZXByZWNhdGVkKCJVc2Ugc2lnaWxsIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR0lMTCA9IHNpZ2lsbDsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3RyYXAgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHVFJBUCA9IHNpZ3RyYXA7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWdhYnJ0IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR0FCUlQgPSBzaWdhYnJ0OwogIEBEZXByZWNhdGVkKCJVc2Ugc2lnYnVzIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR0JVUyA9IHNpZ2J1czsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ2ZwZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdGUEUgPSBzaWdmcGU7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWdraWxsIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR0tJTEwgPSBzaWdraWxsOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lndXNyMSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdVU1IxID0gc2lndXNyMTsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3NlZ3YgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHU0VHViA9IHNpZ3NlZ3Y7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWd1c3IyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1VTUjIgPSBzaWd1c3IyOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lncGlwZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdQSVBFID0gc2lncGlwZTsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ2Fscm0gaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHQUxSTSA9IHNpZ2Fscm07CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWd0ZXJtIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1RFUk0gPSBzaWd0ZXJtOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lnY2hsZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdDSExEID0gc2lnY2hsZDsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ2NvbnQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHQ09OVCA9IHNpZ2NvbnQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWdzdG9wIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1NUT1AgPSBzaWdzdG9wOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lndHN0cCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdUU1RQID0gc2lndHN0cDsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3R0aW4gaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHVFRJTiA9IHNpZ3R0aW47CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWd0dG91IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1RUT1UgPSBzaWd0dG91OwogIEBEZXByZWNhdGVkKCJVc2Ugc2lndXJnIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1VSRyA9IHNpZ3VyZzsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3hjcHUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHWENQVSA9IHNpZ3hjcHU7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWd4ZnN6IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1hGU1ogPSBzaWd4ZnN6OwogIEBEZXByZWNhdGVkKCJVc2Ugc2lndnRhbHJtIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1ZUQUxSTSA9IHNpZ3Z0YWxybTsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3Byb2YgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHUFJPRiA9IHNpZ3Byb2Y7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWd3aW5jaCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdXSU5DSCA9IHNpZ3dpbmNoOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lncG9sbCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdQT0xMID0gc2lncG9sbDsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3N5cyBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdTWVMgPSBzaWdzeXM7CgogIGZpbmFsIGludCBfc2lnbmFsTnVtYmVyOwogIGZpbmFsIFN0cmluZyBfbmFtZTsKCiAgY29uc3QgUHJvY2Vzc1NpZ25hbC5fKHRoaXMuX3NpZ25hbE51bWJlciwgdGhpcy5fbmFtZSk7CgogIFN0cmluZyB0b1N0cmluZygpID0+IF9uYW1lOwoKICAvKioKICAgKiBXYXRjaCBmb3IgcHJvY2VzcyBzaWduYWxzLgogICAqCiAgICogVGhlIGZvbGxvd2luZyBbUHJvY2Vzc1NpZ25hbF1zIGNhbiBiZSBsaXN0ZW5lZCB0bzoKICAgKgogICAqICAgKiBbUHJvY2Vzc1NpZ25hbC5zaWdodXBdLgogICAqICAgKiBbUHJvY2Vzc1NpZ25hbC5zaWdpbnRdLiBTaWduYWwgc2VudCBieSBlLmcuIENUUkwtQy4KICAgKiAgICogW1Byb2Nlc3NTaWduYWwuc2lndGVybV0uIE5vdCBhdmFpbGFibGUgb24gV2luZG93cy4KICAgKiAgICogW1Byb2Nlc3NTaWduYWwuc2lndXNyMV0uIE5vdCBhdmFpbGFibGUgb24gV2luZG93cy4KICAgKiAgICogW1Byb2Nlc3NTaWduYWwuc2lndXNyMl0uIE5vdCBhdmFpbGFibGUgb24gV2luZG93cy4KICAgKiAgICogW1Byb2Nlc3NTaWduYWwuc2lnd2luY2hdLiBOb3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCiAgICoKICAgKiBPdGhlciBzaWduYWxzIGFyZSBkaXNhbGxvd2VkLCBhcyB0aGV5IG1heSBiZSB1c2VkIGJ5IHRoZSBWTS4KICAgKgogICAqIEEgc2lnbmFsIGNhbiBiZSB3YXRjaGVkIG11bHRpcGxlIHRpbWVzLCBmcm9tIG11bHRpcGxlIGlzb2xhdGVzLCB3aGVyZSBhbGwKICAgKiBjYWxsYmFja3MgYXJlIGludm9rZWQgd2hlbiBzaWduYWxlZCwgaW4gbm8gc3BlY2lmaWMgb3JkZXIuCiAgICovCiAgU3RyZWFtPFByb2Nlc3NTaWduYWw+IHdhdGNoKCkgPT4gX1Byb2Nlc3NVdGlscy5fd2F0Y2hTaWduYWwodGhpcyk7Cn0KCmNsYXNzIFNpZ25hbEV4Y2VwdGlvbiBpbXBsZW1lbnRzIElPRXhjZXB0aW9uIHsKICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKICBmaW5hbCBvc0Vycm9yOwoKICBjb25zdCBTaWduYWxFeGNlcHRpb24odGhpcy5tZXNzYWdlLCBbdGhpcy5vc0Vycm9yXSk7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHZhciBtc2cgPSAiIjsKICAgIGlmIChvc0Vycm9yICE9IG51bGwpIHsKICAgICAgbXNnID0gIiwgb3NFcnJvcjogJG9zRXJyb3IiOwogICAgfQogICAgcmV0dXJuICJTaWduYWxFeGNlcHRpb246ICRtZXNzYWdlJG1zZyI7CiAgfQp9CgpjbGFzcyBQcm9jZXNzRXhjZXB0aW9uIGltcGxlbWVudHMgSU9FeGNlcHRpb24gewogIC8qKgogICAqIENvbnRhaW5zIHRoZSBleGVjdXRhYmxlIHByb3ZpZGVkIGZvciB0aGUgcHJvY2Vzcy4KICAgKi8KICBmaW5hbCBTdHJpbmcgZXhlY3V0YWJsZTsKCiAgLyoqCiAgICogQ29udGFpbnMgdGhlIGFyZ3VtZW50cyBwcm92aWRlZCBmb3IgdGhlIHByb2Nlc3MuCiAgICovCiAgZmluYWwgTGlzdDxTdHJpbmc+IGFyZ3VtZW50czsKCiAgLyoqCiAgICogQ29udGFpbnMgdGhlIHN5c3RlbSBtZXNzYWdlIGZvciB0aGUgcHJvY2VzcyBleGNlcHRpb24gaWYgYW55LgogICAqLwogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwoKICAvKioKICAgKiBDb250YWlucyB0aGUgT1MgZXJyb3IgY29kZSBmb3IgdGhlIHByb2Nlc3MgZXhjZXB0aW9uIGlmIGFueS4KICAgKi8KICBmaW5hbCBpbnQgZXJyb3JDb2RlOwoKICBjb25zdCBQcm9jZXNzRXhjZXB0aW9uKHRoaXMuZXhlY3V0YWJsZSwgdGhpcy5hcmd1bWVudHMsCiAgICAgIFt0aGlzLm1lc3NhZ2UgPSAiIiwgdGhpcy5lcnJvckNvZGUgPSAwXSk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgdmFyIG1zZyA9IChtZXNzYWdlID09IG51bGwpID8gJ09TIGVycm9yIGNvZGU6ICRlcnJvckNvZGUnIDogbWVzc2FnZTsKICAgIHZhciBhcmdzID0gYXJndW1lbnRzLmpvaW4oJyAnKTsKICAgIHJldHVybiAiUHJvY2Vzc0V4Y2VwdGlvbjogJG1zZ1xuICBDb21tYW5kOiAkZXhlY3V0YWJsZSAkYXJncyI7CiAgfQp9CoLAAE5OPAEPAREBOSsWKjEmKy1MAgEEQgNKMQNLR0hEQxQDNANFQ0REOANERgwDRkMyA0ZBPxoEFiwjID0EHQIBBC0DRkUaAxkDQw4EHiwkAgEELQNGRRoDQw4EMgEEMwNGNwQgLhpDBCQgPgQmAgEEKwQpAQRHFAQUBj4FTU5PDAYmAQZNDgVNTk8MBiICAQQkBBkcPSQgAThDKi0BQT8mJAFGKEgvOAFIEBYSGgkXUAETMAIBBCMDREhHFAMqA0VNS0lQMwMZAxBKQiINCQMsAzs9OCM+A0ssPTQDGR4DEDsaKDEzNDYNCQMbA0w3SRdLGgM/HAMRA0NHQANLOjgzAxkDEDY2LiwPDQkDFgNeRysEGQZMIQU2BUZHRT1FSBAFQUY8RUZFQxIFTkwtLQYcAQZCRj1FRSIFT05IIwVQTVFPEAVNSSQFTTo3BUJGQUcFRyAFTS0tDQVCQRAFRkVER0VBBUJGR0FELgVABikxICcrHjgBBkdBBU9OSCMFUE1RTxAFTUkkBUs4NQVHQ0BDCwU/RhIFRSAFSigoDQYtMSAnKx4vMQEGRz0FNgVHNAYpMSAnKx4vMQEGJgU/QD8OBUZGMQVDRicGKDcBBkgGIAEGRwYgAQZGBhQBBiwGDwEGGAVGQzAFRkUkBUNGJwY9AgEERjwEFgYgBUIMBhYBBj5IRxcGEAEGPUg3JwYQAQYgBhEBRAIBBEctA1BMEAQWSkpMSkxMSkpMTU1NTU1NTU1NTU1NS01NUU1PTUsBJC4kLiUwJC4lMCUwJC4kLiUwJTAlMCUwJTAlMCUwJTAlMCUwJTAlMCUwJC4lMCUwJzQlMCYyJTAkLgEbFgE5AR4BBiAFOAUhPTw8PD0FQgVPQAZFAgEvGBEBNwEWEhsjBiwEAgEwBjcGGwEGNgYgAQZDBhgBBkIGFwE6MBZJJEMEAgEUZGFydDppby9wcm9jZXNzLmRhcnRJb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvaW8vc2VjdXJlX3NlcnZlcl9zb2NrZXQuZGFydKqZLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuaW87CgovKioKICogVGhlIFtTZWN1cmVTZXJ2ZXJTb2NrZXRdIGlzIGEgc2VydmVyIHNvY2tldCwgcHJvdmlkaW5nIGEgc3RyZWFtIG9mIGhpZ2gtbGV2ZWwKICogW1NvY2tldF1zLgogKgogKiBTZWUgW1NlY3VyZVNvY2tldF0gZm9yIG1vcmUgaW5mby4KICovCmNsYXNzIFNlY3VyZVNlcnZlclNvY2tldCBleHRlbmRzIFN0cmVhbTxTZWN1cmVTb2NrZXQ+IHsKICBmaW5hbCBSYXdTZWN1cmVTZXJ2ZXJTb2NrZXQgX3NvY2tldDsKCiAgU2VjdXJlU2VydmVyU29ja2V0Ll8odGhpcy5fc29ja2V0KTsKCiAgLyoqCiAgICogUmV0dXJucyBhIGZ1dHVyZSBmb3IgYSBbU2VjdXJlU2VydmVyU29ja2V0XS4gV2hlbiB0aGUgZnV0dXJlCiAgICogY29tcGxldGVzIHRoZSBzZXJ2ZXIgc29ja2V0IGlzIGJvdW5kIHRvIHRoZSBnaXZlbiBbYWRkcmVzc10gYW5kCiAgICogW3BvcnRdIGFuZCBoYXMgc3RhcnRlZCBsaXN0ZW5pbmcgb24gaXQuCiAgICoKICAgKiBUaGUgW2FkZHJlc3NdIGNhbiBlaXRoZXIgYmUgYSBbU3RyaW5nXSBvciBhbgogICAqIFtJbnRlcm5ldEFkZHJlc3NdLiBJZiBbYWRkcmVzc10gaXMgYSBbU3RyaW5nXSwgW2JpbmRdIHdpbGwKICAgKiBwZXJmb3JtIGEgW0ludGVybmV0QWRkcmVzcy5sb29rdXBdIGFuZCB1c2UgdGhlIGZpcnN0IHZhbHVlIGluIHRoZQogICAqIGxpc3QuIFRvIGxpc3RlbiBvbiB0aGUgbG9vcGJhY2sgYWRhcHRlciwgd2hpY2ggd2lsbCBhbGxvdyBvbmx5CiAgICogaW5jb21pbmcgY29ubmVjdGlvbnMgZnJvbSB0aGUgbG9jYWwgaG9zdCwgdXNlIHRoZSB2YWx1ZQogICAqIFtJbnRlcm5ldEFkZHJlc3MubG9vcGJhY2tJUHY0XSBvcgogICAqIFtJbnRlcm5ldEFkZHJlc3MubG9vcGJhY2tJUHY2XS4gVG8gYWxsb3cgZm9yIGluY29taW5nCiAgICogY29ubmVjdGlvbiBmcm9tIHRoZSBuZXR3b3JrIHVzZSBlaXRoZXIgb25lIG9mIHRoZSB2YWx1ZXMKICAgKiBbSW50ZXJuZXRBZGRyZXNzLmFueUlQdjRdIG9yIFtJbnRlcm5ldEFkZHJlc3MuYW55SVB2Nl0gdG8KICAgKiBiaW5kIHRvIGFsbCBpbnRlcmZhY2VzIG9yIHRoZSBJUCBhZGRyZXNzIG9mIGEgc3BlY2lmaWMgaW50ZXJmYWNlLgogICAqCiAgICogSWYgW3BvcnRdIGhhcyB0aGUgdmFsdWUgWzowOl0gYW4gZXBoZW1lcmFsIHBvcnQgd2lsbCBiZSBjaG9zZW4gYnkKICAgKiB0aGUgc3lzdGVtLiBUaGUgYWN0dWFsIHBvcnQgdXNlZCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIHRoZQogICAqIFtwb3J0XSBnZXR0ZXIuCiAgICoKICAgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgW2JhY2tsb2ddIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGxpc3RlbgogICAqIGJhY2tsb2cgZm9yIHRoZSB1bmRlcmx5aW5nIE9TIGxpc3RlbiBzZXR1cC4gSWYgW2JhY2tsb2ddIGhhcyB0aGUKICAgKiB2YWx1ZSBvZiBbOjA6XSAodGhlIGRlZmF1bHQpIGEgcmVhc29uYWJsZSB2YWx1ZSB3aWxsIGJlIGNob3NlbiBieQogICAqIHRoZSBzeXN0ZW0uCiAgICoKICAgKiBJbmNvbWluZyBjbGllbnQgY29ubmVjdGlvbnMgYXJlIHByb21vdGVkIHRvIHNlY3VyZSBjb25uZWN0aW9ucywgdXNpbmcKICAgKiB0aGUgc2VydmVyIGNlcnRpZmljYXRlIGFuZCBrZXkgc2V0IGluIFtjb250ZXh0XS4KICAgKgogICAqIFthZGRyZXNzXSBtdXN0IGJlIGdpdmVuIGFzIGEgbnVtZXJpYyBhZGRyZXNzLCBub3QgYSBob3N0IG5hbWUuCiAgICoKICAgKiBUbyByZXF1ZXN0IG9yIHJlcXVpcmUgdGhhdCBjbGllbnRzIGF1dGhlbnRpY2F0ZSBieSBwcm92aWRpbmcgYW4gU1NMIChUTFMpCiAgICogY2xpZW50IGNlcnRpZmljYXRlLCBzZXQgdGhlIG9wdGlvbmFsIHBhcmFtZXRlciBbcmVxdWVzdENsaWVudENlcnRpZmljYXRlXQogICAqIG9yIFtyZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGVdIHRvIHRydWUuICBSZXF1aXJpbmcgYSBjZXJ0aWZpY2F0ZSBpbXBsaWVzCiAgICogcmVxdWVzdGluZyBhIGNlcnRpZmljYXRlLCBzbyBzZXR0aW5nIGJvdGggaXMgcmVkdW5kYW50LgogICAqIFRvIGNoZWNrIHdoZXRoZXIgYSBjbGllbnQgY2VydGlmaWNhdGUgd2FzIHJlY2VpdmVkLCBjaGVjawogICAqIFNlY3VyZVNvY2tldC5wZWVyQ2VydGlmaWNhdGUgYWZ0ZXIgY29ubmVjdGluZy4gIElmIG5vIGNlcnRpZmljYXRlCiAgICogd2FzIHJlY2VpdmVkLCB0aGUgcmVzdWx0IHdpbGwgYmUgbnVsbC4KICAgKgogICAqIFtzdXBwb3J0ZWRQcm90b2NvbHNdIGlzIGFuIG9wdGlvbmFsIGxpc3Qgb2YgcHJvdG9jb2xzIChpbiBkZWNyZWFzaW5nCiAgICogb3JkZXIgb2YgcHJlZmVyZW5jZSkgdG8gdXNlIGR1cmluZyB0aGUgQUxQTiBwcm90b2NvbCBuZWdvZ2lhdGlvbiB3aXRoCiAgICogY2xpZW50cy4gIEV4YW1wbGUgdmFsdWVzIGFyZSAiaHR0cC8xLjEiIG9yICJoMiIuICBUaGUgc2VsZWN0ZWQgcHJvdG9jb2wKICAgKiBjYW4gYmUgb2J0YWluZWQgdmlhIFtTZWN1cmVTb2NrZXQuc2VsZWN0ZWRQcm90b2NvbF0uCiAgICoKICAgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgW3NoYXJlZF0gc3BlY2lmaWVzIHdoZXRoZXIgYWRkaXRpb25hbAogICAqIFNlY3VyZVNlcnZlclNvY2tldCBvYmplY3RzIGNhbiBiaW5kIHRvIHRoZSBzYW1lIGNvbWJpbmF0aW9uIG9mIGBhZGRyZXNzYCwKICAgKiBgcG9ydGAgYW5kIGB2Nk9ubHlgLiAgSWYgYHNoYXJlZGAgaXMgYHRydWVgIGFuZCBtb3JlIGBTZWN1cmVTZXJ2ZXJTb2NrZXRgcwogICAqIGZyb20gdGhpcyBpc29sYXRlIG9yIG90aGVyIGlzb2xhdGVzIGFyZSBib3VuZCB0byB0aGUgcG9ydCwgdGhlbiB0aGUKICAgKiBpbmNvbWluZyBjb25uZWN0aW9ucyB3aWxsIGJlIGRpc3RyaWJ1dGVkIGFtb25nIGFsbCB0aGUgYm91bmQKICAgKiBgU2VjdXJlU2VydmVyU29ja2V0YHMuIENvbm5lY3Rpb25zIGNhbiBiZSBkaXN0cmlidXRlZCBvdmVyIG11bHRpcGxlCiAgICogaXNvbGF0ZXMgdGhpcyB3YXkuCiAgICovCiAgc3RhdGljIEZ1dHVyZTxTZWN1cmVTZXJ2ZXJTb2NrZXQ+IGJpbmQoCiAgICAgIGFkZHJlc3MsIGludCBwb3J0LCBTZWN1cml0eUNvbnRleHQgY29udGV4dCwKICAgICAge2ludCBiYWNrbG9nOiAwLAogICAgICBib29sIHY2T25seTogZmFsc2UsCiAgICAgIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOiBmYWxzZSwKICAgICAgYm9vbCByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlLAogICAgICBMaXN0PFN0cmluZz4gc3VwcG9ydGVkUHJvdG9jb2xzLAogICAgICBib29sIHNoYXJlZDogZmFsc2V9KSB7CiAgICByZXR1cm4gUmF3U2VjdXJlU2VydmVyU29ja2V0CiAgICAgICAgLmJpbmQoYWRkcmVzcywgcG9ydCwgY29udGV4dCwKICAgICAgICAgICAgYmFja2xvZzogYmFja2xvZywKICAgICAgICAgICAgdjZPbmx5OiB2Nk9ubHksCiAgICAgICAgICAgIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTogcmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICAgICAgICByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGU6IHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgICAgICAgc3VwcG9ydGVkUHJvdG9jb2xzOiBzdXBwb3J0ZWRQcm90b2NvbHMsCiAgICAgICAgICAgIHNoYXJlZDogc2hhcmVkKQogICAgICAgIC50aGVuKChzZXJ2ZXJTb2NrZXQpID0+IG5ldyBTZWN1cmVTZXJ2ZXJTb2NrZXQuXyhzZXJ2ZXJTb2NrZXQpKTsKICB9CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxTZWN1cmVTb2NrZXQ+IGxpc3Rlbih2b2lkIG9uRGF0YShTZWN1cmVTb2NrZXQgc29ja2V0KSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIHJldHVybiBfc29ja2V0Lm1hcCgocmF3U29ja2V0KSA9PiBuZXcgU2VjdXJlU29ja2V0Ll8ocmF3U29ja2V0KSkubGlzdGVuKAogICAgICAgIG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLAogICAgICAgIG9uRG9uZTogb25Eb25lLAogICAgICAgIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcG9ydCB1c2VkIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIGludCBnZXQgcG9ydCA9PiBfc29ja2V0LnBvcnQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGFkZHJlc3MgdXNlZCBieSB0aGlzIHNvY2tldC4KICAgKi8KICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3MgPT4gX3NvY2tldC5hZGRyZXNzOwoKICAvKioKICAgKiBDbG9zZXMgdGhlIHNvY2tldC4gVGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMgd2hlbiB0aGUgc29ja2V0CiAgICogaXMgZnVsbHkgY2xvc2VkIGFuZCBpcyBubyBsb25nZXIgYm91bmQuCiAgICovCiAgRnV0dXJlPFNlY3VyZVNlcnZlclNvY2tldD4gY2xvc2UoKSA9PiBfc29ja2V0LmNsb3NlKCkudGhlbigoXykgPT4gdGhpcyk7CgogIHZvaWQgc2V0IF9vd25lcihvd25lcikgewogICAgX3NvY2tldC5fb3duZXIgPSBvd25lcjsKICB9Cn0KCi8qKgogKiBUaGUgUmF3U2VjdXJlU2VydmVyU29ja2V0IGlzIGEgc2VydmVyIHNvY2tldCwgcHJvdmlkaW5nIGEgc3RyZWFtIG9mIGxvdy1sZXZlbAogKiBbUmF3U2VjdXJlU29ja2V0XXMuCiAqCiAqIFNlZSBbUmF3U2VjdXJlU29ja2V0XSBmb3IgbW9yZSBpbmZvLgogKi8KY2xhc3MgUmF3U2VjdXJlU2VydmVyU29ja2V0IGV4dGVuZHMgU3RyZWFtPFJhd1NlY3VyZVNvY2tldD4gewogIGZpbmFsIFJhd1NlcnZlclNvY2tldCBfc29ja2V0OwogIFN0cmVhbUNvbnRyb2xsZXI8UmF3U2VjdXJlU29ja2V0PiBfY29udHJvbGxlcjsKICBTdHJlYW1TdWJzY3JpcHRpb248UmF3U29ja2V0PiBfc3Vic2NyaXB0aW9uOwogIGZpbmFsIFNlY3VyaXR5Q29udGV4dCBfY29udGV4dDsKICBmaW5hbCBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTsKICBmaW5hbCBib29sIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZTsKICBmaW5hbCBMaXN0PFN0cmluZz4gc3VwcG9ydGVkUHJvdG9jb2xzOwogIGJvb2wgX2Nsb3NlZCA9IGZhbHNlOwoKICBSYXdTZWN1cmVTZXJ2ZXJTb2NrZXQuXygKICAgICAgdGhpcy5fc29ja2V0LAogICAgICB0aGlzLl9jb250ZXh0LAogICAgICB0aGlzLnJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgdGhpcy5yZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUsCiAgICAgIHRoaXMuc3VwcG9ydGVkUHJvdG9jb2xzKSB7CiAgICBfY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPFJhd1NlY3VyZVNvY2tldD4oCiAgICAgICAgc3luYzogdHJ1ZSwKICAgICAgICBvbkxpc3RlbjogX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2UsCiAgICAgICAgb25QYXVzZTogX29uUGF1c2VTdGF0ZUNoYW5nZSwKICAgICAgICBvblJlc3VtZTogX29uUGF1c2VTdGF0ZUNoYW5nZSwKICAgICAgICBvbkNhbmNlbDogX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2UpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIGZ1dHVyZSBmb3IgYSBbUmF3U2VjdXJlU2VydmVyU29ja2V0XS4gV2hlbiB0aGUgZnV0dXJlCiAgICogY29tcGxldGVzIHRoZSBzZXJ2ZXIgc29ja2V0IGlzIGJvdW5kIHRvIHRoZSBnaXZlbiBbYWRkcmVzc10gYW5kCiAgICogW3BvcnRdIGFuZCBoYXMgc3RhcnRlZCBsaXN0ZW5pbmcgb24gaXQuCiAgICoKICAgKiBUaGUgW2FkZHJlc3NdIGNhbiBlaXRoZXIgYmUgYSBbU3RyaW5nXSBvciBhbgogICAqIFtJbnRlcm5ldEFkZHJlc3NdLiBJZiBbYWRkcmVzc10gaXMgYSBbU3RyaW5nXSwgW2JpbmRdIHdpbGwKICAgKiBwZXJmb3JtIGEgW0ludGVybmV0QWRkcmVzcy5sb29rdXBdIGFuZCB1c2UgdGhlIGZpcnN0IHZhbHVlIGluIHRoZQogICAqIGxpc3QuIFRvIGxpc3RlbiBvbiB0aGUgbG9vcGJhY2sgYWRhcHRlciwgd2hpY2ggd2lsbCBhbGxvdyBvbmx5CiAgICogaW5jb21pbmcgY29ubmVjdGlvbnMgZnJvbSB0aGUgbG9jYWwgaG9zdCwgdXNlIHRoZSB2YWx1ZQogICAqIFtJbnRlcm5ldEFkZHJlc3MubG9vcGJhY2tJUHY0XSBvcgogICAqIFtJbnRlcm5ldEFkZHJlc3MubG9vcGJhY2tJUHY2XS4gVG8gYWxsb3cgZm9yIGluY29taW5nCiAgICogY29ubmVjdGlvbiBmcm9tIHRoZSBuZXR3b3JrIHVzZSBlaXRoZXIgb25lIG9mIHRoZSB2YWx1ZXMKICAgKiBbSW50ZXJuZXRBZGRyZXNzLmFueUlQdjRdIG9yIFtJbnRlcm5ldEFkZHJlc3MuYW55SVB2Nl0gdG8KICAgKiBiaW5kIHRvIGFsbCBpbnRlcmZhY2VzIG9yIHRoZSBJUCBhZGRyZXNzIG9mIGEgc3BlY2lmaWMgaW50ZXJmYWNlLgogICAqCiAgICogSWYgW3BvcnRdIGhhcyB0aGUgdmFsdWUgWzowOl0gYW4gZXBoZW1lcmFsIHBvcnQgd2lsbCBiZSBjaG9zZW4gYnkKICAgKiB0aGUgc3lzdGVtLiBUaGUgYWN0dWFsIHBvcnQgdXNlZCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIHRoZQogICAqIFtwb3J0XSBnZXR0ZXIuCiAgICoKICAgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgW2JhY2tsb2ddIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGxpc3RlbgogICAqIGJhY2tsb2cgZm9yIHRoZSB1bmRlcmx5aW5nIE9TIGxpc3RlbiBzZXR1cC4gSWYgW2JhY2tsb2ddIGhhcyB0aGUKICAgKiB2YWx1ZSBvZiBbOjA6XSAodGhlIGRlZmF1bHQpIGEgcmVhc29uYWJsZSB2YWx1ZSB3aWxsIGJlIGNob3NlbiBieQogICAqIHRoZSBzeXN0ZW0uCiAgICoKICAgKiBJbmNvbWluZyBjbGllbnQgY29ubmVjdGlvbnMgYXJlIHByb21vdGVkIHRvIHNlY3VyZSBjb25uZWN0aW9ucywKICAgKiB1c2luZyB0aGUgc2VydmVyIGNlcnRpZmljYXRlIGFuZCBrZXkgc2V0IGluIFtjb250ZXh0XS4KICAgKgogICAqIFthZGRyZXNzXSBtdXN0IGJlIGdpdmVuIGFzIGEgbnVtZXJpYyBhZGRyZXNzLCBub3QgYSBob3N0IG5hbWUuCiAgICoKICAgKiBUbyByZXF1ZXN0IG9yIHJlcXVpcmUgdGhhdCBjbGllbnRzIGF1dGhlbnRpY2F0ZSBieSBwcm92aWRpbmcgYW4gU1NMIChUTFMpCiAgICogY2xpZW50IGNlcnRpZmljYXRlLCBzZXQgdGhlIG9wdGlvbmFsIHBhcmFtZXRlcnMgcmVxdWVzdENsaWVudENlcnRpZmljYXRlIG9yCiAgICogcmVxdWlyZUNsaWVudENlcnRpZmljYXRlIHRvIHRydWUuICBSZXF1aXJlIGltcGxpZXMgcmVxdWVzdCwgc28gb25lIGRvZXNuJ3QKICAgKiBuZWVkIHRvIHNwZWNpZnkgYm90aC4gIFRvIGNoZWNrIHdoZXRoZXIgYSBjbGllbnQgY2VydGlmaWNhdGUgd2FzIHJlY2VpdmVkLAogICAqIGNoZWNrIFNlY3VyZVNvY2tldC5wZWVyQ2VydGlmaWNhdGUgYWZ0ZXIgY29ubmVjdGluZy4gIElmIG5vIGNlcnRpZmljYXRlCiAgICogd2FzIHJlY2VpdmVkLCB0aGUgcmVzdWx0IHdpbGwgYmUgbnVsbC4KICAgKgogICAqIFtzdXBwb3J0ZWRQcm90b2NvbHNdIGlzIGFuIG9wdGlvbmFsIGxpc3Qgb2YgcHJvdG9jb2xzIChpbiBkZWNyZWFzaW5nCiAgICogb3JkZXIgb2YgcHJlZmVyZW5jZSkgdG8gdXNlIGR1cmluZyB0aGUgQUxQTiBwcm90b2NvbCBuZWdvdGlhdGlvbiB3aXRoCiAgICogY2xpZW50cy4gIEV4YW1wbGUgdmFsdWVzIGFyZSAiaHR0cC8xLjEiIG9yICJoMiIuICBUaGUgc2VsZWN0ZWQgcHJvdG9jb2wKICAgKiBjYW4gYmUgb2J0YWluZWQgdmlhIFtSYXdTZWN1cmVTb2NrZXQuc2VsZWN0ZWRQcm90b2NvbF0uCiAgICoKICAgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgW3NoYXJlZF0gc3BlY2lmaWVzIHdoZXRoZXIgYWRkaXRpb25hbAogICAqIFJhd1NlY3VyZVNlcnZlclNvY2tldCBvYmplY3RzIGNhbiBiaW5kIHRvIHRoZSBzYW1lIGNvbWJpbmF0aW9uIG9mCiAgICogYGFkZHJlc3NgLCBgcG9ydGAgYW5kIGB2Nk9ubHlgLiAgSWYgYHNoYXJlZGAgaXMgYHRydWVgIGFuZCBtb3JlCiAgICogYFJhd1NlY3VyZVNlcnZlclNvY2tldGBzIGZyb20gdGhpcyBpc29sYXRlIG9yIG90aGVyIGlzb2xhdGVzIGFyZSBib3VuZCB0bwogICAqIHRoZSBwb3J0LCB0aGVuIHRoZSBpbmNvbWluZyBjb25uZWN0aW9ucyB3aWxsIGJlIGRpc3RyaWJ1dGVkIGFtb25nIGFsbCB0aGUKICAgKiBib3VuZCBgUmF3U2VjdXJlU2VydmVyU29ja2V0YHMuIENvbm5lY3Rpb25zIGNhbiBiZSBkaXN0cmlidXRlZCBvdmVyCiAgICogbXVsdGlwbGUgaXNvbGF0ZXMgdGhpcyB3YXkuCiAgICovCiAgc3RhdGljIEZ1dHVyZTxSYXdTZWN1cmVTZXJ2ZXJTb2NrZXQ+IGJpbmQoCiAgICAgIGFkZHJlc3MsIGludCBwb3J0LCBTZWN1cml0eUNvbnRleHQgY29udGV4dCwKICAgICAge2ludCBiYWNrbG9nOiAwLAogICAgICBib29sIHY2T25seTogZmFsc2UsCiAgICAgIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOiBmYWxzZSwKICAgICAgYm9vbCByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlLAogICAgICBMaXN0PFN0cmluZz4gc3VwcG9ydGVkUHJvdG9jb2xzLAogICAgICBib29sIHNoYXJlZDogZmFsc2V9KSB7CiAgICByZXR1cm4gUmF3U2VydmVyU29ja2V0CiAgICAgICAgLmJpbmQoYWRkcmVzcywgcG9ydCwgYmFja2xvZzogYmFja2xvZywgdjZPbmx5OiB2Nk9ubHksIHNoYXJlZDogc2hhcmVkKQogICAgICAgIC50aGVuKChzZXJ2ZXJTb2NrZXQpID0+IG5ldyBSYXdTZWN1cmVTZXJ2ZXJTb2NrZXQuXygKICAgICAgICAgICAgc2VydmVyU29ja2V0LAogICAgICAgICAgICBjb250ZXh0LAogICAgICAgICAgICByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgICAgIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgICAgICAgc3VwcG9ydGVkUHJvdG9jb2xzKSk7CiAgfQoKICBTdHJlYW1TdWJzY3JpcHRpb248UmF3U2VjdXJlU29ja2V0PiBsaXN0ZW4odm9pZCBvbkRhdGEoUmF3U2VjdXJlU29ja2V0IHMpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgcmV0dXJuIF9jb250cm9sbGVyLnN0cmVhbS5saXN0ZW4ob25EYXRhLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsIG9uRG9uZTogb25Eb25lLCBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIHBvcnQgdXNlZCBieSB0aGlzIHNvY2tldC4KICAgKi8KICBpbnQgZ2V0IHBvcnQgPT4gX3NvY2tldC5wb3J0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBhZGRyZXNzIHVzZWQgYnkgdGhpcyBzb2NrZXQuCiAgICovCiAgSW50ZXJuZXRBZGRyZXNzIGdldCBhZGRyZXNzID0+IF9zb2NrZXQuYWRkcmVzczsKCiAgLyoqCiAgICogQ2xvc2VzIHRoZSBzb2NrZXQuIFRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzIHdoZW4gdGhlIHNvY2tldAogICAqIGlzIGZ1bGx5IGNsb3NlZCBhbmQgaXMgbm8gbG9uZ2VyIGJvdW5kLgogICAqLwogIEZ1dHVyZTxSYXdTZWN1cmVTZXJ2ZXJTb2NrZXQ+IGNsb3NlKCkgewogICAgX2Nsb3NlZCA9IHRydWU7CiAgICByZXR1cm4gX3NvY2tldC5jbG9zZSgpLnRoZW4oKF8pID0+IHRoaXMpOwogIH0KCiAgdm9pZCBfb25EYXRhKFJhd1NvY2tldCBjb25uZWN0aW9uKSB7CiAgICB2YXIgcmVtb3RlUG9ydDsKICAgIHRyeSB7CiAgICAgIHJlbW90ZVBvcnQgPSBjb25uZWN0aW9uLnJlbW90ZVBvcnQ7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIC8vIElmIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSBjbG9zZWQsIHJlbW90ZVBvcnQgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KICAgICAgLy8gRG8gbm90aGluZyAtIGNvbm5lY3Rpb24gaXMgY2xvc2VkLgogICAgICByZXR1cm47CiAgICB9CiAgICBfUmF3U2VjdXJlU29ja2V0CiAgICAgICAgLmNvbm5lY3QoY29ubmVjdGlvbi5hZGRyZXNzLCByZW1vdGVQb3J0LAogICAgICAgICAgICBjb250ZXh0OiBfY29udGV4dCwKICAgICAgICAgICAgaXNfc2VydmVyOiB0cnVlLAogICAgICAgICAgICBzb2NrZXQ6IGNvbm5lY3Rpb24sCiAgICAgICAgICAgIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTogcmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICAgICAgICByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGU6IHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgICAgICAgc3VwcG9ydGVkUHJvdG9jb2xzOiBzdXBwb3J0ZWRQcm90b2NvbHMpCiAgICAgICAgLnRoZW4oKFJhd1NlY3VyZVNvY2tldCBzZWN1cmVDb25uZWN0aW9uKSB7CiAgICAgIGlmIChfY2xvc2VkKSB7CiAgICAgICAgc2VjdXJlQ29ubmVjdGlvbi5jbG9zZSgpOwogICAgICB9IGVsc2UgewogICAgICAgIF9jb250cm9sbGVyLmFkZChzZWN1cmVDb25uZWN0aW9uKTsKICAgICAgfQogICAgfSkuY2F0Y2hFcnJvcigoZSwgcykgewogICAgICBpZiAoIV9jbG9zZWQpIHsKICAgICAgICBfY29udHJvbGxlci5hZGRFcnJvcihlLCBzKTsKICAgICAgfQogICAgfSk7CiAgfQoKICB2b2lkIF9vblBhdXNlU3RhdGVDaGFuZ2UoKSB7CiAgICBpZiAoX2NvbnRyb2xsZXIuaXNQYXVzZWQpIHsKICAgICAgX3N1YnNjcmlwdGlvbi5wYXVzZSgpOwogICAgfSBlbHNlIHsKICAgICAgX3N1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICAgIH0KICB9CgogIHZvaWQgX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2UoKSB7CiAgICBpZiAoX2NvbnRyb2xsZXIuaGFzTGlzdGVuZXIpIHsKICAgICAgX3N1YnNjcmlwdGlvbiA9IF9zb2NrZXQubGlzdGVuKF9vbkRhdGEsCiAgICAgICAgICBvbkVycm9yOiBfY29udHJvbGxlci5hZGRFcnJvciwgb25Eb25lOiBfY29udHJvbGxlci5jbG9zZSk7CiAgICB9IGVsc2UgewogICAgICBjbG9zZSgpOwogICAgfQogIH0KCiAgdm9pZCBzZXQgX293bmVyKG93bmVyKSB7CiAgICAoX3NvY2tldCBhcyBkeW5hbWljKS5fb3duZXIgPSBvd25lcjsKICB9Cn0KgScATk48AQ8BEQEEUQ4DJQQ4JwEmAQZCRS0FMkBHRD0nOz4/RwVHQRQFR0ZHEQVLNgVEBU9PTT0/RywFSktNOgVBT1BJQkkYBioyFxosLCcdISYeHEBANBxJBAFMP00QGhgnBAEGKwYgAQYuBjIBBkYtBksBGxwEAgEEURcDKAQ+ITEvIicnKRgBGxQVJSUhORQuJicvBAEGRUUtBTJAR0Q9Jzs+P0cFR0EUBUdGRxEFRTwFRAVPUVBQTSwFSktNPQVBR0VPT0khBi0yFxosLCcdG089GhUmJiIEAU0/LUkEAQYrBiABBi4GMgEGRi0GKhQuBAEnFAoqEkosDgYVMR8dIEBANDMVIg8rCBsWJAgIBAEfIB0NHgYEASYjLkUNDwYEARspBAIBIWRhcnQ6aW8vc2VjdXJlX3NlcnZlcl9zb2NrZXQuZGFydEJvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9pby9zZWN1cmVfc29ja2V0LmRhcnTAAK76Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuaW87CgovKioKICogQSBoaWdoLWxldmVsIGNsYXNzIGZvciBjb21tdW5pY2F0aW5nIHNlY3VyZWx5IG92ZXIgYSBUQ1Agc29ja2V0LCB1c2luZwogKiBUTFMgYW5kIFNTTC4gVGhlIFtTZWN1cmVTb2NrZXRdIGV4cG9zZXMgYm90aCBhIFtTdHJlYW1dIGFuZCBhbgogKiBbSU9TaW5rXSBpbnRlcmZhY2UsIG1ha2luZyBpdCBpZGVhbCBmb3IgdXNpbmcgdG9nZXRoZXIgd2l0aAogKiBvdGhlciBbU3RyZWFtXXMuCiAqLwphYnN0cmFjdCBjbGFzcyBTZWN1cmVTb2NrZXQgaW1wbGVtZW50cyBTb2NrZXQgewogIGV4dGVybmFsIGZhY3RvcnkgU2VjdXJlU29ja2V0Ll8oUmF3U2VjdXJlU29ja2V0IHJhd1NvY2tldCk7CgogIC8qKgogICAqIENvbnN0cnVjdHMgYSBuZXcgc2VjdXJlIGNsaWVudCBzb2NrZXQgYW5kIGNvbm5lY3RzIGl0IHRvIHRoZSBnaXZlbgogICAqIFtob3N0XSBvbiBwb3J0IFtwb3J0XS4gVGhlIHJldHVybmVkIEZ1dHVyZSB3aWxsIGNvbXBsZXRlIHdpdGggYQogICAqIFtTZWN1cmVTb2NrZXRdIHRoYXQgaXMgY29ubmVjdGVkIGFuZCByZWFkeSBmb3Igc3Vic2NyaXB0aW9uLgogICAqCiAgICogVGhlIGNlcnRpZmljYXRlIHByb3ZpZGVkIGJ5IHRoZSBzZXJ2ZXIgaXMgY2hlY2tlZAogICAqIHVzaW5nIHRoZSB0cnVzdGVkIGNlcnRpZmljYXRlcyBzZXQgaW4gdGhlIFNlY3VyaXR5Q29udGV4dCBvYmplY3QuCiAgICogVGhlIGRlZmF1bHQgU2VjdXJpdHlDb250ZXh0IG9iamVjdCBjb250YWlucyBhIGJ1aWx0LWluIHNldCBvZiB0cnVzdGVkCiAgICogcm9vdCBjZXJ0aWZpY2F0ZXMgZm9yIHdlbGwta25vd24gY2VydGlmaWNhdGUgYXV0aG9yaXRpZXMuCiAgICoKICAgKiBbb25CYWRDZXJ0aWZpY2F0ZV0gaXMgYW4gb3B0aW9uYWwgaGFuZGxlciBmb3IgdW52ZXJpZmlhYmxlIGNlcnRpZmljYXRlcy4KICAgKiBUaGUgaGFuZGxlciByZWNlaXZlcyB0aGUgW1g1MDlDZXJ0aWZpY2F0ZV0sIGFuZCBjYW4gaW5zcGVjdCBpdCBhbmQKICAgKiBkZWNpZGUgKG9yIGxldCB0aGUgdXNlciBkZWNpZGUpIHdoZXRoZXIgdG8gYWNjZXB0CiAgICogdGhlIGNvbm5lY3Rpb24gb3Igbm90LiAgVGhlIGhhbmRsZXIgc2hvdWxkIHJldHVybiB0cnVlCiAgICogdG8gY29udGludWUgdGhlIFtTZWN1cmVTb2NrZXRdIGNvbm5lY3Rpb24uCiAgICoKICAgKiBbc3VwcG9ydGVkUHJvdG9jb2xzXSBpcyBhbiBvcHRpb25hbCBsaXN0IG9mIHByb3RvY29scyAoaW4gZGVjcmVhc2luZwogICAqIG9yZGVyIG9mIHByZWZlcmVuY2UpIHRvIHVzZSBkdXJpbmcgdGhlIEFMUE4gcHJvdG9jb2wgbmVnb3RpYXRpb24gd2l0aCB0aGUKICAgKiBzZXJ2ZXIuICBFeGFtcGxlIHZhbHVlcyBhcmUgImh0dHAvMS4xIiBvciAiaDIiLiAgVGhlIHNlbGVjdGVkIHByb3RvY29sCiAgICogY2FuIGJlIG9idGFpbmVkIHZpYSBbU2VjdXJlU29ja2V0LnNlbGVjdGVkUHJvdG9jb2xdLgogICAqCiAgICogVGhlIGFyZ3VtZW50IFt0aW1lb3V0XSBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIG1heGltdW0gYWxsb3dlZCB0aW1lIHRvIHdhaXQKICAgKiBmb3IgYSBjb25uZWN0aW9uIHRvIGJlIGVzdGFibGlzaGVkLiBJZiBbdGltZW91dF0gaXMgbG9uZ2VyIHRoYW4gdGhlIHN5c3RlbQogICAqIGxldmVsIHRpbWVvdXQgZHVyYXRpb24sIGEgdGltZW91dCBtYXkgb2NjdXIgc29vbmVyIHRoYW4gc3BlY2lmaWVkIGluCiAgICogW3RpbWVvdXRdLiBPbiB0aW1lb3V0LCBhIFtTb2NrZXRFeGNlcHRpb25dIGlzIHRocm93biBhbmQgYWxsIG9uZ29pbmcKICAgKiBjb25uZWN0aW9uIGF0dGVtcHRzIHRvIFtob3N0XSBhcmUgY2FuY2VsbGVkLgoKICAgKi8KICBzdGF0aWMgRnV0dXJlPFNlY3VyZVNvY2tldD4gY29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge1NlY3VyaXR5Q29udGV4dCBjb250ZXh0LAogICAgICBib29sIG9uQmFkQ2VydGlmaWNhdGUoWDUwOUNlcnRpZmljYXRlIGNlcnRpZmljYXRlKSwKICAgICAgTGlzdDxTdHJpbmc+IHN1cHBvcnRlZFByb3RvY29scywKICAgICAgRHVyYXRpb24gdGltZW91dH0pIHsKICAgIHJldHVybiBSYXdTZWN1cmVTb2NrZXQuY29ubmVjdChob3N0LCBwb3J0LAogICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0LAogICAgICAgICAgICBvbkJhZENlcnRpZmljYXRlOiBvbkJhZENlcnRpZmljYXRlLAogICAgICAgICAgICBzdXBwb3J0ZWRQcm90b2NvbHM6IHN1cHBvcnRlZFByb3RvY29scywKICAgICAgICAgICAgdGltZW91dDogdGltZW91dCkKICAgICAgICAudGhlbigocmF3U29ja2V0KSA9PiBuZXcgU2VjdXJlU29ja2V0Ll8ocmF3U29ja2V0KSk7CiAgfQoKICAvLy8gTGlrZSBbY29ubmVjdF0sIGJ1dCByZXR1cm5zIGEgW0Z1dHVyZV0gdGhhdCBjb21wbGV0ZXMgd2l0aCBhCiAgLy8vIFtDb25uZWN0aW9uVGFza10gdGhhdCBjYW4gYmUgY2FuY2VsbGVkIGlmIHRoZSBbU2VjdXJlU29ja2V0XSBpcyBubwogIC8vLyBsb25nZXIgbmVlZGVkLgogIHN0YXRpYyBGdXR1cmU8Q29ubmVjdGlvblRhc2s8U2VjdXJlU29ja2V0Pj4gc3RhcnRDb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7U2VjdXJpdHlDb250ZXh0IGNvbnRleHQsCiAgICAgIGJvb2wgb25CYWRDZXJ0aWZpY2F0ZShYNTA5Q2VydGlmaWNhdGUgY2VydGlmaWNhdGUpLAogICAgICBMaXN0PFN0cmluZz4gc3VwcG9ydGVkUHJvdG9jb2xzfSkgewogICAgcmV0dXJuIFJhd1NlY3VyZVNvY2tldC5zdGFydENvbm5lY3QoaG9zdCwgcG9ydCwKICAgICAgICAgICAgY29udGV4dDogY29udGV4dCwKICAgICAgICAgICAgb25CYWRDZXJ0aWZpY2F0ZTogb25CYWRDZXJ0aWZpY2F0ZSwKICAgICAgICAgICAgc3VwcG9ydGVkUHJvdG9jb2xzOiBzdXBwb3J0ZWRQcm90b2NvbHMpCiAgICAgICAgLnRoZW4oKHJhd1N0YXRlKSB7CiAgICAgIEZ1dHVyZTxTZWN1cmVTb2NrZXQ+IHNvY2tldCA9CiAgICAgICAgICByYXdTdGF0ZS5zb2NrZXQudGhlbigocmF3U29ja2V0KSA9PiBuZXcgU2VjdXJlU29ja2V0Ll8ocmF3U29ja2V0KSk7CiAgICAgIHJldHVybiBuZXcgQ29ubmVjdGlvblRhc2s8U2VjdXJlU29ja2V0Pi5fKAogICAgICAgICAgc29ja2V0OiBzb2NrZXQsIG9uQ2FuY2VsOiByYXdTdGF0ZS5fb25DYW5jZWwpOwogICAgfSk7CiAgfQoKICAvKioKICAgKiBUYWtlcyBhbiBhbHJlYWR5IGNvbm5lY3RlZCBbc29ja2V0XSBhbmQgc3RhcnRzIGNsaWVudCBzaWRlIFRMUwogICAqIGhhbmRzaGFrZSB0byBtYWtlIHRoZSBjb21tdW5pY2F0aW9uIHNlY3VyZS4gV2hlbiB0aGUgcmV0dXJuZWQKICAgKiBmdXR1cmUgY29tcGxldGVzIHRoZSBbU2VjdXJlU29ja2V0XSBoYXMgY29tcGxldGVkIHRoZSBUTFMKICAgKiBoYW5kc2hha2UuIFVzaW5nIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgdGhhdCB0aGUgb3RoZXIgZW5kIG9mIHRoZQogICAqIGNvbm5lY3Rpb24gaXMgcHJlcGFyZWQgZm9yIFRMUyBoYW5kc2hha2UuCiAgICoKICAgKiBJZiB0aGUgW3NvY2tldF0gYWxyZWFkeSBoYXMgYSBzdWJzY3JpcHRpb24sIHRoaXMgc3Vic2NyaXB0aW9uCiAgICogd2lsbCBubyBsb25nZXIgcmVjZWl2ZSBhbmQgZXZlbnRzLiBJbiBtb3N0IGNhc2VzIGNhbGxpbmcKICAgKiBgcGF1c2VgIG9uIHRoaXMgc3Vic2NyaXB0aW9uIGJlZm9yZSBzdGFydGluZyBUTFMgaGFuZHNoYWtlIGlzCiAgICogdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLgogICAqCiAgICogVGhlIGdpdmVuIFtzb2NrZXRdIGlzIGNsb3NlZCBhbmQgbWF5IG5vdCBiZSB1c2VkIGFueW1vcmUuCiAgICoKICAgKiBJZiB0aGUgW2hvc3RdIGFyZ3VtZW50IGlzIHBhc3NlZCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGhvc3QgbmFtZQogICAqIGZvciB0aGUgVExTIGhhbmRzaGFrZS4gSWYgW2hvc3RdIGlzIG5vdCBwYXNzZWQgdGhlIGhvc3QgbmFtZSBmcm9tCiAgICogdGhlIFtzb2NrZXRdIHdpbGwgYmUgdXNlZC4gVGhlIFtob3N0XSBjYW4gYmUgZWl0aGVyIGEgW1N0cmluZ10gb3IKICAgKiBhbiBbSW50ZXJuZXRBZGRyZXNzXS4KICAgKgogICAqIFtzdXBwb3J0ZWRQcm90b2NvbHNdIGlzIGFuIG9wdGlvbmFsIGxpc3Qgb2YgcHJvdG9jb2xzIChpbiBkZWNyZWFzaW5nCiAgICogb3JkZXIgb2YgcHJlZmVyZW5jZSkgdG8gdXNlIGR1cmluZyB0aGUgQUxQTiBwcm90b2NvbCBuZWdvdGlhdGlvbiB3aXRoIHRoZQogICAqIHNlcnZlci4gIEV4YW1wbGUgdmFsdWVzIGFyZSAiaHR0cC8xLjEiIG9yICJoMiIuICBUaGUgc2VsZWN0ZWQgcHJvdG9jb2wKICAgKiBjYW4gYmUgb2J0YWluZWQgdmlhIFtTZWN1cmVTb2NrZXQuc2VsZWN0ZWRQcm90b2NvbF0uCiAgICoKICAgKiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBfbm90XyBjYXVzZSBhIEROUyBob3N0IGxvb2t1cC4gSWYgdGhlCiAgICogW2hvc3RdIHBhc3NlZCBpcyBhIFtTdHJpbmddIHRoZSBbSW50ZXJuZXRBZGRyZXNzXSBmb3IgdGhlCiAgICogcmVzdWx0aW5nIFtTZWN1cmVTb2NrZXRdIHdpbGwgaGF2ZSB0aGUgcGFzc2VkIGluIFtob3N0XSBhcyBpdHMKICAgKiBob3N0IHZhbHVlIGFuZCB0aGUgaW50ZXJuZXQgYWRkcmVzcyBvZiB0aGUgYWxyZWFkeSBjb25uZWN0ZWQKICAgKiBzb2NrZXQgYXMgaXRzIGFkZHJlc3MgdmFsdWUuCiAgICoKICAgKiBTZWUgW2Nvbm5lY3RdIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBhcmd1bWVudHMuCiAgICoKICAgKi8KICBzdGF0aWMgRnV0dXJlPFNlY3VyZVNvY2tldD4gc2VjdXJlKFNvY2tldCBzb2NrZXQsCiAgICAgIHtob3N0LAogICAgICBTZWN1cml0eUNvbnRleHQgY29udGV4dCwKICAgICAgYm9vbCBvbkJhZENlcnRpZmljYXRlKFg1MDlDZXJ0aWZpY2F0ZSBjZXJ0aWZpY2F0ZSksCiAgICAgIEBTaW5jZSgiMi42IikgTGlzdDxTdHJpbmc+IHN1cHBvcnRlZFByb3RvY29sc30pIHsKICAgIHJldHVybiAoKHNvY2tldCBhcyBkeW5hbWljIC8qX1NvY2tldCovKS5fZGV0YWNoUmF3KCkgYXMgRnV0dXJlKQogICAgICAgIC50aGVuPFJhd1NlY3VyZVNvY2tldD4oKGRldGFjaGVkUmF3KSB7CiAgICAgIHJldHVybiBSYXdTZWN1cmVTb2NrZXQuc2VjdXJlKGRldGFjaGVkUmF3WzBdIGFzIFJhd1NvY2tldCwKICAgICAgICAgIHN1YnNjcmlwdGlvbjogZGV0YWNoZWRSYXdbMV0gYXMgU3RyZWFtU3Vic2NyaXB0aW9uPFJhd1NvY2tldEV2ZW50PiwKICAgICAgICAgIGhvc3Q6IGhvc3QsCiAgICAgICAgICBjb250ZXh0OiBjb250ZXh0LAogICAgICAgICAgb25CYWRDZXJ0aWZpY2F0ZTogb25CYWRDZXJ0aWZpY2F0ZSwKICAgICAgICAgIHN1cHBvcnRlZFByb3RvY29sczogc3VwcG9ydGVkUHJvdG9jb2xzKTsKICAgIH0pLnRoZW48U2VjdXJlU29ja2V0PigocmF3KSA9PiBuZXcgU2VjdXJlU29ja2V0Ll8ocmF3KSk7CiAgfQoKICAvKioKICAgKiBUYWtlcyBhbiBhbHJlYWR5IGNvbm5lY3RlZCBbc29ja2V0XSBhbmQgc3RhcnRzIHNlcnZlciBzaWRlIFRMUwogICAqIGhhbmRzaGFrZSB0byBtYWtlIHRoZSBjb21tdW5pY2F0aW9uIHNlY3VyZS4gV2hlbiB0aGUgcmV0dXJuZWQKICAgKiBmdXR1cmUgY29tcGxldGVzIHRoZSBbU2VjdXJlU29ja2V0XSBoYXMgY29tcGxldGVkIHRoZSBUTFMKICAgKiBoYW5kc2hha2UuIFVzaW5nIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgdGhhdCB0aGUgb3RoZXIgZW5kIG9mIHRoZQogICAqIGNvbm5lY3Rpb24gaXMgZ29pbmcgdG8gc3RhcnQgdGhlIFRMUyBoYW5kc2hha2UuCiAgICoKICAgKiBJZiB0aGUgW3NvY2tldF0gYWxyZWFkeSBoYXMgYSBzdWJzY3JpcHRpb24sIHRoaXMgc3Vic2NyaXB0aW9uCiAgICogd2lsbCBubyBsb25nZXIgcmVjZWl2ZSBhbmQgZXZlbnRzLiBJbiBtb3N0IGNhc2VzIGNhbGxpbmcKICAgKiBbOnBhdXNlOl0gb24gdGhpcyBzdWJzY3JpcHRpb24gYmVmb3JlIHN0YXJ0aW5nIFRMUyBoYW5kc2hha2UgaXMKICAgKiB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uCiAgICoKICAgKiBJZiBzb21lIG9mIHRoZSBkYXRhIG9mIHRoZSBUTFMgaGFuZHNoYWtlIGhhcyBhbHJlYWR5IGJlZW4gcmVhZAogICAqIGZyb20gdGhlIHNvY2tldCB0aGlzIGRhdGEgY2FuIGJlIHBhc3NlZCBpbiB0aGUgW2J1ZmZlcmVkRGF0YV0KICAgKiBwYXJhbWV0ZXIuIFRoaXMgZGF0YSB3aWxsIGJlIHByb2Nlc3NlZCBiZWZvcmUgYW55IG90aGVyIGRhdGEKICAgKiBhdmFpbGFibGUgb24gdGhlIHNvY2tldC4KICAgKgogICAqIFNlZSBbU2VjdXJlU2VydmVyU29ja2V0LmJpbmRdIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZQogICAqIGFyZ3VtZW50cy4KICAgKgogICAqLwogIHN0YXRpYyBGdXR1cmU8U2VjdXJlU29ja2V0PiBzZWN1cmVTZXJ2ZXIoCiAgICAgIFNvY2tldCBzb2NrZXQsIFNlY3VyaXR5Q29udGV4dCBjb250ZXh0LAogICAgICB7TGlzdDxpbnQ+IGJ1ZmZlcmVkRGF0YSwKICAgICAgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlLAogICAgICBib29sIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2UsCiAgICAgIExpc3Q8U3RyaW5nPiBzdXBwb3J0ZWRQcm90b2NvbHN9KSB7CiAgICByZXR1cm4gKChzb2NrZXQgYXMgZHluYW1pYyAvKl9Tb2NrZXQqLykuX2RldGFjaFJhdygpIGFzIEZ1dHVyZSkKICAgICAgICAudGhlbjxSYXdTZWN1cmVTb2NrZXQ+KChkZXRhY2hlZFJhdykgewogICAgICByZXR1cm4gUmF3U2VjdXJlU29ja2V0LnNlY3VyZVNlcnZlcihkZXRhY2hlZFJhd1swXSBhcyBSYXdTb2NrZXQsIGNvbnRleHQsCiAgICAgICAgICBzdWJzY3JpcHRpb246IGRldGFjaGVkUmF3WzFdIGFzIFN0cmVhbVN1YnNjcmlwdGlvbjxSYXdTb2NrZXRFdmVudD4sCiAgICAgICAgICBidWZmZXJlZERhdGE6IGJ1ZmZlcmVkRGF0YSwKICAgICAgICAgIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTogcmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICAgICAgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlOiByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgICBzdXBwb3J0ZWRQcm90b2NvbHM6IHN1cHBvcnRlZFByb3RvY29scyk7CiAgICB9KS50aGVuPFNlY3VyZVNvY2tldD4oKHJhdykgPT4gbmV3IFNlY3VyZVNvY2tldC5fKHJhdykpOwogIH0KCiAgLyoqCiAgICogR2V0IHRoZSBwZWVyIGNlcnRpZmljYXRlIGZvciBhIGNvbm5lY3RlZCBTZWN1cmVTb2NrZXQuICBJZiB0aGlzCiAgICogU2VjdXJlU29ja2V0IGlzIHRoZSBzZXJ2ZXIgZW5kIG9mIGEgc2VjdXJlIHNvY2tldCBjb25uZWN0aW9uLAogICAqIFtwZWVyQ2VydGlmaWNhdGVdIHdpbGwgcmV0dXJuIHRoZSBjbGllbnQgY2VydGlmaWNhdGUsIG9yIG51bGwsIGlmIG5vCiAgICogY2xpZW50IGNlcnRpZmljYXRlIHdhcyByZWNlaXZlZC4gIElmIGl0IGlzIHRoZSBjbGllbnQgZW5kLAogICAqIFtwZWVyQ2VydGlmaWNhdGVdIHdpbGwgcmV0dXJuIHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZS4KICAgKi8KICBYNTA5Q2VydGlmaWNhdGUgZ2V0IHBlZXJDZXJ0aWZpY2F0ZTsKCiAgLyoqCiAgICogVGhlIHByb3RvY29sIHdoaWNoIHdhcyBzZWxlY3RlZCBkdXJpbmcgQUxQTiBwcm90b2NvbCBuZWdvdGlhdGlvbi4KICAgKgogICAqIFJldHVybnMgbnVsbCBpZiBvbmUgb2YgdGhlIHBlZXJzIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3IgQUxQTiwgZGlkIG5vdAogICAqIHNwZWNpZnkgYSBsaXN0IG9mIHN1cHBvcnRlZCBBTFBOIHByb3RvY29scyBvciB0aGVyZSB3YXMgbm8gY29tbW9uCiAgICogcHJvdG9jb2wgYmV0d2VlbiBjbGllbnQgYW5kIHNlcnZlci4KICAgKi8KICBTdHJpbmcgZ2V0IHNlbGVjdGVkUHJvdG9jb2w7CgogIC8qKgogICAqIFJlbmVnb3RpYXRlIGFuIGV4aXN0aW5nIHNlY3VyZSBjb25uZWN0aW9uLCByZW5ld2luZyB0aGUgc2Vzc2lvbiBrZXlzCiAgICogYW5kIHBvc3NpYmx5IGNoYW5naW5nIHRoZSBjb25uZWN0aW9uIHByb3BlcnRpZXMuCiAgICoKICAgKiBUaGlzIHJlcGVhdHMgdGhlIFNTTCBvciBUTFMgaGFuZHNoYWtlLCB3aXRoIG9wdGlvbnMgdGhhdCBhbGxvdyBjbGVhcmluZwogICAqIHRoZSBzZXNzaW9uIGNhY2hlIGFuZCByZXF1ZXN0aW5nIGEgY2xpZW50IGNlcnRpZmljYXRlLgogICAqLwogIHZvaWQgcmVuZWdvdGlhdGUoCiAgICAgIHtib29sIHVzZVNlc3Npb25DYWNoZTogdHJ1ZSwKICAgICAgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlLAogICAgICBib29sIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2V9KTsKfQoKLyoqCiAqIFJhd1NlY3VyZVNvY2tldCBwcm92aWRlcyBhIHNlY3VyZSAoU1NMIG9yIFRMUykgbmV0d29yayBjb25uZWN0aW9uLgogKiBDbGllbnQgY29ubmVjdGlvbnMgdG8gYSBzZXJ2ZXIgYXJlIHByb3ZpZGVkIGJ5IGNhbGxpbmcKICogUmF3U2VjdXJlU29ja2V0LmNvbm5lY3QuICBBIHNlY3VyZSBzZXJ2ZXIsIGNyZWF0ZWQgd2l0aAogKiBbUmF3U2VjdXJlU2VydmVyU29ja2V0XSwgYWxzbyByZXR1cm5zIFJhd1NlY3VyZVNvY2tldCBvYmplY3RzIHJlcHJlc2VudGluZwogKiB0aGUgc2VydmVyIGVuZCBvZiBhIHNlY3VyZSBjb25uZWN0aW9uLgogKiBUaGUgY2VydGlmaWNhdGUgcHJvdmlkZWQgYnkgdGhlIHNlcnZlciBpcyBjaGVja2VkCiAqIHVzaW5nIHRoZSB0cnVzdGVkIGNlcnRpZmljYXRlcyBzZXQgaW4gdGhlIFNlY3VyaXR5Q29udGV4dCBvYmplY3QuCiAqIFRoZSBkZWZhdWx0IFtTZWN1cml0eUNvbnRleHRdIG9iamVjdCBjb250YWlucyBhIGJ1aWx0LWluIHNldCBvZiB0cnVzdGVkCiAqIHJvb3QgY2VydGlmaWNhdGVzIGZvciB3ZWxsLWtub3duIGNlcnRpZmljYXRlIGF1dGhvcml0aWVzLgogKi8KYWJzdHJhY3QgY2xhc3MgUmF3U2VjdXJlU29ja2V0IGltcGxlbWVudHMgUmF3U29ja2V0IHsKICAvKioKICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHNlY3VyZSBjbGllbnQgc29ja2V0IGFuZCBjb25uZWN0IGl0IHRvIHRoZSBnaXZlbgogICAqIGhvc3Qgb24gdGhlIGdpdmVuIHBvcnQuIFRoZSByZXR1cm5lZCBbRnV0dXJlXSBpcyBjb21wbGV0ZWQgd2l0aCB0aGUKICAgKiBSYXdTZWN1cmVTb2NrZXQgd2hlbiBpdCBpcyBjb25uZWN0ZWQgYW5kIHJlYWR5IGZvciBzdWJzY3JpcHRpb24uCiAgICoKICAgKiBUaGUgY2VydGlmaWNhdGUgcHJvdmlkZWQgYnkgdGhlIHNlcnZlciBpcyBjaGVja2VkIHVzaW5nIHRoZSB0cnVzdGVkCiAgICogY2VydGlmaWNhdGVzIHNldCBpbiB0aGUgU2VjdXJpdHlDb250ZXh0IG9iamVjdCBJZiBhIGNlcnRpZmljYXRlIGFuZCBrZXkgYXJlCiAgICogc2V0IG9uIHRoZSBjbGllbnQsIHVzaW5nIFtTZWN1cml0eUNvbnRleHQudXNlQ2VydGlmaWNhdGVDaGFpbl0gYW5kCiAgICogW1NlY3VyaXR5Q29udGV4dC51c2VQcml2YXRlS2V5XSwgYW5kIHRoZSBzZXJ2ZXIgYXNrcyBmb3IgYSBjbGllbnQKICAgKiBjZXJ0aWZpY2F0ZSwgdGhlbiB0aGF0IGNsaWVudCBjZXJ0aWZpY2F0ZSBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIuCiAgICoKICAgKiBbb25CYWRDZXJ0aWZpY2F0ZV0gaXMgYW4gb3B0aW9uYWwgaGFuZGxlciBmb3IgdW52ZXJpZmlhYmxlIGNlcnRpZmljYXRlcy4KICAgKiBUaGUgaGFuZGxlciByZWNlaXZlcyB0aGUgW1g1MDlDZXJ0aWZpY2F0ZV0sIGFuZCBjYW4gaW5zcGVjdCBpdCBhbmQKICAgKiBkZWNpZGUgKG9yIGxldCB0aGUgdXNlciBkZWNpZGUpIHdoZXRoZXIgdG8gYWNjZXB0CiAgICogdGhlIGNvbm5lY3Rpb24gb3Igbm90LiAgVGhlIGhhbmRsZXIgc2hvdWxkIHJldHVybiB0cnVlCiAgICogdG8gY29udGludWUgdGhlIFtSYXdTZWN1cmVTb2NrZXRdIGNvbm5lY3Rpb24uCiAgICoKICAgKiBbc3VwcG9ydGVkUHJvdG9jb2xzXSBpcyBhbiBvcHRpb25hbCBsaXN0IG9mIHByb3RvY29scyAoaW4gZGVjcmVhc2luZwogICAqIG9yZGVyIG9mIHByZWZlcmVuY2UpIHRvIHVzZSBkdXJpbmcgdGhlIEFMUE4gcHJvdG9jb2wgbmVnb3RpYXRpb24gd2l0aCB0aGUKICAgKiBzZXJ2ZXIuICBFeGFtcGxlIHZhbHVlcyBhcmUgImh0dHAvMS4xIiBvciAiaDIiLiAgVGhlIHNlbGVjdGVkIHByb3RvY29sCiAgICogY2FuIGJlIG9idGFpbmVkIHZpYSBbUmF3U2VjdXJlU29ja2V0LnNlbGVjdGVkUHJvdG9jb2xdLgogICAqLwogIHN0YXRpYyBGdXR1cmU8UmF3U2VjdXJlU29ja2V0PiBjb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7U2VjdXJpdHlDb250ZXh0IGNvbnRleHQsCiAgICAgIGJvb2wgb25CYWRDZXJ0aWZpY2F0ZShYNTA5Q2VydGlmaWNhdGUgY2VydGlmaWNhdGUpLAogICAgICBMaXN0PFN0cmluZz4gc3VwcG9ydGVkUHJvdG9jb2xzLAogICAgICBEdXJhdGlvbiB0aW1lb3V0fSkgewogICAgX1Jhd1NlY3VyZVNvY2tldC5fdmVyaWZ5RmllbGRzKAogICAgICAgIGhvc3QsIHBvcnQsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIG9uQmFkQ2VydGlmaWNhdGUpOwogICAgcmV0dXJuIFJhd1NvY2tldC5jb25uZWN0KGhvc3QsIHBvcnQsIHRpbWVvdXQ6IHRpbWVvdXQpLnRoZW4oKHNvY2tldCkgewogICAgICByZXR1cm4gc2VjdXJlKHNvY2tldCwKICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsCiAgICAgICAgICBvbkJhZENlcnRpZmljYXRlOiBvbkJhZENlcnRpZmljYXRlLAogICAgICAgICAgc3VwcG9ydGVkUHJvdG9jb2xzOiBzdXBwb3J0ZWRQcm90b2NvbHMpOwogICAgfSk7CiAgfQoKICAvLy8gTGlrZSBbY29ubmVjdF0sIGJ1dCByZXR1cm5zIGEgW0Z1dHVyZV0gdGhhdCBjb21wbGV0ZXMgd2l0aCBhCiAgLy8vIFtDb25uZWN0aW9uVGFza10gdGhhdCBjYW4gYmUgY2FuY2VsbGVkIGlmIHRoZSBbUmF3U2VjdXJlU29ja2V0XSBpcyBubwogIC8vLyBsb25nZXIgbmVlZGVkLgogIHN0YXRpYyBGdXR1cmU8Q29ubmVjdGlvblRhc2s8UmF3U2VjdXJlU29ja2V0Pj4gc3RhcnRDb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7U2VjdXJpdHlDb250ZXh0IGNvbnRleHQsCiAgICAgIGJvb2wgb25CYWRDZXJ0aWZpY2F0ZShYNTA5Q2VydGlmaWNhdGUgY2VydGlmaWNhdGUpLAogICAgICBMaXN0PFN0cmluZz4gc3VwcG9ydGVkUHJvdG9jb2xzfSkgewogICAgcmV0dXJuIFJhd1NvY2tldC5zdGFydENvbm5lY3QoaG9zdCwgcG9ydCkKICAgICAgICAudGhlbigoQ29ubmVjdGlvblRhc2s8UmF3U29ja2V0PiByYXdTdGF0ZSkgewogICAgICBGdXR1cmU8UmF3U2VjdXJlU29ja2V0PiBzb2NrZXQgPSByYXdTdGF0ZS5zb2NrZXQudGhlbigocmF3U29ja2V0KSB7CiAgICAgICAgcmV0dXJuIHNlY3VyZShyYXdTb2NrZXQsCiAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsCiAgICAgICAgICAgIG9uQmFkQ2VydGlmaWNhdGU6IG9uQmFkQ2VydGlmaWNhdGUsCiAgICAgICAgICAgIHN1cHBvcnRlZFByb3RvY29sczogc3VwcG9ydGVkUHJvdG9jb2xzKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBuZXcgQ29ubmVjdGlvblRhc2s8UmF3U2VjdXJlU29ja2V0Pi5fKAogICAgICAgICAgc29ja2V0OiBzb2NrZXQsIG9uQ2FuY2VsOiByYXdTdGF0ZS5fb25DYW5jZWwpOwogICAgfSk7CiAgfQoKICAvKioKICAgKiBUYWtlcyBhbiBhbHJlYWR5IGNvbm5lY3RlZCBbc29ja2V0XSBhbmQgc3RhcnRzIGNsaWVudCBzaWRlIFRMUwogICAqIGhhbmRzaGFrZSB0byBtYWtlIHRoZSBjb21tdW5pY2F0aW9uIHNlY3VyZS4gV2hlbiB0aGUgcmV0dXJuZWQKICAgKiBmdXR1cmUgY29tcGxldGVzIHRoZSBbUmF3U2VjdXJlU29ja2V0XSBoYXMgY29tcGxldGVkIHRoZSBUTFMKICAgKiBoYW5kc2hha2UuIFVzaW5nIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgdGhhdCB0aGUgb3RoZXIgZW5kIG9mIHRoZQogICAqIGNvbm5lY3Rpb24gaXMgcHJlcGFyZWQgZm9yIFRMUyBoYW5kc2hha2UuCiAgICoKICAgKiBJZiB0aGUgW3NvY2tldF0gYWxyZWFkeSBoYXMgYSBzdWJzY3JpcHRpb24sIHBhc3MgdGhlIGV4aXN0aW5nCiAgICogc3Vic2NyaXB0aW9uIGluIHRoZSBbc3Vic2NyaXB0aW9uXSBwYXJhbWV0ZXIuIFRoZSBbc2VjdXJlXQogICAqIG9wZXJhdGlvbiB3aWxsIHRha2Ugb3ZlciB0aGUgc3Vic2NyaXB0aW9uIGJ5IHJlcGxhY2luZyB0aGUKICAgKiBoYW5kbGVycyB3aXRoIGl0IG93biBzZWN1cmUgcHJvY2Vzc2luZy4gVGhlIGNhbGxlciBtdXN0IG5vdCB0b3VjaAogICAqIHRoaXMgc3Vic2NyaXB0aW9uIGFueW1vcmUuIFBhc3NpbmcgYSBwYXVzZWQgc3Vic2NyaXB0aW9uIGlzIGFuCiAgICogZXJyb3IuCiAgICoKICAgKiBJZiB0aGUgW2hvc3RdIGFyZ3VtZW50IGlzIHBhc3NlZCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGhvc3QgbmFtZQogICAqIGZvciB0aGUgVExTIGhhbmRzaGFrZS4gSWYgW2hvc3RdIGlzIG5vdCBwYXNzZWQgdGhlIGhvc3QgbmFtZSBmcm9tCiAgICogdGhlIFtzb2NrZXRdIHdpbGwgYmUgdXNlZC4gVGhlIFtob3N0XSBjYW4gYmUgZWl0aGVyIGEgW1N0cmluZ10gb3IKICAgKiBhbiBbSW50ZXJuZXRBZGRyZXNzXS4KICAgKgogICAqIFtzdXBwb3J0ZWRQcm90b2NvbHNdIGlzIGFuIG9wdGlvbmFsIGxpc3Qgb2YgcHJvdG9jb2xzIChpbiBkZWNyZWFzaW5nCiAgICogb3JkZXIgb2YgcHJlZmVyZW5jZSkgdG8gdXNlIGR1cmluZyB0aGUgQUxQTiBwcm90b2NvbCBuZWdvdGlhdGlvbiB3aXRoIHRoZQogICAqIHNlcnZlci4gIEV4YW1wbGUgdmFsdWVzIGFyZSAiaHR0cC8xLjEiIG9yICJoMiIuICBUaGUgc2VsZWN0ZWQgcHJvdG9jb2wKICAgKiBjYW4gYmUgb2J0YWluZWQgdmlhIFtTZWN1cmVTb2NrZXQuc2VsZWN0ZWRQcm90b2NvbF0uCiAgICoKICAgKiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBfbm90XyBjYXVzZSBhIEROUyBob3N0IGxvb2t1cC4gSWYgdGhlCiAgICogW2hvc3RdIHBhc3NlZCBpcyBhIFtTdHJpbmddIHRoZSBbSW50ZXJuZXRBZGRyZXNzXSBmb3IgdGhlCiAgICogcmVzdWx0aW5nIFtTZWN1cmVTb2NrZXRdIHdpbGwgaGF2ZSB0aGlzIHBhc3NlZCBpbiBbaG9zdF0gYXMgaXRzCiAgICogaG9zdCB2YWx1ZSBhbmQgdGhlIGludGVybmV0IGFkZHJlc3Mgb2YgdGhlIGFscmVhZHkgY29ubmVjdGVkCiAgICogc29ja2V0IGFzIGl0cyBhZGRyZXNzIHZhbHVlLgogICAqCiAgICogU2VlIFtjb25uZWN0XSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgYXJndW1lbnRzLgogICAqCiAgICovCiAgc3RhdGljIEZ1dHVyZTxSYXdTZWN1cmVTb2NrZXQ+IHNlY3VyZShSYXdTb2NrZXQgc29ja2V0LAogICAgICB7U3RyZWFtU3Vic2NyaXB0aW9uPFJhd1NvY2tldEV2ZW50PiBzdWJzY3JpcHRpb24sCiAgICAgIGhvc3QsCiAgICAgIFNlY3VyaXR5Q29udGV4dCBjb250ZXh0LAogICAgICBib29sIG9uQmFkQ2VydGlmaWNhdGUoWDUwOUNlcnRpZmljYXRlIGNlcnRpZmljYXRlKSwKICAgICAgTGlzdDxTdHJpbmc+IHN1cHBvcnRlZFByb3RvY29sc30pIHsKICAgIHNvY2tldC5yZWFkRXZlbnRzRW5hYmxlZCA9IGZhbHNlOwogICAgc29ja2V0LndyaXRlRXZlbnRzRW5hYmxlZCA9IGZhbHNlOwogICAgcmV0dXJuIF9SYXdTZWN1cmVTb2NrZXQuY29ubmVjdCgKICAgICAgICBob3N0ICE9IG51bGwgPyBob3N0IDogc29ja2V0LmFkZHJlc3MuaG9zdCwgc29ja2V0LnBvcnQsCiAgICAgICAgaXNfc2VydmVyOiBmYWxzZSwKICAgICAgICBzb2NrZXQ6IHNvY2tldCwKICAgICAgICBzdWJzY3JpcHRpb246IHN1YnNjcmlwdGlvbiwKICAgICAgICBjb250ZXh0OiBjb250ZXh0LAogICAgICAgIG9uQmFkQ2VydGlmaWNhdGU6IG9uQmFkQ2VydGlmaWNhdGUsCiAgICAgICAgc3VwcG9ydGVkUHJvdG9jb2xzOiBzdXBwb3J0ZWRQcm90b2NvbHMpOwogIH0KCiAgLyoqCiAgICogVGFrZXMgYW4gYWxyZWFkeSBjb25uZWN0ZWQgW3NvY2tldF0gYW5kIHN0YXJ0cyBzZXJ2ZXIgc2lkZSBUTFMKICAgKiBoYW5kc2hha2UgdG8gbWFrZSB0aGUgY29tbXVuaWNhdGlvbiBzZWN1cmUuIFdoZW4gdGhlIHJldHVybmVkCiAgICogZnV0dXJlIGNvbXBsZXRlcyB0aGUgW1Jhd1NlY3VyZVNvY2tldF0gaGFzIGNvbXBsZXRlZCB0aGUgVExTCiAgICogaGFuZHNoYWtlLiBVc2luZyB0aGlzIGZ1bmN0aW9uIHJlcXVpcmVzIHRoYXQgdGhlIG90aGVyIGVuZCBvZiB0aGUKICAgKiBjb25uZWN0aW9uIGlzIGdvaW5nIHRvIHN0YXJ0IHRoZSBUTFMgaGFuZHNoYWtlLgogICAqCiAgICogSWYgdGhlIFtzb2NrZXRdIGFscmVhZHkgaGFzIGEgc3Vic2NyaXB0aW9uLCBwYXNzIHRoZSBleGlzdGluZwogICAqIHN1YnNjcmlwdGlvbiBpbiB0aGUgW3N1YnNjcmlwdGlvbl0gcGFyYW1ldGVyLiBUaGUgW3NlY3VyZVNlcnZlcl0KICAgKiBvcGVyYXRpb24gd2lsbCB0YWtlIG92ZXIgdGhlIHN1YnNjcmlwdGlvbiBieSByZXBsYWNpbmcgdGhlCiAgICogaGFuZGxlcnMgd2l0aCBpdCBvd24gc2VjdXJlIHByb2Nlc3NpbmcuIFRoZSBjYWxsZXIgbXVzdCBub3QgdG91Y2gKICAgKiB0aGlzIHN1YnNjcmlwdGlvbiBhbnltb3JlLiBQYXNzaW5nIGEgcGF1c2VkIHN1YnNjcmlwdGlvbiBpcyBhbgogICAqIGVycm9yLgogICAqCiAgICogSWYgc29tZSBvZiB0aGUgZGF0YSBvZiB0aGUgVExTIGhhbmRzaGFrZSBoYXMgYWxyZWFkeSBiZWVuIHJlYWQKICAgKiBmcm9tIHRoZSBzb2NrZXQgdGhpcyBkYXRhIGNhbiBiZSBwYXNzZWQgaW4gdGhlIFtidWZmZXJlZERhdGFdCiAgICogcGFyYW1ldGVyLiBUaGlzIGRhdGEgd2lsbCBiZSBwcm9jZXNzZWQgYmVmb3JlIGFueSBvdGhlciBkYXRhCiAgICogYXZhaWxhYmxlIG9uIHRoZSBzb2NrZXQuCiAgICoKICAgKiBTZWUgW1Jhd1NlY3VyZVNlcnZlclNvY2tldC5iaW5kXSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUKICAgKiBhcmd1bWVudHMuCiAgICoKICAgKi8KICBzdGF0aWMgRnV0dXJlPFJhd1NlY3VyZVNvY2tldD4gc2VjdXJlU2VydmVyKAogICAgICBSYXdTb2NrZXQgc29ja2V0LCBTZWN1cml0eUNvbnRleHQgY29udGV4dCwKICAgICAge1N0cmVhbVN1YnNjcmlwdGlvbjxSYXdTb2NrZXRFdmVudD4gc3Vic2NyaXB0aW9uLAogICAgICBMaXN0PGludD4gYnVmZmVyZWREYXRhLAogICAgICBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2UsCiAgICAgIGJvb2wgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlOiBmYWxzZSwKICAgICAgTGlzdDxTdHJpbmc+IHN1cHBvcnRlZFByb3RvY29sc30pIHsKICAgIHNvY2tldC5yZWFkRXZlbnRzRW5hYmxlZCA9IGZhbHNlOwogICAgc29ja2V0LndyaXRlRXZlbnRzRW5hYmxlZCA9IGZhbHNlOwogICAgcmV0dXJuIF9SYXdTZWN1cmVTb2NrZXQuY29ubmVjdChzb2NrZXQuYWRkcmVzcywgc29ja2V0LnJlbW90ZVBvcnQsCiAgICAgICAgY29udGV4dDogY29udGV4dCwKICAgICAgICBpc19zZXJ2ZXI6IHRydWUsCiAgICAgICAgc29ja2V0OiBzb2NrZXQsCiAgICAgICAgc3Vic2NyaXB0aW9uOiBzdWJzY3JpcHRpb24sCiAgICAgICAgYnVmZmVyZWREYXRhOiBidWZmZXJlZERhdGEsCiAgICAgICAgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOiByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlOiByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgc3VwcG9ydGVkUHJvdG9jb2xzOiBzdXBwb3J0ZWRQcm90b2NvbHMpOwogIH0KCiAgLyoqCiAgICogUmVuZWdvdGlhdGUgYW4gZXhpc3Rpbmcgc2VjdXJlIGNvbm5lY3Rpb24sIHJlbmV3aW5nIHRoZSBzZXNzaW9uIGtleXMKICAgKiBhbmQgcG9zc2libHkgY2hhbmdpbmcgdGhlIGNvbm5lY3Rpb24gcHJvcGVydGllcy4KICAgKgogICAqIFRoaXMgcmVwZWF0cyB0aGUgU1NMIG9yIFRMUyBoYW5kc2hha2UsIHdpdGggb3B0aW9ucyB0aGF0IGFsbG93IGNsZWFyaW5nCiAgICogdGhlIHNlc3Npb24gY2FjaGUgYW5kIHJlcXVlc3RpbmcgYSBjbGllbnQgY2VydGlmaWNhdGUuCiAgICovCiAgdm9pZCByZW5lZ290aWF0ZSgKICAgICAge2Jvb2wgdXNlU2Vzc2lvbkNhY2hlOiB0cnVlLAogICAgICBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2UsCiAgICAgIGJvb2wgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlOiBmYWxzZX0pOwoKICAvKioKICAgKiBHZXQgdGhlIHBlZXIgY2VydGlmaWNhdGUgZm9yIGEgY29ubmVjdGVkIFJhd1NlY3VyZVNvY2tldC4gIElmIHRoaXMKICAgKiBSYXdTZWN1cmVTb2NrZXQgaXMgdGhlIHNlcnZlciBlbmQgb2YgYSBzZWN1cmUgc29ja2V0IGNvbm5lY3Rpb24sCiAgICogW3BlZXJDZXJ0aWZpY2F0ZV0gd2lsbCByZXR1cm4gdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSwgb3IgbnVsbCwgaWYgbm8KICAgKiBjbGllbnQgY2VydGlmaWNhdGUgd2FzIHJlY2VpdmVkLiAgSWYgaXQgaXMgdGhlIGNsaWVudCBlbmQsCiAgICogW3BlZXJDZXJ0aWZpY2F0ZV0gd2lsbCByZXR1cm4gdGhlIHNlcnZlcidzIGNlcnRpZmljYXRlLgogICAqLwogIFg1MDlDZXJ0aWZpY2F0ZSBnZXQgcGVlckNlcnRpZmljYXRlOwoKICAvKioKICAgKiBUaGUgcHJvdG9jb2wgd2hpY2ggd2FzIHNlbGVjdGVkIGR1cmluZyBwcm90b2NvbCBuZWdvdGlhdGlvbi4KICAgKgogICAqIFJldHVybnMgbnVsbCBpZiBvbmUgb2YgdGhlIHBlZXJzIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3IgQUxQTiwgZGlkIG5vdAogICAqIHNwZWNpZnkgYSBsaXN0IG9mIHN1cHBvcnRlZCBBTFBOIHByb3RvY29scyBvciB0aGVyZSB3YXMgbm8gY29tbW9uCiAgICogcHJvdG9jb2wgYmV0d2VlbiBjbGllbnQgYW5kIHNlcnZlci4KICAgKi8KICBTdHJpbmcgZ2V0IHNlbGVjdGVkUHJvdG9jb2w7Cn0KCi8qKgogKiBYNTA5Q2VydGlmaWNhdGUgcmVwcmVzZW50cyBhbiBTU0wgY2VydGlmaWNhdGUsIHdpdGggYWNjZXNzb3JzIHRvCiAqIGdldCB0aGUgZmllbGRzIG9mIHRoZSBjZXJ0aWZpY2F0ZS4KICovCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKYWJzdHJhY3QgY2xhc3MgWDUwOUNlcnRpZmljYXRlIHsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgZXh0ZXJuYWwgZmFjdG9yeSBYNTA5Q2VydGlmaWNhdGUuXygpOwoKICAvLy8gVGhlIERFUiBlbmNvZGVkIGJ5dGVzIG9mIHRoZSBjZXJ0aWZpY2F0ZS4KICBVaW50OExpc3QgZ2V0IGRlcjsKCiAgLy8vIFRoZSBQRU0gZW5jb2RlZCBTdHJpbmcgb2YgdGhlIGNlcnRpZmljYXRlLgogIFN0cmluZyBnZXQgcGVtOwoKICAvLy8gVGhlIFNIQTEgaGFzaCBvZiB0aGUgY2VydGlmaWNhdGUuCiAgVWludDhMaXN0IGdldCBzaGExOwoKICBTdHJpbmcgZ2V0IHN1YmplY3Q7CiAgU3RyaW5nIGdldCBpc3N1ZXI7CiAgRGF0ZVRpbWUgZ2V0IHN0YXJ0VmFsaWRpdHk7CiAgRGF0ZVRpbWUgZ2V0IGVuZFZhbGlkaXR5Owp9CgpjbGFzcyBfRmlsdGVyU3RhdHVzIHsKICBib29sIHByb2dyZXNzID0gZmFsc2U7IC8vIFRoZSBmaWx0ZXIgcmVhZCBvciB3cm90ZSBkYXRhIHRvIHRoZSBidWZmZXJzLgogIGJvb2wgcmVhZEVtcHR5ID0gdHJ1ZTsgLy8gVGhlIHJlYWQgYnVmZmVycyBhbmQgZGVjcnlwdGlvbiBmaWx0ZXIgYXJlIGVtcHR5LgogIGJvb2wgd3JpdGVFbXB0eSA9IHRydWU7IC8vIFRoZSB3cml0ZSBidWZmZXJzIGFuZCBlbmNyeXB0aW9uIGZpbHRlciBhcmUgZW1wdHkuCiAgLy8gVGhlc2UgYXJlIHNldCBpZiBhIGJ1ZmZlciBjaGFuZ2VzIHN0YXRlIGZyb20gZW1wdHkgb3IgZnVsbC4KICBib29sIHJlYWRQbGFpbnRleHROb0xvbmdlckVtcHR5ID0gZmFsc2U7CiAgYm9vbCB3cml0ZVBsYWludGV4dE5vTG9uZ2VyRnVsbCA9IGZhbHNlOwogIGJvb2wgcmVhZEVuY3J5cHRlZE5vTG9uZ2VyRnVsbCA9IGZhbHNlOwogIGJvb2wgd3JpdGVFbmNyeXB0ZWROb0xvbmdlckVtcHR5ID0gZmFsc2U7CgogIF9GaWx0ZXJTdGF0dXMoKTsKfQoKY2xhc3MgX1Jhd1NlY3VyZVNvY2tldCBleHRlbmRzIFN0cmVhbTxSYXdTb2NrZXRFdmVudD4KICAgIGltcGxlbWVudHMgUmF3U2VjdXJlU29ja2V0IHsKICAvLyBTdGF0dXMgc3RhdGVzCiAgc3RhdGljIGNvbnN0IGludCBoYW5kc2hha2VTdGF0dXMgPSAyMDE7CiAgc3RhdGljIGNvbnN0IGludCBjb25uZWN0ZWRTdGF0dXMgPSAyMDI7CiAgc3RhdGljIGNvbnN0IGludCBjbG9zZWRTdGF0dXMgPSAyMDM7CgogIC8vIEJ1ZmZlciBpZGVudGlmaWVycy4KICAvLyBUaGVzZSBtdXN0IGFncmVlIHdpdGggdGhvc2UgaW4gdGhlIG5hdGl2ZSBDKysgaW1wbGVtZW50YXRpb24uCiAgc3RhdGljIGNvbnN0IGludCByZWFkUGxhaW50ZXh0SWQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgd3JpdGVQbGFpbnRleHRJZCA9IDE7CiAgc3RhdGljIGNvbnN0IGludCByZWFkRW5jcnlwdGVkSWQgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgd3JpdGVFbmNyeXB0ZWRJZCA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBidWZmZXJDb3VudCA9IDQ7CgogIC8vIElzIGEgYnVmZmVyIGlkZW50aWZpZXIgZm9yIGFuIGVuY3J5cHRlZCBidWZmZXI/CiAgc3RhdGljIGJvb2wgX2lzQnVmZmVyRW5jcnlwdGVkKGludCBpZGVudGlmaWVyKSA9PgogICAgICBpZGVudGlmaWVyID49IHJlYWRFbmNyeXB0ZWRJZDsKCiAgUmF3U29ja2V0IF9zb2NrZXQ7CiAgZmluYWwgQ29tcGxldGVyPF9SYXdTZWN1cmVTb2NrZXQ+IF9oYW5kc2hha2VDb21wbGV0ZSA9CiAgICAgIG5ldyBDb21wbGV0ZXI8X1Jhd1NlY3VyZVNvY2tldD4oKTsKICBTdHJlYW1Db250cm9sbGVyPFJhd1NvY2tldEV2ZW50PiBfY29udHJvbGxlcjsKICBTdHJlYW08UmF3U29ja2V0RXZlbnQ+IF9zdHJlYW07CiAgU3RyZWFtU3Vic2NyaXB0aW9uPFJhd1NvY2tldEV2ZW50PiBfc29ja2V0U3Vic2NyaXB0aW9uOwogIExpc3Q8aW50PiBfYnVmZmVyZWREYXRhOwogIGludCBfYnVmZmVyZWREYXRhSW5kZXggPSAwOwogIGZpbmFsIEludGVybmV0QWRkcmVzcyBhZGRyZXNzOwogIGZpbmFsIGJvb2wgaXNfc2VydmVyOwogIFNlY3VyaXR5Q29udGV4dCBjb250ZXh0OwogIGZpbmFsIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOwogIGZpbmFsIGJvb2wgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlOwogIGZpbmFsIEZ1bmN0aW9uIG9uQmFkQ2VydGlmaWNhdGU7CgogIHZhciBfc3RhdHVzID0gaGFuZHNoYWtlU3RhdHVzOwogIGJvb2wgX3dyaXRlRXZlbnRzRW5hYmxlZCA9IHRydWU7CiAgYm9vbCBfcmVhZEV2ZW50c0VuYWJsZWQgPSB0cnVlOwogIGludCBfcGF1c2VDb3VudCA9IDA7CiAgYm9vbCBfcGVuZGluZ1JlYWRFdmVudCA9IGZhbHNlOwogIGJvb2wgX3NvY2tldENsb3NlZFJlYWQgPSBmYWxzZTsgLy8gVGhlIG5ldHdvcmsgc29ja2V0IGlzIGNsb3NlZCBmb3IgcmVhZGluZy4KICBib29sIF9zb2NrZXRDbG9zZWRXcml0ZSA9IGZhbHNlOyAvLyBUaGUgbmV0d29yayBzb2NrZXQgaXMgY2xvc2VkIGZvciB3cml0aW5nLgogIGJvb2wgX2Nsb3NlZFJlYWQgPSBmYWxzZTsgLy8gVGhlIHNlY3VyZSBzb2NrZXQgaGFzIGZpcmVkIGFuIG9uQ2xvc2VkIGV2ZW50LgogIGJvb2wgX2Nsb3NlZFdyaXRlID0gZmFsc2U7IC8vIFRoZSBzZWN1cmUgc29ja2V0IGhhcyBiZWVuIGNsb3NlZCBmb3Igd3JpdGluZy4KICAvLyBUaGUgbmV0d29yayBzb2NrZXQgaXMgZ29uZS4KICBDb21wbGV0ZXI8UmF3U2VjdXJlU29ja2V0PiBfY2xvc2VDb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPFJhd1NlY3VyZVNvY2tldD4oKTsKICBfRmlsdGVyU3RhdHVzIF9maWx0ZXJTdGF0dXMgPSBuZXcgX0ZpbHRlclN0YXR1cygpOwogIGJvb2wgX2Nvbm5lY3RQZW5kaW5nID0gdHJ1ZTsKICBib29sIF9maWx0ZXJQZW5kaW5nID0gZmFsc2U7CiAgYm9vbCBfZmlsdGVyQWN0aXZlID0gZmFsc2U7CgogIF9TZWN1cmVGaWx0ZXIgX3NlY3VyZUZpbHRlciA9IG5ldyBfU2VjdXJlRmlsdGVyLl8oKTsKICBTdHJpbmcgX3NlbGVjdGVkUHJvdG9jb2w7CgogIHN0YXRpYyBGdXR1cmU8X1Jhd1NlY3VyZVNvY2tldD4gY29ubmVjdCgKICAgICAgZHluYW1pYyAvKlN0cmluZ3xJbnRlcm5ldEFkZHJlc3MqLyBob3N0LCBpbnQgcmVxdWVzdGVkUG9ydCwKICAgICAge2Jvb2wgaXNfc2VydmVyLAogICAgICBTZWN1cml0eUNvbnRleHQgY29udGV4dCwKICAgICAgUmF3U29ja2V0IHNvY2tldCwKICAgICAgU3RyZWFtU3Vic2NyaXB0aW9uPFJhd1NvY2tldEV2ZW50PiBzdWJzY3JpcHRpb24sCiAgICAgIExpc3Q8aW50PiBidWZmZXJlZERhdGEsCiAgICAgIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOiBmYWxzZSwKICAgICAgYm9vbCByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlLAogICAgICBib29sIG9uQmFkQ2VydGlmaWNhdGUoWDUwOUNlcnRpZmljYXRlIGNlcnRpZmljYXRlKSwKICAgICAgTGlzdDxTdHJpbmc+IHN1cHBvcnRlZFByb3RvY29sc30pIHsKICAgIF92ZXJpZnlGaWVsZHMoaG9zdCwgcmVxdWVzdGVkUG9ydCwgaXNfc2VydmVyLCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlLCBvbkJhZENlcnRpZmljYXRlKTsKICAgIGlmIChob3N0IGlzIEludGVybmV0QWRkcmVzcykgaG9zdCA9IGhvc3QuaG9zdDsKICAgIEludGVybmV0QWRkcmVzcyBhZGRyZXNzID0gc29ja2V0LmFkZHJlc3M7CiAgICBpZiAoaG9zdCAhPSBudWxsKSB7CiAgICAgIGFkZHJlc3MgPSBJbnRlcm5ldEFkZHJlc3MuX2Nsb25lV2l0aE5ld0hvc3QoYWRkcmVzcywgaG9zdCk7CiAgICB9CiAgICByZXR1cm4gbmV3IF9SYXdTZWN1cmVTb2NrZXQoCiAgICAgICAgICAgIGFkZHJlc3MsCiAgICAgICAgICAgIHJlcXVlc3RlZFBvcnQsCiAgICAgICAgICAgIGlzX3NlcnZlciwKICAgICAgICAgICAgY29udGV4dCwKICAgICAgICAgICAgc29ja2V0LAogICAgICAgICAgICBzdWJzY3JpcHRpb24sCiAgICAgICAgICAgIGJ1ZmZlcmVkRGF0YSwKICAgICAgICAgICAgcmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICAgICAgICByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgICAgIG9uQmFkQ2VydGlmaWNhdGUsCiAgICAgICAgICAgIHN1cHBvcnRlZFByb3RvY29scykKICAgICAgICAuX2hhbmRzaGFrZUNvbXBsZXRlCiAgICAgICAgLmZ1dHVyZTsKICB9CgogIF9SYXdTZWN1cmVTb2NrZXQoCiAgICAgIHRoaXMuYWRkcmVzcywKICAgICAgaW50IHJlcXVlc3RlZFBvcnQsCiAgICAgIHRoaXMuaXNfc2VydmVyLAogICAgICB0aGlzLmNvbnRleHQsCiAgICAgIHRoaXMuX3NvY2tldCwKICAgICAgdGhpcy5fc29ja2V0U3Vic2NyaXB0aW9uLAogICAgICB0aGlzLl9idWZmZXJlZERhdGEsCiAgICAgIHRoaXMucmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICB0aGlzLnJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgdGhpcy5vbkJhZENlcnRpZmljYXRlLAogICAgICBMaXN0PFN0cmluZz4gc3VwcG9ydGVkUHJvdG9jb2xzKSB7CiAgICBjb250ZXh0ID8/PSBTZWN1cml0eUNvbnRleHQuZGVmYXVsdENvbnRleHQ7CiAgICBfY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPFJhd1NvY2tldEV2ZW50PigKICAgICAgICBzeW5jOiB0cnVlLAogICAgICAgIG9uTGlzdGVuOiBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSwKICAgICAgICBvblBhdXNlOiBfb25QYXVzZVN0YXRlQ2hhbmdlLAogICAgICAgIG9uUmVzdW1lOiBfb25QYXVzZVN0YXRlQ2hhbmdlLAogICAgICAgIG9uQ2FuY2VsOiBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSk7CiAgICBfc3RyZWFtID0gX2NvbnRyb2xsZXIuc3RyZWFtOwogICAgLy8gVGhyb3cgYW4gQXJndW1lbnRFcnJvciBpZiBhbnkgZmllbGQgaXMgaW52YWxpZC4gIEFmdGVyIHRoaXMsIGFsbAogICAgLy8gZXJyb3JzIHdpbGwgYmUgcmVwb3J0ZWQgdGhyb3VnaCB0aGUgZnV0dXJlIG9yIHRoZSBzdHJlYW0uCiAgICBfc2VjdXJlRmlsdGVyLmluaXQoKTsKICAgIF9zZWN1cmVGaWx0ZXIKICAgICAgICAucmVnaXN0ZXJIYW5kc2hha2VDb21wbGV0ZUNhbGxiYWNrKF9zZWN1cmVIYW5kc2hha2VDb21wbGV0ZUhhbmRsZXIpOwogICAgaWYgKG9uQmFkQ2VydGlmaWNhdGUgIT0gbnVsbCkgewogICAgICBfc2VjdXJlRmlsdGVyLnJlZ2lzdGVyQmFkQ2VydGlmaWNhdGVDYWxsYmFjayhfb25CYWRDZXJ0aWZpY2F0ZVdyYXBwZXIpOwogICAgfQogICAgX3NvY2tldC5yZWFkRXZlbnRzRW5hYmxlZCA9IHRydWU7CiAgICBfc29ja2V0LndyaXRlRXZlbnRzRW5hYmxlZCA9IGZhbHNlOwogICAgaWYgKF9zb2NrZXRTdWJzY3JpcHRpb24gPT0gbnVsbCkgewogICAgICAvLyBJZiBhIGN1cnJlbnQgc3Vic2NyaXB0aW9uIGlzIHByb3ZpZGVkIHVzZSB0aGlzIG90aGVyd2lzZQogICAgICAvLyBjcmVhdGUgYSBuZXcgb25lLgogICAgICBfc29ja2V0U3Vic2NyaXB0aW9uID0gX3NvY2tldC5saXN0ZW4oX2V2ZW50RGlzcGF0Y2hlciwKICAgICAgICAgIG9uRXJyb3I6IF9yZXBvcnRFcnJvciwgb25Eb25lOiBfZG9uZUhhbmRsZXIpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKF9zb2NrZXRTdWJzY3JpcHRpb24uaXNQYXVzZWQpIHsKICAgICAgICBfc29ja2V0LmNsb3NlKCk7CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIlN1YnNjcmlwdGlvbiBwYXNzZWQgdG8gVExTIHVwZ3JhZGUgaXMgcGF1c2VkIik7CiAgICAgIH0KICAgICAgLy8gSWYgd2UgYXJlIHVwZ3JhZGluZyBhIHNvY2tldCB0aGF0IGlzIGFscmVhZHkgY2xvc2VkIGZvciByZWFkLAogICAgICAvLyByZXBvcnQgYW4gZXJyb3IgYXMgaWYgd2UgcmVjZWl2ZWQgcmVhZENsb3NlZCBkdXJpbmcgdGhlIGhhbmRzaGFrZS4KICAgICAgZHluYW1pYyBzID0gX3NvY2tldDsgLy8gQ2FzdCB0byBkeW5hbWljIHRvIGF2b2lkIHdhcm5pbmcuCiAgICAgIGlmIChzLl9zb2NrZXQuY2xvc2VkUmVhZEV2ZW50U2VudCkgewogICAgICAgIF9ldmVudERpc3BhdGNoZXIoUmF3U29ja2V0RXZlbnQucmVhZENsb3NlZCk7CiAgICAgIH0KICAgICAgX3NvY2tldFN1YnNjcmlwdGlvbgogICAgICAgIC4ub25EYXRhKF9ldmVudERpc3BhdGNoZXIpCiAgICAgICAgLi5vbkVycm9yKF9yZXBvcnRFcnJvcikKICAgICAgICAuLm9uRG9uZShfZG9uZUhhbmRsZXIpOwogICAgfQogICAgdHJ5IHsKICAgICAgdmFyIGVuY29kZWRQcm90b2NvbHMgPQogICAgICAgICAgU2VjdXJpdHlDb250ZXh0Ll9wcm90b2NvbHNUb0xlbmd0aEVuY29kaW5nKHN1cHBvcnRlZFByb3RvY29scyk7CiAgICAgIF9zZWN1cmVGaWx0ZXIuY29ubmVjdCgKICAgICAgICAgIGFkZHJlc3MuaG9zdCwKICAgICAgICAgIGNvbnRleHQsCiAgICAgICAgICBpc19zZXJ2ZXIsCiAgICAgICAgICByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUgfHwgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlLAogICAgICAgICAgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlLAogICAgICAgICAgZW5jb2RlZFByb3RvY29scyk7CiAgICAgIF9zZWN1cmVIYW5kc2hha2UoKTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgX3JlcG9ydEVycm9yKGUsIHMpOwogICAgfQogIH0KCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFJhd1NvY2tldEV2ZW50PiBsaXN0ZW4odm9pZCBvbkRhdGEoUmF3U29ja2V0RXZlbnQgZGF0YSksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICBfc2VuZFdyaXRlRXZlbnQoKTsKICAgIHJldHVybiBfc3RyZWFtLmxpc3RlbihvbkRhdGEsCiAgICAgICAgb25FcnJvcjogb25FcnJvciwgb25Eb25lOiBvbkRvbmUsIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgc3RhdGljIHZvaWQgX3ZlcmlmeUZpZWxkcygKICAgICAgaG9zdCwKICAgICAgaW50IHJlcXVlc3RlZFBvcnQsCiAgICAgIGJvb2wgaXNfc2VydmVyLAogICAgICBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgYm9vbCByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUsCiAgICAgIEZ1bmN0aW9uIG9uQmFkQ2VydGlmaWNhdGUpIHsKICAgIGlmIChob3N0IGlzISBTdHJpbmcgJiYgaG9zdCBpcyEgSW50ZXJuZXRBZGRyZXNzKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJob3N0IGlzIG5vdCBhIFN0cmluZyBvciBhbiBJbnRlcm5ldEFkZHJlc3MiKTsKICAgIH0KICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKHJlcXVlc3RlZFBvcnQsICJyZXF1ZXN0ZWRQb3J0Iik7CiAgICBpZiAocmVxdWVzdGVkUG9ydCA8IDAgfHwgcmVxdWVzdGVkUG9ydCA+IDY1NTM1KSB7CiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoInJlcXVlc3RlZFBvcnQgaXMgbm90IGluIHRoZSByYW5nZSAwLi42NTUzNSIpOwogICAgfQogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoCiAgICAgICAgcmVxdWVzdENsaWVudENlcnRpZmljYXRlLCAicmVxdWVzdENsaWVudENlcnRpZmljYXRlIik7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbCgKICAgICAgICByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUsICJyZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUiKTsKICB9CgogIGludCBnZXQgcG9ydCA9PiBfc29ja2V0LnBvcnQ7CgogIEludGVybmV0QWRkcmVzcyBnZXQgcmVtb3RlQWRkcmVzcyA9PiBfc29ja2V0LnJlbW90ZUFkZHJlc3M7CgogIGludCBnZXQgcmVtb3RlUG9ydCA9PiBfc29ja2V0LnJlbW90ZVBvcnQ7CgogIHZvaWQgc2V0IF9vd25lcihvd25lcikgewogICAgKF9zb2NrZXQgYXMgZHluYW1pYykuX293bmVyID0gb3duZXI7CiAgfQoKICBpbnQgYXZhaWxhYmxlKCkgewogICAgcmV0dXJuIF9zdGF0dXMgIT0gY29ubmVjdGVkU3RhdHVzCiAgICAgICAgPyAwCiAgICAgICAgOiBfc2VjdXJlRmlsdGVyLmJ1ZmZlcnNbcmVhZFBsYWludGV4dElkXS5sZW5ndGg7CiAgfQoKICBGdXR1cmU8UmF3U2VjdXJlU29ja2V0PiBjbG9zZSgpIHsKICAgIHNodXRkb3duKFNvY2tldERpcmVjdGlvbi5ib3RoKTsKICAgIHJldHVybiBfY2xvc2VDb21wbGV0ZXIuZnV0dXJlOwogIH0KCiAgdm9pZCBfY29tcGxldGVDbG9zZUNvbXBsZXRlcihbUmF3U29ja2V0IGR1bW15XSkgewogICAgaWYgKCFfY2xvc2VDb21wbGV0ZXIuaXNDb21wbGV0ZWQpIF9jbG9zZUNvbXBsZXRlci5jb21wbGV0ZSh0aGlzKTsKICB9CgogIHZvaWQgX2Nsb3NlKCkgewogICAgX2Nsb3NlZFdyaXRlID0gdHJ1ZTsKICAgIF9jbG9zZWRSZWFkID0gdHJ1ZTsKICAgIGlmIChfc29ja2V0ICE9IG51bGwpIHsKICAgICAgX3NvY2tldC5jbG9zZSgpLnRoZW4oX2NvbXBsZXRlQ2xvc2VDb21wbGV0ZXIpOwogICAgfSBlbHNlIHsKICAgICAgX2NvbXBsZXRlQ2xvc2VDb21wbGV0ZXIoKTsKICAgIH0KICAgIF9zb2NrZXRDbG9zZWRXcml0ZSA9IHRydWU7CiAgICBfc29ja2V0Q2xvc2VkUmVhZCA9IHRydWU7CiAgICBpZiAoIV9maWx0ZXJBY3RpdmUgJiYgX3NlY3VyZUZpbHRlciAhPSBudWxsKSB7CiAgICAgIF9zZWN1cmVGaWx0ZXIuZGVzdHJveSgpOwogICAgICBfc2VjdXJlRmlsdGVyID0gbnVsbDsKICAgIH0KICAgIGlmIChfc29ja2V0U3Vic2NyaXB0aW9uICE9IG51bGwpIHsKICAgICAgX3NvY2tldFN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgIH0KICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICBfc3RhdHVzID0gY2xvc2VkU3RhdHVzOwogIH0KCiAgdm9pZCBzaHV0ZG93bihTb2NrZXREaXJlY3Rpb24gZGlyZWN0aW9uKSB7CiAgICBpZiAoZGlyZWN0aW9uID09IFNvY2tldERpcmVjdGlvbi5zZW5kIHx8CiAgICAgICAgZGlyZWN0aW9uID09IFNvY2tldERpcmVjdGlvbi5ib3RoKSB7CiAgICAgIF9jbG9zZWRXcml0ZSA9IHRydWU7CiAgICAgIGlmIChfZmlsdGVyU3RhdHVzLndyaXRlRW1wdHkpIHsKICAgICAgICBfc29ja2V0LnNodXRkb3duKFNvY2tldERpcmVjdGlvbi5zZW5kKTsKICAgICAgICBfc29ja2V0Q2xvc2VkV3JpdGUgPSB0cnVlOwogICAgICAgIGlmIChfY2xvc2VkUmVhZCkgewogICAgICAgICAgX2Nsb3NlKCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoZGlyZWN0aW9uID09IFNvY2tldERpcmVjdGlvbi5yZWNlaXZlIHx8CiAgICAgICAgZGlyZWN0aW9uID09IFNvY2tldERpcmVjdGlvbi5ib3RoKSB7CiAgICAgIF9jbG9zZWRSZWFkID0gdHJ1ZTsKICAgICAgX3NvY2tldENsb3NlZFJlYWQgPSB0cnVlOwogICAgICBfc29ja2V0LnNodXRkb3duKFNvY2tldERpcmVjdGlvbi5yZWNlaXZlKTsKICAgICAgaWYgKF9zb2NrZXRDbG9zZWRXcml0ZSkgewogICAgICAgIF9jbG9zZSgpOwogICAgICB9CiAgICB9CiAgfQoKICBib29sIGdldCB3cml0ZUV2ZW50c0VuYWJsZWQgPT4gX3dyaXRlRXZlbnRzRW5hYmxlZDsKCiAgdm9pZCBzZXQgd3JpdGVFdmVudHNFbmFibGVkKGJvb2wgdmFsdWUpIHsKICAgIF93cml0ZUV2ZW50c0VuYWJsZWQgPSB2YWx1ZTsKICAgIGlmICh2YWx1ZSkgewogICAgICBUaW1lci5ydW4oKCkgPT4gX3NlbmRXcml0ZUV2ZW50KCkpOwogICAgfQogIH0KCiAgYm9vbCBnZXQgcmVhZEV2ZW50c0VuYWJsZWQgPT4gX3JlYWRFdmVudHNFbmFibGVkOwoKICB2b2lkIHNldCByZWFkRXZlbnRzRW5hYmxlZChib29sIHZhbHVlKSB7CiAgICBfcmVhZEV2ZW50c0VuYWJsZWQgPSB2YWx1ZTsKICAgIF9zY2hlZHVsZVJlYWRFdmVudCgpOwogIH0KCiAgVWludDhMaXN0IHJlYWQoW2ludCBsZW5ndGhdKSB7CiAgICBpZiAobGVuZ3RoICE9IG51bGwgJiYgKGxlbmd0aCBpcyEgaW50IHx8IGxlbmd0aCA8IDApKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKAogICAgICAgICAgIkludmFsaWQgbGVuZ3RoIHBhcmFtZXRlciBpbiBTZWN1cmVTb2NrZXQucmVhZCAobGVuZ3RoOiAkbGVuZ3RoKSIpOwogICAgfQogICAgaWYgKF9jbG9zZWRSZWFkKSB7CiAgICAgIHRocm93IG5ldyBTb2NrZXRFeGNlcHRpb24oIlJlYWRpbmcgZnJvbSBhIGNsb3NlZCBzb2NrZXQiKTsKICAgIH0KICAgIGlmIChfc3RhdHVzICE9IGNvbm5lY3RlZFN0YXR1cykgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfc2VjdXJlRmlsdGVyLmJ1ZmZlcnNbcmVhZFBsYWludGV4dElkXS5yZWFkKGxlbmd0aCk7CiAgICBfc2NoZWR1bGVGaWx0ZXIoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBXcml0ZSB0aGUgZGF0YSB0byB0aGUgc29ja2V0LCBhbmQgc2NoZWR1bGUgdGhlIGZpbHRlciB0byBlbmNyeXB0IGl0LgogIGludCB3cml0ZShMaXN0PGludD4gZGF0YSwgW2ludCBvZmZzZXQsIGludCBieXRlc10pIHsKICAgIGlmIChieXRlcyAhPSBudWxsICYmIChieXRlcyBpcyEgaW50IHx8IGJ5dGVzIDwgMCkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAiSW52YWxpZCBieXRlcyBwYXJhbWV0ZXIgaW4gU2VjdXJlU29ja2V0LnJlYWQgKGJ5dGVzOiAkYnl0ZXMpIik7CiAgICB9CiAgICBpZiAob2Zmc2V0ICE9IG51bGwgJiYgKG9mZnNldCBpcyEgaW50IHx8IG9mZnNldCA8IDApKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKAogICAgICAgICAgIkludmFsaWQgb2Zmc2V0IHBhcmFtZXRlciBpbiBTZWN1cmVTb2NrZXQucmVhZCAob2Zmc2V0OiAkb2Zmc2V0KSIpOwogICAgfQogICAgaWYgKF9jbG9zZWRXcml0ZSkgewogICAgICBfY29udHJvbGxlci5hZGRFcnJvcihuZXcgU29ja2V0RXhjZXB0aW9uKCJXcml0aW5nIHRvIGEgY2xvc2VkIHNvY2tldCIpKTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBpZiAoX3N0YXR1cyAhPSBjb25uZWN0ZWRTdGF0dXMpIHJldHVybiAwOwogICAgb2Zmc2V0ID8/PSAwOwogICAgYnl0ZXMgPz89IGRhdGEubGVuZ3RoIC0gb2Zmc2V0OwoKICAgIGludCB3cml0dGVuID0KICAgICAgICBfc2VjdXJlRmlsdGVyLmJ1ZmZlcnNbd3JpdGVQbGFpbnRleHRJZF0ud3JpdGUoZGF0YSwgb2Zmc2V0LCBieXRlcyk7CiAgICBpZiAod3JpdHRlbiA+IDApIHsKICAgICAgX2ZpbHRlclN0YXR1cy53cml0ZUVtcHR5ID0gZmFsc2U7CiAgICB9CiAgICBfc2NoZWR1bGVGaWx0ZXIoKTsKICAgIHJldHVybiB3cml0dGVuOwogIH0KCiAgWDUwOUNlcnRpZmljYXRlIGdldCBwZWVyQ2VydGlmaWNhdGUgPT4gX3NlY3VyZUZpbHRlci5wZWVyQ2VydGlmaWNhdGU7CgogIFN0cmluZyBnZXQgc2VsZWN0ZWRQcm90b2NvbCA9PiBfc2VsZWN0ZWRQcm90b2NvbDsKCiAgYm9vbCBfb25CYWRDZXJ0aWZpY2F0ZVdyYXBwZXIoWDUwOUNlcnRpZmljYXRlIGNlcnRpZmljYXRlKSB7CiAgICBpZiAob25CYWRDZXJ0aWZpY2F0ZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICB2YXIgcmVzdWx0ID0gb25CYWRDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZSk7CiAgICBpZiAocmVzdWx0IGlzIGJvb2wpIHJldHVybiByZXN1bHQ7CiAgICB0aHJvdyBuZXcgSGFuZHNoYWtlRXhjZXB0aW9uKAogICAgICAgICJvbkJhZENlcnRpZmljYXRlIGNhbGxiYWNrIHJldHVybmVkIG5vbi1ib29sZWFuICRyZXN1bHQiKTsKICB9CgogIGJvb2wgc2V0T3B0aW9uKFNvY2tldE9wdGlvbiBvcHRpb24sIGJvb2wgZW5hYmxlZCkgewogICAgaWYgKF9zb2NrZXQgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9zb2NrZXQuc2V0T3B0aW9uKG9wdGlvbiwgZW5hYmxlZCk7CiAgfQoKICBVaW50OExpc3QgZ2V0UmF3T3B0aW9uKFJhd1NvY2tldE9wdGlvbiBvcHRpb24pIHsKICAgIHJldHVybiBfc29ja2V0Py5nZXRSYXdPcHRpb24ob3B0aW9uKTsKICB9CgogIHZvaWQgc2V0UmF3T3B0aW9uKFJhd1NvY2tldE9wdGlvbiBvcHRpb24pIHsKICAgIF9zb2NrZXQ/LnNldFJhd09wdGlvbihvcHRpb24pOwogIH0KCiAgdm9pZCBfZXZlbnREaXNwYXRjaGVyKFJhd1NvY2tldEV2ZW50IGV2ZW50KSB7CiAgICB0cnkgewogICAgICBpZiAoZXZlbnQgPT0gUmF3U29ja2V0RXZlbnQucmVhZCkgewogICAgICAgIF9yZWFkSGFuZGxlcigpOwogICAgICB9IGVsc2UgaWYgKGV2ZW50ID09IFJhd1NvY2tldEV2ZW50LndyaXRlKSB7CiAgICAgICAgX3dyaXRlSGFuZGxlcigpOwogICAgICB9IGVsc2UgaWYgKGV2ZW50ID09IFJhd1NvY2tldEV2ZW50LnJlYWRDbG9zZWQpIHsKICAgICAgICBfY2xvc2VIYW5kbGVyKCk7CiAgICAgIH0KICAgIH0gY2F0Y2ggKGUsIHN0YWNrVHJhY2UpIHsKICAgICAgX3JlcG9ydEVycm9yKGUsIHN0YWNrVHJhY2UpOwogICAgfQogIH0KCiAgdm9pZCBfcmVhZEhhbmRsZXIoKSB7CiAgICBfcmVhZFNvY2tldCgpOwogICAgX3NjaGVkdWxlRmlsdGVyKCk7CiAgfQoKICB2b2lkIF93cml0ZUhhbmRsZXIoKSB7CiAgICBfd3JpdGVTb2NrZXQoKTsKICAgIF9zY2hlZHVsZUZpbHRlcigpOwogIH0KCiAgdm9pZCBfZG9uZUhhbmRsZXIoKSB7CiAgICBpZiAoX2ZpbHRlclN0YXR1cy5yZWFkRW1wdHkpIHsKICAgICAgX2Nsb3NlKCk7CiAgICB9CiAgfQoKICB2b2lkIF9yZXBvcnRFcnJvcihlLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgaWYgKF9zdGF0dXMgPT0gY2xvc2VkU3RhdHVzKSB7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZiAoX2Nvbm5lY3RQZW5kaW5nKSB7CiAgICAgIC8vIF9jb25uZWN0UGVuZGluZyBpcyB0cnVlIHVudGlsIHRoZSBoYW5kc2hha2UgaGFzIGNvbXBsZXRlZCwgYW5kIHRoZQogICAgICAvLyBfaGFuZHNoYWtlQ29tcGxldGUgZnV0dXJlIHJldHVybmVkIGZyb20gU2VjdXJlU29ja2V0LmNvbm5lY3QgaGFzCiAgICAgIC8vIGNvbXBsZXRlZC4gIEJlZm9yZSB0aGlzIHBvaW50LCB3ZSBtdXN0IGNvbXBsZXRlIGl0IHdpdGggYW4gZXJyb3IuCiAgICAgIF9oYW5kc2hha2VDb21wbGV0ZS5jb21wbGV0ZUVycm9yKGUsIHN0YWNrVHJhY2UpOwogICAgfSBlbHNlIHsKICAgICAgX2NvbnRyb2xsZXIuYWRkRXJyb3IoZSwgc3RhY2tUcmFjZSk7CiAgICB9CiAgICBfY2xvc2UoKTsKICB9CgogIHZvaWQgX2Nsb3NlSGFuZGxlcigpIHsKICAgIGlmIChfc3RhdHVzID09IGNvbm5lY3RlZFN0YXR1cykgewogICAgICBpZiAoX2Nsb3NlZFJlYWQpIHJldHVybjsKICAgICAgX3NvY2tldENsb3NlZFJlYWQgPSB0cnVlOwogICAgICBpZiAoX2ZpbHRlclN0YXR1cy5yZWFkRW1wdHkpIHsKICAgICAgICBfY2xvc2VkUmVhZCA9IHRydWU7CiAgICAgICAgX2NvbnRyb2xsZXIuYWRkKFJhd1NvY2tldEV2ZW50LnJlYWRDbG9zZWQpOwogICAgICAgIGlmIChfc29ja2V0Q2xvc2VkV3JpdGUpIHsKICAgICAgICAgIF9jbG9zZSgpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBfc2NoZWR1bGVGaWx0ZXIoKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChfc3RhdHVzID09IGhhbmRzaGFrZVN0YXR1cykgewogICAgICBfc29ja2V0Q2xvc2VkUmVhZCA9IHRydWU7CiAgICAgIGlmIChfZmlsdGVyU3RhdHVzLnJlYWRFbXB0eSkgewogICAgICAgIF9yZXBvcnRFcnJvcigKICAgICAgICAgICAgbmV3IEhhbmRzaGFrZUV4Y2VwdGlvbignQ29ubmVjdGlvbiB0ZXJtaW5hdGVkIGR1cmluZyBoYW5kc2hha2UnKSwKICAgICAgICAgICAgbnVsbCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3NlY3VyZUhhbmRzaGFrZSgpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9zZWN1cmVIYW5kc2hha2UoKSB7CiAgICB0cnkgewogICAgICBfc2VjdXJlRmlsdGVyLmhhbmRzaGFrZSgpOwogICAgICBfZmlsdGVyU3RhdHVzLndyaXRlRW1wdHkgPSBmYWxzZTsKICAgICAgX3JlYWRTb2NrZXQoKTsKICAgICAgX3dyaXRlU29ja2V0KCk7CiAgICAgIF9zY2hlZHVsZUZpbHRlcigpOwogICAgfSBjYXRjaCAoZSwgc3RhY2tUcmFjZSkgewogICAgICBfcmVwb3J0RXJyb3IoZSwgc3RhY2tUcmFjZSk7CiAgICB9CiAgfQoKICB2b2lkIHJlbmVnb3RpYXRlKAogICAgICB7Ym9vbCB1c2VTZXNzaW9uQ2FjaGU6IHRydWUsCiAgICAgIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOiBmYWxzZSwKICAgICAgYm9vbCByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlfSkgewogICAgaWYgKF9zdGF0dXMgIT0gY29ubmVjdGVkU3RhdHVzKSB7CiAgICAgIHRocm93IG5ldyBIYW5kc2hha2VFeGNlcHRpb24oCiAgICAgICAgICAiQ2FsbGVkIHJlbmVnb3RpYXRlIG9uIGEgbm9uLWNvbm5lY3RlZCBzb2NrZXQiKTsKICAgIH0KICAgIF9zZWN1cmVGaWx0ZXIucmVuZWdvdGlhdGUoCiAgICAgICAgdXNlU2Vzc2lvbkNhY2hlLCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSk7CiAgICBfc3RhdHVzID0gaGFuZHNoYWtlU3RhdHVzOwogICAgX2ZpbHRlclN0YXR1cy53cml0ZUVtcHR5ID0gZmFsc2U7CiAgICBfc2NoZWR1bGVGaWx0ZXIoKTsKICB9CgogIHZvaWQgX3NlY3VyZUhhbmRzaGFrZUNvbXBsZXRlSGFuZGxlcigpIHsKICAgIF9zdGF0dXMgPSBjb25uZWN0ZWRTdGF0dXM7CiAgICBpZiAoX2Nvbm5lY3RQZW5kaW5nKSB7CiAgICAgIF9jb25uZWN0UGVuZGluZyA9IGZhbHNlOwogICAgICB0cnkgewogICAgICAgIF9zZWxlY3RlZFByb3RvY29sID0gX3NlY3VyZUZpbHRlci5zZWxlY3RlZFByb3RvY29sKCk7CiAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB1c2VyIGNvZGUgdG8gcnVuIHN5bmNocm9ub3VzbHkgaW4gdGhpcyBjYWxsYmFjay4KICAgICAgICBUaW1lci5ydW4oKCkgPT4gX2hhbmRzaGFrZUNvbXBsZXRlLmNvbXBsZXRlKHRoaXMpKTsKICAgICAgfSBjYXRjaCAoZXJyb3IsIHN0YWNrKSB7CiAgICAgICAgX2hhbmRzaGFrZUNvbXBsZXRlLmNvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBfb25QYXVzZVN0YXRlQ2hhbmdlKCkgewogICAgaWYgKF9jb250cm9sbGVyLmlzUGF1c2VkKSB7CiAgICAgIF9wYXVzZUNvdW50Kys7CiAgICB9IGVsc2UgewogICAgICBfcGF1c2VDb3VudC0tOwogICAgICBpZiAoX3BhdXNlQ291bnQgPT0gMCkgewogICAgICAgIF9zY2hlZHVsZVJlYWRFdmVudCgpOwogICAgICAgIF9zZW5kV3JpdGVFdmVudCgpOyAvLyBDYW4gc2VuZCBldmVudCBzeW5jaHJvbm91c2x5LgogICAgICB9CiAgICB9CgogICAgaWYgKCFfc29ja2V0Q2xvc2VkUmVhZCB8fCAhX3NvY2tldENsb3NlZFdyaXRlKSB7CiAgICAgIGlmIChfY29udHJvbGxlci5pc1BhdXNlZCkgewogICAgICAgIF9zb2NrZXRTdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfc29ja2V0U3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9vblN1YnNjcmlwdGlvblN0YXRlQ2hhbmdlKCkgewogICAgaWYgKF9jb250cm9sbGVyLmhhc0xpc3RlbmVyKSB7CiAgICAgIC8vIFRPRE8oYWpvaG5zZW4pOiBEbyBzb21ldGhpbmcgaGVyZT8KICAgIH0KICB9CgogIHZvaWQgX3NjaGVkdWxlRmlsdGVyKCkgewogICAgX2ZpbHRlclBlbmRpbmcgPSB0cnVlOwogICAgX3RyeUZpbHRlcigpOwogIH0KCiAgdm9pZCBfdHJ5RmlsdGVyKCkgewogICAgaWYgKF9zdGF0dXMgPT0gY2xvc2VkU3RhdHVzKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChfZmlsdGVyUGVuZGluZyAmJiAhX2ZpbHRlckFjdGl2ZSkgewogICAgICBfZmlsdGVyQWN0aXZlID0gdHJ1ZTsKICAgICAgX2ZpbHRlclBlbmRpbmcgPSBmYWxzZTsKICAgICAgX3B1c2hBbGxGaWx0ZXJTdGFnZXMoKS50aGVuKChzdGF0dXMpIHsKICAgICAgICBfZmlsdGVyU3RhdHVzID0gc3RhdHVzOwogICAgICAgIF9maWx0ZXJBY3RpdmUgPSBmYWxzZTsKICAgICAgICBpZiAoX3N0YXR1cyA9PSBjbG9zZWRTdGF0dXMpIHsKICAgICAgICAgIF9zZWN1cmVGaWx0ZXIuZGVzdHJveSgpOwogICAgICAgICAgX3NlY3VyZUZpbHRlciA9IG51bGw7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIF9zb2NrZXQucmVhZEV2ZW50c0VuYWJsZWQgPSB0cnVlOwogICAgICAgIGlmIChfZmlsdGVyU3RhdHVzLndyaXRlRW1wdHkgJiYgX2Nsb3NlZFdyaXRlICYmICFfc29ja2V0Q2xvc2VkV3JpdGUpIHsKICAgICAgICAgIC8vIENoZWNrcyBmb3IgYW5kIGhhbmRsZXMgYWxsIGNhc2VzIG9mIHBhcnRpYWxseSBjbG9zZWQgc29ja2V0cy4KICAgICAgICAgIHNodXRkb3duKFNvY2tldERpcmVjdGlvbi5zZW5kKTsKICAgICAgICAgIGlmIChfc3RhdHVzID09IGNsb3NlZFN0YXR1cykgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChfZmlsdGVyU3RhdHVzLnJlYWRFbXB0eSAmJiBfc29ja2V0Q2xvc2VkUmVhZCAmJiAhX2Nsb3NlZFJlYWQpIHsKICAgICAgICAgIGlmIChfc3RhdHVzID09IGhhbmRzaGFrZVN0YXR1cykgewogICAgICAgICAgICBfc2VjdXJlRmlsdGVyLmhhbmRzaGFrZSgpOwogICAgICAgICAgICBpZiAoX3N0YXR1cyA9PSBoYW5kc2hha2VTdGF0dXMpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgSGFuZHNoYWtlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAnQ29ubmVjdGlvbiB0ZXJtaW5hdGVkIGR1cmluZyBoYW5kc2hha2UnKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgX2Nsb3NlSGFuZGxlcigpOwogICAgICAgIH0KICAgICAgICBpZiAoX3N0YXR1cyA9PSBjbG9zZWRTdGF0dXMpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKF9maWx0ZXJTdGF0dXMucHJvZ3Jlc3MpIHsKICAgICAgICAgIF9maWx0ZXJQZW5kaW5nID0gdHJ1ZTsKICAgICAgICAgIGlmIChfZmlsdGVyU3RhdHVzLndyaXRlRW5jcnlwdGVkTm9Mb25nZXJFbXB0eSkgewogICAgICAgICAgICBfd3JpdGVTb2NrZXQoKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChfZmlsdGVyU3RhdHVzLndyaXRlUGxhaW50ZXh0Tm9Mb25nZXJGdWxsKSB7CiAgICAgICAgICAgIF9zZW5kV3JpdGVFdmVudCgpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKF9maWx0ZXJTdGF0dXMucmVhZEVuY3J5cHRlZE5vTG9uZ2VyRnVsbCkgewogICAgICAgICAgICBfcmVhZFNvY2tldCgpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKF9maWx0ZXJTdGF0dXMucmVhZFBsYWludGV4dE5vTG9uZ2VyRW1wdHkpIHsKICAgICAgICAgICAgX3NjaGVkdWxlUmVhZEV2ZW50KCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoX3N0YXR1cyA9PSBoYW5kc2hha2VTdGF0dXMpIHsKICAgICAgICAgICAgX3NlY3VyZUhhbmRzaGFrZSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBfdHJ5RmlsdGVyKCk7CiAgICAgIH0pLmNhdGNoRXJyb3IoX3JlcG9ydEVycm9yKTsKICAgIH0KICB9CgogIExpc3Q8aW50PiBfcmVhZFNvY2tldE9yQnVmZmVyZWREYXRhKGludCBieXRlcykgewogICAgaWYgKF9idWZmZXJlZERhdGEgIT0gbnVsbCkgewogICAgICBpZiAoYnl0ZXMgPiBfYnVmZmVyZWREYXRhLmxlbmd0aCAtIF9idWZmZXJlZERhdGFJbmRleCkgewogICAgICAgIGJ5dGVzID0gX2J1ZmZlcmVkRGF0YS5sZW5ndGggLSBfYnVmZmVyZWREYXRhSW5kZXg7CiAgICAgIH0KICAgICAgdmFyIHJlc3VsdCA9CiAgICAgICAgICBfYnVmZmVyZWREYXRhLnN1Ymxpc3QoX2J1ZmZlcmVkRGF0YUluZGV4LCBfYnVmZmVyZWREYXRhSW5kZXggKyBieXRlcyk7CiAgICAgIF9idWZmZXJlZERhdGFJbmRleCArPSBieXRlczsKICAgICAgaWYgKF9idWZmZXJlZERhdGEubGVuZ3RoID09IF9idWZmZXJlZERhdGFJbmRleCkgewogICAgICAgIF9idWZmZXJlZERhdGEgPSBudWxsOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9IGVsc2UgaWYgKCFfc29ja2V0Q2xvc2VkUmVhZCkgewogICAgICByZXR1cm4gX3NvY2tldC5yZWFkKGJ5dGVzKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgdm9pZCBfcmVhZFNvY2tldCgpIHsKICAgIGlmIChfc3RhdHVzID09IGNsb3NlZFN0YXR1cykgcmV0dXJuOwogICAgdmFyIGJ1ZmZlciA9IF9zZWN1cmVGaWx0ZXIuYnVmZmVyc1tyZWFkRW5jcnlwdGVkSWRdOwogICAgaWYgKGJ1ZmZlci53cml0ZUZyb21Tb3VyY2UoX3JlYWRTb2NrZXRPckJ1ZmZlcmVkRGF0YSkgPiAwKSB7CiAgICAgIF9maWx0ZXJTdGF0dXMucmVhZEVtcHR5ID0gZmFsc2U7CiAgICB9IGVsc2UgewogICAgICBfc29ja2V0LnJlYWRFdmVudHNFbmFibGVkID0gZmFsc2U7CiAgICB9CiAgfQoKICB2b2lkIF93cml0ZVNvY2tldCgpIHsKICAgIGlmIChfc29ja2V0Q2xvc2VkV3JpdGUpIHJldHVybjsKICAgIHZhciBidWZmZXIgPSBfc2VjdXJlRmlsdGVyLmJ1ZmZlcnNbd3JpdGVFbmNyeXB0ZWRJZF07CiAgICBpZiAoYnVmZmVyLnJlYWRUb1NvY2tldChfc29ja2V0KSkgewogICAgICAvLyBSZXR1cm5zIHRydWUgaWYgYmxvY2tlZAogICAgICBfc29ja2V0LndyaXRlRXZlbnRzRW5hYmxlZCA9IHRydWU7CiAgICB9CiAgfQoKICAvLyBJZiBhIHJlYWQgZXZlbnQgc2hvdWxkIGJlIHNlbnQsIGFkZCBpdCB0byB0aGUgY29udHJvbGxlci4KICBfc2NoZWR1bGVSZWFkRXZlbnQoKSB7CiAgICBpZiAoIV9wZW5kaW5nUmVhZEV2ZW50ICYmCiAgICAgICAgX3JlYWRFdmVudHNFbmFibGVkICYmCiAgICAgICAgX3BhdXNlQ291bnQgPT0gMCAmJgogICAgICAgIF9zZWN1cmVGaWx0ZXIgIT0gbnVsbCAmJgogICAgICAgICFfc2VjdXJlRmlsdGVyLmJ1ZmZlcnNbcmVhZFBsYWludGV4dElkXS5pc0VtcHR5KSB7CiAgICAgIF9wZW5kaW5nUmVhZEV2ZW50ID0gdHJ1ZTsKICAgICAgVGltZXIucnVuKF9zZW5kUmVhZEV2ZW50KTsKICAgIH0KICB9CgogIF9zZW5kUmVhZEV2ZW50KCkgewogICAgX3BlbmRpbmdSZWFkRXZlbnQgPSBmYWxzZTsKICAgIGlmIChfc3RhdHVzICE9IGNsb3NlZFN0YXR1cyAmJgogICAgICAgIF9yZWFkRXZlbnRzRW5hYmxlZCAmJgogICAgICAgIF9wYXVzZUNvdW50ID09IDAgJiYKICAgICAgICBfc2VjdXJlRmlsdGVyICE9IG51bGwgJiYKICAgICAgICAhX3NlY3VyZUZpbHRlci5idWZmZXJzW3JlYWRQbGFpbnRleHRJZF0uaXNFbXB0eSkgewogICAgICBfY29udHJvbGxlci5hZGQoUmF3U29ja2V0RXZlbnQucmVhZCk7CiAgICAgIF9zY2hlZHVsZVJlYWRFdmVudCgpOwogICAgfQogIH0KCiAgLy8gSWYgYSB3cml0ZSBldmVudCBzaG91bGQgYmUgc2VudCwgYWRkIGl0IHRvIHRoZSBjb250cm9sbGVyLgogIF9zZW5kV3JpdGVFdmVudCgpIHsKICAgIGlmICghX2Nsb3NlZFdyaXRlICYmCiAgICAgICAgX3dyaXRlRXZlbnRzRW5hYmxlZCAmJgogICAgICAgIF9wYXVzZUNvdW50ID09IDAgJiYKICAgICAgICBfc2VjdXJlRmlsdGVyICE9IG51bGwgJiYKICAgICAgICBfc2VjdXJlRmlsdGVyLmJ1ZmZlcnNbd3JpdGVQbGFpbnRleHRJZF0uZnJlZSA+IDApIHsKICAgICAgX3dyaXRlRXZlbnRzRW5hYmxlZCA9IGZhbHNlOwogICAgICBfY29udHJvbGxlci5hZGQoUmF3U29ja2V0RXZlbnQud3JpdGUpOwogICAgfQogIH0KCiAgRnV0dXJlPF9GaWx0ZXJTdGF0dXM+IF9wdXNoQWxsRmlsdGVyU3RhZ2VzKCkgewogICAgYm9vbCB3YXNJbkhhbmRzaGFrZSA9IF9zdGF0dXMgIT0gY29ubmVjdGVkU3RhdHVzOwogICAgTGlzdCBhcmdzID0gbmV3IExpc3QoMiArIGJ1ZmZlckNvdW50ICogMik7CiAgICBhcmdzWzBdID0gX3NlY3VyZUZpbHRlci5fcG9pbnRlcigpOwogICAgYXJnc1sxXSA9IHdhc0luSGFuZHNoYWtlOwogICAgdmFyIGJ1ZnMgPSBfc2VjdXJlRmlsdGVyLmJ1ZmZlcnM7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmZlckNvdW50OyArK2kpIHsKICAgICAgYXJnc1syICogaSArIDJdID0gYnVmc1tpXS5zdGFydDsKICAgICAgYXJnc1syICogaSArIDNdID0gYnVmc1tpXS5lbmQ7CiAgICB9CgogICAgcmV0dXJuIF9JT1NlcnZpY2UuX2Rpc3BhdGNoKF9JT1NlcnZpY2Uuc3NsUHJvY2Vzc0ZpbHRlciwgYXJncykKICAgICAgICAudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgaWYgKHdhc0luSGFuZHNoYWtlKSB7CiAgICAgICAgICAvLyBJZiB3ZSdyZSBpbiBoYW5kc2hha2UsIHRocm93IGEgaGFuZHNoYWtlIGVycm9yLgogICAgICAgICAgX3JlcG9ydEVycm9yKAogICAgICAgICAgICAgIG5ldyBIYW5kc2hha2VFeGNlcHRpb24oJyR7cmVzcG9uc2VbMV19IGVycm9yICR7cmVzcG9uc2VbMF19JyksCiAgICAgICAgICAgICAgbnVsbCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIElmIHdlJ3JlIGNvbm5lY3RlZCwgdGhyb3cgYSBUTFMgZXJyb3IuCiAgICAgICAgICBfcmVwb3J0RXJyb3IoCiAgICAgICAgICAgICAgbmV3IFRsc0V4Y2VwdGlvbignJHtyZXNwb25zZVsxXX0gZXJyb3IgJHtyZXNwb25zZVswXX0nKSwgbnVsbCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGludCBzdGFydChpbnQgaW5kZXgpID0+IHJlc3BvbnNlWzIgKiBpbmRleF07CiAgICAgIGludCBlbmQoaW50IGluZGV4KSA9PiByZXNwb25zZVsyICogaW5kZXggKyAxXTsKCiAgICAgIF9GaWx0ZXJTdGF0dXMgc3RhdHVzID0gbmV3IF9GaWx0ZXJTdGF0dXMoKTsKICAgICAgLy8gQ29tcHV0ZSB3cml0ZUVtcHR5IGFzICJ3cml0ZSBwbGFpbnRleHQgYnVmZmVyIGFuZCB3cml0ZSBlbmNyeXB0ZWQKICAgICAgLy8gYnVmZmVyIHdlcmUgZW1wdHkgd2hlbiB3ZSBzdGFydGVkIGFuZCBhcmUgZW1wdHkgbm93Ii4KICAgICAgc3RhdHVzLndyaXRlRW1wdHkgPSBidWZzW3dyaXRlUGxhaW50ZXh0SWRdLmlzRW1wdHkgJiYKICAgICAgICAgIHN0YXJ0KHdyaXRlRW5jcnlwdGVkSWQpID09IGVuZCh3cml0ZUVuY3J5cHRlZElkKTsKICAgICAgLy8gSWYgd2Ugd2VyZSBpbiBoYW5kc2hha2Ugd2hlbiB0aGlzIHN0YXJ0ZWQsIF93cml0ZUVtcHR5IG1heSBiZSBmYWxzZQogICAgICAvLyBiZWNhdXNlIHRoZSBoYW5kc2hha2Ugd3JvdGUgZGF0YSBhZnRlciB3ZSBjaGVja2VkLgogICAgICBpZiAod2FzSW5IYW5kc2hha2UpIHN0YXR1cy53cml0ZUVtcHR5ID0gZmFsc2U7CgogICAgICAvLyBDb21wdXRlIHJlYWRFbXB0eSBhcyAiYm90aCByZWFkIGJ1ZmZlcnMgd2VyZSBlbXB0eSB3aGVuIHdlIHN0YXJ0ZWQKICAgICAgLy8gYW5kIGFyZSBlbXB0eSBub3ciLgogICAgICBzdGF0dXMucmVhZEVtcHR5ID0gYnVmc1tyZWFkRW5jcnlwdGVkSWRdLmlzRW1wdHkgJiYKICAgICAgICAgIHN0YXJ0KHJlYWRQbGFpbnRleHRJZCkgPT0gZW5kKHJlYWRQbGFpbnRleHRJZCk7CgogICAgICBfRXh0ZXJuYWxCdWZmZXIgYnVmZmVyID0gYnVmc1t3cml0ZVBsYWludGV4dElkXTsKICAgICAgaW50IG5ld19zdGFydCA9IHN0YXJ0KHdyaXRlUGxhaW50ZXh0SWQpOwogICAgICBpZiAobmV3X3N0YXJ0ICE9IGJ1ZmZlci5zdGFydCkgewogICAgICAgIHN0YXR1cy5wcm9ncmVzcyA9IHRydWU7CiAgICAgICAgaWYgKGJ1ZmZlci5mcmVlID09IDApIHsKICAgICAgICAgIHN0YXR1cy53cml0ZVBsYWludGV4dE5vTG9uZ2VyRnVsbCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGJ1ZmZlci5zdGFydCA9IG5ld19zdGFydDsKICAgICAgfQogICAgICBidWZmZXIgPSBidWZzW3JlYWRFbmNyeXB0ZWRJZF07CiAgICAgIG5ld19zdGFydCA9IHN0YXJ0KHJlYWRFbmNyeXB0ZWRJZCk7CiAgICAgIGlmIChuZXdfc3RhcnQgIT0gYnVmZmVyLnN0YXJ0KSB7CiAgICAgICAgc3RhdHVzLnByb2dyZXNzID0gdHJ1ZTsKICAgICAgICBpZiAoYnVmZmVyLmZyZWUgPT0gMCkgewogICAgICAgICAgc3RhdHVzLnJlYWRFbmNyeXB0ZWROb0xvbmdlckZ1bGwgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBidWZmZXIuc3RhcnQgPSBuZXdfc3RhcnQ7CiAgICAgIH0KICAgICAgYnVmZmVyID0gYnVmc1t3cml0ZUVuY3J5cHRlZElkXTsKICAgICAgaW50IG5ld19lbmQgPSBlbmQod3JpdGVFbmNyeXB0ZWRJZCk7CiAgICAgIGlmIChuZXdfZW5kICE9IGJ1ZmZlci5lbmQpIHsKICAgICAgICBzdGF0dXMucHJvZ3Jlc3MgPSB0cnVlOwogICAgICAgIGlmIChidWZmZXIubGVuZ3RoID09IDApIHsKICAgICAgICAgIHN0YXR1cy53cml0ZUVuY3J5cHRlZE5vTG9uZ2VyRW1wdHkgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBidWZmZXIuZW5kID0gbmV3X2VuZDsKICAgICAgfQogICAgICBidWZmZXIgPSBidWZzW3JlYWRQbGFpbnRleHRJZF07CiAgICAgIG5ld19lbmQgPSBlbmQocmVhZFBsYWludGV4dElkKTsKICAgICAgaWYgKG5ld19lbmQgIT0gYnVmZmVyLmVuZCkgewogICAgICAgIHN0YXR1cy5wcm9ncmVzcyA9IHRydWU7CiAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPT0gMCkgewogICAgICAgICAgc3RhdHVzLnJlYWRQbGFpbnRleHROb0xvbmdlckVtcHR5ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgYnVmZmVyLmVuZCA9IG5ld19lbmQ7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0YXR1czsKICAgIH0pOwogIH0KfQoKLyoqCiAqIEEgY2lyY3VsYXIgYnVmZmVyIGJhY2tlZCBieSBhbiBleHRlcm5hbCBieXRlIGFycmF5LiAgQWNjZXNzZWQgZnJvbQogKiBib3RoIEMrKyBhbmQgRGFydCBjb2RlIGluIGFuIHVuc3luY2hyb25pemVkIHdheSwgd2l0aCBvbmUgcmVhZGluZwogKiBhbmQgb25lIHdyaXRpbmcuICBBbGwgdXBkYXRlcyB0byBzdGFydCBhbmQgZW5kIGFyZSBkb25lIGJ5IERhcnQgY29kZS4KICovCmNsYXNzIF9FeHRlcm5hbEJ1ZmZlciB7CiAgLy8gVGhpcyB3aWxsIGJlIGFuIEV4dGVybmFsQnl0ZUFycmF5LCBiYWNrZWQgYnkgQyBhbGxvY2F0ZWQgZGF0YS4KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJzZXQiKQogIExpc3Q8aW50PiBkYXRhOwoKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgaW50IHN0YXJ0OwoKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgaW50IGVuZDsKCiAgZmluYWwgc2l6ZTsKCiAgX0V4dGVybmFsQnVmZmVyKHRoaXMuc2l6ZSkgewogICAgc3RhcnQgPSBlbmQgPSBzaXplIH4vIDI7CiAgfQoKICB2b2lkIGFkdmFuY2VTdGFydChpbnQgYnl0ZXMpIHsKICAgIGFzc2VydChzdGFydCA+IGVuZCB8fCBzdGFydCArIGJ5dGVzIDw9IGVuZCk7CiAgICBzdGFydCArPSBieXRlczsKICAgIGlmIChzdGFydCA+PSBzaXplKSB7CiAgICAgIHN0YXJ0IC09IHNpemU7CiAgICAgIGFzc2VydChzdGFydCA8PSBlbmQpOwogICAgICBhc3NlcnQoc3RhcnQgPCBzaXplKTsKICAgIH0KICB9CgogIHZvaWQgYWR2YW5jZUVuZChpbnQgYnl0ZXMpIHsKICAgIGFzc2VydChzdGFydCA8PSBlbmQgfHwgc3RhcnQgPiBlbmQgKyBieXRlcyk7CiAgICBlbmQgKz0gYnl0ZXM7CiAgICBpZiAoZW5kID49IHNpemUpIHsKICAgICAgZW5kIC09IHNpemU7CiAgICAgIGFzc2VydChlbmQgPCBzdGFydCk7CiAgICAgIGFzc2VydChlbmQgPCBzaXplKTsKICAgIH0KICB9CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gZW5kID09IHN0YXJ0OwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBzdGFydCA+IGVuZCA/IHNpemUgKyBlbmQgLSBzdGFydCA6IGVuZCAtIHN0YXJ0OwoKICBpbnQgZ2V0IGxpbmVhckxlbmd0aCA9PiBzdGFydCA+IGVuZCA/IHNpemUgLSBzdGFydCA6IGVuZCAtIHN0YXJ0OwoKICBpbnQgZ2V0IGZyZWUgPT4gc3RhcnQgPiBlbmQgPyBzdGFydCAtIGVuZCAtIDEgOiBzaXplICsgc3RhcnQgLSBlbmQgLSAxOwoKICBpbnQgZ2V0IGxpbmVhckZyZWUgewogICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gc3RhcnQgLSBlbmQgLSAxOwogICAgaWYgKHN0YXJ0ID09IDApIHJldHVybiBzaXplIC0gZW5kIC0gMTsKICAgIHJldHVybiBzaXplIC0gZW5kOwogIH0KCiAgVWludDhMaXN0IHJlYWQoaW50IGJ5dGVzKSB7CiAgICBpZiAoYnl0ZXMgPT0gbnVsbCkgewogICAgICBieXRlcyA9IGxlbmd0aDsKICAgIH0gZWxzZSB7CiAgICAgIGJ5dGVzID0gbWluKGJ5dGVzLCBsZW5ndGgpOwogICAgfQogICAgaWYgKGJ5dGVzID09IDApIHJldHVybiBudWxsOwogICAgVWludDhMaXN0IHJlc3VsdCA9IG5ldyBVaW50OExpc3QoYnl0ZXMpOwogICAgaW50IGJ5dGVzUmVhZCA9IDA7CiAgICAvLyBMb29wIG92ZXIgemVybywgb25lLCBvciB0d28gbGluZWFyIGRhdGEgcmFuZ2VzLgogICAgd2hpbGUgKGJ5dGVzUmVhZCA8IGJ5dGVzKSB7CiAgICAgIGludCB0b1JlYWQgPSBtaW4oYnl0ZXMgLSBieXRlc1JlYWQsIGxpbmVhckxlbmd0aCk7CiAgICAgIHJlc3VsdC5zZXRSYW5nZShieXRlc1JlYWQsIGJ5dGVzUmVhZCArIHRvUmVhZCwgZGF0YSwgc3RhcnQpOwogICAgICBhZHZhbmNlU3RhcnQodG9SZWFkKTsKICAgICAgYnl0ZXNSZWFkICs9IHRvUmVhZDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBpbnQgd3JpdGUoTGlzdDxpbnQ+IGlucHV0RGF0YSwgaW50IG9mZnNldCwgaW50IGJ5dGVzKSB7CiAgICBpZiAoYnl0ZXMgPiBmcmVlKSB7CiAgICAgIGJ5dGVzID0gZnJlZTsKICAgIH0KICAgIGludCB3cml0dGVuID0gMDsKICAgIGludCB0b1dyaXRlID0gbWluKGJ5dGVzLCBsaW5lYXJGcmVlKTsKICAgIC8vIExvb3Agb3ZlciB6ZXJvLCBvbmUsIG9yIHR3byBsaW5lYXIgZGF0YSByYW5nZXMuCiAgICB3aGlsZSAodG9Xcml0ZSA+IDApIHsKICAgICAgZGF0YS5zZXRSYW5nZShlbmQsIGVuZCArIHRvV3JpdGUsIGlucHV0RGF0YSwgb2Zmc2V0KTsKICAgICAgYWR2YW5jZUVuZCh0b1dyaXRlKTsKICAgICAgb2Zmc2V0ICs9IHRvV3JpdGU7CiAgICAgIHdyaXR0ZW4gKz0gdG9Xcml0ZTsKICAgICAgdG9Xcml0ZSA9IG1pbihieXRlcyAtIHdyaXR0ZW4sIGxpbmVhckZyZWUpOwogICAgfQogICAgcmV0dXJuIHdyaXR0ZW47CiAgfQoKICBpbnQgd3JpdGVGcm9tU291cmNlKExpc3Q8aW50PiBnZXREYXRhKGludCByZXF1ZXN0ZWQpKSB7CiAgICBpbnQgd3JpdHRlbiA9IDA7CiAgICBpbnQgdG9Xcml0ZSA9IGxpbmVhckZyZWU7CiAgICAvLyBMb29wIG92ZXIgemVybywgb25lLCBvciB0d28gbGluZWFyIGRhdGEgcmFuZ2VzLgogICAgd2hpbGUgKHRvV3JpdGUgPiAwKSB7CiAgICAgIC8vIFNvdXJjZSByZXR1cm5zIGF0IG1vc3QgdG9Xcml0ZSBieXRlcywgYW5kIGl0IHJldHVybnMgbnVsbCB3aGVuIGVtcHR5LgogICAgICB2YXIgaW5wdXREYXRhID0gZ2V0RGF0YSh0b1dyaXRlKTsKICAgICAgaWYgKGlucHV0RGF0YSA9PSBudWxsIHx8IGlucHV0RGF0YS5sZW5ndGggPT0gMCkgYnJlYWs7CiAgICAgIHZhciBsZW4gPSBpbnB1dERhdGEubGVuZ3RoOwogICAgICBkYXRhLnNldFJhbmdlKGVuZCwgZW5kICsgbGVuLCBpbnB1dERhdGEpOwogICAgICBhZHZhbmNlRW5kKGxlbik7CiAgICAgIHdyaXR0ZW4gKz0gbGVuOwogICAgICB0b1dyaXRlID0gbGluZWFyRnJlZTsKICAgIH0KICAgIHJldHVybiB3cml0dGVuOwogIH0KCiAgYm9vbCByZWFkVG9Tb2NrZXQoUmF3U29ja2V0IHNvY2tldCkgewogICAgLy8gTG9vcCBvdmVyIHplcm8sIG9uZSwgb3IgdHdvIGxpbmVhciBkYXRhIHJhbmdlcy4KICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIHZhciB0b1dyaXRlID0gbGluZWFyTGVuZ3RoOwogICAgICBpZiAodG9Xcml0ZSA9PSAwKSByZXR1cm4gZmFsc2U7CiAgICAgIGludCBieXRlcyA9IHNvY2tldC53cml0ZShkYXRhLCBzdGFydCwgdG9Xcml0ZSk7CiAgICAgIGFkdmFuY2VTdGFydChieXRlcyk7CiAgICAgIGlmIChieXRlcyA8IHRvV3JpdGUpIHsKICAgICAgICAvLyBUaGUgc29ja2V0IGhhcyBibG9ja2VkIHdoaWxlIHdlIGhhdmUgZGF0YSB0byB3cml0ZS4KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX1NlY3VyZUZpbHRlciB7CiAgZXh0ZXJuYWwgZmFjdG9yeSBfU2VjdXJlRmlsdGVyLl8oKTsKCiAgdm9pZCBjb25uZWN0KAogICAgICBTdHJpbmcgaG9zdE5hbWUsCiAgICAgIFNlY3VyaXR5Q29udGV4dCBjb250ZXh0LAogICAgICBib29sIGlzX3NlcnZlciwKICAgICAgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsCiAgICAgIGJvb2wgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlLAogICAgICBVaW50OExpc3QgcHJvdG9jb2xzKTsKICB2b2lkIGRlc3Ryb3koKTsKICB2b2lkIGhhbmRzaGFrZSgpOwogIFN0cmluZyBzZWxlY3RlZFByb3RvY29sKCk7CiAgdm9pZCByZWhhbmRzaGFrZSgpOwogIHZvaWQgcmVuZWdvdGlhdGUoYm9vbCB1c2VTZXNzaW9uQ2FjaGUsIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICBib29sIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSk7CiAgdm9pZCBpbml0KCk7CiAgWDUwOUNlcnRpZmljYXRlIGdldCBwZWVyQ2VydGlmaWNhdGU7CiAgaW50IHByb2Nlc3NCdWZmZXIoaW50IGJ1ZmZlckluZGV4KTsKICB2b2lkIHJlZ2lzdGVyQmFkQ2VydGlmaWNhdGVDYWxsYmFjayhGdW5jdGlvbiBjYWxsYmFjayk7CiAgdm9pZCByZWdpc3RlckhhbmRzaGFrZUNvbXBsZXRlQ2FsbGJhY2soRnVuY3Rpb24gaGFuZHNoYWtlQ29tcGxldGVIYW5kbGVyKTsKCiAgLy8gVGhpcyBjYWxsIG1heSBjYXVzZSBhIHJlZmVyZW5jZSBjb3VudGVkIHBvaW50ZXIgaW4gdGhlIG5hdGl2ZQogIC8vIGltcGxlbWVudGF0aW9uIHRvIGJlIHJldGFpbmVkLiBJdCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgcmVzdWx0aW5nCiAgLy8gdmFsdWUgaXMgcGFzc2VkIHRvIHRoZSBJTyBzZXJ2aWNlIHRocm91Z2ggYSBjYWxsIHRvIGRpc3BhdGNoKCkuCiAgaW50IF9wb2ludGVyKCk7CgogIExpc3Q8X0V4dGVybmFsQnVmZmVyPiBnZXQgYnVmZmVyczsKfQoKLyoqIEEgc2VjdXJlIG5ldHdvcmtpbmcgZXhjZXB0aW9uIGNhdXNlZCBieSBhIGZhaWx1cmUgaW4gdGhlCiAqICBUTFMvU1NMIHByb3RvY29sLgogKi8KY2xhc3MgVGxzRXhjZXB0aW9uIGltcGxlbWVudHMgSU9FeGNlcHRpb24gewogIGZpbmFsIFN0cmluZyB0eXBlOwogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwogIGZpbmFsIE9TRXJyb3Igb3NFcnJvcjsKCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGNvbnN0IFRsc0V4Y2VwdGlvbihbU3RyaW5nIG1lc3NhZ2UgPSAiIiwgT1NFcnJvciBvc0Vycm9yXSkKICAgICAgOiB0aGlzLl8oIlRsc0V4Y2VwdGlvbiIsIG1lc3NhZ2UsIG9zRXJyb3IpOwoKICBjb25zdCBUbHNFeGNlcHRpb24uXyh0aGlzLnR5cGUsIHRoaXMubWVzc2FnZSwgdGhpcy5vc0Vycm9yKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUodHlwZSk7CiAgICBpZiAobWVzc2FnZS5pc05vdEVtcHR5KSB7CiAgICAgIHNiLndyaXRlKCI6ICRtZXNzYWdlIik7CiAgICAgIGlmIChvc0Vycm9yICE9IG51bGwpIHsKICAgICAgICBzYi53cml0ZSgiICgkb3NFcnJvcikiKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChvc0Vycm9yICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoIjogJG9zRXJyb3IiKTsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKLyoqCiAqIEFuIGV4Y2VwdGlvbiB0aGF0IGhhcHBlbnMgaW4gdGhlIGhhbmRzaGFrZSBwaGFzZSBvZiBlc3RhYmxpc2hpbmcKICogYSBzZWN1cmUgbmV0d29yayBjb25uZWN0aW9uLgogKi8KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBIYW5kc2hha2VFeGNlcHRpb24gZXh0ZW5kcyBUbHNFeGNlcHRpb24gewogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBjb25zdCBIYW5kc2hha2VFeGNlcHRpb24oW1N0cmluZyBtZXNzYWdlID0gIiIsIE9TRXJyb3Igb3NFcnJvcl0pCiAgICAgIDogc3VwZXIuXygiSGFuZHNoYWtlRXhjZXB0aW9uIiwgbWVzc2FnZSwgb3NFcnJvcik7Cn0KCi8qKgogKiBBbiBleGNlcHRpb24gdGhhdCBoYXBwZW5zIGluIHRoZSBoYW5kc2hha2UgcGhhc2Ugb2YgZXN0YWJsaXNoaW5nCiAqIGEgc2VjdXJlIG5ldHdvcmsgY29ubmVjdGlvbiwgd2hlbiBsb29raW5nIHVwIG9yIHZlcmlmeWluZyBhCiAqIGNlcnRpZmljYXRlLgog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eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuaW87CgovKioKICogVGhlIG9iamVjdCBjb250YWluaW5nIHRoZSBjZXJ0aWZpY2F0ZXMgdG8gdHJ1c3Qgd2hlbiBtYWtpbmcKICogYSBzZWN1cmUgY2xpZW50IGNvbm5lY3Rpb24sIGFuZCB0aGUgY2VydGlmaWNhdGUgY2hhaW4gYW5kCiAqIHByaXZhdGUga2V5IHRvIHNlcnZlIGZyb20gYSBzZWN1cmUgc2VydmVyLgogKgogKiBUaGUgW1NlY3VyZVNvY2tldF0gIGFuZCBbU2VjdXJlU2VydmVyU29ja2V0XSBjbGFzc2VzIHRha2UgYSBTZWN1cml0eUNvbnRleHQKICogYXMgYW4gYXJndW1lbnQgdG8gdGhlaXIgY29ubmVjdCBhbmQgYmluZCBtZXRob2RzLgogKgogKiBDZXJ0aWZpY2F0ZXMgYW5kIGtleXMgY2FuIGJlIGFkZGVkIHRvIGEgU2VjdXJpdHlDb250ZXh0IGZyb20gZWl0aGVyIFBFTQogKiBvciBQS0NTMTIgY29udGFpbmVycy4KICoKICogaU9TIG5vdGU6IFNvbWUgbWV0aG9kcyB0byBhZGQsIHJlbW92ZSwgYW5kIGluc3BlY3QgY2VydGlmaWNhdGVzIGFyZSBub3QgeWV0CiAqIGltcGxlbWVudGVkLiBIb3dldmVyLCB0aGUgcGxhdGZvcm0ncyBidWlsdC1pbiB0cnVzdGVkIGNlcnRpZmljYXRlcyBjYW4KICogYmUgdXNlZCwgYnkgd2F5IG9mIFtTZWN1cml0eUNvbnRleHQuZGVmYXVsdENvbnRleHRdLgogKi8KYWJzdHJhY3QgY2xhc3MgU2VjdXJpdHlDb250ZXh0IHsKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IFtTZWN1cml0eUNvbnRleHRdLgogICAqCiAgICogQnkgZGVmYXVsdCwgdGhlIGNyZWF0ZWQgW1NlY3VyaXR5Q29udGV4dF0gY29udGFpbnMgbm8ga2V5cyBvciBjZXJ0aWZpY2F0ZXMuCiAgICogVGhlc2UgY2FuIGJlIGFkZGVkIGJ5IGNhbGxpbmcgdGhlIG1ldGhvZHMgb2YgdGhpcyBjbGFzcy4KICAgKgogICAqIElmIGB3aXRoVHJ1c3RlZFJvb3RzYCBpcyBwYXNzZWQgYXMgYHRydWVgLCB0aGUgW1NlY3VyaXR5Q29udGV4dF0gd2lsbCBiZQogICAqIHNlZWRlZCBieSB0aGUgdHJ1c3RlZCByb290IGNlcnRpZmljYXRlcyBwcm92aWRlZCBhcyBleHBsYWluZWQgYmVsb3cuIFRvCiAgICogb2J0YWluIGEgW1NlY3VyaXR5Q29udGV4dF0gY29udGFpbmluZyB0cnVzdGVkIHJvb3QgY2VydGlmaWNhdGVzLAogICAqIFtTZWN1cml0eUNvbnRleHQuZGVmYXVsdENvbnRleHRdIGlzIHVzdWFsbHkgc3VmZmljaWVudCwgYW5kIHNob3VsZAogICAqIGJlIHVzZWQgaW5zdGVhZC4gSG93ZXZlciwgaWYgdGhlIFtTZWN1cml0eUNvbnRleHRdIGNvbnRhaW5pbmcgdGhlIHRydXN0ZWQKICAgKiByb290IGNlcnRpZmljYXRlcyBtdXN0IGJlIG1vZGlmaWVkIHBlci1jb25uZWN0aW9uLCB0aGVuIGB3aXRoVHJ1c3RlZFJvb3RzYAogICAqIHNob3VsZCBiZSB1c2VkLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgU2VjdXJpdHlDb250ZXh0KHtib29sIHdpdGhUcnVzdGVkUm9vdHM6IGZhbHNlfSk7CgogIC8qKgogICAqIFNlY3VyZSBuZXR3b3JraW5nIGNsYXNzZXMgd2l0aCBhbiBvcHRpb25hbCBgY29udGV4dGAgcGFyYW1ldGVyCiAgICogdXNlIHRoZSBbZGVmYXVsdENvbnRleHRdIG9iamVjdCBpZiB0aGUgcGFyYW1ldGVyIGlzIG9taXR0ZWQuCiAgICogVGhpcyBvYmplY3QgY2FuIGFsc28gYmUgYWNjZXNzZWQsIGFuZCBtb2RpZmllZCwgZGlyZWN0bHkuCiAgICogRWFjaCBpc29sYXRlIGhhcyBhIGRpZmZlcmVudCBbZGVmYXVsdENvbnRleHRdIG9iamVjdC4KICAgKiBUaGUgW2RlZmF1bHRDb250ZXh0XSBvYmplY3QgdXNlcyBhIGxpc3Qgb2Ygd2VsbC1rbm93biB0cnVzdGVkCiAgICogY2VydGlmaWNhdGUgYXV0aG9yaXRpZXMgYXMgaXRzIHRydXN0ZWQgcm9vdHMuIE9uIExpbnV4IGFuZCBXaW5kb3dzLCB0aGlzCiAgICogbGlzdCBpcyB0YWtlbiBmcm9tIE1vemlsbGEsIHdobyBtYWludGFpbnMgaXQgYXMgcGFydCBvZiBGaXJlZm94LiBPbiwKICAgKiBNYWNPUywgaU9TLCBhbmQgQW5kcm9pZCwgdGhpcyBsaXN0IGNvbWVzIGZyb20gdGhlIHRydXN0ZWQgY2VydGlmaWNhdGVzCiAgICogc3RvcmVzIGJ1aWx0IGluIHRvIHRoZSBwbGF0Zm9ybXMuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIFNlY3VyaXR5Q29udGV4dCBnZXQgZGVmYXVsdENvbnRleHQ7CgogIC8qKgogICAqIFNldHMgdGhlIHByaXZhdGUga2V5IGZvciBhIHNlcnZlciBjZXJ0aWZpY2F0ZSBvciBjbGllbnQgY2VydGlmaWNhdGUuCiAgICoKICAgKiBBIHNlY3VyZSBjb25uZWN0aW9uIHVzaW5nIHRoaXMgU2VjdXJpdHlDb250ZXh0IHdpbGwgdXNlIHRoaXMga2V5IHdpdGgKICAgKiB0aGUgc2VydmVyIG9yIGNsaWVudCBjZXJ0aWZpY2F0ZSB0byBzaWduIGFuZCBkZWNyeXB0IG1lc3NhZ2VzLgogICAqIFtmaWxlXSBpcyB0aGUgcGF0aCB0byBhIFBFTSBvciBQS0NTMTIgZmlsZSBjb250YWluaW5nIGFuIGVuY3J5cHRlZAogICAqIHByaXZhdGUga2V5LCBlbmNyeXB0ZWQgd2l0aCBbcGFzc3dvcmRdLiBBc3N1bWluZyBpdCBpcyB3ZWxsLWZvcm1hdHRlZCwgYWxsCiAgICogb3RoZXIgY29udGVudHMgb2YgW2ZpbGVdIGFyZSBpZ25vcmVkLiBBbiB1bmVuY3J5cHRlZCBmaWxlIGNhbiBiZSB1c2VkLAogICAqIGJ1dCB0aGlzIGlzIG5vdCB1c3VhbC4KICAgKgogICAqIE5COiBUaGlzIGZ1bmN0aW9uIGNhbGxzIFtGaWxlLnJlYWRBc0J5dGVzU3luY10sIGFuZCB3aWxsIGJsb2NrIG9uIGZpbGUgSU8uCiAgICogUHJlZmVyIHVzaW5nIFt1c2VQcml2YXRlS2V5Qnl0ZXNdLgogICAqCiAgICogaU9TIG5vdGU6IE9ubHkgUEtDUzEyIGRhdGEgaXMgc3VwcG9ydGVkLiBJdCBzaG91bGQgY29udGFpbiBib3RoIHRoZSBwcml2YXRlCiAgICoga2V5IGFuZCB0aGUgY2VydGlmaWNhdGUgY2hhaW4uIE9uIGlPUyBvbmUgY2FsbCB0byBbdXNlUHJpdmF0ZUtleV0gd2l0aCB0aGlzCiAgICogZGF0YSBpcyB1c2VkIGluc3RlYWQgb2YgdHdvIGNhbGxzIHRvIFt1c2VDZXJ0aWZpY2F0ZUNoYWluXSBhbmQKICAgKiBbdXNlUHJpdmF0ZUtleV0uCiAgICovCiAgdm9pZCB1c2VQcml2YXRlS2V5KFN0cmluZyBmaWxlLCB7U3RyaW5nIHBhc3N3b3JkfSk7CgogIC8qKgogICAqIFNldHMgdGhlIHByaXZhdGUga2V5IGZvciBhIHNlcnZlciBjZXJ0aWZpY2F0ZSBvciBjbGllbnQgY2VydGlmaWNhdGUuCiAgICoKICAgKiBMaWtlIFt1c2VQcml2YXRlS2V5XSwgYnV0IHRha2VzIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhcyBhIGxpc3QKICAgKiBvZiBieXRlcy4KICAgKi8KICB2b2lkIHVzZVByaXZhdGVLZXlCeXRlcyhMaXN0PGludD4ga2V5Qnl0ZXMsIHtTdHJpbmcgcGFzc3dvcmR9KTsKCiAgLyoqCiAgICogU2V0cyB0aGUgc2V0IG9mIHRydXN0ZWQgWDUwOSBjZXJ0aWZpY2F0ZXMgdXNlZCBieSBbU2VjdXJlU29ja2V0XQogICAqIGNsaWVudCBjb25uZWN0aW9ucywgd2hlbiBjb25uZWN0aW5nIHRvIGEgc2VjdXJlIHNlcnZlci4KICAgKgogICAqIFtmaWxlXSBpcyB0aGUgcGF0aCB0byBhIFBFTSBvciBQS0NTMTIgZmlsZSBjb250YWluaW5nIFg1MDkgY2VydGlmaWNhdGVzLAogICAqIHVzdWFsbHkgcm9vdCBjZXJ0aWZpY2F0ZXMgZnJvbSBjZXJ0aWZpY2F0ZSBhdXRob3JpdGllcy4gRm9yIFBLQ1MxMiBmaWxlcywKICAgKiBbcGFzc3dvcmRdIGlzIHRoZSBwYXNzd29yZCBmb3IgdGhlIGZpbGUuIEZvciBQRU0gZmlsZXMsIFtwYXNzd29yZF0gaXMKICAgKiBpZ25vcmVkLiBBc3N1bWluZyBpdCBpcyB3ZWxsLWZvcm1hdHRlZCwgYWxsIG90aGVyIGNvbnRlbnRzIG9mIFtmaWxlXSBhcmUKICAgKiBpZ25vcmVkLgogICAqCiAgICogTkI6IFRoaXMgZnVuY3Rpb24gY2FsbHMgW0ZpbGUucmVhZEFzQnl0ZXNTeW5jXSwgYW5kIHdpbGwgYmxvY2sgb24gZmlsZSBJTy4KICAgKiBQcmVmZXIgdXNpbmcgW3NldFRydXN0ZWRDZXJ0aWZpY2F0ZXNCeXRlc10uCiAgICoKICAgKiBpT1Mgbm90ZTogT24gaU9TLCB0aGlzIGNhbGwgdGFrZXMgb25seSB0aGUgYnl0ZXMgZm9yIGEgc2luZ2xlIERFUgogICAqIGVuY29kZWQgWDUwOSBjZXJ0aWZpY2F0ZS4gSXQgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB0byBhZGQKICAgKiBtdWx0aXBsZSB0cnVzdGVkIGNlcnRpZmljYXRlcyB0byB0aGUgY29udGV4dC4gQSBERVIgZW5jb2RlZCBjZXJ0aWZpY2F0ZQogICAqIGNhbiBiZSBvYnRhaW5lZCBmcm9tIGEgUEVNIGVuY29kZWQgY2VydGlmaWNhdGUgYnkgdXNpbmcgdGhlIG9wZW5zc2wgdG9vbDoKICAgKgogICAqICAgJCBvcGVuc3NsIHg1MDkgLW91dGZvcm0gZGVyIC1pbiBjZXJ0LnBlbSAtb3V0IGNlcnQuZGVyCiAgICovCiAgdm9pZCBzZXRUcnVzdGVkQ2VydGlmaWNhdGVzKFN0cmluZyBmaWxlLCB7U3RyaW5nIHBhc3N3b3JkfSk7CgogIC8qKgogICAqIFNldHMgdGhlIHNldCBvZiB0cnVzdGVkIFg1MDkgY2VydGlmaWNhdGVzIHVzZWQgYnkgW1NlY3VyZVNvY2tldF0KICAgKiBjbGllbnQgY29ubmVjdGlvbnMsIHdoZW4gY29ubmVjdGluZyB0byBhIHNlY3VyZSBzZXJ2ZXIuCiAgICoKICAgKiBMaWtlIFtzZXRUcnVzdGVkQ2VydGlmaWNhdGVzXSBidXQgdGFrZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLgogICAqLwogIHZvaWQgc2V0VHJ1c3RlZENlcnRpZmljYXRlc0J5dGVzKExpc3Q8aW50PiBjZXJ0Qnl0ZXMsIHtTdHJpbmcgcGFzc3dvcmR9KTsKCiAgLyoqCiAgICogU2V0cyB0aGUgY2hhaW4gb2YgWDUwOSBjZXJ0aWZpY2F0ZXMgc2VydmVkIGJ5IFtTZWN1cmVTZXJ2ZXJTb2NrZXRdCiAgICogd2hlbiBtYWtpbmcgc2VjdXJlIGNvbm5lY3Rpb25zLCBpbmNsdWRpbmcgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZS4KICAgKgogICAqIFtmaWxlXSBpcyBhIFBFTSBvciBQS0NTMTIgZmlsZSBjb250YWluaW5nIFg1MDkgY2VydGlmaWNhdGVzLCBzdGFydGluZyB3aXRoCiAgICogdGhlIHJvb3QgYXV0aG9yaXR5IGFuZCBpbnRlcm1lZGlhdGUgYXV0aG9yaXRpZXMgZm9ybWluZyB0aGUgc2lnbmVkCiAgICogY2hhaW4gdG8gdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSwgYW5kIGVuZGluZyB3aXRoIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUuCiAgICogVGhlIHByaXZhdGUga2V5IGZvciB0aGUgc2VydmVyIGNlcnRpZmljYXRlIGlzIHNldCBieSBbdXNlUHJpdmF0ZUtleV0uIEZvcgogICAqIFBLQ1MxMiBmaWxlcywgW3Bhc3N3b3JkXSBpcyB0aGUgcGFzc3dvcmQgZm9yIHRoZSBmaWxlLiBGb3IgUEVNIGZpbGVzLAogICAqIFtwYXNzd29yZF0gaXMgaWdub3JlZC4gQXNzdW1pbmcgaXQgaXMgd2VsbC1mb3JtYXR0ZWQsIGFsbAogICAqIG90aGVyIGNvbnRlbnRzIG9mIFtmaWxlXSBhcmUgaWdub3JlZC4KICAgKgogICAqIE5COiBUaGlzIGZ1bmN0aW9uIGNhbGxzIFtGaWxlLnJlYWRBc0J5dGVzU3luY10sIGFuZCB3aWxsIGJsb2NrIG9uIGZpbGUgSU8uCiAgICogUHJlZmVyIHVzaW5nIFt1c2VDZXJ0aWZpY2F0ZUNoYWluQnl0ZXNdLgogICAqCiAgICogaU9TIG5vdGU6IEFzIG5vdGVkIGFib3ZlLCBbdXNlUHJpdmF0ZUtleV0gZG9lcyB0aGUgam9iIG9mIGJvdGgKICAgKiB0aGF0IGNhbGwgYW5kIHRoaXMgb25lLiBPbiBpT1MsIHRoaXMgY2FsbCBpcyBhIG5vLW9wLgogICAqLwogIHZvaWQgdXNlQ2VydGlmaWNhdGVDaGFpbihTdHJpbmcgZmlsZSwge1N0cmluZyBwYXNzd29yZH0pOwoKICAvKioKICAgKiBTZXRzIHRoZSBjaGFpbiBvZiBYNTA5IGNlcnRpZmljYXRlcyBzZXJ2ZWQgYnkgW1NlY3VyZVNlcnZlclNvY2tldF0KICAgKiB3aGVuIG1ha2luZyBzZWN1cmUgY29ubmVjdGlvbnMsIGluY2x1ZGluZyB0aGUgc2VydmVyIGNlcnRpZmljYXRlLgogICAqCiAgICogTGlrZSBbdXNlQ2VydGlmaWNhdGVDaGFpbl0gYnV0IHRha2VzIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4KICAgKi8KICB2b2lkIHVzZUNlcnRpZmljYXRlQ2hhaW5CeXRlcyhMaXN0PGludD4gY2hhaW5CeXRlcywge1N0cmluZyBwYXNzd29yZH0pOwoKICAvKioKICAgKiBTZXRzIHRoZSBsaXN0IG9mIGF1dGhvcml0eSBuYW1lcyB0aGF0IGEgW1NlY3VyZVNlcnZlclNvY2tldF0gd2lsbCBhZHZlcnRpc2UKICAgKiBhcyBhY2NlcHRlZCB3aGVuIHJlcXVlc3RpbmcgYSBjbGllbnQgY2VydGlmaWNhdGUgZnJvbSBhIGNvbm5lY3RpbmcKICAgKiBjbGllbnQuCiAgICoKICAgKiBbZmlsZV0gaXMgYSBQRU0gb3IgUEtDUzEyIGZpbGUgY29udGFpbmluZyB0aGUgYWNjZXB0ZWQgc2lnbmluZwogICAqIGF1dGhvcml0eSBjZXJ0aWZpY2F0ZXMgLSB0aGUgYXV0aG9yaXR5IG5hbWVzIGFyZSBleHRyYWN0ZWQgZnJvbSB0aGUKICAgKiBjZXJ0aWZpY2F0ZXMuIEZvciBQS0NTMTIgZmlsZXMsIFtwYXNzd29yZF0gaXMgdGhlIHBhc3N3b3JkIGZvciB0aGUgZmlsZS4KICAgKiBGb3IgUEVNIGZpbGVzLCBbcGFzc3dvcmRdIGlzIGlnbm9yZWQuIEFzc3VtaW5nIGl0IGlzIHdlbGwtZm9ybWF0dGVkLCBhbGwKICAgKiBvdGhlciBjb250ZW50cyBvZiBbZmlsZV0gYXJlIGlnbm9yZWQuCiAgICoKICAgKiBOQjogVGhpcyBmdW5jdGlvbiBjYWxscyBbRmlsZS5yZWFkQXNCeXRlc1N5bmNdLCBhbmQgd2lsbCBibG9jayBvbiBmaWxlIElPLgogICAqIFByZWZlciB1c2luZyBbc2V0Q2xpZW50QXV0aG9yaXRpZXNCeXRlc10uCiAgICoKICAgKiBpT1Mgbm90ZTogVGhpcyBjYWxsIGlzIG5vdCBzdXBwb3J0ZWQuCiAgICovCiAgdm9pZCBzZXRDbGllbnRBdXRob3JpdGllcyhTdHJpbmcgZmlsZSwge1N0cmluZyBwYXNzd29yZH0pOwoKICAvKioKICAgKiBTZXRzIHRoZSBsaXN0IG9mIGF1dGhvcml0eSBuYW1lcyB0aGF0IGEgW1NlY3VyZVNlcnZlclNvY2tldF0gd2lsbCBhZHZlcnRpc2UKICAgKiBhcyBhY2NlcHRlZCwgd2hlbiByZXF1ZXN0aW5nIGEgY2xpZW50IGNlcnRpZmljYXRlIGZyb20gYSBjb25uZWN0aW5nCiAgICogY2xpZW50LgogICAqCiAgICogTGlrZSBbc2V0Q2xpZW50QXV0aG9yaXRpZXNdIGJ1dCB0YWtlcyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuCiAgICovCiAgdm9pZCBzZXRDbGllbnRBdXRob3JpdGllc0J5dGVzKExpc3Q8aW50PiBhdXRoQ2VydEJ5dGVzLCB7U3RyaW5nIHBhc3N3b3JkfSk7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIEFMUE4uIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBhbmQgd2lsbCBiZQogICAqIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4KICAgKi8KICBAZGVwcmVjYXRlZAogIGV4dGVybmFsIHN0YXRpYyBib29sIGdldCBhbHBuU3VwcG9ydGVkOwoKICAvKioKICAgKiBTZXRzIHRoZSBsaXN0IG9mIGFwcGxpY2F0aW9uLWxldmVsIHByb3RvY29scyBzdXBwb3J0ZWQgYnkgYSBjbGllbnQKICAgKiBjb25uZWN0aW9uIG9yIHNlcnZlciBjb25uZWN0aW9uLiBUaGUgQUxQTiAoYXBwbGljYXRpb24gbGV2ZWwgcHJvdG9jb2wKICAgKiBuZWdvdGlhdGlvbikgZXh0ZW5zaW9uIHRvIFRMUyBhbGxvd3MgYSBjbGllbnQgdG8gc2VuZCBhIGxpc3Qgb2YKICAgKiBwcm90b2NvbHMgaW4gdGhlIFRMUyBjbGllbnQgaGVsbG8gbWVzc2FnZSwgYW5kIHRoZSBzZXJ2ZXIgdG8gcGljawogICAqIG9uZSBhbmQgc2VuZCB0aGUgc2VsZWN0ZWQgb25lIGJhY2sgaW4gaXRzIHNlcnZlciBoZWxsbyBtZXNzYWdlLgogICAqCiAgICogU2VwYXJhdGUgbGlzdHMgb2YgcHJvdG9jb2xzIGNhbiBiZSBzZW50IGZvciBjbGllbnQgY29ubmVjdGlvbnMgYW5kCiAgICogZm9yIHNlcnZlciBjb25uZWN0aW9ucywgdXNpbmcgdGhlIHNhbWUgU2VjdXJpdHlDb250ZXh0LiAgVGhlIFtpc1NlcnZlcl0KICAgKiBib29sZWFuIGFyZ3VtZW50IHNwZWNpZmllcyB3aGV0aGVyIHRvIHNldCB0aGUgbGlzdCBmb3Igc2VydmVyIGNvbm5lY3Rpb25zCiAgICogb3IgY2xpZW50IGNvbm5lY3Rpb25zLgogICAqLwogIHZvaWQgc2V0QWxwblByb3RvY29scyhMaXN0PFN0cmluZz4gcHJvdG9jb2xzLCBib29sIGlzU2VydmVyKTsKCiAgLy8vIEVuY29kZXMgYSBzZXQgb2Ygc3VwcG9ydGVkIHByb3RvY29scyBmb3IgQUxQTi9OUE4gdXNhZ2UuCiAgLy8vCiAgLy8vIFRoZSBgcHJvdG9jb2xzYCBsaXN0IGlzIGV4cGVjdGVkIHRvIGNvbnRhaW4gcHJvdG9jb2xzIGluIGRlc2NlbmRpbmcgb3JkZXIKICAvLy8gb2YgcHJlZmVyZW5jZS4KICAvLy8KICAvLy8gU2VlIFJGQyA3MzAxIChodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzMwMSkgZm9yIHRoZSBlbmNvZGluZyBvZgogIC8vLyBgTGlzdDxTdHJpbmc+IHByb3RvY29sc2A6CiAgLy8vICAgICBvcGFxdWUgUHJvdG9jb2xOYW1lPDEuLjJeOC0xPjsKICAvLy8KICAvLy8gICAgIHN0cnVjdCB7CiAgLy8vICAgICAgICAgUHJvdG9jb2xOYW1lIHByb3RvY29sX25hbWVfbGlzdDwyLi4yXjE2LTE+CiAgLy8vICAgICB9IFByb3RvY29sTmFtZUxpc3Q7CiAgLy8vCiAgLy8vIFRoZSBlbmNvZGluZyBvZiB0aGUgb3BhcXVlIGBQcm90b2NvbE5hbWU8bG93ZXIuLnVwcGVyPmAgdmVjdG9yIGlzCiAgLy8vIGRlc2NyaWJlZCBpbiBSRkMgMjI0NjogNC4zIFZlY3RvcnMuCiAgLy8vCiAgLy8vIE5vdGU6IEV2ZW4gdGhvdWdoIHRoaXMgZW5jb2Rpbmcgc2NoZW1lIHdvdWxkIGFsbG93IGEgdG90YWwKICAvLy8gYFByb3RvY29sTmFtZUxpc3RgIGxlbmd0aCBvZiA2NTUzNSwgdGhpcyBsaW1pdCBjYW5ub3QgYmUgcmVhY2hlZC4gVGVzdGluZwogIC8vLyBzaG93ZWQgdGhhdCBtb3JlIHRoYW4gfiAyXjE0ICBieXRlcyB3aWxsIGZhaWwgdG8gbmVnb3RpYXRlIGEgcHJvdG9jb2wuCiAgLy8vIFdlIHdpbGwgYmUgY29uc2VydmF0aXZlIGFuZCBzdXBwb3J0IG9ubHkgbWVzc2FnZXMgdXAgdG8gKDE8PDEzKS0xIGJ5dGVzLgogIHN0YXRpYyBVaW50OExpc3QgX3Byb3RvY29sc1RvTGVuZ3RoRW5jb2RpbmcoTGlzdDxTdHJpbmc+IHByb3RvY29scykgewogICAgaWYgKHByb3RvY29scyA9PSBudWxsIHx8IHByb3RvY29scy5sZW5ndGggPT0gMCkgewogICAgICByZXR1cm4gbmV3IFVpbnQ4TGlzdCgwKTsKICAgIH0KICAgIGludCBwcm90b2NvbHNMZW5ndGggPSBwcm90b2NvbHMubGVuZ3RoOwoKICAgIC8vIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIHdpbGwgbmVlZCBpZiBpdCBpcyBBU0NJSS4KICAgIGludCBleHBlY3RlZExlbmd0aCA9IHByb3RvY29sc0xlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvdG9jb2xzTGVuZ3RoOyBpKyspIHsKICAgICAgaW50IGxlbmd0aCA9IHByb3RvY29sc1tpXS5sZW5ndGg7CiAgICAgIGlmIChsZW5ndGggPiAwICYmIGxlbmd0aCA8PSAyNTUpIHsKICAgICAgICBleHBlY3RlZExlbmd0aCArPSBsZW5ndGg7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAgICdMZW5ndGggb2YgcHJvdG9jb2wgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDI1NSAod2FzOiAkbGVuZ3RoKS4nKTsKICAgICAgfQogICAgfQoKICAgIGlmIChleHBlY3RlZExlbmd0aCA+PSAoMSA8PCAxMykpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAnVGhlIG1heGltdW0gbWVzc2FnZSBsZW5ndGggc3VwcG9ydGVkIGlzIDJeMTMtMS4nKTsKICAgIH0KCiAgICAvLyBUcnkgZW5jb2RpbmcgdGhlIGBMaXN0PFN0cmluZz4gcHJvdG9jb2xzYCBhcnJheSB1c2luZyBmYXN0IEFTQ0lJIHBhdGguCiAgICB2YXIgYnl0ZXMgPSBuZXcgVWludDhMaXN0KGV4cGVjdGVkTGVuZ3RoKTsKICAgIGludCBieXRlc09mZnNldCA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb3RvY29sc0xlbmd0aDsgaSsrKSB7CiAgICAgIFN0cmluZyBwcm90byA9IHByb3RvY29sc1tpXTsKCiAgICAgIC8vIEFkZCBsZW5ndGggYnl0ZS4KICAgICAgYnl0ZXNbYnl0ZXNPZmZzZXQrK10gPSBwcm90by5sZW5ndGg7CiAgICAgIGludCBiaXRzID0gMDsKCiAgICAgIC8vIEFkZCBwcm90b2NvbCBieXRlcy4KICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwcm90by5sZW5ndGg7IGorKykgewogICAgICAgIHZhciBjaGFyID0gcHJvdG8uY29kZVVuaXRBdChqKTsKICAgICAgICBiaXRzIHw9IGNoYXI7CiAgICAgICAgYnl0ZXNbYnl0ZXNPZmZzZXQrK10gPSBjaGFyICYgMHhmZjsKICAgICAgfQoKICAgICAgLy8gR28gc2xvdyBjYXNlIGlmIHdlIGhhdmUgZW5jb3VudGVyZWQgYW55dGhpbmcgbm9uLWFzY2lpLgogICAgICBpZiAoYml0cyA+IDB4N2YpIHsKICAgICAgICByZXR1cm4gX3Byb3RvY29sc1RvTGVuZ3RoRW5jb2RpbmdOb25Bc2NpaUJhaWxvdXQocHJvdG9jb2xzKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGJ5dGVzOwogIH0KCiAgc3RhdGljIFVpbnQ4TGlzdCBfcHJvdG9jb2xzVG9MZW5ndGhFbmNvZGluZ05vbkFzY2lpQmFpbG91dCgKICAgICAgTGlzdDxTdHJpbmc+IHByb3RvY29scykgewogICAgdm9pZCBhZGRQcm90b2NvbChMaXN0PGludD4gb3V0Qnl0ZXMsIFN0cmluZyBwcm90b2NvbCkgewogICAgICB2YXIgcHJvdG9jb2xCeXRlcyA9IHV0ZjguZW5jb2RlKHByb3RvY29sKTsKICAgICAgdmFyIGxlbiA9IHByb3RvY29sQnl0ZXMubGVuZ3RoOwoKICAgICAgaWYgKGxlbiA+IDI1NSkgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKAogICAgICAgICAgICAnTGVuZ3RoIG9mIHByb3RvY29sIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAyNTUgKHdhczogJGxlbiknKTsKICAgICAgfQogICAgICAvLyBBZGQgbGVuZ3RoIGJ5dGUuCiAgICAgIG91dEJ5dGVzLmFkZChsZW4pOwoKICAgICAgLy8gQWRkIHByb3RvY29sIGJ5dGVzLgogICAgICBvdXRCeXRlcy5hZGRBbGwocHJvdG9jb2xCeXRlcyk7CiAgICB9CgogICAgTGlzdDxpbnQ+IGJ5dGVzID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3RvY29scy5sZW5ndGg7IGkrKykgewogICAgICBhZGRQcm90b2NvbChieXRlcywgcHJvdG9jb2xzW2ldKTsKICAgIH0KCiAgICBpZiAoYnl0ZXMubGVuZ3RoID49ICgxIDw8IDEzKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigKICAgICAgICAgICdUaGUgbWF4aW11bSBtZXNzYWdlIGxlbmd0aCBzdXBwb3J0ZWQgaXMgMl4xMy0xLicpOwogICAgfQoKICAgIHJldHVybiBuZXcgVWludDhMaXN0LmZyb21MaXN0KGJ5dGVzKTsKICB9Cn0KgR8ATk48AQ8BEQEEPz0uA081A0sZA09KOAQhBiYFUT4FTk1GSE9QFQZEAQZEQj87Q05KTCcGNgEGSgVLREhQTBwFUCgFUVFEFgY2AQZKBUgPBkIBBkY9BU5PS04OBVAxBUdGTU8FPgY/AQZGPQVHBkwBBkhHBVBITk9LPysFUC4FRDsGPAEGSEcFRAZKAQZRSA0FRElOTisFUC8FKwY9AQZRSQ0FRQZOAQZOIgYOKgEGSEtFR0UFSE1PHAZAAT8GUBUGTSApBhM5HgZIKgZBUE1PSDYfBiwBQiowKCkiDyFNCAYBJx8+BgFOLxkwIwEaKxQBHS8oFiwIAUEZRQgGEgQBPiA8MSYBFyFJCBoZAR0mBgEaMSgGASUfPgYBKgQCAR1kYXJ0OmlvL3NlY3VyaXR5X2NvbnRleHQuZGFydDtvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9pby9zb2NrZXQuZGFydMAAhf0vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5pbzsKCi8qKgogKiBbSW50ZXJuZXRBZGRyZXNzVHlwZV0gaXMgdGhlIHR5cGUgYW4gW0ludGVybmV0QWRkcmVzc10uIEN1cnJlbnRseSwKICogSVAgdmVyc2lvbiA0IChJUHY0KSBhbmQgSVAgdmVyc2lvbiA2IChJUHY2KSBhcmUgc3VwcG9ydGVkLgogKi8KY2xhc3MgSW50ZXJuZXRBZGRyZXNzVHlwZSB7CiAgc3RhdGljIGNvbnN0IEludGVybmV0QWRkcmVzc1R5cGUgSVB2NCA9IGNvbnN0IEludGVybmV0QWRkcmVzc1R5cGUuXygwKTsKICBzdGF0aWMgY29uc3QgSW50ZXJuZXRBZGRyZXNzVHlwZSBJUHY2ID0gY29uc3QgSW50ZXJuZXRBZGRyZXNzVHlwZS5fKDEpOwogIHN0YXRpYyBjb25zdCBJbnRlcm5ldEFkZHJlc3NUeXBlIGFueSA9IGNvbnN0IEludGVybmV0QWRkcmVzc1R5cGUuXygtMSk7CgogIEBEZXByZWNhdGVkKCJVc2UgSVB2NCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgSW50ZXJuZXRBZGRyZXNzVHlwZSBJUF9WNCA9IElQdjQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBJUHY2IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBJbnRlcm5ldEFkZHJlc3NUeXBlIElQX1Y2ID0gSVB2NjsKICBARGVwcmVjYXRlZCgiVXNlIGFueSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgSW50ZXJuZXRBZGRyZXNzVHlwZSBBTlkgPSBhbnk7CgogIGZpbmFsIGludCBfdmFsdWU7CgogIGNvbnN0IEludGVybmV0QWRkcmVzc1R5cGUuXyh0aGlzLl92YWx1ZSk7CgogIGZhY3RvcnkgSW50ZXJuZXRBZGRyZXNzVHlwZS5fZnJvbShpbnQgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSA9PSAwKSByZXR1cm4gSVB2NDsKICAgIGlmICh2YWx1ZSA9PSAxKSByZXR1cm4gSVB2NjsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJJbnZhbGlkIHR5cGU6ICR2YWx1ZSIpOwogIH0KCiAgLyoqCiAgICogR2V0IHRoZSBuYW1lIG9mIHRoZSB0eXBlLCBlLmcuICJJUHY0IiBvciAiSVB2NiIuCiAgICovCiAgU3RyaW5nIGdldCBuYW1lIHsKICAgIHN3aXRjaCAoX3ZhbHVlKSB7CiAgICAgIGNhc2UgLTE6CiAgICAgICAgcmV0dXJuICJBTlkiOwogICAgICBjYXNlIDA6CiAgICAgICAgcmV0dXJuICJJUHY0IjsKICAgICAgY2FzZSAxOgogICAgICAgIHJldHVybiAiSVB2NiI7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkludmFsaWQgSW50ZXJuZXRBZGRyZXNzIik7CiAgICB9CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiSW50ZXJuZXRBZGRyZXNzVHlwZTogJG5hbWUiOwp9CgovKioKICogQW4gaW50ZXJuZXQgYWRkcmVzcy4KICoKICogVGhpcyBvYmplY3QgaG9sZHMgYW4gaW50ZXJuZXQgYWRkcmVzcy4gSWYgdGhpcyBpbnRlcm5ldCBhZGRyZXNzCiAqIGlzIHRoZSByZXN1bHQgb2YgYSBETlMgbG9va3VwLCB0aGUgYWRkcmVzcyBhbHNvIGhvbGRzIHRoZSBob3N0bmFtZQogKiB1c2VkIHRvIG1ha2UgdGhlIGxvb2t1cC4KICogQW4gSW50ZXJuZXQgYWRkcmVzcyBjb21iaW5lZCB3aXRoIGEgcG9ydCBudW1iZXIgcmVwcmVzZW50cyBhbgogKiBlbmRwb2ludCB0byB3aGljaCBhIHNvY2tldCBjYW4gY29ubmVjdCBvciBhIGxpc3RlbmluZyBzb2NrZXQgY2FuCiAqIGJpbmQuCiAqLwphYnN0cmFjdCBjbGFzcyBJbnRlcm5ldEFkZHJlc3MgewogIC8qKgogICAqIElQIHZlcnNpb24gNCBsb29wYmFjayBhZGRyZXNzLiBVc2UgdGhpcyBhZGRyZXNzIHdoZW4gbGlzdGVuaW5nIG9uCiAgICogb3IgY29ubmVjdGluZyB0byB0aGUgbG9vcGJhY2sgYWRhcHRlciB1c2luZyBJUCB2ZXJzaW9uIDQgKElQdjQpLgogICAqLwogIHN0YXRpYyBJbnRlcm5ldEFkZHJlc3MgZ2V0IGxvb3BiYWNrSVB2NCA9PiBMT09QQkFDS19JUF9WNDsKICBARGVwcmVjYXRlZCgiVXNlIGxvb3BiYWNrSVB2NCBpbnN0ZWFkIikKICBleHRlcm5hbCBzdGF0aWMgSW50ZXJuZXRBZGRyZXNzIGdldCBMT09QQkFDS19JUF9WNDsKCiAgLyoqCiAgICogSVAgdmVyc2lvbiA2IGxvb3BiYWNrIGFkZHJlc3MuIFVzZSB0aGlzIGFkZHJlc3Mgd2hlbiBsaXN0ZW5pbmcgb24KICAgKiBvciBjb25uZWN0aW5nIHRvIHRoZSBsb29wYmFjayBhZGFwdGVyIHVzaW5nIElQIHZlcnNpb24gNiAoSVB2NikuCiAgICovCiAgc3RhdGljIEludGVybmV0QWRkcmVzcyBnZXQgbG9vcGJhY2tJUHY2ID0+IExPT1BCQUNLX0lQX1Y2OwogIEBEZXByZWNhdGVkKCJVc2UgbG9vcGJhY2tJUHY2IGluc3RlYWQiKQogIGV4dGVybmFsIHN0YXRpYyBJbnRlcm5ldEFkZHJlc3MgZ2V0IExPT1BCQUNLX0lQX1Y2OwoKICAvKioKICAgKiBJUCB2ZXJzaW9uIDQgYW55IGFkZHJlc3MuIFVzZSB0aGlzIGFkZHJlc3Mgd2hlbiBsaXN0ZW5pbmcgb24KICAgKiBhbGwgYWRhcHRlcnMgSVAgYWRkcmVzc2VzIHVzaW5nIElQIHZlcnNpb24gNCAoSVB2NCkuCiAgICovCiAgc3RhdGljIEludGVybmV0QWRkcmVzcyBnZXQgYW55SVB2NCA9PiBBTllfSVBfVjQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBhbnlJUHY0IGluc3RlYWQiKQogIGV4dGVybmFsIHN0YXRpYyBJbnRlcm5ldEFkZHJlc3MgZ2V0IEFOWV9JUF9WNDsKCiAgLyoqCiAgICogSVAgdmVyc2lvbiA2IGFueSBhZGRyZXNzLiBVc2UgdGhpcyBhZGRyZXNzIHdoZW4gbGlzdGVuaW5nIG9uCiAgICogYWxsIGFkYXB0ZXJzIElQIGFkZHJlc3NlcyB1c2luZyBJUCB2ZXJzaW9uIDYgKElQdjYpLgogICAqLwogIHN0YXRpYyBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFueUlQdjYgPT4gQU5ZX0lQX1Y2OwogIEBEZXByZWNhdGVkKCJVc2UgYW55SVB2NiBpbnN0ZWFkIikKICBleHRlcm5hbCBzdGF0aWMgSW50ZXJuZXRBZGRyZXNzIGdldCBBTllfSVBfVjY7CgogIC8qKgogICAqIFRoZSBbdHlwZV0gb2YgdGhlIFtJbnRlcm5ldEFkZHJlc3NdIHNwZWNpZmllZCB3aGF0IElQIHByb3RvY29sLgogICAqLwogIEludGVybmV0QWRkcmVzc1R5cGUgZ2V0IHR5cGU7CgogIC8qKgogICAqIFRoZSBudW1lcmljIGFkZHJlc3Mgb2YgdGhlIGhvc3QuIEZvciBJUHY0IGFkZHJlc3NlcyB0aGlzIGlzIHVzaW5nCiAgICogdGhlIGRvdHRlZC1kZWNpbWFsIG5vdGF0aW9uLiBGb3IgSVB2NiBpdCBpcyB1c2luZyB0aGUKICAgKiBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi4KICAgKi8KICBTdHJpbmcgZ2V0IGFkZHJlc3M7CgogIC8qKgogICAqIFRoZSBob3N0IHVzZWQgdG8gbG9va3VwIHRoZSBhZGRyZXNzLiBJZiB0aGVyZSBpcyBubyBob3N0CiAgICogYXNzb2NpYXRlZCB3aXRoIHRoZSBhZGRyZXNzIHRoaXMgcmV0dXJucyB0aGUgbnVtZXJpYyBhZGRyZXNzLgogICAqLwogIFN0cmluZyBnZXQgaG9zdDsKCiAgLyoqCiAgICogR2V0IHRoZSByYXcgYWRkcmVzcyBvZiB0aGlzIFtJbnRlcm5ldEFkZHJlc3NdLiBUaGUgcmVzdWx0IGlzIGVpdGhlciBhCiAgICogNCBvciAxNiBieXRlIGxvbmcgbGlzdC4gVGhlIHJldHVybmVkIGxpc3QgaXMgYSBjb3B5LCBtYWtpbmcgaXQgcG9zc2libGUKICAgKiB0byBjaGFuZ2UgdGhlIGxpc3Qgd2l0aG91dCBtb2RpZnlpbmcgdGhlIFtJbnRlcm5ldEFkZHJlc3NdLgogICAqLwogIFVpbnQ4TGlzdCBnZXQgcmF3QWRkcmVzczsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBbSW50ZXJuZXRBZGRyZXNzXSBpcyBhIGxvb3BiYWNrIGFkZHJlc3MuCiAgICovCiAgYm9vbCBnZXQgaXNMb29wYmFjazsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBbSW50ZXJuZXRBZGRyZXNzXXMgc2NvcGUgaXMgYSBsaW5rLWxvY2FsLgogICAqLwogIGJvb2wgZ2V0IGlzTGlua0xvY2FsOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIFtJbnRlcm5ldEFkZHJlc3NdcyBzY29wZSBpcyBtdWx0aWNhc3QuCiAgICovCiAgYm9vbCBnZXQgaXNNdWx0aWNhc3Q7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgW0ludGVybmV0QWRkcmVzc10gZnJvbSBhIG51bWVyaWMgYWRkcmVzcy4KICAgKgogICAqIElmIHRoZSBhZGRyZXNzIGluIFthZGRyZXNzXSBpcyBub3QgYSBudW1lcmljIElQdjQKICAgKiAoZG90dGVkLWRlY2ltYWwgbm90YXRpb24pIG9yIElQdjYgKGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uKS4KICAgKiBhZGRyZXNzIFtBcmd1bWVudEVycm9yXSBpcyB0aHJvd24uCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBJbnRlcm5ldEFkZHJlc3MoU3RyaW5nIGFkZHJlc3MpOwoKICAvKioKICAgKiBQZXJmb3JtIGEgcmV2ZXJzZSBkbnMgbG9va3VwIG9uIHRoZSBbYWRkcmVzc10sIGNyZWF0aW5nIGEgbmV3CiAgICogW0ludGVybmV0QWRkcmVzc10gd2hlcmUgdGhlIGhvc3QgZmllbGQgc2V0IHRvIHRoZSByZXN1bHQuCiAgICovCiAgRnV0dXJlPEludGVybmV0QWRkcmVzcz4gcmV2ZXJzZSgpOwoKICAvKioKICAgKiBMb29rdXAgYSBob3N0LCByZXR1cm5pbmcgYSBGdXR1cmUgb2YgYSBsaXN0IG9mCiAgICogW0ludGVybmV0QWRkcmVzc11zLiBJZiBbdHlwZV0gaXMgW0ludGVybmV0QWRkcmVzc1R5cGUuYW55XSwgaXQKICAgKiB3aWxsIGxvb2t1cCBib3RoIElQIHZlcnNpb24gNCAoSVB2NCkgYW5kIElQIHZlcnNpb24gNiAoSVB2NikKICAgKiBhZGRyZXNzZXMuIElmIFt0eXBlXSBpcyBlaXRoZXIgW0ludGVybmV0QWRkcmVzc1R5cGUuSVB2NF0gb3IKICAgKiBbSW50ZXJuZXRBZGRyZXNzVHlwZS5JUHY2XSBpdCB3aWxsIG9ubHkgbG9va3VwIGFkZHJlc3NlcyBvZiB0aGUKICAgKiBzcGVjaWZpZWQgdHlwZS4gVGhlIG9yZGVyIG9mIHRoZSBsaXN0IGNhbiwgYW5kIG1vc3QgbGlrZWx5IHdpbGwsCiAgICogY2hhbmdlIG92ZXIgdGltZS4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgRnV0dXJlPExpc3Q8SW50ZXJuZXRBZGRyZXNzPj4gbG9va3VwKFN0cmluZyBob3N0LAogICAgICB7SW50ZXJuZXRBZGRyZXNzVHlwZSB0eXBlOiBJbnRlcm5ldEFkZHJlc3NUeXBlLmFueX0pOwoKICAvKioKICAgKiBDbG9uZXMgdGhlIGdpdmVuIFthZGRyZXNzXSB3aXRoIHRoZSBuZXcgW2hvc3RdLgogICAqCiAgICogVGhlIFthZGRyZXNzXSBtdXN0IGJlIGFuIFtJbnRlcm5ldEFkZHJlc3NdIHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBvbmUKICAgKiBvZiB0aGUgc3RhdGljIG1ldGhvZHMgb2YgdGhpcyBjbGFzcy4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgSW50ZXJuZXRBZGRyZXNzIF9jbG9uZVdpdGhOZXdIb3N0KAogICAgICBJbnRlcm5ldEFkZHJlc3MgYWRkcmVzcywgU3RyaW5nIGhvc3QpOwp9CgovKioKICogQSBbTmV0d29ya0ludGVyZmFjZV0gcmVwcmVzZW50cyBhbiBhY3RpdmUgbmV0d29yayBpbnRlcmZhY2Ugb24gdGhlIGN1cnJlbnQKICogc3lzdGVtLiBJdCBjb250YWlucyBhIGxpc3Qgb2YgW0ludGVybmV0QWRkcmVzc11lcyB0aGF0IGFyZSBib3VuZCB0byB0aGUKICogaW50ZXJmYWNlLgogKi8KYWJzdHJhY3QgY2xhc3MgTmV0d29ya0ludGVyZmFjZSB7CiAgLyoqCiAgICogR2V0IHRoZSBuYW1lIG9mIHRoZSBbTmV0d29ya0ludGVyZmFjZV0uCiAgICovCiAgU3RyaW5nIGdldCBuYW1lOwoKICAvKioKICAgKiBHZXQgdGhlIGluZGV4IG9mIHRoZSBbTmV0d29ya0ludGVyZmFjZV0uCiAgICovCiAgaW50IGdldCBpbmRleDsKCiAgLyoqCiAgICogR2V0IGEgbGlzdCBvZiBbSW50ZXJuZXRBZGRyZXNzXWVzIGN1cnJlbnRseSBib3VuZCB0byB0aGlzCiAgICogW05ldHdvcmtJbnRlcmZhY2VdLgogICAqLwogIExpc3Q8SW50ZXJuZXRBZGRyZXNzPiBnZXQgYWRkcmVzc2VzOwoKICAvKioKICAgKiBXaGV0aGVyIFtsaXN0XSBpcyBzdXBwb3J0ZWQuCiAgICoKICAgKiBbbGlzdF0gaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkIG9uIEFuZHJvaWQuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIGJvb2wgZ2V0IGxpc3RTdXBwb3J0ZWQ7CgogIC8qKgogICAqIFF1ZXJ5IHRoZSBzeXN0ZW0gZm9yIFtOZXR3b3JrSW50ZXJmYWNlXXMuCiAgICoKICAgKiBJZiBbaW5jbHVkZUxvb3BiYWNrXSBpcyBgdHJ1ZWAsIHRoZSByZXR1cm5lZCBsaXN0IHdpbGwgaW5jbHVkZSB0aGUKICAgKiBsb29wYmFjayBkZXZpY2UuIERlZmF1bHQgaXMgYGZhbHNlYC4KICAgKgogICAqIElmIFtpbmNsdWRlTGlua0xvY2FsXSBpcyBgdHJ1ZWAsIHRoZSBsaXN0IG9mIGFkZHJlc3NlcyBvZiB0aGUgcmV0dXJuZWQKICAgKiBbTmV0d29ya0ludGVyZmFjZV1zLCBtYXkgaW5jbHVkZSBsaW5rIGxvY2FsIGFkZHJlc3Nlcy4gRGVmYXVsdCBpcyBgZmFsc2VgLgogICAqCiAgICogSWYgW3R5cGVdIGlzIGVpdGhlciBbSW50ZXJuZXRBZGRyZXNzVHlwZS5JUHY0XSBvcgogICAqIFtJbnRlcm5ldEFkZHJlc3NUeXBlLklQdjZdIGl0IHdpbGwgb25seSBsb29rdXAgYWRkcmVzc2VzIG9mIHRoZQogICAqIHNwZWNpZmllZCB0eXBlLiBEZWZhdWx0IGlzIFtJbnRlcm5ldEFkZHJlc3NUeXBlLmFueV0uCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxMaXN0PE5ldHdvcmtJbnRlcmZhY2U+PiBsaXN0KAogICAgICB7Ym9vbCBpbmNsdWRlTG9vcGJhY2s6IGZhbHNlLAogICAgICBib29sIGluY2x1ZGVMaW5rTG9jYWw6IGZhbHNlLAogICAgICBJbnRlcm5ldEFkZHJlc3NUeXBlIHR5cGU6IEludGVybmV0QWRkcmVzc1R5cGUuYW55fSk7Cn0KCi8qKgogKiBBIFtSYXdTZXJ2ZXJTb2NrZXRdIHJlcHJlc2VudHMgYSBsaXN0ZW5pbmcgc29ja2V0LCBhbmQgcHJvdmlkZXMgYQogKiBzdHJlYW0gb2YgbG93LWxldmVsIFtSYXdTb2NrZXRdIG9iamVjdHMsIG9uZSBmb3IgZWFjaCBjb25uZWN0aW9uCiAqIG1hZGUgdG8gdGhlIGxpc3RlbmluZyBzb2NrZXQuCiAqCiAqIFNlZSBbUmF3U29ja2V0XSBmb3IgbW9yZSBpbmZvLgogKi8KYWJzdHJhY3QgY2xhc3MgUmF3U2VydmVyU29ja2V0IGltcGxlbWVudHMgU3RyZWFtPFJhd1NvY2tldD4gewogIC8qKgogICAqIFJldHVybnMgYSBmdXR1cmUgZm9yIGEgWzpSYXdTZXJ2ZXJTb2NrZXQ6XS4gV2hlbiB0aGUgZnV0dXJlCiAgICogY29tcGxldGVzIHRoZSBzZXJ2ZXIgc29ja2V0IGlzIGJvdW5kIHRvIHRoZSBnaXZlbiBbYWRkcmVzc10gYW5kCiAgICogW3BvcnRdIGFuZCBoYXMgc3RhcnRlZCBsaXN0ZW5pbmcgb24gaXQuCiAgICoKICAgKiBUaGUgW2FkZHJlc3NdIGNhbiBlaXRoZXIgYmUgYSBbU3RyaW5nXSBvciBhbgogICAqIFtJbnRlcm5ldEFkZHJlc3NdLiBJZiBbYWRkcmVzc10gaXMgYSBbU3RyaW5nXSwgW2JpbmRdIHdpbGwKICAgKiBwZXJmb3JtIGEgW0ludGVybmV0QWRkcmVzcy5sb29rdXBdIGFuZCB1c2UgdGhlIGZpcnN0IHZhbHVlIGluIHRoZQogICAqIGxpc3QuIFRvIGxpc3RlbiBvbiB0aGUgbG9vcGJhY2sgYWRhcHRlciwgd2hpY2ggd2lsbCBhbGxvdyBvbmx5CiAgICogaW5jb21pbmcgY29ubmVjdGlvbnMgZnJvbSB0aGUgbG9jYWwgaG9zdCwgdXNlIHRoZSB2YWx1ZQogICAqIFtJbnRlcm5ldEFkZHJlc3MubG9vcGJhY2tJUHY0XSBvcgogICAqIFtJbnRlcm5ldEFkZHJlc3MubG9vcGJhY2tJUHY2XS4gVG8gYWxsb3cgZm9yIGluY29taW5nCiAgICogY29ubmVjdGlvbiBmcm9tIHRoZSBuZXR3b3JrIHVzZSBlaXRoZXIgb25lIG9mIHRoZSB2YWx1ZXMKICAgKiBbSW50ZXJuZXRBZGRyZXNzLmFueUlQdjRdIG9yIFtJbnRlcm5ldEFkZHJlc3MuYW55SVB2Nl0gdG8KICAgKiBiaW5kIHRvIGFsbCBpbnRlcmZhY2VzIG9yIHRoZSBJUCBhZGRyZXNzIG9mIGEgc3BlY2lmaWMgaW50ZXJmYWNlLgogICAqCiAgICogSWYgYW4gSVAgdmVyc2lvbiA2IChJUHY2KSBhZGRyZXNzIGlzIHVzZWQsIGJvdGggSVAgdmVyc2lvbiA2CiAgICogKElQdjYpIGFuZCB2ZXJzaW9uIDQgKElQdjQpIGNvbm5lY3Rpb25zIHdpbGwgYmUgYWNjZXB0ZWQuIFRvCiAgICogcmVzdHJpY3QgdGhpcyB0byB2ZXJzaW9uIDYgKElQdjYpIG9ubHksIHVzZSBbdjZPbmx5XSB0byBzZXQKICAgKiB2ZXJzaW9uIDYgb25seS4KICAgKgogICAqIElmIFtwb3J0XSBoYXMgdGhlIHZhbHVlIFs6MDpdIGFuIGVwaGVtZXJhbCBwb3J0IHdpbGwKICAgKiBiZSBjaG9zZW4gYnkgdGhlIHN5c3RlbS4gVGhlIGFjdHVhbCBwb3J0IHVzZWQgY2FuIGJlIHJldHJpZXZlZAogICAqIHVzaW5nIHRoZSBbOnBvcnQ6XSBnZXR0ZXIuCiAgICoKICAgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgW2JhY2tsb2ddIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGxpc3RlbgogICAqIGJhY2tsb2cgZm9yIHRoZSB1bmRlcmx5aW5nIE9TIGxpc3RlbiBzZXR1cC4gSWYgW2JhY2tsb2ddIGhhcyB0aGUKICAgKiB2YWx1ZSBvZiBbOjA6XSAodGhlIGRlZmF1bHQpIGEgcmVhc29uYWJsZSB2YWx1ZSB3aWxsIGJlIGNob3NlbiBieQogICAqIHRoZSBzeXN0ZW0uCiAgICoKICAgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgW3NoYXJlZF0gc3BlY2lmaWVzIHdoZXRoZXIgYWRkaXRpb25hbCBSYXdTZXJ2ZXJTb2NrZXQKICAgKiBvYmplY3RzIGNhbiBiaW5kIHRvIHRoZSBzYW1lIGNvbWJpbmF0aW9uIG9mIGBhZGRyZXNzYCwgYHBvcnRgIGFuZCBgdjZPbmx5YC4KICAgKiBJZiBgc2hhcmVkYCBpcyBgdHJ1ZWAgYW5kIG1vcmUgYFJhd1NlcnZlclNvY2tldGBzIGZyb20gdGhpcyBpc29sYXRlIG9yCiAgICogb3RoZXIgaXNvbGF0ZXMgYXJlIGJvdW5kIHRvIHRoZSBwb3J0LCB0aGVuIHRoZSBpbmNvbWluZyBjb25uZWN0aW9ucyB3aWxsIGJlCiAgICogZGlzdHJpYnV0ZWQgYW1vbmcgYWxsIHRoZSBib3VuZCBgUmF3U2VydmVyU29ja2V0YHMuIENvbm5lY3Rpb25zIGNhbiBiZQogICAqIGRpc3RyaWJ1dGVkIG92ZXIgbXVsdGlwbGUgaXNvbGF0ZXMgdGhpcyB3YXkuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxSYXdTZXJ2ZXJTb2NrZXQ+IGJpbmQoYWRkcmVzcywgaW50IHBvcnQsCiAgICAgIHtpbnQgYmFja2xvZzogMCwgYm9vbCB2Nk9ubHk6IGZhbHNlLCBib29sIHNoYXJlZDogZmFsc2V9KTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcG9ydCB1c2VkIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIGludCBnZXQgcG9ydDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgYWRkcmVzcyB1c2VkIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzczsKCiAgLyoqCiAgICogQ2xvc2VzIHRoZSBzb2NrZXQuIFRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzIHdoZW4gdGhlIHNvY2tldAogICAqIGlzIGZ1bGx5IGNsb3NlZCBhbmQgaXMgbm8gbG9uZ2VyIGJvdW5kLgogICAqLwogIEZ1dHVyZTxSYXdTZXJ2ZXJTb2NrZXQ+IGNsb3NlKCk7Cn0KCi8qKgogKiBBIFtTZXJ2ZXJTb2NrZXRdIHJlcHJlc2VudHMgYSBsaXN0ZW5pbmcgc29ja2V0LCBhbmQgcHJvdmlkZXMgYQogKiBzdHJlYW0gb2YgW1NvY2tldF0gb2JqZWN0cywgb25lIGZvciBlYWNoIGNvbm5lY3Rpb24gbWFkZSB0byB0aGUKICogbGlzdGVuaW5nIHNvY2tldC4KICoKICogU2VlIFtTb2NrZXRdIGZvciBtb3JlIGluZm8uCiAqLwphYnN0cmFjdCBjbGFzcyBTZXJ2ZXJTb2NrZXQgaW1wbGVtZW50cyBTdHJlYW08U29ja2V0PiB7CiAgLyoqCiAgICogUmV0dXJucyBhIGZ1dHVyZSBmb3IgYSBbOlNlcnZlclNvY2tldDpdLiBXaGVuIHRoZSBmdXR1cmUKICAgKiBjb21wbGV0ZXMgdGhlIHNlcnZlciBzb2NrZXQgaXMgYm91bmQgdG8gdGhlIGdpdmVuIFthZGRyZXNzXSBhbmQKICAgKiBbcG9ydF0gYW5kIGhhcyBzdGFydGVkIGxpc3RlbmluZyBvbiBpdC4KICAgKgogICAqIFRoZSBbYWRkcmVzc10gY2FuIGVpdGhlciBiZSBhIFtTdHJpbmddIG9yIGFuCiAgICogW0ludGVybmV0QWRkcmVzc10uIElmIFthZGRyZXNzXSBpcyBhIFtTdHJpbmddLCBbYmluZF0gd2lsbAogICAqIHBlcmZvcm0gYSBbSW50ZXJuZXRBZGRyZXNzLmxvb2t1cF0gYW5kIHVzZSB0aGUgZmlyc3QgdmFsdWUgaW4gdGhlCiAgICogbGlzdC4gVG8gbGlzdGVuIG9uIHRoZSBsb29wYmFjayBhZGFwdGVyLCB3aGljaCB3aWxsIGFsbG93IG9ubHkKICAgKiBpbmNvbWluZyBjb25uZWN0aW9ucyBmcm9tIHRoZSBsb2NhbCBob3N0LCB1c2UgdGhlIHZhbHVlCiAgICogW0ludGVybmV0QWRkcmVzcy5sb29wYmFja0lQdjRdIG9yCiAgICogW0ludGVybmV0QWRkcmVzcy5sb29wYmFja0lQdjZdLiBUbyBhbGxvdyBmb3IgaW5jb21pbmcKICAgKiBjb25uZWN0aW9uIGZyb20gdGhlIG5ldHdvcmsgdXNlIGVpdGhlciBvbmUgb2YgdGhlIHZhbHVlcwogICAqIFtJbnRlcm5ldEFkZHJlc3MuYW55SVB2NF0gb3IgW0ludGVybmV0QWRkcmVzcy5hbnlJUHY2XSB0bwogICAqIGJpbmQgdG8gYWxsIGludGVyZmFjZXMgb3IgdGhlIElQIGFkZHJlc3Mgb2YgYSBzcGVjaWZpYyBpbnRlcmZhY2UuCiAgICoKICAgKiBJZiBhbiBJUCB2ZXJzaW9uIDYgKElQdjYpIGFkZHJlc3MgaXMgdXNlZCwgYm90aCBJUCB2ZXJzaW9uIDYKICAgKiAoSVB2NikgYW5kIHZlcnNpb24gNCAoSVB2NCkgY29ubmVjdGlvbnMgd2lsbCBiZSBhY2NlcHRlZC4gVG8KICAgKiByZXN0cmljdCB0aGlzIHRvIHZlcnNpb24gNiAoSVB2Nikgb25seSwgdXNlIFt2Nk9ubHldIHRvIHNldAogICAqIHZlcnNpb24gNiBvbmx5LgogICAqCiAgICogSWYgW3BvcnRdIGhhcyB0aGUgdmFsdWUgWzowOl0gYW4gZXBoZW1lcmFsIHBvcnQgd2lsbCBiZSBjaG9zZW4gYnkKICAgKiB0aGUgc3lzdGVtLiBUaGUgYWN0dWFsIHBvcnQgdXNlZCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIHRoZQogICAqIFtwb3J0XSBnZXR0ZXIuCiAgICoKICAgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgW2JhY2tsb2ddIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGxpc3RlbgogICAqIGJhY2tsb2cgZm9yIHRoZSB1bmRlcmx5aW5nIE9TIGxpc3RlbiBzZXR1cC4gSWYgW2JhY2tsb2ddIGhhcyB0aGUKICAgKiB2YWx1ZSBvZiBbOjA6XSAodGhlIGRlZmF1bHQpIGEgcmVhc29uYWJsZSB2YWx1ZSB3aWxsIGJlIGNob3NlbiBieQogICAqIHRoZSBzeXN0ZW0uCiAgICoKICAgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgW3NoYXJlZF0gc3BlY2lmaWVzIHdoZXRoZXIgYWRkaXRpb25hbCBTZXJ2ZXJTb2NrZXQKICAgKiBvYmplY3RzIGNhbiBiaW5kIHRvIHRoZSBzYW1lIGNvbWJpbmF0aW9uIG9mIGBhZGRyZXNzYCwgYHBvcnRgIGFuZCBgdjZPbmx5YC4KICAgKiBJZiBgc2hhcmVkYCBpcyBgdHJ1ZWAgYW5kIG1vcmUgYFNlcnZlclNvY2tldGBzIGZyb20gdGhpcyBpc29sYXRlIG9yIG90aGVyCiAgICogaXNvbGF0ZXMgYXJlIGJvdW5kIHRvIHRoZSBwb3J0LCB0aGVuIHRoZSBpbmNvbWluZyBjb25uZWN0aW9ucyB3aWxsIGJlCiAgICogZGlzdHJpYnV0ZWQgYW1vbmcgYWxsIHRoZSBib3VuZCBgU2VydmVyU29ja2V0YHMuIENvbm5lY3Rpb25zIGNhbiBiZQogICAqIGRpc3RyaWJ1dGVkIG92ZXIgbXVsdGlwbGUgaXNvbGF0ZXMgdGhpcyB3YXkuCiAgICovCiAgc3RhdGljIEZ1dHVyZTxTZXJ2ZXJTb2NrZXQ+IGJpbmQoYWRkcmVzcywgaW50IHBvcnQsCiAgICAgIHtpbnQgYmFja2xvZzogMCwgYm9vbCB2Nk9ubHk6IGZhbHNlLCBib29sIHNoYXJlZDogZmFsc2V9KSB7CiAgICBmaW5hbCBJT092ZXJyaWRlcyBvdmVycmlkZXMgPSBJT092ZXJyaWRlcy5jdXJyZW50OwogICAgaWYgKG92ZXJyaWRlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBTZXJ2ZXJTb2NrZXQuX2JpbmQoYWRkcmVzcywgcG9ydCwKICAgICAgICAgIGJhY2tsb2c6IGJhY2tsb2csIHY2T25seTogdjZPbmx5LCBzaGFyZWQ6IHNoYXJlZCk7CiAgICB9CiAgICByZXR1cm4gb3ZlcnJpZGVzLnNlcnZlclNvY2tldEJpbmQoYWRkcmVzcywgcG9ydCwKICAgICAgICBiYWNrbG9nOiBiYWNrbG9nLCB2Nk9ubHk6IHY2T25seSwgc2hhcmVkOiBzaGFyZWQpOwogIH0KCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxTZXJ2ZXJTb2NrZXQ+IF9iaW5kKGFkZHJlc3MsIGludCBwb3J0LAogICAgICB7aW50IGJhY2tsb2c6IDAsIGJvb2wgdjZPbmx5OiBmYWxzZSwgYm9vbCBzaGFyZWQ6IGZhbHNlfSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHBvcnQgdXNlZCBieSB0aGlzIHNvY2tldC4KICAgKi8KICBpbnQgZ2V0IHBvcnQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGFkZHJlc3MgdXNlZCBieSB0aGlzIHNvY2tldC4KICAgKi8KICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3M7CgogIC8qKgogICAqIENsb3NlcyB0aGUgc29ja2V0LiBUaGUgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlcyB3aGVuIHRoZSBzb2NrZXQKICAgKiBpcyBmdWxseSBjbG9zZWQgYW5kIGlzIG5vIGxvbmdlciBib3VuZC4KICAgKi8KICBGdXR1cmU8U2VydmVyU29ja2V0PiBjbG9zZSgpOwp9CgovKioKICogVGhlIFtTb2NrZXREaXJlY3Rpb25dIGlzIHVzZWQgYXMgYSBwYXJhbWV0ZXIgdG8gW1NvY2tldC5jbG9zZV0gYW5kCiAqIFtSYXdTb2NrZXQuY2xvc2VdIHRvIGNsb3NlIGEgc29ja2V0IGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0aW9uKHMpLgogKi8KY2xhc3MgU29ja2V0RGlyZWN0aW9uIHsKICBzdGF0aWMgY29uc3QgU29ja2V0RGlyZWN0aW9uIHJlY2VpdmUgPSBjb25zdCBTb2NrZXREaXJlY3Rpb24uXygwKTsKICBzdGF0aWMgY29uc3QgU29ja2V0RGlyZWN0aW9uIHNlbmQgPSBjb25zdCBTb2NrZXREaXJlY3Rpb24uXygxKTsKICBzdGF0aWMgY29uc3QgU29ja2V0RGlyZWN0aW9uIGJvdGggPSBjb25zdCBTb2NrZXREaXJlY3Rpb24uXygyKTsKCiAgQERlcHJlY2F0ZWQoIlVzZSByZWNlaXZlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBTb2NrZXREaXJlY3Rpb24gUkVDRUlWRSA9IHJlY2VpdmU7CiAgQERlcHJlY2F0ZWQoIlVzZSBzZW5kIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBTb2NrZXREaXJlY3Rpb24gU0VORCA9IHNlbmQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBib3RoIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBTb2NrZXREaXJlY3Rpb24gQk9USCA9IGJvdGg7CgogIGZpbmFsIF92YWx1ZTsKCiAgY29uc3QgU29ja2V0RGlyZWN0aW9uLl8odGhpcy5fdmFsdWUpOwp9CgovKioKICogVGhlIFtTb2NrZXRPcHRpb25dIGlzIHVzZWQgYXMgYSBwYXJhbWV0ZXIgdG8gW1NvY2tldC5zZXRPcHRpb25dIGFuZAogKiBbUmF3U29ja2V0LnNldE9wdGlvbl0gdG8gc2V0IGN1c3RvbWl6ZSB0aGUgYmVoYXZpb3VyIG9mIHRoZSB1bmRlcmx5aW5nCiAqIHNvY2tldC4KICovCmNsYXNzIFNvY2tldE9wdGlvbiB7CiAgLyoqCiAgICogRW5hYmxlIG9yIGRpc2FibGUgbm8tZGVsYXkgb24gdGhlIHNvY2tldC4gSWYgdGNwTm9EZWxheSBpcyBlbmFibGVkLCB0aGUKICAgKiBzb2NrZXQgd2lsbCBub3QgYnVmZmVyIGRhdGEgaW50ZXJuYWxseSwgYnV0IGluc3RlYWQgd3JpdGUgZWFjaCBkYXRhIGNodW5rCiAgICogYXMgYW4gaW5kaXZpZHVhbCBUQ1AgcGFja2V0LgogICAqCiAgICogdGNwTm9EZWxheSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgogICAqLwogIHN0YXRpYyBjb25zdCBTb2NrZXRPcHRpb24gdGNwTm9EZWxheSA9IGNvbnN0IFNvY2tldE9wdGlvbi5fKDApOwogIEBEZXByZWNhdGVkKCJVc2UgdGNwTm9EZWxheSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgU29ja2V0T3B0aW9uIFRDUF9OT0RFTEFZID0gdGNwTm9EZWxheTsKCiAgc3RhdGljIGNvbnN0IFNvY2tldE9wdGlvbiBfaXBNdWx0aWNhc3RMb29wID0gY29uc3QgU29ja2V0T3B0aW9uLl8oMSk7CiAgc3RhdGljIGNvbnN0IFNvY2tldE9wdGlvbiBfaXBNdWx0aWNhc3RIb3BzID0gY29uc3QgU29ja2V0T3B0aW9uLl8oMik7CiAgc3RhdGljIGNvbnN0IFNvY2tldE9wdGlvbiBfaXBNdWx0aWNhc3RJZiA9IGNvbnN0IFNvY2tldE9wdGlvbi5fKDMpOwogIHN0YXRpYyBjb25zdCBTb2NrZXRPcHRpb24gX2lwQnJvYWRjYXN0ID0gY29uc3QgU29ja2V0T3B0aW9uLl8oNCk7CgogIGZpbmFsIF92YWx1ZTsKCiAgY29uc3QgU29ja2V0T3B0aW9uLl8odGhpcy5fdmFsdWUpOwp9CgovLyBNdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIGVudW0gaW4gc29ja2V0LmNjCmVudW0gX1Jhd1NvY2tldE9wdGlvbnMgewogIFNPTF9TT0NLRVQsIC8vIDAKICBJUFBST1RPX0lQLCAvLyAxCiAgSVBfTVVMVElDQVNUX0lGLCAvLyAyCiAgSVBQUk9UT19JUFY2LCAvLyAzCiAgSVBWNl9NVUxUSUNBU1RfSUYsIC8vIDQKICBJUFBST1RPX1RDUCwgLy8gNQogIElQUFJPVE9fVURQLCAvLyA2Cn0KCi8vLyBUaGUgW1Jhd1NvY2tldE9wdGlvbl0gaXMgdXNlZCBhcyBhIHBhcmFtZXRlciB0byBbU29ja2V0LnNldFJhd09wdGlvbl0sCi8vLyBbUmF3U29ja2V0LnNldFJhd09wdGlvbl0sIGFuZCBbUmF3RGF0YWdyYW1Tb2NrZXQuc2V0UmF3T3B0aW9uXSB0byBjdXN0b21pemUKLy8vIHRoZSBiZWhhdmlvdXIgb2YgdGhlIHVuZGVybHlpbmcgc29ja2V0LgovLy8KLy8vIEl0IGFsbG93cyBmb3IgZmluZSBncmFpbmVkIGNvbnRyb2wgb2YgdGhlIHNvY2tldCBvcHRpb25zLCBhbmQgaXRzIHZhbHVlcwovLy8gd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0ncyBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0c29ja29wdGAKLy8vIGFuZCBgZ2V0c29ja29wdGAuCkBTaW5jZSgiMi4yIikKY2xhc3MgUmF3U29ja2V0T3B0aW9uIHsKICAvLy8gQ3JlYXRlcyBhIFtSYXdTb2NrZXRPcHRpb25dIGZvciBgZ2V0UmF3T3B0aW9uYCBhbmQgYHNldFJhd09wdGlvbmAuCiAgLy8vCiAgLy8vIEFsbCBhcmd1bWVudHMgYXJlIHJlcXVpcmVkIGFuZCBtdXN0IG5vdCBiZSBudWxsLgogIC8vLwogIC8vLyBUaGUgbGV2ZWwgYW5kIG9wdGlvbiBhcmd1bWVudHMgY29ycmVzcG9uZCB0byBsZXZlbCBhbmQgb3B0bmFtZSBhcmd1bWVudHMKICAvLy8gb24gdGhlIGdldC9zZXRzb2Nrb3B0IG5hdGl2ZSBjYWxscy4KICAvLy8KICAvLy8gVGhlIHZhbHVlIGFyZ3VtZW50IGFuZCBpdHMgbGVuZ3RoIGNvcnJlc3BvbmQgdG8gdGhlIG9wdHZhbCBhbmQgbGVuZ3RoCiAgLy8vIGFyZ3VtZW50cyBvbiB0aGUgbmF0aXZlIGNhbGwuCiAgLy8vCiAgLy8vIEZvciBhIGBnZXRSYXdPcHRpb25gIGNhbGwsIHRoZSB2YWx1ZSBwYXJhbWV0ZXIgd2lsbCBiZSB1cGRhdGVkIGFmdGVyIGEKICAvLy8gc3VjY2Vzc2Z1bCBjYWxsIChhbHRob3VnaCBpdHMgbGVuZ3RoIHdpbGwgbm90IGJlIGNoYW5nZWQpLgogIC8vLwogIC8vLyBGb3IgYSBgc2V0UmF3T3B0aW9uYCBjYWxsLCB0aGUgdmFsdWUgcGFyYW1ldGVyIHdpbGwgYmUgdXNlZCBzZXQgdGhlCiAgLy8vIG9wdGlvbi4KICBjb25zdCBSYXdTb2NrZXRPcHRpb24odGhpcy5sZXZlbCwgdGhpcy5vcHRpb24sIHRoaXMudmFsdWUpOwoKICAvLy8gQ29udmVuaWVuY2UgY29uc3RydWN0b3IgZm9yIGNyZWF0aW5nIGFuIGludCBiYXNlZCBSYXdTb2NrZXRPcHRpb24uCiAgZmFjdG9yeSBSYXdTb2NrZXRPcHRpb24uZnJvbUludChpbnQgbGV2ZWwsIGludCBvcHRpb24sIGludCB2YWx1ZSkgewogICAgaWYgKHZhbHVlID09IG51bGwpIHsKICAgICAgdmFsdWUgPSAwOwogICAgfQogICAgZmluYWwgVWludDhMaXN0IGxpc3QgPSBVaW50OExpc3QoNCk7CiAgICBmaW5hbCBidWZmZXIgPSBCeXRlRGF0YS52aWV3KGxpc3QuYnVmZmVyLCBsaXN0Lm9mZnNldEluQnl0ZXMpOwogICAgYnVmZmVyLnNldEludDMyKDAsIHZhbHVlLCBFbmRpYW4uaG9zdCk7CiAgICByZXR1cm4gUmF3U29ja2V0T3B0aW9uKGxldmVsLCBvcHRpb24sIGxpc3QpOwogIH0KCiAgLy8vIENvbnZlbmllbmNlIGNvbnN0cnVjdG9yIGZvciBjcmVhdGluZyBhIGJvb2wgYmFzZWQgUmF3U29ja2V0T3B0aW9uLgogIGZhY3RvcnkgUmF3U29ja2V0T3B0aW9uLmZyb21Cb29sKGludCBsZXZlbCwgaW50IG9wdGlvbiwgYm9vbCB2YWx1ZSkgPT4KICAgICAgUmF3U29ja2V0T3B0aW9uLmZyb21JbnQobGV2ZWwsIG9wdGlvbiwgdmFsdWUgPT0gdHJ1ZSA/IDEgOiAwKTsKCiAgLy8vIFRoZSBsZXZlbCBmb3IgdGhlIG9wdGlvbiB0byBzZXQgb3IgZ2V0LgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8gICAqIFtSYXdTb2NrZXRPcHRpb24ubGV2ZWxTb2NrZXRdCiAgLy8vICAgKiBbUmF3U29ja2V0T3B0aW9uLmxldmVsSVB2NF0KICAvLy8gICAqIFtSYXdTb2NrZXRPcHRpb24ubGV2ZWxJUHY2XQogIC8vLyAgICogW1Jhd1NvY2tldE9wdGlvbi5sZXZlbFRjcF0KICAvLy8gICAqIFtSYXdTb2NrZXRPcHRpb24ubGV2ZWxVZHBdCiAgZmluYWwgaW50IGxldmVsOwoKICAvLy8gVGhlIG9wdGlvbiB0byBzZXQgb3IgZ2V0LgogIGZpbmFsIGludCBvcHRpb247CgogIC8vLyBUaGUgcmF3IGRhdGEgdG8gc2V0LCBvciB0aGUgYXJyYXkgdG8gd3JpdGUgdGhlIGN1cnJlbnQgb3B0aW9uIHZhbHVlIGludG8uCiAgLy8vCiAgLy8vIFRoaXMgbGlzdCBtdXN0IGJlIHRoZSBjb3JyZWN0IGxlbmd0aCBmb3IgdGhlIGV4cGVjdGVkIG9wdGlvbi4gRm9yIG1vc3QKICAvLy8gb3B0aW9ucyB0aGF0IHRha2UgaW50IG9yIGJvb2wgdmFsdWVzLCB0aGUgbGVuZ3RoIHNob3VsZCBiZSA0LiBGb3Igb3B0aW9ucwogIC8vLyB0aGF0IGV4cGVjdCBhIHN0cnVjdCAoc3VjaCBhcyBhbiBpbl9hZGRyX3QpLCB0aGUgbGVuZ3RoIHNob3VsZCBiZSB0aGUKICAvLy8gY29ycmVjdCBsZW5ndGggZm9yIHRoYXQgc3RydWN0LgogIGZpbmFsIFVpbnQ4TGlzdCB2YWx1ZTsKCiAgLy8vIFNvY2tldCBsZXZlbCBvcHRpb24gZm9yIFNPTF9TT0NLRVQuCiAgc3RhdGljIGludCBnZXQgbGV2ZWxTb2NrZXQgPT4KICAgICAgX2dldE9wdGlvblZhbHVlKF9SYXdTb2NrZXRPcHRpb25zLlNPTF9TT0NLRVQuaW5kZXgpOwoKICAvLy8gU29ja2V0IGxldmVsIG9wdGlvbiBmb3IgSVBQUk9UT19JUC4KICBzdGF0aWMgaW50IGdldCBsZXZlbElQdjQgPT4KICAgICAgX2dldE9wdGlvblZhbHVlKF9SYXdTb2NrZXRPcHRpb25zLklQUFJPVE9fSVAuaW5kZXgpOwoKICAvLy8gU29ja2V0IG9wdGlvbiBmb3IgSVBfTVVMVElDQVNUX0lGLgogIHN0YXRpYyBpbnQgZ2V0IElQdjRNdWx0aWNhc3RJbnRlcmZhY2UgPT4KICAgICAgX2dldE9wdGlvblZhbHVlKF9SYXdTb2NrZXRPcHRpb25zLklQX01VTFRJQ0FTVF9JRi5pbmRleCk7CgogIC8vLyBTb2NrZXQgbGV2ZWwgb3B0aW9uIGZvciBJUFBST1RPX0lQVjYuCiAgc3RhdGljIGludCBnZXQgbGV2ZWxJUHY2ID0+CiAgICAgIF9nZXRPcHRpb25WYWx1ZShfUmF3U29ja2V0T3B0aW9ucy5JUFBST1RPX0lQVjYuaW5kZXgpOwoKICAvLy8gU29ja2V0IG9wdGlvbiBmb3IgSVBWNl9NVUxUSUNBU1RfSUYuCiAgc3RhdGljIGludCBnZXQgSVB2Nk11bHRpY2FzdEludGVyZmFjZSA9PgogICAgICBfZ2V0T3B0aW9uVmFsdWUoX1Jhd1NvY2tldE9wdGlvbnMuSVBWNl9NVUxUSUNBU1RfSUYuaW5kZXgpOwoKICAvLy8gU29ja2V0IGxldmVsIG9wdGlvbiBmb3IgSVBQUk9UT19UQ1AuCiAgc3RhdGljIGludCBnZXQgbGV2ZWxUY3AgPT4KICAgICAgX2dldE9wdGlvblZhbHVlKF9SYXdTb2NrZXRPcHRpb25zLklQUFJPVE9fVENQLmluZGV4KTsKCiAgLy8vIFNvY2tldCBsZXZlbCBvcHRpb24gZm9yIElQUFJPVE9fVURQLgogIHN0YXRpYyBpbnQgZ2V0IGxldmVsVWRwID0+CiAgICAgIF9nZXRPcHRpb25WYWx1ZShfUmF3U29ja2V0T3B0aW9ucy5JUFBST1RPX1VEUC5pbmRleCk7CgogIGV4dGVybmFsIHN0YXRpYyBpbnQgX2dldE9wdGlvblZhbHVlKGludCBrZXkpOwp9CgovKioKICogRXZlbnRzIGZvciB0aGUgW1Jhd1NvY2tldF0uCiAqLwpjbGFzcyBSYXdTb2NrZXRFdmVudCB7CiAgc3RhdGljIGNvbnN0IFJhd1NvY2tldEV2ZW50IHJlYWQgPSBjb25zdCBSYXdTb2NrZXRFdmVudC5fKDApOwogIHN0YXRpYyBjb25zdCBSYXdTb2NrZXRFdmVudCB3cml0ZSA9IGNvbnN0IFJhd1NvY2tldEV2ZW50Ll8oMSk7CiAgc3RhdGljIGNvbnN0IFJhd1NvY2tldEV2ZW50IHJlYWRDbG9zZWQgPSBjb25zdCBSYXdTb2NrZXRFdmVudC5fKDIpOwogIHN0YXRpYyBjb25zdCBSYXdTb2NrZXRFdmVudCBjbG9zZWQgPSBjb25zdCBSYXdTb2NrZXRFdmVudC5fKDMpOwoKICBARGVwcmVjYXRlZCgiVXNlIHJlYWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFJhd1NvY2tldEV2ZW50IFJFQUQgPSByZWFkOwogIEBEZXByZWNhdGVkKCJVc2Ugd3JpdGUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFJhd1NvY2tldEV2ZW50IFdSSVRFID0gd3JpdGU7CiAgQERlcHJlY2F0ZWQoIlVzZSByZWFkQ2xvc2VkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBSYXdTb2NrZXRFdmVudCBSRUFEX0NMT1NFRCA9IHJlYWRDbG9zZWQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBjbG9zZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFJhd1NvY2tldEV2ZW50IENMT1NFRCA9IGNsb3NlZDsKCiAgZmluYWwgaW50IF92YWx1ZTsKCiAgY29uc3QgUmF3U29ja2V0RXZlbnQuXyh0aGlzLl92YWx1ZSk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuIGNvbnN0IFsKICAgICAgJ1Jhd1NvY2tldEV2ZW50LnJlYWQnLAogICAgICAnUmF3U29ja2V0RXZlbnQud3JpdGUnLAogICAgICAnUmF3U29ja2V0RXZlbnQucmVhZENsb3NlZCcsCiAgICAgICdSYXdTb2NrZXRFdmVudC5jbG9zZWQnCiAgICBdW192YWx1ZV07CiAgfQp9CgovLy8gUmV0dXJuZWQgYnkgdGhlIGBzdGFydENvbm5lY3RgIG1ldGhvZHMgb24gY2xpZW50LXNpZGUgc29ja2V0IHR5cGVzIGBTYCwKLy8vIGBDb25uZWN0aW9uVGFzazxTPmAgYWxsb3dzIGNhbmNlbGxpbmcgYW4gYXR0ZW1wdCB0byBjb25uZWN0IHRvIGEgaG9zdC4KY2xhc3MgQ29ubmVjdGlvblRhc2s8Uz4gewogIC8vLyBBIGBGdXR1cmVgIHRoYXQgY29tcGxldGVzIHdpdGggdmFsdWUgdGhhdCBgUy5jb25uZWN0KClgIHdvdWxkIHJldHVybgogIC8vLyB1bmxlc3MgW2NhbmNlbF0gaXMgY2FsbGVkIG9uIHRoaXMgW0Nvbm5lY3Rpb25UYXNrXS4KICAvLy8KICAvLy8gSWYgW2NhbmNlbF0gaXMgY2FsbGVkLCB0aGUgYEZ1dHVyZWAgY29tcGxldGVzIHdpdGggYSBbU29ja2V0RXhjZXB0aW9uXQogIC8vLyBlcnJvciB3aG9zZSBtZXNzYWdlIGluZGljYXRlcyB0aGF0IHRoZSBjb25uZWN0aW9uIGF0dGVtcHQgd2FzIGNhbmNlbGxlZC4KICBmaW5hbCBGdXR1cmU8Uz4gc29ja2V0OwogIGZpbmFsIHZvaWQgRnVuY3Rpb24oKSBfb25DYW5jZWw7CgogIENvbm5lY3Rpb25UYXNrLl8oe0Z1dHVyZTxTPiBzb2NrZXQsIHZvaWQgRnVuY3Rpb24oKSBvbkNhbmNlbH0pCiAgICAgIDogYXNzZXJ0KHNvY2tldCAhPSBudWxsKSwKICAgICAgICBhc3NlcnQob25DYW5jZWwgIT0gbnVsbCksCiAgICAgICAgdGhpcy5zb2NrZXQgPSBzb2NrZXQsCiAgICAgICAgdGhpcy5fb25DYW5jZWwgPSBvbkNhbmNlbDsKCiAgLy8vIENhbmNlbHMgdGhlIGNvbm5lY3Rpb24gYXR0ZW1wdC4KICAvLy8KICAvLy8gVGhpcyBhbHNvIGNhdXNlcyB0aGUgW3NvY2tldF0gYEZ1dHVyZWAgdG8gY29tcGxldGUgd2l0aCBhCiAgLy8vIFtTb2NrZXRFeGNlcHRpb25dIGVycm9yLgogIHZvaWQgY2FuY2VsKCkgewogICAgX29uQ2FuY2VsKCk7CiAgfQp9CgovKioKICogQSBbUmF3U29ja2V0XSBpcyBhbiB1bmJ1ZmZlcmVkIGludGVyZmFjZSB0byBhIFRDUCBzb2NrZXQuCiAqCiAqIFRoZSByYXcgc29ja2V0IGRlbGl2ZXJzIHRoZSBkYXRhIHN0cmVhbSBpbiB0aGUgc2FtZSBjaHVua3MgYXMgdGhlIHVuZGVybHlpbmcKICogb3BlcmF0aW5nIHN5c3RlbS4KICoKICogSXQgaXMgbm90IHRoZSBzYW1lIGFzIGEKICogW1BPU0lYIHJhdyBzb2NrZXRdKGh0dHA6Ly9tYW43Lm9yZy9saW51eC9tYW4tcGFnZXMvbWFuNy9yYXcuNy5odG1sKS4KICovCmFic3RyYWN0IGNsYXNzIFJhd1NvY2tldCBpbXBsZW1lbnRzIFN0cmVhbTxSYXdTb2NrZXRFdmVudD4gewogIC8qKgogICAqIFNldCBvciBnZXQsIGlmIHRoZSBbUmF3U29ja2V0XSBzaG91bGQgbGlzdGVuIGZvciBbUmF3U29ja2V0RXZlbnQucmVhZF0KICAgKiBldmVudHMuIERlZmF1bHQgaXMgWzp0cnVlOl0uCiAgICovCiAgYm9vbCByZWFkRXZlbnRzRW5hYmxlZDsKCiAgLyoqCiAgICogU2V0IG9yIGdldCwgaWYgdGhlIFtSYXdTb2NrZXRdIHNob3VsZCBsaXN0ZW4gZm9yIFtSYXdTb2NrZXRFdmVudC53cml0ZV0KICAgKiBldmVudHMuIERlZmF1bHQgaXMgWzp0cnVlOl0uCiAgICogVGhpcyBpcyBhIG9uZS1zaG90IGxpc3RlbmVyLCBhbmQgd3JpdGVFdmVudHNFbmFibGVkIG11c3QgYmUgc2V0CiAgICogdG8gdHJ1ZSBhZ2FpbiB0byByZWNlaXZlIGFub3RoZXIgd3JpdGUgZXZlbnQuCiAgICovCiAgYm9vbCB3cml0ZUV2ZW50c0VuYWJsZWQ7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgc29ja2V0IGNvbm5lY3Rpb24gdG8gdGhlIGhvc3QgYW5kIHBvcnQgYW5kIHJldHVybnMgYSBbRnV0dXJlXQogICAqIHRoYXQgd2lsbCBjb21wbGV0ZSB3aXRoIGVpdGhlciBhIFtSYXdTb2NrZXRdIG9uY2UgY29ubmVjdGVkIG9yIGFuIGVycm9yCiAgICogaWYgdGhlIGhvc3QtbG9va3VwIG9yIGNvbm5lY3Rpb24gZmFpbGVkLgogICAqCiAgICogW2hvc3RdIGNhbiBlaXRoZXIgYmUgYSBbU3RyaW5nXSBvciBhbiBbSW50ZXJuZXRBZGRyZXNzXS4gSWYgW2hvc3RdIGlzIGEKICAgKiBbU3RyaW5nXSwgW2Nvbm5lY3RdIHdpbGwgcGVyZm9ybSBhIFtJbnRlcm5ldEFkZHJlc3MubG9va3VwXSBhbmQgdHJ5CiAgICogYWxsIHJldHVybmVkIFtJbnRlcm5ldEFkZHJlc3NdZXMsIHVudGlsIGNvbm5lY3RlZC4gVW5sZXNzIGEKICAgKiBjb25uZWN0aW9uIHdhcyBlc3RhYmxpc2hlZCwgdGhlIGVycm9yIGZyb20gdGhlIGZpcnN0IGZhaWxpbmcgY29ubmVjdGlvbiBpcwogICAqIHJldHVybmVkLgogICAqCiAgICogVGhlIGFyZ3VtZW50IFtzb3VyY2VBZGRyZXNzXSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBsb2NhbAogICAqIGFkZHJlc3MgdG8gYmluZCB3aGVuIG1ha2luZyB0aGUgY29ubmVjdGlvbi4gYHNvdXJjZUFkZHJlc3NgIGNhbiBlaXRoZXIKICAgKiBiZSBhIGBTdHJpbmdgIG9yIGFuIGBJbnRlcm5ldEFkZHJlc3NgLiBJZiBhIGBTdHJpbmdgIGlzIHBhc3NlZCBpdCBtdXN0CiAgICogaG9sZCBhIG51bWVyaWMgSVAgYWRkcmVzcy4KICAgKgogICAqIFRoZSBhcmd1bWVudCBbdGltZW91dF0gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBtYXhpbXVtIGFsbG93ZWQgdGltZSB0byB3YWl0CiAgICogZm9yIGEgY29ubmVjdGlvbiB0byBiZSBlc3RhYmxpc2hlZC4gSWYgW3RpbWVvdXRdIGlzIGxvbmdlciB0aGFuIHRoZSBzeXN0ZW0KICAgKiBsZXZlbCB0aW1lb3V0IGR1cmF0aW9uLCBhIHRpbWVvdXQgbWF5IG9jY3VyIHNvb25lciB0aGFuIHNwZWNpZmllZCBpbgogICAqIFt0aW1lb3V0XS4gT24gdGltZW91dCwgYSBbU29ja2V0RXhjZXB0aW9uXSBpcyB0aHJvd24gYW5kIGFsbCBvbmdvaW5nCiAgICogY29ubmVjdGlvbiBhdHRlbXB0cyB0byBbaG9zdF0gYXJlIGNhbmNlbGxlZC4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgRnV0dXJlPFJhd1NvY2tldD4gY29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge3NvdXJjZUFkZHJlc3MsIER1cmF0aW9uIHRpbWVvdXR9KTsKCiAgLy8vIExpa2UgW2Nvbm5lY3RdLCBidXQgcmV0dXJucyBhIFtGdXR1cmVdIHRoYXQgY29tcGxldGVzIHdpdGggYQogIC8vLyBbQ29ubmVjdGlvblRhc2tdIHRoYXQgY2FuIGJlIGNhbmNlbGxlZCBpZiB0aGUgW1Jhd1NvY2tldF0gaXMgbm8KICAvLy8gbG9uZ2VyIG5lZWRlZC4KICBleHRlcm5hbCBzdGF0aWMgRnV0dXJlPENvbm5lY3Rpb25UYXNrPFJhd1NvY2tldD4+IHN0YXJ0Q29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge3NvdXJjZUFkZHJlc3N9KTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlY2VpdmVkIGFuZCBub24tcmVhZCBieXRlcyBpbiB0aGUgc29ja2V0IHRoYXQKICAgKiBjYW4gYmUgcmVhZC4KICAgKi8KICBpbnQgYXZhaWxhYmxlKCk7CgogIC8qKgogICAqIFJlYWQgdXAgdG8gW2xlbl0gYnl0ZXMgZnJvbSB0aGUgc29ja2V0LiBUaGlzIGZ1bmN0aW9uIGlzCiAgICogbm9uLWJsb2NraW5nIGFuZCB3aWxsIG9ubHkgcmV0dXJuIGRhdGEgaWYgZGF0YSBpcyBhdmFpbGFibGUuIFRoZQogICAqIG51bWJlciBvZiBieXRlcyByZWFkIGNhbiBiZSBsZXNzIHRoZW4gW2xlbl0gaWYgZmV3ZXIgYnl0ZXMgYXJlCiAgICogYXZhaWxhYmxlIGZvciBpbW1lZGlhdGUgcmVhZGluZy4gSWYgbm8gZGF0YSBpcyBhdmFpbGFibGUgWzpudWxsOl0KICAgKiBpcyByZXR1cm5lZC4KICAgKi8KICBVaW50OExpc3QgcmVhZChbaW50IGxlbl0pOwoKICAvKioKICAgKiBXcml0ZXMgdXAgdG8gW2NvdW50XSBieXRlcyBvZiB0aGUgYnVmZmVyIGZyb20gW29mZnNldF0gYnVmZmVyIG9mZnNldCB0bwogICAqIHRoZSBzb2NrZXQuIFRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gYnl0ZXMgaXMgcmV0dXJuZWQuIFRoaXMKICAgKiBmdW5jdGlvbiBpcyBub24tYmxvY2tpbmcgYW5kIHdpbGwgb25seSB3cml0ZSBkYXRhIGlmIGJ1ZmZlciBzcGFjZSBpcwogICAqIGF2YWlsYWJsZSBpbiB0aGUgc29ja2V0LgogICAqCiAgICogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIFtvZmZzZXRdIGlzIDAsIGFuZCB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgW2NvdW50XSBpcwogICAqIFs6YnVmZmVyLmxlbmd0aCAtIG9mZnNldDpdLgogICAqLwogIGludCB3cml0ZShMaXN0PGludD4gYnVmZmVyLCBbaW50IG9mZnNldCwgaW50IGNvdW50XSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHBvcnQgdXNlZCBieSB0aGlzIHNvY2tldC4KICAgKgogICAqIFRocm93cyBhIFtTb2NrZXRFeGNlcHRpb25dIGlmIHRoZSBzb2NrZXQgaXMgY2xvc2VkLgogICAqLwogIGludCBnZXQgcG9ydDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcmVtb3RlIHBvcnQgY29ubmVjdGVkIHRvIGJ5IHRoaXMgc29ja2V0LgogICAqCiAgICogVGhyb3dzIGEgW1NvY2tldEV4Y2VwdGlvbl0gaWYgdGhlIHNvY2tldCBpcyBjbG9zZWQuCiAgICovCiAgaW50IGdldCByZW1vdGVQb3J0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBbSW50ZXJuZXRBZGRyZXNzXSB1c2VkIHRvIGNvbm5lY3QgdGhpcyBzb2NrZXQuCiAgICoKICAgKiBUaHJvd3MgYSBbU29ja2V0RXhjZXB0aW9uXSBpZiB0aGUgc29ja2V0IGlzIGNsb3NlZC4KICAgKi8KICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3M7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHJlbW90ZSBbSW50ZXJuZXRBZGRyZXNzXSBjb25uZWN0ZWQgdG8gYnkgdGhpcyBzb2NrZXQuCiAgICoKICAgKiBUaHJvd3MgYSBbU29ja2V0RXhjZXB0aW9uXSBpZiB0aGUgc29ja2V0IGlzIGNsb3NlZC4KICAgKi8KICBJbnRlcm5ldEFkZHJlc3MgZ2V0IHJlbW90ZUFkZHJlc3M7CgogIC8qKgogICAqIENsb3NlcyB0aGUgc29ja2V0LiBSZXR1cm5zIGEgRnV0dXJlIHRoYXQgY29tcGxldGVzIHdpdGggW3RoaXNdIHdoZW4gdGhlCiAgICogdW5kZXJseWluZyBjb25uZWN0aW9uIGlzIGNvbXBsZXRlbHkgZGVzdHJveWVkLgogICAqCiAgICogQ2FsbGluZyBbY2xvc2VdIHdpbGwgbmV2ZXIgdGhyb3cgYW4gZXhjZXB0aW9uCiAgICogYW5kIGNhbGxpbmcgaXQgc2V2ZXJhbCB0aW1lcyBpcyBzdXBwb3J0ZWQuIENhbGxpbmcgW2Nsb3NlXSBjYW4gcmVzdWx0IGluCiAgICogYSBbUmF3U29ja2V0RXZlbnQucmVhZENsb3NlZF0gZXZlbnQuCiAgICovCiAgRnV0dXJlPFJhd1NvY2tldD4gY2xvc2UoKTsKCiAgLyoqCiAgICogU2h1dGRvd24gdGhlIHNvY2tldCBpbiB0aGUgW2RpcmVjdGlvbl0uIENhbGxpbmcgW3NodXRkb3duXSB3aWxsIG5ldmVyCiAgICogdGhyb3cgYW4gZXhjZXB0aW9uIGFuZCBjYWxsaW5nIGl0IHNldmVyYWwgdGltZXMgaXMgc3VwcG9ydGVkLiBDYWxsaW5nCiAgICogc2h1dGRvd24gd2l0aCBlaXRoZXIgW1NvY2tldERpcmVjdGlvbi5ib3RoXSBvciBbU29ja2V0RGlyZWN0aW9uLnJlY2VpdmVdCiAgICogY2FuIHJlc3VsdCBpbiBhIFtSYXdTb2NrZXRFdmVudC5yZWFkQ2xvc2VkXSBldmVudC4KICAgKi8KICB2b2lkIHNodXRkb3duKFNvY2tldERpcmVjdGlvbiBkaXJlY3Rpb24pOwoKICAvKioKICAgKiBVc2UgW3NldE9wdGlvbl0gdG8gY3VzdG9taXplIHRoZSBbUmF3U29ja2V0XS4gU2VlIFtTb2NrZXRPcHRpb25dIGZvcgogICAqIGF2YWlsYWJsZSBvcHRpb25zLgogICAqCiAgICogUmV0dXJucyBbOnRydWU6XSBpZiB0aGUgb3B0aW9uIHdhcyBzZXQgc3VjY2Vzc2Z1bGx5LCBmYWxzZSBvdGhlcndpc2UuCiAgICovCiAgYm9vbCBzZXRPcHRpb24oU29ja2V0T3B0aW9uIG9wdGlvbiwgYm9vbCBlbmFibGVkKTsKCiAgLyoqCiAgICogVXNlIFtnZXRSYXdPcHRpb25dIHRvIGdldCBsb3cgbGV2ZWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFtSYXdTb2NrZXRdLiBTZWUKICAgKiBbUmF3U29ja2V0T3B0aW9uXSBmb3IgYXZhaWxhYmxlIG9wdGlvbnMuCiAgICoKICAgKiBSZXR1cm5zIHRoZSBbUmF3U29ja2V0T3B0aW9uLnZhbHVlXSBvbiBzdWNjZXNzLgogICAqCiAgICogVGhyb3dzIGFuIFtPU0Vycm9yXSBvbiBmYWlsdXJlLgogICAqLwogIEBTaW5jZSgiMi4yIikKICBVaW50OExpc3QgZ2V0UmF3T3B0aW9uKFJhd1NvY2tldE9wdGlvbiBvcHRpb24pOwoKICAvKioKICAgKiBVc2UgW3NldFJhd09wdGlvbl0gdG8gY3VzdG9taXplIHRoZSBbUmF3U29ja2V0XS4gU2VlIFtSYXdTb2NrZXRPcHRpb25dIGZvcgogICAqIGF2YWlsYWJsZSBvcHRpb25zLgogICAqCiAgICogVGhyb3dzIGFuIFtPU0Vycm9yXSBvbiBmYWlsdXJlLgogICAqLwogIEBTaW5jZSgiMi4yIikKICB2b2lkIHNldFJhd09wdGlvbihSYXdTb2NrZXRPcHRpb24gb3B0aW9uKTsKfQoKLyoqCiAqIEEgaGlnaC1sZXZlbCBjbGFzcyBmb3IgY29tbXVuaWNhdGluZyBvdmVyIGEgVENQIHNvY2tldC4KICoKICogVGhlIFtTb2NrZXRdIGV4cG9zZXMgYm90aCBhIFtTdHJlYW1dIGFuZCBhIFtJT1NpbmtdIGludGVyZmFjZSwgbWFraW5nIGl0CiAqIGlkZWFsIGZvciB1c2luZyB0b2dldGhlciB3aXRoIG90aGVyIFtTdHJlYW1dcy4KICovCmFic3RyYWN0IGNsYXNzIFNvY2tldCBpbXBsZW1lbnRzIFN0cmVhbTxVaW50OExpc3Q+LCBJT1NpbmsgewogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgc29ja2V0IGNvbm5lY3Rpb24gdG8gdGhlIGhvc3QgYW5kIHBvcnQgYW5kIHJldHVybnMgYSBbRnV0dXJlXQogICAqIHRoYXQgd2lsbCBjb21wbGV0ZSB3aXRoIGVpdGhlciBhIFtTb2NrZXRdIG9uY2UgY29ubmVjdGVkIG9yIGFuIGVycm9yCiAgICogaWYgdGhlIGhvc3QtbG9va3VwIG9yIGNvbm5lY3Rpb24gZmFpbGVkLgogICAqCiAgICogW2hvc3RdIGNhbiBlaXRoZXIgYmUgYSBbU3RyaW5nXSBvciBhbiBbSW50ZXJuZXRBZGRyZXNzXS4gSWYgW2hvc3RdIGlzIGEKICAgKiBbU3RyaW5nXSwgW2Nvbm5lY3RdIHdpbGwgcGVyZm9ybSBhIFtJbnRlcm5ldEFkZHJlc3MubG9va3VwXSBhbmQgdHJ5CiAgICogYWxsIHJldHVybmVkIFtJbnRlcm5ldEFkZHJlc3NdZXMsIHVudGlsIGNvbm5lY3RlZC4gVW5sZXNzIGEKICAgKiBjb25uZWN0aW9uIHdhcyBlc3RhYmxpc2hlZCwgdGhlIGVycm9yIGZyb20gdGhlIGZpcnN0IGZhaWxpbmcgY29ubmVjdGlvbiBpcwogICAqIHJldHVybmVkLgogICAqCiAgICogVGhlIGFyZ3VtZW50IFtzb3VyY2VBZGRyZXNzXSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBsb2NhbAogICAqIGFkZHJlc3MgdG8gYmluZCB3aGVuIG1ha2luZyB0aGUgY29ubmVjdGlvbi4gYHNvdXJjZUFkZHJlc3NgIGNhbiBlaXRoZXIKICAgKiBiZSBhIGBTdHJpbmdgIG9yIGFuIGBJbnRlcm5ldEFkZHJlc3NgLiBJZiBhIGBTdHJpbmdgIGlzIHBhc3NlZCBpdCBtdXN0CiAgICogaG9sZCBhIG51bWVyaWMgSVAgYWRkcmVzcy4KICAgKgogICAqIFRoZSBhcmd1bWVudCBbdGltZW91dF0gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBtYXhpbXVtIGFsbG93ZWQgdGltZSB0byB3YWl0CiAgICogZm9yIGEgY29ubmVjdGlvbiB0byBiZSBlc3RhYmxpc2hlZC4gSWYgW3RpbWVvdXRdIGlzIGxvbmdlciB0aGFuIHRoZSBzeXN0ZW0KICAgKiBsZXZlbCB0aW1lb3V0IGR1cmF0aW9uLCBhIHRpbWVvdXQgbWF5IG9jY3VyIHNvb25lciB0aGFuIHNwZWNpZmllZCBpbgogICAqIFt0aW1lb3V0XS4gT24gdGltZW91dCwgYSBbU29ja2V0RXhjZXB0aW9uXSBpcyB0aHJvd24gYW5kIGFsbCBvbmdvaW5nCiAgICogY29ubmVjdGlvbiBhdHRlbXB0cyB0byBbaG9zdF0gYXJlIGNhbmNlbGxlZC4KICAgKi8KICBzdGF0aWMgRnV0dXJlPFNvY2tldD4gY29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge3NvdXJjZUFkZHJlc3MsIER1cmF0aW9uIHRpbWVvdXR9KSB7CiAgICBmaW5hbCBJT092ZXJyaWRlcyBvdmVycmlkZXMgPSBJT092ZXJyaWRlcy5jdXJyZW50OwogICAgaWYgKG92ZXJyaWRlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBTb2NrZXQuX2Nvbm5lY3QoaG9zdCwgcG9ydCwKICAgICAgICAgIHNvdXJjZUFkZHJlc3M6IHNvdXJjZUFkZHJlc3MsIHRpbWVvdXQ6IHRpbWVvdXQpOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5zb2NrZXRDb25uZWN0KGhvc3QsIHBvcnQsCiAgICAgICAgc291cmNlQWRkcmVzczogc291cmNlQWRkcmVzcywgdGltZW91dDogdGltZW91dCk7CiAgfQoKICAvLy8gTGlrZSBbY29ubmVjdF0sIGJ1dCByZXR1cm5zIGEgW0Z1dHVyZV0gdGhhdCBjb21wbGV0ZXMgd2l0aCBhCiAgLy8vIFtDb25uZWN0aW9uVGFza10gdGhhdCBjYW4gYmUgY2FuY2VsbGVkIGlmIHRoZSBbU29ja2V0XSBpcyBubwogIC8vLyBsb25nZXIgbmVlZGVkLgogIHN0YXRpYyBGdXR1cmU8Q29ubmVjdGlvblRhc2s8U29ja2V0Pj4gc3RhcnRDb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7c291cmNlQWRkcmVzc30pIHsKICAgIGZpbmFsIElPT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IElPT3ZlcnJpZGVzLmN1cnJlbnQ7CiAgICBpZiAob3ZlcnJpZGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIFNvY2tldC5fc3RhcnRDb25uZWN0KGhvc3QsIHBvcnQsIHNvdXJjZUFkZHJlc3M6IHNvdXJjZUFkZHJlc3MpOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5zb2NrZXRTdGFydENvbm5lY3QoaG9zdCwgcG9ydCwKICAgICAgICBzb3VyY2VBZGRyZXNzOiBzb3VyY2VBZGRyZXNzKTsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBGdXR1cmU8U29ja2V0PiBfY29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge3NvdXJjZUFkZHJlc3MsIER1cmF0aW9uIHRpbWVvdXR9KTsKCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxDb25uZWN0aW9uVGFzazxTb2NrZXQ+PiBfc3RhcnRDb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7c291cmNlQWRkcmVzc30pOwoKICAvKioKICAgKiBEZXN0cm95IHRoZSBzb2NrZXQgaW4gYm90aCBkaXJlY3Rpb25zLiBDYWxsaW5nIFtkZXN0cm95XSB3aWxsIG1ha2UgdGhlCiAgICogc2VuZCBhIGNsb3NlIGV2ZW50IG9uIHRoZSBzdHJlYW0gYW5kIHdpbGwgbm8gbG9uZ2VyIHJlYWN0IG9uIGRhdGEgYmVpbmcKICAgKiBwaXBlZCB0byBpdC4KICAgKgogICAqIENhbGwgW2Nsb3NlXShpbmhlcml0ZWQgZnJvbSBbSU9TaW5rXSkgdG8gb25seSBjbG9zZSB0aGUgW1NvY2tldF0KICAgKiBmb3Igc2VuZGluZyBkYXRhLgogICAqLwogIHZvaWQgZGVzdHJveSgpOwoKICAvKioKICAgKiBVc2UgW3NldE9wdGlvbl0gdG8gY3VzdG9taXplIHRoZSBbUmF3U29ja2V0XS4gU2VlIFtTb2NrZXRPcHRpb25dIGZvcgogICAqIGF2YWlsYWJsZSBvcHRpb25zLgogICAqCiAgICogUmV0dXJucyBbOnRydWU6XSBpZiB0aGUgb3B0aW9uIHdhcyBzZXQgc3VjY2Vzc2Z1bGx5LCBmYWxzZSBvdGhlcndpc2UuCiAgICoKICAgKiBUaHJvd3MgYSBbU29ja2V0RXhjZXB0aW9uXSBpZiB0aGUgc29ja2V0IGhhcyBiZWVuIGRlc3Ryb3llZCBvciB1cGdyYWRlZCB0bwogICAqIGEgc2VjdXJlIHNvY2tldC4KICAgKi8KICBib29sIHNldE9wdGlvbihTb2NrZXRPcHRpb24gb3B0aW9uLCBib29sIGVuYWJsZWQpOwoKICAvKioKICAgKiBVc2UgW2dldFJhd09wdGlvbl0gdG8gZ2V0IGxvdyBsZXZlbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgW1Jhd1NvY2tldF0uIFNlZQogICAqIFtSYXdTb2NrZXRPcHRpb25dIGZvciBhdmFpbGFibGUgb3B0aW9ucy4KICAgKgogICAqIFJldHVybnMgdGhlIFtSYXdTb2NrZXRPcHRpb24udmFsdWVdIG9uIHN1Y2Nlc3MuCiAgICoKICAgKiBUaHJvd3MgYW4gW09TRXJyb3JdIG9uIGZhaWx1cmUgYW5kIGEgW1NvY2tldEV4Y2VwdGlvbl0gaWYgdGhlIHNvY2tldCBoYXMKICAgKiBiZWVuIGRlc3Ryb3llZCBvciB1cGdyYWRlZCB0byBhIHNlY3VyZSBzb2NrZXQuCiAgICovCiAgVWludDhMaXN0IGdldFJhd09wdGlvbihSYXdTb2NrZXRPcHRpb24gb3B0aW9uKTsKCiAgLyoqCiAgICogVXNlIFtzZXRSYXdPcHRpb25dIHRvIGN1c3RvbWl6ZSB0aGUgW1Jhd1NvY2tldF0uIFNlZSBbUmF3U29ja2V0T3B0aW9uXSBmb3IKICAgKiBhdmFpbGFibGUgb3B0aW9ucy4KICAgKgogICAqIFRocm93cyBhbiBbT1NFcnJvcl0gb24gZmFpbHVyZSBhbmQgYSBbU29ja2V0RXhjZXB0aW9uXSBpZiB0aGUgc29ja2V0IGhhcwogICAqIGJlZW4gZGVzdHJveWVkIG9yIHVwZ3JhZGVkIHRvIGEgc2VjdXJlIHNvY2tldC4KICAgKi8KICB2b2lkIHNldFJhd09wdGlvbihSYXdTb2NrZXRPcHRpb24gb3B0aW9uKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcG9ydCB1c2VkIGJ5IHRoaXMgc29ja2V0LgogICAqCiAgICogVGhyb3dzIGEgW1NvY2tldEV4Y2VwdGlvbl0gaWYgdGhlIHNvY2tldCBpcyBjbG9zZWQuCiAgICovCiAgaW50IGdldCBwb3J0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSByZW1vdGUgcG9ydCBjb25uZWN0ZWQgdG8gYnkgdGhpcyBzb2NrZXQuCiAgICoKICAgKiBUaHJvd3MgYSBbU29ja2V0RXhjZXB0aW9uXSBpZiB0aGUgc29ja2V0IGlzIGNsb3NlZC4KICAgKi8KICBpbnQgZ2V0IHJlbW90ZVBvcnQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIFtJbnRlcm5ldEFkZHJlc3NdIHVzZWQgdG8gY29ubmVjdCB0aGlzIHNvY2tldC4KICAgKgogICAqIFRocm93cyBhIFtTb2NrZXRFeGNlcHRpb25dIGlmIHRoZSBzb2NrZXQgaXMgY2xvc2VkLgogICAqLwogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzczsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcmVtb3RlIFtJbnRlcm5ldEFkZHJlc3NdIGNvbm5lY3RlZCB0byBieSB0aGlzIHNvY2tldC4KICAgKgogICAqIFRocm93cyBhIFtTb2NrZXRFeGNlcHRpb25dIGlmIHRoZSBzb2NrZXQgaXMgY2xvc2VkLgogICAqLwogIEludGVybmV0QWRkcmVzcyBnZXQgcmVtb3RlQWRkcmVzczsKCiAgRnV0dXJlIGNsb3NlKCk7CgogIEZ1dHVyZSBnZXQgZG9uZTsKfQoKLyoqCiAqIERhdGFncmFtIHBhY2thZ2UuIERhdGEgc2VudCB0byBhbmQgcmVjZWl2ZWQgZnJvbSBkYXRhZ3JhbSBzb2NrZXRzCiAqIGNvbnRhaW5zIHRoZSBpbnRlcm5ldCBhZGRyZXNzIGFuZCBwb3J0IG9mIHRoZSBkZXN0aW5hdGlvbiBvciBzb3VyY2UKICogdG9nZXRlciB3aXRoIHRoZSBkYXRhLgogKi8KY2xhc3MgRGF0YWdyYW0gewogIFVpbnQ4TGlzdCBkYXRhOwogIEludGVybmV0QWRkcmVzcyBhZGRyZXNzOwogIGludCBwb3J0OwoKICBEYXRhZ3JhbSh0aGlzLmRhdGEsIHRoaXMuYWRkcmVzcywgdGhpcy5wb3J0KTsKfQoKLyoqCiAqIEEgW1Jhd0RhdGFncmFtU29ja2V0XSBpcyBhbiB1bmJ1ZmZlcmVkIGludGVyZmFjZSB0byBhIFVEUCBzb2NrZXQuCiAqCiAqIFRoZSByYXcgZGF0YWdyYW0gc29ja2V0IGRlbGl2ZXJzIHRoZSBkYXRhZ3JhbXMgaW4gdGhlIHNhbWUgY2h1bmtzIGFzIHRoZQogKiB1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0uIEl0J3MgYSBbU3RyZWFtXSBvZiBbUmF3U29ja2V0RXZlbnRdcy4KICoKICogTm90ZSB0aGF0IHRoZSBldmVudCBbUmF3U29ja2V0RXZlbnQucmVhZENsb3NlZF0gd2lsbCBuZXZlciBiZQogKiByZWNlaXZlZCBhcyBhbiBVRFAgc29ja2V0IGNhbm5vdCBiZSBjbG9zZWQgYnkgYSByZW1vdGUgcGVlci4KICoKICogSXQgaXMgbm90IHRoZSBzYW1lIGFzIGEKICogW1BPU0lYIHJhdyBzb2NrZXRdKGh0dHA6Ly9tYW43Lm9yZy9saW51eC9tYW4tcGFnZXMvbWFuNy9yYXcuNy5odG1sKS4KICovCmFic3RyYWN0IGNsYXNzIFJhd0RhdGFncmFtU29ja2V0IGV4dGVuZHMgU3RyZWFtPFJhd1NvY2tldEV2ZW50PiB7CiAgLyoqCiAgICogU2V0IG9yIGdldCwgaWYgdGhlIFtSYXdEYXRhZ3JhbVNvY2tldF0gc2hvdWxkIGxpc3RlbiBmb3IKICAgKiBbUmF3U29ja2V0RXZlbnQucmVhZF0gZXZlbnRzLiBEZWZhdWx0IGlzIFs6dHJ1ZTpdLgogICAqLwogIGJvb2wgcmVhZEV2ZW50c0VuYWJsZWQ7CgogIC8qKgogICAqIFNldCBvciBnZXQsIGlmIHRoZSBbUmF3RGF0YWdyYW1Tb2NrZXRdIHNob3VsZCBsaXN0ZW4gZm9yCiAgICogW1Jhd1NvY2tldEV2ZW50LndyaXRlXSBldmVudHMuIERlZmF1bHQgaXMgWzp0cnVlOl0uICBUaGlzIGlzIGEKICAgKiBvbmUtc2hvdCBsaXN0ZW5lciwgYW5kIHdyaXRlRXZlbnRzRW5hYmxlZCBtdXN0IGJlIHNldCB0byB0cnVlCiAgICogYWdhaW4gdG8gcmVjZWl2ZSBhbm90aGVyIHdyaXRlIGV2ZW50LgogICAqLwogIGJvb2wgd3JpdGVFdmVudHNFbmFibGVkOwoKICAvKioKICAgKiBTZXQgb3IgZ2V0LCB3aGV0aGVyIG11bHRpY2FzdCB0cmFmZmljIGlzIGxvb3BlZCBiYWNrIHRvIHRoZSBob3N0LgogICAqCiAgICogQnkgZGVmYXVsdCBtdWx0aWNhc3QgbG9vcGJhY2sgaXMgZW5hYmxlZC4KICAgKi8KICBib29sIG11bHRpY2FzdExvb3BiYWNrOwoKICAvKioKICAgKiBTZXQgb3IgZ2V0LCB0aGUgbWF4aW11bSBuZXR3b3JrIGhvcHMgZm9yIG11bHRpY2FzdCBwYWNrYWdlcwogICAqIG9yaWdpbmF0aW5nIGZyb20gdGhpcyBzb2NrZXQuCiAgICoKICAgKiBGb3IgSVB2NCB0aGlzIGlzIHJlZmVycmVkIHRvIGFzIFRUTCAodGltZSB0byBsaXZlKS4KICAgKgogICAqIEJ5IGRlZmF1bHQgdGhpcyB2YWx1ZSBpcyAxIGNhdXNpbmcgbXVsdGljYXN0IHRyYWZmaWMgdG8gc3RheSBvbgogICAqIHRoZSBsb2NhbCBuZXR3b3JrLgogICAqLwogIGludCBtdWx0aWNhc3RIb3BzOwoKICAvKioKICAgKiBTZXQgb3IgZ2V0LCB0aGUgbmV0d29yayBpbnRlcmZhY2UgdXNlZCBmb3Igb3V0Z29pbmcgbXVsdGljYXN0IHBhY2thZ2VzLgogICAqCiAgICogQSB2YWx1ZSBvZiBgbnVsbGBpbmRpY2F0ZSB0aGF0IHRoZSBzeXN0ZW0gY2hvb3NlcyB0aGUgbmV0d29yawogICAqIGludGVyZmFjZSB0byB1c2UuCiAgICoKICAgKiBCeSBkZWZhdWx0IHRoaXMgdmFsdWUgaXMgYG51bGxgCiAgICovCiAgQERlcHJlY2F0ZWQoIlRoaXMgcHJvcGVydHkgaXMgbm90IGltcGxlbWVudGVkLiBVc2UgZ2V0UmF3T3B0aW9uIGFuZCAiCiAgICAgICJzZXRSYXdPcHRpb24gaW5zdGVhZC4iKQogIE5ldHdvcmtJbnRlcmZhY2UgbXVsdGljYXN0SW50ZXJmYWNlOwoKICAvKioKICAgKiBTZXQgb3IgZ2V0LCB3aGV0aGVyIElQdjQgYnJvYWRjYXN0IGlzIGVuYWJsZWQuCiAgICoKICAgKiBJUHY0IGJyb2FkY2FzdCBuZWVkcyB0byBiZSBlbmFibGVkIGJ5IHRoZSBzZW5kZXIgZm9yIHNlbmRpbmcgSVB2NAogICAqIGJyb2FkY2FzdCBwYWNrYWdlcy4gQnkgZGVmYXVsdCBJUHY0IGJyb2FkY2FzdCBpcyBkaXNhYmxlZC4KICAgKgogICAqIEZvciBJUHY2IHRoZXJlIGlzIG5vIGdlbmVyYWwgYnJvYWRjYXN0IG1lY2hhbmlzbS4gVXNlIG11bHRpY2FzdAogICAqIGluc3RlYWQuCiAgICovCiAgYm9vbCBicm9hZGNhc3RFbmFibGVkOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IHJhdyBkYXRhZ3JhbSBzb2NrZXQgYmluZGluZyBpdCB0byBhbiBhZGRyZXNzIGFuZAogICAqIHBvcnQuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxSYXdEYXRhZ3JhbVNvY2tldD4gYmluZChob3N0LCBpbnQgcG9ydCwKICAgICAge2Jvb2wgcmV1c2VBZGRyZXNzOiB0cnVlLCBib29sIHJldXNlUG9ydDogZmFsc2UsIGludCB0dGw6IDF9KTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcG9ydCB1c2VkIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIGludCBnZXQgcG9ydDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgYWRkcmVzcyB1c2VkIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzczsKCiAgLyoqCiAgICogQ2xvc2UgdGhlIGRhdGFncmFtIHNvY2tldC4KICAgKi8KICB2b2lkIGNsb3NlKCk7CgogIC8qKgogICAqIFNlbmQgYSBkYXRhZ3JhbS4KICAgKgogICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLiBUaGlzIHdpbGwgYWx3YXlzIGJlIGVpdGhlcgogICAqIHRoZSBzaXplIG9mIFtidWZmZXJdIG9yIGAwYC4KICAgKi8KICBpbnQgc2VuZChMaXN0PGludD4gYnVmZmVyLCBJbnRlcm5ldEFkZHJlc3MgYWRkcmVzcywgaW50IHBvcnQpOwoKICAvKioKICAgKiBSZWNlaXZlIGEgZGF0YWdyYW0uIElmIHRoZXJlIGFyZSBubyBkYXRhZ3JhbXMgYXZhaWxhYmxlIGBudWxsYCBpcwogICAqIHJldHVybmVkLgogICAqCiAgICogVGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBkYXRhZ3JhbSB0aGF0IGNhbiBiZSByZWNlaXZlZCBpcyA2NTUwMyBieXRlcy4KICAgKi8KICBEYXRhZ3JhbSByZWNlaXZlKCk7CgogIC8qKgogICAqIEpvaW4gYSBtdWx0aWNhc3QgZ3JvdXAuCiAgICoKICAgKiBJZiBhbiBlcnJvciBvY2N1ciB3aGVuIHRyeWluZyB0byBqb2luIHRoZSBtdWx0aWNhc3QgZ3JvdXAgYW4KICAgKiBleGNlcHRpb24gaXMgdGhyb3duLgogICAqLwogIHZvaWQgam9pbk11bHRpY2FzdChJbnRlcm5ldEFkZHJlc3MgZ3JvdXAsIFtOZXR3b3JrSW50ZXJmYWNlIGludGVyZmFjZV0pOwoKICAvKioKICAgKiBMZWF2ZSBhIG11bHRpY2FzdCBncm91cC4KICAgKgogICAqIElmIGFuIGVycm9yIG9jY3VyIHdoZW4gdHJ5aW5nIHRvIGpvaW4gdGhlIG11bHRpY2FzZSBncm91cCBhbgogICAqIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICovCiAgdm9pZCBsZWF2ZU11bHRpY2FzdChJbnRlcm5ldEFkZHJlc3MgZ3JvdXAsIFtOZXR3b3JrSW50ZXJmYWNlIGludGVyZmFjZV0pOwoKICAvKioKICAgKiBVc2UgW2dldFJhd09wdGlvbl0gdG8gZ2V0IGxvdyBsZXZlbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgW1Jhd1NvY2tldF0uIFNlZQogICAqIFtSYXdTb2NrZXRPcHRpb25dIGZvciBhdmFpbGFibGUgb3B0aW9ucy4KICAgKgogICAqIFJldHVybnMgW1Jhd1NvY2tldE9wdGlvbi52YWx1ZV0gb24gc3VjY2Vzcy4KICAgKgogICAqIFRocm93cyBhbiBbT1NFcnJvcl0gb24gZmFpbHVyZS4KICAgKi8KICBVaW50OExpc3QgZ2V0UmF3T3B0aW9uKFJhd1NvY2tldE9wdGlvbiBvcHRpb24pOwoKICAvKioKICAgKiBVc2UgW3NldFJhd09wdGlvbl0gdG8gY3VzdG9taXplIHRoZSBbUmF3U29ja2V0XS4gU2VlIFtSYXdTb2NrZXRPcHRpb25dIGZvcgogICAqIGF2YWlsYWJsZSBvcHRpb25zLgogICAqCiAgICogVGhyb3dzIGFuIFtPU0Vycm9yXSBvbiBmYWlsdXJlLgogICAqLwogIHZvaWQgc2V0UmF3T3B0aW9uKFJhd1NvY2tldE9wdGlvbiBvcHRpb24pOwp9CgpjbGFzcyBTb2NrZXRFeGNlcHRpb24gaW1wbGVtZW50cyBJT0V4Y2VwdGlvbiB7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CiAgZmluYWwgT1NFcnJvciBvc0Vycm9yOwogIGZpbmFsIEludGVy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b2NrZXQuZGFydDpvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9pby9zdGRpby5kYXJ0uUMvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5pbzsKCi8vIFRoZXNlIG1hdGNoIGVudW0gU3RkaW9IYW5kbGVUeXBlIGluIGZpbGUuaApjb25zdCBpbnQgX3N0ZGlvSGFuZGxlVHlwZVRlcm1pbmFsID0gMDsKY29uc3QgaW50IF9zdGRpb0hhbmRsZVR5cGVQaXBlID0gMTsKY29uc3QgaW50IF9zdGRpb0hhbmRsZVR5cGVGaWxlID0gMjsKY29uc3QgaW50IF9zdGRpb0hhbmRsZVR5cGVTb2NrZXQgPSAzOwpjb25zdCBpbnQgX3N0ZGlvSGFuZGxlVHlwZU90aGVyID0gNDsKY29uc3QgaW50IF9zdGRpb0hhbmRsZVR5cGVFcnJvciA9IDU7CgpjbGFzcyBfU3RkU3RyZWFtIGV4dGVuZHMgU3RyZWFtPExpc3Q8aW50Pj4gewogIGZpbmFsIFN0cmVhbTxMaXN0PGludD4+IF9zdHJlYW07CgogIF9TdGRTdHJlYW0odGhpcy5fc3RyZWFtKTsKCiAgU3RyZWFtU3Vic2NyaXB0aW9uPExpc3Q8aW50Pj4gbGlzdGVuKHZvaWQgb25EYXRhKExpc3Q8aW50PiBldmVudCksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICByZXR1cm4gX3N0cmVhbS5saXN0ZW4ob25EYXRhLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsIG9uRG9uZTogb25Eb25lLCBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKTsKICB9Cn0KCi8qKgogKiBbU3RkaW5dIGFsbG93cyBib3RoIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgcmVhZHMgZnJvbSB0aGUgc3RhbmRhcmQKICogaW5wdXQgc3RyZWFtLgogKgogKiBNaXhpbmcgc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyByZWFkcyBpcyB1bmRlZmluZWQuCiAqLwpjbGFzcyBTdGRpbiBleHRlbmRzIF9TdGRTdHJlYW0gaW1wbGVtZW50cyBTdHJlYW08TGlzdDxpbnQ+PiB7CiAgaW50IF9mZDsKCiAgU3RkaW4uXyhTdHJlYW08TGlzdDxpbnQ+PiBzdHJlYW0sIHRoaXMuX2ZkKSA6IHN1cGVyKHN0cmVhbSk7CgogIC8qKgogICAqIFJlYWQgYSBsaW5lIGZyb20gc3RkaW4uCiAgICoKICAgKiBCbG9ja3MgdW50aWwgYSBmdWxsIGxpbmUgaXMgYXZhaWxhYmxlLgogICAqCiAgICogTGluZXMgbXkgYmUgdGVybWluYXRlZCBieSBlaXRoZXIgYDxDUj48TEY+YCBvciBgPExGPmAuIE9uIFdpbmRvd3MgaW4gY2FzZXMKICAgKiB3aGVyZSB0aGUgW3N0ZGlvVHlwZV0gb2Ygc3RkaW4gaXMgW1N0ZGlvVHlwZS50ZXJtaW5hbF0gdGhlIHRlcm1pbmF0b3IgbWF5CiAgICogYWxzbyBiZSBhIHNpbmdsZSBgPENSPmAuCiAgICoKICAgKiBJbnB1dCBieXRlcyBhcmUgY29udmVydGVkIHRvIGEgc3RyaW5nIGJ5IFtlbmNvZGluZ10uCiAgICogSWYgW2VuY29kaW5nXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBbc3lzdGVtRW5jb2RpbmddLgogICAqCiAgICogSWYgW3JldGFpbk5ld2xpbmVzXSBpcyBgZmFsc2VgLCB0aGUgcmV0dXJuZWQgU3RyaW5nIHdpbGwgbm90IGluY2x1ZGUgdGhlCiAgICogZmluYWwgbGluZSB0ZXJtaW5hdG9yLiBJZiBgdHJ1ZWAsIHRoZSByZXR1cm5lZCBTdHJpbmcgd2lsbCBpbmNsdWRlIHRoZSBsaW5lCiAgICogdGVybWluYXRvci4gRGVmYXVsdCBpcyBgZmFsc2VgLgogICAqCiAgICogSWYgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCBhZnRlciBhbnkgYnl0ZXMgaGF2ZSBiZWVuIHJlYWQgZnJvbSBzdGRpbiwKICAgKiB0aGF0IGRhdGEgaXMgcmV0dXJuZWQgd2l0aG91dCBhIGxpbmUgdGVybWluYXRvci4KICAgKiBSZXR1cm5zIGBudWxsYCBpZiBubyBieXRlcyBwcmVjZWRlZCB0aGUgZW5kIG9mIGlucHV0LgogICAqLwogIFN0cmluZyByZWFkTGluZVN5bmMoCiAgICAgIHtFbmNvZGluZyBlbmNvZGluZzogc3lzdGVtRW5jb2RpbmcsIGJvb2wgcmV0YWluTmV3bGluZXM6IGZhbHNlfSkgewogICAgY29uc3QgQ1IgPSAxMzsKICAgIGNvbnN0IExGID0gMTA7CiAgICBmaW5hbCBMaXN0PGludD4gbGluZSA9IDxpbnQ+W107CiAgICAvLyBPbiBXaW5kb3dzLCBpZiBsaW5lTW9kZSBpcyBkaXNhYmxlZCwgb25seSBDUiBpcyByZWNlaXZlZC4KICAgIGJvb2wgY3JJc05ld2xpbmUgPSBQbGF0Zm9ybS5pc1dpbmRvd3MgJiYKICAgICAgICAoc3RkaW9UeXBlKHN0ZGluKSA9PSBTdGRpb1R5cGUudGVybWluYWwpICYmCiAgICAgICAgIWxpbmVNb2RlOwogICAgaWYgKHJldGFpbk5ld2xpbmVzKSB7CiAgICAgIGludCBieXRlOwogICAgICBkbyB7CiAgICAgICAgYnl0ZSA9IHJlYWRCeXRlU3luYygpOwogICAgICAgIGlmIChieXRlIDwgMCkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGxpbmUuYWRkKGJ5dGUpOwogICAgICB9IHdoaWxlIChieXRlICE9IExGICYmICEoYnl0ZSA9PSBDUiAmJiBjcklzTmV3bGluZSkpOwogICAgICBpZiAobGluZS5pc0VtcHR5KSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY3JJc05ld2xpbmUpIHsKICAgICAgLy8gQ1IgYW5kIExGIGFyZSBib3RoIGxpbmUgdGVybWluYXRvcnMsIG5laXRoZXIgaXMgcmV0YWluZWQuCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgaW50IGJ5dGUgPSByZWFkQnl0ZVN5bmMoKTsKICAgICAgICBpZiAoYnl0ZSA8IDApIHsKICAgICAgICAgIGlmIChsaW5lLmlzRW1wdHkpIHJldHVybiBudWxsOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChieXRlID09IExGIHx8IGJ5dGUgPT0gQ1IpIGJyZWFrOwogICAgICAgIGxpbmUuYWRkKGJ5dGUpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBDYXNlIGhhdmluZyB0byBoYW5kbGUgQ1IgTEYgYXMgYSBzaW5nbGUgdW5yZXRhaW5lZCBsaW5lIHRlcm1pbmF0b3IuCiAgICAgIG91dGVyOgogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGludCBieXRlID0gcmVhZEJ5dGVTeW5jKCk7CiAgICAgICAgaWYgKGJ5dGUgPT0gTEYpIGJyZWFrOwogICAgICAgIGlmIChieXRlID09IENSKSB7CiAgICAgICAgICBkbyB7CiAgICAgICAgICAgIGJ5dGUgPSByZWFkQnl0ZVN5bmMoKTsKICAgICAgICAgICAgaWYgKGJ5dGUgPT0gTEYpIGJyZWFrIG91dGVyOwoKICAgICAgICAgICAgbGluZS5hZGQoQ1IpOwogICAgICAgICAgfSB3aGlsZSAoYnl0ZSA9PSBDUik7CiAgICAgICAgICAvLyBGYWxsIHRocm91Z2ggYW5kIGhhbmRsZSBub24tQ1IgY2hhcmFjdGVyLgogICAgICAgIH0KICAgICAgICBpZiAoYnl0ZSA8IDApIHsKICAgICAgICAgIGlmIChsaW5lLmlzRW1wdHkpIHJldHVybiBudWxsOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGxpbmUuYWRkKGJ5dGUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZW5jb2RpbmcuZGVjb2RlKGxpbmUpOwogIH0KCiAgLyoqCiAgICogQ2hlY2sgaWYgZWNobyBtb2RlIGlzIGVuYWJsZWQgb24gW3N0ZGluXS4KICAgKi8KICBleHRlcm5hbCBib29sIGdldCBlY2hvTW9kZTsKCiAgLyoqCiAgICogRW5hYmxlIG9yIGRpc2FibGUgZWNobyBtb2RlIG9uIFtzdGRpbl0uCiAgICoKICAgKiBJZiBkaXNhYmxlZCwgaW5wdXQgZnJvbSB0byBjb25zb2xlIHdpbGwgbm90IGJlIGVjaG9lZC4KICAgKgogICAqIERlZmF1bHQgZGVwZW5kcyBvbiB0aGUgcGFyZW50IHByb2Nlc3MsIGJ1dCB1c3VhbGx5IGVuYWJsZWQuCiAgICoKICAgKiBPbiBXaW5kb3dzIHRoaXMgbW9kZSBjYW4gb25seSBiZSBlbmFibGVkIGlmIFtsaW5lTW9kZV0gaXMgZW5hYmxlZCBhcyB3ZWxsLgogICAqLwogIGV4dGVybmFsIHZvaWQgc2V0IGVjaG9Nb2RlKGJvb2wgZW5hYmxlZCk7CgogIC8qKgogICAqIENoZWNrIGlmIGxpbmUgbW9kZSBpcyBlbmFibGVkIG9uIFtzdGRpbl0uCiAgICovCiAgZXh0ZXJuYWwgYm9vbCBnZXQgbGluZU1vZGU7CgogIC8qKgogICAqIEVuYWJsZSBvciBkaXNhYmxlIGxpbmUgbW9kZSBvbiBbc3RkaW5dLgogICAqCiAgICogSWYgZW5hYmxlZCwgY2hhcmFjdGVycyBhcmUgZGVsYXllZCB1bnRpbCBhIG5ldy1saW5lIGNoYXJhY3RlciBpcyBlbnRlcmVkLgogICAqIElmIGRpc2FibGVkLCBjaGFyYWN0ZXJzIHdpbGwgYmUgYXZhaWxhYmxlIGFzIHR5cGVkLgogICAqCiAgICogRGVmYXVsdCBkZXBlbmRzIG9uIHRoZSBwYXJlbnQgcHJvY2VzcywgYnV0IHVzdWFsbHkgZW5hYmxlZC4KICAgKgogICAqIE9uIFdpbmRvd3MgdGhpcyBtb2RlIGNhbiBvbmx5IGJlIGRpc2FibGVkIGlmIFtlY2hvTW9kZV0gaXMgZGlzYWJsZWQgYXMgd2VsbC4KICAgKi8KICBleHRlcm5hbCB2b2lkIHNldCBsaW5lTW9kZShib29sIGVuYWJsZWQpOwoKICAvKioKICAgICogV2hldGhlciBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbCB0aGF0IHN1cHBvcnRzIEFOU0kgZXNjYXBlIHNlcXVlbmNlcy4KICAgICoKICAgICogTm90IGFsbCB0ZXJtaW5hbHMgYXJlIHJlY29nbml6ZWQsIGFuZCBub3QgYWxsIHJlY29nbml6ZWQgdGVybWluYWxzIGNhbgogICAgKiByZXBvcnQgd2hldGhlciB0aGV5IHN1cHBvcnQgQU5TSSBlc2NhcGUgc2VxdWVuY2VzLCBzbyB0aGlzIHZhbHVlIGlzIGEKICAgICogYmVzdC1lZmZvcnQgYXR0ZW1wdCBhdCBkZXRlY3RpbmcgdGhlIHN1cHBvcnQuCiAgICAqCiAgICAqIFRoZSBhY3R1YWwgZXNjYXBlIHNlcXVlbmNlIHN1cHBvcnQgbWF5IGRpZmZlciBiZXR3ZWVuIHRlcm1pbmFscywKICAgICogd2l0aCBzb21lIHRlcm1pbmFscyBzdXBwb3J0aW5nIG1vcmUgZXNjYXBlIHNlcXVlbmNlcyB0aGFuIG90aGVycywKICAgICogYW5kIHNvbWUgdGVybWluYWxzIGV2ZW4gZGlmZmVyaW5nIGluIGJlaGF2aW9yIGZvciB0aGUgc2FtZSBlc2NhcGUKICAgICogc2VxdWVuY2UuCiAgICAqCiAgICAqIFRoZSBBTlNJIGNvbG9yIHNlbGVjdGlvbiBpcyBnZW5lcmFsbHkgc3VwcG9ydGVkLgogICAgKgogICAgKiBDdXJyZW50bHksIGEgYFRFUk1gIGVudmlyb25tZW50IHZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHN0cmluZyBgeHRlcm1gCiAgICAqIHdpbGwgYmUgdGFrZW4gYXMgZXZpZGVuY2UgdGhhdCBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgYXJlIHN1cHBvcnRlZC4KICAgICogT24gV2luZG93cywgb25seSB2ZXJzaW9ucyBvZiBXaW5kb3dzIDEwIGFmdGVyIHYuMTUxMQogICAgKiAoIlRIMiIsIE9TIGJ1aWxkIDEwNTg2KSB3aWxsIGJlIGRldGVjdGVkIGFzIHN1cHBvcnRpbmcgdGhlIG91dHB1dCBvZgogICAgKiBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMsIGFuZCBvbmx5IHZlcnNpb25zIGFmdGVyIHYuMTYwNyAoIkFubml2ZXJzYXJ5CiAgICAqIFVwZGF0ZSIsIE9TIGJ1aWxkIDE0MzkzKSB3aWxsIGJlIGRldGVjdGVkIGFzIHN1cHBvcnRpbmcgdGhlIGlucHV0IG9mCiAgICAqIEFOU0kgZXNjYXBlIHNlcXVlbmNlcy4KICAgICovCiAgZXh0ZXJuYWwgYm9vbCBnZXQgc3VwcG9ydHNBbnNpRXNjYXBlczsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSByZWFkIGEgYnl0ZSBmcm9tIHN0ZGluLiBUaGlzIGNhbGwgd2lsbCBibG9jayB1bnRpbCBhIGJ5dGUgaXMKICAgKiBhdmFpbGFibGUuCiAgICoKICAgKiBJZiBhdCBlbmQgb2YgZmlsZSwgLTEgaXMgcmV0dXJuZWQuCiAgICovCiAgZXh0ZXJuYWwgaW50IHJlYWRCeXRlU3luYygpOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYSB0ZXJtaW5hbCBhdHRhY2hlZCB0byBzdGRpbi4KICAgKi8KICBib29sIGdldCBoYXNUZXJtaW5hbCB7CiAgICB0cnkgewogICAgICByZXR1cm4gc3RkaW9UeXBlKHRoaXMpID09IFN0ZGlvVHlwZS50ZXJtaW5hbDsKICAgIH0gb24gRmlsZVN5c3RlbUV4Y2VwdGlvbiBjYXRjaCAoXykgewogICAgICAvLyBJZiBzdGRpb1R5cGUgdGhyb3dzIGEgRmlsZVN5c3RlbUV4Y2VwdGlvbiwgdGhlbiBpdCBpcyBub3QgaG9va2VkIHVwIHRvCiAgICAgIC8vIGEgdGVybWluYWwsIHByb2JhYmx5IGJlY2F1c2UgaXQgaXMgY2xvc2VkLCBidXQgbGV0IG90aGVyIGV4Y2VwdGlvbgogICAgICAvLyB0eXBlcyBidWJibGUgdXAuCiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCi8qKgogKiBbU3Rkb3V0XSByZXByZXNlbnRzIHRoZSBbSU9TaW5rXSBmb3IgZWl0aGVyIGBzdGRvdXRgIG9yIGBzdGRlcnJgLgogKgogKiBJdCBwcm92aWRlcyBhICpibG9ja2luZyogYElPU2lua2AsIHNvIHVzaW5nIHRoaXMgdG8gd3JpdGUgd2lsbCBibG9jayB1bnRpbAogKiB0aGUgb3V0cHV0IGlzIHdyaXR0ZW4uCiAqCiAqIEluIHNvbWUgc2l0dWF0aW9ucyB0aGlzIGJsb2NraW5nIGJlaGF2aW9yIGlzIHVuZGVzaXJhYmxlIGFzIGl0IGRvZXMgbm90CiAqIHByb3ZpZGUgdGhlIHNhbWUgbm9uLWJsb2NraW5nIGJlaGF2aW9yIGFzIGRhcnQ6aW8gaW4gZ2VuZXJhbCBleHBvc2VzLgogKiBVc2UgdGhlIHByb3BlcnR5IFtub25CbG9ja2luZ10gdG8gZ2V0IGFuIGBJT1NpbmtgIHdoaWNoIGhhcyB0aGUgbm9uLWJsb2NraW5nCiAqIGJlaGF2aW9yLgogKgogKiBUaGlzIGNsYXNzIGNhbiBhbHNvIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBgc3Rkb3V0YCBvciBgc3RkZXJyYCBpcwogKiBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbCBhbmQgcXVlcnkgc29tZSB0ZXJtaW5hbCBwcm9wZXJ0aWVzLgogKgogKiBUaGUgW2FkZEVycm9yXSBBUEkgaXMgaW5oZXJpdGVkIGZyb20gIFtTdHJlYW1TaW5rXSBhbmQgY2FsbGluZyBpdCB3aWxsIHJlc3VsdAogKiBpbiBhbiB1bmhhbmRsZWQgYXN5bmNocm9ub3VzIGVycm9yIHVubGVzcyB0aGVyZSBpcyBhbiBlcnJvciBoYW5kbGVyIG9uCiAqIFtkb25lXS4KICovCmNsYXNzIFN0ZG91dCBleHRlbmRzIF9TdGRTaW5rIGltcGxlbWVudHMgSU9TaW5rIHsKICBmaW5hbCBpbnQgX2ZkOwogIElPU2luayBfbm9uQmxvY2tpbmc7CgogIFN0ZG91dC5fKElPU2luayBzaW5rLCB0aGlzLl9mZCkgOiBzdXBlcihzaW5rKTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGEgdGVybWluYWwgYXR0YWNoZWQgdG8gc3Rkb3V0LgogICAqLwogIGJvb2wgZ2V0IGhhc1Rlcm1pbmFsID0+IF9oYXNUZXJtaW5hbChfZmQpOwoKICAvKioKICAgKiBHZXQgdGhlIG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSB0ZXJtaW5hbC4KICAgKgogICAqIElmIG5vIHRlcm1pbmFsIGlzIGF0dGFjaGVkIHRvIHN0ZG91dCwgYSBbU3Rkb3V0RXhjZXB0aW9uXSBpcyB0aHJvd24uIFNlZQogICAqIFtoYXNUZXJtaW5hbF0gZm9yIG1vcmUgaW5mby4KICAgKi8KICBpbnQgZ2V0IHRlcm1pbmFsQ29sdW1ucyA9PiBfdGVybWluYWxDb2x1bW5zKF9mZCk7CgogIC8qKgogICAqIEdldCB0aGUgbnVtYmVyIG9mIGxpbmVzIG9mIHRoZSB0ZXJtaW5hbC4KICAgKgogICAqIElmIG5vIHRlcm1pbmFsIGlzIGF0dGFjaGVkIHRvIHN0ZG91dCwgYSBbU3Rkb3V0RXhjZXB0aW9uXSBpcyB0aHJvd24uIFNlZQogICAqIFtoYXNUZXJtaW5hbF0gZm9yIG1vcmUgaW5mby4KICAgKi8KICBpbnQgZ2V0IHRlcm1pbmFsTGluZXMgPT4gX3Rlcm1pbmFsTGluZXMoX2ZkKTsKCiAgLyoqCiAgICAqIFdoZXRoZXIgY29ubmVjdGVkIHRvIGEgdGVybWluYWwgdGhhdCBzdXBwb3J0cyBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMuCiAgICAqCiAgICAqIE5vdCBhbGwgdGVybWluYWxzIGFyZSByZWNvZ25pemVkLCBhbmQgbm90IGFsbCByZWNvZ25pemVkIHRlcm1pbmFscyBjYW4KICAgICogcmVwb3J0IHdoZXRoZXIgdGhleSBzdXBwb3J0IEFOU0kgZXNjYXBlIHNlcXVlbmNlcywgc28gdGhpcyB2YWx1ZSBpcyBhCiAgICAqIGJlc3QtZWZmb3J0IGF0dGVtcHQgYXQgZGV0ZWN0aW5nIHRoZSBzdXBwb3J0LgogICAgKgogICAgKiBUaGUgYWN0dWFsIGVzY2FwZSBzZXF1ZW5jZSBzdXBwb3J0IG1heSBkaWZmZXIgYmV0d2VlbiB0ZXJtaW5hbHMsCiAgICAqIHdpdGggc29tZSB0ZXJtaW5hbHMgc3VwcG9ydGluZyBtb3JlIGVzY2FwZSBzZXF1ZW5jZXMgdGhhbiBvdGhlcnMsCiAgICAqIGFuZCBzb21lIHRlcm1pbmFscyBldmVuIGRpZmZlcmluZyBpbiBiZWhhdmlvciBmb3IgdGhlIHNhbWUgZXNjYXBlCiAgICAqIHNlcXVlbmNlLgogICAgKgogICAgKiBUaGUgQU5TSSBjb2xvciBzZWxlY3Rpb24gaXMgZ2VuZXJhbGx5IHN1cHBvcnRlZC4KICAgICoKICAgICogQ3VycmVudGx5LCBhIGBURVJNYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb250YWluaW5nIHRoZSBzdHJpbmcgYHh0ZXJtYAogICAgKiB3aWxsIGJlIHRha2VuIGFzIGV2aWRlbmNlIHRoYXQgQU5TSSBlc2NhcGUgc2VxdWVuY2VzIGFyZSBzdXBwb3J0ZWQuCiAgICAqIE9uIFdpbmRvd3MsIG9ubHkgdmVyc2lvbnMgb2YgV2luZG93cyAxMCBhZnRlciB2LjE1MTEKICAgICogKCJUSDIiLCBPUyBidWlsZCAxMDU4Nikgd2lsbCBiZSBkZXRlY3RlZCBhcyBzdXBwb3J0aW5nIHRoZSBvdXRwdXQgb2YKICAgICogQU5TSSBlc2NhcGUgc2VxdWVuY2VzLCBhbmQgb25seSB2ZXJzaW9ucyBhZnRlciB2LjE2MDcgKCJBbm5pdmVyc2FyeQogICAgKiBVcGRhdGUiLCBPUyBidWlsZCAxNDM5Mykgd2lsbCBiZSBkZXRlY3RlZCBhcyBzdXBwb3J0aW5nIHRoZSBpbnB1dCBvZgogICAgKiBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMuCiAgICAqLwogIGJvb2wgZ2V0IHN1cHBvcnRzQW5zaUVzY2FwZXMgPT4gX3N1cHBvcnRzQW5zaUVzY2FwZXMoX2ZkKTsKCiAgZXh0ZXJuYWwgYm9vbCBfaGFzVGVybWluYWwoaW50IGZkKTsKICBleHRlcm5hbCBpbnQgX3Rlcm1pbmFsQ29sdW1ucyhpbnQgZmQpOwogIGV4dGVybmFsIGludCBfdGVybWluYWxMaW5lcyhpbnQgZmQpOwogIGV4dGVybmFsIHN0YXRpYyBib29sIF9zdXBwb3J0c0Fuc2lFc2NhcGVzKGludCBmZCk7CgogIC8qKgogICAqIEdldCBhIG5vbi1ibG9ja2luZyBgSU9TaW5rYC4KICAgKi8KICBJT1NpbmsgZ2V0IG5vbkJsb2NraW5nIHsKICAgIF9ub25CbG9ja2luZyA/Pz0gbmV3IElPU2luayhuZXcgX0ZpbGVTdHJlYW1Db25zdW1lci5mcm9tU3RkaW8oX2ZkKSk7CiAgICByZXR1cm4gX25vbkJsb2NraW5nOwogIH0KfQoKY2xhc3MgU3Rkb3V0RXhjZXB0aW9uIGltcGxlbWVudHMgSU9FeGNlcHRpb24gewogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwogIGZpbmFsIE9TRXJyb3Igb3NFcnJvcjsKCiAgY29uc3QgU3Rkb3V0RXhjZXB0aW9uKHRoaXMubWVzc2FnZSwgW3RoaXMub3NFcnJvcl0pOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gIlN0ZG91dEV4Y2VwdGlvbjogJG1lc3NhZ2Uke29zRXJyb3IgPT0gbnVsbCA/ICIiIDogIiwgJG9zRXJyb3IifSI7CiAgfQp9CgpjbGFzcyBTdGRpbkV4Y2VwdGlvbiBpbXBsZW1lbnRzIElPRXhjZXB0aW9uIHsKICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKICBmaW5hbCBPU0Vycm9yIG9zRXJyb3I7CgogIGNvbnN0IFN0ZGluRXhjZXB0aW9uKHRoaXMubWVzc2FnZSwgW3RoaXMub3NFcnJvcl0pOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gIlN0ZGluRXhjZXB0aW9uOiAkbWVzc2FnZSR7b3NFcnJvciA9PSBudWxsID8gIiIgOiAiLCAkb3NFcnJvciJ9IjsKICB9Cn0KCmNsYXNzIF9TdGRDb25zdW1lciBpbXBsZW1lbnRzIFN0cmVhbUNvbnN1bWVyPExpc3Q8aW50Pj4gewogIGZpbmFsIF9maWxlOwoKICBfU3RkQ29uc3VtZXIoaW50IGZkKSA6IF9maWxlID0gX0ZpbGUuX29wZW5TdGRpb1N5bmMoZmQpOwoKICBGdXR1cmUgYWRkU3RyZWFtKFN0cmVhbTxMaXN0PGludD4+IHN0cmVhbSkgewogICAgdmFyIGNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXIoKTsKICAgIHZhciBzdWI7CiAgICBzdWIgPSBzdHJlYW0ubGlzdGVuKChkYXRhKSB7CiAgICAgIHRyeSB7CiAgICAgICAgX2ZpbGUud3JpdGVGcm9tU3luYyhkYXRhKTsKICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgIHN1Yi5jYW5jZWwoKTsKICAgICAgICBjb21wbGV0ZXIuY29tcGxldGVFcnJvcihlLCBzKTsKICAgICAgfQogICAgfSwKICAgICAgICBvbkVycm9yOiBjb21wbGV0ZXIuY29tcGxldGVFcnJvciwKICAgICAgICBvbkRvbmU6IGNvbXBsZXRlci5jb21wbGV0ZSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBjb21wbGV0ZXIuZnV0dXJlOwogIH0KCiAgRnV0dXJlIGNsb3NlKCkgewogICAgX2ZpbGUuY2xvc2VTeW5jKCk7CiAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZSgpOwogIH0KfQoKY2xhc3MgX1N0ZFNpbmsgaW1wbGVtZW50cyBJT1NpbmsgewogIGZpbmFsIElPU2luayBfc2luazsKCiAgX1N0ZFNpbmsodGhpcy5fc2luayk7CgogIEVuY29kaW5nIGdldCBlbmNvZGluZyA9PiBfc2luay5lbmNvZGluZzsKICB2b2lkIHNldCBlbmNvZGluZyhFbmNvZGluZyBlbmNvZGluZykgewogICAgX3NpbmsuZW5jb2RpbmcgPSBlbmNvZGluZzsKICB9CgogIHZvaWQgd3JpdGUob2JqZWN0KSB7CiAgICBfc2luay53cml0ZShvYmplY3QpOwogIH0KCiAgdm9pZCB3cml0ZWxuKFtvYmplY3QgPSAiIl0pIHsKICAgIF9zaW5rLndyaXRlbG4ob2JqZWN0KTsKICB9CgogIHZvaWQgd3JpdGVBbGwob2JqZWN0cywgW3NlcCA9ICIiXSkgewogICAgX3Npbmsud3JpdGVBbGwob2JqZWN0cywgc2VwKTsKICB9CgogIHZvaWQgYWRkKExpc3Q8aW50PiBkYXRhKSB7CiAgICBfc2luay5hZGQoZGF0YSk7CiAgfQoKICB2b2lkIGFkZEVycm9yKGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgX3NpbmsuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgdm9pZCB3cml0ZUNoYXJDb2RlKGludCBjaGFyQ29kZSkgewogICAgX3Npbmsud3JpdGVDaGFyQ29kZShjaGFyQ29kZSk7CiAgfQoKICBGdXR1cmUgYWRkU3RyZWFtKFN0cmVhbTxMaXN0PGludD4+IHN0cmVhbSkgPT4gX3NpbmsuYWRkU3RyZWFtKHN0cmVhbSk7CiAgRnV0dXJlIGZsdXNoKCkgPT4gX3NpbmsuZmx1c2goKTsKICBGdXR1cmUgY2xvc2UoKSA9PiBfc2luay5jbG9zZSgpOwogIEZ1dHVyZSBnZXQgZG9uZSA9PiBfc2luay5kb25lOwp9CgovLy8gVGhlIHR5cGUgb2Ygb2JqZWN0IGEgc3RhbmRhcmQgSU8gc3RyZWFtIGlzIGF0dGFjaGVkIHRvLgpjbGFzcyBTdGRpb1R5cGUgewogIHN0YXRpYyBjb25zdCBTdGRpb1R5cGUgdGVybWluYWwgPSBjb25zdCBTdGRpb1R5cGUuXygidGVybWluYWwiKTsKICBzdGF0aWMgY29uc3QgU3RkaW9UeXBlIHBpcGUgPSBjb25zdCBTdGRpb1R5cGUuXygicGlwZSIpOwogIHN0YXRpYyBjb25zdCBTdGRpb1R5cGUgZmlsZSA9IGNvbnN0IFN0ZGlvVHlwZS5fKCJmaWxlIik7CiAgc3RhdGljIGNvbnN0IFN0ZGlvVHlwZSBvdGhlciA9IGNvbnN0IFN0ZGlvVHlwZS5fKCJvdGhlciIpOwoKICBARGVwcmVjYXRlZCgiVXNlIHRlcm1pbmFsIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBTdGRpb1R5cGUgVEVSTUlOQUwgPSB0ZXJtaW5hbDsKICBARGVwcmVjYXRlZCgiVXNlIHBpcGUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFN0ZGlvVHlwZSBQSVBFID0gcGlwZTsKICBARGVwcmVjYXRlZCgiVXNlIGZpbGUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFN0ZGlvVHlwZSBGSUxFID0gZmlsZTsKICBARGVwcmVjYXRlZCgiVXNlIG90aGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBTdGRpb1R5cGUgT1RIRVIgPSBvdGhlcjsKCiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgY29uc3QgU3RkaW9UeXBlLl8odGhpcy5uYW1lKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiU3RkaW9UeXBlOiAkbmFtZSI7Cn0KClN0ZGluIF9zdGRpbjsKU3Rkb3V0IF9zdGRvdXQ7ClN0ZG91dCBfc3RkZXJyOwoKLy8gVGhlc2UgbWF5IGJlIHNldCB0byBkaWZmZXJlbnQgdmFsdWVzIGJ5IHRoZSBlbWJlZGRlciBieSBjYWxsaW5nCi8vIF9zZXRTdGRpb0ZEcyB3aGVuIGluaXRpYWxpemluZyBkYXJ0OmlvLgppbnQgX3N0ZGluRkQgPSAwOwppbnQgX3N0ZG91dEZEID0gMTsKaW50IF9zdGRlcnJGRCA9IDI7CgpAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcsICdjYWxsJykKdm9pZCBfc2V0U3RkaW9GRHMoaW50IHN0ZGluLCBpbnQgc3Rkb3V0LCBpbnQgc3RkZXJyKSB7CiAgX3N0ZGluRkQgPSBzdGRpbjsKICBfc3Rkb3V0RkQgPSBzdGRvdXQ7CiAgX3N0ZGVyckZEID0gc3RkZXJyOwp9CgovLy8gVGhlIHN0YW5kYXJkIGlucHV0IHN0cmVhbSBvZiBkYXRhIHJlYWQgYnkgdGhpcyBwcm9ncmFtLgpTdGRpbiBnZXQgc3RkaW4gewogIF9zdGRpbiA/Pz0gX1N0ZElPVXRpbHMuX2dldFN0ZGlvSW5wdXRTdHJlYW0oX3N0ZGluRkQpOwogIHJldHVybiBfc3RkaW47Cn0KCi8vLyBUaGUgc3RhbmRhcmQgb3V0cHV0IHN0cmVhbSBvZiBkYXRhIHdyaXR0ZW4gYnkgdGhpcyBwcm9ncmFtLgovLy8KLy8vIFRoZSBgYWRkRXJyb3JgIEFQSSBpcyBpbmhlcml0ZWQgZnJvbSAgYFN0cmVhbVNpbmtgIGFuZCBjYWxsaW5nIGl0IHdpbGwKLy8vIHJlc3VsdCBpbiBhbiB1bmhhbmRsZWQgYXN5bmNocm9ub3VzIGVycm9yIHVubGVzcyB0aGVyZSBpcyBhbiBlcnJvciBoYW5kbGVyCi8vLyBvbiBgZG9uZWAuClN0ZG91dCBnZXQgc3Rkb3V0IHsKICBfc3Rkb3V0ID8/PSBfU3RkSU9VdGlscy5fZ2V0U3RkaW9PdXRwdXRTdHJlYW0oX3N0ZG91dEZEKTsKICByZXR1cm4gX3N0ZG91dDsKfQoKLy8vIFRoZSBzdGFuZGFyZCBvdXRwdXQgc3RyZWFtIG9mIGVycm9ycyB3cml0dGVuIGJ5IHRoaXMgcHJvZ3JhbS4KLy8vCi8vLyBUaGUgYGFkZEVycm9yYCBBUEkgaXMgaW5oZXJpdGVkIGZyb20gIGBTdHJlYW1TaW5rYCBhbmQgY2FsbGluZyBpdCB3aWxsCi8vLyByZXN1bHQgaW4gYW4gdW5oYW5kbGVkIGFzeW5jaHJvbm91cyBlcnJvciB1bmxlc3MgdGhlcmUgaXMgYW4gZXJyb3IgaGFuZGxlcgovLy8gb24gYGRvbmVgLgpTdGRvdXQgZ2V0IHN0ZGVyciB7CiAgX3N0ZGVyciA/Pz0gX1N0ZElPVXRpbHMuX2dldFN0ZGlvT3V0cHV0U3RyZWFtKF9zdGRlcnJGRCk7CiAgcmV0dXJuIF9zdGRlcnI7Cn0KCi8vLyBGb3IgYSBzdHJlYW0sIHJldHVybnMgd2hldGhlciBpdCBpcyBhdHRhY2hlZCB0byBhIGZpbGUsIHBpcGUsIHRlcm1pbmFsLCBvcgovLy8gc29tZXRoaW5nIGVsc2UuClN0ZGlvVHlwZSBzdGRpb1R5cGUob2JqZWN0KSB7CiAgaWYgKG9iamVjdCBpcyBfU3RkU3RyZWFtKSB7CiAgICBvYmplY3QgPSBvYmplY3QuX3N0cmVhbTsKICB9IGVsc2UgaWYgKG9iamVjdCA9PSBzdGRvdXQgfHwgb2JqZWN0ID09IHN0ZGVycikgewogICAgaW50IHN0ZGlvZmQgPSBvYmplY3QgPT0gc3Rkb3V0ID8gX3N0ZG91dEZEIDogX3N0ZGVyckZEOwogICAgZmluYWwgdHlwZSA9IF9TdGRJT1V0aWxzLl9nZXRTdGRpb0hhbmRsZVR5cGUoc3RkaW9mZCk7CiAgICBpZiAodHlwZSBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IEZpbGVTeXN0ZW1FeGNlcHRpb24oCiAgICAgICAgICAiRmFpbGVkIHRvIGdldCB0eXBlIG9mIHN0ZGlvIGhhbmRsZSAoZmQgJHN0ZGlvZmQpIiwgIiIsIHR5cGUpOwogICAgfQogICAgc3dpdGNoICh0eXBlKSB7CiAgICAgIGNhc2UgX3N0ZGlvSGFuZGxlVHlwZVRlcm1pbmFsOgogICAgICAgIHJldHVybiBTdGRpb1R5cGUudGVybWluYWw7CiAgICAgIGNhc2UgX3N0ZGlvSGFuZGxlVHlwZVBpcGU6CiAgICAgICAgcmV0dXJuIFN0ZGlvVHlwZS5waXBlOwogICAgICBjYXNlIF9zdGRpb0hhbmRsZVR5cGVGaWxlOgogICAgICAgIHJldHVybiBTdGRpb1R5cGUuZmlsZTsKICAgIH0KICB9CiAgaWYgKG9iamVjdCBpcyBfRmlsZVN0cmVhbSkgewogICAgcmV0dXJuIFN0ZGlvVHlwZS5maWxlOwogIH0KICBpZiAob2JqZWN0IGlzIFNvY2tldCkgewogICAgaW50IHNvY2tldFR5cGUgPSBfU3RkSU9VdGlscy5fc29ja2V0VHlwZShvYmplY3QpOwogICAgaWYgKHNvY2tldFR5cGUgPT0gbnVsbCkgcmV0dXJuIFN0ZGlvVHlwZS5vdGhlcjsKICAgIHN3aXRjaCAoc29ja2V0VHlwZSkgewogICAgICBjYXNlIF9zdGRpb0hhbmRsZVR5cGVUZXJtaW5hbDoKICAgICAgICByZXR1cm4gU3RkaW9UeXBlLnRlcm1pbmFsOwogICAgICBjYXNlIF9zdGRpb0hhbmRsZVR5cGVQaXBlOgogICAgICAgIHJldHVybiBTdGRpb1R5cGUucGlwZTsKICAgICAgY2FzZSBfc3RkaW9IYW5kbGVUeXBlRmlsZToKICAgICAgICByZXR1cm4gU3RkaW9UeXBlLmZpbGU7CiAgICB9CiAgfQogIGlmIChvYmplY3QgaXMgX0lPU2lua0ltcGwpIHsKICAgIHRyeSB7CiAgICAgIGlmIChvYmplY3QuX3RhcmdldCBpcyBfRmlsZVN0cmVhbUNvbnN1bWVyKSB7CiAgICAgICAgcmV0dXJuIFN0ZGlvVHlwZS5maWxlOwogICAgICB9CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIC8vIE9ubHkgdGhlIGludGVyZmFjZSBpbXBsZW1lbnRlZCwgX3Npbmsgbm90IGF2YWlsYWJsZS4KICAgIH0KICB9CiAgcmV0dXJuIFN0ZGlvVHlwZS5vdGhlcjsKfQoKY2xhc3MgX1N0ZElPVXRpbHMgewogIGV4dGVybmFsIHN0YXRpYyBfZ2V0U3RkaW9PdXRwdXRTdHJlYW0oaW50IGZkKTsKICBleHRlcm5hbCBzdGF0aWMgU3RkaW4gX2dldFN0ZGlvSW5wdXRTdHJlYW0oaW50IGZkKTsKCiAgLy8vIFJldHVybnMgdGhlIHNvY2tldCB0eXBlIG9yIGBudWxsYCBpZiBbc29ja2V0XSBpcyBub3QgYSBidWlsdGluIHNvY2tldC4KICBleHRlcm5hbCBzdGF0aWMgaW50IF9zb2NrZXRUeXBlKFNvY2tldCBzb2NrZXQpOwogIGV4dGVybmFsIHN0YXRpYyBfZ2V0U3RkaW9IYW5kbGVUeXBlKGludCBmZCk7Cn0KgesATk48AQ8BEQEuKCQkJiUlAS0jARwBRT8iSQQCAQRMEQM7BD4LAT8BBh0FLAVQTx4FOkAFTlElBUo2OwYXSRMTJEEtNBMaEAsfGBEKGDwaFQgeQxUjGCkRCi0YCA1NDRUjHxoPIykBGiA3ChgpEQoYCAYiBAEGLwYeAQYtBTwFQQVQBiwBBi8GHgEGLQVPOQVBBVIGLAEGSwZNTDQGR0hIEAY3Bk1KO0tKSx0HKQEGUBAFKAYfAQY8BhkKNClQTBoUBgQCAQRFA04aA0tJUA0DSD8DUUoLBDIRFwExAQY9Bi0BBjAFTiIGNAEGLgVOIgYwAQZLBk1MNAZHSEgQBjcGTUo7S0pLHQc9ASYpJzUBBiIGG0kZBAIBLxgZATcBFk4EAgEuGBkBNgEWTQQCAToPATsBLyUNIQwjFxYnCAcqJB4dBAETFx8EAgEjFgEYASspHwQBFxkEASAbBAEnIgQBHRUEATInBAElIwQBSSMjIQIBPBJDOzs9ASYuIiYiJiMoARUgKwIBDhAQAUMrEhMTASI3FBYWAgE8EjkRAgFABEtPDxQ8EgIBQgRLTw8UPBICAU8UHh4dNTw7GyFJBhQlIyEfIR8GBB8bBBo2NBolIyEfIR8GBB8KMx8IEj4GBBoCARQxNgFNMi8CARJkYXJ0OmlvL3N0ZGlvLmRhcnROb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvX2ludGVybmFsL3ZtL2Jpbi9zdGRpb19wYXRjaC5kYXJ0kbYvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vIHBhcnQgb2YgImNvbW1vbl9wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBfU3RkSU9VdGlscyB7CiAgQHBhdGNoCiAgc3RhdGljIFN0ZGluIF9nZXRTdGRpb0lucHV0U3RyZWFtKGludCBmZCkgewogICAgZmluYWwgdHlwZSA9IF9nZXRTdGRpb0hhbmRsZVR5cGUoZmQpOwogICAgaWYgKHR5cGUgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBGaWxlU3lzdGVtRXhjZXB0aW9uKAogICAgICAgICAgIkZhaWxlZCB0byBnZXQgdHlwZSBvZiBzdGRpbyBoYW5kbGUgKGZkICRmZCkiLCAiIiwgdHlwZSk7CiAgICB9CiAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgY2FzZSBfc3RkaW9IYW5kbGVUeXBlVGVybWluYWw6CiAgICAgIGNhc2UgX3N0ZGlvSGFuZGxlVHlwZVBpcGU6CiAgICAgIGNhc2UgX3N0ZGlvSGFuZGxlVHlwZVNvY2tldDoKICAgICAgY2FzZSBfc3RkaW9IYW5kbGVUeXBlT3RoZXI6CiAgICAgICAgcmV0dXJuIG5ldyBTdGRpbi5fKG5ldyBfU29ja2V0Ll9yZWFkUGlwZShmZCksIGZkKTsKICAgICAgY2FzZSBfc3RkaW9IYW5kbGVUeXBlRmlsZToKICAgICAgICByZXR1cm4gbmV3IFN0ZGluLl8obmV3IF9GaWxlU3RyZWFtLmZvclN0ZGluKCksIGZkKTsKICAgIH0KICB9CgogIEBwYXRjaAogIHN0YXRpYyBfZ2V0U3RkaW9PdXRwdXRTdHJlYW0oaW50IGZkKSB7CiAgICBmaW5hbCB0eXBlID0gX2dldFN0ZGlvSGFuZGxlVHlwZShmZCk7CiAgICBpZiAodHlwZSBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IEZpbGVTeXN0ZW1FeGNlcHRpb24oCiAgICAgICAgICAiRmFpbGVkIHRvIGdldCB0eXBlIG9mIHN0ZGlvIGhhbmRsZSAoZmQgJGZkKSIsICIiLCB0eXBlKTsKICAgIH0KICAgIHJldHVybiBuZXcgU3Rkb3V0Ll8obmV3IElPU2luayhuZXcgX1N0ZENvbnN1bWVyKGZkKSksIGZkKTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBpbnQgX3NvY2tldFR5cGUoU29ja2V0IHNvY2tldCkgewogICAgaWYgKHNvY2tldCBpcyBfU29ja2V0KSByZXR1cm4gX25hdGl2ZVNvY2tldFR5cGUoc29ja2V0Ll9uYXRpdmVTb2NrZXQpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBzdGF0aWMgaW50IF9uYXRpdmVTb2NrZXRUeXBlKF9OYXRpdmVTb2NrZXQgbmF0aXZlU29ja2V0KSB7CiAgICB2YXIgcmVzdWx0ID0gX2dldFNvY2tldFR5cGUobmF0aXZlU29ja2V0KTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigiRXJyb3IgcmV0cmlldmluZyBzb2NrZXQgdHlwZSIsICIiLCByZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBfZ2V0U3RkaW9IYW5kbGVUeXBlKGludCBmZCkgbmF0aXZlICJGaWxlX0dldFN0ZGlvSGFuZGxlVHlwZSI7Cn0KCkBwYXRjaApjbGFzcyBTdGRpbiB7CiAgQHBhdGNoCiAgaW50IHJlYWRCeXRlU3luYygpIHsKICAgIHZhciByZXN1bHQgPSBfcmVhZEJ5dGUoX2ZkKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgU3RkaW5FeGNlcHRpb24oIkVycm9yIHJlYWRpbmcgYnl0ZSBmcm9tIHN0ZGluIiwgcmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAcGF0Y2gKICBib29sIGdldCBlY2hvTW9kZSB7CiAgICB2YXIgcmVzdWx0ID0gX2VjaG9Nb2RlKF9mZCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IFN0ZGluRXhjZXB0aW9uKCJFcnJvciBnZXR0aW5nIHRlcm1pbmFsIGVjaG8gbW9kZSIsIHJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQHBhdGNoCiAgdm9pZCBzZXQgZWNob01vZGUoYm9vbCBlbmFibGVkKSB7CiAgICBpZiAoIV9FbWJlZGRlckNvbmZpZy5fbWF5U2V0RWNob01vZGUpIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAiVGhpcyBlbWJlZGRlciBkaXNhbGxvd3Mgc2V0dGluZyBTdGRpbi5lY2hvTW9kZSIpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9zZXRFY2hvTW9kZShfZmQsIGVuYWJsZWQpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBTdGRpbkV4Y2VwdGlvbigiRXJyb3Igc2V0dGluZyB0ZXJtaW5hbCBlY2hvIG1vZGUiLCByZXN1bHQpOwogICAgfQogIH0KCiAgQHBhdGNoCiAgYm9vbCBnZXQgbGluZU1vZGUgewogICAgdmFyIHJlc3VsdCA9IF9saW5lTW9kZShfZmQpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBTdGRpbkV4Y2VwdGlvbigiRXJyb3IgZ2V0dGluZyB0ZXJtaW5hbCBsaW5lIG1vZGUiLCByZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBwYXRjaAogIHZvaWQgc2V0IGxpbmVNb2RlKGJvb2wgZW5hYmxlZCkgewogICAgaWYgKCFfRW1iZWRkZXJDb25maWcuX21heVNldExpbmVNb2RlKSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgIlRoaXMgZW1iZWRkZXIgZGlzYWxsb3dzIHNldHRpbmcgU3RkaW4ubGluZU1vZGUiKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfc2V0TGluZU1vZGUoX2ZkLCBlbmFibGVkKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgU3RkaW5FeGNlcHRpb24oIkVycm9yIHNldHRpbmcgdGVybWluYWwgbGluZSBtb2RlIiwgcmVzdWx0KTsKICAgIH0KICB9CgogIEBwYXRjaAogIGJvb2wgZ2V0IHN1cHBvcnRzQW5zaUVzY2FwZXMgewogICAgdmFyIHJlc3VsdCA9IF9zdXBwb3J0c0Fuc2lFc2NhcGVzKF9mZCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IFN0ZGluRXhjZXB0aW9uKCJFcnJvciBkZXRlcm1pbmluZyBBTlNJIHN1cHBvcnQiLCByZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBfZWNob01vZGUoaW50IGZkKSBuYXRpdmUgIlN0ZGluX0dldEVjaG9Nb2RlIjsKICBzdGF0aWMgX3NldEVjaG9Nb2RlKGludCBmZCwgYm9vbCBlbmFibGVkKSBuYXRpdmUgIlN0ZGluX1NldEVjaG9Nb2RlIjsKICBzdGF0aWMgX2xpbmVNb2RlKGludCBmZCkgbmF0aXZlICJTdGRpbl9HZXRMaW5lTW9kZSI7CiAgc3RhdGljIF9zZXRMaW5lTW9kZShpbnQgZmQsIGJvb2wgZW5hYmxlZCkgbmF0aXZlICJTdGRpbl9TZXRMaW5lTW9kZSI7CiAgc3RhdGljIF9yZWFkQnl0ZShpbnQgZmQpIG5hdGl2ZSAiU3RkaW5fUmVhZEJ5dGUiOwogIHN0YXRpYyBfc3VwcG9ydHNBbnNpRXNjYXBlcyhpbnQgZmQpIG5hdGl2ZSAiU3RkaW5fQW5zaVN1cHBvcnRlZCI7Cn0KCkBwYXRjaApjbGFzcyBTdGRvdXQgewogIEBwYXRjaAogIGJvb2wgX2hhc1Rlcm1pbmFsKGludCBmZCkgewogICAgdHJ5IHsKICAgICAgX3Rlcm1pbmFsU2l6ZShmZCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBjYXRjaCAoXykgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQoKICBAcGF0Y2gKICBpbnQgX3Rlcm1pbmFsQ29sdW1ucyhpbnQgZmQpID0+IF90ZXJtaW5hbFNpemUoZmQpWzBdOwogIEBwYXRjaAogIGludCBfdGVybWluYWxMaW5lcyhpbnQgZmQpID0+IF90ZXJtaW5hbFNpemUoZmQpWzFdOwoKICBzdGF0aWMgTGlzdCBfdGVybWluYWxTaXplKGludCBmZCkgewogICAgdmFyIHNpemUgPSBfZ2V0VGVybWluYWxTaXplKGZkKTsKICAgIGlmIChzaXplIGlzISBMaXN0KSB7CiAgICAgIHRocm93IG5ldyBTdGRvdXRFeGNlcHRpb24oIkNvdWxkIG5vdCBnZXQgdGVybWluYWwgc2l6ZSIsIHNpemUpOwogICAgfQogICAgcmV0dXJuIHNpemU7CiAgfQoKICBzdGF0aWMgX2dldFRlcm1pbmFsU2l6ZShpbnQgZmQpIG5hdGl2ZSAiU3Rkb3V0X0dldFRlcm1pbmFsU2l6ZSI7CgogIEBwYXRjaAogIHN0YXRpYyBib29sIF9zdXBwb3J0c0Fuc2lFc2NhcGVzKGludCBmZCkgewogICAgdmFyIHJlc3VsdCA9IF9nZXRBbnNpU3VwcG9ydGVkKGZkKTsKICAgIGlmIChyZXN1bHQgaXMhIGJvb2wpIHsKICAgICAgdGhyb3cgbmV3IFN0ZG91dEV4Y2VwdGlvbigiRXJyb3IgZGV0ZXJtaW5pbmcgQU5TSSBzdXBwb3J0IiwgcmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgX2dldEFuc2lTdXBwb3J0ZWQoaW50IGZkKSBuYXRpdmUgIlN0ZG91dF9BbnNpU3VwcG9ydGVkIjsKfQoKX2dldFN0ZGlvSGFuZGxlKF9OYXRpdmVTb2NrZXQgc29ja2V0LCBpbnQgbnVtKSBuYXRpdmUgIlNvY2tldF9HZXRTdGRpb0hhbmRsZSI7Cl9nZXRTb2NrZXRUeXBlKF9OYXRpdmVTb2NrZXQgbmF0aXZlU29ja2V0KSBuYXRpdmUgIlNvY2tldF9HZXRUeXBlIjsKgKkATk48AQ8BIAEHFAkuKhshRAYUJSEjIjshPAYEAQkpKhshRAY/BAEJKksRBAE9Lx1RBhMEAQlHAgEHDgkXIR1JBhMEAQkWIR1MBhMEAQkkLCI9Bi0dTAYEAQkWIR1MBhMEAQkkLCI9Bi0dTAYEAQkhLB1KBhMEATdIN0g0RAIBBw8JHgoZExIUBgQBCTgJNgEmJRlGBhEEAUMBCS0oG0sGEwQBQgIBT0QBHmRhcnQ6aW8tcGF0Y2gvc3RkaW9fcGF0Y2guZGFydEdvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9pby9zdHJpbmdfdHJhbnNmb3JtZXIuZGFydI3qLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuaW87CgovLy8gVGhlIGN1cnJlbnQgc3lzdGVtIGVuY29kaW5nLgovLy8KLy8vIFRoaXMgaXMgdXNlZCBmb3IgY29udmVydGluZyBmcm9tIGJ5dGVzIHRvIGFuZCBmcm9tIFN0cmluZ3Mgd2hlbgovLy8gY29tbXVuaWNhdGluZyBvbiBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIuCi8vLwovLy8gT24gV2luZG93cyB0aGlzIHdpbGwgdXNlIHRoZSBjdXJyZW50bHkgYWN0aXZlIGNvZGUgcGFnZSBmb3IgdGhlIGNvbnZlcnNpb24uCi8vLyBPbiBhbGwgb3RoZXIgc3lzdGVtcyBpdCB3aWxsIGFsd2F5cyB1c2UgVVRGLTguCmNvbnN0IFN5c3RlbUVuY29kaW5nIHN5c3RlbUVuY29kaW5nID0gY29uc3QgU3lzdGVtRW5jb2RpbmcoKTsKQERlcHJlY2F0ZWQoIlVzZSBzeXN0ZW1FbmNvZGluZyBpbnN0ZWFkIikKY29uc3QgU3lzdGVtRW5jb2RpbmcgU1lTVEVNX0VOQ09ESU5HID0gY29uc3QgU3lzdGVtRW5jb2RpbmcoKTsKCi8vLyBUaGUgc3lzdGVtIGVuY29kaW5nIGlzIHRoZSBjdXJyZW50IGNvZGUgcGFnZSBvbiBXaW5kb3dzIGFuZCBVVEYtOCBvbiBMaW51eAovLy8gYW5kIE1hYy4KY2xhc3MgU3lzdGVtRW5jb2RpbmcgZXh0ZW5kcyBFbmNvZGluZyB7CiAgLy8vIENyZWF0ZXMgYSBjb25zdCBTeXN0ZW1FbmNvZGluZy4KICAvLy8KICAvLy8gVXNlcnMgc2hvdWxkIHVzZSB0aGUgdG9wLWxldmVsIGNvbnN0YW50LCBbc3lzdGVtRW5jb2RpbmddLgogIGNvbnN0IFN5c3RlbUVuY29kaW5nKCk7CgogIFN0cmluZyBnZXQgbmFtZSA9PiAnc3lzdGVtJzsKCiAgTGlzdDxpbnQ+IGVuY29kZShTdHJpbmcgaW5wdXQpID0+IGVuY29kZXIuY29udmVydChpbnB1dCk7CiAgU3RyaW5nIGRlY29kZShMaXN0PGludD4gZW5jb2RlZCkgPT4gZGVjb2Rlci5jb252ZXJ0KGVuY29kZWQpOwoKICBDb252ZXJ0ZXI8U3RyaW5nLCBMaXN0PGludD4+IGdldCBlbmNvZGVyIHsKICAgIGlmIChQbGF0Zm9ybS5vcGVyYXRpbmdTeXN0ZW0gPT0gIndpbmRvd3MiKSB7CiAgICAgIHJldHVybiBjb25zdCBfV2luZG93c0NvZGVQYWdlRW5jb2RlcigpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGNvbnN0IFV0ZjhFbmNvZGVyKCk7CiAgICB9CiAgfQoKICBDb252ZXJ0ZXI8TGlzdDxpbnQ+LCBTdHJpbmc+IGdldCBkZWNvZGVyIHsKICAgIGlmIChQbGF0Zm9ybS5vcGVyYXRpbmdTeXN0ZW0gPT0gIndpbmRvd3MiKSB7CiAgICAgIHJldHVybiBjb25zdCBfV2luZG93c0NvZGVQYWdlRGVjb2RlcigpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGNvbnN0IFV0ZjhEZWNvZGVyKCk7CiAgICB9CiAgfQp9CgpjbGFzcyBfV2luZG93c0NvZGVQYWdlRW5jb2RlciBleHRlbmRzIENvbnZlcnRlcjxTdHJpbmcsIExpc3Q8aW50Pj4gewogIGNvbnN0IF9XaW5kb3dzQ29kZVBhZ2VFbmNvZGVyKCk7CgogIExpc3Q8aW50PiBjb252ZXJ0KFN0cmluZyBpbnB1dCkgewogICAgTGlzdDxpbnQ+IGVuY29kZWQgPSBfZW5jb2RlU3RyaW5nKGlucHV0KTsKICAgIGlmIChlbmNvZGVkID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBjaGFyYWN0ZXIgZm9yIGVuY29kaW5nIik7CiAgICB9CiAgICByZXR1cm4gZW5jb2RlZDsKICB9CgogIC8qKgogICAqIFN0YXJ0cyBhIGNodW5rZWQgY29udmVyc2lvbi4KICAgKi8KICBTdHJpbmdDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8TGlzdDxpbnQ+PiBzaW5rKSB7CiAgICByZXR1cm4gbmV3IF9XaW5kb3dzQ29kZVBhZ2VFbmNvZGVyU2luayhzaW5rKTsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBMaXN0PGludD4gX2VuY29kZVN0cmluZyhTdHJpbmcgc3RyaW5nKTsKfQoKY2xhc3MgX1dpbmRvd3NDb2RlUGFnZUVuY29kZXJTaW5rIGV4dGVuZHMgU3RyaW5nQ29udmVyc2lvblNpbmtCYXNlIHsKICAvLyBUT0RPKGZsb2l0c2NoKTogcHJvdmlkZSBtb3JlIGVmZmljaWVudCBjb252ZXJzaW9ucyB3aGVuIHRoZSBpbnB1dCBpcwogIC8vIG5vdCBhIFN0cmluZy4KCiAgZmluYWwgU2luazxMaXN0PGludD4+IF9zaW5rOwoKICBfV2luZG93c0NvZGVQYWdlRW5jb2RlclNpbmsodGhpcy5fc2luayk7CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfc2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCBhZGQoU3RyaW5nIHN0cmluZykgewogICAgTGlzdDxpbnQ+IGVuY29kZWQgPSBfV2luZG93c0NvZGVQYWdlRW5jb2Rlci5fZW5jb2RlU3RyaW5nKHN0cmluZyk7CiAgICBpZiAoZW5jb2RlZCA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oIkludmFsaWQgY2hhcmFjdGVyIGZvciBlbmNvZGluZyIpOwogICAgfQogICAgX3NpbmsuYWRkKGVuY29kZWQpOwogIH0KCiAgdm9pZCBhZGRTbGljZShTdHJpbmcgc291cmNlLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBpZiAoc3RhcnQgIT0gMCB8fCBlbmQgIT0gc291cmNlLmxlbmd0aCkgewogICAgICBzb3VyY2UgPSBzb3VyY2Uuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpOwogICAgfQogICAgYWRkKHNvdXJjZSk7CiAgICBpZiAoaXNMYXN0KSBjbG9zZSgpOwogIH0KfQoKY2xhc3MgX1dpbmRvd3NDb2RlUGFnZURlY29kZXIgZXh0ZW5kcyBDb252ZXJ0ZXI8TGlzdDxpbnQ+LCBTdHJpbmc+IHsKICBjb25zdCBfV2luZG93c0NvZGVQYWdlRGVjb2RlcigpOwoKICBTdHJpbmcgY29udmVydChMaXN0PGludD4gaW5wdXQpIHsKICAgIHJldHVybiBfZGVjb2RlQnl0ZXMoaW5wdXQpOwogIH0KCiAgLyoqCiAgICogU3RhcnRzIGEgY2h1bmtlZCBjb252ZXJzaW9uLgogICAqLwogIEJ5dGVDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8U3RyaW5nPiBzaW5rKSB7CiAgICByZXR1cm4gbmV3IF9XaW5kb3dzQ29kZVBhZ2VEZWNvZGVyU2luayhzaW5rKTsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBTdHJpbmcgX2RlY29kZUJ5dGVzKExpc3Q8aW50PiBieXRlcyk7Cn0KCmNsYXNzIF9XaW5kb3dzQ29kZVBhZ2VEZWNvZGVyU2luayBleHRlbmRzIEJ5dGVDb252ZXJzaW9uU2lua0Jhc2UgewogIC8vIFRPRE8oZmxvaXRzY2gpOiBwcm92aWRlIG1vcmUgZWZmaWNpZW50IGNvbnZlcnNpb25zIHdoZW4gdGhlIGlucHV0IGlzCiAgLy8gYSBzbGljZS4KCiAgZmluYWwgU2luazxTdHJpbmc+IF9zaW5rOwoKICBfV2luZG93c0NvZGVQYWdlRGVjb2RlclNpbmsodGhpcy5fc2luayk7CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfc2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGJ5dGVzKSB7CiAgICBfc2luay5hZGQoX1dpbmRvd3NDb2RlUGFnZURlY29kZXIuX2RlY29kZUJ5dGVzKGJ5dGVzKSk7CiAgfQp9CoCGAE5OPAEPAREBIQRELwRQMz4qPwFPDSgmBkEaAR8BPEABLTEuDSIGBAEtMS4NIgYEAgFFIwEkLhtDBhQEAQYiBkYyBAE6AgFFShMBHwErARETBAEcRxtDBhgEAUIuLQYRGQQCAUUjASQgBAEGIgZBMgQBOAIBQ0oOARwBKwEREwQBHjwEAgEfZGFydDppby9zdHJpbmdfdHJhbnNmb3JtZXIuZGFydEBvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9pby9zeW5jX3NvY2tldC5kYXJ0j+IvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5pbzsKCi8qKgogKiBBIGxvdy1sZXZlbCBjbGFzcyBmb3IgY29tbXVuaWNhdGluZyBzeW5jaHJvbm91c2x5IG92ZXIgYSBUQ1Agc29ja2V0LgogKgogKiBXYXJuaW5nOiBbUmF3U3luY2hyb25vdXNTb2NrZXRdIHNob3VsZCBwcm9iYWJseSBvbmx5IGJlIHVzZWQgdG8gY29ubmVjdCB0bwogKiAnbG9jYWxob3N0Jy4gVGhlIG9wZXJhdGlvbnMgYmVsb3cgd2lsbCBibG9jayB0aGUgY2FsbGluZyB0aHJlYWQgdG8gd2FpdCBmb3IKICogYSByZXNwb25zZSBmcm9tIHRoZSBuZXR3b3JrLiBUaGUgdGhyZWFkIGNhbiBwcm9jZXNzIG5vIG90aGVyIGV2ZW50cyB3aGlsZQogKiB3YWl0aW5nIGZvciB0aGVzZSBvcGVyYXRpb25zIHRvIGNvbXBsZXRlLiBbUmF3U3luY2hyb25vdXNTb2NrZXRdIGlzIG5vdAogKiBzdWl0YWJsZSBmb3IgYXBwbGljYXRpb25zIHRoYXQgcmVxdWlyZSBoaWdoIHBlcmZvcm1hbmNlIG9yIGFzeW5jaHJvbm91cyBJL08KICogc3VjaCBhcyBhIHNlcnZlci4gSW5zdGVhZCBzdWNoIGFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoZSBub24tYmxvY2tpbmcKICogc29ja2V0cyBhbmQgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgaW4gdGhlIFNvY2tldCBvciBSYXdTb2NrZXQgY2xhc3Nlcy4KICovCmFic3RyYWN0IGNsYXNzIFJhd1N5bmNocm9ub3VzU29ja2V0IHsKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IHNvY2tldCBjb25uZWN0aW9uIGFuZCByZXR1cm5zIGEgW1Jhd1N5bmNocm9ub3VzU29ja2V0XS4KICAgKgogICAqIFtob3N0XSBjYW4gZWl0aGVyIGJlIGEgW1N0cmluZ10gb3IgYW4gW0ludGVybmV0QWRkcmVzc10uIElmIFtob3N0XSBpcyBhCiAgICogW1N0cmluZ10sIFtjb25uZWN0U3luY10gd2lsbCBwZXJmb3JtIGEgW0ludGVybmV0QWRkcmVzcy5sb29rdXBdIGFuZCB0cnkKICAgKiBhbGwgcmV0dXJuZWQgW0ludGVybmV0QWRkcmVzc11lcywgdW50aWwgY29ubmVjdGVkLiBVbmxlc3MgYQogICAqIGNvbm5lY3Rpb24gd2FzIGVzdGFibGlzaGVkLCB0aGUgZXJyb3IgZnJvbSB0aGUgZmlyc3QgZmFpbGluZyBjb25uZWN0aW9uIGlzCiAgICogcmV0dXJuZWQuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIFJhd1N5bmNocm9ub3VzU29ja2V0IGNvbm5lY3RTeW5jKGhvc3QsIGludCBwb3J0KTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlY2VpdmVkIGFuZCB1bnJlYWQgYnl0ZXMgaW4gdGhlIHNvY2tldCB0aGF0IGNhbiBiZQogICAqIHJlYWQuCiAgICovCiAgaW50IGF2YWlsYWJsZSgpOwoKICAvKioKICAgKiBDbG9zZXMgdGhlIFtSYXdTeW5jaHJvbm91c1NvY2tldF0uCiAgICoKICAgKiBPbmNlIFtjbG9zZVN5bmNdIGhhcyBiZWVuIGNhbGxlZCwgYXR0ZW1wdGluZyB0byBjYWxsIFtyZWFkU3luY10sCiAgICogW3JlYWRJbnRvU3luY10sIFt3cml0ZUZyb21TeW5jXSwgW3JlbW90ZUFkZHJlc3NdLCBhbmQgW3JlbW90ZVBvcnRdIHdpbGwKICAgKiBjYXVzZSBhIFtTb2NrZXRFeGNlcHRpb25dIHRvIGJlIHRocm93bi4KICAgKi8KICB2b2lkIGNsb3NlU3luYygpOwoKICAvKioKICAgKiBSZWFkcyBpbnRvIGFuIGV4aXN0aW5nIFtMaXN0PGludD5dIGZyb20gdGhlIHNvY2tldCBpbnRvIHRoZSByYW5nZToKICAgKiBbW3N0YXJ0XSxbZW5kXSkuCiAgICoKICAgKiBSZWFkcyBpbnRvIGFuIGV4aXN0aW5nIFtMaXN0PGludD5dIGZyb20gdGhlIHNvY2tldC4gSWYgW3N0YXJ0XSBpcyBwcmVzZW50LAogICAqIHRoZSBieXRlcyB3aWxsIGJlIGZpbGxlZCBpbnRvIFtidWZmZXJdIGZyb20gaW5kZXggW3N0YXJ0XSwgb3RoZXJ3aXNlIGluZGV4CiAgICogMC4gSWYgW2VuZF0gaXMgcHJlc2VudCwgW2VuZF0gLSBbc3RhcnRdIGJ5dGVzIHdpbGwgYmUgcmVhZCBpbnRvIFtidWZmZXJdLAogICAqIG90aGVyd2lzZSB1cCB0byBbYnVmZmVyLmxlbmd0aF0uIElmIFtlbmRdID09IFtzdGFydF0sIG5vIGJ5dGVzIGFyZSByZWFkLgogICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkLgogICAqLwogIGludCByZWFkSW50b1N5bmMoTGlzdDxpbnQ+IGJ1ZmZlciwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKTsKCiAgLyoqCiAgICogUmVhZHMgdXAgdG8gW2J5dGVzXSBieXRlcyBmcm9tIHRoZSBzb2NrZXQuCiAgICoKICAgKiBCbG9ja3MgYW5kIHdhaXRzIGZvciBhIHJlc3BvbnNlIG9mIHVwIHRvIGEgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlcwogICAqIHNlbnQgYnkgdGhlIHNvY2tldC4gW2J5dGVzXSBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvCiAgICogYmUgcmVhZC4gUmV0dXJucyB0aGUgbGlzdCBvZiBieXRlcyByZWFkLCB3aGljaCBjb3VsZCBiZSBsZXNzIHRoYW4gdGhlCiAgICogdmFsdWUgc3BlY2lmaWVkIGJ5IFtieXRlc10uCiAgICovCiAgTGlzdDxpbnQ+IHJlYWRTeW5jKGludCBieXRlcyk7CgogIC8qKgogICAqIFNodXRkb3duIGEgc29ja2V0IGluIHRoZSBwcm92aWRlZCBkaXJlY3Rpb24uCiAgICoKICAgKiBDYWxsaW5nIHNodXRkb3duIHdpbGwgbmV2ZXIgdGhyb3cgYW4gZXhjZXB0aW9uIGFuZCBjYWxsaW5nIGl0IHNldmVyYWwgdGltZXMKICAgKiBpcyBzdXBwb3J0ZWQuIElmIGJvdGggW1NvY2tldERpcmVjdGlvbi5SRUNFSVZFXSBhbmQgW1NvY2tldERpcmVjdGlvbi5TRU5EXQogICAqIGRpcmVjdGlvbnMgYXJlIGNsb3NlZCwgdGhlIHNvY2tldCBpcyBjbG9zZWQgY29tcGxldGVseSwgdGhlIHNhbWUgYXMgaWYKICAgKiBbY2xvc2VTeW5jXSBoYXMgYmVlbiBjYWxsZWQuCiAgICovCiAgdm9pZCBzaHV0ZG93bihTb2NrZXREaXJlY3Rpb24gZGlyZWN0aW9uKTsKCiAgLyoqCiAgICogV3JpdGVzIGRhdGEgZnJvbSBhIHNwZWNpZmllZCByYW5nZSBpbiBhIFtMaXN0PGludD5dIHRvIHRoZSBzb2NrZXQuCiAgICoKICAgKiBXcml0ZXMgaW50byB0aGUgc29ja2V0IGZyb20gYSBbTGlzdDxpbnQ+XS4gSWYgW3N0YXJ0XSBpcyBwcmVzZW50LCB0aGUgYnl0ZXMKICAgKiB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHNvY2tldCBzdGFydGluZyBmcm9tIGluZGV4IFtzdGFydF0uIElmIFtzdGFydF0gaXMKICAgKiBub3QgcHJlc2VudCwgdGhlIGJ5dGVzIHdpbGwgYmUgd3JpdHRlbiBzdGFydGluZyBmcm9tIGluZGV4IDAuIElmIFtlbmRdIGlzCiAgICogcHJlc2VudCwgdGhlIFtlbmRdIC0gW3N0YXJ0XSBieXRlcyB3aWxsIGJlIHdyaXR0ZW4gaW50byB0aGUgc29ja2V0IHN0YXJ0aW5nCiAgICogYXQgaW5kZXggW3N0YXJ0XS4gSWYgW2VuZF0gaXMgbm90IHByb3ZpZGVkLCBbYnVmZmVyLmxlbmd0aF0gZWxlbWVudHMgd2lsbAogICAqIGJlIHdyaXR0ZW4gdG8gdGhlIHNvY2tldCBzdGFydGluZyBmcm9tIGluZGV4IFtzdGFydF0uIElmIFtlbmRdID09IFtzdGFydF0sCiAgICogbm90aGluZyBoYXBwZW5zLgogICAqLwogIHZvaWQgd3JpdGVGcm9tU3luYyhMaXN0PGludD4gYnVmZmVyLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pOwoKICAvKioKICAgKiBUaGUgcG9ydCB1c2VkIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIGludCBnZXQgcG9ydDsKCiAgLyoqCiAgICogVGhlIHJlbW90ZSBwb3J0IGNvbm5lY3RlZCB0byBieSB0aGlzIHNvY2tldC4KICAgKi8KICBpbnQgZ2V0IHJlbW90ZVBvcnQ7CgogIC8qKgogICAqIFRoZSBbSW50ZXJuZXRBZGRyZXNzXSB1c2VkIHRvIGNvbm5lY3QgdGhpcyBzb2NrZXQuCiAgICovCiAgSW50ZXJuZXRBZGRyZXNzIGdldCBhZGRyZXNzOwoKICAvKioKICAgKiBUaGUgcmVtb3RlIFtJbnRlcm5ldEFkZHJlc3NdIGNvbm5lY3RlZCB0byBieSB0aGlzIHNvY2tldC4KICAgKi8KICBJbnRlcm5ldEFkZHJlc3MgZ2V0IHJlbW90ZUFkZHJlc3M7Cn0KcQBOTjwBDwERAQRIA05PTUtPS0sEJgZLBU1NQVAPBkQBBk8LBhMBBigFRk0tBhQBBkgWBVBQT04nBkABBjAFSkpLIQYhAQYyBVFQTCIGLAEGSAVRTk9RT1AWBkIBBiMGEAEGMgYWAQY4Bh8BBj8GJQIBGGRhcnQ6aW8vc3luY19zb2NrZXQuZGFydDtvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi93YXNtL3dhc20uZGFydIp2Ly8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgovLy8ge0BjYXRlZ29yeSBWTX0KLy8vIHtAbm9kb2N9CmxpYnJhcnkgZGFydC53YXNtOwoKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwoKLy8gUmVwcmVzZW50cyB0aGUgV0FTTSAzMi1iaXQgaW50IHR5cGUuCmNsYXNzIEludDMyIHt9CgovLyBSZXByZXNlbnRzIHRoZSBXQVNNIDY0LWJpdCBpbnQgdHlwZS4KY2xhc3MgSW50NjQge30KCi8vIFJlcHJlc2VudHMgdGhlIFdBU00gMzItYml0IGZsb2F0IHR5cGUuCmNsYXNzIEZsb2F0IHt9CgovLyBSZXByZXNlbnRzIHRoZSBXQVNNIDY0LWJpdCBmbG9hdCB0eXBlLgpjbGFzcyBEb3VibGUge30KCi8vIFJlcHJlc2VudHMgdGhlIHJldHVybiB0eXBlIG9mIGEgdm9pZCBmdW5jdGlvbiBpbiBXQVNNLgpjbGFzcyBWb2lkIHt9CgovLyBXYXNtTW9kdWxlIGlzIGEgY29tcGlsZWQgbW9kdWxlIHRoYXQgY2FuIGJlIGluc3RhbnRpYXRlZC4KYWJzdHJhY3QgY2xhc3MgV2FzbU1vZHVsZSB7CiAgLy8gQ29tcGlsZSBhIG1vZHVsZS4KICBleHRlcm5hbCBmYWN0b3J5IFdhc21Nb2R1bGUoVWludDhMaXN0IGRhdGEpOwoKICAvLyBJbnN0YW50aWF0ZSB0aGUgbW9kdWxlIHdpdGggdGhlIGdpdmVuIGltcG9ydHMuCiAgV2FzbUluc3RhbmNlIGluc3RhbnRpYXRlKFdhc21JbXBvcnRzIGltcG9ydHMpOwoKICAvLyBEZXNjcmliZXMgdGhlIGltcG9ydHMgYW5kIGV4cG9ydHMgdGhhdCB0aGUgbW9kdWxlIGV4cGVjdHMsIGZvciBkZWJ1Z2dpbmcuCiAgU3RyaW5nIGRlc2NyaWJlKCk7Cn0KCi8vIFdhc21JbXBvcnRzIGhvbGRzIGFsbCB0aGUgaW1wb3J0cyBmb3IgYSBXYXNtSW5zdGFuY2UuCmFic3RyYWN0IGNsYXNzIFdhc21JbXBvcnRzIHsKICAvLyBDcmVhdGUgYW4gaW1wb3J0cyBvYmplY3QuCiAgZXh0ZXJuYWwgZmFjdG9yeSBXYXNtSW1wb3J0cygpOwoKICAvLyBBZGQgYSBnbG9iYWwgdmFyaWFibGUgdG8gdGhlIGltcG9ydHMuCiAgdm9pZCBhZGRHbG9iYWw8VD4oU3RyaW5nIG1vZHVsZU5hbWUsIFN0cmluZyBuYW1lLCBudW0gdmFsdWUsIGJvb2wgbXV0YWJsZSk7CgogIC8vIEFkZCBhIG1lbW9yeSB0byB0aGUgaW1wb3J0cy4KICB2b2lkIGFkZE1lbW9yeShTdHJpbmcgbW9kdWxlTmFtZSwgU3RyaW5nIG5hbWUsIFdhc21NZW1vcnkgbWVtb3J5KTsKCiAgLy8gQWRkIGEgZnVuY3Rpb24gdG8gdGhlIGltcG9ydHMuCiAgdm9pZCBhZGRGdW5jdGlvbjxUIGV4dGVuZHMgRnVuY3Rpb24+KAogICAgICBTdHJpbmcgbW9kdWxlTmFtZSwgU3RyaW5nIG5hbWUsIEZ1bmN0aW9uIGZuKTsKfQoKLy8gV2FzbU1lbW9yeSBpcyBhIHNhbmRib3ggZm9yIGEgV2FzbUluc3RhbmNlIHRvIHJ1biBpbi4KYWJzdHJhY3QgY2xhc3MgV2FzbU1lbW9yeSB7CiAgLy8gQ3JlYXRlIGEgbmV3IG1lbW9yeSB3aXRoIHRoZSBnaXZlbiBudW1iZXIgb2YgaW5pdGlhbCBwYWdlcywgYW5kIG9wdGlvbmFsCiAgLy8gbWF4aW11bSBudW1iZXIgb2YgcGFnZXMuCiAgZXh0ZXJuYWwgZmFjdG9yeSBXYXNtTWVtb3J5KGludCBpbml0aWFsUGFnZXMsIFtpbnQgbWF4UGFnZXNdKTsKCiAgLy8gVGhlIFdBU00gc3BlYyBkZWZpbmVzIHRoZSBwYWdlIHNpemUgYXMgNjRLaUIuCiAgc3RhdGljIGNvbnN0IGludCBrUGFnZVNpemVJbkJ5dGVzID0gNjQgKiAxMDI0OwoKICAvLyBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIG1lbW9yeSBpbiBwYWdlcy4KICBpbnQgZ2V0IGxlbmd0aEluUGFnZXM7CgogIC8vIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgbWVtb3J5IGluIGJ5dGVzLgogIGludCBnZXQgbGVuZ3RoSW5CeXRlczsKCiAgLy8gUmV0dXJucyB0aGUgYnl0ZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCk7CgogIC8vIFNldHMgdGhlIGJ5dGUgYXQgdGhlIGl2ZW4gaW5kZXggdG8gdmFsdWUuCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpOwoKICAvLyBHcm93IHRoZSBtZW1vcnkgYnkgZGVsdGFQYWdlcy4gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJlZm9yZSByZXNpemluZy4KICBpbnQgZ3JvdyhpbnQgZGVsdGFQYWdlcyk7Cn0KCi8vIFdhc21JbnN0YW5jZSBpcyBhbiBpbnN0YW50aWF0ZWQgV2FzbU1vZHVsZS4KYWJzdHJhY3QgY2xhc3MgV2FzbUluc3RhbmNlIHsKICAvLyBGaW5kIGFuIGV4cG9ydGVkIGZ1bmN0aW9uIHdpdGggdGhlIGdpdmVuIHNpZ25hdHVyZS4KICBXYXNtRnVuY3Rpb248VD4gbG9va3VwRnVuY3Rpb248VCBleHRlbmRzIEZ1bmN0aW9uPihTdHJpbmcgbmFtZSk7CgogIC8vIFJldHVybnMgdGhpcyBpbnN0YW5jZXMncyBtZW1vcnkuCiAgV2FzbU1lbW9yeSBnZXQgbWVtb3J5Owp9CgovLyBXYXNtRnVuY3Rpb24gaXMgYSBjYWxsYWJsZSBmdW5jdGlvbiBpbiBhIFdhc21JbnN0YW5jZS4KYWJzdHJhY3QgY2xhc3MgV2FzbUZ1bmN0aW9uPFQgZXh0ZW5kcyBGdW5jdGlvbj4gewogIG51bSBjYWxsKExpc3Q8bnVtPiBhcmdzKTsKfQpfAE5OPAEPARMNEwEaASgPASgPASoPASoQAToOAT0cFy8BNDEBTxUCATkdHyIBK04BIkUBJCg0AgE5HE4eQQEzMQEwGQEwGQEqHgEvKwFRHAIBLx45QwEmGQIBOjIcAgEJZGFydDp3YXNtTW9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL19pbnRlcm5hbC92bS9saWIvd2FzbV9wYXRjaC5kYXJ0klsvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCmltcG9ydCAnZGFydDpfaW50ZXJuYWwnIHNob3cgcGF0Y2g7CmltcG9ydCAiZGFydDpuYXRpdmV3cmFwcGVycyIgc2hvdyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczE7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKCkBwYXRjaApAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIEludDMyIHt9CgpAcGF0Y2gKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBJbnQ2NCB7fQoKQHBhdGNoCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgRmxvYXQge30KCkBwYXRjaApAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIERvdWJsZSB7fQoKQHBhdGNoCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgVm9pZCB7fQoKQHBhdGNoCmNsYXNzIFdhc21Nb2R1bGUgewogIEBwYXRjaAogIGZhY3RvcnkgV2FzbU1vZHVsZShVaW50OExpc3QgZGF0YSkgewogICAgcmV0dXJuIF9OYXRpdmVXYXNtTW9kdWxlKGRhdGEpOwogIH0KfQoKQHBhdGNoCmNsYXNzIFdhc21NZW1vcnkgewogIEBwYXRjaAogIGZhY3RvcnkgV2FzbU1lbW9yeShpbnQgaW5pdGlhbFBhZ2VzLCBbaW50IG1heFBhZ2VzXSkgewogICAgcmV0dXJuIF9OYXRpdmVXYXNtTWVtb3J5KGluaXRpYWxQYWdlcywgbWF4UGFnZXMpOwogIH0KfQoKQHBhdGNoCmNsYXNzIFdhc21JbXBvcnRzIHsKICBAcGF0Y2gKICBmYWN0b3J5IFdhc21JbXBvcnRzKCkgewogICAgcmV0dXJuIF9OYXRpdmVXYXNtSW1wb3J0cygpOwogIH0KfQoKY2xhc3MgX05hdGl2ZVdhc21Nb2R1bGUgZXh0ZW5kcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczEgaW1wbGVtZW50cyBXYXNtTW9kdWxlIHsKICBfTmF0aXZlV2FzbU1vZHVsZShVaW50OExpc3QgZGF0YSkgewogICAgX2luaXQoZGF0YSk7CiAgfQoKICBXYXNtSW5zdGFuY2UgaW5zdGFudGlhdGUoY292YXJpYW50IF9OYXRpdmVXYXNtSW1wb3J0cyBpbXBvcnRzKSB7CiAgICByZXR1cm4gX05hdGl2ZVdhc21JbnN0YW5jZSh0aGlzLCBpbXBvcnRzKTsKICB9CgogIHZvaWQgX2luaXQoVWludDhMaXN0IGRhdGEpIG5hdGl2ZSAnV2FzbV9pbml0TW9kdWxlJzsKICBTdHJpbmcgZGVzY3JpYmUoKSBuYXRpdmUgJ1dhc21fZGVzY3JpYmVNb2R1bGUnOwp9CgpjbGFzcyBfTmF0aXZlV2FzbUltcG9ydHMgZXh0ZW5kcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczEKICAgIGltcGxlbWVudHMgV2FzbUltcG9ydHMgewogIExpc3Q8V2FzbU1lbW9yeT4gX21lbW9yaWVzOwogIExpc3Q8RnVuY3Rpb24+IF9mbnM7CgogIF9OYXRpdmVXYXNtSW1wb3J0cygpCiAgICAgIDogX21lbW9yaWVzID0gW10sCiAgICAgICAgX2ZucyA9IFtdIHsKICAgIF9pbml0KCk7CiAgfQoKICB2b2lkIGFkZE1lbW9yeShTdHJpbmcgbW9kdWxlTmFtZSwgU3RyaW5nIG5hbWUsIFdhc21NZW1vcnkgbWVtb3J5KSB7CiAgICBfbWVtb3JpZXMuYWRkKG1lbW9yeSk7CiAgICBfYWRkTWVtb3J5KG1vZHVsZU5hbWUsIG5hbWUsIG1lbW9yeSk7CiAgfQoKICB2b2lkIGFkZEdsb2JhbDxUPihTdHJpbmcgbW9kdWxlTmFtZSwgU3RyaW5nIG5hbWUsIG51bSB2YWx1ZSwgYm9vbCBtdXRhYmxlKSB7CiAgICBfYWRkR2xvYmFsKG1vZHVsZU5hbWUsIG5hbWUsIHZhbHVlLCBULCBtdXRhYmxlKTsKICB9CgogIHZvaWQgYWRkRnVuY3Rpb248VCBleHRlbmRzIEZ1bmN0aW9uPigKICAgICAgU3RyaW5nIG1vZHVsZU5hbWUsIFN0cmluZyBuYW1lLCBGdW5jdGlvbiBmbikgewogICAgaW50IGlkID0gX2Zucy5sZW5ndGg7CiAgICBfZm5zLmFkZChmbik7CiAgICBfYWRkRnVuY3Rpb24obW9kdWxlTmFtZSwgbmFtZSwgaWQsIFQpOwogIH0KCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHN0YXRpYyBGdW5jdGlvbiBnZXRGdW5jdGlvbihfTmF0aXZlV2FzbUltcG9ydHMgaW1wLCBpbnQgaWQpIHsKICAgIHJldHVybiBpbXAuX2Zuc1tpZF07CiAgfQoKICB2b2lkIF9pbml0KCkgbmF0aXZlICdXYXNtX2luaXRJbXBvcnRzJzsKICB2b2lkIF9hZGRNZW1vcnkoU3RyaW5nIG1vZHVsZU5hbWUsIFN0cmluZyBuYW1lLCBXYXNtTWVtb3J5IG1lbW9yeSkKICAgICAgbmF0aXZlICdXYXNtX2FkZE1lbW9yeUltcG9ydCc7CiAgdm9pZCBfYWRkR2xvYmFsKFN0cmluZyBtb2R1bGVOYW1lLCBTdHJpbmcgbmFtZSwgbnVtIHZhbHVlLCBUeXBlIHR5cGUsCiAgICAgIGJvb2wgbXV0YWJsZSkgbmF0aXZlICdXYXNtX2FkZEdsb2JhbEltcG9ydCc7CiAgdm9pZCBfYWRkRnVuY3Rpb24oU3RyaW5nIG1vZHVsZU5hbWUsIFN0cmluZyBuYW1lLCBpbnQgaWQsIFR5cGUgdHlwZSkKICAgICAgbmF0aXZlICdXYXNtX2FkZEZ1bmN0aW9uSW1wb3J0JzsKfQoKY2xhc3MgX05hdGl2ZVdhc21NZW1vcnkgZXh0ZW5kcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczEgaW1wbGVtZW50cyBXYXNtTWVtb3J5IHsKICBpbnQgX3BhZ2VzOwogIFVpbnQ4TGlzdCBfYnVmZmVyOwoKICBfTmF0aXZlV2FzbU1lbW9yeShpbnQgaW5pdGlhbFBhZ2VzLCBpbnQgbWF4UGFnZXMpIDogX3BhZ2VzID0gaW5pdGlhbFBhZ2VzIHsKICAgIF9idWZmZXIgPSBfaW5pdChpbml0aWFsUGFnZXMsIG1heFBhZ2VzKTsKICB9CgogIF9OYXRpdmVXYXNtTWVtb3J5LmZyb21JbnN0YW5jZShfTmF0aXZlV2FzbUluc3RhbmNlIGluc3QpIHsKICAgIF9idWZmZXIgPSBfaW5pdEZyb21JbnN0YW5jZShpbnN0KTsKICAgIF9wYWdlcyA9IF9nZXRQYWdlcygpOwogIH0KCiAgaW50IGdldCBsZW5ndGhJblBhZ2VzID0+IF9wYWdlczsKICBpbnQgZ2V0IGxlbmd0aEluQnl0ZXMgPT4gX2J1ZmZlci5sZW5ndGhJbkJ5dGVzOwogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpID0+IF9idWZmZXJbaW5kZXhdOwogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBfYnVmZmVyW2luZGV4XSA9IHZhbHVlOwogIH0KCiAgaW50IGdyb3coaW50IGRlbHRhUGFnZXMpIHsKICAgIGludCBvbGRQYWdlcyA9IF9wYWdlczsKICAgIF9idWZmZXIgPSBfZ3JvdyhkZWx0YVBhZ2VzKTsKICAgIF9wYWdlcyArPSBkZWx0YVBhZ2VzOwogICAgcmV0dXJuIG9sZFBhZ2VzOwogIH0KCiAgVWludDhMaXN0IF9pbml0KGludCBpbml0aWFsUGFnZXMsIGludCBtYXhQYWdlcykgbmF0aXZlICdXYXNtX2luaXRNZW1vcnknOwogIFVpbnQ4TGlzdCBfZ3JvdyhpbnQgZGVsdGFQYWdlcykgbmF0aXZlICdXYXNtX2dyb3dNZW1vcnknOwogIFVpbnQ4TGlzdCBfaW5pdEZyb21JbnN0YW5jZShfTmF0aXZlV2FzbUluc3RhbmNlIGluc3QpCiAgICAgIG5hdGl2ZSAnV2FzbV9pbml0TWVtb3J5RnJvbUluc3RhbmNlJzsKICBpbnQgX2dldFBhZ2VzKCkgbmF0aXZlICdXYXNtX2dldE1lbW9yeVBhZ2VzJzsKfQoKY2xhc3MgX05hdGl2ZVdhc21JbnN0YW5jZSBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMQogICAgaW1wbGVtZW50cyBXYXNtSW5zdGFuY2UgewogIF9OYXRpdmVXYXNtTW9kdWxlIF9tb2R1bGU7CiAgX05hdGl2ZVdhc21JbXBvcnRzIF9pbXBvcnRzOwoKICBfTmF0aXZlV2FzbUluc3RhbmNlKF9OYXRpdmVXYXNtTW9kdWxlIG1vZHVsZSwgX05hdGl2ZVdhc21JbXBvcnRzIGltcG9ydHMpCiAgICAgIDogX21vZHVsZSA9IG1vZHVsZSwKICAgICAgICBfaW1wb3J0cyA9IGltcG9ydHMgewogICAgX2luaXQobW9kdWxlLCBpbXBvcnRzKTsKICB9CgogIFdhc21GdW5jdGlvbjxUPiBsb29rdXBGdW5jdGlvbjxUIGV4dGVuZHMgRnVuY3Rpb24+KFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gX05hdGl2ZVdhc21GdW5jdGlvbjxUPih0aGlzLCBuYW1lKTsKICB9CgogIFdhc21NZW1vcnkgZ2V0IG1lbW9yeSB7CiAgICByZXR1cm4gX05hdGl2ZVdhc21NZW1vcnkuZnJvbUluc3RhbmNlKHRoaXMpOwogIH0KCiAgdm9pZCBfaW5pdChfTmF0aXZlV2FzbU1vZHVsZSBtb2R1bGUsIF9OYXRpdmVXYXNtSW1wb3J0cyBpbXBvcnRzKQogICAgICBuYXRpdmUgJ1dhc21faW5pdEluc3RhbmNlJzsKfQoKY2xhc3MgX05hdGl2ZVdhc21GdW5jdGlvbjxUIGV4dGVuZHMgRnVuY3Rpb24+IGV4dGVuZHMgTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MxCiAgICBpbXBsZW1lbnRzIFdhc21GdW5jdGlvbjxUPiB7CiAgX05hdGl2ZVdhc21JbnN0YW5jZSBfaW5zdDsKCiAgX05hdGl2ZVdhc21GdW5jdGlvbihfTmF0aXZlV2FzbUluc3RhbmNlIGluc3QsIFN0cmluZyBuYW1lKSA6IF9pbnN0ID0gaW5zdCB7CiAgICBfaW5pdChpbnN0LCBuYW1lLCBUKTsKICB9CgogIG51bSBjYWxsKExpc3Q8bnVtPiBhcmdzKSB7CiAgICB2YXIgYXJnX2NvcHkgPSBMaXN0PG51bT4uZnJvbShhcmdzLCBncm93YWJsZTogZmFsc2UpOwogICAgcmV0dXJuIF9jYWxsKGFyZ19jb3B5KTsKICB9CgogIHZvaWQgX2luaXQoX05hdGl2ZVdhc21JbnN0YW5jZSBpbnN0LCBTdHJpbmcgbmFtZSwgVHlwZSBmblR5cGUpCiAgICAgIG5hdGl2ZSAnV2FzbV9pbml0RnVuY3Rpb24nOwogIG51bSBfY2FsbChMaXN0PG51bT4gYXJncykgbmF0aXZlICdXYXNtX2NhbGxGdW5jdGlvbic7Cn0KgLgATk48AQ8BJDwaAQcaDwEHGg8BBxoPAQcaEAEHGg4BBxMJJyQEAgEHEwk5NgQCAQcUCRohBAIBUSYRBAFDLwQBNzICATodHhcBFxgUDQQBRhsqBAFPNQQBKDUaEisEARxAGQQBKkUlSDNHJwIBUQ4VAU4tBAE9JxoEASMyMCwcBAEdGyEaFQQBTDw4LDACATseHR8BTBodHAQBRC8EARoxBAFDIgIBTyEdAU4aBAEdOhwEAUEiOAIBH2RhcnQ6d2FzbS1wYXRjaC93YXNtX3BhdGNoLmRhcnRUb3JnLWRhcnRsYW5nLXNkazovLy9mbHV0dGVyL3NoZWxsL3BsYXRmb3JtL2Z1Y2hzaWEvZGFydF9ydW5uZXIvZW1iZWRkZXIvYnVpbHRpbi5kYXJ0hNkvLyBDb3B5cmlnaHQgMjAxMyBUaGUgRmx1dHRlciBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgovLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZ1Y2hzaWFfYnVpbHRpbjsKCmltcG9ydCAnZGFydDphc3luYyc7CmltcG9ydCAnZGFydDppbyc7CmltcG9ydCAnZGFydDpfaW50ZXJuYWwnIHNob3cgVk1MaWJyYXJ5SG9va3M7CgovLyBDb3JlbGliICdwcmludCcgaW1wbGVtZW50YXRpb24uCnZvaWQgX3ByaW50KGFyZykgewogIF9Mb2dnZXIuX3ByaW50U3RyaW5nKGFyZy50b1N0cmluZygpKTsKICB0cnkgewogICAgLy8gSWYgc3Rkb3V0IGlzIGNvbm5lY3RlZCwgcHJpbnQgdG8gaXQgYXMgd2VsbC4KICAgIHN0ZG91dC53cml0ZWxuKGFyZyk7CiAgfSBvbiBGaWxlU3lzdGVtRXhjZXB0aW9uIGNhdGNoIChfKSB7CiAgICAvLyBTb21lIEZ1Y2hzaWEgYXBwbGljYXRpb25zIHdpbGwgbm90IGhhdmUgc3Rkb3V0IGNvbm5lY3RlZC4KICB9Cn0KCmNsYXNzIF9Mb2dnZXIgewogIHN0YXRpYyB2b2lkIF9wcmludFN0cmluZyhTdHJpbmcgcykgbmF0aXZlICJMb2dnZXJfUHJpbnRTdHJpbmciOwp9CgpAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpClN0cmluZyBfcmF3U2NyaXB0OwoKVXJpIF9zY3JpcHRVcmkoKSB7CiAgaWYgKF9yYXdTY3JpcHQuc3RhcnRzV2l0aCgnaHR0cDonKSB8fAogICAgICBfcmF3U2NyaXB0LnN0YXJ0c1dpdGgoJ2h0dHBzOicpIHx8CiAgICAgIF9yYXdTY3JpcHQuc3RhcnRzV2l0aCgnZmlsZTonKSkgewogICAgcmV0dXJuIFVyaS5wYXJzZShfcmF3U2NyaXB0KTsKICB9IGVsc2UgewogICAgcmV0dXJuIFVyaS5iYXNlLnJlc29sdmVVcmkoVXJpLmZpbGUoX3Jhd1NjcmlwdCkpOwogIH0KfQoKdm9pZCBfc2NoZWR1bGVNaWNyb3Rhc2sodm9pZCBjYWxsYmFjaygpKSBuYXRpdmUgIlNjaGVkdWxlTWljcm90YXNrIjsKCkBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKX2dldFNjaGVkdWxlTWljcm90YXNrQ2xvc3VyZSgpID0+IF9zY2hlZHVsZU1pY3JvdGFzazsKCkBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKX3NldHVwSG9va3MoKSB7CiAgVk1MaWJyYXJ5SG9va3MucGxhdGZvcm1TY3JpcHQgPSBfc2NyaXB0VXJpOwp9CgpAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCl9nZXRQcmludENsb3N1cmUoKSA9PiBfcHJpbnQ7CjQAPEoeARkBFRItASMTKAg0GSdBBAIBEEICARoTARMoKSgiCzYEAgFFARo2ARoQLgIBGh4BFGRhcnQ6ZnVjaHNpYS5idWlsdGluUm9yZy1kYXJ0bGFuZy1zZGs6Ly8vZmx1dHRlci9zaGVsbC9wbGF0Zm9ybS9mdWNoc2lhL2RhcnQtcGtnL3ppcmNvbi9saWIvemlyY29uLmRhcnSBXy8vIENvcHlyaWdodCAyMDEzIFRoZSBGbHV0dGVyIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgemlyY29uOwoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnIHNob3cgdXRmODsKaW1wb3J0ICdkYXJ0Om5hdGl2ZXdyYXBwZXJzJzsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwoKcGFydCAnc3JjL2hhbmRsZS5kYXJ0JzsKcGFydCAnc3JjL2hhbmRsZV93YWl0ZXIuZGFydCc7CnBhcnQgJ3NyYy9zeXN0ZW0uZGFydCc7Cg8APEoeARABIR4aARgfGAELZGFydDp6aXJjb25db3JnLWRhcnRsYW5nLXNkazovLy9mbHV0dGVyL3NoZWxsL3BsYXRmb3JtL2Z1Y2hzaWEvZGFydC1wa2cvemlyY29uL2xpYi9zcmMvaGFuZGxlX3dhaXRlci5kYXJ0gisvLyBDb3B5cmlnaHQgMjAxMyBUaGUgRmx1dHRlciBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgovLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIHppcmNvbjsKCi8vIGlnbm9yZV9mb3JfZmlsZTogbmF0aXZlX2Z1bmN0aW9uX2JvZHlfaW5fbm9uX3Nka19jb2RlCi8vIGlnbm9yZV9mb3JfZmlsZTogcHVibGljX21lbWJlcl9hcGlfZG9jcwoKdHlwZWRlZiBBc3luY1dhaXRDYWxsYmFjayA9IHZvaWQgRnVuY3Rpb24oaW50IHN0YXR1cywgaW50IHBlbmRpbmcpOwoKQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQpjbGFzcyBIYW5kbGVXYWl0ZXIgZXh0ZW5kcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczIgewogIC8vIFByaXZhdGUgY29uc3RydWN0b3IuCiAgQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQogIEhhbmRsZVdhaXRlci5fKCk7CgogIHZvaWQgY2FuY2VsKCkgbmF0aXZlICdIYW5kbGVXYWl0ZXJfQ2FuY2VsJzsKfQoVADxKHgEQATkrAUQBGjYaHBQBLgIBImRhcnQ6emlyY29uL3NyYy9oYW5kbGVfd2FpdGVyLmRhcnRWb3JnLWRhcnRsYW5nLXNkazovLy9mbHV0dGVyL3NoZWxsL3BsYXRmb3JtL2Z1Y2hzaWEvZGFydC1wa2cvemlyY29uL2xpYi9zcmMvaGFuZGxlLmRhcnSGMy8vIENvcHlyaWdodCAyMDEzIFRoZSBGbHV0dGVyIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgemlyY29uOwoKLy8gaWdub3JlX2Zvcl9maWxlOiBuYXRpdmVfZnVuY3Rpb25fYm9keV9pbl9ub25fc2RrX2NvZGUKLy8gaWdub3JlX2Zvcl9maWxlOiBwdWJsaWNfbWVtYmVyX2FwaV9kb2NzCgpAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCmNsYXNzIEhhbmRsZSBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMiB7CiAgLy8gTm8gcHVibGljIGNvbnN0cnVjdG9yIC0gdGhpcyBjYW4gb25seSBiZSBjcmVhdGVkIGZyb20gbmF0aXZlIGNvZGUuCiAgQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQogIEhhbmRsZS5fKCk7CgogIC8vIENyZWF0ZSBhbiBpbnZhbGlkIGhhbmRsZSBvYmplY3QuCiAgZmFjdG9yeSBIYW5kbGUuaW52YWxpZCgpIHsKICAgIHJldHVybiBfY3JlYXRlSW52YWxpZCgpOwogIH0KICBzdGF0aWMgSGFuZGxlIF9jcmVhdGVJbnZhbGlkKCkgbmF0aXZlICdIYW5kbGVfQ3JlYXRlSW52YWxpZCc7CgogIGludCBnZXQgX2hhbmRsZSBuYXRpdmUgJ0hhbmRsZV9oYW5kbGUnOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnSGFuZGxlKCRfaGFuZGxlKSc7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSA9PgogICAgICAob3RoZXIgaXMgSGFuZGxlKSAmJiAoX2hhbmRsZSA9PSBvdGhlci5faGFuZGxlKTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBfaGFuZGxlLmhhc2hDb2RlOwoKICAvLyBDb21tb24gaGFuZGxlIG9wZXJhdGlvbnMuCiAgYm9vbCBnZXQgaXNWYWxpZCBuYXRpdmUgJ0hhbmRsZV9pc192YWxpZCc7CiAgaW50IGNsb3NlKCkgbmF0aXZlICdIYW5kbGVfQ2xvc2UnOwogIEhhbmRsZVdhaXRlciBhc3luY1dhaXQoaW50IHNpZ25hbHMsIEFzeW5jV2FpdENhbGxiYWNrIGNhbGxiYWNrKQogICAgICBuYXRpdmUgJ0hhbmRsZV9Bc3luY1dhaXQnOwoKICBIYW5kbGUgZHVwbGljYXRlKGludCByaWdodHMpIG5hdGl2ZSAnSGFuZGxlX0R1cGxpY2F0ZSc7Cn0KCkBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKY2xhc3MgX09uV2FpdENvbXBsZXRlQ2xvc3VyZSB7ICAvLyBpZ25vcmU6IHVudXNlZF9lbGVtZW50CiAgLy8gTm8gcHVibGljIGNvbnN0cnVjdG9yIC0gdGhpcyBjYW4gb25seSBiZSBjcmVhdGVkIGZyb20gbmF0aXZlIGNvZGUuCiAgQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQogIF9PbldhaXRDb21wbGV0ZUNsb3N1cmUodGhpcy5fY2FsbGJhY2ssIHRoaXMuX2FyZzEsIHRoaXMuX2FyZzIpOwoKICBGdW5jdGlvbiBfY2FsbGJhY2s7CiAgT2JqZWN0IF9hcmcxOwogIE9iamVjdCBfYXJnMjsKCiAgQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQogIEZ1bmN0aW9uIGdldCBfY2xvc3VyZSA9PiAoKSA9PiBfY2FsbGJhY2soX2FyZzEsIF9hcmcyKTsgLy8gaWdub3JlOiB1bnVzZWRfZWxlbWVudAp9CjkAPEoeARABOSsBGjBIHA4BJh0dBEABKgEMKwEMJDcBDCgBHy0lQiEBOgIBGjpIHEIBFhAQARxUAgEbZGFydDp6aXJjb24vc3JjL2hhbmRsZS5kYXJ0Vm9yZy1kYXJ0bGFuZy1zZGs6Ly8vZmx1dHRlci9zaGVsbC9wbGF0Zm9ybS9mdWNoc2lhL2RhcnQtcGtnL3ppcmNvbi9saWIvc3JjL3N5c3RlbS5kYXJ0lOEvLyBDb3B5cmlnaHQgMjAxMyBUaGUgRmx1dHRlciBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgovLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIHppcmNvbjsKCi8vIGlnbm9yZV9mb3JfZmlsZTogbmF0aXZlX2Z1bmN0aW9uX2JvZHlfaW5fbm9uX3Nka19jb2RlCi8vIGlnbm9yZV9mb3JfZmlsZTogcHVibGljX21lbWJlcl9hcGlfZG9jcwoKQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQpjbGFzcyBfTmFtZXNwYWNlIHsgLy8gaWdub3JlOiB1bnVzZWRfZWxlbWVudAogIC8vIE5vIHB1YmxpYyBjb25zdHJ1Y3RvciAtIHRoaXMgb25seSBoYXMgc3RhdGljIG1ldGhvZHMuCiAgX05hbWVzcGFjZS5fKCk7CgogIC8vIExpYnJhcnkgcHJpdmF0ZSB2YXJpYWJsZSBzZXQgYnkgdGhlIGVtYmVkZGVyIHVzZWQgdG8gY2FjaGUgdGhlCiAgLy8gbmFtZXNwYWNlIChhcyBhbiBmZGlvX25zX3QqKS4KICBAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCiAgc3RhdGljIGludCBfbmFtZXNwYWNlOyAvLyBpZ25vcmU6IHVudXNlZF9maWVsZAp9CgovLy8gQW4gZXhjZXB0aW9uIHJlcHJlc2VudGluZyBhbiBlcnJvciByZXR1cm5lZCBhcyBhbiB6eF9zdGF0dXNfdC4KY2xhc3MgWnhTdGF0dXNFeGNlcHRpb24gaW1wbGVtZW50cyBFeGNlcHRpb24gewogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwogIGZpbmFsIGludCBzdGF0dXM7CgogIFp4U3RhdHVzRXhjZXB0aW9uKHRoaXMuc3RhdHVzLCBbdGhpcy5tZXNzYWdlXSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmIChtZXNzYWdlID09IG51bGwpCiAgICAgIHJldHVybiAnWnhTdGF0dXNFeGNlcHRpb246IHN0YXR1cyA9ICRzdGF0dXMnOwogICAgZWxzZQogICAgICByZXR1cm4gJ1p4U3RhdHVzRXhjZXB0aW9uOiBzdGF0dXMgPSAkc3RhdHVzLCAiJG1lc3NhZ2UiJzsKICB9Cn0KCmNsYXNzIF9SZXN1bHQgewogIGZpbmFsIGludCBzdGF0dXM7CiAgY29uc3QgX1Jlc3VsdCh0aGlzLnN0YXR1cyk7Cn0KCkBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKY2xhc3MgSGFuZGxlUmVzdWx0IGV4dGVuZHMgX1Jlc3VsdCB7CiAgZmluYWwgSGFuZGxlIGhhbmRsZTsKICBAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCiAgY29uc3QgSGFuZGxlUmVzdWx0KGZpbmFsIGludCBzdGF0dXMsIFt0aGlzLmhhbmRsZV0pIDogc3VwZXIoc3RhdHVzKTsKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnSGFuZGxlUmVzdWx0KHN0YXR1cz0kc3RhdHVzLCBoYW5kbGU9JGhhbmRsZSknOwp9CgpAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCmNsYXNzIEhhbmRsZVBhaXJSZXN1bHQgZXh0ZW5kcyBfUmVzdWx0IHsKICBmaW5hbCBIYW5kbGUgZmlyc3Q7CiAgZmluYWwgSGFuZGxlIHNlY29uZDsKICBAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCiAgY29uc3QgSGFuZGxlUGFpclJlc3VsdChmaW5hbCBpbnQgc3RhdHVzLCBbdGhpcy5maXJzdCwgdGhpcy5zZWNvbmRdKQogICAgICA6IHN1cGVyKHN0YXR1cyk7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJ0hhbmRsZVBhaXJSZXN1bHQoc3RhdHVzPSRzdGF0dXMsIGZpcnN0PSRmaXJzdCwgc2Vjb25kPSRzZWNvbmQpJzsKfQoKQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQpjbGFzcyBSZWFkUmVzdWx0IGV4dGVuZHMgX1Jlc3VsdCB7CiAgZmluYWwgQnl0ZURhdGEgYnl0ZXM7CiAgZmluYWwgaW50IG51bUJ5dGVzOwogIGZpbmFsIExpc3Q8SGFuZGxlPiBoYW5kbGVzOwogIEBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKICBjb25zdCBSZWFkUmVzdWx0KGZpbmFsIGludCBzdGF0dXMsIFt0aGlzLmJ5dGVzLCB0aGlzLm51bUJ5dGVzLCB0aGlzLmhhbmRsZXNdKQogICAgICA6IHN1cGVyKHN0YXR1cyk7CiAgVWludDhMaXN0IGJ5dGVzQXNVaW50OExpc3QoKSA9PgogICAgICBieXRlcy5idWZmZXIuYXNVaW50OExpc3QoYnl0ZXMub2Zmc2V0SW5CeXRlcywgbnVtQnl0ZXMpOwogIFN0cmluZyBieXRlc0FzVVRGOFN0cmluZygpID0+IHV0ZjguZGVjb2RlKGJ5dGVzQXNVaW50OExpc3QoKSk7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJ1JlYWRSZXN1bHQoc3RhdHVzPSRzdGF0dXMsIGJ5dGVzPSRieXRlcywgbnVtQnl0ZXM9JG51bUJ5dGVzLCBoYW5kbGVzPSRoYW5kbGVzKSc7Cn0KCkBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKY2xhc3MgV3JpdGVSZXN1bHQgZXh0ZW5kcyBfUmVzdWx0IHsKICBmaW5hbCBpbnQgbnVtQnl0ZXM7CiAgQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQogIGNvbnN0IFdyaXRlUmVzdWx0KGZpbmFsIGludCBzdGF0dXMsIFt0aGlzLm51bUJ5dGVzXSkgOiBzdXBlcihzdGF0dXMpOwogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdXcml0ZVJlc3VsdChzdGF0dXM9JHN0YXR1cywgbnVtQnl0ZXM9JG51bUJ5dGVzKSc7Cn0KCkBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKY2xhc3MgR2V0U2l6ZVJlc3VsdCBleHRlbmRzIF9SZXN1bHQgewogIGZpbmFsIGludCBzaXplOwogIEBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKICBjb25zdCBHZXRTaXplUmVzdWx0KGZpbmFsIGludCBzdGF0dXMsIFt0aGlzLnNpemVdKSA6IHN1cGVyKHN0YXR1cyk7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0dldFNpemVSZXN1bHQoc3RhdHVzPSRzdGF0dXMsIHNpemU9JHNpemUpJzsKfQoKQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQpjbGFzcyBGcm9tRmlsZVJlc3VsdCBleHRlbmRzIF9SZXN1bHQgewogIGZpbmFsIEhhbmRsZSBoYW5kbGU7CiAgZmluYWwgaW50IG51bUJ5dGVzOwogIEBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKICBjb25zdCBGcm9tRmlsZVJlc3VsdChmaW5hbCBpbnQgc3RhdHVzLCBbdGhpcy5oYW5kbGUsIHRoaXMubnVtQnl0ZXNdKQogICAgICA6IHN1cGVyKHN0YXR1cyk7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJ0Zyb21GaWxlUmVzdWx0KHN0YXR1cz0kc3RhdHVzLCBoYW5kbGU9JGhhbmRsZSwgbnVtQnl0ZXM9JG51bUJ5dGVzKSc7Cn0KCkBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKY2xhc3MgTWFwUmVzdWx0IGV4dGVuZHMgX1Jlc3VsdCB7CiAgZmluYWwgVWludDhMaXN0IGRhdGE7CiAgQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQogIGNvbnN0IE1hcFJlc3VsdChmaW5hbCBpbnQgc3RhdHVzLCBbdGhpcy5kYXRhXSkgOiBzdXBlcihzdGF0dXMpOwogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdNYXBSZXN1bHQoc3RhdHVzPSRzdGF0dXMsIGRhdGE9JGRhdGEpJzsKfQoKQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQpjbGFzcyBTeXN0ZW0gZXh0ZW5kcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczIgewogIC8vIE5vIHB1YmxpYyBjb25zdHJ1Y3RvciAtIHRoaXMgb25seSBoYXMgc3RhdGljIG1ldGhvZHMuCiAgU3lzdGVtLl8oKTsKCiAgLy8gQ2hhbm5lbCBvcGVyYXRpb25zLgogIHN0YXRpYyBIYW5kbGVQYWlyUmVzdWx0IGNoYW5uZWxDcmVhdGUoW2ludCBvcHRpb25zID0gMF0pCiAgICAgIG5hdGl2ZSAnU3lzdGVtX0NoYW5uZWxDcmVhdGUnOwogIHN0YXRpYyBIYW5kbGVSZXN1bHQgY2hhbm5lbEZyb21GaWxlKFN0cmluZyBwYXRoKQogICAgICBuYXRpdmUgJ1N5c3RlbV9DaGFubmVsRnJvbUZpbGUnOwogIHN0YXRpYyBpbnQgY29ubmVjdFRvU2VydmljZShTdHJpbmcgcGF0aCwgSGFuZGxlIGNoYW5uZWwpCiAgICBuYXRpdmUgJ1N5c3RlbV9Db25uZWN0VG9TZXJ2aWNlJzsKICBzdGF0aWMgaW50IGNoYW5uZWxXcml0ZShIYW5kbGUgY2hhbm5lbCwgQnl0ZURhdGEgZGF0YSwgTGlzdDxIYW5kbGU+IGhhbmRsZXMpCiAgICAgIG5hdGl2ZSAnU3lzdGVtX0NoYW5uZWxXcml0ZSc7CiAgc3RhdGljIFJlYWRSZXN1bHQgY2hhbm5lbFF1ZXJ5QW5kUmVhZChIYW5kbGUgY2hhbm5lbCkKICAgICAgbmF0aXZlICdTeXN0ZW1fQ2hhbm5lbFF1ZXJ5QW5kUmVhZCc7CgogIC8vIEV2ZW50cGFpciBvcGVyYXRpb25zLgogIHN0YXRpYyBIYW5kbGVQYWlyUmVzdWx0IGV2ZW50cGFpckNyZWF0ZShbaW50IG9wdGlvbnMgPSAwXSkKICAgICAgbmF0aXZlICdTeXN0ZW1fRXZlbnRwYWlyQ3JlYXRlJzsKCiAgLy8gU29ja2V0IG9wZXJhdGlvbnMuCiAgc3RhdGljIEhhbmRsZVBhaXJSZXN1bHQgc29ja2V0Q3JlYXRlKFtpbnQgb3B0aW9ucyA9IDBdKQogICAgICBuYXRpdmUgJ1N5c3RlbV9Tb2NrZXRDcmVhdGUnOwogIHN0YXRpYyBXcml0ZVJlc3VsdCBzb2NrZXRXcml0ZShIYW5kbGUgc29ja2V0LCBCeXRlRGF0YSBkYXRhLCBpbnQgb3B0aW9ucykKICAgICAgbmF0aXZlICdTeXN0ZW1fU29ja2V0V3JpdGUnOwogIHN0YXRpYyBSZWFkUmVzdWx0IHNvY2tldFJlYWQoSGFuZGxlIHNvY2tldCwgaW50IHNpemUpCiAgICAgIG5hdGl2ZSAnU3lzdGVtX1NvY2tldFJlYWQnOwoKICAvLyBWbW8gb3BlcmF0aW9ucy4KICBzdGF0aWMgSGFuZGxlUmVzdWx0IHZtb0NyZWF0ZShpbnQgc2l6ZSwgW2ludCBvcHRpb25zID0gMF0pCiAgICAgIG5hdGl2ZSAnU3lzdGVtX1Ztb0NyZWF0ZSc7CiAgc3RhdGljIEZyb21GaWxlUmVzdWx0IHZtb0Zyb21GaWxlKFN0cmluZyBwYXRoKSBuYXRpdmUgJ1N5c3RlbV9WbW9Gcm9tRmlsZSc7CiAgc3RhdGljIEdldFNpemVSZXN1bHQgdm1vR2V0U2l6ZShIYW5kbGUgdm1vKSBuYXRpdmUgJ1N5c3RlbV9WbW9HZXRTaXplJzsKICBzdGF0aWMgaW50IHZtb1NldFNpemUoSGFuZGxlIHZtbywgaW50IHNpemUpIG5hdGl2ZSAnU3lzdGVtX1Ztb1NldFNpemUnOwogIHN0YXRpYyBpbnQgdm1vV3JpdGUoSGFuZGxlIHZtbywgaW50IG9mZnNldCwgQnl0ZURhdGEgYnl0ZXMpCiAgICAgIG5hdGl2ZSAnU3lzdGVtX1Ztb1dyaXRlJzsKICBzdGF0aWMgUmVhZFJlc3VsdCB2bW9SZWFkKEhhbmRsZSB2bW8sIGludCBvZmZzZXQsIGludCBzaXplKQogICAgICBuYXRpdmUgJ1N5c3RlbV9WbW9SZWFkJzsKICBzdGF0aWMgTWFwUmVzdWx0IHZtb01hcChIYW5kbGUgdm1vKSBuYXRpdmUgJ1N5c3RlbV9WbW9NYXAnOwoKICAvLyBUaW1lIG9wZXJhdGlvbnMuCiAgc3RhdGljIGludCBjbG9ja0dldChpbnQgY2xvY2tJZCkgbmF0aXZlICdTeXN0ZW1fQ2xvY2tHZXQnOwoKICAvLyBUT0RPKGVkY295bmUpOiBSZW1vdmUgdGhpcywgaXQgaXMgcmVxdWlyZWQgdG8gc2FmZWx5IGRvIGFuIEFQSSB0cmFuc2l0aW9uIGFjcm9zcyByZXBvcy4KICBzdGF0aWMgaW50IHJlYm9vdCgpIHsgcmV0dXJuIC0yOyAvKlpYX0VSUl9OT1RfU1VQUE9SVEVEKi8gfQp9CoCmADxKHgEQATkrARotOxIBRCMcMQIBQy8YFAEyAQwWGTQJQAQCARAUHgIBGiUXHEcMRwIBGikWFxxGFwwXSAIBGiMYFh4cUBciP0EMF1gCARokFhxIDEoCARomEhxGDEQCARonFxYcRxcMF0wCARoiGBxCDEACARowOw4BGTslMyc7Jk8kOCsBGz0nARg6JEwjOCIBFT0hTkpKPiA+Hz4BFj0BXT4CARtkYXJ0OnppcmNvbi9zcmMvc3lzdGVtLmRhcnRUb3JnLWRhcnRsYW5nLXNkazovLy9mbHV0dGVyL3NoZWxsL3BsYXRmb3JtL2Z1Y2hzaWEvZGFydC1wa2cvZnVjaHNpYS9saWIvZnVjaHNpYS5kYXJ0h0cvLyBDb3B5cmlnaHQgMjAxMyBUaGUgRmx1dHRlciBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgovLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZ1Y2hzaWE7CgppbXBvcnQgJ2RhcnQ6aW8nOwppbXBvcnQgJ2RhcnQ6aXNvbGF0ZSc7CmltcG9ydCAnZGFydDp6aXJjb24nOwoKLy8gaWdub3JlX2Zvcl9maWxlOiBuYXRpdmVfZnVuY3Rpb25fYm9keV9pbl9ub25fc2RrX2NvZGUKLy8gaWdub3JlX2Zvcl9maWxlOiBwdWJsaWNfbWVtYmVyX2FwaV9kb2NzCgovLyBUT0RPOiByZWZhY3RvcnMgdGhpcyBpbmNvbWluZ1NlcnZpY2VzIGluc3RlYWQKQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQpIYW5kbGUgX2Vudmlyb25tZW50OwoKQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQpIYW5kbGUgX291dGdvaW5nU2VydmljZXM7CgpAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCkhhbmRsZSBfdmlld1JlZjsKCmNsYXNzIE14U3RhcnR1cEluZm8gewogIC8vIFRPRE86IHJlZmFjdG9yIEhhbmRsZSB0byBhIENoYW5uZWwKICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmx1dHRlci9mbHV0dGVyL2lzc3Vlcy80OTQzOQogIHN0YXRpYyBIYW5kbGUgdGFrZUVudmlyb25tZW50KCkgewogICAgaWYgKF9vdXRnb2luZ1NlcnZpY2VzID09IG51bGwgJiYgUGxhdGZvcm0uaXNGdWNoc2lhKSB7CiAgICAgIHRocm93IEV4Y2VwdGlvbigKICAgICAgICAgICdBdHRlbXB0aW5nIHRvIGNhbGwgdGFrZUVudmlyb25tZW50IG1vcmUgdGhhbiBvbmNlIHBlciBwcm9jZXNzJyk7CiAgICB9CiAgICBIYW5kbGUgaGFuZGxlID0gX2Vudmlyb25tZW50OwogICAgX2Vudmlyb25tZW50ID0gbnVsbDsKICAgIHJldHVybiBoYW5kbGU7CiAgfQoKICAvLyBUT0RPOiByZWZhY3RvciBIYW5kbGUgdG8gYSBDaGFubmVsCiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZsdXR0ZXIvZmx1dHRlci9pc3N1ZXMvNDk0MzkKICBzdGF0aWMgSGFuZGxlIHRha2VPdXRnb2luZ1NlcnZpY2VzKCkgewogICAgaWYgKF9vdXRnb2luZ1NlcnZpY2VzID09IG51bGwgJiYgUGxhdGZvcm0uaXNGdWNoc2lhKSB7CiAgICAgIHRocm93IEV4Y2VwdGlvbigKICAgICAgICAgICdBdHRlbXB0aW5nIHRvIGNhbGwgdGFrZU91dGdvaW5nU2VydmljZXMgbW9yZSB0aGFuIG9uY2UgcGVyIHByb2Nlc3MnKTsKICAgIH0KICAgIEhhbmRsZSBoYW5kbGUgPSBfb3V0Z29pbmdTZXJ2aWNlczsKICAgIF9vdXRnb2luZ1NlcnZpY2VzID0gbnVsbDsKICAgIHJldHVybiBoYW5kbGU7CiAgfQoKICAvLyBUT0RPOiByZWZhY3RvciBIYW5kbGUgdG8gYSBWaWV3UmVmCiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZsdXR0ZXIvZmx1dHRlci9pc3N1ZXMvNDk0MzkKICBzdGF0aWMgSGFuZGxlIHRha2VWaWV3UmVmKCkgewogICAgaWYgKF92aWV3UmVmID09IG51bGwgJiYgUGxhdGZvcm0uaXNGdWNoc2lhKSB7CiAgICAgIHRocm93IEV4Y2VwdGlvbigKICAgICAgICAgICdBdHRlbXB0aW5nIHRvIGNhbGwgdGFrZVZpZXdSZWYgbW9yZSB0aGFuIG9uY2UgcGVyIHByb2Nlc3MnKTsKICAgIH0KICAgIEhhbmRsZSBoYW5kbGUgPSBfdmlld1JlZjsKICAgIF92aWV3UmVmID0gbnVsbDsKICAgIHJldHVybiBoYW5kbGU7CiAgfQp9Cgp2b2lkIF9zZXRSZXR1cm5Db2RlKGludCByZXR1cm5Db2RlKSBuYXRpdmUgJ1NldFJldHVybkNvZGUnOwoKdm9pZCBleGl0KGludCByZXR1cm5Db2RlKSB7CiAgX3NldFJldHVybkNvZGUocmV0dXJuQ29kZSk7CiAgSXNvbGF0ZS5jdXJyZW50LmtpbGwocHJpb3JpdHk6IElzb2xhdGUuaW1tZWRpYXRlKTsKfQpFADxKHgERARIXFgE5KwExGhUBGhoBGhEBFig1JDsXTAYiGRMEASg1KTsXUQYnHhMEASg1IDIXSAYeFRMEAgE8ARweNQIBDGRhcnQ6ZnVjaHNpYU9vcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vYmluL3Ztc2VydmljZV9pby5kYXJ0neIvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCmxpYnJhcnkgdm1zZXJ2aWNlX2lvOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CmltcG9ydCAnZGFydDppbyc7CmltcG9ydCAnZGFydDppc29sYXRlJzsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwppbXBvcnQgJ2RhcnQ6X3Ztc2VydmljZSc7CgpwYXJ0ICd2bXNlcnZpY2Vfc2VydmVyLmRhcnQnOwoKLy8gVGhlIFRDUCBpcC9wb3J0IHRoYXQgdGhlIEhUVFAgc2VydmVyIGxpc3RlbnMgb24uCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKaW50IF9wb3J0OwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpClN0cmluZyBfaXA7Ci8vIFNob3VsZCB0aGUgSFRUUCBzZXJ2ZXIgYXV0byBzdGFydD8KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpib29sIF9hdXRvU3RhcnQ7Ci8vIFNob3VsZCB0aGUgSFRUUCBzZXJ2ZXIgcmVxdWlyZSBhbiBhdXRoIGNvZGU/CkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKYm9vbCBfYXV0aENvZGVzRGlzYWJsZWQ7Ci8vIFNob3VsZCB0aGUgSFRUUCBzZXJ2ZXIgcnVuIGluIGRldm1vZGU/CkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKYm9vbCBfb3JpZ2luQ2hlY2tEaXNhYmxlZDsKLy8gTG9jYXRpb24gb2YgZmlsZSB0byBvdXRwdXQgVk0gc2VydmljZSBjb25uZWN0aW9uIGluZm8uCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKU3RyaW5nIF9zZXJ2aWNlSW5mb0ZpbGVuYW1lOwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmJvb2wgX2lzV2luZG93cyA9IGZhbHNlOwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmJvb2wgX2lzRnVjaHNpYSA9IGZhbHNlOwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCnZhciBfc2lnbmFsV2F0Y2g7CnZhciBfc2lnbmFsU3Vic2NyaXB0aW9uOwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmJvb2wgX2VuYWJsZVNlcnZpY2VQb3J0RmFsbGJhY2sgPSBmYWxzZTsKCi8vIEhUVFAgc2VydmVyLgpTZXJ2ZXIgc2VydmVyOwpGdXR1cmU8U2VydmVyPiBzZXJ2ZXJGdXR1cmU7CgpfbGF6eVNlcnZlckJvb3QoKSB7CiAgaWYgKHNlcnZlciAhPSBudWxsKSB7CiAgICByZXR1cm47CiAgfQogIC8vIExhemlseSBjcmVhdGUgc2VydmljZS4KICB2YXIgc2VydmljZSA9IG5ldyBWTVNlcnZpY2UoKTsKICAvLyBMYXppbHkgY3JlYXRlIHNlcnZlci4KICBzZXJ2ZXIgPSBuZXcgU2VydmVyKHNlcnZpY2UsIF9pcCwgX3BvcnQsIF9vcmlnaW5DaGVja0Rpc2FibGVkLAogICAgICBfYXV0aENvZGVzRGlzYWJsZWQsIF9zZXJ2aWNlSW5mb0ZpbGVuYW1lLCBfZW5hYmxlU2VydmljZVBvcnRGYWxsYmFjayk7Cn0KCkZ1dHVyZSBjbGVhbnVwQ2FsbGJhY2soKSBhc3luYyB7CiAgLy8gQ2FuY2VsIHRoZSBzaWdxdWl0IHN1YnNjcmlwdGlvbi4KICBpZiAoX3NpZ25hbFN1YnNjcmlwdGlvbiAhPSBudWxsKSB7CiAgICBhd2FpdCBfc2lnbmFsU3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogICAgX3NpZ25hbFN1YnNjcmlwdGlvbiA9IG51bGw7CiAgfQogIGlmIChzZXJ2ZXIgIT0gbnVsbCkgewogICAgdHJ5IHsKICAgICAgYXdhaXQgc2VydmVyLmNsZWFudXAodHJ1ZSk7CiAgICB9IGNhdGNoIChlLCBzdCkgewogICAgICBwcmludCgiRXJyb3IgaW4gdm0tc2VydmljZSBzaHV0ZG93bjogJGVcbiRzdFxuIik7CiAgICB9CiAgfQogIGlmIChfcmVnaXN0ZXJTaWduYWxIYW5kbGVyVGltZXIgIT0gbnVsbCkgewogICAgX3JlZ2lzdGVyU2lnbmFsSGFuZGxlclRpbWVyLmNhbmNlbCgpOwogICAgX3JlZ2lzdGVyU2lnbmFsSGFuZGxlclRpbWVyID0gbnVsbDsKICB9CiAgLy8gQ2FsbCBvdXQgdG8gZW1iZWRkZXIncyBzaHV0ZG93biBjYWxsYmFjay4KICBfc2h1dGRvd24oKTsKfQoKRnV0dXJlPFVyaT4gY3JlYXRlVGVtcERpckNhbGxiYWNrKFN0cmluZyBiYXNlKSBhc3luYyB7CiAgRGlyZWN0b3J5IHRlbXAgPSBhd2FpdCBEaXJlY3Rvcnkuc3lzdGVtVGVtcC5jcmVhdGVUZW1wKGJhc2UpOwogIC8vIFVuZGVybmVhdGggdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnksIGNyZWF0ZSBhIGRpcmVjdG9yeSB3aXRoIHRoZQogIC8vIHNhbWUgbmFtZSBhcyB0aGUgRGV2RlMgbmFtZSBbYmFzZV0uCiAgdmFyIGZzVXJpID0gdGVtcC51cmkucmVzb2x2ZVVyaShuZXcgVXJpLmRpcmVjdG9yeShiYXNlKSk7CiAgYXdhaXQgbmV3IERpcmVjdG9yeS5mcm9tVXJpKGZzVXJpKS5jcmVhdGUoKTsKICByZXR1cm4gZnNVcmk7Cn0KCkZ1dHVyZSBkZWxldGVEaXJDYWxsYmFjayhVcmkgcGF0aCkgYXN5bmMgewogIERpcmVjdG9yeSBkaXIgPSBuZXcgRGlyZWN0b3J5LmZyb21VcmkocGF0aCk7CiAgYXdhaXQgZGlyLmRlbGV0ZShyZWN1cnNpdmU6IHRydWUpOwp9CgpjbGFzcyBQZW5kaW5nV3JpdGUgewogIFBlbmRpbmdXcml0ZSh0aGlzLnVyaSwgdGhpcy5ieXRlcyk7CiAgZmluYWwgQ29tcGxldGVyIGNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXIoKTsKICBmaW5hbCBVcmkgdXJpOwogIGZpbmFsIExpc3Q8aW50PiBieXRlczsKCiAgRnV0dXJlIHdyaXRlKCkgYXN5bmMgewogICAgdmFyIGZpbGUgPSBuZXcgRmlsZS5mcm9tVXJpKHVyaSk7CiAgICB2YXIgcGFyZW50X2RpcmVjdG9yeSA9IGZpbGUucGFyZW50OwogICAgYXdhaXQgcGFyZW50X2RpcmVjdG9yeS5jcmVhdGUocmVjdXJzaXZlOiB0cnVlKTsKICAgIGlmIChhd2FpdCBmaWxlLmV4aXN0cygpKSB7CiAgICAgIGF3YWl0IGZpbGUuZGVsZXRlKCk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gYXdhaXQgZmlsZS53cml0ZUFzQnl0ZXMoYnl0ZXMpOwogICAgY29tcGxldGVyLmNvbXBsZXRlKG51bGwpOwogICAgV3JpdGVMaW1pdGVyLl93cml0ZUNvbXBsZXRlZCgpOwogIH0KfQoKY2xhc3MgV3JpdGVMaW1pdGVyIHsKICBzdGF0aWMgZmluYWwgTGlzdDxQZW5kaW5nV3JpdGU+IHBlbmRpbmdXcml0ZXMgPSBuZXcgTGlzdDxQZW5kaW5nV3JpdGU+KCk7CgogIC8vIG5vbi1yb290ZWQgQW5kcm9pZCBkZXZpY2VzIGhhdmUgYSB2ZXJ5IGxvdyBsaW1pdCBmb3IgdGhlIG51bWJlciBvZgogIC8vIG9wZW4gZmlsZXMuIEFydGlmaWNpYWxseSBjYXAgb3Vyc2VsdmVzIHRvIDE2LgogIHN0YXRpYyBjb25zdCBrTWF4T3BlbldyaXRlcyA9IDE2OwogIHN0YXRpYyBpbnQgb3BlbldyaXRlcyA9IDA7CgogIHN0YXRpYyBGdXR1cmUgc2NoZWR1bGVXcml0ZShVcmkgcGF0aCwgTGlzdDxpbnQ+IGJ5dGVzKSBhc3luYyB7CiAgICAvLyBDcmVhdGUgYSBuZXcgcGVuZGluZyB3cml0ZS4KICAgIFBlbmRpbmdXcml0ZSBwdyA9IG5ldyBQZW5kaW5nV3JpdGUocGF0aCwgYnl0ZXMpOwogICAgcGVuZGluZ1dyaXRlcy5hZGQocHcpOwogICAgX21heWJlV3JpdGVGaWxlcygpOwogICAgcmV0dXJuIHB3LmNvbXBsZXRlci5mdXR1cmU7CiAgfQoKICBzdGF0aWMgX21heWJlV3JpdGVGaWxlcygpIHsKICAgIHdoaWxlIChvcGVuV3JpdGVzIDwga01heE9wZW5Xcml0ZXMpIHsKICAgICAgaWYgKHBlbmRpbmdXcml0ZXMubGVuZ3RoID4gMCkgewogICAgICAgIFBlbmRpbmdXcml0ZSBwdyA9IHBlbmRpbmdXcml0ZXMucmVtb3ZlTGFzdCgpOwogICAgICAgIHB3LndyaXRlKCk7CiAgICAgICAgb3BlbldyaXRlcysrOwogICAgICB9IGVsc2UgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgfQoKICBzdGF0aWMgX3dyaXRlQ29tcGxldGVkKCkgewogICAgb3BlbldyaXRlcy0tOwogICAgYXNzZXJ0KG9wZW5Xcml0ZXMgPj0gMCk7CiAgICBfbWF5YmVXcml0ZUZpbGVzKCk7CiAgfQp9CgpGdXR1cmUgd3JpdGVGaWxlQ2FsbGJhY2soVXJpIHBhdGgsIExpc3Q8aW50PiBieXRlcykgYXN5bmMgewogIHJldHVybiBXcml0ZUxpbWl0ZXIuc2NoZWR1bGVXcml0ZShwYXRoLCBieXRlcyk7Cn0KCkZ1dHVyZSB3cml0ZVN0cmVhbUZpbGVDYWxsYmFjayhVcmkgcGF0aCwgU3RyZWFtPExpc3Q8aW50Pj4gYnl0ZXMpIGFzeW5jIHsKICB2YXIgZmlsZSA9IG5ldyBGaWxlLmZyb21VcmkocGF0aCk7CiAgdmFyIHBhcmVudF9kaXJlY3RvcnkgPSBmaWxlLnBhcmVudDsKICBhd2FpdCBwYXJlbnRfZGlyZWN0b3J5LmNyZWF0ZShyZWN1cnNpdmU6IHRydWUpOwogIGlmIChhd2FpdCBmaWxlLmV4aXN0cygpKSB7CiAgICBhd2FpdCBmaWxlLmRlbGV0ZSgpOwogIH0KICBJT1Npbmsgc2luayA9IGF3YWl0IGZpbGUub3BlbldyaXRlKCk7CiAgYXdhaXQgc2luay5hZGRTdHJlYW0oYnl0ZXMpOwogIGF3YWl0IHNpbmsuY2xvc2UoKTsKfQoKRnV0dXJlPExpc3Q8aW50Pj4gcmVhZEZpbGVDYWxsYmFjayhVcmkgcGF0aCkgYXN5bmMgewogIHZhciBmaWxlID0gbmV3IEZpbGUuZnJvbVVyaShwYXRoKTsKICByZXR1cm4gYXdhaXQgZmlsZS5yZWFkQXNCeXRlcygpOwp9CgpGdXR1cmU8TGlzdDxNYXA8U3RyaW5nLCBkeW5hbWljPj4+IGxpc3RGaWxlc0NhbGxiYWNrKFVyaSBkaXJQYXRoKSBhc3luYyB7CiAgdmFyIGRpciA9IG5ldyBEaXJlY3RvcnkuZnJvbVVyaShkaXJQYXRoKTsKICB2YXIgZGlyUGF0aFN0ciA9IGRpclBhdGgucGF0aDsKICB2YXIgc3RyZWFtID0gZGlyLmxpc3QocmVjdXJzaXZlOiB0cnVlKTsKICB2YXIgcmVzdWx0ID0gPE1hcDxTdHJpbmcsIGR5bmFtaWM+PltdOwogIGF3YWl0IGZvciAodmFyIGZpbGVFbnRpdHkgaW4gc3RyZWFtKSB7CiAgICB2YXIgZmlsZVBhdGggPSBuZXcgVXJpLmZpbGUoZmlsZUVudGl0eS5wYXRoKS5wYXRoOwogICAgdmFyIHN0YXQgPSBhd2FpdCBmaWxlRW50aXR5LnN0YXQoKTsKICAgIGlmIChzdGF0LnR5cGUgPT0gRmlsZVN5c3RlbUVudGl0eVR5cGUuRklMRSAmJgogICAgICAgIGZpbGVQYXRoLnN0YXJ0c1dpdGgoZGlyUGF0aFN0cikpIHsKICAgICAgdmFyIG1hcCA9IDxTdHJpbmcsIGR5bmFtaWM+e307CiAgICAgIG1hcFsnbmFtZSddID0gJy8nICsgZmlsZVBhdGguc3Vic3RyaW5nKGRpclBhdGhTdHIubGVuZ3RoKTsKICAgICAgbWFwWydzaXplJ10gPSBzdGF0LnNpemU7CiAgICAgIG1hcFsnbW9kaWZpZWQnXSA9IHN0YXQubW9kaWZpZWQubWlsbGlzZWNvbmRzU2luY2VFcG9jaDsKICAgICAgcmVzdWx0LmFkZChtYXApOwogICAgfQogIH0KICByZXR1cm4gcmVzdWx0Owp9CgpGdXR1cmU8VXJpPiBzZXJ2ZXJJbmZvcm1hdGlvbkNhbGxiYWNrKCkgYXN5bmMgewogIF9sYXp5U2VydmVyQm9vdCgpOwogIHJldHVybiBzZXJ2ZXIuc2VydmVyQWRkcmVzczsKfQoKRnV0dXJlPFVyaT4gd2ViU2VydmVyQ29udHJvbENhbGxiYWNrKGJvb2wgZW5hYmxlKSBhc3luYyB7CiAgX2xhenlTZXJ2ZXJCb290KCk7CiAgaWYgKHNlcnZlci5ydW5uaW5nID09IGVuYWJsZSkgewogICAgLy8gTm8gY2hhbmdlLgogICAgcmV0dXJuIHNlcnZlci5zZXJ2ZXJBZGRyZXNzOwogIH0KCiAgaWYgKGVuYWJsZSkgewogICAgYXdhaXQgc2VydmVyLnN0YXJ0dXAoKTsKICAgIHJldHVybiBzZXJ2ZXIuc2VydmVyQWRkcmVzczsKICB9IGVsc2UgewogICAgYXdhaXQgc2VydmVyLnNodXRkb3duKHRydWUpOwogICAgcmV0dXJuIHNlcnZlci5zZXJ2ZXJBZGRyZXNzOwogIH0KfQoKTnVsbCBfY2xlYXJGdXR1cmUoXykgewogIHNlcnZlckZ1dHVyZSA9IG51bGw7Cn0KCl9vblNpZ25hbChQcm9jZXNzU2lnbmFsIHNpZ25hbCkgewogIGlmIChzZXJ2ZXJGdXR1cmUgIT0gbnVsbCkgewogICAgLy8gU3RpbGwgd2FpdGluZy4KICAgIHJldHVybjsKICB9CiAgX2xhenlTZXJ2ZXJCb290KCk7CiAgLy8gVG9nZ2xlIEhUVFAgc2VydmVyLgogIGlmIChzZXJ2ZXIucnVubmluZykgewogICAgc2VydmVyRnV0dXJlID0gc2VydmVyLnNodXRkb3duKHRydWUpLnRoZW4oX2NsZWFyRnV0dXJlKTsKICB9IGVsc2UgewogICAgc2VydmVyRnV0dXJlID0gc2VydmVyLnN0YXJ0dXAoKS50aGVuKF9jbGVhckZ1dHVyZSk7CiAgfQp9CgpUaW1lciBfcmVnaXN0ZXJTaWduYWxIYW5kbGVyVGltZXI7CgpfcmVnaXN0ZXJTaWduYWxIYW5kbGVyKCkgewogIF9yZWdpc3RlclNpZ25hbEhhbmRsZXJUaW1lciA9IG51bGw7CiAgaWYgKF9zaWduYWxXYXRjaCA9PSBudWxsKSB7CiAgICAvLyBDYW5ub3QgcmVnaXN0ZXIgZm9yIHNpZ25hbHMuCiAgICByZXR1cm47CiAgfQogIGlmIChfaXNXaW5kb3dzIHx8IF9pc0Z1Y2hzaWEpIHsKICAgIC8vIENhbm5vdCByZWdpc3RlciBmb3Igc2lnbmFscyBvbiBXaW5kb3dzIG9yIEZ1Y2hzaWEuCiAgICByZXR1cm47CiAgfQogIF9zaWduYWxTdWJzY3JpcHRpb24gPSBfc2lnbmFsV2F0Y2goUHJvY2Vzc1NpZ25hbC5TSUdRVUlUKS5saXN0ZW4oX29uU2lnbmFsKTsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAhY29uc3QgYm9vbC5mcm9tRW52aXJvbm1lbnQoImRhcnQudm0ucHJvZHVjdCIpKQptYWluKCkgewogIC8vIFNldCBlbWJlZGRlciBob29rcy4KICBWTVNlcnZpY2VFbWJlZGRlckhvb2tzLmNsZWFudXAgPSBjbGVhbnVwQ2FsbGJhY2s7CiAgVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy5jcmVhdGVUZW1wRGlyID0gY3JlYXRlVGVtcERpckNhbGxiYWNrOwogIFZNU2VydmljZUVtYmVkZGVySG9va3MuZGVsZXRlRGlyID0gZGVsZXRlRGlyQ2FsbGJhY2s7CiAgVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy53cml0ZUZpbGUgPSB3cml0ZUZpbGVDYWxsYmFjazsKICBWTVNlcnZpY2VFbWJlZGRlckhvb2tzLndyaXRlU3RyZWFtRmlsZSA9IHdyaXRlU3RyZWFtRmlsZUNhbGxiYWNrOwogIFZNU2VydmljZUVtYmVkZGVySG9va3MucmVhZEZpbGUgPSByZWFkRmlsZUNhbGxiYWNrOwogIFZNU2VydmljZUVtYmVkZGVySG9va3MubGlzdEZpbGVzID0gbGlzdEZpbGVzQ2FsbGJhY2s7CiAgVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy5zZXJ2ZXJJbmZvcm1hdGlvbiA9IHNlcnZlckluZm9ybWF0aW9uQ2FsbGJhY2s7CiAgVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy53ZWJTZXJ2ZXJDb250cm9sID0gd2ViU2VydmVyQ29udHJvbENhbGxiYWNrOwogIC8vIEFsd2F5cyBpbnN0YW50aWF0ZSB0aGUgdm1zZXJ2aWNlIG9iamVjdCBzbyB0aGF0IHRoZSBleGl0IG1lc3NhZ2UKICAvLyBjYW4gYmUgZGVsaXZlcmVkIGFuZCB3YWl0aW5nIGxvYWRlcnMgY2FuIGJlIGNhbmNlbGxlZC4KICBuZXcgVk1TZXJ2aWNlKCk7CiAgaWYgKF9hdXRvU3RhcnQpIHsKICAgIF9sYXp5U2VydmVyQm9vdCgpOwogICAgc2VydmVyLnN0YXJ0dXAoKTsKICAgIC8vIEl0J3MganVzdCBoZXJlIHRvIHB1c2ggYW4gZXZlbnQgb24gdGhlIGV2ZW50IGxvb3Agc28gdGhhdCB3ZSBpbnZva2UgdGhlCiAgICAvLyBzY2hlZHVsZWQgbWljcm90YXNrcy4KICAgIFRpbWVyLnJ1bigoKSB7fSk7CiAgfQogIC8vIFJlZ2lzdGVyIHNpZ25hbCBoYW5kbGVyIGFmdGVyIGEgc21hbGwgZGVsYXkgdG8gYXZvaWQgc3RhbGxpbmcgbWFpbgogIC8vIGlzb2xhdGUgc3RhcnR1cC4KICBfcmVnaXN0ZXJTaWduYWxIYW5kbGVyVGltZXIgPSBuZXcgVGltZXIoc2hvcnREZWxheSwgX3JlZ2lzdGVyU2lnbmFsSGFuZGxlcik7Cn0KCl9zaHV0ZG93bigpIG5hdGl2ZSAiVk1TZXJ2aWNlSU9fU2h1dGRvd24iOwqBEgBOTjwBDwEWARUaFxIXGhoBHgE0GgsaDCYaETAaGSoaGzoaHRoZGhkaEhkaKQEQDx0BFBgMBBwhG0FNAgEhJiUoIAQYCiIWOAYELSooBC8PAgE3QEUpPC8QAgErLyUCARUmLxEZARkmKDQfGwYxHiQEAgEVTAFIMyQdAUEjNRsYIAQBHiomNhQWDw8IBgQBHRIdGAQCATwyAgFKJSYyHRkEKB8WAgE1JSMCAUosISopKTcoMislQR8+FwYEEQIBMBUfAgE6FSISIQQBEBwhCyEhBAIBFxcCASIeFgwEFRkYPQs4BAIBIwEbJh4kDAQiOgwETwIBSgkZNEA4OEQ2OEhGRjwTFBcWTx0WBEgWTwIBKwERZGFydDp2bXNlcnZpY2VfaW9Tb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvX2ludGVybmFsL3ZtL2Jpbi92bXNlcnZpY2Vfc2VydmVyLmRhcnS7nS8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiB2bXNlcnZpY2VfaW87CgpmaW5hbCBib29sIHNpbGVudE9ic2VydmF0b3J5ID0gbmV3IGJvb2wuZnJvbUVudmlyb25tZW50KCdTSUxFTlRfT0JTRVJWQVRPUlknKTsKCnZvaWQgc2VydmVyUHJpbnQoU3RyaW5nIHMpIHsKICBpZiAoc2lsZW50T2JzZXJ2YXRvcnkpIHsKICAgIC8vIFdlJ3ZlIGJlZW4gcmVxdWVzdGVkIHRvIGJlIHNpbGVudC4KICAgIHJldHVybjsKICB9CiAgcHJpbnQocyk7Cn0KCmNsYXNzIFdlYlNvY2tldENsaWVudCBleHRlbmRzIENsaWVudCB7CiAgc3RhdGljIGNvbnN0IGludCBQQVJTRV9FUlJPUl9DT0RFID0gNDAwMDsKICBzdGF0aWMgY29uc3QgaW50IEJJTkFSWV9NRVNTQUdFX0VSUk9SX0NPREUgPSA0MDAxOwogIHN0YXRpYyBjb25zdCBpbnQgTk9UX01BUF9FUlJPUl9DT0RFID0gNDAwMjsKICBzdGF0aWMgY29uc3QgaW50IElEX0VSUk9SX0NPREUgPSA0MDAzOwogIGZpbmFsIFdlYlNvY2tldCBzb2NrZXQ7CgogIFdlYlNvY2tldENsaWVudCh0aGlzLnNvY2tldCwgVk1TZXJ2aWNlIHNlcnZpY2UpIDogc3VwZXIoc2VydmljZSkgewogICAgc29ja2V0Lmxpc3RlbigobWVzc2FnZSkgPT4gb25XZWJTb2NrZXRNZXNzYWdlKG1lc3NhZ2UpKTsKICAgIHNvY2tldC5kb25lLnRoZW4oKF8pID0+IGNsb3NlKCkpOwogIH0KCiAgZGlzY29ubmVjdCgpIHsKICAgIGlmIChzb2NrZXQgIT0gbnVsbCkgewogICAgICBzb2NrZXQuY2xvc2UoKTsKICAgIH0KICB9CgogIHZvaWQgb25XZWJTb2NrZXRNZXNzYWdlKG1lc3NhZ2UpIHsKICAgIGlmIChtZXNzYWdlIGlzIFN0cmluZykgewogICAgICB2YXIgbWFwOwogICAgICB0cnkgewogICAgICAgIG1hcCA9IGpzb24uZGVjb2RlKG1lc3NhZ2UpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgc29ja2V0LmNsb3NlKFBBUlNFX0VSUk9SX0NPREUsICdNZXNzYWdlIHBhcnNlIGVycm9yOiAkZScpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAobWFwIGlzISBNYXApIHsKICAgICAgICBzb2NrZXQuY2xvc2UoTk9UX01BUF9FUlJPUl9DT0RFLCAnTWVzc2FnZSBtdXN0IGJlIGEgSlNPTiBtYXAuJyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRyeSB7CiAgICAgICAgZmluYWwgcnBjID0gbmV3IE1lc3NhZ2UuZnJvbUpzb25ScGModGhpcywgbWFwKTsKICAgICAgICBzd2l0Y2ggKHJwYy50eXBlKSB7CiAgICAgICAgICBjYXNlIE1lc3NhZ2VUeXBlLlJlcXVlc3Q6CiAgICAgICAgICAgIG9uUmVxdWVzdChycGMpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgTWVzc2FnZVR5cGUuTm90aWZpY2F0aW9uOgogICAgICAgICAgICBvbk5vdGlmaWNhdGlvbihycGMpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgTWVzc2FnZVR5cGUuUmVzcG9uc2U6CiAgICAgICAgICAgIG9uUmVzcG9uc2UocnBjKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgc29ja2V0LmNsb3NlKElEX0VSUk9SX0NPREUsIGUubWVzc2FnZSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHNvY2tldC5jbG9zZShCSU5BUllfTUVTU0FHRV9FUlJPUl9DT0RFLCAnTWVzc2FnZSBtdXN0IGJlIGEgc3RyaW5nLicpOwogICAgfQogIH0KCiAgdm9pZCBwb3N0KFJlc3BvbnNlIHJlc3VsdCkgewogICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CiAgICAgIC8vIERvIG5vdGhpbmcuCiAgICAgIHJldHVybjsKICAgIH0KICAgIHRyeSB7CiAgICAgIHN3aXRjaCAocmVzdWx0LmtpbmQpIHsKICAgICAgICBjYXNlIFJlc3BvbnNlUGF5bG9hZEtpbmQuU3RyaW5nOgogICAgICAgIGNhc2UgUmVzcG9uc2VQYXlsb2FkS2luZC5CaW5hcnk6CiAgICAgICAgICBzb2NrZXQuYWRkKHJlc3VsdC5wYXlsb2FkKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgUmVzcG9uc2VQYXlsb2FkS2luZC5VdGY4U3RyaW5nOgogICAgICAgICAgc29ja2V0LmFkZFV0ZjhUZXh0KHJlc3VsdC5wYXlsb2FkKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9IG9uIFN0YXRlRXJyb3IgY2F0Y2ggKF8pIHsKICAgICAgLy8gVk0gaGFzIHNodXRkb3duLCBkbyBub3RoaW5nLgogICAgICByZXR1cm47CiAgICB9CiAgfQoKICBkeW5hbWljIHRvSnNvbigpIHsKICAgIE1hcCBtYXAgPSBzdXBlci50b0pzb24oKTsKICAgIG1hcFsndHlwZSddID0gJ1dlYlNvY2tldENsaWVudCc7CiAgICBtYXBbJ3NvY2tldCddID0gJyRzb2NrZXQnOwogICAgcmV0dXJuIG1hcDsKICB9Cn0KCmNsYXNzIEh0dHBSZXF1ZXN0Q2xpZW50IGV4dGVuZHMgQ2xpZW50IHsKICBzdGF0aWMgQ29udGVudFR5cGUganNvbkNvbnRlbnRUeXBlID0KICAgICAgbmV3IENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbiIsICJqc29uIiwgY2hhcnNldDogInV0Zi04Iik7CiAgZmluYWwgSHR0cFJlcXVlc3QgcmVxdWVzdDsKCiAgSHR0cFJlcXVlc3RDbGllbnQodGhpcy5yZXF1ZXN0LCBWTVNlcnZpY2Ugc2VydmljZSkKICAgICAgOiBzdXBlcihzZXJ2aWNlLCBzZW5kRXZlbnRzOiBmYWxzZSk7CgogIGRpc2Nvbm5lY3QoKSB7CiAgICByZXF1ZXN0LnJlc3BvbnNlLmNsb3NlKCk7CiAgICBjbG9zZSgpOwogIH0KCiAgdm9pZCBwb3N0KFJlc3BvbnNlIHJlc3VsdCkgewogICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CiAgICAgIGNsb3NlKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIEh0dHBSZXNwb25zZSByZXNwb25zZSA9IHJlcXVlc3QucmVzcG9uc2U7CiAgICAvLyBXZSBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gZm9yIGJhZCBvcmlnaW5zIGVhcmxpZXIuCiAgICByZXNwb25zZS5oZWFkZXJzLmFkZCgnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJywgJyonKTsKICAgIHJlc3BvbnNlLmhlYWRlcnMuY29udGVudFR5cGUgPSBqc29uQ29udGVudFR5cGU7CiAgICBzd2l0Y2ggKHJlc3VsdC5raW5kKSB7CiAgICAgIGNhc2UgUmVzcG9uc2VQYXlsb2FkS2luZC5TdHJpbmc6CiAgICAgICAgcmVzcG9uc2Uud3JpdGUocmVzdWx0LnBheWxvYWQpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFJlc3BvbnNlUGF5bG9hZEtpbmQuVXRmOFN0cmluZzoKICAgICAgICByZXNwb25zZS5hZGQocmVzdWx0LnBheWxvYWQpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFJlc3BvbnNlUGF5bG9hZEtpbmQuQmluYXJ5OgogICAgICAgIHRocm93ICdDYW4gbm90IGhhbmRsZSBiaW5hcnkgcmVzcG9uc2VzJzsKICAgIH0KICAgIHJlc3BvbnNlLmNsb3NlKCk7CiAgICBjbG9zZSgpOwogIH0KCiAgZHluYW1pYyB0b0pzb24oKSB7CiAgICBNYXAgbWFwID0gc3VwZXIudG9Kc29uKCk7CiAgICBtYXBbJ3R5cGUnXSA9ICdIdHRwUmVxdWVzdENsaWVudCc7CiAgICBtYXBbJ3JlcXVlc3QnXSA9ICckcmVxdWVzdCc7CiAgICByZXR1cm4gbWFwOwogIH0KfQoKY2xhc3MgU2VydmVyIHsKICBzdGF0aWMgY29uc3QgV0VCU09DS0VUX1BBVEggPSAnL3dzJzsKICBzdGF0aWMgY29uc3QgUk9PVF9SRURJUkVDVF9QQVRIID0gJy9pbmRleC5odG1sJzsKCiAgZmluYWwgVk1TZXJ2aWNlIF9zZXJ2aWNlOwogIGZpbmFsIFN0cmluZyBfaXA7CiAgZmluYWwgYm9vbCBfb3JpZ2luQ2hlY2tEaXNhYmxlZDsKICBmaW5hbCBib29sIF9hdXRoQ29kZXNEaXNhYmxlZDsKICBmaW5hbCBib29sIF9lbmFibGVTZXJ2aWNlUG9ydEZhbGxiYWNrOwogIGZpbmFsIFN0cmluZyBfc2VydmljZUluZm9GaWxlbmFtZTsKICBIdHRwU2VydmVyIF9zZXJ2ZXI7CiAgYm9vbCBnZXQgcnVubmluZyA9PiBfc2VydmVyICE9IG51bGw7CiAgaW50IF9wb3J0ID0gLTE7CgogIC8vLyBSZXR1cm5zIHRoZSBzZXJ2ZXIgYWRkcmVzcyBpbmNsdWRpbmcgdGhlIGF1dGggdG9rZW4uCiAgVXJpIGdldCBzZXJ2ZXJBZGRyZXNzIHsKICAgIGlmICghcnVubmluZykgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHZhciBpcCA9IF9zZXJ2ZXIuYWRkcmVzcy5hZGRyZXNzOwogICAgdmFyIHBvcnQgPSBfc2VydmVyLnBvcnQ7CiAgICB2YXIgcGF0aCA9ICFfYXV0aENvZGVzRGlzYWJsZWQgPyAiJHNlcnZpY2VBdXRoVG9rZW4vIiA6ICIvIjsKICAgIHJldHVybiBuZXcgVXJpKHNjaGVtZTogJ2h0dHAnLCBob3N0OiBpcCwgcG9ydDogcG9ydCwgcGF0aDogcGF0aCk7CiAgfQoKICAvLyBPbiBGdWNoc2lhLCBhdXRoZW50aWNhdGlvbiBjb2RlcyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdC4gVG8gZW5hYmxlLCB0aGUgYXV0aGVudGljYXRpb24gdG9rZW4KICAvLyB3b3VsZCBoYXZlIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgaHViIGFsb25nc2lkZSB0aGUgcG9ydCBudW1iZXIuCiAgU2VydmVyKAogICAgICB0aGlzLl9zZXJ2aWNlLAogICAgICB0aGlzLl9pcCwKICAgICAgdGhpcy5fcG9ydCwKICAgICAgdGhpcy5fb3JpZ2luQ2hlY2tEaXNhYmxlZCwKICAgICAgYm9vbCBhdXRoQ29kZXNEaXNhYmxlZCwKICAgICAgdGhpcy5fc2VydmljZUluZm9GaWxlbmFtZSwKICAgICAgdGhpcy5fZW5hYmxlU2VydmljZVBvcnRGYWxsYmFjaykKICAgICAgOiBfYXV0aENvZGVzRGlzYWJsZWQgPSAoYXV0aENvZGVzRGlzYWJsZWQgfHwgUGxhdGZvcm0uaXNGdWNoc2lhKTsKCiAgYm9vbCBfaXNBbGxvd2VkT3JpZ2luKFN0cmluZyBvcmlnaW4pIHsKICAgIFVyaSB1cmk7CiAgICB0cnkgewogICAgICB1cmkgPSBVcmkucGFyc2Uob3JpZ2luKTsKICAgIH0gY2F0Y2ggKF8pIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8vIEV4cGxpY2l0bHkgYWRkIGxvY2FsaG9zdCBhbmQgMTI3LjAuMC4xIG9uIGFueSBwb3J0IChuZWNlc3NhcnkgZm9yCiAgICAvLyBhZGIgcG9ydCBmb3J3YXJkaW5nKS4KICAgIGlmICgodXJpLmhvc3QgPT0gJ2xvY2FsaG9zdCcpIHx8CiAgICAgICAgKHVyaS5ob3N0ID09ICc6OjEnKSB8fAogICAgICAgICh1cmkuaG9zdCA9PSAnMTI3LjAuMC4xJykpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgaWYgKCh1cmkucG9ydCA9PSBfc2VydmVyLnBvcnQpICYmCiAgICAgICAgKCh1cmkuaG9zdCA9PSBfc2VydmVyLmFkZHJlc3MuYWRkcmVzcykgfHwKICAgICAgICAgICAgKHVyaS5ob3N0ID09IF9zZXJ2ZXIuYWRkcmVzcy5ob3N0KSkpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgYm9vbCBfb3JpZ2luQ2hlY2soSHR0cFJlcXVlc3QgcmVxdWVzdCkgewogICAgaWYgKF9vcmlnaW5DaGVja0Rpc2FibGVkKSB7CiAgICAgIC8vIEFsd2F5cyBhbGxvdy4KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICAvLyBGaXJzdCBjaGVjayB0aGUgd2ViLXNvY2tldCBzcGVjaWZpYyBvcmlnaW4uCiAgICBMaXN0PFN0cmluZz4gb3JpZ2lucyA9IHJlcXVlc3QuaGVhZGVyc1siU2VjLVdlYlNvY2tldC1PcmlnaW4iXTsKICAgIGlmIChvcmlnaW5zID09IG51bGwpIHsKICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBnZW5lcmFsIE9yaWdpbiBmaWVsZC4KICAgICAgb3JpZ2lucyA9IHJlcXVlc3QuaGVhZGVyc1siT3JpZ2luIl07CiAgICB9CiAgICBpZiAob3JpZ2lucyA9PSBudWxsKSB7CiAgICAgIC8vIE5vIG9yaWdpbiBzZW50LiBUaGlzIGlzIGEgbm9uLWJyb3dzZXIgY2xpZW50IG9yIGEgc2FtZS1vcmlnaW4gcmVxdWVzdC4KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmb3IgKFN0cmluZyBvcmlnaW4gaW4gb3JpZ2lucykgewogICAgICBpZiAoX2lzQWxsb3dlZE9yaWdpbihvcmlnaW4pKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vLyBDaGVja3MgdGhlIFtyZXF1ZXN0VXJpXSBmb3IgdGhlIHNlcnZpY2UgYXV0aCB0b2tlbiBhbmQgcmV0dXJucyB0aGUgcGF0aAogIC8vLyBhcyBhIFN0cmluZy4gSWYgdGhlIHNlcnZpY2UgYXV0aCB0b2tlbiBjaGVjayBmYWlscywgcmV0dXJucyBudWxsLgogIC8vLyBSZXR1cm5zIGEgVXJpIGlmIGEgcmVkaXJlY3QgaXMgcmVxdWlyZWQuCiAgZHluYW1pYyBfY2hlY2tBdXRoVG9rZW5BbmRHZXRQYXRoKFVyaSByZXF1ZXN0VXJpKSB7CiAgICBpZiAoX2F1dGhDb2Rlc0Rpc2FibGVkKSB7CiAgICAgIHJldHVybiByZXF1ZXN0VXJpLnBhdGggPT0gJy8nID8gUk9PVF9SRURJUkVDVF9QQVRIIDogcmVxdWVzdFVyaS5wYXRoOwogICAgfQogICAgZmluYWwgTGlzdDxTdHJpbmc+IHJlcXVlc3RQYXRoU2VnbWVudHMgPSByZXF1ZXN0VXJpLnBhdGhTZWdtZW50czsKICAgIGlmIChyZXF1ZXN0UGF0aFNlZ21lbnRzLmlzRW1wdHkpIHsKICAgICAgLy8gTWFsZm9ybWVkLgogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIC8vIENoZWNrIHRoYXQgd2Ugd2VyZSBnaXZlbiB0aGUgYXV0aCB0b2tlbi4KICAgIGZpbmFsIFN0cmluZyBhdXRoVG9rZW4gPSByZXF1ZXN0UGF0aFNlZ21lbnRzWzBdOwogICAgaWYgKGF1dGhUb2tlbiAhPSBzZXJ2aWNlQXV0aFRva2VuKSB7CiAgICAgIC8vIE1hbGZvcm1lZC4KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICAvLyBNaXNzaW5nIGEgdHJhaWxpbmcgJy8nLiBXZSdsbCBuZWVkIHRvIHJlZGlyZWN0IHRvIHNlcnZlCiAgICAvLyBST09UX1JFRElSRUNUX1BBVEggY29ycmVjdGx5LCBvdGhlcndpc2UgdGhlIHJlc3BvbnNlIGlzIG1pc2ludGVycHJldGVkLgogICAgaWYgKHJlcXVlc3RQYXRoU2VnbWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgLy8gcmVxdWVzdFBhdGhTZWdtZW50cyBpcyB1bm1vZGlmaWFibGUuIENvcHkgaXQuCiAgICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBwYXRoU2VnbWVudHMgPSA8U3RyaW5nPltdLi5hZGRBbGwocmVxdWVzdFBhdGhTZWdtZW50cyk7CgogICAgICAvLyBBZGRpbmcgYW4gZW1wdHkgc3RyaW5nIHRvIHRoZSBwYXRoIHNlZ21lbnRzIHJlc3VsdHMgaW4gdGhlIHBhdGggaGF2aW5nCiAgICAgIC8vIGEgdHJhaWxpbmcgJy8nLgogICAgICBwYXRoU2VnbWVudHMuYWRkKCcnKTsKCiAgICAgIHJldHVybiByZXF1ZXN0VXJpLnJlcGxhY2UocGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMpOwogICAgfQogICAgLy8gQ29uc3RydWN0IHRoZSBhY3R1YWwgcmVxdWVzdCBwYXRoIGJ5IGNob3BwaW5nIG9mZiB0aGUgYXV0aCB0b2tlbi4KICAgIHJldHVybiAocmVxdWVzdFBhdGhTZWdtZW50c1sxXSA9PSAnJykKICAgICAgICA/IFJPT1RfUkVESVJFQ1RfUEFUSAogICAgICAgIDogJy8ke3JlcXVlc3RQYXRoU2VnbWVudHMuc3VibGlzdCgxKS5qb2luKCcvJyl9JzsKICB9CgogIEZ1dHVyZSBfcmVxdWVzdEhhbmRsZXIoSHR0cFJlcXVlc3QgcmVxdWVzdCkgYXN5bmMgewogICAgaWYgKCFfb3JpZ2luQ2hlY2socmVxdWVzdCkpIHsKICAgICAgLy8gVGhpcyBpcyBhIGNyb3NzIG9yaWdpbiBhdHRlbXB0IHRvIGNvbm5lY3QKICAgICAgcmVxdWVzdC5yZXNwb25zZS5zdGF0dXNDb2RlID0gSHR0cFN0YXR1cy5mb3JiaWRkZW47CiAgICAgIHJlcXVlc3QucmVzcG9uc2Uud3JpdGUoImZvcmJpZGRlbiBvcmlnaW4iKTsKICAgICAgcmVxdWVzdC5yZXNwb25zZS5jbG9zZSgpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT0gJ1BVVCcpIHsKICAgICAgLy8gUFVUIHJlcXVlc3RzIGFyZSBmb3J3YXJkZWQgdG8gRGV2RlMgZm9yIHByb2Nlc3NpbmcuCgogICAgICBMaXN0IGZzTmFtZUxpc3Q7CiAgICAgIExpc3QgZnNQYXRoTGlzdDsKICAgICAgTGlzdCBmc1BhdGhCYXNlNjRMaXN0OwogICAgICBMaXN0IGZzVXJpQmFzZTY0TGlzdDsKICAgICAgT2JqZWN0IGZzTmFtZTsKICAgICAgT2JqZWN0IGZzUGF0aDsKICAgICAgT2JqZWN0IGZzVXJpOwoKICAgICAgdHJ5IHsKICAgICAgICAvLyBFeHRyYWN0IHRoZSBmcyBuYW1lIGFuZCBmcyBwYXRoIGZyb20gdGhlIHJlcXVlc3QgaGVhZGVycy4KICAgICAgICBmc05hbWVMaXN0ID0gcmVxdWVzdC5oZWFkZXJzWydkZXZfZnNfbmFtZSddOwogICAgICAgIGZzTmFtZSA9IGZzTmFtZUxpc3RbMF07CgogICAgICAgIC8vIFByZWZlciBVcmkgZW5jb2RpbmcgZmlyc3QuCiAgICAgICAgZnNVcmlCYXNlNjRMaXN0ID0gcmVxdWVzdC5oZWFkZXJzWydkZXZfZnNfdXJpX2I2NCddOwogICAgICAgIGlmICgoZnNVcmlCYXNlNjRMaXN0ICE9IG51bGwpICYmIChmc1VyaUJhc2U2NExpc3QubGVuZ3RoID4gMCkpIHsKICAgICAgICAgIFN0cmluZyBkZWNvZGVkRnNVcmkgPSB1dGY4LmRlY29kZShiYXNlNjQuZGVjb2RlKGZzVXJpQmFzZTY0TGlzdFswXSkpOwogICAgICAgICAgZnNVcmkgPSBVcmkucGFyc2UoZGVjb2RlZEZzVXJpKTsKICAgICAgICB9CgogICAgICAgIC8vIEZhbGxiYWNrIHRvIHBhdGggZW5jb2RpbmcuCiAgICAgICAgaWYgKGZzVXJpID09IG51bGwpIHsKICAgICAgICAgIGZzUGF0aExpc3QgPSByZXF1ZXN0LmhlYWRlcnNbJ2Rldl9mc19wYXRoJ107CiAgICAgICAgICBmc1BhdGhCYXNlNjRMaXN0ID0gcmVxdWVzdC5oZWFkZXJzWydkZXZfZnNfcGF0aF9iNjQnXTsKICAgICAgICAgIC8vIElmIHRoZSAnZGV2X2ZzX3BhdGhfYjY0JyBoZWFkZXIgZmllbGQgd2FzIHNlbnQsIHVzZSB0aGF0IGluc3RlYWQuCiAgICAgICAgICBpZiAoKGZzUGF0aEJhc2U2NExpc3QgIT0gbnVsbCkgJiYgKGZzUGF0aEJhc2U2NExpc3QubGVuZ3RoID4gMCkpIHsKICAgICAgICAgICAgZnNQYXRoID0gdXRmOC5kZWNvZGUoYmFzZTY0LmRlY29kZShmc1BhdGhCYXNlNjRMaXN0WzBdKSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmc1BhdGggPSBmc1BhdGhMaXN0WzBdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZSkgey8qIGlnbm9yZSAqL30KCiAgICAgIFN0cmluZyByZXN1bHQ7CiAgICAgIHRyeSB7CiAgICAgICAgcmVzdWx0ID0gYXdhaXQgX3NlcnZpY2UuZGV2ZnMuaGFuZGxlUHV0U3RyZWFtKGZzTmFtZSwgZnNQYXRoLCBmc1VyaSwKICAgICAgICAgICAgcmVxdWVzdC5jYXN0PExpc3Q8aW50Pj4oKS50cmFuc2Zvcm0oR1pJUC5kZWNvZGVyKSk7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICByZXF1ZXN0LnJlc3BvbnNlLnN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzLmludGVybmFsU2VydmVyRXJyb3I7CiAgICAgICAgcmVxdWVzdC5yZXNwb25zZS53cml0ZShlKTsKICAgICAgICByZXF1ZXN0LnJlc3BvbnNlLmNsb3NlKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHsKICAgICAgICByZXF1ZXN0LnJlc3BvbnNlLmhlYWRlcnMuY29udGVudFR5cGUgPQogICAgICAgICAgICBIdHRwUmVxdWVzdENsaWVudC5qc29uQ29udGVudFR5cGU7CiAgICAgICAgcmVxdWVzdC5yZXNwb25zZS53cml0ZShyZXN1bHQpOwogICAgICB9CiAgICAgIHJlcXVlc3QucmVzcG9uc2UuY2xvc2UoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHJlcXVlc3QubWV0aG9kICE9ICdHRVQnKSB7CiAgICAgIC8vIE5vdCBhIEdFVCByZXF1ZXN0LiBEbyBub3RoaW5nLgogICAgICByZXF1ZXN0LnJlc3BvbnNlLnN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzLm1ldGhvZE5vdEFsbG93ZWQ7CiAgICAgIHJlcXVlc3QucmVzcG9uc2Uud3JpdGUoIm1ldGhvZCBub3QgYWxsb3dlZCIpOwogICAgICByZXF1ZXN0LnJlc3BvbnNlLmNsb3NlKCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBmaW5hbCBkeW5hbWljIHJlc3VsdCA9IF9jaGVja0F1dGhUb2tlbkFuZEdldFBhdGgocmVxdWVzdC51cmkpOwogICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CiAgICAgIC8vIEVpdGhlciBubyBhdXRoZW50aWNhdGlvbiBjb2RlIHdhcyBwcm92aWRlZCB3aGVuIG9uZSB3YXMgZXhwZWN0ZWQgb3IgYW4KICAgICAgLy8gaW5jb3JyZWN0IGF1dGhlbnRpY2F0aW9uIGNvZGUgd2FzIHByb3ZpZGVkLgogICAgICByZXF1ZXN0LnJlc3BvbnNlLnN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzLmZvcmJpZGRlbjsKICAgICAgcmVxdWVzdC5yZXNwb25zZS53cml0ZSgibWlzc2luZyBvciBpbnZhbGlkIGF1dGhlbnRpY2F0aW9uIGNvZGUiKTsKICAgICAgcmVxdWVzdC5yZXNwb25zZS5jbG9zZSgpOwogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYgKHJlc3VsdCBpcyBVcmkpIHsKICAgICAgLy8gVGhlIFVSSSBjb250YWlucyB0aGUgdmFsaWQgYXV0aCB0b2tlbiBidXQgaXMgbWlzc2luZyBhIHRyYWlsaW5nICcvJy4KICAgICAgLy8gUmVkaXJlY3QgdG8gdGhlIHNhbWUgVVJJIHdpdGggdGhlIHRyYWlsaW5nICcvJyB0byBjb3JyZWN0bHkgc2VydmUKICAgICAgLy8gaW5kZXguaHRtbC4KICAgICAgcmVxdWVzdC5yZXNwb25zZS5yZWRpcmVjdChyZXN1bHQgYXMgVXJpKTsKICAgICAgcmVxdWVzdC5yZXNwb25zZS5jbG9zZSgpOwogICAgICByZXR1cm47CiAgICB9CgogICAgZmluYWwgU3RyaW5nIHBhdGggPSByZXN1bHQ7CiAgICBpZiAocGF0aCA9PSBXRUJTT0NLRVRfUEFUSCkgewogICAgICBXZWJTb2NrZXRUcmFuc2Zvcm1lci51cGdyYWRlKHJlcXVlc3QsCiAgICAgICAgICAgICAgY29tcHJlc3Npb246IENvbXByZXNzaW9uT3B0aW9ucy5jb21wcmVzc2lvbk9mZikKICAgICAgICAgIC50aGVuKChXZWJTb2NrZXQgd2ViU29ja2V0KSB7CiAgICAgICAgbmV3IFdlYlNvY2tldENsaWVudCh3ZWJTb2NrZXQsIF9zZXJ2aWNlKTsKICAgICAgfSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoYXNzZXRzID09IG51bGwpIHsKICAgICAgcmVxdWVzdC5yZXNwb25zZS5oZWFkZXJzLmNvbnRlbnRUeXBlID0gQ29udGVudFR5cGUuVEVYVDsKICAgICAgcmVxdWVzdC5yZXNwb25zZS53cml0ZSgiVGhpcyBWTSB3YXMgYnVpbHQgd2l0aG91dCB0aGUgT2JzZXJ2YXRvcnkgVUkuIik7CiAgICAgIHJlcXVlc3QucmVzcG9uc2UuY2xvc2UoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgQXNzZXQgYXNzZXQgPSBhc3NldHNbcGF0aF07CiAgICBpZiAoYXNzZXQgIT0gbnVsbCkgewogICAgICAvLyBTZXJ2aW5nIHVwIGEgc3RhdGljIGFzc2V0IChlLmcuIC5jc3MsIC5odG1sLCAucG5nKS4KICAgICAgcmVxdWVzdC5yZXNwb25zZS5oZWFkZXJzLmNvbnRlbnRUeXBlID0gQ29udGVudFR5cGUucGFyc2UoYXNzZXQubWltZVR5cGUpOwogICAgICByZXF1ZXN0LnJlc3BvbnNlLmFkZChhc3NldC5kYXRhKTsKICAgICAgcmVxdWVzdC5yZXNwb25zZS5jbG9zZSgpOwogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBIVFRQIGJhc2VkIHNlcnZpY2UgcmVxdWVzdC4KICAgIGZpbmFsIGNsaWVudCA9IG5ldyBIdHRwUmVxdWVzdENsaWVudChyZXF1ZXN0LCBfc2VydmljZSk7CiAgICBmaW5hbCBtZXNzYWdlID0gbmV3IE1lc3NhZ2UuZnJvbVVyaSgKICAgICAgICBjbGllbnQsIFVyaShwYXRoOiBwYXRoLCBxdWVyeVBhcmFtZXRlcnM6IHJlcXVlc3QudXJpLnF1ZXJ5UGFyYW1ldGVycykpOwogICAgY2xpZW50Lm9uUmVxdWVzdChtZXNzYWdlKTsgLy8gZXhjZXB0aW9uIGZyZWUsIG5vIG5lZWQgdG8gdHJ5IGNhdGNoCiAgfQoKICBGdXR1cmU8dm9pZD4gX2R1bXBTZXJ2aWNlSW5mb1RvRmlsZSgpIGFzeW5jIHsKICAgIGZpbmFsIHNlcnZpY2VJbmZvID0gPFN0cmluZywgZHluYW1pYz57CiAgICAgICd1cmknOiBzZXJ2ZXJBZGRyZXNzLnRvU3RyaW5nKCksCiAgICB9OwogICAgZmluYWwgZmlsZSA9IEZpbGUuZnJvbVVyaShVcmkucGFyc2UoX3NlcnZpY2VJbmZvRmlsZW5hbWUpKTsKICAgIHJldHVybiBmaWxlLndyaXRlQXNTdHJpbmcoanNvbi5lbmNvZGUoc2VydmljZUluZm8pKTsKICB9CgogIEZ1dHVyZSBzdGFydHVwKCkgYXN5bmMgewogICAgaWYgKF9zZXJ2ZXIgIT0gbnVsbCkgewogICAgICAvLyBBbHJlYWR5IHJ1bm5pbmcuCiAgICAgIHJldHVybiB0aGlzOwogICAgfQoKICAgIC8vIFN0YXJ0dXAgSFRUUCBzZXJ2ZXIuCiAgICB2YXIgcG9sbEVycm9yOwogICAgdmFyIHBvbGxTdGFjazsKICAgIEZ1dHVyZTxib29sPiBwb2xsKCkgYXN5bmMgewogICAgICB0cnkgewogICAgICAgIHZhciBhZGRyZXNzOwogICAgICAgIHZhciBhZGRyZXNzZXMgPSBhd2FpdCBJbnRlcm5ldEFkZHJlc3MubG9va3VwKF9pcCk7CiAgICAgICAgLy8gUHJlZmVyIElQdjQgYWRkcmVzc2VzLgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWRkcmVzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBhZGRyZXNzID0gYWRkcmVzc2VzW2ldOwogICAgICAgICAgaWYgKGFkZHJlc3MudHlwZSA9PSBJbnRlcm5ldEFkZHJlc3NUeXBlLklQX1Y0KSBicmVhazsKICAgICAgICB9CiAgICAgICAgX3NlcnZlciA9IGF3YWl0IEh0dHBTZXJ2ZXIuYmluZChhZGRyZXNzLCBfcG9ydCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0gY2F0Y2ggKGUsIHN0KSB7CiAgICAgICAgcG9sbEVycm9yID0gZTsKICAgICAgICBwb2xsU3RhY2sgPSBzdDsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KCiAgICAvLyBwb2xsIGZvciB0aGUgbmV0d29yayBmb3IgfjEwIHNlY29uZHMuCiAgICBpbnQgYXR0ZW1wdHMgPSAwOwogICAgZmluYWwgaW50IG1heEF0dGVtcHRzID0gMTA7CiAgICB3aGlsZSAoIWF3YWl0IHBvbGwoKSkgewogICAgICBhdHRlbXB0cysrOwogICAgICBzZXJ2ZXJQcmludCgiT2JzZXJ2YXRvcnkgc2VydmVyIGZhaWxlZCB0byBzdGFydCBhZnRlciAkYXR0ZW1wdHMgdHJpZXMiKTsKICAgICAgaWYgKGF0dGVtcHRzID4gbWF4QXR0ZW1wdHMpIHsKICAgICAgICBzZXJ2ZXJQcmludCgnQ291bGQgbm90IHN0YXJ0IE9ic2VydmF0b3J5IEhUVFAgc2VydmVyOlxuJwogICAgICAgICAgICAnJHBvbGxFcnJvclxuJHBvbGxTdGFja1xuJyk7CiAgICAgICAgX25vdGlmeVNlcnZlclN0YXRlKCIiKTsKICAgICAgICBvblNlcnZlckFkZHJlc3NDaGFuZ2UobnVsbCk7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgICAgaWYgKF9wb3J0ICE9IDAgJiYgX2VuYWJsZVNlcnZpY2VQb3J0RmFsbGJhY2sgJiYgYXR0ZW1wdHMgPj0gMykgewogICAgICAgIF9wb3J0ID0gMDsKICAgICAgICBzZXJ2ZXJQcmludCgnRmFsbGluZyBiYWNrIHRvIGF1dG9tYXRpYyBwb3J0IHNlbGVjdGlvbicpOwogICAgICB9CiAgICAgIGF3YWl0IG5ldyBGdXR1cmU8TnVsbD4uZGVsYXllZChjb25zdCBEdXJhdGlvbihzZWNvbmRzOiAxKSk7CiAgICB9CiAgICBpZiAoX3NlcnZpY2UuaXNFeGl0aW5nKSB7CiAgICAgIHNlcnZlclByaW50KCdPYnNlcnZhdG9yeSBIVFRQIHNlcnZlciBleGl0aW5nIGJlZm9yZSBsaXN0ZW5pbmcgYXMgJwogICAgICAgICAgJ3ZtIHNlcnZpY2UgaGFzIHJlY2VpdmVkIGV4aXQgcmVxdWVzdFxuJyk7CiAgICAgIGF3YWl0IHNodXRkb3duKHRydWUpOwogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIF9zZXJ2ZXIubGlzdGVuKF9yZXF1ZXN0SGFuZGxlciwgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICBzZXJ2ZXJQcmludCgnT2JzZXJ2YXRvcnkgbGlzdGVuaW5nIG9uICRzZXJ2ZXJBZGRyZXNzJyk7CiAgICBpZiAoUGxhdGZvcm0uaXNGdWNoc2lhKSB7CiAgICAgIC8vIENyZWF0ZSBhIGZpbGUgd2l0aCB0aGUgcG9ydCBudW1iZXIuCiAgICAgIFN0cmluZyB0bXAgPSBEaXJlY3Rvcnkuc3lzdGVtVGVtcC5wYXRoOwogICAgICBTdHJpbmcgcGF0aCA9ICIkdG1wL2RhcnQuc2VydmljZXMvJHtfc2VydmVyLnBvcnR9IjsKICAgICAgc2VydmVyUHJpbnQoIkNyZWF0aW5nICRwYXRoIik7CiAgICAgIG5ldyBGaWxlKHBhdGgpLi5jcmVhdGVTeW5jKHJlY3Vyc2l2ZTogdHJ1ZSk7CiAgICB9CiAgICBpZiAoX3NlcnZpY2VJbmZvRmlsZW5hbWUgIT0gbnVsbCAmJiBfc2VydmljZUluZm9GaWxlbmFtZS5pc05vdEVtcHR5KSB7CiAgICAgIGF3YWl0IF9kdW1wU2VydmljZUluZm9Ub0ZpbGUoKTsKICAgIH0KICAgIC8vIFNlcnZlciBpcyB1cCBhbmQgcnVubmluZy4KICAgIF9ub3RpZnlTZXJ2ZXJTdGF0ZShzZXJ2ZXJBZGRyZXNzLnRvU3RyaW5nKCkpOwogICAgb25TZXJ2ZXJBZGRyZXNzQ2hhbmdlKCckc2VydmVyQWRkcmVzcycpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBGdXR1cmUgY2xlYW51cChib29sIGZvcmNlKSB7CiAgICBpZiAoX3NlcnZlciA9PSBudWxsKSB7CiAgICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKG51bGwpOwogICAgfQogICAgaWYgKFBsYXRmb3JtLmlzRnVjaHNpYSkgewogICAgICAvLyBSZW1vdmUgdGhlIGZpbGUgd2l0aCB0aGUgcG9ydCBudW1iZXIuCiAgICAgIFN0cmluZyB0bXAgPSBEaXJlY3Rvcnkuc3lzdGVtVGVtcC5wYXRoOwogICAgICBTdHJpbmcgcGF0aCA9ICIkdG1wL2RhcnQuc2VydmljZXMvJHtfc2VydmVyLnBvcnR9IjsKICAgICAgc2VydmVyUHJpbnQoIkRlbGV0aW5nICRwYXRoIik7CiAgICAgIG5ldyBGaWxlKHBhdGgpLi5kZWxldGVTeW5jKCk7CiAgICB9CiAgICByZXR1cm4gX3NlcnZlci5jbG9zZShmb3JjZTogZm9yY2UpOwogIH0KCiAgRnV0dXJlIHNodXRkb3duKGJvb2wgZm9yY2VkKSB7CiAgICBpZiAoX3NlcnZlciA9PSBudWxsKSB7CiAgICAgIC8vIE5vdCBzdGFydGVkLgogICAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZSh0aGlzKTsKICAgIH0KCiAgICAvLyBTaHV0ZG93biBIVFRQIHNlcnZlciBhbmQgc3Vic2NyaXB0aW9uLgogICAgVXJpIG9sZFNlcnZlckFkZHJlc3MgPSBzZXJ2ZXJBZGRyZXNzOwogICAgcmV0dXJuIGNsZWFudXAoZm9yY2VkKS50aGVuKChfKSB7CiAgICAgIHNlcnZlclByaW50KCdPYnNlcnZhdG9yeSBubyBsb25nZXIgbGlzdGVuaW5nIG9uICRvbGRTZXJ2ZXJBZGRyZXNzJyk7CiAgICAgIF9zZXJ2ZXIgPSBudWxsOwogICAgICBfbm90aWZ5U2VydmVyU3RhdGUoIiIpOwogICAgICBvblNlcnZlckFkZHJlc3NDaGFuZ2UobnVsbCk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSkuY2F0Y2hFcnJvcigoZSwgc3QpIHsKICAgICAgX3NlcnZlciA9IG51bGw7CiAgICAgIHNlcnZlclByaW50KCdDb3VsZCBub3Qgc2h1dGRvd24gT2JzZXJ2YXRvcnkgSFRUUCBzZXJ2ZXI6XG4kZVxuJHN0XG4nKTsKICAgICAgX25vdGlmeVNlcnZlclN0YXRlKCIiKTsKICAgICAgb25TZXJ2ZXJBZGRyZXNzQ2hhbmdlKG51bGwpOwogICAgICByZXR1cm4gdGhpczsKICAgIH0pOwogIH0KfQoKdm9pZCBfbm90aWZ5U2VydmVyU3RhdGUoU3RyaW5nIHVyaSkgbmF0aXZlICJWTVNlcnZpY2VJT19Ob3RpZnlTZXJ2ZXJTdGF0ZSI7CoH2AE5OPAEPARYBTwEdGyoMBAwCAScsNS4pGgFFPSYEAREaFgYEASUdDwwkFEMQCBlJEAgMOBwkHBMpIRMlHRMKFDAIDUwGBAEfGhUOBgodKSkmES0uEQggJg4GBAEVHiUfEAQCASknQB0BNSsBER4NBAEfGg8OBi45PjQbJygPKyYPJzEGFg0EARUeJyEQBAIBDyczARwUIyEpJRYnEgE7GhQTBiYdQUYEAWNGChUQEiEeISdIASkNCh8SFAYBSR0lHyUTBgEmMjMTBgESBAErIBcTBjNEGzArBhtQEwYlJhUIBhIEAU5ILzYeTAZGJxQTBjA1KRQTBj9PKzdRAVAZHAE9BkkqHToEATYiMzoyIA4GIz0BFxcdHBUVFAEMRTUgASY9SVArCgEmHTdBT01GEyQMCiEBFQxNQBRGIyIQCAEcLy8oCCAOBiMoQTQgDgYBQxpQNTpIIA4gTksVMCAOBgEgIiw+KDIKDgYBGj9PIA4GIBk9UCggDgYjPSlQRwQBMCsnB0A5BAEbGxoTBgEcExMgDBU7IjUiQAo5FRgXGBYIBgEtFiAcEk8kQSkgJRUIRxNBCEIGHkk1HBMGOjweLS46JTMGSyYGITItEQQBHxslBh4vLjolJAYoBAEhGxYlBgEuKiZLFh4jExwWTR4jEwgEAgFMASdkYXJ0OnZtc2VydmljZV9pby92bXNlcnZpY2Vfc2VydmVyLmRhcnQqb3JnLWRhcnRsYW5nLXNkazovLy9mbHV0dGVyL2xpYi91aS91aS5kYXJ0hJsvLyBDb3B5cmlnaHQgMjAxMyBUaGUgRmx1dHRlciBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgovLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gQnVpbHQtaW4gdHlwZXMgYW5kIGNvcmUgcHJpbWl0aXZlcyBmb3IgYSBGbHV0dGVyIGFwcGxpY2F0aW9uLgovLy8KLy8vIFRvIHVzZSwgaW1wb3J0IGBkYXJ0OnVpYC4KLy8vCi8vLyBUaGlzIGxpYnJhcnkgZXhwb3NlcyB0aGUgbG93ZXN0LWxldmVsIHNlcnZpY2VzIHRoYXQgRmx1dHRlciBmcmFtZXdvcmtzIHVzZQovLy8gdG8gYm9vdHN0cmFwIGFwcGxpY2F0aW9ucywgc3VjaCBhcyBjbGFzc2VzIGZvciBkcml2aW5nIHRoZSBpbnB1dCwgZ3JhcGhpY3MKLy8vIHRleHQsIGxheW91dCwgYW5kIHJlbmRlcmluZyBzdWJzeXN0ZW1zLgpsaWJyYXJ5IGRhcnQudWk7CgppbXBvcnQgJ2RhcnQ6X2ludGVybmFsJyBoaWRlIFN5bWJvbDsgLy8gaWdub3JlOiBpbXBvcnRfaW50ZXJuYWxfbGlicmFyeSwgdW51c2VkX2ltcG9ydAppbXBvcnQgJ2RhcnQ6YXN5bmMnOwppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbicgYXMgY29sbGVjdGlvbjsKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwppbXBvcnQgJ2RhcnQ6ZGV2ZWxvcGVyJyBhcyBkZXZlbG9wZXI7CmltcG9ydCAnZGFydDppbyc7IC8vIGlnbm9yZTogdW51c2VkX2ltcG9ydAppbXBvcnQgJ2RhcnQ6aXNvbGF0ZScgc2hvdyBTZW5kUG9ydDsKaW1wb3J0ICdkYXJ0Om1hdGgnIGFzIG1hdGg7CmltcG9ydCAnZGFydDpuYXRpdmV3cmFwcGVycyc7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKCnBhcnQgJ2NoYW5uZWxfYnVmZmVycy5kYXJ0JzsKcGFydCAnY29tcG9zaXRpbmcuZGFydCc7CnBhcnQgJ2dlb21ldHJ5LmRhcnQnOwpwYXJ0ICdoYXNoX2NvZGVzLmRhcnQnOwpwYXJ0ICdob29rcy5kYXJ0JzsKcGFydCAnaXNvbGF0ZV9uYW1lX3NlcnZlci5kYXJ0JzsKcGFydCAnbGVycC5kYXJ0JzsKcGFydCAnbmF0aXZlcy5kYXJ0JzsKcGFydCAncGFpbnRpbmcuZGFydCc7CnBhcnQgJ3BsdWdpbnMuZGFydCc7CnBhcnQgJ3BvaW50ZXIuZGFydCc7CnBhcnQgJ3NlbWFudGljcy5kYXJ0JzsKcGFydCAndGV4dC5kYXJ0JzsKcGFydCAnd2luZG93LmRhcnQnOwooADxKHgFCBB4ET08sEQFXFSgXJislHB4aAR0ZFhgTIRIVFhUVFxIUAQdkYXJ0OnVpN29yZy1kYXJ0bGFuZy1zZGs6Ly8vZmx1dHRlci9saWIvdWkvY2hhbm5lbF9idWZmZXJzLmRhcnSfmS8vIENvcHlyaWdodCAyMDEzIFRoZSBGbHV0dGVyIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC51aTsKCi8vLyBBIHNhdmVkIHBsYXRmb3JtIG1lc3NhZ2UgZm9yIGEgY2hhbm5lbCB3aXRoIGl0cyBjYWxsYmFjay4KY2xhc3MgX1N0b3JlZE1lc3NhZ2UgewogIC8vLyBEZWZhdWx0IGNvbnN0cnVjdG9yLCB0YWtlcyBpbiBhIFtCeXRlRGF0YV0gdGhhdCByZXByZXNlbnRzIHRoZQogIC8vLyBwYXlsb2FkIG9mIHRoZSBtZXNzYWdlIGFuZCBhIFtQbGF0Zm9ybU1lc3NhZ2VSZXNwb25zZUNhbGxiYWNrXQogIC8vLyB0aGF0IHJlcHJlc2VudHMgdGhlIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgbWVzc2FnZQogIC8vLyBpcyBoYW5kbGVkLgogIF9TdG9yZWRNZXNzYWdlKHRoaXMuX2RhdGEsIHRoaXMuX2NhbGxiYWNrKTsKCiAgLy8vIFJlcHJlc2VudGF0aW9uIG9mIHRoZSBtZXNzYWdlJ3MgcGF5bG9hZC4KICBmaW5hbCBCeXRlRGF0YSBfZGF0YTsKICBCeXRlRGF0YSBnZXQgZGF0YSA9PiBfZGF0YTsKCiAgLy8vIENhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBtZXNzYWdlIGlzIHJlY2VpdmVkLgogIGZpbmFsIFBsYXRmb3JtTWVzc2FnZVJlc3BvbnNlQ2FsbGJhY2sgX2NhbGxiYWNrOwogIFBsYXRmb3JtTWVzc2FnZVJlc3BvbnNlQ2FsbGJhY2sgZ2V0IGNhbGxiYWNrID0+IF9jYWxsYmFjazsKfQoKLy8vIEEgZml4ZWQtc2l6ZSBjaXJjdWxhciBxdWV1ZS4KY2xhc3MgX1JpbmdCdWZmZXI8VD4gewogIC8vLyBUaGUgdW5kZXJseWluZyBkYXRhIGZvciB0aGUgUmluZ0J1ZmZlci4gIExpc3RRdWV1ZSdzIGR5bmFtaWNhbGx5IHJlc2l6ZSwKICAvLy8gW19SaW5nQnVmZmVyXXMgZG8gbm90LgogIGZpbmFsIGNvbGxlY3Rpb24uTGlzdFF1ZXVlPFQ+IF9xdWV1ZTsKCiAgX1JpbmdCdWZmZXIodGhpcy5fY2FwYWNpdHkpCiAgICA6IF9xdWV1ZSA9IGNvbGxlY3Rpb24uTGlzdFF1ZXVlPFQ+KF9jYXBhY2l0eSk7CgogIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIFtfUmluZ0J1ZmZlcl0uCiAgaW50IGdldCBsZW5ndGggPT4gX3F1ZXVlLmxlbmd0aDsKCiAgLy8vIFRoZSBudW1iZXIgb2YgaXRlbXMgdGhhdCBjYW4gYmUgc3RvcmVkIGluIHRoZSBbX1JpbmdCdWZmZXJdLgogIGludCBfY2FwYWNpdHk7CiAgaW50IGdldCBjYXBhY2l0eSA9PiBfY2FwYWNpdHk7CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIG5vIGl0ZW1zIGluIHRoZSBbX1JpbmdCdWZmZXJdLgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX3F1ZXVlLmlzRW1wdHk7CgogIC8vLyBBIGNhbGxiYWNrIHRoYXQgZ2V0J3MgY2FsbGVkIHdoZW4gaXRlbXMgYXJlIGVqZWN0ZWQgZnJvbSB0aGUgW19SaW5nQnVmZmVyXQogIC8vLyBieSB3YXkgb2YgYW4gb3ZlcmZsb3cgb3IgYSByZXNpemluZy4KICBGdW5jdGlvbihUKSBfZHJvcEl0ZW1DYWxsYmFjazsKICBzZXQgZHJvcEl0ZW1DYWxsYmFjayhGdW5jdGlvbihUKSBjYWxsYmFjaykgewogICAgX2Ryb3BJdGVtQ2FsbGJhY2sgPSBjYWxsYmFjazsKICB9CgogIC8vLyBSZXR1cm5zIHRydWUgb24gb3ZlcmZsb3cuCiAgYm9vbCBwdXNoKFQgdmFsKSB7CiAgICBpZiAoX2NhcGFjaXR5IDw9IDApIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgewogICAgICBmaW5hbCBpbnQgb3ZlcmZsb3dDb3VudCA9IF9kcm9wT3ZlcmZsb3dJdGVtcyhfY2FwYWNpdHkgLSAxKTsKICAgICAgX3F1ZXVlLmFkZExhc3QodmFsKTsKICAgICAgcmV0dXJuIG92ZXJmbG93Q291bnQgPiAwOwogICAgfQogIH0KCiAgLy8vIFJldHVybnMgbnVsbCB3aGVuIGVtcHR5LgogIFQgcG9wKCkgewogICAgcmV0dXJuIF9xdWV1ZS5pc0VtcHR5ID8gbnVsbCA6IF9xdWV1ZS5yZW1vdmVGaXJzdCgpOwogIH0KCiAgLy8vIFJlbW92ZXMgaXRlbXMgdW50aWwgdGhlbiBsZW5ndGggcmVhY2hlcyBbbGVuZ3RoTGltaXRdIGFuZCByZXR1cm5zCiAgLy8vIHRoZSBudW1iZXIgb2YgaXRlbXMgcmVtb3ZlZC4KICBpbnQgX2Ryb3BPdmVyZmxvd0l0ZW1zKGludCBsZW5ndGhMaW1pdCkgewogICAgaW50IHJlc3VsdCA9IDA7CiAgICB3aGlsZSAoX3F1ZXVlLmxlbmd0aCA+IGxlbmd0aExpbWl0KSB7CiAgICAgIGZpbmFsIFQgaXRlbSA9IF9xdWV1ZS5yZW1vdmVGaXJzdCgpOwogICAgICBpZiAoX2Ryb3BJdGVtQ2FsbGJhY2sgIT0gbnVsbCkgewogICAgICAgIF9kcm9wSXRlbUNhbGxiYWNrKGl0ZW0pOwogICAgICB9CiAgICAgIHJlc3VsdCArPSAxOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGlzY2FyZGVkIGl0ZW1zIHJlc3VsdGluZyBmcm9tIHJlc2l6ZS4KICBpbnQgcmVzaXplKGludCBuZXdTaXplKSB7CiAgICBfY2FwYWNpdHkgPSBuZXdTaXplOwogICAgcmV0dXJuIF9kcm9wT3ZlcmZsb3dJdGVtcyhuZXdTaXplKTsKICB9Cn0KCi8vLyBTaWduYXR1cmUgZm9yIFtDaGFubmVsQnVmZmVycy5kcmFpbl0uCnR5cGVkZWYgRHJhaW5DaGFubmVsQ2FsbGJhY2sgPSBGdXR1cmU8dm9pZD4gRnVuY3Rpb24oQnl0ZURhdGEsIFBsYXRmb3JtTWVzc2FnZVJlc3BvbnNlQ2FsbGJhY2spOwoKLy8vIFN0b3JhZ2Ugb2YgY2hhbm5lbCBtZXNzYWdlcyB1bnRpbCB0aGUgY2hhbm5lbHMgYXJlIGNvbXBsZXRlbHkgcm91dGVkLAovLy8gaS5lLiB3aGVuIGEgbWVzc2FnZSBoYW5kbGVyIGlzIGF0dGFjaGVkIHRvIHRoZSBjaGFubmVsIG9uIHRoZSBmcmFtZXdvcmsgc2lkZS4KLy8vCi8vLyBFYWNoIGNoYW5uZWwgaGFzIGEgZmluaXRlIGJ1ZmZlciBjYXBhY2l0eSBhbmQgaW4gYSBGSUZPIG1hbm5lciBtZXNzYWdlcyB3aWxsCi8vLyBiZSBkZWxldGVkIGlmIHRoZSBjYXBhY2l0eSBpcyBleGNlZWRlZC4gIFRoZSBpbnRlbnRpb24gaXMgdGhhdCB0aGVzZSBidWZmZXJzCi8vLyB3aWxsIGJlIGRyYWluZWQgb25jZSBhIGNhbGxiYWNrIGlzIHNldHVwIG9uIHRoZSBCaW5hcnlNZXNzZW5nZXIgaW4gdGhlCi8vLyBGbHV0dGVyIGZyYW1ld29yay4KLy8vCi8vLyBDbGllbnRzIG9mIEZsdXR0ZXIgc2hvdWxkbid0IG5lZWQgdG8gYWxsb2NhdGUgdGhlaXIgb3duIENoYW5uZWxCdWZmZXJzCi8vLyBhbmQgc2hvdWxkIG9ubHkgYWNjZXNzIHRoaXMgcGFja2FnZSdzIFtjaGFubmVsQnVmZmVyc10gaWYgdGhleSBhcmUgd3JpdGluZwovLy8gdGhlaXIgb3duIGN1c3RvbSBbQmluYXJ5TWVzc2VuZ2VyXS4KY2xhc3MgQ2hhbm5lbEJ1ZmZlcnMgewogIC8vLyBCeSBkZWZhdWx0IHdlIHN0b3JlIG9uZSBtZXNzYWdlIHBlciBjaGFubmVsLiAgVGhlcmUgYXJlIHRyYWRlb2ZmcyBhc3NvY2lhdGVkCiAgLy8vIHdpdGggYW55IHNpemUuICBUaGUgY29ycmVjdCBzaXplIHNob3VsZCBiZSBjaG9zZW4gZm9yIHRoZSBzZW1hbnRpY3Mgb2YgeW91cgogIC8vLyBjaGFubmVsLgogIC8vLwogIC8vLyBTaXplIDAgaW1wbGllcyB5b3Ugd2FudCB0byBpZ25vcmUgYW55IG1lc3NhZ2UgdGhhdCBnZXRzIHNlbnQgYmVmb3JlIHRoZSBlbmdpbmUKICAvLy8gaXMgcmVhZHkgKGtlZXBpbmcgaW4gbWluZCB0aGVyZSBpcyBubyB3YXkgdG8ga25vdyB3aGVuIHRoZSBlbmdpbmUgaXMgcmVhZHkpLgogIC8vLwogIC8vLyBTaXplIDEgaW1wbGllcyB0aGF0IHlvdSBvbmx5IGNhcmUgYWJvdXQgdGhlIG1vc3QgcmVjZW50IHZhbHVlLgogIC8vLwogIC8vLyBTaXplID4xIG1lYW5zIHlvdSB3YW50IHRvIHByb2Nlc3MgZXZlcnkgc2luZ2xlIG1lc3NhZ2UgYW5kIHdhbnQgdG8gY2hvc2UgYQogIC8vLyBidWZmZXIgc2l6ZSB0aGF0IHdpbGwgYXZvaWQgYW55IG92ZXJmbG93cy4KICBzdGF0aWMgY29uc3QgaW50IGtEZWZhdWx0QnVmZmVyU2l6ZSA9IDE7CgogIHN0YXRpYyBjb25zdCBTdHJpbmcga0NvbnRyb2xDaGFubmVsTmFtZSA9ICdkZXYuZmx1dHRlci9jaGFubmVsLWJ1ZmZlcnMnOwoKICAvLy8gQSBtYXBwaW5nIGJldHdlZW4gYSBjaGFubmVsIG5hbWUgYW5kIGl0cyBhc3NvY2lhdGVkIFtfUmluZ0J1ZmZlcl0uCiAgZmluYWwgTWFwPFN0cmluZywgX1JpbmdCdWZmZXI8X1N0b3JlZE1lc3NhZ2U+PiBfbWVzc2FnZXMgPQogICAgPFN0cmluZywgX1JpbmdCdWZmZXI8X1N0b3JlZE1lc3NhZ2U+Pnt9OwoKICBfUmluZ0J1ZmZlcjxfU3RvcmVkTWVzc2FnZT4gX21ha2VSaW5nQnVmZmVyKGludCBzaXplKSB7CiAgICBmaW5hbCBfUmluZ0J1ZmZlcjxfU3RvcmVkTWVzc2FnZT4gcmVzdWx0ID0gX1JpbmdCdWZmZXI8X1N0b3JlZE1lc3NhZ2U+KHNpemUpOwogICAgcmVzdWx0LmRyb3BJdGVtQ2FsbGJhY2sgPSBfb25Ecm9wSXRlbTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIF9vbkRyb3BJdGVtKF9TdG9yZWRNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIG1lc3NhZ2UuY2FsbGJhY2sobnVsbCk7CiAgfQoKICAvLy8gUmV0dXJucyB0cnVlIG9uIG92ZXJmbG93LgogIGJvb2wgcHVzaChTdHJpbmcgY2hhbm5lbCwgQnl0ZURhdGEgZGF0YSwgUGxhdGZvcm1NZXNzYWdlUmVzcG9uc2VDYWxsYmFjayBjYWxsYmFjaykgewogICAgX1JpbmdCdWZmZXI8X1N0b3JlZE1lc3NhZ2U+IHF1ZXVlID0gX21lc3NhZ2VzW2NoYW5uZWxdOwogICAgaWYgKHF1ZXVlID09IG51bGwpIHsKICAgICAgcXVldWUgPSBfbWFrZVJpbmdCdWZmZXIoa0RlZmF1bHRCdWZmZXJTaXplKTsKICAgICAgX21lc3NhZ2VzW2NoYW5uZWxdID0gcXVldWU7CiAgICB9CiAgICBmaW5hbCBib29sIGRpZE92ZXJmbG93ID0gcXVldWUucHVzaChfU3RvcmVkTWVzc2FnZShkYXRhLCBjYWxsYmFjaykpOwogICAgaWYgKGRpZE92ZXJmbG93KSB7CiAgICAgIC8vIFRPRE8oZ2FhY2xhcmtlKTogVXBkYXRlIHRoaXMgbWVzc2FnZSB0byBpbmNsdWRlIGluc3RydWN0aW9ucyBvbiBob3cgdG8gcmVzaXplCiAgICAgIC8vIHRoZSBidWZmZXIgb25jZSB0aGF0IGlzIGF2YWlsYWJsZSB0byB1c2VycyBhbmQgcHJpbnQgaW4gYWxsIGVuZ2luZSBidWlsZHMKICAgICAgLy8gYWZ0ZXIgd2UgdmVyaWZ5IHRoYXQgZHJvcHBpbmcgbWVzc2FnZXMgaXNuJ3QgcGFydCBvZiBub3JtYWwgZXhlY3V0aW9uLgogICAgICBfcHJpbnREZWJ1ZygnT3ZlcmZsb3cgb24gY2hhbm5lbDogJGNoYW5uZWwuICcKICAgICAgICAgICAgICAgICAgJ01lc3NhZ2VzIG9uIHRoaXMgY2hhbm5lbCBhcmUgYmVpbmcgZGlzY2FyZGVkIGluIEZJRk8gZmFzaGlvbi4gJwogICAgICAgICAgICAgICAgICAnVGhlIGVuZ2luZSBtYXkgbm90IGJlIHJ1bm5pbmcgb3IgeW91IG5lZWQgdG8gYWRqdXN0ICcKICAgICAgICAgICAgICAgICAgJ3RoZSBidWZmZXIgc2l6ZSBvZiB0aGUgY2hhbm5lbC4nKTsKICAgIH0KICAgIHJldHVybiBkaWRPdmVyZmxvdzsKICB9CgogIC8vLyBSZXR1cm5zIG51bGwgb24gdW5kZXJmbG93LgogIF9TdG9yZWRNZXNzYWdlIF9wb3AoU3RyaW5nIGNoYW5uZWwpIHsKICAgIGZpbmFsIF9SaW5nQnVmZmVyPF9TdG9yZWRNZXNzYWdlPiBxdWV1ZSA9IF9tZXNzYWdlc1tjaGFubmVsXTsKICAgIGZpbmFsIF9TdG9yZWRNZXNzYWdlIHJlc3VsdCA9IHF1ZXVlPy5wb3AoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBib29sIF9pc0VtcHR5KFN0cmluZyBjaGFubmVsKSB7CiAgICBmaW5hbCBfUmluZ0J1ZmZlcjxfU3RvcmVkTWVzc2FnZT4gcXVldWUgPSBfbWVzc2FnZXNbY2hhbm5lbF07CiAgICByZXR1cm4gKHF1ZXVlID09IG51bGwpID8gdHJ1ZSA6IHF1ZXVlLmlzRW1wdHk7CiAgfQoKICAvLy8gQ2hhbmdlcyB0aGUgY2FwYWNpdHkgb2YgdGhlIHF1ZXVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY2hhbm5lbC4KICAvLy8KICAvLy8gVGhpcyBjb3VsZCByZXN1bHQgaW4gdGhlIGRyb3BwaW5nIG9mIG1lc3NhZ2VzIGlmIG5ld1NpemUgaXMgbGVzcwogIC8vLyB0aGFuIHRoZSBjdXJyZW50IGxlbmd0aCBvZiB0aGUgcXVldWUuCiAgdm9pZCBfcmVzaXplKFN0cmluZyBjaGFubmVsLCBpbnQgbmV3U2l6ZSkgewogICAgX1JpbmdCdWZmZXI8X1N0b3JlZE1lc3NhZ2U+IHF1ZXVlID0gX21lc3NhZ2VzW2NoYW5uZWxdOwogICAgaWYgKHF1ZXVlID09IG51bGwpIHsKICAgICAgcXVldWUgPSBfbWFrZVJpbmdCdWZmZXIobmV3U2l6ZSk7CiAgICAgIF9tZXNzYWdlc1tjaGFubmVsXSA9IHF1ZXVlOwogICAgfSBlbHNlIHsKICAgICAgZmluYWwgaW50IG51bWJlck9mRHJvcHBlZE1lc3NhZ2VzID0gcXVldWUucmVzaXplKG5ld1NpemUpOwogICAgICBpZiAobnVtYmVyT2ZEcm9wcGVkTWVzc2FnZXMgPiAwKSB7CiAgICAgICAgX0xvZ2dlci5fcHJpbnRTdHJpbmcoJ0Ryb3BwaW5nIG1lc3NhZ2VzIG9uIGNoYW5uZWwgIiRjaGFubmVsIiBhcyBhIHJlc3VsdCBvZiBzaHJpbmtpbmcgdGhlIGJ1ZmZlciBzaXplLicpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gUmVtb3ZlIGFuZCBwcm9jZXNzIGFsbCBzdG9yZWQgbWVzc2FnZXMgZm9yIGEgZ2l2ZW4gY2hhbm5lbC4KICAvLy8KICAvLy8gVGhpcyBzaG91bGQgYmUgY2FsbGVkIG9uY2UgYSBjaGFubmVsIGlzIHByZXBhcmVkIHRvIGhhbmRsZSBtZXNzYWdlcwogIC8vLyAoaS5lLiB3aGVuIGEgbWVzc2FnZSBoYW5kbGVyIGlzIHNldHVwIGluIHRoZSBmcmFtZXdvcmspLgogIEZ1dHVyZTx2b2lkPiBkcmFpbihTdHJpbmcgY2hhbm5lbCwgRHJhaW5DaGFubmVsQ2FsbGJhY2sgY2FsbGJhY2spIGFzeW5jIHsKICAgIHdoaWxlICghX2lzRW1wdHkoY2hhbm5lbCkpIHsKICAgICAgZmluYWwgX1N0b3JlZE1lc3NhZ2UgbWVzc2FnZSA9IF9wb3AoY2hhbm5lbCk7CiAgICAgIGF3YWl0IGNhbGxiYWNrKG1lc3NhZ2UuZGF0YSwgbWVzc2FnZS5jYWxsYmFjayk7CiAgICB9CiAgfQoKICBTdHJpbmcgX2dldFN0cmluZyhCeXRlRGF0YSBkYXRhKSB7CiAgICBmaW5hbCBCeXRlQnVmZmVyIGJ1ZmZlciA9IGRhdGEuYnVmZmVyOwogICAgZmluYWwgVWludDhMaXN0IGxpc3QgPSBidWZmZXIuYXNVaW50OExpc3QoZGF0YS5vZmZzZXRJbkJ5dGVzLCBkYXRhLmxlbmd0aEluQnl0ZXMpOwogICAgcmV0dXJuIHV0ZjguZGVjb2RlKGxpc3QpOwogIH0KCiAgLy8vIEhhbmRsZSBhIGNvbnRyb2wgbWVzc2FnZS4KICAvLy8KICAvLy8gVGhpcyBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgYnkgdGhlIHBsYXRmb3JtIG1lc3NhZ2VzIGRpc3BhdGNoZXIuCiAgLy8vCiAgLy8vIEF2YWlsYWJsZSBtZXNzYWdlczoKICAvLy8gLSBOYW1lOiByZXNpemUKICAvLy8gICBBcml0eTogMgogIC8vLyAgIEZvcm1hdDogYHJlc2l6ZVxyPGNoYW5uZWwgbmFtZT5ccjxuZXcgc2l6ZT5gCiAgLy8vICAgRGVzY3JpcHRpb246IEFsbG93cyB5b3UgdG8gc2V0IHRoZSBzaXplIG9mIGEgY2hhbm5lbCdzIGJ1ZmZlci4KICB2b2lkIGhhbmRsZU1lc3NhZ2UoQnl0ZURhdGEgZGF0YSkgewogICAgZmluYWwgTGlzdDxTdHJpbmc+IGNvbW1hbmQgPSBfZ2V0U3RyaW5nKGRhdGEpLnNwbGl0KCdccicpOwogICAgaWYgKGNvbW1hbmQubGVuZ3RoID09IC8qYXJpdHk9Ki8yICsgMSAmJiBjb21tYW5kWzBdID09ICdyZXNpemUnKSB7CiAgICAgIF9yZXNpemUoY29tbWFuZFsxXSwgaW50LnBhcnNlKGNvbW1hbmRbMl0pKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IEV4Y2VwdGlvbignVW5yZWNvZ25pemVkIGNvbW1hbmQgJGNvbW1hbmQgc2VudCB0byAka0NvbnRyb2xDaGFubmVsTmFtZS4nKTsKICAgIH0KICB9Cn0KCi8vLyBbQ2hhbm5lbEJ1ZmZlcl1zIHRoYXQgYWxsb3cgdGhlIHN0b3JhZ2Ugb2YgbWVzc2FnZXMgYmV0d2VlbiB0aGUKLy8vIEVuZ2luZSBhbmQgdGhlIEZyYW1ld29yay4gIFR5cGljYWxseSBtZXNzYWdlcyB0aGF0IGNhbid0IGJlIGRlbGl2ZXJlZAovLy8gYXJlIHN0b3JlZCBoZXJlIHVudGlsIHRoZSBGcmFtZXdvcmsgaXMgYWJsZSB0byBwcm9jZXNzIHRoZW0uCi8vLwovLy8gU2VlIGFsc286Ci8vLyAqIFtCaW5hcnlNZXNzZW5nZXJdIC0gVGhlIHBsYWNlIHdoZXJlIENoYW5uZWxCdWZmZXJzIGFyZSB0eXBpY2FsbHkgcmVhZC4KZmluYWwgQ2hhbm5lbEJ1ZmZlcnMgY2hhbm5lbEJ1ZmZlcnMgPSBDaGFubmVsQnVmZmVycygpOwqA4AA8Sh4BEQE+F0VFSBIuAS8YHgE6Mz0CASEXTx0oAR4zATgjAUMRIQE/JgFRKyEvIgQBIBUaEw1DGyAGBAEfDDkEAUgjLBQqKychCBMGEwQBQxwZKAQCASphAUpSBFFRSxcES08oF1NSDwZVUwZFBlExKwFLAUk9LQE6UisTBAEtHAQBIFc8GTMiBkkXV1NQNFNJNgYYBAEhKEIwEwQBIkIzBAFLBkcsLjwZKCINQSlzCAYEAUIGSj9MITQ2BgQBJStXHgQBIAZJBhoVETVHJj9HMg1WBgQCAURKQQQOTTgBHGRhcnQ6dWkvY2hhbm5lbF9idWZmZXJzLmRhcnQtb3JnLWRhcnRsYW5nLXNkazovLy9mbHV0dGVyL2xpYi91aS9ob29rcy5kYXJ0scQvLyBDb3B5cmlnaHQgMjAxMyBUaGUgRmx1dHRlciBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgovLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBUT0RPKGRuZmllbGQpOiBSZW1vdmUgdW51c2VkX2ltcG9ydCBpZ25vcmVzIHdoZW4gaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9zZGsvaXNzdWVzLzM1MTY0IGlzIHJlc29sdmVkLgoKcGFydCBvZiBkYXJ0LnVpOwoKLy8gaWdub3JlOiB1bnVzZWRfZWxlbWVudApTdHJpbmcgX2RlY29kZVVURjgoQnl0ZURhdGEgbWVzc2FnZSkgewogIHJldHVybiBtZXNzYWdlICE9IG51bGwgPyB1dGY4LmRlY29kZXIuY29udmVydChtZXNzYWdlLmJ1ZmZlci5hc1VpbnQ4TGlzdCgpKSA6IG51bGw7Cn0KCi8vIGlnbm9yZTogdW51c2VkX2VsZW1lbnQKZHluYW1pYyBfZGVjb2RlSlNPTihTdHJpbmcgbWVzc2FnZSkgewogIHJldHVybiBtZXNzYWdlICE9IG51bGwgPyBqc29uLmRlY29kZShtZXNzYWdlKSA6IG51bGw7Cn0KCkBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKLy8gaWdub3JlOiB1bnVzZWRfZWxlbWVudAp2b2lkIF91cGRhdGVXaW5kb3dNZXRyaWNzKAogIGRvdWJsZSBkZXZpY2VQaXhlbFJhdGlvLAogIGRvdWJsZSB3aWR0aCwKICBkb3VibGUgaGVpZ2h0LAogIGRvdWJsZSBkZXB0aCwKICBkb3VibGUgdmlld1BhZGRpbmdUb3AsCiAgZG91YmxlIHZpZXdQYWRkaW5nUmlnaHQsCiAgZG91YmxlIHZpZXdQYWRkaW5nQm90dG9tLAogIGRvdWJsZSB2aWV3UGFkZGluZ0xlZnQsCiAgZG91YmxlIHZpZXdJbnNldFRvcCwKICBkb3VibGUgdmlld0luc2V0UmlnaHQsCiAgZG91YmxlIHZpZXdJbnNldEJvdHRvbSwKICBkb3VibGUgdmlld0luc2V0TGVmdCwKICBkb3VibGUgc3lzdGVtR2VzdHVyZUluc2V0VG9wLAogIGRvdWJsZSBzeXN0ZW1HZXN0dXJlSW5zZXRSaWdodCwKICBkb3VibGUgc3lzdGVtR2VzdHVyZUluc2V0Qm90dG9tLAogIGRvdWJsZSBzeXN0ZW1HZXN0dXJlSW5zZXRMZWZ0LAopIHsKICB3aW5kb3cKICAgIC4uX2RldmljZVBpeGVsUmF0aW8gPSBkZXZpY2VQaXhlbFJhdGlvCiAgICAuLl9waHlzaWNhbFNpemUgPSBTaXplKHdpZHRoLCBoZWlnaHQpCiAgICAuLl9waHlzaWNhbERlcHRoID0gZGVwdGgKICAgIC4uX3ZpZXdQYWRkaW5nID0gV2luZG93UGFkZGluZy5fKAogICAgICAgIHRvcDogdmlld1BhZGRpbmdUb3AsCiAgICAgICAgcmlnaHQ6IHZpZXdQYWRkaW5nUmlnaHQsCiAgICAgICAgYm90dG9tOiB2aWV3UGFkZGluZ0JvdHRvbSwKICAgICAgICBsZWZ0OiB2aWV3UGFkZGluZ0xlZnQpCiAgICAuLl92aWV3SW5zZXRzID0gV2luZG93UGFkZGluZy5fKAogICAgICAgIHRvcDogdmlld0luc2V0VG9wLAogICAgICAgIHJpZ2h0OiB2aWV3SW5zZXRSaWdodCwKICAgICAgICBib3R0b206IHZpZXdJbnNldEJvdHRvbSwKICAgICAgICBsZWZ0OiB2aWV3SW5zZXRMZWZ0KQogICAgLi5fcGFkZGluZyA9IFdpbmRvd1BhZGRpbmcuXygKICAgICAgICB0b3A6IG1hdGgubWF4KDAuMCwgdmlld1BhZGRpbmdUb3AgLSB2aWV3SW5zZXRUb3ApLAogICAgICAgIHJpZ2h0OiBtYXRoLm1heCgwLjAsIHZpZXdQYWRkaW5nUmlnaHQgLSB2aWV3SW5zZXRSaWdodCksCiAgICAgICAgYm90dG9tOiBtYXRoLm1heCgwLjAsIHZpZXdQYWRkaW5nQm90dG9tIC0gdmlld0luc2V0Qm90dG9tKSwKICAgICAgICBsZWZ0OiBtYXRoLm1heCgwLjAsIHZpZXdQYWRkaW5nTGVmdCAtIHZpZXdJbnNldExlZnQpKQogICAgLi5fc3lzdGVtR2VzdHVyZUluc2V0cyA9IFdpbmRvd1BhZGRpbmcuXygKICAgICAgICB0b3A6IG1hdGgubWF4KDAuMCwgc3lzdGVtR2VzdHVyZUluc2V0VG9wKSwKICAgICAgICByaWdodDogbWF0aC5tYXgoMC4wLCBzeXN0ZW1HZXN0dXJlSW5zZXRSaWdodCksCiAgICAgICAgYm90dG9tOiBtYXRoLm1heCgwLjAsIHN5c3RlbUdlc3R1cmVJbnNldEJvdHRvbSksCiAgICAgICAgbGVmdDogbWF0aC5tYXgoMC4wLCBzeXN0ZW1HZXN0dXJlSW5zZXRMZWZ0KSk7CiAgX2ludm9rZSh3aW5kb3cub25NZXRyaWNzQ2hhbmdlZCwgd2luZG93Ll9vbk1ldHJpY3NDaGFuZ2VkWm9uZSk7Cn0KCnR5cGVkZWYgX0xvY2FsZUNsb3N1cmUgPSBTdHJpbmcgRnVuY3Rpb24oKTsKClN0cmluZyBfbG9jYWxlQ2xvc3VyZSgpIHsKICBpZiAod2luZG93LmxvY2FsZSA9PSBudWxsKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgcmV0dXJuIHdpbmRvdy5sb2NhbGUudG9TdHJpbmcoKTsKfQoKQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQovLyBpZ25vcmU6IHVudXNlZF9lbGVtZW50Cl9Mb2NhbGVDbG9zdXJlIF9nZXRMb2NhbGVDbG9zdXJlKCkgPT4gX2xvY2FsZUNsb3N1cmU7CgpAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCi8vIGlnbm9yZTogdW51c2VkX2VsZW1lbnQKdm9pZCBfdXBkYXRlTG9jYWxlcyhMaXN0PFN0cmluZz4gbG9jYWxlcykgewogIGNvbnN0IGludCBzdHJpbmdzUGVyTG9jYWxlID0gNDsKICBmaW5hbCBpbnQgbnVtTG9jYWxlcyA9IGxvY2FsZXMubGVuZ3RoIH4vIHN0cmluZ3NQZXJMb2NhbGU7CiAgd2luZG93Ll9sb2NhbGVzID0gTGlzdDxMb2NhbGU+KG51bUxvY2FsZXMpOwogIGZvciAoaW50IGxvY2FsZUluZGV4ID0gMDsgbG9jYWxlSW5kZXggPCBudW1Mb2NhbGVzOyBsb2NhbGVJbmRleCsrKSB7CiAgICBmaW5hbCBTdHJpbmcgY291bnRyeUNvZGUgPSBsb2NhbGVzW2xvY2FsZUluZGV4ICogc3RyaW5nc1BlckxvY2FsZSArIDFdOwogICAgZmluYWwgU3RyaW5nIHNjcmlwdENvZGUgPSBsb2NhbGVzW2xvY2FsZUluZGV4ICogc3RyaW5nc1BlckxvY2FsZSArIDJdOwoKICAgIHdpbmRvdy5fbG9jYWxlc1tsb2NhbGVJbmRleF0gPSBMb2NhbGUuZnJvbVN1YnRhZ3MoCiAgICAgIGxhbmd1YWdlQ29kZTogbG9jYWxlc1tsb2NhbGVJbmRleCAqIHN0cmluZ3NQZXJMb2NhbGVdLAogICAgICBjb3VudHJ5Q29kZTogY291bnRyeUNvZGUuaXNFbXB0eSA/IG51bGwgOiBjb3VudHJ5Q29kZSwKICAgICAgc2NyaXB0Q29kZTogc2NyaXB0Q29kZS5pc0VtcHR5ID8gbnVsbCA6IHNjcmlwdENvZGUsCiAgICApOwogIH0KICBfaW52b2tlKHdpbmRvdy5vbkxvY2FsZUNoYW5nZWQsIHdpbmRvdy5fb25Mb2NhbGVDaGFuZ2VkWm9uZSk7Cn0KCkBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKLy8gaWdub3JlOiB1bnVzZWRfZWxlbWVudAp2b2lkIF91cGRhdGVVc2VyU2V0dGluZ3NEYXRhKFN0cmluZyBqc29uRGF0YSkgewogIGZpbmFsIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGRhdGEgPSBqc29uLmRlY29kZShqc29uRGF0YSkgYXMgTWFwPFN0cmluZywgZHluYW1pYz47CiAgaWYgKGRhdGEuaXNFbXB0eSkgewogICAgcmV0dXJuOwogIH0KICBfdXBkYXRlVGV4dFNjYWxlRmFjdG9yKChkYXRhWyd0ZXh0U2NhbGVGYWN0b3InXSBhcyBudW0pLnRvRG91YmxlKCkpOwogIF91cGRhdGVBbHdheXNVc2UyNEhvdXJGb3JtYXQoZGF0YVsnYWx3YXlzVXNlMjRIb3VyRm9ybWF0J10gYXMgYm9vbCk7CiAgX3VwZGF0ZVBsYXRmb3JtQnJpZ2h0bmVzcyhkYXRhWydwbGF0Zm9ybUJyaWdodG5lc3MnXSBhcyBTdHJpbmcpOwp9CgpAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCi8vIGlnbm9yZTogdW51c2VkX2VsZW1lbnQKdm9pZCBfdXBkYXRlTGlmZWN5Y2xlU3RhdGUoU3RyaW5nIHN0YXRlKSB7CiAgLy8gV2UgZG8gbm90IHVwZGF0ZSB0aGUgc3RhdGUgaWYgdGhlIHN0YXRlIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCB0byBpbml0aWFsaXplCiAgLy8gdGhlIGxpZmVjeWNsZVN0YXRlLgogIGlmICghd2luZG93Ll9pbml0aWFsTGlmZWN5Y2xlU3RhdGVBY2Nlc3NlZCkKICAgIHdpbmRvdy5faW5pdGlhbExpZmVjeWNsZVN0YXRlID0gc3RhdGU7Cn0KCgp2b2lkIF91cGRhdGVUZXh0U2NhbGVGYWN0b3IoZG91YmxlIHRleHRTY2FsZUZhY3RvcikgewogIHdpbmRvdy5fdGV4dFNjYWxlRmFjdG9yID0gdGV4dFNjYWxlRmFjdG9yOwogIF9pbnZva2Uod2luZG93Lm9uVGV4dFNjYWxlRmFjdG9yQ2hhbmdlZCwgd2luZG93Ll9vblRleHRTY2FsZUZhY3RvckNoYW5nZWRab25lKTsKfQoKdm9pZCBfdXBkYXRlQWx3YXlzVXNlMjRIb3VyRm9ybWF0KGJvb2wgYWx3YXlzVXNlMjRIb3VyRm9ybWF0KSB7CiAgd2luZG93Ll9hbHdheXNVc2UyNEhvdXJGb3JtYXQgPSBhbHdheXNVc2UyNEhvdXJGb3JtYXQ7Cn0KCnZvaWQgX3VwZGF0ZVBsYXRmb3JtQnJpZ2h0bmVzcyhTdHJpbmcgYnJpZ2h0bmVzc05hbWUpIHsKICB3aW5kb3cuX3BsYXRmb3JtQnJpZ2h0bmVzcyA9IGJyaWdodG5lc3NOYW1lID09ICdkYXJrJyA/IEJyaWdodG5lc3MuZGFyayA6IEJyaWdodG5lc3MubGlnaHQ7CiAgX2ludm9rZSh3aW5kb3cub25QbGF0Zm9ybUJyaWdodG5lc3NDaGFuZ2VkLCB3aW5kb3cuX29uUGxhdGZvcm1CcmlnaHRuZXNzQ2hhbmdlZFpvbmUpOwp9CgpAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCi8vIGlnbm9yZTogdW51c2VkX2VsZW1lbnQKdm9pZCBfdXBkYXRlU2VtYW50aWNzRW5hYmxlZChib29sIGVuYWJsZWQpIHsKICB3aW5kb3cuX3NlbWFudGljc0VuYWJsZWQgPSBlbmFibGVkOwogIF9pbnZva2Uod2luZG93Lm9uU2VtYW50aWNzRW5hYmxlZENoYW5nZWQsIHdpbmRvdy5fb25TZW1hbnRpY3NFbmFibGVkQ2hhbmdlZFpvbmUpOwp9CgpAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCi8vIGlnbm9yZTogdW51c2VkX2VsZW1lbnQKdm9pZCBfdXBkYXRlQWNjZXNzaWJpbGl0eUZlYXR1cmVzKGludCB2YWx1ZXMpIHsKICBmaW5hbCBBY2Nlc3NpYmlsaXR5RmVhdHVyZXMgbmV3RmVhdHVyZXMgPSBBY2Nlc3NpYmlsaXR5RmVhdHVyZXMuXyh2YWx1ZXMpOwogIGlmIChuZXdGZWF0dXJlcyA9PSB3aW5kb3cuX2FjY2Vzc2liaWxpdHlGZWF0dXJlcykKICAgIHJldHVybjsKICB3aW5kb3cuX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyA9IG5ld0ZlYXR1cmVzOwogIF9pbnZva2Uod2luZG93Lm9uQWNjZXNzaWJpbGl0eUZlYXR1cmVzQ2hhbmdlZCwgd2luZG93Ll9vbkFjY2Vzc2liaWxpdHlGbGFnc0NoYW5nZWRab25lKTsKfQoKQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQovLyBpZ25vcmU6IHVudXNlZF9lbGVtZW50CnZvaWQgX2Rpc3BhdGNoUGxhdGZvcm1NZXNzYWdlKFN0cmluZyBuYW1lLCBCeXRlRGF0YSBkYXRhLCBpbnQgcmVzcG9uc2VJZCkgewogIGlmIChuYW1lID09IENoYW5uZWxCdWZmZXJzLmtDb250cm9sQ2hhbm5lbE5hbWUpIHsKICAgIHRyeSB7CiAgICAgIGNoYW5uZWxCdWZmZXJzLmhhbmRsZU1lc3NhZ2UoZGF0YSk7CiAgICB9IGNhdGNoIChleCkgewogICAgICBfcHJpbnREZWJ1ZygnTWVzc2FnZSB0byAiJG5hbWUiIGNhdXNlZCBleGNlcHRpb24gJGV4Jyk7CiAgICB9IGZpbmFsbHkgewogICAgICB3aW5kb3cuX3Jlc3BvbmRUb1BsYXRmb3JtTWVzc2FnZShyZXNwb25zZUlkLCBudWxsKTsKICAgIH0KICB9IGVsc2UgaWYgKHdpbmRvdy5vblBsYXRmb3JtTWVzc2FnZSAhPSBudWxsKSB7CiAgICBfaW52b2tlMzxTdHJpbmcsIEJ5dGVEYXRhLCBQbGF0Zm9ybU1lc3NhZ2VSZXNwb25zZUNhbGxiYWNrPigKICAgICAgd2luZG93Lm9uUGxhdGZvcm1NZXNzYWdlLAogICAgICB3aW5kb3cuX29uUGxhdGZvcm1NZXNzYWdlWm9uZSwKICAgICAgbmFtZSwKICAgICAgZGF0YSwKICAgICAgKEJ5dGVEYXRhIHJlc3BvbnNlRGF0YSkgewogICAgICAgIHdpbmRvdy5fcmVzcG9uZFRvUGxhdGZvcm1NZXNzYWdlKHJlc3BvbnNlSWQsIHJlc3BvbnNlRGF0YSk7CiAgICAgIH0sCiAgICApOwogIH0gZWxzZSB7CiAgICBjaGFubmVsQnVmZmVycy5wdXNoKG5hbWUsIGRhdGEsIChCeXRlRGF0YSByZXNwb25zZURhdGEpIHsKICAgICAgd2luZG93Ll9yZXNwb25kVG9QbGF0Zm9ybU1lc3NhZ2UocmVzcG9uc2VJZCwgcmVzcG9uc2VEYXRhKTsKICAgIH0pOwogIH0KfQoKQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQovLyBpZ25vcmU6IHVudXNlZF9lbGVtZW50CnZvaWQgX2Rpc3BhdGNoUG9pbnRlckRhdGFQYWNrZXQoQnl0ZURhdGEgcGFja2V0KSB7CiAgaWYgKHdpbmRvdy5vblBvaW50ZXJEYXRhUGFja2V0ICE9IG51bGwpCiAgICBfaW52b2tlMTxQb2ludGVyRGF0YVBhY2tldD4od2luZG93Lm9uUG9pbnRlckRhdGFQYWNrZXQsIHdpbmRvdy5fb25Qb2ludGVyRGF0YVBhY2tldFpvbmUsIF91bnBhY2tQb2ludGVyRGF0YVBhY2tldChwYWNrZXQpKTsKfQoKQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQovLyBpZ25vcmU6IHVudXNlZF9lbGVtZW50CnZvaWQgX2Rpc3BhdGNoU2VtYW50aWNzQWN0aW9uKGludCBpZCwgaW50IGFjdGlvbiwgQnl0ZURhdGEgYXJncykgewogIF9pbnZva2UzPGludCwgU2VtYW50aWNzQWN0aW9uLCBCeXRlRGF0YT4oCiAgICB3aW5kb3cub25TZW1hbnRpY3NBY3Rpb24sCiAgICB3aW5kb3cuX29uU2VtYW50aWNzQWN0aW9uWm9uZSwKICAgIGlkLAogICAgU2VtYW50aWNzQWN0aW9uLnZhbHVlc1thY3Rpb25dLAogICAgYXJncywKICApOwp9CgpAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCi8vIGlnbm9yZTogdW51c2VkX2VsZW1lbnQKdm9pZCBfYmVnaW5GcmFtZShpbnQgbWljcm9zZWNvbmRzKSB7CiAgX2ludm9rZTE8RHVyYXRpb24+KHdpbmRvdy5vbkJlZ2luRnJhbWUsIHdpbmRvdy5fb25CZWdpbkZyYW1lWm9uZSwgRHVyYXRpb24obWljcm9zZWNvbmRzOiBtaWNyb3NlY29uZHMpKTsKfQoKQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQovLyBpZ25vcmU6IHVudXNlZF9lbGVtZW50CnZvaWQgX3JlcG9ydFRpbWluZ3MoTGlzdDxpbnQ+IHRpbWluZ3MpIHsKICBhc3NlcnQodGltaW5ncy5sZW5ndGggJSBGcmFtZVBoYXNlLnZhbHVlcy5sZW5ndGggPT0gMCk7CiAgZmluYWwgTGlzdDxGcmFtZVRpbWluZz4gZnJhbWVUaW1pbmdzID0gPEZyYW1lVGltaW5nPltdOwogIGZvciAoaW50IGkgPSAwOyBpIDwgdGltaW5ncy5sZW5ndGg7IGkgKz0gRnJhbWVQaGFzZS52YWx1ZXMubGVuZ3RoKSB7CiAgICBmcmFtZVRpbWluZ3MuYWRkKEZyYW1lVGltaW5nKHRpbWluZ3Muc3VibGlzdChpLCBpICsgRnJhbWVQaGFzZS52YWx1ZXMubGVuZ3RoKSkpOwogIH0KICBfaW52b2tlMSh3aW5kb3cub25SZXBvcnRUaW1pbmdzLCB3aW5kb3cuX29uUmVwb3J0VGltaW5nc1pvbmUsIGZyYW1lVGltaW5ncyk7Cn0KCkBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKLy8gaWdub3JlOiB1bnVzZWRfZWxlbWVudAp2b2lkIF9kcmF3RnJhbWUoKSB7CiAgX2ludm9rZSh3aW5kb3cub25EcmF3RnJhbWUsIHdpbmRvdy5fb25EcmF3RnJhbWVab25lKTsKfQoKLy8gaWdub3JlOiBhbHdheXNfZGVjbGFyZV9yZXR1cm5fdHlwZXMsIHByZWZlcl9nZW5lcmljX2Z1bmN0aW9uX3R5cGVfYWxpYXNlcwp0eXBlZGVmIF9VbmFyeUZ1bmN0aW9uKE51bGwgYXJncyk7Ci8vIGlnbm9yZTogYWx3YXlzX2RlY2xhcmVfcmV0dXJuX3R5cGVzLCBwcmVmZXJfZ2VuZXJpY19mdW5jdGlvbl90eXBlX2FsaWFzZXMKdHlwZWRlZiBfQmluYXJ5RnVuY3Rpb24oTnVsbCBhcmdzLCBOdWxsIG1lc3NhZ2UpOwoKQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQovLyBpZ25vcmU6IHVudXNlZF9lbGVtZW50CnZvaWQgX3J1bk1haW5ab25lZChGdW5jdGlvbiBzdGFydE1haW5Jc29sYXRlRnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiB1c2VyTWFpbkZ1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgTGlzdDxTdHJpbmc+IGFyZ3MpIHsKICBzdGFydE1haW5Jc29sYXRlRnVuY3Rpb24oKCl7CiAgICBydW5ab25lZDx2b2lkPigoKSB7CiAgICAgIGlmICh1c2VyTWFpbkZ1bmN0aW9uIGlzIF9CaW5hcnlGdW5jdGlvbikgewogICAgICAgIC8vIFRoaXMgc2VlbXMgdG8gYmUgdW5kb2N1bWVudGVkIGJ1dCBzdXBwb3J0ZWQgYnkgdGhlIGNvbW1hbmQgbGluZSBWTS4KICAgICAgICAvLyBMZXQncyBkbyB0aGUgc2FtZSBpbiBjYXNlIG9sZCBlbnRyeS1wb2ludHMgYXJlIHBvcnRlZCB0byBGbHV0dGVyLgogICAgICAgICh1c2VyTWFpbkZ1bmN0aW9uIGFzIGR5bmFtaWMpKGFyZ3MsICcnKTsKICAgICAgfSBlbHNlIGlmICh1c2VyTWFpbkZ1bmN0aW9uIGlzIF9VbmFyeUZ1bmN0aW9uKSB7CiAgICAgICAgKHVzZXJNYWluRnVuY3Rpb24gYXMgZHluYW1pYykoYXJncyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdXNlck1haW5GdW5jdGlvbigpOwogICAgICB9CiAgICB9LCBvbkVycm9yOiAoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgICAgX3JlcG9ydFVuaGFuZGxlZEV4Y2VwdGlvbihlcnJvci50b1N0cmluZygpLCBzdGFja1RyYWNlLnRvU3RyaW5nKCkpOwogICAgfSk7CiAgfSwgbnVsbCk7Cn0KCnZvaWQgX3JlcG9ydFVuaGFuZGxlZEV4Y2VwdGlvbihTdHJpbmcgZXJyb3IsIFN0cmluZyBzdGFja1RyYWNlKSBuYXRpdmUgJ1dpbmRvd19yZXBvcnRVbmhhbmRsZWRFeGNlcHRpb24nOwoKLy8vIEludm9rZXMgW2NhbGxiYWNrXSBpbnNpZGUgdGhlIGdpdmVuIFt6b25lXS4Kdm9pZCBfaW52b2tlKHZvaWQgY2FsbGJhY2soKSwgWm9uZSB6b25lKSB7CiAgaWYgKGNhbGxiYWNrID09IG51bGwpCiAgICByZXR1cm47CgogIGFzc2VydCh6b25lICE9IG51bGwpOwoKICBpZiAoaWRlbnRpY2FsKHpvbmUsIFpvbmUuY3VycmVudCkpIHsKICAgIGNhbGxiYWNrKCk7CiAgfSBlbHNlIHsKICAgIHpvbmUucnVuR3VhcmRlZChjYWxsYmFjayk7CiAgfQp9CgovLy8gSW52b2tlcyBbY2FsbGJhY2tdIGluc2lkZSB0aGUgZ2l2ZW4gW3pvbmVdIHBhc3NpbmcgaXQgW2FyZ10uCnZvaWQgX2ludm9rZTE8QT4odm9pZCBjYWxsYmFjayhBIGEpLCBab25lIHpvbmUsIEEgYXJnKSB7CiAgaWYgKGNhbGxiYWNrID09IG51bGwpCiAgICByZXR1cm47CgogIGFzc2VydCh6b25lICE9IG51bGwpOwoKICBpZiAoaWRlbnRpY2FsKHpvbmUsIFpvbmUuY3VycmVudCkpIHsKICAgIGNhbGxiYWNrKGFyZyk7CiAgfSBlbHNlIHsKICAgIHpvbmUucnVuVW5hcnlHdWFyZGVkPEE+KGNhbGxiYWNrLCBhcmcpOwogIH0KfQoKLy8vIEludm9rZXMgW2NhbGxiYWNrXSBpbnNpZGUgdGhlIGdpdmVuIFt6b25lXSBwYXNzaW5nIGl0IFthcmcxXSBhbmQgW2FyZzJdLgovLyBpZ25vcmU6IHVudXNlZF9lbGVtZW50CnZvaWQgX2ludm9rZTI8QTEsIEEyPih2b2lkIGNhbGxiYWNrKEExIGExLCBBMiBhMiksIFpvbmUgem9uZSwgQTEgYXJnMSwgQTIgYXJnMikgewogIGlmIChjYWxsYmFjayA9PSBudWxsKQogICAgcmV0dXJuOwoKICBhc3NlcnQoem9uZSAhPSBudWxsKTsKCiAgaWYgKGlkZW50aWNhbCh6b25lLCBab25lLmN1cnJlbnQpKSB7CiAgICBjYWxsYmFjayhhcmcxLCBhcmcyKTsKICB9IGVsc2UgewogICAgem9uZS5ydW5CaW5hcnlHdWFyZGVkPEExLCBBMj4oY2FsbGJhY2ssIGFyZzEsIGFyZzIpOwogIH0KfQoKLy8vIEludm9rZXMgW2NhbGxiYWNrXSBpbnNpZGUgdGhlIGdpdmVuIFt6b25lXSBwYXNzaW5nIGl0IFthcmcxXSwgW2FyZzJdIGFuZCBbYXJnM10uCnZvaWQgX2ludm9rZTM8QTEsIEEyLCBBMz4odm9pZCBjYWxsYmFjayhBMSBhMSwgQTIgYTIsIEEzIGEzKSwgWm9uZSB6b25lLCBBMSBhcmcxLCBBMiBhcmcyLCBBMyBhcmczKSB7CiAgaWYgKGNhbGxiYWNrID09IG51bGwpCiAgICByZXR1cm47CgogIGFzc2VydCh6b25lICE9IG51bGwpOwoKICBpZiAoaWRlbnRpY2FsKHpvbmUsIFpvbmUuY3VycmVudCkpIHsKICAgIGNhbGxiYWNrKGFyZzEsIGFyZzIsIGFyZzMpOwogIH0gZWxzZSB7CiAgICB6b25lLnJ1bkd1YXJkZWQoKCkgewogICAgICBjYWxsYmFjayhhcmcxLCBhcmcyLCBhcmczKTsKICAgIH0pOwogIH0KfQoKLy8gSWYgdGhpcyB2YWx1ZSBjaGFuZ2VzLCB1cGRhdGUgdGhlIGVuY29kaW5nIGNvZGUgaW4gdGhlIGZvbGxvd2luZyBmaWxlczoKLy8KLy8gICogcG9pbnRlcl9kYXRhLmNjCi8vICAqIHBvaW50ZXJzLmRhcnQKLy8gICogQW5kcm9pZFRvdWNoUHJvY2Vzc29yLmphdmEKY29uc3QgaW50IF9rUG9pbnRlckRhdGFGaWVsZENvdW50ID0gMjg7CgpQb2ludGVyRGF0YVBhY2tldCBfdW5wYWNrUG9pbnRlckRhdGFQYWNrZXQoQnl0ZURhdGEgcGFja2V0KSB7CiAgY29uc3QgaW50IGtTdHJpZGUgPSBJbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50OwogIGNvbnN0IGludCBrQnl0ZXNQZXJQb2ludGVyRGF0YSA9IF9rUG9pbnRlckRhdGFGaWVsZENvdW50ICoga1N0cmlkZTsKICBmaW5hbCBpbnQgbGVuZ3RoID0gcGFja2V0Lmxlbmd0aEluQnl0ZXMgfi8ga0J5dGVzUGVyUG9pbnRlckRhdGE7CiAgYXNzZXJ0KGxlbmd0aCAqIGtCeXRlc1BlclBvaW50ZXJEYXRhID09IHBhY2tldC5sZW5ndGhJbkJ5dGVzKTsKICBmaW5hbCBMaXN0PFBvaW50ZXJEYXRhPiBkYXRhID0gTGlzdDxQb2ludGVyRGF0YT4obGVuZ3RoKTsKICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICBpbnQgb2Zmc2V0ID0gaSAqIF9rUG9pbnRlckRhdGFGaWVsZENvdW50OwogICAgZGF0YVtpXSA9IFBvaW50ZXJEYXRhKAogICAgICB0aW1lU3RhbXA6IER1cmF0aW9uKG1pY3Jvc2Vjb25kczogcGFja2V0LmdldEludDY0KGtTdHJpZGUgKiBvZmZzZXQrKywgX2tGYWtlSG9zdEVuZGlhbikpLAogICAgICBjaGFuZ2U6IFBvaW50ZXJDaGFuZ2UudmFsdWVzW3BhY2tldC5nZXRJbnQ2NChrU3RyaWRlICogb2Zmc2V0KyssIF9rRmFrZUhvc3RFbmRpYW4pXSwKICAgICAga2luZDogUG9pbnRlckRldmljZUtpbmQudmFsdWVzW3BhY2tldC5nZXRJbnQ2NChrU3RyaWRlICogb2Zmc2V0KyssIF9rRmFrZUhvc3RFbmRpYW4pXSwKICAgICAgc2lnbmFsS2luZDogUG9pbnRlclNpZ25hbEtpbmQudmFsdWVzW3BhY2tldC5nZXRJbnQ2NChrU3RyaWRlICogb2Zmc2V0KyssIF9rRmFrZUhvc3RFbmRpYW4pXSwKICAgICAgZGV2aWNlOiBwYWNrZXQuZ2V0SW50NjQoa1N0cmlkZSAqIG9mZnNldCsrLCBfa0Zha2VIb3N0RW5kaWFuKSwKICAgICAgcG9pbnRlcklkZW50aWZpZXI6IHBhY2tldC5nZXRJbnQ2NChrU3RyaWRlICogb2Zmc2V0KyssIF9rRmFrZUhvc3RFbmRpYW4pLAogICAgICBwaHlzaWNhbFg6IHBhY2tldC5nZXRGbG9hdDY0KGtTdHJpZGUgKiBvZmZzZXQrKywgX2tGYWtlSG9zdEVuZGlhbiksCiAgICAgIHBoeXNpY2FsWTogcGFja2V0LmdldEZsb2F0NjQoa1N0cmlkZSAqIG9mZnNldCsrLCBfa0Zha2VIb3N0RW5kaWFuKSwKICAgICAgcGh5c2ljYWxEZWx0YVg6IHBhY2tldC5nZXRGbG9hdDY0KGtTdHJpZGUgKiBvZmZzZXQrKywgX2tGYWtlSG9zdEVuZGlhbiksCiAgICAgIHBoeXNpY2FsRGVsdGFZOiBwYWNrZXQuZ2V0RmxvYXQ2NChrU3RyaWRlICogb2Zmc2V0KyssIF9rRmFrZUhvc3RFbmRpYW4pLAogICAgICBidXR0b25zOiBwYWNrZXQuZ2V0SW50NjQoa1N0cmlkZSAqIG9mZnNldCsrLCBfa0Zha2VIb3N0RW5kaWFuKSwKICAgICAgb2JzY3VyZWQ6IHBhY2tldC5nZXRJbnQ2NChrU3RyaWRlICogb2Zmc2V0KyssIF9rRmFrZUhvc3RFbmRpYW4pICE9IDAsCiAgICAgIHN5bnRoZXNpemVkOiBwYWNrZXQuZ2V0SW50NjQoa1N0cmlkZSAqIG9mZnNldCsrLCBfa0Zha2VIb3N0RW5kaWFuKSAhPSAwLAogICAgICBwcmVzc3VyZTogcGFja2V0LmdldEZsb2F0NjQoa1N0cmlkZSAqIG9mZnNldCsrLCBfa0Zha2VIb3N0RW5kaWFuKSwKICAgICAgcHJlc3N1cmVNaW46IHBhY2tldC5nZXRGbG9hdDY0KGtTdHJpZGUgKiBvZmZzZXQrKywgX2tGYWtlSG9zdEVuZGlhbiksCiAgICAgIHByZXNzdXJlTWF4OiBwYWNrZXQuZ2V0RmxvYXQ2NChrU3RyaWRlICogb2Zmc2V0KyssIF9rRmFrZUhvc3RFbmRpYW4pLAogICAgICBkaXN0YW5jZTogcGFja2V0LmdldEZsb2F0NjQoa1N0cmlkZSAqIG9mZnNldCsrLCBfa0Zha2VIb3N0RW5kaWFuKSwKICAgICAgZGlzdGFuY2VNYXg6IHBhY2tldC5nZXRGbG9hdDY0KGtTdHJpZGUgKiBvZmZzZXQrKywgX2tGYWtlSG9zdEVuZGlhbiksCiAgICAgIHNpemU6IHBhY2tldC5nZXRGbG9hdDY0KGtTdHJpZGUgKiBvZmZzZXQrKywgX2tGYWtlSG9zdEVuZGlhbiksCiAgICAgIHJhZGl1c01ham9yOiBwYWNrZXQuZ2V0RmxvYXQ2NChrU3RyaWRlICogb2Zmc2V0KyssIF9rRmFrZUhvc3RFbmRpYW4pLAogICAgICByYWRpdXNNaW5vcjogcGFja2V0LmdldEZsb2F0NjQoa1N0cmlkZSAqIG9mZnNldCsrLCBfa0Zha2VIb3N0RW5kaWFuKSwKICAgICAgcmFkaXVzTWluOiBwYWNrZXQuZ2V0RmxvYXQ2NChrU3RyaWRlICogb2Zmc2V0KyssIF9rRmFrZUhvc3RFbmRpYW4pLAogICAgICByYWRpdXNNYXg6IHBhY2tldC5nZXRGbG9hdDY0KGtTdHJpZGUgKiBvZmZzZXQrKywgX2tGYWtlSG9zdEVuZGlhbiksCiAgICAgIG9yaWVudGF0aW9uOiBwYWNrZXQuZ2V0RmxvYXQ2NChrU3RyaWRlICogb2Zmc2V0KyssIF9rRmFrZUhvc3RFbmRpYW4pLAogICAgICB0aWx0OiBwYWNrZXQuZ2V0RmxvYXQ2NChrU3RyaWRlICogb2Zmc2V0KyssIF9rRmFrZUhvc3RFbmRpYW4pLAogICAgICBwbGF0Zm9ybURhdGE6IHBhY2tldC5nZXRJbnQ2NChrU3RyaWRlICogb2Zmc2V0KyssIF9rRmFrZUhvc3RFbmRpYW4pLAogICAgICBzY3JvbGxEZWx0YVg6IHBhY2tldC5nZXRGbG9hdDY0KGtTdHJpZGUgKiBvZmZzZXQrKywgX2tGYWtlSG9zdEVuZGlhbiksCiAgICAgIHNjcm9sbERlbHRhWTogcGFja2V0LmdldEZsb2F0NjQoa1N0cmlkZSAqIG9mZnNldCsrLCBfa0Zha2VIb3N0RW5kaWFuKQogICAgKTsKICAgIGFzc2VydChvZmZzZXQgPT0gKGkgKyAxKSAqIF9rUG9pbnRlckRhdGFGaWVsZENvdW50KTsKICB9CiAgcmV0dXJuIFBvaW50ZXJEYXRhUGFja2V0KGRhdGE6IGRhdGEpOwp9CoFnADxKHgFvAREBGidWAgEaJjgCARoaGxsQERAZGxwaFxkaGCAiIyEECSsqHSYdISMfJRsfIR0iO0FEPi4zNzk2QgIBLAEaHxEEIwIBGho2ARoaLCI9LkdMSwE3PT06BwRAAgEaGjBTFgwER0dDAgEaGitRGS4rAgEBNi1SAgFAOQIBOF5YAgEaGi0mVAIBGhowTTQML1sCARoaTDQKKhM+EDoGMUEgJQwMIEQJBws+QggEAgEaGjMqgIACARoaQyweIwgkCgUCARoaJWsCARoaKTo6R1UETwIBGhoUOAIBTSNNMgEaGjYuKB8YMU9NMTctDxwIOEoIDAIBagEwKxgMARgBJxALHwQCAUE5GAwBGAEnEwssBAIBTRpSGAwBGAEnGgs5BAIBVWYYDAEYAScgCxkiCAQCAUsDFhQhKAE+MUZDQTwlLhtgW11jRVBKSk9PRkxPSUxMSUxFTExKSkxFS01MBzkEKAIBEmRhcnQ6dWkvaG9va3MuZGFydDBvcmctZGFydGxhbmctc2RrOi8vL2ZsdXR0ZXIvbGliL3VpL3BhaW50aW5nLmRhcnTAArNjLy8gQ29weXJpZ2h0IDIwMTMgVGhlIEZsdXR0ZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LnVpOwoKLy8gU29tZSBtZXRob2RzIGluIHRoaXMgZmlsZSBhc3NlcnQgdGhhdCB0aGVpciBhcmd1bWVudHMgYXJlIG5vdCBudWxsLiBUaGVzZQovLyBhc3NlcnRzIGFyZSBqdXN0IHRvIGltcHJvdmUgdGhlIGVycm9yIG1lc3NhZ2VzOyB0aGV5IHNob3VsZCBvbmx5IGNvdmVyCi8vIGFyZ3VtZW50cyB0aGF0IGFyZSBlaXRoZXIgZGVyZWZlcmVuY2VkIF9pbiBEYXJ0XywgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byB0aGUKLy8gZW5naW5lLCBvciB0aGF0IHRoZSBlbmdpbmUgZXhwbGljaXRseSBudWxsLWNoZWNrcyBpdHNlbGYgKGFmdGVyIGF0dGVtcHRpbmcgdG8KLy8gY29udmVydCB0aGUgYXJndW1lbnQgdG8gYSBuYXRpdmUgdHlwZSkuIEl0IHNob3VsZCBub3QgYmUgcG9zc2libGUgZm9yIGEgbnVsbAovLyBvciBpbnZhbGlkIHZhbHVlIHRvIGJlIHVzZWQgYnkgdGhlIGVuZ2luZSBldmVuIGluIHJlbGVhc2UgbW9kZSwgc2luY2UgdGhhdAovLyB3b3VsZCBjYXVzZSBhIGNyYXNoLiBJdCBpcywgaG93ZXZlciwgYWNjZXB0YWJsZSBmb3IgZXJyb3IgbWVzc2FnZXMgdG8gYmUgbXVjaAovLyBsZXNzIHVzZWZ1bCBvciBjb3JyZWN0IGluIHJlbGVhc2UgbW9kZSB0aGFuIGluIGRlYnVnIG1vZGUuCi8vCi8vIFBhaW50aW5nIEFQSXMgd2lsbCBhbHNvIHdhcm4gYWJvdXQgYXJndW1lbnRzIHJlcHJlc2VudGluZyBOYU4gY29vcmRpbmF0ZXMsCi8vIHdoaWNoIGNhbiBub3QgYmUgcmVuZGVyZWQgYnkgU2tpYS4KCi8vIFVwZGF0ZSB0aGlzIGxpc3Qgd2hlbiBjaGFuZ2luZyB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgY29kZWNzLgovLy8ge0B0ZW1wbGF0ZSBmbHV0dGVyLmRhcnQ6dWkuaW1hZ2VGb3JtYXRzfQovLy8gSlBFRywgUE5HLCBHSUYsIEFuaW1hdGVkIEdJRiwgV2ViUCwgQW5pbWF0ZWQgV2ViUCwgQk1QLCBhbmQgV0JNUAovLy8ge0BlbmR0ZW1wbGF0ZX0KCmJvb2wgX3JlY3RJc1ZhbGlkKFJlY3QgcmVjdCkgewogIGFzc2VydChyZWN0ICE9IG51bGwsICdSZWN0IGFyZ3VtZW50IHdhcyBudWxsLicpOwogIGFzc2VydCghcmVjdC5oYXNOYU4sICdSZWN0IGFyZ3VtZW50IGNvbnRhaW5lZCBhIE5hTiB2YWx1ZS4nKTsKICByZXR1cm4gdHJ1ZTsKfQoKYm9vbCBfcnJlY3RJc1ZhbGlkKFJSZWN0IHJyZWN0KSB7CiAgYXNzZXJ0KHJyZWN0ICE9IG51bGwsICdSUmVjdCBhcmd1bWVudCB3YXMgbnVsbC4nKTsKICBhc3NlcnQoIXJyZWN0Lmhhc05hTiwgJ1JSZWN0IGFyZ3VtZW50IGNvbnRhaW5lZCBhIE5hTiB2YWx1ZS4nKTsKICByZXR1cm4gdHJ1ZTsKfQoKYm9vbCBfb2Zmc2V0SXNWYWxpZChPZmZzZXQgb2Zmc2V0KSB7CiAgYXNzZXJ0KG9mZnNldCAhPSBudWxsLCAnT2Zmc2V0IGFyZ3VtZW50IHdhcyBudWxsLicpOwogIGFzc2VydCghb2Zmc2V0LmR4LmlzTmFOICYmICFvZmZzZXQuZHkuaXNOYU4sICdPZmZzZXQgYXJndW1lbnQgY29udGFpbmVkIGEgTmFOIHZhbHVlLicpOwogIHJldHVybiB0cnVlOwp9Cgpib29sIF9tYXRyaXg0SXNWYWxpZChGbG9hdDY0TGlzdCBtYXRyaXg0KSB7CiAgYXNzZXJ0KG1hdHJpeDQgIT0gbnVsbCwgJ01hdHJpeDQgYXJndW1lbnQgd2FzIG51bGwuJyk7CiAgYXNzZXJ0KG1hdHJpeDQubGVuZ3RoID09IDE2LCAnTWF0cml4NCBtdXN0IGhhdmUgMTYgZW50cmllcy4nKTsKICBhc3NlcnQobWF0cml4NC5ldmVyeSgoZG91YmxlIHZhbHVlKSA9PiB2YWx1ZS5pc0Zpbml0ZSksICdNYXRyaXg0IGVudHJpZXMgbXVzdCBiZSBmaW5pdGUuJyk7CiAgcmV0dXJuIHRydWU7Cn0KCmJvb2wgX3JhZGl1c0lzVmFsaWQoUmFkaXVzIHJhZGl1cykgewogIGFzc2VydChyYWRpdXMgIT0gbnVsbCwgJ1JhZGl1cyBhcmd1bWVudCB3YXMgbnVsbC4nKTsKICBhc3NlcnQoIXJhZGl1cy54LmlzTmFOICYmICFyYWRpdXMueS5pc05hTiwgJ1JhZGl1cyBhcmd1bWVudCBjb250YWluZWQgYSBOYU4gdmFsdWUuJyk7CiAgcmV0dXJuIHRydWU7Cn0KCkNvbG9yIF9zY2FsZUFscGhhKENvbG9yIGEsIGRvdWJsZSBmYWN0b3IpIHsKICByZXR1cm4gYS53aXRoQWxwaGEoKGEuYWxwaGEgKiBmYWN0b3IpLnJvdW5kKCkuY2xhbXAoMCwgMjU1KSBhcyBpbnQpOwp9CgovLy8gQW4gaW1tdXRhYmxlIDMyIGJpdCBjb2xvciB2YWx1ZSBpbiBBUkdCIGZvcm1hdC4KLy8vCi8vLyBDb25zaWRlciB0aGUgbGlnaHQgdGVhbCBvZiB0aGUgRmx1dHRlciBsb2dvLiBJdCBpcyBmdWxseSBvcGFxdWUsIHdpdGggYSByZWQKLy8vIGNoYW5uZWwgdmFsdWUgb2YgMHg0MiAoNjYpLCBhIGdyZWVuIGNoYW5uZWwgdmFsdWUgb2YgMHhBNSAoMTY1KSwgYW5kIGEgYmx1ZQovLy8gY2hhbm5lbCB2YWx1ZSBvZiAweEY1ICgyNDUpLiBJbiB0aGUgY29tbW9uICJoYXNoIHN5bnRheCIgZm9yIGNvbG9yIHZhbHVlcywKLy8vIGl0IHdvdWxkIGJlIGRlc2NyaWJlZCBhcyBgIzQyQTVGNWAuCi8vLwovLy8gSGVyZSBhcmUgc29tZSB3YXlzIGl0IGNvdWxkIGJlIGNvbnN0cnVjdGVkOgovLy8KLy8vIGBgYGRhcnQKLy8vIENvbG9yIGMgPSBjb25zdCBDb2xvcigweEZGNDJBNUY1KTsKLy8vIENvbG9yIGMgPSBjb25zdCBDb2xvci5mcm9tQVJHQigweEZGLCAweDQyLCAweEE1LCAweEY1KTsKLy8vIENvbG9yIGMgPSBjb25zdCBDb2xvci5mcm9tQVJHQigyNTUsIDY2LCAxNjUsIDI0NSk7Ci8vLyBDb2xvciBjID0gY29uc3QgQ29sb3IuZnJvbVJHQk8oNjYsIDE2NSwgMjQ1LCAxLjApOwovLy8gYGBgCi8vLwovLy8gSWYgeW91IGFyZSBoYXZpbmcgYSBwcm9ibGVtIHdpdGggYENvbG9yYCB3aGVyZWluIGl0IHNlZW1zIHlvdXIgY29sb3IgaXMganVzdAovLy8gbm90IHBhaW50aW5nLCBjaGVjayB0byBtYWtlIHN1cmUgeW91IGFyZSBzcGVjaWZ5aW5nIHRoZSBmdWxsIDggaGV4YWRlY2ltYWwKLy8vIGRpZ2l0cy4gSWYgeW91IG9ubHkgc3BlY2lmeSBzaXgsIHRoZW4gdGhlIGxlYWRpbmcgdHdvIGRpZ2l0cyBhcmUgYXNzdW1lZCB0bwovLy8gYmUgemVybywgd2hpY2ggbWVhbnMgZnVsbHktdHJhbnNwYXJlbnQ6Ci8vLwovLy8gYGBgZGFydAovLy8gQ29sb3IgYzEgPSBjb25zdCBDb2xvcigweEZGRkZGRik7IC8vIGZ1bGx5IHRyYW5zcGFyZW50IHdoaXRlIChpbnZpc2libGUpCi8vLyBDb2xvciBjMiA9IGNvbnN0IENvbG9yKDB4RkZGRkZGRkYpOyAvLyBmdWxseSBvcGFxdWUgd2hpdGUgKHZpc2libGUpCi8vLyBgYGAKLy8vCi8vLyBTZWUgYWxzbzoKLy8vCi8vLyAgKiBbQ29sb3JzXShodHRwczovL2RvY3MuZmx1dHRlci5pby9mbHV0dGVyL21hdGVyaWFsL0NvbG9ycy1jbGFzcy5odG1sKSwgd2hpY2gKLy8vICAgIGRlZmluZXMgdGhlIGNvbG9ycyBmb3VuZCBpbiB0aGUgTWF0ZXJpYWwgRGVzaWduIHNwZWNpZmljYXRpb24uCmNsYXNzIENvbG9yIHsKICAvLy8gQ29uc3RydWN0IGEgY29sb3IgZnJvbSB0aGUgbG93ZXIgMzIgYml0cyBvZiBhbiBbaW50XS4KICAvLy8KICAvLy8gVGhlIGJpdHMgYXJlIGludGVycHJldGVkIGFzIGZvbGxvd3M6CiAgLy8vCiAgLy8vICogQml0cyAyNC0zMSBhcmUgdGhlIGFscGhhIHZhbHVlLgogIC8vLyAqIEJpdHMgMTYtMjMgYXJlIHRoZSByZWQgdmFsdWUuCiAgLy8vICogQml0cyA4LTE1IGFyZSB0aGUgZ3JlZW4gdmFsdWUuCiAgLy8vICogQml0cyAwLTcgYXJlIHRoZSBibHVlIHZhbHVlLgogIC8vLwogIC8vLyBJbiBvdGhlciB3b3JkcywgaWYgQUEgaXMgdGhlIGFscGhhIHZhbHVlIGluIGhleCwgUlIgdGhlIHJlZCB2YWx1ZSBpbiBoZXgsCiAgLy8vIEdHIHRoZSBncmVlbiB2YWx1ZSBpbiBoZXgsIGFuZCBCQiB0aGUgYmx1ZSB2YWx1ZSBpbiBoZXgsIGEgY29sb3IgY2FuIGJlCiAgLy8vIGV4cHJlc3NlZCBhcyBgY29uc3QgQ29sb3IoMHhBQVJSR0dCQilgLgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSwgdG8gZ2V0IGEgZnVsbHkgb3BhcXVlIG9yYW5nZSwgeW91IHdvdWxkIHVzZSBgY29uc3QKICAvLy8gQ29sb3IoMHhGRkZGOTAwMClgIChgRkZgIGZvciB0aGUgYWxwaGEsIGBGRmAgZm9yIHRoZSByZWQsIGA5MGAgZm9yIHRoZQogIC8vLyBncmVlbiwgYW5kIGAwMGAgZm9yIHRoZSBibHVlKS4KICBAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCiAgY29uc3QgQ29sb3IoaW50IHZhbHVlKSA6IHZhbHVlID0gdmFsdWUgJiAweEZGRkZGRkZGOwoKICAvLy8gQ29uc3RydWN0IGEgY29sb3IgZnJvbSB0aGUgbG93ZXIgOCBiaXRzIG9mIGZvdXIgaW50ZWdlcnMuCiAgLy8vCiAgLy8vICogYGFgIGlzIHRoZSBhbHBoYSB2YWx1ZSwgd2l0aCAwIGJlaW5nIHRyYW5zcGFyZW50IGFuZCAyNTUgYmVpbmcgZnVsbHkKICAvLy8gICBvcGFxdWUuCiAgLy8vICogYHJgIGlzIFtyZWRdLCBmcm9tIDAgdG8gMjU1LgogIC8vLyAqIGBnYCBpcyBbZ3JlZW5dLCBmcm9tIDAgdG8gMjU1LgogIC8vLyAqIGBiYCBpcyBbYmx1ZV0sIGZyb20gMCB0byAyNTUuCiAgLy8vCiAgLy8vIE91dCBvZiByYW5nZSB2YWx1ZXMgYXJlIGJyb3VnaHQgaW50byByYW5nZSB1c2luZyBtb2R1bG8gMjU1LgogIC8vLwogIC8vLyBTZWUgYWxzbyBbZnJvbVJHQk9dLCB3aGljaCB0YWtlcyB0aGUgYWxwaGEgdmFsdWUgYXMgYSBmbG9hdGluZyBwb2ludAogIC8vLyB2YWx1ZS4KICBjb25zdCBDb2xvci5mcm9tQVJHQihpbnQgYSwgaW50IHIsIGludCBnLCBpbnQgYikgOgogICAgdmFsdWUgPSAoKChhICYgMHhmZikgPDwgMjQpIHwKICAgICAgICAgICAgICgociAmIDB4ZmYpIDw8IDE2KSB8CiAgICAgICAgICAgICAoKGcgJiAweGZmKSA8PCA4KSAgfAogICAgICAgICAgICAgKChiICYgMHhmZikgPDwgMCkpICYgMHhGRkZGRkZGRjsKCiAgLy8vIENyZWF0ZSBhIGNvbG9yIGZyb20gcmVkLCBncmVlbiwgYmx1ZSwgYW5kIG9wYWNpdHksIHNpbWlsYXIgdG8gYHJnYmEoKWAgaW4gQ1NTLgogIC8vLwogIC8vLyAqIGByYCBpcyBbcmVkXSwgZnJvbSAwIHRvIDI1NS4KICAvLy8gKiBgZ2AgaXMgW2dyZWVuXSwgZnJvbSAwIHRvIDI1NS4KICAvLy8gKiBgYmAgaXMgW2JsdWVdLCBmcm9tIDAgdG8gMjU1LgogIC8vLyAqIGBvcGFjaXR5YCBpcyBhbHBoYSBjaGFubmVsIG9mIHRoaXMgY29sb3IgYXMgYSBkb3VibGUsIHdpdGggMC4wIGJlaW5nCiAgLy8vICAgdHJhbnNwYXJlbnQgYW5kIDEuMCBiZWluZyBmdWxseSBvcGFxdWUuCiAgLy8vCiAgLy8vIE91dCBvZiByYW5nZSB2YWx1ZXMgYXJlIGJyb3VnaHQgaW50byByYW5nZSB1c2luZyBtb2R1bG8gMjU1LgogIC8vLwogIC8vLyBTZWUgYWxzbyBbZnJvbUFSR0JdLCB3aGljaCB0YWtlcyB0aGUgb3BhY2l0eSBhcyBhbiBpbnRlZ2VyIHZhbHVlLgogIGNvbnN0IENvbG9yLmZyb21SR0JPKGludCByLCBpbnQgZywgaW50IGIsIGRvdWJsZSBvcGFjaXR5KSA6CiAgICB2YWx1ZSA9ICgoKChvcGFjaXR5ICogMHhmZiB+LyAxKSAmIDB4ZmYpIDw8IDI0KSB8CiAgICAgICAgICAgICAgKChyICAgICAgICAgICAgICAgICAgICAmIDB4ZmYpIDw8IDE2KSB8CiAgICAgICAgICAgICAgKChnICAgICAgICAgICAgICAgICAgICAmIDB4ZmYpIDw8IDgpICB8CiAgICAgICAgICAgICAgKChiICAgICAgICAgICAgICAgICAgICAmIDB4ZmYpIDw8IDApKSAmIDB4RkZGRkZGRkY7CgogIC8vLyBBIDMyIGJpdCB2YWx1ZSByZXByZXNlbnRpbmcgdGhpcyBjb2xvci4KICAvLy8KICAvLy8gVGhlIGJpdHMgYXJlIGFzc2lnbmVkIGFzIGZvbGxvd3M6CiAgLy8vCiAgLy8vICogQml0cyAyNC0zMSBhcmUgdGhlIGFscGhhIHZhbHVlLgogIC8vLyAqIEJpdHMgMTYtMjMgYXJlIHRoZSByZWQgdmFsdWUuCiAgLy8vICogQml0cyA4LTE1IGFyZSB0aGUgZ3JlZW4gdmFsdWUuCiAgLy8vICogQml0cyAwLTcgYXJlIHRoZSBibHVlIHZhbHVlLgogIGZpbmFsIGludCB2YWx1ZTsKCiAgLy8vIFRoZSBhbHBoYSBjaGFubmVsIG9mIHRoaXMgY29sb3IgaW4gYW4gOCBiaXQgdmFsdWUuCiAgLy8vCiAgLy8vIEEgdmFsdWUgb2YgMCBtZWFucyB0aGlzIGNvbG9yIGlzIGZ1bGx5IHRyYW5zcGFyZW50LiBBIHZhbHVlIG9mIDI1NSBtZWFucwogIC8vLyB0aGlzIGNvbG9yIGlzIGZ1bGx5IG9wYXF1ZS4KICBpbnQgZ2V0IGFscGhhID0+ICgweGZmMDAwMDAwICYgdmFsdWUpID4+IDI0OwoKICAvLy8gVGhlIGFscGhhIGNoYW5uZWwgb2YgdGhpcyBjb2xvciBhcyBhIGRvdWJsZS4KICAvLy8KICAvLy8gQSB2YWx1ZSBvZiAwLjAgbWVhbnMgdGhpcyBjb2xvciBpcyBmdWxseSB0cmFuc3BhcmVudC4gQSB2YWx1ZSBvZiAxLjAgbWVhbnMKICAvLy8gdGhpcyBjb2xvciBpcyBmdWxseSBvcGFxdWUuCiAgZG91YmxlIGdldCBvcGFjaXR5ID0+IGFscGhhIC8gMHhGRjsKCiAgLy8vIFRoZSByZWQgY2hhbm5lbCBvZiB0aGlzIGNvbG9yIGluIGFuIDggYml0IHZhbHVlLgogIGludCBnZXQgcmVkID0+ICgweDAwZmYwMDAwICYgdmFsdWUpID4+IDE2OwoKICAvLy8gVGhlIGdyZWVuIGNoYW5uZWwgb2YgdGhpcyBjb2xvciBpbiBhbiA4IGJpdCB2YWx1ZS4KICBpbnQgZ2V0IGdyZWVuID0+ICgweDAwMDBmZjAwICYgdmFsdWUpID4+IDg7CgogIC8vLyBUaGUgYmx1ZSBjaGFubmVsIG9mIHRoaXMgY29sb3IgaW4gYW4gOCBiaXQgdmFsdWUuCiAgaW50IGdldCBibHVlID0+ICgweDAwMDAwMGZmICYgdmFsdWUpID4+IDA7CgogIC8vLyBSZXR1cm5zIGEgbmV3IGNvbG9yIHRoYXQgbWF0Y2hlcyB0aGlzIGNvbG9yIHdpdGggdGhlIGFscGhhIGNoYW5uZWwKICAvLy8gcmVwbGFjZWQgd2l0aCBgYWAgKHdoaWNoIHJhbmdlcyBmcm9tIDAgdG8gMjU1KS4KICAvLy8KICAvLy8gT3V0IG9mIHJhbmdlIHZhbHVlcyB3aWxsIGhhdmUgdW5leHBlY3RlZCBlZmZlY3RzLgogIENvbG9yIHdpdGhBbHBoYShpbnQgYSkgewogICAgcmV0dXJuIENvbG9yLmZyb21BUkdCKGEsIHJlZCwgZ3JlZW4sIGJsdWUpOwogIH0KCiAgLy8vIFJldHVybnMgYSBuZXcgY29sb3IgdGhhdCBtYXRjaGVzIHRoaXMgY29sb3Igd2l0aCB0aGUgYWxwaGEgY2hhbm5lbAogIC8vLyByZXBsYWNlZCB3aXRoIHRoZSBnaXZlbiBgb3BhY2l0eWAgKHdoaWNoIHJhbmdlcyBmcm9tIDAuMCB0byAxLjApLgogIC8vLwogIC8vLyBPdXQgb2YgcmFuZ2UgdmFsdWVzIHdpbGwgaGF2ZSB1bmV4cGVjdGVkIGVmZmVjdHMuCiAgQ29sb3Igd2l0aE9wYWNpdHkoZG91YmxlIG9wYWNpdHkpIHsKICAgIGFzc2VydChvcGFjaXR5ID49IDAuMCAmJiBvcGFjaXR5IDw9IDEuMCk7CiAgICByZXR1cm4gd2l0aEFscGhhKCgyNTUuMCAqIG9wYWNpdHkpLnJvdW5kKCkpOwogIH0KCiAgLy8vIFJldHVybnMgYSBuZXcgY29sb3IgdGhhdCBtYXRjaGVzIHRoaXMgY29sb3Igd2l0aCB0aGUgcmVkIGNoYW5uZWwgcmVwbGFjZWQKICAvLy8gd2l0aCBgcmAgKHdoaWNoIHJhbmdlcyBmcm9tIDAgdG8gMjU1KS4KICAvLy8KICAvLy8gT3V0IG9mIHJhbmdlIHZhbHVlcyB3aWxsIGhhdmUgdW5leHBlY3RlZCBlZmZlY3RzLgogIENvbG9yIHdpdGhSZWQoaW50IHIpIHsKICAgIHJldHVybiBDb2xvci5mcm9tQVJHQihhbHBoYSwgciwgZ3JlZW4sIGJsdWUpOwogIH0KCiAgLy8vIFJldHVybnMgYSBuZXcgY29sb3IgdGhhdCBtYXRjaGVzIHRoaXMgY29sb3Igd2l0aCB0aGUgZ3JlZW4gY2hhbm5lbAogIC8vLyByZXBsYWNlZCB3aXRoIGBnYCAod2hpY2ggcmFuZ2VzIGZyb20gMCB0byAyNTUpLgogIC8vLwogIC8vLyBPdXQgb2YgcmFuZ2UgdmFsdWVzIHdpbGwgaGF2ZSB1bmV4cGVjdGVkIGVmZmVjdHMuCiAgQ29sb3Igd2l0aEdyZWVuKGludCBnKSB7CiAgICByZXR1cm4gQ29sb3IuZnJvbUFSR0IoYWxwaGEsIHJlZCwgZywgYmx1ZSk7CiAgfQoKICAvLy8gUmV0dXJucyBhIG5ldyBjb2xvciB0aGF0IG1hdGNoZXMgdGhpcyBjb2xvciB3aXRoIHRoZSBibHVlIGNoYW5uZWwgcmVwbGFjZWQKICAvLy8gd2l0aCBgYmAgKHdoaWNoIHJhbmdlcyBmcm9tIDAgdG8gMjU1KS4KICAvLy8KICAvLy8gT3V0IG9mIHJhbmdlIHZhbHVlcyB3aWxsIGhhdmUgdW5leHBlY3RlZCBlZmZlY3RzLgogIENvbG9yIHdpdGhCbHVlKGludCBiKSB7CiAgICByZXR1cm4gQ29sb3IuZnJvbUFSR0IoYWxwaGEsIHJlZCwgZ3JlZW4sIGIpOwogIH0KCiAgLy8gU2VlIDxodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIwLyNyZWxhdGl2ZWx1bWluYW5jZWRlZj4KICBzdGF0aWMgZG91YmxlIF9saW5lYXJpemVDb2xvckNvbXBvbmVudChkb3VibGUgY29tcG9uZW50KSB7CiAgICBpZiAoY29tcG9uZW50IDw9IDAuMDM5MjgpCiAgICAgIHJldHVybiBjb21wb25lbnQgLyAxMi45MjsKICAgIHJldHVybiBtYXRoLnBvdygoY29tcG9uZW50ICsgMC4wNTUpIC8gMS4wNTUsIDIuNCkgYXMgZG91YmxlOwogIH0KCiAgLy8vIFJldHVybnMgYSBicmlnaHRuZXNzIHZhbHVlIGJldHdlZW4gMCBmb3IgZGFya2VzdCBhbmQgMSBmb3IgbGlnaHRlc3QuCiAgLy8vCiAgLy8vIFJlcHJlc2VudHMgdGhlIHJlbGF0aXZlIGx1bWluYW5jZSBvZiB0aGUgY29sb3IuIFRoaXMgdmFsdWUgaXMgY29tcHV0YXRpb25hbGx5CiAgLy8vIGV4cGVuc2l2ZSB0byBjYWxjdWxhdGUuCiAgLy8vCiAgLy8vIFNlZSA8aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmVsYXRpdmVfbHVtaW5hbmNlPi4KICBkb3VibGUgY29tcHV0ZUx1bWluYW5jZSgpIHsKICAgIC8vIFNlZSA8aHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMC8jcmVsYXRpdmVsdW1pbmFuY2VkZWY+CiAgICBmaW5hbCBkb3VibGUgUiA9IF9saW5lYXJpemVDb2xvckNvbXBvbmVudChyZWQgLyAweEZGKTsKICAgIGZpbmFsIGRvdWJsZSBHID0gX2xpbmVhcml6ZUNvbG9yQ29tcG9uZW50KGdyZWVuIC8gMHhGRik7CiAgICBmaW5hbCBkb3VibGUgQiA9IF9saW5lYXJpemVDb2xvckNvbXBvbmVudChibHVlIC8gMHhGRik7CiAgICByZXR1cm4gMC4yMTI2ICogUiArIDAuNzE1MiAqIEcgKyAwLjA3MjIgKiBCOwogIH0KCiAgLy8vIExpbmVhcmx5IGludGVycG9sYXRlIGJldHdlZW4gdHdvIGNvbG9ycy4KICAvLy8KICAvLy8gVGhpcyBpcyBpbnRlbmRlZCB0byBiZSBmYXN0IGJ1dCBhcyBhIHJlc3VsdCBtYXkgYmUgdWdseS4gQ29uc2lkZXIKICAvLy8gW0hTVkNvbG9yXSBvciB3cml0aW5nIGN1c3RvbSBsb2dpYyBmb3IgaW50ZXJwb2xhdGluZyBjb2xvcnMuCiAgLy8vCiAgLy8vIElmIGVpdGhlciBjb2xvciBpcyBudWxsLCB0aGlzIGZ1bmN0aW9uIGxpbmVhcmx5IGludGVycG9sYXRlcyBmcm9tIGEKICAvLy8gdHJhbnNwYXJlbnQgaW5zdGFuY2Ugb2YgdGhlIG90aGVyIGNvbG9yLiBUaGlzIGlzIHVzdWFsbHkgcHJlZmVyYWJsZSB0bwogIC8vLyBpbnRlcnBvbGF0aW5nIGZyb20gW21hdGVyaWFsLkNvbG9ycy50cmFuc3BhcmVudF0gKGBjb25zdAogIC8vLyBDb2xvcigweDAwMDAwMDAwKWApLCB3aGljaCBpcyBzcGVjaWZpY2FsbHkgdHJhbnNwYXJlbnQgX2JsYWNrXy4KICAvLy8KICAvLy8gVGhlIGB0YCBhcmd1bWVudCByZXByZXNlbnRzIHBvc2l0aW9uIG9uIHRoZSB0aW1lbGluZSwgd2l0aCAwLjAgbWVhbmluZwogIC8vLyB0aGF0IHRoZSBpbnRlcnBvbGF0aW9uIGhhcyBub3Qgc3RhcnRlZCwgcmV0dXJuaW5nIGBhYCAob3Igc29tZXRoaW5nCiAgLy8vIGVxdWl2YWxlbnQgdG8gYGFgKSwgMS4wIG1lYW5pbmcgdGhhdCB0aGUgaW50ZXJwb2xhdGlvbiBoYXMgZmluaXNoZWQsCiAgLy8vIHJldHVybmluZyBgYmAgKG9yIHNvbWV0aGluZyBlcXVpdmFsZW50IHRvIGBiYCksIGFuZCB2YWx1ZXMgaW4gYmV0d2VlbgogIC8vLyBtZWFuaW5nIHRoYXQgdGhlIGludGVycG9sYXRpb24gaXMgYXQgdGhlIHJlbGV2YW50IHBvaW50IG9uIHRoZSB0aW1lbGluZQogIC8vLyBiZXR3ZWVuIGBhYCBhbmQgYGJgLiBUaGUgaW50ZXJwb2xhdGlvbiBjYW4gYmUgZXh0cmFwb2xhdGVkIGJleW9uZCAwLjAgYW5kCiAgLy8vIDEuMCwgc28gbmVnYXRpdmUgdmFsdWVzIGFuZCB2YWx1ZXMgZ3JlYXRlciB0aGFuIDEuMCBhcmUgdmFsaWQgKGFuZCBjYW4KICAvLy8gZWFzaWx5IGJlIGdlbmVyYXRlZCBieSBjdXJ2ZXMgc3VjaCBhcyBbQ3VydmVzLmVsYXN0aWNJbk91dF0pLiBFYWNoIGNoYW5uZWwKICAvLy8gd2lsbCBiZSBjbGFtcGVkIHRvIHRoZSByYW5nZSAwIHRvIDI1NS4KICAvLy8KICAvLy8gVmFsdWVzIGZvciBgdGAgYXJlIHVzdWFsbHkgb2J0YWluZWQgZnJvbSBhbiBbQW5pbWF0aW9uPGRvdWJsZT5dLCBzdWNoIGFzCiAgLy8vIGFuIFtBbmltYXRpb25Db250cm9sbGVyXS4KICBzdGF0aWMgQ29sb3IgbGVycChDb2xvciBhLCBDb2xvciBiLCBkb3VibGUgdCkgewogICAgYXNzZXJ0KHQgIT0gbnVsbCk7CiAgICBpZiAoYSA9PSBudWxsICYmIGIgPT0gbnVsbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICBpZiAoYSA9PSBudWxsKQogICAgICByZXR1cm4gX3NjYWxlQWxwaGEoYiwgdCk7CiAgICBpZiAoYiA9PSBudWxsKQogICAgICByZXR1cm4gX3NjYWxlQWxwaGEoYSwgMS4wIC0gdCk7CiAgICByZXR1cm4gQ29sb3IuZnJvbUFSR0IoCiAgICAgIGxlcnBEb3VibGUoYS5hbHBoYSwgYi5hbHBoYSwgdCkudG9JbnQoKS5jbGFtcCgwLCAyNTUpIGFzIGludCwKICAgICAgbGVycERvdWJsZShhLnJlZCwgYi5yZWQsIHQpLnRvSW50KCkuY2xhbXAoMCwgMjU1KSBhcyBpbnQsCiAgICAgIGxlcnBEb3VibGUoYS5ncmVlbiwgYi5ncmVlbiwgdCkudG9JbnQoKS5jbGFtcCgwLCAyNTUpIGFzIGludCwKICAgICAgbGVycERvdWJsZShhLmJsdWUsIGIuYmx1ZSwgdCkudG9JbnQoKS5jbGFtcCgwLCAyNTUpIGFzIGludCwKICAgICk7CiAgfQoKICAvLy8gQ29tYmluZSB0aGUgZm9yZWdyb3VuZCBjb2xvciBhcyBhIHRyYW5zcGFyZW50IGNvbG9yIG92ZXIgdG9wCiAgLy8vIG9mIGEgYmFja2dyb3VuZCBjb2xvciwgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIGNvbWJpbmVkIGNvbG9yLgogIC8vLwogIC8vLyBUaGlzIHVzZXMgc3RhbmRhcmQgYWxwaGEgYmxlbmRpbmcgKCJTUkMgb3ZlciBEU1QiKSBydWxlcyB0byBwcm9kdWNlIGEKICAvLy8gYmxlbmRlZCBjb2xvciBmcm9tIHR3byBjb2xvcnMuIFRoaXMgY2FuIGJlIHVzZWQgYXMgYSBwZXJmb3JtYW5jZQogIC8vLyBlbmhhbmNlbWVudCB3aGVuIHRyeWluZyB0byBhdm9pZCBuZWVkbGVzcyBhbHBoYSBibGVuZGluZyBjb21wb3NpdGluZwogIC8vLyBvcGVyYXRpb25zIGZvciB0d28gdGhpbmdzIHRoYXQgYXJlIHNvbGlkIGNvbG9ycyB3aXRoIHRoZSBzYW1lIHNoYXBlLCBidXQKICAvLy8gb3ZlcmxheSBlYWNoIG90aGVyOiBpbnN0ZWFkLCBqdXN0IHBhaW50IG9uZSB3aXRoIHRoZSBjb21iaW5lZCBjb2xvci4KICBzdGF0aWMgQ29sb3IgYWxwaGFCbGVuZChDb2xvciBmb3JlZ3JvdW5kLCBDb2xvciBiYWNrZ3JvdW5kKSB7CiAgICBmaW5hbCBpbnQgYWxwaGEgPSBmb3JlZ3JvdW5kLmFscGhhOwogICAgaWYgKGFscGhhID09IDB4MDApIHsgLy8gRm9yZWdyb3VuZCBjb21wbGV0ZWx5IHRyYW5zcGFyZW50LgogICAgICByZXR1cm4gYmFja2dyb3VuZDsKICAgIH0KICAgIGZpbmFsIGludCBpbnZBbHBoYSA9IDB4ZmYgLSBhbHBoYTsKICAgIGludCBiYWNrQWxwaGEgPSBiYWNrZ3JvdW5kLmFscGhhOwogICAgaWYgKGJhY2tBbHBoYSA9PSAweGZmKSB7IC8vIE9wYXF1ZSBiYWNrZ3JvdW5kIGNhc2UKICAgICAgcmV0dXJuIENvbG9yLmZyb21BUkdCKAogICAgICAgIDB4ZmYsCiAgICAgICAgKGFscGhhICogZm9yZWdyb3VuZC5yZWQgKyBpbnZBbHBoYSAqIGJhY2tncm91bmQucmVkKSB+LyAweGZmLAogICAgICAgIChhbHBoYSAqIGZvcmVncm91bmQuZ3JlZW4gKyBpbnZBbHBoYSAqIGJhY2tncm91bmQuZ3JlZW4pIH4vIDB4ZmYsCiAgICAgICAgKGFscGhhICogZm9yZWdyb3VuZC5ibHVlICsgaW52QWxwaGEgKiBiYWNrZ3JvdW5kLmJsdWUpIH4vIDB4ZmYsCiAgICAgICk7CiAgICB9IGVsc2UgeyAvLyBHZW5lcmFsIGNhc2UKICAgICAgYmFja0FscGhhID0gKGJhY2tBbHBoYSAqIGludkFscGhhKSB+LyAweGZmOwogICAgICBmaW5hbCBpbnQgb3V0QWxwaGEgPSBhbHBoYSArIGJhY2tBbHBoYTsKICAgICAgYXNzZXJ0KG91dEFscGhhICE9IDB4MDApOwogICAgICByZXR1cm4gQ29sb3IuZnJvbUFSR0IoCiAgICAgICAgb3V0QWxwaGEsCiAgICAgICAgKGZvcmVncm91bmQucmVkICogYWxwaGEgKyBiYWNrZ3JvdW5kLnJlZCAqIGJhY2tBbHBoYSkgfi8gb3V0QWxwaGEsCiAgICAgICAgKGZvcmVncm91bmQuZ3JlZW4gKiBhbHBoYSArIGJhY2tncm91bmQuZ3JlZW4gKiBiYWNrQWxwaGEpIH4vIG91dEFscGhhLAogICAgICAgIChmb3JlZ3JvdW5kLmJsdWUgKiBhbHBoYSArIGJhY2tncm91bmQuYmx1ZSAqIGJhY2tBbHBoYSkgfi8gb3V0QWxwaGEsCiAgICAgICk7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyBhbiBhbHBoYSB2YWx1ZSByZXByZXNlbnRhdGl2ZSBvZiB0aGUgcHJvdmlkZWQgW29wYWNpdHldIHZhbHVlLgogIC8vLwogIC8vLyBUaGUgW29wYWNpdHldIHZhbHVlIG1heSBub3QgYmUgbnVsbC4KICBzdGF0aWMgaW50IGdldEFscGhhRnJvbU9wYWNpdHkoZG91YmxlIG9wYWNpdHkpIHsKICAgIGFzc2VydChvcGFjaXR5ICE9IG51bGwpOwogICAgcmV0dXJuIChvcGFjaXR5LmNsYW1wKDAuMCwgMS4wKSAqIDI1NSkucm91bmQoKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0oZHluYW1pYyBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyLnJ1bnRpbWVUeXBlICE9IHJ1bnRpbWVUeXBlKQogICAgICByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gb3RoZXIgaXMgQ29sb3IKICAgICAgICAmJiBvdGhlci52YWx1ZSA9PSB2YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdmFsdWUuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdDb2xvcigweCR7dmFsdWUudG9SYWRpeFN0cmluZygxNikucGFkTGVmdCg4LCAnMCcpfSknOwp9CgovLy8gQWxnb3JpdGhtcyB0byB1c2Ugd2hlbiBwYWludGluZyBvbiB0aGUgY2FudmFzLgovLy8KLy8vIFdoZW4gZHJhd2luZyBhIHNoYXBlIG9yIGltYWdlIG9udG8gYSBjYW52YXMsIGRpZmZlcmVudCBhbGdvcml0aG1zIGNhbiBiZQovLy8gdXNlZCB0byBibGVuZCB0aGUgcGl4ZWxzLiBUaGUgZGlmZmVyZW50IHZhbHVlcyBvZiBbQmxlbmRNb2RlXSBzcGVjaWZ5Ci8vLyBkaWZmZXJlbnQgc3VjaCBhbGdvcml0aG1zLgovLy8KLy8vIEVhY2ggYWxnb3JpdGhtIGhhcyB0d28gaW5wdXRzLCB0aGUgX3NvdXJjZV8sIHdoaWNoIGlzIHRoZSBpbWFnZSBiZWluZyBkcmF3biwKLy8vIGFuZCB0aGUgX2Rlc3RpbmF0aW9uXywgd2hpY2ggaXMgdGhlIGltYWdlIGludG8gd2hpY2ggdGhlIHNvdXJjZSBpbWFnZSBpcwovLy8gYmVpbmcgY29tcG9zaXRlZC4gVGhlIGRlc3RpbmF0aW9uIGlzIG9mdGVuIHRob3VnaHQgb2YgYXMgdGhlIF9iYWNrZ3JvdW5kXy4KLy8vIFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGJvdGggaGF2ZSBmb3VyIGNvbG9yIGNoYW5uZWxzLCB0aGUgcmVkLCBncmVlbiwKLy8vIGJsdWUsIGFuZCBhbHBoYSBjaGFubmVscy4gVGhlc2UgYXJlIHR5cGljYWxseSByZXByZXNlbnRlZCBhcyBudW1iZXJzIGluIHRoZQovLy8gcmFuZ2UgMC4wIHRvIDEuMC4gVGhlIG91dHB1dCBvZiB0aGUgYWxnb3JpdGhtIGFsc28gaGFzIHRoZXNlIHNhbWUgZm91cgovLy8gY2hhbm5lbHMsIHdpdGggdmFsdWVzIGNvbXB1dGVkIGZyb20gdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24uCi8vLwovLy8gVGhlIGRvY3VtZW50YXRpb24gb2YgZWFjaCB2YWx1ZSBiZWxvdyBkZXNjcmliZXMgaG93IHRoZSBhbGdvcml0aG0gd29ya3MuIEluCi8vLyBlYWNoIGNhc2UsIGFuIGltYWdlIHNob3dzIHRoZSBvdXRwdXQgb2YgYmxlbmRpbmcgYSBzb3VyY2UgaW1hZ2Ugd2l0aCBhCi8vLyBkZXN0aW5hdGlvbiBpbWFnZS4gSW4gdGhlIGltYWdlcyBiZWxvdywgdGhlIGRlc3RpbmF0aW9uIGlzIHJlcHJlc2VudGVkIGJ5IGFuCi8vLyBpbWFnZSB3aXRoIGhvcml6b250YWwgbGluZXMgYW5kIGFuIG9wYXF1ZSBsYW5kc2NhcGUgcGhvdG9ncmFwaCwgYW5kIHRoZQovLy8gc291cmNlIGlzIHJlcHJlc2VudGVkIGJ5IGFuIGltYWdlIHdpdGggdmVydGljYWwgbGluZXMgKHRoZSBzYW1lIGxpbmVzIGJ1dAovLy8gcm90YXRlZCkgYW5kIGEgYmlyZCBjbGlwLWFydCBpbWFnZS4gVGhlIFtzcmNdIG1vZGUgc2hvd3Mgb25seSB0aGUgc291cmNlCi8vLyBpbWFnZSwgYW5kIHRoZSBbZHN0XSBtb2RlIHNob3dzIG9ubHkgdGhlIGRlc3RpbmF0aW9uIGltYWdlLiBJbiB0aGUKLy8vIGRvY3VtZW50YXRpb24gYmVsb3csIHRoZSB0cmFuc3BhcmVuY3kgaXMgaWxsdXN0cmF0ZWQgYnkgYSBjaGVja2VyYm9hcmQKLy8vIHBhdHRlcm4uIFRoZSBbY2xlYXJdIG1vZGUgZHJvcHMgYm90aCB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiwgcmVzdWx0aW5nCi8vLyBpbiBhbiBvdXRwdXQgdGhhdCBpcyBlbnRpcmVseSB0cmFuc3BhcmVudCAoaWxsdXN0cmF0ZWQgYnkgYSBzb2xpZAovLy8gY2hlY2tlcmJvYXJkIHBhdHRlcm4pLgovLy8KLy8vIFRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBiYXJzIGluIHRoZXNlIGltYWdlcyBzaG93IHRoZSByZWQsIGdyZWVuLCBhbmQKLy8vIGJsdWUgY2hhbm5lbHMgd2l0aCB2YXJ5aW5nIG9wYWNpdHkgbGV2ZWxzLCB0aGVuIGFsbCB0aHJlZSBjb2xvciBjaGFubmVscwovLy8gdG9nZXRoZXIgd2l0aCB0aG9zZSBzYW1lIHZhcnlpbmcgb3BhY2l0eSBsZXZlbHMsIHRoZW4gYWxsIHRocmVlIGNvbG9yCi8vLyBjaGFubmVscyBzZXQgdG8gemVybyB3aXRoIHRob3NlIHZhcnlpbmcgb3BhY2l0eSBsZXZlbHMsIHRoZW4gdHdvIGJhcnMgc2hvd2luZwovLy8gYSByZWQvZ3JlZW4vYmx1ZSByZXBlYXRpbmcgZ3JhZGllbnQsIHRoZSBmaXJzdCB3aXRoIGZ1bGwgb3BhY2l0eSBhbmQgdGhlCi8vLyBzZWNvbmQgd2l0aCBwYXJ0aWFsIG9wYWNpdHksIGFuZCBmaW5hbGx5IGEgYmFyIHdpdGggdGhlIHRocmVlIGNvbG9yIGNoYW5uZWxzCi8vLyBzZXQgdG8gemVybyBidXQgdGhlIG9wYWNpdHkgdmFyeWluZyBpbiBhIHJlcGVhdGluZyBncmFkaWVudC4KLy8vCi8vLyAjIyBBcHBsaWNhdGlvbiB0byB0aGUgW0NhbnZhc10gQVBJCi8vLwovLy8gV2hlbiB1c2luZyBbQ2FudmFzLnNhdmVMYXllcl0gYW5kIFtDYW52YXMucmVzdG9yZV0sIHRoZSBibGVuZCBtb2RlIG9mIHRoZQovLy8gW1BhaW50XSBnaXZlbiB0byB0aGUgW0NhbnZhcy5zYXZlTGF5ZXJdIHdpbGwgYmUgYXBwbGllZCB3aGVuCi8vLyBbQ2FudmFzLnJlc3RvcmVdIGlzIGNhbGxlZC4gRWFjaCBjYWxsIHRvIFtDYW52YXMuc2F2ZUxheWVyXSBpbnRyb2R1Y2VzIGEgbmV3Ci8vLyBsYXllciBvbnRvIHdoaWNoIHNoYXBlcyBhbmQgaW1hZ2VzIGFyZSBwYWludGVkOyB3aGVuIFtDYW52YXMucmVzdG9yZV0gaXMKLy8vIGNhbGxlZCwgdGhhdCBsYXllciBpcyB0aGVuIGNvbXBvc2l0ZWQgb250byB0aGUgcGFyZW50IGxheWVyLCB3aXRoIHRoZSBzb3VyY2UKLy8vIGJlaW5nIHRoZSBtb3N0LXJlY2VudGx5LWRyYXduIHNoYXBlcyBhbmQgaW1hZ2VzLCBhbmQgdGhlIGRlc3RpbmF0aW9uIGJlaW5nCi8vLyB0aGUgcGFyZW50IGxheWVyLiAoRm9yIHRoZSBmaXJzdCBbQ2FudmFzLnNhdmVMYXllcl0gY2FsbCwgdGhlIHBhcmVudCBsYXllcgovLy8gaXMgdGhlIGNhbnZhcyBpdHNlbGYuKQovLy8KLy8vIFNlZSBhbHNvOgovLy8KLy8vICAqIFtQYWludC5ibGVuZE1vZGVdLCB3aGljaCB1c2VzIFtCbGVuZE1vZGVdIHRvIGRlZmluZSB0aGUgY29tcG9zaXRpbmcKLy8vICAgIHN0cmF0ZWd5LgplbnVtIEJsZW5kTW9kZSB7CiAgLy8gVGhpcyBsaXN0IGNvbWVzIGZyb20gU2tpYSdzIFNrWGZlcm1vZGUuaCBhbmQgdGhlIHZhbHVlcyAob3JkZXIpIHNob3VsZCBiZQogIC8vIGtlcHQgaW4gc3luYy4KICAvLyBTZWU6IGh0dHBzOi8vc2tpYS5vcmcvdXNlci9hcGkvc2twYWludCNTa1hmZXJtb2RlCgogIC8vLyBEcm9wIGJvdGggdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gaW1hZ2VzLCBsZWF2aW5nIG5vdGhpbmcuCiAgLy8vCiAgLy8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlICJjbGVhciIgUG9ydGVyLUR1ZmYgb3BlcmF0b3IuCiAgLy8vCiAgLy8vICFbXShodHRwczovL2ZsdXR0ZXIuZ2l0aHViLmlvL2Fzc2V0cy1mb3ItYXBpLWRvY3MvYXNzZXRzL2RhcnQtdWkvYmxlbmRfbW9kZV9jbGVhci5wbmcpCiAgY2xlYXIsCgogIC8vLyBEcm9wIHRoZSBkZXN0aW5hdGlvbiBpbWFnZSwgb25seSBwYWludCB0aGUgc291cmNlIGltYWdlLgogIC8vLwogIC8vLyBDb25jZXB0dWFsbHksIHRoZSBkZXN0aW5hdGlvbiBpcyBmaXJzdCBjbGVhcmVkLCB0aGVuIHRoZSBzb3VyY2UgaW1hZ2UgaXMKICAvLy8gcGFpbnRlZC4KICAvLy8KICAvLy8gVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgIkNvcHkiIFBvcnRlci1EdWZmIG9wZXJhdG9yLgogIC8vLwogIC8vLyAhW10oaHR0cHM6Ly9mbHV0dGVyLmdpdGh1Yi5pby9hc3NldHMtZm9yLWFwaS1kb2NzL2Fzc2V0cy9kYXJ0LXVpL2JsZW5kX21vZGVfc3JjLnBuZykKICBzcmMsCgogIC8vLyBEcm9wIHRoZSBzb3VyY2UgaW1hZ2UsIG9ubHkgcGFpbnQgdGhlIGRlc3RpbmF0aW9uIGltYWdlLgogIC8vLwogIC8vLyBDb25jZXB0dWFsbHksIHRoZSBzb3VyY2UgaW1hZ2UgaXMgZGlzY2FyZGVkLCBsZWF2aW5nIHRoZSBkZXN0aW5hdGlvbgogIC8vLyB1bnRvdWNoZWQuCiAgLy8vCiAgLy8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlICJEZXN0aW5hdGlvbiIgUG9ydGVyLUR1ZmYgb3BlcmF0b3IuCiAgLy8vCiAgLy8vICFbXShodHRwczovL2ZsdXR0ZXIuZ2l0aHViLmlvL2Fzc2V0cy1mb3ItYXBpLWRvY3MvYXNzZXRzL2RhcnQtdWkvYmxlbmRfbW9kZV9kc3QucG5nKQogIGRzdCwKCiAgLy8vIENvbXBvc2l0ZSB0aGUgc291cmNlIGltYWdlIG92ZXIgdGhlIGRlc3RpbmF0aW9uIGltYWdlLgogIC8vLwogIC8vLyBUaGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlLiBJdCByZXByZXNlbnRzIHRoZSBtb3N0IGludHVpdGl2ZSBjYXNlLCB3aGVyZQogIC8vLyBzaGFwZXMgYXJlIHBhaW50ZWQgb24gdG9wIG9mIHdoYXQgaXMgYmVsb3csIHdpdGggdHJhbnNwYXJlbnQgYXJlYXMgc2hvd2luZwogIC8vLyB0aGUgZGVzdGluYXRpb24gbGF5ZXIuCiAgLy8vCiAgLy8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlICJTb3VyY2Ugb3ZlciBEZXN0aW5hdGlvbiIgUG9ydGVyLUR1ZmYgb3BlcmF0b3IsCiAgLy8vIGFsc28ga25vd24gYXMgdGhlIFBhaW50ZXIncyBBbGdvcml0aG0uCiAgLy8vCiAgLy8vICFbXShodHRwczovL2ZsdXR0ZXIuZ2l0aHViLmlvL2Fzc2V0cy1mb3ItYXBpLWRvY3MvYXNzZXRzL2RhcnQtdWkvYmxlbmRfbW9kZV9zcmNPdmVyLnBuZykKICBzcmNPdmVyLAoKICAvLy8gQ29tcG9zaXRlIHRoZSBzb3VyY2UgaW1hZ2UgdW5kZXIgdGhlIGRlc3RpbmF0aW9uIGltYWdlLgogIC8vLwogIC8vLyBUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZiBbc3JjT3Zlcl0uCiAgLy8vCiAgLy8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlICJEZXN0aW5hdGlvbiBvdmVyIFNvdXJjZSIgUG9ydGVyLUR1ZmYgb3BlcmF0b3IuCiAgLy8vCiAgLy8vICFbXShodHRwczovL2ZsdXR0ZXIuZ2l0aHViLmlvL2Fzc2V0cy1mb3ItYXBpLWRvY3MvYXNzZXRzL2RhcnQtdWkvYmxlbmRfbW9kZV9kc3RPdmVyLnBuZykKICAvLy8KICAvLy8gVGhpcyBpcyB1c2VmdWwgd2hlbiB0aGUgc291cmNlIGltYWdlIHNob3VsZCBoYXZlIGJlZW4gcGFpbnRlZCBiZWZvcmUgdGhlCiAgLy8vIGRlc3RpbmF0aW9uIGltYWdlLCBidXQgY291bGQgbm90IGJlLgogIGRzdE92ZXIsCgogIC8vLyBTaG93IHRoZSBzb3VyY2UgaW1hZ2UsIGJ1dCBvbmx5IHdoZXJlIHRoZSB0d28gaW1hZ2VzIG92ZXJsYXAuIFRoZQogIC8vLyBkZXN0aW5hdGlvbiBpbWFnZSBpcyBub3QgcmVuZGVyZWQsIGl0IGlzIHRyZWF0ZWQgbWVyZWx5IGFzIGEgbWFzay4gVGhlCiAgLy8vIGNvbG9yIGNoYW5uZWxzIG9mIHRoZSBkZXN0aW5hdGlvbiBhcmUgaWdub3JlZCwgb25seSB0aGUgb3BhY2l0eSBoYXMgYW4KICAvLy8gZWZmZWN0LgogIC8vLwogIC8vLyBUbyBzaG93IHRoZSBkZXN0aW5hdGlvbiBpbWFnZSBpbnN0ZWFkLCBjb25zaWRlciBbZHN0SW5dLgogIC8vLwogIC8vLyBUbyByZXZlcnNlIHRoZSBzZW1hbnRpYyBvZiB0aGUgbWFzayAob25seSBzaG93aW5nIHRoZSBzb3VyY2Ugd2hlcmUgdGhlCiAgLy8vIGRlc3RpbmF0aW9uIGlzIGFic2VudCwgcmF0aGVyIHRoYW4gd2hlcmUgaXQgaXMgcHJlc2VudCksIGNvbnNpZGVyCiAgLy8vIFtzcmNPdXRdLgogIC8vLwogIC8vLyBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSAiU291cmNlIGluIERlc3RpbmF0aW9uIiBQb3J0ZXItRHVmZiBvcGVyYXRvci4KICAvLy8KICAvLy8gIVtdKGh0dHBzOi8vZmx1dHRlci5naXRodWIuaW8vYXNzZXRzLWZvci1hcGktZG9jcy9hc3NldHMvZGFydC11aS9ibGVuZF9tb2RlX3NyY0luLnBuZykKICBzcmNJbiwKCiAgLy8vIFNob3cgdGhlIGRlc3RpbmF0aW9uIGltYWdlLCBidXQgb25seSB3aGVyZSB0aGUgdHdvIGltYWdlcyBvdmVybGFwLiBUaGUKICAvLy8gc291cmNlIGltYWdlIGlzIG5vdCByZW5kZXJlZCwgaXQgaXMgdHJlYXRlZCBtZXJlbHkgYXMgYSBtYXNrLiBUaGUgY29sb3IKICAvLy8gY2hhbm5lbHMgb2YgdGhlIHNvdXJjZSBhcmUgaWdub3JlZCwgb25seSB0aGUgb3BhY2l0eSBoYXMgYW4gZWZmZWN0LgogIC8vLwogIC8vLyBUbyBzaG93IHRoZSBzb3VyY2UgaW1hZ2UgaW5zdGVhZCwgY29uc2lkZXIgW3NyY0luXS4KICAvLy8KICAvLy8gVG8gcmV2ZXJzZSB0aGUgc2VtYW50aWMgb2YgdGhlIG1hc2sgKG9ubHkgc2hvd2luZyB0aGUgc291cmNlIHdoZXJlIHRoZQogIC8vLyBkZXN0aW5hdGlvbiBpcyBwcmVzZW50LCByYXRoZXIgdGhhbiB3aGVyZSBpdCBpcyBhYnNlbnQpLCBjb25zaWRlciBbZHN0T3V0XS4KICAvLy8KICAvLy8gVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgIkRlc3RpbmF0aW9uIGluIFNvdXJjZSIgUG9ydGVyLUR1ZmYgb3BlcmF0b3IuCiAgLy8vCiAgLy8vICFbXShodHRwczovL2ZsdXR0ZXIuZ2l0aHViLmlvL2Fzc2V0cy1mb3ItYXBpLWRvY3MvYXNzZXRzL2RhcnQtdWkvYmxlbmRfbW9kZV9kc3RJbi5wbmcpCiAgZHN0SW4sCgogIC8vLyBTaG93IHRoZSBzb3VyY2UgaW1hZ2UsIGJ1dCBvbmx5IHdoZXJlIHRoZSB0d28gaW1hZ2VzIGRvIG5vdCBvdmVybGFwLiBUaGUKICAvLy8gZGVzdGluYXRpb24gaW1hZ2UgaXMgbm90IHJlbmRlcmVkLCBpdCBpcyB0cmVhdGVkIG1lcmVseSBhcyBhIG1hc2suIFRoZSBjb2xvcgogIC8vLyBjaGFubmVscyBvZiB0aGUgZGVzdGluYXRpb24gYXJlIGlnbm9yZWQsIG9ubHkgdGhlIG9wYWNpdHkgaGFzIGFuIGVmZmVjdC4KICAvLy8KICAvLy8gVG8gc2hvdyB0aGUgZGVzdGluYXRpb24gaW1hZ2UgaW5zdGVhZCwgY29uc2lkZXIgW2RzdE91dF0uCiAgLy8vCiAgLy8vIFRvIHJldmVyc2UgdGhlIHNlbWFudGljIG9mIHRoZSBtYXNrIChvbmx5IHNob3dpbmcgdGhlIHNvdXJjZSB3aGVyZSB0aGUKICAvLy8gZGVzdGluYXRpb24gaXMgcHJlc2VudCwgcmF0aGVyIHRoYW4gd2hlcmUgaXQgaXMgYWJzZW50KSwgY29uc2lkZXIgW3NyY0luXS4KICAvLy8KICAvLy8gVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgIlNvdXJjZSBvdXQgRGVzdGluYXRpb24iIFBvcnRlci1EdWZmIG9wZXJhdG9yLgogIC8vLwogIC8vLyAhW10oaHR0cHM6Ly9mbHV0dGVyLmdpdGh1Yi5pby9hc3NldHMtZm9yLWFwaS1kb2NzL2Fzc2V0cy9kYXJ0LXVpL2JsZW5kX21vZGVfc3JjT3V0LnBuZykKICBzcmNPdXQsCgogIC8vLyBTaG93IHRoZSBkZXN0aW5hdGlvbiBpbWFnZSwgYnV0IG9ubHkgd2hlcmUgdGhlIHR3byBpbWFnZXMgZG8gbm90IG92ZXJsYXAuIFRoZQogIC8vLyBzb3VyY2UgaW1hZ2UgaXMgbm90IHJlbmRlcmVkLCBpdCBpcyB0cmVhdGVkIG1lcmVseSBhcyBhIG1hc2suIFRoZSBjb2xvcgogIC8vLyBjaGFubmVscyBvZiB0aGUgc291cmNlIGFyZSBpZ25vcmVkLCBvbmx5IHRoZSBvcGFjaXR5IGhhcyBhbiBlZmZlY3QuCiAgLy8vCiAgLy8vIFRvIHNob3cgdGhlIHNvdXJjZSBpbWFnZSBpbnN0ZWFkLCBjb25zaWRlciBbc3JjT3V0XS4KICAvLy8KICAvLy8gVG8gcmV2ZXJzZSB0aGUgc2VtYW50aWMgb2YgdGhlIG1hc2sgKG9ubHkgc2hvd2luZyB0aGUgZGVzdGluYXRpb24gd2hlcmUgdGhlCiAgLy8vIHNvdXJjZSBpcyBwcmVzZW50LCByYXRoZXIgdGhhbiB3aGVyZSBpdCBpcyBhYnNlbnQpLCBjb25zaWRlciBbZHN0SW5dLgogIC8vLwogIC8vLyBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSAiRGVzdGluYXRpb24gb3V0IFNvdXJjZSIgUG9ydGVyLUR1ZmYgb3BlcmF0b3IuCiAgLy8vCiAgLy8vICFbXShodHRwczovL2ZsdXR0ZXIuZ2l0aHViLmlvL2Fzc2V0cy1mb3ItYXBpLWRvY3MvYXNzZXRzL2RhcnQtdWkvYmxlbmRfbW9kZV9kc3RPdXQucG5nKQogIGRzdE91dCwKCiAgLy8vIENvbXBvc2l0ZSB0aGUgc291cmNlIGltYWdlIG92ZXIgdGhlIGRlc3RpbmF0aW9uIGltYWdlLCBidXQgb25seSB3aGVyZSBpdAogIC8vLyBvdmVybGFwcyB0aGUgZGVzdGluYXRpb24uCiAgLy8vCiAgLy8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlICJTb3VyY2UgYXRvcCBEZXN0aW5hdGlvbiIgUG9ydGVyLUR1ZmYgb3BlcmF0b3IuCiAgLy8vCiAgLy8vIFRoaXMgaXMgZXNzZW50aWFsbHkgdGhlIFtzcmNPdmVyXSBvcGVyYXRvciwgYnV0IHdpdGggdGhlIG91dHB1dCdzIG9wYWNpdHkKICAvLy8gY2hhbm5lbCBiZWluZyBzZXQgdG8gdGhhdCBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UgaW5zdGVhZCBvZiBiZWluZyBhCiAgLy8vIGNvbWJpbmF0aW9uIG9mIGJvdGggaW1hZ2UncyBvcGFjaXR5IGNoYW5uZWxzLgogIC8vLwogIC8vLyBGb3IgYSB2YXJpYW50IHdpdGggdGhlIGRlc3RpbmF0aW9uIG9uIHRvcCBpbnN0ZWFkIG9mIHRoZSBzb3VyY2UsIHNlZQogIC8vLyBbZHN0QVRvcF0uCiAgLy8vCiAgLy8vICFbXShodHRwczovL2ZsdXR0ZXIuZ2l0aHViLmlvL2Fzc2V0cy1mb3ItYXBpLWRvY3MvYXNzZXRzL2RhcnQtdWkvYmxlbmRfbW9kZV9zcmNBVG9wLnBuZykKICBzcmNBVG9wLAoKICAvLy8gQ29tcG9zaXRlIHRoZSBkZXN0aW5hdGlvbiBpbWFnZSBvdmVyIHRoZSBzb3VyY2UgaW1hZ2UsIGJ1dCBvbmx5IHdoZXJlIGl0CiAgLy8vIG92ZXJsYXBzIHRoZSBzb3VyY2UuCiAgLy8vCiAgLy8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlICJEZXN0aW5hdGlvbiBhdG9wIFNvdXJjZSIgUG9ydGVyLUR1ZmYgb3BlcmF0b3IuCiAgLy8vCiAgLy8vIFRoaXMgaXMgZXNzZW50aWFsbHkgdGhlIFtkc3RPdmVyXSBvcGVyYXRvciwgYnV0IHdpdGggdGhlIG91dHB1dCdzIG9wYWNpdHkKICAvLy8gY2hhbm5lbCBiZWluZyBzZXQgdG8gdGhhdCBvZiB0aGUgc291cmNlIGltYWdlIGluc3RlYWQgb2YgYmVpbmcgYQogIC8vLyBjb21iaW5hdGlvbiBvZiBib3RoIGltYWdlJ3Mgb3BhY2l0eSBjaGFubmVscy4KICAvLy8KICAvLy8gRm9yIGEgdmFyaWFudCB3aXRoIHRoZSBzb3VyY2Ugb24gdG9wIGluc3RlYWQgb2YgdGhlIGRlc3RpbmF0aW9uLCBzZWUKICAvLy8gW3NyY0FUb3BdLgogIC8vLwogIC8vLyAhW10oaHR0cHM6Ly9mbHV0dGVyLmdpdGh1Yi5pby9hc3NldHMtZm9yLWFwaS1kb2NzL2Fzc2V0cy9kYXJ0LXVpL2JsZW5kX21vZGVfZHN0QVRvcC5wbmcpCiAgZHN0QVRvcCwKCiAgLy8vIEFwcGx5IGEgYml0d2lzZSBgeG9yYCBvcGVyYXRvciB0byB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBpbWFnZXMuIFRoaXMKICAvLy8gbGVhdmVzIHRyYW5zcGFyZW5jeSB3aGVyZSB0aGV5IHdvdWxkIG92ZXJsYXAuCiAgLy8vCiAgLy8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlICJTb3VyY2UgeG9yIERlc3RpbmF0aW9uIiBQb3J0ZXItRHVmZiBvcGVyYXRvci4KICAvLy8KICAvLy8gIVtdKGh0dHBzOi8vZmx1dHRlci5naXRodWIuaW8vYXNzZXRzLWZvci1hcGktZG9jcy9hc3NldHMvZGFydC11aS9ibGVuZF9tb2RlX3hvci5wbmcpCiAgeG9yLAoKICAvLy8gU3VtIHRoZSBjb21wb25lbnRzIG9mIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGltYWdlcy4KICAvLy8KICAvLy8gVHJhbnNwYXJlbmN5IGluIGEgcGl4ZWwgb2Ygb25lIG9mIHRoZSBpbWFnZXMgcmVkdWNlcyB0aGUgY29udHJpYnV0aW9uIG9mCiAgLy8vIHRoYXQgaW1hZ2UgdG8gdGhlIGNvcnJlc3BvbmRpbmcgb3V0cHV0IHBpeGVsLCBhcyBpZiB0aGUgY29sb3Igb2YgdGhhdAogIC8vLyBwaXhlbCBpbiB0aGF0IGltYWdlIHdhcyBkYXJrZXIuCiAgLy8vCiAgLy8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlICJTb3VyY2UgcGx1cyBEZXN0aW5hdGlvbiIgUG9ydGVyLUR1ZmYgb3BlcmF0b3IuCiAgLy8vCiAgLy8vICFbXShodHRwczovL2ZsdXR0ZXIuZ2l0aHViLmlvL2Fzc2V0cy1mb3ItYXBpLWRvY3MvYXNzZXRzL2RhcnQtdWkvYmxlbmRfbW9kZV9wbHVzLnBuZykKICBwbHVzLAoKICAvLy8gTXVsdGlwbHkgdGhlIGNvbG9yIGNvbXBvbmVudHMgb2YgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gaW1hZ2VzLgogIC8vLwogIC8vLyBUaGlzIGNhbiBvbmx5IHJlc3VsdCBpbiB0aGUgc2FtZSBvciBkYXJrZXIgY29sb3JzIChtdWx0aXBseWluZyBieSB3aGl0ZSwKICAvLy8gMS4wLCByZXN1bHRzIGluIG5vIGNoYW5nZTsgbXVsdGlwbHlpbmcgYnkgYmxhY2ssIDAuMCwgcmVzdWx0cyBpbiBibGFjaykuCiAgLy8vCiAgLy8vIFdoZW4gY29tcG9zaXRpbmcgdHdvIG9wYXF1ZSBpbWFnZXMsIHRoaXMgaGFzIHNpbWlsYXIgZWZmZWN0IHRvIG92ZXJsYXBwaW5nCiAgLy8vIHR3byB0cmFuc3BhcmVuY2llcyBvbiBhIHByb2plY3Rvci4KICAvLy8KICAvLy8gRm9yIGEgdmFyaWFudCB0aGF0IGFsc28gbXVsdGlwbGllcyB0aGUgYWxwaGEgY2hhbm5lbCwgY29uc2lkZXIgW211bHRpcGx5XS4KICAvLy8KICAvLy8gIVtdKGh0dHBzOi8vZmx1dHRlci5naXRodWIuaW8vYXNzZXRzLWZvci1hcGktZG9jcy9hc3NldHMvZGFydC11aS9ibGVuZF9tb2RlX21vZHVsYXRlLnBuZykKICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICAqIFtzY3JlZW5dLCB3aGljaCBkb2VzIGEgc2ltaWxhciBjb21wdXRhdGlvbiBidXQgaW52ZXJ0ZWQuCiAgLy8vICAqIFtvdmVybGF5XSwgd2hpY2ggY29tYmluZXMgW21vZHVsYXRlXSBhbmQgW3NjcmVlbl0gdG8gZmF2b3IgdGhlCiAgLy8vICAgIGRlc3RpbmF0aW9uIGltYWdlLgogIC8vLyAgKiBbaGFyZExpZ2h0XSwgd2hpY2ggY29tYmluZXMgW21vZHVsYXRlXSBhbmQgW3NjcmVlbl0gdG8gZmF2b3IgdGhlCiAgLy8vICAgIHNvdXJjZSBpbWFnZS4KICBtb2R1bGF0ZSwKCiAgLy8gRm9sbG93aW5nIGJsZW5kIG1vZGVzIGFyZSBkZWZpbmVkIGluIHRoZSBDU1MgQ29tcG9zaXRpbmcgc3RhbmRhcmQuCgogIC8vLyBNdWx0aXBseSB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbgogIC8vLyBpbWFnZXMsIGFuZCBpbnZlcnNlIHRoZSByZXN1bHQuCiAgLy8vCiAgLy8vIEludmVydGluZyB0aGUgY29tcG9uZW50cyBtZWFucyB0aGF0IGEgZnVsbHkgc2F0dXJhdGVkIGNoYW5uZWwgKG9wYXF1ZQogIC8vLyB3aGl0ZSkgaXMgdHJlYXRlZCBhcyB0aGUgdmFsdWUgMC4wLCBhbmQgdmFsdWVzIG5vcm1hbGx5IHRyZWF0ZWQgYXMgMC4wCiAgLy8vIChibGFjaywgdHJhbnNwYXJlbnQpIGFyZSB0cmVhdGVkIGFzIDEuMC4KICAvLy8KICAvLy8gVGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBbbW9kdWxhdGVdIGJsZW5kIG1vZGUsIGJ1dCB3aXRoIHRoZSB2YWx1ZXMKICAvLy8gb2YgdGhlIGNvbG9ycyBpbnZlcnRlZCBiZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9uIGFuZCB0aGUgcmVzdWx0IGJlaW5nCiAgLy8vIGludmVydGVkIGJhY2sgYmVmb3JlIHJlbmRlcmluZy4KICAvLy8KICAvLy8gVGhpcyBjYW4gb25seSByZXN1bHQgaW4gdGhlIHNhbWUgb3IgbGlnaHRlciBjb2xvcnMgKG11bHRpcGx5aW5nIGJ5IGJsYWNrLAogIC8vLyAxLjAsIHJlc3VsdHMgaW4gbm8gY2hhbmdlOyBtdWx0aXBseWluZyBieSB3aGl0ZSwgMC4wLCByZXN1bHRzIGluIHdoaXRlKS4KICAvLy8gU2ltaWxhcmx5LCBpbiB0aGUgYWxwaGEgY2hhbm5lbCwgaXQgY2FuIG9ubHkgcmVzdWx0IGluIG1vcmUgb3BhcXVlIGNvbG9ycy4KICAvLy8KICAvLy8gVGhpcyBoYXMgc2ltaWxhciBlZmZlY3QgdG8gdHdvIHByb2plY3RvcnMgZGlzcGxheWluZyB0aGVpciBpbWFnZXMgb24gdGhlCiAgLy8vIHNhbWUgc2NyZWVuIHNpbXVsdGFuZW91c2x5LgogIC8vLwogIC8vLyAhW10oaHR0cHM6Ly9mbHV0dGVyLmdpdGh1Yi5pby9hc3NldHMtZm9yLWFwaS1kb2NzL2Fzc2V0cy9kYXJ0LXVpL2JsZW5kX21vZGVfc2NyZWVuLnBuZykKICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICAqIFttb2R1bGF0ZV0sIHdoaWNoIGRvZXMgYSBzaW1pbGFyIGNvbXB1dGF0aW9uIGJ1dCB3aXRob3V0IGludmVydGluZyB0aGUKICAvLy8gICAgdmFsdWVzLgogIC8vLyAgKiBbb3ZlcmxheV0sIHdoaWNoIGNvbWJpbmVzIFttb2R1bGF0ZV0gYW5kIFtzY3JlZW5dIHRvIGZhdm9yIHRoZQogIC8vLyAgICBkZXN0aW5hdGlvbiBpbWFnZS4KICAvLy8gICogW2hhcmRMaWdodF0sIHdoaWNoIGNvbWJpbmVzIFttb2R1bGF0ZV0gYW5kIFtzY3JlZW5dIHRvIGZhdm9yIHRoZQogIC8vLyAgICBzb3VyY2UgaW1hZ2UuCiAgc2NyZWVuLCAgLy8gVGhlIGxhc3QgY29lZmYgbW9kZS4KCiAgLy8vIE11bHRpcGx5IHRoZSBjb21wb25lbnRzIG9mIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGltYWdlcyBhZnRlcgogIC8vLyBhZGp1c3RpbmcgdGhlbSB0byBmYXZvciB0aGUgZGVzdGluYXRpb24uCiAgLy8vCiAgLy8vIFNwZWNpZmljYWxseSwgaWYgdGhlIGRlc3RpbmF0aW9uIHZhbHVlIGlzIHNtYWxsZXIsIHRoaXMgbXVsdGlwbGllcyBpdCB3aXRoCiAgLy8vIHRoZSBzb3VyY2UgdmFsdWUsIHdoZXJlYXMgaXMgdGhlIHNvdXJjZSB2YWx1ZSBpcyBzbWFsbGVyLCBpdCBtdWx0aXBsaWVzCiAgLy8vIHRoZSBpbnZlcnNlIG9mIHRoZSBzb3VyY2UgdmFsdWUgd2l0aCB0aGUgaW52ZXJzZSBvZiB0aGUgZGVzdGluYXRpb24gdmFsdWUsCiAgLy8vIHRoZW4gaW52ZXJ0cyB0aGUgcmVzdWx0LgogIC8vLwogIC8vLyBJbnZlcnRpbmcgdGhlIGNvbXBvbmVudHMgbWVhbnMgdGhhdCBhIGZ1bGx5IHNhdHVyYXRlZCBjaGFubmVsIChvcGFxdWUKICAvLy8gd2hpdGUpIGlzIHRyZWF0ZWQgYXMgdGhlIHZhbHVlIDAuMCwgYW5kIHZhbHVlcyBub3JtYWxseSB0cmVhdGVkIGFzIDAuMAogIC8vLyAoYmxhY2ssIHRyYW5zcGFyZW50KSBhcmUgdHJlYXRlZCBhcyAxLjAuCiAgLy8vCiAgLy8vICFbXShodHRwczovL2ZsdXR0ZXIuZ2l0aHViLmlvL2Fzc2V0cy1mb3ItYXBpLWRvY3MvYXNzZXRzL2RhcnQtdWkvYmxlbmRfbW9kZV9vdmVybGF5LnBuZykKICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICAqIFttb2R1bGF0ZV0sIHdoaWNoIGFsd2F5cyBtdWx0aXBsaWVzIHRoZSB2YWx1ZXMuCiAgLy8vICAqIFtzY3JlZW5dLCB3aGljaCBhbHdheXMgbXVsdGlwbGllcyB0aGUgaW52ZXJzZXMgb2YgdGhlIHZhbHVlcy4KICAvLy8gICogW2hhcmRMaWdodF0sIHdoaWNoIGlzIHNpbWlsYXIgdG8gW292ZXJsYXldIGJ1dCBmYXZvcnMgdGhlIHNvdXJjZSBpbWFnZQogIC8vLyAgICBpbnN0ZWFkIG9mIHRoZSBkZXN0aW5hdGlvbiBpbWFnZS4KICBvdmVybGF5LAoKICAvLy8gQ29tcG9zaXRlIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGltYWdlIGJ5IGNob29zaW5nIHRoZSBsb3dlc3QgdmFsdWUKICAvLy8gZnJvbSBlYWNoIGNvbG9yIGNoYW5uZWwuCiAgLy8vCiAgLy8vIFRoZSBvcGFjaXR5IG9mIHRoZSBvdXRwdXQgaW1hZ2UgaXMgY29tcHV0ZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvcgogIC8vLyBbc3JjT3Zlcl0uCiAgLy8vCiAgLy8vICFbXShodHRwczovL2ZsdXR0ZXIuZ2l0aHViLmlvL2Fzc2V0cy1mb3ItYXBpLWRvY3MvYXNzZXRzL2RhcnQtdWkvYmxlbmRfbW9kZV9kYXJrZW4ucG5nKQogIGRhcmtlbiwKCiAgLy8vIENvbXBvc2l0ZSB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBpbWFnZSBieSBjaG9vc2luZyB0aGUgaGlnaGVzdCB2YWx1ZQogIC8vLyBmcm9tIGVhY2ggY29sb3IgY2hhbm5lbC4KICAvLy8KICAvLy8gVGhlIG9wYWNpdHkgb2YgdGhlIG91dHB1dCBpbWFnZSBpcyBjb21wdXRlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yCiAgLy8vIFtzcmNPdmVyXS4KICAvLy8KICAvLy8gIVtdKGh0dHBzOi8vZmx1dHRlci5naXRodWIuaW8vYXNzZXRzLWZvci1hcGktZG9jcy9hc3NldHMvZGFydC11aS9ibGVuZF9tb2RlX2xpZ2h0ZW4ucG5nKQogIGxpZ2h0ZW4sCgogIC8vLyBEaXZpZGUgdGhlIGRlc3RpbmF0aW9uIGJ5IHRoZSBpbnZlcnNlIG9mIHRoZSBzb3VyY2UuCiAgLy8vCiAgLy8vIEludmVydGluZyB0aGUgY29tcG9uZW50cyBtZWFucyB0aGF0IGEgZnVsbHkgc2F0dXJhdGVkIGNoYW5uZWwgKG9wYXF1ZQogIC8vLyB3aGl0ZSkgaXMgdHJlYXRlZCBhcyB0aGUgdmFsdWUgMC4wLCBhbmQgdmFsdWVzIG5vcm1hbGx5IHRyZWF0ZWQgYXMgMC4wCiAgLy8vIChibGFjaywgdHJhbnNwYXJlbnQpIGFyZSB0cmVhdGVkIGFzIDEuMC4KICAvLy8KICAvLy8gIVtdKGh0dHBzOi8vZmx1dHRlci5naXRodWIuaW8vYXNzZXRzLWZvci1hcGktZG9jcy9hc3NldHMvZGFydC11aS9ibGVuZF9tb2RlX2NvbG9yRG9kZ2UucG5nKQogIGNvbG9yRG9kZ2UsCgogIC8vLyBEaXZpZGUgdGhlIGludmVyc2Ugb2YgdGhlIGRlc3RpbmF0aW9uIGJ5IHRoZSBzb3VyY2UsIGFuZCBpbnZlcnNlIHRoZSByZXN1bHQuCiAgLy8vCiAgLy8vIEludmVydGluZyB0aGUgY29tcG9uZW50cyBtZWFucyB0aGF0IGEgZnVsbHkgc2F0dXJhdGVkIGNoYW5uZWwgKG9wYXF1ZQogIC8vLyB3aGl0ZSkgaXMgdHJlYXRlZCBhcyB0aGUgdmFsdWUgMC4wLCBhbmQgdmFsdWVzIG5vcm1hbGx5IHRyZWF0ZWQgYXMgMC4wCiAgLy8vIChibGFjaywgdHJhbnNwYXJlbnQpIGFyZSB0cmVhdGVkIGFzIDEuMC4KICAvLy8KICAvLy8gIVtdKGh0dHBzOi8vZmx1dHRlci5naXRodWIuaW8vYXNzZXRzLWZvci1hcGktZG9jcy9hc3NldHMvZGFydC11aS9ibGVuZF9tb2RlX2NvbG9yQnVybi5wbmcpCiAgY29sb3JCdXJuLAoKICAvLy8gTXVsdGlwbHkgdGhlIGNvbXBvbmVudHMgb2YgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gaW1hZ2VzIGFmdGVyCiAgLy8vIGFkanVzdGluZyB0aGVtIHRvIGZhdm9yIHRoZSBzb3VyY2UuCiAgLy8vCiAgLy8vIFNwZWNpZmljYWxseSwgaWYgdGhlIHNvdXJjZSB2YWx1ZSBpcyBzbWFsbGVyLCB0aGlzIG11bHRpcGxpZXMgaXQgd2l0aCB0aGUKICAvLy8gZGVzdGluYXRpb24gdmFsdWUsIHdoZXJlYXMgaXMgdGhlIGRlc3RpbmF0aW9uIHZhbHVlIGlzIHNtYWxsZXIsIGl0CiAgLy8vIG11bHRpcGxpZXMgdGhlIGludmVyc2Ugb2YgdGhlIGRlc3RpbmF0aW9uIHZhbHVlIHdpdGggdGhlIGludmVyc2Ugb2YgdGhlCiAgLy8vIHNvdXJjZSB2YWx1ZSwgdGhlbiBpbnZlcnRzIHRoZSByZXN1bHQuCiAgLy8vCiAgLy8vIEludmVydGluZyB0aGUgY29tcG9uZW50cyBtZWFucyB0aGF0IGEgZnVsbHkgc2F0dXJhdGVkIGNoYW5uZWwgKG9wYXF1ZQogIC8vLyB3aGl0ZSkgaXMgdHJlYXRlZCBhcyB0aGUgdmFsdWUgMC4wLCBhbmQgdmFsdWVzIG5vcm1hbGx5IHRyZWF0ZWQgYXMgMC4wCiAgLy8vIChibGFjaywgdHJhbnNwYXJlbnQpIGFyZSB0cmVhdGVkIGFzIDEuMC4KICAvLy8KICAvLy8gIVtdKGh0dHBzOi8vZmx1dHRlci5naXRodWIuaW8vYXNzZXRzLWZvci1hcGktZG9jcy9hc3NldHMvZGFydC11aS9ibGVuZF9tb2RlX2hhcmRMaWdodC5wbmcpCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgKiBbbW9kdWxhdGVdLCB3aGljaCBhbHdheXMgbXVsdGlwbGllcyB0aGUgdmFsdWVzLgogIC8vLyAgKiBbc2NyZWVuXSwgd2hpY2ggYWx3YXlzIG11bHRpcGxpZXMgdGhlIGludmVyc2VzIG9mIHRoZSB2YWx1ZXMuCiAgLy8vICAqIFtvdmVybGF5XSwgd2hpY2ggaXMgc2ltaWxhciB0byBbaGFyZExpZ2h0XSBidXQgZmF2b3JzIHRoZSBkZXN0aW5hdGlvbgogIC8vLyAgICBpbWFnZSBpbnN0ZWFkIG9mIHRoZSBzb3VyY2UgaW1hZ2UuCiAgaGFyZExpZ2h0LAoKICAvLy8gVXNlIFtjb2xvckRvZGdlXSBmb3Igc291cmNlIHZhbHVlcyBiZWxvdyAwLjUgYW5kIFtjb2xvckJ1cm5dIGZvciBzb3VyY2UKICAvLy8gdmFsdWVzIGFib3ZlIDAuNS4KICAvLy8KICAvLy8gVGhpcyByZXN1bHRzIGluIGEgc2ltaWxhciBidXQgc29mdGVyIGVmZmVjdCB0aGFuIFtvdmVybGF5XS4KICAvLy8KICAvLy8gIVtdKGh0dHBzOi8vZmx1dHRlci5naXRodWIuaW8vYXNzZXRzLWZvci1hcGktZG9jcy9hc3NldHMvZGFydC11aS9ibGVuZF9tb2RlX3NvZnRMaWdodC5wbmcpCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgKiBbY29sb3JdLCB3aGljaCBpcyBhIG1vcmUgc3VidGxlIHRpbnRpbmcgZWZmZWN0LgogIHNvZnRMaWdodCwKCiAgLy8vIFN1YnRyYWN0IHRoZSBzbWFsbGVyIHZhbHVlIGZyb20gdGhlIGJpZ2dlciB2YWx1ZSBmb3IgZWFjaCBjaGFubmVsLgogIC8vLwogIC8vLyBDb21wb3NpdGluZyBibGFjayBoYXMgbm8gZWZmZWN0OyBjb21wb3NpdGluZyB3aGl0ZSBpbnZlcnRzIHRoZSBjb2xvcnMgb2YKICAvLy8gdGhlIG90aGVyIGltYWdlLgogIC8vLwogIC8vLyBUaGUgb3BhY2l0eSBvZiB0aGUgb3V0cHV0IGltYWdlIGlzIGNvbXB1dGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IKICAvLy8gW3NyY092ZXJdLgogIC8vLwogIC8vLyBUaGUgZWZmZWN0IGlzIHNpbWlsYXIgdG8gW2V4Y2x1c2lvbl0gYnV0IGhhcnNoZXIuCiAgLy8vCiAgLy8vICFbXShodHRwczovL2ZsdXR0ZXIuZ2l0aHViLmlvL2Fzc2V0cy1mb3ItYXBpLWRvY3MvYXNzZXRzL2RhcnQtdWkvYmxlbmRfbW9kZV9kaWZmZXJlbmNlLnBuZykKICBkaWZmZXJlbmNlLAoKICAvLy8gU3VidHJhY3QgZG91YmxlIHRoZSBwcm9kdWN0IG9mIHRoZSB0d28gaW1hZ2VzIGZyb20gdGhlIHN1bSBvZiB0aGUgdHdvCiAgLy8vIGltYWdlcy4KICAvLy8KICAvLy8gQ29tcG9zaXRpbmcgYmxhY2sgaGFzIG5vIGVmZmVjdDsgY29tcG9zaXRpbmcgd2hpdGUgaW52ZXJ0cyB0aGUgY29sb3JzIG9mCiAgLy8vIHRoZSBvdGhlciBpbWFnZS4KICAvLy8KICAvLy8gVGhlIG9wYWNpdHkgb2YgdGhlIG91dHB1dCBpbWFnZSBpcyBjb21wdXRlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yCiAgLy8vIFtzcmNPdmVyXS4KICAvLy8KICAvLy8gVGhlIGVmZmVjdCBpcyBzaW1pbGFyIHRvIFtkaWZmZXJlbmNlXSBidXQgc29mdGVyLgogIC8vLwogIC8vLyAhW10oaHR0cHM6Ly9mbHV0dGVyLmdpdGh1Yi5pby9hc3NldHMtZm9yLWFwaS1kb2NzL2Fzc2V0cy9kYXJ0LXVpL2JsZW5kX21vZGVfZXhjbHVzaW9uLnBuZykKICBleGNsdXNpb24sCgogIC8vLyBNdWx0aXBseSB0aGUgY29tcG9uZW50cyBvZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBpbWFnZXMsIGluY2x1ZGluZwogIC8vLyB0aGUgYWxwaGEgY2hhbm5lbC4KICAvLy8KICAvLy8gVGhpcyBjYW4gb25seSByZXN1bHQgaW4gdGhlIHNhbWUgb3IgZGFya2VyIGNvbG9ycyAobXVsdGlwbHlpbmcgYnkgd2hpdGUsCiAgLy8vIDEuMCwgcmVzdWx0cyBpbiBubyBjaGFuZ2U7IG11bHRpcGx5aW5nIGJ5IGJsYWNrLCAwLjAsIHJlc3VsdHMgaW4gYmxhY2spLgogIC8vLwogIC8vLyBTaW5jZSB0aGUgYWxwaGEgY2hhbm5lbCBpcyBhbHNvIG11bHRpcGxpZWQsIGEgZnVsbHktdHJhbnNwYXJlbnQgcGl4ZWwKICAvLy8gKG9wYWNpdHkgMC4wKSBpbiBvbmUgaW1hZ2UgcmVzdWx0cyBpbiBhIGZ1bGx5IHRyYW5zcGFyZW50IHBpeGVsIGluIHRoZQogIC8vLyBvdXRwdXQuIFRoaXMgaXMgc2ltaWxhciB0byBbZHN0SW5dLCBidXQgd2l0aCB0aGUgY29sb3JzIGNvbWJpbmVkLgogIC8vLwogIC8vLyBGb3IgYSB2YXJpYW50IHRoYXQgbXVsdGlwbGllcyB0aGUgY29sb3JzIGJ1dCBkb2VzIG5vdCBtdWx0aXBseSB0aGUgYWxwaGEKICAvLy8gY2hhbm5lbCwgY29uc2lkZXIgW21vZHVsYXRlXS4KICAvLy8KICAvLy8gIVtdKGh0dHBzOi8vZmx1dHRlci5naXRodWIuaW8vYXNzZXRzLWZvci1hcGktZG9jcy9hc3NldHMvZGFydC11aS9ibGVuZF9tb2RlX211bHRpcGx5LnBuZykKICBtdWx0aXBseSwgIC8vIFRoZSBsYXN0IHNlcGFyYWJsZSBtb2RlLgoKICAvLy8gVGFrZSB0aGUgaHVlIG9mIHRoZSBzb3VyY2UgaW1hZ2UsIGFuZCB0aGUgc2F0dXJhdGlvbiBhbmQgbHVtaW5vc2l0eSBvZiB0aGUKICAvLy8gZGVzdGluYXRpb24gaW1hZ2UuCiAgLy8vCiAgLy8vIFRoZSBlZmZlY3QgaXMgdG8gdGludCB0aGUgZGVzdGluYXRpb24gaW1hZ2Ugd2l0aCB0aGUgc291cmNlIGltYWdlLgogIC8vLwogIC8vLyBUaGUgb3BhY2l0eSBvZiB0aGUgb3V0cHV0IGltYWdlIGlzIGNvbXB1dGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IKICAvLy8gW3NyY092ZXJdLiBSZWdpb25zIHRoYXQgYXJlIGVudGlyZWx5IHRyYW5zcGFyZW50IGluIHRoZSBzb3VyY2UgaW1hZ2UgdGFrZQogIC8vLyB0aGVpciBodWUgZnJvbSB0aGUgZGVzdGluYXRpb24uCiAgLy8vCiAgLy8vICFbXShodHRwczovL2ZsdXR0ZXIuZ2l0aHViLmlvL2Fzc2V0cy1mb3ItYXBpLWRvY3MvYXNzZXRzL2RhcnQtdWkvYmxlbmRfbW9kZV9odWUucG5nKQogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogW2NvbG9yXSwgd2hpY2ggaXMgYSBzaW1pbGFyIGJ1dCBzdHJvbmdlciBlZmZlY3QgYXMgaXQgYWxzbyBhcHBsaWVzIHRoZQogIC8vLyAgICBzYXR1cmF0aW9uIG9mIHRoZSBzb3VyY2UgaW1hZ2UuCiAgLy8vICAqIFtIU1ZDb2xvcl0sIHdoaWNoIGFsbG93cyBjb2xvcnMgdG8gYmUgZXhwcmVzc2VkIHVzaW5nIEh1ZSByYXRoZXIgdGhhbgogIC8vLyAgICB0aGUgcmVkL2dyZWVuL2JsdWUgY2hhbm5lbHMgb2YgW0NvbG9yXS4KICBodWUsCgogIC8vLyBUYWtlIHRoZSBzYXR1cmF0aW9uIG9mIHRoZSBzb3VyY2UgaW1hZ2UsIGFuZCB0aGUgaHVlIGFuZCBsdW1pbm9zaXR5IG9mIHRoZQogIC8vLyBkZXN0aW5hdGlvbiBpbWFnZS4KICAvLy8KICAvLy8gVGhlIG9wYWNpdHkgb2YgdGhlIG91dHB1dCBpbWFnZSBpcyBjb21wdXRlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yCiAgLy8vIFtzcmNPdmVyXS4gUmVnaW9ucyB0aGF0IGFyZSBlbnRpcmVseSB0cmFuc3BhcmVudCBpbiB0aGUgc291cmNlIGltYWdlIHRha2UKICAvLy8gdGhlaXIgc2F0dXJhdGlvbiBmcm9tIHRoZSBkZXN0aW5hdGlvbi4KICAvLy8KICAvLy8gIVtdKGh0dHBzOi8vZmx1dHRlci5naXRodWIuaW8vYXNzZXRzLWZvci1hcGktZG9jcy9hc3NldHMvZGFydC11aS9ibGVuZF9tb2RlX2h1ZS5wbmcpCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgKiBbY29sb3JdLCB3aGljaCBhbHNvIGFwcGxpZXMgdGhlIGh1ZSBvZiB0aGUgc291cmNlIGltYWdlLgogIC8vLyAgKiBbbHVtaW5vc2l0eV0sIHdoaWNoIGFwcGxpZXMgdGhlIGx1bWlub3NpdHkgb2YgdGhlIHNvdXJjZSBpbWFnZSB0byB0aGUKICAvLy8gICAgZGVzdGluYXRpb24uCiAgc2F0dXJhdGlvbiwKCiAgLy8vIFRha2UgdGhlIGh1ZSBhbmQgc2F0dXJhdGlvbiBvZiB0aGUgc291cmNlIGltYWdlLCBhbmQgdGhlIGx1bWlub3NpdHkgb2YgdGhlCiAgLy8vIGRlc3RpbmF0aW9uIGltYWdlLgogIC8vLwogIC8vLyBUaGUgZWZmZWN0IGlzIHRvIHRpbnQgdGhlIGRlc3RpbmF0aW9uIGltYWdlIHdpdGggdGhlIHNvdXJjZSBpbWFnZS4KICAvLy8KICAvLy8gVGhlIG9wYWNpdHkgb2YgdGhlIG91dHB1dCBpbWFnZSBpcyBjb21wdXRlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yCiAgLy8vIFtzcmNPdmVyXS4gUmVnaW9ucyB0aGF0IGFyZSBlbnRpcmVseSB0cmFuc3BhcmVudCBpbiB0aGUgc291cmNlIGltYWdlIHRha2UKICAvLy8gdGhlaXIgaHVlIGFuZCBzYXR1cmF0aW9uIGZyb20gdGhlIGRlc3RpbmF0aW9uLgogIC8vLwogIC8vLyAhW10oaHR0cHM6Ly9mbHV0dGVyLmdpdGh1Yi5pby9hc3NldHMtZm9yLWFwaS1kb2NzL2Fzc2V0cy9kYXJ0LXVpL2JsZW5kX21vZGVfY29sb3IucG5nKQogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogW2h1ZV0sIHdoaWNoIGlzIGEgc2ltaWxhciBidXQgd2Vha2VyIGVmZmVjdC4KICAvLy8gICogW3NvZnRMaWdodF0sIHdoaWNoIGlzIGEgc2ltaWxhciB0aW50aW5nIGVmZmVjdCBidXQgYWxzbyB0aW50cyB3aGl0ZS4KICAvLy8gICogW3NhdHVyYXRpb25dLCB3aGljaCBvbmx5IGFwcGxpZXMgdGhlIHNhdHVyYXRpb24gb2YgdGhlIHNvdXJjZSBpbWFnZS4KICBjb2xvciwKCiAgLy8vIFRha2UgdGhlIGx1bWlub3NpdHkgb2YgdGhlIHNvdXJjZSBpbWFnZSwgYW5kIHRoZSBodWUgYW5kIHNhdHVyYXRpb24gb2YgdGhlCiAgLy8vIGRlc3RpbmF0aW9uIGltYWdlLgogIC8vLwogIC8vLyBUaGUgb3BhY2l0eSBvZiB0aGUgb3V0cHV0IGltYWdlIGlzIGNvbXB1dGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IKICAvLy8gW3NyY092ZXJdLiBSZWdpb25zIHRoYXQgYXJlIGVudGlyZWx5IHRyYW5zcGFyZW50IGluIHRoZSBzb3VyY2UgaW1hZ2UgdGFrZQogIC8vLyB0aGVpciBsdW1pbm9zaXR5IGZyb20gdGhlIGRlc3RpbmF0aW9uLgogIC8vLwogIC8vLyAhW10oaHR0cHM6Ly9mbHV0dGVyLmdpdGh1Yi5pby9hc3NldHMtZm9yLWFwaS1kb2NzL2Fzc2V0cy9kYXJ0LXVpL2JsZW5kX21vZGVfbHVtaW5vc2l0eS5wbmcpCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgKiBbc2F0dXJhdGlvbl0sIHdoaWNoIGFwcGxpZXMgdGhlIHNhdHVyYXRpb24gb2YgdGhlIHNvdXJjZSBpbWFnZSB0byB0aGUKICAvLy8gICAgZGVzdGluYXRpb24uCiAgLy8vICAqIFtJbWFnZUZpbHRlci5ibHVyXSwgd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBbQmFja2Ryb3BGaWx0ZXJdIGZvciBhCiAgLy8vICAgIHJlbGF0ZWQgZWZmZWN0LgogIGx1bWlub3NpdHksCn0KCi8vLyBRdWFsaXR5IGxldmVscyBmb3IgaW1hZ2UgZmlsdGVycy4KLy8vCi8vLyBTZWUgW1BhaW50LmZpbHRlclF1YWxpdHldLgplbnVtIEZpbHRlclF1YWxpdHkgewogIC8vIFRoaXMgbGlzdCBjb21lcyBmcm9tIFNraWEncyBTa0ZpbHRlclF1YWxpdHkuaCBhbmQgdGhlIHZhbHVlcyAob3JkZXIpIHNob3VsZAogIC8vIGJlIGtlcHQgaW4gc3luYy4KCiAgLy8vIEZhc3Rlc3QgcG9zc2libGUgZmlsdGVyaW5nLCBhbGJlaXQgYWxzbyB0aGUgbG93ZXN0IHF1YWxpdHkuCiAgLy8vCiAgLy8vIFR5cGljYWxseSB0aGlzIGltcGxpZXMgbmVhcmVzdC1uZWlnaGJvciBmaWx0ZXJpbmcuCiAgbm9uZSwKCiAgLy8vIEJldHRlciBxdWFsaXR5IHRoYW4gW25vbmVdLCBmYXN0ZXIgdGhhbiBbbWVkaXVtXS4KICAvLy8KICAvLy8gVHlwaWNhbGx5IHRoaXMgaW1wbGllcyBiaWxpbmVhciBpbnRlcnBvbGF0aW9uLgogIGxvdywKCiAgLy8vIEJldHRlciBxdWFsaXR5IHRoYW4gW2xvd10sIGZhc3RlciB0aGFuIFtoaWdoXS4KICAvLy8KICAvLy8gVHlwaWNhbGx5IHRoaXMgaW1wbGllcyBhIGNvbWJpbmF0aW9uIG9mIGJpbGluZWFyIGludGVycG9sYXRpb24gYW5kCiAgLy8vIHB5cmFtaWRhbCBwYXJhbWV0cmljIHByZS1maWx0ZXJpbmcgKG1pcG1hcHMpLgogIG1lZGl1bSwKCiAgLy8vIEJlc3QgcG9zc2libGUgcXVhbGl0eSBmaWx0ZXJpbmcsIGFsYmVpdCBhbHNvIHRoZSBzbG93ZXN0LgogIC8vLwogIC8vLyBUeXBpY2FsbHkgdGhpcyBpbXBsaWVzIGJpY3ViaWMgaW50ZXJwb2xhdGlvbiBvciBiZXR0ZXIuCiAgaGlnaCwKfQoKLy8vIFN0eWxlcyB0byB1c2UgZm9yIGxpbmUgZW5kaW5ncy4KLy8vCi8vLyBTZWUgYWxzbzoKLy8vCi8vLyAgKiBbUGFpbnQuc3Ryb2tlQ2FwXSBmb3IgaG93IHRoaXMgdmFsdWUgaXMgdXNlZC4KLy8vICAqIFtTdHJva2VKb2luXSBmb3IgdGhlIGRpZmZlcmVudCBraW5kcyBvZiBsaW5lIHNlZ21lbnQgam9pbnMuCi8vIFRoZXNlIGVudW0gdmFsdWVzIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggU2tQYWludDo6Q2FwLgplbnVtIFN0cm9rZUNhcCB7CiAgLy8vIEJlZ2luIGFuZCBlbmQgY29udG91cnMgd2l0aCBhIGZsYXQgZWRnZSBhbmQgbm8gZXh0ZW5zaW9uLgogIC8vLwogIC8vLyAhW0EgYnV0dCBjYXAgZW5kcyBsaW5lIHNlZ21lbnRzIHdpdGggYSBzcXVhcmUgZW5kIHRoYXQgc3RvcHMgYXQgdGhlIGVuZCBvZgogIC8vLyB0aGUgbGluZSBzZWdtZW50Ll0oaHR0cHM6Ly9mbHV0dGVyLmdpdGh1Yi5pby9hc3NldHMtZm9yLWFwaS1kb2NzL2Fzc2V0cy9kYXJ0LXVpL2J1dHRfY2FwLnBuZykKICAvLy8KICAvLy8gQ29tcGFyZSB0byB0aGUgW3NxdWFyZV0gY2FwLCB3aGljaCBoYXMgdGhlIHNhbWUgc2hhcGUsIGJ1dCBleHRlbmRzIHBhc3QKICAvLy8gdGhlIGVuZCBvZiB0aGUgbGluZSBieSBoYWxmIGEgc3Ryb2tlIHdpZHRoLgogIGJ1dHQsCgogIC8vLyBCZWdpbiBhbmQgZW5kIGNvbnRvdXJzIHdpdGggYSBzZW1pLWNpcmNsZSBleHRlbnNpb24uCiAgLy8vCiAgLy8vICFbQSByb3VuZCBjYXAgYWRkcyBhIHJvdW5kZWQgZW5kIHRvIHRoZSBsaW5lIHNlZ21lbnQgdGhhdCBwcm90cnVkZXMKICAvLy8gYnkgb25lIGhhbGYgb2YgdGhlIHRoaWNrbmVzcyBvZiB0aGUgbGluZSAod2hpY2ggaXMgdGhlIHJhZGl1cyBvZiB0aGUgY2FwKQogIC8vLyBwYXN0IHRoZSBlbmQgb2YgdGhlIHNlZ21lbnQuXShodHRwczovL2ZsdXR0ZXIuZ2l0aHViLmlvL2Fzc2V0cy1mb3ItYXBpLWRvY3MvYXNzZXRzL2RhcnQtdWkvcm91bmRfY2FwLnBuZykKICAvLy8KICAvLy8gVGhlIGNhcCBpcyBjb2xvcmVkIGluIHRoZSBkaWFncmFtIGFib3ZlIHRvIGhpZ2hsaWdodCBpdDogaW4gbm9ybWFsIHVzZSBpdAogIC8vLyBpcyB0aGUgc2FtZSBjb2xvciBhcyB0aGUgbGluZS4KICByb3VuZCwKCiAgLy8vIEJlZ2luIGFuZCBlbmQgY29udG91cnMgd2l0aCBhIGhhbGYgc3F1YXJlIGV4dGVuc2lvbi4gVGhpcyBpcwogIC8vLyBzaW1pbGFyIHRvIGV4dGVuZGluZyBlYWNoIGNvbnRvdXIgYnkgaGFsZiB0aGUgc3Ryb2tlIHdpZHRoIChhcwogIC8vLyBnaXZlbiBieSBbUGFpbnQuc3Ryb2tlV2lkdGhdKS4KICAvLy8KICAvLy8gIVtBIHNxdWFyZSBjYXAgaGFzIGEgc3F1YXJlIGVuZCB0aGF0IGVmZmVjdGl2ZWx5IGV4dGVuZHMgdGhlIGxpbmUgbGVuZ3RoCiAgLy8vIGJ5IGhhbGYgb2YgdGhlIHN0cm9rZSB3aWR0aC5dKGh0dHBzOi8vZmx1dHRlci5naXRodWIuaW8vYXNzZXRzLWZvci1hcGktZG9jcy9hc3NldHMvZGFydC11aS9zcXVhcmVfY2FwLnBuZykKICAvLy8KICAvLy8gVGhlIGNhcCBpcyBjb2xvcmVkIGluIHRoZSBkaWFncmFtIGFib3ZlIHRvIGhpZ2hsaWdodCBpdDogaW4gbm9ybWFsIHVzZSBpdAogIC8vLyBpcyB0aGUgc2FtZSBjb2xvciBhcyB0aGUgbGluZS4KICAvLy8KICAvLy8gQ29tcGFyZSB0byB0aGUgW2J1dHRdIGNhcCwgd2hpY2ggaGFzIHRoZSBzYW1lIHNoYXBlLCBidXQgZG9lc24ndCBleHRlbmQKICAvLy8gcGFzdCB0aGUgZW5kIG9mIHRoZSBsaW5lLgogIHNxdWFyZSwKfQoKLy8vIFN0eWxlcyB0byB1c2UgZm9yIGxpbmUgc2VnbWVudCBqb2lucy4KLy8vCi8vLyBUaGlzIG9ubHkgYWZmZWN0cyBsaW5lIGpvaW5zIGZvciBwb2x5Z29ucyBkcmF3biBieSBbQ2FudmFzLmRyYXdQYXRoXSBhbmQKLy8vIHJlY3RhbmdsZXMsIG5vdCBwb2ludHMgZHJhd24gYXMgbGluZXMgd2l0aCBbQ2FudmFzLmRyYXdQb2ludHNdLgovLy8KLy8vIFNlZSBhbHNvOgovLy8KLy8vICogW1BhaW50LnN0cm9rZUpvaW5dIGFuZCBbUGFpbnQuc3Ryb2tlTWl0ZXJMaW1pdF0gZm9yIGhvdyB0aGlzIHZhbHVlIGlzCi8vLyAgIHVzZWQuCi8vLyAqIFtTdHJva2VDYXBdIGZvciB0aGUgZGlmZmVyZW50IGtpbmRzIG9mIGxpbmUgZW5kaW5ncy4KLy8gVGhlc2UgZW51bSB2YWx1ZXMgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCBTa1BhaW50OjpKb2luLgplbnVtIFN0cm9rZUpvaW4gewogIC8vLyBKb2lucyBiZXR3ZWVuIGxpbmUgc2VnbWVudHMgZm9ybSBzaGFycCBjb3JuZXJzLgogIC8vLwogIC8vLyB7QGFuaW1hdGlvbiAzMDAgMzAwIGh0dHBzOi8vZmx1dHRlci5naXRodWIuaW8vYXNzZXRzLWZvci1hcGktZG9jcy9hc3NldHMvZGFydC11aS9taXRlcl80X2pvaW4ubXA0fQogIC8vLwogIC8vLyBUaGUgY2VudGVyIG9mIHRoZSBsaW5lIHNlZ21lbnQgaXMgY29sb3JlZCBpbiB0aGUgZGlhZ3JhbSBhYm92ZSB0bwogIC8vLyBoaWdobGlnaHQgdGhlIGpvaW4sIGJ1dCBpbiBub3JtYWwgdXNhZ2UgdGhlIGpvaW4gaXMgdGhlIHNhbWUgY29sb3IgYXMgdGhlCiAgLy8vIGxpbmUuCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgICogW1BhaW50LnN0cm9rZUpvaW5dLCB1c2VkIHRvIHNldCB0aGUgbGluZSBzZWdtZW50IGpvaW4gc3R5bGUgdG8gdGhpcwogIC8vLyAgICAgdmFsdWUuCiAgLy8vICAgKiBbUGFpbnQuc3Ryb2tlTWl0ZXJMaW1pdF0sIHVzZWQgdG8gZGVmaW5lIHdoZW4gYSBtaXRlciBpcyBkcmF3biBpbnN0ZWFkCiAgLy8vICAgICBvZiBhIGJldmVsIHdoZW4gdGhlIGpvaW4gaXMgc2V0IHRvIHRoaXMgdmFsdWUuCiAgbWl0ZXIsCgogIC8vLyBKb2lucyBiZXR3ZWVuIGxpbmUgc2VnbWVudHMgYXJlIHNlbWktY2lyY3VsYXIuCiAgLy8vCiAgLy8vIHtAYW5pbWF0aW9uIDMwMCAzMDAgaHR0cHM6Ly9mbHV0dGVyLmdpdGh1Yi5pby9hc3NldHMtZm9yLWFwaS1kb2NzL2Fzc2V0cy9kYXJ0LXVpL3JvdW5kX2pvaW4ubXA0fQogIC8vLwogIC8vLyBUaGUgY2VudGVyIG9mIHRoZSBsaW5lIHNlZ21lbnQgaXMgY29sb3JlZCBpbiB0aGUgZGlhZ3JhbSBhYm92ZSB0bwogIC8vLyBoaWdobGlnaHQgdGhlIGpvaW4sIGJ1dCBpbiBub3JtYWwgdXNhZ2UgdGhlIGpvaW4gaXMgdGhlIHNhbWUgY29sb3IgYXMgdGhlCiAgLy8vIGxpbmUuCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgICogW1BhaW50LnN0cm9rZUpvaW5dLCB1c2VkIHRvIHNldCB0aGUgbGluZSBzZWdtZW50IGpvaW4gc3R5bGUgdG8gdGhpcwogIC8vLyAgICAgdmFsdWUuCiAgcm91bmQsCgogIC8vLyBKb2lucyBiZXR3ZWVuIGxpbmUgc2VnbWVudHMgY29ubmVjdCB0aGUgY29ybmVycyBvZiB0aGUgYnV0dCBlbmRzIG9mIHRoZQogIC8vLyBsaW5lIHNlZ21lbnRzIHRvIGdpdmUgYSBiZXZlbGVkIGFwcGVhcmFuY2UuCiAgLy8vCiAgLy8vIHtAYW5pbWF0aW9uIDMwMCAzMDAgaHR0cHM6Ly9mbHV0dGVyLmdpdGh1Yi5pby9hc3NldHMtZm9yLWFwaS1kb2NzL2Fzc2V0cy9kYXJ0LXVpL2JldmVsX2pvaW4ubXA0fQogIC8vLwogIC8vLyBUaGUgY2VudGVyIG9mIHRoZSBsaW5lIHNlZ21lbnQgaXMgY29sb3JlZCBpbiB0aGUgZGlhZ3JhbSBhYm92ZSB0bwogIC8vLyBoaWdobGlnaHQgdGhlIGpvaW4sIGJ1dCBpbiBub3JtYWwgdXNhZ2UgdGhlIGpvaW4gaXMgdGhlIHNhbWUgY29sb3IgYXMgdGhlCiAgLy8vIGxpbmUuCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgICogW1BhaW50LnN0cm9rZUpvaW5dLCB1c2VkIHRvIHNldCB0aGUgbGluZSBzZWdtZW50IGpvaW4gc3R5bGUgdG8gdGhpcwogIC8vLyAgICAgdmFsdWUuCiAgYmV2ZWwsCn0KCi8vLyBTdHJhdGVnaWVzIGZvciBwYWludGluZyBzaGFwZXMgYW5kIHBhdGhzIG9uIGEgY2FudmFzLgovLy8KLy8vIFNlZSBbUGFpbnQuc3R5bGVdLgovLyBUaGVzZSBlbnVtIHZhbHVlcyBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIFNrUGFpbnQ6OlN0eWxlLgplbnVtIFBhaW50aW5nU3R5bGUgewogIC8vIFRoaXMgbGlzdCBjb21lcyBmcm9tIFNraWEncyBTa1BhaW50LmggYW5kIHRoZSB2YWx1ZXMgKG9yZGVyKSBzaG91bGQgYmUga2VwdAogIC8vIGluIHN5bmMuCgogIC8vLyBBcHBseSB0aGUgW1BhaW50XSB0byB0aGUgaW5zaWRlIG9mIHRoZSBzaGFwZS4gRm9yIGV4YW1wbGUsIHdoZW4KICAvLy8gYXBwbGllZCB0byB0aGUgW0NhbnZhcy5kcmF3Q2lyY2xlXSBjYWxsLCB0aGlzIHJlc3VsdHMgaW4gYSBkaXNjCiAgLy8vIG9mIHRoZSBnaXZlbiBzaXplIGJlaW5nIHBhaW50ZWQuCiAgZmlsbCwKCiAgLy8vIEFwcGx5IHRoZSBbUGFpbnRdIHRvIHRoZSBlZGdlIG9mIHRoZSBzaGFwZS4gRm9yIGV4YW1wbGUsIHdoZW4KICAvLy8gYXBwbGllZCB0byB0aGUgW0NhbnZhcy5kcmF3Q2lyY2xlXSBjYWxsLCB0aGlzIHJlc3VsdHMgaXMgYSBob29wCiAgLy8vIG9mIHRoZSBnaXZlbiBzaXplIGJlaW5nIHBhaW50ZWQuIFRoZSBsaW5lIGRyYXduIG9uIHRoZSBlZGdlIHdpbGwKICAvLy8gYmUgdGhlIHdpZHRoIGdpdmVuIGJ5IHRoZSBbUGFpbnQuc3Ryb2tlV2lkdGhdIHByb3BlcnR5LgogIHN0cm9rZSwKfQoKCi8vLyBEaWZmZXJlbnQgd2F5cyB0byBjbGlwIGEgd2lkZ2V0J3MgY29udGVudC4KZW51bSBDbGlwIHsKICAvLy8gTm8gY2xpcCBhdCBhbGwuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdGhlIGRlZmF1bHQgb3B0aW9uIGZvciBtb3N0IHdpZGdldHM6IGlmIHRoZSBjb250ZW50IGRvZXMgbm90CiAgLy8vIG92ZXJmbG93IHRoZSB3aWRnZXQgYm91bmRhcnksIGRvbid0IHBheSBhbnkgcGVyZm9ybWFuY2UgY29zdCBmb3IgY2xpcHBpbmcuCiAgLy8vCiAgLy8vIElmIHRoZSBjb250ZW50IGRvZXMgb3ZlcmZsb3csIHBsZWFzZSBleHBsaWNpdGx5IHNwZWNpZnkgdGhlIGZvbGxvd2luZwogIC8vLyBbQ2xpcF0gb3B0aW9uczoKICAvLy8gICogW2hhcmRFZGdlXSwgd2hpY2ggaXMgdGhlIGZhc3Rlc3QgY2xpcHBpbmcsIGJ1dCB3aXRoIGxvd2VyIGZpZGVsaXR5LgogIC8vLyAgKiBbYW50aUFsaWFzXSwgd2hpY2ggaXMgYSBsaXR0bGUgc2xvd2VyIHRoYW4gW2hhcmRFZGdlXSwgYnV0IHdpdGggc21vb3RoZWQgZWRnZXMuCiAgLy8vICAqIFthbnRpQWxpYXNXaXRoU2F2ZUxheWVyXSwgd2hpY2ggaXMgbXVjaCBzbG93ZXIgdGhhbiBbYW50aUFsaWFzXSwgYW5kIHNob3VsZAogIC8vLyAgICByYXJlbHkgYmUgdXNlZC4KICBub25lLAoKICAvLy8gQ2xpcCwgYnV0IGRvIG5vdCBhcHBseSBhbnRpLWFsaWFzaW5nLgogIC8vLwogIC8vLyBUaGlzIG1vZGUgZW5hYmxlcyBjbGlwcGluZywgYnV0IGN1cnZlcyBhbmQgbm9uLWF4aXMtYWxpZ25lZCBzdHJhaWdodCBsaW5lcyB3aWxsIGJlCiAgLy8vIGphZ2dlZCBhcyBubyBlZmZvcnQgaXMgbWFkZSB0byBhbnRpLWFsaWFzLgogIC8vLwogIC8vLyBGYXN0ZXIgdGhhbiBvdGhlciBjbGlwcGluZyBtb2RlcywgYnV0IHNsb3dlciB0aGFuIFtub25lXS4KICAvLy8KICAvLy8gVGhpcyBpcyBhIHJlYXNvbmFibGUgY2hvaWNlIHdoZW4gY2xpcHBpbmcgaXMgbmVlZGVkLCBpZiB0aGUgY29udGFpbmVyIGlzIGFuIGF4aXMtCiAgLy8vIGFsaWduZWQgcmVjdGFuZ2xlIG9yIGFuIGF4aXMtYWxpZ25lZCByb3VuZGVkIHJlY3RhbmdsZSB3aXRoIHZlcnkgc21hbGwgY29ybmVyIHJhZGlpLgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogW2FudGlBbGlhc10sIHdoaWNoIGlzIG1vcmUgcmVhc29uYWJsZSB3aGVuIGNsaXBwaW5nIGlzIG5lZWRlZCBhbmQgdGhlIHNoYXBlIGlzIG5vdAogIC8vLyAgICBhbiBheGlzLWFsaWduZWQgcmVjdGFuZ2xlLgogIGhhcmRFZGdlLAoKICAvLy8gQ2xpcCB3aXRoIGFudGktYWxpYXNpbmcuCiAgLy8vCiAgLy8vIFRoaXMgbW9kZSBoYXMgYW50aS1hbGlhc2VkIGNsaXBwaW5nIGVkZ2VzIHRvIGFjaGlldmUgYSBzbW9vdGhlciBsb29rLgogIC8vLwogIC8vLyBJdCcgcyBtdWNoIGZhc3RlciB0aGFuIFthbnRpQWxpYXNXaXRoU2F2ZUxheWVyXSwgYnV0IHNsb3dlciB0aGFuIFtoYXJkRWRnZV0uCiAgLy8vCiAgLy8vIFRoaXMgd2lsbCBiZSB0aGUgY29tbW9uIGNhc2Ugd2hlbiBkZWFsaW5nIHdpdGggY2lyY2xlcyBhbmQgYXJjcy4KICAvLy8KICAvLy8gRGlmZmVyZW50IGZyb20gW2hhcmRFZGdlXSBhbmQgW2FudGlBbGlhc1dpdGhTYXZlTGF5ZXJdLCB0aGlzIGNsaXBwaW5nIG1heSBoYXZlCiAgLy8vIGJsZWVkaW5nIGVkZ2UgYXJ0aWZhY3RzLgogIC8vLyAoU2VlIGh0dHBzOi8vZmlkZGxlLnNraWEub3JnL2MvMjFjYjRjMmIyNTE1OTk2YjUzN2YzNmU3ODE5Mjg4YWUgZm9yIGFuIGV4YW1wbGUuKQogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogW2hhcmRFZGdlXSwgd2hpY2ggaXMgYSBsaXR0bGUgZmFzdGVyLCBidXQgd2l0aCBsb3dlciBmaWRlbGl0eS4KICAvLy8gICogW2FudGlBbGlhc1dpdGhTYXZlTGF5ZXJdLCB3aGljaCBpcyBtdWNoIHNsb3dlciwgYnV0IGNhbiBhdm9pZCB0aGUKICAvLy8gICAgYmxlZWRpbmcgZWRnZXMgaWYgdGhlcmUncyBubyBvdGhlciB3YXkuCiAgLy8vICAqIFtQYWludC5pc0FudGlBbGlhc10sIHdoaWNoIGlzIHRoZSBhbnRpLWFsaWFzaW5nIHN3aXRjaCBmb3IgZ2VuZXJhbCBkcmF3IG9wZXJhdGlvbnMuCiAgYW50aUFsaWFzLAoKICAvLy8gQ2xpcCB3aXRoIGFudGktYWxpYXNpbmcgYW5kIHNhdmVMYXllciBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNsaXAuCiAgLy8vCiAgLy8vIFRoaXMgbW9kZSBub3Qgb25seSBjbGlwcyB3aXRoIGFudGktYWxpYXNpbmcsIGJ1dCBhbHNvIGFsbG9jYXRlcyBhbiBvZmZzY3JlZW4KICAvLy8gYnVmZmVyLiBBbGwgc3Vic2VxdWVudCBwYWludHMgYXJlIGNhcnJpZWQgb3V0IG9uIHRoYXQgYnVmZmVyIGJlZm9yZSBmaW5hbGx5CiAgLy8vIGJlaW5nIGNsaXBwZWQgYW5kIGNvbXBvc2l0ZWQgYmFjay4KICAvLy8KICAvLy8gVGhpcyBpcyB2ZXJ5IHNsb3cuIEl0IGhhcyBubyBibGVlZGluZyBlZGdlIGFydGlmYWN0cyAodGhhdCBbYW50aUFsaWFzXSBoYXMpCiAgLy8vIGJ1dCBpdCBjaGFuZ2VzIHRoZSBzZW1hbnRpY3MgYXMgYW4gb2Zmc2NyZWVuIGJ1ZmZlciBpcyBub3cgaW50cm9kdWNlZC4KICAvLy8gKFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmx1dHRlci9mbHV0dGVyL2lzc3Vlcy8xODA1NyNpc3N1ZWNvbW1lbnQtMzk0MTk3MzM2CiAgLy8vIGZvciBhIGRpZmZlcmVuY2UgYmV0d2VlbiBwYWludCB3aXRob3V0IHNhdmVMYXllciBhbmQgcGFpbnQgd2l0aCBzYXZlTGF5ZXIuKQogIC8vLwogIC8vLyBUaGlzIHdpbGwgYmUgb25seSByYXJlbHkgbmVlZGVkLiBPbmUgY2FzZSB3aGVyZSB5b3UgbWlnaHQgbmVlZCB0aGlzIGlzIGlmCiAgLy8vIHlvdSBoYXZlIGFuIGltYWdlIG92ZXJsYWlkIG9uIGEgdmVyeSBkaWZmZXJlbnQgYmFja2dyb3VuZCBjb2xvci4gSW4gdGhlc2UKICAvLy8gY2FzZXMsIGNvbnNpZGVyIHdoZXRoZXIgeW91IGNhbiBhdm9pZCBvdmVybGF5aW5nIG11bHRpcGxlIGNvbG9ycyBpbiBvbmUKICAvLy8gc3BvdCAoZS5nLiBieSBoYXZpbmcgdGhlIGJhY2tncm91bmQgY29sb3Igb25seSBwcmVzZW50IHdoZXJlIHRoZSBpbWFnZSBpcwogIC8vLyBhYnNlbnQpLiBJZiB5b3UgY2FuLCBbYW50aUFsaWFzXSB3b3VsZCBiZSBmaW5lIGFuZCBtdWNoIGZhc3Rlci4KICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICAqIFthbnRpQWxpYXNdLCB3aGljaCBpcyBtdWNoIGZhc3RlciwgYW5kIGhhcyBzaW1pbGFyIGNsaXBwaW5nIHJlc3VsdHMuCiAgYW50aUFsaWFzV2l0aFNhdmVMYXllciwKfQoKLy8vIEluZGljYXRlcyB0aGF0IHRoZSBpbWFnZSBzaG91bGQgbm90IGJlIHJlc2l6ZWQgaW4gdGhpcyBkaW1lbnNpb24uCi8vLwovLy8gVXNlZCBieSBbaW5zdGFudGlhdGVJbWFnZUNvZGVjXSBhcyBhIG1hZ2ljYWwgdmFsdWUgdG8gZGlzYWJsZSByZXNpemluZwovLy8gaW4gdGhlIGdpdmVuIGRpbWVuc2lvbi4KY29uc3QgaW50IF9rRG9Ob3RSZXNpemVEaW1lbnNpb24gPSAtMTsKCi8vLyBBIGRlc2NyaXB0aW9uIG9mIHRoZSBzdHlsZSB0byB1c2Ugd2hlbiBkcmF3aW5nIG9uIGEgW0NhbnZhc10uCi8vLwovLy8gTW9zdCBBUElzIG9uIFtDYW52YXNdIHRha2UgYSBbUGFpbnRdIG9iamVjdCB0byBkZXNjcmliZSB0aGUgc3R5bGUKLy8vIHRvIHVzZSBmb3IgdGhhdCBvcGVyYXRpb24uCmNsYXNzIFBhaW50IHsKICAvLyBQYWludCBvYmplY3RzIGFyZSBlbmNvZGVkIGluIHR3byBidWZmZXJzOgogIC8vCiAgLy8gKiBfZGF0YSBpcyBiaW5hcnkgZGF0YSBpbiBmb3VyLWJ5dGUgZmllbGRzLCBlYWNoIG9mIHdoaWNoIGlzIGVpdGhlciBhCiAgLy8gICB1aW50MzJfdCBvciBhIGZsb2F0LiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgZWFjaCBmaWVsZCBpcyBlbmNvZGVkIGFzCiAgLy8gICB6ZXJvIHRvIG1ha2UgaW5pdGlhbGl6YXRpb24gdHJpdmlhbC4gTW9zdCB2YWx1ZXMgYWxyZWFkeSBoYXZlIGEgZGVmYXVsdAogIC8vICAgdmFsdWUgb2YgemVybywgYnV0IHNvbWUsIHN1Y2ggYXMgY29sb3IsIGhhdmUgYSBub24temVybyBkZWZhdWx0IHZhbHVlLgogIC8vICAgVG8gZW5jb2RlIG9yIGRlY29kZSB0aGVzZSB2YWx1ZXMsIFhPUiB0aGUgdmFsdWUgd2l0aCB0aGUgZGVmYXVsdCB2YWx1ZS4KICAvLwogIC8vICogX29iamVjdHMgaXMgYSBsaXN0IG9mIHVuZW5jb2RhYmxlIG9iamVjdHMsIHR5cGljYWxseSB3cmFwcGVycyBmb3IgbmF0aXZlCiAgLy8gICBvYmplY3RzLiBUaGUgb2JqZWN0cyBhcmUgc2ltcGx5IHN0b3JlZCBpbiB0aGUgbGlzdCB3aXRob3V0IGFueSBhZGRpdGlvbmFsCiAgLy8gICBlbmNvZGluZy4KICAvLwogIC8vIFRoZSBiaW5hcnkgZm9ybWF0IG11c3QgbWF0Y2ggdGhlIGRlc2VyaWFsaXphdGlvbiBjb2RlIGluIHBhaW50LmNjLgoKICBmaW5hbCBCeXRlRGF0YSBfZGF0YSA9IEJ5dGVEYXRhKF9rRGF0YUJ5dGVDb3VudCk7CiAgc3RhdGljIGNvbnN0IGludCBfa0lzQW50aUFsaWFzSW5kZXggPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgX2tDb2xvckluZGV4ID0gMTsKICBzdGF0aWMgY29uc3QgaW50IF9rQmxlbmRNb2RlSW5kZXggPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgX2tTdHlsZUluZGV4ID0gMzsKICBzdGF0aWMgY29uc3QgaW50IF9rU3Ryb2tlV2lkdGhJbmRleCA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBfa1N0cm9rZUNhcEluZGV4ID0gNTsKICBzdGF0aWMgY29uc3QgaW50IF9rU3Ryb2tlSm9pbkluZGV4ID0gNjsKICBzdGF0aWMgY29uc3QgaW50IF9rU3Ryb2tlTWl0ZXJMaW1pdEluZGV4ID0gNzsKICBzdGF0aWMgY29uc3QgaW50IF9rRmlsdGVyUXVhbGl0eUluZGV4ID0gODsKICBzdGF0aWMgY29uc3QgaW50IF9rTWFza0ZpbHRlckluZGV4ID0gOTsKICBzdGF0aWMgY29uc3QgaW50IF9rTWFza0ZpbHRlckJsdXJTdHlsZUluZGV4ID0gMTA7CiAgc3RhdGljIGNvbnN0IGludCBfa01hc2tGaWx0ZXJTaWdtYUluZGV4ID0gMTE7CiAgc3RhdGljIGNvbnN0IGludCBfa0ludmVydENvbG9ySW5kZXggPSAxMjsKICBzdGF0aWMgY29uc3QgaW50IF9rRGl0aGVySW5kZXggPSAxMzsKCiAgc3RhdGljIGNvbnN0IGludCBfa0lzQW50aUFsaWFzT2Zmc2V0ID0gX2tJc0FudGlBbGlhc0luZGV4IDw8IDI7CiAgc3RhdGljIGNvbnN0IGludCBfa0NvbG9yT2Zmc2V0ID0gX2tDb2xvckluZGV4IDw8IDI7CiAgc3RhdGljIGNvbnN0IGludCBfa0JsZW5kTW9kZU9mZnNldCA9IF9rQmxlbmRNb2RlSW5kZXggPDwgMjsKICBzdGF0aWMgY29uc3QgaW50IF9rU3R5bGVPZmZzZXQgPSBfa1N0eWxlSW5kZXggPDwgMjsKICBzdGF0aWMgY29uc3QgaW50IF9rU3Ryb2tlV2lkdGhPZmZzZXQgPSBfa1N0cm9rZVdpZHRoSW5kZXggPDwgMjsKICBzdGF0aWMgY29uc3QgaW50IF9rU3Ryb2tlQ2FwT2Zmc2V0ID0gX2tTdHJva2VDYXBJbmRleCA8PCAyOwogIHN0YXRpYyBjb25zdCBpbnQgX2tTdHJva2VKb2luT2Zmc2V0ID0gX2tTdHJva2VKb2luSW5kZXggPDwgMjsKICBzdGF0aWMgY29uc3QgaW50IF9rU3Ryb2tlTWl0ZXJMaW1pdE9mZnNldCA9IF9rU3Ryb2tlTWl0ZXJMaW1pdEluZGV4IDw8IDI7CiAgc3RhdGljIGNvbnN0IGludCBfa0ZpbHRlclF1YWxpdHlPZmZzZXQgPSBfa0ZpbHRlclF1YWxpdHlJbmRleCA8PCAyOwogIHN0YXRpYyBjb25zdCBpbnQgX2tNYXNrRmlsdGVyT2Zmc2V0ID0gX2tNYXNrRmlsdGVySW5kZXggPDwgMjsKICBzdGF0aWMgY29uc3QgaW50IF9rTWFza0ZpbHRlckJsdXJTdHlsZU9mZnNldCA9IF9rTWFza0ZpbHRlckJsdXJTdHlsZUluZGV4IDw8IDI7CiAgc3RhdGljIGNvbnN0IGludCBfa01hc2tGaWx0ZXJTaWdtYU9mZnNldCA9IF9rTWFza0ZpbHRlclNpZ21hSW5kZXggPDwgMjsKICBzdGF0aWMgY29uc3QgaW50IF9rSW52ZXJ0Q29sb3JPZmZzZXQgPSBfa0ludmVydENvbG9ySW5kZXggPDwgMjsKICBzdGF0aWMgY29uc3QgaW50IF9rRGl0aGVyT2Zmc2V0ID0gX2tEaXRoZXJJbmRleCA8PCAyOwogIC8vIElmIHlvdSBhZGQgbW9yZSBmaWVsZHMsIHJlbWVtYmVyIHRvIHVwZGF0ZSBfa0RhdGFCeXRlQ291bnQuCiAgc3RhdGljIGNvbnN0IGludCBfa0RhdGFCeXRlQ291bnQgPSA1NjsKCiAgLy8gQmluYXJ5IGZvcm1hdCBtdXN0IG1hdGNoIHRoZSBkZXNlcmlhbGl6YXRpb24gY29kZSBpbiBwYWludC5jYy4KICBMaXN0PGR5bmFtaWM+IF9vYmplY3RzOwogIHN0YXRpYyBjb25zdCBpbnQgX2tTaGFkZXJJbmRleCA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBfa0NvbG9yRmlsdGVySW5kZXggPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgX2tJbWFnZUZpbHRlckluZGV4ID0gMjsKICBzdGF0aWMgY29uc3QgaW50IF9rT2JqZWN0Q291bnQgPSAzOyAvLyBNdXN0IGJlIG9uZSBsYXJnZXIgdGhhbiB0aGUgbGFyZ2VzdCBpbmRleC4KCiAgLy8vIENvbnN0cnVjdHMgYW4gZW1wdHkgW1BhaW50XSBvYmplY3Qgd2l0aCBhbGwgZmllbGRzIGluaXRpYWxpemVkIHRvCiAgLy8vIHRoZWlyIGRlZmF1bHRzLgogIFBhaW50KCkgewogICAgaWYgKGVuYWJsZURpdGhlcmluZykgewogICAgICBfZGl0aGVyID0gdHJ1ZTsKICAgIH0KICB9CgogIC8vLyBXaGV0aGVyIHRvIGFwcGx5IGFudGktYWxpYXNpbmcgdG8gbGluZXMgYW5kIGltYWdlcyBkcmF3biBvbiB0aGUKICAvLy8gY2FudmFzLgogIC8vLwogIC8vLyBEZWZhdWx0cyB0byB0cnVlLgogIGJvb2wgZ2V0IGlzQW50aUFsaWFzIHsKICAgIHJldHVybiBfZGF0YS5nZXRJbnQzMihfa0lzQW50aUFsaWFzT2Zmc2V0LCBfa0Zha2VIb3N0RW5kaWFuKSA9PSAwOwogIH0KICBzZXQgaXNBbnRpQWxpYXMoYm9vbCB2YWx1ZSkgewogICAgLy8gV2UgZW5jb2RlIHRydWUgYXMgemVybyBhbmQgZmFsc2UgYXMgb25lIGJlY2F1c2UgdGhlIGRlZmF1bHQgdmFsdWUsIHdoaWNoCiAgICAvLyB3ZSBhbHdheXMgZW5jb2RlIGFzIHplcm8sIGlzIHRydWUuCiAgICBmaW5hbCBpbnQgZW5jb2RlZCA9IHZhbHVlID8gMCA6IDE7CiAgICBfZGF0YS5zZXRJbnQzMihfa0lzQW50aUFsaWFzT2Zmc2V0LCBlbmNvZGVkLCBfa0Zha2VIb3N0RW5kaWFuKTsKICB9CgogIC8vIE11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIGRlZmF1bHQgaW4gcGFpbnQuY2MuCiAgc3RhdGljIGNvbnN0IGludCBfa0NvbG9yRGVmYXVsdCA9IDB4RkYwMDAwMDA7CgogIC8vLyBUaGUgY29sb3IgdG8gdXNlIHdoZW4gc3Ryb2tpbmcgb3IgZmlsbGluZyBhIHNoYXBlLgogIC8vLwogIC8vLyBEZWZhdWx0cyB0byBvcGFxdWUgYmxhY2suCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgKiBbc3R5bGVdLCB3aGljaCBjb250cm9scyB3aGV0aGVyIHRvIHN0cm9rZSBvciBmaWxsIChvciBib3RoKS4KICAvLy8gICogW2NvbG9yRmlsdGVyXSwgd2hpY2ggb3ZlcnJpZGVzIFtjb2xvcl0uCiAgLy8vICAqIFtzaGFkZXJdLCB3aGljaCBvdmVycmlkZXMgW2NvbG9yXSB3aXRoIG1vcmUgZWxhYm9yYXRlIGVmZmVjdHMuCiAgLy8vCiAgLy8vIFRoaXMgY29sb3IgaXMgbm90IHVzZWQgd2hlbiBjb21wb3NpdGluZy4gVG8gY29sb3JpemUgYSBsYXllciwgdXNlCiAgLy8vIFtjb2xvckZpbHRlcl0uCiAgQ29sb3IgZ2V0IGNvbG9yIHsKICAgIGZpbmFsIGludCBlbmNvZGVkID0gX2RhdGEuZ2V0SW50MzIoX2tDb2xvck9mZnNldCwgX2tGYWtlSG9zdEVuZGlhbik7CiAgICByZXR1cm4gQ29sb3IoZW5jb2RlZCBeIF9rQ29sb3JEZWZhdWx0KTsKICB9CiAgc2V0IGNvbG9yKENvbG9yIHZhbHVlKSB7CiAgICBhc3NlcnQodmFsdWUgIT0gbnVsbCk7CiAgICBmaW5hbCBpbnQgZW5jb2RlZCA9IHZhbHVlLnZhbHVlIF4gX2tDb2xvckRlZmF1bHQ7CiAgICBfZGF0YS5zZXRJbnQzMihfa0NvbG9yT2Zmc2V0LCBlbmNvZGVkLCBfa0Zha2VIb3N0RW5kaWFuKTsKICB9CgogIC8vIE11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIGRlZmF1bHQgaW4gcGFpbnQuY2MuCiAgc3RhdGljIGZpbmFsIGludCBfa0JsZW5kTW9kZURlZmF1bHQgPSBCbGVuZE1vZGUuc3JjT3Zlci5pbmRleDsKCiAgLy8vIEEgYmxlbmQgbW9kZSB0byBhcHBseSB3aGVuIGEgc2hhcGUgaXMgZHJhd24gb3IgYSBsYXllciBpcyBjb21wb3NpdGVkLgogIC8vLwogIC8vLyBUaGUgc291cmNlIGNvbG9ycyBhcmUgZnJvbSB0aGUgc2hhcGUgYmVpbmcgZHJhd24gKGUuZy4gZnJvbQogIC8vLyBbQ2FudmFzLmRyYXdQYXRoXSkgb3IgbGF5ZXIgYmVpbmcgY29tcG9zaXRlZCAodGhlIGdyYXBoaWNzIHRoYXQgd2VyZSBkcmF3bgogIC8vLyBiZXR3ZWVuIHRoZSBbQ2FudmFzLnNhdmVMYXllcl0gYW5kIFtDYW52YXMucmVzdG9yZV0gY2FsbHMpLCBhZnRlciBhcHBseWluZwogIC8vLyB0aGUgW2NvbG9yRmlsdGVyXSwgaWYgYW55LgogIC8vLwogIC8vLyBUaGUgZGVzdGluYXRpb24gY29sb3JzIGFyZSBmcm9tIHRoZSBiYWNrZ3JvdW5kIG9udG8gd2hpY2ggdGhlIHNoYXBlIG9yCiAgLy8vIGxheWVyIGlzIGJlaW5nIGNvbXBvc2l0ZWQuCiAgLy8vCiAgLy8vIERlZmF1bHRzIHRvIFtCbGVuZE1vZGUuc3JjT3Zlcl0uCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgKiBbQ2FudmFzLnNhdmVMYXllcl0sIHdoaWNoIHVzZXMgaXRzIFtQYWludF0ncyBbYmxlbmRNb2RlXSB0byBjb21wb3NpdGUKICAvLy8gICAgdGhlIGxheWVyIHdoZW4gW3Jlc3RvcmVdIGlzIGNhbGxlZC4KICAvLy8gICogW0JsZW5kTW9kZV0sIHdoaWNoIGRpc2N1c3NlcyB0aGUgdXNlciBvZiBbc2F2ZUxheWVyXSB3aXRoIFtibGVuZE1vZGVdLgogIEJsZW5kTW9kZSBnZXQgYmxlbmRNb2RlIHsKICAgIGZpbmFsIGludCBlbmNvZGVkID0gX2RhdGEuZ2V0SW50MzIoX2tCbGVuZE1vZGVPZmZzZXQsIF9rRmFrZUhvc3RFbmRpYW4pOwogICAgcmV0dXJuIEJsZW5kTW9kZS52YWx1ZXNbZW5jb2RlZCBeIF9rQmxlbmRNb2RlRGVmYXVsdF07CiAgfQogIHNldCBibGVuZE1vZGUoQmxlbmRNb2RlIHZhbHVlKSB7CiAgICBhc3NlcnQodmFsdWUgIT0gbnVsbCk7CiAgICBmaW5hbCBpbnQgZW5jb2RlZCA9IHZhbHVlLmluZGV4IF4gX2tCbGVuZE1vZGVEZWZhdWx0OwogICAgX2RhdGEuc2V0SW50MzIoX2tCbGVuZE1vZGVPZmZzZXQsIGVuY29kZWQsIF9rRmFrZUhvc3RFbmRpYW4pOwogIH0KCiAgLy8vIFdoZXRoZXIgdG8gcGFpbnQgaW5zaWRlIHNoYXBlcywgdGhlIGVkZ2VzIG9mIHNoYXBlcywgb3IgYm90aC4KICAvLy8KICAvLy8gRGVmYXVsdHMgdG8gW1BhaW50aW5nU3R5bGUuZmlsbF0uCiAgUGFpbnRpbmdTdHlsZSBnZXQgc3R5bGUgewogICAgcmV0dXJuIFBhaW50aW5nU3R5bGUudmFsdWVzW19kYXRhLmdldEludDMyKF9rU3R5bGVPZmZzZXQsIF9rRmFrZUhvc3RFbmRpYW4pXTsKICB9CiAgc2V0IHN0eWxlKFBhaW50aW5nU3R5bGUgdmFsdWUpIHsKICAgIGFzc2VydCh2YWx1ZSAhPSBudWxsKTsKICAgIGZpbmFsIGludCBlbmNvZGVkID0gdmFsdWUuaW5kZXg7CiAgICBfZGF0YS5zZXRJbnQzMihfa1N0eWxlT2Zmc2V0LCBlbmNvZGVkLCBfa0Zha2VIb3N0RW5kaWFuKTsKICB9CgogIC8vLyBIb3cgd2lkZSB0byBtYWtlIGVkZ2VzIGRyYXduIHdoZW4gW3N0eWxlXSBpcyBzZXQgdG8KICAvLy8gW1BhaW50aW5nU3R5bGUuc3Ryb2tlXS4gVGhlIHdpZHRoIGlzIGdpdmVuIGluIGxvZ2ljYWwgcGl4ZWxzIG1lYXN1cmVkIGluCiAgLy8vIHRoZSBkaXJlY3Rpb24gb3J0aG9nb25hbCB0byB0aGUgZGlyZWN0aW9uIG9mIHRoZSBwYXRoLgogIC8vLwogIC8vLyBEZWZhdWx0cyB0byAwLjAsIHdoaWNoIGNvcnJlc3BvbmQgdG8gYSBoYWlybGluZSB3aWR0aC4KICBkb3VibGUgZ2V0IHN0cm9rZVdpZHRoIHsKICAgIHJldHVybiBfZGF0YS5nZXRGbG9hdDMyKF9rU3Ryb2tlV2lkdGhPZmZzZXQsIF9rRmFrZUhvc3RFbmRpYW4pOwogIH0KICBzZXQgc3Ryb2tlV2lkdGgoZG91YmxlIHZhbHVlKSB7CiAgICBhc3NlcnQodmFsdWUgIT0gbnVsbCk7CiAgICBmaW5hbCBkb3VibGUgZW5jb2RlZCA9IHZhbHVlOwogICAgX2RhdGEuc2V0RmxvYXQzMihfa1N0cm9rZVdpZHRoT2Zmc2V0LCBlbmNvZGVkLCBfa0Zha2VIb3N0RW5kaWFuKTsKICB9CgogIC8vLyBUaGUga2luZCBvZiBmaW5pc2ggdG8gcGxhY2Ugb24gdGhlIGVuZCBvZiBsaW5lcyBkcmF3biB3aGVuCiAgLy8vIFtzdHlsZV0gaXMgc2V0IHRvIFtQYWludGluZ1N0eWxlLnN0cm9rZV0uCiAgLy8vCiAgLy8vIERlZmF1bHRzIHRvIFtTdHJva2VDYXAuYnV0dF0sIGkuZS4gbm8gY2Fwcy4KICBTdHJva2VDYXAgZ2V0IHN0cm9rZUNhcCB7CiAgICByZXR1cm4gU3Ryb2tlQ2FwLnZhbHVlc1tfZGF0YS5nZXRJbnQzMihfa1N0cm9rZUNhcE9mZnNldCwgX2tGYWtlSG9zdEVuZGlhbildOwogIH0KICBzZXQgc3Ryb2tlQ2FwKFN0cm9rZUNhcCB2YWx1ZSkgewogICAgYXNzZXJ0KHZhbHVlICE9IG51bGwpOwogICAgZmluYWwgaW50IGVuY29kZWQgPSB2YWx1ZS5pbmRleDsKICAgIF9kYXRhLnNldEludDMyKF9rU3Ryb2tlQ2FwT2Zmc2V0LCBlbmNvZGVkLCBfa0Zha2VIb3N0RW5kaWFuKTsKICB9CgogIC8vLyBUaGUga2luZCBvZiBmaW5pc2ggdG8gcGxhY2Ugb24gdGhlIGpvaW5zIGJldHdlZW4gc2VnbWVudHMuCiAgLy8vCiAgLy8vIFRoaXMgYXBwbGllcyB0byBwYXRocyBkcmF3biB3aGVuIFtzdHlsZV0gaXMgc2V0IHRvIFtQYWludGluZ1N0eWxlLnN0cm9rZV0sCiAgLy8vIEl0IGRvZXMgbm90IGFwcGx5IHRvIHBvaW50cyBkcmF3biBhcyBsaW5lcyB3aXRoIFtDYW52YXMuZHJhd1BvaW50c10uCiAgLy8vCiAgLy8vIERlZmF1bHRzIHRvIFtTdHJva2VKb2luLm1pdGVyXSwgaS5lLiBzaGFycCBjb3JuZXJzLgogIC8vLwogIC8vLyBTb21lIGV4YW1wbGVzIG9mIGpvaW5zOgogIC8vLwogIC8vLyB7QGFuaW1hdGlvbiAzMDAgMzAwIGh0dHBzOi8vZmx1dHRlci5naXRodWIuaW8vYXNzZXRzLWZvci1hcGktZG9jcy9hc3NldHMvZGFydC11aS9taXRlcl80X2pvaW4ubXA0fQogIC8vLwogIC8vLyB7QGFuaW1hdGlvbiAzMDAgMzAwIGh0dHBzOi8vZmx1dHRlci5naXRodWIuaW8vYXNzZXRzLWZvci1hcGktZG9jcy9hc3NldHMvZGFydC11aS9yb3VuZF9qb2luLm1wNH0KICAvLy8KICAvLy8ge0BhbmltYXRpb24gMzAwIDMwMCBodHRwczovL2ZsdXR0ZXIuZ2l0aHViLmlvL2Fzc2V0cy1mb3ItYXBpLWRvY3MvYXNzZXRzL2RhcnQtdWkvYmV2ZWxfam9pbi5tcDR9CiAgLy8vCiAgLy8vIFRoZSBjZW50ZXJzIG9mIHRoZSBsaW5lIHNlZ21lbnRzIGFyZSBjb2xvcmVkIGluIHRoZSBkaWFncmFtcyBhYm92ZSB0bwogIC8vLyBoaWdobGlnaHQgdGhlIGpvaW5zLCBidXQgaW4gbm9ybWFsIHVzYWdlIHRoZSBqb2luIGlzIHRoZSBzYW1lIGNvbG9yIGFzIHRoZQogIC8vLyBsaW5lLgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogW3N0cm9rZU1pdGVyTGltaXRdIHRvIGNvbnRyb2wgd2hlbiBtaXRlcnMgYXJlIHJlcGxhY2VkIGJ5IGJldmVscyB3aGVuCiAgLy8vICAgIHRoaXMgaXMgc2V0IHRvIFtTdHJva2VKb2luLm1pdGVyXS4KICAvLy8gICogW3N0cm9rZUNhcF0gdG8gY29udHJvbCB3aGF0IGlzIGRyYXduIGF0IHRoZSBlbmRzIG9mIHRoZSBzdHJva2UuCiAgLy8vICAqIFtTdHJva2VKb2luXSBmb3IgdGhlIGRlZmluaXRpdmUgbGlzdCBvZiBzdHJva2Ugam9pbnMuCiAgU3Ryb2tlSm9pbiBnZXQgc3Ryb2tlSm9pbiB7CiAgICByZXR1cm4gU3Ryb2tlSm9pbi52YWx1ZXNbX2RhdGEuZ2V0SW50MzIoX2tTdHJva2VKb2luT2Zmc2V0LCBfa0Zha2VIb3N0RW5kaWFuKV07CiAgfQogIHNldCBzdHJva2VKb2luKFN0cm9rZUpvaW4gdmFsdWUpIHsKICAgIGFzc2VydCh2YWx1ZSAhPSBudWxsKTsKICAgIGZpbmFsIGludCBlbmNvZGVkID0gdmFsdWUuaW5kZXg7CiAgICBfZGF0YS5zZXRJbnQzMihfa1N0cm9rZUpvaW5PZmZzZXQsIGVuY29kZWQsIF9rRmFrZUhvc3RFbmRpYW4pOwogIH0KCiAgLy8gTXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgZGVmYXVsdCBpbiBwYWludC5jYy4KICBzdGF0aWMgY29uc3QgZG91YmxlIF9rU3Ryb2tlTWl0ZXJMaW1pdERlZmF1bHQgPSA0LjA7CgogIC8vLyBUaGUgbGltaXQgZm9yIG1pdGVycyB0byBiZSBkcmF3biBvbiBzZWdtZW50cyB3aGVuIHRoZSBqb2luIGlzIHNldCB0bwogIC8vLyBbU3Ryb2tlSm9pbi5taXRlcl0gYW5kIHRoZSBbc3R5bGVdIGlzIHNldCB0byBbUGFpbnRpbmdTdHlsZS5zdHJva2VdLiBJZgogIC8vLyB0aGlzIGxpbWl0IGlzIGV4Y2VlZGVkLCB0aGVuIGEgW1N0cm9rZUpvaW4uYmV2ZWxdIGpvaW4gd2lsbCBiZSBkcmF3bgogIC8vLyBpbnN0ZWFkLiBUaGlzIG1heSBjYXVzZSBzb21lICdwb3BwaW5nJyBvZiB0aGUgY29ybmVycyBvZiBhIHBhdGggaWYgdGhlCiAgLy8vIGFuZ2xlIGJldHdlZW4gbGluZSBzZWdtZW50cyBpcyBhbmltYXRlZCwgYXMgc2VlbiBpbiB0aGUgZGlhZ3JhbXMgYmVsb3cuCiAgLy8vCiAgLy8vIFRoaXMgbGltaXQgaXMgZXhwcmVzc2VkIGFzIGEgbGltaXQgb24gdGhlIGxlbmd0aCBvZiB0aGUgbWl0ZXIuCiAgLy8vCiAgLy8vIERlZmF1bHRzIHRvIDQuMC4gIFVzaW5nIHplcm8gYXMgYSBsaW1pdCB3aWxsIGNhdXNlIGEgW1N0cm9rZUpvaW4uYmV2ZWxdCiAgLy8vIGpvaW4gdG8gYmUgdXNlZCBhbGwgdGhlIHRpbWUuCiAgLy8vCiAgLy8vIHtAYW5pbWF0aW9uIDMwMCAzMDAgaHR0cHM6Ly9mbHV0dGVyLmdpdGh1Yi5pby9hc3NldHMtZm9yLWFwaS1kb2NzL2Fzc2V0cy9kYXJ0LXVpL21pdGVyXzBfam9pbi5tcDR9CiAgLy8vCiAgLy8vIHtAYW5pbWF0aW9uIDMwMCAzMDAgaHR0cHM6Ly9mbHV0dGVyLmdpdGh1Yi5pby9hc3NldHMtZm9yLWFwaS1kb2NzL2Fzc2V0cy9kYXJ0LXVpL21pdGVyXzRfam9pbi5tcDR9CiAgLy8vCiAgLy8vIHtAYW5pbWF0aW9uIDMwMCAzMDAgaHR0cHM6Ly9mbHV0dGVyLmdpdGh1Yi5pby9hc3NldHMtZm9yLWFwaS1kb2NzL2Fzc2V0cy9kYXJ0LXVpL21pdGVyXzZfam9pbi5tcDR9CiAgLy8vCiAgLy8vIFRoZSBjZW50ZXJzIG9mIHRoZSBsaW5lIHNlZ21lbnRzIGFyZSBjb2xvcmVkIGluIHRoZSBkaWFncmFtcyBhYm92ZSB0bwogIC8vLyBoaWdobGlnaHQgdGhlIGpvaW5zLCBidXQgaW4gbm9ybWFsIHVzYWdlIHRoZSBqb2luIGlzIHRoZSBzYW1lIGNvbG9yIGFzIHRoZQogIC8vLyBsaW5lLgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogW3N0cm9rZUpvaW5dIHRvIGNvbnRyb2wgdGhlIGtpbmQgb2YgZmluaXNoIHRvIHBsYWNlIG9uIHRoZSBqb2lucwogIC8vLyAgICBiZXR3ZWVuIHNlZ21lbnRzLgogIC8vLyAgKiBbc3Ryb2tlQ2FwXSB0byBjb250cm9sIHdoYXQgaXMgZHJhd24gYXQgdGhlIGVuZHMgb2YgdGhlIHN0cm9rZS4KICBkb3VibGUgZ2V0IHN0cm9rZU1pdGVyTGltaXQgewogICAgcmV0dXJuIF9kYXRhLmdldEZsb2F0MzIoX2tTdHJva2VNaXRlckxpbWl0T2Zmc2V0LCBfa0Zha2VIb3N0RW5kaWFuKTsKICB9CiAgc2V0IHN0cm9rZU1pdGVyTGltaXQoZG91YmxlIHZhbHVlKSB7CiAgICBhc3NlcnQodmFsdWUgIT0gbnVsbCk7CiAgICBmaW5hbCBkb3VibGUgZW5jb2RlZCA9IHZhbHVlIC0gX2tTdHJva2VNaXRlckxpbWl0RGVmYXVsdDsKICAgIF9kYXRhLnNldEZsb2F0MzIoX2tTdHJva2VNaXRlckxpbWl0T2Zmc2V0LCBlbmNvZGVkLCBfa0Zha2VIb3N0RW5kaWFuKTsKICB9CgogIC8vLyBBIG1hc2sgZmlsdGVyIChmb3IgZXhhbXBsZSwgYSBibHVyKSB0byBhcHBseSB0byBhIHNoYXBlIGFmdGVyIGl0IGhhcyBiZWVuCiAgLy8vIGRyYXduIGJ1dCBiZWZvcmUgaXQgaGFzIGJlZW4gY29tcG9zaXRlZCBpbnRvIHRoZSBpbWFnZS4KICAvLy8KICAvLy8gU2VlIFtNYXNrRmlsdGVyXSBmb3IgZGV0YWlscy4KICBNYXNrRmlsdGVyIGdldCBtYXNrRmlsdGVyIHsKICAgIHN3aXRjaCAoX2RhdGEuZ2V0SW50MzIoX2tNYXNrRmlsdGVyT2Zmc2V0LCBfa0Zha2VIb3N0RW5kaWFuKSkgewogICAgICBjYXNlIE1hc2tGaWx0ZXIuX1R5cGVOb25lOgogICAgICAgIHJldHVybiBudWxsOwogICAgICBjYXNlIE1hc2tGaWx0ZXIuX1R5cGVCbHVyOgogICAgICAgIHJldHVybiBNYXNrRmlsdGVyLmJsdXIoCiAgICAgICAgICBCbHVyU3R5bGUudmFsdWVzW19kYXRhLmdldEludDMyKF9rTWFza0ZpbHRlckJsdXJTdHlsZU9mZnNldCwgX2tGYWtlSG9zdEVuZGlhbildLAogICAgICAgICAgX2RhdGEuZ2V0RmxvYXQzMihfa01hc2tGaWx0ZXJTaWdtYU9mZnNldCwgX2tGYWtlSG9zdEVuZGlhbiksCiAgICAgICAgKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICBzZXQgbWFza0ZpbHRlcihNYXNrRmlsdGVyIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICBfZGF0YS5zZXRJbnQzMihfa01hc2tGaWx0ZXJPZmZzZXQsIE1hc2tGaWx0ZXIuX1R5cGVOb25lLCBfa0Zha2VIb3N0RW5kaWFuKTsKICAgICAgX2RhdGEuc2V0SW50MzIoX2tNYXNrRmlsdGVyQmx1clN0eWxlT2Zmc2V0LCAwLCBfa0Zha2VIb3N0RW5kaWFuKTsKICAgICAgX2RhdGEuc2V0RmxvYXQzMihfa01hc2tGaWx0ZXJTaWdtYU9mZnNldCwgMC4wLCBfa0Zha2VIb3N0RW5kaWFuKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIEZvciBub3cgd2Ugb25seSBzdXBwb3J0IG9uZSBraW5kIG9mIE1hc2tGaWx0ZXIsIHNvIHdlIGRvbid0IG5lZWQgdG8KICAgICAgLy8gY2hlY2sgd2hhdCB0aGUgdHlwZSBpcyBpZiBpdCdzIG5vdCBudWxsLgogICAgICBfZGF0YS5zZXRJbnQzMihfa01hc2tGaWx0ZXJPZmZzZXQsIE1hc2tGaWx0ZXIuX1R5cGVCbHVyLCBfa0Zha2VIb3N0RW5kaWFuKTsKICAgICAgX2RhdGEuc2V0SW50MzIoX2tNYXNrRmlsdGVyQmx1clN0eWxlT2Zmc2V0LCB2YWx1ZS5fc3R5bGUuaW5kZXgsIF9rRmFrZUhvc3RFbmRpYW4pOwogICAgICBfZGF0YS5zZXRGbG9hdDMyKF9rTWFza0ZpbHRlclNpZ21hT2Zmc2V0LCB2YWx1ZS5fc2lnbWEsIF9rRmFrZUhvc3RFbmRpYW4pOwogICAgfQogIH0KCiAgLy8vIENvbnRyb2xzIHRoZSBwZXJmb3JtYW5jZSB2cyBxdWFsaXR5IHRyYWRlLW9mZiB0byB1c2Ugd2hlbiBhcHBseWluZwogIC8vLyBmaWx0ZXJzLCBzdWNoIGFzIFttYXNrRmlsdGVyXSwgb3Igd2hlbiBkcmF3aW5nIGltYWdlcywgYXMgd2l0aAogIC8vLyBbQ2FudmFzLmRyYXdJbWFnZVJlY3RdIG9yIFtDYW52YXMuZHJhd0ltYWdlTmluZV0uCiAgLy8vCiAgLy8vIERlZmF1bHRzIHRvIFtGaWx0ZXJRdWFsaXR5Lm5vbmVdLgogIC8vIFRPRE8oaWFuaCk6IHZlcmlmeSB0aGF0IHRoZSBpbWFnZSBkcmF3aW5nIG1ldGhvZHMgYWN0dWFsbHkgcmVzcGVjdCB0aGlzCiAgRmlsdGVyUXVhbGl0eSBnZXQgZmlsdGVyUXVhbGl0eSB7CiAgICByZXR1cm4gRmlsdGVyUXVhbGl0eS52YWx1ZXNbX2RhdGEuZ2V0SW50MzIoX2tGaWx0ZXJRdWFsaXR5T2Zmc2V0LCBfa0Zha2VIb3N0RW5kaWFuKV07CiAgfQogIHNldCBmaWx0ZXJRdWFsaXR5KEZpbHRlclF1YWxpdHkgdmFsdWUpIHsKICAgIGFzc2VydCh2YWx1ZSAhPSBudWxsKTsKICAgIGZpbmFsIGludCBlbmNvZGVkID0gdmFsdWUuaW5kZXg7CiAgICBfZGF0YS5zZXRJbnQzMihfa0ZpbHRlclF1YWxpdHlPZmZzZXQsIGVuY29kZWQsIF9rRmFrZUhvc3RFbmRpYW4pOwogIH0KCiAgLy8vIFRoZSBzaGFkZXIgdG8gdXNlIHdoZW4gc3Ryb2tpbmcgb3IgZmlsbGluZyBhIHNoYXBlLgogIC8vLwogIC8vLyBXaGVuIHRoaXMgaXMgbnVsbCwgdGhlIFtjb2xvcl0gaXMgdXNlZCBpbnN0ZWFkLgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogW0dyYWRpZW50XSwgYSBzaGFkZXIgdGhhdCBwYWludHMgYSBjb2xvciBncmFkaWVudC4KICAvLy8gICogW0ltYWdlU2hhZGVyXSwgYSBzaGFkZXIgdGhhdCB0aWxlcyBhbiBbSW1hZ2VdLgogIC8vLyAgKiBbY29sb3JGaWx0ZXJdLCB3aGljaCBvdmVycmlkZXMgW3NoYWRlcl0uCiAgLy8vICAqIFtjb2xvcl0sIHdoaWNoIGlzIHVzZWQgaWYgW3NoYWRlcl0gYW5kIFtjb2xvckZpbHRlcl0gYXJlIG51bGwuCiAgU2hhZGVyIGdldCBzaGFkZXIgewogICAgaWYgKF9vYmplY3RzID09IG51bGwpCiAgICAgIHJldHVybiBudWxsOwogICAgcmV0dXJuIF9vYmplY3RzW19rU2hhZGVySW5kZXhdIGFzIFNoYWRlcjsKICB9CiAgc2V0IHNoYWRlcihTaGFkZXIgdmFsdWUpIHsKICAgIF9vYmplY3RzID8/PSBMaXN0PGR5bmFtaWM+KF9rT2JqZWN0Q291bnQpOwogICAgX29iamVjdHNbX2tTaGFkZXJJbmRleF0gPSB2YWx1ZTsKICB9CgogIC8vLyBBIGNvbG9yIGZpbHRlciB0byBhcHBseSB3aGVuIGEgc2hhcGUgaXMgZHJhd24gb3Igd2hlbiBhIGxheWVyIGlzCiAgLy8vIGNvbXBvc2l0ZWQuCiAgLy8vCiAgLy8vIFNlZSBbQ29sb3JGaWx0ZXJdIGZvciBkZXRhaWxzLgogIC8vLwogIC8vLyBXaGVuIGEgc2hhcGUgaXMgYmVpbmcgZHJhd24sIFtjb2xvckZpbHRlcl0gb3ZlcnJpZGVzIFtjb2xvcl0gYW5kIFtzaGFkZXJdLgogIENvbG9yRmlsdGVyIGdldCBjb2xvckZpbHRlciB7CiAgICBpZiAoX29iamVjdHMgPT0gbnVsbCB8fCBfb2JqZWN0c1tfa0NvbG9yRmlsdGVySW5kZXhdID09IG51bGwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gX29iamVjdHNbX2tDb2xvckZpbHRlckluZGV4XS5jcmVhdG9yIGFzIENvbG9yRmlsdGVyOwogIH0KCiAgc2V0IGNvbG9yRmlsdGVyKENvbG9yRmlsdGVyIHZhbHVlKSB7CiAgICBmaW5hbCBfQ29sb3JGaWx0ZXIgbmF0aXZlRmlsdGVyID0gdmFsdWU/Ll90b05hdGl2ZUNvbG9yRmlsdGVyKCk7CiAgICBpZiAobmF0aXZlRmlsdGVyID09IG51bGwpIHsKICAgICAgaWYgKF9vYmplY3RzICE9IG51bGwpIHsKICAgICAgICBfb2JqZWN0c1tfa0NvbG9yRmlsdGVySW5kZXhdID0gbnVsbDsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKF9vYmplY3RzID09IG51bGwpIHsKICAgICAgICBfb2JqZWN0cyA9IExpc3Q8ZHluYW1pYz4oX2tPYmplY3RDb3VudCk7CiAgICAgICAgX29iamVjdHNbX2tDb2xvckZpbHRlckluZGV4XSA9IG5hdGl2ZUZpbHRlcjsKICAgICAgfSBlbHNlIGlmIChfb2JqZWN0c1tfa0NvbG9yRmlsdGVySW5kZXhdPy5jcmVhdG9yICE9IHZhbHVlKSB7CiAgICAgICAgX29iamVjdHNbX2tDb2xvckZpbHRlckluZGV4XSA9IG5hdGl2ZUZpbHRlcjsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIFRoZSBbSW1hZ2VGaWx0ZXJdIHRvIHVzZSB3aGVuIGRyYXdpbmcgcmFzdGVyIGltYWdlcy4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUsIHRvIGJsdXIgYW4gaW1hZ2UgdXNpbmcgW0NhbnZhcy5kcmF3SW1hZ2VdLCBhcHBseSBhbgogIC8vLyBbSW1hZ2VGaWx0ZXIuYmx1cl06CiAgLy8vCiAgLy8vIGBgYGRhcnQKICAvLy8gaW1wb3J0ICdkYXJ0OnVpJyBhcyB1aTsKICAvLy8KICAvLy8gdWkuSW1hZ2UgaW1hZ2U7CiAgLy8vCiAgLy8vIHZvaWQgcGFpbnQoQ2FudmFzIGNhbnZhcywgU2l6ZSBzaXplKSB7CiAgLy8vICAgY2FudmFzLmRyYXdJbWFnZSgKICAvLy8gICAgIGltYWdlLAogIC8vLyAgICAgT2Zmc2V0Lnplcm8sCiAgLy8vICAgICBQYWludCgpLi5pbWFnZUZpbHRlciA9IHVpLkltYWdlRmlsdGVyLmJsdXIoc2lnbWFYOiAuNSwgc2lnbWFZOiAuNSksCiAgLy8vICAgKTsKICAvLy8gfQogIC8vLyBgYGAKICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICAqIFtNYXNrRmlsdGVyXSwgd2hpY2ggaXMgdXNlZCBmb3IgZHJhd2luZyBnZW9tZXRyeS4KICBJbWFnZUZpbHRlciBnZXQgaW1hZ2VGaWx0ZXIgewogICAgaWYgKF9vYmplY3RzID09IG51bGwgfHwgX29iamVjdHNbX2tJbWFnZUZpbHRlckluZGV4XSA9PSBudWxsKQogICAgICByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfb2JqZWN0c1tfa0ltYWdlRmlsdGVySW5kZXhdLmNyZWF0b3IgYXMgSW1hZ2VGaWx0ZXI7CiAgfQoKICBzZXQgaW1hZ2VGaWx0ZXIoSW1hZ2VGaWx0ZXIgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CiAgICAgIGlmIChfb2JqZWN0cyAhPSBudWxsKSB7CiAgICAgICAgX29iamVjdHNbX2tJbWFnZUZpbHRlckluZGV4XSA9IG51bGw7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIF9vYmplY3RzID8/PSBMaXN0PGR5bmFtaWM+KF9rT2JqZWN0Q291bnQpOwogICAgICBpZiAoX29iamVjdHNbX2tJbWFnZUZpbHRlckluZGV4XT8uY3JlYXRvciAhPSB2YWx1ZSkgewogICAgICAgIF9vYmplY3RzW19rSW1hZ2VGaWx0ZXJJbmRleF0gPSB2YWx1ZS5fdG9OYXRpdmVJbWFnZUZpbHRlcigpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gV2hldGhlciB0aGUgY29sb3JzIG9mIHRoZSBpbWFnZSBhcmUgaW52ZXJ0ZWQgd2hlbiBkcmF3bi4KICAvLy8KICAvLy8gSW52ZXJ0aW5nIHRoZSBjb2xvcnMgb2YgYW4gaW1hZ2UgYXBwbGllcyBhIG5ldyBjb2xvciBmaWx0ZXIgdGhhdCB3aWxsCiAgLy8vIGJlIGNvbXBvc2VkIHdpdGggYW55IHVzZXIgcHJvdmlkZWQgY29sb3IgZmlsdGVycy4gVGhpcyBpcyBwcmltYXJpbHkKICAvLy8gdXNlZCBmb3IgaW1wbGVtZW50aW5nIHNtYXJ0IGludmVydCBvbiBpT1MuCiAgYm9vbCBnZXQgaW52ZXJ0Q29sb3JzIHsKICAgIHJldHVybiBfZGF0YS5nZXRJbnQzMihfa0ludmVydENvbG9yT2Zmc2V0LCBfa0Zha2VIb3N0RW5kaWFuKSA9PSAxOwogIH0KICBzZXQgaW52ZXJ0Q29sb3JzKGJvb2wgdmFsdWUpIHsKICAgIF9kYXRhLnNldEludDMyKF9rSW52ZXJ0Q29sb3JPZmZzZXQsIHZhbHVlID8gMSA6IDAsIF9rRmFrZUhvc3RFbmRpYW4pOwogIH0KCiAgYm9vbCBnZXQgX2RpdGhlciB7CiAgICByZXR1cm4gX2RhdGEuZ2V0SW50MzIoX2tEaXRoZXJPZmZzZXQsIF9rRmFrZUhvc3RFbmRpYW4pID09IDE7CiAgfQogIHNldCBfZGl0aGVyKGJvb2wgdmFsdWUpIHsKICAgIF9kYXRhLnNldEludDMyKF9rRGl0aGVyT2Zmc2V0LCB2YWx1ZSA/IDEgOiAwLCBfa0Zha2VIb3N0RW5kaWFuKTsKICB9CgogIC8vLyBXaGV0aGVyIHRvIGRpdGhlciB0aGUgb3V0cHV0IHdoZW4gZHJhd2luZyBpbWFnZXMuCiAgLy8vCiAgLy8vIElmIGZhbHNlLCB0aGUgZGVmYXVsdCB2YWx1ZSwgZGl0aGVyaW5nIHdpbGwgYmUgZW5hYmxlZCB3aGVuIHRoZSBpbnB1dAogIC8vLyBjb2xvciBkZXB0aCBpcyBoaWdoZXIgdGhhbiB0aGUgb3V0cHV0IGNvbG9yIGRlcHRoLiBGb3IgZXhhbXBsZSwKICAvLy8gZHJhd2luZyBhbiBSR0I4IGltYWdlIG9udG8gYW4gUkdCNTY1IGNhbnZhcy4KICAvLy8KICAvLy8gVGhpcyB2YWx1ZSBhbHNvIGNvbnRyb2xzIGRpdGhlcmluZyBvZiBbc2hhZGVyXXMsIHdoaWNoIGNhbiBtYWtlCiAgLy8vIGdyYWRpZW50cyBhcHBlYXIgc21vb3RoZXIuCiAgLy8vCiAgLy8vIFdoZXRoZXIgb3Igbm90IGRpdGhlcmluZyBhZmZlY3RzIHRoZSBvdXRwdXQgaXMgaW1wbGVtZW50YXRpb24gZGVmaW5lZC4KICAvLy8gU29tZSBpbXBsZW1lbnRhdGlvbnMgbWF5IGNob29zZSB0byBpZ25vcmUgdGhpcyBjb21wbGV0ZWx5LCBpZiB0aGV5J3JlCiAgLy8vIHVuYWJsZSB0byBjb250cm9sIGRpdGhlcmluZy4KICAvLy8KICAvLy8gVG8gZW5zdXJlIHRoYXQgZGl0aGVyaW5nIGlzIGNvbnNpc3RlbnRseSBlbmFibGVkIGZvciB5b3VyIGVudGlyZQogIC8vLyBhcHBsaWNhdGlvbiwgc2V0IHRoaXMgdG8gdHJ1ZSBiZWZvcmUgaW52b2tpbmcgYW55IGRyYXdpbmcgcmVsYXRlZCBjb2RlLgogIHN0YXRpYyBib29sIGVuYWJsZURpdGhlcmluZyA9IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBmaW5hbCBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gU3RyaW5nQnVmZmVyKCk7CiAgICBTdHJpbmcgc2VtaWNvbG9uID0gJyc7CiAgICByZXN1bHQud3JpdGUoJ1BhaW50KCcpOwogICAgaWYgKHN0eWxlID09IFBhaW50aW5nU3R5bGUuc3Ryb2tlKSB7CiAgICAgIHJlc3VsdC53cml0ZSgnJHN0eWxlJyk7CiAgICAgIGlmIChzdHJva2VXaWR0aCAhPSAwLjApCiAgICAgICAgcmVzdWx0LndyaXRlKCcgJHtzdHJva2VXaWR0aC50b1N0cmluZ0FzRml4ZWQoMSl9Jyk7CiAgICAgIGVsc2UKICAgICAgICByZXN1bHQud3JpdGUoJyBoYWlybGluZScpOwogICAgICBpZiAoc3Ryb2tlQ2FwICE9IFN0cm9rZUNhcC5idXR0KQogICAgICAgIHJlc3VsdC53cml0ZSgnICRzdHJva2VDYXAnKTsKICAgICAgaWYgKHN0cm9rZUpvaW4gPT0gU3Ryb2tlSm9pbi5taXRlcikgewogICAgICAgIGlmIChzdHJva2VNaXRlckxpbWl0ICE9IF9rU3Ryb2tlTWl0ZXJMaW1pdERlZmF1bHQpCiAgICAgICAgICByZXN1bHQud3JpdGUoJyAkc3Ryb2tlSm9pbiB1cCB0byAke3N0cm9rZU1pdGVyTGltaXQudG9TdHJpbmdBc0ZpeGVkKDEpfScpOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdC53cml0ZSgnICRzdHJva2VKb2luJyk7CiAgICAgIH0KICAgICAgc2VtaWNvbG9uID0gJzsgJzsKICAgIH0KICAgIGlmIChpc0FudGlBbGlhcyAhPSB0cnVlKSB7CiAgICAgIHJlc3VsdC53cml0ZSgnJHtzZW1pY29sb259YW50aWFsaWFzIG9mZicpOwogICAgICBzZW1pY29sb24gPSAnOyAnOwogICAgfQogICAgaWYgKGNvbG9yICE9IGNvbnN0IENvbG9yKF9rQ29sb3JEZWZhdWx0KSkgewogICAgICBpZiAoY29sb3IgIT0gbnVsbCkKICAgICAgICByZXN1bHQud3JpdGUoJyRzZW1pY29sb24kY29sb3InKTsKICAgICAgZWxzZQogICAgICAgIHJlc3VsdC53cml0ZSgnJHtzZW1pY29sb259bm8gY29sb3InKTsKICAgICAgc2VtaWNvbG9uID0gJzsgJzsKICAgIH0KICAgIGlmIChibGVuZE1vZGUuaW5kZXggIT0gX2tCbGVuZE1vZGVEZWZhdWx0KSB7CiAgICAgIHJlc3VsdC53cml0ZSgnJHNlbWljb2xvbiRibGVuZE1vZGUnKTsKICAgICAgc2VtaWNvbG9uID0gJzsgJzsKICAgIH0KICAgIGlmIChjb2xvckZpbHRlciAhPSBudWxsKSB7CiAgICAgIHJlc3VsdC53cml0ZSgnJHtzZW1pY29sb259Y29sb3JGaWx0ZXI6ICRjb2xvckZpbHRlcicpOwogICAgICBzZW1pY29sb24gPSAnOyAnOwogICAgfQogICAgaWYgKG1hc2tGaWx0ZXIgIT0gbnVsbCkgewogICAgICByZXN1bHQud3JpdGUoJyR7c2VtaWNvbG9ufW1hc2tGaWx0ZXI6ICRtYXNrRmlsdGVyJyk7CiAgICAgIHNlbWljb2xvbiA9ICc7ICc7CiAgICB9CiAgICBpZiAoZmlsdGVyUXVhbGl0eSAhPSBGaWx0ZXJRdWFsaXR5Lm5vbmUpIHsKICAgICAgcmVzdWx0LndyaXRlKCcke3NlbWljb2xvbn1maWx0ZXJRdWFsaXR5OiAkZmlsdGVyUXVhbGl0eScpOwogICAgICBzZW1pY29sb24gPSAnOyAnOwogICAgfQogICAgaWYgKHNoYWRlciAhPSBudWxsKSB7CiAgICAgIHJlc3VsdC53cml0ZSgnJHtzZW1pY29sb259c2hhZGVyOiAkc2hhZGVyJyk7CiAgICAgIHNlbWljb2xvbiA9ICc7ICc7CiAgICB9CiAgICBpZiAoaW1hZ2VGaWx0ZXIgIT0gbnVsbCkgewogICAgICByZXN1bHQud3JpdGUoJyR7c2VtaWNvbG9ufWltYWdlRmlsdGVyOiAkaW1hZ2VGaWx0ZXInKTsKICAgICAgc2VtaWNvbG9uID0gJzsgJzsKICAgIH0KICAgIGlmIChpbnZlcnRDb2xvcnMpCiAgICAgIHJlc3VsdC53cml0ZSgnJHtzZW1pY29sb259aW52ZXJ0OiAkaW52ZXJ0Q29sb3JzJyk7CiAgICBpZiAoX2RpdGhlcikKICAgICAgcmVzdWx0LndyaXRlKCcke3NlbWljb2xvbn1kaXRoZXI6ICRfZGl0aGVyJyk7CiAgICByZXN1bHQud3JpdGUoJyknKTsKICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKICB9Cn0KCi8vLyBUaGUgZm9ybWF0IGluIHdoaWNoIGltYWdlIGJ5dGVzIHNob3VsZCBiZSByZXR1cm5lZCB3aGVuIHVzaW5nCi8vLyBbSW1hZ2UudG9CeXRlRGF0YV0uCmVudW0gSW1hZ2VCeXRlRm9ybWF0IHsKICAvLy8gUmF3IFJHQkEgZm9ybWF0LgogIC8vLwogIC8vLyBVbmVuY29kZWQgYnl0ZXMsIGluIFJHQkEgcm93LXByaW1hcnkgZm9ybSwgOCBiaXRzIHBlciBjaGFubmVsLgogIHJhd1JnYmEsCgogIC8vLyBSYXcgdW5tb2RpZmllZCBmb3JtYXQuCiAgLy8vCiAgLy8vIFVuZW5jb2RlZCBieXRlcywgaW4gdGhlIGltYWdlJ3MgZXhpc3RpbmcgZm9ybWF0LiBGb3IgZXhhbXBsZSwgYSBncmF5c2NhbGUKICAvLy8gaW1hZ2UgbWF5IHVzZSBhIHNpbmdsZSA4LWJpdCBjaGFubmVsIGZvciBlYWNoIHBpeGVsLgogIHJhd1VubW9kaWZpZWQsCgogIC8vLyBQTkcgZm9ybWF0LgogIC8vLwogIC8vLyBBIGxvc3MtbGVzcyBjb21wcmVzc2lvbiBmb3JtYXQgZm9yIGltYWdlcy4gVGhpcyBmb3JtYXQgaXMgd2VsbCBzdWl0ZWQgZm9yCiAgLy8vIGltYWdlcyB3aXRoIGhhcmQgZWRnZXMsIHN1Y2ggYXMgc2NyZWVuc2hvdHMgb3Igc3ByaXRlcywgYW5kIGltYWdlcyB3aXRoCiAgLy8vIHRleHQuIFRyYW5zcGFyZW5jeSBpcyBzdXBwb3J0ZWQuIFRoZSBQTkcgZm9ybWF0IHN1cHBvcnRzIGltYWdlcyB1cCB0bwogIC8vLyAyLDE0Nyw0ODMsNjQ3IHBpeGVscyBpbiBlaXRoZXIgZGltZW5zaW9uLCB0aG91Z2ggaW4gcHJhY3RpY2UgYXZhaWxhYmxlCiAgLy8vIG1lbW9yeSBwcm92aWRlcyBhIG1vcmUgaW1tZWRpYXRlIGxpbWl0YXRpb24gb24gbWF4aW11bSBpbWFnZSBzaXplLgogIC8vLwogIC8vLyBQTkcgaW1hZ2VzIG5vcm1hbGx5IHVzZSB0aGUgYC5wbmdgIGZpbGUgZXh0ZW5zaW9uIGFuZCB0aGUgYGltYWdlL3BuZ2AgTUlNRQogIC8vLyB0eXBlLgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1BvcnRhYmxlX05ldHdvcmtfR3JhcGhpY3M+LCB0aGUgV2lraXBlZGlhIHBhZ2Ugb24gUE5HLgogIC8vLyAgKiA8aHR0cHM6Ly90b29scy5pZXRmLm9yZy9yZmMvcmZjMjA4My50eHQ+LCB0aGUgUE5HIHN0YW5kYXJkLgogIHBuZywKfQoKLy8vIFRoZSBmb3JtYXQgb2YgcGl4ZWwgZGF0YSBnaXZlbiB0byBbZGVjb2RlSW1hZ2VGcm9tUGl4ZWxzXS4KZW51bSBQaXhlbEZvcm1hdCB7CiAgLy8vIEVhY2ggcGl4ZWwgaXMgMzIgYml0cywgd2l0aCB0aGUgaGlnaGVzdCA4IGJpdHMgZW5jb2RpbmcgcmVkLCB0aGUgbmV4dCA4CiAgLy8vIGJpdHMgZW5jb2RpbmcgZ3JlZW4sIHRoZSBuZXh0IDggYml0cyBlbmNvZGluZyBibHVlLCBhbmQgdGhlIGxvd2VzdCA4IGJpdHMKICAvLy8gZW5jb2RpbmcgYWxwaGEuCiAgcmdiYTg4ODgsCgogIC8vLyBFYWNoIHBpeGVsIGlzIDMyIGJpdHMsIHdpdGggdGhlIGhpZ2hlc3QgOCBiaXRzIGVuY29kaW5nIGJsdWUsIHRoZSBuZXh0IDgKICAvLy8gYml0cyBlbmNvZGluZyBncmVlbiwgdGhlIG5leHQgOCBiaXRzIGVuY29kaW5nIHJlZCwgYW5kIHRoZSBsb3dlc3QgOCBiaXRzCiAgLy8vIGVuY29kaW5nIGFscGhhLgogIGJncmE4ODg4LAp9CgpjbGFzcyBfSW1hZ2VJbmZvIHsKICBfSW1hZ2VJbmZvKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLmZvcm1hdCwgdGhpcy5yb3dCeXRlcykgewogICAgcm93Qnl0ZXMgPz89IHdpZHRoICogNDsKICB9CgogIEBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JywgJ2dldCcpCiAgaW50IHdpZHRoOwogIEBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JywgJ2dldCcpCiAgaW50IGhlaWdodDsKICBAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcsICdnZXQnKQogIGludCBmb3JtYXQ7CiAgQHByYWdtYSgndm06ZW50cnktcG9pbnQnLCAnZ2V0JykKICBpbnQgcm93Qnl0ZXM7Cn0KCi8vLyBPcGFxdWUgaGFuZGxlIHRvIHJhdyBkZWNvZGVkIGltYWdlIGRhdGEgKHBpeGVscykuCi8vLwovLy8gVG8gb2J0YWluIGFuIFtJbWFnZV0gb2JqZWN0LCB1c2UgW2luc3RhbnRpYXRlSW1hZ2VDb2RlY10uCi8vLwovLy8gVG8gZHJhdyBhbiBbSW1hZ2VdLCB1c2Ugb25lIG9mIHRoZSBtZXRob2RzIG9uIHRoZSBbQ2FudmFzXSBjbGFzcywgc3VjaCBhcwovLy8gW0NhbnZhcy5kcmF3SW1hZ2VdLgovLy8KLy8vIFNlZSBhbHNvOgovLy8KLy8vICAqIFtJbWFnZV0oaHR0cHM6Ly9hcGkuZmx1dHRlci5kZXYvZmx1dHRlci93aWRnZXRzL0ltYWdlLWNsYXNzLmh0bWwpLCB0aGUgY2xhc3MgaW4gdGhlIFt3aWRnZXRzXSBsaWJyYXJ5LgovLy8KQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQpjbGFzcyBJbWFnZSBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMiB7CiAgLy8gVGhpcyBjbGFzcyBpcyBjcmVhdGVkIGJ5IHRoZSBlbmdpbmUsIGFuZCBzaG91bGQgbm90IGJlIGluc3RhbnRpYXRlZAogIC8vIG9yIGV4dGVuZGVkIGRpcmVjdGx5LgogIC8vCiAgLy8gVG8gb2J0YWluIGFuIFtJbWFnZV0gb2JqZWN0LCB1c2UgW2luc3RhbnRpYXRlSW1hZ2VDb2RlY10uCiAgQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQogIEltYWdlLl8oKTsKCiAgLy8vIFRoZSBudW1iZXIgb2YgaW1hZ2UgcGl4ZWxzIGFsb25nIHRoZSBpbWFnZSdzIGhvcml6b250YWwgYXhpcy4KICBpbnQgZ2V0IHdpZHRoIG5hdGl2ZSAnSW1hZ2Vfd2lkdGgnOwoKICAvLy8gVGhlIG51bWJlciBvZiBpbWFnZSBwaXhlbHMgYWxvbmcgdGhlIGltYWdlJ3MgdmVydGljYWwgYXhpcy4KICBpbnQgZ2V0IGhlaWdodCBuYXRpdmUgJ0ltYWdlX2hlaWdodCc7CgogIC8vLyBDb252ZXJ0cyB0aGUgW0ltYWdlXSBvYmplY3QgaW50byBhIGJ5dGUgYXJyYXkuCiAgLy8vCiAgLy8vIFRoZSBbZm9ybWF0XSBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGZvcm1hdCBpbiB3aGljaCB0aGUgYnl0ZXMgd2lsbCBiZQogIC8vLyByZXR1cm5lZC4KICAvLy8KICAvLy8gUmV0dXJucyBhIGZ1dHVyZSB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoZSBiaW5hcnkgaW1hZ2UgZGF0YSBvciBhbiBlcnJvcgogIC8vLyBpZiBlbmNvZGluZyBmYWlscy4KICBGdXR1cmU8Qnl0ZURhdGE+IHRvQnl0ZURhdGEoe0ltYWdlQnl0ZUZvcm1hdCBmb3JtYXQgPSBJbWFnZUJ5dGVGb3JtYXQucmF3UmdiYX0pIHsKICAgIHJldHVybiBfZnV0dXJpemUoKF9DYWxsYmFjazxCeXRlRGF0YT4gY2FsbGJhY2spIHsKICAgICAgcmV0dXJuIF90b0J5dGVEYXRhKGZvcm1hdC5pbmRleCwgKFVpbnQ4TGlzdCBlbmNvZGVkKSB7CiAgICAgICAgY2FsbGJhY2soZW5jb2RlZD8uYnVmZmVyPy5hc0J5dGVEYXRhKCkpOwogICAgICB9KTsKICAgIH0pOwogIH0KCiAgLy8vIFJldHVybnMgYW4gZXJyb3IgbWVzc2FnZSBvbiBmYWlsdXJlLCBudWxsIG9uIHN1Y2Nlc3MuCiAgU3RyaW5nIF90b0J5dGVEYXRhKGludCBmb3JtYXQsIF9DYWxsYmFjazxVaW50OExpc3Q+IGNhbGxiYWNrKSBuYXRpdmUgJ0ltYWdlX3RvQnl0ZURhdGEnOwoKICAvLy8gUmVsZWFzZSB0aGUgcmVzb3VyY2VzIHVzZWQgYnkgdGhpcyBvYmplY3QuIFRoZSBvYmplY3QgaXMgbm8gbG9uZ2VyIHVzYWJsZQogIC8vLyBhZnRlciB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuCiAgdm9pZCBkaXNwb3NlKCkgbmF0aXZlICdJbWFnZV9kaXNwb3NlJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1skd2lkdGhcdTAwRDckaGVpZ2h0XSc7Cn0KCi8vLyBDYWxsYmFjayBzaWduYXR1cmUgZm9yIFtkZWNvZGVJbWFnZUZyb21MaXN0XS4KdHlwZWRlZiBJbWFnZURlY29kZXJDYWxsYmFjayA9IHZvaWQgRnVuY3Rpb24oSW1hZ2UgcmVzdWx0KTsKCi8vLyBJbmZvcm1hdGlvbiBmb3IgYSBzaW5nbGUgZnJhbWUgb2YgYW4gYW5pbWF0aW9uLgovLy8KLy8vIFRvIG9idGFpbiBhbiBpbnN0YW5jZSBvZiB0aGUgW0ZyYW1lSW5mb10gaW50ZXJmYWNlLCBzZWUKLy8vIFtDb2RlYy5nZXROZXh0RnJhbWVdLgpAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCmNsYXNzIEZyYW1lSW5mbyBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMiB7CiAgLy8vIFRoaXMgY2xhc3MgaXMgY3JlYXRlZCBieSB0aGUgZW5naW5lLCBhbmQgc2hvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQKICAvLy8gb3IgZXh0ZW5kZWQgZGlyZWN0bHkuCiAgLy8vCiAgLy8vIFRvIG9idGFpbiBhbiBpbnN0YW5jZSBvZiB0aGUgW0ZyYW1lSW5mb10gaW50ZXJmYWNlLCBzZWUKICAvLy8gW0NvZGVjLmdldE5leHRGcmFtZV0uCiAgQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQogIEZyYW1lSW5mby5fKCk7CgogIC8vLyBUaGUgZHVyYXRpb24gdGhpcyBmcmFtZSBzaG91bGQgYmUgc2hvd24uCiAgRHVyYXRpb24gZ2V0IGR1cmF0aW9uID0+IER1cmF0aW9uKG1pbGxpc2Vjb25kczogX2R1cmF0aW9uTWlsbGlzKTsKICBpbnQgZ2V0IF9kdXJhdGlvbk1pbGxpcyBuYXRpdmUgJ0ZyYW1lSW5mb19kdXJhdGlvbk1pbGxpcyc7CgogIC8vLyBUaGUgW0ltYWdlXSBvYmplY3QgZm9yIHRoaXMgZnJhbWUuCiAgSW1hZ2UgZ2V0IGltYWdlIG5hdGl2ZSAnRnJhbWVJbmZvX2ltYWdlJzsKfQoKLy8vIEEgaGFuZGxlIHRvIGFuIGltYWdlIGNvZGVjLgovLy8KLy8vIFRoaXMgY2xhc3MgaXMgY3JlYXRlZCBieSB0aGUgZW5naW5lLCBhbmQgc2hvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQKLy8vIG9yIGV4dGVuZGVkIGRpcmVjdGx5LgovLy8KLy8vIFRvIG9idGFpbiBhbiBpbnN0YW5jZSBvZiB0aGUgW0NvZGVjXSBpbnRlcmZhY2UsIHNlZQovLy8gW2luc3RhbnRpYXRlSW1hZ2VDb2RlY10uCkBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKY2xhc3MgQ29kZWMgZXh0ZW5kcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczIgewogIC8vCiAgLy8gVGhpcyBjbGFzcyBpcyBjcmVhdGVkIGJ5IHRoZSBlbmdpbmUsIGFuZCBzaG91bGQgbm90IGJlIGluc3RhbnRpYXRlZAogIC8vIG9yIGV4dGVuZGVkIGRpcmVjdGx5LgogIC8vCiAgLy8gVG8gb2J0YWluIGFuIGluc3RhbmNlIG9mIHRoZSBbQ29kZWNdIGludGVyZmFjZSwgc2VlCiAgLy8gW2luc3RhbnRpYXRlSW1hZ2VDb2RlY10uCiAgQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQogIENvZGVjLl8oKTsKCiAgLy8vIE51bWJlciBvZiBmcmFtZXMgaW4gdGhpcyBpbWFnZS4KICBpbnQgZ2V0IGZyYW1lQ291bnQgbmF0aXZlICdDb2RlY19mcmFtZUNvdW50JzsKCiAgLy8vIE51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIGFuaW1hdGlvbi4KICAvLy8KICAvLy8gKiAwIHdoZW4gdGhlIGFuaW1hdGlvbiBzaG91bGQgYmUgcGxheWVkIG9uY2UuCiAgLy8vICogLTEgZm9yIGluZmluaXR5IHJlcGV0aXRpb25zLgogIGludCBnZXQgcmVwZXRpdGlvbkNvdW50IG5hdGl2ZSAnQ29kZWNfcmVwZXRpdGlvbkNvdW50JzsKCiAgLy8vIEZldGNoZXMgdGhlIG5leHQgYW5pbWF0aW9uIGZyYW1lLgogIC8vLwogIC8vLyBXcmFwcyBiYWNrIHRvIHRoZSBmaXJzdCBmcmFtZSBhZnRlciByZXR1cm5pbmcgdGhlIGxhc3QgZnJhbWUuCiAgLy8vCiAgLy8vIFRoZSByZXR1cm5lZCBmdXR1cmUgY2FuIGNvbXBsZXRlIHdpdGggYW4gZXJyb3IgaWYgdGhlIGRlY29kaW5nIGhhcyBmYWlsZWQuCiAgRnV0dXJlPEZyYW1lSW5mbz4gZ2V0TmV4dEZyYW1lKCkgewogICAgcmV0dXJuIF9mdXR1cml6ZShfZ2V0TmV4dEZyYW1lKTsKICB9CgogIC8vLyBSZXR1cm5zIGFuIGVycm9yIG1lc3NhZ2Ugb24gZmFpbHVyZSwgbnVsbCBvbiBzdWNjZXNzLgogIFN0cmluZyBfZ2V0TmV4dEZyYW1lKF9DYWxsYmFjazxGcmFtZUluZm8+IGNhbGxiYWNrKSBuYXRpdmUgJ0NvZGVjX2dldE5leHRGcmFtZSc7CgogIC8vLyBSZWxlYXNlIHRoZSByZXNvdXJjZXMgdXNlZCBieSB0aGlzIG9iamVjdC4gVGhlIG9iamVjdCBpcyBubyBsb25nZXIgdXNhYmxlCiAgLy8vIGFmdGVyIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC4KICB2b2lkIGRpc3Bvc2UoKSBuYXRpdmUgJ0NvZGVjX2Rpc3Bvc2UnOwp9CgovLy8gSW5zdGFudGlhdGVzIGFuIGltYWdlIGNvZGVjIFtDb2RlY10gb2JqZWN0LgovLy8KLy8vIFtsaXN0XSBpcyB0aGUgYmluYXJ5IGltYWdlIGRhdGEgKGUuZyBhIFBORyBvciBHSUYgYmluYXJ5IGRhdGEpLgovLy8gVGhlIGRhdGEgY2FuIGJlIGZvciBlaXRoZXIgc3RhdGljIG9yIGFuaW1hdGVkIGltYWdlcy4gVGhlIGZvbGxvd2luZyBpbWFnZQovLy8gZm9ybWF0cyBhcmUgc3VwcG9ydGVkOiB7QG1hY3JvIGZsdXR0ZXIuZGFydDp1aS5pbWFnZUZvcm1hdHN9Ci8vLwovLy8gVGhlIFt0YXJnZXRXaWR0aF0gYW5kIFt0YXJnZXRIZWlnaHRdIGFyZ3VtZW50cyBzcGVjaWZ5IHRoZSBzaXplIG9mIHRoZSBvdXRwdXQKLy8vIGltYWdlLCBpbiBpbWFnZSBwaXhlbHMuIElmIHRoZXkgYXJlIG5vdCBlcXVhbCB0byB0aGUgaW50cmluc2ljIGRpbWVuc2lvbnMgb2YgdGhlCi8vLyBpbWFnZSwgdGhlbiB0aGUgaW1hZ2Ugd2lsbCBiZSBzY2FsZWQgYWZ0ZXIgYmVpbmcgZGVjb2RlZC4gSWYgb25seSBvbmUgZGltZW5zaW9uCi8vLyBpcyBzcGVjaWZpZWQsIHRoZSBvbWl0dGVkIGRpbWVuc2lvbiB3aWxsIHJlbWFpbiBpdHMgb3JpZ2luYWwgc2l6ZS4gSWYgYm90aCBhcmUKLy8vIG5vdCBzcGVjaWZpZWQsIHRoZW4gdGhlIGltYWdlIG1haW50YWlucyBpdHMgcmVhbCBzaXplLgovLy8KLy8vIFRoZSByZXR1cm5lZCBmdXR1cmUgY2FuIGNvbXBsZXRlIHdpdGggYW4gZXJyb3IgaWYgdGhlIGltYWdlIGRlY29kaW5nIGhhcwovLy8gZmFpbGVkLgpGdXR1cmU8Q29kZWM+IGluc3RhbnRpYXRlSW1hZ2VDb2RlYyhVaW50OExpc3QgbGlzdCwgewogIGludCB0YXJnZXRXaWR0aCwKICBpbnQgdGFyZ2V0SGVpZ2h0LAp9KSB7CiAgcmV0dXJuIF9mdXR1cml6ZSgKICAgIChfQ2FsbGJhY2s8Q29kZWM+IGNhbGxiYWNrKSA9PiBfaW5zdGFudGlhdGVJbWFnZUNvZGVjKGxpc3QsIGNhbGxiYWNrLCBudWxsLCB0YXJnZXRXaWR0aCA/PyBfa0RvTm90UmVzaXplRGltZW5zaW9uLCB0YXJnZXRIZWlnaHQgPz8gX2tEb05vdFJlc2l6ZURpbWVuc2lvbikKICApOwp9CgovLy8gSW5zdGFudGlhdGVzIGEgW0NvZGVjXSBvYmplY3QgZm9yIGFuIGltYWdlIGJpbmFyeSBkYXRhLgovLy8KLy8vIFRoZSBbdGFyZ2V0V2lkdGhdIGFuZCBbdGFyZ2V0SGVpZ2h0XSBhcmd1bWVudHMgc3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0Ci8vLyBpbWFnZSwgaW4gaW1hZ2UgcGl4ZWxzLiBJbWFnZSBpbiB0aGlzIGNvbnRleHQgcmVmZXJzIHRvIGltYWdlIGluIGV2ZXJ5IGZyYW1lIG9mIHRoZSBbQ29kZWNdLgovLy8gSWYgW3RhcmdldFdpZHRoXSBhbmQgW3RhcmdldEhlaWdodF0gYXJlIG5vdCBlcXVhbCB0byB0aGUgaW50cmluc2ljIGRpbWVuc2lvbnMgb2YgdGhlCi8vLyBpbWFnZSwgdGhlbiB0aGUgaW1hZ2Ugd2lsbCBiZSBzY2FsZWQgYWZ0ZXIgYmVpbmcgZGVjb2RlZC4gSWYgZXhhY3RseSBvbmUgb2YKLy8vIHRoZXNlIHR3byBhcmd1bWVudHMgaXMgbm90IGVxdWFsIHRvIFtfa0RvTm90UmVzaXplRGltZW5zaW9uXSwgdGhlbiB0aGUgYXNwZWN0Ci8vLyByYXRpbyB3aWxsIGJlIG1haW50YWluZWQgd2hpbGUgZm9yY2luZyB0aGUgaW1hZ2UgdG8gbWF0Y2ggdGhlIGdpdmVuIGRpbWVuc2lvbi4KLy8vIElmIGJvdGggYXJlIGVxdWFsIHRvIFtfa0RvTm90UmVzaXplRGltZW5zaW9uXSwgdGhlbiB0aGUgaW1hZ2UgbWFpbnRhaW5zIGl0cyByZWFsIHNpemUuCi8vLwovLy8gUmV0dXJucyBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZSBpbnN0YW50aWF0aW9uIGhhcyBmYWlsZWQsIG51bGwgb3RoZXJ3aXNlLgpTdHJpbmcgX2luc3RhbnRpYXRlSW1hZ2VDb2RlYyhVaW50OExpc3QgbGlzdCwgX0NhbGxiYWNrPENvZGVjPiBjYWxsYmFjaywgX0ltYWdlSW5mbyBpbWFnZUluZm8sIGludCB0YXJnZXRXaWR0aCwgaW50IHRhcmdldEhlaWdodCkKICBuYXRpdmUgJ2luc3RhbnRpYXRlSW1hZ2VDb2RlYyc7CgovLy8gTG9hZHMgYSBzaW5nbGUgaW1hZ2UgZnJhbWUgZnJvbSBhIGJ5dGUgYXJyYXkgaW50byBhbiBbSW1hZ2VdIG9iamVjdC4KLy8vCi8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgW2luc3RhbnRpYXRlSW1hZ2VDb2RlY10uIFByZWZlciB1c2luZwovLy8gW2luc3RhbnRpYXRlSW1hZ2VDb2RlY10gd2hpY2ggYWxzbyBzdXBwb3J0cyBtdWx0aSBmcmFtZSBpbWFnZXMuCnZvaWQgZGVjb2RlSW1hZ2VGcm9tTGlzdChVaW50OExpc3QgbGlzdCwgSW1hZ2VEZWNvZGVyQ2FsbGJhY2sgY2FsbGJhY2spIHsKICBfZGVjb2RlSW1hZ2VGcm9tTGlzdEFzeW5jKGxpc3QsIGNhbGxiYWNrKTsKfQoKRnV0dXJlPE51bGw+IF9kZWNvZGVJbWFnZUZyb21MaXN0QXN5bmMoVWludDhMaXN0IGxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlRGVjb2RlckNhbGxiYWNrIGNhbGxiYWNrKSBhc3luYyB7CiAgZmluYWwgQ29kZWMgY29kZWMgPSBhd2FpdCBpbnN0YW50aWF0ZUltYWdlQ29kZWMobGlzdCk7CiAgZmluYWwgRnJhbWVJbmZvIGZyYW1lSW5mbyA9IGF3YWl0IGNvZGVjLmdldE5leHRGcmFtZSgpOwogIGNhbGxiYWNrKGZyYW1lSW5mby5pbWFnZSk7Cn0KCi8vLyBDb252ZXJ0IGFuIGFycmF5IG9mIHBpeGVsIHZhbHVlcyBpbnRvIGFuIFtJbWFnZV0gb2JqZWN0LgovLy8KLy8vIFtwaXhlbHNdIGlzIHRoZSBwaXhlbCBkYXRhIGluIHRoZSBlbmNvZGluZyBkZXNjcmliZWQgYnkgW2Zvcm1hdF0uCi8vLwovLy8gW3Jvd0J5dGVzXSBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvbnN1bWVkIGJ5IGVhY2ggcm93IG9mIHBpeGVscyBpbiB0aGUKLy8vIGRhdGEgYnVmZmVyLiAgSWYgdW5zcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIFt3aWR0aF0gbXVsdGlwbGllZCBieSB0aGUKLy8vIG51bWJlciBvZiBieXRlcyBwZXIgcGl4ZWwgaW4gdGhlIHByb3ZpZGVkIFtmb3JtYXRdLgovLy8KLy8vIFRoZSBbdGFyZ2V0V2lkdGhdIGFuZCBbdGFyZ2V0SGVpZ2h0XSBhcmd1bWVudHMgc3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0Ci8vLyBpbWFnZSwgaW4gaW1hZ2UgcGl4ZWxzLiBJZiB0aGV5IGFyZSBub3QgZXF1YWwgdG8gdGhlIGludHJpbnNpYyBkaW1lbnNpb25zIG9mIHRoZQovLy8gaW1hZ2UsIHRoZW4gdGhlIGltYWdlIHdpbGwgYmUgc2NhbGVkIGFmdGVyIGJlaW5nIGRlY29kZWQuIElmIGV4YWN0bHkgb25lIG9mCi8vLyB0aGVzZSB0d28gYXJndW1lbnRzIGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgYXNwZWN0IHJhdGlvIHdpbGwgYmUgbWFpbnRhaW5lZAovLy8gd2hpbGUgZm9yY2luZyB0aGUgaW1hZ2UgdG8gbWF0Y2ggdGhlIG90aGVyIGdpdmVuIGRpbWVuc2lvbi4gSWYgbmVpdGhlciBpcwovLy8gc3BlY2lmaWVkLCB0aGVuIHRoZSBpbWFnZSBtYWludGFpbnMgaXRzIHJlYWwgc2l6ZS4Kdm9pZCBkZWNvZGVJbWFnZUZyb21QaXhlbHMoCiAgVWludDhMaXN0IHBpeGVscywKICBpbnQgd2lkdGgsCiAgaW50IGhlaWdodCwKICBQaXhlbEZvcm1hdCBmb3JtYXQsCiAgSW1hZ2VEZWNvZGVyQ2FsbGJhY2sgY2FsbGJhY2ssCiAge2ludCByb3dCeXRlcywgaW50IHRhcmdldFdpZHRoLCBpbnQgdGFyZ2V0SGVpZ2h0fQopIHsKICBmaW5hbCBfSW1hZ2VJbmZvIGltYWdlSW5mbyA9IF9JbWFnZUluZm8od2lkdGgsIGhlaWdodCwgZm9ybWF0LmluZGV4LCByb3dCeXRlcyk7CiAgZmluYWwgRnV0dXJlPENvZGVjPiBjb2RlY0Z1dHVyZSA9IF9mdXR1cml6ZSgKICAgIChfQ2FsbGJhY2s8Q29kZWM+IGNhbGxiYWNrKSA9PiBfaW5zdGFudGlhdGVJbWFnZUNvZGVjKHBpeGVscywgY2FsbGJhY2ssIGltYWdlSW5mbywgdGFyZ2V0V2lkdGggPz8gX2tEb05vdFJlc2l6ZURpbWVuc2lvbiwgdGFyZ2V0SGVpZ2h0ID8/IF9rRG9Ob3RSZXNpemVEaW1lbnNpb24pCiAgKTsKICBjb2RlY0Z1dHVyZS50aGVuKChDb2RlYyBjb2RlYykgPT4gY29kZWMuZ2V0TmV4dEZyYW1lKCkpCiAgICAgIC50aGVuKChGcmFtZUluZm8gZnJhbWVJbmZvKSA9PiBjYWxsYmFjayhmcmFtZUluZm8uaW1hZ2UpKTsKfQoKLy8vIERldGVybWluZXMgdGhlIHdpbmRpbmcgcnVsZSB0aGF0IGRlY2lkZXMgaG93IHRoZSBpbnRlcmlvciBvZiBhIFtQYXRoXSBpcwovLy8gY2FsY3VsYXRlZC4KLy8vCi8vLyBUaGlzIGVudW0gaXMgdXNlZCBieSB0aGUgW1BhdGguZmlsbFR5cGVdIHByb3BlcnR5LgplbnVtIFBhdGhGaWxsVHlwZSB7CiAgLy8vIFRoZSBpbnRlcmlvciBpcyBkZWZpbmVkIGJ5IGEgbm9uLXplcm8gc3VtIG9mIHNpZ25lZCBlZGdlIGNyb3NzaW5ncy4KICAvLy8KICAvLy8gRm9yIGEgZ2l2ZW4gcG9pbnQsIHRoZSBwb2ludCBpcyBjb25zaWRlcmVkIHRvIGJlIG9uIHRoZSBpbnNpZGUgb2YgdGhlIHBhdGgKICAvLy8gaWYgYSBsaW5lIGRyYXduIGZyb20gdGhlIHBvaW50IHRvIGluZmluaXR5IGNyb3NzZXMgbGluZXMgZ29pbmcgY2xvY2t3aXNlCiAgLy8vIGFyb3VuZCB0aGUgcG9pbnQgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIHRpbWVzIHRoYW4gaXQgY3Jvc3NlcyBsaW5lcyBnb2luZwogIC8vLyBjb3VudGVyLWNsb2Nrd2lzZSBhcm91bmQgdGhhdCBwb2ludC4KICAvLy8KICAvLy8gU2VlOiA8aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTm9uemVyby1ydWxlPgogIG5vblplcm8sCgogIC8vLyBUaGUgaW50ZXJpb3IgaXMgZGVmaW5lZCBieSBhbiBvZGQgbnVtYmVyIG9mIGVkZ2UgY3Jvc3NpbmdzLgogIC8vLwogIC8vLyBGb3IgYSBnaXZlbiBwb2ludCwgdGhlIHBvaW50IGlzIGNvbnNpZGVyZWQgdG8gYmUgb24gdGhlIGluc2lkZSBvZiB0aGUgcGF0aAogIC8vLyBpZiBhIGxpbmUgZHJhd24gZnJvbSB0aGUgcG9pbnQgdG8gaW5maW5pdHkgY3Jvc3NlcyBhbiBvZGQgbnVtYmVyIG9mIGxpbmVzLgogIC8vLwogIC8vLyBTZWU6IDxodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FdmVuLW9kZF9ydWxlPgogIGV2ZW5PZGQsCn0KCi8vLyBTdHJhdGVnaWVzIGZvciBjb21iaW5pbmcgcGF0aHMuCi8vLwovLy8gU2VlIGFsc286Ci8vLwovLy8gKiBbUGF0aC5jb21iaW5lXSwgd2hpY2ggdXNlcyB0aGlzIGVudW0gdG8gZGVjaWRlIGhvdyB0byBjb21iaW5lIHR3byBwYXRocy4KLy8gTXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCBTa1BhdGhPcAplbnVtIFBhdGhPcGVyYXRpb24gewogIC8vLyBTdWJ0cmFjdCB0aGUgc2Vjb25kIHBhdGggZnJvbSB0aGUgZmlyc3QgcGF0aC4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUsIGlmIHRoZSB0d28gcGF0aHMgYXJlIG92ZXJsYXBwaW5nIGNpcmNsZXMgb2YgZXF1YWwgZGlhbWV0ZXIKICAvLy8gYnV0IGRpZmZlcmluZyBjZW50ZXJzLCB0aGUgcmVzdWx0IHdvdWxkIGJlIGEgY3Jlc2NlbnQgcG9ydGlvbiBvZiB0aGUKICAvLy8gZmlyc3QgY2lyY2xlIHRoYXQgd2FzIG5vdCBvdmVybGFwcGVkIGJ5IHRoZSBzZWNvbmQgY2lyY2xlLgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogW3JldmVyc2VEaWZmZXJlbmNlXSwgd2hpY2ggaXMgdGhlIHNhbWUgYnV0IHN1YnRyYWN0aW5nIHRoZSBmaXJzdCBwYXRoCiAgLy8vICAgIGZyb20gdGhlIHNlY29uZC4KICBkaWZmZXJlbmNlLAogIC8vLyBDcmVhdGUgYSBuZXcgcGF0aCB0aGF0IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHR3byBwYXRocywgbGVhdmluZyB0aGUKICAvLy8gb3ZlcmxhcHBpbmcgcGllY2VzIG9mIHRoZSBwYXRoLgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSwgaWYgdGhlIHR3byBwYXRocyBhcmUgb3ZlcmxhcHBpbmcgY2lyY2xlcyBvZiBlcXVhbCBkaWFtZXRlcgogIC8vLyBidXQgZGlmZmVyaW5nIGNlbnRlcnMsIHRoZSByZXN1bHQgd291bGQgYmUgb25seSB0aGUgb3ZlcmxhcHBpbmcgcG9ydGlvbgogIC8vLyBvZiB0aGUgdHdvIGNpcmNsZXMuCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLyAgKiBbeG9yXSwgd2hpY2ggaXMgdGhlIGludmVyc2Ugb2YgdGhpcyBvcGVyYXRpb24KICBpbnRlcnNlY3QsCiAgLy8vIENyZWF0ZSBhIG5ldyBwYXRoIHRoYXQgaXMgdGhlIHVuaW9uIChpbmNsdXNpdmUtb3IpIG9mIHRoZSB0d28gcGF0aHMuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCBpZiB0aGUgdHdvIHBhdGhzIGFyZSBvdmVybGFwcGluZyBjaXJjbGVzIG9mIGVxdWFsIGRpYW1ldGVyCiAgLy8vIGJ1dCBkaWZmZXJpbmcgY2VudGVycywgdGhlIHJlc3VsdCB3b3VsZCBiZSBhIGZpZ3VyZS1laWdodCBsaWtlIHNoYXBlCiAgLy8vIG1hdGNoaW5nIHRoZSBvdXRlciBib3VuZGFyaWVzIG9mIGJvdGggY2lyY2xlcy4KICB1bmlvbiwKICAvLy8gQ3JlYXRlIGEgbmV3IHBhdGggdGhhdCBpcyB0aGUgZXhjbHVzaXZlLW9yIG9mIHRoZSB0d28gcGF0aHMsIGxlYXZpbmcKICAvLy8gZXZlcnl0aGluZyBidXQgdGhlIG92ZXJsYXBwaW5nIHBpZWNlcyBvZiB0aGUgcGF0aC4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUsIGlmIHRoZSB0d28gcGF0aHMgYXJlIG92ZXJsYXBwaW5nIGNpcmNsZXMgb2YgZXF1YWwgZGlhbWV0ZXIKICAvLy8gYnV0IGRpZmZlcmluZyBjZW50ZXJzLCB0aGUgZmlndXJlLWVpZ2h0IGxpa2Ugc2hhcGUgbGVzcyB0aGUgb3ZlcmxhcHBpbmcgcGFydHMKICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vICAqIFtpbnRlcnNlY3RdLCB3aGljaCBpcyB0aGUgaW52ZXJzZSBvZiB0aGlzIG9wZXJhdGlvbgogIHhvciwKICAvLy8gU3VidHJhY3QgdGhlIGZpcnN0IHBhdGggZnJvbSB0aGUgc2Vjb25kIHBhdGguCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCBpZiB0aGUgdHdvIHBhdGhzIGFyZSBvdmVybGFwcGluZyBjaXJjbGVzIG9mIGVxdWFsIGRpYW1ldGVyCiAgLy8vIGJ1dCBkaWZmZXJpbmcgY2VudGVycywgdGhlIHJlc3VsdCB3b3VsZCBiZSBhIGNyZXNjZW50IHBvcnRpb24gb2YgdGhlCiAgLy8vIHNlY29uZCBjaXJjbGUgdGhhdCB3YXMgbm90IG92ZXJsYXBwZWQgYnkgdGhlIGZpcnN0IGNpcmNsZS4KICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICAqIFtkaWZmZXJlbmNlXSwgd2hpY2ggaXMgdGhlIHNhbWUgYnV0IHN1YnRyYWN0aW5nIHRoZSBzZWNvbmQgcGF0aAogIC8vLyAgICBmcm9tIHRoZSBmaXJzdC4KICByZXZlcnNlRGlmZmVyZW5jZSwKfQoKLy8vIEEgaGFuZGxlIGZvciB0aGUgZnJhbWV3b3JrIHRvIGhvbGQgYW5kIHJldGFpbiBhbiBlbmdpbmUgbGF5ZXIgYWNyb3NzIGZyYW1lcy4KQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQpjbGFzcyBFbmdpbmVMYXllciBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMiB7CiAgLy8vIFRoaXMgY2xhc3MgaXMgY3JlYXRlZCBieSB0aGUgZW5naW5lLCBhbmQgc2hvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQKICAvLy8gb3IgZXh0ZW5kZWQgZGlyZWN0bHkuCiAgQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQogIEVuZ2luZUxheWVyLl8oKTsKfQoKLy8vIEEgY29tcGxleCwgb25lLWRpbWVuc2lvbmFsIHN1YnNldCBvZiBhIHBsYW5lLgovLy8KLy8vIEEgcGF0aCBjb25zaXN0cyBvZiBhIG51bWJlciBvZiBzdWItcGF0aHMsIGFuZCBhIF9jdXJyZW50IHBvaW50Xy4KLy8vCi8vLyBTdWItcGF0aHMgY29uc2lzdCBvZiBzZWdtZW50cyBvZiB2YXJpb3VzIHR5cGVzLCBzdWNoIGFzIGxpbmVzLAovLy8gYXJjcywgb3IgYmV6aWVycy4gU3ViLXBhdGhzIGNhbiBiZSBvcGVuIG9yIGNsb3NlZCwgYW5kIGNhbgovLy8gc2VsZi1pbnRlcnNlY3QuCi8vLwovLy8gQ2xvc2VkIHN1Yi1wYXRocyBlbmNsb3NlIGEgKHBvc3NpYmx5IGRpc2NvbnRpZ3VvdXMpIHJlZ2lvbiBvZiB0aGUKLy8vIHBsYW5lIGJhc2VkIG9uIHRoZSBjdXJyZW50IFtmaWxsVHlwZV0uCi8vLwovLy8gVGhlIF9jdXJyZW50IHBvaW50XyBpcyBpbml0aWFsbHkgYXQgdGhlIG9yaWdpbi4gQWZ0ZXIgZWFjaAovLy8gb3BlcmF0aW9uIGFkZGluZyBhIHNlZ21lbnQgdG8gYSBzdWItcGF0aCwgdGhlIGN1cnJlbnQgcG9pbnQgaXMKLy8vIHVwZGF0ZWQgdG8gdGhlIGVuZCBvZiB0aGF0IHNlZ21lbnQuCi8vLwovLy8gUGF0aHMgY2FuIGJlIGRyYXduIG9uIGNhbnZhc2VzIHVzaW5nIFtDYW52YXMuZHJhd1BhdGhdLCBhbmQgY2FuCi8vLyB1c2VkIHRvIGNyZWF0ZSBjbGlwIHJlZ2lvbnMgdXNpbmcgW0NhbnZhcy5jbGlwUGF0aF0uCkBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKY2xhc3MgUGF0aCBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMiB7CiAgLy8vIENyZWF0ZSBhIG5ldyBlbXB0eSBbUGF0aF0gb2JqZWN0LgogIEBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKICBQYXRoKCkgeyBfY29uc3RydWN0b3IoKTsgfQogIHZvaWQgX2NvbnN0cnVjdG9yKCkgbmF0aXZlICdQYXRoX2NvbnN0cnVjdG9yJzsKCiAgLy8vIENyZWF0ZXMgYSBjb3B5IG9mIGFub3RoZXIgW1BhdGhdLgogIC8vLwogIC8vLyBUaGlzIGNvcHkgaXMgZmFzdCBhbmQgZG9lcyBub3QgcmVxdWlyZSBhZGRpdGlvbmFsIG1lbW9yeSB1bmxlc3MgZWl0aGVyCiAgLy8vIHRoZSBgc291cmNlYCBwYXRoIG9yIHRoZSBwYXRoIHJldHVybmVkIGJ5IHRoaXMgY29uc3RydWN0b3IgYXJlIG1vZGlmaWVkLgogIGZhY3RvcnkgUGF0aC5mcm9tKFBhdGggc291cmNlKSB7CiAgICByZXR1cm4gc291cmNlLl9jbG9uZSgpOwogIH0KICBQYXRoIF9jbG9uZSgpIG5hdGl2ZSAnUGF0aF9jbG9uZSc7CgogIC8vLyBEZXRlcm1pbmVzIGhvdyB0aGUgaW50ZXJpb3Igb2YgdGhpcyBwYXRoIGlzIGNhbGN1bGF0ZWQuCiAgLy8vCiAgLy8vIERlZmF1bHRzIHRvIHRoZSBub24temVybyB3aW5kaW5nIHJ1bGUsIFtQYXRoRmlsbFR5cGUubm9uWmVyb10uCiAgUGF0aEZpbGxUeXBlIGdldCBmaWxsVHlwZSA9PiBQYXRoRmlsbFR5cGUudmFsdWVzW19nZXRGaWxsVHlwZSgpXTsKICBzZXQgZmlsbFR5cGUoUGF0aEZpbGxUeXBlIHZhbHVlKSA9PiBfc2V0RmlsbFR5cGUodmFsdWUuaW5kZXgpOwoKICBpbnQgX2dldEZpbGxUeXBlKCkgbmF0aXZlICdQYXRoX2dldEZpbGxUeXBlJzsKICB2b2lkIF9zZXRGaWxsVHlwZShpbnQgZmlsbFR5cGUpIG5hdGl2ZSAnUGF0aF9zZXRGaWxsVHlwZSc7CgogIC8vLyBTdGFydHMgYSBuZXcgc3ViLXBhdGggYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGUuCiAgdm9pZCBtb3ZlVG8oZG91YmxlIHgsIGRvdWJsZSB5KSBuYXRpdmUgJ1BhdGhfbW92ZVRvJzsKCiAgLy8vIFN0YXJ0cyBhIG5ldyBzdWItcGF0aCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGZyb20gdGhlIGN1cnJlbnQgcG9pbnQuCiAgdm9pZCByZWxhdGl2ZU1vdmVUbyhkb3VibGUgZHgsIGRvdWJsZSBkeSkgbmF0aXZlICdQYXRoX3JlbGF0aXZlTW92ZVRvJzsKCiAgLy8vIEFkZHMgYSBzdHJhaWdodCBsaW5lIHNlZ21lbnQgZnJvbSB0aGUgY3VycmVudCBwb2ludCB0byB0aGUgZ2l2ZW4KICAvLy8gcG9pbnQuCiAgdm9pZCBsaW5lVG8oZG91YmxlIHgsIGRvdWJsZSB5KSBuYXRpdmUgJ1BhdGhfbGluZVRvJzsKCiAgLy8vIEFkZHMgYSBzdHJhaWdodCBsaW5lIHNlZ21lbnQgZnJvbSB0aGUgY3VycmVudCBwb2ludCB0byB0aGUgcG9pbnQKICAvLy8gYXQgdGhlIGdpdmVuIG9mZnNldCBmcm9tIHRoZSBjdXJyZW50IHBvaW50LgogIHZvaWQgcmVsYXRpdmVMaW5lVG8oZG91YmxlIGR4LCBkb3VibGUgZHkpIG5hdGl2ZSAnUGF0aF9yZWxhdGl2ZUxpbmVUbyc7CgogIC8vLyBBZGRzIGEgcXVhZHJhdGljIGJlemllciBzZWdtZW50IHRoYXQgY3VydmVzIGZyb20gdGhlIGN1cnJlbnQKICAvLy8gcG9pbnQgdG8gdGhlIGdpdmVuIHBvaW50ICh4Mix5MiksIHVzaW5nIHRoZSBjb250cm9sIHBvaW50CiAgLy8vICh4MSx5MSkuCiAgdm9pZCBxdWFkcmF0aWNCZXppZXJUbyhkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIpIG5hdGl2ZSAnUGF0aF9xdWFkcmF0aWNCZXppZXJUbyc7CgogIC8vLyBBZGRzIGEgcXVhZHJhdGljIGJlemllciBzZWdtZW50IHRoYXQgY3VydmVzIGZyb20gdGhlIGN1cnJlbnQKICAvLy8gcG9pbnQgdG8gdGhlIHBvaW50IGF0IHRoZSBvZmZzZXQgKHgyLHkyKSBmcm9tIHRoZSBjdXJyZW50IHBvaW50LAogIC8vLyB1c2luZyB0aGUgY29udHJvbCBwb2ludCBhdCB0aGUgb2Zmc2V0ICh4MSx5MSkgZnJvbSB0aGUgY3VycmVudAogIC8vLyBwb2ludC4KICB2b2lkIHJlbGF0aXZlUXVhZHJhdGljQmV6aWVyVG8oZG91YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4MiwgZG91YmxlIHkyKSBuYXRpdmUgJ1BhdGhfcmVsYXRpdmVRdWFkcmF0aWNCZXppZXJUbyc7CgogIC8vLyBBZGRzIGEgY3ViaWMgYmV6aWVyIHNlZ21lbnQgdGhhdCBjdXJ2ZXMgZnJvbSB0aGUgY3VycmVudCBwb2ludAogIC8vLyB0byB0aGUgZ2l2ZW4gcG9pbnQgKHgzLHkzKSwgdXNpbmcgdGhlIGNvbnRyb2wgcG9pbnRzICh4MSx5MSkgYW5kCiAgLy8vICh4Mix5MikuCiAgdm9pZCBjdWJpY1RvKGRvdWJsZSB4MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5MiwgZG91YmxlIHgzLCBkb3VibGUgeTMpIG5hdGl2ZSAnUGF0aF9jdWJpY1RvJzsKCiAgLy8vIEFkZHMgYSBjdWJpYyBiZXppZXIgc2VnbWVudCB0aGF0IGN1cnZlcyBmcm9tIHRoZSBjdXJyZW50IHBvaW50CiAgLy8vIHRvIHRoZSBwb2ludCBhdCB0aGUgb2Zmc2V0ICh4Myx5MykgZnJvbSB0aGUgY3VycmVudCBwb2ludCwgdXNpbmcKICAvLy8gdGhlIGNvbnRyb2wgcG9pbnRzIGF0IHRoZSBvZmZzZXRzICh4MSx5MSkgYW5kICh4Mix5MikgZnJvbSB0aGUKICAvLy8gY3VycmVudCBwb2ludC4KICB2b2lkIHJlbGF0aXZlQ3ViaWNUbyhkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIsIGRvdWJsZSB4MywgZG91YmxlIHkzKSBuYXRpdmUgJ1BhdGhfcmVsYXRpdmVDdWJpY1RvJzsKCiAgLy8vIEFkZHMgYSBiZXppZXIgc2VnbWVudCB0aGF0IGN1cnZlcyBmcm9tIHRoZSBjdXJyZW50IHBvaW50IHRvIHRoZQogIC8vLyBnaXZlbiBwb2ludCAoeDIseTIpLCB1c2luZyB0aGUgY29udHJvbCBwb2ludHMgKHgxLHkxKSBhbmQgdGhlCiAgLy8vIHdlaWdodCB3LiBJZiB0aGUgd2VpZ2h0IGlzIGdyZWF0ZXIgdGhhbiAxLCB0aGVuIHRoZSBjdXJ2ZSBpcyBhCiAgLy8vIGh5cGVyYm9sYTsgaWYgdGhlIHdlaWdodCBlcXVhbHMgMSwgaXQncyBhIHBhcmFib2xhOyBhbmQgaWYgaXQgaXMKICAvLy8gbGVzcyB0aGFuIDEsIGl0IGlzIGFuIGVsbGlwc2UuCiAgdm9pZCBjb25pY1RvKGRvdWJsZSB4MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5MiwgZG91YmxlIHcpIG5hdGl2ZSAnUGF0aF9jb25pY1RvJzsKCiAgLy8vIEFkZHMgYSBiZXppZXIgc2VnbWVudCB0aGF0IGN1cnZlcyBmcm9tIHRoZSBjdXJyZW50IHBvaW50IHRvIHRoZQogIC8vLyBwb2ludCBhdCB0aGUgb2Zmc2V0ICh4Mix5MikgZnJvbSB0aGUgY3VycmVudCBwb2ludCwgdXNpbmcgdGhlCiAgLy8vIGNvbnRyb2wgcG9pbnQgYXQgdGhlIG9mZnNldCAoeDEseTEpIGZyb20gdGhlIGN1cnJlbnQgcG9pbnQgYW5kCiAgLy8vIHRoZSB3ZWlnaHQgdy4gSWYgdGhlIHdlaWdodCBpcyBncmVhdGVyIHRoYW4gMSwgdGhlbiB0aGUgY3VydmUgaXMKICAvLy8gYSBoeXBlcmJvbGE7IGlmIHRoZSB3ZWlnaHQgZXF1YWxzIDEsIGl0J3MgYSBwYXJhYm9sYTsgYW5kIGlmIGl0CiAgLy8vIGlzIGxlc3MgdGhhbiAxLCBpdCBpcyBhbiBlbGxpcHNlLgogIHZvaWQgcmVsYXRpdmVDb25pY1RvKGRvdWJsZSB4MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5MiwgZG91YmxlIHcpIG5hdGl2ZSAnUGF0aF9yZWxhdGl2ZUNvbmljVG8nOwoKICAvLy8gSWYgdGhlIGBmb3JjZU1vdmVUb2AgYXJndW1lbnQgaXMgZmFsc2UsIGFkZHMgYSBzdHJhaWdodCBsaW5lCiAgLy8vIHNlZ21lbnQgYW5kIGFuIGFyYyBzZWdtZW50LgogIC8vLwogIC8vLyBJZiB0aGUgYGZvcmNlTW92ZVRvYCBhcmd1bWVudCBpcyB0cnVlLCBzdGFydHMgYSBuZXcgc3ViLXBhdGgKICAvLy8gY29uc2lzdGluZyBvZiBhbiBhcmMgc2VnbWVudC4KICAvLy8KICAvLy8gSW4gZWl0aGVyIGNhc2UsIHRoZSBhcmMgc2VnbWVudCBjb25zaXN0cyBvZiB0aGUgYXJjIHRoYXQgZm9sbG93cwogIC8vLyB0aGUgZWRnZSBvZiB0aGUgb3ZhbCBib3VuZGVkIGJ5IHRoZSBnaXZlbiByZWN0YW5nbGUsIGZyb20KICAvLy8gc3RhcnRBbmdsZSByYWRpYW5zIGFyb3VuZCB0aGUgb3ZhbCB1cCB0byBzdGFydEFuZ2xlICsgc3dlZXBBbmdsZQogIC8vLyByYWRpYW5zIGFyb3VuZCB0aGUgb3ZhbCwgd2l0aCB6ZXJvIHJhZGlhbnMgYmVpbmcgdGhlIHBvaW50IG9uCiAgLy8vIHRoZSByaWdodCBoYW5kIHNpZGUgb2YgdGhlIG92YWwgdGhhdCBjcm9zc2VzIHRoZSBob3Jpem9udGFsIGxpbmUKICAvLy8gdGhhdCBpbnRlcnNlY3RzIHRoZSBjZW50ZXIgb2YgdGhlIHJlY3RhbmdsZSBhbmQgd2l0aCBwb3NpdGl2ZQogIC8vLyBhbmdsZXMgZ29pbmcgY2xvY2t3aXNlIGFyb3VuZCB0aGUgb3ZhbC4KICAvLy8KICAvLy8gVGhlIGxpbmUgc2VnbWVudCBhZGRlZCBpZiBgZm9yY2VNb3ZlVG9gIGlzIGZhbHNlIHN0YXJ0cyBhdCB0aGUKICAvLy8gY3VycmVudCBwb2ludCBhbmQgZW5kcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGFyYy4KICB2b2lkIGFyY1RvKFJlY3QgcmVjdCwgZG91YmxlIHN0YXJ0QW5nbGUsIGRvdWJsZSBzd2VlcEFuZ2xlLCBib29sIGZvcmNlTW92ZVRvKSB7CiAgICBhc3NlcnQoX3JlY3RJc1ZhbGlkKHJlY3QpKTsKICAgIF9hcmNUbyhyZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSwgc3RhcnRBbmdsZSwgc3dlZXBBbmdsZSwgZm9yY2VNb3ZlVG8pOwogIH0KICB2b2lkIF9hcmNUbyhkb3VibGUgbGVmdCwgZG91YmxlIHRvcCwgZG91YmxlIHJpZ2h0LCBkb3VibGUgYm90dG9tLAogICAgICAgICAgICAgIGRvdWJsZSBzdGFydEFuZ2xlLCBkb3VibGUgc3dlZXBBbmdsZSwgYm9vbCBmb3JjZU1vdmVUbykgbmF0aXZlICdQYXRoX2FyY1RvJzsKCiAgLy8vIEFwcGVuZHMgdXAgdG8gZm91ciBjb25pYyBjdXJ2ZXMgd2VpZ2h0ZWQgdG8gZGVzY3JpYmUgYW4gb3ZhbCBvZiBgcmFkaXVzYAogIC8vLyBhbmQgcm90YXRlZCBieSBgcm90YXRpb25gLgogIC8vLwogIC8vLyBUaGUgZmlyc3QgY3VydmUgYmVnaW5zIGZyb20gdGhlIGxhc3QgcG9pbnQgaW4gdGhlIHBhdGggYW5kIHRoZSBsYXN0IGVuZHMKICAvLy8gYXQgYGFyY0VuZGAuIFRoZSBjdXJ2ZXMgZm9sbG93IGEgcGF0aCBpbiBhIGRpcmVjdGlvbiBkZXRlcm1pbmVkIGJ5CiAgLy8vIGBjbG9ja3dpc2VgIGFuZCBgbGFyZ2VBcmNgIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUgc3dlZXAgYW5nbGUKICAvLy8gaXMgYWx3YXlzIGxlc3MgdGhhbiAzNjAgZGVncmVlcy4KICAvLy8KICAvLy8gQSBzaW1wbGUgbGluZSBpcyBhcHBlbmRlZCBpZiBlaXRoZXIgZWl0aGVyIHJhZGlpIGFyZSB6ZXJvIG9yIHRoZSBsYXN0CiAgLy8vIHBvaW50IGluIHRoZSBwYXRoIGlzIGBhcmNFbmRgLiBUaGUgcmFkaWkgYXJlIHNjYWxlZCB0byBmaXQgdGhlIGxhc3QgcGF0aAogIC8vLyBwb2ludCBpZiBib3RoIGFyZSBncmVhdGVyIHRoYW4gemVybyBidXQgdG9vIHNtYWxsIHRvIGRlc2NyaWJlIGFuIGFyYy4KICAvLy8KICB2b2lkIGFyY1RvUG9pbnQoT2Zmc2V0IGFyY0VuZCwgewogICAgUmFkaXVzIHJhZGl1cyA9IFJhZGl1cy56ZXJvLAogICAgZG91YmxlIHJvdGF0aW9uID0gMC4wLAogICAgYm9vbCBsYXJnZUFyYyA9IGZhbHNlLAogICAgYm9vbCBjbG9ja3dpc2UgPSB0cnVlLAogICAgfSkgewogICAgYXNzZXJ0KF9vZmZzZXRJc1ZhbGlkKGFyY0VuZCkpOwogICAgYXNzZXJ0KF9yYWRpdXNJc1ZhbGlkKHJhZGl1cykpOwogICAgX2FyY1RvUG9pbnQoYXJjRW5kLmR4LCBhcmNFbmQuZHksIHJhZGl1cy54LCByYWRpdXMueSwgcm90YXRpb24sCiAgICAgICAgICAgICAgICBsYXJnZUFyYywgY2xvY2t3aXNlKTsKICB9CiAgdm9pZCBfYXJjVG9Qb2ludChkb3VibGUgYXJjRW5kWCwgZG91YmxlIGFyY0VuZFksIGRvdWJsZSByYWRpdXNYLAogICAgICAgICAgICAgICAgICAgZG91YmxlIHJhZGl1c1ksIGRvdWJsZSByb3RhdGlvbiwgYm9vbCBsYXJnZUFyYywKICAgICAgICAgICAgICAgICAgIGJvb2wgY2xvY2t3aXNlKSBuYXRpdmUgJ1BhdGhfYXJjVG9Qb2ludCc7CgoKICAvLy8gQXBwZW5kcyB1cCB0byBmb3VyIGNvbmljIGN1cnZlcyB3ZWlnaHRlZCB0byBkZXNjcmliZSBhbiBvdmFsIG9mIGByYWRpdXNgCiAgLy8vIGFuZCByb3RhdGVkIGJ5IGByb3RhdGlvbmAuCiAgLy8vCiAgLy8vIFRoZSBsYXN0IHBhdGggcG9pbnQgaXMgZGVzY3JpYmVkIGJ5IChweCwgcHkpLgogIC8vLwogIC8vLyBUaGUgZmlyc3QgY3VydmUgYmVnaW5zIGZyb20gdGhlIGxhc3QgcG9pbnQgaW4gdGhlIHBhdGggYW5kIHRoZSBsYXN0IGVuZHMKICAvLy8gYXQgYGFyY0VuZERlbHRhLmR4ICsgcHhgIGFuZCBgYXJjRW5kRGVsdGEuZHkgKyBweWAuIFRoZSBjdXJ2ZXMgZm9sbG93IGEKICAvLy8gcGF0aCBpbiBhIGRpcmVjdGlvbiBkZXRlcm1pbmVkIGJ5IGBjbG9ja3dpc2VgIGFuZCBgbGFyZ2VBcmNgCiAgLy8vIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUgc3dlZXAgYW5nbGUgaXMgYWx3YXlzIGxlc3MgdGhhbiAzNjAgZGVncmVlcy4KICAvLy8KICAvLy8gQSBzaW1wbGUgbGluZSBpcyBhcHBlbmRlZCBpZiBlaXRoZXIgZWl0aGVyIHJhZGlpIGFyZSB6ZXJvLCBvciwgYm90aAogIC8vLyBgYXJjRW5kRGVsdGEuZHhgIGFuZCBgYXJjRW5kRGVsdGEuZHlgIGFyZSB6ZXJvLiBUaGUgcmFkaWkgYXJlIHNjYWxlZCB0bwogIC8vLyBmaXQgdGhlIGxhc3QgcGF0aCBwb2ludCBpZiBib3RoIGFyZSBncmVhdGVyIHRoYW4gemVybyBidXQgdG9vIHNtYWxsIHRvCiAgLy8vIGRlc2NyaWJlIGFuIGFyYy4KICB2b2lkIHJlbGF0aXZlQXJjVG9Qb2ludChPZmZzZXQgYXJjRW5kRGVsdGEsIHsKICAgIFJhZGl1cyByYWRpdXMgPSBSYWRpdXMuemVybywKICAgIGRvdWJsZSByb3RhdGlvbiA9IDAuMCwKICAgIGJvb2wgbGFyZ2VBcmMgPSBmYWxzZSwKICAgIGJvb2wgY2xvY2t3aXNlID0gdHJ1ZSwKICAgIH0pIHsKICAgIGFzc2VydChfb2Zmc2V0SXNWYWxpZChhcmNFbmREZWx0YSkpOwogICAgYXNzZXJ0KF9yYWRpdXNJc1ZhbGlkKHJhZGl1cykpOwogICAgX3JlbGF0aXZlQXJjVG9Qb2ludChhcmNFbmREZWx0YS5keCwgYXJjRW5kRGVsdGEuZHksIHJhZGl1cy54LCByYWRpdXMueSwKICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb24sIGxhcmdlQXJjLCBjbG9ja3dpc2UpOwogIH0KICB2b2lkIF9yZWxhdGl2ZUFyY1RvUG9pbnQoZG91YmxlIGFyY0VuZFgsIGRvdWJsZSBhcmNFbmRZLCBkb3VibGUgcmFkaXVzWCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHJhZGl1c1ksIGRvdWJsZSByb3RhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBsYXJnZUFyYywgYm9vbCBjbG9ja3dpc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZSAnUGF0aF9yZWxhdGl2ZUFyY1RvUG9pbnQnOwoKICAvLy8gQWRkcyBhIG5ldyBzdWItcGF0aCB0aGF0IGNvbnNpc3RzIG9mIGZvdXIgbGluZXMgdGhhdCBvdXRsaW5lIHRoZQogIC8vLyBnaXZlbiByZWN0YW5nbGUuCiAgdm9pZCBhZGRSZWN0KFJlY3QgcmVjdCkgewogICAgYXNzZXJ0KF9yZWN0SXNWYWxpZChyZWN0KSk7CiAgICBfYWRkUmVjdChyZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSk7CiAgfQogIHZvaWQgX2FkZFJlY3QoZG91YmxlIGxlZnQsIGRvdWJsZSB0b3AsIGRvdWJsZSByaWdodCwgZG91YmxlIGJvdHRvbSkgbmF0aXZlICdQYXRoX2FkZFJlY3QnOwoKICAvLy8gQWRkcyBhIG5ldyBzdWItcGF0aCB0aGF0IGNvbnNpc3RzIG9mIGEgY3VydmUgdGhhdCBmb3JtcyB0aGUKICAvLy8gZWxsaXBzZSB0aGF0IGZpbGxzIHRoZSBnaXZlbiByZWN0YW5nbGUuCiAgLy8vCiAgLy8vIFRvIGFkZCBhIGNpcmNsZSwgcGFzcyBhbiBhcHByb3ByaWF0ZSByZWN0YW5nbGUgYXMgYG92YWxgLiBbUmVjdC5mcm9tQ2lyY2xlXQogIC8vLyBjYW4gYmUgdXNlZCB0byBlYXNpbHkgZGVzY3JpYmUgdGhlIGNpcmNsZSdzIGNlbnRlciBbT2Zmc2V0XSBhbmQgcmFkaXVzLgogIHZvaWQgYWRkT3ZhbChSZWN0IG92YWwpIHsKICAgIGFzc2VydChfcmVjdElzVmFsaWQob3ZhbCkpOwogICAgX2FkZE92YWwob3ZhbC5sZWZ0LCBvdmFsLnRvcCwgb3ZhbC5yaWdodCwgb3ZhbC5ib3R0b20pOwogIH0KICB2b2lkIF9hZGRPdmFsKGRvdWJsZSBsZWZ0LCBkb3VibGUgdG9wLCBkb3VibGUgcmlnaHQsIGRvdWJsZSBib3R0b20pIG5hdGl2ZSAnUGF0aF9hZGRPdmFsJzsKCiAgLy8vIEFkZHMgYSBuZXcgc3ViLXBhdGggd2l0aCBvbmUgYXJjIHNlZ21lbnQgdGhhdCBjb25zaXN0cyBvZiB0aGUgYXJjCiAgLy8vIHRoYXQgZm9sbG93cyB0aGUgZWRnZSBvZiB0aGUgb3ZhbCBib3VuZGVkIGJ5IHRoZSBnaXZlbgogIC8vLyByZWN0YW5nbGUsIGZyb20gc3RhcnRBbmdsZSByYWRpYW5zIGFyb3VuZCB0aGUgb3ZhbCB1cCB0bwogIC8vLyBzdGFydEFuZ2xlICsgc3dlZXBBbmdsZSByYWRpYW5zIGFyb3VuZCB0aGUgb3ZhbCwgd2l0aCB6ZXJvCiAgLy8vIHJhZGlhbnMgYmVpbmcgdGhlIHBvaW50IG9uIHRoZSByaWdodCBoYW5kIHNpZGUgb2YgdGhlIG92YWwgdGhhdAogIC8vLyBjcm9zc2VzIHRoZSBob3Jpem9udGFsIGxpbmUgdGhhdCBpbnRlcnNlY3RzIHRoZSBjZW50ZXIgb2YgdGhlCiAgLy8vIHJlY3RhbmdsZSBhbmQgd2l0aCBwb3NpdGl2ZSBhbmdsZXMgZ29pbmcgY2xvY2t3aXNlIGFyb3VuZCB0aGUKICAvLy8gb3ZhbC4KICB2b2lkIGFkZEFyYyhSZWN0IG92YWwsIGRvdWJsZSBzdGFydEFuZ2xlLCBkb3VibGUgc3dlZXBBbmdsZSkgewogICAgYXNzZXJ0KF9yZWN0SXNWYWxpZChvdmFsKSk7CiAgICBfYWRkQXJjKG92YWwubGVmdCwgb3ZhbC50b3AsIG92YWwucmlnaHQsIG92YWwuYm90dG9tLCBzdGFydEFuZ2xlLCBzd2VlcEFuZ2xlKTsKICB9CiAgdm9pZCBfYWRkQXJjKGRvdWJsZSBsZWZ0LCBkb3VibGUgdG9wLCBkb3VibGUgcmlnaHQsIGRvdWJsZSBib3R0b20sCiAgICAgICAgICAgICAgIGRvdWJsZSBzdGFydEFuZ2xlLCBkb3VibGUgc3dlZXBBbmdsZSkgbmF0aXZlICdQYXRoX2FkZEFyYyc7CgogIC8vLyBBZGRzIGEgbmV3IHN1Yi1wYXRoIHdpdGggYSBzZXF1ZW5jZSBvZiBsaW5lIHNlZ21lbnRzIHRoYXQgY29ubmVjdCB0aGUgZ2l2ZW4KICAvLy8gcG9pbnRzLgogIC8vLwogIC8vLyBJZiBgY2xvc2VgIGlzIHRydWUsIGEgZmluYWwgbGluZSBzZWdtZW50IHdpbGwgYmUgYWRkZWQgdGhhdCBjb25uZWN0cyB0aGUKICAvLy8gbGFzdCBwb2ludCB0byB0aGUgZmlyc3QgcG9pbnQuCiAgLy8vCiAgLy8vIFRoZSBgcG9pbnRzYCBhcmd1bWVudCBpcyBpbnRlcnByZXRlZCBhcyBvZmZzZXRzIGZyb20gdGhlIG9yaWdpbi4KICB2b2lkIGFkZFBvbHlnb24oTGlzdDxPZmZzZXQ+IHBvaW50cywgYm9vbCBjbG9zZSkgewogICAgYXNzZXJ0KHBvaW50cyAhPSBudWxsKTsKICAgIF9hZGRQb2x5Z29uKF9lbmNvZGVQb2ludExpc3QocG9pbnRzKSwgY2xvc2UpOwogIH0KICB2b2lkIF9hZGRQb2x5Z29uKEZsb2F0MzJMaXN0IHBvaW50cywgYm9vbCBjbG9zZSkgbmF0aXZlICdQYXRoX2FkZFBvbHlnb24nOwoKICAvLy8gQWRkcyBhIG5ldyBzdWItcGF0aCB0aGF0IGNvbnNpc3RzIG9mIHRoZSBzdHJhaWdodCBsaW5lcyBhbmQKICAvLy8gY3VydmVzIG5lZWRlZCB0byBmb3JtIHRoZSByb3VuZGVkIHJlY3RhbmdsZSBkZXNjcmliZWQgYnkgdGhlCiAgLy8vIGFyZ3VtZW50LgogIHZvaWQgYWRkUlJlY3QoUlJlY3QgcnJlY3QpIHsKICAgIGFzc2VydChfcnJlY3RJc1ZhbGlkKHJyZWN0KSk7CiAgICBfYWRkUlJlY3QocnJlY3QuX3ZhbHVlMzIpOwogIH0KICB2b2lkIF9hZGRSUmVjdChGbG9hdDMyTGlzdCBycmVjdCkgbmF0aXZlICdQYXRoX2FkZFJSZWN0JzsKCiAgLy8vIEFkZHMgYSBuZXcgc3ViLXBhdGggdGhhdCBjb25zaXN0cyBvZiB0aGUgZ2l2ZW4gYHBhdGhgIG9mZnNldCBieSB0aGUgZ2l2ZW4KICAvLy8gYG9mZnNldGAuCiAgLy8vCiAgLy8vIElmIGBtYXRyaXg0YCBpcyBzcGVjaWZpZWQsIHRoZSBwYXRoIHdpbGwgYmUgdHJhbnNmb3JtZWQgYnkgdGhpcyBtYXRyaXgKICAvLy8gYWZ0ZXIgdGhlIG1hdHJpeCBpcyB0cmFuc2xhdGVkIGJ5IHRoZSBnaXZlbiBvZmZzZXQuIFRoZSBtYXRyaXggaXMgYSA0eDQKICAvLy8gbWF0cml4IHN0b3JlZCBpbiBjb2x1bW4gbWFqb3Igb3JkZXIuCiAgdm9pZCBhZGRQYXRoKFBhdGggcGF0aCwgT2Zmc2V0IG9mZnNldCwge0Zsb2F0NjRMaXN0IG1hdHJpeDR9KSB7CiAgICBhc3NlcnQocGF0aCAhPSBudWxsKTsgLy8gcGF0aCBpcyBjaGVja2VkIG9uIHRoZSBlbmdpbmUgc2lkZQogICAgYXNzZXJ0KF9vZmZzZXRJc1ZhbGlkKG9mZnNldCkpOwogICAgaWYgKG1hdHJpeDQgIT0gbnVsbCkgewogICAgICBhc3NlcnQoX21hdHJpeDRJc1ZhbGlkKG1hdHJpeDQpKTsKICAgICAgX2FkZFBhdGhXaXRoTWF0cml4KHBhdGgsIG9mZnNldC5keCwgb2Zmc2V0LmR5LCBtYXRyaXg0KTsKICAgIH0gZWxzZSB7CiAgICAgIF9hZGRQYXRoKHBhdGgsIG9mZnNldC5keCwgb2Zmc2V0LmR5KTsKICAgIH0KICB9CiAgdm9pZCBfYWRkUGF0aChQYXRoIHBhdGgsIGRvdWJsZSBkeCwgZG91YmxlIGR5KSBuYXRpdmUgJ1BhdGhfYWRkUGF0aCc7CiAgdm9pZCBfYWRkUGF0aFdpdGhNYXRyaXgoUGF0aCBwYXRoLCBkb3VibGUgZHgsIGRvdWJsZSBkeSwgRmxvYXQ2NExpc3QgbWF0cml4KSBuYXRpdmUgJ1BhdGhfYWRkUGF0aFdpdGhNYXRyaXgnOwoKICAvLy8gQWRkcyB0aGUgZ2l2ZW4gcGF0aCB0byB0aGlzIHBhdGggYnkgZXh0ZW5kaW5nIHRoZSBjdXJyZW50IHNlZ21lbnQgb2YgdGhpcwogIC8vLyBwYXRoIHdpdGggdGhlIGZpcnN0IHNlZ21lbnQgb2YgdGhlIGdpdmVuIHBhdGguCiAgLy8vCiAgLy8vIElmIGBtYXRyaXg0YCBpcyBzcGVjaWZpZWQsIHRoZSBwYXRoIHdpbGwgYmUgdHJhbnNmb3JtZWQgYnkgdGhpcyBtYXRyaXgKICAvLy8gYWZ0ZXIgdGhlIG1hdHJpeCBpcyB0cmFuc2xhdGVkIGJ5IHRoZSBnaXZlbiBgb2Zmc2V0YC4gIFRoZSBtYXRyaXggaXMgYSA0eDQKICAvLy8gbWF0cml4IHN0b3JlZCBpbiBjb2x1bW4gbWFqb3Igb3JkZXIuCiAgdm9pZCBleHRlbmRXaXRoUGF0aChQYXRoIHBhdGgsIE9mZnNldCBvZmZzZXQsIHtGbG9hdDY0TGlzdCBtYXRyaXg0fSkgewogICAgYXNzZXJ0KHBhdGggIT0gbnVsbCk7IC8vIHBhdGggaXMgY2hlY2tlZCBvbiB0aGUgZW5naW5lIHNpZGUKICAgIGFzc2VydChfb2Zmc2V0SXNWYWxpZChvZmZzZXQpKTsKICAgIGlmIChtYXRyaXg0ICE9IG51bGwpIHsKICAgICAgYXNzZXJ0KF9tYXRyaXg0SXNWYWxpZChtYXRyaXg0KSk7CiAgICAgIF9leHRlbmRXaXRoUGF0aEFuZE1hdHJpeChwYXRoLCBvZmZzZXQuZHgsIG9mZnNldC5keSwgbWF0cml4NCk7CiAgICB9IGVsc2UgewogICAgICBfZXh0ZW5kV2l0aFBhdGgocGF0aCwgb2Zmc2V0LmR4LCBvZmZzZXQuZHkpOwogICAgfQogIH0KICB2b2lkIF9leHRlbmRXaXRoUGF0aChQYXRoIHBhdGgsIGRvdWJsZSBkeCwgZG91YmxlIGR5KSBuYXRpdmUgJ1BhdGhfZXh0ZW5kV2l0aFBhdGgnOwogIHZvaWQgX2V4dGVuZFdpdGhQYXRoQW5kTWF0cml4KFBhdGggcGF0aCwgZG91YmxlIGR4LCBkb3VibGUgZHksIEZsb2F0NjRMaXN0IG1hdHJpeCkgbmF0aXZlICdQYXRoX2V4dGVuZFdpdGhQYXRoQW5kTWF0cml4JzsKCiAgLy8vIENsb3NlcyB0aGUgbGFzdCBzdWItcGF0aCwgYXMgaWYgYSBzdHJhaWdodCBsaW5lIGhhZCBiZWVuIGRyYXduCiAgLy8vIGZyb20gdGhlIGN1cnJlbnQgcG9pbnQgdG8gdGhlIGZpcnN0IHBvaW50IG9mIHRoZSBzdWItcGF0aC4KICB2b2lkIGNsb3NlKCkgbmF0aXZlICdQYXRoX2Nsb3NlJzsKCiAgLy8vIENsZWFycyB0aGUgW1BhdGhdIG9iamVjdCBvZiBhbGwgc3ViLXBhdGhzLCByZXR1cm5pbmcgaXQgdG8gdGhlCiAgLy8vIHNhbWUgc3RhdGUgaXQgaGFkIHdoZW4gaXQgd2FzIGNyZWF0ZWQuIFRoZSBfY3VycmVudCBwb2ludF8gaXMKICAvLy8gcmVzZXQgdG8gdGhlIG9yaWdpbi4KICB2b2lkIHJlc2V0KCkgbmF0aXZlICdQYXRoX3Jlc2V0JzsKCiAgLy8vIFRlc3RzIHRvIHNlZSBpZiB0aGUgZ2l2ZW4gcG9pbnQgaXMgd2l0aGluIHRoZSBwYXRoLiAoVGhhdCBpcywgd2hldGhlciB0aGUKICAvLy8gcG9pbnQgd291bGQgYmUgaW4gdGhlIHZpc2libGUgcG9ydGlvbiBvZiB0aGUgcGF0aCBpZiB0aGUgcGF0aCB3YXMgdXNlZAogIC8vLyB3aXRoIFtDYW52YXMuY2xpcFBhdGhdLikKICAvLy8KICAvLy8gVGhlIGBwb2ludGAgYXJndW1lbnQgaXMgaW50ZXJwcmV0ZWQgYXMgYW4gb2Zmc2V0IGZyb20gdGhlIG9yaWdpbi4KICAvLy8KICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBwb2ludCBpcyBpbiB0aGUgcGF0aCwgYW5kIGZhbHNlIG90aGVyd2lzZS4KICBib29sIGNvbnRhaW5zKE9mZnNldCBwb2ludCkgewogICAgYXNzZXJ0KF9vZmZzZXRJc1ZhbGlkKHBvaW50KSk7CiAgICByZXR1cm4gX2NvbnRhaW5zKHBvaW50LmR4LCBwb2ludC5keSk7CiAgfQogIGJvb2wgX2NvbnRhaW5zKGRvdWJsZSB4LCBkb3VibGUgeSkgbmF0aXZlICdQYXRoX2NvbnRhaW5zJzsKCiAgLy8vIFJldHVybnMgYSBjb3B5IG9mIHRoZSBwYXRoIHdpdGggYWxsIHRoZSBzZWdtZW50cyBvZiBldmVyeQogIC8vLyBzdWItcGF0aCB0cmFuc2xhdGVkIGJ5IHRoZSBnaXZlbiBvZmZzZXQuCiAgUGF0aCBzaGlmdChPZmZzZXQgb2Zmc2V0KSB7CiAgICBhc3NlcnQoX29mZnNldElzVmFsaWQob2Zmc2V0KSk7CiAgICByZXR1cm4gX3NoaWZ0KG9mZnNldC5keCwgb2Zmc2V0LmR5KTsKICB9CiAgUGF0aCBfc2hpZnQoZG91YmxlIGR4LCBkb3VibGUgZHkpIG5hdGl2ZSAnUGF0aF9zaGlmdCc7CgogIC8vLyBSZXR1cm5zIGEgY29weSBvZiB0aGUgcGF0aCB3aXRoIGFsbCB0aGUgc2VnbWVudHMgb2YgZXZlcnkKICAvLy8gc3ViLXBhdGggdHJhbnNmb3JtZWQgYnkgdGhlIGdpdmVuIG1hdHJpeC4KICBQYXRoIHRyYW5zZm9ybShGbG9hdDY0TGlzdCBtYXRyaXg0KSB7CiAgICBhc3NlcnQoX21hdHJpeDRJc1ZhbGlkKG1hdHJpeDQpKTsKICAgIHJldHVybiBfdHJhbnNmb3JtKG1hdHJpeDQpOwogIH0KICBQYXRoIF90cmFuc2Zvcm0oRmxvYXQ2NExpc3QgbWF0cml4NCkgbmF0aXZlICdQYXRoX3RyYW5zZm9ybSc7CgogIC8vLyBDb21wdXRlcyB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIGZvciB0aGlzIHBhdGguCiAgLy8vCiAgLy8vIEEgcGF0aCBjb250YWluaW5nIG9ubHkgYXhpcy1hbGlnbmVkIHBvaW50cyBvbiB0aGUgc2FtZSBzdHJhaWdodCBsaW5lIHdpbGwKICAvLy8gaGF2ZSBubyBhcmVhLCBhbmQgdGhlcmVmb3JlIGBSZWN0LmlzRW1wdHlgIHdpbGwgcmV0dXJuIHRydWUgZm9yIHN1Y2ggYQogIC8vLyBwYXRoLiBDb25zaWRlciBjaGVja2luZyBgcmVjdC53aWR0aCArIHJlY3QuaGVpZ2h0ID4gMC4wYCBpbnN0ZWFkLCBvcgogIC8vLyB1c2luZyB0aGUgW2NvbXB1dGVNZXRyaWNzXSBBUEkgdG8gY2hlY2sgdGhlIHBhdGggbGVuZ3RoLgogIC8vLwogIC8vLyBGb3IgbWFueSBtb3JlIGVsYWJvcmF0ZSBwYXRocywgdGhlIGJvdW5kcyBtYXkgYmUgaW5hY2N1cmF0ZS4gIEZvciBleGFtcGxlLAogIC8vLyB3aGVuIGEgcGF0aCBjb250YWlucyBhIGNpcmNsZSwgdGhlIHBvaW50cyB1c2VkIHRvIGNvbXB1dGUgdGhlIGJvdW5kcyBhcmUKICAvLy8gdGhlIGNpcmNsZSdzIGltcGxpZWQgY29udHJvbCBwb2ludHMsIHdoaWNoIGZvcm0gYSBzcXVhcmUgYXJvdW5kIHRoZSBjaXJjbGU7CiAgLy8vIGlmIHRoZSBjaXJjbGUgaGFzIGEgdHJhbnNmb3JtYXRpb24gYXBwbGllZCB1c2luZyBbdHJhbnNmb3JtXSB0aGVuIHRoYXQKICAvLy8gc3F1YXJlIGlzIHJvdGF0ZWQsIGFuZCB0aGUgKGF4aXMtYWxpZ25lZCwgbm9uLXJvdGF0ZWQpIGJvdW5kaW5nIGJveAogIC8vLyB0aGVyZWZvcmUgZW5kcyB1cCBncm9zc2x5IG92ZXJlc3RpbWF0aW5nIHRoZSBhY3R1YWwgYXJlYSBjb3ZlcmVkIGJ5IHRoZQogIC8vLyBjaXJjbGUuCiAgLy8gc2VlIGh0dHBzOi8vc2tpYS5vcmcvdXNlci9hcGkvU2tQYXRoX1JlZmVyZW5jZSNTa1BhdGhfZ2V0Qm91bmRzCiAgUmVjdCBnZXRCb3VuZHMoKSB7CiAgICBmaW5hbCBGbG9hdDMyTGlzdCByZWN0ID0gX2dldEJvdW5kcygpOwogICAgcmV0dXJuIFJlY3QuZnJvbUxUUkIocmVjdFswXSwgcmVjdFsxXSwgcmVjdFsyXSwgcmVjdFszXSk7CiAgfQogIEZsb2F0MzJMaXN0IF9nZXRCb3VuZHMoKSBuYXRpdmUgJ1BhdGhfZ2V0Qm91bmRzJzsKCiAgLy8vIENvbWJpbmVzIHRoZSB0d28gcGF0aHMgYWNjb3JkaW5nIHRvIHRoZSBtYW5uZXIgc3BlY2lmaWVkIGJ5IHRoZSBnaXZlbgogIC8vLyBgb3BlcmF0aW9uYC4KICAvLy8KICAvLy8gVGhlIHJlc3VsdGluZyBwYXRoIHdpbGwgYmUgY29uc3RydWN0ZWQgZnJvbSBub24tb3ZlcmxhcHBpbmcgY29udG91cnMuIFRoZQogIC8vLyBjdXJ2ZSBvcmRlciBpcyByZWR1Y2VkIHdoZXJlIHBvc3NpYmxlIHNvIHRoYXQgY3ViaWNzIG1heSBiZSB0dXJuZWQgaW50bwogIC8vLyBxdWFkcmF0aWNzLCBhbmQgcXVhZHJhdGljcyBtYXliZSB0dXJuZWQgaW50byBsaW5lcy4KICBzdGF0aWMgUGF0aCBjb21iaW5lKFBhdGhPcGVyYXRpb24gb3BlcmF0aW9uLCBQYXRoIHBhdGgxLCBQYXRoIHBhdGgyKSB7CiAgICBhc3NlcnQocGF0aDEgIT0gbnVsbCk7CiAgICBhc3NlcnQocGF0aDIgIT0gbnVsbCk7CiAgICBmaW5hbCBQYXRoIHBhdGggPSBQYXRoKCk7CiAgICBpZiAocGF0aC5fb3AocGF0aDEsIHBhdGgyLCBvcGVyYXRpb24uaW5kZXgpKSB7CiAgICAgIHJldHVybiBwYXRoOwogICAgfQogICAgdGhyb3cgU3RhdGVFcnJvcignUGF0aC5jb21iaW5lKCkgZmFpbGVkLiAgVGhpcyBtYXkgYmUgZHVlIGFuIGludmFsaWQgcGF0aDsgaW4gcGFydGljdWxhciwgY2hlY2sgZm9yIE5hTiB2YWx1ZXMuJyk7CiAgfQogIGJvb2wgX29wKFBhdGggcGF0aDEsIFBhdGggcGF0aDIsIGludCBvcGVyYXRpb24pIG5hdGl2ZSAnUGF0aF9vcCc7CgogIC8vLyBDcmVhdGVzIGEgW1BhdGhNZXRyaWNzXSBvYmplY3QgZm9yIHRoaXMgcGF0aCwgd2hpY2ggY2FuIGRlc2NyaWJlIHZhcmlvdXMKICAvLy8gcHJvcGVydGllcyBhYm91dCB0aGUgY29udG91cnMgb2YgdGhlIHBhdGguCiAgLy8vCiAgLy8vIEEgW1BhdGhdIGlzIG1hZGUgdXAgb2YgemVybyBvciBtb3JlIGNvbnRvdXJzLiBBIGNvbnRvdXIgaXMgbWFkZSB1cCBvZgogIC8vLyBjb25uZWN0ZWQgY3VydmVzIGFuZCBzZWdtZW50cywgY3JlYXRlZCB2aWEgbWV0aG9kcyBsaWtlIFtsaW5lVG9dLAogIC8vLyBbY3ViaWNUb10sIFthcmNUb10sIFtxdWFkcmF0aWNCZXppZXJUb10sIHRoZWlyIHJlbGF0aXZlIGNvdW50ZXJwYXJ0cywgYXMKICAvLy8gd2VsbCBhcyB0aGUgYWRkKiBtZXRob2RzIHN1Y2ggYXMgW2FkZFJlY3RdLiBDcmVhdGluZyBhIG5ldyBbUGF0aF0gc3RhcnRzCiAgLy8vIGEgbmV3IGNvbnRvdXIgb25jZSBpdCBoYXMgYW55IGRyYXdpbmcgaW5zdHJ1Y3Rpb25zLCBhbmQgYW5vdGhlciBuZXcKICAvLy8gY29udG91ciBpcyBzdGFydGVkIGZvciBlYWNoIFttb3ZlVG9dIGluc3RydWN0aW9uLgogIC8vLwogIC8vLyBBIFtQYXRoTWV0cmljXSBvYmplY3QgZGVzY3JpYmVzIHByb3BlcnRpZXMgb2YgYW4gaW5kaXZpZHVhbCBjb250b3VyLAogIC8vLyBzdWNoIGFzIGl0cyBsZW5ndGgsIHdoZXRoZXIgaXQgaXMgY2xvc2VkLCB3aGF0IHRoZSB0YW5nZW50IHZlY3RvciBvZiBhCiAgLy8vIHBhcnRpY3VsYXIgb2Zmc2V0IGFsb25nIHRoZSBwYXRoIGlzLiBJdCBhbHNvIHByb3ZpZGVzIGEgbWV0aG9kIGZvcgogIC8vLyBjcmVhdGluZyBzdWItcGF0aHM6IFtQYXRoTWV0cmljLmV4dHJhY3RQYXRoXS4KICAvLy8KICAvLy8gQ2FsY3VsYXRpbmcgW1BhdGhNZXRyaWNdIG9iamVjdHMgaXMgbm90IHRyaXZpYWwuIFRoZSBbUGF0aE1ldHJpY3NdIG9iamVjdAogIC8vLyByZXR1cm5lZCBieSB0aGlzIG1ldGhvZCBpcyBhIGxhenkgW0l0ZXJhYmxlXSwgbWVhbmluZyBpdCBvbmx5IHBlcmZvcm1zCiAgLy8vIGNhbGN1bGF0aW9ucyB3aGVuIHRoZSBpdGVyYXRvciBpcyBtb3ZlZCB0byB0aGUgbmV4dCBbUGF0aE1ldHJpY10uIENhbGxlcnMKICAvLy8gdGhhdCB3aXNoIHRvIG1lbW9pemUgdGhpcyBpdGVyYWJsZSBjYW4gZWFzaWx5IGRvIHNvIGJ5IHVzaW5nCiAgLy8vIFtJdGVyYWJsZS50b0xpc3RdIG9uIHRoZSByZXN1bHQgb2YgdGhpcyBtZXRob2QuIEluIHBhcnRpY3VsYXIsIGNhbGxlcnMKICAvLy8gbG9va2luZyBmb3IgaW5mb3JtYXRpb24gYWJvdXQgaG93IG1hbnkgY29udG91cnMgYXJlIGluIHRoZSBwYXRoIHNob3VsZAogIC8vLyBlaXRoZXIgc3RvcmUgdGhlIHJlc3VsdCBvZiBgcGF0aC5jb21wdXRlTWV0cmljcygpLmxlbmd0aGAsIG9yIHNob3VsZCB1c2UKICAvLy8gYHBhdGguY29tcHV0ZU1ldHJpY3MoKS50b0xpc3QoKWAgc28gdGhleSBjYW4gcmVwZWF0ZWRseSBjaGVjayB0aGUgbGVuZ3RoLAogIC8vLyBzaW5jZSBjYWxsaW5nIGBJdGVyYWJsZS5sZW5ndGhgIGNhdXNlcyB0cmF2ZXJzYWwgb2YgdGhlIGVudGlyZSBpdGVyYWJsZS4KICAvLy8KICAvLy8gSW4gcGFydGljdWxhciwgY2FsbGVycyBzaG91bGQgYmUgYXdhcmUgdGhhdCBbUGF0aE1ldHJpY3MubGVuZ3RoXSBpcyB0aGUKICAvLy8gbnVtYmVyIG9mIGNvbnRvdXJzLCAqKm5vdCB0aGUgbGVuZ3RoIG9mIHRoZSBwYXRoKiouIFRvIGdldCB0aGUgbGVuZ3RoIG9mCiAgLy8vIGEgY29udG91ciBpbiBhIHBhdGgsIHVzZSBbUGF0aE1ldHJpYy5sZW5ndGhdLgogIC8vLwogIC8vLyBJZiBgZm9yY2VDbG9zZWRgIGlzIHNldCB0byB0cnVlLCB0aGUgY29udG91cnMgb2YgdGhlIHBhdGggd2lsbCBiZSBtZWFzdXJlZAogIC8vLyBhcyBpZiB0aGV5IGhhZCBiZWVuIGNsb3NlZCwgZXZlbiBpZiB0aGV5IHdlcmUgbm90IGV4cGxpY2l0bHkgY2xvc2VkLgogIFBhdGhNZXRyaWNzIGNvbXB1dGVNZXRyaWNzKHtib29sIGZvcmNlQ2xvc2VkID0gZmFsc2V9KSB7CiAgICByZXR1cm4gUGF0aE1ldHJpY3MuXyh0aGlzLCBmb3JjZUNsb3NlZCk7CiAgfQp9CgovLy8gVGhlIGdlb21ldHJpYyBkZXNjcmlwdGlvbiBvZiBhIHRhbmdlbnQ6IHRoZSBhbmdsZSBhdCBhIHBvaW50LgovLy8KLy8vIFNlZSBhbHNvOgovLy8gICogW1BhdGhNZXRyaWMuZ2V0VGFuZ2VudEZvck9mZnNldF0sIHdoaWNoIHJldHVybnMgdGhlIHRhbmdlbnQgb2YgYW4gb2Zmc2V0IGFsb25nIGEgcGF0aC4KY2xhc3MgVGFuZ2VudCB7CiAgLy8vIENyZWF0ZXMgYSBbVGFuZ2VudF0gd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzLgogIC8vLwogIC8vLyBUaGUgYXJndW1lbnRzIG11c3Qgbm90IGJlIG51bGwuCiAgY29uc3QgVGFuZ2VudCh0aGlzLnBvc2l0aW9uLCB0aGlzLnZlY3RvcikKICAgIDogYXNzZXJ0KHBvc2l0aW9uICE9IG51bGwpLAogICAgICBhc3NlcnQodmVjdG9yICE9IG51bGwpOwoKICAvLy8gQ3JlYXRlcyBhIFtUYW5nZW50XSBiYXNlZCBvbiB0aGUgYW5nbGUgcmF0aGVyIHRoYW4gdGhlIHZlY3Rvci4KICAvLy8KICAvLy8gVGhlIFt2ZWN0b3JdIGlzIGNvbXB1dGVkIHRvIGJlIHRoZSB1bml0IHZlY3RvciBhdCB0aGUgZ2l2ZW4gYW5nbGUsIGludGVycHJldGVkCiAgLy8vIGFzIGNsb2Nrd2lzZSByYWRpYW5zIGZyb20gdGhlIHggYXhpcy4KICBmYWN0b3J5IFRhbmdlbnQuZnJvbUFuZ2xlKE9mZnNldCBwb3NpdGlvbiwgZG91YmxlIGFuZ2xlKSB7CiAgICByZXR1cm4gVGFuZ2VudChwb3NpdGlvbiwgT2Zmc2V0KG1hdGguY29zKGFuZ2xlKSwgbWF0aC5zaW4oYW5nbGUpKSk7CiAgfQoKICAvLy8gUG9zaXRpb24gb2YgdGhlIHRhbmdlbnQuCiAgLy8vCiAgLy8vIFdoZW4gdXNlZCB3aXRoIFtQYXRoTWV0cmljLmdldFRhbmdlbnRGb3JPZmZzZXRdLCB0aGlzIHJlcHJlc2VudHMgdGhlIHByZWNpc2UKICAvLy8gcG9zaXRpb24gdGhhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGFsb25nIHRoZSBwYXRoIGNvcnJlc3BvbmRzIHRvLgogIGZpbmFsIE9mZnNldCBwb3NpdGlvbjsKCiAgLy8vIFRoZSB2ZWN0b3Igb2YgdGhlIGN1cnZlIGF0IFtwb3NpdGlvbl0uCiAgLy8vCiAgLy8vIFdoZW4gdXNlZCB3aXRoIFtQYXRoTWV0cmljLmdldFRhbmdlbnRGb3JPZmZzZXRdLCB0aGlzIGlzIHRoZSB2ZWN0b3Igb2YgdGhlCiAgLy8vIGN1cnZlIHRoYXQgaXMgYXQgdGhlIGdpdmVuIG9mZnNldCBhbG9uZyB0aGUgcGF0aCAoaS5lLiB0aGUgZGlyZWN0aW9uIG9mIHRoZQogIC8vLyBjdXJ2ZSBhdCBbcG9zaXRpb25dKS4KICBmaW5hbCBPZmZzZXQgdmVjdG9yOwoKICAvLy8gVGhlIGRpcmVjdGlvbiBvZiB0aGUgY3VydmUgYXQgW3Bvc2l0aW9uXS4KICAvLy8KICAvLy8gV2hlbiB1c2VkIHdpdGggW1BhdGhNZXRyaWMuZ2V0VGFuZ2VudEZvck9mZnNldF0sIHRoaXMgaXMgdGhlIGFuZ2xlIG9mIHRoZQogIC8vLyBjdXJ2ZSB0aGF0IGlzIHRoZSBnaXZlbiBvZmZzZXQgYWxvbmcgdGhlIHBhdGggKGkuZS4gdGhlIGRpcmVjdGlvbiBvZiB0aGUKICAvLy8gY3VydmUgYXQgW3Bvc2l0aW9uXSkuCiAgLy8vCiAgLy8vIFRoaXMgdmFsdWUgaXMgaW4gcmFkaWFucywgd2l0aCAwLjAgbWVhbmluZyBwb2ludGluZyBhbG9uZyB0aGUgeCBheGlzIGluCiAgLy8vIHRoZSBwb3NpdGl2ZSB4LWF4aXMgZGlyZWN0aW9uLCBwb3NpdGl2ZSBudW1iZXJzIHBvaW50aW5nIGRvd253YXJkIHRvd2FyZAogIC8vLyB0aGUgbmVnYXRpdmUgeS1heGlzLCBpLmUuIGluIGEgY2xvY2t3aXNlIGRpcmVjdGlvbiwgYW5kIG5lZ2F0aXZlIG51bWJlcnMKICAvLy8gcG9pbnRpbmcgdXB3YXJkIHRvd2FyZCB0aGUgcG9zaXRpdmUgeS1heGlzLCBpLmUuIGluIGEgY291bnRlci1jbG9ja3dpc2UKICAvLy8gZGlyZWN0aW9uLgogIC8vIGZsaXAgdGhlIHNpZ24gdG8gYmUgY29uc2lzdGVudCB3aXRoIFtQYXRoLmFyY1RvXSdzIGBzd2VlcEFuZ2xlYAogIGRvdWJsZSBnZXQgYW5nbGUgPT4gLW1hdGguYXRhbjIodmVjdG9yLmR5LCB2ZWN0b3IuZHgpOwp9CgovLy8gQW4gaXRlcmFibGUgY29sbGVjdGlvbiBvZiBbUGF0aE1ldHJpY10gb2JqZWN0cyBkZXNjcmliaW5nIGEgW1BhdGhdLgovLy8KLy8vIEEgW1BhdGhNZXRyaWNzXSBvYmplY3QgaXMgY3JlYXRlZCBieSB1c2luZyB0aGUgW1BhdGguY29tcHV0ZU1ldHJpY3NdIG1ldGhvZCwKLy8vIGFuZCByZXByZXNlbnRzIHRoZSBwYXRoIGFzIGl0IHN0b29kIGF0IHRoZSB0aW1lIG9mIHRoZSBjYWxsLiBTdWJzZXF1ZW50Ci8vLyBtb2RpZmljYXRpb25zIG9mIHRoZSBwYXRoIGRvIG5vdCBhZmZlY3QgdGhlIFtQYXRoTWV0cmljc10gb2JqZWN0LgovLy8KLy8vIEVhY2ggcGF0aCBtZXRyaWMgY29ycmVzcG9uZHMgdG8gYSBzZWdtZW50LCBvciBjb250b3VyLCBvZiBhIHBhdGguCi8vLwovLy8gRm9yIGV4YW1wbGUsIGEgcGF0aCBjb25zaXN0aW5nIG9mIGEgW1BhdGgubGluZVRvXSwgYSBbUGF0aC5tb3ZlVG9dLCBhbmQKLy8vIGFub3RoZXIgW1BhdGgubGluZVRvXSB3aWxsIGNvbnRhaW4gdHdvIGNvbnRvdXJzIGFuZCB0aHVzIGJlIHJlcHJlc2VudGVkIGJ5Ci8vLyB0d28gW1BhdGhNZXRyaWNdIG9iamVjdHMuCi8vLwovLy8gVGhpcyBpdGVyYWJsZSBkb2VzIG5vdCBtZW1vaXplLiBDYWxsZXJzIHdobyBuZWVkIHRvIHRyYXZlcnNlIHRoZSBsaXN0Ci8vLyBtdWx0aXBsZSB0aW1lcywgb3Igd2hvIG5lZWQgdG8gcmFuZG9tbHkgYWNjZXNzIGVsZW1lbnRzIG9mIHRoZSBsaXN0LCBzaG91bGQKLy8vIHVzZSBbdG9MaXN0XSBvbiB0aGlzIG9iamVjdC4KY2xhc3MgUGF0aE1ldHJpY3MgZXh0ZW5kcyBjb2xsZWN0aW9uLkl0ZXJhYmxlQmFzZTxQYXRoTWV0cmljPiB7CiAgUGF0aE1ldHJpY3MuXyhQYXRoIHBhdGgsIGJvb2wgZm9yY2VDbG9zZWQpIDoKICAgIF9pdGVyYXRvciA9IFBhdGhNZXRyaWNJdGVyYXRvci5fKF9QYXRoTWVhc3VyZShwYXRoLCBmb3JjZUNsb3NlZCkpOwoKICBmaW5hbCBJdGVyYXRvcjxQYXRoTWV0cmljPiBfaXRlcmF0b3I7CgogIEBvdmVycmlkZQogIEl0ZXJhdG9yPFBhdGhNZXRyaWM+IGdldCBpdGVyYXRvciA9PiBfaXRlcmF0b3I7Cn0KCi8vLyBVc2VkIGJ5IFtQYXRoTWV0cmljc10gdG8gdHJhY2sgaXRlcmF0aW9uIGZyb20gb25lIHNlZ21lbnQgb2YgYSBwYXRoIHRvIHRoZQovLy8gbmV4dCBmb3IgbWVhc3VyZW1lbnQuCmNsYXNzIFBhdGhNZXRyaWNJdGVyYXRvciBpbXBsZW1lbnRzIEl0ZXJhdG9yPFBhdGhNZXRyaWM+IHsKICBQYXRoTWV0cmljSXRlcmF0b3IuXyh0aGlzLl9wYXRoTWVhc3VyZSkgOiBhc3NlcnQoX3BhdGhNZWFzdXJlICE9IG51bGwpOwoKICBQYXRoTWV0cmljIF9wYXRoTWV0cmljOwogIF9QYXRoTWVhc3VyZSBfcGF0aE1lYXN1cmU7CgogIEBvdmVycmlkZQogIFBhdGhNZXRyaWMgZ2V0IGN1cnJlbnQgPT4gX3BhdGhNZXRyaWM7CgogIEBvdmVycmlkZQogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoX3BhdGhNZWFzdXJlLl9uZXh0Q29udG91cigpKSB7CiAgICAgIF9wYXRoTWV0cmljID0gUGF0aE1ldHJpYy5fKF9wYXRoTWVhc3VyZSk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgX3BhdGhNZXRyaWMgPSBudWxsOwogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKLy8vIFV0aWxpdGllcyBmb3IgbWVhc3VyaW5nIGEgW1BhdGhdIGFuZCBleHRyYWN0aW5nIHN1Yi1wYXRocy4KLy8vCi8vLyBJdGVyYXRlIG92ZXIgdGhlIG9iamVjdCByZXR1cm5lZCBieSBbUGF0aC5jb21wdXRlTWV0cmljc10gdG8gb2J0YWluCi8vLyBbUGF0aE1ldHJpY10gb2JqZWN0cy4gQ2FsbGVycyB0aGF0IHdhbnQgdG8gcmFuZG9tbHkgYWNjZXNzIGVsZW1lbnRzIG9yCi8vLyBpdGVyYXRlIG11bHRpcGxlIHRpbWVzIHNob3VsZCB1c2UgYHBhdGguY29tcHV0ZU1ldHJpY3MoKS50b0xpc3QoKWAsIHNpbmNlCi8vLyBbUGF0aE1ldHJpY3NdIGRvZXMgbm90IG1lbW9pemUuCi8vLwovLy8gT25jZSBjcmVhdGVkLCB0aGUgbWV0cmljcyBhcmUgb25seSB2YWxpZCBmb3IgdGhlIHBhdGggYXMgaXQgd2FzIHNwZWNpZmllZAovLy8gd2hlbiBbUGF0aC5jb21wdXRlTWV0cmljc10gd2FzIGNhbGxlZC4gSWYgYWRkaXRpb25hbCBjb250b3VycyBhcmUgYWRkZWQgb3IKLy8vIGFueSBjb250b3VycyBhcmUgdXBkYXRlZCwgdGhlIG1ldHJpY3MgbmVlZCB0byBiZSByZWNvbXB1dGVkLiBQcmV2aW91c2x5Ci8vLyBjcmVhdGVkIG1ldHJpY3Mgd2lsbCBzdGlsbCByZWZlciB0byBhIHNuYXBzaG90IG9mIHRoZSBwYXRoIGF0IHRoZSB0aW1lIHRoZXkKLy8vIHdlcmUgY29tcHV0ZWQsIHJhdGhlciB0aGFuIHRvIHRoZSBhY3R1YWwgbWV0cmljcyBmb3IgdGhlIG5ldyBtdXRhdGlvbnMgdG8KLy8vIHRoZSBwYXRoLgpjbGFzcyBQYXRoTWV0cmljIHsKICBQYXRoTWV0cmljLl8odGhpcy5fbWVhc3VyZSkKICAgIDogYXNzZXJ0KF9tZWFzdXJlICE9IG51bGwpLAogICAgICBsZW5ndGggPSBfbWVhc3VyZS5sZW5ndGgoX21lYXN1cmUuY3VycmVudENvbnRvdXJJbmRleCksCiAgICAgIGlzQ2xvc2VkID0gX21lYXN1cmUuaXNDbG9zZWQoX21lYXN1cmUuY3VycmVudENvbnRvdXJJbmRleCksCiAgICAgIGNvbnRvdXJJbmRleCA9IF9tZWFzdXJlLmN1cnJlbnRDb250b3VySW5kZXg7CgogIC8vLyBSZXR1cm4gdGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgY3VycmVudCBjb250b3VyLgogIGZpbmFsIGRvdWJsZSBsZW5ndGg7CgogIC8vLyBXaGV0aGVyIHRoZSBjb250b3VyIGlzIGNsb3NlZC4KICAvLy8KICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb250b3VyIGVuZHMgd2l0aCBhIGNhbGwgdG8gW1BhdGguY2xvc2VdICh3aGljaCBtYXkKICAvLy8gaGF2ZSBiZWVuIGltcGxpZWQgd2hlbiB1c2luZyBtZXRob2RzIGxpa2UgW1BhdGguYWRkUmVjdF0pIG9yIGlmCiAgLy8vIGBmb3JjZUNsb3NlZGAgd2FzIHNwZWNpZmllZCBhcyB0cnVlIGluIHRoZSBjYWxsIHRvIFtQYXRoLmNvbXB1dGVNZXRyaWNzXS4KICAvLy8gUmV0dXJucyBmYWxzZSBvdGhlcndpc2UuCiAgZmluYWwgYm9vbCBpc0Nsb3NlZDsKCiAgLy8vIFRoZSB6ZXJvLWJhc2VkIGluZGV4IG9mIHRoZSBjb250b3VyLgogIC8vLwogIC8vLyBbUGF0aF0gb2JqZWN0cyBhcmUgbWFkZSB1cCBvZiB6ZXJvIG9yIG1vcmUgY29udG91cnMuIFRoZSBmaXJzdCBjb250b3VyIGlzCiAgLy8vIGNyZWF0ZWQgb25jZSBhIGRyYXdpbmcgY29tbWFuZCAoZS5nLiBbUGF0aC5saW5lVG9dKSBpcyBpc3N1ZWQuIEEKICAvLy8gW1BhdGgubW92ZVRvXSBjb21tYW5kIGFmdGVyIGEgZHJhd2luZyBjb21tYW5kIG1heSBjcmVhdGUgYSBuZXcgY29udG91ciwKICAvLy8gYWx0aG91Z2ggaXQgbWF5IG5vdCBpZiBvcHRpbWl6YXRpb25zIGFyZSBhcHBsaWVkIHRoYXQgZGV0ZXJtaW5lIHRoZSBtb3ZlCiAgLy8vIGNvbW1hbmQgZGlkIG5vdCBhY3R1YWxseSByZXN1bHQgaW4gbW92aW5nIHRoZSBwZW4uCiAgLy8vCiAgLy8vIFRoaXMgcHJvcGVydHkgaXMgb25seSB2YWxpZCB3aXRoIHJlZmVyZW5jZSB0byBpdHMgb3JpZ2luYWwgaXRlcmF0b3IgYW5kCiAgLy8vIHRoZSBjb250b3VycyBvZiB0aGUgcGF0aCBhdCB0aGUgdGltZSB0aGUgcGF0aCdzIG1ldHJpY3Mgd2VyZSBjb21wdXRlZC4gSWYKICAvLy8gYWRkaXRpb25hbCBjb250b3VycyB3ZXJlIGFkZGVkIG9yIGV4aXN0aW5nIGNvbnRvdXJzIHVwZGF0ZWQsIHRoaXMgbWV0cmljCiAgLy8vIHdpbGwgYmUgaW52YWxpZCBmb3IgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHBhdGguCiAgZmluYWwgaW50IGNvbnRvdXJJbmRleDsKCiAgZmluYWwgX1BhdGhNZWFzdXJlIF9tZWFzdXJlOwoKCiAgLy8vIENvbXB1dGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCBjb250b3VyIGF0IHRoZSBnaXZlbiBvZmZzZXQsIGFuZCB0aGUKICAvLy8gYW5nbGUgb2YgdGhlIHBhdGggYXQgdGhhdCBwb2ludC4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUsIGNhbGxpbmcgdGhpcyBtZXRob2Qgd2l0aCBhIGRpc3RhbmNlIG9mIDEuNDEgZm9yIGEgbGluZSBmcm9tCiAgLy8vIDAuMCwwLjAgdG8gMi4wLDIuMCB3b3VsZCBnaXZlIGEgcG9pbnQgMS4wLDEuMCBhbmQgdGhlIGFuZ2xlIDQ1IGRlZ3JlZXMKICAvLy8gKGJ1dCBpbiByYWRpYW5zKS4KICAvLy8KICAvLy8gUmV0dXJucyBudWxsIGlmIHRoZSBjb250b3VyIGhhcyB6ZXJvIFtsZW5ndGhdLgogIC8vLwogIC8vLyBUaGUgZGlzdGFuY2UgaXMgY2xhbXBlZCB0byB0aGUgW2xlbmd0aF0gb2YgdGhlIGN1cnJlbnQgY29udG91ci4KICBUYW5nZW50IGdldFRhbmdlbnRGb3JPZmZzZXQoZG91YmxlIGRpc3RhbmNlKSB7CiAgICByZXR1cm4gX21lYXN1cmUuZ2V0VGFuZ2VudEZvck9mZnNldChjb250b3VySW5kZXgsIGRpc3RhbmNlKTsKICB9CgogIC8vLyBHaXZlbiBhIHN0YXJ0IGFuZCBzdG9wIGRpc3RhbmNlLCByZXR1cm4gdGhlIGludGVydmVuaW5nIHNlZ21lbnQocykuCiAgLy8vCiAgLy8vIGBzdGFydGAgYW5kIGBlbmRgIGFyZSBwaW5uZWQgdG8gbGVnYWwgdmFsdWVzICgwLi5bbGVuZ3RoXSkKICAvLy8gUmV0dXJucyBudWxsIGlmIHRoZSBzZWdtZW50IGlzIDAgbGVuZ3RoIG9yIGBzdGFydGAgPiBgc3RvcGAuCiAgLy8vIEJlZ2luIHRoZSBzZWdtZW50IHdpdGggYSBtb3ZlVG8gaWYgYHN0YXJ0V2l0aE1vdmVUb2AgaXMgdHJ1ZS4KICBQYXRoIGV4dHJhY3RQYXRoKGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwge2Jvb2wgc3RhcnRXaXRoTW92ZVRvID0gdHJ1ZX0pIHsKICAgIHJldHVybiBfbWVhc3VyZS5leHRyYWN0UGF0aChjb250b3VySW5kZXgsIHN0YXJ0LCBlbmQsIHN0YXJ0V2l0aE1vdmVUbzogc3RhcnRXaXRoTW92ZVRvKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICckcnVudGltZVR5cGV7bGVuZ3RoOiAkbGVuZ3RoLCBpc0Nsb3NlZDogJGlzQ2xvc2VkLCBjb250b3VySW5kZXg6JGNvbnRvdXJJbmRleH0nOwp9CgpjbGFzcyBfUGF0aE1lYXN1cmUgZXh0ZW5kcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczIgewogIF9QYXRoTWVhc3VyZShQYXRoIHBhdGgsIGJvb2wgZm9yY2VDbG9zZWQpIHsKICAgIGN1cnJlbnRDb250b3VySW5kZXggPSAtMTsgLy8gbmV4dENvbnRvdXIgd2lsbCBpbmNyZW1lbnQgdGhpcyB0byB0aGUgemVybyBiYXNlZCBpbmRleC4KICAgIF9jb25zdHJ1Y3RvcihwYXRoLCBmb3JjZUNsb3NlZCk7CiAgfQogIHZvaWQgX2NvbnN0cnVjdG9yKFBhdGggcGF0aCwgYm9vbCBmb3JjZUNsb3NlZCkgbmF0aXZlICdQYXRoTWVhc3VyZV9jb25zdHJ1Y3Rvcic7CgogIGRvdWJsZSBsZW5ndGgoaW50IGNvbnRvdXJJbmRleCkgewogICAgYXNzZXJ0KGNvbnRvdXJJbmRleCA8PSBjdXJyZW50Q29udG91ckluZGV4LCAnSXRlcmF0b3IgbXVzdCBiZSBhZHZhbmNlZCBiZWZvcmUgaW5kZXggJGNvbnRvdXJJbmRleCBjYW4gYmUgdXNlZC4nKTsKICAgIHJldHVybiBfbGVuZ3RoKGNvbnRvdXJJbmRleCk7CiAgfQogIGRvdWJsZSBfbGVuZ3RoKGludCBjb250b3VySW5kZXgpIG5hdGl2ZSAnUGF0aE1lYXN1cmVfZ2V0TGVuZ3RoJzsKCiAgVGFuZ2VudCBnZXRUYW5nZW50Rm9yT2Zmc2V0KGludCBjb250b3VySW5kZXgsIGRvdWJsZSBkaXN0YW5jZSkgewogICAgYXNzZXJ0KGNvbnRvdXJJbmRleCA8PSBjdXJyZW50Q29udG91ckluZGV4LCAnSXRlcmF0b3IgbXVzdCBiZSBhZHZhbmNlZCBiZWZvcmUgaW5kZXggJGNvbnRvdXJJbmRleCBjYW4gYmUgdXNlZC4nKTsKICAgIGZpbmFsIEZsb2F0MzJMaXN0IHBvc1RhbiA9IF9nZXRQb3NUYW4oY29udG91ckluZGV4LCBkaXN0YW5jZSk7CiAgICAvLyBmaXJzdCBlbnRyeSA9PSAwIGluZGljYXRlcyB0aGF0IFNraWEgcmV0dXJuZWQgZmFsc2UKICAgIGlmIChwb3NUYW5bMF0gPT0gMC4wKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIFRhbmdlbnQoCiAgICAgICAgT2Zmc2V0KHBvc1RhblsxXSwgcG9zVGFuWzJdKSwKICAgICAgICBPZmZzZXQocG9zVGFuWzNdLCBwb3NUYW5bNF0pCiAgICAgICk7CiAgICB9CiAgfQogIEZsb2F0MzJMaXN0IF9nZXRQb3NUYW4oaW50IGNvbnRvdXJJbmRleCwgZG91YmxlIGRpc3RhbmNlKSBuYXRpdmUgJ1BhdGhNZWFzdXJlX2dldFBvc1Rhbic7CgogIFBhdGggZXh0cmFjdFBhdGgoaW50IGNvbnRvdXJJbmRleCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCB7Ym9vbCBzdGFydFdpdGhNb3ZlVG8gPSB0cnVlfSkgewogICAgYXNzZXJ0KGNvbnRvdXJJbmRleCA8PSBjdXJyZW50Q29udG91ckluZGV4LCAnSXRlcmF0b3IgbXVzdCBiZSBhZHZhbmNlZCBiZWZvcmUgaW5kZXggJGNvbnRvdXJJbmRleCBjYW4gYmUgdXNlZC4nKTsKICAgIHJldHVybiBfZXh0cmFjdFBhdGgoY29udG91ckluZGV4LCBzdGFydCwgZW5kLCBzdGFydFdpdGhNb3ZlVG86IHN0YXJ0V2l0aE1vdmVUbyk7CiAgfQogIFBhdGggX2V4dHJhY3RQYXRoKGludCBjb250b3VySW5kZXgsIGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwge2Jvb2wgc3RhcnRXaXRoTW92ZVRvID0gdHJ1ZX0pIG5hdGl2ZSAnUGF0aE1lYXN1cmVfZ2V0U2VnbWVudCc7CgogIGJvb2wgaXNDbG9zZWQoaW50IGNvbnRvdXJJbmRleCkgewogICAgYXNzZXJ0KGNvbnRvdXJJbmRleCA8PSBjdXJyZW50Q29udG91ckluZGV4LCAnSXRlcmF0b3IgbXVzdCBiZSBhZHZhbmNlZCBiZWZvcmUgaW5kZXggJGNvbnRvdXJJbmRleCBjYW4gYmUgdXNlZC4nKTsKICAgIHJldHVybiBfaXNDbG9zZWQoY29udG91ckluZGV4KTsKICB9CiAgYm9vbCBfaXNDbG9zZWQoaW50IGNvbnRvdXJJbmRleCkgbmF0aXZlICdQYXRoTWVhc3VyZV9pc0Nsb3NlZCc7CgogIC8vIE1vdmUgdG8gdGhlIG5leHQgY29udG91ciBpbiB0aGUgcGF0aC4KICAvLwogIC8vIEEgcGF0aCBjYW4gaGF2ZSBhIG5leHQgY29udG91ciBpZiBbUGF0aC5tb3ZlVG9dIHdhcyBjYWxsZWQgYWZ0ZXIgZHJhd2luZyBiZWdhbi4KICAvLyBSZXR1cm4gdHJ1ZSBpZiBvbmUgZXhpc3RzLCBvciBmYWxzZS4KICBib29sIF9uZXh0Q29udG91cigpIHsKICAgIGZpbmFsIGJvb2wgbmV4dCA9IF9uYXRpdmVOZXh0Q29udG91cigpOwogICAgaWYgKG5leHQpIHsKICAgICAgY3VycmVudENvbnRvdXJJbmRleCsrOwogICAgfQogICAgcmV0dXJuIG5leHQ7CiAgfQogIGJvb2wgX25hdGl2ZU5leHRDb250b3VyKCkgbmF0aXZlICdQYXRoTWVhc3VyZV9uZXh0Q29udG91cic7CgogIGludCBjdXJyZW50Q29udG91ckluZGV4Owp9CgovLy8gU3R5bGVzIHRvIHVzZSBmb3IgYmx1cnMgaW4gW01hc2tGaWx0ZXJdIG9iamVjdHMuCi8vIFRoZXNlIGVudW0gdmFsdWVzIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggU2tCbHVyU3R5bGUuCmVudW0gQmx1clN0eWxlIHsKICAvLyBUaGVzZSBtaXJyb3IgU2tCbHVyU3R5bGUgYW5kIG11c3QgYmUga2VwdCBpbiBzeW5jLgoKICAvLy8gRnV6enkgaW5zaWRlIGFuZCBvdXRzaWRlLiBUaGlzIGlzIHVzZWZ1bCBmb3IgcGFpbnRpbmcgc2hhZG93cyB0aGF0IGFyZQogIC8vLyBvZmZzZXQgZnJvbSB0aGUgc2hhcGUgdGhhdCBvc3RlbnNpYmx5IGlzIGNhc3RpbmcgdGhlIHNoYWRvdy4KICBub3JtYWwsCgogIC8vLyBTb2xpZCBpbnNpZGUsIGZ1enp5IG91dHNpZGUuIFRoaXMgY29ycmVzcG9uZHMgdG8gZHJhd2luZyB0aGUgc2hhcGUsIGFuZAogIC8vLyBhZGRpdGlvbmFsbHkgZHJhd2luZyB0aGUgYmx1ci4gVGhpcyBjYW4gbWFrZSBvYmplY3RzIGFwcGVhciBicmlnaHRlciwKICAvLy8gbWF5YmUgZXZlbiBhcyBpZiB0aGV5IHdlcmUgZmx1b3Jlc2NlbnQuCiAgc29saWQsCgogIC8vLyBOb3RoaW5nIGluc2lkZSwgZnV6enkgb3V0c2lkZS4gVGhpcyBpcyB1c2VmdWwgZm9yIHBhaW50aW5nIHNoYWRvd3MgZm9yCiAgLy8vIHBhcnRpYWxseSB0cmFuc3BhcmVudCBzaGFwZXMsIHdoZW4gdGhleSBhcmUgcGFpbnRlZCBzZXBhcmF0ZWx5IGJ1dCB3aXRob3V0CiAgLy8vIGFuIG9mZnNldCwgc28gdGhhdCB0aGUgc2hhZG93IGRvZXNuJ3QgcGFpbnQgYmVsb3cgdGhlIHNoYXBlLgogIG91dGVyLAoKICAvLy8gRnV6enkgaW5zaWRlLCBub3RoaW5nIG91dHNpZGUuIFRoaXMgY2FuIG1ha2Ugc2hhcGVzIGFwcGVhciB0byBiZSBsaXQgZnJvbQogIC8vLyB3aXRoaW4uCiAgaW5uZXIsCn0KCi8vLyBBIG1hc2sgZmlsdGVyIHRvIGFwcGx5IHRvIHNoYXBlcyBhcyB0aGV5IGFyZSBwYWludGVkLiBBIG1hc2sgZmlsdGVyIGlzIGEKLy8vIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBiaXRtYXAgb2YgY29sb3IgcGl4ZWxzLCBhbmQgcmV0dXJucyBhbm90aGVyIGJpdG1hcCBvZgovLy8gY29sb3IgcGl4ZWxzLgovLy8KLy8vIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZSB1c2VkIHdpdGggW1BhaW50Lm1hc2tGaWx0ZXJdIG9uIFtQYWludF0gb2JqZWN0cy4KY2xhc3MgTWFza0ZpbHRlciB7CiAgLy8vIENyZWF0ZXMgYSBtYXNrIGZpbHRlciB0aGF0IHRha2VzIHRoZSBzaGFwZSBiZWluZyBkcmF3biBhbmQgYmx1cnMgaXQuCiAgLy8vCiAgLy8vIFRoaXMgaXMgY29tbW9ubHkgdXNlZCB0byBhcHByb3hpbWF0ZSBzaGFkb3dzLgogIC8vLwogIC8vLyBUaGUgYHN0eWxlYCBhcmd1bWVudCBjb250cm9scyB0aGUga2luZCBvZiBlZmZlY3QgdG8gZHJhdzsgc2VlIFtCbHVyU3R5bGVdLgogIC8vLwogIC8vLyBUaGUgYHNpZ21hYCBhcmd1bWVudCBjb250cm9scyB0aGUgc2l6ZSBvZiB0aGUgZWZmZWN0LiBJdCBpcyB0aGUgc3RhbmRhcmQKICAvLy8gZGV2aWF0aW9uIG9mIHRoZSBHYXVzc2lhbiBibHVyIHRvIGFwcGx5LiBUaGUgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4KICAvLy8gemVyby4gVGhlIHNpZ21hIGNvcnJlc3BvbmRzIHRvIHZlcnkgcm91Z2hseSBoYWxmIHRoZSByYWRpdXMgb2YgdGhlIGVmZmVjdAogIC8vLyBpbiBwaXhlbHMuCiAgLy8vCiAgLy8vIEEgYmx1ciBpcyBhbiBleHBlbnNpdmUgb3BlcmF0aW9uIGFuZCBzaG91bGQgdGhlcmVmb3JlIGJlIHVzZWQgc3BhcmluZ2x5LgogIC8vLwogIC8vLyBUaGUgYXJndW1lbnRzIG11c3Qgbm90IGJlIG51bGwuCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgKiBbQ2FudmFzLmRyYXdTaGFkb3ddLCB3aGljaCBpcyBhIG1vcmUgZWZmaWNpZW50IHdheSB0byBkcmF3IHNoYWRvd3MuCiAgY29uc3QgTWFza0ZpbHRlci5ibHVyKAogICAgdGhpcy5fc3R5bGUsCiAgICB0aGlzLl9zaWdtYSwKICApIDogYXNzZXJ0KF9zdHlsZSAhPSBudWxsKSwKICAgICAgYXNzZXJ0KF9zaWdtYSAhPSBudWxsKTsKCiAgZmluYWwgQmx1clN0eWxlIF9zdHlsZTsKICBmaW5hbCBkb3VibGUgX3NpZ21hOwoKICAvLyBUaGUgdHlwZSBvZiBNYXNrRmlsdGVyIGNsYXNzIHRvIGNyZWF0ZSBmb3IgU2tpYS4KICAvLyBUaGVzZSBjb25zdGFudHMgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCBNYXNrRmlsdGVyVHlwZSBpbiBwYWludC5jYy4KICBzdGF0aWMgY29uc3QgaW50IF9UeXBlTm9uZSA9IDA7IC8vIG51bGwKICBzdGF0aWMgY29uc3QgaW50IF9UeXBlQmx1ciA9IDE7IC8vIFNrQmx1ck1hc2tGaWx0ZXIKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShkeW5hbWljIG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgTWFza0ZpbHRlcgogICAgICAgICYmIG90aGVyLl9zdHlsZSA9PSBfc3R5bGUKICAgICAgICAmJiBvdGhlci5fc2lnbWEgPT0gX3NpZ21hOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBoYXNoVmFsdWVzKF9zdHlsZSwgX3NpZ21hKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ01hc2tGaWx0ZXIuYmx1cigkX3N0eWxlLCAke19zaWdtYS50b1N0cmluZ0FzRml4ZWQoMSl9KSc7Cn0KCi8vLyBBIGRlc2NyaXB0aW9uIG9mIGEgY29sb3IgZmlsdGVyIHRvIGFwcGx5IHdoZW4gZHJhd2luZyBhIHNoYXBlIG9yIGNvbXBvc2l0aW5nCi8vLyBhIGxheWVyIHdpdGggYSBwYXJ0aWN1bGFyIFtQYWludF0uIEEgY29sb3IgZmlsdGVyIGlzIGEgZnVuY3Rpb24gdGhhdCB0YWtlcwovLy8gdHdvIGNvbG9ycywgYW5kIG91dHB1dHMgb25lIGNvbG9yLiBXaGVuIGFwcGxpZWQgZHVyaW5nIGNvbXBvc2l0aW5nLCBpdCBpcwovLy8gaW5kZXBlbmRlbnRseSBhcHBsaWVkIHRvIGVhY2ggcGl4ZWwgb2YgdGhlIGxheWVyIGJlaW5nIGRyYXduIGJlZm9yZSB0aGUKLy8vIGVudGlyZSBsYXllciBpcyBtZXJnZWQgd2l0aCB0aGUgZGVzdGluYXRpb24uCi8vLwovLy8gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgYXJlIHVzZWQgd2l0aCBbUGFpbnQuY29sb3JGaWx0ZXJdIG9uIFtQYWludF0KLy8vIG9iamVjdHMuCmNsYXNzIENvbG9yRmlsdGVyIHsKICAvLy8gQ3JlYXRlcyBhIGNvbG9yIGZpbHRlciB0aGF0IGFwcGxpZXMgdGhlIGJsZW5kIG1vZGUgZ2l2ZW4gYXMgdGhlIHNlY29uZAogIC8vLyBhcmd1bWVudC4gVGhlIHNvdXJjZSBjb2xvciBpcyB0aGUgb25lIGdpdmVuIGFzIHRoZSBmaXJzdCBhcmd1bWVudCwgYW5kIHRoZQogIC8vLyBkZXN0aW5hdGlvbiBjb2xvciBpcyB0aGUgb25lIGZyb20gdGhlIGxheWVyIGJlaW5nIGNvbXBvc2l0ZWQuCiAgLy8vCiAgLy8vIFRoZSBvdXRwdXQgb2YgdGhpcyBmaWx0ZXIgaXMgdGhlbiBjb21wb3NpdGVkIGludG8gdGhlIGJhY2tncm91bmQgYWNjb3JkaW5nCiAgLy8vIHRvIHRoZSBbUGFpbnQuYmxlbmRNb2RlXSwgdXNpbmcgdGhlIG91dHB1dCBvZiB0aGlzIGZpbHRlciBhcyB0aGUgc291cmNlCiAgLy8vIGFuZCB0aGUgYmFja2dyb3VuZCBhcyB0aGUgZGVzdGluYXRpb24uCiAgY29uc3QgQ29sb3JGaWx0ZXIubW9kZShDb2xvciBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKICAgICAgOiBfY29sb3IgPSBjb2xvciwKICAgICAgICBfYmxlbmRNb2RlID0gYmxlbmRNb2RlLAogICAgICAgIF9tYXRyaXggPSBudWxsLAogICAgICAgIF90eXBlID0gX1R5cGVNb2RlOwoKICAvLy8gQ29uc3RydWN0IGEgY29sb3IgZmlsdGVyIHRoYXQgdHJhbnNmb3JtcyBhIGNvbG9yIGJ5IGEgNXg1IG1hdHJpeCwgd2hlcmUKICAvLy8gdGhlIGZpZnRoIHJvdyBpcyBpbXBsaWNpdGx5IGFkZGVkIGluIGFuIGlkZW50aXR5IGNvbmZpZ3VyYXRpb24uCiAgLy8vCiAgLy8vIEV2ZXJ5IHBpeGVsJ3MgY29sb3IgdmFsdWUsIHJlcHNlbnRlZCBhcyBhbiBgW1IsIEcsIEIsIEFdYCwgaXMgbWF0cml4CiAgLy8vIG11bHRpcGxpZWQgdG8gY3JlYXRlIGEgbmV3IGNvbG9yOgogIC8vLwogIC8vLyBgYGB0ZXh0CiAgLy8vIHwgUicgfCAgIHwgYTAwIGEwMSBhMDIgYTAzIGEwNCB8ICAgfCBSIHwKICAvLy8gfCBHJyB8ICAgfCBhMTAgYTExIGEyMiBhMzMgYTQ0IHwgICB8IEcgfAogIC8vLyB8IEInIHwgPSB8IGEyMCBhMjEgYTIyIGEzMyBhNDQgfCAqIHwgQiB8CiAgLy8vIHwgQScgfCAgIHwgYTMwIGEzMSBhMjIgYTMzIGE0NCB8ICAgfCBBIHwKICAvLy8gfCAxICB8ICAgfCAgMCAgIDAgICAwICAgMCAgIDEgIHwgICB8IDEgfAogIC8vLyBgYGAKICAvLy8KICAvLy8gVGhlIG1hdHJpeCBpcyBpbiByb3ctbWFqb3Igb3JkZXIgYW5kIHRoZSB0cmFuc2xhdGlvbiBjb2x1bW4gaXMgc3BlY2lmaWVkCiAgLy8vIGluIHVubm9ybWFsaXplZCwgMC4uLjI1NSwgc3BhY2UuIEZvciBleGFtcGxlLCB0aGUgaWRlbnRpdHkgbWF0cml4IGlzOgogIC8vLwogIC8vLyBgYGAKICAvLy8gY29uc3QgQ29sb3JNYXRyaXggaWRlbnRpdHkgPSBDb2xvckZpbHRlci5tYXRyaXgoPGRvdWJsZT5bCiAgLy8vICAgMSwgMCwgMCwgMCwgMCwKICAvLy8gICAwLCAxLCAwLCAwLCAwLAogIC8vLyAgIDAsIDAsIDEsIDAsIDAsCiAgLy8vICAgMCwgMCwgMCwgMSwgMCwKICAvLy8gXSk7CiAgLy8vIGBgYAogIC8vLwogIC8vLyAjIyBFeGFtcGxlcwogIC8vLwogIC8vLyBBbiBpbnZlcnNpb24gY29sb3IgbWF0cml4OgogIC8vLwogIC8vLyBgYGAKICAvLy8gY29uc3QgQ29sb3JGaWx0ZXIgaW52ZXJ0ID0gQ29sb3JGaWx0ZXIubWF0cml4KDxkb3VibGU+WwogIC8vLyAgIC0xLCAgMCwgIDAsIDAsIDI1NSwKICAvLy8gICAgMCwgLTEsICAwLCAwLCAyNTUsCiAgLy8vICAgIDAsICAwLCAtMSwgMCwgMjU1LAogIC8vLyAgICAwLCAgMCwgIDAsIDEsICAgMCwKICAvLy8gXSk7CiAgLy8vIGBgYAogIC8vLwogIC8vLyBBIHNlcGlhLXRvbmVkIGNvbG9yIG1hdHJpeCAodmFsdWVzIGJhc2VkIG9uIHRoZSBbRmlsdGVyIEVmZmVjdHMgU3BlY10oaHR0cHM6Ly93d3cudzMub3JnL1RSL2ZpbHRlci1lZmZlY3RzLTEvI3NlcGlhRXF1aXZhbGVudCkpOgogIC8vLwogIC8vLyBgYGAKICAvLy8gY29uc3QgQ29sb3JGaWx0ZXIgc2VwaWEgPSBDb2xvckZpbHRlci5tYXRyaXgoPGRvdWJsZT5bCiAgLy8vICAgMC4zOTMsIDAuNzY5LCAwLjE4OSwgMCwgMCwKICAvLy8gICAwLjM0OSwgMC42ODYsIDAuMTY4LCAwLCAwLAogIC8vLyAgIDAuMjcyLCAwLjUzNCwgMC4xMzEsIDAsIDAsCiAgLy8vICAgMCwgICAgIDAsICAgICAwLCAgICAgMSwgMCwKICAvLy8gXSk7CiAgLy8vIGBgYAogIC8vLwogIC8vLyBBIGdyZXlzY2FsZSBjb2xvciBmaWx0ZXIgKHZhbHVlcyBiYXNlZCBvbiB0aGUgW0ZpbHRlciBFZmZlY3RzIFNwZWNdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi9maWx0ZXItZWZmZWN0cy0xLyNncmF5c2NhbGVFcXVpdmFsZW50KSk6CiAgLy8vCiAgLy8vIGBgYAogIC8vLyBjb25zdCBDb2xvckZpbHRlciBncmV5c2NhbGUgPSBDb2xvckZpbHRlci5tYXRyaXgoPGRvdWJsZT5bCiAgLy8vICAgMC4yMTI2LCAwLjcxNTIsIDAuMDcyMiwgMCwgMCwKICAvLy8gICAwLjIxMjYsIDAuNzE1MiwgMC4wNzIyLCAwLCAwLAogIC8vLyAgIDAuMjEyNiwgMC43MTUyLCAwLjA3MjIsIDAsIDAsCiAgLy8vICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMSwgMCwKICAvLy8gXSk7CiAgLy8vIGBgYAogIGNvbnN0IENvbG9yRmlsdGVyLm1hdHJpeChMaXN0PGRvdWJsZT4gbWF0cml4KQogICAgICA6IF9jb2xvciA9IG51bGwsCiAgICAgICAgX2JsZW5kTW9kZSA9IG51bGwsCiAgICAgICAgX21hdHJpeCA9IG1hdHJpeCwKICAgICAgICBfdHlwZSA9IF9UeXBlTWF0cml4OwoKICAvLy8gQ29uc3RydWN0IGEgY29sb3IgZmlsdGVyIHRoYXQgYXBwbGllcyB0aGUgc1JHQiBnYW1tYSBjdXJ2ZSB0byB0aGUgUkdCCiAgLy8vIGNoYW5uZWxzLgogIGNvbnN0IENvbG9yRmlsdGVyLmxpbmVhclRvU3JnYkdhbW1hKCkKICAgICAgOiBfY29sb3IgPSBudWxsLAogICAgICAgIF9ibGVuZE1vZGUgPSBudWxsLAogICAgICAgIF9tYXRyaXggPSBudWxsLAogICAgICAgIF90eXBlID0gX1R5cGVMaW5lYXJUb1NyZ2JHYW1tYTsKCiAgLy8vIENyZWF0ZXMgYSBjb2xvciBmaWx0ZXIgdGhhdCBhcHBsaWVzIHRoZSBpbnZlcnNlIG9mIHRoZSBzUkdCIGdhbW1hIGN1cnZlCiAgLy8vIHRvIHRoZSBSR0IgY2hhbm5lbHMuCiAgY29uc3QgQ29sb3JGaWx0ZXIuc3JnYlRvTGluZWFyR2FtbWEoKQogICAgICA6IF9jb2xvciA9IG51bGwsCiAgICAgICAgX2JsZW5kTW9kZSA9IG51bGwsCiAgICAgICAgX21hdHJpeCA9IG51bGwsCiAgICAgICAgX3R5cGUgPSBfVHlwZVNyZ2JUb0xpbmVhckdhbW1hOwoKICBmaW5hbCBDb2xvciBfY29sb3I7CiAgZmluYWwgQmxlbmRNb2RlIF9ibGVuZE1vZGU7CiAgZmluYWwgTGlzdDxkb3VibGU+IF9tYXRyaXg7CiAgZmluYWwgaW50IF90eXBlOwoKICAvLyBUaGUgdHlwZSBvZiBTa0NvbG9yRmlsdGVyIGNsYXNzIHRvIGNyZWF0ZSBmb3IgU2tpYS4KICBzdGF0aWMgY29uc3QgaW50IF9UeXBlTW9kZSA9IDE7IC8vIE1ha2VNb2RlRmlsdGVyCiAgc3RhdGljIGNvbnN0IGludCBfVHlwZU1hdHJpeCA9IDI7IC8vIE1ha2VNYXRyaXhGaWx0ZXJSb3dNYWpvcjI1NQogIHN0YXRpYyBjb25zdCBpbnQgX1R5cGVMaW5lYXJUb1NyZ2JHYW1tYSA9IDM7IC8vIE1ha2VMaW5lYXJUb1NSR0JHYW1tYQogIHN0YXRpYyBjb25zdCBpbnQgX1R5cGVTcmdiVG9MaW5lYXJHYW1tYSA9IDQ7IC8vIE1ha2VTUkdCVG9MaW5lYXJHYW1tYQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KGR5bmFtaWMgb3RoZXIpIHsKICAgIHJldHVybiBvdGhlciBpcyBDb2xvckZpbHRlcgogICAgICAgICYmIG90aGVyLl90eXBlID09IF90eXBlCiAgICAgICAgJiYgX2xpc3RFcXVhbHM8ZG91YmxlPihvdGhlci5fbWF0cml4LCBfbWF0cml4KQogICAgICAgICYmIG90aGVyLl9jb2xvciA9PSBfY29sb3IKICAgICAgICAmJiBvdGhlci5fYmxlbmRNb2RlID09IF9ibGVuZE1vZGU7CiAgfQoKICBfQ29sb3JGaWx0ZXIgX3RvTmF0aXZlQ29sb3JGaWx0ZXIoKSB7CiAgICBzd2l0Y2ggKF90eXBlKSB7CiAgICAgIGNhc2UgX1R5cGVNb2RlOgogICAgICAgIGlmIChfY29sb3IgPT0gbnVsbCB8fCBfYmxlbmRNb2RlID09IG51bGwpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gX0NvbG9yRmlsdGVyLm1vZGUodGhpcyk7CiAgICAgIGNhc2UgX1R5cGVNYXRyaXg6CiAgICAgICAgaWYgKF9tYXRyaXggPT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGFzc2VydChfbWF0cml4Lmxlbmd0aCA9PSAyMCwgJ0NvbG9yIE1hdHJpeCBtdXN0IGhhdmUgMjAgZW50cmllcy4nKTsKICAgICAgICByZXR1cm4gX0NvbG9yRmlsdGVyLm1hdHJpeCh0aGlzKTsKICAgICAgY2FzZSBfVHlwZUxpbmVhclRvU3JnYkdhbW1hOgogICAgICAgIHJldHVybiBfQ29sb3JGaWx0ZXIubGluZWFyVG9TcmdiR2FtbWEodGhpcyk7CiAgICAgIGNhc2UgX1R5cGVTcmdiVG9MaW5lYXJHYW1tYToKICAgICAgICByZXR1cm4gX0NvbG9yRmlsdGVyLnNyZ2JUb0xpbmVhckdhbW1hKHRoaXMpOwogICAgICBkZWZhdWx0OgogICAgICAgIHRocm93IFN0YXRlRXJyb3IoJ1Vua25vd24gbW9kZSAkX3R5cGUgZm9yIENvbG9yRmlsdGVyLicpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBoYXNoVmFsdWVzKF9jb2xvciwgX2JsZW5kTW9kZSwgaGFzaExpc3QoX21hdHJpeCksIF90eXBlKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgc3dpdGNoIChfdHlwZSkgewogICAgICBjYXNlIF9UeXBlTW9kZToKICAgICAgICByZXR1cm4gJ0NvbG9yRmlsdGVyLm1vZGUoJF9jb2xvciwgJF9ibGVuZE1vZGUpJzsKICAgICAgY2FzZSBfVHlwZU1hdHJpeDoKICAgICAgICByZXR1cm4gJ0NvbG9yRmlsdGVyLm1hdHJpeCgkX21hdHJpeCknOwogICAgICBjYXNlIF9UeXBlTGluZWFyVG9TcmdiR2FtbWE6CiAgICAgICAgcmV0dXJuICdDb2xvckZpbHRlci5saW5lYXJUb1NyZ2JHYW1tYSgpJzsKICAgICAgY2FzZSBfVHlwZVNyZ2JUb0xpbmVhckdhbW1hOgogICAgICAgIHJldHVybiAnQ29sb3JGaWx0ZXIuc3JnYlRvTGluZWFyR2FtbWEoKSc7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuICdVbmtub3duIENvbG9yRmlsdGVyIHR5cGUuIFRoaXMgaXMgYW4gZXJyb3IuIElmIHlvdVwncmUgc2VlaW5nIHRoaXMsIHBsZWFzZSBmaWxlIGFuIGlzc3VlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9mbHV0dGVyL2ZsdXR0ZXIvaXNzdWVzL25ldy4nOwogICAgfQogIH0KfQoKLy8vIEEgW0NvbG9yRmlsdGVyXSB0aGF0IGlzIGJhY2tlZCBieSBhIG5hdGl2ZSBTa0NvbG9yRmlsdGVyLgovLy8KLy8vIFRoaXMgaXMgYSBwcml2YXRlIGNsYXNzLCByYXRoZXIgdGhhbiBiZWluZyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHB1YmxpYwovLy8gQ29sb3JGaWx0ZXIsIGJlY2F1c2Ugd2Ugd2FudCBDb2xvckZpbHRlciB0byBiZSBjb25zdCBjb25zdHJ1Y3RpYmxlIGFuZAovLy8gZWZmaWNpZW50bHkgY29tcGFyYWJsZSwgc28gdGhhdCB3aWRnZXRzIGNhbiBjaGVjayBmb3IgQ29sb3JGaWx0ZXIgZXF1YWxpdHkgdG8KLy8vIGF2b2lkIHJlcGFpbnRpbmcuCmNsYXNzIF9Db2xvckZpbHRlciBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMiB7CiAgX0NvbG9yRmlsdGVyLm1vZGUodGhpcy5jcmVhdG9yKQogICAgOiBhc3NlcnQoY3JlYXRvciAhPSBudWxsKSwKICAgICAgYXNzZXJ0KGNyZWF0b3IuX3R5cGUgPT0gQ29sb3JGaWx0ZXIuX1R5cGVNb2RlKSB7CiAgICBfY29uc3RydWN0b3IoKTsKICAgIF9pbml0TW9kZShjcmVhdG9yLl9jb2xvci52YWx1ZSwgY3JlYXRvci5fYmxlbmRNb2RlLmluZGV4KTsKICB9CgogIF9Db2xvckZpbHRlci5tYXRyaXgodGhpcy5jcmVhdG9yKQogICAgOiBhc3NlcnQoY3JlYXRvciAhPSBudWxsKSwKICAgICAgYXNzZXJ0KGNyZWF0b3IuX3R5cGUgPT0gQ29sb3JGaWx0ZXIuX1R5cGVNYXRyaXgpIHsKICAgIF9jb25zdHJ1Y3RvcigpOwogICAgX2luaXRNYXRyaXgoRmxvYXQzMkxpc3QuZnJvbUxpc3QoY3JlYXRvci5fbWF0cml4KSk7CiAgfQogIF9Db2xvckZpbHRlci5saW5lYXJUb1NyZ2JHYW1tYSh0aGlzLmNyZWF0b3IpCiAgICA6IGFzc2VydChjcmVhdG9yICE9IG51bGwpLAogICAgICBhc3NlcnQoY3JlYXRvci5fdHlwZSA9PSBDb2xvckZpbHRlci5fVHlwZUxpbmVhclRvU3JnYkdhbW1hKSB7CiAgICBfY29uc3RydWN0b3IoKTsKICAgIF9pbml0TGluZWFyVG9TcmdiR2FtbWEoKTsKICB9CgogIF9Db2xvckZpbHRlci5zcmdiVG9MaW5lYXJHYW1tYSh0aGlzLmNyZWF0b3IpCiAgICA6IGFzc2VydChjcmVhdG9yICE9IG51bGwpLAogICAgICBhc3NlcnQoY3JlYXRvci5fdHlwZSA9PSBDb2xvckZpbHRlci5fVHlwZVNyZ2JUb0xpbmVhckdhbW1hKSB7CiAgICBfY29uc3RydWN0b3IoKTsKICAgIF9pbml0U3JnYlRvTGluZWFyR2FtbWEoKTsKICB9CgogIC8vLyBUaGUgb3JpZ2luYWwgRGFydCBvYmplY3QgdGhhdCBjcmVhdGVkIHRoZSBuYXRpdmUgd3JhcHBlciwgd2hpY2ggcmV0YWlucwogIC8vLyB0aGUgdmFsdWVzIHVzZWQgZm9yIHRoZSBmaWx0ZXIuCiAgZmluYWwgQ29sb3JGaWx0ZXIgY3JlYXRvcjsKCiAgdm9pZCBfY29uc3RydWN0b3IoKSBuYXRpdmUgJ0NvbG9yRmlsdGVyX2NvbnN0cnVjdG9yJzsKICB2b2lkIF9pbml0TW9kZShpbnQgY29sb3IsIGludCBibGVuZE1vZGUpIG5hdGl2ZSAnQ29sb3JGaWx0ZXJfaW5pdE1vZGUnOwogIHZvaWQgX2luaXRNYXRyaXgoRmxvYXQzMkxpc3QgbWF0cml4KSBuYXRpdmUgJ0NvbG9yRmlsdGVyX2luaXRNYXRyaXgnOwogIHZvaWQgX2luaXRMaW5lYXJUb1NyZ2JHYW1tYSgpIG5hdGl2ZSAnQ29sb3JGaWx0ZXJfaW5pdExpbmVhclRvU3JnYkdhbW1hJzsKICB2b2lkIF9pbml0U3JnYlRvTGluZWFyR2FtbWEoKSBuYXRpdmUgJ0NvbG9yRmlsdGVyX2luaXRTcmdiVG9MaW5lYXJHYW1tYSc7Cn0KCi8vLyBBIGZpbHRlciBvcGVyYXRpb24gdG8gYXBwbHkgdG8gYSByYXN0ZXIgaW1hZ2UuCi8vLwovLy8gU2VlIGFsc286Ci8vLwovLy8gICogW0JhY2tkcm9wRmlsdGVyXSwgYSB3aWRnZXQgdGhhdCBhcHBsaWVzIFtJbWFnZUZpbHRlcl0gdG8gaXRzIHJlbmRlcmluZy4KLy8vICAqIFtJbWFnZUZpbHRlcmVkXSwgYSB3aWRnZXQgdGhhdCBhcHBsaWVzIFtJbWFnZUZpbHRlcl0gdG8gaXRzIGNoaWxkcmVuLgovLy8gICogW1NjZW5lQnVpbGRlci5wdXNoQmFja2Ryb3BGaWx0ZXJdLCB3aGljaCBpcyB0aGUgbG93LWxldmVsIEFQSSBmb3IgdXNpbmcKLy8vICAgIHRoaXMgY2xhc3MgYXMgYSBiYWNrZHJvcCBmaWx0ZXIuCi8vLyAgKiBbU2NlbmVCdWlsZGVyLnB1c2hJbWFnZUZpbHRlcl0sIHdoaWNoIGlzIHRoZSBsb3ctbGV2ZWwgQVBJIGZvciB1c2luZwovLy8gICAgdGhpcyBjbGFzcyBhcyBhIGNoaWxkIGxheWVyIGZpbHRlci4KY2xhc3MgSW1hZ2VGaWx0ZXIgewogIC8vLyBDcmVhdGVzIGFuIGltYWdlIGZpbHRlciB0aGF0IGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyLgogIEltYWdlRmlsdGVyLmJsdXIoeyBkb3VibGUgc2lnbWFYID0gMC4wLCBkb3VibGUgc2lnbWFZID0gMC4wIH0pCiAgICAgIDogX2RhdGEgPSBfbWFrZUxpc3Qoc2lnbWFYLCBzaWdtYVkpLAogICAgICAgIF9maWx0ZXJRdWFsaXR5ID0gbnVsbCwKICAgICAgICBfdHlwZSA9IF9rVHlwZUJsdXI7CgogIC8vLyBDcmVhdGVzIGFuIGltYWdlIGZpbHRlciB0aGF0IGFwcGxpZXMgYSBtYXRyaXggdHJhbnNmb3JtYXRpb24uCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCBhcHBseWluZyBhIHBvc2l0aXZlIHNjYWxlIG1hdHJpeCAoc2VlIFtNYXRyaXg0LmRpYWdvbmFsM10pCiAgLy8vIHdoZW4gdXNlZCB3aXRoIFtCYWNrZHJvcEZpbHRlcl0gd291bGQgbWFnbmlmeSB0aGUgYmFja2dyb3VuZCBpbWFnZS4KICBJbWFnZUZpbHRlci5tYXRyaXgoRmxvYXQ2NExpc3QgbWF0cml4NCwKICAgICAgICAgICAgICAgICAgICAgeyBGaWx0ZXJRdWFsaXR5IGZpbHRlclF1YWxpdHkgPSBGaWx0ZXJRdWFsaXR5LmxvdyB9KQogICAgICA6IF9kYXRhID0gRmxvYXQ2NExpc3QuZnJvbUxpc3QobWF0cml4NCksCiAgICAgICAgX2ZpbHRlclF1YWxpdHkgPSBmaWx0ZXJRdWFsaXR5LAogICAgICAgIF90eXBlID0gX2tUeXBlTWF0cml4IHsKICAgIGlmIChtYXRyaXg0Lmxlbmd0aCAhPSAxNikKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcignIm1hdHJpeDQiIG11c3QgaGF2ZSAxNiBlbnRyaWVzLicpOwogIH0KCiAgc3RhdGljIEZsb2F0NjRMaXN0IF9tYWtlTGlzdChkb3VibGUgYSwgZG91YmxlIGIpIHsKICAgIGZpbmFsIEZsb2F0NjRMaXN0IGxpc3QgPSBGbG9hdDY0TGlzdCgyKTsKICAgIGlmIChhICE9IG51bGwpCiAgICAgIGxpc3RbMF0gPSBhOwogICAgaWYgKGIgIT0gbnVsbCkKICAgICAgbGlzdFsxXSA9IGI7CiAgICByZXR1cm4gbGlzdDsKICB9CgogIGZpbmFsIEZsb2F0NjRMaXN0IF9kYXRhOwogIGZpbmFsIEZpbHRlclF1YWxpdHkgX2ZpbHRlclF1YWxpdHk7CiAgZmluYWwgaW50IF90eXBlOwogIF9JbWFnZUZpbHRlciBfbmF0aXZlRmlsdGVyOwoKICAvLyBUaGUgdHlwZSBvZiBTa0ltYWdlRmlsdGVyIGNsYXNzIHRvIGNyZWF0ZSBmb3IgU2tpYS4KICBzdGF0aWMgY29uc3QgaW50IF9rVHlwZUJsdXIgPSAwOyAgIC8vIE1ha2VCbHVyRmlsdGVyCiAgc3RhdGljIGNvbnN0IGludCBfa1R5cGVNYXRyaXggPSAxOyAvLyBNYWtlTWF0cml4RmlsdGVyUm93TWFqb3IyNTUKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShkeW5hbWljIG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgSW1hZ2VGaWx0ZXIKICAgICAgICAmJiBvdGhlci5fdHlwZSA9PSBfdHlwZQogICAgICAgICYmIF9saXN0RXF1YWxzPGRvdWJsZT4ob3RoZXIuX2RhdGEsIF9kYXRhKQogICAgICAgICYmIG90aGVyLl9maWx0ZXJRdWFsaXR5ID09IF9maWx0ZXJRdWFsaXR5OwogIH0KCiAgX0ltYWdlRmlsdGVyIF90b05hdGl2ZUltYWdlRmlsdGVyKCkgPT4gX25hdGl2ZUZpbHRlciA/Pz0gX21ha2VOYXRpdmVJbWFnZUZpbHRlcigpOwoKICBfSW1hZ2VGaWx0ZXIgX21ha2VOYXRpdmVJbWFnZUZpbHRlcigpIHsKICAgIGlmIChfZGF0YSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgc3dpdGNoIChfdHlwZSkgewogICAgICBjYXNlIF9rVHlwZUJsdXI6CiAgICAgICAgcmV0dXJuIF9JbWFnZUZpbHRlci5ibHVyKHRoaXMpOwogICAgICBjYXNlIF9rVHlwZU1hdHJpeDoKICAgICAgICByZXR1cm4gX0ltYWdlRmlsdGVyLm1hdHJpeCh0aGlzKTsKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBTdGF0ZUVycm9yKCdVbmtub3duIG1vZGUgJF90eXBlIGZvciBJbWFnZUZpbHRlci4nKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gaGFzaFZhbHVlcyhfZmlsdGVyUXVhbGl0eSwgaGFzaExpc3QoX2RhdGEpLCBfdHlwZSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHN3aXRjaCAoX3R5cGUpIHsKICAgICAgY2FzZSBfa1R5cGVCbHVyOgogICAgICAgIHJldHVybiAnSW1hZ2VGaWx0ZXIuYmx1cigke19kYXRhWzBdfSwgJHtfZGF0YVsxXX0pJzsKICAgICAgY2FzZSBfa1R5cGVNYXRyaXg6CiAgICAgICAgcmV0dXJuICdJbWFnZUZpbHRlci5tYXRyaXgoJF9kYXRhLCAkX2ZpbHRlclF1YWxpdHkpJzsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gJ1Vua25vd24gSW1hZ2VGaWx0ZXIgdHlwZS4gVGhpcyBpcyBhbiBlcnJvci4gSWYgeW91XCdyZSBzZWVpbmcgdGhpcywgcGxlYXNlIGZpbGUgYW4gaXNzdWUgYXQgaHR0cHM6Ly9naXRodWIuY29tL2ZsdXR0ZXIvZmx1dHRlci9pc3N1ZXMvbmV3Lic7CiAgICB9CiAgfQp9CgovLy8gQW4gW0ltYWdlRmlsdGVyXSB0aGF0IGlzIGJhY2tlZCBieSBhIG5hdGl2ZSBTa0ltYWdlRmlsdGVyLgovLy8KLy8vIFRoaXMgaXMgYSBwcml2YXRlIGNsYXNzLCByYXRoZXIgdGhhbiBiZWluZyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHB1YmxpYwovLy8gSW1hZ2VGaWx0ZXIsIGJlY2F1c2Ugd2Ugd2FudCBJbWFnZUZpbHRlciB0byBiZSBlZmZpY2llbnRseSBjb21wYXJhYmxlLCBzbyB0aGF0Ci8vLyB3aWRnZXRzIGNhbiBjaGVjayBmb3IgSW1hZ2VGaWx0ZXIgZXF1YWxpdHkgdG8gYXZvaWQgcmVwYWludGluZy4KY2xhc3MgX0ltYWdlRmlsdGVyIGV4dGVuZHMgTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MyIHsKICB2b2lkIF9jb25zdHJ1Y3RvcigpIG5hdGl2ZSAnSW1hZ2VGaWx0ZXJfY29uc3RydWN0b3InOwoKICAvLy8gQ3JlYXRlcyBhbiBpbWFnZSBmaWx0ZXIgdGhhdCBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ci4KICBfSW1hZ2VGaWx0ZXIuYmx1cih0aGlzLmNyZWF0b3IpCiAgICA6IGFzc2VydChjcmVhdG9yICE9IG51bGwpLAogICAgICBhc3NlcnQoY3JlYXRvci5fdHlwZSA9PSBJbWFnZUZpbHRlci5fa1R5cGVCbHVyKSB7CiAgICBfY29uc3RydWN0b3IoKTsKICAgIF9pbml0Qmx1cihjcmVhdG9yLl9kYXRhWzBdLCBjcmVhdG9yLl9kYXRhWzFdKTsKICB9CiAgdm9pZCBfaW5pdEJsdXIoZG91YmxlIHNpZ21hWCwgZG91YmxlIHNpZ21hWSkgbmF0aXZlICdJbWFnZUZpbHRlcl9pbml0Qmx1cic7CgogIC8vLyBDcmVhdGVzIGFuIGltYWdlIGZpbHRlciB0aGF0IGFwcGxpZXMgYSBtYXRyaXggdHJhbnNmb3JtYXRpb24uCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCBhcHBseWluZyBhIHBvc2l0aXZlIHNjYWxlIG1hdHJpeCAoc2VlIFtNYXRyaXg0LmRpYWdvbmFsM10pCiAgLy8vIHdoZW4gdXNlZCB3aXRoIFtCYWNrZHJvcEZpbHRlcl0gd291bGQgbWFnbmlmeSB0aGUgYmFja2dyb3VuZCBpbWFnZS4KICBfSW1hZ2VGaWx0ZXIubWF0cml4KHRoaXMuY3JlYXRvcikKICAgIDogYXNzZXJ0KGNyZWF0b3IgIT0gbnVsbCksCiAgICAgIGFzc2VydChjcmVhdG9yLl90eXBlID09IEltYWdlRmlsdGVyLl9rVHlwZU1hdHJpeCkgewogICAgaWYgKGNyZWF0b3IuX2RhdGEubGVuZ3RoICE9IDE2KQogICAgICB0aHJvdyBBcmd1bWVudEVycm9yKCcibWF0cml4NCIgbXVzdCBoYXZlIDE2IGVudHJpZXMuJyk7CiAgICBfY29uc3RydWN0b3IoKTsKICAgIF9pbml0TWF0cml4KGNyZWF0b3IuX2RhdGEsIGNyZWF0b3IuX2ZpbHRlclF1YWxpdHkuaW5kZXgpOwogIH0KICB2b2lkIF9pbml0TWF0cml4KEZsb2F0NjRMaXN0IG1hdHJpeDQsIGludCBmaWx0ZXJRdWFsaXR5KSBuYXRpdmUgJ0ltYWdlRmlsdGVyX2luaXRNYXRyaXgnOwoKICAvLy8gVGhlIG9yaWdpbmFsIERhcnQgb2JqZWN0IHRoYXQgY3JlYXRlZCB0aGUgbmF0aXZlIHdyYXBwZXIsIHdoaWNoIHJldGFpbnMKICAvLy8gdGhlIHZhbHVlcyB1c2VkIGZvciB0aGUgZmlsdGVyLgogIGZpbmFsIEltYWdlRmlsdGVyIGNyZWF0b3I7Cn0KCi8vLyBCYXNlIGNsYXNzIGZvciBvYmplY3RzIHN1Y2ggYXMgW0dyYWRpZW50XSBhbmQgW0ltYWdlU2hhZGVyXSB3aGljaAovLy8gY29ycmVzcG9uZCB0byBzaGFkZXJzIGFzIHVzZWQgYnkgW1BhaW50LnNoYWRlcl0uCmNsYXNzIFNoYWRlciBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMiB7CiAgLy8vIFRoaXMgY2xhc3MgaXMgY3JlYXRlZCBieSB0aGUgZW5naW5lLCBhbmQgc2hvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQKICAvLy8gb3IgZXh0ZW5kZWQgZGlyZWN0bHkuCiAgQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQogIFNoYWRlci5fKCk7Cn0KCi8vLyBEZWZpbmVzIHdoYXQgaGFwcGVucyBhdCB0aGUgZWRnZSBvZiB0aGUgZ3JhZGllbnQuCi8vLwovLy8gQSBncmFkaWVudCBpcyBkZWZpbmVkIGFsb25nIGEgZmluaXRlIGlubmVyIGFyZWEuIEluIHRoZSBjYXNlIG9mIGEgbGluZWFyCi8vLyBncmFkaWVudCwgaXQncyBiZXR3ZWVuIHRoZSBwYXJhbGxlbCBsaW5lcyB0aGF0IGFyZSBvcnRob2dvbmFsIHRvIHRoZSBsaW5lCi8vLyBkcmF3biBiZXR3ZWVuIHR3byBwb2ludHMuIEluIHRoZSBjYXNlIG9mIHJhZGlhbCBncmFkaWVudHMsIGl0J3MgdGhlIGRpc2MKLy8vIHRoYXQgY292ZXJzIHRoZSBjaXJjbGUgY2VudGVyZWQgb24gYSBwYXJ0aWN1bGFyIHBvaW50IHVwIHRvIGEgZ2l2ZW4gcmFkaXVzLgovLy8KLy8vIFRoaXMgZW51bSBpcyB1c2VkIHRvIGRlZmluZSBob3cgdGhlIGdyYWRpZW50IHNob3VsZCBwYWludCB0aGUgcmVnaW9ucwovLy8gb3V0c2lkZSB0aGF0IGRlZmluZWQgaW5uZXIgYXJlYS4KLy8vCi8vLyBTZWUgYWxzbzoKLy8vCi8vLyAgKiBbcGFpbnRpbmcuR3JhZGllbnRdLCB0aGUgc3VwZXJjbGFzcyBmb3IgW0xpbmVhckdyYWRpZW50XSBhbmQKLy8vICAgIFtSYWRpYWxHcmFkaWVudF0sIGFzIHVzZWQgYnkgW0JveERlY29yYXRpb25dIGV0IGFsLCB3aGljaCB3b3JrcyBpbgovLy8gICAgcmVsYXRpdmUgY29vcmRpbmF0ZXMgYW5kIGNhbiBjcmVhdGUgYSBbU2hhZGVyXSByZXByZXNlbnRpbmcgdGhlIGdyYWRpZW50Ci8vLyAgICBmb3IgYSBwYXJ0aWN1bGFyIFtSZWN0XSBvbiBkZW1hbmQuCi8vLyAgKiBbZGFydDp1aS5HcmFkaWVudF0sIHRoZSBsb3ctbGV2ZWwgY2xhc3MgdXNlZCB3aGVuIGRlYWxpbmcgd2l0aCB0aGUKLy8vICAgIFtQYWludC5zaGFkZXJdIHByb3BlcnR5IGRpcmVjdGx5LCB3aXRoIGl0cyBbR3JhZGllbnQubGluZWFyXSBhbmQKLy8vICAgIFtHcmFkaWVudC5yYWRpYWxdIGNvbnN0cnVjdG9ycy4KLy8gVGhlc2UgZW51bSB2YWx1ZXMgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCBTa1NoYWRlcjo6VGlsZU1vZGUuCmVudW0gVGlsZU1vZGUgewogIC8vLyBFZGdlIGlzIGNsYW1wZWQgdG8gdGhlIGZpbmFsIGNvbG9yLgogIC8vLwogIC8vLyBUaGUgZ3JhZGllbnQgd2lsbCBwYWludCB0aGUgYWxsIHRoZSByZWdpb25zIG91dHNpZGUgdGhlIGlubmVyIGFyZWEgd2l0aAogIC8vLyB0aGUgY29sb3Igb2YgdGhlIHBvaW50IGNsb3Nlc3QgdG8gdGhhdCByZWdpb24uCiAgLy8vCiAgLy8vICFbXShodHRwczovL2ZsdXR0ZXIuZ2l0aHViLmlvL2Fzc2V0cy1mb3ItYXBpLWRvY3MvYXNzZXRzL2RhcnQtdWkvdGlsZV9tb2RlX2NsYW1wX3JhZGlhbC5wbmcpCiAgY2xhbXAsCgogIC8vLyBFZGdlIGlzIHJlcGVhdGVkIGZyb20gZmlyc3QgY29sb3IgdG8gbGFzdC4KICAvLy8KICAvLy8gVGhpcyBpcyBhcyBpZiB0aGUgc3RvcCBwb2ludHMgZnJvbSAwLjAgdG8gMS4wIHdlcmUgdGhlbiByZXBlYXRlZCBmcm9tIDEuMAogIC8vLyB0byAyLjAsIDIuMCB0byAzLjAsIGFuZCBzbyBmb3J0aCAoYW5kIGZvciBsaW5lYXIgZ3JhZGllbnRzLCBzaW1pbGFybHkgZnJvbQogIC8vLyAtMS4wIHRvIDAuMCwgLTIuMCB0byAtMS4wLCBldGMpLgogIC8vLwogIC8vLyAhW10oaHR0cHM6Ly9mbHV0dGVyLmdpdGh1Yi5pby9hc3NldHMtZm9yLWFwaS1kb2NzL2Fzc2V0cy9kYXJ0LXVpL3RpbGVfbW9kZV9yZXBlYXRlZF9saW5lYXIucG5nKQogIC8vLyAhW10oaHR0cHM6Ly9mbHV0dGVyLmdpdGh1Yi5pby9hc3NldHMtZm9yLWFwaS1kb2NzL2Fzc2V0cy9kYXJ0LXVpL3RpbGVfbW9kZV9yZXBlYXRlZF9yYWRpYWwucG5nKQogIHJlcGVhdGVkLAoKICAvLy8gRWRnZSBpcyBtaXJyb3JlZCBmcm9tIGxhc3QgY29sb3IgdG8gZmlyc3QuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYXMgaWYgdGhlIHN0b3AgcG9pbnRzIGZyb20gMC4wIHRvIDEuMCB3ZXJlIHRoZW4gcmVwZWF0ZWQgYmFja3dhcmRzCiAgLy8vIGZyb20gMi4wIHRvIDEuMCwgdGhlbiBmb3J3YXJkcyBmcm9tIDIuMCB0byAzLjAsIHRoZW4gYmFja3dhcmRzIGFnYWluIGZyb20KICAvLy8gNC4wIHRvIDMuMCwgYW5kIHNvIGZvcnRoIChhbmQgZm9yIGxpbmVhciBncmFkaWVudHMsIHNpbWlsYXJseSBmcm9tIGluIHRoZQogIC8vLyBuZWdhdGl2ZSBkaXJlY3Rpb24pLgogIC8vLwogIC8vLyAhW10oaHR0cHM6Ly9mbHV0dGVyLmdpdGh1Yi5pby9hc3NldHMtZm9yLWFwaS1kb2NzL2Fzc2V0cy9kYXJ0LXVpL3RpbGVfbW9kZV9taXJyb3JfbGluZWFyLnBuZykKICAvLy8gIVtdKGh0dHBzOi8vZmx1dHRlci5naXRodWIuaW8vYXNzZXRzLWZvci1hcGktZG9jcy9hc3NldHMvZGFydC11aS90aWxlX21vZGVfbWlycm9yX3JhZGlhbC5wbmcpCiAgbWlycm9yLAp9CgpJbnQzMkxpc3QgX2VuY29kZUNvbG9yTGlzdChMaXN0PENvbG9yPiBjb2xvcnMpIHsKICBmaW5hbCBpbnQgY29sb3JDb3VudCA9IGNvbG9ycy5sZW5ndGg7CiAgZmluYWwgSW50MzJMaXN0IHJlc3VsdCA9IEludDMyTGlzdChjb2xvckNvdW50KTsKICBmb3IgKGludCBpID0gMDsgaSA8IGNvbG9yQ291bnQ7ICsraSkKICAgIHJlc3VsdFtpXSA9IGNvbG9yc1tpXS52YWx1ZTsKICByZXR1cm4gcmVzdWx0Owp9CgpGbG9hdDMyTGlzdCBfZW5jb2RlUG9pbnRMaXN0KExpc3Q8T2Zmc2V0PiBwb2ludHMpIHsKICBhc3NlcnQocG9pbnRzICE9IG51bGwpOwogIGZpbmFsIGludCBwb2ludENvdW50ID0gcG9pbnRzLmxlbmd0aDsKICBmaW5hbCBGbG9hdDMyTGlzdCByZXN1bHQgPSBGbG9hdDMyTGlzdChwb2ludENvdW50ICogMik7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb2ludENvdW50OyArK2kpIHsKICAgIGZpbmFsIGludCB4SW5kZXggPSBpICogMjsKICAgIGZpbmFsIGludCB5SW5kZXggPSB4SW5kZXggKyAxOwogICAgZmluYWwgT2Zmc2V0IHBvaW50ID0gcG9pbnRzW2ldOwogICAgYXNzZXJ0KF9vZmZzZXRJc1ZhbGlkKHBvaW50KSk7CiAgICByZXN1bHRbeEluZGV4XSA9IHBvaW50LmR4OwogICAgcmVzdWx0W3lJbmRleF0gPSBwb2ludC5keTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKRmxvYXQzMkxpc3QgX2VuY29kZVR3b1BvaW50cyhPZmZzZXQgcG9pbnRBLCBPZmZzZXQgcG9pbnRCKSB7CiAgYXNzZXJ0KF9vZmZzZXRJc1ZhbGlkKHBvaW50QSkpOwogIGFzc2VydChfb2Zmc2V0SXNWYWxpZChwb2ludEIpKTsKICBmaW5hbCBGbG9hdDMyTGlzdCByZXN1bHQgPSBGbG9hdDMyTGlzdCg0KTsKICByZXN1bHRbMF0gPSBwb2ludEEuZHg7CiAgcmVzdWx0WzFdID0gcG9pbnRBLmR5OwogIHJlc3VsdFsyXSA9IHBvaW50Qi5keDsKICByZXN1bHRbM10gPSBwb2ludEIuZHk7CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8vIEEgc2hhZGVyIChhcyB1c2VkIGJ5IFtQYWludC5zaGFkZXJdKSB0aGF0IHJlbmRlcnMgYSBjb2xvciBncmFkaWVudC4KLy8vCi8vLyBUaGVyZSBhcmUgc2V2ZXJhbCB0eXBlcyBvZiBncmFkaWVudHMsIHJlcHJlc2VudGVkIGJ5IHRoZSB2YXJpb3VzIGNvbnN0cnVjdG9ycwovLy8gb24gdGhpcyBjbGFzcy4KLy8vCi8vLyBTZWUgYWxzbzoKLy8vCi8vLyAgKiBbR3JhZGllbnRdKGh0dHBzOi8vYXBpLmZsdXR0ZXIuZGV2L2ZsdXR0ZXIvcGFpbnRpbmcvR3JhZGllbnQtY2xhc3MuaHRtbCksIHRoZSBjbGFzcyBpbiB0aGUgW3BhaW50aW5nXSBsaWJyYXJ5LgovLy8KY2xhc3MgR3JhZGllbnQgZXh0ZW5kcyBTaGFkZXIgewoKICB2b2lkIF9jb25zdHJ1Y3RvcigpIG5hdGl2ZSAnR3JhZGllbnRfY29uc3RydWN0b3InOwoKICAvLy8gQ3JlYXRlcyBhIGxpbmVhciBncmFkaWVudCBmcm9tIGBmcm9tYCB0byBgdG9gLgogIC8vLwogIC8vLyBJZiBgY29sb3JTdG9wc2AgaXMgcHJvdmlkZWQsIGBjb2xvclN0b3BzW2ldYCBpcyBhIG51bWJlciBmcm9tIDAuMCB0byAxLjAKICAvLy8gdGhhdCBzcGVjaWZpZXMgd2hlcmUgYGNvbG9yW2ldYCBiZWdpbnMgaW4gdGhlIGdyYWRpZW50LiBJZiBgY29sb3JTdG9wc2AgaXMKICAvLy8gbm90IHByb3ZpZGVkLCB0aGVuIG9ubHkgdHdvIHN0b3BzLCBhdCAwLjAgYW5kIDEuMCwgYXJlIGltcGxpZWQgKGFuZAogIC8vLyBgY29sb3JgIG11c3QgdGhlcmVmb3JlIG9ubHkgaGF2ZSB0d28gZW50cmllcykuCiAgLy8vCiAgLy8vIFRoZSBiZWhhdmlvciBiZWZvcmUgYGZyb21gIGFuZCBhZnRlciBgdG9gIGlzIGRlc2NyaWJlZCBieSB0aGUgYHRpbGVNb2RlYAogIC8vLyBhcmd1bWVudC4gRm9yIGRldGFpbHMsIHNlZSB0aGUgW1RpbGVNb2RlXSBlbnVtLgogIC8vLwogIC8vLyAhW10oaHR0cHM6Ly9mbHV0dGVyLmdpdGh1Yi5pby9hc3NldHMtZm9yLWFwaS1kb2NzL2Fzc2V0cy9kYXJ0LXVpL3RpbGVfbW9kZV9jbGFtcF9saW5lYXIucG5nKQogIC8vLyAhW10oaHR0cHM6Ly9mbHV0dGVyLmdpdGh1Yi5pby9hc3NldHMtZm9yLWFwaS1kb2NzL2Fzc2V0cy9kYXJ0LXVpL3RpbGVfbW9kZV9taXJyb3JfbGluZWFyLnBuZykKICAvLy8gIVtdKGh0dHBzOi8vZmx1dHRlci5naXRodWIuaW8vYXNzZXRzLWZvci1hcGktZG9jcy9hc3NldHMvZGFydC11aS90aWxlX21vZGVfcmVwZWF0ZWRfbGluZWFyLnBuZykKICAvLy8KICAvLy8gSWYgYGZyb21gLCBgdG9gLCBgY29sb3JzYCwgb3IgYHRpbGVNb2RlYCBhcmUgbnVsbCwgb3IgaWYgYGNvbG9yc2Agb3IKICAvLy8gYGNvbG9yU3RvcHNgIGNvbnRhaW4gbnVsbCB2YWx1ZXMsIHRoaXMgY29uc3RydWN0b3Igd2lsbCB0aHJvdyBhCiAgLy8vIFtOb1N1Y2hNZXRob2RFcnJvcl0uCiAgLy8vCiAgLy8vIElmIGBtYXRyaXg0YCBpcyBwcm92aWRlZCwgdGhlIGdyYWRpZW50IGZpbGwgd2lsbCBiZSB0cmFuc2Zvcm1lZCBieSB0aGUKICAvLy8gc3BlY2lmaWVkIDR4NCBtYXRyaXggcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGUgc3lzdGVtLiBgbWF0cml4NGAgbXVzdAogIC8vLyBiZSBhIGNvbHVtbi1tYWpvciBtYXRyaXggcGFja2VkIGludG8gYSBsaXN0IG9mIDE2IHZhbHVlcy4KICBHcmFkaWVudC5saW5lYXIoCiAgICBPZmZzZXQgZnJvbSwKICAgIE9mZnNldCB0bywKICAgIExpc3Q8Q29sb3I+IGNvbG9ycywgWwogICAgTGlzdDxkb3VibGU+IGNvbG9yU3RvcHMsCiAgICBUaWxlTW9kZSB0aWxlTW9kZSA9IFRpbGVNb2RlLmNsYW1wLAogICAgRmxvYXQ2NExpc3QgbWF0cml4NCwKICBdKSA6IGFzc2VydChfb2Zmc2V0SXNWYWxpZChmcm9tKSksCiAgICAgICBhc3NlcnQoX29mZnNldElzVmFsaWQodG8pKSwKICAgICAgIGFzc2VydChjb2xvcnMgIT0gbnVsbCksCiAgICAgICBhc3NlcnQodGlsZU1vZGUgIT0gbnVsbCksCiAgICAgICBhc3NlcnQobWF0cml4NCA9PSBudWxsIHx8IF9tYXRyaXg0SXNWYWxpZChtYXRyaXg0KSksCiAgICAgICBzdXBlci5fKCkgewogICAgX3ZhbGlkYXRlQ29sb3JTdG9wcyhjb2xvcnMsIGNvbG9yU3RvcHMpOwogICAgZmluYWwgRmxvYXQzMkxpc3QgZW5kUG9pbnRzQnVmZmVyID0gX2VuY29kZVR3b1BvaW50cyhmcm9tLCB0byk7CiAgICBmaW5hbCBJbnQzMkxpc3QgY29sb3JzQnVmZmVyID0gX2VuY29kZUNvbG9yTGlzdChjb2xvcnMpOwogICAgZmluYWwgRmxvYXQzMkxpc3QgY29sb3JTdG9wc0J1ZmZlciA9IGNvbG9yU3RvcHMgPT0gbnVsbCA/IG51bGwgOiBGbG9hdDMyTGlzdC5mcm9tTGlzdChjb2xvclN0b3BzKTsKICAgIF9jb25zdHJ1Y3RvcigpOwogICAgX2luaXRMaW5lYXIoZW5kUG9pbnRzQnVmZmVyLCBjb2xvcnNCdWZmZXIsIGNvbG9yU3RvcHNCdWZmZXIsIHRpbGVNb2RlLmluZGV4LCBtYXRyaXg0KTsKICB9CiAgdm9pZCBfaW5pdExpbmVhcihGbG9hdDMyTGlzdCBlbmRQb2ludHMsIEludDMyTGlzdCBjb2xvcnMsIEZsb2F0MzJMaXN0IGNvbG9yU3RvcHMsIGludCB0aWxlTW9kZSwgRmxvYXQ2NExpc3QgbWF0cml4NCkgbmF0aXZlICdHcmFkaWVudF9pbml0TGluZWFyJzsKCiAgLy8vIENyZWF0ZXMgYSByYWRpYWwgZ3JhZGllbnQgY2VudGVyZWQgYXQgYGNlbnRlcmAgdGhhdCBlbmRzIGF0IGByYWRpdXNgCiAgLy8vIGRpc3RhbmNlIGZyb20gdGhlIGNlbnRlci4KICAvLy8KICAvLy8gSWYgYGNvbG9yU3RvcHNgIGlzIHByb3ZpZGVkLCBgY29sb3JTdG9wc1tpXWAgaXMgYSBudW1iZXIgZnJvbSAwLjAgdG8gMS4wCiAgLy8vIHRoYXQgc3BlY2lmaWVzIHdoZXJlIGBjb2xvcltpXWAgYmVnaW5zIGluIHRoZSBncmFkaWVudC4gSWYgYGNvbG9yU3RvcHNgIGlzCiAgLy8vIG5vdCBwcm92aWRlZCwgdGhlbiBvbmx5IHR3byBzdG9wcywgYXQgMC4wIGFuZCAxLjAsIGFyZSBpbXBsaWVkIChhbmQKICAvLy8gYGNvbG9yYCBtdXN0IHRoZXJlZm9yZSBvbmx5IGhhdmUgdHdvIGVudHJpZXMpLgogIC8vLwogIC8vLyBUaGUgYmVoYXZpb3IgYmVmb3JlIGFuZCBhZnRlciB0aGUgcmFkaXVzIGlzIGRlc2NyaWJlZCBieSB0aGUgYHRpbGVNb2RlYAogIC8vLyBhcmd1bWVudC4gRm9yIGRldGFpbHMsIHNlZSB0aGUgW1RpbGVNb2RlXSBlbnVtLgogIC8vLwogIC8vLyAhW10oaHR0cHM6Ly9mbHV0dGVyLmdpdGh1Yi5pby9hc3NldHMtZm9yLWFwaS1kb2NzL2Fzc2V0cy9kYXJ0LXVpL3RpbGVfbW9kZV9jbGFtcF9yYWRpYWwucG5nKQogIC8vLyAhW10oaHR0cHM6Ly9mbHV0dGVyLmdpdGh1Yi5pby9hc3NldHMtZm9yLWFwaS1kb2NzL2Fzc2V0cy9kYXJ0LXVpL3RpbGVfbW9kZV9taXJyb3JfcmFkaWFsLnBuZykKICAvLy8gIVtdKGh0dHBzOi8vZmx1dHRlci5naXRodWIuaW8vYXNzZXRzLWZvci1hcGktZG9jcy9hc3NldHMvZGFydC11aS90aWxlX21vZGVfcmVwZWF0ZWRfcmFkaWFsLnBuZykKICAvLy8KICAvLy8gSWYgYGNlbnRlcmAsIGByYWRpdXNgLCBgY29sb3JzYCwgb3IgYHRpbGVNb2RlYCBhcmUgbnVsbCwgb3IgaWYgYGNvbG9yc2Agb3IKICAvLy8gYGNvbG9yU3RvcHNgIGNvbnRhaW4gbnVsbCB2YWx1ZXMsIHRoaXMgY29uc3RydWN0b3Igd2lsbCB0aHJvdyBhCiAgLy8vIFtOb1N1Y2hNZXRob2RFcnJvcl0uCiAgLy8vCiAgLy8vIElmIGBtYXRyaXg0YCBpcyBwcm92aWRlZCwgdGhlIGdyYWRpZW50IGZpbGwgd2lsbCBiZSB0cmFuc2Zvcm1lZCBieSB0aGUKICAvLy8gc3BlY2lmaWVkIDR4NCBtYXRyaXggcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGUgc3lzdGVtLiBgbWF0cml4NGAgbXVzdAogIC8vLyBiZSBhIGNvbHVtbi1tYWpvciBtYXRyaXggcGFja2VkIGludG8gYSBsaXN0IG9mIDE2IHZhbHVlcy4KICAvLy8KICAvLy8gSWYgYGZvY2FsYCBpcyBwcm92aWRlZCBhbmQgbm90IGVxdWFsIHRvIGBjZW50ZXJgIGFuZCBgZm9jYWxSYWRpdXNgIGlzCiAgLy8vIHByb3ZpZGVkIGFuZCBub3QgZXF1YWwgdG8gMC4wLCB0aGUgZ2VuZXJhdGVkIHNoYWRlciB3aWxsIGJlIGEgdHdvIHBvaW50CiAgLy8vIGNvbmljYWwgcmFkaWFsIGdyYWRpZW50LCB3aXRoIGBmb2NhbGAgYmVpbmcgdGhlIGNlbnRlciBvZiB0aGUgZm9jYWwKICAvLy8gY2lyY2xlIGFuZCBgZm9jYWxSYWRpdXNgIGJlaW5nIHRoZSByYWRpdXMgb2YgdGhhdCBjaXJjbGUuIElmIGBmb2NhbGAgaXMKICAvLy8gcHJvdmlkZWQgYW5kIG5vdCBlcXVhbCB0byBgY2VudGVyYCwgYXQgbGVhc3Qgb25lIG9mIHRoZSB0d28gb2Zmc2V0cyBtdXN0CiAgLy8vIG5vdCBiZSBlcXVhbCB0byBbT2Zmc2V0Lnplcm9dLgogIEdyYWRpZW50LnJhZGlhbCgKICAgIE9mZnNldCBjZW50ZXIsCiAgICBkb3VibGUgcmFkaXVzLAogICAgTGlzdDxDb2xvcj4gY29sb3JzLCBbCiAgICBMaXN0PGRvdWJsZT4gY29sb3JTdG9wcywKICAgIFRpbGVNb2RlIHRpbGVNb2RlID0gVGlsZU1vZGUuY2xhbXAsCiAgICBGbG9hdDY0TGlzdCBtYXRyaXg0LAogICAgT2Zmc2V0IGZvY2FsLAogICAgZG91YmxlIGZvY2FsUmFkaXVzID0gMC4wCiAgXSkgOiBhc3NlcnQoX29mZnNldElzVmFsaWQoY2VudGVyKSksCiAgICAgICBhc3NlcnQoY29sb3JzICE9IG51bGwpLAogICAgICAgYXNzZXJ0KHRpbGVNb2RlICE9IG51bGwpLAogICAgICAgYXNzZXJ0KG1hdHJpeDQgPT0gbnVsbCB8fCBfbWF0cml4NElzVmFsaWQobWF0cml4NCkpLAogICAgICAgc3VwZXIuXygpIHsKICAgIGZvY2FsUmFkaXVzID8/PSAwLjA7CiAgICBfdmFsaWRhdGVDb2xvclN0b3BzKGNvbG9ycywgY29sb3JTdG9wcyk7CiAgICBmaW5hbCBJbnQzMkxpc3QgY29sb3JzQnVmZmVyID0gX2VuY29kZUNvbG9yTGlzdChjb2xvcnMpOwogICAgZmluYWwgRmxvYXQzMkxpc3QgY29sb3JTdG9wc0J1ZmZlciA9IGNvbG9yU3RvcHMgPT0gbnVsbCA/IG51bGwgOiBGbG9hdDMyTGlzdC5mcm9tTGlzdChjb2xvclN0b3BzKTsKCiAgICAvLyBJZiBmb2NhbCBpcyBudWxsIG9yIGZvY2FsIHJhZGl1cyBpcyBudWxsLCB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgcmVndWxhciByYWRpYWwgZ3JhZGllbnQKICAgIC8vIElmIGZvY2FsID09IGNlbnRlciBhbmQgdGhlIGZvY2FsIHJhZGl1cyBpcyAwLjAsIGl0J3Mgc3RpbGwgYSByZWd1bGFyIHJhZGlhbCBncmFkaWVudAogICAgaWYgKGZvY2FsID09IG51bGwgfHwgKGZvY2FsID09IGNlbnRlciAmJiBmb2NhbFJhZGl1cyA9PSAwLjApKSB7CiAgICAgIF9jb25zdHJ1Y3RvcigpOwogICAgICBfaW5pdFJhZGlhbChjZW50ZXIuZHgsIGNlbnRlci5keSwgcmFkaXVzLCBjb2xvcnNCdWZmZXIsIGNvbG9yU3RvcHNCdWZmZXIsIHRpbGVNb2RlLmluZGV4LCBtYXRyaXg0KTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChjZW50ZXIgIT0gT2Zmc2V0Lnplcm8gfHwgZm9jYWwgIT0gT2Zmc2V0Lnplcm8pOyAvLyB3aWxsIHJlc3VsdCBpbiBleGNlcHRpb24ocykgaW4gU2tpYSBzaWRlCiAgICAgIF9jb25zdHJ1Y3RvcigpOwogICAgICBfaW5pdENvbmljYWwoZm9jYWwuZHgsIGZvY2FsLmR5LCBmb2NhbFJhZGl1cywgY2VudGVyLmR4LCBjZW50ZXIuZHksIHJhZGl1cywgY29sb3JzQnVmZmVyLCBjb2xvclN0b3BzQnVmZmVyLCB0aWxlTW9kZS5pbmRleCwgbWF0cml4NCk7CiAgICB9CiAgfQogIHZvaWQgX2luaXRSYWRpYWwoZG91YmxlIGNlbnRlclgsIGRvdWJsZSBjZW50ZXJZLCBkb3VibGUgcmFkaXVzLCBJbnQzMkxpc3QgY29sb3JzLCBGbG9hdDMyTGlzdCBjb2xvclN0b3BzLCBpbnQgdGlsZU1vZGUsIEZsb2F0NjRMaXN0IG1hdHJpeDQpIG5hdGl2ZSAnR3JhZGllbnRfaW5pdFJhZGlhbCc7CiAgdm9pZCBfaW5pdENvbmljYWwoZG91YmxlIHN0YXJ0WCwgZG91YmxlIHN0YXJ0WSwgZG91YmxlIHN0YXJ0UmFkaXVzLCBkb3VibGUgZW5kWCwgZG91YmxlIGVuZFksIGRvdWJsZSBlbmRSYWRpdXMsIEludDMyTGlzdCBjb2xvcnMsIEZsb2F0MzJMaXN0IGNvbG9yU3RvcHMsIGludCB0aWxlTW9kZSwgRmxvYXQ2NExpc3QgbWF0cml4NCkgbmF0aXZlICdHcmFkaWVudF9pbml0VHdvUG9pbnRDb25pY2FsJzsKCiAgLy8vIENyZWF0ZXMgYSBzd2VlcCBncmFkaWVudCBjZW50ZXJlZCBhdCBgY2VudGVyYCB0aGF0IHN0YXJ0cyBhdCBgc3RhcnRBbmdsZWAKICAvLy8gYW5kIGVuZHMgYXQgYGVuZEFuZ2xlYC4KICAvLy8KICAvLy8gYHN0YXJ0QW5nbGVgIGFuZCBgZW5kQW5nbGVgIHNob3VsZCBiZSBwcm92aWRlZCBpbiByYWRpYW5zLCB3aXRoIHplcm8KICAvLy8gcmFkaWFucyBiZWluZyB0aGUgaG9yaXpvbnRhbCBsaW5lIHRvIHRoZSByaWdodCBvZiB0aGUgYGNlbnRlcmAgYW5kIHdpdGgKICAvLy8gcG9zaXRpdmUgYW5nbGVzIGdvaW5nIGNsb2Nrd2lzZSBhcm91bmQgdGhlIGBjZW50ZXJgLgogIC8vLwogIC8vLyBJZiBgY29sb3JTdG9wc2AgaXMgcHJvdmlkZWQsIGBjb2xvclN0b3BzW2ldYCBpcyBhIG51bWJlciBmcm9tIDAuMCB0byAxLjAKICAvLy8gdGhhdCBzcGVjaWZpZXMgd2hlcmUgYGNvbG9yW2ldYCBiZWdpbnMgaW4gdGhlIGdyYWRpZW50LiBJZiBgY29sb3JTdG9wc2AgaXMKICAvLy8gbm90IHByb3ZpZGVkLCB0aGVuIG9ubHkgdHdvIHN0b3BzLCBhdCAwLjAgYW5kIDEuMCwgYXJlIGltcGxpZWQgKGFuZAogIC8vLyBgY29sb3JgIG11c3QgdGhlcmVmb3JlIG9ubHkgaGF2ZSB0d28gZW50cmllcykuCiAgLy8vCiAgLy8vIFRoZSBiZWhhdmlvciBiZWZvcmUgYHN0YXJ0QW5nbGVgIGFuZCBhZnRlciBgZW5kQW5nbGVgIGlzIGRlc2NyaWJlZCBieSB0aGUKICAvLy8gYHRpbGVNb2RlYCBhcmd1bWVudC4gRm9yIGRldGFpbHMsIHNlZSB0aGUgW1RpbGVNb2RlXSBlbnVtLgogIC8vLwogIC8vLyAhW10oaHR0cHM6Ly9mbHV0dGVyLmdpdGh1Yi5pby9hc3NldHMtZm9yLWFwaS1kb2NzL2Fzc2V0cy9kYXJ0LXVpL3RpbGVfbW9kZV9jbGFtcF9zd2VlcC5wbmcpCiAgLy8vICFbXShodHRwczovL2ZsdXR0ZXIuZ2l0aHViLmlvL2Fzc2V0cy1mb3ItYXBpLWRvY3MvYXNzZXRzL2RhcnQtdWkvdGlsZV9tb2RlX21pcnJvcl9zd2VlcC5wbmcpCiAgLy8vICFbXShodHRwczovL2ZsdXR0ZXIuZ2l0aHViLmlvL2Fzc2V0cy1mb3ItYXBpLWRvY3MvYXNzZXRzL2RhcnQtdWkvdGlsZV9tb2RlX3JlcGVhdGVkX3N3ZWVwLnBuZykKICAvLy8KICAvLy8gSWYgYGNlbnRlcmAsIGBjb2xvcnNgLCBgdGlsZU1vZGVgLCBgc3RhcnRBbmdsZWAsIG9yIGBlbmRBbmdsZWAgYXJlIG51bGwsCiAgLy8vIG9yIGlmIGBjb2xvcnNgIG9yIGBjb2xvclN0b3BzYCBjb250YWluIG51bGwgdmFsdWVzLCB0aGlzIGNvbnN0cnVjdG9yIHdpbGwKICAvLy8gdGhyb3cgYSBbTm9TdWNoTWV0aG9kRXJyb3JdLgogIC8vLwogIC8vLyBJZiBgbWF0cml4NGAgaXMgcHJvdmlkZWQsIHRoZSBncmFkaWVudCBmaWxsIHdpbGwgYmUgdHJhbnNmb3JtZWQgYnkgdGhlCiAgLy8vIHNwZWNpZmllZCA0eDQgbWF0cml4IHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlIHN5c3RlbS4gYG1hdHJpeDRgIG11c3QKICAvLy8gYmUgYSBjb2x1bW4tbWFqb3IgbWF0cml4IHBhY2tlZCBpbnRvIGEgbGlzdCBvZiAxNiB2YWx1ZXMuCiAgR3JhZGllbnQuc3dlZXAoCiAgICBPZmZzZXQgY2VudGVyLAogICAgTGlzdDxDb2xvcj4gY29sb3JzLCBbCiAgICBMaXN0PGRvdWJsZT4gY29sb3JTdG9wcywKICAgIFRpbGVNb2RlIHRpbGVNb2RlID0gVGlsZU1vZGUuY2xhbXAsCiAgICBkb3VibGUgc3RhcnRBbmdsZSA9IDAuMCwKICAgIGRvdWJsZSBlbmRBbmdsZSA9IG1hdGgucGkgKiAyLAogICAgRmxvYXQ2NExpc3QgbWF0cml4NCwKICBdKSA6IGFzc2VydChfb2Zmc2V0SXNWYWxpZChjZW50ZXIpKSwKICAgICAgIGFzc2VydChjb2xvcnMgIT0gbnVsbCksCiAgICAgICBhc3NlcnQodGlsZU1vZGUgIT0gbnVsbCksCiAgICAgICBhc3NlcnQoc3RhcnRBbmdsZSAhPSBudWxsKSwKICAgICAgIGFzc2VydChlbmRBbmdsZSAhPSBudWxsKSwKICAgICAgIGFzc2VydChzdGFydEFuZ2xlIDwgZW5kQW5nbGUpLAogICAgICAgYXNzZXJ0KG1hdHJpeDQgPT0gbnVsbCB8fCBfbWF0cml4NElzVmFsaWQobWF0cml4NCkpLAogICAgICAgc3VwZXIuXygpIHsKICAgIF92YWxpZGF0ZUNvbG9yU3RvcHMoY29sb3JzLCBjb2xvclN0b3BzKTsKICAgIGZpbmFsIEludDMyTGlzdCBjb2xvcnNCdWZmZXIgPSBfZW5jb2RlQ29sb3JMaXN0KGNvbG9ycyk7CiAgICBmaW5hbCBGbG9hdDMyTGlzdCBjb2xvclN0b3BzQnVmZmVyID0gY29sb3JTdG9wcyA9PSBudWxsID8gbnVsbCA6IEZsb2F0MzJMaXN0LmZyb21MaXN0KGNvbG9yU3RvcHMpOwogICAgX2NvbnN0cnVjdG9yKCk7CiAgICBfaW5pdFN3ZWVwKGNlbnRlci5keCwgY2VudGVyLmR5LCBjb2xvcnNCdWZmZXIsIGNvbG9yU3RvcHNCdWZmZXIsIHRpbGVNb2RlLmluZGV4LCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgbWF0cml4NCk7CiAgfQogIHZvaWQgX2luaXRTd2VlcChkb3VibGUgY2VudGVyWCwgZG91YmxlIGNlbnRlclksIEludDMyTGlzdCBjb2xvcnMsIEZsb2F0MzJMaXN0IGNvbG9yU3RvcHMsIGludCB0aWxlTW9kZSwgZG91YmxlIHN0YXJ0QW5nbGUsIGRvdWJsZSBlbmRBbmdsZSwgRmxvYXQ2NExpc3QgbWF0cml4KSBuYXRpdmUgJ0dyYWRpZW50X2luaXRTd2VlcCc7CgogIHN0YXRpYyB2b2lkIF92YWxpZGF0ZUNvbG9yU3RvcHMoTGlzdDxDb2xvcj4gY29sb3JzLCBMaXN0PGRvdWJsZT4gY29sb3JTdG9wcykgewogICAgaWYgKGNvbG9yU3RvcHMgPT0gbnVsbCkgewogICAgICBpZiAoY29sb3JzLmxlbmd0aCAhPSAyKQogICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoJyJjb2xvcnMiIG11c3QgaGF2ZSBsZW5ndGggMiBpZiAiY29sb3JTdG9wcyIgaXMgb21pdHRlZC4nKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChjb2xvcnMubGVuZ3RoICE9IGNvbG9yU3RvcHMubGVuZ3RoKQogICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoJyJjb2xvcnMiIGFuZCAiY29sb3JTdG9wcyIgYXJndW1lbnRzIG11c3QgaGF2ZSBlcXVhbCBsZW5ndGguJyk7CiAgICB9CiAgfQp9CgovLy8gQSBzaGFkZXIgKGFzIHVzZWQgYnkgW1BhaW50LnNoYWRlcl0pIHRoYXQgdGlsZXMgYW4gaW1hZ2UuCmNsYXNzIEltYWdlU2hhZGVyIGV4dGVuZHMgU2hhZGVyIHsKICAvLy8gQ3JlYXRlcyBhbiBpbWFnZS10aWxpbmcgc2hhZGVyLiBUaGUgZmlyc3QgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBpbWFnZSB0bwogIC8vLyB0aWxlLiBUaGUgc2Vjb25kIGFuZCB0aGlyZCBhcmd1bWVudHMgc3BlY2lmeSB0aGUgW1RpbGVNb2RlXSBmb3IgdGhlIHgKICAvLy8gZGlyZWN0aW9uIGFuZCB5IGRpcmVjdGlvbiByZXNwZWN0aXZlbHkuIFRoZSBmb3VydGggYXJndW1lbnQgZ2l2ZXMgdGhlCiAgLy8vIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZWZmZWN0LiBBbGwgdGhlIGFyZ3VtZW50cyBhcmUgcmVxdWlyZWQgYW5kIG11c3Qgbm90CiAgLy8vIGJlIG51bGwuCiAgQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQogIEltYWdlU2hhZGVyKEltYWdlIGltYWdlLCBUaWxlTW9kZSB0bXgsIFRpbGVNb2RlIHRteSwgRmxvYXQ2NExpc3QgbWF0cml4NCkgOgogICAgYXNzZXJ0KGltYWdlICE9IG51bGwpLCAvLyBpbWFnZSBpcyBjaGVja2VkIG9uIHRoZSBlbmdpbmUgc2lkZQogICAgYXNzZXJ0KHRteCAhPSBudWxsKSwKICAgIGFzc2VydCh0bXkgIT0gbnVsbCksCiAgICBhc3NlcnQobWF0cml4NCAhPSBudWxsKSwKICAgIHN1cGVyLl8oKSB7CiAgICBpZiAobWF0cml4NC5sZW5ndGggIT0gMTYpCiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoJyJtYXRyaXg0IiBtdXN0IGhhdmUgMTYgZW50cmllcy4nKTsKICAgIF9jb25zdHJ1Y3RvcigpOwogICAgX2luaXRXaXRoSW1hZ2UoaW1hZ2UsIHRteC5pbmRleCwgdG15LmluZGV4LCBtYXRyaXg0KTsKICB9CiAgdm9pZCBfY29uc3RydWN0b3IoKSBuYXRpdmUgJ0ltYWdlU2hhZGVyX2NvbnN0cnVjdG9yJzsKICB2b2lkIF9pbml0V2l0aEltYWdlKEltYWdlIGltYWdlLCBpbnQgdG14LCBpbnQgdG15LCBGbG9hdDY0TGlzdCBtYXRyaXg0KSBuYXRpdmUgJ0ltYWdlU2hhZGVyX2luaXRXaXRoSW1hZ2UnOwp9CgovLy8gRGVmaW5lcyBob3cgYSBsaXN0IG9mIHBvaW50cyBpcyBpbnRlcnByZXRlZCB3aGVuIGRyYXdpbmcgYSBzZXQgb2YgdHJpYW5nbGVzLgovLy8KLy8vIFVzZWQgYnkgW0NhbnZhcy5kcmF3VmVydGljZXNdLgovLyBUaGVzZSBlbnVtIHZhbHVlcyBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIFNrVmVydGljZXM6OlZlcnRleE1vZGUuCmVudW0gVmVydGV4TW9kZSB7CiAgLy8vIERyYXcgZWFjaCBzZXF1ZW5jZSBvZiB0aHJlZSBwb2ludHMgYXMgdGhlIHZlcnRpY2VzIG9mIGEgdHJpYW5nbGUuCiAgdHJpYW5nbGVzLAoKICAvLy8gRHJhdyBlYWNoIHNsaWRpbmcgd2luZG93IG9mIHRocmVlIHBvaW50cyBhcyB0aGUgdmVydGljZXMgb2YgYSB0cmlhbmdsZS4KICB0cmlhbmdsZVN0cmlwLAoKICAvLy8gRHJhdyB0aGUgZmlyc3QgcG9pbnQgYW5kIGVhY2ggc2xpZGluZyB3aW5kb3cgb2YgdHdvIHBvaW50cyBhcyB0aGUgdmVydGljZXMgb2YgYSB0cmlhbmdsZS4KICB0cmlhbmdsZUZhbiwKfQoKLy8vIEEgc2V0IG9mIHZlcnRleCBkYXRhIHVzZWQgYnkgW0NhbnZhcy5kcmF3VmVydGljZXNdLgpjbGFzcyBWZXJ0aWNlcyBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMiB7CiAgLy8vIENyZWF0ZXMgYSBzZXQgb2YgdmVydGV4IGRhdGEgZm9yIHVzZSB3aXRoIFtDYW52YXMuZHJhd1ZlcnRpY2VzXS4KICAvLy8KICAvLy8gVGhlIFttb2RlXSBhbmQgW3Bvc2l0aW9uc10gcGFyYW1ldGVycyBtdXN0IG5vdCBiZSBudWxsLgogIC8vLwogIC8vLyBJZiB0aGUgW3RleHR1cmVDb29yZGluYXRlc10gb3IgW2NvbG9yc10gcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQsIHRoZXkgbXVzdAogIC8vLyBiZSB0aGUgc2FtZSBsZW5ndGggYXMgW3Bvc2l0aW9uc10uCiAgLy8vCiAgLy8vIElmIHRoZSBbaW5kaWNlc10gcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCBhbGwgdmFsdWVzIGluIHRoZSBsaXN0IG11c3QgYmUKICAvLy8gdmFsaWQgaW5kZXggdmFsdWVzIGZvciBbcG9zaXRpb25zXS4KICBWZXJ0aWNlcygKICAgIFZlcnRleE1vZGUgbW9kZSwKICAgIExpc3Q8T2Zmc2V0PiBwb3NpdGlvbnMsIHsKICAgIExpc3Q8T2Zmc2V0PiB0ZXh0dXJlQ29vcmRpbmF0ZXMsCiAgICBMaXN0PENvbG9yPiBjb2xvcnMsCiAgICBMaXN0PGludD4gaW5kaWNlcywKICB9KSA6IGFzc2VydChtb2RlICE9IG51bGwpLAogICAgICAgYXNzZXJ0KHBvc2l0aW9ucyAhPSBudWxsKSB7CiAgICBpZiAodGV4dHVyZUNvb3JkaW5hdGVzICE9IG51bGwgJiYgdGV4dHVyZUNvb3JkaW5hdGVzLmxlbmd0aCAhPSBwb3NpdGlvbnMubGVuZ3RoKQogICAgICB0aHJvdyBBcmd1bWVudEVycm9yKCcicG9zaXRpb25zIiBhbmQgInRleHR1cmVDb29yZGluYXRlcyIgbGVuZ3RocyBtdXN0IG1hdGNoLicpOwogICAgaWYgKGNvbG9ycyAhPSBudWxsICYmIGNvbG9ycy5sZW5ndGggIT0gcG9zaXRpb25zLmxlbmd0aCkKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcignInBvc2l0aW9ucyIgYW5kICJjb2xvcnMiIGxlbmd0aHMgbXVzdCBtYXRjaC4nKTsKICAgIGlmIChpbmRpY2VzICE9IG51bGwgJiYgaW5kaWNlcy5hbnkoKGludCBpKSA9PiBpIDwgMCB8fCBpID49IHBvc2l0aW9ucy5sZW5ndGgpKQogICAgICB0aHJvdyBBcmd1bWVudEVycm9yKCciaW5kaWNlcyIgdmFsdWVzIG11c3QgYmUgdmFsaWQgaW5kaWNlcyBpbiB0aGUgcG9zaXRpb25zIGxpc3QuJyk7CgogICAgZmluYWwgRmxvYXQzMkxpc3QgZW5jb2RlZFBvc2l0aW9ucyA9IF9lbmNvZGVQb2ludExpc3QocG9zaXRpb25zKTsKICAgIGZpbmFsIEZsb2F0MzJMaXN0IGVuY29kZWRUZXh0dXJlQ29vcmRpbmF0ZXMgPSAodGV4dHVyZUNvb3JkaW5hdGVzICE9IG51bGwpCiAgICAgID8gX2VuY29kZVBvaW50TGlzdCh0ZXh0dXJlQ29vcmRpbmF0ZXMpCiAgICAgIDogbnVsbDsKICAgIGZpbmFsIEludDMyTGlzdCBlbmNvZGVkQ29sb3JzID0gY29sb3JzICE9IG51bGwKICAgICAgPyBfZW5jb2RlQ29sb3JMaXN0KGNvbG9ycykKICAgICAgOiBudWxsOwogICAgZmluYWwgVWludDE2TGlzdCBlbmNvZGVkSW5kaWNlcyA9IGluZGljZXMgIT0gbnVsbAogICAgICA/IFVpbnQxNkxpc3QuZnJvbUxpc3QoaW5kaWNlcykKICAgICAgOiBudWxsOwoKICAgIF9jb25zdHJ1Y3RvcigpOwogICAgaWYgKCFfaW5pdChtb2RlLmluZGV4LCBlbmNvZGVkUG9zaXRpb25zLCBlbmNvZGVkVGV4dHVyZUNvb3JkaW5hdGVzLCBlbmNvZGVkQ29sb3JzLCBlbmNvZGVkSW5kaWNlcykpCiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgY29uZmlndXJhdGlvbiBmb3IgdmVydGljZXMuJyk7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIHNldCBvZiB2ZXJ0ZXggZGF0YSBmb3IgdXNlIHdpdGggW0NhbnZhcy5kcmF3VmVydGljZXNdLCBkaXJlY3RseQogIC8vLyB1c2luZyB0aGUgZW5jb2RpbmcgbWV0aG9kcyBvZiBbbmV3IFZlcnRpY2VzXS4KICAvLy8KICAvLy8gVGhlIFttb2RlXSBwYXJhbWV0ZXIgbXVzdCBub3QgYmUgbnVsbC4KICAvLy8KICAvLy8gVGhlIFtwb3NpdGlvbnNdIGxpc3QgaXMgaW50ZXJwcmV0ZWQgYXMgYSBsaXN0IG9mIHJlcGVhdGVkIHBhaXJzIG9mIHgseQogIC8vLyBjb29yZGluYXRlcy4gSXQgbXVzdCBub3QgYmUgbnVsbC4KICAvLy8KICAvLy8gVGhlIFt0ZXh0dXJlQ29vcmRpbmF0ZXNdIGxpc3QgaXMgaW50ZXJwcmV0ZWQgYXMgYSBsaXN0IG9mIHJlcGVhdGVkIHBhaXJzCiAgLy8vIG9mIHgseSBjb29yZGluYXRlcywgYW5kIG11c3QgYmUgdGhlIHNhbWUgbGVuZ3RoIG9mIFtwb3NpdGlvbnNdIGlmIGl0CiAgLy8vIGlzIG5vdCBudWxsLgogIC8vLwogIC8vLyBUaGUgW2NvbG9yc10gbGlzdCBpcyBpbnRlcnByZXRlZCBhcyBhIGxpc3Qgb2YgUkdCQSBlbmNvZGVkIGNvbG9ycywgc2ltaWxhcgogIC8vLyB0byBbQ29sb3IudmFsdWVdLiBJdCBtdXN0IGJlIGhhbGYgbGVuZ3RoIG9mIFtwb3NpdGlvbnNdIGlmIGl0IGlzIG5vdAogIC8vLyBudWxsLgogIC8vLwogIC8vLyBJZiB0aGUgW2luZGljZXNdIGxpc3QgaXMgcHJvdmlkZWQsIGFsbCB2YWx1ZXMgaW4gdGhlIGxpc3QgbXVzdCBiZQogIC8vLyB2YWxpZCBpbmRleCB2YWx1ZXMgZm9yIFtwb3NpdGlvbnNdLgogIFZlcnRpY2VzLnJhdygKICAgIFZlcnRleE1vZGUgbW9kZSwKICAgIEZsb2F0MzJMaXN0IHBvc2l0aW9ucywgewogICAgRmxvYXQzMkxpc3QgdGV4dHVyZUNvb3JkaW5hdGVzLAogICAgSW50MzJMaXN0IGNvbG9ycywKICAgIFVpbnQxNkxpc3QgaW5kaWNlcywKICB9KSA6IGFzc2VydChtb2RlICE9IG51bGwpLAogICAgICAgYXNzZXJ0KHBvc2l0aW9ucyAhPSBudWxsKSB7CiAgICBpZiAodGV4dHVyZUNvb3JkaW5hdGVzICE9IG51bGwgJiYgdGV4dHVyZUNvb3JkaW5hdGVzLmxlbmd0aCAhPSBwb3NpdGlvbnMubGVuZ3RoKQogICAgICB0aHJvdyBBcmd1bWVudEVycm9yKCcicG9zaXRpb25zIiBhbmQgInRleHR1cmVDb29yZGluYXRlcyIgbGVuZ3RocyBtdXN0IG1hdGNoLicpOwogICAgaWYgKGNvbG9ycyAhPSBudWxsICYmIGNvbG9ycy5sZW5ndGggKiAyICE9IHBvc2l0aW9ucy5sZW5ndGgpCiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoJyJwb3NpdGlvbnMiIGFuZCAiY29sb3JzIiBsZW5ndGhzIG11c3QgbWF0Y2guJyk7CiAgICBpZiAoaW5kaWNlcyAhPSBudWxsICYmIGluZGljZXMuYW55KChpbnQgaSkgPT4gaSA8IDAgfHwgaSA+PSBwb3NpdGlvbnMubGVuZ3RoKSkKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcignImluZGljZXMiIHZhbHVlcyBtdXN0IGJlIHZhbGlkIGluZGljZXMgaW4gdGhlIHBvc2l0aW9ucyBsaXN0LicpOwoKICAgIF9jb25zdHJ1Y3RvcigpOwogICAgaWYgKCFfaW5pdChtb2RlLmluZGV4LCBwb3NpdGlvbnMsIHRleHR1cmVDb29yZGluYXRlcywgY29sb3JzLCBpbmRpY2VzKSkKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcignSW52YWxpZCBjb25maWd1cmF0aW9uIGZvciB2ZXJ0aWNlcy4nKTsKICB9CgogIHZvaWQgX2NvbnN0cnVjdG9yKCkgbmF0aXZlICdWZXJ0aWNlc19jb25zdHJ1Y3Rvcic7CgogIGJvb2wgX2luaXQoaW50IG1vZGUsCiAgICAgICAgICAgICBGbG9hdDMyTGlzdCBwb3NpdGlvbnMsCiAgICAgICAgICAgICBGbG9hdDMyTGlzdCB0ZXh0dXJlQ29vcmRpbmF0ZXMsCiAgICAgICAgICAgICBJbnQzMkxpc3QgY29sb3JzLAogICAgICAgICAgICAgVWludDE2TGlzdCBpbmRpY2VzKSBuYXRpdmUgJ1ZlcnRpY2VzX2luaXQnOwp9CgovLy8gRGVmaW5lcyBob3cgYSBsaXN0IG9mIHBvaW50cyBpcyBpbnRlcnByZXRlZCB3aGVuIGRyYXdpbmcgYSBzZXQgb2YgcG9pbnRzLgovLy8KLy8gaWdub3JlOiBkZXByZWNhdGVkX21lbWJlcl91c2UKLy8vIFVzZWQgYnkgW0NhbnZhcy5kcmF3UG9pbnRzXS4KLy8gVGhlc2UgZW51bSB2YWx1ZXMgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCBTa0NhbnZhczo6UG9pbnRNb2RlLgplbnVtIFBvaW50TW9kZSB7CiAgLy8vIERyYXcgZWFjaCBwb2ludCBzZXBhcmF0ZWx5LgogIC8vLwogIC8vLyBJZiB0aGUgW1BhaW50LnN0cm9rZUNhcF0gaXMgW1N0cm9rZUNhcC5yb3VuZF0sIHRoZW4gZWFjaCBwb2ludCBpcyBkcmF3bgogIC8vLyBhcyBhIGNpcmNsZSB3aXRoIHRoZSBkaWFtZXRlciBvZiB0aGUgW1BhaW50LnN0cm9rZVdpZHRoXSwgZmlsbGVkIGFzCiAgLy8vIGRlc2NyaWJlZCBieSB0aGUgW1BhaW50XSAoaWdub3JpbmcgW1BhaW50LnN0eWxlXSkuCiAgLy8vCiAgLy8vIE90aGVyd2lzZSwgZWFjaCBwb2ludCBpcyBkcmF3biBhcyBhbiBheGlzLWFsaWduZWQgc3F1YXJlIHdpdGggc2lkZXMgb2YKICAvLy8gbGVuZ3RoIFtQYWludC5zdHJva2VXaWR0aF0sIGZpbGxlZCBhcyBkZXNjcmliZWQgYnkgdGhlIFtQYWludF0gKGlnbm9yaW5nCiAgLy8vIFtQYWludC5zdHlsZV0pLgogIHBvaW50cywKCiAgLy8vIERyYXcgZWFjaCBzZXF1ZW5jZSBvZiB0d28gcG9pbnRzIGFzIGEgbGluZSBzZWdtZW50LgogIC8vLwogIC8vLyBJZiB0aGUgbnVtYmVyIG9mIHBvaW50cyBpcyBvZGQsIHRoZW4gdGhlIGxhc3QgcG9pbnQgaXMgaWdub3JlZC4KICAvLy8KICAvLy8gVGhlIGxpbmVzIGFyZSBzdHJva2VkIGFzIGRlc2NyaWJlZCBieSB0aGUgW1BhaW50XSAoaWdub3JpbmcKICAvLy8gW1BhaW50LnN0eWxlXSkuCiAgbGluZXMsCgogIC8vLyBEcmF3IHRoZSBlbnRpcmUgc2VxdWVuY2Ugb2YgcG9pbnQgYXMgb25lIGxpbmUuCiAgLy8vCiAgLy8vIFRoZSBsaW5lcyBhcmUgc3Ryb2tlZCBhcyBkZXNjcmliZWQgYnkgdGhlIFtQYWludF0gKGlnbm9yaW5nCiAgLy8vIFtQYWludC5zdHlsZV0pLgogIHBvbHlnb24sCn0KCi8vLyBEZWZpbmVzIGhvdyBhIG5ldyBjbGlwIHJlZ2lvbiBzaG91bGQgYmUgbWVyZ2VkIHdpdGggdGhlIGV4aXN0aW5nIGNsaXAKLy8vIHJlZ2lvbi4KLy8vCi8vLyBVc2VkIGJ5IFtDYW52YXMuY2xpcFJlY3RdLgplbnVtIENsaXBPcCB7CiAgLy8vIFN1YnRyYWN0IHRoZSBuZXcgcmVnaW9uIGZyb20gdGhlIGV4aXN0aW5nIHJlZ2lvbi4KICBkaWZmZXJlbmNlLAoKICAvLy8gSW50ZXJzZWN0IHRoZSBuZXcgcmVnaW9uIGZyb20gdGhlIGV4aXN0aW5nIHJlZ2lvbi4KICBpbnRlcnNlY3QsCn0KCi8vLyBBbiBpbnRlcmZhY2UgZm9yIHJlY29yZGluZyBncmFwaGljYWwgb3BlcmF0aW9ucy4KLy8vCi8vLyBbQ2FudmFzXSBvYmplY3RzIGFyZSB1c2VkIGluIGNyZWF0aW5nIFtQaWN0dXJlXSBvYmplY3RzLCB3aGljaCBjYW4KLy8vIHRoZW1zZWx2ZXMgYmUgdXNlZCB3aXRoIGEgW1NjZW5lQnVpbGRlcl0gdG8gYnVpbGQgYSBbU2NlbmVdLiBJbgovLy8gbm9ybWFsIHVzYWdlLCBob3dldmVyLCB0aGlzIGlzIGFsbCBoYW5kbGVkIGJ5IHRoZSBmcmFtZXdvcmsuCi8vLwovLy8gQSBjYW52YXMgaGFzIGEgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggd2hpY2ggaXMgYXBwbGllZCB0byBhbGwKLy8vIG9wZXJhdGlvbnMuIEluaXRpYWxseSwgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBpcyB0aGUgaWRlbnRpdHkgdHJhbnNmb3JtLgovLy8gSXQgY2FuIGJlIG1vZGlmaWVkIHVzaW5nIHRoZSBbdHJhbnNsYXRlXSwgW3NjYWxlXSwgW3JvdGF0ZV0sIFtza2V3XSwKLy8vIGFuZCBbdHJhbnNmb3JtXSBtZXRob2RzLgovLy8KLy8vIEEgY2FudmFzIGFsc28gaGFzIGEgY3VycmVudCBjbGlwIHJlZ2lvbiB3aGljaCBpcyBhcHBsaWVkIHRvIGFsbCBvcGVyYXRpb25zLgovLy8gSW5pdGlhbGx5LCB0aGUgY2xpcCByZWdpb24gaXMgaW5maW5pdGUuIEl0IGNhbiBiZSBtb2RpZmllZCB1c2luZyB0aGUKLy8vIFtjbGlwUmVjdF0sIFtjbGlwUlJlY3RdLCBhbmQgW2NsaXBQYXRoXSBtZXRob2RzLgovLy8KLy8vIFRoZSBjdXJyZW50IHRyYW5zZm9ybSBhbmQgY2xpcCBjYW4gYmUgc2F2ZWQgYW5kIHJlc3RvcmVkIHVzaW5nIHRoZSBzdGFjawovLy8gbWFuYWdlZCBieSB0aGUgW3NhdmVdLCBbc2F2ZUxheWVyXSwgYW5kIFtyZXN0b3JlXSBtZXRob2RzLgpjbGFzcyBDYW52YXMgZXh0ZW5kcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczIgewogIC8vLyBDcmVhdGVzIGEgY2FudmFzIGZvciByZWNvcmRpbmcgZ3JhcGhpY2FsIG9wZXJhdGlvbnMgaW50byB0aGUKICAvLy8gZ2l2ZW4gcGljdHVyZSByZWNvcmRlci4KICAvLy8KICAvLy8gR3JhcGhpY2FsIG9wZXJhdGlvbnMgdGhhdCBhZmZlY3QgcGl4ZWxzIGVudGlyZWx5IG91dHNpZGUgdGhlIGdpdmVuCiAgLy8vIGBjdWxsUmVjdGAgbWlnaHQgYmUgZGlzY2FyZGVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbi4gSG93ZXZlciwgdGhlCiAgLy8vIGltcGxlbWVudGF0aW9uIG1pZ2h0IGRyYXcgb3V0c2lkZSB0aGVzZSBib3VuZHMgaWYsIGZvciBleGFtcGxlLCBhIGNvbW1hbmQKICAvLy8gZHJhd3MgcGFydGlhbGx5IGluc2lkZSBhbmQgb3V0c2lkZSB0aGUgYGN1bGxSZWN0YC4gVG8gZW5zdXJlIHRoYXQgcGl4ZWxzCiAgLy8vIG91dHNpZGUgYSBnaXZlbiByZWdpb24gYXJlIGRpc2NhcmRlZCwgY29uc2lkZXIgdXNpbmcgYSBbY2xpcFJlY3RdLiBUaGUKICAvLy8gYGN1bGxSZWN0YCBpcyBvcHRpb25hbDsgYnkgZGVmYXVsdCwgYWxsIG9wZXJhdGlvbnMgYXJlIGtlcHQuCiAgLy8vCiAgLy8vIFRvIGVuZCB0aGUgcmVjb3JkaW5nLCBjYWxsIFtQaWN0dXJlUmVjb3JkZXIuZW5kUmVjb3JkaW5nXSBvbiB0aGUKICAvLy8gZ2l2ZW4gcmVjb3JkZXIuCiAgQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQogIENhbnZhcyhQaWN0dXJlUmVjb3JkZXIgcmVjb3JkZXIsIFsgUmVjdCBjdWxsUmVjdCBdKSA6IGFzc2VydChyZWNvcmRlciAhPSBudWxsKSB7CiAgICBpZiAocmVjb3JkZXIuaXNSZWNvcmRpbmcpCiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoJyJyZWNvcmRlciIgbXVzdCBub3QgYWxyZWFkeSBiZSBhc3NvY2lhdGVkIHdpdGggYW5vdGhlciBDYW52YXMuJyk7CiAgICBjdWxsUmVjdCA/Pz0gUmVjdC5sYXJnZXN0OwogICAgX2NvbnN0cnVjdG9yKHJlY29yZGVyLCBjdWxsUmVjdC5sZWZ0LCBjdWxsUmVjdC50b3AsIGN1bGxSZWN0LnJpZ2h0LCBjdWxsUmVjdC5ib3R0b20pOwogIH0KICB2b2lkIF9jb25zdHJ1Y3RvcihQaWN0dXJlUmVjb3JkZXIgcmVjb3JkZXIsCiAgICAgICAgICAgICAgICAgICAgZG91YmxlIGxlZnQsCiAgICAgICAgICAgICAgICAgICAgZG91YmxlIHRvcCwKICAgICAgICAgICAgICAgICAgICBkb3VibGUgcmlnaHQsCiAgICAgICAgICAgICAgICAgICAgZG91YmxlIGJvdHRvbSkgbmF0aXZlICdDYW52YXNfY29uc3RydWN0b3InOwoKICAvLy8gU2F2ZXMgYSBjb3B5IG9mIHRoZSBjdXJyZW50IHRyYW5zZm9ybSBhbmQgY2xpcCBvbiB0aGUgc2F2ZSBzdGFjay4KICAvLy8KICAvLy8gQ2FsbCBbcmVzdG9yZV0gdG8gcG9wIHRoZSBzYXZlIHN0YWNrLgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogW3NhdmVMYXllcl0sIHdoaWNoIGRvZXMgdGhlIHNhbWUgdGhpbmcgYnV0IGFkZGl0aW9uYWxseSBhbHNvIGdyb3VwcyB0aGUKICAvLy8gICAgY29tbWFuZHMgZG9uZSB1bnRpbCB0aGUgbWF0Y2hpbmcgW3Jlc3RvcmVdLgogIHZvaWQgc2F2ZSgpIG5hdGl2ZSAnQ2FudmFzX3NhdmUnOwoKICAvLy8gU2F2ZXMgYSBjb3B5IG9mIHRoZSBjdXJyZW50IHRyYW5zZm9ybSBhbmQgY2xpcCBvbiB0aGUgc2F2ZSBzdGFjaywgYW5kIHRoZW4KICAvLy8gY3JlYXRlcyBhIG5ldyBncm91cCB3aGljaCBzdWJzZXF1ZW50IGNhbGxzIHdpbGwgYmVjb21lIGEgcGFydCBvZi4gV2hlbiB0aGUKICAvLy8gc2F2ZSBzdGFjayBpcyBsYXRlciBwb3BwZWQsIHRoZSBncm91cCB3aWxsIGJlIGZsYXR0ZW5lZCBpbnRvIGEgbGF5ZXIgYW5kCiAgLy8vIGhhdmUgdGhlIGdpdmVuIGBwYWludGAncyBbUGFpbnQuY29sb3JGaWx0ZXJdIGFuZCBbUGFpbnQuYmxlbmRNb2RlXQogIC8vLyBhcHBsaWVkLgogIC8vLwogIC8vLyBUaGlzIGxldHMgeW91IGNyZWF0ZSBjb21wb3NpdGUgZWZmZWN0cywgZm9yIGV4YW1wbGUgbWFraW5nIGEgZ3JvdXAgb2YKICAvLy8gZHJhd2luZyBjb21tYW5kcyBzZW1pLXRyYW5zcGFyZW50LiBXaXRob3V0IHVzaW5nIFtzYXZlTGF5ZXJdLCBlYWNoIHBhcnQgb2YKICAvLy8gdGhlIGdyb3VwIHdvdWxkIGJlIHBhaW50ZWQgaW5kaXZpZHVhbGx5LCBzbyB3aGVyZSB0aGV5IG92ZXJsYXAgd291bGQgYmUKICAvLy8gZGFya2VyIHRoYW4gd2hlcmUgdGhleSBkbyBub3QuIEJ5IHVzaW5nIFtzYXZlTGF5ZXJdIHRvIGdyb3VwIHRoZW0KICAvLy8gdG9nZXRoZXIsIHRoZXkgY2FuIGJlIGRyYXduIHdpdGggYW4gb3BhcXVlIGNvbG9yIGF0IGZpcnN0LCBhbmQgdGhlbiB0aGUKICAvLy8gZW50aXJlIGdyb3VwIGNhbiBiZSBtYWRlIHRyYW5zcGFyZW50IHVzaW5nIHRoZSBbc2F2ZUxheWVyXSdzIHBhaW50LgogIC8vLwogIC8vLyBDYWxsIFtyZXN0b3JlXSB0byBwb3AgdGhlIHNhdmUgc3RhY2sgYW5kIGFwcGx5IHRoZSBwYWludCB0byB0aGUgZ3JvdXAuCiAgLy8vCiAgLy8vICMjIFVzaW5nIHNhdmVMYXllciB3aXRoIGNsaXBzCiAgLy8vCiAgLy8vIFdoZW4gYSByZWN0YW5ndWxhciBjbGlwIG9wZXJhdGlvbiAoZnJvbSBbY2xpcFJlY3RdKSBpcyBub3QgYXhpcy1hbGlnbmVkCiAgLy8vIHdpdGggdGhlIHJhc3RlciBidWZmZXIsIG9yIHdoZW4gdGhlIGNsaXAgb3BlcmF0aW9uIGlzIG5vdCByZWN0aWxpbmVhcgogIC8vLyAoZS5nLiBiZWNhdXNlIGl0IGlzIGEgcm91bmRlZCByZWN0YW5nbGUgY2xpcCBjcmVhdGVkIGJ5IFtjbGlwUlJlY3RdIG9yIGFuCiAgLy8vIGFyYml0cmFyaWx5IGNvbXBsaWNhdGVkIHBhdGggY2xpcCBjcmVhdGVkIGJ5IFtjbGlwUGF0aF0pLCB0aGUgZWRnZSBvZiB0aGUKICAvLy8gY2xpcCBuZWVkcyB0byBiZSBhbnRpLWFsaWFzZWQuCiAgLy8vCiAgLy8vIElmIHR3byBkcmF3IGNhbGxzIG92ZXJsYXAgYXQgdGhlIGVkZ2Ugb2Ygc3VjaCBhIGNsaXBwZWQgcmVnaW9uLCB3aXRob3V0CiAgLy8vIHVzaW5nIFtzYXZlTGF5ZXJdLCB0aGUgZmlyc3QgZHJhd2luZyB3aWxsIGJlIGFudGktYWxpYXNlZCB3aXRoIHRoZQogIC8vLyBiYWNrZ3JvdW5kIGZpcnN0LCBhbmQgdGhlbiB0aGUgc2Vjb25kIHdpbGwgYmUgYW50aS1hbGlhc2VkIHdpdGggdGhlIHJlc3VsdAogIC8vLyBvZiBibGVuZGluZyB0aGUgZmlyc3QgZHJhd2luZyBhbmQgdGhlIGJhY2tncm91bmQuIE9uIHRoZSBvdGhlciBoYW5kLCBpZgogIC8vLyBbc2F2ZUxheWVyXSBpcyB1c2VkIGltbWVkaWF0ZWx5IGFmdGVyIGVzdGFibGlzaGluZyB0aGUgY2xpcCwgdGhlIHNlY29uZAogIC8vLyBkcmF3aW5nIHdpbGwgY292ZXIgdGhlIGZpcnN0IGluIHRoZSBsYXllciwgYW5kIHRodXMgdGhlIHNlY29uZCBhbG9uZSB3aWxsCiAgLy8vIGJlIGFudGktYWxpYXNlZCB3aXRoIHRoZSBiYWNrZ3JvdW5kIHdoZW4gdGhlIGxheWVyIGlzIGNsaXBwZWQgYW5kCiAgLy8vIGNvbXBvc2l0ZWQgKHdoZW4gW3Jlc3RvcmVdIGlzIGNhbGxlZCkuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCB0aGlzIFtDdXN0b21QYWludGVyLnBhaW50XSBtZXRob2QgcGFpbnRzIGEgY2xlYW4gd2hpdGUKICAvLy8gcm91bmRlZCByZWN0YW5nbGU6CiAgLy8vCiAgLy8vIGBgYGRhcnQKICAvLy8gdm9pZCBwYWludChDYW52YXMgY2FudmFzLCBTaXplIHNpemUpIHsKICAvLy8gICBSZWN0IHJlY3QgPSBPZmZzZXQuemVybyAmIHNpemU7CiAgLy8vICAgY2FudmFzLnNhdmUoKTsKICAvLy8gICBjYW52YXMuY2xpcFJSZWN0KG5ldyBSUmVjdC5mcm9tUmVjdFhZKHJlY3QsIDEwMC4wLCAxMDAuMCkpOwogIC8vLyAgIGNhbnZhcy5zYXZlTGF5ZXIocmVjdCwgUGFpbnQoKSk7CiAgLy8vICAgY2FudmFzLmRyYXdQYWludChuZXcgUGFpbnQoKS4uY29sb3IgPSBDb2xvcnMucmVkKTsKICAvLy8gICBjYW52YXMuZHJhd1BhaW50KG5ldyBQYWludCgpLi5jb2xvciA9IENvbG9ycy53aGl0ZSk7CiAgLy8vICAgY2FudmFzLnJlc3RvcmUoKTsKICAvLy8gICBjYW52YXMucmVzdG9yZSgpOwogIC8vLyB9CiAgLy8vIGBgYAogIC8vLwogIC8vLyBPbiB0aGUgb3RoZXIgaGFuZCwgdGhpcyBvbmUgcmVuZGVycyBhIHJlZCBvdXRsaW5lLCB0aGUgcmVzdWx0IG9mIHRoZSByZWQKICAvLy8gcGFpbnQgYmVpbmcgYW50aS1hbGlhc2VkIHdpdGggdGhlIGJhY2tncm91bmQgYXQgdGhlIGNsaXAgZWRnZSwgdGhlbiB0aGUKICAvLy8gd2hpdGUgcGFpbnQgYmVpbmcgc2ltaWxhcmx5IGFudGktYWxpYXNlZCB3aXRoIHRoZSBiYWNrZ3JvdW5kIF9pbmNsdWRpbmcKICAvLy8gdGhlIGNsaXBwZWQgcmVkIHBhaW50XzoKICAvLy8KICAvLy8gYGBgZGFydAogIC8vLyB2b2lkIHBhaW50KENhbnZhcyBjYW52YXMsIFNpemUgc2l6ZSkgewogIC8vLyAgIC8vICh0aGlzIGV4YW1wbGUgcmVuZGVycyBwb29ybHksIHByZWZlciB0aGUgZXhhbXBsZSBhYm92ZSkKICAvLy8gICBSZWN0IHJlY3QgPSBPZmZzZXQuemVybyAmIHNpemU7CiAgLy8vICAgY2FudmFzLnNhdmUoKTsKICAvLy8gICBjYW52YXMuY2xpcFJSZWN0KG5ldyBSUmVjdC5mcm9tUmVjdFhZKHJlY3QsIDEwMC4wLCAxMDAuMCkpOwogIC8vLyAgIGNhbnZhcy5kcmF3UGFpbnQobmV3IFBhaW50KCkuLmNvbG9yID0gQ29sb3JzLnJlZCk7CiAgLy8vICAgY2FudmFzLmRyYXdQYWludChuZXcgUGFpbnQoKS4uY29sb3IgPSBDb2xvcnMud2hpdGUpOwogIC8vLyAgIGNhbnZhcy5yZXN0b3JlKCk7CiAgLy8vIH0KICAvLy8gYGBgCiAgLy8vCiAgLy8vIFRoaXMgcG9pbnQgaXMgbW9vdCBpZiB0aGUgY2xpcCBvbmx5IGNsaXBzIG9uZSBkcmF3IG9wZXJhdGlvbi4gRm9yIGV4YW1wbGUsCiAgLy8vIHRoZSBmb2xsb3dpbmcgcGFpbnQgbWV0aG9kIHBhaW50cyBhIHBhaXIgb2YgY2xlYW4gd2hpdGUgcm91bmRlZAogIC8vLyByZWN0YW5nbGVzLCBldmVuIHRob3VnaCB0aGUgY2xpcHMgYXJlIG5vdCBkb25lIG9uIGEgc2VwYXJhdGUgbGF5ZXI6CiAgLy8vCiAgLy8vIGBgYGRhcnQKICAvLy8gdm9pZCBwYWludChDYW52YXMgY2FudmFzLCBTaXplIHNpemUpIHsKICAvLy8gICBjYW52YXMuc2F2ZSgpOwogIC8vLyAgIGNhbnZhcy5jbGlwUlJlY3QobmV3IFJSZWN0LmZyb21SZWN0WFkoT2Zmc2V0Lnplcm8gJiAoc2l6ZSAvIDIuMCksIDUwLjAsIDUwLjApKTsKICAvLy8gICBjYW52YXMuZHJhd1BhaW50KG5ldyBQYWludCgpLi5jb2xvciA9IENvbG9ycy53aGl0ZSk7CiAgLy8vICAgY2FudmFzLnJlc3RvcmUoKTsKICAvLy8gICBjYW52YXMuc2F2ZSgpOwogIC8vLyAgIGNhbnZhcy5jbGlwUlJlY3QobmV3IFJSZWN0LmZyb21SZWN0WFkoc2l6ZS5jZW50ZXIoT2Zmc2V0Lnplcm8pICYgKHNpemUgLyAyLjApLCA1MC4wLCA1MC4wKSk7CiAgLy8vICAgY2FudmFzLmRyYXdQYWludChuZXcgUGFpbnQoKS4uY29sb3IgPSBDb2xvcnMud2hpdGUpOwogIC8vLyAgIGNhbnZhcy5yZXN0b3JlKCk7CiAgLy8vIH0KICAvLy8gYGBgCiAgLy8vCiAgLy8vIChJbmNpZGVudGFsbHksIHJhdGhlciB0aGFuIHVzaW5nIFtjbGlwUlJlY3RdIGFuZCBbZHJhd1BhaW50XSB0byBkcmF3CiAgLy8vIHJvdW5kZWQgcmVjdGFuZ2xlcyBsaWtlIHRoaXMsIHByZWZlciB0aGUgW2RyYXdSUmVjdF0gbWV0aG9kLiBUaGVzZQogIC8vLyBleGFtcGxlcyBhcmUgdXNpbmcgW2RyYXdQYWludF0gYXMgYSBwcm94eSBmb3IgImNvbXBsaWNhdGVkIGRyYXcgb3BlcmF0aW9ucwogIC8vLyB0aGF0IHdpbGwgZ2V0IGNsaXBwZWQiLCB0byBpbGx1c3RyYXRlIHRoZSBwb2ludC4pCiAgLy8vCiAgLy8vICMjIFBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zCiAgLy8vCiAgLy8vIEdlbmVyYWxseSBzcGVha2luZywgW3NhdmVMYXllcl0gaXMgcmVsYXRpdmVseSBleHBlbnNpdmUuCiAgLy8vCiAgLy8vIFRoZXJlIGFyZSBhIHNldmVyYWwgZGlmZmVyZW50IGhhcmR3YXJlIGFyY2hpdGVjdHVyZXMgZm9yIEdQVXMgKGdyYXBoaWNzCiAgLy8vIHByb2Nlc3NpbmcgdW5pdHMsIHRoZSBoYXJkd2FyZSB0aGF0IGhhbmRsZXMgZ3JhcGhpY3MpLCBidXQgbW9zdCBvZiB0aGVtCiAgLy8vIGludm9sdmUgYmF0Y2hpbmcgY29tbWFuZHMgYW5kIHJlb3JkZXJpbmcgdGhlbSBmb3IgcGVyZm9ybWFuY2UuIFdoZW4gbGF5ZXJzCiAgLy8vIGFyZSB1c2VkLCB0aGV5IGNhdXNlIHRoZSByZW5kZXJpbmcgcGlwZWxpbmUgdG8gaGF2ZSB0byBzd2l0Y2ggcmVuZGVyCiAgLy8vIHRhcmdldCAoZnJvbSBvbmUgbGF5ZXIgdG8gYW5vdGhlcikuIFJlbmRlciB0YXJnZXQgc3dpdGNoZXMgY2FuIGZsdXNoIHRoZQogIC8vLyBHUFUncyBjb21tYW5kIGJ1ZmZlciwgd2hpY2ggdHlwaWNhbGx5IG1lYW5zIHRoYXQgb3B0aW1pemF0aW9ucyB0aGF0IG9uZQogIC8vLyBjb3VsZCBnZXQgd2l0aCBsYXJnZXIgYmF0Y2hpbmcgYXJlIGxvc3QuIFJlbmRlciB0YXJnZXQgc3dpdGNoZXMgYWxzbwogIC8vLyBnZW5lcmF0ZSBhIGxvdCBvZiBtZW1vcnkgY2h1cm4gYmVjYXVzZSB0aGUgR1BVIG5lZWRzIHRvIGNvcHkgb3V0IHRoZQogIC8vLyBjdXJyZW50IGZyYW1lIGJ1ZmZlciBjb250ZW50cyBmcm9tIHRoZSBwYXJ0IG9mIG1lbW9yeSB0aGF0J3Mgb3B0aW1pemVkIGZvcgogIC8vLyB3cml0aW5nLCBhbmQgdGhlbiBuZWVkcyB0byBjb3B5IGl0IGJhY2sgaW4gb25jZSB0aGUgcHJldmlvdXMgcmVuZGVyIHRhcmdldAogIC8vLyAobGF5ZXIpIGlzIHJlc3RvcmVkLgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogW3NhdmVdLCB3aGljaCBzYXZlcyB0aGUgY3VycmVudCBzdGF0ZSwgYnV0IGRvZXMgbm90IGNyZWF0ZSBhIG5ldyBsYXllcgogIC8vLyAgICBmb3Igc3Vic2VxdWVudCBjb21tYW5kcy4KICAvLy8gICogW0JsZW5kTW9kZV0sIHdoaWNoIGRpc2N1c3NlcyB0aGUgdXNlIG9mIFtQYWludC5ibGVuZE1vZGVdIHdpdGgKICAvLy8gICAgW3NhdmVMYXllcl0uCiAgdm9pZCBzYXZlTGF5ZXIoUmVjdCBib3VuZHMsIFBhaW50IHBhaW50KSB7CiAgICBhc3NlcnQocGFpbnQgIT0gbnVsbCk7CiAgICBpZiAoYm91bmRzID09IG51bGwpIHsKICAgICAgX3NhdmVMYXllcldpdGhvdXRCb3VuZHMocGFpbnQuX29iamVjdHMsIHBhaW50Ll9kYXRhKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChfcmVjdElzVmFsaWQoYm91bmRzKSk7CiAgICAgIF9zYXZlTGF5ZXIoYm91bmRzLmxlZnQsIGJvdW5kcy50b3AsIGJvdW5kcy5yaWdodCwgYm91bmRzLmJvdHRvbSwKICAgICAgICAgICAgICAgICBwYWludC5fb2JqZWN0cywgcGFpbnQuX2RhdGEpOwogICAgfQogIH0KICB2b2lkIF9zYXZlTGF5ZXJXaXRob3V0Qm91bmRzKExpc3Q8ZHluYW1pYz4gcGFpbnRPYmplY3RzLCBCeXRlRGF0YSBwYWludERhdGEpCiAgICAgIG5hdGl2ZSAnQ2FudmFzX3NhdmVMYXllcldpdGhvdXRCb3VuZHMnOwogIHZvaWQgX3NhdmVMYXllcihkb3VibGUgbGVmdCwKICAgICAgICAgICAgICAgICAgZG91YmxlIHRvcCwKICAgICAgICAgICAgICAgICAgZG91YmxlIHJpZ2h0LAogICAgICAgICAgICAgICAgICBkb3VibGUgYm90dG9tLAogICAgICAgICAgICAgICAgICBMaXN0PGR5bmFtaWM+IHBhaW50T2JqZWN0cywKICAgICAgICAgICAgICAgICAgQnl0ZURhdGEgcGFpbnREYXRhKSBuYXRpdmUgJ0NhbnZhc19zYXZlTGF5ZXInOwoKICAvLy8gUG9wcyB0aGUgY3VycmVudCBzYXZlIHN0YWNrLCBpZiB0aGVyZSBpcyBhbnl0aGluZyB0byBwb3AuCiAgLy8vIE90aGVyd2lzZSwgZG9lcyBub3RoaW5nLgogIC8vLwogIC8vLyBVc2UgW3NhdmVdIGFuZCBbc2F2ZUxheWVyXSB0byBwdXNoIHN0YXRlIG9udG8gdGhlIHN0YWNrLgogIC8vLwogIC8vLyBJZiB0aGUgc3RhdGUgd2FzIHB1c2hlZCB3aXRoIHdpdGggW3NhdmVMYXllcl0sIHRoZW4gdGhpcyBjYWxsIHdpbGwgYWxzbwogIC8vLyBjYXVzZSB0aGUgbmV3IGxheWVyIHRvIGJlIGNvbXBvc2l0ZWQgaW50byB0aGUgcHJldmlvdXMgbGF5ZXIuCiAgdm9pZCByZXN0b3JlKCkgbmF0aXZlICdDYW52YXNfcmVzdG9yZSc7CgogIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgb24gdGhlIHNhdmUgc3RhY2ssIGluY2x1ZGluZyB0aGUKICAvLy8gaW5pdGlhbCBzdGF0ZS4gVGhpcyBtZWFucyBpdCByZXR1cm5zIDEgZm9yIGEgY2xlYW4gY2FudmFzLCBhbmQKICAvLy8gdGhhdCBlYWNoIGNhbGwgdG8gW3NhdmVdIGFuZCBbc2F2ZUxheWVyXSBpbmNyZW1lbnRzIGl0LCBhbmQgdGhhdAogIC8vLyBlYWNoIG1hdGNoaW5nIGNhbGwgdG8gW3Jlc3RvcmVdIGRlY3JlbWVudHMgaXQuCiAgLy8vCiAgLy8vIFRoaXMgbnVtYmVyIGNhbm5vdCBnbyBiZWxvdyAxLgogIGludCBnZXRTYXZlQ291bnQoKSBuYXRpdmUgJ0NhbnZhc19nZXRTYXZlQ291bnQnOwoKICAvLy8gQWRkIGEgdHJhbnNsYXRpb24gdG8gdGhlIGN1cnJlbnQgdHJhbnNmb3JtLCBzaGlmdGluZyB0aGUgY29vcmRpbmF0ZSBzcGFjZQogIC8vLyBob3Jpem9udGFsbHkgYnkgdGhlIGZpcnN0IGFyZ3VtZW50IGFuZCB2ZXJ0aWNhbGx5IGJ5IHRoZSBzZWNvbmQgYXJndW1lbnQuCiAgdm9pZCB0cmFuc2xhdGUoZG91YmxlIGR4LCBkb3VibGUgZHkpIG5hdGl2ZSAnQ2FudmFzX3RyYW5zbGF0ZSc7CgogIC8vLyBBZGQgYW4gYXhpcy1hbGlnbmVkIHNjYWxlIHRvIHRoZSBjdXJyZW50IHRyYW5zZm9ybSwgc2NhbGluZyBieSB0aGUgZmlyc3QKICAvLy8gYXJndW1lbnQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uIGFuZCB0aGUgc2Vjb25kIGluIHRoZSB2ZXJ0aWNhbAogIC8vLyBkaXJlY3Rpb24uCiAgLy8vCiAgLy8vIElmIFtzeV0gaXMgdW5zcGVjaWZpZWQsIFtzeF0gd2lsbCBiZSB1c2VkIGZvciB0aGUgc2NhbGUgaW4gYm90aAogIC8vLyBkaXJlY3Rpb25zLgogIHZvaWQgc2NhbGUoZG91YmxlIHN4LCBbZG91YmxlIHN5XSkgPT4gX3NjYWxlKHN4LCBzeSA/PyBzeCk7CgogIHZvaWQgX3NjYWxlKGRvdWJsZSBzeCwgZG91YmxlIHN5KSBuYXRpdmUgJ0NhbnZhc19zY2FsZSc7CgogIC8vLyBBZGQgYSByb3RhdGlvbiB0byB0aGUgY3VycmVudCB0cmFuc2Zvcm0uIFRoZSBhcmd1bWVudCBpcyBpbiByYWRpYW5zIGNsb2Nrd2lzZS4KICB2b2lkIHJvdGF0ZShkb3VibGUgcmFkaWFucykgbmF0aXZlICdDYW52YXNfcm90YXRlJzsKCiAgLy8vIEFkZCBhbiBheGlzLWFsaWduZWQgc2tldyB0byB0aGUgY3VycmVudCB0cmFuc2Zvcm0sIHdpdGggdGhlIGZpcnN0IGFyZ3VtZW50CiAgLy8vIGJlaW5nIHRoZSBob3Jpem9udGFsIHNrZXcgaW4gcmlzZSBvdmVyIHJ1biB1bml0cyBjbG9ja3dpc2UgYXJvdW5kIHRoZQogIC8vLyBvcmlnaW4sIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IGJlaW5nIHRoZSB2ZXJ0aWNhbCBza2V3IGluIHJpc2Ugb3ZlciBydW4KICAvLy8gdW5pdHMgY2xvY2t3aXNlIGFyb3VuZCB0aGUgb3JpZ2luLgogIHZvaWQgc2tldyhkb3VibGUgc3gsIGRvdWJsZSBzeSkgbmF0aXZlICdDYW52YXNfc2tldyc7CgogIC8vLyBNdWx0aXBseSB0aGUgY3VycmVudCB0cmFuc2Zvcm0gYnkgdGhlIHNwZWNpZmllZCA04qiJNCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgKICAvLy8gc3BlY2lmaWVkIGFzIGEgbGlzdCBvZiB2YWx1ZXMgaW4gY29sdW1uLW1ham9yIG9yZGVyLgogIHZvaWQgdHJhbnNmb3JtKEZsb2F0NjRMaXN0IG1hdHJpeDQpIHsKICAgIGFzc2VydChtYXRyaXg0ICE9IG51bGwpOwogICAgaWYgKG1hdHJpeDQubGVuZ3RoICE9IDE2KQogICAgICB0aHJvdyBBcmd1bWVudEVycm9yKCcibWF0cml4NCIgbXVzdCBoYXZlIDE2IGVudHJpZXMuJyk7CiAgICBfdHJhbnNmb3JtKG1hdHJpeDQpOwogIH0KICB2b2lkIF90cmFuc2Zvcm0oRmxvYXQ2NExpc3QgbWF0cml4NCkgbmF0aXZlICdDYW52YXNfdHJhbnNmb3JtJzsKCiAgLy8vIFJlZHVjZXMgdGhlIGNsaXAgcmVnaW9uIHRvIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIGN1cnJlbnQgY2xpcCBhbmQgdGhlCiAgLy8vIGdpdmVuIHJlY3RhbmdsZS4KICAvLy8KICAvLy8gSWYgW2RvQW50aUFsaWFzXSBpcyB0cnVlLCB0aGVuIHRoZSBjbGlwIHdpbGwgYmUgYW50aS1hbGlhc2VkLgogIC8vLwogIC8vLyBJZiBtdWx0aXBsZSBkcmF3IGNvbW1hbmRzIGludGVyc2VjdCB3aXRoIHRoZSBjbGlwIGJvdW5kYXJ5LCB0aGlzIGNhbiByZXN1bHQKICAvLy8gaW4gaW5jb3JyZWN0IGJsZW5kaW5nIGF0IHRoZSBjbGlwIGJvdW5kYXJ5LiBTZWUgW3NhdmVMYXllcl0gZm9yIGEKICAvLy8gZGlzY3Vzc2lvbiBvZiBob3cgdG8gYWRkcmVzcyB0aGF0LgogIC8vLwogIC8vLyBVc2UgW0NsaXBPcC5kaWZmZXJlbmNlXSB0byBzdWJ0cmFjdCB0aGUgcHJvdmlkZWQgcmVjdGFuZ2xlIGZyb20gdGhlCiAgLy8vIGN1cnJlbnQgY2xpcC4KICB2b2lkIGNsaXBSZWN0KFJlY3QgcmVjdCwgeyBDbGlwT3AgY2xpcE9wID0gQ2xpcE9wLmludGVyc2VjdCwgYm9vbCBkb0FudGlBbGlhcyA9IHRydWUgfSkgewogICAgYXNzZXJ0KF9yZWN0SXNWYWxpZChyZWN0KSk7CiAgICBhc3NlcnQoY2xpcE9wICE9IG51bGwpOwogICAgYXNzZXJ0KGRvQW50aUFsaWFzICE9IG51bGwpOwogICAgX2NsaXBSZWN0KHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQsIHJlY3QuYm90dG9tLCBjbGlwT3AuaW5kZXgsIGRvQW50aUFsaWFzKTsKICB9CiAgdm9pZCBfY2xpcFJlY3QoZG91YmxlIGxlZnQsCiAgICAgICAgICAgICAgICAgZG91YmxlIHRvcCwKICAgICAgICAgICAgICAgICBkb3VibGUgcmlnaHQsCiAgICAgICAgICAgICAgICAgZG91YmxlIGJvdHRvbSwKICAgICAgICAgICAgICAgICBpbnQgY2xpcE9wLAogICAgICAgICAgICAgICAgIGJvb2wgZG9BbnRpQWxpYXMpIG5hdGl2ZSAnQ2FudmFzX2NsaXBSZWN0JzsKCiAgLy8vIFJlZHVjZXMgdGhlIGNsaXAgcmVnaW9uIHRvIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIGN1cnJlbnQgY2xpcCBhbmQgdGhlCiAgLy8vIGdpdmVuIHJvdW5kZWQgcmVjdGFuZ2xlLgogIC8vLwogIC8vLyBJZiBbZG9BbnRpQWxpYXNdIGlzIHRydWUsIHRoZW4gdGhlIGNsaXAgd2lsbCBiZSBhbnRpLWFsaWFzZWQuCiAgLy8vCiAgLy8vIElmIG11bHRpcGxlIGRyYXcgY29tbWFuZHMgaW50ZXJzZWN0IHdpdGggdGhlIGNsaXAgYm91bmRhcnksIHRoaXMgY2FuIHJlc3VsdAogIC8vLyBpbiBpbmNvcnJlY3QgYmxlbmRpbmcgYXQgdGhlIGNsaXAgYm91bmRhcnkuIFNlZSBbc2F2ZUxheWVyXSBmb3IgYQogIC8vLyBkaXNjdXNzaW9uIG9mIGhvdyB0byBhZGRyZXNzIHRoYXQgYW5kIHNvbWUgZXhhbXBsZXMgb2YgdXNpbmcgW2NsaXBSUmVjdF0uCiAgdm9pZCBjbGlwUlJlY3QoUlJlY3QgcnJlY3QsIHtib29sIGRvQW50aUFsaWFzID0gdHJ1ZX0pIHsKICAgIGFzc2VydChfcnJlY3RJc1ZhbGlkKHJyZWN0KSk7CiAgICBhc3NlcnQoZG9BbnRpQWxpYXMgIT0gbnVsbCk7CiAgICBfY2xpcFJSZWN0KHJyZWN0Ll92YWx1ZTMyLCBkb0FudGlBbGlhcyk7CiAgfQogIHZvaWQgX2NsaXBSUmVjdChGbG9hdDMyTGlzdCBycmVjdCwgYm9vbCBkb0FudGlBbGlhcykgbmF0aXZlICdDYW52YXNfY2xpcFJSZWN0JzsKCiAgLy8vIFJlZHVjZXMgdGhlIGNsaXAgcmVnaW9uIHRvIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIGN1cnJlbnQgY2xpcCBhbmQgdGhlCiAgLy8vIGdpdmVuIFtQYXRoXS4KICAvLy8KICAvLy8gSWYgW2RvQW50aUFsaWFzXSBpcyB0cnVlLCB0aGVuIHRoZSBjbGlwIHdpbGwgYmUgYW50aS1hbGlhc2VkLgogIC8vLwogIC8vLyBJZiBtdWx0aXBsZSBkcmF3IGNvbW1hbmRzIGludGVyc2VjdCB3aXRoIHRoZSBjbGlwIGJvdW5kYXJ5LCB0aGlzIGNhbiByZXN1bHQKICAvLy8gbXVsdGlwbGUgZHJhdyBjb21tYW5kcyBpbnRlcnNlY3Qgd2l0aCB0aGUgY2xpcCBib3VuZGFyeSwgdGhpcyBjYW4gcmVzdWx0CiAgLy8vIGluIGluY29ycmVjdCBibGVuZGluZyBhdCB0aGUgY2xpcCBib3VuZGFyeS4gU2VlIFtzYXZlTGF5ZXJdIGZvciBhCiAgLy8vIGRpc2N1c3Npb24gb2YgaG93IHRvIGFkZHJlc3MgdGhhdC4KICB2b2lkIGNsaXBQYXRoKFBhdGggcGF0aCwge2Jvb2wgZG9BbnRpQWxpYXMgPSB0cnVlfSkgewogICAgYXNzZXJ0KHBhdGggIT0gbnVsbCk7IC8vIHBhdGggaXMgY2hlY2tlZCBvbiB0aGUgZW5naW5lIHNpZGUKICAgIGFzc2VydChkb0FudGlBbGlhcyAhPSBudWxsKTsKICAgIF9jbGlwUGF0aChwYXRoLCBkb0FudGlBbGlhcyk7CiAgfQogIHZvaWQgX2NsaXBQYXRoKFBhdGggcGF0aCwgYm9vbCBkb0FudGlBbGlhcykgbmF0aXZlICdDYW52YXNfY2xpcFBhdGgnOwoKICAvLy8gUGFpbnRzIHRoZSBnaXZlbiBbQ29sb3JdIG9udG8gdGhlIGNhbnZhcywgYXBwbHlpbmcgdGhlIGdpdmVuCiAgLy8vIFtCbGVuZE1vZGVdLCB3aXRoIHRoZSBnaXZlbiBjb2xvciBiZWluZyB0aGUgc291cmNlIGFuZCB0aGUgYmFja2dyb3VuZAogIC8vLyBiZWluZyB0aGUgZGVzdGluYXRpb24uCiAgdm9pZCBkcmF3Q29sb3IoQ29sb3IgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpIHsKICAgIGFzc2VydChjb2xvciAhPSBudWxsKTsKICAgIGFzc2VydChibGVuZE1vZGUgIT0gbnVsbCk7CiAgICBfZHJhd0NvbG9yKGNvbG9yLnZhbHVlLCBibGVuZE1vZGUuaW5kZXgpOwogIH0KICB2b2lkIF9kcmF3Q29sb3IoaW50IGNvbG9yLCBpbnQgYmxlbmRNb2RlKSBuYXRpdmUgJ0NhbnZhc19kcmF3Q29sb3InOwoKICAvLy8gRHJhd3MgYSBsaW5lIGJldHdlZW4gdGhlIGdpdmVuIHBvaW50cyB1c2luZyB0aGUgZ2l2ZW4gcGFpbnQuIFRoZSBsaW5lIGlzCiAgLy8vIHN0cm9rZWQsIHRoZSB2YWx1ZSBvZiB0aGUgW1BhaW50LnN0eWxlXSBpcyBpZ25vcmVkIGZvciB0aGlzIGNhbGwuCiAgLy8vCiAgLy8vIFRoZSBgcDFgIGFuZCBgcDJgIGFyZ3VtZW50cyBhcmUgaW50ZXJwcmV0ZWQgYXMgb2Zmc2V0cyBmcm9tIHRoZSBvcmlnaW4uCiAgdm9pZCBkcmF3TGluZShPZmZzZXQgcDEsIE9mZnNldCBwMiwgUGFpbnQgcGFpbnQpIHsKICAgIGFzc2VydChfb2Zmc2V0SXNWYWxpZChwMSkpOwogICAgYXNzZXJ0KF9vZmZzZXRJc1ZhbGlkKHAyKSk7CiAgICBhc3NlcnQocGFpbnQgIT0gbnVsbCk7CiAgICBfZHJhd0xpbmUocDEuZHgsIHAxLmR5LCBwMi5keCwgcDIuZHksIHBhaW50Ll9vYmplY3RzLCBwYWludC5fZGF0YSk7CiAgfQogIHZvaWQgX2RyYXdMaW5lKGRvdWJsZSB4MSwKICAgICAgICAgICAgICAgICBkb3VibGUgeTEsCiAgICAgICAgICAgICAgICAgZG91YmxlIHgyLAogICAgICAgICAgICAgICAgIGRvdWJsZSB5MiwKICAgICAgICAgICAgICAgICBMaXN0PGR5bmFtaWM+IHBhaW50T2JqZWN0cywKICAgICAgICAgICAgICAgICBCeXRlRGF0YSBwYWludERhdGEpIG5hdGl2ZSAnQ2FudmFzX2RyYXdMaW5lJzsKCiAgLy8vIEZpbGxzIHRoZSBjYW52YXMgd2l0aCB0aGUgZ2l2ZW4gW1BhaW50XS4KICAvLy8KICAvLy8gVG8gZmlsbCB0aGUgY2FudmFzIHdpdGggYSBzb2xpZCBjb2xvciBhbmQgYmxlbmQgbW9kZSwgY29uc2lkZXIKICAvLy8gW2RyYXdDb2xvcl0gaW5zdGVhZC4KICB2b2lkIGRyYXdQYWludChQYWludCBwYWludCkgewogICAgYXNzZXJ0KHBhaW50ICE9IG51bGwpOwogICAgX2RyYXdQYWludChwYWludC5fb2JqZWN0cywgcGFpbnQuX2RhdGEpOwogIH0KICB2b2lkIF9kcmF3UGFpbnQoTGlzdDxkeW5hbWljPiBwYWludE9iamVjdHMsIEJ5dGVEYXRhIHBhaW50RGF0YSkgbmF0aXZlICdDYW52YXNfZHJhd1BhaW50JzsKCiAgLy8vIERyYXdzIGEgcmVjdGFuZ2xlIHdpdGggdGhlIGdpdmVuIFtQYWludF0uIFdoZXRoZXIgdGhlIHJlY3RhbmdsZSBpcyBmaWxsZWQKICAvLy8gb3Igc3Ryb2tlZCAob3IgYm90aCkgaXMgY29udHJvbGxlZCBieSBbUGFpbnQuc3R5bGVdLgogIHZvaWQgZHJhd1JlY3QoUmVjdCByZWN0LCBQYWludCBwYWludCkgewogICAgYXNzZXJ0KF9yZWN0SXNWYWxpZChyZWN0KSk7CiAgICBhc3NlcnQocGFpbnQgIT0gbnVsbCk7CiAgICBfZHJhd1JlY3QocmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCwgcmVjdC5ib3R0b20sCiAgICAgICAgICAgICAgcGFpbnQuX29iamVjdHMsIHBhaW50Ll9kYXRhKTsKICB9CiAgdm9pZCBfZHJhd1JlY3QoZG91YmxlIGxlZnQsCiAgICAgICAgICAgICAgICAgZG91YmxlIHRvcCwKICAgICAgICAgICAgICAgICBkb3VibGUgcmlnaHQsCiAgICAgICAgICAgICAgICAgZG91YmxlIGJvdHRvbSwKICAgICAgICAgICAgICAgICBMaXN0PGR5bmFtaWM+IHBhaW50T2JqZWN0cywKICAgICAgICAgICAgICAgICBCeXRlRGF0YSBwYWludERhdGEpIG5hdGl2ZSAnQ2FudmFzX2RyYXdSZWN0JzsKCiAgLy8vIERyYXdzIGEgcm91bmRlZCByZWN0YW5nbGUgd2l0aCB0aGUgZ2l2ZW4gW1BhaW50XS4gV2hldGhlciB0aGUgcmVjdGFuZ2xlIGlzCiAgLy8vIGZpbGxlZCBvciBzdHJva2VkIChvciBib3RoKSBpcyBjb250cm9sbGVkIGJ5IFtQYWludC5zdHlsZV0uCiAgdm9pZCBkcmF3UlJlY3QoUlJlY3QgcnJlY3QsIFBhaW50IHBhaW50KSB7CiAgICBhc3NlcnQoX3JyZWN0SXNWYWxpZChycmVjdCkpOwogICAgYXNzZXJ0KHBhaW50ICE9IG51bGwpOwogICAgX2RyYXdSUmVjdChycmVjdC5fdmFsdWUzMiwgcGFpbnQuX29iamVjdHMsIHBhaW50Ll9kYXRhKTsKICB9CiAgdm9pZCBfZHJhd1JSZWN0KEZsb2F0MzJMaXN0IHJyZWN0LAogICAgICAgICAgICAgICAgICBMaXN0PGR5bmFtaWM+IHBhaW50T2JqZWN0cywKICAgICAgICAgICAgICAgICAgQnl0ZURhdGEgcGFpbnREYXRhKSBuYXRpdmUgJ0NhbnZhc19kcmF3UlJlY3QnOwoKICAvLy8gRHJhd3MgYSBzaGFwZSBjb25zaXN0aW5nIG9mIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHJvdW5kZWQgcmVjdGFuZ2xlcwogIC8vLyB3aXRoIHRoZSBnaXZlbiBbUGFpbnRdLiBXaGV0aGVyIHRoaXMgc2hhcGUgaXMgZmlsbGVkIG9yIHN0cm9rZWQgKG9yIGJvdGgpCiAgLy8vIGlzIGNvbnRyb2xsZWQgYnkgW1BhaW50LnN0eWxlXS4KICAvLy8KICAvLy8gVGhpcyBzaGFwZSBpcyBhbG1vc3QgYnV0IG5vdCBxdWl0ZSBlbnRpcmVseSB1bmxpa2UgYW4gYW5udWx1cy4KICB2b2lkIGRyYXdEUlJlY3QoUlJlY3Qgb3V0ZXIsIFJSZWN0IGlubmVyLCBQYWludCBwYWludCkgewogICAgYXNzZXJ0KF9ycmVjdElzVmFsaWQob3V0ZXIpKTsKICAgIGFzc2VydChfcnJlY3RJc1ZhbGlkKGlubmVyKSk7CiAgICBhc3NlcnQocGFpbnQgIT0gbnVsbCk7CiAgICBfZHJhd0RSUmVjdChvdXRlci5fdmFsdWUzMiwgaW5uZXIuX3ZhbHVlMzIsIHBhaW50Ll9vYmplY3RzLCBwYWludC5fZGF0YSk7CiAgfQogIHZvaWQgX2RyYXdEUlJlY3QoRmxvYXQzMkxpc3Qgb3V0ZXIsCiAgICAgICAgICAgICAgICAgICBGbG9hdDMyTGlzdCBpbm5lciwKICAgICAgICAgICAgICAgICAgIExpc3Q8ZHluYW1pYz4gcGFpbnRPYmplY3RzLAogICAgICAgICAgICAgICAgICAgQnl0ZURhdGEgcGFpbnREYXRhKSBuYXRpdmUgJ0NhbnZhc19kcmF3RFJSZWN0JzsKCiAgLy8vIERyYXdzIGFuIGF4aXMtYWxpZ25lZCBvdmFsIHRoYXQgZmlsbHMgdGhlIGdpdmVuIGF4aXMtYWxpZ25lZCByZWN0YW5nbGUKICAvLy8gd2l0aCB0aGUgZ2l2ZW4gW1BhaW50XS4gV2hldGhlciB0aGUgb3ZhbCBpcyBmaWxsZWQgb3Igc3Ryb2tlZCAob3IgYm90aCkgaXMKICAvLy8gY29udHJvbGxlZCBieSBbUGFpbnQuc3R5bGVdLgogIHZvaWQgZHJhd092YWwoUmVjdCByZWN0LCBQYWludCBwYWludCkgewogICAgYXNzZXJ0KF9yZWN0SXNWYWxpZChyZWN0KSk7CiAgICBhc3NlcnQocGFpbnQgIT0gbnVsbCk7CiAgICBfZHJhd092YWwocmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCwgcmVjdC5ib3R0b20sCiAgICAgICAgICAgICAgcGFpbnQuX29iamVjdHMsIHBhaW50Ll9kYXRhKTsKICB9CiAgdm9pZCBfZHJhd092YWwoZG91YmxlIGxlZnQsCiAgICAgICAgICAgICAgICAgZG91YmxlIHRvcCwKICAgICAgICAgICAgICAgICBkb3VibGUgcmlnaHQsCiAgICAgICAgICAgICAgICAgZG91YmxlIGJvdHRvbSwKICAgICAgICAgICAgICAgICBMaXN0PGR5bmFtaWM+IHBhaW50T2JqZWN0cywKICAgICAgICAgICAgICAgICBCeXRlRGF0YSBwYWludERhdGEpIG5hdGl2ZSAnQ2FudmFzX2RyYXdPdmFsJzsKCiAgLy8vIERyYXdzIGEgY2lyY2xlIGNlbnRlcmVkIGF0IHRoZSBwb2ludCBnaXZlbiBieSB0aGUgZmlyc3QgYXJndW1lbnQgYW5kCiAgLy8vIHRoYXQgaGFzIHRoZSByYWRpdXMgZ2l2ZW4gYnkgdGhlIHNlY29uZCBhcmd1bWVudCwgd2l0aCB0aGUgW1BhaW50XSBnaXZlbiBpbgogIC8vLyB0aGUgdGhpcmQgYXJndW1lbnQuIFdoZXRoZXIgdGhlIGNpcmNsZSBpcyBmaWxsZWQgb3Igc3Ryb2tlZCAob3IgYm90aCkgaXMKICAvLy8gY29udHJvbGxlZCBieSBbUGFpbnQuc3R5bGVdLgogIHZvaWQgZHJhd0NpcmNsZShPZmZzZXQgYywgZG91YmxlIHJhZGl1cywgUGFpbnQgcGFpbnQpIHsKICAgIGFzc2VydChfb2Zmc2V0SXNWYWxpZChjKSk7CiAgICBhc3NlcnQocGFpbnQgIT0gbnVsbCk7CiAgICBfZHJhd0NpcmNsZShjLmR4LCBjLmR5LCByYWRpdXMsIHBhaW50Ll9vYmplY3RzLCBwYWludC5fZGF0YSk7CiAgfQogIHZvaWQgX2RyYXdDaXJjbGUoZG91YmxlIHgsCiAgICAgICAgICAgICAgICAgICBkb3VibGUgeSwKICAgICAgICAgICAgICAgICAgIGRvdWJsZSByYWRpdXMsCiAgICAgICAgICAgICAgICAgICBMaXN0PGR5bmFtaWM+IHBhaW50T2JqZWN0cywKICAgICAgICAgICAgICAgICAgIEJ5dGVEYXRhIHBhaW50RGF0YSkgbmF0aXZlICdDYW52YXNfZHJhd0NpcmNsZSc7CgogIC8vLyBEcmF3IGFuIGFyYyBzY2FsZWQgdG8gZml0IGluc2lkZSB0aGUgZ2l2ZW4gcmVjdGFuZ2xlLiBJdCBzdGFydHMgZnJvbQogIC8vLyBzdGFydEFuZ2xlIHJhZGlhbnMgYXJvdW5kIHRoZSBvdmFsIHVwIHRvIHN0YXJ0QW5nbGUgKyBzd2VlcEFuZ2xlCiAgLy8vIHJhZGlhbnMgYXJvdW5kIHRoZSBvdmFsLCB3aXRoIHplcm8gcmFkaWFucyBiZWluZyB0aGUgcG9pbnQgb24KICAvLy8gdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiB0aGUgb3ZhbCB0aGF0IGNyb3NzZXMgdGhlIGhvcml6b250YWwgbGluZQogIC8vLyB0aGF0IGludGVyc2VjdHMgdGhlIGNlbnRlciBvZiB0aGUgcmVjdGFuZ2xlIGFuZCB3aXRoIHBvc2l0aXZlCiAgLy8vIGFuZ2xlcyBnb2luZyBjbG9ja3dpc2UgYXJvdW5kIHRoZSBvdmFsLiBJZiB1c2VDZW50ZXIgaXMgdHJ1ZSwgdGhlIGFyYyBpcwogIC8vLyBjbG9zZWQgYmFjayB0byB0aGUgY2VudGVyLCBmb3JtaW5nIGEgY2lyY2xlIHNlY3Rvci4gT3RoZXJ3aXNlLCB0aGUgYXJjIGlzCiAgLy8vIG5vdCBjbG9zZWQsIGZvcm1pbmcgYSBjaXJjbGUgc2VnbWVudC4KICAvLy8KICAvLy8gVGhpcyBtZXRob2QgaXMgb3B0aW1pemVkIGZvciBkcmF3aW5nIGFyY3MgYW5kIHNob3VsZCBiZSBmYXN0ZXIgdGhhbiBbUGF0aC5hcmNUb10uCiAgdm9pZCBkcmF3QXJjKFJlY3QgcmVjdCwgZG91YmxlIHN0YXJ0QW5nbGUsIGRvdWJsZSBzd2VlcEFuZ2xlLCBib29sIHVzZUNlbnRlciwgUGFpbnQgcGFpbnQpIHsKICAgIGFzc2VydChfcmVjdElzVmFsaWQocmVjdCkpOwogICAgYXNzZXJ0KHBhaW50ICE9IG51bGwpOwogICAgX2RyYXdBcmMocmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCwgcmVjdC5ib3R0b20sIHN0YXJ0QW5nbGUsCiAgICAgICAgICAgICBzd2VlcEFuZ2xlLCB1c2VDZW50ZXIsIHBhaW50Ll9vYmplY3RzLCBwYWludC5fZGF0YSk7CiAgfQogIHZvaWQgX2RyYXdBcmMoZG91YmxlIGxlZnQsCiAgICAgICAgICAgICAgICBkb3VibGUgdG9wLAogICAgICAgICAgICAgICAgZG91YmxlIHJpZ2h0LAogICAgICAgICAgICAgICAgZG91YmxlIGJvdHRvbSwKICAgICAgICAgICAgICAgIGRvdWJsZSBzdGFydEFuZ2xlLAogICAgICAgICAgICAgICAgZG91YmxlIHN3ZWVwQW5nbGUsCiAgICAgICAgICAgICAgICBib29sIHVzZUNlbnRlciwKICAgICAgICAgICAgICAgIExpc3Q8ZHluYW1pYz4gcGFpbnRPYmplY3RzLAogICAgICAgICAgICAgICAgQnl0ZURhdGEgcGFpbnREYXRhKSBuYXRpdmUgJ0NhbnZhc19kcmF3QXJjJzsKCiAgLy8vIERyYXdzIHRoZSBnaXZlbiBbUGF0aF0gd2l0aCB0aGUgZ2l2ZW4gW1BhaW50XS4gV2hldGhlciB0aGlzIHNoYXBlIGlzCiAgLy8vIGZpbGxlZCBvciBzdHJva2VkIChvciBib3RoKSBpcyBjb250cm9sbGVkIGJ5IFtQYWludC5zdHlsZV0uIElmIHRoZSBwYXRoIGlzCiAgLy8vIGZpbGxlZCwgdGhlbiBzdWItcGF0aHMgd2l0aGluIGl0IGFyZSBpbXBsaWNpdGx5IGNsb3NlZCAoc2VlIFtQYXRoLmNsb3NlXSkuCiAgdm9pZCBkcmF3UGF0aChQYXRoIHBhdGgsIFBhaW50IHBhaW50KSB7CiAgICBhc3NlcnQocGF0aCAhPSBudWxsKTsgLy8gcGF0aCBpcyBjaGVja2VkIG9uIHRoZSBlbmdpbmUgc2lkZQogICAgYXNzZXJ0KHBhaW50ICE9IG51bGwpOwogICAgX2RyYXdQYXRoKHBhdGgsIHBhaW50Ll9vYmplY3RzLCBwYWludC5fZGF0YSk7CiAgfQogIHZvaWQgX2RyYXdQYXRoKFBhdGggcGF0aCwKICAgICAgICAgICAgICAgICBMaXN0PGR5bmFtaWM+IHBhaW50T2JqZWN0cywKICAgICAgICAgICAgICAgICBCeXRlRGF0YSBwYWludERhdGEpIG5hdGl2ZSAnQ2FudmFzX2RyYXdQYXRoJzsKCiAgLy8vIERyYXdzIHRoZSBnaXZlbiBbSW1hZ2VdIGludG8gdGhlIGNhbnZhcyB3aXRoIGl0cyB0b3AtbGVmdCBjb3JuZXIgYXQgdGhlCiAgLy8vIGdpdmVuIFtPZmZzZXRdLiBUaGUgaW1hZ2UgaXMgY29tcG9zaXRlZCBpbnRvIHRoZSBjYW52YXMgdXNpbmcgdGhlIGdpdmVuIFtQYWludF0uCiAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UgaW1hZ2UsIE9mZnNldCBwLCBQYWludCBwYWludCkgewogICAgYXNzZXJ0KGltYWdlICE9IG51bGwpOyAvLyBpbWFnZSBpcyBjaGVja2VkIG9uIHRoZSBlbmdpbmUgc2lkZQogICAgYXNzZXJ0KF9vZmZzZXRJc1ZhbGlkKHApKTsKICAgIGFzc2VydChwYWludCAhPSBudWxsKTsKICAgIF9kcmF3SW1hZ2UoaW1hZ2UsIHAuZHgsIHAuZHksIHBhaW50Ll9vYmplY3RzLCBwYWludC5fZGF0YSk7CiAgfQogIHZvaWQgX2RyYXdJbWFnZShJbWFnZSBpbWFnZSwKICAgICAgICAgICAgICAgICAgZG91YmxlIHgsCiAgICAgICAgICAgICAgICAgIGRvdWJsZSB5LAogICAgICAgICAgICAgICAgICBMaXN0PGR5bmFtaWM+IHBhaW50T2JqZWN0cywKICAgICAgICAgICAgICAgICAgQnl0ZURhdGEgcGFpbnREYXRhKSBuYXRpdmUgJ0NhbnZhc19kcmF3SW1hZ2UnOwoKICAvLy8gRHJhd3MgdGhlIHN1YnNldCBvZiB0aGUgZ2l2ZW4gaW1hZ2UgZGVzY3JpYmVkIGJ5IHRoZSBgc3JjYCBhcmd1bWVudCBpbnRvCiAgLy8vIHRoZSBjYW52YXMgaW4gdGhlIGF4aXMtYWxpZ25lZCByZWN0YW5nbGUgZ2l2ZW4gYnkgdGhlIGBkc3RgIGFyZ3VtZW50LgogIC8vLwogIC8vLyBUaGlzIG1pZ2h0IHNhbXBsZSBmcm9tIG91dHNpZGUgdGhlIGBzcmNgIHJlY3QgYnkgdXAgdG8gaGFsZiB0aGUgd2lkdGggb2YKICAvLy8gYW4gYXBwbGllZCBmaWx0ZXIuCiAgLy8vCiAgLy8vIE11bHRpcGxlIGNhbGxzIHRvIHRoaXMgbWV0aG9kIHdpdGggZGlmZmVyZW50IGFyZ3VtZW50cyAoZnJvbSB0aGUgc2FtZQogIC8vLyBpbWFnZSkgY2FuIGJlIGJhdGNoZWQgaW50byBhIHNpbmdsZSBjYWxsIHRvIFtkcmF3QXRsYXNdIHRvIGltcHJvdmUKICAvLy8gcGVyZm9ybWFuY2UuCiAgdm9pZCBkcmF3SW1hZ2VSZWN0KEltYWdlIGltYWdlLCBSZWN0IHNyYywgUmVjdCBkc3QsIFBhaW50IHBhaW50KSB7CiAgICBhc3NlcnQoaW1hZ2UgIT0gbnVsbCk7IC8vIGltYWdlIGlzIGNoZWNrZWQgb24gdGhlIGVuZ2luZSBzaWRlCiAgICBhc3NlcnQoX3JlY3RJc1ZhbGlkKHNyYykpOwogICAgYXNzZXJ0KF9yZWN0SXNWYWxpZChkc3QpKTsKICAgIGFzc2VydChwYWludCAhPSBudWxsKTsKICAgIF9kcmF3SW1hZ2VSZWN0KGltYWdlLAogICAgICAgICAgICAgICAgICAgc3JjLmxlZnQsCiAgICAgICAgICAgICAgICAgICBzcmMudG9wLAogICAgICAgICAgICAgICAgICAgc3JjLnJpZ2h0LAogICAgICAgICAgICAgICAgICAgc3JjLmJvdHRvbSwKICAgICAgICAgICAgICAgICAgIGRzdC5sZWZ0LAogICAgICAgICAgICAgICAgICAgZHN0LnRvcCwKICAgICAgICAgICAgICAgICAgIGRzdC5yaWdodCwKICAgICAgICAgICAgICAgICAgIGRzdC5ib3R0b20sCiAgICAgICAgICAgICAgICAgICBwYWludC5fb2JqZWN0cywKICAgICAgICAgICAgICAgICAgIHBhaW50Ll9kYXRhKTsKICB9CiAgdm9pZCBfZHJhd0ltYWdlUmVjdChJbWFnZSBpbWFnZSwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBzcmNMZWZ0LAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHNyY1RvcCwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBzcmNSaWdodCwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBzcmNCb3R0b20sCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZHN0TGVmdCwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkc3RUb3AsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZHN0UmlnaHQsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZHN0Qm90dG9tLAogICAgICAgICAgICAgICAgICAgICAgTGlzdDxkeW5hbWljPiBwYWludE9iamVjdHMsCiAgICAgICAgICAgICAgICAgICAgICBCeXRlRGF0YSBwYWludERhdGEpIG5hdGl2ZSAnQ2FudmFzX2RyYXdJbWFnZVJlY3QnOwoKICAvLy8gRHJhd3MgdGhlIGdpdmVuIFtJbWFnZV0gaW50byB0aGUgY2FudmFzIHVzaW5nIHRoZSBnaXZlbiBbUGFpbnRdLgogIC8vLwogIC8vLyBUaGUgaW1hZ2UgaXMgZHJhd24gaW4gbmluZSBwb3J0aW9ucyBkZXNjcmliZWQgYnkgc3BsaXR0aW5nIHRoZSBpbWFnZSBieQogIC8vLyBkcmF3aW5nIHR3byBob3Jpem9udGFsIGxpbmVzIGFuZCB0d28gdmVydGljYWwgbGluZXMsIHdoZXJlIHRoZSBgY2VudGVyYAogIC8vLyBhcmd1bWVudCBkZXNjcmliZXMgdGhlIHJlY3RhbmdsZSBmb3JtZWQgYnkgdGhlIGZvdXIgcG9pbnRzIHdoZXJlIHRoZXNlCiAgLy8vIGZvdXIgbGluZXMgaW50ZXJzZWN0IGVhY2ggb3RoZXIuIChUaGlzIGZvcm1zIGEgMy1ieS0zIGdyaWQgb2YgcmVnaW9ucywKICAvLy8gdGhlIGNlbnRlciByZWdpb24gYmVpbmcgZGVzY3JpYmVkIGJ5IHRoZSBgY2VudGVyYCBhcmd1bWVudC4pCiAgLy8vCiAgLy8vIFRoZSBmb3VyIHJlZ2lvbnMgaW4gdGhlIGNvcm5lcnMgYXJlIGRyYXduLCB3aXRob3V0IHNjYWxpbmcsIGluIHRoZSBmb3VyCiAgLy8vIGNvcm5lcnMgb2YgdGhlIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSBkZXNjcmliZWQgYnkgYGRzdGAuIFRoZSByZW1haW5pbmcKICAvLy8gZml2ZSByZWdpb25zIGFyZSBkcmF3biBieSBzdHJldGNoaW5nIHRoZW0gdG8gZml0IHN1Y2ggdGhhdCB0aGV5IGV4YWN0bHkKICAvLy8gY292ZXIgdGhlIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSB3aGlsZSBtYWludGFpbmluZyB0aGVpciByZWxhdGl2ZQogIC8vLyBwb3NpdGlvbnMuCiAgdm9pZCBkcmF3SW1hZ2VOaW5lKEltYWdlIGltYWdlLCBSZWN0IGNlbnRlciwgUmVjdCBkc3QsIFBhaW50IHBhaW50KSB7CiAgICBhc3NlcnQoaW1hZ2UgIT0gbnVsbCk7IC8vIGltYWdlIGlzIGNoZWNrZWQgb24gdGhlIGVuZ2luZSBzaWRlCiAgICBhc3NlcnQoX3JlY3RJc1ZhbGlkKGNlbnRlcikpOwogICAgYXNzZXJ0KF9yZWN0SXNWYWxpZChkc3QpKTsKICAgIGFzc2VydChwYWludCAhPSBudWxsKTsKICAgIF9kcmF3SW1hZ2VOaW5lKGltYWdlLAogICAgICAgICAgICAgICAgICAgY2VudGVyLmxlZnQsCiAgICAgICAgICAgICAgICAgICBjZW50ZXIudG9wLAogICAgICAgICAgICAgICAgICAgY2VudGVyLnJpZ2h0LAogICAgICAgICAgICAgICAgICAgY2VudGVyLmJvdHRvbSwKICAgICAgICAgICAgICAgICAgIGRzdC5sZWZ0LAogICAgICAgICAgICAgICAgICAgZHN0LnRvcCwKICAgICAgICAgICAgICAgICAgIGRzdC5yaWdodCwKICAgICAgICAgICAgICAgICAgIGRzdC5ib3R0b20sCiAgICAgICAgICAgICAgICAgICBwYWludC5fb2JqZWN0cywKICAgICAgICAgICAgICAgICAgIHBhaW50Ll9kYXRhKTsKICB9CiAgdm9pZCBfZHJhd0ltYWdlTmluZShJbWFnZSBpbWFnZSwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBjZW50ZXJMZWZ0LAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGNlbnRlclRvcCwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBjZW50ZXJSaWdodCwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBjZW50ZXJCb3R0b20sCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZHN0TGVmdCwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkc3RUb3AsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZHN0UmlnaHQsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZHN0Qm90dG9tLAogICAgICAgICAgICAgICAgICAgICAgTGlzdDxkeW5hbWljPiBwYWludE9iamVjdHMsCiAgICAgICAgICAgICAgICAgICAgICBCeXRlRGF0YSBwYWludERhdGEpIG5hdGl2ZSAnQ2FudmFzX2RyYXdJbWFnZU5pbmUnOwoKICAvLy8gRHJhdyB0aGUgZ2l2ZW4gcGljdHVyZSBvbnRvIHRoZSBjYW52YXMuIFRvIGNyZWF0ZSBhIHBpY3R1cmUsIHNlZQogIC8vLyBbUGljdHVyZVJlY29yZGVyXS4KICB2b2lkIGRyYXdQaWN0dXJlKFBpY3R1cmUgcGljdHVyZSkgewogICAgYXNzZXJ0KHBpY3R1cmUgIT0gbnVsbCk7IC8vIHBpY3R1cmUgaXMgY2hlY2tlZCBvbiB0aGUgZW5naW5lIHNpZGUKICAgIF9kcmF3UGljdHVyZShwaWN0dXJlKTsKICB9CiAgdm9pZCBfZHJhd1BpY3R1cmUoUGljdHVyZSBwaWN0dXJlKSBuYXRpdmUgJ0NhbnZhc19kcmF3UGljdHVyZSc7CgogIC8vLyBEcmF3cyB0aGUgdGV4dCBpbiB0aGUgZ2l2ZW4gW1BhcmFncmFwaF0gaW50byB0aGlzIGNhbnZhcyBhdCB0aGUgZ2l2ZW4KICAvLy8gW09mZnNldF0uCiAgLy8vCiAgLy8vIFRoZSBbUGFyYWdyYXBoXSBvYmplY3QgbXVzdCBoYXZlIGhhZCBbUGFyYWdyYXBoLmxheW91dF0gY2FsbGVkIG9uIGl0CiAgLy8vIGZpcnN0LgogIC8vLwogIC8vLyBUbyBhbGlnbiB0aGUgdGV4dCwgc2V0IHRoZSBgdGV4dEFsaWduYCBvbiB0aGUgW1BhcmFncmFwaFN0eWxlXSBvYmplY3QKICAvLy8gcGFzc2VkIHRvIHRoZSBbbmV3IFBhcmFncmFwaEJ1aWxkZXJdIGNvbnN0cnVjdG9yLiBGb3IgbW9yZSBkZXRhaWxzIHNlZQogIC8vLyBbVGV4dEFsaWduXSBhbmQgdGhlIGRpc2N1c3Npb24gYXQgW25ldyBQYXJhZ3JhcGhTdHlsZV0uCiAgLy8vCiAgLy8vIElmIHRoZSB0ZXh0IGlzIGxlZnQgYWxpZ25lZCBvciBqdXN0aWZpZWQsIHRoZSBsZWZ0IG1hcmdpbiB3aWxsIGJlIGF0IHRoZQogIC8vLyBwb3NpdGlvbiBzcGVjaWZpZWQgYnkgdGhlIGBvZmZzZXRgIGFyZ3VtZW50J3MgW09mZnNldC5keF0gY29vcmRpbmF0ZS4KICAvLy8KICAvLy8gSWYgdGhlIHRleHQgaXMgcmlnaHQgYWxpZ25lZCBvciBqdXN0aWZpZWQsIHRoZSByaWdodCBtYXJnaW4gd2lsbCBiZSBhdCB0aGUKICAvLy8gcG9zaXRpb24gZGVzY3JpYmVkIGJ5IGFkZGluZyB0aGUgW1BhcmFncmFwaENvbnN0cmFpbnRzLndpZHRoXSBnaXZlbiB0bwogIC8vLyBbUGFyYWdyYXBoLmxheW91dF0sIHRvIHRoZSBgb2Zmc2V0YCBhcmd1bWVudCdzIFtPZmZzZXQuZHhdIGNvb3JkaW5hdGUuCiAgLy8vCiAgLy8vIElmIHRoZSB0ZXh0IGlzIGNlbnRlcmVkLCB0aGUgY2VudGVyaW5nIGF4aXMgd2lsbCBiZSBhdCB0aGUgcG9zaXRpb24KICAvLy8gZGVzY3JpYmVkIGJ5IGFkZGluZyBoYWxmIG9mIHRoZSBbUGFyYWdyYXBoQ29uc3RyYWludHMud2lkdGhdIGdpdmVuIHRvCiAgLy8vIFtQYXJhZ3JhcGgubGF5b3V0XSwgdG8gdGhlIGBvZmZzZXRgIGFyZ3VtZW50J3MgW09mZnNldC5keF0gY29vcmRpbmF0ZS4KICB2b2lkIGRyYXdQYXJhZ3JhcGgoUGFyYWdyYXBoIHBhcmFncmFwaCwgT2Zmc2V0IG9mZnNldCkgewogICAgYXNzZXJ0KHBhcmFncmFwaCAhPSBudWxsKTsKICAgIGFzc2VydChfb2Zmc2V0SXNWYWxpZChvZmZzZXQpKTsKICAgIHBhcmFncmFwaC5fcGFpbnQodGhpcywgb2Zmc2V0LmR4LCBvZmZzZXQuZHkpOwogIH0KCiAgLy8vIERyYXdzIGEgc2VxdWVuY2Ugb2YgcG9pbnRzIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gW1BvaW50TW9kZV0uCiAgLy8vCiAgLy8vIFRoZSBgcG9pbnRzYCBhcmd1bWVudCBpcyBpbnRlcnByZXRlZCBhcyBvZmZzZXRzIGZyb20gdGhlIG9yaWdpbi4KICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICAqIFtkcmF3UmF3UG9pbnRzXSwgd2hpY2ggdGFrZXMgYHBvaW50c2AgYXMgYSBbRmxvYXQzMkxpc3RdIHJhdGhlciB0aGFuIGEKICAvLy8gICAgW0xpc3Q8T2Zmc2V0Pl0uCiAgdm9pZCBkcmF3UG9pbnRzKFBvaW50TW9kZSBwb2ludE1vZGUsIExpc3Q8T2Zmc2V0PiBwb2ludHMsIFBhaW50IHBhaW50KSB7CiAgICBhc3NlcnQocG9pbnRNb2RlICE9IG51bGwpOwogICAgYXNzZXJ0KHBvaW50cyAhPSBudWxsKTsKICAgIGFzc2VydChwYWludCAhPSBudWxsKTsKICAgIF9kcmF3UG9pbnRzKHBhaW50Ll9vYmplY3RzLCBwYWludC5fZGF0YSwgcG9pbnRNb2RlLmluZGV4LCBfZW5jb2RlUG9pbnRMaXN0KHBvaW50cykpOwogIH0KCiAgLy8vIERyYXdzIGEgc2VxdWVuY2Ugb2YgcG9pbnRzIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gW1BvaW50TW9kZV0uCiAgLy8vCiAgLy8vIFRoZSBgcG9pbnRzYCBhcmd1bWVudCBpcyBpbnRlcnByZXRlZCBhcyBhIGxpc3Qgb2YgcGFpcnMgb2YgZmxvYXRpbmcgcG9pbnQKICAvLy8gbnVtYmVycywgd2hlcmUgZWFjaCBwYWlyIHJlcHJlc2VudHMgYW4geCBhbmQgeSBvZmZzZXQgZnJvbSB0aGUgb3JpZ2luLgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogW2RyYXdQb2ludHNdLCB3aGljaCB0YWtlcyBgcG9pbnRzYCBhcyBhIFtMaXN0PE9mZnNldD5dIHJhdGhlciB0aGFuIGEKICAvLy8gICAgW0xpc3Q8RmxvYXQzMkxpc3Q+XS4KICB2b2lkIGRyYXdSYXdQb2ludHMoUG9pbnRNb2RlIHBvaW50TW9kZSwgRmxvYXQzMkxpc3QgcG9pbnRzLCBQYWludCBwYWludCkgewogICAgYXNzZXJ0KHBvaW50TW9kZSAhPSBudWxsKTsKICAgIGFzc2VydChwb2ludHMgIT0gbnVsbCk7CiAgICBhc3NlcnQocGFpbnQgIT0gbnVsbCk7CiAgICBpZiAocG9pbnRzLmxlbmd0aCAlIDIgIT0gMCkKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcignInBvaW50cyIgbXVzdCBoYXZlIGFuIGV2ZW4gbnVtYmVyIG9mIHZhbHVlcy4nKTsKICAgIF9kcmF3UG9pbnRzKHBhaW50Ll9vYmplY3RzLCBwYWludC5fZGF0YSwgcG9pbnRNb2RlLmluZGV4LCBwb2ludHMpOwogIH0KCiAgdm9pZCBfZHJhd1BvaW50cyhMaXN0PGR5bmFtaWM+IHBhaW50T2JqZWN0cywKICAgICAgICAgICAgICAgICAgIEJ5dGVEYXRhIHBhaW50RGF0YSwKICAgICAgICAgICAgICAgICAgIGludCBwb2ludE1vZGUsCiAgICAgICAgICAgICAgICAgICBGbG9hdDMyTGlzdCBwb2ludHMpIG5hdGl2ZSAnQ2FudmFzX2RyYXdQb2ludHMnOwoKICAvLy8gRHJhd3MgdGhlIHNldCBvZiBbVmVydGljZXNdIG9udG8gdGhlIGNhbnZhcy4KICAvLy8KICAvLy8gQWxsIHBhcmFtZXRlcnMgbXVzdCBub3QgYmUgbnVsbC4KICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vICAgKiBbbmV3IFZlcnRpY2VzXSwgd2hpY2ggY3JlYXRlcyBhIHNldCBvZiB2ZXJ0aWNlcyB0byBkcmF3IG9uIHRoZSBjYW52YXMuCiAgLy8vICAgKiBbVmVydGljZXMucmF3XSwgd2hpY2ggY3JlYXRlcyB0aGUgdmVydGljZXMgdXNpbmcgdHlwZWQgZGF0YSBsaXN0cwogIC8vLyAgICAgcmF0aGVyIHRoYW4gdW5lbmNvZGVkIGxpc3RzLgogIHZvaWQgZHJhd1ZlcnRpY2VzKFZlcnRpY2VzIHZlcnRpY2VzLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBQYWludCBwYWludCkgewogICAgYXNzZXJ0KHZlcnRpY2VzICE9IG51bGwpOyAvLyB2ZXJ0aWNlcyBpcyBjaGVja2VkIG9uIHRoZSBlbmdpbmUgc2lkZQogICAgYXNzZXJ0KHBhaW50ICE9IG51bGwpOwogICAgYXNzZXJ0KGJsZW5kTW9kZSAhPSBudWxsKTsKICAgIF9kcmF3VmVydGljZXModmVydGljZXMsIGJsZW5kTW9kZS5pbmRleCwgcGFpbnQuX29iamVjdHMsIHBhaW50Ll9kYXRhKTsKICB9CiAgdm9pZCBfZHJhd1ZlcnRpY2VzKFZlcnRpY2VzIHZlcnRpY2VzLAogICAgICAgICAgICAgICAgICAgICBpbnQgYmxlbmRNb2RlLAogICAgICAgICAgICAgICAgICAgICBMaXN0PGR5bmFtaWM+IHBhaW50T2JqZWN0cywKICAgICAgICAgICAgICAgICAgICAgQnl0ZURhdGEgcGFpbnREYXRhKSBuYXRpdmUgJ0NhbnZhc19kcmF3VmVydGljZXMnOwoKICAvLy8gRHJhd3MgcGFydCBvZiBhbiBpbWFnZSAtIHRoZSBbYXRsYXNdIC0gb250byB0aGUgY2FudmFzLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBhbGxvd3MgZm9yIG9wdGltaXphdGlvbiB3aGVuIHlvdSBvbmx5IHdhbnQgdG8gZHJhdyBwYXJ0IG9mIGFuCiAgLy8vIGltYWdlIG9uIHRoZSBjYW52YXMsIHN1Y2ggYXMgd2hlbiB1c2luZyBzcHJpdGVzIG9yIHpvb21pbmcuIEl0IGlzIG1vcmUKICAvLy8gZWZmaWNpZW50IHRoYW4gdXNpbmcgY2xpcHMgb3IgbWFza3MgZGlyZWN0bHkuCiAgLy8vCiAgLy8vIEFsbCBwYXJhbWV0ZXJzIG11c3Qgbm90IGJlIG51bGwuCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgKiBbZHJhd1Jhd0F0bGFzXSwgd2hpY2ggdGFrZXMgaXRzIGFyZ3VtZW50cyBhcyB0eXBlZCBkYXRhIGxpc3RzIHJhdGhlcgogIC8vLyAgICB0aGFuIG9iamVjdHMuCiAgdm9pZCBkcmF3QXRsYXMoSW1hZ2UgYXRsYXMsCiAgICAgICAgICAgICAgICAgTGlzdDxSU1RyYW5zZm9ybT4gdHJhbnNmb3JtcywKICAgICAgICAgICAgICAgICBMaXN0PFJlY3Q+IHJlY3RzLAogICAgICAgICAgICAgICAgIExpc3Q8Q29sb3I+IGNvbG9ycywKICAgICAgICAgICAgICAgICBCbGVuZE1vZGUgYmxlbmRNb2RlLAogICAgICAgICAgICAgICAgIFJlY3QgY3VsbFJlY3QsCiAgICAgICAgICAgICAgICAgUGFpbnQgcGFpbnQpIHsKICAgIGFzc2VydChhdGxhcyAhPSBudWxsKTsgLy8gYXRsYXMgaXMgY2hlY2tlZCBvbiB0aGUgZW5naW5lIHNpZGUKICAgIGFzc2VydCh0cmFuc2Zvcm1zICE9IG51bGwpOwogICAgYXNzZXJ0KHJlY3RzICE9IG51bGwpOwogICAgYXNzZXJ0KGNvbG9ycyAhPSBudWxsKTsKICAgIGFzc2VydChibGVuZE1vZGUgIT0gbnVsbCk7CiAgICBhc3NlcnQocGFpbnQgIT0gbnVsbCk7CgogICAgZmluYWwgaW50IHJlY3RDb3VudCA9IHJlY3RzLmxlbmd0aDsKICAgIGlmICh0cmFuc2Zvcm1zLmxlbmd0aCAhPSByZWN0Q291bnQpCiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoJyJ0cmFuc2Zvcm1zIiBhbmQgInJlY3RzIiBsZW5ndGhzIG11c3QgbWF0Y2guJyk7CiAgICBpZiAoY29sb3JzLmlzTm90RW1wdHkgJiYgY29sb3JzLmxlbmd0aCAhPSByZWN0Q291bnQpCiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoJ0lmIG5vbi1udWxsLCAiY29sb3JzIiBsZW5ndGggbXVzdCBtYXRjaCB0aGF0IG9mICJ0cmFuc2Zvcm1zIiBhbmQgInJlY3RzIi4nKTsKCiAgICBmaW5hbCBGbG9hdDMyTGlzdCByc3RUcmFuc2Zvcm1CdWZmZXIgPSBGbG9hdDMyTGlzdChyZWN0Q291bnQgKiA0KTsKICAgIGZpbmFsIEZsb2F0MzJMaXN0IHJlY3RCdWZmZXIgPSBGbG9hdDMyTGlzdChyZWN0Q291bnQgKiA0KTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3RDb3VudDsgKytpKSB7CiAgICAgIGZpbmFsIGludCBpbmRleDAgPSBpICogNDsKICAgICAgZmluYWwgaW50IGluZGV4MSA9IGluZGV4MCArIDE7CiAgICAgIGZpbmFsIGludCBpbmRleDIgPSBpbmRleDAgKyAyOwogICAgICBmaW5hbCBpbnQgaW5kZXgzID0gaW5kZXgwICsgMzsKICAgICAgZmluYWwgUlNUcmFuc2Zvcm0gcnN0VHJhbnNmb3JtID0gdHJhbnNmb3Jtc1tpXTsKICAgICAgZmluYWwgUmVjdCByZWN0ID0gcmVjdHNbaV07CiAgICAgIGFzc2VydChfcmVjdElzVmFsaWQocmVjdCkpOwogICAgICByc3RUcmFuc2Zvcm1CdWZmZXJbaW5kZXgwXSA9IHJzdFRyYW5zZm9ybS5zY29zOwogICAgICByc3RUcmFuc2Zvcm1CdWZmZXJbaW5kZXgxXSA9IHJzdFRyYW5zZm9ybS5zc2luOwogICAgICByc3RUcmFuc2Zvcm1CdWZmZXJbaW5kZXgyXSA9IHJzdFRyYW5zZm9ybS50eDsKICAgICAgcnN0VHJhbnNmb3JtQnVmZmVyW2luZGV4M10gPSByc3RUcmFuc2Zvcm0udHk7CiAgICAgIHJlY3RCdWZmZXJbaW5kZXgwXSA9IHJlY3QubGVmdDsKICAgICAgcmVjdEJ1ZmZlcltpbmRleDFdID0gcmVjdC50b3A7CiAgICAgIHJlY3RCdWZmZXJbaW5kZXgyXSA9IHJlY3QucmlnaHQ7CiAgICAgIHJlY3RCdWZmZXJbaW5kZXgzXSA9IHJlY3QuYm90dG9tOwogICAgfQoKICAgIGZpbmFsIEludDMyTGlzdCBjb2xvckJ1ZmZlciA9IGNvbG9ycy5pc0VtcHR5ID8gbnVsbCA6IF9lbmNvZGVDb2xvckxpc3QoY29sb3JzKTsKICAgIGZpbmFsIEZsb2F0MzJMaXN0IGN1bGxSZWN0QnVmZmVyID0gY3VsbFJlY3Q/Ll92YWx1ZTMyOwoKICAgIF9kcmF3QXRsYXMoCiAgICAgIHBhaW50Ll9vYmplY3RzLCBwYWludC5fZGF0YSwgYXRsYXMsIHJzdFRyYW5zZm9ybUJ1ZmZlciwgcmVjdEJ1ZmZlciwKICAgICAgY29sb3JCdWZmZXIsIGJsZW5kTW9kZS5pbmRleCwgY3VsbFJlY3RCdWZmZXIKICAgICk7CiAgfQoKICAvLy8gRHJhd3MgcGFydCBvZiBhbiBpbWFnZSAtIHRoZSBbYXRsYXNdIC0gb250byB0aGUgY2FudmFzLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBhbGxvd3MgZm9yIG9wdGltaXphdGlvbiB3aGVuIHlvdSBvbmx5IHdhbnQgdG8gZHJhdyBwYXJ0IG9mIGFuCiAgLy8vIGltYWdlIG9uIHRoZSBjYW52YXMsIHN1Y2ggYXMgd2hlbiB1c2luZyBzcHJpdGVzIG9yIHpvb21pbmcuIEl0IGlzIG1vcmUKICAvLy8gZWZmaWNpZW50IHRoYW4gdXNpbmcgY2xpcHMgb3IgbWFza3MgZGlyZWN0bHkuCiAgLy8vCiAgLy8vIFRoZSBbcnN0VHJhbnNmb3Jtc10gYXJndW1lbnQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBsaXN0IG9mIGZvdXItdHVwbGVzLCB3aXRoCiAgLy8vIGVhY2ggdHVwbGUgYmVpbmcgKFtSU1RyYW5zZm9ybS5zY29zXSwgW1JTVHJhbnNmb3JtLnNzaW5dLAogIC8vLyBbUlNUcmFuc2Zvcm0udHhdLCBbUlNUcmFuc2Zvcm0udHldKS4KICAvLy8KICAvLy8gVGhlIFtyZWN0c10gYXJndW1lbnQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBsaXN0IG9mIGZvdXItdHVwbGVzLCB3aXRoIGVhY2gKICAvLy8gdHVwbGUgYmVpbmcgKFtSZWN0LmxlZnRdLCBbUmVjdC50b3BdLCBbUmVjdC5yaWdodF0sIFtSZWN0LmJvdHRvbV0pLgogIC8vLwogIC8vLyBUaGUgW2NvbG9yc10gYXJndW1lbnQsIHdoaWNoIGNhbiBiZSBudWxsLCBpcyBpbnRlcnByZXRlZCBhcyBhIGxpc3Qgb2YKICAvLy8gMzItYml0IGNvbG9ycywgd2l0aCB0aGUgc2FtZSBwYWNraW5nIGFzIFtDb2xvci52YWx1ZV0uCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgKiBbZHJhd0F0bGFzXSwgd2hpY2ggdGFrZXMgaXRzIGFyZ3VtZW50cyBhcyBvYmplY3RzIHJhdGhlciB0aGFuIHR5cGVkCiAgLy8vICAgIGRhdGEgbGlzdHMuCiAgdm9pZCBkcmF3UmF3QXRsYXMoSW1hZ2UgYXRsYXMsCiAgICAgICAgICAgICAgICAgICAgRmxvYXQzMkxpc3QgcnN0VHJhbnNmb3JtcywKICAgICAgICAgICAgICAgICAgICBGbG9hdDMyTGlzdCByZWN0cywKICAgICAgICAgICAgICAgICAgICBJbnQzMkxpc3QgY29sb3JzLAogICAgICAgICAgICAgICAgICAgIEJsZW5kTW9kZSBibGVuZE1vZGUsCiAgICAgICAgICAgICAgICAgICAgUmVjdCBjdWxsUmVjdCwKICAgICAgICAgICAgICAgICAgICBQYWludCBwYWludCkgewogICAgYXNzZXJ0KGF0bGFzICE9IG51bGwpOyAvLyBhdGxhcyBpcyBjaGVja2VkIG9uIHRoZSBlbmdpbmUgc2lkZQogICAgYXNzZXJ0KHJzdFRyYW5zZm9ybXMgIT0gbnVsbCk7CiAgICBhc3NlcnQocmVjdHMgIT0gbnVsbCk7CiAgICBhc3NlcnQoY29sb3JzICE9IG51bGwpOwogICAgYXNzZXJ0KGJsZW5kTW9kZSAhPSBudWxsKTsKICAgIGFzc2VydChwYWludCAhPSBudWxsKTsKCiAgICBmaW5hbCBpbnQgcmVjdENvdW50ID0gcmVjdHMubGVuZ3RoOwogICAgaWYgKHJzdFRyYW5zZm9ybXMubGVuZ3RoICE9IHJlY3RDb3VudCkKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcignInJzdFRyYW5zZm9ybXMiIGFuZCAicmVjdHMiIGxlbmd0aHMgbXVzdCBtYXRjaC4nKTsKICAgIGlmIChyZWN0Q291bnQgJSA0ICE9IDApCiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoJyJyc3RUcmFuc2Zvcm1zIiBhbmQgInJlY3RzIiBsZW5ndGhzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBmb3VyLicpOwogICAgaWYgKGNvbG9ycyAhPSBudWxsICYmIGNvbG9ycy5sZW5ndGggKiA0ICE9IHJlY3RDb3VudCkKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcignSWYgbm9uLW51bGwsICJjb2xvcnMiIGxlbmd0aCBtdXN0IGJlIG9uZSBmb3VydGggdGhlIGxlbmd0aCBvZiAicnN0VHJhbnNmb3JtcyIgYW5kICJyZWN0cyIuJyk7CgogICAgX2RyYXdBdGxhcygKICAgICAgcGFpbnQuX29iamVjdHMsIHBhaW50Ll9kYXRhLCBhdGxhcywgcnN0VHJhbnNmb3JtcywgcmVjdHMsCiAgICAgIGNvbG9ycywgYmxlbmRNb2RlLmluZGV4LCBjdWxsUmVjdD8uX3ZhbHVlMzIKICAgICk7CiAgfQoKICB2b2lkIF9kcmF3QXRsYXMoTGlzdDxkeW5hbWljPiBwYWludE9iamVjdHMsCiAgICAgICAgICAgICAgICAgIEJ5dGVEYXRhIHBhaW50RGF0YSwKICAgICAgICAgICAgICAgICAgSW1hZ2UgYXRsYXMsCiAgICAgICAgICAgICAgICAgIEZsb2F0MzJMaXN0IHJzdFRyYW5zZm9ybXMsCiAgICAgICAgICAgICAgICAgIEZsb2F0MzJMaXN0IHJlY3RzLAogICAgICAgICAgICAgICAgICBJbnQzMkxpc3QgY29sb3JzLAogICAgICAgICAgICAgICAgICBpbnQgYmxlbmRNb2RlLAogICAgICAgICAgICAgICAgICBGbG9hdDMyTGlzdCBjdWxsUmVjdCkgbmF0aXZlICdDYW52YXNfZHJhd0F0bGFzJzsKCiAgLy8vIERyYXdzIGEgc2hhZG93IGZvciBhIFtQYXRoXSByZXByZXNlbnRpbmcgdGhlIGdpdmVuIG1hdGVyaWFsIGVsZXZhdGlvbi4KICAvLy8KICAvLy8gVGhlIGB0cmFuc3BhcmVudE9jY2x1ZGVyYCBhcmd1bWVudCBzaG91bGQgYmUgdHJ1ZSBpZiB0aGUgb2NjbHVkaW5nIG9iamVjdAogIC8vLyBpcyBub3Qgb3BhcXVlLgogIC8vLwogIC8vLyBUaGUgYXJndW1lbnRzIG11c3Qgbm90IGJlIG51bGwuCiAgdm9pZCBkcmF3U2hhZG93KFBhdGggcGF0aCwgQ29sb3IgY29sb3IsIGRvdWJsZSBlbGV2YXRpb24sIGJvb2wgdHJhbnNwYXJlbnRPY2NsdWRlcikgewogICAgYXNzZXJ0KHBhdGggIT0gbnVsbCk7IC8vIHBhdGggaXMgY2hlY2tlZCBvbiB0aGUgZW5naW5lIHNpZGUKICAgIGFzc2VydChjb2xvciAhPSBudWxsKTsKICAgIGFzc2VydCh0cmFuc3BhcmVudE9jY2x1ZGVyICE9IG51bGwpOwogICAgX2RyYXdTaGFkb3cocGF0aCwgY29sb3IudmFsdWUsIGVsZXZhdGlvbiwgdHJhbnNwYXJlbnRPY2NsdWRlcik7CiAgfQogIHZvaWQgX2RyYXdTaGFkb3coUGF0aCBwYXRoLAogICAgICAgICAgICAgICAgICAgaW50IGNvbG9yLAogICAgICAgICAgICAgICAgICAgZG91YmxlIGVsZXZhdGlvbiwKICAgICAgICAgICAgICAgICAgIGJvb2wgdHJhbnNwYXJlbnRPY2NsdWRlcikgbmF0aXZlICdDYW52YXNfZHJhd1NoYWRvdyc7Cn0KCi8vLyBBbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgc2VxdWVuY2Ugb2YgcmVjb3JkZWQgZ3JhcGhpY2FsIG9wZXJhdGlvbnMuCi8vLwovLy8gVG8gY3JlYXRlIGEgW1BpY3R1cmVdLCB1c2UgYSBbUGljdHVyZVJlY29yZGVyXS4KLy8vCi8vLyBBIFtQaWN0dXJlXSBjYW4gYmUgcGxhY2VkIGluIGEgW1NjZW5lXSB1c2luZyBhIFtTY2VuZUJ1aWxkZXJdLCB2aWEKLy8vIHRoZSBbU2NlbmVCdWlsZGVyLmFkZFBpY3R1cmVdIG1ldGhvZC4gQSBbUGljdHVyZV0gY2FuIGFsc28gYmUKLy8vIGRyYXduIGludG8gYSBbQ2FudmFzXSwgdXNpbmcgdGhlIFtDYW52YXMuZHJhd1BpY3R1cmVdIG1ldGhvZC4KQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQpjbGFzcyBQaWN0dXJlIGV4dGVuZHMgTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MyIHsKICAvLy8gVGhpcyBjbGFzcyBpcyBjcmVhdGVkIGJ5IHRoZSBlbmdpbmUsIGFuZCBzaG91bGQgbm90IGJlIGluc3RhbnRpYXRlZAogIC8vLyBvciBleHRlbmRlZCBkaXJlY3RseS4KICAvLy8KICAvLy8gVG8gY3JlYXRlIGEgW1BpY3R1cmVdLCB1c2UgYSBbUGljdHVyZVJlY29yZGVyXS4KICBAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCiAgUGljdHVyZS5fKCk7CgogIC8vLyBDcmVhdGVzIGFuIGltYWdlIGZyb20gdGhpcyBwaWN0dXJlLgogIC8vLwogIC8vLyBUaGUgcmV0dXJuZWQgaW1hZ2Ugd2lsbCBiZSBgd2lkdGhgIHBpeGVscyB3aWRlIGFuZCBgaGVpZ2h0YCBwaXhlbHMgaGlnaC4KICAvLy8gVGhlIHBpY3R1cmUgaXMgcmFzdGVyaXplZCB3aXRoaW4gdGhlIDAgKGxlZnQpLCAwICh0b3ApLCBgd2lkdGhgIChyaWdodCksCiAgLy8vIGBoZWlnaHRgIChib3R0b20pIGJvdW5kcy4gQ29udGVudCBvdXRzaWRlIHRoZXNlIGJvdW5kcyBpcyBjbGlwcGVkLgogIC8vLwogIC8vLyBBbHRob3VnaCB0aGUgaW1hZ2UgaXMgcmV0dXJuZWQgc3luY2hyb25vdXNseSwgdGhlIHBpY3R1cmUgaXMgYWN0dWFsbHkKICAvLy8gcmFzdGVyaXplZCB0aGUgZmlyc3QgdGltZSB0aGUgaW1hZ2UgaXMgZHJhd24gYW5kIHRoZW4gY2FjaGVkLgogIEZ1dHVyZTxJbWFnZT4gdG9JbWFnZShpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQogICAgICB0aHJvdyBFeGNlcHRpb24oJ0ludmFsaWQgaW1hZ2UgZGltZW5zaW9ucy4nKTsKICAgIHJldHVybiBfZnV0dXJpemUoCiAgICAgIChfQ2FsbGJhY2s8SW1hZ2U+IGNhbGxiYWNrKSA9PiBfdG9JbWFnZSh3aWR0aCwgaGVpZ2h0LCBjYWxsYmFjaykKICAgICk7CiAgfQoKICBTdHJpbmcgX3RvSW1hZ2UoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBfQ2FsbGJhY2s8SW1hZ2U+IGNhbGxiYWNrKSBuYXRpdmUgJ1BpY3R1cmVfdG9JbWFnZSc7CgogIC8vLyBSZWxlYXNlIHRoZSByZXNvdXJjZXMgdXNlZCBieSB0aGlzIG9iamVjdC4gVGhlIG9iamVjdCBpcyBubyBsb25nZXIgdXNhYmxlCiAgLy8vIGFmdGVyIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC4KICB2b2lkIGRpc3Bvc2UoKSBuYXRpdmUgJ1BpY3R1cmVfZGlzcG9zZSc7CgogIC8vLyBSZXR1cm5zIHRoZSBhcHByb3hpbWF0ZSBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIGZvciB0aGlzIG9iamVjdC4KICAvLy8KICAvLy8gVGhlIGFjdHVhbCBzaXplIG9mIHRoaXMgcGljdHVyZSBtYXkgYmUgbGFyZ2VyLCBwYXJ0aWN1bGFybHkgaWYgaXQgY29udGFpbnMKICAvLy8gcmVmZXJlbmNlcyB0byBpbWFnZSBvciBvdGhlciBsYXJnZSBvYmplY3RzLgogIGludCBnZXQgYXBwcm94aW1hdGVCeXRlc1VzZWQgbmF0aXZlICdQaWN0dXJlX0dldEFsbG9jYXRpb25TaXplJzsKfQoKLy8vIFJlY29yZHMgYSBbUGljdHVyZV0gY29udGFpbmluZyBhIHNlcXVlbmNlIG9mIGdyYXBoaWNhbCBvcGVyYXRpb25zLgovLy8KLy8vIFRvIGJlZ2luIHJlY29yZGluZywgY29uc3RydWN0IGEgW0NhbnZhc10gdG8gcmVjb3JkIHRoZSBjb21tYW5kcy4KLy8vIFRvIGVuZCByZWNvcmRpbmcsIHVzZSB0aGUgW1BpY3R1cmVSZWNvcmRlci5lbmRSZWNvcmRpbmddIG1ldGhvZC4KY2xhc3MgUGljdHVyZVJlY29yZGVyIGV4dGVuZHMgTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MyIHsKICAvLy8gQ3JlYXRlcyBhIG5ldyBpZGxlIFBpY3R1cmVSZWNvcmRlci4gVG8gYXNzb2NpYXRlIGl0IHdpdGggYQogIC8vLyBbQ2FudmFzXSBhbmQgYmVnaW4gcmVjb3JkaW5nLCBwYXNzIHRoaXMgW1BpY3R1cmVSZWNvcmRlcl0gdG8gdGhlCiAgLy8vIFtDYW52YXNdIGNvbnN0cnVjdG9yLgogIEBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKICBQaWN0dXJlUmVjb3JkZXIoKSB7IF9jb25zdHJ1Y3RvcigpOyB9CiAgdm9pZCBfY29uc3RydWN0b3IoKSBuYXRpdmUgJ1BpY3R1cmVSZWNvcmRlcl9jb25zdHJ1Y3Rvcic7CgogIC8vLyBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIGN1cnJlbnRseSByZWNvcmRpbmcgY29tbWFuZHMuCiAgLy8vCiAgLy8vIFNwZWNpZmljYWxseSwgdGhpcyByZXR1cm5zIHRydWUgaWYgYSBbQ2FudmFzXSBvYmplY3QgaGFzIGJlZW4KICAvLy8gY3JlYXRlZCB0byByZWNvcmQgY29tbWFuZHMgYW5kIHJlY29yZGluZyBoYXMgbm90IHlldCBlbmRlZCB2aWEgYQogIC8vLyBjYWxsIHRvIFtlbmRSZWNvcmRpbmddLCBhbmQgZmFsc2UgaWYgZWl0aGVyIHRoaXMKICAvLy8gW1BpY3R1cmVSZWNvcmRlcl0gaGFzIG5vdCB5ZXQgYmVlbiBhc3NvY2lhdGVkIHdpdGggYSBbQ2FudmFzXSwKICAvLy8gb3IgdGhlIFtlbmRSZWNvcmRpbmddIG1ldGhvZCBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZC4KICBib29sIGdldCBpc1JlY29yZGluZyBuYXRpdmUgJ1BpY3R1cmVSZWNvcmRlcl9pc1JlY29yZGluZyc7CgogIC8vLyBGaW5pc2hlcyByZWNvcmRpbmcgZ3JhcGhpY2FsIG9wZXJhdGlvbnMuCiAgLy8vCiAgLy8vIFJldHVybnMgYSBwaWN0dXJlIGNvbnRhaW5pbmcgdGhlIGdyYXBoaWNhbCBvcGVyYXRpb25zIHRoYXQgaGF2ZSBiZWVuCiAgLy8vIHJlY29yZGVkIHRodXMgZmFyLiBBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIGJvdGggdGhlIHBpY3R1cmUgcmVjb3JkZXIKICAvLy8gYW5kIHRoZSBjYW52YXMgb2JqZWN0cyBhcmUgaW52YWxpZCBhbmQgY2Fubm90IGJlIHVzZWQgZnVydGhlci4KICAvLy8KICAvLy8gUmV0dXJucyBudWxsIGlmIHRoZSBQaWN0dXJlUmVjb3JkZXIgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhIGNhbnZhcy4KICBQaWN0dXJlIGVuZFJlY29yZGluZygpIG5hdGl2ZSAnUGljdHVyZVJlY29yZGVyX2VuZFJlY29yZGluZyc7Cn0KCi8vLyBBIHNpbmdsZSBzaGFkb3cuCi8vLwovLy8gTXVsdGlwbGUgc2hhZG93cyBhcmUgc3RhY2tlZCB0b2dldGhlciBpbiBhIFtUZXh0U3R5bGVdLgpjbGFzcyBTaGFkb3cgewogIC8vLyBDb25zdHJ1Y3QgYSBzaGFkb3cuCiAgLy8vCiAgLy8vIFRoZSBkZWZhdWx0IHNoYWRvdyBpcyBhIGJsYWNrIHNoYWRvdyB3aXRoIHplcm8gb2Zmc2V0IGFuZCB6ZXJvIGJsdXIuCiAgLy8vIERlZmF1bHQgc2hhZG93cyBzaG91bGQgYmUgY29tcGxldGVseSBjb3ZlcmVkIGJ5IHRoZSBjYXN0aW5nIGVsZW1lbnQsCiAgLy8vIGFuZCBub3QgYmUgdmlzaWJsZS4KICAvLy8KICAvLy8gVHJhbnNwYXJlbmN5IHNob3VsZCBiZSBhZGp1c3RlZCB0aHJvdWdoIHRoZSBbY29sb3JdIGFscGhhLgogIC8vLwogIC8vLyBTaGFkb3cgb3JkZXIgbWF0dGVycyBkdWUgdG8gY29tcG9zaXRpbmcgbXVsdGlwbGUgdHJhbnNsdWNlbnQgb2JqZWN0cyBub3QKICAvLy8gYmVpbmcgY29tbXV0YXRpdmUuCiAgY29uc3QgU2hhZG93KHsKICAgIHRoaXMuY29sb3IgPSBjb25zdCBDb2xvcihfa0NvbG9yRGVmYXVsdCksCiAgICB0aGlzLm9mZnNldCA9IE9mZnNldC56ZXJvLAogICAgdGhpcy5ibHVyUmFkaXVzID0gMC4wLAogIH0pIDogYXNzZXJ0KGNvbG9yICE9IG51bGwsICdUZXh0IHNoYWRvdyBjb2xvciB3YXMgbnVsbC4nKSwKICAgICAgIGFzc2VydChvZmZzZXQgIT0gbnVsbCwgJ1RleHQgc2hhZG93IG9mZnNldCB3YXMgbnVsbC4nKSwKICAgICAgIGFzc2VydChibHVyUmFkaXVzID49IDAuMCwgJ1RleHQgc2hhZG93IGJsdXIgcmFkaXVzIHNob3VsZCBiZSBub24tbmVnYXRpdmUuJyk7CgogIHN0YXRpYyBjb25zdCBpbnQgX2tDb2xvckRlZmF1bHQgPSAweEZGMDAwMDAwOwogIC8vIENvbnN0YW50cyBmb3Igc2hhZG93IGVuY29kaW5nLgogIHN0YXRpYyBjb25zdCBpbnQgX2tCeXRlc1BlclNoYWRvdyA9IDE2OwogIHN0YXRpYyBjb25zdCBpbnQgX2tDb2xvck9mZnNldCA9IDAgPDwgMjsKICBzdGF0aWMgY29uc3QgaW50IF9rWE9mZnNldCA9IDEgPDwgMjsKICBzdGF0aWMgY29uc3QgaW50IF9rWU9mZnNldCA9IDIgPDwgMjsKICBzdGF0aWMgY29uc3QgaW50IF9rQmx1ck9mZnNldCA9IDMgPDwgMjsKCiAgLy8vIENvbG9yIHRoYXQgdGhlIHNoYWRvdyB3aWxsIGJlIGRyYXduIHdpdGguCiAgLy8vCiAgLy8vIFRoZSBzaGFkb3dzIGFyZSBzaGFwZXMgY29tcG9zaXRlZCBkaXJlY3RseSBvdmVyIHRoZSBiYXNlIGNhbnZhcywgYW5kIGRvIG5vdAogIC8vLyByZXByZXNlbnQgb3B0aWNhbCBvY2NsdXNpb24uCiAgZmluYWwgQ29sb3IgY29sb3I7CgogIC8vLyBUaGUgZGlzcGxhY2VtZW50IG9mIHRoZSBzaGFkb3cgZnJvbSB0aGUgY2FzdGluZyBlbGVtZW50LgogIC8vLwogIC8vLyBQb3NpdGl2ZSB4L3kgb2Zmc2V0cyB3aWxsIHNoaWZ0IHRoZSBzaGFkb3cgdG8gdGhlIHJpZ2h0IGFuZCBkb3duLCB3aGlsZQogIC8vLyBuZWdhdGl2ZSBvZmZzZXRzIHNoaWZ0IHRoZSBzaGFkb3cgdG8gdGhlIGxlZnQgYW5kIHVwLiBUaGUgb2Zmc2V0cyBhcmUKICAvLy8gcmVsYXRpdmUgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50IHRoYXQgaXMgY2FzdGluZyBpdC4KICBmaW5hbCBPZmZzZXQgb2Zmc2V0OwoKICAvLy8gVGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgR2F1c3NpYW4gdG8gY29udm9sdmUgd2l0aCB0aGUgc2hhZG93J3Mgc2hhcGUuCiAgZmluYWwgZG91YmxlIGJsdXJSYWRpdXM7CgogIC8vLyBDb252ZXJ0cyBhIGJsdXIgcmFkaXVzIGluIHBpeGVscyB0byBzaWdtYXMuCiAgLy8vCiAgLy8vIFNlZSB0aGUgc2lnbWEgYXJndW1lbnQgdG8gW01hc2tGaWx0ZXIuYmx1cl0uCiAgLy8vCiAgLy8gU2VlIFNrQmx1ck1hc2s6OkNvbnZlcnRSYWRpdXNUb1NpZ21hKCkuCiAgLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvc2tpYS9ibG9iL2JiNWI3N2RiNTFkMmUxNDllZTY2ZGIyODQ5MDM1NzJhNWFhYzA5YmUvc3JjL2VmZmVjdHMvU2tCbHVyTWFzay5jcHAjTDIzPgogIHN0YXRpYyBkb3VibGUgY29udmVydFJhZGl1c1RvU2lnbWEoZG91YmxlIHJhZGl1cykgewogICAgcmV0dXJuIHJhZGl1cyAqIDAuNTc3MzUgKyAwLjU7CiAgfQoKICAvLy8gVGhlIFtibHVyUmFkaXVzXSBpbiBzaWdtYXMgaW5zdGVhZCBvZiBsb2dpY2FsIHBpeGVscy4KICAvLy8KICAvLy8gU2VlIHRoZSBzaWdtYSBhcmd1bWVudCB0byBbTWFza0ZpbHRlci5ibHVyXS4KICBkb3VibGUgZ2V0IGJsdXJTaWdtYSA9PiBjb252ZXJ0UmFkaXVzVG9TaWdtYShibHVyUmFkaXVzKTsKCiAgLy8vIENyZWF0ZSB0aGUgW1BhaW50XSBvYmplY3QgdGhhdCBjb3JyZXNwb25kcyB0byB0aGlzIHNoYWRvdyBkZXNjcmlwdGlvbi4KICAvLy8KICAvLy8gVGhlIFtvZmZzZXRdIGlzIG5vdCByZXByZXNlbnRlZCBpbiB0aGUgW1BhaW50XSBvYmplY3QuCiAgLy8vIFRvIGhvbm9yIHRoaXMgYXMgd2VsbCwgdGhlIHNoYXBlIHNob3VsZCBiZSB0cmFuc2xhdGVkIGJ5IFtvZmZzZXRdIGJlZm9yZQogIC8vLyBiZWluZyBmaWxsZWQgdXNpbmcgdGhpcyBbUGFpbnRdLgogIC8vLwogIC8vLyBUaGlzIGNsYXNzIGRvZXMgbm90IHByb3ZpZGUgYSB3YXkgdG8gZGlzYWJsZSBzaGFkb3dzIHRvIGF2b2lkCiAgLy8vIGluY29uc2lzdGVuY2llcyBpbiBzaGFkb3cgYmx1ciByZW5kZXJpbmcsIHByaW1hcmlseSBhcyBhIG1ldGhvZCBvZgogIC8vLyByZWR1Y2luZyB0ZXN0IGZsYWtpbmVzcy4gW3RvUGFpbnRdIHNob3VsZCBiZSBvdmVycmlkZGVuIGluIHN1YmNsYXNzZXMgdG8KICAvLy8gcHJvdmlkZSB0aGlzIGZ1bmN0aW9uYWxpdHkuCiAgUGFpbnQgdG9QYWludCgpIHsKICAgIHJldHVybiBQYWludCgpCiAgICAgIC4uY29sb3IgPSBjb2xvcgogICAgICAuLm1hc2tGaWx0ZXIgPSBNYXNrRmlsdGVyLmJsdXIoQmx1clN0eWxlLm5vcm1hbCwgYmx1clNpZ21hKTsKICB9CgogIC8vLyBSZXR1cm5zIGEgbmV3IHNoYWRvdyB3aXRoIGl0cyBbb2Zmc2V0XSBhbmQgW2JsdXJSYWRpdXNdIHNjYWxlZCBieSB0aGUgZ2l2ZW4KICAvLy8gZmFjdG9yLgogIFNoYWRvdyBzY2FsZShkb3VibGUgZmFjdG9yKSB7CiAgICByZXR1cm4gU2hhZG93KAogICAgICBjb2xvcjogY29sb3IsCiAgICAgIG9mZnNldDogb2Zmc2V0ICogZmFjdG9yLAogICAgICBibHVyUmFkaXVzOiBibHVyUmFkaXVzICogZmFjdG9yLAogICAgKTsKICB9CgogIC8vLyBMaW5lYXJseSBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHR3byBzaGFkb3dzLgogIC8vLwogIC8vLyBJZiBlaXRoZXIgc2hhZG93IGlzIG51bGwsIHRoaXMgZnVuY3Rpb24gbGluZWFybHkgaW50ZXJwb2xhdGVzIGZyb20gYQogIC8vLyBhIHNoYWRvdyB0aGF0IG1hdGNoZXMgdGhlIG90aGVyIHNoYWRvdyBpbiBjb2xvciBidXQgaGFzIGEgemVybwogIC8vLyBvZmZzZXQgYW5kIGEgemVybyBibHVyUmFkaXVzLgogIC8vLwogIC8vLyB7QHRlbXBsYXRlIGRhcnQudWkuc2hhZG93LmxlcnB9CiAgLy8vIFRoZSBgdGAgYXJndW1lbnQgcmVwcmVzZW50cyBwb3NpdGlvbiBvbiB0aGUgdGltZWxpbmUsIHdpdGggMC4wIG1lYW5pbmcKICAvLy8gdGhhdCB0aGUgaW50ZXJwb2xhdGlvbiBoYXMgbm90IHN0YXJ0ZWQsIHJldHVybmluZyBgYWAgKG9yIHNvbWV0aGluZwogIC8vLyBlcXVpdmFsZW50IHRvIGBhYCksIDEuMCBtZWFuaW5nIHRoYXQgdGhlIGludGVycG9sYXRpb24gaGFzIGZpbmlzaGVkLAogIC8vLyByZXR1cm5pbmcgYGJgIChvciBzb21ldGhpbmcgZXF1aXZhbGVudCB0byBgYmApLCBhbmQgdmFsdWVzIGluIGJldHdlZW4KICAvLy8gbWVhbmluZyB0aGF0IHRoZSBpbnRlcnBvbGF0aW9uIGlzIGF0IHRoZSByZWxldmFudCBwb2ludCBvbiB0aGUgdGltZWxpbmUKICAvLy8gYmV0d2VlbiBgYWAgYW5kIGBiYC4gVGhlIGludGVycG9sYXRpb24gY2FuIGJlIGV4dHJhcG9sYXRlZCBiZXlvbmQgMC4wIGFuZAogIC8vLyAxLjAsIHNvIG5lZ2F0aXZlIHZhbHVlcyBhbmQgdmFsdWVzIGdyZWF0ZXIgdGhhbiAxLjAgYXJlIHZhbGlkIChhbmQgY2FuCiAgLy8vIGVhc2lseSBiZSBnZW5lcmF0ZWQgYnkgY3VydmVzIHN1Y2ggYXMgW0N1cnZlcy5lbGFzdGljSW5PdXRdKS4KICAvLy8KICAvLy8gVmFsdWVzIGZvciBgdGAgYXJlIHVzdWFsbHkgb2J0YWluZWQgZnJvbSBhbiBbQW5pbWF0aW9uPGRvdWJsZT5dLCBzdWNoIGFzCiAgLy8vIGFuIFtBbmltYXRpb25Db250cm9sbGVyXS4KICAvLy8ge0BlbmR0ZW1wbGF0ZX0KICBzdGF0aWMgU2hhZG93IGxlcnAoU2hhZG93IGEsIFNoYWRvdyBiLCBkb3VibGUgdCkgewogICAgYXNzZXJ0KHQgIT0gbnVsbCk7CiAgICBpZiAoYSA9PSBudWxsICYmIGIgPT0gbnVsbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICBpZiAoYSA9PSBudWxsKQogICAgICByZXR1cm4gYi5zY2FsZSh0KTsKICAgIGlmIChiID09IG51bGwpCiAgICAgIHJldHVybiBhLnNjYWxlKDEuMCAtIHQpOwogICAgcmV0dXJuIFNoYWRvdygKICAgICAgY29sb3I6IENvbG9yLmxlcnAoYS5jb2xvciwgYi5jb2xvciwgdCksCiAgICAgIG9mZnNldDogT2Zmc2V0LmxlcnAoYS5vZmZzZXQsIGIub2Zmc2V0LCB0KSwKICAgICAgYmx1clJhZGl1czogbGVycERvdWJsZShhLmJsdXJSYWRpdXMsIGIuYmx1clJhZGl1cywgdCksCiAgICApOwogIH0KCiAgLy8vIExpbmVhcmx5IGludGVycG9sYXRlIGJldHdlZW4gdHdvIGxpc3RzIG9mIHNoYWRvd3MuCiAgLy8vCiAgLy8vIElmIHRoZSBsaXN0cyBkaWZmZXIgaW4gbGVuZ3RoLCBleGNlc3MgaXRlbXMgYXJlIGxlcnBlZCB3aXRoIG51bGwuCiAgLy8vCiAgLy8vIHtAbWFjcm8gZGFydC51aS5zaGFkb3cubGVycH0KICBzdGF0aWMgTGlzdDxTaGFkb3c+IGxlcnBMaXN0KExpc3Q8U2hhZG93PiBhLCBMaXN0PFNoYWRvdz4gYiwgZG91YmxlIHQpIHsKICAgIGFzc2VydCh0ICE9IG51bGwpOwogICAgaWYgKGEgPT0gbnVsbCAmJiBiID09IG51bGwpCiAgICAgIHJldHVybiBudWxsOwogICAgYSA/Pz0gPFNoYWRvdz5bXTsKICAgIGIgPz89IDxTaGFkb3c+W107CiAgICBmaW5hbCBMaXN0PFNoYWRvdz4gcmVzdWx0ID0gPFNoYWRvdz5bXTsKICAgIGZpbmFsIGludCBjb21tb25MZW5ndGggPSBtYXRoLm1pbihhLmxlbmd0aCwgYi5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21tb25MZW5ndGg7IGkgKz0gMSkKICAgICAgcmVzdWx0LmFkZChTaGFkb3cubGVycChhW2ldLCBiW2ldLCB0KSk7CiAgICBmb3IgKGludCBpID0gY29tbW9uTGVuZ3RoOyBpIDwgYS5sZW5ndGg7IGkgKz0gMSkKICAgICAgcmVzdWx0LmFkZChhW2ldLnNjYWxlKDEuMCAtIHQpKTsKICAgIGZvciAoaW50IGkgPSBjb21tb25MZW5ndGg7IGkgPCBiLmxlbmd0aDsgaSArPSAxKQogICAgICByZXN1bHQuYWRkKGJbaV0uc2NhbGUodCkpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0oZHluYW1pYyBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpCiAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIG90aGVyIGlzIFNoYWRvdwogICAgICAgICYmIG90aGVyLmNvbG9yID09IGNvbG9yCiAgICAgICAgJiYgb3RoZXIub2Zmc2V0ID09IG9mZnNldAogICAgICAgICYmIG90aGVyLmJsdXJSYWRpdXMgPT0gYmx1clJhZGl1czsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gaGFzaFZhbHVlcyhjb2xvciwgb2Zmc2V0LCBibHVyUmFkaXVzKTsKCiAgLy8gU2VyaWFsaXplIFtzaGFkb3dzXSBpbnRvIEJ5dGVEYXRhLiBUaGUgZm9ybWF0IGlzIGEgc2luZ2xlIHVpbnRfMzJfdCBhdAogIC8vIHRoZSBiZWdpbm5pbmcgaW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mIHNoYWRvd3MsIGZvbGxvd2VkIGJ5IF9rQnl0ZXNQZXJTaGFkb3cKICAvLyBieXRlcyBmb3IgZWFjaCBzaGFkb3cuCiAgc3RhdGljIEJ5dGVEYXRhIF9lbmNvZGVTaGFkb3dzKExpc3Q8U2hhZG93PiBzaGFkb3dzKSB7CiAgICBpZiAoc2hhZG93cyA9PSBudWxsKQogICAgICByZXR1cm4gQnl0ZURhdGEoMCk7CgogICAgZmluYWwgaW50IGJ5dGVDb3VudCA9IHNoYWRvd3MubGVuZ3RoICogX2tCeXRlc1BlclNoYWRvdzsKICAgIGZpbmFsIEJ5dGVEYXRhIHNoYWRvd3NEYXRhID0gQnl0ZURhdGEoYnl0ZUNvdW50KTsKCiAgICBpbnQgc2hhZG93T2Zmc2V0ID0gMDsKICAgIGZvciAoaW50IHNoYWRvd0luZGV4ID0gMDsgc2hhZG93SW5kZXggPCBzaGFkb3dzLmxlbmd0aDsgKytzaGFkb3dJbmRleCkgewogICAgICBmaW5hbCBTaGFkb3cgc2hhZG93ID0gc2hhZG93c1tzaGFkb3dJbmRleF07CiAgICAgIGlmIChzaGFkb3cgPT0gbnVsbCkKICAgICAgICBjb250aW51ZTsKICAgICAgc2hhZG93T2Zmc2V0ID0gc2hhZG93SW5kZXggKiBfa0J5dGVzUGVyU2hhZG93OwoKICAgICAgc2hhZG93c0RhdGEuc2V0SW50MzIoX2tDb2xvck9mZnNldCArIHNoYWRvd09mZnNldCwKICAgICAgICBzaGFkb3cuY29sb3IudmFsdWUgXiBTaGFkb3cuX2tDb2xvckRlZmF1bHQsIF9rRmFrZUhvc3RFbmRpYW4pOwoKICAgICAgc2hhZG93c0RhdGEuc2V0RmxvYXQzMihfa1hPZmZzZXQgKyBzaGFkb3dPZmZzZXQsCiAgICAgICAgc2hhZG93Lm9mZnNldC5keCwgX2tGYWtlSG9zdEVuZGlhbik7CgogICAgICBzaGFkb3dzRGF0YS5zZXRGbG9hdDMyKF9rWU9mZnNldCArIHNoYWRvd09mZnNldCwKICAgICAgICBzaGFkb3cub2Zmc2V0LmR5LCBfa0Zha2VIb3N0RW5kaWFuKTsKCiAgICAgIHNoYWRvd3NEYXRhLnNldEZsb2F0MzIoX2tCbHVyT2Zmc2V0ICsgc2hhZG93T2Zmc2V0LAogICAgICAgIHNoYWRvdy5ibHVyUmFkaXVzLCBfa0Zha2VIb3N0RW5kaWFuKTsKICAgIH0KCiAgICByZXR1cm4gc2hhZG93c0RhdGE7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnVGV4dFNoYWRvdygkY29sb3IsICRvZmZzZXQsICRibHVyUmFkaXVzKSc7Cn0KCi8vLyBHZW5lcmljIGNhbGxiYWNrIHNpZ25hdHVyZSwgdXNlZCBieSBbX2Z1dHVyaXplXS4KdHlwZWRlZiBfQ2FsbGJhY2s8VD4gPSB2b2lkIEZ1bmN0aW9uKFQgcmVzdWx0KTsKCi8vLyBTaWduYXR1cmUgZm9yIGEgbWV0aG9kIHRoYXQgcmVjZWl2ZXMgYSBbX0NhbGxiYWNrXS4KLy8vCi8vLyBSZXR1cm4gdmFsdWUgc2hvdWxkIGJlIG51bGwgb24gc3VjY2VzcywgYW5kIGEgc3RyaW5nIGVycm9yIG1lc3NhZ2Ugb24KLy8vIGZhaWx1cmUuCnR5cGVkZWYgX0NhbGxiYWNrZXI8VD4gPSBTdHJpbmcgRnVuY3Rpb24oX0NhbGxiYWNrPFQ+IGNhbGxiYWNrKTsKCi8vLyBDb252ZXJ0cyBhIG1ldGhvZCB0aGF0IHJlY2VpdmVzIGEgdmFsdWUtcmV0dXJuaW5nIGNhbGxiYWNrIHRvIGEgbWV0aG9kIHRoYXQKLy8vIHJldHVybnMgYSBGdXR1cmUuCi8vLwovLy8gUmV0dXJuIGEgW1N0cmluZ10gdG8gY2F1c2UgYW4gW0V4Y2VwdGlvbl0gdG8gYmUgc3luY2hyb25vdXNseSB0aHJvd24gd2l0aAovLy8gdGhhdCBzdHJpbmcgYXMgYSBtZXNzYWdlLgovLy8KLy8vIElmIHRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCBudWxsLCB0aGUgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yLgovLy8KLy8vIEV4YW1wbGUgdXNhZ2U6Ci8vLwovLy8gYGBgZGFydAovLy8gdHlwZWRlZiBJbnRDYWxsYmFjayA9IHZvaWQgRnVuY3Rpb24oaW50IHJlc3VsdCk7Ci8vLwovLy8gU3RyaW5nIF9kb1NvbWV0aGluZ0FuZENhbGxiYWNrKEludENhbGxiYWNrIGNhbGxiYWNrKSB7Ci8vLyAgIFRpbWVyKG5ldyBEdXJhdGlvbihzZWNvbmRzOiAxKSwgKCkgeyBjYWxsYmFjaygxKTsgfSk7Ci8vLyB9Ci8vLwovLy8gRnV0dXJlPGludD4gZG9Tb21ldGhpbmcoKSB7Ci8vLyAgIHJldHVybiBfZnV0dXJpemUoX2RvU29tZXRoaW5nQW5kQ2FsbGJhY2spOwovLy8gfQovLy8gYGBgCkZ1dHVyZTxUPiBfZnV0dXJpemU8VD4oX0NhbGxiYWNrZXI8VD4gY2FsbGJhY2tlcikgewogIGZpbmFsIENvbXBsZXRlcjxUPiBjb21wbGV0ZXIgPSBDb21wbGV0ZXI8VD4uc3luYygpOwogIGZpbmFsIFN0cmluZyBlcnJvciA9IGNhbGxiYWNrZXIoKFQgdCkgewogICAgaWYgKHQgPT0gbnVsbCkgewogICAgICBjb21wbGV0ZXIuY29tcGxldGVFcnJvcihFeGNlcHRpb24oJ29wZXJhdGlvbiBmYWlsZWQnKSk7CiAgICB9IGVsc2UgewogICAgICBjb21wbGV0ZXIuY29tcGxldGUodCk7CiAgICB9CiAgfSk7CiAgaWYgKGVycm9yICE9IG51bGwpCiAgICB0aHJvdyBFeGNlcHRpb24oZXJyb3IpOwogIHJldHVybiBjb21wbGV0ZXIuZnV0dXJlOwp9CpExADxKHgERAU1KUFFQ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dHRlciBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgovLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQudWk7CgovLy8gU2lnbmF0dXJlIG9mIGNhbGxiYWNrcyB0aGF0IGhhdmUgbm8gYXJndW1lbnRzIGFuZCByZXR1cm4gbm8gZGF0YS4KdHlwZWRlZiBWb2lkQ2FsbGJhY2sgPSB2b2lkIEZ1bmN0aW9uKCk7CgovLy8gU2lnbmF0dXJlIGZvciBbV2luZG93Lm9uQmVnaW5GcmFtZV0uCnR5cGVkZWYgRnJhbWVDYWxsYmFjayA9IHZvaWQgRnVuY3Rpb24oRHVyYXRpb24gZHVyYXRpb24pOwoKLy8vIFNpZ25hdHVyZSBmb3IgW1dpbmRvdy5vblJlcG9ydFRpbWluZ3NdLgovLy8KLy8vIHtAdGVtcGxhdGUgZGFydC51aS5UaW1pbmdzQ2FsbGJhY2subGlzdH0KLy8vIFRoZSBjYWxsYmFjayB0YWtlcyBhIGxpc3Qgb2YgW0ZyYW1lVGltaW5nXSBiZWNhdXNlIGl0IG1heSBub3QgYmUKLy8vIGltbWVkaWF0ZWx5IHRyaWdnZXJlZCBhZnRlciBlYWNoIGZyYW1lLiBJbnN0ZWFkLCBGbHV0dGVyIHRyaWVzIHRvIGJhdGNoCi8vLyBmcmFtZXMgdG9nZXRoZXIgYW5kIHNlbmQgYWxsIHRoZWlyIHRpbWluZ3MgYXQgb25jZSB0byBkZWNyZWFzZSB0aGUKLy8vIG92ZXJoZWFkIChhcyB0aGlzIGlzIGF2YWlsYWJsZSBpbiB0aGUgcmVsZWFzZSBtb2RlKS4gVGhlIGxpc3QgaXMgc29ydGVkIGluCi8vLyBhc2NlbmRpbmcgb3JkZXIgb2YgdGltZSAoZWFybGllc3QgZnJhbWUgZmlyc3QpLiBUaGUgdGltaW5nIG9mIGFueSBmcmFtZQovLy8gd2lsbCBiZSBzZW50IHdpdGhpbiBhYm91dCAxIHNlY29uZCAoMTAwbXMgaWYgaW4gdGhlIHByb2ZpbGUvZGVidWcgbW9kZSkKLy8vIGV2ZW4gaWYgdGhlcmUgYXJlIG5vIGxhdGVyIGZyYW1lcyB0byBiYXRjaC4gVGhlIHRpbWluZyBvZiB0aGUgZmlyc3QgZnJhbWUKLy8vIHdpbGwgYmUgc2VudCBpbW1lZGlhdGVseSB3aXRob3V0IGJhdGNoaW5nLgovLy8ge0BlbmR0ZW1wbGF0ZX0KdHlwZWRlZiBUaW1pbmdzQ2FsbGJhY2sgPSB2b2lkIEZ1bmN0aW9uKExpc3Q8RnJhbWVUaW1pbmc+IHRpbWluZ3MpOwoKLy8vIFNpZ25hdHVyZSBmb3IgW1dpbmRvdy5vblBvaW50ZXJEYXRhUGFja2V0XS4KdHlwZWRlZiBQb2ludGVyRGF0YVBhY2tldENhbGxiYWNrID0gdm9pZCBGdW5jdGlvbihQb2ludGVyRGF0YVBhY2tldCBwYWNrZXQpOwoKLy8vIFNpZ25hdHVyZSBmb3IgW1dpbmRvdy5vblNlbWFudGljc0FjdGlvbl0uCnR5cGVkZWYgU2VtYW50aWNzQWN0aW9uQ2FsbGJhY2sgPSB2b2lkIEZ1bmN0aW9uKGludCBpZCwgU2VtYW50aWNzQWN0aW9uIGFjdGlvbiwgQnl0ZURhdGEgYXJncyk7CgovLy8gU2lnbmF0dXJlIGZvciByZXNwb25zZXMgdG8gcGxhdGZvcm0gbWVzc2FnZXMuCi8vLwovLy8gVXNlZCBhcyBhIHBhcmFtZXRlciB0byBbV2luZG93LnNlbmRQbGF0Zm9ybU1lc3NhZ2VdIGFuZAovLy8gW1dpbmRvdy5vblBsYXRmb3JtTWVzc2FnZV0uCnR5cGVkZWYgUGxhdGZvcm1NZXNzYWdlUmVzcG9uc2VDYWxsYmFjayA9IHZvaWQgRnVuY3Rpb24oQnl0ZURhdGEgZGF0YSk7CgovLy8gU2lnbmF0dXJlIGZvciBbV2luZG93Lm9uUGxhdGZvcm1NZXNzYWdlXS4KdHlwZWRlZiBQbGF0Zm9ybU1lc3NhZ2VDYWxsYmFjayA9IHZvaWQgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIEJ5dGVEYXRhIGRhdGEsIFBsYXRmb3JtTWVzc2FnZVJlc3BvbnNlQ2FsbGJhY2sgY2FsbGJhY2spOwoKLy8gU2lnbmF0dXJlIGZvciBfc2V0TmVlZHNSZXBvcnRUaW1pbmdzLgp0eXBlZGVmIF9TZXROZWVkc1JlcG9ydFRpbWluZ3NGdW5jID0gdm9pZCBGdW5jdGlvbihib29sIHZhbHVlKTsKCi8vLyBWYXJpb3VzIGltcG9ydGFudCB0aW1lIHBvaW50cyBpbiB0aGUgbGlmZXRpbWUgb2YgYSBmcmFtZS4KLy8vCi8vLyBbRnJhbWVUaW1pbmddIHJlY29yZHMgYSB0aW1lc3RhbXAgb2YgZWFjaCBwaGFzZSBmb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMuCmVudW0gRnJhbWVQaGFzZSB7CiAgLy8vIFdoZW4gdGhlIFVJIHRocmVhZCBzdGFydHMgYnVpbGRpbmcgYSBmcmFtZS4KICAvLy8KICAvLy8gU2VlIGFsc28gW0ZyYW1lVGltaW5nLmJ1aWxkRHVyYXRpb25dLgogIGJ1aWxkU3RhcnQsCgogIC8vLyBXaGVuIHRoZSBVSSB0aHJlYWQgZmluaXNoZXMgYnVpbGRpbmcgYSBmcmFtZS4KICAvLy8KICAvLy8gU2VlIGFsc28gW0ZyYW1lVGltaW5nLmJ1aWxkRHVyYXRpb25dLgogIGJ1aWxkRmluaXNoLAoKICAvLy8gV2hlbiB0aGUgR1BVIHRocmVhZCBzdGFydHMgcmFzdGVyaXppbmcgYSBmcmFtZS4KICAvLy8KICAvLy8gU2VlIGFsc28gW0ZyYW1lVGltaW5nLnJhc3RlckR1cmF0aW9uXS4KICByYXN0ZXJTdGFydCwKCiAgLy8vIFdoZW4gdGhlIEdQVSB0aHJlYWQgZmluaXNoZXMgcmFzdGVyaXppbmcgYSBmcmFtZS4KICAvLy8KICAvLy8gU2VlIGFsc28gW0ZyYW1lVGltaW5nLnJhc3RlckR1cmF0aW9uXS4KICByYXN0ZXJGaW5pc2gsCn0KCi8vLyBUaW1lLXJlbGF0ZWQgcGVyZm9ybWFuY2UgbWV0cmljcyBvZiBhIGZyYW1lLgovLy8KLy8vIElmIHlvdSdyZSB1c2luZyB0aGUgd2hvbGUgRmx1dHRlciBmcmFtZXdvcmssIHBsZWFzZSB1c2UKLy8vIFtTY2hlZHVsZXJCaW5kaW5nLmFkZFRpbWluZ3NDYWxsYmFja10gdG8gZ2V0IHRoaXMuIEl0J3MgcHJlZmVycmVkIG92ZXIgdXNpbmcKLy8vIFtXaW5kb3cub25SZXBvcnRUaW1pbmdzXSBkaXJlY3RseSBiZWNhdXNlCi8vLyBbU2NoZWR1bGVyQmluZGluZy5hZGRUaW1pbmdzQ2FsbGJhY2tdIGFsbG93cyBtdWx0aXBsZSBjYWxsYmFja3MuIElmCi8vLyBbU2NoZWR1bGVyQmluZGluZ10gaXMgdW5hdmFpbGFibGUsIHRoZW4gc2VlIFtXaW5kb3cub25SZXBvcnRUaW1pbmdzXSBmb3IgaG93Ci8vLyB0byBnZXQgdGhpcy4KLy8vCi8vLyBUaGUgbWV0cmljcyBpbiBkZWJ1ZyBtb2RlIChgZmx1dHRlciBydW5gIHdpdGhvdXQgYW55IGZsYWdzKSBtYXkgYmUgdmVyeQovLy8gZGlmZmVyZW50IGZyb20gdGhvc2UgaW4gcHJvZmlsZSBhbmQgcmVsZWFzZSBtb2RlcyBkdWUgdG8gdGhlIGRlYnVnIG92ZXJoZWFkLgovLy8gVGhlcmVmb3JlIGl0J3MgcmVjb21tZW5kZWQgdG8gb25seSBtb25pdG9yIGFuZCBhbmFseXplIHBlcmZvcm1hbmNlIG1ldHJpY3MKLy8vIGluIHByb2ZpbGUgYW5kIHJlbGVhc2UgbW9kZXMuCmNsYXNzIEZyYW1lVGltaW5nIHsKICAvLy8gQ29uc3RydWN0IFtGcmFtZVRpbWluZ10gd2l0aCByYXcgdGltZXN0YW1wcyBpbiBtaWNyb3NlY29uZHMuCiAgLy8vCiAgLy8vIExpc3QgW3RpbWVzdGFtcHNdIG11c3QgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgZWxlbWVudHMgYXMKICAvLy8gW0ZyYW1lUGhhc2UudmFsdWVzXS4KICAvLy8KICAvLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyB1c3VhbGx5IG9ubHkgY2FsbGVkIGJ5IHRoZSBGbHV0dGVyIGVuZ2luZSwgb3IgYSB0ZXN0LgogIC8vLyBUbyBnZXQgdGhlIFtGcmFtZVRpbWluZ10gb2YgeW91ciBhcHAsIHNlZSBbV2luZG93Lm9uUmVwb3J0VGltaW5nc10uCiAgRnJhbWVUaW1pbmcoTGlzdDxpbnQ+IHRpbWVzdGFtcHMpCiAgICAgIDogYXNzZXJ0KHRpbWVzdGFtcHMubGVuZ3RoID09IEZyYW1lUGhhc2UudmFsdWVzLmxlbmd0aCksIF90aW1lc3RhbXBzID0gdGltZXN0YW1wczsKCiAgLy8vIFRoaXMgaXMgYSByYXcgdGltZXN0YW1wIGluIG1pY3Jvc2Vjb25kcyBmcm9tIHNvbWUgZXBvY2guIFRoZSBlcG9jaCBpbiBhbGwKICAvLy8gW0ZyYW1lVGltaW5nXSBpcyB0aGUgc2FtZSwgYnV0IGl0IG1heSBub3QgbWF0Y2ggW0RhdGVUaW1lXSdzIGVwb2NoLgogIGludCB0aW1lc3RhbXBJbk1pY3Jvc2Vjb25kcyhGcmFtZVBoYXNlIHBoYXNlKSA9PiBfdGltZXN0YW1wc1twaGFzZS5pbmRleF07CgogIER1cmF0aW9uIF9yYXdEdXJhdGlvbihGcmFtZVBoYXNlIHBoYXNlKSA9PiBEdXJhdGlvbihtaWNyb3NlY29uZHM6IF90aW1lc3RhbXBzW3BoYXNlLmluZGV4XSk7CgogIC8vLyBUaGUgZHVyYXRpb24gdG8gYnVpbGQgdGhlIGZyYW1lIG9uIHRoZSBVSSB0aHJlYWQuCiAgLy8vCiAgLy8vIFRoZSBidWlsZCBzdGFydHMgYXBwcm94aW1hdGVseSB3aGVuIFtXaW5kb3cub25CZWdpbkZyYW1lXSBpcyBjYWxsZWQuIFRoZQogIC8vLyBbRHVyYXRpb25dIGluIHRoZSBbV2luZG93Lm9uQmVnaW5GcmFtZV0gY2FsbGJhY2sgaXMgZXhhY3RseSB0aGUKICAvLy8gYER1cmF0aW9uKG1pY3Jvc2Vjb25kczogdGltZXN0YW1wSW5NaWNyb3NlY29uZHMoRnJhbWVQaGFzZS5idWlsZFN0YXJ0KSlgLgogIC8vLwogIC8vLyBUaGUgYnVpbGQgZmluaXNoZXMgd2hlbiBbV2luZG93LnJlbmRlcl0gaXMgY2FsbGVkLgogIC8vLwogIC8vLyB7QHRlbXBsYXRlIGRhcnQudWkuRnJhbWVUaW1pbmcuZnBzX3Ntb290aG5lc3NfbWlsbGlzZWNvbmRzfQogIC8vLyBUbyBlbnN1cmUgc21vb3RoIGFuaW1hdGlvbnMgb2YgWCBmcHMsIHRoaXMgc2hvdWxkIG5vdCBleGNlZWQgMTAwMC9YCiAgLy8vIG1pbGxpc2Vjb25kcy4KICAvLy8ge0BlbmR0ZW1wbGF0ZX0KICAvLy8ge0B0ZW1wbGF0ZSBkYXJ0LnVpLkZyYW1lVGltaW5nLmZwc19taWxsaXNlY29uZHN9CiAgLy8vIFRoYXQncyBhYm91dCAxNm1zIGZvciA2MGZwcywgYW5kIDhtcyBmb3IgMTIwZnBzLgogIC8vLyB7QGVuZHRlbXBsYXRlfQogIER1cmF0aW9uIGdldCBidWlsZER1cmF0aW9uID0+IF9yYXdEdXJhdGlvbihGcmFtZVBoYXNlLmJ1aWxkRmluaXNoKSAtIF9yYXdEdXJhdGlvbihGcmFtZVBoYXNlLmJ1aWxkU3RhcnQpOwoKICAvLy8gVGhlIGR1cmF0aW9uIHRvIHJhc3Rlcml6ZSB0aGUgZnJhbWUgb24gdGhlIEdQVSB0aHJlYWQuCiAgLy8vCiAgLy8vIHtAbWFjcm8gZGFydC51aS5GcmFtZVRpbWluZy5mcHNfc21vb3RobmVzc19taWxsaXNlY29uZHN9CiAgLy8vIHtAbWFjcm8gZGFydC51aS5GcmFtZVRpbWluZy5mcHNfbWlsbGlzZWNvbmRzfQogIER1cmF0aW9uIGdldCByYXN0ZXJEdXJhdGlvbiA9PiBfcmF3RHVyYXRpb24oRnJhbWVQaGFzZS5yYXN0ZXJGaW5pc2gpIC0gX3Jhd0R1cmF0aW9uKEZyYW1lUGhhc2UucmFzdGVyU3RhcnQpOwoKICAvLy8gVGhlIHRpbWVzcGFuIGJldHdlZW4gYnVpbGQgc3RhcnQgYW5kIHJhc3RlciBmaW5pc2guCiAgLy8vCiAgLy8vIFRvIGFjaGlldmUgdGhlIGxvd2VzdCBsYXRlbmN5IG9uIGFuIFggZnBzIGRpc3BsYXksIHRoaXMgc2hvdWxkIG5vdCBleGNlZWQKICAvLy8gMTAwMC9YIG1pbGxpc2Vjb25kcy4KICAvLy8ge0BtYWNybyBkYXJ0LnVpLkZyYW1lVGltaW5nLmZwc19taWxsaXNlY29uZHN9CiAgLy8vCiAgLy8vIFNlZSBhbHNvIFtidWlsZER1cmF0aW9uXSBhbmQgW3Jhc3RlckR1cmF0aW9uXS4KICBEdXJhdGlvbiBnZXQgdG90YWxTcGFuID0+IF9yYXdEdXJhdGlvbihGcmFtZVBoYXNlLnJhc3RlckZpbmlzaCkgLSBfcmF3RHVyYXRpb24oRnJhbWVQaGFzZS5idWlsZFN0YXJ0KTsKCiAgZmluYWwgTGlzdDxpbnQ+IF90aW1lc3RhbXBzOyAgLy8gaW4gbWljcm9zZWNvbmRzCgogIFN0cmluZyBfZm9ybWF0TVMoRHVyYXRpb24gZHVyYXRpb24pID0+ICcke2R1cmF0aW9uLmluTWljcm9zZWNvbmRzICogMC4wMDF9bXMnOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJyRydW50aW1lVHlwZShidWlsZER1cmF0aW9uOiAke19mb3JtYXRNUyhidWlsZER1cmF0aW9uKX0sIHJhc3RlckR1cmF0aW9uOiAke19mb3JtYXRNUyhyYXN0ZXJEdXJhdGlvbil9LCB0b3RhbFNwYW46ICR7X2Zvcm1hdE1TKHRvdGFsU3Bhbil9KSc7CiAgfQp9CgovLy8gU3RhdGVzIHRoYXQgYW4gYXBwbGljYXRpb24gY2FuIGJlIGluLgovLy8KLy8vIFRoZSB2YWx1ZXMgYmVsb3cgZGVzY3JpYmUgbm90aWZpY2F0aW9ucyBmcm9tIHRoZSBvcGVyYXRpbmcgc3lzdGVtLgovLy8gQXBwbGljYXRpb25zIHNob3VsZCBub3QgZXhwZWN0IHRvIGFsd2F5cyByZWNlaXZlIGFsbCBwb3NzaWJsZQovLy8gbm90aWZpY2F0aW9ucy4gRm9yIGV4YW1wbGUsIGlmIHRoZSB1c2VycyBwdWxscyBvdXQgdGhlIGJhdHRlcnkgZnJvbSB0aGUKLy8vIGRldmljZSwgbm8gbm90aWZpY2F0aW9uIHdpbGwgYmUgc2VudCBiZWZvcmUgdGhlIGFwcGxpY2F0aW9uIGlzIHN1ZGRlbmx5Ci8vLyB0ZXJtaW5hdGVkLCBhbG9uZyB3aXRoIHRoZSByZXN0IG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtLgovLy8KLy8vIFNlZSBhbHNvOgovLy8KLy8vICAqIFtXaWRnZXRzQmluZGluZ09ic2VydmVyXSwgZm9yIGEgbWVjaGFuaXNtIHRvIG9ic2VydmUgdGhlIGxpZmVjeWNsZSBzdGF0ZQovLy8gICAgZnJvbSB0aGUgd2lkZ2V0cyBsYXllci4KZW51bSBBcHBMaWZlY3ljbGVTdGF0ZSB7CiAgLy8vIFRoZSBhcHBsaWNhdGlvbiBpcyB2aXNpYmxlIGFuZCByZXNwb25kaW5nIHRvIHVzZXIgaW5wdXQuCiAgcmVzdW1lZCwKCiAgLy8vIFRoZSBhcHBsaWNhdGlvbiBpcyBpbiBhbiBpbmFjdGl2ZSBzdGF0ZSBhbmQgaXMgbm90IHJlY2VpdmluZyB1c2VyIGlucHV0LgogIC8vLwogIC8vLyBPbiBpT1MsIHRoaXMgc3RhdGUgY29ycmVzcG9uZHMgdG8gYW4gYXBwIG9yIHRoZSBGbHV0dGVyIGhvc3QgdmlldyBydW5uaW5nCiAgLy8vIGluIHRoZSBmb3JlZ3JvdW5kIGluYWN0aXZlIHN0YXRlLiBBcHBzIHRyYW5zaXRpb24gdG8gdGhpcyBzdGF0ZSB3aGVuIGluCiAgLy8vIGEgcGhvbmUgY2FsbCwgcmVzcG9uZGluZyB0byBhIFRvdWNoSUQgcmVxdWVzdCwgd2hlbiBlbnRlcmluZyB0aGUgYXBwCiAgLy8vIHN3aXRjaGVyIG9yIHRoZSBjb250cm9sIGNlbnRlciwgb3Igd2hlbiB0aGUgVUlWaWV3Q29udHJvbGxlciBob3N0aW5nIHRoZQogIC8vLyBGbHV0dGVyIGFwcCBpcyB0cmFuc2l0aW9uaW5nLgogIC8vLwogIC8vLyBPbiBBbmRyb2lkLCB0aGlzIGNvcnJlc3BvbmRzIHRvIGFuIGFwcCBvciB0aGUgRmx1dHRlciBob3N0IHZpZXcgcnVubmluZwogIC8vLyBpbiB0aGUgZm9yZWdyb3VuZCBpbmFjdGl2ZSBzdGF0ZS4gIEFwcHMgdHJhbnNpdGlvbiB0byB0aGlzIHN0YXRlIHdoZW4KICAvLy8gYW5vdGhlciBhY3Rpdml0eSBpcyBmb2N1c2VkLCBzdWNoIGFzIGEgc3BsaXQtc2NyZWVuIGFwcCwgYSBwaG9uZSBjYWxsLAogIC8vLyBhIHBpY3R1cmUtaW4tcGljdHVyZSBhcHAsIGEgc3lzdGVtIGRpYWxvZywgb3IgYW5vdGhlciB3aW5kb3cuCiAgLy8vCiAgLy8vIEFwcHMgaW4gdGhpcyBzdGF0ZSBzaG91bGQgYXNzdW1lIHRoYXQgdGhleSBtYXkgYmUgW3BhdXNlZF0gYXQgYW55IHRpbWUuCiAgaW5hY3RpdmUsCgogIC8vLyBUaGUgYXBwbGljYXRpb24gaXMgbm90IGN1cnJlbnRseSB2aXNpYmxlIHRvIHRoZSB1c2VyLCBub3QgcmVzcG9uZGluZyB0bwogIC8vLyB1c2VyIGlucHV0LCBhbmQgcnVubmluZyBpbiB0aGUgYmFja2dyb3VuZC4KICAvLy8KICAvLy8gV2hlbiB0aGUgYXBwbGljYXRpb24gaXMgaW4gdGhpcyBzdGF0ZSwgdGhlIGVuZ2luZSB3aWxsIG5vdCBjYWxsIHRoZQogIC8vLyBbV2luZG93Lm9uQmVnaW5GcmFtZV0gYW5kIFtXaW5kb3cub25EcmF3RnJhbWVdIGNhbGxiYWNrcy4KICBwYXVzZWQsCgogIC8vLyBUaGUgYXBwbGljYXRpb24gaXMgc3RpbGwgaG9zdGVkIG9uIGEgZmx1dHRlciBlbmdpbmUgYnV0IGlzIGRldGFjaGVkIGZyb20KICAvLy8gYW55IGhvc3Qgdmlld3MuCiAgLy8vCiAgLy8vIFdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIGluIHRoaXMgc3RhdGUsIHRoZSBlbmdpbmUgaXMgcnVubmluZyB3aXRob3V0CiAgLy8vIGEgdmlldy4gSXQgY2FuIGVpdGhlciBiZSBpbiB0aGUgcHJvZ3Jlc3Mgb2YgYXR0YWNoaW5nIGEgdmlldyB3aGVuIGVuZ2luZQogIC8vLyB3YXMgZmlyc3QgaW5pdGlhbGl6ZXMsIG9yIGFmdGVyIHRoZSB2aWV3IGJlaW5nIGRlc3Ryb3llZCBkdWUgdG8gYSBOYXZpZ2F0b3IKICAvLy8gcG9wLgogIGRldGFjaGVkLAp9CgovLy8gQSByZXByZXNlbnRhdGlvbiBvZiBkaXN0YW5jZXMgZm9yIGVhY2ggb2YgdGhlIGZvdXIgZWRnZXMgb2YgYSByZWN0YW5nbGUsCi8vLyB1c2VkIHRvIGVuY29kZSB0aGUgdmlldyBpbnNldHMgYW5kIHBhZGRpbmcgdGhhdCBhcHBsaWNhdGlvbnMgc2hvdWxkIHBsYWNlCi8vLyBhcm91bmQgdGhlaXIgdXNlciBpbnRlcmZhY2UsIGFzIGV4cG9zZWQgYnkgW1dpbmRvdy52aWV3SW5zZXRzXSBhbmQKLy8vIFtXaW5kb3cucGFkZGluZ10uIFZpZXcgaW5zZXRzIGFuZCBwYWRkaW5nIGFyZSBwcmVmZXJhYmx5IHJlYWQgdmlhCi8vLyBbTWVkaWFRdWVyeS5vZl0uCi8vLwovLy8gRm9yIGEgZ2VuZXJpYyBjbGFzcyB0aGF0IHJlcHJlc2VudHMgZGlzdGFuY2VzIGFyb3VuZCBhIHJlY3RhbmdsZSwgc2VlIHRoZQovLy8gW0VkZ2VJbnNldHNdIGNsYXNzLgovLy8KLy8vIFNlZSBhbHNvOgovLy8KLy8vICAqIFtXaWRnZXRzQmluZGluZ09ic2VydmVyXSwgZm9yIGEgd2lkZ2V0cyBsYXllciBtZWNoYW5pc20gdG8gcmVjZWl2ZQovLy8gICAgbm90aWZpY2F0aW9ucyB3aGVuIHRoZSBwYWRkaW5nIGNoYW5nZXMuCi8vLyAgKiBbTWVkaWFRdWVyeS5vZl0sIGZvciB0aGUgcHJlZmVycmVkIG1lY2hhbmlzbSBmb3IgYWNjZXNzaW5nIHRoZXNlIHZhbHVlcy4KLy8vICAqIFtTY2FmZm9sZF0sIHdoaWNoIGF1dG9tYXRpY2FsbHkgYXBwbGllcyB0aGUgcGFkZGluZyBpbiBtYXRlcmlhbCBkZXNpZ24KLy8vICAgIGFwcGxpY2F0aW9ucy4KY2xhc3MgV2luZG93UGFkZGluZyB7CiAgY29uc3QgV2luZG93UGFkZGluZy5fKHsgdGhpcy5sZWZ0LCB0aGlzLnRvcCwgdGhpcy5yaWdodCwgdGhpcy5ib3R0b20gfSk7CgogIC8vLyBUaGUgZGlzdGFuY2UgZnJvbSB0aGUgbGVmdCBlZGdlIHRvIHRoZSBmaXJzdCB1bnBhZGRlZCBwaXhlbCwgaW4gcGh5c2ljYWwgcGl4ZWxzLgogIGZpbmFsIGRvdWJsZSBsZWZ0OwoKICAvLy8gVGhlIGRpc3RhbmNlIGZyb20gdGhlIHRvcCBlZGdlIHRvIHRoZSBmaXJzdCB1bnBhZGRlZCBwaXhlbCwgaW4gcGh5c2ljYWwgcGl4ZWxzLgogIGZpbmFsIGRvdWJsZSB0b3A7CgogIC8vLyBUaGUgZGlzdGFuY2UgZnJvbSB0aGUgcmlnaHQgZWRnZSB0byB0aGUgZmlyc3QgdW5wYWRkZWQgcGl4ZWwsIGluIHBoeXNpY2FsIHBpeGVscy4KICBmaW5hbCBkb3VibGUgcmlnaHQ7CgogIC8vLyBUaGUgZGlzdGFuY2UgZnJvbSB0aGUgYm90dG9tIGVkZ2UgdG8gdGhlIGZpcnN0IHVucGFkZGVkIHBpeGVsLCBpbiBwaHlzaWNhbCBwaXhlbHMuCiAgZmluYWwgZG91YmxlIGJvdHRvbTsKCiAgLy8vIEEgd2luZG93IHBhZGRpbmcgdGhhdCBoYXMgemVyb3MgZm9yIGVhY2ggZWRnZS4KICBzdGF0aWMgY29uc3QgV2luZG93UGFkZGluZyB6ZXJvID0gV2luZG93UGFkZGluZy5fKGxlZnQ6IDAuMCwgdG9wOiAwLjAsIHJpZ2h0OiAwLjAsIGJvdHRvbTogMC4wKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdXaW5kb3dQYWRkaW5nKGxlZnQ6ICRsZWZ0LCB0b3A6ICR0b3AsIHJpZ2h0OiAkcmlnaHQsIGJvdHRvbTogJGJvdHRvbSknOwogIH0KfQoKLy8vIEFuIGlkZW50aWZpZXIgdXNlZCB0byBzZWxlY3QgYSB1c2VyJ3MgbGFuZ3VhZ2UgYW5kIGZvcm1hdHRpbmcgcHJlZmVyZW5jZXMuCi8vLwovLy8gVGhpcyByZXByZXNlbnRzIGEgW1VuaWNvZGUgTGFuZ3VhZ2UKLy8vIElkZW50aWZpZXJdKGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS8jVW5pY29kZV9sYW5ndWFnZV9pZGVudGlmaWVyKQovLy8gKGkuZS4gd2l0aG91dCBMb2NhbGUgZXh0ZW5zaW9ucyksIGV4Y2VwdCB2YXJpYW50cyBhcmUgbm90IHN1cHBvcnRlZC4KLy8vCi8vLyBMb2NhbGVzIGFyZSBjYW5vbmljYWxpemVkIGFjY29yZGluZyB0byB0aGUgInByZWZlcnJlZCB2YWx1ZSIgZW50cmllcyBpbiB0aGUKLy8vIFtJQU5BIExhbmd1YWdlIFN1YnRhZwovLy8gUmVnaXN0cnldKGh0dHBzOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2xhbmd1YWdlLXN1YnRhZy1yZWdpc3RyeS9sYW5ndWFnZS1zdWJ0YWctcmVnaXN0cnkpLgovLy8gRm9yIGV4YW1wbGUsIGBjb25zdCBMb2NhbGUoJ2hlJylgIGFuZCBgY29uc3QgTG9jYWxlKCdpdycpYCBhcmUgZXF1YWwgYW5kCi8vLyBib3RoIGhhdmUgdGhlIFtsYW5ndWFnZUNvZGVdIGBoZWAsIGJlY2F1c2UgYGl3YCBpcyBhIGRlcHJlY2F0ZWQgbGFuZ3VhZ2UKLy8vIHN1YnRhZyB0aGF0IHdhcyByZXBsYWNlZCBieSB0aGUgc3VidGFnIGBoZWAuCi8vLwovLy8gU2VlIGFsc286Ci8vLwovLy8gICogW1dpbmRvdy5sb2NhbGVdLCB3aGljaCBzcGVjaWZpZXMgdGhlIHN5c3RlbSdzIGN1cnJlbnRseSBzZWxlY3RlZAovLy8gICAgW0xvY2FsZV0uCmNsYXNzIExvY2FsZSB7CiAgLy8vIENyZWF0ZXMgYSBuZXcgTG9jYWxlIG9iamVjdC4gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZQogIC8vLyBwcmltYXJ5IGxhbmd1YWdlIHN1YnRhZywgdGhlIHNlY29uZCBpcyB0aGUgcmVnaW9uIChhbHNvCiAgLy8vIHJlZmVycmVkIHRvIGFzICdjb3VudHJ5Jykgc3VidGFnLgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZToKICAvLy8KICAvLy8gYGBgZGFydAogIC8vLyBjb25zdCBMb2NhbGUgc3dpc3NGcmVuY2ggPSBMb2NhbGUoJ2ZyJywgJ0NIJyk7CiAgLy8vIGNvbnN0IExvY2FsZSBjYW5hZGlhbkZyZW5jaCA9IExvY2FsZSgnZnInLCAnQ0EnKTsKICAvLy8gYGBgCiAgLy8vCiAgLy8vIFRoZSBwcmltYXJ5IGxhbmd1YWdlIHN1YnRhZyBtdXN0IG5vdCBiZSBudWxsLiBUaGUgcmVnaW9uIHN1YnRhZyBpcwogIC8vLyBvcHRpb25hbC4gV2hlbiB0aGVyZSBpcyBubyByZWdpb24vY291bnRyeSBzdWJ0YWcsIHRoZSBwYXJhbWV0ZXIgc2hvdWxkCiAgLy8vIGJlIG9taXR0ZWQgb3IgcGFzc2VkIGBudWxsYCBpbnN0ZWFkIG9mIGFuIGVtcHR5LXN0cmluZy4KICAvLy8KICAvLy8gVGhlIHN1YnRhZyB2YWx1ZXMgYXJlIF9jYXNlIHNlbnNpdGl2ZV8gYW5kIG11c3QgYmUgb25lIG9mIHRoZSB2YWxpZAogIC8vLyBzdWJ0YWdzIGFjY29yZGluZyB0byBDTERSIHN1cHBsZW1lbnRhbCBkYXRhOgogIC8vLyBbbGFuZ3VhZ2VdKGh0dHA6Ly91bmljb2RlLm9yZy9jbGRyL2xhdGVzdC9jb21tb24vdmFsaWRpdHkvbGFuZ3VhZ2UueG1sKSwKICAvLy8gW3JlZ2lvbl0oaHR0cDovL3VuaWNvZGUub3JnL2NsZHIvbGF0ZXN0L2NvbW1vbi92YWxpZGl0eS9yZWdpb24ueG1sKS4gVGhlCiAgLy8vIHByaW1hcnkgbGFuZ3VhZ2Ugc3VidGFnIG11c3QgYmUgYXQgbGVhc3QgdHdvIGFuZCBhdCBtb3N0IGVpZ2h0IGxvd2VyY2FzZQogIC8vLyBsZXR0ZXJzLCBidXQgbm90IGZvdXIgbGV0dGVycy4gVGhlIHJlZ2lvbiByZWdpb24gc3VidGFnIG11c3QgYmUgdHdvCiAgLy8vIHVwcGVyY2FzZSBsZXR0ZXJzIG9yIHRocmVlIGRpZ2l0cy4gU2VlIHRoZSBbVW5pY29kZSBMYW5ndWFnZQogIC8vLyBJZGVudGlmaWVyXShodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvI1VuaWNvZGVfbGFuZ3VhZ2VfaWRlbnRpZmllcikKICAvLy8gc3BlY2lmaWNhdGlvbi4KICAvLy8KICAvLy8gVmFsaWRpdHkgaXMgbm90IGNoZWNrZWQgYnkgZGVmYXVsdCwgYnV0IHNvbWUgbWV0aG9kcyBtYXkgdGhyb3cgYXdheQogIC8vLyBpbnZhbGlkIGRhdGEuCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgKiBbTG9jYWxlLmZyb21TdWJ0YWdzXSwgd2hpY2ggYWxzbyBhbGxvd3MgYSBbc2NyaXB0Q29kZV0gdG8gYmUKICAvLy8gICAgc3BlY2lmaWVkLgogIGNvbnN0IExvY2FsZSgKICAgIHRoaXMuX2xhbmd1YWdlQ29kZSwgWwogICAgdGhpcy5fY291bnRyeUNvZGUsCiAgXSkgOiBhc3NlcnQoX2xhbmd1YWdlQ29kZSAhPSBudWxsKSwKICAgICAgIGFzc2VydChfbGFuZ3VhZ2VDb2RlICE9ICcnKSwKICAgICAgIHNjcmlwdENvZGUgPSBudWxsOwoKICAvLy8gQ3JlYXRlcyBhIG5ldyBMb2NhbGUgb2JqZWN0LgogIC8vLwogIC8vLyBUaGUga2V5d29yZCBhcmd1bWVudHMgc3BlY2lmeSB0aGUgc3VidGFncyBvZiB0aGUgTG9jYWxlLgogIC8vLwogIC8vLyBUaGUgc3VidGFnIHZhbHVlcyBhcmUgX2Nhc2Ugc2Vuc2l0aXZlXyBhbmQgbXVzdCBiZSB2YWxpZCBzdWJ0YWdzIGFjY29yZGluZwogIC8vLyB0byBDTERSIHN1cHBsZW1lbnRhbCBkYXRhOgogIC8vLyBbbGFuZ3VhZ2VdKGh0dHA6Ly91bmljb2RlLm9yZy9jbGRyL2xhdGVzdC9jb21tb24vdmFsaWRpdHkvbGFuZ3VhZ2UueG1sKSwKICAvLy8gW3NjcmlwdF0oaHR0cDovL3VuaWNvZGUub3JnL2NsZHIvbGF0ZXN0L2NvbW1vbi92YWxpZGl0eS9zY3JpcHQueG1sKSBhbmQKICAvLy8gW3JlZ2lvbl0oaHR0cDovL3VuaWNvZGUub3JnL2NsZHIvbGF0ZXN0L2NvbW1vbi92YWxpZGl0eS9yZWdpb24ueG1sKSBmb3IKICAvLy8gZWFjaCBvZiBsYW5ndWFnZUNvZGUsIHNjcmlwdENvZGUgYW5kIGNvdW50cnlDb2RlIHJlc3BlY3RpdmVseS4KICAvLy8KICAvLy8gVGhlIFtjb3VudHJ5Q29kZV0gc3VidGFnIGlzIG9wdGlvbmFsLiBXaGVuIHRoZXJlIGlzIG5vIGNvdW50cnkgc3VidGFnLAogIC8vLyB0aGUgcGFyYW1ldGVyIHNob3VsZCBiZSBvbWl0dGVkIG9yIHBhc3NlZCBgbnVsbGAgaW5zdGVhZCBvZiBhbiBlbXB0eS1zdHJpbmcuCiAgLy8vCiAgLy8vIFZhbGlkaXR5IGlzIG5vdCBjaGVja2VkIGJ5IGRlZmF1bHQsIGJ1dCBzb21lIG1ldGhvZHMgbWF5IHRocm93IGF3YXkKICAvLy8gaW52YWxpZCBkYXRhLgogIGNvbnN0IExvY2FsZS5mcm9tU3VidGFncyh7CiAgICBTdHJpbmcgbGFuZ3VhZ2VDb2RlID0gJ3VuZCcsCiAgICB0aGlzLnNjcmlwdENvZGUsCiAgICBTdHJpbmcgY291bnRyeUNvZGUsCiAgfSkgOiBhc3NlcnQobGFuZ3VhZ2VDb2RlICE9IG51bGwpLAogICAgICAgYXNzZXJ0KGxhbmd1YWdlQ29kZSAhPSAnJyksCiAgICAgICBfbGFuZ3VhZ2VDb2RlID0gbGFuZ3VhZ2VDb2RlLAogICAgICAgYXNzZXJ0KHNjcmlwdENvZGUgIT0gJycpLAogICAgICAgYXNzZXJ0KGNvdW50cnlDb2RlICE9ICcnKSwKICAgICAgIF9jb3VudHJ5Q29kZSA9IGNvdW50cnlDb2RlOwoKICAvLy8gVGhlIHByaW1hcnkgbGFuZ3VhZ2Ugc3VidGFnIGZvciB0aGUgbG9jYWxlLgogIC8vLwogIC8vLyBUaGlzIG11c3Qgbm90IGJlIG51bGwuIEl0IG1heSBiZSAndW5kJywgcmVwcmVzZW50aW5nICd1bmRlZmluZWQnLgogIC8vLwogIC8vLyBUaGlzIGlzIGV4cGVjdGVkIHRvIGJlIHN0cmluZyByZWdpc3RlcmVkIGluIHRoZSBbSUFOQSBMYW5ndWFnZSBTdWJ0YWcKICAvLy8gUmVnaXN0cnldKGh0dHBzOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2xhbmd1YWdlLXN1YnRhZy1yZWdpc3RyeS9sYW5ndWFnZS1zdWJ0YWctcmVnaXN0cnkpCiAgLy8vIHdpdGggdGhlIHR5cGUgImxhbmd1YWdlIi4gVGhlIHN0cmluZyBzcGVjaWZpZWQgbXVzdCBtYXRjaCB0aGUgY2FzZSBvZiB0aGUKICAvLy8gc3RyaW5nIGluIHRoZSByZWdpc3RyeS4KICAvLy8KICAvLy8gTGFuZ3VhZ2Ugc3VidGFncyB0aGF0IGFyZSBkZXByZWNhdGVkIGluIHRoZSByZWdpc3RyeSBhbmQgaGF2ZSBhIHByZWZlcnJlZAogIC8vLyBjb2RlIGFyZSBjaGFuZ2VkIHRvIHRoZWlyIHByZWZlcnJlZCBjb2RlLiBGb3IgZXhhbXBsZSwgYGNvbnN0CiAgLy8vIExvY2FsZSgnaGUnKWAgYW5kIGBjb25zdCBMb2NhbGUoJ2l3JylgIGFyZSBlcXVhbCwgYW5kIGJvdGggaGF2ZSB0aGUKICAvLy8gW2xhbmd1YWdlQ29kZV0gYGhlYCwgYmVjYXVzZSBgaXdgIGlzIGEgZGVwcmVjYXRlZCBsYW5ndWFnZSBzdWJ0YWcgdGhhdCB3YXMKICAvLy8gcmVwbGFjZWQgYnkgdGhlIHN1YnRhZyBgaGVgLgogIC8vLwogIC8vLyBUaGlzIG11c3QgYmUgYSB2YWxpZCBVbmljb2RlIExhbmd1YWdlIHN1YnRhZyBhcyBsaXN0ZWQgaW4gW1VuaWNvZGUgQ0xEUgogIC8vLyBzdXBwbGVtZW50YWwKICAvLy8gZGF0YV0oaHR0cDovL3VuaWNvZGUub3JnL2NsZHIvbGF0ZXN0L2NvbW1vbi92YWxpZGl0eS9sYW5ndWFnZS54bWwpLgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogW0xvY2FsZS5mcm9tU3VidGFnc10sIHdoaWNoIGRlc2NyaWJlcyB0aGUgY29udmVudGlvbnMgZm9yIGNyZWF0aW5nCiAgLy8vICAgIFtMb2NhbGVdIG9iamVjdHMuCiAgU3RyaW5nIGdldCBsYW5ndWFnZUNvZGUgPT4gX2RlcHJlY2F0ZWRMYW5ndWFnZVN1YnRhZ01hcFtfbGFuZ3VhZ2VDb2RlXSA/PyBfbGFuZ3VhZ2VDb2RlOwogIGZpbmFsIFN0cmluZyBfbGFuZ3VhZ2VDb2RlOwoKICAvLyBUaGlzIG1hcCBpcyBnZW5lcmF0ZWQgYnkgLy9mbHV0dGVyL3Rvb2xzL2dlbl9sb2NhbGUuZGFydAogIC8vIE1hcHBpbmdzIGdlbmVyYXRlZCBmb3IgbGFuZ3VhZ2Ugc3VidGFnIHJlZ2lzdHJ5IGFzIG9mIDIwMTktMDItMjcuCiAgc3RhdGljIGNvbnN0IE1hcDxTdHJpbmcsIFN0cmluZz4gX2RlcHJlY2F0ZWRMYW5ndWFnZVN1YnRhZ01hcCA9IDxTdHJpbmcsIFN0cmluZz57CiAgICAnaW4nOiAnaWQnLCAvLyBJbmRvbmVzaWFuOyBkZXByZWNhdGVkIDE5ODktMDEtMDEKICAgICdpdyc6ICdoZScsIC8vIEhlYnJldzsgZGVwcmVjYXRlZCAxOTg5LTAxLTAxCiAgICAnamknOiAneWknLCAvLyBZaWRkaXNoOyBkZXByZWNhdGVkIDE5ODktMDEtMDEKICAgICdqdyc6ICdqdicsIC8vIEphdmFuZXNlOyBkZXByZWNhdGVkIDIwMDEtMDgtMTMKICAgICdtbyc6ICdybycsIC8vIE1vbGRhdmlhbiwgTW9sZG92YW47IGRlcHJlY2F0ZWQgMjAwOC0xMS0yMgogICAgJ2FhbSc6ICdhYXMnLCAvLyBBcmFtYW5pazsgZGVwcmVjYXRlZCAyMDE1LTAyLTEyCiAgICAnYWRwJzogJ2R6JywgLy8gQWRhcDsgZGVwcmVjYXRlZCAyMDE1LTAyLTEyCiAgICAnYXVlJzogJ2t0eicsIC8vIMeCS3jKvGF1x4HKvGVpbjsgZGVwcmVjYXRlZCAyMDE1LTAyLTEyCiAgICAnYXl4JzogJ251bicsIC8vIEF5aSAoQ2hpbmEpOyBkZXByZWNhdGVkIDIwMTEtMDgtMTYKICAgICdiZ20nOiAnYmNnJywgLy8gQmFnYSBNYm90ZW5pOyBkZXByZWNhdGVkIDIwMTYtMDUtMzAKICAgICdiamQnOiAnZHJsJywgLy8gQmFuZGppZ2FsaTsgZGVwcmVjYXRlZCAyMDEyLTA4LTEyCiAgICAnY2NxJzogJ3JraScsIC8vIENoYXVuZ3RoYTsgZGVwcmVjYXRlZCAyMDEyLTA4LTEyCiAgICAnY2pyJzogJ21vbScsIC8vIENob3JvdGVnYTsgZGVwcmVjYXRlZCAyMDEwLTAzLTExCiAgICAnY2thJzogJ2NtcicsIC8vIEtodW1pIEF3YSBDaGluOyBkZXByZWNhdGVkIDIwMTItMDgtMTIKICAgICdjbWsnOiAneGNoJywgLy8gQ2hpbWFrdW07IGRlcHJlY2F0ZWQgMjAxMC0wMy0xMQogICAgJ2NveSc6ICdwaWonLCAvLyBDb3lhaW1hOyBkZXByZWNhdGVkIDIwMTYtMDUtMzAKICAgICdjcXUnOiAncXVoJywgLy8gQ2hpbGVhbiBRdWVjaHVhOyBkZXByZWNhdGVkIDIwMTYtMDUtMzAKICAgICdkcmgnOiAna2hrJywgLy8gRGFya2hhdDsgZGVwcmVjYXRlZCAyMDEwLTAzLTExCiAgICAnZHJ3JzogJ3BycycsIC8vIERhcndhemk7IGRlcHJlY2F0ZWQgMjAxMC0wMy0xMQogICAgJ2dhdic6ICdkZXYnLCAvLyBHYWJ1dGFtb247IGRlcHJlY2F0ZWQgMjAxMC0wMy0xMQogICAgJ2dmeCc6ICd2YWonLCAvLyBNYW5nZXR0aSBEdW5lIMeDWHVuZzsgZGVwcmVjYXRlZCAyMDE1LTAyLTEyCiAgICAnZ2duJzogJ2d2cicsIC8vIEVhc3Rlcm4gR3VydW5nOyBkZXByZWNhdGVkIDIwMTYtMDUtMzAKICAgICdndGknOiAnbnljJywgLy8gR2JhdGktcmk7IGRlcHJlY2F0ZWQgMjAxNS0wMi0xMgogICAgJ2d1dic6ICdkdXonLCAvLyBHZXk7IGRlcHJlY2F0ZWQgMjAxNi0wNS0zMAogICAgJ2hycic6ICdqYWwnLCAvLyBIb3J1cnU7IGRlcHJlY2F0ZWQgMjAxMi0wOC0xMgogICAgJ2liaSc6ICdvcGEnLCAvLyBJYmlsbzsgZGVwcmVjYXRlZCAyMDEyLTA4LTEyCiAgICAnaWx3JzogJ2dhbCcsIC8vIFRhbHVyOyBkZXByZWNhdGVkIDIwMTMtMDktMTAKICAgICdqZWcnOiAnb3liJywgLy8gSmVuZzsgZGVwcmVjYXRlZCAyMDE3LTAyLTIzCiAgICAna2djJzogJ3RkZicsIC8vIEthc3Nlbmc7IGRlcHJlY2F0ZWQgMjAxNi0wNS0zMAogICAgJ2tnaCc6ICdrbWwnLCAvLyBVcHBlciBUYW51ZGFuIEthbGluZ2E7IGRlcHJlY2F0ZWQgMjAxMi0wOC0xMgogICAgJ2tvaic6ICdrd3YnLCAvLyBTYXJhIER1bmpvOyBkZXByZWNhdGVkIDIwMTUtMDItMTIKICAgICdrcm0nOiAnYm1mJywgLy8gS3JpbTsgZGVwcmVjYXRlZCAyMDE3LTAyLTIzCiAgICAna3RyJzogJ2R0cCcsIC8vIEtvdGEgTWFydWR1IFRpbmFnYXM7IGRlcHJlY2F0ZWQgMjAxNi0wNS0zMAogICAgJ2t2cyc6ICdnZGonLCAvLyBLdW5nZ2FyYTsgZGVwcmVjYXRlZCAyMDE2LTA1LTMwCiAgICAna3dxJzogJ3lhbScsIC8vIEt3YWs7IGRlcHJlY2F0ZWQgMjAxNS0wMi0xMgogICAgJ2t4ZSc6ICd0dmQnLCAvLyBLYWtpaHVtOyBkZXByZWNhdGVkIDIwMTUtMDItMTIKICAgICdremonOiAnZHRwJywgLy8gQ29hc3RhbCBLYWRhemFuOyBkZXByZWNhdGVkIDIwMTYtMDUtMzAKICAgICdrenQnOiAnZHRwJywgLy8gVGFtYnVuYW4gRHVzdW47IGRlcHJlY2F0ZWQgMjAxNi0wNS0zMAogICAgJ2xpaSc6ICdyYXEnLCAvLyBMaW5na2hpbTsgZGVwcmVjYXRlZCAyMDE1LTAyLTEyCiAgICAnbG1tJzogJ3JteCcsIC8vIExhbWFtOyBkZXByZWNhdGVkIDIwMTQtMDItMjgKICAgICdtZWcnOiAnY2lyJywgLy8gTWVhOyBkZXByZWNhdGVkIDIwMTMtMDktMTAKICAgICdtc3QnOiAnbXJ5JywgLy8gQ2F0YWVsYW5vIE1hbmRheWE7IGRlcHJlY2F0ZWQgMjAxMC0wMy0xMQogICAgJ213aic6ICd2YWonLCAvLyBNYWxpZ287IGRlcHJlY2F0ZWQgMjAxNS0wMi0xMgogICAgJ215dCc6ICdtcnknLCAvLyBTYW5nYWIgTWFuZGF5YTsgZGVwcmVjYXRlZCAyMDEwLTAzLTExCiAgICAnbmFkJzogJ3hueScsIC8vIE5pamFkYWxpOyBkZXByZWNhdGVkIDIwMTYtMDUtMzAKICAgICduY3AnOiAna2R6JywgLy8gTmRha3R1cDsgZGVwcmVjYXRlZCAyMDE4LTAzLTA4CiAgICAnbm54JzogJ25ndicsIC8vIE5nb25nOyBkZXByZWNhdGVkIDIwMTUtMDItMTIKICAgICdudHMnOiAncGlqJywgLy8gTmF0YWdhaW1hczsgZGVwcmVjYXRlZCAyMDE2LTA1LTMwCiAgICAnb3VuJzogJ3ZhaicsIC8vIMeDT8eDdW5nOyBkZXByZWNhdGVkIDIwMTUtMDItMTIKICAgICdwY3InOiAnYWR4JywgLy8gUGFuYW5nOyBkZXByZWNhdGVkIDIwMTMtMDktMTAKICAgICdwbWMnOiAnaHV3JywgLy8gUGFsdW1hdGE7IGRlcHJlY2F0ZWQgMjAxNi0wNS0zMAogICAgJ3BtdSc6ICdwaHInLCAvLyBNaXJwdXIgUGFuamFiaTsgZGVwcmVjYXRlZCAyMDE1LTAyLTEyCiAgICAncHBhJzogJ2JmeScsIC8vIFBhbzsgZGVwcmVjYXRlZCAyMDE2LTA1LTMwCiAgICAncHByJzogJ2xjcScsIC8vIFBpcnU7IGRlcHJlY2F0ZWQgMjAxMy0wOS0xMAogICAgJ3ByeSc6ICdwcnQnLCAvLyBQcmF5IDM7IGRlcHJlY2F0ZWQgMjAxNi0wNS0zMAogICAgJ3B1eic6ICdwdWInLCAvLyBQdXJ1bSBOYWdhOyBkZXByZWNhdGVkIDIwMTQtMDItMjgKICAgICdzY2EnOiAnaGxlJywgLy8gU2Fuc3U7IGRlcHJlY2F0ZWQgMjAxMi0wOC0xMgogICAgJ3Nrayc6ICdveWInLCAvLyBTb2s7IGRlcHJlY2F0ZWQgMjAxNy0wMi0yMwogICAgJ3RkdSc6ICdkdHAnLCAvLyBUZW1wYXN1ayBEdXN1bjsgZGVwcmVjYXRlZCAyMDE2LTA1LTMwCiAgICAndGhjJzogJ3RwbycsIC8vIFRhaSBIYW5nIFRvbmc7IGRlcHJlY2F0ZWQgMjAxNi0wNS0zMAogICAgJ3RoeCc6ICdveWInLCAvLyBUaGU7IGRlcHJlY2F0ZWQgMjAxNS0wMi0xMgogICAgJ3RpZSc6ICdyYXMnLCAvLyBUaW5nYWw7IGRlcHJlY2F0ZWQgMjAxMS0wOC0xNgogICAgJ3Rrayc6ICd0d20nLCAvLyBUYWtwYTsgZGVwcmVjYXRlZCAyMDExLTA4LTE2CiAgICAndGx3JzogJ3dlbycsIC8vIFNvdXRoIFdlbWFsZTsgZGVwcmVjYXRlZCAyMDEyLTA4LTEyCiAgICAndG1wJzogJ3R5aicsIC8vIFRhaSBNw6huZTsgZGVwcmVjYXRlZCAyMDE2LTA1LTMwCiAgICAndG5lJzogJ2thaycsIC8vIFRpbm9jIEthbGxhaGFuOyBkZXByZWNhdGVkIDIwMTYtMDUtMzAKICAgICd0bmYnOiAncHJzJywgLy8gVGFuZ3NoZXdpOyBkZXByZWNhdGVkIDIwMTAtMDMtMTEKICAgICd0c2YnOiAndGFqJywgLy8gU291dGh3ZXN0ZXJuIFRhbWFuZzsgZGVwcmVjYXRlZCAyMDE1LTAyLTEyCiAgICAndW9rJzogJ2VtYScsIC8vIFVva2hhOyBkZXByZWNhdGVkIDIwMTUtMDItMTIKICAgICd4YmEnOiAnY2F4JywgLy8gS2FtYmEgKEJyYXppbCk7IGRlcHJlY2F0ZWQgMjAxNi0wNS0zMAogICAgJ3hpYSc6ICdhY24nLCAvLyBYaWFuZGFvOyBkZXByZWNhdGVkIDIwMTMtMDktMTAKICAgICd4a2gnOiAnd2F3JywgLy8gS2FyYWhhd3lhbmE7IGRlcHJlY2F0ZWQgMjAxNi0wNS0zMAogICAgJ3hzaic6ICdzdWonLCAvLyBTdWJpOyBkZXByZWNhdGVkIDIwMTUtMDItMTIKICAgICd5YmQnOiAncmtpJywgLy8gWWFuZ2J5ZTsgZGVwcmVjYXRlZCAyMDEyLTA4LTEyCiAgICAneW1hJzogJ2xycicsIC8vIFlhbXBoZTsgZGVwcmVjYXRlZCAyMDEyLTA4LTEyCiAgICAneW10JzogJ210bScsIC8vIE1hdG9yLVRheWdpLUthcmFnYXM7IGRlcHJlY2F0ZWQgMjAxNS0wMi0xMgogICAgJ3lvcyc6ICd6b20nLCAvLyBZb3M7IGRlcHJlY2F0ZWQgMjAxMy0wOS0xMAogICAgJ3l1dSc6ICd5dWcnLCAvLyBZdWdoOyBkZXByZWNhdGVkIDIwMTQtMDItMjgKICB9OwoKICAvLy8gVGhlIHNjcmlwdCBzdWJ0YWcgZm9yIHRoZSBsb2NhbGUuCiAgLy8vCiAgLy8vIFRoaXMgbWF5IGJlIG51bGwsIGluZGljYXRpbmcgdGhhdCB0aGVyZSBpcyBubyBzcGVjaWZpZWQgc2NyaXB0IHN1YnRhZy4KICAvLy8KICAvLy8gVGhpcyBtdXN0IGJlIGEgdmFsaWQgVW5pY29kZSBMYW5ndWFnZSBJZGVudGlmaWVyIHNjcmlwdCBzdWJ0YWcgYXMgbGlzdGVkCiAgLy8vIGluIFtVbmljb2RlIENMRFIgc3VwcGxlbWVudGFsCiAgLy8vIGRhdGFdKGh0dHA6Ly91bmljb2RlLm9yZy9jbGRyL2xhdGVzdC9jb21tb24vdmFsaWRpdHkvc2NyaXB0LnhtbCkuCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgKiBbTG9jYWxlLmZyb21TdWJ0YWdzXSwgd2hpY2ggZGVzY3JpYmVzIHRoZSBjb252ZW50aW9ucyBmb3IgY3JlYXRpbmcKICAvLy8gICAgW0xvY2FsZV0gb2JqZWN0cy4KICBmaW5hbCBTdHJpbmcgc2NyaXB0Q29kZTsKCiAgLy8vIFRoZSByZWdpb24gc3VidGFnIGZvciB0aGUgbG9jYWxlLgogIC8vLwogIC8vLyBUaGlzIG1heSBiZSBudWxsLCBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgaXMgbm8gc3BlY2lmaWVkIHJlZ2lvbiBzdWJ0YWcuCiAgLy8vCiAgLy8vIFRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgc3RyaW5nIHJlZ2lzdGVyZWQgaW4gdGhlIFtJQU5BIExhbmd1YWdlIFN1YnRhZwogIC8vLyBSZWdpc3RyeV0oaHR0cHM6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvbGFuZ3VhZ2Utc3VidGFnLXJlZ2lzdHJ5L2xhbmd1YWdlLXN1YnRhZy1yZWdpc3RyeSkKICAvLy8gd2l0aCB0aGUgdHlwZSAicmVnaW9uIi4gVGhlIHN0cmluZyBzcGVjaWZpZWQgbXVzdCBtYXRjaCB0aGUgY2FzZSBvZiB0aGUKICAvLy8gc3RyaW5nIGluIHRoZSByZWdpc3RyeS4KICAvLy8KICAvLy8gUmVnaW9uIHN1YnRhZ3MgdGhhdCBhcmUgZGVwcmVjYXRlZCBpbiB0aGUgcmVnaXN0cnkgYW5kIGhhdmUgYSBwcmVmZXJyZWQKICAvLy8gY29kZSBhcmUgY2hhbmdlZCB0byB0aGVpciBwcmVmZXJyZWQgY29kZS4gRm9yIGV4YW1wbGUsIGBjb25zdCBMb2NhbGUoJ2RlJywKICAvLy8gJ0RFJylgIGFuZCBgY29uc3QgTG9jYWxlKCdkZScsICdERCcpYCBhcmUgZXF1YWwsIGFuZCBib3RoIGhhdmUgdGhlCiAgLy8vIFtjb3VudHJ5Q29kZV0gYERFYCwgYmVjYXVzZSBgRERgIGlzIGEgZGVwcmVjYXRlZCBsYW5ndWFnZSBzdWJ0YWcgdGhhdCB3YXMKICAvLy8gcmVwbGFjZWQgYnkgdGhlIHN1YnRhZyBgREVgLgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogW0xvY2FsZS5mcm9tU3VidGFnc10sIHdoaWNoIGRlc2NyaWJlcyB0aGUgY29udmVudGlvbnMgZm9yIGNyZWF0aW5nCiAgLy8vICAgIFtMb2NhbGVdIG9iamVjdHMuCiAgU3RyaW5nIGdldCBjb3VudHJ5Q29kZSA9PiBfZGVwcmVjYXRlZFJlZ2lvblN1YnRhZ01hcFtfY291bnRyeUNvZGVdID8/IF9jb3VudHJ5Q29kZTsKICBmaW5hbCBTdHJpbmcgX2NvdW50cnlDb2RlOwoKICAvLyBUaGlzIG1hcCBpcyBnZW5lcmF0ZWQgYnkgLy9mbHV0dGVyL3Rvb2xzL2dlbl9sb2NhbGUuZGFydAogIC8vIE1hcHBpbmdzIGdlbmVyYXRlZCBmb3IgbGFuZ3VhZ2Ugc3VidGFnIHJlZ2lzdHJ5IGFzIG9mIDIwMTktMDItMjcuCiAgc3RhdGljIGNvbnN0IE1hcDxTdHJpbmcsIFN0cmluZz4gX2RlcHJlY2F0ZWRSZWdpb25TdWJ0YWdNYXAgPSA8U3RyaW5nLCBTdHJpbmc+ewogICAgJ0JVJzogJ01NJywgLy8gQnVybWE7IGRlcHJlY2F0ZWQgMTk4OS0xMi0wNQogICAgJ0REJzogJ0RFJywgLy8gR2VybWFuIERlbW9jcmF0aWMgUmVwdWJsaWM7IGRlcHJlY2F0ZWQgMTk5MC0xMC0zMAogICAgJ0ZYJzogJ0ZSJywgLy8gTWV0cm9wb2xpdGFuIEZyYW5jZTsgZGVwcmVjYXRlZCAxOTk3LTA3LTE0CiAgICAnVFAnOiAnVEwnLCAvLyBFYXN0IFRpbW9yOyBkZXByZWNhdGVkIDIwMDItMDUtMjAKICAgICdZRCc6ICdZRScsIC8vIERlbW9jcmF0aWMgWWVtZW47IGRlcHJlY2F0ZWQgMTk5MC0wOC0xNAogICAgJ1pSJzogJ0NEJywgLy8gWmFpcmU7IGRlcHJlY2F0ZWQgMTk5Ny0wNy0xNAogIH07CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0oZHluYW1pYyBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpCiAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIG90aGVyIGlzIExvY2FsZQogICAgICAgICYmIG90aGVyLmxhbmd1YWdlQ29kZSA9PSBsYW5ndWFnZUNvZGUKICAgICAgICAmJiBvdGhlci5zY3JpcHRDb2RlID09IHNjcmlwdENvZGUKICAgICAgICAmJiBvdGhlci5jb3VudHJ5Q29kZSA9PSBjb3VudHJ5Q29kZTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gaGFzaFZhbHVlcyhsYW5ndWFnZUNvZGUsIHNjcmlwdENvZGUsIGNvdW50cnlDb2RlKTsKCiAgc3RhdGljIExvY2FsZSBfY2FjaGVkTG9jYWxlOwogIHN0YXRpYyBTdHJpbmcgX2NhY2hlZExvY2FsZVN0cmluZzsKCiAgLy8vIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBsb2NhbGUuCiAgLy8vCiAgLy8vIFRoaXMgaWRlbnRpZmllciBoYXBwZW5zIHRvIGJlIGEgdmFsaWQgVW5pY29kZSBMb2NhbGUgSWRlbnRpZmllciB1c2luZwogIC8vLyB1bmRlcnNjb3JlcyBhcyBzZXBhcmF0b3IsIGhvd2V2ZXIgaXQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgZGVidWdnaW5nCiAgLy8vIHB1cnBvc2VzIG9ubHkuIEZvciBwYXJzZWFibGUgcmVzdWx0cywgdXNlIFt0b0xhbmd1YWdlVGFnXSBpbnN0ZWFkLgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmICghaWRlbnRpY2FsKF9jYWNoZWRMb2NhbGUsIHRoaXMpKSB7CiAgICAgIF9jYWNoZWRMb2NhbGUgPSB0aGlzOwogICAgICBfY2FjaGVkTG9jYWxlU3RyaW5nID0gX3Jhd1RvU3RyaW5nKCdfJyk7CiAgICB9CiAgICByZXR1cm4gX2NhY2hlZExvY2FsZVN0cmluZzsKICB9CgogIC8vLyBSZXR1cm5zIGEgc3ludGFjdGljYWxseSB2YWxpZCBVbmljb2RlIEJDUDQ3IExvY2FsZSBJZGVudGlmaWVyLgogIC8vLwogIC8vLyBTb21lIGV4YW1wbGVzIG9mIHN1Y2ggaWRlbnRpZmllcnM6ICJlbiIsICJlcy00MTkiLCAiaGktRGV2YS1JTiIgYW5kCiAgLy8vICJ6aC1IYW5zLUNOIi4gU2VlIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1LyBmb3IgdGVjaG5pY2FsCiAgLy8vIGRldGFpbHMuCiAgU3RyaW5nIHRvTGFuZ3VhZ2VUYWcoKSA9PiBfcmF3VG9TdHJpbmcoJy0nKTsKCiAgU3RyaW5nIF9yYXdUb1N0cmluZyhTdHJpbmcgc2VwYXJhdG9yKSB7CiAgICBmaW5hbCBTdHJpbmdCdWZmZXIgb3V0ID0gU3RyaW5nQnVmZmVyKGxhbmd1YWdlQ29kZSk7CiAgICBpZiAoc2NyaXB0Q29kZSAhPSBudWxsKQogICAgICBvdXQud3JpdGUoJyRzZXBhcmF0b3Ikc2NyaXB0Q29kZScpOwogICAgaWYgKF9jb3VudHJ5Q29kZSAhPSBudWxsKQogICAgICBvdXQud3JpdGUoJyRzZXBhcmF0b3IkY291bnRyeUNvZGUnKTsKICAgIHJldHVybiBvdXQudG9TdHJpbmcoKTsKICB9Cn0KCi8vLyBUaGUgbW9zdCBiYXNpYyBpbnRlcmZhY2UgdG8gdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbSdzIHVzZXIgaW50ZXJmYWNlLgovLy8KLy8vIEl0IGV4cG9zZXMgdGhlIHNpemUgb2YgdGhlIGRpc3BsYXksIHRoZSBjb3JlIHNjaGVkdWxlciBBUEksIHRoZSBpbnB1dCBldmVudAovLy8gY2FsbGJhY2ssIHRoZSBncmFwaGljcyBkcmF3aW5nIEFQSSwgYW5kIG90aGVyIHN1Y2ggY29yZSBzZXJ2aWNlcy4KLy8vCi8vLyBUaGVyZSBpcyBhIHNpbmdsZSBXaW5kb3cgaW5zdGFuY2UgaW4gdGhlIHN5c3RlbSwgd2hpY2ggeW91IGNhbgovLy8gb2J0YWluIGZyb20gYFdpZGdldHNCaW5kaW5nLmluc3RhbmNlLndpbmRvd2AuCi8vLwovLy8gVGhlcmUgaXMgYWxzbyBhIFt3aW5kb3ddIHNpbmdsZXRvbiBvYmplY3QgaW4gYGRhcnQ6dWlgIGlmIGBXaWRnZXRzQmluZGluZ2AKLy8vIGlzIHVuYXZhaWxhYmxlLiBCdXQgd2Ugc3Ryb25nbHkgYWR2aXNlIHRvIGF2b2lkIHN0YXRpY2FsbHkgcmVmZXJlbmNpbmcgaXQuCi8vLyBTZWUgdGhlIGRvY3VtZW50IG9mIFt3aW5kb3ddIGZvciBtb3JlIGRldGFpbHMgb2Ygd2h5IGl0IHNob3VsZCBiZSBhdm9pZGVkLgovLy8KLy8vICMjIEluc2V0cyBhbmQgUGFkZGluZwovLy8KLy8vIHtAYW5pbWF0aW9uIDMwMCAzMDAgaHR0cHM6Ly9mbHV0dGVyLmdpdGh1Yi5pby9hc3NldHMtZm9yLWFwaS1kb2NzL2Fzc2V0cy93aWRnZXRzL3dpbmRvd19wYWRkaW5nLm1wNH0KLy8vCi8vLyBJbiB0aGlzIGRpYWdyYW0sIHRoZSBibGFjayBhcmVhcyByZXByZXNlbnQgc3lzdGVtIFVJIHRoYXQgdGhlIGFwcCBjYW5ub3QKLy8vIGRyYXcgb3Zlci4gVGhlIHJlZCBhcmVhIHJlcHJlc2VudHMgdmlldyBwYWRkaW5nIHRoYXQgdGhlIGFwcGxpY2F0aW9uIG1heSBub3QKLy8vIGJlIGFibGUgdG8gZGV0ZWN0IGdlc3R1cmVzIGluIGFuZCBtYXkgbm90IHdhbnQgdG8gZHJhdyBpbi4gVGhlIGdyZXkgYXJlYQovLy8gcmVwcmVzZW50cyB0aGUgc3lzdGVtIGtleWJvYXJkLCB3aGljaCBjYW4gY292ZXIgb3ZlciB0aGUgYm90dG9tIHZpZXcKLy8vIHBhZGRpbmcgd2hlbiB2aXNpYmxlLgovLy8KLy8vIFRoZSBbV2luZG93LnZpZXdJbnNldHNdIGFyZSB0aGUgcGh5c2ljYWwgcGl4ZWxzIHdoaWNoIHRoZSBvcGVyYXRpbmcKLy8vIHN5c3RlbSByZXNlcnZlcyBmb3Igc3lzdGVtIFVJLCBzdWNoIGFzIHRoZSBrZXlib2FyZCwgd2hpY2ggd291bGQgZnVsbHkKLy8vIG9ic2N1cmUgYW55IGNvbnRlbnQgZHJhd24gaW4gdGhhdCBhcmVhLgovLy8KLy8vIFRoZSBbV2luZG93LnZpZXdQYWRkaW5nXSBhcmUgdGhlIHBoeXNpY2FsIHBpeGVscyBvbiBlYWNoIHNpZGUgb2YgdGhlIGRpc3BsYXkKLy8vIHRoYXQgbWF5IGJlIHBhcnRpYWxseSBvYnNjdXJlZCBieSBzeXN0ZW0gVUkgb3IgYnkgcGh5c2ljYWwgaW50cnVzaW9ucyBpbnRvCi8vLyB0aGUgZGlzcGxheSwgc3VjaCBhcyBhbiBvdmVyc2NhbiByZWdpb24gb24gYSB0ZWxldmlzaW9uIG9yIGEgIm5vdGNoIiBvbiBhCi8vLyBwaG9uZS4gVW5saWtlIHRoZSBpbnNldHMsIHRoZXNlIGFyZWFzIG1heSBoYXZlIHBvcnRpb25zIHRoYXQgc2hvdyB0aGUgdXNlcgovLy8gYXBwbGljYXRpb24gcGFpbnRlZCBwaXhlbHMgd2l0aG91dCBiZWluZyBvYnNjdXJlZCwgc3VjaCBhcyBhIG5vdGNoIGF0IHRoZQovLy8gdG9wIG9mIGEgcGhvbmUgdGhhdCBjb3ZlcnMgb25seSBhIHN1YnNldCBvZiB0aGUgYXJlYS4gSW5zZXRzLCBvbiB0aGUgb3RoZXIKLy8vIGhhbmQsIGVpdGhlciBwYXJ0aWFsbHkgb3IgZnVsbHkgb2JzY3VyZSB0aGUgd2luZG93LCBzdWNoIGFzIGFuIG9wYXF1ZQovLy8ga2V5Ym9hcmQgb3IgYSBwYXJ0aWFsbHkgdHJhbnNsdXNjZW50IHN0YXR1c2Jhciwgd2hpY2ggY292ZXIgYW4gYXJlYSB3aXRob3V0Ci8vLyBnYXBzLgovLy8KLy8vIFRoZSBbV2luZG93LnBhZGRpbmddIHByb3BlcnR5IGlzIGNvbXB1dGVkIGZyb20gYm90aCBbV2luZG93LnZpZXdJbnNldHNdIGFuZAovLy8gW1dpbmRvdy52aWV3UGFkZGluZ10uIEl0IHdpbGwgYWxsb3cgYSB2aWV3IGluc2V0IHRvIGNvbnN1bWUgdmlldyBwYWRkaW5nCi8vLyB3aGVyZSBhcHByb3ByaWF0ZSwgc3VjaCBhcyB3aGVuIGEgcGhvbmUncyBrZXlib2FyZCBpcyBjb3ZlcmluZyB0aGUgYm90dG9tCi8vLyB2aWV3IHBhZGRpbmcgYW5kIHNvICJhYnNvcmJzIiBpdC4KLy8vCi8vLyBDbGllbnRzIHRoYXQgd2FudCB0byBwb3NpdGlvbiBlbGVtZW50cyByZWxhdGl2ZSB0byB0aGUgdmlldyBwYWRkaW5nCi8vLyByZWdhcmRsZXNzIG9mIHRoZSB2aWV3IGluc2V0cyBzaG91bGQgdXNlIHRoZSBbV2luZG93LnZpZXdQYWRkaW5nXSBwcm9wZXJ0eSwKLy8vIGUuZy4gaWYgeW91IHdpc2ggdG8gZHJhdyBhIHdpZGdldCBhdCB0aGUgY2VudGVyIG9mIHRoZSBzY3JlZW4gd2l0aCByZXNwZWN0Ci8vLyB0byB0aGUgaVBob25lICJzYWZlIGFyZWEiIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUga2V5Ym9hcmQgaXMgc2hvd2luZy4KLy8vCi8vLyBbV2luZG93LnBhZGRpbmddIGlzIHVzZWZ1bCBmb3IgY2xpZW50cyB0aGF0IHdhbnQgdG8ga25vdyBob3cgbXVjaCBwYWRkaW5nCi8vLyBzaG91bGQgYmUgYWNjb3VudGVkIGZvciB3aXRob3V0IGNvbmNlcm4gZm9yIHRoZSBjdXJyZW50IGluc2V0KHMpIHN0YXRlLCBlLmcuCi8vLyBkZXRlcm1pbmluZyB3aGV0aGVyIGEgZ2VzdHVyZSBzaG91bGQgYmUgY29uc2lkZXJlZCBmb3Igc2Nyb2xsaW5nIHB1cnBvc2VzLgovLy8gVGhpcyB2YWx1ZSB2YXJpZXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGluc2V0cy4gRm9yIGV4YW1wbGUsIGEKLy8vIHZpc2libGUga2V5Ym9hcmQgd2lsbCBjb25zdW1lIGFsbCBnZXN0dXJlcyBpbiB0aGUgYm90dG9tIHBhcnQgb2YgdGhlCi8vLyBbV2luZG93LnZpZXdQYWRkaW5nXSBhbnl3YXksIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhhdCBpbiB0aGUKLy8vIFtXaW5kb3cucGFkZGluZ10sIHdoaWNoIGlzIGFsd2F5cyBzYWZlIHRvIHVzZSBmb3Igc3VjaCBjYWxjdWxhdGlvbnMuCmNsYXNzIFdpbmRvdyB7CiAgV2luZG93Ll8oKSB7CiAgICBfc2V0TmVlZHNSZXBvcnRUaW1pbmdzID0gX25hdGl2ZVNldE5lZWRzUmVwb3J0VGltaW5nczsKICB9CgogIC8vLyBUaGUgbnVtYmVyIG9mIGRldmljZSBwaXhlbHMgZm9yIGVhY2ggbG9naWNhbCBwaXhlbC4gVGhpcyBudW1iZXIgbWlnaHQgbm90CiAgLy8vIGJlIGEgcG93ZXIgb2YgdHdvLiBJbmRlZWQsIGl0IG1pZ2h0IG5vdCBldmVuIGJlIGFuIGludGVnZXIuIEZvciBleGFtcGxlLAogIC8vLyB0aGUgTmV4dXMgNiBoYXMgYSBkZXZpY2UgcGl4ZWwgcmF0aW8gb2YgMy41LgogIC8vLwogIC8vLyBEZXZpY2UgcGl4ZWxzIGFyZSBhbHNvIHJlZmVycmVkIHRvIGFzIHBoeXNpY2FsIHBpeGVscy4gTG9naWNhbCBwaXhlbHMgYXJlCiAgLy8vIGFsc28gcmVmZXJyZWQgdG8gYXMgZGV2aWNlLWluZGVwZW5kZW50IG9yIHJlc29sdXRpb24taW5kZXBlbmRlbnQgcGl4ZWxzLgogIC8vLwogIC8vLyBCeSBkZWZpbml0aW9uLCB0aGVyZSBhcmUgcm91Z2hseSAzOCBsb2dpY2FsIHBpeGVscyBwZXIgY2VudGltZXRlciwgb3IKICAvLy8gYWJvdXQgOTYgbG9naWNhbCBwaXhlbHMgcGVyIGluY2gsIG9mIHRoZSBwaHlzaWNhbCBkaXNwbGF5LiBUaGUgdmFsdWUKICAvLy8gcmV0dXJuZWQgYnkgW2RldmljZVBpeGVsUmF0aW9dIGlzIHVsdGltYXRlbHkgb2J0YWluZWQgZWl0aGVyIGZyb20gdGhlCiAgLy8vIGhhcmR3YXJlIGl0c2VsZiwgdGhlIGRldmljZSBkcml2ZXJzLCBvciBhIGhhcmQtY29kZWQgdmFsdWUgc3RvcmVkIGluIHRoZQogIC8vLyBvcGVyYXRpbmcgc3lzdGVtIG9yIGZpcm13YXJlLCBhbmQgbWF5IGJlIGluYWNjdXJhdGUsIHNvbWV0aW1lcyBieSBhCiAgLy8vIHNpZ25pZmljYW50IG1hcmdpbi4KICAvLy8KICAvLy8gVGhlIEZsdXR0ZXIgZnJhbWV3b3JrIG9wZXJhdGVzIGluIGxvZ2ljYWwgcGl4ZWxzLCBzbyBpdCBpcyByYXJlbHkKICAvLy8gbmVjZXNzYXJ5IHRvIGRpcmVjdGx5IGRlYWwgd2l0aCB0aGlzIHByb3BlcnR5LgogIC8vLwogIC8vLyBXaGVuIHRoaXMgY2hhbmdlcywgW29uTWV0cmljc0NoYW5nZWRdIGlzIGNhbGxlZC4KICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICAqIFtXaWRnZXRzQmluZGluZ09ic2VydmVyXSwgZm9yIGEgbWVjaGFuaXNtIGF0IHRoZSB3aWRnZXRzIGxheWVyIHRvCiAgLy8vICAgIG9ic2VydmUgd2hlbiB0aGlzIHZhbHVlIGNoYW5nZXMuCiAgZG91YmxlIGdldCBkZXZpY2VQaXhlbFJhdGlvID0+IF9kZXZpY2VQaXhlbFJhdGlvOwogIGRvdWJsZSBfZGV2aWNlUGl4ZWxSYXRpbyA9IDEuMDsKCiAgLy8vIFRoZSBkaW1lbnNpb25zIG9mIHRoZSByZWN0YW5nbGUgaW50byB3aGljaCB0aGUgYXBwbGljYXRpb24gd2lsbCBiZSBkcmF3biwKICAvLy8gaW4gcGh5c2ljYWwgcGl4ZWxzLgogIC8vLwogIC8vLyBXaGVuIHRoaXMgY2hhbmdlcywgW29uTWV0cmljc0NoYW5nZWRdIGlzIGNhbGxlZC4KICAvLy8KICAvLy8gQXQgc3RhcnR1cCwgdGhlIHNpemUgb2YgdGhlIGFwcGxpY2F0aW9uIHdpbmRvdyBtYXkgbm90IGJlIGtub3duIGJlZm9yZSBEYXJ0CiAgLy8vIGNvZGUgcnVucy4gSWYgdGhpcyB2YWx1ZSBpcyBvYnNlcnZlZCBlYXJseSBpbiB0aGUgYXBwbGljYXRpb24gbGlmZWN5Y2xlLAogIC8vLyBpdCBtYXkgcmVwb3J0IFtTaXplLnplcm9dLgogIC8vLwogIC8vLyBUaGlzIHZhbHVlIGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50IGFueSBvbi1zY3JlZW4ga2V5Ym9hcmRzIG9yIG90aGVyCiAgLy8vIHN5c3RlbSBVSS4gVGhlIFtwYWRkaW5nXSBhbmQgW3ZpZXdJbnNldHNdIHByb3BlcnRpZXMgcHJvdmlkZSBhIHZpZXcgaW50bwogIC8vLyBob3cgbXVjaCBvZiBlYWNoIHNpZGUgb2YgdGhlIGFwcGxpY2F0aW9uIG1heSBiZSBvYnNjdXJlZCBieSBzeXN0ZW0gVUkuCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgKiBbV2lkZ2V0c0JpbmRpbmdPYnNlcnZlcl0sIGZvciBhIG1lY2hhbmlzbSBhdCB0aGUgd2lkZ2V0cyBsYXllciB0bwogIC8vLyAgICBvYnNlcnZlIHdoZW4gdGhpcyB2YWx1ZSBjaGFuZ2VzLgogIFNpemUgZ2V0IHBoeXNpY2FsU2l6ZSA9PiBfcGh5c2ljYWxTaXplOwogIFNpemUgX3BoeXNpY2FsU2l6ZSA9IFNpemUuemVybzsKCiAgLy8vIFRoZSBwaHlzaWNhbCBkZXB0aCBpcyB0aGUgbWF4aW11bSBlbGV2YXRpb24gdGhhdCB0aGUgV2luZG93IGFsbG93cy4KICAvLy8KICAvLy8gUGh5c2ljYWwgbGF5ZXJzIGRyYXduIGF0IG9yIGFib3ZlIHRoaXMgZWxldmF0aW9uIHdpbGwgaGF2ZSB0aGVpciBlbGV2YXRpb24KICAvLy8gY2xhbXBlZCB0byB0aGlzIHZhbHVlLiBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIHBoeXNpY2FsIGxheWVyIGl0c2VsZiBoYXMKICAvLy8gYW4gZWxldmF0aW9uIGxhcmdlciB0aGFuIGF2YWlsYWJsZSBkZXB0aCwgb3IgaWYgc29tZSBhbmNlc3RvciBvZiB0aGUgbGF5ZXIKICAvLy8gY2F1c2VzIGl0IHRvIGhhdmUgYSBjdW11bGF0aXZlIGVsZXZhdGlvbiB0aGF0IGlzIGxhcmdlciB0aGFuIHRoZSBhdmFpbGFibGUKICAvLy8gZGVwdGguCiAgLy8vCiAgLy8vIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFtkb3VibGUubWF4RmluaXRlXSwgd2hpY2ggaXMgdXNlZCBmb3IgcGxhdGZvcm1zIHRoYXQKICAvLy8gZG8gbm90IHNwZWNpZnkgYSBtYXhpbXVtIGVsZXZhdGlvbi4gVGhpcyBwcm9wZXJ0eSBpcyBjdXJyZW50bHkgb24gZXhwZWN0ZWQKICAvLy8gdG8gYmUgc2V0IHRvIGEgbm9uLWRlZmF1bHQgdmFsdWUgb24gRnVjaHNpYS4KICBkb3VibGUgZ2V0IHBoeXNpY2FsRGVwdGggPT4gX3BoeXNpY2FsRGVwdGg7CiAgZG91YmxlIF9waHlzaWNhbERlcHRoID0gZG91YmxlLm1heEZpbml0ZTsKCiAgLy8vIFRoZSBudW1iZXIgb2YgcGh5c2ljYWwgcGl4ZWxzIG9uIGVhY2ggc2lkZSBvZiB0aGUgZGlzcGxheSByZWN0YW5nbGUgaW50bwogIC8vLyB3aGljaCB0aGUgYXBwbGljYXRpb24gY2FuIHJlbmRlciwgYnV0IG92ZXIgd2hpY2ggdGhlIG9wZXJhdGluZyBzeXN0ZW0KICAvLy8gd2lsbCBsaWtlbHkgcGxhY2Ugc3lzdGVtIFVJLCBzdWNoIGFzIHRoZSBrZXlib2FyZCwgdGhhdCBmdWxseSBvYnNjdXJlcwogIC8vLyBhbnkgY29udGVudC4KICAvLy8KICAvLy8gV2hlbiB0aGlzIHByb3BlcnR5IGNoYW5nZXMsIFtvbk1ldHJpY3NDaGFuZ2VkXSBpcyBjYWxsZWQuCiAgLy8vCiAgLy8vIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIFtXaW5kb3cudmlld0luc2V0c10sIFtXaW5kb3cudmlld1BhZGRpbmddLAogIC8vLyBhbmQgW1dpbmRvdy5wYWRkaW5nXSBhcmUgZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvcgogIC8vLyBbV2luZG93XS4KICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICAqIFtXaWRnZXRzQmluZGluZ09ic2VydmVyXSwgZm9yIGEgbWVjaGFuaXNtIGF0IHRoZSB3aWRnZXRzIGxheWVyIHRvCiAgLy8vICAgIG9ic2VydmUgd2hlbiB0aGlzIHZhbHVlIGNoYW5nZXMuCiAgLy8vICAqIFtNZWRpYVF1ZXJ5Lm9mXSwgYSBzaW1wbGVyIG1lY2hhbmlzbSBmb3IgdGhlIHNhbWUuCiAgLy8vICAqIFtTY2FmZm9sZF0sIHdoaWNoIGF1dG9tYXRpY2FsbHkgYXBwbGllcyB0aGUgdmlldyBpbnNldHMgaW4gbWF0ZXJpYWwKICAvLy8gICAgZGVzaWduIGFwcGxpY2F0aW9ucy4KICBXaW5kb3dQYWRkaW5nIGdldCB2aWV3SW5zZXRzID0+IF92aWV3SW5zZXRzOwogIFdpbmRvd1BhZGRpbmcgX3ZpZXdJbnNldHMgPSBXaW5kb3dQYWRkaW5nLnplcm87CgogIC8vLyBUaGUgbnVtYmVyIG9mIHBoeXNpY2FsIHBpeGVscyBvbiBlYWNoIHNpZGUgb2YgdGhlIGRpc3BsYXkgcmVjdGFuZ2xlIGludG8KICAvLy8gd2hpY2ggdGhlIGFwcGxpY2F0aW9uIGNhbiByZW5kZXIsIGJ1dCB3aGljaCBtYXkgYmUgcGFydGlhbGx5IG9ic2N1cmVkIGJ5CiAgLy8vIHN5c3RlbSBVSSAoc3VjaCBhcyB0aGUgc3lzdGVtIG5vdGlmaWNhdGlvbiBhcmVhKSwgb3Igb3IgcGh5c2ljYWwKICAvLy8gaW50cnVzaW9ucyBpbiB0aGUgZGlzcGxheSAoZS5nLiBvdmVyc2NhbiByZWdpb25zIG9uIHRlbGV2aXNpb24gc2NyZWVucyBvcgogIC8vLyBwaG9uZSBzZW5zb3IgaG91c2luZ3MpLgogIC8vLwogIC8vLyBVbmxpa2UgW1dpbmRvdy5wYWRkaW5nXSwgdGhpcyB2YWx1ZSBkb2VzIG5vdCBjaGFuZ2UgcmVsYXRpdmUgdG8KICAvLy8gW1dpbmRvdy52aWV3SW5zZXRzXS4gRm9yIGV4YW1wbGUsIG9uIGFuIGlQaG9uZSBYLCBpdCB3aWxsIG5vdCBjaGFuZ2UgaW4KICAvLy8gcmVzcG9uc2UgdG8gdGhlIHNvZnQga2V5Ym9hcmQgYmVpbmcgdmlzaWJsZSBvciBoaWRkZW4sIHdoZXJlYXMKICAvLy8gW1dpbmRvdy5wYWRkaW5nXSB3aWxsLgogIC8vLwogIC8vLyBXaGVuIHRoaXMgcHJvcGVydHkgY2hhbmdlcywgW29uTWV0cmljc0NoYW5nZWRdIGlzIGNhbGxlZC4KICAvLy8KICAvLy8gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgW1dpbmRvdy52aWV3SW5zZXRzXSwgW1dpbmRvdy52aWV3UGFkZGluZ10sCiAgLy8vIGFuZCBbV2luZG93LnBhZGRpbmddIGFyZSBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yCiAgLy8vIFtXaW5kb3ddLgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogW1dpZGdldHNCaW5kaW5nT2JzZXJ2ZXJdLCBmb3IgYSBtZWNoYW5pc20gYXQgdGhlIHdpZGdldHMgbGF5ZXIgdG8KICAvLy8gICAgb2JzZXJ2ZSB3aGVuIHRoaXMgdmFsdWUgY2hhbmdlcy4KICAvLy8gICogW01lZGlhUXVlcnkub2ZdLCBhIHNpbXBsZXIgbWVjaGFuaXNtIGZvciB0aGUgc2FtZS4KICAvLy8gICogW1NjYWZmb2xkXSwgd2hpY2ggYXV0b21hdGljYWxseSBhcHBsaWVzIHRoZSBwYWRkaW5nIGluIG1hdGVyaWFsIGRlc2lnbgogIC8vLyAgICBhcHBsaWNhdGlvbnMuCiAgV2luZG93UGFkZGluZyBnZXQgdmlld1BhZGRpbmcgPT4gX3ZpZXdQYWRkaW5nOwogIFdpbmRvd1BhZGRpbmcgX3ZpZXdQYWRkaW5nID0gV2luZG93UGFkZGluZy56ZXJvOwoKICAvLy8gVGhlIG51bWJlciBvZiBwaHlzaWNhbCBwaXhlbHMgb24gZWFjaCBzaWRlIG9mIHRoZSBkaXNwbGF5IHJlY3RhbmdsZSBpbnRvCiAgLy8vIHdoaWNoIHRoZSBhcHBsaWNhdGlvbiBjYW4gcmVuZGVyLCBidXQgd2hlcmUgdGhlIG9wZXJhdGluZyBzeXN0ZW0gd2lsbAogIC8vLyBjb25zdW1lIGlucHV0IGdlc3R1cmVzIGZvciB0aGUgc2FrZSBvZiBzeXN0ZW0gbmF2aWdhdGlvbi4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUsIGFuIG9wZXJhdGluZyBzeXN0ZW0gbWlnaHQgdXNlIHRoZSB2ZXJ0aWNhbCBlZGdlcyBvZiB0aGUKICAvLy8gc2NyZWVuLCB3aGVyZSBzd2lwaW5nIGlud2FyZHMgZnJvbSB0aGUgZWRnZXMgdGFrZXMgdXNlcnMgYmFja3dhcmQKICAvLy8gdGhyb3VnaCB0aGUgaGlzdG9yeSBvZiBzY3JlZW5zIHRoZXkgcHJldmlvdXNseSB2aXNpdGVkLgogIC8vLwogIC8vLyBXaGVuIHRoaXMgcHJvcGVydHkgY2hhbmdlcywgW29uTWV0cmljc0NoYW5nZWRdIGlzIGNhbGxlZC4KICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICAqIFtXaWRnZXRzQmluZGluZ09ic2VydmVyXSwgZm9yIGEgbWVjaGFuaXNtIGF0IHRoZSB3aWRnZXRzIGxheWVyIHRvCiAgLy8vICAgIG9ic2VydmUgd2hlbiB0aGlzIHZhbHVlIGNoYW5nZXMuCiAgLy8vICAqIFtNZWRpYVF1ZXJ5Lm9mXSwgYSBzaW1wbGVyIG1lY2hhbmlzbSBmb3IgdGhlIHNhbWUuCiAgV2luZG93UGFkZGluZyBnZXQgc3lzdGVtR2VzdHVyZUluc2V0cyA9PiBfc3lzdGVtR2VzdHVyZUluc2V0czsKICBXaW5kb3dQYWRkaW5nIF9zeXN0ZW1HZXN0dXJlSW5zZXRzID0gV2luZG93UGFkZGluZy56ZXJvOwoKICAvLy8gVGhlIG51bWJlciBvZiBwaHlzaWNhbCBwaXhlbHMgb24gZWFjaCBzaWRlIG9mIHRoZSBkaXNwbGF5IHJlY3RhbmdsZSBpbnRvCiAgLy8vIHdoaWNoIHRoZSBhcHBsaWNhdGlvbiBjYW4gcmVuZGVyLCBidXQgd2hpY2ggbWF5IGJlIHBhcnRpYWxseSBvYnNjdXJlZCBieQogIC8vLyBzeXN0ZW0gVUkgKHN1Y2ggYXMgdGhlIHN5c3RlbSBub3RpZmljYXRpb24gYXJlYSksIG9yIG9yIHBoeXNpY2FsCiAgLy8vIGludHJ1c2lvbnMgaW4gdGhlIGRpc3BsYXkgKGUuZy4gb3ZlcnNjYW4gcmVnaW9ucyBvbiB0ZWxldmlzaW9uIHNjcmVlbnMgb3IKICAvLy8gcGhvbmUgc2Vuc29yIGhvdXNpbmdzKS4KICAvLy8KICAvLy8gVGhpcyB2YWx1ZSBpcyBjYWxjdWxhdGVkIGJ5IHRha2luZwogIC8vLyBgbWF4KDAuMCwgV2luZG93LnZpZXdQYWRkaW5nIC0gV2luZG93LnZpZXdJbnNldHMpYC4gVGhpcyB3aWxsIHRyZWF0IGEKICAvLy8gc3lzdGVtIElNRSB0aGF0IGluY3JlYXNlcyB0aGUgYm90dG9tIGluc2V0IGFzIGNvbnN1bWluZyB0aGF0IG11Y2ggb2YgdGhlCiAgLy8vIGJvdHRvbSBwYWRkaW5nLiBGb3IgZXhhbXBsZSwgb24gYW4gaVBob25lIFgsIFtXaW5kb3cucGFkZGluZy5ib3R0b21dIGlzCiAgLy8vIHRoZSBzYW1lIGFzIFtXaW5kb3cudmlld1BhZGRpbmcuYm90dG9tXSB3aGVuIHRoZSBzb2Z0IGtleWJvYXJkIGlzIG5vdAogIC8vLyBkcmF3biAodG8gYWNjb3VudCBmb3IgdGhlIGJvdHRvbSBzb2Z0IGJ1dHRvbiBhcmVhKSwgYnV0IHdpbGwgYmUgYDAuMGAgd2hlbgogIC8vLyB0aGUgc29mdCBrZXlib2FyZCBpcyB2aXNpYmxlLgogIC8vLwogIC8vLyBXaGVuIHRoaXMgY2hhbmdlcywgW29uTWV0cmljc0NoYW5nZWRdIGlzIGNhbGxlZC4KICAvLy8KICAvLy8gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgW1dpbmRvdy52aWV3SW5zZXRzXSwgW1dpbmRvdy52aWV3UGFkZGluZ10sCiAgLy8vIGFuZCBbV2luZG93LnBhZGRpbmddIGFyZSBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yCiAgLy8vIFtXaW5kb3ddLgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogW1dpZGdldHNCaW5kaW5nT2JzZXJ2ZXJdLCBmb3IgYSBtZWNoYW5pc20gYXQgdGhlIHdpZGdldHMgbGF5ZXIgdG8KICAvLy8gICAgb2JzZXJ2ZSB3aGVuIHRoaXMgdmFsdWUgY2hhbmdlcy4KICAvLy8gICogW01lZGlhUXVlcnkub2ZdLCBhIHNpbXBsZXIgbWVjaGFuaXNtIGZvciB0aGUgc2FtZS4KICAvLy8gICogW1NjYWZmb2xkXSwgd2hpY2ggYXV0b21hdGljYWxseSBhcHBsaWVzIHRoZSBwYWRkaW5nIGluIG1hdGVyaWFsIGRlc2lnbgogIC8vLyAgICBhcHBsaWNhdGlvbnMuCiAgV2luZG93UGFkZGluZyBnZXQgcGFkZGluZyA9PiBfcGFkZGluZzsKICBXaW5kb3dQYWRkaW5nIF9wYWRkaW5nID0gV2luZG93UGFkZGluZy56ZXJvOwoKICAvLy8gQSBjYWxsYmFjayB0aGF0IGlzIGludm9rZWQgd2hlbmV2ZXIgdGhlIFtkZXZpY2VQaXhlbFJhdGlvXSwKICAvLy8gW3BoeXNpY2FsU2l6ZV0sIFtwYWRkaW5nXSwgW3ZpZXdJbnNldHNdLCBvciBbc3lzdGVtR2VzdHVyZUluc2V0c10KICAvLy8gdmFsdWVzIGNoYW5nZSwgZm9yIGV4YW1wbGUgd2hlbiB0aGUgZGV2aWNlIGlzIHJvdGF0ZWQgb3Igd2hlbiB0aGUKICAvLy8gYXBwbGljYXRpb24gaXMgcmVzaXplZCAoZS5nLiB3aGVuIHNob3dpbmcgYXBwbGljYXRpb25zIHNpZGUtYnktc2lkZQogIC8vLyBvbiBBbmRyb2lkKS4KICAvLy8KICAvLy8gVGhlIGVuZ2luZSBpbnZva2VzIHRoaXMgY2FsbGJhY2sgaW4gdGhlIHNhbWUgem9uZSBpbiB3aGljaCB0aGUgY2FsbGJhY2sKICAvLy8gd2FzIHNldC4KICAvLy8KICAvLy8gVGhlIGZyYW1ld29yayByZWdpc3RlcnMgd2l0aCB0aGlzIGNhbGxiYWNrIGFuZCB1cGRhdGVzIHRoZSBsYXlvdXQKICAvLy8gYXBwcm9wcmlhdGVseS4KICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICAqIFtXaWRnZXRzQmluZGluZ09ic2VydmVyXSwgZm9yIGEgbWVjaGFuaXNtIGF0IHRoZSB3aWRnZXRzIGxheWVyIHRvCiAgLy8vICAgIHJlZ2lzdGVyIGZvciBub3RpZmljYXRpb25zIHdoZW4gdGhpcyBpcyBjYWxsZWQuCiAgLy8vICAqIFtNZWRpYVF1ZXJ5Lm9mXSwgYSBzaW1wbGVyIG1lY2hhbmlzbSBmb3IgdGhlIHNhbWUuCiAgVm9pZENhbGxiYWNrIGdldCBvbk1ldHJpY3NDaGFuZ2VkID0+IF9vbk1ldHJpY3NDaGFuZ2VkOwogIFZvaWRDYWxsYmFjayBfb25NZXRyaWNzQ2hhbmdlZDsKICBab25lIF9vbk1ldHJpY3NDaGFuZ2VkWm9uZTsKICBzZXQgb25NZXRyaWNzQ2hhbmdlZChWb2lkQ2FsbGJhY2sgY2FsbGJhY2spIHsKICAgIF9vbk1ldHJpY3NDaGFuZ2VkID0gY2FsbGJhY2s7CiAgICBfb25NZXRyaWNzQ2hhbmdlZFpvbmUgPSBab25lLmN1cnJlbnQ7CiAgfQoKICAvLy8gVGhlIHN5c3RlbS1yZXBvcnRlZCBkZWZhdWx0IGxvY2FsZSBvZiB0aGUgZGV2aWNlLgogIC8vLwogIC8vLyBUaGlzIGVzdGFibGlzaGVzIHRoZSBsYW5ndWFnZSBhbmQgZm9ybWF0dGluZyBjb252ZW50aW9ucyB0aGF0IGFwcGxpY2F0aW9uCiAgLy8vIHNob3VsZCwgaWYgcG9zc2libGUsIHVzZSB0byByZW5kZXIgdGhlaXIgdXNlciBpbnRlcmZhY2UuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdGhlIGZpcnN0IGxvY2FsZSBzZWxlY3RlZCBieSB0aGUgdXNlciBhbmQgaXMgdGhlIHVzZXIncwogIC8vLyBwcmltYXJ5IGxvY2FsZSAodGhlIGxvY2FsZSB0aGUgZGV2aWNlIFVJIGlzIGRpc3BsYXllZCBpbikKICAvLy8KICAvLy8gVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBsb2NhbGVzLmZpcnN0YCBhbmQgd2lsbCBwcm92aWRlIGFuIGVtcHR5IG5vbi1udWxsIGxvY2FsZQogIC8vLyBpZiB0aGUgW2xvY2FsZXNdIGxpc3QgaGFzIG5vdCBiZWVuIHNldCBvciBpcyBlbXB0eS4KICBMb2NhbGUgZ2V0IGxvY2FsZSB7CiAgICBpZiAoX2xvY2FsZXMgIT0gbnVsbCAmJiBfbG9jYWxlcy5pc05vdEVtcHR5KSB7CiAgICAgIHJldHVybiBfbG9jYWxlcy5maXJzdDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8vIFRoZSBmdWxsIHN5c3RlbS1yZXBvcnRlZCBzdXBwb3J0ZWQgbG9jYWxlcyBvZiB0aGUgZGV2aWNlLgogIC8vLwogIC8vLyBUaGlzIGVzdGFibGlzaGVzIHRoZSBsYW5ndWFnZSBhbmQgZm9ybWF0dGluZyBjb252ZW50aW9ucyB0aGF0IGFwcGxpY2F0aW9uCiAgLy8vIHNob3VsZCwgaWYgcG9zc2libGUsIHVzZSB0byByZW5kZXIgdGhlaXIgdXNlciBpbnRlcmZhY2UuCiAgLy8vCiAgLy8vIFRoZSBsaXN0IGlzIG9yZGVyZWQgaW4gb3JkZXIgb2YgcHJpb3JpdHksIHdpdGggbG93ZXItaW5kZXhlZCBsb2NhbGVzIGJlaW5nCiAgLy8vIHByZWZlcnJlZCBvdmVyIGhpZ2hlci1pbmRleGVkIG9uZXMuIFRoZSBmaXJzdCBlbGVtZW50IGlzIHRoZSBwcmltYXJ5IFtsb2NhbGVdLgogIC8vLwogIC8vLyBUaGUgW29uTG9jYWxlQ2hhbmdlZF0gY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW5ldmVyIHRoaXMgdmFsdWUgY2hhbmdlcy4KICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICAqIFtXaWRnZXRzQmluZGluZ09ic2VydmVyXSwgZm9yIGEgbWVjaGFuaXNtIGF0IHRoZSB3aWRnZXRzIGxheWVyIHRvCiAgLy8vICAgIG9ic2VydmUgd2hlbiB0aGlzIHZhbHVlIGNoYW5nZXMuCiAgTGlzdDxMb2NhbGU+IGdldCBsb2NhbGVzID0+IF9sb2NhbGVzOwogIExpc3Q8TG9jYWxlPiBfbG9jYWxlczsKCiAgLy8vIEEgY2FsbGJhY2sgdGhhdCBpcyBpbnZva2VkIHdoZW5ldmVyIFtsb2NhbGVdIGNoYW5nZXMgdmFsdWUuCiAgLy8vCiAgLy8vIFRoZSBmcmFtZXdvcmsgaW52b2tlcyB0aGlzIGNhbGxiYWNrIGluIHRoZSBzYW1lIHpvbmUgaW4gd2hpY2ggdGhlCiAgLy8vIGNhbGxiYWNrIHdhcyBzZXQuCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgKiBbV2lkZ2V0c0JpbmRpbmdPYnNlcnZlcl0sIGZvciBhIG1lY2hhbmlzbSBhdCB0aGUgd2lkZ2V0cyBsYXllciB0bwogIC8vLyAgICBvYnNlcnZlIHdoZW4gdGhpcyBjYWxsYmFjayBpcyBpbnZva2VkLgogIFZvaWRDYWxsYmFjayBnZXQgb25Mb2NhbGVDaGFuZ2VkID0+IF9vbkxvY2FsZUNoYW5nZWQ7CiAgVm9pZENhbGxiYWNrIF9vbkxvY2FsZUNoYW5nZWQ7CiAgWm9uZSBfb25Mb2NhbGVDaGFuZ2VkWm9uZTsKICBzZXQgb25Mb2NhbGVDaGFuZ2VkKFZvaWRDYWxsYmFjayBjYWxsYmFjaykgewogICAgX29uTG9jYWxlQ2hhbmdlZCA9IGNhbGxiYWNrOwogICAgX29uTG9jYWxlQ2hhbmdlZFpvbmUgPSBab25lLmN1cnJlbnQ7CiAgfQoKICAvLy8gVGhlIGxpZmVjeWNsZSBzdGF0ZSBpbW1lZGlhdGVseSBhZnRlciBkYXJ0IGlzb2xhdGUgaW5pdGlhbGl6YXRpb24uCiAgLy8vCiAgLy8vIFRoaXMgcHJvcGVydHkgd2lsbCBub3QgYmUgdXBkYXRlZCBhcyB0aGUgbGlmZWN5Y2xlIGNoYW5nZXMuCiAgLy8vCiAgLy8vIEl0IGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSBbU2NoZWR1bGVyQmluZGluZy5saWZlY3ljbGVTdGF0ZV0gYXQgc3RhcnR1cAogIC8vLyB3aXRoIGFueSBidWZmZXJlZCBsaWZlY3ljbGUgc3RhdGUgZXZlbnRzLgogIFN0cmluZyBnZXQgaW5pdGlhbExpZmVjeWNsZVN0YXRlIHsKICAgIF9pbml0aWFsTGlmZWN5Y2xlU3RhdGVBY2Nlc3NlZCA9IHRydWU7CiAgICByZXR1cm4gX2luaXRpYWxMaWZlY3ljbGVTdGF0ZTsKICB9CiAgU3RyaW5nIF9pbml0aWFsTGlmZWN5Y2xlU3RhdGU7CiAgLy8vIFRyYWNrcyBpZiB0aGUgaW5pdGlhbCBzdGF0ZSBoYXMgYmVlbiBhY2Nlc3NlZC4gT25jZSBhY2Nlc3NlZCwgd2UKICAvLy8gd2lsbCBzdG9wIHVwZGF0aW5nIHRoZSBbaW5pdGlhbExpZmVjeWNsZVN0YXRlXSwgYXMgaXQgaXMgbm90IHRoZQogIC8vLyBwcmVmZXJyZWQgd2F5IHRvIGFjY2VzcyB0aGUgc3RhdGUuCiAgYm9vbCBfaW5pdGlhbExpZmVjeWNsZVN0YXRlQWNjZXNzZWQgPSBmYWxzZTsKCiAgLy8vIFRoZSBzeXN0ZW0tcmVwb3J0ZWQgdGV4dCBzY2FsZS4KICAvLy8KICAvLy8gVGhpcyBlc3RhYmxpc2hlcyB0aGUgdGV4dCBzY2FsaW5nIGZhY3RvciB0byB1c2Ugd2hlbiByZW5kZXJpbmcgdGV4dCwKICAvLy8gYWNjb3JkaW5nIHRvIHRoZSB1c2VyJ3MgcGxhdGZvcm0gcHJlZmVyZW5jZXMuCiAgLy8vCiAgLy8vIFRoZSBbb25UZXh0U2NhbGVGYWN0b3JDaGFuZ2VkXSBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhpcyB2YWx1ZQogIC8vLyBjaGFuZ2VzLgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogW1dpZGdldHNCaW5kaW5nT2JzZXJ2ZXJdLCBmb3IgYSBtZWNoYW5pc20gYXQgdGhlIHdpZGdldHMgbGF5ZXIgdG8KICAvLy8gICAgb2JzZXJ2ZSB3aGVuIHRoaXMgdmFsdWUgY2hhbmdlcy4KICBkb3VibGUgZ2V0IHRleHRTY2FsZUZhY3RvciA9PiBfdGV4dFNjYWxlRmFjdG9yOwogIGRvdWJsZSBfdGV4dFNjYWxlRmFjdG9yID0gMS4wOwoKICAvLy8gVGhlIHNldHRpbmcgaW5kaWNhdGluZyB3aGV0aGVyIHRpbWUgc2hvdWxkIGFsd2F5cyBiZSBzaG93biBpbiB0aGUgMjQtaG91cgogIC8vLyBmb3JtYXQuCiAgLy8vCiAgLy8vIFRoaXMgb3B0aW9uIGlzIHVzZWQgYnkgW3Nob3dUaW1lUGlja2VyXS4KICBib29sIGdldCBhbHdheXNVc2UyNEhvdXJGb3JtYXQgPT4gX2Fsd2F5c1VzZTI0SG91ckZvcm1hdDsKICBib29sIF9hbHdheXNVc2UyNEhvdXJGb3JtYXQgPSBmYWxzZTsKCiAgLy8vIEEgY2FsbGJhY2sgdGhhdCBpcyBpbnZva2VkIHdoZW5ldmVyIFt0ZXh0U2NhbGVGYWN0b3JdIGNoYW5nZXMgdmFsdWUuCiAgLy8vCiAgLy8vIFRoZSBmcmFtZXdvcmsgaW52b2tlcyB0aGlzIGNhbGxiYWNrIGluIHRoZSBzYW1lIHpvbmUgaW4gd2hpY2ggdGhlCiAgLy8vIGNhbGxiYWNrIHdhcyBzZXQuCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgKiBbV2lkZ2V0c0JpbmRpbmdPYnNlcnZlcl0sIGZvciBhIG1lY2hhbmlzbSBhdCB0aGUgd2lkZ2V0cyBsYXllciB0bwogIC8vLyAgICBvYnNlcnZlIHdoZW4gdGhpcyBjYWxsYmFjayBpcyBpbnZva2VkLgogIFZvaWRDYWxsYmFjayBnZXQgb25UZXh0U2NhbGVGYWN0b3JDaGFuZ2VkID0+IF9vblRleHRTY2FsZUZhY3RvckNoYW5nZWQ7CiAgVm9pZENhbGxiYWNrIF9vblRleHRTY2FsZUZhY3RvckNoYW5nZWQ7CiAgWm9uZSBfb25UZXh0U2NhbGVGYWN0b3JDaGFuZ2VkWm9uZTsKICBzZXQgb25UZXh0U2NhbGVGYWN0b3JDaGFuZ2VkKFZvaWRDYWxsYmFjayBjYWxsYmFjaykgewogICAgX29uVGV4dFNjYWxlRmFjdG9yQ2hhbmdlZCA9IGNhbGxiYWNrOwogICAgX29uVGV4dFNjYWxlRmFjdG9yQ2hhbmdlZFpvbmUgPSBab25lLmN1cnJlbnQ7CiAgfQoKICAvLy8gVGhlIHNldHRpbmcgaW5kaWNhdGluZyB0aGUgY3VycmVudCBicmlnaHRuZXNzIG1vZGUgb2YgdGhlIGhvc3QgcGxhdGZvcm0uCiAgLy8vIElmIHRoZSBwbGF0Zm9ybSBoYXMgbm8gcHJlZmVyZW5jZSwgW3BsYXRmb3JtQnJpZ2h0bmVzc10gZGVmYXVsdHMgdG8gW0JyaWdodG5lc3MubGlnaHRdLgogIEJyaWdodG5lc3MgZ2V0IHBsYXRmb3JtQnJpZ2h0bmVzcyA9PiBfcGxhdGZvcm1CcmlnaHRuZXNzOwogIEJyaWdodG5lc3MgX3BsYXRmb3JtQnJpZ2h0bmVzcyA9IEJyaWdodG5lc3MubGlnaHQ7CgogIC8vLyBBIGNhbGxiYWNrIHRoYXQgaXMgaW52b2tlZCB3aGVuZXZlciBbcGxhdGZvcm1CcmlnaHRuZXNzXSBjaGFuZ2VzIHZhbHVlLgogIC8vLwogIC8vLyBUaGUgZnJhbWV3b3JrIGludm9rZXMgdGhpcyBjYWxsYmFjayBpbiB0aGUgc2FtZSB6b25lIGluIHdoaWNoIHRoZQogIC8vLyBjYWxsYmFjayB3YXMgc2V0LgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogW1dpZGdldHNCaW5kaW5nT2JzZXJ2ZXJdLCBmb3IgYSBtZWNoYW5pc20gYXQgdGhlIHdpZGdldHMgbGF5ZXIgdG8KICAvLy8gICAgb2JzZXJ2ZSB3aGVuIHRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZC4KICBWb2lkQ2FsbGJhY2sgZ2V0IG9uUGxhdGZvcm1CcmlnaHRuZXNzQ2hhbmdlZCA9PiBfb25QbGF0Zm9ybUJyaWdodG5lc3NDaGFuZ2VkOwogIFZvaWRDYWxsYmFjayBfb25QbGF0Zm9ybUJyaWdodG5lc3NDaGFuZ2VkOwogIFpvbmUgX29uUGxhdGZvcm1CcmlnaHRuZXNzQ2hhbmdlZFpvbmU7CiAgc2V0IG9uUGxhdGZvcm1CcmlnaHRuZXNzQ2hhbmdlZChWb2lkQ2FsbGJhY2sgY2FsbGJhY2spIHsKICAgIF9vblBsYXRmb3JtQnJpZ2h0bmVzc0NoYW5nZWQgPSBjYWxsYmFjazsKICAgIF9vblBsYXRmb3JtQnJpZ2h0bmVzc0NoYW5nZWRab25lID0gWm9uZS5jdXJyZW50OwogIH0KCiAgLy8vIEEgY2FsbGJhY2sgdGhhdCBpcyBpbnZva2VkIHRvIG5vdGlmeSB0aGUgYXBwbGljYXRpb24gdGhhdCBpdCBpcyBhbgogIC8vLyBhcHByb3ByaWF0ZSB0aW1lIHRvIHByb3ZpZGUgYSBzY2VuZSB1c2luZyB0aGUgW1NjZW5lQnVpbGRlcl0gQVBJIGFuZCB0aGUKICAvLy8gW3JlbmRlcl0gbWV0aG9kLiBXaGVuIHBvc3NpYmxlLCB0aGlzIGlzIGRyaXZlbiBieSB0aGUgaGFyZHdhcmUgVlN5bmMKICAvLy8gc2lnbmFsLiBUaGlzIGlzIG9ubHkgY2FsbGVkIGlmIFtzY2hlZHVsZUZyYW1lXSBoYXMgYmVlbiBjYWxsZWQgc2luY2UgdGhlCiAgLy8vIGxhc3QgdGltZSB0aGlzIGNhbGxiYWNrIHdhcyBpbnZva2VkLgogIC8vLwogIC8vLyBUaGUgW29uRHJhd0ZyYW1lXSBjYWxsYmFjayBpcyBpbnZva2VkIGltbWVkaWF0ZWx5IGFmdGVyIFtvbkJlZ2luRnJhbWVdLAogIC8vLyBhZnRlciBkcmFpbmluZyBhbnkgbWljcm90YXNrcyAoZS5nLiBjb21wbGV0aW9ucyBvZiBhbnkgW0Z1dHVyZV1zKSBxdWV1ZWQKICAvLy8gYnkgdGhlIFtvbkJlZ2luRnJhbWVdIGhhbmRsZXIuCiAgLy8vCiAgLy8vIFRoZSBmcmFtZXdvcmsgaW52b2tlcyB0aGlzIGNhbGxiYWNrIGluIHRoZSBzYW1lIHpvbmUgaW4gd2hpY2ggdGhlCiAgLy8vIGNhbGxiYWNrIHdhcyBzZXQuCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgKiBbU2NoZWR1bGVyQmluZGluZ10sIHRoZSBGbHV0dGVyIGZyYW1ld29yayBjbGFzcyB3aGljaCBtYW5hZ2VzIHRoZQogIC8vLyAgICBzY2hlZHVsaW5nIG9mIGZyYW1lcy4KICAvLy8gICogW1JlbmRlcmVyQmluZGluZ10sIHRoZSBGbHV0dGVyIGZyYW1ld29yayBjbGFzcyB3aGljaCBtYW5hZ2VzIGxheW91dCBhbmQKICAvLy8gICAgcGFpbnRpbmcuCiAgRnJhbWVDYWxsYmFjayBnZXQgb25CZWdpbkZyYW1lID0+IF9vbkJlZ2luRnJhbWU7CiAgRnJhbWVDYWxsYmFjayBfb25CZWdpbkZyYW1lOwogIFpvbmUgX29uQmVnaW5GcmFtZVpvbmU7CiAgc2V0IG9uQmVnaW5GcmFtZShGcmFtZUNhbGxiYWNrIGNhbGxiYWNrKSB7CiAgICBfb25CZWdpbkZyYW1lID0gY2FsbGJhY2s7CiAgICBfb25CZWdpbkZyYW1lWm9uZSA9IFpvbmUuY3VycmVudDsKICB9CgogIC8vLyBBIGNhbGxiYWNrIHRoYXQgaXMgaW52b2tlZCBmb3IgZWFjaCBmcmFtZSBhZnRlciBbb25CZWdpbkZyYW1lXSBoYXMKICAvLy8gY29tcGxldGVkIGFuZCBhZnRlciB0aGUgbWljcm90YXNrIHF1ZXVlIGhhcyBiZWVuIGRyYWluZWQuIFRoaXMgY2FuIGJlCiAgLy8vIHVzZWQgdG8gaW1wbGVtZW50IGEgc2Vjb25kIHBoYXNlIG9mIGZyYW1lIHJlbmRlcmluZyB0aGF0IGhhcHBlbnMKICAvLy8gYWZ0ZXIgYW55IGRlZmVycmVkIHdvcmsgcXVldWVkIGJ5IHRoZSBbb25CZWdpbkZyYW1lXSBwaGFzZS4KICAvLy8KICAvLy8gVGhlIGZyYW1ld29yayBpbnZva2VzIHRoaXMgY2FsbGJhY2sgaW4gdGhlIHNhbWUgem9uZSBpbiB3aGljaCB0aGUKICAvLy8gY2FsbGJhY2sgd2FzIHNldC4KICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICAqIFtTY2hlZHVsZXJCaW5kaW5nXSwgdGhlIEZsdXR0ZXIgZnJhbWV3b3JrIGNsYXNzIHdoaWNoIG1hbmFnZXMgdGhlCiAgLy8vICAgIHNjaGVkdWxpbmcgb2YgZnJhbWVzLgogIC8vLyAgKiBbUmVuZGVyZXJCaW5kaW5nXSwgdGhlIEZsdXR0ZXIgZnJhbWV3b3JrIGNsYXNzIHdoaWNoIG1hbmFnZXMgbGF5b3V0IGFuZAogIC8vLyAgICBwYWludGluZy4KICBWb2lkQ2FsbGJhY2sgZ2V0IG9uRHJhd0ZyYW1lID0+IF9vbkRyYXdGcmFtZTsKICBWb2lkQ2FsbGJhY2sgX29uRHJhd0ZyYW1lOwogIFpvbmUgX29uRHJhd0ZyYW1lWm9uZTsKICBzZXQgb25EcmF3RnJhbWUoVm9pZENhbGxiYWNrIGNhbGxiYWNrKSB7CiAgICBfb25EcmF3RnJhbWUgPSBjYWxsYmFjazsKICAgIF9vbkRyYXdGcmFtZVpvbmUgPSBab25lLmN1cnJlbnQ7CiAgfQoKICAvLy8gQSBjYWxsYmFjayB0aGF0IGlzIGludm9rZWQgdG8gcmVwb3J0IHRoZSBbRnJhbWVUaW1pbmddIG9mIHJlY2VudGx5CiAgLy8vIHJhc3Rlcml6ZWQgZnJhbWVzLgogIC8vLwogIC8vLyBJdCdzIHByZWZlcmVkIHRvIHVzZSBbU2NoZWR1bGVyQmluZGluZy5hZGRUaW1pbmdzQ2FsbGJhY2tdIHRoYW4gdG8gdXNlCiAgLy8vIFtXaW5kb3cub25SZXBvcnRUaW1pbmdzXSBkaXJlY3RseSBiZWNhdXNlCiAgLy8vIFtTY2hlZHVsZXJCaW5kaW5nLmFkZFRpbWluZ3NDYWxsYmFja10gYWxsb3dzIG11bHRpcGxlIGNhbGxiYWNrcy4KICAvLy8KICAvLy8gVGhpcyBjYW4gYmUgdXNlZCB0byBzZWUgaWYgdGhlIGFwcGxpY2F0aW9uIGhhcyBtaXNzZWQgZnJhbWVzICh0aHJvdWdoCiAgLy8vIFtGcmFtZVRpbWluZy5idWlsZER1cmF0aW9uXSBhbmQgW0ZyYW1lVGltaW5nLnJhc3RlckR1cmF0aW9uXSksIG9yIGhpZ2gKICAvLy8gbGF0ZW5jaWVzICh0aHJvdWdoIFtGcmFtZVRpbWluZy50b3RhbFNwYW5dKS4KICAvLy8KICAvLy8gVW5saWtlIFtUaW1lbGluZV0sIHRoZSB0aW1pbmcgaW5mb3JtYXRpb24gaGVyZSBpcyBhdmFpbGFibGUgaW4gdGhlIHJlbGVhc2UKICAvLy8gbW9kZSAoYWRkaXRpb25hbCB0byB0aGUgcHJvZmlsZSBhbmQgdGhlIGRlYnVnIG1vZGUpLiBIZW5jZSB0aGlzIGNhbiBiZQogIC8vLyB1c2VkIHRvIG1vbml0b3IgdGhlIGFwcGxpY2F0aW9uJ3MgcGVyZm9ybWFuY2UgaW4gdGhlIHdpbGQuCiAgLy8vCiAgLy8vIHtAbWFjcm8gZGFydC51aS5UaW1pbmdzQ2FsbGJhY2subGlzdH0KICAvLy8KICAvLy8gSWYgdGhpcyBpcyBudWxsLCBubyBhZGRpdGlvbmFsIHdvcmsgd2lsbCBiZSBkb25lLiBJZiB0aGlzIGlzIG5vdCBudWxsLAogIC8vLyBGbHV0dGVyIHNwZW5kcyBsZXNzIHRoYW4gMC4xbXMgZXZlcnkgMSBzZWNvbmQgdG8gcmVwb3J0IHRoZSB0aW1pbmdzCiAgLy8vIChtZWFzdXJlZCBvbiBpUGhvbmU2UykuIFRoZSAwLjFtcyBpcyBhYm91dCAwLjYlIG9mIDE2bXMgKGZyYW1lIGJ1ZGdldCBmb3IKICAvLy8gNjBmcHMpLCBvciAwLjAxJSBDUFUgdXNhZ2UgcGVyIHNlY29uZC4KICBUaW1pbmdzQ2FsbGJhY2sgZ2V0IG9uUmVwb3J0VGltaW5ncyA9PiBfb25SZXBvcnRUaW1pbmdzOwogIFRpbWluZ3NDYWxsYmFjayBfb25SZXBvcnRUaW1pbmdzOwogIFpvbmUgX29uUmVwb3J0VGltaW5nc1pvbmU7CiAgc2V0IG9uUmVwb3J0VGltaW5ncyhUaW1pbmdzQ2FsbGJhY2sgY2FsbGJhY2spIHsKICAgIGlmICgoY2FsbGJhY2sgPT0gbnVsbCkgIT0gKF9vblJlcG9ydFRpbWluZ3MgPT0gbnVsbCkpIHsKICAgICAgX3NldE5lZWRzUmVwb3J0VGltaW5ncyhjYWxsYmFjayAhPSBudWxsKTsKICAgIH0KICAgIF9vblJlcG9ydFRpbWluZ3MgPSBjYWxsYmFjazsKICAgIF9vblJlcG9ydFRpbWluZ3Nab25lID0gWm9uZS5jdXJyZW50OwogIH0KCiAgX1NldE5lZWRzUmVwb3J0VGltaW5nc0Z1bmMgX3NldE5lZWRzUmVwb3J0VGltaW5nczsKICB2b2lkIF9uYXRpdmVTZXROZWVkc1JlcG9ydFRpbWluZ3MoYm9vbCB2YWx1ZSkgbmF0aXZlICdXaW5kb3dfc2V0TmVlZHNSZXBvcnRUaW1pbmdzJzsKCiAgLy8vIEEgY2FsbGJhY2sgdGhhdCBpcyBpbnZva2VkIHdoZW4gcG9pbnRlciBkYXRhIGlzIGF2YWlsYWJsZS4KICAvLy8KICAvLy8gVGhlIGZyYW1ld29yayBpbnZva2VzIHRoaXMgY2FsbGJhY2sgaW4gdGhlIHNhbWUgem9uZSBpbiB3aGljaCB0aGUKICAvLy8gY2FsbGJhY2sgd2FzIHNldC4KICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICAqIFtHZXN0dXJlQmluZGluZ10sIHRoZSBGbHV0dGVyIGZyYW1ld29yayBjbGFzcyB3aGljaCBtYW5hZ2VzIHBvaW50ZXIKICAvLy8gICAgZXZlbnRzLgogIFBvaW50ZXJEYXRhUGFja2V0Q2FsbGJhY2sgZ2V0IG9uUG9pbnRlckRhdGFQYWNrZXQgPT4gX29uUG9pbnRlckRhdGFQYWNrZXQ7CiAgUG9pbnRlckRhdGFQYWNrZXRDYWxsYmFjayBfb25Qb2ludGVyRGF0YVBhY2tldDsKICBab25lIF9vblBvaW50ZXJEYXRhUGFja2V0Wm9uZTsKICBzZXQgb25Qb2ludGVyRGF0YVBhY2tldChQb2ludGVyRGF0YVBhY2tldENhbGxiYWNrIGNhbGxiYWNrKSB7CiAgICBfb25Qb2ludGVyRGF0YVBhY2tldCA9IGNhbGxiYWNrOwogICAgX29uUG9pbnRlckRhdGFQYWNrZXRab25lID0gWm9uZS5jdXJyZW50OwogIH0KCiAgLy8vIFRoZSByb3V0ZSBvciBwYXRoIHRoYXQgdGhlIGVtYmVkZGVyIHJlcXVlc3RlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiB3YXMKICAvLy8gbGF1bmNoZWQuCiAgLy8vCiAgLy8vIFRoaXMgd2lsbCBiZSB0aGUgc3RyaW5nICJgL2AiIGlmIG5vIHBhcnRpY3VsYXIgcm91dGUgd2FzIHJlcXVlc3RlZC4KICAvLy8KICAvLy8gIyMgQW5kcm9pZAogIC8vLwogIC8vLyBPbiBBbmRyb2lkLCBjYWxsaW5nCiAgLy8vIFtgRmx1dHRlclZpZXcuc2V0SW5pdGlhbFJvdXRlYF0oL2phdmFkb2MvaW8vZmx1dHRlci92aWV3L0ZsdXR0ZXJWaWV3Lmh0bWwjc2V0SW5pdGlhbFJvdXRlLWphdmEubGFuZy5TdHJpbmctKQogIC8vLyB3aWxsIHNldCB0aGlzIHZhbHVlLiBUaGUgdmFsdWUgbXVzdCBiZSBzZXQgc3VmZmljaWVudGx5IGVhcmx5LCBpLmUuIGJlZm9yZQogIC8vLyB0aGUgW3J1bkFwcF0gY2FsbCBpcyBleGVjdXRlZCBpbiBEYXJ0LCBmb3IgdGhpcyB0byBoYXZlIGFueSBlZmZlY3Qgb24gdGhlCiAgLy8vIGZyYW1ld29yay4gVGhlIGBjcmVhdGVGbHV0dGVyVmlld2AgbWV0aG9kIGluIHlvdXIgYEZsdXR0ZXJBY3Rpdml0eWAKICAvLy8gc3ViY2xhc3MgaXMgYSBzdWl0YWJsZSB0aW1lIHRvIHNldCB0aGUgdmFsdWUuIFRoZSBhcHBsaWNhdGlvbidzCiAgLy8vIGBBbmRyb2lkTWFuaWZlc3QueG1sYCBmaWxlIG11c3QgYWxzbyBiZSB1cGRhdGVkIHRvIGhhdmUgYSBzdWl0YWJsZQogIC8vLyBbYDxpbnRlbnQtZmlsdGVyPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL2d1aWRlL3RvcGljcy9tYW5pZmVzdC9pbnRlbnQtZmlsdGVyLWVsZW1lbnQuaHRtbCkuCiAgLy8vCiAgLy8vICMjIGlPUwogIC8vLwogIC8vLyBPbiBpT1MsIGNhbGxpbmcKICAvLy8gW2BGbHV0dGVyVmlld0NvbnRyb2xsZXIuc2V0SW5pdGlhbFJvdXRlYF0oL29iamNkb2MvQ2xhc3Nlcy9GbHV0dGVyVmlld0NvbnRyb2xsZXIuaHRtbCMvYzpvYmpjJTI4Y3MlMjlGbHV0dGVyVmlld0NvbnRyb2xsZXIlMjhpbSUyOXNldEluaXRpYWxSb3V0ZTopCiAgLy8vIHdpbGwgc2V0IHRoaXMgdmFsdWUuIFRoZSB2YWx1ZSBtdXN0IGJlIHNldCBzdWZmaWNpZW50bHkgZWFybHksIGkuZS4gYmVmb3JlCiAgLy8vIHRoZSBbcnVuQXBwXSBjYWxsIGlzIGV4ZWN1dGVkIGluIERhcnQsIGZvciB0aGlzIHRvIGhhdmUgYW55IGVmZmVjdCBvbiB0aGUKICAvLy8gZnJhbWV3b3JrLiBUaGUgYGFwcGxpY2F0aW9uOmRpZEZpbmlzaExhdW5jaGluZ1dpdGhPcHRpb25zOmAgbWV0aG9kIGlzIGEKICAvLy8gc3VpdGFibGUgdGltZSB0byBzZXQgdGhpcyB2YWx1ZS4KICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICAqIFtOYXZpZ2F0b3JdLCBhIHdpZGdldCB0aGF0IGhhbmRsZXMgcm91dGluZy4KICAvLy8gICogW1N5c3RlbUNoYW5uZWxzLm5hdmlnYXRpb25dLCB3aGljaCBoYW5kbGVzIHN1YnNlcXVlbnQgbmF2aWdhdGlvbgogIC8vLyAgICByZXF1ZXN0cyBmcm9tIHRoZSBlbWJlZGRlci4KICBTdHJpbmcgZ2V0IGRlZmF1bHRSb3V0ZU5hbWUgPT4gX2RlZmF1bHRSb3V0ZU5hbWUoKTsKICBTdHJpbmcgX2RlZmF1bHRSb3V0ZU5hbWUoKSBuYXRpdmUgJ1dpbmRvd19kZWZhdWx0Um91dGVOYW1lJzsKCiAgLy8vIFJlcXVlc3RzIHRoYXQsIGF0IHRoZSBuZXh0IGFwcHJvcHJpYXRlIG9wcG9ydHVuaXR5LCB0aGUgW29uQmVnaW5GcmFtZV0KICAvLy8gYW5kIFtvbkRyYXdGcmFtZV0gY2FsbGJhY2tzIGJlIGludm9rZWQuCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgKiBbU2NoZWR1bGVyQmluZGluZ10sIHRoZSBGbHV0dGVyIGZyYW1ld29yayBjbGFzcyB3aGljaCBtYW5hZ2VzIHRoZQogIC8vLyAgICBzY2hlZHVsaW5nIG9mIGZyYW1lcy4KICB2b2lkIHNjaGVkdWxlRnJhbWUoKSBuYXRpdmUgJ1dpbmRvd19zY2hlZHVsZUZyYW1lJzsKCiAgLy8vIFVwZGF0ZXMgdGhlIGFwcGxpY2F0aW9uJ3MgcmVuZGVyaW5nIG9uIHRoZSBHUFUgd2l0aCB0aGUgbmV3bHkgcHJvdmlkZWQKICAvLy8gW1NjZW5lXS4gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZQogIC8vLyBbb25CZWdpbkZyYW1lXSBvciBbb25EcmF3RnJhbWVdIGNhbGxiYWNrcyBiZWluZyBpbnZva2VkLiBJZiB0aGlzIGZ1bmN0aW9uCiAgLy8vIGlzIGNhbGxlZCBhIHNlY29uZCB0aW1lIGR1cmluZyBhIHNpbmdsZSBbb25CZWdpbkZyYW1lXS9bb25EcmF3RnJhbWVdCiAgLy8vIGNhbGxiYWNrIHNlcXVlbmNlIG9yIGNhbGxlZCBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aG9zZSBjYWxsYmFja3MsIHRoZSBjYWxsCiAgLy8vIHdpbGwgYmUgaWdub3JlZC4KICAvLy8KICAvLy8gVG8gcmVjb3JkIGdyYXBoaWNhbCBvcGVyYXRpb25zLCBmaXJzdCBjcmVhdGUgYSBbUGljdHVyZVJlY29yZGVyXSwgdGhlbgogIC8vLyBjb25zdHJ1Y3QgYSBbQ2FudmFzXSwgcGFzc2luZyB0aGF0IFtQaWN0dXJlUmVjb3JkZXJdIHRvIGl0cyBjb25zdHJ1Y3Rvci4KICAvLy8gQWZ0ZXIgaXNzdWluZyBhbGwgdGhlIGdyYXBoaWNhbCBvcGVyYXRpb25zLCBjYWxsIHRoZQogIC8vLyBbUGljdHVyZVJlY29yZGVyLmVuZFJlY29yZGluZ10gZnVuY3Rpb24gb24gdGhlIFtQaWN0dXJlUmVjb3JkZXJdIHRvIG9idGFpbgogIC8vLyB0aGUgZmluYWwgW1BpY3R1cmVdIHRoYXQgcmVwcmVzZW50cyB0aGUgaXNzdWVkIGdyYXBoaWNhbCBvcGVyYXRpb25zLgogIC8vLwogIC8vLyBOZXh0LCBjcmVhdGUgYSBbU2NlbmVCdWlsZGVyXSwgYW5kIGFkZCB0aGUgW1BpY3R1cmVdIHRvIGl0IHVzaW5nCiAgLy8vIFtTY2VuZUJ1aWxkZXIuYWRkUGljdHVyZV0uIFdpdGggdGhlIFtTY2VuZUJ1aWxkZXIuYnVpbGRdIG1ldGhvZCB5b3UgY2FuCiAgLy8vIHRoZW4gb2J0YWluIGEgW1NjZW5lXSBvYmplY3QsIHdoaWNoIHlvdSBjYW4gZGlzcGxheSB0byB0aGUgdXNlciB2aWEgdGhpcwogIC8vLyBbcmVuZGVyXSBmdW5jdGlvbi4KICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICAqIFtTY2hlZHVsZXJCaW5kaW5nXSwgdGhlIEZsdXR0ZXIgZnJhbWV3b3JrIGNsYXNzIHdoaWNoIG1hbmFnZXMgdGhlCiAgLy8vICAgIHNjaGVkdWxpbmcgb2YgZnJhbWVzLgogIC8vLyAgKiBbUmVuZGVyZXJCaW5kaW5nXSwgdGhlIEZsdXR0ZXIgZnJhbWV3b3JrIGNsYXNzIHdoaWNoIG1hbmFnZXMgbGF5b3V0IGFuZAogIC8vLyAgICBwYWludGluZy4KICB2b2lkIHJlbmRlcihTY2VuZSBzY2VuZSkgbmF0aXZlICdXaW5kb3dfcmVuZGVyJzsKCiAgLy8vIFdoZXRoZXIgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCB0aGF0IFt1cGRhdGVTZW1hbnRpY3NdIGJlIGNhbGxlZCB3aGVuCiAgLy8vIHRoZSBzZW1hbnRpYyBjb250ZW50cyBvZiB3aW5kb3cgY2hhbmdlcy4KICAvLy8KICAvLy8gVGhlIFtvblNlbWFudGljc0VuYWJsZWRDaGFuZ2VkXSBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhpcyB2YWx1ZQogIC8vLyBjaGFuZ2VzLgogIGJvb2wgZ2V0IHNlbWFudGljc0VuYWJsZWQgPT4gX3NlbWFudGljc0VuYWJsZWQ7CiAgYm9vbCBfc2VtYW50aWNzRW5hYmxlZCA9IGZhbHNlOwoKICAvLy8gQSBjYWxsYmFjayB0aGF0IGlzIGludm9rZWQgd2hlbiB0aGUgdmFsdWUgb2YgW3NlbWFudGljc0VuYWJsZWRdIGNoYW5nZXMuCiAgLy8vCiAgLy8vIFRoZSBmcmFtZXdvcmsgaW52b2tlcyB0aGlzIGNhbGxiYWNrIGluIHRoZSBzYW1lIHpvbmUgaW4gd2hpY2ggdGhlCiAgLy8vIGNhbGxiYWNrIHdhcyBzZXQuCiAgVm9pZENhbGxiYWNrIGdldCBvblNlbWFudGljc0VuYWJsZWRDaGFuZ2VkID0+IF9vblNlbWFudGljc0VuYWJsZWRDaGFuZ2VkOwogIFZvaWRDYWxsYmFjayBfb25TZW1hbnRpY3NFbmFibGVkQ2hhbmdlZDsKICBab25lIF9vblNlbWFudGljc0VuYWJsZWRDaGFuZ2VkWm9uZTsKICBzZXQgb25TZW1hbnRpY3NFbmFibGVkQ2hhbmdlZChWb2lkQ2FsbGJhY2sgY2FsbGJhY2spIHsKICAgIF9vblNlbWFudGljc0VuYWJsZWRDaGFuZ2VkID0gY2FsbGJhY2s7CiAgICBfb25TZW1hbnRpY3NFbmFibGVkQ2hhbmdlZFpvbmUgPSBab25lLmN1cnJlbnQ7CiAgfQoKICAvLy8gQSBjYWxsYmFjayB0aGF0IGlzIGludm9rZWQgd2hlbmV2ZXIgdGhlIHVzZXIgcmVxdWVzdHMgYW4gYWN0aW9uIHRvIGJlCiAgLy8vIHBlcmZvcm1lZC4KICAvLy8KICAvLy8gVGhpcyBjYWxsYmFjayBpcyB1c2VkIHdoZW4gdGhlIHVzZXIgZXhwcmVzc2VzIHRoZSBhY3Rpb24gdGhleSB3aXNoIHRvCiAgLy8vIHBlcmZvcm0gYmFzZWQgb24gdGhlIHNlbWFudGljcyBzdXBwbGllZCBieSBbdXBkYXRlU2VtYW50aWNzXS4KICAvLy8KICAvLy8gVGhlIGZyYW1ld29yayBpbnZva2VzIHRoaXMgY2FsbGJhY2sgaW4gdGhlIHNhbWUgem9uZSBpbiB3aGljaCB0aGUKICAvLy8gY2FsbGJhY2sgd2FzIHNldC4KICBTZW1hbnRpY3NBY3Rpb25DYWxsYmFjayBnZXQgb25TZW1hbnRpY3NBY3Rpb24gPT4gX29uU2VtYW50aWNzQWN0aW9uOwogIFNlbWFudGljc0FjdGlvbkNhbGxiYWNrIF9vblNlbWFudGljc0FjdGlvbjsKICBab25lIF9vblNlbWFudGljc0FjdGlvblpvbmU7CiAgc2V0IG9uU2VtYW50aWNzQWN0aW9uKFNlbWFudGljc0FjdGlvbkNhbGxiYWNrIGNhbGxiYWNrKSB7CiAgICBfb25TZW1hbnRpY3NBY3Rpb24gPSBjYWxsYmFjazsKICAgIF9vblNlbWFudGljc0FjdGlvblpvbmUgPSBab25lLmN1cnJlbnQ7CiAgfQoKICAvLy8gQWRkaXRpb25hbCBhY2Nlc3NpYmlsaXR5IGZlYXR1cmVzIHRoYXQgbWF5IGJlIGVuYWJsZWQgYnkgdGhlIHBsYXRmb3JtLgogIEFjY2Vzc2liaWxpdHlGZWF0dXJlcyBnZXQgYWNjZXNzaWJpbGl0eUZlYXR1cmVzID0+IF9hY2Nlc3NpYmlsaXR5RmVhdHVyZXM7CiAgQWNjZXNzaWJpbGl0eUZlYXR1cmVzIF9hY2Nlc3NpYmlsaXR5RmVhdHVyZXM7CgogIC8vLyBBIGNhbGxiYWNrIHRoYXQgaXMgaW52b2tlZCB3aGVuIHRoZSB2YWx1ZSBvZiBbYWNjZXNzaWJpbGl0eUZlYXR1cmVzXSBjaGFuZ2VzLgogIC8vLwogIC8vLyBUaGUgZnJhbWV3b3JrIGludm9rZXMgdGhpcyBjYWxsYmFjayBpbiB0aGUgc2FtZSB6b25lIGluIHdoaWNoIHRoZQogIC8vLyBjYWxsYmFjayB3YXMgc2V0LgogIFZvaWRDYWxsYmFjayBnZXQgb25BY2Nlc3NpYmlsaXR5RmVhdHVyZXNDaGFuZ2VkID0+IF9vbkFjY2Vzc2liaWxpdHlGZWF0dXJlc0NoYW5nZWQ7CiAgVm9pZENhbGxiYWNrIF9vbkFjY2Vzc2liaWxpdHlGZWF0dXJlc0NoYW5nZWQ7CiAgWm9uZSBfb25BY2Nlc3NpYmlsaXR5RmxhZ3NDaGFuZ2VkWm9uZTsKICBzZXQgb25BY2Nlc3NpYmlsaXR5RmVhdHVyZXNDaGFuZ2VkKFZvaWRDYWxsYmFjayBjYWxsYmFjaykgewogICAgX29uQWNjZXNzaWJpbGl0eUZlYXR1cmVzQ2hhbmdlZCA9IGNhbGxiYWNrOwogICAgX29uQWNjZXNzaWJpbGl0eUZsYWdzQ2hhbmdlZFpvbmUgPSBab25lLmN1cnJlbnQ7CiAgfQoKICAvLy8gQ2hhbmdlIHRoZSByZXRhaW5lZCBzZW1hbnRpY3MgZGF0YSBhYm91dCB0aGlzIHdpbmRvdy4KICAvLy8KICAvLy8gSWYgW3NlbWFudGljc0VuYWJsZWRdIGlzIHRydWUsIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgdGhhdCB0aGlzIGZ1bmN0aW9uCiAgLy8vIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgc2VtYW50aWMgY29udGVudCBvZiB0aGlzIHdpbmRvdyBjaGFuZ2VzLgogIC8vLwogIC8vLyBJbiBlaXRoZXIgY2FzZSwgdGhpcyBmdW5jdGlvbiBkaXNwb3NlcyB0aGUgZ2l2ZW4gdXBkYXRlLCB3aGljaCBtZWFucyB0aGUKICAvLy8gc2VtYW50aWNzIHVwZGF0ZSBjYW5ub3QgYmUgdXNlZCBmdXJ0aGVyLgogIHZvaWQgdXBkYXRlU2VtYW50aWNzKFNlbWFudGljc1VwZGF0ZSB1cGRhdGUpIG5hdGl2ZSAnV2luZG93X3VwZGF0ZVNlbWFudGljcyc7CgogIC8vLyBTZXQgdGhlIGRlYnVnIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgd2luZG93J3Mgcm9vdCBpc29sYXRlLgogIC8vLwogIC8vLyBOb3JtYWxseSBkZWJ1ZyBuYW1lcyBhcmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0aGUgRGFydCBwb3J0LCBlbnRyeQogIC8vLyBwb2ludCwgYW5kIHNvdXJjZSBmaWxlLiBGb3IgZXhhbXBsZTogYG1haW4uZGFydCRtYWluLTEyMzRgLgogIC8vLwogIC8vLyBUaGlzIGNhbiBiZSBjb21iaW5lZCB3aXRoIGZsdXR0ZXIgdG9vbHMgYC0taXNvbGF0ZS1maWx0ZXJgIGZsYWcgdG8gZGVidWcKICAvLy8gc3BlY2lmaWMgcm9vdCBpc29sYXRlcy4gRm9yIGV4YW1wbGU6IGBmbHV0dGVyIGF0dGFjaCAtLWlzb2xhdGUtZmlsdGVyPVtuYW1lXWAuCiAgLy8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IHJlbmFtZSBhbnkgY2hpbGQgaXNvbGF0ZXMgb2YgdGhlIHJvb3QuCiAgdm9pZCBzZXRJc29sYXRlRGVidWdOYW1lKFN0cmluZyBuYW1lKSBuYXRpdmUgJ1dpbmRvd19zZXRJc29sYXRlRGVidWdOYW1lJzsKCiAgLy8vIFNlbmRzIGEgbWVzc2FnZSB0byBhIHBsYXRmb3JtLXNwZWNpZmljIHBsdWdpbi4KICAvLy8KICAvLy8gVGhlIGBuYW1lYCBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB3aGljaCBwbHVnaW4gcmVjZWl2ZXMgdGhlIG1lc3NhZ2UuIFRoZQogIC8vLyBgZGF0YWAgcGFyYW1ldGVyIGNvbnRhaW5zIHRoZSBtZXNzYWdlIHBheWxvYWQgYW5kIGlzIHR5cGljYWxseSBVVEYtOAogIC8vLyBlbmNvZGVkIEpTT04gYnV0IGNhbiBiZSBhcmJpdHJhcnkgZGF0YS4gSWYgdGhlIHBsdWdpbiByZXBsaWVzIHRvIHRoZQogIC8vLyBtZXNzYWdlLCBgY2FsbGJhY2tgIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHJlc3BvbnNlLgogIC8vLwogIC8vLyBUaGUgZnJhbWV3b3JrIGludm9rZXMgW2NhbGxiYWNrXSBpbiB0aGUgc2FtZSB6b25lIGluIHdoaWNoIHRoaXMgbWV0aG9kCiAgLy8vIHdhcyBjYWxsZWQuCiAgdm9pZCBzZW5kUGxhdGZvcm1NZXNzYWdlKFN0cmluZyBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlRGF0YSBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybU1lc3NhZ2VSZXNwb25zZUNhbGxiYWNrIGNhbGxiYWNrKSB7CiAgICBmaW5hbCBTdHJpbmcgZXJyb3IgPQogICAgICAgIF9zZW5kUGxhdGZvcm1NZXNzYWdlKG5hbWUsIF96b25lZFBsYXRmb3JtTWVzc2FnZVJlc3BvbnNlQ2FsbGJhY2soY2FsbGJhY2spLCBkYXRhKTsKICAgIGlmIChlcnJvciAhPSBudWxsKQogICAgICB0aHJvdyBFeGNlcHRpb24oZXJyb3IpOwogIH0KICBTdHJpbmcgX3NlbmRQbGF0Zm9ybU1lc3NhZ2UoU3RyaW5nIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtTWVzc2FnZVJlc3BvbnNlQ2FsbGJhY2sgY2FsbGJhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVEYXRhIGRhdGEpIG5hdGl2ZSAnV2luZG93X3NlbmRQbGF0Zm9ybU1lc3NhZ2UnOwoKICAvLy8gQ2FsbGVkIHdoZW5ldmVyIHRoaXMgd2luZG93IHJlY2VpdmVzIGEgbWVzc2FnZSBmcm9tIGEgcGxhdGZvcm0tc3BlY2lmaWMKICAvLy8gcGx1Z2luLgogIC8vLwogIC8vLyBUaGUgYG5hbWVgIHBhcmFtZXRlciBkZXRlcm1pbmVzIHdoaWNoIHBsdWdpbiBzZW50IHRoZSBtZXNzYWdlLiBUaGUgYGRhdGFgCiAgLy8vIHBhcmFtZXRlciBpcyB0aGUgcGF5bG9hZCBhbmQgaXMgdHlwaWNhbGx5IFVURi04IGVuY29kZWQgSlNPTiBidXQgY2FuIGJlCiAgLy8vIGFyYml0cmFyeSBkYXRhLgogIC8vLwogIC8vLyBNZXNzYWdlIGhhbmRsZXJzIG11c3QgY2FsbCB0aGUgZnVuY3Rpb24gZ2l2ZW4gaW4gdGhlIGBjYWxsYmFja2AgcGFyYW1ldGVyLgogIC8vLyBJZiB0aGUgaGFuZGxlciBkb2VzIG5vdCBuZWVkIHRvIHJlc3BvbmQsIHRoZSBoYW5kbGVyIHNob3VsZCBwYXNzIG51bGwgdG8KICAvLy8gdGhlIGNhbGxiYWNrLgogIC8vLwogIC8vLyBUaGUgZnJhbWV3b3JrIGludm9rZXMgdGhpcyBjYWxsYmFjayBpbiB0aGUgc2FtZSB6b25lIGluIHdoaWNoIHRoZQogIC8vLyBjYWxsYmFjayB3YXMgc2V0LgogIFBsYXRmb3JtTWVzc2FnZUNhbGxiYWNrIGdldCBvblBsYXRmb3JtTWVzc2FnZSA9PiBfb25QbGF0Zm9ybU1lc3NhZ2U7CiAgUGxhdGZvcm1NZXNzYWdlQ2FsbGJhY2sgX29uUGxhdGZvcm1NZXNzYWdlOwogIFpvbmUgX29uUGxhdGZvcm1NZXNzYWdlWm9uZTsKICBzZXQgb25QbGF0Zm9ybU1lc3NhZ2UoUGxhdGZvcm1NZXNzYWdlQ2FsbGJhY2sgY2FsbGJhY2spIHsKICAgIF9vblBsYXRmb3JtTWVzc2FnZSA9IGNhbGxiYWNrOwogICAgX29uUGxhdGZvcm1NZXNzYWdlWm9uZSA9IFpvbmUuY3VycmVudDsKICB9CgogIC8vLyBDYWxsZWQgYnkgW19kaXNwYXRjaFBsYXRmb3JtTWVzc2FnZV0uCiAgdm9pZCBfcmVzcG9uZFRvUGxhdGZvcm1NZXNzYWdlKGludCByZXNwb25zZUlkLCBCeXRlRGF0YSBkYXRhKQogICAgICBuYXRpdmUgJ1dpbmRvd19yZXNwb25kVG9QbGF0Zm9ybU1lc3NhZ2UnOwoKICAvLy8gV3JhcHMgdGhlIGdpdmVuIFtjYWxsYmFja10gaW4gYW5vdGhlciBjYWxsYmFjayB0aGF0IGVuc3VyZXMgdGhhdCB0aGUKICAvLy8gb3JpZ2luYWwgY2FsbGJhY2sgaXMgY2FsbGVkIGluIHRoZSB6b25lIGl0IHdhcyByZWdpc3RlcmVkIGluLgogIHN0YXRpYyBQbGF0Zm9ybU1lc3NhZ2VSZXNwb25zZUNhbGxiYWNrIF96b25lZFBsYXRmb3JtTWVzc2FnZVJlc3BvbnNlQ2FsbGJhY2soUGxhdGZvcm1NZXNzYWdlUmVzcG9uc2VDYWxsYmFjayBjYWxsYmFjaykgewogICAgaWYgKGNhbGxiYWNrID09IG51bGwpCiAgICAgIHJldHVybiBudWxsOwoKICAgIC8vIFN0b3JlIHRoZSB6b25lIGluIHdoaWNoIHRoZSBjYWxsYmFjayBpcyBiZWluZyByZWdpc3RlcmVkLgogICAgZmluYWwgWm9uZSByZWdpc3RyYXRpb25ab25lID0gWm9uZS5jdXJyZW50OwoKICAgIHJldHVybiAoQnl0ZURhdGEgZGF0YSkgewogICAgICByZWdpc3RyYXRpb25ab25lLnJ1blVuYXJ5R3VhcmRlZChjYWxsYmFjaywgZGF0YSk7CiAgICB9OwogIH0KCgogIC8vLyBUaGUgZW1iZWRkZXIgY2FuIHNwZWNpZnkgZGF0YSB0aGF0IHRoZSBpc29sYXRlIGNhbiByZXF1ZXN0IHN5bmNocm9ub3VzbHkKICAvLy8gb24gbGF1bmNoLiBUaGlzIGFjY2Vzc29yIGZldGNoZXMgdGhhdCBkYXRhLgogIC8vLwogIC8vLyBUaGlzIGRhdGEgaXMgcGVyc2lzdGVudCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBGbHV0dGVyIGFwcGxpY2F0aW9uIGFuZCBpcwogIC8vLyBhdmFpbGFibGUgZXZlbiBhZnRlciBpc29sYXRlIHJlc3RhcnRzLiBCZWNhdXNlIG9mIHRoaXMgbGlmZWN5Y2xlLCB0aGUgc2l6ZQogIC8vLyBvZiB0aGlzIGRhdGEgbXVzdCBiZSBrZXB0IHRvIGEgbWluaW11bS4KICAvLy8KICAvLy8gRm9yIGFzeW5jaHJvbm91cyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIGVtYmVkZGVyIGFuZCBpc29sYXRlLCBhCiAgLy8vIHBsYXRmb3JtIGNoYW5uZWwgbWF5IGJlIHVzZWQuCiAgQnl0ZURhdGEgZ2V0UGVyc2lzdGVudElzb2xhdGVEYXRhKCkgbmF0aXZlICdXaW5kb3dfZ2V0UGVyc2lzdGVudElzb2xhdGVEYXRhJzsKfQoKLy8vIEFkZGl0aW9uYWwgYWNjZXNzaWJpbGl0eSBmZWF0dXJlcyB0aGF0IG1heSBiZSBlbmFibGVkIGJ5IHRoZSBwbGF0Zm9ybS4KLy8vCi8vLyBJdCBpcyBub3QgcG9zc2libGUgdG8gZW5hYmxlIHRoZXNlIHNldHRpbmdzIGZyb20gRmx1dHRlciwgaW5zdGVhZCB0aGV5IGFyZQovLy8gdXNlZCBieSB0aGUgcGxhdGZvcm0gdG8gaW5kaWNhdGUgdGhhdCBhZGRpdGlvbmFsIGFjY2Vzc2liaWxpdHkgZmVhdHVyZXMgYXJlCi8vLyBlbmFibGVkLgovLwovLyBXaGVuIGNoYW5nZXMgYXJlIG1hZGUgdG8gdGhpcyBjbGFzcywgdGhlIGVxdWl2YWxlbnQgQVBJcyBpbiBlYWNoIG9mIHRoZQovLyBlbWJlZGRlcnMgKm11c3QqIGJlIHVwZGF0ZWQuCmNsYXNzIEFjY2Vzc2liaWxpdHlGZWF0dXJlcyB7CiAgY29uc3QgQWNjZXNzaWJpbGl0eUZlYXR1cmVzLl8odGhpcy5faW5kZXgpOwoKICBzdGF0aWMgY29uc3QgaW50IF9rQWNjZXNzaWJsZU5hdmlnYXRpb24gPSAxIDw8IDA7CiAgc3RhdGljIGNvbnN0IGludCBfa0ludmVydENvbG9yc0luZGV4ID0gMSA8PCAxOwogIHN0YXRpYyBjb25zdCBpbnQgX2tEaXNhYmxlQW5pbWF0aW9uc0luZGV4ID0gMSA8PCAyOwogIHN0YXRpYyBjb25zdCBpbnQgX2tCb2xkVGV4dEluZGV4ID0gMSA8PCAzOwogIHN0YXRpYyBjb25zdCBpbnQgX2tSZWR1Y2VNb3Rpb25JbmRleCA9IDEgPDwgNDsKCiAgLy8gQSBiaXRmaWVsZCB3aGljaCByZXByZXNlbnRzIGVhY2ggZW5hYmxlZCBmZWF0dXJlLgogIGZpbmFsIGludCBfaW5kZXg7CgogIC8vLyBXaGV0aGVyIHRoZXJlIGlzIGEgcnVubmluZyBhY2Nlc3NpYmlsaXR5IHNlcnZpY2Ugd2hpY2ggaXMgY2hhbmdpbmcgdGhlCiAgLy8vIGludGVyYWN0aW9uIG1vZGVsIG9mIHRoZSBkZXZpY2UuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCBUYWxrQmFjayBvbiBBbmRyb2lkIGFuZCBWb2ljZU92ZXIgb24gaU9TIGVuYWJsZSB0aGlzIGZsYWcuCiAgYm9vbCBnZXQgYWNjZXNzaWJsZU5hdmlnYXRpb24gPT4gX2tBY2Nlc3NpYmxlTmF2aWdhdGlvbiAmIF9pbmRleCAhPSAwOwoKICAvLy8gVGhlIHBsYXRmb3JtIGlzIGludmVydGluZyB0aGUgY29sb3JzIG9mIHRoZSBhcHBsaWNhdGlvbi4KICBib29sIGdldCBpbnZlcnRDb2xvcnMgPT4gX2tJbnZlcnRDb2xvcnNJbmRleCAmIF9pbmRleCAhPSAwOwoKICAvLy8gVGhlIHBsYXRmb3JtIGlzIHJlcXVlc3RpbmcgdGhhdCBhbmltYXRpb25zIGJlIGRpc2FibGVkIG9yIHNpbXBsaWZpZWQuCiAgYm9vbCBnZXQgZGlzYWJsZUFuaW1hdGlvbnMgPT4gX2tEaXNhYmxlQW5pbWF0aW9uc0luZGV4ICYgX2luZGV4ICE9IDA7CgogIC8vLyBUaGUgcGxhdGZvcm0gaXMgcmVxdWVzdGluZyB0aGF0IHRleHQgYmUgcmVuZGVyZWQgYXQgYSBib2xkIGZvbnQgd2VpZ2h0LgogIC8vLwogIC8vLyBPbmx5IHN1cHBvcnRlZCBvbiBpT1MuCiAgYm9vbCBnZXQgYm9sZFRleHQgPT4gX2tCb2xkVGV4dEluZGV4ICYgX2luZGV4ICE9IDA7CgogIC8vLyBUaGUgcGxhdGZvcm0gaXMgcmVxdWVzdGluZyB0aGF0IGNlcnRhaW4gYW5pbWF0aW9ucyBiZSBzaW1wbGlmaWVkIGFuZAogIC8vLyBwYXJhbGxheCBlZmZlY3RzIHJlbW92ZWQuCiAgLy8vCiAgLy8vIE9ubHkgc3VwcG9ydGVkIG9uIGlPUy4KICBib29sIGdldCByZWR1Y2VNb3Rpb24gPT4gX2tSZWR1Y2VNb3Rpb25JbmRleCAmIF9pbmRleCAhPSAwOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBmaW5hbCBMaXN0PFN0cmluZz4gZmVhdHVyZXMgPSA8U3RyaW5nPltdOwogICAgaWYgKGFjY2Vzc2libGVOYXZpZ2F0aW9uKQogICAgICBmZWF0dXJlcy5hZGQoJ2FjY2Vzc2libGVOYXZpZ2F0aW9uJyk7CiAgICBpZiAoaW52ZXJ0Q29sb3JzKQogICAgICBmZWF0dXJlcy5hZGQoJ2ludmVydENvbG9ycycpOwogICAgaWYgKGRpc2FibGVBbmltYXRpb25zKQogICAgICBmZWF0dXJlcy5hZGQoJ2Rpc2FibGVBbmltYXRpb25zJyk7CiAgICBpZiAoYm9sZFRleHQpCiAgICAgIGZlYXR1cmVzLmFkZCgnYm9sZFRleHQnKTsKICAgIGlmIChyZWR1Y2VNb3Rpb24pCiAgICAgIGZlYXR1cmVzLmFkZCgncmVkdWNlTW90aW9uJyk7CiAgICByZXR1cm4gJ0FjY2Vzc2liaWxpdHlGZWF0dXJlcyRmZWF0dXJlcyc7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KGR5bmFtaWMgb3RoZXIpIHsKICAgIGlmIChvdGhlci5ydW50aW1lVHlwZSAhPSBydW50aW1lVHlwZSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIG90aGVyIGlzIEFjY2Vzc2liaWxpdHlGZWF0dXJlcwogICAgICAgICYmIG90aGVyLl9pbmRleCA9PSBfaW5kZXg7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IF9pbmRleC5oYXNoQ29kZTsKfQoKLy8vIERlc2NyaWJlcyB0aGUgY29udHJhc3Qgb2YgYSB0aGVtZSBvciBjb2xvciBwYWxldHRlLgplbnVtIEJyaWdodG5lc3MgewogIC8vLyBUaGUgY29sb3IgaXMgZGFyayBhbmQgd2lsbCByZXF1aXJlIGEgbGlnaHQgdGV4dCBjb2xvciB0byBhY2hpZXZlIHJlYWRhYmxlCiAgLy8vIGNvbnRyYXN0LgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSwgdGhlIGNvbG9yIG1pZ2h0IGJlIGRhcmsgZ3JleSwgcmVxdWlyaW5nIHdoaXRlIHRleHQuCiAgZGFyaywKCiAgLy8vIFRoZSBjb2xvciBpcyBsaWdodCBhbmQgd2lsbCByZXF1aXJlIGEgZGFyayB0ZXh0IGNvbG9yIHRvIGFjaGlldmUgcmVhZGFibGUKICAvLy8gY29udHJhc3QuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCB0aGUgY29sb3IgbWlnaHQgYmUgYnJpZ2h0IHdoaXRlLCByZXF1aXJpbmcgYmxhY2sgdGV4dC4KICBsaWdodCwKfQoKLy8vIFRoZSBbV2luZG93XSBzaW5nbGV0b24uCi8vLwovLy8gUGxlYXNlIHRyeSB0byBhdm9pZCBzdGF0aWNhbGx5IHJlZmVyZW5jaW5nIHRoaXMgYW5kIGluc3RlYWQgdXNlIGEKLy8vIGJpbmRpbmcgZm9yIGRlcGVuZGVuY3kgcmVzb2x1dGlvbiBzdWNoIGFzIGBXaWRnZXRzQmluZGluZy5pbnN0YW5jZS53aW5kb3dgLgovLy8KLy8vIFN0YXRpYyBhY2Nlc3Mgb2YgdGhpcyAid2luZG93IiBvYmplY3QgbWVhbnMgdGhhdCBGbHV0dGVyIGhhcyBmZXcsIGlmIGFueQovLy8gb3B0aW9u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UVEuBkkkUAIBSwRPUA0DSyAeLgE0MTYtMQE3FAFNJwZOSQE/PgFMSAFOBh02AUsgBh0+AQwWLh4sFiQbKRIgFiQtBAEMJCoUKiMEAQwnAgE4ElAQBkcIAVAQBkoJAgEcBEZQBE1QTU5PKwRQS0MiARNkYXJ0OnVpL3dpbmRvdy5kYXJ0M29yZy1kYXJ0bGFuZy1zZGs6Ly8vZmx1dHRlci9saWIvdWkvY29tcG9zaXRpbmcuZGFydMAAevEvLyBDb3B5cmlnaHQgMjAxMyBUaGUgRmx1dHRlciBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgovLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQudWk7CgovLy8gQW4gb3BhcXVlIG9iamVjdCByZXByZXNlbnRpbmcgYSBjb21wb3NpdGVkIHNjZW5lLgovLy8KLy8vIFRvIGNyZWF0ZSBhIFNjZW5lIG9iamVjdCwgdXNlIGEgW1NjZW5lQnVpbGRlcl0uCi8vLwovLy8gU2NlbmUgb2JqZWN0cyBjYW4gYmUgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4gdXNpbmcgdGhlCi8vLyBbV2luZG93LnJlbmRlcl0gbWV0aG9kLgpAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCmNsYXNzIFNjZW5lIGV4dGVuZHMgTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MyIHsKICAvLy8gVGhpcyBjbGFzcyBpcyBjcmVhdGVkIGJ5IHRoZSBlbmdpbmUsIGFuZCBzaG91bGQgbm90IGJlIGluc3RhbnRpYXRlZAogIC8vLyBvciBleHRlbmRlZCBkaXJlY3RseS4KICAvLy8KICAvLy8gVG8gY3JlYXRlIGEgU2NlbmUgb2JqZWN0LCB1c2UgYSBbU2NlbmVCdWlsZGVyXS4KICBAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCiAgU2NlbmUuXygpOwoKICAvLy8gQ3JlYXRlcyBhIHJhc3RlciBpbWFnZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc2NlbmUuCiAgLy8vIFRoaXMgaXMgYSBzbG93IG9wZXJhdGlvbiB0aGF0IGlzIHBlcmZvcm1lZCBvbiBhIGJhY2tncm91bmQgdGhyZWFkLgogIEZ1dHVyZTxJbWFnZT4gdG9JbWFnZShpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKSB7CiAgICAgIHRocm93IEV4Y2VwdGlvbignSW52YWxpZCBpbWFnZSBkaW1lbnNpb25zLicpOwogICAgfQogICAgcmV0dXJuIF9mdXR1cml6ZSgoX0NhbGxiYWNrPEltYWdlPiBjYWxsYmFjaykgPT4gX3RvSW1hZ2Uod2lkdGgsIGhlaWdodCwgY2FsbGJhY2spKTsKICB9CgogIFN0cmluZyBfdG9JbWFnZShpbnQgd2lkdGgsIGludCBoZWlnaHQsIF9DYWxsYmFjazxJbWFnZT4gY2FsbGJhY2spIG5hdGl2ZSAnU2NlbmVfdG9JbWFnZSc7CgogIC8vLyBSZWxlYXNlcyB0aGUgcmVzb3VyY2VzIHVzZWQgYnkgdGhpcyBzY2VuZS4KICAvLy8KICAvLy8gQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB0aGUgc2NlbmUgaXMgY2Fubm90IGJlIHVzZWQgZnVydGhlci4KICB2b2lkIGRpc3Bvc2UoKSBuYXRpdmUgJ1NjZW5lX2Rpc3Bvc2UnOwp9CgovLyBMaWdodHdlaWdodCB3cmFwcGVyIG9mIGEgbmF0aXZlIGxheWVyIG9iamVjdC4KLy8KLy8gVGhpcyBpcyB1c2VkIHRvIHByb3ZpZGUgYSB0eXBlZCBBUEkgZm9yIGVuZ2luZSBsYXllcnMgdG8gcHJldmVudAovLyBpbmNvbXBhdGlibGUgbGF5ZXJzIGZyb20gYmVpbmcgcGFzc2VkIHRvIFtTY2VuZUJ1aWxkZXJdJ3MgcHVzaCBtZXRob2RzLgovLyBGb3IgZXhhbXBsZSwgdGhpcyBwcmV2ZW50cyBhIGxheWVyIHJldHVybmVkIGZyb20gYHB1c2hPcGFjaXR5YCBmcm9tIGJlaW5nCi8vIHBhc3NlZCBhcyBgb2xkTGF5ZXJgIHRvIGBwdXNoVHJhbnNmb3JtYC4gVGhpcyBpcyBhY2hpZXZlZCBieSBoYXZpbmcgb25lCi8vIGNvbmNyZXRlIHN1YmNsYXNzIG9mIHRoaXMgY2xhc3MgcGVyIHB1c2ggbWV0aG9kLgphYnN0cmFjdCBjbGFzcyBfRW5naW5lTGF5ZXJXcmFwcGVyIGltcGxlbWVudHMgRW5naW5lTGF5ZXIgewogIF9FbmdpbmVMYXllcldyYXBwZXIuXyh0aGlzLl9uYXRpdmVMYXllcik7CgogIEVuZ2luZUxheWVyIF9uYXRpdmVMYXllcjsKCiAgLy8gQ2hpbGRyZW4gb2YgdGhpcyBsYXllci4KICAvLwogIC8vIE51bGwgaWYgdGhpcyBsYXllciBoYXMgbm8gY2hpbGRyZW4uIFRoaXMgZmllbGQgaXMgcG9wdWxhdGVkIG9ubHkgaW4gZGVidWcKICAvLyBtb2RlLgogIExpc3Q8X0VuZ2luZUxheWVyV3JhcHBlcj4gX2RlYnVnQ2hpbGRyZW47CgogIC8vIFdoZXRoZXIgdGhpcyBsYXllciB3YXMgdXNlZCBhcyBgb2xkTGF5ZXJgIGluIGEgcGFzdCBmcmFtZS4KICAvLwogIC8vIEl0IGlzIGlsbGVnYWwgdG8gdXNlIGEgbGF5ZXIgb2JqZWN0IGFnYWluIGFmdGVyIGl0IGlzIHBhc3NlZCBhcyBhbgogIC8vIGBvbGRMYXllcmAgYXJndW1lbnQuCiAgYm9vbCBfZGVidWdXYXNVc2VkQXNPbGRMYXllciA9IGZhbHNlOwoKICBib29sIF9kZWJ1Z0NoZWNrTm90VXNlZEFzT2xkTGF5ZXIoKSB7CiAgICBhc3NlcnQoCiAgICAgICAgIV9kZWJ1Z1dhc1VzZWRBc09sZExheWVyLAogICAgICAgICdMYXllciAkcnVudGltZVR5cGUgd2FzIHByZXZpb3VzbHkgdXNlZCBhcyBvbGRMYXllci5cbicKICAgICAgICAnT25jZSBhIGxheWVyIGlzIHVzZWQgYXMgb2xkTGF5ZXIsIGl0IG1heSBub3QgYmUgdXNlZCBhZ2Fpbi4gSW5zdGVhZCwgJwogICAgICAgICdhZnRlciBjYWxsaW5nIG9uZSBvZiB0aGUgU2NlbmVCdWlsZGVyLnB1c2gqIG1ldGhvZHMgYW5kIHBhc3NpbmcgYW4gb2xkTGF5ZXIgJwogICAgICAgICd0byBpdCwgdXNlIHRoZSBsYXllciByZXR1cm5lZCBieSB0aGUgbWV0aG9kIGFzIG9sZExheWVyIGluIHN1YnNlcXVlbnQgJwogICAgICAgICdmcmFtZXMuJyk7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCi8vLyBBbiBvcGFxdWUgaGFuZGxlIHRvIGEgdHJhbnNmb3JtIGVuZ2luZSBsYXllci4KLy8vCi8vLyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBhcmUgY3JlYXRlZCBieSBbU2NlbmVCdWlsZGVyLnB1c2hUcmFuc2Zvcm1dLgovLy8KLy8vIHtAdGVtcGxhdGUgZGFydC51aS5zY2VuZUJ1aWxkZXIub2xkTGF5ZXJDb21wYXRpYmlsaXR5fQovLy8gYG9sZExheWVyYCBwYXJhbWV0ZXIgaW4gW1NjZW5lQnVpbGRlcl0gbWV0aG9kcyBvbmx5IGFjY2VwdHMgb2JqZWN0cyBjcmVhdGVkCi8vLyBieSB0aGUgZW5naW5lLiBbU2NlbmVCdWlsZGVyXSB3aWxsIHRocm93IGFuIFtBc3NlcnRpb25FcnJvcl0gaWYgeW91IHBhc3MgaXQKLy8vIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgY2xhc3MuCi8vLyB7QGVuZHRlbXBsYXRlfQpjbGFzcyBUcmFuc2Zvcm1FbmdpbmVMYXllciBleHRlbmRzIF9FbmdpbmVMYXllcldyYXBwZXIgewogIFRyYW5zZm9ybUVuZ2luZUxheWVyLl8oRW5naW5lTGF5ZXIgbmF0aXZlTGF5ZXIpIDogc3VwZXIuXyhuYXRpdmVMYXllcik7Cn0KCi8vLyBBbiBvcGFxdWUgaGFuZGxlIHRvIGFuIG9mZnNldCBlbmdpbmUgbGF5ZXIuCi8vLwovLy8gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgYXJlIGNyZWF0ZWQgYnkgW1NjZW5lQnVpbGRlci5wdXNoT2Zmc2V0XS4KLy8vCi8vLyB7QG1hY3JvIGRhcnQudWkuc2NlbmVCdWlsZGVyLm9sZExheWVyQ29tcGF0aWJpbGl0eX0KY2xhc3MgT2Zmc2V0RW5naW5lTGF5ZXIgZXh0ZW5kcyBfRW5naW5lTGF5ZXJXcmFwcGVyIHsKICBPZmZzZXRFbmdpbmVMYXllci5fKEVuZ2luZUxheWVyIG5hdGl2ZUxheWVyKSA6IHN1cGVyLl8obmF0aXZlTGF5ZXIpOwp9CgovLy8gQW4gb3BhcXVlIGhhbmRsZSB0byBhIGNsaXAgcmVjdCBlbmdpbmUgbGF5ZXIuCi8vLwovLy8gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgYXJlIGNyZWF0ZWQgYnkgW1NjZW5lQnVpbGRlci5wdXNoQ2xpcFJlY3RdLgovLy8KLy8vIHtAbWFjcm8gZGFydC51aS5zY2VuZUJ1aWxkZXIub2xkTGF5ZXJDb21wYXRpYmlsaXR5fQpjbGFzcyBDbGlwUmVjdEVuZ2luZUxheWVyIGV4dGVuZHMgX0VuZ2luZUxheWVyV3JhcHBlciB7CiAgQ2xpcFJlY3RFbmdpbmVMYXllci5fKEVuZ2luZUxheWVyIG5hdGl2ZUxheWVyKSA6IHN1cGVyLl8obmF0aXZlTGF5ZXIpOwp9CgovLy8gQW4gb3BhcXVlIGhhbmRsZSB0byBhIGNsaXAgcm91bmRlZCByZWN0IGVuZ2luZSBsYXllci4KLy8vCi8vLyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBhcmUgY3JlYXRlZCBieSBbU2NlbmVCdWlsZGVyLnB1c2hDbGlwUlJlY3RdLgovLy8KLy8vIHtAbWFjcm8gZGFydC51aS5zY2VuZUJ1aWxkZXIub2xkTGF5ZXJDb21wYXRpYmlsaXR5fQpjbGFzcyBDbGlwUlJlY3RFbmdpbmVMYXllciBleHRlbmRzIF9FbmdpbmVMYXllcldyYXBwZXIgewogIENsaXBSUmVjdEVuZ2luZUxheWVyLl8oRW5naW5lTGF5ZXIgbmF0aXZlTGF5ZXIpIDogc3VwZXIuXyhuYXRpdmVMYXllcik7Cn0KCi8vLyBBbiBvcGFxdWUgaGFuZGxlIHRvIGEgY2xpcCBwYXRoIGVuZ2luZSBsYXllci4KLy8vCi8vLyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBhcmUgY3JlYXRlZCBieSBbU2NlbmVCdWlsZGVyLnB1c2hDbGlwUGF0aF0uCi8vLwovLy8ge0BtYWNybyBkYXJ0LnVpLnNjZW5lQnVpbGRlci5vbGRMYXllckNvbXBhdGliaWxpdHl9CmNsYXNzIENsaXBQYXRoRW5naW5lTGF5ZXIgZXh0ZW5kcyBfRW5naW5lTGF5ZXJXcmFwcGVyIHsKICBDbGlwUGF0aEVuZ2luZUxheWVyLl8oRW5naW5lTGF5ZXIgbmF0aXZlTGF5ZXIpIDogc3VwZXIuXyhuYXRpdmVMYXllcik7Cn0KCi8vLyBBbiBvcGFxdWUgaGFuZGxlIHRvIGFuIG9wYWNpdHkgZW5naW5lIGxheWVyLgovLy8KLy8vIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZSBjcmVhdGVkIGJ5IFtTY2VuZUJ1aWxkZXIucHVzaE9wYWNpdHldLgovLy8KLy8vIHtAbWFjcm8gZGFydC51aS5zY2VuZUJ1aWxkZXIub2xkTGF5ZXJDb21wYXRpYmlsaXR5fQpjbGFzcyBPcGFjaXR5RW5naW5lTGF5ZXIgZXh0ZW5kcyBfRW5naW5lTGF5ZXJXcmFwcGVyIHsKICBPcGFjaXR5RW5naW5lTGF5ZXIuXyhFbmdpbmVMYXllciBuYXRpdmVMYXllcikgOiBzdXBlci5fKG5hdGl2ZUxheWVyKTsKfQoKLy8vIEFuIG9wYXF1ZSBoYW5kbGUgdG8gYSBjb2xvciBmaWx0ZXIgZW5naW5lIGxheWVyLgovLy8KLy8vIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZSBjcmVhdGVkIGJ5IFtTY2VuZUJ1aWxkZXIucHVzaENvbG9yRmlsdGVyXS4KLy8vCi8vLyB7QG1hY3JvIGRhcnQudWkuc2NlbmVCdWlsZGVyLm9sZExheWVyQ29tcGF0aWJpbGl0eX0KY2xhc3MgQ29sb3JGaWx0ZXJFbmdpbmVMYXllciBleHRlbmRzIF9FbmdpbmVMYXllcldyYXBwZXIgewogIENvbG9yRmlsdGVyRW5naW5lTGF5ZXIuXyhFbmdpbmVMYXllciBuYXRpdmVMYXllcikgOiBzdXBlci5fKG5hdGl2ZUxheWVyKTsKfQoKLy8vIEFuIG9wYXF1ZSBoYW5kbGUgdG8gYW4gaW1hZ2UgZmlsdGVyIGVuZ2luZSBsYXllci4KLy8vCi8vLyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBhcmUgY3JlYXRlZCBieSBbU2NlbmVCdWlsZGVyLnB1c2hJbWFnZUZpbHRlcl0uCi8vLwovLy8ge0BtYWNybyBkYXJ0LnVpLnNjZW5lQnVpbGRlci5vbGRMYXllckNvbXBhdGliaWxpdHl9CmNsYXNzIEltYWdlRmlsdGVyRW5naW5lTGF5ZXIgZXh0ZW5kcyBfRW5naW5lTGF5ZXJXcmFwcGVyIHsKICBJbWFnZUZpbHRlckVuZ2luZUxheWVyLl8oRW5naW5lTGF5ZXIgbmF0aXZlTGF5ZXIpIDogc3VwZXIuXyhuYXRpdmVMYXllcik7Cn0KCi8vLyBBbiBvcGFxdWUgaGFuZGxlIHRvIGEgYmFja2Ryb3AgZmlsdGVyIGVuZ2luZSBsYXllci4KLy8vCi8vLyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBhcmUgY3JlYXRlZCBieSBbU2NlbmVCdWlsZGVyLnB1c2hCYWNrZHJvcEZpbHRlcl0uCi8vLwovLy8ge0BtYWNybyBkYXJ0LnVpLnNjZW5lQnVpbGRlci5vbGRMYXllckNvbXBhdGliaWxpdHl9CmNsYXNzIEJhY2tkcm9wRmlsdGVyRW5naW5lTGF5ZXIgZXh0ZW5kcyBfRW5naW5lTGF5ZXJXcmFwcGVyIHsKICBCYWNrZHJvcEZpbHRlckVuZ2luZUxheWVyLl8oRW5naW5lTGF5ZXIgbmF0aXZlTGF5ZXIpIDogc3VwZXIuXyhuYXRpdmVMYXllcik7Cn0KCi8vLyBBbiBvcGFxdWUgaGFuZGxlIHRvIGEgc2hhZGVyIG1hc2sgZW5naW5lIGxheWVyLgovLy8KLy8vIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZSBjcmVhdGVkIGJ5IFtTY2VuZUJ1aWxkZXIucHVzaFNoYWRlck1hc2tdLgovLy8KLy8vIHtAbWFjcm8gZGFydC51aS5zY2VuZUJ1aWxkZXIub2xkTGF5ZXJDb21wYXRpYmlsaXR5fQpjbGFzcyBTaGFkZXJNYXNrRW5naW5lTGF5ZXIgZXh0ZW5kcyBfRW5naW5lTGF5ZXJXcmFwcGVyIHsKICBTaGFkZXJNYXNrRW5naW5lTGF5ZXIuXyhFbmdpbmVMYXllciBuYXRpdmVMYXllcikgOiBzdXBlci5fKG5hdGl2ZUxheWVyKTsKfQoKLy8vIEFuIG9wYXF1ZSBoYW5kbGUgdG8gYSBwaHlzaWNhbCBzaGFwZSBlbmdpbmUgbGF5ZXIuCi8vLwovLy8gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgYXJlIGNyZWF0ZWQgYnkgW1NjZW5lQnVpbGRlci5wdXNoUGh5c2ljYWxTaGFwZV0uCi8vLwovLy8ge0BtYWNybyBkYXJ0LnVpLnNjZW5lQnVpbGRlci5vbGRMYXllckNvbXBhdGliaWxpdHl9CmNsYXNzIFBoeXNpY2FsU2hhcGVFbmdpbmVMYXllciBleHRlbmRzIF9FbmdpbmVMYXllcldyYXBwZXIgewogIFBoeXNpY2FsU2hhcGVFbmdpbmVMYXllci5fKEVuZ2luZUxheWVyIG5hdGl2ZUxheWVyKSA6IHN1cGVyLl8obmF0aXZlTGF5ZXIpOwp9CgovLy8gQnVpbGRzIGEgW1NjZW5lXSBjb250YWluaW5nIHRoZSBnaXZlbiB2aXN1YWxzLgovLy8KLy8vIEEgW1NjZW5lXSBjYW4gdGhlbiBiZSByZW5kZXJlZCB1c2luZyBbV2luZG93LnJlbmRlcl0uCi8vLwovLy8gVG8gZHJhdyBncmFwaGljYWwgb3BlcmF0aW9ucyBvbnRvIGEgW1NjZW5lXSwgZmlyc3QgY3JlYXRlIGEKLy8vIFtQaWN0dXJlXSB1c2luZyBhIFtQaWN0dXJlUmVjb3JkZXJdIGFuZCBhIFtDYW52YXNdLCBhbmQgdGhlbiBhZGQKLy8vIGl0IHRvIHRoZSBzY2VuZSB1c2luZyBbYWRkUGljdHVyZV0uCmNsYXNzIFNjZW5lQnVpbGRlciBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMiB7CiAgLy8vIENyZWF0ZXMgYW4gZW1wdHkgW1NjZW5lQnVpbGRlcl0gb2JqZWN0LgogIEBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKICBTY2VuZUJ1aWxkZXIoKSB7CiAgICBfY29uc3RydWN0b3IoKTsKICB9CiAgdm9pZCBfY29uc3RydWN0b3IoKSBuYXRpdmUgJ1NjZW5lQnVpbGRlcl9jb25zdHJ1Y3Rvcic7CgogIC8vIExheWVycyB1c2VkIGluIHRoaXMgc2NlbmUuCiAgLy8KICAvLyBUaGUga2V5IGlzIHRoZSBsYXllciB1c2VkLiBUaGUgdmFsdWUgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhlIGxheWVyCiAgLy8gaXMgdXNlZCBmb3IsIGUuZy4gInB1c2hPcGFjaXR5IiBvciAiYWRkUmV0YWluZWQiLgogIE1hcDxFbmdpbmVMYXllciwgU3RyaW5nPiBfdXNlZExheWVycyA9IDxFbmdpbmVMYXllciwgU3RyaW5nPnt9OwoKICAvLyBJbiBkZWJ1ZyBtb2RlIGNoZWNrcyB0aGF0IHRoZSBgbGF5ZXJgIGlzIG9ubHkgdXNlZCBvbmNlIGluIGEgZ2l2ZW4gc2NlbmUuCiAgYm9vbCBfZGVidWdDaGVja1VzZWRPbmNlKEVuZ2luZUxheWVyIGxheWVyLCBTdHJpbmcgdXNhZ2UpIHsKICAgIGFzc2VydCgoKSB7CiAgICAgIGlmIChsYXllciA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KCiAgICAgIGFzc2VydCgKICAgICAgICAgICFfdXNlZExheWVycy5jb250YWluc0tleShsYXllciksCiAgICAgICAgICAnTGF5ZXIgJHtsYXllci5ydW50aW1lVHlwZX0gYWxyZWFkeSB1c2VkLlxuJwogICAgICAgICAgJ1RoZSBsYXllciBpcyBhbHJlYWR5IGJlaW5nIHVzZWQgYXMgJHtfdXNlZExheWVyc1tsYXllcl19IGluIHRoaXMgc2NlbmUuXG4nCiAgICAgICAgICAnQSBsYXllciBtYXkgb25seSBiZSB1c2VkIG9uY2UgaW4gYSBnaXZlbiBzY2VuZS4nKTsKCiAgICAgIF91c2VkTGF5ZXJzW2xheWVyXSA9IHVzYWdlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0oKSk7CgogICAgcmV0dXJuIHRydWU7CiAgfQoKICBib29sIF9kZWJ1Z0NoZWNrQ2FuQmVVc2VkQXNPbGRMYXllcihfRW5naW5lTGF5ZXJXcmFwcGVyIGxheWVyLCBTdHJpbmcgbWV0aG9kTmFtZSkgewogICAgYXNzZXJ0KCgpIHsKICAgICAgaWYgKGxheWVyID09IG51bGwpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBsYXllci5fZGVidWdDaGVja05vdFVzZWRBc09sZExheWVyKCk7CiAgICAgIGFzc2VydChfZGVidWdDaGVja1VzZWRPbmNlKGxheWVyLCAnb2xkTGF5ZXIgaW4gJG1ldGhvZE5hbWUnKSk7CiAgICAgIGxheWVyLl9kZWJ1Z1dhc1VzZWRBc09sZExheWVyID0gdHJ1ZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9KCkpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBmaW5hbCBMaXN0PF9FbmdpbmVMYXllcldyYXBwZXI+IF9sYXllclN0YWNrID0gPF9FbmdpbmVMYXllcldyYXBwZXI+W107CgogIC8vIFB1c2hlcyB0aGUgYG5ld0xheWVyYCBvbnRvIHRoZSBgX2xheWVyU3RhY2tgIGFuZCBhZGRzIGl0IHRvIHRoZQogIC8vIGBfZGVidWdDaGlsZHJlbmAgb2YgdGhlIGN1cnJlbnQgbGF5ZXIgaW4gdGhlIHN0YWNrLCBpZiBhbnkuCiAgYm9vbCBfZGVidWdQdXNoTGF5ZXIoX0VuZ2luZUxheWVyV3JhcHBlciBuZXdMYXllcikgewogICAgYXNzZXJ0KCgpIHsKICAgICAgaWYgKF9sYXllclN0YWNrLmlzTm90RW1wdHkpIHsKICAgICAgICBmaW5hbCBfRW5naW5lTGF5ZXJXcmFwcGVyIGN1cnJlbnRMYXllciA9IF9sYXllclN0YWNrLmxhc3Q7CiAgICAgICAgY3VycmVudExheWVyLl9kZWJ1Z0NoaWxkcmVuID8/PSA8X0VuZ2luZUxheWVyV3JhcHBlcj5bXTsKICAgICAgICBjdXJyZW50TGF5ZXIuX2RlYnVnQ2hpbGRyZW4uYWRkKG5ld0xheWVyKTsKICAgICAgfQogICAgICBfbGF5ZXJTdGFjay5hZGQobmV3TGF5ZXIpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0oKSk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vLyBQdXNoZXMgYSB0cmFuc2Zvcm0gb3BlcmF0aW9uIG9udG8gdGhlIG9wZXJhdGlvbiBzdGFjay4KICAvLy8KICAvLy8gVGhlIG9iamVjdHMgYXJlIHRyYW5zZm9ybWVkIGJ5IHRoZSBnaXZlbiBtYXRyaXggYmVmb3JlIHJhc3Rlcml6YXRpb24uCiAgLy8vCiAgLy8vIHtAdGVtcGxhdGUgZGFydC51aS5zY2VuZUJ1aWxkZXIub2xkTGF5ZXJ9CiAgLy8vIElmIGBvbGRMYXllcmAgaXMgbm90IG51bGwgdGhlIGVuZ2luZSB3aWxsIGF0dGVtcHQgdG8gcmV1c2UgdGhlIHJlc291cmNlcwogIC8vLyBhbGxvY2F0ZWQgZm9yIHRoZSBvbGQgbGF5ZXIgd2hlbiByZW5kZXJpbmcgdGhlIG5ldyBsYXllci4gVGhpcyBpcyBwdXJlbHkKICAvLy8gYW4gb3B0aW1pemF0aW9uLiBJdCBoYXMgbm8gZWZmZWN0IG9uIHRoZSBjb3JyZWN0bmVzcyBvZiByZW5kZXJpbmcuCiAgLy8vIHtAZW5kdGVtcGxhdGV9CiAgLy8vCiAgLy8vIHtAdGVtcGxhdGUgZGFydC51aS5zY2VuZUJ1aWxkZXIub2xkTGF5ZXJWc1JldGFpbmVkfQogIC8vLyBQYXNzaW5nIGEgbGF5ZXIgdG8gW2FkZFJldGFpbmVkXSBvciBhcyBgb2xkTGF5ZXJgIGFyZ3VtZW50IHRvIGEgcHVzaAogIC8vLyBtZXRob2QgY291bnRzIGFzIF91c2FnZV8uIEEgbGF5ZXIgY2FuIGJlIHVzZWQgbm8gbW9yZSB0aGFuIG9uY2UgaW4gYSBzY2VuZS4KICAvLy8gRm9yIGV4YW1wbGUsIGl0IG1heSBub3QgYmUgcGFzc2VkIHNpbXVsdGFuZW91c2x5IHRvIHR3byBwdXNoIG1ldGhvZHMsIG9yCiAgLy8vIHRvIGEgcHVzaCBtZXRob2QgYW5kIHRvIGBhZGRSZXRhaW5lZGAuCiAgLy8vCiAgLy8vIFdoZW4gYSBsYXllciBpcyBwYXNzZWQgdG8gW2FkZFJldGFpbmVkXSBhbGwgZGVzY2VuZGFudCBsYXllcnMgYXJlIGFsc28KICAvLy8gY29uc2lkZXJlZCBhcyB1c2VkIGluIHRoaXMgc2NlbmUuIFRoZSBzYW1lIHNpbmdsZS11c2FnZSByZXN0cmljdGlvbgogIC8vLyBhcHBsaWVzIHRvIGRlc2NlbmRhbnRzLgogIC8vLwogIC8vLyBXaGVuIGEgbGF5ZXIgaXMgcGFzc2VkIGFzIGFuIGBvbGRMYXllcmAgYXJndW1lbnQgdG8gYSBwdXNoIG1ldGhvZCwgaXQgbWF5CiAgLy8vIG5vIGxvbmdlciBiZSB1c2VkIGluIHN1YnNlcXVlbnQgZnJhbWVzLiBJZiB5b3Ugd291bGQgbGlrZSB0byBjb250aW51ZQogIC8vLyByZXVzaW5nIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBsYXllciwgc3RvcmUgdGhlIGxheWVyIG9iamVjdAogIC8vLyByZXR1cm5lZCBieSB0aGUgcHVzaCBtZXRob2QgYW5kIHVzZSB0aGF0IGluIHRoZSBuZXh0IGZyYW1lIGluc3RlYWQgb2YgdGhlCiAgLy8vIG9yaWdpbmFsIG9iamVjdC4KICAvLy8ge0BlbmR0ZW1wbGF0ZX0KICAvLy8KICAvLy8gU2VlIFtwb3BdIGZvciBkZXRhaWxzIGFib3V0IHRoZSBvcGVyYXRpb24gc3RhY2suCiAgVHJhbnNmb3JtRW5naW5lTGF5ZXIgcHVzaFRyYW5zZm9ybSgKICAgIEZsb2F0NjRMaXN0IG1hdHJpeDQsIHsKICAgIFRyYW5zZm9ybUVuZ2luZUxheWVyIG9sZExheWVyLAogIH0pIHsKICAgIGFzc2VydChfbWF0cml4NElzVmFsaWQobWF0cml4NCkpOwogICAgYXNzZXJ0KF9kZWJ1Z0NoZWNrQ2FuQmVVc2VkQXNPbGRMYXllcihvbGRMYXllciwgJ3B1c2hUcmFuc2Zvcm0nKSk7CiAgICBmaW5hbCBUcmFuc2Zvcm1FbmdpbmVMYXllciBsYXllciA9IFRyYW5zZm9ybUVuZ2luZUxheWVyLl8oX3B1c2hUcmFuc2Zvcm0obWF0cml4NCkpOwogICAgYXNzZXJ0KF9kZWJ1Z1B1c2hMYXllcihsYXllcikpOwogICAgcmV0dXJuIGxheWVyOwogIH0KCiAgRW5naW5lTGF5ZXIgX3B1c2hUcmFuc2Zvcm0oRmxvYXQ2NExpc3QgbWF0cml4NCkgbmF0aXZlICdTY2VuZUJ1aWxkZXJfcHVzaFRyYW5zZm9ybSc7CgogIC8vLyBQdXNoZXMgYW4gb2Zmc2V0IG9wZXJhdGlvbiBvbnRvIHRoZSBvcGVyYXRpb24gc3RhY2suCiAgLy8vCiAgLy8vIFRoaXMgaXMgZXF1aXZhbGVudCB0byBbcHVzaFRyYW5zZm9ybV0gd2l0aCBhIG1hdHJpeCB3aXRoIG9ubHkgdHJhbnNsYXRpb24uCiAgLy8vCiAgLy8vIHtAbWFjcm8gZGFydC51aS5zY2VuZUJ1aWxkZXIub2xkTGF5ZXJ9CiAgLy8vCiAgLy8vIHtAbWFjcm8gZGFydC51aS5zY2VuZUJ1aWxkZXIub2xkTGF5ZXJWc1JldGFpbmVkfQogIC8vLwogIC8vLyBTZWUgW3BvcF0gZm9yIGRldGFpbHMgYWJvdXQgdGhlIG9wZXJhdGlvbiBzdGFjay4KICBPZmZzZXRFbmdpbmVMYXllciBwdXNoT2Zmc2V0KAogICAgZG91YmxlIGR4LAogICAgZG91YmxlIGR5LCB7CiAgICBPZmZzZXRFbmdpbmVMYXllciBvbGRMYXllciwKICB9KSB7CiAgICBhc3NlcnQoX2RlYnVnQ2hlY2tDYW5CZVVzZWRBc09sZExheWVyKG9sZExheWVyLCAncHVzaE9mZnNldCcpKTsKICAgIGZpbmFsIE9mZnNldEVuZ2luZUxheWVyIGxheWVyID0gT2Zmc2V0RW5naW5lTGF5ZXIuXyhfcHVzaE9mZnNldChkeCwgZHkpKTsKICAgIGFzc2VydChfZGVidWdQdXNoTGF5ZXIobGF5ZXIpKTsKICAgIHJldHVybiBsYXllcjsKICB9CgogIEVuZ2luZUxheWVyIF9wdXNoT2Zmc2V0KGRvdWJsZSBkeCwgZG91YmxlIGR5KSBuYXRpdmUgJ1NjZW5lQnVpbGRlcl9wdXNoT2Zmc2V0JzsKCiAgLy8vIFB1c2hlcyBhIHJlY3Rhbmd1bGFyIGNsaXAgb3BlcmF0aW9uIG9udG8gdGhlIG9wZXJhdGlvbiBzdGFjay4KICAvLy8KICAvLy8gUmFzdGVyaXphdGlvbiBvdXRzaWRlIHRoZSBnaXZlbiByZWN0YW5nbGUgaXMgZGlzY2FyZGVkLgogIC8vLwogIC8vLyB7QG1hY3JvIGRhcnQudWkuc2NlbmVCdWlsZGVyLm9sZExheWVyfQogIC8vLwogIC8vLyB7QG1hY3JvIGRhcnQudWkuc2NlbmVCdWlsZGVyLm9sZExheWVyVnNSZXRhaW5lZH0KICAvLy8KICAvLy8gU2VlIFtwb3BdIGZvciBkZXRhaWxzIGFib3V0IHRoZSBvcGVyYXRpb24gc3RhY2ssIGFuZCBbQ2xpcF0gZm9yIGRpZmZlcmVudCBjbGlwIG1vZGVzLgogIC8vLyBCeSBkZWZhdWx0LCB0aGUgY2xpcCB3aWxsIGJlIGFudGktYWxpYXNlZCAoY2xpcCA9IFtDbGlwLmFudGlBbGlhc10pLgogIENsaXBSZWN0RW5naW5lTGF5ZXIgcHVzaENsaXBSZWN0KAogICAgUmVjdCByZWN0LCB7CiAgICBDbGlwIGNsaXBCZWhhdmlvciA9IENsaXAuYW50aUFsaWFzLAogICAgQ2xpcFJlY3RFbmdpbmVMYXllciBvbGRMYXllciwKICB9KSB7CiAgICBhc3NlcnQoY2xpcEJlaGF2aW9yICE9IG51bGwpOwogICAgYXNzZXJ0KGNsaXBCZWhhdmlvciAhPSBDbGlwLm5vbmUpOwogICAgYXNzZXJ0KF9kZWJ1Z0NoZWNrQ2FuQmVVc2VkQXNPbGRMYXllcihvbGRMYXllciwgJ3B1c2hDbGlwUmVjdCcpKTsKICAgIGZpbmFsIENsaXBSZWN0RW5naW5lTGF5ZXIgbGF5ZXIgPSBDbGlwUmVjdEVuZ2luZUxheWVyLl8oCiAgICAgICAgX3B1c2hDbGlwUmVjdChyZWN0LmxlZnQsIHJlY3QucmlnaHQsIHJlY3QudG9wLCByZWN0LmJvdHRvbSwgY2xpcEJlaGF2aW9yLmluZGV4KSk7CiAgICBhc3NlcnQoX2RlYnVnUHVzaExheWVyKGxheWVyKSk7CiAgICByZXR1cm4gbGF5ZXI7CiAgfQoKICBFbmdpbmVMYXllciBfcHVzaENsaXBSZWN0KGRvdWJsZSBsZWZ0LCBkb3VibGUgcmlnaHQsIGRvdWJsZSB0b3AsIGRvdWJsZSBib3R0b20sIGludCBjbGlwQmVoYXZpb3IpCiAgICAgIG5hdGl2ZSAnU2NlbmVCdWlsZGVyX3B1c2hDbGlwUmVjdCc7CgogIC8vLyBQdXNoZXMgYSByb3VuZGVkLXJlY3Rhbmd1bGFyIGNsaXAgb3BlcmF0aW9uIG9udG8gdGhlIG9wZXJhdGlvbiBzdGFjay4KICAvLy8KICAvLy8gUmFzdGVyaXphdGlvbiBvdXRzaWRlIHRoZSBnaXZlbiByb3VuZGVkIHJlY3RhbmdsZSBpcyBkaXNjYXJkZWQuCiAgLy8vCiAgLy8vIHtAbWFjcm8gZGFydC51aS5zY2VuZUJ1aWxkZXIub2xkTGF5ZXJ9CiAgLy8vCiAgLy8vIHtAbWFjcm8gZGFydC51aS5zY2VuZUJ1aWxkZXIub2xkTGF5ZXJWc1JldGFpbmVkfQogIC8vLwogIC8vLyBTZWUgW3BvcF0gZm9yIGRldGFpbHMgYWJvdXQgdGhlIG9wZXJhdGlvbiBzdGFjaywgYW5kIFtDbGlwXSBmb3IgZGlmZmVyZW50IGNsaXAgbW9kZXMuCiAgLy8vIEJ5IGRlZmF1bHQsIHRoZSBjbGlwIHdpbGwgYmUgYW50aS1hbGlhc2VkIChjbGlwID0gW0NsaXAuYW50aUFsaWFzXSkuCiAgQ2xpcFJSZWN0RW5naW5lTGF5ZXIgcHVzaENsaXBSUmVjdCgKICAgIFJSZWN0IHJyZWN0LCB7CiAgICBDbGlwIGNsaXBCZWhhdmlvciA9IENsaXAuYW50aUFsaWFzLAogICAgQ2xpcFJSZWN0RW5naW5lTGF5ZXIgb2xkTGF5ZXIsCiAgfSkgewogICAgYXNzZXJ0KGNsaXBCZWhhdmlvciAhPSBudWxsKTsKICAgIGFzc2VydChjbGlwQmVoYXZpb3IgIT0gQ2xpcC5ub25lKTsKICAgIGFzc2VydChfZGVidWdDaGVja0NhbkJlVXNlZEFzT2xkTGF5ZXIob2xkTGF5ZXIsICdwdXNoQ2xpcFJSZWN0JykpOwogICAgZmluYWwgQ2xpcFJSZWN0RW5naW5lTGF5ZXIgbGF5ZXIgPQogICAgICAgIENsaXBSUmVjdEVuZ2luZUxheWVyLl8oX3B1c2hDbGlwUlJlY3QocnJlY3QuX3ZhbHVlMzIsIGNsaXBCZWhhdmlvci5pbmRleCkpOwogICAgYXNzZXJ0KF9kZWJ1Z1B1c2hMYXllcihsYXllcikpOwogICAgcmV0dXJuIGxheWVyOwogIH0KCiAgRW5naW5lTGF5ZXIgX3B1c2hDbGlwUlJlY3QoRmxvYXQzMkxpc3QgcnJlY3QsIGludCBjbGlwQmVoYXZpb3IpCiAgICAgIG5hdGl2ZSAnU2NlbmVCdWlsZGVyX3B1c2hDbGlwUlJlY3QnOwoKICAvLy8gUHVzaGVzIGEgcGF0aCBjbGlwIG9wZXJhdGlvbiBvbnRvIHRoZSBvcGVyYXRpb24gc3RhY2suCiAgLy8vCiAgLy8vIFJhc3Rlcml6YXRpb24gb3V0c2lkZSB0aGUgZ2l2ZW4gcGF0aCBpcyBkaXNjYXJkZWQuCiAgLy8vCiAgLy8vIHtAbWFjcm8gZGFydC51aS5zY2VuZUJ1aWxkZXIub2xkTGF5ZXJ9CiAgLy8vCiAgLy8vIHtAbWFjcm8gZGFydC51aS5zY2VuZUJ1aWxkZXIub2xkTGF5ZXJWc1JldGFpbmVkfQogIC8vLwogIC8vLyBTZWUgW3BvcF0gZm9yIGRldGFpbHMgYWJvdXQgdGhlIG9wZXJhdGlvbiBzdGFjay4gU2VlIFtDbGlwXSBmb3IgZGlmZmVyZW50IGNsaXAgbW9kZXMuCiAgLy8vIEJ5IGRlZmF1bHQsIHRoZSBjbGlwIHdpbGwgYmUgYW50aS1hbGlhc2VkIChjbGlwID0gW0NsaXAuYW50aUFsaWFzXSkuCiAgQ2xpcFBhdGhFbmdpbmVMYXllciBwdXNoQ2xpcFBhdGgoCiAgICBQYXRoIHBhdGgsIHsKICAgIENsaXAgY2xpcEJlaGF2aW9yID0gQ2xpcC5hbnRpQWxpYXMsCiAgICBDbGlwUGF0aEVuZ2luZUxheWVyIG9sZExheWVyLAogIH0pIHsKICAgIGFzc2VydChjbGlwQmVoYXZpb3IgIT0gbnVsbCk7CiAgICBhc3NlcnQoY2xpcEJlaGF2aW9yICE9IENsaXAubm9uZSk7CiAgICBhc3NlcnQoX2RlYnVnQ2hlY2tDYW5CZVVzZWRBc09sZExheWVyKG9sZExheWVyLCAncHVzaENsaXBQYXRoJykpOwogICAgZmluYWwgQ2xpcFBhdGhFbmdpbmVMYXllciBsYXllciA9CiAgICAgICAgQ2xpcFBhdGhFbmdpbmVMYXllci5fKF9wdXNoQ2xpcFBhdGgocGF0aCwgY2xpcEJlaGF2aW9yLmluZGV4KSk7CiAgICBhc3NlcnQoX2RlYnVnUHVzaExheWVyKGxheWVyKSk7CiAgICByZXR1cm4gbGF5ZXI7CiAgfQoKICBFbmdpbmVMYXllciBfcHVzaENsaXBQYXRoKFBhdGggcGF0aCwgaW50IGNsaXBCZWhhdmlvcikgbmF0aXZlICdTY2VuZUJ1aWxkZXJfcHVzaENsaXBQYXRoJzsKCiAgLy8vIFB1c2hlcyBhbiBvcGFjaXR5IG9wZXJhdGlvbiBvbnRvIHRoZSBvcGVyYXRpb24gc3RhY2suCiAgLy8vCiAgLy8vIFRoZSBnaXZlbiBhbHBoYSB2YWx1ZSBpcyBibGVuZGVkIGludG8gdGhlIGFscGhhIHZhbHVlIG9mIHRoZSBvYmplY3RzJwogIC8vLyByYXN0ZXJpemF0aW9uLiBBbiBhbHBoYSB2YWx1ZSBvZiAwIG1ha2VzIHRoZSBvYmplY3RzIGVudGlyZWx5IGludmlzaWJsZS4KICAvLy8gQW4gYWxwaGEgdmFsdWUgb2YgMjU1IGhhcyBubyBlZmZlY3QgKGkuZS4sIHRoZSBvYmplY3RzIHJldGFpbiB0aGUgY3VycmVudAogIC8vLyBvcGFjaXR5KS4KICAvLy8KICAvLy8ge0BtYWNybyBkYXJ0LnVpLnNjZW5lQnVpbGRlci5vbGRMYXllcn0KICAvLy8KICAvLy8ge0BtYWNybyBkYXJ0LnVpLnNjZW5lQnVpbGRlci5vbGRMYXllclZzUmV0YWluZWR9CiAgLy8vCiAgLy8vIFNlZSBbcG9wXSBmb3IgZGV0YWlscyBhYm91dCB0aGUgb3BlcmF0aW9uIHN0YWNrLgogIE9wYWNpdHlFbmdpbmVMYXllciBwdXNoT3BhY2l0eSgKICAgIGludCBhbHBoYSwgewogICAgT2Zmc2V0IG9mZnNldCA9IE9mZnNldC56ZXJvLAogICAgT3BhY2l0eUVuZ2luZUxheWVyIG9sZExheWVyLAogIH0pIHsKICAgIGFzc2VydChfZGVidWdDaGVja0NhbkJlVXNlZEFzT2xkTGF5ZXIob2xkTGF5ZXIsICdwdXNoT3BhY2l0eScpKTsKICAgIGZpbmFsIE9wYWNpdHlFbmdpbmVMYXllciBsYXllciA9CiAgICAgICAgT3BhY2l0eUVuZ2luZUxheWVyLl8oX3B1c2hPcGFjaXR5KGFscGhhLCBvZmZzZXQuZHgsIG9mZnNldC5keSkpOwogICAgYXNzZXJ0KF9kZWJ1Z1B1c2hMYXllcihsYXllcikpOwogICAgcmV0dXJuIGxheWVyOwogIH0KCiAgRW5naW5lTGF5ZXIgX3B1c2hPcGFjaXR5KGludCBhbHBoYSwgZG91YmxlIGR4LCBkb3VibGUgZHkpIG5hdGl2ZSAnU2NlbmVCdWlsZGVyX3B1c2hPcGFjaXR5JzsKCiAgLy8vIFB1c2hlcyBhIGNvbG9yIGZpbHRlciBvcGVyYXRpb24gb250byB0aGUgb3BlcmF0aW9uIHN0YWNrLgogIC8vLwogIC8vLyBUaGUgZ2l2ZW4gY29sb3IgaXMgYXBwbGllZCB0byB0aGUgb2JqZWN0cycgcmFzdGVyaXphdGlvbiB1c2luZyB0aGUgZ2l2ZW4KICAvLy8gYmxlbmQgbW9kZS4KICAvLy8KICAvLy8ge0BtYWNybyBkYXJ0LnVpLnNjZW5lQnVpbGRlci5vbGRMYXllcn0KICAvLy8KICAvLy8ge0BtYWNybyBkYXJ0LnVpLnNjZW5lQnVpbGRlci5vbGRMYXllclZzUmV0YWluZWR9CiAgLy8vCiAgLy8vIFNlZSBbcG9wXSBmb3IgZGV0YWlscyBhYm91dCB0aGUgb3BlcmF0aW9uIHN0YWNrLgogIENvbG9yRmlsdGVyRW5naW5lTGF5ZXIgcHVzaENvbG9yRmlsdGVyKAogICAgQ29sb3JGaWx0ZXIgZmlsdGVyLCB7CiAgICBDb2xvckZpbHRlckVuZ2luZUxheWVyIG9sZExheWVyLAogIH0pIHsKICAgIGFzc2VydChmaWx0ZXIgIT0gbnVsbCk7CiAgICBhc3NlcnQoX2RlYnVnQ2hlY2tDYW5CZVVzZWRBc09sZExheWVyKG9sZExheWVyLCAncHVzaENvbG9yRmlsdGVyJykpOwogICAgZmluYWwgX0NvbG9yRmlsdGVyIG5hdGl2ZUZpbHRlciA9IGZpbHRlci5fdG9OYXRpdmVDb2xvckZpbHRlcigpOwogICAgYXNzZXJ0KG5hdGl2ZUZpbHRlciAhPSBudWxsKTsKICAgIGZpbmFsIENvbG9yRmlsdGVyRW5naW5lTGF5ZXIgbGF5ZXIgPSBDb2xvckZpbHRlckVuZ2luZUxheWVyLl8oX3B1c2hDb2xvckZpbHRlcihuYXRpdmVGaWx0ZXIpKTsKICAgIGFzc2VydChfZGVidWdQdXNoTGF5ZXIobGF5ZXIpKTsKICAgIHJldHVybiBsYXllcjsKICB9CgogIEVuZ2luZUxheWVyIF9wdXNoQ29sb3JGaWx0ZXIoX0NvbG9yRmlsdGVyIGZpbHRlcikgbmF0aXZlICdTY2VuZUJ1aWxkZXJfcHVzaENvbG9yRmlsdGVyJzsKCiAgLy8vIFB1c2hlcyBhbiBpbWFnZSBmaWx0ZXIgb3BlcmF0aW9uIG9udG8gdGhlIG9wZXJhdGlvbiBzdGFjay4KICAvLy8KICAvLy8gVGhlIGdpdmVuIGZpbHRlciBpcyBhcHBsaWVkIHRvIHRoZSBjaGlsZHJlbidzIHJhc3Rlcml6YXRpb24gYmVmb3JlIGNvbXBvc2l0aW5nIHRoZW0gaW50bwogIC8vLyB0aGUgc2NlbmUuCiAgLy8vCiAgLy8vIHtAbWFjcm8gZGFydC51aS5zY2VuZUJ1aWxkZXIub2xkTGF5ZXJ9CiAgLy8vCiAgLy8vIHtAbWFjcm8gZGFydC51aS5zY2VuZUJ1aWxkZXIub2xkTGF5ZXJWc1JldGFpbmVkfQogIC8vLwogIC8vLyBTZWUgW3BvcF0gZm9yIGRldGFpbHMgYWJvdXQgdGhlIG9wZXJhdGlvbiBzdGFjay4KICBJbWFnZUZpbHRlckVuZ2luZUxheWVyIHB1c2hJbWFnZUZpbHRlcigKICAgIEltYWdlRmlsdGVyIGZpbHRlciwgewogICAgSW1hZ2VGaWx0ZXJFbmdpbmVMYXllciBvbGRMYXllciwKICB9KSB7CiAgICBhc3NlcnQoZmlsdGVyICE9IG51bGwpOwogICAgYXNzZXJ0KF9kZWJ1Z0NoZWNrQ2FuQmVVc2VkQXNPbGRMYXllcihvbGRMYXllciwgJ3B1c2hJbWFnZUZpbHRlcicpKTsKICAgIGZpbmFsIF9JbWFnZUZpbHRlciBuYXRpdmVGaWx0ZXIgPSBmaWx0ZXIuX3RvTmF0aXZlSW1hZ2VGaWx0ZXIoKTsKICAgIGFzc2VydChuYXRpdmVGaWx0ZXIgIT0gbnVsbCk7CiAgICBmaW5hbCBJbWFnZUZpbHRlckVuZ2luZUxheWVyIGxheWVyID0gSW1hZ2VGaWx0ZXJFbmdpbmVMYXllci5fKF9wdXNoSW1hZ2VGaWx0ZXIobmF0aXZlRmlsdGVyKSk7CiAgICBhc3NlcnQoX2RlYnVnUHVzaExheWVyKGxheWVyKSk7CiAgICByZXR1cm4gbGF5ZXI7CiAgfQoKICBFbmdpbmVMYXllciBfcHVzaEltYWdlRmlsdGVyKF9JbWFnZUZpbHRlciBmaWx0ZXIpIG5hdGl2ZSAnU2NlbmVCdWlsZGVyX3B1c2hJbWFnZUZpbHRlcic7CgogIC8vLyBQdXNoZXMgYSBiYWNrZHJvcCBmaWx0ZXIgb3BlcmF0aW9uIG9udG8gdGhlIG9wZXJhdGlvbiBzdGFjay4KICAvLy8KICAvLy8gVGhlIGdpdmVuIGZpbHRlciBpcyBhcHBsaWVkIHRvIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBzY2VuZSBwcmlvciB0bwogIC8vLyByYXN0ZXJpemluZyB0aGUgZ2l2ZW4gb2JqZWN0cy4KICAvLy8KICAvLy8ge0BtYWNybyBkYXJ0LnVpLnNjZW5lQnVpbGRlci5vbGRMYXllcn0KICAvLy8KICAvLy8ge0BtYWNybyBkYXJ0LnVpLnNjZW5lQnVpbGRlci5vbGRMYXllclZzUmV0YWluZWR9CiAgLy8vCiAgLy8vIFNlZSBbcG9wXSBmb3IgZGV0YWlscyBhYm91dCB0aGUgb3BlcmF0aW9uIHN0YWNrLgogIEJhY2tkcm9wRmlsdGVyRW5naW5lTGF5ZXIgcHVzaEJhY2tkcm9wRmlsdGVyKAogICAgSW1hZ2VGaWx0ZXIgZmlsdGVyLCB7CiAgICBCYWNrZHJvcEZpbHRlckVuZ2luZUxheWVyIG9sZExheWVyLAogIH0pIHsKICAgIGFzc2VydChfZGVidWdDaGVja0NhbkJlVXNlZEFzT2xkTGF5ZXIob2xkTGF5ZXIsICdwdXNoQmFja2Ryb3BGaWx0ZXInKSk7CiAgICBmaW5hbCBCYWNrZHJvcEZpbHRlckVuZ2luZUxheWVyIGxheWVyID0KICAgICAgICBCYWNrZHJvcEZpbHRlckVuZ2luZUxheWVyLl8oX3B1c2hCYWNrZHJvcEZpbHRlcihmaWx0ZXIuX3RvTmF0aXZlSW1hZ2VGaWx0ZXIoKSkpOwogICAgYXNzZXJ0KF9kZWJ1Z1B1c2hMYXllcihsYXllcikpOwogICAgcmV0dXJuIGxheWVyOwogIH0KCiAgRW5naW5lTGF5ZXIgX3B1c2hCYWNrZHJvcEZpbHRlcihfSW1hZ2VGaWx0ZXIgZmlsdGVyKSBuYXRpdmUgJ1NjZW5lQnVpbGRlcl9wdXNoQmFja2Ryb3BGaWx0ZXInOwoKICAvLy8gUHVzaGVzIGEgc2hhZGVyIG1hc2sgb3BlcmF0aW9uIG9udG8gdGhlIG9wZXJhdGlvbiBzdGFjay4KICAvLy8KICAvLy8gVGhlIGdpdmVuIHNoYWRlciBpcyBhcHBsaWVkIHRvIHRoZSBvYmplY3QncyByYXN0ZXJpemF0aW9uIGluIHRoZSBnaXZlbgogIC8vLyByZWN0YW5nbGUgdXNpbmcgdGhlIGdpdmVuIGJsZW5kIG1vZGUuCiAgLy8vCiAgLy8vIHtAbWFjcm8gZGFydC51aS5zY2VuZUJ1aWxkZXIub2xkTGF5ZXJ9CiAgLy8vCiAgLy8vIHtAbWFjcm8gZGFydC51aS5zY2VuZUJ1aWxkZXIub2xkTGF5ZXJWc1JldGFpbmVkfQogIC8vLwogIC8vLyBTZWUgW3BvcF0gZm9yIGRldGFpbHMgYWJvdXQgdGhlIG9wZXJhdGlvbiBzdGFjay4KICBTaGFkZXJNYXNrRW5naW5lTGF5ZXIgcHVzaFNoYWRlck1hc2soCiAgICBTaGFkZXIgc2hhZGVyLAogICAgUmVjdCBtYXNrUmVjdCwKICAgIEJsZW5kTW9kZSBibGVuZE1vZGUsIHsKICAgIFNoYWRlck1hc2tFbmdpbmVMYXllciBvbGRMYXllciwKICB9KSB7CiAgICBhc3NlcnQoX2RlYnVnQ2hlY2tDYW5CZVVzZWRBc09sZExheWVyKG9sZExheWVyLCAncHVzaFNoYWRlck1hc2snKSk7CiAgICBmaW5hbCBTaGFkZXJNYXNrRW5naW5lTGF5ZXIgbGF5ZXIgPSBTaGFkZXJNYXNrRW5naW5lTGF5ZXIuXyhfcHVzaFNoYWRlck1hc2soCiAgICAgICAgc2hhZGVyLCBtYXNrUmVjdC5sZWZ0LCBtYXNrUmVjdC5yaWdodCwgbWFza1JlY3QudG9wLCBtYXNrUmVjdC5ib3R0b20sIGJsZW5kTW9kZS5pbmRleCkpOwogICAgYXNzZXJ0KF9kZWJ1Z1B1c2hMYXllcihsYXllcikpOwogICAgcmV0dXJuIGxheWVyOwogIH0KCiAgRW5naW5lTGF5ZXIgX3B1c2hTaGFkZXJNYXNrKAogICAgICBTaGFkZXIgc2hhZGVyLAogICAgICBkb3VibGUgbWFza1JlY3RMZWZ0LAogICAgICBkb3VibGUgbWFza1JlY3RSaWdodCwKICAgICAgZG91YmxlIG1hc2tSZWN0VG9wLAogICAgICBkb3VibGUgbWFza1JlY3RCb3R0b20sCiAgICAgIGludCBibGVuZE1vZGUpIG5hdGl2ZSAnU2NlbmVCdWlsZGVyX3B1c2hTaGFkZXJNYXNrJzsKCiAgLy8vIFB1c2hlcyBhIHBoeXNpY2FsIGxheWVyIG9wZXJhdGlvbiBmb3IgYW4gYXJiaXRyYXJ5IHNoYXBlIG9udG8gdGhlCiAgLy8vIG9wZXJhdGlvbiBzdGFjay4KICAvLy8KICAvLy8gQnkgZGVmYXVsdCwgdGhlIGxheWVyJ3MgY29udGVudCB3aWxsIG5vdCBiZSBjbGlwcGVkIChjbGlwID0gW0NsaXAubm9uZV0pLgogIC8vLyBJZiBjbGlwIGVxdWFscyBbQ2xpcC5oYXJkRWRnZV0sIFtDbGlwLmFudGlBbGlhc10sIG9yIFtDbGlwLmFudGlBbGlhc1dpdGhTYXZlTGF5ZXJdLAogIC8vLyB0aGVuIHRoZSBjb250ZW50IGlzIGNsaXBwZWQgdG8gdGhlIGdpdmVuIHNoYXBlIGRlZmluZWQgYnkgW3BhdGhdLgogIC8vLwogIC8vLyBJZiBbZWxldmF0aW9uXSBpcyBncmVhdGVyIHRoYW4gMC4wLCB0aGVuIGEgc2hhZG93IGlzIGRyYXduIGFyb3VuZCB0aGUgbGF5ZXIuCiAgLy8vIFtzaGFkb3dDb2xvcl0gZGVmaW5lcyB0aGUgY29sb3Igb2YgdGhlIHNoYWRvdyBpZiBwcmVzZW50IGFuZCBbY29sb3JdIGRlZmluZXMgdGhlCiAgLy8vIGNvbG9yIG9mIHRoZSBsYXllciBiYWNrZ3JvdW5kLgogIC8vLwogIC8vLyB7QG1hY3JvIGRhcnQudWkuc2NlbmVCdWlsZGVyLm9sZExheWVyfQogIC8vLwogIC8vLyB7QG1hY3JvIGRhcnQudWkuc2NlbmVCdWlsZGVyLm9sZExheWVyVnNSZXRhaW5lZH0KICAvLy8KICAvLy8gU2VlIFtwb3BdIGZvciBkZXRhaWxzIGFib3V0IHRoZSBvcGVyYXRpb24gc3RhY2ssIGFuZCBbQ2xpcF0gZm9yIGRpZmZlcmVudCBjbGlwIG1vZGVzLgogIC8vIGlnbm9yZTogZGVwcmVjYXRlZF9tZW1iZXJfdXNlCiAgUGh5c2ljYWxTaGFwZUVuZ2luZUxheWVyIHB1c2hQaHlzaWNhbFNoYXBlKHsKICAgIFBhdGggcGF0aCwKICAgIGRvdWJsZSBlbGV2YXRpb24sCiAgICBDb2xvciBjb2xvciwKICAgIENvbG9yIHNoYWRvd0NvbG9yLAogICAgQ2xpcCBjbGlwQmVoYXZpb3IgPSBDbGlwLm5vbmUsCiAgICBQaHlzaWNhbFNoYXBlRW5naW5lTGF5ZXIgb2xkTGF5ZXIsCiAgfSkgewogICAgYXNzZXJ0KF9kZWJ1Z0NoZWNrQ2FuQmVVc2VkQXNPbGRMYXllcihvbGRMYXllciwgJ3B1c2hQaHlzaWNhbFNoYXBlJykpOwogICAgZmluYWwgUGh5c2ljYWxTaGFwZUVuZ2luZUxheWVyIGxheWVyID0gUGh5c2ljYWxTaGFwZUVuZ2luZUxheWVyLl8oX3B1c2hQaHlzaWNhbFNoYXBlKAogICAgICAgIHBhdGgsIGVsZXZhdGlvbiwgY29sb3IudmFsdWUsIHNoYWRvd0NvbG9yPy52YWx1ZSA/PyAweEZGMDAwMDAwLCBjbGlwQmVoYXZpb3IuaW5kZXgpKTsKICAgIGFzc2VydChfZGVidWdQdXNoTGF5ZXIobGF5ZXIpKTsKICAgIHJldHVybiBsYXllcjsKICB9CgogIEVuZ2luZUxheWVyIF9wdXNoUGh5c2ljYWxTaGFwZShQYXRoIHBhdGgsIGRvdWJsZSBlbGV2YXRpb24sIGludCBjb2xvciwgaW50IHNoYWRvd0NvbG9yLAogICAgICBpbnQgY2xpcEJlaGF2aW9yKSBuYXRpdmUgJ1NjZW5lQnVpbGRlcl9wdXNoUGh5c2ljYWxTaGFwZSc7CgogIC8vLyBFbmRzIHRoZSBlZmZlY3Qgb2YgdGhlIG1vc3QgcmVjZW50bHkgcHVzaGVkIG9wZXJhdGlvbi4KICAvLy8KICAvLy8gSW50ZXJuYWxseSB0aGUgc2NlbmUgYnVpbGRlciBtYWludGFpbnMgYSBzdGFjayBvZiBvcGVyYXRpb25zLiBFYWNoIG9mIHRoZQogIC8vLyBvcGVyYXRpb25zIGluIHRoZSBzdGFjayBhcHBsaWVzIHRvIGVhY2ggb2YgdGhlIG9iamVjdHMgYWRkZWQgdG8gdGhlIHNjZW5lLgogIC8vLyBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgbW9zdCByZWNlbnRseSBhZGRlZCBvcGVyYXRpb24gZnJvbSB0aGUKICAvLy8gc3RhY2suCiAgdm9pZCBwb3AoKSB7CiAgICBpZiAoX2xheWVyU3RhY2suaXNOb3RFbXB0eSkgewogICAgICBfbGF5ZXJTdGFjay5yZW1vdmVMYXN0KCk7CiAgICB9CiAgICBfcG9wKCk7CiAgfQoKICB2b2lkIF9wb3AoKSBuYXRpdmUgJ1NjZW5lQnVpbGRlcl9wb3AnOwoKICAvLy8gQWRkIGEgcmV0YWluZWQgZW5naW5lIGxheWVyIHN1YnRyZWUgZnJvbSBwcmV2aW91cyBmcmFtZXMuCiAgLy8vCiAgLy8vIEFsbCB0aGUgZW5naW5lIGxheWVycyB0aGF0IGFyZSBpbiB0aGUgc3VidHJlZSBvZiB0aGUgcmV0YWluZWQgbGF5ZXIgd2lsbAogIC8vLyBiZSBhdXRvbWF0aWNhbGx5IGFwcGVuZGVkIHRvIHRoZSBjdXJyZW50IGVuZ2luZSBsYXllciB0cmVlLgogIC8vLwogIC8vLyBUaGVyZWZvcmUsIHdoZW4gaW1wbGVtZW50aW5nIGEgc3ViY2xhc3Mgb2YgdGhlIFtMYXllcl0gY29uY2VwdCBkZWZpbmVkIGluCiAgLy8vIHRoZSByZW5kZXJpbmcgbGF5ZXIgb2YgRmx1dHRlcidzIGZyYW1ld29yaywgb25jZSB0aGlzIGlzIGNhbGxlZCwgdGhlcmUncwogIC8vLyBubyBuZWVkIHRvIGNhbGwgW2FkZFRvU2NlbmVdIGZvciBpdHMgY2hpbGRyZW4gbGF5ZXJzLgogIC8vLwogIC8vLyB7QG1hY3JvIGRhcnQudWkuc2NlbmVCdWlsZGVyLm9sZExheWVyVnNSZXRhaW5lZH0KICB2b2lkIGFkZFJldGFpbmVkKEVuZ2luZUxheWVyIHJldGFpbmVkTGF5ZXIpIHsKICAgIGFzc2VydChyZXRhaW5lZExheWVyIGlzIF9FbmdpbmVMYXllcldyYXBwZXIpOwogICAgYXNzZXJ0KCgpIHsKICAgICAgZmluYWwgX0VuZ2luZUxheWVyV3JhcHBlciBsYXllciA9IHJldGFpbmVkTGF5ZXIgYXMgX0VuZ2luZUxheWVyV3JhcHBlcjsKCiAgICAgIHZvaWQgcmVjdXJzaXZlbHlDaGVja0NoaWxkcmVuVXNlZE9uY2UoX0VuZ2luZUxheWVyV3JhcHBlciBwYXJlbnRMYXllcikgewogICAgICAgIF9kZWJ1Z0NoZWNrVXNlZE9uY2UocGFyZW50TGF5ZXIsICdyZXRhaW5lZCBsYXllcicpOwogICAgICAgIHBhcmVudExheWVyLl9kZWJ1Z0NoZWNrTm90VXNlZEFzT2xkTGF5ZXIoKTsKCiAgICAgICAgaWYgKHBhcmVudExheWVyLl9kZWJ1Z0NoaWxkcmVuID09IG51bGwgfHwgcGFyZW50TGF5ZXIuX2RlYnVnQ2hpbGRyZW4uaXNFbXB0eSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgcGFyZW50TGF5ZXIuX2RlYnVnQ2hpbGRyZW4uZm9yRWFjaChyZWN1cnNpdmVseUNoZWNrQ2hpbGRyZW5Vc2VkT25jZSk7CiAgICAgIH0KCiAgICAgIHJlY3Vyc2l2ZWx5Q2hlY2tDaGlsZHJlblVzZWRPbmNlKGxheWVyKTsKCiAgICAgIHJldHVybiB0cnVlOwogICAgfSgpKTsKCiAgICBmaW5hbCBfRW5naW5lTGF5ZXJXcmFwcGVyIHdyYXBwZXIgPSByZXRhaW5lZExheWVyIGFzIF9FbmdpbmVMYXllcldyYXBwZXI7CiAgICBfYWRkUmV0YWluZWQod3JhcHBlci5fbmF0aXZlTGF5ZXIpOwogIH0KCiAgdm9pZCBfYWRkUmV0YWluZWQoRW5naW5lTGF5ZXIgcmV0YWluZWRMYXllcikgbmF0aXZlICdTY2VuZUJ1aWxkZXJfYWRkUmV0YWluZWQnOwoKICAvLy8gQWRkcyBhbiBvYmplY3QgdG8gdGhlIHNjZW5lIHRoYXQgZGlzcGxheXMgcGVyZm9ybWFuY2Ugc3RhdGlzdGljcy4KICAvLy8KICAvLy8gVXNlZnVsIGR1cmluZyBkZXZlbG9wbWVudCB0byBhc3Nlc3MgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBhcHBsaWNhdGlvbi4KICAvLy8gVGhlIGVuYWJsZWRPcHRpb25zIGNvbnRyb2xzIHdoaWNoIHN0YXRpc3RpY3MgYXJlIGRpc3BsYXllZC4gVGhlIGJvdW5kcwogIC8vLyBjb250cm9scyB3aGVyZSB0aGUgc3RhdGlzdGljcyBhcmUgZGlzcGxheWVkLgogIC8vLwogIC8vLyBlbmFibGVkT3B0aW9ucyBpcyBhIGJpdCBmaWVsZCB3aXRoIHRoZSBmb2xsb3dpbmcgYml0cyBkZWZpbmVkOgogIC8vLyAgLSAweDAxOiBkaXNwbGF5UmFzdGVyaXplclN0YXRpc3RpY3MgLSBzaG93IEdQVSB0aHJlYWQgZnJhbWUgdGltZQogIC8vLyAgLSAweDAyOiB2aXN1YWxpemVSYXN0ZXJpemVyU3RhdGlzdGljcyAtIGdyYXBoIEdQVSB0aHJlYWQgZnJhbWUgdGltZXMKICAvLy8gIC0gMHgwNDogZGlzcGxheUVuZ2luZVN0YXRpc3RpY3MgLSBzaG93IFVJIHRocmVhZCBmcmFtZSB0aW1lCiAgLy8vICAtIDB4MDg6IHZpc3VhbGl6ZUVuZ2luZVN0YXRpc3RpY3MgLSBncmFwaCBVSSB0aHJlYWQgZnJhbWUgdGltZXMKICAvLy8gU2V0IGVuYWJsZWRPcHRpb25zIHRvIDB4MEYgdG8gZW5hYmxlIGFsbCB0aGUgY3VycmVudGx5IGRlZmluZWQgZmVhdHVyZXMuCiAgLy8vCiAgLy8vIFRoZSAiVUkgdGhyZWFkIiBpcyB0aGUgdGhyZWFkIHRoYXQgaW5jbHVkZXMgYWxsIHRoZSBleGVjdXRpb24gb2YKICAvLy8gdGhlIG1haW4gRGFydCBpc29sYXRlICh0aGUgaXNvbGF0ZSB0aGF0IGNhbiBjYWxsCiAgLy8vIFtXaW5kb3cucmVuZGVyXSkuIFRoZSBVSSB0aHJlYWQgZnJhbWUgdGltZSBpcyB0aGUgdG90YWwgdGltZQogIC8vLyBzcGVudCBleGVjdXRpbmcgdGhlIFtXaW5kb3cub25CZWdpbkZyYW1lXSBjYWxsYmFjay4gVGhlICJHUFUKICAvLy8gdGhyZWFkIiBpcyB0aGUgdGhyZWFkIChydW5uaW5nIG9uIHRoZSBDUFUpIHRoYXQgc3Vic2VxdWVudGx5CiAgLy8vIHByb2Nlc3NlcyB0aGUgW1NjZW5lXSBwcm92aWRlZCBieSB0aGUgRGFydCBjb2RlIHRvIHR1cm4gaXQgaW50bwogIC8vLyBHUFUgY29tbWFuZHMgYW5kIHNlbmQgaXQgdG8gdGhlIEdQVS4KICAvLy8KICAvLy8gU2VlIGFsc28gdGhlIFtQZXJmb3JtYW5jZU92ZXJsYXlPcHRpb25dIGVudW0gaW4gdGhlIHJlbmRlcmluZyBsaWJyYXJ5LgogIC8vLyBmb3IgbW9yZSBkZXRhaWxzLgogIC8vIFZhbHVlcyBhYm92ZSBtdXN0IG1hdGNoIGNvbnN0YW50cyBpbiAvL2VuZ2luZS9zcmMvc2t5L2NvbXBvc2l0b3IvcGVyZm9ybWFuY2Vfb3ZlcmxheV9sYXllci5oCiAgdm9pZCBhZGRQZXJmb3JtYW5jZU92ZXJsYXkoaW50IGVuYWJsZWRPcHRpb25zLCBSZWN0IGJvdW5kcykgewogICAgX2FkZFBlcmZvcm1hbmNlT3ZlcmxheShlbmFibGVkT3B0aW9ucywgYm91bmRzLmxlZnQsIGJvdW5kcy5yaWdodCwgYm91bmRzLnRvcCwgYm91bmRzLmJvdHRvbSk7CiAgfQoKICB2b2lkIF9hZGRQZXJmb3JtYW5jZU92ZXJsYXkoCiAgICBpbnQgZW5hYmxlZE9wdGlvbnMsCiAgICBkb3VibGUgbGVmdCwKICAgIGRvdWJsZSByaWdodCwKICAgIGRvdWJsZSB0b3AsCiAgICBkb3VibGUgYm90dG9tLAogICkgbmF0aXZlICdTY2VuZUJ1aWxkZXJfYWRkUGVyZm9ybWFuY2VPdmVybGF5JzsKCiAgLy8vIEFkZHMgYSBbUGljdHVyZV0gdG8gdGhlIHNjZW5lLgogIC8vLwogIC8vLyBUaGUgcGljdHVyZSBpcyByYXN0ZXJpemVkIGF0IHRoZSBnaXZlbiBvZmZzZXQuCiAgdm9pZCBhZGRQaWN0dXJlKAogICAgT2Zmc2V0IG9mZnNldCwKICAgIFBpY3R1cmUgcGljdHVyZSwgewogICAgYm9vbCBpc0NvbXBsZXhIaW50ID0gZmFsc2UsCiAgICBib29sIHdpbGxDaGFuZ2VIaW50ID0gZmFsc2UsCiAgfSkgewogICAgZmluYWwgaW50IGhpbnRzID0gKGlzQ29tcGxleEhpbnQgPyAxIDogMCkgfCAod2lsbENoYW5nZUhpbnQgPyAyIDogMCk7CiAgICBfYWRkUGljdHVyZShvZmZzZXQuZHgsIG9mZnNldC5keSwgcGljdHVyZSwgaGludHMpOwogIH0KCiAgdm9pZCBfYWRkUGljdHVyZShkb3VibGUgZHgsIGRvdWJsZSBkeSwgUGljdHVyZSBwaWN0dXJlLCBpbnQgaGludHMpCiAgICAgIG5hdGl2ZSAnU2NlbmVCdWlsZGVyX2FkZFBpY3R1cmUnOwoKICAvLy8gQWRkcyBhIGJhY2tlbmQgdGV4dHVyZSB0byB0aGUgc2NlbmUuCiAgLy8vCiAgLy8vIFRoZSB0ZXh0dXJlIGlzIHNjYWxlZCB0byB0aGUgZ2l2ZW4gc2l6ZSBhbmQgcmFzdGVyaXplZCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0LgogIC8vLwogIC8vLyBJZiBgZnJlZXplYCBpcyB0cnVlIHRoZSB0ZXh0dXJlIHRoYXQgaXMgYWRkZWQgdG8gdGhlIHNjZW5lIHdpbGwgbm90CiAgLy8vIGJlIHVwZGF0ZWQgd2l0aCBuZXcgZnJhbWVzLiBgZnJlZXplYCBpcyB1c2VkIHdoZW4gcmVzaXppbmcgYW4gZW1iZWRkZWQKICAvLy8gQW5kcm9pZCB2aWV3OiBXaGVuIHJlc2l6aW5nIGFuIEFuZHJvaWQgdmlldyB0aGVyZSBpcyBhIHNob3J0IHBlcmlvZCBkdXJpbmcKICAvLy8gd2hpY2ggdGhlIGZyYW1ld29yayBjYW5ub3QgdGVsbCBpZiB0aGUgbmV3ZXN0IHRleHR1cmUgZnJhbWUgaGFzIHRoZQogIC8vLyBwcmV2aW91cyBvciBuZXcgc2l6ZSwgdG8gd29ya2Fyb3VuZCB0aGlzIHRoZSBmcmFtZXdvcmsgImZyZWV6ZXMiIHRoZQogIC8vLyB0ZXh0dXJlIGp1c3QgYmVmb3JlIHJlc2l6aW5nIHRoZSBBbmRyb2lkIHZpZXcgYW5kIHVuLWZyZWV6ZXMgaXQgd2hlbiBpdCBpcwogIC8vLyBjZXJ0YWluIHRoYXQgYSBmcmFtZSB3aXRoIHRoZSBuZXcgc2l6ZSBpcyByZWFkeS4KICB2b2lkIGFkZFRleHR1cmUoCiAgICBpbnQgdGV4dHVyZUlkLCB7CiAgICBPZmZzZXQgb2Zmc2V0ID0gT2Zmc2V0Lnplcm8sCiAgICBkb3VibGUgd2lkdGggPSAwLjAsCiAgICBkb3VibGUgaGVpZ2h0ID0gMC4wLAogICAgYm9vbCBmcmVlemUgPSBmYWxzZSwKICB9KSB7CiAgICBhc3NlcnQob2Zmc2V0ICE9IG51bGwsICdPZmZzZXQgYXJndW1lbnQgd2FzIG51bGwnKTsKICAgIF9hZGRUZXh0dXJlKG9mZnNldC5keCwgb2Zmc2V0LmR5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0dXJlSWQsIGZyZWV6ZSk7CiAgfQoKICB2b2lkIF9hZGRUZXh0dXJlKGRvdWJsZSBkeCwgZG91YmxlIGR5LCBkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQsIGludCB0ZXh0dXJlSWQsIGJvb2wgZnJlZXplKQogICAgICBuYXRpdmUgJ1NjZW5lQnVpbGRlcl9hZGRUZXh0dXJlJzsKCiAgLy8vIEFkZHMgYSBwbGF0Zm9ybSB2aWV3IChlLmcgYW4gaU9TIFVJVmlldykgdG8gdGhlIHNjZW5lLgogIC8vLwogIC8vLyBPbmx5IHN1cHBvcnRlZCBvbiBpT1MsIHRoaXMgaXMgY3VycmVudGx5IGEgbm8tb3Agb24gb3RoZXIgcGxhdGZvcm1zLgogIC8vLwogIC8vLyBPbiBpT1MgdGhpcyBsYXllciBzcGxpdHMgdGhlIGN1cnJlbnQgb3V0cHV0IHN1cmZhY2UgaW50byB0d28gc3VyZmFjZXMsIG9uZSBmb3IgdGhlIHNjZW5lIG5vZGVzCiAgLy8vIHByZWNlZGluZyB0aGUgcGxhdGZvcm0gdmlldywgYW5kIG9uZSBmb3IgdGhlIHNjZW5lIG5vZGVzIGZvbGxvd2luZyB0aGUgcGxhdGZvcm0gdmlldy4KICAvLy8KICAvLy8gIyMgUGVyZm9ybWFuY2UgaW1wYWN0CiAgLy8vCiAgLy8vIEFkZGluZyBhbiBhZGRpdGlvbmFsIHN1cmZhY2UgZG91YmxlcyB0aGUgYW1vdW50IG9mIGdyYXBoaWNzIG1lbW9yeSBkaXJlY3RseSB1c2VkIGJ5IEZsdXR0ZXIKICAvLy8gZm9yIG91dHB1dCBidWZmZXJzLiBRdWFydHogbWlnaHQgYWxsb2NhdGVkIGV4dHJhIGJ1ZmZlcnMgZm9yIGNvbXBvc2l0aW5nIHRoZSBGbHV0dGVyIHN1cmZhY2VzCiAgLy8vIGFuZCB0aGUgcGxhdGZvcm0gdmlldy4KICAvLy8KICAvLy8gV2l0aCBhIHBsYXRmb3JtIHZpZXcgaW4gdGhlIHNjZW5lLCBRdWFydHogaGFzIHRvIGNvbXBvc2l0ZSB0aGUgdHdvIEZsdXR0ZXIgc3VyZmFjZXMgYW5kIHRoZQogIC8vLyBlbWJlZGRlZCBVSVZpZXcuIEluIGFkZGl0aW9uIHRvIHRoYXQsIG9uIGlPUyB2ZXJzaW9ucyBncmVhdGVyIHRoYW4gOSwgdGhlIEZsdXR0ZXIgZnJhbWVzIGFyZQogIC8vLyBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgVUlWaWV3IGZyYW1lcyBhZGRpbmcgYWRkaXRpb25hbCBwZXJmb3JtYW5jZSBvdmVyaGVhZC4KICB2b2lkIGFkZFBsYXRmb3JtVmlldygKICAgIGludCB2aWV3SWQsIHsKICAgIE9mZnNldCBvZmZzZXQgPSBPZmZzZXQuemVybywKICAgIGRvdWJsZSB3aWR0aCA9IDAuMCwKICAgIGRvdWJsZSBoZWlnaHQgPSAwLjAsCiAgfSkgewogICAgYXNzZXJ0KG9mZnNldCAhPSBudWxsLCAnT2Zmc2V0IGFyZ3VtZW50IHdhcyBudWxsJyk7CiAgICBfYWRkUGxhdGZvcm1WaWV3KG9mZnNldC5keCwgb2Zmc2V0LmR5LCB3aWR0aCwgaGVpZ2h0LCB2aWV3SWQpOwogIH0KCiAgdm9pZCBfYWRkUGxhdGZvcm1WaWV3KGRvdWJsZSBkeCwgZG91YmxlIGR5LCBkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQsIGludCB2aWV3SWQpCiAgICAgIG5hdGl2ZSAnU2NlbmVCdWlsZGVyX2FkZFBsYXRmb3JtVmlldyc7CgogIC8vLyAoRnVjaHNpYS1vbmx5KSBBZGRzIGEgc2NlbmUgcmVuZGVyZWQgYnkgYW5vdGhlciBhcHBsaWNhdGlvbiB0byB0aGUgc2NlbmUKICAvLy8gZm9yIHRoaXMgYXBwbGljYXRpb24uCiAgdm9pZCBhZGRDaGlsZFNjZW5lKHsKICAgIE9mZnNldCBvZmZzZXQgPSBPZmZzZXQuemVybywKICAgIGRvdWJsZSB3aWR0aCA9IDAuMCwKICAgIGRvdWJsZSBoZWlnaHQgPSAwLjAsCiAgICBTY2VuZUhvc3Qgc2NlbmVIb3N0LAogICAgYm9vbCBoaXRUZXN0YWJsZSA9IHRydWUsCiAgfSkgewogICAgX2FkZENoaWxkU2NlbmUob2Zmc2V0LmR4LCBvZmZzZXQuZHksIHdpZHRoLCBoZWlnaHQsIHNjZW5lSG9zdCwgaGl0VGVzdGFibGUpOwogIH0KCiAgdm9pZCBfYWRkQ2hpbGRTY2VuZShkb3VibGUgZHgsIGRvdWJsZSBkeSwgZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0LCBTY2VuZUhvc3Qgc2NlbmVIb3N0LAogICAgICBib29sIGhpdFRlc3RhYmxlKSBuYXRpdmUgJ1NjZW5lQnVpbGRlcl9hZGRDaGlsZFNjZW5lJzsKCiAgLy8vIFNldHMgYSB0aHJlc2hvbGQgYWZ0ZXIgd2hpY2ggYWRkaXRpb25hbCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gc2hvdWxkIGJlIHJlY29yZGVkLgogIC8vLwogIC8vLyBDdXJyZW50bHkgdGhpcyBpbnRlcmZhY2UgaXMgZGlmZmljdWx0IHRvIHVzZSBieSBlbmQtZGV2ZWxvcGVycy4gSWYgeW91J3JlCiAgLy8vIGludGVyZXN0ZWQgaW4gdXNpbmcgdGhpcyBmZWF0dXJlLCBwbGVhc2UgY29udGFjdCBbZmx1dHRlci1kZXZdKGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZm9ydW0vIyFmb3J1bS9mbHV0dGVyLWRldikuCiAgLy8vIFdlJ2xsIGhvcGVmdWxseSBiZSBhYmxlIHRvIGZpZ3VyZSBvdXQgaG93IHRvIG1ha2UgdGhpcyBmZWF0dXJlIG1vcmUgdXNlZnVsCiAgLy8vIHRvIHlvdS4KICB2b2lkIHNldFJhc3Rlcml6ZXJUcmFjaW5nVGhyZXNob2xkKGludCBmcmFtZUludGVydmFsKQogICAgICBuYXRpdmUgJ1NjZW5lQnVpbGRlcl9zZXRSYXN0ZXJpemVyVHJhY2luZ1RocmVzaG9sZCc7CgogIC8vLyBTZXRzIHdoZXRoZXIgdGhlIHJhc3RlciBjYWNoZSBzaG91bGQgY2hlY2tlcmJvYXJkIGNhY2hlZCBlbnRyaWVzLiBUaGlzIGlzCiAgLy8vIG9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCiAgLy8vCiAgLy8vIFRoZSBjb21wb3NpdG9yIGNhbiBzb21ldGltZXMgZGVjaWRlIHRvIGNhY2hlIGNlcnRhaW4gcG9ydGlvbnMgb2YgdGhlCiAgLy8vIHdpZGdldCBoaWVyYXJjaHkuIFN1Y2ggcG9ydGlvbnMgdHlwaWNhbGx5IGRvbid0IGNoYW5nZSBvZnRlbiBmcm9tIGZyYW1lIHRvCiAgLy8vIGZyYW1lIGFuZCBhcmUgZXhwZW5zaXZlIHRvIHJlbmRlci4gVGhpcyBjYW4gc3BlZWQgdXAgb3ZlcmFsbCByZW5kZXJpbmcuIEhvd2V2ZXIsCiAgLy8vIHRoZXJlIGlzIGNlcnRhaW4gdXBmcm9udCBjb3N0IHRvIGNvbnN0cnVjdGluZyB0aGVzZSBjYWNoZSBlbnRyaWVzLiBBbmQsIGlmCiAgLy8vIHRoZSBjYWNoZSBlbnRyaWVzIGFyZSBub3QgdXNlZCB2ZXJ5IG9mdGVuLCB0aGlzIGNvc3QgbWF5IG5vdCBiZSB3b3J0aCB0aGUKICAvLy8gc3BlZWR1cCBpbiByZW5kZXJpbmcgb2Ygc3Vic2VxdWVudCBmcmFtZXMuIElmIHRoZSBkZXZlbG9wZXIgd2FudHMgdG8gYmUgY2VydGFpbgogIC8vLyB0aGF0IHBvcHVsYXRpbmcgdGhlIHJhc3RlciBjYWNoZSBpcyBub3QgY2F1c2luZyBzdHV0dGVycywgdGhpcyBvcHRpb24gY2FuIGJlCiAgLy8vIHNldC4gRGVwZW5kaW5nIG9uIHRoZSBvYnNlcnZhdGlvbnMgbWFkZSwgaGludHMgY2FuIGJlIHByb3ZpZGVkIHRvIHRoZSBjb21wb3NpdG9yCiAgLy8vIHRoYXQgYWlkIGl0IGluIG1ha2luZyBiZXR0ZXIgZGVjaXNpb25zIGFib3V0IGNhY2hpbmcuCiAgLy8vCiAgLy8vIEN1cnJlbnRseSB0aGlzIGludGVyZmFjZSBpcyBkaWZmaWN1bHQgdG8gdXNlIGJ5IGVuZC1kZXZlbG9wZXJzLiBJZiB5b3UncmUKICAvLy8gaW50ZXJlc3RlZCBpbiB1c2luZyB0aGlzIGZlYXR1cmUsIHBsZWFzZSBjb250YWN0IFtmbHV0dGVyLWRldl0oaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9mb3J1bS8jIWZvcnVtL2ZsdXR0ZXItZGV2KS4KICB2b2lkIHNldENoZWNrZXJib2FyZFJhc3RlckNhY2hlSW1hZ2VzKGJvb2wgY2hlY2tlcmJvYXJkKQogICAgICBuYXRpdmUgJ1NjZW5lQnVpbGRlcl9zZXRDaGVja2VyYm9hcmRSYXN0ZXJDYWNoZUltYWdlcyc7CgogIC8vLyBTZXRzIHdoZXRoZXIgdGhlIGNvbXBvc2l0b3Igc2hvdWxkIGNoZWNrZXJib2FyZCBsYXllcnMgdGhhdCBhcmUgcmVuZGVyZWQKICAvLy8gdG8gb2Zmc2NyZWVuIGJpdG1hcHMuCiAgLy8vCiAgLy8vIFRoaXMgaXMgb25seSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KICB2b2lkIHNldENoZWNrZXJib2FyZE9mZnNjcmVlbkxheWVycyhib29sIGNoZWNrZXJib2FyZCkKICAgICAgbmF0aXZlICdTY2VuZUJ1aWxkZXJfc2V0Q2hlY2tlcmJvYXJkT2Zmc2NyZWVuTGF5ZXJzJzsKCiAgLy8vIEZpbmlzaGVzIGJ1aWxkaW5nIHRoZSBzY2VuZS4KICAvLy8KICAvLy8gUmV0dXJucyBhIFtTY2VuZV0gY29udGFpbmluZyB0aGUgb2JqZWN0cyB0aGF0IGhhdmUgYmVlbiBhZGRlZCB0bwogIC8vLyB0aGlzIHNjZW5lIGJ1aWxkZXIuIFRoZSBbU2NlbmVdIGNhbiB0aGVuIGJlIGRpc3BsYXllZCBvbiB0aGUKICAvLy8gc2NyZWVuIHdpdGggW1dpbmRvdy5yZW5kZXJdLgogIC8vLwogIC8vLyBBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHRoZSBzY2VuZSBidWlsZGVyIG9iamVjdCBpcyBpbnZhbGlkIGFuZAogIC8vLyBjYW5ub3QgYmUgdXNlZCBmdXJ0aGVyLgogIFNjZW5lIGJ1aWxkKCkgbmF0aXZlICdTY2VuZUJ1aWxkZXJfYnVpbGQnOwp9CgovLy8gKEZ1Y2hzaWEtb25seSkgSG9zdHMgY29udGVudCBwcm92aWRlZCBieSBhbm90aGVyIGFwcGxpY2F0aW9uLgpjbGFzcyBTY2VuZUhvc3QgZXh0ZW5kcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczIgewogIC8vLyBDcmVhdGVzIGEgaG9zdCBmb3IgYSBjaGlsZCBzY2VuZSdzIGNvbnRlbnQuCiAgLy8vCiAgLy8vIFRoZSBWaWV3SG9sZGVyIHRva2VuIGlzIGJvdW5kIHRvIGEgVmlld0hvbGRlciBzY2VuZSBncmFwaCBub2RlIHdoaWNoIGFjdHMKICAvLy8gYXMgYSBjb250YWluZXIgZm9yIHRoZSBjaGlsZCdzIGNvbnRlbnQuICBUaGUgY3JlYXRvciBvZiB0aGUgU2NlbmVIb3N0IGlzCiAgLy8vIHJlc3BvbnNpYmxlIGZvciBzZW5kaW5nIHRoZSBjb3JyZXNwb25kaW5nIFZpZXdUb2tlbiB0byB0aGUgY2hpbGQuCiAgLy8vCiAgLy8vIFRoZSBWaWV3SG9sZGVyIHRva2VuIGlzIGEgZGFydDp6aXJjb24gSGFuZGxlLCBidXQgdGhhdCB0eXBlIGlzbid0CiAgLy8vIGF2YWlsYWJsZSBoZXJlLiBUaGlzIGlzIGNhbGxlZCBieSBDaGlsZFZpZXdDb25uZWN0aW9uIGluCiAgLy8vIC8vdG9wYXovcHVibGljL2RhcnQvZnVjaHNpYV9zY2VuaWNfZmx1dHRlci8uCiAgLy8vCiAgLy8vIFRoZSBTY2VuZUhvc3QgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBwcm92aWRlZCBWaWV3SG9sZGVyIHRva2VuLgogIFNjZW5lSG9zdCgKICAgIGR5bmFtaWMgdmlld0hvbGRlclRva2VuLAogICAgdm9pZCBGdW5jdGlvbigpIHZpZXdDb25uZWN0ZWRDYWxsYmFjaywKICAgIHZvaWQgRnVuY3Rpb24oKSB2aWV3RGlzY29ubmVjdGVkQ2FsbGJhY2ssCiAgICB2b2lkIEZ1bmN0aW9uKGJvb2wpIHZpZXdTdGF0ZUNoYW5nZWRDYWxsYmFjaywKICApIHsKICAgIF9jb25zdHJ1Y3RvcigKICAgICAgICB2aWV3SG9sZGVyVG9rZW4sIHZpZXdDb25uZWN0ZWRDYWxsYmFjaywgdmlld0Rpc2Nvbm5lY3RlZENhbGxiYWNrLCB2aWV3U3RhdGVDaGFuZ2VkQ2FsbGJhY2spOwogIH0KCiAgdm9pZCBfY29uc3RydWN0b3IoCiAgICBkeW5hbWljIHZpZXdIb2xkZXJUb2tlbiwKICAgIHZvaWQgRnVuY3Rpb24oKSB2aWV3Q29ubmVjdGVkQ2FsbGJhY2ssCiAgICB2b2lkIEZ1bmN0aW9uKCkgdmlld0Rpc2Nvbm5lY3RlZENhbGxiYWNrLAogICAgdm9pZCBGdW5jdGlvbihib29sKSB2aWV3U3RhdGVDaGFuZ2VkQ2FsbGJhYywKICApIG5hdGl2ZSAnU2NlbmVIb3N0X2NvbnN0cnVjdG9yJzsKCiAgLy8vIFJlbGVhc2VzIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBTY2VuZUhvc3QuCiAgLy8vCiAgLy8vIEFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgdGhlIFNjZW5lSG9zdCBjYW5ub3QgYmUgdXNlZCBmdXJ0aGVyLgogIHZvaWQgZGlzcG9zZSgpIG5hdGl2ZSAnU2NlbmVIb3N0X2Rpc3Bvc2UnOwoKICAvLy8gU2V0IHByb3BlcnRpZXMgb24gdGhlIGxpbmtlZCBzY2VuZS4gIFRoZXNlIHByb3BlcnRpZXMgaW5jbHVkZSBpdHMgYm91bmRzLAogIC8vLyBhcyB3ZWxsIGFzIHdoZXRoZXIgaXQgY2FuIGJlIHRoZSB0YXJnZXQgb2YgZm9jdXMgZXZlbnRzIG9yIG5vdC4KICB2b2lkIHNldFByb3BlcnRpZXMoCiAgICBkb3VibGUgd2lkdGgsCiAgICBkb3VibGUgaGVpZ2h0LAogICAgZG91YmxlIGluc2V0VG9wLAogICAgZG91YmxlIGluc2V0UmlnaHQsCiAgICBkb3VibGUgaW5zZXRCb3R0b20sCiAgICBkb3VibGUgaW5zZXRMZWZ0LAogICAgYm9vbCBmb2N1c2FibGUsCiAgKSBuYXRpdmUgJ1NjZW5lSG9zdF9zZXRQcm9wZXJ0aWVzJzsKfQqDNwA8Sh4BEQE2BDQEOxwaL0ocBjYcDQFPSTElNAZYBAFcATEGSCkCATEDREtNSzQ8LAEcAR0FTwssAUAFSBooASgMIkBQV1EUEQQCATIESQQ7UFArEzlKAgEwBEYEODZHAgEyBEgEODhJAgE6BEkEODlKAgEyBEgEODhJAgExBEcEODdIAgE1BEsEODtMAgE2BEsEODtMAgE4BE4EOD5PAgE0BEoEODpLAgE3BE0EOD1OAgEzBDoEQEUoNi4cExQEOQEgBU83QgFPPhAbFQgBDis3Vj4BIhMKAREEAVYQGxUILEUsEwoRBAFJAUVBNxAkQ0EzCCETChEEAT0GTAYwT09JFQY6S1JPLQZNSh4GUExOUBcVBjcmGyMHJkdYJBIEAVcBOwZRBi0GNwY3IA8RIAdETiQSBAFSAUQGPgYtBjcGXEskESgiByInRj1aJBIEAWQqAUwGRgYtBjcGXEsmEygjByInRydUJBIEAUIrAT0GOQYtBjcGXEskESgiByInRiZIJBIEAV0BPAZMT1AQBi0GNwY3IhEhIQdFJUkkEgQBXwFABk8SBi0GNwY3KholBxxJRSJjJBIEAVsBQQZfEQYtBjcGNyoaJQccSUUiYyQSBAFbAUMGUCUGLQY3BjcwGigHTCxZJBIEAWEBPwZNLAYtBjcGNygTExskB0hRYSQSBAEfFRscGh07AUgXBlBaSAZTVyUGLQY3BlwjLw8WERcjJwdLWl4kEgQBWkEBPQZQUU8NDyIgBgwEASkBQAZPQgZQTzwGNzAyEE4BTzw0AVgSCgFOCAEvARMKAU4oBAFSAUgGTk0zBkVITENHTwZHN0NDQ0YrBk0YYkBiBAEfGBESEBMxASUGNRMTFyAhB0o3BAFFKAErBlIGSk1RSktRNxMVIRgZGQc4SQQBYigBPQZLBmVcBhwGYmQdBmJjUhgSIRgZBzhDBAFXLQFPHBchGBkZHQdRBAFePQFYBlB7UQ44OwFQKgZLUVdRUFZTVzwGUHs7PgFPHAYyOTwBIwZHQyMGSx4tAgFCMzIGUE9IBkg/MwZGDR0rLjIGEmUEARUdKy4xJAE8BkktAVBGFhITFRcYFhQmAgEYZGFydDp1aS9jb21wb3NpdGluZy5kYXJ0MG9yZy1kYXJ0bGFuZy1zZGs6Ly8vZmx1dHRlci9saWIvdWkvZ2VvbWV0cnkuZGFydMAA/OYvLyBDb3B5cmlnaHQgMjAxMyBUaGUgRmx1dHRlciBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgovLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQudWk7CgovLy8gQmFzZSBjbGFzcyBmb3IgW1NpemVdIGFuZCBbT2Zmc2V0XSwgd2hpY2ggYXJlIGJvdGggd2F5cyB0byBkZXNjcmliZQovLy8gYSBkaXN0YW5jZSBhcyBhIHR3by1kaW1lbnNpb25hbCBheGlzLWFsaWduZWQgdmVjdG9yLgphYnN0cmFjdCBjbGFzcyBPZmZzZXRCYXNlIHsKICAvLy8gQWJzdHJhY3QgY29uc3QgY29uc3RydWN0b3IuIFRoaXMgY29uc3RydWN0b3IgZW5hYmxlcyBzdWJjbGFzc2VzIHRvIHByb3ZpZGUKICAvLy8gY29uc3QgY29uc3RydWN0b3JzIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZCBpbiBjb25zdCBleHByZXNzaW9ucy4KICAvLy8KICAvLy8gVGhlIGZpcnN0IGFyZ3VtZW50IHNldHMgdGhlIGhvcml6b250YWwgY29tcG9uZW50LCBhbmQgdGhlIHNlY29uZCB0aGUKICAvLy8gdmVydGljYWwgY29tcG9uZW50LgogIGNvbnN0IE9mZnNldEJhc2UoZG91YmxlIGR4LCBkb3VibGUgZHkpCiAgICAgIDogX2R4ID0gZHggPz8gMC4wLAogICAgICAgIF9keSA9IGR5ID8/IDAuMCwKICAgICAgICBhc3NlcnQoZHggIT0gbnVsbCksCiAgICAgICAgYXNzZXJ0KGR5ICE9IG51bGwpOwoKICBmaW5hbCBkb3VibGUgX2R4OwogIGZpbmFsIGRvdWJsZSBfZHk7CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgZWl0aGVyIGNvbXBvbmVudCBpcyBbZG91YmxlLmluZmluaXR5XSwgYW5kIGZhbHNlIGlmIGJvdGgKICAvLy8gYXJlIGZpbml0ZSAob3IgbmVnYXRpdmUgaW5maW5pdHksIG9yIE5hTikuCiAgLy8vCiAgLy8vIFRoaXMgaXMgZGlmZmVyZW50IHRoYW4gY29tcGFyaW5nIGZvciBlcXVhbGl0eSB3aXRoIGFuIGluc3RhbmNlIHRoYXQgaGFzCiAgLy8vIF9ib3RoXyBjb21wb25lbnRzIHNldCB0byBbZG91YmxlLmluZmluaXR5XS4KICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICAqIFtpc0Zpbml0ZV0sIHdoaWNoIGlzIHRydWUgaWYgYm90aCBjb21wb25lbnRzIGFyZSBmaW5pdGUgKGFuZCBub3QgTmFOKS4KICBib29sIGdldCBpc0luZmluaXRlID0+IF9keCA+PSBkb3VibGUuaW5maW5pdHkgfHwgX2R5ID49IGRvdWJsZS5pbmZpbml0eTsKCiAgLy8vIFdoZXRoZXIgYm90aCBjb21wb25lbnRzIGFyZSBmaW5pdGUgKG5laXRoZXIgaW5maW5pdGUgbm9yIE5hTikuCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgKiBbaXNJbmZpbml0ZV0sIHdoaWNoIHJldHVybnMgdHJ1ZSBpZiBlaXRoZXIgY29tcG9uZW50IGlzIGVxdWFsIHRvCiAgLy8vICAgIHBvc2l0aXZlIGluZmluaXR5LgogIGJvb2wgZ2V0IGlzRmluaXRlID0+IF9keC5pc0Zpbml0ZSAmJiBfZHkuaXNGaW5pdGU7CgogIC8vLyBMZXNzLXRoYW4gb3BlcmF0b3IuIENvbXBhcmVzIGFuIFtPZmZzZXRdIG9yIFtTaXplXSB0byBhbm90aGVyIFtPZmZzZXRdIG9yCiAgLy8vIFtTaXplXSwgYW5kIHJldHVybnMgdHJ1ZSBpZiBib3RoIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCB2YWx1ZXMgb2YgdGhlCiAgLy8vIGxlZnQtaGFuZC1zaWRlIG9wZXJhbmQgYXJlIHNtYWxsZXIgdGhhbiB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgdmFsdWVzCiAgLy8vIG9mIHRoZSByaWdodC1oYW5kLXNpZGUgb3BlcmFuZCByZXNwZWN0aXZlbHkuIFJldHVybnMgZmFsc2Ugb3RoZXJ3aXNlLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgcGFydGlhbCBvcmRlcmluZy4gSXQgaXMgcG9zc2libGUgZm9yIHR3byB2YWx1ZXMgdG8gYmUgbmVpdGhlcgogIC8vLyBsZXNzLCBub3IgZ3JlYXRlciB0aGFuLCBub3IgZXF1YWwgdG8sIGFub3RoZXIuCiAgYm9vbCBvcGVyYXRvciA8KE9mZnNldEJhc2Ugb3RoZXIpID0+IF9keCA8IG90aGVyLl9keCAmJiBfZHkgPCBvdGhlci5fZHk7CgogIC8vLyBMZXNzLXRoYW4tb3ItZXF1YWwtdG8gb3BlcmF0b3IuIENvbXBhcmVzIGFuIFtPZmZzZXRdIG9yIFtTaXplXSB0byBhbm90aGVyCiAgLy8vIFtPZmZzZXRdIG9yIFtTaXplXSwgYW5kIHJldHVybnMgdHJ1ZSBpZiBib3RoIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbAogIC8vLyB2YWx1ZXMgb2YgdGhlIGxlZnQtaGFuZC1zaWRlIG9wZXJhbmQgYXJlIHNtYWxsZXIgdGhhbiBvciBlcXVhbCB0byB0aGUKICAvLy8gaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgdmFsdWVzIG9mIHRoZSByaWdodC1oYW5kLXNpZGUgb3BlcmFuZAogIC8vLyByZXNwZWN0aXZlbHkuIFJldHVybnMgZmFsc2Ugb3RoZXJ3aXNlLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgcGFydGlhbCBvcmRlcmluZy4gSXQgaXMgcG9zc2libGUgZm9yIHR3byB2YWx1ZXMgdG8gYmUgbmVpdGhlcgogIC8vLyBsZXNzLCBub3IgZ3JlYXRlciB0aGFuLCBub3IgZXF1YWwgdG8sIGFub3RoZXIuCiAgYm9vbCBvcGVyYXRvciA8PShPZmZzZXRCYXNlIG90aGVyKSA9PiBfZHggPD0gb3RoZXIuX2R4ICYmIF9keSA8PSBvdGhlci5fZHk7CgogIC8vLyBHcmVhdGVyLXRoYW4gb3BlcmF0b3IuIENvbXBhcmVzIGFuIFtPZmZzZXRdIG9yIFtTaXplXSB0byBhbm90aGVyIFtPZmZzZXRdCiAgLy8vIG9yIFtTaXplXSwgYW5kIHJldHVybnMgdHJ1ZSBpZiBib3RoIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCB2YWx1ZXMgb2YKICAvLy8gdGhlIGxlZnQtaGFuZC1zaWRlIG9wZXJhbmQgYXJlIGJpZ2dlciB0aGFuIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbAogIC8vLyB2YWx1ZXMgb2YgdGhlIHJpZ2h0LWhhbmQtc2lkZSBvcGVyYW5kIHJlc3BlY3RpdmVseS4gUmV0dXJucyBmYWxzZQogIC8vLyBvdGhlcndpc2UuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBwYXJ0aWFsIG9yZGVyaW5nLiBJdCBpcyBwb3NzaWJsZSBmb3IgdHdvIHZhbHVlcyB0byBiZSBuZWl0aGVyCiAgLy8vIGxlc3MsIG5vciBncmVhdGVyIHRoYW4sIG5vciBlcXVhbCB0bywgYW5vdGhlci4KICBib29sIG9wZXJhdG9yID4oT2Zmc2V0QmFzZSBvdGhlcikgPT4gX2R4ID4gb3RoZXIuX2R4ICYmIF9keSA+IG90aGVyLl9keTsKCiAgLy8vIEdyZWF0ZXItdGhhbi1vci1lcXVhbC10byBvcGVyYXRvci4gQ29tcGFyZXMgYW4gW09mZnNldF0gb3IgW1NpemVdIHRvCiAgLy8vIGFub3RoZXIgW09mZnNldF0gb3IgW1NpemVdLCBhbmQgcmV0dXJucyB0cnVlIGlmIGJvdGggdGhlIGhvcml6b250YWwgYW5kCiAgLy8vIHZlcnRpY2FsIHZhbHVlcyBvZiB0aGUgbGVmdC1oYW5kLXNpZGUgb3BlcmFuZCBhcmUgYmlnZ2VyIHRoYW4gb3IgZXF1YWwgdG8KICAvLy8gdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHZhbHVlcyBvZiB0aGUgcmlnaHQtaGFuZC1zaWRlIG9wZXJhbmQKICAvLy8gcmVzcGVjdGl2ZWx5LiBSZXR1cm5zIGZhbHNlIG90aGVyd2lzZS4KICAvLy8KICAvLy8gVGhpcyBpcyBhIHBhcnRpYWwgb3JkZXJpbmcuIEl0IGlzIHBvc3NpYmxlIGZvciB0d28gdmFsdWVzIHRvIGJlIG5laXRoZXIKICAvLy8gbGVzcywgbm9yIGdyZWF0ZXIgdGhhbiwgbm9yIGVxdWFsIHRvLCBhbm90aGVyLgogIGJvb2wgb3BlcmF0b3IgPj0oT2Zmc2V0QmFzZSBvdGhlcikgPT4gX2R4ID49IG90aGVyLl9keCAmJiBfZHkgPj0gb3RoZXIuX2R5OwoKICAvLy8gRXF1YWxpdHkgb3BlcmF0b3IuIENvbXBhcmVzIGFuIFtPZmZzZXRdIG9yIFtTaXplXSB0byBhbm90aGVyIFtPZmZzZXRdIG9yCiAgLy8vIFtTaXplXSwgYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgdmFsdWVzIG9mIHRoZQogIC8vLyBsZWZ0LWhhbmQtc2lkZSBvcGVyYW5kIGFyZSBlcXVhbCB0byB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgdmFsdWVzIG9mCiAgLy8vIHRoZSByaWdodC1oYW5kLXNpZGUgb3BlcmFuZCByZXNwZWN0aXZlbHkuIFJldHVybnMgZmFsc2Ugb3RoZXJ3aXNlLgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0oZHluYW1pYyBvdGhlcikgewogICAgcmV0dXJuIG90aGVyIGlzIE9mZnNldEJhc2UKICAgICAgICAmJiBvdGhlci5fZHggPT0gX2R4CiAgICAgICAgJiYgb3RoZXIuX2R5ID09IF9keTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gaGFzaFZhbHVlcyhfZHgsIF9keSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdPZmZzZXRCYXNlKCR7X2R4Py50b1N0cmluZ0FzRml4ZWQoMSl9LCAke19keT8udG9TdHJpbmdBc0ZpeGVkKDEpfSknOwp9CgovLy8gQW4gaW1tdXRhYmxlIDJEIGZsb2F0aW5nLXBvaW50IG9mZnNldC4KLy8vCi8vLyBHZW5lcmFsbHkgc3BlYWtpbmcsIE9mZnNldHMgY2FuIGJlIGludGVycHJldGVkIGluIHR3byB3YXlzOgovLy8KLy8vIDEuIEFzIHJlcHJlc2VudGluZyBhIHBvaW50IGluIENhcnRlc2lhbiBzcGFjZSBhIHNwZWNpZmllZCBkaXN0YW5jZSBmcm9tIGEKLy8vICAgIHNlcGFyYXRlbHktbWFpbnRhaW5lZCBvcmlnaW4uIEZvciBleGFtcGxlLCB0aGUgdG9wLWxlZnQgcG9zaXRpb24gb2YKLy8vICAgIGNoaWxkcmVuIGluIHRoZSBbUmVuZGVyQm94XSBwcm90b2NvbCBpcyB0eXBpY2FsbHkgcmVwcmVzZW50ZWQgYXMgYW4KLy8vICAgIFtPZmZzZXRdIGZyb20gdGhlIHRvcCBsZWZ0IG9mIHRoZSBwYXJlbnQgYm94LgovLy8KLy8vIDIuIEFzIGEgdmVjdG9yIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gY29vcmRpbmF0ZXMuIEZvciBleGFtcGxlLCB3aGVuCi8vLyAgICBwYWludGluZyBhIFtSZW5kZXJPYmplY3RdLCB0aGUgcGFyZW50IGlzIHBhc3NlZCBhbiBbT2Zmc2V0XSBmcm9tIHRoZQovLy8gICAgc2NyZWVuJ3Mgb3JpZ2luIHdoaWNoIGl0IGNhbiBhZGQgdG8gdGhlIG9mZnNldHMgb2YgaXRzIGNoaWxkcmVuIHRvIGZpbmQKLy8vICAgIHRoZSBbT2Zmc2V0XSBmcm9tIHRoZSBzY3JlZW4ncyBvcmlnaW4gdG8gZWFjaCBvZiB0aGUgY2hpbGRyZW4uCi8vLwovLy8gQmVjYXVzZSBhIHBhcnRpY3VsYXIgW09mZnNldF0gY2FuIGJlIGludGVycHJldGVkIGFzIG9uZSBzZW5zZSBhdCBvbmUgdGltZQovLy8gdGhlbiBhcyB0aGUgb3RoZXIgc2Vuc2UgYXQgYSBsYXRlciB0aW1lLCB0aGUgc2FtZSBjbGFzcyBpcyB1c2VkIGZvciBib3RoCi8vLyBzZW5zZXMuCi8vLwovLy8gU2VlIGFsc286Ci8vLwovLy8gICogW1NpemVdLCB3aGljaCByZXByZXNlbnRzIGEgdmVjdG9yIGRlc2NyaWJpbmcgdGhlIHNpemUgb2YgYSByZWN0YW5nbGUuCmNsYXNzIE9mZnNldCBleHRlbmRzIE9mZnNldEJhc2UgewogIC8vLyBDcmVhdGVzIGFuIG9mZnNldC4gVGhlIGZpcnN0IGFyZ3VtZW50IHNldHMgW2R4XSwgdGhlIGhvcml6b250YWwgY29tcG9uZW50LAogIC8vLyBhbmQgdGhlIHNlY29uZCBzZXRzIFtkeV0sIHRoZSB2ZXJ0aWNhbCBjb21wb25lbnQuCiAgY29uc3QgT2Zmc2V0KGRvdWJsZSBkeCwgZG91YmxlIGR5KSA6IHN1cGVyKGR4LCBkeSk7CgogIC8vLyBDcmVhdGVzIGFuIG9mZnNldCBmcm9tIGl0cyBbZGlyZWN0aW9uXSBhbmQgW2Rpc3RhbmNlXS4KICAvLy8KICAvLy8gVGhlIGRpcmVjdGlvbiBpcyBpbiByYWRpYW5zIGNsb2Nrd2lzZSBmcm9tIHRoZSBwb3NpdGl2ZSB4LWF4aXMuCiAgLy8vCiAgLy8vIFRoZSBkaXN0YW5jZSBjYW4gYmUgb21pdHRlZCwgdG8gY3JlYXRlIGEgdW5pdCB2ZWN0b3IgKGRpc3RhbmNlID0gMS4wKS4KICBmYWN0b3J5IE9mZnNldC5mcm9tRGlyZWN0aW9uKGRvdWJsZSBkaXJlY3Rpb24sIFsgZG91YmxlIGRpc3RhbmNlID0gMS4wIF0pIHsKICAgIHJldHVybiBPZmZzZXQoZGlzdGFuY2UgKiBtYXRoLmNvcyhkaXJlY3Rpb24pLCBkaXN0YW5jZSAqIG1hdGguc2luKGRpcmVjdGlvbikpOwogIH0KCiAgLy8vIFRoZSB4IGNvbXBvbmVudCBvZiB0aGUgb2Zmc2V0LgogIC8vLwogIC8vLyBUaGUgeSBjb21wb25lbnQgaXMgZ2l2ZW4gYnkgW2R5XS4KICBkb3VibGUgZ2V0IGR4ID0+IF9keDsKCiAgLy8vIFRoZSB5IGNvbXBvbmVudCBvZiB0aGUgb2Zmc2V0LgogIC8vLwogIC8vLyBUaGUgeCBjb21wb25lbnQgaXMgZ2l2ZW4gYnkgW2R4XS4KICBkb3VibGUgZ2V0IGR5ID0+IF9keTsKCiAgLy8vIFRoZSBtYWduaXR1ZGUgb2YgdGhlIG9mZnNldC4KICAvLy8KICAvLy8gSWYgeW91IG5lZWQgdGhpcyB2YWx1ZSB0byBjb21wYXJlIGl0IHRvIGFub3RoZXIgW09mZnNldF0ncyBkaXN0YW5jZSwKICAvLy8gY29uc2lkZXIgdXNpbmcgW2Rpc3RhbmNlU3F1YXJlZF0gaW5zdGVhZCwgc2luY2UgaXQgaXMgY2hlYXBlciB0byBjb21wdXRlLgogIGRvdWJsZSBnZXQgZGlzdGFuY2UgPT4gbWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTsKCiAgLy8vIFRoZSBzcXVhcmUgb2YgdGhlIG1hZ25pdHVkZSBvZiB0aGUgb2Zmc2V0LgogIC8vLwogIC8vLyBUaGlzIGlzIGNoZWFwZXIgdGhhbiBjb21wdXRpbmcgdGhlIFtkaXN0YW5jZV0gaXRzZWxmLgogIGRvdWJsZSBnZXQgZGlzdGFuY2VTcXVhcmVkID0+IGR4ICogZHggKyBkeSAqIGR5OwoKICAvLy8gVGhlIGFuZ2xlIG9mIHRoaXMgb2Zmc2V0IGFzIHJhZGlhbnMgY2xvY2t3aXNlIGZyb20gdGhlIHBvc2l0aXZlIHgtYXhpcywgaW4KICAvLy8gdGhlIHJhbmdlIC1bcGldIHRvIFtwaV0sIGFzc3VtaW5nIHBvc2l0aXZlIHZhbHVlcyBvZiB0aGUgeC1heGlzIGdvIHRvIHRoZQogIC8vLyBsZWZ0IGFuZCBwb3NpdGl2ZSB2YWx1ZXMgb2YgdGhlIHktYXhpcyBnbyBkb3duLgogIC8vLwogIC8vLyBaZXJvIG1lYW5zIHRoYXQgW2R5XSBpcyB6ZXJvIGFuZCBbZHhdIGlzIHplcm8gb3IgcG9zaXRpdmUuCiAgLy8vCiAgLy8vIFZhbHVlcyBmcm9tIHplcm8gdG8gW3BpXS8yIGluZGljYXRlIHBvc2l0aXZlIHZhbHVlcyBvZiBbZHhdIGFuZCBbZHldLCB0aGUKICAvLy8gYm90dG9tLXJpZ2h0IHF1YWRyYW50LgogIC8vLwogIC8vLyBWYWx1ZXMgZnJvbSBbcGldLzIgdG8gW3BpXSBpbmRpY2F0ZSBuZWdhdGl2ZSB2YWx1ZXMgb2YgW2R4XSBhbmQgcG9zaXRpdmUKICAvLy8gdmFsdWVzIG9mIFtkeV0sIHRoZSBib3R0b20tbGVmdCBxdWFkcmFudC4KICAvLy8KICAvLy8gVmFsdWVzIGZyb20gemVybyB0byAtW3BpXS8yIGluZGljYXRlIHBvc2l0aXZlIHZhbHVlcyBvZiBbZHhdIGFuZCBuZWdhdGl2ZQogIC8vLyB2YWx1ZXMgb2YgW2R5XSwgdGhlIHRvcC1yaWdodCBxdWFkcmFudC4KICAvLy8KICAvLy8gVmFsdWVzIGZyb20gLVtwaV0vMiB0byAtW3BpXSBpbmRpY2F0ZSBuZWdhdGl2ZSB2YWx1ZXMgb2YgW2R4XSBhbmQgW2R5XSwKICAvLy8gdGhlIHRvcC1sZWZ0IHF1YWRyYW50LgogIC8vLwogIC8vLyBXaGVuIFtkeV0gaXMgemVybyBhbmQgW2R4XSBpcyBuZWdhdGl2ZSwgdGhlIFtkaXJlY3Rpb25dIGlzIFtwaV0uCiAgLy8vCiAgLy8vIFdoZW4gW2R4XSBpcyB6ZXJvLCBbZGlyZWN0aW9uXSBpcyBbcGldLzIgaWYgW2R5XSBpcyBwb3NpdGl2ZSBhbmQgLVtwaV0vMgogIC8vLyBpZiBbZHldIGlzIG5lZ2F0aXZlLgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogW2Rpc3RhbmNlXSwgdG8gY29tcHV0ZSB0aGUgbWFnbml0dWRlIG9mIHRoZSB2ZWN0b3IuCiAgLy8vICAqIFtDYW52YXMucm90YXRlXSwgd2hpY2ggdXNlcyB0aGUgc2FtZSBjb252ZW50aW9uIGZvciBpdHMgYW5nbGUuCiAgZG91YmxlIGdldCBkaXJlY3Rpb24gPT4gbWF0aC5hdGFuMihkeSwgZHgpOwoKICAvLy8gQW4gb2Zmc2V0IHdpdGggemVybyBtYWduaXR1ZGUuCiAgLy8vCiAgLy8vIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBvcmlnaW4gb2YgYSBjb29yZGluYXRlIHNwYWNlLgogIHN0YXRpYyBjb25zdCBPZmZzZXQgemVybyA9IE9mZnNldCgwLjAsIDAuMCk7CgogIC8vLyBBbiBvZmZzZXQgd2l0aCBpbmZpbml0ZSB4IGFuZCB5IGNvbXBvbmVudHMuCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgKiBbaXNJbmZpbml0ZV0sIHdoaWNoIGNoZWNrcyB3aGV0aGVyIGVpdGhlciBjb21wb25lbnQgaXMgaW5maW5pdGUuCiAgLy8vICAqIFtpc0Zpbml0ZV0sIHdoaWNoIGNoZWNrcyB3aGV0aGVyIGJvdGggY29tcG9uZW50cyBhcmUgZmluaXRlLgogIC8vIFRoaXMgaXMgaW5jbHVkZWQgZm9yIGNvbXBsZXRlbmVzcywgYmVjYXVzZSBbU2l6ZS5pbmZpbml0ZV0gZXhpc3RzLgogIHN0YXRpYyBjb25zdCBPZmZzZXQgaW5maW5pdGUgPSBPZmZzZXQoZG91YmxlLmluZmluaXR5LCBkb3VibGUuaW5maW5pdHkpOwoKICAvLy8gUmV0dXJucyBhIG5ldyBvZmZzZXQgd2l0aCB0aGUgeCBjb21wb25lbnQgc2NhbGVkIGJ5IGBzY2FsZVhgIGFuZCB0aGUgeQogIC8vLyBjb21wb25lbnQgc2NhbGVkIGJ5IGBzY2FsZVlgLgogIC8vLwogIC8vLyBJZiB0aGUgdHdvIHNjYWxlIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUsIGNvbnNpZGVyIHVzaW5nIHRoZSBgKmAgb3BlcmF0b3IKICAvLy8gaW5zdGVhZDoKICAvLy8KICAvLy8gYGBgZGFydAogIC8vLyBPZmZzZXQgYSA9IGNvbnN0IE9mZnNldCgxMC4wLCAxMC4wKTsKICAvLy8gT2Zmc2V0IGIgPSBhICogMi4wOyAvLyBzYW1lIGFzOiBhLnNjYWxlKDIuMCwgMi4wKQogIC8vLyBgYGAKICAvLy8KICAvLy8gSWYgdGhlIHR3byBhcmd1bWVudHMgYXJlIC0xLCBjb25zaWRlciB1c2luZyB0aGUgdW5hcnkgYC1gIG9wZXJhdG9yCiAgLy8vIGluc3RlYWQ6CiAgLy8vCiAgLy8vIGBgYGRhcnQKICAvLy8gT2Zmc2V0IGEgPSBjb25zdCBPZmZzZXQoMTAuMCwgMTAuMCk7CiAgLy8vIE9mZnNldCBiID0gLWE7IC8vIHNhbWUgYXM6IGEuc2NhbGUoLTEuMCwgLTEuMCkKICAvLy8gYGBgCiAgT2Zmc2V0IHNjYWxlKGRvdWJsZSBzY2FsZVgsIGRvdWJsZSBzY2FsZVkpID0+IE9mZnNldChkeCAqIHNjYWxlWCwgZHkgKiBzY2FsZVkpOwoKICAvLy8gUmV0dXJucyBhIG5ldyBvZmZzZXQgd2l0aCB0cmFuc2xhdGVYIGFkZGVkIHRvIHRoZSB4IGNvbXBvbmVudCBhbmQKICAvLy8gdHJhbnNsYXRlWSBhZGRlZCB0byB0aGUgeSBjb21wb25lbnQuCiAgLy8vCiAgLy8vIElmIHRoZSBhcmd1bWVudHMgY29tZSBmcm9tIGFub3RoZXIgW09mZnNldF0sIGNvbnNpZGVyIHVzaW5nIHRoZSBgK2Agb3IgYC1gCiAgLy8vIG9wZXJhdG9ycyBpbnN0ZWFkOgogIC8vLwogIC8vLyBgYGBkYXJ0CiAgLy8vIE9mZnNldCBhID0gY29uc3QgT2Zmc2V0KDEwLjAsIDEwLjApOwogIC8vLyBPZmZzZXQgYiA9IGNvbnN0IE9mZnNldCgxMC4wLCAxMC4wKTsKICAvLy8gT2Zmc2V0IGMgPSBhICsgYjsgLy8gc2FtZSBhczogYS50cmFuc2xhdGUoYi5keCwgYi5keSkKICAvLy8gT2Zmc2V0IGQgPSBhIC0gYjsgLy8gc2FtZSBhczogYS50cmFuc2xhdGUoLWIuZHgsIC1iLmR5KQogIC8vLyBgYGAKICBPZmZzZXQgdHJhbnNsYXRlKGRvdWJsZSB0cmFuc2xhdGVYLCBkb3VibGUgdHJhbnNsYXRlWSkgPT4gT2Zmc2V0KGR4ICsgdHJhbnNsYXRlWCwgZHkgKyB0cmFuc2xhdGVZKTsKCiAgLy8vIFVuYXJ5IG5lZ2F0aW9uIG9wZXJhdG9yLgogIC8vLwogIC8vLyBSZXR1cm5zIGFuIG9mZnNldCB3aXRoIHRoZSBjb29yZGluYXRlcyBuZWdhdGVkLgogIC8vLwogIC8vLyBJZiB0aGUgW09mZnNldF0gcmVwcmVzZW50cyBhbiBhcnJvdyBvbiBhIHBsYW5lLCB0aGlzIG9wZXJhdG9yIHJldHVybnMgdGhlCiAgLy8vIHNhbWUgYXJyb3cgYnV0IHBvaW50aW5nIGluIHRoZSByZXZlcnNlIGRpcmVjdGlvbi4KICBPZmZzZXQgb3BlcmF0b3IgLSgpID0+IE9mZnNldCgtZHgsIC1keSk7CgogIC8vLyBCaW5hcnkgc3VidHJhY3Rpb24gb3BlcmF0b3IuCiAgLy8vCiAgLy8vIFJldHVybnMgYW4gb2Zmc2V0IHdob3NlIFtkeF0gdmFsdWUgaXMgdGhlIGxlZnQtaGFuZC1zaWRlIG9wZXJhbmQncyBbZHhdCiAgLy8vIG1pbnVzIHRoZSByaWdodC1oYW5kLXNpZGUgb3BlcmFuZCdzIFtkeF0gYW5kIHdob3NlIFtkeV0gdmFsdWUgaXMgdGhlCiAgLy8vIGxlZnQtaGFuZC1zaWRlIG9wZXJhbmQncyBbZHldIG1pbnVzIHRoZSByaWdodC1oYW5kLXNpZGUgb3BlcmFuZCdzIFtkeV0uCiAgLy8vCiAgLy8vIFNlZSBhbHNvIFt0cmFuc2xhdGVdLgogIE9mZnNldCBvcGVyYXRvciAtKE9mZnNldCBvdGhlcikgPT4gT2Zmc2V0KGR4IC0gb3RoZXIuZHgsIGR5IC0gb3RoZXIuZHkpOwoKICAvLy8gQmluYXJ5IGFkZGl0aW9uIG9wZXJhdG9yLgogIC8vLwogIC8vLyBSZXR1cm5zIGFuIG9mZnNldCB3aG9zZSBbZHhdIHZhbHVlIGlzIHRoZSBzdW0gb2YgdGhlIFtkeF0gdmFsdWVzIG9mIHRoZQogIC8vLyB0d28gb3BlcmFuZHMsIGFuZCB3aG9zZSBbZHldIHZhbHVlIGlzIHRoZSBzdW0gb2YgdGhlIFtkeV0gdmFsdWVzIG9mIHRoZQogIC8vLyB0d28gb3BlcmFuZHMuCiAgLy8vCiAgLy8vIFNlZSBhbHNvIFt0cmFuc2xhdGVdLgogIE9mZnNldCBvcGVyYXRvciArKE9mZnNldCBvdGhlcikgPT4gT2Zmc2V0KGR4ICsgb3RoZXIuZHgsIGR5ICsgb3RoZXIuZHkpOwoKICAvLy8gTXVsdGlwbGljYXRpb24gb3BlcmF0b3IuCiAgLy8vCiAgLy8vIFJldHVybnMgYW4gb2Zmc2V0IHdob3NlIGNvb3JkaW5hdGVzIGFyZSB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlCiAgLy8vIGxlZnQtaGFuZC1zaWRlIG9wZXJhbmQgKGFuIE9mZnNldCkgbXVsdGlwbGllZCBieSB0aGUgc2NhbGFyCiAgLy8vIHJpZ2h0LWhhbmQtc2lkZSBvcGVyYW5kIChhIGRvdWJsZSkuCiAgLy8vCiAgLy8vIFNlZSBhbHNvIFtzY2FsZV0uCiAgT2Zmc2V0IG9wZXJhdG9yICooZG91YmxlIG9wZXJhbmQpID0+IE9mZnNldChkeCAqIG9wZXJhbmQsIGR5ICogb3BlcmFuZCk7CgogIC8vLyBEaXZpc2lvbiBvcGVyYXRvci4KICAvLy8KICAvLy8gUmV0dXJucyBhbiBvZmZzZXQgd2hvc2UgY29vcmRpbmF0ZXMgYXJlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUKICAvLy8gbGVmdC1oYW5kLXNpZGUgb3BlcmFuZCAoYW4gT2Zmc2V0KSBkaXZpZGVkIGJ5IHRoZSBzY2FsYXIgcmlnaHQtaGFuZC1zaWRlCiAgLy8vIG9wZXJhbmQgKGEgZG91YmxlKS4KICAvLy8KICAvLy8gU2VlIGFsc28gW3NjYWxlXS4KICBPZmZzZXQgb3BlcmF0b3IgLyhkb3VibGUgb3BlcmFuZCkgPT4gT2Zmc2V0KGR4IC8gb3BlcmFuZCwgZHkgLyBvcGVyYW5kKTsKCiAgLy8vIEludGVnZXIgKHRydW5jYXRpbmcpIGRpdmlzaW9uIG9wZXJhdG9yLgogIC8vLwogIC8vLyBSZXR1cm5zIGFuIG9mZnNldCB3aG9zZSBjb29yZGluYXRlcyBhcmUgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZQogIC8vLyBsZWZ0LWhhbmQtc2lkZSBvcGVyYW5kIChhbiBPZmZzZXQpIGRpdmlkZWQgYnkgdGhlIHNjYWxhciByaWdodC1oYW5kLXNpZGUKICAvLy8gb3BlcmFuZCAoYSBkb3VibGUpLCByb3VuZGVkIHRvd2FyZHMgemVyby4KICBPZmZzZXQgb3BlcmF0b3Igfi8oZG91YmxlIG9wZXJhbmQpID0+IE9mZnNldCgoZHggfi8gb3BlcmFuZCkudG9Eb3VibGUoKSwgKGR5IH4vIG9wZXJhbmQpLnRvRG91YmxlKCkpOwoKICAvLy8gTW9kdWxvIChyZW1haW5kZXIpIG9wZXJhdG9yLgogIC8vLwogIC8vLyBSZXR1cm5zIGFuIG9mZnNldCB3aG9zZSBjb29yZGluYXRlcyBhcmUgdGhlIHJlbWFpbmRlciBvZiBkaXZpZGluZyB0aGUKICAvLy8gY29vcmRpbmF0ZXMgb2YgdGhlIGxlZnQtaGFuZC1zaWRlIG9wZXJhbmQgKGFuIE9mZnNldCkgYnkgdGhlIHNjYWxhcgogIC8vLyByaWdodC1oYW5kLXNpZGUgb3BlcmFuZCAoYSBkb3VibGUpLgogIE9mZnNldCBvcGVyYXRvciAlKGRvdWJsZSBvcGVyYW5kKSA9PiBPZmZzZXQoZHggJSBvcGVyYW5kLCBkeSAlIG9wZXJhbmQpOwoKICAvLy8gUmVjdGFuZ2xlIGNvbnN0cnVjdG9yIG9wZXJhdG9yLgogIC8vLwogIC8vLyBDb21iaW5lcyBhbiBbT2Zmc2V0XSBhbmQgYSBbU2l6ZV0gdG8gZm9ybSBhIFtSZWN0XSB3aG9zZSB0b3AtbGVmdAogIC8vLyBjb29yZGluYXRlIGlzIHRoZSBwb2ludCBnaXZlbiBieSBhZGRpbmcgdGhpcyBvZmZzZXQsIHRoZSBsZWZ0LWhhbmQtc2lkZQogIC8vLyBvcGVyYW5kLCB0byB0aGUgb3JpZ2luLCBhbmQgd2hvc2Ugc2l6ZSBpcyB0aGUgcmlnaHQtaGFuZC1zaWRlIG9wZXJhbmQuCiAgLy8vCiAgLy8vIGBgYGRhcnQKICAvLy8gUmVjdCBteVJlY3QgPSBPZmZzZXQuemVybyAmIGNvbnN0IFNpemUoMTAwLjAsIDEwMC4wKTsKICAvLy8gLy8gc2FtZSBhczogUmVjdC5mcm9tTFRXSCgwLjAsIDAuMCwgMTAwLjAsIDEwMC4wKQogIC8vLyBgYGAKICBSZWN0IG9wZXJhdG9yICYoU2l6ZSBvdGhlcikgPT4gUmVjdC5mcm9tTFRXSChkeCwgZHksIG90aGVyLndpZHRoLCBvdGhlci5oZWlnaHQpOwoKICAvLy8gTGluZWFybHkgaW50ZXJwb2xhdGUgYmV0d2VlbiB0d28gb2Zmc2V0cy4KICAvLy8KICAvLy8gSWYgZWl0aGVyIG9mZnNldCBpcyBudWxsLCB0aGlzIGZ1bmN0aW9uIGludGVycG9sYXRlcyBmcm9tIFtPZmZzZXQuemVyb10uCiAgLy8vCiAgLy8vIFRoZSBgdGAgYXJndW1lbnQgcmVwcmVzZW50cyBwb3NpdGlvbiBvbiB0aGUgdGltZWxpbmUsIHdpdGggMC4wIG1lYW5pbmcKICAvLy8gdGhhdCB0aGUgaW50ZXJwb2xhdGlvbiBoYXMgbm90IHN0YXJ0ZWQsIHJldHVybmluZyBgYWAgKG9yIHNvbWV0aGluZwogIC8vLyBlcXVpdmFsZW50IHRvIGBhYCksIDEuMCBtZWFuaW5nIHRoYXQgdGhlIGludGVycG9sYXRpb24gaGFzIGZpbmlzaGVkLAogIC8vLyByZXR1cm5pbmcgYGJgIChvciBzb21ldGhpbmcgZXF1aXZhbGVudCB0byBgYmApLCBhbmQgdmFsdWVzIGluIGJldHdlZW4KICAvLy8gbWVhbmluZyB0aGF0IHRoZSBpbnRlcnBvbGF0aW9uIGlzIGF0IHRoZSByZWxldmFudCBwb2ludCBvbiB0aGUgdGltZWxpbmUKICAvLy8gYmV0d2VlbiBgYWAgYW5kIGBiYC4gVGhlIGludGVycG9sYXRpb24gY2FuIGJlIGV4dHJhcG9sYXRlZCBiZXlvbmQgMC4wIGFuZAogIC8vLyAxLjAsIHNvIG5lZ2F0aXZlIHZhbHVlcyBhbmQgdmFsdWVzIGdyZWF0ZXIgdGhhbiAxLjAgYXJlIHZhbGlkIChhbmQgY2FuCiAgLy8vIGVhc2lseSBiZSBnZW5lcmF0ZWQgYnkgY3VydmVzIHN1Y2ggYXMgW0N1cnZlcy5lbGFzdGljSW5PdXRdKS4KICAvLy8KICAvLy8gVmFsdWVzIGZvciBgdGAgYXJlIHVzdWFsbHkgb2J0YWluZWQgZnJvbSBhbiBbQW5pbWF0aW9uPGRvdWJsZT5dLCBzdWNoIGFzCiAgLy8vIGFuIFtBbmltYXRpb25Db250cm9sbGVyXS4KICBzdGF0aWMgT2Zmc2V0IGxlcnAoT2Zmc2V0IGEsIE9mZnNldCBiLCBkb3VibGUgdCkgewogICAgYXNzZXJ0KHQgIT0gbnVsbCk7CiAgICBpZiAoYSA9PSBudWxsICYmIGIgPT0gbnVsbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICBpZiAoYSA9PSBudWxsKQogICAgICByZXR1cm4gYiAqIHQ7CiAgICBpZiAoYiA9PSBudWxsKQogICAgICByZXR1cm4gYSAqICgxLjAgLSB0KTsKICAgIHJldHVybiBPZmZzZXQobGVycERvdWJsZShhLmR4LCBiLmR4LCB0KSwgbGVycERvdWJsZShhLmR5LCBiLmR5LCB0KSk7CiAgfQoKICAvLy8gQ29tcGFyZXMgdHdvIE9mZnNldHMgZm9yIGVxdWFsaXR5LgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0oZHluYW1pYyBvdGhlcikgewogICAgcmV0dXJuIG90aGVyIGlzIE9mZnNldAogICAgICAgICYmIG90aGVyLmR4ID09IGR4CiAgICAgICAgJiYgb3RoZXIuZHkgPT0gZHk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IGhhc2hWYWx1ZXMoZHgsIGR5KTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ09mZnNldCgke2R4Py50b1N0cmluZ0FzRml4ZWQoMSl9LCAke2R5Py50b1N0cmluZ0FzRml4ZWQoMSl9KSc7Cn0KCi8vLyBIb2xkcyBhIDJEIGZsb2F0aW5nLXBvaW50IHNpemUuCi8vLwovLy8gWW91IGNhbiB0aGluayBvZiB0aGlzIGFzIGFuIFtPZmZzZXRdIGZyb20gdGhlIG9yaWdpbi4KY2xhc3MgU2l6ZSBleHRlbmRzIE9mZnNldEJhc2UgewogIC8vLyBDcmVhdGVzIGEgW1NpemVdIHdpdGggdGhlIGdpdmVuIFt3aWR0aF0gYW5kIFtoZWlnaHRdLgogIGNvbnN0IFNpemUoZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KSA6IHN1cGVyKHdpZHRoLCBoZWlnaHQpOwoKICAvLy8gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBbU2l6ZV0gdGhhdCBoYXMgdGhlIHNhbWUgdmFsdWVzIGFzIGFub3RoZXIuCiAgLy8gVXNlZCBieSB0aGUgcmVuZGVyaW5nIGxpYnJhcnkncyBfRGVidWdTaXplIGhhY2suCiAgU2l6ZS5jb3B5KFNpemUgc291cmNlKSA6IHN1cGVyKHNvdXJjZS53aWR0aCwgc291cmNlLmhlaWdodCk7CgogIC8vLyBDcmVhdGVzIGEgc3F1YXJlIFtTaXplXSB3aG9zZSBbd2lkdGhdIGFuZCBbaGVpZ2h0XSBhcmUgdGhlIGdpdmVuIGRpbWVuc2lvbi4KICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICAqIFtTaXplLmZyb21SYWRpdXNdLCB3aGljaCBpcyBtb3JlIGNvbnZlbmllbnQgd2hlbiB0aGUgYXZhaWxhYmxlIHNpemUKICAvLy8gICAgaXMgdGhlIHJhZGl1cyBvZiBhIGNpcmNsZS4KICBjb25zdCBTaXplLnNxdWFyZShkb3VibGUgZGltZW5zaW9uKSA6IHN1cGVyKGRpbWVuc2lvbiwgZGltZW5zaW9uKTsKCiAgLy8vIENyZWF0ZXMgYSBbU2l6ZV0gd2l0aCB0aGUgZ2l2ZW4gW3dpZHRoXSBhbmQgYW4gaW5maW5pdGUgW2hlaWdodF0uCiAgY29uc3QgU2l6ZS5mcm9tV2lkdGgoZG91YmxlIHdpZHRoKSA6IHN1cGVyKHdpZHRoLCBkb3VibGUuaW5maW5pdHkpOwoKICAvLy8gQ3JlYXRlcyBhIFtTaXplXSB3aXRoIHRoZSBnaXZlbiBbaGVpZ2h0XSBhbmQgYW4gaW5maW5pdGUgW3dpZHRoXS4KICBjb25zdCBTaXplLmZyb21IZWlnaHQoZG91YmxlIGhlaWdodCkgOiBzdXBlcihkb3VibGUuaW5maW5pdHksIGhlaWdodCk7CgogIC8vLyBDcmVhdGVzIGEgc3F1YXJlIFtTaXplXSB3aG9zZSBbd2lkdGhdIGFuZCBbaGVpZ2h0XSBhcmUgdHdpY2UgdGhlIGdpdmVuCiAgLy8vIGRpbWVuc2lvbi4KICAvLy8KICAvLy8gVGhpcyBpcyBhIHNxdWFyZSB0aGF0IGNvbnRhaW5zIGEgY2lyY2xlIHdpdGggdGhlIGdpdmVuIHJhZGl1cy4KICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICAqIFtTaXplLnNxdWFyZV0sIHdoaWNoIGNyZWF0ZXMgYSBzcXVhcmUgd2l0aCB0aGUgZ2l2ZW4gZGltZW5zaW9uLgogIGNvbnN0IFNpemUuZnJvbVJhZGl1cyhkb3VibGUgcmFkaXVzKSA6IHN1cGVyKHJhZGl1cyAqIDIuMCwgcmFkaXVzICogMi4wKTsKCiAgLy8vIFRoZSBob3Jpem9udGFsIGV4dGVudCBvZiB0aGlzIHNpemUuCiAgZG91YmxlIGdldCB3aWR0aCA9PiBfZHg7CgogIC8vLyBUaGUgdmVydGljYWwgZXh0ZW50IG9mIHRoaXMgc2l6ZS4KICBkb3VibGUgZ2V0IGhlaWdodCA9PiBfZHk7CgogIC8vLyBUaGUgYXNwZWN0IHJhdGlvIG9mIHRoaXMgc2l6ZS4KICAvLy8KICAvLy8gVGhpcyByZXR1cm5zIHRoZSBbd2lkdGhdIGRpdmlkZWQgYnkgdGhlIFtoZWlnaHRdLgogIC8vLwogIC8vLyBJZiB0aGUgW3dpZHRoXSBpcyB6ZXJvLCB0aGUgcmVzdWx0IHdpbGwgYmUgemVyby4gSWYgdGhlIFtoZWlnaHRdIGlzIHplcm8KICAvLy8gKGFuZCB0aGUgW3dpZHRoXSBpcyBub3QpLCB0aGUgcmVzdWx0IHdpbGwgYmUgW2RvdWJsZS5pbmZpbml0eV0gb3IKICAvLy8gW2RvdWJsZS5uZWdhdGl2ZUluZmluaXR5XSBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBzaWduIG9mIFt3aWR0aF0uCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgKiBbQXNwZWN0UmF0aW9dLCBhIHdpZGdldCBmb3IgZ2l2aW5nIGEgY2hpbGQgd2lkZ2V0IGEgc3BlY2lmaWMgYXNwZWN0CiAgLy8vICAgIHJhdGlvLgogIC8vLyAgKiBbRml0dGVkQm94XSwgYSB3aWRnZXQgdGhhdCAoaW4gbW9zdCBtb2RlcykgYXR0ZW1wdHMgdG8gbWFpbnRhaW4gYQogIC8vLyAgICBjaGlsZCB3aWRnZXQncyBhc3BlY3QgcmF0aW8gd2hpbGUgY2hhbmdpbmcgaXRzIHNpemUuCiAgZG91YmxlIGdldCBhc3BlY3RSYXRpbyB7CiAgICBpZiAoaGVpZ2h0ICE9IDAuMCkKICAgICAgcmV0dXJuIHdpZHRoIC8gaGVpZ2h0OwogICAgaWYgKHdpZHRoID4gMC4wKQogICAgICByZXR1cm4gZG91YmxlLmluZmluaXR5OwogICAgaWYgKHdpZHRoIDwgMC4wKQogICAgICByZXR1cm4gZG91YmxlLm5lZ2F0aXZlSW5maW5pdHk7CiAgICByZXR1cm4gMC4wOwogIH0KCiAgLy8vIEFuIGVtcHR5IHNpemUsIG9uZSB3aXRoIGEgemVybyB3aWR0aCBhbmQgYSB6ZXJvIGhlaWdodC4KICBzdGF0aWMgY29uc3QgU2l6ZSB6ZXJvID0gU2l6ZSgwLjAsIDAuMCk7CgogIC8vLyBBIHNpemUgd2hvc2UgW3dpZHRoXSBhbmQgW2hlaWdodF0gYXJlIGluZmluaXRlLgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogW2lzSW5maW5pdGVdLCB3aGljaCBjaGVja3Mgd2hldGhlciBlaXRoZXIgZGltZW5zaW9uIGlzIGluZmluaXRlLgogIC8vLyAgKiBbaXNGaW5pdGVdLCB3aGljaCBjaGVja3Mgd2hldGhlciBib3RoIGRpbWVuc2lvbnMgYXJlIGZpbml0ZS4KICBzdGF0aWMgY29uc3QgU2l6ZSBpbmZpbml0ZSA9IFNpemUoZG91YmxlLmluZmluaXR5LCBkb3VibGUuaW5maW5pdHkpOwoKICAvLy8gV2hldGhlciB0aGlzIHNpemUgZW5jbG9zZXMgYSBub24temVybyBhcmVhLgogIC8vLwogIC8vLyBOZWdhdGl2ZSBhcmVhcyBhcmUgY29uc2lkZXJlZCBlbXB0eS4KICBib29sIGdldCBpc0VtcHR5ID0+IHdpZHRoIDw9IDAuMCB8fCBoZWlnaHQgPD0gMC4wOwoKICAvLy8gQmluYXJ5IHN1YnRyYWN0aW9uIG9wZXJhdG9yIGZvciBbU2l6ZV0uCiAgLy8vCiAgLy8vIFN1YnRyYWN0aW5nIGEgW1NpemVdIGZyb20gYSBbU2l6ZV0gcmV0dXJucyB0aGUgW09mZnNldF0gdGhhdCBkZXNjcmliZXMgaG93CiAgLy8vIG11Y2ggYmlnZ2VyIHRoZSBsZWZ0LWhhbmQtc2lkZSBvcGVyYW5kIGlzIHRoYW4gdGhlIHJpZ2h0LWhhbmQtc2lkZQogIC8vLyBvcGVyYW5kLiBBZGRpbmcgdGhhdCByZXN1bHRpbmcgW09mZnNldF0gdG8gdGhlIFtTaXplXSB0aGF0IHdhcyB0aGUKICAvLy8gcmlnaHQtaGFuZC1zaWRlIG9wZXJhbmQgd291bGQgcmV0dXJuIGEgW1NpemVdIGVxdWFsIHRvIHRoZSBbU2l6ZV0gdGhhdCB3YXMKICAvLy8gdGhlIGxlZnQtaGFuZC1zaWRlIG9wZXJhbmQuIChpLmUuIGlmIGBzaXplQSAtIHNpemVCIC0+IG9mZnNldEFgLCB0aGVuCiAgLy8vIGBvZmZzZXRBICsgc2l6ZUIgLT4gc2l6ZUFgKQogIC8vLwogIC8vLyBTdWJ0cmFjdGluZyBhbiBbT2Zmc2V0XSBmcm9tIGEgW1NpemVdIHJldHVybnMgdGhlIFtTaXplXSB0aGF0IGlzIHNtYWxsZXIgdGhhbgogIC8vLyB0aGUgW1NpemVdIG9wZXJhbmQgYnkgdGhlIGRpZmZlcmVuY2UgZ2l2ZW4gYnkgdGhlIFtPZmZzZXRdIG9wZXJhbmQuIEluIG90aGVyCiAgLy8vIHdvcmRzLCB0aGUgcmV0dXJuZWQgW1NpemVdIGhhcyBhIFt3aWR0aF0gY29uc2lzdGluZyBvZiB0aGUgW3dpZHRoXSBvZiB0aGUKICAvLy8gbGVmdC1oYW5kLXNpZGUgb3BlcmFuZCBtaW51cyB0aGUgW09mZnNldC5keF0gZGltZW5zaW9uIG9mIHRoZQogIC8vLyByaWdodC1oYW5kLXNpZGUgb3BlcmFuZCwgYW5kIGEgW2hlaWdodF0gY29uc2lzdGluZyBvZiB0aGUgW2hlaWdodF0gb2YgdGhlCiAgLy8vIGxlZnQtaGFuZC1zaWRlIG9wZXJhbmQgbWludXMgdGhlIFtPZmZzZXQuZHldIGRpbWVuc2lvbiBvZiB0aGUKICAvLy8gcmlnaHQtaGFuZC1zaWRlIG9wZXJhbmQuCiAgT2Zmc2V0QmFzZSBvcGVyYXRvciAtKE9mZnNldEJhc2Ugb3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyBTaXplKQogICAgICByZXR1cm4gT2Zmc2V0KHdpZHRoIC0gb3RoZXIud2lkdGgsIGhlaWdodCAtIG90aGVyLmhlaWdodCk7CiAgICBpZiAob3RoZXIgaXMgT2Zmc2V0KQogICAgICByZXR1cm4gU2l6ZSh3aWR0aCAtIG90aGVyLmR4LCBoZWlnaHQgLSBvdGhlci5keSk7CiAgICB0aHJvdyBBcmd1bWVudEVycm9yKG90aGVyKTsKICB9CgogIC8vLyBCaW5hcnkgYWRkaXRpb24gb3BlcmF0b3IgZm9yIGFkZGluZyBhbiBbT2Zmc2V0XSB0byBhIFtTaXplXS4KICAvLy8KICAvLy8gUmV0dXJucyBhIFtTaXplXSB3aG9zZSBbd2lkdGhdIGlzIHRoZSBzdW0gb2YgdGhlIFt3aWR0aF0gb2YgdGhlCiAgLy8vIGxlZnQtaGFuZC1zaWRlIG9wZXJhbmQsIGEgW1NpemVdLCBhbmQgdGhlIFtPZmZzZXQuZHhdIGRpbWVuc2lvbiBvZiB0aGUKICAvLy8gcmlnaHQtaGFuZC1zaWRlIG9wZXJhbmQsIGFuIFtPZmZzZXRdLCBhbmQgd2hvc2UgW2hlaWdodF0gaXMgdGhlIHN1bSBvZiB0aGUKICAvLy8gW2hlaWdodF0gb2YgdGhlIGxlZnQtaGFuZC1zaWRlIG9wZXJhbmQgYW5kIHRoZSBbT2Zmc2V0LmR5XSBkaW1lbnNpb24gb2YKICAvLy8gdGhlIHJpZ2h0LWhhbmQtc2lkZSBvcGVyYW5kLgogIFNpemUgb3BlcmF0b3IgKyhPZmZzZXQgb3RoZXIpID0+IFNpemUod2lkdGggKyBvdGhlci5keCwgaGVpZ2h0ICsgb3RoZXIuZHkpOwoKICAvLy8gTXVsdGlwbGljYXRpb24gb3BlcmF0b3IuCiAgLy8vCiAgLy8vIFJldHVybnMgYSBbU2l6ZV0gd2hvc2UgZGltZW5zaW9ucyBhcmUgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGxlZnQtaGFuZC1zaWRlCiAgLy8vIG9wZXJhbmQgKGEgW1NpemVdKSBtdWx0aXBsaWVkIGJ5IHRoZSBzY2FsYXIgcmlnaHQtaGFuZC1zaWRlIG9wZXJhbmQgKGEKICAvLy8gW2RvdWJsZV0pLgogIFNpemUgb3BlcmF0b3IgKihkb3VibGUgb3BlcmFuZCkgPT4gU2l6ZSh3aWR0aCAqIG9wZXJhbmQsIGhlaWdodCAqIG9wZXJhbmQpOwoKICAvLy8gRGl2aXNpb24gb3BlcmF0b3IuCiAgLy8vCiAgLy8vIFJldHVybnMgYSBbU2l6ZV0gd2hvc2UgZGltZW5zaW9ucyBhcmUgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGxlZnQtaGFuZC1zaWRlCiAgLy8vIG9wZXJhbmQgKGEgW1NpemVdKSBkaXZpZGVkIGJ5IHRoZSBzY2FsYXIgcmlnaHQtaGFuZC1zaWRlIG9wZXJhbmQgKGEKICAvLy8gW2RvdWJsZV0pLgogIFNpemUgb3BlcmF0b3IgLyhkb3VibGUgb3BlcmFuZCkgPT4gU2l6ZSh3aWR0aCAvIG9wZXJhbmQsIGhlaWdodCAvIG9wZXJhbmQpOwoKICAvLy8gSW50ZWdlciAodHJ1bmNhdGluZykgZGl2aXNpb24gb3BlcmF0b3IuCiAgLy8vCiAgLy8vIFJldHVybnMgYSBbU2l6ZV0gd2hvc2UgZGltZW5zaW9ucyBhcmUgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGxlZnQtaGFuZC1zaWRlCiAgLy8vIG9wZXJhbmQgKGEgW1NpemVdKSBkaXZpZGVkIGJ5IHRoZSBzY2FsYXIgcmlnaHQtaGFuZC1zaWRlIG9wZXJhbmQgKGEKICAvLy8gW2RvdWJsZV0pLCByb3VuZGVkIHRvd2FyZHMgemVyby4KICBTaXplIG9wZXJhdG9yIH4vKGRvdWJsZSBvcGVyYW5kKSA9PiBTaXplKCh3aWR0aCB+LyBvcGVyYW5kKS50b0RvdWJsZSgpLCAoaGVpZ2h0IH4vIG9wZXJhbmQpLnRvRG91YmxlKCkpOwoKICAvLy8gTW9kdWxvIChyZW1haW5kZXIpIG9wZXJhdG9yLgogIC8vLwogIC8vLyBSZXR1cm5zIGEgW1NpemVdIHdob3NlIGRpbWVuc2lvbnMgYXJlIHRoZSByZW1haW5kZXIgb2YgZGl2aWRpbmcgdGhlCiAgLy8vIGxlZnQtaGFuZC1zaWRlIG9wZXJhbmQgKGEgW1NpemVdKSBieSB0aGUgc2NhbGFyIHJpZ2h0LWhhbmQtc2lkZSBvcGVyYW5kIChhCiAgLy8vIFtkb3VibGVdKS4KICBTaXplIG9wZXJhdG9yICUoZG91YmxlIG9wZXJhbmQpID0+IFNpemUod2lkdGggJSBvcGVyYW5kLCBoZWlnaHQgJSBvcGVyYW5kKTsKCiAgLy8vIFRoZSBsZXNzZXIgb2YgdGhlIG1hZ25pdHVkZXMgb2YgdGhlIFt3aWR0aF0gYW5kIHRoZSBbaGVpZ2h0XS4KICBkb3VibGUgZ2V0IHNob3J0ZXN0U2lkZSA9PiBtYXRoLm1pbih3aWR0aC5hYnMoKSwgaGVpZ2h0LmFicygpKTsKCiAgLy8vIFRoZSBncmVhdGVyIG9mIHRoZSBtYWduaXR1ZGVzIG9mIHRoZSBbd2lkdGhdIGFuZCB0aGUgW2hlaWdodF0uCiAgZG91YmxlIGdldCBsb25nZXN0U2lkZSA9PiBtYXRoLm1heCh3aWR0aC5hYnMoKSwgaGVpZ2h0LmFicygpKTsKCiAgLy8gQ29udmVuaWVuY2UgbWV0aG9kcyB0aGF0IGRvIHRoZSBlcXVpdmFsZW50IG9mIGNhbGxpbmcgdGhlIHNpbWlsYXJseSBuYW1lZAogIC8vIG1ldGhvZHMgb24gYSBSZWN0IGNvbnN0cnVjdGVkIGZyb20gdGhlIGdpdmVuIG9yaWdpbiBhbmQgdGhpcyBzaXplLgoKICAvLy8gVGhlIG9mZnNldCB0byB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSB0b3AgYW5kIGxlZnQgZWRnZXMgb2YgdGhlIHJlY3RhbmdsZQogIC8vLyBkZXNjcmliZWQgYnkgdGhlIGdpdmVuIFtPZmZzZXRdICh3aGljaCBpcyBpbnRlcnByZXRlZCBhcyB0aGUgdG9wLWxlZnQgY29ybmVyKQogIC8vLyBhbmQgdGhpcyBbU2l6ZV0uCiAgLy8vCiAgLy8vIFNlZSBhbHNvIFtSZWN0LnRvcExlZnRdLgogIE9mZnNldCB0b3BMZWZ0KE9mZnNldCBvcmlnaW4pID0+IG9yaWdpbjsKCiAgLy8vIFRoZSBvZmZzZXQgdG8gdGhlIGNlbnRlciBvZiB0aGUgdG9wIGVkZ2Ugb2YgdGhlIHJlY3RhbmdsZSBkZXNjcmliZWQgYnkgdGhlCiAgLy8vIGdpdmVuIG9mZnNldCAod2hpY2ggaXMgaW50ZXJwcmV0ZWQgYXMgdGhlIHRvcC1sZWZ0IGNvcm5lcikgYW5kIHRoaXMgc2l6ZS4KICAvLy8KICAvLy8gU2VlIGFsc28gW1JlY3QudG9wQ2VudGVyXS4KICBPZmZzZXQgdG9wQ2VudGVyKE9mZnNldCBvcmlnaW4pID0+IE9mZnNldChvcmlnaW4uZHggKyB3aWR0aCAvIDIuMCwgb3JpZ2luLmR5KTsKCiAgLy8vIFRoZSBvZmZzZXQgdG8gdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgdG9wIGFuZCByaWdodCBlZGdlcyBvZiB0aGUgcmVjdGFuZ2xlCiAgLy8vIGRlc2NyaWJlZCBieSB0aGUgZ2l2ZW4gb2Zmc2V0ICh3aGljaCBpcyBpbnRlcnByZXRlZCBhcyB0aGUgdG9wLWxlZnQgY29ybmVyKQogIC8vLyBhbmQgdGhpcyBzaXplLgogIC8vLwogIC8vLyBTZWUgYWxzbyBbUmVjdC50b3BSaWdodF0uCiAgT2Zmc2V0IHRvcFJpZ2h0KE9mZnNldCBvcmlnaW4pID0+IE9mZnNldChvcmlnaW4uZHggKyB3aWR0aCwgb3JpZ2luLmR5KTsKCiAgLy8vIFRoZSBvZmZzZXQgdG8gdGhlIGNlbnRlciBvZiB0aGUgbGVmdCBlZGdlIG9mIHRoZSByZWN0YW5nbGUgZGVzY3JpYmVkIGJ5IHRoZQogIC8vLyBnaXZlbiBvZmZzZXQgKHdoaWNoIGlzIGludGVycHJldGVkIGFzIHRoZSB0b3AtbGVmdCBjb3JuZXIpIGFuZCB0aGlzIHNpemUuCiAgLy8vCiAgLy8vIFNlZSBhbHNvIFtSZWN0LmNlbnRlckxlZnRdLgogIE9mZnNldCBjZW50ZXJMZWZ0KE9mZnNldCBvcmlnaW4pID0+IE9mZnNldChvcmlnaW4uZHgsIG9yaWdpbi5keSArIGhlaWdodCAvIDIuMCk7CgogIC8vLyBUaGUgb2Zmc2V0IHRvIHRoZSBwb2ludCBoYWxmd2F5IGJldHdlZW4gdGhlIGxlZnQgYW5kIHJpZ2h0IGFuZCB0aGUgdG9wIGFuZAogIC8vLyBib3R0b20gZWRnZXMgb2YgdGhlIHJlY3RhbmdsZSBkZXNjcmliZWQgYnkgdGhlIGdpdmVuIG9mZnNldCAod2hpY2ggaXMKICAvLy8gaW50ZXJwcmV0ZWQgYXMgdGhlIHRvcC1sZWZ0IGNvcm5lcikgYW5kIHRoaXMgc2l6ZS4KICAvLy8KICAvLy8gU2VlIGFsc28gW1JlY3QuY2VudGVyXS4KICBPZmZzZXQgY2VudGVyKE9mZnNldCBvcmlnaW4pID0+IE9mZnNldChvcmlnaW4uZHggKyB3aWR0aCAvIDIuMCwgb3JpZ2luLmR5ICsgaGVpZ2h0IC8gMi4wKTsKCiAgLy8vIFRoZSBvZmZzZXQgdG8gdGhlIGNlbnRlciBvZiB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgcmVjdGFuZ2xlIGRlc2NyaWJlZCBieSB0aGUKICAvLy8gZ2l2ZW4gb2Zmc2V0ICh3aGljaCBpcyBpbnRlcnByZXRlZCBhcyB0aGUgdG9wLWxlZnQgY29ybmVyKSBhbmQgdGhpcyBzaXplLgogIC8vLwogIC8vLyBTZWUgYWxzbyBbUmVjdC5jZW50ZXJMZWZ0XS4KICBPZmZzZXQgY2VudGVyUmlnaHQoT2Zmc2V0IG9yaWdpbikgPT4gT2Zmc2V0KG9yaWdpbi5keCArIHdpZHRoLCBvcmlnaW4uZHkgKyBoZWlnaHQgLyAyLjApOwoKICAvLy8gVGhlIG9mZnNldCB0byB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBib3R0b20gYW5kIGxlZnQgZWRnZXMgb2YgdGhlCiAgLy8vIHJlY3RhbmdsZSBkZXNjcmliZWQgYnkgdGhlIGdpdmVuIG9mZnNldCAod2hpY2ggaXMgaW50ZXJwcmV0ZWQgYXMgdGhlCiAgLy8vIHRvcC1sZWZ0IGNvcm5lcikgYW5kIHRoaXMgc2l6ZS4KICAvLy8KICAvLy8gU2VlIGFsc28gW1JlY3QuYm90dG9tTGVmdF0uCiAgT2Zmc2V0IGJvdHRvbUxlZnQoT2Zmc2V0IG9yaWdpbikgPT4gT2Zmc2V0KG9yaWdpbi5keCwgb3JpZ2luLmR5ICsgaGVpZ2h0KTsKCiAgLy8vIFRoZSBvZmZzZXQgdG8gdGhlIGNlbnRlciBvZiB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIHJlY3RhbmdsZSBkZXNjcmliZWQgYnkKICAvLy8gdGhlIGdpdmVuIG9mZnNldCAod2hpY2ggaXMgaW50ZXJwcmV0ZWQgYXMgdGhlIHRvcC1sZWZ0IGNvcm5lcikgYW5kIHRoaXMKICAvLy8gc2l6ZS4KICAvLy8KICAvLy8gU2VlIGFsc28gW1JlY3QuYm90dG9tTGVmdF0uCiAgT2Zmc2V0IGJvdHRvbUNlbnRlcihPZmZzZXQgb3JpZ2luKSA9PiBPZmZzZXQob3JpZ2luLmR4ICsgd2lkdGggLyAyLjAsIG9yaWdpbi5keSArIGhlaWdodCk7CgogIC8vLyBUaGUgb2Zmc2V0IHRvIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIGJvdHRvbSBhbmQgcmlnaHQgZWRnZXMgb2YgdGhlCiAgLy8vIHJlY3RhbmdsZSBkZXNjcmliZWQgYnkgdGhlIGdpdmVuIG9mZnNldCAod2hpY2ggaXMgaW50ZXJwcmV0ZWQgYXMgdGhlCiAgLy8vIHRvcC1sZWZ0IGNvcm5lcikgYW5kIHRoaXMgc2l6ZS4KICAvLy8KICAvLy8gU2VlIGFsc28gW1JlY3QuYm90dG9tUmlnaHRdLgogIE9mZnNldCBib3R0b21SaWdodChPZmZzZXQgb3JpZ2luKSA9PiBPZmZzZXQob3JpZ2luLmR4ICsgd2lkdGgsIG9yaWdpbi5keSArIGhlaWdodCk7CgogIC8vLyBXaGV0aGVyIHRoZSBwb2ludCBzcGVjaWZpZWQgYnkgdGhlIGdpdmVuIG9mZnNldCAod2hpY2ggaXMgYXNzdW1lZCB0byBiZQogIC8vLyByZWxhdGl2ZSB0byB0aGUgdG9wIGxlZnQgb2YgdGhlIHNpemUpIGxpZXMgYmV0d2VlbiB0aGUgbGVmdCBhbmQgcmlnaHQgYW5kCiAgLy8vIHRoZSB0b3AgYW5kIGJvdHRvbSBlZGdlcyBvZiBhIHJlY3RhbmdsZSBvZiB0aGlzIHNpemUuCiAgLy8vCiAgLy8vIFJlY3RhbmdsZXMgaW5jbHVkZSB0aGVpciB0b3AgYW5kIGxlZnQgZWRnZXMgYnV0IGV4Y2x1ZGUgdGhlaXIgYm90dG9tIGFuZAogIC8vLyByaWdodCBlZGdlcy4KICBib29sIGNvbnRhaW5zKE9mZnNldCBvZmZzZXQpIHsKICAgIHJldHVybiBvZmZzZXQuZHggPj0gMC4wICYmIG9mZnNldC5keCA8IHdpZHRoICYmIG9mZnNldC5keSA+PSAwLjAgJiYgb2Zmc2V0LmR5IDwgaGVpZ2h0OwogIH0KCiAgLy8vIEEgW1NpemVdIHdpdGggdGhlIFt3aWR0aF0gYW5kIFtoZWlnaHRdIHN3YXBwZWQuCiAgU2l6ZSBnZXQgZmxpcHBlZCA9PiBTaXplKGhlaWdodCwgd2lkdGgpOwoKICAvLy8gTGluZWFybHkgaW50ZXJwb2xhdGUgYmV0d2VlbiB0d28gc2l6ZXMKICAvLy8KICAvLy8gSWYgZWl0aGVyIHNpemUgaXMgbnVsbCwgdGhpcyBmdW5jdGlvbiBpbnRlcnBvbGF0ZXMgZnJvbSBbU2l6ZS56ZXJvXS4KICAvLy8KICAvLy8gVGhlIGB0YCBhcmd1bWVudCByZXByZXNlbnRzIHBvc2l0aW9uIG9uIHRoZSB0aW1lbGluZSwgd2l0aCAwLjAgbWVhbmluZwogIC8vLyB0aGF0IHRoZSBpbnRlcnBvbGF0aW9uIGhhcyBub3Qgc3RhcnRlZCwgcmV0dXJuaW5nIGBhYCAob3Igc29tZXRoaW5nCiAgLy8vIGVxdWl2YWxlbnQgdG8gYGFgKSwgMS4wIG1lYW5pbmcgdGhhdCB0aGUgaW50ZXJwb2xhdGlvbiBoYXMgZmluaXNoZWQsCiAgLy8vIHJldHVybmluZyBgYmAgKG9yIHNvbWV0aGluZyBlcXVpdmFsZW50IHRvIGBiYCksIGFuZCB2YWx1ZXMgaW4gYmV0d2VlbgogIC8vLyBtZWFuaW5nIHRoYXQgdGhlIGludGVycG9sYXRpb24gaXMgYXQgdGhlIHJlbGV2YW50IHBvaW50IG9uIHRoZSB0aW1lbGluZQogIC8vLyBiZXR3ZWVuIGBhYCBhbmQgYGJgLiBUaGUgaW50ZXJwb2xhdGlvbiBjYW4gYmUgZXh0cmFwb2xhdGVkIGJleW9uZCAwLjAgYW5kCiAgLy8vIDEuMCwgc28gbmVnYXRpdmUgdmFsdWVzIGFuZCB2YWx1ZXMgZ3JlYXRlciB0aGFuIDEuMCBhcmUgdmFsaWQgKGFuZCBjYW4KICAvLy8gZWFzaWx5IGJlIGdlbmVyYXRlZCBieSBjdXJ2ZXMgc3VjaCBhcyBbQ3VydmVzLmVsYXN0aWNJbk91dF0pLgogIC8vLwogIC8vLyBWYWx1ZXMgZm9yIGB0YCBhcmUgdXN1YWxseSBvYnRhaW5lZCBmcm9tIGFuIFtBbmltYXRpb248ZG91YmxlPl0sIHN1Y2ggYXMKICAvLy8gYW4gW0FuaW1hdGlvbkNvbnRyb2xsZXJdLgogIHN0YXRpYyBTaXplIGxlcnAoU2l6ZSBhLCBTaXplIGIsIGRvdWJsZSB0KSB7CiAgICBhc3NlcnQodCAhPSBudWxsKTsKICAgIGlmIChhID09IG51bGwgJiYgYiA9PSBudWxsKQogICAgICByZXR1cm4gbnVsbDsKICAgIGlmIChhID09IG51bGwpCiAgICAgIHJldHVybiBiICogdDsKICAgIGlmIChiID09IG51bGwpCiAgICAgIHJldHVybiBhICogKDEuMCAtIHQpOwogICAgcmV0dXJuIFNpemUobGVycERvdWJsZShhLndpZHRoLCBiLndpZHRoLCB0KSwgbGVycERvdWJsZShhLmhlaWdodCwgYi5oZWlnaHQsIHQpKTsKICB9CgogIC8vLyBDb21wYXJlcyB0d28gU2l6ZXMgZm9yIGVxdWFsaXR5LgogIC8vIFdlIGRvbid0IGNvbXBhcmUgdGhlIHJ1bnRpbWVUeXBlIGJlY2F1c2Ugb2YgX0RlYnVnU2l6ZSBpbiB0aGUgZnJhbWV3b3JrLgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0oZHluYW1pYyBvdGhlcikgewogICAgcmV0dXJuIG90aGVyIGlzIFNpemUKICAgICAgICAmJiBvdGhlci5fZHggPT0gX2R4CiAgICAgICAgJiYgb3RoZXIuX2R5ID09IF9keTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gaGFzaFZhbHVlcyhfZHgsIF9keSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdTaXplKCR7d2lkdGg/LnRvU3RyaW5nQXNGaXhlZCgxKX0sICR7aGVpZ2h0Py50b1N0cmluZ0FzRml4ZWQoMSl9KSc7Cn0KCi8vLyBBbiBpbW11dGFibGUsIDJELCBheGlzLWFsaWduZWQsIGZsb2F0aW5nLXBvaW50IHJlY3RhbmdsZSB3aG9zZSBjb29yZGluYXRlcwovLy8gYXJlIHJlbGF0aXZlIHRvIGEgZ2l2ZW4gb3JpZ2luLgovLy8KLy8vIEEgUmVjdCBjYW4gYmUgY3JlYXRlZCB3aXRoIG9uZSBpdHMgY29uc3RydWN0b3JzIG9yIGZyb20gYW4gW09mZnNldF0gYW5kIGEKLy8vIFtTaXplXSB1c2luZyB0aGUgYCZgIG9wZXJhdG9yOgovLy8KLy8vIGBgYGRhcnQKLy8vIFJlY3QgbXlSZWN0ID0gY29uc3QgT2Zmc2V0KDEuMCwgMi4wKSAmIGNvbnN0IFNpemUoMy4wLCA0LjApOwovLy8gYGBgCmNsYXNzIFJlY3QgewogIC8vLyBDb25zdHJ1Y3QgYSByZWN0YW5nbGUgZnJvbSBpdHMgbGVmdCwgdG9wLCByaWdodCwgYW5kIGJvdHRvbSBlZGdlcy4KICBAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCiAgICAgIGNvbnN0IFJlY3QuZnJvbUxUUkIoZG91YmxlIGxlZnQsIGRvdWJsZSB0b3AsIGRvdWJsZSByaWdodCwgZG91YmxlIGJvdHRvbSkKICAgICAgICAgIDogbGVmdCA9IGxlZnQgPz8gMC4wLAogICAgICAgICAgICByaWdodCA9IHJpZ2h0ID8/IDAuMCwKICAgICAgICAgICAgdG9wID0gdG9wID8/IDAuMCwKICAgICAgICAgICAgYm90dG9tID0gYm90dG9tID8/IDAuMCwKICAgICAgICAgICAgYXNzZXJ0KGxlZnQgIT0gbnVsbCksCiAgICAgICAgICAgIGFzc2VydCh0b3AgIT0gbnVsbCksCiAgICAgICAgICAgIGFzc2VydChyaWdodCAhPSBudWxsKSwKICAgICAgICAgICAgYXNzZXJ0KGJvdHRvbSAhPSBudWxsKTsKCiAgLy8vIENvbnN0cnVjdCBhIHJlY3RhbmdsZSBmcm9tIGl0cyBsZWZ0IGFuZCB0b3AgZWRnZXMsIGl0cyB3aWR0aCwgYW5kIGl0cwogIC8vLyBoZWlnaHQuCiAgLy8vCiAgLy8vIFRvIGNvbnN0cnVjdCBhIFtSZWN0XSBmcm9tIGFuIFtPZmZzZXRdIGFuZCBhIFtTaXplXSwgeW91IGNhbiB1c2UgdGhlCiAgLy8vIHJlY3RhbmdsZSBjb25zdHJ1Y3RvciBvcGVyYXRvciBgJmAuIFNlZSBbT2Zmc2V0LiZdLgogIGNvbnN0IFJlY3QuZnJvbUxUV0goZG91YmxlIGxlZnQsIGRvdWJsZSB0b3AsIGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCkgOiB0aGlzLmZyb21MVFJCKGxlZnQsIHRvcCwgbGVmdCArIHdpZHRoLCB0b3AgKyBoZWlnaHQpOwoKICAvLy8gQ29uc3RydWN0IGEgcmVjdGFuZ2xlIHRoYXQgYm91bmRzIHRoZSBnaXZlbiBjaXJjbGUuCiAgLy8vCiAgLy8vIFRoZSBgY2VudGVyYCBhcmd1bWVudCBpcyBhc3N1bWVkIHRvIGJlIGFuIG9mZnNldCBmcm9tIHRoZSBvcmlnaW4uCiAgUmVjdC5mcm9tQ2lyY2xlKHsgT2Zmc2V0IGNlbnRlciwgZG91YmxlIHJhZGl1cyB9KSA6IHRoaXMuZnJvbUNlbnRlcigKICAgIGNlbnRlcjogY2VudGVyLAogICAgd2lkdGg6IHJhZGl1cyAqIDIsCiAgICBoZWlnaHQ6IHJhZGl1cyAqIDIsCiAgKTsKCiAgLy8vIENvbnN0cnVjdHMgYSByZWN0YW5nbGUgZnJvbSBpdHMgY2VudGVyIHBvaW50LCB3aWR0aCwgYW5kIGhlaWdodC4KICAvLy8KICAvLy8gVGhlIGBjZW50ZXJgIGFyZ3VtZW50IGlzIGFzc3VtZWQgdG8gYmUgYW4gb2Zmc2V0IGZyb20gdGhlIG9yaWdpbi4KICBSZWN0LmZyb21DZW50ZXIoeyBPZmZzZXQgY2VudGVyLCBkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQgfSkgOiB0aGlzLmZyb21MVFJCKAogICAgY2VudGVyLmR4IC0gd2lkdGggLyAyLAogICAgY2VudGVyLmR5IC0gaGVpZ2h0IC8gMiwKICAgIGNlbnRlci5keCArIHdpZHRoIC8gMiwKICAgIGNlbnRlci5keSArIGhlaWdodCAvIDIsCiAgKTsKCiAgLy8vIENvbnN0cnVjdCB0aGUgc21hbGxlc3QgcmVjdGFuZ2xlIHRoYXQgZW5jbG9zZXMgdGhlIGdpdmVuIG9mZnNldHMsIHRyZWF0aW5nCiAgLy8vIHRoZW0gYXMgdmVjdG9ycyBmcm9tIHRoZSBvcmlnaW4uCiAgUmVjdC5mcm9tUG9pbnRzKE9mZnNldCBhLCBPZmZzZXQgYikgOiB0aGlzLmZyb21MVFJCKAogICAgbWF0aC5taW4oYS5keCwgYi5keCksCiAgICBtYXRoLm1pbihhLmR5LCBiLmR5KSwKICAgIG1hdGgubWF4KGEuZHgsIGIuZHgpLAogICAgbWF0aC5tYXgoYS5keSwgYi5keSksCiAgKTsKCiAgRmxvYXQzMkxpc3QgZ2V0IF92YWx1ZTMyID0+IEZsb2F0MzJMaXN0LmZyb21MaXN0KDxkb3VibGU+W2xlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbV0pOwoKICAvLy8gVGhlIG9mZnNldCBvZiB0aGUgbGVmdCBlZGdlIG9mIHRoaXMgcmVjdGFuZ2xlIGZyb20gdGhlIHggYXhpcy4KICBmaW5hbCBkb3VibGUgbGVmdDsKCiAgLy8vIFRoZSBvZmZzZXQgb2YgdGhlIHRvcCBlZGdlIG9mIHRoaXMgcmVjdGFuZ2xlIGZyb20gdGhlIHkgYXhpcy4KICBmaW5hbCBkb3VibGUgdG9wOwoKICAvLy8gVGhlIG9mZnNldCBvZiB0aGUgcmlnaHQgZWRnZSBvZiB0aGlzIHJlY3RhbmdsZSBmcm9tIHRoZSB4IGF4aXMuCiAgZmluYWwgZG91YmxlIHJpZ2h0OwoKICAvLy8gVGhlIG9mZnNldCBvZiB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhpcyByZWN0YW5nbGUgZnJvbSB0aGUgeSBheGlzLgogIGZpbmFsIGRvdWJsZSBib3R0b207CgogIC8vLyBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgbGVmdCBhbmQgcmlnaHQgZWRnZXMgb2YgdGhpcyByZWN0YW5nbGUuCiAgZG91YmxlIGdldCB3aWR0aCA9PiByaWdodCAtIGxlZnQ7CgogIC8vLyBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgdG9wIGFuZCBib3R0b20gZWRnZXMgb2YgdGhpcyByZWN0YW5nbGUuCiAgZG91YmxlIGdldCBoZWlnaHQgPT4gYm90dG9tIC0gdG9wOwoKICAvLy8gVGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHVwcGVyLWxlZnQgY29ybmVyIGFuZCB0aGUgbG93ZXItcmlnaHQgY29ybmVyIG9mCiAgLy8vIHRoaXMgcmVjdGFuZ2xlLgogIFNpemUgZ2V0IHNpemUgPT4gU2l6ZSh3aWR0aCwgaGVpZ2h0KTsKCiAgLy8vIFdoZXRoZXIgYW55IG9mIHRoZSBkaW1lbnNpb25zIGFyZSBgTmFOYC4KICBib29sIGdldCBoYXNOYU4gPT4gbGVmdC5pc05hTiB8fCB0b3AuaXNOYU4gfHwgcmlnaHQuaXNOYU4gfHwgYm90dG9tLmlzTmFOOwoKICAvLy8gQSByZWN0YW5nbGUgd2l0aCBsZWZ0LCB0b3AsIHJpZ2h0LCBhbmQgYm90dG9tIGVkZ2VzIGFsbCBhdCB6ZXJvLgogIHN0YXRpYyBjb25zdCBSZWN0IHplcm8gPSBSZWN0LmZyb21MVFJCKDAuMCwgMC4wLCAwLjAsIDAuMCk7CgogIHN0YXRpYyBjb25zdCBkb3VibGUgX2dpYW50U2NhbGFyID0gMS4wRSs5OyAvLyBtYXRjaGVzIGtHaWFudFJlY3QgZnJvbSBsYXllci5oCgogIC8vLyBBIHJlY3RhbmdsZSB0aGF0IGNvdmVycyB0aGUgZW50aXJlIGNvb3JkaW5hdGUgc3BhY2UuCiAgLy8vCiAgLy8vIFRoaXMgY292ZXJzIHRoZSBzcGFjZSBmcm9tIC0xZTksLTFlOSB0byAxZTksMWU5LgogIC8vLyBUaGlzIGlzIHRoZSBzcGFjZSBvdmVyIHdoaWNoIGdyYXBoaWNzIG9wZXJhdGlvbnMgYXJlIHZhbGlkLgogIHN0YXRpYyBjb25zdCBSZWN0IGxhcmdlc3QgPSBSZWN0LmZyb21MVFJCKC1fZ2lhbnRTY2FsYXIsIC1fZ2lhbnRTY2FsYXIsIF9naWFudFNjYWxhciwgX2dpYW50U2NhbGFyKTsKCiAgLy8vIFdoZXRoZXIgYW55IG9mIHRoZSBjb29yZGluYXRlcyBvZiB0aGlzIHJlY3RhbmdsZSBhcmUgZXF1YWwgdG8gcG9zaXRpdmUgaW5maW5pdHkuCiAgLy8gaW5jbHVkZWQgZm9yIGNvbnNpc3RlbmN5IHdpdGggT2Zmc2V0IGFuZCBTaXplCiAgYm9vbCBnZXQgaXNJbmZpbml0ZSB7CiAgICByZXR1cm4gbGVmdCA+PSBkb3VibGUuaW5maW5pdHkKICAgICAgICB8fCB0b3AgPj0gZG91YmxlLmluZmluaXR5CiAgICAgICAgfHwgcmlnaHQgPj0gZG91YmxlLmluZmluaXR5CiAgICAgICAgfHwgYm90dG9tID49IGRvdWJsZS5pbmZpbml0eTsKICB9CgogIC8vLyBXaGV0aGVyIGFsbCBjb29yZGluYXRlcyBvZiB0aGlzIHJlY3RhbmdsZSBhcmUgZmluaXRlLgogIGJvb2wgZ2V0IGlzRmluaXRlID0+IGxlZnQuaXNGaW5pdGUgJiYgdG9wLmlzRmluaXRlICYmIHJpZ2h0LmlzRmluaXRlICYmIGJvdHRvbS5pc0Zpbml0ZTsKCiAgLy8vIFdoZXRoZXIgdGhpcyByZWN0YW5nbGUgZW5jbG9zZXMgYSBub24temVybyBhcmVhLiBOZWdhdGl2ZSBhcmVhcyBhcmUKICAvLy8gY29uc2lkZXJlZCBlbXB0eS4KICBib29sIGdldCBpc0VtcHR5ID0+IGxlZnQgPj0gcmlnaHQgfHwgdG9wID49IGJvdHRvbTsKCiAgLy8vIFJldHVybnMgYSBuZXcgcmVjdGFuZ2xlIHRyYW5zbGF0ZWQgYnkgdGhlIGdpdmVuIG9mZnNldC4KICAvLy8KICAvLy8gVG8gdHJhbnNsYXRlIGEgcmVjdGFuZ2xlIGJ5IHNlcGFyYXRlIHggYW5kIHkgY29tcG9uZW50cyByYXRoZXIgdGhhbiBieSBhbgogIC8vLyBbT2Zmc2V0XSwgY29uc2lkZXIgW3RyYW5zbGF0ZV0uCiAgUmVjdCBzaGlmdChPZmZzZXQgb2Zmc2V0KSB7CiAgICByZXR1cm4gUmVjdC5mcm9tTFRSQihsZWZ0ICsgb2Zmc2V0LmR4LCB0b3AgKyBvZmZzZXQuZHksIHJpZ2h0ICsgb2Zmc2V0LmR4LCBib3R0b20gKyBvZmZzZXQuZHkpOwogIH0KCiAgLy8vIFJldHVybnMgYSBuZXcgcmVjdGFuZ2xlIHdpdGggdHJhbnNsYXRlWCBhZGRlZCB0byB0aGUgeCBjb21wb25lbnRzIGFuZAogIC8vLyB0cmFuc2xhdGVZIGFkZGVkIHRvIHRoZSB5IGNvbXBvbmVudHMuCiAgLy8vCiAgLy8vIFRvIHRyYW5zbGF0ZSBhIHJlY3RhbmdsZSBieSBhbiBbT2Zmc2V0XSByYXRoZXIgdGhhbiBieSBzZXBhcmF0ZSB4IGFuZCB5CiAgLy8vIGNvbXBvbmVudHMsIGNvbnNpZGVyIFtzaGlmdF0uCiAgUmVjdCB0cmFuc2xhdGUoZG91YmxlIHRyYW5zbGF0ZVgsIGRvdWJsZSB0cmFuc2xhdGVZKSB7CiAgICByZXR1cm4gUmVjdC5mcm9tTFRSQihsZWZ0ICsgdHJhbnNsYXRlWCwgdG9wICsgdHJhbnNsYXRlWSwgcmlnaHQgKyB0cmFuc2xhdGVYLCBib3R0b20gKyB0cmFuc2xhdGVZKTsKICB9CgogIC8vLyBSZXR1cm5zIGEgbmV3IHJlY3RhbmdsZSB3aXRoIGVkZ2VzIG1vdmVkIG91dHdhcmRzIGJ5IHRoZSBnaXZlbiBkZWx0YS4KICBSZWN0IGluZmxhdGUoZG91YmxlIGRlbHRhKSB7CiAgICByZXR1cm4gUmVjdC5mcm9tTFRSQihsZWZ0IC0gZGVsdGEsIHRvcCAtIGRlbHRhLCByaWdodCArIGRlbHRhLCBib3R0b20gKyBkZWx0YSk7CiAgfQoKICAvLy8gUmV0dXJucyBhIG5ldyByZWN0YW5nbGUgd2l0aCBlZGdlcyBtb3ZlZCBpbndhcmRzIGJ5IHRoZSBnaXZlbiBkZWx0YS4KICBSZWN0IGRlZmxhdGUoZG91YmxlIGRlbHRhKSA9PiBpbmZsYXRlKC1kZWx0YSk7CgogIC8vLyBSZXR1cm5zIGEgbmV3IHJlY3RhbmdsZSB0aGF0IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIGdpdmVuCiAgLy8vIHJlY3RhbmdsZSBhbmQgdGhpcyByZWN0YW5nbGUuIFRoZSB0d28gcmVjdGFuZ2xlcyBtdXN0IG92ZXJsYXAKICAvLy8gZm9yIHRoaXMgdG8gYmUgbWVhbmluZ2Z1bC4gSWYgdGhlIHR3byByZWN0YW5nbGVzIGRvIG5vdCBvdmVybGFwLAogIC8vLyB0aGVuIHRoZSByZXN1bHRpbmcgUmVjdCB3aWxsIGhhdmUgYSBuZWdhdGl2ZSB3aWR0aCBvciBoZWlnaHQuCiAgUmVjdCBpbnRlcnNlY3QoUmVjdCBvdGhlcikgewogICAgcmV0dXJuIFJlY3QuZnJvbUxUUkIoCiAgICAgIG1hdGgubWF4KGxlZnQsIG90aGVyLmxlZnQpLAogICAgICBtYXRoLm1heCh0b3AsIG90aGVyLnRvcCksCiAgICAgIG1hdGgubWluKHJpZ2h0LCBvdGhlci5yaWdodCksCiAgICAgIG1hdGgubWluKGJvdHRvbSwgb3RoZXIuYm90dG9tKQogICAgKTsKICB9CgogIC8vLyBSZXR1cm5zIGEgbmV3IHJlY3RhbmdsZSB3aGljaCBpcyB0aGUgYm91bmRpbmcgYm94IGNvbnRhaW5pbmcgdGhpcwogIC8vLyByZWN0YW5nbGUgYW5kIHRoZSBnaXZlbiByZWN0YW5nbGUuCiAgUmVjdCBleHBhbmRUb0luY2x1ZGUoUmVjdCBvdGhlcikgewogICAgcmV0dXJuIFJlY3QuZnJvbUxUUkIoCiAgICAgICAgbWF0aC5taW4obGVmdCwgb3RoZXIubGVmdCksCiAgICAgICAgbWF0aC5taW4odG9wLCBvdGhlci50b3ApLAogICAgICAgIG1hdGgubWF4KHJpZ2h0LCBvdGhlci5yaWdodCksCiAgICAgICAgbWF0aC5tYXgoYm90dG9tLCBvdGhlci5ib3R0b20pLAogICAgKTsKICB9CgogIC8vLyBXaGV0aGVyIGBvdGhlcmAgaGFzIGEgbm9uemVybyBhcmVhIG9mIG92ZXJsYXAgd2l0aCB0aGlzIHJlY3RhbmdsZS4KICBib29sIG92ZXJsYXBzKFJlY3Qgb3RoZXIpIHsKICAgIGlmIChyaWdodCA8PSBvdGhlci5sZWZ0IHx8IG90aGVyLnJpZ2h0IDw9IGxlZnQpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChib3R0b20gPD0gb3RoZXIudG9wIHx8IG90aGVyLmJvdHRvbSA8PSB0b3ApCiAgICAgIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgLy8vIFRoZSBsZXNzZXIgb2YgdGhlIG1hZ25pdHVkZXMgb2YgdGhlIFt3aWR0aF0gYW5kIHRoZSBbaGVpZ2h0XSBvZiB0aGlzCiAgLy8vIHJlY3RhbmdsZS4KICBkb3VibGUgZ2V0IHNob3J0ZXN0U2lkZSA9PiBtYXRoLm1pbih3aWR0aC5hYnMoKSwgaGVpZ2h0LmFicygpKTsKCiAgLy8vIFRoZSBncmVhdGVyIG9mIHRoZSBtYWduaXR1ZGVzIG9mIHRoZSBbd2lkdGhdIGFuZCB0aGUgW2hlaWdodF0gb2YgdGhpcwogIC8vLyByZWN0YW5nbGUuCiAgZG91YmxlIGdldCBsb25nZXN0U2lkZSA9PiBtYXRoLm1heCh3aWR0aC5hYnMoKSwgaGVpZ2h0LmFicygpKTsKCiAgLy8vIFRoZSBvZmZzZXQgdG8gdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgdG9wIGFuZCBsZWZ0IGVkZ2VzIG9mIHRoaXMgcmVjdGFuZ2xlLgogIC8vLwogIC8vLyBTZWUgYWxzbyBbU2l6ZS50b3BMZWZ0XS4KICBPZmZzZXQgZ2V0IHRvcExlZnQgPT4gT2Zmc2V0KGxlZnQsIHRvcCk7CgogIC8vLyBUaGUgb2Zmc2V0IHRvIHRoZSBjZW50ZXIgb2YgdGhlIHRvcCBlZGdlIG9mIHRoaXMgcmVjdGFuZ2xlLgogIC8vLwogIC8vLyBTZWUgYWxzbyBbU2l6ZS50b3BDZW50ZXJdLgogIE9mZnNldCBnZXQgdG9wQ2VudGVyID0+IE9mZnNldChsZWZ0ICsgd2lkdGggLyAyLjAsIHRvcCk7CgogIC8vLyBUaGUgb2Zmc2V0IHRvIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHRvcCBhbmQgcmlnaHQgZWRnZXMgb2YgdGhpcyByZWN0YW5nbGUuCiAgLy8vCiAgLy8vIFNlZSBhbHNvIFtTaXplLnRvcFJpZ2h0XS4KICBPZmZzZXQgZ2V0IHRvcFJpZ2h0ID0+IE9mZnNldChyaWdodCwgdG9wKTsKCiAgLy8vIFRoZSBvZmZzZXQgdG8gdGhlIGNlbnRlciBvZiB0aGUgbGVmdCBlZGdlIG9mIHRoaXMgcmVjdGFuZ2xlLgogIC8vLwogIC8vLyBTZWUgYWxzbyBbU2l6ZS5jZW50ZXJMZWZ0XS4KICBPZmZzZXQgZ2V0IGNlbnRlckxlZnQgPT4gT2Zmc2V0KGxlZnQsIHRvcCArIGhlaWdodCAvIDIuMCk7CgogIC8vLyBUaGUgb2Zmc2V0IHRvIHRoZSBwb2ludCBoYWxmd2F5IGJldHdlZW4gdGhlIGxlZnQgYW5kIHJpZ2h0IGFuZCB0aGUgdG9wIGFuZAogIC8vLyBib3R0b20gZWRnZXMgb2YgdGhpcyByZWN0YW5nbGUuCiAgLy8vCiAgLy8vIFNlZSBhbHNvIFtTaXplLmNlbnRlcl0uCiAgT2Zmc2V0IGdldCBjZW50ZXIgPT4gT2Zmc2V0KGxlZnQgKyB3aWR0aCAvIDIuMCwgdG9wICsgaGVpZ2h0IC8gMi4wKTsKCiAgLy8vIFRoZSBvZmZzZXQgdG8gdGhlIGNlbnRlciBvZiB0aGUgcmlnaHQgZWRnZSBvZiB0aGlzIHJlY3RhbmdsZS4KICAvLy8KICAvLy8gU2VlIGFsc28gW1NpemUuY2VudGVyTGVmdF0uCiAgT2Zmc2V0IGdldCBjZW50ZXJSaWdodCA9PiBPZmZzZXQocmlnaHQsIHRvcCArIGhlaWdodCAvIDIuMCk7CgogIC8vLyBUaGUgb2Zmc2V0IHRvIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIGJvdHRvbSBhbmQgbGVmdCBlZGdlcyBvZiB0aGlzIHJlY3RhbmdsZS4KICAvLy8KICAvLy8gU2VlIGFsc28gW1NpemUuYm90dG9tTGVmdF0uCiAgT2Zmc2V0IGdldCBib3R0b21MZWZ0ID0+IE9mZnNldChsZWZ0LCBib3R0b20pOwoKICAvLy8gVGhlIG9mZnNldCB0byB0aGUgY2VudGVyIG9mIHRoZSBib3R0b20gZWRnZSBvZiB0aGlzIHJlY3RhbmdsZS4KICAvLy8KICAvLy8gU2VlIGFsc28gW1NpemUuYm90dG9tTGVmdF0uCiAgT2Zmc2V0IGdldCBib3R0b21DZW50ZXIgPT4gT2Zmc2V0KGxlZnQgKyB3aWR0aCAvIDIuMCwgYm90dG9tKTsKCiAgLy8vIFRoZSBvZmZzZXQgdG8gdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgYm90dG9tIGFuZCByaWdodCBlZGdlcyBvZiB0aGlzIHJlY3RhbmdsZS4KICAvLy8KICAvLy8gU2VlIGFsc28gW1NpemUuYm90dG9tUmlnaHRdLgogIE9mZnNldCBnZXQgYm90dG9tUmlnaHQgPT4gT2Zmc2V0KHJpZ2h0LCBib3R0b20pOwoKICAvLy8gV2hldGhlciB0aGUgcG9pbnQgc3BlY2lmaWVkIGJ5IHRoZSBnaXZlbiBvZmZzZXQgKHdoaWNoIGlzIGFzc3VtZWQgdG8gYmUKICAvLy8gcmVsYXRpdmUgdG8gdGhlIG9yaWdpbikgbGllcyBiZXR3ZWVuIHRoZSBsZWZ0IGFuZCByaWdodCBhbmQgdGhlIHRvcCBhbmQKICAvLy8gYm90dG9tIGVkZ2VzIG9mIHRoaXMgcmVjdGFuZ2xlLgogIC8vLwogIC8vLyBSZWN0YW5nbGVzIGluY2x1ZGUgdGhlaXIgdG9wIGFuZCBsZWZ0IGVkZ2VzIGJ1dCBleGNsdWRlIHRoZWlyIGJvdHRvbSBhbmQKICAvLy8gcmlnaHQgZWRnZXMuCiAgYm9vbCBjb250YWlucyhPZmZzZXQgb2Zmc2V0KSB7CiAgICByZXR1cm4gb2Zmc2V0LmR4ID49IGxlZnQgJiYgb2Zmc2V0LmR4IDwgcmlnaHQgJiYgb2Zmc2V0LmR5ID49IHRvcCAmJiBvZmZzZXQuZHkgPCBib3R0b207CiAgfQoKICAvLy8gTGluZWFybHkgaW50ZXJwb2xhdGUgYmV0d2VlbiB0d28gcmVjdGFuZ2xlcy4KICAvLy8KICAvLy8gSWYgZWl0aGVyIHJlY3QgaXMgbnVsbCwgW1JlY3QuemVyb10gaXMgdXNlZCBhcyBhIHN1YnN0aXR1dGUuCiAgLy8vCiAgLy8vIFRoZSBgdGAgYXJndW1lbnQgcmVwcmVzZW50cyBwb3NpdGlvbiBvbiB0aGUgdGltZWxpbmUsIHdpdGggMC4wIG1lYW5pbmcKICAvLy8gdGhhdCB0aGUgaW50ZXJwb2xhdGlvbiBoYXMgbm90IHN0YXJ0ZWQsIHJldHVybmluZyBgYWAgKG9yIHNvbWV0aGluZwogIC8vLyBlcXVpdmFsZW50IHRvIGBhYCksIDEuMCBtZWFuaW5nIHRoYXQgdGhlIGludGVycG9sYXRpb24gaGFzIGZpbmlzaGVkLAogIC8vLyByZXR1cm5pbmcgYGJgIChvciBzb21ldGhpbmcgZXF1aXZhbGVudCB0byBgYmApLCBhbmQgdmFsdWVzIGluIGJldHdlZW4KICAvLy8gbWVhbmluZyB0aGF0IHRoZSBpbnRlcnBvbGF0aW9uIGlzIGF0IHRoZSByZWxldmFudCBwb2ludCBvbiB0aGUgdGltZWxpbmUKICAvLy8gYmV0d2VlbiBgYWAgYW5kIGBiYC4gVGhlIGludGVycG9sYXRpb24gY2FuIGJlIGV4dHJhcG9sYXRlZCBiZXlvbmQgMC4wIGFuZAogIC8vLyAxLjAsIHNvIG5lZ2F0aXZlIHZhbHVlcyBhbmQgdmFsdWVzIGdyZWF0ZXIgdGhhbiAxLjAgYXJlIHZhbGlkIChhbmQgY2FuCiAgLy8vIGVhc2lseSBiZSBnZW5lcmF0ZWQgYnkgY3VydmVzIHN1Y2ggYXMgW0N1cnZlcy5lbGFzdGljSW5PdXRdKS4KICAvLy8KICAvLy8gVmFsdWVzIGZvciBgdGAgYXJlIHVzdWFsbHkgb2J0YWluZWQgZnJvbSBhbiBbQW5pbWF0aW9uPGRvdWJsZT5dLCBzdWNoIGFzCiAgLy8vIGFuIFtBbmltYXRpb25Db250cm9sbGVyXS4KICBzdGF0aWMgUmVjdCBsZXJwKFJlY3QgYSwgUmVjdCBiLCBkb3VibGUgdCkgewogICAgYXNzZXJ0KHQgIT0gbnVsbCk7CiAgICBpZiAoYSA9PSBudWxsICYmIGIgPT0gbnVsbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICBpZiAoYSA9PSBudWxsKQogICAgICByZXR1cm4gUmVjdC5mcm9tTFRSQihiLmxlZnQgKiB0LCBiLnRvcCAqIHQsIGIucmlnaHQgKiB0LCBiLmJvdHRvbSAqIHQpOwogICAgaWYgKGIgPT0gbnVsbCkgewogICAgICBmaW5hbCBkb3VibGUgayA9IDEuMCAtIHQ7CiAgICAgIHJldHVybiBSZWN0LmZyb21MVFJCKGEubGVmdCAqIGssIGEudG9wICogaywgYS5yaWdodCAqIGssIGEuYm90dG9tICogayk7CiAgICB9CiAgICByZXR1cm4gUmVjdC5mcm9tTFRSQigKICAgICAgbGVycERvdWJsZShhLmxlZnQsIGIubGVmdCwgdCksCiAgICAgIGxlcnBEb3VibGUoYS50b3AsIGIudG9wLCB0KSwKICAgICAgbGVycERvdWJsZShhLnJpZ2h0LCBiLnJpZ2h0LCB0KSwKICAgICAgbGVycERvdWJsZShhLmJvdHRvbSwgYi5ib3R0b20sIHQpLAogICAgKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0oZHluYW1pYyBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKHJ1bnRpbWVUeXBlICE9IG90aGVyLnJ1bnRpbWVUeXBlKQogICAgICByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gb3RoZXIgaXMgUmVjdAogICAgICAgICYmIG90aGVyLmxlZnQgICA9PSBsZWZ0CiAgICAgICAgJiYgb3RoZXIudG9wICAgID09IHRvcAogICAgICAgICYmIG90aGVyLnJpZ2h0ICA9PSByaWdodAogICAgICAgICYmIG90aGVyLmJvdHRvbSA9PSBib3R0b207CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IGhhc2hWYWx1ZXMobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1JlY3QuZnJvbUxUUkIoJHtsZWZ0LnRvU3RyaW5nQXNGaXhlZCgxKX0sICR7dG9wLnRvU3RyaW5nQXNGaXhlZCgxKX0sICR7cmlnaHQudG9TdHJpbmdBc0ZpeGVkKDEpfSwgJHtib3R0b20udG9TdHJpbmdBc0ZpeGVkKDEpfSknOwp9CgovLy8gQSByYWRpdXMgZm9yIGVpdGhlciBjaXJjdWxhciBvciBlbGxpcHRpY2FsIHNoYXBlcy4KY2xhc3MgUmFkaXVzIHsKICAvLy8gQ29uc3RydWN0cyBhIGNpcmN1bGFyIHJhZGl1cy4gW3hdIGFuZCBbeV0gd2lsbCBoYXZlIHRoZSBzYW1lIHJhZGl1cyB2YWx1ZS4KICBjb25zdCBSYWRpdXMuY2lyY3VsYXIoZG91YmxlIHJhZGl1cykgOiB0aGlzLmVsbGlwdGljYWwocmFkaXVzLCByYWRpdXMpOwoKICAvLy8gQ29uc3RydWN0cyBhbiBlbGxpcHRpY2FsIHJhZGl1cyB3aXRoIHRoZSBnaXZlbiByYWRpaS4KICBjb25zdCBSYWRpdXMuZWxsaXB0aWNhbCh0aGlzLngsIHRoaXMueSk7CgogIC8vLyBUaGUgcmFkaXVzIHZhbHVlIG9uIHRoZSBob3Jpem9udGFsIGF4aXMuCiAgZmluYWwgZG91YmxlIHg7CgogIC8vLyBUaGUgcmFkaXVzIHZhbHVlIG9uIHRoZSB2ZXJ0aWNhbCBheGlzLgogIGZpbmFsIGRvdWJsZSB5OwoKICAvLy8gQSByYWRpdXMgd2l0aCBbeF0gYW5kIFt5XSB2YWx1ZXMgc2V0IHRvIHplcm8uCiAgLy8vCiAgLy8vIFlvdSBjYW4gdXNlIFtSYWRpdXMuemVyb10gd2l0aCBbUlJlY3RdIHRvIGhhdmUgcmlnaHQtYW5nbGUgY29ybmVycy4KICBzdGF0aWMgY29uc3QgUmFkaXVzIHplcm8gPSBSYWRpdXMuY2lyY3VsYXIoMC4wKTsKCiAgLy8vIFVuYXJ5IG5lZ2F0aW9uIG9wZXJhdG9yLgogIC8vLwogIC8vLyBSZXR1cm5zIGEgUmFkaXVzIHdpdGggdGhlIGRpc3RhbmNlcyBuZWdhdGVkLgogIC8vLwogIC8vLyBSYWRpdXNlcyB3aXRoIG5lZ2F0aXZlIHZhbHVlcyBhcmVuJ3QgZ2VvbWV0cmljYWxseSBtZWFuaW5nZnVsLCBidXQgY291bGQKICAvLy8gb2NjdXIgYXMgcGFydCBvZiBleHByZXNzaW9ucy4gRm9yIGV4YW1wbGUsIG5lZ2F0aW5nIGEgcmFkaXVzIG9mIG9uZSBwaXhlbAogIC8vLyBhbmQgdGhlbiBhZGRpbmcgdGhlIHJlc3VsdCB0byBhbm90aGVyIHJhZGl1cyBpcyBlcXVpdmFsZW50IHRvIHN1YnRyYWN0aW5nCiAgLy8vIGEgcmFkaXVzIG9mIG9uZSBwaXhlbCBmcm9tIHRoZSBvdGhlci4KICBSYWRpdXMgb3BlcmF0b3IgLSgpID0+IFJhZGl1cy5lbGxpcHRpY2FsKC14LCAteSk7CgogIC8vLyBCaW5hcnkgc3VidHJhY3Rpb24gb3BlcmF0b3IuCiAgLy8vCiAgLy8vIFJldHVybnMgYSByYWRpdXMgd2hvc2UgW3hdIHZhbHVlIGlzIHRoZSBsZWZ0LWhhbmQtc2lkZSBvcGVyYW5kJ3MgW3hdCiAgLy8vIG1pbnVzIHRoZSByaWdodC1oYW5kLXNpZGUgb3BlcmFuZCdzIFt4XSBhbmQgd2hvc2UgW3ldIHZhbHVlIGlzIHRoZQogIC8vLyBsZWZ0LWhhbmQtc2lkZSBvcGVyYW5kJ3MgW3ldIG1pbnVzIHRoZSByaWdodC1oYW5kLXNpZGUgb3BlcmFuZCdzIFt5XS4KICBSYWRpdXMgb3BlcmF0b3IgLShSYWRpdXMgb3RoZXIpID0+IFJhZGl1cy5lbGxpcHRpY2FsKHggLSBvdGhlci54LCB5IC0gb3RoZXIueSk7CgogIC8vLyBCaW5hcnkgYWRkaXRpb24gb3BlcmF0b3IuCiAgLy8vCiAgLy8vIFJldHVybnMgYSByYWRpdXMgd2hvc2UgW3hdIHZhbHVlIGlzIHRoZSBzdW0gb2YgdGhlIFt4XSB2YWx1ZXMgb2YgdGhlCiAgLy8vIHR3byBvcGVyYW5kcywgYW5kIHdob3NlIFt5XSB2YWx1ZSBpcyB0aGUgc3VtIG9mIHRoZSBbeV0gdmFsdWVzIG9mIHRoZQogIC8vLyB0d28gb3BlcmFuZHMuCiAgUmFkaXVzIG9wZXJhdG9yICsoUmFkaXVzIG90aGVyKSA9PiBSYWRpdXMuZWxsaXB0aWNhbCh4ICsgb3RoZXIueCwgeSArIG90aGVyLnkpOwoKICAvLy8gTXVsdGlwbGljYXRpb24gb3BlcmF0b3IuCiAgLy8vCiAgLy8vIFJldHVybnMgYSByYWRpdXMgd2hvc2UgY29vcmRpbmF0ZXMgYXJlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUKICAvLy8gbGVmdC1oYW5kLXNpZGUgb3BlcmFuZCAoYSByYWRpdXMpIG11bHRpcGxpZWQgYnkgdGhlIHNjYWxhcgogIC8vLyByaWdodC1oYW5kLXNpZGUgb3BlcmFuZCAoYSBkb3VibGUpLgogIFJhZGl1cyBvcGVyYXRvciAqKGRvdWJsZSBvcGVyYW5kKSA9PiBSYWRpdXMuZWxsaXB0aWNhbCh4ICogb3BlcmFuZCwgeSAqIG9wZXJhbmQpOwoKICAvLy8gRGl2aXNpb24gb3BlcmF0b3IuCiAgLy8vCiAgLy8vIFJldHVybnMgYSByYWRpdXMgd2hvc2UgY29vcmRpbmF0ZXMgYXJlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUKICAvLy8gbGVmdC1oYW5kLXNpZGUgb3BlcmFuZCAoYSByYWRpdXMpIGRpdmlkZWQgYnkgdGhlIHNjYWxhciByaWdodC1oYW5kLXNpZGUKICAvLy8gb3BlcmFuZCAoYSBkb3VibGUpLgogIFJhZGl1cyBvcGVyYXRvciAvKGRvdWJsZSBvcGVyYW5kKSA9PiBSYWRpdXMuZWxsaXB0aWNhbCh4IC8gb3BlcmFuZCwgeSAvIG9wZXJhbmQpOwoKICAvLy8gSW50ZWdlciAodHJ1bmNhdGluZykgZGl2aXNpb24gb3BlcmF0b3IuCiAgLy8vCiAgLy8vIFJldHVybnMgYSByYWRpdXMgd2hvc2UgY29vcmRpbmF0ZXMgYXJlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUKICAvLy8gbGVmdC1oYW5kLXNpZGUgb3BlcmFuZCAoYSByYWRpdXMpIGRpdmlkZWQgYnkgdGhlIHNjYWxhciByaWdodC1oYW5kLXNpZGUKICAvLy8gb3BlcmFuZCAoYSBkb3VibGUpLCByb3VuZGVkIHRvd2FyZHMgemVyby4KICBSYWRpdXMgb3BlcmF0b3Igfi8oZG91YmxlIG9wZXJhbmQpID0+IFJhZGl1cy5lbGxpcHRpY2FsKCh4IH4vIG9wZXJhbmQpLnRvRG91YmxlKCksICh5IH4vIG9wZXJhbmQpLnRvRG91YmxlKCkpOwoKICAvLy8gTW9kdWxvIChyZW1haW5kZXIpIG9wZXJhdG9yLgogIC8vLwogIC8vLyBSZXR1cm5zIGEgcmFkaXVzIHdob3NlIGNvb3JkaW5hdGVzIGFyZSB0aGUgcmVtYWluZGVyIG9mIGRpdmlkaW5nIHRoZQogIC8vLyBjb29yZGluYXRlcyBvZiB0aGUgbGVmdC1oYW5kLXNpZGUgb3BlcmFuZCAoYSByYWRpdXMpIGJ5IHRoZSBzY2FsYXIKICAvLy8gcmlnaHQtaGFuZC1zaWRlIG9wZXJhbmQgKGEgZG91YmxlKS4KICBSYWRpdXMgb3BlcmF0b3IgJShkb3VibGUgb3BlcmFuZCkgPT4gUmFkaXVzLmVsbGlwdGljYWwoeCAlIG9wZXJhbmQsIHkgJSBvcGVyYW5kKTsKCiAgLy8vIExpbmVhcmx5IGludGVycG9sYXRlIGJldHdlZW4gdHdvIHJhZGlpLgogIC8vLwogIC8vLyBJZiBlaXRoZXIgaXMgbnVsbCwgdGhpcyBmdW5jdGlvbiBzdWJzdGl0dXRlcyBbUmFkaXVzLnplcm9dIGluc3RlYWQuCiAgLy8vCiAgLy8vIFRoZSBgdGAgYXJndW1lbnQgcmVwcmVzZW50cyBwb3NpdGlvbiBvbiB0aGUgdGltZWxpbmUsIHdpdGggMC4wIG1lYW5pbmcKICAvLy8gdGhhdCB0aGUgaW50ZXJwb2xhdGlvbiBoYXMgbm90IHN0YXJ0ZWQsIHJldHVybmluZyBgYWAgKG9yIHNvbWV0aGluZwogIC8vLyBlcXVpdmFsZW50IHRvIGBhYCksIDEuMCBtZWFuaW5nIHRoYXQgdGhlIGludGVycG9sYXRpb24gaGFzIGZpbmlzaGVkLAogIC8vLyByZXR1cm5pbmcgYGJgIChvciBzb21ldGhpbmcgZXF1aXZhbGVudCB0byBgYmApLCBhbmQgdmFsdWVzIGluIGJldHdlZW4KICAvLy8gbWVhbmluZyB0aGF0IHRoZSBpbnRlcnBvbGF0aW9uIGlzIGF0IHRoZSByZWxldmFudCBwb2ludCBvbiB0aGUgdGltZWxpbmUKICAvLy8gYmV0d2VlbiBgYWAgYW5kIGBiYC4gVGhlIGludGVycG9sYXRpb24gY2FuIGJlIGV4dHJhcG9sYXRlZCBiZXlvbmQgMC4wIGFuZAogIC8vLyAxLjAsIHNvIG5lZ2F0aXZlIHZhbHVlcyBhbmQgdmFsdWVzIGdyZWF0ZXIgdGhhbiAxLjAgYXJlIHZhbGlkIChhbmQgY2FuCiAgLy8vIGVhc2lseSBiZSBnZW5lcmF0ZWQgYnkgY3VydmVzIHN1Y2ggYXMgW0N1cnZlcy5lbGFzdGljSW5PdXRdKS4KICAvLy8KICAvLy8gVmFsdWVzIGZvciBgdGAgYXJlIHVzdWFsbHkgb2J0YWluZWQgZnJvbSBhbiBbQW5pbWF0aW9uPGRvdWJsZT5dLCBzdWNoIGFzCiAgLy8vIGFuIFtBbmltYXRpb25Db250cm9sbGVyXS4KICBzdGF0aWMgUmFkaXVzIGxlcnAoUmFkaXVzIGEsIFJhZGl1cyBiLCBkb3VibGUgdCkgewogICAgYXNzZXJ0KHQgIT0gbnVsbCk7CiAgICBpZiAoYSA9PSBudWxsICYmIGIgPT0gbnVsbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICBpZiAoYSA9PSBudWxsKQogICAgICByZXR1cm4gUmFkaXVzLmVsbGlwdGljYWwoYi54ICogdCwgYi55ICogdCk7CiAgICBpZiAoYiA9PSBudWxsKSB7CiAgICAgIGZpbmFsIGRvdWJsZSBrID0gMS4wIC0gdDsKICAgICAgcmV0dXJuIFJhZGl1cy5lbGxpcHRpY2FsKGEueCAqIGssIGEueSAqIGspOwogICAgfQogICAgcmV0dXJuIFJhZGl1cy5lbGxpcHRpY2FsKAogICAgICBsZXJwRG91YmxlKGEueCwgYi54LCB0KSwKICAgICAgbGVycERvdWJsZShhLnksIGIueSwgdCksCiAgICApOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShkeW5hbWljIG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAocnVudGltZVR5cGUgIT0gb3RoZXIucnVudGltZVR5cGUpCiAgICAgIHJldHVybiBmYWxzZTsKCiAgICByZXR1cm4gb3RoZXIgaXMgUmFkaXVzCiAgICAgICAgJiYgb3RoZXIueCA9PSB4CiAgICAgICAgJiYgb3RoZXIueSA9PSB5OwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBoYXNoVmFsdWVzKHgsIHkpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4geCA9PSB5ID8gJ1JhZGl1cy5jaXJjdWxhcigke3gudG9TdHJpbmdBc0ZpeGVkKDEpfSknIDoKICAgICAgICAgICAgICAgICAgICAnUmFkaXVzLmVsbGlwdGljYWwoJHt4LnRvU3RyaW5nQXNGaXhlZCgxKX0sICcKICAgICAgICAgICAgICAgICAgICAnJHt5LnRvU3RyaW5nQXNGaXhlZCgxKX0pJzsKICB9Cn0KCi8vLyBBbiBpbW11dGFibGUgcm91bmRlZCByZWN0YW5nbGUgd2l0aCB0aGUgY3VzdG9tIHJhZGlpIGZvciBhbGwgZm91ciBjb3JuZXJzLgpjbGFzcyBSUmVjdCB7CiAgLy8vIENvbnN0cnVjdCBhIHJvdW5kZWQgcmVjdGFuZ2xlIGZyb20gaXRzIGxlZnQsIHRvcCwgcmlnaHQsIGFuZCBib3R0b20gZWRnZXMsCiAgLy8vIGFuZCB0aGUgc2FtZSByYWRpaSBhbG9uZyBpdHMgaG9yaXpvbnRhbCBheGlzIGFuZCBpdHMgdmVydGljYWwgYXhpcy4KICBjb25zdCBSUmVjdC5mcm9tTFRSQlhZKGRvdWJsZSBsZWZ0LCBkb3VibGUgdG9wLCBkb3VibGUgcmlnaHQsIGRvdWJsZSBib3R0b20sCiAgICAgICAgICAgICAgICAgICBkb3VibGUgcmFkaXVzWCwgZG91YmxlIHJhZGl1c1kpIDogdGhpcy5fcmF3KAogICAgdG9wOiB0b3AsCiAgICBsZWZ0OiBsZWZ0LAogICAgcmlnaHQ6IHJpZ2h0LAogICAgYm90dG9tOiBib3R0b20sCiAgICB0bFJhZGl1c1g6IHJhZGl1c1gsCiAgICB0bFJhZGl1c1k6IHJhZGl1c1ksCiAgICB0clJhZGl1c1g6IHJhZGl1c1gsCiAgICB0clJhZGl1c1k6IHJhZGl1c1ksCiAgICBibFJhZGl1c1g6IHJhZGl1c1gsCiAgICBibFJhZGl1c1k6IHJhZGl1c1ksCiAgICBiclJhZGl1c1g6IHJhZGl1c1gsCiAgICBiclJhZGl1c1k6IHJhZGl1c1ksCiAgKTsKCiAgLy8vIENvbnN0cnVjdCBhIHJvdW5kZWQgcmVjdGFuZ2xlIGZyb20gaXRzIGxlZnQsIHRvcCwgcmlnaHQsIGFuZCBib3R0b20gZWRnZXMsCiAgLy8vIGFuZCB0aGUgc2FtZSByYWRpdXMgaW4gZWFjaCBjb3JuZXIuCiAgUlJlY3QuZnJvbUxUUkJSKGRvdWJsZSBsZWZ0LCBkb3VibGUgdG9wLCBkb3VibGUgcmlnaHQsIGRvdWJsZSBib3R0b20sCiAgICAgICAgICAgICAgICAgIFJhZGl1cyByYWRpdXMpCiAgICA6IHRoaXMuX3JhdygKICAgICAgICB0b3A6IHRvcCwKICAgICAgICBsZWZ0OiBsZWZ0LAogICAgICAgIHJpZ2h0OiByaWdodCwKICAgICAgICBib3R0b206IGJvdHRvbSwKICAgICAgICB0bFJhZGl1c1g6IHJhZGl1cy54LAogICAgICAgIHRsUmFkaXVzWTogcmFkaXVzLnksCiAgICAgICAgdHJSYWRpdXNYOiByYWRpdXMueCwKICAgICAgICB0clJhZGl1c1k6IHJhZGl1cy55LAogICAgICAgIGJsUmFkaXVzWDogcmFkaXVzLngsCiAgICAgICAgYmxSYWRpdXNZOiByYWRpdXMueSwKICAgICAgICBiclJhZGl1c1g6IHJhZGl1cy54LAogICAgICAgIGJyUmFkaXVzWTogcmFkaXVzLnksCiAgICAgICk7CgogIC8vLyBDb25zdHJ1Y3QgYSByb3VuZGVkIHJlY3RhbmdsZSBmcm9tIGl0cyBib3VuZGluZyBib3ggYW5kIHRoZSBzYW1lIHJhZGlpCiAgLy8vIGFsb25nIGl0cyBob3Jpem9udGFsIGF4aXMgYW5kIGl0cyB2ZXJ0aWNhbCBheGlzLgogIFJSZWN0LmZyb21SZWN0WFkoUmVjdCByZWN0LCBkb3VibGUgcmFkaXVzWCwgZG91YmxlIHJhZGl1c1kpCiAgICA6IHRoaXMuX3JhdygKICAgICAgICB0b3A6IHJlY3QudG9wLAogICAgICAgIGxlZnQ6IHJlY3QubGVmdCwKICAgICAgICByaWdodDogcmVjdC5yaWdodCwKICAgICAgICBib3R0b206IHJlY3QuYm90dG9tLAogICAgICAgIHRsUmFkaXVzWDogcmFkaXVzWCwKICAgICAgICB0bFJhZGl1c1k6IHJhZGl1c1ksCiAgICAgICAgdHJSYWRpdXNYOiByYWRpdXNYLAogICAgICAgIHRyUmFkaXVzWTogcmFkaXVzWSwKICAgICAgICBibFJhZGl1c1g6IHJhZGl1c1gsCiAgICAgICAgYmxSYWRpdXNZOiByYWRpdXNZLAogICAgICAgIGJyUmFkaXVzWDogcmFkaXVzWCwKICAgICAgICBiclJhZGl1c1k6IHJhZGl1c1ksCiAgICAgICk7CgogIC8vLyBDb25zdHJ1Y3QgYSByb3VuZGVkIHJlY3RhbmdsZSBmcm9tIGl0cyBib3VuZGluZyBib3ggYW5kIGEgcmFkaXVzIHRoYXQgaXMKICAvLy8gdGhlIHNhbWUgaW4gZWFjaCBjb3JuZXIuCiAgUlJlY3QuZnJvbVJlY3RBbmRSYWRpdXMoUmVjdCByZWN0LCBSYWRpdXMgcmFkaXVzKQogICAgOiB0aGlzLl9yYXcoCiAgICAgICAgdG9wOiByZWN0LnRvcCwKICAgICAgICBsZWZ0OiByZWN0LmxlZnQsCiAgICAgICAgcmlnaHQ6IHJlY3QucmlnaHQsCiAgICAgICAgYm90dG9tOiByZWN0LmJvdHRvbSwKICAgICAgICB0bFJhZGl1c1g6IHJhZGl1cy54LAogICAgICAgIHRsUmFkaXVzWTogcmFkaXVzLnksCiAgICAgICAgdHJSYWRpdXNYOiByYWRpdXMueCwKICAgICAgICB0clJhZGl1c1k6IHJhZGl1cy55LAogICAgICAgIGJsUmFkaXVzWDogcmFkaXVzLngsCiAgICAgICAgYmxSYWRpdXNZOiByYWRpdXMueSwKICAgICAgICBiclJhZGl1c1g6IHJhZGl1cy54LAogICAgICAgIGJyUmFkaXVzWTogcmFkaXVzLnksCiAgICAgICk7CgogIC8vLyBDb25zdHJ1Y3QgYSByb3VuZGVkIHJlY3RhbmdsZSBmcm9tIGl0cyBsZWZ0LCB0b3AsIHJpZ2h0LCBhbmQgYm90dG9tIGVkZ2VzLAogIC8vLyBhbmQgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbVJpZ2h0LCBhbmQgYm90dG9tTGVmdCByYWRpaS4KICAvLy8KICAvLy8gVGhlIGNvcm5lciByYWRpaSBkZWZhdWx0IHRvIFtSYWRpdXMuemVyb10sIGkuZS4gcmlnaHQtYW5nbGVkIGNvcm5lcnMuCiAgUlJlY3QuZnJvbUxUUkJBbmRDb3JuZXJzKAogICAgZG91YmxlIGxlZnQsCiAgICBkb3VibGUgdG9wLAogICAgZG91YmxlIHJpZ2h0LAogICAgZG91YmxlIGJvdHRvbSwgewogICAgUmFkaXVzIHRvcExlZnQgPSBSYWRpdXMuemVybywKICAgIFJhZGl1cyB0b3BSaWdodCA9IFJhZGl1cy56ZXJvLAogICAgUmFkaXVzIGJvdHRvbVJpZ2h0ID0gUmFkaXVzLnplcm8sCiAgICBSYWRpdXMgYm90dG9tTGVmdCA9IFJhZGl1cy56ZXJvLAogIH0pIDogdGhpcy5fcmF3KAogICAgICAgICB0b3A6IHRvcCwKICAgICAgICAgbGVmdDogbGVmdCwKICAgICAgICAgcmlnaHQ6IHJpZ2h0LAogICAgICAgICBib3R0b206IGJvdHRvbSwKICAgICAgICAgdGxSYWRpdXNYOiB0b3BMZWZ0LngsCiAgICAgICAgIHRsUmFkaXVzWTogdG9wTGVmdC55LAogICAgICAgICB0clJhZGl1c1g6IHRvcFJpZ2h0LngsCiAgICAgICAgIHRyUmFkaXVzWTogdG9wUmlnaHQueSwKICAgICAgICAgYmxSYWRpdXNYOiBib3R0b21MZWZ0LngsCiAgICAgICAgIGJsUmFkaXVzWTogYm90dG9tTGVmdC55LAogICAgICAgICBiclJhZGl1c1g6IGJvdHRvbVJpZ2h0LngsCiAgICAgICAgIGJyUmFkaXVzWTogYm90dG9tUmlnaHQueSwKICAgICAgICk7CgogIC8vLyBDb25zdHJ1Y3QgYSByb3VuZGVkIHJlY3RhbmdsZSBmcm9tIGl0cyBib3VuZGluZyBib3ggYW5kIGFuZCB0b3BMZWZ0LAogIC8vLyB0b3BSaWdodCwgYm90dG9tUmlnaHQsIGFuZCBib3R0b21MZWZ0IHJhZGlpLgogIC8vLwogIC8vLyBUaGUgY29ybmVyIHJhZGlpIGRlZmF1bHQgdG8gW1JhZGl1cy56ZXJvXSwgaS5lLiByaWdodC1hbmdsZWQgY29ybmVycwogIFJSZWN0LmZyb21SZWN0QW5kQ29ybmVycygKICAgIFJlY3QgcmVjdCwKICAgIHsKICAgICAgUmFkaXVzIHRvcExlZnQgPSBSYWRpdXMuemVybywKICAgICAgUmFkaXVzIHRvcFJpZ2h0ID0gUmFkaXVzLnplcm8sCiAgICAgIFJhZGl1cyBib3R0b21SaWdodCA9IFJhZGl1cy56ZXJvLAogICAgICBSYWRpdXMgYm90dG9tTGVmdCA9IFJhZGl1cy56ZXJvCiAgICB9CiAgKSA6IHRoaXMuX3JhdygKICAgICAgICB0b3A6IHJlY3QudG9wLAogICAgICAgIGxlZnQ6IHJlY3QubGVmdCwKICAgICAgICByaWdodDogcmVjdC5yaWdodCwKICAgICAgICBib3R0b206IHJlY3QuYm90dG9tLAogICAgICAgIHRsUmFkaXVzWDogdG9wTGVmdC54LAogICAgICAgIHRsUmFkaXVzWTogdG9wTGVmdC55LAogICAgICAgIHRyUmFkaXVzWDogdG9wUmlnaHQueCwKICAgICAgICB0clJhZGl1c1k6IHRvcFJpZ2h0LnksCiAgICAgICAgYmxSYWRpdXNYOiBib3R0b21MZWZ0LngsCiAgICAgICAgYmxSYWRpdXNZOiBib3R0b21MZWZ0LnksCiAgICAgICAgYnJSYWRpdXNYOiBib3R0b21SaWdodC54LAogICAgICAgIGJyUmFkaXVzWTogYm90dG9tUmlnaHQueSwKICAgICAgKTsKCiAgY29uc3QgUlJlY3QuX3Jhdyh7CiAgICB0aGlzLmxlZnQgPSAwLjAsCiAgICB0aGlzLnRvcCA9IDAuMCwKICAgIHRoaXMucmlnaHQgPSAwLjAsCiAgICB0aGlzLmJvdHRvbSA9IDAuMCwKICAgIHRoaXMudGxSYWRpdXNYID0gMC4wLAogICAgdGhpcy50bFJhZGl1c1kgPSAwLjAsCiAgICB0aGlzLnRyUmFkaXVzWCA9IDAuMCwKICAgIHRoaXMudHJSYWRpdXNZID0gMC4wLAogICAgdGhpcy5iclJhZGl1c1ggPSAwLjAsCiAgICB0aGlzLmJyUmFkaXVzWSA9IDAuMCwKICAgIHRoaXMuYmxSYWRpdXNYID0gMC4wLAogICAgdGhpcy5ibFJhZGl1c1kgPSAwLjAsCiAgfSkgOiBhc3NlcnQobGVmdCAhPSBudWxsKSwKICAgICAgIGFzc2VydCh0b3AgIT0gbnVsbCksCiAgICAgICBhc3NlcnQocmlnaHQgIT0gbnVsbCksCiAgICAgICBhc3NlcnQoYm90dG9tICE9IG51bGwpLAogICAgICAgYXNzZXJ0KHRsUmFkaXVzWCAhPSBudWxsKSwKICAgICAgIGFzc2VydCh0bFJhZGl1c1kgIT0gbnVsbCksCiAgICAgICBhc3NlcnQodHJSYWRpdXNYICE9IG51bGwpLAogICAgICAgYXNzZXJ0KHRyUmFkaXVzWSAhPSBudWxsKSwKICAgICAgIGFzc2VydChiclJhZGl1c1ggIT0gbnVsbCksCiAgICAgICBhc3NlcnQoYnJSYWRpdXNZICE9IG51bGwpLAogICAgICAgYXNzZXJ0KGJsUmFkaXVzWCAhPSBudWxsKSwKICAgICAgIGFzc2VydChibFJhZGl1c1kgIT0gbnVsbCk7CgogIEZsb2F0MzJMaXN0IGdldCBfdmFsdWUzMiA9PiBGbG9hdDMyTGlzdC5mcm9tTGlzdCg8ZG91YmxlPlsKICAgIGxlZnQsCiAgICB0b3AsCiAgICByaWdodCwKICAgIGJvdHRvbSwKICAgIHRsUmFkaXVzWCwKICAgIHRsUmFkaXVzWSwKICAgIHRyUmFkaXVzWCwKICAgIHRyUmFkaXVzWSwKICAgIGJyUmFkaXVzWCwKICAgIGJyUmFkaXVzWSwKICAgIGJsUmFkaXVzWCwKICAgIGJsUmFkaXVzWSwKICBdKTsKCiAgLy8vIFRoZSBvZmZzZXQgb2YgdGhlIGxlZnQgZWRnZSBvZiB0aGlzIHJlY3RhbmdsZSBmcm9tIHRoZSB4IGF4aXMuCiAgZmluYWwgZG91YmxlIGxlZnQ7CgogIC8vLyBUaGUgb2Zmc2V0IG9mIHRoZSB0b3AgZWRnZSBvZiB0aGlzIHJlY3RhbmdsZSBmcm9tIHRoZSB5IGF4aXMuCiAgZmluYWwgZG91YmxlIHRvcDsKCiAgLy8vIFRoZSBvZmZzZXQgb2YgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhpcyByZWN0YW5nbGUgZnJvbSB0aGUgeCBheGlzLgogIGZpbmFsIGRvdWJsZSByaWdodDsKCiAgLy8vIFRoZSBvZmZzZXQgb2YgdGhlIGJvdHRvbSBlZGdlIG9mIHRoaXMgcmVjdGFuZ2xlIGZyb20gdGhlIHkgYXhpcy4KICBmaW5hbCBkb3VibGUgYm90dG9tOwoKICAvLy8gVGhlIHRvcC1sZWZ0IGhvcml6b250YWwgcmFkaXVzLgogIGZpbmFsIGRvdWJsZSB0bFJhZGl1c1g7CgogIC8vLyBUaGUgdG9wLWxlZnQgdmVydGljYWwgcmFkaXVzLgogIGZpbmFsIGRvdWJsZSB0bFJhZGl1c1k7CgogIC8vLyBUaGUgdG9wLWxlZnQgW1JhZGl1c10uCiAgUmFkaXVzIGdldCB0bFJhZGl1cyA9PiBSYWRpdXMuZWxsaXB0aWNhbCh0bFJhZGl1c1gsIHRsUmFkaXVzWSk7CgogIC8vLyBUaGUgdG9wLXJpZ2h0IGhvcml6b250YWwgcmFkaXVzLgogIGZpbmFsIGRvdWJsZSB0clJhZGl1c1g7CgogIC8vLyBUaGUgdG9wLXJpZ2h0IHZlcnRpY2FsIHJhZGl1cy4KICBmaW5hbCBkb3VibGUgdHJSYWRpdXNZOwoKICAvLy8gVGhlIHRvcC1yaWdodCBbUmFkaXVzXS4KICBSYWRpdXMgZ2V0IHRyUmFkaXVzID0+IFJhZGl1cy5lbGxpcHRpY2FsKHRyUmFkaXVzWCwgdHJSYWRpdXNZKTsKCiAgLy8vIFRoZSBib3R0b20tcmlnaHQgaG9yaXpvbnRhbCByYWRpdXMuCiAgZmluYWwgZG91YmxlIGJyUmFkaXVzWDsKCiAgLy8vIFRoZSBib3R0b20tcmlnaHQgdmVydGljYWwgcmFkaXVzLgogIGZpbmFsIGRvdWJsZSBiclJhZGl1c1k7CgogIC8vLyBUaGUgYm90dG9tLXJpZ2h0IFtSYWRpdXNdLgogIFJhZGl1cyBnZXQgYnJSYWRpdXMgPT4gUmFkaXVzLmVsbGlwdGljYWwoYnJSYWRpdXNYLCBiclJhZGl1c1kpOwoKICAvLy8gVGhlIGJvdHRvbS1sZWZ0IGhvcml6b250YWwgcmFkaXVzLgogIGZpbmFsIGRvdWJsZSBibFJhZGl1c1g7CgogIC8vLyBUaGUgYm90dG9tLWxlZnQgdmVydGljYWwgcmFkaXVzLgogIGZpbmFsIGRvdWJsZSBibFJhZGl1c1k7CgogIC8vLyBUaGUgYm90dG9tLWxlZnQgW1JhZGl1c10uCiAgUmFkaXVzIGdldCBibFJhZGl1cyA9PiBSYWRpdXMuZWxsaXB0aWNhbChibFJhZGl1c1gsIGJsUmFkaXVzWSk7CgogIC8vLyBBIHJvdW5kZWQgcmVjdGFuZ2xlIHdpdGggYWxsIHRoZSB2YWx1ZXMgc2V0IHRvIHplcm8uCiAgc3RhdGljIGNvbnN0IFJSZWN0IHplcm8gPSBSUmVjdC5fcmF3KCk7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtSUmVjdF0gdHJhbnNsYXRlZCBieSB0aGUgZ2l2ZW4gb2Zmc2V0LgogIFJSZWN0IHNoaWZ0KE9mZnNldCBvZmZzZXQpIHsKICAgIHJldHVybiBSUmVjdC5fcmF3KAogICAgICBsZWZ0OiBsZWZ0ICsgb2Zmc2V0LmR4LAogICAgICB0b3A6IHRvcCArIG9mZnNldC5keSwKICAgICAgcmlnaHQ6IHJpZ2h0ICsgb2Zmc2V0LmR4LAogICAgICBib3R0b206IGJvdHRvbSArIG9mZnNldC5keSwKICAgICAgdGxSYWRpdXNYOiB0bFJhZGl1c1gsCiAgICAgIHRsUmFkaXVzWTogdGxSYWRpdXNZLAogICAgICB0clJhZGl1c1g6IHRyUmFkaXVzWCwKICAgICAgdHJSYWRpdXNZOiB0clJhZGl1c1ksCiAgICAgIGJsUmFkaXVzWDogYmxSYWRpdXNYLAogICAgICBibFJhZGl1c1k6IGJsUmFkaXVzWSwKICAgICAgYnJSYWRpdXNYOiBiclJhZGl1c1gsCiAgICAgIGJyUmFkaXVzWTogYnJSYWRpdXNZLAogICAgKTsKICB9CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtSUmVjdF0gd2l0aCBlZGdlcyBhbmQgcmFkaWkgbW92ZWQgb3V0d2FyZHMgYnkgdGhlIGdpdmVuCiAgLy8vIGRlbHRhLgogIFJSZWN0IGluZmxhdGUoZG91YmxlIGRlbHRhKSB7CiAgICByZXR1cm4gUlJlY3QuX3JhdygKICAgICAgbGVmdDogbGVmdCAtIGRlbHRhLAogICAgICB0b3A6IHRvcCAtIGRlbHRhLAogICAgICByaWdodDogcmlnaHQgKyBkZWx0YSwKICAgICAgYm90dG9tOiBib3R0b20gKyBkZWx0YSwKICAgICAgdGxSYWRpdXNYOiB0bFJhZGl1c1ggKyBkZWx0YSwKICAgICAgdGxSYWRpdXNZOiB0bFJhZGl1c1kgKyBkZWx0YSwKICAgICAgdHJSYWRpdXNYOiB0clJhZGl1c1ggKyBkZWx0YSwKICAgICAgdHJSYWRpdXNZOiB0clJhZGl1c1kgKyBkZWx0YSwKICAgICAgYmxSYWRpdXNYOiBibFJhZGl1c1ggKyBkZWx0YSwKICAgICAgYmxSYWRpdXNZOiBibFJhZGl1c1kgKyBkZWx0YSwKICAgICAgYnJSYWRpdXNYOiBiclJhZGl1c1ggKyBkZWx0YSwKICAgICAgYnJSYWRpdXNZOiBiclJhZGl1c1kgKyBkZWx0YSwKICAgICk7CiAgfQoKICAvLy8gUmV0dXJucyBhIG5ldyBbUlJlY3RdIHdpdGggZWRnZXMgYW5kIHJhZGlpIG1vdmVkIGlud2FyZHMgYnkgdGhlIGdpdmVuIGRlbHRhLgogIFJSZWN0IGRlZmxhdGUoZG91YmxlIGRlbHRhKSA9PiBpbmZsYXRlKC1kZWx0YSk7CgogIC8vLyBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgbGVmdCBhbmQgcmlnaHQgZWRnZXMgb2YgdGhpcyByZWN0YW5nbGUuCiAgZG91YmxlIGdldCB3aWR0aCA9PiByaWdodCAtIGxlZnQ7CgogIC8vLyBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgdG9wIGFuZCBib3R0b20gZWRnZXMgb2YgdGhpcyByZWN0YW5nbGUuCiAgZG91YmxlIGdldCBoZWlnaHQgPT4gYm90dG9tIC0gdG9wOwoKICAvLy8gVGhlIGJvdW5kaW5nIGJveCBvZiB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlICh0aGUgcmVjdGFuZ2xlIHdpdGggbm8gcm91bmRlZCBjb3JuZXJzKS4KICBSZWN0IGdldCBvdXRlclJlY3QgPT4gUmVjdC5mcm9tTFRSQihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwoKICAvLy8gVGhlIG5vbi1yb3VuZGVkIHJlY3RhbmdsZSB0aGF0IGlzIGNvbnN0cmFpbmVkIGJ5IHRoZSBzbWFsbGVyIG9mIHRoZSB0d28KICAvLy8gZGlhZ29uYWxzLCB3aXRoIGVhY2ggZGlhZ29uYWwgdHJhdmVsaW5nIHRocm91Z2ggdGhlIG1pZGRsZSBvZiB0aGUgY3VydmUKICAvLy8gY29ybmVycy4gVGhlIG1pZGRsZSBvZiBhIGNvcm5lciBpcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBjdXJ2ZSB3aXRoIGl0cwogIC8vLyByZXNwZWN0aXZlIHF1YWRyYW50IGJpc2VjdG9yLgogIFJlY3QgZ2V0IHNhZmVJbm5lclJlY3QgewogICAgY29uc3QgZG91YmxlIGtJbnNldEZhY3RvciA9IDAuMjkyODkzMjE4ODE7IC8vIDEtY29zKHBpLzQpCgogICAgZmluYWwgZG91YmxlIGxlZnRSYWRpdXMgPSBtYXRoLm1heChibFJhZGl1c1gsIHRsUmFkaXVzWCk7CiAgICBmaW5hbCBkb3VibGUgdG9wUmFkaXVzID0gbWF0aC5tYXgodGxSYWRpdXNZLCB0clJhZGl1c1kpOwogICAgZmluYWwgZG91YmxlIHJpZ2h0UmFkaXVzID0gbWF0aC5tYXgodHJSYWRpdXNYLCBiclJhZGl1c1gpOwogICAgZmluYWwgZG91YmxlIGJvdHRvbVJhZGl1cyA9IG1hdGgubWF4KGJyUmFkaXVzWSwgYmxSYWRpdXNZKTsKCiAgICByZXR1cm4gUmVjdC5mcm9tTFRSQigKICAgICAgbGVmdCArIGxlZnRSYWRpdXMgKiBrSW5zZXRGYWN0b3IsCiAgICAgIHRvcCArIHRvcFJhZGl1cyAqIGtJbnNldEZhY3RvciwKICAgICAgcmlnaHQgLSByaWdodFJhZGl1cyAqIGtJbnNldEZhY3RvciwKICAgICAgYm90dG9tIC0gYm90dG9tUmFkaXVzICoga0luc2V0RmFjdG9yCiAgICApOwogIH0KCiAgLy8vIFRoZSByZWN0YW5nbGUgdGhhdCB3b3VsZCBiZSBmb3JtZWQgdXNpbmcgdGhlIGF4aXMtYWxpZ25lZCBpbnRlcnNlY3Rpb24gb2YKICAvLy8gdGhlIHNpZGVzIG9mIHRoZSByZWN0YW5nbGUsIGkuZS4sIHRoZSByZWN0YW5nbGUgZm9ybWVkIGZyb20gdGhlCiAgLy8vIGlubmVyLW1vc3QgY2VudGVycyBvZiB0aGUgZWxsaXBzZXMgdGhhdCBmb3JtIHRoZSBjb3JuZXJzLiBUaGlzIGlzIHRoZQogIC8vLyBpbnRlcnNlY3Rpb24gb2YgdGhlIFt3aWRlTWlkZGxlUmVjdF0gYW5kIHRoZSBbdGFsbE1pZGRsZVJlY3RdLiBJZiBhbnkgb2YKICAvLy8gdGhlIGludGVyc2VjdGlvbnMgYXJlIHZvaWQsIHRoZSByZXN1bHRpbmcgW1JlY3RdIHdpbGwgaGF2ZSBuZWdhdGl2ZSB3aWR0aAogIC8vLyBvciBoZWlnaHQuCiAgUmVjdCBnZXQgbWlkZGxlUmVjdCB7CiAgICBmaW5hbCBkb3VibGUgbGVmdFJhZGl1cyA9IG1hdGgubWF4KGJsUmFkaXVzWCwgdGxSYWRpdXNYKTsKICAgIGZpbmFsIGRvdWJsZSB0b3BSYWRpdXMgPSBtYXRoLm1heCh0bFJhZGl1c1ksIHRyUmFkaXVzWSk7CiAgICBmaW5hbCBkb3VibGUgcmlnaHRSYWRpdXMgPSBtYXRoLm1heCh0clJhZGl1c1gsIGJyUmFkaXVzWCk7CiAgICBmaW5hbCBkb3VibGUgYm90dG9tUmFkaXVzID0gbWF0aC5tYXgoYnJSYWRpdXNZLCBibFJhZGl1c1kpOwogICAgcmV0dXJuIFJlY3QuZnJvbUxUUkIoCiAgICAgIGxlZnQgKyBsZWZ0UmFkaXVzLAogICAgICB0b3AgKyB0b3BSYWRpdXMsCiAgICAgIHJpZ2h0IC0gcmlnaHRSYWRpdXMsCiAgICAgIGJvdHRvbSAtIGJvdHRvbVJhZGl1cwogICAgKTsKICB9CgogIC8vLyBUaGUgYmlnZ2VzdCByZWN0YW5nbGUgdGhhdCBpcyBlbnRpcmVseSBpbnNpZGUgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlIGFuZAogIC8vLyBoYXMgdGhlIGZ1bGwgd2lkdGggb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlLiBJZiB0aGUgcm91bmRlZCByZWN0YW5nbGUgZG9lcwogIC8vLyBub3QgaGF2ZSBhbiBheGlzLWFsaWduZWQgaW50ZXJzZWN0aW9uIG9mIGl0cyBsZWZ0IGFuZCByaWdodCBzaWRlLCB0aGUKICAvLy8gcmVzdWx0aW5nIFtSZWN0XSB3aWxsIGhhdmUgbmVnYXRpdmUgd2lkdGggb3IgaGVpZ2h0LgogIFJlY3QgZ2V0IHdpZGVNaWRkbGVSZWN0IHsKICAgIGZpbmFsIGRvdWJsZSB0b3BSYWRpdXMgPSBtYXRoLm1heCh0bFJhZGl1c1ksIHRyUmFkaXVzWSk7CiAgICBmaW5hbCBkb3VibGUgYm90dG9tUmFkaXVzID0gbWF0aC5tYXgoYnJSYWRpdXNZLCBibFJhZGl1c1kpOwogICAgcmV0dXJuIFJlY3QuZnJvbUxUUkIoCiAgICAgIGxlZnQsCiAgICAgIHRvcCArIHRvcFJhZGl1cywKICAgICAgcmlnaHQsCiAgICAgIGJvdHRvbSAtIGJvdHRvbVJhZGl1cwogICAgKTsKICB9CgogIC8vLyBUaGUgYmlnZ2VzdCByZWN0YW5nbGUgdGhhdCBpcyBlbnRpcmVseSBpbnNpZGUgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlIGFuZAogIC8vLyBoYXMgdGhlIGZ1bGwgaGVpZ2h0IG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZS4gSWYgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlCiAgLy8vIGRvZXMgbm90IGhhdmUgYW4gYXhpcy1hbGlnbmVkIGludGVyc2VjdGlvbiBvZiBpdHMgdG9wIGFuZCBib3R0b20gc2lkZSwgdGhlCiAgLy8vIHJlc3VsdGluZyBbUmVjdF0gd2lsbCBoYXZlIG5lZ2F0aXZlIHdpZHRoIG9yIGhlaWdodC4KICBSZWN0IGdldCB0YWxsTWlkZGxlUmVjdCB7CiAgICBmaW5hbCBkb3VibGUgbGVmdFJhZGl1cyA9IG1hdGgubWF4KGJsUmFkaXVzWCwgdGxSYWRpdXNYKTsKICAgIGZpbmFsIGRvdWJsZSByaWdodFJhZGl1cyA9IG1hdGgubWF4KHRyUmFkaXVzWCwgYnJSYWRpdXNYKTsKICAgIHJldHVybiBSZWN0LmZyb21MVFJCKAogICAgICBsZWZ0ICsgbGVmdFJhZGl1cywKICAgICAgdG9wLAogICAgICByaWdodCAtIHJpZ2h0UmFkaXVzLAogICAgICBib3R0b20KICAgICk7CiAgfQoKICAvLy8gV2hldGhlciB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlIGVuY2xvc2VzIGEgbm9uLXplcm8gYXJlYS4KICAvLy8gTmVnYXRpdmUgYXJlYXMgYXJlIGNvbnNpZGVyZWQgZW1wdHkuCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBsZWZ0ID49IHJpZ2h0IHx8IHRvcCA+PSBib3R0b207CgogIC8vLyBXaGV0aGVyIGFsbCBjb29yZGluYXRlcyBvZiB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlIGFyZSBmaW5pdGUuCiAgYm9vbCBnZXQgaXNGaW5pdGUgPT4gbGVmdC5pc0Zpbml0ZSAmJiB0b3AuaXNGaW5pdGUgJiYgcmlnaHQuaXNGaW5pdGUgJiYgYm90dG9tLmlzRmluaXRlOwoKICAvLy8gV2hldGhlciB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlIGlzIGEgc2ltcGxlIHJlY3RhbmdsZSB3aXRoIHplcm8KICAvLy8gY29ybmVyIHJhZGlpLgogIGJvb2wgZ2V0IGlzUmVjdCB7CiAgICByZXR1cm4gKHRsUmFkaXVzWCA9PSAwLjAgfHwgdGxSYWRpdXNZID09IDAuMCkgJiYKICAgICAgICAgICAodHJSYWRpdXNYID09IDAuMCB8fCB0clJhZGl1c1kgPT0gMC4wKSAmJgogICAgICAgICAgIChibFJhZGl1c1ggPT0gMC4wIHx8IGJsUmFkaXVzWSA9PSAwLjApICYmCiAgICAgICAgICAgKGJyUmFkaXVzWCA9PSAwLjAgfHwgYnJSYWRpdXNZID09IDAuMCk7CiAgfQoKICAvLy8gV2hldGhlciB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlIGhhcyBhIHNpZGUgd2l0aCBubyBzdHJhaWdodCBzZWN0aW9uLgogIGJvb2wgZ2V0IGlzU3RhZGl1bSB7CiAgICByZXR1cm4gdGxSYWRpdXMgPT0gdHJSYWRpdXMKICAgICAgICAmJiB0clJhZGl1cyA9PSBiclJhZGl1cwogICAgICAgICYmIGJyUmFkaXVzID09IGJsUmFkaXVzCiAgICAgICAgJiYgKHdpZHRoIDw9IDIuMCAqIHRsUmFkaXVzWCB8fCBoZWlnaHQgPD0gMi4wICogdGxSYWRpdXNZKTsKICB9CgogIC8vLyBXaGV0aGVyIHRoaXMgcm91bmRlZCByZWN0YW5nbGUgaGFzIG5vIHNpZGUgd2l0aCBhIHN0cmFpZ2h0IHNlY3Rpb24uCiAgYm9vbCBnZXQgaXNFbGxpcHNlIHsKICAgIHJldHVybiB0bFJhZGl1cyA9PSB0clJhZGl1cwogICAgICAgICYmIHRyUmFkaXVzID09IGJyUmFkaXVzCiAgICAgICAgJiYgYnJSYWRpdXMgPT0gYmxSYWRpdXMKICAgICAgICAmJiB3aWR0aCA8PSAyLjAgKiB0bFJhZGl1c1gKICAgICAgICAmJiBoZWlnaHQgPD0gMi4wICogdGxSYWRpdXNZOwogIH0KCiAgLy8vIFdoZXRoZXIgdGhpcyByb3VuZGVkIHJlY3RhbmdsZSB3b3VsZCBkcmF3IGFzIGEgY2lyY2xlLgogIGJvb2wgZ2V0IGlzQ2lyY2xlID0+IHdpZHRoID09IGhlaWdodCAmJiBpc0VsbGlwc2U7CgogIC8vLyBUaGUgbGVzc2VyIG9mIHRoZSBtYWduaXR1ZGVzIG9mIHRoZSBbd2lkdGhdIGFuZCB0aGUgW2hlaWdodF0gb2YgdGhpcwogIC8vLyByb3VuZGVkIHJlY3RhbmdsZS4KICBkb3VibGUgZ2V0IHNob3J0ZXN0U2lkZSA9PiBtYXRoLm1pbih3aWR0aC5hYnMoKSwgaGVpZ2h0LmFicygpKTsKCiAgLy8vIFRoZSBncmVhdGVyIG9mIHRoZSBtYWduaXR1ZGVzIG9mIHRoZSBbd2lkdGhdIGFuZCB0aGUgW2hlaWdodF0gb2YgdGhpcwogIC8vLyByb3VuZGVkIHJlY3RhbmdsZS4KICBkb3VibGUgZ2V0IGxvbmdlc3RTaWRlID0+IG1hdGgubWF4KHdpZHRoLmFicygpLCBoZWlnaHQuYWJzKCkpOwoKICAvLy8gV2hldGhlciBhbnkgb2YgdGhlIGRpbWVuc2lvbnMgYXJlIGBOYU5gLgogIGJvb2wgZ2V0IGhhc05hTiA9PiBsZWZ0LmlzTmFOIHx8IHRvcC5pc05hTiB8fCByaWdodC5pc05hTiB8fCBib3R0b20uaXNOYU4gfHwKICAgICAgICAgICAgICAgICAgICAgdHJSYWRpdXNYLmlzTmFOIHx8IHRyUmFkaXVzWS5pc05hTiB8fCB0bFJhZGl1c1guaXNOYU4gfHwgdGxSYWRpdXNZLmlzTmFOIHx8CiAgICAgICAgICAgICAgICAgICAgIGJyUmFkaXVzWC5pc05hTiB8fCBiclJhZGl1c1kuaXNOYU4gfHwgYmxSYWRpdXNYLmlzTmFOIHx8IGJsUmFkaXVzWS5pc05hTjsKCiAgLy8vIFRoZSBvZmZzZXQgdG8gdGhlIHBvaW50IGhhbGZ3YXkgYmV0d2VlbiB0aGUgbGVmdCBhbmQgcmlnaHQgYW5kIHRoZSB0b3AgYW5kCiAgLy8vIGJvdHRvbSBlZGdlcyBvZiB0aGlzIHJlY3RhbmdsZS4KICBPZmZzZXQgZ2V0IGNlbnRlciA9PiBPZmZzZXQobGVmdCArIHdpZHRoIC8gMi4wLCB0b3AgKyBoZWlnaHQgLyAyLjApOwoKICAvLyBSZXR1cm5zIHRoZSBtaW5pbXVtIGJldHdlZW4gbWluIGFuZCBzY2FsZSB0byB3aGljaCByYWRpdXMxIGFuZCByYWRpdXMyCiAgLy8gc2hvdWxkIGJlIHNjYWxlZCB3aXRoIGluIG9yZGVyIG5vdCB0byBleGNlZWQgdGhlIGxpbWl0LgogIGRvdWJsZSBfZ2V0TWluKGRvdWJsZSBtaW4sIGRvdWJsZSByYWRpdXMxLCBkb3VibGUgcmFkaXVzMiwgZG91YmxlIGxpbWl0KSB7CiAgICBmaW5hbCBkb3VibGUgc3VtID0gcmFkaXVzMSArIHJhZGl1czI7CiAgICBpZiAoc3VtID4gbGltaXQgJiYgc3VtICE9IDAuMCkKICAgICAgcmV0dXJuIG1hdGgubWluKG1pbiwgbGltaXQgLyBzdW0pOwogICAgcmV0dXJuIG1pbjsKICB9CgogIC8vLyBTY2FsZXMgYWxsIHJhZGlpIHNvIHRoYXQgb24gZWFjaCBzaWRlIHRoZWlyIHN1bSB3aWxsIG5vdCBleGNlZWQgdGhlIHNpemUKICAvLy8gb2YgdGhlIHdpZHRoL2hlaWdodC4KICAvLy8KICAvLy8gU2tpYSBhbHJlYWR5IGhhbmRsZXMgUlJlY3RzIHdpdGggcmFkaWkgdGhhdCBhcmUgdG9vIGxhcmdlIGluIHRoaXMgd2F5LgogIC8vLyBUaGVyZWZvcmUsIHRoaXMgbWV0aG9kIGlzIG9ubHkgbmVlZGVkIGZvciBSUmVjdCB1c2UgY2FzZXMgdGhhdCByZXF1aXJlCiAgLy8vIHRoZSBhcHByb3ByaWF0ZWx5IHNjYWxlZCByYWRpaSB2YWx1ZXMuCiAgLy8vCiAgLy8vIFNlZSB0aGUgW1NraWEgc2NhbGluZyBpbXBsZW1lbnRhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9za2lhL2Jsb2IvbWFzdGVyL3NyYy9jb3JlL1NrUlJlY3QuY3BwKQogIC8vLyBmb3IgbW9yZSBkZXRhaWxzLgogIFJSZWN0IHNjYWxlUmFkaWkoKSB7CiAgICBkb3VibGUgc2NhbGUgPSAxLjA7CiAgICBzY2FsZSA9IF9nZXRNaW4oc2NhbGUsIGJsUmFkaXVzWSwgdGxSYWRpdXNZLCBoZWlnaHQpOwogICAgc2NhbGUgPSBfZ2V0TWluKHNjYWxlLCB0bFJhZGl1c1gsIHRyUmFkaXVzWCwgd2lkdGgpOwogICAgc2NhbGUgPSBfZ2V0TWluKHNjYWxlLCB0clJhZGl1c1ksIGJyUmFkaXVzWSwgaGVpZ2h0KTsKICAgIHNjYWxlID0gX2dldE1pbihzY2FsZSwgYnJSYWRpdXNYLCBibFJhZGl1c1gsIHdpZHRoKTsKCiAgICBpZiAoc2NhbGUgPCAxLjApIHsKICAgICAgcmV0dXJuIFJSZWN0Ll9yYXcoCiAgICAgICAgdG9wOiB0b3AsCiAgICAgICAgbGVmdDogbGVmdCwKICAgICAgICByaWdodDogcmlnaHQsCiAgICAgICAgYm90dG9tOiBib3R0b20sCiAgICAgICAgdGxSYWRpdXNYOiB0bFJhZGl1c1ggKiBzY2FsZSwKICAgICAgICB0bFJhZGl1c1k6IHRsUmFkaXVzWSAqIHNjYWxlLAogICAgICAgIHRyUmFkaXVzWDogdHJSYWRpdXNYICogc2NhbGUsCiAgICAgICAgdHJSYWRpdXNZOiB0clJhZGl1c1kgKiBzY2FsZSwKICAgICAgICBibFJhZGl1c1g6IGJsUmFkaXVzWCAqIHNjYWxlLAogICAgICAgIGJsUmFkaXVzWTogYmxSYWRpdXNZICogc2NhbGUsCiAgICAgICAgYnJSYWRpdXNYOiBiclJhZGl1c1ggKiBzY2FsZSwKICAgICAgICBiclJhZGl1c1k6IGJyUmFkaXVzWSAqIHNjYWxlLAogICAgICApOwogICAgfQoKICAgIHJldHVybiBSUmVjdC5fcmF3KAogICAgICB0b3A6IHRvcCwKICAgICAgbGVmdDogbGVmdCwKICAgICAgcmlnaHQ6IHJpZ2h0LAogICAgICBib3R0b206IGJvdHRvbSwKICAgICAgdGxSYWRpdXNYOiB0bFJhZGl1c1gsCiAgICAgIHRsUmFkaXVzWTogdGxSYWRpdXNZLAogICAgICB0clJhZGl1c1g6IHRyUmFkaXVzWCwKICAgICAgdHJSYWRpdXNZOiB0clJhZGl1c1ksCiAgICAgIGJsUmFkaXVzWDogYmxSYWRpdXNYLAogICAgICBibFJhZGl1c1k6IGJsUmFkaXVzWSwKICAgICAgYnJSYWRpdXNYOiBiclJhZGl1c1gsCiAgICAgIGJyUmFkaXVzWTogYnJSYWRpdXNZLAogICAgKTsKICB9CgogIC8vLyBXaGV0aGVyIHRoZSBwb2ludCBzcGVjaWZpZWQgYnkgdGhlIGdpdmVuIG9mZnNldCAod2hpY2ggaXMgYXNzdW1lZCB0byBiZQogIC8vLyByZWxhdGl2ZSB0byB0aGUgb3JpZ2luKSBsaWVzIGluc2lkZSB0aGUgcm91bmRlZCByZWN0YW5nbGUuCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIG1heSBhbGxvY2F0ZSAoYW5kIGNhY2hlKSBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRoIG5vcm1hbGl6ZWQKICAvLy8gcmFkaWkgdGhlIGZpcnN0IHRpbWUgaXQgaXMgY2FsbGVkIG9uIGEgcGFydGljdWxhciBbUlJlY3RdIGluc3RhbmNlLiBXaGVuCiAgLy8vIHVzaW5nIHRoaXMgbWV0aG9kLCBwcmVmZXIgdG8gcmV1c2UgZXhpc3RpbmcgW1JSZWN0XXMgcmF0aGVyIHRoYW4KICAvLy8gcmVjcmVhdGluZyB0aGUgb2JqZWN0IGVhY2ggdGltZS4KICBib29sIGNvbnRhaW5zKE9mZnNldCBwb2ludCkgewogICAgaWYgKHBvaW50LmR4IDwgbGVmdCB8fCBwb2ludC5keCA+PSByaWdodCB8fCBwb2ludC5keSA8IHRvcCB8fCBwb2ludC5keSA+PSBib3R0b20pCiAgICAgIHJldHVybiBmYWxzZTsgLy8gb3V0c2lkZSBib3VuZGluZyBib3gKCiAgICBmaW5hbCBSUmVjdCBzY2FsZWQgPSBzY2FsZVJhZGlpKCk7CgogICAgZG91YmxlIHg7CiAgICBkb3VibGUgeTsKICAgIGRvdWJsZSByYWRpdXNYOwogICAgZG91YmxlIHJhZGl1c1k7CiAgICAvLyBjaGVjayB3aGV0aGVyIHBvaW50IGlzIGluIG9uZSBvZiB0aGUgcm91bmRlZCBjb3JuZXIgYXJlYXMKICAgIC8vIHgsIHkgLT4gdHJhbnNsYXRlIHRvIGVsbGlwc2UgY2VudGVyCiAgICBpZiAocG9pbnQuZHggPCBsZWZ0ICsgc2NhbGVkLnRsUmFkaXVzWCAmJgogICAgICAgIHBvaW50LmR5IDwgdG9wICsgc2NhbGVkLnRsUmFkaXVzWSkgewogICAgICB4ID0gcG9pbnQuZHggLSBsZWZ0IC0gc2NhbGVkLnRsUmFkaXVzWDsKICAgICAgeSA9IHBvaW50LmR5IC0gdG9wIC0gc2NhbGVkLnRsUmFkaXVzWTsKICAgICAgcmFkaXVzWCA9IHNjYWxlZC50bFJhZGl1c1g7CiAgICAgIHJhZGl1c1kgPSBzY2FsZWQudGxSYWRpdXNZOwogICAgfSBlbHNlIGlmIChwb2ludC5keCA+IHJpZ2h0IC0gc2NhbGVkLnRyUmFkaXVzWCAmJgogICAgICAgICAgICAgICBwb2ludC5keSA8IHRvcCArIHNjYWxlZC50clJhZGl1c1kpIHsKICAgICAgeCA9IHBvaW50LmR4IC0gcmlnaHQgKyBzY2FsZWQudHJSYWRpdXNYOwogICAgICB5ID0gcG9pbnQuZHkgLSB0b3AgLSBzY2FsZWQudHJSYWRpdXNZOwogICAgICByYWRpdXNYID0gc2NhbGVkLnRyUmFkaXVzWDsKICAgICAgcmFkaXVzWSA9IHNjYWxlZC50clJhZGl1c1k7CiAgICB9IGVsc2UgaWYgKHBvaW50LmR4ID4gcmlnaHQgLSBzY2FsZWQuYnJSYWRpdXNYICYmCiAgICAgICAgICAgICAgIHBvaW50LmR5ID4gYm90dG9tIC0gc2NhbGVkLmJyUmFkaXVzWSkgewogICAgICB4ID0gcG9pbnQuZHggLSByaWdodCArIHNjYWxlZC5iclJhZGl1c1g7CiAgICAgIHkgPSBwb2ludC5keSAtIGJvdHRvbSArIHNjYWxlZC5iclJhZGl1c1k7CiAgICAgIHJhZGl1c1ggPSBzY2FsZWQuYnJSYWRpdXNYOwogICAgICByYWRpdXNZID0gc2NhbGVkLmJyUmFkaXVzWTsKICAgIH0gZWxzZSBpZiAocG9pbnQuZHggPCBsZWZ0ICsgc2NhbGVkLmJsUmFkaXVzWCAmJgogICAgICAgICAgICAgICBwb2ludC5keSA+IGJvdHRvbSAtIHNjYWxlZC5ibFJhZGl1c1kpIHsKICAgICAgeCA9IHBvaW50LmR4IC0gbGVmdCAtIHNjYWxlZC5ibFJhZGl1c1g7CiAgICAgIHkgPSBwb2ludC5keSAtIGJvdHRvbSArIHNjYWxlZC5ibFJhZGl1c1k7CiAgICAgIHJhZGl1c1ggPSBzY2FsZWQuYmxSYWRpdXNYOwogICAgICByYWRpdXNZID0gc2NhbGVkLmJsUmFkaXVzWTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB0cnVlOyAvLyBpbnNpZGUgYW5kIG5vdCB3aXRoaW4gdGhlIHJvdW5kZWQgY29ybmVyIGFyZWEKICAgIH0KCiAgICB4ID0geCAvIHJhZGl1c1g7CiAgICB5ID0geSAvIHJhZGl1c1k7CiAgICAvLyBjaGVjayBpZiB0aGUgcG9pbnQgaXMgb3V0c2lkZSB0aGUgdW5pdCBjaXJjbGUKICAgIGlmICh4ICogeCArIHkgKiB5ID4gMS4wKQogICAgICByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vLyBMaW5lYXJseSBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHR3byByb3VuZGVkIHJlY3RhbmdsZXMuCiAgLy8vCiAgLy8vIElmIGVpdGhlciBpcyBudWxsLCB0aGlzIGZ1bmN0aW9uIHN1YnN0aXR1dGVzIFtSUmVjdC56ZXJvXSBpbnN0ZWFkLgogIC8vLwogIC8vLyBUaGUgYHRgIGFyZ3VtZW50IHJlcHJlc2VudHMgcG9zaXRpb24gb24gdGhlIHRpbWVsaW5lLCB3aXRoIDAuMCBtZWFuaW5nCiAgLy8vIHRoYXQgdGhlIGludGVycG9sYXRpb24gaGFzIG5vdCBzdGFydGVkLCByZXR1cm5pbmcgYGFgIChvciBzb21ldGhpbmcKICAvLy8gZXF1aXZhbGVudCB0byBgYWApLCAxLjAgbWVhbmluZyB0aGF0IHRoZSBpbnRlcnBvbGF0aW9uIGhhcyBmaW5pc2hlZCwKICAvLy8gcmV0dXJuaW5nIGBiYCAob3Igc29tZXRoaW5nIGVxdWl2YWxlbnQgdG8gYGJgKSwgYW5kIHZhbHVlcyBpbiBiZXR3ZWVuCiAgLy8vIG1lYW5pbmcgdGhhdCB0aGUgaW50ZXJwb2xhdGlvbiBpcyBhdCB0aGUgcmVsZXZhbnQgcG9pbnQgb24gdGhlIHRpbWVsaW5lCiAgLy8vIGJldHdlZW4gYGFgIGFuZCBgYmAuIFRoZSBpbnRlcnBvbGF0aW9uIGNhbiBiZSBleHRyYXBvbGF0ZWQgYmV5b25kIDAuMCBhbmQKICAvLy8gMS4wLCBzbyBuZWdhdGl2ZSB2YWx1ZXMgYW5kIHZhbHVlcyBncmVhdGVyIHRoYW4gMS4wIGFyZSB2YWxpZCAoYW5kIGNhbgogIC8vLyBlYXNpbHkgYmUgZ2VuZXJhdGVkIGJ5IGN1cnZlcyBzdWNoIGFzIFtDdXJ2ZXMuZWxhc3RpY0luT3V0XSkuCiAgLy8vCiAgLy8vIFZhbHVlcyBmb3IgYHRgIGFyZSB1c3VhbGx5IG9idGFpbmVkIGZyb20gYW4gW0FuaW1hdGlvbjxkb3VibGU+XSwgc3VjaCBhcwogIC8vLyBhbiBbQW5pbWF0aW9uQ29udHJvbGxlcl0uCiAgc3RhdGljIFJSZWN0IGxlcnAoUlJlY3QgYSwgUlJlY3QgYiwgZG91YmxlIHQpIHsKICAgIGFzc2VydCh0ICE9IG51bGwpOwogICAgaWYgKGEgPT0gbnVsbCAmJiBiID09IG51bGwpCiAgICAgIHJldHVybiBudWxsOwogICAgaWYgKGEgPT0gbnVsbCkgewogICAgICByZXR1cm4gUlJlY3QuX3JhdygKICAgICAgICBsZWZ0OiBiLmxlZnQgKiB0LAogICAgICAgIHRvcDogYi50b3AgKiB0LAogICAgICAgIHJpZ2h0OiBiLnJpZ2h0ICogdCwKICAgICAgICBib3R0b206IGIuYm90dG9tICogdCwKICAgICAgICB0bFJhZGl1c1g6IGIudGxSYWRpdXNYICogdCwKICAgICAgICB0bFJhZGl1c1k6IGIudGxSYWRpdXNZICogdCwKICAgICAgICB0clJhZGl1c1g6IGIudHJSYWRpdXNYICogdCwKICAgICAgICB0clJhZGl1c1k6IGIudHJSYWRpdXNZICogdCwKICAgICAgICBiclJhZGl1c1g6IGIuYnJSYWRpdXNYICogdCwKICAgICAgICBiclJhZGl1c1k6IGIuYnJSYWRpdXNZICogdCwKICAgICAgICBibFJhZGl1c1g6IGIuYmxSYWRpdXNYICogdCwKICAgICAgICBibFJhZGl1c1k6IGIuYmxSYWRpdXNZICogdCwKICAgICAgKTsKICAgIH0KICAgIGlmIChiID09IG51bGwpIHsKICAgICAgZmluYWwgZG91YmxlIGsgPSAxLjAgLSB0OwogICAgICByZXR1cm4gUlJlY3QuX3JhdygKICAgICAgICBsZWZ0OiBhLmxlZnQgKiBrLAogICAgICAgIHRvcDogYS50b3AgKiBrLAogICAgICAgIHJpZ2h0OiBhLnJpZ2h0ICogaywKICAgICAgICBib3R0b206IGEuYm90dG9tICogaywKICAgICAgICB0bFJhZGl1c1g6IGEudGxSYWRpdXNYICogaywKICAgICAgICB0bFJhZGl1c1k6IGEudGxSYWRpdXNZICogaywKICAgICAgICB0clJhZGl1c1g6IGEudHJSYWRpdXNYICogaywKICAgICAgICB0clJhZGl1c1k6IGEudHJSYWRpdXNZICogaywKICAgICAgICBiclJhZGl1c1g6IGEuYnJSYWRpdXNYICogaywKICAgICAgICBiclJhZGl1c1k6IGEuYnJSYWRpdXNZICogaywKICAgICAgICBibFJhZGl1c1g6IGEuYmxSYWRpdXNYICogaywKICAgICAgICBibFJhZGl1c1k6IGEuYmxSYWRpdXNZICogaywKICAgICAgKTsKICAgIH0KICAgIHJldHVybiBSUmVjdC5fcmF3KAogICAgICBsZWZ0OiBsZXJwRG91YmxlKGEubGVmdCwgYi5sZWZ0LCB0KSwKICAgICAgdG9wOiBsZXJwRG91YmxlKGEudG9wLCBiLnRvcCwgdCksCiAgICAgIHJpZ2h0OiBsZXJwRG91YmxlKGEucmlnaHQsIGIucmlnaHQsIHQpLAogICAgICBib3R0b206IGxlcnBEb3VibGUoYS5ib3R0b20sIGIuYm90dG9tLCB0KSwKICAgICAgdGxSYWRpdXNYOiBsZXJwRG91YmxlKGEudGxSYWRpdXNYLCBiLnRsUmFkaXVzWCwgdCksCiAgICAgIHRsUmFkaXVzWTogbGVycERvdWJsZShhLnRsUmFkaXVzWSwgYi50bFJhZGl1c1ksIHQpLAogICAgICB0clJhZGl1c1g6IGxlcnBEb3VibGUoYS50clJhZGl1c1gsIGIudHJSYWRpdXNYLCB0KSwKICAgICAgdHJSYWRpdXNZOiBsZXJwRG91YmxlKGEudHJSYWRpdXNZLCBiLnRyUmFkaXVzWSwgdCksCiAgICAgIGJyUmFkaXVzWDogbGVycERvdWJsZShhLmJyUmFkaXVzWCwgYi5iclJhZGl1c1gsIHQpLAogICAgICBiclJhZGl1c1k6IGxlcnBEb3VibGUoYS5iclJhZGl1c1ksIGIuYnJSYWRpdXNZLCB0KSwKICAgICAgYmxSYWRpdXNYOiBsZXJwRG91YmxlKGEuYmxSYWRpdXNYLCBiLmJsUmFkaXVzWCwgdCksCiAgICAgIGJsUmFkaXVzWTogbGVycERvdWJsZShhLmJsUmFkaXVzWSwgYi5ibFJhZGl1c1ksIHQpLAogICAgKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0oZHluYW1pYyBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKHJ1bnRpbWVUeXBlICE9IG90aGVyLnJ1bnRpbWVUeXBlKQogICAgICByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gb3RoZXIgaXMgUlJlY3QKICAgICAgICAmJiBvdGhlci5sZWZ0ICAgICAgPT0gbGVmdAogICAgICAgICYmIG90aGVyLnRvcCAgICAgICA9PSB0b3AKICAgICAgICAmJiBvdGhlci5yaWdodCAgICAgPT0gcmlnaHQKICAgICAgICAmJiBvdGhlci5ib3R0b20gICAgPT0gYm90dG9tCiAgICAgICAgJiYgb3RoZXIudGxSYWRpdXNYID09IHRsUmFkaXVzWAogICAgICAgICYmIG90aGVyLnRsUmFkaXVzWSA9PSB0bFJhZGl1c1kKICAgICAgICAmJiBvdGhlci50clJhZGl1c1ggPT0gdHJSYWRpdXNYCiAgICAgICAgJiYgb3RoZXIudHJSYWRpdXNZID09IHRyUmFkaXVzWQogICAgICAgICYmIG90aGVyLmJsUmFkaXVzWCA9PSBibFJhZGl1c1gKICAgICAgICAmJiBvdGhlci5ibFJhZGl1c1kgPT0gYmxSYWRpdXNZCiAgICAgICAgJiYgb3RoZXIuYnJSYWRpdXNYID09IGJyUmFkaXVzWAogICAgICAgICYmIG90aGVyLmJyUmFkaXVzWSA9PSBiclJhZGl1c1k7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IGhhc2hWYWx1ZXMobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLAogICAgdGxSYWRpdXNYLCB0bFJhZGl1c1ksIHRyUmFkaXVzWCwgdHJSYWRpdXNZLAogICAgYmxSYWRpdXNYLCBibFJhZGl1c1ksIGJyUmFkaXVzWCwgYnJSYWRpdXNZKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgZmluYWwgU3RyaW5nIHJlY3QgPSAnJHtsZWZ0LnRvU3RyaW5nQXNGaXhlZCgxKX0sICcKICAgICAgICAgICAgICAgICAgICAgICAgJyR7dG9wLnRvU3RyaW5nQXNGaXhlZCgxKX0sICcKICAgICAgICAgICAgICAgICAgICAgICAgJyR7cmlnaHQudG9TdHJpbmdBc0ZpeGVkKDEpfSwgJwogICAgICAgICAgICAgICAgICAgICAgICAnJHtib3R0b20udG9TdHJpbmdBc0ZpeGVkKDEpfSc7CiAgICBpZiAodGxSYWRpdXMgPT0gdHJSYWRpdXMgJiYKICAgICAgICB0clJhZGl1cyA9PSBiclJhZGl1cyAmJgogICAgICAgIGJyUmFkaXVzID09IGJsUmFkaXVzKSB7CiAgICAgIGlmICh0bFJhZGl1cy54ID09IHRsUmFkaXVzLnkpCiAgICAgICAgcmV0dXJuICdSUmVjdC5mcm9tTFRSQlIoJHJlY3QsICR7dGxSYWRpdXMueC50b1N0cmluZ0FzRml4ZWQoMSl9KSc7CiAgICAgIHJldHVybiAnUlJlY3QuZnJvbUxUUkJYWSgkcmVjdCwgJHt0bFJhZGl1cy54LnRvU3RyaW5nQXNGaXhlZCgxKX0sICR7dGxSYWRpdXMueS50b1N0cmluZ0FzRml4ZWQoMSl9KSc7CiAgICB9CiAgICByZXR1cm4gJ1JSZWN0LmZyb21MVFJCQW5kQ29ybmVycygnCiAgICAgICAgICAgICAnJHJlY3QsICcKICAgICAgICAgICAgICd0b3BMZWZ0OiAkdGxSYWRpdXMsICcKICAgICAgICAgICAgICd0b3BSaWdodDogJHRyUmFkaXVzLCAnCiAgICAgICAgICAgICAnYm90dG9tUmlnaHQ6ICRiclJhZGl1cywgJwogICAgICAgICAgICAgJ2JvdHRvbUxlZnQ6ICRibFJhZGl1cycKICAgICAgICAgICAnKSc7CiAgfQp9CgovLy8gQSB0cmFuc2Zvcm0gY29uc2lzdGluZyBvZiBhIHRyYW5zbGF0aW9uLCBhIHJvdGF0aW9uLCBhbmQgYSB1bmlmb3JtIHNjYWxlLgovLy8KLy8vIFVzZWQgYnkgW0NhbnZhcy5kcmF3QXRsYXNdLiBUaGlzIGlzIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIHJlcHJlc2VudCB0aGVzZQovLy8gc2ltcGxlIHRyYW5zZm9ybWF0aW9ucyB0aGFuIGEgZnVsbCBtYXRyaXguCi8vIE1vZGVsZWQgYWZ0ZXIgU2tpYSdzIFNrUlNYZm9ybS4KY2xhc3MgUlNUcmFuc2Zvcm0gewogIC8vLyBDcmVhdGVzIGFuIFJTVHJhbnNmb3JtLgogIC8vLwogIC8vLyBBbiBbUlNUcmFuc2Zvcm1dIGV4cHJlc3NlcyB0aGUgY29tYmluYXRpb24gb2YgYSB0cmFuc2xhdGlvbiwgYSByb3RhdGlvbgogIC8vLyBhcm91bmQgYSBwYXJ0aWN1bGFyIHBvaW50LCBhbmQgYSBzY2FsZSBmYWN0b3IuCiAgLy8vCiAgLy8vIFRoZSBmaXJzdCBhcmd1bWVudCwgYHNjb3NgLCBpcyB0aGUgY29zaW5lIG9mIHRoZSByb3RhdGlvbiwgbXVsdGlwbGllZCBieQogIC8vLyB0aGUgc2NhbGUgZmFjdG9yLgogIC8vLwogIC8vLyBUaGUgc2Vjb25kIGFyZ3VtZW50LCBgc3NpbmAsIGlzIHRoZSBzaW5lIG9mIHRoZSByb3RhdGlvbiwgbXVsdGlwbGllZCBieQogIC8vLyB0aGF0IHNhbWUgc2NhbGUgZmFjdG9yLgogIC8vLwogIC8vLyBUaGUgdGhpcmQgYXJndW1lbnQgaXMgdGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgdHJhbnNsYXRpb24sIG1pbnVzIHRoZQogIC8vLyBgc2Nvc2AgYXJndW1lbnQgbXVsdGlwbGllZCBieSB0aGUgeC1jb29yZGluYXRlIG9mIHRoZSByb3RhdGlvbiBwb2ludCwgcGx1cwogIC8vLyB0aGUgYHNzaW5gIGFyZ3VtZW50IG11bHRpcGxpZWQgYnkgdGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgcm90YXRpb24gcG9pbnQuCiAgLy8vCiAgLy8vIFRoZSBmb3VydGggYXJndW1lbnQgaXMgdGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgdHJhbnNsYXRpb24sIG1pbnVzIHRoZSBgc3NpbmAKICAvLy8gYXJndW1lbnQgbXVsdGlwbGllZCBieSB0aGUgeC1jb29yZGluYXRlIG9mIHRoZSByb3RhdGlvbiBwb2ludCwgbWludXMgdGhlCiAgLy8vIGBzY29zYCBhcmd1bWVudCBtdWx0aXBsaWVkIGJ5IHRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIHJvdGF0aW9uIHBvaW50LgogIC8vLwogIC8vLyBUaGUgW1JTVHJhbnNmb3JtLmZyb21Db21wb25lbnRzXSBtZXRob2QgbWF5IGJlIGEgc2ltcGxlciB3YXkgdG8KICAvLy8gY29uc3RydWN0IHRoZXNlIHZhbHVlcy4gSG93ZXZlciwgaWYgdGhlcmUgaXMgYSB3YXkgdG8gZmFjdG9yIG91dCB0aGUKICAvLy8gY29tcHV0YXRpb25zIG9mIHRoZSBzaW5lIGFuZCBjb3NpbmUgb2YgdGhlIHJvdGF0aW9uIHNvIHRoYXQgdGhleSBjYW4gYmUKICAvLy8gcmV1c2VkIG92ZXIgbXVsdGlwbGUgY2FsbHMgdG8gdGhpcyBjb25zdHJ1Y3RvciwgaXQgbWF5IGJlIG1vcmUgZWZmaWNpZW50CiAgLy8vIHRvIGRpcmVjdGx5IHVzZSB0aGlzIGNvbnN0cnVjdG9yIGluc3RlYWQuCiAgUlNUcmFuc2Zvcm0oZG91YmxlIHNjb3MsIGRvdWJsZSBzc2luLCBkb3VibGUgdHgsIGRvdWJsZSB0eSkgewogICAgX3ZhbHVlCiAgICAgIC4uWzBdID0gc2NvcwogICAgICAuLlsxXSA9IHNzaW4KICAgICAgLi5bMl0gPSB0eAogICAgICAuLlszXSA9IHR5OwogIH0KCiAgLy8vIENyZWF0ZXMgYW4gUlNUcmFuc2Zvcm0gZnJvbSBpdHMgaW5kaXZpZHVhbCBjb21wb25lbnRzLgogIC8vLwogIC8vLyBUaGUgYHJvdGF0aW9uYCBwYXJhbWV0ZXIgZ2l2ZXMgdGhlIHJvdGF0aW9uIGluIHJhZGlhbnMuCiAgLy8vCiAgLy8vIFRoZSBgc2NhbGVgIHBhcmFtZXRlciBkZXNjcmliZXMgdGhlIHVuaWZvcm0gc2NhbGUgZmFjdG9yLgogIC8vLwogIC8vLyBUaGUgYGFuY2hvclhgIGFuZCBgYW5jaG9yWWAgcGFyYW1ldGVycyBnaXZlIHRoZSBjb29yZGluYXRlIG9mIHRoZSBwb2ludAogIC8vLyBhcm91bmQgd2hpY2ggdG8gcm90YXRlLgogIC8vLwogIC8vLyBUaGUgYHRyYW5zbGF0ZVhgIGFuZCBgdHJhbnNsYXRlWWAgcGFyYW1ldGVycyBnaXZlIHRoZSBjb29yZGluYXRlIG9mIHRoZQogIC8vLyBvZmZzZXQgYnkgd2hpY2ggdG8gdHJhbnNsYXRlLgogIC8vLwogIC8vLyBUaGlzIGNvbnN0cnVjdG9yIGNvbXB1dGVzIHRoZSBhcmd1bWVudHMgb2YgdGhlIFtuZXcgUlNUcmFuc2Zvcm1dCiAgLy8vIGNvbnN0cnVjdG9yIGFuZCB0aGVuIGRlZmVycyB0byB0aGF0IGNvbnN0cnVjdG9yIHRvIGFjdHVhbGx5IGNyZWF0ZSB0aGUKICAvLy8gb2JqZWN0LiBJZiBtYW55IFtSU1RyYW5zZm9ybV0gb2JqZWN0cyBhcmUgYmVpbmcgY3JlYXRlZCBhbmQgdGhlcmUgaXMgYSB3YXkKICAvLy8gdG8gZmFjdG9yIG91dCB0aGUgY29tcHV0YXRpb25zIG9mIHRoZSBzaW5lIGFuZCBjb3NpbmUgb2YgdGhlIHJvdGF0aW9uCiAgLy8vICh3aGljaCBhcmUgY29tcHV0ZWQgZWFjaCB0aW1lIHRoaXMgY29uc3RydWN0b3IgaXMgY2FsbGVkKSBhbmQgcmV1c2UgdGhlbQogIC8vLyBvdmVyIG11bHRpcGxlIFtSU1RyYW5zZm9ybV0gb2JqZWN0cywgaXQgbWF5IGJlIG1vcmUgZWZmaWNpZW50IHRvIGRpcmVjdGx5CiAgLy8vIHVzZSB0aGUgbW9yZSBkaXJlY3QgW25ldyBSU1RyYW5zZm9ybV0gY29uc3RydWN0b3IgaW5zdGVhZC4KICBmYWN0b3J5IFJTVHJhbnNmb3JtLmZyb21Db21wb25lbnRzKHsKICAgIGRvdWJsZSByb3RhdGlvbiwKICAgIGRvdWJsZSBzY2FsZSwKICAgIGRvdWJsZSBhbmNob3JYLAogICAgZG91YmxlIGFuY2hvclksCiAgICBkb3VibGUgdHJhbnNsYXRlWCwKICAgIGRvdWJsZSB0cmFuc2xhdGVZCiAgfSkgewogICAgZmluYWwgZG91YmxlIHNjb3MgPSBtYXRoLmNvcyhyb3RhdGlvbikgKiBzY2FsZTsKICAgIGZpbmFsIGRvdWJsZSBzc2luID0gbWF0aC5zaW4ocm90YXRpb24pICogc2NhbGU7CiAgICBmaW5hbCBkb3VibGUgdHggPSB0cmFuc2xhdGVYICsgLXNjb3MgKiBhbmNob3JYICsgc3NpbiAqIGFuY2hvclk7CiAgICBmaW5hbCBkb3VibGUgdHkgPSB0cmFuc2xhdGVZICsgLXNzaW4gKiBhbmNob3JYIC0gc2NvcyAqIGFuY2hvclk7CiAgICByZXR1cm4gUlNUcmFuc2Zvcm0oc2Nvcywgc3NpbiwgdHgsIHR5KTsKICB9CgogIGZpbmFsIEZsb2F0MzJMaXN0IF92YWx1ZSA9IEZsb2F0MzJMaXN0KDQpOwoKICAvLy8gVGhlIGNvc2luZSBvZiB0aGUgcm90YXRpb24gbXVsdGlwbGllZCBieSB0aGUgc2NhbGUgZmFjdG9yLgogIGRvdWJsZSBnZXQgc2NvcyA9PiBfdmFsdWVbMF07CgogIC8vLyBUaGUgc2luZSBvZiB0aGUgcm90YXRpb24gbXVsdGlwbGllZCBieSB0aGF0IHNhbWUgc2NhbGUgZmFjdG9yLgogIGRvdWJsZSBnZXQgc3NpbiA9PiBfdmFsdWVbMV07CgogIC8vLyBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSB0cmFuc2xhdGlvbiwgbWludXMgW3Njb3NdIG11bHRpcGxpZWQgYnkgdGhlCiAgLy8vIHgtY29vcmRpbmF0ZSBvZiB0aGUgcm90YXRpb24gcG9pbnQsIHBsdXMgW3NzaW5dIG11bHRpcGxpZWQgYnkgdGhlCiAgLy8vIHktY29vcmRpbmF0ZSBvZiB0aGUgcm90YXRpb24gcG9pbnQuCiAgZG91YmxlIGdldCB0eCA9PiBfdmFsdWVbMl07CgogIC8vLyBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSB0cmFuc2xhdGlvbiwgbWludXMgW3NzaW5dIG11bHRpcGxpZWQgYnkgdGhlCiAgLy8vIHgtY29vcmRpbmF0ZSBvZiB0aGUgcm90YXRpb24gcG9pbnQs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Bk4kBkdNUUxPUEEnFRIUFBcWBzQ0RUUsBAEtAUEgAUUgAUpIKh4BSkkqHgIBFWRhcnQ6dWkvZ2VvbWV0cnkuZGFydDJvcmctZGFydGxhbmctc2RrOi8vL2ZsdXR0ZXIvbGliL3VpL2hhc2hfY29kZXMuZGFydJKjLy8gQ29weXJpZ2h0IDIwMTMgVGhlIEZsdXR0ZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LnVpOwoKY2xhc3MgX0hhc2hFbmQgeyBjb25zdCBfSGFzaEVuZCgpOyB9CmNvbnN0IF9IYXNoRW5kIF9oYXNoRW5kID0gX0hhc2hFbmQoKTsKCi8vLyBKZW5raW5zIGhhc2ggZnVuY3Rpb24sIG9wdGltaXplZCBmb3Igc21hbGwgaW50ZWdlcnMuCi8vCi8vIEJvcnJvd2VkIGZyb20gdGhlIGRhcnQgc2RrOiBzZGsvbGliL21hdGgvamVua2luc19zbWlfaGFzaC5kYXJ0LgpjbGFzcyBfSmVua2lucyB7CiAgc3RhdGljIGludCBjb21iaW5lKGludCBoYXNoLCBPYmplY3QgbykgewogICAgYXNzZXJ0KG8gaXMhIEl0ZXJhYmxlKTsKICAgIGhhc2ggPSAweDFmZmZmZmZmICYgKGhhc2ggKyBvLmhhc2hDb2RlKTsKICAgIGhhc2ggPSAweDFmZmZmZmZmICYgKGhhc2ggKyAoKDB4MDAwN2ZmZmYgJiBoYXNoKSA8PCAxMCkpOwogICAgcmV0dXJuIGhhc2ggXiAoaGFzaCA+PiA2KTsKICB9CgogIHN0YXRpYyBpbnQgZmluaXNoKGludCBoYXNoKSB7CiAgICBoYXNoID0gMHgxZmZmZmZmZiAmIChoYXNoICsgKCgweDAzZmZmZmZmICYgaGFzaCkgPDwgMykpOwogICAgaGFzaCA9IGhhc2ggXiAoaGFzaCA+PiAxMSk7CiAgICByZXR1cm4gMHgxZmZmZmZmZiAmIChoYXNoICsgKCgweDAwMDAzZmZmICYgaGFzaCkgPDwgMTUpKTsKICB9Cn0KCi8vLyBDb21iaW5lIHVwIHRvIHR3ZW50eSBvYmplY3RzJyBoYXNoIGNvZGVzIGludG8gb25lIHZhbHVlLgovLy8KLy8vIElmIHlvdSBvbmx5IG5lZWQgdG8gaGFuZGxlIG9uZSBvYmplY3QncyBoYXNoIGNvZGUsIHRoZW4ganVzdCByZWZlciB0byBpdHMKLy8vIFtPYmplY3QuaGFzaENvZGVdIGdldHRlciBkaXJlY3RseS4KLy8vCi8vLyBJZiB5b3UgbmVlZCB0byBjb21iaW5lIGFuIGFyYml0cmFyeSBudW1iZXIgb2Ygb2JqZWN0cyBmcm9tIGEgW0xpc3RdIG9yIG90aGVyCi8vLyBbSXRlcmFibGVdLCB1c2UgW2hhc2hMaXN0XS4gVGhlIG91dHB1dCBvZiBbaGFzaExpc3RdIGNhbiBiZSB1c2VkIGFzIG9uZSBvZgovLy8gdGhlIGFyZ3VtZW50cyB0byB0aGlzIGZ1bmN0aW9uLgovLy8KLy8vIEZvciBleGFtcGxlOgovLy8KLy8vIGBgYGRhcnQKLy8vIGludCBoYXNoQ29kZSA9PiBoYXNoVmFsdWVzKGZvbywgYmFyLCBoYXNoTGlzdChxdXV4KSwgYmF6KTsKLy8vIGBgYAppbnQgaGFzaFZhbHVlcygKICBPYmplY3QgYXJnMDEsICAgICAgICAgICAgT2JqZWN0IGFyZzAyLCAgICAgICAgICBbIE9iamVjdCBhcmcwMyA9IF9oYXNoRW5kLAogIE9iamVjdCBhcmcwNCA9IF9oYXNoRW5kLCBPYmplY3QgYXJnMDUgPSBfaGFzaEVuZCwgT2JqZWN0IGFyZzA2ID0gX2hhc2hFbmQsCiAgT2JqZWN0IGFyZzA3ID0gX2hhc2hFbmQsIE9iamVjdCBhcmcwOCA9IF9oYXNoRW5kLCBPYmplY3QgYXJnMDkgPSBfaGFzaEVuZCwKICBPYmplY3QgYXJnMTAgPSBfaGFzaEVuZCwgT2JqZWN0IGFyZzExID0gX2hhc2hFbmQsIE9iamVjdCBhcmcxMiA9IF9oYXNoRW5kLAogIE9iamVjdCBhcmcxMyA9IF9oYXNoRW5kLCBPYmplY3QgYXJnMTQgPSBfaGFzaEVuZCwgT2JqZWN0IGFyZzE1ID0gX2hhc2hFbmQsCiAgT2JqZWN0IGFyZzE2ID0gX2hhc2hFbmQsIE9iamVjdCBhcmcxNyA9IF9oYXNoRW5kLCBPYmplY3QgYXJnMTggPSBfaGFzaEVuZCwKICBPYmplY3QgYXJnMTkgPSBfaGFzaEVuZCwgT2JqZWN0IGFyZzIwID0gX2hhc2hFbmQgXSkgewogIGludCByZXN1bHQgPSAwOwogIHJlc3VsdCA9IF9KZW5raW5zLmNvbWJpbmUocmVzdWx0LCBhcmcwMSk7CiAgcmVzdWx0ID0gX0plbmtpbnMuY29tYmluZShyZXN1bHQsIGFyZzAyKTsKICBpZiAoYXJnMDMgIT0gX2hhc2hFbmQpIHsKICAgIHJlc3VsdCA9IF9KZW5raW5zLmNvbWJpbmUocmVzdWx0LCBhcmcwMyk7CiAgICBpZiAoYXJnMDQgIT0gX2hhc2hFbmQpIHsKICAgICAgcmVzdWx0ID0gX0plbmtpbnMuY29tYmluZShyZXN1bHQsIGFyZzA0KTsKICAgICAgaWYgKGFyZzA1ICE9IF9oYXNoRW5kKSB7CiAgICAgICAgcmVzdWx0ID0gX0plbmtpbnMuY29tYmluZShyZXN1bHQsIGFyZzA1KTsKICAgICAgICBpZiAoYXJnMDYgIT0gX2hhc2hFbmQpIHsKICAgICAgICAgIHJlc3VsdCA9IF9KZW5raW5zLmNvbWJpbmUocmVzdWx0LCBhcmcwNik7CiAgICAgICAgICBpZiAoYXJnMDcgIT0gX2hhc2hFbmQpIHsKICAgICAgICAgICAgcmVzdWx0ID0gX0plbmtpbnMuY29tYmluZShyZXN1bHQsIGFyZzA3KTsKICAgICAgICAgICAgaWYgKGFyZzA4ICE9IF9oYXNoRW5kKSB7CiAgICAgICAgICAgICAgcmVzdWx0ID0gX0plbmtpbnMuY29tYmluZShyZXN1bHQsIGFyZzA4KTsKICAgICAgICAgICAgICBpZiAoYXJnMDkgIT0gX2hhc2hFbmQpIHsKICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9KZW5raW5zLmNvbWJpbmUocmVzdWx0LCBhcmcwOSk7CiAgICAgICAgICAgICAgICBpZiAoYXJnMTAgIT0gX2hhc2hFbmQpIHsKICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX0plbmtpbnMuY29tYmluZShyZXN1bHQsIGFyZzEwKTsKICAgICAgICAgICAgICAgICAgaWYgKGFyZzExICE9IF9oYXNoRW5kKSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX0plbmtpbnMuY29tYmluZShyZXN1bHQsIGFyZzExKTsKICAgICAgICAgICAgICAgICAgICBpZiAoYXJnMTIgIT0gX2hhc2hFbmQpIHsKICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9KZW5raW5zLmNvbWJpbmUocmVzdWx0LCBhcmcxMik7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnMTMgIT0gX2hhc2hFbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX0plbmtpbnMuY29tYmluZShyZXN1bHQsIGFyZzEzKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZzE0ICE9IF9oYXNoRW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX0plbmtpbnMuY29tYmluZShyZXN1bHQsIGFyZzE0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnMTUgIT0gX2hhc2hFbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9KZW5raW5zLmNvbWJpbmUocmVzdWx0LCBhcmcxNSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnMTYgIT0gX2hhc2hFbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX0plbmtpbnMuY29tYmluZShyZXN1bHQsIGFyZzE2KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZzE3ICE9IF9oYXNoRW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX0plbmtpbnMuY29tYmluZShyZXN1bHQsIGFyZzE3KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnMTggIT0gX2hhc2hFbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9KZW5raW5zLmNvbWJpbmUocmVzdWx0LCBhcmcxOCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnMTkgIT0gX2hhc2hFbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX0plbmtpbnMuY29tYmluZShyZXN1bHQsIGFyZzE5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZzIwICE9IF9oYXNoRW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX0plbmtpbnMuY29tYmluZShyZXN1bHQsIGFyZzIwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJIGNhbiBzZWUgbXkgaG91c2UgZnJvbSBoZXJlIQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIHJldHVybiBfSmVua2lucy5maW5pc2gocmVzdWx0KTsKfQoKLy8vIENvbWJpbmUgdGhlIFtPYmplY3QuaGFzaENvZGVdIHZhbHVlcyBvZiBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIG9iamVjdHMgZnJvbQovLy8gYW4gW0l0ZXJhYmxlXSBpbnRvIG9uZSB2YWx1ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgc2FtZSB2YWx1ZSBpZgovLy8gZ2l2ZW4gbnVsbCBhcyBpZiBnaXZlbiBhbiBlbXB0eSBsaXN0LgppbnQgaGFzaExpc3QoSXRlcmFibGU8T2JqZWN0PiBhcmd1bWVudHMpIHsKICBpbnQgcmVzdWx0ID0gMDsKICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgIGZvciAoT2JqZWN0IGFyZ3VtZW50IGluIGFyZ3VtZW50cykKICAgICAgcmVzdWx0ID0gX0plbmtpbnMuY29tYmluZShyZXN1bHQsIGFyZ3VtZW50KTsKICB9CiAgcmV0dXJuIF9KZW5raW5zLmZpbmlzaChyZXN1bHQpOwp9CnsAPEoeAREBJSYBOQNDESscLT4fBAEgPSA+BAIBPQROJwRRTyQEEQQMPwgQTU1NTU1NOBIsLBsuHTAfMiE0IzYlOCc6KTwrPi1AL0IxRDNGNUg3SjlMO049UEcmJCIgHhwaGBYUEhAODAoIBgQiAgFQTiorEhsnMwQiAgEXZGFydDp1aS9oYXNoX2NvZGVzLmRhcnQ7b3JnLWRhcnRsYW5nLXNkazovLy9mbHV0dGVyL2xpYi91aS9pc29sYXRlX25hbWVfc2VydmVyLmRhcnSNhS8vIENvcHlyaWdodCAyMDEzIFRoZSBGbHV0dGVyIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC51aTsKCi8vLyBTdGF0aWMgbWV0aG9kcyB0byBhbGxvdyBmb3Igc2ltcGxlIHNoYXJpbmcgb2YgW1NlbmRQb3J0XXMgYWNyb3NzIFtJc29sYXRlXXMuCi8vLwovLy8gQWxsIGlzb2xhdGVzIHNoYXJlIGEgZ2xvYmFsIG1hcHBpbmcgb2YgbmFtZXMgdG8gcG9ydHMuIEFuIGlzb2xhdGUgY2FuCi8vLyByZWdpc3RlciBhIFtTZW5kUG9ydF0gd2l0aCBhIGdpdmVuIG5hbWUgdXNpbmcgW3JlZ2lzdGVyUG9ydFdpdGhOYW1lXTsKLy8vIGFub3RoZXIgaXNvbGF0ZSBjYW4gdGhlbiBsb29rIHVwIHRoYXQgcG9ydCB1c2luZyBbbG9va3VwUG9ydEJ5TmFtZV0uCi8vLwovLy8gVG8gY3JlYXRlIGEgW1NlbmRQb3J0XSwgZmlyc3QgY3JlYXRlIGEgW1JlY2VpdmVQb3J0XSwgdGhlbiB1c2UKLy8vIFtSZWNlaXZlUG9ydC5zZW5kUG9ydF0uCi8vLwovLy8gU2luY2UgbXVsdGlwbGUgaXNvbGF0ZXMgY2FuIGVhY2ggb2J0YWluIHRoZSBzYW1lIFtTZW5kUG9ydF0gYXNzb2NpYXRlZCB3aXRoCi8vLyBhIHBhcnRpY3VsYXIgW1JlY2VpdmVQb3J0XSwgdGhlIHByb3RvY29sIGJ1aWx0IG9uIHRvcCBvZiB0aGlzIG1lY2hhbmlzbQovLy8gc2hvdWxkIHR5cGljYWxseSBjb25zaXN0IG9mIGEgc2luZ2xlIG1lc3NhZ2UuIElmIG1vcmUgZWxhYm9yYXRlIHR3by13YXkKLy8vIGNvbW11bmljYXRpb24gb3IgbXVsdGlwbGUtbWVzc2FnZSBjb21tdW5pY2F0aW9uIGlzIG5lY2Vzc2FyeSwgaXQgaXMKLy8vIHJlY29tbWVuZGVkIHRvIGVzdGFibGlzaCBhIHNlcGFyYXRlIGNvbW11bmljYXRpb24gY2hhbm5lbCBpbiB0aGF0IGZpcnN0Ci8vLyBtZXNzYWdlIChlLmcuIGJ5IHBhc3NpbmcgYSBkZWRpY2F0ZWQgW1NlbmRQb3J0XSkuCmNsYXNzIElzb2xhdGVOYW1lU2VydmVyIHsKICAvLyBUaGlzIGNsYXNzIGlzIG9ubHkgYSBuYW1lc3BhY2UsIGFuZCBzaG91bGQgbm90IGJlIGluc3RhbnRpYXRlZCBvcgogIC8vIGV4dGVuZGVkIGRpcmVjdGx5LgogIGZhY3RvcnkgSXNvbGF0ZU5hbWVTZXJ2ZXIuXygpID0+IG51bGw7CgogIC8vLyBMb29rcyB1cCB0aGUgW1NlbmRQb3J0XSBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBuYW1lLgogIC8vLwogIC8vLyBSZXR1cm5zIG51bGwgaWYgdGhlIG5hbWUgZG9lcyBub3QgZXhpc3QuIFRvIHJlZ2lzdGVyIHRoZSBuYW1lIGluIHRoZSBmaXJzdAogIC8vLyBwbGFjZSwgY29uc2lkZXIgW3JlZ2lzdGVyUG9ydFdpdGhOYW1lXS4KICAvLy8KICAvLy8gVGhlIGBuYW1lYCBhcmd1bWVudCBtdXN0IG5vdCBiZSBudWxsLgogIHN0YXRpYyBTZW5kUG9ydCBsb29rdXBQb3J0QnlOYW1lKFN0cmluZyBuYW1lKSB7CiAgICBhc3NlcnQobmFtZSAhPSBudWxsLCAiJ25hbWUnIGNhbm5vdCBiZSBudWxsLiIpOwogICAgcmV0dXJuIF9sb29rdXBQb3J0QnlOYW1lKG5hbWUpOwogIH0KCiAgLy8vIFJlZ2lzdGVycyBhIFtTZW5kUG9ydF0gd2l0aCBhIGdpdmVuIG5hbWUuCiAgLy8vCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiByZWdpc3RyYXRpb24gaXMgc3VjY2Vzc2Z1bCwgYW5kIGZhbHNlIGlmIHRoZSBuYW1lIGVudHJ5CiAgLy8vIGFscmVhZHkgZXhpc3RlZCAoaW4gd2hpY2ggY2FzZSB0aGUgZWFybGllciByZWdpc3RyYXRpb24gaXMgbGVmdAogIC8vLyB1bmNoYW5nZWQpLiBUbyByZW1vdmUgYSByZWdpc3RyYXRpb24sIGNvbnNpZGVyIFtyZW1vdmVQb3J0TmFtZU1hcHBpbmddLgogIC8vLwogIC8vLyBPbmNlIGEgcG9ydCBoYXMgYmVlbiByZWdpc3RlcmVkIHdpdGggYSBuYW1lLCBpdCBjYW4gYmUgb2J0YWluZWQgZnJvbSBhbnkKICAvLy8gW0lzb2xhdGVdIHVzaW5nIFtsb29rdXBQb3J0QnlOYW1lXS4KICAvLy8KICAvLy8gTXVsdGlwbGUgaXNvbGF0ZXMgc2hvdWxkIGF2b2lkIGF0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgcG9ydHMgd2l0aCB0aGUgc2FtZQogIC8vLyBuYW1lLCBhcyB0aGVyZSBpcyBhbiBpbmhlcmVudCByYWNlIGNvbmRpdGlvbiBpbiBkb2luZyBzby4KICAvLy8KICAvLy8gVGhlIGBwb3J0YCBhbmQgYG5hbWVgIGFyZ3VtZW50cyBtdXN0IG5vdCBiZSBudWxsLgogIHN0YXRpYyBib29sIHJlZ2lzdGVyUG9ydFdpdGhOYW1lKFNlbmRQb3J0IHBvcnQsIFN0cmluZyBuYW1lKSB7CiAgICBhc3NlcnQocG9ydCAhPSBudWxsLCAiJ3BvcnQnIGNhbm5vdCBiZSBudWxsLiIpOwogICAgYXNzZXJ0KG5hbWUgIT0gbnVsbCwgIiduYW1lJyBjYW5ub3QgYmUgbnVsbC4iKTsKICAgIHJldHVybiBfcmVnaXN0ZXJQb3J0V2l0aE5hbWUocG9ydCwgbmFtZSk7CiAgfQoKICAvLy8gUmVtb3ZlcyBhIG5hbWUtdG8tW1NlbmRQb3J0XSBtYXBwaW5nIGdpdmVuIGl0cyBuYW1lLgogIC8vLwogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIG1hcHBpbmcgd2FzIHN1Y2Nlc3NmdWxseSByZW1vdmVkLCBmYWxzZSBpZiB0aGUgbWFwcGluZwogIC8vLyBkaWQgbm90IGV4aXN0LiBUbyBhZGQgYSByZWdpc3RyYXRpb24sIGNvbnNpZGVyIFtyZWdpc3RlclBvcnRXaXRoTmFtZV0uCiAgLy8vCiAgLy8vIEdlbmVyYWxseSwgcmVtb3ZpbmcgYSBwb3J0IG5hbWUgbWFwcGluZyBpcyBhbiBpbmhlcmVudGx5IHJhY3kgb3BlcmF0aW9uCiAgLy8vIChhbm90aGVyIGlzb2xhdGUgY291bGQgaGF2ZSBvYnRhaW5lZCB0aGUgbmFtZSBqdXN0IHByaW9yIHRvIHRoZSBuYW1lIGJlaW5nCiAgLy8vIHJlbW92ZWQsIGFuZCB0aHVzIHdvdWxkIHN0aWxsIGJlIGFibGUgdG8gY29tbXVuaWNhdGUgb3ZlciB0aGUgcG9ydCBldmVuCiAgLy8vIGFmdGVyIGl0IGhhcyBiZWVuIHJlbW92ZWQpLgogIC8vLwogIC8vLyBUaGUgYG5hbWVgIGFyZ3VtZW50IG11c3Qgbm90IGJlIG51bGwuCiAgc3RhdGljIGJvb2wgcmVtb3ZlUG9ydE5hbWVNYXBwaW5nKFN0cmluZyBuYW1lKSB7CiAgICBhc3NlcnQobmFtZSAhPSBudWxsLCAiJ25hbWUnIGNhbm5vdCBiZSBudWxsLiIpOwogICAgcmV0dXJuIF9yZW1vdmVQb3J0TmFtZU1hcHBpbmcobmFtZSk7CiAgfQoKICBzdGF0aWMgU2VuZFBvcnQgX2xvb2t1cFBvcnRCeU5hbWUoU3RyaW5nIG5hbWUpCiAgICAgIG5hdGl2ZSAnSXNvbGF0ZU5hbWVTZXJ2ZXJOYXRpdmVzX0xvb2t1cFBvcnRCeU5hbWUnOwogIHN0YXRpYyBib29sIF9yZWdpc3RlclBvcnRXaXRoTmFtZShTZW5kUG9ydCBwb3J0LCBTdHJpbmcgbmFtZSkKICAgICAgbmF0aXZlICdJc29sYXRlTmFtZVNlcnZlck5hdGl2ZXNfUmVnaXN0ZXJQb3J0V2l0aE5hbWUnOwogIHN0YXRpYyBib29sIF9yZW1vdmVQb3J0TmFtZU1hcHBpbmcoU3RyaW5nIG5hbWUpCiAgICAgIG5hdGl2ZSAnSXNvbGF0ZU5hbWVTZXJ2ZXJOYXRpdmVzX1JlbW92ZVBvcnROYW1lTWFwcGluZyc7Cn0KUQA8Sh4BEQFRBEpKSQRDHARQTExITDYaRxgpATwGUS4GLDI0JAQBMAZORk4GTyoGUEAGOEE0NC4EATsGUU0GTlFOIgYsMzQpBAExOkA+Mj8CASBkYXJ0OnVpL2lzb2xhdGVfbmFtZV9zZXJ2ZXIuZGFydC9vcmctZGFydGxhbmctc2RrOi8vL2ZsdXR0ZXIvbGliL3VpL25hdGl2ZXMuZGFydIvgLy8gQ29weXJpZ2h0IDIwMTMgVGhlIEZsdXR0ZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gVE9ETyhkbmZpZWxkKTogcmVtb3ZlIHVudXNlZF9lbGVtZW50IGlnbm9yZXMgd2hlbiBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMzUxNjQgaXMgcmVzb2x2ZWQuCgpwYXJ0IG9mIGRhcnQudWk7CgovLyBDb3JlbGliICdwcmludCcgaW1wbGVtZW50YXRpb24uCnZvaWQgX3ByaW50KGR5bmFtaWMgYXJnKSB7CiAgX0xvZ2dlci5fcHJpbnRTdHJpbmcoYXJnLnRvU3RyaW5nKCkpOwp9Cgp2b2lkIF9wcmludERlYnVnKGR5bmFtaWMgYXJnKSB7CiAgX0xvZ2dlci5fcHJpbnREZWJ1Z1N0cmluZyhhcmcudG9TdHJpbmcoKSk7Cn0KCmNsYXNzIF9Mb2dnZXIgewogIHN0YXRpYyB2b2lkIF9wcmludFN0cmluZyhTdHJpbmcgcykgbmF0aXZlICdMb2dnZXJfUHJpbnRTdHJpbmcnOwogIHN0YXRpYyB2b2lkIF9wcmludERlYnVnU3RyaW5nKFN0cmluZyBzKSBuYXRpdmUgJ0xvZ2dlcl9QcmludERlYnVnU3RyaW5nJzsKfQoKLy8gSWYgd2UgYWN0dWFsbHkgcnVuIG9uIGJpZyBlbmRpYW4gbWFjaGluZXMsIHdlJ2xsIG5lZWQgdG8gZG8gc29tZXRoaW5nIHNtYXJ0ZXIKLy8gaGVyZS4gV2UgZG9uJ3QgdXNlIFtFbmRpYW4uSG9zdF0gYmVjYXVzZSBpdCdzIG5vdCBhIGNvbXBpbGUtdGltZQovLyBjb25zdGFudCBhbmQgY2FuJ3QgcHJvcGFnYXRlIGludG8gdGhlIHNldC9nZXQgY2FsbHMuCmNvbnN0IEVuZGlhbiBfa0Zha2VIb3N0RW5kaWFuID0gRW5kaWFuLmxpdHRsZTsKCi8vIEEgc2VydmljZSBwcm90b2NvbCBleHRlbnNpb24gdG8gc2NoZWR1bGUgYSBmcmFtZSB0byBiZSByZW5kZXJlZCBpbnRvIHRoZQovLyB3aW5kb3cuCkZ1dHVyZTxkZXZlbG9wZXIuU2VydmljZUV4dGVuc2lvblJlc3BvbnNlPiBfc2NoZWR1bGVGcmFtZSgKICAgIFN0cmluZyBtZXRob2QsCiAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtZXRlcnMKICAgICkgYXN5bmMgewogIC8vIFNjaGVkdWxlIHRoZSBmcmFtZS4KICB3aW5kb3cuc2NoZWR1bGVGcmFtZSgpOwogIC8vIEFsd2F5cyBzdWNjZWVkLgogIHJldHVybiBkZXZlbG9wZXIuU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLnJlc3VsdChqc29uLmVuY29kZSg8U3RyaW5nLCBTdHJpbmc+ewogICAgJ3R5cGUnOiAnU3VjY2VzcycsCiAgfSkpOwp9CgpAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCnZvaWQgX3NldHVwSG9va3MoKSB7ICAvLyBpZ25vcmU6IHVudXNlZF9lbGVtZW50CiAgYXNzZXJ0KCgpIHsKICAgIC8vIEluIGRlYnVnIG1vZGUsIHJlZ2lzdGVyIHRoZSBzY2hlZHVsZSBmcmFtZSBleHRlbnNpb24uCiAgICBkZXZlbG9wZXIucmVnaXN0ZXJFeHRlbnNpb24oJ2V4dC51aS53aW5kb3cuc2NoZWR1bGVGcmFtZScsIF9zY2hlZHVsZUZyYW1lKTsKICAgIHJldHVybiB0cnVlOwogIH0oKSk7Cn0KCi8vLyBSZXR1cm5zIHJ1bnRpbWUgRGFydCBjb21waWxhdGlvbiB0cmFjZSBhcyBhIFVURi04IGVuY29kZWQgbWVtb3J5IGJ1ZmZlci4KLy8vCi8vLyBUaGUgYnVmZmVyIGNvbnRhaW5zIGEgbGlzdCBvZiBzeW1ib2xzIGNvbXBpbGVkIGJ5IHRoZSBEYXJ0IEpJVCBhdCBydW50aW1lIHVwCi8vLyB0byB0aGUgcG9pbnQgd2hlbiB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQuIFRoaXMgbGlzdCBjYW4gYmUgc2F2ZWQgdG8gYSB0ZXh0Ci8vLyBmaWxlIGFuZCBwYXNzZWQgdG8gdG9vbHMgc3VjaCBhcyBgZmx1dHRlciBidWlsZGAgb3IgRGFydCBgZ2VuX3NuYXBzaG90YCBpbgovLy8gb3JkZXIgdG8gcHJlLWNvbXBpbGUgdGhpcyBjb2RlIG9mZmxpbmUuCi8vLwovLy8gVGhlIGxpc3QgaGFzIG9uZSBzeW1ib2wgcGVyIGxpbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtYXQ6Ci8vLyBgPG5hbWVzcGFjZT4sPGNsYXNzPiw8c3ltYm9sPlxuYC4KLy8vCi8vLyBIZXJlIGFyZSBzb21lIGV4YW1wbGVzOgovLy8KLy8vIGBgYAovLy8gZGFydDpjb3JlLER1cmF0aW9uLGdldDppbk1pbGxpc2Vjb25kcwovLy8gcGFja2FnZTpmbHV0dGVyL3NyYy93aWRnZXRzL2JpbmRpbmcuZGFydCw6OixydW5BcHAKLy8vIGZpbGU6Ly8vLi4uL215X2FwcC5kYXJ0LDo6LG1haW4KLy8vIGBgYAovLy8KLy8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBlZmZlY3RpdmUgaW4gZGVidWcgYW5kIGR5bmFtaWMgbW9kZXMsIGFuZCB3aWxsIHRocm93IGluIEFPVCBtb2RlLgpMaXN0PGludD4gc2F2ZUNvbXBpbGF0aW9uVHJhY2UoKSB7CiAgZmluYWwgZHluYW1pYyByZXN1bHQgPSBfc2F2ZUNvbXBpbGF0aW9uVHJhY2UoKTsKICBpZiAocmVzdWx0IGlzIEVycm9yKQogICAgdGhyb3cgcmVzdWx0OwogIHJldHVybiByZXN1bHQgYXMgTGlzdDxpbnQ+Owp9CgpkeW5hbWljIF9zYXZlQ29tcGlsYXRpb25UcmFjZSgpIG5hdGl2ZSAnU2F2ZUNvbXBpbGF0aW9uVHJhY2UnOwoKdm9pZCBfc2NoZWR1bGVNaWNyb3Rhc2sodm9pZCBjYWxsYmFjaygpKSBuYXRpdmUgJ1NjaGVkdWxlTWljcm90YXNrJzsKCmludCBfZ2V0Q2FsbGJhY2tIYW5kbGUoRnVuY3Rpb24gY2xvc3VyZSkgbmF0aXZlICdHZXRDYWxsYmFja0hhbmRsZSc7CkZ1bmN0aW9uIF9nZXRDYWxsYmFja0Zyb21IYW5kbGUoaW50IGhhbmRsZSkgbmF0aXZlICdHZXRDYWxsYmFja0Zyb21IYW5kbGUnOwoKLy8gUmVxdWlyZWQgZm9yIGdlbl9zbmFwc2hvdCB0byB3b3JrIGNvcnJlY3RseS4KaW50IF9pc29sYXRlSWQ7IC8vIGlnbm9yZTogdW51c2VkX2VsZW1lbnQKCkBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKRnVuY3Rpb24gX2dldFByaW50Q2xvc3VyZSgpID0+IF9wcmludDsgIC8vIGlnbm9yZTogdW51c2VkX2VsZW1lbnQKQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQpGdW5jdGlvbiBfZ2V0U2NoZWR1bGVNaWNyb3Rhc2tDbG9zdXJlKCkgPT4gX3NjaGVkdWxlTWljcm90YXNrOyAvLyBpZ25vcmU6IHVudXNlZF9lbGVtZW50ClwAPEoeAXABEQEjGygCASAtAgEQQkwCAVFEOC8BTAs7EyMOGRoVURcHAgEaMA49UBEIAgFNBFFRTywEPiYEHAQIKjckCARcIzIXEh4CAT8BRQFFTAEwKgEaQhpZARRkYXJ0OnVpL25hdGl2ZXMuZGFydC9vcmctZGFydGxhbmctc2RrOi8vL2ZsdXR0ZXIvbGliL3VpL3BsdWdpbnMuZGFydIssLy8gQ29weXJpZ2h0IDIwMTMgVGhlIEZsdXR0ZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LnVpOwoKLy8vIEEgd3JhcHBlciBmb3IgYSByYXcgY2FsbGJhY2sgaGFuZGxlLgovLy8KLy8vIFRoaXMgaXMgdGhlIHJldHVybiB0eXBlIGZvciBbUGx1Z2luVXRpbGl0aWVzLmdldENhbGxiYWNrSGFuZGxlXS4KY2xhc3MgQ2FsbGJhY2tIYW5kbGUgewogIC8vLyBDcmVhdGUgYW4gaW5zdGFuY2UgdXNpbmcgYSByYXcgY2FsbGJhY2sgaGFuZGxlLgogIC8vLwogIC8vLyBPbmx5IHZhbHVlcyBwcm9kdWNlZCBieSBhIGNhbGwgdG8gW0NhbGxiYWNrSGFuZGxlLnRvUmF3SGFuZGxlXSBzaG91bGQgYmUKICAvLy8gdXNlZCwgb3RoZXJ3aXNlIHRoaXMgb2JqZWN0IHdpbGwgYmUgYW4gaW52YWxpZCBoYW5kbGUuCiAgQ2FsbGJhY2tIYW5kbGUuZnJvbVJhd0hhbmRsZSh0aGlzLl9oYW5kbGUpCiAgICAgIDogYXNzZXJ0KF9oYW5kbGUgIT0gbnVsbCwgIidfaGFuZGxlJyBtdXN0IG5vdCBiZSBudWxsLiIpOwoKICBmaW5hbCBpbnQgX2hhbmRsZTsKCiAgLy8vIEdldCB0aGUgcmF3IGNhbGxiYWNrIGhhbmRsZSB0byBwYXNzIG92ZXIgYSBbTWV0aG9kQ2hhbm5lbF0gb3IgW1NlbmRQb3J0XQogIC8vLyAodG8gcGFzcyB0byBhbm90aGVyIFtJc29sYXRlXSkuCiAgaW50IHRvUmF3SGFuZGxlKCkgPT4gX2hhbmRsZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShkeW5hbWljIG90aGVyKSB7CiAgICBpZiAocnVudGltZVR5cGUgIT0gb3RoZXIucnVudGltZVR5cGUpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBvdGhlciBpcyBDYWxsYmFja0hhbmRsZQogICAgICAgICYmIG90aGVyLl9oYW5kbGUgPT0gX2hhbmRsZTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gX2hhbmRsZS5oYXNoQ29kZTsKfQoKLy8vIEZ1bmN0aW9uYWxpdHkgZm9yIEZsdXR0ZXIgcGx1Z2luIGF1dGhvcnMuCi8vLwovLy8gU2VlIGFsc286Ci8vLwovLy8gICogW0lzb2xhdGVOYW1lU2VydmVyXSwgd2hpY2ggcHJvdmlkZXMgdXRpbGl0aWVzIGZvciBkZWFsaW5nIHdpdGgKLy8vICAgIFtJc29sYXRlXXMuCmNsYXNzIFBsdWdpblV0aWxpdGllcyB7CiAgLy8gVGhpcyBjbGFzcyBpcyBvbmx5IGEgbmFtZXNwYWNlLCBhbmQgc2hvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQgb3IKICAvLyBleHRlbmRlZCBkaXJlY3RseS4KICBmYWN0b3J5IFBsdWdpblV0aWxpdGllcy5fKCkgPT4gbnVsbDsKCiAgc3RhdGljIE1hcDxGdW5jdGlvbiwgQ2FsbGJhY2tIYW5kbGU+IF9mb3J3YXJkQ2FjaGUgPQogICAgICA8RnVuY3Rpb24sIENhbGxiYWNrSGFuZGxlPnt9OwogIHN0YXRpYyBNYXA8Q2FsbGJhY2tIYW5kbGUsIEZ1bmN0aW9uPiBfYmFja3dhcmRDYWNoZSA9CiAgICAgIDxDYWxsYmFja0hhbmRsZSwgRnVuY3Rpb24+e307CgogIC8vLyBHZXQgYSBoYW5kbGUgdG8gYSBuYW1lZCB0b3AtbGV2ZWwgb3Igc3RhdGljIGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIGNhbgogIC8vLyBiZSBlYXNpbHkgcGFzc2VkIGJldHdlZW4gaXNvbGF0ZXMuCiAgLy8vCiAgLy8vIFRoZSBgY2FsbGJhY2tgIGFyZ3VtZW50IG11c3Qgbm90IGJlIG51bGwuCiAgLy8vCiAgLy8vIFJldHVybnMgYSBbQ2FsbGJhY2tIYW5kbGVdIHRoYXQgY2FuIGJlIHByb3ZpZGVkIHRvCiAgLy8vIFtQbHVnaW5VdGlsaXRpZXMuZ2V0Q2FsbGJhY2tGcm9tSGFuZGxlXSB0byByZXRyaWV2ZSBhIHRlYXItb2ZmIG9mIHRoZQogIC8vLyBvcmlnaW5hbCBjYWxsYmFjay4gSWYgYGNhbGxiYWNrYCBpcyBub3QgYSB0b3AtbGV2ZWwgb3Igc3RhdGljIGZ1bmN0aW9uLAogIC8vLyBudWxsIGlzIHJldHVybmVkLgogIHN0YXRpYyBDYWxsYmFja0hhbmRsZSBnZXRDYWxsYmFja0hhbmRsZShGdW5jdGlvbiBjYWxsYmFjaykgewogICAgYXNzZXJ0KGNhbGxiYWNrICE9IG51bGwsICInY2FsbGJhY2snIG11c3Qgbm90IGJlIG51bGwuIik7CiAgICByZXR1cm4gX2ZvcndhcmRDYWNoZS5wdXRJZkFic2VudChjYWxsYmFjaywgKCkgewogICAgICBmaW5hbCBpbnQgaGFuZGxlID0gX2dldENhbGxiYWNrSGFuZGxlKGNhbGxiYWNrKTsKICAgICAgcmV0dXJuIGhhbmRsZSAhPSBudWxsID8gQ2FsbGJhY2tIYW5kbGUuZnJvbVJhd0hhbmRsZShoYW5kbGUpIDogbnVsbDsKICAgIH0pOwogIH0KCiAgLy8vIEdldCBhIHRlYXItb2ZmIG9mIGEgbmFtZWQgdG9wLWxldmVsIG9yIHN0YXRpYyBjYWxsYmFjayByZXByZXNlbnRlZCBieSBhCiAgLy8vIGhhbmRsZS4KICAvLy8KICAvLy8gVGhlIGBoYW5kbGVgIGFyZ3VtZW50IG11c3Qgbm90IGJlIG51bGwuCiAgLy8vCiAgLy8vIElmIGBoYW5kbGVgIGlzIG5vdCBhIHZhbGlkIGhhbmRsZSByZXR1cm5lZCBieQogIC8vLyBbUGx1Z2luVXRpbGl0aWVzLmdldENhbGxiYWNrSGFuZGxlXSwgbnVsbCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlLCBhCiAgLy8vIHRlYXItb2ZmIG9mIHRoZSBjYWxsYmFjayBhc3NvY2lhdGVkIHdpdGggYGhhbmRsZWAgaXMgcmV0dXJuZWQuCiAgc3RhdGljIEZ1bmN0aW9uIGdldENhbGxiYWNrRnJvbUhhbmRsZShDYWxsYmFja0hhbmRsZSBoYW5kbGUpIHsKICAgIGFzc2VydChoYW5kbGUgIT0gbnVsbCwgIidoYW5kbGUnIG11c3Qgbm90IGJlIG51bGwuIik7CiAgICByZXR1cm4gX2JhY2t3YXJkQ2FjaGUucHV0SWZBYnNlbnQoCiAgICAgICAgaGFuZGxlLCAoKSA9PiBfZ2V0Q2FsbGJhY2tGcm9tSGFuZGxlKGhhbmRsZS50b1Jhd0hhbmRsZSgpKSk7CiAgfQp9ClQAPEoeAREBKQRFFzYGTz0tQAEVAU8mIAEMJCoUIyUEAQwoAgEuBA4ERhMYRxgnATckOCQBTikGMAY5TE4YPz40N0sIBAFODgYuBjRKRUE6J0UEAgEUZGFydDp1aS9wbHVnaW5zLmRhcnQvb3JnLWRhcnRsYW5nLXNkazovLy9mbHV0dGVyL2xpYi91aS9wb2ludGVyLmRhcnSqDy8vIENvcHlyaWdodCAyMDEzIFRoZSBGbHV0dGVyIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC51aTsKCi8vLyBIb3cgdGhlIHBvaW50ZXIgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgcmVwb3J0LgplbnVtIFBvaW50ZXJDaGFuZ2UgewogIC8vLyBUaGUgaW5wdXQgZnJvbSB0aGUgcG9pbnRlciBpcyBubyBsb25nZXIgZGlyZWN0ZWQgdG93YXJkcyB0aGlzIHJlY2VpdmVyLgogIGNhbmNlbCwKCiAgLy8vIFRoZSBkZXZpY2UgaGFzIHN0YXJ0ZWQgdHJhY2tpbmcgdGhlIHBvaW50ZXIuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCB0aGUgcG9pbnRlciBtaWdodCBiZSBob3ZlcmluZyBhYm92ZSB0aGUgZGV2aWNlLCBoYXZpbmcgbm90IHlldAogIC8vLyBtYWRlIGNvbnRhY3Qgd2l0aCB0aGUgc3VyZmFjZSBvZiB0aGUgZGV2aWNlLgogIGFkZCwKCiAgLy8vIFRoZSBkZXZpY2UgaXMgbm8gbG9uZ2VyIHRyYWNraW5nIHRoZSBwb2ludGVyLgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSwgdGhlIHBvaW50ZXIgbWlnaHQgaGF2ZSBkcmlmdGVkIG91dCBvZiB0aGUgZGV2aWNlJ3MgaG92ZXIKICAvLy8gZGV0ZWN0aW9uIHJhbmdlIG9yIG1pZ2h0IGhhdmUgYmVlbiBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgc3lzdGVtIGVudGlyZWx5LgogIHJlbW92ZSwKCiAgLy8vIFRoZSBwb2ludGVyIGhhcyBtb3ZlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIGRldmljZSB3aGlsZSBub3QgaW4gY29udGFjdCB3aXRoCiAgLy8vIHRoZSBkZXZpY2UuCiAgaG92ZXIsCgogIC8vLyBUaGUgcG9pbnRlciBoYXMgbWFkZSBjb250YWN0IHdpdGggdGhlIGRldmljZS4KICBkb3duLAoKICAvLy8gVGhlIHBvaW50ZXIgaGFzIG1vdmVkIHdpdGggcmVzcGVjdCB0byB0aGUgZGV2aWNlIHdoaWxlIGluIGNvbnRhY3Qgd2l0aCB0aGUKICAvLy8gZGV2aWNlLgogIG1vdmUsCgogIC8vLyBUaGUgcG9pbnRlciBoYXMgc3RvcHBlZCBtYWtpbmcgY29udGFjdCB3aXRoIHRoZSBkZXZpY2UuCiAgdXAsCn0KCi8vLyBUaGUga2luZCBvZiBwb2ludGVyIGRldmljZS4KZW51bSBQb2ludGVyRGV2aWNlS2luZCB7CiAgLy8vIEEgdG91Y2gtYmFzZWQgcG9pbnRlciBkZXZpY2UuCiAgdG91Y2gsCgogIC8vLyBBIG1vdXNlLWJhc2VkIHBvaW50ZXIgZGV2aWNlLgogIG1vdXNlLAoKICAvLy8gQSBwb2ludGVyIGRldmljZSB3aXRoIGEgc3R5bHVzLgogIHN0eWx1cywKCiAgLy8vIEEgcG9pbnRlciBkZXZpY2Ugd2l0aCBhIHN0eWx1cyB0aGF0IGhhcyBiZWVuIGludmVydGVkLgogIGludmVydGVkU3R5bHVzLAoKICAvLy8gQW4gdW5rbm93biBwb2ludGVyIGRldmljZS4KICB1bmtub3duCn0KCi8vLyBUaGUga2luZCBvZiBbUG9pbnRlckRldmljZUtpbmQuc2lnbmFsXS4KZW51bSBQb2ludGVyU2lnbmFsS2luZCB7CiAgLy8vIFRoZSBldmVudCBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGEgcG9pbnRlciBzaWduYWwuCiAgbm9uZSwKCiAgLy8vIEEgcG9pbnRlci1nZW5lcmF0ZWQgc2Nyb2xsIChlLmcuLCBtb3VzZSB3aGVlbCBvciB0cmFja3BhZCBzY3JvbGwpLgogIHNjcm9sbCwKCiAgLy8vIEFuIHVua25vd24gcG9pbnRlciBzaWduYWwga2luZC4KICB1bmtub3duCn0KCi8vLyBJbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdGUgb2YgYSBwb2ludGVyLgpjbGFzcyBQb2ludGVyRGF0YSB7CiAgLy8vIENyZWF0ZXMgYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgc3RhdGUgb2YgYSBwb2ludGVyLgogIGNvbnN0IFBvaW50ZXJEYXRhKHsKICAgIHRoaXMudGltZVN0YW1wID0gRHVyYXRpb24uemVybywKICAgIHRoaXMuY2hhbmdlID0gUG9pbnRlckNoYW5nZS5jYW5jZWwsCiAgICB0aGlzLmtpbmQgPSBQb2ludGVyRGV2aWNlS2luZC50b3VjaCwKICAgIHRoaXMuc2lnbmFsS2luZCwKICAgIHRoaXMuZGV2aWNlID0gMCwKICAgIHRoaXMucG9pbnRlcklkZW50aWZpZXIgPSAwLAogICAgdGhpcy5waHlzaWNhbFggPSAwLjAsCiAgICB0aGlzLnBoeXNpY2FsWSA9IDAuMCwKICAgIHRoaXMucGh5c2ljYWxEZWx0YVggPSAwLjAsCiAgICB0aGlzLnBoeXNpY2FsRGVsdGFZID0gMC4wLAogICAgdGhpcy5idXR0b25zID0gMCwKICAgIHRoaXMub2JzY3VyZWQgPSBmYWxzZSwKICAgIHRoaXMuc3ludGhlc2l6ZWQgPSBmYWxzZSwKICAgIHRoaXMucHJlc3N1cmUgPSAwLjAsCiAgICB0aGlzLnByZXNzdXJlTWluID0gMC4wLAogICAgdGhpcy5wcmVzc3VyZU1heCA9IDAuMCwKICAgIHRoaXMuZGlzdGFuY2UgPSAwLjAsCiAgICB0aGlzLmRpc3RhbmNlTWF4ID0gMC4wLAogICAgdGhpcy5zaXplID0gMC4wLAogICAgdGhpcy5yYWRpdXNNYWpvciA9IDAuMCwKICAgIHRoaXMucmFkaXVzTWlub3IgPSAwLjAsCiAgICB0aGlzLnJhZGl1c01pbiA9IDAuMCwKICAgIHRoaXMucmFkaXVzTWF4ID0gMC4wLAogICAgdGhpcy5vcmllbnRhdGlvbiA9IDAuMCwKICAgIHRoaXMudGlsdCA9IDAuMCwKICAgIHRoaXMucGxhdGZvcm1EYXRhID0gMCwKICAgIHRoaXMuc2Nyb2xsRGVsdGFYID0gMC4wLAogICAgdGhpcy5zY3JvbGxEZWx0YVkgPSAwLjAsCiAgfSk7CgogIC8vLyBUaW1lIG9mIGV2ZW50IGRpc3BhdGNoLCByZWxhdGl2ZSB0byBhbiBhcmJpdHJhcnkgdGltZWxpbmUuCiAgZmluYWwgRHVyYXRpb24gdGltZVN0YW1wOwoKICAvLy8gSG93IHRoZSBwb2ludGVyIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHJlcG9ydC4KICBmaW5hbCBQb2ludGVyQ2hhbmdlIGNoYW5nZTsKCiAgLy8vIFRoZSBraW5kIG9mIGlucHV0IGRldmljZSBmb3Igd2hpY2ggdGhlIGV2ZW50IHdhcyBnZW5lcmF0ZWQuCiAgZmluYWwgUG9pbnRlckRldmljZUtpbmQga2luZDsKCiAgLy8vIFRoZSBraW5kIG9mIHNpZ25hbCBmb3IgYSBwb2ludGVyIHNpZ25hbCBldmVudC4KICBmaW5hbCBQb2ludGVyU2lnbmFsS2luZCBzaWduYWxLaW5kOwoKICAvLy8gVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBwb2ludGluZyBkZXZpY2UsIHJldXNlZCBhY3Jvc3MgaW50ZXJhY3Rpb25zLgogIGZpbmFsIGludCBkZXZpY2U7CgogIC8vLyBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHBvaW50ZXIuCiAgLy8vCiAgLy8vIFRoaXMgZmllbGQgY2hhbmdlcyBmb3IgZWFjaCBuZXcgcG9pbnRlciBkb3duIGV2ZW50LiBGcmFtZXdvcmsgdXNlcyB0aGlzCiAgLy8vIGlkZW50aWZpZXIgdG8gZGV0ZXJtaW5lIGhpdCB0ZXN0IHJlc3VsdC4KICBmaW5hbCBpbnQgcG9pbnRlcklkZW50aWZpZXI7CgogIC8vLyBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvc2l0aW9uIG9mIHRoZSBwb2ludGVyLCBpbiBwaHlzaWNhbCBwaXhlbHMgaW4gdGhlCiAgLy8vIGdsb2JhbCBjb29yZGluYXRlIHNwYWNlLgogIGZpbmFsIGRvdWJsZSBwaHlzaWNhbFg7CgogIC8vLyBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvc2l0aW9uIG9mIHRoZSBwb2ludGVyLCBpbiBwaHlzaWNhbCBwaXhlbHMgaW4gdGhlCiAgLy8vIGdsb2JhbCBjb29yZGluYXRlIHNwYWNlLgogIGZpbmFsIGRvdWJsZSBwaHlzaWNhbFk7CgogIC8vLyBUaGUgZGlzdGFuY2Ugb2YgcG9pbnRlciBtb3ZlbWVudCBvbiBYIGNvb3JkaW5hdGUgaW4gcGh5c2ljYWwgcGl4ZWxzLgogIGZpbmFsIGRvdWJsZSBwaHlzaWNhbERlbHRhWDsKCiAgLy8vIFRoZSBkaXN0YW5jZSBvZiBwb2ludGVyIG1vdmVtZW50IG9uIFkgY29vcmRpbmF0ZSBpbiBwaHlzaWNhbCBwaXhlbHMuCiAgZmluYWwgZG91YmxlIHBoeXNpY2FsRGVsdGFZOwoKICAvLy8gQml0IGZpZWxkIHVzaW5nIHRoZSAqQnV0dG9uIGNvbnN0YW50cyAocHJpbWFyeU1vdXNlQnV0dG9uLAogIC8vLyBzZWNvbmRhcnlTdHlsdXNCdXR0b24sIGV0YykuIEZvciBleGFtcGxlLCBpZiB0aGlzIGhhcyB0aGUgdmFsdWUgNiBhbmQgdGhlCiAgLy8vIFtraW5kXSBpcyBbUG9pbnRlckRldmljZUtpbmQuaW52ZXJ0ZWRTdHlsdXNdLCB0aGVuIHRoaXMgaW5kaWNhdGVzIGFuCiAgLy8vIHVwc2lkZS1kb3duIHN0eWx1cyB3aXRoIGJvdGggaXRzIHByaW1hcnkgYW5kIHNlY29uZGFyeSBidXR0b25zIHByZXNzZWQuCiAgZmluYWwgaW50IGJ1dHRvbnM7CgogIC8vLyBTZXQgaWYgYW4gYXBwbGljYXRpb24gZnJvbSBhIGRpZmZlcmVudCBzZWN1cml0eSBkb21haW4gaXMgaW4gYW55IHdheQogIC8vLyBvYnNjdXJpbmcgdGhpcyBhcHBsaWNhdGlvbidzIHdpbmRvdy4gKEFzcGlyYXRpb25hbDsgbm90IGN1cnJlbnRseQogIC8vLyBpbXBsZW1lbnRlZC4pCiAgZmluYWwgYm9vbCBvYnNjdXJlZDsKCiAgLy8vIFNldCBpZiB0aGlzIHBvaW50ZXIgZGF0YSB3YXMgc3ludGhlc2l6ZWQgYnkgcG9pbnRlciBkYXRhIHBhY2tldCBjb252ZXJ0ZXIuCiAgLy8vIHBvaW50ZXIgZGF0YSBwYWNrZXQgY29udmVydGVyIHdpbGwgc3ludGhlc2l6ZSBhZGRpdGlvbmFsIHBvaW50ZXIgZGF0YXMgaWYKICAvLy8gdGhlIGlucHV0IHNlcXVlbmNlIG9mIHBvaW50ZXIgZGF0YSBpcyBpbGxlZ2FsLgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSwgYSBkb3duIHBvaW50ZXIgZGF0YSB3aWxsIGJlIHN5bnRoZXNpemVkIGlmIHRoZSBjb252ZXJ0ZXIgcmVjZWl2ZXMKICAvLy8gYSBtb3ZlIHBvaW50ZXIgZGF0YSB3aGlsZSB0aGUgcG9pbnRlciBpcyBub3QgcHJldmlvdXNseSBkb3duLgogIGZpbmFsIGJvb2wgc3ludGhlc2l6ZWQ7CgogIC8vLyBUaGUgcHJlc3N1cmUgb2YgdGhlIHRvdWNoIGFzIGEgbnVtYmVyIHJhbmdpbmcgZnJvbSAwLjAsIGluZGljYXRpbmcgYSB0b3VjaAogIC8vLyB3aXRoIG5vIGRpc2Nlcm5pYmxlIHByZXNzdXJlLCB0byAxLjAsIGluZGljYXRpbmcgYSB0b3VjaCB3aXRoICJub3JtYWwiCiAgLy8vIHByZXNzdXJlLCBhbmQgcG9zc2libHkgYmV5b25kLCBpbmRpY2F0aW5nIGEgc3Ryb25nZXIgdG91Y2guIEZvciBkZXZpY2VzCiAgLy8vIHRoYXQgZG8gbm90IGRldGVjdCBwcmVzc3VyZSAoZS5nLiBtaWNlKSwgcmV0dXJucyAxLjAuCiAgZmluYWwgZG91YmxlIHByZXNzdXJlOwoKICAvLy8gVGhlIG1pbmltdW0gdmFsdWUgdGhhdCBbcHJlc3N1cmVdIGNhbiByZXR1cm4gZm9yIHRoaXMgcG9pbnRlci4gRm9yIGRldmljZXMKICAvLy8gdGhhdCBkbyBub3QgZGV0ZWN0IHByZXNzdXJlIChlLmcuIG1pY2UpLCByZXR1cm5zIDEuMC4gVGhpcyB3aWxsIGFsd2F5cyBiZQogIC8vLyBhIG51bWJlciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMS4wLgogIGZpbmFsIGRvdWJsZSBwcmVzc3VyZU1pbjsKCiAgLy8vIFRoZSBtYXhpbXVtIHZhbHVlIHRoYXQgW3ByZXNzdXJlXSBjYW4gcmV0dXJuIGZvciB0aGlzIHBvaW50ZXIuIEZvciBkZXZpY2VzCiAgLy8vIHRoYXQgZG8gbm90IGRldGVjdCBwcmVzc3VyZSAoZS5nLiBtaWNlKSwgcmV0dXJucyAxLjAuIFRoaXMgd2lsbCBhbHdheXMgYmUKICAvLy8gYSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMS4wLgogIGZpbmFsIGRvdWJsZSBwcmVzc3VyZU1heDsKCiAgLy8vIFRoZSBkaXN0YW5jZSBvZiB0aGUgZGV0ZWN0ZWQgb2JqZWN0IGZyb20gdGhlIGlucHV0IHN1cmZhY2UgKGUuZy4gdGhlCiAgLy8vIGRpc3RhbmNlIG9mIGEgc3R5bHVzIG9yIGZpbmdlciBmcm9tIGEgdG91Y2ggc2NyZWVuKSwgaW4gYXJiaXRyYXJ5IHVuaXRzIG9uCiAgLy8vIGFuIGFyYml0cmFyeSAobm90IG5lY2Vzc2FyaWx5IGxpbmVhcikgc2NhbGUuIElmIHRoZSBwb2ludGVyIGlzIGRvd24sIHRoaXMKICAvLy8gaXMgMC4wIGJ5IGRlZmluaXRpb24uCiAgZmluYWwgZG91YmxlIGRpc3RhbmNlOwoKICAvLy8gVGhlIG1heGltdW0gdmFsdWUgdGhhdCBhIGRpc3RhbmNlIGNhbiByZXR1cm4gZm9yIHRoaXMgcG9pbnRlci4gSWYgdGhpcwogIC8vLyBpbnB1dCBkZXZpY2UgY2Fubm90IGRldGVjdCAiaG92ZXIgdG91Y2giIGlucHV0IGV2ZW50cywgdGhlbiB0aGlzIHdpbGwgYmUKICAvLy8gMC4wLgogIGZpbmFsIGRvdWJsZSBkaXN0YW5jZU1heDsKCiAgLy8vIFRoZSBhcmVhIG9mIHRoZSBzY3JlZW4gYmVpbmcgcHJlc3NlZCwgc2NhbGVkIHRvIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLgogIC8vLyBUaGUgdmFsdWUgb2Ygc2l6ZSBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgZmF0IHRvdWNoIGV2ZW50cy4gVGhpcyB2YWx1ZQogIC8vLyBpcyBvbmx5IHNldCBvbiBBbmRyb2lkLCBhbmQgaXMgYSBkZXZpY2Ugc3BlY2lmaWMgYXBwcm94aW1hdGlvbiB3aXRoaW4KICAvLy8gdGhlIHJhbmdlIG9mIGRldGVjdGFibGUgdmFsdWVzLiBTbywgZm9yIGV4YW1wbGUsIHRoZSB2YWx1ZSBvZiAwLjEgY291bGQKICAvLy8gbWVhbiBhIHRvdWNoIHdpdGggdGhlIHRpcCBvZiB0aGUgZmluZ2VyLCAwLjIgYSB0b3VjaCB3aXRoIGZ1bGwgZmluZ2VyLAogIC8vLyBhbmQgMC4zIHRoZSBmdWxsIHBhbG0uCiAgZmluYWwgZG91YmxlIHNpemU7CgogIC8vLyBUaGUgcmFkaXVzIG9mIHRoZSBjb250YWN0IGVsbGlwc2UgYWxvbmcgdGhlIG1ham9yIGF4aXMsIGluIGxvZ2ljYWwgcGl4ZWxzLgogIGZpbmFsIGRvdWJsZSByYWRpdXNNYWpvcjsKCiAgLy8vIFRoZSByYWRpdXMgb2YgdGhlIGNvbnRhY3QgZWxsaXBzZSBhbG9uZyB0aGUgbWlub3IgYXhpcywgaW4gbG9naWNhbCBwaXhlbHMuCiAgZmluYWwgZG91YmxlIHJhZGl1c01pbm9yOwoKICAvLy8gVGhlIG1pbmltdW0gdmFsdWUgdGhhdCBjb3VsZCBiZSByZXBvcnRlZCBmb3IgcmFkaXVzTWFqb3IgYW5kIHJhZGl1c01pbm9yCiAgLy8vIGZvciB0aGlzIHBvaW50ZXIsIGluIGxvZ2ljYWwgcGl4ZWxzLgogIGZpbmFsIGRvdWJsZSByYWRpdXNNaW47CgogIC8vLyBUaGUgbWluaW11bSB2YWx1ZSB0aGF0IGNvdWxkIGJlIHJlcG9ydGVkIGZvciByYWRpdXNNYWpvciBhbmQgcmFkaXVzTWlub3IKICAvLy8gZm9yIHRoaXMgcG9pbnRlciwgaW4gbG9naWNhbCBwaXhlbHMuCiAgZmluYWwgZG91YmxlIHJhZGl1c01heDsKCiAgLy8vIEZvciBQb2ludGVyRGV2aWNlS2luZC50b3VjaCBldmVudHM6CiAgLy8vCiAgLy8vIFRoZSBhbmdsZSBvZiB0aGUgY29udGFjdCBlbGxpcHNlLCBpbiByYWRpdXMgaW4gdGhlIHJhbmdlOgogIC8vLwogIC8vLyAgICAtcGkvMiA8IG9yaWVudGF0aW9uIDw9IHBpLzIKICAvLy8KICAvLy8gLi4uZ2l2aW5nIHRoZSBhbmdsZSBvZiB0aGUgbWFqb3IgYXhpcyBvZiB0aGUgZWxsaXBzZSB3aXRoIHRoZSB5LWF4aXMKICAvLy8gKG5lZ2F0aXZlIGFuZ2xlcyBpbmRpY2F0aW5nIGFuIG9yaWVudGF0aW9uIGFsb25nIHRoZSB0b3AtbGVmdCAvCiAgLy8vIGJvdHRvbS1yaWdodCBkaWFnb25hbCwgcG9zaXRpdmUgYW5nbGVzIGluZGljYXRpbmcgYW4gb3JpZW50YXRpb24gYWxvbmcgdGhlCiAgLy8vIHRvcC1yaWdodCAvIGJvdHRvbS1sZWZ0IGRpYWdvbmFsLCBhbmQgemVybyBpbmRpY2F0aW5nIGFuIG9yaWVudGF0aW9uCiAgLy8vIHBhcmFsbGVsIHdpdGggdGhlIHktYXhpcykuCiAgLy8vCiAgLy8vIEZvciBQb2ludGVyRGV2aWNlS2luZC5zdHlsdXMgYW5kIFBvaW50ZXJEZXZpY2VLaW5kLmludmVydGVkU3R5bHVzIGV2ZW50czoKICAvLy8KICAvLy8gVGhlIGFuZ2xlIG9mIHRoZSBzdHlsdXMsIGluIHJhZGlhbnMgaW4gdGhlIHJhbmdlOgogIC8vLwogIC8vLyAgICAtcGkgPCBvcmllbnRhdGlvbiA8PSBwaQogIC8vLwogIC8vLyAuLi5naXZpbmcgdGhlIGFuZ2xlIG9mIHRoZSBheGlzIG9mIHRoZSBzdHlsdXMgcHJvamVjdGVkIG9udG8gdGhlIGlucHV0CiAgLy8vIHN1cmZhY2UsIHJlbGF0aXZlIHRvIHRoZSBwb3NpdGl2ZSB5LWF4aXMgb2YgdGhhdCBzdXJmYWNlICh0aHVzIDAuMAogIC8vLyBpbmRpY2F0ZXMgdGhlIHN0eWx1cywgaWYgcHJvamVjdGVkIG9udG8gdGhhdCBzdXJmYWNlLCB3b3VsZCBnbyBmcm9tIHRoZQogIC8vLyBjb250YWN0IHBvaW50IHZlcnRpY2FsbHkgdXAgaW4gdGhlIHBvc2l0aXZlIHktYXhpcyBkaXJlY3Rpb24sIHBpIHdvdWxkCiAgLy8vIGluZGljYXRlIHRoYXQgdGhlIHN0eWx1cyB3b3VsZCBnbyBkb3duIGluIHRoZSBuZWdhdGl2ZSB5LWF4aXMgZGlyZWN0aW9uOwogIC8vLyBwaS80IHdvdWxkIGluZGljYXRlIHRoYXQgdGhlIHN0eWx1cyBnb2VzIHVwIGFuZCB0byB0aGUgcmlnaHQsIC1waS8yIHdvdWxkCiAgLy8vIGluZGljYXRlIHRoYXQgdGhlIHN0eWx1cyBnb2VzIHRvIHRoZSBsZWZ0LCBldGMpLgogIGZpbmFsIGRvdWJsZSBvcmllbnRhdGlvbjsKCiAgLy8vIEZvciBQb2ludGVyRGV2aWNlS2luZC5zdHlsdXMgYW5kIFBvaW50ZXJEZXZpY2VLaW5kLmludmVydGVkU3R5bHVzIGV2ZW50czoKICAvLy8KICAvLy8gVGhlIGFuZ2xlIG9mIHRoZSBzdHlsdXMsIGluIHJhZGlhbnMgaW4gdGhlIHJhbmdlOgogIC8vLwogIC8vLyAgICAwIDw9IHRpbHQgPD0gcGkvMgogIC8vLwogIC8vLyAuLi5naXZpbmcgdGhlIGFuZ2xlIG9mIHRoZSBheGlzIG9mIHRoZSBzdHlsdXMsIHJlbGF0aXZlIHRvIHRoZSBheGlzCiAgLy8vIHBlcnBlbmRpY3VsYXIgdG8gdGhlIGlucHV0IHN1cmZhY2UgKHRodXMgMC4wIGluZGljYXRlcyB0aGUgc3R5bHVzIGlzCiAgLy8vIG9ydGhvZ29uYWwgdG8gdGhlIHBsYW5lIG9mIHRoZSBpbnB1dCBzdXJmYWNlLCB3aGlsZSBwaS8yIGluZGljYXRlcyB0aGF0CiAgLy8vIHRoZSBzdHlsdXMgaXMgZmxhdCBvbiB0aGF0IHN1cmZhY2UpLgogIGZpbmFsIGRvdWJsZSB0aWx0OwoKICAvLy8gT3BhcXVlIHBsYXRmb3JtLXNwZWNpZmljIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBldmVudC4KICBmaW5hbCBpbnQgcGxhdGZvcm1EYXRhOwoKICAvLy8gRm9yIGV2ZW50cyB3aXRoIHNpZ25hbEtpbmQgb2YgUG9pbnRlclNpZ25hbEtpbmQuc2Nyb2xsOgogIC8vLwogIC8vLyBUaGUgYW1vdW50IHRvIHNjcm9sbCBpbiB0aGUgeCBkaXJlY3Rpb24sIGluIHBoeXNpY2FsIHBpeGVscy4KICBmaW5hbCBkb3VibGUgc2Nyb2xsRGVsdGFYOwoKICAvLy8gRm9yIGV2ZW50cyB3aXRoIHNpZ25hbEtpbmQgb2YgUG9pbnRlclNpZ25hbEtpbmQuc2Nyb2xsOgogIC8vLwogIC8vLyBUaGUgYW1vdW50IHRvIHNjcm9sbCBpbiB0aGUgeSBkaXJlY3Rpb24sIGluIHBoeXNpY2FsIHBpeGVscy4KICBmaW5hbCBkb3VibGUgc2Nyb2xsRGVsdGFZOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnUG9pbnRlckRhdGEoeDogJHBoeXNpY2FsWCwgeTogJHBoeXNpY2FsWSknOwoKICAvLy8gUmV0dXJucyBhIGNvbXBsZXRlIHRleHR1YWwgZGVzY3JpcHRpb24gb2YgdGhlIGluZm9ybWF0aW9uIGluIHRoaXMgb2JqZWN0LgogIFN0cmluZyB0b1N0cmluZ0Z1bGwoKSB7CiAgICByZXR1cm4gJyRydW50aW1lVHlwZSgnCiAgICAgICAgICAgICAndGltZVN0YW1wOiAkdGltZVN0YW1wLCAnCiAgICAgICAgICAgICAnY2hhbmdlOiAkY2hhbmdlLCAnCiAgICAgICAgICAgICAna2luZDogJGtpbmQsICcKICAgICAgICAgICAgICdzaWduYWxLaW5kOiAkc2lnbmFsS2luZCwgJwogICAgICAgICAgICAgJ2RldmljZTogJGRldmljZSwgJwogICAgICAgICAgICAgJ3BvaW50ZXJJZGVudGlmaWVyOiAkcG9pbnRlcklkZW50aWZpZXIsICcKICAgICAgICAgICAgICdwaHlzaWNhbFg6ICRwaHlzaWNhbFgsICcKICAgICAgICAgICAgICdwaHlzaWNhbFk6ICRwaHlzaWNhbFksICcKICAgICAgICAgICAgICdwaHlzaWNhbERlbHRhWDogJHBoeXNpY2FsRGVsdGFYLCAnCiAgICAgICAgICAgICAncGh5c2ljYWxEZWx0YVk6ICRwaHlzaWNhbERlbHRhWSwgJwogICAgICAgICAgICAgJ2J1dHRvbnM6ICRidXR0b25zLCAnCiAgICAgICAgICAgICAnc3ludGhlc2l6ZWQ6ICRzeW50aGVzaXplZCwgJwogICAgICAgICAgICAgJ3ByZXNzdXJlOiAkcHJlc3N1cmUsICcKICAgICAgICAgICAgICdwcmVzc3VyZU1pbjogJHByZXNzdXJlTWluLCAnCiAgICAgICAgICAgICAncHJlc3N1cmVNYXg6ICRwcmVzc3VyZU1heCwgJwogICAgICAgICAgICAgJ2Rpc3RhbmNlOiAkZGlzdGFuY2UsICcKICAgICAgICAgICAgICdkaXN0YW5jZU1heDogJGRpc3RhbmNlTWF4LCAnCiAgICAgICAgICAgICAnc2l6ZTogJHNpemUsICcKICAgICAgICAgICAgICdyYWRpdXNNYWpvcjogJHJhZGl1c01ham9yLCAnCiAgICAgICAgICAgICAncmFkaXVzTWlub3I6ICRyYWRpdXNNaW5vciwgJwogICAgICAgICAgICAgJ3JhZGl1c01pbjogJHJhZGl1c01pbiwgJwogICAgICAgICAgICAgJ3JhZGl1c01heDogJHJhZGl1c01heCwgJwogICAgICAgICAgICAgJ29yaWVudGF0aW9uOiAkb3JpZW50YXRpb24sICcKICAgICAgICAgICAgICd0aWx0OiAkdGlsdCwgJwogICAgICAgICAgICAgJ3BsYXRmb3JtRGF0YTogJHBsYXRmb3JtRGF0YSwgJwogICAgICAgICAgICAgJ3Njcm9sbERlbHRhWDogJHNjcm9sbERlbHRhWCwgJwogICAgICAgICAgICAgJ3Njcm9sbERlbHRhWTogJHNjcm9sbERlbHRhWScKICAgICAgICAgICAnKSc7CiAgfQp9CgovLy8gQSBzZXF1ZW5jZSBvZiByZXBvcnRzIGFib3V0IHRoZSBzdGF0ZSBvZiBwb2ludGVycy4KY2xhc3MgUG9pbnRlckRhdGFQYWNrZXQgewogIC8vLyBDcmVhdGVzIGEgcGFja2V0IG9mIHBvaW50ZXIgZGF0YSByZXBvcnRzLgogIGNvbnN0IFBvaW50ZXJEYXRhUGFja2V0KHsgdGhpcy5kYXRhID0gY29uc3QgPFBvaW50ZXJEYXRhPltdIH0pOwoKICAvLy8gRGF0YSBhYm91dCB0aGUgaW5kaXZpZHVhbCBwb2ludGVycyBpbiB0aGlzIHBhY2tldC4KICAvLy8KICAvLy8gVGhpcyBsaXN0IG1pZ2h0IGNvbnRhaW4gbXVsdGlwbGUgcGllY2VzIG9mIGRhdGEgYWJvdXQgdGhlIHNhbWUgcG9pbnRlci4KICBmaW5hbCBMaXN0PFBvaW50ZXJEYXRhPiBkYXRhOwp9CoEyADxKHgERATcVTgoBMwZSMwcBNAZMUAoBURIJATQIAVEOCAE+BgIBIBkkCQEkCQEmCgE9EgEhCgIBLBk5CAFJCgEmCgIBLhRAFiQoKRUVIBoaHx8WGx4ZHBwZHBUcHBoaHBUbHR0GAUEcATkeAUIgATUmAU0UASkGTi8fAU0fGgFNHxoBSx8BSx8BQVBLThUBS0gUFwFRUDUGVUQaAVFNTjwZAVFQKhwBUVAmHAFLUVAcGQFNTwscAU9OTE5NHRUBURwBURwBTysaAU8rGgEqBkAGJQZLRlFLIQZQBjgGIQZNSU5NT1A3HAFQBjgGGwZKS04rFQE/GgE+BkMdAT4GQx0BDEQBUBobJyEdKSE3JycxMSMrJSsrJSsdKysnJysdLS0rEAQCATcaMEIBOQZOIAIBFGRhcnQ6dWkvcG9pbnRlci5kYXJ0MW9yZy1kYXJ0bGFuZy1zZGs6Ly8vZmx1dHRlci9saWIvdWkvc2VtYW50aWNzLmRhcnTAAIeXLy8gQ29weXJpZ2h0IDIwMTMgVGhlIEZsdXR0ZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LnVpOwoKLy8vIFRoZSBwb3NzaWJsZSBhY3Rpb25zIHRoYXQgY2FuIGJlIGNvbnZleWVkIGZyb20gdGhlIG9wZXJhdGluZyBzeXN0ZW0KLy8vIGFjY2Vzc2liaWxpdHkgQVBJcyB0byBhIHNlbWFudGljcyBub2RlLgovLwovLyBXaGVuIGNoYW5nZXMgYXJlIG1hZGUgdG8gdGhpcyBjbGFzcywgdGhlIGVxdWl2YWxlbnQgQVBJcyBpbgovLyBgbGliL3VpL3NlbWFudGljcy9zZW1hbnRpY3Nfbm9kZS5oYCBhbmQgaW4gZWFjaCBvZiB0aGUgZW1iZWRkZXJzICptdXN0KiBiZQovLyB1cGRhdGVkLgpjbGFzcyBTZW1hbnRpY3NBY3Rpb24gewogIGNvbnN0IFNlbWFudGljc0FjdGlvbi5fKHRoaXMuaW5kZXgpOwoKICBzdGF0aWMgY29uc3QgaW50IF9rVGFwSW5kZXggPSAxIDw8IDA7CiAgc3RhdGljIGNvbnN0IGludCBfa0xvbmdQcmVzc0luZGV4ID0gMSA8PCAxOwogIHN0YXRpYyBjb25zdCBpbnQgX2tTY3JvbGxMZWZ0SW5kZXggPSAxIDw8IDI7CiAgc3RhdGljIGNvbnN0IGludCBfa1Njcm9sbFJpZ2h0SW5kZXggPSAxIDw8IDM7CiAgc3RhdGljIGNvbnN0IGludCBfa1Njcm9sbFVwSW5kZXggPSAxIDw8IDQ7CiAgc3RhdGljIGNvbnN0IGludCBfa1Njcm9sbERvd25JbmRleCA9IDEgPDwgNTsKICBzdGF0aWMgY29uc3QgaW50IF9rSW5jcmVhc2VJbmRleCA9IDEgPDwgNjsKICBzdGF0aWMgY29uc3QgaW50IF9rRGVjcmVhc2VJbmRleCA9IDEgPDwgNzsKICBzdGF0aWMgY29uc3QgaW50IF9rU2hvd09uU2NyZWVuSW5kZXggPSAxIDw8IDg7CiAgc3RhdGljIGNvbnN0IGludCBfa01vdmVDdXJzb3JGb3J3YXJkQnlDaGFyYWN0ZXJJbmRleCA9IDEgPDwgOTsKICBzdGF0aWMgY29uc3QgaW50IF9rTW92ZUN1cnNvckJhY2t3YXJkQnlDaGFyYWN0ZXJJbmRleCA9IDEgPDwgMTA7CiAgc3RhdGljIGNvbnN0IGludCBfa1NldFNlbGVjdGlvbkluZGV4ID0gMSA8PCAxMTsKICBzdGF0aWMgY29uc3QgaW50IF9rQ29weUluZGV4ID0gMSA8PCAxMjsKICBzdGF0aWMgY29uc3QgaW50IF9rQ3V0SW5kZXggPSAxIDw8IDEzOwogIHN0YXRpYyBjb25zdCBpbnQgX2tQYXN0ZUluZGV4ID0gMSA8PCAxNDsKICBzdGF0aWMgY29uc3QgaW50IF9rRGlkR2FpbkFjY2Vzc2liaWxpdHlGb2N1c0luZGV4ID0gMSA8PCAxNTsKICBzdGF0aWMgY29uc3QgaW50IF9rRGlkTG9zZUFjY2Vzc2liaWxpdHlGb2N1c0luZGV4ID0gMSA8PCAxNjsKICBzdGF0aWMgY29uc3QgaW50IF9rQ3VzdG9tQWN0aW9uID0gMSA8PCAxNzsKICBzdGF0aWMgY29uc3QgaW50IF9rRGlzbWlzc0luZGV4ID0gMSA8PCAxODsKICBzdGF0aWMgY29uc3QgaW50IF9rTW92ZUN1cnNvckZvcndhcmRCeVdvcmRJbmRleCA9IDEgPDwgMTk7CiAgc3RhdGljIGNvbnN0IGludCBfa01vdmVDdXJzb3JCYWNrd2FyZEJ5V29yZEluZGV4ID0gMSA8PCAyMDsKICAvLyBSRUFEIFRISVM6IGlmIHlvdSBhZGQgYW4gYWN0aW9uIGhlcmUsIHlvdSBNVVNUIHVwZGF0ZSB0aGUKICAvLyBudW1TZW1hbnRpY3NBY3Rpb25zIHZhbHVlIGluIHRlc3RpbmcvZGFydC9zZW1hbnRpY3NfdGVzdC5kYXJ0LCBvciB0ZXN0cwogIC8vIHdpbGwgZmFpbC4KCiAgLy8vIFRoZSBudW1lcmljYWwgdmFsdWUgZm9yIHRoaXMgYWN0aW9uLgogIC8vLwogIC8vLyBFYWNoIGFjdGlvbiBoYXMgb25lIGJpdCBzZXQgaW4gdGhpcyBiaXQgZmllbGQuCiAgZmluYWwgaW50IGluZGV4OwoKICAvLy8gVGhlIGVxdWl2YWxlbnQgb2YgYSB1c2VyIGJyaWVmbHkgdGFwcGluZyB0aGUgc2NyZWVuIHdpdGggdGhlIGZpbmdlcgogIC8vLyB3aXRob3V0IG1vdmluZyBpdC4KICBzdGF0aWMgY29uc3QgU2VtYW50aWNzQWN0aW9uIHRhcCA9IFNlbWFudGljc0FjdGlvbi5fKF9rVGFwSW5kZXgpOwoKICAvLy8gVGhlIGVxdWl2YWxlbnQgb2YgYSB1c2VyIHByZXNzaW5nIGFuZCBob2xkaW5nIHRoZSBzY3JlZW4gd2l0aCB0aGUgZmluZ2VyCiAgLy8vIGZvciBhIGZldyBzZWNvbmRzIHdpdGhvdXQgbW92aW5nIGl0LgogIHN0YXRpYyBjb25zdCBTZW1hbnRpY3NBY3Rpb24gbG9uZ1ByZXNzID0gU2VtYW50aWNzQWN0aW9uLl8oX2tMb25nUHJlc3NJbmRleCk7CgogIC8vLyBUaGUgZXF1aXZhbGVudCBvZiBhIHVzZXIgbW92aW5nIHRoZWlyIGZpbmdlciBhY3Jvc3MgdGhlIHNjcmVlbiBmcm9tIHJpZ2h0CiAgLy8vIHRvIGxlZnQuCiAgLy8vCiAgLy8vIFRoaXMgYWN0aW9uIHNob3VsZCBiZSByZWNvZ25pemVkIGJ5IGNvbnRyb2xzIHRoYXQgYXJlIGhvcml6b250YWxseQogIC8vLyBzY3JvbGxhYmxlLgogIHN0YXRpYyBjb25zdCBTZW1hbnRpY3NBY3Rpb24gc2Nyb2xsTGVmdCA9IFNlbWFudGljc0FjdGlvbi5fKF9rU2Nyb2xsTGVmdEluZGV4KTsKCiAgLy8vIFRoZSBlcXVpdmFsZW50IG9mIGEgdXNlciBtb3ZpbmcgdGhlaXIgZmluZ2VyIGFjcm9zcyB0aGUgc2NyZWVuIGZyb20gbGVmdAogIC8vLyB0byByaWdodC4KICAvLy8KICAvLy8gVGhpcyBhY3Rpb24gc2hvdWxkIGJlIHJlY29nbml6ZWQgYnkgY29udHJvbHMgdGhhdCBhcmUgaG9yaXpvbnRhbGx5CiAgLy8vIHNjcm9sbGFibGUuCiAgc3RhdGljIGNvbnN0IFNlbWFudGljc0FjdGlvbiBzY3JvbGxSaWdodCA9IFNlbWFudGljc0FjdGlvbi5fKF9rU2Nyb2xsUmlnaHRJbmRleCk7CgogIC8vLyBUaGUgZXF1aXZhbGVudCBvZiBhIHVzZXIgbW92aW5nIHRoZWlyIGZpbmdlciBhY3Jvc3MgdGhlIHNjcmVlbiBmcm9tCiAgLy8vIGJvdHRvbSB0byB0b3AuCiAgLy8vCiAgLy8vIFRoaXMgYWN0aW9uIHNob3VsZCBiZSByZWNvZ25pemVkIGJ5IGNvbnRyb2xzIHRoYXQgYXJlIHZlcnRpY2FsbHkKICAvLy8gc2Nyb2xsYWJsZS4KICBzdGF0aWMgY29uc3QgU2VtYW50aWNzQWN0aW9uIHNjcm9sbFVwID0gU2VtYW50aWNzQWN0aW9uLl8oX2tTY3JvbGxVcEluZGV4KTsKCiAgLy8vIFRoZSBlcXVpdmFsZW50IG9mIGEgdXNlciBtb3ZpbmcgdGhlaXIgZmluZ2VyIGFjcm9zcyB0aGUgc2NyZWVuIGZyb20gdG9wCiAgLy8vIHRvIGJvdHRvbS4KICAvLy8KICAvLy8gVGhpcyBhY3Rpb24gc2hvdWxkIGJlIHJlY29nbml6ZWQgYnkgY29udHJvbHMgdGhhdCBhcmUgdmVydGljYWxseQogIC8vLyBzY3JvbGxhYmxlLgogIHN0YXRpYyBjb25zdCBTZW1hbnRpY3NBY3Rpb24gc2Nyb2xsRG93biA9IFNlbWFudGljc0FjdGlvbi5fKF9rU2Nyb2xsRG93bkluZGV4KTsKCiAgLy8vIEEgcmVxdWVzdCB0byBpbmNyZWFzZSB0aGUgdmFsdWUgcmVwcmVzZW50ZWQgYnkgdGhlIHNlbWFudGljcyBub2RlLgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSwgdGhpcyBhY3Rpb24gbWlnaHQgYmUgcmVjb2duaXplZCBieSBhIHNsaWRlciBjb250cm9sLgogIHN0YXRpYyBjb25zdCBTZW1hbnRpY3NBY3Rpb24gaW5jcmVhc2UgPSBTZW1hbnRpY3NBY3Rpb24uXyhfa0luY3JlYXNlSW5kZXgpOwoKICAvLy8gQSByZXF1ZXN0IHRvIGRlY3JlYXNlIHRoZSB2YWx1ZSByZXByZXNlbnRlZCBieSB0aGUgc2VtYW50aWNzIG5vZGUuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCB0aGlzIGFjdGlvbiBtaWdodCBiZSByZWNvZ25pemVkIGJ5IGEgc2xpZGVyIGNvbnRyb2wuCiAgc3RhdGljIGNvbnN0IFNlbWFudGljc0FjdGlvbiBkZWNyZWFzZSA9IFNlbWFudGljc0FjdGlvbi5fKF9rRGVjcmVhc2VJbmRleCk7CgogIC8vLyBBIHJlcXVlc3QgdG8gZnVsbHkgc2hvdyB0aGUgc2VtYW50aWNzIG5vZGUgb24gc2NyZWVuLgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSwgdGhpcyBhY3Rpb24gbWlnaHQgYmUgc2VuZCB0byBhIG5vZGUgaW4gYSBzY3JvbGxhYmxlIGxpc3QgdGhhdAogIC8vLyBpcyBwYXJ0aWFsbHkgb2ZmIHNjcmVlbiB0byBicmluZyBpdCBvbiBzY3JlZW4uCiAgc3RhdGljIGNvbnN0IFNlbWFudGljc0FjdGlvbiBzaG93T25TY3JlZW4gPSBTZW1hbnRpY3NBY3Rpb24uXyhfa1Nob3dPblNjcmVlbkluZGV4KTsKCiAgLy8vIE1vdmUgdGhlIGN1cnNvciBmb3J3YXJkIGJ5IG9uZSBjaGFyYWN0ZXIuCiAgLy8vCiAgLy8vIFRoaXMgaXMgZm9yIGV4YW1wbGUgdXNlZCBieSB0aGUgY3Vyc29yIGNvbnRyb2wgaW4gdGV4dCBmaWVsZHMuCiAgLy8vCiAgLy8vIFRoZSBhY3Rpb24gaW5jbHVkZXMgYSBib29sZWFuIGFyZ3VtZW50LCB3aGljaCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY3Vyc29yCiAgLy8vIG1vdmVtZW50IHNob3VsZCBleHRlbmQgKG9yIHN0YXJ0KSBhIHNlbGVjdGlvbi4KICBzdGF0aWMgY29uc3QgU2VtYW50aWNzQWN0aW9uIG1vdmVDdXJzb3JGb3J3YXJkQnlDaGFyYWN0ZXIgPSBTZW1hbnRpY3NBY3Rpb24uXyhfa01vdmVDdXJzb3JGb3J3YXJkQnlDaGFyYWN0ZXJJbmRleCk7CgogIC8vLyBNb3ZlIHRoZSBjdXJzb3IgYmFja3dhcmQgYnkgb25lIGNoYXJhY3Rlci4KICAvLy8KICAvLy8gVGhpcyBpcyBmb3IgZXhhbXBsZSB1c2VkIGJ5IHRoZSBjdXJzb3IgY29udHJvbCBpbiB0ZXh0IGZpZWxkcy4KICAvLy8KICAvLy8gVGhlIGFjdGlvbiBpbmNsdWRlcyBhIGJvb2xlYW4gYXJndW1lbnQsIHdoaWNoIGluZGljYXRlcyB3aGV0aGVyIHRoZSBjdXJzb3IKICAvLy8gbW92ZW1lbnQgc2hvdWxkIGV4dGVuZCAob3Igc3RhcnQpIGEgc2VsZWN0aW9uLgogIHN0YXRpYyBjb25zdCBTZW1hbnRpY3NBY3Rpb24gbW92ZUN1cnNvckJhY2t3YXJkQnlDaGFyYWN0ZXIgPSBTZW1hbnRpY3NBY3Rpb24uXyhfa01vdmVDdXJzb3JCYWNrd2FyZEJ5Q2hhcmFjdGVySW5kZXgpOwoKICAvLy8gU2V0IHRoZSB0ZXh0IHNlbGVjdGlvbiB0byB0aGUgZ2l2ZW4gcmFuZ2UuCiAgLy8vCiAgLy8vIFRoZSBwcm92aWRlZCBhcmd1bWVudCBpcyBhIE1hcDxTdHJpbmcsIGludD4gd2hpY2ggaW5jbHVkZXMgdGhlIGtleXMgYGJhc2VgCiAgLy8vIGFuZCBgZXh0ZW50YCBpbmRpY2F0aW5nIHdoZXJlIHRoZSBzZWxlY3Rpb24gd2l0aGluIHRoZSBgdmFsdWVgIG9mIHRoZQogIC8vLyBzZW1hbnRpY3Mgbm9kZSBzaG91bGQgc3RhcnQgYW5kIHdoZXJlIGl0IHNob3VsZCBlbmQuIFZhbHVlcyBmb3IgYm90aAogIC8vLyBrZXlzIGNhbiByYW5nZSBmcm9tIDAgdG8gbGVuZ3RoIG9mIGB2YWx1ZWAgKGluY2x1c2l2ZSkuCiAgLy8vCiAgLy8vIFNldHRpbmcgYGJhc2VgIGFuZCBgZXh0ZW50YCB0byB0aGUgc2FtZSB2YWx1ZSB3aWxsIG1vdmUgdGhlIGN1cnNvciB0bwogIC8vLyB0aGF0IHBvc2l0aW9uICh3aXRob3V0IHNlbGVjdGluZyBhbnl0aGluZykuCiAgc3RhdGljIGNvbnN0IFNlbWFudGljc0FjdGlvbiBzZXRTZWxlY3Rpb24gPSBTZW1hbnRpY3NBY3Rpb24uXyhfa1NldFNlbGVjdGlvbkluZGV4KTsKCiAgLy8vIENvcHkgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHRvIHRoZSBjbGlwYm9hcmQuCiAgc3RhdGljIGNvbnN0IFNlbWFudGljc0FjdGlvbiBjb3B5ID0gU2VtYW50aWNzQWN0aW9uLl8oX2tDb3B5SW5kZXgpOwoKICAvLy8gQ3V0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiBhbmQgcGxhY2UgaXQgaW4gdGhlIGNsaXBib2FyZC4KICBzdGF0aWMgY29uc3QgU2VtYW50aWNzQWN0aW9uIGN1dCA9IFNlbWFudGljc0FjdGlvbi5fKF9rQ3V0SW5kZXgpOwoKICAvLy8gUGFzdGUgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUgY2xpcGJvYXJkLgogIHN0YXRpYyBjb25zdCBTZW1hbnRpY3NBY3Rpb24gcGFzdGUgPSBTZW1hbnRpY3NBY3Rpb24uXyhfa1Bhc3RlSW5kZXgpOwoKICAvLy8gSW5kaWNhdGVzIHRoYXQgdGhlIG5vZGUgaGFzIGdhaW5lZCBhY2Nlc3NpYmlsaXR5IGZvY3VzLgogIC8vLwogIC8vLyBUaGlzIGhhbmRsZXIgaXMgaW52b2tlZCB3aGVuIHRoZSBub2RlIGFubm90YXRlZCB3aXRoIHRoaXMgaGFuZGxlciBnYWlucwogIC8vLyB0aGUgYWNjZXNzaWJpbGl0eSBmb2N1cy4gVGhlIGFjY2Vzc2liaWxpdHkgZm9jdXMgaXMgdGhlCiAgLy8vIGdyZWVuIChvbiBBbmRyb2lkIHdpdGggVGFsa0JhY2spIG9yIGJsYWNrIChvbiBpT1Mgd2l0aCBWb2ljZU92ZXIpCiAgLy8vIHJlY3RhbmdsZSBzaG93biBvbiBzY3JlZW4gdG8gaW5kaWNhdGUgd2hhdCBlbGVtZW50IGFuIGFjY2Vzc2liaWxpdHkKICAvLy8gdXNlciBpcyBjdXJyZW50bHkgaW50ZXJhY3Rpbmcgd2l0aC4KICAvLy8KICAvLy8gVGhlIGFjY2Vzc2liaWxpdHkgZm9jdXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGlucHV0IGZvY3VzLiBUaGUgaW5wdXQgZm9jdXMKICAvLy8gaXMgdXN1YWxseSBoZWxkIGJ5IHRoZSBlbGVtZW50IHRoYXQgY3VycmVudGx5IHJlc3BvbmRzIHRvIGtleWJvYXJkIGlucHV0cy4KICAvLy8gQWNjZXNzaWJpbGl0eSBmb2N1cyBhbmQgaW5wdXQgZm9jdXMgY2FuIGJlIGhlbGQgYnkgdHdvIGRpZmZlcmVudCBub2RlcyEKICBzdGF0aWMgY29uc3QgU2VtYW50aWNzQWN0aW9uIGRpZEdhaW5BY2Nlc3NpYmlsaXR5Rm9jdXMgPSBTZW1hbnRpY3NBY3Rpb24uXyhfa0RpZEdhaW5BY2Nlc3NpYmlsaXR5Rm9jdXNJbmRleCk7CgogIC8vLyBJbmRpY2F0ZXMgdGhhdCB0aGUgbm9kZSBoYXMgbG9zdCBhY2Nlc3NpYmlsaXR5IGZvY3VzLgogIC8vLwogIC8vLyBUaGlzIGhhbmRsZXIgaXMgaW52b2tlZCB3aGVuIHRoZSBub2RlIGFubm90YXRlZCB3aXRoIHRoaXMgaGFuZGxlcgogIC8vLyBsb3NlcyB0aGUgYWNjZXNzaWJpbGl0eSBmb2N1cy4gVGhlIGFjY2Vzc2liaWxpdHkgZm9jdXMgaXMKICAvLy8gdGhlIGdyZWVuIChvbiBBbmRyb2lkIHdpdGggVGFsa0JhY2spIG9yIGJsYWNrIChvbiBpT1Mgd2l0aCBWb2ljZU92ZXIpCiAgLy8vIHJlY3RhbmdsZSBzaG93biBvbiBzY3JlZW4gdG8gaW5kaWNhdGUgd2hhdCBlbGVtZW50IGFuIGFjY2Vzc2liaWxpdHkKICAvLy8gdXNlciBpcyBjdXJyZW50bHkgaW50ZXJhY3Rpbmcgd2l0aC4KICAvLy8KICAvLy8gVGhlIGFjY2Vzc2liaWxpdHkgZm9jdXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGlucHV0IGZvY3VzLiBUaGUgaW5wdXQgZm9jdXMKICAvLy8gaXMgdXN1YWxseSBoZWxkIGJ5IHRoZSBlbGVtZW50IHRoYXQgY3VycmVudGx5IHJlc3BvbmRzIHRvIGtleWJvYXJkIGlucHV0cy4KICAvLy8gQWNjZXNzaWJpbGl0eSBmb2N1cyBhbmQgaW5wdXQgZm9jdXMgY2FuIGJlIGhlbGQgYnkgdHdvIGRpZmZlcmVudCBub2RlcyEKICBzdGF0aWMgY29uc3QgU2VtYW50aWNzQWN0aW9uIGRpZExvc2VBY2Nlc3NpYmlsaXR5Rm9jdXMgPSBTZW1hbnRpY3NBY3Rpb24uXyhfa0RpZExvc2VBY2Nlc3NpYmlsaXR5Rm9jdXNJbmRleCk7CgogIC8vLyBJbmRpY2F0ZXMgdGhhdCB0aGUgdXNlciBoYXMgaW52b2tlZCBhIGN1c3RvbSBhY2Nlc3NpYmlsaXR5IGFjdGlvbi4KICAvLy8KICAvLy8gVGhpcyBoYW5kbGVyIGlzIGFkZGVkIGF1dG9tYXRpY2FsbHkgd2hlbmV2ZXIgYSBjdXN0b20gYWNjZXNzaWJpbGl0eQogIC8vLyBhY3Rpb24gaXMgYWRkZWQgdG8gYSBzZW1hbnRpY3Mgbm9kZS4KICBzdGF0aWMgY29uc3QgU2VtYW50aWNzQWN0aW9uIGN1c3RvbUFjdGlvbiA9IFNlbWFudGljc0FjdGlvbi5fKF9rQ3VzdG9tQWN0aW9uKTsKCiAgLy8vIEEgcmVxdWVzdCB0aGF0IHRoZSBub2RlIHNob3VsZCBiZSBkaXNtaXNzZWQuCiAgLy8vCiAgLy8vIEEgW1NuYWNrYmFyXSwgZm9yIGV4YW1wbGUsIG1heSBoYXZlIGEgZGlzbWlzcyBhY3Rpb24gdG8gaW5kaWNhdGUgdG8gdGhlCiAgLy8vIHVzZXIgdGhhdCBpdCBjYW4gYmUgcmVtb3ZlZCBhZnRlciBpdCBpcyBubyBsb25nZXIgcmVsZXZhbnQuIE9uIEFuZHJvaWQsCiAgLy8vICh3aXRoIFRhbGtCYWNrKSBzcGVjaWFsIGhpbnQgdGV4dCBpcyBzcG9rZW4gd2hlbiBmb2N1c2luZyB0aGUgbm9kZSBhbmQKICAvLy8gYSBjdXN0b20gYWN0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbG9jYWwgY29udGV4dCBtZW51LiBPbiBpT1MsCiAgLy8vICh3aXRoIFZvaWNlT3ZlcikgdXNlcnMgY2FuIHBlcmZvcm0gYSBzdGFuZGFyZCBnZXN0dXJlIHRvIGRpc21pc3MgaXQuCiAgc3RhdGljIGNvbnN0IFNlbWFudGljc0FjdGlvbiBkaXNtaXNzID0gU2VtYW50aWNzQWN0aW9uLl8oX2tEaXNtaXNzSW5kZXgpOwoKICAvLy8gTW92ZSB0aGUgY3Vyc29yIGZvcndhcmQgYnkgb25lIHdvcmQuCiAgLy8vCiAgLy8vIFRoaXMgaXMgZm9yIGV4YW1wbGUgdXNlZCBieSB0aGUgY3Vyc29yIGNvbnRyb2wgaW4gdGV4dCBmaWVsZHMuCiAgLy8vCiAgLy8vIFRoZSBhY3Rpb24gaW5jbHVkZXMgYSBib29sZWFuIGFyZ3VtZW50LCB3aGljaCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY3Vyc29yCiAgLy8vIG1vdmVtZW50IHNob3VsZCBleHRlbmQgKG9yIHN0YXJ0KSBhIHNlbGVjdGlvbi4KICBzdGF0aWMgY29uc3QgU2VtYW50aWNzQWN0aW9uIG1vdmVDdXJzb3JGb3J3YXJkQnlXb3JkID0gU2VtYW50aWNzQWN0aW9uLl8oX2tNb3ZlQ3Vyc29yRm9yd2FyZEJ5V29yZEluZGV4KTsKCiAgLy8vIE1vdmUgdGhlIGN1cnNvciBiYWNrd2FyZCBieSBvbmUgd29yZC4KICAvLy8KICAvLy8gVGhpcyBpcyBmb3IgZXhhbXBsZSB1c2VkIGJ5IHRoZSBjdXJzb3IgY29udHJvbCBpbiB0ZXh0IGZpZWxkcy4KICAvLy8KICAvLy8gVGhlIGFjdGlvbiBpbmNsdWRlcyBhIGJvb2xlYW4gYXJndW1lbnQsIHdoaWNoIGluZGljYXRlcyB3aGV0aGVyIHRoZSBjdXJzb3IKICAvLy8gbW92ZW1lbnQgc2hvdWxkIGV4dGVuZCAob3Igc3RhcnQpIGEgc2VsZWN0aW9uLgogIHN0YXRpYyBjb25zdCBTZW1hbnRpY3NBY3Rpb24gbW92ZUN1cnNvckJhY2t3YXJkQnlXb3JkID0gU2VtYW50aWNzQWN0aW9uLl8oX2tNb3ZlQ3Vyc29yQmFja3dhcmRCeVdvcmRJbmRleCk7CgogIC8vLyBUaGUgcG9zc2libGUgc2VtYW50aWNzIGFjdGlvbnMuCiAgLy8vCiAgLy8vIFRoZSBtYXAncyBrZXkgaXMgdGhlIFtpbmRleF0gb2YgdGhlIGFjdGlvbiBhbmQgdGhlIHZhbHVlIGlzIHRoZSBhY3Rpb24KICAvLy8gaXRzZWxmLgogIHN0YXRpYyBjb25zdCBNYXA8aW50LCBTZW1hbnRpY3NBY3Rpb24+IHZhbHVlcyA9IDxpbnQsIFNlbWFudGljc0FjdGlvbj57CiAgICBfa1RhcEluZGV4OiB0YXAsCiAgICBfa0xvbmdQcmVzc0luZGV4OiBsb25nUHJlc3MsCiAgICBfa1Njcm9sbExlZnRJbmRleDogc2Nyb2xsTGVmdCwKICAgIF9rU2Nyb2xsUmlnaHRJbmRleDogc2Nyb2xsUmlnaHQsCiAgICBfa1Njcm9sbFVwSW5kZXg6IHNjcm9sbFVwLAogICAgX2tTY3JvbGxEb3duSW5kZXg6IHNjcm9sbERvd24sCiAgICBfa0luY3JlYXNlSW5kZXg6IGluY3JlYXNlLAogICAgX2tEZWNyZWFzZUluZGV4OiBkZWNyZWFzZSwKICAgIF9rU2hvd09uU2NyZWVuSW5kZXg6IHNob3dPblNjcmVlbiwKICAgIF9rTW92ZUN1cnNvckZvcndhcmRCeUNoYXJhY3RlckluZGV4OiBtb3ZlQ3Vyc29yRm9yd2FyZEJ5Q2hhcmFjdGVyLAogICAgX2tNb3ZlQ3Vyc29yQmFja3dhcmRCeUNoYXJhY3RlckluZGV4OiBtb3ZlQ3Vyc29yQmFja3dhcmRCeUNoYXJhY3RlciwKICAgIF9rU2V0U2VsZWN0aW9uSW5kZXg6IHNldFNlbGVjdGlvbiwKICAgIF9rQ29weUluZGV4OiBjb3B5LAogICAgX2tDdXRJbmRleDogY3V0LAogICAgX2tQYXN0ZUluZGV4OiBwYXN0ZSwKICAgIF9rRGlkR2FpbkFjY2Vzc2liaWxpdHlGb2N1c0luZGV4OiBkaWRHYWluQWNjZXNzaWJpbGl0eUZvY3VzLAogICAgX2tEaWRMb3NlQWNjZXNzaWJpbGl0eUZvY3VzSW5kZXg6IGRpZExvc2VBY2Nlc3NpYmlsaXR5Rm9jdXMsCiAgICBfa0N1c3RvbUFjdGlvbjogY3VzdG9tQWN0aW9uLAogICAgX2tEaXNtaXNzSW5kZXg6IGRpc21pc3MsCiAgICBfa01vdmVDdXJzb3JGb3J3YXJkQnlXb3JkSW5kZXg6IG1vdmVDdXJzb3JGb3J3YXJkQnlXb3JkLAogICAgX2tNb3ZlQ3Vyc29yQmFja3dhcmRCeVdvcmRJbmRleDogbW92ZUN1cnNvckJhY2t3YXJkQnlXb3JkLAogIH07CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHN3aXRjaCAoaW5kZXgpIHsKICAgICAgY2FzZSBfa1RhcEluZGV4OgogICAgICAgIHJldHVybiAnU2VtYW50aWNzQWN0aW9uLnRhcCc7CiAgICAgIGNhc2UgX2tMb25nUHJlc3NJbmRleDoKICAgICAgICByZXR1cm4gJ1NlbWFudGljc0FjdGlvbi5sb25nUHJlc3MnOwogICAgICBjYXNlIF9rU2Nyb2xsTGVmdEluZGV4OgogICAgICAgIHJldHVybiAnU2VtYW50aWNzQWN0aW9uLnNjcm9sbExlZnQnOwogICAgICBjYXNlIF9rU2Nyb2xsUmlnaHRJbmRleDoKICAgICAgICByZXR1cm4gJ1NlbWFudGljc0FjdGlvbi5zY3JvbGxSaWdodCc7CiAgICAgIGNhc2UgX2tTY3JvbGxVcEluZGV4OgogICAgICAgIHJldHVybiAnU2VtYW50aWNzQWN0aW9uLnNjcm9sbFVwJzsKICAgICAgY2FzZSBfa1Njcm9sbERvd25JbmRleDoKICAgICAgICByZXR1cm4gJ1NlbWFudGljc0FjdGlvbi5zY3JvbGxEb3duJzsKICAgICAgY2FzZSBfa0luY3JlYXNlSW5kZXg6CiAgICAgICAgcmV0dXJuICdTZW1hbnRpY3NBY3Rpb24uaW5jcmVhc2UnOwogICAgICBjYXNlIF9rRGVjcmVhc2VJbmRleDoKICAgICAgICByZXR1cm4gJ1NlbWFudGljc0FjdGlvbi5kZWNyZWFzZSc7CiAgICAgIGNhc2UgX2tTaG93T25TY3JlZW5JbmRleDoKICAgICAgICByZXR1cm4gJ1NlbWFudGljc0FjdGlvbi5zaG93T25TY3JlZW4nOwogICAgICBjYXNlIF9rTW92ZUN1cnNvckZvcndhcmRCeUNoYXJhY3RlckluZGV4OgogICAgICAgIHJldHVybiAnU2VtYW50aWNzQWN0aW9uLm1vdmVDdXJzb3JGb3J3YXJkQnlDaGFyYWN0ZXInOwogICAgICBjYXNlIF9rTW92ZUN1cnNvckJhY2t3YXJkQnlDaGFyYWN0ZXJJbmRleDoKICAgICAgICByZXR1cm4gJ1NlbWFudGljc0FjdGlvbi5tb3ZlQ3Vyc29yQmFja3dhcmRCeUNoYXJhY3Rlcic7CiAgICAgIGNhc2UgX2tTZXRTZWxlY3Rpb25JbmRleDoKICAgICAgICByZXR1cm4gJ1NlbWFudGljc0FjdGlvbi5zZXRTZWxlY3Rpb24nOwogICAgICBjYXNlIF9rQ29weUluZGV4OgogICAgICAgIHJldHVybiAnU2VtYW50aWNzQWN0aW9uLmNvcHknOwogICAgICBjYXNlIF9rQ3V0SW5kZXg6CiAgICAgICAgcmV0dXJuICdTZW1hbnRpY3NBY3Rpb24uY3V0JzsKICAgICAgY2FzZSBfa1Bhc3RlSW5kZXg6CiAgICAgICAgcmV0dXJuICdTZW1hbnRpY3NBY3Rpb24ucGFzdGUnOwogICAgICBjYXNlIF9rRGlkR2FpbkFjY2Vzc2liaWxpdHlGb2N1c0luZGV4OgogICAgICAgIHJldHVybiAnU2VtYW50aWNzQWN0aW9uLmRpZEdhaW5BY2Nlc3NpYmlsaXR5Rm9jdXMnOwogICAgICBjYXNlIF9rRGlkTG9zZUFjY2Vzc2liaWxpdHlGb2N1c0luZGV4OgogICAgICAgIHJldHVybiAnU2VtYW50aWNzQWN0aW9uLmRpZExvc2VBY2Nlc3NpYmlsaXR5Rm9jdXMnOwogICAgICBjYXNlIF9rQ3VzdG9tQWN0aW9uOgogICAgICAgIHJldHVybiAnU2VtYW50aWNzQWN0aW9uLmN1c3RvbUFjdGlvbic7CiAgICAgIGNhc2UgX2tEaXNtaXNzSW5kZXg6CiAgICAgICAgcmV0dXJuICdTZW1hbnRpY3NBY3Rpb24uZGlzbWlzcyc7CiAgICAgIGNhc2UgX2tNb3ZlQ3Vyc29yRm9yd2FyZEJ5V29yZEluZGV4OgogICAgICAgIHJldHVybiAnU2VtYW50aWNzQWN0aW9uLm1vdmVDdXJzb3JGb3J3YXJkQnlXb3JkJzsKICAgICAgY2FzZSBfa01vdmVDdXJzb3JCYWNrd2FyZEJ5V29yZEluZGV4OgogICAgICAgIHJldHVybiAnU2VtYW50aWNzQWN0aW9uLm1vdmVDdXJzb3JCYWNrd2FyZEJ5V29yZCc7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCi8vLyBBIEJvb2xlYW4gdmFsdWUgdGhhdCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGEgc2VtYW50aWNzIG5vZGUuCi8vCi8vIFdoZW4gY2hhbmdlcyBhcmUgbWFkZSB0byB0aGlzIGNsYXNzLCB0aGUgZXF1aXZhbGVudCBBUElzIGluCi8vIGBsaWIvdWkvc2VtYW50aWNzL3NlbWFudGljc19ub2RlLmhgIGFuZCBpbiBlYWNoIG9mIHRoZSBlbWJlZGRlcnMgKm11c3QqIGJlCi8vIHVwZGF0ZWQuCmNsYXNzIFNlbWFudGljc0ZsYWcgewogIHN0YXRpYyBjb25zdCBpbnQgX2tIYXNDaGVja2VkU3RhdGVJbmRleCA9IDEgPDwgMDsKICBzdGF0aWMgY29uc3QgaW50IF9rSXNDaGVja2VkSW5kZXggPSAxIDw8IDE7CiAgc3RhdGljIGNvbnN0IGludCBfa0lzU2VsZWN0ZWRJbmRleCA9IDEgPDwgMjsKICBzdGF0aWMgY29uc3QgaW50IF9rSXNCdXR0b25JbmRleCA9IDEgPDwgMzsKICBzdGF0aWMgY29uc3QgaW50IF9rSXNUZXh0RmllbGRJbmRleCA9IDEgPDwgNDsKICBzdGF0aWMgY29uc3QgaW50IF9rSXNGb2N1c2VkSW5kZXggPSAxIDw8IDU7CiAgc3RhdGljIGNvbnN0IGludCBfa0hhc0VuYWJsZWRTdGF0ZUluZGV4ID0gMSA8PCA2OwogIHN0YXRpYyBjb25zdCBpbnQgX2tJc0VuYWJsZWRJbmRleCA9IDEgPDwgNzsKICBzdGF0aWMgY29uc3QgaW50IF9rSXNJbk11dHVhbGx5RXhjbHVzaXZlR3JvdXBJbmRleCA9IDEgPDwgODsKICBzdGF0aWMgY29uc3QgaW50IF9rSXNIZWFkZXJJbmRleCA9IDEgPDwgOTsKICBzdGF0aWMgY29uc3QgaW50IF9rSXNPYnNjdXJlZEluZGV4ID0gMSA8PCAxMDsKICBzdGF0aWMgY29uc3QgaW50IF9rU2NvcGVzUm91dGVJbmRleD0gMSA8PCAxMTsKICBzdGF0aWMgY29uc3QgaW50IF9rTmFtZXNSb3V0ZUluZGV4ID0gMSA8PCAxMjsKICBzdGF0aWMgY29uc3QgaW50IF9rSXNIaWRkZW5JbmRleCA9IDEgPDwgMTM7CiAgc3RhdGljIGNvbnN0IGludCBfa0lzSW1hZ2VJbmRleCA9IDEgPDwgMTQ7CiAgc3RhdGljIGNvbnN0IGludCBfa0lzTGl2ZVJlZ2lvbkluZGV4ID0gMSA8PCAxNTsKICBzdGF0aWMgY29uc3QgaW50IF9rSGFzVG9nZ2xlZFN0YXRlSW5kZXggPSAxIDw8IDE2OwogIHN0YXRpYyBjb25zdCBpbnQgX2tJc1RvZ2dsZWRJbmRleCA9IDEgPDwgMTc7CiAgc3RhdGljIGNvbnN0IGludCBfa0hhc0ltcGxpY2l0U2Nyb2xsaW5nSW5kZXggPSAxIDw8IDE4OwogIHN0YXRpYyBjb25zdCBpbnQgX2tJc011bHRpbGluZUluZGV4ID0gMSA8PCAxOTsKICBzdGF0aWMgY29uc3QgaW50IF9rSXNSZWFkT25seUluZGV4ID0gMSA8PCAyMDsKICBzdGF0aWMgY29uc3QgaW50IF9rSXNGb2N1c2FibGVJbmRleCA9IDEgPDwgMjE7CiAgc3RhdGljIGNvbnN0IGludCBfa0lzTGlua0luZGV4ID0gMSA8PCAyMjsKICAvLyBSRUFEIFRISVM6IGlmIHlvdSBhZGQgYSBmbGFnIGhlcmUsIHlvdSBNVVNUIHVwZGF0ZSB0aGUgbnVtU2VtYW50aWNzRmxhZ3MKICAvLyB2YWx1ZSBpbiB0ZXN0aW5nL2RhcnQvc2VtYW50aWNzX3Rlc3QuZGFydCwgb3IgdGVzdHMgd2lsbCBmYWlsLgoKICBjb25zdCBTZW1hbnRpY3NGbGFnLl8odGhpcy5pbmRleCk7CgogIC8vLyBUaGUgbnVtZXJpY2FsIHZhbHVlIGZvciB0aGlzIGZsYWcuCiAgLy8vCiAgLy8vIEVhY2ggZmxhZyBoYXMgb25lIGJpdCBzZXQgaW4gdGhpcyBiaXQgZmllbGQuCiAgZmluYWwgaW50IGluZGV4OwoKICAvLy8gVGhlIHNlbWFudGljcyBub2RlIGhhcyB0aGUgcXVhbGl0eSBvZiBlaXRoZXIgYmVpbmcgImNoZWNrZWQiIG9yICJ1bmNoZWNrZWQiLgogIC8vLwogIC8vLyBUaGlzIGZsYWcgaXMgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggW2hhc1RvZ2dsZWRTdGF0ZV0uCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCBhIGNoZWNrYm94IG9yIGEgcmFkaW8gYnV0dG9uIHdpZGdldCBoYXMgY2hlY2tlZCBzdGF0ZS4KICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICAgKiBbU2VtYW50aWNzRmxhZy5pc0NoZWNrZWRdLCB3aGljaCBjb250cm9scyB3aGV0aGVyIHRoZSBub2RlIGlzICJjaGVja2VkIiBvciAidW5jaGVja2VkIi4KICBzdGF0aWMgY29uc3QgU2VtYW50aWNzRmxhZyBoYXNDaGVja2VkU3RhdGUgPSBTZW1hbnRpY3NGbGFnLl8oX2tIYXNDaGVja2VkU3RhdGVJbmRleCk7CgogIC8vLyBXaGV0aGVyIGEgc2VtYW50aWNzIG5vZGUgdGhhdCBbaGFzQ2hlY2tlZFN0YXRlXSBpcyBjaGVja2VkLgogIC8vLwogIC8vLyBJZiB0cnVlLCB0aGUgc2VtYW50aWNzIG5vZGUgaXMgImNoZWNrZWQiLiBJZiBmYWxzZSwgdGhlIHNlbWFudGljcyBub2RlIGlzCiAgLy8vICJ1bmNoZWNrZWQiLgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSwgaWYgYSBjaGVja2JveCBoYXMgYSB2aXNpYmxlIGNoZWNrbWFyaywgW2lzQ2hlY2tlZF0gaXMgdHJ1ZS4KICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICAgKiBbU2VtYW50aWNzRmxhZy5oYXNDaGVja2VkU3RhdGVdLCB3aGljaCBlbmFibGVzIGEgY2hlY2tlZCBzdGF0ZS4KICBzdGF0aWMgY29uc3QgU2VtYW50aWNzRmxhZyBpc0NoZWNrZWQgPSBTZW1hbnRpY3NGbGFnLl8oX2tJc0NoZWNrZWRJbmRleCk7CgoKICAvLy8gV2hldGhlciBhIHNlbWFudGljcyBub2RlIGlzIHNlbGVjdGVkLgogIC8vLwogIC8vLyBJZiB0cnVlLCB0aGUgc2VtYW50aWNzIG5vZGUgaXMgInNlbGVjdGVkIi4gSWYgZmFsc2UsIHRoZSBzZW1hbnRpY3Mgbm9kZSBpcwogIC8vLyAidW5zZWxlY3RlZCIuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCB0aGUgYWN0aXZlIHRhYiBpbiBhIHRhYiBiYXIgaGFzIFtpc1NlbGVjdGVkXSBzZXQgdG8gdHJ1ZS4KICBzdGF0aWMgY29uc3QgU2VtYW50aWNzRmxhZyBpc1NlbGVjdGVkID0gU2VtYW50aWNzRmxhZy5fKF9rSXNTZWxlY3RlZEluZGV4KTsKCiAgLy8vIFdoZXRoZXIgdGhlIHNlbWFudGljIG5vZGUgcmVwcmVzZW50cyBhIGJ1dHRvbi4KICAvLy8KICAvLy8gUGxhdGZvcm1zIGhhdmUgc3BlY2lhbCBoYW5kbGluZyBmb3IgYnV0dG9ucywgZm9yIGV4YW1wbGUgQW5kcm9pZCdzIFRhbGtCYWNrCiAgLy8vIGFuZCBpT1MncyBWb2ljZU92ZXIgcHJvdmlkZXMgYW4gYWRkaXRpb25hbCBoaW50IHdoZW4gdGhlIGZvY3VzZWQgb2JqZWN0IGlzCiAgLy8vIGEgYnV0dG9uLgogIHN0YXRpYyBjb25zdCBTZW1hbnRpY3NGbGFnIGlzQnV0dG9uID0gU2VtYW50aWNzRmxhZy5fKF9rSXNCdXR0b25JbmRleCk7CgogIC8vLyBXaGV0aGVyIHRoZSBzZW1hbnRpYyBub2RlIHJlcHJlc2VudHMgYSB0ZXh0IGZpZWxkLgogIC8vLwogIC8vLyBUZXh0IGZpZWxkcyBhcmUgYW5ub3VuY2VkIGFzIHN1Y2ggYW5kIGFsbG93IHRleHQgaW5wdXQgdmlhIGFjY2Vzc2liaWxpdHkKICAvLy8gYWZmb3JkYW5jZXMuCiAgc3RhdGljIGNvbnN0IFNlbWFudGljc0ZsYWcgaXNUZXh0RmllbGQgPSBTZW1hbnRpY3NGbGFnLl8oX2tJc1RleHRGaWVsZEluZGV4KTsKCiAgLy8vIFdoZXRoZXIgdGhlIHNlbWFudGljIG5vZGUgaXMgcmVhZCBvbmx5LgogIC8vLwogIC8vLyBPbmx5IGFwcGxpY2FibGUgd2hlbiBbaXNUZXh0RmllbGRdIGlzIHRydWUuCiAgc3RhdGljIGNvbnN0IFNlbWFudGljc0ZsYWcgaXNSZWFkT25seSA9IFNlbWFudGljc0ZsYWcuXyhfa0lzUmVhZE9ubHlJbmRleCk7CgogIC8vLyBXaGV0aGVyIHRoZSBzZW1hbnRpYyBub2RlIGlzIGFuIGludGVyYWN0aXZlIGxpbmsuCiAgLy8vCiAgLy8vIFBsYXRmb3JtcyBoYXZlIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGxpbmtzLCBmb3IgZXhhbXBsZSBpT1MncyBWb2ljZU92ZXIKICAvLy8gcHJvdmlkZXMgYW4gYWRkaXRpb25hbCBoaW50IHdoZW4gdGhlIGZvY3VzZWQgb2JqZWN0IGlzIGEgbGluaywgYXMgd2VsbCBhcwogIC8vLyB0aGUgYWJpbGl0eSB0byBwYXJzZSB0aGUgbGlua3MgdGhyb3VnaCBhbm90aGVyIG5hdmlnYXRpb24gbWVudS4KICBzdGF0aWMgY29uc3QgU2VtYW50aWNzRmxhZyBpc0xpbmsgPSBTZW1hbnRpY3NGbGFnLl8oX2tJc0xpbmtJbmRleCk7CgogIC8vLyBXaGV0aGVyIHRoZSBzZW1hbnRpYyBub2RlIGlzIGFibGUgdG8gaG9sZCB0aGUgdXNlcidzIGZvY3VzLgogIC8vLwogIC8vLyBUaGUgZm9jdXNlZCBlbGVtZW50IGlzIHVzdWFsbHkgdGhlIGN1cnJlbnQgcmVjZWl2ZXIgb2Yga2V5Ym9hcmQgaW5wdXRzLgogIHN0YXRpYyBjb25zdCBTZW1hbnRpY3NGbGFnIGlzRm9jdXNhYmxlID0gU2VtYW50aWNzRmxhZy5fKF9rSXNGb2N1c2FibGVJbmRleCk7CgogIC8vLyBXaGV0aGVyIHRoZSBzZW1hbnRpYyBub2RlIGN1cnJlbnRseSBob2xkcyB0aGUgdXNlcidzIGZvY3VzLgogIC8vLwogIC8vLyBUaGUgZm9jdXNlZCBlbGVtZW50IGlzIHVzdWFsbHkgdGhlIGN1cnJlbnQgcmVjZWl2ZXIgb2Yga2V5Ym9hcmQgaW5wdXRzLgogIHN0YXRpYyBjb25zdCBTZW1hbnRpY3NGbGFnIGlzRm9jdXNlZCA9IFNlbWFudGljc0ZsYWcuXyhfa0lzRm9jdXNlZEluZGV4KTsKCiAgLy8vIFRoZSBzZW1hbnRpY3Mgbm9kZSBoYXMgdGhlIHF1YWxpdHkgb2YgZWl0aGVyIGJlaW5nICJlbmFibGVkIiBvcgogIC8vLyAiZGlzYWJsZWQiLgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSwgYSBidXR0b24gY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYW5kIHRoZXJlZm9yZSBoYXMgYW4KICAvLy8gImVuYWJsZWQiIHN0YXRlLiBTdGF0aWMgdGV4dCBpcyB1c3VhbGx5IG5laXRoZXIgZW5hYmxlZCBub3IgZGlzYWJsZWQgYW5kCiAgLy8vIHRoZXJlZm9yZSBkb2VzIG5vdCBoYXZlIGFuICJlbmFibGVkIiBzdGF0ZS4KICBzdGF0aWMgY29uc3QgU2VtYW50aWNzRmxhZyBoYXNFbmFibGVkU3RhdGUgPSBTZW1hbnRpY3NGbGFnLl8oX2tIYXNFbmFibGVkU3RhdGVJbmRleCk7CgogIC8vLyBXaGV0aGVyIGEgc2VtYW50aWMgbm9kZSB0aGF0IFtoYXNFbmFibGVkU3RhdGVdIGlzIGN1cnJlbnRseSBlbmFibGVkLgogIC8vLwogIC8vLyBBIGRpc2FibGVkIGVsZW1lbnQgZG9lcyBub3QgcmVzcG9uZCB0byB1c2VyIGludGVyYWN0aW9uLiBGb3IgZXhhbXBsZSwgYQogIC8vLyBidXR0b24gdGhhdCBjdXJyZW50bHkgZG9lcyBub3QgcmVzcG9uZCB0byB1c2VyIGludGVyYWN0aW9uIHNob3VsZCBiZQogIC8vLyBtYXJrZWQgYXMgZGlzYWJsZWQuCiAgc3RhdGljIGNvbnN0IFNlbWFudGljc0ZsYWcgaXNFbmFibGVkID0gU2VtYW50aWNzRmxhZy5fKF9rSXNFbmFibGVkSW5kZXgpOwoKICAvLy8gV2hldGhlciBhIHNlbWFudGljIG5vZGUgaXMgaW4gYSBtdXR1YWxseSBleGNsdXNpdmUgZ3JvdXAuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCBhIHJhZGlvIGJ1dHRvbiBpcyBpbiBhIG11dHVhbGx5IGV4Y2x1c2l2ZSBncm91cCBiZWNhdXNlCiAgLy8vIG9ubHkgb25lIHJhZGlvIGJ1dHRvbiBpbiB0aGF0IGdyb3VwIGNhbiBiZSBtYXJrZWQgYXMgW2lzQ2hlY2tlZF0uCiAgc3RhdGljIGNvbnN0IFNlbWFudGljc0ZsYWcgaXNJbk11dHVhbGx5RXhjbHVzaXZlR3JvdXAgPSBTZW1hbnRpY3NGbGFnLl8oX2tJc0luTXV0dWFsbHlFeGNsdXNpdmVHcm91cEluZGV4KTsKCiAgLy8vIFdoZXRoZXIgYSBzZW1hbnRpYyBub2RlIGlzIGEgaGVhZGVyIHRoYXQgZGl2aWRlcyBjb250ZW50IGludG8gc2VjdGlvbnMuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCBoZWFkZXJzIGNhbiBiZSB1c2VkIHRvIGRpdmlkZSBhIGxpc3Qgb2YgYWxwaGFiZXRpY2FsbHkKICAvLy8gc29ydGVkIHdvcmRzIGludG8gdGhlIHNlY3Rpb25zIEEsIEIsIEMsIGV0Yy4gYXMgY2FuIGJlIGZvdW5kIGluIG1hbnkKICAvLy8gYWRkcmVzcyBib29rIGFwcGxpY2F0aW9ucy4KICBzdGF0aWMgY29uc3QgU2VtYW50aWNzRmxhZyBpc0hlYWRlciA9IFNlbWFudGljc0ZsYWcuXyhfa0lzSGVhZGVySW5kZXgpOwoKICAvLy8gV2hldGhlciB0aGUgdmFsdWUgb2YgdGhlIHNlbWFudGljcyBub2RlIGlzIG9ic2N1cmVkLgogIC8vLwogIC8vLyBUaGlzIGlzIHVzdWFsbHkgdXNlZCBmb3IgdGV4dCBmaWVsZHMgdG8gaW5kaWNhdGUgdGhhdCBpdHMgY29udGVudAogIC8vLyBpcyBhIHBhc3N3b3JkIG9yIGNvbnRhaW5zIG90aGVyIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi4KICBzdGF0aWMgY29uc3QgU2VtYW50aWNzRmxhZyBpc09ic2N1cmVkID0gU2VtYW50aWNzRmxhZy5fKF9rSXNPYnNjdXJlZEluZGV4KTsKCiAgLy8vIFdoZXRoZXIgdGhlIHZhbHVlIG9mIHRoZSBzZW1hbnRpY3Mgbm9kZSBpcyBjb21pbmcgZnJvbSBhIG11bHRpLWxpbmUgdGV4dAogIC8vLyBmaWVsZC4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIGZvciB0ZXh0IGZpZWxkcyB0byBkaXN0aW5ndWlzaCBzaW5nbGUtbGluZSB0ZXh0IGZpZWxkcyBmcm9tCiAgLy8vIG11bHRpLWxpbmUgb25lcy4KICBzdGF0aWMgY29uc3QgU2VtYW50aWNzRmxhZyBpc011bHRpbGluZSA9IFNlbWFudGljc0ZsYWcuXyhfa0lzTXVsdGlsaW5lSW5kZXgpOwoKICAvLy8gV2hldGhlciB0aGUgc2VtYW50aWNzIG5vZGUgaXMgdGhlIHJvb3Qgb2YgYSBzdWJ0cmVlIGZvciB3aGljaCBhIHJvdXRlIG5hbWUKICAvLy8gc2hvdWxkIGJlIGFubm91bmNlZC4KICAvLy8KICAvLy8gV2hlbiBhIG5vZGUgd2l0aCB0aGlzIGZsYWcgaXMgcmVtb3ZlZCBmcm9tIHRoZSBzZW1hbnRpY3MgdHJlZSwgdGhlCiAgLy8vIGZyYW1ld29yayB3aWxsIHNlbGVjdCB0aGUgbGFzdCBpbiBkZXB0aC1maXJzdCwgcGFpbnQgb3JkZXIgbm9kZSB3aXRoIHRoaXMKICAvLy8gZmxhZy4gIFdoZW4gYSBub2RlIHdpdGggdGhpcyBmbGFnIGlzIGFkZGVkIHRvIHRoZSBzZW1hbnRpY3MgdHJlZSwgaXQgaXMKICAvLy8gc2VsZWN0ZWQgYXV0b21hdGljYWxseSwgdW5sZXNzIHRoZXJlIHdlcmUgbXVsdGlwbGUgbm9kZXMgd2l0aCB0aGlzIGZsYWcKICAvLy8gYWRkZWQuICBJbiB0aGlzIGNhc2UsIHRoZSBsYXN0IGFkZGVkIG5vZGUgaW4gZGVwdGgtZmlyc3QsIHBhaW50IG9yZGVyCiAgLy8vIHdpbGwgYmUgc2VsZWN0ZWQuCiAgLy8vCiAgLy8vIEZyb20gdGhpcyBzZWxlY3RlZCBub2RlLCB0aGUgZnJhbWV3b3JrIHdpbGwgc2VhcmNoIGluIGRlcHRoLWZpcnN0LCBwYWludAogIC8vLyBvcmRlciBmb3IgdGhlIGZpcnN0IG5vZGUgd2l0aCBhIFtuYW1lc1JvdXRlXSBmbGFnIGFuZCBhIG5vbi1udWxsLAogIC8vLyBub24tZW1wdHkgbGFiZWwuIFRoZSBbbmFtZXNSb3V0ZV0gYW5kIFtzY29wZXNSb3V0ZV0gZmxhZ3MgbWF5IGJlIG9uIHRoZQogIC8vLyBzYW1lIG5vZGUuIFRoZSBsYWJlbCBvZiB0aGUgZm91bmQgbm9kZSB3aWxsIGJlIGFubm91bmNlZCBhcyBhbiBlZGdlCiAgLy8vIHRyYW5zaXRpb24uIElmIG5vIG5vbi1lbXB0eSwgbm9uLW51bGwgbGFiZWwgaXMgZm91bmQgdGhlbjoKICAvLy8KICAvLy8gICAqIFZvaWNlT3ZlciB3aWxsIG1ha2UgYSBjaGltZSBhbm5vdW5jZW1lbnQuCiAgLy8vICAgKiBUYWxrQmFjayB3aWxsIG1ha2Ugbm8gYW5ub3VuY2VtZW50CiAgLy8vCiAgLy8vIFNlbWFudGljIG5vZGVzIGFubm90YXRlZCB3aXRoIHRoaXMgZmxhZyBhcmUgZ2VuZXJhbGx5IG5vdCBhMTF5IGZvY3VzYWJsZS4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIGluIHdpZGdldHMgc3VjaCBhcyBSb3V0ZXMsIERyYXdlcnMsIGFuZCBEaWFsb2dzIHRvCiAgLy8vIGNvbW11bmljYXRlIHNpZ25pZmljYW50IGNoYW5nZXMgaW4gdGhlIHZpc2libGUgc2NyZWVuLgogIHN0YXRpYyBjb25zdCBTZW1hbnRpY3NGbGFnIHNjb3Blc1JvdXRlID0gU2VtYW50aWNzRmxhZy5fKF9rU2NvcGVzUm91dGVJbmRleCk7CgogIC8vLyBXaGV0aGVyIHRoZSBzZW1hbnRpY3Mgbm9kZSBsYWJlbCBpcyB0aGUgbmFtZSBvZiBhIHZpc3VhbGx5IGRpc3RpbmN0CiAgLy8vIHJvdXRlLgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgYnkgY2VydGFpbiB3aWRnZXRzIGxpa2UgRHJhd2VycyBhbmQgRGlhbG9ncywgdG8gaW5kaWNhdGUKICAvLy8gdGhhdCB0aGUgbm9kZSdzIHNlbWFudGljIGxhYmVsIGNhbiBiZSB1c2VkIHRvIGFubm91bmNlIGFuIGVkZ2UgdHJpZ2dlcmVkCiAgLy8vIHNlbWFudGljcyB1cGRhdGUuCiAgLy8vCiAgLy8vIFNlbWFudGljIG5vZGVzIGFubm90YXRlZCB3aXRoIHRoaXMgZmxhZyB3aWxsIHN0aWxsIHJlY2VpdmUgYTExeSBmb2N1cy4KICAvLy8KICAvLy8gVXBkYXRpbmcgdGhpcyBsYWJlbCB3aXRoaW4gdGhlIHNhbWUgYWN0aXZlIHJvdXRlIHN1YnRyZWUgd2lsbCBub3QgY2F1c2UKICAvLy8gYWRkaXRpb25hbCBhbm5vdW5jZW1lbnRzLgogIHN0YXRpYyBjb25zdCBTZW1hbnRpY3NGbGFnIG5hbWVzUm91dGUgPSBTZW1hbnRpY3NGbGFnLl8oX2tOYW1lc1JvdXRlSW5kZXgpOwoKICAvLy8gV2hldGhlciB0aGUgc2VtYW50aWNzIG5vZGUgaXMgY29uc2lkZXJlZCBoaWRkZW4uCiAgLy8vCiAgLy8vIEhpZGRlbiBlbGVtZW50cyBhcmUgY3VycmVudGx5IG5vdCB2aXNpYmxlIG9uIHNjcmVlbi4gVGhleSBtYXkgYmUgY292ZXJlZAogIC8vLyBieSBvdGhlciBlbGVtZW50cyBvciBwb3NpdGlvbmVkIG91dHNpZGUgb2YgdGhlIHZpc2libGUgYXJlYSBvZiBhIHZpZXdwb3J0LgogIC8vLwogIC8vLyBIaWRkZW4gZWxlbWVudHMgY2Fubm90IGdhaW4gYWNjZXNzaWJpbGl0eSBmb2N1cyB0aG91Z2ggcmVndWxhciB0b3VjaC4gVGhlCiAgLy8vIG9ubHkgd2F5IHRoZXkgY2FuIGJlIGZvY3VzZWQgaXMgYnkgbW92aW5nIHRoZSBmb2N1cyB0byB0aGVtIHZpYSBsaW5lYXIKICAvLy8gbmF2aWdhdGlvbi4KICAvLy8KICAvLy8gUGxhdGZvcm1zIGFyZSBmcmVlIHRvIGNvbXBsZXRlbHkgaWdub3JlIGhpZGRlbiBlbGVtZW50cyBhbmQgbmV3IHBsYXRmb3JtcwogIC8vLyBhcmUgZW5jb3VyYWdlZCB0byBkbyBzby4KICAvLy8KICAvLy8gSW5zdGVhZCBvZiBtYXJraW5nIGFuIGVsZW1lbnQgYXMgaGlkZGVuIGl0IHNob3VsZCB1c3VhbGx5IGJlIGV4Y2x1ZGVkIGZyb20KICAvLy8gdGhlIHNlbWFudGljcyB0cmVlIGFsdG9nZXRoZXIuIEhpZGRlbiBlbGVtZW50cyBhcmUgb25seSBpbmNsdWRlZCBpbiB0aGUKICAvLy8gc2VtYW50aWNzIHRyZWUgdG8gd29yayBhcm91bmQgcGxhdGZvcm0gbGltaXRhdGlvbnMgYW5kIHRoZXkgYXJlIG1haW5seQogIC8vLyB1c2VkIHRvIGltcGxlbWVudCBhY2Nlc3NpYmlsaXR5IHNjcm9sbGluZyBvbiBpT1MuCiAgc3RhdGljIGNvbnN0IFNlbWFudGljc0ZsYWcgaXNIaWRkZW4gPSBTZW1hbnRpY3NGbGFnLl8oX2tJc0hpZGRlbkluZGV4KTsKCiAgLy8vIFdoZXRoZXIgdGhlIHNlbWFudGljcyBub2RlIHJlcHJlc2VudHMgYW4gaW1hZ2UuCiAgLy8vCiAgLy8vIEJvdGggVGFsa0JhY2sgYW5kIFZvaWNlT3ZlciB3aWxsIGluZm9ybSB0aGUgdXNlciB0aGUgc2VtYW50aWNzIG5vZGUKICAvLy8gcmVwcmVzZW50cyBhbiBpbWFnZS4KICBzdGF0aWMgY29uc3QgU2VtYW50aWNzRmxhZyBpc0ltYWdlID0gU2VtYW50aWNzRmxhZy5fKF9rSXNJbWFnZUluZGV4KTsKCiAgLy8vIFdoZXRoZXIgdGhlIHNlbWFudGljcyBub2RlIGlzIGEgbGl2ZSByZWdpb24uCiAgLy8vCiAgLy8vIEEgbGl2ZSByZWdpb24gaW5kaWNhdGVzIHRoYXQgdXBkYXRlcyB0byBzZW1hbnRpY3Mgbm9kZSBhcmUgaW1wb3J0YW50LgogIC8vLyBQbGF0Zm9ybXMgbWF5IHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIG1ha2UgcG9saXRlIGFubm91bmNlbWVudHMgdG8gdGhlCiAgLy8vIHVzZXIgdG8gaW5mb3JtIHRoZW0gb2YgdXBkYXRlcyB0byB0aGlzIG5vZGUuCiAgLy8vCiAgLy8vIEFuIGV4YW1wbGUgb2YgYSBsaXZlIHJlZ2lvbiBpcyBhIFtTbmFja0Jhcl0gd2lkZ2V0LiBPbiBBbmRyb2lkLCBBIGxpdmUKICAvLy8gcmVnaW9uIGNhdXNlcyBhIHBvbGl0ZSBhbm5vdW5jZW1lbnQgdG8gYmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHksIGV2ZW4KICAvLy8gaWYgdGhlIHVzZXIgZG9lcyBub3QgaGF2ZSBmb2N1cyBvZiB0aGUgd2lkZ2V0LgogIHN0YXRpYyBjb25zdCBTZW1hbnRpY3NGbGFnIGlzTGl2ZVJlZ2lvbiA9IFNlbWFudGljc0ZsYWcuXyhfa0lzTGl2ZVJlZ2lvbkluZGV4KTsKCiAgLy8vIFRoZSBzZW1hbnRpY3Mgbm9kZSBoYXMgdGhlIHF1YWxpdHkgb2YgZWl0aGVyIGJlaW5nICJvbiIgb3IgIm9mZiIuCiAgLy8vCiAgLy8vIFRoaXMgZmxhZyBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCBbaGFzQ2hlY2tlZFN0YXRlXS4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUsIGEgc3dpdGNoIGhhcyB0b2dnbGVkIHN0YXRlLgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICAgKiBbU2VtYW50aWNzRmxhZy5pc1RvZ2dsZWRdLCB3aGljaCBjb250cm9scyB3aGV0aGVyIHRoZSBub2RlIGlzICJvbiIgb3IgIm9mZiIuCiAgc3RhdGljIGNvbnN0IFNlbWFudGljc0ZsYWcgaGFzVG9nZ2xlZFN0YXRlID0gU2VtYW50aWNzRmxhZy5fKF9rSGFzVG9nZ2xlZFN0YXRlSW5kZXgpOwoKICAvLy8gSWYgdHJ1ZSwgdGhlIHNlbWFudGljcyBub2RlIGlzICJvbiIuIElmIGZhbHNlLCB0aGUgc2VtYW50aWNzIG5vZGUgaXMKICAvLy8gIm9mZiIuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCBpZiBhIHN3aXRjaCBpcyBpbiB0aGUgb24gcG9zaXRpb24sIFtpc1RvZ2dsZWRdIGlzIHRydWUuCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgICogW1NlbWFudGljc0ZsYWcuaGFzVG9nZ2xlZFN0YXRlXSwgd2hpY2ggZW5hYmxlcyBhIHRvZ2dsZWQgc3RhdGUuCiAgc3RhdGljIGNvbnN0IFNlbWFudGljc0ZsYWcgaXNUb2dnbGVkID0gU2VtYW50aWNzRmxhZy5fKF9rSXNUb2dnbGVkSW5kZXgpOwoKICAvLy8gV2hldGhlciB0aGUgcGxhdGZvcm0gY2FuIHNjcm9sbCB0aGUgc2VtYW50aWNzIG5vZGUgd2hlbiB0aGUgdXNlciBhdHRlbXB0cwogIC8vLyB0byBtb3ZlIGZvY3VzIHRvIGFuIG9mZnNjcmVlbiBjaGlsZC4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUsIGEgW0xpc3RWaWV3XSB3aWRnZXQgaGFzIGltcGxpY2l0IHNjcm9sbGluZyBzbyB0aGF0IHVzZXJzIGNhbgogIC8vLyBlYXNpbHkgbW92ZSB0aGUgYWNjZXNzaWJpbGl0eSBmb2N1cyB0byB0aGUgbmV4dCBzZXQgb2YgY2hpbGRyZW4uIEEKICAvLy8gW1BhZ2VWaWV3XSB3aWRnZXQgZG9lcyBub3QgaGF2ZSBpbXBsaWNpdCBzY3JvbGxpbmcsIHNvIHRoYXQgdXNlcnMgZG9uJ3QKICAvLy8gbmF2aWdhdGUgdG8gdGhlIG5leHQgcGFnZSB3aGVuIHJlYWNoaW5nIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgb25lLgogIHN0YXRpYyBjb25zdCBTZW1hbnRpY3NGbGFnIGhhc0ltcGxpY2l0U2Nyb2xsaW5nID0gU2VtYW50aWNzRmxhZy5fKF9rSGFzSW1wbGljaXRTY3JvbGxpbmdJbmRleCk7CgogIC8vLyBUaGUgcG9zc2libGUgc2VtYW50aWNzIGZsYWdzLgogIC8vLwogIC8vLyBUaGUgbWFwJ3Mga2V5IGlzIHRoZSBbaW5kZXhdIG9mIHRoZSBmbGFnIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGZsYWcgaXRzZWxmLgogIHN0YXRpYyBjb25zdCBNYXA8aW50LCBTZW1hbnRpY3NGbGFnPiB2YWx1ZXMgPSA8aW50LCBTZW1hbnRpY3NGbGFnPnsKICAgIF9rSGFzQ2hlY2tlZFN0YXRlSW5kZXg6IGhhc0NoZWNrZWRTdGF0ZSwKICAgIF9rSXNDaGVja2VkSW5kZXg6IGlzQ2hlY2tlZCwKICAgIF9rSXNTZWxlY3RlZEluZGV4OiBpc1NlbGVjdGVkLAogICAgX2tJc0J1dHRvbkluZGV4OiBpc0J1dHRvbiwKICAgIF9rSXNUZXh0RmllbGRJbmRleDogaXNUZXh0RmllbGQsCiAgICBfa0lzRm9jdXNlZEluZGV4OiBpc0ZvY3VzZWQsCiAgICBfa0hhc0VuYWJsZWRTdGF0ZUluZGV4OiBoYXNFbmFibGVkU3RhdGUsCiAgICBfa0lzRW5hYmxlZEluZGV4OiBpc0VuYWJsZWQsCiAgICBfa0lzSW5NdXR1YWxseUV4Y2x1c2l2ZUdyb3VwSW5kZXg6IGlzSW5NdXR1YWxseUV4Y2x1c2l2ZUdyb3VwLAogICAgX2tJc0hlYWRlckluZGV4OiBpc0hlYWRlciwKICAgIF9rSXNPYnNjdXJlZEluZGV4OiBpc09ic2N1cmVkLAogICAgX2tTY29wZXNSb3V0ZUluZGV4OiBzY29wZXNSb3V0ZSwKICAgIF9rTmFtZXNSb3V0ZUluZGV4OiBuYW1lc1JvdXRlLAogICAgX2tJc0hpZGRlbkluZGV4OiBpc0hpZGRlbiwKICAgIF9rSXNJbWFnZUluZGV4OiBpc0ltYWdlLAogICAgX2tJc0xpdmVSZWdpb25JbmRleDogaXNMaXZlUmVnaW9uLAogICAgX2tIYXNUb2dnbGVkU3RhdGVJbmRleDogaGFzVG9nZ2xlZFN0YXRlLAogICAgX2tJc1RvZ2dsZWRJbmRleDogaXNUb2dnbGVkLAogICAgX2tIYXNJbXBsaWNpdFNjcm9sbGluZ0luZGV4OiBoYXNJbXBsaWNpdFNjcm9sbGluZywKICAgIF9rSXNNdWx0aWxpbmVJbmRleDogaXNNdWx0aWxpbmUsCiAgICBfa0lzUmVhZE9ubHlJbmRleDogaXNSZWFkT25seSwKICAgIF9rSXNGb2N1c2FibGVJbmRleDogaXNGb2N1c2FibGUsCiAgICBfa0lzTGlua0luZGV4OiBpc0xpbmssCiAgfTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgc3dpdGNoIChpbmRleCkgewogICAgICBjYXNlIF9rSGFzQ2hlY2tlZFN0YXRlSW5kZXg6CiAgICAgICAgcmV0dXJuICdTZW1hbnRpY3NGbGFnLmhhc0NoZWNrZWRTdGF0ZSc7CiAgICAgIGNhc2UgX2tJc0NoZWNrZWRJbmRleDoKICAgICAgICByZXR1cm4gJ1NlbWFudGljc0ZsYWcuaXNDaGVja2VkJzsKICAgICAgY2FzZSBfa0lzU2VsZWN0ZWRJbmRleDoKICAgICAgICByZXR1cm4gJ1NlbWFudGljc0ZsYWcuaXNTZWxlY3RlZCc7CiAgICAgIGNhc2UgX2tJc0J1dHRvbkluZGV4OgogICAgICAgIHJldHVybiAnU2VtYW50aWNzRmxhZy5pc0J1dHRvbic7CiAgICAgIGNhc2UgX2tJc1RleHRGaWVsZEluZGV4OgogICAgICAgIHJldHVybiAnU2VtYW50aWNzRmxhZy5pc1RleHRGaWVsZCc7CiAgICAgIGNhc2UgX2tJc0ZvY3VzZWRJbmRleDoKICAgICAgICByZXR1cm4gJ1NlbWFudGljc0ZsYWcuaXNGb2N1c2VkJzsKICAgICAgY2FzZSBfa0hhc0VuYWJsZWRTdGF0ZUluZGV4OgogICAgICAgIHJldHVybiAnU2VtYW50aWNzRmxhZy5oYXNFbmFibGVkU3RhdGUnOwogICAgICBjYXNlIF9rSXNFbmFibGVkSW5kZXg6CiAgICAgICAgcmV0dXJuICdTZW1hbnRpY3NGbGFnLmlzRW5hYmxlZCc7CiAgICAgIGNhc2UgX2tJc0luTXV0dWFsbHlFeGNsdXNpdmVHcm91cEluZGV4OgogICAgICAgIHJldHVybiAnU2VtYW50aWNzRmxhZy5pc0luTXV0dWFsbHlFeGNsdXNpdmVHcm91cCc7CiAgICAgIGNhc2UgX2tJc0hlYWRlckluZGV4OgogICAgICAgIHJldHVybiAnU2VtYW50aWNzRmxhZy5pc0hlYWRlcic7CiAgICAgIGNhc2UgX2tJc09ic2N1cmVkSW5kZXg6CiAgICAgICAgcmV0dXJuICdTZW1hbnRpY3NGbGFnLmlzT2JzY3VyZWQnOwogICAgICBjYXNlIF9rU2NvcGVzUm91dGVJbmRleDoKICAgICAgICByZXR1cm4gJ1NlbWFudGljc0ZsYWcuc2NvcGVzUm91dGUnOwogICAgICBjYXNlIF9rTmFtZXNSb3V0ZUluZGV4OgogICAgICAgIHJldHVybiAnU2VtYW50aWNzRmxhZy5uYW1lc1JvdXRlJzsKICAgICAgY2FzZSBfa0lzSGlkZGVuSW5kZXg6CiAgICAgICAgcmV0dXJuICdTZW1hbnRpY3NGbGFnLmlzSGlkZGVuJzsKICAgICAgY2FzZSBfa0lzSW1hZ2VJbmRleDoKICAgICAgICByZXR1cm4gJ1NlbWFudGljc0ZsYWcuaXNJbWFnZSc7CiAgICAgIGNhc2UgX2tJc0xpdmVSZWdpb25JbmRleDoKICAgICAgICByZXR1cm4gJ1NlbWFudGljc0ZsYWcuaXNMaXZlUmVnaW9uJzsKICAgICAgY2FzZSBfa0hhc1RvZ2dsZWRTdGF0ZUluZGV4OgogICAgICAgIHJldHVybiAnU2VtYW50aWNzRmxhZy5oYXNUb2dnbGVkU3RhdGUnOwogICAgICBjYXNlIF9rSXNUb2dnbGVkSW5kZXg6CiAgICAgICAgcmV0dXJuICdTZW1hbnRpY3NGbGFnLmlzVG9nZ2xlZCc7CiAgICAgIGNhc2UgX2tIYXNJbXBsaWNpdFNjcm9sbGluZ0luZGV4OgogICAgICAgIHJldHVybiAnU2VtYW50aWNzRmxhZy5oYXNJbXBsaWNpdFNjcm9sbGluZyc7CiAgICAgIGNhc2UgX2tJc011bHRpbGluZUluZGV4OgogICAgICAgIHJldHVybiAnU2VtYW50aWNzRmxhZy5pc011bHRpbGluZSc7CiAgICAgIGNhc2UgX2tJc1JlYWRPbmx5SW5kZXg6CiAgICAgICAgcmV0dXJuICdTZW1hbnRpY3NGbGFnLmlzUmVhZE9ubHknOwogICAgICBjYXNlIF9rSXNGb2N1c2FibGVJbmRleDoKICAgICAgICByZXR1cm4gJ1NlbWFudGljc0ZsYWcuaXNGb2N1c2FibGUnOwogICAgICBjYXNlIF9rSXNMaW5rSW5kZXg6CiAgICAgICAgcmV0dXJuICdTZW1hbnRpY3NGbGFnLmlzTGluayc7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCi8vLyBBbiBvYmplY3QgdGhhdCBjcmVhdGVzIFtTZW1hbnRpY3NVcGRhdGVdIG9iamVjdHMuCi8vLwovLy8gT25jZSBjcmVhdGVkLCB0aGUgW1NlbWFudGljc1VwZGF0ZV0gb2JqZWN0cyBjYW4gYmUgcGFzc2VkIHRvCi8vLyBbV2luZG93LnVwZGF0ZVNlbWFudGljc10gdG8gdXBkYXRlIHRoZSBzZW1hbnRpY3MgY29udmV5ZWQgdG8gdGhlIHVzZXIuCkBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKY2xhc3MgU2VtYW50aWNzVXBkYXRlQnVpbGRlciBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMiB7CiAgLy8vIENyZWF0ZXMgYW4gZW1wdHkgW1NlbWFudGljc1VwZGF0ZUJ1aWxkZXJdIG9iamVjdC4KICBAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCiAgU2VtYW50aWNzVXBkYXRlQnVpbGRlcigpIHsgX2NvbnN0cnVjdG9yKCk7IH0KICB2b2lkIF9jb25zdHJ1Y3RvcigpIG5hdGl2ZSAnU2VtYW50aWNzVXBkYXRlQnVpbGRlcl9jb25zdHJ1Y3Rvcic7CgogIC8vLyBVcGRhdGUgdGhlIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZSB3aXRoIHRoZSBnaXZlbiBgaWRgLgogIC8vLwogIC8vLyBUaGUgc2VtYW50aWNzIG5vZGVzIGZvcm0gYSB0cmVlLCB3aXRoIHRoZSByb290IG9mIHRoZSB0cmVlIGFsd2F5cyBoYXZpbmcKICAvLy8gYW4gaWQgb2YgemVyby4gVGhlIGBjaGlsZHJlbkluVHJhdmVyc2FsT3JkZXJgIGFuZCBgY2hpbGRyZW5JbkhpdFRlc3RPcmRlcmAKICAvLy8gYXJlIHRoZSBpZHMgb2YgdGhlIG5vZGVzIHRoYXQgYXJlIGltbWVkaWF0ZSBjaGlsZHJlbiBvZiB0aGlzIG5vZGUuIFRoZQogIC8vLyBmb3JtZXIgZW51bWVyYXRlcyBjaGlsZHJlbiBpbiB0cmF2ZXJzYWwgb3JkZXIsIGFuZCB0aGUgbGF0dGVyIGVudW1lcmF0ZXMKICAvLy8gdGhlIHNhbWUgY2hpbGRyZW4gaW4gdGhlIGhpdCB0ZXN0IG9yZGVyLiBUaGUgdHdvIGxpc3RzIG11c3QgaGF2ZSB0aGUgc2FtZQogIC8vLyBsZW5ndGggYW5kIGNvbnRhaW4gdGhlIHNhbWUgaWRzLiBUaGV5IG1heSBvbmx5IGRpZmZlciBpbiB0aGUgb3JkZXIgdGhlCiAgLy8vIGlkcyBhcmUgbGlzdGVkIGluLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBkaWZmZXJlbnQgY2hpbGQgb3JkZXJzLCBzZWUKICAvLy8gW0RlYnVnU2VtYW50aWNzRHVtcE9yZGVyXS4KICAvLy8KICAvLy8gVGhlIHN5c3RlbSByZXRhaW5zIHRoZSBub2RlcyB0aGF0IGFyZSBjdXJyZW50bHkgcmVhY2hhYmxlIGZyb20gdGhlIHJvb3QuCiAgLy8vIEEgZ2l2ZW4gdXBkYXRlIG5lZWQgbm90IGNvbnRhaW4gaW5mb3JtYXRpb24gZm9yIG5vZGVzIHRoYXQgZG8gbm90IGNoYW5nZQogIC8vLyBpbiB0aGUgdXBkYXRlLiBJZiBhIG5vZGUgaXMgbm90IHJlYWNoYWJsZSBmcm9tIHRoZSByb290IGFmdGVyIGFuIHVwZGF0ZSwKICAvLy8gdGhlIG5vZGUgd2lsbCBiZSBkaXNjYXJkZWQgZnJvbSB0aGUgdHJlZS4KICAvLy8KICAvLy8gVGhlIGBmbGFnc2AgYXJlIGEgYml0IGZpZWxkIG9mIFtTZW1hbnRpY3NGbGFnXXMgdGhhdCBhcHBseSB0byB0aGlzIG5vZGUuCiAgLy8vCiAgLy8vIFRoZSBgYWN0aW9uc2AgYXJlIGEgYml0IGZpZWxkIG9mIFtTZW1hbnRpY3NBY3Rpb25dcyB0aGF0IGNhbiBiZSB1bmRlcnRha2VuCiAgLy8vIGJ5IHRoaXMgbm9kZS4gSWYgdGhlIHVzZXIgd2lzaGVzIHRvIHVuZGVydGFrZSBvbmUgb2YgdGhlc2UgYWN0aW9ucyBvbiB0aGlzCiAgLy8vIG5vZGUsIHRoZSBbV2luZG93Lm9uU2VtYW50aWNzQWN0aW9uXSB3aWxsIGJlIGNhbGxlZCB3aXRoIGBpZGAgYW5kIG9uZSBvZgogIC8vLyB0aGUgcG9zc2libGUgW1NlbWFudGljc0FjdGlvbl1zLiBCZWNhdXNlIHRoZSBzZW1hbnRpY3MgdHJlZSBpcyBtYWludGFpbmVkCiAgLy8vIGFzeW5jaHJvbm91c2x5LCB0aGUgW1dpbmRvdy5vblNlbWFudGljc0FjdGlvbl0gY2FsbGJhY2sgbWlnaHQgYmUgY2FsbGVkCiAgLy8vIHdpdGggYW4gYWN0aW9uIHRoYXQgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlLgogIC8vLwogIC8vLyBUaGUgYGxhYmVsYCBpcyBhIHN0cmluZyB0aGF0IGRlc2NyaWJlcyB0aGlzIG5vZGUuIFRoZSBgdmFsdWVgIHByb3BlcnR5CiAgLy8vIGRlc2NyaWJlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbm9kZSBhcyBhIHN0cmluZy4gVGhlIGBpbmNyZWFzZWRWYWx1ZWAKICAvLy8gc3RyaW5nIHdpbGwgYmVjb21lIHRoZSBgdmFsdWVgIHN0cmluZyBhZnRlciBhIFtTZW1hbnRpY3NBY3Rpb24uaW5jcmVhc2VdCiAgLy8vIGFjdGlvbiBpcyBwZXJmb3JtZWQuIFRoZSBgZGVjcmVhc2VkVmFsdWVgIHN0cmluZyB3aWxsIGJlY29tZSB0aGUgYHZhbHVlYAogIC8vLyBzdHJpbmcgYWZ0ZXIgYSBbU2VtYW50aWNzQWN0aW9uLmRlY3JlYXNlXSBhY3Rpb24gaXMgcGVyZm9ybWVkLiBUaGUgYGhpbnRgCiAgLy8vIHN0cmluZyBkZXNjcmliZXMgd2hhdCByZXN1bHQgYW4gYWN0aW9uIHBlcmZvcm1lZCBvbiB0aGlzIG5vZGUgaGFzLiBUaGUKICAvLy8gcmVhZGluZyBkaXJlY3Rpb24gb2YgYWxsIHRoZXNlIHN0cmluZ3MgaXMgZ2l2ZW4gYnkgYHRleHREaXJlY3Rpb25gLgogIC8vLwogIC8vLyBUaGUgZmllbGRzIGB0ZXh0U2VsZWN0aW9uQmFzZWAgYW5kIGB0ZXh0U2VsZWN0aW9uRXh0ZW50YCBkZXNjcmliZSB0aGUKICAvLy8gY3VycmVudGx5IHNlbGVjdGVkIHRleHQgd2l0aGluIGB2YWx1ZWAuCiAgLy8vCiAgLy8vIFRoZSBmaWVsZCBgbWF4VmFsdWVMZW5ndGhgIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCBhbiBlZGl0YWJsZSB0ZXh0IGZpZWxkCiAgLy8vIGhhcyBhIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBlbnRlcmVkLiBJZiBpdCBpcyAtMSB0aGVyZSBpcwogIC8vLyBubyBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZW50ZXJlZC4gVGhlIGZpZWxkCiAgLy8vIGBjdXJyZW50VmFsdWVMZW5ndGhgIGluZGljYXRlcyBob3cgbXVjaCBvZiB0aGF0IGxpbWl0IGhhcyBhbHJlYWR5IGJlZW4KICAvLy8gdXNlZCB1cC4gV2hlbiBgbWF4VmFsdWVMZW5ndGhgIGlzIHNldCwgYGN1cnJlbnRWYWx1ZUxlbmd0aGAgbXVzdCBhbHNvIGJlCiAgLy8vIHNldC4KICAvLy8KICAvLy8gVGhlIGZpZWxkIGBwbGF0Zm9ybVZpZXdJZGAgcmVmZXJlbmNlcyB0aGUgcGxhdGZvcm0gdmlldywgd2hvc2Ugc2VtYW50aWNzCiAgLy8vIG5vZGVzIHdpbGwgYmUgYWRkZWQgYXMgY2hpbGRyZW4gdG8gdGhpcyBub2RlLiBJZiBhIHBsYXRmb3JtIHZpZXcgaXMKICAvLy8gc3BlY2lmaWVkLCBgY2hpbGRyZW5JbkhpdFRlc3RPcmRlcmAgYW5kIGBjaGlsZHJlbkluVHJhdmVyc2FsT3JkZXJgIG11c3QgYmUKICAvLy8gZW1wdHkuCiAgLy8vCiAgLy8vIEZvciBzY3JvbGxhYmxlIG5vZGVzIGBzY3JvbGxQb3NpdGlvbmAgZGVzY3JpYmVzIHRoZSBjdXJyZW50IHNjcm9sbAogIC8vLyBwb3NpdGlvbiBpbiBsb2dpY2FsIHBpeGVsLiBgc2Nyb2xsRXh0ZW50TWF4YCBhbmQgYHNjcm9sbEV4dGVudE1pbmAKICAvLy8gZGVzY3JpYmUgdGhlIG1heGltdW0gYW5kIG1pbmltdW0gaW4tcmFnZSB2YWx1ZXMgdGhhdCBgc2Nyb2xsUG9zaXRpb25gIGNhbgogIC8vLyBiZS4gQm90aCBvciBlaXRoZXIgbWF5IGJlIGluZmluaXR5IHRvIGluZGljYXRlIHVuYm91bmQgc2Nyb2xsaW5nLiBUaGUKICAvLy8gdmFsdWUgZm9yIGBzY3JvbGxQb3NpdGlvbmAgY2FuICh0ZW1wb3JhcmlseSkgYmUgb3V0c2lkZSB0aGlzIHJhbmdlLCBmb3IKICAvLy8gZXhhbXBsZSBkdXJpbmcgYW4gb3ZlcnNjcm9sbC4gYHNjcm9sbENoaWxkcmVuYCBpcyB0aGUgY291bnQgb2YgdGhlCiAgLy8vIHRvdGFsIG51bWJlciBvZiBjaGlsZCBub2RlcyB0aGF0IGNvbnRyaWJ1dGUgc2VtYW50aWNzIGFuZCBgc2Nyb2xsSW5kZXhgCiAgLy8vIGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgdmlzaWJsZSBjaGlsZCBub2RlIHRoYXQgY29udHJpYnV0ZXMgc2VtYW50aWNzLgogIC8vLwogIC8vLyBUaGUgYHJlY3RgIGlzIHRoZSByZWdpb24gb2NjdXBpZWQgYnkgdGhpcyBub2RlIGluIGl0cyBvd24gY29vcmRpbmF0ZQogIC8vLyBzeXN0ZW0uCiAgLy8vCiAgLy8vIFRoZSBgdHJhbnNmb3JtYCBpcyBhIG1hdHJpeCB0aGF0IG1hcHMgdGhpcyBub2RlJ3MgY29vcmRpbmF0ZSBzeXN0ZW0gaW50bwogIC8vLyBpdHMgcGFyZW50J3MgY29vcmRpbmF0ZSBzeXN0ZW0uCiAgLy8vCiAgLy8vIFRoZSBgZWxldmF0aW9uYCBkZXNjcmliZXMgdGhlIGRpc3RhbmNlIGluIHotZGlyZWN0aW9uIGJldHdlZW4gdGhpcyBub2RlCiAgLy8vIGFuZCB0aGUgYGVsZXZhdGlvbmAgb2YgdGhlIHBhcmVudC4KICAvLy8KICAvLy8gVGhlIGB0aGlja25lc3NgIGRlc2NyaWJlcyBob3cgbXVjaCBzcGFjZSB0aGlzIG5vZGUgb2NjdXBpZXMgaW4gdGhlCiAgLy8vIHotZGlyZWN0aW9uIHN0YXJ0aW5nIGF0IGBlbGV2YXRpb25gLiBCYXNpY2FsbHksIGluIHRoZSB6LWRpcmVjdGlvbiB0aGUKICAvLy8gbm9kZSBzdGFydHMgYXQgYGVsZXZhdGlvbmAgYWJvdmUgdGhlIHBhcmVudCBhbmQgZW5kcyBhdCBgZWxldmF0aW9uYCArCiAgLy8vIGB0aGlja25lc3NgIGFib3ZlIHRoZSBwYXJlbnQuCiAgdm9pZCB1cGRhdGVOb2RlKHsKICAgIGludCBpZCwKICAgIGludCBmbGFncywKICAgIGludCBhY3Rpb25zLAogICAgaW50IG1heFZhbHVlTGVuZ3RoLAogICAgaW50IGN1cnJlbnRWYWx1ZUxlbmd0aCwKICAgIGludCB0ZXh0U2VsZWN0aW9uQmFzZSwKICAgIGludCB0ZXh0U2VsZWN0aW9uRXh0ZW50LAogICAgaW50IHBsYXRmb3JtVmlld0lkLAogICAgaW50IHNjcm9sbENoaWxkcmVuLAogICAgaW50IHNjcm9sbEluZGV4LAogICAgZG91YmxlIHNjcm9sbFBvc2l0aW9uLAogICAgZG91YmxlIHNjcm9sbEV4dGVudE1heCwKICAgIGRvdWJsZSBzY3JvbGxFeHRlbnRNaW4sCiAgICBkb3VibGUgZWxldmF0aW9uLAogICAgZG91YmxlIHRoaWNrbmVzcywKICAgIFJlY3QgcmVjdCwKICAgIFN0cmluZyBsYWJlbCwKICAgIFN0cmluZyBoaW50LAogICAgU3RyaW5nIHZhbHVlLAogICAgU3RyaW5nIGluY3JlYXNlZFZhbHVlLAogICAgU3RyaW5nIGRlY3JlYXNlZFZhbHVlLAogICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uLAogICAgRmxvYXQ2NExpc3QgdHJhbnNmb3JtLAogICAgSW50MzJMaXN0IGNoaWxkcmVuSW5UcmF2ZXJzYWxPcmRlciwKICAgIEludDMyTGlzdCBjaGlsZHJlbkluSGl0VGVzdE9yZGVyLAogICAgSW50MzJMaXN0IGFkZGl0aW9uYWxBY3Rpb25zLAogIH0pIHsKICAgIGFzc2VydChfbWF0cml4NElzVmFsaWQodHJhbnNmb3JtKSk7CiAgICBhc3NlcnQoCiAgICAgIHNjcm9sbENoaWxkcmVuID09IDAgfHwgc2Nyb2xsQ2hpbGRyZW4gPT0gbnVsbCB8fCAoc2Nyb2xsQ2hpbGRyZW4gPiAwICYmIGNoaWxkcmVuSW5IaXRUZXN0T3JkZXIgIT0gbnVsbCksCiAgICAgICdJZiBhIG5vZGUgaGFzIHNjcm9sbENoaWxkcmVuLCBpdCBtdXN0IGhhdmUgY2hpbGRyZW5JbkhpdFRlc3RPcmRlcicsCiAgICApOwogICAgX3VwZGF0ZU5vZGUoCiAgICAgIGlkLAogICAgICBmbGFncywKICAgICAgYWN0aW9ucywKICAgICAgbWF4VmFsdWVMZW5ndGgsCiAgICAgIGN1cnJlbnRWYWx1ZUxlbmd0aCwKICAgICAgdGV4dFNlbGVjdGlvbkJhc2UsCiAgICAgIHRleHRTZWxlY3Rpb25FeHRlbnQsCiAgICAgIHBsYXRmb3JtVmlld0lkLAogICAgICBzY3JvbGxDaGlsZHJlbiwKICAgICAgc2Nyb2xsSW5kZXgsCiAgICAgIHNjcm9sbFBvc2l0aW9uLAogICAgICBzY3JvbGxFeHRlbnRNYXgsCiAgICAgIHNjcm9sbEV4dGVudE1pbiwKICAgICAgcmVjdC5sZWZ0LAogICAgICByZWN0LnRvcCwKICAgICAgcmVjdC5yaWdodCwKICAgICAgcmVjdC5ib3R0b20sCiAgICAgIGVsZXZhdGlvbiwKICAgICAgdGhpY2tuZXNzLAogICAgICBsYWJlbCwKICAgICAgaGludCwKICAgICAgdmFsdWUsCiAgICAgIGluY3JlYXNlZFZhbHVlLAogICAgICBkZWNyZWFzZWRWYWx1ZSwKICAgICAgdGV4dERpcmVjdGlvbiAhPSBudWxsID8gdGV4dERpcmVjdGlvbi5pbmRleCArIDEgOiAwLAogICAgICB0cmFuc2Zvcm0sCiAgICAgIGNoaWxkcmVuSW5UcmF2ZXJzYWxPcmRlciwKICAgICAgY2hpbGRyZW5JbkhpdFRlc3RPcmRlciwKICAgICAgYWRkaXRpb25hbEFjdGlvbnMsCiAgICApOwogIH0KICB2b2lkIF91cGRhdGVOb2RlKAogICAgaW50IGlkLAogICAgaW50IGZsYWdzLAogICAgaW50IGFjdGlvbnMsCiAgICBpbnQgbWF4VmFsdWVMZW5ndGgsCiAgICBpbnQgY3VycmVudFZhbHVlTGVuZ3RoLAogICAgaW50IHRleHRTZWxlY3Rpb25CYXNlLAogICAgaW50IHRleHRTZWxlY3Rpb25FeHRlbnQsCiAgICBpbnQgcGxhdGZvcm1WaWV3SWQsCiAgICBpbnQgc2Nyb2xsQ2hpbGRyZW4sCiAgICBpbnQgc2Nyb2xsSW5kZXgsCiAgICBkb3VibGUgc2Nyb2xsUG9zaXRpb24sCiAgICBkb3VibGUgc2Nyb2xsRXh0ZW50TWF4LAogICAgZG91YmxlIHNjcm9sbEV4dGVudE1pbiwKICAgIGRvdWJsZSBsZWZ0LAogICAgZG91YmxlIHRvcCwKICAgIGRvdWJsZSByaWdodCwKICAgIGRvdWJsZSBib3R0b20sCiAgICBkb3VibGUgZWxldmF0aW9uLAogICAgZG91YmxlIHRoaWNrbmVzcywKICAgIFN0cmluZyBsYWJlbCwKICAgIFN0cmluZyBoaW50LAogICAgU3RyaW5nIHZhbHVlLAogICAgU3RyaW5nIGluY3JlYXNlZFZhbHVlLAogICAgU3RyaW5nIGRlY3JlYXNlZFZhbHVlLAogICAgaW50IHRleHREaXJlY3Rpb24sCiAgICBGbG9hdDY0TGlzdCB0cmFuc2Zvcm0sCiAgICBJbnQzMkxpc3QgY2hpbGRyZW5JblRyYXZlcnNhbE9yZGVyLAogICAgSW50MzJMaXN0IGNoaWxkcmVuSW5IaXRUZXN0T3JkZXIsCiAgICBJbnQzMkxpc3QgYWRkaXRpb25hbEFjdGlvbnMsCiAgKSBuYXRpdmUgJ1NlbWFudGljc1VwZGF0ZUJ1aWxkZXJfdXBkYXRlTm9kZSc7CgogIC8vLyBVcGRhdGUgdGhlIGN1c3RvbSBzZW1hbnRpY3MgYWN0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gYGlkYC4KICAvLy8KICAvLy8gVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiBleHBvc2VkIHRvIHRoZSB1c2VyIGlzIHRoZSBgbGFiZWxgLiBGb3Igb3ZlcnJpZGRlbgogIC8vLyBzdGFuZGFyZCBhY3Rpb25zIHRoaXMgdmFsdWUgaXMgaWdub3JlZC4KICAvLy8KICAvLy8gVGhlIGBoaW50YCBzaG91bGQgZGVzY3JpYmUgd2hhdCBoYXBwZW5zIHdoZW4gYW4gYWN0aW9uIG9jY3Vycywgbm90IHRoZQogIC8vLyBtYW5uZXIgaW4gd2hpY2ggYSB0YXAgaXMgYWNjb21wbGlzaGVkLiBGb3IgZXhhbXBsZSwgdXNlICJkZWxldGUiIGluc3RlYWQKICAvLy8gb2YgImRvdWJsZSB0YXAgdG8gZGVsZXRlIi4KICAvLy8KICAvLy8gVGhlIHRleHQgZGlyZWN0aW9uIG9mIHRoZSBgaGludGAgYW5kIGBsYWJlbGAgaXMgdGhlIHNhbWUgYXMgdGhlIGdsb2JhbAogIC8vLyB3aW5kb3cuCiAgLy8vCiAgLy8vIEZvciBvdmVycmlkZGVuIHN0YW5kYXJkIGFjdGlvbnMsIGBvdmVycmlkZUlkYCBjb3JyZXNwb25kcyB3aXRoIGEKICAvLy8gW1NlbWFudGljc0FjdGlvbi5pbmRleF0gdmFsdWUuIEZvciBjdXN0b20gYWN0aW9ucyB0aGlzIGFyZ3VtZW50IHNob3VsZCBub3QgYmUKICAvLy8gcHJvdmlkZWQuCiAgdm9pZCB1cGRhdGVDdXN0b21BY3Rpb24oe2ludCBpZCwgU3RyaW5nIGxhYmVsLCBTdHJpbmcgaGludCwgaW50IG92ZXJyaWRlSWQgPSAtMX0pIHsKICAgIGFzc2VydChpZCAhPSBudWxsKTsKICAgIGFzc2VydChvdmVycmlkZUlkICE9IG51bGwpOwogICAgX3VwZGF0ZUN1c3RvbUFjdGlvbihpZCwgbGFiZWwsIGhpbnQsIG92ZXJyaWRlSWQpOwogIH0KICB2b2lkIF91cGRhdGVDdXN0b21BY3Rpb24oaW50IGlkLCBTdHJpbmcgbGFiZWwsIFN0cmluZyBoaW50LCBpbnQgb3ZlcnJpZGVJZCkgbmF0aXZlICdTZW1hbnRpY3NVcGRhdGVCdWlsZGVyX3VwZGF0ZUN1c3RvbUFjdGlvbic7CgogIC8vLyBDcmVhdGVzIGEgW1NlbWFudGljc1VwZGF0ZV0gb2JqZWN0IHRoYXQgZW5jYXBzdWxhdGVzIHRoZSB1cGRhdGVzIHJlY29yZGVkCiAgLy8vIGJ5IHRoaXMgb2JqZWN0LgogIC8vLwogIC8vLyBUaGUgcmV0dXJuZWQgb2JqZWN0IGNhbiBiZSBwYXNzZWQgdG8gW1dpbmRvdy51cGRhdGVTZW1hbnRpY3NdIHRvIGFjdHVhbGx5CiAgLy8vIHVwZGF0ZSB0aGUgc2VtYW50aWNzIHJldGFpbmVkIGJ5IHRoZSBzeXN0ZW0uCiAgU2VtYW50aWNzVXBkYXRlIGJ1aWxkKCkgbmF0aXZlICdTZW1hbnRpY3NVcGRhdGVCdWlsZGVyX2J1aWxkJzsKfQoKLy8vIEFuIG9wYXF1ZSBvYmplY3QgcmVwcmVzZW50aW5nIGEgYmF0Y2ggb2Ygc2VtYW50aWNzIHVwZGF0ZXMuCi8vLwovLy8gVG8gY3JlYXRlIGEgU2VtYW50aWNzVXBkYXRlIG9iamVjdCwgdXNlIGEgW1NlbWFudGljc1VwZGF0ZUJ1aWxkZXJdLgovLy8KLy8vIFNlbWFudGljcyB1cGRhdGVzIGNhbiBiZSBhcHBsaWVkIHRvIHRoZSBzeXN0ZW0ncyByZXRhaW5lZCBzZW1hbnRpY3MgdHJlZQovLy8gdXNpbmcgdGhlIFtXaW5kb3cudXBkYXRlU2VtYW50aWNzXSBtZXRob2QuCkBwcmFnbWEoJ3ZtOmVudHJ5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dGV4dApjbGFzcyBGb250V2VpZ2h0IHsKICBjb25zdCBGb250V2VpZ2h0Ll8odGhpcy5pbmRleCk7CgogIC8vLyBUaGUgZW5jb2RlZCBpbnRlZ2VyIHZhbHVlIG9mIHRoaXMgZm9udCB3ZWlnaHQuCiAgZmluYWwgaW50IGluZGV4OwoKICAvLy8gVGhpbiwgdGhlIGxlYXN0IHRoaWNrCiAgc3RhdGljIGNvbnN0IEZvbnRXZWlnaHQgdzEwMCA9IEZvbnRXZWlnaHQuXygwKTsKCiAgLy8vIEV4dHJhLWxpZ2h0CiAgc3RhdGljIGNvbnN0IEZvbnRXZWlnaHQgdzIwMCA9IEZvbnRXZWlnaHQuXygxKTsKCiAgLy8vIExpZ2h0CiAgc3RhdGljIGNvbnN0IEZvbnRXZWlnaHQgdzMwMCA9IEZvbnRXZWlnaHQuXygyKTsKCiAgLy8vIE5vcm1hbCAvIHJlZ3VsYXIgLyBwbGFpbgogIHN0YXRpYyBjb25zdCBGb250V2VpZ2h0IHc0MDAgPSBGb250V2VpZ2h0Ll8oMyk7CgogIC8vLyBNZWRpdW0KICBzdGF0aWMgY29uc3QgRm9udFdlaWdodCB3NTAwID0gRm9udFdlaWdodC5fKDQpOwoKICAvLy8gU2VtaS1ib2xkCiAgc3RhdGljIGNvbnN0IEZvbnRXZWlnaHQgdzYwMCA9IEZvbnRXZWlnaHQuXyg1KTsKCiAgLy8vIEJvbGQKICBzdGF0aWMgY29uc3QgRm9udFdlaWdodCB3NzAwID0gRm9udFdlaWdodC5fKDYpOwoKICAvLy8gRXh0cmEtYm9sZAogIHN0YXRpYyBjb25zdCBGb250V2VpZ2h0IHc4MDAgPSBGb250V2VpZ2h0Ll8oNyk7CgogIC8vLyBCbGFjaywgdGhlIG1vc3QgdGhpY2sKICBzdGF0aWMgY29uc3QgRm9udFdlaWdodCB3OTAwID0gRm9udFdlaWdodC5fKDgpOwoKICAvLy8gVGhlIGRlZmF1bHQgZm9udCB3ZWlnaHQuCiAgc3RhdGljIGNvbnN0IEZvbnRXZWlnaHQgbm9ybWFsID0gdzQwMDsKCiAgLy8vIEEgY29tbW9ubHkgdXNlZCBmb250IHdlaWdodCB0aGF0IGlzIGhlYXZpZXIgdGhhbiBub3JtYWwuCiAgc3RhdGljIGNvbnN0IEZvbnRXZWlnaHQgYm9sZCA9IHc3MDA7CgogIC8vLyBBIGxpc3Qgb2YgYWxsIHRoZSBmb250IHdlaWdodHMuCiAgc3RhdGljIGNvbnN0IExpc3Q8Rm9udFdlaWdodD4gdmFsdWVzID0gPEZvbnRXZWlnaHQ+WwogICAgdzEwMCwgdzIwMCwgdzMwMCwgdzQwMCwgdzUwMCwgdzYwMCwgdzcwMCwgdzgwMCwgdzkwMAogIF07CgogIC8vLyBMaW5lYXJseSBpbnRlcnBvbGF0ZXMgYmV0d2VlbiB0d28gZm9udCB3ZWlnaHRzLgogIC8vLwogIC8vLyBSYXRoZXIgdGhhbiB1c2luZyBmcmFjdGlvbmFsIHdlaWdodHMsIHRoZSBpbnRlcnBvbGF0aW9uIHJvdW5kcyB0byB0aGUKICAvLy8gbmVhcmVzdCB3ZWlnaHQuCiAgLy8vCiAgLy8vIElmIGJvdGggYGFgIGFuZCBgYmAgYXJlIG51bGwsIHRoZW4gdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gbnVsbC4gT3RoZXJ3aXNlLAogIC8vLyBhbnkgbnVsbCB2YWx1ZXMgZm9yIGBhYCBvciBgYmAgYXJlIGludGVycHJldGVkIGFzIGVxdWl2YWxlbnQgdG8gW25vcm1hbF0KICAvLy8gKGFsc28ga25vd24gYXMgW3c0MDBdKS4KICAvLy8KICAvLy8gVGhlIGB0YCBhcmd1bWVudCByZXByZXNlbnRzIHBvc2l0aW9uIG9uIHRoZSB0aW1lbGluZSwgd2l0aCAwLjAgbWVhbmluZwogIC8vLyB0aGF0IHRoZSBpbnRlcnBvbGF0aW9uIGhhcyBub3Qgc3RhcnRlZCwgcmV0dXJuaW5nIGBhYCAob3Igc29tZXRoaW5nCiAgLy8vIGVxdWl2YWxlbnQgdG8gYGFgKSwgMS4wIG1lYW5pbmcgdGhhdCB0aGUgaW50ZXJwb2xhdGlvbiBoYXMgZmluaXNoZWQsCiAgLy8vIHJldHVybmluZyBgYmAgKG9yIHNvbWV0aGluZyBlcXVpdmFsZW50IHRvIGBiYCksIGFuZCB2YWx1ZXMgaW4gYmV0d2VlbgogIC8vLyBtZWFuaW5nIHRoYXQgdGhlIGludGVycG9sYXRpb24gaXMgYXQgdGhlIHJlbGV2YW50IHBvaW50IG9uIHRoZSB0aW1lbGluZQogIC8vLyBiZXR3ZWVuIGBhYCBhbmQgYGJgLiBUaGUgaW50ZXJwb2xhdGlvbiBjYW4gYmUgZXh0cmFwb2xhdGVkIGJleW9uZCAwLjAgYW5kCiAgLy8vIDEuMCwgc28gbmVnYXRpdmUgdmFsdWVzIGFuZCB2YWx1ZXMgZ3JlYXRlciB0aGFuIDEuMCBhcmUgdmFsaWQgKGFuZCBjYW4KICAvLy8gZWFzaWx5IGJlIGdlbmVyYXRlZCBieSBjdXJ2ZXMgc3VjaCBhcyBbQ3VydmVzLmVsYXN0aWNJbk91dF0pLiBUaGUgcmVzdWx0CiAgLy8vIGlzIGNsYW1wZWQgdG8gdGhlIHJhbmdlIFt3MTAwXeKAk1t3OTAwXS4KICAvLy8KICAvLy8gVmFsdWVzIGZvciBgdGAgYXJlIHVzdWFsbHkgb2J0YWluZWQgZnJvbSBhbiBbQW5pbWF0aW9uPGRvdWJsZT5dLCBzdWNoIGFzCiAgLy8vIGFuIFtBbmltYXRpb25Db250cm9sbGVyXS4KICBzdGF0aWMgRm9udFdlaWdodCBsZXJwKEZvbnRXZWlnaHQgYSwgRm9udFdlaWdodCBiLCBkb3VibGUgdCkgewogICAgYXNzZXJ0KHQgIT0gbnVsbCk7CiAgICBpZiAoYSA9PSBudWxsICYmIGIgPT0gbnVsbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gdmFsdWVzW2xlcnBEb3VibGUoYT8uaW5kZXggPz8gbm9ybWFsLmluZGV4LCBiPy5pbmRleCA/PyBub3JtYWwuaW5kZXgsIHQpLnJvdW5kKCkuY2xhbXAoMCwgOCkgYXMgaW50XTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiBjb25zdCA8aW50LCBTdHJpbmc+ewogICAgICAwOiAnRm9udFdlaWdodC53MTAwJywKICAgICAgMTogJ0ZvbnRXZWlnaHQudzIwMCcsCiAgICAgIDI6ICdGb250V2VpZ2h0LnczMDAnLAogICAgICAzOiAnRm9udFdlaWdodC53NDAwJywKICAgICAgNDogJ0ZvbnRXZWlnaHQudzUwMCcsCiAgICAgIDU6ICdGb250V2VpZ2h0Lnc2MDAnLAogICAgICA2OiAnRm9udFdlaWdodC53NzAwJywKICAgICAgNzogJ0ZvbnRXZWlnaHQudzgwMCcsCiAgICAgIDg6ICdGb250V2VpZ2h0Lnc5MDAnLAogICAgfVtpbmRleF07CiAgfQp9CgovLy8gQSBmZWF0dXJlIHRhZyBhbmQgdmFsdWUgdGhhdCBhZmZlY3QgdGhlIHNlbGVjdGlvbiBvZiBnbHlwaHMgaW4gYSBmb250LgovLy8KLy8vIHtAdG9vbCBzYW1wbGV9Ci8vLwovLy8gVGhpcyBleGFtcGxlIHNob3dzIHVzYWdlIG9mIHNldmVyYWwgT3BlblR5cGUgZm9udCBmZWF0dXJlcywgaW5jbHVkaW5nCi8vLyBTbWFsbCBDYXBzIChzbWNwKSwgb2xkLXN0eWxlIGZpZ3VyZXMsIGZyYWN0aW9uYWwgbGlnYXR1cmVzIGFuZCBzdHlsaXN0aWMKLy8vIHNldHMuCi8vLwovLy8gYGBgZGFydAovLy9jbGFzcyBUeXBlUGFnZSBleHRlbmRzIFN0YXRlbGVzc1dpZGdldCB7Ci8vLyAgLy8gVGhlIENhcmRvLCBNaWxvbmdhIGFuZCBSYWxld2F5IERvdHMgZm9udHMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbQovLy8gIC8vIEdvb2dsZSBGb250cyAoaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9mb250cykuCi8vLwovLy8gIGZpbmFsIHRpdGxlU3R5bGUgPSBUZXh0U3R5bGUoCi8vLyAgICBmb250U2l6ZTogMTgsCi8vLyAgICBmb250RmVhdHVyZXM6IFtGb250RmVhdHVyZS5lbmFibGUoJ3NtY3AnKV0sCi8vLyAgICBjb2xvcjogQ29sb3JzLmJsdWVHcmV5WzYwMF0sCi8vLyAgKTsKLy8vCi8vLyAgQG92ZXJyaWRlCi8vLyAgV2lkZ2V0IGJ1aWxkKEJ1aWxkQ29udGV4dCBjb250ZXh0KSB7Ci8vLyAgICByZXR1cm4gU2NhZmZvbGQoCi8vLyAgICAgIGJvZHk6IENlbnRlcigKLy8vICAgICAgICBjaGlsZDogQ29sdW1uKAovLy8gICAgICAgICAgbWFpbkF4aXNBbGlnbm1lbnQ6IE1haW5BeGlzQWxpZ25tZW50LmNlbnRlciwKLy8vICAgICAgICAgIGNoaWxkcmVuOiA8V2lkZ2V0PlsKLy8vICAgICAgICAgICAgU3BhY2VyKGZsZXg6IDUpLAovLy8gICAgICAgICAgICBUZXh0KCdyZWd1bGFyIG51bWJlcnMgaGF2ZSB0aGVpciBwbGFjZTonLCBzdHlsZTogdGl0bGVTdHlsZSksCi8vLyAgICAgICAgICAgIFRleHQoJ1RoZSAxOTcyIGN1cCBmaW5hbCB3YXMgYSAxLTEgZHJhdy4nLAovLy8gICAgICAgICAgICAgICAgc3R5bGU6IFRleHRTdHlsZSgKLy8vICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogJ0NhcmRvJywKLy8vICAgICAgICAgICAgICAgICAgZm9udFNpemU6IDI0LAovLy8gICAgICAgICAgICAgICAgKSksCi8vLyAgICAgICAgICAgIFNwYWNlcigpLAovLy8gICAgICAgICAgICBUZXh0KCdidXQgb2xkLXN0eWxlIGZpZ3VyZXMgYmxlbmQgd2VsbCB3aXRoIGxvd2VyIGNhc2U6JywKLy8vICAgICAgICAgICAgICAgIHN0eWxlOiB0aXRsZVN0eWxlKSwKLy8vICAgICAgICAgICAgVGV4dCgnVGhlIDE5NzIgY3VwIGZpbmFsIHdhcyBhIDEtMSBkcmF3LicsCi8vLyAgICAgICAgICAgICAgICBzdHlsZTogVGV4dFN0eWxlKAovLy8gICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdDYXJkbycsCi8vLyAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IDI0LAovLy8gICAgICAgICAgICAgICAgICAgIGZvbnRGZWF0dXJlczogW0ZvbnRGZWF0dXJlLm9sZHN0eWxlRmlndXJlcygpXSkpLAovLy8gICAgICAgICAgICBTcGFjZXIoKSwKLy8vICAgICAgICAgICAgRGl2aWRlcigpLAovLy8gICAgICAgICAgICBTcGFjZXIoKSwKLy8vICAgICAgICAgICAgVGV4dCgnZnJhY3Rpb25zIGxvb2sgYmV0dGVyIHdpdGggYSBjdXN0b20gbGlnYXR1cmU6JywKLy8vICAgICAgICAgICAgICAgIHN0eWxlOiB0aXRsZVN0eWxlKSwKLy8vICAgICAgICAgICAgVGV4dCgnQWRkIDEvMiB0c3Agb2YgZmxvdXIgYW5kIHN0aXIuJywKLy8vICAgICAgICAgICAgICAgIHN0eWxlOiBUZXh0U3R5bGUoCi8vLyAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogJ01pbG9uZ2EnLAovLy8gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAyNCwKLy8vICAgICAgICAgICAgICAgICAgICBmb250RmVhdHVyZXM6IFtGb250RmVhdHVyZS5lbmFibGUoJ2ZyYWMnKV0pKSwKLy8vICAgICAgICAgICAgU3BhY2VyKCksCi8vLyAgICAgICAgICAgIERpdmlkZXIoKSwKLy8vICAgICAgICAgICAgU3BhY2VyKCksCi8vLyAgICAgICAgICAgIFRleHQoJ211bHRpcGxlIHN0eWxpc3RpYyBzZXRzIGluIG9uZSBmb250OicsIHN0eWxlOiB0aXRsZVN0eWxlKSwKLy8vICAgICAgICAgICAgVGV4dCgnUmFsZXdheSBEb3RzJywKLy8vICAgICAgICAgICAgICAgIHN0eWxlOiBUZXh0U3R5bGUoZm9udEZhbWlseTogJ1JhbGV3YXkgRG90cycsIGZvbnRTaXplOiA0OCkpLAovLy8gICAgICAgICAgICBUZXh0KCdSYWxld2F5IERvdHMnLAovLy8gICAgICAgICAgICAgICAgc3R5bGU6IFRleHRTdHlsZSgKLy8vICAgICAgICAgICAgICAgICAgZm9udEZlYXR1cmVzOiBbRm9udEZlYXR1cmUuc3R5bGlzdGljU2V0KDEpXSwKLy8vICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogJ1JhbGV3YXkgRG90cycsCi8vLyAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiA0OCwKLy8vICAgICAgICAgICAgICAgICkpLAovLy8gICAgICAgICAgICBTcGFjZXIoZmxleDogNSksCi8vLyAgICAgICAgICBdLAovLy8gICAgICAgICksCi8vLyAgICAgICksCi8vLyAgICApOwovLy8gIH0KLy8vfQovLy8gYGBgCi8vLyB7QGVuZC10b29sfQpjbGFzcyBGb250RmVhdHVyZSB7CiAgLy8vIENyZWF0ZXMgYSBbRm9udEZlYXR1cmVdIG9iamVjdCwgd2hpY2ggY2FuIGJlIGFkZGVkIHRvIGEgW1RleHRTdHlsZV0gdG8KICAvLy8gY2hhbmdlIGhvdyB0aGUgZW5naW5lIHNlbGVjdHMgZ2x5cGhzIHdoZW4gcmVuZGVyaW5nIHRleHQuCiAgLy8vCiAgLy8vIGBmZWF0dXJlYCBpcyB0aGUgZm91ci1jaGFyYWN0ZXIgdGFnIHRoYXQgaWRlbnRpZmllcyB0aGUgZmVhdHVyZS4KICAvLy8gVGhlc2UgdGFncyBhcmUgc3BlY2lmaWVkIGJ5IGZvbnQgZm9ybWF0cyBzdWNoIGFzIE9wZW5UeXBlLgogIC8vLwogIC8vLyBgdmFsdWVgIGlzIHRoZSB2YWx1ZSB0aGF0IHRoZSBmZWF0dXJlIHdpbGwgYmUgc2V0IHRvLiAgVGhlIGJlaGF2aW9yCiAgLy8vIG9mIHRoZSB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpYyBmZWF0dXJlLiAgTWFueSBmZWF0dXJlcyBhcmUKICAvLy8gZmxhZ3Mgd2hvc2UgdmFsdWUgY2FuIGJlIDEgKHdoZW4gZW5hYmxlZCkgb3IgMCAod2hlbiBkaXNhYmxlZCkuCiAgLy8vCiAgLy8vIFNlZSA8aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvdHlwb2dyYXBoeS9vcGVudHlwZS9zcGVjL2ZlYXR1cmV0YWdzPgogIGNvbnN0IEZvbnRGZWF0dXJlKHRoaXMuZmVhdHVyZSwgWyB0aGlzLnZhbHVlID0gMSBdKSA6IGFzc2VydChmZWF0dXJlICE9IG51bGwpLCBhc3NlcnQoZmVhdHVyZS5sZW5ndGggPT0gNCksIGFzc2VydCh2YWx1ZSAhPSBudWxsKSwgYXNzZXJ0KHZhbHVlID49IDApOwoKICAvLy8gQ3JlYXRlIGEgW0ZvbnRGZWF0dXJlXSBvYmplY3QgdGhhdCBlbmFibGVzIHRoZSBmZWF0dXJlIHdpdGggdGhlIGdpdmVuIHRhZy4KICBjb25zdCBGb250RmVhdHVyZS5lbmFibGUoU3RyaW5nIGZlYXR1cmUpIDogdGhpcyhmZWF0dXJlLCAxKTsKCiAgLy8vIENyZWF0ZSBhIFtGb250RmVhdHVyZV0gb2JqZWN0IHRoYXQgZGlzYWJsZXMgdGhlIGZlYXR1cmUgd2l0aCB0aGUgZ2l2ZW4gdGFnLgogIGNvbnN0IEZvbnRGZWF0dXJlLmRpc2FibGUoU3RyaW5nIGZlYXR1cmUpIDogdGhpcyhmZWF0dXJlLCAwKTsKCiAgLy8vIFJhbmRvbWl6ZSB0aGUgYWx0ZXJuYXRlIGZvcm1zIHVzZWQgaW4gdGV4dC4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUsIHRoaXMgY2FuIGJlIHVzZWQgd2l0aCBzdWl0YWJseS1wcmVwYXJlZCBoYW5kd3JpdGluZyBmb250cyB0bwogIC8vLyB2YXJ5IHRoZSBmb3JtcyB1c2VkIGZvciBlYWNoIGNoYXJhY3Rlciwgc28gdGhhdCwgZm9yIGluc3RhbmNlLCB0aGUgd29yZAogIC8vLyAiY3Jvc3Mtc2VjdGlvbiIgd291bGQgYmUgcmVuZGVyZWQgd2l0aCB0d28gZGlmZmVyZW50ICJjInMsIHR3byBkaWZmZXJlbnQgIm8icywKICAvLy8gYW5kIHRocmVlIGRpZmZlcmVudCAicyJzLgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogPGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3R5cG9ncmFwaHkvb3BlbnR5cGUvc3BlYy9mZWF0dXJlc19wdCNyYW5kPgogIGNvbnN0IEZvbnRGZWF0dXJlLnJhbmRvbWl6ZSgpIDogZmVhdHVyZSA9ICdyYW5kJywgdmFsdWUgPSAxOwoKICAvLy8gU2VsZWN0IGEgc3R5bGlzdGljIHNldC4KICAvLy8KICAvLy8gRm9udHMgbWF5IGhhdmUgdXAgdG8gMjAgc3R5bGlzdGljIHNldHMsIG51bWJlcmVkIDEgdGhyb3VnaCAyMC4KICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICAqIDxodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy90eXBvZ3JhcGh5L29wZW50eXBlL3NwZWMvZmVhdHVyZXNfcHQjc3N4eD4KICBmYWN0b3J5IEZvbnRGZWF0dXJlLnN0eWxpc3RpY1NldChpbnQgdmFsdWUpIHsKICAgIGFzc2VydCh2YWx1ZSA+PSAxKTsKICAgIGFzc2VydCh2YWx1ZSA8PSAyMCk7CiAgICByZXR1cm4gRm9udEZlYXR1cmUoJ3NzJHt2YWx1ZS50b1N0cmluZygpLnBhZExlZnQoMiwgIjAiKX0nKTsKICB9CgogIC8vLyBVc2UgdGhlIHNsYXNoZWQgemVyby4KICAvLy8KICAvLy8gU29tZSBmb250cyBjb250YWluIGJvdGggYSBjaXJjdWxhciB6ZXJvIGFuZCBhIHplcm8gd2l0aCBhIHNsYXNoLiBUaGlzCiAgLy8vIGVuYWJsZXMgdGhlIHVzZSBvZiB0aGUgbGF0dGVyIGZvcm0uCiAgLy8vCiAgLy8vIFRoaXMgaXMgb3ZlcnJpZGRlbiBieSBbRm9udEZlYXR1cmUub2xkc3R5bGVGaWd1cmVzXS4KICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICAqIDxodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy90eXBvZ3JhcGh5L29wZW50eXBlL3NwZWMvZmVhdHVyZXNfdXojemVybz4KICBjb25zdCBGb250RmVhdHVyZS5zbGFzaGVkWmVybygpIDogZmVhdHVyZSA9ICd6ZXJvJywgdmFsdWUgPSAxOwoKICAvLy8gVXNlIG9sZHN0eWxlIGZpZ3VyZXMuCiAgLy8vCiAgLy8vIFNvbWUgZm9udHMgaGF2ZSB2YXJpYW50cyBvZiB0aGUgZmlndXJlcyAoZS5nLiB0aGUgZGlnaXQgOSkgdGhhdCwgd2hlbgogIC8vLyB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgcmVuZGVyIHdpdGggZGVzY2VuZGVycyB1bmRlciB0aGUgYmFzZWxpbmUgaW5zdGVhZAogIC8vLyBvZiBiZWluZyBlbnRpcmVseSBhYm92ZSB0aGUgYmFzZWxpbmUuCiAgLy8vCiAgLy8vIFRoaXMgb3ZlcnJpZGVzIFtGb250RmVhdHVyZS5zbGFzaGVkWmVyb10uCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgKiA8aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvdHlwb2dyYXBoeS9vcGVudHlwZS9zcGVjL2ZlYXR1cmVzX2tvI29udW0+CiAgY29uc3QgRm9udEZlYXR1cmUub2xkc3R5bGVGaWd1cmVzKCkgOiBmZWF0dXJlID0gJ29udW0nLCB2YWx1ZSA9IDE7CgogIC8vLyBVc2UgcHJvcG9ydGlvbmFsICh2YXJ5aW5nIHdpZHRoKSBmaWd1cmVzLgogIC8vLwogIC8vLyBGb3IgZm9udHMgdGhhdCBoYXZlIGJvdGggcHJvcG9ydGlvbmFsIGFuZCB0YWJ1bGFyIChtb25vc3BhY2UpIGZpZ3VyZXMsCiAgLy8vIHRoaXMgZW5hYmxlcyB0aGUgcHJvcG9ydGlvbmFsIGZpZ3VyZXMuCiAgLy8vCiAgLy8vIFRoaXMgaXMgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggW0ZvbnRGZWF0dXJlLnRhYnVsYXJGaWd1cmVzXS4KICAvLy8KICAvLy8gVGhlIGRlZmF1bHQgYmVoYXZpb3IgdmFyaWVzIGZyb20gZm9udCB0byBmb250LgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogPGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3R5cG9ncmFwaHkvb3BlbnR5cGUvc3BlYy9mZWF0dXJlc19wdCNwbnVtPgogIGNvbnN0IEZvbnRGZWF0dXJlLnByb3BvcnRpb25hbEZpZ3VyZXMoKSA6IGZlYXR1cmUgPSAncG51bScsIHZhbHVlID0gMTsKCiAgLy8vIFVzZSB0YWJ1bGFyIChtb25vc3BhY2UpIGZpZ3VyZXMuCiAgLy8vCiAgLy8vIEZvciBmb250cyB0aGF0IGhhdmUgYm90aCBwcm9wb3J0aW9uYWwgKHZhcnlpbmcgd2lkdGgpIGFuZCB0YWJ1bGFyIGZpZ3VyZXMsCiAgLy8vIHRoaXMgZW5hYmxlcyB0aGUgdGFidWxhciBmaWd1cmVzLgogIC8vLwogIC8vLyBUaGlzIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIFtGb250RmVhdHVyZS5wcm9wb3J0aW9uYWxGaWd1cmVzXS4KICAvLy8KICAvLy8gVGhlIGRlZmF1bHQgYmVoYXZpb3IgdmFyaWVzIGZyb20gZm9udCB0byBmb250LgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogPGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3R5cG9ncmFwaHkvb3BlbnR5cGUvc3BlYy9mZWF0dXJlc19wdCN0bnVtPgogIGNvbnN0IEZvbnRGZWF0dXJlLnRhYnVsYXJGaWd1cmVzKCkgOiBmZWF0dXJlID0gJ3RudW0nLCB2YWx1ZSA9IDE7CgogIC8vLyBUaGUgdGFnIHRoYXQgaWRlbnRpZmllcyB0aGUgZWZmZWN0IG9mIHRoaXMgZmVhdHVyZS4gIE11c3QgY29uc2lzdCBvZiA0CiAgLy8vIEFTQ0lJIGNoYXJhY3RlcnMgKHR5cGljYWxseSBsb3dlcmNhc2UgbGV0dGVycykuCiAgLy8vCiAgLy8vIFNlZSA8aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvdHlwb2dyYXBoeS9vcGVudHlwZS9zcGVjL2ZlYXR1cmV0YWdzPgogIGZpbmFsIFN0cmluZyBmZWF0dXJlOwoKICAvLy8gVGhlIHZhbHVlIGFzc2lnbmVkIHRvIHRoaXMgZmVhdHVyZS4KICAvLy8KICAvLy8gTXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuICBNYW55IGZlYXR1cmVzIGFyZSBCb29sZWFuIHZhbHVlcyB0aGF0IGFjY2VwdAogIC8vLyB2YWx1ZXMgb2YgZWl0aGVyIDAgKGZlYXR1cmUgaXMgZGlzYWJsZWQpIG9yIDEgKGZlYXR1cmUgaXMgZW5hYmxlZCkuCiAgZmluYWwgaW50IHZhbHVlOwoKICBzdGF0aWMgY29uc3QgaW50IF9rRW5jb2RlZFNpemUgPSA4OwoKICB2b2lkIF9lbmNvZGUoQnl0ZURhdGEgYnl0ZURhdGEpIHsKICAgIGFzc2VydChmZWF0dXJlLmNvZGVVbml0cy5ldmVyeSgoaW50IGMpID0+IGMgPj0gMHgyMCAmJiBjIDw9IDB4N0YpKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAgICAgIGJ5dGVEYXRhLnNldFVpbnQ4KGksIGZlYXR1cmUuY29kZVVuaXRBdChpKSk7CiAgICB9CiAgICBieXRlRGF0YS5zZXRJbnQzMig0LCB2YWx1ZSwgX2tGYWtlSG9zdEVuZGlhbik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KGR5bmFtaWMgb3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlci5ydW50aW1lVHlwZSAhPSBydW50aW1lVHlwZSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIG90aGVyIGlzIEZvbnRGZWF0dXJlCiAgICAgICAgJiYgb3RoZXIuZmVhdHVyZSA9PSBmZWF0dXJlCiAgICAgICAgJiYgb3RoZXIudmFsdWUgPT0gdmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IGhhc2hWYWx1ZXMoZmVhdHVyZSwgdmFsdWUpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnRm9udEZlYXR1cmUoJGZlYXR1cmUsICR2YWx1ZSknOwp9CgovLy8gV2hldGhlciBhbmQgaG93IHRvIGFsaWduIHRleHQgaG9yaXpvbnRhbGx5LgovLyBUaGUgb3JkZXIgb2YgdGhpcyBlbnVtIG11c3QgbWF0Y2ggdGhlIG9yZGVyIG9mIHRoZSB2YWx1ZXMgaW4gUmVuZGVyU3R5bGVDb25zdGFudHMuaCdzIEVUZXh0QWxpZ24uCmVudW0gVGV4dEFsaWduIHsKICAvLy8gQWxpZ24gdGhlIHRleHQgb24gdGhlIGxlZnQgZWRnZSBvZiB0aGUgY29udGFpbmVyLgogIGxlZnQsCgogIC8vLyBBbGlnbiB0aGUgdGV4dCBvbiB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgY29udGFpbmVyLgogIHJpZ2h0LAoKICAvLy8gQWxpZ24gdGhlIHRleHQgaW4gdGhlIGNlbnRlciBvZiB0aGUgY29udGFpbmVyLgogIGNlbnRlciwKCiAgLy8vIFN0cmV0Y2ggbGluZXMgb2YgdGV4dCB0aGF0IGVuZCB3aXRoIGEgc29mdCBsaW5lIGJyZWFrIHRvIGZpbGwgdGhlIHdpZHRoIG9mCiAgLy8vIHRoZSBjb250YWluZXIuCiAgLy8vCiAgLy8vIExpbmVzIHRoYXQgZW5kIHdpdGggaGFyZCBsaW5lIGJyZWFrcyBhcmUgYWxpZ25lZCB0b3dhcmRzIHRoZSBbc3RhcnRdIGVkZ2UuCiAganVzdGlmeSwKCiAgLy8vIEFsaWduIHRoZSB0ZXh0IG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIGNvbnRhaW5lci4KICAvLy8KICAvLy8gRm9yIGxlZnQtdG8tcmlnaHQgdGV4dCAoW1RleHREaXJlY3Rpb24ubHRyXSksIHRoaXMgaXMgdGhlIGxlZnQgZWRnZS4KICAvLy8KICAvLy8gRm9yIHJpZ2h0LXRvLWxlZnQgdGV4dCAoW1RleHREaXJlY3Rpb24ucnRsXSksIHRoaXMgaXMgdGhlIHJpZ2h0IGVkZ2UuCiAgc3RhcnQsCgogIC8vLyBBbGlnbiB0aGUgdGV4dCBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgY29udGFpbmVyLgogIC8vLwogIC8vLyBGb3IgbGVmdC10by1yaWdodCB0ZXh0IChbVGV4dERpcmVjdGlvbi5sdHJdKSwgdGhpcyBpcyB0aGUgcmlnaHQgZWRnZS4KICAvLy8KICAvLy8gRm9yIHJpZ2h0LXRvLWxlZnQgdGV4dCAoW1RleHREaXJlY3Rpb24ucnRsXSksIHRoaXMgaXMgdGhlIGxlZnQgZWRnZS4KICBlbmQsCn0KCi8vLyBBIGhvcml6b250YWwgbGluZSB1c2VkIGZvciBhbGlnbmluZyB0ZXh0LgplbnVtIFRleHRCYXNlbGluZSB7CiAgLy8vIFRoZSBob3Jpem9udGFsIGxpbmUgdXNlZCB0byBhbGlnbiB0aGUgYm90dG9tIG9mIGdseXBocyBmb3IgYWxwaGFiZXRpYyBjaGFyYWN0ZXJzLgogIGFscGhhYmV0aWMsCgogIC8vLyBUaGUgaG9yaXpvbnRhbCBsaW5lIHVzZWQgdG8gYWxpZ24gaWRlb2dyYXBoaWMgY2hhcmFjdGVycy4KICBpZGVvZ3JhcGhpYywKfQoKLy8vIEEgbGluZWFyIGRlY29yYXRpb24gdG8gZHJhdyBuZWFyIHRoZSB0ZXh0LgpjbGFzcyBUZXh0RGVjb3JhdGlvbiB7CiAgY29uc3QgVGV4dERlY29yYXRpb24uXyh0aGlzLl9tYXNrKTsKCiAgLy8vIENyZWF0ZXMgYSBkZWNvcmF0aW9uIHRoYXQgcGFpbnRzIHRoZSB1bmlvbiBvZiBhbGwgdGhlIGdpdmVuIGRlY29yYXRpb25zLgogIGZhY3RvcnkgVGV4dERlY29yYXRpb24uY29tYmluZShMaXN0PFRleHREZWNvcmF0aW9uPiBkZWNvcmF0aW9ucykgewogICAgaW50IG1hc2sgPSAwOwogICAgZm9yIChUZXh0RGVjb3JhdGlvbiBkZWNvcmF0aW9uIGluIGRlY29yYXRpb25zKQogICAgICBtYXNrIHw9IGRlY29yYXRpb24uX21hc2s7CiAgICByZXR1cm4gVGV4dERlY29yYXRpb24uXyhtYXNrKTsKICB9CgogIGZpbmFsIGludCBfbWFzazsKCiAgLy8vIFdoZXRoZXIgdGhpcyBkZWNvcmF0aW9uIHdpbGwgcGFpbnQgYXQgbGVhc3QgYXMgbXVjaCBkZWNvcmF0aW9uIGFzIHRoZSBnaXZlbiBkZWNvcmF0aW9uLgogIGJvb2wgY29udGFpbnMoVGV4dERlY29yYXRpb24gb3RoZXIpIHsKICAgIHJldHVybiAoX21hc2sgfCBvdGhlci5fbWFzaykgPT0gX21hc2s7CiAgfQoKICAvLy8gRG8gbm90IGRyYXcgYSBkZWNvcmF0aW9uCiAgc3RhdGljIGNvbnN0IFRleHREZWNvcmF0aW9uIG5vbmUgPSBUZXh0RGVjb3JhdGlvbi5fKDB4MCk7CgogIC8vLyBEcmF3IGEgbGluZSB1bmRlcm5lYXRoIGVhY2ggbGluZSBvZiB0ZXh0CiAgc3RhdGljIGNvbnN0IFRleHREZWNvcmF0aW9uIHVuZGVybGluZSA9IFRleHREZWNvcmF0aW9uLl8oMHgxKTsKCiAgLy8vIERyYXcgYSBsaW5lIGFib3ZlIGVhY2ggbGluZSBvZiB0ZXh0CiAgc3RhdGljIGNvbnN0IFRleHREZWNvcmF0aW9uIG92ZXJsaW5lID0gVGV4dERlY29yYXRpb24uXygweDIpOwoKICAvLy8gRHJhdyBhIGxpbmUgdGhyb3VnaCBlYWNoIGxpbmUgb2YgdGV4dAogIHN0YXRpYyBjb25zdCBUZXh0RGVjb3JhdGlvbiBsaW5lVGhyb3VnaCA9IFRleHREZWNvcmF0aW9uLl8oMHg0KTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShkeW5hbWljIG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgVGV4dERlY29yYXRpb24KICAgICAgICAmJiBvdGhlci5fbWFzayA9PSBfbWFzazsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gX21hc2suaGFzaENvZGU7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmIChfbWFzayA9PSAwKQogICAgICByZXR1cm4gJ1RleHREZWNvcmF0aW9uLm5vbmUnOwogICAgZmluYWwgTGlzdDxTdHJpbmc+IHZhbHVlcyA9IDxTdHJpbmc+W107CiAgICBpZiAoX21hc2sgJiB1bmRlcmxpbmUuX21hc2sgIT0gMCkKICAgICAgdmFsdWVzLmFkZCgndW5kZXJsaW5lJyk7CiAgICBpZiAoX21hc2sgJiBvdmVybGluZS5fbWFzayAhPSAwKQogICAgICB2YWx1ZXMuYWRkKCdvdmVybGluZScpOwogICAgaWYgKF9tYXNrICYgbGluZVRocm91Z2guX21hc2sgIT0gMCkKICAgICAgdmFsdWVzLmFkZCgnbGluZVRocm91Z2gnKTsKICAgIGlmICh2YWx1ZXMubGVuZ3RoID09IDEpCiAgICAgIHJldHVybiAnVGV4dERlY29yYXRpb24uJHt2YWx1ZXNbMF19JzsKICAgIHJldHVybiAnVGV4dERlY29yYXRpb24uY29tYmluZShbJHt2YWx1ZXMuam9pbigiLCAiKX1dKSc7CiAgfQp9CgovLy8gVGhlIHN0eWxlIGluIHdoaWNoIHRvIGRyYXcgYSB0ZXh0IGRlY29yYXRpb24KZW51bSBUZXh0RGVjb3JhdGlvblN0eWxlIHsKICAvLy8gRHJhdyBhIHNvbGlkIGxpbmUKICBzb2xpZCwKCiAgLy8vIERyYXcgdHdvIGxpbmVzCiAgZG91YmxlLAoKICAvLy8gRHJhdyBhIGRvdHRlZCBsaW5lCiAgZG90dGVkLAoKICAvLy8gRHJhdyBhIGRhc2hlZCBsaW5lCiAgZGFzaGVkLAoKICAvLy8gRHJhdyBhIHNpbnVzb2lkYWwgbGluZQogIHdhdnkKfQoKLy8vIHtAdGVtcGxhdGUgZmx1dHRlci5kYXJ0OnVpLnRleHRIZWlnaHRCZWhhdmlvcn0KLy8vIERlZmluZXMgaG93IHRoZSBwYXJhZ3JhcGggd2lsbCBhcHBseSBbVGV4dFN0eWxlLmhlaWdodF0gdG8gdGhlIGFzY2VudCBvZiB0aGUKLy8vIGZpcnN0IGxpbmUgYW5kIGRlc2NlbnQgb2YgdGhlIGxhc3QgbGluZS4KLy8vCi8vLyBFYWNoIGJvb2xlYW4gdmFsdWUgcmVwcmVzZW50cyB3aGV0aGVyIHRoZSBbVGV4dFN0eWxlLmhlaWdodF0gbW9kaWZpZXIgd2lsbAovLy8gYmUgYXBwbGllZCB0byB0aGUgY29ycmVzcG9uZGluZyBtZXRyaWMuIEJ5IGRlZmF1bHQsIGFsbCBwcm9wZXJ0aWVzIGFyZSB0cnVlLAovLy8gYW5kIFtUZXh0U3R5bGUuaGVpZ2h0XSBpcyBhcHBsaWVkIGFzIG5vcm1hbC4gV2hlbiBzZXQgdG8gZmFsc2UsIHRoZSBmb250J3MKLy8vIGRlZmF1bHQgYXNjZW50IHdpbGwgYmUgdXNlZC4KLy8vIHtAZW5kdGVtcGxhdGV9CmNsYXNzIFRleHRIZWlnaHRCZWhhdmlvciB7CgogIC8vLyBDcmVhdGVzIGEgbmV3IFRleHRIZWlnaHRCZWhhdmlvciBvYmplY3QuCiAgLy8vCiAgLy8vICAqIGFwcGx5SGVpZ2h0VG9GaXJzdEFzY2VudDogV2hlbiB0cnVlLCB0aGUgW1RleHRTdHlsZS5oZWlnaHRdIG1vZGlmaWVyCiAgLy8vICAgIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgYXNjZW50IG9mIHRoZSBmaXJzdCBsaW5lLiBXaGVuIGZhbHNlLCB0aGUgZm9udCdzCiAgLy8vICAgIGRlZmF1bHQgYXNjZW50IHdpbGwgYmUgdXNlZC4KICAvLy8gICogYXBwbHlIZWlnaHRUb0xhc3REZXNjZW50OiBXaGVuIHRydWUsIHRoZSBbVGV4dFN0eWxlLmhlaWdodF0gbW9kaWZpZXIKICAvLy8gICAgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBkZXNjZW50IG9mIHRoZSBsYXN0IGxpbmUuIFdoZW4gZmFsc2UsIHRoZSBmb250J3MKICAvLy8gICAgZGVmYXVsdCBkZXNjZW50IHdpbGwgYmUgdXNlZC4KICAvLy8KICAvLy8gQWxsIHByb3BlcnRpZXMgZGVmYXVsdCB0byB0cnVlIChoZWlnaHQgbW9kaWZpY2F0aW9ucyBhcHBsaWVkIGFzIG5vcm1hbCkuCiAgY29uc3QgVGV4dEhlaWdodEJlaGF2aW9yKHsKICAgIHRoaXMuYXBwbHlIZWlnaHRUb0ZpcnN0QXNjZW50ID0gdHJ1ZSwKICAgIHRoaXMuYXBwbHlIZWlnaHRUb0xhc3REZXNjZW50ID0gdHJ1ZSwKICB9KTsKCiAgLy8vIENyZWF0ZXMgYSBuZXcgVGV4dEhlaWdodEJlaGF2aW9yIG9iamVjdCBmcm9tIGFuIGVuY29kZWQgZm9ybS4KICAvLy8KICAvLy8gU2VlIFtlbmNvZGVdIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIGVuY29kZWQgZm9ybS4KICBjb25zdCBUZXh0SGVpZ2h0QmVoYXZpb3IuZnJvbUVuY29kZWQoaW50IGVuY29kZWQpIDogYXBwbHlIZWlnaHRUb0ZpcnN0QXNjZW50ID0gKGVuY29kZWQgJiAweDEpID09IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGx5SGVpZ2h0VG9MYXN0RGVzY2VudCA9IChlbmNvZGVkICYgMHgyKSA9PSAwOwoKCiAgLy8vIFdoZXRoZXIgdG8gYXBwbHkgdGhlIFtUZXh0U3R5bGUuaGVpZ2h0XSBtb2RpZmllciB0byB0aGUgYXNjZW50IG9mIHRoZSBmaXJzdAogIC8vLyBsaW5lIGluIHRoZSBwYXJhZ3JhcGguCiAgLy8vCiAgLy8vIFdoZW4gdHJ1ZSwgdGhlIFtUZXh0U3R5bGUuaGVpZ2h0XSBtb2RpZmllciB3aWxsIGJlIGFwcGxpZWQgdG8gdG8gdGhlIGFzY2VudAogIC8vLyBvZiB0aGUgZmlyc3QgbGluZS4gV2hlbiBmYWxzZSwgdGhlIGZvbnQncyBkZWZhdWx0IGFzY2VudCB3aWxsIGJlIHVzZWQgYW5kCiAgLy8vIHRoZSBbVGV4dFN0eWxlLmhlaWdodF0gd2lsbCBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgYXNjZW50IG9mIHRoZSBmaXJzdCBsaW5lLgogIC8vLwogIC8vLyBUaGlzIHByb3BlcnR5IG9ubHkgaGFzIGVmZmVjdCBpZiBhIG5vbi1udWxsIFtUZXh0U3R5bGUuaGVpZ2h0XSBpcyBzcGVjaWZpZWQuCiAgLy8vCiAgLy8vIERlZmF1bHRzIHRvIHRydWUgKGhlaWdodCBtb2RpZmljYXRpb25zIGFwcGxpZWQgYXMgbm9ybWFsKS4KICBmaW5hbCBib29sIGFwcGx5SGVpZ2h0VG9GaXJzdEFzY2VudDsKCiAgLy8vIFdoZXRoZXIgdG8gYXBwbHkgdGhlIFtUZXh0U3R5bGUuaGVpZ2h0XSBtb2RpZmllciB0byB0aGUgZGVzY2VudCBvZiB0aGUgbGFzdAogIC8vLyBsaW5lIGluIHRoZSBwYXJhZ3JhcGguCiAgLy8vCiAgLy8vIFdoZW4gdHJ1ZSwgdGhlIFtUZXh0U3R5bGUuaGVpZ2h0XSBtb2RpZmllciB3aWxsIGJlIGFwcGxpZWQgdG8gdG8gdGhlIGRlc2NlbnQKICAvLy8gb2YgdGhlIGxhc3QgbGluZS4gV2hlbiBmYWxzZSwgdGhlIGZvbnQncyBkZWZhdWx0IGRlc2NlbnQgd2lsbCBiZSB1c2VkIGFuZAogIC8vLyB0aGUgW1RleHRTdHlsZS5oZWlnaHRdIHdpbGwgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIGRlc2NlbnQgb2YgdGhlIGxhc3QgbGluZS4KICAvLy8KICAvLy8gVGhpcyBwcm9wZXJ0eSBvbmx5IGhhcyBlZmZlY3QgaWYgYSBub24tbnVsbCBbVGV4dFN0eWxlLmhlaWdodF0gaXMgc3BlY2lmaWVkLgogIC8vLwogIC8vLyBEZWZhdWx0cyB0byB0cnVlIChoZWlnaHQgbW9kaWZpY2F0aW9ucyBhcHBsaWVkIGFzIG5vcm1hbCkuCiAgZmluYWwgYm9vbCBhcHBseUhlaWdodFRvTGFzdERlc2NlbnQ7CgogIC8vLyBSZXR1cm5zIGFuIGVuY29kZWQgaW50IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgogIGludCBlbmNvZGUoKSB7CiAgICByZXR1cm4gKGFwcGx5SGVpZ2h0VG9GaXJzdEFzY2VudCA/IDAgOiAxIDw8IDApIHwgKGFwcGx5SGVpZ2h0VG9MYXN0RGVzY2VudCA/IDAgOiAxIDw8IDEpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShkeW5hbWljIG90aGVyKSB7CiAgICBpZiAob3RoZXIucnVudGltZVR5cGUgIT0gcnVudGltZVR5cGUpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBvdGhlciBpcyBUZXh0SGVpZ2h0QmVoYXZpb3IKICAgICAgICAmJiBvdGhlci5hcHBseUhlaWdodFRvRmlyc3RBc2NlbnQgPT0gYXBwbHlIZWlnaHRUb0ZpcnN0QXNjZW50CiAgICAgICAgJiYgb3RoZXIuYXBwbHlIZWlnaHRUb0xhc3REZXNjZW50ID09IGFwcGx5SGVpZ2h0VG9MYXN0RGVzY2VudDsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIGhhc2hWYWx1ZXMoCiAgICAgIGFwcGx5SGVpZ2h0VG9GaXJzdEFzY2VudCwKICAgICAgYXBwbHlIZWlnaHRUb0xhc3REZXNjZW50LAogICAgKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnVGV4dEhlaWdodEJlaGF2aW9yKCcKICAgICAgICAgICAgICdhcHBseUhlaWdodFRvRmlyc3RBc2NlbnQ6ICRhcHBseUhlaWdodFRvRmlyc3RBc2NlbnQsICcKICAgICAgICAgICAgICdhcHBseUhlaWdodFRvTGFzdERlc2NlbnQ6ICRhcHBseUhlaWdodFRvTGFzdERlc2NlbnQnCiAgICAgICAgICAgJyknOwogIH0KfQoKLy8vIERldGVybWluZXMgaWYgbGlzdHMgW2FdIGFuZCBbYl0gYXJlIGRlZXAgZXF1aXZhbGVudC4KLy8vCi8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGxpc3RzIGFyZSBib3RoIG51bGwsIG9yIGlmIHRoZXkgYXJlIGJvdGggbm9uLW51bGwsIGhhdmUKLy8vIHRoZSBzYW1lIGxlbmd0aCwgYW5kIGNvbnRhaW4gdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgb3JkZXIuIFJldHVybnMKLy8vIGZhbHNlIG90aGVyd2lzZS4KYm9vbCBfbGlzdEVxdWFsczxUPihMaXN0PFQ+IGEsIExpc3Q8VD4gYikgewogIGlmIChhID09IG51bGwpCiAgICByZXR1cm4gYiA9PSBudWxsOwogIGlmIChiID09IG51bGwgfHwgYS5sZW5ndGggIT0gYi5sZW5ndGgpCiAgICByZXR1cm4gZmFsc2U7CiAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGEubGVuZ3RoOyBpbmRleCArPSAxKSB7CiAgICBpZiAoYVtpbmRleF0gIT0gYltpbmRleF0pCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIHRydWU7Cn0KCi8vIFRoaXMgZW5jb2RpbmcgbXVzdCBtYXRjaCB0aGUgQysrIHZlcnNpb24gb2YgUGFyYWdyYXBoQnVpbGRlcjo6cHVzaFN0eWxlLgovLwovLyBUaGUgZW5jb2RlZCBhcnJheSBidWZmZXIgaGFzIDggZWxlbWVudHMuCi8vCi8vICAtIEVsZW1lbnQgMDogQSBiaXQgZmllbGQgd2hlcmUgdGhlIGl0aCBiaXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGl0aCBlbGVtZW50Ci8vICAgIGhhcyBhIG5vbi1udWxsIHZhbHVlLiBCaXRzIDggdG8gMTIgaW5kaWNhdGUgd2hldGhlciB8Zm9udEZhbWlseXwsCi8vICAgIHxmb250U2l6ZXwsIHxsZXR0ZXJTcGFjaW5nfCwgfHdvcmRTcGFjaW5nfCwgYW5kIHxoZWlnaHR8IGFyZSBub24tbnVsbCwKLy8gICAgcmVzcGVjdGl2ZWx5LiBCaXQgMCBpcyB1bnVzZWQuCi8vCi8vICAtIEVsZW1lbnQgMTogVGhlIHxjb2xvcnwgaW4gQVJHQiB3aXRoIDggYml0cyBwZXIgY2hhbm5lbC4KLy8KLy8gIC0gRWxlbWVudCAyOiBBIGJpdCBmaWVsZCBpbmRpY2F0aW5nIHdoaWNoIHRleHQgZGVjb3JhdGlvbnMgYXJlIHByZXNlbnQgaW4KLy8gICAgdGhlIHx0ZXh0RGVjb3JhdGlvbnwgbGlzdC4gVGhlIGl0aCBiaXQgaXMgc2V0IGlmIHRoZXJlJ3MgYSBUZXh0RGVjb3JhdGlvbgovLyAgICB3aXRoIGVudW0gaW5kZXggaSBpbiB0aGUgbGlzdC4KLy8KLy8gIC0gRWxlbWVudCAzOiBUaGUgfGRlY29yYXRpb25Db2xvcnwgaW4gQVJHQiB3aXRoIDggYml0cyBwZXIgY2hhbm5lbC4KLy8KLy8gIC0gRWxlbWVudCA0OiBUaGUgYml0IGZpZWxkIG9mIHRoZSB8ZGVjb3JhdGlvblN0eWxlfC4KLy8KLy8gIC0gRWxlbWVudCA1OiBUaGUgaW5kZXggb2YgdGhlIHxmb250V2VpZ2h0fC4KLy8KLy8gIC0gRWxlbWVudCA2OiBUaGUgZW51bSBpbmRleCBvZiB0aGUgfGZvbnRTdHlsZXwuCi8vCi8vICAtIEVsZW1lbnQgNzogVGhlIGVudW0gaW5kZXggb2YgdGhlIHx0ZXh0QmFzZWxpbmV8LgovLwpJbnQzMkxpc3QgX2VuY29kZVRleHRTdHlsZSgKICBDb2xvciBjb2xvciwKICBUZXh0RGVjb3JhdGlvbiBkZWNvcmF0aW9uLAogIENvbG9yIGRlY29yYXRpb25Db2xvciwKICBUZXh0RGVjb3JhdGlvblN0eWxlIGRlY29yYXRpb25TdHlsZSwKICBkb3VibGUgZGVjb3JhdGlvblRoaWNrbmVzcywKICBGb250V2VpZ2h0IGZvbnRXZWlnaHQsCiAgRm9udFN0eWxlIGZvbnRTdHlsZSwKICBUZXh0QmFzZWxpbmUgdGV4dEJhc2VsaW5lLAogIFN0cmluZyBmb250RmFtaWx5LAogIExpc3Q8U3RyaW5nPiBmb250RmFtaWx5RmFsbGJhY2ssCiAgZG91YmxlIGZvbnRTaXplLAogIGRvdWJsZSBsZXR0ZXJTcGFjaW5nLAogIGRvdWJsZSB3b3JkU3BhY2luZywKICBkb3VibGUgaGVpZ2h0LAogIExvY2FsZSBsb2NhbGUsCiAgUGFpbnQgYmFja2dyb3VuZCwKICBQYWludCBmb3JlZ3JvdW5kLAogIExpc3Q8U2hhZG93PiBzaGFkb3dzLAogIExpc3Q8Rm9udEZlYXR1cmU+IGZvbnRGZWF0dXJlcywKKSB7CiAgZmluYWwgSW50MzJMaXN0IHJlc3VsdCA9IEludDMyTGlzdCg4KTsKICBpZiAoY29sb3IgIT0gbnVsbCkgewogICAgcmVzdWx0WzBdIHw9IDEgPDwgMTsKICAgIHJlc3VsdFsxXSA9IGNvbG9yLnZhbHVlOwogIH0KICBpZiAoZGVjb3JhdGlvbiAhPSBudWxsKSB7CiAgICByZXN1bHRbMF0gfD0gMSA8PCAyOwogICAgcmVzdWx0WzJdID0gZGVjb3JhdGlvbi5fbWFzazsKICB9CiAgaWYgKGRlY29yYXRpb25Db2xvciAhPSBudWxsKSB7CiAgICByZXN1bHRbMF0gfD0gMSA8PCAzOwogICAgcmVzdWx0WzNdID0gZGVjb3JhdGlvbkNvbG9yLnZhbHVlOwogIH0KICBpZiAoZGVjb3JhdGlvblN0eWxlICE9IG51bGwpIHsKICAgIHJlc3VsdFswXSB8PSAxIDw8IDQ7CiAgICByZXN1bHRbNF0gPSBkZWNvcmF0aW9uU3R5bGUuaW5kZXg7CiAgfQogIGlmIChmb250V2VpZ2h0ICE9IG51bGwpIHsKICAgIHJlc3VsdFswXSB8PSAxIDw8IDU7CiAgICByZXN1bHRbNV0gPSBmb250V2VpZ2h0LmluZGV4OwogIH0KICBpZiAoZm9udFN0eWxlICE9IG51bGwpIHsKICAgIHJlc3VsdFswXSB8PSAxIDw8IDY7CiAgICByZXN1bHRbNl0gPSBmb250U3R5bGUuaW5kZXg7CiAgfQogIGlmICh0ZXh0QmFzZWxpbmUgIT0gbnVsbCkgewogICAgcmVzdWx0WzBdIHw9IDEgPDwgNzsKICAgIHJlc3VsdFs3XSA9IHRleHRCYXNlbGluZS5pbmRleDsKICB9CiAgaWYgKGRlY29yYXRpb25UaGlja25lc3MgIT0gbnVsbCkgewogICAgcmVzdWx0WzBdIHw9IDEgPDwgODsKICB9CiAgaWYgKGZvbnRGYW1pbHkgIT0gbnVsbCB8fCAoZm9udEZhbWlseUZhbGxiYWNrICE9IG51bGwgJiYgZm9udEZhbWlseUZhbGxiYWNrLmlzTm90RW1wdHkpKSB7CiAgICByZXN1bHRbMF0gfD0gMSA8PCA5OwogICAgLy8gUGFzc2VkIHNlcGFyYXRlbHkgdG8gbmF0aXZlLgogIH0KICBpZiAoZm9udFNpemUgIT0gbnVsbCkgewogICAgcmVzdWx0WzBdIHw9IDEgPDwgMTA7CiAgICAvLyBQYXNzZWQgc2VwYXJhdGVseSB0byBuYXRpdmUuCiAgfQogIGlmIChsZXR0ZXJTcGFjaW5nICE9IG51bGwpIHsKICAgIHJlc3VsdFswXSB8PSAxIDw8IDExOwogICAgLy8gUGFzc2VkIHNlcGFyYXRlbHkgdG8gbmF0aXZlLgogIH0KICBpZiAod29yZFNwYWNpbmcgIT0gbnVsbCkgewogICAgcmVzdWx0WzBdIHw9IDEgPDwgMTI7CiAgICAvLyBQYXNzZWQgc2VwYXJhdGVseSB0byBuYXRpdmUuCiAgfQogIGlmIChoZWlnaHQgIT0gbnVsbCkgewogICAgcmVzdWx0WzBdIHw9IDEgPDwgMTM7CiAgICAvLyBQYXNzZWQgc2VwYXJhdGVseSB0byBuYXRpdmUuCiAgfQogIGlmIChsb2NhbGUgIT0gbnVsbCkgewogICAgcmVzdWx0WzBdIHw9IDEgPDwgMTQ7CiAgICAvLyBQYXNzZWQgc2VwYXJhdGVseSB0byBuYXRpdmUuCiAgfQogIGlmIChiYWNrZ3JvdW5kICE9IG51bGwpIHsKICAgIHJlc3VsdFswXSB8PSAxIDw8IDE1OwogICAgLy8gUGFzc2VkIHNlcGFyYXRlbHkgdG8gbmF0aXZlLgogIH0KICBpZiAoZm9yZWdyb3VuZCAhPSBudWxsKSB7CiAgICByZXN1bHRbMF0gfD0gMSA8PCAxNjsKICAgIC8vIFBhc3NlZCBzZXBhcmF0ZWx5IHRvIG5hdGl2ZS4KICB9CiAgaWYgKHNoYWRvd3MgIT0gbnVsbCkgewogICAgcmVzdWx0WzBdIHw9IDEgPDwgMTc7CiAgICAvLyBQYXNzZWQgc2VwYXJhdGVseSB0byBuYXRpdmUuCiAgfQogIGlmIChmb250RmVhdHVyZXMgIT0gbnVsbCkgewogICAgcmVzdWx0WzBdIHw9IDEgPDwgMTg7CiAgICAvLyBQYXNzZWQgc2VwYXJhdGVseSB0byBuYXRpdmUuCiAgfQogIHJldHVybiByZXN1bHQ7Cn0KCi8vLyBBbiBvcGFxdWUgb2JqZWN0IHRoYXQgZGV0ZXJtaW5lcyB0aGUgc2l6ZSwgcG9zaXRpb24sIGFuZCByZW5kZXJpbmcgb2YgdGV4dC4KLy8vCi8vLyBTZWUgYWxzbzoKLy8vCi8vLyAgKiBbVGV4dFN0eWxlXShodHRwczovL2FwaS5mbHV0dGVyLmRldi9mbHV0dGVyL3BhaW50aW5nL1RleHRTdHlsZS1jbGFzcy5odG1sKSwgdGhlIGNsYXNzIGluIHRoZSBbcGFpbnRpbmddIGxpYnJhcnkuCi8vLwpjbGFzcyBUZXh0U3R5bGUgewogIC8vLyBDcmVhdGVzIGEgbmV3IFRleHRTdHlsZSBvYmplY3QuCiAgLy8vCiAgLy8vICogYGNvbG9yYDogVGhlIGNvbG9yIHRvIHVzZSB3aGVuIHBhaW50aW5nIHRoZSB0ZXh0LiBJZiB0aGlzIGlzIHNwZWNpZmllZCwgYGZvcmVncm91bmRgIG11c3QgYmUgbnVsbC4KICAvLy8gKiBgZGVjb3JhdGlvbmA6IFRoZSBkZWNvcmF0aW9ucyB0byBwYWludCBuZWFyIHRoZSB0ZXh0IChlLmcuLCBhbiB1bmRlcmxpbmUpLgogIC8vLyAqIGBkZWNvcmF0aW9uQ29sb3JgOiBUaGUgY29sb3IgaW4gd2hpY2ggdG8gcGFpbnQgdGhlIHRleHQgZGVjb3JhdGlvbnMuCiAgLy8vICogYGRlY29yYXRpb25TdHlsZWA6IFRoZSBzdHlsZSBpbiB3aGljaCB0byBwYWludCB0aGUgdGV4dCBkZWNvcmF0aW9ucyAoZS5nLiwgZGFzaGVkKS4KICAvLy8gKiBgZGVjb3JhdGlvblRoaWNrbmVzc2A6IFRoZSB0aGlja25lc3Mgb2YgdGhlIGRlY29yYXRpb24gYXMgYSBtdWxpcGxpZXIgb24gdGhlIHRoaWNrbmVzcyBzcGVjaWZpZWQgYnkgdGhlIGZvbnQuCiAgLy8vICogYGZvbnRXZWlnaHRgOiBUaGUgdHlwZWZhY2UgdGhpY2tuZXNzIHRvIHVzZSB3aGVuIHBhaW50aW5nIHRoZSB0ZXh0IChlLmcuLCBib2xkKS4KICAvLy8gKiBgZm9udFN0eWxlYDogVGhlIHR5cGVmYWNlIHZhcmlhbnQgdG8gdXNlIHdoZW4gZHJhd2luZyB0aGUgbGV0dGVycyAoZS5nLiwgaXRhbGljcykuCiAgLy8vICogYGZvbnRGYW1pbHlgOiBUaGUgbmFtZSBvZiB0aGUgZm9udCB0byB1c2Ugd2hlbiBwYWludGluZyB0aGUgdGV4dCAoZS5nLiwgUm9ib3RvKS4gSWYgYSBgZm9udEZhbWlseUZhbGxiYWNrYCBpcwogIC8vLyAgIHByb3ZpZGVkIGFuZCBgZm9udEZhbWlseWAgaXMgbm90LCB0aGVuIHRoZSBmaXJzdCBmb250IGZhbWlseSBpbiBgZm9udEZhbWlseUZhbGxiYWNrYCB3aWxsIHRha2UgdGhlIHBvc2l0aW9uIG9mCiAgLy8vICAgdGhlIHByZWZlcnJlZCBmb250IGZhbWlseS4gV2hlbiBhIGhpZ2hlciBwcmlvcml0eSBmb250IGNhbm5vdCBiZSBmb3VuZCBvciBkb2VzIG5vdCBjb250YWluIGEgZ2x5cGgsIGEgbG93ZXIKICAvLy8gICBwcmlvcml0eSBmb250IHdpbGwgYmUgdXNlZC4KICAvLy8gKiBgZm9udEZhbWlseUZhbGxiYWNrYDogQW4gb3JkZXJlZCBsaXN0IG9mIHRoZSBuYW1lcyBvZiB0aGUgZm9udHMgdG8gZmFsbGJhY2sgb24gd2hlbiBhIGdseXBoIGNhbm5vdAogIC8vLyAgIGJlIGZvdW5kIGluIGEgaGlnaGVyIHByaW9yaXR5IGZvbnQuIFdoZW4gdGhlIGBmb250RmFtaWx5YCBpcyBudWxsLCB0aGUgZmlyc3QgZm9udCBmYW1pbHkgaW4gdGhpcyBsaXN0CiAgLy8vICAgaXMgdXNlZCBhcyB0aGUgcHJlZmVycmVkIGZvbnQuIEludGVybmFsbHksIHRoZSAnZm9udEZhbWlseWAgaXMgY29uY2F0ZW5hdGVkIHRvIHRoZSBmcm9udCBvZiB0aGlzIGxpc3QuCiAgLy8vICAgV2hlbiBubyBmb250IGZhbWlseSBpcyBwcm92aWRlZCB0aHJvdWdoICdmb250RmFtaWx5RmFsbGJhY2snIChudWxsIG9yIGVtcHR5KSBvciBgZm9udEZhbWlseWAsIHRoZW4gdGhlCiAgLy8vICAgcGxhdGZvcm0gZGVmYXVsdCBmb250IHdpbGwgYmUgdXNlZC4KICAvLy8gKiBgZm9udFNpemVgOiBUaGUgc2l6ZSBvZiBnbHlwaHMgKGluIGxvZ2ljYWwgcGl4ZWxzKSB0byB1c2Ugd2hlbiBwYWludGluZyB0aGUgdGV4dC4KICAvLy8gKiBgbGV0dGVyU3BhY2luZ2A6IFRoZSBhbW91bnQgb2Ygc3BhY2UgKGluIGxvZ2ljYWwgcGl4ZWxzKSB0byBhZGQgYmV0d2VlbiBlYWNoIGxldHRlci4KICAvLy8gKiBgd29yZFNwYWNpbmdgOiBUaGUgYW1vdW50IG9mIHNwYWNlIChpbiBsb2dpY2FsIHBpeGVscykgdG8gYWRkIGF0IGVhY2ggc2VxdWVuY2Ugb2Ygd2hpdGUtc3BhY2UgKGkuZS4gYmV0d2VlbiBlYWNoIHdvcmQpLgogIC8vLyAqIGB0ZXh0QmFzZWxpbmVgOiBUaGUgY29tbW9uIGJhc2VsaW5lIHRoYXQgc2hvdWxkIGJlIGFsaWduZWQgYmV0d2VlbiB0aGlzIHRleHQgc3BhbiBhbmQgaXRzIHBhcmVudCB0ZXh0IHNwYW4sIG9yLCBmb3IgdGhlIHJvb3QgdGV4dCBzcGFucywgd2l0aCB0aGUgbGluZSBib3guCiAgLy8vICogYGhlaWdodGA6IFRoZSBoZWlnaHQgb2YgdGhpcyB0ZXh0IHNwYW4sIGFzIGEgbXVsdGlwbGllciBvZiB0aGUgZm9udCBzaXplLiBPbWl0dGluZyBgaGVpZ2h0YCB3aWxsIGFsbG93IHRoZSBsaW5lIGhlaWdodAogIC8vLyAgIHRvIHRha2UgdGhlIGhlaWdodCBhcyBkZWZpbmVkIGJ5IHRoZSBmb250LCB3aGljaCBtYXkgbm90IGJlIGV4YWN0bHkgdGhlIGhlaWdodCBvZiB0aGUgZm9udFNpemUuCiAgLy8vICogYGxvY2FsZWA6IFRoZSBsb2NhbGUgdXNlZCB0byBzZWxlY3QgcmVnaW9uLXNwZWNpZmljIGdseXBocy4KICAvLy8gKiBgYmFja2dyb3VuZGA6IFRoZSBwYWludCBkcmF3biBhcyBhIGJhY2tncm91bmQgZm9yIHRoZSB0ZXh0LgogIC8vLyAqIGBmb3JlZ3JvdW5kYDogVGhlIHBhaW50IHVzZWQgdG8gZHJhdyB0aGUgdGV4dC4gSWYgdGhpcyBpcyBzcGVjaWZpZWQsIGBjb2xvcmAgbXVzdCBiZSBudWxsLgogIC8vLyAqIGBmb250RmVhdHVyZXNgOiBUaGUgZm9udCBmZWF0dXJlcyB0aGF0IHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoZSB0ZXh0LgogIFRleHRTdHlsZSh7CiAgICBDb2xvciBjb2xvciwKICAgIFRleHREZWNvcmF0aW9uIGRlY29yYXRpb24sCiAgICBDb2xvciBkZWNvcmF0aW9uQ29sb3IsCiAgICBUZXh0RGVjb3JhdGlvblN0eWxlIGRlY29yYXRpb25TdHlsZSwKICAgIGRvdWJsZSBkZWNvcmF0aW9uVGhpY2tuZXNzLAogICAgRm9udFdlaWdodCBmb250V2VpZ2h0LAogICAgRm9udFN0eWxlIGZvbnRTdHlsZSwKICAgIFRleHRCYXNlbGluZSB0ZXh0QmFzZWxpbmUsCiAgICBTdHJpbmcgZm9udEZhbWlseSwKICAgIExpc3Q8U3RyaW5nPiBmb250RmFtaWx5RmFsbGJhY2ssCiAgICBkb3VibGUgZm9udFNpemUsCiAgICBkb3VibGUgbGV0dGVyU3BhY2luZywKICAgIGRvdWJsZSB3b3JkU3BhY2luZywKICAgIGRvdWJsZSBoZWlnaHQsCiAgICBMb2NhbGUgbG9jYWxlLAogICAgUGFpbnQgYmFja2dyb3VuZCwKICAgIFBhaW50IGZvcmVncm91bmQsCiAgICBMaXN0PFNoYWRvdz4gc2hhZG93cywKICAgIExpc3Q8Rm9udEZlYXR1cmU+IGZvbnRGZWF0dXJlcywKICB9KSA6IGFzc2VydChjb2xvciA9PSBudWxsIHx8IGZvcmVncm91bmQgPT0gbnVsbCwKICAgICAgICAgJ0Nhbm5vdCBwcm92aWRlIGJvdGggYSBjb2xvciBhbmQgYSBmb3JlZ3JvdW5kXG4nCiAgICAgICAgICdUaGUgY29sb3IgYXJndW1lbnQgaXMganVzdCBhIHNob3J0aGFuZCBmb3IgImZvcmVncm91bmQ6IFBhaW50KCkuLmNvbG9yID0gY29sb3IiLicKICAgICAgICksCiAgICAgICBfZW5jb2RlZCA9IF9lbmNvZGVUZXh0U3R5bGUoCiAgICAgICAgIGNvbG9yLAogICAgICAgICBkZWNvcmF0aW9uLAogICAgICAgICBkZWNvcmF0aW9uQ29sb3IsCiAgICAgICAgIGRlY29yYXRpb25TdHlsZSwKICAgICAgICAgZGVjb3JhdGlvblRoaWNrbmVzcywKICAgICAgICAgZm9udFdlaWdodCwKICAgICAgICAgZm9udFN0eWxlLAogICAgICAgICB0ZXh0QmFzZWxpbmUsCiAgICAgICAgIGZvbnRGYW1pbHksCiAgICAgICAgIGZvbnRGYW1pbHlGYWxsYmFjaywKICAgICAgICAgZm9udFNpemUsCiAgICAgICAgIGxldHRlclNwYWNpbmcsCiAgICAgICAgIHdvcmRTcGFjaW5nLAogICAgICAgICBoZWlnaHQsCiAgICAgICAgIGxvY2FsZSwKICAgICAgICAgYmFja2dyb3VuZCwKICAgICAgICAgZm9yZWdyb3VuZCwKICAgICAgICAgc2hhZG93cywKICAgICAgICAgZm9udEZlYXR1cmVzLAogICAgICAgKSwKICAgICAgIF9mb250RmFtaWx5ID0gZm9udEZhbWlseSA/PyAnJywKICAgICAgIF9mb250RmFtaWx5RmFsbGJhY2sgPSBmb250RmFtaWx5RmFsbGJhY2ssCiAgICAgICBfZm9udFNpemUgPSBmb250U2l6ZSwKICAgICAgIF9sZXR0ZXJTcGFjaW5nID0gbGV0dGVyU3BhY2luZywKICAgICAgIF93b3JkU3BhY2luZyA9IHdvcmRTcGFjaW5nLAogICAgICAgX2hlaWdodCA9IGhlaWdodCwKICAgICAgIF9kZWNvcmF0aW9uVGhpY2tuZXNzID0gZGVjb3JhdGlvblRoaWNrbmVzcywKICAgICAgIF9sb2NhbGUgPSBsb2NhbGUsCiAgICAgICBfYmFja2dyb3VuZCA9IGJhY2tncm91bmQsCiAgICAgICBfZm9yZWdyb3VuZCA9IGZvcmVncm91bmQsCiAgICAgICBfc2hhZG93cyA9IHNoYWRvd3MsCiAgICAgICBfZm9udEZlYXR1cmVzID0gZm9udEZlYXR1cmVzOwoKICBmaW5hbCBJbnQzMkxpc3QgX2VuY29kZWQ7CiAgZmluYWwgU3RyaW5nIF9mb250RmFtaWx5OwogIGZpbmFsIExpc3Q8U3RyaW5nPiBfZm9udEZhbWlseUZhbGxiYWNrOwogIGZpbmFsIGRvdWJsZSBfZm9udFNpemU7CiAgZmluYWwgZG91YmxlIF9sZXR0ZXJTcGFjaW5nOwogIGZpbmFsIGRvdWJsZSBfd29yZFNwYWNpbmc7CiAgZmluYWwgZG91YmxlIF9oZWlnaHQ7CiAgZmluYWwgZG91YmxlIF9kZWNvcmF0aW9uVGhpY2tuZXNzOwogIGZpbmFsIExvY2FsZSBfbG9jYWxlOwogIGZpbmFsIFBhaW50IF9iYWNrZ3JvdW5kOwogIGZpbmFsIFBhaW50IF9mb3JlZ3JvdW5kOwogIGZpbmFsIExpc3Q8U2hhZG93PiBfc2hhZG93czsKICBmaW5hbCBMaXN0PEZvbnRGZWF0dXJlPiBfZm9udEZlYXR1cmVzOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KGR5bmFtaWMgb3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBvdGhlciBpcyBUZXh0U3R5bGUKICAgICAgICAmJiBvdGhlci5fZm9udEZhbWlseSA9PSBfZm9udEZhbWlseQogICAgICAgICYmIG90aGVyLl9mb250U2l6ZSA9PSBfZm9udFNpemUKICAgICAgICAmJiBvdGhlci5fbGV0dGVyU3BhY2luZyA9PSBfbGV0dGVyU3BhY2luZwogICAgICAgICYmIG90aGVyLl93b3JkU3BhY2luZyA9PSBfd29yZFNwYWNpbmcKICAgICAgICAmJiBvdGhlci5faGVpZ2h0ID09IF9oZWlnaHQKICAgICAgICAmJiBvdGhlci5fZGVjb3JhdGlvblRoaWNrbmVzcyA9PSBfZGVjb3JhdGlvblRoaWNrbmVzcwogICAgICAgICYmIG90aGVyLl9sb2NhbGUgPT0gX2xvY2FsZQogICAgICAgICYmIG90aGVyLl9iYWNrZ3JvdW5kID09IF9iYWNrZ3JvdW5kCiAgICAgICAgJiYgb3RoZXIuX2ZvcmVncm91bmQgPT0gX2ZvcmVncm91bmQKICAgICAgICAmJiBfbGlzdEVxdWFsczxpbnQ+KG90aGVyLl9lbmNvZGVkLCBfZW5jb2RlZCkKICAgICAgICAmJiBfbGlzdEVxdWFsczxTaGFkb3c+KG90aGVyLl9zaGFkb3dzLCBfc2hhZG93cykKICAgICAgICAmJiBfbGlzdEVxdWFsczxTdHJpbmc+KG90aGVyLl9mb250RmFtaWx5RmFsbGJhY2ssIF9mb250RmFtaWx5RmFsbGJhY2spCiAgICAgICAgJiYgX2xpc3RFcXVhbHM8Rm9udEZlYXR1cmU+KG90aGVyLl9mb250RmVhdHVyZXMsIF9mb250RmVhdHVyZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBoYXNoVmFsdWVzKGhhc2hMaXN0KF9lbmNvZGVkKSwgX2ZvbnRGYW1pbHksIF9mb250RmFtaWx5RmFsbGJhY2ssIF9mb250U2l6ZSwgX2xldHRlclNwYWNpbmcsIF93b3JkU3BhY2luZywgX2hlaWdodCwgX2xvY2FsZSwgX2JhY2tncm91bmQsIF9mb3JlZ3JvdW5kLCBoYXNoTGlzdChfc2hhZG93cyksIF9kZWNvcmF0aW9uVGhpY2tuZXNzLCBoYXNoTGlzdChfZm9udEZlYXR1cmVzKSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnVGV4dFN0eWxlKCcKICAgICAgICAgICAgICdjb2xvcjogJHsgICAgICAgICAgICAgIF9lbmNvZGVkWzBdICYgMHgwMDAwMiA9PSAweDAwMDAyICA/IENvbG9yKF9lbmNvZGVkWzFdKSAgICAgICAgICAgICAgICAgIDogInVuc3BlY2lmaWVkIn0sICcKICAgICAgICAgICAgICdkZWNvcmF0aW9uOiAkeyAgICAgICAgIF9lbmNvZGVkWzBdICYgMHgwMDAwNCA9PSAweDAwMDA0ICA/IFRleHREZWNvcmF0aW9uLl8oX2VuY29kZWRbMl0pICAgICAgIDogInVuc3BlY2lmaWVkIn0sICcKICAgICAgICAgICAgICdkZWNvcmF0aW9uQ29sb3I6ICR7ICAgIF9lbmNvZGVkWzBdICYgMHgwMDAwOCA9PSAweDAwMDA4ICA/IENvbG9yKF9lbmNvZGVkWzNdKSAgICAgICAgICAgICAgICAgIDogInVuc3BlY2lmaWVkIn0sICcKICAgICAgICAgICAgICdkZWNvcmF0aW9uU3R5bGU6ICR7ICAgIF9lbmNvZGVkWzBdICYgMHgwMDAxMCA9PSAweDAwMDEwICA/IFRleHREZWNvcmF0aW9uU3R5bGUudmFsdWVzW19lbmNvZGVkWzRdXSA6ICJ1bnNwZWNpZmllZCJ9LCAnCiAgICAgICAgICAgICAvLyBUaGUgZGVjb3JhdGlvblRoaWNrbmVzcyBpcyBub3QgaW4gZW5jb2RlZCBvcmRlciBpbiBvcmRlciB0byBrZWVwIGl0IG5lYXIgdGhlIG90aGVyIGRlY29yYXRpb24gcHJvcGVydGllcy4KICAgICAgICAgICAgICdkZWNvcmF0aW9uVGhpY2tuZXNzOiAke19lbmNvZGVkWzBdICYgMHgwMDEwMCA9PSAweDAwMTAwICA/IF9kZWNvcmF0aW9uVGhpY2tuZXNzICAgICAgICAgICAgICAgICAgICA6ICJ1bnNwZWNpZmllZCJ9LCAnCiAgICAgICAgICAgICAnZm9udFdlaWdodDogJHsgICAgICAgICBfZW5jb2RlZFswXSAmIDB4MDAwMjAgPT0gMHgwMDAyMCAgPyBGb250V2VpZ2h0LnZhbHVlc1tfZW5jb2RlZFs1XV0gICAgICAgICAgOiAidW5zcGVjaWZpZWQifSwgJwogICAgICAgICAgICAgJ2ZvbnRTdHlsZTogJHsgICAgICAgICAgX2VuY29kZWRbMF0gJiAweDAwMDQwID09IDB4MDAwNDAgID8gRm9udFN0eWxlLnZhbHVlc1tfZW5jb2RlZFs2XV0gICAgICAgICAgIDogInVuc3BlY2lmaWVkIn0sICcKICAgICAgICAgICAgICd0ZXh0QmFzZWxpbmU6ICR7ICAgICAgIF9lbmNvZGVkWzBdICYgMHgwMDA4MCA9PSAweDAwMDgwICA/IFRleHRCYXNlbGluZS52YWx1ZXNbX2VuY29kZWRbN11dICAgICAgICA6ICJ1bnNwZWNpZmllZCJ9LCAnCiAgICAgICAgICAgICAnZm9udEZhbWlseTogJHsgICAgICAgICBfZW5jb2RlZFswXSAmIDB4MDAyMDAgPT0gMHgwMDIwMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgX2ZvbnRGYW1pbHkgIT0gbnVsbCAgICAgICAgICAgID8gX2ZvbnRGYW1pbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogInVuc3BlY2lmaWVkIn0sICcKICAgICAgICAgICAgICdmb250RmFtaWx5RmFsbGJhY2s6ICR7IF9lbmNvZGVkWzBdICYgMHgwMDIwMCA9PSAweDAwMjAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBfZm9udEZhbWlseUZhbGxiYWNrICE9IG51bGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIF9mb250RmFtaWx5RmFsbGJhY2suaXNOb3RFbXB0eSA/IF9mb250RmFtaWx5RmFsbGJhY2sgICAgICAgICAgICAgICAgICAgICA6ICJ1bnNwZWNpZmllZCJ9LCAnCiAgICAgICAgICAgICAnZm9udFNpemU6ICR7ICAgICAgICAgICBfZW5jb2RlZFswXSAmIDB4MDA0MDAgPT0gMHgwMDQwMCAgPyBfZm9udFNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAidW5zcGVjaWZpZWQifSwgJwogICAgICAgICAgICAgJ2xldHRlclNwYWNpbmc6ICR7ICAgICAgX2VuY29kZWRbMF0gJiAweDAwODAwID09IDB4MDA4MDAgID8gIiR7X2xldHRlclNwYWNpbmd9eCIgICAgICAgICAgICAgICAgICAgIDogInVuc3BlY2lmaWVkIn0sICcKICAgICAgICAgICAgICd3b3JkU3BhY2luZzogJHsgICAgICAgIF9lbmNvZGVkWzBdICYgMHgwMTAwMCA9PSAweDAxMDAwICA/ICIke193b3JkU3BhY2luZ314IiAgICAgICAgICAgICAgICAgICAgICA6ICJ1bnNwZWNpZmllZCJ9LCAnCiAgICAgICAgICAgICAnaGVpZ2h0OiAkeyAgICAgICAgICAgICBfZW5jb2RlZFswXSAmIDB4MDIwMDAgPT0gMHgwMjAwMCAgPyAiJHtfaGVpZ2h0fXgiICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAidW5zcGVjaWZpZWQifSwgJwogICAgICAgICAgICAgJ2xvY2FsZTogJHsgICAgICAgICAgICAgX2VuY29kZWRbMF0gJiAweDA0MDAwID09IDB4MDQwMDAgID8gX2xvY2FsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogInVuc3BlY2lmaWVkIn0sICcKICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAkeyAgICAgICAgIF9lbmNvZGVkWzBdICYgMHgwODAwMCA9PSAweDA4MDAwICA/IF9iYWNrZ3JvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJ1bnNwZWNpZmllZCJ9LCAnCiAgICAgICAgICAgICAnZm9yZWdyb3VuZDogJHsgICAgICAgICBfZW5jb2RlZFswXSAmIDB4MTAwMDAgPT0gMHgxMDAwMCAgPyBfZm9yZWdyb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAidW5zcGVjaWZpZWQifSwgJwogICAgICAgICAgICAgJ3NoYWRvd3M6ICR7ICAgICAgICAgICAgX2VuY29kZWRbMF0gJiAweDIwMDAwID09IDB4MjAwMDAgID8gX3NoYWRvd3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogInVuc3BlY2lmaWVkIn0sICcKICAgICAgICAgICAgICdmb250RmVhdHVyZXM6ICR7ICAgICAgIF9lbmNvZGVkWzBdICYgMHg0MDAwMCA9PSAweDQwMDAwICA/IF9mb250RmVhdHVyZXMgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJ1bnNwZWNpZmllZCJ9JwogICAgICAgICAgICcpJzsKICB9Cn0KCi8vIFRoaXMgZW5jb2RpbmcgbXVzdCBtYXRjaCB0aGUgQysrIHZlcnNpb24gUGFyYWdyYXBoQnVpbGRlcjo6YnVpbGQuCi8vCi8vIFRoZSBlbmNvZGVkIGFycmF5IGJ1ZmZlciBoYXMgNiBlbGVtZW50cy4KLy8KLy8gIC0gRWxlbWVudCAwOiBBIGJpdCBtYXNrIGluZGljYXRpbmcgd2hpY2ggZmllbGRzIGFyZSBub24tbnVsbC4KLy8gICAgQml0IDAgaXMgdW51c2VkLiBCaXRzIDEtbiBhcmUgc2V0IGlmIHRoZSBjb3JyZXNwb25kaW5nIGluZGV4IGluIHRoZQovLyAgICBlbmNvZGVkIGFycmF5IGlzIG5vbi1udWxsLiAgVGhlIHJlbWFpbmluZyBiaXRzIHJlcHJlc2VudCBmaWVsZHMgdGhhdAovLyAgICBhcmUgcGFzc2VkIHNlcGFyYXRlbHkgZnJvbSB0aGUgYXJyYXkuCi8vCi8vICAtIEVsZW1lbnQgMTogVGhlIGVudW0gaW5kZXggb2YgdGhlIHx0ZXh0QWxpZ258LgovLwovLyAgLSBFbGVtZW50IDI6IFRoZSBlbnVtIGluZGV4IG9mIHRoZSB8dGV4dERpcmVjdGlvbnwuCi8vCi8vICAtIEVsZW1lbnQgMzogVGhlIGluZGV4IG9mIHRoZSB8Zm9udFdlaWdodHwuCi8vCi8vICAtIEVsZW1lbnQgNDogVGhlIGVudW0gaW5kZXggb2YgdGhlIHxmb250U3R5bGV8LgovLwovLyAgLSBFbGVtZW50IDU6IFRoZSB2YWx1ZSBvZiB8bWF4TGluZXN8LgovLwovLyAgLSBFbGVtZW50IDY6IFRoZSBlbmNvZGVkIHZhbHVlIG9mIHx0ZXh0SGVpZ2h0QmVoYXZpb3J8LgovLwpJbnQzMkxpc3QgX2VuY29kZVBhcmFncmFwaFN0eWxlKAogIFRleHRBbGlnbiB0ZXh0QWxpZ24sCiAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uLAogIGludCBtYXhMaW5lcywKICBTdHJpbmcgZm9udEZhbWlseSwKICBkb3VibGUgZm9udFNpemUsCiAgZG91YmxlIGhlaWdodCwKICBUZXh0SGVpZ2h0QmVoYXZpb3IgdGV4dEhlaWdodEJlaGF2aW9yLAogIEZvbnRXZWlnaHQgZm9udFdlaWdodCwKICBGb250U3R5bGUgZm9udFN0eWxlLAogIFN0cnV0U3R5bGUgc3RydXRTdHlsZSwKICBTdHJpbmcgZWxsaXBzaXMsCiAgTG9jYWxlIGxvY2FsZSwKKSB7CiAgZmluYWwgSW50MzJMaXN0IHJlc3VsdCA9IEludDMyTGlzdCg3KTsgLy8gYWxzbyB1cGRhdGUgcGFyYWdyYXBoX2J1aWxkZXIuY2MKICBpZiAodGV4dEFsaWduICE9IG51bGwpIHsKICAgIHJlc3VsdFswXSB8PSAxIDw8IDE7CiAgICByZXN1bHRbMV0gPSB0ZXh0QWxpZ24uaW5kZXg7CiAgfQogIGlmICh0ZXh0RGlyZWN0aW9uICE9IG51bGwpIHsKICAgIHJlc3VsdFswXSB8PSAxIDw8IDI7CiAgICByZXN1bHRbMl0gPSB0ZXh0RGlyZWN0aW9uLmluZGV4OwogIH0KICBpZiAoZm9udFdlaWdodCAhPSBudWxsKSB7CiAgICByZXN1bHRbMF0gfD0gMSA8PCAzOwogICAgcmVzdWx0WzNdID0gZm9udFdlaWdodC5pbmRleDsKICB9CiAgaWYgKGZvbnRTdHlsZSAhPSBudWxsKSB7CiAgICByZXN1bHRbMF0gfD0gMSA8PCA0OwogICAgcmVzdWx0WzRdID0gZm9udFN0eWxlLmluZGV4OwogIH0KICBpZiAobWF4TGluZXMgIT0gbnVsbCkgewogICAgcmVzdWx0WzBdIHw9IDEgPDwgNTsKICAgIHJlc3VsdFs1XSA9IG1heExpbmVzOwogIH0KICBpZiAodGV4dEhlaWdodEJlaGF2aW9yICE9IG51bGwpIHsKICAgIHJlc3VsdFswXSB8PSAxIDw8IDY7CiAgICByZXN1bHRbNl0gPSB0ZXh0SGVpZ2h0QmVoYXZpb3IuZW5jb2RlKCk7CiAgfQogIGlmIChmb250RmFtaWx5ICE9IG51bGwpIHsKICAgIHJlc3VsdFswXSB8PSAxIDw8IDc7CiAgICAvLyBQYXNzZWQgc2VwYXJhdGVseSB0byBuYXRpdmUuCiAgfQogIGlmIChmb250U2l6ZSAhPSBudWxsKSB7CiAgICByZXN1bHRbMF0gfD0gMSA8PCA4OwogICAgLy8gUGFzc2VkIHNlcGFyYXRlbHkgdG8gbmF0aXZlLgogIH0KICBpZiAoaGVpZ2h0ICE9IG51bGwpIHsKICAgIHJlc3VsdFswXSB8PSAxIDw8IDk7CiAgICAvLyBQYXNzZWQgc2VwYXJhdGVseSB0byBuYXRpdmUuCiAgfQogIGlmIChzdHJ1dFN0eWxlICE9IG51bGwpIHsKICAgIHJlc3VsdFswXSB8PSAxIDw8IDEwOwogICAgLy8gUGFzc2VkIHNlcGFyYXRlbHkgdG8gbmF0aXZlLgogIH0KICBpZiAoZWxsaXBzaXMgIT0gbnVsbCkgewogICAgcmVzdWx0WzBdIHw9IDEgPDwgMTE7CiAgICAvLyBQYXNzZWQgc2VwYXJhdGVseSB0byBuYXRpdmUuCiAgfQogIGlmIChsb2NhbGUgIT0gbnVsbCkgewogICAgcmVzdWx0WzBdIHw9IDEgPDwgMTI7CiAgICAvLyBQYXNzZWQgc2VwYXJhdGVseSB0byBuYXRpdmUuCiAgfQogIHJldHVybiByZXN1bHQ7Cn0KCi8vLyBBbiBvcGFxdWUgb2JqZWN0IHRoYXQgZGV0ZXJtaW5lcyB0aGUgY29uZmlndXJhdGlvbiB1c2VkIGJ5Ci8vLyBbUGFyYWdyYXBoQnVpbGRlcl0gdG8gcG9zaXRpb24gbGluZXMgd2l0aGluIGEgW1BhcmFncmFwaF0gb2YgdGV4dC4KY2xhc3MgUGFyYWdyYXBoU3R5bGUgewogIC8vLyBDcmVhdGVzIGEgbmV3IFBhcmFncmFwaFN0eWxlIG9iamVjdC4KICAvLy8KICAvLy8gKiBgdGV4dEFsaWduYDogVGhlIGFsaWdubWVudCBvZiB0aGUgdGV4dCB3aXRoaW4gdGhlIGxpbmVzIG9mIHRoZQogIC8vLyAgIHBhcmFncmFwaC4gSWYgdGhlIGxhc3QgbGluZSBpcyBlbGxpcHNpemVkIChzZWUgYGVsbGlwc2lzYCBiZWxvdyksIHRoZQogIC8vLyAgIGFsaWdubWVudCBpcyBhcHBsaWVkIHRvIHRoYXQgbGluZSBhZnRlciBpdCBoYXMgYmVlbiB0cnVuY2F0ZWQgYnV0IGJlZm9yZQogIC8vLyAgIHRoZSBlbGxpcHNpcyBoYXMgYmVlbiBhZGRlZC4KICAgLy8gICBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mbHV0dGVyL2ZsdXR0ZXIvaXNzdWVzLzk4MTkKICAvLy8KICAvLy8gKiBgdGV4dERpcmVjdGlvbmA6IFRoZSBkaXJlY3Rpb25hbGl0eSBvZiB0aGUgdGV4dCwgbGVmdC10by1yaWdodCAoZS5nLgogIC8vLyAgIE5vcndlZ2lhbikgb3IgcmlnaHQtdG8tbGVmdCAoZS5nLiBIZWJyZXcpLiBUaGlzIGNvbnRyb2xzIHRoZSBvdmVyYWxsCiAgLy8vICAgZGlyZWN0aW9uYWxpdHkgb2YgdGhlIHBhcmFncmFwaCwgYXMgd2VsbCBhcyB0aGUgbWVhbmluZyBvZgogIC8vLyAgIFtUZXh0QWxpZ24uc3RhcnRdIGFuZCBbVGV4dEFsaWduLmVuZF0gaW4gdGhlIGB0ZXh0QWxpZ25gIGZpZWxkLgogIC8vLwogIC8vLyAqIGBtYXhMaW5lc2A6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyBwYWludGVkLiBMaW5lcyBiZXlvbmQgdGhpcwogIC8vLyAgIG51bWJlciBhcmUgc2lsZW50bHkgZHJvcHBlZC4gRm9yIGV4YW1wbGUsIGlmIGBtYXhMaW5lc2AgaXMgMSwgdGhlbiBvbmx5CiAgLy8vICAgb25lIGxpbmUgaXMgcmVuZGVyZWQuIElmIGBtYXhMaW5lc2AgaXMgbnVsbCwgYnV0IGBlbGxpcHNpc2AgaXMgbm90IG51bGwsCiAgLy8vICAgdGhlbiBsaW5lcyBhZnRlciB0aGUgZmlyc3Qgb25lIHRoYXQgb3ZlcmZsb3dzIHRoZSB3aWR0aCBjb25zdHJhaW50cyBhcmUKICAvLy8gICBkcm9wcGVkLiBUaGUgd2lkdGggY29uc3RyYWludHMgYXJlIHRob3NlIHNldCBpbiB0aGUKICAvLy8gICBbUGFyYWdyYXBoQ29uc3RyYWludHNdIG9iamVjdCBwYXNzZWQgdG8gdGhlIFtQYXJhZ3JhcGgubGF5b3V0XSBtZXRob2QuCiAgLy8vCiAgLy8vICogYGZvbnRGYW1pbHlgOiBUaGUgbmFtZSBvZiB0aGUgZm9udCBmYW1pbHkgdG8gYXBwbHkgd2hlbiBwYWludGluZyB0aGUgdGV4dCwKICAvLy8gICBpbiB0aGUgYWJzZW5jZSBvZiBhIGB0ZXh0U3R5bGVgIGJlaW5nIGF0dGFjaGVkIHRvIHRoZSBzcGFuLgogIC8vLwogIC8vLyAqIGBmb250U2l6ZWA6IFRoZSBmYWxsYmFjayBzaXplIG9mIGdseXBocyAoaW4gbG9naWNhbCBwaXhlbHMpIHRvCiAgLy8vICAgdXNlIHdoZW4gcGFpbnRpbmcgdGhlIHRleHQuIFRoaXMgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIFtUZXh0U3R5bGVdLgogIC8vLwogIC8vLyAqIGBoZWlnaHRgOiBUaGUgZmFsbGJhY2sgaGVpZ2h0IG9mIHRoZSBzcGFucyBhcyBhIG11bHRpcGxpZXIgb2YgdGhlIGZvbnQKICAvLy8gICBzaXplLiBUaGUgZmFsbGJhY2sgaGVpZ2h0IGlzIHVzZWQgd2hlbiBubyBoZWlnaHQgaXMgcHJvdmlkZWQgdGhyb3VnaAogIC8vLyAgIFtUZXh0U3R5bGUuaGVpZ2h0XS4gT21pdHRpbmcgYGhlaWdodGAgaGVyZSBhbmQgaW4gW1RleHRTdHlsZV0gd2lsbCBhbGxvdwogIC8vLyAgIHRoZSBsaW5lIGhlaWdodCB0byB0YWtlIHRoZSBoZWlnaHQgYXMgZGVmaW5lZCBieSB0aGUgZm9udCwgd2hpY2ggbWF5IG5vdAogIC8vLyAgIGJlIGV4YWN0bHkgdGhlIGhlaWdodCBvZiB0aGUgYGZvbnRTaXplYC4KICAvLy8KICAvLy8gKiBgdGV4dEhlaWdodEJlaGF2aW9yYDogU3BlY2lmaWVzIGhvdyB0aGUgYGhlaWdodGAgbXVsdGlwbGllciBpcwogIC8vLyAgIGFwcGxpZWQgdG8gYXNjZW50IG9mIHRoZSBmaXJzdCBsaW5lIGFuZCB0aGUgZGVzY2VudCBvZiB0aGUgbGFzdCBsaW5lLgogIC8vLwogIC8vLyAqIGBmb250V2VpZ2h0YDogVGhlIHR5cGVmYWNlIHRoaWNrbmVzcyB0byB1c2Ugd2hlbiBwYWludGluZyB0aGUgdGV4dAogIC8vLyAgIChlLmcuLCBib2xkKS4KICAvLy8KICAvLy8gKiBgZm9udFN0eWxlYDogVGhlIHR5cGVmYWNlIHZhcmlhbnQgdG8gdXNlIHdoZW4gZHJhd2luZyB0aGUgbGV0dGVycyAoZS5nLiwKICAvLy8gICBpdGFsaWNzKS4KICAvLy8KICAvLy8gKiBgc3RydXRTdHlsZWA6IFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBzdHJ1dC4gU3RydXQgZGVmaW5lcyBhIHNldCBvZiBtaW5pbXVtCiAgLy8vICAgdmVydGljYWwgbGluZSBoZWlnaHQgcmVsYXRlZCBtZXRyaWNzIGFuZCBjYW4gYmUgdXNlZCB0byBvYnRhaW4gbW9yZQogIC8vLyAgIGFkdmFuY2VkIGxpbmUgc3BhY2luZyBiZWhhdmlvci4KICAvLy8KICAvLy8gKiBgZWxsaXBzaXNgOiBTdHJpbmcgdXNlZCB0byBlbGxpcHNpemUgb3ZlcmZsb3dpbmcgdGV4dC4gSWYgYG1heExpbmVzYCBpcwogIC8vLyAgIG5vdCBudWxsLCB0aGVuIHRoZSBgZWxsaXBzaXNgLCBpZiBhbnksIGlzIGFwcGxpZWQgdG8gdGhlIGxhc3QgcmVuZGVyZWQKICAvLy8gICBsaW5lLCBpZiB0aGF0IGxpbmUgb3ZlcmZsb3dzIHRoZSB3aWR0aCBjb25zdHJhaW50cy4gSWYgYG1heExpbmVzYCBpcwogIC8vLyAgIG51bGwsIHRoZW4gdGhlIGBlbGxpcHNpc2AgaXMgYXBwbGllZCB0byB0aGUgZmlyc3QgbGluZSB0aGF0IG92ZXJmbG93cwogIC8vLyAgIHRoZSB3aWR0aCBjb25zdHJhaW50cywgYW5kIHN1YnNlcXVlbnQgbGluZXMgYXJlIGRyb3BwZWQuIFRoZSB3aWR0aAogIC8vLyAgIGNvbnN0cmFpbnRzIGFyZSB0aG9zZSBzZXQgaW4gdGhlIFtQYXJhZ3JhcGhDb25zdHJhaW50c10gb2JqZWN0IHBhc3NlZCB0bwogIC8vLyAgIHRoZSBbUGFyYWdyYXBoLmxheW91dF0gbWV0aG9kLiBUaGUgZW1wdHkgc3RyaW5nIGFuZCB0aGUgbnVsbCB2YWx1ZSBhcmUKICAvLy8gICBjb25zaWRlcmVkIGVxdWl2YWxlbnQgYW5kIHR1cm4gb2ZmIHRoaXMgYmVoYXZpb3IuCiAgLy8vCiAgLy8vICogYGxvY2FsZWA6IFRoZSBsb2NhbGUgdXNlZCB0byBzZWxlY3QgcmVnaW9uLXNwZWNpZmljIGdseXBocy4KICBQYXJhZ3JhcGhTdHlsZSh7CiAgICBUZXh0QWxpZ24gdGV4dEFsaWduLAogICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uLAogICAgaW50IG1heExpbmVzLAogICAgU3RyaW5nIGZvbnRGYW1pbHksCiAgICBkb3VibGUgZm9udFNpemUsCiAgICBkb3VibGUgaGVpZ2h0LAogICAgVGV4dEhlaWdodEJlaGF2aW9yIHRleHRIZWlnaHRCZWhhdmlvciwKICAgIEZvbnRXZWlnaHQgZm9udFdlaWdodCwKICAgIEZvbnRTdHlsZSBmb250U3R5bGUsCiAgICBTdHJ1dFN0eWxlIHN0cnV0U3R5bGUsCiAgICBTdHJpbmcgZWxsaXBzaXMsCiAgICBMb2NhbGUgbG9jYWxlLAogIH0pIDogX2VuY29kZWQgPSBfZW5jb2RlUGFyYWdyYXBoU3R5bGUoCiAgICAgICAgIHRleHRBbGlnbiwKICAgICAgICAgdGV4dERpcmVjdGlvbiwKICAgICAgICAgbWF4TGluZXMsCiAgICAgICAgIGZvbnRGYW1pbHksCiAgICAgICAgIGZvbnRTaXplLAogICAgICAgICBoZWlnaHQsCiAgICAgICAgIHRleHRIZWlnaHRCZWhhdmlvciwKICAgICAgICAgZm9udFdlaWdodCwKICAgICAgICAgZm9udFN0eWxlLAogICAgICAgICBzdHJ1dFN0eWxlLAogICAgICAgICBlbGxpcHNpcywKICAgICAgICAgbG9jYWxlLAogICAgICAgKSwKICAgICAgIF9mb250RmFtaWx5ID0gZm9udEZhbWlseSwKICAgICAgIF9mb250U2l6ZSA9IGZvbnRTaXplLAogICAgICAgX2hlaWdodCA9IGhlaWdodCwKICAgICAgIF9zdHJ1dFN0eWxlID0gc3RydXRTdHlsZSwKICAgICAgIF9lbGxpcHNpcyA9IGVsbGlwc2lzLAogICAgICAgX2xvY2FsZSA9IGxvY2FsZTsKCiAgZmluYWwgSW50MzJMaXN0IF9lbmNvZGVkOwogIGZpbmFsIFN0cmluZyBfZm9udEZhbWlseTsKICBmaW5hbCBkb3VibGUgX2ZvbnRTaXplOwogIGZpbmFsIGRvdWJsZSBfaGVpZ2h0OwogIGZpbmFsIFN0cnV0U3R5bGUgX3N0cnV0U3R5bGU7CiAgZmluYWwgU3RyaW5nIF9lbGxpcHNpczsKICBmaW5hbCBMb2NhbGUgX2xvY2FsZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShkeW5hbWljIG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIucnVudGltZVR5cGUgIT0gcnVudGltZVR5cGUpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBvdGhlciBpcyBQYXJhZ3JhcGhTdHlsZQogICAgICAgICYmIG90aGVyLl9mb250RmFtaWx5ID09IF9mb250RmFtaWx5CiAgICAgICAgJiYgb3RoZXIuX2ZvbnRTaXplID09IF9mb250U2l6ZQogICAgICAgICYmIG90aGVyLl9oZWlnaHQgPT0gX2hlaWdodAogICAgICAgICYmIG90aGVyLl9zdHJ1dFN0eWxlID09IF9zdHJ1dFN0eWxlCiAgICAgICAgJiYgb3RoZXIuX2VsbGlwc2lzID09IF9lbGxpcHNpcwogICAgICAgICYmIG90aGVyLl9sb2NhbGUgPT0gX2xvY2FsZQogICAgICAgICYmIF9saXN0RXF1YWxzPGludD4ob3RoZXIuX2VuY29kZWQsIF9lbmNvZGVkKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gaGFzaFZhbHVlcyhoYXNoTGlzdChfZW5jb2RlZCksIF9mb250RmFtaWx5LCBfZm9udFNpemUsIF9oZWlnaHQsIF9lbGxpcHNpcywgX2xvY2FsZSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnUGFyYWdyYXBoU3R5bGUoJwogICAgICAgICAgICAgJ3RleHRBbGlnbjogJHsgICAgIF9lbmNvZGVkWzBdICYgMHgwMDIgPT0gMHgwMDIgPyBUZXh0QWxpZ24udmFsdWVzW19lbmNvZGVkWzFdXSAgICAgOiAidW5zcGVjaWZpZWQifSwgJwogICAgICAgICAgICAgJ3RleHREaXJlY3Rpb246ICR7IF9lbmNvZGVkWzBdICYgMHgwMDQgPT0gMHgwMDQgPyBUZXh0RGlyZWN0aW9uLnZhbHVlc1tfZW5jb2RlZFsyXV0gOiAidW5zcGVjaWZpZWQifSwgJwogICAgICAgICAgICAgJ2ZvbnRXZWlnaHQ6ICR7ICAgIF9lbmNvZGVkWzBdICYgMHgwMDggPT0gMHgwMDggPyBGb250V2VpZ2h0LnZhbHVlc1tfZW5jb2RlZFszXV0gICAgOiAidW5zcGVjaWZpZWQifSwgJwogICAgICAgICAgICAgJ2ZvbnRTdHlsZTogJHsgICAgIF9lbmNvZGVkWzBdICYgMHgwMTAgPT0gMHgwMTAgPyBGb250U3R5bGUudmFsdWVzW19lbmNvZGVkWzRdXSAgICAgOiAidW5zcGVjaWZpZWQifSwgJwogICAgICAgICAgICAgJ21heExpbmVzOiAkeyAgICAgIF9lbmNvZGVkWzBdICYgMHgwMjAgPT0gMHgwMjAgPyBfZW5jb2RlZFs1XSAgICAgICAgICAgICAgICAgICAgICAgOiAidW5zcGVjaWZpZWQifSwgJwogICAgICAgICAgICAgJ3RleHRIZWlnaHRCZWhhdmlvcjogJHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZW5jb2RlZFswXSAmIDB4MDQwID09IDB4MDQwID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dEhlaWdodEJlaGF2aW9yLmZyb21FbmNvZGVkKF9lbmNvZGVkWzZdKS50b1N0cmluZygpIDogInVuc3BlY2lmaWVkIn0sICcKICAgICAgICAgICAgICdmb250RmFtaWx5OiAkeyAgICBfZW5jb2RlZFswXSAmIDB4MDgwID09IDB4MDgwID8gX2ZvbnRGYW1pbHkgICAgICAgICAgICAgICAgICAgICAgIDogInVuc3BlY2lmaWVkIn0sICcKICAgICAgICAgICAgICdmb250U2l6ZTogJHsgICAgICBfZW5jb2RlZFswXSAmIDB4MTAwID09IDB4MTAwID8gX2ZvbnRTaXplICAgICAgICAgICAgICAgICAgICAgICAgIDogInVuc3BlY2lmaWVkIn0sICcKICAgICAgICAgICAgICdoZWlnaHQ6ICR7ICAgICAgICBfZW5jb2RlZFswXSAmIDB4MjAwID09IDB4MjAwID8gIiR7X2hlaWdodH14IiAgICAgICAgICAgICAgICAgICAgIDogInVuc3BlY2lmaWVkIn0sICcKICAgICAgICAgICAgICdlbGxpcHNpczogJHsgICAgICBfZW5jb2RlZFswXSAmIDB4NDAwID09IDB4NDAwID8gIlwiJF9lbGxpcHNpc1wiIiAgICAgICAgICAgICAgICAgIDogInVuc3BlY2lmaWVkIn0sICcKICAgICAgICAgICAgICdsb2NhbGU6ICR7ICAgICAgICBfZW5jb2RlZFswXSAmIDB4ODAwID09IDB4ODAwID8gX2xvY2FsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogInVuc3BlY2lmaWVkIn0nCiAgICAgICAgICAgJyknOwogIH0KfQoKLy8gU2VyaWFsaXplIHN0cnV0IHByb3BlcnRpZXMgaW50byBCeXRlRGF0YS4gVGhpcyBlbmNvZGluZyBlcnJzIHRvd2FyZHMKLy8gY29tcGFjdG5lc3MuIFRoZSBmaXJzdCA4IGJpdHMgaXMgYSBiaXRtYXNrIHRoYXQgcmVjb3JkcyB3aGljaCBwcm9wZXJ0aWVzCi8vIGFyZSBudWxsLiBUaGUgcmVzdCBvZiB0aGUgdmFsdWVzIGFyZSBlbmNvZGVkIGluIHRoZSBzYW1lIG9yZGVyIGVuY291bnRlcmVkCi8vIGluIHRoZSBiaXRtYXNrLiBUaGUgZmluYWwgcmV0dXJuZWQgdmFsdWUgdHJ1bmNhdGVzIGFueSB1bnVzZWQgYnl0ZXMKLy8gYXQgdGhlIGVuZC4KLy8KLy8gV2Ugc2VyaWFsaXplIHRoaXMgbW9yZSB0aG9yb3VnaGx5IHRoYW4gUGFyYWdyYXBoU3R5bGUgYmVjYXVzZSBpdCBpcwovLyBtdWNoIG1vcmUgbGlrZWx5IHRoYXQgdGhlIHN0cnV0IGlzIGVtcHR5L251bGwgYW5kIHdlIHdpc2ggdG8gYWRkCi8vIG1pbmltYWwgb3ZlcmhlYWQgZm9yIG5vbi1zdHJ1dCBjYXNlcy4KQnl0ZURhdGEgX2VuY29kZVN0cnV0KAogIFN0cmluZyBmb250RmFtaWx5LAogIExpc3Q8U3RyaW5nPiBmb250RmFtaWx5RmFsbGJhY2ssCiAgZG91YmxlIGZvbnRTaXplLAogIGRvdWJsZSBoZWlnaHQsCiAgZG91YmxlIGxlYWRpbmcsCiAgRm9udFdlaWdodCBmb250V2VpZ2h0LAogIEZvbnRTdHlsZSBmb250U3R5bGUsCiAgYm9vbCBmb3JjZVN0cnV0SGVpZ2h0KSB7CiAgaWYgKGZvbnRGYW1pbHkgPT0gbnVsbCAmJgogICAgZm9udFNpemUgPT0gbnVsbCAmJgogICAgaGVpZ2h0ID09IG51bGwgJiYKICAgIGxlYWRpbmcgPT0gbnVsbCAmJgogICAgZm9udFdlaWdodCA9PSBudWxsICYmCiAgICBmb250U3R5bGUgPT0gbnVsbCAmJgogICAgZm9yY2VTdHJ1dEhlaWdodCA9PSBudWxsKQogICAgcmV0dXJuIEJ5dGVEYXRhKDApOwoKICBmaW5hbCBCeXRlRGF0YSBkYXRhID0gQnl0ZURhdGEoMTUpOyAvLyBNYXggc2l6ZSBpcyAxNSBieXRlcwogIGludCBiaXRtYXNrID0gMDsgLy8gOCBiaXQgbWFzawogIGludCBieXRlQ291bnQgPSAxOwogIGlmIChmb250V2VpZ2h0ICE9IG51bGwpIHsKICAgIGJpdG1hc2sgfD0gMSA8PCAwOwogICAgZGF0YS5zZXRJbnQ4KGJ5dGVDb3VudCwgZm9udFdlaWdodC5pbmRleCk7CiAgICBieXRlQ291bnQgKz0gMTsKICB9CiAgaWYgKGZvbnRTdHlsZSAhPSBudWxsKSB7CiAgICBiaXRtYXNrIHw9IDEgPDwgMTsKICAgIGRhdGEuc2V0SW50OChieXRlQ291bnQsIGZvbnRTdHlsZS5pbmRleCk7CiAgICBieXRlQ291bnQgKz0gMTsKICB9CiAgaWYgKGZvbnRGYW1pbHkgIT0gbnVsbCB8fCAoZm9udEZhbWlseUZhbGxiYWNrICE9IG51bGwgJiYgZm9udEZhbWlseUZhbGxiYWNrLmlzTm90RW1wdHkpKXsKICAgIGJpdG1hc2sgfD0gMSA8PCAyOwogICAgLy8gcGFzc2VkIHNlcGFyYXRlbHkgdG8gbmF0aXZlCiAgfQogIGlmIChmb250U2l6ZSAhPSBudWxsKSB7CiAgICBiaXRtYXNrIHw9IDEgPDwgMzsKICAgIGRhdGEuc2V0RmxvYXQzMihieXRlQ291bnQsIGZvbnRTaXplLCBfa0Zha2VIb3N0RW5kaWFuKTsKICAgIGJ5dGVDb3VudCArPSA0OwogIH0KICBpZiAoaGVpZ2h0ICE9IG51bGwpIHsKICAgIGJpdG1hc2sgfD0gMSA8PCA0OwogICAgZGF0YS5zZXRGbG9hdDMyKGJ5dGVDb3VudCwgaGVpZ2h0LCBfa0Zha2VIb3N0RW5kaWFuKTsKICAgIGJ5dGVDb3VudCArPSA0OwogIH0KICBpZiAobGVhZGluZyAhPSBudWxsKSB7CiAgICBiaXRtYXNrIHw9IDEgPDwgNTsKICAgIGRhdGEuc2V0RmxvYXQzMihieXRlQ291bnQsIGxlYWRpbmcsIF9rRmFrZUhvc3RFbmRpYW4pOwogICAgYnl0ZUNvdW50ICs9IDQ7CiAgfQogIGlmIChmb3JjZVN0cnV0SGVpZ2h0ICE9IG51bGwpIHsKICAgIGJpdG1hc2sgfD0gMSA8PCA2OwogICAgLy8gV2Ugc3RvcmUgdGhpcyBib29sZWFuIGRpcmVjdGx5IGluIHRoZSBiaXRtYXNrIHNpbmNlIHRoZXJlIGlzCiAgICAvLyBleHRyYSBzcGFjZSBpbiB0aGUgMTYgYml0IGludC4KICAgIGJpdG1hc2sgfD0gKGZvcmNlU3RydXRIZWlnaHQgPyAxIDogMCkgPDwgNzsKICB9CgogIGRhdGEuc2V0SW50OCgwLCBiaXRtYXNrKTsKCiAgcmV0dXJuIEJ5dGVEYXRhLnZpZXcoZGF0YS5idWZmZXIsIDAsICBieXRlQ291bnQpOwp9CgovLy8gU2VlIGFsc286Ci8vLwovLy8gICogW1N0cnV0U3R5bGVdKGh0dHBzOi8vYXBpLmZsdXR0ZXIuZGV2L2ZsdXR0ZXIvcGFpbnRpbmcvU3RydXRTdHlsZS1jbGFzcy5odG1sKSwgdGhlIGNsYXNzIGluIHRoZSBbcGFpbnRpbmddIGxpYnJhcnkuCi8vLwpjbGFzcyBTdHJ1dFN0eWxlIHsKICAvLy8gQ3JlYXRlcyBhIG5ldyBTdHJ1dFN0eWxlIG9iamVjdC4KICAvLy8KICAvLy8gKiBgZm9udEZhbWlseWA6IFRoZSBuYW1lIG9mIHRoZSBmb250IHRvIHVzZSB3aGVuIHBhaW50aW5nIHRoZSB0ZXh0IChlLmcuLAogIC8vLyAgIFJvYm90bykuCiAgLy8vCiAgLy8vICogYGZvbnRGYW1pbHlGYWxsYmFja2A6IEFuIG9yZGVyZWQgbGlzdCBvZiBmb250IGZhbWlseSBuYW1lcyB0aGF0IHdpbGwgYmUKICAvLy8gICAgc2VhcmNoZWQgZm9yIHdoZW4gdGhlIGZvbnQgaW4gYGZvbnRGYW1pbHlgIGNhbm5vdCBiZSBmb3VuZC4KICAvLy8KICAvLy8gKiBgZm9udFNpemVgOiBUaGUgc2l6ZSBvZiBnbHlwaHMgKGluIGxvZ2ljYWwgcGl4ZWxzKSB0byB1c2Ugd2hlbiBwYWludGluZwogIC8vLyAgIHRoZSB0ZXh0LgogIC8vLwogIC8vLyAqIGBoZWlnaHRgOiBUaGUgbWluaW11bSBoZWlnaHQgb2YgdGhlIGxpbmUgYm94ZXMsIGFzIGEgbXVsdGlwbGllciBvZiB0aGUKICAvLy8gICBmb250IHNpemUuIFRoZSBsaW5lcyBvZiB0aGUgcGFyYWdyYXBoIHdpbGwgYmUgYXQgbGVhc3QKICAvLy8gICBgKGhlaWdodCArIGxlYWRpbmcpICogZm9udFNpemVgIHRhbGwgd2hlbiBgZm9udFNpemVgIGlzIG5vdCBudWxsLiBPbWl0dGluZwogIC8vLyAgIGBoZWlnaHRgIHdpbGwgYWxsb3cgdGhlIG1pbmltdW0gbGluZSBoZWlnaHQgdG8gdGFrZSB0aGUgaGVpZ2h0IGFzIGRlZmluZWQKICAvLy8gICBieSB0aGUgZm9udCwgd2hpY2ggbWF5IG5vdCBiZSBleGFjdGx5IHRoZSBoZWlnaHQgb2YgdGhlIGBmb250U2l6ZWAuIFdoZW4KICAvLy8gICBgZm9udFNpemVgIGlzIG51bGwsIHRoZXJlIGlzIG5vIG1pbmltdW0gbGluZSBoZWlnaHQuIFRhbGwgZ2x5cGhzIGR1ZSB0bwogIC8vLyAgIGJhc2VsaW5lIGFsaWdubWVudCBvciBsYXJnZSBbVGV4dFN0eWxlLmZvbnRTaXplXSBtYXkgY2F1c2UgdGhlIGFjdHVhbCBsaW5lCiAgLy8vICAgaGVpZ2h0IGFmdGVyIGxheW91dCB0byBiZSB0YWxsZXIgdGhhbiBzcGVjaWZpZWQgaGVyZS4gVGhlIGBmb250U2l6ZWAgbXVzdAogIC8vLyAgIGJlIHByb3ZpZGVkIGZvciB0aGlzIHByb3BlcnR5IHRvIHRha2UgZWZmZWN0LgogIC8vLwogIC8vLyAqIGBsZWFkaW5nYDogVGhlIG1pbmltdW0gYW1vdW50IG9mIGxlYWRpbmcgYmV0d2VlbiBsaW5lcyBhcyBhIG11bHRpcGxlIG9mCiAgLy8vICAgdGhlIGZvbnQgc2l6ZS4gYGZvbnRTaXplYCBtdXN0IGJlIHByb3ZpZGVkIGZvciB0aGlzIHByb3BlcnR5IHRvIHRha2UgZWZmZWN0LgogIC8vLwogIC8vLyAqIGBmb250V2VpZ2h0YDogVGhlIHR5cGVmYWNlIHRoaWNrbmVzcyB0byB1c2Ugd2hlbiBwYWludGluZyB0aGUgdGV4dAogIC8vLyAgIChlLmcuLCBib2xkKS4KICAvLy8KICAvLy8gKiBgZm9udFN0eWxlYDogVGhlIHR5cGVmYWNlIHZhcmlhbnQgdG8gdXNlIHdoZW4gZHJhd2luZyB0aGUgbGV0dGVycyAoZS5nLiwKICAvLy8gICBpdGFsaWNzKS4KICAvLy8KICAvLy8gKiBgZm9yY2VTdHJ1dEhlaWdodGA6IFdoZW4gdHJ1ZSwgdGhlIHBhcmFncmFwaCB3aWxsIGZvcmNlIGFsbCBsaW5lcyB0byBiZSBleGFjdGx5CiAgLy8vICAgYChoZWlnaHQgKyBsZWFkaW5nKSAqIGZvbnRTaXplYCB0YWxsIGZyb20gYmFzZWxpbmUgdG8gYmFzZWxpbmUuCiAgLy8vICAgW1RleHRTdHlsZV0gaXMgbm8gbG9uZ2VyIGFibGUgdG8gaW5mbHVlbmNlIHRoZSBsaW5lIGhlaWdodCwgYW5kIGFueSB0YWxsCiAgLy8vICAgZ2x5cGhzIG1heSBvdmVybGFwIHdpdGggbGluZXMgYWJvdmUuIElmIGEgYGZvbnRGYW1pbHlgIGlzIHNwZWNpZmllZCwgdGhlCiAgLy8vICAgdG90YWwgYXNjZW50IG9mIHRoZSBmaXJzdCBsaW5lIHdpbGwgYmUgdGhlIG1pbiBvZiB0aGUgYEFzY2VudCArIGhhbGYtbGVhZGluZ2AKICAvLy8gICBvZiB0aGUgYGZvbnRGYW1pbHlgIGFuZCBgKGhlaWdodCArIGxlYWRpbmcpICogZm9udFNpemVgLiBPdGhlcndpc2UsIGl0CiAgLy8vICAgd2lsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBBc2NlbnQgKyBoYWxmLWxlYWRpbmcgb2YgdGhlIGZpcnN0IHRleHQuCiAgU3RydXRTdHlsZSh7CiAgICBTdHJpbmcgZm9udEZhbWlseSwKICAgIExpc3Q8U3RyaW5nPiBmb250RmFtaWx5RmFsbGJhY2ssCiAgICBkb3VibGUgZm9udFNpemUsCiAgICBkb3VibGUgaGVpZ2h0LAogICAgZG91YmxlIGxlYWRpbmcsCiAgICBGb250V2VpZ2h0IGZvbnRXZWlnaHQsCiAgICBGb250U3R5bGUgZm9udFN0eWxlLAogICAgYm9vbCBmb3JjZVN0cnV0SGVpZ2h0LAogIH0pIDogX2VuY29kZWQgPSBfZW5jb2RlU3RydXQoCiAgICAgICAgIGZvbnRGYW1pbHksCiAgICAgICAgIGZvbnRGYW1pbHlGYWxsYmFjaywKICAgICAgICAgZm9udFNpemUsCiAgICAgICAgIGhlaWdodCwKICAgICAgICAgbGVhZGluZywKICAgICAgICAgZm9udFdlaWdodCwKICAgICAgICAgZm9udFN0eWxlLAogICAgICAgICBmb3JjZVN0cnV0SGVpZ2h0LAogICAgICAgKSwKICAgICAgIF9mb250RmFtaWx5ID0gZm9udEZhbWlseSwKICAgICAgIF9mb250RmFtaWx5RmFsbGJhY2sgPSBmb250RmFtaWx5RmFsbGJhY2s7CgogIGZpbmFsIEJ5dGVEYXRhIF9lbmNvZGVkOyAvLyBNb3N0IG9mIHRoZSBkYXRhIGZvciBzdHJ1dCBpcyBlbmNvZGVkLgogIGZpbmFsIFN0cmluZyBfZm9udEZhbWlseTsKICBmaW5hbCBMaXN0PFN0cmluZz4gX2ZvbnRGYW1pbHlGYWxsYmFjazsKCgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0oZHluYW1pYyBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyLnJ1bnRpbWVUeXBlICE9IHJ1bnRpbWVUeXBlKQogICAgICByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gb3RoZXIgaXMgU3RydXRTdHlsZQogICAgICAgICYmIG90aGVyLl9mb250RmFtaWx5ID09IF9mb250RmFtaWx5CiAgICAgICAgJiYgX2xpc3RFcXVhbHM8U3RyaW5nPihvdGhlci5fZm9udEZhbWlseUZhbGxiYWNrLCBfZm9udEZhbWlseUZhbGxiYWNrKQogICAgICAgICYmIF9saXN0RXF1YWxzPGludD4ob3RoZXIuX2VuY29kZWQuYnVmZmVyLmFzSW50OExpc3QoKSwgX2VuY29kZWQuYnVmZmVyLmFzSW50OExpc3QoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IGhhc2hWYWx1ZXMoaGFzaExpc3QoX2VuY29kZWQuYnVmZmVyLmFzSW50OExpc3QoKSksIF9mb250RmFtaWx5KTsKCn0KCi8vLyBBIGRpcmVjdGlvbiBpbiB3aGljaCB0ZXh0IGZsb3dzLgovLy8KLy8vIFNvbWUgbGFuZ3VhZ2VzIGFyZSB3cml0dGVuIGZyb20gdGhlIGxlZnQgdG8gdGhlIHJpZ2h0IChmb3IgZXhhbXBsZSwgRW5nbGlzaCwKLy8vIFRhbWlsLCBvciBDaGluZXNlKSwgd2hpbGUgb3RoZXJzIGFyZSB3cml0dGVuIGZyb20gdGhlIHJpZ2h0IHRvIHRoZSBsZWZ0IChmb3IKLy8vIGV4YW1wbGUgQXJhbWFpYywgSGVicmV3LCBvciBVcmR1KS4gU29tZSBhcmUgYWxzbyB3cml0dGVuIGluIGEgbWl4dHVyZSwgZm9yCi8vLyBleGFtcGxlIEFyYWJpYyBpcyBtb3N0bHkgd3JpdHRlbiByaWdodC10by1sZWZ0LCB3aXRoIG51bWVyYWxzIHdyaXR0ZW4KLy8vIGxlZnQtdG8tcmlnaHQuCi8vLwovLy8gVGhlIHRleHQgZGlyZWN0aW9uIG11c3QgYmUgcHJvdmlkZWQgdG8gQVBJcyB0aGF0IHJlbmRlciB0ZXh0IG9yIGxheSBvdXQKLy8vIGJveGVzIGhvcml6b250YWxseSwgc28gdGhhdCB0aGV5IGNhbiBkZXRlcm1pbmUgd2hpY2ggZGlyZWN0aW9uIHRvIHN0YXJ0IGluOgovLy8gZWl0aGVyIHJpZ2h0LXRvLWxlZnQsIFtUZXh0RGlyZWN0aW9uLnJ0bF07IG9yIGxlZnQtdG8tcmlnaHQsCi8vLyBbVGV4dERpcmVjdGlvbi5sdHJdLgovLy8KLy8vICMjIERlc2lnbiBkaXNjdXNzaW9uCi8vLwovLy8gRmx1dHRlciBpcyBkZXNpZ25lZCB0byBhZGRyZXNzIHRoZSBuZWVkcyBvZiBhcHBsaWNhdGlvbnMgd3JpdHRlbiBpbiBhbnkgb2YKLy8vIHRoZSB3b3JsZCdzIGN1cnJlbnRseS11c2VkIGxhbmd1YWdlcywgd2hldGhlciB0aGV5IHVzZSBhIHJpZ2h0LXRvLWxlZnQgb3IKLy8vIGxlZnQtdG8tcmlnaHQgd3JpdGluZyBkaXJlY3Rpb24uIEZsdXR0ZXIgZG9lcyBub3Qgc3VwcG9ydCBvdGhlciB3cml0aW5nCi8vLyBtb2Rlcywgc3VjaCBhcyB2ZXJ0aWNhbCB0ZXh0IG9yIGJvdXN0cm9waGVkb24gdGV4dCwgYXMgdGhlc2UgYXJlIHJhcmVseSB1c2VkCi8vLyBpbiBjb21wdXRlciBwcm9ncmFtcy4KLy8vCi8vLyBJdCBpcyBjb21tb24gd2hlbiBkZXZlbG9waW5nIHVzZXIgaW50ZXJmYWNlIGZyYW1ld29ya3MgdG8gcGljayBhIGRlZmF1bHQKLy8vIHRleHQgZGlyZWN0aW9uIOKAlCB0eXBpY2FsbHkgbGVmdC10by1yaWdodCwgdGhlIGRpcmVjdGlvbiBtb3N0IGZhbWlsaWFyIHRvIHRoZQovLy8gZW5naW5lZXJzIHdvcmtpbmcgb24gdGhlIGZyYW1ld29yayDigJQgYmVjYXVzZSB0aGlzIHNpbXBsaWZpZXMgdGhlIGRldmVsb3BtZW50Ci8vLyBvZiBhcHBsaWNhdGlvbnMgb24gdGhlIHBsYXRmb3JtLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGZyZXF1ZW50bHkgcmVzdWx0cyBpbgovLy8gdGhlIHBsYXRmb3JtIGhhdmluZyB1bmV4cGVjdGVkIGxlZnQtdG8tcmlnaHQgYmlhc2VzIG9yIGFzc3VtcHRpb25zLCBhcwovLy8gZW5naW5lZXJzIHdpbGwgdHlwaWNhbGx5IG1pc3MgcGxhY2VzIHdoZXJlIHRoZXkgbmVlZCB0byBzdXBwb3J0Ci8vLyByaWdodC10by1sZWZ0IHRleHQuIFRoaXMgdGhlbiByZXN1bHRzIGluIGJ1Z3MgdGhhdCBvbmx5IG1hbmlmZXN0IGluCi8vLyByaWdodC10by1sZWZ0IGVudmlyb25tZW50cy4KLy8vCi8vLyBJbiBhbiBlZmZvcnQgdG8gbWluaW1pemUgdGhlIGV4dGVudCB0byB3aGljaCBGbHV0dGVyIGV4cGVyaWVuY2VzIHRoaXMKLy8vIGNhdGVnb3J5IG9mIGlzc3VlcywgdGhlIGxvd2VzdCBsZXZlbHMgb2YgdGhlIEZsdXR0ZXIgZnJhbWV3b3JrIGRvIG5vdCBoYXZlIGEKLy8vIGRlZmF1bHQgdGV4dCByZWFkaW5nIGRpcmVjdGlvbi4gQW55IHRpbWUgYSByZWFkaW5nIGRpcmVjdGlvbiBpcyBuZWNlc3NhcnksCi8vLyBmb3IgZXhhbXBsZSB3aGVuIHRleHQgaXMgdG8gYmUgZGlzcGxheWVkLCBvciB3aGVuIGEKLy8vIHdyaXRpbmctZGlyZWN0aW9uLWRlcGVuZGVudCB2YWx1ZSBpcyB0byBiZSBpbnRlcnByZXRlZCwgdGhlIHJlYWRpbmcKLy8vIGRpcmVjdGlvbiBtdXN0IGJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkLiBXaGVyZSBwb3NzaWJsZSwgc3VjaCBhcyBpbiBgc3dpdGNoYAovLy8gc3RhdGVtZW50cywgdGhlIHJpZ2h0LXRvLWxlZnQgY2FzZSBpcyBsaXN0ZWQgZmlyc3QsIHRvIGF2b2lkIHRoZSBpbXByZXNzaW9uCi8vLyB0aGF0IGl0IGlzIGFuIGFmdGVydGhvdWdodC4KLy8vCi8vLyBBdCB0aGUgaGlnaGVyIGxldmVscyAoc3BlY2lmaWNhbGx5IHN0YXJ0aW5nIGF0IHRoZSB3aWRnZXRzIGxpYnJhcnkpLCBhbgovLy8gYW1iaWVudCBbRGlyZWN0aW9uYWxpdHldIGlzIGludHJvZHVjZWQsIHdoaWNoIHByb3ZpZGVzIGEgZGVmYXVsdC4gVGh1cywgZm9yCi8vLyBpbnN0YW5jZSwgYSBbVGV4dF0gd2lkZ2V0IGluIHRoZSBzY29wZSBvZiBhIFtNYXRlcmlhbEFwcF0gd2lkZ2V0IGRvZXMgbm90Ci8vLyBuZWVkIHRvIGJlIGdpdmVuIGFuIGV4cGxpY2l0IHdyaXRpbmcgZGlyZWN0aW9uLiBUaGUgW0RpcmVjdGlvbmFsaXR5Lm9mXQovLy8gc3RhdGljIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBvYnRhaW4gdGhlIGFtYmllbnQgdGV4dCBkaXJlY3Rpb24gZm9yIGEKLy8vIHBhcnRpY3VsYXIgW0J1aWxkQ29udGV4dF0uCi8vLwovLy8gIyMjIEtub3duIGxlZnQtdG8tcmlnaHQgYmlhc2VzIGluIEZsdXR0ZXIKLy8vCi8vLyBEZXNwaXRlIHRoZSBkZXNpZ24gaW50ZW50IGRlc2NyaWJlZCBhYm92ZSwgY2VydGFpbiBsZWZ0LXRvLXJpZ2h0IGJpYXNlcyBoYXZlCi8vLyBub25ldGhlbGVzcyBjcmVwdCBpbnRvIEZsdXR0ZXIncyBkZXNpZ24uIFRoZXNlIGluY2x1ZGU6Ci8vLwovLy8gICogVGhlIFtDYW52YXNdIG9yaWdpbiBpcyBhdCB0aGUgdG9wIGxlZnQsIGFuZCB0aGUgeC1heGlzIGluY3JlYXNlcyBpbiBhCi8vLyAgICBsZWZ0LXRvLXJpZ2h0IGRpcmVjdGlvbi4KLy8vCi8vLyAgKiBUaGUgZGVmYXVsdCBsb2NhbGl6YXRpb24gaW4gdGhlIHdpZGdldHMgYW5kIG1hdGVyaWFsIGxpYnJhcmllcyBpcwovLy8gICAgQW1lcmljYW4gRW5nbGlzaCwgd2hpY2ggaXMgbGVmdC10by1yaWdodC4KLy8vCi8vLyAjIyMgVmlzdWFsIHByb3BlcnRpZXMgdnMgZGlyZWN0aW9uYWwgcHJvcGVydGllcwovLy8KLy8vIE1hbnkgY2xhc3NlcyBpbiB0aGUgRmx1dHRlciBmcmFtZXdvcmsgYXJlIG9mZmVyZWQgaW4gdHdvIHZlcnNpb25zLCBhCi8vLyB2aXN1YWxseS1vcmllbnRlZCB2YXJpYW50LCBhbmQgYSB0ZXh0LWRpcmVjdGlvbi1kZXBlbmRlbnQgdmFyaWFudC4gRm9yCi8vLyBleGFtcGxlLCBbRWRnZUluc2V0c10gaXMgZGVzY3JpYmVkIGluIHRlcm1zIG9mIHRvcCwgbGVmdCwgcmlnaHQsIGFuZCBib3R0b20sCi8vLyB3aGlsZSBbRWRnZUluc2V0c0RpcmVjdGlvbmFsXSBpcyBkZXNjcmliZWQgaW4gdGVybXMgb2YgdG9wLCBzdGFydCwgZW5kLCBhbmQKLy8vIGJvdHRvbSwgd2hlcmUgc3RhcnQgYW5kIGVuZCBjb3JyZXNwb25kIHRvIHJpZ2h0IGFuZCBsZWZ0IGluIHJpZ2h0LXRvLWxlZnQKLy8vIHRleHQgYW5kIGxlZnQgYW5kIHJpZ2h0IGluIGxlZnQtdG8tcmlnaHQgdGV4dC4KLy8vCi8vLyBUaGVyZSBhcmUgZGlzdGluY3QgdXNlIGNhc2VzIGZvciBlYWNoIG9mIHRoZXNlIHZhcmlhbnRzLgovLy8KLy8vIFRleHQtZGlyZWN0aW9uLWRlcGVuZGVudCB2YXJpYW50cyBhcmUgdXNlZnVsIHdoZW4gZGV2ZWxvcGluZyB1c2VyIGludGVyZmFjZXMKLy8vIHRoYXQgc2hvdWxkICJmbGlwIiB3aXRoIHRoZSB0ZXh0IGRpcmVjdGlvbi4gRm9yIGV4YW1wbGUsIGEgcGFyYWdyYXBoIG9mIHRleHQKLy8vIGluIEVuZ2xpc2ggd2lsbCB0eXBpY2FsbHkgYmUgbGVmdC1hbGlnbmVkIGFuZCBhIHF1b3RlIHdpbGwgYmUgaW5kZW50ZWQgZnJvbQovLy8gdGhlIGxlZnQsIHdoaWxlIGluIEFyYWJpYyBpdCB3aWxsIGJlIHJpZ2h0LWFsaWduZWQgYW5kIGluZGVudGVkIGZyb20gdGhlCi8vLyByaWdodC4gQm90aCBvZiB0aGVzZSBjYXNlcyBhcmUgZGVzY3JpYmVkIGJ5IHRoZSBkaXJlY3Rpb24tZGVwZW5kZW50Ci8vLyBbVGV4dEFsaWduLnN0YXJ0XSBhbmQgW0VkZ2VJbnNldHNEaXJlY3Rpb25hbC5zdGFydF0uCi8vLwovLy8gSW4gY29udHJhc3QsIHRoZSB2aXN1YWwgdmFyaWFudHMgYXJlIHVzZWZ1bCB3aGVuIHRoZSB0ZXh0IGRpcmVjdGlvbiBpcyBrbm93bgovLy8gYW5kIG5vdCBhZmZlY3RlZCBieSB0aGUgcmVhZGluZyBkaXJlY3Rpb24uIEZvciBleGFtcGxlLCBhbiBhcHBsaWNhdGlvbgovLy8gZ2l2aW5nIGRyaXZpbmcgZGlyZWN0aW9ucyBtaWdodCBzaG93IGEgInR1cm4gbGVmdCIgYXJyb3cgb24gdGhlIGxlZnQgYW5kIGEKLy8vICJ0dXJuIHJpZ2h0IiBhcnJvdyBvbiB0aGUgcmlnaHQg4oCUIGFuZCB3b3VsZCBkbyBzbyB3aGV0aGVyIHRoZSBhcHBsaWNhdGlvbgovLy8gd2FzIGxvY2FsaXplZCB0byBGcmVuY2ggKGxlZnQtdG8tcmlnaHQpIG9yIEhlYnJldyAocmlnaHQtdG8tbGVmdCkuCi8vLwovLy8gSW4gcHJhY3RpY2UsIGl0IGlzIGFsc28gZXhwZWN0ZWQgdGhhdCBtYW55IGRldmVsb3BlcnMgd2lsbCBvbmx5IGJlCi8vLyB0YXJnZXRpbmcgb25lIGxhbmd1YWdlLCBhbmQgaW4gdGhhdCBjYXNlIGl0IG1heSBiZSBzaW1wbGVyIHRvIHRoaW5rIGluCi8vLyB2aXN1YWwgdGVybXMuCi8vIFRoZSBvcmRlciBvZiB0aGlzIGVudW0gbXVzdCBtYXRjaCB0aGUgb3JkZXIgb2YgdGhlIHZhbHVlcyBpbiBUZXh0RGlyZWN0aW9uLmgncyBUZXh0RGlyZWN0aW9uLgplbnVtIFRleHREaXJlY3Rpb24gewogIC8vLyBUaGUgdGV4dCBmbG93cyBmcm9tIHJpZ2h0IHRvIGxlZnQgKGUuZy4gQXJhYmljLCBIZWJyZXcpLgogIHJ0bCwKCiAgLy8vIFRoZSB0ZXh0IGZsb3dzIGZyb20gbGVmdCB0byByaWdodCAoZS5nLiwgRW5nbGlzaCwgRnJlbmNoKS4KICBsdHIsCn0KCi8vLyBBIHJlY3RhbmdsZSBlbmNsb3NpbmcgYSBydW4gb2YgdGV4dC4KLy8vCi8vLyBUaGlzIGlzIHNpbWlsYXIgdG8gW1JlY3RdIGJ1dCBpbmNsdWRlcyBhbiBpbmhlcmVudCBbVGV4dERpcmVjdGlvbl0uCkBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKY2xhc3MgVGV4dEJveCB7CiAgLy8vIENyZWF0ZXMgYW4gb2JqZWN0IHRoYXQgZGVzY3JpYmVzIGEgYm94IGNvbnRhaW5pbmcgdGV4dC4KICBjb25zdCBUZXh0Qm94LmZyb21MVFJCRCgKICAgIHRoaXMubGVmdCwKICAgIHRoaXMudG9wLAogICAgdGhpcy5yaWdodCwKICAgIHRoaXMuYm90dG9tLAogICAgdGhpcy5kaXJlY3Rpb24sCiAgKTsKCiAgQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQogIC8vIGlnbm9yZTogdW51c2VkX2VsZW1lbnQKICBUZXh0Qm94Ll8oCiAgICB0aGlzLmxlZnQsCiAgICB0aGlzLnRvcCwKICAgIHRoaXMucmlnaHQsCiAgICB0aGlzLmJvdHRvbSwKICAgIGludCBkaXJlY3Rpb25JbmRleCwKICApIDogZGlyZWN0aW9uID0gVGV4dERpcmVjdGlvbi52YWx1ZXNbZGlyZWN0aW9uSW5kZXhdOwoKICAvLy8gVGhlIGxlZnQgZWRnZSBvZiB0aGUgdGV4dCBib3gsIGlycmVzcGVjdGl2ZSBvZiBkaXJlY3Rpb24uCiAgLy8vCiAgLy8vIFRvIGdldCB0aGUgbGVhZGluZyBlZGdlICh3aGljaCBtYXkgZGVwZW5kIG9uIHRoZSBbZGlyZWN0aW9uXSksIGNvbnNpZGVyIFtzdGFydF0uCiAgZmluYWwgZG91YmxlIGxlZnQ7CgogIC8vLyBUaGUgdG9wIGVkZ2Ugb2YgdGhlIHRleHQgYm94LgogIGZpbmFsIGRvdWJsZSB0b3A7CgogIC8vLyBUaGUgcmlnaHQgZWRnZSBvZiB0aGUgdGV4dCBib3gsIGlycmVzcGVjdGl2ZSBvZiBkaXJlY3Rpb24uCiAgLy8vCiAgLy8vIFRvIGdldCB0aGUgdHJhaWxpbmcgZWRnZSAod2hpY2ggbWF5IGRlcGVuZCBvbiB0aGUgW2RpcmVjdGlvbl0pLCBjb25zaWRlciBbZW5kXS4KICBmaW5hbCBkb3VibGUgcmlnaHQ7CgogIC8vLyBUaGUgYm90dG9tIGVkZ2Ugb2YgdGhlIHRleHQgYm94LgogIGZpbmFsIGRvdWJsZSBib3R0b207CgogIC8vLyBUaGUgZGlyZWN0aW9uIGluIHdoaWNoIHRleHQgaW5zaWRlIHRoaXMgYm94IGZsb3dzLgogIGZpbmFsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uOwoKICAvLy8gUmV0dXJucyBhIHJlY3Qgb2YgdGhlIHNhbWUgc2l6ZSBhcyB0aGlzIGJveC4KICBSZWN0IHRvUmVjdCgpID0+IFJlY3QuZnJvbUxUUkIobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKCiAgLy8vIFRoZSBbbGVmdF0gZWRnZSBvZiB0aGUgYm94IGZvciBsZWZ0LXRvLXJpZ2h0IHRleHQ7IHRoZSBbcmlnaHRdIGVkZ2Ugb2YgdGhlIGJveCBmb3IgcmlnaHQtdG8tbGVmdCB0ZXh0LgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gICogW2RpcmVjdGlvbl0sIHdoaWNoIHNwZWNpZmllcyB0aGUgdGV4dCBkaXJlY3Rpb24uCiAgZG91YmxlIGdldCBzdGFydCB7CiAgICByZXR1cm4gKGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uLmx0cikgPyBsZWZ0IDogcmlnaHQ7CiAgfQoKICAvLy8gVGhlIFtyaWdodF0gZWRnZSBvZiB0aGUgYm94IGZvciBsZWZ0LXRvLXJpZ2h0IHRleHQ7IHRoZSBbbGVmdF0gZWRnZSBvZiB0aGUgYm94IGZvciByaWdodC10by1sZWZ0IHRleHQuCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgKiBbZGlyZWN0aW9uXSwgd2hpY2ggc3BlY2lmaWVzIHRoZSB0ZXh0IGRpcmVjdGlvbi4KICBkb3VibGUgZ2V0IGVuZCB7CiAgICByZXR1cm4gKGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uLmx0cikgPyByaWdodCA6IGxlZnQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KGR5bmFtaWMgb3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlci5ydW50aW1lVHlwZSAhPSBydW50aW1lVHlwZSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIG90aGVyIGlzIFRleHRCb3gKICAgICAgICAmJiBvdGhlci5sZWZ0ID09IGxlZnQKICAgICAgICAmJiBvdGhlci50b3AgPT0gdG9wCiAgICAgICAgJiYgb3RoZXIucmlnaHQgPT0gcmlnaHQKICAgICAgICAmJiBvdGhlci5ib3R0b20gPT0gYm90dG9tCiAgICAgICAgJiYgb3RoZXIuZGlyZWN0aW9uID09IGRpcmVjdGlvbjsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gaGFzaFZhbHVlcyhsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIGRpcmVjdGlvbik7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdUZXh0Qm94LmZyb21MVFJCRCgke2xlZnQudG9TdHJpbmdBc0ZpeGVkKDEpfSwgJHt0b3AudG9TdHJpbmdBc0ZpeGVkKDEpfSwgJHtyaWdodC50b1N0cmluZ0FzRml4ZWQoMSl9LCAke2JvdHRvbS50b1N0cmluZ0FzRml4ZWQoMSl9LCAkZGlyZWN0aW9uKSc7Cn0KCi8vLyBBIHdheSB0byBkaXNhbWJpZ3VhdGUgYSBbVGV4dFBvc2l0aW9uXSB3aGVuIGl0cyBvZmZzZXQgY291bGQgbWF0Y2ggdHdvCi8vLyBkaWZmZXJlbnQgbG9jYXRpb25zIGluIHRoZSByZW5kZXJlZCBzdHJpbmcuCi8vLwovLy8gRm9yIGV4YW1wbGUsIGF0IGFuIG9mZnNldCB3aGVyZSB0aGUgcmVuZGVyZWQgdGV4dCB3cmFwcywgdGhlcmUgYXJlIHR3bwovLy8gdmlzdWFsIHBvc2l0aW9ucyB0aGF0IHRoZSBvZmZzZXQgY291bGQgcmVwcmVzZW50OiBvbmUgcHJpb3IgdG8gdGhlIGxpbmUKLy8vIGJyZWFrIChhdCB0aGUgZW5kIG9mIHRoZSBmaXJzdCBsaW5lKSBhbmQgb25lIGFmdGVyIHRoZSBsaW5lIGJyZWFrIChhdCB0aGUKLy8vIHN0YXJ0IG9mIHRoZSBzZWNvbmQgbGluZSkuIEEgdGV4dCBhZmZpbml0eSBkaXNhbWJpZ3VhdGVzIGJldHdlZW4gdGhlc2UgdHdvCi8vLyBjYXNlcy4KLy8vCi8vLyBUaGlzIGFmZmVjdHMgb25seSBsaW5lIGJyZWFrcyBjYXVzZWQgYnkgd3JhcHBpbmcsIG5vdCBleHBsaWNpdCBuZXdsaW5lCi8vLyBjaGFyYWN0ZXJzLiBGb3IgbmV3bGluZSBjaGFyYWN0ZXJzLCB0aGUgcG9zaXRpb24gaXMgZnVsbHkgc3BlY2lmaWVkIGJ5IHRoZQovLy8gb2Zmc2V0IGFsb25lLCBhbmQgdGhlcmUgaXMgbm8gYW1iaWd1aXR5LgovLy8KLy8vIFtUZXh0QWZmaW5pdHldIGFsc28gYWZmZWN0cyBiaWRpcmVjdGlvbmFsIHRleHQgYXQgdGhlIGludGVyZmFjZSBiZXR3ZWVuIExUUgovLy8gYW5kIFJUTCB0ZXh0LiBDb25zaWRlciB0aGUgZm9sbG93aW5nIHN0cmluZywgd2hlcmUgdGhlIGxvd2VyY2FzZSBsZXR0ZXJzCi8vLyB3aWxsIGJlIGRpc3BsYXllZCBhcyBMVFIgYW5kIHRoZSB1cHBlcmNhc2UgbGV0dGVycyBSVEw6ICJoZWxsb0hFTExPIi4gIFdoZW4KLy8vIHJlbmRlcmVkLCB0aGUgc3RyaW5nIHdvdWxkIGFwcGVhciB2aXN1YWxseSBhcyAiaGVsbG9PTExFSCIuICBBbiBvZmZzZXQgb2YgNQovLy8gd291bGQgYmUgYW1iaWd1b3VzIHdpdGhvdXQgYSBjb3JyZXNwb25kaW5nIFtUZXh0QWZmaW5pdHldLiAgTG9va2luZyBhdCB0aGUKLy8vIHN0cmluZyBpbiBjb2RlLCB0aGUgb2Zmc2V0IHJlcHJlc2VudHMgdGhlIHBvc2l0aW9uIGp1c3QgYWZ0ZXIgdGhlICJvIiBhbmQKLy8vIGp1c3QgYmVmb3JlIHRoZSAiSCIuICBXaGVuIHJlbmRlcmVkLCB0aGlzIG9mZnNldCBjb3VsZCBiZSBlaXRoZXIgaW4gdGhlCi8vLyBtaWRkbGUgb2YgdGhlIHN0cmluZyB0byB0aGUgcmlnaHQgb2YgdGhlICJvIiBvciBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgdG8KLy8vIHRoZSByaWdodCBvZiB0aGUgIkgiLgplbnVtIFRleHRBZmZpbml0eSB7CiAgLy8vIFRoZSBwb3NpdGlvbiBoYXMgYWZmaW5pdHkgZm9yIHRoZSB1cHN0cmVhbSBzaWRlIG9mIHRoZSB0ZXh0IHBvc2l0aW9uLCBpLmUuCiAgLy8vIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLgogIC8vLwogIC8vLyBJbiB0aGUgZXhhbXBsZSBvZiBhbiBvZmZzZXQgYXQgdGhlIHBsYWNlIHdoZXJlIHRleHQgaXMgd3JhcHBpbmcsIHVwc3RyZWFtCiAgLy8vIGluZGljYXRlcyB0aGUgZW5kIG9mIHRoZSBmaXJzdCBsaW5lLgogIC8vLwogIC8vLyBJbiB0aGUgYmlkaXJlY3Rpb25hbCB0ZXh0IGV4YW1wbGUgImhlbGxvSEVMTE8iLCBhbiBvZmZzZXQgb2YgNSB3aXRoCiAgLy8vIFtUZXh0QWZmaW5pdHldIHVwc3RyZWFtIHdvdWxkIGFwcGVhciBpbiB0aGUgbWlkZGxlIG9mIHRoZSByZW5kZXJlZCB0ZXh0LAogIC8vLyBqdXN0IHRvIHRoZSByaWdodCBvZiB0aGUgIm8iLiBTZWUgdGhlIGRlZmluaXRpb24gb2YgW1RleHRBZmZpbml0eV0gZm9yIHRoZQogIC8vLyBmdWxsIGV4YW1wbGUuCiAgdXBzdHJlYW0sCgogIC8vLyBUaGUgcG9zaXRpb24gaGFzIGFmZmluaXR5IGZvciB0aGUgZG93bnN0cmVhbSBzaWRlIG9mIHRoZSB0ZXh0IHBvc2l0aW9uLAogIC8vLyBpLmUuIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLgogIC8vLwogIC8vLyBJbiB0aGUgZXhhbXBsZSBvZiBhbiBvZmZzZXQgYXQgdGhlIHBsYWNlIHdoZXJlIHRleHQgaXMgd3JhcHBpbmcsCiAgLy8vIGRvd25zdHJlYW0gaW5kaWNhdGVzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlY29uZCBsaW5lLgogIC8vLwogIC8vLyBJbiB0aGUgYmlkaXJlY3Rpb25hbCB0ZXh0IGV4YW1wbGUgImhlbGxvSEVMTE8iLCBhbiBvZmZzZXQgb2YgNSB3aXRoCiAgLy8vIFtUZXh0QWZmaW5pdHldIGRvd25zdHJlYW0gd291bGQgYXBwZWFyIGF0IHRoZSBlbmQgb2YgdGhlIHJlbmRlcmVkIHRleHQsCiAgLy8vIGp1c3QgdG8gdGhlIHJpZ2h0IG9mIHRoZSAiSCIuIFNlZSB0aGUgZGVmaW5pdGlvbiBvZiBbVGV4dEFmZmluaXR5XSBmb3IgdGhlCiAgLy8vIGZ1bGwgZXhhbXBsZS4KICBkb3duc3RyZWFtLAp9CgovLy8gQSBwb3NpdGlvbiBpbiBhIHN0cmluZyBvZiB0ZXh0LgovLy8KLy8vIEEgVGV4dFBvc2l0aW9uIGNhbiBiZSB1c2VkIHRvIGxvY2F0ZSBhIHBvc2l0aW9uIGluIGEgc3RyaW5nIGluIGNvZGUgKHVzaW5nCi8vLyB0aGUgW29mZnNldF0gcHJvcGVydHkpLCBhbmQgaXQgY2FuIGFsc28gYmUgdXNlZCB0byBsb2NhdGUgdGhlIHNhbWUgcG9zaXRpb24KLy8vIHZpc3VhbGx5IGluIGEgcmVuZGVyZWQgc3RyaW5nIG9mIHRleHQgKHVzaW5nIFtvZmZzZXRdIGFuZCwgd2hlbiBuZWVkZWQgdG8KLy8vIHJlc29sdmUgYW1iaWd1aXR5LCBbYWZmaW5pdHldKS4KLy8vCi8vLyBUaGUgbG9jYXRpb24gb2YgYW4gb2Zmc2V0IGluIGEgcmVuZGVyZWQgc3RyaW5nIGlzIGFtYmlndW91cyBpbiB0d28gY2FzZXMuCi8vLyBPbmUgaGFwcGVucyB3aGVuIHJlbmRlcmVkIHRleHQgaXMgZm9yY2VkIHRvIHdyYXAuIEluIHRoaXMgY2FzZSwgdGhlIG9mZnNldAovLy8gd2hlcmUgdGhlIHdyYXAgb2NjdXJzIGNvdWxkIHZpc3VhbGx5IGFwcGVhciBlaXRoZXIgYXQgdGhlIGVuZCBvZiB0aGUgZmlyc3QKLy8vIGxpbmUgb3IgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2Vjb25kIGxpbmUuIFRoZSBzZWNvbmQgd2F5IGlzIHdpdGgKLy8vIGJpZGlyZWN0aW9uYWwgdGV4dC4gIEFuIG9mZnNldCBhdCB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdHdvIGRpZmZlcmVudCB0ZXh0Ci8vLyBkaXJlY3Rpb25zIGNvdWxkIGhhdmUgb25lIG9mIHR3byBsb2NhdGlvbnMgaW4gdGhlIHJlbmRlcmVkIHRleHQuCi8vLwovLy8gU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBbVGV4dEFmZmluaXR5XSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cKLy8vIFRleHRBZmZpbml0eSBkaXNhbWJpZ3VhdGVzIHNpdHVhdGlvbnMgbGlrZSB0aGVzZS4KY2xhc3MgVGV4dFBvc2l0aW9uIHsKICAvLy8gQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgcGFydGljdWxhciBwb3NpdGlvbiBpbiBhIHN0cmluZy4KICAvLy8KICAvLy8gVGhlIGFyZ3VtZW50cyBtdXN0IG5vdCBiZSBudWxsIChzbyB0aGUgW29mZnNldF0gYXJndW1lbnQgaXMgcmVxdWlyZWQpLgogIGNvbnN0IFRleHRQb3NpdGlvbih7CiAgICB0aGlzLm9mZnNldCwKICAgIHRoaXMuYWZmaW5pdHkgPSBUZXh0QWZmaW5pdHkuZG93bnN0cmVhbSwKICB9KSA6IGFzc2VydChvZmZzZXQgIT0gbnVsbCksCiAgICAgICBhc3NlcnQoYWZmaW5pdHkgIT0gbnVsbCk7CgogIC8vLyBUaGUgaW5kZXggb2YgdGhlIGNoYXJhY3RlciB0aGF0IGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIHBvc2l0aW9uIGluIHRoZQogIC8vLyBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRleHQuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCBnaXZlbiB0aGUgc3RyaW5nIGAnSGVsbG8nYCwgb2Zmc2V0IDAgcmVwcmVzZW50cyB0aGUgY3Vyc29yCiAgLy8vIGJlaW5nIGJlZm9yZSB0aGUgYEhgLCB3aGlsZSBvZmZzZXQgNSByZXByZXNlbnRzIHRoZSBjdXJzb3IgYmVpbmcganVzdAogIC8vLyBhZnRlciB0aGUgYG9gLgogIGZpbmFsIGludCBvZmZzZXQ7CgogIC8vLyBEaXNhbWJpZ3VhdGVzIGNhc2VzIHdoZXJlIHRoZSBwb3NpdGlvbiBpbiB0aGUgc3RyaW5nIGdpdmVuIGJ5IFtvZmZzZXRdCiAgLy8vIGNvdWxkIHJlcHJlc2VudCB0d28gZGlmZmVyZW50IHZpc3VhbCBwb3NpdGlvbnMgaW4gdGhlIHJlbmRlcmVkIHRleHQuIEZvcgogIC8vLyBleGFtcGxlLCB0aGlzIGNhbiBoYXBwZW4gd2hlbiB0ZXh0IGlzIGZvcmNlZCB0byB3cmFwLCBvciB3aGVuIG9uZSBzdHJpbmcKICAvLy8gb2YgdGV4dCBpcyByZW5kZXJlZCB3aXRoIG11bHRpcGxlIHRleHQgZGlyZWN0aW9ucy4KICAvLy8KICAvLy8gU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBbVGV4dEFmZmluaXR5XSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cKICAvLy8gVGV4dEFmZmluaXR5IGRpc2FtYmlndWF0ZXMgc2l0dWF0aW9ucyBsaWtlIHRoZXNlLgogIGZpbmFsIFRleHRBZmZpbml0eSBhZmZpbml0eTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShkeW5hbWljIG90aGVyKSB7CiAgICBpZiAob3RoZXIucnVudGltZVR5cGUgIT0gcnVudGltZVR5cGUpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBvdGhlciBpcyBUZXh0UG9zaXRpb24KICAgICAgICAmJiBvdGhlci5vZmZzZXQgPT0gb2Zmc2V0CiAgICAgICAgJiYgb3RoZXIuYWZmaW5pdHkgPT0gYWZmaW5pdHk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IGhhc2hWYWx1ZXMob2Zmc2V0LCBhZmZpbml0eSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnVGV4dFBvc2l0aW9uKG9mZnNldDogJG9mZnNldCwgYWZmaW5pdHk6ICRhZmZpbml0eSknOwogIH0KfQoKLy8vIEEgcmFuZ2Ugb2YgY2hhcmFjdGVycyBpbiBhIHN0cmluZyBvZiB0ZXh0LgpjbGFzcyBUZXh0UmFuZ2UgewogIC8vLyBDcmVhdGVzIGEgdGV4dCByYW5nZS4KICAvLy8KICAvLy8gVGhlIFtzdGFydF0gYW5kIFtlbmRdIGFyZ3VtZW50cyBtdXN0IG5vdCBiZSBudWxsLiBCb3RoIHRoZSBbc3RhcnRdIGFuZAogIC8vLyBbZW5kXSBtdXN0IGVpdGhlciBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVybyBvciBib3RoIGV4YWN0bHkgLTEuCiAgLy8vCiAgLy8vIFRoZSB0ZXh0IGluY2x1ZGVkIGluIHRoZSByYW5nZSBpbmNsdWRlcyB0aGUgY2hhcmFjdGVyIGF0IFtzdGFydF0sIGJ1dCBub3QKICAvLy8gdGhlIG9uZSBhdCBbZW5kXS4KICAvLy8KICAvLy8gSW5zdGVhZCBvZiBjcmVhdGluZyBhbiBlbXB0eSB0ZXh0IHJhbmdlLCBjb25zaWRlciB1c2luZyB0aGUgW2VtcHR5XQogIC8vLyBjb25zdGFudC4KICBjb25zdCBUZXh0UmFuZ2UoewogICAgdGhpcy5zdGFydCwKICAgIHRoaXMuZW5kLAogIH0pIDogYXNzZXJ0KHN0YXJ0ICE9IG51bGwgJiYgc3RhcnQgPj0gLTEpLAogICAgICAgIGFzc2VydChlbmQgIT0gbnVsbCAmJiBlbmQgPj0gLTEpOwoKICAvLy8gQSB0ZXh0IHJhbmdlIHRoYXQgc3RhcnRzIGFuZCBlbmRzIGF0IG9mZnNldC4KICAvLy8KICAvLy8gVGhlIFtvZmZzZXRdIGFyZ3VtZW50IG11c3QgYmUgbm9uLW51bGwgYW5kIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAtMS4KICBjb25zdCBUZXh0UmFuZ2UuY29sbGFwc2VkKGludCBvZmZzZXQpCiAgICAgIDogYXNzZXJ0KG9mZnNldCAhPSBudWxsICYmIG9mZnNldCA+PSAtMSksCiAgICAgICAgc3RhcnQgPSBvZmZzZXQsCiAgICAgICAgZW5kID0gb2Zmc2V0OwoKICAvLy8gQSB0ZXh0IHJhbmdlIHRoYXQgY29udGFpbnMgbm90aGluZyBhbmQgaXMgbm90IGluIHRoZSB0ZXh0LgogIHN0YXRpYyBjb25zdCBUZXh0UmFuZ2UgZW1wdHkgPSBUZXh0UmFuZ2Uoc3RhcnQ6IC0xLCBlbmQ6IC0xKTsKCiAgLy8vIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSByYW5nZS4KICAvLy8KICAvLy8gSWYgW3N0YXJ0XSBhbmQgW2VuZF0gYXJlIGJvdGggLTEsIHRoZSB0ZXh0IHJhbmdlIGlzIGVtcHR5LgogIGZpbmFsIGludCBzdGFydDsKCiAgLy8vIFRoZSBuZXh0IGluZGV4IGFmdGVyIHRoZSBjaGFyYWN0ZXJzIGluIHRoaXMgcmFuZ2UuCiAgLy8vCiAgLy8vIElmIFtzdGFydF0gYW5kIFtlbmRdIGFyZSBib3RoIC0xLCB0aGUgdGV4dCByYW5nZSBpcyBlbXB0eS4KICBmaW5hbCBpbnQgZW5kOwoKICAvLy8gV2hldGhlciB0aGlzIHJhbmdlIHJlcHJlc2VudHMgYSB2YWxpZCBwb3NpdGlvbiBpbiB0aGUgdGV4dC4KICBib29sIGdldCBpc1ZhbGlkID0+IHN0YXJ0ID49IDAgJiYgZW5kID49IDA7CgogIC8vLyBXaGV0aGVyIHRoaXMgcmFuZ2UgaXMgZW1wdHkgKGJ1dCBzdGlsbCBwb3RlbnRpYWxseSBwbGFjZWQgaW5zaWRlIHRoZSB0ZXh0KS4KICBib29sIGdldCBpc0NvbGxhcHNlZCA9PiBzdGFydCA9PSBlbmQ7CgogIC8vLyBXaGV0aGVyIHRoZSBzdGFydCBvZiB0aGlzIHJhbmdlIHByZWNlZGVzIHRoZSBlbmQuCiAgYm9vbCBnZXQgaXNOb3JtYWxpemVkID0+IGVuZCA+PSBzdGFydDsKCiAgLy8vIFRoZSB0ZXh0IGJlZm9yZSB0aGlzIHJhbmdlLgogIFN0cmluZyB0ZXh0QmVmb3JlKFN0cmluZyB0ZXh0KSB7CiAgICBhc3NlcnQoaXNOb3JtYWxpemVkKTsKICAgIHJldHVybiB0ZXh0LnN1YnN0cmluZygwLCBzdGFydCk7CiAgfQoKICAvLy8gVGhlIHRleHQgYWZ0ZXIgdGhpcyByYW5nZS4KICBTdHJpbmcgdGV4dEFmdGVyKFN0cmluZyB0ZXh0KSB7CiAgICBhc3NlcnQoaXNOb3JtYWxpemVkKTsKICAgIHJldHVybiB0ZXh0LnN1YnN0cmluZyhlbmQpOwogIH0KCiAgLy8vIFRoZSB0ZXh0IGluc2lkZSB0aGlzIHJhbmdlLgogIFN0cmluZyB0ZXh0SW5zaWRlKFN0cmluZyB0ZXh0KSB7CiAgICBhc3NlcnQoaXNOb3JtYWxpemVkKTsKICAgIHJldHVybiB0ZXh0LnN1YnN0cmluZyhzdGFydCwgZW5kKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0oZHluYW1pYyBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpCiAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIG90aGVyIGlzIFRleHRSYW5nZQogICAgICAgICYmIG90aGVyLnN0YXJ0ID09IHN0YXJ0CiAgICAgICAgJiYgb3RoZXIuZW5kID09IGVuZDsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gaGFzaFZhbHVlcygKICAgIHN0YXJ0Lmhhc2hDb2RlLAogICAgZW5kLmhhc2hDb2RlLAogICk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdUZXh0UmFuZ2Uoc3RhcnQ6ICRzdGFydCwgZW5kOiAkZW5kKSc7Cn0KCi8vLyBMYXlvdXQgY29uc3RyYWludHMgZm9yIFtQYXJhZ3JhcGhdIG9iamVjdHMuCi8vLwovLy8gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgYXJlIHR5cGljYWxseSB1c2VkIHdpdGggW1BhcmFncmFwaC5sYXlvdXRdLgovLy8KLy8vIFRoZSBvbmx5IGNvbnN0cmFpbnQgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGlzIHRoZSBbd2lkdGhdLiBTZWUgdGhlIGRpc2N1c3Npb24KLy8vIGF0IFt3aWR0aF0gZm9yIG1vcmUgZGV0YWlscy4KY2xhc3MgUGFyYWdyYXBoQ29uc3RyYWludHMgewogIC8vLyBDcmVhdGVzIGNvbnN0cmFpbnRzIGZvciBsYXlpbmcgb3V0IGEgcGFyYWdyYXBoLgogIC8vLwogIC8vLyBUaGUgW3dpZHRoXSBhcmd1bWVudCBtdXN0IG5vdCBiZSBudWxsLgogIGNvbnN0IFBhcmFncmFwaENvbnN0cmFpbnRzKHsKICAgIHRoaXMud2lkdGgsCiAgfSkgOiBhc3NlcnQod2lkdGggIT0gbnVsbCk7CgogIC8vLyBUaGUgd2lkdGggdGhlIHBhcmFncmFwaCBzaG91bGQgdXNlIHdoZXkgY29tcHV0aW5nIHRoZSBwb3NpdGlvbnMgb2YgZ2x5cGhzLgogIC8vLwogIC8vLyBJZiBwb3NzaWJsZSwgdGhlIHBhcmFncmFwaCB3aWxsIHNlbGVjdCBhIHNvZnQgbGluZSBicmVhayBwcmlvciB0byByZWFjaGluZwogIC8vLyB0aGlzIHdpZHRoLiBJZiBubyBzb2Z0IGxpbmUgYnJlYWsgaXMgYXZhaWxhYmxlLCB0aGUgcGFyYWdyYXBoIHdpbGwgc2VsZWN0CiAgLy8vIGEgaGFyZCBsaW5lIGJyZWFrIHByaW9yIHRvIHJlYWNoaW5nIHRoaXMgd2lkdGguIElmIHRoYXQgd291bGQgZm9yY2UgYSBsaW5lCiAgLy8vIGJyZWFrIHdpdGhvdXQgYW55IGNoYXJhY3RlcnMgaGF2aW5nIGJlZW4gcGxhY2VkIChpLmUuIGlmIHRoZSBuZXh0CiAgLy8vIGNoYXJhY3RlciB0byBiZSBsYWlkIG91dCBkb2VzIG5vdCBmaXQgd2l0aGluIHRoZSBnaXZlbiB3aWR0aCBjb25zdHJhaW50KQogIC8vLyB0aGVuIHRoZSBuZXh0IGNoYXJhY3RlciBpcyBhbGxvd2VkIHRvIG92ZXJmbG93IHRoZSB3aWR0aCBjb25zdHJhaW50IGFuZCBhCiAgLy8vIGZvcmNlZCBsaW5lIGJyZWFrIGlzIHBsYWNlZCBhZnRlciBpdCAoZXZlbiBpZiBhbiBleHBsaWNpdCBsaW5lIGJyZWFrCiAgLy8vIGZvbGxvd3MpLgogIC8vLwogIC8vLyBUaGUgd2lkdGggaW5mbHVlbmNlcyBob3cgZWxsaXBzZXMgYXJlIGFwcGxpZWQuIFNlZSB0aGUgZGlzY3Vzc2lvbiBhdAogIC8vLyBbbmV3IFBhcmFncmFwaFN0eWxlXSBmb3IgbW9yZSBkZXRhaWxzLgogIC8vLwogIC8vLyBUaGlzIHdpZHRoIGlzIGFsc28gdXNlZCB0byBwb3NpdGlvbiBnbHlwaHMgYWNjb3JkaW5nIHRvIHRoZSBbVGV4dEFsaWduXQogIC8vLyBhbGlnbm1lbnQgZGVzY3JpYmVkIGluIHRoZSBbUGFyYWdyYXBoU3R5bGVdIHVzZWQgd2hlbiBidWlsZGluZyB0aGUKICAvLy8gW1BhcmFncmFwaF0gd2l0aCBhIFtQYXJhZ3JhcGhCdWlsZGVyXS4KICBmaW5hbCBkb3VibGUgd2lkdGg7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0oZHluYW1pYyBvdGhlcikgewogICAgaWYgKG90aGVyLnJ1bnRpbWVUeXBlICE9IHJ1bnRpbWVUeXBlKQogICAgICByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gb3RoZXIgaXMgUGFyYWdyYXBoQ29uc3RyYWludHMKICAgICAgICAmJiBvdGhlci53aWR0aCA9PSB3aWR0aDsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gd2lkdGguaGFzaENvZGU7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdQYXJhZ3JhcGhDb25zdHJhaW50cyh3aWR0aDogJHdpZHRoKSc7Cn0KCi8vLyBEZWZpbmVzIHZhcmlvdXMgd2F5cyB0byB2ZXJ0aWNhbGx5IGJvdW5kIHRoZSBib3hlcyByZXR1cm5lZCBieQovLy8gW1BhcmFncmFwaC5nZXRCb3hlc0ZvclJhbmdlXS4KLy8vCi8vLyBTZWUgW0JveFdpZHRoU3R5bGVdIGZvciBhIHNpbWlsYXIgcHJvcGVydHkgdG8gY29udHJvbCB3aWR0aC4KZW51bSBCb3hIZWlnaHRTdHlsZSB7CiAgLy8vIFByb3ZpZGUgdGlnaHQgYm91bmRpbmcgYm94ZXMgdGhhdCBmaXQgaGVpZ2h0cyBwZXIgcnVuLiBUaGlzIHN0eWxlIG1heSByZXN1bHQKICAvLy8gaW4gdW5ldmVuIGJvdW5kaW5nIGJveGVzIHRoYXQgZG8gbm90IG5pY2VseSBjb25uZWN0IHdpdGggYWRqYWNlbnQgYm94ZXMuCiAgdGlnaHQsCgogIC8vLyBUaGUgaGVpZ2h0IG9mIHRoZSBib3hlcyB3aWxsIGJlIHRoZSBtYXhpbXVtIGhlaWdodCBvZiBhbGwgcnVucyBpbiB0aGUKICAvLy8gbGluZS4gQWxsIGJveGVzIGluIHRoZSBzYW1lIGxpbmUgd2lsbCBiZSB0aGUgc2FtZSBoZWlnaHQuCiAgLy8vCiAgLy8vIFRoaXMgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQgdGhlIGJveGVzIHdpbGwgY292ZXIgdGhlIGVudGlyZSB2ZXJ0aWNhbCBoZWlnaHQgb2YgdGhlIGxpbmUKICAvLy8gd2hlbiB0aGVyZSBpcyBhZGRpdGlvbmFsIGxpbmUgc3BhY2luZy4KICAvLy8KICAvLy8gU2VlIFtCb3hIZWlnaHRTdHlsZS5pbmNsdWRlTGluZVNwYWNpbmdUb3BdLCBbQm94SGVpZ2h0U3R5bGUuaW5jbHVkZUxpbmVTcGFjaW5nTWlkZGxlXSwKICAvLy8gYW5kIFtCb3hIZWlnaHRTdHlsZS5pbmNsdWRlTGluZVNwYWNpbmdCb3R0b21dIGZvciBzdHlsZXMgdGhhdCB3aWxsIGNvdmVyCiAgLy8vIHRoZSBlbnRpcmUgbGluZS4KICBtYXgsCgogIC8vLyBFeHRlbmRzIHRoZSB0b3AgYW5kIGJvdHRvbSBlZGdlIG9mIHRoZSBib3VuZHMgdG8gZnVsbHkgY292ZXIgYW55IGxpbmUKICAvLy8gc3BhY2luZy4KICAvLy8KICAvLy8gVGhlIHRvcCBhbmQgYm90dG9tIG9mIGVhY2ggYm94IHdpbGwgY292ZXIgaGFsZiBvZiB0aGUKICAvLy8gc3BhY2UgYWJvdmUgYW5kIGhhbGYgb2YgdGhlIHNwYWNlIGJlbG93IHRoZSBsaW5lLgogIC8vLwogIC8vLyB7QHRlbXBsYXRlIGZsdXR0ZXIuZGFydDp1aS5ib3hIZWlnaHRTdHlsZS5pbmNsdWRlTGluZVNwYWNpbmd9CiAgLy8vIFRoZSB0b3AgZWRnZSBvZiBlYWNoIGxpbmUgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBib3R0b20gZWRnZQogIC8vLyBvZiB0aGUgbGluZSBhYm92ZS4gVGhlcmUgc2hvdWxkIGJlIG5vIGdhcHMgaW4gdmVydGljYWwgY292ZXJhZ2UgZ2l2ZW4gYW55CiAgLy8vIGFtb3VudCBvZiBsaW5lIHNwYWNpbmcuIExpbmUgc3BhY2luZyBpcyBub3QgaW5jbHVkZWQgYWJvdmUgdGhlIGZpcnN0IGxpbmUKICAvLy8gYW5kIGJlbG93IHRoZSBsYXN0IGxpbmUgZHVlIHRvIG5vIGFkZGl0aW9uYWwgc3BhY2UgcHJlc2VudCB0aGVyZS4KICAvLy8ge0BlbmR0ZW1wbGF0ZX0KICBpbmNsdWRlTGluZVNwYWNpbmdNaWRkbGUsCgogIC8vLyBFeHRlbmRzIHRoZSB0b3AgZWRnZSBvZiB0aGUgYm91bmRzIHRvIGZ1bGx5IGNvdmVyIGFueSBsaW5lIHNwYWNpbmcuCiAgLy8vCiAgLy8vIFRoZSBsaW5lIHNwYWNpbmcgd2lsbCBiZSBhZGRlZCB0byB0aGUgdG9wIG9mIHRoZSBib3guCiAgLy8vCiAgLy8vIHtAbWFjcm8gZmx1dHRlci5kYXJ0OnVpLmJveEhlaWdodFN0eWxlLmluY2x1ZGVMaW5lU3BhY2luZ30KICBpbmNsdWRlTGluZVNwYWNpbmdUb3AsCgogIC8vLyBFeHRlbmRzIHRoZSBib3R0b20gZWRnZSBvZiB0aGUgYm91bmRzIHRvIGZ1bGx5IGNvdmVyIGFueSBsaW5lIHNwYWNpbmcuCiAgLy8vCiAgLy8vIFRoZSBsaW5lIHNwYWNpbmcgd2lsbCBiZSBhZGRlZCB0byB0aGUgYm90dG9tIG9mIHRoZSBib3guCiAgLy8vCiAgLy8vIHtAbWFjcm8gZmx1dHRlci5kYXJ0OnVpLmJveEhlaWdodFN0eWxlLmluY2x1ZGVMaW5lU3BhY2luZ30KICBpbmNsdWRlTGluZVNwYWNpbmdCb3R0b20sCgogIC8vLyBDYWxjdWxhdGUgYm94IGhlaWdodHMgYmFzZWQgb24gdGhlIG1ldHJpY3Mgb2YgdGhpcyBwYXJhZ3JhcGgncyBbU3RydXRTdHlsZV0uCiAgLy8vCiAgLy8vIEJveGVzIGJhc2VkIG9uIHRoZSBzdHJ1dCB3aWxsIGhhdmUgY29uc2lzdGVudCBoZWlnaHRzIHRocm91Z2hvdXQgdGhlCiAgLy8vIGVudGlyZSBwYXJhZ3JhcGguICBUaGUgdG9wIGVkZ2Ugb2YgZWFjaCBsaW5lIHdpbGwgYWxpZ24gd2l0aCB0aGUgYm90dG9tCiAgLy8vIGVkZ2Ugb2YgdGhlIHByZXZpb3VzIGxpbmUuICBJdCBpcyBwb3NzaWJsZSBmb3IgZ2x5cGhzIHRvIGV4dGVuZCBvdXRzaWRlCiAgLy8vIHRoZXNlIGJveGVzLgogIHN0cnV0LAp9CgovLy8gRGVmaW5lcyB2YXJpb3VzIHdheXMgdG8gaG9yaXpvbnRhbGx5IGJvdW5kIHRoZSBib3hlcyByZXR1cm5lZCBieQovLy8gW1BhcmFncmFwaC5nZXRCb3hlc0ZvclJhbmdlXS4KLy8vCi8vLyBTZWUgW0JveEhlaWdodFN0eWxlXSBmb3IgYSBzaW1pbGFyIHByb3BlcnR5IHRvIGNvbnRyb2wgaGVpZ2h0LgplbnVtIEJveFdpZHRoU3R5bGUgewogIC8vLyBQcm92aWRlIHRpZ2h0IGJvdW5kaW5nIGJveGVzIHRoYXQgZml0IHdpZHRocyB0byB0aGUgcnVucyBvZiBlYWNoIGxpbmUKICAvLy8gaW5kZXBlbmRlbnRseS4KICB0aWdodCwKCiAgLy8vIEFkZHMgdXAgdG8gdHdvIGFkZGl0aW9uYWwgYm94ZXMgYXMgbmVlZGVkIGF0IHRoZSBiZWdpbm5pbmcgYW5kL29yIGVuZAogIC8vLyBvZiBlYWNoIGxpbmUgc28gdGhhdCB0aGUgd2lkdGhzIG9mIHRoZSBib3hlcyBpbiBsaW5lIGFyZSB0aGUgc2FtZSB3aWR0aAogIC8vLyBhcyB0aGUgd2lkZXN0IGxpbmUgaW4gdGhlIHBhcmFncmFwaC4KICAvLy8KICAvLy8gVGhlIGFkZGl0aW9uYWwgYm94ZXMgb24gZWFjaCBsaW5lIGFyZSBvbmx5IGFkZGVkIHdoZW4gdGhlIHJlbGV2YW50IGJveAogIC8vLyBhdCB0aGUgcmVsZXZhbnQgZWRnZSBvZiB0aGF0IGxpbmUgZG9lcyBub3Qgc3BhbiB0aGUgbWF4aW11bSB3aWR0aCBvZgogIC8vLyB0aGUgcGFyYWdyYXBoLgogIG1heCwKfQoKLy8vIFdoZXJlIHRvIHZlcnRpY2FsbHkgYWxpZ24gdGhlIHBsYWNlaG9sZGVyIHJlbGF0aXZlIHRvIHRoZSBzdXJyb3VuZGluZyB0ZXh0LgovLy8KLy8vIFVzZWQgYnkgW1BhcmFncmFwaEJ1aWxkZXIuYWRkUGxhY2Vob2xkZXJdLgplbnVtIFBsYWNlaG9sZGVyQWxpZ25tZW50IHsKICAvLy8gTWF0Y2ggdGhlIGJhc2VsaW5lIG9mIHRoZSBwbGFjZWhvbGRlciB3aXRoIHRoZSBiYXNlbGluZS4KICAvLy8KICAvLy8gVGhlIFtUZXh0QmFzZWxpbmVdIHRvIHVzZSBtdXN0IGJlIHNwZWNpZmllZCBhbmQgbm9uLW51bGwgd2hlbiB1c2luZyB0aGlzCiAgLy8vIGFsaWdubWVudCBtb2RlLgogIGJhc2VsaW5lLAoKICAvLy8gQWxpZ24gdGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBwbGFjZWhvbGRlciB3aXRoIHRoZSBiYXNlbGluZSBzdWNoIHRoYXQgdGhlCiAgLy8vIHBsYWNlaG9sZGVyIHNpdHMgb24gdG9wIG9mIHRoZSBiYXNlbGluZS4KICAvLy8KICAvLy8gVGhlIFtUZXh0QmFzZWxpbmVdIHRvIHVzZSBtdXN0IGJlIHNwZWNpZmllZCBhbmQgbm9uLW51bGwgd2hlbiB1c2luZyB0aGlzCiAgLy8vIGFsaWdubWVudCBtb2RlLgogIGFib3ZlQmFzZWxpbmUsCgogIC8vLyBBbGlnbiB0aGUgdG9wIGVkZ2Ugb2YgdGhlIHBsYWNlaG9sZGVyIHdpdGggdGhlIGJhc2VsaW5lIHNwZWNpZmllZAogIC8vLyBzdWNoIHRoYXQgdGhlIHBsYWNlaG9sZGVyIGhhbmdzIGJlbG93IHRoZSBiYXNlbGluZS4KICAvLy8KICAvLy8gVGhlIFtUZXh0QmFzZWxpbmVdIHRvIHVzZSBtdXN0IGJlIHNwZWNpZmllZCBhbmQgbm9uLW51bGwgd2hlbiB1c2luZyB0aGlzCiAgLy8vIGFsaWdubWVudCBtb2RlLgogIGJlbG93QmFzZWxpbmUsCgogIC8vLyBBbGlnbiB0aGUgdG9wIGVkZ2Ugb2YgdGhlIHBsYWNlaG9sZGVyIHdpdGggdGhlIHRvcCBlZGdlIG9mIHRoZSB0ZXh0LgogIC8vLwogIC8vLyBXaGVuIHRoZSBwbGFjZWhvbGRlciBpcyB2ZXJ5IHRhbGwsIHRoZSBleHRyYSBzcGFjZSB3aWxsIGhhbmcgZnJvbQogIC8vLyB0aGUgdG9wIGFuZCBleHRlbmQgdGhyb3VnaCB0aGUgYm90dG9tIG9mIHRoZSBsaW5lLgogIHRvcCwKCiAgLy8vIEFsaWduIHRoZSBib3R0b20gZWRnZSBvZiB0aGUgcGxhY2Vob2xkZXIgd2l0aCB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIHRleHQuCiAgLy8vCiAgLy8vIFdoZW4gdGhlIHBsYWNlaG9sZGVyIGlzIHZlcnkgdGFsbCwgdGhlIGV4dHJhIHNwYWNlIHdpbGwgcmlzZSBmcm9tIHRoZQogIC8vLyBib3R0b20gYW5kIGV4dGVuZCB0aHJvdWdoIHRoZSB0b3Agb2YgdGhlIGxpbmUuCiAgYm90dG9tLAoKICAvLy8gQWxpZ24gdGhlIG1pZGRsZSBvZiB0aGUgcGxhY2Vob2xkZXIgd2l0aCB0aGUgbWlkZGxlIG9mIHRoZSB0ZXh0LgogIC8vLwogIC8vLyBXaGVuIHRoZSBwbGFjZWhvbGRlciBpcyB2ZXJ5IHRhbGwsIHRoZSBleHRyYSBzcGFjZSB3aWxsIGdyb3cgZXF1YWxseQogIC8vLyBmcm9tIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgbGluZS4KICBtaWRkbGUsCn0KCi8vLyBbTGluZU1ldHJpY3NdIHN0b3JlcyB0aGUgbWVhc3VyZW1lbnRzIGFuZCBzdGF0aXN0aWNzIG9mIGEgc2luZ2xlIGxpbmUgaW4gdGhlCi8vLyBwYXJhZ3JhcGguCi8vLwovLy8gVGhlIG1lYXN1cmVtZW50cyBoZXJlIGFyZSBmb3IgdGhlIGxpbmUgYXMgYSB3aG9sZSwgYW5kIHJlcHJlc2VudCB0aGUgbWF4aW11bQovLy8gZXh0ZW50IG9mIHRoZSBsaW5lIGluc3RlYWQgb2YgcGVyLXJ1biBvciBwZXItZ2x5cGggbWV0cmljcy4gRm9yIG1vcmUgZGV0YWlsZWQKLy8vIG1ldHJpY3MsIHNlZSBbVGV4dEJveF0gYW5kIFtQYXJhZ3JhcGguZ2V0Qm94ZXNGb3JSYW5nZV0uCi8vLwovLy8gW0xpbmVNZXRyaWNzXSBzaG91bGQgYmUgb2J0YWluZWQgZGlyZWN0bHkgZnJvbSB0aGUgW1BhcmFncmFwaC5jb21wdXRlTGluZU1ldHJpY3NdCi8vLyBtZXRob2QuCmNsYXNzIExpbmVNZXRyaWNzIHsKICAvLy8gQ3JlYXRlcyBhIFtMaW5lTWV0cmljc10gb2JqZWN0IHdpdGggb25seSB0aGUgc3BlY2lmaWVkIHZhbHVlcy4KICAvLy8KICAvLy8gT21pdHRlZCB2YWx1ZXMgd2lsbCByZW1haW4gbnVsbC4gW1BhcmFncmFwaC5jb21wdXRlTGluZU1ldHJpY3NdIHByb2R1Y2VzCiAgLy8vIGZ1bGx5IGRlZmluZWQgW0xpbmVNZXRyaWNzXSB3aXRoIG5vIG51bGwgdmFsdWVzLgogIExpbmVNZXRyaWNzKHsKICAgIHRoaXMuaGFyZEJyZWFrLAogICAgdGhpcy5hc2NlbnQsCiAgICB0aGlzLmRlc2NlbnQsCiAgICB0aGlzLnVuc2NhbGVkQXNjZW50LAogICAgdGhpcy5oZWlnaHQsCiAgICB0aGlzLndpZHRoLAogICAgdGhpcy5sZWZ0LAogICAgdGhpcy5iYXNlbGluZSwKICAgIHRoaXMubGluZU51bWJlciwKICB9KTsKCiAgQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQogIC8vIGlnbm9yZTogdW51c2VkX2VsZW1lbnQKICBMaW5lTWV0cmljcy5fKAogICAgdGhpcy5oYXJkQnJlYWssCiAgICB0aGlzLmFzY2VudCwKICAgIHRoaXMuZGVzY2VudCwKICAgIHRoaXMudW5zY2FsZWRBc2NlbnQsCiAgICB0aGlzLmhlaWdodCwKICAgIHRoaXMud2lkdGgsCiAgICB0aGlzLmxlZnQsCiAgICB0aGlzLmJhc2VsaW5lLAogICAgdGhpcy5saW5lTnVtYmVyLAogICk7CgogIC8vLyBUcnVlIGlmIHRoaXMgbGluZSBlbmRzIHdpdGggYW4gZXhwbGljaXQgbGluZSBicmVhayAoZS5nLiAnXG4nKSBvciBpcyB0aGUgZW5kCiAgLy8vIG9mIHRoZSBwYXJhZ3JhcGguIEZhbHNlIG90aGVyd2lzZS4KICBmaW5hbCBib29sIGhhcmRCcmVhazsKCiAgLy8vIFRoZSByaXNlIGZyb20gdGhlIFtiYXNlbGluZV0gYXMgY2FsY3VsYXRlZCBmcm9tIHRoZSBmb250IGFuZCBzdHlsZSBmb3IgdGhpcyBsaW5lLgogIC8vLwogIC8vLyBUaGlzIGlzIHRoZSBmaW5hbCBjb21wdXRlZCBhc2NlbnQgYW5kIGNhbiBiZSBpbXBhY3RlZCBieSB0aGUgc3RydXQsIGhlaWdodCwgc2NhbGluZywKICAvLy8gYXMgd2VsbCBhcyBvdXRseWluZyBydW5zIHRoYXQgYXJlIHZlcnkgdGFsbC4KICAvLy8KICAvLy8gVGhlIFthc2NlbnRdIGlzIHByb3ZpZGVkIGFzIGEgcG9zaXRpdmUgdmFsdWUsIGV2ZW4gdGhvdWdoIGl0IGlzIHR5cGljYWxseSBkZWZpbmVkCiAgLy8vIGluIGZvbnRzIGFzIG5lZ2F0aXZlLiBUaGlzIGlzIHRvIGVuc3VyZSB0aGUgc2lnbmFnZSBvZiBvcGVyYXRpb25zIHdpdGggdGhlc2UKICAvLy8gbWV0cmljcyBkaXJlY3RseSByZWZsZWN0cyB0aGUgaW50ZW5kZWQgc2lnbmFnZSBvZiB0aGUgdmFsdWUuIEZvciBleGFtcGxlLAogIC8vLyB0aGUgeSBjb29yZGluYXRlIG9mIHRoZSB0b3AgZWRnZSBvZiB0aGUgbGluZSBpcyBgYmFzZWxpbmUgLSBhc2NlbnRgLgogIGZpbmFsIGRvdWJsZSBhc2NlbnQ7CgogIC8vLyBUaGUgZHJvcCBmcm9tIHRoZSBbYmFzZWxpbmVdIGFzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgZm9udCBhbmQgc3R5bGUgZm9yIHRoaXMgbGluZS4KICAvLy8KICAvLy8gVGhpcyBpcyB0aGUgZmluYWwgY29tcHV0ZWQgYXNjZW50IGFuZCBjYW4gYmUgaW1wYWN0ZWQgYnkgdGhlIHN0cnV0LCBoZWlnaHQsIHNjYWxpbmcsCiAgLy8vIGFzIHdlbGwgYXMgb3V0bHlpbmcgcnVucyB0aGF0IGFyZSB2ZXJ5IHRhbGwuCiAgLy8vCiAgLy8vIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBsaW5lIGlzIGBiYXNlbGluZSArIGRlc2NlbnRgLgogIGZpbmFsIGRvdWJsZSBkZXNjZW50OwoKICAvLy8gVGhlIHJpc2UgZnJvbSB0aGUgW2Jhc2VsaW5lXSBhcyBjYWxjdWxhdGVkIGZyb20gdGhlIGZvbnQgYW5kIHN0eWxlIGZvciB0aGlzIGxpbmUKICAvLy8gaWdub3JpbmcgdGhlIFtUZXh0U3R5bGUuaGVpZ2h0XS4KICAvLy8KICAvLy8gVGhlIFt1bnNjYWxlZEFzY2VudF0gaXMgcHJvdmlkZWQgYXMgYSBwb3NpdGl2ZSB2YWx1ZSwgZXZlbiB0aG91Z2ggaXQgaXMgdHlwaWNhbGx5CiAgLy8vIGRlZmluZWQgaW4gZm9udHMgYXMgbmVnYXRpdmUuIFRoaXMgaXMgdG8gZW5zdXJlIHRoZSBzaWduYWdlIG9mIG9wZXJhdGlvbnMgd2l0aAogIC8vLyB0aGVzZSBtZXRyaWNzIGRpcmVjdGx5IHJlZmxlY3RzIHRoZSBpbnRlbmRlZCBzaWduYWdlIG9mIHRoZSB2YWx1ZS4KICBmaW5hbCBkb3VibGUgdW5zY2FsZWRBc2NlbnQ7CgogIC8vLyBUb3RhbCBoZWlnaHQgb2YgdGhlIGxpbmUgZnJvbSB0aGUgdG9wIGVkZ2UgdG8gdGhlIGJvdHRvbSBlZGdlLgogIC8vLwogIC8vLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYHJvdW5kKGFzY2VudCArIGRlc2NlbnQpYC4gVGhpcyB2YWx1ZSBpcyBwcm92aWRlZAogIC8vLyBzZXBhcmF0ZWx5IGR1ZSB0byByb3VuZGluZyBjYXVzaW5nIHN1Yi1waXhlbCBkaWZmZXJlbmNlcyBmcm9tIHRoZSB1bnJvdW5kZWQKICAvLy8gdmFsdWVzLgogIGZpbmFsIGRvdWJsZSBoZWlnaHQ7CgogIC8vLyBXaWR0aCBvZiB0aGUgbGluZSBmcm9tIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGxlZnRtb3N0IGdseXBoIHRvIHRoZSByaWdodAogIC8vLyBlZGdlIG9mIHRoZSByaWdodG1vc3QgZ2x5cGguCiAgLy8vCiAgLy8vIFRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSB3aWR0aCBvZiB0aGUgcGFyZ3JhcGguCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAgKiBbUGFyYWdyYXBoLndpZHRoXSwgdGhlIG1heCB3aWR0aCBwYXNzZWQgaW4gZHVyaW5nIGxheW91dC4KICAvLy8gICogW1BhcmFncmFwaC5sb25nZXN0TGluZV0sIHRoZSB3aWR0aCBvZiB0aGUgbG9uZ2VzdCBsaW5lIGluIHRoZSBwYXJhZ3JhcGguCiAgZmluYWwgZG91YmxlIHdpZHRoOwoKICAvLy8gVGhlIHggY29vcmRpbmF0ZSBvZiBsZWZ0IGVkZ2Ugb2YgdGhlIGxpbmUuCiAgLy8vCiAgLy8vIFRoZSByaWdodCBlZGdlIGNhbiBiZSBvYnRhaW5lZCB3aXRoIGBsZWZ0ICsgd2lkdGhgLgogIGZpbmFsIGRvdWJsZSBsZWZ0OwoKICAvLy8gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgYmFzZWxpbmUgZm9yIHRoaXMgbGluZSBmcm9tIHRoZSB0b3Agb2YgdGhlIHBhcmFncmFwaC4KICAvLy8KICAvLy8gVGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBwYXJhZ3JhcGggdXAgdG8gYW5kIGluY2x1ZGluZyB0aGlzIGxpbmUgbWF5IGJlIG9idGFpbmVkCiAgLy8vIHRocm91Z2ggYGJhc2VsaW5lICsgZGVzY2VudGAuCiAgZmluYWwgZG91YmxlIGJhc2VsaW5lOwoKICAvLy8gVGhlIG51bWJlciBvZiB0aGlzIGxpbmUgaW4gdGhlIG92ZXJhbGwgcGFyYWdyYXBoLCB3aXRoIHRoZSBmaXJzdCBsaW5lIGJlaW5nCiAgLy8vIGluZGV4IHplcm8uCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCB0aGUgZmlyc3QgbGluZSBpcyBsaW5lIDAsIHNlY29uZCBsaW5lIGlzIGxpbmUgMS4KICBmaW5hbCBpbnQgbGluZU51bWJlcjsKfQoKLy8vIEEgcGFyYWdyYXBoIG9mIHRleHQuCi8vLwovLy8gQSBwYXJhZ3JhcGggcmV0YWlucyB0aGUgc2l6ZSBhbmQgcG9zaXRpb24gb2YgZWFjaCBnbHlwaCBpbiB0aGUgdGV4dCBhbmQgY2FuCi8vLyBiZSBlZmZpY2llbnRseSByZXNpemVkIGFuZCBwYWludGVkLgovLy8KLy8vIFRvIGNyZWF0ZSBhIFtQYXJhZ3JhcGhdIG9iamVjdCwgdXNlIGEgW1BhcmFncmFwaEJ1aWxkZXJdLgovLy8KLy8vIFBhcmFncmFwaHMgY2FuIGJlIGRpc3BsYXllZCBvbiBhIFtDYW52YXNdIHVzaW5nIHRoZSBbQ2FudmFzLmRyYXdQYXJhZ3JhcGhdCi8vLyBtZXRob2QuCkBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKY2xhc3MgUGFyYWdyYXBoIGV4dGVuZHMgTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MyIHsKICAvLy8gVGhpcyBjbGFzcyBpcyBjcmVhdGVkIGJ5IHRoZSBlbmdpbmUsIGFuZCBzaG91bGQgbm90IGJlIGluc3RhbnRpYXRlZAogIC8vLyBvciBleHRlbmRlZCBkaXJlY3RseS4KICAvLy8KICAvLy8gVG8gY3JlYXRlIGEgW1BhcmFncmFwaF0gb2JqZWN0LCB1c2UgYSBbUGFyYWdyYXBoQnVpbGRlcl0uCiAgQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQogIFBhcmFncmFwaC5fKCk7CgogIC8vLyBUaGUgYW1vdW50IG9mIGhvcml6b250YWwgc3BhY2UgdGhpcyBwYXJhZ3JhcGggb2NjdXBpZXMuCiAgLy8vCiAgLy8vIFZhbGlkIG9ubHkgYWZ0ZXIgW2xheW91dF0gaGFzIGJlZW4gY2FsbGVkLgogIGRvdWJsZSBnZXQgd2lkdGggbmF0aXZlICdQYXJhZ3JhcGhfd2lkdGgnOwoKICAvLy8gVGhlIGFtb3VudCBvZiB2ZXJ0aWNhbCBzcGFjZSB0aGlzIHBhcmFncmFwaCBvY2N1cGllcy4KICAvLy8KICAvLy8gVmFsaWQgb25seSBhZnRlciBbbGF5b3V0XSBoYXMgYmVlbiBjYWxsZWQuCiAgZG91YmxlIGdldCBoZWlnaHQgbmF0aXZlICdQYXJhZ3JhcGhfaGVpZ2h0JzsKCiAgLy8vIFRoZSBkaXN0YW5jZSBmcm9tIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGxlZnRtb3N0IGdseXBoIHRvIHRoZSByaWdodCBlZGdlIG9mCiAgLy8vIHRoZSByaWdodG1vc3QgZ2x5cGggaW4gdGhlIHBhcmFncmFwaC4KICAvLy8KICAvLy8gVmFsaWQgb25seSBhZnRlciBbbGF5b3V0XSBoYXMgYmVlbiBjYWxsZWQuCiAgZG91YmxlIGdldCBsb25nZXN0TGluZSBuYXRpdmUgJ1BhcmFncmFwaF9sb25nZXN0TGluZSc7CgogIC8vLyBUaGUgbWluaW11bSB3aWR0aCB0aGF0IHRoaXMgcGFyYWdyYXBoIGNvdWxkIGJlIHdpdGhvdXQgZmFpbGluZyB0byBwYWludAogIC8vLyBpdHMgY29udGVudHMgd2l0aGluIGl0c2VsZi4KICAvLy8KICAvLy8gVmFsaWQgb25seSBhZnRlciBbbGF5b3V0XSBoYXMgYmVlbiBjYWxsZWQuCiAgZG91YmxlIGdldCBtaW5JbnRyaW5zaWNXaWR0aCBuYXRpdmUgJ1BhcmFncmFwaF9taW5JbnRyaW5zaWNXaWR0aCc7CgogIC8vLyBSZXR1cm5zIHRoZSBzbWFsbGVzdCB3aWR0aCBiZXlvbmQgd2hpY2ggaW5jcmVhc2luZyB0aGUgd2lkdGggbmV2ZXIKICAvLy8gZGVjcmVhc2VzIHRoZSBoZWlnaHQuCiAgLy8vCiAgLy8vIFZhbGlkIG9ubHkgYWZ0ZXIgW2xheW91dF0gaGFzIGJlZW4gY2FsbGVkLgogIGRvdWJsZSBnZXQgbWF4SW50cmluc2ljV2lkdGggbmF0aXZlICdQYXJhZ3JhcGhfbWF4SW50cmluc2ljV2lkdGgnOwoKICAvLy8gVGhlIGRpc3RhbmNlIGZyb20gdGhlIHRvcCBvZiB0aGUgcGFyYWdyYXBoIHRvIHRoZSBhbHBoYWJldGljCiAgLy8vIGJhc2VsaW5lIG9mIHRoZSBmaXJzdCBsaW5lLCBpbiBsb2dpY2FsIHBpeGVscy4KICBkb3VibGUgZ2V0IGFscGhhYmV0aWNCYXNlbGluZSBuYXRpdmUgJ1BhcmFncmFwaF9hbHBoYWJldGljQmFzZWxpbmUnOwoKICAvLy8gVGhlIGRpc3RhbmNlIGZyb20gdGhlIHRvcCBvZiB0aGUgcGFyYWdyYXBoIHRvIHRoZSBpZGVvZ3JhcGhpYwogIC8vLyBiYXNlbGluZSBvZiB0aGUgZmlyc3QgbGluZSwgaW4gbG9naWNhbCBwaXhlbHMuCiAgZG91YmxlIGdldCBpZGVvZ3JhcGhpY0Jhc2VsaW5lIG5hdGl2ZSAnUGFyYWdyYXBoX2lkZW9ncmFwaGljQmFzZWxpbmUnOwoKICAvLy8gVHJ1ZSBpZiB0aGVyZSBpcyBtb3JlIHZlcnRpY2FsIGNvbnRlbnQsIGJ1dCB0aGUgdGV4dCB3YXMgdHJ1bmNhdGVkLCBlaXRoZXIKICAvLy8gYmVjYXVzZSB3ZSByZWFjaGVkIGBtYXhMaW5lc2AgbGluZXMgb2YgdGV4dCBvciBiZWNhdXNlIHRoZSBgbWF4TGluZXNgIHdhcwogIC8vLyBudWxsLCBgZWxsaXBzaXNgIHdhcyBub3QgbnVsbCwgYW5kIG9uZSBvZiB0aGUgbGluZXMgZXhjZWVkZWQgdGhlIHdpZHRoCiAgLy8vIGNvbnN0cmFpbnQuCiAgLy8vCiAgLy8vIFNlZSB0aGUgZGlzY3Vzc2lvbiBvZiB0aGUgYG1heExpbmVzYCBhbmQgYGVsbGlwc2lzYCBhcmd1bWVudHMgYXQKICAvLy8gW25ldyBQYXJhZ3JhcGhTdHlsZV0uCiAgYm9vbCBnZXQgZGlkRXhjZWVkTWF4TGluZXMgbmF0aXZlICdQYXJhZ3JhcGhfZGlkRXhjZWVkTWF4TGluZXMnOwoKICAvLy8gQ29tcHV0ZXMgdGhlIHNpemUgYW5kIHBvc2l0aW9uIG9mIGVhY2ggZ2x5cGggaW4gdGhlIHBhcmFncmFwaC4KICAvLy8KICAvLy8gVGhlIFtQYXJhZ3JhcGhDb25zdHJhaW50c10gY29udHJvbCBob3cgd2lkZSB0aGUgdGV4dCBpcyBhbGxvd2VkIHRvIGJlLgogIHZvaWQgbGF5b3V0KFBhcmFncmFwaENvbnN0cmFpbnRzIGNvbnN0cmFpbnRzKSA9PiBfbGF5b3V0KGNvbnN0cmFpbnRzLndpZHRoKTsKICB2b2lkIF9sYXlvdXQoZG91YmxlIHdpZHRoKSBuYXRpdmUgJ1BhcmFncmFwaF9sYXlvdXQnOwoKICAvLy8gUmV0dXJucyBhIGxpc3Qgb2YgdGV4dCBib3hlcyB0aGF0IGVuY2xvc2UgdGhlIGdpdmVuIHRleHQgcmFuZ2UuCiAgLy8vCiAgLy8vIFRoZSBbYm94SGVpZ2h0U3R5bGVdIGFuZCBbYm94V2lkdGhTdHlsZV0gcGFyYW1ldGVycyBhbGxvdyBjdXN0b21pemF0aW9uCiAgLy8vIG9mIGhvdyB0aGUgYm94ZXMgYXJlIGJvdW5kIHZlcnRpY2FsbHkgYW5kIGhvcml6b250YWxseS4gQm90aCBzdHlsZQogIC8vLyBwYXJhbWV0ZXJzIGRlZmF1bHQgdG8gdGhlIHRpZ2h0IG9wdGlvbiwgd2hpY2ggd2lsbCBwcm92aWRlIGNsb3NlLWZpdHRpbmcKICAvLy8gYm94ZXMgYW5kIHdpbGwgbm90IGFjY291bnQgZm9yIGFueSBsaW5lIHNwYWNpbmcuCiAgLy8vCiAgLy8vIENvb3JkaW5hdGVzIG9mIHRoZSBUZXh0Qm94IGFyZSByZWxhdGl2ZSB0byB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHBhcmFncmFwaCwKICAvLy8gd2hlcmUgcG9zaXRpdmUgeSB2YWx1ZXMgaW5kaWNhdGUgZG93bi4KICAvLy8KICAvLy8gVGhlIFtib3hIZWlnaHRTdHlsZV0gYW5kIFtib3hXaWR0aFN0eWxlXSBwYXJhbWV0ZXJzIG11c3Qgbm90IGJlIG51bGwuCiAgLy8vCiAgLy8vIFNlZSBbQm94SGVpZ2h0U3R5bGVdIGFuZCBbQm94V2lkdGhTdHlsZV0gZm9yIGZ1bGwgZGVzY3JpcHRpb25zIG9mIGVhY2ggb3B0aW9uLgogIExpc3Q8VGV4dEJveD4gZ2V0Qm94ZXNGb3JSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIHtCb3hIZWlnaHRTdHlsZSBib3hIZWlnaHRTdHlsZSA9IEJveEhlaWdodFN0eWxlLnRpZ2h0LCBCb3hXaWR0aFN0eWxlIGJveFdpZHRoU3R5bGUgPSBCb3hXaWR0aFN0eWxlLnRpZ2h0fSkgewogICAgYXNzZXJ0KGJveEhlaWdodFN0eWxlICE9IG51bGwpOwogICAgYXNzZXJ0KGJveFdpZHRoU3R5bGUgIT0gbnVsbCk7CiAgICByZXR1cm4gX2dldEJveGVzRm9yUmFuZ2Uoc3RhcnQsIGVuZCwgYm94SGVpZ2h0U3R5bGUuaW5kZXgsIGJveFdpZHRoU3R5bGUuaW5kZXgpOwogIH0KICBMaXN0PFRleHRCb3g+IF9nZXRCb3hlc0ZvclJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgaW50IGJveEhlaWdodFN0eWxlLCBpbnQgYm94V2lkdGhTdHlsZSkgbmF0aXZlICdQYXJhZ3JhcGhfZ2V0UmVjdHNGb3JSYW5nZSc7CgogIC8vLyBSZXR1cm5zIGEgbGlzdCBvZiB0ZXh0IGJveGVzIHRoYXQgZW5jbG9zZSBhbGwgcGxhY2Vob2xkZXJzIGluIHRoZSBwYXJhZ3JhcGguCiAgLy8vCiAgLy8vIFRoZSBvcmRlciBvZiB0aGUgYm94ZXMgYXJlIGluIHRoZSBzYW1lIG9yZGVyIGFzIHBhc3NlZCBpbiB0aHJvdWdoIFthZGRQbGFjZWhvbGRlcl0uCiAgLy8vCiAgLy8vIENvb3JkaW5hdGVzIG9mIHRoZSBbVGV4dEJveF0gYXJlIHJlbGF0aXZlIHRvIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcGFyYWdyYXBoLAogIC8vLyB3aGVyZSBwb3NpdGl2ZSB5IHZhbHVlcyBpbmRpY2F0ZSBkb3duLgogIExpc3Q8VGV4dEJveD4gZ2V0Qm94ZXNGb3JQbGFjZWhvbGRlcnMoKSBuYXRpdmUgJ1BhcmFncmFwaF9nZXRSZWN0c0ZvclBsYWNlaG9sZGVycyc7CgogIC8vLyBSZXR1cm5zIHRoZSB0ZXh0IHBvc2l0aW9uIGNsb3Nlc3QgdG8gdGhlIGdpdmVuIG9mZnNldC4KICBUZXh0UG9zaXRpb24gZ2V0UG9zaXRpb25Gb3JPZmZzZXQoT2Zmc2V0IG9mZnNldCkgewogICAgZmluYWwgTGlzdDxpbnQ+IGVuY29kZWQgPSBfZ2V0UG9zaXRpb25Gb3JPZmZzZXQob2Zmc2V0LmR4LCBvZmZzZXQuZHkpOwogICAgcmV0dXJuIFRleHRQb3NpdGlvbihvZmZzZXQ6IGVuY29kZWRbMF0sIGFmZmluaXR5OiBUZXh0QWZmaW5pdHkudmFsdWVzW2VuY29kZWRbMV1dKTsKICB9CiAgTGlzdDxpbnQ+IF9nZXRQb3NpdGlvbkZvck9mZnNldChkb3VibGUgZHgsIGRvdWJsZSBkeSkgbmF0aXZlICdQYXJhZ3JhcGhfZ2V0UG9zaXRpb25Gb3JPZmZzZXQnOwoKICAvLy8gUmV0dXJucyB0aGUgW1RleHRSYW5nZV0gb2YgdGhlIHdvcmQgYXQgdGhlIGdpdmVuIFtUZXh0UG9zaXRpb25dLgogIC8vLwogIC8vLyBDaGFyYWN0ZXJzIG5vdCBwYXJ0IG9mIGEgd29yZCwgc3VjaCBhcyBzcGFjZXMsIHN5bWJvbHMsIGFuZCBwdW5jdHVhdGlvbiwKICAvLy8gaGF2ZSB3b3JkIGJyZWFrcyBvbiBib3RoIHNpZGVzLiBJbiBzdWNoIGNhc2VzLCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybgogIC8vLyBbb2Zmc2V0LCBvZmZzZXQrMV0uIFdvcmQgYm91bmRhcmllcyBhcmUgZGVmaW5lZCBtb3JlIHByZWNpc2VseSBpbiBVbmljb2RlCiAgLy8vIFN0YW5kYXJkIEFubmV4ICMyOSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIyOS8jV29yZF9Cb3VuZGFyaWVzCiAgVGV4dFJhbmdlIGdldFdvcmRCb3VuZGFyeShUZXh0UG9zaXRpb24gcG9zaXRpb24pIHsKICAgIGZpbmFsIExpc3Q8aW50PiBib3VuZGFyeSA9IF9nZXRXb3JkQm91bmRhcnkocG9zaXRpb24ub2Zmc2V0KTsKICAgIHJldHVybiBUZXh0UmFuZ2Uoc3RhcnQ6IGJvdW5kYXJ5WzBdLCBlbmQ6IGJvdW5kYXJ5WzFdKTsKICB9CiAgTGlzdDxpbnQ+IF9nZXRXb3JkQm91bmRhcnkoaW50IG9mZnNldCkgbmF0aXZlICdQYXJhZ3JhcGhfZ2V0V29yZEJvdW5kYXJ5JzsKCiAgLy8vIFJldHVybnMgdGhlIFtUZXh0UmFuZ2VdIG9mIHRoZSBsaW5lIGF0IHRoZSBnaXZlbiBbVGV4dFBvc2l0aW9uXS4KICAvLy8KICAvLy8gVGhlIG5ld2xpbmUgKGlmIGFueSkgaXMgcmV0dXJuZWQgYXMgcGFydCBvZiB0aGUgcmFuZ2UuCiAgLy8vCiAgLy8vIE5vdCB2YWxpZCB1bnRpbCBhZnRlciBsYXlvdXQuCiAgLy8vCiAgLy8vIFRoaXMgY2FuIHBvdGVudGlhbGx5IGJlIGV4cGVuc2l2ZSwgc2luY2UgaXQgbmVlZHMgdG8gY29tcHV0ZSB0aGUgbGluZQogIC8vLyBtZXRyaWNzLCBzbyB1c2UgaXQgc3BhcmluZ2x5LgogIFRleHRSYW5nZSBnZXRMaW5lQm91bmRhcnkoVGV4dFBvc2l0aW9uIHBvc2l0aW9uKSB7CiAgICBmaW5hbCBMaXN0PGludD4gYm91bmRhcnkgPSBfZ2V0TGluZUJvdW5kYXJ5KHBvc2l0aW9uLm9mZnNldCk7CiAgICByZXR1cm4gVGV4dFJhbmdlKHN0YXJ0OiBib3VuZGFyeVswXSwgZW5kOiBib3VuZGFyeVsxXSk7CiAgfQogIExpc3Q8aW50PiBfZ2V0TGluZUJvdW5kYXJ5KGludCBvZmZzZXQpIG5hdGl2ZSAnUGFyYWdyYXBoX2dldExpbmVCb3VuZGFyeSc7CgogIC8vIFJlZGlyZWN0aW5nIHRoZSBwYWludCBmdW5jdGlvbiBpbiB0aGlzIHdheSBzb2x2ZXMgc29tZSBkZXBlbmRlbmN5IHByb2JsZW1zCiAgLy8gaW4gdGhlIEMrKyBjb2RlLiBJZiB3ZSBzdHJhaWdodGVuIG91dCB0aGUgQysrIGRlcGVuZGVuY2llcywgd2UgY2FuIHJlbW92ZQogIC8vIHRoaXMgaW5kaXJlY3Rpb24uCiAgdm9pZCBfcGFpbnQoQ2FudmFzIGNhbnZhcywgZG91YmxlIHgsIGRvdWJsZSB5KSBuYXRpdmUgJ1BhcmFncmFwaF9wYWludCc7CgogIC8vLyBSZXR1cm5zIHRoZSBmdWxsIGxpc3Qgb2YgW0xpbmVNZXRyaWNzXSB0aGF0IGRlc2NyaWJlIGluIGRldGFpbCB0aGUgdmFyaW91cwogIC8vLyBtZXRyaWNzIG9mIGVhY2ggbGFpZCBvdXQgbGluZS4KICAvLy8KICAvLy8gTm90IHZhbGlkIHVudGlsIGFmdGVyIGxheW91dC4KICAvLy8KICAvLy8gVGhpcyBjYW4gcG90ZW50aWFsbHkgcmV0dXJuIGEgbGFyZ2UgYW1vdW50IG9mIGRhdGEsIHNvIGl0IGlzIG5vdCByZWNvbW1lbmRlZAogIC8vLyB0byByZXBlYXRlZGx5IGNhbGwgdGhpcy4gSW5zdGVhZCwgY2FjaGUgdGhlIHJlc3VsdHMuCiAgTGlzdDxMaW5lTWV0cmljcz4gY29tcHV0ZUxpbmVNZXRyaWNzKCkgbmF0aXZlICdQYXJhZ3JhcGhfY29tcHV0ZUxpbmVNZXRyaWNzJzsKfQoKLy8vIEJ1aWxkcyBhIFtQYXJhZ3JhcGhdIGNvbnRhaW5pbmcgdGV4dCB3aXRoIHRoZSBnaXZlbiBzdHlsaW5nIGluZm9ybWF0aW9uLgovLy8KLy8vIFRvIHNldCB0aGUgcGFyYWdyYXBoJ3MgYWxpZ25tZW50LCB0cnVuY2F0aW9uLCBhbmQgZWxsaXBzaXppbmcgYmVoYXZpb3IsIHBhc3MKLy8vIGFuIGFwcHJvcHJpYXRlbHktY29uZmlndXJlZCBbUGFyYWdyYXBoU3R5bGVdIG9iamVjdCB0byB0aGUKLy8vIFtuZXcgUGFyYWdyYXBoQnVpbGRlcl0gY29uc3RydWN0b3IuCi8vLwovLy8gVGhlbiwgY2FsbCBjb21iaW5hdGlvbnMgb2YgW3B1c2hTdHlsZV0sIFthZGRUZXh0XSwgYW5kIFtwb3BdIHRvIGFkZCBzdHlsZWQKLy8vIHRleHQgdG8gdGhlIG9iamVjdC4KLy8vCi8vLyBGaW5hbGx5LCBjYWxsIFtidWlsZF0gdG8gb2J0YWluIHRoZSBjb25zdHJ1Y3RlZCBbUGFyYWdyYXBoXSBvYmplY3QuIEFmdGVyCi8vLyB0aGlzIHBvaW50LCB0aGUgYnVpbGRlciBpcyBubyBsb25nZXIgdXNhYmxlLgovLy8KLy8vIEFmdGVyIGNvbnN0cnVjdGluZyBhIFtQYXJhZ3JhcGhdLCBjYWxsIFtQYXJhZ3JhcGgubGF5b3V0XSBvbiBpdCBhbmQgdGhlbgovLy8gcGFpbnQgaXQgd2l0aCBbQ2FudmFzLmRyYXdQYXJhZ3JhcGhdLgpjbGFzcyBQYXJhZ3JhcGhCdWlsZGVyIGV4dGVuZHMgTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MyIHsKCiAgLy8vIENyZWF0ZXMgYSBuZXcgW1BhcmFncmFwaEJ1aWxkZXJdIG9iamVjdCwgd2hpY2ggaXMgdXNlZCB0byBjcmVhdGUgYQogIC8vLyBbUGFyYWdyYXBoXS4KICBAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCiAgUGFyYWdyYXBoQnVpbGRlcihQYXJhZ3JhcGhTdHlsZSBzdHlsZSkgewogICAgX3BsYWNlaG9sZGVyQ291bnQgPSAwOwogICAgTGlzdDxTdHJpbmc+IHN0cnV0Rm9udEZhbWlsaWVzOwogICAgaWYgKHN0eWxlLl9zdHJ1dFN0eWxlICE9IG51bGwpIHsKICAgICAgc3RydXRGb250RmFtaWxpZXMgPSA8U3RyaW5nPltdOwogICAgICBpZiAoc3R5bGUuX3N0cnV0U3R5bGUuX2ZvbnRGYW1pbHkgIT0gbnVsbCkKICAgICAgICBzdHJ1dEZvbnRGYW1pbGllcy5hZGQoc3R5bGUuX3N0cnV0U3R5bGUuX2ZvbnRGYW1pbHkpOwogICAgICBpZiAoc3R5bGUuX3N0cnV0U3R5bGUuX2ZvbnRGYW1pbHlGYWxsYmFjayAhPSBudWxsKQogICAgICAgIHN0cnV0Rm9udEZhbWlsaWVzLmFkZEFsbChzdHlsZS5fc3RydXRTdHlsZS5fZm9udEZhbWlseUZhbGxiYWNrKTsKICAgIH0KICAgIF9jb25zdHJ1Y3RvcigKICAgICAgc3R5bGUuX2VuY29kZWQsCiAgICAgIHN0eWxlLl9zdHJ1dFN0eWxlPy5fZW5jb2RlZCwKICAgICAgc3R5bGUuX2ZvbnRGYW1pbHksCiAgICAgIHN0cnV0Rm9udEZhbWlsaWVzLAogICAgICBzdHlsZS5fZm9udFNpemUsCiAgICAgIHN0eWxlLl9oZWlnaHQsCiAgICAgIHN0eWxlLl9lbGxpcHNpcywKICAgICAgX2VuY29kZUxvY2FsZShzdHlsZS5fbG9jYWxlKQogICAgKTsKICB9CgogIHZvaWQgX2NvbnN0cnVjdG9yKAogICAgSW50MzJMaXN0IGVuY29kZWQsCiAgICBCeXRlRGF0YSBzdHJ1dERhdGEsCiAgICBTdHJpbmcgZm9udEZhbWlseSwKICAgIExpc3Q8ZHluYW1pYz4gc3RydXRGb250RmFtaWx5LAogICAgZG91YmxlIGZvbnRTaXplLAogICAgZG91YmxlIGhlaWdodCwKICAgIFN0cmluZyBlbGxpcHNpcywKICAgIFN0cmluZyBsb2NhbGUKICApIG5hdGl2ZSAnUGFyYWdyYXBoQnVpbGRlcl9jb25zdHJ1Y3Rvcic7CgogIC8vLyBUaGUgbnVtYmVyIG9mIHBsYWNlaG9sZGVycyBjdXJyZW50bHkgaW4gdGhlIHBhcmFncmFwaC4KICBpbnQgZ2V0IHBsYWNlaG9sZGVyQ291bnQgPT4gX3BsYWNlaG9sZGVyQ291bnQ7CiAgaW50IF9wbGFjZWhvbGRlckNvdW50OwoKICAvLy8gVGhlIHNjYWxlcyBvZiB0aGUgcGxhY2Vob2xkZXJzIGluIHRoZSBwYXJhZ3JhcGguCiAgTGlzdDxkb3VibGU+IGdldCBwbGFjZWhvbGRlclNjYWxlcyA9PiBfcGxhY2Vob2xkZXJTY2FsZXM7CiAgTGlzdDxkb3VibGU+IF9wbGFjZWhvbGRlclNjYWxlcyA9IDxkb3VibGU+W107CgogIC8vLyBBcHBsaWVzIHRoZSBnaXZlbiBzdHlsZSB0byB0aGUgYWRkZWQgdGV4dCB1bnRpbCBbcG9wXSBpcyBjYWxsZWQuCiAgLy8vCiAgLy8vIFNlZSBbcG9wXSBmb3IgZGV0YWlscy4KICB2b2lkIHB1c2hTdHlsZShUZXh0U3R5bGUgc3R5bGUpIHsKICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBmdWxsRm9udEZhbWlsaWVzID0gPFN0cmluZz5bXTsKICAgIGlmIChzdHlsZS5fZm9udEZhbWlseSAhPSBudWxsKQogICAgICBmdWxsRm9udEZhbWlsaWVzLmFkZChzdHlsZS5fZm9udEZhbWlseSk7CiAgICBpZiAoc3R5bGUuX2ZvbnRGYW1pbHlGYWxsYmFjayAhPSBudWxsKQogICAgZnVsbEZvbnRGYW1pbGllcy5hZGRBbGwoc3R5bGUuX2ZvbnRGYW1pbHlGYWxsYmFjayk7CgogICAgQnl0ZURhdGEgZW5jb2RlZEZvbnRGZWF0dXJlczsKICAgIGlmIChzdHlsZS5fZm9udEZlYXR1cmVzICE9IG51bGwpIHsKICAgICAgZW5jb2RlZEZvbnRGZWF0dXJlcyA9IEJ5dGVEYXRhKHN0eWxlLl9mb250RmVhdHVyZXMubGVuZ3RoICogRm9udEZlYXR1cmUuX2tFbmNvZGVkU2l6ZSk7CiAgICAgIGludCBieXRlT2Zmc2V0ID0gMDsKICAgICAgZm9yIChGb250RmVhdHVyZSBmZWF0dXJlIGluIHN0eWxlLl9mb250RmVhdHVyZXMpIHsKICAgICAgICBmZWF0dXJlLl9lbmNvZGUoQnl0ZURhdGEudmlldyhlbmNvZGVkRm9udEZlYXR1cmVzLmJ1ZmZlciwgYnl0ZU9mZnNldCwgRm9udEZlYXR1cmUuX2tFbmNvZGVkU2l6ZSkpOwogICAgICAgIGJ5dGVPZmZzZXQgKz0gRm9udEZlYXR1cmUuX2tFbmNvZGVkU2l6ZTsKICAgICAgfQogICAgfQoKICAgIF9wdXNoU3R5bGUoCiAgICAgIHN0eWxlLl9lbmNvZGVkLAogICAgICBmdWxsRm9udEZhbWlsaWVzLAogICAgICBzdHlsZS5fZm9udFNpemUsCiAgICAgIHN0eWxlLl9sZXR0ZXJTcGFjaW5nLAogICAgICBzdHlsZS5fd29yZFNwYWNpbmcsCiAgICAgIHN0eWxlLl9oZWlnaHQsCiAgICAgIHN0eWxlLl9kZWNvcmF0aW9uVGhpY2tuZXNzLAogICAgICBfZW5jb2RlTG9jYWxlKHN0eWxlLl9sb2NhbGUpLAogICAgICBzdHlsZS5fYmFja2dyb3VuZD8uX29iamVjdHMsCiAgICAgIHN0eWxlLl9iYWNrZ3JvdW5kPy5fZGF0YSwKICAgICAgc3R5bGUuX2ZvcmVncm91bmQ/Ll9vYmplY3RzLAogICAgICBzdHlsZS5fZm9yZWdyb3VuZD8uX2RhdGEsCiAgICAgIFNoYWRvdy5fZW5jb2RlU2hhZG93cyhzdHlsZS5fc2hhZG93cyksCiAgICAgIGVuY29kZWRGb250RmVhdHVyZXMsCiAgICApOwogIH0KCiAgdm9pZCBfcHVzaFN0eWxlKAogICAgSW50MzJMaXN0IGVuY29kZWQsCiAgICBMaXN0PGR5bmFtaWM+IGZvbnRGYW1pbGllcywKICAgIGRvdWJsZSBmb250U2l6ZSwKICAgIGRvdWJsZSBsZXR0ZXJTcGFjaW5nLAogICAgZG91YmxlIHdvcmRTcGFjaW5nLAogICAgZG91YmxlIGhlaWdodCwKICAgIGRvdWJsZSBkZWNvcmF0aW9uVGhpY2tuZXNzLAogICAgU3RyaW5nIGxvY2FsZSwKICAgIExpc3Q8ZHluYW1pYz4gYmFja2dyb3VuZE9iamVjdHMsCiAgICBCeXRlRGF0YSBiYWNrZ3JvdW5kRGF0YSwKICAgIExpc3Q8ZHluYW1pYz4gZm9yZWdyb3VuZE9iamVjdHMsCiAgICBCeXRlRGF0YSBmb3JlZ3JvdW5kRGF0YSwKICAgIEJ5dGVEYXRhIHNoYWRvd3NEYXRhLAogICAgQnl0ZURhdGEgZm9udEZlYXR1cmVzRGF0YSwKICApIG5hdGl2ZSAnUGFyYWdyYXBoQnVpbGRlcl9wdXNoU3R5bGUnOwoKICBzdGF0aWMgU3RyaW5nIF9lbmNvZGVMb2NhbGUoTG9jYWxlIGxvY2FsZSkgPT4gbG9jYWxlPy50b1N0cmluZygpID8/ICcnOwoKICAvLy8gRW5kcyB0aGUgZWZmZWN0IG9mIHRoZSBtb3N0IHJlY2VudCBjYWxsIHRvIFtwdXNoU3R5bGVdLgogIC8vLwogIC8vLyBJbnRlcm5hbGx5LCB0aGUgcGFyYWdyYXBoIGJ1aWxkZXIgbWFpbnRhaW5zIGEgc3RhY2sgb2YgdGV4dCBzdHlsZXMuIFRleHQKICAvLy8gYWRkZWQgdG8gdGhlIHBhcmFncmFwaCBpcyBhZmZlY3RlZCBieSBhbGwgdGhlIHN0eWxlcyBpbiB0aGUgc3RhY2suIENhbGxpbmcKICAvLy8gW3BvcF0gcmVtb3ZlcyB0aGUgdG9wbW9zdCBzdHlsZSBpbiB0aGUgc3RhY2ssIGxlYXZpbmcgdGhlIHJlbWFpbmluZyBzdHlsZXMKICAvLy8gaW4gZWZmZWN0LgogIHZvaWQgcG9wKCkgbmF0aXZlICdQYXJhZ3JhcGhCdWlsZGVyX3BvcCc7CgogIC8vLyBBZGRzIHRoZSBnaXZlbiB0ZXh0IHRvIHRoZSBwYXJhZ3JhcGguCiAgLy8vCiAgLy8vIFRoZSB0ZXh0IHdpbGwgYmUgc3R5bGVkIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBzdGFjayBvZiB0ZXh0IHN0eWxlcy4KICB2b2lkIGFkZFRleHQoU3RyaW5nIHRleHQpIHsKICAgIGZpbmFsIFN0cmluZyBlcnJvciA9IF9hZGRUZXh0KHRleHQpOwogICAgaWYgKGVycm9yICE9IG51bGwpCiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoZXJyb3IpOwogIH0KICBTdHJpbmcgX2FkZFRleHQoU3RyaW5nIHRleHQpIG5hdGl2ZSAnUGFyYWdyYXBoQnVpbGRlcl9hZGRUZXh0JzsKCiAgLy8vIEFkZHMgYW4gaW5saW5lIHBsYWNlaG9sZGVyIHNwYWNlIHRvIHRoZSBwYXJhZ3JhcGguCiAgLy8vCiAgLy8vIFRoZSBwYXJhZ3JhcGggd2lsbCBjb250YWluIGEgcmVjdGFuZ3VsYXIgc3BhY2Ugd2l0aCBubyB0ZXh0IG9mIHRoZSBkaW1lbnNpb25zCiAgLy8vIHNwZWNpZmllZC4KICAvLy8KICAvLy8gVGhlIGB3aWR0aGAgYW5kIGBoZWlnaHRgIHBhcmFtZXRlcnMgc3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgcGxhY2Vob2xkZXIgcmVjdGFuZ2xlLgogIC8vLwogIC8vLyBUaGUgYGFsaWdubWVudGAgcGFyYW1ldGVyIHNwZWNpZmllcyBob3cgdGhlIHBsYWNlaG9sZGVyIHJlY3RhbmdsZSB3aWxsIGJlIHZlcnRpY2FsbHkKICAvLy8gYWxpZ25lZCB3aXRoIHRoZSBzdXJyb3VuZGluZyB0ZXh0LiBXaGVuIFtQbGFjZWhvbGRlckFsaWdubWVudC5iYXNlbGluZV0sCiAgLy8vIFtQbGFjZWhvbGRlckFsaWdubWVudC5hYm92ZUJhc2VsaW5lXSwgYW5kIFtQbGFjZWhvbGRlckFsaWdubWVudC5iZWxvd0Jhc2VsaW5lXQogIC8vLyBhbGlnbm1lbnQgbW9kZXMgYXJlIHVzZWQsIHRoZSBiYXNlbGluZSBuZWVkcyB0byBiZSBzZXQgd2l0aCB0aGUgYGJhc2VsaW5lYC4KICAvLy8gV2hlbiB1c2luZyBbUGxhY2Vob2xkZXJBbGlnbm1lbnQuYmFzZWxpbmVdLCBgYmFzZWxpbmVPZmZzZXRgIGluZGljYXRlcyB0aGUgZGlzdGFuY2UKICAvLy8gb2YgdGhlIGJhc2VsaW5lIGRvd24gZnJvbSB0aGUgdG9wIG9mIG9mIHRoZSByZWN0YW5nbGUuIFRoZSBkZWZhdWx0IGBiYXNlbGluZU9mZnNldGAKICAvLy8gaXMgdGhlIGBoZWlnaHRgLgogIC8vLwogIC8vLyBFeGFtcGxlczoKICAvLy8KICAvLy8gKiBGb3IgYSAzMHg1MCBwbGFjZWhvbGRlciB3aXRoIHRoZSBib3R0b20gZWRnZSBhbGlnbmVkIHdpdGggdGhlIGJvdHRvbSBvZiB0aGUgdGV4dCwgdXNlOgogIC8vLyBgYWRkUGxhY2Vob2xkZXIoMzAsIDUwLCBQbGFjZWhvbGRlckFsaWdubWVudC5ib3R0b20pO2AKICAvLy8gKiBGb3IgYSAzMHg1MCBwbGFjZWhvbGRlciB0aGF0IGlzIHZlcnRpY2FsbHkgY2VudGVyZWQgYXJvdW5kIHRoZSB0ZXh0LCB1c2U6CiAgLy8vIGBhZGRQbGFjZWhvbGRlcigzMCwgNTAsIFBsYWNlaG9sZGVyQWxpZ25tZW50Lm1pZGRsZSk7YC4KICAvLy8gKiBGb3IgYSAzMHg1MCBwbGFjZWhvbGRlciB0aGF0IHNpdHMgY29tcGxldGVseSBvbiB0b3Agb2YgdGhlIGFscGhhYmV0aWMgYmFzZWxpbmUsIHVzZToKICAvLy8gYGFkZFBsYWNlaG9sZGVyKDMwLCA1MCwgUGxhY2Vob2xkZXJBbGlnbm1lbnQuYWJvdmVCYXNlbGluZSwgYmFzZWxpbmU6IFRleHRCYXNlbGluZS5hbHBoYWJldGljKWAuCiAgLy8vICogRm9yIGEgMzB4NTAgcGxhY2Vob2xkZXIgd2l0aCA0MCBwaXhlbHMgYWJvdmUgYW5kIDEwIHBpeGVscyBiZWxvdyB0aGUgYWxwaGFiZXRpYyBiYXNlbGluZSwgdXNlOgogIC8vLyBgYWRkUGxhY2Vob2xkZXIoMzAsIDUwLCBQbGFjZWhvbGRlckFsaWdubWVudC5iYXNlbGluZSwgYmFzZWxpbmU6IFRleHRCYXNlbGluZS5hbHBoYWJldGljLCBiYXNlbGluZU9mZnNldDogNDApYC4KICAvLy8KICAvLy8gTGluZXMgYXJlIHBlcm1pdHRlZCB0byBicmVhayBhcm91bmQgZWFjaCBwbGFjZWhvbGRlci4KICAvLy8KICAvLy8gRGVjb3JhdGlvbnMgd2lsbCBiZSBkcmF3biBiYXNlZCBvbiB0aGUgZm9udCBkZWZpbmVkIGluIHRoZSBtb3N0IHJlY2VudGx5CiAgLy8vIHB1c2hlZCBbVGV4dFN0eWxlXS4gVGhlIGRlY29yYXRpb25zIGFyZSBkcmF3biBhcyBpZiB1bmljb2RlIHRleHQgd2VyZSBwcmVzZW50CiAgLy8vIGluIHRoZSBwbGFjZWhvbGRlciBzcGFjZSwgYW5kIHdpbGwgZHJhdyB0aGUgc2FtZSByZWdhcmRsZXNzIG9mIHRoZSBoZWlnaHQgYW5kCiAgLy8vIGFsaWdubWVudCBvZiB0aGUgcGxhY2Vob2xkZXIuIFRvIGhpZGUgb3IgbWFudWFsbHkgYWRqdXN0IGRlY29yYXRpb25zIHRvIGZpdCwKICAvLy8gYSB0ZXh0IHN0eWxlIHdpdGggdGhlIGRlc2lyZWQgZGVjb3JhdGlvbiBiZWhhdmlvciBzaG91bGQgYmUgcHVzaGVkIGJlZm9yZQogIC8vLyBhZGRpbmcgYSBwbGFjZWhvbGRlci4KICAvLy8KICAvLy8gQW55IGRlY29yYXRpb25zIGRyYXduIHRocm91Z2ggYSBwbGFjZWhvbGRlciB3aWxsIGV4aXN0IG9uIHRoZSBzYW1lIGNhbnZhcy9sYXllcgogIC8vLyBhcyB0aGUgdGV4dC4gVGhpcyBtZWFucyBhbnkgY29udGVudCBkcmF3biBvbiB0b3Agb2YgdGhlIHNwYWNlIHJlc2VydmVkIGJ5CiAgLy8vIHRoZSBwbGFjZWhvbGRlciB3aWxsIGJlIGRyYXduIG92ZXIgdGhlIGRlY29yYXRpb24sIHBvc3NpYmx5IG9ic2N1cmluZyB0aGUKICAvLy8gZGVjb3JhdGlvbi4KICAvLy8KICAvLy8gUGxhY2Vob2xkZXJzIGFyZSByZXByZXNlbnRlZCBieSBhIHVuaWNvZGUgMHhGRkZDICJvYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIgogIC8vLyBpbiB0aGUgdGV4dCBidWZmZXIuIEZvciBlYWNoIHBsYWNlaG9sZGVyLCBvbmUgb2JqZWN0IHJlcGxhY2VtZW50IGNoYXJhY3RlciBpcwogIC8vLyBhZGRlZCBvbiB0byB0aGUgdGV4dCBidWZmZXIuCiAgLy8vCiAgLy8vIFRoZSBgc2NhbGVgIHBhcmFtZXRlciB3aWxsIHNjYWxlIHRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBieSB0aGUgc3BlY2lmaWVkIGFtb3VudCwKICAvLy8gYW5kIGtlZXAgdHJhY2sgb2YgdGhlIHNjYWxlLiBUaGUgc2NhbGVzIG9mIHBsYWNlaG9sZGVycyBhZGRlZCBjYW4gYmUgYWNjZXNzZWQKICAvLy8gdGhyb3VnaCBbcGxhY2Vob2xkZXJTY2FsZXNdLiBUaGlzIGlzIHByaW1hcmlseSB1c2VkIGZvciBhY2Vzc2liaWxpdHkgc2NhbGluZy4KICB2b2lkIGFkZFBsYWNlaG9sZGVyKGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCwgUGxhY2Vob2xkZXJBbGlnbm1lbnQgYWxpZ25tZW50LCB7CiAgICBkb3VibGUgc2NhbGUgPSAxLjAsCiAgICBkb3VibGUgYmFzZWxpbmVPZmZzZXQsCiAgICBUZXh0QmFzZWxpbmUgYmFzZWxpbmUsCiAgfSkgewogICAgLy8gUmVxdWlyZSBhIGJhc2VsaW5lIHRvIGJlIHNwZWNpZmllZCBpZiB1c2luZyBhIGJhc2VsaW5lLWJhc2VkIGFsaWdubWVudC4KICAgIGFzc2VydCgoYWxpZ25tZW50ID09IFBsYWNlaG9sZGVyQWxpZ25tZW50LmFib3ZlQmFzZWxpbmUgfHwKICAgICAgICAgICAgYWxpZ25tZW50ID09IFBsYWNlaG9sZGVyQWxpZ25tZW50LmJlbG93QmFzZWxpbmUgfHwKICAgICAgICAgICAgYWxpZ25tZW50ID09IFBsYWNlaG9sZGVyQWxpZ25tZW50LmJhc2VsaW5lKSA/IGJhc2VsaW5lICE9IG51bGwgOiB0cnVlKTsKICAgIC8vIERlZmF1bHQgdGhlIGJhc2VsaW5lT2Zmc2V0IHRvIGhlaWdodCBpZiBudWxsLiBUaGlzIHdpbGwgcGxhY2UgdGhlIHBsYWNlaG9sZGVyCiAgICAvLyBmdWxseSBhYm92ZSB0aGUgYmFzZWxpbmUsIHNpbWlsYXIgdG8gW1BsYWNlaG9sZGVyQWxpZ25tZW50LmFib3ZlQmFzZWxpbmVdLgogICAgYmFzZWxpbmVPZmZzZXQgPSBiYXNlbGluZU9mZnNldCA/PyBoZWlnaHQ7CiAgICBfYWRkUGxhY2Vob2xkZXIod2lkdGggKiBzY2FsZSwgaGVpZ2h0ICogc2NhbGUsIGFsaWdubWVudC5pbmRleCwgKGJhc2VsaW5lT2Zmc2V0ID09IG51bGwgPyBoZWlnaHQgOiBiYXNlbGluZU9mZnNldCkgKiBzY2FsZSwgYmFzZWxpbmUgPT0gbnVsbCA/IG51bGwgOiBiYXNlbGluZS5pbmRleCk7CiAgICBfcGxhY2Vob2xkZXJDb3VudCsrOwogICAgX3BsYWNlaG9sZGVyU2NhbGVzLmFkZChzY2FsZSk7CiAgfQogIFN0cmluZyBfYWRkUGxhY2Vob2xkZXIoZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0LCBpbnQgYWxpZ25tZW50LCBkb3VibGUgYmFzZWxpbmVPZmZzZXQsIGludCBiYXNlbGluZSkgbmF0aXZlICdQYXJhZ3JhcGhCdWlsZGVyX2FkZFBsYWNlaG9sZGVyJzsKCiAgLy8vIEFwcGxpZXMgdGhlIGdpdmVuIHBhcmFncmFwaCBzdHlsZSBhbmQgcmV0dXJucyBhIFtQYXJhZ3JhcGhdIGNvbnRhaW5pbmcgdGhlCiAgLy8vIGFkZGVkIHRleHQgYW5kIGFzc29jaWF0ZWQgc3R5bGluZy4KICAvLy8KICAvLy8gQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB0aGUgcGFyYWdyYXBoIGJ1aWxkZXIgb2JqZWN0IGlzIGludmFsaWQgYW5kCiAgLy8vIGNhbm5vdCBiZSB1c2VkIGZ1cnRoZXIuCiAgUGFyYWdyYXBoIGJ1aWxkKCkgbmF0aXZlICdQYXJhZ3JhcGhCdWlsZGVyX2J1aWxkJzsKfQoKLy8vIExvYWRzIGEgZm9udCBmcm9tIGEgYnVmZmVyIGFuZCBtYWtlcyBpdCBhdmFpbGFibGUgZm9yIHJlbmRlcmluZyB0ZXh0LgovLy8KLy8vICogYGxpc3RgOiBBIGxpc3Qgb2YgYnl0ZXMgY29udGFpbmluZyB0aGUgZm9udCBmaWxlLgovLy8gKiBgZm9udEZhbWlseWA6IFRoZSBmYW1pbHkgbmFtZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBmb250IGluIHRleHQgc3R5bGVzLgovLy8gIElmIHRoaXMgaXMgbm90IHByb3ZpZGVkLCB0aGVuIHRoZSBmYW1pbHkgbmFtZSB3aWxsIGJlIGV4dHJhY3RlZCBmcm9tIHRoZSBmb250IGZpbGUuCkZ1dHVyZTx2b2lkPiBsb2FkRm9udEZyb21MaXN0KFVpbnQ4TGlzdCBsaXN0LCB7U3RyaW5nIGZvbnRGYW1pbHl9KSB7CiAgcmV0dXJuIF9mdXR1cml6ZSgK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Gh8pAUoBPgZPUVERLAEsBk0eKRciBEIBOQZUEQZZBltPVVJaWhcGEAZfPVI+XWdndgY8Bk9UVFNQHAZWUFASBlZUIwZZVFRVGBsbB08/P1RVUi+AqxkjBICUAVEpBk8eNQIBSgQ4TllFFFArAgE6OBcBMCgeGBoOBwIBcQERZGFydDp1aS90ZXh0LmRhcnQsb3JnLWRhcnRsYW5nLXNkazovLy9mbHV0dGVyL2xpYi91aS9sZXJwLmRhcnSBgC8vIENvcHlyaWdodCAyMDEzIFRoZSBGbHV0dGVyIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC51aTsKCi8vLyBMaW5lYXJseSBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHR3byBudW1iZXJzLgpkb3VibGUgbGVycERvdWJsZShudW0gYSwgbnVtIGIsIGRvdWJsZSB0KSB7CiAgaWYgKGEgPT0gbnVsbCAmJiBiID09IG51bGwpCiAgICByZXR1cm4gbnVsbDsKICBhID8/PSAwLjA7CiAgYiA/Pz0gMC4wOwogIHJldHVybiBhICsgKGIgLSBhKSAqIHQgYXMgZG91YmxlOwp9ChAAPEoeAREBLiweEQ0NJAIBEWRhcnQ6dWkvbGVycC5kYXJ0O29yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2NvcmUvY29yZS5kYXJ0mf0vLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8qKgogKgogKiBCdWlsdC1pbiB0eXBlcywgY29sbGVjdGlvbnMsCiAqIGFuZCBvdGhlciBjb3JlIGZ1bmN0aW9uYWxpdHkgZm9yIGV2ZXJ5IERhcnQgcHJvZ3JhbS4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGF1dG9tYXRpY2FsbHkgaW1wb3J0ZWQuCiAqCiAqIFNvbWUgY2xhc3NlcyBpbiB0aGlzIGxpYnJhcnksCiAqIHN1Y2ggYXMgW1N0cmluZ10gYW5kIFtudW1dLAogKiBzdXBwb3J0IERhcnQncyBidWlsdC1pbiBkYXRhIHR5cGVzLgogKiBPdGhlciBjbGFzc2VzLCBzdWNoIGFzIFtMaXN0XSBhbmQgW01hcF0sIHByb3ZpZGUgZGF0YSBzdHJ1Y3R1cmVzCiAqIGZvciBtYW5hZ2luZyBjb2xsZWN0aW9ucyBvZiBvYmplY3RzLgogKiBBbmQgc3RpbGwgb3RoZXIgY2xhc3NlcyByZXByZXNlbnQgY29tbW9ubHkgdXNlZCB0eXBlcyBvZiBkYXRhCiAqIHN1Y2ggYXMgVVJJcywgZGF0ZXMgYW5kIHRpbWVzLCBhbmQgZXJyb3JzLgogKgogKiAjIyBOdW1iZXJzIGFuZCBib29sZWFucwogKgogKiBbaW50XSBhbmQgW2RvdWJsZV0gcHJvdmlkZSBzdXBwb3J0IGZvciBEYXJ0J3MgYnVpbHQtaW4gbnVtZXJpY2FsIGRhdGEgdHlwZXM6CiAqIGludGVnZXJzIGFuZCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcnMsIHJlc3BlY3RpdmVseS4KICogQW4gb2JqZWN0IG9mIHR5cGUgW2Jvb2xdIGlzIGVpdGhlciB0cnVlIG9yIGZhbHNlLgogKiBWYXJpYWJsZXMgb2YgdGhlc2UgdHlwZXMgY2FuIGJlIGNvbnN0cnVjdGVkIGZyb20gbGl0ZXJhbHM6CiAqCiAqICAgICBpbnQgbWVhbmluZ09mTGlmZSA9IDQyOwogKiAgICAgZG91YmxlIHZhbHVlT2ZQaSAgPSAzLjE0MTU5MjsKICogICAgIGJvb2wgdmlzaWJsZSAgICAgID0gdHJ1ZTsKICoKICogIyMgU3RyaW5ncyBhbmQgcmVndWxhciBleHByZXNzaW9ucwogKgogKiBBIFtTdHJpbmddIGlzIGltbXV0YWJsZSBhbmQgcmVwcmVzZW50cyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMuCiAqCiAqICAgICBTdHJpbmcgc2hha2VzcGVhcmVRdW90ZSA9ICJBbGwgdGhlIHdvcmxkJ3MgYSBzdGFnZSwgLi4uIjsKICoKICogW1N0cmluZ0J1ZmZlcl0gcHJvdmlkZXMgYSB3YXkgdG8gY29uc3RydWN0IHN0cmluZ3MgZWZmaWNpZW50bHkuCiAqCiAqICAgICBTdHJpbmdCdWZmZXIgbW9yZVNoYWtlc3BlYXJlID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogKiAgICAgbW9yZVNoYWtlc3BlYXJlLndyaXRlKCdBbmQgYWxsIHRoZSBtZW4gYW5kIHdvbWVuICcpOwogKiAgICAgbW9yZVNoYWtlc3BlYXJlLndyaXRlKCdtZXJlbHkgcGxheWVyczsgLi4uJyk7CiAqCiAqIFRoZSBTdHJpbmcgYW5kIFN0cmluZ0J1ZmZlciBjbGFzc2VzIGltcGxlbWVudCBzdHJpbmcgY29uY2F0ZW5hdGlvbiwKICogaW50ZXJwb2xhdGlvbiwgYW5kIG90aGVyIHN0cmluZyBtYW5pcHVsYXRpb24gZmVhdHVyZXMuCiAqCiAqICAgICBTdHJpbmcgcGhpbG9zb3BoeSA9ICdMaXZlIG9uICc7CiAqICAgICBTdHJpbmcgZ2V0IHBhbGluZHJvbWUgPT4gcGhpbG9zb3BoeSArIHBoaWxvc29waHkuc3BsaXQoJycpLnJldmVyc2VkLmpvaW4oKTsKICoKICogW1JlZ0V4cF0gaW1wbGVtZW50cyBEYXJ0IHJlZ3VsYXIgZXhwcmVzc2lvbnMsCiAqIHdoaWNoIHByb3ZpZGUgYSBncmFtbWFyIGZvciBtYXRjaGluZyBwYXR0ZXJucyB3aXRoaW4gdGV4dC4KICogRm9yIGV4YW1wbGUsIGhlcmUncyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMKICogYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUgZGlnaXRzOgogKgogKiAgICAgdmFyIG51bWJlcnMgPSBuZXcgUmVnRXhwKHInXGQrJyk7CiAqCiAqIERhcnQgcmVndWxhciBleHByZXNzaW9ucyBoYXZlIHRoZSBzYW1lIHN5bnRheCBhbmQgc2VtYW50aWNzIGFzCiAqIEphdmFTY3JpcHQgcmVndWxhciBleHByZXNzaW9ucy4gU2VlCiAqIDxodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy0xNS4xMD4KICogZm9yIHRoZSBzcGVjaWZpY2F0aW9uIG9mIEphdmFTY3JpcHQgcmVndWxhciBleHByZXNzaW9ucy4KICoKICogIyMgQ29sbGVjdGlvbnMKICoKICogVGhlIGRhcnQ6Y29yZSBsaWJyYXJ5IHByb3ZpZGVzIGJhc2ljIGNvbGxlY3Rpb25zLAogKiBzdWNoIGFzIFtMaXN0XSwgW01hcF0sIGFuZCBbU2V0XS4KICoKICogQSBMaXN0IGlzIGFuIG9yZGVyZWQgY29sbGVjdGlvbiBvZiBvYmplY3RzLCB3aXRoIGEgbGVuZ3RoLgogKiBMaXN0cyBhcmUgc29tZXRpbWVzIGNhbGxlZCBhcnJheXMuCiAqIFVzZSBhIExpc3Qgd2hlbiB5b3UgbmVlZCB0byBhY2Nlc3Mgb2JqZWN0cyBieSBpbmRleC4KICoKICogICAgIExpc3Qgc3VwZXJoZXJvZXMgPSBbICdCYXRtYW4nLCAnU3VwZXJtYW4nLCAnSGFycnkgUG90dGVyJyBdOwogKgogKiBBIFNldCBpcyBhbiB1bm9yZGVyZWQgY29sbGVjdGlvbiBvZiB1bmlxdWUgb2JqZWN0cy4KICogWW91IGNhbm5vdCBnZXQgYW4gaXRlbSBieSBpbmRleCAocG9zaXRpb24pLgogKiBBZGRpbmcgYSBkdXBsaWNhdGUgaXRlbSBoYXMgbm8gZWZmZWN0LgogKgogKiAgICAgU2V0IHZpbGxhaW5zID0gbmV3IFNldCgpOwogKiAgICAgdmlsbGFpbnMuYWRkKCdKb2tlcicpOwogKiAgICAgdmlsbGFpbnMuYWRkQWxsKCBbJ0xleCBMdXRoZXInLCAnVm9sZGVtb3J0J10gKTsKICoKICogQSBNYXAgaXMgYW4gdW5vcmRlcmVkIGNvbGxlY3Rpb24gb2Yga2V5LXZhbHVlIHBhaXJzLgogKiBNYXBzIGFyZSBzb21ldGltZXMgY2FsbGVkIGFzc29jaWF0aXZlIGFycmF5cyBiZWNhdXNlCiAqIG1hcHMgYXNzb2NpYXRlIGEga2V5IHRvIHNvbWUgdmFsdWUgZm9yIGVhc3kgcmV0cmlldmFsLgogKiBLZXlzIGFyZSB1bmlxdWUuCiAqIFVzZSBhIE1hcCB3aGVuIHlvdSBuZWVkIHRvIGFjY2VzcyBvYmplY3RzCiAqIGJ5IGEgdW5pcXVlIGlkZW50aWZpZXIuCiAqCiAqICAgICBNYXAgc2lkZWtpY2tzID0geyAnQmF0bWFuJzogJ1JvYmluJywKICogICAgICAgICAgICAgICAgICAgICAgICdTdXBlcm1hbic6ICdMb2lzIExhbmUnLAogKiAgICAgICAgICAgICAgICAgICAgICAgJ0hhcnJ5IFBvdHRlcic6ICdSb24gYW5kIEhlcm1pb25lJyB9OwogKgogKiBJbiBhZGRpdGlvbiB0byB0aGVzZSBjbGFzc2VzLAogKiBkYXJ0OmNvcmUgY29udGFpbnMgW0l0ZXJhYmxlXSwKICogYW4gaW50ZXJmYWNlIHRoYXQgZGVmaW5lcyBmdW5jdGlvbmFsaXR5CiAqIGNvbW1vbiBpbiBjb2xsZWN0aW9ucyBvZiBvYmplY3RzLgogKiBFeGFtcGxlcyBpbmNsdWRlIHRoZSBhYmlsaXR5CiAqIHRvIHJ1biBhIGZ1bmN0aW9uIG9uIGVhY2ggZWxlbWVudCBpbiB0aGUgY29sbGVjdGlvbiwKICogdG8gYXBwbHkgYSB0ZXN0IHRvIGVhY2ggZWxlbWVudCwKICogdG8gcmV0cmlldmUgYW4gb2JqZWN0LCBhbmQgdG8gZGV0ZXJtaW5lIGxlbmd0aC4KICoKICogSXRlcmFibGUgaXMgaW1wbGVtZW50ZWQgYnkgTGlzdCBhbmQgU2V0LAogKiBhbmQgdXNlZCBieSBNYXAgZm9yIGl0cyBrZXlzIGFuZCB2YWx1ZXMuCiAqCiAqIEZvciBvdGhlciBraW5kcyBvZiBjb2xsZWN0aW9ucywgY2hlY2sgb3V0IHRoZQogKiBgZGFydDpjb2xsZWN0aW9uYCBsaWJyYXJ5LgogKgogKiAjIyBEYXRlIGFuZCB0aW1lCiAqCiAqIFVzZSBbRGF0ZVRpbWVdIHRvIHJlcHJlc2VudCBhIHBvaW50IGluIHRpbWUKICogYW5kIFtEdXJhdGlvbl0gdG8gcmVwcmVzZW50IGEgc3BhbiBvZiB0aW1lLgogKgogKiBZb3UgY2FuIGNyZWF0ZSBEYXRlVGltZSBvYmplY3RzIHdpdGggY29uc3RydWN0b3JzCiAqIG9yIGJ5IHBhcnNpbmcgYSBjb3JyZWN0bHkgZm9ybWF0dGVkIHN0cmluZy4KICoKICogICAgIERhdGVUaW1lIG5vdyA9IG5ldyBEYXRlVGltZS5ub3coKTsKICogICAgIERhdGVUaW1lIGJlcmxpbldhbGxGZWxsID0gbmV3IERhdGVUaW1lKDE5ODksIDExLCA5KTsKICogICAgIERhdGVUaW1lIG1vb25MYW5kaW5nID0gRGF0ZVRpbWUucGFyc2UoIjE5NjktMDctMjAiKTsKICoKICogQ3JlYXRlIGEgRHVyYXRpb24gb2JqZWN0IHNwZWNpZnlpbmcgdGhlIGluZGl2aWR1YWwgdGltZSB1bml0cy4KICoKICogICAgIER1cmF0aW9uIHRpbWVSZW1haW5pbmcgPSBuZXcgRHVyYXRpb24oaG91cnM6NTYsIG1pbnV0ZXM6MTQpOwogKgogKiBJbiBhZGRpdGlvbiB0byBEYXRlVGltZSBhbmQgRHVyYXRpb24sCiAqIGRhcnQ6Y29yZSBjb250YWlucyB0aGUgW1N0b3B3YXRjaF0gY2xhc3MgZm9yIG1lYXN1cmluZyBlbGFwc2VkIHRpbWUuCiAqCiAqICMjIFVyaQogKgogKiBBIFtVcmldIG9iamVjdCByZXByZXNlbnRzIGEgdW5pZm9ybSByZXNvdXJjZSBpZGVudGlmaWVyLAogKiB3aGljaCBpZGVudGlmaWVzIGEgcmVzb3VyY2Ugb24gdGhlIHdlYi4KICoKICogICAgIFVyaSBkYXJ0bGFuZyA9IFVyaS5wYXJzZSgnaHR0cDovL2RhcnRsYW5nLm9yZy8nKTsKICoKICogIyMgRXJyb3JzCiAqCiAqIFRoZSBbRXJyb3JdIGNsYXNzIHJlcHJlc2VudHMgdGhlIG9jY3VycmVuY2Ugb2YgYW4gZXJyb3IKICogZHVyaW5nIHJ1bnRpbWUuCiAqIFN1YmNsYXNzZXMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgc3BlY2lmaWMga2luZHMgb2YgZXJyb3JzLgogKgogKiAjIyBPdGhlciBkb2N1bWVudGF0aW9uCiAqCiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byB1c2UgdGhlIGJ1aWx0LWluIHR5cGVzLCByZWZlciB0byBbQnVpbHQtaW4KICogVHlwZXNdKGh0dHA6Ly93d3cuZGFydGxhbmcub3JnL2RvY3MvZGFydC11cC1hbmQtcnVubmluZy9jb250ZW50cy9jaDAyLmh0bWwjYnVpbHQtaW4tdHlwZXMpCiAqIGluIENoYXB0ZXIgMiBvZgogKiBbRGFydDogVXAgYW5kIFJ1bm5pbmddKGh0dHA6Ly93d3cuZGFydGxhbmcub3JnL2RvY3MvZGFydC11cC1hbmQtcnVubmluZy8pLgogKgogKiBBbHNvLCBzZWUgW2RhcnQ6Y29yZSAtIE51bWJlcnMsIENvbGxlY3Rpb25zLCBTdHJpbmdzLCBhbmQKICogTW9yZV0oaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2RvY3MvZGFydC11cC1hbmQtcnVubmluZy9jaDAzLmh0bWwjZGFydGNvcmUtLS1udW1iZXJzLWNvbGxlY3Rpb25zLXN0cmluZ3MtYW5kLW1vcmUpCiAqIGZvciBtb3JlIGNvdmVyYWdlIG9mIGNsYXNzZXMgaW4gdGhpcyBwYWNrYWdlLgogKgogKiBUaGUKICogW0RhcnQgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbl0oaHR0cDovL3d3dy5kYXJ0bGFuZy5vcmcvZG9jcy9zcGVjLykKICogcHJvdmlkZXMgdGVjaG5pY2FsIGRldGFpbHMuCiAqCiAqIHtAY2F0ZWdvcnkgQ29yZX0KICovCmxpYnJhcnkgZGFydC5jb3JlOwoKaW1wb3J0ICJkYXJ0OmNvbGxlY3Rpb24iOwppbXBvcnQgImRhcnQ6X2ludGVybmFsIiBoaWRlIFN5bWJvbCwgTGlua2VkTGlzdCwgTGlua2VkTGlzdEVudHJ5OwppbXBvcnQgImRhcnQ6X2ludGVybmFsIiBhcyBpbnRlcm5hbCBzaG93IFN5bWJvbDsKaW1wb3J0ICJkYXJ0OmNvbnZlcnQiCiAgICBzaG93CiAgICAgICAgYXNjaWksCiAgICAgICAgYmFzZTY0LAogICAgICAgIEJhc2U2NENvZGVjLAogICAgICAgIEVuY29kaW5nLAogICAgICAgIGxhdGluMSwKICAgICAgICBTdHJpbmdDb252ZXJzaW9uU2luaywKICAgICAgICB1dGY4OwppbXBvcnQgImRhcnQ6bWF0aCIgc2hvdyBSYW5kb207IC8vIFVzZWQgYnkgTGlzdC5zaHVmZmxlLgppbXBvcnQgImRhcnQ6dHlwZWRfZGF0YSIgc2hvdyBVaW50OExpc3QsIFVpbnQxNkxpc3QsIEVuZGlhbjsKCkBTaW5jZSgiMi4xIikKZXhwb3J0ICJkYXJ0OmFzeW5jIiBzaG93IEZ1dHVyZSwgU3RyZWFtOwoKcGFydCAiYW5ub3RhdGlvbnMuZGFydCI7CnBhcnQgImJpZ2ludC5kYXJ0IjsKcGFydCAiYm9vbC5kYXJ0IjsKcGFydCAiY29tcGFyYWJsZS5kYXJ0IjsKcGFydCAiZGF0ZV90aW1lLmRhcnQiOwpwYXJ0ICJkb3VibGUuZGFydCI7CnBhcnQgImR1cmF0aW9uLmRhcnQiOwpwYXJ0ICJlcnJvcnMuZGFydCI7CnBhcnQgImV4Y2VwdGlvbnMuZGFydCI7CnBhcnQgImV4cGFuZG8uZGFydCI7CnBhcnQgImZ1bmN0aW9uLmRhcnQiOwpwYXJ0ICJpZGVudGljYWwuZGFydCI7CnBhcnQgImludC5kYXJ0IjsKcGFydCAiaW52b2NhdGlvbi5kYXJ0IjsKcGFydCAiaXRlcmFibGUuZGFydCI7CnBhcnQgIml0ZXJhdG9yLmRhcnQiOwpwYXJ0ICJsaXN0LmRhcnQiOwpwYXJ0ICJtYXAuZGFydCI7CnBhcnQgIm51bGwuZGFydCI7CnBhcnQgIm51bS5kYXJ0IjsKcGFydCAib2JqZWN0LmRhcnQiOwpwYXJ0ICJwYXR0ZXJuLmRhcnQiOwpwYXJ0ICJwcmludC5kYXJ0IjsKcGFydCAicmVnZXhwLmRhcnQiOwpwYXJ0ICJzZXQuZGFydCI7CnBhcnQgInNpbmsuZGFydCI7CnBhcnQgInN0YWNrdHJhY2UuZGFydCI7CnBhcnQgInN0b3B3YXRjaC5kYXJ0IjsKcGFydCAic3RyaW5nLmRhcnQiOwpwYXJ0ICJzdHJpbmdfYnVmZmVyLmRhcnQiOwpwYXJ0ICJzdHJpbmdfc2luay5kYXJ0IjsKcGFydCAic3ltYm9sLmRhcnQiOwpwYXJ0ICJ0eXBlLmRhcnQiOwpwYXJ0ICJ1cmkuZGFydCI7CoDUAE5OPAEPAQQDIDgDKwMhHydEKEEuAxsDUEc1PgMfJSEDJgNEA0EDQwM6PDUDRzoDJ1MDMT45IwMpA0InOzwDEgM1JQM+JjgDRAM3LyoDIR43Azg4OhQtGwMsMj8DISIrJSA4JDMDLCwDMR4DFAMvLwM1LwMqPDwDQgNEAylIAwoDPCsDOQMNAzsTQAMaA1BeE04DPXYxAwdFHwMUBBMBGkIxFgkPEBUSEB4OOT0BDikBGRQSGBcUFhQYFRYXERgWFhIREhEUFRMUERIYFxQbGRQSEQEJZGFydDpjb3JlQW9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2NvcmUvY29tcGFyYWJsZS5kYXJ0jmUvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIFRoZSBzaWduYXR1cmUgb2YgYSBnZW5lcmljIGNvbXBhcmlzb24gZnVuY3Rpb24uCiAqCiAqIEEgY29tcGFyaXNvbiBmdW5jdGlvbiByZXByZXNlbnRzIGFuIG9yZGVyaW5nIG9uIGEgdHlwZSBvZiBvYmplY3RzLgogKiBBIHRvdGFsIG9yZGVyaW5nIG9uIGEgdHlwZSBtZWFucyB0aGF0IGZvciB0d28gdmFsdWVzLCBlaXRoZXIgdGhleQogKiBhcmUgZXF1YWwgb3Igb25lIGlzIGdyZWF0ZXIgdGhhbiB0aGUgb3RoZXIgKGFuZCB0aGUgbGF0dGVyIG11c3QgdGhlbiBiZQogKiBzbWFsbGVyIHRoYW4gdGhlIGZvcm1lcikuCiAqCiAqIEEgW0NvbXBhcmF0b3JdIGZ1bmN0aW9uIHJlcHJlc2VudHMgc3VjaCBhIHRvdGFsIG9yZGVyaW5nIGJ5IHJldHVybmluZwogKgogKiAqIGEgbmVnYXRpdmUgaW50ZWdlciBpZiBbYV0gaXMgc21hbGxlciB0aGFuIFtiXSwKICogKiB6ZXJvIGlmIFthXSBpcyBlcXVhbCB0byBbYl0sIGFuZAogKiAqIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBbYV0gaXMgZ3JlYXRlciB0aGFuIFtiXS4KICovCnR5cGVkZWYgQ29tcGFyYXRvcjxUPiA9IGludCBGdW5jdGlvbihUIGEsIFQgYik7CgovKioKICogSW50ZXJmYWNlIHVzZWQgYnkgdHlwZXMgdGhhdCBoYXZlIGFuIGludHJpbnNpYyBvcmRlcmluZy4KICoKICogVGhlIFtjb21wYXJlVG9dIG9wZXJhdGlvbiBkZWZpbmVzIGEgdG90YWwgb3JkZXJpbmcgb2Ygb2JqZWN0cywKICogd2hpY2ggY2FuIGJlIHVzZWQgZm9yIG9yZGVyaW5nIGFuZCBzb3J0aW5nLgogKgogKiBUaGUgW0NvbXBhcmFibGVdIGludGVyZmFjZSBzaG91bGQgYmUgdXNlZCBmb3IgdGhlIG5hdHVyYWwgb3JkZXJpbmcgb2YgYSB0eXBlLgogKiBJZiBhIHR5cGUgY2FuIGJlIG9yZGVyZWQgaW4gbW9yZSB0aGFuIG9uZSB3YXksCiAqIGFuZCBub25lIG9mIHRoZW0gaXMgdGhlIG9idmlvdXMgbmF0dXJhbCBvcmRlcmluZywKICogdGhlbiBpdCBtaWdodCBiZSBiZXR0ZXIgbm90IHRvIHVzZSB0aGUgW0NvbXBhcmFibGVdIGludGVyZmFjZSwKICogYW5kIHRvIHByb3ZpZGUgc2VwYXJhdGUgW0NvbXBhcmF0b3JdcyBpbnN0ZWFkLgogKgogKiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSBvcmRlciBvZiBhIFtDb21wYXJhYmxlXSBhZ3JlZXMKICogd2l0aCBpdHMgb3BlcmF0b3IgW29wZXJhdG9yID09XSBlcXVhbGl0eSAoYGEuY29tcGFyZVRvKGIpID09IDBgIGlmZiBgYSA9PSBiYCksCiAqIGJ1dCB0aGlzIGlzIG5vdCBhIHJlcXVpcmVtZW50LgogKiBGb3IgZXhhbXBsZSwgW2RvdWJsZV0gYW5kIFtEYXRlVGltZV0gaGF2ZSBgY29tcGFyZVRvYCBtZXRob2RzCiAqIHRoYXQgZG8gbm90IGFncmVlIHdpdGggb3BlcmF0b3IgW29wZXJhdG9yID09XS4KICogRm9yIGRvdWJsZXMgdGhlIFtjb21wYXJlVG9dIG1ldGhvZCBpcyBtb3JlIHByZWNpc2UgdGhhbiB0aGUgZXF1YWxpdHksCiAqIGFuZCBmb3IgW0RhdGVUaW1lXSBpdCBpcyBsZXNzIHByZWNpc2UuCiAqCiAqIEV4YW1wbGVzOgogKgogKiAgICAgICgwLjApLmNvbXBhcmVUbygtMC4wKTsgIC8vID0+IDEKICogICAgICAwLjAgPT0gLTAuMDsgICAgICAgICAgICAvLyA9PiB0cnVlCiAqICAgICAgdmFyIGR0ID0gbmV3IERhdGVUaW1lLm5vdygpOwogKiAgICAgIHZhciBkdDIgPSBkdC50b1V0YygpOwogKiAgICAgIGR0ID09IGR0MjsgICAgICAgICAgICAgIC8vID0+IGZhbHNlCiAqICAgICAgZHQuY29tcGFyZVRvKGR0Mik7ICAgICAgLy8gPT4gMAogKgogKiBUaGUgW0NvbXBhcmFibGVdIGludGVyZmFjZSBkb2VzIG5vdCBpbXBseSB0aGUgZXhpc3RlbmNlCiAqIG9mIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycyBgPGAsIGA8PWAsIGA+YCBhbmQgYD49YC4KICogVGhlc2Ugc2hvdWxkIG9ubHkgYmUgZGVmaW5lZAogKiBpZiB0aGUgb3JkZXJpbmcgaXMgYSBsZXNzLXRoYW4vZ3JlYXRlci10aGFuIG9yZGVyaW5nLAogKiB0aGF0IGlzLCBhbiBvcmRlcmluZyB3aGVyZSB5b3Ugd291bGQgbmF0dXJhbGx5CiAqIHVzZSB0aGUgd29yZHMgImxlc3MgdGhhbiIgYWJvdXQgdGhlIG9yZGVyIG9mIHR3byBlbGVtZW50cy4KICoKICogSWYgdGhlIGVxdWFsaXR5IG9wZXJhdG9yIGFuZCBbY29tcGFyZVRvXSBkaXNhZ3JlZSwKICogdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzIHNob3VsZCBmb2xsb3cgdGhlIGVxdWFsaXR5IG9wZXJhdG9yLAogKiBhbmQgd2lsbCBsaWtlbHkgYWxzbyBkaXNhZ3JlZSB3aXRoIFtjb21wYXJlVG9dLgogKiBPdGhlcndpc2UgdGhleSBzaG91bGQgbWF0Y2ggdGhlIFtjb21wYXJlVG9dIG1ldGhvZCwKICogc28gdGhhdCBgYSA8IGJgIGlmZiBgYS5jb21wYXJlVG8oYikgPCAwYC4KICoKICogVGhlIFtkb3VibGVdIGNsYXNzIGRlZmluZXMgY29tcGFyaXNvbiBvcGVyYXRvcnMKICogdGhhdCBhcmUgY29tcGF0aWJsZSB3aXRoIGVxdWFsaXR5LgogKiBUaGUgb3BlcmF0b3JzIGRpZmZlciBmcm9tIGBkb3VibGUuY29tcGFyZVRvYCBvbiAtMC4wIGFuZCBOYU4uCiAqCiAqIFRoZSBbRGF0ZVRpbWVdIGNsYXNzIGhhcyBubyBjb21wYXJpc29uIG9wZXJhdG9ycywgaW5zdGVhZCBpdCBoYXMgdGhlIG1vcmUKICogcHJlY2lzZWx5IG5hbWVkIFtEYXRlVGltZS5pc0JlZm9yZV0gYW5kIFtEYXRlVGltZS5pc0FmdGVyXS4KICovCmFic3RyYWN0IGNsYXNzIENvbXBhcmFibGU8VD4gewogIC8qKgogICAqIENvbXBhcmVzIHRoaXMgb2JqZWN0IHRvIGFub3RoZXIgW0NvbXBhcmFibGVdCiAgICoKICAgKiBSZXR1cm5zIGEgdmFsdWUgbGlrZSBhIFtDb21wYXJhdG9yXSB3aGVuIGNvbXBhcmluZyBgdGhpc2AgdG8gW290aGVyXS4KICAgKiBUaGF0IGlzLCBpdCByZXR1cm5zIGEgbmVnYXRpdmUgaW50ZWdlciBpZiBgdGhpc2AgaXMgb3JkZXJlZCBiZWZvcmUgW290aGVyXSwKICAgKiBhIHBvc2l0aXZlIGludGVnZXIgaWYgYHRoaXNgIGlzIG9yZGVyZWQgYWZ0ZXIgW290aGVyXSwKICAgKiBhbmQgemVybyBpZiBgdGhpc2AgYW5kIFtvdGhlcl0gYXJlIG9yZGVyZWQgdG9nZXRoZXIuCiAgICoKICAgKiBUaGUgW290aGVyXSBhcmd1bWVudCBtdXN0IGJlIGEgdmFsdWUgdGhhdCBpcyBjb21wYXJhYmxlIHRvIHRoaXMgb2JqZWN0LgogICAqLwogIGludCBjb21wYXJlVG8oVCBvdGhlcik7CgogIC8qKgogICAqIEEgW0NvbXBhcmF0b3JdIHRoYXQgY29tcGFyZXMgb25lIGNvbXBhcmFibGUgdG8gYW5vdGhlci4KICAgKgogICAqIEl0IHJldHVybnMgdGhlIHJlc3VsdCBvZiBgYS5jb21wYXJlVG8oYilgLgogICAqCiAgICogVGhpcyB1dGlsaXR5IGZ1bmN0aW9uIGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQgY29tcGFyYXRvcgogICAqIGZvciBvcmRlcmluZyBjb2xsZWN0aW9ucywgZm9yIGV4YW1wbGUgaW4gdGhlIFtMaXN0XSBzb3J0IGZ1bmN0aW9uLgogICAqLwogIHN0YXRpYyBpbnQgY29tcGFyZShDb21wYXJhYmxlIGEsIENvbXBhcmFibGUgYikgPT4gYS5jb21wYXJlVG8oYik7Cn0KYgBOTjwBDwETAQQzA0ZFSx0DSQM0JjQEMAEEPANCLwNRMjVCMgM9UiJBMkkqAw0DKCslHiwoAzs4IDkyPgM2QTM3LQMzJkEDTT8EHwYyBUtRPDoFTQYaAQY9BTAFPUgGRAIBGWRhcnQ6Y29yZS9jb21wYXJhYmxlLmRhcnQ/b3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvY29yZS9pdGVyYWJsZS5kYXJ0wABi3C8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogQSBjb2xsZWN0aW9uIG9mIHZhbHVlcywgb3IgImVsZW1lbnRzIiwgdGhhdCBjYW4gYmUgYWNjZXNzZWQgc2VxdWVudGlhbGx5LgogKgogKiBUaGUgZWxlbWVudHMgb2YgdGhlIGl0ZXJhYmxlIGFyZSBhY2Nlc3NlZCBieSBnZXR0aW5nIGFuIFtJdGVyYXRvcl0KICogdXNpbmcgdGhlIFtpdGVyYXRvcl0gZ2V0dGVyLCBhbmQgdXNpbmcgaXQgdG8gc3RlcCB0aHJvdWdoIHRoZSB2YWx1ZXMuCiAqIFN0ZXBwaW5nIHdpdGggdGhlIGl0ZXJhdG9yIGlzIGRvbmUgYnkgY2FsbGluZyBbSXRlcmF0b3IubW92ZU5leHRdLAogKiBhbmQgaWYgdGhlIGNhbGwgcmV0dXJucyBgdHJ1ZWAsCiAqIHRoZSBpdGVyYXRvciBoYXMgbm93IG1vdmVkIHRvIHRoZSBuZXh0IGVsZW1lbnQsCiAqIHdoaWNoIGlzIHRoZW4gYXZhaWxhYmxlIGFzIFtJdGVyYXRvci5jdXJyZW50XS4KICogSWYgdGhlIGNhbGwgcmV0dXJucyBgZmFsc2VgLCB0aGVyZSBhcmUgbm8gbW9yZSBlbGVtZW50cywKICogYW5kIGBpdGVyYXRvci5jdXJyZW50YCByZXR1cm5zIGBudWxsYC4KICoKICogWW91IGNhbiBjcmVhdGUgbW9yZSB0aGFuIG9uZSBpdGVyYXRvciBmcm9tIHRoZSBzYW1lIGBJdGVyYWJsZWAuCiAqIEVhY2ggdGltZSBgaXRlcmF0b3JgIGlzIHJlYWQsIGl0IHJldHVybnMgYSBuZXcgaXRlcmF0b3IsCiAqIGFuZCBkaWZmZXJlbnQgaXRlcmF0b3JzIGNhbiBiZSBzdGVwcGVkIHRocm91Z2ggaW5kZXBlbmRlbnRseSwKICogZWFjaCBnaXZpbmcgYWNjZXNzIHRvIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhlIGl0ZXJhYmxlLgogKiBUaGUgaXRlcmF0b3JzIG9mIHRoZSBzYW1lIGl0ZXJhYmxlICpzaG91bGQqIHByb3ZpZGUgdGhlIHNhbWUgdmFsdWVzCiAqIGluIHRoZSBzYW1lIG9yZGVyICh1bmxlc3MgdGhlIHVuZGVybHlpbmcgY29sbGVjdGlvbiBpcyBtb2RpZmllZCBiZXR3ZWVuCiAqIHRoZSBpdGVyYXRpb25zLCB3aGljaCBzb21lIGNvbGxlY3Rpb25zIGFsbG93KS4KICoKICogWW91IGNhbiBhbHNvIGl0ZXJhdGUgb3ZlciB0aGUgZWxlbWVudHMgb2YgYW4gYEl0ZXJhYmxlYAogKiB1c2luZyB0aGUgZm9yLWluIGxvb3AgY29uc3RydWN0LCB3aGljaCB1c2VzIHRoZSBgaXRlcmF0b3JgIGdldHRlciBiZWhpbmQgdGhlCiAqIHNjZW5lcy4KICogRm9yIGV4YW1wbGUsIHlvdSBjYW4gaXRlcmF0ZSBvdmVyIGFsbCBvZiB0aGUga2V5cyBvZiBhIFtNYXBdLAogKiBiZWNhdXNlIGBNYXBgIGtleXMgYXJlIGl0ZXJhYmxlLgogKgogKiAgICAgTWFwIGtpZHNCb29rcyA9IHsnTWF0aWxkYSc6ICdSb2FsZCBEYWhsJywKICogICAgICAgICAgICAgICAgICAgICAgJ0dyZWVuIEVnZ3MgYW5kIEhhbSc6ICdEciBTZXVzcycsCiAqICAgICAgICAgICAgICAgICAgICAgICdXaGVyZSB0aGUgV2lsZCBUaGluZ3MgQXJlJzogJ01hdXJpY2UgU2VuZGFrJ307CiAqICAgICBmb3IgKHZhciBib29rIGluIGtpZHNCb29rcy5rZXlzKSB7CiAqICAgICAgIHByaW50KCckYm9vayB3YXMgd3JpdHRlbiBieSAke2tpZHNCb29rc1tib29rXX0nKTsKICogICAgIH0KICoKICogVGhlIFtMaXN0XSBhbmQgW1NldF0gY2xhc3NlcyBhcmUgYm90aCBgSXRlcmFibGVgLAogKiBhcyBhcmUgbW9zdCBjbGFzc2VzIGluIHRoZSBgZGFydDpjb2xsZWN0aW9uYCBsaWJyYXJ5LgogKgogKiBTb21lIFtJdGVyYWJsZV0gY29sbGVjdGlvbnMgY2FuIGJlIG1vZGlmaWVkLgogKiBBZGRpbmcgYW4gZWxlbWVudCB0byBhIGBMaXN0YCBvciBgU2V0YCB3aWxsIGNoYW5nZSB3aGljaCBlbGVtZW50cyBpdAogKiBjb250YWlucywgYW5kIGFkZGluZyBhIG5ldyBrZXkgdG8gYSBgTWFwYCBjaGFuZ2VzIHRoZSBlbGVtZW50cyBvZiBbTWFwLmtleXNdLgogKiBJdGVyYXRvcnMgY3JlYXRlZCBhZnRlciB0aGUgY2hhbmdlIHdpbGwgcHJvdmlkZSB0aGUgbmV3IGVsZW1lbnRzLCBhbmQgbWF5CiAqIG9yIG1heSBub3QgcHJlc2VydmUgdGhlIG9yZGVyIG9mIGV4aXN0aW5nIGVsZW1lbnRzCiAqIChmb3IgZXhhbXBsZSwgYSBbSGFzaFNldF0gbWF5IGNvbXBsZXRlbHkgY2hhbmdlIGl0cyBvcmRlciB3aGVuIGEgc2luZ2xlCiAqIGVsZW1lbnQgaXMgYWRkZWQpLgogKgogKiBDaGFuZ2luZyBhIGNvbGxlY3Rpb24gKndoaWxlKiBpdCBpcyBiZWluZyBpdGVyYXRlZAogKiBpcyBnZW5lcmFsbHkgKm5vdCogYWxsb3dlZC4KICogRG9pbmcgc28gd2lsbCBicmVhayB0aGUgaXRlcmF0aW9uLCB3aGljaCBpcyB0eXBpY2FsbHkgc2lnbmFsbGVkCiAqIGJ5IHRocm93aW5nIGEgW0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcl0KICogdGhlIG5leHQgdGltZSBbSXRlcmF0b3IubW92ZU5leHRdIGlzIGNhbGxlZC4KICogVGhlIGN1cnJlbnQgdmFsdWUgb2YgW0l0ZXJhdG9yLmN1cnJlbnRdIGdldHRlcgogKiBzaG91bGQgbm90IGJlIGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2UgaW4gdGhlIGNvbGxlY3Rpb24sCiAqIHRoZSBgY3VycmVudGAgdmFsdWUgd2FzIHNldCBieSB0aGUgcHJldmlvdXMgY2FsbCB0byBbSXRlcmF0b3IubW92ZU5leHRdLgogKgogKiBTb21lIGl0ZXJhYmxlcyBjb21wdXRlIHRoZWlyIGVsZW1lbnRzIGR5bmFtaWNhbGx5IGV2ZXJ5IHRpbWUgdGhleSBhcmUKICogaXRlcmF0ZWQsIGxpa2UgdGhlIG9uZSByZXR1cm5lZCBieSBbSXRlcmFibGUuZ2VuZXJhdGVdIG9yIHRoZSBpdGVyYWJsZQogKiByZXR1cm5lZCBieSBhIGBzeW5jKmAgZ2VuZXJhdG9yIGZ1bmN0aW9uLiBJZiB0aGUgY29tcHV0YXRpb24gZG9lc24ndCBkZXBlbmQKICogb24gb3RoZXIgb2JqZWN0cyB0aGF0IG1heSBjaGFuZ2UsIHRoZW4gdGhlIGdlbmVyYXRlZCBzZXF1ZW5jZSBzaG91bGQgYmUKICogdGhlIHNhbWUgb25lIGV2ZXJ5IHRpbWUgaXQncyBpdGVyYXRlZC4KICoKICogVGhlIG1lbWJlcnMgb2YgYEl0ZXJhYmxlYCwgb3RoZXIgdGhhbiBgaXRlcmF0b3JgIGl0c2VsZiwKICogd29yayBieSBsb29raW5nIGF0IHRoZSBlbGVtZW50cyBvZiB0aGUgaXRlcmFibGUuCiAqIFRoaXMgY2FuIGJlIGltcGxlbWVudGVkIGJ5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgW2l0ZXJhdG9yXSwgYnV0IHNvbWUgY2xhc3NlcwogKiBtYXkgaGF2ZSBtb3JlIGVmZmljaWVudCB3YXlzIG9mIGZpbmRpbmcgdGhlIHJlc3VsdAogKiAobGlrZSBbbGFzdF0gb3IgW2xlbmd0aF0gb24gYSBbTGlzdF0sIG9yIFtjb250YWluc10gb24gYSBbU2V0XSkuCiAqCiAqIFRoZSBtZXRob2RzIHRoYXQgcmV0dXJuIGFub3RoZXIgYEl0ZXJhYmxlYCAobGlrZSBbbWFwXSBhbmQgW3doZXJlXSkKICogYXJlIGFsbCAqbGF6eSogLSB0aGV5IHdpbGwgaXRlcmF0ZSB0aGUgb3JpZ2luYWwgKGFzIG5lY2Vzc2FyeSkKICogZXZlcnkgdGltZSB0aGUgcmV0dXJuZWQgaXRlcmFibGUgaXMgaXRlcmF0ZWQsIGFuZCBub3QgYmVmb3JlLgogKgogKiBTaW5jZSBhbiBpdGVyYWJsZSBtYXkgYmUgaXRlcmF0ZWQgbW9yZSB0aGFuIG9uY2UsIGl0J3Mgbm90IHJlY29tbWVuZGVkIHRvCiAqIGhhdmUgZGV0ZWN0YWJsZSBzaWRlLWVmZmVjdHMgaW4gdGhlIGl0ZXJhdG9yLgogKiBGb3IgbWV0aG9kcyBsaWtlIFttYXBdIGFuZCBbd2hlcmVdLCB0aGUgcmV0dXJuZWQgaXRlcmFibGUgd2lsbCBleGVjdXRlIHRoZQogKiBhcmd1bWVudCBmdW5jdGlvbiBvbiBldmVyeSBpdGVyYXRpb24sIHNvIHRob3NlIGZ1bmN0aW9ucyBzaG91bGQgYWxzbyBub3QKICogaGF2ZSBzaWRlIGVmZmVjdHMuCiAqLwphYnN0cmFjdCBjbGFzcyBJdGVyYWJsZTxFPiB7CiAgLy8gVE9ETyhscm4pOiBXaGVuIHdlIGFsbG93IGZvcndhcmRpbmcgY29uc3QgY29uc3RydWN0b3JzIHRocm91Z2gKICAvLyBtaXhpbiBhcHBsaWNhdGlvbnMsIG1ha2UgdGhpcyBjbGFzcyBpbXBsZW1lbnQgW0l0ZXJhYmxlTWl4aW5dLgogIGNvbnN0IEl0ZXJhYmxlKCk7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gYEl0ZXJhYmxlYCB3aGljaCBnZW5lcmF0ZXMgaXRzIGVsZW1lbnRzIGR5bmFtaWNhbGx5LgogICAqCiAgICogVGhlIGdlbmVyYXRlZCBpdGVyYWJsZSBoYXMgW2NvdW50XSBlbGVtZW50cywKICAgKiBhbmQgdGhlIGVsZW1lbnQgYXQgaW5kZXggYG5gIGlzIGNvbXB1dGVkIGJ5IGNhbGxpbmcgYGdlbmVyYXRvcihuKWAuCiAgICogVmFsdWVzIGFyZSBub3QgY2FjaGVkLCBzbyBlYWNoIGl0ZXJhdGlvbiBjb21wdXRlcyB0aGUgdmFsdWVzIGFnYWluLgogICAqCiAgICogSWYgW2dlbmVyYXRvcl0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYW4gaWRlbnRpdHkgZnVuY3Rpb24KICAgKiBvbiBpbnRlZ2VycyBgKGludCB4KSA9PiB4YCwgc28gaXQgbWF5IG9ubHkgYmUgb21pdHRlZCBpZiB0aGUgdHlwZQogICAqIHBhcmFtZXRlciBhbGxvd3MgaW50ZWdlciB2YWx1ZXMuIFRoYXQgaXMsIGlmIFtFXSBpcyBhIHN1cGVyLXR5cGUKICAgKiBvZiBbaW50XS4KICAgKgogICAqIEFzIGFuIGBJdGVyYWJsZWAsIGBuZXcgSXRlcmFibGUuZ2VuZXJhdGUobiwgZ2VuZXJhdG9yKSlgIGlzIGVxdWl2YWxlbnQgdG8KICAgKiBgY29uc3QgWzAsIC4uLiwgbiAtIDFdLm1hcChnZW5lcmF0b3IpYC4KICAgKi8KICBmYWN0b3J5IEl0ZXJhYmxlLmdlbmVyYXRlKGludCBjb3VudCwgW0UgZ2VuZXJhdG9yKGludCBpbmRleCldKSB7CiAgICBpZiAoY291bnQgPD0gMCkgcmV0dXJuIEVtcHR5SXRlcmFibGU8RT4oKTsKICAgIHJldHVybiBfR2VuZXJhdG9ySXRlcmFibGU8RT4oY291bnQsIGdlbmVyYXRvcik7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGFuIGVtcHR5IGl0ZXJhYmxlLgogICAqCiAgICogVGhlIGVtcHR5IGl0ZXJhYmxlIGhhcyBubyBlbGVtZW50cywgYW5kIGl0ZXJhdGluZyBpdCBhbHdheXMgc3RvcHMKICAgKiBpbW1lZGlhdGVseS4KICAgKi8KICBjb25zdCBmYWN0b3J5IEl0ZXJhYmxlLmVtcHR5KCkgPSBFbXB0eUl0ZXJhYmxlPEU+OwoKICAvKioKICAgKiBBZGFwdHMgW3NvdXJjZV0gdG8gYmUgYW4gYEl0ZXJhYmxlPFQ+YC4KICAgKgogICAqIEFueSB0aW1lIHRoZSBpdGVyYWJsZSB3b3VsZCBwcm9kdWNlIGFuIGVsZW1lbnQgdGhhdCBpcyBub3QgYSBbVF0sCiAgICogdGhlIGVsZW1lbnQgYWNjZXNzIHdpbGwgdGhyb3cuIElmIGFsbCBlbGVtZW50cyBvZiBbc291cmNlXSBhcmUgYWN0dWFsbHkKICAgKiBpbnN0YW5jZXMgb2YgW1RdLCBvciBpZiBvbmx5IGVsZW1lbnRzIHRoYXQgYXJlIGFjdHVhbGx5IGluc3RhbmNlcyBvZiBbVF0KICAgKiBhcmUgYWNjZXNzZWQsIHRoZW4gdGhlIHJlc3VsdGluZyBpdGVyYWJsZSBjYW4gYmUgdXNlZCBhcyBhbiBgSXRlcmFibGU8VD5gLgogICAqLwogIHN0YXRpYyBJdGVyYWJsZTxUPiBjYXN0RnJvbTxTLCBUPihJdGVyYWJsZTxTPiBzb3VyY2UpID0+CiAgICAgIENhc3RJdGVyYWJsZTxTLCBUPihzb3VyY2UpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGBJdGVyYXRvcmAgdGhhdCBhbGxvd3MgaXRlcmF0aW5nIHRoZSBlbGVtZW50cyBvZiB0aGlzCiAgICogYEl0ZXJhYmxlYC4KICAgKgogICAqIEl0ZXJhYmxlIGNsYXNzZXMgbWF5IHNwZWNpZnkgdGhlIGl0ZXJhdGlvbiBvcmRlciBvZiB0aGVpciBlbGVtZW50cwogICAqIChmb3IgZXhhbXBsZSBbTGlzdF0gYWx3YXlzIGl0ZXJhdGUgaW4gaW5kZXggb3JkZXIpLAogICAqIG9yIHRoZXkgbWF5IGxlYXZlIGl0IHVuc3BlY2lmaWVkIChmb3IgZXhhbXBsZSBhIGhhc2gtYmFzZWQgW1NldF0KICAgKiBtYXkgaXRlcmF0ZSBpbiBhbnkgb3JkZXIpLgogICAqCiAgICogRWFjaCB0aW1lIGBpdGVyYXRvcmAgaXMgcmVhZCwgaXQgcmV0dXJucyBhIG5ldyBpdGVyYXRvciwKICAgKiB3aGljaCBjYW4gYmUgdXNlZCB0byBpdGVyYXRlIHRocm91Z2ggYWxsIHRoZSBlbGVtZW50cyBhZ2Fpbi4KICAgKiBUaGUgaXRlcmF0b3JzIG9mIHRoZSBzYW1lIGl0ZXJhYmxlIGNhbiBiZSBzdGVwcGVkIHRocm91Z2ggaW5kZXBlbmRlbnRseSwKICAgKiBidXQgc2hvdWxkIHJldHVybiB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBvcmRlciwKICAgKiBhcyBsb25nIGFzIHRoZSB1bmRlcmx5aW5nIGNvbGxlY3Rpb24gaXNuJ3QgY2hhbmdlZC4KICAgKgogICAqIE1vZGlmeWluZyB0aGUgY29sbGVjdGlvbiBtYXkgY2F1c2UgbmV3IGl0ZXJhdG9ycyB0byBwcm9kdWNlCiAgICogZGlmZmVyZW50IGVsZW1lbnRzLCBhbmQgbWF5IGNoYW5nZSB0aGUgb3JkZXIgb2YgZXhpc3RpbmcgZWxlbWVudHMuCiAgICogQSBbTGlzdF0gc3BlY2lmaWVzIGl0cyBpdGVyYXRpb24gb3JkZXIgcHJlY2lzZWx5LAogICAqIHNvIG1vZGlmeWluZyB0aGUgbGlzdCBjaGFuZ2VzIHRoZSBpdGVyYXRpb24gb3JkZXIgcHJlZGljdGFibHkuCiAgICogQSBoYXNoLWJhc2VkIFtTZXRdIG1heSBjaGFuZ2UgaXRzIGl0ZXJhdGlvbiBvcmRlciBjb21wbGV0ZWx5CiAgICogd2hlbiBhZGRpbmcgYSBuZXcgZWxlbWVudCB0byB0aGUgc2V0LgogICAqCiAgICogTW9kaWZ5aW5nIHRoZSB1bmRlcmx5aW5nIGNvbGxlY3Rpb24gYWZ0ZXIgY3JlYXRpbmcgdGhlIG5ldyBpdGVyYXRvcgogICAqIG1heSBjYXVzZSBhbiBlcnJvciB0aGUgbmV4dCB0aW1lIFtJdGVyYXRvci5tb3ZlTmV4dF0gaXMgY2FsbGVkCiAgICogb24gdGhhdCBpdGVyYXRvci4KICAgKiBBbnkgKm1vZGlmaWFibGUqIGl0ZXJhYmxlIGNsYXNzIHNob3VsZCBzcGVjaWZ5IHdoaWNoIG9wZXJhdGlvbnMgd2lsbAogICAqIGJyZWFrIGl0ZXJhdGlvbi4KICAgKi8KICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3I7CgogIC8qKgogICAqIFByb3ZpZGVzIGEgdmlldyBvZiB0aGlzIGl0ZXJhYmxlIGFzIGFuIGl0ZXJhYmxlIG9mIFtSXSBpbnN0YW5jZXMuCiAgICoKICAgKiBJZiB0aGlzIGl0ZXJhYmxlIG9ubHkgY29udGFpbnMgaW5zdGFuY2VzIG9mIFtSXSwgYWxsIG9wZXJhdGlvbnMKICAgKiB3aWxsIHdvcmsgY29ycmVjdGx5LiBJZiBhbnkgb3BlcmF0aW9uIHRyaWVzIHRvIGFjY2VzcyBhbiBlbGVtZW50CiAgICogdGhhdCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgW1JdLCB0aGUgYWNjZXNzIHdpbGwgdGhyb3cgaW5zdGVhZC4KICAgKgogICAqIFdoZW4gdGhlIHJldHVybmVkIGl0ZXJhYmxlIGNyZWF0ZXMgYSBuZXcgb2JqZWN0IHRoYXQgZGVwZW5kcyBvbgogICAqIHRoZSB0eXBlIFtSXSwgZS5nLiwgZnJvbSBbdG9MaXN0XSwgaXQgd2lsbCBoYXZlIGV4YWN0bHkgdGhlIHR5cGUgW1JdLgogICAqLwogIEl0ZXJhYmxlPFI+IGNhc3Q8Uj4oKSA9PiBJdGVyYWJsZS5jYXN0RnJvbTxFLCBSPih0aGlzKTsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsYXp5IGNvbmNhdGVudGF0aW9uIG9mIHRoaXMgaXRlcmFibGUgYW5kIFtvdGhlcl0uCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgaXRlcmFibGUgd2lsbCBwcm92aWRlIHRoZSBzYW1lIGVsZW1lbnRzIGFzIHRoaXMgaXRlcmFibGUsCiAgICogYW5kLCBhZnRlciB0aGF0LCB0aGUgZWxlbWVudHMgb2YgW290aGVyXSwgaW4gdGhlIHNhbWUgb3JkZXIgYXMgaW4gdGhlCiAgICogb3JpZ2luYWwgaXRlcmFibGVzLgogICAqLwogIEl0ZXJhYmxlPEU+IGZvbGxvd2VkQnkoSXRlcmFibGU8RT4gb3RoZXIpIHsKICAgIGlmICh0aGlzIGlzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+KSB7CiAgICAgIHJldHVybiBGb2xsb3dlZEJ5SXRlcmFibGU8RT4uZmlyc3RFZmZpY2llbnQodGhpcywgb3RoZXIpOwogICAgfQogICAgcmV0dXJuIEZvbGxvd2VkQnlJdGVyYWJsZTxFPih0aGlzLCBvdGhlcik7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGxhenkgW0l0ZXJhYmxlXSB3aXRoIGVsZW1lbnRzIHRoYXQgYXJlIGNyZWF0ZWQgYnkKICAgKiBjYWxsaW5nIGBmYCBvbiBlYWNoIGVsZW1lbnQgb2YgdGhpcyBgSXRlcmFibGVgIGluIGl0ZXJhdGlvbiBvcmRlci4KICAgKgogICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSB2aWV3IG9mIHRoZSBtYXBwZWQgZWxlbWVudHMuIEFzIGxvbmcgYXMgdGhlCiAgICogcmV0dXJuZWQgW0l0ZXJhYmxlXSBpcyBub3QgaXRlcmF0ZWQgb3ZlciwgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uIFtmXSB3aWxsCiAgICogbm90IGJlIGludm9rZWQuIFRoZSB0cmFuc2Zvcm1lZCBlbGVtZW50cyB3aWxsIG5vdCBiZSBjYWNoZWQuIEl0ZXJhdGluZwogICAqIG11bHRpcGxlIHRpbWVzIG92ZXIgdGhlIHJldHVybmVkIFtJdGVyYWJsZV0gd2lsbCBpbnZva2UgdGhlIHN1cHBsaWVkCiAgICogZnVuY3Rpb24gW2ZdIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lIGVsZW1lbnQuCiAgICoKICAgKiBNZXRob2RzIG9uIHRoZSByZXR1cm5lZCBpdGVyYWJsZSBhcmUgYWxsb3dlZCB0byBvbWl0IGNhbGxpbmcgYGZgCiAgICogb24gYW55IGVsZW1lbnQgd2hlcmUgdGhlIHJlc3VsdCBpc24ndCBuZWVkZWQuCiAgICogRm9yIGV4YW1wbGUsIFtlbGVtZW50QXRdIG1heSBjYWxsIGBmYCBvbmx5IG9uY2UuCiAgICovCiAgSXRlcmFibGU8VD4gbWFwPFQ+KFQgZihFIGUpKSA9PiBNYXBwZWRJdGVyYWJsZTxFLCBUPih0aGlzLCBmKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsYXp5IFtJdGVyYWJsZV0gd2l0aCBhbGwgZWxlbWVudHMgdGhhdCBzYXRpc2Z5IHRoZQogICAqIHByZWRpY2F0ZSBbdGVzdF0uCiAgICoKICAgKiBUaGUgbWF0Y2hpbmcgZWxlbWVudHMgaGF2ZSB0aGUgc2FtZSBvcmRlciBpbiB0aGUgcmV0dXJuZWQgaXRlcmFibGUKICAgKiBhcyB0aGV5IGhhdmUgaW4gW2l0ZXJhdG9yXS4KICAgKgogICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSB2aWV3IG9mIHRoZSBtYXBwZWQgZWxlbWVudHMuCiAgICogQXMgbG9uZyBhcyB0aGUgcmV0dXJuZWQgW0l0ZXJhYmxlXSBpcyBub3QgaXRlcmF0ZWQgb3ZlciwKICAgKiB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gW3Rlc3RdIHdpbGwgbm90IGJlIGludm9rZWQuCiAgICogSXRlcmF0aW5nIHdpbGwgbm90IGNhY2hlIHJlc3VsdHMsIGFuZCB0aHVzIGl0ZXJhdGluZyBtdWx0aXBsZSB0aW1lcyBvdmVyCiAgICogdGhlIHJldHVybmVkIFtJdGVyYWJsZV0gbWF5IGludm9rZSB0aGUgc3VwcGxpZWQKICAgKiBmdW5jdGlvbiBbdGVzdF0gbXVsdGlwbGUgdGltZXMgb24gdGhlIHNhbWUgZWxlbWVudC4KICAgKi8KICBJdGVyYWJsZTxFPiB3aGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gV2hlcmVJdGVyYWJsZTxFPih0aGlzLCB0ZXN0KTsKCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsYXp5IFtJdGVyYWJsZV0gd2l0aCBhbGwgZWxlbWVudHMgdGhhdCBoYXZlIHR5cGUgW1RdLgogICAqCiAgICogVGhlIG1hdGNoaW5nIGVsZW1lbnRzIGhhdmUgdGhlIHNhbWUgb3JkZXIgaW4gdGhlIHJldHVybmVkIGl0ZXJhYmxlCiAgICogYXMgdGhleSBoYXZlIGluIFtpdGVyYXRvcl0uCiAgICoKICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgdmlldyBvZiB0aGUgbWFwcGVkIGVsZW1lbnRzLgogICAqIEl0ZXJhdGluZyB3aWxsIG5vdCBjYWNoZSByZXN1bHRzLCBhbmQgdGh1cyBpdGVyYXRpbmcgbXVsdGlwbGUgdGltZXMgb3ZlcgogICAqIHRoZSByZXR1cm5lZCBbSXRlcmFibGVdIG1heSB5aWVsZCBkaWZmZXJlbnQgcmVzdWx0cywKICAgKiBpZiB0aGUgdW5kZXJseWluZyBlbGVtZW50cyBjaGFuZ2UgYmV0d2VlbiBpdGVyYXRpb25zLgogICAqLwogIEl0ZXJhYmxlPFQ+IHdoZXJlVHlwZTxUPigpID0+IFdoZXJlVHlwZUl0ZXJhYmxlPFQ+KHRoaXMpOwoKICAvKioKICAgKiBFeHBhbmRzIGVhY2ggZWxlbWVudCBvZiB0aGlzIFtJdGVyYWJsZV0gaW50byB6ZXJvIG9yIG1vcmUgZWxlbWVudHMuCiAgICoKICAgKiBUaGUgcmVzdWx0aW5nIEl0ZXJhYmxlIHJ1bnMgdGhyb3VnaCB0aGUgZWxlbWVudHMgcmV0dXJuZWQKICAgKiBieSBbZl0gZm9yIGVhY2ggZWxlbWVudCBvZiB0aGlzLCBpbiBpdGVyYXRpb24gb3JkZXIuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgW0l0ZXJhYmxlXSBpcyBsYXp5LCBhbmQgY2FsbHMgW2ZdIGZvciBlYWNoIGVsZW1lbnQKICAgKiBvZiB0aGlzIGV2ZXJ5IHRpbWUgaXQncyBpdGVyYXRlZC4KICAgKgogICAqIEV4YW1wbGU6CiAgICoKICAgKiAgICAgdmFyIHBhaXJzID0gW1sxLCAyXSwgWzMsIDRdXTsKICAgKiAgICAgdmFyIGZsYXR0ZW5lZCA9IHBhaXJzLmV4cGFuZCgocGFpcikgPT4gcGFpcikudG9MaXN0KCk7CiAgICogICAgIHByaW50KGZsYXR0ZW5lZCk7IC8vID0+IFsxLCAyLCAzLCA0XTsKICAgKgogICAqICAgICB2YXIgaW5wdXQgPSBbMSwgMiwgM107CiAgICogICAgIHZhciBkdXBsaWNhdGVkID0gaW5wdXQuZXhwYW5kKChpKSA9PiBbaSwgaV0pLnRvTGlzdCgpOwogICAqICAgICBwcmludChkdXBsaWNhdGVkKTsgLy8gPT4gWzEsIDEsIDIsIDIsIDMsIDNdCiAgICoKICAgKi8KICBJdGVyYWJsZTxUPiBleHBhbmQ8VD4oSXRlcmFibGU8VD4gZihFIGVsZW1lbnQpKSA9PgogICAgICBFeHBhbmRJdGVyYWJsZTxFLCBUPih0aGlzLCBmKTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjb2xsZWN0aW9uIGNvbnRhaW5zIGFuIGVsZW1lbnQgZXF1YWwgdG8gW2VsZW1lbnRdLgogICAqCiAgICogVGhpcyBvcGVyYXRpb24gd2lsbCBjaGVjayBlYWNoIGVsZW1lbnQgaW4gb3JkZXIgZm9yIGJlaW5nIGVxdWFsIHRvCiAgICogW2VsZW1lbnRdLCB1bmxlc3MgaXQgaGFzIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIGZpbmQgYW4gZWxlbWVudAogICAqIGVxdWFsIHRvIFtlbGVtZW50XS4KICAgKgogICAqIFRoZSBlcXVhbGl0eSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIFtlbGVtZW50XSBpcyBlcXVhbCB0byBhbiBlbGVtZW50IG9mCiAgICogdGhlIGl0ZXJhYmxlIGRlZmF1bHRzIHRvIHRoZSBbT2JqZWN0Lj09XSBvZiB0aGUgZWxlbWVudC4KICAgKgogICAqIFNvbWUgdHlwZXMgb2YgaXRlcmFibGUgbWF5IGhhdmUgYSBkaWZmZXJlbnQgZXF1YWxpdHkgdXNlZCBmb3IgaXRzIGVsZW1lbnRzLgogICAqIEZvciBleGFtcGxlLCBhIFtTZXRdIG1heSBoYXZlIGEgY3VzdG9tIGVxdWFsaXR5CiAgICogKHNlZSBbU2V0LmlkZW50aXR5XSkgdGhhdCBpdHMgYGNvbnRhaW5zYCB1c2VzLgogICAqIExpa2V3aXNlIHRoZSBgSXRlcmFibGVgIHJldHVybmVkIGJ5IGEgW01hcC5rZXlzXSBjYWxsCiAgICogc2hvdWxkIHVzZSB0aGUgc2FtZSBlcXVhbGl0eSB0aGF0IHRoZSBgTWFwYCB1c2VzIGZvciBrZXlzLgogICAqLwogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpIHsKICAgIGZvciAoRSBlIGluIHRoaXMpIHsKICAgICAgaWYgKGUgPT0gZWxlbWVudCkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvKioKICAgKiBBcHBsaWVzIHRoZSBmdW5jdGlvbiBbZl0gdG8gZWFjaCBlbGVtZW50IG9mIHRoaXMgY29sbGVjdGlvbiBpbiBpdGVyYXRpb24KICAgKiBvcmRlci4KICAgKi8KICB2b2lkIGZvckVhY2godm9pZCBmKEUgZWxlbWVudCkpIHsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIGYoZWxlbWVudCk7CiAgfQoKICAvKioKICAgKiBSZWR1Y2VzIGEgY29sbGVjdGlvbiB0byBhIHNpbmdsZSB2YWx1ZSBieSBpdGVyYXRpdmVseSBjb21iaW5pbmcgZWxlbWVudHMKICAgKiBvZiB0aGUgY29sbGVjdGlvbiB1c2luZyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24uCiAgICoKICAgKiBUaGUgaXRlcmFibGUgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBlbGVtZW50LgogICAqIElmIGl0IGhhcyBvbmx5IG9uZSBlbGVtZW50LCB0aGF0IGVsZW1lbnQgaXMgcmV0dXJuZWQuCiAgICoKICAgKiBPdGhlcndpc2UgdGhpcyBtZXRob2Qgc3RhcnRzIHdpdGggdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSB0aGUgaXRlcmF0b3IsCiAgICogYW5kIHRoZW4gY29tYmluZXMgaXQgd2l0aCB0aGUgcmVtYWluaW5nIGVsZW1lbnRzIGluIGl0ZXJhdGlvbiBvcmRlciwKICAgKiBhcyBpZiBieToKICAgKgogICAqICAgICBFIHZhbHVlID0gaXRlcmFibGUuZmlyc3Q7CiAgICogICAgIGl0ZXJhYmxlLnNraXAoMSkuZm9yRWFjaCgoZWxlbWVudCkgewogICAqICAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgZWxlbWVudCk7CiAgICogICAgIH0pOwogICAqICAgICByZXR1cm4gdmFsdWU7CiAgICoKICAgKiBFeGFtcGxlIG9mIGNhbGN1bGF0aW5nIHRoZSBzdW0gb2YgYW4gaXRlcmFibGU6CiAgICoKICAgKiAgICAgaXRlcmFibGUucmVkdWNlKCh2YWx1ZSwgZWxlbWVudCkgPT4gdmFsdWUgKyBlbGVtZW50KTsKICAgKgogICAqLwogIEUgcmVkdWNlKEUgY29tYmluZShFIHZhbHVlLCBFIGVsZW1lbnQpKSB7CiAgICBJdGVyYXRvcjxFPiBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3I7CiAgICBpZiAoIWl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB9CiAgICBFIHZhbHVlID0gaXRlcmF0b3IuY3VycmVudDsKICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgaXRlcmF0b3IuY3VycmVudCk7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICAvKioKICAgKiBSZWR1Y2VzIGEgY29sbGVjdGlvbiB0byBhIHNpbmdsZSB2YWx1ZSBieSBpdGVyYXRpdmVseSBjb21iaW5pbmcgZWFjaAogICAqIGVsZW1lbnQgb2YgdGhlIGNvbGxlY3Rpb24gd2l0aCBhbiBleGlzdGluZyB2YWx1ZQogICAqCiAgICogVXNlcyBbaW5pdGlhbFZhbHVlXSBhcyB0aGUgaW5pdGlhbCB2YWx1ZSwKICAgKiB0aGVuIGl0ZXJhdGVzIHRocm91Z2ggdGhlIGVsZW1lbnRzIGFuZCB1cGRhdGVzIHRoZSB2YWx1ZSB3aXRoCiAgICogZWFjaCBlbGVtZW50IHVzaW5nIHRoZSBbY29tYmluZV0gZnVuY3Rpb24sIGFzIGlmIGJ5OgogICAqCiAgICogICAgIHZhciB2YWx1ZSA9IGluaXRpYWxWYWx1ZTsKICAgKiAgICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAqICAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgZWxlbWVudCk7CiAgICogICAgIH0KICAgKiAgICAgcmV0dXJuIHZhbHVlOwogICAqCiAgICogRXhhbXBsZSBvZiBjYWxjdWxhdGluZyB0aGUgc3VtIG9mIGFuIGl0ZXJhYmxlOgogICAqCiAgICogICAgIGl0ZXJhYmxlLmZvbGQoMCwgKHByZXYsIGVsZW1lbnQpID0+IHByZXYgKyBlbGVtZW50KTsKICAgKgogICAqLwogIFQgZm9sZDxUPihUIGluaXRpYWxWYWx1ZSwgVCBjb21iaW5lKFQgcHJldmlvdXNWYWx1ZSwgRSBlbGVtZW50KSkgewogICAgdmFyIHZhbHVlID0gaW5pdGlhbFZhbHVlOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgdmFsdWUgPSBjb21iaW5lKHZhbHVlLCBlbGVtZW50KTsKICAgIHJldHVybiB2YWx1ZTsKICB9CgogIC8qKgogICAqIENoZWNrcyB3aGV0aGVyIGV2ZXJ5IGVsZW1lbnQgb2YgdGhpcyBpdGVyYWJsZSBzYXRpc2ZpZXMgW3Rlc3RdLgogICAqCiAgICogQ2hlY2tzIGV2ZXJ5IGVsZW1lbnQgaW4gaXRlcmF0aW9uIG9yZGVyLCBhbmQgcmV0dXJucyBgZmFsc2VgIGlmCiAgICogYW55IG9mIHRoZW0gbWFrZSBbdGVzdF0gcmV0dXJuIGBmYWxzZWAsIG90aGVyd2lzZSByZXR1cm5zIGB0cnVlYC4KICAgKi8KICBib29sIGV2ZXJ5KGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICghdGVzdChlbGVtZW50KSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvKioKICAgKiBDb252ZXJ0cyBlYWNoIGVsZW1lbnQgdG8gYSBbU3RyaW5nXSBhbmQgY29uY2F0ZW5hdGVzIHRoZSBzdHJpbmdzLgogICAqCiAgICogSXRlcmF0ZXMgdGhyb3VnaCBlbGVtZW50cyBvZiB0aGlzIGl0ZXJhYmxlLAogICAqIGNvbnZlcnRzIGVhY2ggb25lIHRvIGEgW1N0cmluZ10gYnkgY2FsbGluZyBbT2JqZWN0LnRvU3RyaW5nXSwKICAgKiBhbmQgdGhlbiBjb25jYXRlbmF0ZXMgdGhlIHN0cmluZ3MsIHdpdGggdGhlCiAgICogW3NlcGFyYXRvcl0gc3RyaW5nIGludGVybGVhdmVkIGJldHdlZW4gdGhlIGVsZW1lbnRzLgogICAqLwogIFN0cmluZyBqb2luKFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKSB7CiAgICBJdGVyYXRvcjxFPiBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3I7CiAgICBpZiAoIWl0ZXJhdG9yLm1vdmVOZXh0KCkpIHJldHVybiAiIjsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBTdHJpbmdCdWZmZXIoKTsKICAgIGlmIChzZXBhcmF0b3IgPT0gbnVsbCB8fCBzZXBhcmF0b3IgPT0gIiIpIHsKICAgICAgZG8gewogICAgICAgIGJ1ZmZlci53cml0ZSgiJHtpdGVyYXRvci5jdXJyZW50fSIpOwogICAgICB9IHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKTsKICAgIH0gZWxzZSB7CiAgICAgIGJ1ZmZlci53cml0ZSgiJHtpdGVyYXRvci5jdXJyZW50fSIpOwogICAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICAgIGJ1ZmZlci53cml0ZShzZXBhcmF0b3IpOwogICAgICAgIGJ1ZmZlci53cml0ZSgiJHtpdGVyYXRvci5jdXJyZW50fSIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICAvKioKICAgKiBDaGVja3Mgd2hldGhlciBhbnkgZWxlbWVudCBvZiB0aGlzIGl0ZXJhYmxlIHNhdGlzZmllcyBbdGVzdF0uCiAgICoKICAgKiBDaGVja3MgZXZlcnkgZWxlbWVudCBpbiBpdGVyYXRpb24gb3JkZXIsIGFuZCByZXR1cm5zIGB0cnVlYCBpZgogICAqIGFueSBvZiB0aGVtIG1ha2UgW3Rlc3RdIHJldHVybiBgdHJ1ZWAsIG90aGVyd2lzZSByZXR1cm5zIGZhbHNlLgogICAqLwogIGJvb2wgYW55KGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSBbTGlzdF0gY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcyBbSXRlcmFibGVdLgogICAqCiAgICogVGhlIGVsZW1lbnRzIGFyZSBpbiBpdGVyYXRpb24gb3JkZXIuCiAgICogVGhlIGxpc3QgaXMgZml4ZWQtbGVuZ3RoIGlmIFtncm93YWJsZV0gaXMgZmFsc2UuCiAgICovCiAgTGlzdDxFPiB0b0xpc3Qoe2Jvb2wgZ3Jvd2FibGUgPSB0cnVlfSkgewogICAgcmV0dXJuIExpc3Q8RT4uZnJvbSh0aGlzLCBncm93YWJsZTogZ3Jvd2FibGUpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtTZXRdIGNvbnRhaW5pbmcgdGhlIHNhbWUgZWxlbWVudHMgYXMgdGhpcyBpdGVyYWJsZS4KICAgKgogICAqIFRoZSBzZXQgbWF5IGNvbnRhaW4gZmV3ZXIgZWxlbWVudHMgdGhhbiB0aGUgaXRlcmFibGUsCiAgICogaWYgdGhlIGl0ZXJhYmxlIGNvbnRhaW5zIGFuIGVsZW1lbnQgbW9yZSB0aGFuIG9uY2UsCiAgICogb3IgaXQgY29udGFpbnMgb25lIG9yIG1vcmUgZWxlbWVudHMgdGhhdCBhcmUgZXF1YWwuCiAgICogVGhlIG9yZGVyIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgc2V0IGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHRoZSBzYW1lCiAgICogYXMgZm9yIHRoZSBpdGVyYWJsZS4KICAgKi8KICBTZXQ8RT4gdG9TZXQoKSA9PiBTZXQ8RT4uZnJvbSh0aGlzKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIFt0aGlzXS4KICAgKgogICAqIENvdW50aW5nIGFsbCBlbGVtZW50cyBtYXkgaW52b2x2ZSBpdGVyYXRpbmcgdGhyb3VnaCBhbGwgZWxlbWVudHMgYW5kIGNhbgogICAqIHRoZXJlZm9yZSBiZSBzbG93LgogICAqIFNvbWUgaXRlcmFibGVzIGhhdmUgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gZmluZCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLgogICAqLwogIGludCBnZXQgbGVuZ3RoIHsKICAgIGFzc2VydCh0aGlzIGlzISBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZSk7CiAgICBpbnQgY291bnQgPSAwOwogICAgSXRlcmF0b3IgaXQgPSBpdGVyYXRvcjsKICAgIHdoaWxlIChpdC5tb3ZlTmV4dCgpKSB7CiAgICAgIGNvdW50Kys7CiAgICB9CiAgICByZXR1cm4gY291bnQ7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBhcmUgbm8gZWxlbWVudHMgaW4gdGhpcyBjb2xsZWN0aW9uLgogICAqCiAgICogTWF5IGJlIGNvbXB1dGVkIGJ5IGNoZWNraW5nIGlmIGBpdGVyYXRvci5tb3ZlTmV4dCgpYCByZXR1cm5zIGBmYWxzZWAuCiAgICovCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiAhaXRlcmF0b3IubW92ZU5leHQoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHRoaXMgY29sbGVjdGlvbi4KICAgKgogICAqIE1heSBiZSBjb21wdXRlZCBieSBjaGVja2luZyBpZiBgaXRlcmF0b3IubW92ZU5leHQoKWAgcmV0dXJucyBgdHJ1ZWAuCiAgICovCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiAhaXNFbXB0eTsKCiAgLyoqCiAgICogUmV0dXJucyBhIGxhenkgaXRlcmFibGUgb2YgdGhlIFtjb3VudF0gZmlyc3QgZWxlbWVudHMgb2YgdGhpcyBpdGVyYWJsZS4KICAgKgogICAqIFRoZSByZXR1cm5lZCBgSXRlcmFibGVgIG1heSBjb250YWluIGZld2VyIHRoYW4gYGNvdW50YCBlbGVtZW50cywgaWYgYHRoaXNgCiAgICogY29udGFpbnMgZmV3ZXIgdGhhbiBgY291bnRgIGVsZW1lbnRzLgogICAqCiAgICogVGhlIGVsZW1lbnRzIGNhbiBiZSBjb21wdXRlZCBieSBzdGVwcGluZyB0aHJvdWdoIFtpdGVyYXRvcl0gdW50aWwgW2NvdW50XQogICAqIGVsZW1lbnRzIGhhdmUgYmVlbiBzZWVuLgogICAqCiAgICogVGhlIGBjb3VudGAgbXVzdCBub3QgYmUgbmVnYXRpdmUuCiAgICovCiAgSXRlcmFibGU8RT4gdGFrZShpbnQgY291bnQpIHsKICAgIHJldHVybiBUYWtlSXRlcmFibGU8RT4odGhpcywgY291bnQpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIGxhenkgaXRlcmFibGUgb2YgdGhlIGxlYWRpbmcgZWxlbWVudHMgc2F0aXNmeWluZyBbdGVzdF0uCiAgICoKICAgKiBUaGUgZmlsdGVyaW5nIGhhcHBlbnMgbGF6aWx5LiBFdmVyeSBuZXcgaXRlcmF0b3Igb2YgdGhlIHJldHVybmVkCiAgICogaXRlcmFibGUgc3RhcnRzIGl0ZXJhdGluZyBvdmVyIHRoZSBlbGVtZW50cyBvZiBgdGhpc2AuCiAgICoKICAgKiBUaGUgZWxlbWVudHMgY2FuIGJlIGNvbXB1dGVkIGJ5IHN0ZXBwaW5nIHRocm91Z2ggW2l0ZXJhdG9yXSB1bnRpbCBhbgogICAqIGVsZW1lbnQgaXMgZm91bmQgd2hlcmUgYHRlc3QoZWxlbWVudClgIGlzIGZhbHNlLiBBdCB0aGF0IHBvaW50LAogICAqIHRoZSByZXR1cm5lZCBpdGVyYWJsZSBzdG9wcyAoaXRzIGBtb3ZlTmV4dCgpYCByZXR1cm5zIGZhbHNlKS4KICAgKi8KICBJdGVyYWJsZTxFPiB0YWtlV2hpbGUoYm9vbCB0ZXN0KEUgdmFsdWUpKSB7CiAgICByZXR1cm4gVGFrZVdoaWxlSXRlcmFibGU8RT4odGhpcywgdGVzdCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGFuIFtJdGVyYWJsZV0gdGhhdCBwcm92aWRlcyBhbGwgYnV0IHRoZSBmaXJzdCBbY291bnRdIGVsZW1lbnRzLgogICAqCiAgICogV2hlbiB0aGUgcmV0dXJuZWQgaXRlcmFibGUgaXMgaXRlcmF0ZWQsIGl0IHN0YXJ0cyBpdGVyYXRpbmcgb3ZlciBgdGhpc2AsCiAgICogZmlyc3Qgc2tpcHBpbmcgcGFzdCB0aGUgaW5pdGlhbCBbY291bnRdIGVsZW1lbnRzLgogICAqIElmIGB0aGlzYCBoYXMgZmV3ZXIgdGhhbiBgY291bnRgIGVsZW1lbnRzLCB0aGVuIHRoZSByZXN1bHRpbmcgSXRlcmFibGUgaXMKICAgKiBlbXB0eS4KICAgKiBBZnRlciB0aGF0LCB0aGUgcmVtYWluaW5nIGVsZW1lbnRzIGFyZSBpdGVyYXRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcwogICAqIGluIHRoaXMgaXRlcmFibGUuCiAgICoKICAgKiBTb21lIGl0ZXJhYmxlcyBtYXkgYmUgYWJsZSB0byBmaW5kIGxhdGVyIGVsZW1lbnRzIHdpdGhvdXQgZmlyc3QgaXRlcmF0aW5nCiAgICogdGhyb3VnaCBlYXJsaWVyIGVsZW1lbnRzLCBmb3IgZXhhbXBsZSB3aGVuIGl0ZXJhdGluZyBhIFtMaXN0XS4KICAgKiBTdWNoIGl0ZXJhYmxlcyBhcmUgYWxsb3dlZCB0byBpZ25vcmUgdGhlIGluaXRpYWwgc2tpcHBlZCBlbGVtZW50cy4KICAgKgogICAqIFRoZSBbY291bnRdIG11c3Qgbm90IGJlIG5lZ2F0aXZlLgogICAqLwogIEl0ZXJhYmxlPEU+IHNraXAoaW50IGNvdW50KSB7CiAgICByZXR1cm4gU2tpcEl0ZXJhYmxlPEU+KHRoaXMsIGNvdW50KTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYW4gYEl0ZXJhYmxlYCB0aGF0IHNraXBzIGxlYWRpbmcgZWxlbWVudHMgd2hpbGUgW3Rlc3RdIGlzIHNhdGlzZmllZC4KICAgKgogICAqIFRoZSBmaWx0ZXJpbmcgaGFwcGVucyBsYXppbHkuIEV2ZXJ5IG5ldyBbSXRlcmF0b3JdIG9mIHRoZSByZXR1cm5lZAogICAqIGl0ZXJhYmxlIGl0ZXJhdGVzIG92ZXIgYWxsIGVsZW1lbnRzIG9mIGB0aGlzYC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBpdGVyYWJsZSBwcm92aWRlcyBlbGVtZW50cyBieSBpdGVyYXRpbmcgdGhpcyBpdGVyYWJsZSwKICAgKiBidXQgc2tpcHBpbmcgb3ZlciBhbGwgaW5pdGlhbCBlbGVtZW50cyB3aGVyZSBgdGVzdChlbGVtZW50KWAgcmV0dXJucwogICAqIHRydWUuIElmIGFsbCBlbGVtZW50cyBzYXRpc2Z5IGB0ZXN0YCB0aGUgcmVzdWx0aW5nIGl0ZXJhYmxlIGlzIGVtcHR5LAogICAqIG90aGVyd2lzZSBpdCBpdGVyYXRlcyB0aGUgcmVtYWluaW5nIGVsZW1lbnRzIGluIHRoZWlyIG9yaWdpbmFsIG9yZGVyLAogICAqIHN0YXJ0aW5nIHdpdGggdGhlIGZpcnN0IGVsZW1lbnQgZm9yIHdoaWNoIGB0ZXN0KGVsZW1lbnQpYCByZXR1cm5zIGBmYWxzZWAuCiAgICovCiAgSXRlcmFibGU8RT4gc2tpcFdoaWxlKGJvb2wgdGVzdChFIHZhbHVlKSkgewogICAgcmV0dXJuIFNraXBXaGlsZUl0ZXJhYmxlPEU+KHRoaXMsIHRlc3QpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudC4KICAgKgogICAqIFRocm93cyBhIFtTdGF0ZUVycm9yXSBpZiBgdGhpc2AgaXMgZW1wdHkuCiAgICogT3RoZXJ3aXNlIHJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGl0ZXJhdGlvbiBvcmRlciwKICAgKiBlcXVpdmFsZW50IHRvIGB0aGlzLmVsZW1lbnRBdCgwKWAuCiAgICovCiAgRSBnZXQgZmlyc3QgewogICAgSXRlcmF0b3I8RT4gaXQgPSBpdGVyYXRvcjsKICAgIGlmICghaXQubW92ZU5leHQoKSkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIH0KICAgIHJldHVybiBpdC5jdXJyZW50OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGFzdCBlbGVtZW50LgogICAqCiAgICogVGhyb3dzIGEgW1N0YXRlRXJyb3JdIGlmIGB0aGlzYCBpcyBlbXB0eS4KICAgKiBPdGhlcndpc2UgbWF5IGl0ZXJhdGUgdGhyb3VnaCB0aGUgZWxlbWVudHMgYW5kIHJldHVybnMgdGhlIGxhc3Qgb25lCiAgICogc2Vlbi4KICAgKiBTb21lIGl0ZXJhYmxlcyBtYXkgaGF2ZSBtb3JlIGVmZmljaWVudCB3YXlzIHRvIGZpbmQgdGhlIGxhc3QgZWxlbWVudAogICAqIChmb3IgZXhhbXBsZSBhIGxpc3QgY2FuIGRpcmVjdGx5IGFjY2VzcyB0aGUgbGFzdCBlbGVtZW50LAogICAqIHdpdGhvdXQgaXRlcmF0aW5nIHRocm91Z2ggdGhlIHByZXZpb3VzIG9uZXMpLgogICAqLwogIEUgZ2V0IGxhc3QgewogICAgSXRlcmF0b3I8RT4gaXQgPSBpdGVyYXRvcjsKICAgIGlmICghaXQubW92ZU5leHQoKSkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIH0KICAgIEUgcmVzdWx0OwogICAgZG8gewogICAgICByZXN1bHQgPSBpdC5jdXJyZW50OwogICAgfSB3aGlsZSAoaXQubW92ZU5leHQoKSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogQ2hlY2tzIHRoYXQgdGhpcyBpdGVyYWJsZSBoYXMgb25seSBvbmUgZWxlbWVudCwgYW5kIHJldHVybnMgdGhhdCBlbGVtZW50LgogICAqCiAgICogVGhyb3dzIGEgW1N0YXRlRXJyb3JdIGlmIGB0aGlzYCBpcyBlbXB0eSBvciBoYXMgbW9yZSB0aGFuIG9uZSBlbGVtZW50LgogICAqLwogIEUgZ2V0IHNpbmdsZSB7CiAgICBJdGVyYXRvcjxFPiBpdCA9IGl0ZXJhdG9yOwogICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIEUgcmVzdWx0ID0gaXQuY3VycmVudDsKICAgIGlmIChpdC5tb3ZlTmV4dCgpKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IHNhdGlzZmllcyB0aGUgZ2l2ZW4gcHJlZGljYXRlIFt0ZXN0XS4KICAgKgogICAqIEl0ZXJhdGVzIHRocm91Z2ggZWxlbWVudHMgYW5kIHJldHVybnMgdGhlIGZpcnN0IHRvIHNhdGlzZnkgW3Rlc3RdLgogICAqCiAgICogSWYgbm8gZWxlbWVudCBzYXRpc2ZpZXMgW3Rlc3RdLCB0aGUgcmVzdWx0IG9mIGludm9raW5nIHRoZSBbb3JFbHNlXQogICAqIGZ1bmN0aW9uIGlzIHJldHVybmVkLgogICAqIElmIFtvckVsc2VdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRocm93aW5nIGEgW1N0YXRlRXJyb3JdLgogICAqLwogIEUgZmlyc3RXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsYXN0IGVsZW1lbnQgdGhhdCBzYXRpc2ZpZXMgdGhlIGdpdmVuIHByZWRpY2F0ZSBbdGVzdF0uCiAgICoKICAgKiBBbiBpdGVyYWJsZSB0aGF0IGNhbiBhY2Nlc3MgaXRzIGVsZW1lbnRzIGRpcmVjdGx5IG1heSBjaGVjayBpdHMKICAgKiBlbGVtZW50cyBpbiBhbnkgb3JkZXIgKGZvciBleGFtcGxlIGEgbGlzdCBzdGFydHMgYnkgY2hlY2tpbmcgdGhlCiAgICogbGFzdCBlbGVtZW50IGFuZCB0aGVuIG1vdmVzIHRvd2FyZHMgdGhlIHN0YXJ0IG9mIHRoZSBsaXN0KS4KICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpdGVyYXRlcyBlbGVtZW50cyBpbiBpdGVyYXRpb24gb3JkZXIsCiAgICogY2hlY2tzIGB0ZXN0KGVsZW1lbnQpYCBmb3IgZWFjaCwKICAgKiBhbmQgZmluYWxseSByZXR1cm5zIHRoYXQgbGFzdCBvbmUgdGhhdCBtYXRjaGVkLgogICAqCiAgICogSWYgbm8gZWxlbWVudCBzYXRpc2ZpZXMgW3Rlc3RdLCB0aGUgcmVzdWx0IG9mIGludm9raW5nIHRoZSBbb3JFbHNlXQogICAqIGZ1bmN0aW9uIGlzIHJldHVybmVkLgogICAqIElmIFtvckVsc2VdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRocm93aW5nIGEgW1N0YXRlRXJyb3JdLgogICAqLwogIEUgbGFzdFdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCB7RSBvckVsc2UoKX0pIHsKICAgIEUgcmVzdWx0OwogICAgYm9vbCBmb3VuZE1hdGNoaW5nID0gZmFsc2U7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsKICAgICAgICBmb3VuZE1hdGNoaW5nID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHJldHVybiByZXN1bHQ7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc2luZ2xlIGVsZW1lbnQgdGhhdCBzYXRpc2ZpZXMgW3Rlc3RdLgogICAqCiAgICogQ2hlY2tzIGVsZW1lbnRzIHRvIHNlZSBpZiBgdGVzdChlbGVtZW50KWAgcmV0dXJucyB0cnVlLgogICAqIElmIGV4YWN0bHkgb25lIGVsZW1lbnQgc2F0aXNmaWVzIFt0ZXN0XSwgdGhhdCBlbGVtZW50IGlzIHJldHVybmVkLgogICAqIElmIG1vcmUgdGhhbiBvbmUgbWF0Y2hpbmcgZWxlbWVudCBpcyBmb3VuZCwgdGhyb3dzIFtTdGF0ZUVycm9yXS4KICAgKiBJZiBubyBtYXRjaGluZyBlbGVtZW50IGlzIGZvdW5kLCByZXR1cm5zIHRoZSByZXN1bHQgb2YgW29yRWxzZV0uCiAgICogSWYgW29yRWxzZV0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhyb3dpbmcgYSBbU3RhdGVFcnJvcl0uCiAgICovCiAgRSBzaW5nbGVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICBFIHJlc3VsdDsKICAgIGJvb2wgZm91bmRNYXRjaGluZyA9IGZhbHNlOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIGlmIChmb3VuZE1hdGNoaW5nKSB7CiAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICAgICAgfQogICAgICAgIHJlc3VsdCA9IGVsZW1lbnQ7CiAgICAgICAgZm91bmRNYXRjaGluZyA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIGlmIChmb3VuZE1hdGNoaW5nKSByZXR1cm4gcmVzdWx0OwogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIFtpbmRleF10aCBlbGVtZW50LgogICAqCiAgICogVGhlIFtpbmRleF0gbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIGxlc3MgdGhhbiBbbGVuZ3RoXS4KICAgKiBJbmRleCB6ZXJvIHJlcHJlc2VudHMgdGhlIGZpcnN0IGVsZW1lbnQgKHNvIGBpdGVyYWJsZS5lbGVtZW50QXQoMClgIGlzCiAgICogZXF1aXZhbGVudCB0byBgaXRlcmFibGUuZmlyc3RgKS4KICAgKgogICAqIE1heSBpdGVyYXRlIHRocm91Z2ggdGhlIGVsZW1lbnRzIGluIGl0ZXJhdGlvbiBvcmRlciwgaWdub3JpbmcgdGhlCiAgICogZmlyc3QgW2luZGV4XSBlbGVtZW50cyBhbmQgdGhlbiByZXR1cm5pbmcgdGhlIG5leHQuCiAgICogU29tZSBpdGVyYWJsZXMgbWF5IGhhdmUgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gZmluZCB0aGUgZWxlbWVudC4KICAgKi8KICBFIGVsZW1lbnRBdChpbnQgaW5kZXgpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGluZGV4LCAiaW5kZXgiKTsKICAgIFJhbmdlRXJyb3IuY2hlY2tOb3ROZWdhdGl2ZShpbmRleCwgImluZGV4Iik7CiAgICBpbnQgZWxlbWVudEluZGV4ID0gMDsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKGluZGV4ID09IGVsZW1lbnRJbmRleCkgcmV0dXJuIGVsZW1lbnQ7CiAgICAgIGVsZW1lbnRJbmRleCsrOwogICAgfQogICAgdGhyb3cgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4IiwgbnVsbCwgZWxlbWVudEluZGV4KTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgKHNvbWUgb2YpIHRoZSBlbGVtZW50cyBvZiBgdGhpc2AuCiAgICoKICAgKiBFbGVtZW50cyBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlaXIgb3duIGB0b1N0cmluZ2AgcmVzdWx0cy4KICAgKgogICAqIFRoZSBkZWZhdWx0IHJlcHJlc2VudGF0aW9uIGFsd2F5cyBjb250YWlucyB0aGUgZmlyc3QgdGhyZWUgZWxlbWVudHMuCiAgICogSWYgdGhlcmUgYXJlIGxlc3MgdGhhbiBhIGh1bmRyZWQgZWxlbWVudHMgaW4gdGhlIGl0ZXJhYmxlLCBpdCBhbHNvCiAgICogY29udGFpbnMgdGhlIGxhc3QgdHdvIGVsZW1lbnRzLgogICAqCiAgICogSWYgdGhlIHJlc3VsdGluZyBzdHJpbmcgaXNuJ3QgYWJvdmUgODAgY2hhcmFjdGVycywgbW9yZSBlbGVtZW50cyBhcmUKICAgKiBpbmNsdWRlZCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgaXRlcmFibGUuCiAgICoKICAgKiBUaGUgY29udmVyc2lvbiBtYXkgb21pdCBjYWxsaW5nIGB0b1N0cmluZ2Agb24gc29tZSBlbGVtZW50cyBpZiB0aGV5CiAgICogYXJlIGtub3duIHRvIG5vdCBvY2N1ciBpbiB0aGUgb3V0cHV0LCBhbmQgaXQgbWF5IHN0b3AgaXRlcmF0aW5nIGFmdGVyCiAgICogYSBodW5kcmVkIGVsZW1lbnRzLgogICAqLwogIFN0cmluZyB0b1N0cmluZygpID0+IEl0ZXJhYmxlQmFzZS5pdGVyYWJsZVRvU2hvcnRTdHJpbmcodGhpcywgJygnLCAnKScpOwp9Cgp0eXBlZGVmIF9HZW5lcmF0b3I8RT4gPSBFIEZ1bmN0aW9uKGludCBpbmRleCk7CgpjbGFzcyBfR2VuZXJhdG9ySXRlcmFibGU8RT4gZXh0ZW5kcyBMaXN0SXRlcmFibGU8RT4gewogIC8vLyBUaGUgbGVuZ3RoIG9mIHRoZSBnZW5lcmF0ZWQgaXRlcmFibGUuCiAgZmluYWwgaW50IGxlbmd0aDsKCiAgLy8vIFRoZSBmdW5jdGlvbiBtYXBwaW5nIGluZGljZXMgdG8gdmFsdWVzLgogIGZpbmFsIF9HZW5lcmF0b3I8RT4gX2dlbmVyYXRvcjsKCiAgLy8vIENyZWF0ZXMgdGhlIGdlbmVyYXRlZCBpdGVyYWJsZS4KICAvLy8KICAvLy8gSWYgW2dlbmVyYXRvcl0gaXMgYG51bGxgLCBpdCBpcyBjaGVja2VkIHRoYXQgYGludGAgaXMgYXNzaWduYWJsZSB0byBbRV0uCiAgX0dlbmVyYXRvckl0ZXJhYmxlKHRoaXMubGVuZ3RoLCBFIGdlbmVyYXRvcihpbnQgaW5kZXgpKQogICAgICA6IC8vIFRoZSBgYXNgIGJlbG93IGlzIHVzZWQgYXMgY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgYGludGAgaXMgYXNzaWduYWJsZQogICAgICAgIC8vIHRvIFtFXS4KICAgICAgICBfZ2VuZXJhdG9yID0gKGdlbmVyYXRvciAhPSBudWxsKSA/IGdlbmVyYXRvciA6IF9pZCBhcyBfR2VuZXJhdG9yPEU+OwoKICBFIGVsZW1lbnRBdChpbnQgaW5kZXgpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZEluZGV4KGluZGV4LCB0aGlzKTsKICAgIHJldHVybiBfZ2VuZXJhdG9yKGluZGV4KTsKICB9CgogIC8vLyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBhcyBkZWZhdWx0IF9nZW5lcmF0b3IgZnVuY3Rpb24uCiAgc3RhdGljIGludCBfaWQoaW50IG4pID0+IG47Cn0KCi8qKgogKiBBbiBJdGVyYXRvciB0aGF0IGFsbG93cyBtb3ZpbmcgYmFja3dhcmRzIGFzIHdlbGwgYXMgZm9yd2FyZHMuCiAqLwphYnN0cmFjdCBjbGFzcyBCaWRpcmVjdGlvbmFsSXRlcmF0b3I8RT4gaW1wbGVtZW50cyBJdGVyYXRvcjxFPiB7CiAgLyoqCiAgICogTW92ZSBiYWNrIHRvIHRoZSBwcmV2aW91cyBlbGVtZW50LgogICAqCiAgICogUmV0dXJucyB0cnVlIGFuZCB1cGRhdGVzIFtjdXJyZW50XSBpZiBzdWNjZXNzZnVsLiBSZXR1cm5zIGZhbHNlCiAgICogYW5kIHNldHMgW2N1cnJlbnRdIHRvIG51bGwgaWYgdGhlcmUgaXMgbm8gcHJldmlvdXMgZWxlbWVudC4KICAgKi8KICBib29sIG1vdmVQcmV2aW91cygpOwp9CoLHAE5OPAEPARMBBE0DRklGIzMyPCoDQzxBO0dLMgM7UAtBJAMxOkgqOwkDNTkDMEhRTTZLFgM2H0MvMDI7TANJSk9LKgM8NE82RANHQkEDTTFOTBYEHUREFAEGRQUySUkFREdGDwVPLQZDLzQEAQYgBUcSBjUBBi0FR01OUAY7IgEGSREFSDlGIAU+Qk48OQVBSDdEQisFSUQXShYGHAEGRwVFRkQFRUsGOgZDBUxLGQYuLkAGLwQBBkVIBUdOTEo2BUYzNgZBAQZGFwVIIQU4PjdONTkGSwEGSQVIIQU4Tjo7BjwBBkkFPzoFRScFDgUnQC8FIEA1BQY1JQEGTAVIRhkFUD4FUTU0O0AGIhglBhIEAQZODAYkKAQBBk40BTI7BUxKDwUjLiwNFwU0BT8FBiwqIC4GICIwBhIEAQZKNgUvQzoFIyMsCxcFNAU+BQZFHj0SBAEGRQVFRwYlHigGEQQBBkcFMUMxOgYpKikqMAstJQ0rJCEtCAYeBAEGQwVERQYjHiYGEgQBBkIFKjYGKzMEAQZEBTs5OUsaBicBBi8FThhOBhMuExwcDwYSBAEGQQVLBiwBBkcFSgYjAQZNBVArBU8eBScGICkEAQZIBUY8BUpFQwYuLQQBBk0FTjdPDEoXBU9ESAUnBiApBAEGUgVINAVJSktLUAYuLQQBBiAFL0EoBhAfGi4GFwQBBh8FL0kLSj8zBg8fGi4GDgkbHRMEAQZPBUwGER9AGz0TBAEGSgVIBUkbRQY1HikGKSwEAQZJBUVGQUYmNQVJG0UGNA4gHhsaHggGJiksBAEGNwU9SEZGRQY2DiAeGx0wChoeCAYmKSwEAQYkBT5MJgVHOUcGGzAxGh4xFgZGBAEGSgU/BUpIJQVKLgVJSxkGSwIBLwE2LBQBLiIBJgZPOlETTQEbLR4EATseAgEEQQRBBigFRUEGFwIBF2RhcnQ6Y29yZS9pdGVyYWJsZS5kYXJ0TW9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL19pbnRlcm5hbC92bS9saWIvY29yZV9wYXRjaC5kYXJ0kn4vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vLyBOb3RlOiB0aGUgVk0gY29uY2F0ZW5hdGVzIGFsbCBwYXRjaCBmaWxlcyBpbnRvIGEgc2luZ2xlIHBhdGNoIGZpbGUuIFRoaXMKLy8vIGZpbGUgaXMgdGhlIGZpcnN0IHBhdGNoIGluICJkYXJ0OmNvcmUiIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgaW1wb3J0cwovLy8gdXNlZCBieSBwYXRjaGVzIG9mIHRoYXQgbGlicmFyeS4gV2UgcGxhbiB0byBjaGFuZ2UgdGhpcyB3aGVuIHdlIGhhdmUgYQovLy8gc2hhcmVkIGZyb250IGVuZCBhbmQgc2ltcGx5IHVzZSBwYXJ0cy4KCmltcG9ydCAiZGFydDpfaW50ZXJuYWwiIGFzIGludGVybmFsIHNob3cgU3ltYm9sOwoKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIKICAgIHNob3cKICAgICAgICBDbGFzc0lELAogICAgICAgIENvZGVVbml0cywKICAgICAgICBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZSwKICAgICAgICBGaXhlZExlbmd0aExpc3RCYXNlLAogICAgICAgIEl0ZXJhYmxlRWxlbWVudEVycm9yLAogICAgICAgIExpc3RJdGVyYXRvciwKICAgICAgICBMaXN0cywKICAgICAgICBQT1dFUlNfT0ZfVEVOLAogICAgICAgIFN1Ykxpc3RJdGVyYWJsZSwKICAgICAgICBVbm1vZGlmaWFibGVMaXN0QmFzZSwKICAgICAgICBpczY0Qml0LAogICAgICAgIG1ha2VGaXhlZExpc3RVbm1vZGlmaWFibGUsCiAgICAgICAgbWFrZUxpc3RGaXhlZExlbmd0aCwKICAgICAgICBwYXRjaCwKICAgICAgICB1bnNhZmVDYXN0OwoKaW1wb3J0ICJkYXJ0OmFzeW5jIiBzaG93IENvbXBsZXRlciwgRnV0dXJlLCBUaW1lcjsKCmltcG9ydCAiZGFydDpjb2xsZWN0aW9uIgogICAgc2hvdwogICAgICAgIEhhc2hNYXAsCiAgICAgICAgSXRlcmFibGVCYXNlLAogICAgICAgIExpbmtlZEhhc2hNYXAsCiAgICAgICAgTGlua2VkTGlzdCwKICAgICAgICBMaW5rZWRMaXN0RW50cnksCiAgICAgICAgTGlzdEJhc2UsCiAgICAgICAgTWFwQmFzZSwKICAgICAgICBNYXBzLAogICAgICAgIFVubW9kaWZpYWJsZU1hcEJhc2UsCiAgICAgICAgVW5tb2RpZmlhYmxlTWFwVmlldzsKCmltcG9ydCAiZGFydDpjb252ZXJ0IiBzaG93IGFzY2lpLCBFbmNvZGluZywganNvbiwgbGF0aW4xLCB1dGY4OwoKaW1wb3J0ICJkYXJ0Omlzb2xhdGUiIHNob3cgSXNvbGF0ZTsKCmltcG9ydCAiZGFydDptYXRoIiBzaG93IFJhbmRvbTsKCmltcG9ydCAiZGFydDp0eXBlZF9kYXRhIgogICAgc2hvdyBFbmRpYW4sIFVpbnQ4TGlzdCwgSW50NjRMaXN0LCBVaW50MTZMaXN0LCBVaW50MzJMaXN0OwoKLy8vIFRoZXNlIGFyZSB0aGUgYWRkaXRpb25hbCBwYXJ0cyBvZiB0aGlzIHBhdGNoIGxpYnJhcnk6Ci8vIHBhcnQgImFycmF5LmRhcnQiOwovLyBwYXJ0ICJhcnJheV9wYXRjaC5kYXJ0IjsKLy8gcGFydCAiYmlnaW50X3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJib29sX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJkYXRlX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJkb3VibGUuZGFydCI7Ci8vIHBhcnQgImRvdWJsZV9wYXRjaC5kYXJ0IjsKLy8gcGFydCAiZXJyb3JzX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJleHBhbmRvX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJmdW5jdGlvbi5kYXJ0IjsKLy8gcGFydCAiZnVuY3Rpb25fcGF0Y2guZGFydCI7Ci8vIHBhcnQgImdyb3dhYmxlX2FycmF5LmRhcnQiOwovLyBwYXJ0ICJpZGVudGljYWxfcGF0Y2guZGFydCI7Ci8vIHBhcnQgImltbXV0YWJsZV9tYXAuZGFydCI7Ci8vIHBhcnQgImludGVnZXJzLmRhcnQiOwovLyBwYXJ0ICJpbnRlZ2Vyc19wYXRjaC5kYXJ0IjsKLy8gcGFydCAiaW52b2NhdGlvbl9taXJyb3JfcGF0Y2guZGFydCI7Ci8vIHBhcnQgImxpYl9wcmVmaXguZGFydCI7Ci8vIHBhcnQgIm1hcF9wYXRjaC5kYXJ0IjsKLy8gcGFydCAibnVsbF9wYXRjaC5kYXJ0IjsKLy8gcGFydCAib2JqZWN0X3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJyZWdleHBfcGF0Y2guZGFydCI7Ci8vIHBhcnQgInN0YWNrdHJhY2UuZGFydCI7Ci8vIHBhcnQgInN0b3B3YXRjaF9wYXRjaC5kYXJ0IjsKLy8gcGFydCAic3RyaW5nX2J1ZmZlcl9wYXRjaC5kYXJ0IjsKLy8gcGFydCAic3RyaW5nX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJ0eXBlX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJ1cmlfcGF0Y2guZGFydCI7Ci8vIHBhcnQgIndlYWtfcHJvcGVydHkuZGFydCI7CgpAcGF0Y2gKY2xhc3MgbnVtIHsKICBudW0gX2FkZEZyb21JbnRlZ2VyKGludCBvdGhlcik7CiAgbnVtIF9zdWJGcm9tSW50ZWdlcihpbnQgb3RoZXIpOwogIG51bSBfbXVsRnJvbUludGVnZXIoaW50IG90aGVyKTsKICBpbnQgX3RydW5jRGl2RnJvbUludGVnZXIoaW50IG90aGVyKTsKICBudW0gX21vZHVsb0Zyb21JbnRlZ2VyKGludCBvdGhlcik7CiAgbnVtIF9yZW1haW5kZXJGcm9tSW50ZWdlcihpbnQgb3RoZXIpOwogIGJvb2wgX2dyZWF0ZXJUaGFuRnJvbUludGVnZXIoaW50IG90aGVyKTsKICBib29sIF9lcXVhbFRvSW50ZWdlcihpbnQgb3RoZXIpOwp9CgovLyBfU3luY0l0ZXJhYmxlIGFuZCBfc3luY0l0ZXJhdG9yIGFyZSB1c2VkIGJ5IHRoZSBjb21waWxlciB0bwovLyBpbXBsZW1lbnQgc3luYyogZ2VuZXJhdG9yIGZ1bmN0aW9ucy4gQSBzeW5jKiBnZW5lcmF0b3IgYWxsb2NhdGVzCi8vIGFuZCByZXR1cm5zIGEgbmV3IF9TeW5jSXRlcmFibGUgb2JqZWN0LgoKdHlwZWRlZiBib29sIF9TeW5jR2VuZXJhdG9yQ2FsbGJhY2s8VD4oX1N5bmNJdGVyYXRvcjxUPiBpdGVyYXRvcik7CgpjbGFzcyBfU3luY0l0ZXJhYmxlPFQ+IGV4dGVuZHMgSXRlcmFibGVCYXNlPFQ+IHsKICAvLyBfbW92ZU5leHRGbiBpcyB0aGUgY2xvc3VyaXplZCBib2R5IG9mIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24uCiAgZmluYWwgX1N5bmNHZW5lcmF0b3JDYWxsYmFjazxUPiBfbW92ZU5leHRGbjsKCiAgY29uc3QgX1N5bmNJdGVyYWJsZSh0aGlzLl9tb3ZlTmV4dEZuKTsKCiAgSXRlcmF0b3I8VD4gZ2V0IGl0ZXJhdG9yIHsKICAgIC8vIE5vdGU6IF9DbG9zdXJlLl9jbG9uZSByZXR1cm5zIF9DbG9zdXJlIHdoaWNoIGlzIG5vdCByZWxhdGVkIHRvCiAgICAvLyBfU3luY0dlbmVyYXRvckNhbGxiYWNrLCB3aGljaCBtZWFucyB3ZSBuZWVkIGV4cGxpY2l0IGNhc3QuCiAgICByZXR1cm4gbmV3IF9TeW5jSXRlcmF0b3I8VD4odW5zYWZlQ2FzdDxfU3luY0dlbmVyYXRvckNhbGxiYWNrPFQ+PigKICAgICAgICB1bnNhZmVDYXN0PF9DbG9zdXJlPihfbW92ZU5leHRGbikuX2Nsb25lKCkpKTsKICB9Cn0KCmNsYXNzIF9TeW5jSXRlcmF0b3I8VD4gaW1wbGVtZW50cyBJdGVyYXRvcjxUPiB7CiAgX1N5bmNHZW5lcmF0b3JDYWxsYmFjazxUPiBfbW92ZU5leHRGbjsKICBJdGVyYXRvcjxUPiBfeWllbGRFYWNoSXRlcmF0b3I7CgogIC8vIFRoZXNlIHR3byBmaWVsZHMgYXJlIHNldCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgdGhlIHlpZWxkIGFuZCB5aWVsZCoKICAvLyBzdGF0ZW1lbnQuCiAgVCBfY3VycmVudDsKICBJdGVyYWJsZTxUPiBfeWllbGRFYWNoSXRlcmFibGU7CgogIFQgZ2V0IGN1cnJlbnQgPT4KICAgICAgX3lpZWxkRWFjaEl0ZXJhdG9yICE9IG51bGwgPyBfeWllbGRFYWNoSXRlcmF0b3IuY3VycmVudCA6IF9jdXJyZW50OwoKICBfU3luY0l0ZXJhdG9yKHRoaXMuX21vdmVOZXh0Rm4pOwoKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF9tb3ZlTmV4dEZuID09IG51bGwpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKF95aWVsZEVhY2hJdGVyYXRvciAhPSBudWxsKSB7CiAgICAgICAgaWYgKF95aWVsZEVhY2hJdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgX3lpZWxkRWFjaEl0ZXJhdG9yID0gbnVsbDsKICAgICAgfQogICAgICAvLyBfbW92ZU5leHRGbigpIHdpbGwgdXBkYXRlIHRoZSB2YWx1ZXMgb2YgX3lpZWxkRWFjaEl0ZXJhYmxlCiAgICAgIC8vICBhbmQgX2N1cnJlbnQuCiAgICAgIGlmICghX21vdmVOZXh0Rm4odGhpcykpIHsKICAgICAgICBfbW92ZU5leHRGbiA9IG51bGw7CiAgICAgICAgX2N1cnJlbnQgPSBudWxsOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAoX3lpZWxkRWFjaEl0ZXJhYmxlICE9IG51bGwpIHsKICAgICAgICAvLyBTcGVjIG1hbmRhdGVzOiBpdCBpcyBhIGR5bmFtaWMgZXJyb3IgaWYgdGhlIGNsYXNzIG9mIFt0aGUgb2JqZWN0CiAgICAgICAgLy8gcmV0dXJuZWQgYnkgeWllbGQqXSBkb2VzIG5vdCBpbXBsZW1lbnQgSXRlcmFibGUuCiAgICAgICAgX3lpZWxkRWFjaEl0ZXJhdG9yID0gX3lpZWxkRWFjaEl0ZXJhYmxlLml0ZXJhdG9yOwogICAgICAgIF95aWVsZEVhY2hJdGVyYWJsZSA9IG51bGw7CiAgICAgICAgX2N1cnJlbnQgPSBudWxsOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KfQoKQHBhdGNoCmNsYXNzIFN0YWNrVHJhY2UgewogIEBwYXRjaAogIHN0YXRpYyBTdGFja1RyYWNlIGdldCBjdXJyZW50IG5hdGl2ZSAiU3RhY2tUcmFjZV9jdXJyZW50IjsKfQqAqgBOTjwBDwFNSksrATEBGAkREyEdHhYPFxkeESMdDxQBMwEZCREWFxQZEhEOHR0BQAEkASABGT8BOhYcHRsbFx0dHhkfHyAeGR8oGxobHR0bICQdGxoeAQcMIiIiJyUoKyMCAT9EKwFDATFDLwEpAR1GQkc2BAIBMCkiAUkQDiIBE0oBIwEUHxQGEygtFwojCEQYIBwZFggoTDw6IxkSCBMGBAIBBxMJPQIBH2RhcnQ6Y29yZS1wYXRjaC9jb3JlX3BhdGNoLmRhcnRIb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvX2ludGVybmFsL3ZtL2xpYi9hcnJheS5kYXJ0nWQvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9MaXN0PEU+IGV4dGVuZHMgRml4ZWRMZW5ndGhMaXN0QmFzZTxFPiB7CiAgQHByYWdtYSgKICAgICAgInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgW19MaXN0LCAicmVzdWx0LXR5cGUtdXNlcy1wYXNzZWQtdHlwZS1hcmd1bWVudHMiXSkKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBmYWN0b3J5IF9MaXN0KGxlbmd0aCkgbmF0aXZlICJMaXN0X2FsbG9jYXRlIjsKCiAgRSBvcGVyYXRvciBbXShpbnQgaW5kZXgpIG5hdGl2ZSAiTGlzdF9nZXRJbmRleGVkIjsKCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBFIHZhbHVlKSB7CiAgICBfc2V0SW5kZXhlZChpbmRleCwgdmFsdWUpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZChpbnQgaW5kZXgsIEUgdmFsdWUpIG5hdGl2ZSAiTGlzdF9zZXRJbmRleGVkIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXQgbGVuZ3RoIG5hdGl2ZSAiTGlzdF9nZXRMZW5ndGgiOwoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBMaXN0IF9zbGljZShpbnQgc3RhcnQsIGludCBjb3VudCwgYm9vbCBuZWVkc1R5cGVBcmd1bWVudCkgewogICAgaWYgKGNvdW50IDw9IDY0KSB7CiAgICAgIGZpbmFsIHJlc3VsdCA9IG5lZWRzVHlwZUFyZ3VtZW50ID8gbmV3IF9MaXN0PEU+KGNvdW50KSA6IG5ldyBfTGlzdChjb3VudCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgcmVzdWx0W2ldID0gdGhpc1tzdGFydCArIGldOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX3NsaWNlSW50ZXJuYWwoc3RhcnQsIGNvdW50LCBuZWVkc1R5cGVBcmd1bWVudCk7CiAgICB9CiAgfQoKICBMaXN0IF9zbGljZUludGVybmFsKGludCBzdGFydCwgaW50IGNvdW50LCBib29sIG5lZWRzVHlwZUFyZ3VtZW50KQogICAgICBuYXRpdmUgIkxpc3Rfc2xpY2UiOwoKICAvLyBMaXN0IGludGVyZmFjZS4KICB2b2lkIHNldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGU8RT4gaXRlcmFibGUsIFtpbnQgc2tpcENvdW50ID0gMF0pIHsKICAgIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPiB0aGlzLmxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShzdGFydCwgMCwgdGhpcy5sZW5ndGgpOwogICAgfQogICAgaWYgKGVuZCA8IHN0YXJ0IHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGVuZCwgc3RhcnQsIHRoaXMubGVuZ3RoKTsKICAgIH0KICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIGlmIChsZW5ndGggPT0gMCkgcmV0dXJuOwogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBpdGVyYWJsZSkpIHsKICAgICAgTGlzdHMuY29weSh0aGlzLCBza2lwQ291bnQsIHRoaXMsIHN0YXJ0LCBsZW5ndGgpOwogICAgfSBlbHNlIGlmIChDbGFzc0lELmdldElEKGl0ZXJhYmxlKSA9PSBDbGFzc0lELmNpZEFycmF5KSB7CiAgICAgIGZpbmFsIF9MaXN0PEU+IGl0ZXJhYmxlQXNMaXN0ID0gaXRlcmFibGU7CiAgICAgIExpc3RzLmNvcHkoaXRlcmFibGVBc0xpc3QsIHNraXBDb3VudCwgdGhpcywgc3RhcnQsIGxlbmd0aCk7CiAgICB9IGVsc2UgaWYgKGl0ZXJhYmxlIGlzIExpc3Q8RT4pIHsKICAgICAgTGlzdHMuY29weShpdGVyYWJsZSwgc2tpcENvdW50LCB0aGlzLCBzdGFydCwgbGVuZ3RoKTsKICAgIH0gZWxzZSB7CiAgICAgIEl0ZXJhdG9yIGl0ID0gaXRlcmFibGUuaXRlcmF0b3I7CiAgICAgIHdoaWxlIChza2lwQ291bnQgPiAwKSB7CiAgICAgICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSByZXR1cm47CiAgICAgICAgc2tpcENvdW50LS07CiAgICAgIH0KICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHJldHVybjsKICAgICAgICB0aGlzW2ldID0gaXQuY3VycmVudDsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBzZXRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IHRoaXMubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGluZGV4LCAwLCB0aGlzLmxlbmd0aCwgImluZGV4Iik7CiAgICB9CiAgICBMaXN0PEU+IGl0ZXJhYmxlQXNMaXN0OwogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBpdGVyYWJsZSkpIHsKICAgICAgaXRlcmFibGVBc0xpc3QgPSB0aGlzOwogICAgfSBlbHNlIGlmIChDbGFzc0lELmdldElEKGl0ZXJhYmxlKSA9PSBDbGFzc0lELmNpZEFycmF5KSB7CiAgICAgIGl0ZXJhYmxlQXNMaXN0ID0gaXRlcmFibGU7CiAgICB9IGVsc2UgaWYgKGl0ZXJhYmxlIGlzIExpc3Q8RT4pIHsKICAgICAgaXRlcmFibGVBc0xpc3QgPSBpdGVyYWJsZTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAodmFyIHZhbHVlIGluIGl0ZXJhYmxlKSB7CiAgICAgICAgdGhpc1tpbmRleCsrXSA9IHZhbHVlOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGludCBsZW5ndGggPSBpdGVyYWJsZUFzTGlzdC5sZW5ndGg7CiAgICBpZiAoaW5kZXggKyBsZW5ndGggPiB0aGlzLmxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShpbmRleCArIGxlbmd0aCwgMCwgdGhpcy5sZW5ndGgpOwogICAgfQogICAgTGlzdHMuY29weShpdGVyYWJsZUFzTGlzdCwgMCwgdGhpcywgaW5kZXgsIGxlbmd0aCk7CiAgfQoKICBMaXN0PEU+IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pIHsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIGlmIChsZW5ndGggPT0gMCkgcmV0dXJuIDxFPltdOwogICAgdmFyIHJlc3VsdCA9IG5ldyBfR3Jvd2FibGVMaXN0PEU+Ll93aXRoRGF0YShfc2xpY2Uoc3RhcnQsIGxlbmd0aCwgZmFsc2UpKTsKICAgIHJlc3VsdC5fc2V0TGVuZ3RoKGxlbmd0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gSXRlcmFibGUgaW50ZXJmYWNlLgoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIGZvckVhY2goZihFIGVsZW1lbnQpKSB7CiAgICBmaW5hbCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgZih0aGlzW2ldKTsKICAgIH0KICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciB7CiAgICByZXR1cm4gbmV3IF9GaXhlZFNpemVBcnJheUl0ZXJhdG9yPEU+KHRoaXMpOwogIH0KCiAgRSBnZXQgZmlyc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzWzBdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGdldCBsYXN0IHsKICAgIGlmIChsZW5ndGggPiAwKSByZXR1cm4gdGhpc1tsZW5ndGggLSAxXTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBnZXQgc2luZ2xlIHsKICAgIGlmIChsZW5ndGggPT0gMSkgcmV0dXJuIHRoaXNbMF07CiAgICBpZiAobGVuZ3RoID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vTWFueSgpOwogIH0KCiAgTGlzdDxFPiB0b0xpc3Qoe2Jvb2wgZ3Jvd2FibGU6IHRydWV9KSB7CiAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBpZiAobGVuZ3RoID4gMCkgewogICAgICB2YXIgcmVzdWx0ID0gX3NsaWNlKDAsIGxlbmd0aCwgIWdyb3dhYmxlKTsKICAgICAgaWYgKGdyb3dhYmxlKSB7CiAgICAgICAgcmVzdWx0ID0gbmV3IF9Hcm93YWJsZUxpc3Q8RT4uX3dpdGhEYXRhKHJlc3VsdCkuLl9zZXRMZW5ndGgobGVuZ3RoKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgLy8gX0dyb3dhYmxlTGlzdC5fd2l0aERhdGEgbXVzdCBub3QgYmUgY2FsbGVkIHdpdGggZW1wdHkgbGlzdC4KICAgIHJldHVybiBncm93YWJsZSA/IDxFPltdIDogbmV3IF9MaXN0PEU+KDApOwogIH0KfQoKLy8gVGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBjbGFzcyBhcyBfTGlzdCwgYnV0IGl0IGRvZXMgbm90Ci8vIHBlcm1pdCBhbnkgbW9kaWZpY2F0aW9uIG9mIGFycmF5IGVsZW1lbnRzIGZyb20gRGFydCBjb2RlLiBXZSB1c2UKLy8gdGhpcyBjbGFzcyBmb3IgYXJyYXlzIGNvbnN0cnVjdGVkIGZyb20gRGFydCBhcnJheSBsaXRlcmFscy4KLy8gVE9ETyhoYXVzbmVyKTogV2Ugc2hvdWxkIGNvbnNpZGVyIHRoZSB0cmFkZS1vZmZzIGJldHdlZW4gdHdvCi8vIGNsYXNzZXMgKGFuZCBpbmxpbmUgY2FjaGUgbWlzc2VzKSB2ZXJzdXMgYSBmaWVsZCBpbiB0aGUgbmF0aXZlCi8vIGltcGxlbWVudGF0aW9uIChjaGVja3Mgd2hlbiBtb2RpZnlpbmcpLiBXZSBzaG91bGQga2VlcCB3YXRjaGluZwovLyB0aGUgaW5saW5lIGNhY2hlIG1pc3Nlcy4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfSW1tdXRhYmxlTGlzdDxFPiBleHRlbmRzIFVubW9kaWZpYWJsZUxpc3RCYXNlPEU+IHsKICBmYWN0b3J5IF9JbW11dGFibGVMaXN0Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJJbW11dGFibGVBcnJheSBjYW4gb25seSBiZSBhbGxvY2F0ZWQgYnkgdGhlIFZNIik7CiAgfQoKICBmYWN0b3J5IF9JbW11dGFibGVMaXN0Ll9mcm9tKExpc3QgZnJvbSwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkKICAgICAgbmF0aXZlICJJbW11dGFibGVMaXN0X2Zyb20iOwoKICBFIG9wZXJhdG9yIFtdKGludCBpbmRleCkgbmF0aXZlICJMaXN0X2dldEluZGV4ZWQiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IGdldCBsZW5ndGggbmF0aXZlICJMaXN0X2dldExlbmd0aCI7CgogIExpc3Q8RT4gc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSkgewogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm4gPEU+W107CiAgICBMaXN0IGxpc3QgPSBuZXcgX0xpc3QobGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgbGlzdFtpXSA9IHRoaXNbc3RhcnQgKyBpXTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBuZXcgX0dyb3dhYmxlTGlzdDxFPi5fd2l0aERhdGEobGlzdCk7CiAgICByZXN1bHQuX3NldExlbmd0aChsZW5ndGgpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIENvbGxlY3Rpb24gaW50ZXJmYWNlLgoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIGZvckVhY2goZihFIGVsZW1lbnQpKSB7CiAgICBmaW5hbCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgZih0aGlzW2ldKTsKICAgIH0KICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciB7CiAgICByZXR1cm4gbmV3IF9GaXhlZFNpemVBcnJheUl0ZXJhdG9yPEU+KHRoaXMpOwogIH0KCiAgRSBnZXQgZmlyc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzWzBdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGdldCBsYXN0IHsKICAgIGlmIChsZW5ndGggPiAwKSByZXR1cm4gdGhpc1tsZW5ndGggLSAxXTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBnZXQgc2luZ2xlIHsKICAgIGlmIChsZW5ndGggPT0gMSkgcmV0dXJuIHRoaXNbMF07CiAgICBpZiAobGVuZ3RoID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vTWFueSgpOwogIH0KCiAgTGlzdDxFPiB0b0xpc3Qoe2Jvb2wgZ3Jvd2FibGU6IHRydWV9KSB7CiAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBpZiAobGVuZ3RoID4gMCkgewogICAgICBMaXN0IGxpc3QgPSBncm93YWJsZSA/IG5ldyBfTGlzdChsZW5ndGgpIDogbmV3IF9MaXN0PEU+KGxlbmd0aCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBsaXN0W2ldID0gdGhpc1tpXTsKICAgICAgfQogICAgICBpZiAoIWdyb3dhYmxlKSByZXR1cm4gbGlzdDsKICAgICAgdmFyIHJlc3VsdCA9IG5ldyBfR3Jvd2FibGVMaXN0PEU+Ll93aXRoRGF0YShsaXN0KTsKICAgICAgcmVzdWx0Ll9zZXRMZW5ndGgobGVuZ3RoKTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHJldHVybiBncm93YWJsZSA/IDxFPltdIDogbmV3IF9MaXN0PEU+KDApOwogIH0KfQoKLy8gSXRlcmF0b3IgZm9yIGFycmF5cyB3aXRoIGZpeGVkIHNpemUuCmNsYXNzIF9GaXhlZFNpemVBcnJheUl0ZXJhdG9yPEU+IGltcGxlbWVudHMgSXRlcmF0b3I8RT4gewogIGZpbmFsIExpc3Q8RT4gX2FycmF5OwogIGZpbmFsIGludCBfbGVuZ3RoOyAvLyBDYWNoZSBhcnJheSBsZW5ndGggZm9yIGZhc3RlciBhY2Nlc3MuCiAgaW50IF9pbmRleDsKICBFIF9jdXJyZW50OwoKICBfRml4ZWRTaXplQXJyYXlJdGVyYXRvcihMaXN0PEU+IGFycmF5KQogICAgICA6IF9hcnJheSA9IGFycmF5LAogICAgICAgIF9sZW5ndGggPSBhcnJheS5sZW5ndGgsCiAgICAgICAgX2luZGV4ID0gMCB7CiAgICBhc3NlcnQoYXJyYXkgaXMgX0xpc3Q8RT4gfHwgYXJyYXkgaXMgX0ltbXV0YWJsZUxpc3Q8RT4pOwogIH0KCiAgRSBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChfaW5kZXggPj0gX2xlbmd0aCkgewogICAgICBfY3VycmVudCA9IG51bGw7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIF9jdXJyZW50ID0gX2FycmF5W19pbmRleF07CiAgICBfaW5kZXgrKzsKICAgIHJldHVybiB0cnVlOwogIH0KfQqBBwBOTjwBDwEeARowC1EeMAE1ASofBAFBATQeKgEePhdRMCUIFQ0+BgQBRBsBFVEsOQYsOwYeHSU4PjBCJjwNJx4kFQgqJB4IBgQBMSxCBhwlHT4hJiENJB8IDgYoKEIGOAQBKj8eI08fEwQBGQEeHyAnEgYEAR4dMQQBECQsBAEPLSwEARElPSoEASoeFjEWTQgVBkMvBAIBQEQ/QEJDHBo6LSA7BAFCIwE1ATQeKgEqPx4jIychBjcfEwQBGwEeHyAnEgYEAR4dMQQBECQsBAEPLSwEARElPSoEASoeFkcpGwgiOSEVBi8EAgEoOhg+Dg4BKRggFT0EAR0BHhQdFxQGHw4RBAIBGmRhcnQ6Y29yZS1wYXRjaC9hcnJheS5kYXJ0T29yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL19pbnRlcm5hbC92bS9saWIvYmlnaW50X3BhdGNoLmRhcnTAAYALLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgovLyBwYXJ0IG9mIGRhcnQuY29yZTsKCi8vIENvcHlyaWdodCAyMDA5IFRoZSBHbyBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgovLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZQovLyBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovKgogKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNSAgVG9tIFd1CiAqIENvcHlyaWdodCAoYykgMjAxMiBBZGFtIFNpbmdlciAoYWRhbUBzb2x2ci5pbykKICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICoKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCiAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQogKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCiAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCiAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwogKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAqCiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCiAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgogKgogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTLUlTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKICogRVhQUkVTUywgSU1QTElFRCBPUiBPVEhFUldJU0UsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWQogKiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAqCiAqIElOIE5PIEVWRU5UIFNIQUxMIFRPTSBXVSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLAogKiBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIEtJTkQsIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKICogUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBPUiBOT1QgQURWSVNFRCBPRgogKiBUSEUgUE9TU0lCSUxJVFkgT0YgREFNQUdFLCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIEFSSVNJTkcgT1VUCiAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAqCiAqIEluIGFkZGl0aW9uLCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbiBhcHBsaWVzOgogKgogKiBBbGwgcmVkaXN0cmlidXRpb25zIG11c3QgcmV0YWluIGFuIGludGFjdCBjb3B5IG9mIHRoaXMgY29weXJpZ2h0IG5vdGljZQogKiBhbmQgZGlzY2xhaW1lci4KICovCgpAcGF0Y2gKY2xhc3MgQmlnSW50IGltcGxlbWVudHMgQ29tcGFyYWJsZTxCaWdJbnQ+IHsKICBAcGF0Y2gKICBzdGF0aWMgQmlnSW50IGdldCB6ZXJvID0+IF9CaWdJbnRJbXBsLnplcm87CiAgQHBhdGNoCiAgc3RhdGljIEJpZ0ludCBnZXQgb25lID0+IF9CaWdJbnRJbXBsLm9uZTsKICBAcGF0Y2gKICBzdGF0aWMgQmlnSW50IGdldCB0d28gPT4gX0JpZ0ludEltcGwudHdvOwoKICBAcGF0Y2gKICBzdGF0aWMgQmlnSW50IHBhcnNlKFN0cmluZyBzb3VyY2UsIHtpbnQgcmFkaXh9KSA9PgogICAgICBfQmlnSW50SW1wbC5wYXJzZShzb3VyY2UsIHJhZGl4OiByYWRpeCk7CgogIEBwYXRjaAogIHN0YXRpYyBCaWdJbnQgdHJ5UGFyc2UoU3RyaW5nIHNvdXJjZSwge2ludCByYWRpeH0pID0+CiAgICAgIF9CaWdJbnRJbXBsLl90cnlQYXJzZShzb3VyY2UsIHJhZGl4OiByYWRpeCk7CgogIEBwYXRjaAogIGZhY3RvcnkgQmlnSW50LmZyb20obnVtIHZhbHVlKSA9PiBuZXcgX0JpZ0ludEltcGwuZnJvbSh2YWx1ZSk7Cn0KCmludCBfbWF4KGludCBhLCBpbnQgYikgPT4gYSA+IGIgPyBhIDogYjsKaW50IF9taW4oaW50IGEsIGludCBiKSA9PiBhIDwgYiA/IGEgOiBiOwoKLy8vIEFsbG9jYXRlIGEgbmV3IGRpZ2l0cyBsaXN0IG9mIGV2ZW4gbGVuZ3RoLgpVaW50MzJMaXN0IF9uZXdEaWdpdHMoaW50IGxlbmd0aCkgPT4gbmV3IFVpbnQzMkxpc3QobGVuZ3RoICsgKGxlbmd0aCAmIDEpKTsKCi8qKgogKiBBbiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGFyYml0cmFyaWx5IGxhcmdlIGludGVnZXIuCiAqCiAqIFRoZSBpbnRlZ2VyIG51bWJlciBpcyByZXByZXNlbnRlZCBieSBhIHNpZ24sIGFuIGFycmF5IG9mIDMyLWJpdCB1bnNpZ25lZAogKiBpbnRlZ2VycyBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCwgYW5kIGEgbnVtYmVyIG9mIHVzZWQgZGlnaXRzIGluIHRoYXQgYXJyYXkuCiAqLwpjbGFzcyBfQmlnSW50SW1wbCBpbXBsZW1lbnRzIEJpZ0ludCB7CiAgLy8gQml0cyBwZXIgZGlnaXQuCiAgc3RhdGljIGNvbnN0IGludCBfZGlnaXRCaXRzID0gMzI7CiAgc3RhdGljIGNvbnN0IGludCBfZGlnaXRCYXNlID0gMSA8PCBfZGlnaXRCaXRzOwogIHN0YXRpYyBjb25zdCBpbnQgX2RpZ2l0TWFzayA9ICgxIDw8IF9kaWdpdEJpdHMpIC0gMTsKCiAgLy8gQml0cyBwZXIgaGFsZiBkaWdpdC4KICBzdGF0aWMgY29uc3QgaW50IF9oYWxmRGlnaXRCaXRzID0gX2RpZ2l0Qml0cyA+PiAxOwogIHN0YXRpYyBjb25zdCBpbnQgX2hhbGZEaWdpdE1hc2sgPSAoMSA8PCBfaGFsZkRpZ2l0Qml0cykgLSAxOwoKICBzdGF0aWMgZmluYWwgX0JpZ0ludEltcGwgemVybyA9IG5ldyBfQmlnSW50SW1wbC5fZnJvbUludCgwKTsKICBzdGF0aWMgZmluYWwgX0JpZ0ludEltcGwgb25lID0gbmV3IF9CaWdJbnRJbXBsLl9mcm9tSW50KDEpOwogIHN0YXRpYyBmaW5hbCBfQmlnSW50SW1wbCB0d28gPSBuZXcgX0JpZ0ludEltcGwuX2Zyb21JbnQoMik7CgogIHN0YXRpYyBmaW5hbCBfQmlnSW50SW1wbCBfbWludXNPbmUgPSAtb25lOwogIHN0YXRpYyBmaW5hbCBfQmlnSW50SW1wbCBfb25lRGlnaXRNYXNrID0gbmV3IF9CaWdJbnRJbXBsLl9mcm9tSW50KF9kaWdpdE1hc2spOwogIHN0YXRpYyBmaW5hbCBfQmlnSW50SW1wbCBfdHdvRGlnaXRNYXNrID0gKG9uZSA8PCAoMiAqIF9kaWdpdEJpdHMpKSAtIG9uZTsKICBzdGF0aWMgZmluYWwgX0JpZ0ludEltcGwgX29uZUJpbGxpb24gPSBuZXcgX0JpZ0ludEltcGwuX2Zyb21JbnQoMTAwMDAwMDAwMCk7CiAgc3RhdGljIGNvbnN0IGludCBfbWluSW50ID0gLTB4ODAwMDAwMDAwMDAwMDAwMDsKICBzdGF0aWMgY29uc3QgaW50IF9tYXhJbnQgPSAweDdmZmZmZmZmZmZmZmZmZmY7CgogIC8vLyBDZXJ0YWluIG1ldGhvZHMgb2YgX0JpZ0ludEltcGwgY2xhc3MgYXJlIGludHJpbnNpZmllZCBieSB0aGUgVk0KICAvLy8gZGVwZW5kaW5nIG9uIHRoZSBydW50aW1lIGZsYWdzLiBUaGV5IHJldHVybiBudW1iZXIgb2YgcHJvY2Vzc2VkCiAgLy8vIGRpZ2l0cyAoMikgd2hpY2ggaXMgZGlmZmVyZW50IGZyb20gbm9uLWludHJpbnNpYyBpbXBsZW1lbnRhdGlvbiAoMSkuCiAgLy8vIFRoaXMgZmxhZyBpcyB1c2VkIHRvIGNvbmZ1c2UgY29uc3RhbnQgcHJvcGFnYXRpb24gYXQgY29tcGlsZSB0aW1lIGFuZAogIC8vLyBhdm9pZCBwcm9wYWdhdGluZyByZXR1cm4gdmFsdWUgdG8gdGhlIGNhbGxlcnMuIEl0IHNob3VsZCBub3QgYmUKICAvLy8gZXZhbHVhdGVkIHRvIGEgY29uc3RhbnQuCiAgLy8vIE5vdGUgdGhhdCBbX2lzSW50cmluc2lmaWVkXSBpcyBzdGlsbCBmYWxzZSBpZiBpbnRyaW5zaWZpY2F0aW9uIG9jY3VycywKICAvLy8gc28gaXQgc2hvdWxkIGJlIHVzZWQgb25seSBpbnNpZGUgbWV0aG9kcyB3aGljaCBhcmUgcmVwbGFjZWQgYnkKICAvLy8gaW50cmluc2lmaWNhdGlvbi4KICBzdGF0aWMgZmluYWwgYm9vbCBfaXNJbnRyaW5zaWZpZWQgPQogICAgICBuZXcgYm9vbC5mcm9tRW52aXJvbm1lbnQoJ2RhcnQudm0ubm90LmEuY29tcGlsZS50aW1lLmNvbnN0YW50Jyk7CgogIC8vIFJlc3VsdCBjYWNoZSBmb3IgbGFzdCBfZGl2UmVtIGNhbGwuCiAgLy8gUmVzdWx0IGNhY2hlIGZvciBsYXN0IF9kaXZSZW0gY2FsbC4KICBzdGF0aWMgVWludDMyTGlzdCBfbGFzdERpdmlkZW5kRGlnaXRzOwogIHN0YXRpYyBpbnQgX2xhc3REaXZpZGVuZFVzZWQ7CiAgc3RhdGljIFVpbnQzMkxpc3QgX2xhc3REaXZpc29yRGlnaXRzOwogIHN0YXRpYyBpbnQgX2xhc3REaXZpc29yVXNlZDsKICBzdGF0aWMgVWludDMyTGlzdCBfbGFzdFF1b1JlbURpZ2l0czsKICBzdGF0aWMgaW50IF9sYXN0UXVvUmVtVXNlZDsKICBzdGF0aWMgaW50IF9sYXN0UmVtVXNlZDsKICBzdGF0aWMgaW50IF9sYXN0UmVtX25zaDsKCiAgLy8vIFdoZXRoZXIgdGhpcyBiaWdpbnQgaXMgbmVnYXRpdmUuCiAgZmluYWwgYm9vbCBfaXNOZWdhdGl2ZTsKCiAgLy8vIFRoZSB1bnNpZ25lZCBkaWdpdHMgb2YgdGhpcyBiaWdpbnQuCiAgLy8vCiAgLy8vIFRoZSBsZWFzdCBzaWduaWZpY2FudCBkaWdpdCBpcyBpbiBzbG90IDAuCiAgLy8vIFRoZSBsaXN0IG1heSBoYXZlIG1vcmUgZGlnaXRzIHRoYW4gbmVlZGVkLiBUaGF0IGlzLCBgX2RpZ2l0cy5sZW5ndGhgIG1heQogIC8vLyBiZSBzdHJpY3RseSBncmVhdGVyIHRoYW4gYF91c2VkYC4KICAvLy8gQWxzbywgYF9kaWdpdHMubGVuZ3RoYCBtdXN0IGFsd2F5cyBiZSBldmVuLCBiZWNhdXNlIGludHJpbnNpY3Mgb24gNjQtYml0CiAgLy8vIHBsYXRmb3JtcyBtYXkgcHJvY2VzcyBhIGRpZ2l0IHBhaXIgYXMgYSA2NC1iaXQgdmFsdWUuCiAgZmluYWwgVWludDMyTGlzdCBfZGlnaXRzOwoKICAvLy8gVGhlIG51bWJlciBvZiB1c2VkIGVudHJpZXMgaW4gW19kaWdpdHNdLgogIC8vLwogIC8vLyBUbyBhdm9pZCByZWFsbG9jYXRpbmcgW1VpbnQzMkxpc3RdcywgbGlzdHMgdGhhdCBhcmUgdG9vIGJpZyBhcmUgbm90CiAgLy8vIHJlcGxhY2VkLCBidXQgYF91c2VkYCByZWZsZWN0cyB0aGUgc21hbGxlciBudW1iZXIgb2YgZGlnaXRzIGFjdHVhbGx5IHVzZWQuCiAgLy8vCiAgLy8vIE5vdGUgdGhhdCBmdW5jdGlvbnMgc2hvcnRlbmluZyBhbiBleGlzdGluZyBsaXN0IG9mIGRpZ2l0cyB0byBhIHNtYWxsZXIKICAvLy8gYF91c2VkYCBudW1iZXIgb2YgZGlnaXRzIG11c3QgZW5zdXJlIHRoYXQgdGhlIGhpZ2hlcm1vc3QgcGFpciBvZiBkaWdpdHMKICAvLy8gaXMgY29ycmVjdCB3aGVuIHJlYWQgYXMgYSA2NC1iaXQgdmFsdWUgYnkgaW50cmluc2ljcy4gVGhlcmVmb3JlLCBpZiB0aGUKICAvLy8gc21hbGxlciAnX3VzZWQnIG51bWJlciBpcyBvZGQsIHRoZSBoaWdoIGRpZ2l0IG9mIHRoYXQgcGFpciBtdXN0IGJlCiAgLy8vIGV4cGxpY2l0bHkgY2xlYXJlZCwgaS5lLiBfZGlnaXRzW191c2VkXSA9IDAsIHdoaWNoIGNhbm5vdCByZXN1bHQgaW4gYW4KICAvLy8gb3V0IG9mIGJvdW5kcyBhY2Nlc3MsIHNpbmNlIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgaXMgZ3VhcmFudGVlZCB0byBiZQogIC8vLyBldmVuLgogIGZpbmFsIGludCBfdXNlZDsKCiAgLyoqCiAgICogUGFyc2VzIFtzb3VyY2VdIGFzIGEsIHBvc3NpYmx5IHNpZ25lZCwgaW50ZWdlciBsaXRlcmFsIGFuZCByZXR1cm5zIGl0cwogICAqIHZhbHVlLgogICAqCiAgICogVGhlIFtzb3VyY2VdIG11c3QgYmUgYSBub24tZW1wdHkgc2VxdWVuY2Ugb2YgYmFzZS1bcmFkaXhdIGRpZ2l0cywKICAgKiBvcHRpb25hbGx5IHByZWZpeGVkIHdpdGggYSBtaW51cyBvciBwbHVzIHNpZ24gKCctJyBvciAnKycpLgogICAqCiAgICogVGhlIFtyYWRpeF0gbXVzdCBiZSBpbiB0aGUgcmFuZ2UgMi4uMzYuIFRoZSBkaWdpdHMgdXNlZCBhcmUKICAgKiBmaXJzdCB0aGUgZGVjaW1hbCBkaWdpdHMgMC4uOSwgYW5kIHRoZW4gdGhlIGxldHRlcnMgJ2EnLi4neicgd2l0aAogICAqIHZhbHVlcyAxMCB0aHJvdWdoIDM1LiBBbHNvIGFjY2VwdHMgdXBwZXItY2FzZSBsZXR0ZXJzIHdpdGggdGhlIHNhbWUKICAgKiB2YWx1ZXMgYXMgdGhlIGxvd2VyLWNhc2Ugb25lcy4KICAgKgogICAqIElmIG5vIFtyYWRpeF0gaXMgZ2l2ZW4gdGhlbiBpdCBkZWZhdWx0cyB0byAxMC4gSW4gdGhpcyBjYXNlLCB0aGUgW3NvdXJjZV0KICAgKiBkaWdpdHMgbWF5IGFsc28gc3RhcnQgd2l0aCBgMHhgLCBpbiB3aGljaCBjYXNlIHRoZSBudW1iZXIgaXMgaW50ZXJwcmV0ZWQKICAgKiBhcyBhIGhleGFkZWNpbWFsIGxpdGVyYWwsIHdoaWNoIGVmZmVjdGl2ZWx5IG1lYW5zIHRoYXQgdGhlIGAweGAgaXMgaWdub3JlZAogICAqIGFuZCB0aGUgcmFkaXggaXMgaW5zdGVhZCBzZXQgdG8gMTYuCiAgICoKICAgKiBGb3IgYW55IGludCBgbmAgYW5kIHJhZGl4IGByYCwgaXQgaXMgZ3VhcmFudGVlZCB0aGF0CiAgICogYG4gPT0gaW50LnBhcnNlKG4udG9SYWRpeFN0cmluZyhyKSwgcmFkaXg6IHIpYC4KICAgKgogICAqIFRocm93cyBhIFtGb3JtYXRFeGNlcHRpb25dIGlmIHRoZSBbc291cmNlXSBpcyBub3QgYSB2YWxpZCBpbnRlZ2VyIGxpdGVyYWwsCiAgICogb3B0aW9uYWxseSBwcmVmaXhlZCBieSBhIHNpZ24uCiAgICovCiAgc3RhdGljIF9CaWdJbnRJbXBsIHBhcnNlKFN0cmluZyBzb3VyY2UsIHtpbnQgcmFkaXh9KSB7CiAgICB2YXIgcmVzdWx0ID0gX3RyeVBhcnNlKHNvdXJjZSwgcmFkaXg6IHJhZGl4KTsKICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKCJDb3VsZCBub3QgcGFyc2UgQmlnSW50Iiwgc291cmNlKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gUGFyc2VzIGEgZGVjaW1hbCBiaWdpbnQgbGl0ZXJhbC4KICAvLy8KICAvLy8gVGhlIFtzb3VyY2VdIG11c3Qgbm90IGNvbnRhaW4gbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlLgogIHN0YXRpYyBfQmlnSW50SW1wbCBfcGFyc2VEZWNpbWFsKFN0cmluZyBzb3VyY2UsIGJvb2wgaXNOZWdhdGl2ZSkgewogICAgY29uc3QgXzAgPSA0ODsKCiAgICBpbnQgcGFydCA9IDA7CiAgICBfQmlnSW50SW1wbCByZXN1bHQgPSB6ZXJvOwogICAgLy8gUmVhZCBpbiB0aGUgc291cmNlIDkgZGlnaXRzIGF0IGEgdGltZS4KICAgIC8vIFRoZSBmaXJzdCBwYXJ0IG1heSBoYXZlIGEgZmV3IGxlYWRpbmcgdmlydHVhbCAnMCdzIHRvIG1ha2UgdGhlIHJlbWFpbmluZwogICAgLy8gcGFydHMgYWxsIGhhdmUgZXhhY3RseSA5IGRpZ2l0cy4KICAgIGludCBkaWdpdEluUGFydENvdW50ID0gOSAtIHNvdXJjZS5sZW5ndGgucmVtYWluZGVyKDkpOwogICAgaWYgKGRpZ2l0SW5QYXJ0Q291bnQgPT0gOSkgZGlnaXRJblBhcnRDb3VudCA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykgewogICAgICBwYXJ0ID0gcGFydCAqIDEwICsgc291cmNlLmNvZGVVbml0QXQoaSkgLSBfMDsKICAgICAgaWYgKCsrZGlnaXRJblBhcnRDb3VudCA9PSA5KSB7CiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogX29uZUJpbGxpb24gKyBuZXcgX0JpZ0ludEltcGwuX2Zyb21JbnQocGFydCk7CiAgICAgICAgcGFydCA9IDA7CiAgICAgICAgZGlnaXRJblBhcnRDb3VudCA9IDA7CiAgICAgIH0KICAgIH0KICAgIGlmIChpc05lZ2F0aXZlKSByZXR1cm4gLXJlc3VsdDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBnaXZlbiBzb3VyY2UgZGlnaXQuCiAgLy8vCiAgLy8vIFNvdXJjZSBkaWdpdHMgYmV0d2VlbiAiMCIgYW5kICI5IiAoaW5jbHVzaXZlKSByZXR1cm4gdGhlaXIgZGVjaW1hbCB2YWx1ZS4KICAvLy8KICAvLy8gU291cmNlIGRpZ2l0cyBiZXR3ZWVuICJhIiBhbmQgInoiLCBvciAiQSIgYW5kICJaIiAoaW5jbHVzaXZlKSByZXR1cm4KICAvLy8gMTAgKyB0aGVpciBwb3NpdGlvbiBpbiB0aGUgQVNDSUkgYWxwaGFiZXQuCiAgLy8vCiAgLy8vIFRoZSBpbmNvbWluZyBbY29kZVVuaXRdIG11c3QgYmUgYW4gQVNDSUkgY29kZS11bml0LgogIHN0YXRpYyBpbnQgX2NvZGVVbml0VG9SYWRpeFZhbHVlKGludCBjb2RlVW5pdCkgewogICAgLy8gV2Uga25vdyB0aGF0IHRoZSBjaGFyYWN0ZXJzIG11c3QgYmUgQVNDSUkgYXMgb3RoZXJ3aXNlIHRoZQogICAgLy8gcmVnZXhwIHdvdWxkbid0IGhhdmUgbWF0Y2hlZC4gTG93ZXJjYXNpbmcgYnkgZG9pbmcgYHwgMHgyMGAgaXMgdGh1cwogICAgLy8gZ3VhcmFudGVlZCB0byBiZSBhIHNhZmUgb3BlcmF0aW9uLCBzaW5jZSBpdCBwcmVzZXJ2ZXMgZGlnaXRzCiAgICAvLyBhbmQgbG93ZXItY2FzZXMgQVNDSUkgbGV0dGVycy4KICAgIGNvbnN0IGludCBfMCA9IDQ4OwogICAgY29uc3QgaW50IF85ID0gNTc7CiAgICBjb25zdCBpbnQgX2EgPSA5NzsKICAgIGlmIChfMCA8PSBjb2RlVW5pdCAmJiBjb2RlVW5pdCA8PSBfOSkgcmV0dXJuIGNvZGVVbml0IC0gXzA7CiAgICBjb2RlVW5pdCB8PSAweDIwOwogICAgdmFyIHJlc3VsdCA9IGNvZGVVbml0IC0gX2EgKyAxMDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gUGFyc2VzIHRoZSBnaXZlbiBbc291cmNlXSBzdHJpbmcsIHN0YXJ0aW5nIGF0IFtzdGFydFBvc10sIGFzIGEgaGV4CiAgLy8vIGxpdGVyYWwuCiAgLy8vCiAgLy8vIElmIFtpc05lZ2F0aXZlXSBpcyB0cnVlLCBuZWdhdGVzIHRoZSByZXN1bHQgYmVmb3JlIHJldHVybmluZyBpdC4KICAvLy8KICAvLy8gVGhlIFtzb3VyY2VdIChzdWJzdHJpbmcpIG11c3QgYmUgYSB2YWxpZCBoZXggbGl0ZXJhbC4KICBzdGF0aWMgX0JpZ0ludEltcGwgX3BhcnNlSGV4KFN0cmluZyBzb3VyY2UsIGludCBzdGFydFBvcywgYm9vbCBpc05lZ2F0aXZlKSB7CiAgICBpbnQgaGV4Q2hhcnNQZXJEaWdpdCA9IF9kaWdpdEJpdHMgfi8gNDsKICAgIGludCBzb3VyY2VMZW5ndGggPSBzb3VyY2UubGVuZ3RoIC0gc3RhcnRQb3M7CiAgICBpbnQgdXNlZCA9IChzb3VyY2VMZW5ndGggKyBoZXhDaGFyc1BlckRpZ2l0IC0gMSkgfi8gaGV4Q2hhcnNQZXJEaWdpdDsKICAgIHZhciBkaWdpdHMgPSBfbmV3RGlnaXRzKHVzZWQpOwoKICAgIGludCBsYXN0RGlnaXRMZW5ndGggPSBzb3VyY2VMZW5ndGggLSAodXNlZCAtIDEpICogaGV4Q2hhcnNQZXJEaWdpdDsKICAgIGludCBkaWdpdEluZGV4ID0gdXNlZCAtIDE7CiAgICBpbnQgaSA9IHN0YXJ0UG9zOwogICAgaW50IGRpZ2l0ID0gMDsKICAgIGZvciAoaW50IGogPSAwOyBqIDwgbGFzdERpZ2l0TGVuZ3RoOyBqKyspIHsKICAgICAgdmFyIHZhbHVlID0gX2NvZGVVbml0VG9SYWRpeFZhbHVlKHNvdXJjZS5jb2RlVW5pdEF0KGkrKykpOwogICAgICBpZiAodmFsdWUgPj0gMTYpIHJldHVybiBudWxsOwogICAgICBkaWdpdCA9IGRpZ2l0ICogMTYgKyB2YWx1ZTsKICAgIH0KICAgIGRpZ2l0c1tkaWdpdEluZGV4LS1dID0gZGlnaXQ7CgogICAgd2hpbGUgKGkgPCBzb3VyY2UubGVuZ3RoKSB7CiAgICAgIGRpZ2l0ID0gMDsKICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBoZXhDaGFyc1BlckRpZ2l0OyBqKyspIHsKICAgICAgICB2YXIgdmFsdWUgPSBfY29kZVVuaXRUb1JhZGl4VmFsdWUoc291cmNlLmNvZGVVbml0QXQoaSsrKSk7CiAgICAgICAgaWYgKHZhbHVlID49IDE2KSByZXR1cm4gbnVsbDsKICAgICAgICBkaWdpdCA9IGRpZ2l0ICogMTYgKyB2YWx1ZTsKICAgICAgfQogICAgICBkaWdpdHNbZGlnaXRJbmRleC0tXSA9IGRpZ2l0OwogICAgfQogICAgaWYgKHVzZWQgPT0gMSAmJiBkaWdpdHNbMF0gPT0gMCkgcmV0dXJuIHplcm87CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oaXNOZWdhdGl2ZSwgdXNlZCwgZGlnaXRzKTsKICB9CgogIC8vLyBQYXJzZXMgdGhlIGdpdmVuIFtzb3VyY2VdIGFzIGEgW3JhZGl4XSBsaXRlcmFsLgogIC8vLwogIC8vLyBUaGUgW3NvdXJjZV0gd2lsbCBiZSBjaGVja2VkIGZvciBpbnZhbGlkIGNoYXJhY3RlcnMuIElmIGl0IGlzIGludmFsaWQsCiAgLy8vIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBgbnVsbGAuCiAgc3RhdGljIF9CaWdJbnRJbXBsIF9wYXJzZVJhZGl4KFN0cmluZyBzb3VyY2UsIGludCByYWRpeCwgYm9vbCBpc05lZ2F0aXZlKSB7CiAgICB2YXIgcmVzdWx0ID0gemVybzsKICAgIHZhciBiYXNlID0gbmV3IF9CaWdJbnRJbXBsLl9mcm9tSW50KHJhZGl4KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciB2YWx1ZSA9IF9jb2RlVW5pdFRvUmFkaXhWYWx1ZShzb3VyY2UuY29kZVVuaXRBdChpKSk7CiAgICAgIGlmICh2YWx1ZSA+PSByYWRpeCkgcmV0dXJuIG51bGw7CiAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIGJhc2UgKyBuZXcgX0JpZ0ludEltcGwuX2Zyb21JbnQodmFsdWUpOwogICAgfQogICAgaWYgKGlzTmVnYXRpdmUpIHJldHVybiAtcmVzdWx0OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBUcmllcyB0byBwYXJzZSB0aGUgZ2l2ZW4gW3NvdXJjZV0gYXMgYSBbcmFkaXhdIGxpdGVyYWwuCiAgLy8vCiAgLy8vIFJldHVybnMgdGhlIHBhcnNlZCBiaWcgaW50ZWdlciwgb3IgYG51bGxgIGlmIGl0IGZhaWxlZC4KICAvLy8KICAvLy8gSWYgdGhlIFtyYWRpeF0gaXMgYG51bGxgIGFjY2VwdHMgZGVjaW1hbCBsaXRlcmFscyBvciBgMHhgIGhleCBsaXRlcmFscy4KICBzdGF0aWMgX0JpZ0ludEltcGwgX3RyeVBhcnNlKFN0cmluZyBzb3VyY2UsIHtpbnQgcmFkaXh9KSB7CiAgICBpZiAoc291cmNlID09ICIiKSByZXR1cm4gbnVsbDsKCiAgICB2YXIgbWF0Y2ggPSBfcGFyc2VSRS5maXJzdE1hdGNoKHNvdXJjZSk7CiAgICBpbnQgc2lnbkluZGV4ID0gMTsKICAgIGludCBoZXhJbmRleCA9IDM7CiAgICBpbnQgZGVjaW1hbEluZGV4ID0gNDsKICAgIGludCBub25EZWNpbWFsSGV4SW5kZXggPSA1OwogICAgaWYgKG1hdGNoID09IG51bGwpIHJldHVybiBudWxsOwoKICAgIGJvb2wgaXNOZWdhdGl2ZSA9IG1hdGNoW3NpZ25JbmRleF0gPT0gIi0iOwoKICAgIFN0cmluZyBkZWNpbWFsTWF0Y2ggPSBtYXRjaFtkZWNpbWFsSW5kZXhdOwogICAgU3RyaW5nIGhleE1hdGNoID0gbWF0Y2hbaGV4SW5kZXhdOwogICAgU3RyaW5nIG5vbkRlY2ltYWxNYXRjaCA9IG1hdGNoW25vbkRlY2ltYWxIZXhJbmRleF07CgogICAgaWYgKHJhZGl4ID09IG51bGwpIHsKICAgICAgaWYgKGRlY2ltYWxNYXRjaCAhPSBudWxsKSB7CiAgICAgICAgLy8gQ2Fubm90IGZhaWwgYmVjYXVzZSB3ZSBrbm93IHRoYXQgdGhlIGRpZ2l0cyBhcmUgYWxsIGRlY2ltYWwuCiAgICAgICAgcmV0dXJuIF9wYXJzZURlY2ltYWwoZGVjaW1hbE1hdGNoLCBpc05lZ2F0aXZlKTsKICAgICAgfQogICAgICBpZiAoaGV4TWF0Y2ggIT0gbnVsbCkgewogICAgICAgIC8vIENhbm5vdCBmYWlsIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHRoZSBkaWdpdHMgYXJlIGFsbCBoZXguCiAgICAgICAgcmV0dXJuIF9wYXJzZUhleChoZXhNYXRjaCwgMiwgaXNOZWdhdGl2ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgaWYgKHJhZGl4IDwgMiB8fCByYWRpeCA+IDM2KSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKHJhZGl4LCAyLCAzNiwgJ3JhZGl4Jyk7CiAgICB9CiAgICBpZiAocmFkaXggPT0gMTAgJiYgZGVjaW1hbE1hdGNoICE9IG51bGwpIHsKICAgICAgcmV0dXJuIF9wYXJzZURlY2ltYWwoZGVjaW1hbE1hdGNoLCBpc05lZ2F0aXZlKTsKICAgIH0KICAgIGlmIChyYWRpeCA9PSAxNiAmJiAoZGVjaW1hbE1hdGNoICE9IG51bGwgfHwgbm9uRGVjaW1hbE1hdGNoICE9IG51bGwpKSB7CiAgICAgIHJldHVybiBfcGFyc2VIZXgoZGVjaW1hbE1hdGNoID8/IG5vbkRlY2ltYWxNYXRjaCwgMCwgaXNOZWdhdGl2ZSk7CiAgICB9CgogICAgcmV0dXJuIF9wYXJzZVJhZGl4KAogICAgICAgIGRlY2ltYWxNYXRjaCA/PyBub25EZWNpbWFsTWF0Y2ggPz8gaGV4TWF0Y2gsIHJhZGl4LCBpc05lZ2F0aXZlKTsKICB9CgogIHN0YXRpYyBSZWdFeHAgX3BhcnNlUkUgPSBSZWdFeHAoCiAgICAgIHInXlxzKihbKy1dPykoKDB4W2EtZjAtOV0rKXwoXGQrKXwoW2EtejAtOV0rKSlccyokJywKICAgICAgY2FzZVNlbnNpdGl2ZTogZmFsc2UpOwoKICAvLy8gRmluZHMgdGhlIGFtb3VudCBzaWduaWZpY2FudCBkaWdpdHMgaW4gdGhlIHByb3ZpZGVkIFtkaWdpdHNdIGFycmF5LgogIHN0YXRpYyBpbnQgX25vcm1hbGl6ZShpbnQgdXNlZCwgVWludDMyTGlzdCBkaWdpdHMpIHsKICAgIHdoaWxlICh1c2VkID4gMCAmJiBkaWdpdHNbdXNlZCAtIDFdID09IDApIHVzZWQtLTsKICAgIHJldHVybiB1c2VkOwogIH0KCiAgLy8vIEZhY3RvcnkgcmV0dXJuaW5nIGFuIGluc3RhbmNlIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIGZpZWxkIHZhbHVlcy4KICAvLy8gSWYgdGhlIFtkaWdpdHNdIGFycmF5IGNvbnRhaW5zIGxlYWRpbmcgMHMsIHRoZSBbdXNlZF0gdmFsdWUgaXMgYWRqdXN0ZWQKICAvLy8gYWNjb3JkaW5nbHkuIFRoZSBbZGlnaXRzXSBhcnJheSBpcyBub3QgbW9kaWZpZWQuCiAgX0JpZ0ludEltcGwuXyhib29sIGlzTmVnYXRpdmUsIGludCB1c2VkLCBVaW50MzJMaXN0IGRpZ2l0cykKICAgICAgOiB0aGlzLl9ub3JtYWxpemVkKGlzTmVnYXRpdmUsIF9ub3JtYWxpemUodXNlZCwgZGlnaXRzKSwgZGlnaXRzKTsKCiAgX0JpZ0ludEltcGwuX25vcm1hbGl6ZWQoYm9vbCBpc05lZ2F0aXZlLCB0aGlzLl91c2VkLCB0aGlzLl9kaWdpdHMpCiAgICAgIDogX2lzTmVnYXRpdmUgPSBfdXNlZCA9PSAwID8gZmFsc2UgOiBpc05lZ2F0aXZlIHsKICAgIGFzc2VydChfZGlnaXRzLmxlbmd0aC5pc0V2ZW4pOwogICAgYXNzZXJ0KF91c2VkLmlzRXZlbiB8fCBfZGlnaXRzW191c2VkXSA9PSAwKTsgLy8gTGVhZGluZyB6ZXJvIGZvciA2NC1iaXQuCiAgfQoKICAvLy8gV2hldGhlciB0aGlzIGJpZyBpbnRlZ2VyIGlzIHplcm8uCiAgYm9vbCBnZXQgX2lzWmVybyA9PiBfdXNlZCA9PSAwOwoKICAvLy8gQWxsb2NhdGVzIGFuIGFycmF5IG9mIHRoZSBnaXZlbiBbbGVuZ3RoXSBhbmQgY29waWVzIHRoZSBbZGlnaXRzXSBpbiB0aGUKICAvLy8gcmFuZ2UgW2Zyb21dIHRvIFt0by0xXSwgc3RhcnRpbmcgYXQgaW5kZXggMCwgZm9sbG93ZWQgYnkgbGVhZGluZyB6ZXJvCiAgLy8vIGRpZ2l0cy4KICBzdGF0aWMgVWludDMyTGlzdCBfY2xvbmVEaWdpdHMoCiAgICAgIFVpbnQzMkxpc3QgZGlnaXRzLCBpbnQgZnJvbSwgaW50IHRvLCBpbnQgbGVuZ3RoKSB7CiAgICB2YXIgcmVzdWx0RGlnaXRzID0gX25ld0RpZ2l0cyhsZW5ndGgpOwogICAgdmFyIG4gPSB0byAtIGZyb207CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgewogICAgICByZXN1bHREaWdpdHNbaV0gPSBkaWdpdHNbZnJvbSArIGldOwogICAgfQogICAgcmV0dXJuIHJlc3VsdERpZ2l0czsKICB9CgogIC8vLyBBbGxvY2F0ZXMgYSBiaWcgaW50ZWdlciBmcm9tIHRoZSBwcm92aWRlZCBbdmFsdWVdIG51bWJlci4KICBmYWN0b3J5IF9CaWdJbnRJbXBsLmZyb20obnVtIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT0gMCkgcmV0dXJuIHplcm87CiAgICBpZiAodmFsdWUgPT0gMSkgcmV0dXJuIG9uZTsKICAgIGlmICh2YWx1ZSA9PSAyKSByZXR1cm4gdHdvOwoKICAgIGlmICh2YWx1ZS5hYnMoKSA8IDB4MTAwMDAwMDAwKQogICAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl9mcm9tSW50KHZhbHVlLnRvSW50KCkpOwogICAgaWYgKHZhbHVlIGlzIGRvdWJsZSkgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fZnJvbURvdWJsZSh2YWx1ZSk7CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl9mcm9tSW50KHZhbHVlKTsKICB9CgogIGZhY3RvcnkgX0JpZ0ludEltcGwuX2Zyb21JbnQoaW50IHZhbHVlKSB7CiAgICBib29sIGlzTmVnYXRpdmUgPSB2YWx1ZSA8IDA7CiAgICBhc3NlcnQoX2RpZ2l0Qml0cyA9PSAzMik7CiAgICB2YXIgZGlnaXRzID0gX25ld0RpZ2l0cygyKTsKICAgIGlmIChpc05lZ2F0aXZlKSB7CiAgICAgIC8vIEhhbmRsZSB0aGUgbWluIDY0LWJpdCB2YWx1ZSBkaWZmZXJlbnRseSwgc2luY2UgaXRzIG5lZ2F0aW9uIGlzIG5vdAogICAgICAvLyBwb3NpdGl2ZS4KICAgICAgaWYgKHZhbHVlID09IF9taW5JbnQpIHsKICAgICAgICBkaWdpdHNbMV0gPSAweDgwMDAwMDAwOwogICAgICAgIHJldHVybiBuZXcgX0JpZ0ludEltcGwuXyh0cnVlLCAyLCBkaWdpdHMpOwogICAgICB9CiAgICAgIHZhbHVlID0gLXZhbHVlOwogICAgfQogICAgaWYgKHZhbHVlIDwgX2RpZ2l0QmFzZSkgewogICAgICBkaWdpdHNbMF0gPSB2YWx1ZTsKICAgICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGlzTmVnYXRpdmUsIDEsIGRpZ2l0cyk7CiAgICB9CiAgICBkaWdpdHNbMF0gPSB2YWx1ZSAmIF9kaWdpdE1hc2s7CiAgICBkaWdpdHNbMV0gPSB2YWx1ZSA+PiBfZGlnaXRCaXRzOwogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGlzTmVnYXRpdmUsIDIsIGRpZ2l0cyk7CiAgfQoKICAvLy8gQW4gOC1ieXRlIFVpbnQ4TGlzdCB3ZSBjYW4gcmV1c2UgZm9yIFtfZnJvbURvdWJsZV0gdG8gYXZvaWQgZ2VuZXJhdGluZwogIC8vLyBnYXJiYWdlLgogIHN0YXRpYyBmaW5hbCBVaW50OExpc3QgX2JpdHNGb3JGcm9tRG91YmxlID0gbmV3IFVpbnQ4TGlzdCg4KTsKCiAgZmFjdG9yeSBfQmlnSW50SW1wbC5fZnJvbURvdWJsZShkb3VibGUgdmFsdWUpIHsKICAgIGNvbnN0IGludCBleHBvbmVudEJpYXMgPSAxMDc1OwoKICAgIGlmICh2YWx1ZS5pc05hTiB8fCB2YWx1ZS5pc0luZmluaXRlKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJWYWx1ZSBtdXN0IGJlIGZpbml0ZTogJHZhbHVlIik7CiAgICB9CiAgICBib29sIGlzTmVnYXRpdmUgPSB2YWx1ZSA8IDA7CiAgICBpZiAoaXNOZWdhdGl2ZSkgdmFsdWUgPSAtdmFsdWU7CgogICAgdmFsdWUgPSB2YWx1ZS5mbG9vclRvRG91YmxlKCk7CiAgICBpZiAodmFsdWUgPT0gMCkgcmV0dXJuIHplcm87CgogICAgdmFyIGJpdHMgPSBfYml0c0ZvckZyb21Eb3VibGU7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewogICAgICBiaXRzW2ldID0gMDsKICAgIH0KICAgIGJpdHMuYnVmZmVyLmFzQnl0ZURhdGEoKS5zZXRGbG9hdDY0KDAsIHZhbHVlLCBFbmRpYW4ubGl0dGxlKTsKICAgIC8vIFRoZSBleHBvbmVudCBpcyBpbiBiaXRzIDUzLi42My4KICAgIHZhciBiaWFzZWRFeHBvbmVudCA9IChiaXRzWzddIDw8IDQpICsgKGJpdHNbNl0gPj4gNCk7CiAgICB2YXIgZXhwb25lbnQgPSBiaWFzZWRFeHBvbmVudCAtIGV4cG9uZW50QmlhczsKCiAgICBhc3NlcnQoX2RpZ2l0Qml0cyA9PSAzMik7CiAgICAvLyBUaGUgc2lnbmlmaWNhbnQgYml0cyBhcmUgaW4gMCAuLiA1Mi4KICAgIHZhciB1bnNoaWZ0ZWREaWdpdHMgPSBfbmV3RGlnaXRzKDIpOwogICAgdW5zaGlmdGVkRGlnaXRzWzBdID0KICAgICAgICAoYml0c1szXSA8PCAyNCkgKyAoYml0c1syXSA8PCAxNikgKyAoYml0c1sxXSA8PCA4KSArIGJpdHNbMF07CiAgICAvLyBEb24ndCBmb3JnZXQgdG8gYWRkIHRoZSBoaWRkZW4gYml0LgogICAgdW5zaGlmdGVkRGlnaXRzWzFdID0KICAgICAgICAoKDB4MTAgfCAoYml0c1s2XSAmIDB4RikpIDw8IDE2KSArIChiaXRzWzVdIDw8IDgpICsgYml0c1s0XTsKCiAgICB2YXIgdW5zaGlmdGVkQmlnID0gbmV3IF9CaWdJbnRJbXBsLl9ub3JtYWxpemVkKGZhbHNlLCAyLCB1bnNoaWZ0ZWREaWdpdHMpOwogICAgX0JpZ0ludEltcGwgYWJzUmVzdWx0ID0gdW5zaGlmdGVkQmlnOwogICAgaWYgKGV4cG9uZW50IDwgMCkgewogICAgICBhYnNSZXN1bHQgPSB1bnNoaWZ0ZWRCaWcgPj4gLWV4cG9uZW50OwogICAgfSBlbHNlIGlmIChleHBvbmVudCA+IDApIHsKICAgICAgYWJzUmVzdWx0ID0gdW5zaGlmdGVkQmlnIDw8IGV4cG9uZW50OwogICAgfQogICAgaWYgKGlzTmVnYXRpdmUpIHJldHVybiAtYWJzUmVzdWx0OwogICAgcmV0dXJuIGFic1Jlc3VsdDsKICB9CgogIC8qKgogICAqIFJldHVybiB0aGUgbmVnYXRpdmUgdmFsdWUgb2YgdGhpcyBpbnRlZ2VyLgogICAqCiAgICogVGhlIHJlc3VsdCBvZiBuZWdhdGluZyBhbiBpbnRlZ2VyIGFsd2F5cyBoYXMgdGhlIG9wcG9zaXRlIHNpZ24sIGV4Y2VwdAogICAqIGZvciB6ZXJvLCB3aGljaCBpcyBpdHMgb3duIG5lZ2F0aW9uLgogICAqLwogIF9CaWdJbnRJbXBsIG9wZXJhdG9yIC0oKSB7CiAgICBpZiAoX3VzZWQgPT0gMCkgcmV0dXJuIHRoaXM7CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oIV9pc05lZ2F0aXZlLCBfdXNlZCwgX2RpZ2l0cyk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzIGludGVnZXIuCiAgICoKICAgKiBGb3IgYW55IGludGVnZXIgYHhgLCB0aGUgcmVzdWx0IGlzIHRoZSBzYW1lIGFzIGB4IDwgMCA/IC14IDogeGAuCiAgICovCiAgX0JpZ0ludEltcGwgYWJzKCkgPT4gX2lzTmVnYXRpdmUgPyAtdGhpcyA6IHRoaXM7CgogIC8vLyBSZXR1cm5zIHRoaXMgPDwgbipfZGlnaXRCaXRzLgogIF9CaWdJbnRJbXBsIF9kbFNoaWZ0KGludCBuKSB7CiAgICBmaW5hbCB1c2VkID0gX3VzZWQ7CiAgICBpZiAodXNlZCA9PSAwKSB7CiAgICAgIHJldHVybiB6ZXJvOwogICAgfQogICAgZmluYWwgcmVzdWx0VXNlZCA9IHVzZWQgKyBuOwogICAgZmluYWwgZGlnaXRzID0gX2RpZ2l0czsKICAgIGZpbmFsIHJlc3VsdERpZ2l0cyA9IF9uZXdEaWdpdHMocmVzdWx0VXNlZCk7CiAgICBmb3IgKGludCBpID0gdXNlZCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpICsgbl0gPSBkaWdpdHNbaV07CiAgICB9CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oX2lzTmVnYXRpdmUsIHJlc3VsdFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgfQoKICAvLy8gU2FtZSBhcyBbX2RsU2hpZnRdIGJ1dCB3b3JrcyBvbiB0aGUgZGVjb21wb3NlZCBiaWcgaW50ZWdlcnMuCiAgLy8vCiAgLy8vIFJldHVybnMgYHJlc3VsdFVzZWRgLgogIC8vLwogIC8vLyBgcmVzdWx0RGlnaXRzWzAuLnJlc3VsdFVzZWQtMV0gPSB4RGlnaXRzWzAuLnhVc2VkLTFdIDw8IG4qX2RpZ2l0Qml0c2AuCiAgc3RhdGljIGludCBfZGxTaGlmdERpZ2l0cygKICAgICAgVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQsIGludCBuLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgaWYgKHhVc2VkID09IDApIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBpZiAobiA9PSAwICYmIGlkZW50aWNhbChyZXN1bHREaWdpdHMsIHhEaWdpdHMpKSB7CiAgICAgIHJldHVybiB4VXNlZDsKICAgIH0KICAgIGZpbmFsIHJlc3VsdFVzZWQgPSB4VXNlZCArIG47CiAgICBhc3NlcnQocmVzdWx0RGlnaXRzLmxlbmd0aCA+PSByZXN1bHRVc2VkICsgKHJlc3VsdFVzZWQgJiAxKSk7CiAgICBmb3IgKGludCBpID0geFVzZWQgLSAxOyBpID49IDA7IGktLSkgewogICAgICByZXN1bHREaWdpdHNbaSArIG5dID0geERpZ2l0c1tpXTsKICAgIH0KICAgIGZvciAoaW50IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gMDsKICAgIH0KICAgIGlmIChyZXN1bHRVc2VkLmlzT2RkKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tyZXN1bHRVc2VkXSA9IDA7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0VXNlZDsKICB9CgogIC8vLyBSZXR1cm5zIGB0aGlzID4+IG4qX2RpZ2l0Qml0c2AuCiAgX0JpZ0ludEltcGwgX2RyU2hpZnQoaW50IG4pIHsKICAgIGZpbmFsIHVzZWQgPSBfdXNlZDsKICAgIGlmICh1c2VkID09IDApIHsKICAgICAgcmV0dXJuIHplcm87CiAgICB9CiAgICBmaW5hbCByZXN1bHRVc2VkID0gdXNlZCAtIG47CiAgICBpZiAocmVzdWx0VXNlZCA8PSAwKSB7CiAgICAgIHJldHVybiBfaXNOZWdhdGl2ZSA/IF9taW51c09uZSA6IHplcm87CiAgICB9CiAgICBmaW5hbCBkaWdpdHMgPSBfZGlnaXRzOwogICAgZmluYWwgcmVzdWx0RGlnaXRzID0gX25ld0RpZ2l0cyhyZXN1bHRVc2VkKTsKICAgIGZvciAodmFyIGkgPSBuOyBpIDwgdXNlZDsgaSsrKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpIC0gbl0gPSBkaWdpdHNbaV07CiAgICB9CiAgICBmaW5hbCByZXN1bHQgPSBuZXcgX0JpZ0ludEltcGwuXyhfaXNOZWdhdGl2ZSwgcmVzdWx0VXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgIGlmIChfaXNOZWdhdGl2ZSkgewogICAgICAvLyBSb3VuZCBkb3duIGlmIGFueSBiaXQgd2FzIHNoaWZ0ZWQgb3V0LgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGlmIChkaWdpdHNbaV0gIT0gMCkgewogICAgICAgICAgcmV0dXJuIHJlc3VsdCAtIG9uZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gU2FtZSBhcyBbX2RyU2hpZnRdIGJ1dCB3b3JrcyBvbiB0aGUgZGVjb21wb3NlZCBiaWcgaW50ZWdlcnMuCiAgLy8vCiAgLy8vIFJldHVybnMgYHJlc3VsdFVzZWRgLgogIC8vLwogIC8vLyBgcmVzdWx0RGlnaXRzWzAuLnJlc3VsdFVzZWQtMV0gPSB4RGlnaXRzWzAuLnhVc2VkLTFdID4+IG4qX2RpZ2l0Qml0c2AuCiAgc3RhdGljIGludCBfZHJTaGlmdERpZ2l0cygKICAgICAgVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQsIGludCBuLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgZmluYWwgcmVzdWx0VXNlZCA9IHhVc2VkIC0gbjsKICAgIGlmIChyZXN1bHRVc2VkIDw9IDApIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBhc3NlcnQocmVzdWx0RGlnaXRzLmxlbmd0aCA+PSByZXN1bHRVc2VkICsgKHJlc3VsdFVzZWQgJiAxKSk7CiAgICBmb3IgKHZhciBpID0gbjsgaSA8IHhVc2VkOyBpKyspIHsKICAgICAgcmVzdWx0RGlnaXRzW2kgLSBuXSA9IHhEaWdpdHNbaV07CiAgICB9CiAgICBpZiAocmVzdWx0VXNlZC5pc09kZCkgewogICAgICByZXN1bHREaWdpdHNbcmVzdWx0VXNlZF0gPSAwOwogICAgfQogICAgcmV0dXJuIHJlc3VsdFVzZWQ7CiAgfQoKICAvLy8gU2hpZnRzIHRoZSBkaWdpdHMgb2YgW3hEaWdpdHNdIGludG8gdGhlIHJpZ2h0IHBsYWNlIGluIFtyZXN1bHREaWdpdHNdLgogIC8vLwogIC8vLyBgcmVzdWx0RGlnaXRzW2RzLi54VXNlZCtkc10gPSB4RGlnaXRzWzAuLnhVc2VkLTFdIDw8IChuICUgX2RpZ2l0Qml0cylgCiAgLy8vICAgd2hlcmUgYGRzID0gbiB+LyBfZGlnaXRCaXRzYAogIC8vLwogIC8vLyBEb2VzICpub3QqIGNsZWFyIGRpZ2l0cyBiZWxvdyBkcy4KICAvLy8KICAvLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW50cmluc2lmaWVkLgogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgc3RhdGljIHZvaWQgX2xzaCgKICAgICAgVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQsIGludCBuLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgYXNzZXJ0KHhVc2VkID4gMCk7CiAgICBmaW5hbCBkaWdpdFNoaWZ0ID0gbiB+LyBfZGlnaXRCaXRzOwogICAgZmluYWwgYml0U2hpZnQgPSBuICUgX2RpZ2l0Qml0czsKICAgIGZpbmFsIGNhcnJ5Qml0U2hpZnQgPSBfZGlnaXRCaXRzIC0gYml0U2hpZnQ7CiAgICBmaW5hbCBiaXRNYXNrID0gKDEgPDwgY2FycnlCaXRTaGlmdCkgLSAxOwogICAgdmFyIGNhcnJ5ID0gMDsKICAgIGZvciAoaW50IGkgPSB4VXNlZCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGZpbmFsIGRpZ2l0ID0geERpZ2l0c1tpXTsKICAgICAgcmVzdWx0RGlnaXRzW2kgKyBkaWdpdFNoaWZ0ICsgMV0gPSAoZGlnaXQgPj4gY2FycnlCaXRTaGlmdCkgfCBjYXJyeTsKICAgICAgY2FycnkgPSAoZGlnaXQgJiBiaXRNYXNrKSA8PCBiaXRTaGlmdDsKICAgIH0KICAgIHJlc3VsdERpZ2l0c1tkaWdpdFNoaWZ0XSA9IGNhcnJ5OwogIH0KCiAgLyoqCiAgICogU2hpZnQgdGhlIGJpdHMgb2YgdGhpcyBpbnRlZ2VyIHRvIHRoZSBsZWZ0IGJ5IFtzaGlmdEFtb3VudF0uCiAgICoKICAgKiBTaGlmdGluZyB0byB0aGUgbGVmdCBtYWtlcyB0aGUgbnVtYmVyIGxhcmdlciwgZWZmZWN0aXZlbHkgbXVsdGlwbHlpbmcKICAgKiB0aGUgbnVtYmVyIGJ5IGBwb3coMiwgc2hpZnRJbmRleClgLgogICAqCiAgICogVGhlcmUgaXMgbm8gbGltaXQgb24gdGhlIHNpemUgb2YgdGhlIHJlc3VsdC4gSXQgbWF5IGJlIHJlbGV2YW50IHRvCiAgICogbGltaXQgaW50ZXJtZWRpYXRlIHZhbHVlcyBieSB1c2luZyB0aGUgImFuZCIgb3BlcmF0b3Igd2l0aCBhIHN1aXRhYmxlCiAgICogbWFzay4KICAgKgogICAqIEl0IGlzIGFuIGVycm9yIGlmIFtzaGlmdEFtb3VudF0gaXMgbmVnYXRpdmUuCiAgICovCiAgX0JpZ0ludEltcGwgb3BlcmF0b3IgPDwoaW50IHNoaWZ0QW1vdW50KSB7CiAgICBpZiAoc2hpZnRBbW91bnQgPCAwKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJzaGlmdC1hbW91bnQgbXVzdCBiZSBwb3NpdGl2ZSAkc2hpZnRBbW91bnQiKTsKICAgIH0KICAgIGlmIChfaXNaZXJvKSByZXR1cm4gdGhpczsKICAgIGZpbmFsIGRpZ2l0U2hpZnQgPSBzaGlmdEFtb3VudCB+LyBfZGlnaXRCaXRzOwogICAgZmluYWwgYml0U2hpZnQgPSBzaGlmdEFtb3VudCAlIF9kaWdpdEJpdHM7CiAgICBpZiAoYml0U2hpZnQgPT0gMCkgewogICAgICByZXR1cm4gX2RsU2hpZnQoZGlnaXRTaGlmdCk7CiAgICB9CiAgICAvLyBOZWVkIG9uZSBleHRyYSBkaWdpdCB0byBob2xkIGJpdHMgc2hpZnRlZCBieSBiaXRTaGlmdC4KICAgIHZhciByZXN1bHRVc2VkID0gX3VzZWQgKyBkaWdpdFNoaWZ0ICsgMTsKICAgIC8vIFRoZSA2NC1iaXQgaW50cmluc2ljIHJlcXVpcmVzIG9uZSBleHRyYSBwYWlyIHRvIHdvcmsgd2l0aC4KICAgIHZhciByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKHJlc3VsdFVzZWQgKyAxKTsKICAgIF9sc2goX2RpZ2l0cywgX3VzZWQsIHNoaWZ0QW1vdW50LCByZXN1bHREaWdpdHMpOwogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKF9pc05lZ2F0aXZlLCByZXN1bHRVc2VkLCByZXN1bHREaWdpdHMpOwogIH0KCiAgLy8vIHJlc3VsdERpZ2l0c1swLi5yZXN1bHRVc2VkLTFdID0geERpZ2l0c1swLi54VXNlZC0xXSA8PCBuLgogIC8vLyBSZXR1cm5zIHJlc3VsdFVzZWQuCiAgc3RhdGljIGludCBfbFNoaWZ0RGlnaXRzKAogICAgICBVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCwgaW50IG4sIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKSB7CiAgICBmaW5hbCBkaWdpdHNTaGlmdCA9IG4gfi8gX2RpZ2l0Qml0czsKICAgIGZpbmFsIGJpdFNoaWZ0ID0gbiAlIF9kaWdpdEJpdHM7CiAgICBpZiAoYml0U2hpZnQgPT0gMCkgewogICAgICByZXR1cm4gX2RsU2hpZnREaWdpdHMoeERpZ2l0cywgeFVzZWQsIGRpZ2l0c1NoaWZ0LCByZXN1bHREaWdpdHMpOwogICAgfQogICAgLy8gTmVlZCBvbmUgZXh0cmEgZGlnaXQgdG8gaG9sZCBiaXRzIHNoaWZ0ZWQgYnkgYml0U2hpZnQuCiAgICB2YXIgcmVzdWx0VXNlZCA9IHhVc2VkICsgZGlnaXRzU2hpZnQgKyAxOwogICAgLy8gVGhlIDY0LWJpdCBpbnRyaW5zaWMgcmVxdWlyZXMgb25lIGV4dHJhIHBhaXIgdG8gd29yayB3aXRoLgogICAgYXNzZXJ0KHJlc3VsdERpZ2l0cy5sZW5ndGggPj0gcmVzdWx0VXNlZCArIDIgLSAocmVzdWx0VXNlZCAmIDEpKTsKICAgIF9sc2goeERpZ2l0cywgeFVzZWQsIG4sIHJlc3VsdERpZ2l0cyk7CiAgICB2YXIgaSA9IGRpZ2l0c1NoaWZ0OwogICAgd2hpbGUgKC0taSA+PSAwKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IDA7CiAgICB9CiAgICBpZiAocmVzdWx0RGlnaXRzW3Jlc3VsdFVzZWQgLSAxXSA9PSAwKSB7CiAgICAgIHJlc3VsdFVzZWQtLTsgLy8gQ2xhbXAgcmVzdWx0LgogICAgfSBlbHNlIGlmIChyZXN1bHRVc2VkLmlzT2RkKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tyZXN1bHRVc2VkXSA9IDA7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0VXNlZDsKICB9CgogIC8vLyByZXN1bHREaWdpdHNbMC4ucmVzdWx0VXNlZC0xXSA9IHhEaWdpdHNbMC4ueFVzZWQtMV0gPj4gbi4KICAvLy8KICAvLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW50cmluc2lmaWVkLgogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgc3RhdGljIHZvaWQgX3JzaCgKICAgICAgVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQsIGludCBuLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgYXNzZXJ0KHhVc2VkID4gMCk7CiAgICBmaW5hbCBkaWdpdHNTaGlmdCA9IG4gfi8gX2RpZ2l0Qml0czsKICAgIGZpbmFsIGJpdFNoaWZ0ID0gbiAlIF9kaWdpdEJpdHM7CiAgICBmaW5hbCBjYXJyeUJpdFNoaWZ0ID0gX2RpZ2l0Qml0cyAtIGJpdFNoaWZ0OwogICAgZmluYWwgYml0TWFzayA9ICgxIDw8IGJpdFNoaWZ0KSAtIDE7CiAgICB2YXIgY2FycnkgPSB4RGlnaXRzW2RpZ2l0c1NoaWZ0XSA+PiBiaXRTaGlmdDsKICAgIGZpbmFsIGxhc3QgPSB4VXNlZCAtIGRpZ2l0c1NoaWZ0IC0gMTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdDsgaSsrKSB7CiAgICAgIGZpbmFsIGRpZ2l0ID0geERpZ2l0c1tpICsgZGlnaXRzU2hpZnQgKyAxXTsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gKChkaWdpdCAmIGJpdE1hc2spIDw8IGNhcnJ5Qml0U2hpZnQpIHwgY2Fycnk7CiAgICAgIGNhcnJ5ID0gZGlnaXQgPj4gYml0U2hpZnQ7CiAgICB9CiAgICByZXN1bHREaWdpdHNbbGFzdF0gPSBjYXJyeTsKICB9CgogIC8qKgogICAqIFNoaWZ0IHRoZSBiaXRzIG9mIHRoaXMgaW50ZWdlciB0byB0aGUgcmlnaHQgYnkgW3NoaWZ0QW1vdW50XS4KICAgKgogICAqIFNoaWZ0aW5nIHRvIHRoZSByaWdodCBtYWtlcyB0aGUgbnVtYmVyIHNtYWxsZXIgYW5kIGRyb3BzIHRoZSBsZWFzdAogICAqIHNpZ25pZmljYW50IGJpdHMsIGVmZmVjdGl2ZWx5IGRvaW5nIGFuIGludGVnZXIgZGl2aXNpb24gYnkKICAgKmBwb3coMiwgc2hpZnRJbmRleClgLgogICAqCiAgICogSXQgaXMgYW4gZXJyb3IgaWYgW3NoaWZ0QW1vdW50XSBpcyBuZWdhdGl2ZS4KICAgKi8KICBfQmlnSW50SW1wbCBvcGVyYXRvciA+PihpbnQgc2hpZnRBbW91bnQpIHsKICAgIGlmIChzaGlmdEFtb3VudCA8IDApIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoInNoaWZ0LWFtb3VudCBtdXN0IGJlIHBvc2l0aXZlICRzaGlmdEFtb3VudCIpOwogICAgfQogICAgaWYgKF9pc1plcm8pIHJldHVybiB0aGlzOwogICAgZmluYWwgZGlnaXRTaGlmdCA9IHNoaWZ0QW1vdW50IH4vIF9kaWdpdEJpdHM7CiAgICBmaW5hbCBiaXRTaGlmdCA9IHNoaWZ0QW1vdW50ICUgX2RpZ2l0Qml0czsKICAgIGlmIChiaXRTaGlmdCA9PSAwKSB7CiAgICAgIHJldHVybiBfZHJTaGlmdChkaWdpdFNoaWZ0KTsKICAgIH0KICAgIGZpbmFsIHVzZWQgPSBfdXNlZDsKICAgIGZpbmFsIHJlc3VsdFVzZWQgPSB1c2VkIC0gZGlnaXRTaGlmdDsKICAgIGlmIChyZXN1bHRVc2VkIDw9IDApIHsKICAgICAgcmV0dXJuIF9pc05lZ2F0aXZlID8gX21pbnVzT25lIDogemVybzsKICAgIH0KICAgIGZpbmFsIGRpZ2l0cyA9IF9kaWdpdHM7CiAgICBmaW5hbCByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKHJlc3VsdFVzZWQpOwogICAgX3JzaChkaWdpdHMsIHVzZWQsIHNoaWZ0QW1vdW50LCByZXN1bHREaWdpdHMpOwogICAgZmluYWwgcmVzdWx0ID0gbmV3IF9CaWdJbnRJbXBsLl8oX2lzTmVnYXRpdmUsIHJlc3VsdFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICBpZiAoX2lzTmVnYXRpdmUpIHsKICAgICAgLy8gUm91bmQgZG93biBpZiBhbnkgYml0IHdhcyBzaGlmdGVkIG91dC4KICAgICAgaWYgKChkaWdpdHNbZGlnaXRTaGlmdF0gJiAoKDEgPDwgYml0U2hpZnQpIC0gMSkpICE9IDApIHsKICAgICAgICByZXR1cm4gcmVzdWx0IC0gb25lOwogICAgICB9CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlnaXRTaGlmdDsgaSsrKSB7CiAgICAgICAgaWYgKGRpZ2l0c1tpXSAhPSAwKSB7CiAgICAgICAgICByZXR1cm4gcmVzdWx0IC0gb25lOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyByZXN1bHREaWdpdHNbMC4ucmVzdWx0VXNlZC0xXSA9IHhEaWdpdHNbMC4ueFVzZWQtMV0gPj4gbi4KICAvLy8gUmV0dXJucyByZXN1bHRVc2VkLgogIHN0YXRpYyBpbnQgX3JTaGlmdERpZ2l0cygKICAgICAgVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQsIGludCBuLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgZmluYWwgZGlnaXRTaGlmdCA9IG4gfi8gX2RpZ2l0Qml0czsKICAgIGZpbmFsIGJpdFNoaWZ0ID0gbiAlIF9kaWdpdEJpdHM7CiAgICBpZiAoYml0U2hpZnQgPT0gMCkgewogICAgICByZXR1cm4gX2RyU2hpZnREaWdpdHMoeERpZ2l0cywgeFVzZWQsIGRpZ2l0U2hpZnQsIHJlc3VsdERpZ2l0cyk7CiAgICB9CiAgICB2YXIgcmVzdWx0VXNlZCA9IHhVc2VkIC0gZGlnaXRTaGlmdDsKICAgIGlmIChyZXN1bHRVc2VkIDw9IDApIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBhc3NlcnQocmVzdWx0RGlnaXRzLmxlbmd0aCA+PSByZXN1bHRVc2VkICsgKHJlc3VsdFVzZWQgJiAxKSk7CiAgICBfcnNoKHhEaWdpdHMsIHhVc2VkLCBuLCByZXN1bHREaWdpdHMpOwogICAgaWYgKHJlc3VsdERpZ2l0c1tyZXN1bHRVc2VkIC0gMV0gPT0gMCkgewogICAgICByZXN1bHRVc2VkLS07IC8vIENsYW1wIHJlc3VsdC4KICAgIH0gZWxzZSBpZiAocmVzdWx0VXNlZC5pc09kZCkgewogICAgICByZXN1bHREaWdpdHNbcmVzdWx0VXNlZF0gPSAwOwogICAgfQogICAgcmV0dXJuIHJlc3VsdFVzZWQ7CiAgfQoKICAvLy8gQ29tcGFyZXMgdGhpcyB0byBbb3RoZXJdIHRha2luZyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYm90aCBvcGVyYW5kcy4KICAvLy8KICAvLy8gUmV0dXJucyAwIGlmIGFicyh0aGlzKSA9PSBhYnMob3RoZXIpOyBhIHBvc2l0aXZlIG51bWJlciBpZgogIC8vLyBhYnModGhpcykgPiBhYnMob3RoZXIpOyBhbmQgYSBuZWdhdGl2ZSBudW1iZXIgaWYgYWJzKHRoaXMpIDwgYWJzKG90aGVyKS4KICBpbnQgX2Fic0NvbXBhcmUoQmlnSW50IGJpZ0ludCkgewogICAgX0JpZ0ludEltcGwgb3RoZXIgPSBiaWdJbnQ7CiAgICByZXR1cm4gX2NvbXBhcmVEaWdpdHMoX2RpZ2l0cywgX3VzZWQsIG90aGVyLl9kaWdpdHMsIG90aGVyLl91c2VkKTsKICB9CgogIC8qKgogICAqIENvbXBhcmVzIHRoaXMgdG8gYG90aGVyYC4KICAgKgogICAqIFJldHVybnMgYSBuZWdhdGl2ZSBudW1iZXIgaWYgYHRoaXNgIGlzIGxlc3MgdGhhbiBgb3RoZXJgLCB6ZXJvIGlmIHRoZXkgYXJlCiAgICogZXF1YWwsIGFuZCBhIHBvc2l0aXZlIG51bWJlciBpZiBgdGhpc2AgaXMgZ3JlYXRlciB0aGFuIGBvdGhlcmAuCiAgICovCiAgaW50IGNvbXBhcmVUbyhCaWdJbnQgYmlnSW50KSB7CiAgICBfQmlnSW50SW1wbCBvdGhlciA9IGJpZ0ludDsKICAgIGlmIChfaXNOZWdhdGl2ZSA9PSBvdGhlci5faXNOZWdhdGl2ZSkgewogICAgICB2YXIgcmVzdWx0ID0gX2Fic0NvbXBhcmUob3RoZXIpOwogICAgICAvLyBVc2UgMCAtIHJlc3VsdCB0byBhdm9pZCBuZWdhdGl2ZSB6ZXJvIGluIEphdmFTY3JpcHQuCiAgICAgIHJldHVybiBfaXNOZWdhdGl2ZSA/IDAgLSByZXN1bHQgOiByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gX2lzTmVnYXRpdmUgPyAtMSA6IDE7CiAgfQoKICAvLy8gQ29tcGFyZXMgYGRpZ2l0c1swLi51c2VkLTFdYCB3aXRoIGBvdGhlckRpZ2l0c1swLi5vdGhlclVzZWQtMV1gLgogIC8vLwogIC8vLyBSZXR1cm5zIDAgaWYgZXF1YWw7IGEgcG9zaXRpdmUgbnVtYmVyIGlmIGxhcmdlcjsKICAvLy8gYW5kIGEgbmVnYXRpdmUgbnVtYmVyIGlmIHNtYWxsZXIuCiAgc3RhdGljIGludCBfY29tcGFyZURpZ2l0cygKICAgICAgVWludDMyTGlzdCBkaWdpdHMsIGludCB1c2VkLCBVaW50MzJMaXN0IG90aGVyRGlnaXRzLCBpbnQgb3RoZXJVc2VkKSB7CiAgICB2YXIgcmVzdWx0ID0gdXNlZCAtIG90aGVyVXNlZDsKICAgIGlmIChyZXN1bHQgPT0gMCkgewogICAgICBmb3IgKGludCBpID0gdXNlZCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgcmVzdWx0ID0gZGlnaXRzW2ldIC0gb3RoZXJEaWdpdHNbaV07CiAgICAgICAgaWYgKHJlc3VsdCAhPSAwKSByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIHJlc3VsdERpZ2l0c1swLi51c2VkXSA9IGRpZ2l0c1swLi51c2VkLTFdICsgb3RoZXJEaWdpdHNbMC4ub3RoZXJVc2VkLTFdLgogIC8vLyB1c2VkID49IG90aGVyVXNlZCA+IDAuCiAgLy8vCiAgLy8vIE5vdGU6IFRoaXMgZnVuY3Rpb24gbWF5IGJlIGludHJpbnNpZmllZC4KICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIHN0YXRpYyB2b2lkIF9hYnNBZGQoVWludDMyTGlzdCBkaWdpdHMsIGludCB1c2VkLCBVaW50MzJMaXN0IG90aGVyRGlnaXRzLAogICAgICBpbnQgb3RoZXJVc2VkLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgYXNzZXJ0KHVzZWQgPj0gb3RoZXJVc2VkICYmIG90aGVyVXNlZCA+IDApOwogICAgdmFyIGNhcnJ5ID0gMDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3RoZXJVc2VkOyBpKyspIHsKICAgICAgY2FycnkgKz0gZGlnaXRzW2ldICsgb3RoZXJEaWdpdHNbaV07CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IGNhcnJ5ICYgX2RpZ2l0TWFzazsKICAgICAgY2FycnkgPj49IF9kaWdpdEJpdHM7CiAgICB9CiAgICBmb3IgKHZhciBpID0gb3RoZXJVc2VkOyBpIDwgdXNlZDsgaSsrKSB7CiAgICAgIGNhcnJ5ICs9IGRpZ2l0c1tpXTsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gY2FycnkgJiBfZGlnaXRNYXNrOwogICAgICBjYXJyeSA+Pj0gX2RpZ2l0Qml0czsKICAgIH0KICAgIHJlc3VsdERpZ2l0c1t1c2VkXSA9IGNhcnJ5OwogIH0KCiAgLy8vIHJlc3VsdERpZ2l0c1swLi51c2VkLTFdID0gZGlnaXRzWzAuLnVzZWQtMV0gLSBvdGhlckRpZ2l0c1swLi5vdGhlclVzZWQtMV0uCiAgLy8vIHVzZWQgPj0gb3RoZXJVc2VkID4gMC4KICAvLy8KICAvLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW50cmluc2lmaWVkLgogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgc3RhdGljIHZvaWQgX2Fic1N1YihVaW50MzJMaXN0IGRpZ2l0cywgaW50IHVzZWQsIFVpbnQzMkxpc3Qgb3RoZXJEaWdpdHMsCiAgICAgIGludCBvdGhlclVzZWQsIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKSB7CiAgICBhc3NlcnQodXNlZCA+PSBvdGhlclVzZWQgJiYgb3RoZXJVc2VkID4gMCk7CiAgICB2YXIgY2FycnkgPSAwOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvdGhlclVzZWQ7IGkrKykgewogICAgICBjYXJyeSArPSBkaWdpdHNbaV0gLSBvdGhlckRpZ2l0c1tpXTsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gY2FycnkgJiBfZGlnaXRNYXNrOwogICAgICBjYXJyeSA+Pj0gX2RpZ2l0Qml0czsKICAgIH0KICAgIGZvciAodmFyIGkgPSBvdGhlclVzZWQ7IGkgPCB1c2VkOyBpKyspIHsKICAgICAgY2FycnkgKz0gZGlnaXRzW2ldOwogICAgICByZXN1bHREaWdpdHNbaV0gPSBjYXJyeSAmIF9kaWdpdE1hc2s7CiAgICAgIGNhcnJ5ID4+PSBfZGlnaXRCaXRzOwogICAgfQogIH0KCiAgLy8vIFJldHVybnMgYGFicyh0aGlzKSArIGFicyhvdGhlcilgIHdpdGggc2lnbiBzZXQgYWNjb3JkaW5nIHRvIFtpc05lZ2F0aXZlXS4KICBfQmlnSW50SW1wbCBfYWJzQWRkU2V0U2lnbihfQmlnSW50SW1wbCBvdGhlciwgYm9vbCBpc05lZ2F0aXZlKSB7CiAgICB2YXIgdXNlZCA9IF91c2VkOwogICAgdmFyIG90aGVyVXNlZCA9IG90aGVyLl91c2VkOwogICAgaWYgKHVzZWQgPCBvdGhlclVzZWQpIHsKICAgICAgcmV0dXJuIG90aGVyLl9hYnNBZGRTZXRTaWduKHRoaXMsIGlzTmVnYXRpdmUpOwogICAgfQogICAgaWYgKHVzZWQgPT0gMCkgewogICAgICBhc3NlcnQoIWlzTmVnYXRpdmUpOwogICAgICByZXR1cm4gemVybzsKICAgIH0KICAgIGlmIChvdGhlclVzZWQgPT0gMCkgewogICAgICByZXR1cm4gX2lzTmVnYXRpdmUgPT0gaXNOZWdhdGl2ZSA/IHRoaXMgOiAtdGhpczsKICAgIH0KICAgIHZhciByZXN1bHRVc2VkID0gdXNlZCArIDE7CiAgICB2YXIgcmVzdWx0RGlnaXRzID0gX25ld0RpZ2l0cyhyZXN1bHRVc2VkKTsKICAgIF9hYnNBZGQoX2RpZ2l0cywgdXNlZCwgb3RoZXIuX2RpZ2l0cywgb3RoZXJVc2VkLCByZXN1bHREaWdpdHMpOwogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGlzTmVnYXRpdmUsIHJlc3VsdFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgfQoKICAvLy8gUmV0dXJucyBgYWJzKHRoaXMpIC0gYWJzKG90aGVyKWAgd2l0aCBzaWduIHNldCBhY2NvcmRpbmcgdG8gW2lzTmVnYXRpdmVdLgogIC8vLwogIC8vLyBSZXF1aXJlbWVudDogYGFicyh0aGlzKSA+PSBhYnMob3RoZXIpYC4KICBfQmlnSW50SW1wbCBfYWJzU3ViU2V0U2lnbihfQmlnSW50SW1wbCBvdGhlciwgYm9vbCBpc05lZ2F0aXZlKSB7CiAgICBhc3NlcnQoX2Fic0NvbXBhcmUob3RoZXIpID49IDApOwogICAgdmFyIHVzZWQgPSBfdXNlZDsKICAgIGlmICh1c2VkID09IDApIHsKICAgICAgYXNzZXJ0KCFpc05lZ2F0aXZlKTsKICAgICAgcmV0dXJuIHplcm87CiAgICB9CiAgICB2YXIgb3RoZXJVc2VkID0gb3RoZXIuX3VzZWQ7CiAgICBpZiAob3RoZXJVc2VkID09IDApIHsKICAgICAgcmV0dXJuIF9pc05lZ2F0aXZlID09IGlzTmVnYXRpdmUgPyB0aGlzIDogLXRoaXM7CiAgICB9CiAgICB2YXIgcmVzdWx0RGlnaXRzID0gX25ld0RpZ2l0cyh1c2VkKTsKICAgIF9hYnNTdWIoX2RpZ2l0cywgdXNlZCwgb3RoZXIuX2RpZ2l0cywgb3RoZXJVc2VkLCByZXN1bHREaWdpdHMpOwogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGlzTmVnYXRpdmUsIHVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgfQoKICAvLy8gUmV0dXJucyBgYWJzKHRoaXMpICYgYWJzKG90aGVyKWAgd2l0aCBzaWduIHNldCBhY2NvcmRpbmcgdG8gW2lzTmVnYXRpdmVdLgogIF9CaWdJbnRJbXBsIF9hYnNBbmRTZXRTaWduKF9CaWdJbnRJbXBsIG90aGVyLCBib29sIGlzTmVnYXRpdmUpIHsKICAgIHZhciByZXN1bHRVc2VkID0gX21pbihfdXNlZCwgb3RoZXIuX3VzZWQpOwogICAgdmFyIGRpZ2l0cyA9IF9kaWdpdHM7CiAgICB2YXIgb3RoZXJEaWdpdHMgPSBvdGhlci5fZGlnaXRzOwogICAgdmFyIHJlc3VsdERpZ2l0cyA9IF9uZXdEaWdpdHMocmVzdWx0VXNlZCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdFVzZWQ7IGkrKykgewogICAgICByZXN1bHREaWdpdHNbaV0gPSBkaWdpdHNbaV0gJiBvdGhlckRpZ2l0c1tpXTsKICAgIH0KICAgIHJldHVybiBuZXcgX0JpZ0ludEltcGwuXyhpc05lZ2F0aXZlLCByZXN1bHRVc2VkLCByZXN1bHREaWdpdHMpOwogIH0KCiAgLy8vIFJldHVybnMgYGFicyh0aGlzKSAmfiBhYnMob3RoZXIpYCB3aXRoIHNpZ24gc2V0IGFjY29yZGluZyB0byBbaXNOZWdhdGl2ZV0uCiAgX0JpZ0ludEltcGwgX2Fic0FuZE5vdFNldFNpZ24oX0JpZ0ludEltcGwgb3RoZXIsIGJvb2wgaXNOZWdhdGl2ZSkgewogICAgdmFyIHJlc3VsdFVzZWQgPSBfdXNlZDsKICAgIHZhciBkaWdpdHMgPSBfZGlnaXRzOwogICAgdmFyIG90aGVyRGlnaXRzID0gb3RoZXIuX2RpZ2l0czsKICAgIHZhciByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKHJlc3VsdFVzZWQpOwogICAgdmFyIG0gPSBfbWluKHJlc3VsdFVzZWQsIG90aGVyLl91c2VkKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbTsgaSsrKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IGRpZ2l0c1tpXSAmIH5vdGhlckRpZ2l0c1tpXTsKICAgIH0KICAgIGZvciAodmFyIGkgPSBtOyBpIDwgcmVzdWx0VXNlZDsgaSsrKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IGRpZ2l0c1tpXTsKICAgIH0KICAgIHJldHVybiBuZXcgX0JpZ0ludEltcGwuXyhpc05lZ2F0aXZlLCByZXN1bHRVc2VkLCByZXN1bHREaWdpdHMpOwogIH0KCiAgLy8vIFJldHVybnMgYGFicyh0aGlzKSB8IGFicyhvdGhlcilgIHdpdGggc2lnbiBzZXQgYWNjb3JkaW5nIHRvIFtpc05lZ2F0aXZlXS4KICBfQmlnSW50SW1wbCBfYWJzT3JTZXRTaWduKF9CaWdJbnRJbXBsIG90aGVyLCBib29sIGlzTmVnYXRpdmUpIHsKICAgIHZhciB1c2VkID0gX3VzZWQ7CiAgICB2YXIgb3RoZXJVc2VkID0gb3RoZXIuX3VzZWQ7CiAgICB2YXIgcmVzdWx0VXNlZCA9IF9tYXgodXNlZCwgb3RoZXJVc2VkKTsKICAgIHZhciBkaWdpdHMgPSBfZGlnaXRzOwogICAgdmFyIG90aGVyRGlnaXRzID0gb3RoZXIuX2RpZ2l0czsKICAgIHZhciByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKHJlc3VsdFVzZWQpOwogICAgdmFyIGwsIG07CiAgICBpZiAodXNlZCA8IG90aGVyVXNlZCkgewogICAgICBsID0gb3RoZXI7CiAgICAgIG0gPSB1c2VkOwogICAgfSBlbHNlIHsKICAgICAgbCA9IHRoaXM7CiAgICAgIG0gPSBvdGhlclVzZWQ7CiAgICB9CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG07IGkrKykgewogICAgICByZXN1bHREaWdpdHNbaV0gPSBkaWdpdHNbaV0gfCBvdGhlckRpZ2l0c1tpXTsKICAgIH0KICAgIHZhciBsRGlnaXRzID0gbC5fZGlnaXRzOwogICAgZm9yICh2YXIgaSA9IG07IGkgPCByZXN1bHRVc2VkOyBpKyspIHsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gbERpZ2l0c1tpXTsKICAgIH0KICAgIHJldHVybiBuZXcgX0JpZ0ludEltcGwuXyhpc05lZ2F0aXZlLCByZXN1bHRVc2VkLCByZXN1bHREaWdpdHMpOwogIH0KCiAgLy8vIFJldHVybnMgYGFicyh0aGlzKSBeIGFicyhvdGhlcilgIHdpdGggc2lnbiBzZXQgYWNjb3JkaW5nIHRvIFtpc05lZ2F0aXZlXS4KICBfQmlnSW50SW1wbCBfYWJzWG9yU2V0U2lnbihfQmlnSW50SW1wbCBvdGhlciwgYm9vbCBpc05lZ2F0aXZlKSB7CiAgICB2YXIgdXNlZCA9IF91c2VkOwogICAgdmFyIG90aGVyVXNlZCA9IG90aGVyLl91c2VkOwogICAgdmFyIHJlc3VsdFVzZWQgPSBfbWF4KHVzZWQsIG90aGVyVXNlZCk7CiAgICB2YXIgZGlnaXRzID0gX2RpZ2l0czsKICAgIHZhciBvdGhlckRpZ2l0cyA9IG90aGVyLl9kaWdpdHM7CiAgICB2YXIgcmVzdWx0RGlnaXRzID0gX25ld0RpZ2l0cyhyZXN1bHRVc2VkKTsKICAgIHZhciBsLCBtOwogICAgaWYgKHVzZWQgPCBvdGhlclVzZWQpIHsKICAgICAgbCA9IG90aGVyOwogICAgICBtID0gdXNlZDsKICAgIH0gZWxzZSB7CiAgICAgIGwgPSB0aGlzOwogICAgICBtID0gb3RoZXJVc2VkOwogICAgfQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtOyBpKyspIHsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gZGlnaXRzW2ldIF4gb3RoZXJEaWdpdHNbaV07CiAgICB9CiAgICB2YXIgbERpZ2l0cyA9IGwuX2RpZ2l0czsKICAgIGZvciAodmFyIGkgPSBtOyBpIDwgcmVzdWx0VXNlZDsgaSsrKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IGxEaWdpdHNbaV07CiAgICB9CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oaXNOZWdhdGl2ZSwgcmVzdWx0VXNlZCwgcmVzdWx0RGlnaXRzKTsKICB9CgogIC8qKgogICAqIEJpdC13aXNlIGFuZCBvcGVyYXRvci4KICAgKgogICAqIFRyZWF0aW5nIGJvdGggYHRoaXNgIGFuZCBbb3RoZXJdIGFzIHN1ZmZpY2llbnRseSBsYXJnZSB0d28ncyBjb21wb25lbnQKICAgKiBpbnRlZ2VycywgdGhlIHJlc3VsdCBpcyBhIG51bWJlciB3aXRoIG9ubHkgdGhlIGJpdHMgc2V0IHRoYXQgYXJlIHNldCBpbgogICAqIGJvdGggYHRoaXNgIGFuZCBbb3RoZXJdCiAgICoKICAgKiBPZiBib3RoIG9wZXJhbmRzIGFyZSBuZWdhdGl2ZSwgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3RoZXJ3aXNlCiAgICogdGhlIHJlc3VsdCBpcyBub24tbmVnYXRpdmUuCiAgICovCiAgX0JpZ0ludEltcGwgb3BlcmF0b3IgJihCaWdJbnQgYmlnSW50KSB7CiAgICBfQmlnSW50SW1wbCBvdGhlciA9IGJpZ0ludDsKICAgIGlmIChfaXNaZXJvIHx8IG90aGVyLl9pc1plcm8pIHJldHVybiB6ZXJvOwogICAgaWYgKF9pc05lZ2F0aXZlID09IG90aGVyLl9pc05lZ2F0aXZlKSB7CiAgICAgIGlmIChfaXNOZWdhdGl2ZSkgewogICAgICAgIC8vICgtdGhpcykgJiAoLW90aGVyKSA9PSB+KHRoaXMtMSkgJiB+KG90aGVyLTEpCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgID09IH4oKHRoaXMtMSkgfCAob3RoZXItMSkpCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgID09IC0oKCh0aGlzLTEpIHwgKG90aGVyLTEpKSArIDEpCiAgICAgICAgX0JpZ0ludEltcGwgdGhpczEgPSBfYWJzU3ViU2V0U2lnbihvbmUsIHRydWUpOwogICAgICAgIF9CaWdJbnRJbXBsIG90aGVyMSA9IG90aGVyLl9hYnNTdWJTZXRTaWduKG9uZSwgdHJ1ZSk7CiAgICAgICAgLy8gUmVzdWx0IGNhbm5vdCBiZSB6ZXJvIGlmIHRoaXMgYW5kIG90aGVyIGFyZSBuZWdhdGl2ZS4KICAgICAgICByZXR1cm4gdGhpczEuX2Fic09yU2V0U2lnbihvdGhlcjEsIHRydWUpLl9hYnNBZGRTZXRTaWduKG9uZSwgdHJ1ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIF9hYnNBbmRTZXRTaWduKG90aGVyLCBmYWxzZSk7CiAgICB9CiAgICAvLyBfaXNOZWdhdGl2ZSAhPSBvdGhlci5faXNOZWdhdGl2ZQogICAgdmFyIHAsIG47CiAgICBpZiAoX2lzTmVnYXRpdmUpIHsKICAgICAgcCA9IG90aGVyOwogICAgICBuID0gdGhpczsKICAgIH0gZWxzZSB7CiAgICAgIC8vICYgaXMgc3ltbWV0cmljLgogICAgICBwID0gdGhpczsKICAgICAgbiA9IG90aGVyOwogICAgfQogICAgLy8gcCAmICgtbikgPT0gcCAmIH4obi0xKSA9PSBwICZ+IChuLTEpCiAgICB2YXIgbjEgPSBuLl9hYnNTdWJTZXRTaWduKG9uZSwgZmFsc2UpOwogICAgcmV0dXJuIHAuX2Fic0FuZE5vdFNldFNpZ24objEsIGZhbHNlKTsKICB9CgogIC8qKgogICAqIEJpdC13aXNlIG9yIG9wZXJhdG9yLgogICAqCiAgICogVHJlYXRpbmcgYm90aCBgdGhpc2AgYW5kIFtvdGhlcl0gYXMgc3VmZmljaWVudGx5IGxhcmdlIHR3bydzIGNvbXBvbmVudAogICAqIGludGVnZXJzLCB0aGUgcmVzdWx0IGlzIGEgbnVtYmVyIHdpdGggdGhlIGJpdHMgc2V0IHRoYXQgYXJlIHNldCBpbiBlaXRoZXIKICAgKiBvZiBgdGhpc2AgYW5kIFtvdGhlcl0KICAgKgogICAqIElmIGJvdGggb3BlcmFuZHMgYXJlIG5vbi1uZWdhdGl2ZSwgdGhlIHJlc3VsdCBpcyBub24tbmVnYXRpdmUsCiAgICogb3RoZXJ3aXNlIHRoZSByZXN1bHQgdXMgbmVnYXRpdmUuCiAgICovCiAgX0JpZ0ludEltcGwgb3BlcmF0b3IgfChCaWdJbnQgYmlnSW50KSB7CiAgICBfQmlnSW50SW1wbCBvdGhlciA9IGJpZ0ludDsKICAgIGlmIChfaXNaZXJvKSByZXR1cm4gb3RoZXI7CiAgICBpZiAob3RoZXIuX2lzWmVybykgcmV0dXJuIHRoaXM7CiAgICBpZiAoX2lzTmVnYXRpdmUgPT0gb3RoZXIuX2lzTmVnYXRpdmUpIHsKICAgICAgaWYgKF9pc05lZ2F0aXZlKSB7CiAgICAgICAgLy8gKC10aGlzKSB8ICgtb3RoZXIpID09IH4odGhpcy0xKSB8IH4ob3RoZXItMSkKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgPT0gfigodGhpcy0xKSAmIChvdGhlci0xKSkKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgPT0gLSgoKHRoaXMtMSkgJiAob3RoZXItMSkpICsgMSkKICAgICAgICB2YXIgdGhpczEgPSBfYWJzU3ViU2V0U2lnbihvbmUsIHRydWUpOwogICAgICAgIHZhciBvdGhlcjEgPSBvdGhlci5fYWJzU3ViU2V0U2lnbihvbmUsIHRydWUpOwogICAgICAgIC8vIFJlc3VsdCBjYW5ub3QgYmUgemVybyBpZiB0aGlzIGFuZCBhIGFyZSBuZWdhdGl2ZS4KICAgICAgICByZXR1cm4gdGhpczEuX2Fic0FuZFNldFNpZ24ob3RoZXIxLCB0cnVlKS5fYWJzQWRkU2V0U2lnbihvbmUsIHRydWUpOwogICAgICB9CiAgICAgIHJldHVybiBfYWJzT3JTZXRTaWduKG90aGVyLCBmYWxzZSk7CiAgICB9CiAgICAvLyBfbmVnICE9IGEuX25lZwogICAgdmFyIHAsIG47CiAgICBpZiAoX2lzTmVnYXRpdmUpIHsKICAgICAgcCA9IG90aGVyOwogICAgICBuID0gdGhpczsKICAgIH0gZWxzZSB7CiAgICAgIC8vIHwgaXMgc3ltbWV0cmljLgogICAgICBwID0gdGhpczsKICAgICAgbiA9IG90aGVyOwogICAgfQogICAgLy8gcCB8ICgtbikgPT0gcCB8IH4obi0xKSA9PSB+KChuLTEpICZ+IHApID09IC0ofigobi0xKSAmfiBwKSArIDEpCiAgICB2YXIgbjEgPSBuLl9hYnNTdWJTZXRTaWduKG9uZSwgdHJ1ZSk7CiAgICAvLyBSZXN1bHQgY2Fubm90IGJlIHplcm8gaWYgb25seSBvbmUgb2YgdGhpcyBvciBhIGlzIG5lZ2F0aXZlLgogICAgcmV0dXJuIG4xLl9hYnNBbmROb3RTZXRTaWduKHAsIHRydWUpLl9hYnNBZGRTZXRTaWduKG9uZSwgdHJ1ZSk7CiAgfQoKICAvKioKICAgKiBCaXQtd2lzZSBleGNsdXNpdmUtb3Igb3BlcmF0b3IuCiAgICoKICAgKiBUcmVhdGluZyBib3RoIGB0aGlzYCBhbmQgW290aGVyXSBhcyBzdWZmaWNpZW50bHkgbGFyZ2UgdHdvJ3MgY29tcG9uZW50CiAgICogaW50ZWdlcnMsIHRoZSByZXN1bHQgaXMgYSBudW1iZXIgd2l0aCB0aGUgYml0cyBzZXQgdGhhdCBhcmUgc2V0IGluIG9uZSwKICAgKiBidXQgbm90IGJvdGgsIG9mIGB0aGlzYCBhbmQgW290aGVyXQogICAqCiAgICogSWYgdGhlIG9wZXJhbmRzIGhhdmUgdGhlIHNhbWUgc2lnbiwgdGhlIHJlc3VsdCBpcyBub24tbmVnYXRpdmUsCiAgICogb3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUuCiAgICovCiAgX0JpZ0ludEltcGwgb3BlcmF0b3IgXihCaWdJbnQgYmlnSW50KSB7CiAgICBfQmlnSW50SW1wbCBvdGhlciA9IGJpZ0ludDsKICAgIGlmIChfaXNaZXJvKSByZXR1cm4gb3RoZXI7CiAgICBpZiAob3RoZXIuX2lzWmVybykgcmV0dXJuIHRoaXM7CiAgICBpZiAoX2lzTmVnYXRpdmUgPT0gb3RoZXIuX2lzTmVnYXRpdmUpIHsKICAgICAgaWYgKF9pc05lZ2F0aXZlKSB7CiAgICAgICAgLy8gKC10aGlzKSBeICgtb3RoZXIpID09IH4odGhpcy0xKSBeIH4ob3RoZXItMSkgPT0gKHRoaXMtMSkgXiAob3RoZXItMSkKICAgICAgICB2YXIgdGhpczEgPSBfYWJzU3ViU2V0U2lnbihvbmUsIHRydWUpOwogICAgICAgIHZhciBvdGhlcjEgPSBvdGhlci5fYWJzU3ViU2V0U2lnbihvbmUsIHRydWUpOwogICAgICAgIHJldHVybiB0aGlzMS5fYWJzWG9yU2V0U2lnbihvdGhlcjEsIGZhbHNlKTsKICAgICAgfQogICAgICByZXR1cm4gX2Fic1hvclNldFNpZ24ob3RoZXIsIGZhbHNlKTsKICAgIH0KICAgIC8vIF9pc05lZ2F0aXZlICE9IGEuX2lzTmVnYXRpdmUKICAgIHZhciBwLCBuOwogICAgaWYgKF9pc05lZ2F0aXZlKSB7CiAgICAgIHAgPSBvdGhlcjsKICAgICAgbiA9IHRoaXM7CiAgICB9IGVsc2UgewogICAgICAvLyBeIGlzIHN5bW1ldHJpYy4KICAgICAgcCA9IHRoaXM7CiAgICAgIG4gPSBvdGhlcjsKICAgIH0KICAgIC8vIHAgXiAoLW4pID09IHAgXiB+KG4tMSkgPT0gfihwIF4gKG4tMSkpID09IC0oKHAgXiAobi0xKSkgKyAxKQogICAgdmFyIG4xID0gbi5fYWJzU3ViU2V0U2lnbihvbmUsIHRydWUpOwogICAgLy8gUmVzdWx0IGNhbm5vdCBiZSB6ZXJvIGlmIG9ubHkgb25lIG9mIHRoaXMgb3IgYSBpcyBuZWdhdGl2ZS4KICAgIHJldHVybiBwLl9hYnNYb3JTZXRTaWduKG4xLCB0cnVlKS5fYWJzQWRkU2V0U2lnbihvbmUsIHRydWUpOwogIH0KCiAgLyoqCiAgICogVGhlIGJpdC13aXNlIG5lZ2F0ZSBvcGVyYXRvci4KICAgKgogICAqIFRyZWF0aW5nIGB0aGlzYCBhcyBhIHN1ZmZpY2llbnRseSBsYXJnZSB0d28ncyBjb21wb25lbnQgaW50ZWdlciwKICAgKiB0aGUgcmVzdWx0IGlzIGEgbnVtYmVyIHdpdGggdGhlIG9wcG9zaXRlIGJpdHMgc2V0LgogICAqCiAgICogVGhpcyBtYXBzIGFueSBpbnRlZ2VyIGB4YCB0byBgLXggLSAxYC4KICAgKi8KICBfQmlnSW50SW1wbCBvcGVyYXRvciB+KCkgewogICAgaWYgKF9pc1plcm8pIHJldHVybiBfbWludXNPbmU7CiAgICBpZiAoX2lzTmVnYXRpdmUpIHsKICAgICAgLy8gfigtdGhpcykgPT0gfih+KHRoaXMtMSkpID09IHRoaXMtMQogICAgICByZXR1cm4gX2Fic1N1YlNldFNpZ24ob25lLCBmYWxzZSk7CiAgICB9CiAgICAvLyB+dGhpcyA9PSAtdGhpcy0xID09IC0odGhpcysxKQogICAgLy8gUmVzdWx0IGNhbm5vdCBiZSB6ZXJvIGlmIHRoaXMgaXMgcG9zaXRpdmUuCiAgICByZXR1cm4gX2Fic0FkZFNldFNpZ24ob25lLCB0cnVlKTsKICB9CgogIC8vLyBBZGRpdGlvbiBvcGVyYXRvci4KICBfQmlnSW50SW1wbCBvcGVyYXRvciArKEJpZ0ludCBiaWdJbnQpIHsKICAgIF9CaWdJbnRJbXBsIG90aGVyID0gYmlnSW50OwogICAgaWYgKF9pc1plcm8pIHJldHVybiBvdGhlcjsKICAgIGlmIChvdGhlci5faXNaZXJvKSByZXR1cm4gdGhpczsKICAgIHZhciBpc05lZ2F0aXZlID0gX2lzTmVnYXRpdmU7CiAgICBpZiAoaXNOZWdhdGl2ZSA9PSBvdGhlci5faXNOZWdhdGl2ZSkgewogICAgICAvLyB0aGlzICsgb3RoZXIgPT0gdGhpcyArIG90aGVyCiAgICAgIC8vICgtdGhpcykgKyAoLW90aGVyKSA9PSAtKHRoaXMgKyBvdGhlcikKICAgICAgcmV0dXJuIF9hYnNBZGRTZXRTaWduKG90aGVyLCBpc05lZ2F0aXZlKTsKICAgIH0KICAgIC8vIHRoaXMgKyAoLW90aGVyKSA9PSB0aGlzIC0gb3RoZXIgPT0gLSh0aGlzIC0gb3RoZXIpCiAgICAvLyAoLXRoaXMpICsgb3RoZXIgPT0gb3RoZXIgLSB0aGlzID09IC0odGhpcyAtIG90aGVyKQogICAgaWYgKF9hYnNDb21wYXJlKG90aGVyKSA+PSAwKSB7CiAgICAgIHJldHVybiBfYWJzU3ViU2V0U2lnbihvdGhlciwgaXNOZWdhdGl2ZSk7CiAgICB9CiAgICByZXR1cm4gb3RoZXIuX2Fic1N1YlNldFNpZ24odGhpcywgIWlzTmVnYXRpdmUpOwogIH0KCiAgLy8vIFN1YnRyYWN0aW9uIG9wZXJhdG9yLgogIF9CaWdJbnRJbXBsIG9wZXJhdG9yIC0oQmlnSW50IGJpZ0ludCkgewogICAgX0JpZ0ludEltcGwgb3RoZXIgPSBiaWdJbnQ7CiAgICBpZiAoX2lzWmVybykgcmV0dXJuIC1vdGhlcjsKICAgIGlmIChvdGhlci5faXNaZXJvKSByZXR1cm4gdGhpczsKICAgIHZhciBpc05lZ2F0aXZlID0gX2lzTmVnYXRpdmU7CiAgICBpZiAoaXNOZWdhdGl2ZSAhPSBvdGhlci5faXNOZWdhdGl2ZSkgewogICAgICAvLyB0aGlzIC0gKC1vdGhlcikgPT0gdGhpcyArIG90aGVyCiAgICAgIC8vICgtdGhpcykgLSBvdGhlciA9PSAtKHRoaXMgKyBvdGhlcikKICAgICAgcmV0dXJuIF9hYnNBZGRTZXRTaWduKG90aGVyLCBpc05lZ2F0aXZlKTsKICAgIH0KICAgIC8vIHRoaXMgLSBvdGhlciA9PSB0aGlzIC0gYSA9PSAtKHRoaXMgLSBvdGhlcikKICAgIC8vICgtdGhpcykgLSAoLW90aGVyKSA9PSBvdGhlciAtIHRoaXMgPT0gLSh0aGlzIC0gb3RoZXIpCiAgICBpZiAoX2Fic0NvbXBhcmUob3RoZXIpID49IDApIHsKICAgICAgcmV0dXJuIF9hYnNTdWJTZXRTaWduKG90aGVyLCBpc05lZ2F0aXZlKTsKICAgIH0KICAgIHJldHVybiBvdGhlci5fYWJzU3ViU2V0U2lnbih0aGlzLCAhaXNOZWdhdGl2ZSk7CiAgfQoKICAvLy8gTXVsdGlwbGllcyBgeERpZ2l0c1t4SW5kZXhdYCB3aXRoIGBtdWx0aXBsaWNhbmREaWdpdHNgIGFuZCBhZGRzIHRoZSByZXN1bHQKICAvLy8gdG8gYGFjY3VtdWxhdG9yRGlnaXRzYC4KICAvLy8KICAvLy8gVGhlIGBtdWx0aXBsaWNhbmREaWdpdHNgIGluIHRoZSByYW5nZSBgaWAgdG8gYGlgK2BuYC0xIGFyZSB0aGUKICAvLy8gbXVsdGlwbGljYW5kIGRpZ2l0cy4KICAvLy8KICAvLy8gVGhlIGBhY2N1bXVsYXRvckRpZ2l0c2AgaW4gdGhlIHJhbmdlIGBqYCB0byBgamArYG5gLTEgYXJlIHRoZSBhY2N1bXVsYXRvcgogIC8vLyBkaWdpdHMuCiAgLy8vCiAgLy8vIENvbmNyZXRlbHk6CiAgLy8vIGBhY2N1bXVsYXRvckRpZ2l0c1tqLi5qK25dICs9IHhEaWdpdHNbeEluZGV4XSAqIG1fZGlnaXRzW2kuLmkrbi0xXWAuCiAgLy8vIFJldHVybnMgMS4KICAvLy8KICAvLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW50cmluc2lmaWVkLiBJbnRyaW5zaWNzIG9uIDY0LWJpdCBwbGF0Zm9ybXMKICAvLy8gcHJvY2VzcyBkaWdpdCBwYWlycyBhdCBldmVuIGluZGljZXMgYW5kIHJldHVybnMgMi4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBzdGF0aWMgaW50IF9tdWxBZGQoCiAgICAgIFVpbnQzMkxpc3QgeERpZ2l0cywKICAgICAgaW50IHhJbmRleCwKICAgICAgVWludDMyTGlzdCBtdWx0aXBsaWNhbmREaWdpdHMsCiAgICAgIGludCBpLAogICAgICBVaW50MzJMaXN0IGFjY3VtdWxhdG9yRGlnaXRzLAogICAgICBpbnQgaiwKICAgICAgaW50IG4pIHsKICAgIGludCB4ID0geERpZ2l0c1t4SW5kZXhdOwogICAgaWYgKHggPT0gMCkgewogICAgICAvLyBOby1vcCBpZiB4IGlzIDAuCiAgICAgIHJldHVybiBfaXNJbnRyaW5zaWZpZWQgPyAyIDogMTsKICAgIH0KICAgIGludCBjYXJyeSA9IDA7CiAgICBpbnQgeGwgPSB4ICYgX2hhbGZEaWdpdE1hc2s7CiAgICBpbnQgeGggPSB4ID4+IF9oYWxmRGlnaXRCaXRzOwogICAgd2hpbGUgKC0tbiA+PSAwKSB7CiAgICAgIGludCBtbCA9IG11bHRpcGxpY2FuZERpZ2l0c1tpXSAmIF9oYWxmRGlnaXRNYXNrOwogICAgICBpbnQgbWggPSBtdWx0aXBsaWNhbmREaWdpdHNbaSsrXSA+PiBfaGFsZkRpZ2l0Qml0czsKICAgICAgaW50IHBoID0geGggKiBtbCArIG1oICogeGw7CiAgICAgIGludCBwbCA9IHhsICogbWwgKwogICAgICAgICAgKChwaCAmIF9oYWxmRGlnaXRNYXNrKSA8PCBfaGFsZkRpZ2l0Qml0cykgKwogICAgICAgICAgYWNjdW11bGF0b3JEaWdpdHNbal0gKwogICAgICAgICAgY2Fycnk7CiAgICAgIGNhcnJ5ID0gKHBsID4+IF9kaWdpdEJpdHMpICsgKHBoID4+IF9oYWxmRGlnaXRCaXRzKSArIHhoICogbWg7CiAgICAgIGFjY3VtdWxhdG9yRGlnaXRzW2orK10gPSBwbCAmIF9kaWdpdE1hc2s7CiAgICB9CiAgICB3aGlsZSAoY2FycnkgIT0gMCkgewogICAgICBpbnQgbCA9IGFjY3VtdWxhdG9yRGlnaXRzW2pdICsgY2Fycnk7CiAgICAgIGNhcnJ5ID0gbCA+PiBfZGlnaXRCaXRzOwogICAgICBhY2N1bXVsYXRvckRpZ2l0c1tqKytdID0gbCAmIF9kaWdpdE1hc2s7CiAgICB9CiAgICByZXR1cm4gX2lzSW50cmluc2lmaWVkID8gMiA6IDE7CiAgfQoKICAvLy8gTXVsdGlwbGllcyBgeERpZ2l0c1tpXWAgd2l0aCBgeERpZ2l0c2AgYW5kIGFkZHMgdGhlIHJlc3VsdCB0bwogIC8vLyBgYWNjdW11bGF0b3JEaWdpdHNgLgogIC8vLwogIC8vLyBUaGUgYHhEaWdpdHNgIGluIHRoZSByYW5nZSBgaWAgdG8gYHVzZWRgLTEgYXJlIHRoZSBtdWx0aXBsaWNhbmQgZGlnaXRzLgogIC8vLwogIC8vLyBUaGUgYGFjY3VtdWxhdG9yRGlnaXRzYCBpbiB0aGUgcmFuZ2UgMipgaWAgdG8gYGlgK2B1c2VkYC0xIGFyZSB0aGUKICAvLy8gYWNjdW11bGF0b3IgZGlnaXRzLgogIC8vLwogIC8vLyBDb25jcmV0ZWx5OgogIC8vLyBgYWNjdW11bGF0b3JEaWdpdHNbMippLi5pK3VzZWQtMV0gKz0geERpZ2l0c1tpXSp4RGlnaXRzW2ldICsKICAvLy8gMip4RGlnaXRzW2ldKnhEaWdpdHNbaSsxLi51c2VkLTFdYC4KICAvLy8gUmV0dXJucyAxLgogIC8vLwogIC8vLyBOb3RlOiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBpbnRyaW5zaWZpZWQuIEludHJpbnNpY3Mgb24gNjQtYml0IHBsYXRmb3JtcwogIC8vLyBwcm9jZXNzIGRpZ2l0IHBhaXJzIGF0IGV2ZW4gaW5kaWNlcyBhbmQgcmV0dXJucyAyLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIHN0YXRpYyBpbnQgX3NxckFkZCgKICAgICAgVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgaSwgVWludDMyTGlzdCBhY2N1bHVtYXRvckRpZ2l0cywgaW50IHVzZWQpIHsKICAgIGludCB4ID0geERpZ2l0c1tpXTsKICAgIGlmICh4ID09IDApIHJldHVybiBfaXNJbnRyaW5zaWZpZWQgPyAyIDogMTsKICAgIGludCBqID0gMiAqIGk7CiAgICBpbnQgY2FycnkgPSAwOwogICAgaW50IHhsID0geCAmIF9oYWxmRGlnaXRNYXNrOwogICAgaW50IHhoID0geCA+PiBfaGFsZkRpZ2l0Qml0czsKICAgIGludCBwaCA9IDIgKiB4aCAqIHhsOwogICAgaW50IHBsID0geGwgKiB4bCArCiAgICAgICAgKChwaCAmIF9oYWxmRGlnaXRNYXNrKSA8PCBfaGFsZkRpZ2l0Qml0cykgKwogICAgICAgIGFjY3VsdW1hdG9yRGlnaXRzW2pdOwogICAgY2FycnkgPSAocGwgPj4gX2RpZ2l0Qml0cykgKyAocGggPj4gX2hhbGZEaWdpdEJpdHMpICsgeGggKiB4aDsKICAgIGFjY3VsdW1hdG9yRGlnaXRzW2pdID0gcGwgJiBfZGlnaXRNYXNrOwogICAgeCA8PD0gMTsKICAgIHhsID0geCAmIF9oYWxmRGlnaXRNYXNrOwogICAgeGggPSB4ID4+IF9oYWxmRGlnaXRCaXRzOwogICAgaW50IG4gPSB1c2VkIC0gaSAtIDE7CiAgICBpbnQgayA9IGkgKyAxOwogICAgaisrOwogICAgd2hpbGUgKC0tbiA+PSAwKSB7CiAgICAgIGludCBsID0geERpZ2l0c1trXSAmIF9oYWxmRGlnaXRNYXNrOwogICAgICBpbnQgaCA9IHhEaWdpdHNbaysrXSA+PiBfaGFsZkRpZ2l0Qml0czsKICAgICAgaW50IHBoID0geGggKiBsICsgaCAqIHhsOwogICAgICBpbnQgcGwgPSB4bCAqIGwgKwogICAgICAgICAgKChwaCAmIF9oYWxmRGlnaXRNYXNrKSA8PCBfaGFsZkRpZ2l0Qml0cykgKwogICAgICAgICAgYWNjdWx1bWF0b3JEaWdpdHNbal0gKwogICAgICAgICAgY2Fycnk7CiAgICAgIGNhcnJ5ID0gKHBsID4+IF9kaWdpdEJpdHMpICsgKHBoID4+IF9oYWxmRGlnaXRCaXRzKSArIHhoICogaDsKICAgICAgYWNjdWx1bWF0b3JEaWdpdHNbaisrXSA9IHBsICYgX2RpZ2l0TWFzazsKICAgIH0KICAgIGNhcnJ5ICs9IGFjY3VsdW1hdG9yRGlnaXRzW2kgKyB1c2VkXTsKICAgIGlmIChjYXJyeSA+PSBfZGlnaXRCYXNlKSB7CiAgICAgIGFjY3VsdW1hdG9yRGlnaXRzW2kgKyB1c2VkXSA9IGNhcnJ5IC0gX2RpZ2l0QmFzZTsKICAgICAgYWNjdWx1bWF0b3JEaWdpdHNbaSArIHVzZWQgKyAxXSA9IDE7CiAgICB9IGVsc2UgewogICAgICBhY2N1bHVtYXRvckRpZ2l0c1tpICsgdXNlZF0gPSBjYXJyeTsKICAgIH0KICAgIHJldHVybiBfaXNJbnRyaW5zaWZpZWQgPyAyIDogMTsKICB9CgogIC8vLyBNdWx0aXBsaWNhdGlvbiBvcGVyYXRvci4KICBfQmlnSW50SW1wbCBvcGVyYXRvciAqKEJpZ0ludCBiaWdJbnQpIHsKICAgIF9CaWdJbnRJbXBsIG90aGVyID0gYmlnSW50OwogICAgdmFyIHVzZWQgPSBfdXNlZDsKICAgIHZhciBvdGhlclVzZWQgPSBvdGhlci5fdXNlZDsKICAgIGlmICh1c2VkID09IDAgfHwgb3RoZXJVc2VkID09IDApIHsKICAgICAgcmV0dXJuIHplcm87CiAgICB9CiAgICB2YXIgcmVzdWx0VXNlZCA9IHVzZWQgKyBvdGhlclVzZWQ7CiAgICB2YXIgZGlnaXRzID0gX2RpZ2l0czsKICAgIHZhciBvdGhlckRpZ2l0cyA9IG90aGVyLl9kaWdpdHM7CiAgICB2YXIgcmVzdWx0RGlnaXRzID0gX25ld0RpZ2l0cyhyZXN1bHRVc2VkKTsKICAgIHZhciBpID0gMDsKICAgIHdoaWxlIChpIDwgb3RoZXJVc2VkKSB7CiAgICAgIGkgKz0gX211bEFkZChvdGhlckRpZ2l0cywgaSwgZGlnaXRzLCAwLCByZXN1bHREaWdpdHMsIGksIHVzZWQpOwogICAgfQogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKAogICAgICAgIF9pc05lZ2F0aXZlICE9IG90aGVyLl9pc05lZ2F0aXZlLCByZXN1bHRVc2VkLCByZXN1bHREaWdpdHMpOwogIH0KCiAgLy8gcmVzdWx0RGlnaXRzWzAuLnJlc3VsdFVzZWQtMV0gPQogIC8vICAgICB4RGlnaXRzWzAuLnhVc2VkLTFdKm90aGVyRGlnaXRzWzAuLm90aGVyVXNlZC0xXS4KICAvLyBSZXR1cm5zIHJlc3VsdFVzZWQgPSB4VXNlZCArIG90aGVyVXNlZC4KICBzdGF0aWMgaW50IF9tdWxEaWdpdHMoVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQsIFVpbnQzMkxpc3Qgb3RoZXJEaWdpdHMsCiAgICAgIGludCBvdGhlclVzZWQsIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKSB7CiAgICB2YXIgcmVzdWx0VXNlZCA9IHhVc2VkICsgb3RoZXJVc2VkOwogICAgdmFyIGkgPSByZXN1bHRVc2VkICsgKHJlc3VsdFVzZWQgJiAxKTsKICAgIGFzc2VydChyZXN1bHREaWdpdHMubGVuZ3RoID49IGkpOwogICAgd2hpbGUgKC0taSA+PSAwKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IDA7CiAgICB9CiAgICBpID0gMDsKICAgIHdoaWxlIChpIDwgb3RoZXJVc2VkKSB7CiAgICAgIGkgKz0gX211bEFkZChvdGhlckRpZ2l0cywgaSwgeERpZ2l0cywgMCwgcmVzdWx0RGlnaXRzLCBpLCB4VXNlZCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0VXNlZDsKICB9CgogIC8vIHJlc3VsdERpZ2l0c1swLi5yZXN1bHRVc2VkLTFdID0geERpZ2l0c1swLi54VXNlZC0xXV4yLgogIC8vIFJldHVybnMgcmVzdWx0VXNlZCA9IDIqeFVzZWQuCiAgc3RhdGljIGludCBfc3FyRGlnaXRzKAogICAgICBVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCwgVWludDMyTGlzdCByZXN1bHREaWdpdHMpIHsKICAgIHZhciByZXN1bHRVc2VkID0gMiAqIHhVc2VkOwogICAgYXNzZXJ0KHJlc3VsdERpZ2l0cy5sZW5ndGggPj0gcmVzdWx0VXNlZCk7CiAgICAvLyBTaW5jZSByZXN1bHRVc2VkIGlzIGV2ZW4sIG5vIG5lZWQgZm9yIGEgbGVhZGluZyB6ZXJvIGZvcgogICAgLy8gNjQtYml0IHByb2Nlc3NpbmcuCiAgICB2YXIgaSA9IHJlc3VsdFVzZWQ7CiAgICB3aGlsZSAoLS1pID49IDApIHsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gMDsKICAgIH0KICAgIGkgPSAwOwogICAgd2hpbGUgKGkgPCB4VXNlZCAtIDEpIHsKICAgICAgaSArPSBfc3FyQWRkKHhEaWdpdHMsIGksIHJlc3VsdERpZ2l0cywgeFVzZWQpOwogICAgfQogICAgLy8gVGhlIGxhc3Qgc3RlcCBpcyBhbHJlYWR5IGRvbmUgaWYgZGlnaXQgcGFpcnMgd2VyZSBwcm9jZXNzZWQgYWJvdmUuCiAgICBpZiAoaSA8IHhVc2VkKSB7CiAgICAgIF9tdWxBZGQoeERpZ2l0cywgaSwgeERpZ2l0cywgaSwgcmVzdWx0RGlnaXRzLCAyICogaSwgMSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0VXNlZDsKICB9CgogIC8vIEluZGljZXMgb2YgdGhlIGFyZ3VtZW50cyBvZiBfZXN0aW1hdGVRdW90aWVudERpZ2l0LgogIC8vIEZvciA2NC1iaXQgcHJvY2Vzc2luZyBieSBpbnRyaW5zaWNzIG9uIDY0LWJpdCBwbGF0Zm9ybXMsIHRoZSB0b3AgZGlnaXQgcGFpcgogIC8vIG9mIHRoZSBkaXZpc29yIGlzIHByb3ZpZGVkIGluIHRoZSBhcmdzIGFycmF5LCBhbmQgYSA2NC1iaXQgZXN0aW1hdGVkCiAgLy8gcXVvdGllbnQgaXMgcmV0dXJuZWQuIEhvd2V2ZXIsIG9uIDMyLWJpdCBwbGF0Zm9ybXMsIHRoZSBsb3cgMzItYml0IGRpZ2l0IGlzCiAgLy8gaWdub3JlZCBhbmQgb25seSBvbmUgMzItYml0IGRpZ2l0IGlzIHJldHVybmVkIGFzIHRoZSBlc3RpbWF0ZWQgcXVvdGllbnQuCiAgc3RhdGljIGNvbnN0IGludCBfZGl2aXNvckxvd1RvcERpZ2l0ID0gMDsgLy8gTG93IGRpZ2l0IG9mIHRvcCBwYWlyIG9mIGRpdmlzb3IuCiAgc3RhdGljIGNvbnN0IGludCBfZGl2aXNvclRvcERpZ2l0ID0gMTsgLy8gVG9wIGRpZ2l0IG9mIGRpdmlzb3IuCiAgc3RhdGljIGNvbnN0IGludCBfcXVvdGllbnREaWdpdCA9IDI7IC8vIEVzdGltYXRlZCBxdW90aWVudC4KICBzdGF0aWMgY29uc3QgaW50IF9xdW90aWVudEhpZ2hEaWdpdCA9IDM7IC8vIEhpZ2ggZGlnaXQgb2YgZXN0aW1hdGVkIHF1b3RpZW50LgoKICAvLy8gRXN0aW1hdGUgYGFyZ3NbX3F1b3RpZW50RGlnaXRdID0gZGlnaXRzW2ktMS4uaV0gfi8gYXJnc1tfZGl2aXNvclRvcERpZ2l0XWAKICAvLy8gUmV0dXJucyAxLgogIC8vLwogIC8vLyBOb3RlOiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBpbnRyaW5zaWZpZWQuIEludHJpbnNpY3Mgb24gNjQtYml0IHBsYXRmb3JtcwogIC8vLyBwcm9jZXNzIGEgZGlnaXQgcGFpciAoaSBhbHdheXMgb2RkKToKICAvLy8gRXN0aW1hdGUgYGFyZ3NbX3F1b3RpZW50RGlnaXQuLl9xdW90aWVudEhpZ2hEaWdpdF0gPSBkaWdpdHNbaS0zLi5pXSB+LwogIC8vLyBhcmdzW19kaXZpc29yTG93VG9wRGlnaXQuLl9kaXZpc29yVG9wRGlnaXRdYC4KICAvLy8gUmV0dXJucyAyLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIHN0YXRpYyBpbnQgX2VzdGltYXRlUXVvdGllbnREaWdpdChVaW50MzJMaXN0IGFyZ3MsIFVpbnQzMkxpc3QgZGlnaXRzLCBpbnQgaSkgewogICAgLy8gVmVyaWZ5IHRoYXQgZGlnaXQgcGFpcnMgYXJlIGFjY2Vzc2libGUgZm9yIDY0LWJpdCBwcm9jZXNzaW5nLgogICAgYXNzZXJ0KGRpZ2l0cy5sZW5ndGggPj0gNCk7CiAgICBpZiAoZGlnaXRzW2ldID09IGFyZ3NbX2Rpdmlzb3JUb3BEaWdpdF0pIHsKICAgICAgYXJnc1tfcXVvdGllbnREaWdpdF0gPSBfZGlnaXRNYXNrOwogICAgfSBlbHNlIHsKICAgICAgLy8gQ2hvcCBvZmYgb25lIGJpdCwgc2luY2UgYSBNaW50IGNhbm5vdCBob2xkIDIgZGlnaXRzLgogICAgICB2YXIgcXVvdGllbnREaWdpdCA9CiAgICAgICAgICAoKGRpZ2l0c1tpXSA8PCAoX2RpZ2l0Qml0cyAtIDEpKSB8IChkaWdpdHNbaSAtIDFdID4+IDEpKSB+LwogICAgICAgICAgICAgIChhcmdzW19kaXZpc29yVG9wRGlnaXRdID4+IDEpOwogICAgICBpZiAocXVvdGllbnREaWdpdCA+IF9kaWdpdE1hc2spIHsKICAgICAgICBhcmdzW19xdW90aWVudERpZ2l0XSA9IF9kaWdpdE1hc2s7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXJnc1tfcXVvdGllbnREaWdpdF0gPSBxdW90aWVudERpZ2l0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX2lzSW50cmluc2lmaWVkID8gMiA6IDE7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1bmModGhpcyAvIG90aGVyKWAsIHdpdGggYG90aGVyICE9IDBgLgogIF9CaWdJbnRJbXBsIF9kaXYoQmlnSW50IGJpZ0ludCkgewogICAgX0JpZ0ludEltcGwgb3RoZXIgPSBiaWdJbnQ7CiAgICBhc3NlcnQob3RoZXIuX3VzZWQgPiAwKTsKICAgIGlmIChfdXNlZCA8IG90aGVyLl91c2VkKSB7CiAgICAgIHJldHVybiB6ZXJvOwogICAgfQogICAgX2RpdlJlbShvdGhlcik7CiAgICAvLyBSZXR1cm4gcXVvdGllbnQsIGkuZS4KICAgIC8vIF9sYXN0UXVvUmVtX2RpZ2l0c1tfbGFzdFJlbV91c2VkLi5fbGFzdFF1b1JlbV91c2VkLTFdIHdpdGggcHJvcGVyIHNpZ24uCiAgICB2YXIgbGFzdFF1b191c2VkID0gX2xhc3RRdW9SZW1Vc2VkIC0gX2xhc3RSZW1Vc2VkOwogICAgdmFyIHF1b19kaWdpdHMgPSBfY2xvbmVEaWdpdHMoCiAgICAgICAgX2xhc3RRdW9SZW1EaWdpdHMsIF9sYXN0UmVtVXNlZCwgX2xhc3RRdW9SZW1Vc2VkLCBsYXN0UXVvX3VzZWQpOwogICAgdmFyIHF1byA9IG5ldyBfQmlnSW50SW1wbC5fKGZhbHNlLCBsYXN0UXVvX3VzZWQsIHF1b19kaWdpdHMpOwogICAgaWYgKChfaXNOZWdhdGl2ZSAhPSBvdGhlci5faXNOZWdhdGl2ZSkgJiYgKHF1by5fdXNlZCA+IDApKSB7CiAgICAgIHF1byA9IC1xdW87CiAgICB9CiAgICByZXR1cm4gcXVvOwogIH0KCiAgLy8vIFJldHVybnMgYHRoaXMgLSBvdGhlciAqIHRydW5jKHRoaXMgLyBvdGhlcilgLCB3aXRoIGBvdGhlciAhPSAwYC4KICBfQmlnSW50SW1wbCBfcmVtKEJpZ0ludCBiaWdJbnQpIHsKICAgIF9CaWdJbnRJbXBsIG90aGVyID0gYmlnSW50OwogICAgYXNzZXJ0KG90aGVyLl91c2VkID4gMCk7CiAgICBpZiAoX3VzZWQgPCBvdGhlci5fdXNlZCkgewogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIF9kaXZSZW0ob3RoZXIpOwogICAgLy8gUmV0dXJuIHJlbWFpbmRlciwgaS5lLgogICAgLy8gZGVub3JtYWxpemVkIF9sYXN0UXVvUmVtX2RpZ2l0c1swLi5fbGFzdFJlbV91c2VkLTFdIHdpdGggcHJvcGVyIHNpZ24uCiAgICB2YXIgcmVtRGlnaXRzID0KICAgICAgICBfY2xvbmVEaWdpdHMoX2xhc3RRdW9SZW1EaWdpdHMsIDAsIF9sYXN0UmVtVXNlZCwgX2xhc3RSZW1Vc2VkKTsKICAgIHZhciByZW0gPSBuZXcgX0JpZ0ludEltcGwuXyhmYWxzZSwgX2xhc3RSZW1Vc2VkLCByZW1EaWdpdHMpOwogICAgaWYgKF9sYXN0UmVtX25zaCA+IDApIHsKICAgICAgcmVtID0gcmVtID4+IF9sYXN0UmVtX25zaDsgLy8gRGVub3JtYWxpemUgcmVtYWluZGVyLgogICAgfQogICAgaWYgKF9pc05lZ2F0aXZlICYmIChyZW0uX3VzZWQgPiAwKSkgewogICAgICByZW0gPSAtcmVtOwogICAgfQogICAgcmV0dXJuIHJlbTsKICB9CgogIC8vLyBDb21wdXRlcyB0aGlzIH4vIG90aGVyIGFuZCB0aGlzLnJlbWFpbmRlcihvdGhlcikuCiAgLy8vCiAgLy8vIFN0b3JlcyB0aGUgcmVzdWx0IGluIFtfbGFzdFF1b1JlbURpZ2l0c10sIFtfbGFzdFF1b1JlbVVzZWRdIGFuZAogIC8vLyBbX2xhc3RSZW1Vc2VkXS4gVGhlIFtfbGFzdFF1b1JlbURpZ2l0c10gY29udGFpbnMgdGhlIGRpZ2l0cyBvZiAqYm90aCosIHRoZQogIC8vLyBxdW90aWVudCBhbmQgdGhlIHJlbWFpbmRlci4KICAvLy8KICAvLy8gQ2FjaGVzIHRoZSBpbnB1dCB0byBhdm9pZCBkb2luZyB0aGUgd29yayBhZ2FpbiB3aGVuIHVzZXJzIHdyaXRlCiAgLy8vIGBhIH4vIGJgIGZvbGxvd2VkIGJ5IGEgYGEgJSBiYC4KICB2b2lkIF9kaXZSZW0oX0JpZ0ludEltcGwgb3RoZXIpIHsKICAgIC8vIENoZWNrIGlmIHJlc3VsdCBpcyBhbHJlYWR5IGNhY2hlZC4KICAgIGlmICgodGhpcy5fdXNlZCA9PSBfbGFzdERpdmlkZW5kVXNlZCkgJiYKICAgICAgICAob3RoZXIuX3VzZWQgPT0gX2xhc3REaXZpc29yVXNlZCkgJiYKICAgICAgICBpZGVudGljYWwodGhpcy5fZGlnaXRzLCBfbGFzdERpdmlkZW5kRGlnaXRzKSAmJgogICAgICAgIGlkZW50aWNhbChvdGhlci5fZGlnaXRzLCBfbGFzdERpdmlzb3JEaWdpdHMpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGFzc2VydChfdXNlZCA+PSBvdGhlci5fdXNlZCk7CgogICAgdmFyIG5zaCA9IF9kaWdpdEJpdHMgLSBvdGhlci5fZGlnaXRzW290aGVyLl91c2VkIC0gMV0uYml0TGVuZ3RoOwogICAgLy8gRm9yIDY0LWJpdCBwcm9jZXNzaW5nLCBtYWtlIHN1cmUgb3RoZXIgaGFzIGFuIGV2ZW4gbnVtYmVyIG9mIGRpZ2l0cy4KICAgIGlmIChvdGhlci5fdXNlZC5pc09kZCkgewogICAgICBuc2ggKz0gX2RpZ2l0Qml0czsKICAgIH0KICAgIC8vIENvbmNhdGVuYXRlZCBwb3NpdGl2ZSBxdW90aWVudCBhbmQgbm9ybWFsaXplZCBwb3NpdGl2ZSByZW1haW5kZXIuCiAgICAvLyBUaGUgcmVzdWx0RGlnaXRzIGNhbiBoYXZlIGF0IG1vc3Qgb25lIG1vcmUgZGlnaXQgdGhhbiB0aGUgZGl2aWRlbmQuCiAgICBVaW50MzJMaXN0IHJlc3VsdERpZ2l0czsKICAgIGludCByZXN1bHRVc2VkOwogICAgLy8gTm9ybWFsaXplZCBwb3NpdGl2ZSBkaXZpc29yIChyZWZlcnJlZCB0byBhcyAneScpLgogICAgLy8gVGhlIG5vcm1hbGl6ZWQgZGl2aXNvciBoYXMgdGhlIG1vc3Qtc2lnbmlmaWNhbnQgYml0IG9mIGl0cyBtb3N0CiAgICAvLyBzaWduaWZpY2FudCBkaWdpdCBzZXQuCiAgICAvLyBUaGlzIG1ha2VzIGVzdGltYXRpbmcgdGhlIHF1b3RpZW50IGVhc2llci4KICAgIFVpbnQzMkxpc3QgeURpZ2l0czsKICAgIGludCB5VXNlZDsKICAgIGlmIChuc2ggPiAwKSB7CiAgICAgIC8vIEV4dHJhIGRpZ2l0cyBmb3Igbm9ybWFsaXphdGlvbiwgYWxzbyB1c2VkIGZvciBwb3NzaWJsZSBfbXVsQWRkIGNhcnJ5LgogICAgICB2YXIgbnVtRXh0cmFEaWdpdHMgPSAobnNoICsgX2RpZ2l0Qml0cyAtIDEpIH4vIF9kaWdpdEJpdHMgKyAxOwogICAgICB5RGlnaXRzID0gX25ld0RpZ2l0cyhvdGhlci5fdXNlZCArIG51bUV4dHJhRGlnaXRzKTsKICAgICAgeVVzZWQgPSBfbFNoaWZ0RGlnaXRzKG90aGVyLl9kaWdpdHMsIG90aGVyLl91c2VkLCBuc2gsIHlEaWdpdHMpOwogICAgICByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKF91c2VkICsgbnVtRXh0cmFEaWdpdHMpOwogICAgICByZXN1bHRVc2VkID0gX2xTaGlmdERpZ2l0cyhfZGlnaXRzLCBfdXNlZCwgbnNoLCByZXN1bHREaWdpdHMpOwogICAgfSBlbHNlIHsKICAgICAgeURpZ2l0cyA9IG90aGVyLl9kaWdpdHM7CiAgICAgIHlVc2VkID0gb3RoZXIuX3VzZWQ7CiAgICAgIC8vIEV4dHJhIGRpZ2l0IHRvIGhvbGQgcG9zc2libGUgX211bEFkZCBjYXJyeS4KICAgICAgcmVzdWx0RGlnaXRzID0gX2Nsb25lRGlnaXRzKF9kaWdpdHMsIDAsIF91c2VkLCBfdXNlZCArIDEpOwogICAgICByZXN1bHRVc2VkID0gX3VzZWQ7CiAgICB9CiAgICBVaW50MzJMaXN0IGFyZ3MgPSBfbmV3RGlnaXRzKDQpOwogICAgYXJnc1tfZGl2aXNvckxvd1RvcERpZ2l0XSA9IHlEaWdpdHNbeVVzZWQgLSAyXTsKICAgIGFyZ3NbX2Rpdmlzb3JUb3BEaWdpdF0gPSB5RGlnaXRzW3lVc2VkIC0gMV07CiAgICAvLyBGb3IgNjQtYml0IHByb2Nlc3NpbmcsIG1ha2Ugc3VyZSB5VXNlZCwgaSwgYW5kIGogYXJlIGV2ZW4uCiAgICBhc3NlcnQoeVVzZWQuaXNFdmVuKTsKICAgIHZhciBpID0gcmVzdWx0VXNlZCArIChyZXN1bHRVc2VkICYgMSk7CiAgICB2YXIgaiA9IGkgLSB5VXNlZDsKICAgIC8vIHRtcERpZ2l0cyBpcyBhIHRlbXBvcmFyeSBhcnJheSBvZiBpIChldmVuIHJlc3VsdFVzZWQpIGRpZ2l0cy4KICAgIHZhciB0bXBEaWdpdHMgPSBfbmV3RGlnaXRzKGkpOwogICAgdmFyIHRtcFVzZWQgPSBfZGxTaGlmdERpZ2l0cyh5RGlnaXRzLCB5VXNlZCwgaiwgdG1wRGlnaXRzKTsKICAgIC8vIEV4cGxpY2l0IGZpcnN0IGRpdmlzaW9uIHN0ZXAgaW4gY2FzZSBub3JtYWxpemVkIGRpdmlkZW5kIGlzIGxhcmdlciBvcgogICAgLy8gZXF1YWwgdG8gc2hpZnRlZCBub3JtYWxpemVkIGRpdmlzb3IuCiAgICBpZiAoX2NvbXBhcmVEaWdpdHMocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCB0bXBEaWdpdHMsIHRtcFVzZWQpID49IDApIHsKICAgICAgYXNzZXJ0KGkgPT0gcmVzdWx0VXNlZCk7CiAgICAgIHJlc3VsdERpZ2l0c1tyZXN1bHRVc2VkKytdID0gMTsgLy8gUXVvdGllbnQgPSAxLgogICAgICAvLyBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLgogICAgICBfYWJzU3ViKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCwgdG1wRGlnaXRzLCB0bXBVc2VkLCByZXN1bHREaWdpdHMpOwogICAgfSBlbHNlIHsKICAgICAgLy8gQWNjb3VudCBmb3IgcG9zc2libGUgY2FycnkgaW4gX211bEFkZCBzdGVwLgogICAgICByZXN1bHREaWdpdHNbcmVzdWx0VXNlZCsrXSA9IDA7CiAgICB9CiAgICBpZiAocmVzdWx0VXNlZC5pc09kZCkgewogICAgICByZXN1bHREaWdpdHNbcmVzdWx0VXNlZF0gPSAwOyAvLyBMZWFkaW5nIHplcm8gZm9yIDY0LWJpdCBwcm9jZXNzaW5nLgogICAgfQogICAgLy8gTmVnYXRlIHkgc28gd2UgY2FuIGxhdGVyIHVzZSBfbXVsQWRkIGluc3RlYWQgb2Ygbm9uLWV4aXN0ZW50IF9tdWxTdWIuCiAgICB2YXIgbnlEaWdpdHMgPSBfbmV3RGlnaXRzKHlVc2VkICsgMik7CiAgICBueURpZ2l0c1t5VXNlZF0gPSAxOwogICAgX2Fic1N1YihueURpZ2l0cywgeVVzZWQgKyAxLCB5RGlnaXRzLCB5VXNlZCwgbnlEaWdpdHMpOwogICAgLy8gbnlEaWdpdHMgaXMgcmVhZC1vbmx5IGFuZCBoYXMgeVVzZWQgZGlnaXRzIChwb3NzaWJseSBpbmNsdWRpbmcgc2V2ZXJhbAogICAgLy8gbGVhZGluZyB6ZXJvcykgcGx1cyBhIGxlYWRpbmcgemVybyBmb3IgNjQtYml0IHByb2Nlc3NpbmcuCiAgICAvLyByZXN1bHREaWdpdHMgaXMgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbi4KICAgIC8vIHJlc3VsdERpZ2l0c1swLi55VXNlZC0xXSBpcyB0aGUgY3VycmVudCByZW1haW5kZXIuCiAgICAvLyByZXN1bHREaWdpdHNbeVVzZWQuLnJlc3VsdFVzZWQtMV0gaXMgdGhlIGN1cnJlbnQgcXVvdGllbnQuCiAgICAtLWk7CiAgICB3aGlsZSAoaiA+IDApIHsKICAgICAgdmFyIGQwID0gX2VzdGltYXRlUXVvdGllbnREaWdpdChhcmdzLCByZXN1bHREaWdpdHMsIGkpOwogICAgICBqIC09IGQwOwogICAgICB2YXIgZDEgPQogICAgICAgICAgX211bEFkZChhcmdzLCBfcXVvdGllbnREaWdpdCwgbnlEaWdpdHMsIDAsIHJlc3VsdERpZ2l0cywgaiwgeVVzZWQpOwogICAgICAvLyBfZXN0aW1hdGVRdW90aWVudERpZ2l0IGFuZCBfbXVsQWRkIG11c3QgYWdyZWUgb24gdGhlIG51bWJlciBvZiBkaWdpdHMKICAgICAgLy8gdG8gcHJvY2Vzcy4KICAgICAgYXNzZXJ0KGQwID09IGQxKTsKICAgICAgaWYgKGQwID09IDEpIHsKICAgICAgICBpZiAocmVzdWx0RGlnaXRzW2ldIDwgYXJnc1tfcXVvdGllbnREaWdpdF0pIHsKICAgICAgICAgIC8vIFJldXNpbmcgdGhlIGFscmVhZHkgZXhpc3RpbmcgdG1wRGlnaXRzIGFycmF5LgogICAgICAgICAgdmFyIHRtcFVzZWQgPSBfZGxTaGlmdERpZ2l0cyhueURpZ2l0cywgeVVzZWQsIGosIHRtcERpZ2l0cyk7CiAgICAgICAgICBfYWJzU3ViKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCwgdG1wRGlnaXRzLCB0bXBVc2VkLCByZXN1bHREaWdpdHMpOwogICAgICAgICAgd2hpbGUgKHJlc3VsdERpZ2l0c1tpXSA8IC0tYXJnc1tfcXVvdGllbnREaWdpdF0pIHsKICAgICAgICAgICAgX2Fic1N1YihyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIHRtcERpZ2l0cywgdG1wVXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KGQwID09IDIpOwogICAgICAgIGFzc2VydChyZXN1bHREaWdpdHNbaV0gPD0gYXJnc1tfcXVvdGllbnRIaWdoRGlnaXRdKTsKICAgICAgICBpZiAocmVzdWx0RGlnaXRzW2ldIDwgYXJnc1tfcXVvdGllbnRIaWdoRGlnaXRdIHx8CiAgICAgICAgICAgIHJlc3VsdERpZ2l0c1tpIC0gMV0gPCBhcmdzW19xdW90aWVudERpZ2l0XSkgewogICAgICAgICAgLy8gUmV1c2luZyB0aGUgYWxyZWFkeSBleGlzdGluZyB0bXBEaWdpdHMgYXJyYXkuCiAgICAgICAgICB2YXIgdG1wVXNlZCA9IF9kbFNoaWZ0RGlnaXRzKG55RGlnaXRzLCB5VXNlZCwgaiwgdG1wRGlnaXRzKTsKICAgICAgICAgIF9hYnNTdWIocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCB0bXBEaWdpdHMsIHRtcFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICAgICAgICBpZiAoYXJnc1tfcXVvdGllbnREaWdpdF0gPT0gMCkgewogICAgICAgICAgICAtLWFyZ3NbX3F1b3RpZW50SGlnaERpZ2l0XTsKICAgICAgICAgIH0KICAgICAgICAgIC0tYXJnc1tfcXVvdGllbnREaWdpdF07CiAgICAgICAgICBhc3NlcnQocmVzdWx0RGlnaXRzW2ldIDw9IGFyZ3NbX3F1b3RpZW50SGlnaERpZ2l0XSk7CiAgICAgICAgICB3aGlsZSAocmVzdWx0RGlnaXRzW2ldIDwgYXJnc1tfcXVvdGllbnRIaWdoRGlnaXRdIHx8CiAgICAgICAgICAgICAgcmVzdWx0RGlnaXRzW2kgLSAxXSA8IGFyZ3NbX3F1b3RpZW50RGlnaXRdKSB7CiAgICAgICAgICAgIF9hYnNTdWIocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCB0bXBEaWdpdHMsIHRtcFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICAgICAgICAgIGlmIChhcmdzW19xdW90aWVudERpZ2l0XSA9PSAwKSB7CiAgICAgICAgICAgICAgLS1hcmdzW19xdW90aWVudEhpZ2hEaWdpdF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLS1hcmdzW19xdW90aWVudERpZ2l0XTsKICAgICAgICAgICAgYXNzZXJ0KHJlc3VsdERpZ2l0c1tpXSA8PSBhcmdzW19xdW90aWVudEhpZ2hEaWdpdF0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpIC09IGQwOwogICAgfQogICAgLy8gQ2FjaGUgcmVzdWx0LgogICAgX2xhc3REaXZpZGVuZERpZ2l0cyA9IF9kaWdpdHM7CiAgICBfbGFzdERpdmlkZW5kVXNlZCA9IF91c2VkOwogICAgX2xhc3REaXZpc29yRGlnaXRzID0gb3RoZXIuX2RpZ2l0czsKICAgIF9sYXN0RGl2aXNvclVzZWQgPSBvdGhlci5fdXNlZDsKICAgIF9sYXN0UXVvUmVtRGlnaXRzID0gcmVzdWx0RGlnaXRzOwogICAgX2xhc3RRdW9SZW1Vc2VkID0gcmVzdWx0VXNlZDsKICAgIF9sYXN0UmVtVXNlZCA9IHlVc2VkOwogICAgX2xhc3RSZW1fbnNoID0gbnNoOwogIH0KCiAgLy8gQ3VzdG9taXplZCB2ZXJzaW9uIG9mIF9yZW0oKSBtaW5pbWl6aW5nIGFsbG9jYXRpb25zIGZvciB1c2UgaW4gcmVkdWN0aW9uLgogIC8vIElucHV0OgogIC8vICAgeERpZ2l0c1swLi54VXNlZC0xXTogcG9zaXRpdmUgZGl2aWRlbmQuCiAgLy8gICB5RGlnaXRzWzAuLnlVc2VkLTFdOiBub3JtYWxpemVkIHBvc2l0aXZlIGRpdmlzb3IuCiAgLy8gICBueURpZ2l0c1swLi55VXNlZC0xXTogbmVnYXRlZCB5RGlnaXRzLgogIC8vICAgbnNoOiBub3JtYWxpemF0aW9uIHNoaWZ0IGFtb3VudC4KICAvLyAgIGFyZ3M6IHRvcCB5IGRpZ2l0KHMpIGFuZCBwbGFjZSBob2xkZXIgZm9yIGVzdGltYXRlZCBxdW90aWVudCBkaWdpdChzKS4KICAvLyAgIHRtcERpZ2l0czogdGVtcCBhcnJheSBvZiAyKnlVc2VkIGRpZ2l0cy4KICAvLyAgIHJlc3VsdERpZ2l0czogcmVzdWx0IGRpZ2l0cyBhcnJheSBsYXJnZSBlbm91Z2ggdG8gdGVtcG9yYXJpbHkgaG9sZAogIC8vICAgICAgICAgICAgICAgICBjb25jYXRlbmF0ZWQgcXVvdGllbnQgYW5kIG5vcm1hbGl6ZWQgcmVtYWluZGVyLgogIC8vIE91dHB1dDoKICAvLyAgIHJlc3VsdERpZ2l0c1swLi5yZXN1bHRVc2VkLTFdOiBwb3NpdGl2ZSByZW1haW5kZXIuCiAgLy8gUmV0dXJucyByZXN1bHRVc2VkLgogIHN0YXRpYyBpbnQgX3JlbURpZ2l0cygKICAgICAgVWludDMyTGlzdCB4RGlnaXRzLAogICAgICBpbnQgeFVzZWQsCiAgICAgIFVpbnQzMkxpc3QgeURpZ2l0cywKICAgICAgaW50IHlVc2VkLAogICAgICBVaW50MzJMaXN0IG55RGlnaXRzLAogICAgICBpbnQgbnNoLAogICAgICBVaW50MzJMaXN0IGFyZ3MsCiAgICAgIFVpbnQzMkxpc3QgdG1wRGlnaXRzLAogICAgICBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgLy8gSW5pdGlhbGl6ZSByZXN1bHREaWdpdHMgdG8gbm9ybWFsaXplZCBwb3NpdGl2ZSBkaXZpZGVuZC4KICAgIHZhciByZXN1bHRVc2VkID0gX2xTaGlmdERpZ2l0cyh4RGlnaXRzLCB4VXNlZCwgbnNoLCByZXN1bHREaWdpdHMpOwogICAgLy8gRm9yIDY0LWJpdCBwcm9jZXNzaW5nLCBtYWtlIHN1cmUgeVVzZWQsIGksIGFuZCBqIGFyZSBldmVuLgogICAgYXNzZXJ0KHlVc2VkLmlzRXZlbik7CiAgICB2YXIgaSA9IHJlc3VsdFVzZWQgKyAocmVzdWx0VXNlZCAmIDEpOwogICAgdmFyIGogPSBpIC0geVVzZWQ7CiAgICB2YXIgdG1wVXNlZCA9IF9kbFNoaWZ0RGlnaXRzKHlEaWdpdHMsIHlVc2VkLCBqLCB0bXBEaWdpdHMpOwogICAgLy8gRXhwbGljaXQgZmlyc3QgZGl2aXNpb24gc3RlcCBpbiBjYXNlIG5vcm1hbGl6ZWQgZGl2aWRlbmQgaXMgbGFyZ2VyIG9yCiAgICAvLyBlcXVhbCB0byBzaGlmdGVkIG5vcm1hbGl6ZWQgZGl2aXNvci4KICAgIGlmIChfY29tcGFyZURpZ2l0cyhyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIHRtcERpZ2l0cywgdG1wVXNlZCkgPj0gMCkgewogICAgICBhc3NlcnQoaSA9PSByZXN1bHRVc2VkKTsKICAgICAgcmVzdWx0RGlnaXRzW3Jlc3VsdFVzZWQrK10gPSAxOyAvLyBRdW90aWVudCA9IDEuCiAgICAgIC8vIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIuCiAgICAgIF9hYnNTdWIocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCB0bXBEaWdpdHMsIHRtcFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICB9IGVsc2UgewogICAgICAvLyBBY2NvdW50IGZvciBwb3NzaWJsZSBjYXJyeSBpbiBfbXVsQWRkIHN0ZXAuCiAgICAgIHJlc3VsdERpZ2l0c1tyZXN1bHRVc2VkKytdID0gMDsKICAgIH0KICAgIGlmIChyZXN1bHRVc2VkLmlzT2RkKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tyZXN1bHRVc2VkXSA9IDA7IC8vIExlYWRpbmcgemVybyBmb3IgNjQtYml0IHByb2Nlc3NpbmcuCiAgICB9CiAgICAvLyBOZWdhdGVkIHlEaWdpdHMgcGFzc2VkIGluIG55RGlnaXRzIGFsbG93IHRoZSB1c2Ugb2YgX211bEFkZCBpbnN0ZWFkIG9mCiAgICAvLyB1bmltcGxlbWVudGVkIF9tdWxTdWIuCiAgICAvLyBueURpZ2l0cyBpcyByZWFkLW9ubHkgYW5kIGhhcyB5VXNlZCBkaWdpdHMgKHBvc3NpYmx5IGluY2x1ZGluZyBzZXZlcmFsCiAgICAvLyBsZWFkaW5nIHplcm9zKSBwbHVzIGEgbGVhZGluZyB6ZXJvIGZvciA2NC1iaXQgcHJvY2Vzc2luZy4KICAgIC8vIHJlc3VsdERpZ2l0cyBpcyBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLgogICAgLy8gcmVzdWx0RGlnaXRzWzAuLnlVc2VkLTFdIGlzIHRoZSBjdXJyZW50IHJlbWFpbmRlci4KICAgIC8vIHJlc3VsdERpZ2l0c1t5VXNlZC4ucmVzdWx0VXNlZC0xXSBpcyB0aGUgY3VycmVudCBxdW90aWVudC4KICAgIC0taTsKICAgIHdoaWxlIChqID4gMCkgewogICAgICB2YXIgZDAgPSBfZXN0aW1hdGVRdW90aWVudERpZ2l0KGFyZ3MsIHJlc3VsdERpZ2l0cywgaSk7CiAgICAgIGogLT0gZDA7CiAgICAgIHZhciBkMSA9CiAgICAgICAgICBfbXVsQWRkKGFyZ3MsIF9xdW90aWVudERpZ2l0LCBueURpZ2l0cywgMCwgcmVzdWx0RGlnaXRzLCBqLCB5VXNlZCk7CiAgICAgIC8vIF9lc3RpbWF0ZVF1b3RpZW50RGlnaXQgYW5kIF9tdWxBZGQgbXVzdCBhZ3JlZSBvbiB0aGUgbnVtYmVyIG9mIGRpZ2l0cwogICAgICAvLyB0byBwcm9jZXNzLgogICAgICBhc3NlcnQoZDAgPT0gZDEpOwogICAgICBpZiAoZDAgPT0gMSkgewogICAgICAgIGlmIChyZXN1bHREaWdpdHNbaV0gPCBhcmdzW19xdW90aWVudERpZ2l0XSkgewogICAgICAgICAgdmFyIHRtcFVzZWQgPSBfZGxTaGlmdERpZ2l0cyhueURpZ2l0cywgeVVzZWQsIGosIHRtcERpZ2l0cyk7CiAgICAgICAgICBfYWJzU3ViKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCwgdG1wRGlnaXRzLCB0bXBVc2VkLCByZXN1bHREaWdpdHMpOwogICAgICAgICAgd2hpbGUgKHJlc3VsdERpZ2l0c1tpXSA8IC0tYXJnc1tfcXVvdGllbnREaWdpdF0pIHsKICAgICAgICAgICAgX2Fic1N1YihyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIHRtcERpZ2l0cywgdG1wVXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KGQwID09IDIpOwogICAgICAgIGFzc2VydChyZXN1bHREaWdpdHNbaV0gPD0gYXJnc1tfcXVvdGllbnRIaWdoRGlnaXRdKTsKICAgICAgICBpZiAoKHJlc3VsdERpZ2l0c1tpXSA8IGFyZ3NbX3F1b3RpZW50SGlnaERpZ2l0XSkgfHwKICAgICAgICAgICAgKHJlc3VsdERpZ2l0c1tpIC0gMV0gPCBhcmdzW19xdW90aWVudERpZ2l0XSkpIHsKICAgICAgICAgIHZhciB0bXBVc2VkID0gX2RsU2hpZnREaWdpdHMobnlEaWdpdHMsIHlVc2VkLCBqLCB0bXBEaWdpdHMpOwogICAgICAgICAgX2Fic1N1YihyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIHRtcERpZ2l0cywgdG1wVXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgICAgICAgIGlmIChhcmdzW19xdW90aWVudERpZ2l0XSA9PSAwKSB7CiAgICAgICAgICAgIC0tYXJnc1tfcXVvdGllbnRIaWdoRGlnaXRdOwogICAgICAgICAgfQogICAgICAgICAgLS1hcmdzW19xdW90aWVudERpZ2l0XTsKICAgICAgICAgIGFzc2VydChyZXN1bHREaWdpdHNbaV0gPD0gYXJnc1tfcXVvdGllbnRIaWdoRGlnaXRdKTsKICAgICAgICAgIHdoaWxlICgocmVzdWx0RGlnaXRzW2ldIDwgYXJnc1tfcXVvdGllbnRIaWdoRGlnaXRdKSB8fAogICAgICAgICAgICAgIChyZXN1bHREaWdpdHNbaSAtIDFdIDwgYXJnc1tfcXVvdGllbnREaWdpdF0pKSB7CiAgICAgICAgICAgIF9hYnNTdWIocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCB0bXBEaWdpdHMsIHRtcFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICAgICAgICAgIGlmIChhcmdzW19xdW90aWVudERpZ2l0XSA9PSAwKSB7CiAgICAgICAgICAgICAgLS1hcmdzW19xdW90aWVudEhpZ2hEaWdpdF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLS1hcmdzW19xdW90aWVudERpZ2l0XTsKICAgICAgICAgICAgYXNzZXJ0KHJlc3VsdERpZ2l0c1tpXSA8PSBhcmdzW19xdW90aWVudEhpZ2hEaWdpdF0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpIC09IGQwOwogICAgfQogICAgLy8gUmV0dXJuIHJlbWFpbmRlciwgaS5lLiBkZW5vcm1hbGl6ZWQgcmVzdWx0RGlnaXRzWzAuLnlVc2VkLTFdLgogICAgcmVzdWx0VXNlZCA9IHlVc2VkOwogICAgaWYgKG5zaCA+IDApIHsKICAgICAgLy8gRGVub3JtYWxpemUgcmVtYWluZGVyLgogICAgICByZXN1bHRVc2VkID0gX3JTaGlmdERpZ2l0cyhyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIG5zaCwgcmVzdWx0RGlnaXRzKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRVc2VkOwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICAvLyBUaGlzIGlzIHRoZSBbSmVua2lucyBoYXNoIGZ1bmN0aW9uXVsxXSBidXQgdXNpbmcgbWFza2luZyB0byBrZWVwCiAgICAvLyB2YWx1ZXMgaW4gU01JIHJhbmdlLgogICAgLy8KICAgIC8vIFsxXTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9KZW5raW5zX2hhc2hfZnVuY3Rpb24KCiAgICBpbnQgY29tYmluZShpbnQgaGFzaCwgaW50IHZhbHVlKSB7CiAgICAgIGhhc2ggPSAweDFmZmZmZmZmICYgKGhhc2ggKyB2YWx1ZSk7CiAgICAgIGhhc2ggPSAweDFmZmZmZmZmICYgKGhhc2ggKyAoKDB4MDAwN2ZmZmYgJiBoYXNoKSA8PCAxMCkpOwogICAgICByZXR1cm4gaGFzaCBeIChoYXNoID4+IDYpOwogICAgfQoKICAgIGludCBmaW5pc2goaW50IGhhc2gpIHsKICAgICAgaGFzaCA9IDB4MWZmZmZmZmYgJiAoaGFzaCArICgoMHgwM2ZmZmZmZiAmIGhhc2gpIDw8IDMpKTsKICAgICAgaGFzaCA9IGhhc2ggXiAoaGFzaCA+PiAxMSk7CiAgICAgIHJldHVybiAweDFmZmZmZmZmICYgKGhhc2ggKyAoKDB4MDAwMDNmZmYgJiBoYXNoKSA8PCAxNSkpOwogICAgfQoKICAgIGlmIChfaXNaZXJvKSByZXR1cm4gNjcwNzsgLy8gSnVzdCBhIHJhbmRvbSBudW1iZXIuCiAgICB2YXIgaGFzaCA9IF9pc05lZ2F0aXZlID8gODM1ODUgOiA0Mjk2ODk7IC8vIEFsc28gcmFuZG9tLgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfdXNlZDsgaSsrKSB7CiAgICAgIGhhc2ggPSBjb21iaW5lKGhhc2gsIF9kaWdpdHNbaV0pOwogICAgfQogICAgcmV0dXJuIGZpbmlzaChoYXNoKTsKICB9CgogIC8qKgogICAqIFRlc3Qgd2hldGhlciB0aGlzIHZhbHVlIGlzIG51bWVyaWNhbGx5IGVxdWFsIHRvIGBvdGhlcmAuCiAgICoKICAgKiBJZiBbb3RoZXJdIGlzIGEgW19CaWdJbnRJbXBsXSByZXR1cm5zIHdoZXRoZXIgdGhlIHR3byBvcGVyYW5kcyBoYXZlIHRoZQogICAqIHNhbWUgdmFsdWUuCiAgICoKICAgKiBSZXR1cm5zIGZhbHNlIGlmIGBvdGhlcmAgaXMgbm90IGEgW19CaWdJbnRJbXBsXS4KICAgKi8KICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgPT4KICAgICAgb3RoZXIgaXMgX0JpZ0ludEltcGwgJiYgY29tcGFyZVRvKG90aGVyKSA9PSAwOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG51bWJlciBvZiBiaXRzIHJlcXVpcmVkIHRvIHN0b3JlIHRoaXMgYmlnIGludGVnZXIuCiAgICoKICAgKiBUaGUgbnVtYmVyIG9mIGJpdHMgZXhjbHVkZXMgdGhlIHNpZ24gYml0LCB3aGljaCBnaXZlcyB0aGUgbmF0dXJhbCBsZW5ndGgKICAgKiBmb3Igbm9uLW5lZ2F0aXZlICh1bnNpZ25lZCkgdmFsdWVzLiAgTmVnYXRpdmUgdmFsdWVzIGFyZSBjb21wbGVtZW50ZWQgdG8KICAgKiByZXR1cm4gdGhlIGJpdCBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgYml0IHRoYXQgZGlmZmVycyBmcm9tIHRoZSBzaWduIGJpdC4KICAgKgogICAqIFRvIGZpbmQgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCB0byBzdG9yZSB0aGUgdmFsdWUgYXMgYSBzaWduZWQgdmFsdWUsCiAgICogYWRkIG9uZSwgaS5lLiB1c2UgYHguYml0TGVuZ3RoICsgMWAuCiAgICoKICAgKiBgYGAKICAgKiB4LmJpdExlbmd0aCA9PSAoLXgtMSkuYml0TGVuZ3RoCiAgICoKICAgKiBuZXcgQmlnSW50LmZyb20oMykuYml0TGVuZ3RoID09IDI7ICAgLy8gMDAwMDAwMTEKICAgKiBuZXcgQmlnSW50LmZyb20oMikuYml0TGVuZ3RoID09IDI7ICAgLy8gMDAwMDAwMTAKICAgKiBuZXcgQmlnSW50LmZyb20oMSkuYml0TGVuZ3RoID09IDE7ICAgLy8gMDAwMDAwMDEKICAgKiBuZXcgQmlnSW50LmZyb20oMCkuYml0TGVuZ3RoID09IDA7ICAgLy8gMDAwMDAwMDAKICAgKiBuZXcgQmlnSW50LmZyb20oLTEpLmJpdExlbmd0aCA9PSAwOyAgLy8gMTExMTExMTEKICAgKiBuZXcgQmlnSW50LmZyb20oLTIpLmJpdExlbmd0aCA9PSAxOyAgLy8gMTExMTExMTAKICAgKiBuZXcgQmlnSW50LmZyb20oLTMpLmJpdExlbmd0aCA9PSAyOyAgLy8gMTExMTExMDEKICAgKiBuZXcgQmlnSW50LmZyb20oLTQpLmJpdExlbmd0aCA9PSAyOyAgLy8gMTExMTExMDAKICAgKiBgYGAKICAgKi8KICBpbnQgZ2V0IGJpdExlbmd0aCB7CiAgICBpZiAoX3VzZWQgPT0gMCkgcmV0dXJuIDA7CiAgICBpZiAoX2lzTmVnYXRpdmUpIHJldHVybiAofnRoaXMpLmJpdExlbmd0aDsKICAgIHJldHVybiBfZGlnaXRCaXRzICogKF91c2VkIC0gMSkgKyBfZGlnaXRzW191c2VkIC0gMV0uYml0TGVuZ3RoOwogIH0KCiAgLyoqCiAgICogVHJ1bmNhdGluZyBkaXZpc2lvbiBvcGVyYXRvci4KICAgKgogICAqIFBlcmZvcm1zIGEgdHJ1bmNhdGluZyBpbnRlZ2VyIGRpdmlzaW9uLCB3aGVyZSB0aGUgcmVtYWluZGVyIGlzIGRpc2NhcmRlZC4KICAgKgogICAqIFRoZSByZW1haW5kZXIgY2FuIGJlIGNvbXB1dGVkIHVzaW5nIHRoZSBbcmVtYWluZGVyXSBtZXRob2QuCiAgICoKICAgKiBFeGFtcGxlczoKICAgKiBgYGAKICAgKiB2YXIgc2V2ZW4gPSBuZXcgQmlnSW50LmZyb20oNyk7CiAgICogdmFyIHRocmVlID0gbmV3IEJpZ0ludC5mcm9tKDMpOwogICAqIHNldmVuIH4vIHRocmVlOyAgICAvLyA9PiAyCiAgICogKC1zZXZlbikgfi8gdGhyZWU7IC8vID0+IC0yCiAgICogc2V2ZW4gfi8gLXRocmVlOyAgIC8vID0+IC0yCiAgICogc2V2ZW4ucmVtYWluZGVyKHRocmVlKTsgICAgLy8gPT4gMQogICAqICgtc2V2ZW4pLnJlbWFpbmRlcih0aHJlZSk7IC8vID0+IC0xCiAgICogc2V2ZW4ucmVtYWluZGVyKC10aHJlZSk7ICAgLy8gPT4gMQogICAqIGBgYAogICAqLwogIF9CaWdJbnRJbXBsIG9wZXJhdG9yIH4vKEJpZ0ludCBiaWdJbnQpIHsKICAgIF9CaWdJbnRJbXBsIG90aGVyID0gYmlnSW50OwogICAgaWYgKG90aGVyLl91c2VkID09IDApIHsKICAgICAgdGhyb3cgY29uc3QgSW50ZWdlckRpdmlzaW9uQnlaZXJvRXhjZXB0aW9uKCk7CiAgICB9CiAgICByZXR1cm4gX2RpdihvdGhlcik7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSByZW1haW5kZXIgb2YgdGhlIHRydW5jYXRpbmcgZGl2aXNpb24gb2YgYHRoaXNgIGJ5IFtvdGhlcl0uCiAgICoKICAgKiBUaGUgcmVzdWx0IGByYCBvZiB0aGlzIG9wZXJhdGlvbiBzYXRpc2ZpZXM6CiAgICogYHRoaXMgPT0gKHRoaXMgfi8gb3RoZXIpICogb3RoZXIgKyByYC4KICAgKiBBcyBhIGNvbnNlcXVlbmNlIHRoZSByZW1haW5kZXIgYHJgIGhhcyB0aGUgc2FtZSBzaWduIGFzIHRoZSBkaXZpZGVyIGB0aGlzYC4KICAgKi8KICBfQmlnSW50SW1wbCByZW1haW5kZXIoQmlnSW50IGJpZ0ludCkgewogICAgX0JpZ0ludEltcGwgb3RoZXIgPSBiaWdJbnQ7CiAgICBpZiAob3RoZXIuX3VzZWQgPT0gMCkgewogICAgICB0aHJvdyBjb25zdCBJbnRlZ2VyRGl2aXNpb25CeVplcm9FeGNlcHRpb24oKTsKICAgIH0KICAgIHJldHVybiBfcmVtKG90aGVyKTsKICB9CgogIC8vLyBEaXZpc2lvbiBvcGVyYXRvci4KICBkb3VibGUgb3BlcmF0b3IgLyhCaWdJbnQgb3RoZXIpID0+IHRoaXMudG9Eb3VibGUoKSAvIG90aGVyLnRvRG91YmxlKCk7CgogIC8qKiBSZWxhdGlvbmFsIGxlc3MgdGhhbiBvcGVyYXRvci4gKi8KICBib29sIG9wZXJhdG9yIDwoQmlnSW50IG90aGVyKSA9PiBjb21wYXJlVG8ob3RoZXIpIDwgMDsKCiAgLyoqIFJlbGF0aW9uYWwgbGVzcyB0aGFuIG9yIGVxdWFsIG9wZXJhdG9yLiAqLwogIGJvb2wgb3BlcmF0b3IgPD0oQmlnSW50IG90aGVyKSA9PiBjb21wYXJlVG8ob3RoZXIpIDw9IDA7CgogIC8qKiBSZWxhdGlvbmFsIGdyZWF0ZXIgdGhhbiBvcGVyYXRvci4gKi8KICBib29sIG9wZXJhdG9yID4oQmlnSW50IG90aGVyKSA9PiBjb21wYXJlVG8ob3RoZXIpID4gMDsKCiAgLyoqIFJlbGF0aW9uYWwgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIG9wZXJhdG9yLiAqLwogIGJvb2wgb3BlcmF0b3IgPj0oQmlnSW50IG90aGVyKSA9PiBjb21wYXJlVG8ob3RoZXIpID49IDA7CgogIC8qKgogICAqIEV1Y2xpZGVhbiBtb2R1bG8gb3BlcmF0b3IuCiAgICoKICAgKiBSZXR1cm5zIHRoZSByZW1haW5kZXIgb2YgdGhlIEV1Y2xpZGVhbiBkaXZpc2lvbi4gVGhlIEV1Y2xpZGVhbiBkaXZpc2lvbiBvZgogICAqIHR3byBpbnRlZ2VycyBgYWAgYW5kIGBiYCB5aWVsZHMgdHdvIGludGVnZXJzIGBxYCBhbmQgYHJgIHN1Y2ggdGhhdAogICAqIGBhID09IGIgKiBxICsgcmAgYW5kIGAwIDw9IHIgPCBiLmFicygpYC4KICAgKgogICAqIFRoZSBzaWduIG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBgcmAgaXMgYWx3YXlzIHBvc2l0aXZlLgogICAqCiAgICogU2VlIFtyZW1haW5kZXJdIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSB0cnVuY2F0aW5nIGRpdmlzaW9uLgogICAqLwogIF9CaWdJbnRJbXBsIG9wZXJhdG9yICUoQmlnSW50IGJpZ0ludCkgewogICAgX0JpZ0ludEltcGwgb3RoZXIgPSBiaWdJbnQ7CiAgICBpZiAob3RoZXIuX3VzZWQgPT0gMCkgewogICAgICB0aHJvdyBjb25zdCBJbnRlZ2VyRGl2aXNpb25CeVplcm9FeGNlcHRpb24oKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfcmVtKG90aGVyKTsKICAgIGlmIChyZXN1bHQuX2lzTmVnYXRpdmUpIHsKICAgICAgaWYgKG90aGVyLl9pc05lZ2F0aXZlKSB7CiAgICAgICAgcmVzdWx0ID0gcmVzdWx0IC0gb3RoZXI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgb3RoZXI7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzaWduIG9mIHRoaXMgYmlnIGludGVnZXIuCiAgICoKICAgKiBSZXR1cm5zIDAgZm9yIHplcm8sIC0xIGZvciB2YWx1ZXMgbGVzcyB0aGFuIHplcm8gYW5kCiAgICogKzEgZm9yIHZhbHVlcyBncmVhdGVyIHRoYW4gemVyby4KICAgKi8KICBpbnQgZ2V0IHNpZ24gewogICAgaWYgKF91c2VkID09IDApIHJldHVybiAwOwogICAgcmV0dXJuIF9pc05lZ2F0aXZlID8gLTEgOiAxOwogIH0KCiAgLy8vIFdoZXRoZXIgdGhpcyBiaWcgaW50ZWdlciBpcyBldmVuLgogIGJvb2wgZ2V0IGlzRXZlbiA9PiBfdXNlZCA9PSAwIHx8IChfZGlnaXRzWzBdICYgMSkgPT0gMDsKCiAgLy8vIFdoZXRoZXIgdGhpcyBiaWcgaW50ZWdlciBpcyBvZGQuCiAgYm9vbCBnZXQgaXNPZGQgPT4gIWlzRXZlbjsKCiAgLy8vIFdoZXRoZXIgdGhpcyBudW1iZXIgaXMgbmVnYXRpdmUuCiAgYm9vbCBnZXQgaXNOZWdhdGl2ZSA9PiBfaXNOZWdhdGl2ZTsKCiAgX0JpZ0ludEltcGwgcG93KGludCBleHBvbmVudCkgewogICAgaWYgKGV4cG9uZW50IDwgMCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiRXhwb25lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmU6ICRleHBvbmVudCIpOwogICAgfQogICAgaWYgKGV4cG9uZW50ID09IDApIHJldHVybiBvbmU7CgogICAgLy8gRXhwb25lbnRpYXRpb24gYnkgc3F1YXJpbmcuCiAgICB2YXIgcmVzdWx0ID0gb25lOwogICAgdmFyIGJhc2UgPSB0aGlzOwogICAgd2hpbGUgKGV4cG9uZW50ICE9IDApIHsKICAgICAgaWYgKChleHBvbmVudCAmIDEpID09IDEpIHsKICAgICAgICByZXN1bHQgKj0gYmFzZTsKICAgICAgfQogICAgICBleHBvbmVudCA+Pj0gMTsKICAgICAgLy8gU2tpcCB1bm5lY2Vzc2FyeSBvcGVyYXRpb24uCiAgICAgIGlmIChleHBvbmVudCAhPSAwKSB7CiAgICAgICAgYmFzZSAqPSBiYXNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGlzIGludGVnZXIgdG8gdGhlIHBvd2VyIG9mIFtleHBvbmVudF0gbW9kdWxvIFttb2R1bHVzXS4KICAgKgogICAqIFRoZSBbZXhwb25lbnRdIG11c3QgYmUgbm9uLW5lZ2F0aXZlIGFuZCBbbW9kdWx1c10gbXVzdCBiZQogICAqIHBvc2l0aXZlLgogICAqLwogIF9CaWdJbnRJbXBsIG1vZFBvdyhCaWdJbnQgYmlnRXhwb25lbnQsIEJpZ0ludCBiaWdNb2R1bHVzKSB7CiAgICBfQmlnSW50SW1wbCBleHBvbmVudCA9IGJpZ0V4cG9uZW50OwogICAgX0JpZ0ludEltcGwgbW9kdWx1cyA9IGJpZ01vZHVsdXM7CiAgICBpZiAoZXhwb25lbnQuX2lzTmVnYXRpdmUpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoImV4cG9uZW50IG11c3QgYmUgcG9zaXRpdmU6ICRleHBvbmVudCIpOwogICAgfQogICAgaWYgKG1vZHVsdXMgPD0gemVybykgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigibW9kdWx1cyBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlOiAkbW9kdWx1cyIpOwogICAgfQogICAgaWYgKGV4cG9uZW50Ll9pc1plcm8pIHJldHVybiBvbmU7CgogICAgZmluYWwgZXhwb25lbnRCaXRsZW4gPSBleHBvbmVudC5iaXRMZW5ndGg7CiAgICBpZiAoZXhwb25lbnRCaXRsZW4gPD0gMCkgcmV0dXJuIG9uZTsKICAgIGZpbmFsIGJvb2wgY2Fubm90VXNlTW9udGdvbWVyeSA9IG1vZHVsdXMuaXNFdmVuIHx8IGFicygpID49IG1vZHVsdXM7CiAgICBpZiAoY2Fubm90VXNlTW9udGdvbWVyeSB8fCBleHBvbmVudEJpdGxlbiA8IDY0KSB7CiAgICAgIF9CaWdJbnRSZWR1Y3Rpb24geiA9IChjYW5ub3RVc2VNb250Z29tZXJ5IHx8IGV4cG9uZW50Qml0bGVuIDwgOCkKICAgICAgICAgID8gbmV3IF9CaWdJbnRDbGFzc2ljUmVkdWN0aW9uKG1vZHVsdXMpCiAgICAgICAgICA6IG5ldyBfQmlnSW50TW9udGdvbWVyeVJlZHVjdGlvbihtb2R1bHVzKTsKICAgICAgdmFyIHJlc3VsdERpZ2l0cyA9IF9uZXdEaWdpdHMoMiAqIHouX25vcm1Nb2R1bHVzVXNlZCArIDIpOwogICAgICB2YXIgcmVzdWx0MkRpZ2l0cyA9IF9uZXdEaWdpdHMoMiAqIHouX25vcm1Nb2R1bHVzVXNlZCArIDIpOwogICAgICB2YXIgZ0RpZ2l0cyA9IF9uZXdEaWdpdHMoei5fbm9ybU1vZHVsdXNVc2VkKTsKICAgICAgdmFyIGdVc2VkID0gei5fY29udmVydCh0aGlzLCBnRGlnaXRzKTsKICAgICAgLy8gSW5pdGlhbGl6ZSByZXN1bHQgd2l0aCBnLgogICAgICAvLyBDb3B5IGxlYWRpbmcgemVybyBpZiBhbnkuCiAgICAgIGZvciAoaW50IGogPSBnVXNlZCArIChnVXNlZCAmIDEpIC0gMTsgaiA+PSAwOyBqLS0pIHsKICAgICAgICByZXN1bHREaWdpdHNbal0gPSBnRGlnaXRzW2pdOwogICAgICB9CiAgICAgIHZhciByZXN1bHRVc2VkID0gZ1VzZWQ7CiAgICAgIHZhciByZXN1bHQyVXNlZDsKICAgICAgZm9yIChpbnQgaSA9IGV4cG9uZW50Qml0bGVuIC0gMjsgaSA+PSAwOyBpLS0pIHsKICAgICAgICByZXN1bHQyVXNlZCA9IHouX3NxcihyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIHJlc3VsdDJEaWdpdHMpOwogICAgICAgIGlmIChleHBvbmVudC5fZGlnaXRzW2kgfi8gX2RpZ2l0Qml0c10gJiAoMSA8PCAoaSAlIF9kaWdpdEJpdHMpKSAhPSAwKSB7CiAgICAgICAgICByZXN1bHRVc2VkID0KICAgICAgICAgICAgICB6Ll9tdWwocmVzdWx0MkRpZ2l0cywgcmVzdWx0MlVzZWQsIGdEaWdpdHMsIGdVc2VkLCByZXN1bHREaWdpdHMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBTd2FwIHJlc3VsdCBhbmQgcmVzdWx0Mi4KICAgICAgICAgIHZhciB0bXBEaWdpdHMgPSByZXN1bHREaWdpdHM7CiAgICAgICAgICB2YXIgdG1wVXNlZCA9IHJlc3VsdFVzZWQ7CiAgICAgICAgICByZXN1bHREaWdpdHMgPSByZXN1bHQyRGlnaXRzOwogICAgICAgICAgcmVzdWx0VXNlZCA9IHJlc3VsdDJVc2VkOwogICAgICAgICAgcmVzdWx0MkRpZ2l0cyA9IHRtcERpZ2l0czsKICAgICAgICAgIHJlc3VsdDJVc2VkID0gdG1wVXNlZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHouX3JldmVydChyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQpOwogICAgfQogICAgdmFyIGs7CiAgICBpZiAoZXhwb25lbnRCaXRsZW4gPCAxOCkKICAgICAgayA9IDE7CiAgICBlbHNlIGlmIChleHBvbmVudEJpdGxlbiA8IDQ4KQogICAgICBrID0gMzsKICAgIGVsc2UgaWYgKGV4cG9uZW50Qml0bGVuIDwgMTQ0KQogICAgICBrID0gNDsKICAgIGVsc2UgaWYgKGV4cG9uZW50Qml0bGVuIDwgNzY4KQogICAgICBrID0gNTsKICAgIGVsc2UKICAgICAgayA9IDY7CiAgICBfQmlnSW50UmVkdWN0aW9uIHogPSBuZXcgX0JpZ0ludE1vbnRnb21lcnlSZWR1Y3Rpb24obW9kdWx1cyk7CiAgICB2YXIgbiA9IDM7CiAgICBmaW5hbCBrMSA9IGsgLSAxOwogICAgZmluYWwga20gPSAoMSA8PCBrKSAtIDE7CiAgICBMaXN0IGdEaWdpdHMgPSBuZXcgTGlzdChrbSArIDEpOwogICAgTGlzdCBnVXNlZCA9IG5ldyBMaXN0KGttICsgMSk7CiAgICBnRGlnaXRzWzFdID0gX25ld0RpZ2l0cyh6Ll9ub3JtTW9kdWx1c1VzZWQpOwogICAgZ1VzZWRbMV0gPSB6Ll9jb252ZXJ0KHRoaXMsIGdEaWdpdHNbMV0pOwogICAgaWYgKGsgPiAxKSB7CiAgICAgIHZhciBnMkRpZ2l0cyA9IF9uZXdEaWdpdHMoMiAqIHouX25vcm1Nb2R1bHVzVXNlZCArIDIpOwogICAgICB2YXIgZzJVc2VkID0gei5fc3FyKGdEaWdpdHNbMV0sIGdVc2VkWzFdLCBnMkRpZ2l0cyk7CiAgICAgIHdoaWxlIChuIDw9IGttKSB7CiAgICAgICAgZ0RpZ2l0c1tuXSA9IF9uZXdEaWdpdHMoMiAqIHouX25vcm1Nb2R1bHVzVXNlZCArIDIpOwogICAgICAgIGdVc2VkW25dID0KICAgICAgICAgICAgei5fbXVsKGcyRGlnaXRzLCBnMlVzZWQsIGdEaWdpdHNbbiAtIDJdLCBnVXNlZFtuIC0gMl0sIGdEaWdpdHNbbl0pOwogICAgICAgIG4gKz0gMjsKICAgICAgfQogICAgfQogICAgdmFyIHc7CiAgICB2YXIgaXNPbmUgPSB0cnVlOwogICAgdmFyIHJlc3VsdERpZ2l0cyA9IG9uZS5fZGlnaXRzOwogICAgdmFyIHJlc3VsdFVzZWQgPSBvbmUuX3VzZWQ7CiAgICB2YXIgcmVzdWx0MkRpZ2l0cyA9IF9uZXdEaWdpdHMoMiAqIHouX25vcm1Nb2R1bHVzVXNlZCArIDIpOwogICAgdmFyIHJlc3VsdDJVc2VkOwogICAgdmFyIGV4cG9uZW50RGlnaXRzID0gZXhwb25lbnQuX2RpZ2l0czsKICAgIHZhciBqID0gZXhwb25lbnQuX3VzZWQgLSAxOwogICAgdmFyIGkgPSBleHBvbmVudERpZ2l0c1tqXS5iaXRMZW5ndGggLSAxOwogICAgd2hpbGUgKGogPj0gMCkgewogICAgICBpZiAoaSA+PSBrMSkgewogICAgICAgIHcgPSAoZXhwb25lbnREaWdpdHNbal0gPj4gKGkgLSBrMSkpICYga207CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdyA9IChleHBvbmVudERpZ2l0c1tqXSAmICgoMSA8PCAoaSArIDEpKSAtIDEpKSA8PCAoazEgLSBpKTsKICAgICAgICBpZiAoaiA+IDApIHsKICAgICAgICAgIHcgfD0gZXhwb25lbnREaWdpdHNbaiAtIDFdID4+IChfZGlnaXRCaXRzICsgaSAtIGsxKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgbiA9IGs7CiAgICAgIHdoaWxlICgodyAmIDEpID09IDApIHsKICAgICAgICB3ID4+PSAxOwogICAgICAgIC0tbjsKICAgICAgfQogICAgICBpZiAoKGkgLT0gbikgPCAwKSB7CiAgICAgICAgaSArPSBfZGlnaXRCaXRzOwogICAgICAgIC0tajsKICAgICAgfQogICAgICBpZiAoaXNPbmUpIHsKICAgICAgICAvLyByID09IDEsIGRvbid0IGJvdGhlciBzcXVhcmluZyBvciBtdWx0aXBseWluZyBpdC4KICAgICAgICByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKDIgKiB6Ll9ub3JtTW9kdWx1c1VzZWQgKyAyKTsKICAgICAgICByZXN1bHRVc2VkID0gZ1VzZWRbd107CiAgICAgICAgdmFyIGd3RGlnaXRzID0gZ0RpZ2l0c1t3XTsKICAgICAgICB2YXIgcmkgPSByZXN1bHRVc2VkICsgKHJlc3VsdFVzZWQgJiAxKTsgLy8gQ29weSBsZWFkaW5nIHplcm8gaWYgYW55LgogICAgICAgIHdoaWxlICgtLXJpID49IDApIHsKICAgICAgICAgIHJlc3VsdERpZ2l0c1tyaV0gPSBnd0RpZ2l0c1tyaV07CiAgICAgICAgfQogICAgICAgIGlzT25lID0gZmFsc2U7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgd2hpbGUgKG4gPiAxKSB7CiAgICAgICAgICByZXN1bHQyVXNlZCA9IHouX3NxcihyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIHJlc3VsdDJEaWdpdHMpOwogICAgICAgICAgcmVzdWx0VXNlZCA9IHouX3NxcihyZXN1bHQyRGlnaXRzLCByZXN1bHQyVXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgICAgICAgIG4gLT0gMjsKICAgICAgICB9CiAgICAgICAgaWYgKG4gPiAwKSB7CiAgICAgICAgICByZXN1bHQyVXNlZCA9IHouX3NxcihyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIHJlc3VsdDJEaWdpdHMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgc3dhcERpZ2l0cyA9IHJlc3VsdERpZ2l0czsKICAgICAgICAgIHZhciBzd2FwVXNlZCA9IHJlc3VsdFVzZWQ7CiAgICAgICAgICByZXN1bHREaWdpdHMgPSByZXN1bHQyRGlnaXRzOwogICAgICAgICAgcmVzdWx0VXNlZCA9IHJlc3VsdDJVc2VkOwogICAgICAgICAgcmVzdWx0MkRpZ2l0cyA9IHN3YXBEaWdpdHM7CiAgICAgICAgICByZXN1bHQyVXNlZCA9IHN3YXBVc2VkOwogICAgICAgIH0KICAgICAgICByZXN1bHRVc2VkID0gei5fbXVsKAogICAgICAgICAgICByZXN1bHQyRGlnaXRzLCByZXN1bHQyVXNlZCwgZ0RpZ2l0c1t3XSwgZ1VzZWRbd10sIHJlc3VsdERpZ2l0cyk7CiAgICAgIH0KICAgICAgd2hpbGUgKGogPj0gMCAmJiAoZXhwb25lbnREaWdpdHNbal0gJiAoMSA8PCBpKSkgPT0gMCkgewogICAgICAgIHJlc3VsdDJVc2VkID0gei5fc3FyKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCwgcmVzdWx0MkRpZ2l0cyk7CiAgICAgICAgdmFyIHN3YXBEaWdpdHMgPSByZXN1bHREaWdpdHM7CiAgICAgICAgdmFyIHN3YXBVc2VkID0gcmVzdWx0VXNlZDsKICAgICAgICByZXN1bHREaWdpdHMgPSByZXN1bHQyRGlnaXRzOwogICAgICAgIHJlc3VsdFVzZWQgPSByZXN1bHQyVXNlZDsKICAgICAgICByZXN1bHQyRGlnaXRzID0gc3dhcERpZ2l0czsKICAgICAgICByZXN1bHQyVXNlZCA9IHN3YXBVc2VkOwogICAgICAgIGlmICgtLWkgPCAwKSB7CiAgICAgICAgICBpID0gX2RpZ2l0Qml0cyAtIDE7CiAgICAgICAgICAtLWo7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBhc3NlcnQoIWlzT25lKTsKICAgIHJldHVybiB6Ll9yZXZlcnQocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkKTsKICB9CgogIC8vIElmIGludiBpcyBmYWxzZSwgcmV0dXJucyBnY2QoeCwgeSkuCiAgLy8gSWYgaW52IGlzIHRydWUgYW5kIGdjZCh4LCB5KSA9IDEsIHJldHVybnMgZCwgc28gdGhhdCBjKnggKyBkKnkgPSAxLgogIC8vIElmIGludiBpcyB0cnVlIGFuZCBnY2QoeCwgeSkgIT0gMSwgdGhyb3dzIEV4Y2VwdGlvbigiTm90IGNvcHJpbWUiKS4KICBzdGF0aWMgX0JpZ0ludEltcGwgX2JpbmFyeUdjZChfQmlnSW50SW1wbCB4LCBfQmlnSW50SW1wbCB5LCBib29sIGludikgewogICAgdmFyIHhEaWdpdHMgPSB4Ll9kaWdpdHM7CiAgICB2YXIgeURpZ2l0cyA9IHkuX2RpZ2l0czsKICAgIHZhciB4VXNlZCA9IHguX3VzZWQ7CiAgICB2YXIgeVVzZWQgPSB5Ll91c2VkOwogICAgdmFyIG1heFVzZWQgPSBfbWF4KHhVc2VkLCB5VXNlZCk7CiAgICBmaW5hbCBtYXhMZW4gPSBtYXhVc2VkICsgKG1heFVzZWQgJiAxKTsKICAgIHhEaWdpdHMgPSBfY2xvbmVEaWdpdHMoeERpZ2l0cywgMCwgeFVzZWQsIG1heExlbik7CiAgICB5RGlnaXRzID0gX2Nsb25lRGlnaXRzKHlEaWdpdHMsIDAsIHlVc2VkLCBtYXhMZW4pOwogICAgaW50IHNoaWZ0QW1vdW50ID0gMDsKICAgIGlmIChpbnYpIHsKICAgICAgaWYgKCh5VXNlZCA9PSAxKSAmJiAoeURpZ2l0c1swXSA9PSAxKSkgcmV0dXJuIG9uZTsKICAgICAgaWYgKCh5VXNlZCA9PSAwKSB8fCAoeURpZ2l0c1swXS5pc0V2ZW4gJiYgeERpZ2l0c1swXS5pc0V2ZW4pKSB7CiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiTm90IGNvcHJpbWUiKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKHguX2lzWmVybykgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKDAsICJ0aGlzIiwgIm11c3Qgbm90IGJlIHplcm8iKTsKICAgICAgfQogICAgICBpZiAoeS5faXNaZXJvKSB7CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUoMCwgIm90aGVyIiwgIm11c3Qgbm90IGJlIHplcm8iKTsKICAgICAgfQogICAgICBpZiAoKCh4VXNlZCA9PSAxKSAmJiAoeERpZ2l0c1swXSA9PSAxKSkgfHwKICAgICAgICAgICgoeVVzZWQgPT0gMSkgJiYgKHlEaWdpdHNbMF0gPT0gMSkpKSByZXR1cm4gb25lOwogICAgICB3aGlsZSAoKCh4RGlnaXRzWzBdICYgMSkgPT0gMCkgJiYgKCh5RGlnaXRzWzBdICYgMSkgPT0gMCkpIHsKICAgICAgICBfcnNoKHhEaWdpdHMsIHhVc2VkLCAxLCB4RGlnaXRzKTsKICAgICAgICBfcnNoKHlEaWdpdHMsIHlVc2VkLCAxLCB5RGlnaXRzKTsKICAgICAgICBzaGlmdEFtb3VudCsrOwogICAgICB9CiAgICAgIGlmIChzaGlmdEFtb3VudCA+PSBfZGlnaXRCaXRzKSB7CiAgICAgICAgdmFyIGRpZ2l0U2hpZnRBbW91bnQgPSBzaGlmdEFtb3VudCB+LyBfZGlnaXRCaXRzOwogICAgICAgIHhVc2VkIC09IGRpZ2l0U2hpZnRBbW91bnQ7CiAgICAgICAgeVVzZWQgLT0gZGlnaXRTaGlmdEFtb3VudDsKICAgICAgICBtYXhVc2VkIC09IGRpZ2l0U2hpZnRBbW91bnQ7CiAgICAgIH0KICAgICAgaWYgKCh5RGlnaXRzWzBdICYgMSkgPT0gMSkgewogICAgICAgIC8vIFN3YXAgeCBhbmQgeS4KICAgICAgICB2YXIgdG1wRGlnaXRzID0geERpZ2l0czsKICAgICAgICB2YXIgdG1wVXNlZCA9IHhVc2VkOwogICAgICAgIHhEaWdpdHMgPSB5RGlnaXRzOwogICAgICAgIHhVc2VkID0geVVzZWQ7CiAgICAgICAgeURpZ2l0cyA9IHRtcERpZ2l0czsKICAgICAgICB5VXNlZCA9IHRtcFVzZWQ7CiAgICAgIH0KICAgIH0KICAgIHZhciB1RGlnaXRzID0gX2Nsb25lRGlnaXRzKHhEaWdpdHMsIDAsIHhVc2VkLCBtYXhMZW4pOwogICAgdmFyIHZEaWdpdHMgPSBfY2xvbmVEaWdpdHMoeURpZ2l0cywgMCwgeVVzZWQsIG1heExlbiArIDIpOyAvLyArMiBmb3IgbHNoLgogICAgZmluYWwgYm9vbCBhYyA9ICh4RGlnaXRzWzBdICYgMSkgPT0gMDsKCiAgICAvLyBWYXJpYWJsZXMgYSwgYiwgYywgYW5kIGQgcmVxdWlyZSBvbmUgbW9yZSBkaWdpdC4KICAgIGZpbmFsIGFiY2RVc2VkID0gbWF4VXNlZCArIDE7CiAgICBmaW5hbCBhYmNkTGVuID0gYWJjZFVzZWQgKyAoYWJjZFVzZWQgJiAxKSArIDI7IC8vICsyIHRvIHNhdGlzZnkgX2Fic0FkZC4KICAgIHZhciBhRGlnaXRzLCBiRGlnaXRzLCBjRGlnaXRzLCBkRGlnaXRzOwogICAgYm9vbCBhSXNOZWdhdGl2ZSwgYklzTmVnYXRpdmUsIGNJc05lZ2F0aXZlLCBkSXNOZWdhdGl2ZTsKICAgIGlmIChhYykgewogICAgICBhRGlnaXRzID0gX25ld0RpZ2l0cyhhYmNkTGVuKTsKICAgICAgYUlzTmVnYXRpdmUgPSBmYWxzZTsKICAgICAgYURpZ2l0c1swXSA9IDE7CiAgICAgIGNEaWdpdHMgPSBfbmV3RGlnaXRzKGFiY2RMZW4pOwogICAgICBjSXNOZWdhdGl2ZSA9IGZhbHNlOwogICAgfQogICAgYkRpZ2l0cyA9IF9uZXdEaWdpdHMoYWJjZExlbik7CiAgICBiSXNOZWdhdGl2ZSA9IGZhbHNlOwogICAgZERpZ2l0cyA9IF9uZXdEaWdpdHMoYWJjZExlbik7CiAgICBkSXNOZWdhdGl2ZSA9IGZhbHNlOwogICAgZERpZ2l0c1swXSA9IDE7CgogICAgd2hpbGUgKHRydWUpIHsKICAgICAgd2hpbGUgKCh1RGlnaXRzWzBdICYgMSkgPT0gMCkgewogICAgICAgIF9yc2godURpZ2l0cywgbWF4VXNlZCwgMSwgdURpZ2l0cyk7CiAgICAgICAgaWYgKGFjKSB7CiAgICAgICAgICBpZiAoKChhRGlnaXRzWzBdICYgMSkgPT0gMSkgfHwgKChiRGlnaXRzWzBdICYgMSkgPT0gMSkpIHsKICAgICAgICAgICAgLy8gYSArPSB5CiAgICAgICAgICAgIGlmIChhSXNOZWdhdGl2ZSkgewogICAgICAgICAgICAgIGlmICgoYURpZ2l0c1ttYXhVc2VkXSAhPSAwKSB8fAogICAgICAgICAgICAgICAgICAoX2NvbXBhcmVEaWdpdHMoYURpZ2l0cywgbWF4VXNlZCwgeURpZ2l0cywgbWF4VXNlZCkpID4gMCkgewogICAgICAgICAgICAgICAgX2Fic1N1YihhRGlnaXRzLCBhYmNkVXNlZCwgeURpZ2l0cywgbWF4VXNlZCwgYURpZ2l0cyk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIF9hYnNTdWIoeURpZ2l0cywgbWF4VXNlZCwgYURpZ2l0cywgbWF4VXNlZCwgYURpZ2l0cyk7CiAgICAgICAgICAgICAgICBhSXNOZWdhdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBfYWJzQWRkKGFEaWdpdHMsIGFiY2RVc2VkLCB5RGlnaXRzLCBtYXhVc2VkLCBhRGlnaXRzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBiIC09IHgKICAgICAgICAgICAgaWYgKGJJc05lZ2F0aXZlKSB7CiAgICAgICAgICAgICAgX2Fic0FkZChiRGlnaXRzLCBhYmNkVXNlZCwgeERpZ2l0cywgbWF4VXNlZCwgYkRpZ2l0cyk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGJEaWdpdHNbbWF4VXNlZF0gIT0gMCkgfHwKICAgICAgICAgICAgICAgIChfY29tcGFyZURpZ2l0cyhiRGlnaXRzLCBtYXhVc2VkLCB4RGlnaXRzLCBtYXhVc2VkKSA+IDApKSB7CiAgICAgICAgICAgICAgX2Fic1N1YihiRGlnaXRzLCBhYmNkVXNlZCwgeERpZ2l0cywgbWF4VXNlZCwgYkRpZ2l0cyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX2Fic1N1Yih4RGlnaXRzLCBtYXhVc2VkLCBiRGlnaXRzLCBtYXhVc2VkLCBiRGlnaXRzKTsKICAgICAgICAgICAgICBiSXNOZWdhdGl2ZSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIF9yc2goYURpZ2l0cywgYWJjZFVzZWQsIDEsIGFEaWdpdHMpOwogICAgICAgIH0gZWxzZSBpZiAoKGJEaWdpdHNbMF0gJiAxKSA9PSAxKSB7CiAgICAgICAgICAvLyBiIC09IHgKICAgICAgICAgIGlmIChiSXNOZWdhdGl2ZSkgewogICAgICAgICAgICBfYWJzQWRkKGJEaWdpdHMsIGFiY2RVc2VkLCB4RGlnaXRzLCBtYXhVc2VkLCBiRGlnaXRzKTsKICAgICAgICAgIH0gZWxzZSBpZiAoKGJEaWdpdHNbbWF4VXNlZF0gIT0gMCkgfHwKICAgICAgICAgICAgICAoX2NvbXBhcmVEaWdpdHMoYkRpZ2l0cywgbWF4VXNlZCwgeERpZ2l0cywgbWF4VXNlZCkgPiAwKSkgewogICAgICAgICAgICBfYWJzU3ViKGJEaWdpdHMsIGFiY2RVc2VkLCB4RGlnaXRzLCBtYXhVc2VkLCBiRGlnaXRzKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9hYnNTdWIoeERpZ2l0cywgbWF4VXNlZCwgYkRpZ2l0cywgbWF4VXNlZCwgYkRpZ2l0cyk7CiAgICAgICAgICAgIGJJc05lZ2F0aXZlID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgX3JzaChiRGlnaXRzLCBhYmNkVXNlZCwgMSwgYkRpZ2l0cyk7CiAgICAgIH0KICAgICAgd2hpbGUgKCh2RGlnaXRzWzBdICYgMSkgPT0gMCkgewogICAgICAgIF9yc2godkRpZ2l0cywgbWF4VXNlZCwgMSwgdkRpZ2l0cyk7CiAgICAgICAgaWYgKGFjKSB7CiAgICAgICAgICBpZiAoKChjRGlnaXRzWzBdICYgMSkgPT0gMSkgfHwgKChkRGlnaXRzWzBdICYgMSkgPT0gMSkpIHsKICAgICAgICAgICAgLy8gYyArPSB5CiAgICAgICAgICAgIGlmIChjSXNOZWdhdGl2ZSkgewogICAgICAgICAgICAgIGlmICgoY0RpZ2l0c1ttYXhVc2VkXSAhPSAwKSB8fAogICAgICAgICAgICAgICAgICAoX2NvbXBhcmVEaWdpdHMoY0RpZ2l0cywgbWF4VXNlZCwgeURpZ2l0cywgbWF4VXNlZCkgPiAwKSkgewogICAgICAgICAgICAgICAgX2Fic1N1YihjRGlnaXRzLCBhYmNkVXNlZCwgeURpZ2l0cywgbWF4VXNlZCwgY0RpZ2l0cyk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIF9hYnNTdWIoeURpZ2l0cywgbWF4VXNlZCwgY0RpZ2l0cywgbWF4VXNlZCwgY0RpZ2l0cyk7CiAgICAgICAgICAgICAgICBjSXNOZWdhdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBfYWJzQWRkKGNEaWdpdHMsIGFiY2RVc2VkLCB5RGlnaXRzLCBtYXhVc2VkLCBjRGlnaXRzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBkIC09IHgKICAgICAgICAgICAgaWYgKGRJc05lZ2F0aXZlKSB7CiAgICAgICAgICAgICAgX2Fic0FkZChkRGlnaXRzLCBhYmNkVXNlZCwgeERpZ2l0cywgbWF4VXNlZCwgZERpZ2l0cyk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGREaWdpdHNbbWF4VXNlZF0gIT0gMCkgfHwKICAgICAgICAgICAgICAgIChfY29tcGFyZURpZ2l0cyhkRGlnaXRzLCBtYXhVc2VkLCB4RGlnaXRzLCBtYXhVc2VkKSA+IDApKSB7CiAgICAgICAgICAgICAgX2Fic1N1YihkRGlnaXRzLCBhYmNkVXNlZCwgeERpZ2l0cywgbWF4VXNlZCwgZERpZ2l0cyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX2Fic1N1Yih4RGlnaXRzLCBtYXhVc2VkLCBkRGlnaXRzLCBtYXhVc2VkLCBkRGlnaXRzKTsKICAgICAgICAgICAgICBkSXNOZWdhdGl2ZSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIF9yc2goY0RpZ2l0cywgYWJjZFVzZWQsIDEsIGNEaWdpdHMpOwogICAgICAgIH0gZWxzZSBpZiAoKGREaWdpdHNbMF0gJiAxKSA9PSAxKSB7CiAgICAgICAgICAvLyBkIC09IHgKICAgICAgICAgIGlmIChkSXNOZWdhdGl2ZSkgewogICAgICAgICAgICBfYWJzQWRkKGREaWdpdHMsIGFiY2RVc2VkLCB4RGlnaXRzLCBtYXhVc2VkLCBkRGlnaXRzKTsKICAgICAgICAgIH0gZWxzZSBpZiAoKGREaWdpdHNbbWF4VXNlZF0gIT0gMCkgfHwKICAgICAgICAgICAgICAoX2NvbXBhcmVEaWdpdHMoZERpZ2l0cywgbWF4VXNlZCwgeERpZ2l0cywgbWF4VXNlZCkgPiAwKSkgewogICAgICAgICAgICBfYWJzU3ViKGREaWdpdHMsIGFiY2RVc2VkLCB4RGlnaXRzLCBtYXhVc2VkLCBkRGlnaXRzKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9hYnNTdWIoeERpZ2l0cywgbWF4VXNlZCwgZERpZ2l0cywgbWF4VXNlZCwgZERpZ2l0cyk7CiAgICAgICAgICAgIGRJc05lZ2F0aXZlID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgX3JzaChkRGlnaXRzLCBhYmNkVXNlZCwgMSwgZERpZ2l0cyk7CiAgICAgIH0KICAgICAgaWYgKF9jb21wYXJlRGlnaXRzKHVEaWdpdHMsIG1heFVzZWQsIHZEaWdpdHMsIG1heFVzZWQpID49IDApIHsKICAgICAgICAvLyB1IC09IHYKICAgICAgICBfYWJzU3ViKHVEaWdpdHMsIG1heFVzZWQsIHZEaWdpdHMsIG1heFVzZWQsIHVEaWdpdHMpOwogICAgICAgIGlmIChhYykgewogICAgICAgICAgLy8gYSAtPSBjCiAgICAgICAgICBpZiAoYUlzTmVnYXRpdmUgPT0gY0lzTmVnYXRpdmUpIHsKICAgICAgICAgICAgdmFyIGFfY21wX2MgPSBfY29tcGFyZURpZ2l0cyhhRGlnaXRzLCBhYmNkVXNlZCwgY0RpZ2l0cywgYWJjZFVzZWQpOwogICAgICAgICAgICBpZiAoYV9jbXBfYyA+IDApIHsKICAgICAgICAgICAgICBfYWJzU3ViKGFEaWdpdHMsIGFiY2RVc2VkLCBjRGlnaXRzLCBhYmNkVXNlZCwgYURpZ2l0cyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX2Fic1N1YihjRGlnaXRzLCBhYmNkVXNlZCwgYURpZ2l0cywgYWJjZFVzZWQsIGFEaWdpdHMpOwogICAgICAgICAgICAgIGFJc05lZ2F0aXZlID0gIWFJc05lZ2F0aXZlICYmIChhX2NtcF9jICE9IDApOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfYWJzQWRkKGFEaWdpdHMsIGFiY2RVc2VkLCBjRGlnaXRzLCBhYmNkVXNlZCwgYURpZ2l0cyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIGIgLT0gZAogICAgICAgIGlmIChiSXNOZWdhdGl2ZSA9PSBkSXNOZWdhdGl2ZSkgewogICAgICAgICAgdmFyIGJfY21wX2QgPSBfY29tcGFyZURpZ2l0cyhiRGlnaXRzLCBhYmNkVXNlZCwgZERpZ2l0cywgYWJjZFVzZWQpOwogICAgICAgICAgaWYgKGJfY21wX2QgPiAwKSB7CiAgICAgICAgICAgIF9hYnNTdWIoYkRpZ2l0cywgYWJjZFVzZWQsIGREaWdpdHMsIGFiY2RVc2VkLCBiRGlnaXRzKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9hYnNTdWIoZERpZ2l0cywgYWJjZFVzZWQsIGJEaWdpdHMsIGFiY2RVc2VkLCBiRGlnaXRzKTsKICAgICAgICAgICAgYklzTmVnYXRpdmUgPSAhYklzTmVnYXRpdmUgJiYgKGJfY21wX2QgIT0gMCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF9hYnNBZGQoYkRpZ2l0cywgYWJjZFVzZWQsIGREaWdpdHMsIGFiY2RVc2VkLCBiRGlnaXRzKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gdiAtPSB1CiAgICAgICAgX2Fic1N1Yih2RGlnaXRzLCBtYXhVc2VkLCB1RGlnaXRzLCBtYXhVc2VkLCB2RGlnaXRzKTsKICAgICAgICBpZiAoYWMpIHsKICAgICAgICAgIC8vIGMgLT0gYQogICAgICAgICAgaWYgKGNJc05lZ2F0aXZlID09IGFJc05lZ2F0aXZlKSB7CiAgICAgICAgICAgIHZhciBjX2NtcF9hID0gX2NvbXBhcmVEaWdpdHMoY0RpZ2l0cywgYWJjZFVzZWQsIGFEaWdpdHMsIGFiY2RVc2VkKTsKICAgICAgICAgICAgaWYgKGNfY21wX2EgPiAwKSB7CiAgICAgICAgICAgICAgX2Fic1N1YihjRGlnaXRzLCBhYmNkVXNlZCwgYURpZ2l0cywgYWJjZFVzZWQsIGNEaWdpdHMpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF9hYnNTdWIoYURpZ2l0cywgYWJjZFVzZWQsIGNEaWdpdHMsIGFiY2RVc2VkLCBjRGlnaXRzKTsKICAgICAgICAgICAgICBjSXNOZWdhdGl2ZSA9ICFjSXNOZWdhdGl2ZSAmJiAoY19jbXBfYSAhPSAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX2Fic0FkZChjRGlnaXRzLCBhYmNkVXNlZCwgYURpZ2l0cywgYWJjZFVzZWQsIGNEaWdpdHMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBkIC09IGIKICAgICAgICBpZiAoZElzTmVnYXRpdmUgPT0gYklzTmVnYXRpdmUpIHsKICAgICAgICAgIHZhciBkX2NtcF9iID0gX2NvbXBhcmVEaWdpdHMoZERpZ2l0cywgYWJjZFVzZWQsIGJEaWdpdHMsIGFiY2RVc2VkKTsKICAgICAgICAgIGlmIChkX2NtcF9iID4gMCkgewogICAgICAgICAgICBfYWJzU3ViKGREaWdpdHMsIGFiY2RVc2VkLCBiRGlnaXRzLCBhYmNkVXNlZCwgZERpZ2l0cyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfYWJzU3ViKGJEaWdpdHMsIGFiY2RVc2VkLCBkRGlnaXRzLCBhYmNkVXNlZCwgZERpZ2l0cyk7CiAgICAgICAgICAgIGRJc05lZ2F0aXZlID0gIWRJc05lZ2F0aXZlICYmIChkX2NtcF9iICE9IDApOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfYWJzQWRkKGREaWdpdHMsIGFiY2RVc2VkLCBiRGlnaXRzLCBhYmNkVXNlZCwgZERpZ2l0cyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIEV4aXQgbG9vcCBpZiB1ID09IDAuCiAgICAgIHZhciBpID0gbWF4VXNlZDsKICAgICAgd2hpbGUgKChpID4gMCkgJiYgKHVEaWdpdHNbaSAtIDFdID09IDApKSAtLWk7CiAgICAgIGlmIChpID09IDApIGJyZWFrOwogICAgfQogICAgaWYgKCFpbnYpIHsKICAgICAgaWYgKHNoaWZ0QW1vdW50ID4gMCkgewogICAgICAgIG1heFVzZWQgPSBfbFNoaWZ0RGlnaXRzKHZEaWdpdHMsIG1heFVzZWQsIHNoaWZ0QW1vdW50LCB2RGlnaXRzKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oZmFsc2UsIG1heFVzZWQsIHZEaWdpdHMpOwogICAgfQogICAgLy8gTm8gaW52ZXJzZSBpZiB2ICE9IDEuCiAgICB2YXIgaSA9IG1heFVzZWQgLSAxOwogICAgd2hpbGUgKChpID4gMCkgJiYgKHZEaWdpdHNbaV0gPT0gMCkpIC0taTsKICAgIGlmICgoaSAhPSAwKSB8fCAodkRpZ2l0c1swXSAhPSAxKSkgewogICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJOb3QgY29wcmltZSIpOwogICAgfQoKICAgIGlmIChkSXNOZWdhdGl2ZSkgewogICAgICB3aGlsZSAoKGREaWdpdHNbbWF4VXNlZF0gIT0gMCkgfHwKICAgICAgICAgIChfY29tcGFyZURpZ2l0cyhkRGlnaXRzLCBtYXhVc2VkLCB4RGlnaXRzLCBtYXhVc2VkKSA+IDApKSB7CiAgICAgICAgLy8gZCArPSB4LCBkIHN0aWxsIG5lZ2F0aXZlCiAgICAgICAgX2Fic1N1YihkRGlnaXRzLCBhYmNkVXNlZCwgeERpZ2l0cywgbWF4VXNlZCwgZERpZ2l0cyk7CiAgICAgIH0KICAgICAgLy8gZCArPSB4CiAgICAgIF9hYnNTdWIoeERpZ2l0cywgbWF4VXNlZCwgZERpZ2l0cywgbWF4VXNlZCwgZERpZ2l0cyk7CiAgICAgIGRJc05lZ2F0aXZlID0gZmFsc2U7CiAgICB9IGVsc2UgewogICAgICB3aGlsZSAoKGREaWdpdHNbbWF4VXNlZF0gIT0gMCkgfHwKICAgICAgICAgIChfY29tcGFyZURpZ2l0cyhkRGlnaXRzLCBtYXhVc2VkLCB4RGlnaXRzLCBtYXhVc2VkKSA+PSAwKSkgewogICAgICAgIC8vIGQgLT0geAogICAgICAgIF9hYnNTdWIoZERpZ2l0cywgYWJjZFVzZWQsIHhEaWdpdHMsIG1heFVzZWQsIGREaWdpdHMpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oZmFsc2UsIG1heFVzZWQsIGREaWdpdHMpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbW9kdWxhciBtdWx0aXBsaWNhdGl2ZSBpbnZlcnNlIG9mIHRoaXMgYmlnIGludGVnZXIKICAgKiBtb2R1bG8gW21vZHVsdXNdLgogICAqCiAgICogVGhlIFttb2R1bHVzXSBtdXN0IGJlIHBvc2l0aXZlLgogICAqCiAgICogSXQgaXMgYW4gZXJyb3IgaWYgbm8gbW9kdWxhciBpbnZlcnNlIGV4aXN0cy4KICAgKi8KICAvLyBSZXR1cm5zIDEvdGhpcyAlIG1vZHVsdXMsIHdpdGggbW9kdWx1cyA+IDAuCiAgX0JpZ0ludEltcGwgbW9kSW52ZXJzZShCaWdJbnQgYmlnSW50KSB7CiAgICBfQmlnSW50SW1wbCBtb2R1bHVzID0gYmlnSW50OwogICAgaWYgKG1vZHVsdXMgPD0gemVybykgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiTW9kdWx1cyBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlOiAkbW9kdWx1cyIpOwogICAgfQogICAgaWYgKG1vZHVsdXMgPT0gb25lKSByZXR1cm4gemVybzsKICAgIHZhciB0bXAgPSB0aGlzOwogICAgaWYgKHRtcC5faXNOZWdhdGl2ZSB8fCAodG1wLl9hYnNDb21wYXJlKG1vZHVsdXMpID49IDApKSB7CiAgICAgIHRtcCAlPSBtb2R1bHVzOwogICAgfQogICAgcmV0dXJuIF9iaW5hcnlHY2QobW9kdWx1cywgdG1wLCB0cnVlKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIG9mIHRoaXMgYmlnIGludGVnZXIgYW5kIFtvdGhlcl0uCiAgICoKICAgKiBJZiBlaXRoZXIgbnVtYmVyIGlzIG5vbi16ZXJvLCB0aGUgcmVzdWx0IGlzIHRoZSBudW1lcmljYWxseSBncmVhdGVzdAogICAqIGludGVnZXIgZGl2aWRpbmcgYm90aCBgdGhpc2AgYW5kIGBvdGhlcmAuCiAgICoKICAgKiBUaGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3IgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIG9yZGVyLAogICAqIHNvIGB4LmdjZCh5KWAgaXMgIGFsd2F5cyB0aGUgc2FtZSBhcyBgeS5nY2QoeClgLgogICAqCiAgICogRm9yIGFueSBpbnRlZ2VyIGB4YCwgYHguZ2NkKHgpYCBpcyBgeC5hYnMoKWAuCiAgICoKICAgKiBJZiBib3RoIGB0aGlzYCBhbmQgYG90aGVyYCBpcyB6ZXJvLCB0aGUgcmVzdWx0IGlzIGFsc28gemVyby4KICAgKi8KICBfQmlnSW50SW1wbCBnY2QoQmlnSW50IGJpZ0ludCkgewogICAgX0JpZ0ludEltcGwgb3RoZXIgPSBiaWdJbnQ7CiAgICBpZiAoX2lzWmVybykgcmV0dXJuIG90aGVyLmFicygpOwogICAgaWYgKG90aGVyLl9pc1plcm8pIHJldHVybiB0aGlzLmFicygpOwogICAgcmV0dXJuIF9iaW5hcnlHY2QodGhpcywgb3RoZXIsIGZhbHNlKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIGxlYXN0IHNpZ25pZmljYW50IFt3aWR0aF0gYml0cyBvZiB0aGlzIGJpZyBpbnRlZ2VyIGFzIGEKICAgKiBub24tbmVnYXRpdmUgbnVtYmVyIChpLmUuIHVuc2lnbmVkIHJlcHJlc2VudGF0aW9uKS4gIFRoZSByZXR1cm5lZCB2YWx1ZSBoYXMKICAgKiB6ZXJvcyBpbiBhbGwgYml0IHBvc2l0aW9ucyBoaWdoZXIgdGhhbiBbd2lkdGhdLgogICAqCiAgICogYGBgCiAgICogbmV3IEJpZ0ludC5mcm9tKC0xKS50b1Vuc2lnbmVkKDUpID09IDMxICAgLy8gMTExMTExMTEgIC0+ICAwMDAxMTExMQogICAqIGBgYAogICAqCiAgICogVGhpcyBvcGVyYXRpb24gY2FuIGJlIHVzZWQgdG8gc2ltdWxhdGUgYXJpdGhtZXRpYyBmcm9tIGxvdyBsZXZlbCBsYW5ndWFnZXMuCiAgICogRm9yIGV4YW1wbGUsIHRvIGluY3JlbWVudCBhbiA4IGJpdCBxdWFudGl0eToKICAgKgogICAqIGBgYAogICAqIHEgPSAocSArIDEpLnRvVW5zaWduZWQoOCk7CiAgICogYGBgCiAgICoKICAgKiBgcWAgd2lsbCBjb3VudCBmcm9tIGAwYCB1cCB0byBgMjU1YCBhbmQgdGhlbiB3cmFwIGFyb3VuZCB0byBgMGAuCiAgICoKICAgKiBJZiB0aGUgaW5wdXQgZml0cyBpbiBbd2lkdGhdIGJpdHMgd2l0aG91dCB0cnVuY2F0aW9uLCB0aGUgcmVzdWx0IGlzIHRoZQogICAqIHNhbWUgYXMgdGhlIGlucHV0LiAgVGhlIG1pbmltdW0gd2lkdGggbmVlZGVkIHRvIGF2b2lkIHRydW5jYXRpb24gb2YgYHhgIGlzCiAgICogZ2l2ZW4gYnkgYHguYml0TGVuZ3RoYCwgaS5lLgogICAqCiAgICogYGBgCiAgICogeCA9PSB4LnRvVW5zaWduZWQoeC5iaXRMZW5ndGgpOwogICAqIGBgYAogICAqLwogIF9CaWdJbnRJbXBsIHRvVW5zaWduZWQoaW50IHdpZHRoKSB7CiAgICByZXR1cm4gdGhpcyAmICgob25lIDw8IHdpZHRoKSAtIG9uZSk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsZWFzdCBzaWduaWZpY2FudCBbd2lkdGhdIGJpdHMgb2YgdGhpcyBpbnRlZ2VyLCBleHRlbmRpbmcgdGhlCiAgICogaGlnaGVzdCByZXRhaW5lZCBiaXQgdG8gdGhlIHNpZ24uICBUaGlzIGlzIHRoZSBzYW1lIGFzIHRydW5jYXRpbmcgdGhlIHZhbHVlCiAgICogdG8gZml0IGluIFt3aWR0aF0gYml0cyB1c2luZyBhbiBzaWduZWQgMi1zIGNvbXBsZW1lbnQgcmVwcmVzZW50YXRpb24uICBUaGUKICAgKiByZXR1cm5lZCB2YWx1ZSBoYXMgdGhlIHNhbWUgYml0IHZhbHVlIGluIGFsbCBwb3NpdGlvbnMgaGlnaGVyIHRoYW4gW3dpZHRoXS4KICAgKgogICAqIGBgYAogICAqIHZhciBiaWcxNSA9IG5ldyBCaWdJbnQuZnJvbSgxNSk7CiAgICogdmFyIGJpZzE2ID0gbmV3IEJpZ0ludC5mcm9tKDE2KTsKICAgKiB2YXIgYmlnMjM5ID0gbmV3IEJpZ0ludC5mcm9tKDIzOSk7CiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYtLXNpZ24gYml0LVYKICAgKiBiaWcxNi50b1NpZ25lZCg1KSA9PSAtYmlnMTYgICAvLyAgMDAwMTAwMDAgLT4gMTExMTAwMDAKICAgKiBiaWcyMzkudG9TaWduZWQoNSkgPT0gYmlnMTUgICAvLyAgMTExMDExMTEgLT4gMDAwMDExMTEKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgXgogICAqIGBgYAogICAqCiAgICogVGhpcyBvcGVyYXRpb24gY2FuIGJlIHVzZWQgdG8gc2ltdWxhdGUgYXJpdGhtZXRpYyBmcm9tIGxvdyBsZXZlbCBsYW5ndWFnZXMuCiAgICogRm9yIGV4YW1wbGUsIHRvIGluY3JlbWVudCBhbiA4IGJpdCBzaWduZWQgcXVhbnRpdHk6CiAgICoKICAgKiBgYGAKICAgKiBxID0gKHEgKyAxKS50b1NpZ25lZCg4KTsKICAgKiBgYGAKICAgKgogICAqIGBxYCB3aWxsIGNvdW50IGZyb20gYDBgIHVwIHRvIGAxMjdgLCB3cmFwIHRvIGAtMTI4YCBhbmQgY291bnQgYmFjayB1cCB0bwogICAqIGAxMjdgLgogICAqCiAgICogSWYgdGhlIGlucHV0IHZhbHVlIGZpdHMgaW4gW3dpZHRoXSBiaXRzIHdpdGhvdXQgdHJ1bmNhdGlvbiwgdGhlIHJlc3VsdCBpcwogICAqIHRoZSBzYW1lIGFzIHRoZSBpbnB1dC4gIFRoZSBtaW5pbXVtIHdpZHRoIG5lZWRlZCB0byBhdm9pZCB0cnVuY2F0aW9uIG9mIGB4YAogICAqIGlzIGB4LmJpdExlbmd0aCArIDFgLCBpLmUuCiAgICoKICAgKiBgYGAKICAgKiB4ID09IHgudG9TaWduZWQoeC5iaXRMZW5ndGggKyAxKTsKICAgKiBgYGAKICAgKi8KICBfQmlnSW50SW1wbCB0b1NpZ25lZChpbnQgd2lkdGgpIHsKICAgIC8vIFRoZSB2YWx1ZSBvZiBiaW5hcnkgbnVtYmVyIHdlaWdodHMgZWFjaCBiaXQgYnkgYSBwb3dlciBvZiB0d28uICBUaGUKICAgIC8vIHR3b3MtY29tcGxlbWVudCB2YWx1ZSB3ZWlnaHRzIHRoZSBzaWduIGJpdCBuZWdhdGl2ZWx5LiAgV2UgY29tcHV0ZSB0aGUKICAgIC8vIHZhbHVlIG9mIHRoZSBuZWdhdGl2ZSB3ZWlnaHRpbmcgYnkgaXNvbGF0aW5nIHRoZSBzaWduIGJpdCB3aXRoIHRoZQogICAgLy8gY29ycmVjdCBwb3dlciBvZiB0d28gd2VpZ2h0aW5nIGFuZCBzdWJ0cmFjdGluZyBpdCBmcm9tIHRoZSB2YWx1ZSBvZiB0aGUKICAgIC8vIGxvd2VyIGJpdHMuCiAgICB2YXIgc2lnbk1hc2sgPSBvbmUgPDwgKHdpZHRoIC0gMSk7CiAgICByZXR1cm4gKHRoaXMgJiAoc2lnbk1hc2sgLSBvbmUpKSAtICh0aGlzICYgc2lnbk1hc2spOwogIH0KCiAgYm9vbCBnZXQgaXNWYWxpZEludCB7CiAgICBhc3NlcnQoX2RpZ2l0Qml0cyA9PSAzMik7CiAgICByZXR1cm4gX3VzZWQgPCAyIHx8CiAgICAgICAgKF91c2VkID09IDIgJiYKICAgICAgICAgICAgKF9kaWdpdHNbMV0gPCAweDgwMDAwMDAwIHx8CiAgICAgICAgICAgICAgICAoX2lzTmVnYXRpdmUgJiYgX2RpZ2l0c1sxXSA9PSAweDgwMDAwMDAwICYmIF9kaWdpdHNbMF0gPT0gMCkpKTsKICB9CgogIGludCB0b0ludCgpIHsKICAgIGFzc2VydChfZGlnaXRCaXRzID09IDMyKTsKICAgIGlmIChfdXNlZCA9PSAwKSByZXR1cm4gMDsKICAgIGlmIChfdXNlZCA9PSAxKSByZXR1cm4gX2lzTmVnYXRpdmUgPyAtX2RpZ2l0c1swXSA6IF9kaWdpdHNbMF07CiAgICBpZiAoX3VzZWQgPT0gMiAmJiBfZGlnaXRzWzFdIDwgMHg4MDAwMDAwMCkgewogICAgICB2YXIgcmVzdWx0ID0gKF9kaWdpdHNbMV0gPDwgX2RpZ2l0Qml0cykgfCBfZGlnaXRzWzBdOwogICAgICByZXR1cm4gX2lzTmVnYXRpdmUgPyAtcmVzdWx0IDogcmVzdWx0OwogICAgfQogICAgcmV0dXJuIF9pc05lZ2F0aXZlID8gX21pbkludCA6IF9tYXhJbnQ7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoaXMgW19CaWdJbnRJbXBsXSBhcyBhIFtkb3VibGVdLgogICAqCiAgICogSWYgdGhlIG51bWJlciBpcyBub3QgcmVwcmVzZW50YWJsZSBhcyBhIFtkb3VibGVdLCBhbgogICAqIGFwcHJveGltYXRpb24gaXMgcmV0dXJuZWQuIEZvciBudW1lcmljYWxseSBsYXJnZSBpbnRlZ2VycywgdGhlCiAgICogYXBwcm94aW1hdGlvbiBtYXkgYmUgaW5maW5pdGUuCiAgICovCiAgZG91YmxlIHRvRG91YmxlKCkgewogICAgY29uc3QgaW50IGV4cG9uZW50QmlhcyA9IDEwNzU7CiAgICAvLyBUaGVyZSBhcmUgMTEgYml0cyBmb3IgdGhlIGV4cG9uZW50LgogICAgLy8gMjA0NyAoYWxsIGJpdHMgc2V0IHRvIDEpIGlzIHJlc2VydmVkIGZvciBpbmZpbml0eSBhbmQgTmFOLgogICAgLy8gV2hlbiBzdG9yaW5nIHRoZSBleHBvbmVudCBpbiB0aGUgMTEgYml0cywgaXQgaXMgYmlhc2VkIGJ5IGV4cG9uZW50QmlhcwogICAgLy8gdG8gc3VwcG9ydCBuZWdhdGl2ZSBleHBvbmVudHMuCiAgICBjb25zdCBpbnQgbWF4RG91YmxlRXhwb25lbnQgPSAyMDQ2IC0gZXhwb25lbnRCaWFzOwogICAgaWYgKF9pc1plcm8pIHJldHVybiAwLjA7CgogICAgLy8gV2UgZmlsbCB0aGUgNTMgYml0cyBsaXR0bGUtZW5kaWFuLgogICAgdmFyIHJlc3VsdEJpdHMgPSBuZXcgVWludDhMaXN0KDgpOwoKICAgIHZhciBsZW5ndGggPSBfZGlnaXRCaXRzICogKF91c2VkIC0gMSkgKyBfZGlnaXRzW191c2VkIC0gMV0uYml0TGVuZ3RoOwogICAgaWYgKGxlbmd0aCA+IG1heERvdWJsZUV4cG9uZW50ICsgNTMpIHsKICAgICAgcmV0dXJuIF9pc05lZ2F0aXZlID8gZG91YmxlLm5lZ2F0aXZlSW5maW5pdHkgOiBkb3VibGUuaW5maW5pdHk7CiAgICB9CgogICAgLy8gVGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGlzIGZvciB0aGUgc2lnbi4KICAgIGlmIChfaXNOZWdhdGl2ZSkgcmVzdWx0Qml0c1s3XSA9IDB4ODA7CgogICAgLy8gV3JpdGUgdGhlIGV4cG9uZW50IGludG8gYml0cyAxLi4xMjoKICAgIHZhciBiaWFzZWRFeHBvbmVudCA9IGxlbmd0aCAtIDUzICsgZXhwb25lbnRCaWFzOwogICAgcmVzdWx0Qml0c1s2XSA9IChiaWFzZWRFeHBvbmVudCAmIDB4RikgPDwgNDsKICAgIHJlc3VsdEJpdHNbN10gfD0gYmlhc2VkRXhwb25lbnQgPj4gNDsKCiAgICBpbnQgY2FjaGVkQml0cyA9IDA7CiAgICBpbnQgY2FjaGVkQml0c0xlbmd0aCA9IDA7CiAgICBpbnQgZGlnaXRJbmRleCA9IF91c2VkIC0gMTsKICAgIGludCByZWFkQml0cyhpbnQgbikgewogICAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIGVub3VnaCBiaXRzIGluIFtjYWNoZWRCaXRzXS4KICAgICAgd2hpbGUgKGNhY2hlZEJpdHNMZW5ndGggPCBuKSB7CiAgICAgICAgaW50IG5leHREaWdpdDsKICAgICAgICBpbnQgbmV4dERpZ2l0TGVuZ3RoID0gX2RpZ2l0Qml0czsgLy8gTWF5IGdldCB1cGRhdGVkLgogICAgICAgIGlmIChkaWdpdEluZGV4IDwgMCkgewogICAgICAgICAgbmV4dERpZ2l0ID0gMDsKICAgICAgICAgIGRpZ2l0SW5kZXgtLTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbmV4dERpZ2l0ID0gX2RpZ2l0c1tkaWdpdEluZGV4XTsKICAgICAgICAgIGlmIChkaWdpdEluZGV4ID09IF91c2VkIC0gMSkgbmV4dERpZ2l0TGVuZ3RoID0gbmV4dERpZ2l0LmJpdExlbmd0aDsKICAgICAgICAgIGRpZ2l0SW5kZXgtLTsKICAgICAgICB9CiAgICAgICAgY2FjaGVkQml0cyA9IChjYWNoZWRCaXRzIDw8IG5leHREaWdpdExlbmd0aCkgKyBuZXh0RGlnaXQ7CiAgICAgICAgY2FjaGVkQml0c0xlbmd0aCArPSBuZXh0RGlnaXRMZW5ndGg7CiAgICAgIH0KICAgICAgLy8gUmVhZCB0aGUgdG9wIFtuXSBiaXRzLgogICAgICB2YXIgcmVzdWx0ID0gY2FjaGVkQml0cyA+PiAoY2FjaGVkQml0c0xlbmd0aCAtIG4pOwogICAgICAvLyBSZW1vdmUgdGhlIGJpdHMgZnJvbSB0aGUgY2FjaGUuCiAgICAgIGNhY2hlZEJpdHMgLT0gcmVzdWx0IDw8IChjYWNoZWRCaXRzTGVuZ3RoIC0gbik7CiAgICAgIGNhY2hlZEJpdHNMZW5ndGggLT0gbjsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICAvLyBUaGUgZmlyc3QgbGVhZGluZyAxIGJpdCBpcyBpbXBsaWNpdCBpbiB0aGUgZG91YmxlLXJlcHJlc2VudGF0aW9uIGFuZCBjYW4KICAgIC8vIGJlIGRpc2NhcmRlZC4KICAgIHZhciBsZWFkaW5nQml0cyA9IHJlYWRCaXRzKDUpICYgMHhGOwogICAgcmVzdWx0Qml0c1s2XSB8PSBsZWFkaW5nQml0czsKCiAgICBmb3IgKGludCBpID0gNTsgaSA+PSAwOyBpLS0pIHsKICAgICAgLy8gR2V0IHRoZSByZW1haW5pbmcgNDggYml0cy4KICAgICAgcmVzdWx0Qml0c1tpXSA9IHJlYWRCaXRzKDgpOwogICAgfQoKICAgIHZvaWQgcm91bmRVcCgpIHsKICAgICAgLy8gU2ltcGx5IGNvbnNpc3RzIG9mIGFkZGluZyAxIHRvIHRoZSB3aG9sZSA2NCBiaXQgIm51bWJlciIuCiAgICAgIC8vIEl0IHdpbGwgdXBkYXRlIHRoZSBleHBvbmVudCwgaWYgbmVjZXNzYXJ5LgogICAgICAvLyBJdCBtaWdodCBldmVuIHJvdW5kIHVwIHRvIGluZmluaXR5ICh3aGljaCBpcyB3aGF0IHdlIHdhbnQpLgogICAgICB2YXIgY2FycnkgPSAxOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewogICAgICAgIGlmIChjYXJyeSA9PSAwKSBicmVhazsKICAgICAgICB2YXIgc3VtID0gcmVzdWx0Qml0c1tpXSArIGNhcnJ5OwogICAgICAgIHJlc3VsdEJpdHNbaV0gPSBzdW0gJiAweEZGOwogICAgICAgIGNhcnJ5ID0gc3VtID4+IDg7CiAgICAgIH0KICAgIH0KCiAgICBpZiAocmVhZEJpdHMoMSkgPT0gMSkgewogICAgICBpZiAocmVzdWx0Qml0c1swXS5pc09kZCkgewogICAgICAgIC8vIFJvdW5kcyB0byBldmVuIGFsbCB0aGUgdGltZS4KICAgICAgICByb3VuZFVwKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gUm91bmQgdXAsIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBvdGhlciBkaWdpdCB0aGF0IGlzIG5vdCAwLgogICAgICAgIGlmIChjYWNoZWRCaXRzICE9IDApIHsKICAgICAgICAgIC8vIFRoZXJlIGlzIGFscmVhZHkgb25lIGluIHRoZSBjYWNoZWRCaXRzLgogICAgICAgICAgcm91bmRVcCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmb3IgKGludCBpID0gZGlnaXRJbmRleDsgZGlnaXRJbmRleCA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgaWYgKF9kaWdpdHNbaV0gIT0gMCkgewogICAgICAgICAgICAgIHJvdW5kVXAoKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdEJpdHMuYnVmZmVyLmFzQnl0ZURhdGEoKS5nZXRGbG9hdDY0KDAsIEVuZGlhbi5saXR0bGUpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIFN0cmluZy1yZXByZXNlbnRhdGlvbiBvZiB0aGlzIGludGVnZXIuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgc3RyaW5nIGlzIHBhcnNhYmxlIGJ5IFtwYXJzZV0uCiAgICogRm9yIGFueSBgX0JpZ0ludEltcGxgIGBpYCwgaXQgaXMgZ3VhcmFudGVlZCB0aGF0CiAgICogYGkgPT0gX0JpZ0ludEltcGwucGFyc2UoaS50b1N0cmluZygpKWAuCiAgICovCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgaWYgKF91c2VkID09IDApIHJldHVybiAiMCI7CiAgICBpZiAoX3VzZWQgPT0gMSkgewogICAgICBpZiAoX2lzTmVnYXRpdmUpIHJldHVybiAoLV9kaWdpdHNbMF0pLnRvU3RyaW5nKCk7CiAgICAgIHJldHVybiBfZGlnaXRzWzBdLnRvU3RyaW5nKCk7CiAgICB9CgogICAgLy8gR2VuZXJhdGUgaW4gY2h1bmtzIG9mIDkgZGlnaXRzLgogICAgLy8gVGhlIGNodW5rcyBhcmUgaW4gcmV2ZXJzZWQgb3JkZXIuCiAgICB2YXIgZGVjaW1hbERpZ2l0Q2h1bmtzID0gPFN0cmluZz5bXTsKICAgIHZhciByZXN0ID0gaXNOZWdhdGl2ZSA/IC10aGlzIDogdGhpczsKICAgIHdoaWxlIChyZXN0Ll91c2VkID4gMSkgewogICAgICB2YXIgZGlnaXRzOSA9IHJlc3QucmVtYWluZGVyKF9vbmVCaWxsaW9uKS50b1N0cmluZygpOwogICAgICBkZWNpbWFsRGlnaXRDaHVua3MuYWRkKGRpZ2l0czkpOwogICAgICB2YXIgemVyb3MgPSA5IC0gZGlnaXRzOS5sZW5ndGg7CiAgICAgIGlmICh6ZXJvcyA9PSA4KSB7CiAgICAgICAgZGVjaW1hbERpZ2l0Q2h1bmtzLmFkZCgiMDAwMDAwMDAiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoemVyb3MgPj0gNCkgewogICAgICAgICAgemVyb3MgLT0gNDsKICAgICAgICAgIGRlY2ltYWxEaWdpdENodW5rcy5hZGQoIjAwMDAiKTsKICAgICAgICB9CiAgICAgICAgaWYgKHplcm9zID49IDIpIHsKICAgICAgICAgIHplcm9zIC09IDI7CiAgICAgICAgICBkZWNpbWFsRGlnaXRDaHVua3MuYWRkKCIwMCIpOwogICAgICAgIH0KICAgICAgICBpZiAoemVyb3MgPj0gMSkgewogICAgICAgICAgZGVjaW1hbERpZ2l0Q2h1bmtzLmFkZCgiMCIpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXN0ID0gcmVzdCB+LyBfb25lQmlsbGlvbjsKICAgIH0KICAgIGRlY2ltYWxEaWdpdENodW5rcy5hZGQocmVzdC5fZGlnaXRzWzBdLnRvU3RyaW5nKCkpOwogICAgaWYgKF9pc05lZ2F0aXZlKSBkZWNpbWFsRGlnaXRDaHVua3MuYWRkKCItIik7CiAgICByZXR1cm4gZGVjaW1hbERpZ2l0Q2h1bmtzLnJldmVyc2VkLmpvaW4oKTsKICB9CgogIGludCBfdG9SYWRpeENvZGVVbml0KGludCBkaWdpdCkgewogICAgY29uc3QgaW50IF8wID0gNDg7CiAgICBjb25zdCBpbnQgX2EgPSA5NzsKICAgIGlmIChkaWdpdCA8IDEwKSByZXR1cm4gXzAgKyBkaWdpdDsKICAgIHJldHVybiBfYSArIGRpZ2l0IC0gMTA7CiAgfQoKICAvKioKICAgKiBDb252ZXJ0cyBbdGhpc10gdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW4gdGhlIGdpdmVuIFtyYWRpeF0uCiAgICoKICAgKiBJbiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLCBsb3dlci1jYXNlIGxldHRlcnMgYXJlIHVzZWQgZm9yIGRpZ2l0cyBhYm92ZQogICAqICc5Jywgd2l0aCAnYScgYmVpbmcgMTAgYW4gJ3onIGJlaW5nIDM1LgogICAqCiAgICogVGhlIFtyYWRpeF0gYXJndW1lbnQgbXVzdCBiZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSAyIHRvIDM2LgogICAqLwogIFN0cmluZyB0b1JhZGl4U3RyaW5nKGludCByYWRpeCkgewogICAgaWYgKHJhZGl4ID4gMzYpIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKHJhZGl4LCAyLCAzNik7CgogICAgaWYgKF91c2VkID09IDApIHJldHVybiAiMCI7CgogICAgaWYgKF91c2VkID09IDEpIHsKICAgICAgdmFyIGRpZ2l0U3RyaW5nID0gX2RpZ2l0c1swXS50b1JhZGl4U3RyaW5nKHJhZGl4KTsKICAgICAgaWYgKF9pc05lZ2F0aXZlKSByZXR1cm4gIi0iICsgZGlnaXRTdHJpbmc7CiAgICAgIHJldHVybiBkaWdpdFN0cmluZzsKICAgIH0KCiAgICBpZiAocmFkaXggPT0gMTYpIHJldHVybiBfdG9IZXhTdHJpbmcoKTsKCiAgICB2YXIgYmFzZSA9IG5ldyBfQmlnSW50SW1wbC5fZnJvbUludChyYWRpeCk7CiAgICB2YXIgcmV2ZXJzZWREaWdpdENvZGVVbml0cyA9IDxpbnQ+W107CiAgICB2YXIgcmVzdCA9IHRoaXMuYWJzKCk7CiAgICB3aGlsZSAoIXJlc3QuX2lzWmVybykgewogICAgICB2YXIgZGlnaXQgPSByZXN0LnJlbWFpbmRlcihiYXNlKS50b0ludCgpOwogICAgICByZXN0ID0gcmVzdCB+LyBiYXNlOwogICAgICByZXZlcnNlZERpZ2l0Q29kZVVuaXRzLmFkZChfdG9SYWRpeENvZGVVbml0KGRpZ2l0KSk7CiAgICB9CiAgICB2YXIgZGlnaXRTdHJpbmcgPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMocmV2ZXJzZWREaWdpdENvZGVVbml0cy5yZXZlcnNlZCk7CiAgICBpZiAoX2lzTmVnYXRpdmUpIHJldHVybiAiLSIgKyBkaWdpdFN0cmluZzsKICAgIHJldHVybiBkaWdpdFN0cmluZzsKICB9CgogIFN0cmluZyBfdG9IZXhTdHJpbmcoKSB7CiAgICB2YXIgY2hhcnMgPSA8aW50PltdOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfdXNlZCAtIDE7IGkrKykgewogICAgICBpbnQgY2h1bmsgPSBfZGlnaXRzW2ldOwogICAgICBmb3IgKGludCBqID0gMDsgaiA8IChfZGlnaXRCaXRzIH4vIDQpOyBqKyspIHsKICAgICAgICBjaGFycy5hZGQoX3RvUmFkaXhDb2RlVW5pdChjaHVuayAmIDB4RikpOwogICAgICAgIGNodW5rID4+PSA0OwogICAgICB9CiAgICB9CiAgICB2YXIgbXNiQ2h1bmsgPSBfZGlnaXRzW191c2VkIC0gMV07CiAgICB3aGlsZSAobXNiQ2h1bmsgIT0gMCkgewogICAgICBjaGFycy5hZGQoX3RvUmFkaXhDb2RlVW5pdChtc2JDaHVuayAmIDB4RikpOwogICAgICBtc2JDaHVuayA+Pj0gNDsKICAgIH0KICAgIGlmIChfaXNOZWdhdGl2ZSkgewogICAgICBjb25zdCBfZGFzaCA9IDQ1OwogICAgICBjaGFycy5hZGQoX2Rhc2gpOwogICAgfQogICAgcmV0dXJuIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhjaGFycy5yZXZlcnNlZCk7CiAgfQp9CgovLyBJbnRlcmZhY2UgZm9yIG1vZHVsYXIgcmVkdWN0aW9uLgphYnN0cmFjdCBjbGFzcyBfQmlnSW50UmVkdWN0aW9uIHsKICBpbnQgZ2V0IF9ub3JtTW9kdWx1c1VzZWQ7CiAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZGlnaXRzIHVzZWQgYnkgcmVzdWx0RGlnaXRzLgogIGludCBfY29udmVydChfQmlnSW50SW1wbCB4LCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cyk7CiAgaW50IF9tdWwoVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQsIFVpbnQzMkxpc3QgeURpZ2l0cywgaW50IHlVc2VkLAogICAgICBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cyk7CiAgaW50IF9zcXIoVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQsIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKTsKCiAgLy8gUmV0dXJuIHggcmV2ZXJ0ZWQgdG8gX0JpZ0ludEltcGwuCiAgX0JpZ0ludEltcGwgX3JldmVydChVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCk7Cn0KCi8vIE1vbnRnb21lcnkgcmVkdWN0aW9uIG9uIF9CaWdJbnRJbXBsLgpjbGFzcyBfQmlnSW50TW9udGdvbWVyeVJlZHVjdGlvbiBpbXBsZW1lbnRzIF9CaWdJbnRSZWR1Y3Rpb24gewogIGZpbmFsIF9CaWdJbnRJbXBsIF9tb2R1bHVzOwogIGludCBfbm9ybU1vZHVsdXNVc2VkOyAvLyBFdmVuIGlmIHByb2Nlc3NpbmcgNjQtYml0IChkaWdpdCBwYWlycykuCiAgVWludDMyTGlzdCBfbW9kdWx1c0RpZ2l0czsKICBVaW50MzJMaXN0IF9hcmdzOwogIGludCBfZGlnaXRzUGVyU3RlcDsgLy8gTnVtYmVyIG9mIGRpZ2l0cyBwcm9jZXNzZWQgaW4gb25lIHN0ZXAuIDEgb3IgMi4KICBzdGF0aWMgY29uc3QgaW50IF94RGlnaXQgPSAwOyAvLyBJbmRleCBvZiBkaWdpdCBvZiB4LgogIHN0YXRpYyBjb25zdCBpbnQgX3hIaWdoRGlnaXQgPSAxOyAvLyBJbmRleCBvZiBoaWdoIGRpZ2l0IG9mIHggKDY0LWJpdCBvbmx5KS4KICBzdGF0aWMgY29uc3QgaW50IF9yaG9EaWdpdCA9IDI7IC8vIEluZGV4IG9mIGRpZ2l0IG9mIHJoby4KICBzdGF0aWMgY29uc3QgaW50IF9yaG9IaWdoRGlnaXQgPSAzOyAvLyBJbmRleCBvZiBoaWdoIGRpZ2l0IG9mIHJobyAoNjQtYml0KS4KICBzdGF0aWMgY29uc3QgaW50IF9tdURpZ2l0ID0gNDsgLy8gSW5kZXggb2YgbXUuCiAgc3RhdGljIGNvbnN0IGludCBfbXVIaWdoRGlnaXQgPSA1OyAvLyBJbmRleCBvZiBoaWdoIDMyLWJpdHMgb2YgbXUgKDY0LWJpdCkuCgogIF9CaWdJbnRNb250Z29tZXJ5UmVkdWN0aW9uKHRoaXMuX21vZHVsdXMpIHsKICAgIF9tb2R1bHVzRGlnaXRzID0gX21vZHVsdXMuX2RpZ2l0czsKICAgIF9hcmdzID0gX25ld0RpZ2l0cyg2KTsKICAgIC8vIERldGVybWluZSBpZiB3ZSBjYW4gcHJvY2VzcyBkaWdpdCBwYWlycyBieSBjYWxsaW5nIGFuIGludHJpbnNpYy4KICAgIF9kaWdpdHNQZXJTdGVwID0gX211bE1vZChfYXJncywgX2FyZ3MsIDApOwogICAgX2FyZ3NbX3hEaWdpdF0gPSBfbW9kdWx1c0RpZ2l0c1swXTsKICAgIGlmIChfZGlnaXRzUGVyU3RlcCA9PSAxKSB7CiAgICAgIF9ub3JtTW9kdWx1c1VzZWQgPSBfbW9kdWx1cy5fdXNlZDsKICAgICAgX2ludkRpZ2l0KF9hcmdzKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChfZGlnaXRzUGVyU3RlcCA9PSAyKTsKICAgICAgX25vcm1Nb2R1bHVzVXNlZCA9IF9tb2R1bHVzLl91c2VkICsgKF9tb2R1bHVzLl91c2VkICYgMSk7CiAgICAgIF9hcmdzW194SGlnaERpZ2l0XSA9IF9tb2R1bHVzRGlnaXRzWzFdOwogICAgICBfaW52RGlnaXRQYWlyKF9hcmdzKTsKICAgIH0KICB9CgogIC8vIENhbGN1bGF0ZXMgLTEveCAlIF9kaWdpdEJhc2UsIHggaXMgMzItYml0IGRpZ2l0LgogIC8vICAgICAgICAgeHkgPT0gMSAobW9kIG0pCiAgLy8gICAgICAgICB4eSA9ICAxK2ttCiAgLy8gICB4eSgyLXh5KSA9ICgxK2ttKSgxLWttKQogIC8vIHgoeSgyLXh5KSkgPSAxLWteMiBtXjIKICAvLyB4KHkoMi14eSkpID09IDEgKG1vZCBtXjIpCiAgLy8gaWYgeSBpcyAxL3ggbW9kIG0sIHRoZW4geSgyLXh5KSBpcyAxL3ggbW9kIG1eMgogIC8vIFNob3VsZCByZWR1Y2UgeCBhbmQgeSgyLXh5KSBieSBtXjIgYXQgZWFjaCBzdGVwIHRvIGtlZXAgc2l6ZSBib3VuZGVkLgogIC8vCiAgLy8gT3BlcmF0aW9uOgogIC8vICAgYXJnc1tfcmhvRGlnaXRdID0gMS9hcmdzW194RGlnaXRdIG1vZCBfZGlnaXRCYXNlLgogIHN0YXRpYyB2b2lkIF9pbnZEaWdpdChVaW50MzJMaXN0IGFyZ3MpIHsKICAgIHZhciB4ID0gYXJnc1tfeERpZ2l0XTsKICAgIHZhciB5ID0geCAmIDM7IC8vIHkgPT0gMS94IG1vZCAyXjIKICAgIHkgPSAoeSAqICgyIC0gKHggJiAweGYpICogeSkpICYgMHhmOyAvLyB5ID09IDEveCBtb2QgMl40CiAgICB5ID0gKHkgKiAoMiAtICh4ICYgMHhmZikgKiB5KSkgJiAweGZmOyAvLyB5ID09IDEveCBtb2QgMl44CiAgICB5ID0gKHkgKiAoMiAtICgoKHggJiAweGZmZmYpICogeSkgJiAweGZmZmYpKSkgJiAweGZmZmY7IC8vIHkgPT0gMS94IG1vZCAyXjE2CiAgICB5ID0gKHkgKiAoMiAtIHggKiB5ICUgX0JpZ0ludEltcGwuX2RpZ2l0QmFzZSkpICUgX0JpZ0ludEltcGwuX2RpZ2l0QmFzZTsKICAgIC8vIHkgPT0gMS94IG1vZCBfZGlnaXRCYXNlCiAgICB5ID0gLXk7IC8vIFdlIHJlYWxseSB3YW50IHRoZSBuZWdhdGl2ZSBpbnZlcnNlLgogICAgYXJnc1tfcmhvRGlnaXRdID0geSAmIF9CaWdJbnRJbXBsLl9kaWdpdE1hc2s7CiAgICBhc3NlcnQoKCh4ICogeSkgJiBfQmlnSW50SW1wbC5fZGlnaXRNYXNrKSA9PSBfQmlnSW50SW1wbC5fZGlnaXRNYXNrKTsKICB9CgogIC8vIENhbGN1bGF0ZXMgLTEveCAlIF9kaWdpdEJhc2VeMiwgeCBpcyBhIHBhaXIgb2YgMzItYml0IGRpZ2l0cy4KICAvLyBPcGVyYXRpb246CiAgLy8gICBhcmdzW19yaG9EaWdpdC4uX3Job0hpZ2hEaWdpdF0gPQogIC8vICAgICAxL2FyZ3NbX3hEaWdpdC4uX3hIaWdoRGlnaXRdIG1vZCBfZGlnaXRCYXNlXjIuCiAgc3RhdGljIHZvaWQgX2ludkRpZ2l0UGFpcihVaW50MzJMaXN0IGFyZ3MpIHsKICAgIHZhciB4bCA9IGFyZ3NbX3hEaWdpdF07IC8vIExvd2VyIDMyLWJpdCBkaWdpdCBvZiB4LgogICAgdmFyIHkgPSB4bCAmIDM7IC8vIHkgPT0gMS94IG1vZCAyXjIKICAgIHkgPSAoeSAqICgyIC0gKHhsICYgMHhmKSAqIHkpKSAmIDB4ZjsgLy8geSA9PSAxL3ggbW9kIDJeNAogICAgeSA9ICh5ICogKDIgLSAoeGwgJiAweGZmKSAqIHkpKSAmIDB4ZmY7IC8vIHkgPT0gMS94IG1vZCAyXjgKICAgIHkgPSAoeSAqICgyIC0gKCgoeGwgJiAweGZmZmYpICogeSkgJiAweGZmZmYpKSkgJiAweGZmZmY7CiAgICAvLyB5ID09IDEveCBtb2QgMl4xNgogICAgeSA9ICh5ICogKDIgLSAoKHhsICogeSkgJiAweGZmZmZmZmZmKSkpICYgMHhmZmZmZmZmZjsgLy8geSA9PSAxL3ggbW9kIDJeMzIKICAgIHZhciB4ID0gKGFyZ3NbX3hIaWdoRGlnaXRdIDw8IF9CaWdJbnRJbXBsLl9kaWdpdEJpdHMpIHwgeGw7CiAgICB5ICo9IDIgLSB4ICogeTsgLy8gTWFza2luZyB3aXRoIDJeNjQtMSBpcyBpbXBsaWVkIGJ5IDY0LWJpdCBhcml0aG1ldGljLgogICAgLy8geSA9PSAxL3ggbW9kIF9kaWdpdEJhc2VeMgogICAgeSA9IC15OyAvLyBXZSByZWFsbHkgd2FudCB0aGUgbmVnYXRpdmUgaW52ZXJzZS4KICAgIGFyZ3NbX3Job0RpZ2l0XSA9IHkgJiBfQmlnSW50SW1wbC5fZGlnaXRNYXNrOwogICAgYXJnc1tfcmhvSGlnaERpZ2l0XSA9CiAgICAgICAgKHkgPj4gX0JpZ0ludEltcGwuX2RpZ2l0Qml0cykgJiBfQmlnSW50SW1wbC5fZGlnaXRNYXNrOwogICAgYXNzZXJ0KHggKiB5ID09IC0xKTsKICB9CgogIC8vIE9wZXJhdGlvbjoKICAvLyAgIGFyZ3NbX211RGlnaXRdID0gYXJnc1tfcmhvRGlnaXRdKmRpZ2l0c1tpXSBtb2QgX2RpZ2l0QmFzZS4KICAvLyAgIFJldHVybnMgMS4KICAvLyBOb3RlOiBJbnRyaW5zaWNzIG9uIDY0LWJpdCBwbGF0Zm9ybXMgcHJvY2VzcyBkaWdpdCBwYWlycyBhdCBldmVuIGluZGljZXM6CiAgLy8gICBhcmdzW19tdURpZ2l0Li5fbXVIaWdoRGlnaXRdID0KICAvLyAgICAgYXJnc1tfcmhvRGlnaXQuLl9yaG9IaWdoRGlnaXRdICogZGlnaXRzW2kuLmkrMV0gbW9kIF9kaWdpdEJhc2VeMi4KICAvLyAgIFJldHVybnMgMi4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBzdGF0aWMgaW50IF9tdWxNb2QoVWludDMyTGlzdCBhcmdzLCBVaW50MzJMaXN0IGRpZ2l0cywgaW50IGkpIHsKICAgIHZhciByaG9sID0gYXJnc1tfcmhvRGlnaXRdICYgX0JpZ0ludEltcGwuX2hhbGZEaWdpdE1hc2s7CiAgICB2YXIgcmhvaCA9IGFyZ3NbX3Job0RpZ2l0XSA+PiBfQmlnSW50SW1wbC5faGFsZkRpZ2l0Qml0czsKICAgIHZhciBkaCA9IGRpZ2l0c1tpXSA+PiBfQmlnSW50SW1wbC5faGFsZkRpZ2l0Qml0czsKICAgIHZhciBkbCA9IGRpZ2l0c1tpXSAmIF9CaWdJbnRJbXBsLl9oYWxmRGlnaXRNYXNrOwogICAgYXJnc1tfbXVEaWdpdF0gPSAoZGwgKiByaG9sICsKICAgICAgICAgICAgKCgoZGwgKiByaG9oICsgZGggKiByaG9sKSAmIF9CaWdJbnRJbXBsLl9oYWxmRGlnaXRNYXNrKSA8PAogICAgICAgICAgICAgICAgX0JpZ0ludEltcGwuX2hhbGZEaWdpdEJpdHMpKSAmCiAgICAgICAgX0JpZ0ludEltcGwuX2RpZ2l0TWFzazsKICAgIHJldHVybiBfQmlnSW50SW1wbC5faXNJbnRyaW5zaWZpZWQgPyAyIDogMTsKICB9CgogIC8vIHJlc3VsdCA9IHgqUiBtb2QgX21vZHVsdXMuCiAgLy8gUmV0dXJucyByZXN1bHRVc2VkLgogIGludCBfY29udmVydChfQmlnSW50SW1wbCB4LCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgLy8gTW9udGdvbWVyeSByZWR1Y3Rpb24gb25seSB3b3JrcyBpZiBhYnMoeCkgPCBfbW9kdWx1cy4KICAgIGFzc2VydCh4LmFicygpIDwgX21vZHVsdXMpOwogICAgYXNzZXJ0KF9kaWdpdHNQZXJTdGVwID09IDEgfHwgX25vcm1Nb2R1bHVzVXNlZC5pc0V2ZW4pOwogICAgdmFyIHJlc3VsdCA9IHguYWJzKCkuX2RsU2hpZnQoX25vcm1Nb2R1bHVzVXNlZCkuX3JlbShfbW9kdWx1cyk7CiAgICBpZiAoeC5faXNOZWdhdGl2ZSAmJiAhcmVzdWx0Ll9pc05lZ2F0aXZlICYmIHJlc3VsdC5fdXNlZCA+IDApIHsKICAgICAgcmVzdWx0ID0gX21vZHVsdXMgLSByZXN1bHQ7CiAgICB9CiAgICB2YXIgdXNlZCA9IHJlc3VsdC5fdXNlZDsKICAgIHZhciBkaWdpdHMgPSByZXN1bHQuX2RpZ2l0czsKICAgIHZhciBpID0gdXNlZCArICh1c2VkICYgMSk7CiAgICB3aGlsZSAoLS1pID49IDApIHsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gZGlnaXRzW2ldOwogICAgfQogICAgcmV0dXJuIHVzZWQ7CiAgfQoKICBfQmlnSW50SW1wbCBfcmV2ZXJ0KFVpbnQzMkxpc3QgeERpZ2l0cywgaW50IHhVc2VkKSB7CiAgICAvLyBSZXNlcnZlIGVub3VnaCBkaWdpdHMgZm9yIG1vZHVsdXMgc3F1YXJpbmcgYW5kIGFjY3VtdWxhdG9yIGNhcnJ5LgogICAgdmFyIHJlc3VsdERpZ2l0cyA9IF9uZXdEaWdpdHMoMiAqIF9ub3JtTW9kdWx1c1VzZWQgKyAyKTsKICAgIHZhciBpID0geFVzZWQgKyAoeFVzZWQgJiAxKTsKICAgIHdoaWxlICgtLWkgPj0gMCkgewogICAgICByZXN1bHREaWdpdHNbaV0gPSB4RGlnaXRzW2ldOwogICAgfQogICAgdmFyIHJlc3VsdFVzZWQgPSBfcmVkdWNlKHJlc3VsdERpZ2l0cywgeFVzZWQpOwogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGZhbHNlLCByZXN1bHRVc2VkLCByZXN1bHREaWdpdHMpOwogIH0KCiAgLy8geCA9IHgvUiBtb2QgX21vZHVsdXMuCiAgLy8gUmV0dXJucyB4VXNlZC4KICBpbnQgX3JlZHVjZShVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCkgewogICAgd2hpbGUgKHhVc2VkIDwgMiAqIF9ub3JtTW9kdWx1c1VzZWQgKyAyKSB7CiAgICAgIC8vIFBhZCB4IHNvIF9tdWxBZGQgaGFzIGVub3VnaCByb29tIGxhdGVyIGZvciBhIHBvc3NpYmxlIGNhcnJ5LgogICAgICB4RGlnaXRzW3hVc2VkKytdID0gMDsKICAgIH0KICAgIHZhciBpID0gMDsKICAgIHdoaWxlIChpIDwgX25vcm1Nb2R1bHVzVXNlZCkgewogICAgICB2YXIgZCA9IF9tdWxNb2QoX2FyZ3MsIHhEaWdpdHMsIGkpOwogICAgICBhc3NlcnQoZCA9PSBfZGlnaXRzUGVyU3RlcCk7CiAgICAgIGQgPSBfQmlnSW50SW1wbC5fbXVsQWRkKAogICAgICAgICAgX2FyZ3MsIF9tdURpZ2l0LCBfbW9kdWx1c0RpZ2l0cywgMCwgeERpZ2l0cywgaSwgX25vcm1Nb2R1bHVzVXNlZCk7CiAgICAgIGFzc2VydChkID09IF9kaWdpdHNQZXJTdGVwKTsKICAgICAgaSArPSBkOwogICAgfQogICAgLy8gQ2xhbXAgeC4KICAgIHdoaWxlICh4VXNlZCA+IDAgJiYgeERpZ2l0c1t4VXNlZCAtIDFdID09IDApIHsKICAgICAgLS14VXNlZDsKICAgIH0KICAgIHhVc2VkID0gX0JpZ0ludEltcGwuX2RyU2hpZnREaWdpdHMoeERpZ2l0cywgeFVzZWQsIGksIHhEaWdpdHMpOwogICAgaWYgKF9CaWdJbnRJbXBsLl9jb21wYXJlRGlnaXRzKAogICAgICAgICAgICB4RGlnaXRzLCB4VXNlZCwgX21vZHVsdXNEaWdpdHMsIF9ub3JtTW9kdWx1c1VzZWQpID49CiAgICAgICAgMCkgewogICAgICBfQmlnSW50SW1wbC5fYWJzU3ViKAogICAgICAgICAgeERpZ2l0cywgeFVzZWQsIF9tb2R1bHVzRGlnaXRzLCBfbm9ybU1vZHVsdXNVc2VkLCB4RGlnaXRzKTsKICAgIH0KICAgIC8vIENsYW1wIHguCiAgICB3aGlsZSAoeFVzZWQgPiAwICYmIHhEaWdpdHNbeFVzZWQgLSAxXSA9PSAwKSB7CiAgICAgIC0teFVzZWQ7CiAgICB9CiAgICByZXR1cm4geFVzZWQ7CiAgfQoKICBpbnQgX3NxcihVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCwgVWludDMyTGlzdCByZXN1bHREaWdpdHMpIHsKICAgIHZhciByZXN1bHRVc2VkID0gX0JpZ0ludEltcGwuX3NxckRpZ2l0cyh4RGlnaXRzLCB4VXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgIHJldHVybiBfcmVkdWNlKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCk7CiAgfQoKICBpbnQgX211bChVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCwgVWludDMyTGlzdCB5RGlnaXRzLCBpbnQgeVVzZWQsCiAgICAgIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKSB7CiAgICB2YXIgcmVzdWx0VXNlZCA9CiAgICAgICAgX0JpZ0ludEltcGwuX211bERpZ2l0cyh4RGlnaXRzLCB4VXNlZCwgeURpZ2l0cywgeVVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICByZXR1cm4gX3JlZHVjZShyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQpOwogIH0KfQoKLy8gTW9kdWxhciByZWR1Y3Rpb24gdXNpbmcgImNsYXNzaWMiIGFsZ29yaXRobS4KY2xhc3MgX0JpZ0ludENsYXNzaWNSZWR1Y3Rpb24gaW1wbGVtZW50cyBfQmlnSW50UmVkdWN0aW9uIHsKICBmaW5hbCBfQmlnSW50SW1wbCBfbW9kdWx1czsgLy8gTW9kdWx1cy4KICBpbnQgX25vcm1Nb2R1bHVzVXNlZDsKICBfQmlnSW50SW1wbCBfbm9ybU1vZHVsdXM7IC8vIE5vcm1hbGl6ZWQgX21vZHVsdXMuCiAgVWludDMyTGlzdCBfbm9ybU1vZHVsdXNEaWdpdHM7CiAgVWludDMyTGlzdCBfbmVnTm9ybU1vZHVsdXNEaWdpdHM7IC8vIE5lZ2F0ZWQgX25vcm1Nb2R1bHVzIGRpZ2l0cy4KICBpbnQgX21vZHVsdXNOc2g7IC8vIE5vcm1hbGl6YXRpb24gc2hpZnQgYW1vdW50LgogIFVpbnQzMkxpc3QgX2FyZ3M7IC8vIFRvcCBfbm9ybU1vZHVsdXMgZGlnaXQocykgYW5kIHBsYWNlIGhvbGRlciBmb3IgZXN0aW1hdGVkCiAgLy8gcXVvdGllbnQgZGlnaXQocykuCiAgVWludDMyTGlzdCBfdG1wRGlnaXRzOyAvLyBUZW1wb3JhcnkgZGlnaXRzIHVzZWQgZHVyaW5nIHJlZHVjdGlvbi4KCiAgX0JpZ0ludENsYXNzaWNSZWR1Y3Rpb24odGhpcy5fbW9kdWx1cykgewogICAgLy8gUHJlcHJvY2VzcyBhcmd1bWVudHMgdG8gX3JlbURpZ2l0cy4KICAgIHZhciBuc2ggPQogICAgICAgIF9CaWdJbnRJbXBsLl9kaWdpdEJpdHMgLSBfbW9kdWx1cy5fZGlnaXRzW19tb2R1bHVzLl91c2VkIC0gMV0uYml0TGVuZ3RoOwogICAgLy8gRm9yIDY0LWJpdCBwcm9jZXNzaW5nLCBtYWtlIHN1cmUgX25lZ05vcm1Nb2R1bHVzRGlnaXRzIGhhcyBhbiBldmVuIG51bWJlcgogICAgLy8gb2YgZGlnaXRzLgogICAgaWYgKF9tb2R1bHVzLl91c2VkLmlzT2RkKSB7CiAgICAgIG5zaCArPSBfQmlnSW50SW1wbC5fZGlnaXRCaXRzOwogICAgfQogICAgX21vZHVsdXNOc2ggPSBuc2g7CiAgICBfbm9ybU1vZHVsdXMgPSBfbW9kdWx1cyA8PCBuc2g7CiAgICBfbm9ybU1vZHVsdXNVc2VkID0gX25vcm1Nb2R1bHVzLl91c2VkOwogICAgX25vcm1Nb2R1bHVzRGlnaXRzID0gX25vcm1Nb2R1bHVzLl9kaWdpdHM7CiAgICBhc3NlcnQoX25vcm1Nb2R1bHVzVXNlZC5pc0V2ZW4pOwogICAgX2FyZ3MgPSBfbmV3RGlnaXRzKDQpOwogICAgX2FyZ3NbX0JpZ0ludEltcGwuX2Rpdmlzb3JMb3dUb3BEaWdpdF0gPQogICAgICAgIF9ub3JtTW9kdWx1c0RpZ2l0c1tfbm9ybU1vZHVsdXNVc2VkIC0gMl07CiAgICBfYXJnc1tfQmlnSW50SW1wbC5fZGl2aXNvclRvcERpZ2l0XSA9CiAgICAgICAgX25vcm1Nb2R1bHVzRGlnaXRzW19ub3JtTW9kdWx1c1VzZWQgLSAxXTsKICAgIC8vIE5lZ2F0ZSBfbm9ybU1vZHVsdXMgc28gd2UgY2FuIHVzZSBfbXVsQWRkIGluc3RlYWQgb2YKICAgIC8vIHVuaW1wbGVtZW50ZWQgIF9tdWxTdWIuCiAgICB2YXIgbmVnTm9ybU1vZHVsdXMgPQogICAgICAgIF9CaWdJbnRJbXBsLm9uZS5fZGxTaGlmdChfbm9ybU1vZHVsdXNVc2VkKSAtIF9ub3JtTW9kdWx1czsKICAgIGlmIChuZWdOb3JtTW9kdWx1cy5fdXNlZCA8IF9ub3JtTW9kdWx1c1VzZWQpIHsKICAgICAgX25lZ05vcm1Nb2R1bHVzRGlnaXRzID0gX0JpZ0ludEltcGwuX2Nsb25lRGlnaXRzKAogICAgICAgICAgbmVnTm9ybU1vZHVsdXMuX2RpZ2l0cywgMCwgX25vcm1Nb2R1bHVzVXNlZCwgX25vcm1Nb2R1bHVzVXNlZCk7CiAgICB9IGVsc2UgewogICAgICBfbmVnTm9ybU1vZHVsdXNEaWdpdHMgPSBuZWdOb3JtTW9kdWx1cy5fZGlnaXRzOwogICAgfQogICAgLy8gX25lZ05vcm1Nb2R1bHVzRGlnaXRzIGlzIHJlYWQtb25seSBhbmQgaGFzIF9ub3JtTW9kdWx1c1VzZWQgZGlnaXRzIChwb3NzaWJseQogICAgLy8gaW5jbHVkaW5nIHNldmVyYWwgbGVhZGluZyB6ZXJvcykgcGx1cyBhIGxlYWRpbmcgemVybyBmb3IgNjQtYml0CiAgICAvLyBwcm9jZXNzaW5nLgogICAgX3RtcERpZ2l0cyA9IF9uZXdEaWdpdHMoMiAqIF9ub3JtTW9kdWx1c1VzZWQpOwogIH0KCiAgaW50IF9jb252ZXJ0KF9CaWdJbnRJbXBsIHgsIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKSB7CiAgICB2YXIgZGlnaXRzOwogICAgdmFyIHVzZWQ7CiAgICBpZiAoeC5faXNOZWdhdGl2ZSB8fCB4Ll9hYnNDb21wYXJlKF9tb2R1bHVzKSA+PSAwKSB7CiAgICAgIHZhciByZW1haW5kZXIgPSB4Ll9yZW0oX21vZHVsdXMpOwogICAgICBpZiAoeC5faXNOZWdhdGl2ZSAmJiByZW1haW5kZXIuX3VzZWQgPiAwKSB7CiAgICAgICAgYXNzZXJ0KHJlbWFpbmRlci5faXNOZWdhdGl2ZSk7CiAgICAgICAgcmVtYWluZGVyICs9IF9tb2R1bHVzOwogICAgICB9CiAgICAgIGFzc2VydCghcmVtYWluZGVyLl9pc05lZ2F0aXZlKTsKICAgICAgdXNlZCA9IHJlbWFpbmRlci5fdXNlZDsKICAgICAgZGlnaXRzID0gcmVtYWluZGVyLl9kaWdpdHM7CiAgICB9IGVsc2UgewogICAgICB1c2VkID0geC5fdXNlZDsKICAgICAgZGlnaXRzID0geC5fZGlnaXRzOwogICAgfQogICAgdmFyIGkgPSB1c2VkICsgKHVzZWQgJiAxKTsgLy8gQ29weSBsZWFkaW5nIHplcm8gaWYgYW55LgogICAgd2hpbGUgKC0taSA+PSAwKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IGRpZ2l0c1tpXTsKICAgIH0KICAgIHJldHVybiB1c2VkOwogIH0KCiAgX0JpZ0ludEltcGwgX3JldmVydChVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCkgewogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGZhbHNlLCB4VXNlZCwgeERpZ2l0cyk7CiAgfQoKICBpbnQgX3JlZHVjZShVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCkgewogICAgaWYgKHhVc2VkIDwgX21vZHVsdXMuX3VzZWQpIHsKICAgICAgcmV0dXJuIHhVc2VkOwogICAgfQogICAgLy8gVGhlIGZ1bmN0aW9uIF9CaWdJbnRJbXBsLl9yZW1EaWdpdHMoLi4uKSBpcyBvcHRpbWl6ZWQgZm9yIHJlZHVjdGlvbiBhbmQKICAgIC8vIGVxdWl2YWxlbnQgdG8gY2FsbGluZwogICAgLy8gJ2NvbnZlcnQocmV2ZXJ0KHhEaWdpdHMsIHhVc2VkKS5fcmVtKF9ub3JtTW9kdWx1cyksIHhEaWdpdHMpOycKICAgIHJldHVybiBfQmlnSW50SW1wbC5fcmVtRGlnaXRzKAogICAgICAgIHhEaWdpdHMsCiAgICAgICAgeFVzZWQsCiAgICAgICAgX25vcm1Nb2R1bHVzRGlnaXRzLAogICAgICAgIF9ub3JtTW9kdWx1c1VzZWQsCiAgICAgICAgX25lZ05vcm1Nb2R1bHVzRGlnaXRzLAogICAgICAgIF9tb2R1bHVzTnNoLAogICAgICAgIF9hcmdzLAogICAgICAgIF90bXBEaWdpdHMsCiAgICAgICAgeERpZ2l0cyk7CiAgfQoKICBpbnQgX3NxcihVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCwgVWludDMyTGlzdCByZXN1bHREaWdpdHMpIHsKICAgIHZhciByZXN1bHRVc2VkID0gX0JpZ0ludEltcGwuX3Nx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b3VibGUgewogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0RvdWJsZSkKICBmYWN0b3J5IF9Eb3VibGUuZnJvbUludGVnZXIoaW50IHZhbHVlKSBuYXRpdmUgIkRvdWJsZV9kb3VibGVGcm9tSW50ZWdlciI7CgogIGludCBnZXQgaGFzaENvZGUgbmF0aXZlICJEb3VibGVfaGFzaENvZGUiOwogIGludCBnZXQgX2lkZW50aXR5SGFzaENvZGUgbmF0aXZlICJEb3VibGVfaGFzaENvZGUiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9Eb3VibGUpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBkb3VibGUgb3BlcmF0b3IgKyhudW0gb3RoZXIpIHsKICAgIHJldHVybiBfYWRkKG90aGVyLnRvRG91YmxlKCkpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRG91YmxlKQogIGRvdWJsZSBfYWRkKGRvdWJsZSBvdGhlcikgbmF0aXZlICJEb3VibGVfYWRkIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRG91YmxlKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgZG91YmxlIG9wZXJhdG9yIC0obnVtIG90aGVyKSB7CiAgICByZXR1cm4gX3N1YihvdGhlci50b0RvdWJsZSgpKTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0RvdWJsZSkKICBkb3VibGUgX3N1Yihkb3VibGUgb3RoZXIpIG5hdGl2ZSAiRG91YmxlX3N1YiI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0RvdWJsZSkKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIGRvdWJsZSBvcGVyYXRvciAqKG51bSBvdGhlcikgewogICAgcmV0dXJuIF9tdWwob3RoZXIudG9Eb3VibGUoKSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9Eb3VibGUpCiAgZG91YmxlIF9tdWwoZG91YmxlIG90aGVyKSBuYXRpdmUgIkRvdWJsZV9tdWwiOwoKICBpbnQgb3BlcmF0b3Igfi8obnVtIG90aGVyKSB7CiAgICByZXR1cm4gX3RydW5jX2RpdihvdGhlci50b0RvdWJsZSgpKTsKICB9CgogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgaW50IF90cnVuY19kaXYoZG91YmxlIG90aGVyKSBuYXRpdmUgIkRvdWJsZV90cnVuY19kaXYiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9Eb3VibGUpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBkb3VibGUgb3BlcmF0b3IgLyhudW0gb3RoZXIpIHsKICAgIHJldHVybiBfZGl2KG90aGVyLnRvRG91YmxlKCkpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRG91YmxlKQogIGRvdWJsZSBfZGl2KGRvdWJsZSBvdGhlcikgbmF0aXZlICJEb3VibGVfZGl2IjsKCiAgZG91YmxlIG9wZXJhdG9yICUobnVtIG90aGVyKSB7CiAgICByZXR1cm4gX21vZHVsbyhvdGhlci50b0RvdWJsZSgpKTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0RvdWJsZSkKICBkb3VibGUgX21vZHVsbyhkb3VibGUgb3RoZXIpIG5hdGl2ZSAiRG91YmxlX21vZHVsbyI7CgogIGRvdWJsZSByZW1haW5kZXIobnVtIG90aGVyKSB7CiAgICByZXR1cm4gX3JlbWFpbmRlcihvdGhlci50b0RvdWJsZSgpKTsKICB9CgogIGRvdWJsZSBfcmVtYWluZGVyKGRvdWJsZSBvdGhlcikgbmF0aXZlICJEb3VibGVfcmVtYWluZGVyIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRG91YmxlKQogIGRvdWJsZSBvcGVyYXRvciAtKCkgbmF0aXZlICJEb3VibGVfZmxpcFNpZ25CaXQiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgcmV0dXJuIChvdGhlciBpcyBudW0pICYmIF9lcXVhbChvdGhlci50b0RvdWJsZSgpKTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBib29sIF9lcXVhbChkb3VibGUgb3RoZXIpIG5hdGl2ZSAiRG91YmxlX2VxdWFsIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgYm9vbCBfZXF1YWxUb0ludGVnZXIoaW50IG90aGVyKSBuYXRpdmUgIkRvdWJsZV9lcXVhbFRvSW50ZWdlciI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIGJvb2wgb3BlcmF0b3IgPChudW0gb3RoZXIpIHsKICAgIHJldHVybiBvdGhlciA+IHRoaXM7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBib29sIG9wZXJhdG9yID4obnVtIG90aGVyKSB7CiAgICByZXR1cm4gX2dyZWF0ZXJUaGFuKG90aGVyLnRvRG91YmxlKCkpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIGJvb2wgX2dyZWF0ZXJUaGFuKGRvdWJsZSBvdGhlcikgbmF0aXZlICJEb3VibGVfZ3JlYXRlclRoYW4iOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBib29sIG9wZXJhdG9yID49KG51bSBvdGhlcikgewogICAgcmV0dXJuICh0aGlzID09IG90aGVyKSB8fCAodGhpcyA+IG90aGVyKTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIGJvb2wgb3BlcmF0b3IgPD0obnVtIG90aGVyKSB7CiAgICByZXR1cm4gKHRoaXMgPT0gb3RoZXIpIHx8ICh0aGlzIDwgb3RoZXIpOwogIH0KCiAgZG91YmxlIF9hZGRGcm9tSW50ZWdlcihpbnQgb3RoZXIpIHsKICAgIHJldHVybiBuZXcgX0RvdWJsZS5mcm9tSW50ZWdlcihvdGhlcikuX2FkZCh0aGlzKTsKICB9CgogIGRvdWJsZSBfc3ViRnJvbUludGVnZXIoaW50IG90aGVyKSB7CiAgICByZXR1cm4gbmV3IF9Eb3VibGUuZnJvbUludGVnZXIob3RoZXIpLl9zdWIodGhpcyk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCiAgZG91YmxlIF9tdWxGcm9tSW50ZWdlcihpbnQgb3RoZXIpIHsKICAgIHJldHVybiBuZXcgX0RvdWJsZS5mcm9tSW50ZWdlcihvdGhlcikuX211bCh0aGlzKTsKICB9CgogIGludCBfdHJ1bmNEaXZGcm9tSW50ZWdlcihpbnQgb3RoZXIpIHsKICAgIHJldHVybiBuZXcgX0RvdWJsZS5mcm9tSW50ZWdlcihvdGhlcikuX3RydW5jX2Rpdih0aGlzKTsKICB9CgogIGRvdWJsZSBfbW9kdWxvRnJvbUludGVnZXIoaW50IG90aGVyKSB7CiAgICByZXR1cm4gbmV3IF9Eb3VibGUuZnJvbUludGVnZXIob3RoZXIpLl9tb2R1bG8odGhpcyk7CiAgfQoKICBkb3VibGUgX3JlbWFpbmRlckZyb21JbnRlZ2VyKGludCBvdGhlcikgewogICAgcmV0dXJuIG5ldyBfRG91YmxlLmZyb21JbnRlZ2VyKG90aGVyKS5fcmVtYWluZGVyKHRoaXMpOwogIH0KCiAgYm9vbCBfZ3JlYXRlclRoYW5Gcm9tSW50ZWdlcihpbnQgb3RoZXIpCiAgICAgIG5hdGl2ZSAiRG91YmxlX2dyZWF0ZXJUaGFuRnJvbUludGVnZXIiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgYm9vbCBnZXQgaXNOZWdhdGl2ZSBuYXRpdmUgIkRvdWJsZV9nZXRJc05lZ2F0aXZlIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgYm9vbCBnZXQgaXNJbmZpbml0ZSBuYXRpdmUgIkRvdWJsZV9nZXRJc0luZmluaXRlIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgYm9vbCBnZXQgaXNOYU4gbmF0aXZlICJEb3VibGVfZ2V0SXNOYU4iOwogIGJvb2wgZ2V0IGlzRmluaXRlID0+ICFpc0luZmluaXRlICYmICFpc05hTjsgLy8gQ2FuIGJlIG9wdGltaXplZC4KCiAgZG91YmxlIGFicygpIHsKICAgIC8vIEhhbmRsZSBuZWdhdGl2ZSAwLjAuCiAgICBpZiAodGhpcyA9PSAwLjApIHJldHVybiAwLjA7CiAgICByZXR1cm4gdGhpcyA8IDAuMCA/IC10aGlzIDogdGhpczsKICB9CgogIGRvdWJsZSBnZXQgc2lnbiB7CiAgICBpZiAodGhpcyA+IDAuMCkgcmV0dXJuIDEuMDsKICAgIGlmICh0aGlzIDwgMC4wKSByZXR1cm4gLTEuMDsKICAgIHJldHVybiB0aGlzOyAvLyArLy0wLjAgb3IgTmFOLgogIH0KCiAgaW50IHJvdW5kKCkgPT4gcm91bmRUb0RvdWJsZSgpLnRvSW50KCk7CiAgaW50IGZsb29yKCkgPT4gZmxvb3JUb0RvdWJsZSgpLnRvSW50KCk7CiAgaW50IGNlaWwoKSA9PiBjZWlsVG9Eb3VibGUoKS50b0ludCgpOwogIGludCB0cnVuY2F0ZSgpID0+IHRydW5jYXRlVG9Eb3VibGUoKS50b0ludCgpOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9Eb3VibGUpCiAgZG91YmxlIHJvdW5kVG9Eb3VibGUoKSBuYXRpdmUgIkRvdWJsZV9yb3VuZCI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRG91YmxlKQogIGRvdWJsZSBmbG9vclRvRG91YmxlKCkgbmF0aXZlICJEb3VibGVfZmxvb3IiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0RvdWJsZSkKICBkb3VibGUgY2VpbFRvRG91YmxlKCkgbmF0aXZlICJEb3VibGVfY2VpbCI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRG91YmxlKQogIGRvdWJsZSB0cnVuY2F0ZVRvRG91YmxlKCkgbmF0aXZlICJEb3VibGVfdHJ1bmNhdGUiOwoKICBudW0gY2xhbXAobnVtIGxvd2VyTGltaXQsIG51bSB1cHBlckxpbWl0KSB7CiAgICBpZiAobG93ZXJMaW1pdCA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoImxvd2VyTGltaXQiKTsKICAgIH0KICAgIGlmICh1cHBlckxpbWl0ID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgidXBwZXJMaW1pdCIpOwogICAgfQogICAgaWYgKGxvd2VyTGltaXQuY29tcGFyZVRvKHVwcGVyTGltaXQpID4gMCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihsb3dlckxpbWl0KTsKICAgIH0KICAgIGlmIChsb3dlckxpbWl0LmlzTmFOKSByZXR1cm4gbG93ZXJMaW1pdDsKICAgIGlmICh0aGlzLmNvbXBhcmVUbyhsb3dlckxpbWl0KSA8IDApIHJldHVybiBsb3dlckxpbWl0OwogICAgaWYgKHRoaXMuY29tcGFyZVRvKHVwcGVyTGltaXQpID4gMCkgcmV0dXJuIHVwcGVyTGltaXQ7CiAgICByZXR1cm4gdGhpczsKICB9CgogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgaW50IHRvSW50KCkgbmF0aXZlICJEb3VibGVfdG9JbnQiOwoKICBkb3VibGUgdG9Eb3VibGUoKSB7CiAgICByZXR1cm4gdGhpczsKICB9CgogIHN0YXRpYyBjb25zdCBpbnQgQ0FDSEVfU0laRV9MT0cyID0gMzsKICBzdGF0aWMgY29uc3QgaW50IENBQ0hFX0xFTkdUSCA9IDEgPDwgKENBQ0hFX1NJWkVfTE9HMiArIDEpOwogIHN0YXRpYyBjb25zdCBpbnQgQ0FDSEVfTUFTSyA9IENBQ0hFX0xFTkdUSCAtIDE7CiAgLy8gRWFjaCBrZXkgKGRvdWJsZSkgZm9sbG93ZWQgYnkgaXRzIHRvU3RyaW5nIHJlc3VsdC4KICBzdGF0aWMgZmluYWwgTGlzdCBfY2FjaGUgPSBuZXcgTGlzdChDQUNIRV9MRU5HVEgpOwogIHN0YXRpYyBpbnQgX2NhY2hlRXZpY3RJbmRleCA9IDA7CgogIFN0cmluZyBfdG9TdHJpbmcoKSBuYXRpdmUgIkRvdWJsZV90b1N0cmluZyI7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIC8vIFRPRE8oa29kYSk6IENvbnNpZGVyIHN0YXJ0aW5nIGF0IG1vc3QgcmVjZW50bHkgaW5zZXJ0ZWQuCiAgICBmb3IgKGludCBpID0gMDsgaSA8IENBQ0hFX0xFTkdUSDsgaSArPSAyKSB7CiAgICAgIC8vIE5lZWQgJ2lkZW50aWNhbCcgdG8gaGFuZGxlIG5lZ2F0aXZlIHplcm8sIGV0Yy4KICAgICAgaWYgKGlkZW50aWNhbChfY2FjaGVbaV0sIHRoaXMpKSB7CiAgICAgICAgcmV0dXJuIF9jYWNoZVtpICsgMV07CiAgICAgIH0KICAgIH0KICAgIC8vIFRPRE8oa29kYSk6IENvbnNpZGVyIG9wdGltaXppbmcgYWxsIHNtYWxsIGludGVncmFsIHZhbHVlcy4KICAgIGlmIChpZGVudGljYWwoMC4wLCB0aGlzKSkgewogICAgICByZXR1cm4gIjAuMCI7CiAgICB9CiAgICBTdHJpbmcgcmVzdWx0ID0gX3RvU3RyaW5nKCk7CiAgICAvLyBSZXBsYWNlIHRoZSBsZWFzdCByZWNlbnRseSBpbnNlcnRlZCBlbnRyeS4KICAgIF9jYWNoZVtfY2FjaGVFdmljdEluZGV4XSA9IHRoaXM7CiAgICBfY2FjaGVbX2NhY2hlRXZpY3RJbmRleCArIDFdID0gcmVzdWx0OwogICAgX2NhY2hlRXZpY3RJbmRleCA9IChfY2FjaGVFdmljdEluZGV4ICsgMikgJiBDQUNIRV9NQVNLOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFN0cmluZyB0b1N0cmluZ0FzRml4ZWQoaW50IGZyYWN0aW9uRGlnaXRzKSB7CiAgICAvLyBTZWUgRUNNQVNjcmlwdC0yNjIsIDE1LjcuNC41IGZvciBkZXRhaWxzLgoKICAgIGlmIChmcmFjdGlvbkRpZ2l0cyA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoImZyYWN0aW9uRGlnaXRzIik7CiAgICB9CgogICAgLy8gU3RlcCAyLgogICAgaWYgKGZyYWN0aW9uRGlnaXRzIDwgMCB8fCBmcmFjdGlvbkRpZ2l0cyA+IDIwKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGZyYWN0aW9uRGlnaXRzLCAwLCAyMCwgImZyYWN0aW9uRGlnaXRzIik7CiAgICB9CgogICAgLy8gU3RlcCAzLgogICAgZG91YmxlIHggPSB0aGlzOwoKICAgIC8vIFN0ZXAgNC4KICAgIGlmIChpc05hTikgcmV0dXJuICJOYU4iOwoKICAgIC8vIFN0ZXAgNSBhbmQgNiBza2lwcGVkLiBXaWxsIGJlIGRlYWx0IHdpdGggYnkgbmF0aXZlIGZ1bmN0aW9uLgoKICAgIC8vIFN0ZXAgNy4KICAgIGlmICh4ID49IDFlMjEgfHwgeCA8PSAtMWUyMSkgewogICAgICByZXR1cm4geC50b1N0cmluZygpOwogICAgfQoKICAgIHJldHVybiBfdG9TdHJpbmdBc0ZpeGVkKGZyYWN0aW9uRGlnaXRzKTsKICB9CgogIFN0cmluZyBfdG9TdHJpbmdBc0ZpeGVkKGludCBmcmFjdGlvbkRpZ2l0cykgbmF0aXZlICJEb3VibGVfdG9TdHJpbmdBc0ZpeGVkIjsKCiAgU3RyaW5nIHRvU3RyaW5nQXNFeHBvbmVudGlhbChbaW50IGZyYWN0aW9uRGlnaXRzXSkgewogICAgLy8gU2VlIEVDTUFTY3JpcHQtMjYyLCAxNS43LjQuNiBmb3IgZGV0YWlscy4KCiAgICAvLyBUaGUgRWNtYVNjcmlwdCBzcGVjaWZpY2F0aW9uIGNoZWNrcyBmb3IgTmFOIGFuZCBJbmZpbml0eSBiZWZvcmUgbG9va2luZwogICAgLy8gYXQgdGhlIGZyYWN0aW9uRGlnaXRzLiBJbiBEYXJ0IHdlIGFyZSBjb25zaXN0ZW50IHdpdGggdG9TdHJpbmdBc0ZpeGVkIGFuZAogICAgLy8gbG9vayBhdCB0aGUgZnJhY3Rpb25EaWdpdHMgZmlyc3QuCgogICAgLy8gU3RlcCA3LgogICAgaWYgKGZyYWN0aW9uRGlnaXRzICE9IG51bGwpIHsKICAgICAgaWYgKGZyYWN0aW9uRGlnaXRzIDwgMCB8fCBmcmFjdGlvbkRpZ2l0cyA+IDIwKSB7CiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoZnJhY3Rpb25EaWdpdHMsIDAsIDIwLCAiZnJhY3Rpb25EaWdpdHMiKTsKICAgICAgfQogICAgfQoKICAgIGlmIChpc05hTikgcmV0dXJuICJOYU4iOwogICAgaWYgKHRoaXMgPT0gZG91YmxlLmluZmluaXR5KSByZXR1cm4gIkluZmluaXR5IjsKICAgIGlmICh0aGlzID09IC1kb3VibGUuaW5maW5pdHkpIHJldHVybiAiLUluZmluaXR5IjsKCiAgICAvLyBUaGUgZGFydCBmdW5jdGlvbiBwcmludHMgdGhlIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9uIHdoZW4gZnJhY3Rpb25EaWdpdHMKICAgIC8vIGVxdWFscyBudWxsLiBUaGUgbmF0aXZlIGZ1bmN0aW9uIHdhbnRzIC0xIGluc3RlYWQuCiAgICBmcmFjdGlvbkRpZ2l0cyA9IChmcmFjdGlvbkRpZ2l0cyA9PSBudWxsKSA/IC0xIDogZnJhY3Rpb25EaWdpdHM7CgogICAgcmV0dXJuIF90b1N0cmluZ0FzRXhwb25lbnRpYWwoZnJhY3Rpb25EaWdpdHMpOwogIH0KCiAgU3RyaW5nIF90b1N0cmluZ0FzRXhwb25lbnRpYWwoaW50IGZyYWN0aW9uRGlnaXRzKQogICAgICBuYXRpdmUgIkRvdWJsZV90b1N0cmluZ0FzRXhwb25lbnRpYWwiOwoKICBTdHJpbmcgdG9TdHJpbmdBc1ByZWNpc2lvbihpbnQgcHJlY2lzaW9uKSB7CiAgICAvLyBTZWUgRUNNQVNjcmlwdC0yNjIsIDE1LjcuNC43IGZvciBkZXRhaWxzLgoKICAgIGlmIChwcmVjaXNpb24gPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJwcmVjaXNpb24iKTsKICAgIH0KICAgIC8vIFRoZSBFY21hU2NyaXB0IHNwZWNpZmljYXRpb24gY2hlY2tzIGZvciBOYU4gYW5kIEluZmluaXR5IGJlZm9yZSBsb29raW5nCiAgICAvLyBhdCB0aGUgZnJhY3Rpb25EaWdpdHMuIEluIERhcnQgd2UgYXJlIGNvbnNpc3RlbnQgd2l0aCB0b1N0cmluZ0FzRml4ZWQgYW5kCiAgICAvLyBsb29rIGF0IHRoZSBmcmFjdGlvbkRpZ2l0cyBmaXJzdC4KCiAgICAvLyBTdGVwIDguCiAgICBpZiAocHJlY2lzaW9uIDwgMSB8fCBwcmVjaXNpb24gPiAyMSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShwcmVjaXNpb24sIDEsIDIxLCAicHJlY2lzaW9uIik7CiAgICB9CgogICAgaWYgKGlzTmFOKSByZXR1cm4gIk5hTiI7CiAgICBpZiAodGhpcyA9PSBkb3VibGUuaW5maW5pdHkpIHJldHVybiAiSW5maW5pdHkiOwogICAgaWYgKHRoaXMgPT0gLWRvdWJsZS5pbmZpbml0eSkgcmV0dXJuICItSW5maW5pdHkiOwoKICAgIHJldHVybiBfdG9TdHJpbmdBc1ByZWNpc2lvbihwcmVjaXNpb24pOwogIH0KCiAgU3RyaW5nIF90b1N0cmluZ0FzUHJlY2lzaW9uKGludCBmcmFjdGlvbkRpZ2l0cykKICAgICAgbmF0aXZlICJEb3VibGVfdG9TdHJpbmdBc1ByZWNpc2lvbiI7CgogIC8vIE9yZGVyIGlzOiBOYU4gPiBJbmZpbml0eSA+IC4uLiA+IDAuMCA+IC0wLjAgPiAuLi4gPiAtSW5maW5pdHkuCiAgaW50IGNvbXBhcmVUbyhudW0gb3RoZXIpIHsKICAgIGNvbnN0IGludCBFUVVBTCA9IDAsIExFU1MgPSAtMSwgR1JFQVRFUiA9IDE7CiAgICBpZiAodGhpcyA8IG90aGVyKSB7CiAgICAgIHJldHVybiBMRVNTOwogICAgfSBlbHNlIGlmICh0aGlzID4gb3RoZXIpIHsKICAgICAgcmV0dXJuIEdSRUFURVI7CiAgICB9IGVsc2UgaWYgKHRoaXMgPT0gb3RoZXIpIHsKICAgICAgaWYgKHRoaXMgPT0gMC4wKSB7CiAgICAgICAgYm9vbCB0aGlzSXNOZWdhdGl2ZSA9IGlzTmVnYXRpdmU7CiAgICAgICAgYm9vbCBvdGhlcklzTmVnYXRpdmUgPSBvdGhlci5pc05lZ2F0aXZlOwogICAgICAgIGlmICh0aGlzSXNOZWdhdGl2ZSA9PSBvdGhlcklzTmVnYXRpdmUpIHsKICAgICAgICAgIHJldHVybiBFUVVBTDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXNJc05lZ2F0aXZlID8gTEVTUyA6IEdSRUFURVI7CiAgICAgIH0gZWxzZSBpZiAob3RoZXIgaXMgaW50KSB7CiAgICAgICAgLy8gQ29tcGFyZSBhcyBpbnRlZ2VycyBhcyBpdCBpcyBtb3JlIHByZWNpc2UgaWYgdGhlIGludGVnZXIgdmFsdWUgaXMKICAgICAgICAvLyBvdXRzaWRlIG9mIE1JTl9FWEFDVF9JTlRfVE9fRE9VQkxFLi5NQVhfRVhBQ1RfSU5UX1RPX0RPVUJMRSByYW5nZS4KICAgICAgICBjb25zdCBpbnQgTUFYX0VYQUNUX0lOVF9UT19ET1VCTEUgPSA5MDA3MTk5MjU0NzQwOTkyOyAvLyAyXjUzLgogICAgICAgIGNvbnN0IGludCBNSU5fRVhBQ1RfSU5UX1RPX0RPVUJMRSA9IC1NQVhfRVhBQ1RfSU5UX1RPX0RPVUJMRTsKICAgICAgICBpZiAoKE1JTl9FWEFDVF9JTlRfVE9fRE9VQkxFIDw9IG90aGVyKSAmJgogICAgICAgICAgICAob3RoZXIgPD0gTUFYX0VYQUNUX0lOVF9UT19ET1VCTEUpKSB7CiAgICAgICAgICByZXR1cm4gRVFVQUw7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGJvb2wgbGltaXRJbnRzVG82NEJpdHMgPSAoKDEgPDwgNjQpID09IDApOwogICAgICAgIGlmIChsaW1pdEludHNUbzY0Qml0cykgewogICAgICAgICAg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X2hhc2g7CiAgfQoKICBfQ2xvc3VyZSBnZXQgY2FsbCA9PiB0aGlzOwoKICBfQ2xvc3VyZSBfY2xvbmUoKSBuYXRpdmUgIkNsb3N1cmVfY2xvbmUiOwoKICBpbnQgX2NvbXB1dGVIYXNoKCkgbmF0aXZlICJDbG9zdXJlX2NvbXB1dGVIYXNoIjsKCiAgLy8gTm8gaW5zdGFuY2UgZmllbGRzIHNob3VsZCBiZSBkZWNsYXJlZCBiZWZvcmUgdGhlIGZvbGxvd2luZyBmaWVsZHMgd2hvc2UKICAvLyBvZmZzZXRzIG11c3QgYmUgaWRlbnRpY2FsIGluIERhcnQgYW5kIEMrKy4KCiAgLy8gVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIGRlY2xhcmVkIGJvdGggaW4gcmF3X29iamVjdC5oIChmb3IgZGlyZWN0IGFjY2VzcwogIC8vIGZyb20gQysrIGNvZGUpIGFuZCBhbHNvIGhlcmUgc28gdGhhdCB0aGUgb2Zmc2V0LXRvLWZpZWxkIG1hcCB1c2VkIGJ5CiAgLy8gZGVmZXJyZWQgb2JqZWN0cyBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4KICAvLyBDYXV0aW9uOiBUaGVzZSBmaWVsZHMgYXJlIG5vdCBEYXJ0IGluc3RhbmNlcywgYnV0IFZNIG9iamVjdHMuIFRoZWlyIERhcnQKICAvLyBuYW1lcyBkbyBub3QgbmVlZCB0byBtYXRjaCB0aGUgQysrIG5hbWVzLCBidXQgdGhleSBtdXN0IGJlIHByaXZhdGUuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHZhciBfaW5zdGFudGlhdG9yX3R5cGVfYXJndW1lbnRzOwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICB2YXIgX2Z1bmN0aW9uX3R5cGVfYXJndW1lbnRzOwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICB2YXIgX2RlbGF5ZWRfdHlwZV9hcmd1bWVudHM7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHZhciBfZnVuY3Rpb247CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHZhciBfY29udGV4dDsKCiAgLy8gTm90ZTogX0Nsb3N1cmUgb2JqZWN0cyBhcmUgY3JlYXRlZCBieSBWTSAibWFnaWNhbGx5Iiwgd2l0aG91dCBpbnZva2luZwogIC8vIGNvbnN0cnVjdG9yLiBTbywgX0Nsb3N1cmUgZGVmYXVsdCBjb25zdHJ1Y3RvciBpcyBuZXZlciBjb21waWxlZCBhbmQKICAvLyBkZXRlY3Rpb24gb2YgZGVmYXVsdC1pbml0aWFsaXplZCBmaWVsZHMgaXMgbm90IHBlcmZvcm1lZC4KICAvLyBBcyBhIGNvbnNlcXVlbmNlLCBWTSBpbmNvcnJlY3RseSBhc3N1bWVzIHRoYXQgX2hhc2ggZmllbGQgaXMgbm90CiAgLy8gbnVsbGFibGUgYW5kIG1heSBpbmNvcnJlY3RseSByZW1vdmUgJ2lmIChfaGFzaCA9PSBudWxsKScgaW4gZ2V0Omhhc2hDb2RlLgogIC8vIFRoaXMgaW5pdGlhbGl6ZXIgbWFrZXMgX2hhc2ggZmllbGQgbnVsbGFibGUgZXZlbiB3aXRob3V0IGNvbnN0cnVjdG9yCiAgLy8gY29tcGlsYXRpb24uCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHZhciBfaGFzaCA9IG51bGw7Cn0KOgBOTjwBDwEeARolJxkEAToBFR4SBAEdASwBMwFNMAFPSi9OSRwkHCAcHxwRHBABTEk/Rk9KEhwUAgEdZGFydDpjb3JlLXBhdGNoL2Z1bmN0aW9uLmRhcnRRb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvX2ludGVybmFsL3ZtL2xpYi9ncm93YWJsZV9hcnJheS5kYXJ0rPEvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9Hcm93YWJsZUxpc3Q8VD4gZXh0ZW5kcyBMaXN0QmFzZTxUPiB7CiAgdm9pZCBpbnNlcnQoaW50IGluZGV4LCBUIGVsZW1lbnQpIHsKICAgIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPiBsZW5ndGgpKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGluZGV4LCAwLCBsZW5ndGgpOwogICAgfQogICAgaWYgKGluZGV4ID09IHRoaXMubGVuZ3RoKSB7CiAgICAgIGFkZChlbGVtZW50KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaW50IG9sZExlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgdGhpcy5sZW5ndGgrKzsKICAgIExpc3RzLmNvcHkodGhpcywgaW5kZXgsIHRoaXMsIGluZGV4ICsgMSwgb2xkTGVuZ3RoIC0gaW5kZXgpOwogICAgdGhpc1tpbmRleF0gPSBlbGVtZW50OwogIH0KCiAgVCByZW1vdmVBdChpbnQgaW5kZXgpIHsKICAgIHZhciByZXN1bHQgPSB0aGlzW2luZGV4XTsKICAgIGludCBuZXdMZW5ndGggPSB0aGlzLmxlbmd0aCAtIDE7CiAgICBpZiAoaW5kZXggPCBuZXdMZW5ndGgpIHsKICAgICAgTGlzdHMuY29weSh0aGlzLCBpbmRleCArIDEsIHRoaXMsIGluZGV4LCBuZXdMZW5ndGggLSBpbmRleCk7CiAgICB9CiAgICB0aGlzLmxlbmd0aCA9IG5ld0xlbmd0aDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBib29sIHJlbW92ZShPYmplY3QgZWxlbWVudCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh0aGlzW2ldID09IGVsZW1lbnQpIHsKICAgICAgICByZW1vdmVBdChpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBpbnNlcnRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxUPiBpdGVyYWJsZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShpbmRleCwgMCwgbGVuZ3RoKTsKICAgIH0KICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB3ZSBjYW4gcHJvYmFibHkgZGV0ZWN0IG1vcmUgY2FzZXMuCiAgICBpZiAoaXRlcmFibGUgaXMhIExpc3QgJiYgaXRlcmFibGUgaXMhIFNldCAmJiBpdGVyYWJsZSBpcyEgU3ViTGlzdEl0ZXJhYmxlKSB7CiAgICAgIGl0ZXJhYmxlID0gaXRlcmFibGUudG9MaXN0KCk7CiAgICB9CiAgICBpbnQgaW5zZXJ0aW9uTGVuZ3RoID0gaXRlcmFibGUubGVuZ3RoOwogICAgLy8gVGhlcmUgbWlnaHQgYmUgZXJyb3JzIGFmdGVyIHRoZSBsZW5ndGggY2hhbmdlLCBpbiB3aGljaCBjYXNlIHRoZSBsaXN0CiAgICAvLyB3aWxsIGVuZCB1cCBiZWluZyBtb2RpZmllZCBidXQgdGhlIG9wZXJhdGlvbiBub3QgY29tcGxldGUuIFVubGVzcyB3ZQogICAgLy8gYWx3YXlzIGdvIHRocm91Z2ggYSAidG9MaXN0IiB3ZSBjYW4ndCByZWFsbHkgYXZvaWQgdGhhdC4KICAgIHRoaXMubGVuZ3RoICs9IGluc2VydGlvbkxlbmd0aDsKICAgIHNldFJhbmdlKGluZGV4ICsgaW5zZXJ0aW9uTGVuZ3RoLCB0aGlzLmxlbmd0aCwgdGhpcywgaW5kZXgpOwogICAgc2V0QWxsKGluZGV4LCBpdGVyYWJsZSk7CiAgfQoKICB2b2lkIHNldEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPFQ+IGl0ZXJhYmxlKSB7CiAgICBpZiAoaXRlcmFibGUgaXMgTGlzdCkgewogICAgICBzZXRSYW5nZShpbmRleCwgaW5kZXggKyBpdGVyYWJsZS5sZW5ndGgsIGl0ZXJhYmxlKTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAoVCBlbGVtZW50IGluIGl0ZXJhYmxlKSB7CiAgICAgICAgdGhpc1tpbmRleCsrXSA9IGVsZW1lbnQ7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgcmVtb3ZlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICBMaXN0cy5jb3B5KHRoaXMsIGVuZCwgdGhpcywgc3RhcnQsIHRoaXMubGVuZ3RoIC0gZW5kKTsKICAgIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGggLSAoZW5kIC0gc3RhcnQpOwogIH0KCiAgTGlzdDxUPiBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKSB7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBpZiAobGVuZ3RoID09IDApIHJldHVybiA8VD5bXTsKICAgIExpc3QgbGlzdCA9IG5ldyBfTGlzdChsZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBsaXN0W2ldID0gdGhpc1tzdGFydCArIGldOwogICAgfQogICAgdmFyIHJlc3VsdCA9IG5ldyBfR3Jvd2FibGVMaXN0PFQ+Ll93aXRoRGF0YShsaXN0KTsKICAgIHJlc3VsdC5fc2V0TGVuZ3RoKGxlbmd0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgZmFjdG9yeSBfR3Jvd2FibGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHZhciBkYXRhID0gX2FsbG9jYXRlRGF0YShsZW5ndGgpOwogICAgdmFyIHJlc3VsdCA9IG5ldyBfR3Jvd2FibGVMaXN0PFQ+Ll93aXRoRGF0YShkYXRhKTsKICAgIGlmIChsZW5ndGggPiAwKSB7CiAgICAgIHJlc3VsdC5fc2V0TGVuZ3RoKGxlbmd0aCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgZmFjdG9yeSBfR3Jvd2FibGVMaXN0LndpdGhDYXBhY2l0eShpbnQgY2FwYWNpdHkpIHsKICAgIHZhciBkYXRhID0gX2FsbG9jYXRlRGF0YShjYXBhY2l0eSk7CiAgICByZXR1cm4gbmV3IF9Hcm93YWJsZUxpc3Q8VD4uX3dpdGhEYXRhKGRhdGEpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLAogICAgICBbX0dyb3dhYmxlTGlzdCwgInJlc3VsdC10eXBlLXVzZXMtcGFzc2VkLXR5cGUtYXJndW1lbnRzIl0pCiAgZmFjdG9yeSBfR3Jvd2FibGVMaXN0Ll93aXRoRGF0YShfTGlzdCBkYXRhKSBuYXRpdmUgIkdyb3dhYmxlTGlzdF9hbGxvY2F0ZSI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0IF9jYXBhY2l0eSBuYXRpdmUgIkdyb3dhYmxlTGlzdF9nZXRDYXBhY2l0eSI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0IGxlbmd0aCBuYXRpdmUgIkdyb3dhYmxlTGlzdF9nZXRMZW5ndGgiOwoKICB2b2lkIHNldCBsZW5ndGgoaW50IG5ld19sZW5ndGgpIHsKICAgIGludCBvbGRfY2FwYWNpdHkgPSBfY2FwYWNpdHk7CiAgICBpbnQgbmV3X2NhcGFjaXR5ID0gbmV3X2xlbmd0aDsKICAgIGlmIChuZXdfY2FwYWNpdHkgPiBvbGRfY2FwYWNpdHkpIHsKICAgICAgX2dyb3cobmV3X2NhcGFjaXR5KTsKICAgICAgX3NldExlbmd0aChuZXdfbGVuZ3RoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gV2UgYXJlIHNocmlua2luZy4gUGljayB0aGUgbWV0aG9kIHdoaWNoIGhhcyBmZXdlciB3cml0ZXMuCiAgICAvLyBJbiB0aGUgc2hyaW5rLXRvLWZpdCBwYXRoLCB3ZSB3cml0ZSB8bmV3X2NhcGFjaXR5ICsgbmV3X2xlbmd0aHwgd29yZHMKICAgIC8vIChudWxsIGluaXQgKyBjb3B5KS4KICAgIC8vIEluIHRoZSBub24tc2hyaW5rLXRvLWZpdCBwYXRoLCB3ZSB3cml0ZSB8bGVuZ3RoIC0gbmV3X2xlbmd0aHwgd29yZHMKICAgIC8vIChudWxsIG92ZXJ3cml0ZSkuCiAgICBmaW5hbCBib29sIHNob3VsZFNocmlua1RvRml0ID0KICAgICAgICAobmV3X2NhcGFjaXR5ICsgbmV3X2xlbmd0aCkgPCAobGVuZ3RoIC0gbmV3X2xlbmd0aCk7CiAgICBpZiAoc2hvdWxkU2hyaW5rVG9GaXQpIHsKICAgICAgX3NocmluayhuZXdfY2FwYWNpdHksIG5ld19sZW5ndGgpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgaSA9IG5ld19sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIHRoaXNbaV0gPSBudWxsOwogICAgICB9CiAgICB9CiAgICBfc2V0TGVuZ3RoKG5ld19sZW5ndGgpOwogIH0KCiAgdm9pZCBfc2V0TGVuZ3RoKGludCBuZXdfbGVuZ3RoKSBuYXRpdmUgIkdyb3dhYmxlTGlzdF9zZXRMZW5ndGgiOwoKICB2b2lkIF9zZXREYXRhKF9MaXN0IGFycmF5KSBuYXRpdmUgIkdyb3dhYmxlTGlzdF9zZXREYXRhIjsKCiAgVCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIG5hdGl2ZSAiR3Jvd2FibGVMaXN0X2dldEluZGV4ZWQiOwoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIFQgdmFsdWUpIHsKICAgIF9zZXRJbmRleGVkKGluZGV4LCB2YWx1ZSk7CiAgfQoKICB2b2lkIF9zZXRJbmRleGVkKGludCBpbmRleCwgVCB2YWx1ZSkgbmF0aXZlICJHcm93YWJsZUxpc3Rfc2V0SW5kZXhlZCI7CgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgYWRkKFQgdmFsdWUpIHsKICAgIHZhciBsZW4gPSBsZW5ndGg7CiAgICBpZiAobGVuID09IF9jYXBhY2l0eSkgewogICAgICBfZ3JvdyhfbmV4dENhcGFjaXR5KGxlbikpOwogICAgfQogICAgX3NldExlbmd0aChsZW4gKyAxKTsKICAgIHRoaXNbbGVuXSA9IHZhbHVlOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8VD4gaXRlcmFibGUpIHsKICAgIHZhciBsZW4gPSBsZW5ndGg7CiAgICBmaW5hbCBjaWQgPSBDbGFzc0lELmdldElEKGl0ZXJhYmxlKTsKICAgIGZpbmFsIGlzVk1MaXN0ID0gKGNpZCA9PSBDbGFzc0lELmNpZEFycmF5KSB8fAogICAgICAgIChjaWQgPT0gQ2xhc3NJRC5jaWRHcm93YWJsZU9iamVjdEFycmF5KSB8fAogICAgICAgIChjaWQgPT0gQ2xhc3NJRC5jaWRJbW11dGFibGVBcnJheSk7CiAgICBpZiAoaXNWTUxpc3QgfHwgKGl0ZXJhYmxlIGlzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlKSkgewogICAgICB2YXIgY2FwID0gX2NhcGFjaXR5OwogICAgICAvLyBQcmVncm93IGlmIHdlIGtub3cgaXRlcmFibGUubGVuZ3RoLgogICAgICB2YXIgaXRlckxlbiA9IGl0ZXJhYmxlLmxlbmd0aDsKICAgICAgdmFyIG5ld0xlbiA9IGxlbiArIGl0ZXJMZW47CiAgICAgIGlmIChuZXdMZW4gPiBjYXApIHsKICAgICAgICBkbyB7CiAgICAgICAgICBjYXAgPSBfbmV4dENhcGFjaXR5KGNhcCk7CiAgICAgICAgfSB3aGlsZSAobmV3TGVuID4gY2FwKTsKICAgICAgICBfZ3JvdyhjYXApOwogICAgICB9CiAgICAgIGlmIChpc1ZNTGlzdCkgewogICAgICAgIGlmIChpZGVudGljYWwoaXRlcmFibGUsIHRoaXMpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICAgIH0KICAgICAgICB0aGlzLl9zZXRMZW5ndGgobmV3TGVuKTsKICAgICAgICBmaW5hbCBMaXN0QmFzZTxUPiBpdGVyYWJsZUFzTGlzdCA9IGl0ZXJhYmxlOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlckxlbjsgaSsrKSB7CiAgICAgICAgICB0aGlzW2xlbisrXSA9IGl0ZXJhYmxlQXNMaXN0W2ldOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIEl0ZXJhdG9yIGl0ID0gaXRlcmFibGUuaXRlcmF0b3I7CiAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHJldHVybjsKICAgIGRvIHsKICAgICAgd2hpbGUgKGxlbiA8IF9jYXBhY2l0eSkgewogICAgICAgIGludCBuZXdMZW4gPSBsZW4gKyAxOwogICAgICAgIHRoaXMuX3NldExlbmd0aChuZXdMZW4pOwogICAgICAgIHRoaXNbbGVuXSA9IGl0LmN1cnJlbnQ7CiAgICAgICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSByZXR1cm47CiAgICAgICAgaWYgKHRoaXMubGVuZ3RoICE9IG5ld0xlbikgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgICBsZW4gPSBuZXdMZW47CiAgICAgIH0KICAgICAgX2dyb3coX25leHRDYXBhY2l0eShfY2FwYWNpdHkpKTsKICAgIH0gd2hpbGUgKHRydWUpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgVCByZW1vdmVMYXN0KCkgewogICAgdmFyIGxlbiA9IGxlbmd0aCAtIDE7CiAgICB2YXIgZWxlbSA9IHRoaXNbbGVuXTsKICAgIHRoaXMubGVuZ3RoID0gbGVuOwogICAgcmV0dXJuIGVsZW07CiAgfQoKICBUIGdldCBmaXJzdCB7CiAgICBpZiAobGVuZ3RoID4gMCkgcmV0dXJuIHRoaXNbMF07CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIFQgZ2V0IGxhc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzW2xlbmd0aCAtIDFdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBUIGdldCBzaW5nbGUgewogICAgaWYgKGxlbmd0aCA9PSAxKSByZXR1cm4gdGhpc1swXTsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgfQoKICAvLyBTaGFyZWQgYXJyYXkgdXNlZCBhcyBiYWNraW5nIGZvciBuZXcgZW1wdHkgZ3Jvd2FibGUgYXJyYXlzLgogIHN0YXRpYyBmaW5hbCBfTGlzdCBfZW1wdHlMaXN0ID0gbmV3IF9MaXN0KDApOwoKICBzdGF0aWMgX0xpc3QgX2FsbG9jYXRlRGF0YShpbnQgY2FwYWNpdHkpIHsKICAgIGlmIChjYXBhY2l0eSA9PSAwKSB7CiAgICAgIC8vIFVzZSBzaGFyZWQgZW1wdHkgbGlzdCBhcyBiYWNraW5nLgogICAgICByZXR1cm4gX2VtcHR5TGlzdDsKICAgIH0KICAgIC8vIFJvdW5kIHVwIHNpemUgdG8gdGhlIG5leHQgb2RkIG51bWJlciwgc2luY2UgdGhpcyBpcyBmcmVlCiAgICAvLyBiZWNhdXNlIG9mIGFsaWdubWVudCByZXF1aXJlbWVudHMgb2YgdGhlIEdDLgogICAgcmV0dXJuIG5ldyBfTGlzdChjYXBhY2l0eSB8IDEpOwogIH0KCiAgLy8gR3JvdyBmcm9tIDAgdG8gMywgYW5kIHRoZW4gZG91YmxlICsgMS4KICBpbnQgX25leHRDYXBhY2l0eShpbnQgb2xkX2NhcGFjaXR5KSA9PiAob2xkX2NhcGFjaXR5ICogMikgfCAzOwoKICB2b2lkIF9ncm93KGludCBuZXdfY2FwYWNpdHkpIHsKICAgIHZhciBuZXdEYXRhID0gX2FsbG9jYXRlRGF0YShuZXdfY2FwYWNpdHkpOwogICAgLy8gVGhpcyBpcyBhIHdvcmstYXJvdW5kIGZvciBkYXJ0YnVnLmNvbS8zMDA5MDogYXJyYXktYm91bmQtY2hlY2sKICAgIC8vIGdlbmVyYWxpemF0aW9uIGNhdXNlcyBleGNlc3NpdmUgZGVvcHRpbWl6YXRpb25zIGJlY2F1c2UgaXQKICAgIC8vIGhvaXN0cyBDaGVja0FycmF5Qm91bmQoaSwgLi4uKSBvdXQgb2YgdGhlIGxvb3AgYmVsb3cgYW5kIHR1cm5zIGl0CiAgICAvLyBpbnRvIENoZWNrQXJyYXlCb3VuZChsZW5ndGggLSAxLCAuLi4pLiBXaGljaCBkZW9wdGltaXplcwogICAgLy8gaWYgbGVuZ3RoID09IDAuIEhvd2V2ZXIgdGhlIGxvb3AgaXRzZWxmIGRvZXMgbm90IGV4ZWN1dGUKICAgIC8vIGlmIGxlbmd0aCA9PSAwLgogICAgaWYgKGxlbmd0aCA+IDApIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIG5ld0RhdGFbaV0gPSB0aGlzW2ldOwogICAgICB9CiAgICB9CiAgICBfc2V0RGF0YShuZXdEYXRhKTsKICB9CgogIHZvaWQgX3NocmluayhpbnQgbmV3X2NhcGFjaXR5LCBpbnQgbmV3X2xlbmd0aCkgewogICAgdmFyIG5ld0RhdGEgPSBfYWxsb2NhdGVEYXRhKG5ld19jYXBhY2l0eSk7CiAgICAvLyBUaGlzIGlzIGEgd29yay1hcm91bmQgZm9yIGRhcnRidWcuY29tLzMwMDkwLiBTZWUgdGhlIGNvbW1lbnQgaW4gX2dyb3cuCiAgICBpZiAobmV3X2xlbmd0aCA+IDApIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZXdfbGVuZ3RoOyBpKyspIHsKICAgICAgICBuZXdEYXRhW2ldID0gdGhpc1tpXTsKICAgICAgfQogICAgfQogICAgX3NldERhdGEobmV3RGF0YSk7CiAgfQoKICAvLyBJdGVyYWJsZSBpbnRlcmZhY2UuCgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgZm9yRWFjaChmKFQgZWxlbWVudCkpIHsKICAgIGludCBpbml0aWFsTGVuZ3RoID0gbGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBmKHRoaXNbaV0pOwogICAgICBpZiAobGVuZ3RoICE9IGluaXRpYWxMZW5ndGgpIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICB9CiAgfQoKICBTdHJpbmcgam9pbihbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgewogICAgZmluYWwgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm4gIiI7CiAgICBpZiAobGVuZ3RoID09IDEpIHJldHVybiAiJHt0aGlzWzBdfSI7CiAgICBpZiAoc2VwYXJhdG9yLmlzTm90RW1wdHkpIHJldHVybiBfam9pbldpdGhTZXBhcmF0b3Ioc2VwYXJhdG9yKTsKICAgIHZhciBpID0gMDsKICAgIHZhciBjb2RlVW5pdENvdW50ID0gMDsKICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7CiAgICAgIGZpbmFsIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICAvLyBXaGlsZSBsaXN0IGNvbnRhaW5zIG9uZS1ieXRlIHN0cmluZ3MuCiAgICAgIGlmIChlbGVtZW50IGlzIF9PbmVCeXRlU3RyaW5nKSB7CiAgICAgICAgY29kZVVuaXRDb3VudCArPSBlbGVtZW50Lmxlbmd0aDsKICAgICAgICBpKys7CiAgICAgICAgLy8gTG9vcCBiYWNrIHdoaWxlIHN0cmluZ3MgYXJlIG9uZS1ieXRlIHN0cmluZ3MuCiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgLy8gT3RoZXJ3aXNlLCBuZXZlciBsb29wIGJhY2sgdG8gdGhlIG91dGVyIGxvb3AsIGFuZAogICAgICAvLyBoYW5kbGUgdGhlIHJlbWFpbmluZyBzdHJpbmdzIGJlbG93LgoKICAgICAgLy8gTG9vcCB3aGlsZSBlbGVtZW50cyBhcmUgc3RyaW5ncywKICAgICAgZmluYWwgaW50IGZpcnN0Tm9uT25lQnl0ZVN0cmluZ0xpbWl0ID0gaTsKICAgICAgdmFyIG5leHRFbGVtZW50ID0gZWxlbWVudDsKICAgICAgd2hpbGUgKG5leHRFbGVtZW50IGlzIFN0cmluZykgewogICAgICAgIGkrKzsKICAgICAgICBpZiAoaSA9PSBsZW5ndGgpIHsKICAgICAgICAgIHJldHVybiBfU3RyaW5nQmFzZS5fY29uY2F0UmFuZ2VOYXRpdmUodGhpcywgMCwgbGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgbmV4dEVsZW1lbnQgPSB0aGlzW2ldOwogICAgICB9CgogICAgICAvLyBOb3QgYWxsIGVsZW1lbnRzIGFyZSBzdHJpbmdzLCBzbyBhbGxvY2F0ZSBhIG5ldyBiYWNraW5nIGFycmF5LgogICAgICBmaW5hbCBsaXN0ID0gbmV3IF9MaXN0KGxlbmd0aCk7CiAgICAgIGZvciAoaW50IGNvcHlJbmRleCA9IDA7IGNvcHlJbmRleCA8IGk7IGNvcHlJbmRleCsrKSB7CiAgICAgICAgbGlzdFtjb3B5SW5kZXhdID0gdGhpc1tjb3B5SW5kZXhdOwogICAgICB9CiAgICAgIC8vIElzIG5vbi16ZXJvIGlmIGxpc3QgY29udGFpbnMgYSBub24tb25lYnl0ZSBzdHJpbmcuCiAgICAgIHZhciBvbmVieXRlQ2FuYXJ5ID0gaSAtIGZpcnN0Tm9uT25lQnl0ZVN0cmluZ0xpbWl0OwogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGZpbmFsIFN0cmluZyBlbGVtZW50U3RyaW5nID0gIiRuZXh0RWxlbWVudCI7CiAgICAgICAgb25lYnl0ZUNhbmFyeSB8PQogICAgICAgICAgICAoQ2xhc3NJRC5nZXRJRChlbGVtZW50U3RyaW5nKSBeIENsYXNzSUQuY2lkT25lQnl0ZVN0cmluZyk7CiAgICAgICAgbGlzdFtpXSA9IGVsZW1lbnRTdHJpbmc7CiAgICAgICAgY29kZVVuaXRDb3VudCArPSBlbGVtZW50U3RyaW5nLmxlbmd0aDsKICAgICAgICBpKys7CiAgICAgICAgaWYgKGkgPT0gbGVuZ3RoKSBicmVhazsKICAgICAgICBuZXh0RWxlbWVudCA9IHRoaXNbaV07CiAgICAgIH0KICAgICAgaWYgKG9uZWJ5dGVDYW5hcnkgPT0gMCkgewogICAgICAgIC8vIEFsbCBlbGVtZW50cyByZXR1cm5lZCBhIG9uZS1ieXRlIHN0cmluZyBmcm9tIHRvU3RyaW5nLgogICAgICAgIHJldHVybiBfT25lQnl0ZVN0cmluZy5fY29uY2F0QWxsKGxpc3QsIGNvZGVVbml0Q291bnQpOwogICAgICB9CiAgICAgIHJldHVybiBfU3RyaW5nQmFzZS5fY29uY2F0UmFuZ2VOYXRpdmUobGlzdCwgMCwgbGVuZ3RoKTsKICAgIH0KICAgIC8vIEFsbCBlbGVtZW50cyB3ZXJlIG9uZS1ieXRlIHN0cmluZ3MuCiAgICByZXR1cm4gX09uZUJ5dGVTdHJpbmcuX2NvbmNhdEFsbCh0aGlzLCBjb2RlVW5pdENvdW50KTsKICB9CgogIFN0cmluZyBfam9pbldpdGhTZXBhcmF0b3IoU3RyaW5nIHNlcGFyYXRvcikgewogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGJ1ZmZlci53cml0ZSh0aGlzWzBdKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykgewogICAgICBidWZmZXIud3JpdGUoc2VwYXJhdG9yKTsKICAgICAgYnVmZmVyLndyaXRlKHRoaXNbaV0pOwogICAgfQogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgVCBlbGVtZW50QXQoaW50IGluZGV4KSB7CiAgICByZXR1cm4gdGhpc1tpbmRleF07CiAgfQoKICBib29sIGdldCBpc0VtcHR5IHsKICAgIHJldHVybiB0aGlzLmxlbmd0aCA9PSAwOwogIH0KCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiAhaXNFbXB0eTsKCiAgdm9pZCBjbGVhcigpIHsKICAgIHRoaXMubGVuZ3RoID0gMDsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+IExpc3RCYXNlLmxpc3RUb1N0cmluZyh0aGlzKTsKCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgSXRlcmF0b3I8VD4gZ2V0IGl0ZXJhdG9yIHsKICAgIHJldHVybiBuZXcgTGlzdEl0ZXJhdG9yPFQ+KHRoaXMpOwogIH0KCiAgTGlzdDxUPiB0b0xpc3Qoe2Jvb2wgZ3Jvd2FibGU6IHRydWV9KSB7CiAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBpZiAobGVuZ3RoID4gMCkgewogICAgICBMaXN0IGxpc3QgPSBncm93YWJsZSA/IG5ldyBfTGlzdChsZW5ndGgpIDogbmV3IF9MaXN0PFQ+KGxlbmd0aCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBsaXN0W2ldID0gdGhpc1tpXTsKICAgICAgfQogICAgICBpZiAoIWdyb3dhYmxlKSByZXR1cm4gbGlzdDsKICAgICAgdmFyIHJlc3VsdCA9IG5ldyBfR3Jvd2FibGVMaXN0PFQ+Ll93aXRoRGF0YShsaXN0KTsKICAgICAgcmVzdWx0Ll9zZXRMZW5ndGgobGVuZ3RoKTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHJldHVybiBncm93YWJsZSA/IDxUPltdIDogbmV3IExpc3Q8VD4oMCk7CiAgfQoKICBTZXQ8VD4gdG9TZXQoKSB7CiAgICByZXR1cm4gbmV3IFNldDxUPi5mcm9tKHRoaXMpOwogIH0KfQqBiwBOTjwBDwEeARotJis0BiAUDgYhE0EbBAEaHiUdQwYdEwQBICwgFRUIBhIEATQnNAY6USQGK01MQCRBHQQBMRw6DSQhCAYEASk5Oy8EASo/HiMjJyEGNx8TBAEmJjcWIQYTBAE1KDEEASJBTgE0HjcBNB4yASQiIycbHg4GQU0bSxkjPR0pDTIYCAYcBAFDATwBPQEqHwQBSQEkHhYWHCEGGRcEASYWKTIzLD0bLSUiGg0kIBQIFik3CiE1LCsKEAgGJSAJIB4hICRQFggnFAQBHhMaGhcRBAEQJCwEAQ8tLAQBESU9KgQBQTABLRkrGQZANCQEASxBASEvRkJJQEAXFikeCAYXBAEzL04aLR4IBhcEARkBHh8gJxJQBgQBKSQgKkQPGxkfLycpDTkSCDstASowISYNG0IKHwgBSCY8Kwg8OhU1GUchLw0gHwggQj8IPgYrOwQBMC4bLB8dBh4EARsYBAEVHQQBIwERFQQBNAEeHSYEASoeFkcpGwgiOSEVBi4EARMiBAIBI2RhcnQ6Y29yZS1wYXRjaC9ncm93YWJsZV9hcnJheS5kYXJ0UG9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL19pbnRlcm5hbC92bS9saWIvaW1tdXRhYmxlX21hcC5kYXJ0la0vLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgovLy8gSW1tdXRhYmxlIG1hcCBjbGFzcyBmb3IgY29tcGlsZXIgZ2VuZXJhdGVkIG1hcCBsaXRlcmFscy4KLy8gVE9ETyhscm4pOiBFeHRlbmQgTWFwQmFzZSB3aXRoIFVubW9kaWZpYWJsZU1hcE1peGluIHdoZW4gbWl4aW5zCi8vIHN1cHBvcnQgZm9yd2FyZGluZyBjb25zdCBjb25zdHJ1Y3RvcnMuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0ltbXV0YWJsZU1hcDxLLCBWPiBpbXBsZW1lbnRzIE1hcDxLLCBWPiB7CiAgZmluYWwgX0ltbXV0YWJsZUxpc3QgX2t2UGFpcnM7CgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBjb25zdCBfSW1tdXRhYmxlTWFwLl9jcmVhdGUoX0ltbXV0YWJsZUxpc3Qga2V5VmFsdWVQYWlycykKICAgICAgOiBfa3ZQYWlycyA9IGtleVZhbHVlUGFpcnM7CgogIE1hcDxLMiwgVjI+IGNhc3Q8SzIsIFYyPigpID0+IE1hcC5jYXN0RnJvbTxLLCBWLCBLMiwgVjI+KHRoaXMpOwogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgewogICAgLy8gVG8gcHJlc2VydmUgdGhlIGtleS12YWx1ZSBvcmRlciBvZiB0aGUgbWFwIGxpdGVyYWwsIHRoZSBrZXlzIGFyZQogICAgLy8gbm90IHNvcnRlZC4gTmVlZCB0byBkbyBsaW5lYXIgc2VhcmNoIG9yIGltcGxlbWVudCBhbiBhZGRpdGlvbmFsCiAgICAvLyBsb29rdXAgdGFibGUuCiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9rdlBhaXJzLmxlbmd0aCAtIDE7IGkgKz0gMikgewogICAgICBpZiAoa2V5ID09IF9rdlBhaXJzW2ldKSB7CiAgICAgICAgcmV0dXJuIF9rdlBhaXJzW2kgKyAxXTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBib29sIGdldCBpc0VtcHR5IHsKICAgIHJldHVybiBfa3ZQYWlycy5sZW5ndGggPT0gMDsKICB9CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gIWlzRW1wdHk7CgogIGludCBnZXQgbGVuZ3RoIHsKICAgIHJldHVybiBfa3ZQYWlycy5sZW5ndGggfi8gMjsKICB9CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoSyBrZXksIFYgdmFsdWUpKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9rdlBhaXJzLmxlbmd0aDsgaSArPSAyKSB7CiAgICAgIGYoX2t2UGFpcnNbaV0sIF9rdlBhaXJzW2kgKyAxXSk7CiAgICB9CiAgfQoKICBJdGVyYWJsZTxLPiBnZXQga2V5cyB7CiAgICByZXR1cm4gbmV3IF9JbW11dGFibGVNYXBLZXlJdGVyYWJsZTxLPih0aGlzKTsKICB9CgogIEl0ZXJhYmxlPFY+IGdldCB2YWx1ZXMgewogICAgcmV0dXJuIG5ldyBfSW1tdXRhYmxlTWFwVmFsdWVJdGVyYWJsZTxWPih0aGlzKTsKICB9CgogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfa3ZQYWlycy5sZW5ndGg7IGkgKz0gMikgewogICAgICBpZiAoa2V5ID09IF9rdlBhaXJzW2ldKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpIHsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgX2t2UGFpcnMubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgaWYgKHZhbHVlID09IF9rdlBhaXJzW2ldKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KEsga2V5LCBWIHZhbHVlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHNldCB2YWx1ZSBpbiB1bm1vZGlmaWFibGUgTWFwIik7CiAgfQoKICB2b2lkIGFkZEFsbChNYXA8SywgVj4gb3RoZXIpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3Qgc2V0IHZhbHVlIGluIHVubW9kaWZpYWJsZSBNYXAiKTsKICB9CgogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBzZXQgdmFsdWUgaW4gdW5tb2RpZmlhYmxlIE1hcCIpOwogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgY2xlYXIgdW5tb2RpZmlhYmxlIE1hcCIpOwogIH0KCiAgViByZW1vdmUoT2JqZWN0IGtleSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSB1bm1vZGlmaWFibGUgTWFwIik7CiAgfQoKICBJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZ2V0IGVudHJpZXMgPT4KICAgICAgbmV3IF9JbW11dGFibGVNYXBFbnRyeUl0ZXJhYmxlPEssIFY+KHRoaXMpOwoKICBNYXA8SzIsIFYyPiBtYXA8SzIsIFYyPihNYXBFbnRyeTxLMiwgVjI+IGYoSyBrZXksIFYgdmFsdWUpKSB7CiAgICB2YXIgcmVzdWx0ID0gPEsyLCBWMj57fTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX2t2UGFpcnMubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgdmFyIGVudHJ5ID0gZihfa3ZQYWlyc1tpXSwgX2t2UGFpcnNbaSArIDFdKTsKICAgICAgcmVzdWx0W2VudHJ5LmtleV0gPSBlbnRyeS52YWx1ZTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIGFkZEVudHJpZXMoSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IG5ld0VudHJpZXMpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBNYXAiKTsKICB9CgogIFYgdXBkYXRlKEsga2V5LCBWIHVwZGF0ZShWIHZhbHVlKSwge1YgaWZBYnNlbnQoKX0pIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBNYXAiKTsKICB9CgogIHZvaWQgdXBkYXRlQWxsKFYgdXBkYXRlKEsga2V5LCBWIHZhbHVlKSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIE1hcCIpOwogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHByZWRpY2F0ZShLIGtleSwgViB2YWx1ZSkpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBNYXAiKTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+IE1hcEJhc2UubWFwVG9TdHJpbmcodGhpcyk7Cn0KCmNsYXNzIF9JbW11dGFibGVNYXBLZXlJdGVyYWJsZTxFPiBleHRlbmRzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+IHsKICBmaW5hbCBfSW1tdXRhYmxlTWFwIF9tYXA7CiAgX0ltbXV0YWJsZU1hcEtleUl0ZXJhYmxlKHRoaXMuX21hcCk7CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciB7CiAgICByZXR1cm4gbmV3IF9JbW11dGFibGVNYXBLZXlJdGVyYXRvcjxFPihfbWFwKTsKICB9CgogIGludCBnZXQgbGVuZ3RoID0+IF9tYXAubGVuZ3RoOwp9CgpjbGFzcyBfSW1tdXRhYmxlTWFwVmFsdWVJdGVyYWJsZTxFPiBleHRlbmRzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+IHsKICBmaW5hbCBfSW1tdXRhYmxlTWFwIF9tYXA7CiAgX0ltbXV0YWJsZU1hcFZhbHVlSXRlcmFibGUodGhpcy5fbWFwKTsKCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yIHsKICAgIHJldHVybiBuZXcgX0ltbXV0YWJsZU1hcFZhbHVlSXRlcmF0b3I8RT4oX21hcCk7CiAgfQoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfbWFwLmxlbmd0aDsKfQoKY2xhc3MgX0ltbXV0YWJsZU1hcEVudHJ5SXRlcmFibGU8SywgVj4KICAgIGV4dGVuZHMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IHsKICBmaW5hbCBfSW1tdXRhYmxlTWFwIF9tYXA7CiAgX0ltbXV0YWJsZU1hcEVudHJ5SXRlcmFibGUodGhpcy5fbWFwKTsKCiAgSXRlcmF0b3I8TWFwRW50cnk8SywgVj4+IGdldCBpdGVyYXRvciB7CiAgICByZXR1cm4gbmV3IF9JbW11dGFibGVNYXBFbnRyeUl0ZXJhdG9yPEssIFY+KF9tYXApOwogIH0KCiAgaW50IGdldCBsZW5ndGggPT4gX21hcC5sZW5ndGg7Cn0KCmNsYXNzIF9JbW11dGFibGVNYXBLZXlJdGVyYXRvcjxFPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPEU+IHsKICBfSW1tdXRhYmxlTWFwIF9tYXA7CiAgaW50IF9uZXh0SW5kZXggPSAwOwogIEUgX2N1cnJlbnQ7CgogIF9JbW11dGFibGVNYXBLZXlJdGVyYXRvcih0aGlzLl9tYXApOwoKICBib29sIG1vdmVOZXh0KCkgewogICAgaW50IG5ld0luZGV4ID0gX25leHRJbmRleDsKICAgIGlmIChuZXdJbmRleCA8IF9tYXAubGVuZ3RoKSB7CiAgICAgIF9uZXh0SW5kZXggPSBuZXdJbmRleCArIDE7CiAgICAgIF9jdXJyZW50ID0gX21hcC5fa3ZQYWlyc1tuZXdJbmRleCAqIDJdOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIF9jdXJyZW50ID0gbnVsbDsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEUgZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnQ7Cn0KCmNsYXNzIF9JbW11dGFibGVNYXBWYWx1ZUl0ZXJhdG9yPEU+IGltcGxlbWVudHMgSXRlcmF0b3I8RT4gewogIF9JbW11dGFibGVNYXAgX21hcDsKICBpbnQgX25leHRJbmRleCA9IDA7CiAgRSBfY3VycmVudDsKCiAgX0ltbXV0YWJsZU1hcFZhbHVlSXRlcmF0b3IodGhpcy5fbWFwKTsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGludCBuZXdJbmRleCA9IF9uZXh0SW5kZXg7CiAgICBpZiAobmV3SW5kZXggPCBfbWFwLmxlbmd0aCkgewogICAgICBfbmV4dEluZGV4ID0gbmV3SW5kZXggKyAxOwogICAgICBfY3VycmVudCA9IF9tYXAuX2t2UGFpcnNbbmV3SW5kZXggKiAyICsgMV07CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgX2N1cnJlbnQgPSBudWxsOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgRSBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKfQoKY2xhc3MgX0ltbXV0YWJsZU1hcEVudHJ5SXRlcmF0b3I8SywgVj4gaW1wbGVtZW50cyBJdGVyYXRvcjxNYXBFbnRyeTxLLCBWPj4gewogIF9JbW11dGFibGVNYXAgX21hcDsKICBpbnQgX25leHRJbmRleCA9IDA7CiAgTWFwRW50cnk8SywgVj4gX2N1cnJlbnQ7CgogIF9JbW11dGFibGVNYXBFbnRyeUl0ZXJhdG9yKHRoaXMuX21hcCk7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpbnQgbmV3SW5kZXggPSBfbmV4dEluZGV4OwogICAgaWYgKG5ld0luZGV4IDwgX21hcC5sZW5ndGgpIHsKICAgICAgX25leHRJbmRleCA9IG5ld0luZGV4ICsgMTsKICAgICAgX2N1cnJlbnQgPSBuZXcgTWFwRW50cnk8SywgVj4oCiAgICAgICAgICBfbWFwLl9rdlBhaXJzW25ld0luZGV4ICogMl0sIF9tYXAuX2t2UGFpcnNbbmV3SW5kZXggKiAyICsgMV0pOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIF9jdXJyZW50ID0gbnVsbDsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIE1hcEVudHJ5PEssIFY+IGdldCBjdXJyZW50ID0+IF9jdXJyZW50Owp9CoDgAE5OPAEPAR4BPUMqGjEhARw8IgFCHkhHFTcgIAgGEQQBFSEEASMBEyEEASkzJwYEARkyBAEbNAQBITMgFQgGEgQBJTMiFQgGEgQBJkgEASFIBAEnSAQBEUEEARlHBAEqMgFAHTMzJwYTBAE5RQQBN0UEAS1FBAE1RQQBMgIBRxwnAR0yBAEhAgFJHCkBHTQEASECASc2HCkBKjcEASECATsWFg4BJwEUHyIhLhMGFRIEAR0CAT0WFg4BKQEUHyIhMhMGFRIEAR0CAU0WFhsBKQEUHyIhJUkTBhUSBAEqAgEiZGFydDpjb3JlLXBhdGNoL2ltbXV0YWJsZV9tYXAuZGFydEtvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vbGliL2ludGVnZXJzLmRhcnTAAFpmLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKYWJzdHJhY3QgY2xhc3MgX0ludGVnZXJJbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnRzIGludCB7CiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIG51bSBvcGVyYXRvciArKG51bSBvdGhlcikgPT4gb3RoZXIuX2FkZEZyb21JbnRlZ2VyKHRoaXMpOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBudW0gb3BlcmF0b3IgLShudW0gb3RoZXIpID0+IG90aGVyLl9zdWJGcm9tSW50ZWdlcih0aGlzKTsKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgbnVtIG9wZXJhdG9yICoobnVtIG90aGVyKSA9PiBvdGhlci5fbXVsRnJvbUludGVnZXIodGhpcyk7CgogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3Igfi8obnVtIG90aGVyKSB7CiAgICBpZiAoKG90aGVyIGlzIGludCkgJiYgKG90aGVyID09IDApKSB7CiAgICAgIHRocm93IGNvbnN0IEludGVnZXJEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbigpOwogICAgfQogICAgcmV0dXJuIG90aGVyLl90cnVuY0RpdkZyb21JbnRlZ2VyKHRoaXMpOwogIH0KCiAgZG91YmxlIG9wZXJhdG9yIC8obnVtIG90aGVyKSB7CiAgICByZXR1cm4gdGhpcy50b0RvdWJsZSgpIC8gb3RoZXIudG9Eb3VibGUoKTsKICB9CgogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgbnVtIG9wZXJhdG9yICUobnVtIG90aGVyKSB7CiAgICBpZiAoKG90aGVyIGlzIGludCkgJiYgKG90aGVyID09IDApKSB7CiAgICAgIHRocm93IGNvbnN0IEludGVnZXJEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbigpOwogICAgfQogICAgcmV0dXJuIG90aGVyLl9tb2R1bG9Gcm9tSW50ZWdlcih0aGlzKTsKICB9CgogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3IgLSgpIHsKICAgIHJldHVybiAwIC0gdGhpczsKICB9CgogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3IgJihpbnQgb3RoZXIpID0+IG90aGVyLl9iaXRBbmRGcm9tSW50ZWdlcih0aGlzKTsKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgaW50IG9wZXJhdG9yIHwoaW50IG90aGVyKSA9PiBvdGhlci5fYml0T3JGcm9tSW50ZWdlcih0aGlzKTsKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgaW50IG9wZXJhdG9yIF4oaW50IG90aGVyKSA9PiBvdGhlci5fYml0WG9yRnJvbUludGVnZXIodGhpcyk7CgogIG51bSByZW1haW5kZXIobnVtIG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIuX3JlbWFpbmRlckZyb21JbnRlZ2VyKHRoaXMpOwogIH0KCiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBpbnQgX2JpdEFuZEZyb21TbWkoX1NtaSBvdGhlcikgbmF0aXZlICJJbnRlZ2VyX2JpdEFuZEZyb21JbnRlZ2VyIjsKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIGludCBfYml0QW5kRnJvbUludGVnZXIoaW50IG90aGVyKSBuYXRpdmUgIkludGVnZXJfYml0QW5kRnJvbUludGVnZXIiOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgaW50IF9iaXRPckZyb21JbnRlZ2VyKGludCBvdGhlcikgbmF0aXZlICJJbnRlZ2VyX2JpdE9yRnJvbUludGVnZXIiOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgaW50IF9iaXRYb3JGcm9tSW50ZWdlcihpbnQgb3RoZXIpIG5hdGl2ZSAiSW50ZWdlcl9iaXRYb3JGcm9tSW50ZWdlciI7CiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBpbnQgX3NockZyb21JbnRlZ2VyKGludCBvdGhlcikgbmF0aXZlICJJbnRlZ2VyX3NockZyb21JbnRlZ2VyIjsKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIGludCBfc2hsRnJvbUludGVnZXIoaW50IG90aGVyKSBuYXRpdmUgIkludGVnZXJfc2hsRnJvbUludGVnZXIiOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgaW50IF9hZGRGcm9tSW50ZWdlcihpbnQgb3RoZXIpIG5hdGl2ZSAiSW50ZWdlcl9hZGRGcm9tSW50ZWdlciI7CiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBpbnQgX3N1YkZyb21JbnRlZ2VyKGludCBvdGhlcikgbmF0aXZlICJJbnRlZ2VyX3N1YkZyb21JbnRlZ2VyIjsKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIGludCBfbXVsRnJvbUludGVnZXIoaW50IG90aGVyKSBuYXRpdmUgIkludGVnZXJfbXVsRnJvbUludGVnZXIiOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgaW50IF90cnVuY0RpdkZyb21JbnRlZ2VyKGludCBvdGhlcikgbmF0aXZlICJJbnRlZ2VyX3RydW5jRGl2RnJvbUludGVnZXIiOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgaW50IF9tb2R1bG9Gcm9tSW50ZWdlcihpbnQgb3RoZXIpIG5hdGl2ZSAiSW50ZWdlcl9tb2R1bG9Gcm9tSW50ZWdlciI7CiAgaW50IF9yZW1haW5kZXJGcm9tSW50ZWdlcihpbnQgb3RoZXIpIHsKICAgIHJldHVybiBvdGhlciAtIChvdGhlciB+LyB0aGlzKSAqIHRoaXM7CiAgfQoKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgaW50IG9wZXJhdG9yID4+KGludCBvdGhlcikgPT4gb3RoZXIuX3NockZyb21JbnRlZ2VyKHRoaXMpOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3IgPDwoaW50IG90aGVyKSA9PiBvdGhlci5fc2hsRnJvbUludGVnZXIodGhpcyk7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIGJvb2wgb3BlcmF0b3IgPChudW0gb3RoZXIpIHsKICAgIHJldHVybiBvdGhlciA+IHRoaXM7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBib29sIG9wZXJhdG9yID4obnVtIG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIuX2dyZWF0ZXJUaGFuRnJvbUludGVnZXIodGhpcyk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBib29sIG9wZXJhdG9yID49KG51bSBvdGhlcikgewogICAgcmV0dXJuICh0aGlzID09IG90aGVyKSB8fCAodGhpcyA+IG90aGVyKTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIGJvb2wgb3BlcmF0b3IgPD0obnVtIG90aGVyKSB7CiAgICByZXR1cm4gKHRoaXMgPT0gb3RoZXIpIHx8ICh0aGlzIDwgb3RoZXIpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIGJvb2wgX2dyZWF0ZXJUaGFuRnJvbUludGVnZXIoaW50IG90aGVyKQogICAgICBuYXRpdmUgIkludGVnZXJfZ3JlYXRlclRoYW5Gcm9tSW50ZWdlciI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMgbnVtKSB7CiAgICAgIHJldHVybiBvdGhlci5fZXF1YWxUb0ludGVnZXIodGhpcyk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgYm9vbCBfZXF1YWxUb0ludGVnZXIoaW50IG90aGVyKSBuYXRpdmUgIkludGVnZXJfZXF1YWxUb0ludGVnZXIiOwogIGludCBhYnMoKSB7CiAgICByZXR1cm4gdGhpcyA8IDAgPyAtdGhpcyA6IHRoaXM7CiAgfQoKICBpbnQgZ2V0IHNpZ24gewogICAgcmV0dXJuICh0aGlzID4gMCkgPyAxIDogKHRoaXMgPCAwKSA/IC0xIDogMDsKICB9CgogIGJvb2wgZ2V0IGlzRXZlbiA9PiAoKHRoaXMgJiAxKSA9PSAwKTsKICBib29sIGdldCBpc09kZCA9PiAhaXNFdmVuOwogIGJvb2wgZ2V0IGlzTmFOID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzTmVnYXRpdmUgPT4gdGhpcyA8IDA7CiAgYm9vbCBnZXQgaXNJbmZpbml0ZSA9PiBmYWxzZTsKICBib29sIGdldCBpc0Zpbml0ZSA9PiB0cnVlOwoKICBpbnQgdG9VbnNpZ25lZChpbnQgd2lkdGgpIHsKICAgIHJldHVybiB0aGlzICYgKCgxIDw8IHdpZHRoKSAtIDEpOwogIH0KCiAgaW50IHRvU2lnbmVkKGludCB3aWR0aCkgewogICAgLy8gVGhlIHZhbHVlIG9mIGJpbmFyeSBudW1iZXIgd2VpZ2h0cyBlYWNoIGJpdCBieSBhIHBvd2VyIG9mIHR3by4gIFRoZQogICAgLy8gdHdvcy1jb21wbGVtZW50IHZhbHVlIHdlaWdodHMgdGhlIHNpZ24gYml0IG5lZ2F0aXZlbHkuICBXZSBjb21wdXRlIHRoZQogICAgLy8gdmFsdWUgb2YgdGhlIG5lZ2F0aXZlIHdlaWdodGluZyBieSBpc29sYXRpbmcgdGhlIHNpZ24gYml0IHdpdGggdGhlCiAgICAvLyBjb3JyZWN0IHBvd2VyIG9mIHR3byB3ZWlnaHRpbmcgYW5kIHN1YnRyYWN0aW5nIGl0IGZyb20gdGhlIHZhbHVlIG9mIHRoZQogICAgLy8gbG93ZXIgYml0cy4KICAgIGludCBzaWduTWFzayA9IDEgPDwgKHdpZHRoIC0gMSk7CiAgICByZXR1cm4gKHRoaXMgJiAoc2lnbk1hc2sgLSAxKSkgLSAodGhpcyAmIHNpZ25NYXNrKTsKICB9CgogIGludCBjb21wYXJlVG8obnVtIG90aGVyKSB7CiAgICBjb25zdCBpbnQgRVFVQUwgPSAwLCBMRVNTID0gLTEsIEdSRUFURVIgPSAxOwogICAgaWYgKG90aGVyIGlzIGRvdWJsZSkgewogICAgICBjb25zdCBpbnQgTUFYX0VYQUNUX0lOVF9UT19ET1VCTEUgPSA5MDA3MTk5MjU0NzQwOTkyOyAvLyAyXjUzLgogICAgICBjb25zdCBpbnQgTUlOX0VYQUNUX0lOVF9UT19ET1VCTEUgPSAtTUFYX0VYQUNUX0lOVF9UT19ET1VCTEU7CiAgICAgIGNvbnN0IGJvb2wgbGltaXRJbnRzVG82NEJpdHMgPSAoKDEgPDwgNjQpID09IDApOwogICAgICBpZiAobGltaXRJbnRzVG82NEJpdHMpIHsKICAgICAgICAvLyBXaXRoIGludGVnZXJzIGxpbWl0ZWQgdG8gNjQgYml0cywgZG91YmxlLnRvSW50KCkgY2xhbXBzCiAgICAgICAgLy8gZG91YmxlIHZhbHVlIHRvIGZpdCBpbnRvIHRoZSBNSU5fSU5UNjQuLk1BWF9JTlQ2NCByYW5nZS4KICAgICAgICAvLyBDaGVjayBpZiB0aGUgZG91YmxlIHZhbHVlIGlzIG91dHNpZGUgb2YgdGhpcyByYW5nZS4KICAgICAgICAvLyBUaGlzIGNoZWNrIGhhbmRsZXMgKy8taW5maW5pdHkgYXMgd2VsbC4KICAgICAgICBjb25zdCBkb3VibGUgbWluSW50NjRBc0RvdWJsZSA9IC05MjIzMzcyMDM2ODU0Nzc1ODA4LjA7CiAgICAgICAgLy8gTUFYX0lOVDY0IGlzIG5vdCBwcmVjaXNlbHkgcmVwcmVzZW50YWJsZSBpbiBkb3VibGVzLCBzbwogICAgICAgIC8vIGNoZWNrIGFnYWluc3QgKE1BWF9JTlQ2NCArIDEpLgogICAgICAgIGNvbnN0IGRvdWJsZSBtYXhJbnQ2NFBsdXMxQXNEb3VibGUgPSA5MjIzMzcyMDM2ODU0Nzc1ODA4LjA7CiAgICAgICAgaWYgKG90aGVyIDwgbWluSW50NjRBc0RvdWJsZSkgewogICAgICAgICAgcmV0dXJuIEdSRUFURVI7CiAgICAgICAgfSBlbHNlIGlmIChvdGhlciA+PSBtYXhJbnQ2NFBsdXMxQXNEb3VibGUpIHsKICAgICAgICAgIHJldHVybiBMRVNTOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAob3RoZXIuaXNJbmZpbml0ZSkgewogICAgICAgICAgcmV0dXJuIG90aGVyLmlzTmVnYXRpdmUgPyBHUkVBVEVSIDogTEVTUzsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKG90aGVyLmlzTmFOKSB7CiAgICAgICAgcmV0dXJuIExFU1M7CiAgICAgIH0KICAgICAgaWYgKE1JTl9FWEFDVF9JTlRfVE9fRE9VQkxFIDw9IHRoaXMgJiYgdGhpcyA8PSBNQVhfRVhBQ1RfSU5UX1RPX0RPVUJMRSkgewogICAgICAgIC8vIExldCB0aGUgZG91YmxlIGltcGxlbWVudGF0aW9uIGRlYWwgd2l0aCAtMC4wLgogICAgICAgIHJldHVybiAtKG90aGVyLmNvbXBhcmVUbyh0aGlzLnRvRG91YmxlKCkpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBJZiBhYnMob3RoZXIpID4gTUFYX0VYQUNUX0lOVF9UT19ET1VCTEUsIHRoZW4gb3RoZXIgaGFzIGFuIGludGVnZXIKICAgICAgICAvLyB2YWx1ZSAobm8gYml0cyBiZWxvdyB0aGUgZGVjaW1hbCBwb2ludCkuCiAgICAgICAgb3RoZXIgPSBvdGhlci50b0ludCgpOwogICAgICB9CiAgICB9CiAgICBpZiAodGhpcyA8IG90aGVyKSB7CiAgICAgIHJldHVybiBMRVNTOwogICAgfSBlbHNlIGlmICh0aGlzID4gb3RoZXIpIHsKICAgICAgcmV0dXJuIEdSRUFURVI7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gRVFVQUw7CiAgICB9CiAgfQoKICBpbnQgcm91bmQoKSB7CiAgICByZXR1cm4gdGhpczsKICB9CgogIGludCBmbG9vcigpIHsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgaW50IGNlaWwoKSB7CiAgICByZXR1cm4gdGhpczsKICB9CgogIGludCB0cnVuY2F0ZSgpIHsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgZG91YmxlIHJvdW5kVG9Eb3VibGUoKSB7CiAgICByZXR1cm4gdGhpcy50b0RvdWJsZSgpOwogIH0KCiAgZG91YmxlIGZsb29yVG9Eb3VibGUoKSB7CiAgICByZXR1cm4gdGhpcy50b0RvdWJsZSgpOwogIH0KCiAgZG91YmxlIGNlaWxUb0RvdWJsZSgpIHsKICAgIHJldHVybiB0aGlzLnRvRG91YmxlKCk7CiAgfQoKICBkb3VibGUgdHJ1bmNhdGVUb0RvdWJsZSgpIHsKICAgIHJldHVybiB0aGlzLnRvRG91YmxlKCk7CiAgfQoKICBudW0gY2xhbXAobnVtIGxvd2VyTGltaXQsIG51bSB1cHBlckxpbWl0KSB7CiAgICBpZiAobG93ZXJMaW1pdCA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoImxvd2VyTGltaXQiKTsKICAgIH0KICAgIGlmICh1cHBlckxpbWl0ID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgidXBwZXJMaW1pdCIpOwogICAgfQogICAgLy8gU3BlY2lhbCBjYXNlIGZvciBpbnRlZ2Vycy4KICAgIGlmIChsb3dlckxpbWl0IGlzIGludCAmJiB1cHBlckxpbWl0IGlzIGludCAmJiBsb3dlckxpbWl0IDw9IHVwcGVyTGltaXQpIHsKICAgICAgaWYgKHRoaXMgPCBsb3dlckxpbWl0KSByZXR1cm4gbG93ZXJMaW1pdDsKICAgICAgaWYgKHRoaXMgPiB1cHBlckxpbWl0KSByZXR1cm4gdXBwZXJMaW1pdDsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICAvLyBHZW5lcmljIGNhc2UgaW52b2x2aW5nIGRvdWJsZXMsIGFuZCBpbnZhbGlkIGludGVnZXIgcmFuZ2VzLgogICAgaWYgKGxvd2VyTGltaXQuY29tcGFyZVRvKHVwcGVyTGltaXQpID4gMCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihsb3dlckxpbWl0KTsKICAgIH0KICAgIGlmIChsb3dlckxpbWl0LmlzTmFOKSByZXR1cm4gbG93ZXJMaW1pdDsKICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGNhcmUgZm9yIC0wLjAgZm9yIHRoZSBsb3dlciBsaW1pdC4KICAgIGlmICh0aGlzIDwgbG93ZXJMaW1pdCkgcmV0dXJuIGxvd2VyTGltaXQ7CiAgICBpZiAodGhpcy5jb21wYXJlVG8odXBwZXJMaW1pdCkgPiAwKSByZXR1cm4gdXBwZXJMaW1pdDsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgaW50IHRvSW50KCkgewogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9Eb3VibGUpCiAgZG91YmxlIHRvRG91YmxlKCkgewogICAgcmV0dXJuIG5ldyBfRG91YmxlLmZyb21JbnRlZ2VyKHRoaXMpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nQXNGaXhlZChpbnQgZnJhY3Rpb25EaWdpdHMpIHsKICAgIHJldHVybiB0aGlzLnRvRG91YmxlKCkudG9TdHJpbmdBc0ZpeGVkKGZyYWN0aW9uRGlnaXRzKTsKICB9CgogIFN0cmluZyB0b1N0cmluZ0FzRXhwb25lbnRpYWwoW2ludCBmcmFjdGlvbkRpZ2l0c10pIHsKICAgIHJldHVybiB0aGlzLnRvRG91YmxlKCkudG9TdHJpbmdBc0V4cG9uZW50aWFsKGZyYWN0aW9uRGlnaXRzKTsKICB9CgogIFN0cmluZyB0b1N0cmluZ0FzUHJlY2lzaW9uKGludCBwcmVjaXNpb24pIHsKICAgIHJldHVybiB0aGlzLnRvRG91YmxlKCkudG9TdHJpbmdBc1ByZWNpc2lvbihwcmVjaXNpb24pOwogIH0KCiAgc3RhdGljIGNvbnN0IF9kaWdpdHMgPSAiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjsKCiAgU3RyaW5nIHRvUmFkaXhTdHJpbmcoaW50IHJhZGl4KSB7CiAgICBpZiAocmFkaXggPCAyIHx8IDM2IDwgcmFkaXgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UocmFkaXgsIDIsIDM2LCAicmFkaXgiKTsKICAgIH0KICAgIGlmIChyYWRpeCAmIChyYWRpeCAtIDEpID09IDApIHsKICAgICAgcmV0dXJuIF90b1BvdzJTdHJpbmcocmFkaXgpOwogICAgfQogICAgaWYgKHJhZGl4ID09IDEwKSByZXR1cm4gdGhpcy50b1N0cmluZygpOwogICAgZmluYWwgYm9vbCBpc05lZ2F0aXZlID0gdGhpcyA8IDA7CiAgICBpbnQgdmFsdWUgPSBpc05lZ2F0aXZlID8gLXRoaXMgOiB0aGlzOwogICAgaWYgKHZhbHVlIDwgMCkgewogICAgICAvLyBXaXRoIGludGVnZXJzIGxpbWl0ZWQgdG8gNjQgYml0cywgdGhlIHZhbHVlCiAgICAgIC8vIE1JTl9JTlQ2NCA9IC0weDgwMDAwMDAwMDAwMDAwMDAgb3ZlcmZsb3dzIGF0IG5lZ2F0aW9uOgogICAgICAvLyAtTUlOX0lOVDY0ID09IE1JTl9JTlQ2NCwgc28gaXQgcmVxdWlyZXMgc3BlY2lhbCBoYW5kbGluZy4KICAgICAgcmV0dXJuIF9taW5JbnQ2NFRvUmFkaXhTdHJpbmcocmFkaXgpOwogICAgfQogICAgdmFyIHRlbXAgPSBuZXcgTGlzdDxpbnQ+KCk7CiAgICBkbyB7CiAgICAgIGludCBkaWdpdCA9IHZhbHVlICUgcmFkaXg7CiAgICAgIHZhbHVlIH4vPSByYWRpeDsKICAgICAgdGVtcC5hZGQoX2RpZ2l0cy5jb2RlVW5pdEF0KGRpZ2l0KSk7CiAgICB9IHdoaWxlICh2YWx1ZSA+IDApOwogICAgaWYgKGlzTmVnYXRpdmUpIHRlbXAuYWRkKDB4MmQpOyAvLyAnLScuCgogICAgX09uZUJ5dGVTdHJpbmcgc3RyaW5nID0gX09uZUJ5dGVTdHJpbmcuX2FsbG9jYXRlKHRlbXAubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwLCBqID0gdGVtcC5sZW5ndGg7IGogPiAwOyBpKyspIHsKICAgICAgc3RyaW5nLl9zZXRBdChpLCB0ZW1wWy0tal0pOwogICAgfQogICAgcmV0dXJuIHN0cmluZzsKICB9CgogIFN0cmluZyBfdG9Qb3cyU3RyaW5nKGludCByYWRpeCkgewogICAgaW50IHZhbHVlID0gdGhpczsKICAgIGlmICh2YWx1ZSA9PSAwKSByZXR1cm4gIjAiOwogICAgYXNzZXJ0KHJhZGl4ICYgKHJhZGl4IC0gMSkgPT0gMCk7CiAgICB2YXIgbmVnYXRpdmUgPSB2YWx1ZSA8IDA7CiAgICB2YXIgYml0c1BlckRpZ2l0ID0gcmFkaXguYml0TGVuZ3RoIC0gMTsKICAgIHZhciBsZW5ndGggPSAwOwogICAgaWYgKG5lZ2F0aXZlKSB7CiAgICAgIHZhbHVlID0gLXZhbHVlOwogICAgICBsZW5ndGggPSAxOwogICAgICBpZiAodmFsdWUgPCAwKSB7CiAgICAgICAgLy8gV2l0aCBpbnRlZ2VycyBsaW1pdGVkIHRvIDY0IGJpdHMsIHRoZSB2YWx1ZQogICAgICAgIC8vIE1JTl9JTlQ2NCA9IC0weDgwMDAwMDAwMDAwMDAwMDAgb3ZlcmZsb3dzIGF0IG5lZ2F0aW9uOgogICAgICAgIC8vIC1NSU5fSU5UNjQgPT0gTUlOX0lOVDY0LCBzbyBpdCByZXF1aXJlcyBzcGVjaWFsIGhhbmRsaW5nLgogICAgICAgIHJldHVybiBfbWluSW50NjRUb1JhZGl4U3RyaW5nKHJhZGl4KTsKICAgICAgfQogICAgfQogICAgLy8gSW50ZWdlciBkaXZpc2lvbiwgcm91bmRpbmcgdXAsIHRvIGZpbmQgbnVtYmVyIG9mIF9kaWdpdHMuCiAgICBsZW5ndGggKz0gKHZhbHVlLmJpdExlbmd0aCArIGJpdHNQZXJEaWdpdCAtIDEpIH4vIGJpdHNQZXJEaWdpdDsKICAgIF9PbmVCeXRlU3RyaW5nIHN0cmluZyA9IF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZShsZW5ndGgpOwogICAgc3RyaW5nLl9zZXRBdCgwLCAweDJkKTsgLy8gJy0nLiBJcyBvdmVyd3JpdHRlbiBpZiBub3QgbmVnYXRpdmUuCiAgICB2YXIgbWFzayA9IHJhZGl4IC0gMTsKICAgIGRvIHsKICAgICAgc3RyaW5nLl9zZXRBdCgtLWxlbmd0aCwgX2RpZ2l0cy5jb2RlVW5pdEF0KHZhbHVlICYgbWFzaykpOwogICAgICB2YWx1ZSA+Pj0gYml0c1BlckRpZ2l0OwogICAgfSB3aGlsZSAodmFsdWUgPiAwKTsKICAgIHJldHVybiBzdHJpbmc7CiAgfQoKICAvLy8gQ29udmVydHMgbmVnYXRpdmUgdmFsdWUgdG8gcmFkaXggc3RyaW5nLgogIC8vLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgdG8gaGFuZGxlIGNvcm5lciBjYXNlIG9mCiAgLy8vIE1JTl9JTlQ2NCA9IC0weDgwMDAwMDAwMDAwMDAwMDAuCiAgU3RyaW5nIF9taW5JbnQ2NFRvUmFkaXhTdHJpbmcoaW50IHJhZGl4KSB7CiAgICB2YXIgdGVtcCA9IG5ldyBMaXN0PGludD4oKTsKICAgIGludCB2YWx1ZSA9IHRoaXM7CiAgICBhc3NlcnQodmFsdWUgPCAwKTsKICAgIGRvIHsKICAgICAgaW50IGRpZ2l0ID0gLXZhbHVlLnJlbWFpbmRlcihyYWRpeCk7CiAgICAgIHZhbHVlIH4vPSByYWRpeDsKICAgICAgdGVtcC5hZGQoX2RpZ2l0cy5jb2RlVW5pdEF0KGRpZ2l0KSk7CiAgICB9IHdoaWxlICh2YWx1ZSAhPSAwKTsKICAgIHRlbXAuYWRkKDB4MmQpOyAvLyAnLScuCgogICAgX09uZUJ5dGVTdHJpbmcgc3RyaW5nID0gX09uZUJ5dGVTdHJpbmcuX2FsbG9jYXRlKHRlbXAubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwLCBqID0gdGVtcC5sZW5ndGg7IGogPiAwOyBpKyspIHsKICAgICAgc3RyaW5nLl9zZXRBdChpLCB0ZW1wWy0tal0pOwogICAgfQogICAgcmV0dXJuIHN0cmluZzsKICB9CgogIC8vIFJldHVybnMgcG93KHRoaXMsIGUpICUgbS4KICBpbnQgbW9kUG93KGludCBlLCBpbnQgbSkgewogICAgaWYgKGUgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJleHBvbmVudCIpOwogICAgfQogICAgaWYgKG0gPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJtb2R1bHVzIik7CiAgICB9CiAgICBpZiAoZSA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGUsIDAsIG51bGwsICJleHBvbmVudCIpOwogICAgaWYgKG0gPD0gMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UobSwgMSwgbnVsbCwgIm1vZHVsdXMiKTsKICAgIGlmIChlID09IDApIHJldHVybiAxOwoKICAgIC8vIFRoaXMgaXMgZmxvb3Ioc3FydCgyXjYzKSkuCiAgICBjb25zdCBpbnQgbWF4VmFsdWVUaGF0Q2FuQmVTcXVhcmVkV2l0aG91dFRydW5jYXRpb24gPSAzMDM3MDAwNDk5OwogICAgaWYgKG0gPiBtYXhWYWx1ZVRoYXRDYW5CZVNxdWFyZWRXaXRob3V0VHJ1bmNhdGlvbikgewogICAgICAvLyBVc2UgQmlnSW50IHZlcnNpb24gdG8gYXZvaWQgdHJ1bmNhdGlvbiBpbiBtdWx0aXBsaWNhdGlvbnMgYmVsb3cuCiAgICAgIHJldHVybiBCaWdJbnQuZnJvbSh0aGlzKS5tb2RQb3coQmlnSW50LmZyb20oZSksIEJpZ0ludC5mcm9tKG0pKS50b0ludCgpOwogICAgfQoKICAgIGludCBiID0gdGhpczsKICAgIGlmIChiIDwgMCB8fCBiID4gbSkgewogICAgICBiICU9IG07CiAgICB9CiAgICBpbnQgciA9IDE7CiAgICB3aGlsZSAoZSA+IDApIHsKICAgICAgaWYgKGUuaXNPZGQpIHsKICAgICAgICByID0gKHIgKiBiKSAlIG07CiAgICAgIH0KICAgICAgZSA+Pj0gMTsKICAgICAgYiA9IChiICogYikgJSBtOwogICAgfQogICAgcmV0dXJuIHI7CiAgfQoKICAvLyBJZiBpbnYgaXMgZmFsc2UsIHJldHVybnMgZ2NkKHgsIHkpLgogIC8vIElmIGludiBpcyB0cnVlIGFuZCBnY2QoeCwgeSkgPSAxLCByZXR1cm5zIGQsIHNvIHRoYXQgYyp4ICsgZCp5ID0gMS4KICAvLyBJZiBpbnYgaXMgdHJ1ZSBhbmQgZ2NkKHgsIHkpICE9IDEsIHRocm93cyBFeGNlcHRpb24oIk5vdCBjb3ByaW1lIikuCiAgc3RhdGljIGludCBfYmluYXJ5R2NkKGludCB4LCBpbnQgeSwgYm9vbCBpbnYpIHsKICAgIGludCBzID0gMDsKICAgIGlmICghaW52KSB7CiAgICAgIHdoaWxlICh4LmlzRXZlbiAmJiB5LmlzRXZlbikgewogICAgICAgIHggPj49IDE7CiAgICAgICAgeSA+Pj0gMTsKICAgICAgICBzKys7CiAgICAgIH0KICAgICAgaWYgKHkuaXNPZGQpIHsKICAgICAgICB2YXIgdCA9IHg7CiAgICAgICAgeCA9IHk7CiAgICAgICAgeSA9IHQ7CiAgICAgIH0KICAgIH0KICAgIGZpbmFsIGJvb2wgYWMgPSB4LmlzRXZlbjsKICAgIGludCB1ID0geDsKICAgIGludCB2ID0geTsKICAgIGludCBhID0gMSwgYiA9IDAsIGMgPSAwLCBkID0gMTsKICAgIGRvIHsKICAgICAgd2hpbGUgKHUuaXNFdmVuKSB7CiAgICAgICAgdSA+Pj0gMTsKICAgICAgICBpZiAoYWMpIHsKICAgICAgICAgIGlmICghYS5pc0V2ZW4gfHwgIWIuaXNFdmVuKSB7CiAgICAgICAgICAgIGEgKz0geTsKICAgICAgICAgICAgYiAtPSB4OwogICAgICAgICAgfQogICAgICAgICAgYSA+Pj0gMTsKICAgICAgICB9IGVsc2UgaWYgKCFiLmlzRXZlbikgewogICAgICAgICAgYiAtPSB4OwogICAgICAgIH0KICAgICAgICBiID4+PSAxOwogICAgICB9CiAgICAgIHdoaWxlICh2LmlzRXZlbikgewogICAgICAgIHYgPj49IDE7CiAgICAgICAgaWYgKGFjKSB7CiAgICAgICAgICBpZiAoIWMuaXNFdmVuIHx8ICFkLmlzRXZlbikgewogICAgICAgICAgICBjICs9IHk7CiAgICAgICAgICAgIGQgLT0geDsKICAgICAgICAgIH0KICAgICAgICAgIGMgPj49IDE7CiAgICAgICAgfSBlbHNlIGlmICghZC5pc0V2ZW4pIHsKICAgICAgICAgIGQgLT0geDsKICAgICAgICB9CiAgICAgICAgZCA+Pj0gMTsKICAgICAgfQogICAgICBpZiAodSA+PSB2KSB7CiAgICAgICAgdSAtPSB2OwogICAgICAgIGlmIChhYykgYSAtPSBjOwogICAgICAgIGIgLT0gZDsKICAgICAgfSBlbHNlIHsKICAgICAgICB2IC09IHU7CiAgICAgICAgaWYgKGFjKSBjIC09IGE7CiAgICAgICAgZCAtPSBiOwogICAgICB9CiAgICB9IHdoaWxlICh1ICE9IDApOwogICAgaWYgKCFpbnYpIHJldHVybiB2IDw8IHM7CiAgICBpZiAodiAhPSAxKSB7CiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIk5vdCBjb3ByaW1lIik7CiAgICB9CiAgICBpZiAoZCA8IDApIHsKICAgICAgZCArPSB4OwogICAgICBpZiAoZCA8IDApIGQgKz0geDsKICAgIH0gZWxzZSBpZiAoZCA+IHgpIHsKICAgICAgZCAtPSB4OwogICAgICBpZiAoZCA+IHgpIGQgLT0geDsKICAgIH0KICAgIHJldHVybiBkOwogIH0KCiAgLy8gUmV0dXJucyAxL3RoaXMgJSBtLCB3aXRoIG0gPiAwLgogIGludCBtb2RJbnZlcnNlKGludCBtKSB7CiAgICBpZiAobSA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoIm1vZHVsdXMiKTsKICAgIH0KICAgIGlmIChtIDw9IDApIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKG0sIDEsIG51bGwsICJtb2R1bHVzIik7CiAgICBpZiAobSA9PSAxKSByZXR1cm4gMDsKICAgIGludCB0ID0gdGhpczsKICAgIGlmICgodCA8IDApIHx8ICh0ID49IG0pKSB0ICU9IG07CiAgICBpZiAodCA9PSAxKSByZXR1cm4gMTsKICAgIGlmICgodCA9PSAwKSB8fCAodC5pc0V2ZW4gJiYgbS5pc0V2ZW4pKSB7CiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIk5vdCBjb3ByaW1lIik7CiAgICB9CiAgICByZXR1cm4gX2JpbmFyeUdjZChtLCB0LCB0cnVlKTsKICB9CgogIC8vIFJldHVybnMgZ2NkIG9mIGFicyh0aGlzKSBhbmQgYWJzKG90aGVyKS4KICBpbnQgZ2NkKGludCBvdGhlcikgewogICAgaWYgKG90aGVyID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgib3RoZXIiKTsKICAgIH0KICAgIGludCB4ID0gdGhpcy5hYnMoKTsKICAgIGludCB5ID0gb3RoZXIuYWJzKCk7CiAgICBpZiAoeCA9PSAwKSByZXR1cm4geTsKICAgIGlmICh5ID09IDApIHJldHVybiB4OwogICAgaWYgKCh4ID09IDEpIHx8ICh5ID09IDEpKSByZXR1cm4gMTsKICAgIHJldHVybiBfYmluYXJ5R2NkKHgsIHksIGZhbHNlKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1NtaSBleHRlbmRzIF9JbnRlZ2VySW1wbGVtZW50YXRpb24gewogIGZhY3RvcnkgX1NtaS5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSA9PiB0aGlzOwogIGludCBnZXQgX2lkZW50aXR5SGFzaENvZGUgPT4gdGhpczsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IG9wZXJhdG9yIH4oKSBuYXRpdmUgIlNtaV9iaXROZWdhdGUiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBpbnQgZ2V0IGJpdExlbmd0aCBuYXRpdmUgIlNtaV9iaXRMZW5ndGgiOwoKICBpbnQgb3BlcmF0b3IgJihpbnQgb3RoZXIpID0+IG90aGVyLl9iaXRBbmRGcm9tU21pKHRoaXMpOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IF9iaXRBbmRGcm9tU21pKF9TbWkgb3RoZXIpIG5hdGl2ZSAiU21pX2JpdEFuZEZyb21TbWkiOwoKICAvKioKICAgKiBUaGUgZGlnaXRzIG9mICcwMCcsICcwMScsIC4uLiAnOTknIGFzIGEgc2luZ2xlIGFycmF5LgogICAqCiAgICogR2V0IHRoZSBkaWdpdHMgb2YgYG5gLCB3aXRoIGAwIDw9IG4gPCAxMDBgLCBhcwogICAqIGBfZGlnaXRUYWJsZVtuICogMl1gIGFuZCBgX2RpZ2l0VGFibGVbbiAqIDIgKyAxXWAuCiAgICovCiAgc3RhdGljIGNvbnN0IF9kaWdpdFRhYmxlID0gY29uc3QgWwogICAgMHgzMCwgMHgzMCwgMHgzMCwgMHgzMSwgMHgzMCwgMHgzMiwgMHgzMCwgMHgzMywgLy8KICAgIDB4MzAsIDB4MzQsIDB4MzAsIDB4MzUsIDB4MzAsIDB4MzYsIDB4MzAsIDB4MzcsIC8vCiAgICAweDMwLCAweDM4LCAweDMwLCAweDM5LCAweDMxLCAweDMwLCAweDMxLCAweDMxLCAvLwogICAgMHgzMSwgMHgzMiwgMHgzMSwgMHgzMywgMHgzMSwgMHgzNCwgMHgzMSwgMHgzNSwgLy8KICAgIDB4MzEsIDB4MzYsIDB4MzEsIDB4MzcsIDB4MzEsIDB4MzgsIDB4MzEsIDB4MzksIC8vCiAgICAweDMyLCAweDMwLCAweDMyLCAweDMxLCAweDMyLCAweDMyLCAweDMyLCAweDMzLCAvLwogICAgMHgzMiwgMHgzNCwgMHgzMiwgMHgzNSwgMHgzMiwgMHgzNiwgMHgzMiwgMHgzNywgLy8KICAgIDB4MzIsIDB4MzgsIDB4MzIsIDB4MzksIDB4MzMsIDB4MzAsIDB4MzMsIDB4MzEsIC8vCiAgICAweDMzLCAweDMyLCAweDMzLCAweDMzLCAweDMzLCAweDM0LCAweDMzLCAweDM1LCAvLwogICAgMHgzMywgMHgzNiwgMHgzMywgMHgzNywgMHgzMywgMHgzOCwgMHgzMywgMHgzOSwgLy8KICAgIDB4MzQsIDB4MzAsIDB4MzQsIDB4MzEsIDB4MzQsIDB4MzIsIDB4MzQsIDB4MzMsIC8vCiAgICAweDM0LCAweDM0LCAweDM0LCAweDM1LCAweDM0LCAweDM2LCAweDM0LCAweDM3LCAvLwogICAgMHgzNCwgMHgzOCwgMHgzNCwgMHgzOSwgMHgzNSwgMHgzMCwgMHgzNSwgMHgzMSwgLy8KICAgIDB4MzUsIDB4MzIsIDB4MzUsIDB4MzMsIDB4MzUsIDB4MzQsIDB4MzUsIDB4MzUsIC8vCiAgICAweDM1LCAweDM2LCAweDM1LCAweDM3LCAweDM1LCAweDM4LCAweDM1LCAweDM5LCAvLwogICAgMHgzNiwgMHgzMCwgMHgzNiwgMHgzMSwgMHgzNiwgMHgzMiwgMHgzNiwgMHgzMywgLy8KICAgIDB4MzYsIDB4MzQsIDB4MzYsIDB4MzUsIDB4MzYsIDB4MzYsIDB4MzYsIDB4MzcsIC8vCiAgICAweDM2LCAweDM4LCAweDM2LCAweDM5LCAweDM3LCAweDMwLCAweDM3LCAweDMxLCAvLwogICAgMHgzNywgMHgzMiwgMHgzNywgMHgzMywgMHgzNywgMHgzNCwgMHgzNywgMHgzNSwgLy8KICAgIDB4MzcsIDB4MzYsIDB4MzcsIDB4MzcsIDB4MzcsIDB4MzgsIDB4MzcsIDB4MzksIC8vCiAgICAweDM4LCAweDMwLCAweDM4LCAweDMxLCAweDM4LCAweDMyLCAweDM4LCAweDMzLCAvLwogICAgMHgzOCwgMHgzNCwgMHgzOCwgMHgzNSwgMHgzOCwgMHgzNiwgMHgzOCwgMHgzNywgLy8KICAgIDB4MzgsIDB4MzgsIDB4MzgsIDB4MzksIDB4MzksIDB4MzAsIDB4MzksIDB4MzEsIC8vCiAgICAweDM5LCAweDMyLCAweDM5LCAweDMzLCAweDM5LCAweDM0LCAweDM5LCAweDM1LCAvLwogICAgMHgzOSwgMHgzNiwgMHgzOSwgMHgzNywgMHgzOSwgMHgzOCwgMHgzOSwgMHgzOSwgLy8KICBdOwoKICAvKioKICAgKiBSZXN1bHQgb2YgaW50LnRvU3RyaW5nIGZvciAtOTksIC05OCwgLi4uLCA5OCwgOTkuCiAgICovCiAgc3RhdGljIGNvbnN0IF9zbWFsbExvb2t1cFRhYmxlID0gY29uc3QgWwogICAgIi05OSIsICItOTgiLCAiLTk3IiwgIi05NiIsICItOTUiLCAiLTk0IiwgIi05MyIsICItOTIiLCAiLTkxIiwgIi05MCIsIC8vCiAgICAiLTg5IiwgIi04OCIsICItODciLCAiLTg2IiwgIi04NSIsICItODQiLCAiLTgzIiwgIi04MiIsICItODEiLCAiLTgwIiwgLy8KICAgICItNzkiLCAiLTc4IiwgIi03NyIsICItNzYiLCAiLTc1IiwgIi03NCIsICItNzMiLCAiLTcyIiwgIi03MSIsICItNzAiLCAvLwogICAgIi02OSIsICItNjgiLCAiLTY3IiwgIi02NiIsICItNjUiLCAiLTY0IiwgIi02MyIsICItNjIiLCAiLTYxIiwgIi02MCIsIC8vCiAgICAiLTU5IiwgIi01OCIsICItNTciLCAiLTU2IiwgIi01NSIsICItNTQiLCAiLTUzIiwgIi01MiIsICItNTEiLCAiLTUwIiwgLy8KICAgICItNDkiLCAiLTQ4IiwgIi00NyIsICItNDYiLCAiLTQ1IiwgIi00NCIsICItNDMiLCAiLTQyIiwgIi00MSIsICItNDAiLCAvLwogICAgIi0zOSIsICItMzgiLCAiLTM3IiwgIi0zNiIsICItMzUiLCAiLTM0IiwgIi0zMyIsICItMzIiLCAiLTMxIiwgIi0zMCIsIC8vCiAgICAiLTI5IiwgIi0yOCIsICItMjciLCAiLTI2IiwgIi0yNSIsICItMjQiLCAiLTIzIiwgIi0yMiIsICItMjEiLCAiLTIwIiwgLy8KICAgICItMTkiLCAiLTE4IiwgIi0xNyIsICItMTYiLCAiLTE1IiwgIi0xNCIsICItMTMiLCAiLTEyIiwgIi0xMSIsICItMTAiLCAvLwogICAgIi05IiwgIi04IiwgIi03IiwgIi02IiwgIi01IiwgIi00IiwgIi0zIiwgIi0yIiwgIi0xIiwgIjAiLCAvLwogICAgIjEiLCAiMiIsICIzIiwgIjQiLCAiNSIsICI2IiwgIjciLCAiOCIsICI5IiwgIjEwIiwgLy8KICAgICIxMSIsICIxMiIsICIxMyIsICIxNCIsICIxNSIsICIxNiIsICIxNyIsICIxOCIsICIxOSIsICIyMCIsIC8vCiAgICAiMjEiLCAiMjIiLCAiMjMiLCAiMjQiLCAiMjUiLCAiMjYiLCAiMjciLCAiMjgiLCAiMjkiLCAiMzAiLCAvLwogICAgIjMxIiwgIjMyIiwgIjMzIiwgIjM0IiwgIjM1IiwgIjM2IiwgIjM3IiwgIjM4IiwgIjM5IiwgIjQwIiwgLy8KICAgICI0MSIsICI0MiIsICI0MyIsICI0NCIsICI0NSIsICI0NiIsICI0NyIsICI0OCIsICI0OSIsICI1MCIsIC8vCiAgICAiNTEiLCAiNTIiLCAiNTMiLCAiNTQiLCAiNTUiLCAiNTYiLCAiNTciLCAiNTgiLCAiNTkiLCAiNjAiLCAvLwogICAgIjYxIiwgIjYyIiwgIjYzIiwgIjY0IiwgIjY1IiwgIjY2IiwgIjY3IiwgIjY4IiwgIjY5IiwgIjcwIiwgLy8KICAgICI3MSIsICI3MiIsICI3MyIsICI3NCIsICI3NSIsICI3NiIsICI3NyIsICI3OCIsICI3OSIsICI4MCIsIC8vCiAgICAiODEiLCAiODIiLCAiODMiLCAiODQiLCAiODUiLCAiODYiLCAiODciLCAiODgiLCAiODkiLCAiOTAiLCAvLwogICAgIjkxIiwgIjkyIiwgIjkzIiwgIjk0IiwgIjk1IiwgIjk2IiwgIjk3IiwgIjk4IiwgIjk5IiAvLwogIF07CgogIC8vIFBvd2VycyBvZiAxMCBhYm92ZSAxMDAwMDAwIGFyZSBpbmRpc3Rpbmd1aXNoYWJsZSBieSBleWUuCiAgc3RhdGljIGNvbnN0IGludCBfUE9XXzEwXzcgPSAxMDAwMDAwMDsKICBzdGF0aWMgY29uc3QgaW50IF9QT1dfMTBfOCA9IDEwMDAwMDAwMDsKICBzdGF0aWMgY29uc3QgaW50IF9QT1dfMTBfOSA9IDEwMDAwMDAwMDA7CgogIC8vIEZpbmQgdGhlIG51bWJlciBvZiBkZWNpbWFsIGRpZ2l0cyBpbiBhIHBvc2l0aXZlIHNtaS4KICAvLyBOZXZlciBjYWxsZWQgd2l0aCBudW1iZXJzIDwgMTAwLiBUaGVzZSBhcmUgaGFuZGxlZCBiZWZvcmUgY2FsbGluZy4KICBzdGF0aWMgaW50IF9wb3NpdGl2ZUJhc2UxMExlbmd0aCh2YXIgc21pKSB7CiAgICAvLyBBIHBvc2l0aXZlIHNtaSBoYXMgbGVuZ3RoIDw9IDE5IGlmIDYzLWJpdCwgIDw9MTAgaWYgMzEtYml0LgogICAgLy8gQXZvaWQgY29tcGFyaW5nIGEgMzEtYml0IHNtaSB0byBhIG5vbi1zbWkuCiAgICBpZiAoc21pIDwgMTAwMCkgcmV0dXJuIDM7CiAgICBpZiAoc21pIDwgMTAwMDApIHJldHVybiA0OwogICAgaWYgKHNtaSA8IF9QT1dfMTBfNykgewogICAgICBpZiAoc21pIDwgMTAwMDAwKSByZXR1cm4gNTsKICAgICAgaWYgKHNtaSA8IDEwMDAwMDApIHJldHVybiA2OwogICAgICByZXR1cm4gNzsKICAgIH0KICAgIGlmIChzbWkgPCBfUE9XXzEwXzgpIHJldHVybiA4OwogICAgaWYgKHNtaSA8IF9QT1dfMTBfOSkgcmV0dXJuIDk7CiAgICBzbWkgPSBzbWkgfi8gX1BPV18xMF85OwogICAgLy8gSGFuZGxlIG51bWJlcnMgPCAxMDAgYmVmb3JlIGNhbGxpbmcgcmVjdXJzaXZlbHkuCiAgICBpZiAoc21pIDwgMTApIHJldHVybiAxMDsKICAgIGlmIChzbWkgPCAxMDApIHJldHVybiAxMTsKICAgIHJldHVybiA5ICsgX3Bvc2l0aXZlQmFzZTEwTGVuZ3RoKHNtaSk7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBpZiAodGhpcyA8IDEwMCAmJiB0aGlzID4gLTEwMCkgcmV0dXJuIF9zbWFsbExvb2t1cFRhYmxlW3RoaXMgKyA5OV07CiAgICBpZiAodGhpcyA8IDApIHJldHVybiBfbmVnYXRpdmVUb1N0cmluZyh0aGlzKTsKICAgIC8vIEluc3BpcmVkIGJ5IEFuZHJlaSBBbGV4YW5kcmVzY3U6ICJUaHJlZSBPcHRpbWl6YXRpb24gVGlwcyBmb3IgQysrIgogICAgLy8gQXZvaWQgZXhwZW5zaXZlIHJlbWFpbmRlciBvcGVyYXRpb24gYnkgZG9pbmcgaXQgb24gbW9yZSB0aGFuCiAgICAvLyBvbmUgZGlnaXQgYXQgYSB0aW1lLgogICAgY29uc3QgaW50IERJR0lUX1pFUk8gPSAweDMwOwogICAgaW50IGxlbmd0aCA9IF9wb3NpdGl2ZUJhc2UxMExlbmd0aCh0aGlzKTsKICAgIF9PbmVCeXRlU3RyaW5nIHJlc3VsdCA9IF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZShsZW5ndGgpOwogICAgaW50IGluZGV4ID0gbGVuZ3RoIC0gMTsKICAgIHZhciBzbWkgPSB0aGlzOwogICAgZG8gewogICAgICAvLyBUd28gZGlnaXRzIGF0IGEgdGltZS4KICAgICAgdmFyIHR3b0RpZ2l0cyA9IHNtaS5yZW1haW5kZXIoMTAwKTsKICAgICAgc21pID0gc21pIH4vIDEwMDsKICAgICAgaW50IGRpZ2l0SW5kZXggPSB0d29EaWdpdHMgKiAyOwogICAgICByZXN1bHQuX3NldEF0KGluZGV4LCBfZGlnaXRUYWJsZVtkaWdpdEluZGV4ICsgMV0pOwogICAgICByZXN1bHQuX3NldEF0KGluZGV4IC0gMSwgX2RpZ2l0VGFibGVbZGlnaXRJbmRleF0pOwogICAgICBpbmRleCAtPSAyOwogICAgfSB3aGlsZSAoc21pID49IDEwMCk7CiAgICBpZiAoc21pIDwgMTApIHsKICAgICAgLy8gQ2hhcmFjdGVyIGNvZGUgZm9yICcwJy4KICAgICAgcmVzdWx0Ll9zZXRBdChpbmRleCwgRElHSVRfWkVSTyArIHNtaSk7CiAgICB9IGVsc2UgewogICAgICAvLyBObyByZW1haW5kZXIgZm9yIHRoaXMgY2FzZS4KICAgICAgaW50IGRpZ2l0SW5kZXggPSBzbWkgKiAyOwogICAgICByZXN1bHQuX3NldEF0KGluZGV4LCBfZGlnaXRUYWJsZVtkaWdpdEluZGV4ICsgMV0pOwogICAgICByZXN1bHQuX3NldEF0KGluZGV4IC0gMSwgX2RpZ2l0VGFibGVbZGlnaXRJbmRleF0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIEZpbmQgdGhlIG51bWJlciBvZiBkZWNpbWFsIGRpZ2l0cyBpbiBhIG5lZ2F0aXZlIHNtaS4KICAvLyBOZXZlciBjYWxsZWQgd2l0aCBudW1iZXJzID4gLTEwMC4gVGhlc2UgYXJlIGhhbmRsZWQgYmVmb3JlIGNhbGxpbmcuCiAgc3RhdGljIGludCBfbmVnYXRpdmVCYXNlMTBMZW5ndGgodmFyIG5lZ1NtaSkgewogICAgLy8gQSBuZWdhdGl2ZSBzbWkgaGFzIGxlbmd0aCA8PSAxOSBpZiA2My1iaXQsIDw9MTAgaWYgMzEtYml0LgogICAgLy8gQXZvaWQgY29tcGFyaW5nIGEgMzEtYml0IHNtaSB0byBhIG5vbi1zbWkuCiAgICBpZiAobmVnU21pID4gLTEwMDApIHJldHVybiAzOwogICAgaWYgKG5lZ1NtaSA+IC0xMDAwMCkgcmV0dXJuIDQ7CiAgICBpZiAobmVnU21pID4gLV9QT1dfMTBfNykgewogICAgICBpZiAobmVnU21pID4gLTEwMDAwMCkgcmV0dXJuIDU7CiAgICAgIGlmIChuZWdTbWkgPiAtMTAwMDAwMCkgcmV0dXJuIDY7CiAgICAgIHJldHVybiA3OwogICAgfQogICAgaWYgKG5lZ1NtaSA+IC1fUE9XXzEwXzgpIHJldHVybiA4OwogICAgaWYgKG5lZ1NtaSA+IC1fUE9XXzEwXzkpIHJldHVybiA5OwogICAgbmVnU21pID0gbmVnU21pIH4vIF9QT1dfMTBfOTsKICAgIC8vIEhhbmRsZSBudW1iZXJzID4gLTEwMCBiZWZvcmUgY2FsbGluZyByZWN1cnNpdmVseS4KICAgIGlmIChuZWdTbWkgPiAtMTApIHJldHVybiAxMDsKICAgIGlmIChuZWdTbWkgPiAtMTAwKSByZXR1cm4gMTE7CiAgICByZXR1cm4gOSArIF9uZWdhdGl2ZUJhc2UxMExlbmd0aChuZWdTbWkpOwogIH0KCiAgLy8gQ29udmVydCBhIG5lZ2F0aXZlIHNtaSB0byBhIHN0cmluZy4KICAvLyBEb2Vzbid0IG5lZ2F0ZSB0aGUgc21pIHRvIGF2b2lkIG5lZ2F0aW5nIHRoZSBtb3N0IG5lZ2F0aXZlIHNtaSwgd2hpY2gKICAvLyB3b3VsZCBiZWNvbWUgYSBub24tc21pLgogIHN0YXRpYyBTdHJpbmcgX25lZ2F0aXZlVG9TdHJpbmcoaW50IG5lZ1NtaSkgewogICAgLy8gQ2hhcmFjdGVyIGNvZGUgZm9yICctJwogICAgY29uc3QgaW50IE1JTlVTX1NJR04gPSAweDJkOwogICAgLy8gQ2hhcmFjdGVyIGNvZGUgZm9yICcwJy4KICAgIGNvbnN0IGludCBESUdJVF9aRVJPID0gMHgzMDsKICAgIGlmIChuZWdTbWkgPiAtMTApIHsKICAgICAgcmV0dXJuIF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZSgyKQogICAgICAgIC4uX3NldEF0KDAsIE1JTlVTX1NJR04pCiAgICAgICAgLi5fc2V0QXQoMSwgRElHSVRfWkVSTyAtIG5lZ1NtaSk7CiAgICB9CiAgICBpZiAobmVnU21pID4gLTEwMCkgewogICAgICBpbnQgZGlnaXRJbmRleCA9IDIgKiAtbmVnU21pOwogICAgICByZXR1cm4gX09uZUJ5dGVTdHJpbmcuX2FsbG9jYXRlKDMpCiAgICAgICAgLi5fc2V0QXQoMCwgTUlOVVNfU0lHTikKICAgICAgICAuLl9zZXRBdCgxLCBfZGlnaXRUYWJsZVtkaWdpdEluZGV4XSkKICAgICAgICAuLl9zZXRBdCgyLCBfZGlnaXRUYWJsZVtkaWdpdEluZGV4ICsgMV0pOwogICAgfQogICAgLy8gTnVtYmVyIG9mIGRpZ2l0cywgbm90IGluY2x1ZGluZyBtaW51cy4KICAgIGludCBkaWdpdENvdW50ID0gX25lZ2F0aXZlQmFzZTEwTGVuZ3RoKG5lZ1NtaSk7CiAgICBfT25lQnl0ZVN0cmluZyByZXN1bHQgPSBfT25lQnl0ZVN0cmluZy5fYWxsb2NhdGUoZGlnaXRDb3VudCArIDEpOwogICAgcmVzdWx0Ll9zZXRBdCgwLCBNSU5VU19TSUdOKTsgLy8gJy0nLgogICAgaW50IGluZGV4ID0gZGlnaXRDb3VudDsKICAgIGRvIHsKICAgICAgdmFyIHR3b0RpZ2l0cyA9IG5lZ1NtaS5yZW1haW5kZXIoMTAwKTsKICAgICAgbmVnU21pID0gbmVnU21pIH4vIDEwMDsKICAgICAgaW50IGRpZ2l0SW5kZXggPSAtdHdvRGlnaXRzICogMjsKICAgICAgcmVzdWx0Ll9zZXRBdChpbmRleCwgX2RpZ2l0VGFibGVbZGlnaXRJbmRleCArIDFdKTsKICAgICAgcmVzdWx0Ll9zZXRBdChpbmRleCAtIDEsIF9kaWdpdFRhYmxlW2RpZ2l0SW5kZXhdKTsKICAgICAgaW5kZXggLT0gMjsKICAgIH0gd2hpbGUgKG5lZ1NtaSA8PSAtMTAwKTsKICAgIGlmIChuZWdTbWkgPiAtMTApIHsKICAgICAgcmVzdWx0Ll9zZXRBdChpbmRleCwgRElHSVRfWkVSTyAtIG5lZ1NtaSk7CiAgICB9IGVsc2UgewogICAgICAvLyBObyByZW1haW5kZXIgbmVjZXNzYXJ5IGZvciB0aGlzIGNhc2UuCiAgICAgIGludCBkaWdpdEluZGV4ID0gLW5lZ1NtaSAqIDI7CiAgICAgIHJlc3VsdC5fc2V0QXQoaW5kZXgsIF9kaWdpdFRhYmxlW2RpZ2l0SW5kZXggKyAxXSk7CiAgICAgIHJlc3VsdC5fc2V0QXQoaW5kZXggLSAxLCBfZGlnaXRUYWJsZVtkaWdpdEluZGV4XSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKLy8gUmVwcmVzZW50cyBpbnRlZ2VycyB0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZCBieSBTbWkgYnV0IGZpdCBpbnRvIDY0Yml0cy4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfTWludCBleHRlbmRzIF9JbnRlZ2VySW1wbGVtZW50YXRpb24gewogIGZhY3RvcnkgX01pbnQuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIGludCBnZXQgaGFzaENvZGUgPT4gdGhpczsKICBpbnQgZ2V0IF9pZGVudGl0eUhhc2hDb2RlID0+IHRoaXM7CiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBpbnQgb3BlcmF0b3IgfigpIG5hdGl2ZSAiTWludF9iaXROZWdhdGUiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBpbnQgZ2V0IGJpdExlbmd0aCBuYXRpdmUgIk1pbnRfYml0TGVuZ3RoIjsKCiAgaW50IF9iaXRBbmRGcm9tU21pKF9TbWkgb3RoZXIpID0+IF9iaXRBbmRGcm9tSW50ZWdlcihvdGhlcik7Cn0KgtMATk48AQ8BHgE3KR08KR08KR08ASkdHyo0Bi0EASEvBAEpHio0BisEASkdFRUEASkdPykdPikdPwEdLgQBKUUpSClGKUgpQilCKUIpQilCKUwpSCkrBAEpHT0pHT0BKB0fGQQBKB0fMAQBKB0gLgQBKB0gLgQBKCovASgdIxgqBhIEAShDDiQEARExBAEoHRsjIB0BHiYEARxLTkpPEyU4BAEdMRtFRDcfQ0Q/M0BDKkQoGjUXCg8gNAoIGRUIUDk0D040HwgGGBMfFg0UBgQBEBEEARARBAEPEQQBExEEARscBAEbHAQBGhwEAR4cBAEuHjUGHjUGIk4wMBMGQzArBi1FLjsRBAEQEQQBKxYqBAEvPAQBN0IEAS47BAFBASQjOQYkIwYtJisVNUBDLAYgCSEXKxksAUMzIwYTBAEkFiAmHiwUFBYSFzdCRS4IBkFEPkQaCUEeGRMEAS84Jy0gFhcJKxcrGhwBQzMjBhMEAR8dFTMGFTIGQ0MaASJGOUpPBgESGg4GDxQVGQgPFwYOBAEpSUkyDxAlERENCBUTDw8IBh4PDyQJGRESKBQUDBMgEgoRCBkREigUFAwTIBIKEQgUEBgQDxAYEAgWHRIqBhEOGRgOGQYOBAElGhUyBkMaEiUaLioGIwQBLhcZMAYYGRoaKCQEAgEaLCMZBAEcJTQrNCwBOwE0PQEGOwU0OAYlNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NwUBBjcGK01NTU1NTU1NTUI6Q0NDQ0NDQ0M8BQE+KSorATpILkMyHh8bIiMQBiMjHDgdHisEARZIMkpEHCEuPhwUCR8qGCY5ORIaFCEuDSUgOTkGEwQBOkkxQjIiIx8mJxAGJyciOSEiLgQBKUsdMB4hHyEYKSAqBhkkKSAtMgYuNEYqHAktHic5ORIeGDENLyQ5OQYTBAIBThotJBkEARwlKSw0LQE/AgEdZGFydDpjb3JlLXBhdGNoL2ludGVnZXJzLmRhcnRab3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvX2ludGVybmFsL3ZtL2xpYi9pbnZvY2F0aW9uX21pcnJvcl9wYXRjaC5kYXJ0nIUvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgovLyBOT1RFOiBXaGVuIG1ha2luZyBjaGFuZ2VzIHRvIHRoaXMgY2xhc3MsIHBsZWFzZSBhbHNvIHVwZGF0ZQovLyBgVm1UYXJnZXQuaW5zdGFudGlhdGVJbnZvY2F0aW9uYCBhbmQgYFZtVGFyZ2V0Ll9pbnZvY2F0aW9uVHlwZWAgaW4KLy8gYHBrZy9rZXJuZWwvbGliL3RhcmdldC92bS5kYXJ0YC4KY2xhc3MgX0ludm9jYXRpb25NaXJyb3IgaW1wbGVtZW50cyBJbnZvY2F0aW9uIHsKICAvLyBDb25zdGFudHMgZGVzY3JpYmluZyB0aGUgaW52b2NhdGlvbiBraW5kLgogIC8vIF9GSUVMRCBjYW5ub3QgYmUgZ2VuZXJhdGVkIGJ5IHJlZ3VsYXIgaW52b2NhdGlvbiBtaXJyb3JzLgogIHN0YXRpYyBjb25zdCBpbnQgX01FVEhPRCA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBfR0VUVEVSID0gMTsKICBzdGF0aWMgY29uc3QgaW50IF9TRVRURVIgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgX0ZJRUxEID0gMzsKICBzdGF0aWMgY29uc3QgaW50IF9MT0NBTF9WQVIgPSA0OwogIHN0YXRpYyBjb25zdCBpbnQgX0tJTkRfU0hJRlQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgX0tJTkRfQklUUyA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBfS0lORF9NQVNLID0gKDEgPDwgX0tJTkRfQklUUykgLSAxOwoKICAvLyBUaGVzZSB2YWx1ZXMsIGV4Y2VwdCBfRFlOQU1JQyBhbmQgX1NVUEVSLCBhcmUgb25seSB1c2VkIHdoZW4gdGhyb3dpbmcKICAvLyBOb1N1Y2hNZXRob2RFcnJvciBmb3IgY29tcGlsZS10aW1lIHJlc29sdXRpb24gZmFpbHVyZXMuCiAgc3RhdGljIGNvbnN0IGludCBfRFlOQU1JQyA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBfU1VQRVIgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRJQyA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBfQ09OU1RSVUNUT1IgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgX1RPUF9MRVZFTCA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBfTEVWRUxfU0hJRlQgPSBfS0lORF9CSVRTOwogIHN0YXRpYyBjb25zdCBpbnQgX0xFVkVMX0JJVFMgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgX0xFVkVMX01BU0sgPSAoMSA8PCBfTEVWRUxfQklUUykgLSAxOwoKICAvLyBBcmd1bWVudHNEZXNjcmlwdG9yIGxheW91dC4gS2VlcCBpbiBzeW5jIHdpdGggZW51bSBpbiBkYXJ0X2VudHJ5LmguCiAgc3RhdGljIGNvbnN0IGludCBfVFlQRV9BUkdTX0xFTiA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBfQ09VTlQgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgX1BPU0lUSU9OQUxfQ09VTlQgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgX0ZJUlNUX05BTUVEX0VOVFJZID0gMzsKCiAgLy8gSW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludm9jYXRpb24gbWlycm9yLgogIFN0cmluZyBfZnVuY3Rpb25OYW1lOwogIExpc3QgX2FyZ3VtZW50c0Rlc2NyaXB0b3I7CiAgTGlzdCBfYXJndW1lbnRzOwogIGJvb2wgX2lzU3VwZXJJbnZvY2F0aW9uOwogIGludCBfZGVsYXllZFR5cGVBcmd1bWVudHNMZW47CgogIC8vIEV4dGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnZvY2F0aW9uIG1pcnJvcjsgcG9wdWxhdGVkIG9uIGRlbWFuZC4KICBTeW1ib2wgX21lbWJlck5hbWU7CiAgaW50IF90eXBlOwogIExpc3Q8VHlwZT4gX3R5cGVBcmd1bWVudHM7CiAgTGlzdCBfcG9zaXRpb25hbEFyZ3VtZW50czsKICBNYXA8U3ltYm9sLCBkeW5hbWljPiBfbmFtZWRBcmd1bWVudHM7CgogIF9JbnZvY2F0aW9uTWlycm9yLl93aXRoVHlwZSh0aGlzLl9tZW1iZXJOYW1lLCB0aGlzLl90eXBlLCB0aGlzLl90eXBlQXJndW1lbnRzLAogICAgICB0aGlzLl9wb3NpdGlvbmFsQXJndW1lbnRzLCB0aGlzLl9uYW1lZEFyZ3VtZW50cykgewogICAgX3R5cGVBcmd1bWVudHMgPz89IGNvbnN0IDxUeXBlPltdOwogICAgX3Bvc2l0aW9uYWxBcmd1bWVudHMgPz89IGNvbnN0IFtdOwogICAgX25hbWVkQXJndW1lbnRzID8/PSBjb25zdCB7fTsKICB9CgogIHZvaWQgX3NldE1lbWJlck5hbWVBbmRUeXBlKCkgewogICAgX3R5cGUgPz89IDA7CiAgICBpZiAoX2Z1bmN0aW9uTmFtZS5zdGFydHNXaXRoKCJnZXQ6IikpIHsKICAgICAgX3R5cGUgfD0gX0dFVFRFUjsKICAgICAgX21lbWJlck5hbWUgPSBuZXcgaW50ZXJuYWwuU3ltYm9sLnVudmFsaWRhdGVkKF9mdW5jdGlvbk5hbWUuc3Vic3RyaW5nKDQpKTsKICAgIH0gZWxzZSBpZiAoX2Z1bmN0aW9uTmFtZS5zdGFydHNXaXRoKCJzZXQ6IikpIHsKICAgICAgX3R5cGUgfD0gX1NFVFRFUjsKICAgICAgX21lbWJlck5hbWUgPQogICAgICAgICAgbmV3IGludGVybmFsLlN5bWJvbC51bnZhbGlkYXRlZChfZnVuY3Rpb25OYW1lLnN1YnN0cmluZyg0KSArICI9Iik7CiAgICB9IGVsc2UgewogICAgICBfdHlwZSB8PQogICAgICAgICAgX2lzU3VwZXJJbnZvY2F0aW9uID8gKF9TVVBFUiA8PCBfTEVWRUxfU0hJRlQpIHwgX01FVEhPRCA6IF9NRVRIT0Q7CiAgICAgIF9tZW1iZXJOYW1lID0gbmV3IGludGVybmFsLlN5bWJvbC51bnZhbGlkYXRlZChfZnVuY3Rpb25OYW1lKTsKICAgIH0KICB9CgogIFN5bWJvbCBnZXQgbWVtYmVyTmFtZSB7CiAgICBpZiAoX21lbWJlck5hbWUgPT0gbnVsbCkgewogICAgICBfc2V0TWVtYmVyTmFtZUFuZFR5cGUoKTsKICAgIH0KICAgIHJldHVybiBfbWVtYmVyTmFtZTsKICB9CgogIGludCBnZXQgX3R5cGVBcmdzTGVuIHsKICAgIGludCB0eXBlQXJnc0xlbiA9IF9hcmd1bWVudHNEZXNjcmlwdG9yW19UWVBFX0FSR1NfTEVOXTsKICAgIHJldHVybiB0eXBlQXJnc0xlbiA9PSAwID8gX2RlbGF5ZWRUeXBlQXJndW1lbnRzTGVuIDogdHlwZUFyZ3NMZW47CiAgfQoKICBMaXN0PFR5cGU+IGdldCB0eXBlQXJndW1lbnRzIHsKICAgIGlmIChfdHlwZUFyZ3VtZW50cyA9PSBudWxsKSB7CiAgICAgIGlmIChfdHlwZUFyZ3NMZW4gPT0gMCkgewogICAgICAgIHJldHVybiBfdHlwZUFyZ3VtZW50cyA9IGNvbnN0IDxUeXBlPltdOwogICAgICB9CiAgICAgIC8vIEEgVHlwZUFyZ3VtZW50cyBvYmplY3QgZG9lcyBub3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgRGFydCBjbGFzcyBhbmQKICAgICAgLy8gY2Fubm90IGJlIGFjY2Vzc2VkIGFzIGFuIGFycmF5IGluIERhcnQuIFRoZXJlZm9yZSwgd2UgbmVlZCBhIG5hdGl2ZQogICAgICAvLyBjYWxsIHRvIHVucGFjayB0aGUgaW5kaXZpZHVhbCB0eXBlcyBpbnRvIGEgbGlzdC4KICAgICAgX3R5cGVBcmd1bWVudHMgPSBfdW5wYWNrVHlwZUFyZ3VtZW50cyhfYXJndW1lbnRzWzBdLCBfdHlwZUFyZ3NMZW4pOwogICAgfQogICAgcmV0dXJuIF90eXBlQXJndW1lbnRzOwogIH0KCiAgLy8gVW5wYWNrIHRoZSBnaXZlbiBUeXBlQXJndW1lbnRzIG9iamVjdCBpbnRvIGEgbmV3IGxpc3Qgb2YgaW5kaXZpZHVhbCB0eXBlcy4KICBzdGF0aWMgTGlzdDxUeXBlPiBfdW5wYWNrVHlwZUFyZ3VtZW50cyh0eXBlQXJndW1lbnRzLCBpbnQgbnVtVHlwZUFyZ3VtZW50cykKICAgICAgbmF0aXZlICJJbnZvY2F0aW9uTWlycm9yX3VucGFja1R5cGVBcmd1bWVudHMiOwoKICBMaXN0IGdldCBwb3NpdGlvbmFsQXJndW1lbnRzIHsKICAgIGlmIChfcG9zaXRpb25hbEFyZ3VtZW50cyA9PSBudWxsKSB7CiAgICAgIC8vIFRoZSBhcmd1bWVudCBkZXNjcmlwdG9yIGNvdW50cyB0aGUgcmVjZWl2ZXIsIGJ1dCBub3QgdGhlIHR5cGUgYXJndW1lbnRzCiAgICAgIC8vIGFzIHBvc2l0aW9uYWwgYXJndW1lbnRzLgogICAgICBpbnQgbnVtUG9zaXRpb25hbEFyZ3VtZW50cyA9IF9hcmd1bWVudHNEZXNjcmlwdG9yW19QT1NJVElPTkFMX0NPVU5UXSAtIDE7CiAgICAgIGlmIChudW1Qb3NpdGlvbmFsQXJndW1lbnRzID09IDApIHsKICAgICAgICByZXR1cm4gX3Bvc2l0aW9uYWxBcmd1bWVudHMgPSBjb25zdCBbXTsKICAgICAgfQogICAgICAvLyBFeGNsdWRlIHJlY2VpdmVyIGFuZCB0eXBlIGFyZ3MgaW4gdGhlIHJldHVybmVkIGxpc3QuCiAgICAgIGludCByZWNlaXZlckluZGV4ID0gX3R5cGVBcmdzTGVuID4gMCA/IDEgOiAwOwogICAgICBfcG9zaXRpb25hbEFyZ3VtZW50cyA9IG5ldyBfSW1tdXRhYmxlTGlzdC5fZnJvbSgKICAgICAgICAgIF9hcmd1bWVudHMsIHJlY2VpdmVySW5kZXggKyAxLCBudW1Qb3NpdGlvbmFsQXJndW1lbnRzKTsKICAgIH0KICAgIHJldHVybiBfcG9zaXRpb25hbEFyZ3VtZW50czsKICB9CgogIE1hcDxTeW1ib2wsIGR5bmFtaWM+IGdldCBuYW1lZEFyZ3VtZW50cyB7CiAgICBpZiAoX25hbWVkQXJndW1lbnRzID09IG51bGwpIHsKICAgICAgaW50IG51bUFyZ3VtZW50cyA9IF9hcmd1bWVudHNEZXNjcmlwdG9yW19DT1VOVF0gLSAxOyAvLyBFeGNsdWRlIHJlY2VpdmVyLgogICAgICBpbnQgbnVtUG9zaXRpb25hbEFyZ3VtZW50cyA9IF9hcmd1bWVudHNEZXNjcmlwdG9yW19QT1NJVElPTkFMX0NPVU5UXSAtIDE7CiAgICAgIGludCBudW1OYW1lZEFyZ3VtZW50cyA9IG51bUFyZ3VtZW50cyAtIG51bVBvc2l0aW9uYWxBcmd1bWVudHM7CiAgICAgIGlmIChudW1OYW1lZEFyZ3VtZW50cyA9PSAwKSB7CiAgICAgICAgcmV0dXJuIF9uYW1lZEFyZ3VtZW50cyA9IGNvbnN0IHt9OwogICAgICB9CiAgICAgIGludCByZWNlaXZlckluZGV4ID0gX3R5cGVBcmdzTGVuID4gMCA/IDEgOiAwOwogICAgICBfbmFtZWRBcmd1bWVudHMgPSBuZXcgTWFwPFN5bWJvbCwgZHluYW1pYz4oKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1OYW1lZEFyZ3VtZW50czsgaSsrKSB7CiAgICAgICAgaW50IG5hbWVkRW50cnlJbmRleCA9IF9GSVJTVF9OQU1FRF9FTlRSWSArIDIgKiBpOwogICAgICAgIFN0cmluZyBhcmdfbmFtZSA9IF9hcmd1bWVudHNEZXNjcmlwdG9yW25hbWVkRW50cnlJbmRleF07CiAgICAgICAgdmFyIGFyZ192YWx1ZSA9IF9hcmd1bWVudHNbCiAgICAgICAgICAgIHJlY2VpdmVySW5kZXggKyBfYXJndW1lbnRzRGVzY3JpcHRvcltuYW1lZEVudHJ5SW5kZXggKyAxXV07CiAgICAgICAgX25hbWVkQXJndW1lbnRzW25ldyBpbnRlcm5hbC5TeW1ib2wudW52YWxpZGF0ZWQoYXJnX25hbWUpXSA9IGFyZ192YWx1ZTsKICAgICAgfQogICAgICBfbmFtZWRBcmd1bWVudHMgPSBuZXcgTWFwLnVubW9kaWZpYWJsZShfbmFtZWRBcmd1bWVudHMpOwogICAgfQogICAgcmV0dXJuIF9uYW1lZEFyZ3VtZW50czsKICB9CgogIGJvb2wgZ2V0IGlzTWV0aG9kIHsKICAgIGlmIChfdHlwZSA9PSBudWxsKSB7CiAgICAgIF9zZXRNZW1iZXJOYW1lQW5kVHlwZSgpOwogICAgfQogICAgcmV0dXJuIChfdHlwZSAmIF9LSU5EX01BU0spID09IF9NRVRIT0Q7CiAgfQoKICBib29sIGdldCBpc0FjY2Vzc29yIHsKICAgIGlmIChfdHlwZSA9PSBudWxsKSB7CiAgICAgIF9zZXRNZW1iZXJOYW1lQW5kVHlwZSgpOwogICAgfQogICAgcmV0dXJuIChfdHlwZSAmIF9LSU5EX01BU0spICE9IF9NRVRIT0Q7CiAgfQoKICBib29sIGdldCBpc0dldHRlciB7CiAgICBpZiAoX3R5cGUgPT0gbnVsbCkgewogICAgICBfc2V0TWVtYmVyTmFtZUFuZFR5cGUoKTsKICAgIH0KICAgIHJldHVybiAoX3R5cGUgJiBfS0lORF9NQVNLKSA9PSBfR0VUVEVSOwogIH0KCiAgYm9vbCBnZXQgaXNTZXR0ZXIgewogICAgaWYgKF90eXBlID09IG51bGwpIHsKICAgICAgX3NldE1lbWJlck5hbWVBbmRUeXBlKCk7CiAgICB9CiAgICByZXR1cm4gKF90eXBlICYgX0tJTkRfTUFTSykgPT0gX1NFVFRFUjsKICB9CgogIF9JbnZvY2F0aW9uTWlycm9yKHRoaXMuX2Z1bmN0aW9uTmFtZSwgdGhpcy5fYXJndW1lbnRzRGVzY3JpcHRvciwKICAgICAgdGhpcy5fYXJndW1lbnRzLCB0aGlzLl9pc1N1cGVySW52b2NhdGlvbiwgdGhpcy5fdHlwZSwKICAgICAgW3RoaXMuX2RlbGF5ZWRUeXBlQXJndW1lbnRzTGVuID0gMF0pOwoKICBfSW52b2NhdGlvbk1pcnJvci5fd2l0aG91dFR5cGUodGhpcy5fZnVuY3Rpb25OYW1lLCB0aGlzLl90eXBlQXJndW1lbnRzLAogICAgICB0aGlzLl9wb3NpdGlvbmFsQXJndW1lbnRzLCB0aGlzLl9uYW1lZEFyZ3VtZW50cywgdGhpcy5faXNTdXBlckludm9jYXRpb24sCiAgICAgIFt0aGlzLl9kZWxheWVkVHlwZUFyZ3VtZW50c0xlbiA9IDBdKTsKCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgc3RhdGljIF9hbGxvY2F0ZUludm9jYXRpb25NaXJyb3IoU3RyaW5nIGZ1bmN0aW9uTmFtZSwKICAgICAgTGlzdCBhcmd1bWVudHNEZXNjcmlwdG9yLCBMaXN0IGFyZ3VtZW50cywgYm9vbCBpc1N1cGVySW52b2NhdGlvbiwKICAgICAgW2ludCB0eXBlID0gbnVsbF0pIHsKICAgIHJldHVybiBuZXcgX0ludm9jYXRpb25NaXJyb3IoCiAgICAgICAgZnVuY3Rpb25OYW1lLCBhcmd1bWVudHNEZXNjcmlwdG9yLCBhcmd1bWVudHMsIGlzU3VwZXJJbnZvY2F0aW9uLCB0eXBlKTsKICB9CgogIC8vIFRoaXMgZmFjdG9yeSBpcyB1c2VkIHdoZW4gY3JlYXRpbmcgYW4gYEludm9jYXRpb25gIGZvciBhIGNsb3N1cmUgY2FsbCB3aGljaAogIC8vIG1heSBoYXZlIGRlbGF5ZWQgdHlwZSBhcmd1bWVudHMuIEluIHRoYXQgY2FzZSwgdGhlIGFyZ3VtZW50cyBkZXNjcmlwdG9yIHdpbGwKICAvLyBpbmRpY2F0ZSAwIHR5cGUgYXJndW1lbnRzLCBidXQgdGhlIGFjdHVhbCBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHMgYXJlCiAgLy8gcGFzc2VkIGluIGBkZWxheWVkVHlwZUFyZ3VtZW50c0xlbmAuIElmIGFueSB0eXBlIGFyZ3VtZW50cyBhcmUgYXZhaWxhYmxlLAogIC8vIHRoZSB0eXBlIGFyZ3VtZW50cyB2ZWN0b3Igd2lsbCBiZSB0aGUgZmlyc3QgZW50cnkgaW4gYGFyZ3VtZW50c2AuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgc3RhdGljIF9hbGxvY2F0ZUludm9jYXRpb25NaXJyb3JGb3JDbG9zdXJlKAogICAgICBTdHJpbmcgZnVuY3Rpb25OYW1lLAogICAgICBMaXN0IGFyZ3VtZW50c0Rlc2NyaXB0b3IsCiAgICAgIExpc3QgYXJndW1lbnRzLAogICAgICBpbnQgdHlwZSwKICAgICAgaW50IGRlbGF5ZWRUeXBlQXJndW1lbnRzTGVuKSB7CiAgICByZXR1cm4gbmV3IF9JbnZvY2F0aW9uTWlycm9yKGZ1bmN0aW9uTmFtZSwgYXJndW1lbnRzRGVzY3JpcHRvciwgYXJndW1lbnRzLAogICAgICAgIGZhbHNlLCB0eXBlLCBkZWxheWVkVHlwZUFyZ3VtZW50c0xlbik7CiAgfQp9CoDOAE5OPAEPAR4BP0YkMC8/ICAgHyMkIzcBSz0hHyAlIy4kOQFJJx8qKwE3GB0TGyABTBYNHR0oAVE5JyciBAEhESwYUTMYFE0ND01EBgQBGh8fBhgEARk8RgQBISIfMAhNTTpKBhsEAVBONQEhKFEiUCkwCD40N0IGIQQBLCNQUEUkKwg0NDQ6QSRIUAg/BhwEARYZHwYsBAEYGR8GLAQBFhkfBiwEARYZHwYsBAFDPCwBSlAsASQ4SBsiUAQBUVJMT0ckLhsgFhAlTy8EAgEsZGFydDpjb3JlLXBhdGNoL2ludm9jYXRpb25fbWlycm9yX3BhdGNoLmRhcnRNb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvX2ludGVybmFsL3ZtL2xpYi9saWJfcHJlZml4LmRhcnSCDi8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCi8vIFRoaXMgdHlwZSBjb3JyZXNwb25kcyB0byB0aGUgVk0taW50ZXJuYWwgY2xhc3MgTGlicmFyeVByZWZpeC4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfTGlicmFyeVByZWZpeCB7CiAgZmFjdG9yeSBfTGlicmFyeVByZWZpeC5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgYm9vbCBpc0xvYWRlZCgpID0+IHRydWU7CgogIGxvYWRMaWJyYXJ5KCkgPT4gbmV3IEZ1dHVyZS52YWx1ZSh0cnVlKTsKfQoVAE5OPAEPAR4BQRoXLRkEARsBKwIBH2RhcnQ6Y29yZS1wYXRjaC9saWJfcHJlZml4LmRhcnRPb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvX2ludGVybmFsL3ZtL2xpYi9yZWdleHBfcGF0Y2guZGFydLVvLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIFJlZ0V4cCB7CiAgQHBhdGNoCiAgZmFjdG9yeSBSZWdFeHAoU3RyaW5nIHNvdXJjZSwKICAgICAge2Jvb2wgbXVsdGlMaW5lOiBmYWxzZSwKICAgICAgYm9vbCBjYXNlU2Vuc2l0aXZlOiB0cnVlLAogICAgICBib29sIHVuaWNvZGU6IGZhbHNlLAogICAgICBib29sIGRvdEFsbDogZmFsc2V9KSB7CiAgICBfUmVnRXhwSGFzaEtleSBrZXkgPQogICAgICAgIG5ldyBfUmVnRXhwSGFzaEtleShzb3VyY2UsIG11bHRpTGluZSwgY2FzZVNlbnNpdGl2ZSwgdW5pY29kZSwgZG90QWxsKTsKICAgIF9SZWdFeHBIYXNoVmFsdWUgdmFsdWUgPSBfY2FjaGVba2V5XTsKCiAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICBpZiAoX2NhY2hlLmxlbmd0aCA+IF9NQVhfQ0FDSEVfU0laRSkgewogICAgICAgIF9SZWdFeHBIYXNoS2V5IGxhc3RLZXkgPSBfcmVjZW50bHlVc2VkLmxhc3Q7CiAgICAgICAgX3JlY2VudGx5VXNlZC5yZW1vdmUobGFzdEtleSk7CiAgICAgICAgX2NhY2hlLnJlbW92ZShsYXN0S2V5KTsKICAgICAgfQoKICAgICAgdmFsdWUgPSBuZXcgX1JlZ0V4cEhhc2hWYWx1ZSgKICAgICAgICAgIG5ldyBfUmVnRXhwKHNvdXJjZSwKICAgICAgICAgICAgICBtdWx0aUxpbmU6IG11bHRpTGluZSwKICAgICAgICAgICAgICBjYXNlU2Vuc2l0aXZlOiBjYXNlU2Vuc2l0aXZlLAogICAgICAgICAgICAgIHVuaWNvZGU6IHVuaWNvZGUsCiAgICAgICAgICAgICAgZG90QWxsOiBkb3RBbGwpLAogICAgICAgICAga2V5KTsKICAgICAgX2NhY2hlW2tleV0gPSB2YWx1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHZhbHVlLmtleS51bmxpbmsoKTsKICAgIH0KCiAgICBhc3NlcnQodmFsdWUgIT0gbnVsbCk7CgogICAgX3JlY2VudGx5VXNlZC5hZGRGaXJzdCh2YWx1ZS5rZXkpOwogICAgYXNzZXJ0KF9yZWNlbnRseVVzZWQubGVuZ3RoID09IF9jYWNoZS5sZW5ndGgpOwoKICAgIC8vIFRPRE8oemVybnkpOiBXZSBtaWdodCBub3Qgd2FudCB0byBjYW5vbmljYWxpemUgcmVnZXhwIG9iamVjdHMuCiAgICByZXR1cm4gdmFsdWUucmVnZXhwOwogIH0KCiAgLyoqCiAgICogRmluZHMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBSZWdFeHAtc2lnbmlmaWNhbnQgY2hhciBpbiBbdGV4dF0uCiAgICoKICAgKiBTdGFydHMgbG9va2luZyBmcm9tIFtzdGFydF0uIFJldHVybnMgYHRleHQubGVuZ3RoYCBpZiBubyBjaGFyYWN0ZXIKICAgKiBpcyBmb3VuZCB0aGF0IGhhcyBzcGVjaWFsIG1lYW5pbmcgaW4gUmVnRXhwIHN5bnRheC4KICAgKi8KICBzdGF0aWMgaW50IF9maW5kRXNjYXBlQ2hhcihTdHJpbmcgdGV4dCwgaW50IHN0YXJ0KSB7CiAgICAvLyBUYWJsZSB3aGVyZSBlYWNoIGNoYXJhY3RlciBpbiB0aGUgcmFuZ2UgVSswMDAwIHRvIFUrMDA3ZiBpcyByZXByZXNlbnRlZAogICAgLy8gYnkgd2hldGhlciBpdCBuZWVkcyB0byBiZSBlc2NhcGVkIGluIGEgcmVnZXhwLgogICAgLy8gVGhlIFx4MDAgY2hhcmFjdGVycyBtZWFucyBlc2NhY3BlZCwgYW5kIFx4MDEgbWVhbnMgbm9uLWVzY2FwZWQuCiAgICBjb25zdCBlc2NhcGVzID0KICAgICAgICAiXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMSIKICAgICAgICAiXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMSIKICAgICAgICAvLyAgICAgICAgICAgICAgICAgJCAgICAgICAgICAgICAgICggICApICAgKiAgICsgICAgICAgICAgIC4KICAgICAgICAiXHgwMVx4MDFceDAxXHgwMVx4MDBceDAxXHgwMVx4MDFceDAwXHgwMFx4MDBceDAwXHgwMVx4MDFceDAwXHgwMSIKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/CiAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDAiCiAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDEiCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbICAgXCAgIF0gICBeCiAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMFx4MDBceDAwXHgwMFx4MDEiCiAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDEiCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgfCAgIH0KICAgICAgICAiXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAwXHgwMFx4MDBceDAxXHgwMSI7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7CiAgICAgIGludCBjaGFyID0gdGV4dC5jb2RlVW5pdEF0KGkpOwogICAgICBpZiAoY2hhciA8PSAweDdmICYmIGVzY2FwZXMuY29kZVVuaXRBdChjaGFyKSA9PSAwKSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiB0ZXh0Lmxlbmd0aDsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBTdHJpbmcgZXNjYXBlKFN0cmluZyB0ZXh0KSB7CiAgICBpbnQgZXNjYXBlQ2hhckluZGV4ID0gX2ZpbmRFc2NhcGVDaGFyKHRleHQsIDApOwogICAgLy8gSWYgdGhlIHRleHQgY29udGFpbnMgbm8gY2hhcmFjdGVycyBuZWVkaW5nIGVzY2FwZSwgcmV0dXJuIGl0IGRpcmVjdGx5LgogICAgaWYgKGVzY2FwZUNoYXJJbmRleCA9PSB0ZXh0Lmxlbmd0aCkgcmV0dXJuIHRleHQ7CgogICAgdmFyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGludCBwcmV2aW91c1NsaWNlRW5kSW5kZXggPSAwOwogICAgZG8gewogICAgICAvLyBDb3B5IGNoYXJhY3RlcnMgZnJvbSBwcmV2aW91cyBlc2NhcGUgdG8gY3VycmVudCBlc2NhcGUgaW50byByZXN1bHQuCiAgICAgIC8vIFRoaXMgaW5jbHVkZXMgdGhlIHByZXZpb3VzbHkgZXNjYXBlZCBjaGFyYWN0ZXIuCiAgICAgIGJ1ZmZlci53cml0ZSh0ZXh0LnN1YnN0cmluZyhwcmV2aW91c1NsaWNlRW5kSW5kZXgsIGVzY2FwZUNoYXJJbmRleCkpOwogICAgICAvLyBQcmVwYXJlIHRoZSBjdXJyZW50IGNoYXJhY3RlciB0byBiZSBlc2NhcGVkIGJ5IHByZWZpeGluZyBpdCB3aXRoIGEgJ1wnLgogICAgICBidWZmZXIud3JpdGUociJcIik7CiAgICAgIHByZXZpb3VzU2xpY2VFbmRJbmRleCA9IGVzY2FwZUNoYXJJbmRleDsKICAgICAgZXNjYXBlQ2hhckluZGV4ID0gX2ZpbmRFc2NhcGVDaGFyKHRleHQsIGVzY2FwZUNoYXJJbmRleCArIDEpOwogICAgfSB3aGlsZSAoZXNjYXBlQ2hhckluZGV4IDwgdGV4dC5sZW5ndGgpOwogICAgLy8gQ29weSB0YWlsIG9mIHN0cmluZyBpbnRvIHJlc3VsdC4KICAgIGJ1ZmZlci53cml0ZSh0ZXh0LnN1YnN0cmluZyhwcmV2aW91c1NsaWNlRW5kSW5kZXgsIGVzY2FwZUNoYXJJbmRleCkpOwogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgLy8gUmVndWxhciBleHByZXNzaW9uIG9iamVjdHMgYXJlIHN0b3JlZCBpbiBhIGNhY2hlIG9mIHVwIHRvIF9NQVhfQ0FDSEVfU0laRQogIC8vIGVsZW1lbnRzIHVzaW5nIGFuIExSVSBldmljdGlvbiBzdHJhdGVneS4KICAvLyBUT0RPKHplcm55KTogRG8gbm90IGltcG9zZSBhIGZpeGVkIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgY2FjaGVkIG9iamVjdHMuCiAgLy8gT3RoZXIgcG9zc2liaWxpdGllcyBjb3VsZCBiZSBsaW1pdGluZyBieSB0aGUgc2l6ZSBvZiB0aGUgcmVnZXhwIG9iamVjdHMsCiAgLy8gb3IgaW1wb3NpbmcgYSBsb3dlciB0aW1lIGJvdW5kIGZvciB0aGUgbW9zdCByZWNlbnQgdXNlIHVuZGVyIHdoaWNoIGEgcmVnZXhwCiAgLy8gbWF5IG5vdCBiZSByZW1vdmVkIGZyb20gdGhlIGNhY2hlLgogIC8vIFRPRE8oemVybnkpOiBVc2Ugc2VsZi1zaXppbmcgY2FjaGUgc2ltaWxhciB0byBfQWNjZXNzb3JDYWNoZSBpbgogIC8vIG1pcnJvcnNfaW1wbC5kYXJ0LgogIHN0YXRpYyBjb25zdCBpbnQgX01BWF9DQUNIRV9TSVpFID0gMjU2OwogIHN0YXRpYyBmaW5hbCBNYXA8X1JlZ0V4cEhhc2hLZXksIF9SZWdFeHBIYXNoVmFsdWU+IF9jYWNoZSA9CiAgICAgIG5ldyBIYXNoTWFwPF9SZWdFeHBIYXNoS2V5LCBfUmVnRXhwSGFzaFZhbHVlPigpOwogIHN0YXRpYyBmaW5hbCBMaW5rZWRMaXN0PF9SZWdFeHBIYXNoS2V5PiBfcmVjZW50bHlVc2VkID0KICAgICAgbmV3IExpbmtlZExpc3Q8X1JlZ0V4cEhhc2hLZXk+KCk7CgogIGludCBnZXQgX2dyb3VwQ291bnQ7CiAgSXRlcmFibGU8U3RyaW5nPiBnZXQgX2dyb3VwTmFtZXM7CiAgaW50IF9ncm91cE5hbWVJbmRleChTdHJpbmcgbmFtZSk7Cn0KCi8vIFJlcHJlc2VudHMgYm90aCBhIGtleSBpbiB0aGUgcmVndWxhciBleHByZXNzaW9uIGNhY2hlIGFzIHdlbGwgYXMgaXRzCi8vIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gdGhlIExSVSBsaXN0LgpjbGFzcyBfUmVnRXhwSGFzaEtleSBleHRlbmRzIExpbmtlZExpc3RFbnRyeTxfUmVnRXhwSGFzaEtleT4gewogIGZpbmFsIFN0cmluZyBwYXR0ZXJuOwogIGZpbmFsIGJvb2wgbXVsdGlMaW5lOwogIGZpbmFsIGJvb2wgY2FzZVNlbnNpdGl2ZTsKICBmaW5hbCBib29sIHVuaWNvZGU7CiAgZmluYWwgYm9vbCBkb3RBbGw7CgogIF9SZWdFeHBIYXNoS2V5KHRoaXMucGF0dGVybiwgdGhpcy5tdWx0aUxpbmUsIHRoaXMuY2FzZVNlbnNpdGl2ZSwgdGhpcy51bmljb2RlLAogICAgICB0aGlzLmRvdEFsbCk7CgogIGludCBnZXQgaGFzaENvZGUgPT4gcGF0dGVybi5oYXNoQ29kZTsKICBib29sIG9wZXJhdG9yID09KHRoYXQpIHsKICAgIHJldHVybiAodGhhdCBpcyBfUmVnRXhwSGFzaEtleSkgJiYKICAgICAgICAodGhpcy5wYXR0ZXJuID09IHRoYXQucGF0dGVybikgJiYKICAgICAgICAodGhpcy5tdWx0aUxpbmUgPT0gdGhhdC5tdWx0aUxpbmUpICYmCiAgICAgICAgKHRoaXMuY2FzZVNlbnNpdGl2ZSA9PSB0aGF0LmNhc2VTZW5zaXRpdmUpICYmCiAgICAgICAgKHRoaXMudW5pY29kZSA9PSB0aGF0LnVuaWNvZGUpICYmCiAgICAgICAgKHRoaXMuZG90QWxsID09IHRoYXQuZG90QWxsKTsKICB9Cn0KCi8vIFJlcHJlc2VudHMgYSB2YWx1ZSBpbiB0aGUgcmVndWxhciBleHByZXNzaW9uIGNhY2hlLiBDb250YWlucyBhIHBvaW50ZXIKLy8gYmFjayB0byB0aGUga2V5IGluIG9yZGVyIHRvIGFjY2VzcyB0aGUgY29ycmVzcG9uZGluZyBMUlUgZW50cnkuCmNsYXNzIF9SZWdFeHBIYXNoVmFsdWUgewogIGZpbmFsIF9SZWdFeHAgcmVnZXhwOwogIGZpbmFsIF9SZWdFeHBIYXNoS2V5IGtleTsKCiAgX1JlZ0V4cEhhc2hWYWx1ZSh0aGlzLnJlZ2V4cCwgdGhpcy5rZXkpOwp9CgpjbGFzcyBfUmVnRXhwTWF0Y2ggaW1wbGVtZW50cyBSZWdFeHBNYXRjaCB7CiAgX1JlZ0V4cE1hdGNoLl8odGhpcy5fcmVnZXhwLCB0aGlzLmlucHV0LCB0aGlzLl9tYXRjaCk7CgogIGludCBnZXQgc3RhcnQgPT4gX3N0YXJ0KDApOwogIGludCBnZXQgZW5kID0+IF9lbmQoMCk7CgogIGludCBfc3RhcnQoaW50IGdyb3VwSWR4KSB7CiAgICByZXR1cm4gX21hdGNoWyhncm91cElkeCAqIF9NQVRDSF9QQUlSKV07CiAgfQoKICBpbnQgX2VuZChpbnQgZ3JvdXBJZHgpIHsKICAgIHJldHVybiBfbWF0Y2hbKGdyb3VwSWR4ICogX01BVENIX1BBSVIpICsgMV07CiAgfQoKICBTdHJpbmcgZ3JvdXAoaW50IGdyb3VwSWR4KSB7CiAgICBpZiAoZ3JvdXBJZHggPCAwIHx8IGdyb3VwSWR4ID4gX3JlZ2V4cC5fZ3JvdXBDb3VudCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci52YWx1ZShncm91cElkeCk7CiAgICB9CiAgICBpbnQgc3RhcnRJbmRleCA9IF9zdGFydChncm91cElkeCk7CiAgICBpbnQgZW5kSW5kZXggPSBfZW5kKGdyb3VwSWR4KTsKICAgIGlmIChzdGFydEluZGV4ID09IC0xKSB7CiAgICAgIGFzc2VydChlbmRJbmRleCA9PSAtMSk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIGlucHV0Ll9zdWJzdHJpbmdVbmNoZWNrZWQoc3RhcnRJbmRleCwgZW5kSW5kZXgpOwogIH0KCiAgU3RyaW5nIG9wZXJhdG9yIFtdKGludCBncm91cElkeCkgewogICAgcmV0dXJuIHRoaXMuZ3JvdXAoZ3JvdXBJZHgpOwogIH0KCiAgTGlzdDxTdHJpbmc+IGdyb3VwcyhMaXN0PGludD4gZ3JvdXBzU3BlYykgewogICAgdmFyIGdyb3Vwc0xpc3QgPSBuZXcgTGlzdDxTdHJpbmc+KGdyb3Vwc1NwZWMubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBzU3BlYy5sZW5ndGg7IGkrKykgewogICAgICBncm91cHNMaXN0W2ldID0gZ3JvdXAoZ3JvdXBzU3BlY1tpXSk7CiAgICB9CiAgICByZXR1cm4gZ3JvdXBzTGlzdDsKICB9CgogIGludCBnZXQgZ3JvdXBDb3VudCA9PiBfcmVnZXhwLl9ncm91cENvdW50OwoKICBQYXR0ZXJuIGdldCBwYXR0ZXJuID0+IF9yZWdleHA7CgogIFN0cmluZyBuYW1lZEdyb3VwKFN0cmluZyBuYW1lKSB7CiAgICB2YXIgaWR4ID0gX3JlZ2V4cC5fZ3JvdXBOYW1lSW5kZXgobmFtZSk7CiAgICBpZiAoaWR4IDwgMCkgewogICAgICB0aHJvdyBBcmd1bWVudEVycm9yKCJOb3QgYSBjYXB0dXJlIGdyb3VwIG5hbWU6ICR7bmFtZX0iKTsKICAgIH0KICAgIHJldHVybiBncm91cChpZHgpOwogIH0KCiAgSXRlcmFibGU8U3RyaW5nPiBnZXQgZ3JvdXBOYW1lcyB7CiAgICByZXR1cm4gX3JlZ2V4cC5fZ3JvdXBOYW1lczsKICB9CgogIGZpbmFsIFJlZ0V4cCBfcmVnZXhwOwogIGZpbmFsIFN0cmluZyBpbnB1dDsKICBmaW5hbCBMaXN0PGludD4gX21hdGNoOwogIHN0YXRpYyBjb25zdCBpbnQgX01BVENIX1BBSVIgPSAyOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9SZWdFeHAgaW1wbGVtZW50cyBSZWdFeHAgewogIGZhY3RvcnkgX1JlZ0V4cChTdHJpbmcgcGF0dGVybiwKICAgICAge2Jvb2wgbXVsdGlMaW5lOiBmYWxzZSwKICAgICAgYm9vbCBjYXNlU2Vuc2l0aXZlOiB0cnVlLAogICAgICBib29sIHVuaWNvZGU6IGZhbHNlLAogICAgICBib29sIGRvdEFsbDogZmFsc2V9KSBuYXRpdmUgIlJlZ0V4cF9mYWN0b3J5IjsKCiAgUmVnRXhwTWF0Y2ggZmlyc3RNYXRjaChTdHJpbmcgaW5wdXQpIHsKICAgIGlmIChpbnB1dCA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCdpbnB1dCcpOwogICAgTGlzdCBtYXRjaCA9IF9FeGVjdXRlTWF0Y2goaW5wdXQsIDApOwogICAgaWYgKG1hdGNoID09IG51bGwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gbmV3IF9SZWdFeHBNYXRjaC5fKHRoaXMsIGlucHV0LCBtYXRjaCk7CiAgfQoKICBJdGVyYWJsZTxSZWdFeHBNYXRjaD4gYWxsTWF0Y2hlcyhTdHJpbmcgc3RyaW5nLCBbaW50IHN0YXJ0ID0gMF0pIHsKICAgIGlmIChzdHJpbmcgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgnaW5wdXQnKTsKICAgIGlmIChzdGFydCA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCdzdGFydCcpOwogICAgaWYgKDAgPiBzdGFydCB8fCBzdGFydCA+IHN0cmluZy5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2Uoc3RhcnQsIDAsIHN0cmluZy5sZW5ndGgpOwogICAgfQogICAgcmV0dXJuIG5ldyBfQWxsTWF0Y2hlc0l0ZXJhYmxlKHRoaXMsIHN0cmluZywgc3RhcnQpOwogIH0KCiAgUmVnRXhwTWF0Y2ggbWF0Y2hBc1ByZWZpeChTdHJpbmcgc3RyaW5nLCBbaW50IHN0YXJ0ID0gMF0pIHsKICAgIGlmIChzdHJpbmcgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgnc3RyaW5nJyk7CiAgICBpZiAoc3RhcnQgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgnc3RhcnQnKTsKICAgIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPiBzdHJpbmcubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKHN0YXJ0LCAwLCBzdHJpbmcubGVuZ3RoKTsKICAgIH0KICAgIExpc3QgbGlzdCA9IF9FeGVjdXRlTWF0Y2hTdGlja3koc3RyaW5nLCBzdGFydCk7CiAgICBpZiAobGlzdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBuZXcgX1JlZ0V4cE1hdGNoLl8odGhpcywgc3RyaW5nLCBsaXN0KTsKICB9CgogIGJvb2wgaGFzTWF0Y2goU3RyaW5nIGlucHV0KSB7CiAgICBpZiAoaW5wdXQgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgnaW5wdXQnKTsKICAgIExpc3QgbWF0Y2ggPSBfRXhlY3V0ZU1hdGNoKGlucHV0LCAwKTsKICAgIHJldHVybiAobWF0Y2ggPT0gbnVsbCkgPyBmYWxzZSA6IHRydWU7CiAgfQoKICBTdHJpbmcgc3RyaW5nTWF0Y2goU3RyaW5nIGlucHV0KSB7CiAgICBpZiAoaW5wdXQgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgnaW5wdXQnKTsKICAgIExpc3QgbWF0Y2ggPSBfRXhlY3V0ZU1hdGNoKGlucHV0LCAwKTsKICAgIGlmIChtYXRjaCA9PSBudWxsKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIGlucHV0Ll9zdWJzdHJpbmdVbmNoZWNrZWQobWF0Y2hbMF0sIG1hdGNoWzFdKTsKICB9CgogIFN0cmluZyBnZXQgcGF0dGVybiBuYXRpdmUgIlJlZ0V4cF9nZXRQYXR0ZXJuIjsKCiAgYm9vbCBnZXQgaXNNdWx0aUxpbmUgbmF0aXZlICJSZWdFeHBfZ2V0SXNNdWx0aUxpbmUiOwoKICBib29sIGdldCBpc0Nhc2VTZW5zaXRpdmUgbmF0aXZlICJSZWdFeHBfZ2V0SXNDYXNlU2Vuc2l0aXZlIjsKCiAgYm9vbCBnZXQgaXNVbmljb2RlIG5hdGl2ZSAiUmVnRXhwX2dldElzVW5pY29kZSI7CgogIGJvb2wgZ2V0IGlzRG90QWxsIG5hdGl2ZSAiUmVnRXhwX2dldElzRG90QWxsIjsKCiAgaW50IGdldCBfZ3JvdXBDb3VudCBuYXRpdmUgIlJlZ0V4cF9nZXRHcm91cENvdW50IjsKCiAgLy8gUmV0dXJucyBhIExpc3QgW1N0cmluZywgaW50LCBTdHJpbmcsIGludCwgLi4uXSB3aGVyZSBlYWNoCiAgLy8gU3RyaW5nIGlzIHRoZSBuYW1lIG9mIGEgY2FwdHVyZSBncm91cCBhbmQgdGhlIGZvbGxvd2luZwogIC8vIGludCBpcyB0aGF0IGNhcHR1cmUgZ3JvdXAncyBpbmRleC4KICBMaXN0IGdldCBfZ3JvdXBOYW1lTGlzdCBuYXRpdmUgIlJlZ0V4cF9nZXRHcm91cE5hbWVNYXAiOwoKICBJdGVyYWJsZTxTdHJpbmc+IGdldCBfZ3JvdXBOYW1lcyBzeW5jKiB7CiAgICBmaW5hbCBuYW1lTGlzdCA9IF9ncm91cE5hbWVMaXN0OwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lTGlzdC5sZW5ndGg7IGkgKz0gMikgewogICAgICB5aWVsZCBuYW1lTGlzdFtpXSBhcyBTdHJpbmc7CiAgICB9CiAgfQoKICBpbnQgX2dyb3VwTmFtZUluZGV4KFN0cmluZyBuYW1lKSB7CiAgICB2YXIgbmFtZUxpc3QgPSBfZ3JvdXBOYW1lTGlzdDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZUxpc3QubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgaWYgKG5hbWUgPT0gbmFtZUxpc3RbaV0pIHsKICAgICAgICByZXR1cm4gbmFtZUxpc3RbaSArIDFdOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICAvLyBCeXRlIG1hcCBvZiBvbmUgYnl0ZSBjaGFyYWN0ZXJzIHdpdGggYSAweGZmIGlmIHRoZSBjaGFyYWN0ZXIgaXMgYSB3b3JkCiAgLy8gY2hhcmFjdGVyIChkaWdpdCwgbGV0dGVyIG9yIHVuZGVyc2NvcmUpIGFuZCAweDAwIG90aGVyd2lzZS4KICAvLyBVc2VkIGJ5IGdlbmVyYXRlZCBSZWdFeHAgY29kZS4KICBzdGF0aWMgY29uc3QgTGlzdDxpbnQ+IF93b3JkQ2hhcmFjdGVyTWFwID0gY29uc3QgPGludD5bCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAoKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLy8gJzAnIC0gJzcnCiAgICAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvLyAnOCcgLSAnOScKCiAgICAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvLyAnQScgLSAnRycKICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8vICdIJyAtICdPJwogICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLy8gJ1AnIC0gJ1cnCiAgICAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAvLyAnWCcgLSAnWicsICdfJwoKICAgIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8vICdhJyAtICdnJwogICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLy8gJ2gnIC0gJ28nCiAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvLyAncCcgLSAndycKICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vICd4JyAtICd6JwogICAgLy8gTGF0aW4tMSByYW5nZQogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAoKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCgogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICBdOwoKICBMaXN0IF9FeGVjdXRlTWF0Y2goU3RyaW5nIHN0ciwgaW50IHN0YXJ0X2luZGV4KSBuYXRpdmUgIlJlZ0V4cF9FeGVjdXRlTWF0Y2giOwoKICBMaXN0IF9FeGVjdXRlTWF0Y2hTdGlja3koU3RyaW5nIHN0ciwgaW50IHN0YXJ0X2luZGV4KQogICAgICBuYXRpdmUgIlJlZ0V4cF9FeGVjdXRlTWF0Y2hTdGlja3kiOwp9CgpjbGFzcyBfQWxsTWF0Y2hlc0l0ZXJhYmxlIGV4dGVuZHMgSXRlcmFibGVCYXNlPFJlZ0V4cE1hdGNoPiB7CiAgZmluYWwgX1JlZ0V4cCBfcmU7CiAgZmluYWwgU3RyaW5nIF9zdHI7CiAgZmluYWwgaW50IF9zdGFydDsKCiAgX0FsbE1hdGNoZXNJdGVyYWJsZSh0aGlzLl9yZSwgdGhpcy5fc3RyLCB0aGlzLl9zdGFydCk7CgogIEl0ZXJhdG9yPFJlZ0V4cE1hdGNoPiBnZXQgaXRlcmF0b3IgPT4KICAgICAgbmV3IF9BbGxNYXRjaGVzSXRlcmF0b3IoX3JlLCBfc3RyLCBfc3RhcnQpOwp9CgpjbGFzcyBfQWxsTWF0Y2hlc0l0ZXJhdG9yIGltcGxlbWVudHMgSXRlcmF0b3I8UmVnRXhwTWF0Y2g+IHsKICBmaW5hbCBTdHJpbmcgX3N0cjsKICBpbnQgX25leHRJbmRleDsKICBfUmVnRXhwIF9yZTsKICBSZWdFeHBNYXRjaCBfY3VycmVudDsKCiAgX0FsbE1hdGNoZXNJdGVyYXRvcih0aGlzLl9yZSwgdGhpcy5fc3RyLCB0aGlzLl9uZXh0SW5kZXgpOwoKICBSZWdFeHBNYXRjaCBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKCiAgc3RhdGljIGJvb2wgX2lzTGVhZFN1cnJvZ2F0ZShpbnQgYykgewogICAgcmV0dXJuIGMgPj0gMHhkODAwICYmIGMgPD0gMHhkYmZmOwogIH0KCiAgc3RhdGljIGJvb2wgX2lzVHJhaWxTdXJyb2dhdGUoaW50IGMpIHsKICAgIHJldHVybiBjID49IDB4ZGMwMCAmJiBjIDw9IDB4ZGZmZjsKICB9CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoX3JlID09IG51bGwpIHJldHVybiBmYWxzZTsgLy8gQ2xlYXJlZCBhZnRlciBhIGZhaWxlZCBtYXRjaC4KICAgIGlmIChfbmV4dEluZGV4IDw9IF9zdHIubGVuZ3RoKSB7CiAgICAgIHZhciBtYXRjaCA9IF9yZS5fRXhlY3V0ZU1hdGNoKF9zdHIsIF9uZXh0SW5kZXgpOwogICAgICBpZiAobWF0Y2ggIT0gbnVsbCkgewogICAgICAgIF9jdXJyZW50ID0gbmV3IF9SZWdFeHBNYXRjaC5fKF9yZSwgX3N0ciwgbWF0Y2gpOwogICAgICAgIF9uZXh0SW5kZXggPSBfY3VycmVudC5lbmQ7CiAgICAgICAgaWYgKF9uZXh0SW5kZXggPT0gX2N1cnJlbnQuc3RhcnQpIHsKICAgICAgICAgIC8vIFplcm8td2lkdGggbWF0Y2guIEFkdmFuY2UgYnkgb25lIG1vcmUsIHVubGVzcyB0aGUgcmVnZXhwCiAgICAgICAgICAvLyBpcyBpbiB1bmljb2RlIG1vZGUgYW5kIGl0IHdvdWxkIHB1dCB1cyB3aXRoaW4gYSBzdXJyb2dhdGUKICAgICAgICAgIC8vIHBhaXIuIEluIHRoYXQgY2FzZSwgYWR2YW5jZSBwYXN0IHRoZSBjb2RlIHBvaW50IGFzIGEgd2hvbGUuCiAgICAgICAgICBpZiAoX3JlLmlzVW5pY29kZSAmJgogICAgICAgICAgICAgIF9uZXh0SW5kZXggKyAxIDwgX3N0ci5sZW5ndGggJiYKICAgICAgICAgICAgICBfaXNMZWFkU3Vycm9nYXRlKF9zdHIuY29kZVVuaXRBdChfbmV4dEluZGV4KSkgJiYKICAgICAgICAgICAgICBfaXNUcmFpbFN1cnJvZ2F0ZShfc3RyLmNvZGVVbml0QXQoX25leHRJbmRleCArIDEpKSkgewogICAgICAgICAgICBfbmV4dEluZGV4Kys7CiAgICAgICAgICB9CiAgICAgICAgICBfbmV4dEluZGV4Kys7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICBfY3VycmVudCA9IG51bGw7CiAgICBfcmUgPSBudWxsOwogICAgcmV0dXJuIGZhbHNlOwogIH0KfQqBlwBOTjwBDwEeAQcPCSAeIBsdGU8qARktNScgCAEkHiQsIB8QGw0aBgEbASczAUYZBAEGRQVIOQY3TzZHFEtLRUtJS0tFS0tBTDAlQwYYBAEJJjRONQElIwlNOUxRGi9ELShKHgQBTy5PTlEoRRgqPjc6KAEXJCQCAUgoPxgYHBYVAVEUASgbJyouNiomBAIBSkMZGBwBKwIBLDkBHhoBHS0EARsxBAEfOiwGJyMcHhMGPAQBJSEEAS46MiwGFwQBLQEiASMtE0AGFwQBJCAEARgWGiQCARoiIh4gGzQBKUEqGRMGMwQBRUJBLjsGOQQBPkNBLjsGNCMzBAEgQSorBAElQSoZEwY6BAExATcBPwEzATEBNQE/PSg7ASslMyMGBAElIzMhIAgGDwQBTEEkOjQ0NDQBNDRBQQFBQUFGAUFBQUEVNDQ0NAE0NDQ0ATQ0NDQBNDQ0NAUBUAE4KgIBPhUVFAE5ASgyAgE9FRIPGAE9AScBKCcEASknBAEURCU3GzkjLEZHSR8uP0QaDBgKFQgGFRASBAIBIWRhcnQ6Y29yZS1wYXRjaC9yZWdleHBfcGF0Y2guZGFydE1vcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vbGliL3N0YWNrdHJhY2UuZGFydIGoLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKLy8vIFZNIGludGVybmFsIFN0YWNrVHJhY2UgaW1wbGVtZW50YXRpb24uCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1N0YWNrVHJhY2UgaW1wbGVtZW50cyBTdGFja1RyYWNlIHsKICAvLyB0b1N0cmluZygpIGlzIG92ZXJyaWRkZW4gb24gdGhlIEMrKyBzaWRlLgp9Cg8ATk48AQ8BHgErGiovAgEfZGFydDpjb3JlLXBhdGNoL3N0YWNrdHJhY2UuZGFydE9vcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vbGliL3N0cmluZ19wYXRjaC5kYXJ0wAC1dC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCmNvbnN0IGludCBfbWF4QXNjaWkgPSAweDdmOwpjb25zdCBpbnQgX21heExhdGluMSA9IDB4ZmY7CmNvbnN0IGludCBfbWF4VXRmMTYgPSAweGZmZmY7CmNvbnN0IGludCBfbWF4VW5pY29kZSA9IDB4MTBmZmZmOwoKQHBhdGNoCmNsYXNzIFN0cmluZyB7CiAgQHBhdGNoCiAgZmFjdG9yeSBTdHJpbmcuZnJvbUNoYXJDb2RlcyhJdGVyYWJsZTxpbnQ+IGNoYXJDb2RlcywKICAgICAgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgICBpZiAoY2hhckNvZGVzID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoImNoYXJDb2RlcyIpOwogICAgaWYgKHN0YXJ0ID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoInN0YXJ0Iik7CiAgICByZXR1cm4gX1N0cmluZ0Jhc2UuY3JlYXRlRnJvbUNoYXJDb2RlcyhjaGFyQ29kZXMsIHN0YXJ0LCBlbmQsIG51bGwpOwogIH0KCiAgQHBhdGNoCiAgZmFjdG9yeSBTdHJpbmcuZnJvbUNoYXJDb2RlKGludCBjaGFyQ29kZSkgewogICAgaWYgKGNoYXJDb2RlID49IDApIHsKICAgICAgaWYgKGNoYXJDb2RlIDw9IDB4ZmYpIHsKICAgICAgICByZXR1cm4gX09uZUJ5dGVTdHJpbmcuX2FsbG9jYXRlKDEpLi5fc2V0QXQoMCwgY2hhckNvZGUpOwogICAgICB9CiAgICAgIGlmIChjaGFyQ29kZSA8PSAweGZmZmYpIHsKICAgICAgICByZXR1cm4gX1N0cmluZ0Jhc2UuX2NyZWF0ZUZyb21Db2RlUG9pbnRzKAogICAgICAgICAgICBuZXcgX0xpc3QoMSkuLlswXSA9IGNoYXJDb2RlLCAwLCAxKTsKICAgICAgfQogICAgICBpZiAoY2hhckNvZGUgPD0gMHgxMGZmZmYpIHsKICAgICAgICB2YXIgbG93ID0gMHhEQzAwIHwgKGNoYXJDb2RlICYgMHgzZmYpOwogICAgICAgIGludCBiaXRzID0gY2hhckNvZGUgLSAweDEwMDAwOwogICAgICAgIHZhciBoaWdoID0gMHhEODAwIHwgKGJpdHMgPj4gMTApOwogICAgICAgIHJldHVybiBfU3RyaW5nQmFzZS5fY3JlYXRlRnJvbUNvZGVQb2ludHMoCiAgICAgICAgICAgIG5ldyBfTGlzdCgyKQogICAgICAgICAgICAgIC4uWzBdID0gaGlnaAogICAgICAgICAgICAgIC4uWzFdID0gbG93LAogICAgICAgICAgICAwLAogICAgICAgICAgICAyKTsKICAgICAgfQogICAgfQogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoY2hhckNvZGUsIDAsIDB4MTBmZmZmKTsKICB9CgogIEBwYXRjaAogIGNvbnN0IGZhY3RvcnkgU3RyaW5nLmZyb21FbnZpcm9ubWVudChTdHJpbmcgbmFtZSwge1N0cmluZyBkZWZhdWx0VmFsdWV9KQogICAgICBuYXRpdmUgIlN0cmluZ19mcm9tRW52aXJvbm1lbnQiOwoKICBib29sIGdldCBfaXNPbmVCeXRlOwogIFN0cmluZyBfc3Vic3RyaW5nVW5jaGVja2VkKGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgpOwp9CgovKioKICogW19TdHJpbmdCYXNlXSBjb250YWlucyBjb21tb24gbWV0aG9kcyB1c2VkIGJ5IGNvbmNyZXRlIFN0cmluZwogKiBpbXBsZW1lbnRhdGlvbnMsIGUuZy4sIF9PbmVCeXRlU3RyaW5nLgogKi8KYWJzdHJhY3QgY2xhc3MgX1N0cmluZ0Jhc2UgaW1wbGVtZW50cyBTdHJpbmcgewogIGJvb2wgX2lzV2hpdGVzcGFjZShpbnQgY29kZVVuaXQpOwoKICAvLyBDb25zdGFudHMgdXNlZCBieSByZXBsYWNlQWxsIGVuY29kaW5nIG9mIHN0cmluZyBzbGljZXMgYmV0d2VlbiBtYXRjaGVzLgogIC8vIEEgc3RyaW5nIHNsaWNlIChzdGFydCtsZW5ndGgpIGlzIGVuY29kZWQgaW4gYSBzaW5nbGUgU21pIHRvIHNhdmUgbWVtb3J5CiAgLy8gb3ZlcmhlYWQgaW4gdGhlIGNvbW1vbiBjYXNlLgogIC8vIFdlIHVzZSBmZXdlciBiaXRzIGZvciBsZW5ndGggKDExIGJpdHMpIHRoYW4gZm9yIHRoZSBzdGFydCBpbmRleCAoMTkrIGJpdHMpLgogIC8vIEZvciBsb25nIHN0cmluZ3MsIGl0J3MgcG9zc2libGUgdG8gaGF2ZSBtYW55IGxhcmdlIGluZGljZXMsCiAgLy8gYnV0IGl0J3MgdW5saWtlbHkgdG8gaGF2ZSBtYW55IGxvbmcgbGVuZ3RocyBzaW5jZSBzbGljZXMgZG9uJ3Qgb3ZlcmxhcC4KICAvLyBJZiB0aGVyZSBhcmUgZmV3IG1hdGNoZXMgaW4gYSBsb25nIHN0cmluZywgdGhlbiB0aGVyZSBhcmUgZmV3IGxvbmcgc2xpY2VzLAogIC8vIGFuZCBpZiB0aGVyZSBhcmUgbWFueSBtYXRjaGVzLCB0aGVyZSdsbCBsaWtlbHkgYmUgbWFueSBzaG9ydCBzbGljZXMuCiAgLy8KICAvLyBFbmNvZGluZyBpczogMCgoc3RhcnQgPDwgX2xlbmd0aEJpdHMpIHwgbGVuZ3RoKQoKICAvLyBOdW1iZXIgb2YgYml0cyB1c2VkIGJ5IGxlbmd0aC4KICAvLyBUaGlzIGlzIHRoZSBzaGlmdCB1c2VkIHRvIGVuY29kZSBhbmQgZGVjb2RlIHRoZSBzdGFydCBpbmRleC4KICBzdGF0aWMgY29uc3QgaW50IF9sZW5ndGhCaXRzID0gMTE7CiAgLy8gVGhlIG1heGltYWwgYWxsb3dlZCBsZW5ndGggdmFsdWUgaW4gYW4gZW5jb2RlZCBzbGljZS4KICBzdGF0aWMgY29uc3QgaW50IF9tYXhMZW5ndGhWYWx1ZSA9ICgxIDw8IF9sZW5ndGhCaXRzKSAtIDE7CiAgLy8gTWFzayBvZiBsZW5ndGggaW4gZW5jb2RlZCBzbWkgdmFsdWUuCiAgc3RhdGljIGNvbnN0IGludCBfbGVuZ3RoTWFzayA9IF9tYXhMZW5ndGhWYWx1ZTsKICBzdGF0aWMgY29uc3QgaW50IF9zdGFydEJpdHMgPSBfbWF4VW5zaWduZWRTbWlCaXRzIC0gX2xlbmd0aEJpdHM7CiAgLy8gTWF4aW1hbCBhbGxvd2VkIHN0YXJ0IGluZGV4IHZhbHVlIGluIGFuIGVuY29kZWQgc2xpY2UuCiAgc3RhdGljIGNvbnN0IGludCBfbWF4U3RhcnRWYWx1ZSA9ICgxIDw8IF9zdGFydEJpdHMpIC0gMTsKICAvLyBXZSBwaWNrIDMwIGFzIGEgc2FmZSBsb3dlciBib3VuZCBvbiBhdmFpbGFibGUgYml0cyBpbiBhIG5lZ2F0aXZlIHNtaS4KICAvLyBUT0RPKGxybik6IENvbnNpZGVyIGFsbG93aW5nIG1vcmUgYml0cyBmb3Igc3RhcnQgb24gNjQtYml0IHN5c3RlbXMuCiAgc3RhdGljIGNvbnN0IGludCBfbWF4VW5zaWduZWRTbWlCaXRzID0gMzA7CgogIC8vIEZvciBsb25nZXIgc3RyaW5ncywgY2FsbGluZyBpbnRvIEMrKyB0byBjcmVhdGUgdGhlIHJlc3VsdCBvZiBhCiAgLy8gW3JlcGxhY2VBbGxdIGlzIGZhc3RlciB0aGFuIFtfam9pblJlcGxhY2VBbGxPbmVCeXRlUmVzdWx0XS4KICAvLyBUT0RPKGxybik6IFNlZSBpZiB0aGlzIGxpbWl0IGNhbiBiZSB0d2Vha2VkLgogIHN0YXRpYyBjb25zdCBpbnQgX21heEpvaW5SZXBsYWNlT25lQnl0ZVN0cmluZ0xlbmd0aCA9IDUwMDsKCiAgZmFjdG9yeSBfU3RyaW5nQmFzZS5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiX1N0cmluZ0Jhc2UgY2FuJ3QgYmUgaW5zdGFuaWF0ZWQiKTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBpbnQgZ2V0IGhhc2hDb2RlIG5hdGl2ZSAiU3RyaW5nX2dldEhhc2hDb2RlIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBnZXQgX2lkZW50aXR5SGFzaENvZGUgbmF0aXZlICJTdHJpbmdfZ2V0SGFzaENvZGUiOwoKICBib29sIGdldCBfaXNPbmVCeXRlIHsKICAgIC8vIEFsdGVybmF0aXZlbHkgcmV0dXJuIGZhbHNlIGFuZCBvdmVycmlkZSBpdCBvbiBvbmUtYnl0ZSBzdHJpbmcgY2xhc3Nlcy4KICAgIGludCBpZCA9IENsYXNzSUQuZ2V0SUQodGhpcyk7CiAgICByZXR1cm4gaWQgPT0gQ2xhc3NJRC5jaWRPbmVCeXRlU3RyaW5nIHx8CiAgICAgICAgaWQgPT0gQ2xhc3NJRC5jaWRFeHRlcm5hbE9uZUJ5dGVTdHJpbmc7CiAgfQoKICAvKioKICAgKiBDcmVhdGUgdGhlIG1vc3QgZWZmaWNpZW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3Igc3BlY2lmaWVkCiAgICogW2NoYXJDb2Rlc10uCiAgICoKICAgKiBPbmx5IHVzZXMgdGhlIGNoYXJhY3RlciBjb2RlcyBiZXR3ZWVuIGluZGV4IFtzdGFydF0gYW5kIGluZGV4IFtlbmRdIG9mCiAgICogYGNoYXJDb2Rlc2AuIFRoZXkgbXVzdCBzYXRpc2Z5IGAwIDw9IHN0YXJ0IDw9IGVuZCA8PSBjaGFyQ29kZXMubGVuZ3RoYC4KICAgKgogICAqIFRoZSBbbGltaXRdIGlzIGFuIHVwcGVyIGxpbWl0IG9uIHRoZSBjaGFyYWN0ZXIgY29kZXMgaW4gdGhlIGl0ZXJhYmxlLgogICAqIEl0J3MgYG51bGxgIGlmIHVua25vd24uCiAgICovCiAgc3RhdGljIFN0cmluZyBjcmVhdGVGcm9tQ2hhckNvZGVzKAogICAgICBJdGVyYWJsZTxpbnQ+IGNoYXJDb2RlcywgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgbGltaXQpIHsKICAgIGlmIChzdGFydCA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJzdGFydCIpOwogICAgaWYgKGNoYXJDb2RlcyA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihjaGFyQ29kZXMpOwogICAgLy8gVE9ETyhzcmRqYW4pOiBBbHNvIHNraXAgY29weWluZyBvZiB3aWRlIHR5cGVkIGFycmF5cy4KICAgIGZpbmFsIGNjaWQgPSBDbGFzc0lELmdldElEKGNoYXJDb2Rlcyk7CiAgICBpZiAoKGNjaWQgIT0gQ2xhc3NJRC5jaWRBcnJheSkgJiYKICAgICAgICAoY2NpZCAhPSBDbGFzc0lELmNpZEdyb3dhYmxlT2JqZWN0QXJyYXkpICYmCiAgICAgICAgKGNjaWQgIT0gQ2xhc3NJRC5jaWRJbW11dGFibGVBcnJheSkpIHsKICAgICAgaWYgKGNoYXJDb2RlcyBpcyBVaW50OExpc3QpIHsKICAgICAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBjaGFyQ29kZXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gX2NyZWF0ZU9uZUJ5dGVTdHJpbmcoY2hhckNvZGVzLCBzdGFydCwgZW5kIC0gc3RhcnQpOwogICAgICB9IGVsc2UgaWYgKGNoYXJDb2RlcyBpcyEgVWludDE2TGlzdCkgewogICAgICAgIHJldHVybiBfY3JlYXRlU3RyaW5nRnJvbUl0ZXJhYmxlKGNoYXJDb2Rlcywgc3RhcnQsIGVuZCk7CiAgICAgIH0KICAgIH0KICAgIGludCBjb2RlQ291bnQgPSBjaGFyQ29kZXMubGVuZ3RoOwogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgY29kZUNvdW50KTsKICAgIGZpbmFsIGxlbiA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKGxlbiA9PSAwKSByZXR1cm4gIiI7CiAgICBsaW1pdCA/Pz0gX3NjYW5Db2RlVW5pdHMoY2hhckNvZGVzLCBzdGFydCwgZW5kKTsKICAgIGlmIChsaW1pdCA8IDApIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoY2hhckNvZGVzKTsKICAgIH0KICAgIGlmIChsaW1pdCA8PSBfbWF4TGF0aW4xKSB7CiAgICAgIHJldHVybiBfY3JlYXRlT25lQnl0ZVN0cmluZyhjaGFyQ29kZXMsIHN0YXJ0LCBsZW4pOwogICAgfQogICAgaWYgKGxpbWl0IDw9IF9tYXhVdGYxNikgewogICAgICByZXR1cm4gX1R3b0J5dGVTdHJpbmcuX2FsbG9jYXRlRnJvbVR3b0J5dGVMaXN0KGNoYXJDb2Rlcywgc3RhcnQsIGVuZCk7CiAgICB9CiAgICAvLyBUT0RPKGxybik6IENvbnNpZGVyIHBhc3NpbmcgbGltaXQgdG8gX2NyZWF0ZUZyb21Db2RlUG9pbnRzLCBiZWNhdXNlCiAgICAvLyB0aGUgZnVuY3Rpb24gaXMgY3VycmVudGx5IGZ1bGx5IGdlbmVyaWMgYW5kIGRvZXNuJ3Qga25vdyB0aGF0IGl0cwogICAgLy8gY2hhckNvZGVzIGFyZSBub3QgYWxsIExhdGluLTEgb3IgVXRmLTE2LgogICAgcmV0dXJuIF9jcmVhdGVGcm9tQ29kZVBvaW50cyhjaGFyQ29kZXMsIHN0YXJ0LCBlbmQpOwogIH0KCiAgc3RhdGljIGludCBfc2NhbkNvZGVVbml0cyhMaXN0PGludD4gY2hhckNvZGVzLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIGludCBiaXRzID0gMDsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIGludCBjb2RlID0gY2hhckNvZGVzW2ldOwogICAgICBpZiAoY29kZSBpcyEgX1NtaSkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoY2hhckNvZGVzKTsKICAgICAgYml0cyB8PSBjb2RlOwogICAgfQogICAgcmV0dXJuIGJpdHM7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF9jcmVhdGVTdHJpbmdGcm9tSXRlcmFibGUoCiAgICAgIEl0ZXJhYmxlPGludD4gY2hhckNvZGVzLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIC8vIFRyZWF0IGNoYXJDb2RlcyBhcyBJdGVyYWJsZS4KICAgIGlmIChjaGFyQ29kZXMgaXMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGUpIHsKICAgICAgaW50IGxlbmd0aCA9IGNoYXJDb2Rlcy5sZW5ndGg7CiAgICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGxlbmd0aCk7CiAgICAgIGZpbmFsIGNoYXJDb2RlTGlzdCA9CiAgICAgICAgICBuZXcgTGlzdDxpbnQ+LmZyb20oY2hhckNvZGVzLnRha2UoZW5kKS5za2lwKHN0YXJ0KSwgZ3Jvd2FibGU6IGZhbHNlKTsKICAgICAgcmV0dXJuIGNyZWF0ZUZyb21DaGFyQ29kZXMoY2hhckNvZGVMaXN0LCAwLCBjaGFyQ29kZUxpc3QubGVuZ3RoLCBudWxsKTsKICAgIH0KICAgIC8vIERvbid0IGtub3cgbGVuZ3RoIG9mIGl0ZXJhYmxlLCBzbyBpdGVyYXRlIGFuZCBzZWUgaWYgYWxsIHRoZSB2YWx1ZXMKICAgIC8vIGFyZSB0aGVyZS4KICAgIGlmIChzdGFydCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKHN0YXJ0LCAwLCBjaGFyQ29kZXMubGVuZ3RoKTsKICAgIHZhciBpdCA9IGNoYXJDb2Rlcy5pdGVyYXRvcjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhcnQ7IGkrKykgewogICAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHsKICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShzdGFydCwgMCwgaSk7CiAgICAgIH0KICAgIH0KICAgIExpc3Q8aW50PiBjaGFyQ29kZUxpc3Q7CiAgICBpbnQgYml0cyA9IDA7IC8vIEJpdHdpc2Utb3Igb2YgYWxsIGNoYXIgY29kZXMgaW4gbGlzdC4KICAgIGlmIChlbmQgPT0gbnVsbCkgewogICAgICB2YXIgbGlzdCA9IDxpbnQ+W107CiAgICAgIHdoaWxlIChpdC5tb3ZlTmV4dCgpKSB7CiAgICAgICAgaW50IGNvZGUgPSBpdC5jdXJyZW50OwogICAgICAgIGJpdHMgfD0gY29kZTsKICAgICAgICBsaXN0LmFkZChjb2RlKTsKICAgICAgfQogICAgICBjaGFyQ29kZUxpc3QgPSBtYWtlTGlzdEZpeGVkTGVuZ3RoPGludD4obGlzdCk7CiAgICB9IGVsc2UgewogICAgICBpZiAoZW5kIDwgc3RhcnQpIHsKICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShlbmQsIHN0YXJ0LCBjaGFyQ29kZXMubGVuZ3RoKTsKICAgICAgfQogICAgICBpbnQgbGVuID0gZW5kIC0gc3RhcnQ7CiAgICAgIGNoYXJDb2RlTGlzdCA9IG5ldyBMaXN0PGludD4uZ2VuZXJhdGUobGVuLCAoaW50IGkpIHsKICAgICAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGVuZCwgc3RhcnQsIHN0YXJ0ICsgaSk7CiAgICAgICAgfQogICAgICAgIGludCBjb2RlID0gaXQuY3VycmVudDsKICAgICAgICBiaXRzIHw9IGNvZGU7CiAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgIH0pOwogICAgfQogICAgaW50IGxlbmd0aCA9IGNoYXJDb2RlTGlzdC5sZW5ndGg7CiAgICBpZiAoYml0cyA8IDApIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoY2hhckNvZGVzKTsKICAgIH0KICAgIGJvb2wgaXNPbmVCeXRlU3RyaW5nID0gKGJpdHMgPD0gX21heExhdGluMSk7CiAgICBpZiAoaXNPbmVCeXRlU3RyaW5nKSB7CiAgICAgIHJldHVybiBfY3JlYXRlT25lQnl0ZVN0cmluZyhjaGFyQ29kZUxpc3QsIDAsIGxlbmd0aCk7CiAgICB9CiAgICByZXR1cm4gY3JlYXRlRnJvbUNoYXJDb2RlcyhjaGFyQ29kZUxpc3QsIDAsIGxlbmd0aCwgYml0cyk7CiAgfQoKICAvLyBJbmxpbmluZyBpcyBkaXNhYmxlZCBhcyBhIHdvcmthcm91bmQgdG8gaHR0cDovL2RhcnRidWcuY29tLzM3ODAwLgogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgc3RhdGljIFN0cmluZyBfY3JlYXRlT25lQnl0ZVN0cmluZyhMaXN0PGludD4gY2hhckNvZGVzLCBpbnQgc3RhcnQsIGludCBsZW4pIHsKICAgIC8vIEl0J3MgYWx3YXlzIGZhc3RlciB0byBkbyB0aGlzIGluIERhcnQgdGhhbiB0byBjYWxsIGludG8gdGhlIHJ1bnRpbWUuCiAgICB2YXIgcyA9IF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZShsZW4pOwoKICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgX1VpbnQ4QXJyYXlWaWV3LgogICAgaWYgKGNoYXJDb2RlcyBpcyBVaW50OExpc3QpIHsKICAgICAgaWYgKHN0YXJ0ID49IDAgJiYgbGVuID49IDApIHsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICBzLl9zZXRBdChpLCBjaGFyQ29kZXNbc3RhcnQgKyBpXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzOwogICAgICB9CiAgICB9CgogICAgLy8gRmFsbCB0aHJvdWdoIHRvIG5vcm1hbCBjYXNlLgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBzLl9zZXRBdChpLCBjaGFyQ29kZXNbc3RhcnQgKyBpXSk7CiAgICB9CiAgICByZXR1cm4gczsKICB9CgogIHN0YXRpYyBTdHJpbmcgX2NyZWF0ZUZyb21Db2RlUG9pbnRzKExpc3Q8aW50PiBjb2RlUG9pbnRzLCBpbnQgc3RhcnQsIGludCBlbmQpCiAgICAgIG5hdGl2ZSAiU3RyaW5nQmFzZV9jcmVhdGVGcm9tQ29kZVBvaW50cyI7CgogIFN0cmluZyBvcGVyYXRvciBbXShpbnQgaW5kZXgpIG5hdGl2ZSAiU3RyaW5nX2NoYXJBdCI7CgogIGludCBjb2RlVW5pdEF0KGludCBpbmRleCk7IC8vIEltcGxlbWVudGVkIGluIHRoZSBzdWJjbGFzc2VzLgoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IGdldCBsZW5ndGggbmF0aXZlICJTdHJpbmdfZ2V0TGVuZ3RoIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIGJvb2wgZ2V0IGlzRW1wdHkgewogICAgcmV0dXJuIHRoaXMubGVuZ3RoID09IDA7CiAgfQoKICBib29sIGdldCBpc05vdEVtcHR5ID0+ICFpc0VtcHR5OwoKICBTdHJpbmcgb3BlcmF0b3IgKyhTdHJpbmcgb3RoZXIpIG5hdGl2ZSAiU3RyaW5nX2NvbmNhdCI7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChvdGhlciBpcyBTdHJpbmcgJiYgdGhpcy5sZW5ndGggPT0gb3RoZXIubGVuZ3RoKSB7CiAgICAgIGZpbmFsIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgaWYgKHRoaXMuY29kZVVuaXRBdChpKSAhPSBvdGhlci5jb2RlVW5pdEF0KGkpKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgaW50IGNvbXBhcmVUbyhTdHJpbmcgb3RoZXIpIHsKICAgIGludCB0aGlzTGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBpbnQgb3RoZXJMZW5ndGggPSBvdGhlci5sZW5ndGg7CiAgICBpbnQgbGVuID0gKHRoaXNMZW5ndGggPCBvdGhlckxlbmd0aCkgPyB0aGlzTGVuZ3RoIDogb3RoZXJMZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGludCB0aGlzQ29kZVVuaXQgPSB0aGlzLmNvZGVVbml0QXQoaSk7CiAgICAgIGludCBvdGhlckNvZGVVbml0ID0gb3RoZXIuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKHRoaXNDb2RlVW5pdCA8IG90aGVyQ29kZVVuaXQpIHsKICAgICAgICByZXR1cm4gLTE7CiAgICAgIH0KICAgICAgaWYgKHRoaXNDb2RlVW5pdCA+IG90aGVyQ29kZVVuaXQpIHsKICAgICAgICByZXR1cm4gMTsKICAgICAgfQogICAgfQogICAgaWYgKHRoaXNMZW5ndGggPCBvdGhlckxlbmd0aCkgcmV0dXJuIC0xOwogICAgaWYgKHRoaXNMZW5ndGggPiBvdGhlckxlbmd0aCkgcmV0dXJuIDE7CiAgICByZXR1cm4gMDsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBib29sIF9zdWJzdHJpbmdNYXRjaGVzKGludCBzdGFydCwgU3RyaW5nIG90aGVyKSB7CiAgICBpZiAob3RoZXIuaXNFbXB0eSkgcmV0dXJuIHRydWU7CiAgICBmaW5hbCBsZW4gPSBvdGhlci5sZW5ndGg7CiAgICBpZiAoKHN0YXJ0IDwgMCkgfHwgKHN0YXJ0ICsgbGVuID4gdGhpcy5sZW5ndGgpKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgaWYgKHRoaXMuY29kZVVuaXRBdChpICsgc3RhcnQpICE9IG90aGVyLmNvZGVVbml0QXQoaSkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgYm9vbCBlbmRzV2l0aChTdHJpbmcgb3RoZXIpIHsKICAgIHJldHVybiBfc3Vic3RyaW5nTWF0Y2hlcyh0aGlzLmxlbmd0aCAtIG90aGVyLmxlbmd0aCwgb3RoZXIpOwogIH0KCiAgYm9vbCBzdGFydHNXaXRoKFBhdHRlcm4gcGF0dGVybiwgW2ludCBpbmRleCA9IDBdKSB7CiAgICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID4gdGhpcy5sZW5ndGgpKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGluZGV4LCAwLCB0aGlzLmxlbmd0aCk7CiAgICB9CiAgICBpZiAocGF0dGVybiBpcyBTdHJpbmcpIHsKICAgICAgcmV0dXJuIF9zdWJzdHJpbmdNYXRjaGVzKGluZGV4LCBwYXR0ZXJuKTsKICAgIH0KICAgIHJldHVybiBwYXR0ZXJuLm1hdGNoQXNQcmVmaXgodGhpcywgaW5kZXgpICE9IG51bGw7CiAgfQoKICBpbnQgaW5kZXhPZihQYXR0ZXJuIHBhdHRlcm4sIFtpbnQgc3RhcnQgPSAwXSkgewogICAgaWYgKChzdGFydCA8IDApIHx8IChzdGFydCA+IHRoaXMubGVuZ3RoKSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShzdGFydCwgMCwgdGhpcy5sZW5ndGgsICJzdGFydCIpOwogICAgfQogICAgaWYgKHBhdHRlcm4gaXMgU3RyaW5nKSB7CiAgICAgIFN0cmluZyBvdGhlciA9IHBhdHRlcm47CiAgICAgIGludCBtYXhJbmRleCA9IHRoaXMubGVuZ3RoIC0gb3RoZXIubGVuZ3RoOwogICAgICAvLyBUT0RPOiBVc2UgYW4gZWZmaWNpZW50IHN0cmluZyBzZWFyY2ggKGUuZy4gQk1IKS4KICAgICAgZm9yIChpbnQgaW5kZXggPSBzdGFydDsgaW5kZXggPD0gbWF4SW5kZXg7IGluZGV4KyspIHsKICAgICAgICBpZiAoX3N1YnN0cmluZ01hdGNoZXMoaW5kZXgsIG90aGVyKSkgewogICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPD0gdGhpcy5sZW5ndGg7IGkrKykgewogICAgICAvLyBUT0RPKDExMjc2KTsgVGhpcyBoYXMgcXVhZHJhdGljIGJlaGF2aW9yIGJlY2F1c2UgbWF0Y2hBc1ByZWZpeCB0cmllcwogICAgICAvLyB0byBmaW5kIGEgbGF0ZXIgbWF0Y2ggdG9vLiBPcHRpbWl6ZSBtYXRjaEFzUHJlZml4IHRvIGF2b2lkIHRoaXMuCiAgICAgIGlmIChwYXR0ZXJuLm1hdGNoQXNQcmVmaXgodGhpcywgaSkgIT0gbnVsbCkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBpbnQgbGFzdEluZGV4T2YoUGF0dGVybiBwYXR0ZXJuLCBbaW50IHN0YXJ0ID0gbnVsbF0pIHsKICAgIGlmIChzdGFydCA9PSBudWxsKSB7CiAgICAgIHN0YXJ0ID0gdGhpcy5sZW5ndGg7CiAgICB9IGVsc2UgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+IHRoaXMubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKHN0YXJ0LCAwLCB0aGlzLmxlbmd0aCk7CiAgICB9CiAgICBpZiAocGF0dGVybiBpcyBTdHJpbmcpIHsKICAgICAgU3RyaW5nIG90aGVyID0gcGF0dGVybjsKICAgICAgaW50IG1heEluZGV4ID0gdGhpcy5sZW5ndGggLSBvdGhlci5sZW5ndGg7CiAgICAgIGlmIChtYXhJbmRleCA8IHN0YXJ0KSBzdGFydCA9IG1heEluZGV4OwogICAgICBmb3IgKGludCBpbmRleCA9IHN0YXJ0OyBpbmRleCA+PSAwOyBpbmRleC0tKSB7CiAgICAgICAgaWYgKF9zdWJzdHJpbmdNYXRjaGVzKGluZGV4LCBvdGhlcikpIHsKICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpID49IDA7IGktLSkgewogICAgICAvLyBUT0RPKDExMjc2KTsgVGhpcyBoYXMgcXVhZHJhdGljIGJlaGF2aW9yIGJlY2F1c2UgbWF0Y2hBc1ByZWZpeCB0cmllcwogICAgICAvLyB0byBmaW5kIGEgbGF0ZXIgbWF0Y2ggdG9vLiBPcHRpbWl6ZSBtYXRjaEFzUHJlZml4IHRvIGF2b2lkIHRoaXMuCiAgICAgIGlmIChwYXR0ZXJuLm1hdGNoQXNQcmVmaXgodGhpcywgaSkgIT0gbnVsbCkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBTdHJpbmcgc3Vic3RyaW5nKGludCBzdGFydEluZGV4LCBbaW50IGVuZEluZGV4XSkgewogICAgZW5kSW5kZXggPz89IHRoaXMubGVuZ3RoOwoKICAgIGlmICgoc3RhcnRJbmRleCA8IDApIHx8IChzdGFydEluZGV4ID4gdGhpcy5sZW5ndGgpKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnZhbHVlKHN0YXJ0SW5kZXgpOwogICAgfQogICAgaWYgKChlbmRJbmRleCA8IDApIHx8IChlbmRJbmRleCA+IHRoaXMubGVuZ3RoKSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci52YWx1ZShlbmRJbmRleCk7CiAgICB9CiAgICBpZiAoc3RhcnRJbmRleCA+IGVuZEluZGV4KSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnZhbHVlKHN0YXJ0SW5kZXgpOwogICAgfQogICAgcmV0dXJuIF9zdWJzdHJpbmdVbmNoZWNrZWQoc3RhcnRJbmRleCwgZW5kSW5kZXgpOwogIH0KCiAgU3RyaW5nIF9zdWJzdHJpbmdVbmNoZWNrZWQoaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCkgewogICAgYXNzZXJ0KGVuZEluZGV4ICE9IG51bGwpOwogICAgYXNzZXJ0KChzdGFydEluZGV4ID49IDApICYmIChzdGFydEluZGV4IDw9IHRoaXMubGVuZ3RoKSk7CiAgICBhc3NlcnQoKGVuZEluZGV4ID49IDApICYmIChlbmRJbmRleCA8PSB0aGlzLmxlbmd0aCkpOwogICAgYXNzZXJ0KHN0YXJ0SW5kZXggPD0gZW5kSW5kZXgpOwoKICAgIGlmIChzdGFydEluZGV4ID09IGVuZEluZGV4KSB7CiAgICAgIHJldHVybiAiIjsKICAgIH0KICAgIGlmICgoc3RhcnRJbmRleCA9PSAwKSAmJiAoZW5kSW5kZXggPT0gdGhpcy5sZW5ndGgpKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgaWYgKChzdGFydEluZGV4ICsgMSkgPT0gZW5kSW5kZXgpIHsKICAgICAgcmV0dXJuIHRoaXNbc3RhcnRJbmRleF07CiAgICB9CiAgICByZXR1cm4gX3N1YnN0cmluZ1VuY2hlY2tlZE5hdGl2ZShzdGFydEluZGV4LCBlbmRJbmRleCk7CiAgfQoKICBTdHJpbmcgX3N1YnN0cmluZ1VuY2hlY2tlZE5hdGl2ZShpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4KQogICAgICBuYXRpdmUgIlN0cmluZ0Jhc2Vfc3Vic3RyaW5nVW5jaGVja2VkIjsKCiAgLy8gQ2hlY2tzIGZvciBvbmUtYnl0ZSB3aGl0ZXNwYWNlcyBvbmx5LgogIHN0YXRpYyBib29sIF9pc09uZUJ5dGVXaGl0ZXNwYWNlKGludCBjb2RlVW5pdCkgewogICAgaWYgKGNvZGVVbml0IDw9IDMyKSB7CiAgICAgIHJldHVybiAoKGNvZGVVbml0ID09IDMyKSB8fCAvLyBTcGFjZS4KICAgICAgICAgICgoY29kZVVuaXQgPD0gMTMpICYmIChjb2RlVW5pdCA+PSA5KSkpOyAvLyBDUiwgTEYsIFRBQiwgZXRjLgogICAgfQogICAgcmV0dXJuIChjb2RlVW5pdCA9PSAweDg1KSB8fCAoY29kZVVuaXQgPT0gMHhBMCk7IC8vIE5FTCwgTkJTUC4KICB9CgogIC8vIENoYXJhY3RlcnMgd2l0aCBXaGl0ZXNwYWNlIHByb3BlcnR5IChVbmljb2RlIDYuMykuCiAgLy8gMDAwOS4uMDAwRCAgICA7IFdoaXRlX1NwYWNlICMgQ2MgICAgICAgPGNvbnRyb2wtMDAwOT4uLjxjb250cm9sLTAwMEQ+CiAgLy8gMDAyMCAgICAgICAgICA7IFdoaXRlX1NwYWNlICMgWnMgICAgICAgU1BBQ0UKICAvLyAwMDg1ICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBDYyAgICAgICA8Y29udHJvbC0wMDg1PgogIC8vIDAwQTAgICAgICAgICAgOyBXaGl0ZV9TcGFjZSAjIFpzICAgICAgIE5PLUJSRUFLIFNQQUNFCiAgLy8gMTY4MCAgICAgICAgICA7IFdoaXRlX1NwYWNlICMgWnMgICAgICAgT0dIQU0gU1BBQ0UgTUFSSwogIC8vIDIwMDAuLjIwMEEgICAgOyBXaGl0ZV9TcGFjZSAjIFpzICAgICAgIEVOIFFVQUQuLkhBSVIgU1BBQ0UKICAvLyAyMDI4ICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBabCAgICAgICBMSU5FIFNFUEFSQVRPUgogIC8vIDIwMjkgICAgICAgICAgOyBXaGl0ZV9TcGFjZSAjIFpwICAgICAgIFBBUkFHUkFQSCBTRVBBUkFUT1IKICAvLyAyMDJGICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBacyAgICAgICBOQVJST1cgTk8tQlJFQUsgU1BBQ0UKICAvLyAyMDVGICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBacyAgICAgICBNRURJVU0gTUFUSEVNQVRJQ0FMIFNQQUNFCiAgLy8gMzAwMCAgICAgICAgICA7IFdoaXRlX1NwYWNlICMgWnMgICAgICAgSURFT0dSQVBISUMgU1BBQ0UKICAvLwogIC8vIEJPTTogMHhGRUZGCiAgc3RhdGljIGJvb2wgX2lzVHdvQnl0ZVdoaXRlc3BhY2UoaW50IGNvZGVVbml0KSB7CiAgICBpZiAoY29kZVVuaXQgPD0gMzIpIHsKICAgICAgcmV0dXJuIChjb2RlVW5pdCA9PSAzMikgfHwgKChjb2RlVW5pdCA8PSAxMykgJiYgKGNvZGVVbml0ID49IDkpKTsKICAgIH0KICAgIGlmIChjb2RlVW5pdCA8IDB4ODUpIHJldHVybiBmYWxzZTsKICAgIGlmICgoY29kZVVuaXQgPT0gMHg4NSkgfHwgKGNvZGVVbml0ID09IDB4QTApKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiAoY29kZVVuaXQgPD0gMHgyMDBBKQogICAgICAgID8gKChjb2RlVW5pdCA9PSAweDE2ODApIHx8ICgweDIwMDAgPD0gY29kZVVuaXQpKQogICAgICAgIDogKChjb2RlVW5pdCA9PSAweDIwMjgpIHx8CiAgICAgICAgICAgIChjb2RlVW5pdCA9PSAweDIwMjkpIHx8CiAgICAgICAgICAgIChjb2RlVW5pdCA9PSAweDIwMkYpIHx8CiAgICAgICAgICAgIChjb2RlVW5pdCA9PSAweDIwNUYpIHx8CiAgICAgICAgICAgIChjb2RlVW5pdCA9PSAweDMwMDApIHx8CiAgICAgICAgICAgIChjb2RlVW5pdCA9PSAweEZFRkYpKTsKICB9CgogIGludCBfZmlyc3ROb25XaGl0ZXNwYWNlKCkgewogICAgZmluYWwgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBpbnQgZmlyc3QgPSAwOwogICAgZm9yICg7IGZpcnN0IDwgbGVuOyBmaXJzdCsrKSB7CiAgICAgIGlmICghX2lzV2hpdGVzcGFjZSh0aGlzLmNvZGVVbml0QXQoZmlyc3QpKSkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmlyc3Q7CiAgfQoKICBpbnQgX2xhc3ROb25XaGl0ZXNwYWNlKCkgewogICAgaW50IGxhc3QgPSB0aGlzLmxlbmd0aCAtIDE7CiAgICBmb3IgKDsgbGFzdCA+PSAwOyBsYXN0LS0pIHsKICAgICAgaWYgKCFfaXNXaGl0ZXNwYWNlKHRoaXMuY29kZVVuaXRBdChsYXN0KSkpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGxhc3Q7CiAgfQoKICBTdHJpbmcgdHJpbSgpIHsKICAgIGZpbmFsIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgaW50IGZpcnN0ID0gX2ZpcnN0Tm9uV2hpdGVzcGFjZSgpOwogICAgaWYgKGxlbiA9PSBmaXJzdCkgewogICAgICAvLyBTdHJpbmcgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlcy4KICAgICAgcmV0dXJuICIiOwogICAgfQogICAgaW50IGxhc3QgPSBfbGFzdE5vbldoaXRlc3BhY2UoKSArIDE7CiAgICBpZiAoKGZpcnN0ID09IDApICYmIChsYXN0ID09IGxlbikpIHsKICAgICAgLy8gUmV0dXJucyB0aGlzIHN0cmluZyBzaW5jZSBpdCBkb2VzIG5vdCBoYXZlIGxlYWRpbmcgb3IgdHJhaWxpbmcKICAgICAgLy8gd2hpdGVzcGFjZXMuCiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgcmV0dXJuIF9zdWJzdHJpbmdVbmNoZWNrZWQoZmlyc3QsIGxhc3QpOwogIH0KCiAgU3RyaW5nIHRyaW1MZWZ0KCkgewogICAgZmluYWwgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBpbnQgZmlyc3QgPSAwOwogICAgZm9yICg7IGZpcnN0IDwgbGVuOyBmaXJzdCsrKSB7CiAgICAgIGlmICghX2lzV2hpdGVzcGFjZSh0aGlzLmNvZGVVbml0QXQoZmlyc3QpKSkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZiAobGVuID09IGZpcnN0KSB7CiAgICAgIC8vIFN0cmluZyBjb250YWlucyBvbmx5IHdoaXRlc3BhY2VzLgogICAgICByZXR1cm4gIiI7CiAgICB9CiAgICBpZiAoZmlyc3QgPT0gMCkgewogICAgICAvLyBSZXR1cm5zIHRoaXMgc3RyaW5nIHNpbmNlIGl0IGRvZXMgbm90IGhhdmUgbGVhZGluZyBvciB0cmFpbGluZwogICAgICAvLyB3aGl0ZXNwYWNlcy4KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICByZXR1cm4gX3N1YnN0cmluZ1VuY2hlY2tlZChmaXJzdCwgbGVuKTsKICB9CgogIFN0cmluZyB0cmltUmlnaHQoKSB7CiAgICBmaW5hbCBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGludCBsYXN0ID0gbGVuIC0gMTsKICAgIGZvciAoOyBsYXN0ID49IDA7IGxhc3QtLSkgewogICAgICBpZiAoIV9pc1doaXRlc3BhY2UodGhpcy5jb2RlVW5pdEF0KGxhc3QpKSkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZiAobGFzdCA9PSAtMSkgewogICAgICAvLyBTdHJpbmcgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlcy4KICAgICAgcmV0dXJuICIiOwogICAgfQogICAgaWYgKGxhc3QgPT0gKGxlbiAtIDEpKSB7CiAgICAgIC8vIFJldHVybnMgdGhpcyBzdHJpbmcgc2luY2UgaXQgZG9lcyBub3QgaGF2ZSB0cmFpbGluZyB3aGl0ZXNwYWNlcy4KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICByZXR1cm4gX3N1YnN0cmluZ1VuY2hlY2tlZCgwLCBsYXN0ICsgMSk7CiAgfQoKICBTdHJpbmcgb3BlcmF0b3IgKihpbnQgdGltZXMpIHsKICAgIGlmICh0aW1lcyA8PSAwKSByZXR1cm4gIiI7CiAgICBpZiAodGltZXMgPT0gMSkgcmV0dXJuIHRoaXM7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcih0aGlzKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgdGltZXM7IGkrKykgewogICAgICBidWZmZXIud3JpdGUodGhpcyk7CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICBTdHJpbmcgcGFkTGVmdChpbnQgd2lkdGgsIFtTdHJpbmcgcGFkZGluZyA9ICcgJ10pIHsKICAgIGludCBkZWx0YSA9IHdpZHRoIC0gdGhpcy5sZW5ndGg7CiAgICBpZiAoZGVsdGEgPD0gMCkgcmV0dXJuIHRoaXM7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWx0YTsgaSsrKSB7CiAgICAgIGJ1ZmZlci53cml0ZShwYWRkaW5nKTsKICAgIH0KICAgIGJ1ZmZlci53cml0ZSh0aGlzKTsKICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIFN0cmluZyBwYWRSaWdodChpbnQgd2lkdGgsIFtTdHJpbmcgcGFkZGluZyA9ICcgJ10pIHsKICAgIGludCBkZWx0YSA9IHdpZHRoIC0gdGhpcy5sZW5ndGg7CiAgICBpZiAoZGVsdGEgPD0gMCkgcmV0dXJuIHRoaXM7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcih0aGlzKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVsdGE7IGkrKykgewogICAgICBidWZmZXIud3JpdGUocGFkZGluZyk7CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICBib29sIGNvbnRhaW5zKFBhdHRlcm4gcGF0dGVybiwgW2ludCBzdGFydEluZGV4ID0gMF0pIHsKICAgIGlmIChwYXR0ZXJuIGlzIFN0cmluZykgewogICAgICBpZiAoc3RhcnRJbmRleCA8IDAgfHwgc3RhcnRJbmRleCA+IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2Uoc3RhcnRJbmRleCwgMCwgdGhpcy5sZW5ndGgpOwogICAgICB9CiAgICAgIHJldHVybiBpbmRleE9mKHBhdHRlcm4sIHN0YXJ0SW5kZXgpID49IDA7CiAgICB9CiAgICByZXR1cm4gcGF0dGVybi5hbGxNYXRjaGVzKHRoaXMuc3Vic3RyaW5nKHN0YXJ0SW5kZXgpKS5pc05vdEVtcHR5OwogIH0KCiAgU3RyaW5nIHJlcGxhY2VGaXJzdChQYXR0ZXJuIHBhdHRlcm4sIFN0cmluZyByZXBsYWNlbWVudCwKICAgICAgW2ludCBzdGFydEluZGV4ID0gMF0pIHsKICAgIGlmIChwYXR0ZXJuID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgicGF0dGVybiIpOwogICAgfQogICAgaWYgKHJlcGxhY2VtZW50ID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgicmVwbGFjZW1lbnQiKTsKICAgIH0KICAgIGlmIChzdGFydEluZGV4ID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgic3RhcnRJbmRleCIpOwogICAgfQogICAgUmFuZ2VFcnJvci5jaGVja1ZhbHVlSW5JbnRlcnZhbChzdGFydEluZGV4LCAwLCB0aGlzLmxlbmd0aCwgInN0YXJ0SW5kZXgiKTsKICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gc3RhcnRJbmRleCA9PSAwCiAgICAgICAgPyBwYXR0ZXJuLmFsbE1hdGNoZXModGhpcykuaXRlcmF0b3IKICAgICAgICA6IHBhdHRlcm4uYWxsTWF0Y2hlcyh0aGlzLCBzdGFydEluZGV4KS5pdGVyYXRvcjsKICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuIHRoaXM7CiAgICBNYXRjaCBtYXRjaCA9IGl0ZXJhdG9yLmN1cnJlbnQ7CiAgICByZXR1cm4gcmVwbGFjZVJhbmdlKG1hdGNoLnN0YXJ0LCBtYXRjaC5lbmQsIHJlcGxhY2VtZW50KTsKICB9CgogIFN0cmluZyByZXBsYWNlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBTdHJpbmcgcmVwbGFjZW1lbnQpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGxlbmd0aCk7CiAgICBib29sIHJlcGxhY2VtZW50SXNPbmVCeXRlID0gcmVwbGFjZW1lbnQuX2lzT25lQnl0ZTsKICAgIGlmIChzdGFydCA9PSAwICYmIGVuZCA9PSBsZW5ndGgpIHJldHVybiByZXBsYWNlbWVudDsKICAgIGludCByZXBsYWNlbWVudExlbmd0aCA9IHJlcGxhY2VtZW50Lmxlbmd0aDsKICAgIGludCB0b3RhbExlbmd0aCA9IHN0YXJ0ICsgKGxlbmd0aCAtIGVuZCkgKyByZXBsYWNlbWVudExlbmd0aDsKICAgIGlmIChyZXBsYWNlbWVudElzT25lQnl0ZSAmJiB0aGlzLl9pc09uZUJ5dGUpIHsKICAgICAgdmFyIHJlc3VsdCA9IF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZSh0b3RhbExlbmd0aCk7CiAgICAgIGludCBpbmRleCA9IDA7CiAgICAgIGluZGV4ID0gcmVzdWx0Ll9zZXRSYW5nZShpbmRleCwgdGhpcywgMCwgc3RhcnQpOwogICAgICBpbmRleCA9IHJlc3VsdC5fc2V0UmFuZ2Uoc3RhcnQsIHJlcGxhY2VtZW50LCAwLCByZXBsYWNlbWVudExlbmd0aCk7CiAgICAgIHJlc3VsdC5fc2V0UmFuZ2UoaW5kZXgsIHRoaXMsIGVuZCwgbGVuZ3RoKTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIExpc3Qgc2xpY2VzID0gW107CiAgICBfYWRkUmVwbGFjZVNsaWNlKHNsaWNlcywgMCwgc3RhcnQpOwogICAgaWYgKHJlcGxhY2VtZW50Lmxlbmd0aCA+IDApIHNsaWNlcy5hZGQocmVwbGFjZW1lbnQpOwogICAgX2FkZFJlcGxhY2VTbGljZShzbGljZXMsIGVuZCwgbGVuZ3RoKTsKICAgIHJldHVybiBfam9pblJlcGxhY2VBbGxSZXN1bHQoCiAgICAgICAgdGhpcywgc2xpY2VzLCB0b3RhbExlbmd0aCwgcmVwbGFjZW1lbnRJc09uZUJ5dGUpOwogIH0KCiAgc3RhdGljIGludCBfYWRkUmVwbGFjZVNsaWNlKExpc3QgbWF0Y2hlcywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBpZiAobGVuZ3RoID4gMCkgewogICAgICBpZiAobGVuZ3RoIDw9IF9tYXhMZW5ndGhWYWx1ZSAmJiBzdGFydCA8PSBfbWF4U3RhcnRWYWx1ZSkgewogICAgICAgIG1hdGNoZXMuYWRkKC0oKHN0YXJ0IDw8IF9sZW5ndGhCaXRzKSB8IGxlbmd0aCkpOwogICAgICB9IGVsc2UgewogICAgICAgIG1hdGNoZXMuYWRkKHN0YXJ0KTsKICAgICAgICBtYXRjaGVzLmFkZChlbmQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbGVuZ3RoOwogIH0KCiAgU3RyaW5nIHJlcGxhY2VBbGwoUGF0dGVybiBwYXR0ZXJuLCBTdHJpbmcgcmVwbGFjZW1lbnQpIHsKICAgIGlmIChwYXR0ZXJuID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoInBhdHRlcm4iKTsKICAgIGlmIChyZXBsYWNlbWVudCA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJyZXBsYWNlbWVudCIpOwoKICAgIGludCBzdGFydEluZGV4ID0gMDsKICAgIC8vIFN0cmluZyBmcmFnbWVudHMgdGhhdCByZXBsYWNlIHRoZSB0aGUgcHJlZml4IFt0aGlzXSB1cCB0byBbc3RhcnRJbmRleF0uCiAgICBMaXN0IG1hdGNoZXMgPSBbXTsKICAgIGludCBsZW5ndGggPSAwOyAvLyBMZW5ndGggb2YgYWxsIGZyYWdtZW50cy4KICAgIGludCByZXBsYWNlbWVudExlbmd0aCA9IHJlcGxhY2VtZW50Lmxlbmd0aDsKCiAgICBpZiAocmVwbGFjZW1lbnRMZW5ndGggPT0gMCkgewogICAgICBmb3IgKE1hdGNoIG1hdGNoIGluIHBhdHRlcm4uYWxsTWF0Y2hlcyh0aGlzKSkgewogICAgICAgIGxlbmd0aCArPSBfYWRkUmVwbGFjZVNsaWNlKG1hdGNoZXMsIHN0YXJ0SW5kZXgsIG1hdGNoLnN0YXJ0KTsKICAgICAgICBzdGFydEluZGV4ID0gbWF0Y2guZW5kOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBmb3IgKE1hdGNoIG1hdGNoIGluIHBhdHRlcm4uYWxsTWF0Y2hlcyh0aGlzKSkgewogICAgICAgIGxlbmd0aCArPSBfYWRkUmVwbGFjZVNsaWNlKG1hdGNoZXMsIHN0YXJ0SW5kZXgsIG1hdGNoLnN0YXJ0KTsKICAgICAgICBtYXRjaGVzLmFkZChyZXBsYWNlbWVudCk7CiAgICAgICAgbGVuZ3RoICs9IHJlcGxhY2VtZW50TGVuZ3RoOwogICAgICAgIHN0YXJ0SW5kZXggPSBtYXRjaC5lbmQ7CiAgICAgIH0KICAgIH0KICAgIC8vIE5vIG1hdGNoLCBvciBhIHplcm8tbGVuZ3RoIG1hdGNoIGF0IHN0YXJ0IHdpdGggemVyby1sZW5ndGggcmVwbGFjZW1lbnQuCiAgICBpZiAoc3RhcnRJbmRleCA9PSAwICYmIGxlbmd0aCA9PSAwKSByZXR1cm4gdGhpczsKICAgIGxlbmd0aCArPSBfYWRkUmVwbGFjZVNsaWNlKG1hdGNoZXMsIHN0YXJ0SW5kZXgsIHRoaXMubGVuZ3RoKTsKICAgIGJvb2wgcmVwbGFjZW1lbnRJc09uZUJ5dGUgPSByZXBsYWNlbWVudC5faXNPbmVCeXRlOwogICAgaWYgKHJlcGxhY2VtZW50SXNPbmVCeXRlICYmCiAgICAgICAgbGVuZ3RoIDwgX21heEpvaW5SZXBsYWNlT25lQnl0ZVN0cmluZ0xlbmd0aCAmJgogICAgICAgIHRoaXMuX2lzT25lQnl0ZSkgewogICAgICAvLyBUT0RPKGxybik6IElzIHRoZXJlIGEgY3V0LW9mZiBwb2ludCwgb3IgaXMgcnVudGltZSBhbHdheXMgZmFzdGVyPwogICAgICByZXR1cm4gX2pvaW5SZXBsYWNlQWxsT25lQnl0ZVJlc3VsdCh0aGlzLCBtYXRjaGVzLCBsZW5ndGgpOwogICAgfQogICAgcmV0dXJuIF9qb2luUmVwbGFjZUFsbFJlc3VsdCh0aGlzLCBtYXRjaGVzLCBsZW5ndGgsIHJlcGxhY2VtZW50SXNPbmVCeXRlKTsKICB9CgogIC8qKgogICAqIEFzIFtfam9pblJlcGxhY2VBbGxSZXN1bHRdLCBidXQga25vd2luZyB0aGF0IHRoZSByZXN1bHQKICAgKiBpcyBhbHdheXMgYSBbX09uZUJ5dGVTdHJpbmddLgogICAqLwogIHN0YXRpYyBTdHJpbmcgX2pvaW5SZXBsYWNlQWxsT25lQnl0ZVJlc3VsdCgKICAgICAgU3RyaW5nIGJhc2UsIExpc3QgbWF0Y2hlcywgaW50IGxlbmd0aCkgewogICAgX09uZUJ5dGVTdHJpbmcgcmVzdWx0ID0gX09uZUJ5dGVTdHJpbmcuX2FsbG9jYXRlKGxlbmd0aCk7CiAgICBpbnQgd3JpdGVJbmRleCA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hdGNoZXMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGVudHJ5ID0gbWF0Y2hlc1tpXTsKICAgICAgaWYgKGVudHJ5IGlzIF9TbWkpIHsKICAgICAgICBpbnQgc2xpY2VTdGFydCA9IGVudHJ5OwogICAgICAgIGludCBzbGljZUVuZDsKICAgICAgICBpZiAoc2xpY2VTdGFydCA8IDApIHsKICAgICAgICAgIGludCBiaXRzID0gLXNsaWNlU3RhcnQ7CiAgICAgICAgICBpbnQgc2xpY2VMZW5ndGggPSBiaXRzICYgX2xlbmd0aE1hc2s7CiAgICAgICAgICBzbGljZVN0YXJ0ID0gYml0cyA+PiBfbGVuZ3RoQml0czsKICAgICAgICAgIHNsaWNlRW5kID0gc2xpY2VTdGFydCArIHNsaWNlTGVuZ3RoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpKys7CiAgICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoIHZhbGlkIG1hdGNoZXMgbGlzdHMuCiAgICAgICAgICAvLyBJZiB0aGUgbGlzdCBpcyBzaG9ydCwgb3Igc2xpY2VFbmQgaXMgbm90IGFuIGludGVnZXIsIG9uZSBvZgogICAgICAgICAgLy8gdGhlIG5leHQgZmV3IGxpbmVzIHdpbGwgdGhyb3cgYW55d2F5LgogICAgICAgICAgYXNzZXJ0KGkgPCBtYXRjaGVzLmxlbmd0aCk7CiAgICAgICAgICBzbGljZUVuZCA9IG1hdGNoZXNbaV07CiAgICAgICAgfQogICAgICAgIGZvciAoaW50IGogPSBzbGljZVN0YXJ0OyBqIDwgc2xpY2VFbmQ7IGorKykgewogICAgICAgICAgcmVzdWx0Ll9zZXRBdCh3cml0ZUluZGV4KyssIGJhc2UuY29kZVVuaXRBdChqKSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIC8vIFJlcGxhY2VtZW50IGlzIGEgb25lLWJ5dGUgc3RyaW5nLgogICAgICAgIFN0cmluZyByZXBsYWNlbWVudCA9IGVudHJ5OwogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVwbGFjZW1lbnQubGVuZ3RoOyBqKyspIHsKICAgICAgICAgIHJlc3VsdC5fc2V0QXQod3JpdGVJbmRleCsrLCByZXBsYWNlbWVudC5jb2RlVW5pdEF0KGopKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzc2VydCh3cml0ZUluZGV4ID09IGxlbmd0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogQ29tYmluZSB0aGUgcmVzdWx0cyBvZiBhIFtyZXBsYWNlQWxsXSBtYXRjaCBpbnRvIGEgbmV3IHN0cmluZy4KICAgKgogICAqIFRoZSBbbWF0Y2hlc10gbGlzdHMgY29udGFpbnMgU21pIGluZGV4IHBhaXJzIHJlcHJlc2VudGluZyBzbGljZXMgb2YKICAgKiBbYmFzZV0gYW5kIFtTdHJpbmddcyB0byBiZSBwdXQgaW4gYmV0d2VlbiB0aGUgc2xpY2VzLgogICAqCiAgICogVGhlIHRvdGFsIFtsZW5ndGhdIG9mIHRoZSByZXN1bHRpbmcgc3RyaW5nIGlzIGtub3duLCBhcyBpcwogICAqIHdoZXRoZXIgdGhlIHJlcGxhY2VtZW50IHN0cmluZ3MgYXJlIG9uZS1ieXRlIHN0cmluZ3MuCiAgICogSWYgdGhleSBhcmUsIHRoZW4gd2UgaGF2ZSB0byBjaGVjayB0aGUgYmFzZSBzdHJpbmcgc2xpY2VzIHRvIGtub3cKICAgKiB3aGV0aGVyIHRoZSByZXN1bHQgbXVzdCBiZSBhIG9uZS1ieXRlIHN0cmluZy4KICAgKi8KICBzdGF0aWMgU3RyaW5nCiAgICAgIF9qb2luUmVwbGFjZUFsbFJlc3VsdChTdHJpbmcgYmFzZSwgTGlzdCBtYXRjaGVzLCBpbnQgbGVuZ3RoLAogICAgICAgICAgYm9vbCByZXBsYWNlbWVudFN0cmluZ3NBcmVPbmVCeXRlKQogICAgICBuYXRpdmUgIlN0cmluZ0Jhc2Vfam9pblJlcGxhY2VBbGxSZXN1bHQiOwoKICBTdHJpbmcgcmVwbGFjZUFsbE1hcHBlZChQYXR0ZXJuIHBhdHRlcm4sIFN0cmluZyByZXBsYWNlKE1hdGNoIG1hdGNoKSkgewogICAgaWYgKHBhdHRlcm4gPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgicGF0dGVybiIpOwogICAgaWYgKHJlcGxhY2UgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgicmVwbGFjZSIpOwogICAgTGlzdCBtYXRjaGVzID0gW107CiAgICBpbnQgbGVuZ3RoID0gMDsKICAgIGludCBzdGFydEluZGV4ID0gMDsKICAgIGJvb2wgcmVwbGFjZW1lbnRTdHJpbmdzQXJlT25lQnl0ZSA9IHRydWU7CiAgICBmb3IgKE1hdGNoIG1hdGNoIGluIHBhdHRlcm4uYWxsTWF0Y2hlcyh0aGlzKSkgewogICAgICBsZW5ndGggKz0gX2FkZFJlcGxhY2VTbGljZShtYXRjaGVzLCBzdGFydEluZGV4LCBtYXRjaC5zdGFydCk7CiAgICAgIHZhciByZXBsYWNlbWVudCA9ICIke3JlcGxhY2UobWF0Y2gpfSI7CiAgICAgIG1hdGNoZXMuYWRkKHJlcGxhY2VtZW50KTsKICAgICAgbGVuZ3RoICs9IHJlcGxhY2VtZW50Lmxlbmd0aDsKICAgICAgcmVwbGFjZW1lbnRTdHJpbmdzQXJlT25lQnl0ZSA9CiAgICAgICAgICByZXBsYWNlbWVudFN0cmluZ3NBcmVPbmVCeXRlICYmIHJlcGxhY2VtZW50Ll9pc09uZUJ5dGU7CiAgICAgIHN0YXJ0SW5kZXggPSBtYXRjaC5lbmQ7CiAgICB9CiAgICBpZiAobWF0Y2hlcy5pc0VtcHR5KSByZXR1cm4gdGhpczsKICAgIGxlbmd0aCArPSBfYWRkUmVwbGFjZVNsaWNlKG1hdGNoZXMsIHN0YXJ0SW5kZXgsIHRoaXMubGVuZ3RoKTsKICAgIGlmIChyZXBsYWNlbWVudFN0cmluZ3NBcmVPbmVCeXRlICYmCiAgICAgICAgbGVuZ3RoIDwgX21heEpvaW5SZXBsYWNlT25lQnl0ZVN0cmluZ0xlbmd0aCAmJgogICAgICAgIHRoaXMuX2lzT25lQnl0ZSkgewogICAgICByZXR1cm4gX2pvaW5SZXBsYWNlQWxsT25lQnl0ZVJlc3VsdCh0aGlzLCBtYXRjaGVzLCBsZW5ndGgpOwogICAgfQogICAgcmV0dXJuIF9qb2luUmVwbGFjZUFsbFJlc3VsdCgKICAgICAgICB0aGlzLCBtYXRjaGVzLCBsZW5ndGgsIHJlcGxhY2VtZW50U3RyaW5nc0FyZU9uZUJ5dGUpOwogIH0KCiAgU3RyaW5nIHJlcGxhY2VGaXJzdE1hcHBlZChQYXR0ZXJuIHBhdHRlcm4sIFN0cmluZyByZXBsYWNlKE1hdGNoIG1hdGNoKSwKICAgICAgW2ludCBzdGFydEluZGV4ID0gMF0pIHsKICAgIGlmIChwYXR0ZXJuID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoInBhdHRlcm4iKTsKICAgIGlmIChyZXBsYWNlID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoInJlcGxhY2UiKTsKICAgIGlmIChzdGFydEluZGV4ID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoInN0YXJ0SW5kZXgiKTsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWx1ZUluSW50ZXJ2YWwoc3RhcnRJbmRleCwgMCwgdGhpcy5sZW5ndGgsICJzdGFydEluZGV4Iik7CgogICAgdmFyIG1hdGNoZXMgPSBwYXR0ZXJuLmFsbE1hdGNoZXModGhpcywgc3RhcnRJbmRleCkuaXRlcmF0b3I7CiAgICBpZiAoIW1hdGNoZXMubW92ZU5leHQoKSkgcmV0dXJuIHRoaXM7CiAgICB2YXIgbWF0Y2ggPSBtYXRjaGVzLmN1cnJlbnQ7CiAgICB2YXIgcmVwbGFjZW1lbnQgPSAiJHtyZXBsYWNlKG1hdGNoKX0iOwogICAgcmV0dXJuIHJlcGxhY2VSYW5nZShtYXRjaC5zdGFydCwgbWF0Y2guZW5kLCByZXBsYWNlbWVudCk7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF9tYXRjaFN0cmluZyhNYXRjaCBtYXRjaCkgPT4gbWF0Y2hbMF07CiAgc3RhdGljIFN0cmluZyBfc3RyaW5nSWRlbnRpdHkoU3RyaW5nIHN0cmluZykgPT4gc3RyaW5nOwoKICBTdHJpbmcgX3NwbGl0TWFwSm9pbkVtcHR5U3RyaW5nKAogICAgICBTdHJpbmcgb25NYXRjaChNYXRjaCBtYXRjaCksIFN0cmluZyBvbk5vbk1hdGNoKFN0cmluZyBub25NYXRjaCkpIHsKICAgIC8vIFBhdHRlcm4gaXMgdGhlIGVtcHR5IHN0cmluZy4KICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBpbnQgaSA9IDA7CiAgICBidWZmZXIud3JpdGUob25Ob25NYXRjaCgiIikpOwogICAgd2hpbGUgKGkgPCBsZW5ndGgpIHsKICAgICAgYnVmZmVyLndyaXRlKG9uTWF0Y2gobmV3IF9TdHJpbmdNYXRjaChpLCB0aGlzLCAiIikpKTsKICAgICAgLy8gU3BlY2lhbCBjYXNlIHRvIGF2b2lkIHNwbGl0dGluZyBhIHN1cnJvZ2F0ZSBwYWlyLgogICAgICBpbnQgY29kZSA9IHRoaXMuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKChjb2RlICYgfjB4M0ZGKSA9PSAweEQ4MDAgJiYgbGVuZ3RoID4gaSArIDEpIHsKICAgICAgICAvLyBMZWFkaW5nIHN1cnJvZ2F0ZTsKICAgICAgICBjb2RlID0gdGhpcy5jb2RlVW5pdEF0KGkgKyAxKTsKICAgICAgICBpZiAoKGNvZGUgJiB+MHgzRkYpID09IDB4REMwMCkgewogICAgICAgICAgLy8gTWF0Y2hpbmcgdHJhaWxpbmcgc3Vycm9nYXRlLgogICAgICAgICAgYnVmZmVyLndyaXRlKG9uTm9uTWF0Y2godGhpcy5zdWJzdHJpbmcoaSwgaSArIDIpKSk7CiAgICAgICAgICBpICs9IDI7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYnVmZmVyLndyaXRlKG9uTm9uTWF0Y2godGhpc1tpXSkpOwogICAgICBpKys7CiAgICB9CiAgICBidWZmZXIud3JpdGUob25NYXRjaChuZXcgX1N0cmluZ01hdGNoKGksIHRoaXMsICIiKSkpOwogICAgYnVmZmVyLndyaXRlKG9uTm9uTWF0Y2goIiIpKTsKICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIFN0cmluZyBzcGxpdE1hcEpvaW4oUGF0dGVybiBwYXR0ZXJuLAogICAgICB7U3RyaW5nIG9uTWF0Y2goTWF0Y2ggbWF0Y2gpLCBTdHJpbmcgb25Ob25NYXRjaChTdHJpbmcgbm9uTWF0Y2gpfSkgewogICAgaWYgKHBhdHRlcm4gPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJwYXR0ZXJuIik7CiAgICB9CiAgICBvbk1hdGNoID8/PSBfbWF0Y2hTdHJpbmc7CiAgICBvbk5vbk1hdGNoID8/PSBfc3RyaW5nSWRlbnRpdHk7CiAgICBpZiAocGF0dGVybiBpcyBTdHJpbmcpIHsKICAgICAgU3RyaW5nIHN0cmluZ1BhdHRlcm4gPSBwYXR0ZXJuOwogICAgICBpZiAoc3RyaW5nUGF0dGVybi5pc0VtcHR5KSB7CiAgICAgICAgcmV0dXJuIF9zcGxpdE1hcEpvaW5FbXB0eVN0cmluZyhvbk1hdGNoLCBvbk5vbk1hdGNoKTsKICAgICAgfQogICAgfQogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGludCBzdGFydEluZGV4ID0gMDsKICAgIGZvciAoTWF0Y2ggbWF0Y2ggaW4gcGF0dGVybi5hbGxNYXRjaGVzKHRoaXMpKSB7CiAgICAgIGJ1ZmZlci53cml0ZShvbk5vbk1hdGNoKHRoaXMuc3Vic3RyaW5nKHN0YXJ0SW5kZXgsIG1hdGNoLnN0YXJ0KSkpOwogICAgICBidWZmZXIud3JpdGUob25NYXRjaChtYXRjaCkudG9TdHJpbmcoKSk7CiAgICAgIHN0YXJ0SW5kZXggPSBtYXRjaC5lbmQ7CiAgICB9CiAgICBidWZmZXIud3JpdGUob25Ob25NYXRjaCh0aGlzLnN1YnN0cmluZyhzdGFydEluZGV4KSkpOwogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgLy8gQ29udmVydCBzaW5nbGUgb2JqZWN0IHRvIHN0cmluZy4KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKICBzdGF0aWMgU3RyaW5nIF9pbnRlcnBvbGF0ZVNpbmdsZShPYmplY3QgbykgewogICAgaWYgKG8gaXMgU3RyaW5nKSByZXR1cm4gbzsKICAgIGZpbmFsIHMgPSBvLnRvU3RyaW5nKCk7CiAgICBpZiAocyBpcyEgU3RyaW5nKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKHMpOwogICAgfQogICAgcmV0dXJuIHM7CiAgfQoKICAvKioKICAgKiBDb252ZXJ0IGFsbCBvYmplY3RzIGluIFt2YWx1ZXNdIHRvIHN0cmluZ3MgYW5kIGNvbmNhdCB0aGVtCiAgICogaW50byBhIHJlc3VsdCBzdHJpbmcuCiAgICogTW9kaWZpZXMgdGhlIGlucHV0IGxpc3QgaWYgaXQgY29udGFpbnMgbm9uLWBTdHJpbmdgIHZhbHVlcy4KICAgKi8KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKICBzdGF0aWMgU3RyaW5nIF9pbnRlcnBvbGF0ZShmaW5hbCBMaXN0IHZhbHVlcykgewogICAgZmluYWwgbnVtVmFsdWVzID0gdmFsdWVzLmxlbmd0aDsKICAgIGludCB0b3RhbExlbmd0aCA9IDA7CiAgICBpbnQgaSA9IDA7CiAgICB3aGlsZSAoaSA8IG51bVZhbHVlcykgewogICAgICBmaW5hbCBlID0gdmFsdWVzW2ldOwogICAgICBmaW5hbCBzID0gZS50b1N0cmluZygpOwogICAgICB2YWx1ZXNbaV0gPSBzOwogICAgICBpZiAoQ2xhc3NJRC5nZXRJRChzKSA9PSBDbGFzc0lELmNpZE9uZUJ5dGVTdHJpbmcpIHsKICAgICAgICB0b3RhbExlbmd0aCArPSBzLmxlbmd0aDsKICAgICAgICBpKys7CiAgICAgIH0gZWxzZSBpZiAocyBpcyEgU3RyaW5nKSB7CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iocyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gSGFuZGxlIHJlbWFpbmluZyBlbGVtZW50cyB3aXRob3V0IGNoZWNraW5nIGZvciBvbmUtYnl0ZS1uZXNzLgogICAgICAgIHdoaWxlICgrK2kgPCBudW1WYWx1ZXMpIHsKICAgICAgICAgIGZpbmFsIGUgPSB2YWx1ZXNbaV07CiAgICAgICAgICBmaW5hbCBzID0gZS50b1N0cmluZygpOwogICAgICAgICAgdmFsdWVzW2ldID0gczsKICAgICAgICAgIGlmIChzIGlzISBTdHJpbmcpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iocyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBfY29uY2F0UmFuZ2VOYXRpdmUodmFsdWVzLCAwLCBudW1WYWx1ZXMpOwogICAgICB9CiAgICB9CiAgICAvLyBBbGwgc3RyaW5ncyB3ZXJlIG9uZS1ieXRlIHN0cmluZ3MuCiAgICByZXR1cm4gX09uZUJ5dGVTdHJpbmcuX2NvbmNhdEFsbCh2YWx1ZXMsIHRvdGFsTGVuZ3RoKTsKICB9CgogIEl0ZXJhYmxlPE1hdGNoPiBhbGxNYXRjaGVzKFN0cmluZyBzdHJpbmcsIFtpbnQgc3RhcnQgPSAwXSkgewogICAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+IHN0cmluZy5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2Uoc3RhcnQsIDAsIHN0cmluZy5sZW5ndGgsICJzdGFydCIpOwogICAgfQogICAgcmV0dXJuIG5ldyBfU3RyaW5nQWxsTWF0Y2hlc0l0ZXJhYmxlKHN0cmluZywgdGhpcywgc3RhcnQpOwogIH0KCiAgTWF0Y2ggbWF0Y2hBc1ByZWZpeChTdHJpbmcgc3RyaW5nLCBbaW50IHN0YXJ0ID0gMF0pIHsKICAgIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPiBzdHJpbmcubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKHN0YXJ0LCAwLCBzdHJpbmcubGVuZ3RoKTsKICAgIH0KICAgIGlmIChzdGFydCArIHRoaXMubGVuZ3RoID4gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIG51bGw7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHN0cmluZy5jb2RlVW5pdEF0KHN0YXJ0ICsgaSkgIT0gdGhpcy5jb2RlVW5pdEF0KGkpKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgX1N0cmluZ01hdGNoKHN0YXJ0LCBzdHJpbmcsIHRoaXMpOwogIH0KCiAgTGlzdDxTdHJpbmc+IHNwbGl0KFBhdHRlcm4gcGF0dGVybikgewogICAgaWYgKChwYXR0ZXJuIGlzIFN0cmluZykgJiYgcGF0dGVybi5pc0VtcHR5KSB7CiAgICAgIExpc3Q8U3RyaW5nPiByZXN1bHQgPQogICAgICAgICAgbmV3IExpc3Q8U3RyaW5nPi5nZW5lcmF0ZSh0aGlzLmxlbmd0aCwgKGludCBpKSA9PiB0aGlzW2ldKTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gcGF0dGVybi5hbGxNYXRjaGVzKHRoaXMpLml0ZXJhdG9yOwogICAgaWYgKGxlbmd0aCA9PSAwICYmIGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgLy8gQSBtYXRjaGVkIGVtcHR5IHN0cmluZyBpbnB1dCByZXR1cm5zIHRoZSBlbXB0eSBsaXN0LgogICAgICByZXR1cm4gPFN0cmluZz5bXTsKICAgIH0KICAgIExpc3Q8U3RyaW5nPiByZXN1bHQgPSBuZXcgTGlzdDxTdHJpbmc+KCk7CiAgICBpbnQgc3RhcnRJbmRleCA9IDA7CiAgICBpbnQgcHJldmlvdXNJbmRleCA9IDA7CiAgICAvLyAncGF0dGVybicgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCBjb3JyZWN0bHkgYW5kIHRoZXJlZm9yZSB3ZSBjYW5ub3QKICAgIC8vIGNhbGwgX3N1YnN0cmluZ1VuaGNoZWNrZWQgdW5sZXNzIGl0IGlzIGEgdHJ1c3R3b3J0aHkgdHlwZSAoZS5nLiBTdHJpbmcpLgogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKHN0YXJ0SW5kZXggPT0gbGVuZ3RoIHx8ICFpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgICAgcmVzdWx0LmFkZCh0aGlzLnN1YnN0cmluZyhwcmV2aW91c0luZGV4LCBsZW5ndGgpKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBNYXRjaCBtYXRjaCA9IGl0ZXJhdG9yLmN1cnJlbnQ7CiAgICAgIGlmIChtYXRjaC5zdGFydCA9PSBsZW5ndGgpIHsKICAgICAgICByZXN1bHQuYWRkKHRoaXMuc3Vic3RyaW5nKHByZXZpb3VzSW5kZXgsIGxlbmd0aCkpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGludCBlbmRJbmRleCA9IG1hdGNoLmVuZDsKICAgICAgaWYgKHN0YXJ0SW5kZXggPT0gZW5kSW5kZXggJiYgZW5kSW5kZXggPT0gcHJldmlvdXNJbmRleCkgewogICAgICAgICsrc3RhcnRJbmRleDsgLy8gZW1wdHkgbWF0Y2gsIGFkdmFuY2UgYW5kIHJlc3RhcnQKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICByZXN1bHQuYWRkKHRoaXMuc3Vic3RyaW5nKHByZXZpb3VzSW5kZXgsIG1hdGNoLnN0YXJ0KSk7CiAgICAgIHN0YXJ0SW5kZXggPSBwcmV2aW91c0luZGV4ID0gZW5kSW5kZXg7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgTGlzdDxpbnQ+IGdldCBjb2RlVW5pdHMgPT4gbmV3IENvZGVVbml0cyh0aGlzKTsKCiAgUnVuZXMgZ2V0IHJ1bmVzID0+IG5ldyBSdW5lcyh0aGlzKTsKCiAgU3RyaW5nIHRvVXBwZXJDYXNlKCkgbmF0aXZlICJTdHJpbmdfdG9VcHBlckNhc2UiOwoKICBTdHJpbmcgdG9Mb3dlckNhc2UoKSBuYXRpdmUgIlN0cmluZ190b0xvd2VyQ2FzZSI7CgogIC8vIENvbmNhdGVuYXRlIFsnc3RhcnQnLCAnZW5kJ1sgZWxlbWVudHMgb2YgJ3N0cmluZ3MnLgogIHN0YXRpYyBTdHJpbmcgX2NvbmNhdFJhbmdlKExpc3Q8U3RyaW5nPiBzdHJpbmdzLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIGlmICgoZW5kIC0gc3RhcnQpID09IDEpIHsKICAgICAgcmV0dXJuIHN0cmluZ3Nbc3RhcnRdOwogICAgfQogICAgcmV0dXJuIF9jb25jYXRSYW5nZU5hdGl2ZShzdHJpbmdzLCBzdGFydCwgZW5kKTsKICB9CgogIC8vIENhbGwgdGhpcyBtZXRob2QgaWYgYWxsIGVsZW1lbnRzIG9mIFtzdHJpbmdzXSBhcmUga25vd24gdG8gYmUgc3RyaW5ncwogIC8vIGJ1dCBub3QgYWxsIGFyZSBrbm93biB0byBiZSBPbmVCeXRlU3RyaW5nKHMpLgogIHN0YXRpYyBTdHJpbmcgX2NvbmNhdFJhbmdlTmF0aXZlKExpc3Qgc3RyaW5ncywgaW50IHN0YXJ0LCBpbnQgZW5kKQogICAgICBuYXRpdmUgIlN0cmluZ19jb25jYXRSYW5nZSI7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX09uZUJ5dGVTdHJpbmcgZXh0ZW5kcyBfU3RyaW5nQmFzZSB7CiAgZmFjdG9yeSBfT25lQnl0ZVN0cmluZy5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBnZXQgaGFzaENvZGUgbmF0aXZlICJTdHJpbmdfZ2V0SGFzaENvZGUiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IGNvZGVVbml0QXQoaW50IGluZGV4KSBuYXRpdmUgIlN0cmluZ19jb2RlVW5pdEF0IjsKCiAgYm9vbCBfaXNXaGl0ZXNwYWNlKGludCBjb2RlVW5pdCkgewogICAgcmV0dXJuIF9TdHJpbmdCYXNlLl9pc09uZUJ5dGVXaGl0ZXNwYWNlKGNvZGVVbml0KTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgcmV0dXJuIHN1cGVyID09IG90aGVyOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfT25lQnl0ZVN0cmluZykKICBTdHJpbmcgX3N1YnN0cmluZ1VuY2hlY2tlZE5hdGl2ZShpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4KQogICAgICBuYXRpdmUgIk9uZUJ5dGVTdHJpbmdfc3Vic3RyaW5nVW5jaGVja2VkIjsKCiAgTGlzdDxTdHJpbmc+IF9zcGxpdFdpdGhDaGFyQ29kZShpbnQgY2hhckNvZGUpCiAgICAgIG5hdGl2ZSAiT25lQnl0ZVN0cmluZ19zcGxpdFdpdGhDaGFyQ29kZSI7CgogIExpc3Q8U3RyaW5nPiBzcGxpdChQYXR0ZXJuIHBhdHRlcm4pIHsKICAgIC8vIFRPRE8odmVnb3JvdikgaW52ZXN0aWdhdGUgaWYgdGhpcyBjYW4gYmUgcmV3cml0dGVuIGFzIGBpcyBfT25lQnl0ZVN0cmluZ2AKICAgIC8vIGNoZWNrIHdpdGhvdXQgcGVyZm9ybWFuY2UgcGVuYWx0eS4gRnJvbnQtZW5kIHdvdWxkIHRoZW4gcHJvbW90ZQogICAgLy8gcGF0dGVybiB2YXJpYWJsZSB0byBfT25lQnl0ZVN0cmluZy4KICAgIGlmIChDbGFzc0lELmdldElEKHBhdHRlcm4pID09IENsYXNzSUQuY2lkT25lQnl0ZVN0cmluZykgewogICAgICBmaW5hbCBTdHJpbmcgcGF0dGVybkFzU3RyaW5nID0gcGF0dGVybjsKICAgICAgaWYgKHBhdHRlcm5Bc1N0cmluZy5sZW5ndGggPT0gMSkgewogICAgICAgIHJldHVybiBfc3BsaXRXaXRoQ2hhckNvZGUocGF0dGVybkFzU3RyaW5nLmNvZGVVbml0QXQoMCkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3VwZXIuc3BsaXQocGF0dGVybik7CiAgfQoKICAvLyBBbGwgZWxlbWVudCBvZiAnc3RyaW5ncycgbXVzdCBiZSBPbmVCeXRlU3RyaW5ncy4KICBzdGF0aWMgX2NvbmNhdEFsbChMaXN0IHN0cmluZ3MsIGludCB0b3RhbExlbmd0aCkgewogICAgaWYgKHRvdGFsTGVuZ3RoID4gMTI4KSB7CiAgICAgIC8vIE5hdGl2ZSBpcyBxdWlja2VyLgogICAgICByZXR1cm4gX1N0cmluZ0Jhc2UuX2NvbmNhdFJhbmdlTmF0aXZlKHN0cmluZ3MsIDAsIHN0cmluZ3MubGVuZ3RoKTsKICAgIH0KICAgIGZpbmFsIHJlcyA9IF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZSh0b3RhbExlbmd0aCk7CiAgICBmaW5hbCBzdHJpbmdzTGVuZ3RoID0gc3RyaW5ncy5sZW5ndGg7CiAgICBpbnQgckl4ID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyaW5nc0xlbmd0aDsgaSsrKSB7CiAgICAgIGZpbmFsIF9PbmVCeXRlU3RyaW5nIGUgPSBzdHJpbmdzW2ldOwogICAgICBmaW5hbCBlTGVuZ3RoID0gZS5sZW5ndGg7CiAgICAgIGZvciAoaW50IHMgPSAwOyBzIDwgZUxlbmd0aDsgcysrKSB7CiAgICAgICAgcmVzLl9zZXRBdChySXgrKywgZS5jb2RlVW5pdEF0KHMpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlczsKICB9CgogIGludCBpbmRleE9mKFBhdHRlcm4gcGF0dGVybiwgW2ludCBzdGFydCA9IDBdKSB7CiAgICAvLyBTcGVjaWFsaXplIGZvciBzaW5nbGUgY2hhcmFjdGVyIHBhdHRlcm4uCiAgICBmaW5hbCBwQ2lkID0gQ2xhc3NJRC5nZXRJRChwYXR0ZXJuKTsKICAgIGlmICgocENpZCA9PSBDbGFzc0lELmNpZE9uZUJ5dGVTdHJpbmcpIHx8CiAgICAgICAgKHBDaWQgPT0gQ2xhc3NJRC5jaWRUd29CeXRlU3RyaW5nKSB8fAogICAgICAgIChwQ2lkID09IENsYXNzSUQuY2lkRXh0ZXJuYWxPbmVCeXRlU3RyaW5nKSkgewogICAgICBmaW5hbCBTdHJpbmcgcGF0dGVybkFzU3RyaW5nID0gcGF0dGVybjsKICAgICAgZmluYWwgbGVuID0gdGhpcy5sZW5ndGg7CiAgICAgIGlmICgocGF0dGVybkFzU3RyaW5nLmxlbmd0aCA9PSAxKSAmJiAoc3RhcnQgPj0gMCkgJiYgKHN0YXJ0IDwgbGVuKSkgewogICAgICAgIGZpbmFsIHBhdHRlcm5DdTAgPSBwYXR0ZXJuQXNTdHJpbmcuY29kZVVuaXRBdCgwKTsKICAgICAgICBpZiAocGF0dGVybkN1MCA+IDB4RkYpIHsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgIGlmICh0aGlzLmNvZGVVbml0QXQoaSkgPT0gcGF0dGVybkN1MCkgewogICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3VwZXIuaW5kZXhPZihwYXR0ZXJuLCBzdGFydCk7CiAgfQoKICBib29sIGNvbnRhaW5zKFBhdHRlcm4gcGF0dGVybiwgW2ludCBzdGFydCA9IDBdKSB7CiAgICBmaW5hbCBwQ2lkID0gQ2xhc3NJRC5nZXRJRChwYXR0ZXJuKTsKICAgIGlmICgocENpZCA9PSBDbGFzc0lELmNpZE9uZUJ5dGVTdHJpbmcpIHx8CiAgICAgICAgKHBDaWQgPT0gQ2xhc3NJRC5jaWRUd29CeXRlU3RyaW5nKSB8fAogICAgICAgIChwQ2lkID09IENsYXNzSUQuY2lkRXh0ZXJuYWxPbmVCeXRlU3RyaW5nKSkgewogICAgICBmaW5hbCBTdHJpbmcgcGF0dGVybkFzU3RyaW5nID0gcGF0dGVybjsKICAgICAgZmluYWwgbGVuID0gdGhpcy5sZW5ndGg7CiAgICAgIGlmICgocGF0dGVybkFzU3RyaW5nLmxlbmd0aCA9PSAxKSAmJiAoc3RhcnQgPj0gMCkgJiYgKHN0YXJ0IDwgbGVuKSkgewogICAgICAgIGZpbmFsIHBhdHRlcm5DdTAgPSBwYXR0ZXJuQXNTdHJpbmcuY29kZVVuaXRBdCgwKTsKICAgICAgICBpZiAocGF0dGVybkN1MCA+IDB4RkYpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgIGlmICh0aGlzLmNvZGVVbml0QXQoaSkgPT0gcGF0dGVybkN1MCkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3VwZXIuY29udGFpbnMocGF0dGVybiwgc3RhcnQpOwogIH0KCiAgU3RyaW5nIG9wZXJhdG9yICooaW50IHRpbWVzKSB7CiAgICBpZiAodGltZXMgPD0gMCkgcmV0dXJuICIiOwogICAgaWYgKHRpbWVzID09IDEpIHJldHVybiB0aGlzOwogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgaWYgKHRoaXMuaXNFbXB0eSkgcmV0dXJuIHRoaXM7IC8vIERvbid0IGNsb25lIGVtcHR5IHN0cmluZy4KICAgIF9PbmVCeXRlU3RyaW5nIHJlc3VsdCA9IF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZShsZW5ndGggKiB0aW1lcyk7CiAgICBpbnQgaW5kZXggPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aW1lczsgaSsrKSB7CiAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspIHsKICAgICAgICByZXN1bHQuX3NldEF0KGluZGV4KyssIHRoaXMuY29kZVVuaXRBdChqKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTdHJpbmcgcGFkTGVmdChpbnQgd2lkdGgsIFtTdHJpbmcgcGFkZGluZyA9ICcgJ10pIHsKICAgIGludCBwYWRDaWQgPSBDbGFzc0lELmdldElEKHBhZGRpbmcpOwogICAgaWYgKChwYWRDaWQgIT0gQ2xhc3NJRC5jaWRPbmVCeXRlU3RyaW5nKSAmJgogICAgICAgIChwYWRDaWQgIT0gQ2xhc3NJRC5jaWRFeHRlcm5hbE9uZUJ5dGVTdHJpbmcpKSB7CiAgICAgIHJldHVybiBzdXBlci5wYWRMZWZ0KHdpZHRoLCBwYWRkaW5nKTsKICAgIH0KICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGludCBkZWx0YSA9IHdpZHRoIC0gbGVuZ3RoOwogICAgaWYgKGRlbHRhIDw9IDApIHJldHVybiB0aGlzOwogICAgaW50IHBhZExlbmd0aCA9IHBhZGRpbmcubGVuZ3RoOwogICAgaW50IHJlc3VsdExlbmd0aCA9IHBhZExlbmd0aCAqIGRlbHRhICsgbGVuZ3RoOwogICAgX09uZUJ5dGVTdHJpbmcgcmVzdWx0ID0gX09uZUJ5dGVTdHJpbmcuX2FsbG9jYXRlKHJlc3VsdExlbmd0aCk7CiAgICBpbnQgaW5kZXggPSAwOwogICAgaWYgKHBhZExlbmd0aCA9PSAxKSB7CiAgICAgIGludCBwYWRDaGFyID0gcGFkZGluZy5jb2RlVW5pdEF0KDApOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlbHRhOyBpKyspIHsKICAgICAgICByZXN1bHQuX3NldEF0KGluZGV4KyssIHBhZENoYXIpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlbHRhOyBpKyspIHsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBhZExlbmd0aDsgaisrKSB7CiAgICAgICAgICByZXN1bHQuX3NldEF0KGluZGV4KyssIHBhZGRpbmcuY29kZVVuaXRBdChqKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdC5fc2V0QXQoaW5kZXgrKywgdGhpcy5jb2RlVW5pdEF0KGkpKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTdHJpbmcgcGFkUmlnaHQoaW50IHdpZHRoLCBbU3RyaW5nIHBhZGRpbmcgPSAnICddKSB7CiAgICBpbnQgcGFkQ2lkID0gQ2xhc3NJRC5nZXRJRChwYWRkaW5nKTsKICAgIGlmICgocGFkQ2lkICE9IENsYXNzSUQuY2lkT25lQnl0ZVN0cmluZykgJiYKICAgICAgICAocGFkQ2lkICE9IENsYXNzSUQuY2lkRXh0ZXJuYWxPbmVCeXRlU3RyaW5nKSkgewogICAgICByZXR1cm4gc3VwZXIucGFkUmlnaHQod2lkdGgsIHBhZGRpbmcpOwogICAgfQogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgaW50IGRlbHRhID0gd2lkdGggLSBsZW5ndGg7CiAgICBpZiAoZGVsdGEgPD0gMCkgcmV0dXJuIHRoaXM7CiAgICBpbnQgcGFkTGVuZ3RoID0gcGFkZGluZy5sZW5ndGg7CiAgICBpbnQgcmVzdWx0TGVuZ3RoID0gbGVuZ3RoICsgcGFkTGVuZ3RoICogZGVsdGE7CiAgICBfT25lQnl0ZVN0cmluZyByZXN1bHQgPSBfT25lQnl0ZVN0cmluZy5fYWxsb2NhdGUocmVzdWx0TGVuZ3RoKTsKICAgIGludCBpbmRleCA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdC5fc2V0QXQoaW5kZXgrKywgdGhpcy5jb2RlVW5pdEF0KGkpKTsKICAgIH0KICAgIGlmIChwYWRMZW5ndGggPT0gMSkgewogICAgICBpbnQgcGFkQ2hhciA9IHBhZGRpbmcuY29kZVVuaXRBdCgwKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWx0YTsgaSsrKSB7CiAgICAgICAgcmVzdWx0Ll9zZXRBdChpbmRleCsrLCBwYWRDaGFyKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWx0YTsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwYWRMZW5ndGg7IGorKykgewogICAgICAgICAgcmVzdWx0Ll9zZXRBdChpbmRleCsrLCBwYWRkaW5nLmNvZGVVbml0QXQoaikpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIExvd2VyLWNhc2UgY29udmVyc2lvbiB0YWJsZSBmb3IgTGF0aW4tMSBhcyBzdHJpbmcuCiAgLy8gVXBwZXItY2FzZSByYW5nZXM6IDB4NDEtMHg1YSAoJ0EnIC0gJ1onKSwgMHhjMC0weGQ2LCAweGQ4LTB4ZGUuCiAgLy8gQ29udmVyc2lvbiB0byBsb3dlciBjYXNlIHBlcmZvcm1lZCBieSBhZGRpbmcgMHgyMC4KICBzdGF0aWMgY29uc3QgX0xDX1RBQkxFID0KICAgICAgIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiCiAgICAgICJceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmIgogICAgICAiXHgyMFx4MjFceDIyXHgyM1x4MjRceDI1XHgyNlx4MjdceDI4XHgyOVx4MmFceDJiXHgyY1x4MmRceDJlXHgyZiIKICAgICAgIlx4MzBceDMxXHgzMlx4MzNceDM0XHgzNVx4MzZceDM3XHgzOFx4MzlceDNhXHgzYlx4M2NceDNkXHgzZVx4M2YiCiAgICAgICJceDQwXHg2MVx4NjJceDYzXHg2NFx4NjVceDY2XHg2N1x4NjhceDY5XHg2YVx4NmJceDZjXHg2ZFx4NmVceDZmIgogICAgICAiXHg3MFx4NzFceDcyXHg3M1x4NzRceDc1XHg3Nlx4NzdceDc4XHg3OVx4N2FceDViXHg1Y1x4NWRceDVlXHg1ZiIKICAgICAgIlx4NjBceDYxXHg2Mlx4NjNceDY0XHg2NVx4NjZceDY3XHg2OFx4NjlceDZhXHg2Ylx4NmNceDZkXHg2ZVx4NmYiCiAgICAgICJceDcwXHg3MVx4NzJceDczXHg3NFx4NzVceDc2XHg3N1x4NzhceDc5XHg3YVx4N2JceDdjXHg3ZFx4N2VceDdmIgogICAgICAiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4ZiIKICAgICAgIlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWYiCiAgICAgICJceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmIgogICAgICAiXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZiIKICAgICAgIlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWYiCiAgICAgICJceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhkN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGRmIgogICAgICAiXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZiIKICAgICAgIlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiOwoKICAvLyBVcHBlci1jYXNlIGNvbnZlcnNpb24gdGFibGUgZm9yIExhdGluLTEgYXMgc3RyaW5nLgogIC8vIExvd2VyLWNhc2UgcmFuZ2VzOiAweDYxLTB4N2EgKCdhJyAtICd6JyksIDB4ZTAtMHhmZi4KICAvLyBUaGUgY2hhcmFjdGVycyAweGI1ICjCtSkgYW5kIDB4ZmYgKMO/KSBoYXZlIHVwcGVyIGNhc2UgdmFyaWFudHMKICAvLyB0aGF0IGFyZSBub3QgTGF0aW4tMS4gVGhlc2UgYXJlIGJvdGggbWFya2VkIGFzIDB4MDAgaW4gdGhlIHRhYmxlLgogIC8vIFRoZSBHZXJtYW4gInNoYXJwIHMiIFx4ZGYgKMOfKSBzaG91bGQgYmUgY29udmVydGVkIGludG8gdHdvIGNoYXJhY3RlcnMgKFNTKSwKICAvLyBhbmQgaXMgYWxzbyBtYXJrZWQgd2l0aCAweDAwLgogIC8vIENvbnZlcnNpb24gdG8gbG93ZXIgY2FzZSBwZXJmb3JtZWQgYnkgc3VidHJhY3RpbmcgMHgyMC4KICBzdGF0aWMgY29uc3QgX1VDX1RBQkxFID0KICAgICAgIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiCiAgICAgICJceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmIgogICAgICAiXHgyMFx4MjFceDIyXHgyM1x4MjRceDI1XHgyNlx4MjdceDI4XHgyOVx4MmFceDJiXHgyY1x4MmRceDJlXHgyZiIKICAgICAgIlx4MzBceDMxXHgzMlx4MzNceDM0XHgzNVx4MzZceDM3XHgzOFx4MzlceDNhXHgzYlx4M2NceDNkXHgzZVx4M2YiCiAgICAgICJceDQwXHg0MVx4NDJceDQzXHg0NFx4NDVceDQ2XHg0N1x4NDhceDQ5XHg0YVx4NGJceDRjXHg0ZFx4NGVceDRmIgogICAgICAiXHg1MFx4NTFceDUyXHg1M1x4NTRceDU1XHg1Nlx4NTdceDU4XHg1OVx4NWFceDViXHg1Y1x4NWRceDVlXHg1ZiIKICAgICAgIlx4NjBceDQxXHg0Mlx4NDNceDQ0XHg0NVx4NDZceDQ3XHg0OFx4NDlceDRhXHg0Ylx4NGNceDRkXHg0ZVx4NGYiCiAgICAgICJceDUwXHg1MVx4NTJceDUzXHg1NFx4NTVceDU2XHg1N1x4NThceDU5XHg1YVx4N2JceDdjXHg3ZFx4N2VceDdmIgogICAgICAiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4ZiIKICAgICAgIlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWYiCiAgICAgICJceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmIgogICAgICAiXHhiMFx4YjFceGIyXHhiM1x4YjRceDAwXHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZiIKICAgICAgIlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2YiCiAgICAgICJceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceDAwIgogICAgICAiXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZiIKICAgICAgIlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGY3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4MDAiOwoKICBTdHJpbmcgdG9Mb3dlckNhc2UoKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgZmluYWwgYyA9IHRoaXMuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGMgPT0gX0xDX1RBQkxFLmNvZGVVbml0QXQoYykpIGNvbnRpbnVlOwogICAgICAvLyBVcHBlci1jYXNlIGNoYXJhY3RlciBmb3VuZC4KICAgICAgZmluYWwgcmVzdWx0ID0gX2FsbG9jYXRlKHRoaXMubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBpOyBqKyspIHsKICAgICAgICByZXN1bHQuX3NldEF0KGosIHRoaXMuY29kZVVuaXRBdChqKSk7CiAgICAgIH0KICAgICAgZm9yIChpbnQgaiA9IGk7IGogPCB0aGlzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgcmVzdWx0Ll9zZXRBdChqLCBfTENfVEFCTEUuY29kZVVuaXRBdCh0aGlzLmNvZGVVbml0QXQoaikpKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBTdHJpbmcgdG9VcHBlckNhc2UoKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgZmluYWwgYyA9IHRoaXMuY29kZVVuaXRBdChpKTsKICAgICAgLy8gQ29udGludWUgbG9vcCBpZiBjaGFyYWN0ZXIgaXMgdW5jaGFuZ2VkIGJ5IHVwcGVyLWNhc2UgY29udmVyc2lvbi4KICAgICAgaWYgKGMgPT0gX1VDX1RBQkxFLmNvZGVVbml0QXQoYykpIGNvbnRpbnVlOwoKICAgICAgLy8gQ2hlY2sgcmVzdCBvZiBzdHJpbmcgZm9yIGNoYXJhY3RlcnMgdGhhdCBkbyBub3QgY29udmVydCB0bwogICAgICAvLyBzaW5nbGUtY2hhcmFjdGVycyBpbiB0aGUgTGF0aW4tMSByYW5nZS4KICAgICAgZm9yIChpbnQgaiA9IGk7IGogPCB0aGlzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgZmluYWwgYyA9IHRoaXMuY29kZVVuaXRBdChqKTsKICAgICAgICBpZiAoKF9VQ19UQUJMRS5jb2RlVW5pdEF0KGMpID09IDB4MDApICYmIChjICE9IDB4MDApKSB7CiAgICAgICAgICAvLyBXZSB1c2UgdGhlIDB4MDAgdmFsdWUgZm9yIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiB0aGUgbnVsbCBjaGFyYWN0ZXIsCiAgICAgICAgICAvLyB0aGF0IGRvbid0IGNvbnZlcnQgdG8gYSBzaW5nbGUgTGF0aW4tMSBjaGFyYWN0ZXIgd2hlbiB1cHBlci1jYXNlZC4KICAgICAgICAgIC8vIEluIHRoYXQgY2FzZSwgY2FsbCB0aGUgZ2VuZXJpYyBzdXBlci1jbGFzcyBtZXRob2QuCiAgICAgICAgICByZXR1cm4gc3VwZXIudG9VcHBlckNhc2UoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gU29tZSBsb3dlci1jYXNlIGNoYXJhY3RlcnMgZm91bmQsIGJ1dCBhbGwgdXBwZXItY2FzZSB0byBzaW5nbGUgTGF0aW4tMQogICAgICAvLyBjaGFyYWN0ZXJzLgogICAgICBmaW5hbCByZXN1bHQgPSBfYWxsb2NhdGUodGhpcy5sZW5ndGgpOwogICAgICBmb3IgKGludCBqID0gMDsgaiA8IGk7IGorKykgewogICAgICAgIHJlc3VsdC5fc2V0QXQoaiwgdGhpcy5jb2RlVW5pdEF0KGopKTsKICAgICAgfQogICAgICBmb3IgKGludCBqID0gaTsgaiA8IHRoaXMubGVuZ3RoOyBqKyspIHsKICAgICAgICByZXN1bHQuX3NldEF0KGosIF9VQ19UQUJMRS5jb2RlVW5pdEF0KHRoaXMuY29kZVVuaXRBdChqKSkpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8vIEFsbG9jYXRlcyBhIHN0cmluZyBvZiBnaXZlbiBsZW5ndGgsIGV4cGVjdGluZyBpdHMgY29udGVudCB0byBiZQogIC8vIHNldCB1c2luZyBfc2V0QXQuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfT25lQnl0ZVN0cmluZykKICBzdGF0aWMgX09uZUJ5dGVTdHJpbmcgX2FsbG9jYXRlKGludCBsZW5ndGgpIG5hdGl2ZSAiT25lQnl0ZVN0cmluZ19hbGxvY2F0ZSI7CgogIHN0YXRpYyBfT25lQnl0ZVN0cmluZyBfYWxsb2NhdGVGcm9tT25lQnl0ZUxpc3QoTGlzdDxpbnQ+IGxpc3QsIGludCBzdGFydCwKICAgICAgaW50IGVuZCkgbmF0aXZlICJPbmVCeXRlU3RyaW5nX2FsbG9jYXRlRnJvbU9uZUJ5dGVMaXN0IjsKCiAgLy8gVGhpcyBpcyBpbnRlcm5hbCBoZWxwZXIgbWV0aG9kLiBDb2RlIHBvaW50IHZhbHVlIG11c3QgYmUgYSB2YWxpZAogIC8vIExhdGluMSB2YWx1ZSAoMC4uMHhGRiksIGluZGV4IG11c3QgYmUgdmFsaWQuCiAgdm9pZCBfc2V0QXQoaW50IGluZGV4LCBpbnQgY29kZVBvaW50KSBuYXRpdmUgIk9uZUJ5dGVTdHJpbmdfc2V0QXQiOwoKICAvLyBTaG91bGQgYmUgb3B0aW1pemFibGUgdG8gYSBtZW1vcnkgbW92ZS4KICAvLyBBY2NlcHRzIGJvdGggX09uZUJ5dGVTdHJpbmcgYW5kIF9FeHRlcm5hbE9uZUJ5dGVTdHJpbmcgYXMgYXJndW1lbnQuCiAgLy8gUmV0dXJucyBpbmRleCBhZnRlciBsYXN0IGNoYXJhY3RlciB3cml0dGVuLgogIGludCBfc2V0UmFuZ2UoaW50IGluZGV4LCBTdHJpbmcgb25lQnl0ZVN0cmluZywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBhc3NlcnQob25lQnl0ZVN0cmluZy5faXNPbmVCeXRlKTsKICAgIGFzc2VydCgwIDw9IHN0YXJ0KTsKICAgIGFzc2VydChzdGFydCA8PSBlbmQpOwogICAgYXNzZXJ0KGVuZCA8PSBvbmVCeXRlU3RyaW5nLmxlbmd0aCk7CiAgICBhc3NlcnQoMCA8PSBpbmRleCk7CiAgICBhc3NlcnQoaW5kZXggKyAoZW5kIC0gc3RhcnQpIDw9IGxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICBfc2V0QXQoaW5kZXgsIG9uZUJ5dGVTdHJpbmcuY29kZVVuaXRBdChpKSk7CiAgICAgIGluZGV4ICs9IDE7CiAgICB9CiAgICByZXR1cm4gaW5kZXg7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9Ud29CeXRlU3RyaW5nIGV4dGVuZHMgX1N0cmluZ0Jhc2UgewogIGZhY3RvcnkgX1R3b0J5dGVTdHJpbmcuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIHN0YXRpYyBTdHJpbmcgX2FsbG9jYXRlRnJvbVR3b0J5dGVMaXN0KExpc3Q8aW50PiBsaXN0LCBpbnQgc3RhcnQsIGludCBlbmQpCiAgICAgIG5hdGl2ZSAiVHdvQnl0ZVN0cmluZ19hbGxvY2F0ZUZyb21Ud29CeXRlTGlzdCI7CgogIGJvb2wgX2lzV2hpdGVzcGFjZShpbnQgY29kZVVuaXQpIHsKICAgIHJldHVybiBfU3RyaW5nQmFzZS5faXNUd29CeXRlV2hpdGVzcGFjZShjb2RlVW5pdCk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IGNvZGVVbml0QXQoaW50IGluZGV4KSBuYXRpdmUgIlN0cmluZ19jb2RlVW5pdEF0IjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICByZXR1cm4gc3VwZXIgPT0gb3RoZXI7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbE9uZUJ5dGVTdHJpbmcgZXh0ZW5kcyBfU3RyaW5nQmFzZSB7CiAgZmFjdG9yeSBfRXh0ZXJuYWxPbmVCeXRlU3RyaW5nLl91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICBib29sIF9pc1doaXRlc3BhY2UoaW50IGNvZGVVbml0KSB7CiAgICByZXR1cm4gX1N0cmluZ0Jhc2UuX2lzT25lQnl0ZVdoaXRlc3BhY2UoY29kZVVuaXQpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBjb2RlVW5pdEF0KGludCBpbmRleCkgbmF0aXZlICJTdHJpbmdfY29kZVVuaXRBdCI7CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICByZXR1cm4gc3VwZXIgPT0gb3RoZXI7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbFR3b0J5dGVTdHJpbmcgZXh0ZW5kcyBfU3RyaW5nQmFzZSB7CiAgZmFjdG9yeSBfRXh0ZXJuYWxUd29CeXRlU3RyaW5nLl91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICBib29sIF9pc1doaXRlc3BhY2UoaW50IGNvZGVVbml0KSB7CiAgICByZXR1cm4gX1N0cmluZ0Jhc2UuX2lzVHdvQnl0ZVdoaXRlc3BhY2UoY29kZVVuaXQpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBjb2RlVW5pdEF0KGludCBpbmRleCkgbmF0aXZlICJTdHJpbmdfY29kZVVuaXRBdCI7CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICByZXR1cm4gc3VwZXIgPT0gb3RoZXI7CiAgfQp9CgpjbGFzcyBfU3RyaW5nTWF0Y2ggaW1wbGVtZW50cyBNYXRjaCB7CiAgY29uc3QgX1N0cmluZ01hdGNoKHRoaXMuc3RhcnQsIHRoaXMuaW5wdXQsIHRoaXMucGF0dGVybik7CgogIGludCBnZXQgZW5kID0+IHN0YXJ0ICsgcGF0dGVybi5sZW5ndGg7CiAgU3RyaW5nIG9wZXJhdG9yIFtdKGludCBnKSA9PiBncm91cChnKTsKICBpbnQgZ2V0IGdyb3VwQ291bnQgPT4gMDsKCiAgU3RyaW5nIGdyb3VwKGludCBncm91cCkgewogICAgaWYgKGdyb3VwICE9IDApIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IudmFsdWUoZ3JvdXApOwogICAgfQogICAgcmV0dXJuIHBhdHRlcm47CiAgfQoKICBMaXN0PFN0cmluZz4gZ3JvdXBzKExpc3Q8aW50PiBncm91cHMpIHsKICAgIExpc3Q8U3RyaW5nPiByZXN1bHQgPSBuZXcgTGlzdDxTdHJpbmc+KCk7CiAgICBmb3IgKGludCBnIGluIGdyb3VwcykgewogICAgICByZXN1bHQuYWRkKGdyb3VwKGcpKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBmaW5hbCBpbnQgc3RhcnQ7CiAgZmluYWwgU3RyaW5nIGlucHV0OwogIGZpbmFsIFN0cmluZyBwYXR0ZXJuOwp9CgpjbGFzcyBfU3RyaW5nQWxsTWF0Y2hlc0l0ZXJhYmxlIGV4dGVuZHMgSXRlcmFibGU8TWF0Y2g+IHsKICBmaW5hbCBTdHJpbmcgX2lucHV0OwogIGZpbmFsIFN0cmluZyBfcGF0dGVybjsKICBmaW5hbCBpbnQgX2luZGV4OwoKICBfU3RyaW5nQWxsTWF0Y2hlc0l0ZXJhYmxlKHRoaXMuX2lucHV0LCB0aGlzLl9wYXR0ZXJuLCB0aGlzLl9pbmRleCk7CgogIEl0ZXJhdG9yPE1hdGNoPiBnZXQgaXRlcmF0b3IgPT4KICAgICAgbmV3IF9TdHJpbmdBbGxNYXRjaGVzSXRlcmF0b3IoX2lucHV0LCBfcGF0dGVybiwgX2luZGV4KTsKCiAgTWF0Y2ggZ2V0IGZpcnN0IHsKICAgIGludCBpbmRleCA9IF9pbnB1dC5pbmRleE9mKF9wYXR0ZXJuLCBfaW5kZXgpOwogICAgaWYgKGluZGV4ID49IDApIHsKICAgICAgcmV0dXJuIG5ldyBfU3RyaW5nTWF0Y2goaW5kZXgsIF9pbnB1dCwgX3BhdHRlcm4pOwogICAgfQogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQp9CgpjbGFzcyBfU3RyaW5nQWxsTWF0Y2hlc0l0ZXJhdG9yIGltcGxlbWVudHMgSXRlcmF0b3I8TWF0Y2g+IHsKICBmaW5hbCBTdHJpbmcgX2lucHV0OwogIGZpbmFsIFN0cmluZyBfcGF0dGVybjsKICBpbnQgX2luZGV4OwogIE1hdGNoIF9jdXJyZW50OwoKICBfU3RyaW5nQWxsTWF0Y2hlc0l0ZXJhdG9yKHRoaXMuX2lucHV0LCB0aGlzLl9wYXR0ZXJuLCB0aGlzLl9pbmRleCk7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoX2luZGV4ICsgX3BhdHRlcm4ubGVuZ3RoID4gX2lucHV0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Ki4cHAYTBAETFhgCAToXGRQBRgEiPwEUMhY4BiwEAgE9FxkOEgFGARQ0FxQGMhUiFxQGJzo4HhIRBAEhAgEhZGFydDpjb3JlLXBhdGNoL3N0cmluZ19wYXRjaC5kYXJ0TW9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL19pbnRlcm5hbC92bS9saWIvdHlwZV9wYXRjaC5kYXJ0hJIvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgovLyBUaGVzZSBEYXJ0IGNsYXNzZXMgY29ycmVzcG9uZCB0byB0aGUgVk0gaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gY2xhc3Nlcy4KCi8vIEVxdWl2YWxlbnQgb2YgUmF3QWJzdHJhY3RUeXBlLgphYnN0cmFjdCBjbGFzcyBfQWJzdHJhY3RUeXBlIGltcGxlbWVudHMgVHlwZSB7CiAgU3RyaW5nIHRvU3RyaW5nKCkgbmF0aXZlICJBYnN0cmFjdFR5cGVfdG9TdHJpbmciOwp9CgovLyBFcXVpdmFsZW50IG9mIFJhd1R5cGUuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1R5cGUgZXh0ZW5kcyBfQWJzdHJhY3RUeXBlIHsKICBmYWN0b3J5IF9UeXBlLl91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IGdldCBoYXNoQ29kZSBuYXRpdmUgIlR5cGVfZ2V0SGFzaENvZGUiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgbmF0aXZlICJUeXBlX2VxdWFsaXR5IjsKfQoKLy8gRXF1aXZhbGVudCBvZiBSYXdUeXBlUmVmLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9UeXBlUmVmIGV4dGVuZHMgX0Fic3RyYWN0VHlwZSB7CiAgZmFjdG9yeSBfVHlwZVJlZi5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KfQoKLy8gRXF1aXZhbGVudCBvZiBSYXdUeXBlUGFyYW1ldGVyLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9UeXBlUGFyYW1ldGVyIGV4dGVuZHMgX0Fic3RyYWN0VHlwZSB7CiAgZmFjdG9yeSBfVHlwZVBhcmFtZXRlci5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KfQouAE5OPAEPAR4BTAEiLzQCARoaJCQZBAE0LgEoMgIBHRonJxkEAgEjGi0tGQQCAR9kYXJ0OmNvcmUtcGF0Y2gvdHlwZV9wYXRjaC5kYXJ0UG9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL19pbnRlcm5hbC92bS9saWIvd2Vha19wcm9wZXJ0eS5kYXJ0gqAvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9XZWFrUHJvcGVydHkgewogIGZhY3RvcnkgX1dlYWtQcm9wZXJ0eShrZXksIHZhbHVlKSA9PiBfbmV3KGtleSwgdmFsdWUpOwoKICBnZXQga2V5ID0+IF9nZXRLZXkoKTsKICBnZXQgdmFsdWUgPT4gX2dldFZhbHVlKCk7CiAgc2V0IHZhbHVlKHZhbHVlKSA9PiBfc2V0VmFsdWUodmFsdWUpOwoKICBzdGF0aWMgX1dlYWtQcm9wZXJ0eSBfbmV3KGtleSwgdmFsdWUpIG5hdGl2ZSAiV2Vha1Byb3BlcnR5X25ldyI7CgogIF9nZXRLZXkoKSBuYXRpdmUgIldlYWtQcm9wZXJ0eV9nZXRLZXkiOwogIF9nZXRWYWx1ZSgpIG5hdGl2ZSAiV2Vha1Byb3BlcnR5X2dldFZhbHVlIjsKICBfc2V0VmFsdWUodmFsdWUpIG5hdGl2ZSAiV2Vha1Byb3BlcnR5X3NldFZhbHVlIjsKfQoYAE5OPAEPAR4BGhY5ARgcKAFDASouMwIBImRhcnQ6Y29yZS1wYXRjaC93ZWFrX3Byb3BlcnR5LmRhcnRCb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvY29yZS9hbm5vdGF0aW9ucy5kYXJ0o4MvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIFRoZSBhbm5vdGF0aW9uIGBARGVwcmVjYXRlZCgnbWlncmF0aW9uJylgIG1hcmtzIGEgZmVhdHVyZSBhcyBkZXByZWNhdGVkLgogKgogKiBUaGUgYW5ub3RhdGlvbiBbZGVwcmVjYXRlZF0gaXMgYSBzaG9ydGhhbmQgZm9yIGRlcHJlY2F0aW5nIHVudGlsCiAqIGFuIHVuc3BlY2lmaWVkICJuZXh0IHJlbGVhc2UiIHdpdGhvdXQgbWlncmF0aW9uIGluc3RydWN0aW9ucy4KICoKICogVGhlIGludGVudCBvZiB0aGUgYEBEZXByZWNhdGVkYCBhbm5vdGF0aW9uIGlzIHRvIGluZm9ybSB1c2VycyBvZiBhIGZlYXR1cmUKICogdGhhdCB0aGV5IHNob3VsZCBjaGFuZ2UgdGhlaXIgY29kZSwgZXZlbiBpZiBpdCBpcyBjdXJyZW50bHkgc3RpbGwgd29ya2luZwogKiBjb3JyZWN0bHkuCiAqCiAqIEEgZGVwcmVjYXRlZCBmZWF0dXJlIGlzIHNjaGVkdWxlZCB0byBiZSByZW1vdmVkIGF0IGEgbGF0ZXIgdGltZSwgcG9zc2libHkKICogc3BlY2lmaWVkIGluIFttZXNzYWdlXS4gQSBkZXByZWNhdGVkIGZlYXR1cmUgc2hvdWxkIG5vdCBiZSB1c2VkLCBjb2RlIHVzaW5nCiAqIGl0IHdpbGwgYnJlYWsgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLiBJZiBleGlzdGluZyBjb2RlIGlzIHVzaW5nIHRoZQogKiBmZWF0dXJlIGl0IHNob3VsZCBiZSByZXdyaXR0ZW4gdG8gbm90IHVzZSB0aGUgZGVwcmVjYXRlZCBmZWF0dXJlLgogKgogKiBBIGRlcHJlY2F0ZWQgZmVhdHVyZSBzaG91bGQgZG9jdW1lbnQgaG93IHRoZSBzYW1lIGVmZmVjdCBjYW4gYmUgYWNoaWV2ZWQgaW4KICogW21lc3NhZ2VdLCBzbyB0aGUgcHJvZ3JhbW1lciBrbm93cyBob3cgdG8gcmV3cml0ZSB0aGUgY29kZS4KICoKICogVGhlIGBARGVwcmVjYXRlZGAgYW5ub3RhdGlvbiBhcHBsaWVzIHRvIGxpYnJhcmllcywgdG9wLWxldmVsIGRlY2xhcmF0aW9ucwogKiAodmFyaWFibGVzLCBnZXR0ZXJzLCBzZXR0ZXJzLCBmdW5jdGlvbnMsIGNsYXNzZXMgYW5kIHR5cGVkZWZzKSwKICogY2xhc3MtbGV2ZWwgZGVjbGFyYXRpb25zICh2YXJpYWJsZXMsIGdldHRlcnMsIHNldHRlcnMsIG1ldGhvZHMsIG9wZXJhdG9ycyBvcgogKiBjb25zdHJ1Y3RvcnMsIHdoZXRoZXIgc3RhdGljIG9yIG5vdCksIG5hbWVkIG9wdGlvbmFsIGFyZ3VtZW50cyBhbmQKICogdHJhaWxpbmcgb3B0aW9uYWwgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLgogKgogKiBEZXByZWNhdGlvbiBpcyB0cmFuc2l0aXZlOgogKgogKiAgLSBJZiBhIGxpYnJhcnkgaXMgZGVwcmVjYXRlZCwgc28gaXMgZXZlcnkgbWVtYmVyIG9mIGl0LgogKiAgLSBJZiBhIGNsYXNzIGlzIGRlcHJlY2F0ZWQsIHNvIGlzIGV2ZXJ5IG1lbWJlciBvZiBpdC4KICogIC0gSWYgYSB2YXJpYWJsZSBpcyBkZXByZWNhdGVkLCBzbyBhcmUgaXRzIGltcGxpY2l0IGdldHRlciBhbmQgc2V0dGVyLgogKgogKgogKiBBIHRvb2wgdGhhdCBwcm9jZXNzZXMgRGFydCBzb3VyY2UgY29kZSBtYXkgcmVwb3J0IHdoZW46CiAqCiAqIC0gdGhlIGNvZGUgaW1wb3J0cyBhIGRlcHJlY2F0ZWQgbGlicmFyeS4KICogLSB0aGUgY29kZSBleHBvcnRzIGEgZGVwcmVjYXRlZCBsaWJyYXJ5LCBvciBhbnkgZGVwcmVjYXRlZCBtZW1iZXIgb2YKICogIMKgYSBub24tZGVwcmVjYXRlZCBsaWJyYXJ5LgogKiAtIHRoZSBjb2RlIHJlZmVycyBzdGF0aWNhbGx5IHRvIGEgZGVwcmVjYXRlZCBkZWNsYXJhdGlvbi4KICogLSB0aGUgY29kZSBkeW5hbWljYWxseSB1c2VzIGEgbWVtYmVyIG9mIGFuIG9iamVjdCB3aXRoIGEgc3RhdGljYWxseSBrbm93bgogKiAgIHR5cGUsIHdoZXJlIHRoZSBtZW1iZXIgaXMgZGVwcmVjYXRlZCBvbiB0aGUgc3RhdGljIHR5cGUgb2YgdGhlIG9iamVjdC4KICogLSB0aGUgY29kZSBkeW5hbWljYWxseSBjYWxscyBhIG1ldGhvZCB3aXRoIGFuIGFyZ3VtZW50IHdoZXJlIHRoZQogKiAgIGNvcnJlc3BvbmRpbmcgb3B0aW9uYWwgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgb24gdGhlIG9iamVjdCdzIHN0YXRpYyB0eXBlLgogKgogKgogKiBJZiB0aGUgZGVwcmVjYXRlZCB1c2UgaXMgaW5zaWRlIGEgbGlicmFyeSwgY2xhc3Mgb3IgbWV0aG9kIHdoaWNoIGlzIGl0c2VsZgogKiBkZXByZWNhdGVkLCB0aGUgdG9vbCBzaG91bGQgbm90IGJvdGhlciB0aGUgdXNlciBhYm91dCBpdC4KICogQSBkZXByZWNhdGVkIGZlYXR1cmUgaXMgZXhwZWN0ZWQgdG8gdXNlIG90aGVyIGRlcHJlY2F0ZWQgZmVhdHVyZXMuCiAqLwpjbGFzcyBEZXByZWNhdGVkIHsKICAvKioKICAgKiBNZXNzYWdlIHByb3ZpZGVkIHRvIHRoZSB1c2VyIHdoZW4gdGhleSB1c2UgdGhlIGRlcHJlY2F0ZWQgZmVhdHVyZS4KICAgKgogICAqIFRoZSBtZXNzYWdlIHNob3VsZCBleHBsYWluIGhvdyB0byBtaWdyYXRlIGF3YXkgZnJvbSB0aGUgZmVhdHVyZSBpZiBhbgogICAqIGFsdGVybmF0aXZlIGlzIGF2YWlsYWJsZSwgYW5kIHdoZW4gdGhlIGRlcHJlY2F0ZWQgZmVhdHVyZSBpcyBleHBlY3RlZCB0byBiZQogICAqIHJlbW92ZWQuCiAgICovCiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CgogIC8qKgogICAqIENyZWF0ZSBhIGRlcHJlY2F0aW9uIGFubm90YXRpb24gd2hpY2ggc3BlY2lmaWVzIHRoZSBtaWdyYXRpb24gcGF0aCBhbmQKICAgKiBleHBpcmF0aW9uIG9mIHRoZSBhbm5vdGF0ZWQgZmVhdHVyZS4KICAgKgogICAqIFRoZSBbbWVzc2FnZV0gYXJndW1lbnQgc2hvdWxkIGJlIHJlYWRhYmxlIGJ5IHByb2dyYW1tZXJzLCBhbmQgc2hvdWxkIHN0YXRlCiAgICogYW4gYWx0ZXJuYXRpdmUgZmVhdHVyZSAoaWYgYXZhaWxhYmxlKSBhcyB3ZWxsIGFzIHdoZW4gYW4gYW5ub3RhdGVkIGZlYXR1cmUKICAgKiBpcyBleHBlY3RlZCB0byBiZSByZW1vdmVkLgogICAqLwogIGNvbnN0IERlcHJlY2F0ZWQodGhpcy5tZXNzYWdlKTsKCiAgQERlcHJlY2F0ZWQoJ1VzZSBgbWVzc2FnZWAgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIGluIERhcnQgMy4wLjAnKQogIFN0cmluZyBnZXQgZXhwaXJlcyA9PiBtZXNzYWdlOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiRGVwcmVjYXRlZCBmZWF0dXJlOiAkbWVzc2FnZSI7Cn0KCi8qKgogKiBNYXJrcyBhIGZlYXR1cmUgYXMgW0RlcHJlY2F0ZWRdIHVudGlsIHRoZSBuZXh0IHJlbGVhc2UuCiAqLwpjb25zdCBEZXByZWNhdGVkIGRlcHJlY2F0ZWQgPSBEZXByZWNhdGVkKCJuZXh0IHJlbGVhc2UiKTsKCmNsYXNzIF9PdmVycmlkZSB7CiAgY29uc3QgX092ZXJyaWRlKCk7Cn0KCi8qKgogKiBUaGUgYW5ub3RhdGlvbiBgQG92ZXJyaWRlYCBtYXJrcyBhbiBpbnN0YW5jZSBtZW1iZXIgYXMgb3ZlcnJpZGluZyBhCiAqIHN1cGVyY2xhc3MgbWVtYmVyIHdpdGggdGhlIHNhbWUgbmFtZS4KICoKICogVGhlIGFubm90YXRpb24gYXBwbGllcyB0byBpbnN0YW5jZSBtZXRob2RzLCBnZXR0ZXJzIGFuZCBzZXR0ZXJzLCBhbmQgdG8KICogaW5zdGFuY2UgZmllbGRzLCB3aGVyZSBpdCBtZWFucyB0aGF0IHRoZSBpbXBsaWNpdCBnZXR0ZXIgYW5kIHNldHRlciBvZiB0aGUKICogZmllbGQgaXMgbWFya2VkIGFzIG92ZXJyaWRpbmcsIGJ1dCB0aGUgZmllbGQgaXRzZWxmIGlzIG5vdC4KICoKICogVGhlIGludGVudCBvZiB0aGUgYEBvdmVycmlkZWAgbm90YXRpb24gaXMgdG8gY2F0Y2ggc2l0dWF0aW9ucyB3aGVyZSBhCiAqIHN1cGVyY2xhc3MgcmVuYW1lcyBhIG1lbWJlciwgYW5kIGFuIGluZGVwZW5kZW50IHN1YmNsYXNzIHdoaWNoIHVzZWQgdG8KICogb3ZlcnJpZGUgdGhlIG1lbWJlciwgY291bGQgc2lsZW50bHkgY29udGludWUgd29ya2luZyB1c2luZyB0aGUKICogc3VwZXJjbGFzcyBpbXBsZW1lbnRhdGlvbi4KICoKICogVGhlIGVkaXRvciwgb3IgYSBzaW1pbGFyIHRvb2wgYWltZWQgYXQgdGhlIHByb2dyYW1tZXIsIG1heSByZXBvcnQgaWYgbm8KICogZGVjbGFyYXRpb24gb2YgYW4gYW5ub3RhdGVkIG1lbWJlciBpcyBpbmhlcml0ZWQgYnkgdGhlIGNsYXNzIGZyb20gZWl0aGVyIGEKICogc3VwZXJjbGFzcyBvciBhbiBpbnRlcmZhY2UuCiAqCiAqIFVzZSB0aGUgYEBvdmVycmlkZWAgYW5ub3RhdGlvbiBqdWRpY2lvdXNseSBhbmQgb25seSBmb3IgbWV0aG9kcyB3aGVyZQogKiB0aGUgc3VwZXJjbGFzcyBpcyBub3QgdW5kZXIgdGhlIHByb2dyYW1tZXIncyBjb250cm9sLCB0aGUgc3VwZXJjbGFzcyBpcyBpbiBhCiAqIGRpZmZlcmVudCBsaWJyYXJ5IG9yIHBhY2thZ2UsIGFuZCBpdCBpcyBub3QgY29uc2lkZXJlZCBzdGFibGUuCiAqIEluIGFueSBjYXNlLCB0aGUgdXNlIG9mIGBAb3ZlcnJpZGVgIGlzIG9wdGlvbmFsLgogKgogKiBGb3IgZXhhbXBsZSwgdGhlIGFubm90YXRpb24gaXMgaW50ZW50aW9uYWxseSBub3QgdXNlZCBpbiB0aGUgRGFydCBwbGF0Zm9ybQogKiBsaWJyYXJpZXMsIHNpbmNlIHRoZXkgb25seSBkZXBlbmQgb24gdGhlbXNlbHZlcy4KICovCmNvbnN0IE9iamVjdCBvdmVycmlkZSA9IF9PdmVycmlkZSgpOwoKLyoqCiAqIEFuIGFubm90YXRpb24gY2xhc3MgdGhhdCB3YXMgdXNlZCBkdXJpbmcgZGV2ZWxvcG1lbnQgb2YgRGFydCAyLgogKgogKiBTaG91bGQgbm90IGJlIHVzZWQgYW55IG1vcmUuCiAqLwpAZGVwcmVjYXRlZApjbGFzcyBQcm92aXNpb25hbCB7CiAgU3RyaW5nIGdldCBtZXNzYWdlID0+IG51bGw7CiAgY29uc3QgUHJvdmlzaW9uYWwoe1N0cmluZyBtZXNzYWdlfSk7Cn0KCi8qKgogKiBBbiBhbm5vdGF0aW9uIHRoYXQgd2FzIHVzZWQgZHVyaW5nIGRldmVsb3BtZW50IG9mIERhcnQgMi4KICoKICogU2hvdWxkIG5vdCBiZSB1c2VkIGFueSBtb3JlLgogKi8KQGRlcHJlY2F0ZWQKY29uc3QgTnVsbCBwcm92aXNpb25hbCA9IG51bGw7CgpjbGFzcyBfUHJveHkgewogIGNvbnN0IF9Qcm94eSgpOwp9CgovKioKICogVGhpcyBhbm5vdGF0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBEYXJ0IDIuCiAqCiAqIERhcnQgMiBoYXMgYSBtb3JlIHJlc3RyaWN0aXZlIHR5cGUgc3lzdGVtIHRoYW4gRGFydCAxLCBhbmQgaXQgcmVxdWlyZXMKICogbWV0aG9kIGFjY2VzcyB0byBiZSBlaXRoZXIgdGhyb3VnaCBhIGtub3duIGludGVyZmFjZSBvciBieSB1c2luZwogKiBkeW5hbWljIGludm9jYXRpb25zLiBUaGUgb3JpZ2luYWwgaW50ZW50IG9mIGBAcHJveHlgICh0byBpbXBsZW1lbnQgYSBjbGFzcwogKiB0aGF0IGlzbid0IGtub3duIHN0YXRpY2FsbHksIGFzIGRvY3VtZW50ZWQgYXQgdGhlIGVuZCBvZiB0aGlzIHRleHQpLAogKiBpcyBub3Qgc3VwcG9ydGVkIGJ5IERhcnQgMi4KICogVG8gY29udGludWUgdG8gcGVyZm9ybSBkeW5hbWljIGludm9jYXRpb25zIG9uIGFuIG9iamVjdCwKICogaXQgc2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggYSByZWZlcmVuY2Ugb2YgdHlwZSBgZHluYW1pY2AuCiAqCiAqIFRoZSBhbm5vdGF0aW9uIGBAcHJveHlgIG1hcmtzIGEgY2xhc3MgYXMgaW1wbGVtZW50aW5nIG1lbWJlcnMgZHluYW1pY2FsbHkKICogdGhyb3VnaCBgbm9TdWNoTWV0aG9kYC4KICoKICogVGhlIGFubm90YXRpb24gYXBwbGllcyB0byBhbnkgY2xhc3MuIEl0IGlzIGluaGVyaXRlZCBieSBzdWJjbGFzc2VzIGZyb20gYm90aAogKiBzdXBlcmNsYXNzIGFuZCBpbnRlcmZhY2VzLgogKgogKiBJZiBhIGNsYXNzIGlzIGFubm90YXRlZCB3aXRoIGBAcHJveHlgLCBvciBpdCBpbXBsZW1lbnRzIGFueSBjbGFzcyB0aGF0IGlzCiAqIGFubm90YXRlZCwgdGhlbiBhbGwgbWVtYmVyIGFjY2Vzc2VzIGFyZSBhbGxvd2VkIG9uIGFuIG9iamVjdCBvZiB0aGF0IHR5cGUuCiAqIEFzIHN1Y2gsIGl0IGlzIG5vdCBhIHN0YXRpYyB0eXBlIHdhcm5pbmcgdG8gYWNjZXNzIGFueSBtZW1iZXIgb2YgdGhlIG9iamVjdAogKiB3aGljaCBpcyBub3QgaW1wbGVtZW50ZWQgYnkgdGhlIGNsYXNzLCBvciB0byBjYWxsIGEgbWV0aG9kIHdpdGggYSBkaWZmZXJlbnQKICogbnVtYmVyIG9mIHBhcmFtZXRlcnMgdGhhbiBpdCBpcyBkZWNsYXJlZCB3aXRoLgogKgogKiBUaGUgYW5ub3RhdGlvbiBkb2VzIG5vdCBjaGFuZ2Ugd2hpY2ggY2xhc3NlcyB0aGUgYW5ub3RhdGVkIGNsYXNzIGltcGxlbWVudHMsCiAqIGFuZCBkb2VzIG5vdCBwcmV2ZW50IHN0YXRpYyB3YXJuaW5ncyBmb3IgYXNzaWduaW5nIGFuIG9iamVjdCB0byBhIHZhcmlhYmxlCiAqIHdpdGggYSBzdGF0aWMgdHlwZSBub3QgaW1wbGVtZW50ZWQgYnkgdGhlIG9iamVjdC4KICoKICogVGhlIHN1cHByZXNzaW9uIG9mIHdhcm5pbmdzIG9ubHkgYWZmZWN0IHN0YXRpYyB0eXBlIHdhcm5pbmdzIGFib3V0CiAqIG1lbWJlciBhY2Nlc3MuCiAqIFRoZSBydW50aW1lIHR5cGUgb2YgdGhlIG9iamVjdCBpcyB1bmFmZmVjdGVkLgogKiBJdCBpcyBub3QgY29uc2lkZXJlZCB0byBpbXBsZW1lbnQgYW55IHNwZWNpYWwgaW50ZXJmYWNlcywKICogc28gYXNzaWduaW5nIGl0IHRvIGEgdHlwZWQgdmFyaWFibGUgbWF5IGZhaWwgaW4gY2hlY2tlZCBtb2RlLAogKiBhbmQgdGVzdGluZyBpdCB3aXRoIHRoZSBgaXNgIG9wZXJhdG9yCiAqIHdpbGwgb25seSByZXR1cm4gdHJ1ZSBmb3IgdHlwZXMgaXQgYWN0dWFsbHkgaW1wbGVtZW50cyBvciBleHRlbmRzLgogKiBBY2Nlc3NpbmcgYSBtZW1iZXIgd2hpY2ggaXNuJ3QgaW1wbGVtZW50ZWQgYnkgdGhlIGNsYXNzCiAqIHdpbGwgY2F1c2UgdGhlIGBub1N1Y2hNZXRob2RgIG1ldGhvZCB0byBiZSBjYWxsZWQgbm9ybWFsbHksCiAqIHRoZSBgQHByb3h5YCBhbm5vdGF0aW9uIG1lcmVseSBzdGF0ZXMgdGhlIGludGVudCB0byBoYW5kbGUgKHNvbWUgb2YpIHRob3NlCiAqIGBub1N1Y2hNZXRob2RgIGNhbGxzIGdyYWNlZnVsbHkuCiAqCiAqIEEgY2xhc3MgdGhhdCBtYXJrZWQgYXMgYEBwcm94eWAgc2hvdWxkIG92ZXJyaWRlIHRoZSBgbm9TdWNoTWV0aG9kYAogKiBkZWNsYXJlZCBvbiBbT2JqZWN0XS4KICoKICogVGhlIGludGVudCBvZiB0aGUgYEBwcm94eWAgbm90YXRpb24gaXMgdG8gY3JlYXRlIG9iamVjdHMgdGhhdCBpbXBsZW1lbnQgYQogKiB0eXBlIChvciBtdWx0aXBsZSB0eXBlcykgdGhhdCBhcmUgbm90IGtub3duIGF0IGNvbXBpbGUgdGltZS4gSWYgdGhlIHR5cGVzCiAqIGFyZSBrbm93biBhdCBjb21waWxlIHRpbWUsIGEgY2xhc3MgY2FuIGJlIHdyaXR0ZW4gdGhhdCBpbXBsZW1lbnRzIHRoZXNlCiAqIHR5cGVzLgogKi8KQGRlcHJlY2F0ZWQKY29uc3QgT2JqZWN0IHByb3h5ID0gX1Byb3h5KCk7CgovKioKICogQSBoaW50IHRvIHRvb2xzLgogKgogKiBUb29scyB0aGF0IHdvcmsgd2l0aCBEYXJ0IHByb2dyYW1zIG1heSBhY2NlcHQgaGludHMgdG8gZ3VpZGUgdGhlaXIgYmVoYXZpb3IKICogYXMgYHByYWdtYWAgYW5ub3RhdGlvbnMgb24gZGVjbGFyYXRpb25zLgogKiBFYWNoIHRvb2wgZGVjaWRlcyB3aGljaCBoaW50cyBpdCBhY2NlcHRzLCB3aGF0IHRoZXkgbWVhbiwgYW5kIHdoZXRoZXIgYW5kCiAqIGhvdyB0aGV5IGFwcGx5IHRvIHN1Yi1wYXJ0cyBvZiB0aGUgYW5ub3RhdGVkIGVudGl0eS4KICoKICogVG9vbHMgdGhhdCByZWNvZ25pemUgcHJhZ21hIGhpbnRzIHNob3VsZCBwaWNrIGEgcHJhZ21hIHByZWZpeCB0byBpZGVudGlmeQogKiB0aGUgdG9vbC4gVGhleSBzaG91bGQgcmVjb2duaXplIGFueSBoaW50IHdpdGggYSBbbmFtZV0gc3RhcnRpbmcgd2l0aCB0aGVpcgogKiBwcmVmaXggZm9sbG93ZWQgYnkgYDpgIGFzIGlmIGl0IHdhcyBpbnRlbmRlZCBmb3IgdGhhdCB0b29sLiBBIGhpbnQgd2l0aCBhCiAqIHByZWZpeCBmb3IgYW5vdGhlciB0b29sIHNob3VsZCBiZSBpZ25vcmVkICh1bmxlc3MgY29tcGF0aWJpbGl0eSB3aXRoIHRoYXQKICogb3RoZXIgdG9vbCBpcyBhIGdvYWwpLgogKgogKiBBIHRvb2wgbWF5IHJlY29nbml6ZSB1bnByZWZpeGVkIG5hbWVzIGFzIHdlbGwsIGlmIHRoZXkgd291bGQgcmVjb2duaXplIHRoYXQKICogbmFtZSB3aXRoIHRoZWlyIG93biBwcmVmaXggaW4gZnJvbnQuCiAqCiAqIElmIHRoZSBoaW50IGNhbiBiZSBwYXJhbWV0ZXJpemVkLCBhbiBleHRyYSBbb3B0aW9uc10gb2JqZWN0IGNhbiBiZSBhZGRlZCBhcyB3ZWxsLgogKgogKiBGb3IgZXhhbXBsZToKICoKICogYGBgZGFydAogKiBAcHJhZ21hKCdUb29sOnByYWdtYS1uYW1lJywgW3BhcmFtMSwgcGFyYW0yLCAuLi5dKQogKiBjbGFzcyBGb28geyB9CiAqCiAqIEBwcmFnbWEoJ090aGVyVG9vbDpvdGhlci1wcmFnbWEnKQogKiB2b2lkIGZvbygpIHsgfQogKiBgYGAKICoKICogSGVyZSBjbGFzcyBGb28gaXMgYW5ub3RhdGVkIHdpdGggYSBUb29sIHNwZWNpZmljIHByYWdtYSAncHJhZ21hLW5hbWUnIGFuZAogKiBmdW5jdGlvbiBmb28gaXMgYW5ub3RhdGVkIHdpdGggYSBwcmFnbWEgJ290aGVyLXByYWdtYScgc3BlY2lmaWMgdG8gT3RoZXJUb29sLgogKgogKi8KQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQpjbGFzcyBwcmFnbWEgewogIC8qKgogICAqIFRoZSBuYW1lIG9mIHRoZSBoaW50LgogICAqCiAgICogQSBzdHJpbmcgdGhhdCBpcyByZWNvZ25pemVkIGJ5IG9uZSBvciBtb3JlIHRvb2xzLCBvciBzdWNoIGEgc3RyaW5nIHByZWZpeGVkCiAgICogYnkgYSB0b29sIGlkZW50aWZpZXIgYW5kIGEgY29sb24sIHdoaWNoIGlzIG9ubHkgcmVjb2duaXplZCBieSB0aGF0CiAgICogcGFydGljdWxhciB0b29sLgogICAqLwogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvKiogT3B0aW9uYWwgZXh0cmEgZGF0YSBwYXJhbWV0ZXJpemluZyB0aGUgaGludC4gKi8KICBmaW5hbCBPYmplY3Qgb3B0aW9uczsKCiAgLyoqIENyZWF0ZXMgYSBoaW50IG5hbWVkIFtuYW1lXSB3aXRoIG9wdGlvbmFsIFtvcHRpb25zXS4gKi8KICBjb25zdCBmYWN0b3J5IHByYWdtYShTdHJpbmcgbmFtZSwgW09iamVjdCBvcHRpb25zXSkgPSBwcmFnbWEuXzsKCiAgY29uc3QgcHJhZ21hLl8odGhpcy5uYW1lLCBbdGhpcy5vcHRpb25zXSk7Cn0KgPQATk48AQ8BEwEETANEQQNOTQ4DTU9MRQNPPwNNQ1BGLAMeAzw6SgMDOwMsSB89TUxEUQMDTj1GBBMGSAVLUQ4GGAEGTCoFUFAgBiIBRiEBNwIBBDsEOgESFQIBBEcpA0tOPwNJSkIeA0tOHwNJUEI0A040BCUBBEMDIAQMFB4nAgEEPQMgBAwfAQ8SAgEEQANKRE5IHzxAA00bA1AeA01OT08yA1BONQNGEjE9QSlGOz9OJANGGQNNTUsKBAwfAQQUA08sTTgDTU5NTRoDTygDVQMQAws2EQMlEgcDTVEDBBoPBhsFUUgWBhUBNhgBPkIBLQIBGmRhcnQ6Y29yZS9hbm5vdGF0aW9ucy5kYXJ0PW9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2NvcmUvYmlnaW50LmRhcnSxpC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogQW4gYXJiaXRyYXJpbHkgbGFyZ2UgaW50ZWdlci4KICovCmFic3RyYWN0IGNsYXNzIEJpZ0ludCBpbXBsZW1lbnRzIENvbXBhcmFibGU8QmlnSW50PiB7CiAgZXh0ZXJuYWwgc3RhdGljIEJpZ0ludCBnZXQgemVybzsKICBleHRlcm5hbCBzdGF0aWMgQmlnSW50IGdldCBvbmU7CiAgZXh0ZXJuYWwgc3RhdGljIEJpZ0ludCBnZXQgdHdvOwoKICAvKioKICAgKiBQYXJzZXMgW3NvdXJjZV0gYXMgYSwgcG9zc2libHkgc2lnbmVkLCBpbnRlZ2VyIGxpdGVyYWwgYW5kIHJldHVybnMgaXRzCiAgICogdmFsdWUuCiAgICoKICAgKiBUaGUgW3NvdXJjZV0gbXVzdCBiZSBhIG5vbi1lbXB0eSBzZXF1ZW5jZSBvZiBiYXNlLVtyYWRpeF0gZGlnaXRzLAogICAqIG9wdGlvbmFsbHkgcHJlZml4ZWQgd2l0aCBhIG1pbnVzIG9yIHBsdXMgc2lnbiAoJy0nIG9yICcrJykuCiAgICoKICAgKiBUaGUgW3JhZGl4XSBtdXN0IGJlIGluIHRoZSByYW5nZSAyLi4zNi4gVGhlIGRpZ2l0cyB1c2VkIGFyZQogICAqIGZpcnN0IHRoZSBkZWNpbWFsIGRpZ2l0cyAwLi45LCBhbmQgdGhlbiB0aGUgbGV0dGVycyAnYScuLid6JyB3aXRoCiAgICogdmFsdWVzIDEwIHRocm91Z2ggMzUuIEFsc28gYWNjZXB0cyB1cHBlci1jYXNlIGxldHRlcnMgd2l0aCB0aGUgc2FtZQogICAqIHZhbHVlcyBhcyB0aGUgbG93ZXItY2FzZSBvbmVzLgogICAqCiAgICogSWYgbm8gW3JhZGl4XSBpcyBnaXZlbiB0aGVuIGl0IGRlZmF1bHRzIHRvIDEwLiBJbiB0aGlzIGNhc2UsIHRoZSBbc291cmNlXQogICAqIGRpZ2l0cyBtYXkgYWxzbyBzdGFydCB3aXRoIGAweGAsIGluIHdoaWNoIGNhc2UgdGhlIG51bWJlciBpcyBpbnRlcnByZXRlZAogICAqIGFzIGEgaGV4YWRlY2ltYWwgbGl0ZXJhbCwgd2hpY2ggZWZmZWN0aXZlbHkgbWVhbnMgdGhhdCB0aGUgYDB4YCBpcyBpZ25vcmVkCiAgICogYW5kIHRoZSByYWRpeCBpcyBpbnN0ZWFkIHNldCB0byAxNi4KICAgKgogICAqIEZvciBhbnkgaW50IGBuYCBhbmQgcmFkaXggYHJgLCBpdCBpcyBndWFyYW50ZWVkIHRoYXQKICAgKiBgbiA9PSBpbnQucGFyc2Uobi50b1JhZGl4U3RyaW5nKHIpLCByYWRpeDogcilgLgogICAqCiAgICogVGhyb3dzIGEgW0Zvcm1hdEV4Y2VwdGlvbl0gaWYgdGhlIFtzb3VyY2VdIGlzIG5vdCBhIHZhbGlkIGludGVnZXIgbGl0ZXJhbCwKICAgKiBvcHRpb25hbGx5IHByZWZpeGVkIGJ5IGEgc2lnbi4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgQmlnSW50IHBhcnNlKFN0cmluZyBzb3VyY2UsIHtpbnQgcmFkaXh9KTsKCiAgLyoqCiAgICogUGFyc2VzIFtzb3VyY2VdIGFzIGEsIHBvc3NpYmx5IHNpZ25lZCwgaW50ZWdlciBsaXRlcmFsIGFuZCByZXR1cm5zIGl0cwogICAqIHZhbHVlLgogICAqCiAgICogQXMgW3BhcnNlXSBleGNlcHQgdGhhdCB0aGlzIG1ldGhvZCByZXR1cm5zIGBudWxsYCBpZiB0aGUgaW5wdXQgaXMgbm90CiAgICogdmFsaWQKICAgKi8KICBleHRlcm5hbCBzdGF0aWMgQmlnSW50IHRyeVBhcnNlKFN0cmluZyBzb3VyY2UsIHtpbnQgcmFkaXh9KTsKCiAgLy8vIEFsbG9jYXRlcyBhIGJpZyBpbnRlZ2VyIGZyb20gdGhlIHByb3ZpZGVkIFt2YWx1ZV0gbnVtYmVyLgogIGV4dGVybmFsIGZhY3RvcnkgQmlnSW50LmZyb20obnVtIHZhbHVlKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhpcyBpbnRlZ2VyLgogICAqCiAgICogRm9yIGFueSBpbnRlZ2VyIGB4YCwgdGhlIHJlc3VsdCBpcyB0aGUgc2FtZSBhcyBgeCA8IDAgPyAteCA6IHhgLgogICAqLwogIEJpZ0ludCBhYnMoKTsKCiAgLyoqCiAgICogUmV0dXJuIHRoZSBuZWdhdGl2ZSB2YWx1ZSBvZiB0aGlzIGludGVnZXIuCiAgICoKICAgKiBUaGUgcmVzdWx0IG9mIG5lZ2F0aW5nIGFuIGludGVnZXIgYWx3YXlzIGhhcyB0aGUgb3Bwb3NpdGUgc2lnbiwgZXhjZXB0CiAgICogZm9yIHplcm8sIHdoaWNoIGlzIGl0cyBvd24gbmVnYXRpb24uCiAgICovCiAgQmlnSW50IG9wZXJhdG9yIC0oKTsKCiAgLy8vIEFkZGl0aW9uIG9wZXJhdG9yLgogIEJpZ0ludCBvcGVyYXRvciArKEJpZ0ludCBvdGhlcik7CgogIC8vLyBTdWJ0cmFjdGlvbiBvcGVyYXRvci4KICBCaWdJbnQgb3BlcmF0b3IgLShCaWdJbnQgb3RoZXIpOwoKICAvLy8gTXVsdGlwbGljYXRpb24gb3BlcmF0b3IuCiAgQmlnSW50IG9wZXJhdG9yICooQmlnSW50IG90aGVyKTsKCiAgLy8vIERpdmlzaW9uIG9wZXJhdG9yLgogIGRvdWJsZSBvcGVyYXRvciAvKEJpZ0ludCBvdGhlcik7CgogIC8qKgogICAqIFRydW5jYXRpbmcgZGl2aXNpb24gb3BlcmF0b3IuCiAgICoKICAgKiBQZXJmb3JtcyBhIHRydW5jYXRpbmcgaW50ZWdlciBkaXZpc2lvbiwgd2hlcmUgdGhlIHJlbWFpbmRlciBpcyBkaXNjYXJkZWQuCiAgICoKICAgKiBUaGUgcmVtYWluZGVyIGNhbiBiZSBjb21wdXRlZCB1c2luZyB0aGUgW3JlbWFpbmRlcl0gbWV0aG9kLgogICAqCiAgICogRXhhbXBsZXM6CiAgICogYGBgCiAgICogdmFyIHNldmVuID0gbmV3IEJpZ0ludC5mcm9tKDcpOwogICAqIHZhciB0aHJlZSA9IG5ldyBCaWdJbnQuZnJvbSgzKTsKICAgKiBzZXZlbiB+LyB0aHJlZTsgICAgLy8gPT4gMgogICAqICgtc2V2ZW4pIH4vIHRocmVlOyAvLyA9PiAtMgogICAqIHNldmVuIH4vIC10aHJlZTsgICAvLyA9PiAtMgogICAqIHNldmVuLnJlbWFpbmRlcih0aHJlZSk7ICAgIC8vID0+IDEKICAgKiAoLXNldmVuKS5yZW1haW5kZXIodGhyZWUpOyAvLyA9PiAtMQogICAqIHNldmVuLnJlbWFpbmRlcigtdGhyZWUpOyAgIC8vID0+IDEKICAgKiBgYGAKICAgKi8KICBCaWdJbnQgb3BlcmF0b3Igfi8oQmlnSW50IG90aGVyKTsKCiAgLyoqCiAgICogRXVjbGlkZWFuIG1vZHVsbyBvcGVyYXRvci4KICAgKgogICAqIFJldHVybnMgdGhlIHJlbWFpbmRlciBvZiB0aGUgRXVjbGlkZWFuIGRpdmlzaW9uLiBUaGUgRXVjbGlkZWFuIGRpdmlzaW9uIG9mCiAgICogdHdvIGludGVnZXJzIGBhYCBhbmQgYGJgIHlpZWxkcyB0d28gaW50ZWdlcnMgYHFgIGFuZCBgcmAgc3VjaCB0aGF0CiAgICogYGEgPT0gYiAqIHEgKyByYCBhbmQgYDAgPD0gciA8IGIuYWJzKClgLgogICAqCiAgICogVGhlIHNpZ24gb2YgdGhlIHJldHVybmVkIHZhbHVlIGByYCBpcyBhbHdheXMgcG9zaXRpdmUuCiAgICoKICAgKiBTZWUgW3JlbWFpbmRlcl0gZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIHRydW5jYXRpbmcgZGl2aXNpb24uCiAgICovCiAgQmlnSW50IG9wZXJhdG9yICUoQmlnSW50IG90aGVyKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcmVtYWluZGVyIG9mIHRoZSB0cnVuY2F0aW5nIGRpdmlzaW9uIG9mIGB0aGlzYCBieSBbb3RoZXJdLgogICAqCiAgICogVGhlIHJlc3VsdCBgcmAgb2YgdGhpcyBvcGVyYXRpb24gc2F0aXNmaWVzOgogICAqIGB0aGlzID09ICh0aGlzIH4vIG90aGVyKSAqIG90aGVyICsgcmAuCiAgICogQXMgYSBjb25zZXF1ZW5jZSB0aGUgcmVtYWluZGVyIGByYCBoYXMgdGhlIHNhbWUgc2lnbiBhcyB0aGUgZGl2aWRlciBgdGhpc2AuCiAgICovCiAgQmlnSW50IHJlbWFpbmRlcihCaWdJbnQgb3RoZXIpOwoKICAvKioKICAgKiBTaGlmdCB0aGUgYml0cyBvZiB0aGlzIGludGVnZXIgdG8gdGhlIGxlZnQgYnkgW3NoaWZ0QW1vdW50XS4KICAgKgogICAqIFNoaWZ0aW5nIHRvIHRoZSBsZWZ0IG1ha2VzIHRoZSBudW1iZXIgbGFyZ2VyLCBlZmZlY3RpdmVseSBtdWx0aXBseWluZwogICAqIHRoZSBudW1iZXIgYnkgYHBvdygyLCBzaGlmdEluZGV4KWAuCiAgICoKICAgKiBUaGVyZSBpcyBubyBsaW1pdCBvbiB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0LiBJdCBtYXkgYmUgcmVsZXZhbnQgdG8KICAgKiBsaW1pdCBpbnRlcm1lZGlhdGUgdmFsdWVzIGJ5IHVzaW5nIHRoZSAiYW5kIiBvcGVyYXRvciB3aXRoIGEgc3VpdGFibGUKICAgKiBtYXNrLgogICAqCiAgICogSXQgaXMgYW4gZXJyb3IgaWYgW3NoaWZ0QW1vdW50XSBpcyBuZWdhdGl2ZS4KICAgKi8KICBCaWdJbnQgb3BlcmF0b3IgPDwoaW50IHNoaWZ0QW1vdW50KTsKCiAgLyoqCiAgICogU2hpZnQgdGhlIGJpdHMgb2YgdGhpcyBpbnRlZ2VyIHRvIHRoZSByaWdodCBieSBbc2hpZnRBbW91bnRdLgogICAqCiAgICogU2hpZnRpbmcgdG8gdGhlIHJpZ2h0IG1ha2VzIHRoZSBudW1iZXIgc21hbGxlciBhbmQgZHJvcHMgdGhlIGxlYXN0CiAgICogc2lnbmlmaWNhbnQgYml0cywgZWZmZWN0aXZlbHkgZG9pbmcgYW4gaW50ZWdlciBkaXZpc2lvbiBieQogICAqYHBvdygyLCBzaGlmdEluZGV4KWAuCiAgICoKICAgKiBJdCBpcyBhbiBlcnJvciBpZiBbc2hpZnRBbW91bnRdIGlzIG5lZ2F0aXZlLgogICAqLwogIEJpZ0ludCBvcGVyYXRvciA+PihpbnQgc2hpZnRBbW91bnQpOwoKICAvKioKICAgKiBCaXQtd2lzZSBhbmQgb3BlcmF0b3IuCiAgICoKICAgKiBUcmVhdGluZyBib3RoIGB0aGlzYCBhbmQgW290aGVyXSBhcyBzdWZmaWNpZW50bHkgbGFyZ2UgdHdvJ3MgY29tcG9uZW50CiAgICogaW50ZWdlcnMsIHRoZSByZXN1bHQgaXMgYSBudW1iZXIgd2l0aCBvbmx5IHRoZSBiaXRzIHNldCB0aGF0IGFyZSBzZXQgaW4KICAgKiBib3RoIGB0aGlzYCBhbmQgW290aGVyXQogICAqCiAgICogT2YgYm90aCBvcGVyYW5kcyBhcmUgbmVnYXRpdmUsIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIG90aGVyd2lzZQogICAqIHRoZSByZXN1bHQgaXMgbm9uLW5lZ2F0aXZlLgogICAqLwogIEJpZ0ludCBvcGVyYXRvciAmKEJpZ0ludCBvdGhlcik7CgogIC8qKgogICAqIEJpdC13aXNlIG9yIG9wZXJhdG9yLgogICAqCiAgICogVHJlYXRpbmcgYm90aCBgdGhpc2AgYW5kIFtvdGhlcl0gYXMgc3VmZmljaWVudGx5IGxhcmdlIHR3bydzIGNvbXBvbmVudAogICAqIGludGVnZXJzLCB0aGUgcmVzdWx0IGlzIGEgbnVtYmVyIHdpdGggdGhlIGJpdHMgc2V0IHRoYXQgYXJlIHNldCBpbiBlaXRoZXIKICAgKiBvZiBgdGhpc2AgYW5kIFtvdGhlcl0KICAgKgogICAqIElmIGJvdGggb3BlcmFuZHMgYXJlIG5vbi1uZWdhdGl2ZSwgdGhlIHJlc3VsdCBpcyBub24tbmVnYXRpdmUsCiAgICogb3RoZXJ3aXNlIHRoZSByZXN1bHQgdXMgbmVnYXRpdmUuCiAgICovCiAgQmlnSW50IG9wZXJhdG9yIHwoQmlnSW50IG90aGVyKTsKCiAgLyoqCiAgICogQml0LXdpc2UgZXhjbHVzaXZlLW9yIG9wZXJhdG9yLgogICAqCiAgICogVHJlYXRpbmcgYm90aCBgdGhpc2AgYW5kIFtvdGhlcl0gYXMgc3VmZmljaWVudGx5IGxhcmdlIHR3bydzIGNvbXBvbmVudAogICAqIGludGVnZXJzLCB0aGUgcmVzdWx0IGlzIGEgbnVtYmVyIHdpdGggdGhlIGJpdHMgc2V0IHRoYXQgYXJlIHNldCBpbiBvbmUsCiAgICogYnV0IG5vdCBib3RoLCBvZiBgdGhpc2AgYW5kIFtvdGhlcl0KICAgKgogICAqIElmIHRoZSBvcGVyYW5kcyBoYXZlIHRoZSBzYW1lIHNpZ24sIHRoZSByZXN1bHQgaXMgbm9uLW5lZ2F0aXZlLAogICAqIG90aGVyd2lzZSB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLgogICAqLwogIEJpZ0ludCBvcGVyYXRvciBeKEJpZ0ludCBvdGhlcik7CgogIC8qKgogICAqIFRoZSBiaXQtd2lzZSBuZWdhdGUgb3BlcmF0b3IuCiAgICoKICAgKiBUcmVhdGluZyBgdGhpc2AgYXMgYSBzdWZmaWNpZW50bHkgbGFyZ2UgdHdvJ3MgY29tcG9uZW50IGludGVnZXIsCiAgICogdGhlIHJlc3VsdCBpcyBhIG51bWJlciB3aXRoIHRoZSBvcHBvc2l0ZSBiaXRzIHNldC4KICAgKgogICAqIFRoaXMgbWFwcyBhbnkgaW50ZWdlciBgeGAgdG8gYC14IC0gMWAuCiAgICovCiAgQmlnSW50IG9wZXJhdG9yIH4oKTsKCiAgLyoqIFJlbGF0aW9uYWwgbGVzcyB0aGFuIG9wZXJhdG9yLiAqLwogIGJvb2wgb3BlcmF0b3IgPChCaWdJbnQgb3RoZXIpOwoKICAvKiogUmVsYXRpb25hbCBsZXNzIHRoYW4gb3IgZXF1YWwgb3BlcmF0b3IuICovCiAgYm9vbCBvcGVyYXRvciA8PShCaWdJbnQgb3RoZXIpOwoKICAvKiogUmVsYXRpb25hbCBncmVhdGVyIHRoYW4gb3BlcmF0b3IuICovCiAgYm9vbCBvcGVyYXRvciA+KEJpZ0ludCBvdGhlcik7CgogIC8qKiBSZWxhdGlvbmFsIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCBvcGVyYXRvci4gKi8KICBib29sIG9wZXJhdG9yID49KEJpZ0ludCBvdGhlcik7CgogIC8qKgogICAqIENvbXBhcmVzIHRoaXMgdG8gYG90aGVyYC4KICAgKgogICAqIFJldHVybnMgYSBuZWdhdGl2ZSBudW1iZXIgaWYgYHRoaXNgIGlzIGxlc3MgdGhhbiBgb3RoZXJgLCB6ZXJvIGlmIHRoZXkgYXJlCiAgICogZXF1YWwsIGFuZCBhIHBvc2l0aXZlIG51bWJlciBpZiBgdGhpc2AgaXMgZ3JlYXRlciB0aGFuIGBvdGhlcmAuCiAgICovCiAgaW50IGNvbXBhcmVUbyhCaWdJbnQgb3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG51bWJlciBvZiBiaXRzIHJlcXVpcmVkIHRvIHN0b3JlIHRoaXMgYmlnIGludGVnZXIuCiAgICoKICAgKiBUaGUgbnVtYmVyIG9mIGJpdHMgZXhjbHVkZXMgdGhlIHNpZ24gYml0LCB3aGljaCBnaXZlcyB0aGUgbmF0dXJhbCBsZW5ndGgKICAgKiBmb3Igbm9uLW5lZ2F0aXZlICh1bnNpZ25lZCkgdmFsdWVzLiAgTmVnYXRpdmUgdmFsdWVzIGFyZSBjb21wbGVtZW50ZWQgdG8KICAgKiByZXR1cm4gdGhlIGJpdCBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgYml0IHRoYXQgZGlmZmVycyBmcm9tIHRoZSBzaWduIGJpdC4KICAgKgogICAqIFRvIGZpbmQgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCB0byBzdG9yZSB0aGUgdmFsdWUgYXMgYSBzaWduZWQgdmFsdWUsCiAgICogYWRkIG9uZSwgaS5lLiB1c2UgYHguYml0TGVuZ3RoICsgMWAuCiAgICoKICAgKiBgYGAKICAgKiB4LmJpdExlbmd0aCA9PSAoLXgtMSkuYml0TGVuZ3RoCiAgICoKICAgKiBuZXcgQmlnSW50LmZyb20oMykuYml0TGVuZ3RoID09IDI7ICAgLy8gMDAwMDAwMTEKICAgKiBuZXcgQmlnSW50LmZyb20oMikuYml0TGVuZ3RoID09IDI7ICAgLy8gMDAwMDAwMTAKICAgKiBuZXcgQmlnSW50LmZyb20oMSkuYml0TGVuZ3RoID09IDE7ICAgLy8gMDAwMDAwMDEKICAgKiBuZXcgQmlnSW50LmZyb20oMCkuYml0TGVuZ3RoID09IDA7ICAgLy8gMDAwMDAwMDAKICAgKiBuZXcgQmlnSW50LmZyb20oLTEpLmJpdExlbmd0aCA9PSAwOyAgLy8gMTExMTExMTEKICAgKiBuZXcgQmlnSW50LmZyb20oLTIpLmJpdExlbmd0aCA9PSAxOyAgLy8gMTExMTExMTAKICAgKiBuZXcgQmlnSW50LmZyb20oLTMpLmJpdExlbmd0aCA9PSAyOyAgLy8gMTExMTExMDEKICAgKiBuZXcgQmlnSW50LmZyb20oLTQpLmJpdExlbmd0aCA9PSAyOyAgLy8gMTExMTExMDAKICAgKiBgYGAKICAgKi8KICBpbnQgZ2V0IGJpdExlbmd0aDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc2lnbiBvZiB0aGlzIGJpZyBpbnRlZ2VyLgogICAqCiAgICogUmV0dXJucyAwIGZvciB6ZXJvLCAtMSBmb3IgdmFsdWVzIGxlc3MgdGhhbiB6ZXJvIGFuZAogICAqICsxIGZvciB2YWx1ZXMgZ3JlYXRlciB0aGFuIHplcm8uCiAgICovCiAgaW50IGdldCBzaWduOwoKICAvLy8gV2hldGhlciB0aGlzIGJpZyBpbnRlZ2VyIGlzIGV2ZW4uCiAgYm9vbCBnZXQgaXNFdmVuOwoKICAvLy8gV2hldGhlciB0aGlzIGJpZyBpbnRlZ2VyIGlzIG9kZC4KICBib29sIGdldCBpc09kZDsKCiAgLy8vIFdoZXRoZXIgdGhpcyBudW1iZXIgaXMgbmVnYXRpdmUuCiAgYm9vbCBnZXQgaXNOZWdhdGl2ZTsKCiAgLyoqCiAgICogUmV0dXJucyBgdGhpc2AgdG8gdGhlIHBvd2VyIG9mIFtleHBvbmVudF0uCiAgICoKICAgKiBSZXR1cm5zIFtvbmVdIGlmIHRoZSBbZXhwb25lbnRdIGVxdWFscyAwLgogICAqCiAgICogVGhlIFtleHBvbmVudF0gbXVzdCBvdGhlcndpc2UgYmUgcG9zaXRpdmUuCiAgICoKICAgKiBUaGUgcmVzdWx0IGlzIGFsd2F5cyBlcXVhbCB0byB0aGUgbWF0aGVtYXRpY2FsIHJlc3VsdCBvZiB0aGlzIHRvIHRoZSBwb3dlcgogICAqIFtleHBvbmVudF0sIG9ubHkgbGltaXRlZCBieSB0aGUgYXZhaWxhYmxlIG1lbW9yeS4KICAgKi8KICBCaWdJbnQgcG93KGludCBleHBvbmVudCk7CgogIC8qKgogICAqIFJldHVybnMgdGhpcyBpbnRlZ2VyIHRvIHRoZSBwb3dlciBvZiBbZXhwb25lbnRdIG1vZHVsbyBbbW9kdWx1c10uCiAgICoKICAgKiBUaGUgW2V4cG9uZW50XSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQgW21vZHVsdXNdIG11c3QgYmUKICAgKiBwb3NpdGl2ZS4KICAgKi8KICBCaWdJbnQgbW9kUG93KEJpZ0ludCBleHBvbmVudCwgQmlnSW50IG1vZHVsdXMpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBtb2R1bGFyIG11bHRpcGxpY2F0aXZlIGludmVyc2Ugb2YgdGhpcyBiaWcgaW50ZWdlcgogICAqIG1vZHVsbyBbbW9kdWx1c10uCiAgICoKICAgKiBUaGUgW21vZHVsdXNdIG11c3QgYmUgcG9zaXRpdmUuCiAgICoKICAgKiBJdCBpcyBhbiBlcnJvciBpZiBubyBtb2R1bGFyIGludmVyc2UgZXhpc3RzLgogICAqLwogIC8vIFJldHVybnMgMS90aGlzICUgbW9kdWx1cywgd2l0aCBtb2R1bHVzID4gMC4KICBCaWdJbnQgbW9kSW52ZXJzZShCaWdJbnQgbW9kdWx1cyk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIG9mIHRoaXMgYmlnIGludGVnZXIgYW5kIFtvdGhlcl0uCiAgICoKICAgKiBJZiBlaXRoZXIgbnVtYmVyIGlzIG5vbi16ZXJvLCB0aGUgcmVzdWx0IGlzIHRoZSBudW1lcmljYWxseSBncmVhdGVzdAogICAqIGludGVnZXIgZGl2aWRpbmcgYm90aCBgdGhpc2AgYW5kIGBvdGhlcmAuCiAgICoKICAgKiBUaGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3IgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIG9yZGVyLAogICAqIHNvIGB4LmdjZCh5KWAgaXMgIGFsd2F5cyB0aGUgc2FtZSBhcyBgeS5nY2QoeClgLgogICAqCiAgICogRm9yIGFueSBpbnRlZ2VyIGB4YCwgYHguZ2NkKHgpYCBpcyBgeC5hYnMoKWAuCiAgICoKICAgKiBJZiBib3RoIGB0aGlzYCBhbmQgYG90aGVyYCBpcyB6ZXJvLCB0aGUgcmVzdWx0IGlzIGFsc28gemVyby4KICAgKi8KICBCaWdJbnQgZ2NkKEJpZ0ludCBvdGhlcik7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGxlYXN0IHNpZ25pZmljYW50IFt3aWR0aF0gYml0cyBvZiB0aGlzIGJpZyBpbnRlZ2VyIGFzIGEKICAgKiBub24tbmVnYXRpdmUgbnVtYmVyIChpLmUuIHVuc2lnbmVkIHJlcHJlc2VudGF0aW9uKS4gIFRoZSByZXR1cm5lZCB2YWx1ZSBoYXMKICAgKiB6ZXJvcyBpbiBhbGwgYml0IHBvc2l0aW9ucyBoaWdoZXIgdGhhbiBbd2lkdGhdLgogICAqCiAgICogYGBgCiAgICogbmV3IEJpZ0ludC5mcm9tKC0xKS50b1Vuc2lnbmVkKDUpID09IDMxICAgLy8gMTExMTExMTEgIC0+ICAwMDAxMTExMQogICAqIGBgYAogICAqCiAgICogVGhpcyBvcGVyYXRpb24gY2FuIGJlIHVzZWQgdG8gc2ltdWxhdGUgYXJpdGhtZXRpYyBmcm9tIGxvdyBsZXZlbCBsYW5ndWFnZXMuCiAgICogRm9yIGV4YW1wbGUsIHRvIGluY3JlbWVudCBhbiA4IGJpdCBxdWFudGl0eToKICAgKgogICAqIGBgYAogICAqIHEgPSAocSArIDEpLnRvVW5zaWduZWQoOCk7CiAgICogYGBgCiAgICoKICAgKiBgcWAgd2lsbCBjb3VudCBmcm9tIGAwYCB1cCB0byBgMjU1YCBhbmQgdGhlbiB3cmFwIGFyb3VuZCB0byBgMGAuCiAgICoKICAgKiBJZiB0aGUgaW5wdXQgZml0cyBpbiBbd2lkdGhdIGJpdHMgd2l0aG91dCB0cnVuY2F0aW9uLCB0aGUgcmVzdWx0IGlzIHRoZQogICAqIHNhbWUgYXMgdGhlIGlucHV0LiAgVGhlIG1pbmltdW0gd2lkdGggbmVlZGVkIHRvIGF2b2lkIHRydW5jYXRpb24gb2YgYHhgIGlzCiAgICogZ2l2ZW4gYnkgYHguYml0TGVuZ3RoYCwgaS5lLgogICAqCiAgICogYGBgCiAgICogeCA9PSB4LnRvVW5zaWduZWQoeC5iaXRMZW5ndGgpOwogICAqIGBgYAogICAqLwogIEJpZ0ludCB0b1Vuc2lnbmVkKGludCB3aWR0aCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGxlYXN0IHNpZ25pZmljYW50IFt3aWR0aF0gYml0cyBvZiB0aGlzIGludGVnZXIsIGV4dGVuZGluZyB0aGUKICAgKiBoaWdoZXN0IHJldGFpbmVkIGJpdCB0byB0aGUgc2lnbi4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgdHJ1bmNhdGluZyB0aGUgdmFsdWUKICAgKiB0byBmaXQgaW4gW3dpZHRoXSBiaXRzIHVzaW5nIGFuIHNpZ25lZCAyLXMgY29tcGxlbWVudCByZXByZXNlbnRhdGlvbi4gIFRoZQogICAqIHJldHVybmVkIHZhbHVlIGhhcyB0aGUgc2FtZSBiaXQgdmFsdWUgaW4gYWxsIHBvc2l0aW9ucyBoaWdoZXIgdGhhbiBbd2lkdGhdLgogICAqCiAgICogYGBgCiAgICogdmFyIGJpZzE1ID0gbmV3IEJpZ0ludC5mcm9tKDE1KTsKICAgKiB2YXIgYmlnMTYgPSBuZXcgQmlnSW50LmZyb20oMTYpOwogICAqIHZhciBiaWcyMzkgPSBuZXcgQmlnSW50LmZyb20oMjM5KTsKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVi0tc2lnbiBiaXQtVgogICAqIGJpZzE2LnRvU2lnbmVkKDUpID09IC1iaWcxNiAgIC8vICAwMDAxMDAwMCAtPiAxMTExMDAwMAogICAqIGJpZzIzOS50b1NpZ25lZCg1KSA9PSBiaWcxNSAgIC8vICAxMTEwMTExMSAtPiAwMDAwMTExMQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICBeCiAgICogYGBgCiAgICoKICAgKiBUaGlzIG9wZXJhdGlvbiBjYW4gYmUgdXNlZCB0byBzaW11bGF0ZSBhcml0aG1ldGljIGZyb20gbG93IGxldmVsIGxhbmd1YWdlcy4KICAgKiBGb3IgZXhhbXBsZSwgdG8gaW5jcmVtZW50IGFuIDggYml0IHNpZ25lZCBxdWFudGl0eToKICAgKgogICAqIGBgYAogICAqIHEgPSAocSArIDEpLnRvU2lnbmVkKDgpOwogICAqIGBgYAogICAqCiAgICogYHFgIHdpbGwgY291bnQgZnJvbSBgMGAgdXAgdG8gYDEyN2AsIHdyYXAgdG8gYC0xMjhgIGFuZCBjb3VudCBiYWNrIHVwIHRvCiAgICogYDEyN2AuCiAgICoKICAgKiBJZiB0aGUgaW5wdXQgdmFsdWUgZml0cyBpbiBbd2lkdGhdIGJpdHMgd2l0aG91dCB0cnVuY2F0aW9uLCB0aGUgcmVzdWx0IGlzCiAgICogdGhlIHNhbWUgYXMgdGhlIGlucHV0LiAgVGhlIG1pbmltdW0gd2lkdGggbmVlZGVkIHRvIGF2b2lkIHRydW5jYXRpb24gb2YgYHhgCiAgICogaXMgYHguYml0TGVuZ3RoICsgMWAsIGkuZS4KICAgKgogICAqIGBgYAogICAqIHggPT0geC50b1NpZ25lZCh4LmJpdExlbmd0aCArIDEpOwogICAqIGBgYAogICAqLwogIEJpZ0ludCB0b1NpZ25lZChpbnQgd2lkdGgpOwoKICAvKioKICAgKiBXaGV0aGVyIHRoaXMgYmlnIGludGVnZXIgY2FuIGJlIHJlcHJlc2VudGVkIGFzIGFuIGBpbnRgIHdpdGhvdXQgbG9zaW5nCiAgICogcHJlY2lzaW9uLgogICAqCiAgICogV2FybmluZzogdGhpcyBmdW5jdGlvbiBtYXkgZ2l2ZSBhIGRpZmZlcmVudCByZXN1bHQgb24KICAgKiBkYXJ0MmpzLCBkZXYgY29tcGlsZXIsIGFuZCB0aGUgVk0sIGR1ZSB0byB0aGUgZGlmZmVyZW5jZXMgaW4KICAgKiBpbnRlZ2VyIHByZWNpc2lvbi4KICAgKi8KICBib29sIGdldCBpc1ZhbGlkSW50OwoKICAvKioKICAgKiBSZXR1cm5zIHRoaXMgW0JpZ0ludF0gYXMgYW4gW2ludF0uCiAgICoKICAgKiBJZiB0aGUgbnVtYmVyIGRvZXMgbm90IGZpdCwgY2xhbXBzIHRvIHRoZSBtYXggKG9yIG1pbikKICAgKiBpbnRlZ2VyLgogICAqCiAgICogV2FybmluZzogdGhlIGNsYW1waW5nIGJlaGF2ZXMgZGlmZmVyZW50bHkgb24gZGFydDJqcywgZGV2CiAgICogY29tcGlsZXIsIGFuZCB0aGUgVk0sIGR1ZSB0byB0aGUgZGlmZmVyZW5jZXMgaW4gaW50ZWdlcgogICAqIHByZWNpc2lvbi4KICAgKi8KICBpbnQgdG9JbnQoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGlzIFtCaWdJbnRdIGFzIGEgW2RvdWJsZV0uCiAgICoKICAgKiBJZiB0aGUgbnVtYmVyIGlzIG5vdCByZXByZXNlbnRhYmxlIGFzIGEgW2RvdWJsZV0sIGFuCiAgICogYXBwcm94aW1hdGlvbiBpcyByZXR1cm5lZC4gRm9yIG51bWVyaWNhbGx5IGxhcmdlIGludGVnZXJzLCB0aGUKICAgKiBhcHByb3hpbWF0aW9uIG1heSBiZSBpbmZpbml0ZS4KICAgKi8KICBkb3VibGUgdG9Eb3VibGUoKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIFN0cmluZy1yZXByZXNlbnRhdGlvbiBvZiB0aGlzIGludGVnZXIuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgc3RyaW5nIGlzIHBhcnNhYmxlIGJ5IFtwYXJzZV0uCiAgICogRm9yIGFueSBgQmlnSW50YCBgaWAsIGl0IGlzIGd1YXJhbnRlZWQgdGhhdAogICAqIGBpID09IEJpZ0ludC5wYXJzZShpLnRvU3RyaW5nKCkpYC4KICAgKi8KICBTdHJpbmcgdG9TdHJpbmcoKTsKCiAgLyoqCiAgICogQ29udmVydHMgW3RoaXNdIHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGluIHRoZSBnaXZlbiBbcmFkaXhdLgogICAqCiAgICogSW4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiwgbG93ZXItY2FzZSBsZXR0ZXJzIGFyZSB1c2VkIGZvciBkaWdpdHMgYWJvdmUKICAgKiAnOScsIHdpdGggJ2EnIGJlaW5nIDEwIGFuICd6JyBiZWluZyAzNS4KICAgKgogICAqIFRoZSBbcmFkaXhdIGFyZ3VtZW50IG11c3QgYmUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMiB0byAzNi4KICAgKi8KICBTdHJpbmcgdG9SYWRpeFN0cmluZyhpbnQgcmFkaXgpOwp9CoGiAE5OPAEPARMBBCEENiMiIgEGTAwFR0EFQUdJJAVPTlApBTo1BVAkBjwBBkwMBUsLBj8BQCsBBjEFRgYQAQYwBUwqBhcBGSMBHCMBHyMBGSMBBiMFTwVBBQ8JJSUgISEoKSgJBiQBBiAFUEguBTwFQwYjAQZMBTEsUQYiAQZCBUspBUhLCwUyBicBBkMFSEAaBTIGJwEGHAVMTR0FRiEGIwEGGwVMTxsFRCcGIwEGJQVMTSkFRScGIwEGIwVGOAUsBhcBKCEBMSIBKyEBNCIBBh8FUEUGHwEGTAVOTk4FTSoFCSUFNjY2NjY2NjYJBhUBBisFOiYGEAEoEwEnEgEnFwEGMAUvBTAFUDcGHAEGRwU/DwYyAQZEFwUlBTIGMSUBBkoFSi8FPjYFMwVCBhwBBklRNQUJSQkFUTIFCSAJBUYFTVAiBQklCQYgAQZPUVBRBQkmJig4PDw4CQVROQUJHgkFTgwFT1EgBQknCQYeAQZMEAU7QhgGFwEGKAU8DgU/PRAGDwEGKgU6RCQGFQEGNgUxMSgGFQEGRgVQLQVDBiMCARVkYXJ0OmNvcmUvYmlnaW50LmRhcnQ7b3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvY29yZS9ib29sLmRhcnSKzS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogVGhlIHJlc2VydmVkIHdvcmRzIGB0cnVlYCBhbmQgYGZhbHNlYCBkZW5vdGUgb2JqZWN0cyB0aGF0IGFyZSB0aGUgb25seSB0d28KICogaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MuCiAqCiAqIEl0IGlzIGEgY29tcGlsZS10aW1lIGVycm9yIGZvciBhIGNsYXNzIHRvIGF0dGVtcHQgdG8gZXh0ZW5kIG9yIGltcGxlbWVudAogKiBib29sLgogKi8KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBib29sIHsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBib29sZWFuIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCBkZWNsYXJhdGlvbiBbbmFtZV0uCiAgICoKICAgKiBUaGUgYm9vbGVhbiB2YWx1ZSBvZiB0aGUgZGVjbGFyYXRpb24gaXMgYHRydWVgIGlmIHRoZSBkZWNsYXJlZCB2YWx1ZSBpcwogICAqIHRoZSBzdHJpbmcgYCJ0cnVlImAsIGFuZCBgZmFsc2VgIGlmIHRoZSB2YWx1ZSBpcyBgImZhbHNlImAuCiAgICoKICAgKiBJbiBhbGwgb3RoZXIgY2FzZXMsIGluY2x1ZGluZyB3aGVuIHRoZXJlIGlzIG5vIGRlY2xhcmF0aW9uIGZvciBgbmFtZWAsCiAgICogdGhlIHJlc3VsdCBpcyB0aGUgW2RlZmF1bHRWYWx1ZV0uCiAgICoKICAgKiBUaGUgcmVzdWx0IGlzIHRoZSBzYW1lIGFzIHdvdWxkIGJlIHJldHVybmVkIGJ5OgogICAqIGBgYGRhcnQKICAgKiAoY29uc3QgU3RyaW5nLmZyb21FbnZpcm9ubWVudChuYW1lKSA9PSAidHJ1ZSIpCiAgICogICAgID8gdHJ1ZQogICAqICAgICA6IChjb25zdCBTdHJpbmcuZnJvbUVudmlyb25tZW50KG5hbWUpID09ICJmYWxzZSIpCiAgICogICAgICAgICA/IGZhbHNlCiAgICogICAgICAgICA6IGRlZmF1bHRWYWx1ZQogICAqIGBgYAogICAqIEV4YW1wbGU6CiAgICogYGBgZGFydAogICAqIGNvbnN0IGxvZ2dpbmdGbGFnID0gY29uc3QgYm9vbC5mcm9tRW52aXJvbm1lbnQoImxvZ2dpbmciKTsKICAgKiBgYGAKICAgKiBJZiB5b3Ugd2FudCB0byB1c2UgYSBkaWZmZXJlbnQgdHJ1dGgtc3RyaW5nIHRoYW4gYCJ0cnVlImAsIHlvdSBjYW4gdXNlIHRoZQogICAqIFtTdHJpbmcuZnJvbUVudmlyb25tZW50XSBjb25zdHJ1Y3RvciBkaXJlY3RseToKICAgKiBgYGBkYXJ0CiAgICogY29uc3QgaXNMb2dnaW5nT24gPSAoY29uc3QgU3RyaW5nLmZyb21FbnZpcm9ubWVudCgibG9nZ2luZyIpID09ICJvbiIpOwogICAqIGBgYAogICAqLwogIC8vIFRoZSAuZnJvbUVudmlyb25tZW50KCkgY29uc3RydWN0b3JzIGFyZSBzcGVjaWFsIGluIHRoYXQgd2UgZG8gbm90IHdhbnQKICAvLyB1c2VycyB0byBjYWxsIHRoZW0gdXNpbmcgIm5ldyIuIFdlIHByb2hpYml0IHRoYXQgYnkgZ2l2aW5nIHRoZW0gYm9kaWVzCiAgLy8gdGhhdCB0aHJvdywgZXZlbiB0aG91Z2ggY29uc3QgY29uc3RydWN0b3JzIGFyZSBub3QgYWxsb3dlZCB0byBoYXZlIGJvZGllcy4KICAvLyBEaXNhYmxlIHRob3NlIHN0YXRpYyBlcnJvcnMuCiAgLy9pZ25vcmU6IGNvbnN0X2NvbnN0cnVjdG9yX3dpdGhfYm9keQogIC8vaWdub3JlOiBjb25zdF9mYWN0b3J5CiAgZXh0ZXJuYWwgY29uc3QgZmFjdG9yeSBib29sLmZyb21FbnZpcm9ubWVudChTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgZGVmYXVsdFZhbHVlID0gZmFsc2V9KTsKCiAgZXh0ZXJuYWwgaW50IGdldCBoYXNoQ29kZTsKCiAgLy8vIFRoZSBsb2dpY2FsIGNvbmp1bmN0aW9uICgiYW5kIikgb2YgdGhpcyBhbmQgW290aGVyXS4KICAvLy8KICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYm90aCB0aGlzIGFuZCBbb3RoZXJdIGFyZSBgdHJ1ZWAsIGFuZCBgZmFsc2VgIG90aGVyd2lzZS4KICAvL1RPRE8obHJuKTogUmVtb3ZlICJhcyBib29sIiBpbiBEYXJ0IDIuCiAgQFNpbmNlKCIyLjEiKQogIGJvb2wgb3BlcmF0b3IgJihib29sIG90aGVyKSA9PiAob3RoZXIgYXMgYm9vbCkgJiYgdGhpczsKCiAgLy8vIFRoZSBsb2dpY2FsIGRpc2p1bmN0aW9uICgiaW5jbHVzaXZlIG9yIikgb2YgdGhpcyBhbmQgW290aGVyXS4KICAvLy8KICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgZWl0aGVyIHRoaXMgb3IgW290aGVyXSBpcyBgdHJ1ZWAsIGFuZCBgZmFsc2VgIG90aGVyd2lzZS4KICBAU2luY2UoIjIuMSIpCiAgYm9vbCBvcGVyYXRvciB8KGJvb2wgb3RoZXIpID0+IChvdGhlciBhcyBib29sKSB8fCB0aGlzOwoKICAvLy8gVGhlIGxvZ2ljYWwgZXhjbHVzaXZlIGRpc2p1bmN0aW9uICgiZXhjbHVzaXZlIG9yIikgb2YgdGhpcyBhbmQgW290aGVyXS4KICAvLy8KICAvLy8gUmV0dXJucyB3aGV0aGVyIHRoaXMgYW5kIFtvdGhlcl0gYXJlIG5laXRoZXIgYm90aCBgdHJ1ZWAgbm9yIGJvdGggYGZhbHNlYC4KICBAU2luY2UoIjIuMSIpCiAgYm9vbCBvcGVyYXRvciBeKGJvb2wgb3RoZXIpID0+ICEob3RoZXIgYXMgYm9vbCkgPT0gdGhpczsKCiAgLyoqCiAgICogUmV0dXJucyBlaXRoZXIgYCJ0cnVlImAgZm9yIGB0cnVlYCBhbmQgYCJmYWxzZSJgIGZvciBgZmFsc2VgLgogICAqLwogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiB0aGlzID8gInRydWUiIDogImZhbHNlIjsKICB9Cn0KUwBOTjwBDwETAQROHANMCQQaDQZGBU1BBUwnBTUNNBA7FRwJDg1ACVA0DUwJBkxMUCIoGjskAR0BOwZRKxA6AUQGURA6AU4GURA7AQZDBhYkBAIBE2RhcnQ6Y29yZS9ib29sLmRhcnRNb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvX2ludGVybmFsL3ZtL2xpYi9ib29sX3BhdGNoLmRhcnSCHC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCkBwYXRjaApAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIGJvb2wgewogIEBwYXRjaAogIGNvbnN0IGZhY3RvcnkgYm9vbC5mcm9tRW52aXJvbm1lbnQoU3RyaW5nIG5hbWUsIHtib29sIGRlZmF1bHRWYWx1ZTogZmFsc2V9KQogICAgICBuYXRpdmUgIkJvb2xfZnJvbUVudmlyb25tZW50IjsKCiAgQHBhdGNoCiAgaW50IGdldCBoYXNoQ29kZSA9PiB0aGlzID8gMTIzMSA6IDEyMzc7CgogIGludCBnZXQgX2lkZW50aXR5SGFzaENvZGUgPT4gdGhpcyA/IDEyMzEgOiAxMjM3Owp9ChYATk48AQ8BHgEHGg0JTiUBCSoBMwIBH2RhcnQ6Y29yZS1wYXRjaC9ib29sX3BhdGNoLmRhcnRAb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvY29yZS9kYXRlX3RpbWUuZGFydMAAbB8vLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIEFuIGluc3RhbnQgaW4gdGltZSwgc3VjaCBhcyBKdWx5IDIwLCAxOTY5LCA4OjE4cG0gR01ULgogKgogKiBEYXRlVGltZXMgY2FuIHJlcHJlc2VudCB0aW1lIHZhbHVlcyB0aGF0IGFyZSBhdCBhIGRpc3RhbmNlIG9mIGF0IG1vc3QKICogMTAwLDAwMCwwMDAgZGF5cyBmcm9tIGVwb2NoICgxOTcwLTAxLTAxIFVUQyk6IC0yNzE4MjEtMDQtMjAgdG8gMjc1NzYwLTA5LTEzLgogKgogKiBDcmVhdGUgYSBEYXRlVGltZSBvYmplY3QgYnkgdXNpbmcgb25lIG9mIHRoZSBjb25zdHJ1Y3RvcnMKICogb3IgYnkgcGFyc2luZyBhIGNvcnJlY3RseSBmb3JtYXR0ZWQgc3RyaW5nLAogKiB3aGljaCBjb21wbGllcyB3aXRoIGEgc3Vic2V0IG9mIElTTyA4NjAxLgogKiBOb3RlIHRoYXQgaG91cnMgYXJlIHNwZWNpZmllZCBiZXR3ZWVuIDAgYW5kIDIzLAogKiBhcyBpbiBhIDI0LWhvdXIgY2xvY2suCiAqIEZvciBleGFtcGxlOgogKgogKiBgYGAKICogdmFyIG5vdyA9IG5ldyBEYXRlVGltZS5ub3coKTsKICogdmFyIGJlcmxpbldhbGxGZWxsID0gbmV3IERhdGVUaW1lLnV0YygxOTg5LCAxMSwgOSk7CiAqIHZhciBtb29uTGFuZGluZyA9IERhdGVUaW1lLnBhcnNlKCIxOTY5LTA3LTIwIDIwOjE4OjA0WiIpOyAgLy8gODoxOHBtCiAqIGBgYAogKgogKiBBIERhdGVUaW1lIG9iamVjdCBpcyBhbmNob3JlZCBlaXRoZXIgaW4gdGhlIFVUQyB0aW1lIHpvbmUKICogb3IgaW4gdGhlIGxvY2FsIHRpbWUgem9uZSBvZiB0aGUgY3VycmVudCBjb21wdXRlcgogKiB3aGVuIHRoZSBvYmplY3QgaXMgY3JlYXRlZC4KICoKICogT25jZSBjcmVhdGVkLCBuZWl0aGVyIHRoZSB2YWx1ZSBub3IgdGhlIHRpbWUgem9uZQogKiBvZiBhIERhdGVUaW1lIG9iamVjdCBtYXkgYmUgY2hhbmdlZC4KICoKICogWW91IGNhbiB1c2UgcHJvcGVydGllcyB0byBnZXQKICogdGhlIGluZGl2aWR1YWwgdW5pdHMgb2YgYSBEYXRlVGltZSBvYmplY3QuCiAqCiAqIGBgYAogKiBhc3NlcnQoYmVybGluV2FsbEZlbGwubW9udGggPT0gMTEpOwogKiBhc3NlcnQobW9vbkxhbmRpbmcuaG91ciA9PSAyMCk7CiAqIGBgYAogKgogKiBGb3IgY29udmVuaWVuY2UgYW5kIHJlYWRhYmlsaXR5LAogKiB0aGUgRGF0ZVRpbWUgY2xhc3MgcHJvdmlkZXMgYSBjb25zdGFudCBmb3IgZWFjaCBkYXkgYW5kIG1vbnRoCiAqIG5hbWUgLSBmb3IgZXhhbXBsZSwgW2F1Z3VzdF0gYW5kIFtmcmlkYXldLgogKiBZb3UgY2FuIHVzZSB0aGVzZSBjb25zdGFudHMgdG8gaW1wcm92ZSBjb2RlIHJlYWRhYmlsaXR5OgogKgogKiBgYGAKICogdmFyIGJlcmxpbldhbGxGZWxsID0gbmV3IERhdGVUaW1lLnV0YygxOTg5LCBEYXRlVGltZS5ub3ZlbWJlciwgOSk7CiAqIGFzc2VydChiZXJsaW5XYWxsRmVsbC53ZWVrZGF5ID09IERhdGVUaW1lLnRodXJzZGF5KTsKICogYGBgCiAqCiAqIERheSBhbmQgbW9udGggdmFsdWVzIGJlZ2luIGF0IDEsIGFuZCB0aGUgd2VlayBzdGFydHMgb24gTW9uZGF5LgogKiBUaGF0IGlzLCB0aGUgY29uc3RhbnRzIFtqYW51YXJ5XSBhbmQgW21vbmRheV0gYXJlIGJvdGggMS4KICoKICogIyMgV29ya2luZyB3aXRoIFVUQyBhbmQgbG9jYWwgdGltZQogKgogKiBBIERhdGVUaW1lIG9iamVjdCBpcyBpbiB0aGUgbG9jYWwgdGltZSB6b25lCiAqIHVubGVzcyBleHBsaWNpdGx5IGNyZWF0ZWQgaW4gdGhlIFVUQyB0aW1lIHpvbmUuCiAqCiAqIGBgYAogKiB2YXIgZERheSA9IG5ldyBEYXRlVGltZS51dGMoMTk0NCwgNiwgNik7CiAqIGBgYAogKgogKiBVc2UgW2lzVXRjXSB0byBkZXRlcm1pbmUgd2hldGhlciBhIERhdGVUaW1lIG9iamVjdCBpcyBiYXNlZCBpbiBVVEMuCiAqIFVzZSB0aGUgbWV0aG9kcyBbdG9Mb2NhbF0gYW5kIFt0b1V0Y10KICogdG8gZ2V0IHRoZSBlcXVpdmFsZW50IGRhdGUvdGltZSB2YWx1ZSBzcGVjaWZpZWQgaW4gdGhlIG90aGVyIHRpbWUgem9uZS4KICogVXNlIFt0aW1lWm9uZU5hbWVdIHRvIGdldCBhbiBhYmJyZXZpYXRlZCBuYW1lIG9mIHRoZSB0aW1lIHpvbmUKICogZm9yIHRoZSBEYXRlVGltZSBvYmplY3QuCiAqIFRvIGZpbmQgdGhlIGRpZmZlcmVuY2UKICogYmV0d2VlbiBVVEMgYW5kIHRoZSB0aW1lIHpvbmUgb2YgYSBEYXRlVGltZSBvYmplY3QKICogY2FsbCBbdGltZVpvbmVPZmZzZXRdLgogKgogKiAjIyBDb21wYXJpbmcgRGF0ZVRpbWUgb2JqZWN0cwogKgogKiBUaGUgRGF0ZVRpbWUgY2xhc3MgY29udGFpbnMgc2V2ZXJhbCBoYW5keSBtZXRob2RzLAogKiBzdWNoIGFzIFtpc0FmdGVyXSwgW2lzQmVmb3JlXSwgYW5kIFtpc0F0U2FtZU1vbWVudEFzXSwKICogZm9yIGNvbXBhcmluZyBEYXRlVGltZSBvYmplY3RzLgogKgogKiBgYGAKICogYXNzZXJ0KGJlcmxpbldhbGxGZWxsLmlzQWZ0ZXIobW9vbkxhbmRpbmcpID09IHRydWUpOwogKiBhc3NlcnQoYmVybGluV2FsbEZlbGwuaXNCZWZvcmUobW9vbkxhbmRpbmcpID09IGZhbHNlKTsKICogYGBgCiAqCiAqICMjIFVzaW5nIERhdGVUaW1lIHdpdGggRHVyYXRpb24KICoKICogVXNlIHRoZSBbYWRkXSBhbmQgW3N1YnRyYWN0XSBtZXRob2RzIHdpdGggYSBbRHVyYXRpb25dIG9iamVjdAogKiB0byBjcmVhdGUgYSBuZXcgRGF0ZVRpbWUgb2JqZWN0IGJhc2VkIG9uIGFub3RoZXIuCiAqIEZvciBleGFtcGxlLCB0byBmaW5kIHRoZSBkYXRlIHRoYXQgaXMgc2l4dHkgZGF5cyAoMjQgKiA2MCBob3VycykgYWZ0ZXIgdG9kYXksCiAqIHdyaXRlOgogKgogKiBgYGAKICogdmFyIG5vdyA9IG5ldyBEYXRlVGltZS5ub3coKTsKICogdmFyIHNpeHR5RGF5c0Zyb21Ob3cgPSBub3cuYWRkKG5ldyBEdXJhdGlvbihkYXlzOiA2MCkpOwogKiBgYGAKICoKICogVG8gZmluZCBvdXQgaG93IG11Y2ggdGltZSBpcyBiZXR3ZWVuIHR3byBEYXRlVGltZSBvYmplY3RzIHVzZQogKiBbZGlmZmVyZW5jZV0sIHdoaWNoIHJldHVybnMgYSBbRHVyYXRpb25dIG9iamVjdDoKICoKICogYGBgCiAqIHZhciBkaWZmZXJlbmNlID0gYmVybGluV2FsbEZlbGwuZGlmZmVyZW5jZShtb29uTGFuZGluZyk7CiAqIGFzc2VydChkaWZmZXJlbmNlLmluRGF5cyA9PSA3NDE2KTsKICogYGBgCiAqCiAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGRhdGVzIGluIGRpZmZlcmVudCB0aW1lIHpvbmVzCiAqIGlzIGp1c3QgdGhlIG51bWJlciBvZiBuYW5vc2Vjb25kcyBiZXR3ZWVuIHRoZSB0d28gcG9pbnRzIGluIHRpbWUuCiAqIEl0IGRvZXNuJ3QgdGFrZSBjYWxlbmRhciBkYXlzIGludG8gYWNjb3VudC4KICogVGhhdCBtZWFucyB0aGF0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIG1pZG5pZ2h0cyBpbiBsb2NhbCB0aW1lIG1heSBiZQogKiBsZXNzIHRoYW4gMjQgaG91cnMgdGltZXMgdGhlIG51bWJlciBvZiBkYXlzIGJldHdlZW4gdGhlbSwKICogaWYgdGhlcmUgaXMgYSBkYXlsaWdodCBzYXZpbmcgY2hhbmdlIGluIGJldHdlZW4uCiAqIElmIHRoZSBkaWZmZXJlbmNlIGFib3ZlIGlzIGNhbGN1bGF0ZWQgdXNpbmcgQXVzdHJhbGlhbiBsb2NhbCB0aW1lLCB0aGUKICogZGlmZmVyZW5jZSBpcyA3NDE1IGRheXMgYW5kIDIzIGhvdXJzLCB3aGljaCBpcyBvbmx5IDc0MTUgd2hvbGUgZGF5cyBhcwogKiByZXBvcnRlZCBieSBgaW5EYXlzYC4KICoKICogIyMgT3RoZXIgcmVzb3VyY2VzCiAqCiAqIFNlZSBbRHVyYXRpb25dIHRvIHJlcHJlc2VudCBhIHNwYW4gb2YgdGltZS4KICogU2VlIFtTdG9wd2F0Y2hdIHRvIG1lYXN1cmUgdGltZXNwYW5zLgogKgogKiBUaGUgRGF0ZVRpbWUgY2xhc3MgZG9lcyBub3QgcHJvdmlkZSBpbnRlcm5hdGlvbmFsaXphdGlvbi4KICogVG8gaW50ZXJuYXRpb25hbGl6ZSB5b3VyIGNvZGUsIHVzZQogKiB0aGUgW2ludGxdKGh0dHBzOi8vcHViLmRldi9wYWNrYWdlcy9pbnRsKSBwYWNrYWdlLgogKgogKi8KY2xhc3MgRGF0ZVRpbWUgaW1wbGVtZW50cyBDb21wYXJhYmxlPERhdGVUaW1lPiB7CiAgLy8gV2Vla2RheSBjb25zdGFudHMgdGhhdCBhcmUgcmV0dXJuZWQgYnkgW3dlZWtkYXldIG1ldGhvZDoKICBzdGF0aWMgY29uc3QgaW50IG1vbmRheSA9IDE7CiAgc3RhdGljIGNvbnN0IGludCB0dWVzZGF5ID0gMjsKICBzdGF0aWMgY29uc3QgaW50IHdlZG5lc2RheSA9IDM7CiAgc3RhdGljIGNvbnN0IGludCB0aHVyc2RheSA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBmcmlkYXkgPSA1OwogIHN0YXRpYyBjb25zdCBpbnQgc2F0dXJkYXkgPSA2OwogIHN0YXRpYyBjb25zdCBpbnQgc3VuZGF5ID0gNzsKICBzdGF0aWMgY29uc3QgaW50IGRheXNQZXJXZWVrID0gNzsKCiAgLy8gTW9udGggY29uc3RhbnRzIHRoYXQgYXJlIHJldHVybmVkIGJ5IHRoZSBbbW9udGhdIGdldHRlci4KICBzdGF0aWMgY29uc3QgaW50IGphbnVhcnkgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgZmVicnVhcnkgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgbWFyY2ggPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgYXByaWwgPSA0OwogIHN0YXRpYyBjb25zdCBpbnQgbWF5ID0gNTsKICBzdGF0aWMgY29uc3QgaW50IGp1bmUgPSA2OwogIHN0YXRpYyBjb25zdCBpbnQganVseSA9IDc7CiAgc3RhdGljIGNvbnN0IGludCBhdWd1c3QgPSA4OwogIHN0YXRpYyBjb25zdCBpbnQgc2VwdGVtYmVyID0gOTsKICBzdGF0aWMgY29uc3QgaW50IG9jdG9iZXIgPSAxMDsKICBzdGF0aWMgY29uc3QgaW50IG5vdmVtYmVyID0gMTE7CiAgc3RhdGljIGNvbnN0IGludCBkZWNlbWJlciA9IDEyOwogIHN0YXRpYyBjb25zdCBpbnQgbW9udGhzUGVyWWVhciA9IDEyOwoKICAvKioKICAgKiBUaGUgdmFsdWUgb2YgdGhpcyBEYXRlVGltZS4KICAgKgogICAqIFRoZSBjb250ZW50IG9mIHRoaXMgZmllbGQgaXMgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50LiBPbiBKYXZhU2NyaXB0IGl0IGlzCiAgICogZXF1YWwgdG8gW21pbGxpc2Vjb25kc1NpbmNlRXBvY2hdLiBPbiB0aGUgVk0gaXQgaXMgZXF1YWwgdG8KICAgKiBbbWljcm9zZWNvbmRzU2luY2VFcG9jaF0uCiAgICovCiAgZmluYWwgaW50IF92YWx1ZTsKCiAgLyoqCiAgICogVHJ1ZSBpZiB0aGlzIFtEYXRlVGltZV0gaXMgc2V0IHRvIFVUQyB0aW1lLgogICAqCiAgICogYGBgCiAgICogdmFyIGREYXkgPSBuZXcgRGF0ZVRpbWUudXRjKDE5NDQsIDYsIDYpOwogICAqIGFzc2VydChkRGF5LmlzVXRjKTsKICAgKiBgYGAKICAgKgogICAqLwogIGZpbmFsIGJvb2wgaXNVdGM7CgogIC8qKgogICAqIENvbnN0cnVjdHMgYSBbRGF0ZVRpbWVdIGluc3RhbmNlIHNwZWNpZmllZCBpbiB0aGUgbG9jYWwgdGltZSB6b25lLgogICAqCiAgICogRm9yIGV4YW1wbGUsCiAgICogdG8gY3JlYXRlIGEgbmV3IERhdGVUaW1lIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIDd0aCBvZiBTZXB0ZW1iZXIgMjAxNywKICAgKiA1OjMwcG0KICAgKgogICAqIGBgYAogICAqIHZhciBkZW50aXN0QXBwb2ludG1lbnQgPSBuZXcgRGF0ZVRpbWUoMjAxNywgOSwgNywgMTcsIDMwKTsKICAgKiBgYGAKICAgKi8KICBEYXRlVGltZShpbnQgeWVhciwKICAgICAgW2ludCBtb250aCA9IDEsCiAgICAgIGludCBkYXkgPSAxLAogICAgICBpbnQgaG91ciA9IDAsCiAgICAgIGludCBtaW51dGUgPSAwLAogICAgICBpbnQgc2Vjb25kID0gMCwKICAgICAgaW50IG1pbGxpc2Vjb25kID0gMCwKICAgICAgaW50IG1pY3Jvc2Vjb25kID0gMF0pCiAgICAgIDogdGhpcy5faW50ZXJuYWwoeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kLAogICAgICAgICAgICBtaWNyb3NlY29uZCwgZmFsc2UpOwoKICAvKioKICAgKiBDb25zdHJ1Y3RzIGEgW0RhdGVUaW1lXSBpbnN0YW5jZSBzcGVjaWZpZWQgaW4gdGhlIFVUQyB0aW1lIHpvbmUuCiAgICoKICAgKiBgYGAKICAgKiB2YXIgbW9vbkxhbmRpbmcgPSBuZXcgRGF0ZVRpbWUudXRjKDE5NjksIDcsIDIwLCAyMCwgMTgsIDA0KTsKICAgKiBgYGAKICAgKgogICAqIFdoZW4gZGVhbGluZyB3aXRoIGRhdGVzIG9yIGhpc3RvcmljIGV2ZW50cyBwcmVmZXIgdG8gdXNlIFVUQyBEYXRlVGltZXMsCiAgICogc2luY2UgdGhleSBhcmUgdW5hZmZlY3RlZCBieSBkYXlsaWdodC1zYXZpbmcgY2hhbmdlcyBhbmQgYXJlIHVuYWZmZWN0ZWQKICAgKiBieSB0aGUgbG9jYWwgdGltZXpvbmUuCiAgICovCiAgRGF0ZVRpbWUudXRjKGludCB5ZWFyLAogICAgICBbaW50IG1vbnRoID0gMSwKICAgICAgaW50IGRheSA9IDEsCiAgICAgIGludCBob3VyID0gMCwKICAgICAgaW50IG1pbnV0ZSA9IDAsCiAgICAgIGludCBzZWNvbmQgPSAwLAogICAgICBpbnQgbWlsbGlzZWNvbmQgPSAwLAogICAgICBpbnQgbWljcm9zZWNvbmQgPSAwXSkKICAgICAgOiB0aGlzLl9pbnRlcm5hbCh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQsCiAgICAgICAgICAgIG1pY3Jvc2Vjb25kLCB0cnVlKTsKCiAgLyoqCiAgICogQ29uc3RydWN0cyBhIFtEYXRlVGltZV0gaW5zdGFuY2Ugd2l0aCBjdXJyZW50IGRhdGUgYW5kIHRpbWUgaW4gdGhlCiAgICogbG9jYWwgdGltZSB6b25lLgogICAqCiAgICogYGBgCiAgICogdmFyIHRoaXNJbnN0YW50ID0gbmV3IERhdGVUaW1lLm5vdygpOwogICAqIGBgYAogICAqLwogIERhdGVUaW1lLm5vdygpIDogdGhpcy5fbm93KCk7CgogIC8qKgogICAqIENvbnN0cnVjdHMgYSBuZXcgW0RhdGVUaW1lXSBpbnN0YW5jZSBiYXNlZCBvbiBbZm9ybWF0dGVkU3RyaW5nXS4KICAgKgogICAqIFRoZSBbZm9ybWF0dGVkU3RyaW5nXSBtdXN0IG5vdCBiZSBgbnVsbGAuCiAgICogVGhyb3dzIGEgW0Zvcm1hdEV4Y2VwdGlvbl0gaWYgdGhlIGlucHV0IHN0cmluZyBjYW5ub3QgYmUgcGFyc2VkLgogICAqCiAgICogVGhlIGZ1bmN0aW9uIHBhcnNlcyBhIHN1YnNldCBvZiBJU08gODYwMQogICAqIHdoaWNoIGluY2x1ZGVzIHRoZSBzdWJzZXQgYWNjZXB0ZWQgYnkgUkZDIDMzMzkuCiAgICoKICAgKiBUaGUgYWNjZXB0ZWQgaW5wdXRzIGFyZSBjdXJyZW50bHk6CiAgICoKICAgKiAqIEEgZGF0ZTogQSBzaWduZWQgZm91ci10by1zaXggZGlnaXQgeWVhciwgdHdvIGRpZ2l0IG1vbnRoIGFuZAogICAqICAgdHdvIGRpZ2l0IGRheSwgb3B0aW9uYWxseSBzZXBhcmF0ZWQgYnkgYC1gIGNoYXJhY3RlcnMuCiAgICogICBFeGFtcGxlczogIjE5NzAwMTAxIiwgIi0wMDA0LTEyLTI0IiwgIjgxMDMwLTA0LTAxIi4KICAgKiAqIEFuIG9wdGlvbmFsIHRpbWUgcGFydCwgc2VwYXJhdGVkIGZyb20gdGhlIGRhdGUgYnkgZWl0aGVyIGBUYCBvciBhIHNwYWNlLgogICAqICAgVGhlIHRpbWUgcGFydCBpcyBhIHR3byBkaWdpdCBob3VyLAogICAqICAgdGhlbiBvcHRpb25hbGx5IGEgdHdvIGRpZ2l0IG1pbnV0ZXMgdmFsdWUsCiAgICogICB0aGVuIG9wdGlvbmFsbHkgYSB0d28gZGlnaXQgc2Vjb25kcyB2YWx1ZSwgYW5kCiAgICogICB0aGVuIG9wdGlvbmFsbHkgYSAnLicgb3IgJywnIGZvbGxvd2VkIGJ5IGF0IGxlYXN0IGEgb25lIGRpZ2l0CiAgICogICBzZWNvbmQgZnJhY3Rpb24uCiAgICogICBUaGUgbWludXRlcyBhbmQgc2Vjb25kcyBtYXkgYmUgc2VwYXJhdGVkIGZyb20gdGhlIHByZXZpb3VzIHBhcnRzIGJ5IGEKICAgKiAgICc6Jy4KICAgKiAgIEV4YW1wbGVzOiAiMTIiLCAiMTI6MzA6MjQuMTI0IiwgIjEyOjMwOjI0LDEyNCIsICIxMjMwMTAuNTAiLgogICAqICogQW4gb3B0aW9uYWwgdGltZS16b25lIG9mZnNldCBwYXJ0LAogICAqICAgcG9zc2libHkgc2VwYXJhdGVkIGZyb20gdGhlIHByZXZpb3VzIGJ5IGEgc3BhY2UuCiAgICogICBUaGUgdGltZSB6b25lIGlzIGVpdGhlciAneicgb3IgJ1onLCBvciBpdCBpcyBhIHNpZ25lZCB0d28gZGlnaXQgaG91cgogICAqICAgcGFydCBhbmQgYW4gb3B0aW9uYWwgdHdvIGRpZ2l0IG1pbnV0ZSBwYXJ0LiBUaGUgc2lnbiBtdXN0IGJlIGVpdGhlcgogICAqICAgIisiIG9yICItIiwgYW5kIGNhbiBub3QgYmUgb21pdHRlZC4KICAgKiAgIFRoZSBtaW51dGVzIG1heSBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUgaG91cnMgYnkgYSAnOicuCiAgICogICBFeGFtcGxlczogIloiLCAiLTEwIiwgIiswMTozMCIsICIrMTEzMCIuCiAgICoKICAgKiBUaGlzIGluY2x1ZGVzIHRoZSBvdXRwdXQgb2YgYm90aCBbdG9TdHJpbmddIGFuZCBbdG9Jc284NjAxU3RyaW5nXSwgd2hpY2gKICAgKiB3aWxsIGJlIHBhcnNlZCBiYWNrIGludG8gYSBgRGF0ZVRpbWVgIG9iamVjdCB3aXRoIHRoZSBzYW1lIHRpbWUgYXMgdGhlCiAgICogb3JpZ2luYWwuCiAgICoKICAgKiBUaGUgcmVzdWx0IGlzIGFsd2F5cyBpbiBlaXRoZXIgbG9jYWwgdGltZSBvciBVVEMuCiAgICogSWYgYSB0aW1lIHpvbmUgb2Zmc2V0IG90aGVyIHRoYW4gVVRDIGlzIHNwZWNpZmllZCwKICAgKiB0aGUgdGltZSBpcyBjb252ZXJ0ZWQgdG8gdGhlIGVxdWl2YWxlbnQgVVRDIHRpbWUuCiAgICoKICAgKiBFeGFtcGxlcyBvZiBhY2NlcHRlZCBzdHJpbmdzOgogICAqCiAgICogKiBgIjIwMTItMDItMjcgMTM6Mjc6MDAiYAogICAqICogYCIyMDEyLTAyLTI3IDEzOjI3OjAwLjEyMzQ1Njc4OXoiYAogICAqICogYCIyMDEyLTAyLTI3IDEzOjI3OjAwLDEyMzQ1Njc4OXoiYAogICAqICogYCIyMDEyMDIyNyAxMzoyNzowMCJgCiAgICogKiBgIjIwMTIwMjI3VDEzMjcwMCJgCiAgICogKiBgIjIwMTIwMjI3ImAKICAgKiAqIGAiKzIwMTIwMjI3ImAKICAgKiAqIGAiMjAxMi0wMi0yN1QxNFoiYAogICAqICogYCIyMDEyLTAyLTI3VDE0KzAwOjAwImAKICAgKiAqIGAiLTEyMzQ1MDEwMSAwMDowMDowMCBaImA6IGluIHRoZSB5ZWFyIC0xMjM0NS4KICAgKiAqIGAiMjAwMi0wMi0yN1QxNDowMDowMC0wNTAwImA6IFNhbWUgYXMgYCIyMDAyLTAyLTI3VDE5OjAwOjAwWiJgCiAgICovCiAgLy8gVE9ETyhscm4pOiByZXN0cmljdCBpbmNvcnJlY3QgdmFsdWVzIGxpa2UgIDIwMDMtMDItMjlUNTA6NzA6ODAuCiAgLy8gT3Igbm90LCB0aGF0IG1heSBiZSBhIGJyZWFraW5nIGNoYW5nZS4KICBzdGF0aWMgRGF0ZVRpbWUgcGFyc2UoU3RyaW5nIGZvcm1hdHRlZFN0cmluZykgewogICAgdmFyIHJlID0gX3BhcnNlRm9ybWF0OwogICAgTWF0Y2ggbWF0Y2ggPSByZS5maXJzdE1hdGNoKGZvcm1hdHRlZFN0cmluZyk7CiAgICBpZiAobWF0Y2ggIT0gbnVsbCkgewogICAgICBpbnQgcGFyc2VJbnRPclplcm8oU3RyaW5nIG1hdGNoZWQpIHsKICAgICAgICBpZiAobWF0Y2hlZCA9PSBudWxsKSByZXR1cm4gMDsKICAgICAgICByZXR1cm4gaW50LnBhcnNlKG1hdGNoZWQpOwogICAgICB9CgogICAgICAvLyBQYXJzZXMgZnJhY3Rpb25hbCBzZWNvbmQgZGlnaXRzIG9mICcuKFxkKyknIGludG8gdGhlIGNvbWJpbmVkCiAgICAgIC8vIG1pY3Jvc2Vjb25kcy4gV2Ugb25seSB1c2UgdGhlIGZpcnN0IDYgZGlnaXRzIGJlY2F1c2Ugb2YgRGF0ZVRpbWUKICAgICAgLy8gcHJlY2lzaW9uIG9mIDk5OSBtaWxsaXNlY29uZHMgYW5kIDk5OSBtaWNyb3NlY29uZHMuCiAgICAgIGludCBwYXJzZU1pbGxpQW5kTWljcm9zZWNvbmRzKFN0cmluZyBtYXRjaGVkKSB7CiAgICAgICAgaWYgKG1hdGNoZWQgPT0gbnVsbCkgcmV0dXJuIDA7CiAgICAgICAgaW50IGxlbmd0aCA9IG1hdGNoZWQubGVuZ3RoOwogICAgICAgIGFzc2VydChsZW5ndGggPj0gMSk7CiAgICAgICAgaW50IHJlc3VsdCA9IDA7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspIHsKICAgICAgICAgIHJlc3VsdCAqPSAxMDsKICAgICAgICAgIGlmIChpIDwgbWF0Y2hlZC5sZW5ndGgpIHsKICAgICAgICAgICAgcmVzdWx0ICs9IG1hdGNoZWQuY29kZVVuaXRBdChpKSBeIDB4MzA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KCiAgICAgIGludCB5ZWFycyA9IGludC5wYXJzZShtYXRjaFsxXSk7CiAgICAgIGludCBtb250aCA9IGludC5wYXJzZShtYXRjaFsyXSk7CiAgICAgIGludCBkYXkgPSBpbnQucGFyc2UobWF0Y2hbM10pOwogICAgICBpbnQgaG91ciA9IHBhcnNlSW50T3JaZXJvKG1hdGNoWzRdKTsKICAgICAgaW50IG1pbnV0ZSA9IHBhcnNlSW50T3JaZXJvKG1hdGNoWzVdKTsKICAgICAgaW50IHNlY29uZCA9IHBhcnNlSW50T3JaZXJvKG1hdGNoWzZdKTsKICAgICAgaW50IG1pbGxpQW5kTWljcm9zZWNvbmRzID0gcGFyc2VNaWxsaUFuZE1pY3Jvc2Vjb25kcyhtYXRjaFs3XSk7CiAgICAgIGludCBtaWxsaXNlY29uZCA9CiAgICAgICAgICBtaWxsaUFuZE1pY3Jvc2Vjb25kcyB+LyBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJNaWxsaXNlY29uZDsKICAgICAgaW50IG1pY3Jvc2Vjb25kID0KICAgICAgICAgIG1pbGxpQW5kTWljcm9zZWNvbmRzLnJlbWFpbmRlcihEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJNaWxsaXNlY29uZCk7CiAgICAgIGJvb2wgaXNVdGMgPSBmYWxzZTsKICAgICAgaWYgKG1hdGNoWzhdICE9IG51bGwpIHsKICAgICAgICAvLyB0aW1lem9uZSBwYXJ0CiAgICAgICAgaXNVdGMgPSB0cnVlOwogICAgICAgIGlmIChtYXRjaFs5XSAhPSBudWxsKSB7CiAgICAgICAgICAvLyB0aW1lem9uZSBvdGhlciB0aGFuICdaJyBhbmQgJ3onLgogICAgICAgICAgaW50IHNpZ24gPSAobWF0Y2hbOV0gPT0gJy0nKSA/IC0xIDogMTsKICAgICAgICAgIGludCBob3VyRGlmZmVyZW5jZSA9IGludC5wYXJzZShtYXRjaFsxMF0pOwogICAgICAgICAgaW50IG1pbnV0ZURpZmZlcmVuY2UgPSBwYXJzZUludE9yWmVybyhtYXRjaFsxMV0pOwogICAgICAgICAgbWludXRlRGlmZmVyZW5jZSArPSA2MCAqIGhvdXJEaWZmZXJlbmNlOwogICAgICAgICAgbWludXRlIC09IHNpZ24gKiBtaW51dGVEaWZmZXJlbmNlOwogICAgICAgIH0KICAgICAgfQogICAgICBpbnQgdmFsdWUgPSBfYnJva2VuRG93bkRhdGVUb1ZhbHVlKHllYXJzLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsCiAgICAgICAgICBzZWNvbmQsIG1pbGxpc2Vjb25kLCBtaWNyb3NlY29uZCwgaXNVdGMpOwogICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiVGltZSBvdXQgb2YgcmFuZ2UiLCBmb3JtYXR0ZWRTdHJpbmcpOwogICAgICB9CiAgICAgIHJldHVybiBEYXRlVGltZS5fd2l0aFZhbHVlKHZhbHVlLCBpc1V0YzogaXNVdGMpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIGRhdGUgZm9ybWF0IiwgZm9ybWF0dGVkU3RyaW5nKTsKICAgIH0KICB9CgogIC8qKgogICAqIENvbnN0cnVjdHMgYSBuZXcgW0RhdGVUaW1lXSBpbnN0YW5jZSBiYXNlZCBvbiBbZm9ybWF0dGVkU3RyaW5nXS4KICAgKgogICAqIFdvcmtzIGxpa2UgW3BhcnNlXSBleGNlcHQgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYG51bGxgCiAgICogd2hlcmUgW3BhcnNlXSB3b3VsZCB0aHJvdyBhIFtGb3JtYXRFeGNlcHRpb25dLgogICAqLwogIHN0YXRpYyBEYXRlVGltZSB0cnlQYXJzZShTdHJpbmcgZm9ybWF0dGVkU3RyaW5nKSB7CiAgICAvLyBUT0RPOiBPcHRpbWl6ZSB0byBhdm9pZCB0aHJvd2luZy4KICAgIHRyeSB7CiAgICAgIHJldHVybiBwYXJzZShmb3JtYXR0ZWRTdHJpbmcpOwogICAgfSBvbiBGb3JtYXRFeGNlcHRpb24gewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIHN0YXRpYyBjb25zdCBpbnQgX21heE1pbGxpc2Vjb25kc1NpbmNlRXBvY2ggPSA4NjQwMDAwMDAwMDAwMDAwOwoKICAvKioKICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFtEYXRlVGltZV0gaW5zdGFuY2UKICAgKiB3aXRoIHRoZSBnaXZlbiBbbWlsbGlzZWNvbmRzU2luY2VFcG9jaF0uCiAgICoKICAgKiBJZiBbaXNVdGNdIGlzIGZhbHNlIHRoZW4gdGhlIGRhdGUgaXMgaW4gdGhlIGxvY2FsIHRpbWUgem9uZS4KICAgKgogICAqIFRoZSBjb25zdHJ1Y3RlZCBbRGF0ZVRpbWVdIHJlcHJlc2VudHMKICAgKiAxOTcwLTAxLTAxVDAwOjAwOjAwWiArIFttaWxsaXNlY29uZHNTaW5jZUVwb2NoXSBtcyBpbiB0aGUgZ2l2ZW4KICAgKiB0aW1lIHpvbmUgKGxvY2FsIG9yIFVUQykuCiAgICovCiAgZXh0ZXJuYWwgRGF0ZVRpbWUuZnJvbU1pbGxpc2Vjb25kc1NpbmNlRXBvY2goaW50IG1pbGxpc2Vjb25kc1NpbmNlRXBvY2gsCiAgICAgIHtib29sIGlzVXRjID0gZmFsc2V9KTsKCiAgLyoqCiAgICogQ29uc3RydWN0cyBhIG5ldyBbRGF0ZVRpbWVdIGluc3RhbmNlCiAgICogd2l0aCB0aGUgZ2l2ZW4gW21pY3Jvc2Vjb25kc1NpbmNlRXBvY2hdLgogICAqCiAgICogSWYgW2lzVXRjXSBpcyBmYWxzZSB0aGVuIHRoZSBkYXRlIGlzIGluIHRoZSBsb2NhbCB0aW1lIHpvbmUuCiAgICoKICAgKiBUaGUgY29uc3RydWN0ZWQgW0RhdGVUaW1lXSByZXByZXNlbnRzCiAgICogMTk3MC0wMS0wMVQwMDowMDowMFogKyBbbWljcm9zZWNvbmRzU2luY2VFcG9jaF0gdXMgaW4gdGhlIGdpdmVuCiAgICogdGltZSB6b25lIChsb2NhbCBvciBVVEMpLgogICAqLwogIGV4dGVybmFsIERhdGVUaW1lLmZyb21NaWNyb3NlY29uZHNTaW5jZUVwb2NoKGludCBtaWNyb3NlY29uZHNTaW5jZUVwb2NoLAogICAgICB7Ym9vbCBpc1V0YyA9IGZhbHNlfSk7CgogIC8qKgogICAqIENvbnN0cnVjdHMgYSBuZXcgW0RhdGVUaW1lXSBpbnN0YW5jZSB3aXRoIHRoZSBnaXZlbiB2YWx1ZS4KICAgKgogICAqIElmIFtpc1V0Y10gaXMgZmFsc2UgdGhlbiB0aGUgZGF0ZSBpcyBpbiB0aGUgbG9jYWwgdGltZSB6b25lLgogICAqLwogIERhdGVUaW1lLl93aXRoVmFsdWUodGhpcy5fdmFsdWUsIHt0aGlzLmlzVXRjfSkgewogICAgaWYgKG1pbGxpc2Vjb25kc1NpbmNlRXBvY2guYWJzKCkgPiBfbWF4TWlsbGlzZWNvbmRzU2luY2VFcG9jaCB8fAogICAgICAgIChtaWxsaXNlY29uZHNTaW5jZUVwb2NoLmFicygpID09IF9tYXhNaWxsaXNlY29uZHNTaW5jZUVwb2NoICYmCiAgICAgICAgICAgIG1pY3Jvc2Vjb25kICE9IDApKSB7CiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAiRGF0ZVRpbWUgaXMgb3V0c2lkZSB2YWxpZCByYW5nZTogJG1pbGxpc2Vjb25kc1NpbmNlRXBvY2giKTsKICAgIH0KICAgIGlmIChpc1V0YyA9PSBudWxsKSB7CiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoIidpc1V0YycgZmxhZyBtYXkgbm90IGJlICdudWxsJyIpOwogICAgfQogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIFtvdGhlcl0gaXMgYSBbRGF0ZVRpbWVdIGF0IHRoZSBzYW1lIG1vbWVudCBhbmQgaW4gdGhlCiAgICogc2FtZSB0aW1lIHpvbmUgKFVUQyBvciBsb2NhbCkuCiAgICoKICAgKiBgYGAKICAgKiB2YXIgZERheVV0YyA9IG5ldyBEYXRlVGltZS51dGMoMTk0NCwgNiwgNik7CiAgICogdmFyIGREYXlMb2NhbCA9IGREYXlVdGMudG9Mb2NhbCgpOwogICAqCiAgICogLy8gVGhlc2UgdHdvIGRhdGVzIGFyZSBhdCB0aGUgc2FtZSBtb21lbnQsIGJ1dCBhcmUgaW4gZGlmZmVyZW50IHpvbmVzLgogICAqIGFzc2VydChkRGF5VXRjICE9IGREYXlMb2NhbCk7CiAgICogYGBgCiAgICoKICAgKiBTZWUgW2lzQXRTYW1lTW9tZW50QXNdIGZvciBhIGNvbXBhcmlzb24gdGhhdCBjb21wYXJlcyBtb21lbnRzIGluIHRpbWUKICAgKiBpbmRlcGVuZGVudGx5IG9mIHRoZWlyIHpvbmVzLgogICAqLwogIGV4dGVybmFsIGJvb2wgb3BlcmF0b3IgPT0oZHluYW1pYyBvdGhlcik7CgogIC8qKgogICAqIFJldHVybnMgdHJ1ZSBpZiBbdGhpc10gb2NjdXJzIGJlZm9yZSBbb3RoZXJdLgogICAqCiAgICogVGhlIGNvbXBhcmlzb24gaXMgaW5kZXBlbmRlbnQKICAgKiBvZiB3aGV0aGVyIHRoZSB0aW1lIGlzIGluIFVUQyBvciBpbiB0aGUgbG9jYWwgdGltZSB6b25lLgogICAqCiAgICogYGBgCiAgICogdmFyIG5vdyA9IG5ldyBEYXRlVGltZS5ub3coKTsKICAgKiB2YXIgZWFybGllciA9IG5vdy5zdWJ0cmFjdChjb25zdCBEdXJhdGlvbihzZWNvbmRzOiA1KSk7CiAgICogYXNzZXJ0KGVhcmxpZXIuaXNCZWZvcmUobm93KSk7CiAgICogYXNzZXJ0KCFub3cuaXNCZWZvcmUobm93KSk7CiAgICoKICAgKiAvLyBUaGlzIHJlbGF0aW9uIHN0YXlzIHRoZSBzYW1lLCBldmVuIHdoZW4gY2hhbmdpbmcgdGltZXpvbmVzLgogICAqIGFzc2VydChlYXJsaWVyLmlzQmVmb3JlKG5vdy50b1V0YygpKSk7CiAgICogYXNzZXJ0KGVhcmxpZXIudG9VdGMoKS5pc0JlZm9yZShub3cpKTsKICAgKgogICAqIGFzc2VydCghbm93LnRvVXRjKCkuaXNCZWZvcmUobm93KSk7CiAgICogYXNzZXJ0KCFub3cuaXNCZWZvcmUobm93LnRvVXRjKCkpKTsKICAgKiBgYGAKICAgKi8KICBleHRlcm5hbCBib29sIGlzQmVmb3JlKERhdGVUaW1lIG90aGVyKTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIFt0aGlzXSBvY2N1cnMgYWZ0ZXIgW290aGVyXS4KICAgKgogICAqIFRoZSBjb21wYXJpc29uIGlzIGluZGVwZW5kZW50CiAgICogb2Ygd2hldGhlciB0aGUgdGltZSBpcyBpbiBVVEMgb3IgaW4gdGhlIGxvY2FsIHRpbWUgem9uZS4KICAgKgogICAqIGBgYAogICAqIHZhciBub3cgPSBuZXcgRGF0ZVRpbWUubm93KCk7CiAgICogdmFyIGxhdGVyID0gbm93LmFkZChjb25zdCBEdXJhdGlvbihzZWNvbmRzOiA1KSk7CiAgICogYXNzZXJ0KGxhdGVyLmlzQWZ0ZXIobm93KSk7CiAgICogYXNzZXJ0KCFub3cuaXNCZWZvcmUobm93KSk7CiAgICoKICAgKiAvLyBUaGlzIHJlbGF0aW9uIHN0YXlzIHRoZSBzYW1lLCBldmVuIHdoZW4gY2hhbmdpbmcgdGltZXpvbmVzLgogICAqIGFzc2VydChsYXRlci5pc0FmdGVyKG5vdy50b1V0YygpKSk7CiAgICogYXNzZXJ0KGxhdGVyLnRvVXRjKCkuaXNBZnRlcihub3cpKTsKICAgKgogICAqIGFzc2VydCghbm93LnRvVXRjKCkuaXNCZWZvcmUobm93KSk7CiAgICogYXNzZXJ0KCFub3cuaXNCZWZvcmUobm93LnRvVXRjKCkpKTsKICAgKiBgYGAKICAgKi8KICBleHRlcm5hbCBib29sIGlzQWZ0ZXIoRGF0ZVRpbWUgb3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgW3RoaXNdIG9jY3VycyBhdCB0aGUgc2FtZSBtb21lbnQgYXMgW290aGVyXS4KICAgKgogICAqIFRoZSBjb21wYXJpc29uIGlzIGluZGVwZW5kZW50IG9mIHdoZXRoZXIgdGhlIHRpbWUgaXMgaW4gVVRDIG9yIGluIHRoZSBsb2NhbAogICAqIHRpbWUgem9uZS4KICAgKgogICAqIGBgYAogICAqIHZhciBub3cgPSBuZXcgRGF0ZVRpbWUubm93KCk7CiAgICogdmFyIGxhdGVyID0gbm93LmFkZChjb25zdCBEdXJhdGlvbihzZWNvbmRzOiA1KSk7CiAgICogYXNzZXJ0KCFsYXRlci5pc0F0U2FtZU1vbWVudEFzKG5vdykpOwogICAqIGFzc2VydChub3cuaXNBdFNhbWVNb21lbnRBcyhub3cpKTsKICAgKgogICAqIC8vIFRoaXMgcmVsYXRpb24gc3RheXMgdGhlIHNhbWUsIGV2ZW4gd2hlbiBjaGFuZ2luZyB0aW1lem9uZXMuCiAgICogYXNzZXJ0KCFsYXRlci5pc0F0U2FtZU1vbWVudEFzKG5vdy50b1V0YygpKSk7CiAgICogYXNzZXJ0KCFsYXRlci50b1V0YygpLmlzQXRTYW1lTW9tZW50QXMobm93KSk7CiAgICoKICAgKiBhc3NlcnQobm93LnRvVXRjKCkuaXNBdFNhbWVNb21lbnRBcyhub3cpKTsKICAgKiBhc3NlcnQobm93LmlzQXRTYW1lTW9tZW50QXMobm93LnRvVXRjKCkpKTsKICAgKiBgYGAKICAgKi8KICBleHRlcm5hbCBib29sIGlzQXRTYW1lTW9tZW50QXMoRGF0ZVRpbWUgb3RoZXIpOwoKICAvKioKICAgKiBDb21wYXJlcyB0aGlzIERhdGVUaW1lIG9iamVjdCB0byBbb3RoZXJdLAogICAqIHJldHVybmluZyB6ZXJvIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWFsLgogICAqCiAgICogUmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIGlmIHRoaXMgRGF0ZVRpbWUgW2lzQmVmb3JlXSBbb3RoZXJdLiBJdCByZXR1cm5zIDAKICAgKiBpZiBpdCBbaXNBdFNhbWVNb21lbnRBc10gW290aGVyXSwgYW5kIHJldHVybnMgYSBwb3NpdGl2ZSB2YWx1ZSBvdGhlcndpc2UKICAgKiAod2hlbiB0aGlzIFtpc0FmdGVyXSBbb3RoZXJdKS4KICAgKi8KICBleHRlcm5hbCBpbnQgY29tcGFyZVRvKERhdGVUaW1lIG90aGVyKTsKCiAgaW50IGdldCBoYXNoQ29kZSA9PiAoX3ZhbHVlIF4gKF92YWx1ZSA+PiAzMCkpICYgMHgzRkZGRkZGRjsKCiAgLyoqCiAgICogUmV0dXJucyB0aGlzIERhdGVUaW1lIHZhbHVlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmUuCiAgICoKICAgKiBSZXR1cm5zIFt0aGlzXSBpZiBpdCBpcyBhbHJlYWR5IGluIHRoZSBsb2NhbCB0aW1lIHpvbmUuCiAgICogT3RoZXJ3aXNlIHRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG86CiAgICoKICAgKiBgYGAKICAgKiBuZXcgRGF0ZVRpbWUuZnJvbU1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gobWljcm9zZWNvbmRzU2luY2VFcG9jaCwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNVdGM6IGZhbHNlKQogICAqIGBgYAogICAqLwogIERhdGVUaW1lIHRvTG9jYWwoKSB7CiAgICBpZiAoaXNVdGMpIHsKICAgICAgcmV0dXJuIERhdGVUaW1lLl93aXRoVmFsdWUoX3ZhbHVlLCBpc1V0YzogZmFsc2UpOwogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoaXMgRGF0ZVRpbWUgdmFsdWUgaW4gdGhlIFVUQyB0aW1lIHpvbmUuCiAgICoKICAgKiBSZXR1cm5zIFt0aGlzXSBpZiBpdCBpcyBhbHJlYWR5IGluIFVUQy4KICAgKiBPdGhlcndpc2UgdGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0bzoKICAgKgogICAqIGBgYAogICAqIG5ldyBEYXRlVGltZS5mcm9tTWljcm9zZWNvbmRzU2luY2VFcG9jaChtaWNyb3NlY29uZHNTaW5jZUVwb2NoLAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1V0YzogdHJ1ZSkKICAgKiBgYGAKICAgKi8KICBEYXRlVGltZSB0b1V0YygpIHsKICAgIGlmIChpc1V0YykgcmV0dXJuIHRoaXM7CiAgICByZXR1cm4gRGF0ZVRpbWUuX3dpdGhWYWx1ZShfdmFsdWUsIGlzVXRjOiB0cnVlKTsKICB9CgogIHN0YXRpYyBTdHJpbmcgX2ZvdXJEaWdpdHMoaW50IG4pIHsKICAgIGludCBhYnNOID0gbi5hYnMoKTsKICAgIFN0cmluZyBzaWduID0gbiA8IDAgPyAiLSIgOiAiIjsKICAgIGlmIChhYnNOID49IDEwMDApIHJldHVybiAiJG4iOwogICAgaWYgKGFic04gPj0gMTAwKSByZXR1cm4gIiR7c2lnbn0wJGFic04iOwogICAgaWYgKGFic04gPj0gMTApIHJldHVybiAiJHtzaWdufTAwJGFic04iOwogICAgcmV0dXJuICIke3NpZ259MDAwJGFic04iOwogIH0KCiAgc3RhdGljIFN0cmluZyBfc2l4RGlnaXRzKGludCBuKSB7CiAgICBhc3NlcnQobiA8IC05OTk5IHx8IG4gPiA5OTk5KTsKICAgIGludCBhYnNOID0gbi5hYnMoKTsKICAgIFN0cmluZyBzaWduID0gbiA8IDAgPyAiLSIgOiAiKyI7CiAgICBpZiAoYWJzTiA+PSAxMDAwMDApIHJldHVybiAiJHNpZ24kYWJzTiI7CiAgICByZXR1cm4gIiR7c2lnbn0wJGFic04iOwogIH0KCiAgc3RhdGljIFN0cmluZyBfdGhyZWVEaWdpdHMoaW50IG4pIHsKICAgIGlmIChuID49IDEwMCkgcmV0dXJuICIke259IjsKICAgIGlmIChuID49IDEwKSByZXR1cm4gIjAke259IjsKICAgIHJldHVybiAiMDAke259IjsKICB9CgogIHN0YXRpYyBTdHJpbmcgX3R3b0RpZ2l0cyhpbnQgbikgewogICAgaWYgKG4gPj0gMTApIHJldHVybiAiJHtufSI7CiAgICByZXR1cm4gIjAke259IjsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgZm9yIHRoaXMgaW5zdGFuY2UuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgc3RyaW5nIGlzIGNvbnN0cnVjdGVkIGZvciB0aGUgdGltZSB6b25lIG9mIHRoaXMgaW5zdGFuY2UuCiAgICogVGhlIGB0b1N0cmluZygpYCBtZXRob2QgcHJvdmlkZXMgYSBzaW1wbHkgZm9ybWF0dGVkIHN0cmluZy4KICAgKiBJdCBkb2VzIG5vdCBzdXBwb3J0IGludGVybmF0aW9uYWxpemVkIHN0cmluZ3MuCiAgICogVXNlIHRoZSBbaW50bF0oaHR0cHM6Ly9wdWIuZGV2L3BhY2thZ2VzL2ludGwpIHBhY2thZ2UKICAgKiBhdCB0aGUgcHViIHNoYXJlZCBwYWNrYWdlcyByZXBvLgogICAqCiAgICogVGhlIHJlc3VsdGluZyBzdHJpbmcgY2FuIGJlIHBhcnNlZCBiYWNrIHVzaW5nIFtwYXJzZV0uCiAgICovCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nIHkgPSBfZm91ckRpZ2l0cyh5ZWFyKTsKICAgIFN0cmluZyBtID0gX3R3b0RpZ2l0cyhtb250aCk7CiAgICBTdHJpbmcgZCA9IF90d29EaWdpdHMoZGF5KTsKICAgIFN0cmluZyBoID0gX3R3b0RpZ2l0cyhob3VyKTsKICAgIFN0cmluZyBtaW4gPSBfdHdvRGlnaXRzKG1pbnV0ZSk7CiAgICBTdHJpbmcgc2VjID0gX3R3b0RpZ2l0cyhzZWNvbmQpOwogICAgU3RyaW5nIG1zID0gX3RocmVlRGlnaXRzKG1pbGxpc2Vjb25kKTsKICAgIFN0cmluZyB1cyA9IG1pY3Jvc2Vjb25kID09IDAgPyAiIiA6IF90aHJlZURpZ2l0cyhtaWNyb3NlY29uZCk7CiAgICBpZiAoaXNVdGMpIHsKICAgICAgcmV0dXJuICIkeS0kbS0kZCAkaDokbWluOiRzZWMuJG1zJHt1c31aIjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAiJHktJG0tJGQgJGg6JG1pbjokc2VjLiRtcyR1cyI7CiAgICB9CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGFuIElTTy04NjAxIGZ1bGwtcHJlY2lzaW9uIGV4dGVuZGVkIGZvcm1hdCByZXByZXNlbnRhdGlvbi4KICAgKgogICAqIFRoZSBmb3JtYXQgaXMgYHl5eXktTU0tZGRUSEg6bW06c3MubW1tdXV1WmAgZm9yIFVUQyB0aW1lLCBhbmQKICAgKiBgeXl5eS1NTS1kZFRISDptbTpzcy5tbW11dXVgIChubyB0cmFpbGluZyAiWiIpIGZvciBsb2NhbC9ub24tVVRDIHRpbWUsCiAgICogd2hlcmU6CiAgICoKICAgKiAqIGB5eXl5YCBpcyBhLCBwb3NzaWJseSBuZWdhdGl2ZSwgZm91ciBkaWdpdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciwKICAgKiAgIGlmIHRoZSB5ZWFyIGlzIGluIHRoZSByYW5nZSAtOTk5OSB0byA5OTk5LAogICAqICAgb3RoZXJ3aXNlIGl0IGlzIGEgc2lnbmVkIHNpeCBkaWdpdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhci4KICAgKiAqIGBNTWAgaXMgdGhlIG1vbnRoIGluIHRoZSByYW5nZSAwMSB0byAxMiwKICAgKiAqIGBkZGAgaXMgdGhlIGRheSBvZiB0aGUgbW9udGggaW4gdGhlIHJhbmdlIDAxIHRvIDMxLAogICAqICogYEhIYCBhcmUgaG91cnMgaW4gdGhlIHJhbmdlIDAwIHRvIDIzLAogICAqICogYG1tYCBhcmUgbWludXRlcyBpbiB0aGUgcmFuZ2UgMDAgdG8gNTksCiAgICogKiBgc3NgIGFyZSBzZWNvbmRzIGluIHRoZSByYW5nZSAwMCB0byA1OSAobm8gbGVhcCBzZWNvbmRzKSwKICAgKiAqIGBtbW1gIGFyZSBtaWxsaXNlY29uZHMgaW4gdGhlIHJhbmdlIDAwMCB0byA5OTksIGFuZAogICAqICogYHV1dWAgYXJlIG1pY3Jvc2Vjb25kcyBpbiB0aGUgcmFuZ2UgMDAxIHRvIDk5OS4gSWYgW21pY3Jvc2Vjb25kXSBlcXVhbHMKICAgKiAgIDAsIHRoZW4gdGhpcyBwYXJ0IGlzIG9taXR0ZWQuCiAgICoKICAgKiBUaGUgcmVzdWx0aW5nIHN0cmluZyBjYW4gYmUgcGFyc2VkIGJhY2sgdXNpbmcgW3BhcnNlXS4KICAgKi8KICBTdHJpbmcgdG9Jc284NjAxU3RyaW5nKCkgewogICAgU3RyaW5nIHkgPQogICAgICAgICh5ZWFyID49IC05OTk5ICYmIHllYXIgPD0gOTk5OSkgPyBfZm91ckRpZ2l0cyh5ZWFyKSA6IF9zaXhEaWdpdHMoeWVhcik7CiAgICBTdHJpbmcgbSA9IF90d29EaWdpdHMobW9udGgpOwogICAgU3RyaW5nIGQgPSBfdHdvRGlnaXRzKGRheSk7CiAgICBTdHJpbmcgaCA9IF90d29EaWdpdHMoaG91cik7CiAgICBTdHJpbmcgbWluID0gX3R3b0RpZ2l0cyhtaW51dGUpOwogICAgU3RyaW5nIHNlYyA9IF90d29EaWdpdHMoc2Vjb25kKTsKICAgIFN0cmluZyBtcyA9IF90aHJlZURpZ2l0cyhtaWxsaXNlY29uZCk7CiAgICBTdHJpbmcgdXMgPSBtaWNyb3NlY29uZCA9PSAwID8gIiIgOiBfdGhyZWVEaWdpdHMobWljcm9zZWNvbmQpOwogICAgaWYgKGlzVXRjKSB7CiAgICAgIHJldHVybiAiJHktJG0tJHtkfVQkaDokbWluOiRzZWMuJG1zJHt1c31aIjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAiJHktJG0tJHtkfVQkaDokbWluOiRzZWMuJG1zJHVzIjsKICAgIH0KICB9CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgW0RhdGVUaW1lXSBpbnN0YW5jZSB3aXRoIFtkdXJhdGlvbl0gYWRkZWQgdG8gW3RoaXNdLgogICAqCiAgICogYGBgCiAgICogdmFyIHRvZGF5ID0gbmV3IERhdGVUaW1lLm5vdygpOwogICAqIHZhciBmaWZ0eURheXNGcm9tTm93ID0gdG9kYXkuYWRkKG5ldyBEdXJhdGlvbihkYXlzOiA1MCkpOwogICAqIGBgYAogICAqCiAgICogTm90aWNlIHRoYXQgdGhlIGR1cmF0aW9uIGJlaW5nIGFkZGVkIGlzIGFjdHVhbGx5IDUwICogMjQgKiA2MCAqIDYwCiAgICogc2Vjb25kcy4gSWYgdGhlIHJlc3VsdGluZyBgRGF0ZVRpbWVgIGhhcyBhIGRpZmZlcmVudCBkYXlsaWdodCBzYXZpbmcgb2Zmc2V0CiAgICogdGhhbiBgdGhpc2AsIHRoZW4gdGhlIHJlc3VsdCB3b24ndCBoYXZlIHRoZSBzYW1lIHRpbWUtb2YtZGF5IGFzIGB0aGlzYCwgYW5kCiAgICogbWF5IG5vdCBldmVuIGhpdCB0aGUgY2FsZW5kYXIgZGF0ZSA1MCBkYXlzIGxhdGVyLgogICAqCiAgICogQmUgY2FyZWZ1bCB3aGVuIHdvcmtpbmcgd2l0aCBkYXRlcyBpbiBsb2NhbCB0aW1lLgogICAqLwogIGV4dGVybmFsIERhdGVUaW1lIGFkZChEdXJhdGlvbiBkdXJhdGlvbik7CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgW0RhdGVUaW1lXSBpbnN0YW5jZSB3aXRoIFtkdXJhdGlvbl0gc3VidHJhY3RlZCBmcm9tIFt0aGlzXS4KICAgKgogICAqIGBgYAogICAqIERhdGVUaW1lIHRvZGF5ID0gbmV3IERhdGVUaW1lLm5vdygpOwogICAqIERhdGVUaW1lIGZpZnR5RGF5c0FnbyA9IHRvZGF5LnN1YnRyYWN0KG5ldyBEdXJhdGlvbihkYXlzOiA1MCkpOwogICAqIGBgYAogICAqCiAgICogTm90aWNlIHRoYXQgdGhlIGR1cmF0aW9uIGJlaW5nIHN1YnRyYWN0ZWQgaXMgYWN0dWFsbHkgNTAgKiAyNCAqIDYwICogNjAKICAgKiBzZWNvbmRzLiBJZiB0aGUgcmVzdWx0aW5nIGBEYXRlVGltZWAgaGFzIGEgZGlmZmVyZW50IGRheWxpZ2h0IHNhdmluZyBvZmZzZXQKICAgKiB0aGFuIGB0aGlzYCwgdGhlbiB0aGUgcmVzdWx0IHdvbid0IGhhdmUgdGhlIHNhbWUgdGltZS1vZi1kYXkgYXMgYHRoaXNgLCBhbmQKICAgKiBtYXkgbm90IGV2ZW4gaGl0IHRoZSBjYWxlbmRhciBkYXRlIDUwIGRheXMgZWFybGllci4KICAgKgogICAqIEJlIGNhcmVmdWwgd2hlbiB3b3JraW5nIHdpdGggZGF0ZXMgaW4gbG9jYWwgdGltZS4KICAgKi8KICBleHRlcm5hbCBEYXRlVGltZSBzdWJ0cmFjdChEdXJhdGlvbiBkdXJhdGlvbik7CgogIC8qKgogICAqIFJldHVybnMgYSBbRHVyYXRpb25dIHdpdGggdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBbdGhpc10gYW5kIFtvdGhlcl0uCiAgICoKICAgKiBgYGAKICAgKiB2YXIgYmVybGluV2FsbEZlbGwgPSBuZXcgRGF0ZVRpbWUudXRjKDE5ODksIERhdGVUaW1lLm5vdmVtYmVyLCA5KTsKICAgKiB2YXIgZERheSA9IG5ldyBEYXRlVGltZS51dGMoMTk0NCwgRGF0ZVRpbWUuanVuZSwgNik7CiAgICoKICAgKiBEdXJhdGlvbiBkaWZmZXJlbmNlID0gYmVybGluV2FsbEZlbGwuZGlmZmVyZW5jZShkRGF5KTsKICAgKiBhc3NlcnQoZGlmZmVyZW5jZS5pbkRheXMgPT0gMTY1OTIpOwogICAqIGBgYAogICAqCiAgICogVGhlIGRpZmZlcmVuY2UgaXMgbWVhc3VyZWQgaW4gc2Vjb25kcyBhbmQgZnJhY3Rpb25zIG9mIHNlY29uZHMuCiAgICogVGhlIGRpZmZlcmVuY2UgYWJvdmUgY291bnRzIHRoZSBudW1iZXIgb2YgZnJhY3Rpb25hbCBzZWNvbmRzIGJldHdlZW4KICAgKiBtaWRuaWdodCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRob3NlIGRhdGVzLgogICAqIElmIHRoZSBkYXRlcyBhYm92ZSBoYWQgYmVlbiBpbiBsb2NhbCB0aW1lLCBub3QgVVRDLCB0aGVuIHRoZSBkaWZmZXJlbmNlCiAgICogYmV0d2VlbiB0d28gbWlkbmlnaHRzIG1heSBub3QgYmUgYSBtdWx0aXBsZSBvZiAyNCBob3VycyBkdWUgdG8gZGF5bGlnaHQKICAgKiBzYXZpbmcgZGlmZmVyZW5jZXMuCiAgICoKICAgKiBGb3IgZXhhbXBsZSwgaW4gQXVzdHJhbGlhLCBzaW1pbGFyIGNvZGUgdXNpbmcgbG9jYWwgdGltZSBpbnN0ZWFkIG9mIFVUQzoKICAgKgogICAqIGBgYAogICAqIHZhciBiZXJsaW5XYWxsRmVsbCA9IG5ldyBEYXRlVGltZSgxOTg5LCBEYXRlVGltZS5ub3ZlbWJlciwgOSk7CiAgICogdmFyIGREYXkgPSBuZXcgRGF0ZVRpbWUoMTk0NCwgRGF0ZVRpbWUuanVuZSwgNik7CiAgICogRHVyYXRpb24gZGlmZmVyZW5jZSA9IGJlcmxpbldhbGxGZWxsLmRpZmZlcmVuY2UoZERheSk7CiAgICogYXNzZXJ0KGRpZmZlcmVuY2UuaW5EYXlzID09IDE2NTkyKTsKICAgKiBgYGAKICAgKiB3aWxsIGZhaWwgYmVjYXVzZSB0aGUgZGlmZmVyZW5jZSBpcyBhY3R1YWxseSAxNjU5MSBkYXlzIGFuZCAyMyBob3VycywgYW5kCiAgICogW0R1cmF0aW9uLmluRGF5c10gb25seSByZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2hvbGUgZGF5cy4KICAgKi8KICBleHRlcm5hbCBEdXJhdGlvbiBkaWZmZXJlbmNlKERhdGVUaW1lIG90aGVyKTsKCiAgZXh0ZXJuYWwgRGF0ZVRpbWUuX2ludGVybmFsKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXksIGludCBob3VyLAogICAgICBpbnQgbWludXRlLCBpbnQgc2Vjb25kLCBpbnQgbWlsbGlzZWNvbmQsIGludCBtaWNyb3NlY29uZCwgYm9vbCBpc1V0Yyk7CgogIGV4dGVybmFsIERhdGVUaW1lLl9ub3coKTsKCiAgLy8vIFJldHVybnMgdGhlIHRpbWUgYXMgdmFsdWUgKG1pbGxpc2Vjb25kIG9yIG1pY3Jvc2Vjb25kIHNpbmNlIGVwb2NoKSwgb3IKICAvLy8gbnVsbCBpZiB0aGUgdmFsdWVzIGFyZSBvdXQgb2YgcmFuZ2UuCiAgZXh0ZXJuYWwgc3RhdGljIGludCBfYnJva2VuRG93bkRhdGVUb1ZhbHVlKAogICAgICBpbnQgeWVhciwKICAgICAgaW50IG1vbnRoLAogICAgICBpbnQgZGF5LAogICAgICBpbnQgaG91ciwKICAgICAgaW50IG1pbnV0ZSwKICAgICAgaW50IHNlY29uZCwKICAgICAgaW50IG1pbGxpc2Vjb25kLAogICAgICBpbnQgbWljcm9zZWNvbmQsCiAgICAgIGJvb2wgaXNVdGMpOwoKICAvKioKICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZQogICAqIHRoZSAiVW5peCBlcG9jaCIgMTk3MC0wMS0wMVQwMDowMDowMFogKFVUQykuCiAgICoKICAgKiBUaGlzIHZhbHVlIGlzIGluZGVwZW5kZW50IG9mIHRoZSB0aW1lIHpvbmUuCiAgICoKICAgKiBUaGlzIHZhbHVlIGlzIGF0IG1vc3QKICAgKiA4LDY0MCwwMDAsMDAwLDAwMCwwMDBtcyAoMTAwLDAwMCwwMDAgZGF5cykgZnJvbSB0aGUgVW5peCBlcG9jaC4KICAgKiBJbiBvdGhlciB3b3JkczogYG1pbGxpc2Vjb25kc1NpbmNlRXBvY2guYWJzKCkgPD0gODY0MDAwMDAwMDAwMDAwMGAuCiAgICovCiAgZXh0ZXJuYWwgaW50IGdldCBtaWxsaXNlY29uZHNTaW5jZUVwb2NoOwoKICAvKioKICAgKiBUaGUgbnVtYmVyIG9mIG1pY3Jvc2Vjb25kcyBzaW5jZQogICAqIHRoZSAiVW5peCBlcG9jaCIgMTk3MC0wMS0wMVQwMDowMDowMFogKFVUQykuCiAgICoKICAgKiBUaGlzIHZhbHVlIGlzIGluZGVwZW5kZW50IG9mIHRoZSB0aW1lIHpvbmUuCiAgICoKICAgKiBUaGlzIHZhbHVlIGlzIGF0IG1vc3QKICAgKiA4LDY0MCwwMDAsMDAwLDAwMCwwMDAsMDAwdXMgKDEwMCwwMDAsMDAwIGRheXMpIGZyb20gdGhlIFVuaXggZXBvY2guCiAgICogSW4gb3RoZXIgd29yZHM6IGBtaWNyb3NlY29uZHNTaW5jZUVwb2NoLmFicygpIDw9IDg2NDAwMDAwMDAwMDAwMDAwMDBgLgogICAqCiAgICogTm90ZSB0aGF0IHRoaXMgdmFsdWUgZG9lcyBub3QgZml0IGludG8gNTMgYml0cyAodGhlIHNpemUgb2YgYSBJRUVFIGRvdWJsZSkuCiAgICogQSBKYXZhU2NyaXB0IG51bWJlciBpcyBub3QgYWJsZSB0byBob2xkIHRoaXMgdmFsdWUuCiAgICovCiAgZXh0ZXJuYWwgaW50IGdldCBtaWNyb3NlY29uZHNTaW5jZUVwb2NoOwoKICAvKioKICAgKiBUaGUgdGltZSB6b25lIG5hbWUuCiAgICoKICAgKiBUaGlzIHZhbHVlIGlzIHByb3ZpZGVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGFuZCBtYXkgYmUgYW4KICAgKiBhYmJyZXZpYXRpb24gb3IgYSBmdWxsIG5hbWUuCiAgICoKICAgKiBJbiB0aGUgYnJvd3NlciBvciBvbiBVbml4LWxpa2Ugc3lzdGVtcyBjb21tb25seSByZXR1cm5zIGFiYnJldmlhdGlvbnMsCiAgICogc3VjaCBhcyAiQ0VUIiBvciAiQ0VTVCIuIE9uIFdpbmRvd3MgcmV0dXJucyB0aGUgZnVsbCBuYW1lLCBmb3IgZXhhbXBsZQogICAqICJQYWNpZmljIFN0YW5kYXJkIFRpbWUiLgogICAqLwogIGV4dGVybmFsIFN0cmluZyBnZXQgdGltZVpvbmVOYW1lOwoKICAvKioKICAgKiBUaGUgdGltZSB6b25lIG9mZnNldCwgd2hpY2gKICAgKiBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGxvY2FsIHRpbWUgYW5kIFVUQy4KICAgKgogICAqIFRoZSBvZmZzZXQgaXMgcG9zaXRpdmUgZm9yIHRpbWUgem9uZXMgZWFzdCBvZiBVVEMuCiAgICoKICAgKiBOb3RlLCB0aGF0IEphdmFTY3JpcHQsIFB5dGhvbiBhbmQgQyByZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBVVEMgYW5kCiAgICogbG9jYWwgdGltZS4gSmF2YSwgQyMgYW5kIFJ1YnkgcmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gbG9jYWwgdGltZSBhbmQKICAgKiBVVEMuCiAgICovCiAgZXh0ZXJuYWwgRHVyYXRpb24gZ2V0IHRpbWVab25lT2Zmc2V0OwoKICAvKioKICAgKiBUaGUgeWVhci4KICAgKgogICAqIGBgYAogICAqIHZhciBtb29uTGFuZGluZyA9IERhdGVUaW1lLnBhcnNlKCIxOTY5LTA3LTIwIDIwOjE4OjA0WiIpOwogICAqIGFzc2VydChtb29uTGFuZGluZy55ZWFyID09IDE5NjkpOwogICAqIGBgYAogICAqLwogIGV4dGVybmFsIGludCBnZXQgeWVhcjsKCiAgLyoqCiAgICogVGhlIG1vbnRoIFsxLi4xMl0uCiAgICoKICAgKiBgYGAKICAgKiB2YXIgbW9vbkxhbmRpbmcgPSBEYXRlVGltZS5wYXJzZSgiMTk2OS0wNy0yMCAyMDoxODowNFoiKTsKICAgKiBhc3NlcnQobW9vbkxhbmRpbmcubW9udGggPT0gNyk7CiAgICogYXNzZXJ0KG1vb25MYW5kaW5nLm1vbnRoID09IERhdGVUaW1lLmp1bHkpOwogICAqIGBgYAogICAqLwogIGV4dGVybmFsIGludCBnZXQgbW9udGg7CgogIC8qKgogICAqIFRoZSBkYXkgb2YgdGhlIG1vbnRoIFsxLi4zMV0uCiAgICoKICAgKiBgYGAKICAgKiB2YXIgbW9vbkxhbmRpbmcgPSBEYXRlVGltZS5wYXJzZSgiMTk2OS0wNy0yMCAyMDoxODowNFoiKTsKICAgKiBhc3NlcnQobW9vbkxhbmRpbmcuZGF5ID09IDIwKTsKICAgKiBgYGAKICAgKi8KICBleHRlcm5hbCBpbnQgZ2V0IGRheTsKCiAgLyoqCiAgICogVGhlIGhvdXIgb2YgdGhlIGRheSwgZXhwcmVzc2VkIGFzIGluIGEgMjQtaG91ciBjbG9jayBbMC4uMjNdLgogICAqCiAgICogYGBgCiAgICogdmFyIG1vb25MYW5kaW5nID0gRGF0ZVRpbWUucGFyc2UoIjE5NjktMDctMjAgMjA6MTg6MDRaIik7CiAgICogYXNzZXJ0KG1vb25MYW5kaW5nLmhvdXIgPT0gMjApOwogICAqIGBgYAogICAqLwogIGV4dGVybmFsIGludCBnZXQgaG91cjsKCiAgLyoqCiAgICogVGhlIG1pbnV0ZSBbMC4uLjU5XS4KICAgKgogICAqIGBgYAogICAqIHZhciBtb29uTGFuZGluZyA9IERhdGVUaW1lLnBhcnNlKCIxOTY5LTA3LTIwIDIwOjE4OjA0WiIpOwogICAqIGFzc2VydChtb29uTGFuZGluZy5taW51dGUgPT0gMTgpOwogICAqIGBgYAogICAqLwogIGV4dGVybmFsIGludCBnZXQgbWludXRlOwoKICAvKioKICAgKiBUaGUgc2Vjb25kIFswLi4uNTldLgogICAqCiAgICogYGBgCiAgICogdmFyIG1vb25MYW5kaW5nID0gRGF0ZVRpbWUucGFyc2UoIjE5NjktMDctMjAgMjA6MTg6MDRaIik7CiAgICogYXNzZXJ0KG1vb25MYW5kaW5nLnNlY29uZCA9PSA0KTsKICAgKiBgYGAKICAgKi8KICBleHRlcm5hbCBpbnQgZ2V0IHNlY29uZDsKCiAgLyoqCiAgICogVGhlIG1pbGxpc2Vjb25kIFswLi4uOTk5XS4KICAgKgogICAqIGBgYAogICAqIHZhciBtb29uTGFuZGluZyA9IERhdGVUaW1lLnBhcnNlKCIxOTY5LTA3LTIwIDIwOjE4OjA0WiIpOwogICAqIGFzc2VydChtb29uTGFuZGluZy5taWxsaXNlY29uZCA9PSAwKTsKICAgKiBgYGAKICAgKi8KICBleHRlcm5hbCBpbnQgZ2V0IG1pbGxpc2Vjb25kOwoKICAvKioKICAgKiBUaGUgbWljcm9zZWNvbmQgWzAuLi45OTldLgogICAqCiAgICogYGBgCiAgICogdmFyIG1vb25MYW5kaW5nID0gRGF0ZVRpbWUucGFyc2UoIjE5NjktMDctMjAgMjA6MTg6MDRaIik7CiAgICogYXNzZXJ0KG1vb25MYW5kaW5nLm1pY3Jvc2Vjb25kID09IDApOwogICAqIGBgYAogICAqLwogIGV4dGVybmFsIGludCBnZXQgbWljcm9zZWNvbmQ7CgogIC8qKgogICAqIFRoZSBkYXkgb2YgdGhlIHdlZWsgW21vbmRheV0uLltzdW5kYXldLgogICAqCiAgICogSW4gYWNjb3JkYW5jZSB3aXRoIElTTyA4NjAxCiAgICogYSB3ZWVrIHN0YXJ0cyB3aXRoIE1vbmRheSwgd2hpY2ggaGFzIHRoZSB2YWx1ZSAxLgogICAqCiAgICogYGBgCiAgICogdmFyIG1vb25MYW5kaW5nID0gRGF0ZVRpbWUucGFyc2UoIjE5NjktMDctMjAgMjA6MTg6MDRaIik7CiAgICogYXNzZXJ0KG1vb25MYW5kaW5nLndlZWtkYXkgPT0gNyk7CiAgICogYXNzZXJ0KG1vb25MYW5kaW5nLndlZWtkYXkgPT0gRGF0ZVRpbWUuc3VuZGF5KTsKICAgKiBgYGAKICAgKi8KICBleHRlcm5hbCBpbnQgZ2V0IHdlZWtkYXk7CgogIC8qCiAgICogZGF0ZSA6Oj0geWVhcmRhdGUgdGltZV9vcHQgdGltZXpvbmVfb3B0CiAgICogeWVhcmRhdGUgOjo9IHllYXIgY29sb25fb3B0IG1vbnRoIGNvbG9uX29wdCBkYXkKICAgKiB5ZWFyIDo6PSBzaWduX29wdCBkaWdpdHs0LDZ9CiAgICogY29sb25fb3B0IDo6IDxlbXB0eT4gfCAnOicKICAgKiBzaWduIDo6PSAnKycgfCAnLScKICAgKiBzaWduX29wdCA6Oj0gIDxlbXB0eT4gfCBzaWduCiAgICogbW9udGggOjo9IGRpZ2l0ezJ9CiAgICogZGF5IDo6PSBkaWdpdHsyfQogICAqIHRpbWVfb3B0IDo6PSA8ZW1wdHk+IHwgKCcgJyB8ICdUJykgaG91ciBtaW51dGVzX29wdAogICAqIG1pbnV0ZXNfb3B0IDo6PSA8ZW1wdHk+IHwgY29sb25fb3B0IGRpZ2l0ezJ9IHNlY29uZHNfb3B0CiAgICogc2Vjb25kc19vcHQgOjo9IDxlbXB0eT4gfCBjb2xvbl9vcHQgZGlnaXR7Mn0gbWlsbGlzX29wdAogICAqIG1pY3Jvc19vcHQgOjo9IDxlbXB0eT4gfCAoJy4nIHwgJywnKSBkaWdpdCsKICAgKiB0aW1lem9u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IHRvIHdvcmsgYXJvdW5kIElzc3VlIDEwNDAxLgogIHN0YXRpYyBpbnQgX2dldEN1cnJlbnRNaWNyb3MoKSBuYXRpdmUgIkRhdGVUaW1lX2N1cnJlbnRUaW1lTWljcm9zIjsKCiAgc3RhdGljIFN0cmluZyBfdGltZVpvbmVOYW1lRm9yQ2xhbXBlZFNlY29uZHMoaW50IHNlY29uZHNTaW5jZUVwb2NoKQogICAgICBuYXRpdmUgIkRhdGVUaW1lX3RpbWVab25lTmFtZSI7CgogIHN0YXRpYyBpbnQgX3RpbWVab25lT2Zmc2V0SW5TZWNvbmRzRm9yQ2xhbXBlZFNlY29uZHMoaW50IHNlY29uZHNTaW5jZUVwb2NoKQogICAgICBuYXRpdmUgIkRhdGVUaW1lX3RpbWVab25lT2Zmc2V0SW5TZWNvbmRzIjsKCiAgc3RhdGljIGludCBfbG9jYWxUaW1lWm9uZUFkanVzdG1lbnRJblNlY29uZHMoKQogICAgICBuYXRpdmUgIkRhdGVUaW1lX2xvY2FsVGltZVpvbmVBZGp1c3RtZW50SW5TZWNvbmRzIjsKCiAgc3RhdGljIGNvbnN0IF9NSUNST1NFQ09ORF9JTkRFWCA9IDA7CiAgc3RhdGljIGNvbnN0IF9NSUxMSVNFQ09ORF9JTkRFWCA9IDE7CiAgc3RhdGljIGNvbnN0IF9TRUNPTkRfSU5ERVggPSAyOwogIHN0YXRpYyBjb25zdCBfTUlOVVRFX0lOREVYID0gMzsKICBzdGF0aWMgY29uc3QgX0hPVVJfSU5ERVggPSA0OwogIHN0YXRpYyBjb25zdCBfREFZX0lOREVYID0gNTsKICBzdGF0aWMgY29uc3QgX1dFRUtEQVlfSU5ERVggPSA2OwogIHN0YXRpYyBjb25zdCBfTU9OVEhfSU5ERVggPSA3OwogIHN0YXRpYyBjb25zdCBfWUVBUl9JTkRFWCA9IDg7CgogIExpc3QgX19wYXJ0czsKCiAgQHBhdGNoCiAgRGF0ZVRpbWUuZnJvbU1pbGxpc2Vjb25kc1NpbmNlRXBvY2goaW50IG1pbGxpc2Vjb25kc1NpbmNlRXBvY2gsCiAgICAgIHtib29sIGlzVXRjOiBmYWxzZX0pCiAgICAgIDogdGhpcy5fd2l0aFZhbHVlKAogICAgICAgICAgICBtaWxsaXNlY29uZHNTaW5jZUVwb2NoICogRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyTWlsbGlzZWNvbmQsCiAgICAgICAgICAgIGlzVXRjOiBpc1V0Yyk7CgogIEBwYXRjaAogIERhdGVUaW1lLmZyb21NaWNyb3NlY29uZHNTaW5jZUVwb2NoKGludCBtaWNyb3NlY29uZHNTaW5jZUVwb2NoLAogICAgICB7Ym9vbCBpc1V0YzogZmFsc2V9KQogICAgICA6IHRoaXMuX3dpdGhWYWx1ZShtaWNyb3NlY29uZHNTaW5jZUVwb2NoLCBpc1V0YzogaXNVdGMpOwoKICBAcGF0Y2gKICBEYXRlVGltZS5faW50ZXJuYWwoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSwgaW50IGhvdXIsIGludCBtaW51dGUsCiAgICAgIGludCBzZWNvbmQsIGludCBtaWxsaXNlY29uZCwgaW50IG1pY3Jvc2Vjb25kLCBib29sIGlzVXRjKQogICAgICA6IHRoaXMuaXNVdGMgPSBpc1V0YywKICAgICAgICB0aGlzLl92YWx1ZSA9IF9icm9rZW5Eb3duRGF0ZVRvVmFsdWUoeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLAogICAgICAgICAgICBzZWNvbmQsIG1pbGxpc2Vjb25kLCBtaWNyb3NlY29uZCwgaXNVdGMpIHsKICAgIGlmIChfdmFsdWUgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgIGlmIChpc1V0YyA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigpOwogIH0KCiAgQHBhdGNoCiAgRGF0ZVRpbWUuX25vdygpCiAgICAgIDogaXNVdGMgPSBmYWxzZSwKICAgICAgICBfdmFsdWUgPSBfZ2V0Q3VycmVudE1pY3JvcygpOwoKICBAcGF0Y2gKICBTdHJpbmcgZ2V0IHRpbWVab25lTmFtZSB7CiAgICBpZiAoaXNVdGMpIHJldHVybiAiVVRDIjsKICAgIHJldHVybiBfdGltZVpvbmVOYW1lKG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gpOwogIH0KCiAgQHBhdGNoCiAgRHVyYXRpb24gZ2V0IHRpbWVab25lT2Zmc2V0IHsKICAgIGlmIChpc1V0YykgcmV0dXJuIG5ldyBEdXJhdGlvbigpOwogICAgaW50IG9mZnNldEluU2Vjb25kcyA9IF90aW1lWm9uZU9mZnNldEluU2Vjb25kcyhtaWNyb3NlY29uZHNTaW5jZUVwb2NoKTsKICAgIHJldHVybiBuZXcgRHVyYXRpb24oc2Vjb25kczogb2Zmc2V0SW5TZWNvbmRzKTsKICB9CgogIEBwYXRjaAogIGJvb2wgb3BlcmF0b3IgPT0oZHluYW1pYyBvdGhlcikgPT4KICAgICAgb3RoZXIgaXMgRGF0ZVRpbWUgJiYKICAgICAgX3ZhbHVlID09IG90aGVyLm1pY3Jvc2Vjb25kc1NpbmNlRXBvY2ggJiYKICAgICAgaXNVdGMgPT0gb3RoZXIuaXNVdGM7CgogIEBwYXRjaAogIGJvb2wgaXNCZWZvcmUoRGF0ZVRpbWUgb3RoZXIpID0+IF92YWx1ZSA8IG90aGVyLm1pY3Jvc2Vjb25kc1NpbmNlRXBvY2g7CgogIEBwYXRjaAogIGJvb2wgaXNBZnRlcihEYXRlVGltZSBvdGhlcikgPT4gX3ZhbHVlID4gb3RoZXIubWljcm9zZWNvbmRzU2luY2VFcG9jaDsKCiAgQHBhdGNoCiAgYm9vbCBpc0F0U2FtZU1vbWVudEFzKERhdGVUaW1lIG90aGVyKSA9PgogICAgICBfdmFsdWUgPT0gb3RoZXIubWljcm9zZWNvbmRzU2luY2VFcG9jaDsKCiAgQHBhdGNoCiAgaW50IGNvbXBhcmVUbyhEYXRlVGltZSBvdGhlcikgPT4KICAgICAgX3ZhbHVlLmNvbXBhcmVUbyhvdGhlci5taWNyb3NlY29uZHNTaW5jZUVwb2NoKTsKCiAgLyoqIFRoZSBmaXJzdCBsaXN0IGNvbnRhaW5zIHRoZSBkYXlzIHVudGlsIGVhY2ggbW9udGggaW4gbm9uLWxlYXAgeWVhcnMuIFRoZQogICAgKiBzZWNvbmQgbGlzdCBjb250YWlucyB0aGUgZGF5cyBpbiBsZWFwIHllYXJzLiAqLwogIHN0YXRpYyBjb25zdCBMaXN0PExpc3Q8aW50Pj4gX0RBWVNfVU5USUxfTU9OVEggPSBjb25zdCBbCiAgICBjb25zdCBbMCwgMzEsIDU5LCA5MCwgMTIwLCAxNTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzRdLAogICAgY29uc3QgWzAsIDMxLCA2MCwgOTEsIDEyMSwgMTUyLCAxODIsIDIxMywgMjQ0LCAyNzQsIDMwNSwgMzM1XQogIF07CgogIHN0YXRpYyBMaXN0IF9jb21wdXRlVXBwZXJQYXJ0KGludCBsb2NhbE1pY3JvcykgewogICAgY29uc3QgaW50IERBWVNfSU5fNF9ZRUFSUyA9IDQgKiAzNjUgKyAxOwogICAgY29uc3QgaW50IERBWVNfSU5fMTAwX1lFQVJTID0gMjUgKiBEQVlTX0lOXzRfWUVBUlMgLSAxOwogICAgY29uc3QgaW50IERBWVNfSU5fNDAwX1lFQVJTID0gNCAqIERBWVNfSU5fMTAwX1lFQVJTICsgMTsKICAgIGNvbnN0IGludCBEQVlTXzE5NzBfVE9fMjAwMCA9IDMwICogMzY1ICsgNzsKICAgIGNvbnN0IGludCBEQVlTX09GRlNFVCA9CiAgICAgICAgMTAwMCAqIERBWVNfSU5fNDAwX1lFQVJTICsgNSAqIERBWVNfSU5fNDAwX1lFQVJTIC0gREFZU18xOTcwX1RPXzIwMDA7CiAgICBjb25zdCBpbnQgWUVBUlNfT0ZGU0VUID0gNDAwMDAwOwoKICAgIGludCByZXN1bHRZZWFyID0gMDsKICAgIGludCByZXN1bHRNb250aCA9IDA7CiAgICBpbnQgcmVzdWx0RGF5ID0gMDsKCiAgICAvLyBBbHdheXMgcm91bmQgZG93bi4KICAgIGZpbmFsIGludCBkYXlzU2luY2UxOTcwID0KICAgICAgICBfZmxvb3JlZERpdmlzaW9uKGxvY2FsTWljcm9zLCBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJEYXkpOwogICAgaW50IGRheXMgPSBkYXlzU2luY2UxOTcwOwogICAgZGF5cyArPSBEQVlTX09GRlNFVDsKICAgIHJlc3VsdFllYXIgPSA0MDAgKiAoZGF5cyB+LyBEQVlTX0lOXzQwMF9ZRUFSUykgLSBZRUFSU19PRkZTRVQ7CiAgICBkYXlzID0gZGF5cy5yZW1haW5kZXIoREFZU19JTl80MDBfWUVBUlMpOwogICAgZGF5cy0tOwogICAgaW50IHlkMSA9IGRheXMgfi8gREFZU19JTl8xMDBfWUVBUlM7CiAgICBkYXlzID0gZGF5cy5yZW1haW5kZXIoREFZU19JTl8xMDBfWUVBUlMpOwogICAgcmVzdWx0WWVhciArPSAxMDAgKiB5ZDE7CiAgICBkYXlzKys7CiAgICBpbnQgeWQyID0gZGF5cyB+LyBEQVlTX0lOXzRfWUVBUlM7CiAgICBkYXlzID0gZGF5cy5yZW1haW5kZXIoREFZU19JTl80X1lFQVJTKTsKICAgIHJlc3VsdFllYXIgKz0gNCAqIHlkMjsKICAgIGRheXMtLTsKICAgIGludCB5ZDMgPSBkYXlzIH4vIDM2NTsKICAgIGRheXMgPSBkYXlzLnJlbWFpbmRlcigzNjUpOwogICAgcmVzdWx0WWVhciArPSB5ZDM7CgogICAgYm9vbCBpc0xlYXAgPSAoeWQxID09IDAgfHwgeWQyICE9IDApICYmIHlkMyA9PSAwOwogICAgaWYgKGlzTGVhcCkgZGF5cysrOwoKICAgIExpc3Q8aW50PiBkYXlzVW50aWxNb250aCA9IF9EQVlTX1VOVElMX01PTlRIW2lzTGVhcCA/IDEgOiAwXTsKICAgIGZvciAocmVzdWx0TW9udGggPSAxMjsKICAgICAgICBkYXlzVW50aWxNb250aFtyZXN1bHRNb250aCAtIDFdID4gZGF5czsKICAgICAgICByZXN1bHRNb250aC0tKSB7CiAgICAgIC8vIERvIG5vdGhpbmcuCiAgICB9CiAgICByZXN1bHREYXkgPSBkYXlzIC0gZGF5c1VudGlsTW9udGhbcmVzdWx0TW9udGggLSAxXSArIDE7CgogICAgaW50IHJlc3VsdE1pY3Jvc2Vjb25kID0gbG9jYWxNaWNyb3MgJSBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJNaWxsaXNlY29uZDsKICAgIGludCByZXN1bHRNaWxsaXNlY29uZCA9CiAgICAgICAgX2Zsb29yZWREaXZpc2lvbihsb2NhbE1pY3JvcywgRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyTWlsbGlzZWNvbmQpICUKICAgICAgICAgICAgRHVyYXRpb24ubWlsbGlzZWNvbmRzUGVyU2Vjb25kOwogICAgaW50IHJlc3VsdFNlY29uZCA9CiAgICAgICAgX2Zsb29yZWREaXZpc2lvbihsb2NhbE1pY3JvcywgRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyU2Vjb25kKSAlCiAgICAgICAgICAgIER1cmF0aW9uLnNlY29uZHNQZXJNaW51dGU7CgogICAgaW50IHJlc3VsdE1pbnV0ZSA9CiAgICAgICAgX2Zsb29yZWREaXZpc2lvbihsb2NhbE1pY3JvcywgRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyTWludXRlKTsKICAgIHJlc3VsdE1pbnV0ZSAlPSBEdXJhdGlvbi5taW51dGVzUGVySG91cjsKCiAgICBpbnQgcmVzdWx0SG91ciA9CiAgICAgICAgX2Zsb29yZWREaXZpc2lvbihsb2NhbE1pY3JvcywgRHVyYXRpb24ubWljcm9zZWNvbmRzUGVySG91cik7CiAgICByZXN1bHRIb3VyICU9IER1cmF0aW9uLmhvdXJzUGVyRGF5OwoKICAgIC8vIEluIGFjY29yZGFuY2Ugd2l0aCBJU08gODYwMSBhIHdlZWsKICAgIC8vIHN0YXJ0cyB3aXRoIE1vbmRheS4gTW9uZGF5IGhhcyB0aGUgdmFsdWUgMSB1cCB0byBTdW5kYXkgd2l0aCA3LgogICAgLy8gMTk3MC0xLTEgd2FzIGEgVGh1cnNkYXkuCiAgICBpbnQgcmVzdWx0V2Vla2RheSA9ICgoZGF5c1NpbmNlMTk3MCArIERhdGVUaW1lLnRodXJzZGF5IC0gRGF0ZVRpbWUubW9uZGF5KSAlCiAgICAgICAgICAgIERhdGVUaW1lLmRheXNQZXJXZWVrKSArCiAgICAgICAgRGF0ZVRpbWUubW9uZGF5OwoKICAgIExpc3QgbGlzdCA9IG5ldyBMaXN0KF9ZRUFSX0lOREVYICsgMSk7CiAgICBsaXN0W19NSUNST1NFQ09ORF9JTkRFWF0gPSByZXN1bHRNaWNyb3NlY29uZDsKICAgIGxpc3RbX01JTExJU0VDT05EX0lOREVYXSA9IHJlc3VsdE1pbGxpc2Vjb25kOwogICAgbGlzdFtfU0VDT05EX0lOREVYXSA9IHJlc3VsdFNlY29uZDsKICAgIGxpc3RbX01JTlVURV9JTkRFWF0gPSByZXN1bHRNaW51dGU7CiAgICBsaXN0W19IT1VSX0lOREVYXSA9IHJlc3VsdEhvdXI7CiAgICBsaXN0W19EQVlfSU5ERVhdID0gcmVzdWx0RGF5OwogICAgbGlzdFtfV0VFS0RBWV9JTkRFWF0gPSByZXN1bHRXZWVrZGF5OwogICAgbGlzdFtfTU9OVEhfSU5ERVhdID0gcmVzdWx0TW9udGg7CiAgICBsaXN0W19ZRUFSX0lOREVYXSA9IHJlc3VsdFllYXI7CiAgICByZXR1cm4gbGlzdDsKICB9CgogIGdldCBfcGFydHMgewogICAgX19wYXJ0cyA/Pz0gX2NvbXB1dGVVcHBlclBhcnQoX2xvY2FsRGF0ZUluVXRjTWljcm9zKTsKICAgIHJldHVybiBfX3BhcnRzOwogIH0KCiAgQHBhdGNoCiAgRGF0ZVRpbWUgYWRkKER1cmF0aW9uIGR1cmF0aW9uKSB7CiAgICByZXR1cm4gbmV3IERhdGVUaW1lLl93aXRoVmFsdWUoX3ZhbHVlICsgZHVyYXRpb24uaW5NaWNyb3NlY29uZHMsCiAgICAgICAgaXNVdGM6IGlzVXRjKTsKICB9CgogIEBwYXRjaAogIERhdGVUaW1lIHN1YnRyYWN0KER1cmF0aW9uIGR1cmF0aW9uKSB7CiAgICByZXR1cm4gbmV3IERhdGVUaW1lLl93aXRoVmFsdWUoX3ZhbHVlIC0gZHVyYXRpb24uaW5NaWNyb3NlY29uZHMsCiAgICAgICAgaXNVdGM6IGlzVXRjKTsKICB9CgogIEBwYXRjaAogIER1cmF0aW9uIGRpZmZlcmVuY2UoRGF0ZVRpbWUgb3RoZXIpIHsKICAgIHJldHVybiBuZXcgRHVyYXRpb24obWljcm9zZWNvbmRzOiBfdmFsdWUgLSBvdGhlci5fdmFsdWUpOwogIH0KCiAgQHBhdGNoCiAgaW50IGdldCBtaWxsaXNlY29uZHNTaW5jZUVwb2NoID0+CiAgICAgIF92YWx1ZSB+LyBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJNaWxsaXNlY29uZDsKCiAgQHBhdGNoCiAgaW50IGdldCBtaWNyb3NlY29uZHNTaW5jZUVwb2NoID0+IF92YWx1ZTsKCiAgQHBhdGNoCiAgaW50IGdldCBtaWNyb3NlY29uZCA9PiBfcGFydHNbX01JQ1JPU0VDT05EX0lOREVYXTsKCiAgQHBhdGNoCiAgaW50IGdldCBtaWxsaXNlY29uZCA9PiBfcGFydHNbX01JTExJU0VDT05EX0lOREVYXTsKCiAgQHBhdGNoCiAgaW50IGdldCBzZWNvbmQgPT4gX3BhcnRzW19TRUNPTkRfSU5ERVhdOwoKICBAcGF0Y2gKICBpbnQgZ2V0IG1pbnV0ZSA9PiBfcGFydHNbX01JTlVURV9JTkRFWF07CgogIEBwYXRjaAogIGludCBnZXQgaG91ciA9PiBfcGFydHNbX0hPVVJfSU5ERVhdOwoKICBAcGF0Y2gKICBpbnQgZ2V0IGRheSA9PiBfcGFydHNbX0RBWV9JTkRFWF07CgogIEBwYXRjaAogIGludCBnZXQgd2Vla2RheSA9PiBfcGFydHNbX1dFRUtEQVlfSU5ERVhdOwoKICBAcGF0Y2gKICBpbnQgZ2V0IG1vbnRoID0+IF9wYXJ0c1tfTU9OVEhfSU5ERVhdOwoKICBAcGF0Y2gKICBpbnQgZ2V0IHllYXIgPT4gX3BhcnRzW19ZRUFSX0lOREVYXTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgYW1vdW50IG9mIG1pY3Jvc2Vjb25kcyBpbiBVVEMgdGhhdCByZXByZXNlbnQgdGhlIHNhbWUgdmFsdWVzCiAgICogYXMgW3RoaXNdLgogICAqCiAgICogU2F5IGB0YCBpcyB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24sIHRoZW4KICAgKiAqIGB0aGlzLnllYXIgPT0gbmV3IERhdGVUaW1lLmZyb21NaWNyb3NlY29uZHNTaW5jZUVwb2NoKHQsIHRydWUpLnllYXJgLAogICAqICogYHRoaXMubW9udGggPT0gbmV3IERhdGVUaW1lLmZyb21NaWNyb3NlY29uZHNTaW5jZUVwb2NoKHQsIHRydWUpLm1vbnRoYCwKICAgKiAqIGB0aGlzLmRheSA9PSBuZXcgRGF0ZVRpbWUuZnJvbU1pY3Jvc2Vjb25kc1NpbmNlRXBvY2godCwgdHJ1ZSkuZGF5YCwKICAgKiAqIGB0aGlzLmhvdXIgPT0gbmV3IERhdGVUaW1lLmZyb21NaWNyb3NlY29uZHNTaW5jZUVwb2NoKHQsIHRydWUpLmhvdXJgLAogICAqICogLi4uCiAgICoKICAgKiBEYXlsaWdodCBzYXZpbmdzIGlzIGNvbXB1dGVkIGFzIGlmIHRoZSBkYXRlIHdhcyBjb21wdXRlZCBpbiBbMTk3MC4uMjAzN10uCiAgICogSWYgW3RoaXNdIGxpZXMgb3V0c2lkZSB0aGlzIHJhbmdlIHRoZW4gaXQgaXMgYSB5ZWFyIHdpdGggc2ltaWxhcgogICAqIHByb3BlcnRpZXMgKGxlYXAgeWVhciwgd2Vla2RheXMpIGlzIHVzZWQgaW5zdGVhZC4KICAgKi8KICBpbnQgZ2V0IF9sb2NhbERhdGVJblV0Y01pY3JvcyB7CiAgICBpbnQgbWljcm9zID0gX3ZhbHVlOwogICAgaWYgKGlzVXRjKSByZXR1cm4gbWljcm9zOwogICAgaW50IG9mZnNldCA9CiAgICAgICAgX3RpbWVab25lT2Zmc2V0SW5TZWNvbmRzKG1pY3JvcykgKiBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJTZWNvbmQ7CiAgICByZXR1cm4gbWljcm9zICsgb2Zmc2V0OwogIH0KCiAgc3RhdGljIGludCBfZmxvb3JlZERpdmlzaW9uKGludCBhLCBpbnQgYikgewogICAgcmV0dXJuIChhIC0gKGEgPCAwID8gYiAtIDEgOiAwKSkgfi8gYjsKICB9CgogIC8vIFJldHVybnMgdGhlIGRheXMgc2luY2UgMTk3MCBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBnaXZlbiBbeWVhcl0uCiAgLy8gW3llYXJdIG1heSBiZSBiZWZvcmUgZXBvY2guCiAgc3RhdGljIGludCBfZGF5RnJvbVllYXIoaW50IHllYXIpIHsKICAgIHJldHVybiAzNjUgKiAoeWVhciAtIDE5NzApICsKICAgICAgICBfZmxvb3JlZERpdmlzaW9uKHllYXIgLSAxOTY5LCA0KSAtCiAgICAgICAgX2Zsb29yZWREaXZpc2lvbih5ZWFyIC0gMTkwMSwgMTAwKSArCiAgICAgICAgX2Zsb29yZWREaXZpc2lvbih5ZWFyIC0gMTYwMSwgNDAwKTsKICB9CgogIHN0YXRpYyBib29sIF9pc0xlYXBZZWFyKHkpIHsKICAgIC8vICh5ICUgMTYgPT0gMCkgbWF0Y2hlcyBtdWx0aXBsZXMgb2YgNDAwLCBhbmQgaXMgZmFzdGVyIHRoYW4gJSA0MDAuCiAgICByZXR1cm4gKHkgJSA0ID09IDApICYmICgoeSAlIDE2ID09IDApIHx8ICh5ICUgMTAwICE9IDApKTsKICB9CgogIC8vLyBDb252ZXJ0cyB0aGUgZ2l2ZW4gYnJva2VuIGRvd24gZGF0ZSB0byBtaWNyb3NlY29uZHMuCiAgQHBhdGNoCiAgc3RhdGljIGludCBfYnJva2VuRG93bkRhdGVUb1ZhbHVlKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXksIGludCBob3VyLAogICAgICBpbnQgbWludXRlLCBpbnQgc2Vjb25kLCBpbnQgbWlsbGlzZWNvbmQsIGludCBtaWNyb3NlY29uZCwgYm9vbCBpc1V0YykgewogICAgLy8gU2ltcGxpZnkgY2FsY3VsYXRpb25zIGJ5IHdvcmtpbmcgd2l0aCB6ZXJvLWJhc2VkIG1vbnRoLgogICAgLS1tb250aDsKICAgIC8vIERlYWwgd2l0aCB1bmRlciBhbmQgb3ZlcmZsb3cuCiAgICBpZiAobW9udGggPj0gMTIpIHsKICAgICAgeWVhciArPSBtb250aCB+LyAxMjsKICAgICAgbW9udGggPSBtb250aCAlIDEyOwogICAgfSBlbHNlIGlmIChtb250aCA8IDApIHsKICAgICAgaW50IHJlYWxNb250aCA9IG1vbnRoICUgMTI7CiAgICAgIHllYXIgKz0gKG1vbnRoIC0gcmVhbE1vbnRoKSB+LyAxMjsKICAgICAgbW9udGggPSByZWFsTW9udGg7CiAgICB9CgogICAgLy8gRmlyc3QgY29tcHV0ZSB0aGUgc2Vjb25kcyBpbiBVVEMsIGluZGVwZW5kZW50IG9mIHRoZSBbaXNVdGNdIGZsYWcuIElmCiAgICAvLyBuZWNlc3Nhcnkgd2Ugd2lsbCBhZGQgdGhlIHRpbWUtem9uZSBvZmZzZXQgbGF0ZXIgb24uCiAgICBpbnQgZGF5cyA9IGRheSAtIDE7CiAgICBkYXlzICs9IF9EQVlTX1VOVElMX01PTlRIW19pc0xlYXBZZWFyKHllYXIpID8gMSA6IDBdW21vbnRoXTsKICAgIGRheXMgKz0gX2RheUZyb21ZZWFyKHllYXIpOwogICAgaW50IG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2ggPSBkYXlzICogRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyRGF5ICsKICAgICAgICBob3VyICogRHVyYXRpb24ubWljcm9zZWNvbmRzUGVySG91ciArCiAgICAgICAgbWludXRlICogRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyTWludXRlICsKICAgICAgICBzZWNvbmQgKiBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJTZWNvbmQgKwogICAgICAgIG1pbGxpc2Vjb25kICogRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyTWlsbGlzZWNvbmQgKwogICAgICAgIG1pY3Jvc2Vjb25kOwoKICAgIC8vIFNpbmNlIFtfdGltZVpvbmVPZmZzZXRJblNlY29uZHNdIHdpbGwgY3Jhc2ggaWYgdGhlIGlucHV0IGlzIGZhciBvdXQgb2YKICAgIC8vIHRoZSB2YWxpZCByYW5nZSB3ZSBkbyBhIHByZWxpbWluYXJ5IHRlc3QgdGhhdCB3ZWVkcyBvdXQgdmFsdWVzIHRoYXQgY2FuCiAgICAvLyBub3QgYmVjb21lIHZhbGlkIGV2ZW4gd2l0aCB0aW1lem9uZSBhZGp1c3RtZW50cy4KICAgIC8vIFRoZSB0aW1lem9uZSBhZGp1c3RtZW50IGlzIGFsd2F5cyBsZXNzIHRoYW4gYSBkYXksIHNvIGFkZGluZyBhIHNlY3VyaXR5CiAgICAvLyBtYXJnaW4gb2Ygb25lIGRheSBzaG91bGQgYmUgZW5vdWdoLgogICAgaWYgKG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2guYWJzKCkgPgogICAgICAgIF9tYXhNaWxsaXNlY29uZHNTaW5jZUVwb2NoICogMTAwMCArIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1BlckRheSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBpZiAoIWlzVXRjKSB7CiAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjYW4ndCBsaXRlcmFsbHkgZm9sbG93IHRoZSBFQ01BU2NyaXB0IHNwZWMgKHdoaWNoIHRoaXMKICAgICAgLy8gY29kZSBpcyBiYXNlZCBvbiksIGJlY2F1c2UgaXQgbGVhZHMgdG8gaW5jb3JyZWN0IGNvbXB1dGF0aW9ucyBhdAogICAgICAvLyB0aGUgRFNUIHRyYW5zaXRpb24gcG9pbnRzLgogICAgICAvLwogICAgICAvLyBTZWUgVjgncyBjb21tZW50IGhlcmU6CiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92OC92OC9ibG9iLzA4OWRkN2QyNDQ3ZDZlYWY1N2M4YmE2ZDhmMzc5NTdmM2EyNjk3Nzcvc3JjL2RhdGUuaCNMMTE4CgogICAgICAvLyBXZSBuZWVkIHRvIHJlbW92ZSB0aGUgbG9jYWwgdGltZXpvbmUgYWRqdXN0bWVudCBiZWZvcmUgYXNraW5nIGZvciB0aGUKICAgICAgLy8gY29ycmVjdCB6b25lIG9mZnNldC4KICAgICAgaW50IGFkanVzdG1lbnQgPQogICAgICAgICAgX2xvY2FsVGltZVpvbmVBZGp1c3RtZW50SW5TZWNvbmRzKCkgKiBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJTZWNvbmQ7CiAgICAgIC8vIFRoZSBhZGp1c3RtZW50IGlzIGluZGVwZW5kZW50IG9mIHRoZSBhY3R1YWwgZGF0ZSBhbmQgb2YgdGhlIGRheWxpZ2h0CiAgICAgIC8vIHNhdmluZyB0aW1lLiBJdCBpcyBwb3NpdGl2ZSBlYXN0IG9mIHRoZSBQcmltZSBNZXJpZGlhbiBhbmQgbmVnYXRpdmUKICAgICAgLy8gd2VzdCBvZiBpdCwgZS5nLiAtMjg4MDAgc2VjIGZvciBBbWVyaWNhL0xvc19BbmdlbGVzIHRpbWV6b25lLgoKICAgICAgLy8gV2UgcmVtb3ZlIG9uZSBob3VyIHRvIGVuc3VyZSB0aGF0IHdlIGhhdmUgdGhlIGNvcnJlY3Qgb2Zmc2V0IGF0CiAgICAgIC8vIERTVCB0cmFuc2l0aW9uaW5nIHBvaW50cy4gVGhpcyBpcyBhIHRlbXBvcmFyeSBzb2x1dGlvbiBhbmQgb25seQogICAgICAvLyBjb3JyZWN0IGluIHRpbWV6b25lcyB0aGF0IHNoaWZ0IGZvciBleGFjdGx5IG9uZSBob3VyLgogICAgICBhZGp1c3RtZW50ICs9IER1cmF0aW9uLm1pY3Jvc2Vjb25kc1BlckhvdXI7CiAgICAgIGludCB6b25lT2Zmc2V0ID0KICAgICAgICAgIF90aW1lWm9uZU9mZnNldEluU2Vjb25kcyhtaWNyb3NlY29uZHNTaW5jZUVwb2NoIC0gYWRqdXN0bWVudCk7CgogICAgICAvLyBUaGUgem9uZU9mZnNldCBkZXBlbmRzIG9uIHRoZSBhY3R1YWwgZGF0ZSBhbmQgcmVmbGVjdHMgYW55IGRheWxpZ2h0CiAgICAgIC8vIHNhdmluZyB0aW1lIGFuZC9vciBoaXN0b3JpY2FsIGRldmlhdGlvbiByZWxhdGl2ZSB0byBVVEMgdGltZS4KICAgICAgLy8gSXQgaXMgcG9zaXRpdmUgZWFzdCBvZiB0aGUgUHJpbWUgTWVyaWRpYW4gYW5kIG5lZ2F0aXZlIHdlc3Qgb2YgaXQsCiAgICAgIC8vIGUuZy4gLTI1MjAwIHNlYyBmb3IgQW1lcmljYS9Mb3NfQW5nZWxlcyB0aW1lem9uZSBkdXJpbmcgRFNULgogICAgICBtaWNyb3NlY29uZHNTaW5jZUVwb2NoIC09IHpvbmVPZmZzZXQgKiBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJTZWNvbmQ7CiAgICAgIC8vIFRoZSByZXN1bHRpbmcgbWljcm9zZWNvbmRzU2luY2VFcG9jaCB2YWx1ZSBpcyB0aGVyZWZvcmUgdGhlIGNhbGN1bGF0ZWQKICAgICAgLy8gVVRDIHZhbHVlIGRlY3JlYXNlZCBieSBhIChwb3NpdGl2ZSBpZiBlYXN0IG9mIEdNVCkgdGltZXpvbmUgYWRqdXN0bWVudAogICAgICAvLyBhbmQgZGVjcmVhc2VkIGJ5IHR5cGljYWxseSBvbmUgaG91ciBpZiBEU1QgaXMgaW4gZWZmZWN0LgogICAgfQogICAgaWYgKG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2guYWJzKCkgPgogICAgICAgIF9tYXhNaWxsaXNlY29uZHNTaW5jZUVwb2NoICogRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyTWlsbGlzZWNvbmQpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gbWljcm9zZWNvbmRzU2luY2VFcG9jaDsKICB9CgogIHN0YXRpYyBpbnQgX3dlZWtEYXkoeSkgewogICAgLy8gMS8xLzE5NzAgd2FzIGEgVGh1cnNkYXkuCiAgICByZXR1cm4gKF9kYXlGcm9tWWVhcih5KSArIDQpICUgNzsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSB5ZWFyIGluIHRoZSByYW5nZSAyMDA4LTIwMzUgbWF0Y2hpbmcKICAgKiAqIGxlYXAgeWVhciwgYW5kCiAgICogKiB3ZWVrIGRheSBvZiBmaXJzdCBkYXkuCiAgICoKICAgKiBMZWFwIHNlY29uZHMgYXJlIGlnbm9yZWQuCiAgICogQWRhcHRlZCBmcm9tIFY4J3MgZGF0ZSBpbXBsZW1lbnRhdGlvbi4gU2VlIEVDTUEgMjYyIC0gMTUuOS4xLjkuCiAgICovCiAgc3RhdGljIGludCBfZXF1aXZhbGVudFllYXIoaW50IHllYXIpIHsKICAgIC8vIFJldHVybnMgeWVhciB5IHNvIHRoYXQgX3dlZWtEYXkoeSkgPT0gX3dlZWtEYXkoeWVhcikuCiAgICAvLyBfd2Vla0RheSByZXR1cm5zIHRoZSB3ZWVrIGRheSAoaW4gcmFuZ2UgMCAtIDYpLgogICAgLy8gMS8xLzE5NTYgd2FzIGEgU3VuZGF5IChpLmUuIHdlZWtkYXkgMCkuIDE5NTYgd2FzIGEgbGVhcC15ZWFyLgogICAgLy8gMS8xLzE5Njcgd2FzIGEgU3VuZGF5IChpLmUuIHdlZWtkYXkgMCkuCiAgICAvLyBXaXRob3V0IGxlYXAgeWVhcnMgYSBzdWJzZXF1ZW50IHllYXIgaGFzIGEgd2VlayBkYXkgKyAxIChmb3IgZXhhbXBsZQogICAgLy8gMS8xLzE5Njggd2FzIGEgTW9uZGF5KS4gV2l0aCBsZWFwLXllYXJzIGl0IGp1bXBzIG92ZXIgb25lIHdlZWsgZGF5CiAgICAvLyAoZS5nLiAxLzEvMTk1NyB3YXMgYSBUdWVzZGF5KS4KICAgIC8vIEFmdGVyIDEyIHllYXJzIHRoZSB3ZWVrZGF5cyBoYXZlIGFkdmFuY2VkIGJ5IDEyIGRheXMgKyAzIGxlYXAgZGF5cyA9CiAgICAvLyAxNSBkYXlzLiAxNSAlIDcgPSAxLiBTbyBhZnRlciAxMiB5ZWFycyB0aGUgd2VlayBkYXkgaGFzIGFsd2F5cwogICAgLy8gKG5vdyBpbmRlcGVuZGVudGx5IG9mIGxlYXAteWVhcnMpIGFkdmFuY2VkIGJ5IG9uZS4KICAgIC8vIHdlZWtEYXkgKiAxMiBnaXZlcyB0aHVzIGEgeWVhciBzdGFydGluZyB3aXRoIHRoZSB3YW50ZWQgd2Vla0RheS4KICAgIGludCByZWNlbnRZZWFyID0gKF9pc0xlYXBZZWFyKHllYXIpID8gMTk1NiA6IDE5NjcpICsgKF93ZWVrRGF5KHllYXIpICogMTIpOwogICAgLy8gQ2xvc2UgdG8gdGhlIHllYXIgMjAwOCB0aGUgY2FsZW5kYXIgY3ljbGVzIGV2ZXJ5IDQgKiA3IHllYXJzICg0IGZvciB0aGUKICAgIC8vIGxlYXAgeWVhcnMsIDcgZm9yIHRoZSB3ZWVrZGF5cykuCiAgICAvLyBGaW5kIHRoZSB5ZWFyIGluIHRoZSByYW5nZSAyMDA4Li4yMDM3IHRoYXQgaXMgZXF1aXZhbGVudCBtb2QgMjguCiAgICByZXR1cm4gMjAwOCArIChyZWNlbnRZZWFyIC0gMjAwOCkgJSAyODsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIFVUQyB5ZWFyIGZvciB0aGUgY29ycmVzcG9uZGluZyBbc2Vjb25kc1NpbmNlRXBvY2hdLgogICAqIEl0IGlzIHJlbGF0aXZlbHkgZmFzdCBmb3IgdmFsdWVzIGluIHRoZSByYW5nZSAwIHRvIHllYXIgMjA5OC4KICAgKgogICAqIENvZGUgaXMgYWRhcHRlZCBmcm9tIFY4LgogICAqLwogIHN0YXRpYyBpbnQgX3llYXJzRnJvbVNlY29uZHNTaW5jZUVwb2NoKGludCBzZWNvbmRzU2luY2VFcG9jaCkgewogICAgY29uc3QgaW50IERBWVNfSU5fNF9ZRUFSUyA9IDQgKiAzNjUgKyAxOwogICAgY29uc3QgaW50IERBWVNfSU5fMTAwX1lFQVJTID0gMjUgKiBEQVlTX0lOXzRfWUVBUlMgLSAxOwogICAgY29uc3QgaW50IERBWVNfWUVBUl8yMDk4ID0gREFZU19JTl8xMDBfWUVBUlMgKyA2ICogREFZU19JTl80X1lFQVJTOwoKICAgIGludCBkYXlzID0gc2Vjb25kc1NpbmNlRXBvY2ggfi8gRHVyYXRpb24uc2Vjb25kc1BlckRheTsKICAgIGlmIChkYXlzID4gMCAmJiBkYXlzIDwgREFZU19ZRUFSXzIwOTgpIHsKICAgICAgLy8gQWNjb3JkaW5nIHRvIFY4IHRoaXMgZmFzdCBjYXNlIHdvcmtzIGZvciBkYXRlcyBmcm9tIDE5NzAgdG8gMjA5OS4KICAgICAgcmV0dXJuIDE5NzAgKyAoNCAqIGRheXMgKyAyKSB+LyBEQVlTX0lOXzRfWUVBUlM7CiAgICB9CiAgICBpbnQgbWljcm9zID0gc2Vjb25kc1NpbmNlRXBvY2ggKiBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJTZWNvbmQ7CiAgICByZXR1cm4gX2NvbXB1dGVVcHBlclBhcnQobWljcm9zKVtfWUVBUl9JTkRFWF07CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgZGF0ZSBpbiBzZWNvbmRzIHRoYXQgaXMgZXF1aXZhbGVudCB0byB0aGUgZ2l2ZW4KICAgKiBkYXRlIGluIG1pY3Jvc2Vjb25kcyBbbWljcm9zZWNvbmRzU2luY2VFcG9jaF0uIEFuIGVxdWl2YWxlbnQKICAgKiBkYXRlIGhhcyB0aGUgc2FtZSBmaWVsZHMgKGBtb250aGAsIGBkYXlgLCBldGMuKSBhcyB0aGUgZ2l2ZW4KICAgKiBkYXRlLCBidXQgdGhlIGB5ZWFyYCBpcyBpbiB0aGUgcmFuZ2UgWzE5MDEuLjIwMzhdLgogICAqCiAgICogKiBUaGUgdGltZSBzaW5jZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSB5ZWFyIGlzIHRoZSBzYW1lLgogICAqICogSWYgdGhlIGdpdmVuIGRhdGUgaXMgaW4gYSBsZWFwIHllYXIgdGhlbiB0aGUgcmV0dXJuZWQKICAgKiAgIHNlY29uZHMgYXJlIGluIGEgbGVhcCB5ZWFyLCB0b28uCiAgICogKiBUaGUgd2VlayBkYXkgb2YgZ2l2ZW4gZGF0ZSBpcyB0aGUgc2FtZSBhcyB0aGUgb25lIGZvciB0aGUKICAgKiAgIHJldHVybmVkIGRhdGUuCiAgICovCiAgc3RhdGljIGludCBfZXF1aXZhbGVudFNlY29uZHMoaW50IG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gpIHsKICAgIGNvbnN0IGludCBDVVRfT0ZGX1NFQ09ORFMgPSAweDdGRkZGRkZGOwoKICAgIGludCBzZWNvbmRzU2luY2VFcG9jaCA9IF9mbG9vcmVkRGl2aXNpb24oCiAgICAgICAgbWljcm9zZWNvbmRzU2luY2VFcG9jaCwgRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyU2Vjb25kKTsKCiAgICBpZiAoc2Vjb25kc1NpbmNlRXBvY2guYWJzKCkgPiBDVVRfT0ZGX1NFQ09ORFMpIHsKICAgICAgaW50IHllYXIgPSBfeWVhcnNGcm9tU2Vjb25kc1NpbmNlRXBvY2goc2Vjb25kc1NpbmNlRXBvY2gpOwogICAgICBpbnQgZGF5cyA9IF9kYXlGcm9tWWVhcih5ZWFyKTsKICAgICAgaW50IGVxdWl2YWxlbnRZZWFyID0gX2VxdWl2YWxlbnRZZWFyKHllYXIpOwogICAgICBpbnQgZXF1aXZhbGVudERheXMgPSBfZGF5RnJvbVllYXIoZXF1aXZhbGVudFllYXIpOwogICAgICBpbnQgZGlmZkRheXMgPSBlcXVpdmFsZW50RGF5cyAtIGRheXM7CiAgICAgIHNlY29uZHNTaW5jZUVwb2NoICs9IGRpZmZEYXlzICogRHVyYXRpb24uc2Vjb25kc1BlckRheTsKICAgIH0KICAgIHJldHVybiBzZWNvbmRzU2luY2VFcG9jaDsKICB9CgogIHN0YXRpYyBpbnQgX3RpbWVab25lT2Zmc2V0SW5TZWNvbmRzKGludCBtaWNyb3NlY29uZHNTaW5jZUVwb2NoKSB7CiAgICBpbnQgZXF1aXZhbGVudFNlY29uZHMgPSBfZXF1aXZhbGVudFNlY29uZHMobWljcm9zZWNvbmRzU2luY2VFcG9jaCk7CiAgICByZXR1cm4gX3RpbWVab25lT2Zmc2V0SW5TZWNvbmRzRm9yQ2xhbXBlZFNlY29uZHMoZXF1aXZhbGVudFNlY29uZHMpOwogIH0KCiAgc3RhdGljIFN0cmluZyBfdGltZVpvbmVOYW1lKGludCBtaWNyb3NlY29uZHNTaW5jZUVwb2NoKSB7CiAgICBpbnQgZXF1aXZhbGVudFNlY29uZHMgPSBfZXF1aXZhbGVudFNlY29uZHMobWljcm9zZWNvbmRzU2luY2VFcG9jaCk7CiAgICByZXR1cm4gX3RpbWVab25lTmFtZUZvckNsYW1wZWRTZWNvbmRzKGVxdWl2YWxlbnRTZWNvbmRzKTsKICB9Cn0KgcIATk48AQ8BHgEiBxEORUYBRiYBTjEBMToBJyciIiAfIyEgARABCUIbGUobAQlCGz8BCUlAHE03MzIEAQkSFyYBCRwdMgQBCSAmTDMEAQklGzAcAQlKAQlJAQkrLgEJIzYBTzY7Q0IFATMtPD0wHE4lARgZFwEaHkQeGUMuDCkuHQwnLBsMGyAXATYYAUIbMBkVBjwBTxxNLBdIJwEXRy0BFUUoASpHIFEkGQErMjIoKCQiKiYkEQQBDzoUBAEJJEUXBAEJKUUXBAEJKD4EAQkkNQEJLAEJNQEJNQEJKwEJKwEJJwEJJQEJLQEJKQEJJwEGThAFMk1PS00LBU9GNwYiGR4RSxwEAS4rBAFEISYhKy0sBAEfST4EATsJTE4/DSUXGxocIikZBgFNPBhBIEYuMjI8FQFOTzhPKydLEwYBEk1KJAkgYAFPHhdQTk1HAUlJPzIXSQFNR0xGTVBQQgYnTBMGIwQBGyAmBAEGNBYeBR9FBik9N0UvTEomTEY6SFBPKEgsBAEGRUMFHgZCLTxIATwtSzcGRTMEAQY/QkI4BT09KEEWBj4sAS5BATVBJTI5LD4GHgQBREhJBAE8SD4EAgEfZGFydDpjb3JlLXBhdGNoL2RhdGVfcGF0Y2guZGFydD1vcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9jb3JlL2RvdWJsZS5kYXJ0nCEvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5jb3JlOwoKLy8gVE9ETzogQ29udmVydCB0aGlzIGFic3RyYWN0IGNsYXNzIGludG8gYSBjb25jcmV0ZSBjbGFzcyBkb3VibGUKLy8gdGhhdCB1c2VzIHRoZSBwYXRjaCBjbGFzcyBmdW5jdGlvbmFsaXR5IHRvIGFjY291bnQgZm9yIHRoZQovLyBkaWZmZXJlbnQgcGxhdGZvcm0gaW1wbGVtZW50YXRpb25zLgoKLyoqCiAqIEEgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXIuCiAqCiAqIFJlcHJlc2VudGF0aW9uIG9mIERhcnQgZG91YmxlcyBjb250YWluaW5nIGRvdWJsZSBzcGVjaWZpYyBjb25zdGFudHMKICogYW5kIG9wZXJhdGlvbnMgYW5kIHNwZWNpYWxpemF0aW9ucyBvZiBvcGVyYXRpb25zIGluaGVyaXRlZCBmcm9tCiAqIFtudW1dLiBEYXJ0IGRvdWJsZXMgYXJlIDY0LWJpdCBmbG9hdGluZy1wb2ludCBudW1iZXJzIGFzIHNwZWNpZmllZCBpbiB0aGUKICogSUVFRSA3NTQgc3RhbmRhcmQuCiAqCiAqIFRoZSBbZG91YmxlXSB0eXBlIGlzIGNvbnRhZ2lvdXMuIE9wZXJhdGlvbnMgb24gW2RvdWJsZV1zIHJldHVybgogKiBbZG91YmxlXSByZXN1bHRzLgogKgogKiBJdCBpcyBhIGNvbXBpbGUtdGltZSBlcnJvciBmb3IgYSBjbGFzcyB0byBhdHRlbXB0IHRvIGV4dGVuZCBvciBpbXBsZW1lbnQKICogZG91YmxlLgogKi8KYWJzdHJhY3QgY2xhc3MgZG91YmxlIGV4dGVuZHMgbnVtIHsKICBzdGF0aWMgY29uc3QgZG91YmxlIG5hbiA9IDAuMCAvIDAuMDsKICBzdGF0aWMgY29uc3QgZG91YmxlIGluZmluaXR5ID0gMS4wIC8gMC4wOwogIHN0YXRpYyBjb25zdCBkb3VibGUgbmVnYXRpdmVJbmZpbml0eSA9IC1pbmZpbml0eTsKICBzdGF0aWMgY29uc3QgZG91YmxlIG1pblBvc2l0aXZlID0gNWUtMzI0OwogIHN0YXRpYyBjb25zdCBkb3VibGUgbWF4RmluaXRlID0gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7CgogIGRvdWJsZSByZW1haW5kZXIobnVtIG90aGVyKTsKCiAgLyoqIEFkZGl0aW9uIG9wZXJhdG9yLiAqLwogIGRvdWJsZSBvcGVyYXRvciArKG51bSBvdGhlcik7CgogIC8qKiBTdWJ0cmFjdGlvbiBvcGVyYXRvci4gKi8KICBkb3VibGUgb3BlcmF0b3IgLShudW0gb3RoZXIpOwoKICAvKiogTXVsdGlwbGljYXRpb24gb3BlcmF0b3IuICovCiAgZG91YmxlIG9wZXJhdG9yICoobnVtIG90aGVyKTsKCiAgZG91YmxlIG9wZXJhdG9yICUobnVtIG90aGVyKTsKCiAgLyoqIERpdmlzaW9uIG9wZXJhdG9yLiAqLwogIGRvdWJsZSBvcGVyYXRvciAvKG51bSBvdGhlcik7CgogIC8qKgogICAqIFRydW5jYXRpbmcgZGl2aXNpb24gb3BlcmF0b3IuCiAgICoKICAgKiBUaGUgcmVzdWx0IG9mIHRoZSB0cnVuY2F0aW5nIGRpdmlzaW9uIGBhIH4vIGJgIGlzIGVxdWl2YWxlbnQgdG8KICAgKiBgKGEgLyBiKS50cnVuY2F0ZSgpYC4KICAgKi8KICBpbnQgb3BlcmF0b3Igfi8obnVtIG90aGVyKTsKCiAgLyoqIE5lZ2F0ZSBvcGVyYXRvci4gKi8KICBkb3VibGUgb3BlcmF0b3IgLSgpOwoKICAvKiogUmV0dXJucyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhpcyBbZG91YmxlXS4gKi8KICBkb3VibGUgYWJzKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHNpZ24gb2YgdGhlIGRvdWJsZSdzIG51bWVyaWNhbCB2YWx1ZS4KICAgKgogICAqIFJldHVybnMgLTEuMCBpZiB0aGUgdmFsdWUgaXMgbGVzcyB0aGFuIHplcm8sCiAgICogKzEuMCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIHplcm8sCiAgICogYW5kIHRoZSB2YWx1ZSBpdHNlbGYgaWYgaXQgaXMgLTAuMCwgMC4wIG9yIE5hTi4KICAgKi8KICBkb3VibGUgZ2V0IHNpZ247CgogIC8qKgogICAqIFJldHVybnMgdGhlIGludGVnZXIgY2xvc2VzdCB0byBgdGhpc2AuCiAgICoKICAgKiBSb3VuZHMgYXdheSBmcm9tIHplcm8gd2hlbiB0aGVyZSBpcyBubyBjbG9zZXN0IGludGVnZXI6CiAgICogIGAoMy41KS5yb3VuZCgpID09IDRgIGFuZCBgKC0zLjUpLnJvdW5kKCkgPT0gLTRgLgogICAqCiAgICogSWYgYHRoaXNgIGlzIG5vdCBmaW5pdGUgKGBOYU5gIG9yIGluZmluaXR5KSwgdGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXS4KICAgKi8KICBpbnQgcm91bmQoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZ3JlYXRlc3QgaW50ZWdlciBubyBncmVhdGVyIHRoYW4gYHRoaXNgLgogICAqCiAgICogSWYgYHRoaXNgIGlzIG5vdCBmaW5pdGUgKGBOYU5gIG9yIGluZmluaXR5KSwgdGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXS4KICAgKi8KICBpbnQgZmxvb3IoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGVhc3QgaW50ZWdlciBubyBzbWFsbGVyIHRoYW4gYHRoaXNgLgogICAqCiAgICogSWYgYHRoaXNgIGlzIG5vdCBmaW5pdGUgKGBOYU5gIG9yIGluZmluaXR5KSwgdGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXS4KICAgKi8KICBpbnQgY2VpbCgpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBpbnRlZ2VyIG9idGFpbmVkIGJ5IGRpc2NhcmRpbmcgYW55IGZyYWN0aW9uYWwKICAgKiBkaWdpdHMgZnJvbSBgdGhpc2AuCiAgICoKICAgKiBJZiBgdGhpc2AgaXMgbm90IGZpbml0ZSAoYE5hTmAgb3IgaW5maW5pdHkpLCB0aHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdLgogICAqLwogIGludCB0cnVuY2F0ZSgpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBpbnRlZ2VyIGRvdWJsZSB2YWx1ZSBjbG9zZXN0IHRvIGB0aGlzYC4KICAgKgogICAqIFJvdW5kcyBhd2F5IGZyb20gemVybyB3aGVuIHRoZXJlIGlzIG5vIGNsb3Nlc3QgaW50ZWdlcjoKICAgKiAgYCgzLjUpLnJvdW5kVG9Eb3VibGUoKSA9PSA0YCBhbmQgYCgtMy41KS5yb3VuZFRvRG91YmxlKCkgPT0gLTRgLgogICAqCiAgICogSWYgdGhpcyBpcyBhbHJlYWR5IGFuIGludGVnZXIgdmFsdWVkIGRvdWJsZSwgaW5jbHVkaW5nIGAtMC4wYCwgb3IgaXQgaXMgbm90CiAgICogYSBmaW5pdGUgdmFsdWUsIHRoZSB2YWx1ZSBpcyByZXR1cm5lZCB1bm1vZGlmaWVkLgogICAqCiAgICogRm9yIHRoZSBwdXJwb3NlIG9mIHJvdW5kaW5nLCBgLTAuMGAgaXMgY29uc2lkZXJlZCB0byBiZSBiZWxvdyBgMC4wYCwKICAgKiBhbmQgYC0wLjBgIGlzIHRoZXJlZm9yZSBjb25zaWRlcmVkIGNsb3NlciB0byBuZWdhdGl2ZSBudW1iZXJzIHRoYW4gYDAuMGAuCiAgICogVGhpcyBtZWFucyB0aGF0IGZvciBhIHZhbHVlLCBgZGAgaW4gdGhlIHJhbmdlIGAtMC41IDwgZCA8IDAuMGAsCiAgICogdGhlIHJlc3VsdCBpcyBgLTAuMGAuCiAgICovCiAgZG91YmxlIHJvdW5kVG9Eb3VibGUoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZ3JlYXRlc3QgaW50ZWdlciBkb3VibGUgdmFsdWUgbm8gZ3JlYXRlciB0aGFuIGB0aGlzYC4KICAgKgogICAqIElmIHRoaXMgaXMgYWxyZWFkeSBhbiBpbnRlZ2VyIHZhbHVlZCBkb3VibGUsIGluY2x1ZGluZyBgLTAuMGAsIG9yIGl0IGlzIG5vdAogICAqIGEgZmluaXRlIHZhbHVlLCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgdW5tb2RpZmllZC4KICAgKgogICAqIEZvciB0aGUgcHVycG9zZSBvZiByb3VuZGluZywgYC0wLjBgIGlzIGNvbnNpZGVyZWQgdG8gYmUgYmVsb3cgYDAuMGAuCiAgICogQSBudW1iZXIgYGRgIGluIHRoZSByYW5nZSBgMC4wIDwgZCA8IDEuMGAgd2lsbCByZXR1cm4gYDAuMGAuCiAgICovCiAgZG91YmxlIGZsb29yVG9Eb3VibGUoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGVhc3QgaW50ZWdlciBkb3VibGUgdmFsdWUgbm8gc21hbGxlciB0aGFuIGB0aGlzYC4KICAgKgogICAqIElmIHRoaXMgaXMgYWxyZWFkeSBhbiBpbnRlZ2VyIHZhbHVlZCBkb3VibGUsIGluY2x1ZGluZyBgLTAuMGAsIG9yIGl0IGlzIG5vdAogICAqIGEgZmluaXRlIHZhbHVlLCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgdW5tb2RpZmllZC4KICAgKgogICAqIEZvciB0aGUgcHVycG9zZSBvZiByb3VuZGluZywgYC0wLjBgIGlzIGNvbnNpZGVyZWQgdG8gYmUgYmVsb3cgYDAuMGAuCiAgICogQSBudW1iZXIgYGRgIGluIHRoZSByYW5nZSBgLTEuMCA8IGQgPCAwLjBgIHdpbGwgcmV0dXJuIGAtMC4wYC4KICAgKi8KICBkb3VibGUgY2VpbFRvRG91YmxlKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGludGVnZXIgZG91YmxlIHZhbHVlIG9idGFpbmVkIGJ5IGRpc2NhcmRpbmcgYW55IGZyYWN0aW9uYWwKICAgKiBkaWdpdHMgZnJvbSBgdGhpc2AuCiAgICoKICAgKiBJZiB0aGlzIGlzIGFscmVhZHkgYW4gaW50ZWdlciB2YWx1ZWQgZG91YmxlLCBpbmNsdWRpbmcgYC0wLjBgLCBvciBpdCBpcyBub3QKICAgKiBhIGZpbml0ZSB2YWx1ZSwgdGhlIHZhbHVlIGlzIHJldHVybmVkIHVubW9kaWZpZWQuCiAgICoKICAgKiBGb3IgdGhlIHB1cnBvc2Ugb2Ygcm91bmRpbmcsIGAtMC4wYCBpcyBjb25zaWRlcmVkIHRvIGJlIGJlbG93IGAwLjBgLgogICAqIEEgbnVtYmVyIGBkYCBpbiB0aGUgcmFuZ2UgYC0xLjAgPCBkIDwgMC4wYCB3aWxsIHJldHVybiBgLTAuMGAsIGFuZAogICAqIGluIHRoZSByYW5nZSBgMC4wIDwgZCA8IDEuMGAgaXQgd2lsbCByZXR1cm4gMC4wLgogICAqLwogIGRvdWJsZSB0cnVuY2F0ZVRvRG91YmxlKCk7CgogIC8qKgogICAqIFByb3ZpZGUgYSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIFtkb3VibGVdIHZhbHVlLgogICAqCiAgICogVGhlIHJlcHJlc2VudGF0aW9uIGlzIGEgbnVtYmVyIGxpdGVyYWwgc3VjaCB0aGF0IHRoZSBjbG9zZXN0IGRvdWJsZSB2YWx1ZQogICAqIHRvIHRoZSByZXByZXNlbnRhdGlvbidzIG1hdGhlbWF0aWNhbCB2YWx1ZSBpcyB0aGlzIFtkb3VibGVdLgogICAqCiAgICogUmV0dXJucyAiTmFOIiBmb3IgdGhlIE5vdC1hLU51bWJlciB2YWx1ZS4KICAgKiBSZXR1cm5zICJJbmZpbml0eSIgYW5kICItSW5maW5pdHkiIGZvciBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgSW5maW5pdHkuCiAgICogUmV0dXJucyAiLTAuMCIgZm9yIG5lZ2F0aXZlIHplcm8uCiAgICoKICAgKiBGb3IgYWxsIGRvdWJsZXMsIGBkYCwgY29udmVydGluZyB0byBhIHN0cmluZyBhbmQgcGFyc2luZyB0aGUgc3RyaW5nIGJhY2sKICAgKiBnaXZlcyB0aGUgc2FtZSB2YWx1ZSBhZ2FpbjogYGQgPT0gZG91YmxlLnBhcnNlKGQudG9TdHJpbmcoKSlgIChleGNlcHQgd2hlbgogICAqIGBkYCBpcyBOYU4pLgogICAqLwogIFN0cmluZyB0b1N0cmluZygpOwoKICAvKioKICAgKiBQYXJzZSBbc291cmNlXSBhcyBhbiBkb3VibGUgbGl0ZXJhbCBhbmQgcmV0dXJuIGl0cyB2YWx1ZS4KICAgKgogICAqIEFjY2VwdHMgYW4gb3B0aW9uYWwgc2lnbiAoYCtgIG9yIGAtYCkgZm9sbG93ZWQgYnkgZWl0aGVyIHRoZSBjaGFyYWN0ZXJzCiAgICogIkluZmluaXR5IiwgdGhlIGNoYXJhY3RlcnMgIk5hTiIgb3IgYSBmbG9hdGluZy1wb2ludCByZXByZXNlbnRhdGlvbi4KICAgKiBBIGZsb2F0aW5nLXBvaW50IHJlcHJlc2VudGF0aW9uIGlzIGNvbXBvc2VkIG9mIGEgbWFudGlzc2EgYW5kIGFuIG9wdGlvbmFsCiAgICogZXhwb25lbnQgcGFydC4gVGhlIG1hbnRpc3NhIGlzIGVpdGhlciBhIGRlY2ltYWwgcG9pbnQgKGAuYCkgZm9sbG93ZWQgYnkgYQogICAqIHNlcXVlbmNlIG9mIChkZWNpbWFsKSBkaWdpdHMsIG9yIGEgc2VxdWVuY2Ugb2YgZGlnaXRzCiAgICogb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhIGRlY2ltYWwgcG9pbnQgYW5kIG9wdGlvbmFsbHkgbW9yZSBkaWdpdHMuIFRoZQogICAqIChvcHRpb25hbCkgZXhwb25lbnQgcGFydCBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVyICJlIiBvciAiRSIsIGFuIG9wdGlvbmFsCiAgICogc2lnbiwgYW5kIG9uZSBvciBtb3JlIGRpZ2l0cy4KICAgKiBUaGUgW3NvdXJjZV0gbXVzdCBub3QgYmUgYG51bGxgLgogICAqCiAgICogTGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBpcyBpZ25vcmVkLgogICAqCiAgICogSWYgdGhlIFtzb3VyY2VdIHN0cmluZyBpcyBub3QgYSB2YWxpZCBkb3VibGUgbGl0ZXJhbCwgdGhlIFtvbkVycm9yXQogICAqIGlzIGNhbGxlZCB3aXRoIHRoZSBbc291cmNlXSBhcyBhcmd1bWVudCwgYW5kIGl0cyByZXR1cm4gdmFsdWUgaXMKICAgKiB1c2VkIGluc3RlYWQuIElmIG5vIGBvbkVycm9yYCBpcyBwcm92aWRlZCwgYSBbRm9ybWF0RXhjZXB0aW9uXQogICAqIGlzIHRocm93biBpbnN0ZWFkLgogICAqCiAgICogVGhlIFtvbkVycm9yXSBmdW5jdGlvbiBpcyBvbmx5IGludm9rZWQgaWYgW3NvdXJjZV0gaXMgYSBbU3RyaW5nXSB3aXRoIGFuCiAgICogaW52YWxpZCBmb3JtYXQuIEl0IGlzIG5vdCBpbnZva2VkIGlmIFtzb3VyY2VdIGlzIGBudWxsYC4K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OyAvLyAnZScKICAgIGludCBleHBvbmVudCA9IDA7CiAgICAvLyBTZXQgdG8gbm9uLXplcm8gaWYgYSBkaWdpdCBpcyBzZWVuLiBBdm9pZHMgYWNjZXB0aW5nICIuIi4KICAgIGJvb2wgZGlnaXRzU2VlbiA9IGZhbHNlOwogICAgLy8gQWRkZWQgdG8gZXhwb25lbnQgZm9yIGVhY2ggZGlnaXQuIFNldCB0byAtMSB3aGVuIHNlZWluZyAnLicuCiAgICBpbnQgZXhwb25lbnREZWx0YSA9IDA7CiAgICBkb3VibGUgZG91YmxlVmFsdWUgPSAwLjA7CiAgICBkb3VibGUgc2lnbiA9IDEuMDsKICAgIGludCBmaXJzdENoYXIgPSBzdHIuY29kZVVuaXRBdChzdGFydCk7CiAgICBpZiAoZmlyc3RDaGFyID09IF9NSU5VUykgewogICAgICBzaWduID0gLTEuMDsKICAgICAgc3RhcnQrKzsKICAgICAgaWYgKHN0YXJ0ID09IGVuZCkgcmV0dXJuIG51bGw7CiAgICAgIGZpcnN0Q2hhciA9IHN0ci5jb2RlVW5pdEF0KHN0YXJ0KTsKICAgIH0KICAgIGlmIChmaXJzdENoYXIgPT0gX0kpIHsKICAgICAgaWYgKGVuZCA9PSBzdGFydCArIDggJiYgc3RyLnN0YXJ0c1dpdGgoIm5maW5pdHkiLCBzdGFydCArIDEpKSB7CiAgICAgICAgcmV0dXJuIHNpZ24gKiBkb3VibGUuaW5maW5pdHk7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoZmlyc3RDaGFyID09IF9OKSB7CiAgICAgIGlmIChlbmQgPT0gc3RhcnQgKyAzICYmCiAgICAgICAgICBzdHIuY29kZVVuaXRBdChzdGFydCArIDEpID09IF9hICYmCiAgICAgICAgICBzdHIuY29kZVVuaXRBdChzdGFydCArIDIpID09IF9OKSB7CiAgICAgICAgcmV0dXJuIGRvdWJsZS5uYW47CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgaW50IGZpcnN0RGlnaXQgPSBmaXJzdENoYXIgXiBfWkVSTzsKICAgIGlmIChmaXJzdERpZ2l0IDw9IDkpIHsKICAgICAgc3RhcnQrKzsKICAgICAgZG91YmxlVmFsdWUgPSBmaXJzdERpZ2l0LnRvRG91YmxlKCk7CiAgICAgIGRpZ2l0c1NlZW4gPSB0cnVlOwogICAgfQogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgaW50IGMgPSBzdHIuY29kZVVuaXRBdChpKTsKICAgICAgaW50IGRpZ2l0ID0gYyBeIF9aRVJPOyAvLyAnMCctJzknIGNoYXJhY3RlcnMgYXJlIG5vdyAwLTkgaW50ZWdlcnMuCiAgICAgIGlmIChkaWdpdCA8PSA5KSB7CiAgICAgICAgZG91YmxlVmFsdWUgPSAxMC4wICogZG91YmxlVmFsdWUgKyBkaWdpdDsKICAgICAgICAvLyBEb3VibGVzIGF0IG9yIGFib3ZlIHRoaXMgdmFsdWUgKDIqKjUzKSBtaWdodCBoYXZlIGxvc3QgcHJlY2lzc2lvbi4KICAgICAgICBjb25zdCBkb3VibGUgTUFYX0VYQUNUX0RPVUJMRSA9IDkwMDcxOTkyNTQ3NDA5OTIuMDsKICAgICAgICBpZiAoZG91YmxlVmFsdWUgPj0gTUFYX0VYQUNUX0RPVUJMRSkgcmV0dXJuIG51bGw7CiAgICAgICAgZXhwb25lbnQgKz0gZXhwb25lbnREZWx0YTsKICAgICAgICBkaWdpdHNTZWVuID0gdHJ1ZTsKICAgICAgfSBlbHNlIGlmIChjID09IF9ET1QgJiYgZXhwb25lbnREZWx0YSA9PSAwKSB7CiAgICAgICAgZXhwb25lbnREZWx0YSA9IC0xOwogICAgICB9IGVsc2UgaWYgKChjIHwgMHgyMCkgPT0gX2UpIHsKICAgICAgICBpKys7CiAgICAgICAgaWYgKGkgPT0gZW5kKSByZXR1cm4gbnVsbDsKICAgICAgICAvLyBpbnQuX3RyeVBhcnNlU21pIHRyZWF0cyBpdHMgZW5kIGFyZ3VtZW50IGFzIGluY2x1c2l2ZS4KICAgICAgICBpbnQgZXhwUGFydCA9IGludC5fdHJ5UGFyc2VTbWkoc3RyLCBpLCBlbmQgLSAxKTsKICAgICAgICBpZiAoZXhwUGFydCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICBleHBvbmVudCArPSBleHBQYXJ0OwogICAgICAgIGJyZWFrOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgICBpZiAoIWRpZ2l0c1NlZW4pIHJldHVybiBudWxsOyAvLyBObyBkaWdpdHMuCiAgICBpZiAoZXhwb25lbnQgPT0gMCkgcmV0dXJuIHNpZ24gKiBkb3VibGVWYWx1ZTsKICAgIGNvbnN0IFAxMCA9IFBPV0VSU19PRl9URU47IC8vIEZyb20gc2hhcmVkIGxpYnJhcnkKICAgIGlmIChleHBvbmVudCA8IDApIHsKICAgICAgaW50IG5lZ0V4cG9uZW50ID0gLWV4cG9uZW50OwogICAgICBpZiAobmVnRXhwb25lbnQgPj0gUDEwLmxlbmd0aCkgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiBzaWduICogKGRvdWJsZVZhbHVlIC8gUDEwW25lZ0V4cG9uZW50XSk7CiAgICB9CiAgICBpZiAoZXhwb25lbnQgPj0gUDEwLmxlbmd0aCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gc2lnbiAqIChkb3VibGVWYWx1ZSAqIFAxMFtleHBvbmVudF0pOwogIH0KCiAgc3RhdGljIGRvdWJsZSBfcGFyc2UodmFyIHN0cikgewogICAgaW50IGxlbiA9IHN0ci5sZW5ndGg7CiAgICBpbnQgc3RhcnQgPSBzdHIuX2ZpcnN0Tm9uV2hpdGVzcGFjZSgpOwogICAgaWYgKHN0YXJ0ID09IGxlbikgcmV0dXJuIG51bGw7IC8vIEFsbCB3aGl0ZXNwYWNlLgogICAgaW50IGVuZCA9IHN0ci5fbGFzdE5vbldoaXRlc3BhY2UoKSArIDE7CiAgICBhc3NlcnQoc3RhcnQgPCBlbmQpOwogICAgdmFyIHJlc3VsdCA9IF90cnlQYXJzZURvdWJsZShzdHIsIHN0YXJ0LCBlbmQpOwogICAgaWYgKHJlc3VsdCAhPSBudWxsKSByZXR1cm4gcmVzdWx0OwogICAgcmV0dXJuIF9uYXRpdmVQYXJzZShzdHIsIHN0YXJ0LCBlbmQpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIGRvdWJsZSBwYXJzZShTdHJpbmcgc291cmNlLAogICAgICBbQGRlcHJlY2F0ZWQgZG91YmxlIG9uRXJyb3IoU3RyaW5nIHNvdXJjZSldKSB7CiAgICB2YXIgcmVzdWx0ID0gX3BhcnNlKHNvdXJjZSk7CiAgICBpZiAocmVzdWx0ID09IG51bGwpIHsKICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBkb3VibGUiLCBzb3VyY2UpOwogICAgICByZXR1cm4gb25FcnJvcihzb3VyY2UpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBkb3VibGUgdHJ5UGFyc2UoU3RyaW5nIHNvdXJjZSkgPT4gX3BhcnNlKHNvdXJjZSk7Cn0KegBOTjwBDwEeASABBw89HQE/GSIjJCAgICAWQR1EGx4XKx8TDyUpBhtGJwgTBhseLS0bCBMGASgbDysZBighSRgyTjw6Ixs0HCUNI0I5Kh0PDxUIBjAyNhgjMjYGLTEEASIaKzYsGTMnKgQBCSU1IRpQHgYTBAEJOwIBIWRhcnQ6Y29yZS1wYXRjaC9kb3VibGVfcGF0Y2guZGFydD9vcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9jb3JlL2R1cmF0aW9uLmRhcnSmsC8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogQSBzcGFuIG9mIHRpbWUsIHN1Y2ggYXMgMjcgZGF5cywgNCBob3VycywgMTIgbWludXRlcywgYW5kIDMgc2Vjb25kcy4KICoKICogQSBgRHVyYXRpb25gIHJlcHJlc2VudHMgYSBkaWZmZXJlbmNlIGZyb20gb25lIHBvaW50IGluIHRpbWUgdG8gYW5vdGhlci4gVGhlCiAqIGR1cmF0aW9uIG1heSBiZSAibmVnYXRpdmUiIGlmIHRoZSBkaWZmZXJlbmNlIGlzIGZyb20gYSBsYXRlciB0aW1lIHRvIGFuCiAqIGVhcmxpZXIuCiAqCiAqIER1cmF0aW9ucyBhcmUgY29udGV4dCBpbmRlcGVuZGVudC4gRm9yIGV4YW1wbGUsIGEgZHVyYXRpb24gb2YgMiBkYXlzIGlzCiAqIGFsd2F5cyA0OCBob3VycywgZXZlbiB3aGVuIGl0IGlzIGFkZGVkIHRvIGEgYERhdGVUaW1lYCBqdXN0IHdoZW4gdGhlCiAqIHRpbWUgem9uZSBpcyBhYm91dCB0byBkbyBhIGRheWxpZ2h0LXNhdmluZ3Mgc3dpdGNoLiAoU2VlIFtEYXRlVGltZS5hZGRdKS4KICoKICogRGVzcGl0ZSB0aGUgc2FtZSBuYW1lLCBhIGBEdXJhdGlvbmAgb2JqZWN0IGRvZXMgbm90IGltcGxlbWVudCAiRHVyYXRpb25zIgogKiBhcyBzcGVjaWZpZWQgYnkgSVNPIDg2MDEuIEluIHBhcnRpY3VsYXIsIGEgZHVyYXRpb24gb2JqZWN0IGRvZXMgbm90IGtlZXAKICogdHJhY2sgb2YgdGhlIGluZGl2aWR1YWxseSBwcm92aWRlZCBtZW1iZXJzIChzdWNoIGFzICJkYXlzIiBvciAiaG91cnMiKSwgYnV0CiAqIG9ubHkgdXNlcyB0aGVzZSBhcmd1bWVudHMgdG8gY29tcHV0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBjb3JyZXNwb25kaW5nIHRpbWUKICogaW50ZXJ2YWwuCiAqCiAqIFRvIGNyZWF0ZSBhIG5ldyBEdXJhdGlvbiBvYmplY3QsIHVzZSB0aGlzIGNsYXNzJ3Mgc2luZ2xlIGNvbnN0cnVjdG9yCiAqIGdpdmluZyB0aGUgYXBwcm9wcmlhdGUgYXJndW1lbnRzOgogKiBgYGBkYXJ0CiAqIER1cmF0aW9uIGZhc3Rlc3RNYXJhdGhvbiA9IG5ldyBEdXJhdGlvbihob3VyczoyLCBtaW51dGVzOjMsIHNlY29uZHM6Mik7CiAqIGBgYAogKiBUaGUgW0R1cmF0aW9uXSBpcyB0aGUgc3VtIG9mIGFsbCBpbmRpdmlkdWFsIHBhcnRzLgogKiBUaGlzIG1lYW5zIHRoYXQgaW5kaXZpZHVhbCBwYXJ0cyBjYW4gYmUgbGFyZ2VyIHRoYW4gdGhlIG5leHQtYmlnZ2VyIHVuaXQuCiAqIEZvciBleGFtcGxlLCBbaW5NaW51dGVzXSBjYW4gYmUgZ3JlYXRlciB0aGFuIDU5LgogKiBgYGBkYXJ0CiAqIGFzc2VydChmYXN0ZXN0TWFyYXRob24uaW5NaW51dGVzID09IDEyMyk7CiAqIGBgYAogKiBBbGwgaW5kaXZpZHVhbCBwYXJ0cyBhcmUgYWxsb3dlZCB0byBiZSBuZWdhdGl2ZS4KICoKICogVXNlIG9uZSBvZiB0aGUgcHJvcGVydGllcywgc3VjaCBhcyBbaW5EYXlzXSwKICogdG8gcmV0cmlldmUgdGhlIGludGVnZXIgdmFsdWUgb2YgdGhlIER1cmF0aW9uIGluIHRoZSBzcGVjaWZpZWQgdGltZSB1bml0LgogKiBOb3RlIHRoYXQgdGhlIHJldHVybmVkIHZhbHVlIGlzIHJvdW5kZWQgZG93bi4KICogRm9yIGV4YW1wbGUsCiAqIGBgYGRhcnQKICogRHVyYXRpb24gYUxvbmdXZWVrZW5kID0gbmV3IER1cmF0aW9uKGhvdXJzOjg4KTsKICogYXNzZXJ0KGFMb25nV2Vla2VuZC5pbkRheXMgPT0gMyk7CiAqIGBgYAogKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgY29sbGVjdGlvbiBvZiBhcml0aG1ldGljCiAqIGFuZCBjb21wYXJpc29uIG9wZXJhdG9ycywKICogcGx1cyBhIHNldCBvZiBjb25zdGFudHMgdXNlZnVsIGZvciBjb252ZXJ0aW5nIHRpbWUgdW5pdHMuCiAqCiAqIFNlZSBbRGF0ZVRpbWVdIHRvIHJlcHJlc2VudCBhIHBvaW50IGluIHRpbWUuCiAqIFNlZSBbU3RvcHdhdGNoXSB0byBtZWFzdXJlIHRpbWUtc3BhbnMuCiAqLwpjbGFzcyBEdXJhdGlvbiBpbXBsZW1lbnRzIENvbXBhcmFibGU8RHVyYXRpb24+IHsKICBzdGF0aWMgY29uc3QgaW50IG1pY3Jvc2Vjb25kc1Blck1pbGxpc2Vjb25kID0gMTAwMDsKICBzdGF0aWMgY29uc3QgaW50IG1pbGxpc2Vjb25kc1BlclNlY29uZCA9IDEwMDA7CiAgc3RhdGljIGNvbnN0IGludCBzZWNvbmRzUGVyTWludXRlID0gNjA7CiAgc3RhdGljIGNvbnN0IGludCBtaW51dGVzUGVySG91ciA9IDYwOwogIHN0YXRpYyBjb25zdCBpbnQgaG91cnNQZXJEYXkgPSAyNDsKCiAgc3RhdGljIGNvbnN0IGludCBtaWNyb3NlY29uZHNQZXJTZWNvbmQgPQogICAgICBtaWNyb3NlY29uZHNQZXJNaWxsaXNlY29uZCAqIG1pbGxpc2Vjb25kc1BlclNlY29uZDsKICBzdGF0aWMgY29uc3QgaW50IG1pY3Jvc2Vjb25kc1Blck1pbnV0ZSA9CiAgICAgIG1pY3Jvc2Vjb25kc1BlclNlY29uZCAqIHNlY29uZHNQZXJNaW51dGU7CiAgc3RhdGljIGNvbnN0IGludCBtaWNyb3NlY29uZHNQZXJIb3VyID0gbWljcm9zZWNvbmRzUGVyTWludXRlICogbWludXRlc1BlckhvdXI7CiAgc3RhdGljIGNvbnN0IGludCBtaWNyb3NlY29uZHNQZXJEYXkgPSBtaWNyb3NlY29uZHNQZXJIb3VyICogaG91cnNQZXJEYXk7CgogIHN0YXRpYyBjb25zdCBpbnQgbWlsbGlzZWNvbmRzUGVyTWludXRlID0KICAgICAgbWlsbGlzZWNvbmRzUGVyU2Vjb25kICogc2Vjb25kc1Blck1pbnV0ZTsKICBzdGF0aWMgY29uc3QgaW50IG1pbGxpc2Vjb25kc1BlckhvdXIgPSBtaWxsaXNlY29uZHNQZXJNaW51dGUgKiBtaW51dGVzUGVySG91cjsKICBzdGF0aWMgY29uc3QgaW50IG1pbGxpc2Vjb25kc1BlckRheSA9IG1pbGxpc2Vjb25kc1BlckhvdXIgKiBob3Vyc1BlckRheTsKCiAgc3RhdGljIGNvbnN0IGludCBzZWNvbmRzUGVySG91ciA9IHNlY29uZHNQZXJNaW51dGUgKiBtaW51dGVzUGVySG91cjsKICBzdGF0aWMgY29uc3QgaW50IHNlY29uZHNQZXJEYXkgPSBzZWNvbmRzUGVySG91ciAqIGhvdXJzUGVyRGF5OwoKICBzdGF0aWMgY29uc3QgaW50IG1pbnV0ZXNQZXJEYXkgPSBtaW51dGVzUGVySG91ciAqIGhvdXJzUGVyRGF5OwoKICBzdGF0aWMgY29uc3QgRHVyYXRpb24gemVybyA9IER1cmF0aW9uKHNlY29uZHM6IDApOwoKICAvKgogICAqIFRoZSB2YWx1ZSBvZiB0aGlzIER1cmF0aW9uIG9iamVjdCBpbiBtaWNyb3NlY29uZHMuCiAgICovCiAgZmluYWwgaW50IF9kdXJhdGlvbjsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBEdXJhdGlvbiBvYmplY3Qgd2hvc2UgdmFsdWUKICAgKiBpcyB0aGUgc3VtIG9mIGFsbCBpbmRpdmlkdWFsIHBhcnRzLgogICAqCiAgICogSW5kaXZpZHVhbCBwYXJ0cyBjYW4gYmUgbGFyZ2VyIHRoYW4gdGhlIG5leHQtYmlnZ2VyIHVuaXQuCiAgICogRm9yIGV4YW1wbGUsIFtob3Vyc10gY2FuIGJlIGdyZWF0ZXIgdGhhbiAyMy4KICAgKgogICAqIEFsbCBpbmRpdmlkdWFsIHBhcnRzIGFyZSBhbGxvd2VkIHRvIGJlIG5lZ2F0aXZlLgogICAqIEFsbCBhcmd1bWVudHMgYXJlIDAgYnkgZGVmYXVsdC4KICAgKi8KICBjb25zdCBEdXJhdGlvbigKICAgICAge2ludCBkYXlzID0gMCwKICAgICAgaW50IGhvdXJzID0gMCwKICAgICAgaW50IG1pbnV0ZXMgPSAwLAogICAgICBpbnQgc2Vjb25kcyA9IDAsCiAgICAgIGludCBtaWxsaXNlY29uZHMgPSAwLAogICAgICBpbnQgbWljcm9zZWNvbmRzID0gMH0pCiAgICAgIDogdGhpcy5fbWljcm9zZWNvbmRzKG1pY3Jvc2Vjb25kc1BlckRheSAqIGRheXMgKwogICAgICAgICAgICBtaWNyb3NlY29uZHNQZXJIb3VyICogaG91cnMgKwogICAgICAgICAgICBtaWNyb3NlY29uZHNQZXJNaW51dGUgKiBtaW51dGVzICsKICAgICAgICAgICAgbWljcm9zZWNvbmRzUGVyU2Vjb25kICogc2Vjb25kcyArCiAgICAgICAgICAgIG1pY3Jvc2Vjb25kc1Blck1pbGxpc2Vjb25kICogbWlsbGlzZWNvbmRzICsKICAgICAgICAgICAgbWljcm9zZWNvbmRzKTsKCiAgLy8gRmFzdCBwYXRoIGludGVybmFsIGRpcmVjdCBjb25zdHJ1Y3RvciB0byBhdm9pZHMgdGhlIG9wdGlvbmFsIGFyZ3VtZW50cyBhbmQKICAvLyBbX21pY3Jvc2Vjb25kc10gcmVjb21wdXRhdGlvbi4KICBjb25zdCBEdXJhdGlvbi5fbWljcm9zZWNvbmRzKHRoaXMuX2R1cmF0aW9uKTsKCiAgLyoqCiAgICogQWRkcyB0aGlzIER1cmF0aW9uIGFuZCBbb3RoZXJdIGFuZAogICAqIHJldHVybnMgdGhlIHN1bSBhcyBhIG5ldyBEdXJhdGlvbiBvYmplY3QuCiAgICovCiAgRHVyYXRpb24gb3BlcmF0b3IgKyhEdXJhdGlvbiBvdGhlcikgewogICAgcmV0dXJuIER1cmF0aW9uLl9taWNyb3NlY29uZHMoX2R1cmF0aW9uICsgb3RoZXIuX2R1cmF0aW9uKTsKICB9CgogIC8qKgogICAqIFN1YnRyYWN0cyBbb3RoZXJdIGZyb20gdGhpcyBEdXJhdGlvbiBhbmQKICAgKiByZXR1cm5zIHRoZSBkaWZmZXJlbmNlIGFzIGEgbmV3IER1cmF0aW9uIG9iamVjdC4KICAgKi8KICBEdXJhdGlvbiBvcGVyYXRvciAtKER1cmF0aW9uIG90aGVyKSB7CiAgICByZXR1cm4gRHVyYXRpb24uX21pY3Jvc2Vjb25kcyhfZHVyYXRpb24gLSBvdGhlci5fZHVyYXRpb24pOwogIH0KCiAgLyoqCiAgICogTXVsdGlwbGllcyB0aGlzIER1cmF0aW9uIGJ5IHRoZSBnaXZlbiBbZmFjdG9yXSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0CiAgICogYXMgYSBuZXcgRHVyYXRpb24gb2JqZWN0LgogICAqCiAgICogTm90ZSB0aGF0IHdoZW4gW2ZhY3Rvcl0gaXMgYSBkb3VibGUsIGFuZCB0aGUgZHVyYXRpb24gaXMgZ3JlYXRlciB0aGFuCiAgICogNTMgYml0cywgcHJlY2lzaW9uIGlzIGxvc3QgYmVjYXVzZSBvZiBkb3VibGUtcHJlY2lzaW9uIGFyaXRobWV0aWMuCiAgICovCiAgRHVyYXRpb24gb3BlcmF0b3IgKihudW0gZmFjdG9yKSB7CiAgICByZXR1cm4gRHVyYXRpb24uX21pY3Jvc2Vjb25kcygoX2R1cmF0aW9uICogZmFjdG9yKS5yb3VuZCgpKTsKICB9CgogIC8qKgogICAqIERpdmlkZXMgdGhpcyBEdXJhdGlvbiBieSB0aGUgZ2l2ZW4gW3F1b3RpZW50XSBhbmQgcmV0dXJucyB0aGUgdHJ1bmNhdGVkCiAgICogcmVzdWx0IGFzIGEgbmV3IER1cmF0aW9uIG9iamVjdC4KICAgKgogICAqIFRocm93cyBhbiBbSW50ZWdlckRpdmlzaW9uQnlaZXJvRXhjZXB0aW9uXSBpZiBbcXVvdGllbnRdIGlzIGAwYC4KICAgKi8KICBEdXJhdGlvbiBvcGVyYXRvciB+LyhpbnQgcXVvdGllbnQpIHsKICAgIC8vIEJ5IGRvaW5nIHRoZSBjaGVjayBoZXJlIGluc3RlYWQgb2YgcmVseWluZyBvbiAifi8iIGJlbG93IHdlIGdldCB0aGUKICAgIC8vIGV4Y2VwdGlvbiBldmVuIHdpdGggZGFydDJqcy4KICAgIGlmIChxdW90aWVudCA9PSAwKSB0aHJvdyBJbnRlZ2VyRGl2aXNpb25CeVplcm9FeGNlcHRpb24oKTsKICAgIHJldHVybiBEdXJhdGlvbi5fbWljcm9zZWNvbmRzKF9kdXJhdGlvbiB+LyBxdW90aWVudCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEdXJhdGlvbgogICAqIGlzIGxlc3MgdGhhbiB0aGUgdmFsdWUgb2YgW290aGVyXS4KICAgKi8KICBib29sIG9wZXJhdG9yIDwoRHVyYXRpb24gb3RoZXIpID0+IHRoaXMuX2R1cmF0aW9uIDwgb3RoZXIuX2R1cmF0aW9uOwoKICAvKioKICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEdXJhdGlvbgogICAqIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgb2YgW290aGVyXS4KICAgKi8KICBib29sIG9wZXJhdG9yID4oRHVyYXRpb24gb3RoZXIpID0+IHRoaXMuX2R1cmF0aW9uID4gb3RoZXIuX2R1cmF0aW9uOwoKICAvKioKICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEdXJhdGlvbgogICAqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgdmFsdWUgb2YgW290aGVyXS4KICAgKi8KICBib29sIG9wZXJhdG9yIDw9KER1cmF0aW9uIG90aGVyKSA9PiB0aGlzLl9kdXJhdGlvbiA8PSBvdGhlci5fZHVyYXRpb247CgogIC8qKgogICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIER1cmF0aW9uCiAgICogaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiBbb3RoZXJdLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPj0oRHVyYXRpb24gb3RoZXIpID0+IHRoaXMuX2R1cmF0aW9uID49IG90aGVyLl9kdXJhdGlvbjsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHdob2xlIGRheXMgc3Bhbm5lZCBieSB0aGlzIER1cmF0aW9uLgogICAqLwogIGludCBnZXQgaW5EYXlzID0+IF9kdXJhdGlvbiB+LyBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJEYXk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB3aG9sZSBob3VycyBzcGFubmVkIGJ5IHRoaXMgRHVyYXRpb24uCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgdmFsdWUgY2FuIGJlIGdyZWF0ZXIgdGhhbiAyMy4KICAgKi8KICBpbnQgZ2V0IGluSG91cnMgPT4gX2R1cmF0aW9uIH4vIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1BlckhvdXI7CgogIC8qKgogICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB3aG9sZSBtaW51dGVzIHNwYW5uZWQgYnkgdGhpcyBEdXJhdGlvbi4KICAgKgogICAqIFRoZSByZXR1cm5lZCB2YWx1ZSBjYW4gYmUgZ3JlYXRlciB0aGFuIDU5LgogICAqLwogIGludCBnZXQgaW5NaW51dGVzID0+IF9kdXJhdGlvbiB+LyBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJNaW51dGU7CgogIC8qKgogICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB3aG9sZSBzZWNvbmRzIHNwYW5uZWQgYnkgdGhpcyBEdXJhdGlvbi4KICAgKgogICAqIFRoZSByZXR1cm5lZCB2YWx1ZSBjYW4gYmUgZ3JlYXRlciB0aGFuIDU5LgogICAqLwogIGludCBnZXQgaW5TZWNvbmRzID0+IF9kdXJhdGlvbiB+LyBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJTZWNvbmQ7CgogIC8qKgogICAqIFJldHVybnMgbnVtYmVyIG9mIHdob2xlIG1pbGxpc2Vjb25kcyBzcGFubmVkIGJ5IHRoaXMgRHVyYXRpb24uCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgdmFsdWUgY2FuIGJlIGdyZWF0ZXIgdGhhbiA5OTkuCiAgICovCiAgaW50IGdldCBpbk1pbGxpc2Vjb25kcyA9PiBfZHVyYXRpb24gfi8gRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyTWlsbGlzZWNvbmQ7CgogIC8qKgogICAqIFJldHVybnMgbnVtYmVyIG9mIHdob2xlIG1pY3Jvc2Vjb25kcyBzcGFubmVkIGJ5IHRoaXMgRHVyYXRpb24uCiAgICovCiAgaW50IGdldCBpbk1pY3Jvc2Vjb25kcyA9PiBfZHVyYXRpb247CgogIC8qKgogICAqIFJldHVybnMgYHRydWVgIGlmIHRoaXMgW0R1cmF0aW9uXSBoYXMgdGhlIHNhbWUgdmFsdWUgYXMgW290aGVyXS4KICAgKi8KICBib29sIG9wZXJhdG9yID09KGR5bmFtaWMgb3RoZXIpID0+CiAgICAgIG90aGVyIGlzIER1cmF0aW9uICYmIF9kdXJhdGlvbiA9PSBvdGhlci5pbk1pY3Jvc2Vjb25kczsKCiAgaW50IGdldCBoYXNoQ29kZSA9PiBfZHVyYXRpb24uaGFzaENvZGU7CgogIC8qKgogICAqIENvbXBhcmVzIHRoaXMgW0R1cmF0aW9uXSB0byBbb3RoZXJdLCByZXR1cm5pbmcgemVybyBpZiB0aGUgdmFsdWVzIGFyZSBlcXVhbC4KICAgKgogICAqIFJldHVybnMgYSBuZWdhdGl2ZSBpbnRlZ2VyIGlmIHRoaXMgYER1cmF0aW9uYCBpcyBzaG9ydGVyIHRoYW4KICAgKiBbb3RoZXJdLCBvciBhIHBvc2l0aXZlIGludGVnZXIgaWYgaXQgaXMgbG9uZ2VyLgogICAqCiAgICogQSBuZWdhdGl2ZSBgRHVyYXRpb25gIGlzIGFsd2F5cyBjb25zaWRlcmVkIHNob3J0ZXIgdGhhbiBhIHBvc2l0aXZlIG9uZS4KICAgKgogICAqIEl0IGlzIGFsd2F5cyB0aGUgY2FzZSB0aGF0IGBkdXJhdGlvbjEuY29tcGFyZVRvKGR1cmF0aW9uMikgPCAwYCBpZmYKICAgKiBgKHNvbWVEYXRlICsgZHVyYXRpb24xKS5jb21wYXJlVG8oc29tZURhdGUgKyBkdXJhdGlvbjIpIDwgMGAuCiAgICovCiAgaW50IGNvbXBhcmVUbyhEdXJhdGlvbiBvdGhlcikgPT4gX2R1cmF0aW9uLmNvbXBhcmVUbyhvdGhlci5fZHVyYXRpb24pOwoKICAvKioKICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgYER1cmF0aW9uYC4KICAgKgogICAqIFJldHVybnMgYSBzdHJpbmcgd2l0aCBob3VycywgbWludXRlcywgc2Vjb25kcywgYW5kIG1pY3Jvc2Vjb25kcywgaW4gdGhlCiAgICogZm9sbG93aW5nIGZvcm1hdDogYEhIOk1NOlNTLm1tbW1tbWAuIEZvciBleGFtcGxlLAogICAqCiAgICogICAgIHZhciBkID0gbmV3IER1cmF0aW9uKGRheXM6MSwgaG91cnM6MSwgbWludXRlczozMywgbWljcm9zZWNvbmRzOiA1MDApOwogICAqICAgICBkLnRvU3RyaW5nKCk7ICAvLyAiMjU6MzM6MDAuMDAwNTAwIgogICAqLwogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZyBzaXhEaWdpdHMoaW50IG4pIHsKICAgICAgaWYgKG4gPj0gMTAwMDAwKSByZXR1cm4gIiRuIjsKICAgICAgaWYgKG4gPj0gMTAwMDApIHJldHVybiAiMCRuIjsKICAgICAgaWYgKG4gPj0gMTAwMCkgcmV0dXJuICIwMCRuIjsKICAgICAgaWYgKG4gPj0gMTAwKSByZXR1cm4gIjAwMCRuIjsKICAgICAgaWYgKG4gPj0gMTApIHJldHVybiAiMDAwMCRuIjsKICAgICAgcmV0dXJuICIwMDAwMCRuIjsKICAgIH0KCiAgICBTdHJpbmcgdHdvRGlnaXRzKGludCBuKSB7CiAgICAgIGlmIChuID49IDEwKSByZXR1cm4gIiRuIjsKICAgICAgcmV0dXJuICIwJG4iOwogICAgfQoKICAgIGlmIChpbk1pY3Jvc2Vjb25kcyA8IDApIHsKICAgICAgcmV0dXJuICItJHstdGhpc30iOwogICAgfQogICAgU3RyaW5nIHR3b0RpZ2l0TWludXRlcyA9IHR3b0RpZ2l0cyhpbk1pbnV0ZXMucmVtYWluZGVyKG1pbnV0ZXNQZXJIb3VyKSk7CiAgICBTdHJpbmcgdHdvRGlnaXRTZWNvbmRzID0gdHdvRGlnaXRzKGluU2Vjb25kcy5yZW1haW5kZXIoc2Vjb25kc1Blck1pbnV0ZSkpOwogICAgU3RyaW5nIHNpeERpZ2l0VXMgPQogICAgICAgIHNpeERpZ2l0cyhpbk1pY3Jvc2Vjb25kcy5yZW1haW5kZXIobWljcm9zZWNvbmRzUGVyU2Vjb25kKSk7CiAgICByZXR1cm4gIiRpbkhvdXJzOiR0d29EaWdpdE1pbnV0ZXM6JHR3b0RpZ2l0U2Vjb25kcy4kc2l4RGlnaXRVcyI7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBgRHVyYXRpb25gIGlzIG5lZ2F0aXZlLgogICAqCiAgICogQSBuZWdhdGl2ZSBgRHVyYXRpb25gIHJlcHJlc2VudHMgdGhlIGRpZmZlcmVuY2UgZnJvbSBhIGxhdGVyIHRpbWUgdG8gYW4KICAgKiBlYXJsaWVyIHRpbWUuCiAgICovCiAgYm9vbCBnZXQgaXNOZWdhdGl2ZSA9PiBfZHVyYXRpb24gPCAwOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGBEdXJhdGlvbmAgcmVwcmVzZW50aW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzCiAgICogYER1cmF0aW9uYC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBgRHVyYXRpb25gIGhhcyB0aGUgc2FtZSBsZW5ndGggYXMgdGhpcyBvbmUsIGJ1dCBpcyBhbHdheXMKICAgKiBwb3NpdGl2ZS4KICAgKi8KICBEdXJhdGlvbiBhYnMoKSA9PiBEdXJhdGlvbi5fbWljcm9zZWNvbmRzKF9kdXJhdGlvbi5hYnMoKSk7CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgYER1cmF0aW9uYCByZXByZXNlbnRpbmcgdGhpcyBgRHVyYXRpb25gIG5lZ2F0ZWQuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgYER1cmF0aW9uYCBoYXMgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoaXMgb25lLCBidXQgd2lsbCBoYXZlIHRoZQogICAqIG9wcG9zaXRlIHNpZ24gb2YgdGhpcyBvbmUuCiAgICovCiAgLy8gVXNpbmcgc3VidHJhY3Rpb24gaGVscHMgZGFydDJqcyBhdm9pZCBuZWdhdGl2ZSB6ZXJvcy4KICBEdXJhdGlvbiBvcGVyYXRvciAtKCkgPT4gRHVyYXRpb24uX21pY3Jvc2Vjb25kcygwIC0gX2R1cmF0aW9uKTsKfQqBKQBOTjwBDwETAQRIA09LDANLSE0DTUxPTQ0DSCULSwc2TTQLLQc0AzBNMRALMyUHMh09AzAqBDE2MSooJQErOiswUUsBKzBRSwFHQQFBATUBBTgGFwEGLykFPzIFNiUGEhUVFxccHTcqLi44GwFQJDABBigvBihABAEGLjYGKEAEAQZLHwVLSAYkQQQBBk0mBUYGJ0skPzoEAQYyKAZHAQYyKwZHAQYyNAZJAQYyNwZJAQZABj4BBkEFMAZAAQZDBTAGRAEGQwUwBkQBBkQFMQZOAQZEBicBBkYGJT4BKgEGUgVDNQVNBUlDBkkBBjkFTTcFTy0GFh4kJCQkJBgGAR4gFAYBHhoGTU8YREUEAQYyBU0TBigBBkYRBUwPBj0BBkQFUCAGO0ICARdkYXJ0OmNvcmUvZHVyYXRpb24uZGFydD1vcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9jb3JlL2Vycm9ycy5kYXJ0wABOyC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogRXJyb3Igb2JqZWN0cyB0aHJvd24gaW4gdGhlIGNhc2Ugb2YgYSBwcm9ncmFtIGZhaWx1cmUuCiAqCiAqIEFuIGBFcnJvcmAgb2JqZWN0IHJlcHJlc2VudHMgYSBwcm9ncmFtIGZhaWx1cmUgdGhhdCB0aGUgcHJvZ3JhbW1lcgogKiBzaG91bGQgaGF2ZSBhdm9pZGVkLgogKgogKiBFeGFtcGxlcyBpbmNsdWRlIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGludmFsaWQgYXJndW1lbnRzLAogKiBvciBldmVuIHdpdGggdGhlIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMsCiAqIG9yIGNhbGxpbmcgaXQgYXQgYSB0aW1lIHdoZW4gaXQgaXMgbm90IGFsbG93ZWQuCiAqCiAqIFRoZXNlIGFyZSBub3QgZXJyb3JzIHRoYXQgYSBjYWxsZXIgc2hvdWxkIGV4cGVjdCBvciBjYXRjaCAtCiAqIGlmIHRoZXkgb2NjdXIsIHRoZSBwcm9ncmFtIGlzIGVycm9uZW91cywKICogYW5kIHRlcm1pbmF0aW5nIHRoZSBwcm9ncmFtIG1heSBiZSB0aGUgc2FmZXN0IHJlc3BvbnNlLgogKgogKiBXaGVuIGRlY2lkaW5nIHRoYXQgYSBmdW5jdGlvbiB0aHJvd3MgYW4gZXJyb3IsCiAqIHRoZSBjb25kaXRpb25zIHdoZXJlIGl0IGhhcHBlbnMgc2hvdWxkIGJlIGNsZWFybHkgZGVzY3JpYmVkLAogKiBhbmQgdGhleSBzaG91bGQgYmUgZGV0ZWN0YWJsZSBhbmQgcHJlZGljdGFibGUsCiAqIHNvIHRoZSBwcm9ncmFtbWVyIHVzaW5nIHRoZSBmdW5jdGlvbiBjYW4gYXZvaWQgdHJpZ2dlcmluZyB0aGUgZXJyb3IuCiAqCiAqIFN1Y2ggZGVzY3JpcHRpb25zIG9mdGVuIHVzZXMgd29yZHMgbGlrZQogKiAibXVzdCIgb3IgIm11c3Qgbm90IiB0byBkZXNjcmliZSB0aGUgY29uZGl0aW9uLAogKiBhbmQgaWYgeW91IHNlZSB3b3JkcyBsaWtlIHRoYXQgaW4gYSBmdW5jdGlvbidzIGRvY3VtZW50YXRpb24sCiAqIHRoZW4gbm90IHNhdGlzZnlpbmcgdGhlIHJlcXVpcmVtZW50CiAqIGlzIHZlcnkgbGlrZWx5IHRvIGNhdXNlIGFuIGVycm9yIHRvIGJlIHRocm93bi4KICoKICogRXhhbXBsZSAoZnJvbSBbU3RyaW5nLmNvbnRhaW5zXSk6CiAqCiAqICAgICAgICBgc3RhcnRJbmRleGAgbXVzdCBub3QgYmUgbmVnYXRpdmUgb3IgZ3JlYXRlciB0aGFuIGBsZW5ndGhgLgogKgogKiBJbiB0aGlzIGNhc2UsIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duIGlmIGBzdGFydEluZGV4YCBpcyBuZWdhdGl2ZQogKiBvciB0b28gbGFyZ2UuCiAqCiAqIElmIHRoZSBjb25kaXRpb25zIGFyZSBub3QgZGV0ZWN0YWJsZSBiZWZvcmUgY2FsbGluZyBhIGZ1bmN0aW9uLAogKiB0aGUgY2FsbGVkIGZ1bmN0aW9uIHNob3VsZCBub3QgdGhyb3cgYW4gYEVycm9yYC4KICogSXQgbWF5IHN0aWxsIHRocm93IGEgdmFsdWUsCiAqIGJ1dCB0aGUgY2FsbGVyIHdpbGwgaGF2ZSB0byBjYXRjaCB0aGUgdGhyb3duIHZhbHVlLAogKiBlZmZlY3RpdmVseSBtYWtpbmcgaXQgYW4gYWx0ZXJuYXRpdmUgcmVzdWx0IHJhdGhlciB0aGFuIGFuIGVycm9yLgogKiBUaGUgdGhyb3duIG9iamVjdCBjYW4gY2hvb3NlIHRvIGltcGxlbWVudCBbRXhjZXB0aW9uXQogKiB0byBkb2N1bWVudCB0aGF0IGl0IHJlcHJlc2VudHMgYW4gZXhjZXB0aW9uYWwsIGJ1dCBub3QgZXJyb25lb3VzLCBvY2N1cnJlbmNlLAogKiBidXQgaXQgaGFzIG5vIG90aGVyIGVmZmVjdCB0aGFuIGRvY3VtZW50YXRpb24uCiAqCiAqIEFsbCBub24tYG51bGxgIHZhbHVlcyBjYW4gYmUgdGhyb3duIGluIERhcnQuCiAqIE9iamVjdHMgZXh0ZW5kaW5nIGBFcnJvcmAgYXJlIGhhbmRsZWQgc3BlY2lhbGx5OgogKiBUaGUgZmlyc3QgdGltZSB0aGV5IGFyZSB0aHJvd24sCiAqIHRoZSBzdGFjayB0cmFjZSBhdCB0aGUgdGhyb3cgcG9pbnQgaXMgcmVjb3JkZWQKICogYW5kIHN0b3JlZCBpbiB0aGUgZXJyb3Igb2JqZWN0LgogKiBJdCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIHRoZSBbc3RhY2tUcmFjZV0gZ2V0dGVyLgogKiBBbiBlcnJvciBvYmplY3QgdGhhdCBtZXJlbHkgaW1wbGVtZW50cyBgRXJyb3JgLCBhbmQgZG9lc24ndCBleHRlbmQgaXQsCiAqIHdpbGwgbm90IHN0b3JlIHRoZSBzdGFjayB0cmFjZSBhdXRvbWF0aWNhbGx5LgogKgogKiBFcnJvciBvYmplY3RzIGFyZSBhbHNvIHVzZWQgZm9yIHN5c3RlbSB3aWRlIGZhaWx1cmVzCiAqIGxpa2Ugc3RhY2sgb3ZlcmZsb3cgb3IgYW4gb3V0LW9mLW1lbW9yeSBzaXR1YXRpb24uCiAqCiAqIFNpbmNlIGVycm9ycyBhcmUgbm90IGNyZWF0ZWQgdG8gYmUgY2F1Z2h0LAogKiB0aGVyZSBpcyBubyBuZWVkIGZvciBzdWJjbGFzc2VzIHRvIGRpc3Rpbmd1aXNoIHRoZSBlcnJvcnMuCiAqIEluc3RlYWQgc3ViY2xhc3NlcyBoYXZlIGJlZW4gY3JlYXRlZCBpbiBvcmRlciB0byBtYWtlIGdyb3VwcwogKiBvZiByZWxhdGVkIGVycm9ycyBlYXN5IHRvIGNyZWF0ZSB3aXRoIGNvbnNpc3RlbnQgZXJyb3IgbWVzc2FnZXMuCiAqIEZvciBleGFtcGxlLCB0aGUgW1N0cmluZy5jb250YWluc10gbWV0aG9kIHdpbGwgdXNlIGEgW1JhbmdlRXJyb3JdCiAqIGlmIGl0cyBgc3RhcnRJbmRleGAgaXNuJ3QgaW4gdGhlIHJhbmdlIGAwLi5sZW5ndGhgLAogKiB3aGljaCBpcyBlYXNpbHkgY3JlYXRlZCBieSBgbmV3IFJhbmdlRXJyb3IucmFuZ2Uoc3RhcnRJbmRleCwgMCwgbGVuZ3RoKWAuCiAqLwpjbGFzcyBFcnJvciB7CiAgRXJyb3IoKTsgLy8gUHJldmVudCB1c2UgYXMgbWl4aW4uCgogIC8qKgogICAqIFNhZmVseSBjb252ZXJ0IGEgdmFsdWUgdG8gYSBbU3RyaW5nXSBkZXNjcmlwdGlvbi4KICAgKgogICAqIFRoZSBjb252ZXJzaW9uIGlzIGd1YXJhbnRlZWQgdG8gbm90IHRocm93LCBzbyBpdCB3b24ndCB1c2UgdGhlIG9iamVjdCdzCiAgICogdG9TdHJpbmcgbWV0aG9kLgogICAqLwogIHN0YXRpYyBTdHJpbmcgc2FmZVRvU3RyaW5nKE9iamVjdCBvYmplY3QpIHsKICAgIGlmIChvYmplY3QgaXMgbnVtIHx8IG9iamVjdCBpcyBib29sIHx8IG51bGwgPT0gb2JqZWN0KSB7CiAgICAgIHJldHVybiBvYmplY3QudG9TdHJpbmcoKTsKICAgIH0KICAgIGlmIChvYmplY3QgaXMgU3RyaW5nKSB7CiAgICAgIHJldHVybiBfc3RyaW5nVG9TYWZlU3RyaW5nKG9iamVjdCk7CiAgICB9CiAgICByZXR1cm4gX29iamVjdFRvU3RyaW5nKG9iamVjdCk7CiAgfQoKICAvKiogQ29udmVydCBzdHJpbmcgdG8gYSB2YWxpZCBzdHJpbmcgbGl0ZXJhbCB3aXRoIG5vIGNvbnRyb2wgY2hhcmFjdGVycy4gKi8KICBleHRlcm5hbCBzdGF0aWMgU3RyaW5nIF9zdHJpbmdUb1NhZmVTdHJpbmcoU3RyaW5nIHN0cmluZyk7CgogIGV4dGVybmFsIHN0YXRpYyBTdHJpbmcgX29iamVjdFRvU3RyaW5nKE9iamVjdCBvYmplY3QpOwoKICBleHRlcm5hbCBTdGFja1RyYWNlIGdldCBzdGFja1RyYWNlOwp9CgovKioKICogRXJyb3IgdGhyb3duIGJ5IHRoZSBydW50aW1lIHN5c3RlbSB3aGVuIGFuIGFzc2VydCBzdGF0ZW1lbnQgZmFpbHMuCiAqLwpjbGFzcyBBc3NlcnRpb25FcnJvciBleHRlbmRzIEVycm9yIHsKICAvKiogTWVzc2FnZSBkZXNjcmliaW5nIHRoZSBhc3NlcnRpb24gZXJyb3IuICovCiAgZmluYWwgT2JqZWN0IG1lc3NhZ2U7CgogIEFzc2VydGlvbkVycm9yKFt0aGlzLm1lc3NhZ2VdKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkgewogICAgICByZXR1cm4gIkFzc2VydGlvbiBmYWlsZWQ6ICR7RXJyb3Iuc2FmZVRvU3RyaW5nKG1lc3NhZ2UpfSI7CiAgICB9CiAgICByZXR1cm4gIkFzc2VydGlvbiBmYWlsZWQiOwogIH0KfQoKLyoqCiAqIEVycm9yIHRocm93biBieSB0aGUgcnVudGltZSBzeXN0ZW0gd2hlbiBhIHR5cGUgYXNzZXJ0aW9uIGZhaWxzLgogKi8KY2xhc3MgVHlwZUVycm9yIGV4dGVuZHMgQXNzZXJ0aW9uRXJyb3Ige30KCi8qKgogKiBFcnJvciB0aHJvd24gYnkgdGhlIHJ1bnRpbWUgc3lzdGVtIHdoZW4gYSBjYXN0IG9wZXJhdGlvbiBmYWlscy4KICovCmNsYXNzIENhc3RFcnJvciBleHRlbmRzIEVycm9yIHt9CgovKioKICogRXJyb3IgdGhyb3duIHdoZW4gYXR0ZW1wdGluZyB0byB0aHJvdyBbOm51bGw6XS4KICovCmNsYXNzIE51bGxUaHJvd25FcnJvciBleHRlbmRzIEVycm9yIHsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgTnVsbFRocm93bkVycm9yKCk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIlRocm93IG9mIG51bGwuIjsKfQoKLyoqCiAqIEVycm9yIHRocm93biB3aGVuIGEgZnVuY3Rpb24gaXMgcGFzc2VkIGFuIHVuYWNjZXB0YWJsZSBhcmd1bWVudC4KICovCmNsYXNzIEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgLyoqIFdoZXRoZXIgdmFsdWUgd2FzIHByb3ZpZGVkLiAqLwogIGZpbmFsIGJvb2wgX2hhc1ZhbHVlOwogIC8qKiBUaGUgaW52YWxpZCB2YWx1ZS4gKi8KICBmaW5hbCBpbnZhbGlkVmFsdWU7CiAgLyoqIE5hbWUgb2YgdGhlIGludmFsaWQgYXJndW1lbnQsIGlmIGF2YWlsYWJsZS4gKi8KICBmaW5hbCBTdHJpbmcgbmFtZTsKICAvKiogTWVzc2FnZSBkZXNjcmliaW5nIHRoZSBwcm9ibGVtLiAqLwogIGZpbmFsIG1lc3NhZ2U7CgogIC8qKgogICAqIFRoZSBbbWVzc2FnZV0gZGVzY3JpYmVzIHRoZSBlcnJvbmVvdXMgYXJndW1lbnQuCiAgICoKICAgKiBFeGlzdGluZyBjb2RlIG1heSBiZSB1c2luZyBgbWVzc2FnZWAgdG8gaG9sZCB0aGUgaW52YWxpZCB2YWx1ZS4KICAgKiBJZiB0aGUgYG1lc3NhZ2VgIGlzIG5vdCBhIFtTdHJpbmddLCBpdCBpcyBhc3N1bWVkIHRvIGJlIGEgdmFsdWUgaW5zdGVhZAogICAqIG9mIGEgbWVzc2FnZS4KICAgKi8KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgQXJndW1lbnRFcnJvcihbdGhpcy5tZXNzYWdlXSkKICAgICAgOiBpbnZhbGlkVmFsdWUgPSBudWxsLAogICAgICAgIF9oYXNWYWx1ZSA9IGZhbHNlLAogICAgICAgIG5hbWUgPSBudWxsOwoKICAvKioKICAgKiBDcmVhdGVzIGVycm9yIGNvbnRhaW5pbmcgdGhlIGludmFsaWQgW3ZhbHVlXS4KICAgKgogICAqIEEgbWVzc2FnZSBpcyBidWlsdCBieSBzdWZmaXhpbmcgdGhlIFttZXNzYWdlXSBhcmd1bWVudCB3aXRoCiAgICogdGhlIFtuYW1lXSBhcmd1bWVudCAoaWYgcHJvdmlkZWQpIGFuZCB0aGUgdmFsdWUuIEV4YW1wbGUKICAgKgogICAqICAgICJJbnZhbGlkIGFyZ3VtZW50IChmb28pOiBudWxsIgogICAqCiAgICogVGhlIGBuYW1lYCBzaG91bGQgbWF0Y2ggdGhlIGFyZ3VtZW50IG5hbWUgb2YgdGhlIGZ1bmN0aW9uLCBidXQgaWYKICAgKiB0aGUgZnVuY3Rpb24gaXMgYSBtZXRob2QgaW1wbGVtZW50aW5nIGFuIGludGVyZmFjZSwgYW5kIGl0cyBhcmd1bWVudAogICAqIG5hbWVzIGRpZmZlciBmcm9tIHRoZSBpbnRlcmZhY2UsIGl0IG1pZ2h0IGJlIG1vcmUgdXNlZnVsIHRvIHVzZSB0aGUKICAgKiBpbnRlcmZhY2UgbWV0aG9kJ3MgYXJndW1lbnQgbmFtZSAob3IganVzdCByZW5hbWUgYXJndW1lbnRzIHRvIG1hdGNoKS4KICAgKi8KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgQXJndW1lbnRFcnJvci52YWx1ZSh2YWx1ZSwgW3RoaXMubmFtZSwgdGhpcy5tZXNzYWdlXSkKICAgICAgOiBpbnZhbGlkVmFsdWUgPSB2YWx1ZSwKICAgICAgICBfaGFzVmFsdWUgPSB0cnVlOwoKICAvKioKICAgKiBDcmVhdGUgYW4gYXJndW1lbnQgZXJyb3IgZm9yIGEgYG51bGxgIGFyZ3VtZW50IHRoYXQgbXVzdCBub3QgYmUgYG51bGxgLgogICAqLwogIEFyZ3VtZW50RXJyb3Iubm90TnVsbChbdGhpcy5uYW1lXSkKICAgICAgOiBfaGFzVmFsdWUgPSBmYWxzZSwKICAgICAgICBtZXNzYWdlID0gIk11c3Qgbm90IGJlIG51bGwiLAogICAgICAgIGludmFsaWRWYWx1ZSA9IG51bGw7CgogIC8qKgogICAqIFRocm93cyBpZiBbYXJndW1lbnRdIGlzIGBudWxsYC4KICAgKi8KICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIHZvaWQgY2hlY2tOb3ROdWxsKE9iamVjdCBhcmd1bWVudCwgW1N0cmluZyBuYW1lXSkgewogICAgaWYgKGFyZ3VtZW50ID09IG51bGwpIHRocm93IEFyZ3VtZW50RXJyb3Iubm90TnVsbChuYW1lKTsKICB9CgogIC8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIHRvU3RyaW5nIG92ZXJyaWRkZW4gaW4gc3ViY2xhc3Nlcy4KICBTdHJpbmcgZ2V0IF9lcnJvck5hbWUgPT4gIkludmFsaWQgYXJndW1lbnQkeyFfaGFzVmFsdWUgPyAiKHMpIiA6ICIifSI7CiAgU3RyaW5nIGdldCBfZXJyb3JFeHBsYW5hdGlvbiA9PiAiIjsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nIG5hbWVTdHJpbmcgPSAiIjsKICAgIGlmIChuYW1lICE9IG51bGwpIHsKICAgICAgbmFtZVN0cmluZyA9ICIgKCRuYW1lKSI7CiAgICB9CiAgICB2YXIgbWVzc2FnZSA9ICh0aGlzLm1lc3NhZ2UgPT0gbnVsbCkgPyAiIiA6ICI6ICR7dGhpcy5tZXNzYWdlfSI7CiAgICBTdHJpbmcgcHJlZml4ID0gIiRfZXJyb3JOYW1lJG5hbWVTdHJpbmckbWVzc2FnZSI7CiAgICBpZiAoIV9oYXNWYWx1ZSkgcmV0dXJuIHByZWZpeDsKICAgIC8vIElmIHdlIGtub3cgdGhlIGludmFsaWQgdmFsdWUsIHdlIGNhbiB0cnkgdG8gZGVzY3JpYmUgdGhlIHByb2JsZW0uCiAgICBTdHJpbmcgZXhwbGFuYXRpb24gPSBfZXJyb3JFeHBsYW5hdGlvbjsKICAgIFN0cmluZyBlcnJvclZhbHVlID0gRXJyb3Iuc2FmZVRvU3RyaW5nKGludmFsaWRWYWx1ZSk7CiAgICByZXR1cm4gIiRwcmVmaXgkZXhwbGFuYXRpb246ICRlcnJvclZhbHVlIjsKICB9Cn0KCi8qKgogKiBFcnJvciB0aHJvd24gZHVlIHRvIGFuIGluZGV4IGJlaW5nIG91dHNpZGUgYSB2YWxpZCByYW5nZS4KICovCmNsYXNzIFJhbmdlRXJyb3IgZXh0ZW5kcyBBcmd1bWVudEVycm9yIHsKICAvKiogVGhlIG1pbmltdW0gdmFsdWUgdGhhdCBbdmFsdWVdIGlzIGFsbG93ZWQgdG8gYXNzdW1lLiAqLwogIGZpbmFsIG51bSBzdGFydDsKICAvKiogVGhlIG1heGltdW0gdmFsdWUgdGhhdCBbdmFsdWVdIGlzIGFsbG93ZWQgdG8gYXNzdW1lLiAqLwogIGZpbmFsIG51bSBlbmQ7CgogIC8vIFRPRE8obHJuKTogVGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgYmUgY2FsbGVkIG9ubHkgd2l0aCBzdHJpbmcgdmFsdWVzLgogIC8vIEl0IGN1cnJlbnRseSBpc24ndCBpbiBhbGwgY2FzZXMuCiAgLyoqCiAgICogQ3JlYXRlIGEgbmV3IFtSYW5nZUVycm9yXSB3aXRoIHRoZSBnaXZlbiBbbWVzc2FnZV0uCiAgICovCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIFJhbmdlRXJyb3IodmFyIG1lc3NhZ2UpCiAgICAgIDogc3RhcnQgPSBudWxsLAogICAgICAgIGVuZCA9IG51bGwsCiAgICAgICAgc3VwZXIobWVzc2FnZSk7CgogIC8qKgogICAqIENyZWF0ZSBhIG5ldyBbUmFuZ2VFcnJvcl0gd2l0aCBhIG1lc3NhZ2UgZm9yIHRoZSBnaXZlbiBbdmFsdWVdLgogICAqCiAgICogQW4gb3B0aW9uYWwgW25hbWVdIGNhbiBzcGVjaWZ5IHRoZSBhcmd1bWVudCBuYW1lIHRoYXQgaGFzIHRoZQogICAqIGludmFsaWQgdmFsdWUsIGFuZCB0aGUgW21lc3NhZ2VdIGNhbiBvdmVycmlkZSB0aGUgZGVmYXVsdCBlcnJvcgogICAqIGRlc2NyaXB0aW9uLgogICAqLwogIFJhbmdlRXJyb3IudmFsdWUobnVtIHZhbHVlLCBbU3RyaW5nIG5hbWUsIFN0cmluZyBtZXNzYWdlXSkKICAgICAgOiBzdGFydCA9IG51bGwsCiAgICAgICAgZW5kID0gbnVsbCwKICAgICAgICBzdXBlci52YWx1ZSgKICAgICAgICAgICAgdmFsdWUsIG5hbWUsIChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJWYWx1ZSBub3QgaW4gcmFuZ2UiKTsKCiAgLyoqCiAgICogQ3JlYXRlIGEgbmV3IFtSYW5nZUVycm9yXSBmb3IgYSB2YWx1ZSBiZWluZyBvdXRzaWRlIHRoZSB2YWxpZCByYW5nZS4KICAgKgogICAqIFRoZSBhbGxvd2VkIHJhbmdlIGlzIGZyb20gW21pblZhbHVlXSB0byBbbWF4VmFsdWVdLCBpbmNsdXNpdmUuCiAgICogSWYgYG1pblZhbHVlYCBvciBgbWF4VmFsdWVgIGFyZSBgbnVsbGAsIHRoZSByYW5nZSBpcyBpbmZpbml0ZSBpbgogICAqIHRoYXQgZGlyZWN0aW9uLgogICAqCiAgICogRm9yIGEgcmFuZ2UgZnJvbSAwIHRvIHRoZSBsZW5ndGggb2Ygc29tZXRoaW5nLCBlbmQgZXhjbHVzaXZlLCB1c2UKICAgKiBbUmFuZ2VFcnJvci5pbmRleF0uCiAgICoKICAgKiBBbiBvcHRpb25hbCBbbmFtZV0gY2FuIHNwZWNpZnkgdGhlIGFyZ3VtZW50IG5hbWUgdGhhdCBoYXMgdGhlCiAgICogaW52YWxpZCB2YWx1ZSwgYW5kIHRoZSBbbWVzc2FnZV0gY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGVycm9yCiAgICogZGVzY3JpcHRpb24uCiAgICovCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIFJhbmdlRXJyb3IucmFuZ2UobnVtIGludmFsaWRWYWx1ZSwgaW50IG1pblZhbHVlLCBpbnQgbWF4VmFsdWUsCiAgICAgIFtTdHJpbmcgbmFtZSwgU3RyaW5nIG1lc3NhZ2VdKQogICAgICA6IHN0YXJ0ID0gbWluVmFsdWUsCiAgICAgICAgZW5kID0gbWF4VmFsdWUsCiAgICAgICAgc3VwZXIudmFsdWUoCiAgICAgICAgICAgIGludmFsaWRWYWx1ZSwgbmFtZSwgKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIkludmFsaWQgdmFsdWUiKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBbUmFuZ2VFcnJvcl0gc3RhdGluZyB0aGF0IFtpbmRleF0gaXMgbm90IGEgdmFsaWQgaW5kZXgKICAgKiBpbnRvIFtpbmRleGFibGVdLgogICAqCiAgICogQW4gb3B0aW9uYWwgW25hbWVdIGNhbiBzcGVjaWZ5IHRoZSBhcmd1bWVudCBuYW1lIHRoYXQgaGFzIHRoZQogICAqIGludmFsaWQgdmFsdWUsIGFuZCB0aGUgW21lc3NhZ2VdIGNhbiBvdmVycmlkZSB0aGUgZGVmYXVsdCBlcnJvcgogICAqIGRlc2NyaXB0aW9uLgogICAqCiAgICogVGhlIFtsZW5ndGhdIGlzIHRoZSBsZW5ndGggb2YgW2luZGV4YWJsZV0gYXQgdGhlIHRpbWUgb2YgdGhlIGVycm9yLgogICAqIElmIGBsZW5ndGhgIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGBpbmRleGFibGUubGVuZ3RoYC4KICAgKi8KICBmYWN0b3J5IFJhbmdlRXJyb3IuaW5kZXgoaW50IGluZGV4LCBkeW5hbWljIGluZGV4YWJsZSwKICAgICAgW1N0cmluZyBuYW1lLCBTdHJpbmcgbWVzc2FnZSwgaW50IGxlbmd0aF0pID0gSW5kZXhFcnJvcjsKCiAgLyoqCiAgICogQ2hlY2sgdGhhdCBhIFt2YWx1ZV0gbGllcyBpbiBhIHNwZWNpZmljIGludGVydmFsLgogICAqCiAgICogVGhyb3dzIGlmIFt2YWx1ZV0gaXMgbm90IGluIHRoZSBpbnRlcnZhbC4KICAgKiBUaGUgaW50ZXJ2YWwgaXMgZnJvbSBbbWluVmFsdWVdIHRvIFttYXhWYWx1ZV0sIGJvdGggaW5jbHVzaXZlLgogICAqLwogIHN0YXRpYyB2b2lkIGNoZWNrVmFsdWVJbkludGVydmFsKGludCB2YWx1ZSwgaW50IG1pblZhbHVlLCBpbnQgbWF4VmFsdWUsCiAgICAgIFtTdHJpbmcgbmFtZSwgU3RyaW5nIG1lc3NhZ2VdKSB7CiAgICBpZiAodmFsdWUgPCBtaW5WYWx1ZSB8fCB2YWx1ZSA+IG1heFZhbHVlKSB7CiAgICAgIHRocm93IFJhbmdlRXJyb3IucmFuZ2UodmFsdWUsIG1pblZhbHVlLCBtYXhWYWx1ZSwgbmFtZSwgbWVzc2FnZSk7CiAgICB9CiAgfQoKICAvKioKICAgKiBDaGVjayB0aGF0IGEgdmFsdWUgaXMgYSB2YWxpZCBpbmRleCBpbnRvIGFuIGluZGV4YWJsZSBvYmplY3QuCiAgICoKICAgKiBUaHJvd3MgaWYgW2luZGV4XSBpcyBub3QgYSB2YWxpZCBpbmRleCBpbnRvIFtpbmRleGFibGVdLgogICAqCiAgICogQW4gaW5kZXhhYmxlIG9iamVjdCBpcyBvbmUgdGhhdCBoYXMgYSBgbGVuZ3RoYCBhbmQgYSBhbmQgaW5kZXgtb3BlcmF0b3IKICAgKiBgW11gIHRoYXQgYWNjZXB0cyBhbiBpbmRleCBpZiBgMCA8PSBpbmRleCA8IGxlbmd0aGAuCiAgICoKICAgKiBJZiBbbGVuZ3RoXSBpcyBwcm92aWRlZCwgaXQgaXMgdXNlZCBhcyB0aGUgbGVuZ3RoIG9mIHRoZSBpbmRleGFibGUgb2JqZWN0LAogICAqIG90aGVyd2lzZSB0aGUgbGVuZ3RoIGlzIGZvdW5kIGFzIGBpbmRleGFibGUubGVuZ3RoYC4KICAgKi8KICBzdGF0aWMgdm9pZCBjaGVja1ZhbGlkSW5kZXgoaW50IGluZGV4LCBkeW5hbWljIGluZGV4YWJsZSwKICAgICAgW1N0cmluZyBuYW1lLCBpbnQgbGVuZ3RoLCBTdHJpbmcgbWVzc2FnZV0pIHsKICAgIGxlbmd0aCA/Pz0gaW5kZXhhYmxlLmxlbmd0aDsKICAgIC8vIENvbXBhcmluZyB3aXRoIGAwYCBhcyByZWNlaXZlciBwcm9kdWNlcyBiZXR0ZXIgZGFydDJqcyB0eXBlIGluZmVyZW5jZS4KICAgIGlmICgwID4gaW5kZXggfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIG5hbWUgPz89ICJpbmRleCI7CiAgICAgIHRocm93IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIGluZGV4YWJsZSwgbmFtZSwgbWVzc2FnZSwgbGVuZ3RoKTsKICAgIH0KICB9CgogIC8qKgogICAqIENoZWNrIHRoYXQgYSByYW5nZSByZXByZXNlbnRzIGEgc2xpY2Ugb2YgYW4gaW5kZXhhYmxlIG9iamVjdC4KICAgKgogICAqIFRocm93cyBpZiB0aGUgcmFuZ2UgaXMgbm90IHZhbGlkIGZvciBhbiBpbmRleGFibGUgb2JqZWN0IHdpdGgKICAgKiB0aGUgZ2l2ZW4gW2xlbmd0aF0uCiAgICogQSByYW5nZSBpcyB2YWxpZCBmb3IgYW4gaW5kZXhhYmxlIG9iamVjdCB3aXRoIGEgZ2l2ZW4gW2xlbmd0aF0KICAgKgogICAqIGlmIGAwIDw9IFtzdGFydF0gPD0gW2VuZF0gPD0gW2xlbmd0aF1gLgogICAqIEFuIGBlbmRgIG9mIGBudWxsYCBpcyBjb25zaWRlcmVkIGVxdWl2YWxlbnQgdG8gYGxlbmd0aGAuCiAgICoKICAgKiBUaGUgW3N0YXJ0TmFtZV0gYW5kIFtlbmROYW1lXSBkZWZhdWx0cyB0byBgInN0YXJ0ImAgYW5kIGAiZW5kImAsCiAgICogcmVzcGVjdGl2ZWx5LgogICAqCiAgICogUmV0dXJucyB0aGUgYWN0dWFsIGBlbmRgIHZhbHVlLCB3aGljaCBpcyBgbGVuZ3RoYCBpZiBgZW5kYCBpcyBgbnVsbGAsCiAgICogYW5kIGBlbmRgIG90aGVyd2lzZS4KICAgKi8KICBzdGF0aWMgaW50IGNoZWNrVmFsaWRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIGludCBsZW5ndGgsCiAgICAgIFtTdHJpbmcgc3RhcnROYW1lLCBTdHJpbmcgZW5kTmFtZSwgU3RyaW5nIG1lc3NhZ2VdKSB7CiAgICAvLyBDb21wYXJpbmcgd2l0aCBgMGAgYXMgcmVjZWl2ZXIgcHJvZHVjZXMgYmV0dGVyIGRhcnQyanMgdHlwZSBpbmZlcmVuY2UuCiAgICAvLyBEaXR0byBgc3RhcnQgPiBlbmRgIGJlbG93LgogICAgaWYgKDAgPiBzdGFydCB8fCBzdGFydCA+IGxlbmd0aCkgewogICAgICBzdGFydE5hbWUgPz89ICJzdGFydCI7CiAgICAgIHRocm93IFJhbmdlRXJyb3IucmFuZ2Uoc3RhcnQsIDAsIGxlbmd0aCwgc3RhcnROYW1lLCBtZXNzYWdlKTsKICAgIH0KICAgIGlmIChlbmQgIT0gbnVsbCkgewogICAgICBpZiAoc3RhcnQgPiBlbmQgfHwgZW5kID4gbGVuZ3RoKSB7CiAgICAgICAgZW5kTmFtZSA/Pz0gImVuZCI7CiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvci5yYW5nZShlbmQsIHN0YXJ0LCBsZW5ndGgsIGVuZE5hbWUsIG1lc3NhZ2UpOwogICAgICB9CiAgICAgIHJldHVybiBlbmQ7CiAgICB9CiAgICByZXR1cm4gbGVuZ3RoOwogIH0KCiAgLyoqCiAgICogQ2hlY2sgdGhhdCBhbiBpbnRlZ2VyIHZhbHVlIGlzbid0IG5lZ2F0aXZlLgogICAqCiAgICogVGhyb3dzIGlmIHRoZSB2YWx1ZSBpcyBuZWdhdGl2ZS4KICAgKi8KICBzdGF0aWMgdm9pZCBjaGVja05vdE5lZ2F0aXZlKGludCB2YWx1ZSwgW1N0cmluZyBuYW1lLCBTdHJpbmcgbWVzc2FnZV0pIHsKICAgIGlmICh2YWx1ZSA8IDApIHRocm93IFJhbmdlRXJyb3IucmFuZ2UodmFsdWUsIDAsIG51bGwsIG5hbWUsIG1lc3NhZ2UpOwogIH0KCiAgU3RyaW5nIGdldCBfZXJyb3JOYW1lID0+ICJSYW5nZUVycm9yIjsKICBTdHJpbmcgZ2V0IF9lcnJvckV4cGxhbmF0aW9uIHsKICAgIGFzc2VydChfaGFzVmFsdWUpOwogICAgU3RyaW5nIGV4cGxhbmF0aW9uID0gIiI7CiAgICBpZiAoc3RhcnQgPT0gbnVsbCkgewogICAgICBpZiAoZW5kICE9IG51bGwpIHsKICAgICAgICBleHBsYW5hdGlvbiA9ICI6IE5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJGVuZCI7CiAgICAgIH0KICAgICAgLy8gSWYgYm90aCBhcmUgbnVsbCwgd2UgZG9uJ3QgYWRkIGEgZGVzY3JpcHRpb24gb2YgdGhlIGxpbWl0cy4KICAgIH0gZWxzZSBpZiAoZW5kID09IG51bGwpIHsKICAgICAgZXhwbGFuYXRpb24gPSAiOiBOb3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICRzdGFydCI7CiAgICB9IGVsc2UgaWYgKGVuZCA+IHN0YXJ0KSB7CiAgICAgIGV4cGxhbmF0aW9uID0gIjogTm90IGluIHJhbmdlICRzdGFydC4uJGVuZCwgaW5jbHVzaXZlIjsKICAgIH0gZWxzZSBpZiAoZW5kIDwgc3RhcnQpIHsKICAgICAgZXhwbGFuYXRpb24gPSAiOiBWYWxpZCB2YWx1ZSByYW5nZSBpcyBlbXB0eSI7CiAgICB9IGVsc2UgewogICAgICAvLyBlbmQgPT0gc3RhcnQuCiAgICAgIGV4cGxhbmF0aW9uID0gIjogT25seSB2YWxpZCB2YWx1ZSBpcyAkc3RhcnQiOwogICAgfQogICAgcmV0dXJuIGV4cGxhbmF0aW9uOwogIH0KfQoKLyoqCiAqIEEgc3BlY2lhbGl6ZWQgW1JhbmdlRXJyb3JdIHVzZWQgd2hlbiBhbiBpbmRleCBpcyBub3QgaW4gdGhlIHJhbmdlCiAqIGAwLi5pbmRleGFibGUubGVuZ3RoLTFgLgogKgogKiBBbHNvIGNvbnRhaW5zIHRoZSBpbmRleGFibGUgb2JqZWN0LCBpdHMgbGVuZ3RoIGF0IHRoZSB0aW1lIG9mIHRoZSBlcnJvciwKICogYW5kIHRoZSBpbnZhbGlkIGluZGV4IGl0c2VsZi4KICovCmNsYXNzIEluZGV4RXJyb3IgZXh0ZW5kcyBBcmd1bWVudEVycm9yIGltcGxlbWVudHMgUmFuZ2VFcnJvciB7CiAgLyoqIFRoZSBpbmRleGFibGUgb2JqZWN0IHRoYXQgW2ludmFsaWRWYWx1ZV0gd2FzIG5vdCBhIHZhbGlkIGluZGV4IGludG8uICovCiAgZmluYWwgaW5kZXhhYmxlOwogIC8qKiBUaGUgbGVuZ3RoIG9mIFtpbmRleGFibGVdIGF0IHRoZSB0aW1lIG9mIHRoZSBlcnJvci4gKi8KICBmaW5hbCBpbnQgbGVuZ3RoOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IFtJbmRleEVycm9yXSBzdGF0aW5nIHRoYXQgW2ludmFsaWRWYWx1ZV0gaXMgbm90IGEgdmFsaWQgaW5kZXgKICAgKiBpbnRvIFtpbmRleGFibGVdLgogICAqCiAgICogVGhlIFtsZW5ndGhdIGlzIHRoZSBsZW5ndGggb2YgW2luZGV4YWJsZV0gYXQgdGhlIHRpbWUgb2YgdGhlIGVycm9yLgogICAqIElmIGBsZW5ndGhgIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGBpbmRleGFibGUubGVuZ3RoYC4KICAgKgogICAqIFRoZSBtZXNzYWdlIGlzIHVzZWQgYXMgcGFydCBvZiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlcnJvci4KICAgKi8KICBJbmRleEVycm9yKGludCBpbnZhbGlkVmFsdWUsIGR5bmFtaWMgaW5kZXhhYmxlLAogICAgICBbU3RyaW5nIG5hbWUsIFN0cmluZyBtZXNzYWdlLCBpbnQgbGVuZ3RoXSkKICAgICAgOiB0aGlzLmluZGV4YWJsZSA9IGluZGV4YWJsZSwKICAgICAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aCA/PyBpbmRleGFibGUubGVuZ3RoLAogICAgICAgIHN1cGVyLnZhbHVlKGludmFsaWRWYWx1ZSwgbmFtZSwKICAgICAgICAgICAgKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIkluZGV4IG91dCBvZiByYW5nZSIpOwoKICAvLyBHZXR0ZXJzIGluaGVyaXRlZCBmcm9tIFJhbmdlRXJyb3IuCiAgaW50IGdldCBzdGFydCA9PiAwOwogIGludCBnZXQgZW5kID0+IGxlbmd0aCAtIDE7CgogIFN0cmluZyBnZXQgX2Vycm9yTmFtZSA9PiAiUmFuZ2VFcnJvciI7CiAgU3RyaW5nIGdldCBfZXJyb3JFeHBsYW5hdGlvbiB7CiAgICBhc3NlcnQoX2hhc1ZhbHVlKTsKICAgIGludCBpbnZhbGlkVmFsdWUgPSB0aGlzLmludmFsaWRWYWx1ZTsKICAgIGlmIChpbnZhbGlkVmFsdWUgPCAwKSB7CiAgICAgIHJldHVybiAiOiBpbmRleCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSI7CiAgICB9CiAgICBpZiAobGVuZ3RoID09IDApIHsKICAgICAgcmV0dXJuICI6IG5vIGluZGljZXMgYXJlIHZhbGlkIjsKICAgIH0KICAgIHJldHVybiAiOiBpbmRleCBzaG91bGQgYmUgbGVzcyB0aGFuICRsZW5ndGgiOwogIH0KfQoKLyoqCiAqIEVycm9yIHRocm93biB3aGVuIGNvbnRyb2wgcmVhY2hlcyB0aGUgZW5kIG9mIGEgc3dpdGNoIGNhc2UuCiAqCiAqIFRoZSBEYXJ0IHNwZWNpZmljYXRpb24gcmVxdWlyZXMgdGhpcyBlcnJvciB0byBiZSB0aHJvd24gd2hlbgogKiBjb250cm9sIHJlYWNoZXMgdGhlIGVuZCBvZiBhIHN3aXRjaCBjYXNlIChleGNlcHQgdGhlIGxhc3QgY2FzZQogKiBvZiBhIHN3aXRjaCkgd2l0aG91dCBtZWV0aW5nIGEgYnJlYWsgb3Igc2ltaWxhciBlbmQgb2YgdGhlIGNvbnRyb2wKICogZmxvdy4KICovCmNsYXNzIEZhbGxUaHJvdWdoRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgRmFsbFRocm91Z2hFcnJvcigpOwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBleHRlcm5hbCBGYWxsVGhyb3VnaEVycm9yLl9jcmVhdGUoU3RyaW5nIHVybCwgaW50IGxpbmUpOwoKICBleHRlcm5hbCBTdHJpbmcgdG9TdHJpbmcoKTsKfQoKLyoqCiAqIEVycm9yIHRocm93biB3aGVuIHRyeWluZyB0byBpbnN0YW50aWF0ZSBhbiBhYnN0cmFjdCBjbGFzcy4KICovCmNsYXNzIEFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgZmluYWwgU3RyaW5nIF9jbGFzc05hbWU7CiAgQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvcihTdHJpbmcgY2xhc3NOYW1lKSA6IF9jbGFzc05hbWUgPSBjbGFzc05hbWU7CgogIGV4dGVybmFsIFN0cmluZyB0b1N0cmluZygpOwp9CgovKioKICogRXJyb3IgdGhyb3duIGJ5IHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIFs6bm9TdWNoTWV0aG9kOl0gb24gW09iamVjdF0uCiAqLwpjbGFzcyBOb1N1Y2hNZXRob2RFcnJvciBleHRlbmRzIEVycm9yIHsKICAvKioKICAgKiBDcmVhdGUgYSBbTm9TdWNoTWV0aG9kRXJyb3JdIGNvcnJlc3BvbmRpbmcgdG8gYSBmYWlsZWQgbWV0aG9kIGNhbGwuCiAgICoKICAgKiBUaGUgW3JlY2VpdmVyXSBpcyB0aGUgcmVjZWl2ZXIgb2YgdGhlIG1ldGhvZCBjYWxsLgogICAqIFRoYXQgaXMsIHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB3YXMgYXR0ZW1wdGVkIGNhbGxlZC4KICAgKgogICAqIFRoZSBbaW52b2NhdGlvbl0gcmVwcmVzZW50cyB0aGUgbWV0aG9kIGNhbGwgdGhhdCBmYWlsZWQuIEl0CiAgICogc2hvdWxkIG5vdCBiZSBgbnVsbGAuCiAgICovCiAgZXh0ZXJuYWwgTm9TdWNoTWV0aG9kRXJyb3Iud2l0aEludm9jYXRpb24oCiAgICAgIE9iamVjdCByZWNlaXZlciwgSW52b2NhdGlvbiBpbnZvY2F0aW9uKTsKCiAgLy8gRGVwcmVjYXRlZCBjb25zdHJ1Y3RvciB0byBiZSByZW1vdmVkIGFmdGVyIGRhcnQyanMgdXBkYXRlcyB0byB0aGUgYWJvdmUuCiAgLyoqCiAgICogQ3JlYXRlIGEgW05vU3VjaE1ldGhvZEVycm9yXSBjb3JyZXNwb25kaW5nIHRvIGEgZmFpbGVkIG1ldGhvZCBjYWxsLgogICAqCiAgICogVGhlIFtyZWNlaXZlcl0gaXMgdGhlIHJlY2VpdmVyIG9mIHRoZSBtZXRob2QgY2FsbC4KICAgKiBUaGF0IGlzLCB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2Qgd2FzIGF0dGVtcHRlZCBjYWxsZWQuCiAgICogSWYgdGhlIHJlY2VpdmVyIGlzIGBudWxsYCwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBjYWxsIHRvIGEgdG9wLWxldmVsCiAgICogZnVuY3Rpb24gb2YgYSBsaWJyYXJ5LgogICAqCiAgICogVGhlIFttZW1iZXJOYW1lXSBpcyBhIFtTeW1ib2xdIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgY2FsbGVkIG1ldGhvZAogICAqIG9yIGFjY2Vzc29yLiBJdCBzaG91bGQgbm90IGJlIGBudWxsYC4KICAgKgogICAqIFRoZSBbcG9zaXRpb25hbEFyZ3VtZW50c10gaXMgYSBsaXN0IG9mIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyB0aGF0IHRoZQogICAqIG1ldGhvZCB3YXMgY2FsbGVkIHdpdGguIElmIGBudWxsYCwgaXQgaXMgY29uc2lkZXJlZCBlcXVpdmFsZW50IHRvIHRoZQogICAqIGVtcHR5IGxpc3QuCiAgICoKICAgKiBUaGUgW25hbWVkQXJndW1lbnRzXSBpcyBhIG1hcCBmcm9tIFtTeW1ib2xdcyB0byB0aGUgdmFsdWVzIG9mIG5hbWVkCiAgICogYXJndW1lbnRzIHRoYXQgdGhlIG1ldGhvZCB3YXMgY2FsbGVkIHdpdGguCiAgICoKICAgKiBUaGlzIGNvbnN0cnVjdG9yIGRvZXMgbm90IGhhbmRsZSB0eXBlIGFyZ3VtZW50cy4KICAgKiBUbyBpbmNsdWRlIHR5cGUgdmFyaWFibGVzLCBjcmVhdGUgYW4gW0ludm9jYXRpb25dIGFuZCB1c2UKICAgKiBbTm9TdWNoTWV0aG9kRXJyb3Iud2l0aEludm9jYXRpb25dLgogICAqLwogIEBEZXByZWNhdGVkKCJVc2UgTm9TdWNoTWV0aG9kLndpdGhJbnZvY2F0aW9uIGluc3RlYWQiKQogIGV4dGVybmFsIE5vU3VjaE1ldGhvZEVycm9yKE9iamVjdCByZWNlaXZlciwgU3ltYm9sIG1lbWJlck5hbWUsCiAgICAgIExpc3QgcG9zaXRpb25hbEFyZ3VtZW50cywgTWFwPFN5bWJvbCwgZHluYW1pYz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIFtAZGVwcmVjYXRlZCBMaXN0IGV4aXN0aW5nQXJndW1lbnROYW1lc10pOwoKICBleHRlcm5hbCBTdHJpbmcgdG9TdHJpbmcoKTsKfQoKLyoqCiAqIFRoZSBvcGVyYXRpb24gd2FzIG5vdCBhbGxvd2VkIGJ5IHRoZSBvYmplY3QuCiAqCiAqIFRoaXMgW0Vycm9yXSBpcyB0aHJvd24gd2hlbiBhbiBpbnN0YW5jZSBjYW5ub3QgaW1wbGVtZW50IG9uZSBvZiB0aGUgbWV0aG9kcwogKiBpbiBpdHMgc2lnbmF0dXJlLgogKi8KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBVbnN1cHBvcnRlZEVycm9yIGV4dGVuZHMgRXJyb3IgewogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBVbnN1cHBvcnRlZEVycm9yKHRoaXMubWVzc2FnZSk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIlVuc3VwcG9ydGVkIG9wZXJhdGlvbjogJG1lc3NhZ2UiOwp9CgovKioKICogVGhyb3duIGJ5IG9wZXJhdGlvbnMgdGhhdCBoYXZlIG5vdCBiZWVuIGltcGxlbWVudGVkIHlldC4KICoKICogVGhpcyBbRXJyb3JdIGlzIHRocm93biBieSB1bmZpbmlzaGVkIGNvZGUgdGhhdCBoYXNuJ3QgeWV0IGltcGxlbWVudGVkCiAqIGFsbCB0aGUgZmVhdHVyZXMgaXQgbmVlZHMuCiAqCiAqIElmIGEgY2xhc3MgaXMgbm90IGludGVuZGluZyB0byBpbXBsZW1lbnQgdGhlIGZlYXR1cmUsIGl0IHNob3VsZCB0aHJvdwogKiBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0gaW5zdGVhZC4gVGhpcyBlcnJvciBpcyBvbmx5IGludGVuZGVkIGZvcgogKiB1c2UgZHVyaW5nIGRldmVsb3BtZW50LgogKi8KY2xhc3MgVW5pbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgRXJyb3IgaW1wbGVtZW50cyBVbnN1cHBvcnRlZEVycm9yIHsKICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKICBVbmltcGxlbWVudGVkRXJyb3IoW3RoaXMubWVzc2FnZV0pOwogIFN0cmluZyB0b1N0cmluZygpID0+ICh0aGlzLm1lc3NhZ2UgIT0gbnVsbAogICAgICA/ICJVbmltcGxlbWVudGVkRXJyb3I6ICRtZXNzYWdlIgogICAgICA6ICJVbmltcGxlbWVudGVkRXJyb3IiKTsKfQoKLyoqCiAqIFRoZSBvcGVyYXRpb24gd2FzIG5vdCBhbGxvd2VkIGJ5IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBvYmplY3QuCiAqCiAqIFRoaXMgaXMgYSBnZW5lcmljIGVycm9yIHVzZWQgZm9yIGEgdmFyaWV0eSBvZiBkaWZmZXJlbnQgZXJyb25lb3VzCiAqIGFjdGlvbnMuIFRoZSBtZXNzYWdlIHNob3VsZCBiZSBkZXNjcmlwdGl2ZS4KICovCmNsYXNzIFN0YXRlRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CiAgU3RhdGVFcnJvcih0aGlzLm1lc3NhZ2UpOwogIFN0cmluZyB0b1N0cmluZygpID0+ICJCYWQgc3RhdGU6ICRtZXNzYWdlIjsKfQoKLyoqCiAqIEVycm9yIG9jY3VycmluZyB3aGVuIGEgY29sbGVjdGlvbiBpcyBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLgogKgogKiBTb21lIG1vZGlmaWNhdGlvbnMgbWF5IGJlIGFsbG93ZWQgZm9yIHNvbWUgY29sbGVjdGlvbnMsIHNvIGVhY2ggY29sbGVjdGlvbgogKiAoW0l0ZXJhYmxlXSBvciBzaW1pbGFyIGNvbGxlY3Rpb24gb2YgdmFsdWVzKSBzaG91bGQgZGVjbGFyZSB3aGljaCBvcGVyYXRpb25zCiAqIGFyZSBhbGxvd2VkIGR1cmluZyBhbiBpdGVyYXRpb24uCiAqLwpjbGFzcyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgLyoqIFRoZSBvYmplY3QgdGhhdCB3YXMgbW9kaWZpZWQgaW4gYW4gaW5jb21wYXRpYmxlIHdheS4gKi8KICBmaW5hbCBPYmplY3QgbW9kaWZpZWRPYmplY3Q7CgogIENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcihbdGhpcy5tb2RpZmllZE9iamVjdF0pOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBpZiAobW9kaWZpZWRPYmplY3QgPT0gbnVsbCkgewogICAgICByZXR1cm4gIkNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGR1cmluZyBpdGVyYXRpb24uIjsKICAgIH0KICAgIHJldHVybiAiQ29uY3VycmVudCBtb2RpZmljYXRpb24gZHVyaW5nIGl0ZXJhdGlvbjogIgogICAgICAgICIke0Vycm9yLnNhZmVUb1N0cmluZyhtb2RpZmllZE9iamVjdCl9LiI7CiAgfQp9CgpjbGFzcyBPdXRPZk1lbW9yeUVycm9yIGltcGxlbWVudHMgRXJyb3IgewogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBjb25zdCBPdXRPZk1lbW9yeUVycm9yKCk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIk91dCBvZiBNZW1vcnkiOwoKICBTdGFja1RyYWNlIGdldCBzdGFja1RyYWNlID0+IG51bGw7Cn0KCmNsYXNzIFN0YWNrT3ZlcmZsb3dFcnJvciBpbXBsZW1lbnRzIEVycm9yIHsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgY29uc3QgU3RhY2tPdmVyZmxvd0Vycm9yKCk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIlN0YWNrIE92ZXJmbG93IjsKCiAgU3RhY2tUcmFjZSBnZXQgc3RhY2tUcmFjZSA9PiBudWxsOwp9CgovKioKICogRXJyb3IgdGhyb3duIHdoZW4gYSBsYXppbHkgaW5pdGlhbGl6ZWQgdmFyaWFibGUgY2Fubm90IGJlIGluaXRpYWxpemVkLgogKgogKiBBIHN0YXRpYy9saWJyYXJ5IHZhcmlhYmxlIHdpdGggYW4gaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbiBpcyBpbml0aWFsaXplZAogKiB0aGUgZmlyc3QgdGltZSBpdCBpcyByZWFkLiBJZiBldmFsdWF0aW5nIHRoZSBpbml0aWFsaXplciBleHByZXNzaW9uIGNhdXNlcwogKiBhbm90aGVyIHJlYWQgb2YgdGhlIHZhcmlhYmxlLCB0aGlzIGVycm9yIGlzIHRocm93bi4KICovCmNsYXNzIEN5Y2xpY0luaXRpYWxpemF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgZmluYWwgU3RyaW5nIHZhcmlhYmxlTmFtZTsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgQ3ljbGljSW5pdGlhbGl6YXRpb25FcnJvcihbdGhpcy52YXJpYWJsZU5hbWVdKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiB2YXJpYWJsZU5hbWUgPT0gbnVsbAogICAgICA/ICJSZWFkaW5nIHN0YXRpYyB2YXJpYWJsZSBkdXJpbmcgaXRzIGluaXRpYWxpemF0aW9uIgogICAgICA6ICJSZWFkaW5nIHN0YXRpYyB2YXJpYWJsZSAnJHZhcmlhYmxlTmFtZScgZHVyaW5nIGl0cyBpbml0aWFsaXphdGlvbiI7Cn0KCi8qKgogKiBFcnJvciB0aHJvd24gd2hlbiBhIGxhdGUgdmFyaWFibGUgaXMgYWNjZXNzZWQgaW4gYW4gaW52YWxpZCBtYW5uZXIuCiAqCiAqIEEgbGF0ZSB2YXJpYWJsZSBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBpdCdzIHJlYWQuCiAqIElmIGEgbGF0ZSB2YXJpYWJsZSBoYXMgbm8gaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbiBhbmQgaGFzIG5vdAogKiBiZWVuIHdyaXR0ZW4gdG8sIHRoZW4gcmVhZGluZyBpdCB3aWxsIHRocm93IGEKICogbGF0ZSBpbml0aWFsaXphdGlvbiBlcnJvci4KICoKICogQSBsYXRlIGZpbmFsIHZhcmlhYmxlIHdpdGggbm8gaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbiBtYXkgb25seQogKiBiZSB3cml0dGVuIHRvIG9uY2UuCiAqIElmIGl0IGlzIHdyaXR0ZW4gdG8gYWdhaW4sIHRoZSB3cml0aW5nIHdpbGwgdGhyb3cgYQogKiBsYXRlIGluaXRpYWxpemF0aW9uIGVycm9yLgogKi8KYWJzdHJhY3QgY2xhc3MgTGF0ZUluaXRpYWxpemF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgZmFjdG9yeSBMYXRlSW5pdGlhbGl6YXRpb25FcnJvci5fKCkgPT4gdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiIik7Cn0KgmgATk48AQ8BEwEEOgNGGAM/LzMDPyw7AzJAMkgDKzNBJzIDJQNGA0URA0M0HzdFOVEyAzA0IzIjNkoxAzg2Ay4+QERFN00EDiQBBjcFTRYGLj0gBhwqBiQEAU49ATkBJgIBBEYEJTEYASIBFhtBBh8EAgEEQwQqAQRDBCEBBDMEJhwVKQIBBEQEJCUYHBY1FSkRAQY1BUVNEwYcIB0bFQEGMwVBPgUnBUdKSUsGHDgeGgEGTQYlGyYdAQYlBhA9PQQBPUkmARYcGB8GRTYjSSw6LwQCAQQ9BCk+Ez4RAUsmBjkGHBoWFBgBBkUFQ0USBj0WFBVOAQZKBURGFQVHGQVDRRIGHEElGhgVUAEGShcFQ0USBUlABjk/AQY3BS9EBkonMEgGBAEGQwU+BU06BVA6BjwzIU4oGEcGBAEGQwVDGUQFLT4FRhMFSxoGPTxOIicdRAYXKRtGCBIGEwQBBjEFJgZLSgQBKSEXHRkZOghFHj0ePh40DRc0BhgEAgEERRwDTCEEP04TPRQBBlEXBUlABUwGMjEkMihBASgWHQEpIRcqHC0GFycGMgQCAQQ/A0BCRgkEJxYcOwEeAgEEPgQ2G04BHgIBBE8EKAZJBThDBUEbBi0vAU4GSQU4Q0scBU8rBU5LEQVJMAU2PykGOUFFMQEeAgEEMANPFQQaJxgcIjoCAQQ8A0keA0lCGwRFGCYtJx8CAQRFA0UvBCEYHC4CAQRDA05QJAQyPh8BNgEWIjoGODIEAgEqHBwoASUCASwcHikBJQIBBEoDS043BDAdHDIsPE0CAQRHAzlAMR4DQRc3HgQ3RQIBFWRhcnQ6Y29yZS9lcnJvcnMuZGFydEFvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9jb3JlL2V4Y2VwdGlvbnMuZGFydJfELy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8vIEV4Y2VwdGlvbnMgYXJlIHRocm93biBlaXRoZXIgYnkgdGhlIFZNIG9yIGZyb20gRGFydCBjb2RlLgoKLyoqCiAqIEEgbWFya2VyIGludGVyZmFjZSBpbXBsZW1lbnRlZCBieSBhbGwgY29yZSBsaWJyYXJ5IGV4Y2VwdGlvbnMuCiAqCiAqIEFuIFtFeGNlcHRpb25dIGlzIGludGVuZGVkIHRvIGNvbnZleSBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciBhYm91dCBhIGZhaWx1cmUsCiAqIHNvIHRoYXQgdGhlIGVycm9yIGNhbiBiZSBhZGRyZXNzZWQgcHJvZ3JhbW1hdGljYWxseS4gSXQgaXMgaW50ZW5kZWQgdG8gYmUKICogY2F1Z2h0LCBhbmQgaXQgc2hvdWxkIGNvbnRhaW4gdXNlZnVsIGRhdGEgZmllbGRzLgogKgogKiBDcmVhdGluZyBpbnN0YW5jZXMgb2YgW0V4Y2VwdGlvbl0gZGlyZWN0bHkgd2l0aCBgRXhjZXB0aW9uKCJtZXNzYWdlIilgCiAqIGlzIGRpc2NvdXJhZ2VkIGluIGxpYnJhcnkgY29kZSBzaW5jZSBpdCBkb2Vzbid0IGdpdmUgdXNlcnMgYSBwcmVjaXNlCiAqIHR5cGUgdGhleSBjYW4gY2F0Y2guIEl0IG1heSBiZSByZWFzb25hYmxlIHRvIHVzZSBpbnN0YW5jZXMgb2YgdGhpcwogKiBjbGFzcyBpbiB0ZXN0cyBvciBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAqLwphYnN0cmFjdCBjbGFzcyBFeGNlcHRpb24gewogIGZhY3RvcnkgRXhjZXB0aW9uKFt2YXIgbWVzc2FnZV0pID0+IF9FeGNlcHRpb24obWVzc2FnZSk7Cn0KCi8qKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIFtFeGNlcHRpb25dIHdoaWNoIGNhcnJpZXMgYSBtZXNzYWdlLiAqLwpjbGFzcyBfRXhjZXB0aW9uIGltcGxlbWVudHMgRXhjZXB0aW9uIHsKICBmaW5hbCBtZXNzYWdlOwoKICBfRXhjZXB0aW9uKFt0aGlzLm1lc3NhZ2VdKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgaWYgKG1lc3NhZ2UgPT0gbnVsbCkgcmV0dXJuICJFeGNlcHRpb24iOwogICAgcmV0dXJuICJFeGNlcHRpb246ICRtZXNzYWdlIjsKICB9Cn0KCi8qKgogKiBFeGNlcHRpb24gdGhyb3duIHdoZW4gYSBzdHJpbmcgb3Igc29tZSBvdGhlciBkYXRhIGRvZXMgbm90IGhhdmUgYW4gZXhwZWN0ZWQKICogZm9ybWF0IGFuZCBjYW5ub3QgYmUgcGFyc2VkIG9yIHByb2Nlc3NlZC4KICovCmNsYXNzIEZvcm1hdEV4Y2VwdGlvbiBpbXBsZW1lbnRzIEV4Y2VwdGlvbiB7CiAgLyoqCiAgICogQSBtZXNzYWdlIGRlc2NyaWJpbmcgdGhlIGZvcm1hdCBlcnJvci4KICAgKi8KICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKCiAgLyoqCiAgICogVGhlIGFjdHVhbCBzb3VyY2UgaW5wdXQgd2hpY2ggY2F1c2VkIHRoZSBlcnJvci4KICAgKgogICAqIFRoaXMgaXMgdXN1YWxseSBhIFtTdHJpbmddLCBidXQgY2FuIGJlIG90aGVyIHR5cGVzIHRvby4KICAgKiBJZiBpdCBpcyBhIHN0cmluZywgcGFydHMgb2YgaXQgbWF5IGJlIGluY2x1ZGVkIGluIHRoZSBbdG9TdHJpbmddIG1lc3NhZ2UuCiAgICoKICAgKiBUaGUgc291cmNlIGlzIGBudWxsYCBpZiBvbWl0dGVkIG9yIHVua25vd24uCiAgICovCiAgZmluYWwgc291cmNlOwoKICAvKioKICAgKiBUaGUgb2Zmc2V0IGluIFtzb3VyY2VdIHdoZXJlIHRoZSBlcnJvciB3YXMgZGV0ZWN0ZWQuCiAgICoKICAgKiBBIHplcm8tYmFzZWQgb2Zmc2V0IGludG8gdGhlIHNvdXJjZSB0aGF0IG1hcmtzIHRoZSBmb3JtYXQgZXJyb3IgY2F1c2luZwogICAqIHRoaXMgZXhjZXB0aW9uIHRvIGJlIGNyZWF0ZWQuIElmIGBzb3VyY2VgIGlzIGEgc3RyaW5nLCB0aGlzIHNob3VsZCBiZSBhCiAgICogc3RyaW5nIGluZGV4IGluIHRoZSByYW5nZSBgMCA8PSBvZmZzZXQgPD0gc291cmNlLmxlbmd0aGAuCiAgICoKICAgKiBJZiBpbnB1dCBpcyBhIHN0cmluZywgdGhlIFt0b1N0cmluZ10gbWV0aG9kIG1heSByZXByZXNlbnQgdGhpcyBvZmZzZXQgYXMKICAgKiBhIGxpbmUgYW5kIGNoYXJhY3RlciBwb3NpdGlvbi4gVGhlIG9mZnNldCBzaG91bGQgYmUgaW5zaWRlIHRoZSBzdHJpbmcsCiAgICogb3IgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLgogICAqCiAgICogTWF5IGJlIG9taXR0ZWQuIElmIHByZXNlbnQsIFtzb3VyY2VdIHNob3VsZCBhbHNvIGJlIHByZXNlbnQgaWYgcG9zc2libGUuCiAgICovCiAgZmluYWwgaW50IG9mZnNldDsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBGb3JtYXRFeGNlcHRpb24gd2l0aCBhbiBvcHRpb25hbCBlcnJvciBbbWVzc2FnZV0uCiAgICoKICAgKiBPcHRpb25hbGx5IGFsc28gc3VwcGx5IHRoZSBhY3R1YWwgW3NvdXJjZV0gd2l0aCB0aGUgaW5jb3JyZWN0IGZvcm1hdCwKICAgKiBhbmQgdGhlIFtvZmZzZXRdIGluIHRoZSBmb3JtYXQgd2hlcmUgYSBwcm9ibGVtIHdhcyBkZXRlY3RlZC4KICAgKi8KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgY29uc3QgRm9ybWF0RXhjZXB0aW9uKFt0aGlzLm1lc3NhZ2UgPSAiIiwgdGhpcy5zb3VyY2UsIHRoaXMub2Zmc2V0XSk7CgogIC8qKgogICAqIFJldHVybnMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybWF0IGV4Y2VwdGlvbi4KICAgKgogICAqIFRoZSBkZXNjcmlwdGlvbiBhbHdheXMgY29udGFpbnMgdGhlIFttZXNzYWdlXS4KICAgKgogICAqIElmIFtzb3VyY2VdIGlzIHByZXNlbnQgYW5kIGlzIGEgc3RyaW5nLCB0aGUgZGVzY3JpcHRpb24gd2lsbCBjb250YWluCiAgICogKGF0IGxlYXN0IGEgcGFydCBvZikgdGhlIHNvdXJjZS4KICAgKiBJZiBbb2Zmc2V0XSBpcyBhbHNvIHByb3ZpZGVkLCB0aGUgcGFydCBvZiB0aGUgc291cmNlIGluY2x1ZGVkIHdpbGwKICAgKiBjb250YWluIHRoYXQgb2Zmc2V0LCBhbmQgdGhlIG9mZnNldCB3aWxsIGJlIG1hcmtlZC4KICAgKgogICAqIElmIHRoZSBzb3VyY2UgaXMgYSBzdHJpbmcgYW5kIGl0IGNvbnRhaW5zIGEgbGluZSBicmVhayBiZWZvcmUgb2Zmc2V0LAogICAqIG9ubHkgdGhlIGxpbmUgY29udGFpbmluZyBvZmZzZXQgd2lsbCBiZSBpbmNsdWRlZCwgYW5kIGl0cyBsaW5lIG51bWJlcgogICAqIHdpbGwgYWxzbyBiZSBwYXJ0IG9mIHRoZSBkZXNjcmlwdGlvbi4gTGluZSBhbmQgY2hhcmFjdGVyIG9mZnNldHMgYXJlCiAgICogMS1iYXNlZC4KICAgKi8KICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmcgcmVwb3J0ID0gIkZvcm1hdEV4Y2VwdGlvbiI7CiAgICBpZiAobWVzc2FnZSAhPSBudWxsICYmICIiICE9IG1lc3NhZ2UpIHsKICAgICAgcmVwb3J0ID0gIiRyZXBvcnQ6ICRtZXNzYWdlIjsKICAgIH0KICAgIGludCBvZmZzZXQgPSB0aGlzLm9mZnNldDsKICAgIE9iamVjdCBvYmplY3RTb3VyY2UgPSB0aGlzLnNvdXJjZTsKICAgIGlmIChvYmplY3RTb3VyY2UgaXMgU3RyaW5nKSB7CiAgICAgIFN0cmluZyBzb3VyY2UgPSBvYmplY3RTb3VyY2U7CiAgICAgIGlmIChvZmZzZXQgIT0gbnVsbCAmJiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBzb3VyY2UubGVuZ3RoKSkgewogICAgICAgIG9mZnNldCA9IG51bGw7CiAgICAgIH0KICAgICAgLy8gU291cmNlIGlzIHN0cmluZyBhbmQgb2Zmc2V0IGlzIG51bGwgb3IgdmFsaWQuCiAgICAgIGlmIChvZmZzZXQgPT0gbnVsbCkgewogICAgICAgIGlmIChzb3VyY2UubGVuZ3RoID4gNzgpIHsKICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZS5zdWJzdHJpbmcoMCwgNzUpICsgIi4uLiI7CiAgICAgICAgfQogICAgICAgIHJldHVybiAiJHJlcG9ydFxuJHNvdXJjZSI7CiAgICAgIH0KICAgICAgaW50IGxpbmVOdW0gPSAxOwogICAgICBpbnQgbGluZVN0YXJ0ID0gMDsKICAgICAgYm9vbCBwcmV2aW91c0NoYXJXYXNDUiA9IGZhbHNlOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9mZnNldDsgaSsrKSB7CiAgICAgICAgaW50IGNoYXIgPSBzb3VyY2UuY29kZVVuaXRBdChpKTsKICAgICAgICBpZiAoY2hhciA9PSAweDBhKSB7CiAgICAgICAgICBpZiAobGluZVN0YXJ0ICE9IGkgfHwgIXByZXZpb3VzQ2hhcldhc0NSKSB7CiAgICAgICAgICAgIGxpbmVOdW0rKzsKICAgICAgICAgIH0KICAgICAgICAgIGxpbmVTdGFydCA9IGkgKyAxOwogICAgICAgICAgcHJldmlvdXNDaGFyV2FzQ1IgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgaWYgKGNoYXIgPT0gMHgwZCkgewogICAgICAgICAgbGluZU51bSsrOwogICAgICAgICAgbGluZVN0YXJ0ID0gaSArIDE7CiAgICAgICAgICBwcmV2aW91c0NoYXJXYXNDUiA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChsaW5lTnVtID4gMSkgewogICAgICAgIHJlcG9ydCArPSAiIChhdCBsaW5lICRsaW5lTnVtLCBjaGFyYWN0ZXIgJHtvZmZzZXQgLSBsaW5lU3RhcnQgKyAxfSlcbiI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVwb3J0ICs9ICIgKGF0IGNoYXJhY3RlciAke29mZnNldCArIDF9KVxuIjsKICAgICAgfQogICAgICBpbnQgbGluZUVuZCA9IHNvdXJjZS5sZW5ndGg7CiAgICAgIGZvciAoaW50IGkgPSBvZmZzZXQ7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHsKICAgICAgICBpbnQgY2hhciA9IHNvdXJjZS5jb2RlVW5pdEF0KGkpOwogICAgICAgIGlmIChjaGFyID09IDB4MGEgfHwgY2hhciA9PSAweDBkKSB7CiAgICAgICAgICBsaW5lRW5kID0gaTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpbnQgbGVuZ3RoID0gbGluZUVuZCAtIGxpbmVTdGFydDsKICAgICAgaW50IHN0YXJ0ID0gbGluZVN0YXJ0OwogICAgICBpbnQgZW5kID0gbGluZUVuZDsKICAgICAgU3RyaW5nIHByZWZpeCA9ICIiOwogICAgICBTdHJpbmcgcG9zdGZpeCA9ICIiOwogICAgICBpZiAobGVuZ3RoID4gNzgpIHsKICAgICAgICAvLyBDYW4ndCBzaG93IGVudGlyZSBsaW5lLiBUcnkgdG8gYW5jaG9yIGF0IHRoZSBuZWFyZXN0IGVuZCwgaWYKICAgICAgICAvLyBvbmUgaXMgd2l0aGluIHJlYWNoLgogICAgICAgIGludCBpbmRleCA9IG9mZnNldCAtIGxpbmVTdGFydDsKICAgICAgICBpZiAoaW5kZXggPCA3NSkgewogICAgICAgICAgZW5kID0gc3RhcnQgKyA3NTsKICAgICAgICAgIHBvc3RmaXggPSAiLi4uIjsKICAgICAgICB9IGVsc2UgaWYgKGVuZCAtIG9mZnNldCA8IDc1KSB7CiAgICAgICAgICBzdGFydCA9IGVuZCAtIDc1OwogICAgICAgICAgcHJlZml4ID0gIi4uLiI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIE5laXRoZXIgZW5kIGlzIG5lYXIsIGp1c3QgcGljayBhbiBhcmVhIGFyb3VuZCB0aGUgb2Zmc2V0LgogICAgICAgICAgc3RhcnQgPSBvZmZzZXQgLSAzNjsKICAgICAgICAgIGVuZCA9IG9mZnNldCArIDM2OwogICAgICAgICAgcHJlZml4ID0gcG9zdGZpeCA9ICIuLi4iOwogICAgICAgIH0KICAgICAgfQogICAgICBTdHJpbmcgc2xpY2UgPSBzb3VyY2Uuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpOwogICAgICBpbnQgbWFya09mZnNldCA9IG9mZnNldCAtIHN0YXJ0ICsgcHJlZml4Lmxlbmd0aDsKICAgICAgcmV0dXJuICIkcmVwb3J0JHByZWZpeCRzbGljZSRwb3N0Zml4XG4keyIgIiAqIG1hcmtPZmZzZXR9XlxuIjsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRoZSBzb3VyY2UgaXMgbm90IGEgc3RyaW5nLgogICAgICBpZiAob2Zmc2V0ICE9IG51bGwpIHsKICAgICAgICByZXBvcnQgKz0gIiAoYXQgb2Zmc2V0ICRvZmZzZXQpIjsKICAgICAgfQogICAgICByZXR1cm4gcmVwb3J0OwogICAgfQogIH0KfQoKLy8gRXhjZXB0aW9uIHRocm93biB3aGVuIGRvaW5nIGludGVnZXIgZGl2aXNpb24gd2l0aCBhIHplcm8gZGl2aXNvci4KY2xhc3MgSW50ZWdlckRpdmlzaW9uQnlaZXJvRXhjZXB0aW9uIGltcGxlbWVudHMgRXhjZXB0aW9uIHsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgY29uc3QgSW50ZWdlckRpdmlzaW9uQnlaZXJvRXhjZXB0aW9uKCk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkludGVnZXJEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbiI7Cn0KgL0ATk48AQ8BEwE9AQRCA1FNNQNKSEYpBBs7AgFGKBEBHgEWLSIEAgEETy0ELQYsBhgBBjUFPU8FMQYQAQY6BU1NPwVOTCIFTgYUAQZFBUtCBhxIAQY0BTQFSiZIOQVLS0oOBhYnLCQGHiciJEYXCDccIjQKIwgXGSYpKRw2FwwdJSMVHSQKCBlQDzUIIzUpLBcRCggoHRkaGxlIICgaHBsoHBoRRx8dJAoIMzdFDSUcKggVBgQCAUU8HCo5AgEZZGFydDpjb3JlL2V4Y2VwdGlvbnMuZGFydD5vcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9jb3JlL2V4cGFuZG8uZGFydIiYLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBBbiBbRXhwYW5kb10gYWxsb3dzIGFkZGluZyBuZXcgcHJvcGVydGllcyB0byBvYmplY3RzLgogKgogKiBEb2VzIG5vdCB3b3JrIG9uIG51bWJlcnMsIHN0cmluZ3MsIGJvb2xlYW5zIG9yIG51bGwuCiAqCiAqIEFuIGBFeHBhbmRvYCBkb2VzIG5vdCBob2xkIG9uIHRvIHRoZSBhZGRlZCBwcm9wZXJ0eSB2YWx1ZSBhZnRlciBhbiBvYmplY3QKICogYmVjb21lcyBpbmFjY2Vzc2libGUuCiAqCiAqIFNpbmNlIHlvdSBjYW4gYWx3YXlzIGNyZWF0ZSBhIG5ldyBudW1iZXIgdGhhdCBpcyBpZGVudGljYWwgdG8gYW4gZXhpc3RpbmcKICogbnVtYmVyLCBpdCBtZWFucyB0aGF0IGFuIGV4cGFuZG8gcHJvcGVydHkgb24gYSBudW1iZXIgY291bGQgbmV2ZXIgYmUKICogcmVsZWFzZWQuIFRvIGF2b2lkIHRoaXMsIGV4cGFuZG8gcHJvcGVydGllcyBjYW5ub3QgYmUgYWRkZWQgdG8gbnVtYmVycy4KICogVGhlIHNhbWUgYXJndW1lbnQgYXBwbGllcyB0byBzdHJpbmdzLCBib29sZWFucyBhbmQgbnVsbCwgd2hpY2ggYWxzbyBoYXZlCiAqIGxpdGVyYWxzIHRoYXQgZXZhbHVhdGUgdG8gaWRlbnRpY2FsIHZhbHVlcyB3aGVuIHRoZXkgb2NjdXIgbW9yZSB0aGFuIG9uY2UuCiAqCiAqIFRoZXJlIGlzIG5vIHJlc3RyaWN0aW9uIG9uIG90aGVyIGNsYXNzZXMsIGV2ZW4gZm9yIGNvbXBpbGUgdGltZSBjb25zdGFudAogKiBvYmplY3RzLiBCZSBjYXJlZnVsIGlmIGFkZGluZyBleHBhbmRvIHByb3BlcnRpZXMgdG8gY29tcGlsZSB0aW1lIGNvbnN0YW50cywKICogc2luY2UgdGhleSB3aWxsIHN0YXkgYWxpdmUgZm9yZXZlci4KICovCmNsYXNzIEV4cGFuZG88VD4gewogIC8qKgogICAqIFRoZSBuYW1lIG9mIHRoZSB0aGlzIFtFeHBhbmRvXSBhcyBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLiBJZgogICAqIG5vIG5hbWUgd2FzIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IsIHRoZSBuYW1lIGlzIFs6bnVsbDpdLgogICAqLwogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IFtFeHBhbmRvXS4gVGhlIG9wdGlvbmFsIG5hbWUgaXMgb25seSB1c2VkIGZvcgogICAqIGRlYnVnZ2luZyBwdXJwb3NlcyBhbmQgY3JlYXRpbmcgdHdvIGRpZmZlcmVudCBbRXhwYW5kb11zIHdpdGggdGhlCiAgICogc2FtZSBuYW1lIHlpZWxkcyB0d28gW0V4cGFuZG9dcyB0aGF0IHdvcmsgb24gZGlmZmVyZW50IHByb3BlcnRpZXMKICAgKiBvZiB0aGUgb2JqZWN0cyB0aGV5IGFyZSB1c2VkIG9uLgogICAqLwogIGV4dGVybmFsIEV4cGFuZG8oW1N0cmluZyBuYW1lXSk7CgogIC8qKgogICAqIEV4cGFuZG8gdG9TdHJpbmcgbWV0aG9kIG92ZXJyaWRlLgogICAqLwogIFN0cmluZyB0b1N0cmluZygpID0+ICJFeHBhbmRvOiRuYW1lIjsKCiAgLyoqCiAgICogR2V0cyB0aGUgdmFsdWUgb2YgdGhpcyBbRXhwYW5kb10ncyBwcm9wZXJ0eSBvbiB0aGUgZ2l2ZW4KICAgKiBvYmplY3QuIElmIHRoZSBvYmplY3QgaGFzbid0IGJlZW4gZXhwYW5kZWQsIHRoZSBtZXRob2QgcmV0dXJucwogICAqIFs6bnVsbDpdLgogICAqCiAgICogVGhlIG9iamVjdCBtdXN0IG5vdCBiZSBhIG51bWJlciwgYSBzdHJpbmcsIGEgYm9vbGVhbiBvciBudWxsLgogICAqLwogIGV4dGVybmFsIFQgb3BlcmF0b3IgW10oT2JqZWN0IG9iamVjdCk7CgogIC8qKgogICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoaXMgW0V4cGFuZG9dJ3MgcHJvcGVydHkgb24gdGhlIGdpdmVuCiAgICogb2JqZWN0LiBQcm9wZXJ0aWVzIGNhbiBlZmZlY3RpdmVseSBiZSByZW1vdmVkIGFnYWluIGJ5IHNldHRpbmcKICAgKiB0aGVpciB2YWx1ZSB0byBudWxsLgogICAqCiAgICogVGhlIG9iamVjdCBtdXN0IG5vdCBiZSBhIG51bWJlciwgYSBzdHJpbmcsIGEgYm9vbGVhbiBvciBudWxsLgogICAqLwogIGV4dGVybmFsIHZvaWQgb3BlcmF0b3IgW109KE9iamVjdCBvYmplY3QsIFQgdmFsdWUpOwp9CkIATk48AQ8BEwEEOQM4A00ZA01IS0xOA0xPJwQTBkVCBhUBBkFHRyYGIwEGJwYoAQY+RA8FQwYpAQY+RBoFQwY2AgEWZGFydDpjb3JlL2V4cGFuZG8uZGFydFBvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vbGliL2V4cGFuZG9fcGF0Y2guZGFydI92Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIEV4cGFuZG88VD4gewogIEBwYXRjaAogIEV4cGFuZG8oW1N0cmluZyBuYW1lXSkKICAgICAgOiBuYW1lID0gbmFtZSwKICAgICAgICBfZGF0YSA9IG5ldyBMaXN0KF9taW5TaXplKSwKICAgICAgICBfdXNlZCA9IDA7CgogIHN0YXRpYyBjb25zdCBfbWluU2l6ZSA9IDg7CiAgc3RhdGljIGZpbmFsIF9kZWxldGVkRW50cnkgPSBuZXcgX1dlYWtQcm9wZXJ0eShudWxsLCBudWxsKTsKCiAgQHBhdGNoCiAgVCBvcGVyYXRvciBbXShPYmplY3Qgb2JqZWN0KSB7CiAgICBfY2hlY2tUeXBlKG9iamVjdCk7CgogICAgdmFyIG1hc2sgPSBfc2l6ZSAtIDE7CiAgICB2YXIgaWR4ID0gb2JqZWN0Ll9pZGVudGl0eUhhc2hDb2RlICYgbWFzazsKICAgIHZhciB3cCA9IF9kYXRhW2lkeF07CgogICAgd2hpbGUgKHdwICE9IG51bGwpIHsKICAgICAgaWYgKGlkZW50aWNhbCh3cC5rZXksIG9iamVjdCkpIHsKICAgICAgICByZXR1cm4gd3AudmFsdWU7CiAgICAgIH0gZWxzZSBpZiAod3Aua2V5ID09IG51bGwpIHsKICAgICAgICAvLyBUaGlzIGVudHJ5IGhhcyBiZWVuIGNsZWFyZWQgYnkgdGhlIEdDLgogICAgICAgIF9kYXRhW2lkeF0gPSBfZGVsZXRlZEVudHJ5OwogICAgICB9CiAgICAgIGlkeCA9IChpZHggKyAxKSAmIG1hc2s7CiAgICAgIHdwID0gX2RhdGFbaWR4XTsKICAgIH0KCiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBwYXRjaAogIHZvaWQgb3BlcmF0b3IgW109KE9iamVjdCBvYmplY3QsIFQgdmFsdWUpIHsKICAgIF9jaGVja1R5cGUob2JqZWN0KTsKCiAgICB2YXIgbWFzayA9IF9zaXplIC0gMTsKICAgIHZhciBpZHggPSBvYmplY3QuX2lkZW50aXR5SGFzaENvZGUgJiBtYXNrOwogICAgdmFyIGVtcHR5X2lkeCA9IC0xOwogICAgdmFyIHdwID0gX2RhdGFbaWR4XTsKCiAgICB3aGlsZSAod3AgIT0gbnVsbCkgewogICAgICBpZiAoaWRlbnRpY2FsKHdwLmtleSwgb2JqZWN0KSkgewogICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgICAvLyBVcGRhdGUgdGhlIGFzc29jaWF0ZWQgdmFsdWUuCiAgICAgICAgICB3cC52YWx1ZSA9IHZhbHVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBNYXJrIHRoZSBlbnRyeSBhcyBkZWxldGVkLgogICAgICAgICAgX2RhdGFbaWR4XSA9IF9kZWxldGVkRW50cnk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfSBlbHNlIGlmICgoZW1wdHlfaWR4IDwgMCkgJiYgaWRlbnRpY2FsKHdwLCBfZGVsZXRlZEVudHJ5KSkgewogICAgICAgIGVtcHR5X2lkeCA9IGlkeDsgLy8gSW5zZXJ0IGF0IHRoaXMgbG9jYXRpb24gaWYgbm90IGZvdW5kLgogICAgICB9IGVsc2UgaWYgKHdwLmtleSA9PSBudWxsKSB7CiAgICAgICAgLy8gVGhpcyBlbnRyeSBoYXMgYmVlbiBjbGVhcmVkIGJ5IHRoZSBHQy4KICAgICAgICBfZGF0YVtpZHhdID0gX2RlbGV0ZWRFbnRyeTsKICAgICAgICBpZiAoZW1wdHlfaWR4IDwgMCkgewogICAgICAgICAgZW1wdHlfaWR4ID0gaWR4OyAvLyBJbnNlcnQgYXQgdGhpcyBsb2NhdGlvbiBpZiBub3QgZm91bmQuCiAgICAgICAgfQogICAgICB9CiAgICAgIGlkeCA9IChpZHggKyAxKSAmIG1hc2s7CiAgICAgIHdwID0gX2RhdGFbaWR4XTsKICAgIH0KCiAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICAvLyBOb3QgZW50ZXJpbmcgYSBudWxsIHZhbHVlLiBXZSBqdXN0IG5lZWRlZCB0byBtYWtlIHN1cmUgdG8gY2xlYXIgYW4KICAgICAgLy8gZXhpc3RpbmcgdmFsdWUgaWYgaXQgZXhpc3RlZC4KICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlbXB0eV9pZHggPj0gMCkgewogICAgICAvLyBXZSB3aWxsIGJlIHJldXNpbmcgdGhlIGVtcHR5IHNsb3QgYmVsb3cuCiAgICAgIF91c2VkLS07CiAgICAgIGlkeCA9IGVtcHR5X2lkeDsKICAgIH0KCiAgICBpZiAoX3VzZWQgPCBfbGltaXQpIHsKICAgICAgX2RhdGFbaWR4XSA9IG5ldyBfV2Vha1Byb3BlcnR5KG9iamVjdCwgdmFsdWUpOwogICAgICBfdXNlZCsrOwogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gR3Jvdy9yZWFsbG9jYXRlIGlmIHRvbyBtYW55IHNsb3RzIGhhdmUgYmVlbiB1c2VkLgogICAgX3JlaGFzaCgpOwogICAgdGhpc1tvYmplY3RdID0gdmFsdWU7IC8vIFJlY3Vyc2l2ZWx5IGFkZCB0aGUgdmFsdWUuCiAgfQoKICBfcmVoYXNoKCkgewogICAgLy8gRGV0ZXJtaW5lIHRoZSBwb3B1bGF0aW9uIGNvdW50IG9mIHRoZSBtYXAgdG8gYWxsb2NhdGUgYW4gYXBwcm9wcmlhdGVseQogICAgLy8gc2l6ZWQgbWFwIGJlbG93LgogICAgdmFyIGNvdW50ID0gMDsKICAgIHZhciBvbGRfZGF0YSA9IF9kYXRhOwogICAgdmFyIGxlbiA9IG9sZF9kYXRhLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgdmFyIGVudHJ5ID0gb2xkX2RhdGFbaV07CiAgICAgIGlmICgoZW50cnkgIT0gbnVsbCkgJiYgKGVudHJ5LmtleSAhPSBudWxsKSkgewogICAgICAgIC8vIE9ubHkgY291bnQgbm9uLWNsZWFyZWQgZW50cmllcy4KICAgICAgICBjb3VudCsrOwogICAgICB9CiAgICB9CgogICAgdmFyIG5ld19zaXplID0gX3NpemU7CiAgICBpZiAoY291bnQgPD0gKG5ld19zaXplID4+IDIpKSB7CiAgICAgIG5ld19zaXplID0gbmV3X3NpemUgPj4gMTsKICAgIH0gZWxzZSBpZiAoY291bnQgPiAobmV3X3NpemUgPj4gMSkpIHsKICAgICAgbmV3X3NpemUgPSBuZXdfc2l6ZSA8PCAxOwogICAgfQogICAgbmV3X3NpemUgPSAobmV3X3NpemUgPCBfbWluU2l6ZSkgPyBfbWluU2l6ZSA6IG5ld19zaXplOwoKICAgIC8vIFJlc2V0IHRoZSBtYXBwaW5ncyB0byBlbXB0eSBzbyB0aGF0IHdlIGNhbiBqdXN0IGFkZCB0aGUgZXhpc3RpbmcKICAgIC8vIHZhbGlkIGVudHJpZXMuCiAgICBfZGF0YSA9IG5ldyBMaXN0KG5ld19zaXplKTsKICAgIF91c2VkID0gMDsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9sZF9kYXRhLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBlbnRyeSA9IG9sZF9kYXRhW2ldOwogICAgICBpZiAoZW50cnkgIT0gbnVsbCkgewogICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBlbnRyeS5rZXkgaXMgbm90IGNsZWFyZWQgYmV0d2VlbiBjaGVja2luZyBmb3IgaXQgYW5kCiAgICAgICAgLy8gaW5zZXJ0aW5nIGl0IGludG8gdGhlIG5ldyB0YWJsZS4KICAgICAgICB2YXIgdmFsID0gZW50cnkudmFsdWU7CiAgICAgICAgdmFyIGtleSA9IGVudHJ5LmtleTsKICAgICAgICBpZiAoa2V5ICE9IG51bGwpIHsKICAgICAgICAgIHRoaXNba2V5XSA9IHZhbDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIHN0YXRpYyBfY2hlY2tUeXBlKG9iamVjdCkgewogICAgaWYgKChvYmplY3QgPT0gbnVsbCkgfHwKICAgICAgICAob2JqZWN0IGlzIGJvb2wpIHx8CiAgICAgICAgKG9iamVjdCBpcyBudW0pIHx8CiAgICAgICAgKG9iamVjdCBpcyBTdHJpbmcpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKG9iamVjdCwKICAgICAgICAgICJFeHBhbmRvcyBhcmUgbm90IGFsbG93ZWQgb24gc3RyaW5ncywgbnVtYmVycywgYm9vbGVhbnMgb3IgbnVsbCIpOwogICAgfQogIH0KCiAgZ2V0IF9zaXplID0+IF9kYXRhLmxlbmd0aDsKICBnZXQgX2xpbWl0ID0+ICgzICogKF9zaXplIH4vIDQpKTsKCiAgTGlzdCBfZGF0YTsKICBpbnQgX3VzZWQ7IC8vIE51bWJlciBvZiB1c2VkIChhY3RpdmUgYW5kIGRlbGV0ZWQpIHNsb3RzLgp9CoCbAE5OPAEPAR4BBxMJGRUkEwEdPgEJIRgBGi8ZARknGSMyJAgeFwYBEQQBCS4YARovGBkBGScdKhwRKCYKEERCIzIkHUQKCB4XBgEZTCcOBgEaMg8XBgEaNQ8OBgE5DzgEAQ5OGBMaHyQfNCsRCAYBGiQgKiAGPAFIFiAPATAfG1AsHx0bGwoIBgQBHhwcGx4sTQYEAR0kAQ47AgEiZGFydDpjb3JlLXBhdGNoL2V4cGFuZG9fcGF0Y2guZGFydD9vcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9jb3JlL2Z1bmN0aW9uLmRhcnSJsS8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBmdW5jdGlvbiB0eXBlcy4KICoKICogQSBmdW5jdGlvbiB2YWx1ZSwgb3IgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB3aXRoIGEgImNhbGwiIG1ldGhvZCwgaXMgYQogKiBzdWJ0eXBlIG9mIGEgZnVuY3Rpb24gdHlwZSwgYW5kIGFzIHN1Y2gsIGEgc3VidHlwZSBvZiBbRnVuY3Rpb25dLgogKi8KYWJzdHJhY3QgY2xhc3MgRnVuY3Rpb24gewogIC8qKgogICAqIER5bmFtaWNhbGx5IGNhbGwgW2Z1bmN0aW9uXSB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnRzLgogICAqCiAgICogQWN0cyB0aGUgc2FtZSBhcyBjYWxsaW5nIGZ1bmN0aW9uIHdpdGggcG9zaXRpb25hbCBhcmd1bWVudHMKICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBlbGVtZW50cyBvZiBbcG9zaXRpb25hbEFyZ3VtZW50c10gYW5kCiAgICogbmFtZWQgYXJndW1lbnRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGVsZW1lbnRzIG9mIFtuYW1lZEFyZ3VtZW50c10uCiAgICoKICAgKiBUaGlzIGluY2x1ZGVzIGdpdmluZyB0aGUgc2FtZSBlcnJvcnMgaWYgW2Z1bmN0aW9uXSBpc24ndCBjYWxsYWJsZSBvcgogICAqIGlmIGl0IGV4cGVjdHMgZGlmZmVyZW50IHBhcmFtZXRlcnMuCiAgICoKICAgKiBFeGFtcGxlOgogICAqIGBgYAogICAqIEZ1bmN0aW9uLmFwcGx5KGZvbywgWzEsMiwzXSwgeyNmOiA0LCAjZzogNX0pOwogICAqIGBgYAogICAqCiAgICogZ2l2ZXMgZXhhY3RseSB0aGUgc2FtZSByZXN1bHQgYXMKICAgKiBgYGAKICAgKiBmb28oMSwgMiwgMywgZjogNCwgZzogNSkuCiAgICogYGBgCiAgICoKICAgKiBJZiBbcG9zaXRpb25hbEFyZ3VtZW50c10gaXMgbnVsbCwgaXQncyBjb25zaWRlcmVkIGFuIGVtcHR5IGxpc3QuCiAgICogSWYgW25hbWVkQXJndW1lbnRzXSBpcyBvbWl0dGVkIG9yIG51bGwsIGl0IGlzIGNvbnNpZGVyZWQgYW4gZW1wdHkgbWFwLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBhcHBseShGdW5jdGlvbiBmdW5jdGlvbiwgTGlzdCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBbTWFwPFN5bWJvbCwgZHluYW1pYz4gbmFtZWRBcmd1bWVudHNdKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIGhhc2ggY29kZSB2YWx1ZSB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBgb3BlcmF0b3I9PWAuCiAgICovCiAgaW50IGdldCBoYXNoQ29kZTsKCiAgLyoqCiAgICogVGVzdCB3aGV0aGVyIGFub3RoZXIgb2JqZWN0IGlzIGVxdWFsIHRvIHRoaXMgZnVuY3Rpb24uCiAgICoKICAgKiBTeXN0ZW0tY3JlYXRlZCBmdW5jdGlvbiBvYmplY3RzIGFyZSBvbmx5IGVxdWFsIHRvIG90aGVyIGZ1bmN0aW9ucy4KICAgKgogICAqIFR3byBmdW5jdGlvbiBvYmplY3RzIGFyZSBrbm93biB0byByZXByZXNlbnQgdGhlIHNhbWUgZnVuY3Rpb24gaWYKICAgKgogICAqIC0gSXQgaXMgdGhlIHNhbWUgb2JqZWN0LiBTdGF0aWMgYW5kIHRvcC1sZXZlbCBmdW5jdGlvbnMgYXJlIGNvbXBpbGUgdGltZQogICAqICAgY29uc3RhbnRzIHdoZW4gdXNlZCBhcyB2YWx1ZXMsIHNvIHJlZmVycmluZyB0byB0aGUgc2FtZSBmdW5jdGlvbiB0d2ljZQogICAqICAgYWx3YXlzIGdpdmUgdGhlIHNhbWUgb2JqZWN0LAogICAqIC0gb3IgaWYgdGhleSByZWZlciB0byB0aGUgc2FtZSBtZW1iZXIgbWV0aG9kIGV4dHJhY3RlZCBmcm9tIHRoZSBzYW1lIG9iamVjdC4KICAgKiAgIEV4dHJhY3RpbmcgYSBtZW1iZXIgbWV0aG9kIGFzIGEgZnVuY3Rpb24gdmFsdWUgdHdpY2UgZ2l2ZXMgZXF1YWwsIGJ1dAogICAqICAgbm90IG5lY2Vzc2FyaWx5IGlkZW50aWNhbCwgZnVuY3Rpb24gdmFsdWVzLgogICAqCiAgICogRnVuY3Rpb24gZXhwcmVzc2lvbnMgbmV2ZXIgZ2l2ZSByaXNlIHRvIGVxdWFsIGZ1bmN0aW9uIG9iamVjdHMuIEVhY2ggdGltZQogICAqIGEgZnVuY3Rpb24gZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQsIGl0IGNyZWF0ZXMgYSBuZXcgY2xvc3VyZSB2YWx1ZSB0aGF0CiAgICogaXMgbm90IGtub3duIHRvIGJlIGVxdWFsIHRvIG90aGVyIGNsb3N1cmVzIGNyZWF0ZWQgYnkgdGhlIHNhbWUgZXhwcmVzc2lvbi4KICAgKgogICAqIENsYXNzZXMgaW1wbGVtZW50aW5nIGBGdW5jdGlvbmAgYnkgaGF2aW5nIGEgYGNhbGxgIG1ldGhvZCBzaG91bGQgaGF2ZSB0aGVpcgogICAqIG93biBgb3BlcmF0b3I9PWAgYW5kIGBoYXNoQ29kZWAgZGVwZW5kaW5nIG9uIHRoZSBvYmplY3QuCiAgICovCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpOwp9CkcATk48AQ8BEwEEKgNKRQQaBj8FQUBIBUopBQ4JMwkFJgkfCQVGTAZFLgEGRQYUAQY8BUgFRgVOTiRSTTMFT01QBVE+BiICARdkYXJ0OmNvcmUvZnVuY3Rpb24uZGFydFFvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vbGliL2Z1bmN0aW9uX3BhdGNoLmRhcnSFSS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBGdW5jdGlvbiB7CiAgLy8gVE9ETyhyZWdpcyk6IFBhc3MgdHlwZSBhcmd1bWVudHMgdG8gZ2VuZXJpYyBmdW5jdGlvbnMuIFdhaXQgZm9yIEFQSSBzcGVjLgogIHN0YXRpYyBfYXBwbHkoTGlzdCBhcmd1bWVudHMsIExpc3QgbmFtZXMpIG5hdGl2ZSAiRnVuY3Rpb25fYXBwbHkiOwoKICBAcGF0Y2gKICBzdGF0aWMgYXBwbHkoRnVuY3Rpb24gZnVuY3Rpb24sIExpc3QgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgW01hcDxTeW1ib2wsIGR5bmFtaWM+IG5hbWVkQXJndW1lbnRzXSkgewogICAgaW50IG51bVBvc2l0aW9uYWxBcmd1bWVudHMgPSAxICsgLy8gRnVuY3Rpb24gaXMgZmlyc3QgaW1wbGljaXQgYXJndW1lbnQuCiAgICAgICAgKHBvc2l0aW9uYWxBcmd1bWVudHMgIT0gbnVsbCA/IHBvc2l0aW9uYWxBcmd1bWVudHMubGVuZ3RoIDogMCk7CiAgICBpbnQgbnVtTmFtZWRBcmd1bWVudHMgPSBuYW1lZEFyZ3VtZW50cyAhPSBudWxsID8gbmFtZWRBcmd1bWVudHMubGVuZ3RoIDogMDsKICAgIGludCBudW1Bcmd1bWVudHMgPSBudW1Qb3NpdGlvbmFsQXJndW1lbnRzICsgbnVtTmFtZWRBcmd1bWVudHM7CiAgICBMaXN0IGFyZ3VtZW50cyA9IG5ldyBMaXN0KG51bUFyZ3VtZW50cyk7CiAgICBhcmd1bWVudHNbMF0gPSBmdW5jdGlvbjsKICAgIGFyZ3VtZW50cy5zZXRSYW5nZSgxLCBudW1Qb3NpdGlvbmFsQXJndW1lbnRzLCBwb3NpdGlvbmFsQXJndW1lbnRzKTsKICAgIExpc3QgbmFtZXMgPSBuZXcgTGlzdChudW1OYW1lZEFyZ3VtZW50cyk7CiAgICBpbnQgYXJndW1lbnRJbmRleCA9IG51bVBvc2l0aW9uYWxBcmd1bWVudHM7CiAgICBpbnQgbmFtZUluZGV4ID0gMDsKICAgIGlmIChudW1OYW1lZEFyZ3VtZW50cyA+IDApIHsKICAgICAgbmFtZWRBcmd1bWVudHMuZm9yRWFjaCgobmFtZSwgdmFsdWUpIHsKICAgICAgICBhcmd1bWVudHNbYXJndW1lbnRJbmRleCsrXSA9IHZhbHVlOwogICAgICAgIG5hbWVzW25hbWVJbmRleCsrXSA9IGludGVybmFsLlN5bWJvbC5nZXROYW1lKG5hbWUpOwogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBfYXBwbHkoYXJndW1lbnRzLCBuYW1lcyk7CiAgfQp9CiUATk48AQ8BHgEHEU9FAQk8L01IUEMtHUguMBchLSw8CgYlBAIBI2RhcnQ6Y29yZS1wYXRjaC9mdW5jdGlvbl9wYXRjaC5kYXJ0Om9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2NvcmUvaW50LmRhcnSuOy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogQW4gaW50ZWdlciBudW1iZXIuCiAqCiAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGBpbnRgIGlzIDY0LWJpdCB0d28ncyBjb21wbGVtZW50IGludGVnZXJzCiAqIHdpdGggb3BlcmF0aW9ucyB0aGF0IHdyYXAgdG8gdGhhdCByYW5nZSBvbiBvdmVyZmxvdy4KICoKICogKipOb3RlOioqIFdoZW4gY29tcGlsaW5nIHRvIEphdmFTY3JpcHQsIGludGVnZXJzIGFyZSByZXN0cmljdGVkIHRvIHZhbHVlcwogKiB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBleGFjdGx5IGJ5IGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgdmFsdWVzLgogKiBUaGUgYXZhaWxhYmxlIGludGVnZXIgdmFsdWVzIGluY2x1ZGUgYWxsIGludGVnZXJzIGJldHdlZW4gLTJeNTMgYW5kIDJeNTMsCiAqIGFuZCBzb21lIGludGVnZXJzIHdpdGggbGFyZ2VyIG1hZ25pdHVkZS4gVGhhdCBpbmNsdWRlcyBzb21lIGludGVnZXJzIGxhcmdlcgogKiB0aGFuIDJeNjMuCiAqIFRoZSBiZWhhdmlvciBvZiB0aGUgb3BlcmF0b3JzIGFuZCBtZXRob2RzIGluIHRoZSBbaW50XQogKiBjbGFzcyB0aGVyZWZvcmUgc29tZXRpbWVzIGRpZmZlcnMgYmV0d2VlbiB0aGUgRGFydCBWTSBhbmQgRGFydCBjb2RlCiAqIGNvbXBpbGVkIHRvIEphdmFTY3JpcHQuIEZvciBleGFtcGxlLCB0aGUgYml0d2lzZSBvcGVyYXRvcnMgdHJ1bmNhdGUgdGhlaXIKICogb3BlcmFuZHMgdG8gMzItYml0IGludGVnZXJzIHdoZW4gY29tcGlsZWQgdG8gSmF2YVNjcmlwdC4KICoKICogQ2xhc3NlcyBjYW5ub3QgZXh0ZW5kLCBpbXBsZW1lbnQsIG9yIG1peCBpbiBgaW50YC4KICovCmFic3RyYWN0IGNsYXNzIGludCBleHRlbmRzIG51bSB7CiAgLyoqCiAgICogUmV0dXJucyB0aGUgaW50ZWdlciB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZW52aXJvbm1lbnQgZGVjbGFyYXRpb24gW25hbWVdLgogICAqCiAgICogVGhlIHJlc3VsdCBpcyB0aGUgc2FtZSBhcyB3b3VsZCBiZSByZXR1cm5lZCBieToKICAgKiBgYGAKICAgKiBpbnQudHJ5UGFyc2UoY29uc3QgU3RyaW5nLmZyb21FbnZpcm9ubWVudChuYW1lLCBkZWZhdWx0VmFsdWU6ICIiKSkKICAgKiAgICAgPz8gZGVmYXVsdFZhbHVlCiAgICogYGBgCiAgICogRXhhbXBsZToKICAgKiBgYGAKICAgKiBjb25zdCBpbnQuZnJvbUVudmlyb25tZW50KCJkZWZhdWx0UG9ydCIsIGRlZmF1bHRWYWx1ZTogODApCiAgICogYGBgCiAgICovCiAgLy8gVGhlIC5mcm9tRW52aXJvbm1lbnQoKSBjb25zdHJ1Y3RvcnMgYXJlIHNwZWNpYWwgaW4gdGhhdCB3ZSBkbyBub3Qgd2FudAogIC8vIHVzZXJzIHRvIGNhbGwgdGhlbSB1c2luZyAibmV3Ii4gV2UgcHJvaGliaXQgdGhhdCBieSBnaXZpbmcgdGhlbSBib2RpZXMKICAvLyB0aGF0IHRocm93LCBldmVuIHRob3VnaCBjb25zdCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBhbGxvd2VkIHRvIGhhdmUgYm9kaWVzLgogIC8vIERpc2FibGUgdGhvc2Ugc3RhdGljIGVycm9ycy4KICAvL2lnbm9yZTogY29uc3RfY29uc3RydWN0b3Jfd2l0aF9ib2R5CiAgLy9pZ25vcmU6IGNvbnN0X2ZhY3RvcnkKICBleHRlcm5hbCBjb25zdCBmYWN0b3J5IGludC5mcm9tRW52aXJvbm1lbnQoU3RyaW5nIG5hbWUsIHtpbnQgZGVmYXVsdFZhbHVlfSk7CgogIC8qKgogICAqIEJpdC13aXNlIGFuZCBvcGVyYXRvci4KICAgKgogICAqIFRyZWF0aW5nIGJvdGggYHRoaXNgIGFuZCBbb3RoZXJdIGFzIHN1ZmZpY2llbnRseSBsYXJnZSB0d28ncyBjb21wb25lbnQKICAgKiBpbnRlZ2VycywgdGhlIHJlc3VsdCBpcyBhIG51bWJlciB3aXRoIG9ubHkgdGhlIGJpdHMgc2V0IHRoYXQgYXJlIHNldCBpbgogICAqIGJvdGggYHRoaXNgIGFuZCBbb3RoZXJdCiAgICoKICAgKiBPZiBib3RoIG9wZXJhbmRzIGFyZSBuZWdhdGl2ZSwgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3RoZXJ3aXNlCiAgICogdGhlIHJlc3VsdCBpcyBub24tbmVnYXRpdmUuCiAgICovCiAgaW50IG9wZXJhdG9yICYoaW50IG90aGVyKTsKCiAgLyoqCiAgICogQml0LXdpc2Ugb3Igb3BlcmF0b3IuCiAgICoKICAgKiBUcmVhdGluZyBib3RoIGB0aGlzYCBhbmQgW290aGVyXSBhcyBzdWZmaWNpZW50bHkgbGFyZ2UgdHdvJ3MgY29tcG9uZW50CiAgICogaW50ZWdlcnMsIHRoZSByZXN1bHQgaXMgYSBudW1iZXIgd2l0aCB0aGUgYml0cyBzZXQgdGhhdCBhcmUgc2V0IGluIGVpdGhlcgogICAqIG9mIGB0aGlzYCBhbmQgW290aGVyXQogICAqCiAgICogSWYgYm90aCBvcGVyYW5kcyBhcmUgbm9uLW5lZ2F0aXZlLCB0aGUgcmVzdWx0IGlzIG5vbi1uZWdhdGl2ZSwKICAgKiBvdGhlcndpc2UgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZS4KICAgKi8KICBpbnQgb3BlcmF0b3IgfChpbnQgb3RoZXIpOwoKICAvKioKICAgKiBCaXQtd2lzZSBleGNsdXNpdmUtb3Igb3BlcmF0b3IuCiAgICoKICAgKiBUcmVhdGluZyBib3RoIGB0aGlzYCBhbmQgW290aGVyXSBhcyBzdWZmaWNpZW50bHkgbGFyZ2UgdHdvJ3MgY29tcG9uZW50CiAgICogaW50ZWdlcnMsIHRoZSByZXN1bHQgaXMgYSBudW1iZXIgd2l0aCB0aGUgYml0cyBzZXQgdGhhdCBhcmUgc2V0IGluIG9uZSwKICAgKiBidXQgbm90IGJvdGgsIG9mIGB0aGlzYCBhbmQgW290aGVyXQogICAqCiAgICogSWYgdGhlIG9wZXJhbmRzIGhhdmUgdGhlIHNhbWUgc2lnbiwgdGhlIHJlc3VsdCBpcyBub24tbmVnYXRpdmUsCiAgICogb3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUuCiAgICovCiAgaW50IG9wZXJhdG9yIF4oaW50IG90aGVyKTsKCiAgLyoqCiAgICogVGhlIGJpdC13aXNlIG5lZ2F0ZSBvcGVyYXRvci4KICAgKgogICAqIFRyZWF0aW5nIGB0aGlzYCBhcyBhIHN1ZmZpY2llbnRseSBsYXJnZSB0d28ncyBjb21wb25lbnQgaW50ZWdlciwKICAgKiB0aGUgcmVzdWx0IGlzIGEgbnVtYmVyIHdpdGggdGhlIG9wcG9zaXRlIGJpdHMgc2V0LgogICAqCiAgICogVGhpcyBtYXBzIGFueSBpbnRlZ2VyIGB4YCB0byBgLXggLSAxYC4KICAgKi8KICBpbnQgb3BlcmF0b3IgfigpOwoKICAvKioKICAgKiBTaGlmdCB0aGUgYml0cyBvZiB0aGlzIGludGVnZXIgdG8gdGhlIGxlZnQgYnkgW3NoaWZ0QW1vdW50XS4KICAgKgogICAqIFNoaWZ0aW5nIHRvIHRoZSBsZWZ0IG1ha2VzIHRoZSBudW1iZXIgbGFyZ2VyLCBlZmZlY3RpdmVseSBtdWx0aXBseWluZwogICAqIHRoZSBudW1iZXIgYnkgYHBvdygyLCBzaGlmdEluZGV4KWAuCiAgICoKICAgKiBUaGVyZSBpcyBubyBsaW1pdCBvbiB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0LiBJdCBtYXkgYmUgcmVsZXZhbnQgdG8KICAgKiBsaW1pdCBpbnRlcm1lZGlhdGUgdmFsdWVzIGJ5IHVzaW5nIHRoZSAiYW5kIiBvcGVyYXRvciB3aXRoIGEgc3VpdGFibGUKICAgKiBtYXNrLgogICAqCiAgICogSXQgaXMgYW4gZXJyb3IgaWYgW3NoaWZ0QW1vdW50XSBpcyBuZWdhdGl2ZS4KICAgKi8KICBpbnQgb3BlcmF0b3IgPDwoaW50IHNoaWZ0QW1vdW50KTsKCiAgLyoqCiAgICogU2hpZnQgdGhlIGJpdHMgb2YgdGhpcyBpbnRlZ2VyIHRvIHRoZSByaWdodCBieSBbc2hpZnRBbW91bnRdLgogICAqCiAgICogU2hpZnRpbmcgdG8gdGhlIHJpZ2h0IG1ha2VzIHRoZSBudW1iZXIgc21hbGxlciBhbmQgZHJvcHMgdGhlIGxlYXN0CiAgICogc2lnbmlmaWNhbnQgYml0cywgZWZmZWN0aXZlbHkgZG9pbmcgYW4gaW50ZWdlciBkaXZpc2lvbiBieQogICAqYHBvdygyLCBzaGlmdEluZGV4KWAuCiAgICoKICAgKiBJdCBpcyBhbiBlcnJvciBpZiBbc2hpZnRBbW91bnRdIGlzIG5lZ2F0aXZlLgogICAqLwogIGludCBvcGVyYXRvciA+PihpbnQgc2hpZnRBbW91bnQpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoaXMgaW50ZWdlciB0byB0aGUgcG93ZXIgb2YgW2V4cG9uZW50XSBtb2R1bG8gW21vZHVsdXNdLgogICAqCiAgICogVGhlIFtleHBvbmVudF0gbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIFttb2R1bHVzXSBtdXN0IGJlCiAgICogcG9zaXRpdmUuCiAgICovCiAgaW50IG1vZFBvdyhpbnQgZXhwb25lbnQsIGludCBtb2R1bHVzKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbW9kdWxhciBtdWx0aXBsaWNhdGl2ZSBpbnZlcnNlIG9mIHRoaXMgaW50ZWdlcgogICAqIG1vZHVsbyBbbW9kdWx1c10uCiAgICoKICAgKiBUaGUgW21vZHVsdXNdIG11c3QgYmUgcG9zaXRpdmUuCiAgICoKICAgKiBJdCBpcyBhbiBlcnJvciBpZiBubyBtb2R1bGFyIGludmVyc2UgZXhpc3RzLgogICAqLwogIGludCBtb2RJbnZlcnNlKGludCBtb2R1bHVzKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3Igb2YgdGhpcyBpbnRlZ2VyIGFuZCBbb3RoZXJdLgogICAqCiAgICogSWYgZWl0aGVyIG51bWJlciBpcyBub24temVybywgdGhlIHJlc3VsdCBpcyB0aGUgbnVtZXJpY2FsbHkgZ3JlYXRlc3QKICAgKiBpbnRlZ2VyIGRpdmlkaW5nIGJvdGggYHRoaXNgIGFuZCBgb3RoZXJgLgogICAqCiAgICogVGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIGlzIGluZGVwZW5kZW50IG9mIHRoZSBvcmRlciwKICAgKiBzbyBgeC5nY2QoeSlgIGlzICBhbHdheXMgdGhlIHNhbWUgYXMgYHkuZ2NkKHgpYC4KICAgKgogICAqIEZvciBhbnkgaW50ZWdlciBgeGAsIGB4LmdjZCh4KWAgaXMgYHguYWJzKClgLgogICAqCiAgICogSWYgYm90aCBgdGhpc2AgYW5kIGBvdGhlcmAgaXMgemVybywgdGhlIHJlc3VsdCBpcyBhbHNvIHplcm8uCiAgICovCiAgaW50IGdjZChpbnQgb3RoZXIpOwoKICAvKiogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoaXMgaW50ZWdlciBpcyBldmVuLiAqLwogIGJvb2wgZ2V0IGlzRXZlbjsKCiAgLyoqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGlzIGludGVnZXIgaXMgb2RkLiAqLwogIGJvb2wgZ2V0IGlzT2RkOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG51bWJlciBvZiBiaXRzIHJlcXVpcmVkIHRvIHN0b3JlIHRoaXMgaW50ZWdlci4KICAgKgogICAqIFRoZSBudW1iZXIgb2YgYml0cyBleGNsdWRlcyB0aGUgc2lnbiBiaXQsIHdoaWNoIGdpdmVzIHRoZSBuYXR1cmFsIGxlbmd0aAogICAqIGZvciBub24tbmVnYXRpdmUgKHVuc2lnbmVkKSB2YWx1ZXMuICBOZWdhdGl2ZSB2YWx1ZXMgYXJlIGNvbXBsZW1lbnRlZCB0bwogICAqIHJldHVybiB0aGUgYml0IHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBiaXQgdGhhdCBkaWZmZXJzIGZyb20gdGhlIHNpZ24gYml0LgogICAqCiAgICogVG8gZmluZCB0aGUgbnVtYmVyIG9mIGJpdHMgbmVlZGVkIHRvIHN0b3JlIHRoZSB2YWx1ZSBhcyBhIHNpZ25lZCB2YWx1ZSwKICAgKiBhZGQgb25lLCBpLmUuIHVzZSBgeC5iaXRMZW5ndGggKyAxYC4KICAgKiBgYGAKICAgKiB4LmJpdExlbmd0aCA9PSAoLXgtMSkuYml0TGVuZ3RoCiAgICoKICAgKiAzLmJpdExlbmd0aCA9PSAyOyAgICAgLy8gMDAwMDAwMTEKICAgKiAyLmJpdExlbmd0aCA9PSAyOyAgICAgLy8gMDAwMDAwMTAKICAgKiAxLmJpdExlbmd0aCA9PSAxOyAgICAgLy8gMDAwMDAwMDEKICAgKiAwLmJpdExlbmd0aCA9PSAwOyAgICAgLy8gMDAwMDAwMDAKICAgKiAoLTEpLmJpdExlbmd0aCA9PSAwOyAgLy8gMTExMTExMTEKICAgKiAoLTIpLmJpdExlbmd0aCA9PSAxOyAgLy8gMTExMTExMTAKICAgKiAoLTMpLmJpdExlbmd0aCA9PSAyOyAgLy8gMTExMTExMDEKICAgKiAoLTQpLmJpdExlbmd0aCA9PSAyOyAgLy8gMTExMTExMDAKICAgKiBgYGAKICAgKi8KICBpbnQgZ2V0IGJpdExlbmd0aDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgW3dpZHRoXSBiaXRzIG9mIHRoaXMgaW50ZWdlciBhcyBhCiAgICogbm9uLW5lZ2F0aXZlIG51bWJlciAoaS5lLiB1bnNpZ25lZCByZXByZXNlbnRhdGlvbikuICBUaGUgcmV0dXJuZWQgdmFsdWUgaGFzCiAgICogemVyb3MgaW4gYWxsIGJpdCBwb3NpdGlvbnMgaGlnaGVyIHRoYW4gW3dpZHRoXS4KICAgKiBgYGAKICAgKiAoLTEpLnRvVW5zaWduZWQoNSkgPT0gMzEgICAvLyAxMTExMTExMSAgLT4gIDAwMDExMTExCiAgICogYGBgCiAgICogVGhpcyBvcGVyYXRpb24gY2FuIGJlIHVzZWQgdG8gc2ltdWxhdGUgYXJpdGhtZXRpYyBmcm9tIGxvdyBsZXZlbCBsYW5ndWFnZXMuCiAgICogRm9yIGV4YW1wbGUsIHRvIGluY3JlbWVudCBhbiA4IGJpdCBxdWFudGl0eToKICAgKiBgYGAKICAgKiBxID0gKHEgKyAxKS50b1Vuc2lnbmVkKDgpOwogICAqIGBgYAogICAqIGBxYCB3aWxsIGNvdW50IGZyb20gYDBgIHVwIHRvIGAyNTVgIGFuZCB0aGVuIHdyYXAgYXJvdW5kIHRvIGAwYC4KICAgKgogICAqIElmIHRoZSBpbnB1dCBmaXRzIGluIFt3aWR0aF0gYml0cyB3aXRob3V0IHRydW5jYXRpb24sIHRoZSByZXN1bHQgaXMgdGhlCiAgICogc2FtZSBhcyB0aGUgaW5wdXQuICBUaGUgbWluaW11bSB3aWR0aCBuZWVkZWQgdG8gYXZvaWQgdHJ1bmNhdGlvbiBvZiBgeGAgaXMKICAgKiBnaXZlbiBieSBgeC5iaXRMZW5ndGhgLCBpLmUuCiAgICogYGBgCiAgICogeCA9PSB4LnRvVW5zaWduZWQoeC5iaXRMZW5ndGgpOwogICAqIGBgYAogICAqLwogIGludCB0b1Vuc2lnbmVkKGludCB3aWR0aCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGxlYXN0IHNpZ25pZmljYW50IFt3aWR0aF0gYml0cyBvZiB0aGlzIGludGVnZXIsIGV4dGVuZGluZyB0aGUKICAgKiBoaWdoZXN0IHJldGFpbmVkIGJpdCB0byB0aGUgc2lnbi4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgdHJ1bmNhdGluZyB0aGUgdmFsdWUKICAgKiB0byBmaXQgaW4gW3dpZHRoXSBiaXRzIHVzaW5nIGFuIHNpZ25lZCAyLXMgY29tcGxlbWVudCByZXByZXNlbnRhdGlvbi4gIFRoZQogICAqIHJldHVybmVkIHZhbHVlIGhhcyB0aGUgc2FtZSBiaXQgdmFsdWUgaW4gYWxsIHBvc2l0aW9ucyBoaWdoZXIgdGhhbiBbd2lkdGhdLgogICAqCiAgICogYGBgCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYtLXNpZ24gYml0LVYKICAgKiAxNi50b1NpZ25lZCg1KSA9PSAtMTYgICAvLyAgMDAwMTAwMDAgLT4gMTExMTAwMDAKICAgKiAyMzkudG9TaWduZWQoNSkgPT0gMTUgICAvLyAgMTExMDExMTEgLT4gMDAwMDExMTEKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgXgogICAqIGBgYAogICAqIFRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1c2VkIHRvIHNpbXVsYXRlIGFyaXRobWV0aWMgZnJvbSBsb3cgbGV2ZWwgbGFuZ3VhZ2VzLgogICAqIEZvciBleGFtcGxlLCB0byBpbmNyZW1lbnQgYW4gOCBiaXQgc2lnbmVkIHF1YW50aXR5OgogICAqIGBgYAogICAqIHEgPSAocSArIDEpLnRvU2lnbmVkKDgpOwogICAqIGBgYAogICAqIGBxYCB3aWxsIGNvdW50IGZyb20gYDBgIHVwIHRvIGAxMjdgLCB3cmFwIHRvIGAtMTI4YCBhbmQgY291bnQgYmFjayB1cCB0bwogICAqIGAxMjdgLgogICAqCiAgICogSWYgdGhlIGlucHV0IHZhbHVlIGZpdHMgaW4gW3dpZHRoXSBiaXRzIHdpdGhvdXQgdHJ1bmNhdGlvbiwgdGhlIHJlc3VsdCBpcwogICAqIHRoZSBzYW1lIGFzIHRoZSBpbnB1dC4gIFRoZSBtaW5pbXVtIHdpZHRoIG5lZWRlZCB0byBhdm9pZCB0cnVuY2F0aW9uIG9mIGB4YAogICAqIGlzIGB4LmJpdExlbmd0aCArIDFgLCBpLmUuCiAgICogYGBgCiAgICogeCA9PSB4LnRvU2lnbmVkKHguYml0TGVuZ3RoICsgMSk7CiAgICogYGBgCiAgICovCiAgaW50IHRvU2lnbmVkKGludCB3aWR0aCk7CgogIC8qKgogICAqIFJldHVybiB0aGUgbmVnYXRpdmUgdmFsdWUgb2YgdGhpcyBpbnRlZ2VyLgogICAqCiAgICogVGhlIHJlc3VsdCBvZiBuZWdhdGluZyBhbiBpbnRlZ2VyIGFsd2F5cyBoYXMgdGhlIG9wcG9zaXRlIHNpZ24sIGV4Y2VwdAogICAqIGZvciB6ZXJvLCB3aGljaCBpcyBpdHMgb3duIG5lZ2F0aW9uLgogICAqLwogIGludCBvcGVyYXRvciAtKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoaXMgaW50ZWdlci4KICAgKgogICAqIEZvciBhbnkgaW50ZWdlciBgeGAsIHRoZSByZXN1bHQgaXMgdGhlIHNhbWUgYXMgYHggPCAwID8gLXggOiB4YC4KICAgKi8KICBpbnQgYWJzKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHNpZ24gb2YgdGhpcyBpbnRlZ2VyLgogICAqCiAgICogUmV0dXJucyAwIGZvciB6ZXJvLCAtMSBmb3IgdmFsdWVzIGxlc3MgdGhhbiB6ZXJvIGFuZAogICAqICsxIGZvciB2YWx1ZXMgZ3JlYXRlciB0aGFuIHplcm8uCiAgICovCiAgaW50IGdldCBzaWduOwoKICAvKiogUmV0dXJucyBgdGhpc2AuICovCiAgaW50IHJvdW5kKCk7CgogIC8qKiBSZXR1cm5zIGB0aGlzYC4gKi8KICBpbnQgZmxvb3IoKTsKCiAgLyoqIFJldHVybnMgYHRoaXNgLiAqLwogIGludCBjZWlsKCk7CgogIC8qKiBSZXR1cm5zIGB0aGlzYC4gKi8KICBpbnQgdHJ1bmNhdGUoKTsKCiAgLyoqIFJldHVybnMgYHRoaXMudG9Eb3VibGUoKWAuICovCiAgZG91YmxlIHJvdW5kVG9Eb3VibGUoKTsKCiAgLyoqIFJldHVybnMgYHRoaXMudG9Eb3VibGUoKWAuICovCiAgZG91YmxlIGZsb29yVG9Eb3VibGUoKTsKCiAgLyoqIFJldHVybnMgYHRoaXMudG9Eb3VibGUoKWAuICovCiAgZG91YmxlIGNlaWxUb0RvdWJsZSgpOwoKICAvKiogUmV0dXJucyBgdGhpcy50b0RvdWJsZSgpYC4gKi8KICBkb3VibGUgdHJ1bmNhdGVUb0RvdWJsZSgpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgaW50ZWdlci4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJpbmcgaXMgcGFyc2FibGUgYnkgW3BhcnNlXS4KICAgKiBGb3IgYW55IGBpbnRgIGBpYCwgaXQgaXMgZ3VhcmFudGVlZCB0aGF0CiAgICogYGkgPT0gaW50LnBhcnNlKGkudG9TdHJpbmcoKSlgLgogICAqLwogIFN0cmluZyB0b1N0cmluZygpOwoKICAvKioKICAgKiBDb252ZXJ0cyBbdGhpc10gdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW4gdGhlIGdpdmVuIFtyYWRpeF0uCiAgICoKICAgKiBJbiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLCBsb3dlci1jYXNlIGxldHRlcnMgYXJlIHVzZWQgZm9yIGRpZ2l0cyBhYm92ZQogICAqICc5Jywgd2l0aCAnYScgYmVpbmcgMTAgYW4gJ3onIGJlaW5nIDM1LgogICAqCiAgICogVGhlIFtyYWRpeF0gYXJndW1lbnQgbXVzdCBiZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSAyIHRvIDM2LgogICAqLwogIFN0cmluZyB0b1JhZGl4U3RyaW5nKGludCByYWRpeCk7CgogIC8qKgogICAqIFBhcnNlIFtzb3VyY2VdIGFzIGEsIHBvc3NpYmx5IHNpZ25lZCwgaW50ZWdlciBsaXRlcmFsIGFuZCByZXR1cm4gaXRzIHZhbHVlLgogICAqCiAgICogVGhlIFtzb3VyY2VdIG11c3QgYmUgYSBub24tZW1wdHkgc2VxdWVuY2Ugb2YgYmFzZS1bcmFkaXhdIGRpZ2l0cywKICAgKiBvcHRpb25hbGx5IHByZWZpeGVkIHdpdGggYSBtaW51cyBvciBwbHVzIHNpZ24gKCctJyBvciAnKycpLgogICAqIEl0IG11c3Qgbm90IGJlIGBudWxsYC4KICAgKgogICAqIFRoZSBbcmFkaXhdIG11c3QgYmUgaW4gdGhlIHJhbmdlIDIuLjM2LiBUaGUgZGlnaXRzIHVzZWQgYXJlCiAgICogZmlyc3QgdGhlIGRlY2ltYWwgZGlnaXRzIDAuLjksIGFuZCB0aGVuIHRoZSBsZXR0ZXJzICdhJy4uJ3onIHdpdGgKICAgKiB2YWx1ZXMgMTAgdGhyb3VnaCAzNS4gQWxzbyBhY2NlcHRzIHVwcGVyLWNhc2UgbGV0dGVycyB3aXRoIHRoZSBzYW1lCiAgICogdmFsdWVzIGFzIHRoZSBsb3dlci1jYXNlIG9uZXMuCiAgICoKICAgKiBJZiBubyBbcmFkaXhdIGlzIGdpdmVuIHRoZW4gaXQgZGVmYXVsdHMgdG8gMTAuIEluIHRoaXMgY2FzZSwgdGhlIFtzb3VyY2VdCiAgICogZGlnaXRzIG1heSBhbHNvIHN0YXJ0IHdpdGggYDB4YCwgaW4gd2hpY2ggY2FzZSB0aGUgbnVtYmVyIGlzIGludGVycHJldGVkCiAgICogYXMgYSBoZXhhZGVjaW1hbCBpbnRlZ2VyIGxpdGVyYWwsCiAgICogV2hlbiBgaW50YCBpcyBpbXBsZW1lbnRlZCBieSA2NC1iaXQgc2lnbmVkIGludGVnZXJzLAogICAqIGhleGFkZWNpbWFsIGludGVnZXIgbGl0ZXJhbHMgbWF5IHJlcHJlc2VudCB2YWx1ZXMgbGFyZ2VyIHRoYW4KICAgKiAyPHN1cD42Mzwvc3VwPiwgaW4gd2hpY2ggY2FzZSB0aGUgdmFsdWUgaXMgcGFyc2VkIGFzIGlmIGl0IGlzIGFuCiAgICogKnVuc2lnbmVkKiBudW1iZXIsIGFuZCB0aGUgcmVzdWx0aW5nIHZhbHVlIGlzIHRoZSBjb3JyZXNwb25kaW5nCiAgICogc2lnbmVkIGludGVnZXIgdmFsdWUuCiAgICoKICAgKiBGb3IgYW55IGludCBgbmAgYW5kIHZhbGlkIHJhZGl4IGByYCwgaXQgaXMgZ3VhcmFudGVlZCB0aGF0CiAgICogYG4gPT0gaW50LnBhcnNlKG4udG9SYWRpeFN0cmluZyhyKSwgcmFkaXg6IHIpYC4KICAgKgogICAqIElmIHRoZSBbc291cmNlXSBzdHJpbmcgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGludGVnZXIgbGl0ZXJhbCwKICAgKiBvcHRpb25hbGx5IHByZWZpeGVkIGJ5IGEgc2lnbiwgYSBbRm9ybWF0RXhjZXB0aW9uXSBpcyB0aHJvd24KICAgKiAodW5sZXNzIHRoZSBkZXByZWNhdGVkIFtvbkVycm9yXSBwYXJhbWV0ZXIgaXMgdXNlZCwgc2VlIGJlbG93KS4KICAgKgogICAqIEluc3RlYWQgb2YgdGhyb3dpbmcgYW5kIGltbWVkaWF0ZWx5IGNhdGNoaW5nIHRoZSBbRm9ybWF0RXhjZXB0aW9uXSwKICAgKiBpbnN0ZWFkIHVzZSBbdHJ5UGFyc2VdIHRvIGhhbmRsZSBhIHBhcnNpbmcgZXJyb3IuCiAgICogRXhhbXBsZToKICAgKiBgYGBkYXJ0CiAgICogdmFyIHZhbHVlID0gaW50LnRyeVBhcnNlKHRleHQpOwogICAqIGlmICh2YWx1ZSA9PSBudWxsKSAuLi4gaGFuZGxlIHRoZSBwcm9ibGVtCiAgICogYGBgCiAgICoKICAgKiBUaGUgW29uRXJyb3JdIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuCiAgICogSW5zdGVhZCBvZiBgaW50LnBhcnNlKHN0cmluZywgb25FcnJvcjogKHN0cmluZykgPT4gLi4uKWAsCiAgICogeW91IHNob3VsZCB1c2UgYGludC50cnlQYXJzZShzdHJpbmcpID8/ICguLi4pYC4KICAgKgogICAqIFdoZW4gdGhlIHNvdXJjZSBzdHJpbmcgaXMgbm90IHZhbGlkIGFuZCBbb25FcnJvcl0gaXMgcHJvdmlkZWQsCiAgICogd2hlbmV2ZXIgYSBbRm9ybWF0RXhjZXB0aW9uXSB3b3VsZCBiZSB0aHJvd24sCiAgICogW29uRXJyb3JdIGlzIGluc3RlYWQgY2FsbGVkIHdpdGggW3NvdXJjZV0gYXMgYXJndW1lbnQsCiAgICogYW5kIHRoZSByZXN1bHQgb2YgdGhhdCBjYWxsIGlzIHJldHVybmVkIGJ5IFtwYXJzZV0uCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIGludCBwYXJzZShTdHJpbmcgc291cmNlLAogICAgICB7aW50IHJhZGl4LCBAZGVwcmVjYXRlZCBpbnQgb25FcnJvcihTdHJpbmcgc291cmNlKX0pOwoKICAvKioKICAgKiBQYXJzZSBbc291cmNlXSBhcyBhLCBwb3NzaWJseSBzaWduZWQsIGludGVnZXIgbGl0ZXJhbCBhbmQgcmV0dXJuIGl0cyB2YWx1ZS4KICAgKgogICAqIExpa2UgW3BhcnNlXSBleGNlcHQgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYG51bGxgIHdoZXJlIGEKICAgKiBzaW1pbGFyIGNhbGwgdG8gW3BhcnNlXSB3b3VsZCB0aHJvdyBhIFtGb3JtYXRFeGNlcHRpb25dLAogICAqIGFuZCB0aGUgW3NvdXJjZV0gbXVzdCBzdGlsbCBub3QgYmUgYG51bGxgLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBpbnQgdHJ5UGFyc2UoU3RyaW5nIHNvdXJjZSwge2ludCByYWRpeH0pOwp9CoFnAE5OPAEPARMBBBYDSzgDTU5NTw46R008AzYEIQZMBTUJSBkJDglACQZMTFAiKBpPAQYcBUxNHQVGIQYdAQYbBUxPGwVEJwYdAQYlBUxNKQVFJwYdAQYjBUY4BSwGFAEGQgVLKQVISwsFMgYkAQZDBUhAGgUyBiQBBkcFPw8GKQEGQBcFJQUyBh8BBkYFSi8FPjYFMwVCBhYBOxMBOhIBBkgFTk5OBU0qCSUFJycnJycnJycJBhUBBkVRNQk6CVEyCSAJRgVNUCIJJQkGHQEGT1FQUQUJMjY2MglROQkeCU4MBU9RIAknCQYbAQYwBUwqBhQBBjEFRgYNAQYnBTomBhABGQ8BGQ8BGQ4BGRIBJBoBJBoBJBkBJB0BBjYFMS4lBhUBBkYFUC0FQwYjAQZRBUdBHAVBR0kkBU9OJzpDRkUbBUA1BUZCRQVJNw4NJS8JBUA/NQVEMzw5Bis8AQZRBUM+MAY8AgESZGFydDpjb3JlL2ludC5kYXJ0UW9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL19pbnRlcm5hbC92bS9saWIvaW50ZWdlcnNfcGF0Y2guZGFydKwzLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKLy8vIFZNIGltcGxlbWVudGF0aW9uIG9mIGludC4KQHBhdGNoCmNsYXNzIGludCB7CiAgQHBhdGNoCiAgY29uc3QgZmFjdG9yeSBpbnQuZnJvbUVudmlyb25tZW50KFN0cmluZyBuYW1lLCB7aW50IGRlZmF1bHRWYWx1ZX0pCiAgICAgIG5hdGl2ZSAiSW50ZWdlcl9mcm9tRW52aXJvbm1lbnQiOwoKICBpbnQgX2JpdEFuZEZyb21TbWkoX1NtaSBvdGhlcik7CiAgaW50IF9iaXRBbmRGcm9tSW50ZWdlcihpbnQgb3RoZXIpOwogIGludCBfYml0T3JGcm9tSW50ZWdlcihpbnQgb3RoZXIpOwogIGludCBfYml0WG9yRnJvbUludGVnZXIoaW50IG90aGVyKTsKICBpbnQgX3NockZyb21JbnRlZ2VyKGludCBvdGhlcik7CiAgaW50IF9zaGxGcm9tSW50ZWdlcihpbnQgb3RoZXIpOwoKICBzdGF0aWMgaW50IF90cnlQYXJzZVNtaShTdHJpbmcgc3RyLCBpbnQgZmlyc3QsIGludCBsYXN0KSB7CiAgICBhc3NlcnQoZmlyc3QgPD0gbGFzdCk7CiAgICB2YXIgaXggPSBmaXJzdDsKICAgIHZhciBzaWduID0gMTsKICAgIHZhciBjID0gc3RyLmNvZGVVbml0QXQoaXgpOwogICAgLy8gQ2hlY2sgZm9yIGxlYWRpbmcgJysnIG9yICctJy4KICAgIGlmICgoYyA9PSAweDJiKSB8fCAoYyA9PSAweDJkKSkgewogICAgICBpeCsrOwogICAgICBzaWduID0gMHgyYyAtIGM7IC8vIC0xIGZvciAnLScsICsxIGZvciAnKycuCiAgICAgIGlmIChpeCA+IGxhc3QpIHsKICAgICAgICByZXR1cm4gbnVsbDsgLy8gRW1wdHkuCiAgICAgIH0KICAgIH0KICAgIHZhciBzbWlMaW1pdCA9IGlzNjRCaXQgPyAxOCA6IDk7CiAgICBpZiAoKGxhc3QgLSBpeCkgPj0gc21pTGltaXQpIHsKICAgICAgcmV0dXJuIG51bGw7IC8vIE1heSBub3QgZml0IGludG8gYSBTbWkuCiAgICB9CiAgICB2YXIgcmVzdWx0ID0gMDsKICAgIGZvciAoaW50IGkgPSBpeDsgaSA8PSBsYXN0OyBpKyspIHsKICAgICAgdmFyIGMgPSAweDMwIF4gc3RyLmNvZGVVbml0QXQoaSk7CiAgICAgIGlmICg5IDwgYykgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIHJlc3VsdCA9IDEwICogcmVzdWx0ICsgYzsKICAgIH0KICAgIHJldHVybiBzaWduICogcmVzdWx0OwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIGludCBwYXJzZShTdHJpbmcgc291cmNlLCB7aW50IHJhZGl4LCBpbnQgb25FcnJvcihTdHJpbmcgc291cmNlKX0pIHsKICAgIGlmIChzb3VyY2UgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIlRoZSBzb3VyY2UgbXVzdCBub3QgYmUgbnVsbCIpOwogICAgaWYgKHNvdXJjZS5pc0VtcHR5KSB7CiAgICAgIHJldHVybiBfdGhyb3dGb3JtYXRFeGNlcHRpb24ob25FcnJvciwgc291cmNlLCAwLCByYWRpeCwgbnVsbCk7CiAgICB9CiAgICBpZiAocmFkaXggPT0gbnVsbCB8fCByYWRpeCA9PSAxMCkgewogICAgICAvLyBUcnkgcGFyc2luZyBpbW1lZGlhdGVseSwgd2l0aG91dCB0cmltbWluZyB3aGl0ZXNwYWNlLgogICAgICBpbnQgcmVzdWx0ID0gX3RyeVBhcnNlU21pKHNvdXJjZSwgMCwgc291cmNlLmxlbmd0aCAtIDEpOwogICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHJldHVybiByZXN1bHQ7CiAgICB9IGVsc2UgaWYgKHJhZGl4IDwgMiB8fCByYWRpeCA+IDM2KSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJSYWRpeCAkcmFkaXggbm90IGluIHJhbmdlIDIuLjM2Iik7CiAgICB9CiAgICAvLyBTcGxpdCBoZXJlIHNvIGltcHJvdmUgb2RkcyBvZiBwYXJzZSBiZWluZyBpbmxpbmVkIGFuZCB0aGUgY2hlY2tzIG9taXR0ZWQuCiAgICByZXR1cm4gX3BhcnNlKHNvdXJjZSwgcmFkaXgsIG9uRXJyb3IpOwogIH0KCiAgc3RhdGljIGludCBfcGFyc2UoX1N0cmluZ0Jhc2Ugc291cmNlLCBpbnQgcmFkaXgsIG9uRXJyb3IpIHsKICAgIGludCBlbmQgPSBzb3VyY2UuX2xhc3ROb25XaGl0ZXNwYWNlKCkgKyAxOwogICAgaWYgKGVuZCA9PSAwKSB7CiAgICAgIHJldHVybiBfdGhyb3dGb3JtYXRFeGNlcHRpb24ob25FcnJvciwgc291cmNlLCBzb3VyY2UubGVuZ3RoLCByYWRpeCwgbnVsbCk7CiAgICB9CiAgICBpbnQgc3RhcnQgPSBzb3VyY2UuX2ZpcnN0Tm9uV2hpdGVzcGFjZSgpOwoKICAgIGludCBmaXJzdCA9IHNvdXJjZS5jb2RlVW5pdEF0KHN0YXJ0KTsKICAgIGludCBzaWduID0gMTsKICAgIGlmIChmaXJzdCA9PSAweDJiIC8qICsgKi8gfHwgZmlyc3QgPT0gMHgyZCAvKiAtICovKSB7CiAgICAgIHNpZ24gPSAweDJjIC0gZmlyc3Q7IC8vIC0xIGlmICctJywgKzEgaWYgJysnLgogICAgICBzdGFydCsrOwogICAgICBpZiAoc3RhcnQgPT0gZW5kKSB7CiAgICAgICAgcmV0dXJuIF90aHJvd0Zvcm1hdEV4Y2VwdGlvbihvbkVycm9yLCBzb3VyY2UsIGVuZCwgcmFkaXgsIG51bGwpOwogICAgICB9CiAgICAgIGZpcnN0ID0gc291cmNlLmNvZGVVbml0QXQoc3RhcnQpOwogICAgfQogICAgaWYgKHJhZGl4ID09IG51bGwpIHsKICAgICAgLy8gY2hlY2sgZm9yIDB4IHByZWZpeC4KICAgICAgaW50IGluZGV4ID0gc3RhcnQ7CiAgICAgIGlmIChmaXJzdCA9PSAweDMwIC8qIDAgKi8pIHsKICAgICAgICBpbmRleCsrOwogICAgICAgIGlmIChpbmRleCA9PSBlbmQpIHJldHVybiAwOwogICAgICAgIGZpcnN0ID0gc291cmNlLmNvZGVVbml0QXQoaW5kZXgpOwogICAgICAgIGlmICgoZmlyc3QgfCAweDIwKSA9PSAweDc4IC8qIHggKi8pIHsKICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgICBpZiAoaW5kZXggPT0gZW5kKSB7CiAgICAgICAgICAgIHJldHVybiBfdGhyb3dGb3JtYXRFeGNlcHRpb24ob25FcnJvciwgc291cmNlLCBpbmRleCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gX3BhcnNlUmFkaXgoc291cmNlLCAxNiwgaW5kZXgsIGVuZCwgc2lnbiwgc2lnbiA+IDAsIG9uRXJyb3IpOwogICAgICAgIH0KICAgICAgfQogICAgICByYWRpeCA9IDEwOwogICAgfQogICAgcmV0dXJuIF9wYXJzZVJhZGl4KHNvdXJjZSwgcmFkaXgsIHN0YXJ0LCBlbmQsIHNpZ24sIGZhbHNlLCBvbkVycm9yKTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBpbnQgdHJ5UGFyc2UoU3RyaW5nIHNvdXJjZSwge2ludCByYWRpeH0pIHsKICAgIGlmIChzb3VyY2UgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIlRoZSBzb3VyY2UgbXVzdCBub3QgYmUgbnVsbCIpOwogICAgaWYgKHNvdXJjZS5pc0VtcHR5KSByZXR1cm4gbnVsbDsKICAgIGlmIChyYWRpeCA9PSBudWxsIHx8IHJhZGl4ID09IDEwKSB7CiAgICAgIC8vIFRyeSBwYXJzaW5nIGltbWVkaWF0ZWx5LCB3aXRob3V0IHRyaW1taW5nIHdoaXRlc3BhY2UuCiAgICAgIGludCByZXN1bHQgPSBfdHJ5UGFyc2VTbWkoc291cmNlLCAwLCBzb3VyY2UubGVuZ3RoIC0gMSk7CiAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgcmV0dXJuIHJlc3VsdDsKICAgIH0gZWxzZSBpZiAocmFkaXggPCAyIHx8IHJhZGl4ID4gMzYpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlJhZGl4ICRyYWRpeCBub3QgaW4gcmFuZ2UgMi4uMzYiKTsKICAgIH0KICAgIHRyeSB7CiAgICAgIHJldHVybiBfcGFyc2Uoc291cmNlLCByYWRpeCwgX2tOdWxsKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICBzdGF0aWMgTnVsbCBfa051bGwoXykgPT4gbnVsbDsKCiAgc3RhdGljIGludCBfdGhyb3dGb3JtYXRFeGNlcHRpb24ob25FcnJvciwgc291cmNlLCBpbmRleCwgcmFkaXgsIG1lc3NhZ2UpIHsKICAgIGlmIChvbkVycm9yICE9IG51bGwpIHJldHVybiBvbkVycm9yKHNvdXJjZSk7CiAgICBpZiAobWVzc2FnZSAhPSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24obWVzc2FnZSwgc291cmNlLCBpbmRleCk7CiAgICB9CiAgICBpZiAocmFkaXggPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIG51bWJlciIsIHNvdXJjZSwgaW5kZXgpOwogICAgfQogICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCByYWRpeC0kcmFkaXggbnVtYmVyIiwgc291cmNlLCBpbmRleCk7CiAgfQoKICBzdGF0aWMgaW50IF9wYXJzZVJhZGl4KFN0cmluZyBzb3VyY2UsIGludCByYWRpeCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgc2lnbiwKICAgICAgYm9vbCBhbGxvd1U2NCwgb25FcnJvcikgewogICAgaW50IHRhYmxlSW5kZXggPSAocmFkaXggLSAyKSAqIDQgKyAoaXM2NEJpdCA/IDIgOiAwKTsKICAgIGludCBibG9ja1NpemUgPSBfUEFSU0VfTElNSVRTW3RhYmxlSW5kZXhdOwogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKGxlbmd0aCA8PSBibG9ja1NpemUpIHsKICAgICAgX1NtaSBzbWkgPSBfcGFyc2VCbG9jayhzb3VyY2UsIHJhZGl4LCBzdGFydCwgZW5kKTsKICAgICAgaWYgKHNtaSA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIF90aHJvd0Zvcm1hdEV4Y2VwdGlvbihvbkVycm9yLCBzb3VyY2UsIHN0YXJ0LCByYWRpeCwgbnVsbCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHNpZ24gKiBzbWk7CiAgICB9CgogICAgLy8gT2Z0ZW4gY2hlYXBlciB0aGFuOiBpbnQgc21hbGxCbG9ja1NpemUgPSBsZW5ndGggJSBibG9ja1NpemU7CiAgICAvLyBiZWNhdXNlIGRpZ2l0IGNvdW50IGdlbmVyYWxseSB0ZW5kcyB0b3dhcmRzIHNtYWxsZXIuIHJhdGhlcgogICAgLy8gdGhhbiBsYXJnZXIuCiAgICBpbnQgc21hbGxCbG9ja1NpemUgPSBsZW5ndGg7CiAgICB3aGlsZSAoc21hbGxCbG9ja1NpemUgPj0gYmxvY2tTaXplKSBzbWFsbEJsb2NrU2l6ZSAtPSBibG9ja1NpemU7CiAgICBpbnQgcmVzdWx0ID0gMDsKICAgIGlmIChzbWFsbEJsb2NrU2l6ZSA+IDApIHsKICAgICAgaW50IGJsb2NrRW5kID0gc3RhcnQgKyBzbWFsbEJsb2NrU2l6ZTsKICAgICAgX1NtaSBzbWkgPSBfcGFyc2VCbG9jayhzb3VyY2UsIHJhZGl4LCBzdGFydCwgYmxvY2tFbmQpOwogICAgICBpZiAoc21pID09IG51bGwpIHsKICAgICAgICByZXR1cm4gX3Rocm93Rm9ybWF0RXhjZXB0aW9uKG9uRXJyb3IsIHNvdXJjZSwgc3RhcnQsIHJhZGl4LCBudWxsKTsKICAgICAgfQogICAgICByZXN1bHQgPSBzaWduICogc21pOwogICAgICBzdGFydCA9IGJsb2NrRW5kOwogICAgfQogICAgaW50IG11bHRpcGxpZXIgPSBfUEFSU0VfTElNSVRTW3RhYmxlSW5kZXggKyAxXTsKICAgIGludCBwb3NpdGl2ZU92ZXJmbG93TGltaXQgPSAwOwogICAgaW50IG5lZ2F0aXZlT3ZlcmZsb3dMaW1pdCA9IDA7CiAgICB0YWJsZUluZGV4ID0gdGFibGVJbmRleCA8PCAxOyAvLyBwcmUtbXVsdGlwbHkgYnkgMiBmb3Igc2ltcGxlciBpbmRleGluZwogICAgcG9zaXRpdmVPdmVyZmxvd0xpbWl0ID0gX2ludDY0T3ZlcmZsb3dMaW1pdHNbdGFibGVJbmRleF07CiAgICBpZiAocG9zaXRpdmVPdmVyZmxvd0xpbWl0ID09IDApIHsKICAgICAgcG9zaXRpdmVPdmVyZmxvd0xpbWl0ID0gX2luaXRJbnQ2NE92ZXJmbG93TGltaXRzKHRhYmxlSW5kZXgsIG11bHRpcGxpZXIpOwogICAgfQogICAgbmVnYXRpdmVPdmVyZmxvd0xpbWl0ID0gX2ludDY0T3ZlcmZsb3dMaW1pdHNbdGFibGVJbmRleCArIDFdOwogICAgaW50IGJsb2NrRW5kID0gc3RhcnQgKyBibG9ja1NpemU7CiAgICBkbyB7CiAgICAgIF9TbWkgc21pID0gX3BhcnNlQmxvY2soc291cmNlLCByYWRpeCwgc3RhcnQsIGJsb2NrRW5kKTsKICAgICAgaWYgKHNtaSA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIF90aHJvd0Zvcm1hdEV4Y2VwdGlvbihvbkVycm9yLCBzb3VyY2UsIHN0YXJ0LCByYWRpeCwgbnVsbCk7CiAgICAgIH0KICAgICAgaWYgKHJlc3VsdCA+PSBwb3NpdGl2ZU92ZXJmbG93TGltaXQpIHsKICAgICAgICBpZiAoKHJlc3VsdCA+IHBvc2l0aXZlT3ZlcmZsb3dMaW1pdCkgfHwKICAgICAgICAgICAgKHNtaSA+IF9pbnQ2NE92ZXJmbG93TGltaXRzW3RhYmxlSW5kZXggKyAyXSkpIHsKICAgICAgICAgIC8vIEFsdGhvdWdoIHRoZSB1bnNpZ25lZCBvdmVyZmxvdyBsaW1pdHMgZG8gbm90IGRlcGVuZCBvbiB0aGUKICAgICAgICAgIC8vIHBsYXRmb3JtLCB0aGUgbXVsdGlwbGllciBhbmQgYmxvY2sgc2l6ZSwgd2hpY2ggYXJlIHVzZWQgdG8KICAgICAgICAgIC8vIGNvbXB1dGUgaXQsIGRvLgogICAgICAgICAgaW50IFggPSBpczY0Qml0ID8gMSA6IDA7CiAgICAgICAgICBpZiAoYWxsb3dVNjQgJiYKICAgICAgICAgICAgICAhKHJlc3VsdCA+PSBfaW50NjRVbnNpZ25lZE92ZXJmbG93TGltaXRzW1hdICYmCiAgICAgICAgICAgICAgICAgIChyZXN1bHQgPiBfaW50NjRVbnNpZ25lZE92ZXJmbG93TGltaXRzW1hdIHx8CiAgICAgICAgICAgICAgICAgICAgICBzbWkgPiBfaW50NjRVbnNpZ25lZFNtaU92ZXJmbG93TGltaXRzW1hdKSkgJiYKICAgICAgICAgICAgICBibG9ja0VuZCArIGJsb2NrU2l6ZSA+IGVuZCkgewogICAgICAgICAgICByZXR1cm4gKHJlc3VsdCAqIG11bHRpcGxpZXIpICsgc21pOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIF90aHJvd0Zvcm1hdEV4Y2VwdGlvbihvbkVycm9yLCBzb3VyY2UsIG51bGwsIHJhZGl4LAogICAgICAgICAgICAgICJQb3NpdGl2ZSBpbnB1dCBleGNlZWRzIHRoZSBsaW1pdCBvZiBpbnRlZ2VyIik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHJlc3VsdCA8PSBuZWdhdGl2ZU92ZXJmbG93TGltaXQpIHsKICAgICAgICBpZiAoKHJlc3VsdCA8IG5lZ2F0aXZlT3ZlcmZsb3dMaW1pdCkgfHwKICAgICAgICAgICAgKHNtaSA+IF9pbnQ2NE92ZXJmbG93TGltaXRzW3RhYmxlSW5kZXggKyAzXSkpIHsKICAgICAgICAgIHJldHVybiBfdGhyb3dGb3JtYXRFeGNlcHRpb24ob25FcnJvciwgc291cmNlLCBudWxsLCByYWRpeCwKICAgICAgICAgICAgICAiTmVnYXRpdmUgaW5wdXQgZXhjZWVkcyB0aGUgbGltaXQgb2YgaW50ZWdlciIpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXN1bHQgPSAocmVzdWx0ICogbXVsdGlwbGllcikgKyAoc2lnbiAqIHNtaSk7CiAgICAgIHN0YXJ0ID0gYmxvY2tFbmQ7CiAgICAgIGJsb2NrRW5kID0gc3RhcnQgKyBibG9ja1NpemU7CiAgICB9IHdoaWxlIChibG9ja0VuZCA8PSBlbmQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIFBhcnNlIGJsb2NrIG9mIGRpZ2l0cyBpbnRvIGEgU21pLgogIHN0YXRpYyBfU21pIF9wYXJzZUJsb2NrKFN0cmluZyBzb3VyY2UsIGludCByYWRpeCwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBfU21pIHJlc3VsdCA9IDA7CiAgICBpZiAocmFkaXggPD0gMTApIHsKICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgICBpbnQgZGlnaXQgPSBzb3VyY2UuY29kZVVuaXRBdChpKSBeIDB4MzA7CiAgICAgICAgaWYgKGRpZ2l0ID49IHJhZGl4KSByZXR1cm4gbnVsbDsKICAgICAgICByZXN1bHQgPSByYWRpeCAqIHJlc3VsdCArIGRpZ2l0OwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICAgIGludCBjaGFyID0gc291cmNlLmNvZGVVbml0QXQoaSk7CiAgICAgICAgaW50IGRpZ2l0ID0gY2hhciBeIDB4MzA7CiAgICAgICAgaWYgKGRpZ2l0ID4gOSkgewogICAgICAgICAgZGlnaXQgPSAoY2hhciB8IDB4MjApIC0gKDB4NjEgLSAxMCk7CiAgICAgICAgICBpZiAoZGlnaXQgPCAxMCB8fCBkaWdpdCA+PSByYWRpeCkgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIHJlc3VsdCA9IHJhZGl4ICogcmVzdWx0ICsgZGlnaXQ7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBGb3IgZWFjaCByYWRpeCwgMi0zNiwgaG93IG1hbnkgZGlnaXRzIGFyZSBndWFyYW50ZWVkIHRvIGZpdCBpbiBhIHNtaSwKICAvLyBhbmQgbWFnbml0dWRlIG9mIHN1Y2ggYSBibG9jayAocmFkaXggKiogZGlnaXQtY291bnQpLgogIC8vIDMyLWJpdCBsaW1pdC9tdWx0aXBsaWVyIGF0IChyYWRpeCAtIDIpKjQsIDY0LWJpdCBsaW1pdCBhdCAocmFkaXgtMikqNCsyCiAgc3RhdGljIGNvbnN0IF9QQVJTRV9MSU1JVFMgPSBjb25zdCBbCiAgICAzMCwgMTA3Mzc0MTgyNCwgNjIsIDQ2MTE2ODYwMTg0MjczODc5MDQsIC8vIHJhZGl4OiAyCiAgICAxOCwgMzg3NDIwNDg5LCAzOSwgNDA1MjU1NTE1MzAxODk3NjI2NywKICAgIDE1LCAxMDczNzQxODI0LCAzMCwgMTE1MjkyMTUwNDYwNjg0Njk3NiwKICAgIDEyLCAyNDQxNDA2MjUsIDI2LCAxNDkwMTE2MTE5Mzg0NzY1NjI1LCAvLyAgcmFkaXg6IDUKICAgIDExLCAzNjI3OTcwNTYsIDIzLCA3ODk3MzAyMjMwNTM2MDI4MTYsCiAgICAxMCwgMjgyNDc1MjQ5LCAyMiwgMzkwOTgyMTA0ODU4Mjk4ODA0OSwKICAgIDEwLCAxMDczNzQxODI0LCAyMCwgMTE1MjkyMTUwNDYwNjg0Njk3NiwKICAgIDksIDM4NzQyMDQ4OSwgMTksIDEzNTA4NTE3MTc2NzI5OTIwODksCiAgICA5LCAxMDAwMDAwMDAwLCAxOCwgMTAwMDAwMDAwMDAwMDAwMDAwMCwgLy8gIHJhZGl4OiAxMAogICAgOCwgMjE0MzU4ODgxLCAxNywgNTA1NDQ3MDI4NDk5MjkzNzcxLAogICAgOCwgNDI5OTgxNjk2LCAxNywgMjIxODYxMTEwNjc0MDQzNjk5MiwKICAgIDgsIDgxNTczMDcyMSwgMTYsIDY2NTQxNjYwOTE4MzE3OTg0MSwKICAgIDcsIDEwNTQxMzUwNCwgMTYsIDIxNzc5NTMzMzc4MDkzNzExMzYsCiAgICA3LCAxNzA4NTkzNzUsIDE1LCA0Mzc4OTM4OTAzODA4NTkzNzUsIC8vICAgIHJhZGl4OiAxNQogICAgNywgMjY4NDM1NDU2LCAxNSwgMTE1MjkyMTUwNDYwNjg0Njk3NiwKICAgIDcsIDQxMDMzODY3MywgMTUsIDI4NjI0MjMwNTE1MDk4MTU3OTMsCiAgICA3LCA2MTIyMjAwMzIsIDE0LCAzNzQ4MTMzNjc1ODIwODEwMjQsCiAgICA3LCA4OTM4NzE3MzksIDE0LCA3OTkwMDY2ODU3ODI4ODQxMjEsCiAgICA2LCA2NDAwMDAwMCwgMTQsIDE2Mzg0MDAwMDAwMDAwMDAwMDAsIC8vICAgIHJhZGl4OiAyMAogICAgNiwgODU3NjYxMjEsIDE0LCAzMjQzOTE5OTMyNTIxNTA4NjgxLAogICAgNiwgMTEzMzc5OTA0LCAxMywgMjgyODEwMDU3ODgzMDgyNzUyLAogICAgNiwgMTQ4MDM1ODg5LCAxMywgNTA0MDM2MzYxOTM2NDY3MzgzLAogICAgNiwgMTkxMTAyOTc2LCAxMywgODc2NDg4MzM4NDY1MzU3ODI0LAogICAgNiwgMjQ0MTQwNjI1LCAxMywgMTQ5MDExNjExOTM4NDc2NTYyNSwgLy8gICByYWRpeDogMjUKICAgIDYsIDMwODkxNTc3NiwgMTMsIDI0ODExNTI4NzMyMDM3MzY1NzYsCiAgICA2LCAzODc0MjA0ODksIDEzLCA0MDUyNTU1MTUzMDE4OTc2MjY3LAogICAgNiwgNDgxODkwMzA0LCAxMiwgMjMyMjE4MjY1MDg5MjEyNDE2LAogICAgNiwgNTk0ODIzMzIxLCAxMiwgMzUzODE0NzgzMjA1NDY5MDQxLAogICAgNiwgNzI5MDAwMDAwLCAxMiwgNTMxNDQxMDAwMDAwMDAwMDAwLCAvLyAgICByYWRpeDogMzAKICAgIDYsIDg4NzUwMzY4MSwgMTIsIDc4NzY2Mjc4Mzc4ODU0OTc2MSwKICAgIDYsIDEwNzM3NDE4MjQsIDEyLCAxMTUyOTIxNTA0NjA2ODQ2OTc2LAogICAgNSwgMzkxMzUzOTMsIDEyLCAxNjY3ODg5NTE0OTUyOTg0OTYxLAogICAgNSwgNDU0MzU0MjQsIDEyLCAyMzg2NDIwNjgzNjkzMTAxMDU2LAogICAgNSwgNTI1MjE4NzUsIDEyLCAzMzc5MjIwNTA4MDU2NjQwNjI1LCAvLyAgICByYWRpeDogMzUKICAgIDUsIDYwNDY2MTc2LCAxMSwgMTMxNjIxNzAzODQyMjY3MTM2LAogIF07CgogIHN0YXRpYyBjb25zdCBfbWF4SW50NjQgPSAweDdmZmZmZmZmZmZmZmZmZmY7CiAgc3RhdGljIGNvbnN0IF9taW5JbnQ2NCA9IC0weDgwMDAwMDAwMDAwMDAwMDA7CgogIHN0YXRpYyBjb25zdCBfaW50NjRVbnNpZ25lZE92ZXJmbG93TGltaXRzID0gY29uc3QgWzB4ZmZmZmZmZmZmLCAweGZdOwogIHN0YXRpYyBjb25zdCBfaW50NjRVbnNpZ25lZFNtaU92ZXJmbG93TGltaXRzID0gY29uc3QgWwogICAgMHhmZmZmZmZmLAogICAgMHhmZmZmZmZmZmZmZmZmZmYKICBdOwoKICAvLy8gQ2FsY3VsYXRpb24gb2YgdGhlIGV4cHJlc3Npb24KICAvLy8KICAvLy8gICByZXN1bHQgPSAocmVzdWx0ICogbXVsdGlwbGllcikgKyAoc2lnbiAqIHNtaSkKICAvLy8KICAvLy8gaW4gYF9wYXJzZVJhZGl4KClgIG1heSBvdmVyZmxvdyA2NC1iaXQgaW50ZWdlcnMuIEluIHN1Y2ggY2FzZSwKICAvLy8gYGludC5wYXJzZSgpYCBzaG91bGQgc3RvcCB3aXRoIGFuIGVycm9yLgogIC8vLwogIC8vLyBUaGlzIHRhYmxlIGlzIGxhemlseSBmaWxsZWQgd2l0aCBpbnQ2NCBvdmVyZmxvdyBsaW1pdHMgZm9yIHJlc3VsdCBhbmQgc21pLgogIC8vLyBGb3IgZWFjaCBtdWx0aXBsaWVyIGZyb20gYF9QQVJTRV9MSU1JVFNbdGFibGVJbmRleCArIDFdYCB0aGlzIHRhYmxlCiAgLy8vIGNvbnRhaW5zCiAgLy8vCiAgLy8vICogYFt0YWJsZUluZGV4KjJdYCA9IHBvc2l0aXZlIGxpbWl0IGZvciByZXN1bHQKICAvLy8gKiBgW3RhYmxlSW5kZXgqMiArIDFdYCA9IG5lZ2F0aXZlIGxpbWl0IGZvciByZXN1bHQKICAvLy8gKiBgW3RhYmxlSW5kZXgqMiArIDJdYCA9IGxpbWl0IGZvciBzbWkgaWYgcmVzdWx0IGlzIGV4YWN0bHkgYXQgcG9zaXRpdmUgbGltaXQKICAvLy8gKiBgW3RhYmxlSW5kZXgqMiArIDNdYCA9IGxpbWl0IGZvciBzbWkgaWYgcmVzdWx0IGlzIGV4YWN0bHkgYXQgbmVnYXRpdmUgbGltaXQKICBzdGF0aWMgZmluYWwgSW50NjRMaXN0IF9pbnQ2NE92ZXJmbG93TGltaXRzID0KICAgICAgbmV3IEludDY0TGlzdChfUEFSU0VfTElNSVRTLmxlbmd0aCAqIDIpOwoKICBzdGF0aWMgaW50IF9pbml0SW50NjRPdmVyZmxvd0xpbWl0cyhpbnQgdGFibGVJbmRleCwgaW50IG11bHRpcGxpZXIpIHsKICAgIF9pbnQ2NE92ZXJmbG93TGltaXRzW3RhYmxlSW5kZXhdID0gX21heEludDY0IH4vIG11bHRpcGxpZXI7CiAgICBfaW50NjRPdmVyZmxvd0xpbWl0c1t0YWJsZUluZGV4ICsgMV0gPSBfbWluSW50NjQgfi8gbXVsdGlwbGllcjsKICAgIF9pbnQ2NE92ZXJmbG93TGltaXRzW3RhYmxlSW5kZXggKyAyXSA9IF9tYXhJbnQ2NC5yZW1haW5kZXIobXVsdGlwbGllcik7CiAgICBfaW50NjRPdmVyZmxvd0xpbWl0c1t0YWJsZUluZGV4ICsgM10gPSAtKF9taW5JbnQ2NC5yZW1haW5kZXIobXVsdGlwbGllcikpOwogICAgcmV0dXJuIF9pbnQ2NE92ZXJmbG93TGltaXRzW3RhYmxlSW5kZXhdOwogIH0KfQqBNgBOTjwBDwEeAR4HDAlFKAEiJSQlIiIBPRsUEiAlJgwyFx8IBiUjLgYUJygTFQggBhoEAQlNUBpFBig/PykqPwZRKwQBPi8UUQYuASoSOjQPGkkIKAYZHhkjESQqLhMeTgxPCggSBkkEAQk0UCUoPz8pKj8GCiwSEwYEASEBTTEbOQYZQgZNBAFRIDovHh85GUsIGQYBREMUIUUUHi0+GUsIGxgGNCMjTD4mUAZCJgk+GUsILTA8SEgdIxo9P0QsMAxFPgo0MDxFPgoINRgkHxMEASdKFRcqMSkpCA0qKSEZLzkKKQgGEwQBSztNJzksLTkrLC0rOiorKis6KysqKjoqKioqOisrKio6KiwqKjopBQEvMAFIOQ8WBQEkBjYGRS8GUUoPBjU5VFQwLwFIQERMTy0EAgEjZGFydDpjb3JlLXBhdGNoL2ludGVnZXJzX3BhdGNoLmRhcnRBb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvY29yZS9pbnZvY2F0aW9uLmRhcnSVJy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogUmVwcmVzZW50YXRpb24gb2YgdGhlIGludm9jYXRpb24gb2YgYSBtZW1iZXIgb24gYW4gb2JqZWN0LgogKgogKiBUaGlzIGlzIHRoZSB0eXBlIG9mIG9iamVjdHMgcGFzc2VkIHRvIFtPYmplY3Qubm9TdWNoTWV0aG9kXSB3aGVuCiAqIGFuIG9iamVjdCBkb2Vzbid0IHN1cHBvcnQgdGhlIG1lbWJlciBpbnZvY2F0aW9uIHRoYXQgd2FzIGF0dGVtcHRlZAogKiBvbiBpdC4KICovCmFic3RyYWN0IGNsYXNzIEludm9jYXRpb24gewogIEludm9jYXRpb24oKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBpbnZvY2F0aW9uIGNvcnJlc3BvbmRpbmcgdG8gYSBtZXRob2QgaW52b2NhdGlvbi4KICAgKgogICAqIFRoZSBtZXRob2QgaW52b2NhdGlvbiBoYXMgbm8gdHlwZSBhcmd1bWVudHMuCiAgICogSWYgdGhlIG5hbWVkIGFyZ3VtZW50cyBhcmUgb21pdHRlZCwgdGhleSBkZWZhdWx0IHRvIG5vIG5hbWVkIGFyZ3VtZW50cy4KICAgKi8KICBmYWN0b3J5IEludm9jYXRpb24ubWV0aG9kKAogICAgICAgICAgU3ltYm9sIG1lbWJlck5hbWUsIEl0ZXJhYmxlPE9iamVjdD4gcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgICAgIFtNYXA8U3ltYm9sLCBPYmplY3Q+IG5hbWVkQXJndW1lbnRzXSkgPT4KICAgICAgX0ludm9jYXRpb24ubWV0aG9kKG1lbWJlck5hbWUsIG51bGwsIHBvc2l0aW9uYWxBcmd1bWVudHMsIG5hbWVkQXJndW1lbnRzKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBpbnZvY2F0aW9uIGNvcnJlc3BvbmRpbmcgdG8gYSBnZW5lcmljIG1ldGhvZCBpbnZvY2F0aW9uLgogICAqCiAgICogSWYgW3R5cGVBcmd1bWVudHNdIGlzIGBudWxsYCBvciBlbXB0eSwgdGhlIGNvbnN0cnVjdG9yIGlzIGVxdWl2YWxlbnQgdG8KICAgKiBjYWxsaW5nIFtJbnZvY2F0aW9uLm1ldGhvZF0gd2l0aCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4KICAgKiBBbGwgdGhlIGluZGl2aWR1YWwgdHlwZSBhcmd1bWVudHMgbXVzdCBiZSBub24tbnVsbC4KICAgKgogICAqIElmIHRoZSBuYW1lZCBhcmd1bWVudHMgYXJlIG9taXR0ZWQsIHRoZXkgZGVmYXVsdCB0byBubyBuYW1lZCBhcmd1bWVudHMuCiAgICovCiAgZmFjdG9yeSBJbnZvY2F0aW9uLmdlbmVyaWNNZXRob2QoU3ltYm9sIG1lbWJlck5hbWUsCiAgICAgICAgICBJdGVyYWJsZTxUeXBlPiB0eXBlQXJndW1lbnRzLCBJdGVyYWJsZTxPYmplY3Q+IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgICAgICBbTWFwPFN5bWJvbCwgT2JqZWN0PiBuYW1lZEFyZ3VtZW50c10pID0+CiAgICAgIF9JbnZvY2F0aW9uLm1ldGhvZCgKICAgICAgICAgIG1lbWJlck5hbWUsIHR5cGVBcmd1bWVudHMsIHBvc2l0aW9uYWxBcmd1bWVudHMsIG5hbWVkQXJndW1lbnRzKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBpbnZvY2F0aW9uIGNvcnJlc3BvbmRpbmcgdG8gYSBnZXR0ZXIgaW52b2NhdGlvbi4KICAgKi8KICBmYWN0b3J5IEludm9jYXRpb24uZ2V0dGVyKFN5bWJvbCBuYW1lKSA9IF9JbnZvY2F0aW9uLmdldHRlcjsKCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBpbnZvY2F0aW9uIGNvcnJlc3BvbmRpbmcgdG8gYSBzZXR0ZXIgaW52b2NhdGlvbi4KICAgKgogICAqIFRoaXMgY29uc3RydWN0b3IgYWNjZXB0cyBhbnkgW1N5bWJvbF0gYXMgW21lbWJlck5hbWVdLCBidXQgcmVtZW1iZXIgdGhhdAogICAqICphY3R1YWwgc2V0dGVyIG5hbWVzKiBlbmQgaW4gYD1gLCBzbyB0aGUgaW52b2NhdGlvbiBjb3JyZXNwb25kaW5nCiAgICogdG8gYG9iamVjdC5tZW1iZXIgPSB2YWx1ZWAgaXMKICAgKiBgYGBkYXJ0CiAgICogSW52b2NhdGlvbi5zZXR0ZXIoY29uc3QgU3ltYm9sKCJtZW1iZXI9IiksIHZhbHVlKQogICAqIGBgYAogICAqLwogIGZhY3RvcnkgSW52b2NhdGlvbi5zZXR0ZXIoU3ltYm9sIG1lbWJlck5hbWUsIE9iamVjdCBhcmd1bWVudCkgPQogICAgICBfSW52b2NhdGlvbi5zZXR0ZXI7CgogIC8qKiBUaGUgbmFtZSBvZiB0aGUgaW52b2tlZCBtZW1iZXIuICovCiAgU3ltYm9sIGdldCBtZW1iZXJOYW1lOwoKICAvKioKICAgKiBBbiB1bm1vZGlmaWFibGUgdmlldyBvZiB0aGUgdHlwZSBhcmd1bWVudHMgb2YgdGhlIGNhbGwuCiAgICoKICAgKiBJZiB0aGUgbWVtYmVyIGlzIGEgZ2V0dGVyLCBzZXR0ZXIgb3Igb3BlcmF0b3IsCiAgICogdGhlIHR5cGUgYXJndW1lbnQgbGlzdCBpcyBhbHdheXMgZW1wdHkuCiAgICovCiAgTGlzdDxUeXBlPiBnZXQgdHlwZUFyZ3VtZW50cyA9PiBjb25zdCA8VHlwZT5bXTsKCiAgLyoqCiAgICogQW4gdW5tb2RpZmlhYmxlIHZpZXcgb2YgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIG9mIHRoZSBjYWxsLgogICAqCiAgICogSWYgdGhlIG1lbWJlciBpcyBhIGdldHRlciwgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGxpc3QgaXMKICAgKiBhbHdheXMgZW1wdHkuCiAgICovCiAgTGlzdDxkeW5hbWljPiBnZXQgcG9zaXRpb25hbEFyZ3VtZW50czsKCiAgLyoqCiAgICogQW4gdW5tb2RpZmlhYmxlIHZpZXcgb2YgdGhlIG5hbWVkIGFyZ3VtZW50cyBvZiB0aGUgY2FsbC4KICAgKgogICAqIElmIHRoZSBtZW1iZXIgaXMgYSBnZXR0ZXIsIHNldHRlciBvciBvcGVyYXRvciwKICAgKiB0aGUgbmFtZWQgYXJndW1lbnRzIG1hcCBpcyBhbHdheXMgZW1wdHkuCiAgICovCiAgTWFwPFN5bWJvbCwgZHluYW1pYz4gZ2V0IG5hbWVkQXJndW1lbnRzOwoKICAvKiogV2hldGhlciB0aGUgaW52b2NhdGlvbiB3YXMgYSBtZXRob2QgY2FsbC4gKi8KICBib29sIGdldCBpc01ldGhvZDsKCiAgLyoqCiAgICogV2hldGhlciB0aGUgaW52b2NhdGlvbiB3YXMgYSBnZXR0ZXIgY2FsbC4KICAgKiBJZiBzbywgYWxsIHRocmVlIHR5cGVzIG9mIGFyZ3VtZW50cyBsaXN0cyBhcmUgZW1wdHkuCiAgICovCiAgYm9vbCBnZXQgaXNHZXR0ZXI7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIGludm9jYXRpb24gd2FzIGEgc2V0dGVyIGNhbGwuCiAgICoKICAgKiBJZiBzbywgW3Bvc2l0aW9uYWxBcmd1bWVudHNdIGhhcyBleGFjdGx5IG9uZSBwb3NpdGlvbmFsCiAgICogYXJndW1lbnQsIFtuYW1lZEFyZ3VtZW50c10gaXMgZW1wdHksIGFuZCB0eXBlQXJndW1lbnRzIGlzCiAgICogZW1wdHkuCiAgICovCiAgYm9vbCBnZXQgaXNTZXR0ZXI7CgogIC8qKiBXaGV0aGVyIHRoZSBpbnZvY2F0aW9uIHdhcyBhIGdldHRlciBvciBhIHNldHRlciBjYWxsLiAqLwogIGJvb2wgZ2V0IGlzQWNjZXNzb3IgPT4gaXNHZXR0ZXIgfHwgaXNTZXR0ZXI7Cn0KCi8qKiBJbXBsZW1lbnRhdGlvbiBvZiBbSW52b2NhdGlvbl0gdXNlZCBieSBpdHMgZmFjdG9yeSBjb25zdHJ1Y3RvcnMuICovCmNsYXNzIF9JbnZvY2F0aW9uIGltcGxlbWVudHMgSW52b2NhdGlvbiB7CiAgZmluYWwgU3ltYm9sIG1lbWJlck5hbWU7CiAgZmluYWwgTGlzdDxUeXBlPiB0eXBlQXJndW1lbnRzOwogIC8vIFBvc2l0aW9uYWwgYXJndW1lbnRzIGlzIGBudWxsYCBmb3IgZ2V0dGVycyBvbmx5LgogIGZpbmFsIExpc3Q8T2JqZWN0PiBfcG9zaXRpb25hbDsKICAvLyBOYW1lZCBhcmd1bWVudHMgaXMgYG51bGxgIGZvciBhY2Nlc3NvcnMgb25seS4KICBmaW5hbCBNYXA8U3ltYm9sLCBPYmplY3Q+IF9uYW1lZDsKCiAgX0ludm9jYXRpb24ubWV0aG9kKHRoaXMubWVtYmVyTmFtZSwgSXRlcmFibGU8VHlwZT4gdHlwZXMsCiAgICAgIEl0ZXJhYmxlPE9iamVjdD4gcG9zaXRpb25hbCwgTWFwPFN5bWJvbCwgT2JqZWN0PiBuYW1lZCkKICAgICAgOiB0eXBlQXJndW1lbnRzID0gX2Vuc3VyZU5vbk51bGxUeXBlcyhfbWFrZVVubW9kaWZpYWJsZTxUeXBlPih0eXBlcykpLAogICAgICAgIF9wb3NpdGlvbmFsID0gX21ha2VVbm1vZGlmaWFibGU8T2JqZWN0Pihwb3NpdGlvbmFsKSA/PyBjb25zdCA8T2JqZWN0PltdLAogICAgICAgIF9uYW1lZCA9IChuYW1lZCA9PSBudWxsIHx8IG5hbWVkLmlzRW1wdHkpCiAgICAgICAgICAgID8gY29uc3QgPFN5bWJvbCwgT2JqZWN0Pnt9CiAgICAgICAgICAgIDogTWFwPFN5bWJvbCwgT2JqZWN0Pi51bm1vZGlmaWFibGUobmFtZWQpOwoKICBfSW52b2NhdGlvbi5nZXR0ZXIodGhpcy5tZW1iZXJOYW1lKQogICAgICA6IHR5cGVBcmd1bWVudHMgPSBjb25zdCA8VHlwZT5bXSwKICAgICAgICBfcG9zaXRpb25hbCA9IG51bGwsCiAgICAgICAgX25hbWVkID0gbnVsbDsKCiAgX0ludm9jYXRpb24uc2V0dGVyKHRoaXMubWVtYmVyTmFtZSwgT2JqZWN0IGFyZ3VtZW50KQogICAgICA6IHR5cGVBcmd1bWVudHMgPSBjb25zdCA8VHlwZT5bXSwKICAgICAgICBfcG9zaXRpb25hbCA9IExpc3Q8T2JqZWN0Pi51bm1vZGlmaWFibGUoW2FyZ3VtZW50XSksCiAgICAgICAgX25hbWVkID0gbnVsbDsKCiAgTGlzdDxkeW5hbWljPiBnZXQgcG9zaXRpb25hbEFyZ3VtZW50cyA9PiBfcG9zaXRpb25hbCA/PyBjb25zdCA8T2JqZWN0PltdOwoKICBNYXA8U3ltYm9sLCBkeW5hbWljPiBnZXQgbmFtZWRBcmd1bWVudHMgPT4gX25hbWVkID8/IGNvbnN0IDxTeW1ib2wsIE9iamVjdD57fTsKCiAgYm9vbCBnZXQgaXNNZXRob2QgPT4gX25hbWVkICE9IG51bGw7CiAgYm9vbCBnZXQgaXNHZXR0ZXIgPT4gX3Bvc2l0aW9uYWwgPT0gbnVsbDsKICBib29sIGdldCBpc1NldHRlciA9PiBfcG9zaXRpb25hbCAhPSBudWxsICYmIF9uYW1lZCA9PSBudWxsOwogIGJvb2wgZ2V0IGlzQWNjZXNzb3IgPT4gX25hbWVkID09IG51bGw7CgogIC8vLyBDaGVja3MgdGhhdCB0aGUgZWxlbWVudHMgb2YgW3R5cGVzXSBhcmUgbm90IG51bGwuCiAgc3RhdGljIExpc3Q8VHlwZT4gX2Vuc3VyZU5vbk51bGxUeXBlcyhMaXN0PFR5cGU+IHR5cGVzKSB7CiAgICBpZiAodHlwZXMgPT0gbnVsbCkgcmV0dXJuIGNvbnN0IDxUeXBlPltdOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodHlwZXNbaV0gPT0gbnVsbCkgewogICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAgICJUeXBlIGFyZ3VtZW50cyBtdXN0IGJlIG5vbi1udWxsLCB3YXMgbnVsbCBhdCBpbmRleCAkaS4iKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHR5cGVzOwogIH0KCiAgc3RhdGljIExpc3Q8VD4gX21ha2VVbm1vZGlmaWFibGU8VD4oSXRlcmFibGU8VD4gZWxlbWVudHMpIHsKICAgIGlmIChlbGVtZW50cyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBMaXN0PFQ+LnVubW9kaWZpYWJsZShlbGVtZW50cyk7CiAgfQp9CoCmAE5OPAEPARMBBD4DREYKBBwQAQZBBTJNBh1DM1EBBkkFTT85BU0GNk4zGksBBkEGPwEGQQVORyMNNwkGQhoBKRkBBj0FNC0GMgEGQwVBEwYpAQY+BTQuBisBMxUBBi86BhUBBi8FPT8MBhUBPy8CAUgqGyI2IjMkATw+TVEyJzcBJigcFwE3KD0XAUwBUQEnLD4pATg8Li0eHUcIBhIEAT4nKwQCARlkYXJ0OmNvcmUvaW52b2NhdGlvbi5kYXJ0P29yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2NvcmUvaXRlcmF0b3IuZGFydIpzLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBBbiBpbnRlcmZhY2UgZm9yIGdldHRpbmcgaXRlbXMsIG9uZSBhdCBhIHRpbWUsIGZyb20gYW4gb2JqZWN0LgogKgogKiBUaGUgZm9yLWluIGNvbnN0cnVjdCB0cmFuc3BhcmVudGx5IHVzZXMgYEl0ZXJhdG9yYCB0byB0ZXN0IGZvciB0aGUgZW5kCiAqIG9mIHRoZSBpdGVyYXRpb24sIGFuZCB0byBnZXQgZWFjaCBpdGVtIChvciBfZWxlbWVudF8pLgogKgogKiBJZiB0aGUgb2JqZWN0IGl0ZXJhdGVkIG92ZXIgaXMgY2hhbmdlZCBkdXJpbmcgdGhlIGl0ZXJhdGlvbiwgdGhlCiAqIGJlaGF2aW9yIGlzIHVuc3BlY2lmaWVkLgogKgogKiBUaGUgYEl0ZXJhdG9yYCBpcyBpbml0aWFsbHkgcG9zaXRpb25lZCBiZWZvcmUgdGhlIGZpcnN0IGVsZW1lbnQuCiAqIEJlZm9yZSBhY2Nlc3NpbmcgdGhlIGZpcnN0IGVsZW1lbnQgdGhlIGl0ZXJhdG9yIG11c3QgdGh1cyBiZSBhZHZhbmNlZCB1c2luZwogKiBbbW92ZU5leHRdIHRvIHBvaW50IHRvIHRoZSBmaXJzdCBlbGVtZW50LgogKiBJZiBubyBlbGVtZW50IGlzIGxlZnQsIHRoZW4gW21vdmVOZXh0XSByZXR1cm5zIGZhbHNlLCBbY3VycmVudF0KICogcmV0dXJucyBgbnVsbGAsIGFuZCBhbGwgZnVydGhlciBjYWxscyB0byBbbW92ZU5leHRdIHdpbGwgYWxzbyByZXR1cm4gZmFsc2UuCiAqCiAqIEEgdHlwaWNhbCB1c2FnZSBvZiBhbiBJdGVyYXRvciBsb29rcyBhcyBmb2xsb3dzOgogKgogKiAgICAgdmFyIGl0ID0gb2JqLml0ZXJhdG9yOwogKiAgICAgd2hpbGUgKGl0Lm1vdmVOZXh0KCkpIHsKICogICAgICAgdXNlKGl0LmN1cnJlbnQpOwogKiAgICAgfQogKgogKiAqKlNlZSBhbHNvOioqCiAqIFtJdGVyYXRpb25dKGh0dHA6Ly93d3cuZGFydGxhbmcub3JnL2RvY3MvZGFydC11cC1hbmQtcnVubmluZy9jb250ZW50cy9jaDAzLmh0bWwjaXRlcmF0aW9uKQogKiBpbiB0aGUgW2xpYnJhcnkgdG91cl0oaHR0cDovL3d3dy5kYXJ0bGFuZy5vcmcvZG9jcy9kYXJ0LXVwLWFuZC1ydW5uaW5nL2NvbnRlbnRzL2NoMDMuaHRtbCkKICovCmFic3RyYWN0IGNsYXNzIEl0ZXJhdG9yPEU+IHsKICAvKioKICAgKiBBZHZhbmNlcyB0aGUgaXRlcmF0b3IgdG8gdGhlIG5leHQgZWxlbWVudCBvZiB0aGUgaXRlcmF0aW9uLgogICAqCiAgICogU2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgcmVhZGluZyBbY3VycmVudF0uCiAgICogSXQgdGhlIGNhbGwgdG8gYG1vdmVOZXh0YCByZXR1cm5zIGB0cnVlYCwKICAgKiB0aGVuIFtjdXJyZW50XSB3aWxsIGNvbnRhaW4gdGhlIG5leHQgZWxlbWVudCBvZiB0aGUgaXRlcmF0aW9uCiAgICogdW50aWwgYG1vdmVOZXh0YCBpcyBjYWxsZWQgYWdhaW4uCiAgICogSWYgdGhlIGNhbGwgcmV0dXJucyBgZmFsc2VgLCB0aGVyZSBhcmUgbm8gZnVydGhlciBlbGVtZW50cwogICAqIGFuZCBbY3VycmVudF0gc2hvdWxkIG5vdCBiZSB1c2VkIGFueSBtb3JlLgogICAqCiAgICogSXQgaXMgc2FmZSB0byBjYWxsIFttb3ZlTmV4dF0gYWZ0ZXIgaXQgaGFzIGFscmVhZHkgcmV0dXJuZWQgYGZhbHNlYCwKICAgKiBidXQgaXQgbXVzdCBrZWVwIHJldHVybmluZyBgZmFsc2VgIGFuZCBub3QgaGF2ZSBhbnkgb3RoZXIgZWZmZWN0LgogICAqCiAgICogQSBjYWxsIHRvIGBtb3ZlTmV4dGAgbWF5IHRocm93IGZvciB2YXJpb3VzIHJlYXNvbnMsCiAgICogaW5jbHVkaW5nIGEgY29uY3VycmVudCBjaGFuZ2UgdG8gYW4gdW5kZXJseWluZyBjb2xsZWN0aW9uLgogICAqIElmIHRoYXQgaGFwcGVucywgdGhlIGl0ZXJhdG9yIG1heSBiZSBpbiBhbiBpbmNvbnNpc3RlbnQKICAgKiBzdGF0ZSwgYW5kIGFueSBmdXJ0aGVyIGJlaGF2aW9yIG9mIHRoZSBpdGVyYXRvciBpcyB1bnNwZWNpZmllZCwKICAgKiBpbmNsdWRpbmcgdGhlIGVmZmVjdCBvZiByZWFkaW5nIFtjdXJyZW50XS4KICAgKi8KICBib29sIG1vdmVOZXh0KCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGN1cnJlbnQgZWxlbWVudC4KICAgKgogICAqIFJldHVybnMgYG51bGxgIGlmIHRoZSBpdGVyYXRvciBoYXMgbm90IHlldCBiZWVuIG1vdmVkIHRvIHRoZSBmaXJzdAogICAqIGVsZW1lbnQsIG9yIGlmIHRoZSBpdGVyYXRvciBoYXMgYmVlbiBtb3ZlZCBwYXN0IHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlCiAgICogW0l0ZXJhYmxlXS4KICAgKgogICAqIFRoZSBgY3VycmVudGAgZ2V0dGVyIHNob3VsZCBrZWVwIGl0cyB2YWx1ZSB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvCiAgICogW21vdmVOZXh0XSwgZXZlbiBpZiBhbiB1bmRlcmx5aW5nIGNvbGxlY3Rpb24gY2hhbmdlcy4KICAgKiBBZnRlciBhIHN1Y2Nlc3NmdWwgY2FsbCB0byBgbW92ZU5leHRgLCB0aGUgdXNlciBkb2Vzbid0IG5lZWQgdG8gY2FjaGUKICAgKiB0aGUgY3VycmVudCB2YWx1ZSwgYnV0IGNhbiBrZWVwIHJlYWRpbmcgaXQgZnJvbSB0aGUgaXRlcmF0b3IuCiAgICovCiAgRSBnZXQgY3VycmVudDsKfQpIAE5OPAEPARMBBEIDSjoDRBwDRE8tQ08DNAMeHxoJAxFeXgQdBkEFMC9DJ0AwBUpHBTlAPUUwBhMBBiIFSE0RBUc7S0MGEQIBF2RhcnQ6Y29yZS9pdGVyYXRvci5kYXJ0O29yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2NvcmUvbGlzdC5kYXJ0wABhPy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogQW4gaW5kZXhhYmxlIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyB3aXRoIGEgbGVuZ3RoLgogKgogKiBTdWJjbGFzc2VzIG9mIHRoaXMgY2xhc3MgaW1wbGVtZW50IGRpZmZlcmVudCBraW5kcyBvZiBsaXN0cy4KICogVGhlIG1vc3QgY29tbW9uIGtpbmRzIG9mIGxpc3RzIGFyZToKICoKICogKiBGaXhlZC1sZW5ndGggbGlzdC4KICogICBBbiBlcnJvciBvY2N1cnMgd2hlbiBhdHRlbXB0aW5nIHRvIHVzZSBvcGVyYXRpb25zCiAqICAgdGhhdCBjYW4gY2hhbmdlIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QuCiAqCiAqICogR3Jvd2FibGUgbGlzdC4gRnVsbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQVBJIGRlZmluZWQgaW4gdGhpcyBjbGFzcy4KICoKICogVGhlIGRlZmF1bHQgZ3Jvd2FibGUgbGlzdCwgYXMgcmV0dXJuZWQgYnkgYG5ldyBMaXN0KClgIG9yIGBbXWAsIGtlZXBzCiAqIGFuIGludGVybmFsIGJ1ZmZlciwgYW5kIGdyb3dzIHRoYXQgYnVmZmVyIHdoZW4gbmVjZXNzYXJ5LiBUaGlzIGd1YXJhbnRlZXMKICogdGhhdCBhIHNlcXVlbmNlIG9mIFthZGRdIG9wZXJhdGlvbnMgd2lsbCBlYWNoIGV4ZWN1dGUgaW4gYW1vcnRpemVkIGNvbnN0YW50CiAqIHRpbWUuIFNldHRpbmcgdGhlIGxlbmd0aCBkaXJlY3RseSBtYXkgdGFrZSB0aW1lIHByb3BvcnRpb25hbCB0byB0aGUgbmV3CiAqIGxlbmd0aCwgYW5kIG1heSBjaGFuZ2UgdGhlIGludGVybmFsIGNhcGFjaXR5IHNvIHRoYXQgYSBmb2xsb3dpbmcgYWRkCiAqIG9wZXJhdGlvbiB3aWxsIG5lZWQgdG8gaW1tZWRpYXRlbHkgaW5jcmVhc2UgdGhlIGJ1ZmZlciBjYXBhY2l0eS4KICogT3RoZXIgbGlzdCBpbXBsZW1lbnRhdGlvbnMgbWF5IGhhdmUgZGlmZmVyZW50IHBlcmZvcm1hbmNlIGJlaGF2aW9yLgogKgogKiBUaGUgZm9sbG93aW5nIGNvZGUgaWxsdXN0cmF0ZXMgdGhhdCBzb21lIExpc3QgaW1wbGVtZW50YXRpb25zIHN1cHBvcnQKICogb25seSBhIHN1YnNldCBvZiB0aGUgQVBJLgogKgogKiAgICAgTGlzdDxpbnQ+IGZpeGVkTGVuZ3RoTGlzdCA9IG5ldyBMaXN0KDUpOwogKiAgICAgZml4ZWRMZW5ndGhMaXN0Lmxlbmd0aCA9IDA7ICAvLyBFcnJvcgogKiAgICAgZml4ZWRMZW5ndGhMaXN0LmFkZCg0OTkpOyAgICAvLyBFcnJvcgogKiAgICAgZml4ZWRMZW5ndGhMaXN0WzBdID0gODc7CiAqICAgICBMaXN0PGludD4gZ3Jvd2FibGVMaXN0ID0gWzEsIDJdOwogKiAgICAgZ3Jvd2FibGVMaXN0Lmxlbmd0aCA9IDA7CiAqICAgICBncm93YWJsZUxpc3QuYWRkKDQ5OSk7CiAqICAgICBncm93YWJsZUxpc3RbMF0gPSA4NzsKICoKICogTGlzdHMgYXJlIFtJdGVyYWJsZV0uIEl0ZXJhdGlvbiBvY2N1cnMgb3ZlciB2YWx1ZXMgaW4gaW5kZXggb3JkZXIuIENoYW5naW5nCiAqIHRoZSB2YWx1ZXMgZG9lcyBub3QgYWZmZWN0IGl0ZXJhdGlvbiwgYnV0IGNoYW5naW5nIHRoZSB2YWxpZAogKiBpbmRpY2VzJm1kYXNoO3RoYXQgaXMsIGNoYW5naW5nIHRoZSBsaXN0J3MgbGVuZ3RoJm1kYXNoO2JldHdlZW4gaXRlcmF0aW9uCiAqIHN0ZXBzIGNhdXNlcyBhIFtDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3JdLiBUaGlzIG1lYW5zIHRoYXQgb25seSBncm93YWJsZQogKiBsaXN0cyBjYW4gdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yLiBJZiB0aGUgbGVuZ3RoIGNoYW5nZXMKICogdGVtcG9yYXJpbHkgYW5kIGlzIHJlc3RvcmVkIGJlZm9yZSBjb250aW51aW5nIHRoZSBpdGVyYXRpb24sIHRoZSBpdGVyYXRvcgogKiBkb2VzIG5vdCBkZXRlY3QgaXQuCiAqCiAqIEl0IGlzIGdlbmVyYWxseSBub3QgYWxsb3dlZCB0byBtb2RpZnkgdGhlIGxpc3QncyBsZW5ndGggKGFkZGluZyBvciByZW1vdmluZwogKiBlbGVtZW50cykgd2hpbGUgYW4gb3BlcmF0aW9uIG9uIHRoZSBsaXN0IGlzIGJlaW5nIHBlcmZvcm1lZCwKICogZm9yIGV4YW1wbGUgZHVyaW5nIGEgY2FsbCB0byBbZm9yRWFjaF0gb3IgW3NvcnRdLgogKiBDaGFuZ2luZyB0aGUgbGlzdCdzIGxlbmd0aCB3aGlsZSBpdCBpcyBiZWluZyBpdGVyYXRlZCwgZWl0aGVyIGJ5IGl0ZXJhdGluZyBpdAogKiBkaXJlY3RseSBvciB0aHJvdWdoIGl0ZXJhdGluZyBhbiBbSXRlcmFibGVdIHRoYXQgaXMgYmFja2VkIGJ5IHRoZSBsaXN0LCB3aWxsCiAqIGJyZWFrIHRoZSBpdGVyYXRpb24uCiAqLwphYnN0cmFjdCBjbGFzcyBMaXN0PEU+IGltcGxlbWVudHMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4gewogIC8qKgogICAqIENyZWF0ZXMgYSBsaXN0IG9mIHRoZSBnaXZlbiBsZW5ndGguCiAgICoKICAgKiBUaGUgY3JlYXRlZCBsaXN0IGlzIGZpeGVkLWxlbmd0aCBpZiBbbGVuZ3RoXSBpcyBwcm92aWRlZC4KICAgKgogICAqICAgICBMaXN0IGZpeGVkTGVuZ3RoTGlzdCA9IG5ldyBMaXN0KDMpOwogICAqICAgICBmaXhlZExlbmd0aExpc3QubGVuZ3RoOyAgICAgLy8gMwogICAqICAgICBmaXhlZExlbmd0aExpc3QubGVuZ3RoID0gMTsgLy8gRXJyb3IKICAgKgogICAqIFRoZSBsaXN0IGhhcyBsZW5ndGggMCBhbmQgaXMgZ3Jvd2FibGUgaWYgW2xlbmd0aF0gaXMgb21pdHRlZC4KICAgKgogICAqICAgICBMaXN0IGdyb3dhYmxlTGlzdCA9IG5ldyBMaXN0KCk7CiAgICogICAgIGdyb3dhYmxlTGlzdC5sZW5ndGg7IC8vIDA7CiAgICogICAgIGdyb3dhYmxlTGlzdC5sZW5ndGggPSAzOwogICAqCiAgICogVG8gY3JlYXRlIGEgZ3Jvd2FibGUgbGlzdCB3aXRoIGEgZ2l2ZW4gbGVuZ3RoLCBqdXN0IGFzc2lnbiB0aGUgbGVuZ3RoCiAgICogcmlnaHQgYWZ0ZXIgY3JlYXRpb246CiAgICoKICAgKiAgICAgTGlzdCBncm93YWJsZUxpc3QgPSBuZXcgTGlzdCgpLi5sZW5ndGggPSA1MDA7CiAgICoKICAgKiBUaGUgW2xlbmd0aF0gbXVzdCBub3QgYmUgbmVnYXRpdmUgb3IgbnVsbCwgaWYgaXQgaXMgcHJvdmlkZWQuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBMaXN0KFtpbnQgbGVuZ3RoXSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBsaXN0IG9mIHRoZSBnaXZlbiBsZW5ndGggd2l0aCBbZmlsbF0gYXQgZWFjaCBwb3NpdGlvbi4KICAgKgogICAqIFRoZSBbbGVuZ3RoXSBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuCiAgICoKICAgKiBFeGFtcGxlOgogICAqIGBgYGRhcnQKICAgKiBuZXcgTGlzdDxpbnQ+LmZpbGxlZCgzLCAwLCBncm93YWJsZTogdHJ1ZSk7IC8vIFswLCAwLCAwXQogICAqIGBgYAogICAqCiAgICogVGhlIGNyZWF0ZWQgbGlzdCBpcyBmaXhlZC1sZW5ndGggaWYgW2dyb3dhYmxlXSBpcyBmYWxzZSAodGhlIGRlZmF1bHQpCiAgICogYW5kIGdyb3dhYmxlIGlmIFtncm93YWJsZV0gaXMgdHJ1ZS4KICAgKiBJZiB0aGUgbGlzdCBpcyBncm93YWJsZSwgY2hhbmdpbmcgaXRzIGxlbmd0aCB3aWxsIG5vdCBpbml0aWFsaXplIG5ldwogICAqIGVudHJpZXMgd2l0aCBbZmlsbF0uCiAgICogQWZ0ZXIgYmVpbmcgY3JlYXRlZCBhbmQgZmlsbGVkLCB0aGUgbGlzdCBpcyBubyBkaWZmZXJlbnQgZnJvbSBhbnkgb3RoZXIKICAgKiBncm93YWJsZSBvciBmaXhlZC1sZW5ndGggbGlzdCBjcmVhdGVkIHVzaW5nIFtMaXN0XS4KICAgKgogICAqIEFsbCBlbGVtZW50cyBvZiB0aGUgcmV0dXJuZWQgbGlzdCBzaGFyZSB0aGUgc2FtZSBbZmlsbF0gdmFsdWUuCiAgICogYGBgCiAgICogdmFyIHNoYXJlZCA9IG5ldyBMaXN0LmZpbGxlZCgzLCBbXSk7CiAgICogc2hhcmVkWzBdLmFkZCg0OTkpOwogICAqIHByaW50KHNoYXJlZCk7ICAvLyA9PiBbWzQ5OV0sIFs0OTldLCBbNDk5XV0KICAgKiBgYGAKICAgKgogICAqIFlvdSBjYW4gdXNlIFtMaXN0LmdlbmVyYXRlXSB0byBjcmVhdGUgYSBsaXN0IHdpdGggYSBuZXcgb2JqZWN0IGF0CiAgICogZWFjaCBwb3NpdGlvbi4KICAgKiBgYGAKICAgKiB2YXIgdW5pcXVlID0gbmV3IExpc3QuZ2VuZXJhdGUoMywgKF8pID0+IFtdKTsKICAgKiB1bmlxdWVbMF0uYWRkKDQ5OSk7CiAgICogcHJpbnQodW5pcXVlKTsgLy8gPT4gW1s0OTldLCBbXSwgW11dCiAgICogYGBgCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBMaXN0LmZpbGxlZChpbnQgbGVuZ3RoLCBFIGZpbGwsIHtib29sIGdyb3dhYmxlID0gZmFsc2V9KTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIGxpc3QgY29udGFpbmluZyBhbGwgW2VsZW1lbnRzXS4KICAgKgogICAqIFRoZSBbSXRlcmF0b3JdIG9mIFtlbGVtZW50c10gcHJvdmlkZXMgdGhlIG9yZGVyIG9mIHRoZSBlbGVtZW50cy4KICAgKgogICAqIEFsbCB0aGUgW2VsZW1lbnRzXSBzaG91bGQgYmUgaW5zdGFuY2VzIG9mIFtFXS4KICAgKiBUaGUgYGVsZW1lbnRzYCBpdGVyYWJsZSBpdHNlbGYgbWF5IGhhdmUgYW55IGVsZW1lbnQgdHlwZSwgc28gdGhpcwogICAqIGNvbnN0cnVjdG9yIGNhbiBiZSB1c2VkIHRvIGRvd24tY2FzdCBhIGBMaXN0YCwgZm9yIGV4YW1wbGUgYXM6CiAgICogYGBgZGFydAogICAqIExpc3Q8U3VwZXJUeXBlPiBzdXBlckxpc3QgPSAuLi47CiAgICogTGlzdDxTdWJUeXBlPiBzdWJMaXN0ID0KICAgKiAgICAgbmV3IExpc3Q8U3ViVHlwZT4uZnJvbShzdXBlckxpc3Qud2hlcmVUeXBlPFN1YlR5cGU+KCkpOwogICAqIGBgYAogICAqCiAgICogVGhpcyBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgZ3Jvd2FibGUgbGlzdCB3aGVuIFtncm93YWJsZV0gaXMgdHJ1ZTsKICAgKiBvdGhlcndpc2UsIGl0IHJldHVybnMgYSBmaXhlZC1sZW5ndGggbGlzdC4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IExpc3QuZnJvbShJdGVyYWJsZSBlbGVtZW50cywge2Jvb2wgZ3Jvd2FibGUgPSB0cnVlfSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBsaXN0IGZyb20gW2VsZW1lbnRzXS4KICAgKgogICAqIFRoZSBbSXRlcmF0b3JdIG9mIFtlbGVtZW50c10gcHJvdmlkZXMgdGhlIG9yZGVyIG9mIHRoZSBlbGVtZW50cy4KICAgKgogICAqIFRoaXMgY29uc3RydWN0b3IgY3JlYXRlcyBhIGdyb3dhYmxlIGxpc3Qgd2hlbiBbZ3Jvd2FibGVdIGlzIHRydWU7CiAgICogb3RoZXJ3aXNlLCBpdCByZXR1cm5zIGEgZml4ZWQtbGVuZ3RoIGxpc3QuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBMaXN0Lm9mKEl0ZXJhYmxlPEU+IGVsZW1lbnRzLCB7Ym9vbCBncm93YWJsZSA9IHRydWV9KTsKCiAgLyoqCiAgICogR2VuZXJhdGVzIGEgbGlzdCBvZiB2YWx1ZXMuCiAgICoKICAgKiBDcmVhdGVzIGEgbGlzdCB3aXRoIFtsZW5ndGhdIHBvc2l0aW9ucyBhbmQgZmlsbHMgaXQgd2l0aCB2YWx1ZXMgY3JlYXRlZCBieQogICAqIGNhbGxpbmcgW2dlbmVyYXRvcl0gZm9yIGVhY2ggaW5kZXggaW4gdGhlIHJhbmdlIGAwYCAuLiBgbGVuZ3RoIC0gMWAKICAgKiBpbiBpbmNyZWFzaW5nIG9yZGVyLgogICAqCiAgICogICAgIG5ldyBMaXN0PGludD4uZ2VuZXJhdGUoMywgKGludCBpbmRleCkgPT4gaW5kZXggKiBpbmRleCk7IC8vIFswLCAxLCA0XQogICAqCiAgICogVGhlIGNyZWF0ZWQgbGlzdCBpcyBmaXhlZC1sZW5ndGggdW5sZXNzIFtncm93YWJsZV0gaXMgdHJ1ZS4KICAgKi8KICBmYWN0b3J5IExpc3QuZ2VuZXJhdGUoaW50IGxlbmd0aCwgRSBnZW5lcmF0b3IoaW50IGluZGV4KSwKICAgICAge2Jvb2wgZ3Jvd2FibGUgPSB0cnVlfSkgewogICAgTGlzdDxFPiByZXN1bHQ7CiAgICBpZiAoZ3Jvd2FibGUpIHsKICAgICAgcmVzdWx0ID0gPEU+W10uLmxlbmd0aCA9IGxlbmd0aDsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdCA9IExpc3Q8RT4obGVuZ3RoKTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0W2ldID0gZ2VuZXJhdG9yKGkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYW4gdW5tb2RpZmlhYmxlIGxpc3QgY29udGFpbmluZyBhbGwgW2VsZW1lbnRzXS4KICAgKgogICAqIFRoZSBbSXRlcmF0b3JdIG9mIFtlbGVtZW50c10gcHJvdmlkZXMgdGhlIG9yZGVyIG9mIHRoZSBlbGVtZW50cy4KICAgKgogICAqIEFuIHVubW9kaWZpYWJsZSBsaXN0IGNhbm5vdCBoYXZlIGl0cyBsZW5ndGggb3IgZWxlbWVudHMgY2hhbmdlZC4KICAgKiBJZiB0aGUgZWxlbWVudHMgYXJlIHRoZW1zZWx2ZXMgaW1tdXRhYmxlLCB0aGVuIHRoZSByZXN1bHRpbmcgbGlzdAogICAqIGlzIGFsc28gaW1tdXRhYmxlLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgTGlzdC51bm1vZGlmaWFibGUoSXRlcmFibGUgZWxlbWVudHMpOwoKICAvKioKICAgKiBBZGFwdHMgW3NvdXJjZV0gdG8gYmUgYSBgTGlzdDxUPmAuCiAgICoKICAgKiBBbnkgdGltZSB0aGUgbGlzdCB3b3VsZCBwcm9kdWNlIGFuIGVsZW1lbnQgdGhhdCBpcyBub3QgYSBbVF0sCiAgICogdGhlIGVsZW1lbnQgYWNjZXNzIHdpbGwgdGhyb3cuCiAgICoKICAgKiBBbnkgdGltZSBhIFtUXSB2YWx1ZSBpcyBhdHRlbXB0ZWQgc3RvcmVkIGludG8gdGhlIGFkYXB0ZWQgbGlzdCwKICAgKiB0aGUgc3RvcmUgd2lsbCB0aHJvdyB1bmxlc3MgdGhlIHZhbHVlIGlzIGFsc28gYW4gaW5zdGFuY2Ugb2YgW1NdLgogICAqCiAgICogSWYgYWxsIGFjY2Vzc2VkIGVsZW1lbnRzIG9mIFtzb3VyY2VdIGFyZSBhY3R1YWxseSBpbnN0YW5jZXMgb2YgW1RdLAogICAqIGFuZCBpZiBhbGwgZWxlbWVudHMgc3RvcmVkIGludG8gdGhlIHJldHVybmVkIGxpc3QgYXJlIGFjdHVhbGx5IGluc3RhbmNlCiAgICogb2YgW1NdLAogICAqIHRoZW4gdGhlIHJldHVybmVkIGxpc3QgY2FuIGJlIHVzZWQgYXMgYSBgTGlzdDxUPmAuCiAgICovCiAgc3RhdGljIExpc3Q8VD4gY2FzdEZyb208UywgVD4oTGlzdDxTPiBzb3VyY2UpID0+IENhc3RMaXN0PFMsIFQ+KHNvdXJjZSk7CgogIC8qKgogICAqIENvcHkgYSByYW5nZSBvZiBvbmUgbGlzdCBpbnRvIGFub3RoZXIgbGlzdC4KICAgKgogICAqIFRoaXMgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IG1ldGhvZHMgbGlrZQogICAqIFtzZXRSYW5nZV0uCiAgICoKICAgKiBUaGUgcmFuZ2UgZnJvbSBbc3RhcnRdIHRvIFtlbmRdIG11c3QgYmUgYSB2YWxpZCByYW5nZSBvZiBbc291cmNlXSwKICAgKiBhbmQgdGhlcmUgbXVzdCBiZSByb29tIGZvciBgZW5kIC0gc3RhcnRgIGVsZW1lbnRzIGZyb20gcG9zaXRpb24gW2F0XS4KICAgKiBJZiBbc3RhcnRdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHplcm8uCiAgICogSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gW3NvdXJjZS5sZW5ndGhdLgogICAqCiAgICogSWYgW3NvdXJjZV0gYW5kIFt0YXJnZXRdIGlzIHRoZSBzYW1lIGxpc3QsIG92ZXJsYXBwaW5nIHNvdXJjZSBhbmQgdGFyZ2V0CiAgICogcmFuZ2VzIGFyZSByZXNwZWN0ZWQgc28gdGhhdCB0aGUgdGFyZ2V0IHJhbmdlIGVuZHMgdXAgY29udGFpbmluZyB0aGUKICAgKiBpbml0aWFsIGNvbnRlbnQgb2YgdGhlIHNvdXJjZSByYW5nZS4KICAgKiBPdGhlcndpc2UgdGhlIG9yZGVyIG9mIGVsZW1lbnQgY29weWluZyBpcyBub3QgZ3VhcmFudGVlZC4KICAgKi8KICBzdGF0aWMgdm9pZCBjb3B5UmFuZ2U8VD4oTGlzdDxUPiB0YXJnZXQsIGludCBhdCwgTGlzdDxUPiBzb3VyY2UsCiAgICAgIFtpbnQgc3RhcnQsIGludCBlbmRdKSB7CiAgICBzdGFydCA/Pz0gMDsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHNvdXJjZS5sZW5ndGgpOwogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKHRhcmdldC5sZW5ndGggPCBhdCArIGxlbmd0aCkgewogICAgICB0aHJvdyBBcmd1bWVudEVycm9yLnZhbHVlKHRhcmdldCwgInRhcmdldCIsCiAgICAgICAgICAiTm90IGJpZyBlbm91Z2ggdG8gaG9sZCAkbGVuZ3RoIGVsZW1lbnRzIGF0IHBvc2l0aW9uICRhdCIpOwogICAgfQogICAgaWYgKCFpZGVudGljYWwoc291cmNlLCB0YXJnZXQpIHx8IHN0YXJ0ID49IGF0KSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICB0YXJnZXRbYXQgKyBpXSA9IHNvdXJjZVtzdGFydCArIGldOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCBpID0gbGVuZ3RoOyAtLWkgPj0gMDspIHsKICAgICAgICB0YXJnZXRbYXQgKyBpXSA9IHNvdXJjZVtzdGFydCArIGldOwogICAgICB9CiAgICB9CiAgfQoKICAvKioKICAgKiBXcml0ZSB0aGUgZWxlbWVudHMgb2YgYW4gaXRlcmFibGUgaW50byBhIGxpc3QuCiAgICoKICAgKiBUaGlzIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBtZXRob2RzIGxpa2UKICAgKiBbc2V0QWxsXS4KICAgKgogICAqIFRoZSBlbGVtZW50cyBvZiBbc291cmNlXSBhcmUgd3JpdHRlbiBpbnRvIFt0YXJnZXRdIGZyb20gcG9zaXRpb24gW2F0XS4KICAgKiBUaGUgW3NvdXJjZV0gbXVzdCBub3QgY29udGFpbiBtb3JlIGVsZW1lbnRzIGFmdGVyIHdyaXRpbmcgdGhlIGxhc3QKICAgKiBwb3NpdGlvbiBvZiBbdGFyZ2V0XS4KICAgKgogICAqIElmIHRoZSBzb3VyY2UgaXMgYSBsaXN0LCB0aGUgW2NvcHlSYW5nZV0gZnVuY3Rpb24gaXMgbGlrZWx5IHRvIGJlIG1vcmUKICAgKiBlZmZpY2llbnQuCiAgICovCiAgc3RhdGljIHZvaWQgd3JpdGVJdGVyYWJsZTxUPihMaXN0PFQ+IHRhcmdldCwgaW50IGF0LCBJdGVyYWJsZTxUPiBzb3VyY2UpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWx1ZUluSW50ZXJ2YWwoYXQsIDAsIHRhcmdldC5sZW5ndGgsICJhdCIpOwogICAgaW50IGluZGV4ID0gYXQ7CiAgICBpbnQgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0Lmxlbmd0aDsKICAgIGZvciAodmFyIGVsZW1lbnQgaW4gc291cmNlKSB7CiAgICAgIGlmIChpbmRleCA9PSB0YXJnZXRMZW5ndGgpIHsKICAgICAgICB0aHJvdyBJbmRleEVycm9yKHRhcmdldExlbmd0aCwgdGFyZ2V0KTsKICAgICAgfQogICAgICB0YXJnZXRbaW5kZXhdID0gZWxlbWVudDsKICAgICAgaW5kZXgrKzsKICAgIH0KICB9CgogIC8qKgogICAqIFJldHVybnMgYSB2aWV3IG9mIHRoaXMgbGlzdCBhcyBhIGxpc3Qgb2YgW1JdIGluc3RhbmNlcy4KICAgKgogICAqIElmIHRoaXMgbGlzdCBjb250YWlucyBvbmx5IGluc3RhbmNlcyBvZiBbUl0sIGFsbCByZWFkIG9wZXJhdGlvbnMKICAgKiB3aWxsIHdvcmsgY29ycmVjdGx5LiBJZiBhbnkgb3BlcmF0aW9uIHRyaWVzIHRvIGFjY2VzcyBhbiBlbGVtZW50CiAgICogdGhhdCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgW1JdLCB0aGUgYWNjZXNzIHdpbGwgdGhyb3cgaW5zdGVhZC4KICAgKgogICAqIEVsZW1lbnRzIGFkZGVkIHRvIHRoZSBsaXN0IChlLmcuLCBieSB1c2luZyBbYWRkXSBvciBbYWRkQWxsXSkKICAgKiBtdXN0IGJlIGluc3RhbmNlIG9mIFtSXSB0byBiZSB2YWxpZCBhcmd1bWVudHMgdG8gdGhlIGFkZGluZyBmdW5jdGlvbiwKICAgKiBhbmQgdGhleSBtdXN0IGJlIGluc3RhbmNlcyBvZiBbRV0gYXMgd2VsbCB0byBiZSBhY2NlcHRlZCBieQogICAqIHRoaXMgbGlzdCBhcyB3ZWxsLgogICAqCiAgICogVHlwaWNhbGx5IGltcGxlbWVudGVkIGFzIGBMaXN0LmNhc3RGcm9tPEUsIFI+KHRoaXMpYC4KICAgKi8KICBMaXN0PFI+IGNhc3Q8Uj4oKTsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBvYmplY3QgYXQgdGhlIGdpdmVuIFtpbmRleF0gaW4gdGhlIGxpc3QKICAgKiBvciB0aHJvd3MgYSBbUmFuZ2VFcnJvcl0gaWYgW2luZGV4XSBpcyBvdXQgb2YgYm91bmRzLgogICAqLwogIEUgb3BlcmF0b3IgW10oaW50IGluZGV4KTsKCiAgLyoqCiAgICogU2V0cyB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIFtpbmRleF0gaW4gdGhlIGxpc3QgdG8gW3ZhbHVlXQogICAqIG9yIHRocm93cyBhIFtSYW5nZUVycm9yXSBpZiBbaW5kZXhdIGlzIG91dCBvZiBib3VuZHMuCiAgICovCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBFIHZhbHVlKTsKCiAgLyoqCiAgICogVXBkYXRlcyB0aGUgZmlyc3QgcG9zaXRpb24gb2YgdGhlIGxpc3QgdG8gY29udGFpbiBbdmFsdWVdLgogICAqCiAgICogRXF1aXZhbGVudCB0byBgdGhlTGlzdFswXSA9IHZhbHVlO2AuCiAgICoKICAgKiBUaGUgbGlzdCBtdXN0IGJlIG5vbi1lbXB0eS4KICAgKi8KICB2b2lkIHNldCBmaXJzdChFIHZhbHVlKTsKCiAgLyoqCiAgICogVXBkYXRlcyB0aGUgbGFzdCBwb3NpdGlvbiBvZiB0aGUgbGlzdCB0byBjb250YWluIFt2YWx1ZV0uCiAgICoKICAgKiBFcXVpdmFsZW50IHRvIGB0aGVMaXN0W3RoZUxpc3QubGVuZ3RoIC0gMV0gPSB2YWx1ZTtgLgogICAqCiAgICogVGhlIGxpc3QgbXVzdCBiZSBub24tZW1wdHkuCiAgICovCiAgdm9pZCBzZXQgbGFzdChFIHZhbHVlKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhpcyBsaXN0LgogICAqCiAgICogVGhlIHZhbGlkIGluZGljZXMgZm9yIGEgbGlzdCBhcmUgYDBgIHRocm91Z2ggYGxlbmd0aCAtIDFgLgogICAqLwogIGludCBnZXQgbGVuZ3RoOwoKICAvKioKICAgKiBDaGFuZ2VzIHRoZSBsZW5ndGggb2YgdGhpcyBsaXN0LgogICAqCiAgICogSWYgW25ld0xlbmd0aF0gaXMgZ3JlYXRlciB0aGFuCiAgICogdGhlIGN1cnJlbnQgbGVuZ3RoLCBlbnRyaWVzIGFyZSBpbml0aWFsaXplZCB0byBbOm51bGw6XS4KICAgKgogICAqIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0gaWYgdGhlIGxpc3QgaXMgZml4ZWQtbGVuZ3RoLgogICAqLwogIHNldCBsZW5ndGgoaW50IG5ld0xlbmd0aCk7CgogIC8qKgogICAqIEFkZHMgW3ZhbHVlXSB0byB0aGUgZW5kIG9mIHRoaXMgbGlzdCwKICAgKiBleHRlbmRpbmcgdGhlIGxlbmd0aCBieSBvbmUuCiAgICoKICAgKiBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdIGlmIHRoZSBsaXN0IGlzIGZpeGVkLWxlbmd0aC4KICAgKi8KICB2b2lkIGFkZChFIHZhbHVlKTsKCiAgLyoqCiAgICogQXBwZW5kcyBhbGwgb2JqZWN0cyBvZiBbaXRlcmFibGVdIHRvIHRoZSBlbmQgb2YgdGhpcyBsaXN0LgogICAqCiAgICogRXh0ZW5kcyB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGJ5IHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiBbaXRlcmFibGVdLgogICAqIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0gaWYgdGhpcyBsaXN0IGlzIGZpeGVkLWxlbmd0aC4KICAgKi8KICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBpdGVyYWJsZSk7CgogIC8qKgogICAqIFJldHVybnMgYW4gW0l0ZXJhYmxlXSBvZiB0aGUgb2JqZWN0cyBpbiB0aGlzIGxpc3QgaW4gcmV2ZXJzZSBvcmRlci4KICAgKi8KICBJdGVyYWJsZTxFPiBnZXQgcmV2ZXJzZWQ7CgogIC8qKgogICAqIFNvcnRzIHRoaXMgbGlzdCBhY2NvcmRpbmcgdG8gdGhlIG9yZGVyIHNwZWNpZmllZCBieSB0aGUgW2NvbXBhcmVdIGZ1bmN0aW9uLgogICAqCiAgICogVGhlIFtjb21wYXJlXSBmdW5jdGlvbiBtdXN0IGFjdCBhcyBhIFtDb21wYXJhdG9yXS4KICAgKgogICAqICAgICBMaXN0PFN0cmluZz4gbnVtYmVycyA9IFsndHdvJywgJ3RocmVlJywgJ2ZvdXInXTsKICAgKiAgICAgLy8gU29ydCBmcm9tIHNob3J0ZXN0IHRvIGxvbmdlc3QuCiAgICogICAgIG51bWJlcnMuc29ydCgoYSwgYikgPT4gYS5sZW5ndGguY29tcGFyZVRvKGIubGVuZ3RoKSk7CiAgICogICAgIHByaW50KG51bWJlcnMpOyAgLy8gW3R3bywgZm91ciwgdGhyZWVdCiAgICoKICAgKiBUaGUgZGVmYXVsdCBMaXN0IGltcGxlbWVudGF0aW9ucyB1c2UgW0NvbXBhcmFibGUuY29tcGFyZV0gaWYKICAgKiBbY29tcGFyZV0gaXMgb21pdHRlZC4KICAgKgogICAqICAgICBMaXN0PGludD4gbnVtcyA9IFsxMywgMiwgLTExXTsKICAgKiAgICAgbnVtcy5zb3J0KCk7CiAgICogICAgIHByaW50KG51bXMpOyAgLy8gWy0xMSwgMiwgMTNdCiAgICoKICAgKiBBIFtDb21wYXJhdG9yXSBtYXkgY29tcGFyZSBvYmplY3RzIGFzIGVxdWFsIChyZXR1cm4gemVybyksIGV2ZW4gaWYgdGhleQogICAqIGFyZSBkaXN0aW5jdCBvYmplY3RzLgogICAqIFRoZSBzb3J0IGZ1bmN0aW9uIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHN0YWJsZSwgc28gZGlzdGluY3Qgb2JqZWN0cwogICAqIHRoYXQgY29tcGFyZSBhcyBlcXVhbCBtYXkgb2NjdXIgaW4gYW55IG9yZGVyIGluIHRoZSByZXN1bHQ6CiAgICoKICAgKiAgICAgTGlzdDxTdHJpbmc+IG51bWJlcnMgPSBbJ29uZScsICd0d28nLCAndGhyZWUnLCAnZm91ciddOwogICAqICAgICBudW1iZXJzLnNvcnQoKGEsIGIpID0+IGEubGVuZ3RoLmNvbXBhcmVUbyhiLmxlbmd0aCkpOwogICAqICAgICBwcmludChudW1iZXJzKTsgIC8vIFtvbmUsIHR3bywgZm91ciwgdGhyZWVdIE9SIFt0d28sIG9uZSwgZm91ciwgdGhyZWVdCiAgICovCiAgdm9pZCBzb3J0KFtpbnQgY29tcGFyZShFIGEsIEUgYildKTsKCiAgLyoqCiAgICogU2h1ZmZsZXMgdGhlIGVsZW1lbnRzIG9mIHRoaXMgbGlzdCByYW5kb21seS4KICAgKi8KICB2b2lkIHNodWZmbGUoW1JhbmRvbSByYW5kb21dKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZmlyc3QgaW5kZXggb2YgW2VsZW1lbnRdIGluIHRoaXMgbGlzdC4KICAgKgogICAqIFNlYXJjaGVzIHRoZSBsaXN0IGZyb20gaW5kZXggW3N0YXJ0XSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LgogICAqIFRoZSBmaXJzdCB0aW1lIGFuIG9iamVjdCBbOm86XSBpcyBlbmNvdW50ZXJlZCBzbyB0aGF0IFs6byA9PSBlbGVtZW50Ol0sCiAgICogdGhlIGluZGV4IG9mIFs6bzpdIGlzIHJldHVybmVkLgogICAqCiAgICogICAgIExpc3Q8U3RyaW5nPiBub3RlcyA9IFsnZG8nLCAncmUnLCAnbWknLCAncmUnXTsKICAgKiAgICAgbm90ZXMuaW5kZXhPZigncmUnKTsgICAgLy8gMQogICAqICAgICBub3Rlcy5pbmRleE9mKCdyZScsIDIpOyAvLyAzCiAgICoKICAgKiBSZXR1cm5zIC0xIGlmIFtlbGVtZW50XSBpcyBub3QgZm91bmQuCiAgICoKICAgKiAgICAgbm90ZXMuaW5kZXhPZignZmEnKTsgICAgLy8gLTEKICAgKi8KICBpbnQgaW5kZXhPZihFIGVsZW1lbnQsIFtpbnQgc3RhcnQgPSAwXSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGZpcnN0IGluZGV4IGluIHRoZSBsaXN0IHRoYXQgc2F0aXNmaWVzIHRoZSBwcm92aWRlZCBbdGVzdF0uCiAgICoKICAgKiBTZWFyY2hlcyB0aGUgbGlzdCBmcm9tIGluZGV4IFtzdGFydF0gdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4KICAgKiBUaGUgZmlyc3QgdGltZSBhbiBvYmplY3QgYG9gIGlzIGVuY291bnRlcmVkIHNvIHRoYXQgYHRlc3QobylgIGlzIHRydWUsCiAgICogdGhlIGluZGV4IG9mIGBvYCBpcyByZXR1cm5lZC4KICAgKgogICAqIGBgYAogICAqIExpc3Q8U3RyaW5nPiBub3RlcyA9IFsnZG8nLCAncmUnLCAnbWknLCAncmUnXTsKICAgKiBub3Rlcy5pbmRleFdoZXJlKChub3RlKSA9PiBub3RlLnN0YXJ0c1dpdGgoJ3InKSk7ICAgICAgIC8vIDEKICAgKiBub3Rlcy5pbmRleFdoZXJlKChub3RlKSA9PiBub3RlLnN0YXJ0c1dpdGgoJ3InKSwgMik7ICAgIC8vIDMKICAgKiBgYGAKICAgKgogICAqIFJldHVybnMgLTEgaWYgW2VsZW1lbnRdIGlzIG5vdCBmb3VuZC4KICAgKiBgYGAKICAgKiBub3Rlcy5pbmRleFdoZXJlKChub3RlKSA9PiBub3RlLnN0YXJ0c1dpdGgoJ2snKSk7ICAgIC8vIC0xCiAgICogYGBgCiAgICovCiAgaW50IGluZGV4V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIFtpbnQgc3RhcnQgPSAwXSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGxhc3QgaW5kZXggaW4gdGhlIGxpc3QgdGhhdCBzYXRpc2ZpZXMgdGhlIHByb3ZpZGVkIFt0ZXN0XS4KICAgKgogICAqIFNlYXJjaGVzIHRoZSBsaXN0IGZyb20gaW5kZXggW3N0YXJ0XSB0byAwLgogICAqIFRoZSBmaXJzdCB0aW1lIGFuIG9iamVjdCBgb2AgaXMgZW5jb3VudGVyZWQgc28gdGhhdCBgdGVzdChvKWAgaXMgdHJ1ZSwKICAgKiB0aGUgaW5kZXggb2YgYG9gIGlzIHJldHVybmVkLgogICAqCiAgICogYGBgCiAgICogTGlzdDxTdHJpbmc+IG5vdGVzID0gWydkbycsICdyZScsICdtaScsICdyZSddOwogICAqIG5vdGVzLmxhc3RJbmRleFdoZXJlKChub3RlKSA9PiBub3RlLnN0YXJ0c1dpdGgoJ3InKSk7ICAgICAgIC8vIDMKICAgKiBub3Rlcy5sYXN0SW5kZXhXaGVyZSgobm90ZSkgPT4gbm90ZS5zdGFydHNXaXRoKCdyJyksIDIpOyAgICAvLyAxCiAgICogYGBgCiAgICoKICAgKiBSZXR1cm5zIC0xIGlmIFtlbGVtZW50XSBpcyBub3QgZm91bmQuCiAgICogYGBgCiAgICogbm90ZXMubGFzdEluZGV4V2hlcmUoKG5vdGUpID0+IG5vdGUuc3RhcnRzV2l0aCgnaycpKTsgICAgLy8gLTEKICAgKiBgYGAKICAgKi8KICBpbnQgbGFzdEluZGV4V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIFtpbnQgc3RhcnRdKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGFzdCBpbmRleCBvZiBbZWxlbWVudF0gaW4gdGhpcyBsaXN0LgogICAqCiAgICogU2VhcmNoZXMgdGhlIGxpc3QgYmFja3dhcmRzIGZyb20gaW5kZXggW3N0YXJ0XSB0byAwLgogICAqCiAgICogVGhlIGZpcnN0IHRpbWUgYW4gb2JqZWN0IFs6bzpdIGlzIGVuY291bnRlcmVkIHNvIHRoYXQgWzpvID09IGVsZW1lbnQ6XSwKICAgKiB0aGUgaW5kZXggb2YgWzpvOl0gaXMgcmV0dXJuZWQuCiAgICoKICAgKiAgICAgTGlzdDxTdHJpbmc+IG5vdGVzID0gWydkbycsICdyZScsICdtaScsICdyZSddOwogICAqICAgICBub3Rlcy5sYXN0SW5kZXhPZigncmUnLCAyKTsgLy8gMQogICAqCiAgICogSWYgW3N0YXJ0XSBpcyBub3QgcHJvdmlkZWQsIHRoaXMgbWV0aG9kIHNlYXJjaGVzIGZyb20gdGhlIGVuZCBvZiB0aGUKICAgKiBsaXN0Li9SZXR1cm5zCiAgICoKICAgKiAgICAgbm90ZXMubGFzdEluZGV4T2YoJ3JlJyk7ICAvLyAzCiAgICoKICAgKiBSZXR1cm5zIC0xIGlmIFtlbGVtZW50XSBpcyBub3QgZm91bmQuCiAgICoKICAgKiAgICAgbm90ZXMubGFzdEluZGV4T2YoJ2ZhJyk7ICAvLyAtMQogICAqLwogIGludCBsYXN0SW5kZXhPZihFIGVsZW1lbnQsIFtpbnQgc3RhcnRdKTsKCiAgLyoqCiAgICogUmVtb3ZlcyBhbGwgb2JqZWN0cyBmcm9tIHRoaXMgbGlzdDsKICAgKiB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGJlY29tZXMgemVyby4KICAgKgogICAqIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0sIGFuZCByZXRhaW5zIGFsbCBvYmplY3RzLCBpZiB0aGlzCiAgICogaXMgYSBmaXhlZC1sZW5ndGggbGlzdC4KICAgKi8KICB2b2lkIGNsZWFyKCk7CgogIC8qKgogICAqIEluc2VydHMgdGhlIG9iamVjdCBhdCBwb3NpdGlvbiBbaW5kZXhdIGluIHRoaXMgbGlzdC4KICAgKgogICAqIFRoaXMgaW5jcmVhc2VzIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgYnkgb25lIGFuZCBzaGlmdHMgYWxsIG9iamVjdHMKICAgKiBhdCBvciBhZnRlciB0aGUgaW5kZXggdG93YXJkcyB0aGUgZW5kIG9mIHRoZSBsaXN0LgogICAqCiAgICogVGhlIGxpc3QgbXVzdCBiZSBncm93YWJsZS4KICAgKiBUaGUgW2luZGV4XSB2YWx1ZSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQgbm8gZ3JlYXRlciB0aGFuIFtsZW5ndGhdLgogICAqLwogIHZvaWQgaW5zZXJ0KGludCBpbmRleCwgRSBlbGVtZW50KTsKCiAgLyoqCiAgICogSW5zZXJ0cyBhbGwgb2JqZWN0cyBvZiBbaXRlcmFibGVdIGF0IHBvc2l0aW9uIFtpbmRleF0gaW4gdGhpcyBsaXN0LgogICAqCiAgICogVGhpcyBpbmNyZWFzZXMgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBieSB0aGUgbGVuZ3RoIG9mIFtpdGVyYWJsZV0gYW5kCiAgICogc2hpZnRzIGFsbCBsYXRlciBvYmplY3RzIHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgbGlzdC4KICAgKgogICAqIFRoZSBsaXN0IG11c3QgYmUgZ3Jvd2FibGUuCiAgICogVGhlIFtpbmRleF0gdmFsdWUgbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIG5vIGdyZWF0ZXIgdGhhbiBbbGVuZ3RoXS4KICAgKi8KICB2b2lkIGluc2VydEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKTsKCiAgLyoqCiAgICogT3ZlcndyaXRlcyBvYmplY3RzIG9mIGB0aGlzYCB3aXRoIHRoZSBvYmplY3RzIG9mIFtpdGVyYWJsZV0sIHN0YXJ0aW5nCiAgICogYXQgcG9zaXRpb24gW2luZGV4XSBpbiB0aGlzIGxpc3QuCiAgICoKICAgKiAgICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBbJ2EnLCAnYicsICdjJ107CiAgICogICAgIGxpc3Quc2V0QWxsKDEsIFsnYmVlJywgJ3NlYSddKTsKICAgKiAgICAgbGlzdC5qb2luKCcsICcpOyAvLyAnYSwgYmVlLCBzZWEnCiAgICoKICAgKiBUaGlzIG9wZXJhdGlvbiBkb2VzIG5vdCBpbmNyZWFzZSB0aGUgbGVuZ3RoIG9mIGB0aGlzYC4KICAgKgogICAqIFRoZSBbaW5kZXhdIG11c3QgYmUgbm9uLW5lZ2F0aXZlIGFuZCBubyBncmVhdGVyIHRoYW4gW2xlbmd0aF0uCiAgICoKICAgKiBUaGUgW2l0ZXJhYmxlXSBtdXN0IG5vdCBoYXZlIG1vcmUgZWxlbWVudHMgdGhhbiB3aGF0IGNhbiBmaXQgZnJvbSBbaW5kZXhdCiAgICogdG8gW2xlbmd0aF0uCiAgICoKICAgKiBJZiBgaXRlcmFibGVgIGlzIGJhc2VkIG9uIHRoaXMgbGlzdCwgaXRzIHZhbHVlcyBtYXkgY2hhbmdlIC9kdXJpbmcvIHRoZQogICAqIGBzZXRBbGxgIG9wZXJhdGlvbi4KICAgKi8KICB2b2lkIHNldEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKTsKCiAgLyoqCiAgICogUmVtb3ZlcyB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBbdmFsdWVdIGZyb20gdGhpcyBsaXN0LgogICAqCiAgICogUmV0dXJucyB0cnVlIGlmIFt2YWx1ZV0gd2FzIGluIHRoZSBsaXN0LCBmYWxzZSBvdGhlcndpc2UuCiAgICoKICAgKiAgICAgTGlzdDxTdHJpbmc+IHBhcnRzID0gWydoZWFkJywgJ3Nob3VsZGVycycsICdrbmVlcycsICd0b2VzJ107CiAgICogICAgIHBhcnRzLnJlbW92ZSgnaGVhZCcpOyAvLyB0cnVlCiAgICogICAgIHBhcnRzLmpvaW4oJywgJyk7ICAgICAvLyAnc2hvdWxkZXJzLCBrbmVlcywgdG9lcycKICAgKgogICAqIFRoZSBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZiBbdmFsdWVdIHdhcyBub3QgaW4gdGhlIGxpc3QuCiAgICoKICAgKiAgICAgLy8gTm90ZTogJ2hlYWQnIGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZC4KICAgKiAgICAgcGFydHMucmVtb3ZlKCdoZWFkJyk7IC8vIGZhbHNlCiAgICogICAgIHBhcnRzLmpvaW4oJywgJyk7ICAgICAvLyAnc2hvdWxkZXJzLCBrbmVlcywgdG9lcycKICAgKgogICAqIEFuIFtVbnN1cHBvcnRlZEVycm9yXSBvY2N1cnMgaWYgdGhlIGxpc3QgaXMgZml4ZWQtbGVuZ3RoLgogICAqLwogIGJvb2wgcmVtb3ZlKE9iamVjdCB2YWx1ZSk7CgogIC8qKgogICAqIFJlbW92ZXMgdGhlIG9iamVjdCBhdCBwb3NpdGlvbiBbaW5kZXhdIGZyb20gdGhpcyBsaXN0LgogICAqCiAgICogVGhpcyBtZXRob2QgcmVkdWNlcyB0aGUgbGVuZ3RoIG9mIGB0aGlzYCBieSBvbmUgYW5kIG1vdmVzIGFsbCBsYXRlciBvYmplY3RzCiAgICogZG93biBieSBvbmUgcG9zaXRpb24uCiAgICoKICAgKiBSZXR1cm5zIHRoZSByZW1vdmVkIG9iamVjdC4KICAgKgogICAqIFRoZSBbaW5kZXhdIG11c3QgYmUgaW4gdGhlIHJhbmdlIGAwIOKJpCBpbmRleCA8IGxlbmd0aGAuCiAgICoKICAgKiBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdIGlmIHRoaXMgaXMgYSBmaXhlZC1sZW5ndGggbGlzdC4gSW4gdGhhdCBjYXNlCiAgICogdGhlIGxpc3QgaXMgbm90IG1vZGlmaWVkLgogICAqLwogIEUgcmVtb3ZlQXQoaW50IGluZGV4KTsKCiAgLyoqCiAgICogUG9wcyBhbmQgcmV0dXJucyB0aGUgbGFzdCBvYmplY3QgaW4gdGhpcyBsaXN0LgogICAqCiAgICogVGhlIGxpc3QgbXVzdCBub3QgYmUgZW1wdHkuCiAgICoKICAgKiBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdIGlmIHRoaXMgaXMgYSBmaXhlZC1sZW5ndGggbGlzdC4KICAgKi8KICBFIHJlbW92ZUxhc3QoKTsKCiAgLyoqCiAgICogUmVtb3ZlcyBhbGwgb2JqZWN0cyBmcm9tIHRoaXMgbGlzdCB0aGF0IHNhdGlzZnkgW3Rlc3RdLgogICAqCiAgICogQW4gb2JqZWN0IFs6bzpdIHNhdGlzZmllcyBbdGVzdF0gaWYgWzp0ZXN0KG8pOl0gaXMgdHJ1ZS4KICAgKgogICAqICAgICBMaXN0PFN0cmluZz4gbnVtYmVycyA9IFsnb25lJywgJ3R3bycsICd0aHJlZScsICdmb3VyJ107CiAgICogICAgIG51bWJlcnMucmVtb3ZlV2hlcmUoKGl0ZW0pID0+IGl0ZW0ubGVuZ3RoID09IDMpOwogICAqICAgICBudW1iZXJzLmpvaW4oJywgJyk7IC8vICd0aHJlZSwgZm91cicKICAgKgogICAqIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0gaWYgdGhpcyBpcyBhIGZpeGVkLWxlbmd0aCBsaXN0LgogICAqLwogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpOwoKICAvKioKICAgKiBSZW1vdmVzIGFsbCBvYmplY3RzIGZyb20gdGhpcyBsaXN0IHRoYXQgZmFpbCB0byBzYXRpc2Z5IFt0ZXN0XS4KICAgKgogICAqIEFuIG9iamVjdCBbOm86XSBzYXRpc2ZpZXMgW3Rlc3RdIGlmIFs6dGVzdChvKTpdIGlzIHRydWUuCiAgICoKICAgKiAgICAgTGlzdDxTdHJpbmc+IG51bWJlcnMgPSBbJ29uZScsICd0d28nLCAndGhyZWUnLCAnZm91ciddOwogICAqICAgICBudW1iZXJzLnJldGFpbldoZXJlKChpdGVtKSA9PiBpdGVtLmxlbmd0aCA9PSAzKTsKICAgKiAgICAgbnVtYmVycy5qb2luKCcsICcpOyAvLyAnb25lLCB0d28nCiAgICoKICAgKiBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdIGlmIHRoaXMgaXMgYSBmaXhlZC1sZW5ndGggbGlzdC4KICAgKi8KICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGlzIGxpc3QgYW5kIFtvdGhlcl0uCiAgICoKICAgKiBSZXR1cm5zIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcyBsaXN0IGZvbGxvd2VkIGJ5CiAgICogdGhlIGVsZW1lbnRzIG9mIFtvdGhlcl0uCiAgICoKICAgKiBUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0byByZXR1cm4gYSBub3JtYWwgZ3Jvd2FibGUgbGlzdC4KICAgKiBTb21lIGxpc3QgdHlwZXMgbWF5IGNob29zZSB0byByZXR1cm4gYSBsaXN0IG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlbXNlbHZlcwogICAqIChzZWUgW1VpbnQ4TGlzdC4rXSk7CiAgICovCiAgTGlzdDxFPiBvcGVyYXRvciArKExpc3Q8RT4gb3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgZWxlbWVudHMgYmV0d2VlbiBbc3RhcnRdIGFuZCBbZW5kXS4KICAgKgogICAqIFRoZSBuZXcgbGlzdCBpcyBhIGBMaXN0PEU+YCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBvZiB0aGlzIGxpc3QgYXQKICAgKiBwb3NpdGlvbnMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFtzdGFydF0gYW5kIGxlc3MgdGhhbiBbZW5kXSBpbiB0aGUgc2FtZQogICAqIG9yZGVyIGFzIHRoZXkgb2NjdXIgaW4gdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHZhciBjb2xvcnMgPSBbInJlZCIsICJncmVlbiIsICJibHVlIiwgIm9yYW5nZSIsICJwaW5rIl07CiAgICogcHJpbnQoY29sb3JzLnN1Ymxpc3QoMSwgMykpOyAvLyBbZ3JlZW4sIGJsdWVdCiAgICogYGBgCiAgICoKICAgKiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgW2xlbmd0aF0gb2YgdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHByaW50KGNvbG9ycy5zdWJsaXN0KDEpKTsgLy8gW2dyZWVuLCBibHVlLCBvcmFuZ2UsIHBpbmtdCiAgICogYGBgCiAgICoKICAgKiBUaGUgYHN0YXJ0YCBhbmQgYGVuZGAgcG9zaXRpb25zIG11c3Qgc2F0aXNmeSB0aGUgcmVsYXRpb25zCiAgICogMCDiiaQgYHN0YXJ0YCDiiaQgYGVuZGAg4omkIGB0aGlzLmxlbmd0aGAKICAgKiBJZiBgZW5kYCBpcyBlcXVhbCB0byBgc3RhcnRgLCB0aGVuIHRoZSByZXR1cm5lZCBsaXN0IGlzIGVtcHR5LgogICAqLwogIExpc3Q8RT4gc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSk7CgogIC8qKgogICAqIFJldHVybnMgYW4gW0l0ZXJhYmxlXSB0aGF0IGl0ZXJhdGVzIG92ZXIgdGhlIG9iamVjdHMgaW4gdGhlIHJhbmdlCiAgICogW3N0YXJ0XSBpbmNsdXNpdmUgdG8gW2VuZF0gZXhjbHVzaXZlLgogICAqCiAgICogVGhlIHByb3ZpZGVkIHJhbmdlLCBnaXZlbiBieSBbc3RhcnRdIGFuZCBbZW5kXSwgbXVzdCBiZSB2YWxpZCBhdCB0aGUgdGltZQogICAqIG9mIHRoZSBjYWxsLgogICAqCiAgICogQSByYW5nZSBmcm9tIFtzdGFydF0gdG8gW2VuZF0gaXMgdmFsaWQgaWYgYDAgPD0gc3RhcnQgPD0gZW5kIDw9IGxlbmAsIHdoZXJlCiAgICogYGxlbmAgaXMgdGhpcyBsaXN0J3MgYGxlbmd0aGAuIFRoZSByYW5nZSBzdGFydHMgYXQgYHN0YXJ0YCBhbmQgaGFzIGxlbmd0aAogICAqIGBlbmQgLSBzdGFydGAuIEFuIGVtcHR5IHJhbmdlICh3aXRoIGBlbmQgPT0gc3RhcnRgKSBpcyB2YWxpZC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBbSXRlcmFibGVdIGJlaGF2ZXMgbGlrZSBgc2tpcChzdGFydCkudGFrZShlbmQgLSBzdGFydClgLgogICAqIFRoYXQgaXMsIGl0IGRvZXMgKm5vdCogdGhyb3cgaWYgdGhpcyBsaXN0IGNoYW5nZXMgc2l6ZS4KICAgKgogICAqICAgICBMaXN0PFN0cmluZz4gY29sb3JzID0gWydyZWQnLCAnZ3JlZW4nLCAnYmx1ZScsICdvcmFuZ2UnLCAncGluayddOwogICAqICAgICBJdGVyYWJsZTxTdHJpbmc+IHJhbmdlID0gY29sb3JzLmdldFJhbmdlKDEsIDQpOwogICAqICAgICByYW5nZS5qb2luKCcsICcpOyAgLy8gJ2dyZWVuLCBibHVlLCBvcmFuZ2UnCiAgICogICAgIGNvbG9ycy5sZW5ndGggPSAzOwogICAqICAgICByYW5nZS5qb2luKCcsICcpOyAgLy8gJ2dyZWVuLCBibHVlJwogICAqLwogIEl0ZXJhYmxlPEU+IGdldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCk7CgogIC8qKgogICAqIENvcGllcyB0aGUgb2JqZWN0cyBvZiBbaXRlcmFibGVdLCBza2lwcGluZyBbc2tpcENvdW50XSBvYmplY3RzIGZpcnN0LAogICAqIGludG8gdGhlIHJhbmdlIFtzdGFydF0sIGluY2x1c2l2ZSwgdG8gW2VuZF0sIGV4Y2x1c2l2ZSwgb2YgdGhlIGxpc3QuCiAgICoKICAgKiAgICAgTGlzdDxpbnQ+IGxpc3QxID0gWzEsIDIsIDMsIDRdOwogICAqICAgICBMaXN0PGludD4gbGlzdDIgPSBbNSwgNiwgNywgOCwgOV07CiAgICogICAgIC8vIENvcGllcyB0aGUgNHRoIGFuZCA1dGggaXRlbXMgaW4gbGlzdDIgYXMgdGhlIDJuZCBhbmQgM3JkIGl0ZW1zCiAgICogICAgIC8vIG9mIGxpc3QxLgogICAqICAgICBsaXN0MS5zZXRSYW5nZSgxLCAzLCBsaXN0MiwgMyk7CiAgICogICAgIGxpc3QxLmpvaW4oJywgJyk7IC8vICcxLCA4LCA5LCA0JwogICAqCiAgICogVGhlIHByb3ZpZGVkIHJhbmdlLCBnaXZlbiBieSBbc3RhcnRdIGFuZCBbZW5kXSwgbXVzdCBiZSB2YWxpZC4KICAgKiBBIHJhbmdlIGZyb20gW3N0YXJ0XSB0byBbZW5kXSBpcyB2YWxpZCBpZiBgMCA8PSBzdGFydCA8PSBlbmQgPD0gbGVuYCwgd2hlcmUKICAgKiBgbGVuYCBpcyB0aGlzIGxpc3QncyBgbGVuZ3RoYC4gVGhlIHJhbmdlIHN0YXJ0cyBhdCBgc3RhcnRgIGFuZCBoYXMgbGVuZ3RoCiAgICogYGVuZCAtIHN0YXJ0YC4gQW4gZW1wdHkgcmFuZ2UgKHdpdGggYGVuZCA9PSBzdGFydGApIGlzIHZhbGlkLgogICAqCiAgICogVGhlIFtpdGVyYWJsZV0gbXVzdCBoYXZlIGVub3VnaCBvYmplY3RzIHRvIGZpbGwgdGhlIHJhbmdlIGZyb20gYHN0YXJ0YAogICAqIHRvIGBlbmRgIGFmdGVyIHNraXBwaW5nIFtza2lwQ291bnRdIG9iamVjdHMuCiAgICoKICAgKiBJZiBgaXRlcmFibGVgIGlzIHRoaXMgbGlzdCwgdGhlIG9wZXJhdGlvbiBjb3BpZXMgdGhlIGVsZW1lbnRzCiAgICogb3JpZ2luYWxseSBpbiB0aGUgcmFuZ2UgZnJvbSBgc2tpcENvdW50YCB0byBgc2tpcENvdW50ICsgKGVuZCAtIHN0YXJ0KWAgdG8KICAgKiB0aGUgcmFuZ2UgYHN0YXJ0YCB0byBgZW5kYCwgZXZlbiBpZiB0aGUgdHdvIHJhbmdlcyBvdmVybGFwLgogICAqCiAgICogSWYgYGl0ZXJhYmxlYCBkZXBlbmRzIG9uIHRoaXMgbGlzdCBpbiBzb21lIG90aGVyIHdheSwgbm8gZ3VhcmFudGVlcyBhcmUKICAgKiBtYWRlLgogICAqLwogIHZvaWQgc2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxFPiBpdGVyYWJsZSwgW2ludCBza2lwQ291bnQgPSAwXSk7CgogIC8qKgogICAqIFJlbW92ZXMgdGhlIG9iamVjdHMgaW4gdGhlIHJhbmdlIFtzdGFydF0gaW5jbHVzaXZlIHRvIFtlbmRdIGV4Y2x1c2l2ZS4KICAgKgogICAqIFRoZSBwcm92aWRlZCByYW5nZSwgZ2l2ZW4gYnkgW3N0YXJ0XSBhbmQgW2VuZF0sIG11c3QgYmUgdmFsaWQuCiAgICogQSByYW5nZSBmcm9tIFtzdGFydF0gdG8gW2VuZF0gaXMgdmFsaWQgaWYgYDAgPD0gc3RhcnQgPD0gZW5kIDw9IGxlbmAsIHdoZXJlCiAgICogYGxlbmAgaXMgdGhpcyBsaXN0J3MgYGxlbmd0aGAuIFRoZSByYW5nZSBzdGFydHMgYXQgYHN0YXJ0YCBhbmQgaGFzIGxlbmd0aAogICAqIGBlbmQgLSBzdGFydGAuIEFuIGVtcHR5IHJhbmdlICh3aXRoIGBlbmQgPT0gc3RhcnRgKSBpcyB2YWxpZC4KICAgKgogICAqIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0gaWYgdGhpcyBpcyBhIGZpeGVkLWxlbmd0aCBsaXN0LiBJbiB0aGF0IGNhc2UKICAgKiB0aGUgbGlzdCBpcyBub3QgbW9kaWZpZWQuCiAgICovCiAgdm9pZCByZW1vdmVSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpOwoKICAvKioKICAgKiBTZXRzIHRoZSBvYmplY3RzIGluIHRoZSByYW5nZSBbc3RhcnRdIGluY2x1c2l2ZSB0byBbZW5kXSBleGNsdXNpdmUKICAgKiB0byB0aGUgZ2l2ZW4gW2ZpbGxWYWx1ZV0uCiAgICoKICAgKiBUaGUgcHJvdmlkZWQgcmFuZ2UsIGdpdmVuIGJ5IFtzdGFydF0gYW5kIFtlbmRdLCBtdXN0IGJlIHZhbGlkLgogICAqIEEgcmFuZ2UgZnJvbSBbc3RhcnRdIHRvIFtlbmRdIGlzIHZhbGlkIGlmIGAwIDw9IHN0YXJ0IDw9IGVuZCA8PSBsZW5gLCB3aGVyZQogICAqIGBsZW5gIGlzIHRoaXMgbGlzdCdzIGBsZW5ndGhgLiBUaGUgcmFuZ2Ugc3RhcnRzIGF0IGBzdGFydGAgYW5kIGhhcyBsZW5ndGgKICAgKiBgZW5kIC0gc3RhcnRgLiBBbiBlbXB0eSByYW5nZSAod2l0aCBgZW5kID09IHN0YXJ0YCkgaXMgdmFsaWQuCiAgICoKICAgKiBFeGFtcGxlOgogICAqIGBgYGRhcnQKICAgKiAgTGlzdDxpbnQ+IGxpc3QgPSBuZXcgTGlzdCgzKTsKICAgKiAgICAgbGlzdC5maWxsUmFuZ2UoMCwgMiwgMSk7CiAgICogICAgIHByaW50KGxpc3QpOyAvLyAgWzEsIDEsIG51bGxdCiAgICogYGBgCiAgICoKICAgKi8KICB2b2lkIGZpbGxSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIFtFIGZpbGxWYWx1ZV0pOwoKICAvKioKICAgKiBSZW1vdmVzIHRoZSBvYmplY3RzIGluIHRoZSByYW5nZSBbc3RhcnRdIGluY2x1c2l2ZSB0byBbZW5kXSBleGNsdXNpdmUKICAgKiBhbmQgaW5zZXJ0cyB0aGUgY29udGVudHMgb2YgW3JlcGxhY2VtZW50XSBpbiBpdHMgcGxhY2UuCiAgICoKICAgKiAgICAgTGlzdDxpbnQ+IGxpc3QgPSBbMSwgMiwgMywgNCwgNV07CiAgICogICAgIGxpc3QucmVwbGFjZVJhbmdlKDEsIDQsIFs2LCA3XSk7CiAgICogICAgIGxpc3Quam9pbignLCAnKTsgLy8gJzEsIDYsIDcsIDUnCiAgICoKICAgKiBUaGUgcHJvdmlkZWQgcmFuZ2UsIGdpdmVuIGJ5IFtzdGFydF0gYW5kIFtlbmRdLCBtdXN0IGJlIHZhbGlkLgogICAqIEEgcmFuZ2UgZnJvbSBbc3RhcnRdIHRvIFtlbmRdIGlzIHZhbGlkIGlmIGAwIDw9IHN0YXJ0IDw9IGVuZCA8PSBsZW5gLCB3aGVyZQogICAqIGBsZW5gIGlzIHRoaXMgbGlzdCdzIGBsZW5ndGhgLiBUaGUgcmFuZ2Ugc3RhcnRzIGF0IGBzdGFydGAgYW5kIGhhcyBsZW5ndGgKICAgKiBgZW5kIC0gc3RhcnRgLiBBbiBlbXB0eSByYW5nZSAod2l0aCBgZW5kID09IHN0YXJ0YCkgaXMgdmFsaWQuCiAgICoKICAgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCB3b3JrIG9uIGZpeGVkLWxlbmd0aCBsaXN0cywgZXZlbiB3aGVuIFtyZXBsYWNlbWVudF0KICAgKiBoYXMgdGhlIHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzIGFzIHRoZSByZXBsYWNlZCByYW5nZS4gSW4gdGhhdCBjYXNlIHVzZQogICAqIFtzZXRSYW5nZV0gaW5zdGVhZC4KICAgKi8KICB2b2lkIHJlcGxhY2VSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPEU+IHJlcGxhY2VtZW50KTsKCiAgLyoqCiAgICogUmV0dXJucyBhbiB1bm1vZGlmaWFibGUgW01hcF0gdmlldyBvZiBgdGhpc2AuCiAgICoKICAgKiBUaGUgbWFwIHVzZXMgdGhlIGluZGljZXMgb2YgdGhpcyBsaXN0IGFzIGtleXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIG9iamVjdHMKICAgKiBhcyB2YWx1ZXMuIFRoZSBgTWFwLmtleXNgIFtJdGVyYWJsZV0gaXRlcmF0ZXMgdGhlIGluZGljZXMgb2YgdGhpcyBsaXN0CiAgICogaW4gbnVtZXJpY2FsIG9yZGVyLgogICAqCiAgICogICAgIExpc3Q8U3RyaW5nPiB3b3JkcyA9IFsnZmVlJywgJ2ZpJywgJ2ZvJywgJ2Z1bSddOwogICAqICAgICBNYXA8aW50LCBTdHJpbmc+IG1hcCA9IHdvcmRzLmFzTWFwKCk7CiAgICogICAgIG1hcFswXSArIG1hcFsxXTsgICAvLyAnZmVlZmknOwogICAqICAgICBtYXAua2V5cy50b0xpc3QoKTsgLy8gWzAsIDEsIDIsIDNdCiAgICovCiAgTWFwPGludCwgRT4gYXNNYXAoKTsKCiAgLyoqCiAgKiBXaGV0aGVyIHRoaXMgbGlzdCBpcyBlcXVhbCB0byBbb3RoZXJdLgogICoKICAqIExpc3RzIGFyZSwgYnkgZGVmYXVsdCwgb25seSBlcXVhbCB0byB0aGVtc2VsdmVzLgogICogRXZlbiBpZiBbb3RoZXJdIGlzIGFsc28gYSBsaXN0LCB0aGUgZXF1YWxpdHkgY29tcGFyaXNvbgogICogZG9lcyBub3QgY29tcGFyZSB0aGUgZWxlbWVudHMgb2YgdGhlIHR3byBsaXN0cy4KICAqLwogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKTsKfQqC3gBOTjwBDwETAQQ1A0AnAxg3LQNKA0lNT0tIREcDSR0DMC0tICggHh0DT0BNT0ZNFwNPQDVRUBgEPwYpBT8FLSouBUMFKSQiBUsbBTcFQwYnAQZGBTIFDg0+CQVLKUoaTTkFRAkqGTEJBUcUCTMZKgkGTQEGLwVGBTRHRA0mHUEJBUcwBkkBBiUFRgVHMAZKAQYhBVBJGgVPBUEGPCAUFCcNIAYnIAYTBAEGPQVGBUZHGAY5AQYoBUMkBUVHBUlNDTgGSwEGMQVLEQVISzE6BU5KKj8GQx4RQR4nMkYGNSksCA0oLAgGBAEGNAVLDwVMSBsFTBAGTUEUJiIjMAgfDwYEAQY9BUZGRAVDS0EYBTsGFQY5OwYcAQZAOwYpAQZABSoFIQYbAQY/BTsFIQYaAQYxBUAGEgEGJgUkPgU/Bh0BBisiBT8GFQEGQAVMQAYlAQZJBhwBBlEFOAU6Kz8wBUIbBSgWJwVNG0tBBUE/UAYmAQYyBiEBBjgFQk0lBTgmJgUrBScGKwEGTQVCTCMFCTRCQgkFKwlACQY5AQZMBTBMIwUJNEZGCQUrCUQJBjkBBjcFOgVNJQU4KgVKEwUoBSsFKQYrAQYpKgVEHQYQAQY6BUk4BSBKBiUBBkkFSzsFIEoGMwEGSycFLikrBTwFRAVPEgVNGQYwAQY9BT8FRic7BT4FMyg7BT8GHQEGPAVRGwUhBTwFTx8GGQEGNAUhBUIGEgEGPQU+BUE6LgVCBioBBkUFPgVBOisFQgYqAQY5BUkeBT9QGgYlAQZLBUlQJwUNPjMJBUQFDT4JBUApRAYpAQZHKwVPEgVRT0MFSz0FSzk1HC0GLAEGS0oFKSxLFikrBURRT0MFTDIFQ1BBBU0LBlABBkwFRFFPQwVPHwYoAQZIHwVEUU9DBQ4NJCInCQUGNQEGSz0FKyoqBURRT0MFTk0ZBkIBBjMFUUwZBTovKCwGFwEGKwQ1PDQFIgIBE2RhcnQ6Y29yZS9saXN0LmRhcnROb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvX2ludGVybmFsL3ZtL2xpYi9hcnJheV9wYXRjaC5kYXJ0ilAvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgTGlzdDxFPiB7CiAgQHBhdGNoCiAgZmFjdG9yeSBMaXN0KFtpbnQgbGVuZ3RoXSkgbmF0aXZlICJMaXN0X25ldyI7CgogIEBwYXRjaAogIGZhY3RvcnkgTGlzdC5maWxsZWQoaW50IGxlbmd0aCwgRSBmaWxsLCB7Ym9vbCBncm93YWJsZTogZmFsc2V9KSB7CiAgICAvLyBBbGwgZXJyb3IgaGFuZGxpbmcgb24gdGhlIGxlbmd0aCBwYXJhbWV0ZXIgaXMgZG9uZSBhdCB0aGUgaW1wbGVtZW50YXRpb24KICAgIC8vIG9mIG5ldyBfTGlzdC4KICAgIHZhciByZXN1bHQgPSBncm93YWJsZSA/IG5ldyBfR3Jvd2FibGVMaXN0PEU+KGxlbmd0aCkgOiBuZXcgX0xpc3Q8RT4obGVuZ3RoKTsKICAgIGlmIChmaWxsICE9IG51bGwpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIHJlc3VsdFtpXSA9IGZpbGw7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAcGF0Y2gKICBmYWN0b3J5IExpc3QuZnJvbShJdGVyYWJsZSBlbGVtZW50cywge2Jvb2wgZ3Jvd2FibGU6IHRydWV9KSB7CiAgICBpZiAoZWxlbWVudHMgaXMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4pIHsKICAgICAgaW50IGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDsKICAgICAgdmFyIGxpc3QgPSBncm93YWJsZSA/IG5ldyBfR3Jvd2FibGVMaXN0PEU+KGxlbmd0aCkgOiBuZXcgX0xpc3Q8RT4obGVuZ3RoKTsKICAgICAgaWYgKGxlbmd0aCA+IDApIHsKICAgICAgICAvLyBBdm9pZCBjcmVhdGluZyBpdGVyYXRvciB1bmxlc3MgbmVjZXNzYXJ5LgogICAgICAgIGludCBpID0gMDsKICAgICAgICBmb3IgKHZhciBlbGVtZW50IGluIGVsZW1lbnRzKSB7CiAgICAgICAgICBsaXN0W2krK10gPSBlbGVtZW50OwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbGlzdDsKICAgIH0KICAgIC8vIElmIGVsZW1lbnRzIGlzIGFuIEl0ZXJhYmxlPEU+LCB3ZSB3b24ndCBuZWVkIGEgdHlwZS10ZXN0IGZvciBlYWNoCiAgICAvLyBlbGVtZW50LiBJbiB0aGUgImNvbW1vbiBjYXNlIiB0aGF0IGVsZW1lbnRzIGlzIGFuIEl0ZXJhYmxlPEU+LCB0aGlzCiAgICAvLyByZXBsYWNlcyBhIHR5cGUtdGVzdCBvbiBldmVyeSBlbGVtZW50IHdpdGggYSBzaW5nbGUgdHlwZS10ZXN0IGJlZm9yZQogICAgLy8gc3RhcnRpbmcgdGhlIGxvb3AuCiAgICBpZiAoZWxlbWVudHMgaXMgSXRlcmFibGU8RT4pIHsKICAgICAgTGlzdDxFPiBsaXN0ID0gbmV3IF9Hcm93YWJsZUxpc3Q8RT4oMCk7CiAgICAgIGZvciAoRSBlIGluIGVsZW1lbnRzKSB7CiAgICAgICAgbGlzdC5hZGQoZSk7CiAgICAgIH0KICAgICAgaWYgKGdyb3dhYmxlKSByZXR1cm4gbGlzdDsKICAgICAgcmV0dXJuIG1ha2VMaXN0Rml4ZWRMZW5ndGgobGlzdCk7CiAgICB9IGVsc2UgewogICAgICBMaXN0PEU+IGxpc3QgPSBuZXcgX0dyb3dhYmxlTGlzdDxFPigwKTsKICAgICAgZm9yIChFIGUgaW4gZWxlbWVudHMpIHsKICAgICAgICBsaXN0LmFkZChlKTsKICAgICAgfQogICAgICBpZiAoZ3Jvd2FibGUpIHJldHVybiBsaXN0OwogICAgICByZXR1cm4gbWFrZUxpc3RGaXhlZExlbmd0aChsaXN0KTsKICAgIH0KICB9CgogIEBwYXRjaAogIGZhY3RvcnkgTGlzdC5vZihJdGVyYWJsZTxFPiBlbGVtZW50cywge2Jvb2wgZ3Jvd2FibGU6IHRydWV9KSB7CiAgICAvLyBUT0RPKDMyOTM3KTogU3BlY2lhbGl6ZSB0byBiZW5lZml0IGZyb20ga25vd24gZWxlbWVudCB0eXBlLgogICAgcmV0dXJuIExpc3QuZnJvbShlbGVtZW50cywgZ3Jvd2FibGU6IGdyb3dhYmxlKTsKICB9CgogIEBwYXRjaAogIGZhY3RvcnkgTGlzdC51bm1vZGlmaWFibGUoSXRlcmFibGUgZWxlbWVudHMpIHsKICAgIGZpbmFsIHJlc3VsdCA9IG5ldyBMaXN0PEU+LmZyb20oZWxlbWVudHMsIGdyb3dhYmxlOiBmYWxzZSk7CiAgICByZXR1cm4gbWFrZUZpeGVkTGlzdFVubW9kaWZpYWJsZShyZXN1bHQpOwogIH0KCiAgLy8gRmFjdG9yeSBjb25zdHJ1Y3RpbmcgYSBtdXRhYmxlIExpc3QgZnJvbSBhIHBhcnNlciBnZW5lcmF0ZWQgTGlzdCBsaXRlcmFsLgogIC8vIFtlbGVtZW50c10gY29udGFpbnMgZWxlbWVudHMgdGhhdCBhcmUgYWxyZWFkeSB0eXBlIGNoZWNrZWQuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgZmFjdG9yeSBMaXN0Ll9mcm9tTGl0ZXJhbChMaXN0IGVsZW1lbnRzKSB7CiAgICBpZiAoZWxlbWVudHMuaXNFbXB0eSkgewogICAgICByZXR1cm4gbmV3IF9Hcm93YWJsZUxpc3Q8RT4oMCk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gbmV3IF9Hcm93YWJsZUxpc3Q8RT4uX3dpdGhEYXRhKGVsZW1lbnRzKTsKICAgIHJlc3VsdC5fc2V0TGVuZ3RoKGVsZW1lbnRzLmxlbmd0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQpXAE5OPAEPAR4BBxAJMAEJRFAVURgpGggGEwQBCUAyJFEYNRMoHwoIEwZJS0waIy4eFQghKA0uHhUIISgGBAEJQUM0BAEJMUAuBAFPQSQtHCYGOygTBAIBIGRhcnQ6Y29yZS1wYXRjaC9hcnJheV9wYXRjaC5kYXJ0Om9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2NvcmUvbWFwLmRhcnS0by8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogQSBjb2xsZWN0aW9uIG9mIGtleS92YWx1ZSBwYWlycywgZnJvbSB3aGljaCB5b3UgcmV0cmlldmUgYSB2YWx1ZQogKiB1c2luZyBpdHMgYXNzb2NpYXRlZCBrZXkuCiAqCiAqIFRoZXJlIGlzIGEgZmluaXRlIG51bWJlciBvZiBrZXlzIGluIHRoZSBtYXAsCiAqIGFuZCBlYWNoIGtleSBoYXMgZXhhY3RseSBvbmUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0LgogKgogKiBNYXBzLCBhbmQgdGhlaXIga2V5cyBhbmQgdmFsdWVzLCBjYW4gYmUgaXRlcmF0ZWQuCiAqIFRoZSBvcmRlciBvZiBpdGVyYXRpb24gaXMgZGVmaW5lZCBieSB0aGUgaW5kaXZpZHVhbCB0eXBlIG9mIG1hcC4KICogRXhhbXBsZXM6CiAqCiAqICogVGhlIHBsYWluIFtIYXNoTWFwXSBpcyB1bm9yZGVyZWQgKG5vIG9yZGVyIGlzIGd1YXJhbnRlZWQpLAogKiAqIHRoZSBbTGlua2VkSGFzaE1hcF0gaXRlcmF0ZXMgaW4ga2V5IGluc2VydGlvbiBvcmRlciwKICogKiBhbmQgYSBzb3J0ZWQgbWFwIGxpa2UgW1NwbGF5VHJlZU1hcF0gaXRlcmF0ZXMgdGhlIGtleXMgaW4gc29ydGVkIG9yZGVyLgogKgogKiBJdCBpcyBnZW5lcmFsbHkgbm90IGFsbG93ZWQgdG8gbW9kaWZ5IHRoZSBtYXAgKGFkZCBvciByZW1vdmUga2V5cykgd2hpbGUKICogYW4gb3BlcmF0aW9uIGlzIGJlaW5nIHBlcmZvcm1lZCBvbiB0aGUgbWFwLCBmb3IgZXhhbXBsZSBpbiBmdW5jdGlvbnMgY2FsbGVkCiAqIGR1cmluZyBhIFtmb3JFYWNoXSBvciBbcHV0SWZBYnNlbnRdIGNhbGwuCiAqIE1vZGlmeWluZyB0aGUgbWFwIHdoaWxlIGl0ZXJhdGluZyB0aGUga2V5cyBvciB2YWx1ZXMKICogbWF5IGFsc28gYnJlYWsgdGhlIGl0ZXJhdGlvbi4KICoKICogSXQgaXMgZ2VuZXJhbGx5IG5vdCBhbGxvd2VkIHRvIG1vZGlmeSB0aGUgZXF1YWxpdHkgb2Yga2V5cyAoYW5kIHRodXMgbm90CiAqIHRoZWlyIGhhc2hjb2RlKSB3aGlsZSB0aGV5IGFyZSBpbiB0aGUgbWFwLiBTb21lIHNwZWNpYWxpemVkIHN1YnR5cGVzIG1heSBiZQogKiBtb3JlIHBlcm1pc3NpdmUsIGluIHdoaWNoIGNhc2UgdGhleSBzaG91bGQgZG9jdW1lbnQgdGhpcyBiZWhhdmlvci4KICovCmFic3RyYWN0IGNsYXNzIE1hcDxLLCBWPiB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIE1hcCBpbnN0YW5jZSB3aXRoIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLCBbTGlua2VkSGFzaE1hcF0uCiAgICoKICAgKiBUaGlzIGNvbnN0cnVjdG9yIGlzIGVxdWl2YWxlbnQgdG8gdGhlIG5vbi1jb25zdCBtYXAgbGl0ZXJhbCBgPEssVj57fWAuCiAgICoKICAgKiBBIGBMaW5rZWRIYXNoTWFwYCByZXF1aXJlcyB0aGUga2V5cyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZQogICAqIGBvcGVyYXRvcj09YCBhbmQgYGhhc2hDb2RlYCwgYW5kIGl0IGFsbG93cyBudWxsIGFzIGEga2V5LgogICAqIEl0IGl0ZXJhdGVzIGluIGtleSBpbnNlcnRpb24gb3JkZXIuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBNYXAoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtMaW5rZWRIYXNoTWFwXSBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIGFsbCBrZXkvdmFsdWUgcGFpcnMgb2YKICAgKiBbb3RoZXJdLgogICAqCiAgICogVGhlIGtleXMgbXVzdCBhbGwgYmUgaW5zdGFuY2VzIG9mIFtLXSBhbmQgdGhlIHZhbHVlcyBvZiBbVl0uCiAgICogVGhlIFtvdGhlcl0gbWFwIGl0c2VsZiBjYW4gaGF2ZSBhbnkgdHlwZS4KICAgKgogICAqIEEgYExpbmtlZEhhc2hNYXBgIHJlcXVpcmVzIHRoZSBrZXlzIHRvIGltcGxlbWVudCBjb21wYXRpYmxlCiAgICogYG9wZXJhdG9yPT1gIGFuZCBgaGFzaENvZGVgLCBhbmQgaXQgYWxsb3dzIGBudWxsYCBhcyBhIGtleS4KICAgKiBJdCBpdGVyYXRlcyBpbiBrZXkgaW5zZXJ0aW9uIG9yZGVyLgogICAqLwogIGZhY3RvcnkgTWFwLmZyb20oTWFwIG90aGVyKSA9IExpbmtlZEhhc2hNYXA8SywgVj4uZnJvbTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtMaW5rZWRIYXNoTWFwXSB3aXRoIHRoZSBzYW1lIGtleXMgYW5kIHZhbHVlcyBhcyBbb3RoZXJdLgogICAqCiAgICogQSBgTGlua2VkSGFzaE1hcGAgcmVxdWlyZXMgdGhlIGtleXMgdG8gaW1wbGVtZW50IGNvbXBhdGlibGUKICAgKiBgb3BlcmF0b3I9PWAgYW5kIGBoYXNoQ29kZWAsIGFuZCBpdCBhbGxvd3MgYG51bGxgIGFzIGEga2V5LgogICAqIEl0IGl0ZXJhdGVzIGluIGtleSBpbnNlcnRpb24gb3JkZXIuCiAgICovCiAgZmFjdG9yeSBNYXAub2YoTWFwPEssIFY+IG90aGVyKSA9IExpbmtlZEhhc2hNYXA8SywgVj4ub2Y7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gdW5tb2RpZmlhYmxlIGhhc2ggYmFzZWQgbWFwIGNvbnRhaW5pbmcgdGhlIGVudHJpZXMgb2YgW290aGVyXS4KICAgKgogICAqIFRoZSBrZXlzIG11c3QgYWxsIGJlIGluc3RhbmNlcyBvZiBbS10gYW5kIHRoZSB2YWx1ZXMgb2YgW1ZdLgogICAqIFRoZSBbb3RoZXJdIG1hcCBpdHNlbGYgY2FuIGhhdmUgYW55IHR5cGUuCiAgICoKICAgKiBUaGUgbWFwIHJlcXVpcmVzIHRoZSBrZXlzIHRvIGltcGxlbWVudCBjb21wYXRpYmxlCiAgICogYG9wZXJhdG9yPT1gIGFuZCBgaGFzaENvZGVgLCBhbmQgaXQgYWxsb3dzIGBudWxsYCBhcyBhIGtleS4KICAgKiBUaGUgY3JlYXRlZCBtYXAgaXRlcmF0ZXMga2V5cyBpbiBhIGZpeGVkIG9yZGVyLAogICAqIHByZXNlcnZpbmcgdGhlIG9yZGVyIHByb3ZpZGVkIGJ5IFtvdGhlcl0uCiAgICoKICAgKiBUaGUgcmVzdWx0aW5nIG1hcCBiZWhhdmVzIGxpa2UgdGhlIHJlc3VsdCBvZiBbTWFwLmZyb21dLAogICAqIGV4Y2VwdCB0aGF0IHRoZSBtYXAgcmV0dXJuZWQgYnkgdGhpcyBjb25zdHJ1Y3RvciBpcyBub3QgbW9kaWZpYWJsZS4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IE1hcC51bm1vZGlmaWFibGUoTWFwIG90aGVyKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBpZGVudGl0eSBtYXAgd2l0aCB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiwgW0xpbmtlZEhhc2hNYXBdLgogICAqCiAgICogQW4gaWRlbnRpdHkgbWFwIHVzZXMgW2lkZW50aWNhbF0gZm9yIGVxdWFsaXR5IGFuZCBbaWRlbnRpdHlIYXNoQ29kZV0KICAgKiBmb3IgaGFzaCBjb2RlcyBvZiBrZXlzIGluc3RlYWQgb2YgdGhlIGludHJpbnNpYyBbT2JqZWN0Lj09XSBhbmQKICAgKiBbT2JqZWN0Lmhhc2hDb2RlXSBvZiB0aGUga2V5cy4KICAgKgogICAqIFRoZSByZXR1cm5lZCBtYXAgYWxsb3dzIGBudWxsYCBhcyBhIGtleS4KICAgKiBJdCBpdGVyYXRlcyBpbiBrZXkgaW5zZXJ0aW9uIG9yZGVyLgogICAqLwogIGZhY3RvcnkgTWFwLmlkZW50aXR5KCkgPSBMaW5rZWRIYXNoTWFwPEssIFY+LmlkZW50aXR5OwoKICAvKioKICAgKiBDcmVhdGVzIGEgTWFwIGluc3RhbmNlIGluIHdoaWNoIHRoZSBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNvbXB1dGVkIGZyb20gdGhlCiAgICogW2l0ZXJhYmxlXS4KICAgKgogICAqIFRoZSBjcmVhdGVkIG1hcCBpcyBhIFtMaW5rZWRIYXNoTWFwXS4KICAgKiBBIGBMaW5rZWRIYXNoTWFwYCByZXF1aXJlcyB0aGUga2V5cyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZQogICAqIGBvcGVyYXRvcj09YCBhbmQgYGhhc2hDb2RlYCwgYW5kIGl0IGFsbG93cyBudWxsIGFzIGEga2V5LgogICAqIEl0IGl0ZXJhdGVzIGluIGtleSBpbnNlcnRpb24gb3JkZXIuCiAgICoKICAgKiBGb3IgZWFjaCBlbGVtZW50IG9mIHRoZSBbaXRlcmFibGVdIHRoaXMgY29uc3RydWN0b3IgY29tcHV0ZXMgYSBrZXkvdmFsdWUKICAgKiBwYWlyLCBieSBhcHBseWluZyBba2V5XSBhbmQgW3ZhbHVlXSByZXNwZWN0aXZlbHkuCiAgICoKICAgKiBUaGUgZXhhbXBsZSBiZWxvdyBjcmVhdGVzIGEgbmV3IE1hcCBmcm9tIGEgTGlzdC4gVGhlIGtleXMgb2YgYG1hcGAgYXJlCiAgICogYGxpc3RgIHZhbHVlcyBjb252ZXJ0ZWQgdG8gc3RyaW5ncywgYW5kIHRoZSB2YWx1ZXMgb2YgdGhlIGBtYXBgIGFyZSB0aGUKICAgKiBzcXVhcmVzIG9mIHRoZSBgbGlzdGAgdmFsdWVzOgogICAqCiAgICogICAgIExpc3Q8aW50PiBsaXN0ID0gWzEsIDIsIDNdOwogICAqICAgICBNYXA8U3RyaW5nLCBpbnQ+IG1hcCA9IG5ldyBNYXAuZnJvbUl0ZXJhYmxlKGxpc3QsCiAgICogICAgICAgICBrZXk6IChpdGVtKSA9PiBpdGVtLnRvU3RyaW5nKCksCiAgICogICAgICAgICB2YWx1ZTogKGl0ZW0pID0+IGl0ZW0gKiBpdGVtKTsKICAgKgogICAqICAgICBtYXBbJzEnXSArIG1hcFsnMiddOyAvLyAxICsgNAogICAqICAgICBtYXBbJzMnXSAtIG1hcFsnMiddOyAvLyA5IC0gNAogICAqCiAgICogSWYgbm8gdmFsdWVzIGFyZSBzcGVjaWZpZWQgZm9yIFtrZXldIGFuZCBbdmFsdWVdIHRoZSBkZWZhdWx0IGlzIHRoZQogICAqIGlkZW50aXR5IGZ1bmN0aW9uLgogICAqCiAgICogSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCB0aGUga2V5cyBhbmQgY29ycmVzcG9uZGluZyB2YWx1ZXMgb2YgYG1hcGAKICAgKiBhcmUgYGxpc3RgIHZhbHVlczoKICAgKgogICAqICAgICBtYXAgPSBuZXcgTWFwLmZyb21JdGVyYWJsZShsaXN0KTsKICAgKiAgICAgbWFwWzFdICsgbWFwWzJdOyAvLyAxICsgMgogICAqICAgICBtYXBbM10gLSBtYXBbMl07IC8vIDMgLSAyCiAgICoKICAgKiBUaGUga2V5cyBjb21wdXRlZCBieSB0aGUgc291cmNlIFtpdGVyYWJsZV0gZG8gbm90IG5lZWQgdG8gYmUgdW5pcXVlLiBUaGUKICAgKiBsYXN0IG9jY3VycmVuY2Ugb2YgYSBrZXkgd2lsbCBzaW1wbHkgb3ZlcndyaXRlIGFueSBwcmV2aW91cyB2YWx1ZS4KICAgKi8KICBmYWN0b3J5IE1hcC5mcm9tSXRlcmFibGUoSXRlcmFibGUgaXRlcmFibGUsCiAgICAgIHtLIGtleShlbGVtZW50KSwgViB2YWx1ZShlbGVtZW50KX0pID0gTGlua2VkSGFzaE1hcDxLLCBWPi5mcm9tSXRlcmFibGU7CgogIC8qKgogICAqIENyZWF0ZXMgYSBNYXAgaW5zdGFuY2UgYXNzb2NpYXRpbmcgdGhlIGdpdmVuIFtrZXlzXSB0byBbdmFsdWVzXS4KICAgKgogICAqIFRoZSBjcmVhdGVkIG1hcCBpcyBhIFtMaW5rZWRIYXNoTWFwXS4KICAgKiBBIGBMaW5rZWRIYXNoTWFwYCByZXF1aXJlcyB0aGUga2V5cyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZQogICAqIGBvcGVyYXRvcj09YCBhbmQgYGhhc2hDb2RlYCwgYW5kIGl0IGFsbG93cyBudWxsIGFzIGEga2V5LgogICAqIEl0IGl0ZXJhdGVzIGluIGtleSBpbnNlcnRpb24gb3JkZXIuCiAgICoKICAgKiBUaGlzIGNvbnN0cnVjdG9yIGl0ZXJhdGVzIG92ZXIgW2tleXNdIGFuZCBbdmFsdWVzXSBhbmQgbWFwcyBlYWNoIGVsZW1lbnQgb2YKICAgKiBba2V5c10gdG8gdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiBbdmFsdWVzXS4KICAgKgogICAqICAgICBMaXN0PFN0cmluZz4gbGV0dGVycyA9IFsnYicsICdjJ107CiAgICogICAgIExpc3Q8U3RyaW5nPiB3b3JkcyA9IFsnYmFkJywgJ2NhdCddOwogICAqICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IG5ldyBNYXAuZnJvbUl0ZXJhYmxlcyhsZXR0ZXJzLCB3b3Jkcyk7CiAgICogICAgIG1hcFsnYiddICsgbWFwWydjJ107ICAvLyBiYWRjYXQKICAgKgogICAqIElmIFtrZXlzXSBjb250YWlucyB0aGUgc2FtZSBvYmplY3QgbXVsdGlwbGUgdGltZXMsIHRoZSBsYXN0IG9jY3VycmVuY2UKICAgKiBvdmVyd3JpdGVzIHRoZSBwcmV2aW91cyB2YWx1ZS4KICAgKgogICAqIFRoZSB0d28gW0l0ZXJhYmxlXXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4KICAgKi8KICBmYWN0b3J5IE1hcC5mcm9tSXRlcmFibGVzKEl0ZXJhYmxlPEs+IGtleXMsIEl0ZXJhYmxlPFY+IHZhbHVlcykgPQogICAgICBMaW5rZWRIYXNoTWFwPEssIFY+LmZyb21JdGVyYWJsZXM7CgogIC8qKgogICAqIEFkYXB0cyBbc291cmNlXSB0byBiZSBhIGBNYXA8SzIsIFYyPmAuCiAgICoKICAgKiBBbnkgdGltZSB0aGUgc2V0IHdvdWxkIHByb2R1Y2UgYSBrZXkgb3IgdmFsdWUgdGhhdCBpcyBub3QgYSBbSzJdIG9yIFtWMl0sCiAgICogdGhlIGFjY2VzcyB3aWxsIHRocm93LgogICAqCiAgICogQW55IHRpbWUgW0syXSBrZXkgb3IgW1YyXSB2YWx1ZSBpcyBhdHRlbXB0ZWQgYWRkZWQgaW50byB0aGUgYWRhcHRlZCBtYXAsCiAgICogdGhlIHN0b3JlIHdpbGwgdGhyb3cgdW5sZXNzIHRoZSBrZXkgaXMgYWxzbyBhbiBpbnN0YW5jZSBvZiBbS10gYW5kCiAgICogdGhlIHZhbHVlIGlzIGFsc28gYW4gaW5zdGFuY2Ugb2YgW1ZdLgogICAqCiAgICogSWYgYWxsIGFjY2Vzc2VkIGVudHJpZXMgb2YgW3NvdXJjZV0gYXJlIGhhdmUgW0syXSBrZXlzIGFuZCBbVjJdIHZhbHVlcwogICAqIGFuZCBpZiBhbGwgZW50cmllcyBhZGRlZCB0byB0aGUgcmV0dXJuZWQgbWFwIGhhdmUgW0tdIGtleXMgYW5kIFtWXV0gdmFsdWVzLAogICAqIHRoZW4gdGhlIHJldHVybmVkIG1hcCBjYW4gYmUgdXNlZCBhcyBhIGBNYXA8SzIsIFYyPmAuCiAgICovCiAgc3RhdGljIE1hcDxLMiwgVjI+IGNhc3RGcm9tPEssIFYsIEsyLCBWMj4oTWFwPEssIFY+IHNvdXJjZSkgPT4KICAgICAgQ2FzdE1hcDxLLCBWLCBLMiwgVjI+KHNvdXJjZSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgbWFwIGFuZCBhZGRzIGFsbCBlbnRyaWVzLgogICAqCiAgICogUmV0dXJucyBhIG5ldyBgTWFwPEssIFY+YCB3aGVyZSBhbGwgZW50cmllcyBvZiBbZW50cmllc10KICAgKiBoYXZlIGJlZW4gYWRkZWQgaW4gaXRlcmF0aW9uIG9yZGVyLgogICAqCiAgICogSWYgbXVsdGlwbGUgW2VudHJpZXNdIGhhdmUgdGhlIHNhbWUga2V5LAogICAqIGxhdGVyIG9jY3VycmVuY2VzIG92ZXJ3cml0ZSB0aGUgZWFybGllciBvbmVzLgogICAqLwogIGZhY3RvcnkgTWFwLmZyb21FbnRyaWVzKEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBlbnRyaWVzKSA9PgogICAgICA8SywgVj57fS4uYWRkRW50cmllcyhlbnRyaWVzKTsKCiAgLyoqCiAgICogUHJvdmlkZXMgYSB2aWV3IG9mIHRoaXMgbWFwIGFzIGhhdmluZyBbUktdIGtleXMgYW5kIFtSVl0gaW5zdGFuY2VzLAogICAqIGlmIG5lY2Vzc2FyeS4KICAgKgogICAqIElmIHRoaXMgbWFwIGlzIGFscmVhZHkgYSBgTWFwPFJLLCBSVj5gLCBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuCiAgICoKICAgKiBJZiB0aGlzIHNldCBjb250YWlucyBvbmx5IGtleXMgb2YgdHlwZSBbUktdIGFuZCB2YWx1ZXMgb2YgdHlwZSBbUlZdLAogICAqIGFsbCByZWFkIG9wZXJhdGlvbnMgd2lsbCB3b3JrIGNvcnJlY3RseS4KICAgKiBJZiBhbnkgb3BlcmF0aW9uIGV4cG9zZXMgYSBub24tW1JLXSBrZXkgb3Igbm9uLVtSVl0gdmFsdWUsCiAgICogdGhlIG9wZXJhdGlvbiB3aWxsIHRocm93IGluc3RlYWQuCiAgICoKICAgKiBFbnRyaWVzIGFkZGVkIHRvIHRoZSBtYXAgbXVzdCBiZSB2YWxpZCBmb3IgYm90aCBhIGBNYXA8SywgVj5gIGFuZCBhCiAgICogYE1hcDxSSywgUlY+YC4KICAgKi8KICBNYXA8UkssIFJWPiBjYXN0PFJLLCBSVj4oKTsKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBtYXAgY29udGFpbnMgdGhlIGdpdmVuIFt2YWx1ZV0uCiAgICoKICAgKiBSZXR1cm5zIHRydWUgaWYgYW55IG9mIHRoZSB2YWx1ZXMgaW4gdGhlIG1hcCBhcmUgZXF1YWwgdG8gYHZhbHVlYAogICAqIGFjY29yZGluZyB0byB0aGUgYD09YCBvcGVyYXRvci4KICAgKi8KICBib29sIGNvbnRhaW5zVmFsdWUoT2JqZWN0IHZhbHVlKTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgbWFwIGNvbnRhaW5zIHRoZSBnaXZlbiBba2V5XS4KICAgKgogICAqIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlIGtleXMgaW4gdGhlIG1hcCBhcmUgZXF1YWwgdG8gYGtleWAKICAgKiBhY2NvcmRpbmcgdG8gdGhlIGVxdWFsaXR5IHVzZWQgYnkgdGhlIG1hcC4KICAgKi8KICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBrZXkpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIFtrZXldIG9yIG51bGwgaWYgW2tleV0gaXMgbm90IGluIHRoZSBtYXAuCiAgICoKICAgKiBTb21lIG1hcHMgYWxsb3cga2V5cyB0byBoYXZlIGBudWxsYCBhcyBhIHZhbHVlLgogICAqIEZvciB0aG9zZSBtYXBzLCBhIGxvb2t1cCB1c2luZyB0aGlzIG9wZXJhdG9yIGNhbm5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGEKICAgKiBrZXkgbm90IGJlaW5nIGluIHRoZSBtYXAgYW5kIHRoZSBrZXkgaGF2aW5nIGEgYG51bGxgIHZhbHVlLgogICAqIE1ldGhvZHMgbGlrZSBbY29udGFpbnNLZXldIG9yIFtwdXRJZkFic2VudF0gY2FuIGJlIHVzZWQgaWYgdGhlIGRpc3RpbmN0aW9uCiAgICogaXMgaW1wb3J0YW50LgogICAqLwogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSk7CgogIC8qKgogICAqIEFzc29jaWF0ZXMgdGhlIFtrZXldIHdpdGggdGhlIGdpdmVuIFt2YWx1ZV0uCiAgICoKICAgKiBJZiB0aGUga2V5IHdhcyBhbHJlYWR5IGluIHRoZSBtYXAsIGl0cyBhc3NvY2lhdGVkIHZhbHVlIGlzIGNoYW5nZWQuCiAgICogT3RoZXJ3aXNlIHRoZSBrZXkvdmFsdWUgcGFpciBpcyBhZGRlZCB0byB0aGUgbWFwLgogICAqLwogIHZvaWQgb3BlcmF0b3IgW109KEsga2V5LCBWIHZhbHVlKTsKCiAgLyoqCiAgICogVGhlIG1hcCBlbnRyaWVzIG9mIFt0aGlzXS4KICAgKi8KICBJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZ2V0IGVudHJpZXM7CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgbWFwIHdoZXJlIGFsbCBlbnRyaWVzIG9mIHRoaXMgbWFwIGFyZSB0cmFuc2Zvcm1lZCBieQogICAqIHRoZSBnaXZlbiBbZl0gZnVuY3Rpb24uCiAgICovCiAgTWFwPEsyLCBWMj4gbWFwPEsyLCBWMj4oTWFwRW50cnk8SzIsIFYyPiBmKEsga2V5LCBWIHZhbHVlKSk7CgogIC8qKgogICAqIEFkZHMgYWxsIGtleS92YWx1ZSBwYWlycyBvZiBbbmV3RW50cmllc10gdG8gdGhpcyBtYXAuCiAgICoKICAgKiBJZiBhIGtleSBvZiBbbmV3RW50cmllc10gaXMgYWxyZWFkeSBpbiB0aGlzIG1hcCwKICAgKiB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpcyBvdmVyd3JpdHRlbi4KICAgKgogICAqIFRoZSBvcGVyYXRpb24gaXMgZXF1aXZhbGVudCB0byBkb2luZyBgdGhpc1tlbnRyeS5rZXldID0gZW50cnkudmFsdWVgCiAgICogZm9yIGVhY2ggW01hcEVudHJ5XSBvZiB0aGUgaXRlcmFibGUuCiAgICovCiAgdm9pZCBhZGRFbnRyaWVzKEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBuZXdFbnRyaWVzKTsKCiAgLyoqCiAgICogVXBkYXRlcyB0aGUgdmFsdWUgZm9yIHRoZSBwcm92aWRlZCBba2V5XS4KICAgKgogICAqIFJldHVybnMgdGhlIG5ldyB2YWx1ZSBvZiB0aGUga2V5LgogICAqCiAgICogSWYgdGhlIGtleSBpcyBwcmVzZW50LCBpbnZva2VzIFt1cGRhdGVdIHdpdGggdGhlIGN1cnJlbnQgdmFsdWUgYW5kIHN0b3JlcwogICAqIHRoZSBuZXcgdmFsdWUgaW4gdGhlIG1hcC4KICAgKgogICAqIElmIHRoZSBrZXkgaXMgbm90IHByZXNlbnQgYW5kIFtpZkFic2VudF0gaXMgcHJvdmlkZWQsIGNhbGxzIFtpZkFic2VudF0KICAgKiBhbmQgYWRkcyB0aGUga2V5IHdpdGggdGhlIHJldHVybmVkIHZhbHVlIHRvIHRoZSBtYXAuCiAgICoKICAgKiBJdCdzIGFuIGVycm9yIGlmIHRoZSBrZXkgaXMgbm90IHByZXNlbnQgYW5kIFtpZkFic2VudF0gaXMgbm90IHByb3ZpZGVkLgogICAqLwogIFYgdXBkYXRlKEsga2V5LCBWIHVwZGF0ZShWIHZhbHVlKSwge1YgaWZBYnNlbnQoKX0pOwoKICAvKioKICAgKiBVcGRhdGVzIGFsbCB2YWx1ZXMuCiAgICoKICAgKiBJdGVyYXRlcyBvdmVyIGFsbCBlbnRyaWVzIGluIHRoZSBtYXAgYW5kIHVwZGF0ZXMgdGhlbSB3aXRoIHRoZSByZXN1bHQKICAgKiBvZiBpbnZva2luZyBbdXBkYXRlXS4KICAgKi8KICB2b2lkIHVwZGF0ZUFsbChWIHVwZGF0ZShLIGtleSwgViB2YWx1ZSkpOwoKICAvKioKICAgKiBSZW1vdmVzIGFsbCBlbnRyaWVzIG9mIHRoaXMgbWFwIHRoYXQgc2F0aXNmeSB0aGUgZ2l2ZW4gW3ByZWRpY2F0ZV0uCiAgICovCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHByZWRpY2F0ZShLIGtleSwgViB2YWx1ZSkpOwoKICAvKioKICAgKiBMb29rIHVwIHRoZSB2YWx1ZSBvZiBba2V5XSwgb3IgYWRkIGEgbmV3IHZhbHVlIGlmIGl0IGlzbid0IHRoZXJlLgogICAqCiAgICogUmV0dXJucyB0aGUgdmFsdWUgYXNzb2NpYXRlZCB0byBba2V5XSwgaWYgdGhlcmUgaXMgb25lLgogICAqIE90aGVyd2lzZSBjYWxscyBbaWZBYnNlbnRdIHRvIGdldCBhIG5ldyB2YWx1ZSwgYXNzb2NpYXRlcyBba2V5XSB0bwogICAqIHRoYXQgdmFsdWUsIGFuZCB0aGVuIHJldHVybnMgdGhlIG5ldyB2YWx1ZS4KICAgKgogICAqICAgICBNYXA8U3RyaW5nLCBpbnQ+IHNjb3JlcyA9IHsnQm9iJzogMzZ9OwogICAqICAgICBmb3IgKHZhciBrZXkgaW4gWydCb2InLCAnUm9oYW4nLCAnU29waGVuYSddKSB7CiAgICogICAgICAgc2NvcmVzLnB1dElmQWJzZW50KGtleSwgKCkgPT4ga2V5Lmxlbmd0aCk7CiAgICogICAgIH0KICAgKiAgICAgc2NvcmVzWydCb2InXTsgICAgICAvLyAzNgogICAqICAgICBzY29yZXNbJ1JvaGFuJ107ICAgIC8vICA1CiAgICogICAgIHNjb3Jlc1snU29waGVuYSddOyAgLy8gIDcKICAgKgogICAqIENhbGxpbmcgW2lmQWJzZW50XSBtdXN0IG5vdCBhZGQgb3IgcmVtb3ZlIGtleXMgZnJvbSB0aGUgbWFwLgogICAqLwogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSk7CgogIC8qKgogICAqIEFkZHMgYWxsIGtleS92YWx1ZSBwYWlycyBvZiBbb3RoZXJdIHRvIHRoaXMgbWFwLgogICAqCiAgICogSWYgYSBrZXkgb2YgW290aGVyXSBpcyBhbHJlYWR5IGluIHRoaXMgbWFwLCBpdHMgdmFsdWUgaXMgb3ZlcndyaXR0ZW4uCiAgICoKICAgKiBUaGUgb3BlcmF0aW9uIGlzIGVxdWl2YWxlbnQgdG8gZG9pbmcgYHRoaXNba2V5XSA9IHZhbHVlYCBmb3IgZWFjaCBrZXkKICAgKiBhbmQgYXNzb2NpYXRlZCB2YWx1ZSBpbiBvdGhlci4gSXQgaXRlcmF0ZXMgb3ZlciBbb3RoZXJdLCB3aGljaCBtdXN0CiAgICogdGhlcmVmb3JlIG5vdCBjaGFuZ2UgZHVyaW5nIHRoZSBpdGVyYXRpb24uCiAgICovCiAgdm9pZCBhZGRBbGwoTWFwPEssIFY+IG90aGVyKTsKCiAgLyoqCiAgICogUmVtb3ZlcyBba2V5XSBhbmQgaXRzIGFzc29jaWF0ZWQgdmFsdWUsIGlmIHByZXNlbnQsIGZyb20gdGhlIG1hcC4KICAgKgogICAqIFJldHVybnMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBga2V5YCBiZWZvcmUgaXQgd2FzIHJlbW92ZWQuCiAgICogUmV0dXJucyBgbnVsbGAgaWYgYGtleWAgd2FzIG5vdCBpbiB0aGUgbWFwLgogICAqCiAgICogTm90ZSB0aGF0IHZhbHVlcyBjYW4gYmUgYG51bGxgIGFuZCBhIHJldHVybmVkIGBudWxsYCB2YWx1ZSBkb2Vzbid0CiAgICogYWx3YXlzIG1lYW4gdGhhdCB0aGUga2V5IHdhcyBhYnNlbnQuCiAgICovCiAgViByZW1vdmUoT2JqZWN0IGtleSk7CgogIC8qKgogICAqIFJlbW92ZXMgYWxsIHBhaXJzIGZyb20gdGhlIG1hcC4KICAgKgogICAqIEFmdGVyIHRoaXMsIHRoZSBtYXAgaXMgZW1wdHkuCiAgICovCiAgdm9pZCBjbGVhcigpOwoKICAvKioKICAgKiBBcHBsaWVzIFtmXSB0byBlYWNoIGtleS92YWx1ZSBwYWlyIG9mIHRoZSBtYXAuCiAgICoKICAgKiBDYWxsaW5nIGBmYCBtdXN0IG5vdCBhZGQgb3IgcmVtb3ZlIGtleXMgZnJvbSB0aGUgbWFwLgogICAqLwogIHZvaWQgZm9yRWFjaCh2b2lkIGYoSyBrZXksIFYgdmFsdWUpKTsKCiAgLyoqCiAgICogVGhlIGtleXMgb2YgW3RoaXNdLgogICAqCiAgICogVGhlIHJldHVybmVkIGl0ZXJhYmxlIGhhcyBlZmZpY2llbnQgYGxlbmd0aGAgYW5kIGBjb250YWluc2Agb3BlcmF0aW9ucywKICAgKiBiYXNlZCBvbiBbbGVuZ3RoXSBhbmQgW2NvbnRhaW5zS2V5XSBvZiB0aGUgbWFwLgogICAqCiAgICogVGhlIG9yZGVyIG9mIGl0ZXJhdGlvbiBpcyBkZWZpbmVkIGJ5IHRoZSBpbmRpdmlkdWFsIGBNYXBgIGltcGxlbWVudGF0aW9uLAogICAqIGJ1dCBtdXN0IGJlIGNvbnNpc3RlbnQgYmV0d2VlbiBjaGFuZ2VzIHRvIHRoZSBtYXAuCiAgICoKICAgKiBNb2RpZnlpbmcgdGhlIG1hcCB3aGlsZSBpdGVyYXRpbmcgdGhlIGtleXMKICAgKiBtYXkgYnJlYWsgdGhlIGl0ZXJhdGlvbi4KICAgKi8KICBJdGVyYWJsZTxLPiBnZXQga2V5czsKCiAgLyoqCiAgICogVGhlIHZhbHVlcyBvZiBbdGhpc10uCiAgICoKICAgKiBUaGUgdmFsdWVzIGFyZSBpdGVyYXRlZCBpbiB0aGUgb3JkZXIgb2YgdGhlaXIgY29ycmVzcG9uZGluZyBrZXlzLgogICAqIFRoaXMgbWVhbnMgdGhhdCBpdGVyYXRpbmcgW2tleXNdIGFuZCBbdmFsdWVzXSBpbiBwYXJhbGxlbCB3aWxsCiAgICogcHJvdmlkZSBtYXRjaGluZyBwYWlycyBvZiBrZXlzIGFuZCB2YWx1ZXMuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgaXRlcmFibGUgaGFzIGFuIGVmZmljaWVudCBgbGVuZ3RoYCBtZXRob2QgYmFzZWQgb24gdGhlCiAgICogW2xlbmd0aF0gb2YgdGhlIG1hcC4gSXRzIFtJdGVyYWJsZS5jb250YWluc10gbWV0aG9kIGlzIGJhc2VkIG9uCiAgICogYD09YCBjb21wYXJpc29uLgogICAqCiAgICogTW9kaWZ5aW5nIHRoZSBtYXAgd2hpbGUgaXRlcmF0aW5nIHRoZQogICAqIHZhbHVlcyBtYXkgYnJlYWsgdGhlIGl0ZXJhdGlvbi4KICAgKi8KICBJdGVyYWJsZTxWPiBnZXQgdmFsdWVzOwoKICAvKioKICAgKiBUaGUgbnVtYmVyIG9mIGtleS92YWx1ZSBwYWlycyBpbiB0aGUgbWFwLgogICAqLwogIGludCBnZXQgbGVuZ3RoOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgbm8ga2V5L3ZhbHVlIHBhaXIgaW4gdGhlIG1hcC4KICAgKi8KICBib29sIGdldCBpc0VtcHR5OwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGtleS92YWx1ZSBwYWlyIGluIHRoZSBtYXAuCiAgICovCiAgYm9vbCBnZXQgaXNOb3RFbXB0eTsKfQoKLyoqCiAqIEEga2V5L3ZhbHVlIHBhaXIgcmVwcmVzZW50aW5nIGFuIGVudHJ5IGluIGEgW01hcF0uCiAqLwpjbGFzcyBNYXBFbnRyeTxLLCBWPiB7CiAgLyoqIFRoZSBrZXkgb2YgdGhlIGVudHJ5LiAqLwogIGZpbmFsIEsga2V5OwoKICAvKiogVGhlIHZhbHVlIGFzc29jaWF0ZWQgdG8gW2tleV0gaW4gdGhlIG1hcC4gKi8KICBmaW5hbCBWIHZhbHVlOwoKICAvKiogQ3JlYXRlcyBhbiBlbnRyeSB3aXRoIFtrZXldIGFuZCBbdmFsdWVdLiAqLwogIGNvbnN0IGZhY3RvcnkgTWFwRW50cnkoSyBrZXksIFYgdmFsdWUpID0gTWFwRW50cnk8SywgVj4uXzsKCiAgY29uc3QgTWFwRW50cnkuXyh0aGlzLmtleSwgdGhpcy52YWx1ZSk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJNYXBFbnRyeSgka2V5OiAkdmFsdWUpIjsKfQqBmABOTjwBDwETAQREHQMwOgM1RA0DQDpNA0xPLTghA0xPRgQbBk4FTAVBPykGGgEGTQ4FQi8FQUEpBjoBBkkFQUEpBjwBBk8FQi8FN0E1LwU+SQYwAQZPBUpFJAUuKQY5AQZPEQUrQT8pBU43BUxNIwUlOy0sBScnBUkYBUoYBSsjIwVOSAYuTgEGRgUrQT8pBVE2BSwuSikFTCQFNAZEKQEGLAVPHAVOSCsFTFE7BkElAQYtBT4pBS4zBj8lAQZJEwVHBUouQCcFSRQGHgY6BUclBiQBBjgFQzAGIAEGTwU1T0FQEwYdAQYyBUk3BiUBBiAGKAEGSB0GPwEGOwU2LQVKKgY4AQYvBScFTx8FTDoFTQY2AQYZBUsbBiwBBkkGNAEGRwU9SDEFMDg2CyMjIwVCBiYBBjYFSwVLSTAGIAEGRwVEMQVIKgYYAQYlBSMGEAEGNAU7BigBBhkFTTUFTzgFMB4GGAEGGwVHRDAFSUUWBSslBhoBBi8GEgEGPAYUAQZGBhcCAQQ2BBcfDwEzEQEyPQEqATECARJkYXJ0OmNvcmUvbWFwLmRhcnRMb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvX2ludGVybmFsL3ZtL2xpYi9tYXBfcGF0Y2guZGFydIPxLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIE1hcDxLLCBWPiB7CiAgLy8gRmFjdG9yeSBjb25zdHJ1Y3RpbmcgYSBNYXAgZnJvbSBhIHBhcnNlciBnZW5lcmF0ZWQgTWFwIGxpdGVyYWwuCiAgLy8gW2VsZW1lbnRzXSBjb250YWlucyBuIGtleS12YWx1ZSBwYWlycy4KICAvLyBUaGUga2V5cyBhcmUgYXQgcG9zaXRpb24gMipuIGFuZCBhcmUgYWxyZWFkeSB0eXBlIGNoZWNrZWQgYnkgdGhlIHBhcnNlcgogIC8vIGluIGNoZWNrZWQgbW9kZS4KICAvLyBUaGUgdmFsdWVzIGFyZSBhdCBwb3NpdGlvbiAyKm4rMSBhbmQgYXJlIG5vdCB5ZXQgdHlwZSBjaGVja2VkLgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQogIGZhY3RvcnkgTWFwLl9mcm9tTGl0ZXJhbChMaXN0IGVsZW1lbnRzKSB7CiAgICB2YXIgbWFwID0gbmV3IExpbmtlZEhhc2hNYXA8SywgVj4oKTsKICAgIHZhciBsZW4gPSBlbGVtZW50cy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IGxlbjsgaSArPSAyKSB7CiAgICAgIG1hcFtlbGVtZW50c1tpIC0gMV1dID0gZWxlbWVudHNbaV07CiAgICB9CiAgICByZXR1cm4gbWFwOwogIH0KCiAgQHBhdGNoCiAgZmFjdG9yeSBNYXAudW5tb2RpZmlhYmxlKE1hcCBvdGhlcikgewogICAgcmV0dXJuIG5ldyBVbm1vZGlmaWFibGVNYXBWaWV3PEssIFY+KG5ldyBNYXA8SywgVj4uZnJvbShvdGhlcikpOwogIH0KCiAgQHBhdGNoCiAgZmFjdG9yeSBNYXAoKSA9PiBuZXcgTGlua2VkSGFzaE1hcDxLLCBWPigpOwp9CiMATk48AQ8BHgEHEkUsTRZEJCwpHycqBhAEAQkoRQQBCS4CAR5kYXJ0OmNvcmUtcGF0Y2gvbWFwX3BhdGNoLmRhcnQ7b3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvY29yZS9udWxsLmRhcnSCsC8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogVGhlIHJlc2VydmVkIHdvcmQgWzpudWxsOl0gZGVub3RlcyBhbiBvYmplY3QgdGhhdCBpcyB0aGUgc29sZSBpbnN0YW5jZSBvZiAKICogdGhpcyBjbGFzcy4KICogCiAqIEl0IGlzIGEgY29tcGlsZS10aW1lIGVycm9yIGZvciBhIGNsYXNzIHRvIGF0dGVtcHQgdG8gZXh0ZW5kIG9yIGltcGxlbWVudAogKiBOdWxsLgogKi8KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBOdWxsIHsKICBmYWN0b3J5IE51bGwuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcignY2xhc3MgTnVsbCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkJyk7CiAgfQoKICBleHRlcm5hbCBpbnQgZ2V0IGhhc2hDb2RlOwoKICAvKiogUmV0dXJucyB0aGUgc3RyaW5nIGAibnVsbCJgLiAqLwogIFN0cmluZyB0b1N0cmluZygpID0+ICJudWxsIjsKfQocAE5OPAEPARMBBE4PBEwJBBoNI0EEAR0BJh8CARNkYXJ0OmNvcmUvbnVsbC5kYXJ0TW9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL19pbnRlcm5hbC92bS9saWIvbnVsbF9wYXRjaC5kYXJ0gd4vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgpAcGF0Y2gKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBOdWxsIHsKICBzdGF0aWMgY29uc3QgX0hBU0hfQ09ERSA9IDIwMTE7IC8vIFRoZSB5ZWFyIERhcnQgd2FzIGFubm91bmNlZCBhbmQgYSBwcmltZS4KCiAgQHBhdGNoCiAgaW50IGdldCBoYXNoQ29kZSA9PiBfSEFTSF9DT0RFOwoKICBpbnQgZ2V0IF9pZGVudGl0eUhhc2hDb2RlID0+IF9IQVNIX0NPREU7Cn0KFABOTjwBDwEeAQcaDU4BCSIBKwIBH2RhcnQ6Y29yZS1wYXRjaC9udWxsX3BhdGNoLmRhcnQ6b3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvY29yZS9udW0uZGFydMAAROYvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIEFuIGludGVnZXIgb3IgZmxvYXRpbmctcG9pbnQgbnVtYmVyLgogKgogKiBJdCBpcyBhIGNvbXBpbGUtdGltZSBlcnJvciBmb3IgYW55IHR5cGUgb3RoZXIgdGhhbiBbaW50XSBvciBbZG91YmxlXQogKiB0byBhdHRlbXB0IHRvIGV4dGVuZCBvciBpbXBsZW1lbnQgbnVtLgogKi8KYWJzdHJhY3QgY2xhc3MgbnVtIGltcGxlbWVudHMgQ29tcGFyYWJsZTxudW0+IHsKICAvKioKICAgKiBUZXN0IHdoZXRoZXIgdGhpcyB2YWx1ZSBpcyBudW1lcmljYWxseSBlcXVhbCB0byBgb3RoZXJgLgogICAqCiAgICogSWYgYm90aCBvcGVyYW5kcyBhcmUgZG91YmxlcywgdGhleSBhcmUgZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lCiAgICogcmVwcmVzZW50YXRpb24sIGV4Y2VwdCB0aGF0OgogICAqCiAgICogICAqIHplcm8gYW5kIG1pbnVzIHplcm8gKDAuMCBhbmQgLTAuMCkgYXJlIGNvbnNpZGVyZWQgZXF1YWwuIFRoZXkKICAgKiAgICAgYm90aCBoYXZlIHRoZSBudW1lcmljYWwgdmFsdWUgemVyby4KICAgKiAgICogTmFOIGlzIG5vdCBlcXVhbCB0byBhbnl0aGluZywgaW5jbHVkaW5nIE5hTi4gSWYgZWl0aGVyIG9wZXJhbmQgaXMKICAgKiAgICAgTmFOLCB0aGUgcmVzdWx0IGlzIGFsd2F5cyBmYWxzZS4KICAgKgogICAqIElmIG9uZSBvcGVyYW5kIGlzIGEgZG91YmxlIGFuZCB0aGUgb3RoZXIgaXMgYW4gaW50LCB0aGV5IGFyZSBlcXVhbCBpZgogICAqIHRoZSBkb3VibGUgaGFzIGFuIGludGVnZXIgdmFsdWUgKGZpbml0ZSB3aXRoIG5vIGZyYWN0aW9uYWwgcGFydCkgYW5kCiAgICogYGlkZW50aWNhbChkb3VibGVWYWx1ZS50b0ludCgpLCBpbnRWYWx1ZSlgIGlzIHRydWUuCiAgICoKICAgKiBJZiBib3RoIG9wZXJhbmRzIGFyZSBpbnRlZ2VycywgdGhleSBhcmUgZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIHZhbHVlLgogICAqCiAgICogUmV0dXJucyBmYWxzZSBpZiBgb3RoZXJgIGlzIG5vdCBhIFtudW1dLgogICAqCiAgICogTm90aWNlIHRoYXQgdGhlIGJlaGF2aW9yIGZvciBOYU4gaXMgbm9uLXJlZmxleGl2ZS4gVGhpcyBtZWFucyB0aGF0CiAgICogZXF1YWxpdHkgb2YgZG91YmxlIHZhbHVlcyBpcyBub3QgYSBwcm9wZXIgZXF1YWxpdHkgcmVsYXRpb24sIGFzIGlzCiAgICogb3RoZXJ3aXNlIHJlcXVpcmVkIG9mIGBvcGVyYXRvcj09YC4gVXNpbmcgTmFOIGluLCBlLmcuLCBhIFtIYXNoU2V0XQogICAqIHdpbGwgZmFpbCB0byB3b3JrLiBUaGUgYmVoYXZpb3IgaXMgdGhlIHN0YW5kYXJkIElFRUUtNzU0IGVxdWFsaXR5IG9mCiAgICogZG91Ymxlcy4KICAgKgogICAqIElmIHlvdSBjYW4gYXZvaWQgTmFOIHZhbHVlcywgdGhlIHJlbWFpbmluZyBkb3VibGVzIGRvIGhhdmUgYSBwcm9wZXIKICAgKiBlcXVhbGl0eSByZWxhdGlvbiwgYW5kIGNhbiBiZSB1c2VkIHNhZmVseS4KICAgKgogICAqIFVzZSBbY29tcGFyZVRvXSBmb3IgYSBjb21wYXJpc29uIHRoYXQgZGlzdGluZ3Vpc2hlcyB6ZXJvIGFuZCBtaW51cyB6ZXJvLAogICAqIGFuZCB0aGF0IGNvbnNpZGVycyBOYU4gdmFsdWVzIGFzIGVxdWFsLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIGhhc2ggY29kZSBmb3IgYSBudW1lcmljYWwgdmFsdWUuCiAgICoKICAgKiBUaGUgaGFzaCBjb2RlIGlzIGNvbXBhdGlibGUgd2l0aCBlcXVhbGl0eS4gSXQgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZQogICAqIGZvciBhbiBbaW50XSBhbmQgYSBbZG91YmxlXSB3aXRoIHRoZSBzYW1lIG51bWVyaWNhbCB2YWx1ZSwgYW5kIHRoZXJlZm9yZQogICAqIHRoZSBzYW1lIHZhbHVlIGZvciB0aGUgZG91YmxlcyB6ZXJvIGFuZCBtaW51cyB6ZXJvLgogICAqCiAgICogTm8gZ3VhcmFudGVlcyBhcmUgbWFkZSBhYm91dCB0aGUgaGFzaCBjb2RlIG9mIE5hTiB2YWx1ZXMuCiAgICovCiAgaW50IGdldCBoYXNoQ29kZTsKCiAgLyoqCiAgICogQ29tcGFyZXMgdGhpcyB0byBgb3RoZXJgLgogICAqCiAgICogUmV0dXJucyBhIG5lZ2F0aXZlIG51bWJlciBpZiBgdGhpc2AgaXMgbGVzcyB0aGFuIGBvdGhlcmAsIHplcm8gaWYgdGhleSBhcmUKICAgKiBlcXVhbCwgYW5kIGEgcG9zaXRpdmUgbnVtYmVyIGlmIGB0aGlzYCBpcyBncmVhdGVyIHRoYW4gYG90aGVyYC4KICAgKgogICAqIFRoZSBvcmRlcmluZyByZXByZXNlbnRlZCBieSB0aGlzIG1ldGhvZCBpcyBhIHRvdGFsIG9yZGVyaW5nIG9mIFtudW1dCiAgICogdmFsdWVzLiBBbGwgZGlzdGluY3QgZG91YmxlcyBhcmUgbm9uLWVxdWFsLCBhcyBhcmUgYWxsIGRpc3RpbmN0IGludGVnZXJzLAogICAqIGJ1dCBpbnRlZ2VycyBhcmUgZXF1YWwgdG8gZG91YmxlcyBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgbnVtZXJpY2FsCiAgICogdmFsdWUuCiAgICoKICAgKiBGb3IgZG91YmxlcywgdGhlIGBjb21wYXJlVG9gIG9wZXJhdGlvbiBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcGFydGlhbAogICAqIG9yZGVyaW5nIGdpdmVuIGJ5IFtvcGVyYXRvcj09XSwgW29wZXJhdG9yPF0gYW5kIFtvcGVyYXRvcj5dLiBGb3IgZXhhbXBsZSwKICAgKiBJRUVFIGRvdWJsZXMgaW1wb3NlIHRoYXQgYDAuMCA9PSAtMC4wYCBhbmQgYWxsIGNvbXBhcmlzb24gb3BlcmF0aW9ucyBvbgogICAqIE5hTiByZXR1cm4gZmFsc2UuCiAgICoKICAgKiBUaGlzIGZ1bmN0aW9uIGltcG9zZXMgYSBjb21wbGV0ZSBvcmRlcmluZyBmb3IgZG91Ymxlcy4gV2hlbiB1c2luZwogICAqIGBjb21wYXJlVG9gIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBob2xkOgogICAqCiAgICogLSBBbGwgTmFOIHZhbHVlcyBhcmUgY29uc2lkZXJlZCBlcXVhbCwgYW5kIGdyZWF0ZXIgdGhhbiBhbnkgbnVtZXJpYyB2YWx1ZS4KICAgKiAtIC0wLjAgaXMgbGVzcyB0aGFuIDAuMCAoYW5kIHRoZSBpbnRlZ2VyIDApLCBidXQgZ3JlYXRlciB0aGFuIGFueSBub24temVybwogICAqICAgIG5lZ2F0aXZlIHZhbHVlLgogICAqIC0gTmVnYXRpdmUgaW5maW5pdHkgaXMgbGVzcyB0aGFuIGFsbCBvdGhlciB2YWx1ZXMgYW5kIHBvc2l0aXZlIGluZmluaXR5IGlzCiAgICogICBncmVhdGVyIHRoYW4gYWxsIG5vbi1OYU4gdmFsdWVzLgogICAqIC0gQWxsIG90aGVyIHZhbHVlcyBhcmUgY29tcGFyZWQgdXNpbmcgdGhlaXIgbnVtZXJpYyB2YWx1ZS4KICAgKgogICAqIEV4YW1wbGVzOgogICAqIGBgYAogICAqIHByaW50KDEuY29tcGFyZVRvKDIpKTsgLy8gPT4gLTEKICAgKiBwcmludCgyLmNvbXBhcmVUbygxKSk7IC8vID0+IDEKICAgKiBwcmludCgxLmNvbXBhcmVUbygxKSk7IC8vID0+IDAKICAgKgogICAqIC8vIFRoZSBmb2xsb3dpbmcgY29tcGFyaXNvbnMgeWllbGQgZGlmZmVyZW50IHJlc3VsdHMgdGhhbiB0aGUKICAgKiAvLyBjb3JyZXNwb25kaW5nIGNvbXBhcmlzb24gb3BlcmF0b3JzLgogICAqIHByaW50KCgtMC4wKS5jb21wYXJlVG8oMC4wKSk7ICAvLyA9PiAtMQogICAqIHByaW50KGRvdWJsZS5uYW4uY29tcGFyZVRvKGRvdWJsZS5uYW4pKTsgIC8vID0+IDAKICAgKiBwcmludChkb3VibGUuaW5maW5pdHkuY29tcGFyZVRvKGRvdWJsZS5uYW4pKTsgLy8gPT4gLTEKICAgKgogICAqIC8vIC0wLjAsIGFuZCBOYU4gY29tcGFyaXNvbiBvcGVyYXRvcnMgaGF2ZSBydWxlcyBpbXBvc2VkIGJ5IHRoZSBJRUVFCiAgICogLy8gc3RhbmRhcmQuCiAgICogcHJpbnQoLTAuMCA9PSAwLjApOyAvLyA9PiB0cnVlCiAgICogcHJpbnQoZG91YmxlLm5hbiA9PSBkb3VibGUubmFuKTsgIC8vID0+IGZhbHNlCiAgICogcHJpbnQoZG91YmxlLmluZmluaXR5IDwgZG91YmxlLm5hbik7ICAvLyA9PiBmYWxzZQogICAqIHByaW50KGRvdWJsZS5uYW4gPCBkb3VibGUuaW5maW5pdHkpOyAgLy8gPT4gZmFsc2UKICAgKiBwcmludChkb3VibGUubmFuID09IGRvdWJsZS5pbmZpbml0eSk7ICAvLyA9PiBmYWxzZQogICAqIGBgYAogICAqLwogIGludCBjb21wYXJlVG8obnVtIG90aGVyKTsKCiAgLyoqIEFkZGl0aW9uIG9wZXJhdG9yLiAqLwogIG51bSBvcGVyYXRvciArKG51bSBvdGhlcik7CgogIC8qKiBTdWJ0cmFjdGlvbiBvcGVyYXRvci4gKi8KICBudW0gb3BlcmF0b3IgLShudW0gb3RoZXIpOwoKICAvKiogTXVsdGlwbGljYXRpb24gb3BlcmF0b3IuICovCiAgbnVtIG9wZXJhdG9yICoobnVtIG90aGVyKTsKCiAgLyoqCiAgICogRXVjbGlkZWFuIG1vZHVsbyBvcGVyYXRvci4KICAgKgogICAqIFJldHVybnMgdGhlIHJlbWFpbmRlciBvZiB0aGUgRXVjbGlkZWFuIGRpdmlzaW9uLiBUaGUgRXVjbGlkZWFuIGRpdmlzaW9uIG9mCiAgICogdHdvIGludGVnZXJzIGBhYCBhbmQgYGJgIHlpZWxkcyB0d28gaW50ZWdlcnMgYHFgIGFuZCBgcmAgc3VjaCB0aGF0CiAgICogYGEgPT0gYiAqIHEgKyByYCBhbmQgYDAgPD0gciA8IGIuYWJzKClgLgogICAqCiAgICogVGhlIEV1Y2xpZGVhbiBkaXZpc2lvbiBpcyBvbmx5IGRlZmluZWQgZm9yIGludGVnZXJzLCBidXQgY2FuIGJlIGVhc2lseQogICAqIGV4dGVuZGVkIHRvIHdvcmsgd2l0aCBkb3VibGVzLiBJbiB0aGF0IGNhc2UgYHJgIG1heSBoYXZlIGEgbm9uLWludGVnZXIKICAgKiB2YWx1ZSwgYnV0IGl0IHN0aWxsIHZlcmlmaWVzIGAwIDw9IHIgPCB8YnxgLgogICAqCiAgICogVGhlIHNpZ24gb2YgdGhlIHJldHVybmVkIHZhbHVlIGByYCBpcyBhbHdheXMgcG9zaXRpdmUuCiAgICoKICAgKiBTZWUgW3JlbWFpbmRlcl0gZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIHRydW5jYXRpbmcgZGl2aXNpb24uCiAgICovCiAgbnVtIG9wZXJhdG9yICUobnVtIG90aGVyKTsKCiAgLyoqIERpdmlzaW9uIG9wZXJhdG9yLiAqLwogIGRvdWJsZSBvcGVyYXRvciAvKG51bSBvdGhlcik7CgogIC8qKgogICAqIFRydW5jYXRpbmcgZGl2aXNpb24gb3BlcmF0b3IuCiAgICoKICAgKiBJZiBlaXRoZXIgb3BlcmFuZCBpcyBhIFtkb3VibGVdIHRoZW4gdGhlIHJlc3VsdCBvZiB0aGUgdHJ1bmNhdGluZyBkaXZpc2lvbgogICAqIGBhIH4vIGJgIGlzIGVxdWl2YWxlbnQgdG8gYChhIC8gYikudHJ1bmNhdGUoKS50b0ludCgpYC4KICAgKgogICAqIElmIGJvdGggb3BlcmFuZHMgYXJlIFtpbnRdcyB0aGVuIGBhIH4vIGJgIHBlcmZvcm1zIHRoZSB0cnVuY2F0aW5nCiAgICogaW50ZWdlciBkaXZpc2lvbi4KICAgKi8KICBpbnQgb3BlcmF0b3Igfi8obnVtIG90aGVyKTsKCiAgLyoqIE5lZ2F0ZSBvcGVyYXRvci4gKi8KICBudW0gb3BlcmF0b3IgLSgpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSByZW1haW5kZXIgb2YgdGhlIHRydW5jYXRpbmcgZGl2aXNpb24gb2YgYHRoaXNgIGJ5IFtvdGhlcl0uCiAgICoKICAgKiBUaGUgcmVzdWx0IGByYCBvZiB0aGlzIG9wZXJhdGlvbiBzYXRpc2ZpZXM6CiAgICogYHRoaXMgPT0gKHRoaXMgfi8gb3RoZXIpICogb3RoZXIgKyByYC4KICAgKiBBcyBhIGNvbnNlcXVlbmNlIHRoZSByZW1haW5kZXIgYHJgIGhhcyB0aGUgc2FtZSBzaWduIGFzIHRoZSBkaXZpZGVyIGB0aGlzYC4KICAgKi8KICBudW0gcmVtYWluZGVyKG51bSBvdGhlcik7CgogIC8qKiBSZWxhdGlvbmFsIGxlc3MgdGhhbiBvcGVyYXRvci4gKi8KICBib29sIG9wZXJhdG9yIDwobnVtIG90aGVyKTsKCiAgLyoqIFJlbGF0aW9uYWwgbGVzcyB0aGFuIG9yIGVxdWFsIG9wZXJhdG9yLiAqLwogIGJvb2wgb3BlcmF0b3IgPD0obnVtIG90aGVyKTsKCiAgLyoqIFJlbGF0aW9uYWwgZ3JlYXRlciB0aGFuIG9wZXJhdG9yLiAqLwogIGJvb2wgb3BlcmF0b3IgPihudW0gb3RoZXIpOwoKICAvKiogUmVsYXRpb25hbCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgb3BlcmF0b3IuICovCiAgYm9vbCBvcGVyYXRvciA+PShudW0gb3RoZXIpOwoKICAvKiogVHJ1ZSBpZiB0aGUgbnVtYmVyIGlzIHRoZSBkb3VibGUgTm90LWEtTnVtYmVyIHZhbHVlOyBvdGhlcndpc2UsIGZhbHNlLiAqLwogIGJvb2wgZ2V0IGlzTmFOOwoKICAvKioKICAgKiBUcnVlIGlmIHRoZSBudW1iZXIgaXMgbmVnYXRpdmU7IG90aGVyd2lzZSwgZmFsc2UuCiAgICoKICAgKiBOZWdhdGl2ZSBudW1iZXJzIGFyZSB0aG9zZSBsZXNzIHRoYW4gemVybywgYW5kIHRoZSBkb3VibGUgYC0wLjBgLgogICAqLwogIGJvb2wgZ2V0IGlzTmVnYXRpdmU7CgogIC8qKgogICAqIFRydWUgaWYgdGhlIG51bWJlciBpcyBwb3NpdGl2ZSBpbmZpbml0eSBvciBuZWdhdGl2ZSBpbmZpbml0eTsgb3RoZXJ3aXNlLAogICAqIGZhbHNlLgogICAqLwogIGJvb2wgZ2V0IGlzSW5maW5pdGU7CgogIC8qKgogICAqIFRydWUgaWYgdGhlIG51bWJlciBpcyBmaW5pdGU7IG90aGVyd2lzZSwgZmFsc2UuCiAgICoKICAgKiBUaGUgb25seSBub24tZmluaXRlIG51bWJlcnMgYXJlIE5hTiwgcG9zaXRpdmUgaW5maW5pdHksIGFuZAogICAqIG5lZ2F0aXZlIGluZmluaXR5LgogICAqLwogIGJvb2wgZ2V0IGlzRmluaXRlOwoKICAvKiogUmV0dXJucyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhpcyBbbnVtXS4gKi8KICBudW0gYWJzKCk7CgogIC8qKgogICAqIFJldHVybnMgbWludXMgb25lLCB6ZXJvIG9yIHBsdXMgb25lIGRlcGVuZGluZyBvbiB0aGUgc2lnbiBhbmQKICAgKiBudW1lcmljYWwgdmFsdWUgb2YgdGhlIG51bWJlci4KICAgKgogICAqIFJldHVybnMgbWludXMgb25lIGlmIHRoZSBudW1iZXIgaXMgbGVzcyB0aGFuIHplcm8sCiAgICogcGx1cyBvbmUgaWYgdGhlIG51bWJlciBpcyBncmVhdGVyIHRoYW4gemVybywKICAgKiBhbmQgemVybyBpZiB0aGUgbnVtYmVyIGlzIGVxdWFsIHRvIHplcm8uCiAgICoKICAgKiBSZXR1cm5zIE5hTiBpZiB0aGUgbnVtYmVyIGlzIHRoZSBkb3VibGUgTmFOIHZhbHVlLgogICAqCiAgICogUmV0dXJucyBhIG51bWJlciBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoaXMgbnVtYmVyLgogICAqIEZvciBkb3VibGVzLCBgLTAuMC5zaWduID09IC0wLjBgLgoKICAgKiBUaGUgcmVzdWx0IHNhdGlzZmllczoKICAgKgogICAqICAgICBuID09IG4uc2lnbiAqIG4uYWJzKCkKICAgKgogICAqIGZvciBhbGwgbnVtYmVycyBgbmAgKGV4Y2VwdCBOYU4sIGJlY2F1c2UgTmFOIGlzbid0IGA9PWAgdG8gaXRzZWxmKS4KICAgKi8KICBudW0gZ2V0IHNpZ247CgogIC8qKgogICAqIFJldHVybnMgdGhlIGludGVnZXIgY2xvc2VzdCB0byBgdGhpc2AuCiAgICoKICAgKiBSb3VuZHMgYXdheSBmcm9tIHplcm8gd2hlbiB0aGVyZSBpcyBubyBjbG9zZXN0IGludGVnZXI6CiAgICogIGAoMy41KS5yb3VuZCgpID09IDRgIGFuZCBgKC0zLjUpLnJvdW5kKCkgPT0gLTRgLgogICAqCiAgICogSWYgYHRoaXNgIGlzIG5vdCBmaW5pdGUgKGBOYU5gIG9yIGluZmluaXR5KSwgdGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXS4KICAgKi8KICBpbnQgcm91bmQoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZ3JlYXRlc3QgaW50ZWdlciBubyBncmVhdGVyIHRoYW4gYHRoaXNgLgogICAqCiAgICogSWYgYHRoaXNgIGlzIG5vdCBmaW5pdGUgKGBOYU5gIG9yIGluZmluaXR5KSwgdGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXS4KICAgKi8KICBpbnQgZmxvb3IoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGVhc3QgaW50ZWdlciBubyBzbWFsbGVyIHRoYW4gYHRoaXNgLgogICAqCiAgICogSWYgYHRoaXNgIGlzIG5vdCBmaW5pdGUgKGBOYU5gIG9yIGluZmluaXR5KSwgdGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXS4KICAgKi8KICBpbnQgY2VpbCgpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBpbnRlZ2VyIG9idGFpbmVkIGJ5IGRpc2NhcmRpbmcgYW55IGZyYWN0aW9uYWwKICAgKiBkaWdpdHMgZnJvbSBgdGhpc2AuCiAgICoKICAgKiBJZiBgdGhpc2AgaXMgbm90IGZpbml0ZSAoYE5hTmAgb3IgaW5maW5pdHkpLCB0aHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdLgogICAqLwogIGludCB0cnVuY2F0ZSgpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBkb3VibGUgaW50ZWdlciB2YWx1ZSBjbG9zZXN0IHRvIGB0aGlzYC4KICAgKgogICAqIFJvdW5kcyBhd2F5IGZyb20gemVybyB3aGVuIHRoZXJlIGlzIG5vIGNsb3Nlc3QgaW50ZWdlcjoKICAgKiAgYCgzLjUpLnJvdW5kVG9Eb3VibGUoKSA9PSA0YCBhbmQgYCgtMy41KS5yb3VuZFRvRG91YmxlKCkgPT0gLTRgLgogICAqCiAgICogSWYgdGhpcyBpcyBhbHJlYWR5IGFuIGludGVnZXIgdmFsdWVkIGRvdWJsZSwgaW5jbHVkaW5nIGAtMC4wYCwgb3IgaXQgaXMgYQogICAqIG5vbi1maW5pdGUgZG91YmxlIHZhbHVlLCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgdW5tb2RpZmllZC4KICAgKgogICAqIEZvciB0aGUgcHVycG9zZSBvZiByb3VuZGluZywgYC0wLjBgIGlzIGNvbnNpZGVyZWQgdG8gYmUgYmVsb3cgYDAuMGAsCiAgICogYW5kIGAtMC4wYCBpcyB0aGVyZWZvcmUgY29uc2lkZXJlZCBjbG9zZXIgdG8gbmVnYXRpdmUgbnVtYmVycyB0aGFuIGAwLjBgLgogICAqIFRoaXMgbWVhbnMgdGhhdCBmb3IgYSB2YWx1ZSwgYGRgIGluIHRoZSByYW5nZSBgLTAuNSA8IGQgPCAwLjBgLAogICAqIHRoZSByZXN1bHQgaXMgYC0wLjBgLgogICAqCiAgICogVGhlIHJlc3VsdCBpcyBhbHdheXMgYSBkb3VibGUuCiAgICogSWYgdGhpcyBpcyBhIG51bWVyaWNhbGx5IGxhcmdlIGludGVnZXIsIHRoZSByZXN1bHQgbWF5IGJlIGFuIGluZmluaXRlCiAgICogZG91YmxlLgogICAqLwogIGRvdWJsZSByb3VuZFRvRG91YmxlKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGdyZWF0ZXN0IGRvdWJsZSBpbnRlZ2VyIHZhbHVlIG5vIGdyZWF0ZXIgdGhhbiBgdGhpc2AuCiAgICoKICAgKiBJZiB0aGlzIGlzIGFscmVhZHkgYW4gaW50ZWdlciB2YWx1ZWQgZG91YmxlLCBpbmNsdWRpbmcgYC0wLjBgLCBvciBpdCBpcyBhCiAgICogbm9uLWZpbml0ZSBkb3VibGUgdmFsdWUsIHRoZSB2YWx1ZSBpcyByZXR1cm5lZCB1bm1vZGlmaWVkLgogICAqCiAgICogRm9yIHRoZSBwdXJwb3NlIG9mIHJvdW5kaW5nLCBgLTAuMGAgaXMgY29uc2lkZXJlZCB0byBiZSBiZWxvdyBgMC4wYC4KICAgKiBBIG51bWJlciBgZGAgaW4gdGhlIHJhbmdlIGAwLjAgPCBkIDwgMS4wYCB3aWxsIHJldHVybiBgMC4wYC4KICAgKgogICAqIFRoZSByZXN1bHQgaXMgYWx3YXlzIGEgZG91YmxlLgogICAqIElmIHRoaXMgaXMgYSBudW1lcmljYWxseSBsYXJnZSBpbnRlZ2VyLCB0aGUgcmVzdWx0IG1heSBiZSBhbiBpbmZpbml0ZQogICAqIGRvdWJsZS4KICAgKi8KICBkb3VibGUgZmxvb3JUb0RvdWJsZSgpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsZWFzdCBkb3VibGUgaW50ZWdlciB2YWx1ZSBubyBzbWFsbGVyIHRoYW4gYHRoaXNgLgogICAqCiAgICogSWYgdGhpcyBpcyBhbHJlYWR5IGFuIGludGVnZXIgdmFsdWVkIGRvdWJsZSwgaW5jbHVkaW5nIGAtMC4wYCwgb3IgaXQgaXMgYQogICAqIG5vbi1maW5pdGUgZG91YmxlIHZhbHVlLCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgdW5tb2RpZmllZC4KICAgKgogICAqIEZvciB0aGUgcHVycG9zZSBvZiByb3VuZGluZywgYC0wLjBgIGlzIGNvbnNpZGVyZWQgdG8gYmUgYmVsb3cgYDAuMGAuCiAgICogQSBudW1iZXIgYGRgIGluIHRoZSByYW5nZSBgLTEuMCA8IGQgPCAwLjBgIHdpbGwgcmV0dXJuIGAtMC4wYC4KICAgKgogICAqIFRoZSByZXN1bHQgaXMgYWx3YXlzIGEgZG91YmxlLgogICAqIElmIHRoaXMgaXMgYSBudW1lcmljYWxseSBsYXJnZSBpbnRlZ2VyLCB0aGUgcmVzdWx0IG1heSBiZSBhbiBpbmZpbml0ZQogICAqIGRvdWJsZS4KICAgKi8KICBkb3VibGUgY2VpbFRvRG91YmxlKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGRvdWJsZSBpbnRlZ2VyIHZhbHVlIG9idGFpbmVkIGJ5IGRpc2NhcmRpbmcgYW55IGZyYWN0aW9uYWwKICAgKiBkaWdpdHMgZnJvbSB0aGUgZG91YmxlIHZhbHVlIG9mIGB0aGlzYC4KICAgKgogICAqIElmIHRoaXMgaXMgYWxyZWFkeSBhbiBpbnRlZ2VyIHZhbHVlZCBkb3VibGUsIGluY2x1ZGluZyBgLTAuMGAsIG9yIGl0IGlzIGEKICAgKiBub24tZmluaXRlIGRvdWJsZSB2YWx1ZSwgdGhlIHZhbHVlIGlzIHJldHVybmVkIHVubW9kaWZpZWQuCiAgICoKICAgKiBGb3IgdGhlIHB1cnBvc2Ugb2Ygcm91bmRpbmcsIGAtMC4wYCBpcyBjb25zaWRlcmVkIHRvIGJlIGJlbG93IGAwLjBgLgogICAqIEEgbnVtYmVyIGBkYCBpbiB0aGUgcmFuZ2UgYC0xLjAgPCBkIDwgMC4wYCB3aWxsIHJldHVybiBgLTAuMGAsIGFuZAogICAqIGluIHRoZSByYW5nZSBgMC4wIDwgZCA8IDEuMGAgaXQgd2lsbCByZXR1cm4gMC4wLgogICAqCiAgICogVGhlIHJlc3VsdCBpcyBhbHdheXMgYSBkb3VibGUuCiAgICogSWYgdGhpcyBpcyBhIG51bWVyaWNhbGx5IGxhcmdlIGludGVnZXIsIHRoZSByZXN1bHQgbWF5IGJlIGFuIGluZmluaXRlCiAgICogZG91YmxlLgogICAqLwogIGRvdWJsZSB0cnVuY2F0ZVRvRG91YmxlKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhpcyBbbnVtXSBjbGFtcGVkIHRvIGJlIGluIHRoZSByYW5nZSBbbG93ZXJMaW1pdF0tW3VwcGVyTGltaXRdLgogICAqCiAgICogVGhlIGNvbXBhcmlzb24gaXMgZG9uZSB1c2luZyBbY29tcGFyZVRvXSBhbmQgdGhlcmVmb3JlIHRha2VzIGAtMC4wYCBpbnRvCiAgICogYWNjb3VudC4gVGhpcyBhbHNvIGltcGxpZXMgdGhhdCBbZG91YmxlLm5hbl0gaXMgdHJlYXRlZCBhcyB0aGUgbWF4aW1hbAogICAqIGRvdWJsZSB2YWx1ZS4KICAgKgogICAqIFRoZSBhcmd1bWVudHMgW2xvd2VyTGltaXRdIGFuZCBbdXBwZXJMaW1pdF0gbXVzdCBmb3JtIGEgdmFsaWQgcmFuZ2Ugd2hlcmUKICAgKiBgbG93ZXJMaW1pdC5jb21wYXJlVG8odXBwZXJMaW1pdCkgPD0gMGAuCiAgICovCiAgbnVtIGNsYW1wKG51bSBsb3dlckxpbWl0LCBudW0gdXBwZXJMaW1pdCk7CgogIC8qKiBUcnVuY2F0ZXMgdGhpcyBbbnVtXSB0byBhbiBpbnRlZ2VyIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgYXMgYW4gW2ludF0uICovCiAgaW50IHRvSW50KCk7CgogIC8qKgogICAqIFJldHVybiB0aGlzIFtudW1dIGFzIGEgW2RvdWJsZV0uCiAgICoKICAgKiBJZiB0aGUgbnVtYmVyIGlzIG5vdCByZXByZXNlbnRhYmxlIGFzIGEgW2RvdWJsZV0sIGFuCiAgICogYXBwcm94aW1hdGlvbiBpcyByZXR1cm5lZC4gRm9yIG51bWVyaWNhbGx5IGxhcmdlIGludGVnZXJzLCB0aGUKICAgKiBhcHByb3hpbWF0aW9uIG1heSBiZSBpbmZpbml0ZS4KICAgKi8KICBkb3VibGUgdG9Eb3VibGUoKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIGRlY2ltYWwtcG9pbnQgc3RyaW5nLXJlcHJlc2VudGF0aW9uIG9mIGB0aGlzYC4KICAgKgogICAqIENvbnZlcnRzIGB0aGlzYCB0byBhIFtkb3VibGVdIGJlZm9yZSBjb21wdXRpbmcgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbi4KICAgKgogICAqIElmIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBgdGhpc2AgaXMgZ3JlYXRlciBvciBlcXVhbCB0byBgMTBeMjFgIHRoZW4gdGhpcwogICAqIG1ldGhvZHMgcmV0dXJucyBhbiBleHBvbmVudGlhbCByZXByZXNlbnRhdGlvbiBjb21wdXRlZCBieQogICAqIGB0aGlzLnRvU3RyaW5nQXNFeHBvbmVudGlhbCgpYC4gT3RoZXJ3aXNlIHRoZSByZXN1bHQKICAgKiBpcyB0aGUgY2xvc2VzdCBzdHJpbmcgcmVwcmVzZW50YXRpb24gd2l0aCBleGFjdGx5IFtmcmFjdGlvbkRpZ2l0c10gZGlnaXRzCiAgICogYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuIElmIFtmcmFjdGlvbkRpZ2l0c10gZXF1YWxzIDAgdGhlbiB0aGUgZGVjaW1hbAogICAqIHBvaW50IGlzIG9taXR0ZWQuCiAgICoKICAgKiBUaGUgcGFyYW1ldGVyIFtmcmFjdGlvbkRpZ2l0c10gbXVzdCBiZSBhbiBpbnRlZ2VyIHNhdGlzZnlpbmc6CiAgICogYDAgPD0gZnJhY3Rpb25EaWdpdHMgPD0gMjBgLgogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICAgMS50b1N0cmluZ0FzRml4ZWQoMyk7ICAvLyAxLjAwMAogICAqICAgICAoNDMyMS4xMjM0NTY3OCkudG9TdHJpbmdBc0ZpeGVkKDMpOyAgLy8gNDMyMS4xMjMKICAgKiAgICAgKDQzMjEuMTIzNDU2NzgpLnRvU3RyaW5nQXNGaXhlZCg1KTsgIC8vIDQzMjEuMTIzNDYKICAgKiAgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxLnRvU3RyaW5nQXNGaXhlZCgzKTsgIC8vIDEyMzQ1Njc4OTAxMjM0NTY4Mzk2OC4wMDAKICAgKiAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMC50b1N0cmluZ0FzRml4ZWQoMyk7IC8vIDFlKzIxCiAgICogICAgIDUuMjUudG9TdHJpbmdBc0ZpeGVkKDApOyAvLyA1CiAgICovCiAgU3RyaW5nIHRvU3RyaW5nQXNGaXhlZChpbnQgZnJhY3Rpb25EaWdpdHMpOwoKICAvKioKICAgKiBSZXR1cm5zIGFuIGV4cG9uZW50aWFsIHN0cmluZy1yZXByZXNlbnRhdGlvbiBvZiBgdGhpc2AuCiAgICoKICAgKiBDb252ZXJ0cyBgdGhpc2AgdG8gYSBbZG91YmxlXSBiZWZvcmUgY29tcHV0aW5nIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24uCiAgICoKICAgKiBJZiBbZnJhY3Rpb25EaWdpdHNdIGlzIGdpdmVuIHRoZW4gaXQgbXVzdCBiZSBhbiBpbnRlZ2VyIHNhdGlzZnlpbmc6CiAgICogYDAgPD0gZnJhY3Rpb25EaWdpdHMgPD0gMjBgLiBJbiB0aGlzIGNhc2UgdGhlIHN0cmluZyBjb250YWlucyBleGFjdGx5CiAgICogW2ZyYWN0aW9uRGlnaXRzXSBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4gT3RoZXJ3aXNlLCB3aXRob3V0IHRoZSBwYXJhbWV0ZXIsCiAgICogdGhlIHJldHVybmVkIHN0cmluZyB1c2VzIHRoZSBzaG9ydGVzdCBudW1iZXIgb2YgZGlnaXRzIHRoYXQgYWNjdXJhdGVseQogICAqIHJlcHJlc2VudCBbdGhpc10uCiAgICoKICAgKiBJZiBbZnJhY3Rpb25EaWdpdHNdIGVxdWFscyAwIHRoZW4gdGhlIGRlY2ltYWwgcG9pbnQgaXMgb21pdHRlZC4KICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgICAxLnRvU3RyaW5nQXNFeHBvbmVudGlhbCgpOyAgICAgICAvLyAxZSswCiAgICogICAgIDEudG9TdHJpbmdBc0V4cG9uZW50aWFsKDMpOyAgICAgIC8vIDEuMDAwZSswCiAgICogICAgIDEyMzQ1Ni50b1N0cmluZ0FzRXhwb25lbnRpYWwoKTsgIC8vIDEuMjM0NTZlKzUKICAgKiAgICAgMTIzNDU2LnRvU3RyaW5nQXNFeHBvbmVudGlhbCgzKTsgLy8gMS4yMzVlKzUKICAgKiAgICAgMTIzLnRvU3RyaW5nQXNFeHBvbmVudGlhbCgwKTsgICAgLy8gMWUrMgogICAqLwogIFN0cmluZyB0b1N0cmluZ0FzRXhwb25lbnRpYWwoW2ludCBmcmFjdGlvbkRpZ2l0c10pOwoKICAvKioKICAgKiBDb252ZXJ0cyBgdGhpc2AgdG8gYSBkb3VibGUgYW5kIHJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gd2l0aAogICAqIGV4YWN0bHkgW3ByZWNpc2lvbl0gc2lnbmlmaWNhbnQgZGlnaXRzLgogICAqCiAgICogVGhlIHBhcmFtZXRlciBbcHJlY2lzaW9uXSBtdXN0IGJlIGFuIGludGVnZXIgc2F0aXNmeWluZzoKICAgKiBgMSA8PSBwcmVjaXNpb24gPD0gMjFgLgogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICAgMS50b1N0cmluZ0FzUHJlY2lzaW9uKDIpOyAgICAgICAvLyAxLjAKICAgKiAgICAgMWUxNS50b1N0cmluZ0FzUHJlY2lzaW9uKDMpOyAgICAvLyAxLjAwZSsxNQogICAqICAgICAxMjM0NTY3LnRvU3RyaW5nQXNQcmVjaXNpb24oMyk7IC8vIDEuMjNlKzYKICAgKiAgICAgMTIzNDU2Ny50b1N0cmluZ0FzUHJlY2lzaW9uKDkpOyAvLyAxMjM0NTY3LjAwCiAgICogICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwLnRvU3RyaW5nQXNQcmVjaXNpb24oMjApOyAvLyAxMjM0NTY3ODkwMTIzNDU2NzE2OAogICAqICAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MC50b1N0cmluZ0FzUHJlY2lzaW9uKDE0KTsgLy8gMS4yMzQ1Njc4OTAxMjM1ZSsxOQogICAqICAgICAwLjAwMDAwMDEyMzQ1LnRvU3RyaW5nQXNQcmVjaXNpb24oMTUpOyAvLyAxLjIzNDUwMDAwMDAwMDAwZS03CiAgICogICAgIDAuMDAwMDAxMjM0NS50b1N0cmluZ0FzUHJlY2lzaW9uKDE1KTsgIC8vIDAuMDAwMDAxMjM0NTAwMDAwMDAwMDAKICAgKi8KICBTdHJpbmcgdG9TdHJpbmdBc1ByZWNpc2lvbihpbnQgcHJlY2lzaW9uKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc2hvcnRlc3Qgc3RyaW5nIHRoYXQgY29ycmVjdGx5IHJlcHJlc2VudCB0aGUgaW5wdXQgbnVtYmVyLgogICAqCiAgICogQWxsIFtkb3VibGVdcyBpbiB0aGUgcmFuZ2UgYDEwXi02YCAoaW5jbHVzaXZlKSB0byBgMTBeMjFgIChleGNsdXNpdmUpCiAgICogYXJlIGNvbnZlcnRlZCB0byB0aGVpciBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIHdpdGggYXQgbGVhc3Qgb25lIGRpZ2l0CiAgICogYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuIEZvciBhbGwgb3RoZXIgZG91YmxlcywKICAgKiBleGNlcHQgZm9yIHNwZWNpYWwgdmFsdWVzIGxpa2UgYE5hTmAgb3IgYEluZmluaXR5YCwgdGhpcyBtZXRob2QgcmV0dXJucyBhbgogICAqIGV4cG9uZW50aWFsIHJlcHJlc2VudGF0aW9uIChzZWUgW3RvU3RyaW5nQXNFeHBvbmVudGlhbF0pLgogICAqCiAgICogUmV0dXJucyBgIk5hTiJgIGZvciBbZG91YmxlLm5hbl0sIGAiSW5maW5pdHkiYCBmb3IgW2RvdWJsZS5pbmZpbml0eV0sIGFuZAogICAqIGAiLUluZmluaXR5ImAgZm9yIFtkb3VibGUubmVnYXRpdmVJbmZpbml0eV0uCiAgICoKICAgKiBBbiBbaW50XSBpcyBjb252ZXJ0ZWQgdG8gYSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIHdpdGggbm8gZGVjaW1hbCBwb2ludC4KICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgICgwLjAwMDAwMSkudG9TdHJpbmcoKTsgIC8vICIwLjAwMDAwMSIKICAgKiAgICAgKDAuMDAwMDAwMSkudG9TdHJpbmcoKTsgLy8gIjFlLTciCiAgICogICAgICgxMTExMTExMTExMTExMTExMTExMTEuMCkudG9TdHJpbmcoKTsgIC8vICIxMTExMTExMTExMTExMTExMTAwMDAuMCIKICAgKiAgICAgKDEwMDAwMDAwMDAwMDAwMDAwMDAwMC4wKS50b1N0cmluZygpOyAgLy8gIjEwMDAwMDAwMDAwMDAwMDAwMDAwMC4wIgogICAqICAgICAoMTAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wKS50b1N0cmluZygpOyAvLyAiMWUrMjEiCiAgICogICAgICgxMTExMTExMTExMTExMTExMTExMTExLjApLnRvU3RyaW5nKCk7IC8vICIxLjExMTExMTExMTExMTExMTFlKzIxIgogICAqICAgICAxLnRvU3RyaW5nKCk7IC8vICIxIgogICAqICAgICAxMTExMTExMTExMTExMTExMTExMTEudG9TdHJpbmcoKTsgIC8vICIxMTExMTExMTExMTExMTExMTAwMDAiCiAgICogICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMC50b1N0cmluZygpOyAgLy8gIjEwMDAwMDAwMDAwMDAwMDAwMDAwMCIKICAgKiAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMC50b1N0cmluZygpOyAvLyAiMTAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKICAgKiAgICAgMTExMTExMTExMTExMTExMTExMTExMS50b1N0cmluZygpOyAvLyAiMTExMTExMTExMTExMTExMTExMTExMSIKICAgKiAgICAgMS4yMzRlNS50b1N0cmluZygpOyAgIC8vIDEyMzQwMAogICAqICAgICAxMjM0LjVlNi50b1N0cmluZygpOyAgLy8gMTIzNDUwMDAwMAogICAqICAgICAxMi4zNDVlNjcudG9TdHJpbmcoKTsgLy8gMS4yMzQ1ZSs2OAogICAqCiAgICogTm90ZTogdGhlIGNvbnZlcnNpb24gbWF5IHJvdW5kIHRoZSBvdXRwdXQgaWYgdGhlIHJldHVybmVkIHN0cmluZwogICAqIGlzIGFjY3VyYXRlIGVub3VnaCB0byB1bmlxdWVseSBpZGVudGlmeSB0aGUgaW5wdXQtbnVtYmVyLgogICAqIEZvciBleGFtcGxlIHRoZSBtb3N0IHByZWNpc2UgcmVwcmVzZW50YXRpb24gb2YgdGhlIFtkb3VibGVdIGA5ZTU5YCBlcXVhbHMKICAgKiBgIjg5OTk5OTk5OTk5OTk5OTkxODc2NzIyOTQ0OTcxNzYxOTk1MzgxMDEzMTI3MzY3NDY5MDY1NjIwNjg0OCJgLCBidXQKICAgKiB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBzaG9ydGVyIChidXQgc3RpbGwgdW5pcXVlbHkgaWRlbnRpZnlpbmcpIGAiOWU1OSJgLgogICAqCiAgICovCiAgU3RyaW5nIHRvU3RyaW5nKCk7CgogIC8qKgogICAqIFBhcnNlcyBhIHN0cmluZyBjb250YWluaW5nIGEgbnVtYmVyIGxpdGVyYWwgaW50byBhIG51bWJlci4KICAgKgogICAqIFRoZSBtZXRob2QgZmlyc3QgdHJpZXMgdG8gcmVhZCB0aGUgW2lucHV0XSBhcyBpbnRlZ2VyIChzaW1pbGFyIHRvCiAgICogW2ludC5wYXJzZV0gd2l0aG91dCBhIHJhZGl4KS4KICAgKiBJZiB0aGF0IGZhaWxzLCBpdCB0cmllcyB0byBwYXJzZSB0aGUgW2lucHV0XSBhcyBhIGRvdWJsZSAoc2ltaWxhciB0bwogICAqIFtkb3VibGUucGFyc2VdKS4KICAgKiBJZiB0aGF0IGZhaWxzLCB0b28sIGl0IGludm9rZXMgW29uRXJyb3JdIHdpdGggW2lucHV0XSwgYW5kIHRoZSByZXN1bHQKICAgKiBvZiB0aGF0IGludm9jYXRpb24gYmVjb21lcyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgYHBhcnNlYC4KICAgKgogICAqIElmIG5vIFtvbkVycm9yXSBpcyBzdXBwbGllZCwgaXQgZGVmYXVsdHMgdG8gYSBmdW5jdGlvbiB0aGF0IHRocm93cyBhCiAgICogW0Zvcm1hdEV4Y2VwdGlvbl0uCiAgICoKICAgKiBGb3IgYW55IG51bWJlciBgbmAsIHRoaXMgZnVuY3Rpb24gc2F0aXNmaWVzCiAgICogYGlkZW50aWNhbChuLCBudW0ucGFyc2Uobi50b1N0cmluZygpKSlgIChleGNlcHQgd2hlbiBgbmAgaXMgYSBOYU4gYGRvdWJsZWAKICAgKiB3aXRoIGEgcGF5bG9hZCkuCiAgICoKICAgKiBUaGUgW29uRXJyb3JdIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuCiAgICogSW5zdGVhZCBvZiBgbnVtLnBhcnNlKHN0cmluZywgKHN0cmluZykgeyAuLi4gfSlgLAogICAqIHlvdSBzaG91bGQgdXNlIGBudW0udHJ5UGFyc2Uoc3RyaW5nKSA/PyAoLi4uKWAuCiAgICovCiAgc3RhdGljIG51bSBwYXJzZShTdHJpbmcgaW5wdXQsIFtAZGVwcmVjYXRlZCBudW0gb25FcnJvcihTdHJpbmcgaW5wdXQpXSkgewogICAgbnVtIHJlc3VsdCA9IHRyeVBhcnNlKGlucHV0KTsKICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgcmV0dXJuIHJlc3VsdDsKICAgIGlmIChvbkVycm9yID09IG51bGwpIHRocm93IEZvcm1hdEV4Y2VwdGlvbihpbnB1dCk7CiAgICByZXR1cm4gb25FcnJvcihpbnB1dCk7CiAgfQoKICAvKioKICAgKiBQYXJzZXMgYSBzdHJpbmcgY29udGFpbmluZyBhIG51bWJlciBsaXRlcmFsIGludG8gYSBudW1iZXIuCiAgICoKICAgKiBMaWtlIFtwYXJzZV0gZXhjZXB0IHRoYXQgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGBudWxsYCBmb3IgaW52YWxpZCBpbnB1dHMKICAgKiBpbnN0ZWFkIG9mIHRocm93aW5nLgogICAqLwogIHN0YXRpYyBudW0gdHJ5UGFyc2UoU3RyaW5nIGlucHV0KSB7CiAgICBTdHJpbmcgc291cmNlID0gaW5wdXQudHJpbSgpOwogICAgLy8gVE9ETyhscm4pOiBPcHRpbWl6ZSB0byBkZXRlY3QgZm9ybWF0IGFuZCByZXN1bHQgdHlwZSBpbiBvbmUgY2hlY2suCiAgICByZXR1cm4gaW50LnRyeVBhcnNlKHNvdXJjZSkgPz8gZG91YmxlLnRyeVBhcnNlKHNvdXJjZSk7CiAgfQoKICAvKiogSGVscGVyIGZ1bmN0aW9ucyBmb3IgW3BhcnNlXS4gKi8KICBzdGF0aWMgaW50IF9yZXR1cm5JbnROdWxsKFN0cmluZyBfKSA9PiBudWxsOwogIHN0YXRpYyBkb3VibGUgX3JldHVybkRvdWJsZU51bGwoU3RyaW5nIF8pID0+IG51bGw7Cn0KgfEATk48AQ8BEwEEKANIKgQwBj4FSCIFRy1LKgVLSjkFUAUuBUhISUoOBUkwBU4tBiIBBjAFSk45BT8GFAEGHwVQRQVKT0cMBUpPTRcFRzAFUFAYUChABQ8JJSQkBUMsLTc8BUoSJDM3NzgJBhwBHB0BHx0BIh0BBiAFUEguBUxMMgU8BUMGHQEcIAEGIwVQPQVHFwYeARoUAQZMBTEsUQYcASgeATEfASseATQfAVASAQY3BUcGFwEGTgwGFwEGNQVBGAYVATMNAQZDJAU4Mi4FOAU3JwEbBR8FSQYQAQYsBT03BVAGDwEGOgVQBg8BBjcFUAYOAQY/GQVQBhIBBjkFPUcFT0AFSk9FGwUkSw0GGgEGRwVPQAVKQgUkSw0GGgEGRAVPQAVKRAUkSw0GGQEGTC0FT0AFSkg2BSRLDQYdAQZOBU5MEwVPLgYtAVAPAQYmBTpEJAYVAQY+BU8FTj86T0wXBUMiBQ8FKTo8UT0nBi4BBj0FTwVJS1FMFwVFDwUyNjg2MgY2AQZKLQU+HQUPBTA1NDdPTkdKBi0BBkwFS0s1UD8FTzIFTgUPBS8rTU07TB5HR0hIKS0tBUY/T0tQBQYVAQZABUcjShZLPwVKGAUxUBYFQDc1BkwiJzcbBAEGQAVOGgYmIko8BAEnLzUCARJkYXJ0OmNvcmUvbnVtLmRhcnQ9b3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvY29yZS9vYmplY3QuZGFydJCPLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIERhcnQgb2JqZWN0cy4KICoKICogQmVjYXVzZSBPYmplY3QgaXMgdGhlIHJvb3Qgb2YgdGhlIERhcnQgY2xhc3MgaGllcmFyY2h5LAogKiBldmVyeSBvdGhlciBEYXJ0IGNsYXNzIGlzIGEgc3ViY2xhc3Mgb2YgT2JqZWN0LgogKgogKiBXaGVuIHlvdSBkZWZpbmUgYSBjbGFzcywgeW91IHNob3VsZCBvdmVycmlkZSBbdG9TdHJpbmddCiAqIHRvIHJldHVybiBhIHN0cmluZyBkZXNjcmliaW5nIGFuIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MuCiAqIFlvdSBtaWdodCBhbHNvIG5lZWQgdG8gZGVmaW5lIFtoYXNoQ29kZV0gYW5kIFtvcGVyYXRvciA9PV0sIGFzIGRlc2NyaWJlZCBpbiB0aGUKICogW0ltcGxlbWVudGluZyBtYXAKICoga2V5c10oaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2RvY3MvZGFydC11cC1hbmQtcnVubmluZy9jaDAzLmh0bWwjaW1wbGVtZW50aW5nLW1hcC1rZXlzKQogKiBzZWN0aW9uIG9mIHRoZSBbbGlicmFyeQogKiB0b3VyXShodHRwOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL2RhcnQtdXAtYW5kLXJ1bm5pbmcvY29udGVudHMvY2gwMy5odG1sKS4KICovCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgT2JqZWN0IHsKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IFtPYmplY3RdIGluc3RhbmNlLgogICAqCiAgICogW09iamVjdF0gaW5zdGFuY2VzIGhhdmUgbm8gbWVhbmluZ2Z1bCBzdGF0ZSwgYW5kIGFyZSBvbmx5IHVzZWZ1bAogICAqIHRocm91Z2ggdGhlaXIgaWRlbnRpdHkuIEFuIFtPYmplY3RdIGluc3RhbmNlIGlzIGVxdWFsIHRvIGl0c2VsZgogICAqIG9ubHkuCiAgICovCiAgY29uc3QgT2JqZWN0KCk7CgogIC8qKgogICAqIFRoZSBlcXVhbGl0eSBvcGVyYXRvci4KICAgKgogICAqIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBhbGwgW09iamVjdF1zIGlzIHRvIHJldHVybiB0cnVlIGlmIGFuZAogICAqIG9ubHkgaWYgYHRoaXNgIGFuZCBbb3RoZXJdIGFyZSB0aGUgc2FtZSBvYmplY3QuCiAgICoKICAgKiBPdmVycmlkZSB0aGlzIG1ldGhvZCB0byBzcGVjaWZ5IGEgZGlmZmVyZW50IGVxdWFsaXR5IHJlbGF0aW9uIG9uCiAgICogYSBjbGFzcy4gVGhlIG92ZXJyaWRpbmcgbWV0aG9kIG11c3Qgc3RpbGwgYmUgYW4gZXF1aXZhbGVuY2UgcmVsYXRpb24uCiAgICogVGhhdCBpcywgaXQgbXVzdCBiZToKICAgKgogICAqICAqIFRvdGFsOiBJdCBtdXN0IHJldHVybiBhIGJvb2xlYW4gZm9yIGFsbCBhcmd1bWVudHMuIEl0IHNob3VsZCBuZXZlciB0aHJvdwogICAqICAgIG9yIHJldHVybiBgbnVsbGAuCiAgICoKICAgKiAgKiBSZWZsZXhpdmU6IEZvciBhbGwgb2JqZWN0cyBgb2AsIGBvID09IG9gIG11c3QgYmUgdHJ1ZS4KICAgKgogICAqICAqIFN5bW1ldHJpYzogRm9yIGFsbCBvYmplY3RzIGBvMWAgYW5kIGBvMmAsIGBvMSA9PSBvMmAgYW5kIGBvMiA9PSBvMWAgbXVzdAogICAqICAgIGVpdGhlciBib3RoIGJlIHRydWUsIG9yIGJvdGggYmUgZmFsc2UuCiAgICoKICAgKiAgKiBUcmFuc2l0aXZlOiBGb3IgYWxsIG9iamVjdHMgYG8xYCwgYG8yYCwgYW5kIGBvM2AsIGlmIGBvMSA9PSBvMmAgYW5kCiAgICogICAgYG8yID09IG8zYCBhcmUgdHJ1ZSwgdGhlbiBgbzEgPT0gbzNgIG11c3QgYmUgdHJ1ZS4KICAgKgogICAqIFRoZSBtZXRob2Qgc2hvdWxkIGFsc28gYmUgY29uc2lzdGVudCBvdmVyIHRpbWUsCiAgICogc28gd2hldGhlciB0d28gb2JqZWN0cyBhcmUgZXF1YWwgc2hvdWxkIG9ubHkgY2hhbmdlCiAgICogaWYgYXQgbGVhc3Qgb25lIG9mIHRoZSBvYmplY3RzIHdhcyBtb2RpZmllZC4KICAgKgogICAqIElmIGEgc3ViY2xhc3Mgb3ZlcnJpZGVzIHRoZSBlcXVhbGl0eSBvcGVyYXRvciBpdCBzaG91bGQgb3ZlcnJpZGUKICAgKiB0aGUgW2hhc2hDb2RlXSBtZXRob2QgYXMgd2VsbCB0byBtYWludGFpbiBjb25zaXN0ZW5jeS4KICAgKi8KICBleHRlcm5hbCBib29sIG9wZXJhdG9yID09KG90aGVyKTsKCiAgLyoqCiAgICogVGhlIGhhc2ggY29kZSBmb3IgdGhpcyBvYmplY3QuCiAgICoKICAgKiBBIGhhc2ggY29kZSBpcyBhIHNpbmdsZSBpbnRlZ2VyIHdoaWNoIHJlcHJlc2VudHMgdGhlIHN0YXRlIG9mIHRoZSBvYmplY3QKICAgKiB0aGF0IGFmZmVjdHMgW29wZXJhdG9yID09XSBjb21wYXJpc29ucy4KICAgKgogICAqIEFsbCBvYmplY3RzIGhhdmUgaGFzaCBjb2Rlcy4KICAgKiBUaGUgZGVmYXVsdCBoYXNoIGNvZGUgcmVwcmVzZW50cyBvbmx5IHRoZSBpZGVudGl0eSBvZiB0aGUgb2JqZWN0LAogICAqIHRoZSBzYW1lIHdheSBhcyB0aGUgZGVmYXVsdCBbb3BlcmF0b3IgPT1dIGltcGxlbWVudGF0aW9uIG9ubHkgY29uc2lkZXJzIG9iamVjdHMKICAgKiBlcXVhbCBpZiB0aGV5IGFyZSBpZGVudGljYWwgKHNlZSBbaWRlbnRpdHlIYXNoQ29kZV0pLgogICAqCiAgICogSWYgW29wZXJhdG9yID09XSBpcyBvdmVycmlkZGVuIHRvIHVzZSB0aGUgb2JqZWN0IHN0YXRlIGluc3RlYWQsCiAgICogdGhlIGhhc2ggY29kZSBtdXN0IGFsc28gYmUgY2hhbmdlZCB0byByZXByZXNlbnQgdGhhdCBzdGF0ZS4KICAgKgogICAqIEhhc2ggY29kZXMgbXVzdCBiZSB0aGUgc2FtZSBmb3Igb2JqZWN0cyB0aGF0IGFyZSBlcXVhbCB0byBlYWNoIG90aGVyCiAgICogYWNjb3JkaW5nIHRvIFtvcGVyYXRvciA9PV0uCiAgICogVGhlIGhhc2ggY29kZSBvZiBhbiBvYmplY3Qgc2hvdWxkIG9ubHkgY2hhbmdlIGlmIHRoZSBvYmplY3QgY2hhbmdlcwogICAqIGluIGEgd2F5IHRoYXQgYWZmZWN0cyBlcXVhbGl0eS4KICAgKiBUaGVyZSBhcmUgbm8gZnVydGhlciByZXF1aXJlbWVudHMgZm9yIHRoZSBoYXNoIGNvZGVzLgogICAqIFRoZXkgbmVlZCBub3QgYmUgY29uc2lzdGVudCBiZXR3ZWVuIGV4ZWN1dGlvbnMgb2YgdGhlIHNhbWUgcHJvZ3JhbQogICAqIGFuZCB0aGVyZSBhcmUgbm8gZGlzdHJpYnV0aW9uIGd1YXJhbnRlZXMuCiAgICoKICAgKiBPYmplY3RzIHRoYXQgYXJlIG5vdCBlcXVhbCBhcmUgYWxsb3dlZCB0byBoYXZlIHRoZSBzYW1lIGhhc2ggY29kZSwKICAgKiBpdCBpcyBldmVuIHRlY2huaWNhbGx5IGFsbG93ZWQgdGhhdCBhbGwgaW5zdGFuY2VzIGhhdmUgdGhlIHNhbWUgaGFzaCBjb2RlLAogICAqIGJ1dCBpZiBjbGFzaGVzIGhhcHBlbiB0b28gb2Z0ZW4sIGl0IG1heSByZWR1Y2UgdGhlIGVmZmljaWVuY3kgb2YgaGFzaC1iYXNlZAogICAqIGRhdGEgc3RydWN0dXJlcyBsaWtlIFtIYXNoU2V0XSBvciBbSGFzaE1hcF0uCiAgICoKICAgKiBJZiBhIHN1YmNsYXNzIG92ZXJyaWRlcyBbaGFzaENvZGVdLCBpdCBzaG91bGQgb3ZlcnJpZGUgdGhlCiAgICogW29wZXJhdG9yID09XSBvcGVyYXRvciBhcyB3ZWxsIHRvIG1haW50YWluIGNvbnNpc3RlbmN5LgogICAqLwogIGV4dGVybmFsIGludCBnZXQgaGFzaENvZGU7CgogIC8qKgogICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCiAgICovCiAgZXh0ZXJuYWwgU3RyaW5nIHRvU3RyaW5nKCk7CgogIC8qKgogICAqIEludm9rZWQgd2hlbiBhIG5vbi1leGlzdGVudCBtZXRob2Qgb3IgcHJvcGVydHkgaXMgYWNjZXNzZWQuCiAgICoKICAgKiBDbGFzc2VzIGNhbiBvdmVycmlkZSBbbm9TdWNoTWV0aG9kXSB0byBwcm92aWRlIGN1c3RvbSBiZWhhdmlvci4KICAgKgogICAqIElmIGEgdmFsdWUgaXMgcmV0dXJuZWQsIGl0IGJlY29tZXMgdGhlIHJlc3VsdCBvZiB0aGUgb3JpZ2luYWwgaW52b2NhdGlvbi4KICAgKgogICAqIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIHRocm93IGEgW05vU3VjaE1ldGhvZEVycm9yXS4KICAgKi8KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgZXh0ZXJuYWwgZHluYW1pYyBub1N1Y2hNZXRob2QoSW52b2NhdGlvbiBpbnZvY2F0aW9uKTsKCiAgLyoqCiAgICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcnVudGltZSB0eXBlIG9mIHRoZSBvYmplY3QuCiAgICovCiAgZXh0ZXJuYWwgVHlwZSBnZXQgcnVudGltZVR5cGU7Cn0KdwBOTjwBDwETAQQoAzszAzs8UxVcG08EGg8GJgVGRQsGEgEGHAVFNQVGSxoFURoFPwVRLwVMOwU1OTIFRjwGJAEGJAVOLQUiR1U7BUVBBUohSSU7SC8FSFBRMgVAPQYdAQY1Bh4BBkEFRQVPBT0GHDgBBjkGIQIBFWRhcnQ6Y29yZS9vYmplY3QuZGFydE9vcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vbGliL29iamVjdF9wYXRjaC5kYXJ0inEvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgpAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCmludCBfZ2V0SGFzaChvYmopIG5hdGl2ZSAiT2JqZWN0X2dldEhhc2giOwp2b2lkIF9zZXRIYXNoKG9iaiwgaGFzaCkgbmF0aXZlICJPYmplY3Rfc2V0SGFzaCI7CgpAcGF0Y2gKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBPYmplY3QgewogIC8vIFRoZSBWTSBoYXMgaXRzIG93biBpbXBsZW1lbnRhdGlvbiBvZiBlcXVhbHMuCiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIG5hdGl2ZSAiT2JqZWN0X2VxdWFscyI7CgogIC8vIEhlbHBlcnMgdXNlZCB0byBpbXBsZW1lbnQgaGFzaENvZGUuIElmIGEgaGFzaENvZGUgaXMgdXNlZCwgd2UgcmVtZW1iZXIgaXQKICAvLyBpbiBhIHdlYWsgdGFibGUgaW4gdGhlIFZNICgzMiBiaXQpIG9yIGluIHRoZSBoZWFkZXIgb2YgdGhlIG9iamVjdCAoNjQKICAvLyBiaXQpLiBBIG5ldyBoYXNoQ29kZSB2YWx1ZSBpcyBjYWxjdWxhdGVkIHVzaW5nIGEgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCiAgc3RhdGljIGZpbmFsIF9oYXNoQ29kZVJuZCA9IG5ldyBSYW5kb20oKTsKCiAgc3RhdGljIGludCBfb2JqZWN0SGFzaENvZGUob2JqKSB7CiAgICB2YXIgcmVzdWx0ID0gX2dldEhhc2gob2JqKTsKICAgIGlmIChyZXN1bHQgPT0gMCkgewogICAgICAvLyBXZSB3YW50IHRoZSBoYXNoIHRvIGJlIGEgU21pIHZhbHVlIGdyZWF0ZXIgdGhhbiAwLgogICAgICByZXN1bHQgPSBfaGFzaENvZGVSbmQubmV4dEludCgweDQwMDAwMDAwKTsKICAgICAgZG8gewogICAgICAgIHJlc3VsdCA9IF9oYXNoQ29kZVJuZC5uZXh0SW50KDB4NDAwMDAwMDApOwogICAgICB9IHdoaWxlIChyZXN1bHQgPT0gMCk7CiAgICAgIF9zZXRIYXNoKG9iaiwgcmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAcGF0Y2gKICBpbnQgZ2V0IGhhc2hDb2RlID0+IF9vYmplY3RIYXNoQ29kZSh0aGlzKTsKICBpbnQgZ2V0IF9pZGVudGl0eUhhc2hDb2RlID0+IF9vYmplY3RIYXNoQ29kZSh0aGlzKTsKCiAgQHBhdGNoCiAgU3RyaW5nIHRvU3RyaW5nKCkgbmF0aXZlICJPYmplY3RfdG9TdHJpbmciOwogIC8vIEEgc3RhdGljYWxseSBkaXNwYXRjaGVkIHZlcnNpb24gb2YgT2JqZWN0LnRvU3RyaW5nLgogIHN0YXRpYyBTdHJpbmcgX3RvU3RyaW5nKG9iaikgbmF0aXZlICJPYmplY3RfdG9TdHJpbmciOwoKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKICBkeW5hbWljIG5vU3VjaE1ldGhvZChJbnZvY2F0aW9uIGludm9jYXRpb24pIHsKICAgIC8vIFRPRE8ocmVnaXMpOiBSZW1vdmUgdGVtcCBjb25zdHJ1Y3RvciBpZGVudGlmaWVyICd3aXRoSW52b2NhdGlvbicuCiAgICB0aHJvdyBuZXcgTm9TdWNoTWV0aG9kRXJyb3Iud2l0aEludm9jYXRpb24odGhpcywgaW52b2NhdGlvbik7CiAgfQoKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1R5cGUiKQogIFR5cGUgZ2V0IHJ1bnRpbWVUeXBlIG5hdGl2ZSAiT2JqZWN0X3J1bnRpbWVUeXBlIjsKCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIHN0YXRpYyBib29sIF9oYXZlU2FtZVJ1bnRpbWVUeXBlKGEsIGIpIG5hdGl2ZSAiT2JqZWN0X2hhdmVTYW1lUnVudGltZVR5cGUiOwoKICAvLyBDYWxsIHRoaXMgZnVuY3Rpb24gaW5zdGVhZCBvZiBpbmxpbmluZyBpbnN0YW5jZW9mLCB0aHVzIGNvbGxlY3RpbmcKICAvLyB0eXBlIGZlZWRiYWNrIGFuZCByZWR1Y2luZyBjb2RlIHNpemUgb2YgdW5vcHRpbWl6ZWQgY29kZS4KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKICBib29sIF9pbnN0YW5jZU9mKGluc3RhbnRpYXRvclR5cGVBcmd1bWVudHMsIGZ1bmN0aW9uVHlwZUFyZ3VtZW50cywgdHlwZSwKICAgICAgbm5iZF9tb2RlKSBuYXRpdmUgIk9iamVjdF9pbnN0YW5jZU9mIjsKCiAgLy8gR3JvdXAgb2YgZnVuY3Rpb25zIGZvciBpbXBsZW1lbnRpbmcgZmFzdCBzaW1wbGUgaW5zdGFuY2Ugb2YuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgYm9vbCBfc2ltcGxlSW5zdGFuY2VPZih0eXBlKSBuYXRpdmUgIk9iamVjdF9zaW1wbGVJbnN0YW5jZU9mIjsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKICBib29sIF9zaW1wbGVJbnN0YW5jZU9mVHJ1ZSh0eXBlKSA9PiB0cnVlOwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQogIGJvb2wgX3NpbXBsZUluc3RhbmNlT2ZGYWxzZSh0eXBlKSA9PiBmYWxzZTsKfQpPAE5OPAEPAR4BMisyAQcaDzIJKB4yAU9LTywBJCAXPDELMx0dBhMEAQktNgEJLjk5AQkkMElCBAEJNTQBJChOAUg/JEstAUIkQSQsJC4CASFkYXJ0OmNvcmUtcGF0Y2gvb2JqZWN0X3BhdGNoLmRhcnQ+b3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvY29yZS9wYXR0ZXJuLmRhcnSP4C8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogQW4gaW50ZXJmYWNlIGZvciBiYXNpYyBzZWFyY2hlcyB3aXRoaW4gc3RyaW5ncy4KICovCmFic3RyYWN0IGNsYXNzIFBhdHRlcm4gewogIC8vIE5PVEU6IFdoZW4gdXNpbmcgInN0YXJ0IiBpbmRleCBmcm9tIHRoZSBsYW5ndWFnZSBsaWJyYXJ5LCBjYWxsCiAgLy8gd2l0aG91dCBhbiBhcmd1bWVudCBpZiBzdGFydCBpcyB6ZXJvLiBUaGlzIGFsbG93cyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQogIC8vIHdpdGggaW1wbGVtZW50YXRpb25zIG9mIHRoZSBvbGRlciBpbnRlcmZhY2UgdGhhdCBkaWRuJ3QgaGF2ZSB0aGUgc3RhcnQKICAvLyBpbmRleCBhcmd1bWVudC4KICAvKioKICAgKiBNYXRjaCB0aGlzIHBhdHRlcm4gYWdhaW5zdCB0aGUgc3RyaW5nIHJlcGVhdGVkbHkuCiAgICoKICAgKiBJZiBbc3RhcnRdIGlzIHByb3ZpZGVkLCBtYXRjaGluZyB3aWxsIHN0YXJ0IGF0IHRoYXQgaW5kZXguCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgaXRlcmFibGUgbGF6aWx5IGNvbXB1dGVzIGFsbCB0aGUgbm9uLW92ZXJsYXBwaW5nIG1hdGNoZXMKICAgKiBvZiB0aGUgcGF0dGVybiBvbiB0aGUgc3RyaW5nLCBvcmRlcmVkIGJ5IHN0YXJ0IGluZGV4LgogICAqIElmIGEgdXNlciBvbmx5IHJlcXVlc3RzIHRoZSBmaXJzdAogICAqIG1hdGNoLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgY29tcHV0ZSBhbGwgcG9zc2libGUgbWF0Y2hlcy4KICAgKgogICAqIFRoZSBtYXRjaGVzIGFyZSBmb3VuZCBieSByZXBlYXRlZGx5IGZpbmRpbmcgdGhlIGZpcnN0IG1hdGNoCiAgICogb2YgdGhlIHBhdHRlcm4gb24gdGhlIHN0cmluZywgc3RhcnRpbmcgZnJvbSB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cwogICAqIG1hdGNoLCBhbmQgaW5pdGlhbGx5IHN0YXJ0aW5nIGZyb20gaW5kZXggemVyby4KICAgKgogICAqIElmIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGVtcHR5IHN0cmluZyBhdCBzb21lIHBvaW50LCB0aGUgbmV4dAogICAqIG1hdGNoIGlzIGZvdW5kIGJ5IHN0YXJ0aW5nIGF0IHRoZSBwcmV2aW91cyBtYXRjaCdzIGVuZCBwbHVzIG9uZS4KICAgKi8KICBJdGVyYWJsZTxNYXRjaD4gYWxsTWF0Y2hlcyhTdHJpbmcgc3RyaW5nLCBbaW50IHN0YXJ0ID0gMF0pOwoKICAvKioKICAgKiBNYXRjaCB0aGlzIHBhdHRlcm4gYWdhaW5zdCB0aGUgc3RhcnQgb2YgYHN0cmluZ2AuCiAgICoKICAgKiBJZiBbc3RhcnRdIGlzIHByb3ZpZGVkLCBpdCBtdXN0IGJlIGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIGAwYCAuLgogICAqIGBzdHJpbmcubGVuZ3RoYC4gSW4gdGhhdCBjYXNlLCB0aGlzIHBhdHRlbiBpcyB0ZXN0ZWQgYWdhaW5zdCB0aGUKICAgKiBzdHJpbmcgYXQgdGhlIFtzdGFydF0gcG9zaXRpb24uIFRoYXQgaXMsIGEgW01hdGNoXSBpcyByZXR1cm5lZCBpZiB0aGUKICAgKiBwYXR0ZXJuIGNhbiBtYXRjaCBhIHBhcnQgb2YgdGhlIHN0cmluZyBzdGFydGluZyBmcm9tIHBvc2l0aW9uIFtzdGFydF0uCiAgICogUmV0dXJucyBgbnVsbGAgaWYgdGhlIHBhdHRlcm4gZG9lc24ndCBtYXRjaC4KICAgKi8KICBNYXRjaCBtYXRjaEFzUHJlZml4KFN0cmluZyBzdHJpbmcsIFtpbnQgc3RhcnQgPSAwXSk7Cn0KCi8qKgogKiBBIHJlc3VsdCBmcm9tIHNlYXJjaGluZyB3aXRoaW4gYSBzdHJpbmcuCiAqCiAqIEEgTWF0Y2ggb3IgYW4gW0l0ZXJhYmxlXSBvZiBNYXRjaCBvYmplY3RzIGlzIHJldHVybmVkIGZyb20gW1BhdHRlcm5dCiAqIG1hdGNoaW5nIG1ldGhvZHMuCiAqCiAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBmaW5kcyBhbGwgbWF0Y2hlcyBvZiBhIFtSZWdFeHBdIGluIGEgW1N0cmluZ10KICogYW5kIGl0ZXJhdGVzIHRocm91Z2ggdGhlIHJldHVybmVkIGl0ZXJhYmxlIG9mIE1hdGNoIG9iamVjdHMuCiAqCiAqICAgICBSZWdFeHAgZXhwID0gbmV3IFJlZ0V4cChyIihcdyspIik7CiAqICAgICBTdHJpbmcgc3RyID0gIlBhcnNlIG15IHN0cmluZyI7CiAqICAgICBJdGVyYWJsZTxNYXRjaD4gbWF0Y2hlcyA9IGV4cC5hbGxNYXRjaGVzKHN0cik7CiAqICAgICBmb3IgKE1hdGNoIG0gaW4gbWF0Y2hlcykgewogKiAgICAgICBTdHJpbmcgbWF0Y2ggPSBtLmdyb3VwKDApOwogKiAgICAgICBwcmludChtYXRjaCk7CiAqICAgICB9CiAqCiAqIFRoZSBvdXRwdXQgb2YgdGhlIGV4YW1wbGUgaXM6CiAqCiAqICAgICBQYXJzZQogKiAgICAgbXkKICogICAgIHN0cmluZwogKgogKiBTb21lIHBhdHRlcm5zLCByZWd1bGFyIGV4cHJlc3Npb25zIGluIHBhcnRpY3VsYXIsIG1heSByZWNvcmQgc3Vic3RyaW5ncwogKiB0aGF0IHdlcmUgcGFydCBvZiB0aGUgbWF0Y2hpbmcuIFRoZXNlIGFyZSBjYWxsZWQgX2dyb3Vwc18gaW4gdGhlIE1hdGNoCiAqIG9iamVjdC4gU29tZSBwYXR0ZXJucyBtYXkgbmV2ZXIgaGF2ZSBhbnkgZ3JvdXBzLCBhbmQgdGhlaXIgbWF0Y2hlcyBhbHdheXMKICogaGF2ZSB6ZXJvIFtncm91cENvdW50XS4KICovCmFic3RyYWN0IGNsYXNzIE1hdGNoIHsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHRoZSBtYXRjaCBzdGFydHMuCiAgICovCiAgaW50IGdldCBzdGFydDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgaW5kZXggaW4gdGhlIHN0cmluZyBhZnRlciB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlCiAgICogbWF0Y2guCiAgICovCiAgaW50IGdldCBlbmQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHN0cmluZyBtYXRjaGVkIGJ5IHRoZSBnaXZlbiBbZ3JvdXBdLgogICAqCiAgICogSWYgW2dyb3VwXSBpcyAwLCByZXR1cm5zIHRoZSBtYXRjaCBvZiB0aGUgcGF0dGVybi4KICAgKgogICAqIFRoZSByZXN1bHQgbWF5IGJlIGBudWxsYCBpZiB0aGUgcGF0dGVybiBkaWRuJ3QgYXNzaWduIGEgdmFsdWUgdG8gaXQKICAgKiBhcyBwYXJ0IG9mIHRoaXMgbWF0Y2guCiAgICovCiAgU3RyaW5nIGdyb3VwKGludCBncm91cCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHN0cmluZyBtYXRjaGVkIGJ5IHRoZSBnaXZlbiBbZ3JvdXBdLgogICAqCiAgICogSWYgW2dyb3VwXSBpcyAwLCByZXR1cm5zIHRoZSBtYXRjaCBvZiB0aGUgcGF0dGVybi4KICAgKgogICAqIFNob3J0IGFsaWFzIGZvciBbTWF0Y2guZ3JvdXBdLgogICAqLwogIFN0cmluZyBvcGVyYXRvciBbXShpbnQgZ3JvdXApOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgZ3JvdXBzIHdpdGggdGhlIGdpdmVuIGluZGljZXMuCiAgICoKICAgKiBUaGUgbGlzdCBjb250YWlucyB0aGUgc3RyaW5ncyByZXR1cm5lZCBieSBbZ3JvdXBdIGZvciBlYWNoIGluZGV4IGluCiAgICogW2dyb3VwSW5kaWNlc10uCiAgICovCiAgTGlzdDxTdHJpbmc+IGdyb3VwcyhMaXN0PGludD4gZ3JvdXBJbmRpY2VzKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNhcHR1cmVkIGdyb3VwcyBpbiB0aGUgbWF0Y2guCiAgICoKICAgKiBTb21lIHBhdHRlcm5zIG1heSBjYXB0dXJlIHBhcnRzIG9mIHRoZSBpbnB1dCB0aGF0IHdhcyB1c2VkIHRvCiAgICogY29tcHV0ZSB0aGUgZnVsbCBtYXRjaC4gVGhpcyBpcyB0aGUgbnVtYmVyIG9mIGNhcHR1cmVkIGdyb3VwcywKICAgKiB3aGljaCBpcyBhbHNvIHRoZSBtYXhpbWFsIGFsbG93ZWQgYXJndW1lbnQgdG8gdGhlIFtncm91cF0gbWV0aG9kLgogICAqLwogIGludCBnZXQgZ3JvdXBDb3VudDsKCiAgLyoqCiAgICogVGhlIHN0cmluZyBvbiB3aGljaCB0aGlzIG1hdGNoIHdhcyBjb21wdXRlZC4KICAgKi8KICBTdHJpbmcgZ2V0IGlucHV0OwoKICAvKioKICAgKiBUaGUgcGF0dGVybiB1c2VkIHRvIHNlYXJjaCBpbiBbaW5wdXRdLgogICAqLwogIFBhdHRlcm4gZ2V0IHBhdHRlcm47Cn0KgIcATk48AQ8BEwEEMwQZRE9MFQY3BUAFSzsnQwVBSTQFRUYGPgEGNwVHRktMMgY3AgEELANIFQNHQAMqJzYiJBcJAyEDDQoOA0tKTRsEFwY9BhEBBkUMBg8BBjYFOAVJHAYbAQY2BTgFJAYhAQY6BUkVBi8BBjkFQ0RHBhYBBjIGFAEGLAYXAgEWZGFydDpjb3JlL3BhdHRlcm4uZGFydD1vcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9jb3JlL3JlZ2V4cC5kYXJ0mTAvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIEEgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4uCiAqCiAqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgYXJlIFtQYXR0ZXJuXXMsIGFuZCBjYW4gYXMgc3VjaCBiZSB1c2VkIHRvIG1hdGNoIHN0cmluZ3MKICogb3IgcGFydHMgb2Ygc3RyaW5ncy4KICoKICogRGFydCByZWd1bGFyIGV4cHJlc3Npb25zIGhhdmUgdGhlIHNhbWUgc3ludGF4IGFuZCBzZW1hbnRpY3MgYXMKICogSmF2YVNjcmlwdCByZWd1bGFyIGV4cHJlc3Npb25zLiBTZWUKICogPGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi85LjAvI3NlYy1yZWdleHAtcmVndWxhci1leHByZXNzaW9uLW9iamVjdHM+CiAqIGZvciB0aGUgc3BlY2lmaWNhdGlvbiBvZiBKYXZhU2NyaXB0IHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiAqCiAqIFtmaXJzdE1hdGNoXSBpcyB0aGUgbWFpbiBpbXBsZW1lbnRhdGlvbiBtZXRob2QgdGhhdCBhcHBsaWVzIGEgcmVndWxhcgogKiBleHByZXNzaW9uIHRvIGEgc3RyaW5nIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBbUmVnRXhwTWF0Y2hdLiBBbGwKICogb3RoZXIgbWV0aG9kcyBpbiBbUmVnRXhwXSBjYW4gYnVpbGQgb24gaXQuCiAqCiAqIFVzZSBbYWxsTWF0Y2hlc10gdG8gbG9vayBmb3IgYWxsIG1hdGNoZXMgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gaW4KICogYSBzdHJpbmcuCiAqCiAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBmaW5kcyBhbGwgbWF0Y2hlcyBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBpbgogKiBhIHN0cmluZy4KICogYGBgZGFydAogKiBSZWdFeHAgZXhwID0gbmV3IFJlZ0V4cChyIihcdyspIik7CiAqIFN0cmluZyBzdHIgPSAiUGFyc2UgbXkgc3RyaW5nIjsKICogSXRlcmFibGU8UmVnRXhwTWF0Y2g+IG1hdGNoZXMgPSBleHAuYWxsTWF0Y2hlcyhzdHIpOwogKiBgYGAKICoKICogTm90ZSB0aGUgdXNlIG9mIGEgX3JhdyBzdHJpbmdfIChhIHN0cmluZyBwcmVmaXhlZCB3aXRoIGByYCkKICogaW4gdGhlIGV4YW1wbGUgYWJvdmUuIFVzZSBhIHJhdyBzdHJpbmcgdG8gdHJlYXQgZWFjaCBjaGFyYWN0ZXIgaW4gYSBzdHJpbmcKICogYXMgYSBsaXRlcmFsIGNoYXJhY3Rlci4KICovCmFic3RyYWN0IGNsYXNzIFJlZ0V4cCBpbXBsZW1lbnRzIFBhdHRlcm4gewogIC8qKgogICAqIENvbnN0cnVjdHMgYSByZWd1bGFyIGV4cHJlc3Npb24uCiAgICoKICAgKiBUaHJvd3MgYSBbRm9ybWF0RXhjZXB0aW9uXSBpZiBbc291cmNlXSBpcyBub3QgdmFsaWQgcmVndWxhcgogICAqIGV4cHJlc3Npb24gc3ludGF4LgogICAqCiAgICogSWYgYG11bHRpTGluZWAgaXMgZW5hYmxlZCwgdGhlbiBgXmAgYW5kIGAkYCB3aWxsIG1hdGNoIHRoZSBiZWdpbm5pbmcgYW5kCiAgICogZW5kIG9mIGEgX2xpbmVfLCBpbiBhZGRpdGlvbiB0byBtYXRjaGluZyBiZWdpbm5pbmcgYW5kIGVuZCBvZiBpbnB1dCwKICAgKiByZXNwZWN0aXZlbHkuCiAgICoKICAgKiBJZiBgY2FzZVNlbnNpdGl2ZWAgaXMgZGlzYWJsZWQsIHRoZW4gY2FzZSBpcyBpZ25vcmVkLgogICAqCiAgICogSWYgYHVuaWNvZGVgIGlzIGVuYWJsZWQsIHRoZW4gdGhlIHBhdHRlcm4gaXMgdHJlYXRlZCBhcyBhIFVuaWNvZGUKICAgKiBwYXR0ZXJuIGFzIGRlc2NyaWJlZCBieSB0aGUgRUNNQVNjcmlwdCBzdGFuZGFyZC4KICAgKgogICAqIElmIGBkb3RBbGxgIGlzIGVuYWJsZWQsIHRoZW4gdGhlIGAuYCBwYXR0ZXJuIHdpbGwgbWF0Y2ggX2FsbF8gY2hhcmFjdGVycywKICAgKiBpbmNsdWRpbmcgbGluZSB0ZXJtaW5hdG9ycy4KICAgKgogICAqIEV4YW1wbGU6CiAgICoKICAgKiBgYGBkYXJ0CiAgICogdmFyIHdvcmRQYXR0ZXJuID0gUmVnRXhwKHIiKFx3KykiKTsKICAgKiB2YXIgYnJhY2tldGVkTnVtYmVyVmFsdWUgPSBSZWdFeHAoIiRrZXk6IFxcW1xcZCtcXF0iKTsKICAgKiBgYGAKICAgKgogICAqIE5vdGljZSB0aGUgdXNlIG9mIGEgX3JhdyBzdHJpbmdfIGluIHRoZSBmaXJzdCBleGFtcGxlLCBhbmQgYSByZWd1bGFyCiAgICogc3RyaW5nIGluIHRoZSBzZWNvbmQuIEJlY2F1c2Ugb2YgdGhlIG1hbnkgY2hhcmFjdGVyIGNsYXNzZXMgdXNlZCBpbgogICAqIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGl0IGlzIGNvbW1vbiB0byB1c2UgYSByYXcgc3RyaW5nIGhlcmUsIHVubGVzcyBzdHJpbmcKICAgKiBpbnRlcnBvbGF0aW9uIGlzIHJlcXVpcmVkLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgUmVnRXhwKFN0cmluZyBzb3VyY2UsCiAgICAgIHtib29sIG11bHRpTGluZSA9IGZhbHNlLAogICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlLAogICAgICBAU2luY2UoIjIuNCIpIGJvb2wgdW5pY29kZSA9IGZhbHNlLAogICAgICBAU2luY2UoIjIuNCIpIGJvb2wgZG90QWxsID0gZmFsc2V9KTsKCiAgLyoqCiAgICogUmV0dXJucyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMgW3RleHRdLgogICAqCiAgICogSWYgW3RleHRdIGNvbnRhaW5zIGNoYXJhY3RlcnMgdGhhdCBhcmUgbWVhbmluZ2Z1bCBpbiByZWd1bGFyIGV4cHJlc3Npb25zLAogICAqIHRoZSByZXN1bHRpbmcgcmVndWxhciBleHByZXNzaW9uIHdpbGwgbWF0Y2ggdGhvc2UgY2hhcmFjdGVycyBsaXRlcmFsbHkuCiAgICogSWYgW3RleHRdIGNvbnRhaW5zIG5vIGNoYXJhY3RlcnMgdGhhdCBoYXZlIHNwZWNpYWwgbWVhbmluZyBpbiBhIHJlZ3VsYXIKICAgKiBleHByZXNzaW9uLCBpdCBpcyByZXR1cm5lZCB1bm1vZGlmaWVkLgogICAqCiAgICogVGhlIGNoYXJhY3RlcnMgdGhhdCBoYXZlIHNwZWNpYWwgbWVhbmluZyBpbiByZWd1bGFyIGV4cHJlc3Npb25zIGFyZToKICAgKiBgKGAsIGApYCwgYFtgLCBgXWAsIGB7YCwgYH1gLCBgKmAsIGArYCwgYD9gLCBgLmAsIGBeYCwgYCRgLCBgfGAgYW5kIGBcYC4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgU3RyaW5nIGVzY2FwZShTdHJpbmcgdGV4dCk7CgogIC8qKgogICAqIFNlYXJjaGVzIGZvciB0aGUgZmlyc3QgbWF0Y2ggb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgogICAqIGluIHRoZSBzdHJpbmcgW2lucHV0XS4gUmV0dXJucyBgbnVsbGAgaWYgdGhlcmUgaXMgbm8gbWF0Y2guCiAgICovCiAgUmVnRXhwTWF0Y2ggZmlyc3RNYXRjaChTdHJpbmcgaW5wdXQpOwoKICAvKioKICAgKiBSZXR1cm5zIGFuIGl0ZXJhYmxlIG9mIHRoZSBtYXRjaGVzIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gb24gW2lucHV0XS4KICAgKgogICAqIElmIFtzdGFydF0gaXMgcHJvdmlkZWQsIG9ubHkgc3RhcnQgbG9va2luZyBmb3IgbWF0Y2hlcyBhdCBgc3RhcnRgLgogICAqLwogIEl0ZXJhYmxlPFJlZ0V4cE1hdGNoPiBhbGxNYXRjaGVzKFN0cmluZyBpbnB1dCwgW2ludCBzdGFydCA9IDBdKTsKCiAgLyoqCiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gaGFzIGEgbWF0Y2ggaW4gdGhlIHN0cmluZyBbaW5wdXRdLgogICAqLwogIGJvb2wgaGFzTWF0Y2goU3RyaW5nIGlucHV0KTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZmlyc3Qgc3Vic3RyaW5nIG1hdGNoIG9mIHRoaXMgcmVndWxhciBleHByZXNzaW9uIGluIFtpbnB1dF0uCiAgICovCiAgU3RyaW5nIHN0cmluZ01hdGNoKFN0cmluZyBpbnB1dCk7CgogIC8qKgogICAqIFRoZSBzb3VyY2UgcmVndWxhciBleHByZXNzaW9uIHN0cmluZyB1c2VkIHRvIGNyZWF0ZSB0aGlzIGBSZWdFeHBgLgogICAqLwogIFN0cmluZyBnZXQgcGF0dGVybjsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGVzIG11bHRpcGxlIGxpbmVzLgogICAqCiAgICogSWYgdGhlIHJlZ2V4cCBkb2VzIG1hdGNoIG11bHRpcGxlIGxpbmVzLCB0aGUgIl4iIGFuZCAiJCIgY2hhcmFjdGVycwogICAqIG1hdGNoIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBsaW5lcy4gSWYgbm90LCB0aGUgY2hhcmFjdGVyIG1hdGNoIHRoZQogICAqIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBpbnB1dC4KICAgKi8KICBib29sIGdldCBpc011bHRpTGluZTsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBjYXNlIHNlbnNpdGl2ZS4KICAgKgogICAqIElmIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gaXMgbm90IGNhc2Ugc2Vuc2l0aXZlLCBpdCB3aWxsIG1hdGNoIGFuIGlucHV0CiAgICogbGV0dGVyIHdpdGggYSBwYXR0ZXJuIGxldHRlciBldmVuIGlmIHRoZSB0d28gbGV0dGVycyBhcmUgZGlmZmVyZW50IGNhc2UKICAgKiB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBsZXR0ZXIuCiAgICovCiAgYm9vbCBnZXQgaXNDYXNlU2Vuc2l0aXZlOwoKICAvKioKICAgKiBXaGV0aGVyIHRoaXMgcmVndWxhciBleHByZXNzaW9uIGlzIGluIFVuaWNvZGUgbW9kZS4KICAgKgogICAqIEluIFVuaWNvZGUgbW9kZSwgVVRGLTE2IHN1cnJvZ2F0ZSBwYWlycyBpbiB0aGUgb3JpZ2luYWwgc3RyaW5nIHdpbGwgYmUKICAgKiB0cmVhdGVkIGFzIGEgc2luZ2xlIGNvZGUgcG9pbnQgYW5kIHdpbGwgbm90IG1hdGNoIHNlcGFyYXRlbHkuIE90aGVyd2lzZSwKICAgKiB0aGUgdGFyZ2V0IHN0cmluZyB3aWxsIGJlIHRyZWF0ZWQgcHVyZWx5IGFzIGEgc2VxdWVuY2Ugb2YgaW5kaXZpZHVhbCBjb2RlCiAgICogdW5pdHMgYW5kIHN1cnJvZ2F0ZXMgd2lsbCBub3QgYmUgdHJlYXRlZCBzcGVjaWFsbHkuCiAgICoKICAgKiBJbiBVbmljb2RlIG1vZGUsIHRoZSBzeW50YXggb2YgdGhlIFJlZ0V4cCBwYXR0ZXJuIGlzIG1vcmUgcmVzdHJpY3RlZCwgYnV0CiAgICogc29tZSBwYXR0ZXJuIGZlYXR1cmVzLCBsaWtlIFVuaWNvZGUgcHJvcGVydHkgZXNjYXBlcywgYXJlIG9ubHkgYXZhaWxhYmxlIGluCiAgICogdGhpcyBtb2RlLgogICAqLwogIEBTaW5jZSgiMi40IikKICBib29sIGdldCBpc1VuaWNvZGU7CgogIC8qKgogICAqIFdoZXRoZXIgIi4iIGluIHRoaXMgcmVndWxhciBleHByZXNzaW9uIG1hdGNoZXMgbGluZSB0ZXJtaW5hdG9ycy4KICAgKgogICAqIFdoZW4gZmFsc2UsIHRoZSAiLiIgY2hhcmFjdGVyIG1hdGNoZXMgYSBzaW5nbGUgY2hhcmFjdGVyLCB1bmxlc3MgdGhhdAogICAqIGNoYXJhY3RlciBpcyBhIGxpbmUgdGVybWluYXRvci4gV2hlbiB0cnVlLCB0aGVuIHRoZSAiLiIgY2hhcmFjdGVyIHdpbGwKICAgKiBtYXRjaCBhbnkgc2luZ2xlIGNoYXJhY3RlciBpbmNsdWRpbmcgbGluZSB0ZXJtaW5hdG9ycy4KICAgKgogICAqIFRoaXMgZmVhdHVyZSBpcyBkaXN0aW5jdCBmcm9tIFtpc011bHRpTGluZV0sIGFzIHRoZXkgYWZmZWN0IHRoZSBiZWhhdmlvcgogICAqIG9mIGRpZmZlcmVudCBwYXR0ZXJuIGNoYXJhY3RlcnMsIGFuZCBzbyB0aGV5IGNhbiBiZSB1c2VkIHRvZ2V0aGVyIG9yCiAgICogc2VwYXJhdGVseS4KICAgKi8KICBAU2luY2UoIjIuNCIpCiAgYm9vbCBnZXQgaXNEb3RBbGw7Cn0KCi8qKgogKiBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaC4KICoKICogUmVndWxhciBleHByZXNzaW9uIG1hdGNoZXMgYXJlIFtNYXRjaF1lcywgYnV0IGFsc28gaW5jbHVkZSB0aGUgYWJpbGl0eQogKiB0byByZXRyaWV2ZSB0aGUgbmFtZXMgZm9yIGFueSBuYW1lZCBjYXB0dXJlIGdyb3VwcyBhbmQgdG8gcmV0cmlldmUKICogbWF0Y2hlcyBmb3IgbmFtZWQgY2FwdHVyZSBncm91cHMgYnkgbmFtZSBpbnN0ZWFkIG9mIHRoZWlyIGluZGV4LgogKi8KQFNpbmNlKCIyLjMiKQphYnN0cmFjdCBjbGFzcyBSZWdFeHBNYXRjaCBpbXBsZW1lbnRzIE1hdGNoIHsKICAvKioKICAgKiBUaGUgc3RyaW5nIG1hdGNoZWQgYnkgdGhlIGdyb3VwIG5hbWVkIFtuYW1lXS4KICAgKgogICAqIFJldHVybnMgdGhlIHN0cmluZyBtYXRjaGVkIGJ5IHRoZSBjYXB0dXJlIGdyb3VwIG5hbWVkIFtuYW1lXSwgb3IKICAgKiBgbnVsbGAgaWYgbm8gc3RyaW5nIHdhcyBtYXRjaGVkIGJ5IHRoYXQgY2FwdHVyZSBncm91cCBhcyBwYXJ0IG9mCiAgICogdGhpcyBtYXRjaC4KICAgKgogICAqIFRoZSBbbmFtZV0gbXVzdCBiZSB0aGUgbmFtZSBvZiBhIG5hbWVkIGNhcHR1cmUgZ3JvdXAgaW4gdGhlIHJlZ3VsYXIKICAgKiBleHByZXNzaW9uIGNyZWF0aW5nIHRoaXMgbWF0Y2ggKHRoYXQgaXMsIHRoZSBuYW1lIG11c3QgYmUgaW4KICAgKiBbZ3JvdXBOYW1lc10pLgogICAqLwogIFN0cmluZyBuYW1lZEdyb3VwKFN0cmluZyBuYW1lKTsKCiAgLyoqCiAgICogVGhlIG5hbWVzIG9mIHRoZSBjYXB0dXJlZCBncm91cHMgaW4gdGhlIG1hdGNoLgogICAqLwogIEl0ZXJhYmxlPFN0cmluZz4gZ2V0IGdyb3VwTmFtZXM7Cn0KgMEATk48AQ8BEwEEIQNQGANCJ1g8A0lDLgNHDQNGDQsmIzgHAz9OGwQrBiYFQRgFTkoTBTsFRzYFTyEFDgUNKTwJBUpJTyAGKR8hKisBBjcFT01NLAVKTgYuAQY8QQYoAQZOBUgGQwEGTwYfAQZOBiQBBkgGFgEGPQVJSyUGGAEGOAVNTSIGHAEGOQVMTk85BU9REAYQFgEGRgVLTDwFTkoRBhAVAgEEHwNKRkQEDi4GMwVGRhEFSUIUBiIBBjQGIwIBFWRhcnQ6Y29yZS9yZWdleHAuZGFydDpvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9jb3JlL3NldC5kYXJ0pUcvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIEEgY29sbGVjdGlvbiBvZiBvYmplY3RzIGluIHdoaWNoIGVhY2ggb2JqZWN0IGNhbiBvY2N1ciBvbmx5IG9uY2UuCiAqCiAqIFRoYXQgaXMsIGZvciBlYWNoIG9iamVjdCBvZiB0aGUgZWxlbWVudCB0eXBlLCB0aGUgb2JqZWN0IGlzIGVpdGhlciBjb25zaWRlcmVkCiAqIHRvIGJlIGluIHRoZSBzZXQsIG9yIHRvIF9ub3RfIGJlIGluIHRoZSBzZXQuCiAqCiAqIFNldCBpbXBsZW1lbnRhdGlvbnMgbWF5IGNvbnNpZGVyIHNvbWUgZWxlbWVudHMgaW5kaXN0aW5ndWlzaGFibGUuIFRoZXNlCiAqIGVsZW1lbnRzIGFyZSB0cmVhdGVkIGFzIGJlaW5nIHRoZSBzYW1lIGZvciBhbnkgb3BlcmF0aW9uIG9uIHRoZSBzZXQuCiAqCiAqIFRoZSBkZWZhdWx0IFtTZXRdIGltcGxlbWVudGF0aW9uLCBbTGlua2VkSGFzaFNldF0sIGNvbnNpZGVycyBvYmplY3RzCiAqIGluZGlzdGluZ3Vpc2hhYmxlIGlmIHRoZXkgYXJlIGVxdWFsIHdpdGggcmVnYXJkIHRvCiAqIG9wZXJhdG9yIFtPYmplY3QuPT1dLgogKgogKiBJdGVyYXRpbmcgb3ZlciBlbGVtZW50cyBvZiBhIHNldCBtYXkgYmUgZWl0aGVyIHVub3JkZXJlZAogKiBvciBvcmRlcmVkIGluIHNvbWUgd2F5LiBFeGFtcGxlczoKICoKICogKiBBIFtIYXNoU2V0XSBpcyB1bm9yZGVyZWQsIHdoaWNoIG1lYW5zIHRoYXQgaXRzIGl0ZXJhdGlvbiBvcmRlciBpcwogKiAgIHVuc3BlY2lmaWVkLAogKiAqIFtMaW5rZWRIYXNoU2V0XSBpdGVyYXRlcyBpbiB0aGUgaW5zZXJ0aW9uIG9yZGVyIG9mIGl0cyBlbGVtZW50cywgYW5kCiAqICogYSBzb3J0ZWQgc2V0IGxpa2UgW1NwbGF5VHJlZVNldF0gaXRlcmF0ZXMgdGhlIGVsZW1lbnRzIGluIHNvcnRlZCBvcmRlci4KICoKICogSXQgaXMgZ2VuZXJhbGx5IG5vdCBhbGxvd2VkIHRvIG1vZGlmeSB0aGUgc2V0IChhZGQgb3IgcmVtb3ZlIGVsZW1lbnRzKSB3aGlsZQogKiBhbiBvcGVyYXRpb24gb24gdGhlIHNldCBpcyBiZWluZyBwZXJmb3JtZWQsIGZvciBleGFtcGxlIGR1cmluZyBhIGNhbGwgdG8KICogW2ZvckVhY2hdIG9yIFtjb250YWluc0FsbF0uIE5vciBpcyBpdCBhbGxvd2VkIHRvIG1vZGlmeSB0aGUgc2V0IHdoaWxlCiAqIGl0ZXJhdGluZyBlaXRoZXIgdGhlIHNldCBpdHNlbGYgb3IgYW55IFtJdGVyYWJsZV0gdGhhdCBpcyBiYWNrZWQgYnkgdGhlIHNldCwKICogc3VjaCBhcyB0aGUgb25lcyByZXR1cm5lZCBieSBtZXRob2RzIGxpa2UgW3doZXJlXSBhbmQgW21hcF0uCiAqCiAqIEl0IGlzIGdlbmVyYWxseSBub3QgYWxsb3dlZCB0byBtb2RpZnkgdGhlIGVxdWFsaXR5IG9mIGVsZW1lbnRzIChhbmQgdGh1cyBub3QKICogdGhlaXIgaGFzaGNvZGUpIHdoaWxlIHRoZXkgYXJlIGluIHRoZSBzZXQuIFNvbWUgc3BlY2lhbGl6ZWQgc3VidHlwZXMgbWF5IGJlCiAqIG1vcmUgcGVybWlzc2l2ZSwgaW4gd2hpY2ggY2FzZSB0aGV5IHNob3VsZCBkb2N1bWVudCB0aGlzIGJlaGF2aW9yLgogKi8KYWJzdHJhY3QgY2xhc3MgU2V0PEU+IGV4dGVuZHMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4gewogIC8qKgogICAqIENyZWF0ZXMgYW4gZW1wdHkgW1NldF0uCiAgICoKICAgKiBUaGUgY3JlYXRlZCBbU2V0XSBpcyBhIHBsYWluIFtMaW5rZWRIYXNoU2V0XS4KICAgKiBBcyBzdWNoLCBpdCBjb25zaWRlcnMgZWxlbWVudHMgdGhhdCBhcmUgZXF1YWwgKHVzaW5nIFtvcGVyYXRvciA9PV0pIHRvIGJlCiAgICogaW5kaXN0aW5ndWlzaGFibGUsIGFuZCByZXF1aXJlcyB0aGVtIHRvIGhhdmUgYSBjb21wYXRpYmxlCiAgICogW09iamVjdC5oYXNoQ29kZV0gaW1wbGVtZW50YXRpb24uCiAgICoKICAgKiBUaGUgc2V0IGlzIGVxdWl2YWxlbnQgdG8gb25lIGNyZWF0ZWQgYnkgYG5ldyBMaW5rZWRIYXNoU2V0PEU+KClgLgogICAqLwogIGZhY3RvcnkgU2V0KCkgPSBMaW5rZWRIYXNoU2V0PEU+OwoKICAvKioKICAgKiBDcmVhdGVzIGFuIGVtcHR5IGlkZW50aXR5IFtTZXRdLgogICAqCiAgICogVGhlIGNyZWF0ZWQgW1NldF0gaXMgYSBbTGlua2VkSGFzaFNldF0gdGhhdCB1c2VzIGlkZW50aXR5IGFzIGVxdWFsaXR5CiAgICogcmVsYXRpb24uCiAgICoKICAgKiBUaGUgc2V0IGlzIGVxdWl2YWxlbnQgdG8gb25lIGNyZWF0ZWQgYnkgYG5ldyBMaW5rZWRIYXNoU2V0PEU+LmlkZW50aXR5KClgLgogICAqLwogIGZhY3RvcnkgU2V0LmlkZW50aXR5KCkgPSBMaW5rZWRIYXNoU2V0PEU+LmlkZW50aXR5OwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1NldF0gdGhhdCBjb250YWlucyBhbGwgW2VsZW1lbnRzXS4KICAgKgogICAqIEFsbCB0aGUgW2VsZW1lbnRzXSBzaG91bGQgYmUgaW5zdGFuY2VzIG9mIFtFXS4KICAgKiBUaGUgYGVsZW1lbnRzYCBpdGVyYWJsZSBpdHNlbGYgY2FuIGhhdmUgYW55IHR5cGUsCiAgICogc28gdGhpcyBjb25zdHJ1Y3RvciBjYW4gYmUgdXNlZCB0byBkb3duLWNhc3QgYSBgU2V0YCwgZm9yIGV4YW1wbGUgYXM6CiAgICoKICAgKiAgICAgU2V0PFN1cGVyVHlwZT4gc3VwZXJTZXQgPSAuLi47CiAgICogICAgIFNldDxTdWJUeXBlPiBzdWJTZXQgPQogICAqICAgICAgICAgbmV3IFNldDxTdWJUeXBlPi5mcm9tKHN1cGVyU2V0LndoZXJlKChlKSA9PiBlIGlzIFN1YlR5cGUpKTsKICAgKgogICAqIFRoZSBjcmVhdGVkIFtTZXRdIGlzIGEgW0xpbmtlZEhhc2hTZXRdLiBBcyBzdWNoLCBpdCBjb25zaWRlcnMgZWxlbWVudHMgdGhhdAogICAqIGFyZSBlcXVhbCAodXNpbmcgW29wZXJhdG9yID09XSkgdG8gYmUgaW5kaXN0aW5ndWlzaGFibGUsIGFuZCByZXF1aXJlcyB0aGVtIHRvCiAgICogaGF2ZSBhIGNvbXBhdGlibGUgW09iamVjdC5oYXNoQ29kZV0gaW1wbGVtZW50YXRpb24uCiAgICoKICAgKiBUaGUgc2V0IGlzIGVxdWl2YWxlbnQgdG8gb25lIGNyZWF0ZWQgYnkKICAgKiBgbmV3IExpbmtlZEhhc2hTZXQ8RT4uZnJvbShlbGVtZW50cylgLgogICAqLwogIGZhY3RvcnkgU2V0LmZyb20oSXRlcmFibGUgZWxlbWVudHMpID0gTGlua2VkSGFzaFNldDxFPi5mcm9tOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1NldF0gZnJvbSBbZWxlbWVudHNdLgogICAqCiAgICogVGhlIGNyZWF0ZWQgW1NldF0gaXMgYSBbTGlua2VkSGFzaFNldF0uIEFzIHN1Y2gsIGl0IGNvbnNpZGVycyBlbGVtZW50cyB0aGF0CiAgICogYXJlIGVxdWFsICh1c2luZyBbb3BlcmF0b3IgPT1dKSB0byBiZSBpbmRpc3Rpbmd1aXNoYWJsZSwgYW5kIHJlcXVpcmVzIHRoZW0gdG8KICAgKiBoYXZlIGEgY29tcGF0aWJsZSBbT2JqZWN0Lmhhc2hDb2RlXSBpbXBsZW1lbnRhdGlvbi4KICAgKgogICAqIFRoZSBzZXQgaXMgZXF1aXZhbGVudCB0byBvbmUgY3JlYXRlZCBieQogICAqIGBuZXcgTGlua2VkSGFzaFNldDxFPi5vZihlbGVtZW50cylgLgogICAqLwogIGZhY3RvcnkgU2V0Lm9mKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSA9IExpbmtlZEhhc2hTZXQ8RT4ub2Y7CgogIC8qKgogICAqIEFkYXB0cyBbc291cmNlXSB0byBiZSBhIGBTZXQ8VD5gLgogICAqCiAgICogSWYgW25ld1NldF0gaXMgcHJvdmlkZWQsIGl0IGlzIHVzZWQgdG8gY3JlYXRlIHRoZSBuZXcgc2V0cyByZXR1cm5lZAogICAqIGJ5IFt0b1NldF0sIFt1bmlvbl0sIGFuZCBpcyBhbHNvIHVzZWQgZm9yIFtpbnRlcnNlY3Rpb25dIGFuZCBbZGlmZmVyZW5jZV0uCiAgICogSWYgW25ld1NldF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gY3JlYXRpbmcgYSBuZXcgc2V0IHVzaW5nIHRoZQogICAqIGRlZmF1bHQgW1NldF0gY29uc3RydWN0b3IsIGFuZCBbaW50ZXJzZWN0aW9uXSBhbmQgW2RpZmZlcmVuY2VdCiAgICogcmV0dXJucyBhbiBhZGFwdGVkIHZlcnNpb24gb2YgY2FsbGluZyB0aGUgc2FtZSBtZXRob2Qgb24gdGhlIHNvdXJjZS4KICAgKgogICAqIEFueSB0aW1lIHRoZSBzZXQgd291bGQgcHJvZHVjZSBhbiBlbGVtZW50IHRoYXQgaXMgbm90IGEgW1RdLAogICAqIHRoZSBlbGVtZW50IGFjY2VzcyB3aWxsIHRocm93LgogICAqCiAgICogQW55IHRpbWUgYSBbVF0gdmFsdWUgaXMgYXR0ZW1wdGVkIGFkZGVkIGludG8gdGhlIGFkYXB0ZWQgc2V0LAogICAqIHRoZSBzdG9yZSB3aWxsIHRocm93IHVubGVzcyB0aGUgdmFsdWUgaXMgYWxzbyBhbiBpbnN0YW5jZSBvZiBbU10uCiAgICoKICAgKiBJZiBhbGwgYWNjZXNzZWQgZWxlbWVudHMgb2YgW3NvdXJjZV0gYXJlIGFjdHVhbGx5IGluc3RhbmNlcyBvZiBbVF0sCiAgICogYW5kIGlmIGFsbCBlbGVtZW50cyBhZGRlZCB0byB0aGUgcmV0dXJuZWQgc2V0IGFyZSBhY3R1YWxseSBpbnN0YW5jZQogICAqIG9mIFtTXSwKICAgKiB0aGVuIHRoZSByZXR1cm5lZCBzZXQgY2FuIGJlIHVzZWQgYXMgYSBgU2V0PFQ+YC4KICAgKi8KICBzdGF0aWMgU2V0PFQ+IGNhc3RGcm9tPFMsIFQ+KFNldDxTPiBzb3VyY2UsIHtTZXQ8Uj4gRnVuY3Rpb248Uj4oKSBuZXdTZXR9KSA9PgogICAgICBDYXN0U2V0PFMsIFQ+KHNvdXJjZSwgbmV3U2V0KTsKCiAgLyoqCiAgICogUHJvdmlkZXMgYSB2aWV3IG9mIHRoaXMgc2V0IGFzIGEgc2V0IG9mIFtSXSBpbnN0YW5jZXMuCiAgICoKICAgKiBJZiB0aGlzIHNldCBjb250YWlucyBvbmx5IGluc3RhbmNlcyBvZiBbUl0sIGFsbCByZWFkIG9wZXJhdGlvbnMKICAgKiB3aWxsIHdvcmsgY29ycmVjdGx5LiBJZiBhbnkgb3BlcmF0aW9uIHRyaWVzIHRvIGFjY2VzcyBhbiBlbGVtZW50CiAgICogdGhhdCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgW1JdLCB0aGUgYWNjZXNzIHdpbGwgdGhyb3cgaW5zdGVhZC4KICAgKgogICAqIEVsZW1lbnRzIGFkZGVkIHRvIHRoZSBzZXQgKGUuZy4sIGJ5IHVzaW5nIFthZGRdIG9yIFthZGRBbGxdKQogICAqIG11c3QgYmUgaW5zdGFuY2Ugb2YgW1JdIHRvIGJlIHZhbGlkIGFyZ3VtZW50cyB0byB0aGUgYWRkaW5nIGZ1bmN0aW9uLAogICAqIGFuZCB0aGV5IG11c3QgYmUgaW5zdGFuY2VzIG9mIFtFXSBhcyB3ZWxsIHRvIGJlIGFjY2VwdGVkIGJ5CiAgICogdGhpcyBzZXQgYXMgd2VsbC4KICAgKi8KICBTZXQ8Uj4gY2FzdDxSPigpOwogIC8qKgogICAqIFByb3ZpZGVzIGFuIGl0ZXJhdG9yIHRoYXQgaXRlcmF0ZXMgb3ZlciB0aGUgZWxlbWVudHMgb2YgdGhpcyBzZXQuCiAgICoKICAgKiBUaGUgb3JkZXIgb2YgaXRlcmF0aW9uIGlzIGRlZmluZWQgYnkgdGhlIGluZGl2aWR1YWwgYFNldGAgaW1wbGVtZW50YXRpb24sCiAgICogYnV0IG11c3QgYmUgY29uc2lzdGVudCBiZXR3ZWVuIGNoYW5nZXMgdG8gdGhlIHNldC4KICAgKi8KICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3I7CgogIC8qKgogICAqIFJldHVybnMgdHJ1ZSBpZiBbdmFsdWVdIGlzIGluIHRoZSBzZXQuCiAgICovCiAgYm9vbCBjb250YWlucyhPYmplY3QgdmFsdWUpOwoKICAvKioKICAgKiBBZGRzIFt2YWx1ZV0gdG8gdGhlIHNldC4KICAgKgogICAqIFJldHVybnMgYHRydWVgIGlmIFt2YWx1ZV0gKG9yIGFuIGVxdWFsIHZhbHVlKSB3YXMgbm90IHlldCBpbiB0aGUgc2V0LgogICAqIE90aGVyd2lzZSByZXR1cm5zIGBmYWxzZWAgYW5kIHRoZSBzZXQgaXMgbm90IGNoYW5nZWQuCiAgICoKICAgKiBFeGFtcGxlOgogICAqCiAgICogICAgIHZhciBzZXQgPSBuZXcgU2V0KCk7CiAgICogICAgIHZhciB0aW1lMSA9IG5ldyBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaCgwKTsKICAgKiAgICAgdmFyIHRpbWUyID0gbmV3IERhdGVUaW1lLmZyb21NaWxsaXNlY29uZHNTaW5jZUVwb2NoKDApOwogICAqICAgICAvLyB0aW1lMSBhbmQgdGltZTIgYXJlIGVxdWFsLCBidXQgbm90IGlkZW50aWNhbC4KICAgKiAgICAgRXhwZWN0LmlzVHJ1ZSh0aW1lMSA9PSB0aW1lMik7CiAgICogICAgIEV4cGVjdC5pc0ZhbHNlKGlkZW50aWNhbCh0aW1lMSwgdGltZTIpKTsKICAgKiAgICAgc2V0LmFkZCh0aW1lMSk7ICAvLyA9PiB0cnVlLgogICAqICAgICAvLyBBIHZhbHVlIGVxdWFsIHRvIHRpbWUyIGV4aXN0cyBhbHJlYWR5IGluIHRoZSBzZXQsIGFuZCB0aGUgY2FsbCB0bwogICAqICAgICAvLyBhZGQgZG9lc24ndCBjaGFuZ2UgdGhlIHNldC4KICAgKiAgICAgc2V0LmFkZCh0aW1lMik7ICAvLyA9PiBmYWxzZS4KICAgKiAgICAgRXhwZWN0LmlzVHJ1ZShzZXQubGVuZ3RoID09IDEpOwogICAqICAgICBFeHBlY3QuaXNUcnVlKGlkZW50aWNhbCh0aW1lMSwgc2V0LmZpcnN0KSk7CiAgICovCiAgYm9vbCBhZGQoRSB2YWx1ZSk7CgogIC8qKgogICAqIEFkZHMgYWxsIFtlbGVtZW50c10gdG8gdGhpcyBTZXQuCiAgICoKICAgKiBFcXVpdmFsZW50IHRvIGFkZGluZyBlYWNoIGVsZW1lbnQgaW4gW2VsZW1lbnRzXSB1c2luZyBbYWRkXSwKICAgKiBidXQgc29tZSBjb2xsZWN0aW9ucyBtYXkgYmUgYWJsZSB0byBvcHRpbWl6ZSBpdC4KICAgKi8KICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBlbGVtZW50cyk7CgogIC8qKgogICAqIFJlbW92ZXMgW3ZhbHVlXSBmcm9tIHRoZSBzZXQuIFJldHVybnMgdHJ1ZSBpZiBbdmFsdWVdIHdhcwogICAqIGluIHRoZSBzZXQuIFJldHVybnMgZmFsc2Ugb3RoZXJ3aXNlLiBUaGUgbWV0aG9kIGhhcyBubyBlZmZlY3QKICAgKiBpZiBbdmFsdWVdIHZhbHVlIHdhcyBub3QgaW4gdGhlIHNldC4KICAgKi8KICBib29sIHJlbW92ZShPYmplY3QgdmFsdWUpOwoKICAvKioKICAgKiBJZiBhbiBvYmplY3QgZXF1YWwgdG8gW29iamVjdF0gaXMgaW4gdGhlIHNldCwgcmV0dXJuIGl0LgogICAqCiAgICogQ2hlY2tzIHdoZXRoZXIgW29iamVjdF0gaXMgaW4gdGhlIHNldCwgbGlrZSBbY29udGFpbnNdLCBhbmQgaWYgc28sCiAgICogcmV0dXJucyB0aGUgb2JqZWN0IGluIHRoZSBzZXQsIG90aGVyd2lzZSByZXR1cm5zIGBudWxsYC4KICAgKgogICAqIElmIHRoZSBlcXVhbGl0eSByZWxhdGlvbiB1c2VkIGJ5IHRoZSBzZXQgaXMgbm90IGlkZW50aXR5LAogICAqIHRoZW4gdGhlIHJldHVybmVkIG9iamVjdCBtYXkgbm90IGJlICppZGVudGljYWwqIHRvIFtvYmplY3RdLgogICAqIFNvbWUgc2V0IGltcGxlbWVudGF0aW9ucyBtYXkgbm90IGJlIGFibGUgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kLgogICAqIElmIHRoZSBbY29udGFpbnNdIG1ldGhvZCBpcyBjb21wdXRlZCwKICAgKiByYXRoZXIgdGhhbiBiZWluZyBiYXNlZCBvbiBhbiBhY3R1YWwgb2JqZWN0IGluc3RhbmNlLAogICAqIHRoZW4gdGhlcmUgbWF5IG5vdCBiZSBhIHNwZWNpZmljIG9iamVjdCBpbnN0YW5jZSByZXByZXNlbnRpbmcgdGhlCiAgICogc2V0IGVsZW1lbnQuCiAgICovCiAgRSBsb29rdXAoT2JqZWN0IG9iamVjdCk7CgogIC8qKgogICAqIFJlbW92ZXMgZWFjaCBlbGVtZW50IG9mIFtlbGVtZW50c10gZnJvbSB0aGlzIHNldC4KICAgKi8KICB2b2lkIHJlbW92ZUFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKTsKCiAgLyoqCiAgICogUmVtb3ZlcyBhbGwgZWxlbWVudHMgb2YgdGhpcyBzZXQgdGhhdCBhcmUgbm90IGVsZW1lbnRzIGluIFtlbGVtZW50c10uCiAgICoKICAgKiBDaGVja3MgZm9yIGVhY2ggZWxlbWVudCBvZiBbZWxlbWVudHNdIHdoZXRoZXIgdGhlcmUgaXMgYW4gZWxlbWVudCBpbiB0aGlzCiAgICogc2V0IHRoYXQgaXMgZXF1YWwgdG8gaXQgKGFjY29yZGluZyB0byBgdGhpcy5jb250YWluc2ApLCBhbmQgaWYgc28sIHRoZQogICAqIGVxdWFsIGVsZW1lbnQgaW4gdGhpcyBzZXQgaXMgcmV0YWluZWQsIGFuZCBlbGVtZW50cyB0aGF0IGFyZSBub3QgZXF1YWwKICAgKiB0byBhbnkgZWxlbWVudCBpbiBgZWxlbWVudHNgIGFyZSByZW1vdmVkLgogICAqLwogIHZvaWQgcmV0YWluQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpOwoKICAvKioKICAgKiBSZW1vdmVzIGFsbCBlbGVtZW50cyBvZiB0aGlzIHNldCB0aGF0IHNhdGlzZnkgW3Rlc3RdLgogICAqLwogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpOwoKICAvKioKICAgKiBSZW1vdmVzIGFsbCBlbGVtZW50cyBvZiB0aGlzIHNldCB0aGF0IGZhaWwgdG8gc2F0aXNmeSBbdGVzdF0uCiAgICovCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSk7CgogIC8qKgogICAqIFJldHVybnMgd2hldGhlciB0aGlzIFNldCBjb250YWlucyBhbGwgdGhlIGVsZW1lbnRzIG9mIFtvdGhlcl0uCiAgICovCiAgYm9vbCBjb250YWluc0FsbChJdGVyYWJsZTxPYmplY3Q+IG90aGVyKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBzZXQgd2hpY2ggaXMgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoaXMgc2V0IGFuZCBbb3RoZXJdLgogICAqCiAgICogVGhhdCBpcywgdGhlIHJldHVybmVkIHNldCBjb250YWlucyBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoaXMgW1NldF0gdGhhdAogICAqIGFyZSBhbHNvIGVsZW1lbnRzIG9mIFtvdGhlcl0gYWNjb3JkaW5nIHRvIGBvdGhlci5jb250YWluc2AuCiAgICovCiAgU2V0PEU+IGludGVyc2VjdGlvbihTZXQ8T2JqZWN0PiBvdGhlcik7CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgc2V0IHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhpcyBzZXQgYW5kIFtvdGhlcl0uCiAgICoKICAgKiBUaGF0IGlzLCB0aGUgcmV0dXJuZWQgc2V0IGNvbnRhaW5zIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhpcyBbU2V0XSBhbmQKICAgKiBhbGwgdGhlIGVsZW1lbnRzIG9mIFtvdGhlcl0uCiAgICovCiAgU2V0PEU+IHVuaW9uKFNldDxFPiBvdGhlcik7CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgc2V0IHdpdGggdGhlIGVsZW1lbnRzIG9mIHRoaXMgdGhhdCBhcmUgbm90IGluIFtvdGhlcl0uCiAgICoKICAgKiBUaGF0IGlzLCB0aGUgcmV0dXJuZWQgc2V0IGNvbnRhaW5zIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhpcyBbU2V0XSB0aGF0CiAgICogYXJlIG5vdCBlbGVtZW50cyBvZiBbb3RoZXJdIGFjY29yZGluZyB0byBgb3RoZXIuY29udGFpbnNgLgogICAqLwogIFNldDxFPiBkaWZmZXJlbmNlKFNldDxPYmplY3Q+IG90aGVyKTsKCiAgLyoqCiAgICogUmVtb3ZlcyBhbGwgZWxlbWVudHMgaW4gdGhlIHNldC4KICAgKi8KICB2b2lkIGNsZWFyKCk7CgogIC8qIENyZWF0ZXMgYSBbU2V0XSB3aXRoIHRoZSBzYW1lIGVsZW1lbnRzIGFuZCBiZWhhdmlvciBhcyB0aGlzIGBTZXRgLgogICAqCiAgICogVGhlIHJldHVybmVkIHNldCBiZWhhdmVzIHRoZSBzYW1lIGFzIHRoaXMgc2V0CiAgICogd2l0aCByZWdhcmQgdG8gYWRkaW5nIGFuZCByZW1vdmluZyBlbGVtZW50cy4KICAgKiBJdCBpbml0aWFsbHkgY29udGFpbnMgdGhlIHNhbWUgZWxlbWVudHMuCiAgICogSWYgdGhpcyBzZXQgc3BlY2lmaWVzIGFuIG9yZGVyaW5nIG9mIHRoZSBlbGVtZW50cywKICAgKiB0aGUgcmV0dXJuZWQgc2V0IHdpbGwgaGF2ZSB0aGUgc2FtZSBvcmRlci4KICAgKi8KICBTZXQ8RT4gdG9TZXQoKTsKfQqBDABOTjwBDwETAQRFA1EwA0tIA0g2GQM8JQNHEkpNA1BMSVBAA1BPRgQ7Bh0FM08/JwVHBiQBBiYFSw8FUAY2AQYzBTQ3SwUoH0kFUVM5BS0sBj8BBiYFUVM5BS0qBj4BBicFSVBJREoFQiQFQ0cFSUkNNgZQJQEGPAVFRkQFQktBFwYUBkcFTzgGHAEGLAYfAQYeBUs7BQ4FHkFBOigyJk4oJyk1BhUBBiYFQjYGJQEGP0MqBh0BBj4FSD4FP0JIKztHEgYbAQY3Bi0BBksFT0xMLwYtAQY7BioBBkMGKgEGRAYsAQZPBUxBBioBBlAFSyIGHgEGSgVMQAYoAQYmBhABSAUzMi44MAYSAgESZGFydDpjb3JlL3NldC5kYXJ0O29yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2NvcmUvc2luay5kYXJ0gzYvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIEEgZ2VuZXJpYyBkZXN0aW5hdGlvbiBmb3IgZGF0YS4KICoKICogTXVsdGlwbGUgZGF0YSB2YWx1ZXMgY2FuIGJlIHB1dCBpbnRvIGEgc2luaywgYW5kIHdoZW4gbm8gbW9yZSBkYXRhIGlzCiAqIGF2YWlsYWJsZSwgdGhlIHNpbmsgc2hvdWxkIGJlIGNsb3NlZC4KICoKICogVGhpcyBpcyBhIGdlbmVyaWMgaW50ZXJmYWNlIHRoYXQgb3RoZXIgZGF0YSByZWNlaXZlcnMgY2FuIGltcGxlbWVudC4KICovCmFic3RyYWN0IGNsYXNzIFNpbms8VD4gewogIC8qKgogICAqIEFkZHMgW2RhdGFdIHRvIHRoZSBzaW5rLgogICAqCiAgICogTXVzdCBub3QgYmUgY2FsbGVkIGFmdGVyIGEgY2FsbCB0byBbY2xvc2VdLgogICAqLwogIHZvaWQgYWRkKFQgZGF0YSk7CgogIC8qKgogICAqIENsb3NlcyB0aGUgc2luay4KICAgKgogICAqIFRoZSBbYWRkXSBtZXRob2QgbXVzdCBub3QgYmUgY2FsbGVkIGFmdGVyIHRoaXMgbWV0aG9kLgogICAqCiAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCBtb3JlIHRoYW4gb25jZSBpcyBhbGxvd2VkLCBidXQgZG9lcyBub3RoaW5nLgogICAqLwogIHZvaWQgY2xvc2UoKTsKfQojAE5OPAEPARMBBCMDSSkDSAQZBh4FMQYUAQYWBTwFRgYQAgETZGFydDpjb3JlL3NpbmsuZGFydEFvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9jb3JlL3N0YWNrdHJhY2UuZGFydIfKLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBBbiBpbnRlcmZhY2UgaW1wbGVtZW50ZWQgYnkgYWxsIHN0YWNrIHRyYWNlIG9iamVjdHMuCiAqCiAqIEEgW1N0YWNrVHJhY2VdIGlzIGludGVuZGVkIHRvIGNvbnZleSBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciBhYm91dCB0aGUgY2FsbAogKiBzZXF1ZW5jZSB0aGF0IHRyaWdnZXJlZCBhbiBleGNlcHRpb24uCiAqCiAqIFRoZXNlIG9iamVjdHMgYXJlIGNyZWF0ZWQgYnkgdGhlIHJ1bnRpbWUsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBjcmVhdGUKICogdGhlbSBwcm9ncmFtbWF0aWNhbGx5LgogKi8KYWJzdHJhY3QgY2xhc3MgU3RhY2tUcmFjZSB7CiAgU3RhY2tUcmFjZSgpOyAvLyBJbiBjYXNlIGV4aXN0aW5nIGNsYXNzZXMgZXh0ZW5kIFN0YWNrVHJhY2UuCgogIC8qKgogICAqIENyZWF0ZSBhIGBTdGFja1RyYWNlYCBvYmplY3QgZnJvbSBbc3RhY2tUcmFjZVN0cmluZ10uCiAgICoKICAgKiBUaGUgY3JlYXRlZCBzdGFjayB0cmFjZSB3aWxsIGhhdmUgYSBgdG9TdHJpbmdgIG1ldGhvZCByZXR1cm5pbmcKICAgKiBgc3RhY2tUcmFjZVN0cmluZ2AuCiAgICoKICAgKiBUaGUgYHN0YWNrVHJhY2VTdHJpbmdgIGNhbiBiZSBhIHN0cmluZyByZXR1cm5lZCBieSBzb21lIG90aGVyCiAgICogc3RhY2sgdHJhY2UsIG9yIGl0IGNhbiBiZSBhbnkgc3RyaW5nIGF0IGFsbC4KICAgKiBJZiB0aGUgc3RyaW5nIGRvZXNuJ3QgbG9vayBsaWtlIGEgc3RhY2sgdHJhY2UsIGNvZGUgdGhhdCBpbnRlcnByZXRzCiAgICogc3RhY2sgdHJhY2VzIGlzIGxpa2VseSB0byBmYWlsLCBzbyBmYWtlIHN0YWNrIHRyYWNlcyBzaG91bGQgYmUgdXNlZAogICAqIHdpdGggY2FyZS4KICAgKi8KICBmYWN0b3J5IFN0YWNrVHJhY2UuZnJvbVN0cmluZyhTdHJpbmcgc3RhY2tUcmFjZVN0cmluZykgPSBfU3RyaW5nU3RhY2tUcmFjZTsKCiAgLyoqCiAgICogUmV0dXJucyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IHN0YWNrIHRyYWNlLgogICAqCiAgICogVGhpcyBpcyBzaW1pbGFyIHRvIHdoYXQgY2FuIGJlIGFjaGlldmVkIGJ5IGRvaW5nOgogICAqCiAgICogICAgIHRyeSB7IHRocm93IDA7IH0gY2F0Y2ggKF8sIHN0YWNrKSB7IHJldHVybiBzdGFjazsgfQogICAqCiAgICogVGhlIGdldHRlciBhY2hpZXZlcyB0aGlzIHdpdGhvdXQgdGhyb3dpbmcsIGV4Y2VwdCBvbiBwbGF0Zm9ybXMgdGhhdAogICAqIGhhdmUgbm8gb3RoZXIgd2F5IHRvIGdldCBhIHN0YWNrIHRyYWNlLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBTdGFja1RyYWNlIGdldCBjdXJyZW50OwoKICAvKioKICAgKiBSZXR1cm5zIGEgW1N0cmluZ10gcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0YWNrIHRyYWNlLgogICAqCiAgICogVGhlIHN0cmluZyByZXByZXNlbnRzIHRoZSBmdWxsIHN0YWNrIHRyYWNlIHN0YXJ0aW5nIGZyb20KICAgKiB0aGUgcG9pbnQgd2hlcmUgYSB0aHJvdyBvY2N1cnJlZCB0byB0aGUgdG9wIG9mIHRoZSBjdXJyZW50IGNhbGwgc2VxdWVuY2UuCiAgICoKICAgKiBUaGUgZXhhY3QgZm9ybWF0IG9mIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgbm90IGZpbmFsLgogICAqLwogIFN0cmluZyB0b1N0cmluZygpOwp9CgpjbGFzcyBfU3RyaW5nU3RhY2tUcmFjZSBpbXBsZW1lbnRzIFN0YWNrVHJhY2UgewogIGZpbmFsIFN0cmluZyBfc3RhY2tUcmFjZTsKICBfU3RyaW5nU3RhY2tUcmFjZSh0aGlzLl9zdGFja1RyYWNlKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBfc3RhY2tUcmFjZTsKfQpAAE5OPAEPARMBBDgDTykDShoEHD8BBjsFRRkFQzJJSRAGTgEGOgU3BT0FSS0GKgEGOwU+TwVBBhUCATAcJyQCARlkYXJ0OmNvcmUvc3RhY2t0cmFjZS5kYXJ0QG9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL2NvcmUvc3RvcHdhdGNoLmRhcnSMEi8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogQSBzaW1wbGUgc3RvcHdhdGNoIGludGVyZmFjZSB0byBtZWFzdXJlIGVsYXBzZWQgdGltZS4KICovCmNsYXNzIFN0b3B3YXRjaCB7CiAgLyoqCiAgICogQ2FjaGVkIGZyZXF1ZW5jeSBvZiB0aGUgc3lzdGVtIGluIEh6ICh0aWNrcyBwZXIgc2Vjb25kKS4KICAgKgogICAqIE11c3QgYmUgaW5pdGlhbGl6ZWQgaW4gW19pbml0VGlja2VyXTsKICAgKi8KICBzdGF0aWMgaW50IF9mcmVxdWVuY3k7CgogIC8vIFRoZSBfc3RhcnQgYW5kIF9zdG9wIGZpZWxkcyBjYXB0dXJlIHRoZSB0aW1lIHdoZW4gW3N0YXJ0XSBhbmQgW3N0b3BdCiAgLy8gYXJlIGNhbGxlZCByZXNwZWN0aXZlbHkuCiAgLy8gSWYgX3N0b3AgaXMgbnVsbCwgdGhlIHN0b3B3YXRjaCBpcyBydW5uaW5nLgogIGludCBfc3RhcnQgPSAwOwogIGludCBfc3RvcCA9IDA7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbU3RvcHdhdGNoXSBpbiBzdG9wcGVkIHN0YXRlIHdpdGggYSB6ZXJvIGVsYXBzZWQgY291bnQuCiAgICoKICAgKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIHN0YXJ0IGEgW1N0b3B3YXRjaF0KICAgKiBpbW1lZGlhdGVseSBhZnRlciBhbGxvY2F0aW9uLgogICAqIGBgYAogICAqIHZhciBzdG9wd2F0Y2ggPSBuZXcgU3RvcHdhdGNoKCkuLnN0YXJ0KCk7CiAgICogYGBgCiAgICovCiAgU3RvcHdhdGNoKCkgewogICAgaWYgKF9mcmVxdWVuY3kgPT0gbnVsbCkgX2luaXRUaWNrZXIoKTsKICB9CgogIC8qKgogICAqIEZyZXF1ZW5jeSBvZiB0aGUgZWxhcHNlZCBjb3VudGVyIGluIEh6LgogICAqLwogIGludCBnZXQgZnJlcXVlbmN5ID0+IF9mcmVxdWVuY3k7CgogIC8qKgogICAqIFN0YXJ0cyB0aGUgW1N0b3B3YXRjaF0uCiAgICoKICAgKiBUaGUgW2VsYXBzZWRdIGNvdW50IGlzIGluY3JlYXNpbmcgbW9ub3RvbmljYWxseS4gSWYgdGhlIFtTdG9wd2F0Y2hdIGhhcwogICAqIGJlZW4gc3RvcHBlZCwgdGhlbiBjYWxsaW5nIHN0YXJ0IGFnYWluIHJlc3RhcnRzIGl0IHdpdGhvdXQgcmVzZXR0aW5nIHRoZQogICAqIFtlbGFwc2VkXSBjb3VudC4KICAgKgogICAqIElmIHRoZSBbU3RvcHdhdGNoXSBpcyBjdXJyZW50bHkgcnVubmluZywgdGhlbiBjYWxsaW5nIHN0YXJ0IGRvZXMgbm90aGluZy4KICAgKi8KICB2b2lkIHN0YXJ0KCkgewogICAgaWYgKF9zdG9wICE9IG51bGwpIHsKICAgICAgLy8gKFJlKXN0YXJ0IHRoaXMgc3RvcHdhdGNoLgogICAgICAvLyBEb24ndCBjb3VudCB0aGUgdGltZSB3aGlsZSB0aGUgc3RvcHdhdGNoIGhhcyBiZWVuIHN0b3BwZWQuCiAgICAgIF9zdGFydCArPSBfbm93KCkgLSBfc3RvcDsKICAgICAgX3N0b3AgPSBudWxsOwogICAgfQogIH0KCiAgLyoqCiAgICogU3RvcHMgdGhlIFtTdG9wd2F0Y2hdLgogICAqCiAgICogVGhlIFtlbGFwc2VkVGlja3NdIGNvdW50IHN0b3BzIGluY3JlYXNpbmcgYWZ0ZXIgdGhpcyBjYWxsLiBJZiB0aGUKICAgKiBbU3RvcHdhdGNoXSBpcyBjdXJyZW50bHkgbm90IHJ1bm5pbmcsIHRoZW4gY2FsbGluZyB0aGlzIG1ldGhvZCBoYXMgbm8KICAgKiBlZmZlY3QuCiAgICovCiAgdm9pZCBzdG9wKCkgewogICAgX3N0b3AgPz89IF9ub3coKTsKICB9CgogIC8qKgogICAqIFJlc2V0cyB0aGUgW2VsYXBzZWRdIGNvdW50IHRvIHplcm8uCiAgICoKICAgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBzdG9wIG9yIHN0YXJ0IHRoZSBbU3RvcHdhdGNoXS4KICAgKi8KICB2b2lkIHJlc2V0KCkgewogICAgX3N0YXJ0ID0gX3N0b3AgPz8gX25vdygpOwogIH0KCiAgLyoqCiAgICogVGhlIGVsYXBzZWQgbnVtYmVyIG9mIGNsb2NrIHRpY2tzIHNpbmNlIGNhbGxpbmcgW3N0YXJ0XSB3aGlsZSB0aGUKICAgKiBbU3RvcHdhdGNoXSBpcyBydW5uaW5nLgogICAqCiAgICogVGhpcyBpcyB0aGUgZWxhcHNlZCBudW1iZXIgb2YgY2xvY2sgdGlja3MgYmV0d2VlbiBjYWxsaW5nIFtzdGFydF0gYW5kCiAgICogY2FsbGluZyBbc3RvcF0uCiAgICoKICAgKiBJcyAwIGlmIHRoZSBbU3RvcHdhdGNoXSBoYXMgbmV2ZXIgYmVlbiBzdGFydGVkLgogICAqCiAgICogVGhlIGVsYXBzZWQgbnVtYmVyIG9mIGNsb2NrIHRpY2tzIGluY3JlYXNlcyBieSBbZnJlcXVlbmN5XSBldmVyeSBzZWNvbmQuCiAgICovCiAgaW50IGdldCBlbGFwc2VkVGlja3MgewogICAgcmV0dXJuIChfc3RvcCA/PyBfbm93KCkpIC0gX3N0YXJ0OwogIH0KCiAgLyoqCiAgICogVGhlIFtlbGFwc2VkVGlja3NdIGNvdW50ZXIgY29udmVydGVkIHRvIGEgW0R1cmF0aW9uXS4KICAgKi8KICBEdXJhdGlvbiBnZXQgZWxhcHNlZCB7CiAgICByZXR1cm4gRHVyYXRpb24obWljcm9zZWNvbmRzOiBlbGFwc2VkTWljcm9zZWNvbmRzKTsKICB9CgogIC8qKgogICAqIFRoZSBbZWxhcHNlZFRpY2tzXSBjb3VudGVyIGNvbnZlcnRlZCB0byBtaWNyb3NlY29uZHMuCiAgICovCiAgZXh0ZXJuYWwgaW50IGdldCBlbGFwc2VkTWljcm9zZWNvbmRzOwoKICAvKioKICAgKiBUaGUgW2VsYXBzZWRUaWNrc10gY291bnRlciBjb252ZXJ0ZWQgdG8gbWlsbGlzZWNvbmRzLgogICAqLwogIGV4dGVybmFsIGludCBnZXQgZWxhcHNlZE1pbGxpc2Vjb25kczsKCiAgLyoqCiAgICogV2hldGhlciB0aGUgW1N0b3B3YXRjaF0gaXMgY3VycmVudGx5IHJ1bm5pbmcuCiAgICovCiAgYm9vbCBnZXQgaXNSdW5uaW5nID0+IF9zdG9wID09IG51bGw7CgogIC8qKgogICAqIEluaXRpYWxpemVzIHRoZSB0aW1lLW1lYXN1cmluZyBzeXN0ZW0uICpNdXN0KiBpbml0aWFsaXplIHRoZSBbX2ZyZXF1ZW5jeV0KICAgKiB2YXJpYWJsZS4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgdm9pZCBfaW5pdFRpY2tlcigpOwogIGV4dGVybmFsIHN0YXRpYyBpbnQgX25vdygpOwp9Cn8ATk48AQ8BEwEEOQQSBj4FKwYZAUoeMRIRAQZHBTwjCS8JBhArBAEGLQYjAQYdBU1OFgVPBhEZI0QgFAYEAQYcBUdLDQYQFgQBBikFOQYRHgQBBkcdBUsVBTUFTgYZJwQBBjsGGTgEAQY7BigBBjsGKAEGMwYnAQZPDwYmHgIBGGRhcnQ6Y29yZS9zdG9wd2F0Y2guZGFydFJvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faW50ZXJuYWwvdm0vbGliL3N0b3B3YXRjaF9wYXRjaC5kYXJ0hzIvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgU3RvcHdhdGNoIHsKICBzdGF0aWMgY29uc3QgX21heEludCA9IDB4N0ZGRkZGRkZGRkZGRkZGRjsKCiAgQHBhdGNoCiAgc3RhdGljIHZvaWQgX2luaXRUaWNrZXIoKSB7CiAgICBpZiAoX2ZyZXF1ZW5jeSA9PSBudWxsKSB7CiAgICAgIF9mcmVxdWVuY3kgPSBfY29tcHV0ZUZyZXF1ZW5jeSgpOwogICAgfQogIH0KCiAgLy8gUmV0dXJucyB0aGUgY3VycmVudCBjbG9jayB0aWNrLgogIEBwYXRjaAogIHN0YXRpYyBpbnQgX25vdygpIG5hdGl2ZSAiU3RvcHdhdGNoX25vdyI7CgogIC8vIFJldHVybnMgdGhlIGZyZXF1ZW5jeSBvZiBjbG9jayB0aWNrcyBpbiBIei4KICBzdGF0aWMgaW50IF9jb21wdXRlRnJlcXVlbmN5KCkgbmF0aXZlICJTdG9wd2F0Y2hfZnJlcXVlbmN5IjsKCiAgQHBhdGNoCiAgaW50IGdldCBlbGFwc2VkTWljcm9zZWNvbmRzIHsKICAgIGludCB0aWNrcyA9IGVsYXBzZWRUaWNrczsKICAgIC8vIFNwZWNpYWwgY2FzZSB0aGUgbW9yZSBsaWtlbHkgZnJlcXVlbmNpZXMgdG8gYXZvaWQgZGl2aXNpb24sCiAgICAvLyBvciBkaXZpZGUgYnkgYSBrbm93biB2YWx1ZS4KICAgIGlmIChfZnJlcXVlbmN5ID09IDEwMDAwMDAwMDApIHJldHVybiB0aWNrcyB+LyAxMDAwOwogICAgaWYgKF9mcmVxdWVuY3kgPT0gMTAwMDAwMCkgcmV0dXJuIHRpY2tzOwogICAgaWYgKF9mcmVxdWVuY3kgPT0gMTAwMCkgcmV0dXJuIHRpY2tzICogMTAwMDsKICAgIGlmICh0aWNrcyA8PSAoX21heEludCB+LyAxMDAwMDAwKSkgewogICAgICByZXR1cm4gKHRpY2tzICogMTAwMDAwMCkgfi8gX2ZyZXF1ZW5jeTsKICAgIH0KICAgIC8vIE11bHRpcGxpY2F0aW9uIHdvdWxkIGhhdmUgb3ZlcmZsb3dlZC4KICAgIGludCB0aWNrc1BlclNlY29uZCA9IHRpY2tzIH4vIF9mcmVxdWVuY3k7CiAgICBpbnQgcmVtYWluaW5nVGlja3MgPSB0aWNrcy5yZW1haW5kZXIoX2ZyZXF1ZW5jeSk7CiAgICByZXR1cm4gdGlja3NQZXJTZWNvbmQgKiAxMDAwMDAwICsgKHJlbWFpbmluZ1RpY2tzICogMTAwMDAwMCkgfi8gX2ZyZXF1ZW5jeTsKICB9CgogIEBwYXRjaAogIGludCBnZXQgZWxhcHNlZE1pbGxpc2Vjb25kcyB7CiAgICBpbnQgdGlja3MgPSBlbGFwc2VkVGlja3M7CiAgICBpZiAoX2ZyZXF1ZW5jeSA9PSAxMDAwMDAwMDAwKSByZXR1cm4gdGlja3Mgfi8gMTAwMDAwMDsKICAgIGlmIChfZnJlcXVlbmN5ID09IDEwMDAwMDApIHJldHVybiB0aWNrcyB+LyAxMDAwOwogICAgaWYgKF9mcmVxdWVuY3kgPT0gMTAwMCkgcmV0dXJuIHRpY2tzOwogICAgaWYgKHRpY2tzIDw9IChfbWF4SW50IH4vIDEwMDApKSB7CiAgICAgIHJldHVybiAodGlja3MgKiAxMDAwKSB+LyBfZnJlcXVlbmN5OwogICAgfQogICAgLy8gTXVsdGlwbGljYXRpb24gd291bGQgaGF2ZSBvdmVyZmxvd2VkLgogICAgaW50IHRpY2tzUGVyU2Vjb25kID0gdGlja3Mgfi8gX2ZyZXF1ZW5jeTsKICAgIGludCByZW1haW5pbmdUaWNrcyA9IHRpY2tzLnJlbWFpbmRlcihfZnJlcXVlbmN5KTsKICAgIHJldHVybiB0aWNrc1BlclNlY29uZCAqIDEwMDAgKyAocmVtYWluaW5nVGlja3MgKiAxMDAwKSB+LyBfZnJlcXVlbmN5OwogIH0KfQo8AE5OPAEPAR4BBxItAQkeHigGBAElCSwBMT8BCSAeQyM4LTEpLgYtLjZQBAEJIB47NSomKwYtLjZKBAIBJGRhcnQ6Y29yZS1wYXRjaC9zdG9wd2F0Y2hfcGF0Y2guZGFydD1vcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9jb3JlL3N0cmluZy5kYXJ0wAByBC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogQSBzZXF1ZW5jZSBvZiBVVEYtMTYgY29kZSB1bml0cy4KICoKICogU3RyaW5ncyBhcmUgbWFpbmx5IHVzZWQgdG8gcmVwcmVzZW50IHRleHQuIEEgY2hhcmFjdGVyIG1heSBiZSByZXByZXNlbnRlZCBieQogKiBtdWx0aXBsZSBjb2RlIHBvaW50cywgZWFjaCBjb2RlIHBvaW50IGNvbnNpc3Rpbmcgb2Ygb25lIG9yIHR3byBjb2RlCiAqIHVuaXRzLiBGb3IgZXhhbXBsZSB0aGUgUGFwdWEgTmV3IEd1aW5lYSBmbGFnIGNoYXJhY3RlciByZXF1aXJlcyBmb3VyIGNvZGUKICogdW5pdHMgdG8gcmVwcmVzZW50IHR3byBjb2RlIHBvaW50cywgYnV0IHNob3VsZCBiZSB0cmVhdGVkIGxpa2UgYSBzaW5nbGUKICogY2hhcmFjdGVyOiAi8J+HtfCfh6wiLiBQbGF0Zm9ybXMgdGhhdCBkbyBub3Qgc3VwcG9ydCB0aGUgZmxhZyBjaGFyYWN0ZXIgbWF5IHNob3cKICogdGhlIGxldHRlcnMgIlBHIiBpbnN0ZWFkLiBJZiB0aGUgY29kZSBwb2ludHMgYXJlIHN3YXBwZWQsIGl0IGluc3RlYWQgYmVjb21lcwogKiB0aGUgR3VhZGVsb3VwZSBmbGFnICLwn4es8J+HtSIgKCJHUCIpLgogKgogKiBBIHN0cmluZyBjYW4gYmUgZWl0aGVyIHNpbmdsZSBvciBtdWx0aWxpbmUuIFNpbmdsZSBsaW5lIHN0cmluZ3MgYXJlCiAqIHdyaXR0ZW4gdXNpbmcgbWF0Y2hpbmcgc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXMsIGFuZCBtdWx0aWxpbmUgc3RyaW5ncyBhcmUKICogd3JpdHRlbiB1c2luZyB0cmlwbGUgcXVvdGVzLiBUaGUgZm9sbG93aW5nIGFyZSBhbGwgdmFsaWQgRGFydCBzdHJpbmdzOgogKgogKiAgICAgJ1NpbmdsZSBxdW90ZXMnOwogKiAgICAgIkRvdWJsZSBxdW90ZXMiOwogKiAgICAgJ0RvdWJsZSBxdW90ZXMgaW4gInNpbmdsZSIgcXVvdGVzJzsKICogICAgICJTaW5nbGUgcXVvdGVzIGluICdkb3VibGUnIHF1b3RlcyI7CiAqCiAqICAgICAnJydBCiAqICAgICBtdWx0aWxpbmUKICogICAgIHN0cmluZycnJzsKICoKICogICAgICIiIgogKiAgICAgQW5vdGhlcgogKiAgICAgbXVsdGlsaW5lCiAqICAgICBzdHJpbmciIiI7CiAqCiAqIFN0cmluZ3MgYXJlIGltbXV0YWJsZS4gQWx0aG91Z2ggeW91IGNhbm5vdCBjaGFuZ2UgYSBzdHJpbmcsIHlvdSBjYW4gcGVyZm9ybQogKiBhbiBvcGVyYXRpb24gb24gYSBzdHJpbmcgYW5kIGFzc2lnbiB0aGUgcmVzdWx0IHRvIGEgbmV3IHN0cmluZzoKICoKICogICAgIHZhciBzdHJpbmcgPSAnRGFydCBpcyBmdW4nOwogKiAgICAgdmFyIG5ld1N0cmluZyA9IHN0cmluZy5zdWJzdHJpbmcoMCwgNSk7CiAqCiAqIFlvdSBjYW4gdXNlIHRoZSBwbHVzIChgK2ApIG9wZXJhdG9yIHRvIGNvbmNhdGVuYXRlIHN0cmluZ3M6CiAqCiAqICAgICAnRGFydCAnICsgJ2lzICcgKyAnZnVuISc7IC8vICdEYXJ0IGlzIGZ1biEnCiAqCiAqIFlvdSBjYW4gYWxzbyB1c2UgYWRqYWNlbnQgc3RyaW5nIGxpdGVyYWxzIGZvciBjb25jYXRlbmF0aW9uOgogKgogKiAgICAgJ0RhcnQgJyAnaXMgJyAnZnVuISc7ICAgIC8vICdEYXJ0IGlzIGZ1biEnCiAqCiAqIFlvdSBjYW4gdXNlIGAke31gIHRvIGludGVycG9sYXRlIHRoZSB2YWx1ZSBvZiBEYXJ0IGV4cHJlc3Npb25zCiAqIHdpdGhpbiBzdHJpbmdzLiBUaGUgY3VybHkgYnJhY2VzIGNhbiBiZSBvbWl0dGVkIHdoZW4gZXZhbHVhdGluZyBpZGVudGlmaWVyczoKICoKICogICAgIHN0cmluZyA9ICdkYXJ0bGFuZyc7CiAqICAgICAnJHN0cmluZyBoYXMgJHtzdHJpbmcubGVuZ3RofSBsZXR0ZXJzJzsgLy8gJ2RhcnRsYW5nIGhhcyA4IGxldHRlcnMnCiAqCiAqIEEgc3RyaW5nIGlzIHJlcHJlc2VudGVkIGJ5IGEgc2VxdWVuY2Ugb2YgVW5pY29kZSBVVEYtMTYgY29kZSB1bml0cwogKiBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIFtjb2RlVW5pdEF0XSBvciB0aGUgW2NvZGVVbml0c10gbWVtYmVyczoKICoKICogICAgIHN0cmluZyA9ICdEYXJ0JzsKICogICAgIHN0cmluZy5jb2RlVW5pdEF0KDApOyAvLyA2OAogKiAgICAgc3RyaW5nLmNvZGVVbml0czsgICAgIC8vIFs2OCwgOTcsIDExNCwgMTE2XQogKgogKiBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGNvZGUgdW5pdHMgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBpbmRleAogKiBvcGVyYXRvcjoKICoKICogICAgIHN0cmluZ1swXTsgICAgICAgICAgICAvLyAnRCcKICoKICogVGhlIGNoYXJhY3RlcnMgb2YgYSBzdHJpbmcgYXJlIGVuY29kZWQgaW4gVVRGLTE2LiBEZWNvZGluZyBVVEYtMTYsIHdoaWNoCiAqIGNvbWJpbmVzIHN1cnJvZ2F0ZSBwYWlycywgeWllbGRzIFVuaWNvZGUgY29kZSBwb2ludHMuIEZvbGxvd2luZyBhIHNpbWlsYXIKICogdGVybWlub2xvZ3kgdG8gR28sIHdlIHVzZSB0aGUgbmFtZSAncnVuZScgZm9yIGFuIGludGVnZXIgcmVwcmVzZW50aW5nIGEKICogVW5pY29kZSBjb2RlIHBvaW50LiBVc2UgdGhlIFtydW5lc10gcHJvcGVydHkgdG8gZ2V0IHRoZSBydW5lcyBvZiBhIHN0cmluZzoKICoKICogICAgIHN0cmluZy5ydW5lcy50b0xpc3QoKTsgLy8gWzY4LCA5NywgMTE0LCAxMTZdCiAqCiAqIEZvciBhIGNoYXJhY3RlciBvdXRzaWRlIHRoZSBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUgKHBsYW5lIDApIHRoYXQgaXMKICogY29tcG9zZWQgb2YgYSBzdXJyb2dhdGUgcGFpciwgW3J1bmVzXSBjb21iaW5lcyB0aGUgcGFpciBhbmQgcmV0dXJucyBhCiAqIHNpbmdsZSBpbnRlZ2VyLiAgRm9yIGV4YW1wbGUsIHRoZSBVbmljb2RlIGNoYXJhY3RlciBmb3IgYQogKiBtdXNpY2FsIEctY2xlZiAoJ/CdhJ4nKSB3aXRoIHJ1bmUgdmFsdWUgMHgxRDExRSBjb25zaXN0cyBvZiBhIFVURi0xNiBzdXJyb2dhdGUKICogcGFpcjogYDB4RDgzNGAgYW5kIGAweEREMUVgLiBVc2luZyBbY29kZVVuaXRzXSByZXR1cm5zIHRoZSBzdXJyb2dhdGUgcGFpciwKICogYW5kIHVzaW5nIGBydW5lc2AgcmV0dXJucyB0aGVpciBjb21iaW5lZCB2YWx1ZToKICoKICogICAgIHZhciBjbGVmID0gJ1x1ezFEMTFFfSc7CiAqICAgICBjbGVmLmNvZGVVbml0czsgICAgICAgICAvLyBbMHhEODM0LCAweEREMUVdCiAqICAgICBjbGVmLnJ1bmVzLnRvTGlzdCgpOyAgICAvLyBbMHgxRDExRV0KICoKICogVGhlIFN0cmluZyBjbGFzcyBjYW4gbm90IGJlIGV4dGVuZGVkIG9yIGltcGxlbWVudGVkLiBBdHRlbXB0aW5nIHRvIGRvIHNvCiAqIHlpZWxkcyBhIGNvbXBpbGUtdGltZSBlcnJvci4KICoKICogIyMgT3RoZXIgcmVzb3VyY2VzCiAqCiAqIFNlZSBbU3RyaW5nQnVmZmVyXSB0byBlZmZpY2llbnRseSBidWlsZCBhIHN0cmluZyBpbmNyZW1lbnRhbGx5LiBTZWUKICogW1JlZ0V4cF0gdG8gd29yayB3aXRoIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiAqCiAqIEFsc28gc2VlOgogKgogKiAqIFtEYXJ0IENvb2tib29rXShodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZG9jcy9jb29rYm9vay8jc3RyaW5ncykKICogICBmb3IgU3RyaW5nIGV4YW1wbGVzIGFuZCByZWNpcGVzLgogKiAqIFtEYXJ0IFVwIGFuZCBSdW5uaW5nXShodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZG9jcy9kYXJ0LXVwLWFuZC1ydW5uaW5nL2NoMDMuaHRtbCNzdHJpbmdzLWFuZC1yZWd1bGFyLWV4cHJlc3Npb25zKQogKi8KYWJzdHJhY3QgY2xhc3MgU3RyaW5nIGltcGxlbWVudHMgQ29tcGFyYWJsZTxTdHJpbmc+LCBQYXR0ZXJuIHsKICAvKioKICAgKiBBbGxvY2F0ZXMgYSBuZXcgU3RyaW5nIGZvciB0aGUgc3BlY2lmaWVkIFtjaGFyQ29kZXNdLgogICAqCiAgICogVGhlIFtjaGFyQ29kZXNdIGNhbiBiZSBVVEYtMTYgY29kZSB1bml0cyBvciBydW5lcy4gSWYgYSBjaGFyLWNvZGUgdmFsdWUgaXMKICAgKiAxNi1iaXQsIGl0IGlzIGNvcGllZCB2ZXJiYXRpbToKICAgKgogICAqICAgICBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoWzY4XSk7IC8vICdEJwogICAqCiAgICogSWYgYSBjaGFyLWNvZGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIDE2LWJpdHMsIGl0IGlzIGRlY29tcG9zZWQgaW50byBhCiAgICogc3Vycm9nYXRlIHBhaXI6CiAgICoKICAgKiAgICAgdmFyIGNsZWYgPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoWzB4MUQxMUVdKTsKICAgKiAgICAgY2xlZi5jb2RlVW5pdEF0KDApOyAvLyAweEQ4MzQKICAgKiAgICAgY2xlZi5jb2RlVW5pdEF0KDEpOyAvLyAweEREMUUKICAgKgogICAqIElmIFtzdGFydF0gYW5kIFtlbmRdIGlzIHByb3ZpZGVkLCBvbmx5IHRoZSB2YWx1ZXMgb2YgW2NoYXJDb2Rlc10KICAgKiBhdCBwb3NpdGlvbnMgZnJvbSBgc3RhcnRgIHRvLCBidXQgbm90IGluY2x1ZGluZywgYGVuZGAsIGFyZSB1c2VkLgogICAqIFRoZSBgc3RhcnRgIGFuZCBgZW5kYCB2YWx1ZXMgbXVzdCBzYXRpc2Z5CiAgICogYDAgPD0gc3RhcnQgPD0gZW5kIDw9IGNoYXJDb2Rlcy5sZW5ndGhgLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgU3RyaW5nLmZyb21DaGFyQ29kZXMoSXRlcmFibGU8aW50PiBjaGFyQ29kZXMsCiAgICAgIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSk7CgogIC8qKgogICAqIEFsbG9jYXRlcyBhIG5ldyBTdHJpbmcgZm9yIHRoZSBzcGVjaWZpZWQgW2NoYXJDb2RlXS4KICAgKgogICAqIElmIHRoZSBbY2hhckNvZGVdIGNhbiBiZSByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBVVEYtMTYgY29kZSB1bml0LCB0aGUgbmV3CiAgICogc3RyaW5nIGNvbnRhaW5zIGEgc2luZ2xlIGNvZGUgdW5pdC4gT3RoZXJ3aXNlLCB0aGUgW2xlbmd0aF0gaXMgMiBhbmQKICAgKiB0aGUgY29kZSB1bml0cyBmb3JtIGEgc3Vycm9nYXRlIHBhaXIuIFNlZSBkb2N1bWVudGF0aW9uIGZvcgogICAqIFtmcm9tQ2hhckNvZGVzXS4KICAgKgogICAqIENyZWF0aW5nIGEgU3RyaW5nIHdpdGggaGFsZiBvZiBhIHN1cnJvZ2F0ZSBwYWlyIGlzIGFsbG93ZWQuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBTdHJpbmcuZnJvbUNoYXJDb2RlKGludCBjaGFyQ29kZSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgZW52aXJvbm1lbnQgZGVjbGFyYXRpb24gW25hbWVdLgogICAqCiAgICogRW52aXJvbm1lbnQgZGVjbGFyYXRpb25zIGFyZSBwcm92aWRlZCBieSB0aGUgc3Vycm91bmRpbmcgc3lzdGVtIGNvbXBpbGluZwogICAqIG9yIHJ1bm5pbmcgdGhlIERhcnQgcHJvZ3JhbS4gRGVjbGFyYXRpb25zIG1hcCBhIHN0cmluZyBrZXkgdG8gYSBzdHJpbmcKICAgKiB2YWx1ZS4KICAgKgogICAqIElmIFtuYW1lXSBpcyBub3QgZGVjbGFyZWQgaW4gdGhlIGVudmlyb25tZW50LCB0aGUgcmVzdWx0IGlzIGluc3RlYWQKICAgKiBbZGVmYXVsdFZhbHVlXS4KICAgKgogICAqIEV4YW1wbGUgb2YgZ2V0dGluZyBhIHZhbHVlOgogICAqCiAgICogICAgIGNvbnN0IFN0cmluZy5mcm9tRW52aXJvbm1lbnQoImRlZmF1bHRGbG9vIiwgZGVmYXVsdFZhbHVlOiAibm8gZmxvbyIpCiAgICoKICAgKiBFeGFtcGxlIG9mIGNoZWNraW5nIHdoZXRoZXIgYSBkZWNsYXJhdGlvbiBpcyB0aGVyZSBhdCBhbGw6CiAgICoKICAgKiAgICAgdmFyIGlzRGVjbGFyZWQgPSBjb25zdCBTdHJpbmcuZnJvbUVudmlyb25tZW50KCJtYXliZURlY2xhcmVkIikgIT0gbnVsbDsKICAgKi8KICAvLyBUaGUgLmZyb21FbnZpcm9ubWVudCgpIGNvbnN0cnVjdG9ycyBhcmUgc3BlY2lhbCBpbiB0aGF0IHdlIGRvIG5vdCB3YW50CiAgLy8gdXNlcnMgdG8gY2FsbCB0aGVtIHVzaW5nICJuZXciLiBXZSBwcm9oaWJpdCB0aGF0IGJ5IGdpdmluZyB0aGVtIGJvZGllcwogIC8vIHRoYXQgdGhyb3csIGV2ZW4gdGhvdWdoIGNvbnN0IGNvbnN0cnVjdG9ycyBhcmUgbm90IGFsbG93ZWQgdG8gaGF2ZSBib2RpZXMuCiAgLy8gRGlzYWJsZSB0aG9zZSBzdGF0aWMgZXJyb3JzLgogIC8vaWdub3JlOiBjb25zdF9jb25zdHJ1Y3Rvcl93aXRoX2JvZHkKICAvL2lnbm9yZTogY29uc3RfZmFjdG9yeQogIGV4dGVybmFsIGNvbnN0IGZhY3RvcnkgU3RyaW5nLmZyb21FbnZpcm9ubWVudChTdHJpbmcgbmFtZSwKICAgICAge1N0cmluZyBkZWZhdWx0VmFsdWV9KTsKCiAgLyoqCiAgICogR2V0cyB0aGUgY2hhcmFjdGVyIChhcyBhIHNpbmdsZS1jb2RlLXVuaXQgW1N0cmluZ10pIGF0IHRoZSBnaXZlbiBbaW5kZXhdLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmluZyByZXByZXNlbnRzIGV4YWN0bHkgb25lIFVURi0xNiBjb2RlIHVuaXQsIHdoaWNoIG1heSBiZQogICAqIGhhbGYgb2YgYSBzdXJyb2dhdGUgcGFpci4gQSBzaW5nbGUgbWVtYmVyIG9mIGEgc3Vycm9nYXRlIHBhaXIgaXMgYW4KICAgKiBpbnZhbGlkIFVURi0xNiBzdHJpbmc6CiAgICoKICAgKiAgICAgdmFyIGNsZWYgPSAnXHV7MUQxMUV9JzsKICAgKiAgICAgLy8gVGhlc2UgcmVwcmVzZW50IGludmFsaWQgVVRGLTE2IHN0cmluZ3MuCiAgICogICAgIGNsZWZbMF0uY29kZVVuaXRzOyAgICAgIC8vIFsweEQ4MzRdCiAgICogICAgIGNsZWZbMV0uY29kZVVuaXRzOyAgICAgIC8vIFsweEREMUVdCiAgICoKICAgKiBUaGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvCiAgICogYG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuY29kZVVuaXRBdChpbmRleCkpYC4KICAgKi8KICBTdHJpbmcgb3BlcmF0b3IgW10oaW50IGluZGV4KTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgMTYtYml0IFVURi0xNiBjb2RlIHVuaXQgYXQgdGhlIGdpdmVuIFtpbmRleF0uCiAgICovCiAgaW50IGNvZGVVbml0QXQoaW50IGluZGV4KTsKCiAgLyoqCiAgICogVGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLgogICAqCiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIFVURi0xNiBjb2RlIHVuaXRzIGluIHRoaXMgc3RyaW5nLiBUaGUgbnVtYmVyCiAgICogb2YgW3J1bmVzXSBtaWdodCBiZSBmZXdlciwgaWYgdGhlIHN0cmluZyBjb250YWlucyBjaGFyYWN0ZXJzIG91dHNpZGUKICAgKiB0aGUgQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lIChwbGFuZSAwKToKICAgKgogICAqICAgICAnRGFydCcubGVuZ3RoOyAgICAgICAgICAvLyA0CiAgICogICAgICdEYXJ0Jy5ydW5lcy5sZW5ndGg7ICAgIC8vIDQKICAgKgogICAqICAgICB2YXIgY2xlZiA9ICdcdXsxRDExRX0nOwogICAqICAgICBjbGVmLmxlbmd0aDsgICAgICAgICAgICAvLyAyCiAgICogICAgIGNsZWYucnVuZXMubGVuZ3RoOyAgICAgIC8vIDEKICAgKi8KICBpbnQgZ2V0IGxlbmd0aDsKCiAgLyoqCiAgICogUmV0dXJucyBhIGhhc2ggY29kZSBkZXJpdmVkIGZyb20gdGhlIGNvZGUgdW5pdHMgb2YgdGhlIHN0cmluZy4KICAgKgogICAqIFRoaXMgaXMgY29tcGF0aWJsZSB3aXRoIFtvcGVyYXRvciA9PV0uIFN0cmluZ3Mgd2l0aCB0aGUgc2FtZSBzZXF1ZW5jZQogICAqIG9mIGNvZGUgdW5pdHMgaGF2ZSB0aGUgc2FtZSBoYXNoIGNvZGUuCiAgICovCiAgaW50IGdldCBoYXNoQ29kZTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIG90aGVyIGlzIGEgYFN0cmluZ2Agd2l0aCB0aGUgc2FtZSBzZXF1ZW5jZSBvZiBjb2RlIHVuaXRzLgogICAqCiAgICogVGhpcyBtZXRob2QgY29tcGFyZXMgZWFjaCBpbmRpdmlkdWFsIGNvZGUgdW5pdCBvZiB0aGUgc3RyaW5ncy4KICAgKiBJdCBkb2VzIG5vdCBjaGVjayBmb3IgVW5pY29kZSBlcXVpdmFsZW5jZS4KICAgKiBGb3IgZXhhbXBsZSwgYm90aCB0aGUgZm9sbG93aW5nIHN0cmluZ3MgcmVwcmVzZW50IHRoZSBzdHJpbmcgJ0Ftw6lsaWUnLAogICAqIGJ1dCBkdWUgdG8gdGhlaXIgZGlmZmVyZW50IGVuY29kaW5nLCBhcmUgbm90IGVxdWFsOgogICAqCiAgICogICAgICdBbVx4ZTlsaWUnID09ICdBbWVcdXszMDF9bGllJzsgLy8gZmFsc2UKICAgKgogICAqIFRoZSBmaXJzdCBzdHJpbmcgZW5jb2RlcyAnw6knIGFzIGEgc2luZ2xlIHVuaWNvZGUgY29kZSB1bml0IChhbHNvCiAgICogYSBzaW5nbGUgcnVuZSksIHdoZXJlYXMgdGhlIHNlY29uZCBzdHJpbmcgZW5jb2RlcyBpdCBhcyAnZScgd2l0aCB0aGUKICAgKiBjb21iaW5pbmcgYWNjZW50IGNoYXJhY3RlciAn4peMzIEnLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKTsKCiAgLyoqCiAgICogQ29tcGFyZXMgdGhpcyBzdHJpbmcgdG8gW290aGVyXS4KICAgKgogICAqIFJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZSBpZiBgdGhpc2AgaXMgb3JkZXJlZCBiZWZvcmUgYG90aGVyYCwKICAgKiBhIHBvc2l0aXZlIHZhbHVlIGlmIGB0aGlzYCBpcyBvcmRlcmVkIGFmdGVyIGBvdGhlcmAsCiAgICogb3IgemVybyBpZiBgdGhpc2AgYW5kIGBvdGhlcmAgYXJlIGVxdWl2YWxlbnQuCiAgICoKICAgKiBUaGUgb3JkZXJpbmcgaXMgdGhlIHNhbWUgYXMgdGhlIG9yZGVyaW5nIG9mIHRoZSBjb2RlIHBvaW50cyBhdCB0aGUgZmlyc3QKICAgKiBwb3NpdGlvbiB3aGVyZSB0aGUgdHdvIHN0cmluZ3MgZGlmZmVyLgogICAqIElmIG9uZSBzdHJpbmcgaXMgYSBwcmVmaXggb2YgdGhlIG90aGVyLAogICAqIHRoZW4gdGhlIHNob3J0ZXIgc3RyaW5nIGlzIG9yZGVyZWQgYmVmb3JlIHRoZSBsb25nZXIgc3RyaW5nLgogICAqIElmIHRoZSBzdHJpbmdzIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBjb250ZW50LCB0aGV5IGFyZSBlcXVpdmFsZW50IHdpdGgKICAgKiByZWdhcmQgdG8gdGhlIG9yZGVyaW5nLgogICAqIE9yZGVyaW5nIGRvZXMgbm90IGNoZWNrIGZvciBVbmljb2RlIGVxdWl2YWxlbmNlLgogICAqIFRoZSBjb21wYXJpc29uIGlzIGNhc2Ugc2Vuc2l0aXZlLgogICAqLwogIGludCBjb21wYXJlVG8oU3RyaW5nIG90aGVyKTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgc3RyaW5nIGVuZHMgd2l0aCBbb3RoZXJdLiBGb3IgZXhhbXBsZToKICAgKgogICAqICAgICAnRGFydCcuZW5kc1dpdGgoJ3QnKTsgLy8gdHJ1ZQogICAqLwogIGJvb2wgZW5kc1dpdGgoU3RyaW5nIG90aGVyKTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgc3RyaW5nIHN0YXJ0cyB3aXRoIGEgbWF0Y2ggb2YgW3BhdHRlcm5dLgogICAqCiAgICogICAgIHZhciBzdHJpbmcgPSAnRGFydCc7CiAgICogICAgIHN0cmluZy5zdGFydHNXaXRoKCdEJyk7ICAgICAgICAgICAgICAgICAgICAgICAvLyB0cnVlCiAgICogICAgIHN0cmluZy5zdGFydHNXaXRoKG5ldyBSZWdFeHAocidbQS1aXVthLXpdJykpOyAvLyB0cnVlCiAgICoKICAgKiBJZiBbaW5kZXhdIGlzIHByb3ZpZGVkLCB0aGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHN1YnN0cmluZyBzdGFydGluZwogICAqIGF0IHRoYXQgaW5kZXggc3RhcnRzIHdpdGggYSBtYXRjaCBvZiBbcGF0dGVybl06CiAgICoKICAgKiAgICAgc3RyaW5nLnN0YXJ0c1dpdGgoJ2FydCcsIDEpOyAgICAgICAgICAgICAgICAgIC8vIHRydWUKICAgKiAgICAgc3RyaW5nLnN0YXJ0c1dpdGgobmV3IFJlZ0V4cChyJ1x3ezN9JykpOyAgICAgIC8vIHRydWUKICAgKgogICAqIFtpbmRleF0gbXVzdCBub3QgYmUgbmVnYXRpdmUgb3IgZ3JlYXRlciB0aGFuIFtsZW5ndGhdLgogICAqCiAgICogQSBbUmVnRXhwXSBjb250YWluaW5nICdeJyBkb2VzIG5vdCBtYXRjaCBpZiB0aGUgW2luZGV4XSBpcyBncmVhdGVyIHRoYW4KICAgKiB6ZXJvLiBUaGUgcGF0dGVybiB3b3JrcyBvbiB0aGUgc3RyaW5nIGFzIGEgd2hvbGUsIGFuZCBkb2VzIG5vdCBleHRyYWN0CiAgICogYSBzdWJzdHJpbmcgc3RhcnRpbmcgYXQgW2luZGV4XSBmaXJzdDoKICAgKgogICAqICAgICBzdHJpbmcuc3RhcnRzV2l0aChuZXcgUmVnRXhwKHInXmFydCcpLCAxKTsgICAgLy8gZmFsc2UKICAgKiAgICAgc3RyaW5nLnN0YXJ0c1dpdGgobmV3IFJlZ0V4cChyJ2FydCcpLCAxKTsgICAgIC8vIHRydWUKICAgKi8KICBib29sIHN0YXJ0c1dpdGgoUGF0dGVybiBwYXR0ZXJuLCBbaW50IGluZGV4ID0gMF0pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgbWF0Y2ggb2YgW3BhdHRlcm5dIGluIHRoaXMgc3RyaW5nLAogICAqIHN0YXJ0aW5nIGF0IFtzdGFydF0sIGluY2x1c2l2ZToKICAgKgogICAqICAgICB2YXIgc3RyaW5nID0gJ0RhcnRpc2Fucyc7CiAgICogICAgIHN0cmluZy5pbmRleE9mKCdhcnQnKTsgICAgICAgICAgICAgICAgICAgICAvLyAxCiAgICogICAgIHN0cmluZy5pbmRleE9mKG5ldyBSZWdFeHAocidbQS1aXVthLXpdJykpOyAvLyAwCiAgICoKICAgKiBSZXR1cm5zIC0xIGlmIG5vIG1hdGNoIGlzIGZvdW5kOgogICAqCiAgICogICAgIHN0cmluZy5pbmRleE9mKG5ldyBSZWdFeHAocidkYXJ0JykpOyAgICAgICAvLyAtMQogICAqCiAgICogW3N0YXJ0XSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQgbm90IGdyZWF0ZXIgdGhhbiBbbGVuZ3RoXS4KICAgKi8KICBpbnQgaW5kZXhPZihQYXR0ZXJuIHBhdHRlcm4sIFtpbnQgc3RhcnRdKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3QgbWF0Y2ggW3BhdHRlcm5dIGluIHRoaXMgc3RyaW5nLCBzZWFyY2hpbmcKICAgKiBiYWNrd2FyZCBzdGFydGluZyBhdCBbc3RhcnRdLCBpbmNsdXNpdmU6CiAgICoKICAgKiAgICAgdmFyIHN0cmluZyA9ICdEYXJ0aXNhbnMnOwogICAqICAgICBzdHJpbmcubGFzdEluZGV4T2YoJ2EnKTsgICAgICAgICAgICAgICAgICAgIC8vIDYKICAgKiAgICAgc3RyaW5nLmxhc3RJbmRleE9mKG5ldyBSZWdFeHAocidhKHJ8biknKSk7ICAvLyA2CiAgICoKICAgKiBSZXR1cm5zIC0xIGlmIFtwYXR0ZXJuXSBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhpcyBzdHJpbmcuCiAgICoKICAgKiAgICAgc3RyaW5nLmxhc3RJbmRleE9mKG5ldyBSZWdFeHAocidEQVJUJykpOyAgICAvLyAtMQogICAqCiAgICogVGhlIFtzdGFydF0gbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIG5vdCBncmVhdGVyIHRoYW4gW2xlbmd0aF0uCiAgICovCiAgaW50IGxhc3RJbmRleE9mKFBhdHRlcm4gcGF0dGVybiwgW2ludCBzdGFydF0pOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBzdHJpbmcgaXMgZW1wdHkuCiAgICovCiAgYm9vbCBnZXQgaXNFbXB0eTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgc3RyaW5nIGlzIG5vdCBlbXB0eS4KICAgKi8KICBib29sIGdldCBpc05vdEVtcHR5OwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IHN0cmluZyBieSBjb25jYXRlbmF0aW5nIHRoaXMgc3RyaW5nIHdpdGggW290aGVyXS4KICAgKgogICAqICAgICAnZGFydCcgKyAnbGFuZyc7IC8vICdkYXJ0bGFuZycKICAgKi8KICBTdHJpbmcgb3BlcmF0b3IgKyhTdHJpbmcgb3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzdWJzdHJpbmcgb2YgdGhpcyBzdHJpbmcgdGhhdCBleHRlbmRzIGZyb20gW3N0YXJ0SW5kZXhdLAogICAqIGluY2x1c2l2ZSwgdG8gW2VuZEluZGV4XSwgZXhjbHVzaXZlLgogICAqCiAgICogICAgIHZhciBzdHJpbmcgPSAnZGFydGxhbmcnOwogICAqICAgICBzdHJpbmcuc3Vic3RyaW5nKDEpOyAgICAvLyAnYXJ0bGFuZycKICAgKiAgICAgc3RyaW5nLnN1YnN0cmluZygxLCA0KTsgLy8gJ2FydCcKICAgKi8KICBTdHJpbmcgc3Vic3RyaW5nKGludCBzdGFydEluZGV4LCBbaW50IGVuZEluZGV4XSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHN0cmluZyB3aXRob3V0IGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLgogICAqCiAgICogSWYgdGhlIHN0cmluZyBjb250YWlucyBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGEgbmV3IHN0cmluZyB3aXRoIG5vCiAgICogbGVhZGluZyBhbmQgbm8gdHJhaWxpbmcgd2hpdGVzcGFjZSBpcyByZXR1cm5lZDoKICAgKiBgYGBkYXJ0CiAgICogJ1x0RGFydCBpcyBmdW5cbicudHJpbSgpOyAvLyAnRGFydCBpcyBmdW4nCiAgICogYGBgCiAgICogT3RoZXJ3aXNlLCB0aGUgb3JpZ2luYWwgc3RyaW5nIGl0c2VsZiBpcyByZXR1cm5lZDoKICAgKiBgYGBkYXJ0CiAgICogdmFyIHN0cjEgPSAnRGFydCc7CiAgICogdmFyIHN0cjIgPSBzdHIxLnRyaW0oKTsKICAgKiBpZGVudGljYWwoc3RyMSwgc3RyMik7ICAgIC8vIHRydWUKICAgKiBgYGAKICAgKiBXaGl0ZXNwYWNlIGlzIGRlZmluZWQgYnkgdGhlIFVuaWNvZGUgV2hpdGVfU3BhY2UgcHJvcGVydHkgKGFzIGRlZmluZWQgaW4KICAgKiB2ZXJzaW9uIDYuMiBvciBsYXRlcikgYW5kIHRoZSBCT00gY2hhcmFjdGVyLCAweEZFRkYuCiAgICoKICAgKiBIZXJlIGlzIHRoZSBsaXN0IG9mIHRyaW1tZWQgY2hhcmFjdGVycyBhY2NvcmRpbmcgdG8gVW5pY29kZSB2ZXJzaW9uIDYuMzoKICAgKiBgYGAKICAgKiAgICAgMDAwOS4uMDAwRCAgICA7IFdoaXRlX1NwYWNlICMgQ2MgICA8Y29udHJvbC0wMDA5Pi4uPGNvbnRyb2wtMDAwRD4KICAgKiAgICAgMDAyMCAgICAgICAgICA7IFdoaXRlX1NwYWNlICMgWnMgICBTUEFDRQogICAqICAgICAwMDg1ICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBDYyAgIDxjb250cm9sLTAwODU+CiAgICogICAgIDAwQTAgICAgICAgICAgOyBXaGl0ZV9TcGFjZSAjIFpzICAgTk8tQlJFQUsgU1BBQ0UKICAgKiAgICAgMTY4MCAgICAgICAgICA7IFdoaXRlX1NwYWNlICMgWnMgICBPR0hBTSBTUEFDRSBNQVJLCiAgICogICAgIDIwMDAuLjIwMEEgICAgOyBXaGl0ZV9TcGFjZSAjIFpzICAgRU4gUVVBRC4uSEFJUiBTUEFDRQogICAqICAgICAyMDI4ICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBabCAgIExJTkUgU0VQQVJBVE9SCiAgICogICAgIDIwMjkgICAgICAgICAgOyBXaGl0ZV9TcGFjZSAjIFpwICAgUEFSQUdSQVBIIFNFUEFSQVRPUgogICAqICAgICAyMDJGICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBacyAgIE5BUlJPVyBOTy1CUkVBSyBTUEFDRQogICAqICAgICAyMDVGICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBacyAgIE1FRElVTSBNQVRIRU1BVElDQUwgU1BBQ0UKICAgKiAgICAgMzAwMCAgICAgICAgICA7IFdoaXRlX1NwYWNlICMgWnMgICBJREVPR1JBUEhJQyBTUEFDRQogICAqCiAgICogICAgIEZFRkYgICAgICAgICAgOyBCT00gICAgICAgICAgICAgICAgWkVSTyBXSURUSCBOT19CUkVBSyBTUEFDRQogICAqIGBgYAogICAqIFNvbWUgbGF0ZXIgdmVyc2lvbnMgb2YgVW5pY29kZSBkbyBub3QgaW5jbHVkZSBVKzAwODUgYXMgYSB3aGl0ZXNwYWNlCiAgICogY2hhcmFjdGVyLiBXaGV0aGVyIGl0IGlzIHRyaW1tZWQgZGVwZW5kcyBvbiB0aGUgVW5pY29kZSB2ZXJzaW9uCiAgICogdXNlZCBieSB0aGUgc3lzdGVtLgogICAqLwogIFN0cmluZyB0cmltKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHN0cmluZyB3aXRob3V0IGFueSBsZWFkaW5nIHdoaXRlc3BhY2UuCiAgICoKICAgKiBBcyBbdHJpbV0sIGJ1dCBvbmx5IHJlbW92ZXMgbGVhZGluZyB3aGl0ZXNwYWNlLgogICAqLwogIFN0cmluZyB0cmltTGVmdCgpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzdHJpbmcgd2l0aG91dCBhbnkgdHJhaWxpbmcgd2hpdGVzcGFjZS4KICAgKgogICAqIEFzIFt0cmltXSwgYnV0IG9ubHkgcmVtb3ZlcyB0cmFpbGluZyB3aGl0ZXNwYWNlLgogICAqLwogIFN0cmluZyB0cmltUmlnaHQoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBzdHJpbmcgYnkgY29uY2F0ZW5hdGluZyB0aGlzIHN0cmluZyB3aXRoIGl0c2VsZiBhIG51bWJlcgogICAqIG9mIHRpbWVzLgogICAqCiAgICogVGhlIHJlc3VsdCBvZiBgc3RyICogbmAgaXMgZXF1aXZhbGVudCB0bwogICAqIGBzdHIgKyBzdHIgKyAuLi5gKG4gdGltZXMpYC4uLiArIHN0cmAuCiAgICoKICAgKiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBpZiBbdGltZXNdIGlzIHplcm8gb3IgbmVnYXRpdmUuCiAgICovCiAgU3RyaW5nIG9wZXJhdG9yICooaW50IHRpbWVzKTsKCiAgLyoqCiAgICogUGFkcyB0aGlzIHN0cmluZyBvbiB0aGUgbGVmdCBpZiBpdCBpcyBzaG9ydGVyIHRoYW4gW3dpZHRoXS4KICAgKgogICAqIFJldHVybiBhIG5ldyBzdHJpbmcgdGhhdCBwcmVwZW5kcyBbcGFkZGluZ10gb250byB0aGlzIHN0cmluZwogICAqIG9uZSB0aW1lIGZvciBlYWNoIHBvc2l0aW9uIHRoZSBsZW5ndGggaXMgbGVzcyB0aGFuIFt3aWR0aF0uCiAgICoKICAgKiBJZiBbd2lkdGhdIGlzIGFscmVhZHkgc21hbGxlciB0aGFuIG9yIGVxdWFsIHRvIGB0aGlzLmxlbmd0aGAsCiAgICogbm8gcGFkZGluZyBpcyBhZGRlZC4gQSBuZWdhdGl2ZSBgd2lkdGhgIGlzIHRyZWF0ZWQgYXMgemVyby4KICAgKgogICAqIElmIFtwYWRkaW5nXSBoYXMgbGVuZ3RoIGRpZmZlcmVudCBmcm9tIDEsIHRoZSByZXN1bHQgd2lsbCBub3QKICAgKiBoYXZlIGxlbmd0aCBgd2lkdGhgLiBUaGlzIG1heSBiZSB1c2VmdWwgZm9yIGNhc2VzIHdoZXJlIHRoZQogICAqIHBhZGRpbmcgaXMgYSBsb25nZXIgc3RyaW5nIHJlcHJlc2VudGluZyBhIHNpbmdsZSBjaGFyYWN0ZXIsIGxpa2UKICAgKiBgIiZuYnNwOyJgIG9yIGAiXHV7MTAwMDJ9YCIuCiAgICogSW4gdGhhdCBjYXNlLCB0aGUgdXNlciBzaG91bGQgbWFrZSBzdXJlIHRoYXQgYHRoaXMubGVuZ3RoYCBpcwogICAqIHRoZSBjb3JyZWN0IG1lYXN1cmUgb2YgdGhlIHN0cmluZ3MgbGVuZ3RoLgogICAqLwogIFN0cmluZyBwYWRMZWZ0KGludCB3aWR0aCwgW1N0cmluZyBwYWRkaW5nID0gJyAnXSk7CgogIC8qKgogICAqIFBhZHMgdGhpcyBzdHJpbmcgb24gdGhlIHJpZ2h0IGlmIGl0IGlzIHNob3J0ZXIgdGhhbiBbd2lkdGhdLgogICAqCiAgICogUmV0dXJuIGEgbmV3IHN0cmluZyB0aGF0IGFwcGVuZHMgW3BhZGRpbmddIGFmdGVyIHRoaXMgc3RyaW5nCiAgICogb25lIHRpbWUgZm9yIGVhY2ggcG9zaXRpb24gdGhlIGxlbmd0aCBpcyBsZXNzIHRoYW4gW3dpZHRoXS4KICAgKgogICAqIElmIFt3aWR0aF0gaXMgYWxyZWFkeSBzbWFsbGVyIHRoYW4gb3IgZXF1YWwgdG8gYHRoaXMubGVuZ3RoYCwKICAgKiBubyBwYWRkaW5nIGlzIGFkZGVkLiBBIG5lZ2F0aXZlIGB3aWR0aGAgaXMgdHJlYXRlZCBhcyB6ZXJvLgogICAqCiAgICogSWYgW3BhZGRpbmddIGhhcyBsZW5ndGggZGlmZmVyZW50IGZyb20gMSwgdGhlIHJlc3VsdCB3aWxsIG5vdAogICAqIGhhdmUgbGVuZ3RoIGB3aWR0aGAuIFRoaXMgbWF5IGJlIHVzZWZ1bCBmb3IgY2FzZXMgd2hlcmUgdGhlCiAgICogcGFkZGluZyBpcyBhIGxvbmdlciBzdHJpbmcgcmVwcmVzZW50aW5nIGEgc2luZ2xlIGNoYXJhY3RlciwgbGlrZQogICAqIGAiJm5ic3A7ImAgb3IgYCJcdXsxMDAwMn1gIi4KICAgKiBJbiB0aGF0IGNhc2UsIHRoZSB1c2VyIHNob3VsZCBtYWtlIHN1cmUgdGhhdCBgdGhpcy5sZW5ndGhgIGlzCiAgICogdGhlIGNvcnJlY3QgbWVhc3VyZSBvZiB0aGUgc3RyaW5ncyBsZW5ndGguCiAgICovCiAgU3RyaW5nIHBhZFJpZ2h0KGludCB3aWR0aCwgW1N0cmluZyBwYWRkaW5nID0gJyAnXSk7CgogIC8qKgogICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHN0cmluZyBjb250YWlucyBhIG1hdGNoIG9mIFtvdGhlcl06CiAgICoKICAgKiAgICAgdmFyIHN0cmluZyA9ICdEYXJ0IHN0cmluZ3MnOwogICAqICAgICBzdHJpbmcuY29udGFpbnMoJ0QnKTsgICAgICAgICAgICAgICAgICAgICAvLyB0cnVlCiAgICogICAgIHN0cmluZy5jb250YWlucyhuZXcgUmVnRXhwKHInW0EtWl0nKSk7ICAgIC8vIHRydWUKICAgKgogICAqIElmIFtzdGFydEluZGV4XSBpcyBwcm92aWRlZCwgdGhpcyBtZXRob2QgbWF0Y2hlcyBvbmx5IGF0IG9yIGFmdGVyIHRoYXQKICAgKiBpbmRleDoKICAgKgogICAqICAgICBzdHJpbmcuY29udGFpbnMoJ1gnLCAxKTsgICAgICAgICAgICAgICAgICAvLyBmYWxzZQogICAqICAgICBzdHJpbmcuY29udGFpbnMobmV3IFJlZ0V4cChyJ1tBLVpdJyksIDEpOyAvLyBmYWxzZQogICAqCiAgICogW3N0YXJ0SW5kZXhdIG11c3Qgbm90IGJlIG5lZ2F0aXZlIG9yIGdyZWF0ZXIgdGhhbiBbbGVuZ3RoXS4KICAgKi8KICBib29sIGNvbnRhaW5zKFBhdHRlcm4gb3RoZXIsIFtpbnQgc3RhcnRJbmRleCA9IDBdKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBzdHJpbmcgaW4gd2hpY2ggdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgW2Zyb21dIGluIHRoaXMgc3RyaW5nCiAgICogaXMgcmVwbGFjZWQgd2l0aCBbdG9dLCBzdGFydGluZyBmcm9tIFtzdGFydEluZGV4XToKICAgKgogICAqICAgICAnMC4wMDAxJy5yZXBsYWNlRmlyc3QobmV3IFJlZ0V4cChyJzAnKSwgJycpOyAvLyAnLjAwMDEnCiAgICogICAgICcwLjAwMDEnLnJlcGxhY2VGaXJzdChuZXcgUmVnRXhwKHInMCcpLCAnNycsIDEpOyAvLyAnMC43MDAxJwogICAqLwogIFN0cmluZyByZXBsYWNlRmlyc3QoUGF0dGVybiBmcm9tLCBTdHJpbmcgdG8sIFtpbnQgc3RhcnRJbmRleCA9IDBdKTsKCiAgLyoqCiAgICogUmVwbGFjZSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBbZnJvbV0gaW4gdGhpcyBzdHJpbmcuCiAgICoKICAgKiBSZXR1cm5zIGEgbmV3IHN0cmluZywgd2hpY2ggaXMgdGhpcyBzdHJpbmcKICAgKiBleGNlcHQgdGhhdCB0aGUgZmlyc3QgbWF0Y2ggb2YgW2Zyb21dLCBzdGFydGluZyBmcm9tIFtzdGFydEluZGV4XSwKICAgKiBpcyByZXBsYWNlZCBieSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgW3JlcGxhY2VdIHdpdGggdGhlIG1hdGNoIG9iamVjdC4KICAgKgogICAqIFRoZSBvcHRpb25hbCBbc3RhcnRJbmRleF0gaXMgYnkgZGVmYXVsdCBzZXQgdG8gMC4gSWYgcHJvdmlkZWQsIGl0IG11c3QgYmUKICAgKiBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBgWzAgLi4gbGVuXWAsIHdoZXJlIGBsZW5gIGlzIHRoaXMgc3RyaW5nJ3MgbGVuZ3RoLgogICAqLwogIFN0cmluZyByZXBsYWNlRmlyc3RNYXBwZWQoUGF0dGVybiBmcm9tLCBTdHJpbmcgcmVwbGFjZShNYXRjaCBtYXRjaCksCiAgICAgIFtpbnQgc3RhcnRJbmRleCA9IDBdKTsKCiAgLyoqCiAgICogUmVwbGFjZXMgYWxsIHN1YnN0cmluZ3MgdGhhdCBtYXRjaCBbZnJvbV0gd2l0aCBbcmVwbGFjZV0uCiAgICoKICAgKiBSZXR1cm5zIGEgbmV3IHN0cmluZyBpbiB3aGljaCB0aGUgbm9uLW92ZXJsYXBwaW5nIHN1YnN0cmluZ3MgbWF0Y2hpbmcKICAgKiBbZnJvbV0gKHRoZSBvbmVzIGl0ZXJhdGVkIGJ5IGBmcm9tLmFsbE1hdGNoZXModGhpc1N0cmluZylgKSBhcmUgcmVwbGFjZWQKICAgKiBieSB0aGUgbGl0ZXJhbCBzdHJpbmcgW3JlcGxhY2VdLgogICAqCiAgICogICAgICdyZXN1bWUnLnJlcGxhY2VBbGwobmV3IFJlZ0V4cChyJ2UnKSwgJ8OpJyk7IC8vICdyw6lzdW3DqScKICAgKgogICAqIE5vdGljZSB0aGF0IHRoZSBbcmVwbGFjZV0gc3RyaW5nIGlzIG5vdCBpbnRlcnByZXRlZC4gSWYgdGhlIHJlcGxhY2VtZW50CiAgICogZGVwZW5kcyBvbiB0aGUgbWF0Y2ggKGZvciBleGFtcGxlIG9uIGEgW1JlZ0V4cF0ncyBjYXB0dXJlIGdyb3VwcyksIHVzZQogICAqIHRoZSBbcmVwbGFjZUFsbE1hcHBlZF0gbWV0aG9kIGluc3RlYWQuCiAgICovCiAgU3RyaW5nIHJlcGxhY2VBbGwoUGF0dGVybiBmcm9tLCBTdHJpbmcgcmVwbGFjZSk7CgogIC8qKgogICAqIFJlcGxhY2UgYWxsIHN1YnN0cmluZ3MgdGhhdCBtYXRjaCBbZnJvbV0gYnkgYSBzdHJpbmcgY29tcHV0ZWQgZnJvbSB0aGUKICAgKiBtYXRjaC4KICAgKgogICAqIFJldHVybnMgYSBuZXcgc3RyaW5nIGluIHdoaWNoIHRoZSBub24tb3ZlcmxhcHBpbmcgc3Vic3RyaW5ncyB0aGF0IG1hdGNoCiAgICogW2Zyb21dICh0aGUgb25lcyBpdGVyYXRlZCBieSBgZnJvbS5hbGxNYXRjaGVzKHRoaXNTdHJpbmcpYCkgYXJlIHJlcGxhY2VkCiAgICogYnkgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIFtyZXBsYWNlXSBvbiB0aGUgY29ycmVzcG9uZGluZyBbTWF0Y2hdIG9iamVjdC4KICAgKgogICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVwbGFjZSBtYXRjaGVzIHdpdGggbmV3IGNvbnRlbnQgdGhhdCBkZXBlbmRzIG9uIHRoZQogICAqIG1hdGNoLCB1bmxpa2UgW3JlcGxhY2VBbGxdIHdoZXJlIHRoZSByZXBsYWNlbWVudCBzdHJpbmcgaXMgYWx3YXlzIHRoZSBzYW1lLgogICAqCiAgICogVGhlIFtyZXBsYWNlXSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgW01hdGNoXSBnZW5lcmF0ZWQKICAgKiBieSB0aGUgcGF0dGVybiwgYW5kIGl0cyByZXN1bHQgaXMgdXNlZCBhcyByZXBsYWNlbWVudC4KICAgKgogICAqIFRoZSBmdW5jdGlvbiBkZWZpbmVkIGJlbG93IGNvbnZlcnRzIGVhY2ggd29yZCBpbiBhIHN0cmluZyB0byBzaW1wbGlmaWVkCiAgICogJ3BpZyBsYXRpbicgdXNpbmcgW3JlcGxhY2VBbGxNYXBwZWRdOgogICAqCiAgICogICAgIHBpZ0xhdGluKFN0cmluZyB3b3JkcykgPT4gd29yZHMucmVwbGFjZUFsbE1hcHBlZCgKICAgKiAgICAgICAgIG5ldyBSZWdFeHAocidcYihcdyo/KShbYWVpb3VdXHcqKScsIGNhc2VTZW5zaXRpdmU6IGZhbHNlKSwKICAgKiAgICAgICAgIChNYXRjaCBtKSA9PiAiJHttWzJdfSR7bVsxXX0ke21bMV0uaXNFbXB0eSA/ICd3YXknIDogJ2F5J30iKTsKICAgKgogICAqICAgICBwaWdMYXRpbignSSBoYXZlIGEgc2VjcmV0IG5vdyEnKTsgLy8gJ0l3YXkgYXZlaGF5IGF3YXkgZWNyZXRzYXkgb3duYXkhJwogICAqLwogIFN0cmluZyByZXBsYWNlQWxsTWFwcGVkKFBhdHRlcm4gZnJvbSwgU3RyaW5nIHJlcGxhY2UoTWF0Y2ggbWF0Y2gpKTsKCiAgLyoqCiAgICogUmVwbGFjZXMgdGhlIHN1YnN0cmluZyBmcm9tIFtzdGFydF0gdG8gW2VuZF0gd2l0aCBbcmVwbGFjZW1lbnRdLgogICAqCiAgICogUmV0dXJucyBhIG5ldyBzdHJpbmcgZXF1aXZhbGVudCB0bzoKICAgKgogICAqICAgICB0aGlzLnN1YnN0cmluZygwLCBzdGFydCkgKyByZXBsYWNlbWVudCArIHRoaXMuc3Vic3RyaW5nKGVuZCkKICAgKgogICAqIFRoZSBbc3RhcnRdIGFuZCBbZW5kXSBpbmRpY2VzIG11c3Qgc3BlY2lmeSBhIHZhbGlkIHJhbmdlIG9mIHRoaXMgc3RyaW5nLgogICAqIFRoYXQgaXMgYDAgPD0gc3RhcnQgPD0gZW5kIDw9IHRoaXMubGVuZ3RoYC4KICAgKiBJZiBbZW5kXSBpcyBgbnVsbGAsIGl0IGRlZmF1bHRzIHRvIFtsZW5ndGhdLgogICAqLwogIFN0cmluZyByZXBsYWNlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBTdHJpbmcgcmVwbGFjZW1lbnQpOwoKICAvKioKICAgKiBTcGxpdHMgdGhlIHN0cmluZyBhdCBtYXRjaGVzIG9mIFtwYXR0ZXJuXSBhbmQgcmV0dXJucyBhIGxpc3Qgb2Ygc3Vic3RyaW5ncy4KICAgKgogICAqIEZpbmRzIGFsbCB0aGUgbWF0Y2hlcyBvZiBgcGF0dGVybmAgaW4gdGhpcyBzdHJpbmcsCiAgICogYW5kIHJldHVybnMgdGhlIGxpc3Qgb2YgdGhlIHN1YnN0cmluZ3MgYmV0d2VlbiB0aGUgbWF0Y2hlcy4KICAgKgogICAqICAgICB2YXIgc3RyaW5nID0gIkhlbGxvIHdvcmxkISI7CiAgICogICAgIHN0cmluZy5zcGxpdCgiICIpOyAgICAgICAgICAgICAgICAgICAgICAvLyBbJ0hlbGxvJywgJ3dvcmxkISddOwogICAqCiAgICogRW1wdHkgbWF0Y2hlcyBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIHN0cmluZ3MgYXJlIGlnbm9yZWQsCiAgICogYW5kIHNvIGFyZSBlbXB0eSBtYXRjaGVzIHJpZ2h0IGFmdGVyIGFub3RoZXIgbWF0Y2guCiAgICoKICAgKiAgICAgdmFyIHN0cmluZyA9ICJhYmJhIjsKICAgKiAgICAgc3RyaW5nLnNwbGl0KG5ldyBSZWdFeHAociJiKiIpKTsgICAgICAgIC8vIFsnYScsICdhJ10KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBbJycsICdhJywgJ2EnLCAnJ10KICAgKgogICAqIElmIHRoaXMgc3RyaW5nIGlzIGVtcHR5LCB0aGUgcmVzdWx0IGlzIGFuIGVtcHR5IGxpc3QgaWYgYHBhdHRlcm5gIG1hdGNoZXMKICAgKiB0aGUgZW1wdHkgc3RyaW5nLCBhbmQgaXQgaXMgYFsiIl1gIGlmIHRoZSBwYXR0ZXJuIGRvZXNuJ3QgbWF0Y2guCiAgICoKICAgKiAgICAgdmFyIHN0cmluZyA9ICcnOwogICAqICAgICBzdHJpbmcuc3BsaXQoJycpOyAgICAgICAgICAgICAgICAgICAgICAgLy8gW10KICAgKiAgICAgc3RyaW5nLnNwbGl0KCJhIik7ICAgICAgICAgICAgICAgICAgICAgIC8vIFsnJ10KICAgKgogICAqIFNwbGl0dGluZyB3aXRoIGFuIGVtcHR5IHBhdHRlcm4gc3BsaXRzIHRoZSBzdHJpbmcgaW50byBzaW5nbGUtY29kZSB1bml0CiAgICogc3RyaW5ncy4KICAgKgogICAqICAgICB2YXIgc3RyaW5nID0gJ1B1Yic7CiAgICogICAgIHN0cmluZy5zcGxpdCgnJyk7ICAgICAgICAgICAgICAgICAgICAgICAvLyBbJ1AnLCAndScsICdiJ10KICAgKgogICAqICAgICBzdHJpbmcuY29kZVVuaXRzLm1hcCgodW5pdCkgewogICAqICAgICAgIHJldHVybiBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZSh1bml0KTsKICAgKiAgICAgfSkudG9MaXN0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFsnUCcsICd1JywgJ2InXQogICAqCiAgICogU3BsaXR0aW5nIGhhcHBlbnMgYXQgVVRGLTE2IGNvZGUgdW5pdCBib3VuZGFyaWVzLAogICAqIGFuZCBub3QgYXQgcnVuZSBib3VuZGFyaWVzOgogICAqCiAgICogICAgIC8vIFN0cmluZyBtYWRlIHVwIG9mIHR3byBjb2RlIHVuaXRzLCBidXQgb25lIHJ1bmUuCiAgICogICAgIHN0cmluZyA9ICdcdXsxRDExRX0nOwogICAqICAgICBzdHJpbmcuc3BsaXQoJycpLmxlbmd0aDsgICAgICAgICAgICAgICAgIC8vIDIgc3Vycm9nYXRlIHZhbHVlcwogICAqCiAgICogVG8gZ2V0IGEgbGlzdCBvZiBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIGluZGl2aWR1YWwgcnVuZXMgb2YgYSBzdHJpbmcsCiAgICogeW91IHNob3VsZCBub3QgdXNlIHNwbGl0LiBZb3UgY2FuIGluc3RlYWQgbWFwIGVhY2ggcnVuZSB0byBhIHN0cmluZwogICAqIGFzIGZvbGxvd3M6CiAgICoKICAgKiAgICAgc3RyaW5nLnJ1bmVzLm1hcCgocnVuZSkgPT4gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGUocnVuZSkpLnRvTGlzdCgpOwogICAqLwogIExpc3Q8U3RyaW5nPiBzcGxpdChQYXR0ZXJuIHBhdHRlcm4pOwoKICAvKioKICAgKiBTcGxpdHMgdGhlIHN0cmluZywgY29udmVydHMgaXRzIHBhcnRzLCBhbmQgY29tYmluZXMgdGhlbSBpbnRvIGEgbmV3CiAgICogc3RyaW5nLgogICAqCiAgICogW3BhdHRlcm5dIGlzIHVzZWQgdG8gc3BsaXQgdGhlIHN0cmluZyBpbnRvIHBhcnRzIGFuZCBzZXBhcmF0aW5nIG1hdGNoZXMuCiAgICoKICAgKiBFYWNoIG1hdGNoIGlzIGNvbnZlcnRlZCB0byBhIHN0cmluZyBieSBjYWxsaW5nIFtvbk1hdGNoXS4gSWYgW29uTWF0Y2hdCiAgICogaXMgb21pdHRlZCwgdGhlIG1hdGNoZWQgc3RyaW5nIGlzIHVzZWQuCiAgICoKICAgKiBFYWNoIG5vbi1tYXRjaGVkIHBhcnQgaXMgY29udmVydGVkIGJ5IGEgY2FsbCB0byBbb25Ob25NYXRjaF0uIElmCiAgICogW29uTm9uTWF0Y2hdIGlzIG9taXR0ZWQsIHRoZSBub24tbWF0Y2hpbmcgcGFydCBpcyB1c2VkLgogICAqCiAgICogVGhlbiBhbGwgdGhlIGNvbnZlcnRlZCBwYXJ0cyBhcmUgY29tYmluZWQgaW50byB0aGUgcmVzdWx0aW5nIHN0cmluZy4KICAgKgogICAqICAgICAnRWF0cyBzaG9vdHMgbGVhdmVzJy5zcGxpdE1hcEpvaW4oKG5ldyBSZWdFeHAocidzaG9vdHMnKSksCiAgICogICAgICAgICBvbk1hdGNoOiAgICAobSkgPT4gJyR7bS5ncm91cCgwKX0nLAogICAqICAgICAgICAgb25Ob25NYXRjaDogKG4pID0+ICcqJyk7IC8vICpzaG9vdHMqCiAgICovCiAgU3RyaW5nIHNwbGl0TWFwSm9pbihQYXR0ZXJuIHBhdHRlcm4sCiAgICAgIHtTdHJpbmcgb25NYXRjaChNYXRjaCBtYXRjaCksIFN0cmluZyBvbk5vbk1hdGNoKFN0cmluZyBub25NYXRjaCl9KTsKCiAgLyoqCiAgICogUmV0dXJucyBhbiB1bm1vZGlmaWFibGUgbGlzdCBvZiB0aGUgVVRGLTE2IGNvZGUgdW5pdHMgb2YgdGhpcyBzdHJpbmcuCiAgICovCiAgTGlzdDxpbnQ+IGdldCBjb2RlVW5pdHM7CgogIC8qKgogICAqIFJldHVybnMgYW4gW0l0ZXJhYmxlXSBvZiBVbmljb2RlIGNvZGUtcG9pbnRzIG9mIHRoaXMgc3RyaW5nLgogICAqCiAgICogSWYgdGhlIHN0cmluZyBjb250YWlucyBzdXJyb2dhdGUgcGFpcnMsIHRoZXkgYXJlIGNvbWJpbmVkIGFuZCByZXR1cm5lZAogICAqIGFzIG9uZSBpbnRlZ2VyIGJ5IHRoaXMgaXRlcmF0b3IuIFVubWF0Y2hlZCBzdXJyb2dhdGUgaGFsdmVzIGFyZSB0cmVhdGVkCiAgICogbGlrZSB2YWxpZCAxNi1iaXQgY29kZS11bml0cy4KICAgKi8KICBSdW5lcyBnZXQgcnVuZXM7CgogIC8qKgogICAqIENvbnZlcnRzIGFsbCBjaGFyYWN0ZXJzIGluIHRoaXMgc3RyaW5nIHRvIGxvd2VyIGNhc2UuCiAgICogSWYgdGhlIHN0cmluZyBpcyBhbHJlYWR5IGluIGFsbCBsb3dlciBjYXNlLCB0aGlzIG1ldGhvZCByZXR1cm5zIFs6dGhpczpdLgogICAqCiAgICogICAgICdBTFBIQUJFVCcudG9Mb3dlckNhc2UoKTsgLy8gJ2FscGhhYmV0JwogICAqICAgICAnYWJjJy50b0xvd2VyQ2FzZSgpOyAgICAgIC8vICdhYmMnCiAgICoKICAgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGxhbmd1YWdlIGluZGVwZW5kZW50IFVuaWNvZGUgbWFwcGluZyBhbmQgdGh1cyBvbmx5CiAgICogd29ya3MgaW4gc29tZSBsYW5ndWFnZXMuCiAgICovCiAgLy8gVE9ETyhmbG9pdHNjaCk6IGRvY3VtZW50IGJldHRlci4gKFNlZSBFY21hU2NyaXB0IGZvciBkZXNjcmlwdGlvbikuCiAgU3RyaW5nIHRvTG93ZXJDYXNlKCk7CgogIC8qKgogICAqIENvbnZlcnRzIGFsbCBjaGFyYWN0ZXJzIGluIHRoaXMgc3RyaW5nIHRvIHVwcGVyIGNhc2UuCiAgICogSWYgdGhlIHN0cmluZyBpcyBhbHJlYWR5IGluIGFsbCB1cHBlciBjYXNlLCB0aGlzIG1ldGhvZCByZXR1cm5zIFs6dGhpczpdLgogICAqCiAgICogICAgICdhbHBoYWJldCcudG9VcHBlckNhc2UoKTsgLy8gJ0FMUEhBQkVUJwogICAqICAgICAnQUJDJy50b1VwcGVyQ2FzZSgpOyAgICAgIC8vICdBQkMnCiAgICoKICAgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGxhbmd1YWdlIGluZGVwZW5kZW50IFVuaWNvZGUgbWFwcGluZyBhbmQgdGh1cyBvbmx5CiAgICogd29ya3MgaW4gc29tZSBsYW5ndWFnZXMuCiAgICovCiAgLy8gVE9ETyhmbG9pdHNjaCk6IGRvY3VtZW50IGJldHRlci4gKFNlZSBFY21hU2NyaXB0IGZvciBkZXNjcmlwdGlvbikuCiAgU3RyaW5nIHRvVXBwZXJDYXNlKCk7Cn0KCi8qKgogKiBUaGUgcnVuZXMgKGludGVnZXIgVW5pY29kZSBjb2RlIHBvaW50cykgb2YgYSBbU3RyaW5nXS4KICovCmNsYXNzIFJ1bmVzIGV4dGVuZHMgSXRlcmFibGU8aW50PiB7CiAgZmluYWwgU3RyaW5nIHN0cmluZzsKICBSdW5lcyh0aGlzLnN0cmluZyk7CgogIFJ1bmVJdGVyYXRvciBnZXQgaXRlcmF0b3IgPT4gUnVuZUl0ZXJhdG9yKHN0cmluZyk7CgogIGludCBnZXQgbGFzdCB7CiAgICBpZiAoc3RyaW5nLmxlbmd0aCA9PSAwKSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoJ05vIGVsZW1lbnRzLicpOwogICAgfQogICAgaW50IGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7CiAgICBpbnQgY29kZSA9IHN0cmluZy5jb2RlVW5pdEF0KGxlbmd0aCAtIDEpOwogICAgaWYgKF9pc1RyYWlsU3Vycm9nYXRlKGNvZGUpICYmIHN0cmluZy5sZW5ndGggPiAxKSB7CiAgICAgIGludCBwcmV2aW91c0NvZGUgPSBzdHJpbmcuY29kZVVuaXRBdChsZW5ndGggLSAyKTsKICAgICAgaWYgKF9pc0xlYWRTdXJyb2dhdGUocHJldmlvdXNDb2RlKSkgewogICAgICAgIHJldHVybiBfY29tYmluZVN1cnJvZ2F0ZVBhaXIocHJldmlvdXNDb2RlLCBjb2RlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNvZGU7CiAgfQp9CgovLyBJcyB0aGVuIGNvZGUgKGEgMTYtYml0IHVuc2lnbmVkIGludGVnZXIpIGEgVVRGLTE2IGxlYWQgc3Vycm9nYXRlLgpib29sIF9pc0xlYWRTdXJyb2dhdGUoaW50IGNvZGUpID0+IChjb2RlICYgMHhGQzAwKSA9PSAweEQ4MDA7CgovLyBJcyB0aGVuIGNvZGUgKGEgMTYtYml0IHVuc2lnbmVkIGludGVnZXIpIGEgVVRGLTE2IHRyYWlsIHN1cnJvZ2F0ZS4KYm9vbCBfaXNUcmFpbFN1cnJvZ2F0ZShpbnQgY29kZSkgPT4gKGNvZGUgJiAweEZDMDApID09IDB4REMwMDsKCi8vIENvbWJpbmUgYSBsZWFkIGFuZCBhIHRyYWlsIHN1cnJvZ2F0ZSB2YWx1ZSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQuCmludCBfY29tYmluZVN1cnJvZ2F0ZVBhaXIoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgcmV0dXJuIDB4MTAwMDAgKyAoKHN0YXJ0ICYgMHgzRkYpIDw8IDEwKSArIChlbmQgJiAweDNGRik7Cn0KCi8qKiBbSXRlcmF0b3JdIGZvciByZWFkaW5nIHJ1bmVzIChpbnRlZ2VyIFVuaWNvZGUgY29kZSBwb2ludHMpIG91dCBvZiBhIERhcnQKICAqIHN0cmluZy4KICAqLwpjbGFzcyBSdW5lSXRlcmF0b3IgaW1wbGVtZW50cyBCaWRpcmVjdGlvbmFsSXRlcmF0b3I8aW50PiB7CiAgLyoqIFN0cmluZyBiZWluZyBpdGVyYXRlZC4gKi8KICBmaW5hbCBTdHJpbmcgc3RyaW5nOwogIC8qKiBQb3NpdGlvbiBiZWZvcmUgdGhlIGN1cnJlbnQgY29kZSBwb2ludC4gKi8KICBpbnQgX3Bvc2l0aW9uOwogIC8qKiBQb3NpdGlvbiBhZnRlciB0aGUgY3VycmVudCBjb2RlIHBvaW50LiAqLwogIGludCBfbmV4dFBvc2l0aW9uOwogIC8qKgogICAqIEN1cnJlbnQgY29kZSBwb2ludC4KICAgKgogICAqIElmIHRoZSBpdGVyYXRvciBoYXMgaGl0IGVpdGhlciBlbmQsIHRoZSBbX2N1cnJlbnRDb2RlUG9pbnRdIGlzIG51bGwKICAgKiBhbmQgWzogX3Bvc2l0aW9uID09IF9uZXh0UG9zaXRpb24gOl0uCiAgICovCiAgaW50IF9jdXJyZW50Q29kZVBvaW50OwoKICAvKiogQ3JlYXRlIGFuIGl0ZXJhdG9yIHBvc2l0aW9uZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLiAqLwogIFJ1bmVJdGVyYXRvcihTdHJpbmcgc3RyaW5nKQogICAgICA6IHRoaXMuc3RyaW5nID0gc3RyaW5nLAogICAgICAgIF9wb3NpdGlvbiA9IDAsCiAgICAgICAgX25leHRQb3NpdGlvbiA9IDA7CgogIC8qKgogICAqIENyZWF0ZSBhbiBpdGVyYXRvciBwb3NpdGlvbmVkIGJlZm9yZSB0aGUgW2luZGV4XXRoIGNvZGUgdW5pdCBvZiB0aGUgc3RyaW5nLgogICAqCiAgICogV2hlbiBjcmVhdGVkLCB0aGVyZSBpcyBubyBbY3VycmVudF0gdmFsdWUuCiAgICogQSBbbW92ZU5leHRdIHdpbGwgdXNlIHRoZSBydW5lIHN0YXJ0aW5nIGF0IFtpbmRleF0gdGhlIGN1cnJlbnQgdmFsdWUsCiAgICogYW5kIGEgW21vdmVQcmV2aW91c10gd2lsbCB1c2UgdGhlIHJ1bmUgZW5kaW5nIGp1c3QgYmVmb3JlIFtpbmRleF0gYXMgdGhlCiAgICogdGhlIGN1cnJlbnQgdmFsdWUuCiAgICoKICAgKiBUaGUgW2luZGV4XSBwb3NpdGlvbiBtdXN0IG5vdCBiZSBpbiB0aGUgbWlkZGxlIG9mIGEgc3Vycm9nYXRlIHBhaXIuCiAgICovCiAgUnVuZUl0ZXJhdG9yLmF0KFN0cmluZyBzdHJpbmcsIGludCBpbmRleCkKICAgICAgOiBzdHJpbmcgPSBzdHJpbmcsCiAgICAgICAgX3Bvc2l0aW9uID0gaW5kZXgsCiAgICAgICAgX25leHRQb3NpdGlvbiA9IGluZGV4IHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWx1ZUluSW50ZXJ2YWwoaW5kZXgsIDAsIHN0cmluZy5sZW5ndGgpOwogICAgX2NoZWNrU3BsaXRTdXJyb2dhdGUoaW5kZXgpOwogIH0KCiAgLyoqIFRocm93IGFuIGVycm9yIGlmIHRoZSBpbmRleCBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgc3Vycm9nYXRlIHBhaXIuICovCiAgdm9pZCBfY2hlY2tTcGxpdFN1cnJvZ2F0ZShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA+IDAgJiYKICAgICAgICBpbmRleCA8IHN0cmluZy5sZW5ndGggJiYKICAgICAgICBfaXNMZWFkU3Vycm9nYXRlKHN0cmluZy5jb2RlVW5pdEF0KGluZGV4IC0gMSkpICYmCiAgICAgICAgX2lzVHJhaWxTdXJyb2dhdGUoc3RyaW5nLmNvZGVVbml0QXQoaW5kZXgpKSkgewogICAgICB0aHJvdyBBcmd1bWVudEVycm9yKCdJbmRleCBpbnNpZGUgc3Vycm9nYXRlIHBhaXI6ICRpbmRleCcpOwogICAgfQogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIGN1cnJlbnQgcnVuZSBpbiB0aGUgc3RyaW5nLgogICAqCiAgICogUmV0dXJucyBudWxsIGlmIHRoZSBbY3VycmVudF0gcnVuZSBpcyBudWxsLgogICAqLwogIGludCBnZXQgcmF3SW5kZXggPT4gKF9wb3NpdGlvbiAhPSBfbmV4dFBvc2l0aW9uKSA/IF9wb3NpdGlvbiA6IG51bGw7CgogIC8qKgogICAqIFJlc2V0cyB0aGUgaXRlcmF0b3IgdG8gdGhlIHJ1bmUgYXQgdGhlIHNwZWNpZmllZCBpbmRleCBvZiB0aGUgc3RyaW5nLgogICAqCiAgICogU2V0dGluZyBhIG5lZ2F0aXZlIFtyYXdJbmRleF0sIG9yIG9uZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8KICAgKiBbOnN0cmluZy5sZW5ndGg6XSwKICAgKiBpcyBhbiBlcnJvci4gU28gaXMgc2V0dGluZyBpdCBpbiB0aGUgbWlkZGxlIG9mIGEgc3Vycm9nYXRlIHBhaXIuCiAgICoKICAgKiBTZXR0aW5nIHRoZSBwb3NpdGlvbiB0byB0aGUgZW5kIG9mIHRoZW4gc3RyaW5nIHdpbGwgc2V0IFtjdXJyZW50XSB0byBudWxsLgogICAqLwogIHZvaWQgc2V0IHJhd0luZGV4KGludCByYXdJbmRleCkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkSW5kZXgocmF3SW5kZXgsIHN0cmluZywgInJhd0luZGV4Iik7CiAgICByZXNldChyYXdJbmRleCk7CiAgICBtb3ZlTmV4dCgpOwogIH0KCiAgLyoqCiAgICogUmVzZXRzIHRoZSBpdGVyYXRvciB0byB0aGUgZ2l2ZW4gaW5kZXggaW50byB0aGUgc3RyaW5nLgogICAqCiAgICogQWZ0ZXIgdGhpcyB0aGUgW2N1cnJlbnRdIHZhbHVlIGlzIHVuc2V0LgogICAqIFlvdSBtdXN0IGNhbGwgW21vdmVOZXh0XSBtYWtlIHRoZSBydW5lIGF0IHRoZSBwb3NpdGlvbiBjdXJyZW50LAogICAqIG9yIFttb3ZlUHJldmlvdXNdIGZvciB0aGUgbGFzdCBydW5lIGJlZm9yZSB0aGUgcG9zaXRpb24uCiAgICoKICAgKiBTZXR0aW5nIGEgbmVnYXRpdmUgW3Jhd0luZGV4XSwgb3Igb25lIGdyZWF0ZXIgdGhhbiBbOnN0cmluZy5sZW5ndGg6XSwKICAgKiBpcyBhbiBlcnJvci4gU28gaXMgc2V0dGluZyBpdCBpbiB0aGUgbWlkZGxlIG9mIGEgc3Vycm9nYXRlIHBhaXIuCiAgICovCiAgdm9pZCByZXNldChbaW50IHJhd0luZGV4ID0gMF0pIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWx1ZUluSW50ZXJ2YWwocmF3SW5kZXgsIDAsIHN0cmluZy5sZW5ndGgsICJyYXdJbmRleCIpOwogICAgX2NoZWNrU3BsaXRTdXJyb2dhdGUocmF3SW5kZXgpOwogICAgX3Bvc2l0aW9uID0gX25leHRQb3NpdGlvbiA9IHJhd0luZGV4OwogICAgX2N1cnJlbnRDb2RlUG9pbnQgPSBudWxsOwogIH0KCiAgLyoqIFRoZSBydW5lIChpbnRlZ2VyIFVuaWNvZGUgY29kZSBwb2ludCkgc3RhcnRpbmcgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4KICAgKiAgdGhlIHN0cmluZy4KICAgKi8KICBpbnQgZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnRDb2RlUG9pbnQ7CgogIC8qKgogICAqIFRoZSBudW1iZXIgb2YgY29kZSB1bml0cyBjb21wcmlzaW5nIHRoZSBjdXJyZW50IHJ1bmUuCiAgICoKICAgKiBSZXR1cm5zIHplcm8gaWYgdGhlcmUgaXMgbm8gY3VycmVudCBydW5lIChbY3VycmVudF0gaXMgbnVsbCkuCiAgICovCiAgaW50IGdldCBjdXJyZW50U2l6ZSA9PiBfbmV4dFBvc2l0aW9uIC0gX3Bvc2l0aW9uOwoKICAvKioKICAgKiBBIHN0cmluZyBjb250YWluaW5nIHRoZSBjdXJyZW50IHJ1bmUuCiAgICoKICAgKiBGb3IgcnVuZXMgb3V0c2lkZSB0aGUgYmFzaWMgbXVsdGlsaW5ndWFsIHBsYW5lLCB0aGlzIHdpbGwgYmUKICAgKiBhIFN0cmluZyBvZiBsZW5ndGggMiwgY29udGFpbmluZyB0d28gY29kZSB1bml0cy4KICAgKgogICAqIFJldHVybnMgbnVsbCBpZiBbY3VycmVudF0gaXMgbnVsbC4KICAgKi8KICBTdHJpbmcgZ2V0IGN1cnJlbnRBc1N0cmluZyB7CiAgICBpZiAoX3Bvc2l0aW9uID09IF9uZXh0UG9zaXRpb24pIHJldHVybiBudWxsOwogICAgaWYgKF9wb3NpdGlvbiArIDEgPT0gX25leHRQb3NpdGlvbikgcmV0dXJuIHN0cmluZ1tfcG9zaXRpb25dOwogICAgcmV0dXJuIHN0cmluZy5zdWJzdHJpbmcoX3Bvc2l0aW9uLCBfbmV4dFBvc2l0aW9uKTsKICB9CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBfcG9zaXRpb24gPSBfbmV4dFBvc2l0aW9uOwogICAgaWYgKF9wb3NpdGlvbiA9PSBzdHJpbmcubGVuZ3RoKSB7CiAgICAgIF9jdXJyZW50Q29kZVBvaW50ID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaW50IGNvZGVVbml0ID0gc3RyaW5nLmNvZGVVbml0QXQoX3Bvc2l0aW9uKTsKICAgIGludCBuZXh0UG9zaXRpb24gPSBfcG9zaXRpb24gKyAxOwogICAgaWYgKF9pc0xlYWRTdXJyb2dhdGUoY29kZVVuaXQpICYmIG5leHRQb3NpdGlvbiA8IHN0cmluZy5sZW5ndGgpIHsKICAgICAgaW50IG5leHRDb2RlVW5pdCA9IHN0cmluZy5jb2RlVW5pdEF0KG5leHRQb3NpdGlvbik7CiAgICAgIGlmIChfaXNUcmFpbFN1cnJvZ2F0ZShuZXh0Q29kZVVuaXQpKSB7CiAgICAgICAgX25leHRQb3NpdGlvbiA9IG5leHRQb3NpdGlvbiArIDE7CiAgICAgICAgX2N1cnJlbnRDb2RlUG9pbnQgPSBfY29tYmluZVN1cnJvZ2F0ZVBhaXIoY29kZVVuaXQsIG5leHRDb2RlVW5pdCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIF9uZXh0UG9zaXRpb24gPSBuZXh0UG9zaXRpb247CiAgICBfY3VycmVudENvZGVQb2ludCA9IGNvZGVVbml0OwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBib29sIG1vdmVQcmV2aW91cygpIHsKICAgIF9uZXh0UG9zaXRpb24gPSBfcG9zaXRpb247CiAgICBpZiAoX3Bvc2l0aW9uID09IDApIHsKICAgICAgX2N1cnJlbnRDb2RlUG9pbnQgPSBudWxsOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpbnQgcG9zaXRpb24gPSBfcG9zaXRpb24gLSAxOwogICAgaW50IGNvZGVVbml0ID0gc3RyaW5nLmNvZGVVbml0QXQocG9zaXRpb24pOwogICAgaWYgKF9pc1RyYWlsU3Vycm9nYXRlKGNvZGVVbml0KSAmJiBwb3NpdGlvbiA+IDApIHsKICAgICAgaW50IHByZXZDb2RlVW5pdCA9IHN0cmluZy5jb2RlVW5pdEF0KHBvc2l0aW9uIC0gMSk7CiAgICAgIGlmIChfaXNMZWFkU3Vycm9nYXRlKHByZXZDb2RlVW5pdCkpIHsKICAgICAgICBfcG9zaXRpb24gPSBwb3NpdGlvbiAtIDE7CiAgICAgICAgX2N1cnJlbnRDb2RlUG9pbnQgPSBfY29tYmluZVN1cnJvZ2F0ZVBhaXIocHJldkNvZGVVbml0LCBjb2RlVW5pdCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIF9wb3NpdGlvbiA9IHBvc2l0aW9uOwogICAgX2N1cnJlbnRDb2RlUG9pbnQgPSBjb2RlVW5pdDsKICAgIHJldHVybiB0cnVlOwogIH0KfQqDQQBOTjwBDwETAQQkA1BHTUtQUCYDR01KAxgYKysDDBESAwsPERIDT0MDIy8DPwMzA0ADMgNCUAMcSwNGQwMYIzMDSw0DJANMTUtOAzQDSkk9UE4zAx8zLANMIAMWA0cuAw0DRiZ4BD8GOwVQJAUwBUsVBTknJwVGRy8uBkEhAQY6BVBKQRYFQQY2AQZFBU9MDAVJFQUhBU4FQAVRBkxMUCIoGj0eAQZPBU9JHAUhNC0tBSI4BiEBBj8GHQEGHwVISi0FJiYFISYmBhIBBkQFSywGFAEGTwVEMEw5BTIFRkomBiIBBiYFQzozBU4sLUJMHTYnBh8BBkEFJwYfAQZDBR4/PwVKNQU/PwU8BU1MLAVAPwY1AQZKJQUjOTkFJgU6BUEGLQEGUC4FIzo6BUAFOwVFBjEBBisGFAEGLwYXAQZFBSgGIwEGSioFIi4qBjQBBkUFUTUNMAk4DRgdJwlOOgVOCUsyOzs9QDtAQkY+BUYJSkUZBhEBBjgFNQYVAQY5BTYGFgEGTA8FLiwFPQYgAQZBBUJBBUNBBUNBRiJDMAY1AQZCBUJBBUNBBUNBRiJDMAY2AQY+BSY7OwVMDAU8PAVBBjYBBlE4BUFGBkYBBjwFMEhLBU9QBkcdAQY/BUtOJgVBBU1MLAYzAQZMDAVNTk0FTlEFQTwFTSsFO0hLBVEGRgEGRgUpBUYFTjEyBj8BBlEFOEEFJkkFSDkFHj9LBU9GBRo3OQVNDgUdRAUnMUQFNyEFPB9IBUtJEQVNBicBBkkNBU4FTC0FRj0FSgVEMTIGJ0oBBksGGwEGQgVMTSMGEwEGO08FMSwFTx4GSBgBBjtPBTEsBU8eBkgYAgEEOgQkFxYBNQERHigGIC44OCw6CAYRBAIBRT4BRj8BSDA8AgFNDAU7IBcxETAVBhkFSSsGGQFHHh4XGwEGUQUwS04YBUkGLBkbID4hBAFLKRUhOjdCBgQBBkYFMQZHAQZLBUQYRgVQBiQ+FRAEAQY9BS5FPgVLRgYjTSQqHgQBUBIGKAEGOwVDBjQBBisFQjYFKAYfMUI3BAEUHyYgFAYxJkY6LSpLFQgGIiIRBAEYHxogFAYiMDc6LCJLFQgGGiIRBAIBFWRhcnQ6Y29yZS9zdHJpbmcuZGFydERvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9jb3JlL3N0cmluZ19idWZmZXIuZGFydIX6Ly8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBBIGNsYXNzIGZvciBjb25jYXRlbmF0aW5nIHN0cmluZ3MgZWZmaWNpZW50bHkuCiAqCiAqIEFsbG93cyBmb3IgdGhlIGluY3JlbWVudGFsIGJ1aWxkaW5nIG9mIGEgc3RyaW5nIHVzaW5nIHdyaXRlKigpIG1ldGhvZHMuCiAqIFRoZSBzdHJpbmdzIGFyZSBjb25jYXRlbmF0ZWQgdG8gYSBzaW5nbGUgc3RyaW5nIG9ubHkgd2hlbiBbdG9TdHJpbmddIGlzCiAqIGNhbGxlZC4KICovCmNsYXNzIFN0cmluZ0J1ZmZlciBpbXBsZW1lbnRzIFN0cmluZ1NpbmsgewogIC8qKiBDcmVhdGVzIHRoZSBzdHJpbmcgYnVmZmVyIHdpdGggYW4gaW5pdGlhbCBjb250ZW50LiAqLwogIGV4dGVybmFsIFN0cmluZ0J1ZmZlcihbT2JqZWN0IGNvbnRlbnQgPSAiIl0pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGNvbnRlbnQgdGhhdCBoYXMgYmVlbiBhY2N1bXVsYXRlZCBzbyBmYXIuCiAgICogVGhpcyBpcyBhIGNvbnN0YW50LXRpbWUgb3BlcmF0aW9uLgogICAqLwogIGV4dGVybmFsIGludCBnZXQgbGVuZ3RoOwoKICAvKiogUmV0dXJucyB3aGV0aGVyIHRoZSBidWZmZXIgaXMgZW1wdHkuIFRoaXMgaXMgYSBjb25zdGFudC10aW1lIG9wZXJhdGlvbi4gKi8KICBib29sIGdldCBpc0VtcHR5ID0+IGxlbmd0aCA9PSAwOwoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGJ1ZmZlciBpcyBub3QgZW1wdHkuIFRoaXMgaXMgYSBjb25zdGFudC10aW1lCiAgICogb3BlcmF0aW9uLgogICAqLwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gIWlzRW1wdHk7CgogIC8vLyBBZGRzIHRoZSBjb250ZW50cyBvZiBbb2JqXSwgY29udmVydGVkIHRvIGEgc3RyaW5nLCB0byB0aGUgYnVmZmVyLgogIGV4dGVybmFsIHZvaWQgd3JpdGUoT2JqZWN0IG9iaik7CgogIC8vLyBBZGRzIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgW2NoYXJDb2RlXSB0byB0aGUgYnVmZmVyLgogIGV4dGVybmFsIHZvaWQgd3JpdGVDaGFyQ29kZShpbnQgY2hhckNvZGUpOwoKICBleHRlcm5hbCB2b2lkIHdyaXRlQWxsKEl0ZXJhYmxlIG9iamVjdHMsIFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKTsKCiAgZXh0ZXJuYWwgdm9pZCB3cml0ZWxuKFtPYmplY3Qgb2JqID0gIiJdKTsKCiAgLyoqCiAgICogQ2xlYXJzIHRoZSBzdHJpbmcgYnVmZmVyLgogICAqLwogIGV4dGVybmFsIHZvaWQgY2xlYXIoKTsKCiAgLy8vIFJldHVybnMgdGhlIGNvbnRlbnRzIG9mIGJ1ZmZlciBhcyBhIGNvbmNhdGVuYXRlZCBzdHJpbmcuCiAgZXh0ZXJuYWwgU3RyaW5nIHRvU3RyaW5nKCk7Cn0KNgBOTjwBDwETAQQyA0tLCwQrPDABBkkoBhsBUSMBBkYQBiMBSCMBQi0BRQEsAQYfBhkBPx4CARxkYXJ0OmNvcmUvc3RyaW5nX2J1ZmZlci5kYXJ0Vm9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL19pbnRlcm5hbC92bS9saWIvc3RyaW5nX2J1ZmZlcl9wYXRjaC5kYXJ0lmovLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgU3RyaW5nQnVmZmVyIHsKICBzdGF0aWMgY29uc3QgaW50IF9CVUZGRVJfU0laRSA9IDY0OwogIHN0YXRpYyBjb25zdCBpbnQgX1BBUlRTX1RPX0NPTVBBQ1QgPSAxMjg7CiAgc3RhdGljIGNvbnN0IGludCBfUEFSVFNfVE9fQ09NUEFDVF9TSVpFX0xJTUlUID0gX1BBUlRTX1RPX0NPTVBBQ1QgKiA4OwoKICAvKioKICAgKiBXaGVuIHN0cmluZ3MgYXJlIHdyaXR0ZW4gdG8gdGhlIHN0cmluZyBidWZmZXIsIHdlIGFkZCB0aGVtIHRvIGEKICAgKiBsaXN0IG9mIHN0cmluZyBwYXJ0cy4KICAgKi8KICBMaXN0PFN0cmluZz4gX3BhcnRzOwoKICAvKioKICAgICogVG90YWwgbnVtYmVyIG9mIGNvZGUgdW5pdHMgaW4gdGhlIHN0cmluZyBwYXJ0cy4gRG9lcyBub3QgaW5jbHVkZQogICAgKiB0aGUgY29kZSB1bml0cyBhZGRlZCB0byB0aGUgYnVmZmVyLgogICAgKi8KICBpbnQgX3BhcnRzQ29kZVVuaXRzID0gMDsKCiAgLyoqCiAgICogVG8gcHJlc2VydmUgbWVtb3J5LCB3ZSBzb21ldGltZXMgY29tcGFjdCB0aGUgcGFydHMuIFRoaXMgY29tYmluZXMKICAgKiBzZXZlcmFsIHNtYWxsZXIgcGFydHMgaW50byBhIHNpbmdsZSBsYXJnZXIgcGFydCB0byBjdXQgZG93biBvbiB0aGUKICAgKiBjb3N0IHRoYXQgY29tZXMgZnJvbSB0aGUgcGVyLW9iamVjdCBtZW1vcnkgb3ZlcmhlYWQuIFdlIGtlZXAgdHJhY2sKICAgKiBvZiB0aGUgbGFzdCBpbmRleCB3aGVyZSB3ZSBlbmRlZCBvdXIgY29tcGFjdGlvbiBhbmQgdGhlIG51bWJlciBvZgogICAqIGNvZGUgdW5pdHMgYWRkZWQgc2luY2UgdGhlIGxhc3QgY29tcGFjdGlvbi4KICAgKi8KICBpbnQgX3BhcnRzQ29tcGFjdGlvbkluZGV4ID0gMDsKICBpbnQgX3BhcnRzQ29kZVVuaXRzU2luY2VDb21wYWN0aW9uID0gMDsKCiAgLyoqCiAgICogVGhlIGJ1ZmZlciBpcyB1c2VkIHRvIGJ1aWxkIHVwIGEgc3RyaW5nIGZyb20gY29kZSB1bml0cy4gSXQgaXMKICAgKiB1c2VkIHdoZW4gd3JpdGluZyBzaG9ydCBzdHJpbmdzIG9yIGluZGl2aWR1YWwgY2hhciBjb2RlcyB0byB0aGUKICAgKiBidWZmZXIuIFRoZSBidWZmZXIgaXMgYWxsb2NhdGVkIG9uIGRlbWFuZC4KICAgKi8KICBVaW50MTZMaXN0IF9idWZmZXI7CiAgaW50IF9idWZmZXJQb3NpdGlvbiA9IDA7CgogIC8qKgogICAqIENvbGxlY3RzIHRoZSBhcHByb3hpbWF0ZSBtYXhpbWFsIG1hZ25pdHVkZSBvZiB0aGUgY29kZSB1bml0cyBhZGRlZAogICAqIHRvIHRoZSBidWZmZXIuCiAgICoKICAgKiBUaGUgdmFsdWUgb2YgZWFjaCBhZGRlZCBjb2RlIHVuaXQgaXMgb3InZWQgd2l0aCB0aGlzIHZhcmlhYmxlLCBzbyB0aGUKICAgKiBtb3N0IHNpZ25pZmljYW50IGJpdCBzZXQgaW4gYW55IGNvZGUgdW5pdCBpcyBhbHNvIHNldCBpbiB0aGlzIHZhbHVlLgogICAqIElmIGJlbG93IDI1NiwgdGhlIHN0cmluZyBpbiB0aGUgYnVmZmVyIGlzIGEgTGF0aW4tMSBzdHJpbmcuCiAgICovCiAgaW50IF9idWZmZXJDb2RlVW5pdE1hZ25pdHVkZSA9IDA7CgogIC8vLyBDcmVhdGVzIHRoZSBzdHJpbmcgYnVmZmVyIHdpdGggYW4gaW5pdGlhbCBjb250ZW50LgogIEBwYXRjaAogIFN0cmluZ0J1ZmZlcihbT2JqZWN0IGNvbnRlbnQgPSAiIl0pIHsKICAgIHdyaXRlKGNvbnRlbnQpOwogIH0KCiAgQHBhdGNoCiAgaW50IGdldCBsZW5ndGggPT4gX3BhcnRzQ29kZVVuaXRzICsgX2J1ZmZlclBvc2l0aW9uOwoKICBAcGF0Y2gKICB2b2lkIHdyaXRlKE9iamVjdCBvYmopIHsKICAgIFN0cmluZyBzdHIgPSAnJG9iaic7CiAgICBpZiAoc3RyLmlzRW1wdHkpIHJldHVybjsKICAgIF9jb25zdW1lQnVmZmVyKCk7CiAgICBfYWRkUGFydChzdHIpOwogIH0KCiAgQHBhdGNoCiAgdm9pZCB3cml0ZUNoYXJDb2RlKGludCBjaGFyQ29kZSkgewogICAgaWYgKGNoYXJDb2RlIDw9IDB4RkZGRikgewogICAgICBpZiAoY2hhckNvZGUgPCAwKSB7CiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoY2hhckNvZGUsIDAsIDB4MTBGRkZGKTsKICAgICAgfQogICAgICBfZW5zdXJlQ2FwYWNpdHkoMSk7CiAgICAgIF9idWZmZXJbX2J1ZmZlclBvc2l0aW9uKytdID0gY2hhckNvZGU7CiAgICAgIF9idWZmZXJDb2RlVW5pdE1hZ25pdHVkZSB8PSBjaGFyQ29kZTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChjaGFyQ29kZSA+IDB4MTBGRkZGKSB7CiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoY2hhckNvZGUsIDAsIDB4MTBGRkZGKTsKICAgICAgfQogICAgICBfZW5zdXJlQ2FwYWNpdHkoMik7CiAgICAgIGludCBiaXRzID0gY2hhckNvZGUgLSAweDEwMDAwOwogICAgICBfYnVmZmVyW19idWZmZXJQb3NpdGlvbisrXSA9IDB4RDgwMCB8IChiaXRzID4+IDEwKTsKICAgICAgX2J1ZmZlcltfYnVmZmVyUG9zaXRpb24rK10gPSAweERDMDAgfCAoYml0cyAmIDB4M0ZGKTsKICAgICAgX2J1ZmZlckNvZGVVbml0TWFnbml0dWRlIHw9IDB4RkZGRjsKICAgIH0KICB9CgogIEBwYXRjaAogIHZvaWQgd3JpdGVBbGwoSXRlcmFibGUgb2JqZWN0cywgW1N0cmluZyBzZXBhcmF0b3IgPSAiIl0pIHsKICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gb2JqZWN0cy5pdGVyYXRvcjsKICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuOwogICAgaWYgKHNlcGFyYXRvci5pc0VtcHR5KSB7CiAgICAgIGRvIHsKICAgICAgICB3cml0ZShpdGVyYXRvci5jdXJyZW50KTsKICAgICAgfSB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZShpdGVyYXRvci5jdXJyZW50KTsKICAgICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgICB3cml0ZShzZXBhcmF0b3IpOwogICAgICAgIHdyaXRlKGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgICB9CiAgICB9CiAgfQoKICBAcGF0Y2gKICB2b2lkIHdyaXRlbG4oW09iamVjdCBvYmogPSAiIl0pIHsKICAgIHdyaXRlKG9iaik7CiAgICB3cml0ZSgiXG4iKTsKICB9CgogIC8qKiBNYWtlcyB0aGUgYnVmZmVyIGVtcHR5LiAqLwogIEBwYXRjaAogIHZvaWQgY2xlYXIoKSB7CiAgICBfcGFydHMgPSBudWxsOwogICAgX3BhcnRzQ29kZVVuaXRzID0gX2J1ZmZlclBvc2l0aW9uID0gX2J1ZmZlckNvZGVVbml0TWFnbml0dWRlID0gMDsKICB9CgogIC8qKiBSZXR1cm5zIHRoZSBjb250ZW50cyBvZiBidWZmZXIgYXMgYSBzdHJpbmcuICovCiAgQHBhdGNoCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgX2NvbnN1bWVCdWZmZXIoKTsKICAgIHJldHVybiAoX3BhcnRzQ29kZVVuaXRzID09IDApCiAgICAgICAgPyAiIgogICAgICAgIDogX1N0cmluZ0Jhc2UuX2NvbmNhdFJhbmdlKF9wYXJ0cywgMCwgX3BhcnRzLmxlbmd0aCk7CiAgfQoKICAvKiogRW5zdXJlcyB0aGF0IHRoZSBidWZmZXIgaGFzIGVub3VnaCBjYXBhY2l0eSB0byBhZGQgbiBjb2RlIHVuaXRzLiAqLwogIHZvaWQgX2Vuc3VyZUNhcGFjaXR5KGludCBuKSB7CiAgICBpZiAoX2J1ZmZlciA9PSBudWxsKSB7CiAgICAgIF9idWZmZXIgPSBuZXcgVWludDE2TGlzdChfQlVGRkVSX1NJWkUpOwogICAgfSBlbHNlIGlmIChfYnVmZmVyUG9zaXRpb24gKyBuID4gX2J1ZmZlci5sZW5ndGgpIHsKICAgICAgX2NvbnN1bWVCdWZmZXIoKTsKICAgIH0KICB9CgogIC8qKgogICAqIENvbnN1bWVzIHRoZSBjb250ZW50IG9mIHRoZSBidWZmZXIgYnkgdHVybmluZyBpdCBpbnRvIGEgc3RyaW5nCiAgICogYW5kIGFkZGluZyBpdCBhcyBhIHBhcnQuIEFmdGVyIGNhbGxpbmcgdGhpcyB0aGUgYnVmZmVyIHBvc2l0aW9uCiAgICogd2lsbCBiZSByZXNldCB0byB6ZXJvLgogICAqLwogIHZvaWQgX2NvbnN1bWVCdWZmZXIoKSB7CiAgICBpZiAoX2J1ZmZlclBvc2l0aW9uID09IDApIHJldHVybjsKICAgIGJvb2wgaXNMYXRpbjEgPSBfYnVmZmVyQ29kZVVuaXRNYWduaXR1ZGUgPD0gMHhGRjsKICAgIFN0cmluZyBzdHIgPSBfY3JlYXRlKF9idWZmZXIsIF9idWZmZXJQb3NpdGlvbiwgaXNMYXRpbjEpOwogICAgX2J1ZmZlclBvc2l0aW9uID0gX2J1ZmZlckNvZGVVbml0TWFnbml0dWRlID0gMDsKICAgIF9hZGRQYXJ0KHN0cik7CiAgfQoKICAvKioKICAgKiBBZGRzIGEgbmV3IHBhcnQgdG8gdGhpcyBzdHJpbmcgYnVmZmVyIGFuZCBrZWVwcyB0cmFjayBvZiBob3cKICAgKiBtYW55IGNvZGUgdW5pdHMgYXJlIGNvbnRhaW5lZCBpbiB0aGUgcGFydHMuCiAgICovCiAgdm9pZCBfYWRkUGFydChTdHJpbmcgc3RyKSB7CiAgICBpbnQgbGVuZ3RoID0gc3RyLmxlbmd0aDsKICAgIF9wYXJ0c0NvZGVVbml0cyArPSBsZW5ndGg7CiAgICBfcGFydHNDb2RlVW5pdHNTaW5jZUNvbXBhY3Rpb24gKz0gbGVuZ3RoOwoKICAgIGlmIChfcGFydHMgPT0gbnVsbCkgewogICAgICAvLyBFbXBpcmljYWxseSB0aGlzIGlzIGEgZ29vZCBjYXBhY2l0eSB0byBtaW5pbWl6ZSB0b3RhbCBieXRlcyBhbGxvY2F0ZWQuCiAgICAgIF9wYXJ0cyA9IG5ldyBfR3Jvd2FibGVMaXN0LndpdGhDYXBhY2l0eSgxMCkuLmFkZChzdHIpOwogICAgfSBlbHNlIHsKICAgICAgX3BhcnRzLmFkZChzdHIpOwogICAgICBpbnQgcGFydHNTaW5jZUNvbXBhY3Rpb24gPSBfcGFydHMubGVuZ3RoIC0gX3BhcnRzQ29tcGFjdGlvbkluZGV4OwogICAgICBpZiAocGFydHNTaW5jZUNvbXBhY3Rpb24gPT0gX1BBUlRTX1RPX0NPTVBBQ1QpIHsKICAgICAgICBfY29tcGFjdCgpOwogICAgICB9CiAgICB9CiAgfQoKICAvKioKICAgKiBDb21wYWN0cyB0aGUgbGFzdCBOIHBhcnRzIGlmIHRoZWlyIGF2ZXJhZ2Ugc2l6ZSBhbGxvd3MgdXMgdG8gc2F2ZSBhCiAgICogbG90IG9mIG1lbW9yeSBieSB0dXJuaW5nIHRoZW0gYWxsIGludG8gYSBzaW5nbGUgcGFydC4KICAgKi8KICB2b2lkIF9jb21wYWN0KCkgewogICAgaWYgKF9wYXJ0c0NvZGVVbml0c1NpbmNlQ29tcGFjdGlvbiA8IF9QQVJUU19UT19DT01QQUNUX1NJWkVfTElNSVQpIHsKICAgICAgU3RyaW5nIGNvbXBhY3RlZCA9IF9TdHJpbmdCYXNlLl9jb25jYXRSYW5nZSgKICAgICAgICAgIF9wYXJ0cywKICAgICAgICAgIF9wYXJ0c0NvbXBhY3Rpb25JbmRleCwgLy8gU3RhcnQKICAgICAgICAgIF9wYXJ0c0NvbXBhY3Rpb25JbmRleCArIF9QQVJUU19UT19DT01QQUNUIC8vIEVuZAogICAgICAgICAgKTsKICAgICAgX3BhcnRzLmxlbmd0aCA9IF9wYXJ0cy5sZW5ndGggLSBfUEFSVFNfVE9fQ09NUEFDVDsKICAgICAgX3BhcnRzLmFkZChjb21wYWN0ZWQpOwogICAgfQogICAgX3BhcnRzQ29kZVVuaXRzU2luY2VDb21wYWN0aW9uID0gMDsKICAgIF9wYXJ0c0NvbXBhY3Rpb25JbmRleCA9IF9wYXJ0cy5sZW5ndGg7CiAgfQoKICAvKioKICAgKiBDcmVhdGUgYSBbU3RyaW5nXSBmcm9tIHRoZSBVRlQtMTYgY29kZSB1bml0cyBpbiBidWZmZXIuCiAgICovCiAgc3RhdGljIFN0cmluZyBfY3JlYXRlKFVpbnQxNkxpc3QgYnVmZmVyLCBpbnQgbGVuZ3RoLCBib29sIGlzTGF0aW4xKQogICAgICBuYXRpdmUgIlN0cmluZ0J1ZmZlcl9jcmVhdGVTdHJpbmdGcm9tVWludDE2QXJyYXkiOwp9CoDIAE5OPAEPAR4BBxUmLEkBBkUbBhcBBkcqBxsBBkdISEcxBiEqAQZERTAGFhsBBkgUBUtKQQYkATkJKBQEAQk3AQkbGR0WEwQBCSUeGjsIGi0sDSE7CBolOjwqBgQBCT0qJh0LISUNHyQaIQgGBAEJJBARBAEhCRETRgQBNQkWFiINPgQBSiAbLjcYBgQBBkRFHAYaJjY+NBMEAQZCMQYeHR8uARpQPQ0XSDcUCAYEAQZJOwYUSTMSKjsNOR0GKCsEAQY9BkY5AgEoZGFydDpjb3JlLXBhdGNoL3N0cmluZ19idWZmZXJfcGF0Y2guZGFydEJvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9jb3JlL3N0cmluZ19zaW5rLmRhcnSDhy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmNvcmU7CgphYnN0cmFjdCBjbGFzcyBTdHJpbmdTaW5rIHsKICAvKioKICAgKiBDb252ZXJ0cyBbb2JqXSB0byBhIFN0cmluZyBieSBpbnZva2luZyBbT2JqZWN0LnRvU3RyaW5nXSBhbmQgCiAgICogYWRkcyB0aGUgcmVzdWx0IHRvIGB0aGlzYC4KICAgKi8KICB2b2lkIHdyaXRlKE9iamVjdCBvYmopOwoKICAvKioKICAgKiBJdGVyYXRlcyBvdmVyIHRoZSBnaXZlbiBbb2JqZWN0c10gYW5kIFt3cml0ZV1zIHRoZW0gaW4gc2VxdWVuY2UuCiAgICovCiAgdm9pZCB3cml0ZUFsbChJdGVyYWJsZSBvYmplY3RzLCBbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSk7CgogIC8qKgogICAqIENvbnZlcnRzIFtvYmpdIHRvIGEgU3RyaW5nIGJ5IGludm9raW5nIFtPYmplY3QudG9TdHJpbmddIGFuZCAKICAgKiBhZGRzIHRoZSByZXN1bHQgdG8gYHRoaXNgLCBmb2xsb3dlZCBieSBhIG5ld2xpbmUuCiAgICovCiAgdm9pZCB3cml0ZWxuKFtPYmplY3Qgb2JqID0gIiJdKTsKCiAgLyoqCiAgICogV3JpdGVzIHRoZSBbY2hhckNvZGVdIHRvIGB0aGlzYC4KICAgKgogICAqIFRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG8gYHdyaXRlKG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKSlgLgogICAqLwogIHZvaWQgd3JpdGVDaGFyQ29kZShpbnQgY2hhckNvZGUpOwp9CiMATk48AQ8BEwEcBkMgBhoBBkYGPAEGQzcGIwEGJgVOBiQCARpkYXJ0OmNvcmUvc3RyaW5nX3NpbmsuZGFydD1vcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9jb3JlL3N5bWJvbC5kYXJ0jmUvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5jb3JlOwoKLy8vIE9wYXF1ZSBuYW1lIHVzZWQgYnkgbWlycm9ycywgaW52b2NhdGlvbnMgYW5kIFtGdW5jdGlvbi5hcHBseV0uCmFic3RyYWN0IGNsYXNzIFN5bWJvbCB7CiAgLyoqIFRoZSBzeW1ib2wgY29ycmVzcG9uZGluZyB0byB0aGUgbmFtZSBvZiB0aGUgdW5hcnkgbWludXMgb3BlcmF0b3IuICovCiAgc3RhdGljIGNvbnN0IFN5bWJvbCB1bmFyeU1pbnVzID0gU3ltYm9sKCJ1bmFyeS0iKTsKCiAgLyoqCiAgICogVGhlIGVtcHR5IHN5bWJvbC4KICAgKgogICAqIFRoZSBlbXB0eSBzeW1ib2wgaXMgdGhlIG5hbWUgb2YgbGlicmFyaWVzIHdpdGggbm8gbGlicmFyeSBkZWNsYXJhdGlvbiwKICAgKiBhbmQgdGhlIGJhc2UtbmFtZSBvZiB0aGUgdW5uYW1lZCBjb25zdHJ1Y3Rvci4KICAgKi8KICBzdGF0aWMgY29uc3QgU3ltYm9sIGVtcHR5ID0gU3ltYm9sKCIiKTsKCiAgLyoqCiAgICogQ29uc3RydWN0cyBhIG5ldyBbU3ltYm9sXSByZXByZXNlbnRpbmcgdGhlIHByb3ZpZGVkIG5hbWUuCiAgICoKICAgKiBUaGUgbmFtZSBtdXN0IGJlIGEgdmFsaWQgcHVibGljIERhcnQgbWVtYmVyIG5hbWUsCiAgICogcHVibGljIGNvbnN0cnVjdG9yIG5hbWUsIG9yIGxpYnJhcnkgbmFtZSwgb3B0aW9uYWxseSBxdWFsaWZpZWQuCiAgICoKICAgKiBBIHF1YWxpZmllZCBuYW1lIGlzIGEgdmFsaWQgbmFtZSBwcmVjZWRlZCBieSBhIHB1YmxpYyBpZGVudGlmaWVyIG5hbWUKICAgKiBhbmQgYSAnYC5gJywgZS5nLiwgYGZvby5iYXIuYmF6PWAgaXMgYSBxdWFsaWZpZWQgdmVyc2lvbiBvZiBgYmF6PWAuCiAgICogVGhhdCBtZWFucyB0aGF0IHRoZSBjb250ZW50IG9mIHRoZSBbbmFtZV0gU3RyaW5nIG11c3QgYmUgZWl0aGVyCiAgICoKICAgKiAqIGEgdmFsaWQgcHVibGljIERhcnQgaWRlbnRpZmllcgogICAqICAgKHRoYXQgaXMsIGFuIGlkZW50aWZpZXIgbm90IHN0YXJ0aW5nIHdpdGggImBfYCIpLAogICAqICogc3VjaCBhbiBpZGVudGlmaWVyIGZvbGxvd2VkIGJ5ICI9IiAoYSBzZXR0ZXIgbmFtZSksCiAgICogKiB0aGUgbmFtZSBvZiBhIGRlY2xhcmFibGUgb3BlcmF0b3IKICAgKiAgIChvbmUgb2YgImArYCIsICJgLWAiLCAiYCpgIiwgImAvYCIsICJgJWAiLCAiYH4vYCIsICJgJmAiLCAiYHxgIiwKICAgKiAgICJgXmAiLCAiYH5gIiwgImA8PGAiLCAiYD4+YCIsICJgPGAiLCAiYDw9YCIsICJgPmAiLCAiYD49YCIsICJgPT1gIiwKICAgKiAgICJgW11gIiwgImBbXT1gIiwgb3IgImB1bmFyeS1gIiksCiAgICogKiBhbnkgb2YgdGhlIGFib3ZlIHByZWNlZGVkIGJ5IGFueSBudW1iZXIgb2YgcXVhbGlmaWVycywKICAgKiAgIHdoZXJlIGEgcXVhbGlmaWVyIGlzIGEgbm9uLXByaXZhdGUgaWRlbnRpZmllciBmb2xsb3dlZCBieSAnYC5gJywKICAgKiAqIG9yIHRoZSBlbXB0eSBzdHJpbmcgKHRoZSBkZWZhdWx0IG5hbWUgb2YgYSBsaWJyYXJ5IHdpdGggbm8gbGlicmFyeQogICAqICAgbmFtZSBkZWNsYXJhdGlvbikuCiAgICoKICAgKiBTeW1ib2wgaW5zdGFuY2VzIGNyZWF0ZWQgZnJvbSB0aGUgc2FtZSBbbmFtZV0gYXJlIGVxdWFsLAogICAqIGJ1dCBub3QgbmVjZXNzYXJpbHkgaWRlbnRpY2FsLCBidXQgc3ltYm9scyBjcmVhdGVkIGFzIGNvbXBpbGUtdGltZQogICAqIGNvbnN0YW50cyBhcmUgY2Fub25pY2FsaXplZCwgYXMgYWxsIG90aGVyIGNvbnN0YW50IG9iamVjdCBjcmVhdGlvbnMuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogYXNzZXJ0KG5ldyBTeW1ib2woImZvbyIpID09IG5ldyBTeW1ib2woImZvbyIpKTsKICAgKiBhc3NlcnQoaWRlbnRpY2FsKGNvbnN0IFN5bWJvbCgiZm9vIiksIGNvbnN0IFN5bWJvbCgiZm9vIikpKTsKICAgKiBgYGAKICAgKgogICAqIElmIFtuYW1lXSBpcyBhIHNpbmdsZSBpZGVudGlmaWVyIHRoYXQgZG9lcyBub3Qgc3RhcnQgd2l0aCBhbiB1bmRlcnNjb3JlLAogICAqIG9yIGl0IGlzIGEgcXVhbGlmaWVkIGlkZW50aWZpZXIsCiAgICogb3IgaXQgaXMgYW4gb3BlcmF0b3IgbmFtZSBkaWZmZXJlbnQgZnJvbSBgdW5hcnktYCwKICAgKiB0aGVuIHRoZSByZXN1bHQgb2YgYGNvbnN0IFN5bWJvbChuYW1lKWAgaXMgdGhlIHNhbWUgaW5zdGFuY2UgdGhhdAogICAqIHRoZSBzeW1ib2wgbGl0ZXJhbCBjcmVhdGVkIGJ5IHByZWZpeGluZyBgI2AgdG8gdGhlIGNvbnRlbnQgb2YgW25hbWVdCiAgICogd291bGQgZXZhbHVhdGUgdG8uCiAgICoKICAgKiBgYGBkYXJ0CiAgICogYXNzZXJ0KG5ldyBTeW1ib2woImZvbyIpID09ICNmb28pOwogICAqIGFzc2VydChuZXcgU3ltYm9sKCJbXT0iKSA9PSAjW109XSk7CiAgICogYXNzZXJ0KG5ldyBTeW1ib2woImZvby5iYXIiKSA9PSAjZm9vLmJhcik7CiAgICogYXNzZXJ0KGlkZW50aWNhbChjb25zdCBTeW1ib2woImZvbyIpLCAjZm9vKSk7CiAgICogYXNzZXJ0KGlkZW50aWNhbChjb25zdCBTeW1ib2woIltdPSIpLCAjW109KSk7CiAgICogYXNzZXJ0KGlkZW50aWNhbChjb25zdCBTeW1ib2woImZvby5iYXIiKSwgI2Zvby5iYXIpKTsKICAgKiBgYGAKICAgKgogICAqIFRoaXMgY29uc3RydWN0b3IgY2Fubm90IGNyZWF0ZSBhIFtTeW1ib2xdIGluc3RhbmNlIHRoYXQgaXMgZXF1YWwgdG8KICAgKiBhIHByaXZhdGUgc3ltYm9sIGxpdGVyYWwgbGlrZSBgI19mb29gLgogICAqIGBgYGRhcnQKICAgKiBjb25zdCBTeW1ib2woIl9mb28iKSAvLyBJbnZhbGlkCiAgICogYGBgCiAgICoKICAgKiBUaGUgY3JlYXRlZCBpbnN0YW5jZSBvdmVycmlkZXMgW09iamVjdC49PV0uCiAgICoKICAgKiBUaGUgZm9sbG93aW5nIHRleHQgaXMgbm9uLW5vcm1hdGl2ZToKICAgKgogICAqIENyZWF0aW5nIG5vbi1jb25zdCBTeW1ib2wgaW5zdGFuY2VzIG1heSByZXN1bHQgaW4gbGFyZ2VyIG91dHB1dC4gIElmCiAgICogcG9zc2libGUsIHVzZSBgTWlycm9yc1VzZWRgIGZyb20gImRhcnQ6bWlycm9ycyIgdG8gc3BlY2lmeSB3aGljaCBuYW1lcwogICAqIG1pZ2h0IGJlIHBhc3NlZCB0byB0aGlzIGNvbnN0cnVjdG9yLgogICAqLwogIGNvbnN0IGZhY3RvcnkgU3ltYm9sKFN0cmluZyBuYW1lKSA9IGludGVybmFsLlN5bWJvbDsKCiAgLyoqCiAgICogUmV0dXJucyBhIGhhc2ggY29kZSBjb21wYXRpYmxlIHdpdGggW29wZXJhdG9yPT1dLgogICAqCiAgICogRXF1YWwgc3ltYm9scyBoYXZlIHRoZSBzYW1lIGhhc2ggY29kZS4KICAgKi8KICBpbnQgZ2V0IGhhc2hDb2RlOwoKICAvKioKICAgKiBTeW1ib2xzIGFyZSBlcXVhbCB0byBvdGhlciBzeW1ib2xzIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgc2FtZSBtZW1iZXIgbmFtZS4KICAgKgogICAqIFF1YWxpZmllZCBtZW1iZXIgbmFtZXMsIGxpa2UgYCNmb28uYmFyYCBhcmUgZXF1YWwgb25seSBpZiB0aGV5IGhhdmUgdGhlCiAgICogc2FtZSBpZGVudGlmaWVycyBiZWZvcmUgdGhlIHNhbWUgZmluYWwgbWVtYmVyIG5hbWUuCiAgICovCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcik7Cn0KZQBOTjwBDwETAUMYSzUBBhcFTDMGKgEGPwU3RQVLSUUFJjk7KUhLKD5IShoFPkhKBQ01QgkFTiY4R0oYBQ0oKTAzMzsJBUksDSUJBTEFKgVKTCoGNwEGNwUsBhQBBlEFTTkGGwIBFWRhcnQ6Y29yZS9zeW1ib2wuZGFydDtvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9jb3JlL3R5cGUuZGFydIFBLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBSdW50aW1lIHJlcHJlc2VudGF0aW9uIG9mIGEgdHlwZS4KICovCmFic3RyYWN0IGNsYXNzIFR5cGUge30KDgBOTjwBDwETAQQlBBcBE2RhcnQ6Y29yZS90eXBlLmRhcnQ6b3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvY29yZS91cmkuZGFydMAClJIvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5jb3JlOwoKLy8gRnJlcXVlbnRseSB1c2VkIGNoYXJhY3RlciBjb2Rlcy4KY29uc3QgaW50IF9TUEFDRSA9IDB4MjA7CmNvbnN0IGludCBfUEVSQ0VOVCA9IDB4MjU7CmNvbnN0IGludCBfQU1QRVJTQU5EID0gMHgyNjsKY29uc3QgaW50IF9QTFVTID0gMHgyQjsKY29uc3QgaW50IF9ET1QgPSAweDJFOwpjb25zdCBpbnQgX1NMQVNIID0gMHgyRjsKY29uc3QgaW50IF9DT0xPTiA9IDB4M0E7CmNvbnN0IGludCBfRVFVQUxTID0gMHgzZDsKY29uc3QgaW50IF9VUFBFUl9DQVNFX0EgPSAweDQxOwpjb25zdCBpbnQgX1VQUEVSX0NBU0VfWiA9IDB4NUE7CmNvbnN0IGludCBfTEVGVF9CUkFDS0VUID0gMHg1QjsKY29uc3QgaW50IF9CQUNLU0xBU0ggPSAweDVDOwpjb25zdCBpbnQgX1JJR0hUX0JSQUNLRVQgPSAweDVEOwpjb25zdCBpbnQgX0xPV0VSX0NBU0VfQSA9IDB4NjE7CmNvbnN0IGludCBfTE9XRVJfQ0FTRV9GID0gMHg2NjsKY29uc3QgaW50IF9MT1dFUl9DQVNFX1ogPSAweDdBOwoKY29uc3QgU3RyaW5nIF9oZXhEaWdpdHMgPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7CgovKioKICogQSBwYXJzZWQgVVJJLCBzdWNoIGFzIGEgVVJMLgogKgogKiAqKlNlZSBhbHNvOioqCiAqCiAqICogW1VSSXNdW3VyaXNdIGluIHRoZSBbbGlicmFyeSB0b3VyXVtsaWJ0b3VyXQogKiAqIFtSRkMtMzk4Nl0oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NikKICoKICogW3VyaXNdOiBodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZG9jcy9kYXJ0LXVwLWFuZC1ydW5uaW5nL2NoMDMuaHRtbCN1cmlzCiAqIFtsaWJ0b3VyXTogaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2RvY3MvZGFydC11cC1hbmQtcnVubmluZy9jb250ZW50cy9jaDAzLmh0bWwKICovCmFic3RyYWN0IGNsYXNzIFVyaSB7CiAgLyoqCiAgICogUmV0dXJucyB0aGUgbmF0dXJhbCBiYXNlIFVSSSBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0uCiAgICoKICAgKiBXaGVuIHJ1bm5pbmcgaW4gYSBicm93c2VyIHRoaXMgaXMgdGhlIGN1cnJlbnQgVVJMIG9mIHRoZSBjdXJyZW50IHBhZ2UKICAgKiAoZnJvbSBgd2luZG93LmxvY2F0aW9uLmhyZWZgKS4KICAgKgogICAqIFdoZW4gbm90IHJ1bm5pbmcgaW4gYSBicm93c2VyIHRoaXMgaXMgdGhlIGZpbGUgVVJJIHJlZmVyZW5jaW5nCiAgICogdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIFVyaSBnZXQgYmFzZTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBVUkkgZnJvbSBpdHMgY29tcG9uZW50cy4KICAgKgogICAqIEVhY2ggY29tcG9uZW50IGlzIHNldCB0aHJvdWdoIGEgbmFtZWQgYXJndW1lbnQuIEFueSBudW1iZXIgb2YKICAgKiBjb21wb25lbnRzIGNhbiBiZSBwcm92aWRlZC4gVGhlIFtwYXRoXSBhbmQgW3F1ZXJ5XSBjb21wb25lbnRzIGNhbiBiZSBzZXQKICAgKiB1c2luZyBlaXRoZXIgb2YgdHdvIGRpZmZlcmVudCBuYW1lZCBhcmd1bWVudHMuCiAgICoKICAgKiBUaGUgc2NoZW1lIGNvbXBvbmVudCBpcyBzZXQgdGhyb3VnaCBbc2NoZW1lXS4gVGhlIHNjaGVtZSBpcwogICAqIG5vcm1hbGl6ZWQgdG8gYWxsIGxvd2VyY2FzZSBsZXR0ZXJzLiBJZiB0aGUgc2NoZW1lIGlzIG9taXR0ZWQgb3IgZW1wdHksCiAgICogdGhlIFVSSSB3aWxsIG5vdCBoYXZlIGEgc2NoZW1lIHBhcnQuCiAgICoKICAgKiBUaGUgdXNlciBpbmZvIHBhcnQgb2YgdGhlIGF1dGhvcml0eSBjb21wb25lbnQgaXMgc2V0IHRocm91Z2gKICAgKiBbdXNlckluZm9dLiBJdCBkZWZhdWx0cyB0byB0aGUgZW1wdHkgc3RyaW5nLCB3aGljaCB3aWxsIGJlIG9taXR0ZWQKICAgKiBmcm9tIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIFVSSS4KICAgKgogICAqIFRoZSBob3N0IHBhcnQgb2YgdGhlIGF1dGhvcml0eSBjb21wb25lbnQgaXMgc2V0IHRocm91Z2gKICAgKiBbaG9zdF0uIFRoZSBob3N0IGNhbiBlaXRoZXIgYmUgYSBob3N0bmFtZSwgYW4gSVB2NCBhZGRyZXNzIG9yIGFuCiAgICogSVB2NiBhZGRyZXNzLCBjb250YWluZWQgaW4gJ1snIGFuZCAnXScuIElmIHRoZSBob3N0IGNvbnRhaW5zIGEKICAgKiAnOicgY2hhcmFjdGVyLCB0aGUgJ1snIGFuZCAnXScgYXJlIGFkZGVkIGlmIG5vdCBhbHJlYWR5IHByb3ZpZGVkLgogICAqIFRoZSBob3N0IGlzIG5vcm1hbGl6ZWQgdG8gYWxsIGxvd2VyY2FzZSBsZXR0ZXJzLgogICAqCiAgICogVGhlIHBvcnQgcGFydCBvZiB0aGUgYXV0aG9yaXR5IGNvbXBvbmVudCBpcyBzZXQgdGhyb3VnaAogICAqIFtwb3J0XS4KICAgKiBJZiBbcG9ydF0gaXMgb21pdHRlZCBvciBgbnVsbGAsIGl0IGltcGxpZXMgdGhlIGRlZmF1bHQgcG9ydCBmb3IKICAgKiB0aGUgVVJJJ3Mgc2NoZW1lLCBhbmQgaXMgZXF1aXZhbGVudCB0byBwYXNzaW5nIHRoYXQgcG9ydCBleHBsaWNpdGx5LgogICAqIFRoZSByZWNvZ25pemVkIHNjaGVtZXMsIGFuZCB0aGVpciBkZWZhdWx0IHBvcnRzLCBhcmUgImh0dHAiICg4MCkgYW5kCiAgICogImh0dHBzIiAoNDQzKS4gQWxsIG90aGVyIHNjaGVtZXMgYXJlIGNvbnNpZGVyZWQgYXMgaGF2aW5nIHplcm8gYXMgdGhlCiAgICogZGVmYXVsdCBwb3J0LgogICAqCiAgICogSWYgYW55IG9mIGB1c2VySW5mb2AsIGBob3N0YCBvciBgcG9ydGAgYXJlIHByb3ZpZGVkLAogICAqIHRoZSBVUkkgaGFzIGFuIGF1dGhvcml0eSBhY2NvcmRpbmcgdG8gW2hhc0F1dGhvcml0eV0uCiAgICoKICAgKiBUaGUgcGF0aCBjb21wb25lbnQgaXMgc2V0IHRocm91Z2ggZWl0aGVyIFtwYXRoXSBvcgogICAqIFtwYXRoU2VnbWVudHNdLgogICAqIFdoZW4gW3BhdGhdIGlzIHVzZWQsIGl0IHNob3VsZCBiZSBhIHZhbGlkIFVSSSBwYXRoLAogICAqIGJ1dCBpbnZhbGlkIGNoYXJhY3RlcnMsIGV4Y2VwdCB0aGUgZ2VuZXJhbCBkZWxpbWl0ZXJzICc6L0BbXT8jJywKICAgKiB3aWxsIGJlIGVzY2FwZWQgaWYgbmVjZXNzYXJ5LgogICAqIFdoZW4gW3BhdGhTZWdtZW50c10gaXMgdXNlZCwgZWFjaCBvZiB0aGUgcHJvdmlkZWQgc2VnbWVudHMKICAgKiBpcyBmaXJzdCBwZXJjZW50LWVuY29kZWQgYW5kIHRoZW4gam9pbmVkIHVzaW5nIHRoZSBmb3J3YXJkIHNsYXNoCiAgICogc2VwYXJhdG9yLgogICAqCiAgICogVGhlIHBlcmNlbnQtZW5jb2Rpbmcgb2YgdGhlIHBhdGggc2VnbWVudHMgZW5jb2RlcyBhbGwKICAgKiBjaGFyYWN0ZXJzIGV4Y2VwdCBmb3IgdGhlIHVucmVzZXJ2ZWQgY2hhcmFjdGVycyBhbmQgdGhlIGZvbGxvd2luZwogICAqIGxpc3Qgb2YgY2hhcmFjdGVyczogYCEkJicoKSorLDs9OkBgLiBJZiB0aGUgb3RoZXIgY29tcG9uZW50cwogICAqIG5lY2Vzc2l0YXRlIGFuIGFic29sdXRlIHBhdGgsIGEgbGVhZGluZyBzbGFzaCBgL2AgaXMgcHJlcGVuZGVkIGlmCiAgICogbm90IGFscmVhZHkgdGhlcmUuCiAgICoKICAgKiBUaGUgcXVlcnkgY29tcG9uZW50IGlzIHNldCB0aHJvdWdoIGVpdGhlciBbcXVlcnldIG9yIFtxdWVyeVBhcmFtZXRlcnNdLgogICAqIFdoZW4gW3F1ZXJ5XSBpcyB1c2VkLCB0aGUgcHJvdmlkZWQgc3RyaW5nIHNob3VsZCBiZSBhIHZhbGlkIFVSSSBxdWVyeSwKICAgKiBidXQgaW52YWxpZCBjaGFyYWN0ZXJzLCBvdGhlciB0aGFuIGdlbmVyYWwgZGVsaW1pdGVycywKICAgKiB3aWxsIGJlIGVzY2FwZWQgaWYgbmVjZXNzYXJ5LgogICAqIFdoZW4gW3F1ZXJ5UGFyYW1ldGVyc10gaXMgdXNlZCB0aGUgcXVlcnkgaXMgYnVpbHQgZnJvbSB0aGUKICAgKiBwcm92aWRlZCBtYXAuIEVhY2gga2V5IGFuZCB2YWx1ZSBpbiB0aGUgbWFwIGlzIHBlcmNlbnQtZW5jb2RlZAogICAqIGFuZCBqb2luZWQgdXNpbmcgZXF1YWwgYW5kIGFtcGVyc2FuZCBjaGFyYWN0ZXJzLgogICAqIEEgdmFsdWUgaW4gdGhlIG1hcCBtdXN0IGJlIGVpdGhlciBhIHN0cmluZywgb3IgYW4gW0l0ZXJhYmxlXSBvZiBzdHJpbmdzLAogICAqIHdoZXJlIHRoZSBsYXR0ZXIgY29ycmVzcG9uZHMgdG8gbXVsdGlwbGUgdmFsdWVzIGZvciB0aGUgc2FtZSBrZXkuCiAgICoKICAgKiBUaGUgcGVyY2VudC1lbmNvZGluZyBvZiB0aGUga2V5cyBhbmQgdmFsdWVzIGVuY29kZXMgYWxsIGNoYXJhY3RlcnMKICAgKiBleGNlcHQgZm9yIHRoZSB1bnJlc2VydmVkIGNoYXJhY3RlcnMsIGFuZCByZXBsYWNlcyBzcGFjZXMgd2l0aCBgK2AuCiAgICogSWYgYHF1ZXJ5YCBpcyB0aGUgZW1wdHkgc3RyaW5nLCBpdCBpcyBlcXVpdmFsZW50IHRvIG9taXR0aW5nIGl0LgogICAqIFRvIGhhdmUgYW4gYWN0dWFsIGVtcHR5IHF1ZXJ5IHBhcnQsCiAgICogdXNlIGFuIGVtcHR5IG1hcCBmb3IgYHF1ZXJ5UGFyYW1ldGVyc2AuCiAgICoKICAgKiBJZiBib3RoIGBxdWVyeWAgYW5kIGBxdWVyeVBhcmFtZXRlcnNgIGFyZSBvbWl0dGVkIG9yIGBudWxsYCwKICAgKiB0aGUgVVJJIGhhcyBubyBxdWVyeSBwYXJ0LgogICAqCiAgICogVGhlIGZyYWdtZW50IGNvbXBvbmVudCBpcyBzZXQgdGhyb3VnaCBbZnJhZ21lbnRdLgogICAqIEl0IHNob3VsZCBiZSBhIHZhbGlkIFVSSSBmcmFnbWVudCwgYnV0IGludmFsaWQgY2hhcmFjdGVycyBvdGhlciB0aGFuCiAgICogZ2VuZXJhbCBkZWxpbWl0ZXJzLCBhcmUgZXNjYXBlZCBpZiBuZWNlc3NhcnkuCiAgICogSWYgYGZyYWdtZW50YCBpcyBvbWl0dGVkIG9yIGBudWxsYCwgdGhlIFVSSSBoYXMgbm8gZnJhZ21lbnQgcGFydC4KICAgKi8KICBmYWN0b3J5IFVyaSgKICAgICAge1N0cmluZyBzY2hlbWUsCiAgICAgIFN0cmluZyB1c2VySW5mbywKICAgICAgU3RyaW5nIGhvc3QsCiAgICAgIGludCBwb3J0LAogICAgICBTdHJpbmcgcGF0aCwKICAgICAgSXRlcmFibGU8U3RyaW5nPiBwYXRoU2VnbWVudHMsCiAgICAgIFN0cmluZyBxdWVyeSwKICAgICAgTWFwPFN0cmluZywgZHluYW1pYyAvKlN0cmluZ3xJdGVyYWJsZTxTdHJpbmc+Ki8gPiBxdWVyeVBhcmFtZXRlcnMsCiAgICAgIFN0cmluZyBmcmFnbWVudH0pID0gX1VyaTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBgaHR0cGAgVVJJIGZyb20gYXV0aG9yaXR5LCBwYXRoIGFuZCBxdWVyeS4KICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogYGBgCiAgICogLy8gaHR0cDovL2V4YW1wbGUub3JnL3BhdGg/cT1kYXJ0LgogICAqIG5ldyBVcmkuaHR0cCgiZXhhbXBsZS5vcmciLCAiL3BhdGgiLCB7ICJxIiA6ICJkYXJ0IiB9KTsKICAgKgogICAqIC8vIGh0dHA6Ly91c2VyOnBhc3NAbG9jYWxob3N0OjgwODAKICAgKiBuZXcgVXJpLmh0dHAoInVzZXI6cGFzc0Bsb2NhbGhvc3Q6ODA4MCIsICIiKTsKICAgKgogICAqIC8vIGh0dHA6Ly9leGFtcGxlLm9yZy9hJTIwYgogICAqIG5ldyBVcmkuaHR0cCgiZXhhbXBsZS5vcmciLCAiYSBiIik7CiAgICoKICAgKiAvLyBodHRwOi8vZXhhbXBsZS5vcmcvYSUyNTJGCiAgICogbmV3IFVyaS5odHRwKCJleGFtcGxlLm9yZyIsICIvYSUyRiIpOwogICAqIGBgYAogICAqCiAgICogVGhlIGBzY2hlbWVgIGlzIGFsd2F5cyBzZXQgdG8gYGh0dHBgLgogICAqCiAgICogVGhlIGB1c2VySW5mb2AsIGBob3N0YCBhbmQgYHBvcnRgIGNvbXBvbmVudHMgYXJlIHNldCBmcm9tIHRoZQogICAqIFthdXRob3JpdHldIGFyZ3VtZW50LiBJZiBgYXV0aG9yaXR5YCBpcyBgbnVsbGAgb3IgZW1wdHksCiAgICogdGhlIGNyZWF0ZWQgYFVyaWAgaGFzIG5vIGF1dGhvcml0eSwgYW5kIGlzbid0IGRpcmVjdGx5IHVzYWJsZQogICAqIGFzIGFuIEhUVFAgVVJMLCB3aGljaCBtdXN0IGhhdmUgYSBub24tZW1wdHkgaG9zdC4KICAgKgogICAqIFRoZSBgcGF0aGAgY29tcG9uZW50IGlzIHNldCBmcm9tIHRoZSBbdW5lbmNvZGVkUGF0aF0KICAgKiBhcmd1bWVudC4gVGhlIHBhdGggcGFzc2VkIG11c3Qgbm90IGJlIGVuY29kZWQgYXMgdGhpcyBjb25zdHJ1Y3RvcgogICAqIGVuY29kZXMgdGhlIHBhdGguCiAgICoKICAgKiBUaGUgYHF1ZXJ5YCBjb21wb25lbnQgaXMgc2V0IGZyb20gdGhlIG9wdGlvbmFsIFtxdWVyeVBhcmFtZXRlcnNdCiAgICogYXJndW1lbnQuCiAgICovCiAgZmFjdG9yeSBVcmkuaHR0cChTdHJpbmcgYXV0aG9yaXR5LCBTdHJpbmcgdW5lbmNvZGVkUGF0aCwKICAgICAgW01hcDxTdHJpbmcsIFN0cmluZz4gcXVlcnlQYXJhbWV0ZXJzXSkgPSBfVXJpLmh0dHA7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgYGh0dHBzYCBVUkkgZnJvbSBhdXRob3JpdHksIHBhdGggYW5kIHF1ZXJ5LgogICAqCiAgICogVGhpcyBjb25zdHJ1Y3RvciBpcyB0aGUgc2FtZSBhcyBbVXJpLmh0dHBdIGV4Y2VwdCBmb3IgdGhlIHNjaGVtZQogICAqIHdoaWNoIGlzIHNldCB0byBgaHR0cHNgLgogICAqLwogIGZhY3RvcnkgVXJpLmh0dHBzKFN0cmluZyBhdXRob3JpdHksIFN0cmluZyB1bmVuY29kZWRQYXRoLAogICAgICBbTWFwPFN0cmluZywgU3RyaW5nPiBxdWVyeVBhcmFtZXRlcnNdKSA9IF9VcmkuaHR0cHM7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgZmlsZSBVUkkgZnJvbSBhbiBhYnNvbHV0ZSBvciByZWxhdGl2ZSBmaWxlIHBhdGguCiAgICoKICAgKiBUaGUgZmlsZSBwYXRoIGlzIHBhc3NlZCBpbiBbcGF0aF0uCiAgICoKICAgKiBUaGlzIHBhdGggaXMgaW50ZXJwcmV0ZWQgdXNpbmcgZWl0aGVyIFdpbmRvd3Mgb3Igbm9uLVdpbmRvd3MKICAgKiBzZW1hbnRpY3MuCiAgICoKICAgKiBXaXRoIG5vbi1XaW5kb3dzIHNlbWFudGljcyB0aGUgc2xhc2ggKGAvYCkgaXMgdXNlZCB0byBzZXBhcmF0ZQogICAqIHBhdGggc2VnbWVudHMgaW4gdGhlIGlucHV0IFtwYXRoXS4KICAgKgogICAqIFdpdGggV2luZG93cyBzZW1hbnRpY3MsIGJhY2tzbGFzaCAoYFxgKSBhbmQgZm9yd2FyZC1zbGFzaCAoYC9gKQogICAqIGFyZSB1c2VkIHRvIHNlcGFyYXRlIHBhdGggc2VnbWVudHMgaW4gdGhlIGlucHV0IFtwYXRoXSwKICAgKiBleGNlcHQgaWYgdGhlIHBhdGggc3RhcnRzIHdpdGggYFxcP1xgIGluIHdoaWNoIGNhc2UKICAgKiBvbmx5IGJhY2tzbGFzaCAoYFxgKSBzZXBhcmF0ZXMgcGF0aCBzZWdtZW50cyBpbiBbcGF0aF0uCiAgICoKICAgKiBJZiB0aGUgcGF0aCBzdGFydHMgd2l0aCBhIHBhdGggc2VwYXJhdG9yLCBhbiBhYnNvbHV0ZSBVUkkgKHdpdGggdGhlCiAgICogYGZpbGVgIHNjaGVtZSBhbmQgYW4gZW1wdHkgYXV0aG9yaXR5KSBpcyBjcmVhdGVkLgogICAqIE90aGVyd2lzZSBhIHJlbGF0aXZlIFVSSSByZWZlcmVuY2Ugd2l0aCBubyBzY2hlbWUgb3IgYXV0aG9yaXR5IGlzIGNyZWF0ZWQuCiAgICogT25lIGV4Y2VwdGlvbiBmcm9tIHRoaXMgcnVsZSBpcyB0aGF0IHdoZW4gV2luZG93cyBzZW1hbnRpY3MgaXMgdXNlZAogICAqIGFuZCB0aGUgcGF0aCBzdGFydHMgd2l0aCBhIGRyaXZlIGxldHRlciBmb2xsb3dlZCBieSBhIGNvbG9uICgiOiIpIGFuZCBhCiAgICogcGF0aCBzZXBhcmF0b3IsIHRoZW4gYW4gYWJzb2x1dGUgVVJJIGlzIGNyZWF0ZWQuCiAgICoKICAgKiBUaGUgZGVmYXVsdCBmb3Igd2hldGhlciB0byB1c2UgV2luZG93cyBvciBub24tV2luZG93cyBzZW1hbnRpY3MKICAgKiBkZXRlcm1pbmVkIGZyb20gdGhlIHBsYXRmb3JtIERhcnQgaXMgcnVubmluZyBvbi4gV2hlbiBydW5uaW5nIGluCiAgICogdGhlIHN0YW5kYWxvbmUgVk0sIHRoaXMgaXMgZGV0ZWN0ZWQgYnkgdGhlIFZNIGJhc2VkIG9uIHRoZQogICAqIG9wZXJhdGluZyBzeXN0ZW0uIFdoZW4gcnVubmluZyBpbiBhIGJyb3dzZXIgbm9uLVdpbmRvd3Mgc2VtYW50aWNzCiAgICogaXMgYWx3YXlzIHVzZWQuCiAgICoKICAgKiBUbyBvdmVycmlkZSB0aGUgYXV0b21hdGljIGRldGVjdGlvbiBvZiB3aGljaCBzZW1hbnRpY3MgdG8gdXNlIHBhc3MKICAgKiBhIHZhbHVlIGZvciBbd2luZG93c10uIFBhc3NpbmcgYHRydWVgIHdpbGwgdXNlIFdpbmRvd3MKICAgKiBzZW1hbnRpY3MgYW5kIHBhc3NpbmcgYGZhbHNlYCB3aWxsIHVzZSBub24tV2luZG93cyBzZW1hbnRpY3MuCiAgICoKICAgKiBFeGFtcGxlcyB1c2luZyBub24tV2luZG93cyBzZW1hbnRpY3M6CiAgICoKICAgKiBgYGAKICAgKiAvLyB4eHgveXl5CiAgICogbmV3IFVyaS5maWxlKCJ4eHgveXl5Iiwgd2luZG93czogZmFsc2UpOwogICAqCiAgICogLy8geHh4L3l5eS8KICAgKiBuZXcgVXJpLmZpbGUoInh4eC95eXkvIiwgd2luZG93czogZmFsc2UpOwogICAqCiAgICogLy8gZmlsZTovLy94eHgveXl5CiAgICogbmV3IFVyaS5maWxlKCIveHh4L3l5eSIsIHdpbmRvd3M6IGZhbHNlKTsKICAgKgogICAqIC8vIGZpbGU6Ly8veHh4L3l5eS8KICAgKiBuZXcgVXJpLmZpbGUoIi94eHgveXl5LyIsIHdpbmRvd3M6IGZhbHNlKTsKICAgKgogICAqIC8vIEMlM0EKICAgKiBuZXcgVXJpLmZpbGUoIkM6Iiwgd2luZG93czogZmFsc2UpOwogICAqIGBgYAogICAqCiAgICogRXhhbXBsZXMgdXNpbmcgV2luZG93cyBzZW1hbnRpY3M6CiAgICoKICAgKiBgYGAKICAgKiAvLyB4eHgveXl5CiAgICogbmV3IFVyaS5maWxlKHIieHh4XHl5eSIsIHdpbmRvd3M6IHRydWUpOwogICAqCiAgICogLy8geHh4L3l5eS8KICAgKiBuZXcgVXJpLmZpbGUociJ4eHhceXl5XCIsIHdpbmRvd3M6IHRydWUpOwogICAqCiAgICogZmlsZTovLy94eHgveXl5CiAgICogbmV3IFVyaS5maWxlKHIiXHh4eFx5eXkiLCB3aW5kb3dzOiB0cnVlKTsKICAgKgogICAqIGZpbGU6Ly8veHh4L3l5eS8KICAgKiBuZXcgVXJpLmZpbGUociJceHh4XHl5eS8iLCB3aW5kb3dzOiB0cnVlKTsKICAgKgogICAqIC8vIGZpbGU6Ly8vQzoveHh4L3l5eQogICAqIG5ldyBVcmkuZmlsZShyIkM6XHh4eFx5eXkiLCB3aW5kb3dzOiB0cnVlKTsKICAgKgogICAqIC8vIFRoaXMgdGhyb3dzIGFuIGVycm9yLiBBIHBhdGggd2l0aCBhIGRyaXZlIGxldHRlciwgYnV0IG5vIGZvbGxvd2luZwogICAqIC8vIHBhdGgsIGlzIG5vdCBhbGxvd2VkLgogICAqIG5ldyBVcmkuZmlsZShyIkM6Iiwgd2luZG93czogdHJ1ZSk7CiAgICoKICAgKiAvLyBUaGlzIHRocm93cyBhbiBlcnJvci4gQSBwYXRoIHdpdGggYSBkcml2ZSBsZXR0ZXIgaXMgbm90IGFic29sdXRlLgogICAqIG5ldyBVcmkuZmlsZShyIkM6eHh4XHl5eSIsIHdpbmRvd3M6IHRydWUpOwogICAqCiAgICogLy8gZmlsZTovL3NlcnZlci9zaGFyZS9maWxlCiAgICogbmV3IFVyaS5maWxlKHIiXFxzZXJ2ZXJcc2hhcmVcZmlsZSIsIHdpbmRvd3M6IHRydWUpOwogICAqIGBgYAogICAqCiAgICogSWYgdGhlIHBhdGggcGFzc2VkIGlzIG5vdCBhIHZhbGlkIGZpbGUgcGF0aCwgYW4gZXJyb3IgaXMgdGhyb3duLgogICAqLwogIGZhY3RvcnkgVXJpLmZpbGUoU3RyaW5nIHBhdGgsIHtib29sIHdpbmRvd3N9KSA9IF9VcmkuZmlsZTsKCiAgLyoqCiAgICogTGlrZSBbVXJpLmZpbGVdIGV4Y2VwdCB0aGF0IGEgbm9uLWVtcHR5IFVSSSBwYXRoIGVuZHMgaW4gYSBzbGFzaC4KICAgKgogICAqIElmIFtwYXRoXSBpcyBub3QgZW1wdHksIGFuZCBpdCBkb2Vzbid0IGVuZCBpbiBhIGRpcmVjdG9yeSBzZXBhcmF0b3IsCiAgICogdGhlbiBhIHNsYXNoIGlzIGFkZGVkIHRvIHRoZSByZXR1cm5lZCBVUkkncyBwYXRoLgogICAqIEluIGFsbCBvdGhlciBjYXNlcywgdGhlIHJlc3VsdCBpcyB0aGUgc2FtZSBhcyByZXR1cm5lZCBieSBgVXJpLmZpbGVgLgogICAqLwogIGZhY3RvcnkgVXJpLmRpcmVjdG9yeShTdHJpbmcgcGF0aCwge2Jvb2wgd2luZG93c30pID0gX1VyaS5kaXJlY3Rvcnk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBgZGF0YTpgIFVSSSBjb250YWluaW5nIHRoZSBbY29udGVudF0gc3RyaW5nLgogICAqCiAgICogQ29udmVydHMgdGhlIGNvbnRlbnQgdG8gYSBieXRlcyB1c2luZyBbZW5jb2RpbmddIG9yIHRoZSBjaGFyc2V0IHNwZWNpZmllZAogICAqIGluIFtwYXJhbWV0ZXJzXSAoZGVmYXVsdGluZyB0byBVUy1BU0NJSSBpZiBub3Qgc3BlY2lmaWVkIG9yIHVucmVjb2duaXplZCksCiAgICogdGhlbiBlbmNvZGVzIHRoZSBieXRlcyBpbnRvIHRoZSByZXN1bHRpbmcgZGF0YSBVUkkuCiAgICoKICAgKiBEZWZhdWx0cyB0byBlbmNvZGluZyB1c2luZyBwZXJjZW50LWVuY29kaW5nIChhbnkgbm9uLUFTQ0lJIG9yIG5vbi1VUkktdmFsaWQKICAgKiBieXRlcyBpcyByZXBsYWNlZCBieSBhIHBlcmNlbnQgZW5jb2RpbmcpLiBJZiBbYmFzZTY0XSBpcyB0cnVlLCB0aGUgYnl0ZXMKICAgKiBhcmUgaW5zdGVhZCBlbmNvZGVkIHVzaW5nIFtiYXNlNjRdLgogICAqCiAgICogSWYgW2VuY29kaW5nXSBpcyBub3QgcHJvdmlkZWQgYW5kIFtwYXJhbWV0ZXJzXSBoYXMgYSBgY2hhcnNldGAgZW50cnksCiAgICogdGhhdCBuYW1lIGlzIGxvb2tlZCB1cCB1c2luZyBbRW5jb2RpbmcuZ2V0QnlOYW1lXSwKICAgKiBhbmQgaWYgdGhlIGxvb2t1cCByZXR1cm5zIGFuIGVuY29kaW5nLCB0aGF0IGVuY29kaW5nIGlzIHVzZWQgdG8gY29udmVydAogICAqIFtjb250ZW50XSB0byBieXRlcy4KICAgKiBJZiBwcm92aWRpbmcgYm90aCBhbiBbZW5jb2RpbmddIGFuZCBhIGNoYXJzZXQgaW4gW3BhcmFtZXRlcnNdLCB0aGV5IHNob3VsZAogICAqIGFncmVlLCBvdGhlcndpc2UgZGVjb2Rpbmcgd29uJ3QgYmUgYWJsZSB0byB1c2UgdGhlIGNoYXJzZXQgcGFyYW1ldGVyCiAgICogdG8gZGV0ZXJtaW5lIHRoZSBlbmNvZGluZy4KICAgKgogICAqIElmIFttaW1lVHlwZV0gYW5kL29yIFtwYXJhbWV0ZXJzXSBhcmUgc3VwcGxpZWQsIHRoZXkgYXJlIGFkZGVkIHRvIHRoZQogICAqIGNyZWF0ZWQgVVJJLiBJZiBhbnkgb2YgdGhlc2UgY29udGFpbiBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBhbGxvd2VkCiAgICogaW4gdGhlIGRhdGEgVVJJLCB0aGUgY2hhcmFjdGVyIGlzIHBlcmNlbnQtZXNjYXBlZC4gSWYgdGhlIGNoYXJhY3RlciBpcwogICAqIG5vbi1BU0NJSSwgaXQgaXMgZmlyc3QgVVRGLTggZW5jb2RlZCBhbmQgdGhlbiB0aGUgYnl0ZXMgYXJlIHBlcmNlbnQKICAgKiBlbmNvZGVkLiBBbiBvbWl0dGVkIFttaW1lVHlwZV0gaW4gYSBkYXRhIFVSSSBtZWFucyBgdGV4dC9wbGFpbmAsIGp1c3QKICAgKiBhcyBhbiBvbWl0dGVkIGBjaGFyc2V0YCBwYXJhbWV0ZXIgZGVmYXVsdHMgdG8gbWVhbmluZyBgVVMtQVNDSUlgLgogICAqCiAgICogVG8gcmVhZCB0aGUgY29udGVudCBiYWNrLCB1c2UgW1VyaURhdGEuY29udGVudEFzU3RyaW5nXS4KICAgKi8KICBmYWN0b3J5IFVyaS5kYXRhRnJvbVN0cmluZyhTdHJpbmcgY29udGVudCwKICAgICAge1N0cmluZyBtaW1lVHlwZSwKICAgICAgRW5jb2RpbmcgZW5jb2RpbmcsCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1ldGVycywKICAgICAgYm9vbCBiYXNlNjQgPSBmYWxzZX0pIHsKICAgIFVyaURhdGEgZGF0YSA9IFVyaURhdGEuZnJvbVN0cmluZyhjb250ZW50LAogICAgICAgIG1pbWVUeXBlOiBtaW1lVHlwZSwKICAgICAgICBlbmNvZGluZzogZW5jb2RpbmcsCiAgICAgICAgcGFyYW1ldGVyczogcGFyYW1ldGVycywKICAgICAgICBiYXNlNjQ6IGJhc2U2NCk7CiAgICByZXR1cm4gZGF0YS51cmk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgYGRhdGE6YCBVUkkgY29udGFpbmluZyBhbiBlbmNvZGluZyBvZiBbYnl0ZXNdLgogICAqCiAgICogRGVmYXVsdHMgdG8gQmFzZTY0IGVuY29kaW5nIHRoZSBieXRlcywgYnV0IGlmIFtwZXJjZW50RW5jb2RlZF0KICAgKiBpcyBgdHJ1ZWAsIHRoZSBieXRlcyB3aWxsIGluc3RlYWQgYmUgcGVyY2VudCBlbmNvZGVkIChhbnkgbm9uLUFTQ0lJCiAgICogb3Igbm9uLXZhbGlkLUFTQ0lJLWNoYXJhY3RlciBieXRlIGlzIHJlcGxhY2VkIGJ5IGEgcGVyY2VudCBlbmNvZGluZykuCiAgICoKICAgKiBUbyByZWFkIHRoZSBieXRlcyBiYWNrLCB1c2UgW1VyaURhdGEuY29udGVudEFzQnl0ZXNdLgogICAqCiAgICogSXQgZGVmYXVsdHMgdG8gaGF2aW5nIHRoZSBtaW1lLXR5cGUgYGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbWAuCiAgICogVGhlIFttaW1lVHlwZV0gYW5kIFtwYXJhbWV0ZXJzXSBhcmUgYWRkZWQgdG8gdGhlIGNyZWF0ZWQgVVJJLgogICAqIElmIGFueSBvZiB0aGVzZSBjb250YWluIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGFsbG93ZWQKICAgKiBpbiB0aGUgZGF0YSBVUkksIHRoZSBjaGFyYWN0ZXIgaXMgcGVyY2VudC1lc2NhcGVkLiBJZiB0aGUgY2hhcmFjdGVyIGlzCiAgICogbm9uLUFTQ0lJLCBpdCBpcyBmaXJzdCBVVEYtOCBlbmNvZGVkIGFuZCB0aGVuIHRoZSBieXRlcyBhcmUgcGVyY2VudAogICAqIGVuY29kZWQuCiAgICovCiAgZmFjdG9yeSBVcmkuZGF0YUZyb21CeXRlcyhMaXN0PGludD4gYnl0ZXMsCiAgICAgIHttaW1lVHlwZSA9ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLAogICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtZXRlcnMsCiAgICAgIHBlcmNlbnRFbmNvZGVkID0gZmFsc2V9KSB7CiAgICBVcmlEYXRhIGRhdGEgPSBVcmlEYXRhLmZyb21CeXRlcyhieXRlcywKICAgICAgICBtaW1lVHlwZTogbWltZVR5cGUsCiAgICAgICAgcGFyYW1ldGVyczogcGFyYW1ldGVycywKICAgICAgICBwZXJjZW50RW5jb2RlZDogcGVyY2VudEVuY29kZWQpOwogICAgcmV0dXJuIGRhdGEudXJpOwogIH0KCiAgLyoqCiAgICogVGhlIHNjaGVtZSBjb21wb25lbnQgb2YgdGhlIFVSSS4KICAgKgogICAqIFJldHVybnMgdGhlIGVtcHR5IHN0cmluZyBpZiB0aGVyZSBpcyBubyBzY2hlbWUgY29tcG9uZW50LgogICAqCiAgICogQSBVUkkgc2NoZW1lIGlzIGNhc2UgaW5zZW5zaXRpdmUuCiAgICogVGhlIHJldHVybmVkIHNjaGVtZSBpcyBjYW5vbmljYWxpemVkIHRvIGxvd2VyY2FzZSBsZXR0ZXJzLgogICAqLwogIFN0cmluZyBnZXQgc2NoZW1lOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBhdXRob3JpdHkgY29tcG9uZW50LgogICAqCiAgICogVGhlIGF1dGhvcml0eSBpcyBmb3JtYXR0ZWQgZnJvbSB0aGUgW3VzZXJJbmZvXSwgW2hvc3RdIGFuZCBbcG9ydF0KICAgKiBwYXJ0cy4KICAgKgogICAqIFJldHVybnMgdGhlIGVtcHR5IHN0cmluZyBpZiB0aGVyZSBpcyBubyBhdXRob3JpdHkgY29tcG9uZW50LgogICAqLwogIFN0cmluZyBnZXQgYXV0aG9yaXR5OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSB1c2VyIGluZm8gcGFydCBvZiB0aGUgYXV0aG9yaXR5IGNvbXBvbmVudC4KICAgKgogICAqIFJldHVybnMgdGhlIGVtcHR5IHN0cmluZyBpZiB0aGVyZSBpcyBubyB1c2VyIGluZm8gaW4gdGhlCiAgICogYXV0aG9yaXR5IGNvbXBvbmVudC4KICAgKi8KICBTdHJpbmcgZ2V0IHVzZXJJbmZvOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBob3N0IHBhcnQgb2YgdGhlIGF1dGhvcml0eSBjb21wb25lbnQuCiAgICoKICAgKiBSZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhlcmUgaXMgbm8gYXV0aG9yaXR5IGNvbXBvbmVudCBhbmQKICAgKiBoZW5jZSBubyBob3N0LgogICAqCiAgICogSWYgdGhlIGhvc3QgaXMgYW4gSVAgdmVyc2lvbiA2IGFkZHJlc3MsIHRoZSBzdXJyb3VuZGluZyBgW2AgYW5kIGBdYCBpcwogICAqIHJlbW92ZWQuCiAgICoKICAgKiBUaGUgaG9zdCBzdHJpbmcgaXMgY2FzZS1pbnNlbnNpdGl2ZS4KICAgKiBUaGUgcmV0dXJuZWQgaG9zdCBuYW1lIGlzIGNhbm9uaWNhbGl6ZWQgdG8gbG93ZXItY2FzZQogICAqIHdpdGggdXBwZXItY2FzZSBwZXJjZW50LWVzY2FwZXMuCiAgICovCiAgU3RyaW5nIGdldCBob3N0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBwb3J0IHBhcnQgb2YgdGhlIGF1dGhvcml0eSBjb21wb25lbnQuCiAgICoKICAgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IHBvcnQgaWYgdGhlcmUgaXMgbm8gcG9ydCBudW1iZXIgaW4gdGhlIGF1dGhvcml0eQogICAqIGNvbXBvbmVudC4gVGhhdCdzIDgwIGZvciBodHRwLCA0NDMgZm9yIGh0dHBzLCBhbmQgMCBmb3IgZXZlcnl0aGluZyBlbHNlLgogICAqLwogIGludCBnZXQgcG9ydDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcGF0aCBjb21wb25lbnQuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgcGF0aCBpcyBlbmNvZGVkLiBUbyBnZXQgZGlyZWN0IGFjY2VzcyB0byB0aGUgZGVjb2RlZAogICAqIHBhdGggdXNlIFtwYXRoU2VnbWVudHNdLgogICAqCiAgICogUmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nIGlmIHRoZXJlIGlzIG5vIHBhdGggY29tcG9uZW50LgogICAqLwogIFN0cmluZyBnZXQgcGF0aDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcXVlcnkgY29tcG9uZW50LiBUaGUgcmV0dXJuZWQgcXVlcnkgaXMgZW5jb2RlZC4gVG8gZ2V0CiAgICogZGlyZWN0IGFjY2VzcyB0byB0aGUgZGVjb2RlZCBxdWVyeSB1c2UgW3F1ZXJ5UGFyYW1ldGVyc10uCiAgICoKICAgKiBSZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhlcmUgaXMgbm8gcXVlcnkgY29tcG9uZW50LgogICAqLwogIFN0cmluZyBnZXQgcXVlcnk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGZyYWdtZW50IGlkZW50aWZpZXIgY29tcG9uZW50LgogICAqCiAgICogUmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nIGlmIHRoZXJlIGlzIG5vIGZyYWdtZW50IGlkZW50aWZpZXIKICAgKiBjb21wb25lbnQuCiAgICovCiAgU3RyaW5nIGdldCBmcmFnbWVudDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgVVJJIHBhdGggc3BsaXQgaW50byBpdHMgc2VnbWVudHMuIEVhY2ggb2YgdGhlIHNlZ21lbnRzIGluIHRoZQogICAqIHJldHVybmVkIGxpc3QgaGF2ZSBiZWVuIGRlY29kZWQuIElmIHRoZSBwYXRoIGlzIGVtcHR5IHRoZSBlbXB0eSBsaXN0IHdpbGwKICAgKiBiZSByZXR1cm5lZC4gQSBsZWFkaW5nIHNsYXNoIGAvYCBkb2VzIG5vdCBhZmZlY3QgdGhlIHNlZ21lbnRzIHJldHVybmVkLgogICAqCiAgICogVGhlIHJldHVybmVkIGxpc3QgaXMgdW5tb2RpZmlhYmxlIGFuZCB3aWxsIHRocm93IFtVbnN1cHBvcnRlZEVycm9yXSBvbiBhbnkKICAgKiBjYWxscyB0aGF0IHdvdWxkIG11dGF0ZSBpdC4KICAgKi8KICBMaXN0PFN0cmluZz4gZ2V0IHBhdGhTZWdtZW50czsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgVVJJIHF1ZXJ5IHNwbGl0IGludG8gYSBtYXAgYWNjb3JkaW5nIHRvIHRoZSBydWxlcwogICAqIHNwZWNpZmllZCBmb3IgRk9STSBwb3N0IGluIHRoZSBbSFRNTCA0LjAxIHNwZWNpZmljYXRpb24gc2VjdGlvbgogICAqIDE3LjEzLjRdKGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvaW50ZXJhY3QvZm9ybXMuaHRtbCNoLTE3LjEzLjQgIkhUTUwgNC4wMSBzZWN0aW9uIDE3LjEzLjQiKS4KICAgKiBFYWNoIGtleSBhbmQgdmFsdWUgaW4gdGhlIHJldHVybmVkIG1hcCBoYXMgYmVlbiBkZWNvZGVkLgogICAqIElmIHRoZXJlIGlzIG5vIHF1ZXJ5IHRoZSBlbXB0eSBtYXAgaXMgcmV0dXJuZWQuCiAgICoKICAgKiBLZXlzIGluIHRoZSBxdWVyeSBzdHJpbmcgdGhhdCBoYXZlIG5vIHZhbHVlIGFyZSBtYXBwZWQgdG8gdGhlCiAgICogZW1wdHkgc3RyaW5nLgogICAqIElmIGEga2V5IG9jY3VycyBtb3JlIHRoYW4gb25jZSBpbiB0aGUgcXVlcnkgc3RyaW5nLCBpdCBpcyBtYXBwZWQgdG8KICAgKiBhbiBhcmJpdHJhcnkgY2hvaWNlIG9mIHBvc3NpYmxlIHZhbHVlLgogICAqIFRoZSBbcXVlcnlQYXJhbWV0ZXJzQWxsXSBnZXR0ZXIgY2FuIHByb3ZpZGUgYSBtYXAKICAgKiB0aGF0IG1hcHMga2V5cyB0byBhbGwgb2YgdGhlaXIgdmFsdWVzLgogICAqCiAgICogVGhlIHJldHVybmVkIG1hcCBpcyB1bm1vZGlmaWFibGUuCiAgICovCiAgTWFwPFN0cmluZywgU3RyaW5nPiBnZXQgcXVlcnlQYXJhbWV0ZXJzOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBVUkkgcXVlcnkgc3BsaXQgaW50byBhIG1hcCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzCiAgICogc3BlY2lmaWVkIGZvciBGT1JNIHBvc3QgaW4gdGhlIFtIVE1MIDQuMDEgc3BlY2lmaWNhdGlvbiBzZWN0aW9uCiAgICogMTcuMTMuNF0oaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9pbnRlcmFjdC9mb3Jtcy5odG1sI2gtMTcuMTMuNCAiSFRNTCA0LjAxIHNlY3Rpb24gMTcuMTMuNCIpLgogICAqIEVhY2gga2V5IGFuZCB2YWx1ZSBpbiB0aGUgcmV0dXJuZWQgbWFwIGhhcyBiZWVuIGRlY29kZWQuIElmIHRoZXJlIGlzIG5vCiAgICogcXVlcnkgdGhlIGVtcHR5IG1hcCBpcyByZXR1cm5lZC4KICAgKgogICAqIEtleXMgYXJlIG1hcHBlZCB0byBsaXN0cyBvZiB0aGVpciB2YWx1ZXMuIElmIGEga2V5IG9jY3VycyBvbmx5IG9uY2UsCiAgICogaXRzIHZhbHVlIGlzIGEgc2luZ2xldG9uIGxpc3QuIElmIGEga2V5IG9jY3VycyB3aXRoIG5vIHZhbHVlLCB0aGUKICAgKiBlbXB0eSBzdHJpbmcgaXMgdXNlZCBhcyB0aGUgdmFsdWUgZm9yIHRoYXQgb2NjdXJyZW5jZS4KICAgKgogICAqIFRoZSByZXR1cm5lZCBtYXAgYW5kIHRoZSBsaXN0cyBpdCBjb250YWlucyBhcmUgdW5tb2RpZmlhYmxlLgogICAqLwogIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gZ2V0IHF1ZXJ5UGFyYW1ldGVyc0FsbDsKCiAgLyoqCiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBVUkkgaXMgYWJzb2x1dGUuCiAgICoKICAgKiBBIFVSSSBpcyBhbiBhYnNvbHV0ZSBVUkkgaW4gdGhlIHNlbnNlIG9mIFJGQyAzOTg2IGlmIGl0IGhhcyBhIHNjaGVtZQogICAqIGFuZCBubyBmcmFnbWVudC4KICAgKi8KICBib29sIGdldCBpc0Fic29sdXRlOwoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIFVSSSBoYXMgYSBbc2NoZW1lXSBjb21wb25lbnQuCiAgICovCiAgYm9vbCBnZXQgaGFzU2NoZW1lID0+IHNjaGVtZS5pc05vdEVtcHR5OwoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIFVSSSBoYXMgYW4gW2F1dGhvcml0eV0gY29tcG9uZW50LgogICAqLwogIGJvb2wgZ2V0IGhhc0F1dGhvcml0eTsKCiAgLyoqCiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBVUkkgaGFzIGFuIGV4cGxpY2l0IHBvcnQuCiAgICoKICAgKiBJZiB0aGUgcG9ydCBudW1iZXIgaXMgdGhlIGRlZmF1bHQgcG9ydCBudW1iZXIKICAgKiAoemVybyBmb3IgdW5yZWNvZ25pemVkIHNjaGVtZXMsIHdpdGggaHR0cCAoODApIGFuZCBodHRwcyAoNDQzKSBiZWluZwogICAqIHJlY29nbml6ZWQpLAogICAqIHRoZW4gdGhlIHBvcnQgaXMgbWFkZSBpbXBsaWNpdCBhbmQgb21pdHRlZCBmcm9tIHRoZSBVUkkuCiAgICovCiAgYm9vbCBnZXQgaGFzUG9ydDsKCiAgLyoqCiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBVUkkgaGFzIGEgcXVlcnkgcGFydC4KICAgKi8KICBib29sIGdldCBoYXNRdWVyeTsKCiAgLyoqCiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBVUkkgaGFzIGEgZnJhZ21lbnQgcGFydC4KICAgKi8KICBib29sIGdldCBoYXNGcmFnbWVudDsKCiAgLyoqCiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBVUkkgaGFzIGFuIGVtcHR5IHBhdGguCiAgICovCiAgYm9vbCBnZXQgaGFzRW1wdHlQYXRoOwoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIFVSSSBoYXMgYW4gYWJzb2x1dGUgcGF0aCAoc3RhcnRpbmcgd2l0aCAnLycpLgogICAqLwogIGJvb2wgZ2V0IGhhc0Fic29sdXRlUGF0aDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgb3JpZ2luIG9mIHRoZSBVUkkgaW4gdGhlIGZvcm0gc2NoZW1lOi8vaG9zdDpwb3J0IGZvciB0aGUKICAgKiBzY2hlbWVzIGh0dHAgYW5kIGh0dHBzLgogICAqCiAgICogSXQgaXMgYW4gZXJyb3IgaWYgdGhlIHNjaGVtZSBpcyBub3QgImh0dHAiIG9yICJodHRwcyIsIG9yIGlmIHRoZSBob3N0IG5hbWUKICAgKiBpcyBtaXNzaW5nIG9yIGVtcHR5LgogICAqCiAgICogU2VlOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1dELWh0bWw1LTIwMTEwNDA1L29yaWdpbi0wLmh0bWwjb3JpZ2luCiAgICovCiAgU3RyaW5nIGdldCBvcmlnaW47CgogIC8vLyBXaGV0aGVyIHRoZSBzY2hlbWUgb2YgdGhpcyBbVXJpXSBpcyBbc2NoZW1lXS4KICAvLy8KICAvLy8gVGhlIFtzY2hlbWVdIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgb25lIHJldHVybmVkIGJ5IFtVcmkuc2NoZW1lXSwKICAvLy8gYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZSBjYXNlLW5vcm1hbGl6ZWQgdG8gbG93ZXItY2FzZSBjaGFyYWN0ZXJzLgogIC8vLwogIC8vLyBFeGFtcGxlOgogIC8vLyBgYGBkYXJ0CiAgLy8vIHZhciB1cmkgPSBVcmkucGFyc2UoImh0dHA6Ly9leGFtcGxlLmNvbS8iKTsKICAvLy8gcHJpbnQodXJpLmlzU2NoZW1lKCJIVFRQIikpOyAgLy8gUHJpbnRzIHRydWUuCiAgLy8vIGBgYAogIC8vLwogIC8vLyBBIGBudWxsYCBvciBlbXB0eSBbc2NoZW1lXSBzdHJpbmcgbWF0Y2hlcyBhIFVSSSB3aXRoIG5vIHNjaGVtZQogIC8vLyAob25lIHdoZXJlIFtoYXNTY2hlbWVdIHJldHVybnMgZmFsc2UpLgogIGJvb2wgaXNTY2hlbWUoU3RyaW5nIHNjaGVtZSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGZpbGUgcGF0aCBmcm9tIGEgZmlsZSBVUkkuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgcGF0aCBoYXMgZWl0aGVyIFdpbmRvd3Mgb3Igbm9uLVdpbmRvd3MKICAgKiBzZW1hbnRpY3MuCiAgICoKICAgKiBGb3Igbm9uLVdpbmRvd3Mgc2VtYW50aWNzIHRoZSBzbGFzaCAoIi8iKSBpcyB1c2VkIHRvIHNlcGFyYXRlCiAgICogcGF0aCBzZWdtZW50cy4KICAgKgogICAqIEZvciBXaW5kb3dzIHNlbWFudGljcyB0aGUgYmFja3NsYXNoICgiXFwiKSBzZXBhcmF0b3IgaXMgdXNlZCB0bwogICAqIHNlcGFyYXRlIHBhdGggc2VnbWVudHMuCiAgICoKICAgKiBJZiB0aGUgVVJJIGlzIGFic29sdXRlIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIGEgcGF0aCBzZXBhcmF0b3IKICAgKiB1bmxlc3MgV2luZG93cyBzZW1hbnRpY3MgaXMgdXNlZCBhbmQgdGhlIGZpcnN0IHBhdGggc2VnbWVudCBpcyBhCiAgICogZHJpdmUgbGV0dGVyLiBXaGVuIFdpbmRvd3Mgc2VtYW50aWNzIGlzIHVzZWQgYSBob3N0IGNvbXBvbmVudCBpbgogICAqIHRoZSB1cmkgaW4gaW50ZXJwcmV0ZWQgYXMgYSBmaWxlIHNlcnZlciBhbmQgYSBVTkMgcGF0aCBpcwogICAqIHJldHVybmVkLgogICAqCiAgICogVGhlIGRlZmF1bHQgZm9yIHdoZXRoZXIgdG8gdXNlIFdpbmRvd3Mgb3Igbm9uLVdpbmRvd3Mgc2VtYW50aWNzCiAgICogZGV0ZXJtaW5lZCBmcm9tIHRoZSBwbGF0Zm9ybSBEYXJ0IGlzIHJ1bm5pbmcgb24uIFdoZW4gcnVubmluZyBpbgogICAqIHRoZSBzdGFuZGFsb25lIFZNIHRoaXMgaXMgZGV0ZWN0ZWQgYnkgdGhlIFZNIGJhc2VkIG9uIHRoZQogICAqIG9wZXJhdGluZyBzeXN0ZW0uIFdoZW4gcnVubmluZyBpbiBhIGJyb3dzZXIgbm9uLVdpbmRvd3Mgc2VtYW50aWNzCiAgICogaXMgYWx3YXlzIHVzZWQuCiAgICoKICAgKiBUbyBvdmVycmlkZSB0aGUgYXV0b21hdGljIGRldGVjdGlvbiBvZiB3aGljaCBzZW1hbnRpY3MgdG8gdXNlIHBhc3MKICAgKiBhIHZhbHVlIGZvciBbd2luZG93c10uIFBhc3NpbmcgYHRydWVgIHdpbGwgdXNlIFdpbmRvd3MKICAgKiBzZW1hbnRpY3MgYW5kIHBhc3NpbmcgYGZhbHNlYCB3aWxsIHVzZSBub24tV2luZG93cyBzZW1hbnRpY3MuCiAgICoKICAgKiBJZiB0aGUgVVJJIGVuZHMgd2l0aCBhIHNsYXNoIChpLmUuIHRoZSBsYXN0IHBhdGggY29tcG9uZW50IGlzCiAgICogZW1wdHkpIHRoZSByZXR1cm5lZCBmaWxlIHBhdGggd2lsbCBhbHNvIGVuZCB3aXRoIGEgc2xhc2guCiAgICoKICAgKiBXaXRoIFdpbmRvd3Mgc2VtYW50aWNzIFVSSXMgc3RhcnRpbmcgd2l0aCBhIGRyaXZlIGxldHRlciBjYW5ub3QKICAgKiBiZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBkcml2ZSBvbiB0aGUgZGVzaWduYXRlZCBkcml2ZS4gVGhhdCBpcwogICAqIGZvciB0aGUgVVJJIGBmaWxlOi8vL2M6YWJjYCBjYWxsaW5nIGB0b0ZpbGVQYXRoYCB3aWxsIHRocm93IGFzIGEKICAgKiBwYXRoIHNlZ21lbnQgY2Fubm90IGNvbnRhaW4gY29sb24gb24gV2luZG93cy4KICAgKgogICAqIEV4YW1wbGVzIHVzaW5nIG5vbi1XaW5kb3dzIHNlbWFudGljcyAocmVzdWx0aW5nIG9mIGNhbGxpbmcKICAgKiB0b0ZpbGVQYXRoIGluIGNvbW1lbnQpOgogICAqCiAgICogICAgIFVyaS5wYXJzZSgieHh4L3l5eSIpOyAgLy8geHh4L3l5eQogICAqICAgICBVcmkucGFyc2UoInh4eC95eXkvIik7ICAvLyB4eHgveXl5LwogICAqICAgICBVcmkucGFyc2UoImZpbGU6Ly8veHh4L3l5eSIpOyAgLy8gL3h4eC95eXkKICAgKiAgICAgVXJpLnBhcnNlKCJmaWxlOi8vL3h4eC95eXkvIik7ICAvLyAveHh4L3l5eS8KICAgKiAgICAgVXJpLnBhcnNlKCJmaWxlOi8vL0M6Iik7ICAvLyAvQzoKICAgKiAgICAgVXJpLnBhcnNlKCJmaWxlOi8vL0M6YSIpOyAgLy8gL0M6YQogICAqCiAgICogRXhhbXBsZXMgdXNpbmcgV2luZG93cyBzZW1hbnRpY3MgKHJlc3VsdGluZyBVUkkgaW4gY29tbWVudCk6CiAgICoKICAgKiAgICAgVXJpLnBhcnNlKCJ4eHgveXl5Iik7ICAvLyB4eHhceXl5CiAgICogICAgIFVyaS5wYXJzZSgieHh4L3l5eS8iKTsgIC8vIHh4eFx5eXlcCiAgICogICAgIFVyaS5wYXJzZSgiZmlsZTovLy94eHgveXl5Iik7ICAvLyBceHh4XHl5eQogICAqICAgICBVcmkucGFyc2UoImZpbGU6Ly8veHh4L3l5eS8iKTsgIC8vIFx4eHhceXl5XAogICAqICAgICBVcmkucGFyc2UoImZpbGU6Ly8vQzoveHh4L3l5eSIpOyAgLy8gQzpceHh4XHl5eQogICAqICAgICBVcmkucGFyc2UoImZpbGU6Qzp4eHgveXl5Iik7ICAvLyBUaHJvd3MgYXMgYSBwYXRoIHNlZ21lbnQKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2Fubm90IGNvbnRhaW4gY29sb24gb24gV2luZG93cy4KICAgKiAgICAgVXJpLnBhcnNlKCJmaWxlOi8vc2VydmVyL3NoYXJlL2ZpbGUiKTsgIC8vIFxcc2VydmVyXHNoYXJlXGZpbGUKICAgKgogICAqIElmIHRoZSBVUkkgaXMgbm90IGEgZmlsZSBVUkkgY2FsbGluZyB0aGlzIHRocm93cwogICAqIFtVbnN1cHBvcnRlZEVycm9yXS4KICAgKgogICAqIElmIHRoZSBVUkkgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIGZpbGUgcGF0aCBjYWxsaW5nIHRoaXMgdGhyb3dzCiAgICogW1Vuc3VwcG9ydGVkRXJyb3JdLgogICAqLwogIC8vIFRPRE8obHJuKTogRGVwcmVjYXRlIGFuZCBtb3ZlIGZ1bmN0aW9uYWxpdHkgdG8gRmlsZSBjbGFzcyBvciBzaW1pbGFyLgogIC8vIFRoZSBjb3JlIGxpYnJhcmllcyBzaG91bGQgbm90IHdvcnJ5IGFib3V0IHRoZSBwbGF0Zm9ybS4KICBTdHJpbmcgdG9GaWxlUGF0aCh7Ym9vbCB3aW5kb3dzfSk7CgogIC8qKgogICAqIEFjY2VzcyB0aGUgc3RydWN0dXJlIG9mIGEgYGRhdGE6YCBVUkkuCiAgICoKICAgKiBSZXR1cm5zIGEgW1VyaURhdGFdIG9iamVjdCBmb3IgYGRhdGE6YCBVUklzIGFuZCBgbnVsbGAgZm9yIGFsbCBvdGhlcgogICAqIFVSSXMuCiAgICogVGhlIFtVcmlEYXRhXSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSBtZWRpYSB0eXBlIGFuZCBkYXRhCiAgICogb2YgYSBgZGF0YTpgIFVSSS4KICAgKi8KICBVcmlEYXRhIGdldCBkYXRhOwoKICAvLy8gUmV0dXJucyBhIGhhc2ggY29kZSBjb21wdXRlZCBhcyBgdG9TdHJpbmcoKS5oYXNoQ29kZWAuCiAgLy8vCiAgLy8vIFRoaXMgZ3VhcmFudGVlcyB0aGF0IFVSSXMgd2l0aCB0aGUgc2FtZSBub3JtYWxpemVkCiAgaW50IGdldCBoYXNoQ29kZTsKCiAgLy8vIEEgVVJJIGlzIGVxdWFsIHRvIGFub3RoZXIgVVJJIHdpdGggdGhlIHNhbWUgbm9ybWFsaXplZCByZXByZXNlbnRhdGlvbi4KICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcik7CgogIC8vLyBSZXR1cm5zIHRoZSBub3JtYWxpemVkIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgVVJJLgogIFN0cmluZyB0b1N0cmluZygpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGBVcmlgIGJhc2VkIG9uIHRoaXMgb25lLCBidXQgd2l0aCBzb21lIHBhcnRzIHJlcGxhY2VkLgogICAqCiAgICogVGhpcyBtZXRob2QgdGFrZXMgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgW25ldyBVcmldIGNvbnN0cnVjdG9yLAogICAqIGFuZCB0aGV5IGhhdmUgdGhlIHNhbWUgbWVhbmluZy4KICAgKgogICAqIEF0IG1vc3Qgb25lIG9mIFtwYXRoXSBhbmQgW3BhdGhTZWdtZW50c10gbXVzdCBiZSBwcm92aWRlZC4KICAgKiBMaWtld2lzZSwgYXQgbW9zdCBvbmUgb2YgW3F1ZXJ5XSBhbmQgW3F1ZXJ5UGFyYW1ldGVyc10gbXVzdCBiZSBwcm92aWRlZC4KICAgKgogICAqIEVhY2ggcGFydCB0aGF0IGlzIG5vdCBwcm92aWRlZCB3aWxsIGRlZmF1bHQgdG8gdGhlIGNvcnJlc3BvbmRpbmcKICAgKiB2YWx1ZSBmcm9tIHRoaXMgYFVyaWAgaW5zdGVhZC4KICAgKgogICAqIFRoaXMgbWV0aG9kIGlzIGRpZmZlcmVudCBmcm9tIFtVcmkucmVzb2x2ZV0gd2hpY2ggb3ZlcnJpZGVzIGluIGEKICAgKiBoaWVyYXJjaGljYWwgbWFubmVyLAogICAqIGFuZCBjYW4gaW5zdGVhZCByZXBsYWNlIGVhY2ggcGFydCBvZiBhIGBVcmlgIGluZGl2aWR1YWxseS4KICAgKgogICAqIEV4YW1wbGU6CiAgICoKICAgKiAgICAgVXJpIHVyaTEgPSBVcmkucGFyc2UoImE6Ly9iQGM6NC9kL2U/ZiNnIik7CiAgICogICAgIFVyaSB1cmkyID0gdXJpMS5yZXBsYWNlKHNjaGVtZTogIkEiLCBwYXRoOiAiRC9FL0UiLCBmcmFnbWVudDogIkciKTsKICAgKiAgICAgcHJpbnQodXJpMik7ICAvLyBwcmludHMgImE6Ly9iQGM6NC9EL0UvRT9mI0ciCiAgICoKICAgKiBUaGlzIG1ldGhvZCBhY3RzIHNpbWlsYXJseSB0byB1c2luZyB0aGUgYG5ldyBVcmlgIGNvbnN0cnVjdG9yIHdpdGgKICAgKiBzb21lIG9mIHRoZSBhcmd1bWVudHMgdGFrZW4gZnJvbSB0aGlzIGBVcmlgLiBFeGFtcGxlOgogICAqCiAgICogICAgIFVyaSB1cmkzID0gbmV3IFVyaSgKICAgKiAgICAgICAgIHNjaGVtZTogIkEiLAogICAqICAgICAgICAgdXNlckluZm86IHVyaTEudXNlckluZm8sCiAgICogICAgICAgICBob3N0OiB1cmkxLmhvc3QsCiAgICogICAgICAgICBwb3J0OiB1cmkxLnBvcnQsCiAgICogICAgICAgICBwYXRoOiAiRC9FL0UiLAogICAqICAgICAgICAgcXVlcnk6IHVyaTEucXVlcnksCiAgICogICAgICAgICBmcmFnbWVudDogIkciKTsKICAgKiAgICAgcHJpbnQodXJpMyk7ICAvLyBwcmludHMgImE6Ly9iQGM6NC9EL0UvRT9mI0ciCiAgICogICAgIHByaW50KHVyaTIgPT0gdXJpMyk7ICAvLyBwcmludHMgdHJ1ZS4KICAgKgogICAqIFVzaW5nIHRoaXMgbWV0aG9kIGNhbiBiZSBzZWVuIGFzIGEgc2hvcnRoYW5kIGZvciB0aGUgYFVyaWAgY29uc3RydWN0b3IKICAgKiBjYWxsIGFib3ZlLCBidXQgbWF5IGFsc28gYmUgc2xpZ2h0bHkgZmFzdGVyIGJlY2F1c2UgdGhlIHBhcnRzIHRha2VuCiAgICogZnJvbSB0aGlzIGBVcmlgIG5lZWQgbm90IGJlIGNoZWNrZWQgZm9yIHZhbGlkaXR5IGFnYWluLgogICAqLwogIFVyaSByZXBsYWNlKAogICAgICB7U3RyaW5nIHNjaGVtZSwKICAgICAgU3RyaW5nIHVzZXJJbmZvLAogICAgICBTdHJpbmcgaG9zdCwKICAgICAgaW50IHBvcnQsCiAgICAgIFN0cmluZyBwYXRoLAogICAgICBJdGVyYWJsZTxTdHJpbmc+IHBhdGhTZWdtZW50cywKICAgICAgU3RyaW5nIHF1ZXJ5LAogICAgICBNYXA8U3RyaW5nLCBkeW5hbWljIC8qU3RyaW5nfEl0ZXJhYmxlPFN0cmluZz4qLyA+IHF1ZXJ5UGFyYW1ldGVycywKICAgICAgU3RyaW5nIGZyYWdtZW50fSk7CgogIC8qKgogICAqIFJldHVybnMgYSBgVXJpYCB0aGF0IGRpZmZlcnMgZnJvbSB0aGlzIG9ubHkgaW4gbm90IGhhdmluZyBhIGZyYWdtZW50LgogICAqCiAgICogSWYgdGhpcyBgVXJpYCBkb2VzIG5vdCBoYXZlIGEgZnJhZ21lbnQsIGl0IGlzIGl0c2VsZiByZXR1cm5lZC4KICAgKi8KICBVcmkgcmVtb3ZlRnJhZ21lbnQoKTsKCiAgLyoqCiAgICogUmVzb2x2ZSBbcmVmZXJlbmNlXSBhcyBhbiBVUkkgcmVsYXRpdmUgdG8gYHRoaXNgLgogICAqCiAgICogRmlyc3QgdHVybiBbcmVmZXJlbmNlXSBpbnRvIGEgVVJJIHVzaW5nIFtVcmkucGFyc2VdLiBUaGVuIHJlc29sdmUgdGhlCiAgICogcmVzdWx0aW5nIFVSSSByZWxhdGl2ZSB0byBgdGhpc2AuCiAgICoKICAgKiBSZXR1cm5zIHRoZSByZXNvbHZlZCBVUkkuCiAgICoKICAgKiBTZWUgW3Jlc29sdmVVcmldIGZvciBkZXRhaWxzLgogICAqLwogIFVyaSByZXNvbHZlKFN0cmluZyByZWZlcmVuY2UpOwoKICAvKioKICAgKiBSZXNvbHZlIFtyZWZlcmVuY2VdIGFzIGFuIFVSSSByZWxhdGl2ZSB0byBgdGhpc2AuCiAgICoKICAgKiBSZXR1cm5zIHRoZSByZXNvbHZlZCBVUkkuCiAgICoKICAgKiBUaGUgYWxnb3JpdGhtICJUcmFuc2Zvcm0gUmVmZXJlbmNlIiBmb3IgcmVzb2x2aW5nIGEgcmVmZXJlbmNlIGlzIGRlc2NyaWJlZAogICAqIGluIFtSRkMtMzk4NiBTZWN0aW9uIDVdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi01ICJSRkMtMTEyMyIpLgogICAqCiAgICogVXBkYXRlZCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIGJhc2UgVVJJIGlzIGp1c3QgYSByZWxhdGl2ZSBwYXRoIC0KICAgKiB0aGF0IGlzOiB3aGVuIGl0IGhhcyBubyBzY2hlbWUgYW5kIG5vIGF1dGhvcml0eSBhbmQgdGhlIHBhdGggZG9lcyBub3Qgc3RhcnQKICAgKiB3aXRoIGEgc2xhc2guCiAgICogSW4gdGhhdCBjYXNlLCB0aGUgcGF0aHMgYXJlIGNvbWJpbmVkIHdpdGhvdXQgcmVtb3ZpbmcgbGVhZGluZyAiLi4iLCBhbmQKICAgKiBhbiBlbXB0eSBwYXRoIGlzIG5vdCBjb252ZXJ0ZWQgdG8gIi8iLgogICAqLwogIFVyaSByZXNvbHZlVXJpKFVyaSByZWZlcmVuY2UpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgVVJJIHdoZXJlIHRoZSBwYXRoIGhhcyBiZWVuIG5vcm1hbGl6ZWQuCiAgICoKICAgKiBBIG5vcm1hbGl6ZWQgcGF0aCBkb2VzIG5vdCBjb250YWluIGAuYCBzZWdtZW50cyBvciBub24tbGVhZGluZyBgLi5gCiAgICogc2VnbWVudHMuCiAgICogT25seSBhIHJlbGF0aXZlIHBhdGggd2l0aCBubyBzY2hlbWUgb3IgYXV0aG9yaXR5IG1heSBjb250YWluCiAgICogbGVhZGluZyBgLi5gIHNlZ21lbnRzLAogICAqIGEgcGF0aCB0aGF0IHN0YXJ0cyB3aXRoIGAvYCB3aWxsIGFsc28gZHJvcCBhbnkgbGVhZGluZyBgLi5gIHNlZ21lbnRzLgogICAqCiAgICogVGhpcyB1c2VzIHRoZSBzYW1lIG5vcm1hbGl6YXRpb24gc3RyYXRlZ3kgYXMgYG5ldyBVcmkoKS5yZXNvbHZlKHRoaXMpYC4KICAgKgogICAqIERvZXMgbm90IGNoYW5nZSBhbnkgcGFydCBvZiB0aGUgVVJJIGV4Y2VwdCB0aGUgcGF0aC4KICAgKgogICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGBVcmlgIGFsd2F5cyBub3JtYWxpemVzIHBhdGhzLCBzbyBjYWxsaW5nCiAgICogdGhpcyBmdW5jdGlvbiBoYXMgbm8gZWZmZWN0LgogICAqLwogIFVyaSBub3JtYWxpemVQYXRoKCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgYFVyaWAgb2JqZWN0IGJ5IHBhcnNpbmcgYSBVUkkgc3RyaW5nLgogICAqCiAgICogSWYgW3N0YXJ0XSBhbmQgW2VuZF0gYXJlIHByb3ZpZGVkLCB0aGV5IG11c3Qgc3BlY2lmeSBhIHZhbGlkIHN1YnN0cmluZwogICAqIG9mIFt1cmldLCBhbmQgb25seSB0aGUgc3Vic3RyaW5nIGZyb20gYHN0YXJ0YCB0byBgZW5kYCBpcyBwYXJzZWQgYXMgYSBVUkkuCiAgICoKICAgKiBUaGUgW3VyaV0gbXVzdCBub3QgYmUgYG51bGxgLgogICAqIElmIHRoZSBbdXJpXSBzdHJpbmcgaXMgbm90IHZhbGlkIGFzIGEgVVJJIG9yIFVSSSByZWZlcmVuY2UsCiAgICogYSBbRm9ybWF0RXhjZXB0aW9uXSBpcyB0aHJvd24uCiAgICovCiAgc3RhdGljIFVyaSBwYXJzZShTdHJpbmcgdXJpLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIC8vIFRoaXMgcGFyc2luZyB3aWxsIG5vdCB2YWxpZGF0ZSBwZXJjZW50LWVuY29kaW5nLCBJUHY2LCBldGMuCiAgICAvLyBXaGVuIGRvbmUgc3BsaXR0aW5nIGludG8gcGFydHMsIGl0IHdpbGwgY2FsbCwgZS5nLiwgW19tYWtlRnJhZ21lbnRdCiAgICAvLyB0byBkbyB0aGUgZmluYWwgcGFyc2luZy4KICAgIC8vCiAgICAvLyBJbXBvcnRhbnQgcGFydHMgb2YgdGhlIFJGQyAzOTg2IHVzZWQgaGVyZToKICAgIC8vIFVSSSAgICAgICAgICAgPSBzY2hlbWUgIjoiIGhpZXItcGFydCBbICI/IiBxdWVyeSBdIFsgIiMiIGZyYWdtZW50IF0KICAgIC8vCiAgICAvLyBoaWVyLXBhcnQgICAgID0gIi8vIiBhdXRob3JpdHkgcGF0aC1hYmVtcHR5CiAgICAvLyAgICAgICAgICAgICAgIC8gcGF0aC1hYnNvbHV0ZQogICAgLy8gICAgICAgICAgICAgICAvIHBhdGgtcm9vdGxlc3MKICAgIC8vICAgICAgICAgICAgICAgLyBwYXRoLWVtcHR5CiAgICAvLwogICAgLy8gVVJJLXJlZmVyZW5jZSA9IFVSSSAvIHJlbGF0aXZlLXJlZgogICAgLy8KICAgIC8vIGFic29sdXRlLVVSSSAgPSBzY2hlbWUgIjoiIGhpZXItcGFydCBbICI/IiBxdWVyeSBdCiAgICAvLwogICAgLy8gcmVsYXRpdmUtcmVmICA9IHJlbGF0aXZlLXBhcnQgWyAiPyIgcXVlcnkgXSBbICIjIiBmcmFnbWVudCBdCiAgICAvLwogICAgLy8gcmVsYXRpdmUtcGFydCA9ICIvLyIgYXV0aG9yaXR5IHBhdGgtYWJlbXB0eQogICAgLy8gICAgICAgICAgICAgICAvIHBhdGgtYWJzb2x1dGUKICAgIC8vICAgICAgICAgICAgICAgLyBwYXRoLW5vc2NoZW1lCiAgICAvLyAgICAgICAgICAgICAgIC8gcGF0aC1lbXB0eQogICAgLy8KICAgIC8vIHNjaGVtZSAgICAgICAgPSBBTFBIQSAqKCBBTFBIQSAvIERJR0lUIC8gIisiIC8gIi0iIC8gIi4iICkKICAgIC8vCiAgICAvLyBhdXRob3JpdHkgICAgID0gWyB1c2VyaW5mbyAiQCIgXSBob3N0IFsgIjoiIHBvcnQgXQogICAgLy8gdXNlcmluZm8gICAgICA9ICooIHVucmVzZXJ2ZWQgLyBwY3QtZW5jb2RlZCAvIHN1Yi1kZWxpbXMgLyAiOiIgKQogICAgLy8gaG9zdCAgICAgICAgICA9IElQLWxpdGVyYWwgLyBJUHY0YWRkcmVzcyAvIHJlZy1uYW1lCiAgICAvLyBJUC1saXRlcmFsICAgID0gIlsiICggSVB2NmFkZHJlc3MgLyBJUHY2YWRkcnogLyBJUHZGdXR1cmUgKSAiXSIKICAgIC8vIElQdjZhZGRyeiAgICAgPSBJUHY2YWRkcmVzcyAiJTI1IiBab25lSUQKICAgIC8vIFpvbmVJRCAgICAgICAgPSAxKiggdW5yZXNlcnZlZCAvIHBjdC1lbmNvZGVkICkKICAgIC8vIHBvcnQgICAgICAgICAgPSAqRElHSVQKICAgIC8vIHJlZy1uYW1lICAgICAgPSAqKCB1bnJlc2VydmVkIC8gcGN0LWVuY29kZWQgLyBzdWItZGVsaW1zICkKICAgIC8vCiAgICAvLyBwYXRoICAgICAgICAgID0gcGF0aC1hYmVtcHR5ICAgIDsgYmVnaW5zIHdpdGggIi8iIG9yIGlzIGVtcHR5CiAgICAvLyAgICAgICAgICAgICAgIC8gcGF0aC1hYnNvbHV0ZSAgIDsgYmVnaW5zIHdpdGggIi8iIGJ1dCBub3QgIi8vIgogICAgLy8gICAgICAgICAgICAgICAvIHBhdGgtbm9zY2hlbWUgICA7IGJlZ2lucyB3aXRoIGEgbm9uLWNvbG9uIHNlZ21lbnQKICAgIC8vICAgICAgICAgICAgICAgLyBwYXRoLXJvb3RsZXNzICAgOyBiZWdpbnMgd2l0aCBhIHNlZ21lbnQKICAgIC8vICAgICAgICAgICAgICAgLyBwYXRoLWVtcHR5ICAgICAgOyB6ZXJvIGNoYXJhY3RlcnMKICAgIC8vCiAgICAvLyBwYXRoLWFiZW1wdHkgID0gKiggIi8iIHNlZ21lbnQgKQogICAgLy8gcGF0aC1hYnNvbHV0ZSA9ICIvIiBbIHNlZ21lbnQtbnogKiggIi8iIHNlZ21lbnQgKSBdCiAgICAvLyBwYXRoLW5vc2NoZW1lID0gc2VnbWVudC1uei1uYyAqKCAiLyIgc2VnbWVudCApCiAgICAvLyBwYXRoLXJvb3RsZXNzID0gc2VnbWVudC1ueiAqKCAiLyIgc2VnbWVudCApCiAgICAvLyBwYXRoLWVtcHR5ICAgID0gMDxwY2hhcj4KICAgIC8vCiAgICAvLyBzZWdtZW50ICAgICAgID0gKnBjaGFyCiAgICAvLyBzZWdtZW50LW56ICAgID0gMSpwY2hhcgogICAgLy8gc2VnbWVudC1uei1uYyA9IDEqKCB1bnJlc2VydmVkIC8gcGN0LWVuY29kZWQgLyBzdWItZGVsaW1zIC8gIkAiICkKICAgIC8vICAgICAgICAgICAgICAgOyBub24temVyby1sZW5ndGggc2VnbWVudCB3aXRob3V0IGFueSBjb2xvbiAiOiIKICAgIC8vCiAgICAvLyBwY2hhciAgICAgICAgID0gdW5yZXNlcnZlZCAvIHBjdC1lbmNvZGVkIC8gc3ViLWRlbGltcyAvICI6IiAvICJAIgogICAgLy8KICAgIC8vIHF1ZXJ5ICAgICAgICAgPSAqKCBwY2hhciAvICIvIiAvICI/IiApCiAgICAvLwogICAgLy8gZnJhZ21lbnQgICAgICA9ICooIHBjaGFyIC8gIi8iIC8gIj8iICkKICAgIGVuZCA/Pz0gdXJpLmxlbmd0aDsKCiAgICAvLyBTcGVjaWFsIGNhc2UgZGF0YTpVUklzLiBJZ25vcmUgY2FzZSB3aGVuIHRlc3RpbmcuCiAgICBpZiAoZW5kID49IHN0YXJ0ICsgNSkgewogICAgICBpbnQgZGF0YURlbHRhID0gX3N0YXJ0c1dpdGhEYXRhKHVyaSwgc3RhcnQpOwogICAgICBpZiAoZGF0YURlbHRhID09IDApIHsKICAgICAgICAvLyBUaGUgY2FzZSBpcyByaWdodC4KICAgICAgICBpZiAoc3RhcnQgPiAwIHx8IGVuZCA8IHVyaS5sZW5ndGgpIHVyaSA9IHVyaS5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7CiAgICAgICAgcmV0dXJuIFVyaURhdGEuX3BhcnNlKHVyaSwgNSwgbnVsbCkudXJpOwogICAgICB9IGVsc2UgaWYgKGRhdGFEZWx0YSA9PSAweDIwKSB7CiAgICAgICAgcmV0dXJuIFVyaURhdGEuX3BhcnNlKHVyaS5zdWJzdHJpbmcoc3RhcnQgKyA1LCBlbmQpLCAwLCBudWxsKS51cmk7CiAgICAgIH0KICAgICAgLy8gT3RoZXJ3aXNlIHRoZSBVUkkgZG9lc24ndCBzdGFydCB3aXRoICJkYXRhOiIgb3IgYW55IGNhc2UgdmFyaWFudCBvZiBpdC4KICAgIH0KCiAgICAvLyBUaGUgZm9sbG93aW5nIGluZGV4LW5vcm1hbGl6YXRpb24gYmVsb25ncyB3aXRoIHRoZSBzY2FubmluZywgYnV0IGlzCiAgICAvLyBlYXNpZXIgdG8gZG8gaGVyZSBiZWNhdXNlIHdlIGFscmVhZHkgaGF2ZSBleHRyYWN0ZWQgdmFyaWFibGVzIGZyb20gdGhlCiAgICAvLyBpbmRpY2VzIGxpc3QuCiAgICB2YXIgaW5kaWNlcyA9IExpc3Q8aW50Pig4KTsKCiAgICAvLyBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGVhY2ggcG9zaXRpb24uCiAgICAvLyBUaGUgdmFsdWUgd2lsbCBlaXRoZXIgYmUgY29ycmVjdCBpbiBzb21lIGNhc2VzIHdoZXJlIGl0IGlzbid0IHNldAogICAgLy8gYnkgdGhlIHNjYW5uZXIsIG9yIGl0IGlzIGNsZWFybHkgcmVjb2duaXphYmxlIGFzIGFuIHVuc2V0IHZhbHVlLgogICAgaW5kaWNlcwogICAgICAuLlswXSA9IDAKICAgICAgLi5bX3NjaGVtZUVuZEluZGV4XSA9IHN0YXJ0IC0gMQogICAgICAuLltfaG9zdFN0YXJ0SW5kZXhdID0gc3RhcnQgLSAxCiAgICAgIC4uW19ub3RTaW1wbGVJbmRleF0gPSBzdGFydCAtIDEKICAgICAgLi5bX3BvcnRTdGFydEluZGV4XSA9IHN0YXJ0CiAgICAgIC4uW19wYXRoU3RhcnRJbmRleF0gPSBzdGFydAogICAgICAuLltfcXVlcnlTdGFydEluZGV4XSA9IGVuZAogICAgICAuLltfZnJhZ21lbnRTdGFydEluZGV4XSA9IGVuZDsKICAgIHZhciBzdGF0ZSA9IF9zY2FuKHVyaSwgc3RhcnQsIGVuZCwgX3VyaVN0YXJ0LCBpbmRpY2VzKTsKICAgIC8vIFNvbWUgc3RhdGVzIHRoYXQgc2hvdWxkIGJlIG5vbi1zaW1wbGUsIGJ1dCB0aGUgVVJJIGVuZGVkIGVhcmx5LgogICAgLy8gUGF0aHMgdGhhdCBlbmQgYXQgYSAiLi4iIG11c3QgYmUgbm9ybWFsaXplZCB0byBlbmQgaW4gIi4uLyIuCiAgICBpZiAoc3RhdGUgPj0gX25vblNpbXBsZUVuZFN0YXRlcykgewogICAgICBpbmRpY2VzW19ub3RTaW1wbGVJbmRleF0gPSBlbmQ7CiAgICB9CiAgICBpbnQgc2NoZW1lRW5kID0gaW5kaWNlc1tfc2NoZW1lRW5kSW5kZXhdOwogICAgaWYgKHNjaGVtZUVuZCA+PSBzdGFydCkgewogICAgICAvLyBSZXNjYW4gdGhlIHNjaGVtZSBwYXJ0IG5vdyB0aGF0IHdlIGtub3cgaXQncyBub3QgYSBwYXRoLgogICAgICBzdGF0ZSA9IF9zY2FuKHVyaSwgc3RhcnQsIHNjaGVtZUVuZCwgX3NjaGVtZVN0YXJ0LCBpbmRpY2VzKTsKICAgICAgaWYgKHN0YXRlID09IF9zY2hlbWVTdGFydCkgewogICAgICAgIC8vIEVtcHR5IHNjaGVtZS4KICAgICAgICBpbmRpY2VzW19ub3RTaW1wbGVJbmRleF0gPSBzY2hlbWVFbmQ7CiAgICAgIH0KICAgIH0KICAgIC8vIFRoZSByZXR1cm5lZCBwb3NpdGlvbnMgYXJlIGxpbWl0ZWQgYnkgdGhlIHNjYW5uZXJzIGFiaWxpdHkgdG8gd3JpdGUgb25seQogICAgLy8gb25lIHBvc2l0aW9uIHBlciBjaGFyYWN0ZXIsIGFuZCBvbmx5IHRoZSBjdXJyZW50IHBvc2l0aW9uLgogICAgLy8gU2Nhbm5pbmcgZnJvbSBsZWZ0IHRvIHJpZ2h0LCB3ZSBvbmx5IGtub3cgd2hldGhlciBzb21ldGhpbmcgaXMgYSBzY2hlbWUKICAgIC8vIG9yIGEgcGF0aCB3aGVuIHdlIHNlZSBhIGA6YCBvciBgL2AsIGFuZCBsaWtld2lzZSB3ZSBvbmx5IGtub3cgaWYgdGhlIGZpcnN0CiAgICAvLyBgL2AgaXMgcGFydCBvZiB0aGUgcGF0aCBvciBpcyBsZWFkaW5nIGFuIGF1dGhvcml0eSBjb21wb25lbnQgd2hlbiB3ZSBzZWUKICAgIC8vIHRoZSBuZXh0IGNoYXJhY3Rlci4KCiAgICBpbnQgaG9zdFN0YXJ0ID0gaW5kaWNlc1tfaG9zdFN0YXJ0SW5kZXhdICsgMTsKICAgIGludCBwb3J0U3RhcnQgPSBpbmRpY2VzW19wb3J0U3RhcnRJbmRleF07CiAgICBpbnQgcGF0aFN0YXJ0ID0gaW5kaWNlc1tfcGF0aFN0YXJ0SW5kZXhdOwogICAgaW50IHF1ZXJ5U3RhcnQgPSBpbmRpY2VzW19xdWVyeVN0YXJ0SW5kZXhdOwogICAgaW50IGZyYWdtZW50U3RhcnQgPSBpbmRpY2VzW19mcmFnbWVudFN0YXJ0SW5kZXhdOwoKICAgIC8vIFdlIG1heSBkaXNjb3ZlciBzY2hlbWUgd2hpbGUgaGFuZGxpbmcgc3BlY2lhbCBjYXNlcy4KICAgIFN0cmluZyBzY2hlbWU7CgogICAgLy8gRGVyaXZlIHNvbWUgcG9zaXRpb25zIHRoYXQgd2VyZW4ndCBzZXQgdG8gbm9ybWFsaXplIHRoZSBpbmRpY2VzLgogICAgaWYgKGZyYWdtZW50U3RhcnQgPCBxdWVyeVN0YXJ0KSBxdWVyeVN0YXJ0ID0gZnJhZ21lbnRTdGFydDsKICAgIC8vIElmIHBhdGhTdGFydCBpc24ndCBzZXQgKGl0J3MgYmVmb3JlIHNjaGVtZSBlbmQgb3IgaG9zdCBzdGFydCksIHRoZW4KICAgIC8vIHRoZSBwYXRoIGlzIGVtcHR5LCBvciB0aGVyZSBpcyBubyBhdXRob3JpdHkgcGFydCBhbmQgdGhlIHBhdGgKICAgIC8vIHN0YXJ0cyB3aXRoIGEgbm9uLXNpbXBsZSBjaGFyYWN0ZXIuCiAgICBpZiAocGF0aFN0YXJ0IDwgaG9zdFN0YXJ0KSB7CiAgICAgIC8vIFRoZXJlIGlzIGFuIGF1dGhvcml0eSwgYnV0IG5vIHBhdGguIFRoZSBwYXRoIHdvdWxkIHN0YXJ0IHdpdGggYC9gCiAgICAgIC8vIGlmIGl0IHdhcyB0aGVyZS4KICAgICAgcGF0aFN0YXJ0ID0gcXVlcnlTdGFydDsKICAgIH0gZWxzZSBpZiAocGF0aFN0YXJ0IDw9IHNjaGVtZUVuZCkgewogICAgICAvLyBUaGVyZSBpcyBhIHNjaGVtZSwgYnV0IG5vIGF1dGhvcml0eS4KICAgICAgcGF0aFN0YXJ0ID0gc2NoZW1lRW5kICsgMTsKICAgIH0KICAgIC8vIElmIHRoZXJlIGlzIGFuIGF1dGhvcml0eSB3aXRoIG5vIHBvcnQsIHNldCB0aGUgcG9ydCBwb3NpdGlvbgogICAgLy8gdG8gYmUgYXQgdGhlIGVuZCBvZiB0aGUgYXV0aG9yaXR5IChlcXVhbCB0byBwYXRoU3RhcnQpLgogICAgLy8gVGhpcyBhbHNvIGhhbmRsZXMgYSAiOiIgaW4gYSB1c2VyLWluZm8gY29tcG9uZW50IGluY29ycmVjdGx5IHNldHRpbmcKICAgIC8vIHRoZSBwb3J0IHN0YXJ0IHBvc2l0aW9uLgogICAgaWYgKHBvcnRTdGFydCA8IGhvc3RTdGFydCkgcG9ydFN0YXJ0ID0gcGF0aFN0YXJ0OwoKICAgIGFzc2VydChob3N0U3RhcnQgPT0gc3RhcnQgfHwgc2NoZW1lRW5kIDw9IGhvc3RTdGFydCk7CiAgICBhc3NlcnQoaG9zdFN0YXJ0IDw9IHBvcnRTdGFydCk7CiAgICBhc3NlcnQoc2NoZW1lRW5kIDw9IHBhdGhTdGFydCk7CiAgICBhc3NlcnQocG9ydFN0YXJ0IDw9IHBhdGhTdGFydCk7CiAgICBhc3NlcnQocGF0aFN0YXJ0IDw9IHF1ZXJ5U3RhcnQpOwogICAgYXNzZXJ0KHF1ZXJ5U3RhcnQgPD0gZnJhZ21lbnRTdGFydCk7CgogICAgYm9vbCBpc1NpbXBsZSA9IGluZGljZXNbX25vdFNpbXBsZUluZGV4XSA8IHN0YXJ0OwoKICAgIGlmIChpc1NpbXBsZSkgewogICAgICAvLyBDaGVjay9kbyBub3JtYWxpemF0aW9ucyB0aGF0IHdlcmVuJ3QgZGV0ZWN0ZWQgYnkgdGhlIHNjYW5uZXIuCiAgICAgIC8vIFRoaXMgaW5jbHVkZXMgcmVtb3ZhbCBvZiBlbXB0eSBwb3J0IG9yIHVzZXJJbmZvLAogICAgICAvLyBvciBzY2hlbWUgc3BlY2lmaWMgcG9ydCBhbmQgcGF0aCBub3JtYWxpemF0aW9ucy4KICAgICAgaWYgKGhvc3RTdGFydCA+IHNjaGVtZUVuZCArIDMpIHsKICAgICAgICAvLyBBbHdheXMgYmUgbm9uLXNpbXBsZSBpZiBVUkkgY29udGFpbnMgdXNlci1pbmZvLgogICAgICAgIC8vIFRoZSBzY2FubmVyIGRvZXNuJ3Qgc2V0IHRoZSBub3Qtc2ltcGxlIHBvc2l0aW9uIGluIHRoaXMgY2FzZSBiZWNhdXNlCiAgICAgICAgLy8gaXQncyBzZXR0aW5nIHRoZSBob3N0LXN0YXJ0IHBvc2l0aW9uIGluc3RlYWQuCiAgICAgICAgaXNTaW1wbGUgPSBmYWxzZTsKICAgICAgfSBlbHNlIGlmIChwb3J0U3RhcnQgPiBzdGFydCAmJiBwb3J0U3RhcnQgKyAxID09IHBhdGhTdGFydCkgewogICAgICAgIC8vIElmIHRoZSBwb3J0IGlzIGVtcHR5LCBpdCBzaG91bGQgYmUgb21pdHRlZC4KICAgICAgICAvLyBQYXRob2xvZ2ljYWwgY2FzZSwgZG9uJ3QgYm90aGVyIGNvcnJlY3RpbmcgaXQuCiAgICAgICAgaXNTaW1wbGUgPSBmYWxzZTsKICAgICAgfSBlbHNlIGlmIChxdWVyeVN0YXJ0IDwgZW5kICYmCiAgICAgICAgICAgICAgKHF1ZXJ5U3RhcnQgPT0gcGF0aFN0YXJ0ICsgMiAmJgogICAgICAgICAgICAgICAgICB1cmkuc3RhcnRzV2l0aCgiLi4iLCBwYXRoU3RhcnQpKSB8fAogICAgICAgICAgKHF1ZXJ5U3RhcnQgPiBwYXRoU3RhcnQgKyAyICYmCiAgICAgICAgICAgICAgdXJpLnN0YXJ0c1dpdGgoIi8uLiIsIHF1ZXJ5U3RhcnQgLSAzKSkpIHsKICAgICAgICAvLyBUaGUgcGF0aCBlbmRzIGluIGEgIi4uIiBzZWdtZW50LiBUaGlzIHNob3VsZCBiZSBub3JtYWxpemVkIHRvICIuLi8iLgogICAgICAgIC8vIFdlIGRpZG4ndCBkZXRlY3QgdGhpcyB3aGlsZSBzY2FubmluZyBiZWNhdXNlIGEgcXVlcnkgb3IgZnJhZ21lbnQgd2FzCiAgICAgICAgLy8gZGV0ZWN0ZWQgYXQgdGhlIHNhbWUgdGltZSAod2hpY2ggaXMgd2h5IHdlIG9ubHkgbmVlZCB0byBjaGVjayB0aGlzCiAgICAgICAgLy8gaWYgdGhlcmUgaXMgc29tZXRoaW5nIGFmdGVyIHRoZSBwYXRoKS4KICAgICAgICBpc1NpbXBsZSA9IGZhbHNlOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRoZXJlIGFyZSBhIGZldyBzY2hlbWUtYmFzZWQgbm9ybWFsaXphdGlvbnMgdGhhdAogICAgICAgIC8vIHRoZSBzY2FubmVyIGNvdWxkbid0IGNoZWNrLgogICAgICAgIC8vIFRoYXQgbWVhbnMgdGhhdCB0aGUgaW5wdXQgaXMgdmVyeSBjbG9zZSB0byBzaW1wbGUsIHNvIGp1c3QgZG8KICAgICAgICAvLyB0aGUgbm9ybWFsaXphdGlvbnMuCiAgICAgICAgaWYgKHNjaGVtZUVuZCA9PSBzdGFydCArIDQpIHsKICAgICAgICAgIC8vIERvIHNjaGVtZSBiYXNlZCBub3JtYWxpemF0aW9ucyBmb3IgZmlsZSwgaHR0cC4KICAgICAgICAgIGlmICh1cmkuc3RhcnRzV2l0aCgiZmlsZSIsIHN0YXJ0KSkgewogICAgICAgICAgICBzY2hlbWUgPSAiZmlsZSI7CiAgICAgICAgICAgIGlmIChob3N0U3RhcnQgPD0gc3RhcnQpIHsKICAgICAgICAgICAgICAvLyBGaWxlIFVSSXMgc2hvdWxkIGhhdmUgYW4gYXV0aG9yaXR5LgogICAgICAgICAgICAgIC8vIFBhdGhzIGFmdGVyIGFuIGF1dGhvcml0eSBzaG91bGQgYmUgYWJzb2x1dGUuCiAgICAgICAgICAgICAgU3RyaW5nIHNjaGVtZUF1dGggPSAiZmlsZTovLyI7CiAgICAgICAgICAgICAgaW50IGRlbHRhID0gMjsKICAgICAgICAgICAgICBpZiAoIXVyaS5zdGFydHNXaXRoKCIvIiwgcGF0aFN0YXJ0KSkgewogICAgICAgICAgICAgICAgc2NoZW1lQXV0aCA9ICJmaWxlOi8vLyI7CiAgICAgICAgICAgICAgICBkZWx0YSA9IDM7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHVyaSA9IHNjaGVtZUF1dGggKyB1cmkuc3Vic3RyaW5nKHBhdGhTdGFydCwgZW5kKTsKICAgICAgICAgICAgICBzY2hlbWVFbmQgLT0gc3RhcnQ7CiAgICAgICAgICAgICAgaG9zdFN0YXJ0ID0gNzsKICAgICAgICAgICAgICBwb3J0U3RhcnQgPSA3OwogICAgICAgICAgICAgIHBhdGhTdGFydCA9IDc7CiAgICAgICAgICAgICAgcXVlcnlTdGFydCArPSBkZWx0YSAtIHN0YXJ0OwogICAgICAgICAgICAgIGZyYWdtZW50U3RhcnQgKz0gZGVsdGEgLSBzdGFydDsKICAgICAgICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgICAgICAgZW5kID0gdXJpLmxlbmd0aDsKICAgICAgICAgICAgfSBlbHNlIGlmIChwYXRoU3RhcnQgPT0gcXVlcnlTdGFydCkgewogICAgICAgICAgICAgIC8vIFVyaSBoYXMgYXV0aG9yaXR5IGFuZCBlbXB0eSBwYXRoLiBBZGQgIi8iIGFzIHBhdGguCiAgICAgICAgICAgICAgaWYgKHN0YXJ0ID09IDAgJiYgZW5kID09IHVyaS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHVyaSA9IHVyaS5yZXBsYWNlUmFuZ2UocGF0aFN0YXJ0LCBxdWVyeVN0YXJ0LCAiLyIpOwogICAgICAgICAgICAgICAgcXVlcnlTdGFydCArPSAxOwogICAgICAgICAgICAgICAgZnJhZ21lbnRTdGFydCArPSAxOwogICAgICAgICAgICAgICAgZW5kICs9IDE7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHVyaSA9ICIke3VyaS5zdWJzdHJpbmcoc3RhcnQsIHBhdGhTdGFydCl9LyIKICAgICAgICAgICAgICAgICAgICAiJHt1cmkuc3Vic3RyaW5nKHF1ZXJ5U3RhcnQsIGVuZCl9IjsKICAgICAgICAgICAgICAgIHNjaGVtZUVuZCAtPSBzdGFydDsKICAgICAgICAgICAgICAgIGhvc3RTdGFydCAtPSBzdGFydDsKICAgICAgICAgICAgICAgIHBvcnRTdGFydCAtPSBzdGFydDsKICAgICAgICAgICAgICAgIHBhdGhTdGFydCAtPSBzdGFydDsKICAgICAgICAgICAgICAgIHF1ZXJ5U3RhcnQgKz0gMSAtIHN0YXJ0OwogICAgICAgICAgICAgICAgZnJhZ21lbnRTdGFydCArPSAxIC0gc3RhcnQ7CiAgICAgICAgICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgICAgICAgICBlbmQgPSB1cmkubGVuZ3RoOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmICh1cmkuc3RhcnRzV2l0aCgiaHR0cCIsIHN0YXJ0KSkgewogICAgICAgICAgICBzY2hlbWUgPSAiaHR0cCI7CiAgICAgICAgICAgIC8vIEhUVFAgVVJJcyBzaG91bGQgbm90IGhhdmUgYW4gZXhwbGljaXQgcG9ydCBvZiA4MC4KICAgICAgICAgICAgaWYgKHBvcnRTdGFydCA+IHN0YXJ0ICYmCiAgICAgICAgICAgICAgICBwb3J0U3RhcnQgKyAzID09IHBhdGhTdGFydCAmJgogICAgICAgICAgICAgICAgdXJpLnN0YXJ0c1dpdGgoIjgwIiwgcG9ydFN0YXJ0ICsgMSkpIHsKICAgICAgICAgICAgICBpZiAoc3RhcnQgPT0gMCAmJiBlbmQgPT0gdXJpLmxlbmd0aCkgewogICAgICAgICAgICAgICAgdXJpID0gdXJpLnJlcGxhY2VSYW5nZShwb3J0U3RhcnQsIHBhdGhTdGFydCwgIiIpOwogICAgICAgICAgICAgICAgcGF0aFN0YXJ0IC09IDM7CiAgICAgICAgICAgICAgICBxdWVyeVN0YXJ0IC09IDM7CiAgICAgICAgICAgICAgICBmcmFnbWVudFN0YXJ0IC09IDM7CiAgICAgICAgICAgICAgICBlbmQgLT0gMzsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdXJpID0gdXJpLnN1YnN0cmluZyhzdGFydCwgcG9ydFN0YXJ0KSArCiAgICAgICAgICAgICAgICAgICAgdXJpLnN1YnN0cmluZyhwYXRoU3RhcnQsIGVuZCk7CiAgICAgICAgICAgICAgICBzY2hlbWVFbmQgLT0gc3RhcnQ7CiAgICAgICAgICAgICAgICBob3N0U3RhcnQgLT0gc3RhcnQ7CiAgICAgICAgICAgICAgICBwb3J0U3RhcnQgLT0gc3RhcnQ7CiAgICAgICAgICAgICAgICBwYXRoU3RhcnQgLT0gMyArIHN0YXJ0OwogICAgICAgICAgICAgICAgcXVlcnlTdGFydCAtPSAzICsgc3RhcnQ7CiAgICAgICAgICAgICAgICBmcmFnbWVudFN0YXJ0IC09IDMgKyBzdGFydDsKICAgICAgICAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICAgICAgICAgIGVuZCA9IHVyaS5sZW5ndGg7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWVFbmQgPT0gc3RhcnQgKyA1ICYmIHVyaS5zdGFydHNXaXRoKCJodHRwcyIsIHN0YXJ0KSkgewogICAgICAgICAgc2NoZW1lID0gImh0dHBzIjsKICAgICAgICAgIC8vIEhUVFBTIFVSSXMgc2hvdWxkIG5vdCBoYXZlIGFuIGV4cGxpY2l0IHBvcnQgb2YgNDQzLgogICAgICAgICAgaWYgKHBvcnRTdGFydCA+IHN0YXJ0ICYmCiAgICAgICAgICAgICAgcG9ydFN0YXJ0ICsgNCA9PSBwYXRoU3RhcnQgJiYKICAgICAgICAgICAgICB1cmkuc3RhcnRzV2l0aCgiNDQzIiwgcG9ydFN0YXJ0ICsgMSkpIHsKICAgICAgICAgICAgaWYgKHN0YXJ0ID09IDAgJiYgZW5kID09IHVyaS5sZW5ndGgpIHsKICAgICAgICAgICAgICB1cmkgPSB1cmkucmVwbGFjZVJhbmdlKHBvcnRTdGFydCwgcGF0aFN0YXJ0LCAiIik7CiAgICAgICAgICAgICAgcGF0aFN0YXJ0IC09IDQ7CiAgICAgICAgICAgICAgcXVlcnlTdGFydCAtPSA0OwogICAgICAgICAgICAgIGZyYWdtZW50U3RhcnQgLT0gNDsKICAgICAgICAgICAgICBlbmQgLT0gMzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB1cmkgPSB1cmkuc3Vic3RyaW5nKHN0YXJ0LCBwb3J0U3RhcnQpICsKICAgICAgICAgICAgICAgICAgdXJpLnN1YnN0cmluZyhwYXRoU3RhcnQsIGVuZCk7CiAgICAgICAgICAgICAgc2NoZW1lRW5kIC09IHN0YXJ0OwogICAgICAgICAgICAgIGhvc3RTdGFydCAtPSBzdGFydDsKICAgICAgICAgICAgICBwb3J0U3RhcnQgLT0gc3RhcnQ7CiAgICAgICAgICAgICAgcGF0aFN0YXJ0IC09IDQgKyBzdGFydDsKICAgICAgICAgICAgICBxdWVyeVN0YXJ0IC09IDQgKyBzdGFydDsKICAgICAgICAgICAgICBmcmFnbWVudFN0YXJ0IC09IDQgKyBzdGFydDsKICAgICAgICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgICAgICAgZW5kID0gdXJpLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGlmIChpc1NpbXBsZSkgewogICAgICBpZiAoc3RhcnQgPiAwIHx8IGVuZCA8IHVyaS5sZW5ndGgpIHsKICAgICAgICB1cmkgPSB1cmkuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpOwogICAgICAgIHNjaGVtZUVuZCAtPSBzdGFydDsKICAgICAgICBob3N0U3RhcnQgLT0gc3RhcnQ7CiAgICAgICAgcG9ydFN0YXJ0IC09IHN0YXJ0OwogICAgICAgIHBhdGhTdGFydCAtPSBzdGFydDsKICAgICAgICBxdWVyeVN0YXJ0IC09IHN0YXJ0OwogICAgICAgIGZyYWdtZW50U3RhcnQgLT0gc3RhcnQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9TaW1wbGVVcmkodXJpLCBzY2hlbWVFbmQsIGhvc3RTdGFydCwgcG9ydFN0YXJ0LCBwYXRoU3RhcnQsCiAgICAgICAgICBxdWVyeVN0YXJ0LCBmcmFnbWVudFN0YXJ0LCBzY2hlbWUpOwogICAgfQoKICAgIHJldHVybiBfVXJpLm5vdFNpbXBsZSh1cmksIHN0YXJ0LCBlbmQsIHNjaGVtZUVuZCwgaG9zdFN0YXJ0LCBwb3J0U3RhcnQsCiAgICAgICAgcGF0aFN0YXJ0LCBxdWVyeVN0YXJ0LCBmcmFnbWVudFN0YXJ0LCBzY2hlbWUpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBgVXJpYCBvYmplY3QgYnkgcGFyc2luZyBhIFVSSSBzdHJpbmcuCiAgICoKICAgKiBJZiBbc3RhcnRdIGFuZCBbZW5kXSBhcmUgcHJvdmlkZWQsIHRoZXkgbXVzdCBzcGVjaWZ5IGEgdmFsaWQgc3Vic3RyaW5nCiAgICogb2YgW3VyaV0sIGFuZCBvbmx5IHRoZSBzdWJzdHJpbmcgZnJvbSBgc3RhcnRgIHRvIGBlbmRgIGlzIHBhcnNlZCBhcyBhIFVSSS4KICAgKiBUaGUgW3VyaV0gbXVzdCBub3QgYmUgYG51bGxgLgogICAqCiAgICogUmV0dXJucyBgbnVsbGAgaWYgdGhlIFt1cmldIHN0cmluZyBpcyBub3QgdmFsaWQgYXMgYSBVUkkgb3IgVVJJIHJlZmVyZW5jZS4KICAgKi8KICBzdGF0aWMgVXJpIHRyeVBhcnNlKFN0cmluZyB1cmksIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgLy8gVE9ETzogT3B0aW1pemUgdG8gYXZvaWQgdGhyb3dpbmctYW5kLXJlY2F0Y2hpbmcuCiAgICB0cnkgewogICAgICByZXR1cm4gcGFyc2UodXJpLCBzdGFydCwgZW5kKTsKICAgIH0gb24gRm9ybWF0RXhjZXB0aW9uIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICAvKioKICAgKiBFbmNvZGUgdGhlIHN0cmluZyBbY29tcG9uZW50XSB1c2luZyBwZXJjZW50LWVuY29kaW5nIHRvIG1ha2UgaXQKICAgKiBzYWZlIGZvciBsaXRlcmFsIHVzZSBhcyBhIFVSSSBjb21wb25lbnQuCiAgICoKICAgKiBBbGwgY2hhcmFjdGVycyBleGNlcHQgdXBwZXJjYXNlIGFuZCBsb3dlcmNhc2UgbGV0dGVycywgZGlnaXRzIGFuZAogICAqIHRoZSBjaGFyYWN0ZXJzIGAtXy4hfionKClgIGFyZSBwZXJjZW50LWVuY29kZWQuIFRoaXMgaXMgdGhlCiAgICogc2V0IG9mIGNoYXJhY3RlcnMgc3BlY2lmaWVkIGluIFJGQyAyMzk2IGFuZCB0aGUgd2hpY2ggaXMKICAgKiBzcGVjaWZpZWQgZm9yIHRoZSBlbmNvZGVVcmlDb21wb25lbnQgaW4gRUNNQS0yNjIgdmVyc2lvbiA1LjEuCiAgICoKICAgKiBXaGVuIG1hbnVhbGx5IGVuY29kaW5nIHBhdGggc2VnbWVudHMgb3IgcXVlcnkgY29tcG9uZW50cyByZW1lbWJlcgogICAqIHRvIGVuY29kZSBlYWNoIHBhcnQgc2VwYXJhdGVseSBiZWZvcmUgYnVpbGRpbmcgdGhlIHBhdGggb3IgcXVlcnkKICAgKiBzdHJpbmcuCiAgICoKICAgKiBGb3IgZW5jb2RpbmcgdGhlIHF1ZXJ5IHBhcnQgY29uc2lkZXIgdXNpbmcKICAgKiBbZW5jb2RlUXVlcnlDb21wb25lbnRdLgogICAqCiAgICogVG8gYXZvaWQgdGhlIG5lZWQgZm9yIGV4cGxpY2l0bHkgZW5jb2RpbmcgdXNlIHRoZSBbcGF0aFNlZ21lbnRzXQogICAqIGFuZCBbcXVlcnlQYXJhbWV0ZXJzXSBvcHRpb25hbCBuYW1lZCBhcmd1bWVudHMgd2hlbiBjb25zdHJ1Y3RpbmcKICAgKiBhIFtVcmldLgogICAqLwogIHN0YXRpYyBTdHJpbmcgZW5jb2RlQ29tcG9uZW50KFN0cmluZyBjb21wb25lbnQpIHsKICAgIHJldHVybiBfVXJpLl91cmlFbmNvZGUoX1VyaS5fdW5yZXNlcnZlZDIzOTZUYWJsZSwgY29tcG9uZW50LCB1dGY4LCBmYWxzZSk7CiAgfQoKICAvKioKICAgKiBFbmNvZGUgdGhlIHN0cmluZyBbY29tcG9uZW50XSBhY2NvcmRpbmcgdG8gdGhlIEhUTUwgNC4wMSBydWxlcwogICAqIGZvciBlbmNvZGluZyB0aGUgcG9zdGluZyBvZiBhIEhUTUwgZm9ybSBhcyBhIHF1ZXJ5IHN0cmluZwogICAqIGNvbXBvbmVudC4KICAgKgogICAqIEVuY29kZSB0aGUgc3RyaW5nIFtjb21wb25lbnRdIGFjY29yZGluZyB0byB0aGUgSFRNTCA0LjAxIHJ1bGVzCiAgICogZm9yIGVuY29kaW5nIHRoZSBwb3N0aW5nIG9mIGEgSFRNTCBmb3JtIGFzIGEgcXVlcnkgc3RyaW5nCiAgICogY29tcG9uZW50LgoKICAgKiBUaGUgY29tcG9uZW50IGlzIGZpcnN0IGVuY29kZWQgdG8gYnl0ZXMgdXNpbmcgW2VuY29kaW5nXS4KICAgKiBUaGUgZGVmYXVsdCBpcyB0byB1c2UgW3V0ZjhdIGVuY29kaW5nLCB3aGljaCBwcmVzZXJ2ZXMgYWxsCiAgICogdGhlIGNoYXJhY3RlcnMgdGhhdCBkb24ndCBuZWVkIGVuY29kaW5nLgoKICAgKiBUaGVuIHRoZSByZXN1bHRpbmcgYnl0ZXMgYXJlICJwZXJjZW50LWVuY29kZWQiLiBUaGlzIHRyYW5zZm9ybXMKICAgKiBzcGFjZXMgKFUrMDAyMCkgdG8gYSBwbHVzIHNpZ24gKCcrJykgYW5kIGFsbCBieXRlcyB0aGF0IGFyZSBub3QKICAgKiB0aGUgQVNDSUkgZGVjaW1hbCBkaWdpdHMsIGxldHRlcnMgb3Igb25lIG9mICctLl9+JyBhcmUgd3JpdHRlbiBhcwogICAqIGEgcGVyY2VudCBzaWduICclJyBmb2xsb3dlZCBieSB0aGUgdHdvLWRpZ2l0IGhleGFkZWNpbWFsCiAgICogcmVwcmVzZW50YXRpb24gb2YgdGhlIGJ5dGUuCgogICAqIE5vdGUgdGhhdCB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgd2hpY2ggYXJlIHBlcmNlbnQtZW5jb2RlZCBpcyBhCiAgICogc3VwZXJzZXQgb2Ygd2hhdCBIVE1MIDQuMDEgcmVxdWlyZXMsIHNpbmNlIGl0IHJlZmVycyB0byBSRkMgMTczOAogICAqIGZvciByZXNlcnZlZCBjaGFyYWN0ZXJzLgogICAqCiAgICogV2hlbiBtYW51YWxseSBlbmNvZGluZyBxdWVyeSBjb21wb25lbnRzIHJlbWVtYmVyIHRvIGVuY29kZSBlYWNoCiAgICogcGFydCBzZXBhcmF0ZWx5IGJlZm9yZSBidWlsZGluZyB0aGUgcXVlcnkgc3RyaW5nLgogICAqCiAgICogVG8gYXZvaWQgdGhlIG5lZWQgZm9yIGV4cGxpY2l0bHkgZW5jb2RpbmcgdGhlIHF1ZXJ5IHVzZSB0aGUKICAgKiBbcXVlcnlQYXJhbWV0ZXJzXSBvcHRpb25hbCBuYW1lZCBhcmd1bWVudHMgd2hlbiBjb25zdHJ1Y3RpbmcgYQogICAqIFtVcmldLgogICAqCiAgICogU2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MDEvaW50ZXJhY3QvZm9ybXMuaHRtbCNoLTE3LjEzLjQuMiBmb3IgbW9yZQogICAqIGRldGFpbHMuCiAgICovCiAgc3RhdGljIFN0cmluZyBlbmNvZGVRdWVyeUNvbXBvbmVudChTdHJpbmcgY29tcG9uZW50LAogICAgICB7RW5jb2RpbmcgZW5jb2RpbmcgPSB1dGY4fSkgewogICAgcmV0dXJuIF9VcmkuX3VyaUVuY29kZShfVXJpLl91bnJlc2VydmVkVGFibGUsIGNvbXBvbmVudCwgZW5jb2RpbmcsIHRydWUpOwogIH0KCiAgLyoqCiAgICogRGVjb2RlcyB0aGUgcGVyY2VudC1lbmNvZGluZyBpbiBbZW5jb2RlZENvbXBvbmVudF0uCiAgICoKICAgKiBOb3RlIHRoYXQgZGVjb2RpbmcgYSBVUkkgY29tcG9uZW50IG1pZ2h0IGNoYW5nZSBpdHMgbWVhbmluZyBhcwogICAqIHNvbWUgb2YgdGhlIGRlY29kZWQgY2hhcmFjdGVycyBjb3VsZCBiZSBjaGFyYWN0ZXJzIHdpdGggYXJlCiAgICogZGVsaW1pdGVycyBmb3IgYSBnaXZlbiBVUkkgY29tcG9uZW50IHR5cGUuIEFsd2F5cyBzcGxpdCBhIFVSSQogICAqIGNvbXBvbmVudCB1c2luZyB0aGUgZGVsaW1pdGVycyBmb3IgdGhlIGNvbXBvbmVudCBiZWZvcmUgZGVjb2RpbmcKICAgKiB0aGUgaW5kaXZpZHVhbCBwYXJ0cy4KICAgKgogICAqIEZvciBoYW5kbGluZyB0aGUgW3BhdGhdIGFuZCBbcXVlcnldIGNvbXBvbmVudHMgY29uc2lkZXIgdXNpbmcKICAgKiBbcGF0aFNlZ21lbnRzXSBhbmQgW3F1ZXJ5UGFyYW1ldGVyc10gdG8gZ2V0IHRoZSBzZXBhcmF0ZWQgYW5kCiAgICogZGVjb2RlZCBjb21wb25lbnQuCiAgICovCiAgc3RhdGljIFN0cmluZyBkZWNvZGVDb21wb25lbnQoU3RyaW5nIGVuY29kZWRDb21wb25lbnQpIHsKICAgIHJldHVybiBfVXJpLl91cmlEZWNvZGUoCiAgICAgICAgZW5jb2RlZENvbXBvbmVudCwgMCwgZW5jb2RlZENvbXBvbmVudC5sZW5ndGgsIHV0ZjgsIGZhbHNlKTsKICB9CgogIC8qKgogICAqIERlY29kZXMgdGhlIHBlcmNlbnQtZW5jb2RpbmcgaW4gW2VuY29kZWRDb21wb25lbnRdLCBjb252ZXJ0aW5nCiAgICogcGx1c2VzIHRvIHNwYWNlcy4KICAgKgogICAqIEl0IHdpbGwgY3JlYXRlIGEgYnl0ZS1saXN0IG9mIHRoZSBkZWNvZGVkIGNoYXJhY3RlcnMsIGFuZCB0aGVuIHVzZQogICAqIFtlbmNvZGluZ10gdG8gZGVjb2RlIHRoZSBieXRlLWxpc3QgdG8gYSBTdHJpbmcuIFRoZSBkZWZhdWx0IGVuY29kaW5nIGlzCiAgICogVVRGLTguCiAgICovCiAgc3RhdGljIFN0cmluZyBkZWNvZGVRdWVyeUNvbXBvbmVudChTdHJpbmcgZW5jb2RlZENvbXBvbmVudCwKICAgICAge0VuY29kaW5nIGVuY29kaW5nID0gdXRmOH0pIHsKICAgIHJldHVybiBfVXJpLl91cmlEZWNvZGUoCiAgICAgICAgZW5jb2RlZENvbXBvbmVudCwgMCwgZW5jb2RlZENvbXBvbmVudC5sZW5ndGgsIGVuY29kaW5nLCB0cnVlKTsKICB9CgogIC8qKgogICAqIEVuY29kZSB0aGUgc3RyaW5nIFt1cmldIHVzaW5nIHBlcmNlbnQtZW5jb2RpbmcgdG8gbWFrZSBpdAogICAqIHNhZmUgZm9yIGxpdGVyYWwgdXNlIGFzIGEgZnVsbCBVUkkuCiAgICoKICAgKiBBbGwgY2hhcmFjdGVycyBleGNlcHQgdXBwZXJjYXNlIGFuZCBsb3dlcmNhc2UgbGV0dGVycywgZGlnaXRzIGFuZAogICAqIHRoZSBjaGFyYWN0ZXJzIGAhIyQmJygpKissLS4vOjs9P0BffmAgYXJlIHBlcmNlbnQtZW5jb2RlZC4gVGhpcwogICAqIGlzIHRoZSBzZXQgb2YgY2hhcmFjdGVycyBzcGVjaWZpZWQgaW4gaW4gRUNNQS0yNjIgdmVyc2lvbiA1LjEgZm9yCiAgICogdGhlIGVuY29kZVVSSSBmdW5jdGlvbiAuCiAgICovCiAgc3RhdGljIFN0cmluZyBlbmNvZGVGdWxsKFN0cmluZyB1cmkpIHsKICAgIHJldHVybiBfVXJpLl91cmlFbmNvZGUoX1VyaS5fZW5jb2RlRnVsbFRhYmxlLCB1cmksIHV0ZjgsIGZhbHNlKTsKICB9CgogIC8qKgogICAqIERlY29kZXMgdGhlIHBlcmNlbnQtZW5jb2RpbmcgaW4gW3VyaV0uCiAgICoKICAgKiBOb3RlIHRoYXQgZGVjb2RpbmcgYSBmdWxsIFVSSSBtaWdodCBjaGFuZ2UgaXRzIG1lYW5pbmcgYXMgc29tZSBvZgogICAqIHRoZSBkZWNvZGVkIGNoYXJhY3RlcnMgY291bGQgYmUgcmVzZXJ2ZWQgY2hhcmFjdGVycy4gSW4gbW9zdAogICAqIGNhc2VzIGFuIGVuY29kZWQgVVJJIHNob3VsZCBiZSBwYXJzZWQgaW50byBjb21wb25lbnRzIHVzaW5nCiAgICogW1VyaS5wYXJzZV0gYmVmb3JlIGRlY29kaW5nIHRoZSBzZXBhcmF0ZSBjb21wb25lbnRzLgogICAqLwogIHN0YXRpYyBTdHJpbmcgZGVjb2RlRnVsbChTdHJpbmcgdXJpKSB7CiAgICByZXR1cm4gX1VyaS5fdXJpRGVjb2RlKHVyaSwgMCwgdXJpLmxlbmd0aCwgdXRmOCwgZmFsc2UpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgW3F1ZXJ5XSBzcGxpdCBpbnRvIGEgbWFwIGFjY29yZGluZyB0byB0aGUgcnVsZXMKICAgKiBzcGVjaWZpZWQgZm9yIEZPUk0gcG9zdCBpbiB0aGUgW0hUTUwgNC4wMSBzcGVjaWZpY2F0aW9uIHNlY3Rpb24KICAgKiAxNy4xMy40XShodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2ludGVyYWN0L2Zvcm1zLmh0bWwjaC0xNy4xMy40ICJIVE1MIDQuMDEgc2VjdGlvbiAxNy4xMy40IikuCiAgICogRWFjaCBrZXkgYW5kIHZhbHVlIGluIHRoZSByZXR1cm5lZCBtYXAgaGFzIGJlZW4gZGVjb2RlZC4gSWYgdGhlIFtxdWVyeV0KICAgKiBpcyB0aGUgZW1wdHkgc3RyaW5nIGFuIGVtcHR5IG1hcCBpcyByZXR1cm5lZC4KICAgKgogICAqIEtleXMgaW4gdGhlIHF1ZXJ5IHN0cmluZyB0aGF0IGhhdmUgbm8gdmFsdWUgYXJlIG1hcHBlZCB0byB0aGUKICAgKiBlbXB0eSBzdHJpbmcuCiAgICoKICAgKiBFYWNoIHF1ZXJ5IGNvbXBvbmVudCB3aWxsIGJlIGRlY29kZWQgdXNpbmcgW2VuY29kaW5nXS4gVGhlIGRlZmF1bHQgZW5jb2RpbmcKICAgKiBpcyBVVEYtOC4KICAgKi8KICBzdGF0aWMgTWFwPFN0cmluZywgU3RyaW5nPiBzcGxpdFF1ZXJ5U3RyaW5nKFN0cmluZyBxdWVyeSwKICAgICAge0VuY29kaW5nIGVuY29kaW5nID0gdXRmOH0pIHsKICAgIHJldHVybiBxdWVyeS5zcGxpdCgiJiIpLmZvbGQoe30sIChtYXAsIGVsZW1lbnQpIHsKICAgICAgaW50IGluZGV4ID0gZWxlbWVudC5pbmRleE9mKCI9Iik7CiAgICAgIGlmIChpbmRleCA9PSAtMSkgewogICAgICAgIGlmIChlbGVtZW50ICE9ICIiKSB7CiAgICAgICAgICBtYXBbZGVjb2RlUXVlcnlDb21wb25lbnQoZWxlbWVudCwgZW5jb2Rpbmc6IGVuY29kaW5nKV0gPSAiIjsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoaW5kZXggIT0gMCkgewogICAgICAgIHZhciBrZXkgPSBlbGVtZW50LnN1YnN0cmluZygwLCBpbmRleCk7CiAgICAgICAgdmFyIHZhbHVlID0gZWxlbWVudC5zdWJzdHJpbmcoaW5kZXggKyAxKTsKICAgICAgICBtYXBbZGVjb2RlUXVlcnlDb21wb25lbnQoa2V5LCBlbmNvZGluZzogZW5jb2RpbmcpXSA9CiAgICAgICAgICAgIGRlY29kZVF1ZXJ5Q29tcG9uZW50KHZhbHVlLCBlbmNvZGluZzogZW5jb2RpbmcpOwogICAgICB9CiAgICAgIHJldHVybiBtYXA7CiAgICB9KTsKICB9CgogIC8qKgogICAqIFBhcnNlIHRoZSBbaG9zdF0gYXMgYW4gSVAgdmVyc2lvbiA0IChJUHY0KSBhZGRyZXNzLCByZXR1cm5pbmcgdGhlIGFkZHJlc3MKICAgKiBhcyBhIGxpc3Qgb2YgNCBieXRlcyBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgKGJpZyBlbmRpYW4pLgogICAqCiAgICogVGhyb3dzIGEgW0Zvcm1hdEV4Y2VwdGlvbl0gaWYgW2hvc3RdIGlzIG5vdCBhIHZhbGlkIElQdjQgYWRkcmVzcwogICAqIHJlcHJlc2VudGF0aW9uLgogICAqLwogIHN0YXRpYyBMaXN0PGludD4gcGFyc2VJUHY0QWRkcmVzcyhTdHJpbmcgaG9zdCkgPT4KICAgICAgX3BhcnNlSVB2NEFkZHJlc3MoaG9zdCwgMCwgaG9zdC5sZW5ndGgpOwoKICAvLy8gSW1wbGVtZW50YXRpb24gb2YgW3BhcnNlSVB2NEFkZHJlc3NdIHRoYXQgY2FuIHdvcmsgb24gYSBzdWJzdHJpbmcuCiAgc3RhdGljIExpc3Q8aW50PiBfcGFyc2VJUHY0QWRkcmVzcyhTdHJpbmcgaG9zdCwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICB2b2lkIGVycm9yKFN0cmluZyBtc2csIGludCBwb3NpdGlvbikgewogICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oJ0lsbGVnYWwgSVB2NCBhZGRyZXNzLCAkbXNnJywgaG9zdCwgcG9zaXRpb24pOwogICAgfQoKICAgIHZhciByZXN1bHQgPSBVaW50OExpc3QoNCk7CiAgICBpbnQgcGFydEluZGV4ID0gMDsKICAgIGludCBwYXJ0U3RhcnQgPSBzdGFydDsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIGludCBjaGFyID0gaG9zdC5jb2RlVW5pdEF0KGkpOwogICAgICBpZiAoY2hhciAhPSBfRE9UKSB7CiAgICAgICAgaWYgKGNoYXIgXiAweDMwID4gOSkgewogICAgICAgICAgLy8gRmFpbCBvbiBhIG5vbi1kaWdpdCBjaGFyYWN0ZXIuCiAgICAgICAgICBlcnJvcigiaW52YWxpZCBjaGFyYWN0ZXIiLCBpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHBhcnRJbmRleCA9PSAzKSB7CiAgICAgICAgICBlcnJvcignSVB2NCBhZGRyZXNzIHNob3VsZCBjb250YWluIGV4YWN0bHkgNCBwYXJ0cycsIGkpOwogICAgICAgIH0KICAgICAgICBpbnQgcGFydCA9IGludC5wYXJzZShob3N0LnN1YnN0cmluZyhwYXJ0U3RhcnQsIGkpKTsKICAgICAgICBpZiAocGFydCA+IDI1NSkgewogICAgICAgICAgZXJyb3IoImVhY2ggcGFydCBtdXN0IGJlIGluIHRoZSByYW5nZSAwLi4yNTUiLCBwYXJ0U3RhcnQpOwogICAgICAgIH0KICAgICAgICByZXN1bHRbcGFydEluZGV4KytdID0gcGFydDsKICAgICAgICBwYXJ0U3RhcnQgPSBpICsgMTsKICAgICAgfQogICAgfQoKICAgIGlmIChwYXJ0SW5kZXggIT0gMykgewogICAgICBlcnJvcignSVB2NCBhZGRyZXNzIHNob3VsZCBjb250YWluIGV4YWN0bHkgNCBwYXJ0cycsIGVuZCk7CiAgICB9CgogICAgaW50IHBhcnQgPSBpbnQucGFyc2UoaG9zdC5zdWJzdHJpbmcocGFydFN0YXJ0LCBlbmQpKTsKICAgIGlmIChwYXJ0ID4gMjU1KSB7CiAgICAgIGVycm9yKCJlYWNoIHBhcnQgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgMC4uMjU1IiwgcGFydFN0YXJ0KTsKICAgIH0KICAgIHJlc3VsdFtwYXJ0SW5kZXhdID0gcGFydDsKCiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogUGFyc2UgdGhlIFtob3N0XSBhcyBhbiBJUCB2ZXJzaW9uIDYgKElQdjYpIGFkZHJlc3MsIHJldHVybmluZyB0aGUgYWRkcmVzcwogICAqIGFzIGEgbGlzdCBvZiAxNiBieXRlcyBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgKGJpZyBlbmRpYW4pLgogICAqCiAgICogVGhyb3dzIGEgW0Zvcm1hdEV4Y2VwdGlvbl0gaWYgW2hvc3RdIGlzIG5vdCBhIHZhbGlkIElQdjYgYWRkcmVzcwogICAqIHJlcHJlc2VudGF0aW9uLgogICAqCiAgICogQWN0cyBvbiB0aGUgc3Vic3RyaW5nIGZyb20gW3N0YXJ0XSB0byBbZW5kXS4gSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQKICAgKiBkZWZhdWx0cyBvdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCiAgICoKICAgKiBTb21lIGV4YW1wbGVzIG9mIElQdjYgYWRkcmVzc2VzOgogICAqICAqIGA6OjFgCiAgICogICogYEZFREM6QkE5ODo3NjU0OjMyMTA6RkVEQzpCQTk4Ojc2NTQ6MzIxMGAKICAgKiAgKiBgM2ZmZToyYTAwOjEwMDo3MDMxOjoxYAogICAqICAqIGA6OkZGRkY6MTI5LjE0NC41Mi4zOGAKICAgKiAgKiBgMjAxMDo4MzZCOjQxNzk6OjgzNkI6NDE3OWAKICAgKi8KICBzdGF0aWMgTGlzdDxpbnQ+IHBhcnNlSVB2NkFkZHJlc3MoU3RyaW5nIGhvc3QsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgZW5kID8/PSBob3N0Lmxlbmd0aDsKICAgIC8vIEFuIElQdjYgYWRkcmVzcyBjb25zaXN0cyBvZiBleGFjdGx5IDggcGFydHMgb2YgMS00IGhleCBkaWdpdHMsIHNlcGFyYXRlZAogICAgLy8gYnkgYDpgJ3MsIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgogICAgLy8KICAgIC8vICAtIE9uZSAoYW5kIG9ubHkgb25lKSB3aWxkY2FyZCAoYDo6YCkgbWF5IGJlIHByZXNlbnQsIHJlcHJlc2VudGluZyBhIGZpbGwKICAgIC8vICAgIG9mIDAncy4gVGhlIElQdjYgYDo6YCBpcyB0aHVzIDE2IGJ5dGVzIG9mIGAwYC4KICAgIC8vICAtIFRoZSBsYXN0IHR3byBwYXJ0cyBtYXkgYmUgcmVwbGFjZWQgYnkgYW4gSVB2NCAiZG90dGVkLXF1YWQiIGFkZHJlc3MuCgogICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciByZXBvcnRpbmcgYSBiYWRseSBmb3JtYXR0ZWQgSVB2NiBhZGRyZXNzLgogICAgdm9pZCBlcnJvcihTdHJpbmcgbXNnLCBbcG9zaXRpb25dKSB7CiAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbignSWxsZWdhbCBJUHY2IGFkZHJlc3MsICRtc2cnLCBob3N0LCBwb3NpdGlvbik7CiAgICB9CgogICAgLy8gUGFyc2UgYSBoZXggYmxvY2suCiAgICBpbnQgcGFyc2VIZXgoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICAgIGlmIChlbmQgLSBzdGFydCA+IDQpIHsKICAgICAgICBlcnJvcignYW4gSVB2NiBwYXJ0IGNhbiBvbmx5IGNvbnRhaW4gYSBtYXhpbXVtIG9mIDQgaGV4IGRpZ2l0cycsIHN0YXJ0KTsKICAgICAgfQogICAgICBpbnQgdmFsdWUgPSBpbnQucGFyc2UoaG9zdC5zdWJzdHJpbmcoc3RhcnQsIGVuZCksIHJhZGl4OiAxNik7CiAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiAweEZGRkYpIHsKICAgICAgICBlcnJvcignZWFjaCBwYXJ0IG11c3QgYmUgaW4gdGhlIHJhbmdlIG9mIGAweDAuLjB4RkZGRmAnLCBzdGFydCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQoKICAgIGlmIChob3N0Lmxlbmd0aCA8IDIpIGVycm9yKCdhZGRyZXNzIGlzIHRvbyBzaG9ydCcpOwogICAgTGlzdDxpbnQ+IHBhcnRzID0gW107CiAgICBib29sIHdpbGRjYXJkU2VlbiA9IGZhbHNlOwogICAgLy8gU2V0IGlmIHNlZWluZyBhICIuIiwgc3VnZ2VzdGluZyB0aGF0IHRoZXJlIGlzIGFuIElQdjQgYWRkcmVzcy4KICAgIGJvb2wgc2VlbkRvdCA9IGZhbHNlOwogICAgaW50IHBhcnRTdGFydCA9IHN0YXJ0OwogICAgLy8gUGFyc2UgYWxsIHBhcnRzLCBleGNlcHQgYSBwb3RlbnRpYWwgbGFzdCBvbmUuCiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICBpbnQgY2hhciA9IGhvc3QuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNoYXIgPT0gX0NPTE9OKSB7CiAgICAgICAgaWYgKGkgPT0gc3RhcnQpIHsKICAgICAgICAgIC8vIElmIHdlIHNlZSBhIGA6YCBpbiB0aGUgYmVnaW5uaW5nLCBleHBlY3Qgd2lsZGNhcmQuCiAgICAgICAgICBpKys7CiAgICAgICAgICBpZiAoaG9zdC5jb2RlVW5pdEF0KGkpICE9IF9DT0xPTikgewogICAgICAgICAgICBlcnJvcignaW52YWxpZCBzdGFydCBjb2xvbi4nLCBpKTsKICAgICAgICAgIH0KICAgICAgICAgIHBhcnRTdGFydCA9IGk7CiAgICAgICAgfQogICAgICAgIGlmIChpID09IHBhcnRTdGFydCkgewogICAgICAgICAgLy8gV2lsZGNhcmQuIFdlIG9ubHkgYWxsb3cgb25lLgogICAgICAgICAgaWYgKHdpbGRjYXJkU2VlbikgewogICAgICAgICAgICBlcnJvcignb25seSBvbmUgd2lsZGNhcmQgYDo6YCBpcyBhbGxvd2VkJywgaSk7CiAgICAgICAgICB9CiAgICAgICAgICB3aWxkY2FyZFNlZW4gPSB0cnVlOwogICAgICAgICAgcGFydHMuYWRkKC0xKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gRm91bmQgYSBzaW5nbGUgY29sb24uIFBhcnNlIFtwYXJ0U3RhcnQuLmldIGFzIGEgaGV4IGVudHJ5LgogICAgICAgICAgcGFydHMuYWRkKHBhcnNlSGV4KHBhcnRTdGFydCwgaSkpOwogICAgICAgIH0KICAgICAgICBwYXJ0U3RhcnQgPSBpICsgMTsKICAgICAgfSBlbHNlIGlmIChjaGFyID09IF9ET1QpIHsKICAgICAgICBzZWVuRG90ID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKHBhcnRzLmxlbmd0aCA9PSAwKSBlcnJvcigndG9vIGZldyBwYXJ0cycpOwogICAgYm9vbCBhdEVuZCA9IChwYXJ0U3RhcnQgPT0gZW5kKTsKICAgIGJvb2wgaXNMYXN0V2lsZGNhcmQgPSAocGFydHMubGFzdCA9PSAtMSk7CiAgICBpZiAoYXRFbmQgJiYgIWlzTGFzdFdpbGRjYXJkKSB7CiAgICAgIGVycm9yKCdleHBlY3RlZCBhIHBhcnQgYWZ0ZXIgbGFzdCBgOmAnLCBlbmQpOwogICAgfQogICAgaWYgKCFhdEVuZCkgewogICAgICBpZiAoIXNlZW5Eb3QpIHsKICAgICAgICBwYXJ0cy5hZGQocGFyc2VIZXgocGFydFN0YXJ0LCBlbmQpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBMaXN0PGludD4gbGFzdCA9IF9wYXJzZUlQdjRBZGRyZXNzKGhvc3QsIHBhcnRTdGFydCwgZW5kKTsKICAgICAgICBwYXJ0cy5hZGQobGFzdFswXSA8PCA4IHwgbGFzdFsxXSk7CiAgICAgICAgcGFydHMuYWRkKGxhc3RbMl0gPDwgOCB8IGxhc3RbM10pOwogICAgICB9CiAgICB9CiAgICBpZiAod2lsZGNhcmRTZWVuKSB7CiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiA3KSB7CiAgICAgICAgZXJyb3IoJ2FuIGFkZHJlc3Mgd2l0aCBhIHdpbGRjYXJkIG11c3QgaGF2ZSBsZXNzIHRoYW4gNyBwYXJ0cycpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHBhcnRzLmxlbmd0aCAhPSA4KSB7CiAgICAgIGVycm9yKCdhbiBhZGRyZXNzIHdpdGhvdXQgYSB3aWxkY2FyZCBtdXN0IGNvbnRhaW4gZXhhY3RseSA4IHBhcnRzJyk7CiAgICB9CiAgICBMaXN0PGludD4gYnl0ZXMgPSBVaW50OExpc3QoMTYpOwogICAgZm9yIChpbnQgaSA9IDAsIGluZGV4ID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGludCB2YWx1ZSA9IHBhcnRzW2ldOwogICAgICBpZiAodmFsdWUgPT0gLTEpIHsKICAgICAgICBpbnQgd2lsZENhcmRMZW5ndGggPSA5IC0gcGFydHMubGVuZ3RoOwogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgd2lsZENhcmRMZW5ndGg7IGorKykgewogICAgICAgICAgYnl0ZXNbaW5kZXhdID0gMDsKICAgICAgICAgIGJ5dGVzW2luZGV4ICsgMV0gPSAwOwogICAgICAgICAgaW5kZXggKz0gMjsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYnl0ZXNbaW5kZXhdID0gdmFsdWUgPj4gODsKICAgICAgICBieXRlc1tpbmRleCArIDFdID0gdmFsdWUgJiAweGZmOwogICAgICAgIGluZGV4ICs9IDI7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBieXRlczsKICB9Cn0KCmNsYXNzIF9VcmkgaW1wbGVtZW50cyBVcmkgewogIC8vIFdlIHJlcHJlc2VudCB0aGUgbWlzc2luZyBzY2hlbWUgYXMgYW4gZW1wdHkgc3RyaW5nLgogIC8vIEEgdmFsaWQgc2NoZW1lIGNhbm5vdCBiZSBlbXB0eS4KICBmaW5hbCBTdHJpbmcgc2NoZW1lOwoKICAvKioKICAgKiBUaGUgdXNlci1pbmZvIHBhcnQgb2YgdGhlIGF1dGhvcml0eS4KICAgKgogICAqIERvZXMgbm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gYW4gZW1wdHkgdXNlci1pbmZvIGFuZCBhbiBhYnNlbnQgb25lLgogICAqIFRoZSB2YWx1ZSBpcyBhbHdheXMgbm9uLW51bGwuCiAgICogSXMgY29uc2lkZXJlZCBhYnNlbnQgaWYgW19ob3N0XSBpcyBgbnVsbGAuCiAgICovCiAgZmluYWwgU3RyaW5nIF91c2VySW5mbzsKCiAgLyoqCiAgICogVGhlIGhvc3QgbmFtZSBvZiB0aGUgVVJJLgogICAqCiAgICogU2V0IHRvIGBudWxsYCBpZiB0aGVyZSBpcyBubyBhdXRob3JpdHkgaW4gdGhlIFVSSS4KICAgKiBUaGUgaG9zdCBuYW1lIGlzIHRoZSBvbmx5IG1hbmRhdG9yeSBwYXJ0IG9mIGFuIGF1dGhvcml0eSwgc28gd2UgdXNlCiAgICogaXQgdG8gbWFyayB3aGV0aGVyIGFuIGF1dGhvcml0eSBwYXJ0IHdhcyBwcmVzZW50IG9yIG5vdC4KICAgKi8KICBmaW5hbCBTdHJpbmcgX2hvc3Q7CgogIC8qKgogICAqIFRoZSBwb3J0IG51bWJlciBwYXJ0IG9mIHRoZSBhdXRob3JpdHkuCiAgICoKICAgKiBUaGUgcG9ydC4gU2V0IHRvIG51bGwgaWYgdGhlcmUgaXMgbm8gcG9ydC4gTm9ybWFsaXplZCB0byBudWxsIGlmCiAgICogdGhlIHBvcnQgaXMgdGhlIGRlZmF1bHQgcG9ydCBmb3IgdGhlIHNjaGVtZS4KICAgKi8KICBpbnQgX3BvcnQ7CgogIC8qKgogICAqIFRoZSBwYXRoIG9mIHRoZSBVUkkuCiAgICoKICAgKiBBbHdheXMgbm9uLW51bGwuCiAgICovCiAgZmluYWwgU3RyaW5nIHBhdGg7CgogIC8vIFRoZSBxdWVyeSBjb250ZW50LCBvciBudWxsIGlmIHRoZXJlIGlzIG5vIHF1ZXJ5LgogIGZpbmFsIFN0cmluZyBfcXVlcnk7CgogIC8vIFRoZSBmcmFnbWVudCBjb250ZW50LCBvciBudWxsIGlmIHRoZXJlIGlzIG5vIGZyYWdtZW50LgogIGZpbmFsIFN0cmluZyBfZnJhZ21lbnQ7CgogIC8qKgogICAqIENhY2hlIHRoZSBjb21wdXRlZCByZXR1cm4gdmFsdWUgb2YgW3BhdGhTZWdtZW50c10uCiAgICovCiAgTGlzdDxTdHJpbmc+IF9wYXRoU2VnbWVudHM7CgogIC8qKgogICAqIENhY2hlIG9mIHRoZSBmdWxsIG5vcm1hbGl6ZWQgdGV4dCByZXByZXNlbnRhdGlvbiBvZiB0aGUgVVJJLgogICAqLwogIFN0cmluZyBfdGV4dDsKCiAgLyoqCiAgICogQ2FjaGUgb2YgdGhlIGhhc2hDb2RlIG9mIFtfdGV4dF0uCiAgICoKICAgKiBJcyBudWxsIHVudGlsIGNvbXB1dGVkLgogICAqLwogIGludCBfaGFzaENvZGVDYWNoZTsKCiAgLyoqCiAgICogQ2FjaGUgdGhlIGNvbXB1dGVkIHJldHVybiB2YWx1ZSBvZiBbcXVlcnlQYXJhbWV0ZXJzXS4KICAgKi8KICBNYXA8U3RyaW5nLCBTdHJpbmc+IF9xdWVyeVBhcmFtZXRlcnM7CiAgTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBfcXVlcnlQYXJhbWV0ZXJMaXN0czsKCiAgLy8vIEludGVybmFsIG5vbi12ZXJpZnlpbmcgY29uc3RydWN0b3IuIE9ubHkgY2FsbCB3aXRoIHZhbGlkYXRlZCBhcmd1bWVudHMuCiAgLy8vCiAgLy8vIFRoZSBjb21wb25lbnRzIG11c3QgYmUgcHJvcGVybHkgbm9ybWFsaXplZC4KICAvLy8KICAvLy8gVXNlIGBudWxsYCBmb3IgW19ob3N0XSBpZiB0aGVyZSBpcyBubyBhdXRob3JpdHkuIEluIHRoYXQgY2FzZSwgYWx3YXlzCiAgLy8vIHBhc3MgYG51bGxgIGZvciBbX3BvcnRdIGFuZCBbX3VzZXJJbmZvXSBhcyB3ZWxsLgogIC8vLwogIC8vLyBVc2UgYG51bGxgIGZvciBbX3BvcnRdLCBbX3VzZXJJbmZvXSwgW19xdWVyeV0gYW5kIFtfZnJhZ21lbnRdIGlmIHRoZXJlIGlzCiAgLy8vIGNvbXBvbmVudCBvZiB0aGF0IHR5cGUuCiAgLy8vCiAgLy8vIFRoZSBbcGF0aF0gYW5kIFtzY2hlbWVdIGFyZSBuZXZlciBlbXB0eS4KICBfVXJpLl9pbnRlcm5hbCh0aGlzLnNjaGVtZSwgdGhpcy5fdXNlckluZm8sIHRoaXMuX2hvc3QsIHRoaXMuX3BvcnQsIHRoaXMucGF0aCwKICAgICAgdGhpcy5fcXVlcnksIHRoaXMuX2ZyYWdtZW50KTsKCiAgLy8vIENyZWF0ZSBhIFtfVXJpXSBmcm9tIHBhcnRzIG9mIFt1cmldLgogIC8vLwogIC8vLyBUaGUgcGFyYW1ldGVycyBzcGVjaWZ5IHRoZSBzdGFydC9lbmQgb2YgcGFydGljdWxhciBjb21wb25lbnRzIG9mIHRoZSBVUkkuCiAgLy8vIFRoZSBbc2NoZW1lXSBtYXkgY29udGFpbiBhIHN0cmluZyByZXByZXNlbnRpbmcgYSBub3JtYWxpemVkIHNjaGVtZQogIC8vLyBjb21wb25lbnQgaWYgb25lIGhhcyBhbHJlYWR5IGJlZW4gZGlzY292ZXJlZC4KICBmYWN0b3J5IF9Vcmkubm90U2ltcGxlKAogICAgICBTdHJpbmcgdXJpLAogICAgICBpbnQgc3RhcnQsCiAgICAgIGludCBlbmQsCiAgICAgIGludCBzY2hlbWVFbmQsCiAgICAgIGludCBob3N0U3RhcnQsCiAgICAgIGludCBwb3J0U3RhcnQsCiAgICAgIGludCBwYXRoU3RhcnQsCiAgICAgIGludCBxdWVyeVN0YXJ0LAogICAgICBpbnQgZnJhZ21lbnRTdGFydCwKICAgICAgU3RyaW5nIHNjaGVtZSkgewogICAgaWYgKHNjaGVtZSA9PSBudWxsKSB7CiAgICAgIHNjaGVtZSA9ICIiOwogICAgICBpZiAoc2NoZW1lRW5kID4gc3RhcnQpIHsKICAgICAgICBzY2hlbWUgPSBfbWFrZVNjaGVtZSh1cmksIHN0YXJ0LCBzY2hlbWVFbmQpOwogICAgICB9IGVsc2UgaWYgKHNjaGVtZUVuZCA9PSBzdGFydCkgewogICAgICAgIF9mYWlsKHVyaSwgc3RhcnQsICJJbnZhbGlkIGVtcHR5IHNjaGVtZSIpOwogICAgICB9CiAgICB9CiAgICBTdHJpbmcgdXNlckluZm8gPSAiIjsKICAgIFN0cmluZyBob3N0OwogICAgaW50IHBvcnQ7CiAgICBpZiAoaG9zdFN0YXJ0ID4gc3RhcnQpIHsKICAgICAgaW50IHVzZXJJbmZvU3RhcnQgPSBzY2hlbWVFbmQgKyAzOwogICAgICBpZiAodXNlckluZm9TdGFydCA8IGhvc3RTdGFydCkgewogICAgICAgIHVzZXJJbmZvID0gX21ha2VVc2VySW5mbyh1cmksIHVzZXJJbmZvU3RhcnQsIGhvc3RTdGFydCAtIDEpOwogICAgICB9CiAgICAgIGhvc3QgPSBfbWFrZUhvc3QodXJpLCBob3N0U3RhcnQsIHBvcnRTdGFydCwgZmFsc2UpOwogICAgICBpZiAocG9ydFN0YXJ0ICsgMSA8IHBhdGhTdGFydCkgewogICAgICAgIC8vIFNob3VsZCB0aHJvdyBiZWNhdXNlIGludmFsaWQuCiAgICAgICAgcG9ydCA9IGludC5wYXJzZSh1cmkuc3Vic3RyaW5nKHBvcnRTdGFydCArIDEsIHBhdGhTdGFydCksIG9uRXJyb3I6IChfKSB7CiAgICAgICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oIkludmFsaWQgcG9ydCIsIHVyaSwgcG9ydFN0YXJ0ICsgMSk7CiAgICAgICAgfSk7CiAgICAgICAgcG9ydCA9IF9tYWtlUG9ydChwb3J0LCBzY2hlbWUpOwogICAgICB9CiAgICB9CiAgICBTdHJpbmcgcGF0aCA9CiAgICAgICAgX21ha2VQYXRoKHVyaSwgcGF0aFN0YXJ0LCBxdWVyeVN0YXJ0LCBudWxsLCBzY2hlbWUsIGhvc3QgIT0gbnVsbCk7CiAgICBTdHJpbmcgcXVlcnk7CiAgICBpZiAocXVlcnlTdGFydCA8IGZyYWdtZW50U3RhcnQpIHsKICAgICAgcXVlcnkgPSBfbWFrZVF1ZXJ5KHVyaSwgcXVlcnlTdGFydCArIDEsIGZyYWdtZW50U3RhcnQsIG51bGwpOwogICAgfQogICAgU3RyaW5nIGZyYWdtZW50OwogICAgaWYgKGZyYWdtZW50U3RhcnQgPCBlbmQpIHsKICAgICAgZnJhZ21lbnQgPSBfbWFrZUZyYWdtZW50KHVyaSwgZnJhZ21lbnRTdGFydCArIDEsIGVuZCk7CiAgICB9CiAgICByZXR1cm4gX1VyaS5faW50ZXJuYWwoc2NoZW1lLCB1c2VySW5mbywgaG9zdCwgcG9ydCwgcGF0aCwgcXVlcnksIGZyYWdtZW50KTsKICB9CgogIC8vLyBJbXBsZW1lbnRhdGlvbiBvZiBbVXJpLlVyaV0uCiAgZmFjdG9yeSBfVXJpKAogICAgICB7U3RyaW5nIHNjaGVtZSwKICAgICAgU3RyaW5nIHVzZXJJbmZvLAogICAgICBTdHJpbmcgaG9zdCwKICAgICAgaW50IHBvcnQsCiAgICAgIFN0cmluZyBwYXRoLAogICAgICBJdGVyYWJsZTxTdHJpbmc+IHBhdGhTZWdtZW50cywKICAgICAgU3RyaW5nIHF1ZXJ5LAogICAgICBNYXA8U3RyaW5nLCBkeW5hbWljIC8qU3RyaW5nfEl0ZXJhYmxlPFN0cmluZz4qLyA+IHF1ZXJ5UGFyYW1ldGVycywKICAgICAgU3RyaW5nIGZyYWdtZW50fSkgewogICAgc2NoZW1lID0gX21ha2VTY2hlbWUoc2NoZW1lLCAwLCBfc3RyaW5nT3JOdWxsTGVuZ3RoKHNjaGVtZSkpOwogICAgdXNlckluZm8gPSBfbWFrZVVzZXJJbmZvKHVzZXJJbmZvLCAwLCBfc3RyaW5nT3JOdWxsTGVuZ3RoKHVzZXJJbmZvKSk7CiAgICBob3N0ID0gX21ha2VIb3N0KGhvc3QsIDAsIF9zdHJpbmdPck51bGxMZW5ndGgoaG9zdCksIGZhbHNlKTsKICAgIC8vIFNwZWNpYWwgY2FzZSB0aGlzIGNvbnN0cnVjdG9yIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KICAgIGlmIChxdWVyeSA9PSAiIikgcXVlcnkgPSBudWxsOwogICAgcXVlcnkgPSBfbWFrZVF1ZXJ5KHF1ZXJ5LCAwLCBfc3RyaW5nT3JOdWxsTGVuZ3RoKHF1ZXJ5KSwgcXVlcnlQYXJhbWV0ZXJzKTsKICAgIGZyYWdtZW50ID0gX21ha2VGcmFnbWVudChmcmFnbWVudCwgMCwgX3N0cmluZ09yTnVsbExlbmd0aChmcmFnbWVudCkpOwogICAgcG9ydCA9IF9tYWtlUG9ydChwb3J0LCBzY2hlbWUpOwogICAgYm9vbCBpc0ZpbGUgPSAoc2NoZW1lID09ICJmaWxlIik7CiAgICBpZiAoaG9zdCA9PSBudWxsICYmICh1c2VySW5mby5pc05vdEVtcHR5IHx8IHBvcnQgIT0gbnVsbCB8fCBpc0ZpbGUpKSB7CiAgICAgIGhvc3QgPSAiIjsKICAgIH0KICAgIGJvb2wgaGFzQXV0aG9yaXR5ID0gKGhvc3QgIT0gbnVsbCk7CiAgICBwYXRoID0gX21ha2VQYXRoKAogICAgICAgIHBhdGgsIDAsIF9zdHJpbmdPck51bGxMZW5ndGgocGF0aCksIHBhdGhTZWdtZW50cywgc2NoZW1lLCBoYXNBdXRob3JpdHkpOwogICAgaWYgKHNjaGVtZS5pc0VtcHR5ICYmIGhvc3QgPT0gbnVsbCAmJiAhcGF0aC5zdGFydHNXaXRoKCcvJykpIHsKICAgICAgYm9vbCBhbGxvd1NjaGVtZSA9IHNjaGVtZS5pc05vdEVtcHR5IHx8IGhvc3QgIT0gbnVsbDsKICAgICAgcGF0aCA9IF9ub3JtYWxpemVSZWxhdGl2ZVBhdGgocGF0aCwgYWxsb3dTY2hlbWUpOwogICAgfSBlbHNlIHsKICAgICAgcGF0aCA9IF9yZW1vdmVEb3RTZWdtZW50cyhwYXRoKTsKICAgIH0KICAgIGlmIChob3N0ID09IG51bGwgJiYgcGF0aC5zdGFydHNXaXRoKCIvLyIpKSB7CiAgICAgIGhvc3QgPSAiIjsKICAgIH0KICAgIHJldHVybiBfVXJpLl9pbnRlcm5hbChzY2hlbWUsIHVzZXJJbmZvLCBob3N0LCBwb3J0LCBwYXRoLCBxdWVyeSwgZnJhZ21lbnQpOwogIH0KCiAgLy8vIEltcGxlbWVudGF0aW9uIG9mIFtVcmkuaHR0cF0uCiAgZmFjdG9yeSBfVXJpLmh0dHAoU3RyaW5nIGF1dGhvcml0eSwgU3RyaW5nIHVuZW5jb2RlZFBhdGgsCiAgICAgIFtNYXA8U3RyaW5nLCBTdHJpbmc+IHF1ZXJ5UGFyYW1ldGVyc10pIHsKICAgIHJldHVybiBfbWFrZUh0dHBVcmkoImh0dHAiLCBhdXRob3JpdHksIHVuZW5jb2RlZFBhdGgsIHF1ZXJ5UGFyYW1ldGVycyk7CiAgfQoKICAvLy8gSW1wbGVtZW50YXRpb24gb2YgW1VyaS5odHRwc10uCiAgZmFjdG9yeSBfVXJpLmh0dHBzKFN0cmluZyBhdXRob3JpdHksIFN0cmluZyB1bmVuY29kZWRQYXRoLAogICAgICBbTWFwPFN0cmluZywgU3RyaW5nPiBxdWVyeVBhcmFtZXRlcnNdKSB7CiAgICByZXR1cm4gX21ha2VIdHRwVXJpKCJodHRwcyIsIGF1dGhvcml0eSwgdW5lbmNvZGVkUGF0aCwgcXVlcnlQYXJhbWV0ZXJzKTsKICB9CgogIFN0cmluZyBnZXQgYXV0aG9yaXR5IHsKICAgIGlmICghaGFzQXV0aG9yaXR5KSByZXR1cm4gIiI7CiAgICB2YXIgc2IgPSBTdHJpbmdCdWZmZXIoKTsKICAgIF93cml0ZUF1dGhvcml0eShzYik7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIFN0cmluZyBnZXQgdXNlckluZm8gPT4gX3VzZXJJbmZvOwoKICBTdHJpbmcgZ2V0IGhvc3QgewogICAgaWYgKF9ob3N0ID09IG51bGwpIHJldHVybiAiIjsKICAgIGlmIChfaG9zdC5zdGFydHNXaXRoKCdbJykpIHsKICAgICAgcmV0dXJuIF9ob3N0LnN1YnN0cmluZygxLCBfaG9zdC5sZW5ndGggLSAxKTsKICAgIH0KICAgIHJldHVybiBfaG9zdDsKICB9CgogIGludCBnZXQgcG9ydCB7CiAgICBpZiAoX3BvcnQgPT0gbnVsbCkgcmV0dXJuIF9kZWZhdWx0UG9ydChzY2hlbWUpOwogICAgcmV0dXJuIF9wb3J0OwogIH0KCiAgLy8gVGhlIGRlZmF1bHQgcG9ydCBmb3IgdGhlIHNjaGVtZSBvZiB0aGlzIFVyaS4KICBzdGF0aWMgaW50IF9kZWZhdWx0UG9ydChTdHJpbmcgc2NoZW1lKSB7CiAgICBpZiAoc2NoZW1lID09ICJodHRwIikgcmV0dXJuIDgwOwogICAgaWYgKHNjaGVtZSA9PSAiaHR0cHMiKSByZXR1cm4gNDQzOwogICAgcmV0dXJuIDA7CiAgfQoKICBTdHJpbmcgZ2V0IHF1ZXJ5ID0+IF9xdWVyeSA/PyAiIjsKCiAgU3RyaW5nIGdldCBmcmFnbWVudCA9PiBfZnJhZ21lbnQgPz8gIiI7CgogIGJvb2wgaXNTY2hlbWUoU3RyaW5nIHNjaGVtZSkgewogICAgU3RyaW5nIHRoaXNTY2hlbWUgPSB0aGlzLnNjaGVtZTsKICAgIGlmIChzY2hlbWUgPT0gbnVsbCkgcmV0dXJuIHRoaXNTY2hlbWUuaXNFbXB0eTsKICAgIGlmIChzY2hlbWUubGVuZ3RoICE9IHRoaXNTY2hlbWUubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX2NvbXBhcmVTY2hlbWUoc2NoZW1lLCB0aGlzU2NoZW1lKTsKICB9CgogIC8vLyBDb21wYXJlcyBzY2hlbWUgY2hhcmFjdGVycyBpbiBbc2NoZW1lXSBhbmQgYXQgdGhlIHN0YXJ0IG9mIFt1cmldLgogIC8vLwogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbc2NoZW1lXSByZXByZXNlbnRzIHRoZSBzYW1lIHNjaGVtZSBhcyB0aGUgc3RhcnQgb2YKICAvLy8gW3VyaV0uIFRoYXQgbWVhbnMgaGF2aW5nIHRoZSBzYW1lIGNoYXJhY3RlcnMsIGJ1dCBwb3NzaWJseSBkaWZmZXJlbnQgY2FzZQogIC8vLyBmb3IgbGV0dGVycy4KICAvLy8KICAvLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNoZWNrIHRoYXQgdGhlIGNoYXJhY3RlcnMgYXJlIHZhbGlkIFVSSSBzY2hlbWUKICAvLy8gY2hhcmFjdGVycy4gVGhlIFt1cmldIGlzIGFzc3VtZWQgdG8gYmUgdmFsaWQsIHNvIGlmIFtzY2hlbWVdIG1hdGNoZXMKICAvLy8gaXQsIGl0IGhhcyB0byBiZSB2YWxpZCB0b28uCiAgLy8vCiAgLy8vIFRoZSBsZW5ndGggc2hvdWxkIGJlIHRlc3RlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLAogIC8vLyBzbyB0aGUgc2NoZW1lIHBhcnQgb2YgW3VyaV0gaXMga25vd24gdG8gaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMgW3NjaGVtZV0uCiAgc3RhdGljIGJvb2wgX2NvbXBhcmVTY2hlbWUoU3RyaW5nIHNjaGVtZSwgU3RyaW5nIHVyaSkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzY2hlbWUubGVuZ3RoOyBpKyspIHsKICAgICAgaW50IHNjaGVtZUNoYXIgPSBzY2hlbWUuY29kZVVuaXRBdChpKTsKICAgICAgaW50IHVyaUNoYXIgPSB1cmkuY29kZVVuaXRBdChpKTsKICAgICAgaW50IGRlbHRhID0gc2NoZW1lQ2hhciBeIHVyaUNoYXI7CiAgICAgIGlmIChkZWx0YSAhPSAwKSB7CiAgICAgICAgaWYgKGRlbHRhID09IDB4MjApIHsKICAgICAgICAgIC8vIE1pZ2h0IGJlIGEgY2FzZSBkaWZmZXJlbmNlLgogICAgICAgICAgaW50IGxvd2VyQ2hhciA9IHVyaUNoYXIgfCBkZWx0YTsKICAgICAgICAgIGlmICgweDYxIC8qYSovIDw9IGxvd2VyQ2hhciAmJiBsb3dlckNoYXIgPD0gMHg3YSAvKnoqLykgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vIFJlcG9ydCBhIHBhcnNlIGZhaWx1cmUuCiAgc3RhdGljIHZvaWQgX2ZhaWwoU3RyaW5nIHVyaSwgaW50IGluZGV4LCBTdHJpbmcgbWVzc2FnZSkgewogICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKG1lc3NhZ2UsIHVyaSwgaW5kZXgpOwogIH0KCiAgc3RhdGljIFVyaSBfbWFrZUh0dHBVcmkoU3RyaW5nIHNjaGVtZSwgU3RyaW5nIGF1dGhvcml0eSwgU3RyaW5nIHVuZW5jb2RlZFBhdGgsCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gcXVlcnlQYXJhbWV0ZXJzKSB7CiAgICB2YXIgdXNlckluZm8gPSAiIjsKICAgIFN0cmluZyBob3N0OwogICAgaW50IHBvcnQ7CgogICAgaWYgKGF1dGhvcml0eSAhPSBudWxsICYmIGF1dGhvcml0eS5pc05vdEVtcHR5KSB7CiAgICAgIHZhciBob3N0U3RhcnQgPSAwOwogICAgICAvLyBTcGxpdCBvZmYgdGhlIHVzZXIgaW5mby4KICAgICAgYm9vbCBoYXNVc2VySW5mbyA9IGZhbHNlOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF1dGhvcml0eS5sZW5ndGg7IGkrKykgewogICAgICAgIGNvbnN0IGludCBhdFNpZ24gPSAweDQwOwogICAgICAgIGlmIChhdXRob3JpdHkuY29kZVVuaXRBdChpKSA9PSBhdFNpZ24pIHsKICAgICAgICAgIGhhc1VzZXJJbmZvID0gdHJ1ZTsKICAgICAgICAgIHVzZXJJbmZvID0gYXV0aG9yaXR5LnN1YnN0cmluZygwLCBpKTsKICAgICAgICAgIGhvc3RTdGFydCA9IGkgKyAxOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhciBob3N0RW5kID0gaG9zdFN0YXJ0OwogICAgICBpZiAoaG9zdFN0YXJ0IDwgYXV0aG9yaXR5Lmxlbmd0aCAmJgogICAgICAgICAgYXV0aG9yaXR5LmNvZGVVbml0QXQoaG9zdFN0YXJ0KSA9PSBfTEVGVF9CUkFDS0VUKSB7CiAgICAgICAgLy8gSVB2NiBob3N0LgogICAgICAgIGludCBlc2NhcGVGb3Jab25lSUQgPSAtMTsKICAgICAgICBmb3IgKDsgaG9zdEVuZCA8IGF1dGhvcml0eS5sZW5ndGg7IGhvc3RFbmQrKykgewogICAgICAgICAgaW50IGNoYXIgPSBhdXRob3JpdHkuY29kZVVuaXRBdChob3N0RW5kKTsKICAgICAgICAgIGlmIChjaGFyID09IF9QRVJDRU5UICYmIGVzY2FwZUZvclpvbmVJRCA8IDApIHsKICAgICAgICAgICAgZXNjYXBlRm9yWm9uZUlEID0gaG9zdEVuZDsKICAgICAgICAgICAgaWYgKGF1dGhvcml0eS5zdGFydHNXaXRoKCIyNSIsIGhvc3RFbmQgKyAxKSkgewogICAgICAgICAgICAgIGhvc3RFbmQgKz0gMjsgLy8gTWlnaHQgYXMgd2VsbCBza2lwIHRoZSBhbHJlYWR5IGNoZWNrZWQgZXNjYXBlLgogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKGNoYXIgPT0gX1JJR0hUX0JSQUNLRVQpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChob3N0RW5kID09IGF1dGhvcml0eS5sZW5ndGgpIHsKICAgICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgICAiSW52YWxpZCBJUHY2IGhvc3QgZW50cnkuIiwgYXV0aG9yaXR5LCBob3N0U3RhcnQpOwogICAgICAgIH0KICAgICAgICBVcmkucGFyc2VJUHY2QWRkcmVzcyhhdXRob3JpdHksIGhvc3RTdGFydCArIDEsCiAgICAgICAgICAgIChlc2NhcGVGb3Jab25lSUQgPCAwKSA/IGhvc3RFbmQgOiBlc2NhcGVGb3Jab25lSUQpOwogICAgICAgIGhvc3RFbmQrKzsgLy8gU2tpcCB0aGUgY2xvc2luZyBicmFja2V0LgogICAgICAgIGlmIChob3N0RW5kICE9IGF1dGhvcml0eS5sZW5ndGggJiYKICAgICAgICAgICAgYXV0aG9yaXR5LmNvZGVVbml0QXQoaG9zdEVuZCkgIT0gX0NPTE9OKSB7CiAgICAgICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oIkludmFsaWQgZW5kIG9mIGF1dGhvcml0eSIsIGF1dGhvcml0eSwgaG9zdEVuZCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIFNwbGl0IGhvc3QgYW5kIHBvcnQuCiAgICAgIGJvb2wgaGFzUG9ydCA9IGZhbHNlOwogICAgICBmb3IgKDsgaG9zdEVuZCA8IGF1dGhvcml0eS5sZW5ndGg7IGhvc3RFbmQrKykgewogICAgICAgIGlmIChhdXRob3JpdHkuY29kZVVuaXRBdChob3N0RW5kKSA9PSBfQ09MT04pIHsKICAgICAgICAgIHZhciBwb3J0U3RyaW5nID0gYXV0aG9yaXR5LnN1YnN0cmluZyhob3N0RW5kICsgMSk7CiAgICAgICAgICAvLyBXZSBhbGxvdyB0aGUgZW1wdHkgcG9ydCAtIGZhbGxpbmcgYmFjayB0byBpbml0aWFsIHZhbHVlLgogICAgICAgICAgaWYgKHBvcnRTdHJpbmcuaXNOb3RFbXB0eSkgcG9ydCA9IGludC5wYXJzZShwb3J0U3RyaW5nKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBob3N0ID0gYXV0aG9yaXR5LnN1YnN0cmluZyhob3N0U3RhcnQsIGhvc3RFbmQpOwogICAgfQogICAgcmV0dXJuIFVyaSgKICAgICAgICBzY2hlbWU6IHNjaGVtZSwKICAgICAgICB1c2VySW5mbzogdXNlckluZm8sCiAgICAgICAgaG9zdDogaG9zdCwKICAgICAgICBwb3J0OiBwb3J0LAogICAgICAgIHBhdGhTZWdtZW50czogdW5lbmNvZGVkUGF0aC5zcGxpdCgiLyIpLAogICAgICAgIHF1ZXJ5UGFyYW1ldGVyczogcXVlcnlQYXJhbWV0ZXJzKTsKICB9CgogIC8vLyBJbXBsZW1lbnRhdGlvbiBvZiBbVXJpLmZpbGVdLgogIGZhY3RvcnkgX1VyaS5maWxlKFN0cmluZyBwYXRoLCB7Ym9vbCB3aW5kb3dzfSkgewogICAgd2luZG93cyA9ICh3aW5kb3dzID09IG51bGwpID8gX1VyaS5faXNXaW5kb3dzIDogd2luZG93czsKICAgIHJldHVybiB3aW5kb3dzCiAgICAgICAgPyBfbWFrZVdpbmRvd3NGaWxlVXJsKHBhdGgsIGZhbHNlKQogICAgICAgIDogX21ha2VGaWxlVXJpKHBhdGgsIGZhbHNlKTsKICB9CgogIC8vLyBJbXBsZW1lbnRhdGlvbiBvZiBbVXJpLmRpcmVjdG9yeV0uCiAgZmFjdG9yeSBfVXJpLmRpcmVjdG9yeShTdHJpbmcgcGF0aCwge2Jvb2wgd2luZG93c30pIHsKICAgIHdpbmRvd3MgPSAod2luZG93cyA9PSBudWxsKSA/IF9VcmkuX2lzV2luZG93cyA6IHdpbmRvd3M7CiAgICByZXR1cm4gd2luZG93cyA/IF9tYWtlV2luZG93c0ZpbGVVcmwocGF0aCwgdHJ1ZSkgOiBfbWFrZUZpbGVVcmkocGF0aCwgdHJ1ZSk7CiAgfQoKICAvLy8gVXNlZCBpbnRlcm5hbGx5IGluIHBhdGgtcmVsYXRlZCBjb25zdHJ1Y3RvcnMuCiAgZXh0ZXJuYWwgc3RhdGljIGJvb2wgZ2V0IF9pc1dpbmRvd3M7CgogIHN0YXRpYyBfY2hlY2tOb25XaW5kb3dzUGF0aFJlc2VydmVkQ2hhcmFjdGVycygKICAgICAgTGlzdDxTdHJpbmc+IHNlZ21lbnRzLCBib29sIGFyZ3VtZW50RXJyb3IpIHsKICAgIHNlZ21lbnRzLmZvckVhY2goKHNlZ21lbnQpIHsKICAgICAgaWYgKHNlZ21lbnQuY29udGFpbnMoIi8iKSkgewogICAgICAgIGlmIChhcmd1bWVudEVycm9yKSB7CiAgICAgICAgICB0aHJvdyBBcmd1bWVudEVycm9yKCJJbGxlZ2FsIHBhdGggY2hhcmFjdGVyICRzZWdtZW50Iik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIklsbGVnYWwgcGF0aCBjaGFyYWN0ZXIgJHNlZ21lbnQiKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogIH0KCiAgc3RhdGljIF9jaGVja1dpbmRvd3NQYXRoUmVzZXJ2ZWRDaGFyYWN0ZXJzKAogICAgICBMaXN0PFN0cmluZz4gc2VnbWVudHMsIGJvb2wgYXJndW1lbnRFcnJvciwKICAgICAgW2ludCBmaXJzdFNlZ21lbnQgPSAwXSkgewogICAgZm9yICh2YXIgc2VnbWVudCBpbiBzZWdtZW50cy5za2lwKGZpcnN0U2VnbWVudCkpIHsKICAgICAgaWYgKHNlZ21lbnQuY29udGFpbnMoUmVnRXhwKHInWyIqLzo8Pj9cXHxdJykpKSB7CiAgICAgICAgaWYgKGFyZ3VtZW50RXJyb3IpIHsKICAgICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoIklsbGVnYWwgY2hhcmFjdGVyIGluIHBhdGgiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiSWxsZWdhbCBjaGFyYWN0ZXIgaW4gcGF0aDogJHNlZ21lbnQiKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIHN0YXRpYyBfY2hlY2tXaW5kb3dzRHJpdmVMZXR0ZXIoaW50IGNoYXJDb2RlLCBib29sIGFyZ3VtZW50RXJyb3IpIHsKICAgIGlmICgoX1VQUEVSX0NBU0VfQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBfVVBQRVJfQ0FTRV9aKSB8fAogICAgICAgIChfTE9XRVJfQ0FTRV9BIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IF9MT1dFUl9DQVNFX1opKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChhcmd1bWVudEVycm9yKSB7CiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAiSWxsZWdhbCBkcml2ZSBsZXR0ZXIgIiArIFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAiSWxsZWdhbCBkcml2ZSBsZXR0ZXIgIiArIFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpKTsKICAgIH0KICB9CgogIHN0YXRpYyBfbWFrZUZpbGVVcmkoU3RyaW5nIHBhdGgsIGJvb2wgc2xhc2hUZXJtaW5hdGVkKSB7CiAgICBjb25zdCBTdHJpbmcgc2VwID0gIi8iOwogICAgdmFyIHNlZ21lbnRzID0gcGF0aC5zcGxpdChzZXApOwogICAgaWYgKHNsYXNoVGVybWluYXRlZCAmJiBzZWdtZW50cy5pc05vdEVtcHR5ICYmIHNlZ21lbnRzLmxhc3QuaXNOb3RFbXB0eSkgewogICAgICBzZWdtZW50cy5hZGQoIiIpOyAvLyBFeHRyYSBzZXBhcmF0b3IgYXQgZW5kLgogICAgfQogICAgaWYgKHBhdGguc3RhcnRzV2l0aChzZXApKSB7CiAgICAgIC8vIEFic29sdXRlIGZpbGU6Ly8gVVJJLgogICAgICByZXR1cm4gVXJpKHNjaGVtZTogImZpbGUiLCBwYXRoU2VnbWVudHM6IHNlZ21lbnRzKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFJlbGF0aXZlIFVSSS4KICAgICAgcmV0dXJuIFVyaShwYXRoU2VnbWVudHM6IHNlZ21lbnRzKTsKICAgIH0KICB9CgogIHN0YXRpYyBfbWFrZVdpbmRvd3NGaWxlVXJsKFN0cmluZyBwYXRoLCBib29sIHNsYXNoVGVybWluYXRlZCkgewogICAgaWYgKHBhdGguc3RhcnRzV2l0aChyIlxcP1wiKSkgewogICAgICBpZiAocGF0aC5zdGFydHNXaXRoKHIiVU5DXCIsIDQpKSB7CiAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZVJhbmdlKDAsIDcsIHInXCcpOwogICAgICB9IGVsc2UgewogICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZyg0KTsKICAgICAgICBpZiAocGF0aC5sZW5ndGggPCAzIHx8CiAgICAgICAgICAgIHBhdGguY29kZVVuaXRBdCgxKSAhPSBfQ09MT04gfHwKICAgICAgICAgICAgcGF0aC5jb2RlVW5pdEF0KDIpICE9IF9CQUNLU0xBU0gpIHsKICAgICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAgICAgciJXaW5kb3dzIHBhdGhzIHdpdGggXFw/XCBwcmVmaXggbXVzdCBiZSBhYnNvbHV0ZSIpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZUFsbCgiLyIsIHInXCcpOwogICAgfQogICAgY29uc3QgU3RyaW5nIHNlcCA9IHInXCc7CiAgICBpZiAocGF0aC5sZW5ndGggPiAxICYmIHBhdGguY29kZVVuaXRBdCgxKSA9PSBfQ09MT04pIHsKICAgICAgX2NoZWNrV2luZG93c0RyaXZlTGV0dGVyKHBhdGguY29kZVVuaXRBdCgwKSwgdHJ1ZSk7CiAgICAgIGlmIChwYXRoLmxlbmd0aCA9PSAyIHx8IHBhdGguY29kZVVuaXRBdCgyKSAhPSBfQkFDS1NMQVNIKSB7CiAgICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigiV2luZG93cyBwYXRocyB3aXRoIGRyaXZlIGxldHRlciBtdXN0IGJlIGFic29sdXRlIik7CiAgICAgIH0KICAgICAgLy8gQWJzb2x1dGUgZmlsZTovL0M6LyBVUkkuCiAgICAgIHZhciBwYXRoU2VnbWVudHMgPSBwYXRoLnNwbGl0KHNlcCk7CiAgICAgIGlmIChzbGFzaFRlcm1pbmF0ZWQgJiYgcGF0aFNlZ21lbnRzLmxhc3QuaXNOb3RFbXB0eSkgewogICAgICAgIHBhdGhTZWdtZW50cy5hZGQoIiIpOyAvLyBFeHRyYSBzZXBhcmF0b3IgYXQgZW5kLgogICAgICB9CiAgICAgIF9jaGVja1dpbmRvd3NQYXRoUmVzZXJ2ZWRDaGFyYWN0ZXJzKHBhdGhTZWdtZW50cywgdHJ1ZSwgMSk7CiAgICAgIHJldHVybiBVcmkoc2NoZW1lOiAiZmlsZSIsIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzKTsKICAgIH0KCiAgICBpZiAocGF0aC5zdGFydHNXaXRoKHNlcCkpIHsKICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChzZXAsIDEpKSB7CiAgICAgICAgLy8gQWJzb2x1dGUgZmlsZTovLyBVUkkgd2l0aCBob3N0LgogICAgICAgIGludCBwYXRoU3RhcnQgPSBwYXRoLmluZGV4T2YocidcJywgMik7CiAgICAgICAgU3RyaW5nIGhvc3RQYXJ0ID0KICAgICAgICAgICAgKHBhdGhTdGFydCA8IDApID8gcGF0aC5zdWJzdHJpbmcoMikgOiBwYXRoLnN1YnN0cmluZygyLCBwYXRoU3RhcnQpOwogICAgICAgIFN0cmluZyBwYXRoUGFydCA9IChwYXRoU3RhcnQgPCAwKSA/ICIiIDogcGF0aC5zdWJzdHJpbmcocGF0aFN0YXJ0ICsgMSk7CiAgICAgICAgdmFyIHBhdGhTZWdtZW50cyA9IHBhdGhQYXJ0LnNwbGl0KHNlcCk7CiAgICAgICAgX2NoZWNrV2luZG93c1BhdGhSZXNlcnZlZENoYXJhY3RlcnMocGF0aFNlZ21lbnRzLCB0cnVlKTsKICAgICAgICBpZiAoc2xhc2hUZXJtaW5hdGVkICYmIHBhdGhTZWdtZW50cy5sYXN0LmlzTm90RW1wdHkpIHsKICAgICAgICAgIHBhdGhTZWdtZW50cy5hZGQoIiIpOyAvLyBFeHRyYSBzZXBhcmF0b3IgYXQgZW5kLgogICAgICAgIH0KICAgICAgICByZXR1cm4gVXJpKHNjaGVtZTogImZpbGUiLCBob3N0OiBob3N0UGFydCwgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIEFic29sdXRlIGZpbGU6Ly8gVVJJLgogICAgICAgIHZhciBwYXRoU2VnbWVudHMgPSBwYXRoLnNwbGl0KHNlcCk7CiAgICAgICAgaWYgKHNsYXNoVGVybWluYXRlZCAmJiBwYXRoU2VnbWVudHMubGFzdC5pc05vdEVtcHR5KSB7CiAgICAgICAgICBwYXRoU2VnbWVudHMuYWRkKCIiKTsgLy8gRXh0cmEgc2VwYXJhdG9yIGF0IGVuZC4KICAgICAgICB9CiAgICAgICAgX2NoZWNrV2luZG93c1BhdGhSZXNlcnZlZENoYXJhY3RlcnMocGF0aFNlZ21lbnRzLCB0cnVlKTsKICAgICAgICByZXR1cm4gVXJpKHNjaGVtZTogImZpbGUiLCBwYXRoU2VnbWVudHM6IHBhdGhTZWdtZW50cyk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIFJlbGF0aXZlIFVSSS4KICAgICAgdmFyIHBhdGhTZWdtZW50cyA9IHBhdGguc3BsaXQoc2VwKTsKICAgICAgX2NoZWNrV2luZG93c1BhdGhSZXNlcnZlZENoYXJhY3RlcnMocGF0aFNlZ21lbnRzLCB0cnVlKTsKICAgICAgaWYgKHNsYXNoVGVybWluYXRlZCAmJgogICAgICAgICAgcGF0aFNlZ21lbnRzLmlzTm90RW1wdHkgJiYKICAgICAgICAgIHBhdGhTZWdtZW50cy5sYXN0LmlzTm90RW1wdHkpIHsKICAgICAgICBwYXRoU2VnbWVudHMuYWRkKCIiKTsgLy8gRXh0cmEgc2VwYXJhdG9yIGF0IGVuZC4KICAgICAgfQogICAgICByZXR1cm4gVXJpKHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzKTsKICAgIH0KICB9CgogIFVyaSByZXBsYWNlKAogICAgICB7U3RyaW5nIHNjaGVtZSwKICAgICAgU3RyaW5nIHVzZXJJbmZvLAogICAgICBTdHJpbmcgaG9zdCwKICAgICAgaW50IHBvcnQsCiAgICAgIFN0cmluZyBwYXRoLAogICAgICBJdGVyYWJsZTxTdHJpbmc+IHBhdGhTZWdtZW50cywKICAgICAgU3RyaW5nIHF1ZXJ5LAogICAgICBNYXA8U3RyaW5nLCBkeW5hbWljIC8qU3RyaW5nfEl0ZXJhYmxlPFN0cmluZz4qLyA+IHF1ZXJ5UGFyYW1ldGVycywKICAgICAgU3RyaW5nIGZyYWdtZW50fSkgewogICAgLy8gU2V0IHRvIHRydWUgaWYgdGhlIHNjaGVtZSBoYXMgKHBvdGVudGlhbGx5KSBjaGFuZ2VkLgogICAgLy8gSW4gdGhhdCBjYXNlLCB0aGUgZGVmYXVsdCBwb3J0IG1heSBhbHNvIGhhdmUgY2hhbmdlZCBhbmQgd2UgbmVlZAogICAgLy8gdG8gY2hlY2sgZXZlbiB0aGUgZXhpc3RpbmcgcG9ydC4KICAgIGJvb2wgc2NoZW1lQ2hhbmdlZCA9IGZhbHNlOwogICAgaWYgKHNjaGVtZSAhPSBudWxsKSB7CiAgICAgIHNjaGVtZSA9IF9tYWtlU2NoZW1lKHNjaGVtZSwgMCwgc2NoZW1lLmxlbmd0aCk7CiAgICAgIHNjaGVtZUNoYW5nZWQgPSAoc2NoZW1lICE9IHRoaXMuc2NoZW1lKTsKICAgIH0gZWxzZSB7CiAgICAgIHNjaGVtZSA9IHRoaXMuc2NoZW1lOwogICAgfQogICAgYm9vbCBpc0ZpbGUgPSAoc2NoZW1lID09ICJmaWxlIik7CiAgICBpZiAodXNlckluZm8gIT0gbnVsbCkgewogICAgICB1c2VySW5mbyA9IF9tYWtlVXNlckluZm8odXNlckluZm8sIDAsIHVzZXJJbmZvLmxlbmd0aCk7CiAgICB9IGVsc2UgewogICAgICB1c2VySW5mbyA9IHRoaXMuX3VzZXJJbmZvOwogICAgfQogICAgaWYgKHBvcnQgIT0gbnVsbCkgewogICAgICBwb3J0ID0gX21ha2VQb3J0KHBvcnQsIHNjaGVtZSk7CiAgICB9IGVsc2UgewogICAgICBwb3J0ID0gdGhpcy5fcG9ydDsKICAgICAgaWYgKHNjaGVtZUNoYW5nZWQpIHsKICAgICAgICAvLyBUaGUgZGVmYXVsdCBwb3J0IG1pZ2h0IGhhdmUgY2hhbmdlZC4KICAgICAgICBwb3J0ID0gX21ha2VQb3J0KHBvcnQsIHNjaGVtZSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChob3N0ICE9IG51bGwpIHsKICAgICAgaG9zdCA9IF9tYWtlSG9zdChob3N0LCAwLCBob3N0Lmxlbmd0aCwgZmFsc2UpOwogICAgfSBlbHNlIGlmICh0aGlzLmhhc0F1dGhvcml0eSkgewogICAgICBob3N0ID0gdGhpcy5faG9zdDsKICAgIH0gZWxzZSBpZiAodXNlckluZm8uaXNOb3RFbXB0eSB8fCBwb3J0ICE9IG51bGwgfHwgaXNGaWxlKSB7CiAgICAgIGhvc3QgPSAiIjsKICAgIH0KCiAgICBib29sIGhhc0F1dGhvcml0eSA9IGhvc3QgIT0gbnVsbDsKICAgIGlmIChwYXRoICE9IG51bGwgfHwgcGF0aFNlZ21lbnRzICE9IG51bGwpIHsKICAgICAgcGF0aCA9IF9tYWtlUGF0aChwYXRoLCAwLCBfc3RyaW5nT3JOdWxsTGVuZ3RoKHBhdGgpLCBwYXRoU2VnbWVudHMsIHNjaGVtZSwKICAgICAgICAgIGhhc0F1dGhvcml0eSk7CiAgICB9IGVsc2UgewogICAgICBwYXRoID0gdGhpcy5wYXRoOwogICAgICBpZiAoKGlzRmlsZSB8fCAoaGFzQXV0aG9yaXR5ICYmICFwYXRoLmlzRW1wdHkpKSAmJgogICAgICAgICAgIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7CiAgICAgICAgcGF0aCA9ICIvIiArIHBhdGg7CiAgICAgIH0KICAgIH0KCiAgICBpZiAocXVlcnkgIT0gbnVsbCB8fCBxdWVyeVBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICBxdWVyeSA9IF9tYWtlUXVlcnkocXVlcnksIDAsIF9zdHJpbmdPck51bGxMZW5ndGgocXVlcnkpLCBxdWVyeVBhcmFtZXRlcnMpOwogICAgfSBlbHNlIHsKICAgICAgcXVlcnkgPSB0aGlzLl9xdWVyeTsKICAgIH0KCiAgICBpZiAoZnJhZ21lbnQgIT0gbnVsbCkgewogICAgICBmcmFnbWVudCA9IF9tYWtlRnJhZ21lbnQoZnJhZ21lbnQsIDAsIGZyYWdtZW50Lmxlbmd0aCk7CiAgICB9IGVsc2UgewogICAgICBmcmFnbWVudCA9IHRoaXMuX2ZyYWdtZW50OwogICAgfQoKICAgIHJldHVybiBfVXJpLl9pbnRlcm5hbChzY2hlbWUsIHVzZXJJbmZvLCBob3N0LCBwb3J0LCBwYXRoLCBxdWVyeSwgZnJhZ21lbnQpOwogIH0KCiAgVXJpIHJlbW92ZUZyYWdtZW50KCkgewogICAgaWYgKCF0aGlzLmhhc0ZyYWdtZW50KSByZXR1cm4gdGhpczsKICAgIHJldHVybiBfVXJpLl9pbnRlcm5hbChzY2hlbWUsIF91c2VySW5mbywgX2hvc3QsIF9wb3J0LCBwYXRoLCBfcXVlcnksIG51bGwpOwogIH0KCiAgTGlzdDxTdHJpbmc+IGdldCBwYXRoU2VnbWVudHMgewogICAgdmFyIHJlc3VsdCA9IF9wYXRoU2VnbWVudHM7CiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHJldHVybiByZXN1bHQ7CgogICAgdmFyIHBhdGhUb1NwbGl0ID0gcGF0aDsKICAgIGlmIChwYXRoVG9TcGxpdC5pc05vdEVtcHR5ICYmIHBhdGhUb1NwbGl0LmNvZGVVbml0QXQoMCkgPT0gX1NMQVNIKSB7CiAgICAgIHBhdGhUb1NwbGl0ID0gcGF0aFRvU3BsaXQuc3Vic3RyaW5nKDEpOwogICAgfQogICAgcmVzdWx0ID0gKHBhdGhUb1NwbGl0ID09ICIiKQogICAgICAgID8gY29uc3QgPFN0cmluZz5bXQogICAgICAgIDogTGlzdDxTdHJpbmc+LnVubW9kaWZpYWJsZSgKICAgICAgICAgICAgcGF0aFRvU3BsaXQuc3BsaXQoIi8iKS5tYXAoVXJpLmRlY29kZUNvbXBvbmVudCkpOwogICAgX3BhdGhTZWdtZW50cyA9IHJlc3VsdDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldCBxdWVyeVBhcmFtZXRlcnMgewogICAgX3F1ZXJ5UGFyYW1ldGVycyA/Pz0KICAgICAgICBVbm1vZGlmaWFibGVNYXBWaWV3PFN0cmluZywgU3RyaW5nPihVcmkuc3BsaXRRdWVyeVN0cmluZyhxdWVyeSkpOwogICAgcmV0dXJuIF9xdWVyeVBhcmFtZXRlcnM7CiAgfQoKICBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IGdldCBxdWVyeVBhcmFtZXRlcnNBbGwgewogICAgaWYgKF9xdWVyeVBhcmFtZXRlckxpc3RzID09IG51bGwpIHsKICAgICAgTWFwIHF1ZXJ5UGFyYW1ldGVyTGlzdHMgPSBfc3BsaXRRdWVyeVN0cmluZ0FsbChxdWVyeSk7CiAgICAgIGZvciAodmFyIGtleSBpbiBxdWVyeVBhcmFtZXRlckxpc3RzLmtleXMpIHsKICAgICAgICBxdWVyeVBhcmFtZXRlckxpc3RzW2tleV0gPQogICAgICAgICAgICBMaXN0PFN0cmluZz4udW5tb2RpZmlhYmxlKHF1ZXJ5UGFyYW1ldGVyTGlzdHNba2V5XSk7CiAgICAgIH0KICAgICAgX3F1ZXJ5UGFyYW1ldGVyTGlzdHMgPQogICAgICAgICAgTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+Pi51bm1vZGlmaWFibGUocXVlcnlQYXJhbWV0ZXJMaXN0cyk7CiAgICB9CiAgICByZXR1cm4gX3F1ZXJ5UGFyYW1ldGVyTGlzdHM7CiAgfQoKICBVcmkgbm9ybWFsaXplUGF0aCgpIHsKICAgIFN0cmluZyBwYXRoID0gX25vcm1hbGl6ZVBhdGgodGhpcy5wYXRoLCBzY2hlbWUsIGhhc0F1dGhvcml0eSk7CiAgICBpZiAoaWRlbnRpY2FsKHBhdGgsIHRoaXMucGF0aCkpIHJldHVybiB0aGlzOwogICAgcmV0dXJuIHRoaXMucmVwbGFjZShwYXRoOiBwYXRoKTsKICB9CgogIHN0YXRpYyBpbnQgX21ha2VQb3J0KGludCBwb3J0LCBTdHJpbmcgc2NoZW1lKSB7CiAgICAvLyBQZXJmb3JtIHNjaGVtZSBzcGVjaWZpYyBub3JtYWxpemF0aW9uLgogICAgaWYgKHBvcnQgIT0gbnVsbCAmJiBwb3J0ID09IF9kZWZhdWx0UG9ydChzY2hlbWUpKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBwb3J0OwogIH0KCiAgLyoqCiAgICogQ2hlY2sgYW5kIG5vcm1hbGl6ZSBhIGhvc3QgbmFtZS4KICAgKgogICAqIElmIHRoZSBob3N0IG5hbWUgc3RhcnRzIGFuZCBlbmRzIHdpdGggJ1snIGFuZCAnXScsIGl0IGlzIGNvbnNpZGVyZWQgYW4KICAgKiBJUHY2IGFkZHJlc3MuIElmIFtzdHJpY3RJUHY2XSBpcyBmYWxzZSwgdGhlIGFkZHJlc3MgaXMgYWxzbyBjb25zaWRlcmVkCiAgICogYW4gSVB2NiBhZGRyZXNzIGlmIGl0IGNvbnRhaW5zIGFueSAnOicgY2hhcmFjdGVyLgogICAqCiAgICogSWYgaXQgaXMgbm90IGFuIElQdjYgYWRkcmVzcywgaXQgaXMgY2FzZS0gYW5kIGVzY2FwZS1ub3JtYWxpemVkLgogICAqIFRoaXMgZXNjYXBlcyBhbGwgY2hhcmFjdGVycyBub3QgdmFsaWQgaW4gYSByZWctbmFtZSwKICAgKiBhbmQgY29udmVydHMgYWxsIG5vbi1lc2NhcGUgdXBwZXItY2FzZSBsZXR0ZXJzIHRvIGxvd2VyLWNhc2UuCiAgICovCiAgc3RhdGljIFN0cmluZyBfbWFrZUhvc3QoU3RyaW5nIGhvc3QsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBzdHJpY3RJUHY2KSB7CiAgICAvLyBUT0RPKGxybik6IFNob3VsZCB3ZSBub3JtYWxpemUgSVB2NiBhZGRyZXNzZXMgYWNjb3JkaW5nIHRvIFJGQyA1OTUyPwogICAgaWYgKGhvc3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAoc3RhcnQgPT0gZW5kKSByZXR1cm4gIiI7CiAgICAvLyBIb3N0IGlzIGFuIElQdjYgYWRkcmVzcyBpZiBpdCBzdGFydHMgd2l0aCAnWycgb3IgY29udGFpbnMgYSBjb2xvbi4KICAgIGlmIChob3N0LmNvZGVVbml0QXQoc3RhcnQpID09IF9MRUZUX0JSQUNLRVQpIHsKICAgICAgaWYgKGhvc3QuY29kZVVuaXRBdChlbmQgLSAxKSAhPSBfUklHSFRfQlJBQ0tFVCkgewogICAgICAgIF9mYWlsKGhvc3QsIHN0YXJ0LCAnTWlzc2luZyBlbmQgYF1gIHRvIG1hdGNoIGBbYCBpbiBob3N0Jyk7CiAgICAgIH0KICAgICAgU3RyaW5nIHpvbmVJRCA9ICIiOwogICAgICBpbnQgaW5kZXggPSBfY2hlY2tab25lSUQoaG9zdCwgc3RhcnQgKyAxLCBlbmQgLSAxKTsKICAgICAgaWYgKGluZGV4IDwgZW5kIC0gMSkgewogICAgICAgIGludCB6b25lSURzdGFydCA9CiAgICAgICAgICAgIChob3N0LnN0YXJ0c1dpdGgoIjI1IiwgaW5kZXggKyAxKSkgPyBpbmRleCArIDMgOiBpbmRleCArIDE7CiAgICAgICAgem9uZUlEID0gX25vcm1hbGl6ZVpvbmVJRChob3N0LCB6b25lSURzdGFydCwgZW5kIC0gMSwgIiUyNSIpOwogICAgICB9CiAgICAgIFVyaS5wYXJzZUlQdjZBZGRyZXNzKGhvc3QsIHN0YXJ0ICsgMSwgaW5kZXgpOwogICAgICAvLyBSRkMgNTk1MiByZXF1aXJlcyBoZXggZGlnaXRzIHRvIGJlIGxvd2VyIGNhc2UuCiAgICAgIHJldHVybiBob3N0LnN1YnN0cmluZyhzdGFydCwgaW5kZXgpLnRvTG93ZXJDYXNlKCkgKyB6b25lSUQgKyAnXSc7CiAgICB9CiAgICBpZiAoIXN0cmljdElQdjYpIHsKICAgICAgLy8gVE9ETyhscm4pOiBza2lwIGlmIHRvbyBzaG9ydCB0byBiZSBhIHZhbGlkIElQdjYgYWRkcmVzcz8KICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgICBpZiAoaG9zdC5jb2RlVW5pdEF0KGkpID09IF9DT0xPTikgewogICAgICAgICAgU3RyaW5nIHpvbmVJRCA9ICIiOwogICAgICAgICAgaW50IGluZGV4ID0gX2NoZWNrWm9uZUlEKGhvc3QsIHN0YXJ0LCBlbmQpOwogICAgICAgICAgaWYgKGluZGV4IDwgZW5kKSB7CiAgICAgICAgICAgIGludCB6b25lSURzdGFydCA9CiAgICAgICAgICAgICAgICAoaG9zdC5zdGFydHNXaXRoKCIyNSIsIGluZGV4ICsgMSkpID8gaW5kZXggKyAzIDogaW5kZXggKyAxOwogICAgICAgICAgICB6b25lSUQgPSBfbm9ybWFsaXplWm9uZUlEKGhvc3QsIHpvbmVJRHN0YXJ0LCBlbmQsICIlMjUiKTsKICAgICAgICAgIH0KICAgICAgICAgIFVyaS5wYXJzZUlQdjZBZGRyZXNzKGhvc3QsIHN0YXJ0LCBpbmRleCk7CiAgICAgICAgICByZXR1cm4gJ1ske2hvc3Quc3Vic3RyaW5nKHN0YXJ0LCBpbmRleCl9JyArIHpvbmVJRCArICddJzsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfbm9ybWFsaXplUmVnTmFtZShob3N0LCBzdGFydCwgZW5kKTsKICB9CgogIC8vIFJGQyA2ODc0IGNoZWNrIGZvciBab25lSUQKICAvLyBSZXR1cm4gdGhlIGluZGV4IG9mIGZpcnN0IGFwcGVhcmVkIGAlYC4KICBzdGF0aWMgaW50IF9jaGVja1pvbmVJRChTdHJpbmcgaG9zdCwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBpbnQgaW5kZXggPSBob3N0LmluZGV4T2YoJyUnLCBzdGFydCk7CiAgICBpbmRleCA9IChpbmRleCA+PSBzdGFydCAmJiBpbmRleCA8IGVuZCkgPyBpbmRleCA6IGVuZDsKICAgIHJldHVybiBpbmRleDsKICB9CgogIHN0YXRpYyBib29sIF9pc1pvbmVJRENoYXIoaW50IGNoYXIpIHsKICAgIHJldHVybiBjaGFyIDwgMTI3ICYmIChfem9uZUlEVGFibGVbY2hhciA+PiA0XSAmICgxIDw8IChjaGFyICYgMHhmKSkpICE9IDA7CiAgfQoKICAvKioKICAgKiBWYWxpZGF0ZXMgYW5kIGRvZXMgY2FzZS0gYW5kIHBlcmNlbnQtZW5jb2Rpbmcgbm9ybWFsaXphdGlvbi4KICAgKgogICAqIFRoZSBzYW1lIGFzIFtfbm9ybWFsaXplT3JTdWJzdHJpbmddCiAgICogZXhjZXB0IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY29udmVydCBjaGFyYWN0ZXJzIHRvIGxvd2VyIGNhc2UuCiAgICogVGhlIFtob3N0XSBtdXN0IGJlIGFuIFJGQzY4NzQgIlpvbmVJRCIuCiAgICogWm9uZUlEID0gMSoodW5yZXNlcnZlZCAvIHBjdC1lbmNvZGVkKQogICAqLwogIHN0YXRpYyBTdHJpbmcgX25vcm1hbGl6ZVpvbmVJRChTdHJpbmcgaG9zdCwgaW50IHN0YXJ0LCBpbnQgZW5kLAogICAgICBbU3RyaW5nIHByZWZpeCA9ICcnXSkgewogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKICAgIGlmIChwcmVmaXggIT0gJycpIHsKICAgICAgYnVmZmVyID0gU3RyaW5nQnVmZmVyKHByZWZpeCk7CiAgICB9CiAgICBpbnQgc2VjdGlvblN0YXJ0ID0gc3RhcnQ7CiAgICBpbnQgaW5kZXggPSBzdGFydDsKICAgIC8vIFdoZXRoZXIgYWxsIGNoYXJhY3RlcnMgYmV0d2VlbiBzZWN0aW9uU3RhcnQgYW5kIGluZGV4IGFyZSBub3JtYWxpemVkLAogICAgYm9vbCBpc05vcm1hbGl6ZWQgPSB0cnVlOwoKICAgIHdoaWxlIChpbmRleCA8IGVuZCkgewogICAgICBpbnQgY2hhciA9IGhvc3QuY29kZVVuaXRBdChpbmRleCk7CiAgICAgIGlmIChjaGFyID09IF9QRVJDRU5UKSB7CiAgICAgICAgU3RyaW5nIHJlcGxhY2VtZW50ID0gX25vcm1hbGl6ZUVzY2FwZShob3N0LCBpbmRleCwgdHJ1ZSk7CiAgICAgICAgaWYgKHJlcGxhY2VtZW50ID09IG51bGwgJiYgaXNOb3JtYWxpemVkKSB7CiAgICAgICAgICBpbmRleCArPSAzOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGJ1ZmZlciA/Pz0gU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgU3RyaW5nIHNsaWNlID0gaG9zdC5zdWJzdHJpbmcoc2VjdGlvblN0YXJ0LCBpbmRleCk7CiAgICAgICAgYnVmZmVyLndyaXRlKHNsaWNlKTsKICAgICAgICBpbnQgc291cmNlTGVuZ3RoID0gMzsKICAgICAgICBpZiAocmVwbGFjZW1lbnQgPT0gbnVsbCkgewogICAgICAgICAgcmVwbGFjZW1lbnQgPSBob3N0LnN1YnN0cmluZyhpbmRleCwgaW5kZXggKyAzKTsKICAgICAgICB9IGVsc2UgaWYgKHJlcGxhY2VtZW50ID09ICIlIikgewogICAgICAgICAgX2ZhaWwoaG9zdCwgaW5kZXgsICJab25lSUQgc2hvdWxkIG5vdCBjb250YWluICUgYW55bW9yZSIpOwogICAgICAgIH0KICAgICAgICBidWZmZXIud3JpdGUocmVwbGFjZW1lbnQpOwogICAgICAgIGluZGV4ICs9IHNvdXJjZUxlbmd0aDsKICAgICAgICBzZWN0aW9uU3RhcnQgPSBpbmRleDsKICAgICAgICBpc05vcm1hbGl6ZWQgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKF9pc1pvbmVJRENoYXIoY2hhcikpIHsKICAgICAgICBpZiAoaXNOb3JtYWxpemVkICYmIF9VUFBFUl9DQVNFX0EgPD0gY2hhciAmJiBfVVBQRVJfQ0FTRV9aID49IGNoYXIpIHsKICAgICAgICAgIC8vIFB1dCBpbml0aWFsIHNsaWNlIGluIGJ1ZmZlciBhbmQgY29udGludWUgaW4gbm9uLW5vcm1hbGl6ZWQgbW9kZQogICAgICAgICAgYnVmZmVyID8/PSBTdHJpbmdCdWZmZXIoKTsKICAgICAgICAgIGlmIChzZWN0aW9uU3RhcnQgPCBpbmRleCkgewogICAgICAgICAgICBidWZmZXIud3JpdGUoaG9zdC5zdWJzdHJpbmcoc2VjdGlvblN0YXJ0LCBpbmRleCkpOwogICAgICAgICAgICBzZWN0aW9uU3RhcnQgPSBpbmRleDsKICAgICAgICAgIH0KICAgICAgICAgIGlzTm9ybWFsaXplZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBpbmRleCsrOwogICAgICB9IGVsc2UgewogICAgICAgIGludCBzb3VyY2VMZW5ndGggPSAxOwogICAgICAgIGlmICgoY2hhciAmIDB4RkMwMCkgPT0gMHhEODAwICYmIChpbmRleCArIDEpIDwgZW5kKSB7CiAgICAgICAgICBpbnQgdGFpbCA9IGhvc3QuY29kZVVuaXRBdChpbmRleCArIDEpOwogICAgICAgICAgaWYgKCh0YWlsICYgMHhGQzAwKSA9PSAweERDMDApIHsKICAgICAgICAgICAgY2hhciA9IDB4MTAwMDAgfCAoKGNoYXIgJiAweDNmZikgPDwgMTApIHwgKHRhaWwgJiAweDNmZik7CiAgICAgICAgICAgIHNvdXJjZUxlbmd0aCA9IDI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJ1ZmZlciA/Pz0gU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgU3RyaW5nIHNsaWNlID0gaG9zdC5zdWJzdHJpbmcoc2VjdGlvblN0YXJ0LCBpbmRleCk7CiAgICAgICAgYnVmZmVyLndyaXRlKHNsaWNlKTsKICAgICAgICBidWZmZXIud3JpdGUoX2VzY2FwZUNoYXIoY2hhcikpOwogICAgICAgIGluZGV4ICs9IHNvdXJjZUxlbmd0aDsKICAgICAgICBzZWN0aW9uU3RhcnQgPSBpbmRleDsKICAgICAgfQogICAgfQogICAgaWYgKGJ1ZmZlciA9PSBudWxsKSByZXR1cm4gaG9zdC5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7CiAgICBpZiAoc2VjdGlvblN0YXJ0IDwgZW5kKSB7CiAgICAgIFN0cmluZyBzbGljZSA9IGhvc3Quc3Vic3RyaW5nKHNlY3Rpb25TdGFydCwgZW5kKTsKICAgICAgYnVmZmVyLndyaXRlKHNsaWNlKTsKICAgIH0KICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIHN0YXRpYyBib29sIF9pc1JlZ05hbWVDaGFyKGludCBjaGFyKSB7CiAgICByZXR1cm4gY2hhciA8IDEyNyAmJiAoX3JlZ05hbWVUYWJsZVtjaGFyID4+IDRdICYgKDEgPDwgKGNoYXIgJiAweGYpKSkgIT0gMDsKICB9CgogIC8qKgogICAqIFZhbGlkYXRlcyBhbmQgZG9lcyBjYXNlLSBhbmQgcGVyY2VudC1lbmNvZGluZyBub3JtYWxpemF0aW9uLgogICAqCiAgICogVGhlIFtob3N0XSBtdXN0IGJlIGFuIFJGQzM5ODYgInJlZy1uYW1lIi4gSXQgaXMgY29udmVydGVkCiAgICogdG8gbG93ZXIgY2FzZSwgYW5kIHBlcmNlbnQgZXNjYXBlcyBhcmUgY29udmVydGVkIHRvIGVpdGhlcgogICAqIGxvd2VyIGNhc2UgdW5yZXNlcnZlZCBjaGFyYWN0ZXJzIG9yIHVwcGVyIGNhc2UgZXNjYXBlcy4KICAgKi8KICBzdGF0aWMgU3RyaW5nIF9ub3JtYWxpemVSZWdOYW1lKFN0cmluZyBob3N0LCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXI7CiAgICBpbnQgc2VjdGlvblN0YXJ0ID0gc3RhcnQ7CiAgICBpbnQgaW5kZXggPSBzdGFydDsKICAgIC8vIFdoZXRoZXIgYWxsIGNoYXJhY3RlcnMgYmV0d2VlbiBzZWN0aW9uU3RhcnQgYW5kIGluZGV4IGFyZSBub3JtYWxpemVkLAogICAgYm9vbCBpc05vcm1hbGl6ZWQgPSB0cnVlOwoKICAgIHdoaWxlIChpbmRleCA8IGVuZCkgewogICAgICBpbnQgY2hhciA9IGhvc3QuY29kZVVuaXRBdChpbmRleCk7CiAgICAgIGlmIChjaGFyID09IF9QRVJDRU5UKSB7CiAgICAgICAgLy8gVGhlIF9yZWdOYW1lVGFibGUgY29udGFpbnMgIiUiLCBzbyB3ZSBjaGVjayB0aGF0IGZpcnN0LgogICAgICAgIFN0cmluZyByZXBsYWNlbWVudCA9IF9ub3JtYWxpemVFc2NhcGUoaG9zdCwgaW5kZXgsIHRydWUpOwogICAgICAgIGlmIChyZXBsYWNlbWVudCA9PSBudWxsICYmIGlzTm9ybWFsaXplZCkgewogICAgICAgICAgaW5kZXggKz0gMzsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBidWZmZXIgPz89IFN0cmluZ0J1ZmZlcigpOwogICAgICAgIFN0cmluZyBzbGljZSA9IGhvc3Quc3Vic3RyaW5nKHNlY3Rpb25TdGFydCwgaW5kZXgpOwogICAgICAgIGlmICghaXNOb3JtYWxpemVkKSBzbGljZSA9IHNsaWNlLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgYnVmZmVyLndyaXRlKHNsaWNlKTsKICAgICAgICBpbnQgc291cmNlTGVuZ3RoID0gMzsKICAgICAgICBpZiAocmVwbGFjZW1lbnQgPT0gbnVsbCkgewogICAgICAgICAgcmVwbGFjZW1lbnQgPSBob3N0LnN1YnN0cmluZyhpbmRleCwgaW5kZXggKyAzKTsKICAgICAgICB9IGVsc2UgaWYgKHJlcGxhY2VtZW50ID09ICIlIikgewogICAgICAgICAgcmVwbGFjZW1lbnQgPSAiJTI1IjsKICAgICAgICAgIHNvdXJjZUxlbmd0aCA9IDE7CiAgICAgICAgfQogICAgICAgIGJ1ZmZlci53cml0ZShyZXBsYWNlbWVudCk7CiAgICAgICAgaW5kZXggKz0gc291cmNlTGVuZ3RoOwogICAgICAgIHNlY3Rpb25TdGFydCA9IGluZGV4OwogICAgICAgIGlzTm9ybWFsaXplZCA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAoX2lzUmVnTmFtZUNoYXIoY2hhcikpIHsKICAgICAgICBpZiAoaXNOb3JtYWxpemVkICYmIF9VUFBFUl9DQVNFX0EgPD0gY2hhciAmJiBfVVBQRVJfQ0FTRV9aID49IGNoYXIpIHsKICAgICAgICAgIC8vIFB1dCBpbml0aWFsIHNsaWNlIGluIGJ1ZmZlciBhbmQgY29udGludWUgaW4gbm9uLW5vcm1hbGl6ZWQgbW9kZQogICAgICAgICAgYnVmZmVyID8/PSBTdHJpbmdCdWZmZXIoKTsKICAgICAgICAgIGlmIChzZWN0aW9uU3RhcnQgPCBpbmRleCkgewogICAgICAgICAgICBidWZmZXIud3JpdGUoaG9zdC5zdWJzdHJpbmcoc2VjdGlvblN0YXJ0LCBpbmRleCkpOwogICAgICAgICAgICBzZWN0aW9uU3RhcnQgPSBpbmRleDsKICAgICAgICAgIH0KICAgICAgICAgIGlzTm9ybWFsaXplZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBpbmRleCsrOwogICAgICB9IGVsc2UgaWYgKF9pc0dlbmVyYWxEZWxpbWl0ZXIoY2hhcikpIHsKICAgICAgICBfZmFpbChob3N0LCBpbmRleCwgIkludmFsaWQgY2hhcmFjdGVyIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW50IHNvdXJjZUxlbmd0aCA9IDE7CiAgICAgICAgaWYgKChjaGFyICYgMHhGQzAwKSA9PSAweEQ4MDAgJiYgKGluZGV4ICsgMSkgPCBlbmQpIHsKICAgICAgICAgIGludCB0YWlsID0gaG9zdC5jb2RlVW5pdEF0KGluZGV4ICsgMSk7CiAgICAgICAgICBpZiAoKHRhaWwgJiAweEZDMDApID09IDB4REMwMCkgewogICAgICAgICAgICBjaGFyID0gMHgxMDAwMCB8ICgoY2hhciAmIDB4M2ZmKSA8PCAxMCkgfCAodGFpbCAmIDB4M2ZmKTsKICAgICAgICAgICAgc291cmNlTGVuZ3RoID0gMjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnVmZmVyID8/PSBTdHJpbmdCdWZmZXIoKTsKICAgICAgICBTdHJpbmcgc2xpY2UgPSBob3N0LnN1YnN0cmluZyhzZWN0aW9uU3RhcnQsIGluZGV4KTsKICAgICAgICBpZiAoIWlzTm9ybWFsaXplZCkgc2xpY2UgPSBzbGljZS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGJ1ZmZlci53cml0ZShzbGljZSk7CiAgICAgICAgYnVmZmVyLndyaXRlKF9lc2NhcGVDaGFyKGNoYXIpKTsKICAgICAgICBpbmRleCArPSBzb3VyY2VMZW5ndGg7CiAgICAgICAgc2VjdGlvblN0YXJ0ID0gaW5kZXg7CiAgICAgIH0KICAgIH0KICAgIGlmIChidWZmZXIgPT0gbnVsbCkgcmV0dXJuIGhvc3Quc3Vic3RyaW5nKHN0YXJ0LCBlbmQpOwogICAgaWYgKHNlY3Rpb25TdGFydCA8IGVuZCkgewogICAgICBTdHJpbmcgc2xpY2UgPSBob3N0LnN1YnN0cmluZyhzZWN0aW9uU3RhcnQsIGVuZCk7CiAgICAgIGlmICghaXNOb3JtYWxpemVkKSBzbGljZSA9IHNsaWNlLnRvTG93ZXJDYXNlKCk7CiAgICAgIGJ1ZmZlci53cml0ZShzbGljZSk7CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICAvKioKICAgKiBWYWxpZGF0ZXMgc2NoZW1lIGNoYXJhY3RlcnMgYW5kIGRvZXMgY2FzZS1ub3JtYWxpemF0aW9uLgogICAqCiAgICogU2NoZW1lcyBhcmUgY29udmVydGVkIHRvIGxvd2VyIGNhc2UuIFRoZXkgY2Fubm90IGNvbnRhaW4gZXNjYXBlcy4KICAgKi8KICBzdGF0aWMgU3RyaW5nIF9tYWtlU2NoZW1lKFN0cmluZyBzY2hlbWUsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgaWYgKHN0YXJ0ID09IGVuZCkgcmV0dXJuICIiOwogICAgZmluYWwgaW50IGZpcnN0Q29kZVVuaXQgPSBzY2hlbWUuY29kZVVuaXRBdChzdGFydCk7CiAgICBpZiAoIV9pc0FscGhhYmV0aWNDaGFyYWN0ZXIoZmlyc3RDb2RlVW5pdCkpIHsKICAgICAgX2ZhaWwoc2NoZW1lLCBzdGFydCwgIlNjaGVtZSBub3Qgc3RhcnRpbmcgd2l0aCBhbHBoYWJldGljIGNoYXJhY3RlciIpOwogICAgfQogICAgYm9vbCBjb250YWluc1VwcGVyQ2FzZSA9IGZhbHNlOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgZmluYWwgaW50IGNvZGVVbml0ID0gc2NoZW1lLmNvZGVVbml0QXQoaSk7CiAgICAgIGlmICghX2lzU2NoZW1lQ2hhcmFjdGVyKGNvZGVVbml0KSkgewogICAgICAgIF9mYWlsKHNjaGVtZSwgaSwgIklsbGVnYWwgc2NoZW1lIGNoYXJhY3RlciIpOwogICAgICB9CiAgICAgIGlmIChfVVBQRVJfQ0FTRV9BIDw9IGNvZGVVbml0ICYmIGNvZGVVbml0IDw9IF9VUFBFUl9DQVNFX1opIHsKICAgICAgICBjb250YWluc1VwcGVyQ2FzZSA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIHNjaGVtZSA9IHNjaGVtZS5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7CiAgICBpZiAoY29udGFpbnNVcHBlckNhc2UpIHNjaGVtZSA9IHNjaGVtZS50b0xvd2VyQ2FzZSgpOwogICAgcmV0dXJuIF9jYW5vbmljYWxpemVTY2hlbWUoc2NoZW1lKTsKICB9CgogIC8vIENhbm9uaWNhbGl6ZSBhIGZldyBvZnRlbi11c2VkIHNjaGVtZSBzdHJpbmdzLgogIC8vCiAgLy8gVGhpcyBpbXByb3ZlcyBtZW1vcnkgdXNhZ2UgYW5kIG1ha2VzIGNvbXBhcmlzb24gZmFzdGVyLgogIHN0YXRpYyBTdHJpbmcgX2Nhbm9uaWNhbGl6ZVNjaGVtZShTdHJpbmcgc2NoZW1lKSB7CiAgICBpZiAoc2NoZW1lID09ICJodHRwIikgcmV0dXJuICJodHRwIjsKICAgIGlmIChzY2hlbWUgPT0gImZpbGUiKSByZXR1cm4gImZpbGUiOwogICAgaWYgKHNjaGVtZSA9PSAiaHR0cHMiKSByZXR1cm4gImh0dHBzIjsKICAgIGlmIChzY2hlbWUgPT0gInBhY2thZ2UiKSByZXR1cm4gInBhY2thZ2UiOwogICAgcmV0dXJuIHNjaGVtZTsKICB9CgogIHN0YXRpYyBTdHJpbmcgX21ha2VVc2VySW5mbyhTdHJpbmcgdXNlckluZm8sIGludCBzdGFydCwgaW50IGVuZCkgewogICAgaWYgKHVzZXJJbmZvID09IG51bGwpIHJldHVybiAiIjsKICAgIHJldHVybiBfbm9ybWFsaXplT3JTdWJzdHJpbmcodXNlckluZm8sIHN0YXJ0LCBlbmQsIF91c2VyaW5mb1RhYmxlKTsKICB9CgogIHN0YXRpYyBTdHJpbmcgX21ha2VQYXRoKFN0cmluZyBwYXRoLCBpbnQgc3RhcnQsIGludCBlbmQsCiAgICAgIEl0ZXJhYmxlPFN0cmluZz4gcGF0aFNlZ21lbnRzLCBTdHJpbmcgc2NoZW1lLCBib29sIGhhc0F1dGhvcml0eSkgewogICAgYm9vbCBpc0ZpbGUgPSAoc2NoZW1lID09ICJmaWxlIik7CiAgICBib29sIGVuc3VyZUxlYWRpbmdTbGFzaCA9IGlzRmlsZSB8fCBoYXNBdXRob3JpdHk7CiAgICBpZiAocGF0aCA9PSBudWxsICYmIHBhdGhTZWdtZW50cyA9PSBudWxsKSByZXR1cm4gaXNGaWxlID8gIi8iIDogIiI7CiAgICBpZiAocGF0aCAhPSBudWxsICYmIHBhdGhTZWdtZW50cyAhPSBudWxsKSB7CiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoJ0JvdGggcGF0aCBhbmQgcGF0aFNlZ21lbnRzIHNwZWNpZmllZCcpOwogICAgfQogICAgU3RyaW5nIHJlc3VsdDsKICAgIGlmIChwYXRoICE9IG51bGwpIHsKICAgICAgcmVzdWx0ID0gX25vcm1hbGl6ZU9yU3Vic3RyaW5nKHBhdGgsIHN0YXJ0LCBlbmQsIF9wYXRoQ2hhck9yU2xhc2hUYWJsZSwKICAgICAgICAgIGVzY2FwZURlbGltaXRlcnM6IHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgcmVzdWx0ID0gcGF0aFNlZ21lbnRzCiAgICAgICAgICAubWFwKChzKSA9PiBfdXJpRW5jb2RlKF9wYXRoQ2hhclRhYmxlLCBzLCB1dGY4LCBmYWxzZSkpCiAgICAgICAgICAuam9pbigiLyIpOwogICAgfQogICAgaWYgKHJlc3VsdC5pc0VtcHR5KSB7CiAgICAgIGlmIChpc0ZpbGUpIHJldHVybiAiLyI7CiAgICB9IGVsc2UgaWYgKGVuc3VyZUxlYWRpbmdTbGFzaCAmJiAhcmVzdWx0LnN0YXJ0c1dpdGgoJy8nKSkgewogICAgICByZXN1bHQgPSAiLyIgKyByZXN1bHQ7CiAgICB9CiAgICByZXN1bHQgPSBfbm9ybWFsaXplUGF0aChyZXN1bHQsIHNjaGVtZSwgaGFzQXV0aG9yaXR5KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gUGVyZm9ybXMgcGF0aCBub3JtYWxpemF0aW9uIChyZW1vdmUgZG90IHNlZ21lbnRzKSBvbiBhIHBhdGguCiAgLy8vCiAgLy8vIElmIHRoZSBVUkkgaGFzIG5laXRoZXIgc2NoZW1lIG5vciBhdXRob3JpdHksIGl0J3MgY29uc2lkZXJlZCBhCiAgLy8vICJwdXJlIHBhdGgiIGFuZCBub3JtYWxpemF0aW9uIHdvbid0IHJlbW92ZSBsZWFkaW5nICIuLiIgc2VnbWVudHMuCiAgLy8vIE90aGVyd2lzZSBpdCBmb2xsb3dzIHRoZSBSRkMgMzk4NiAicmVtb3ZlIGRvdCBzZWdtZW50cyIgYWxnb3JpdGhtLgogIHN0YXRpYyBTdHJpbmcgX25vcm1hbGl6ZVBhdGgoU3RyaW5nIHBhdGgsIFN0cmluZyBzY2hlbWUsIGJvb2wgaGFzQXV0aG9yaXR5KSB7CiAgICBpZiAoc2NoZW1lLmlzRW1wdHkgJiYgIWhhc0F1dGhvcml0eSAmJiAhcGF0aC5zdGFydHNXaXRoKCcvJykpIHsKICAgICAgcmV0dXJuIF9ub3JtYWxpemVSZWxhdGl2ZVBhdGgocGF0aCwgc2NoZW1lLmlzTm90RW1wdHkgfHwgaGFzQXV0aG9yaXR5KTsKICAgIH0KICAgIHJldHVybiBfcmVtb3ZlRG90U2VnbWVudHMocGF0aCk7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF9tYWtlUXVlcnkoU3RyaW5nIHF1ZXJ5LCBpbnQgc3RhcnQsIGludCBlbmQsCiAgICAgIE1hcDxTdHJpbmcsIGR5bmFtaWMgLypTdHJpbmd8SXRlcmFibGU8U3RyaW5nPiovID4gcXVlcnlQYXJhbWV0ZXJzKSB7CiAgICBpZiAocXVlcnkgIT0gbnVsbCkgewogICAgICBpZiAocXVlcnlQYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgICB0aHJvdyBBcmd1bWVudEVycm9yKCdCb3RoIHF1ZXJ5IGFuZCBxdWVyeVBhcmFtZXRlcnMgc3BlY2lmaWVkJyk7CiAgICAgIH0KICAgICAgcmV0dXJuIF9ub3JtYWxpemVPclN1YnN0cmluZyhxdWVyeSwgc3RhcnQsIGVuZCwgX3F1ZXJ5Q2hhclRhYmxlLAogICAgICAgICAgZXNjYXBlRGVsaW1pdGVyczogdHJ1ZSk7CiAgICB9CiAgICBpZiAocXVlcnlQYXJhbWV0ZXJzID09IG51bGwpIHJldHVybiBudWxsOwoKICAgIHZhciByZXN1bHQgPSBTdHJpbmdCdWZmZXIoKTsKICAgIHZhciBzZXBhcmF0b3IgPSAiIjsKCiAgICB2b2lkIHdyaXRlUGFyYW1ldGVyKFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSkgewogICAgICByZXN1bHQud3JpdGUoc2VwYXJhdG9yKTsKICAgICAgc2VwYXJhdG9yID0gIiYiOwogICAgICByZXN1bHQud3JpdGUoVXJpLmVuY29kZVF1ZXJ5Q29tcG9uZW50KGtleSkpOwogICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5pc05vdEVtcHR5KSB7CiAgICAgICAgcmVzdWx0LndyaXRlKCI9Iik7CiAgICAgICAgcmVzdWx0LndyaXRlKFVyaS5lbmNvZGVRdWVyeUNvbXBvbmVudCh2YWx1ZSkpOwogICAgICB9CiAgICB9CgogICAgcXVlcnlQYXJhbWV0ZXJzLmZvckVhY2goKGtleSwgdmFsdWUpIHsKICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgaXMgU3RyaW5nKSB7CiAgICAgICAgd3JpdGVQYXJhbWV0ZXIoa2V5LCB2YWx1ZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgSXRlcmFibGUgdmFsdWVzID0gdmFsdWU7CiAgICAgICAgZm9yIChTdHJpbmcgdmFsdWUgaW4gdmFsdWVzKSB7CiAgICAgICAgICB3cml0ZVBhcmFtZXRlcihrZXksIHZhbHVlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogIH0KCiAgc3RhdGljIFN0cmluZyBfbWFrZUZyYWdtZW50KFN0cmluZyBmcmFnbWVudCwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBpZiAoZnJhZ21lbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX25vcm1hbGl6ZU9yU3Vic3RyaW5nKGZyYWdtZW50LCBzdGFydCwgZW5kLCBfcXVlcnlDaGFyVGFibGUsCiAgICAgICAgZXNjYXBlRGVsaW1pdGVyczogdHJ1ZSk7CiAgfQoKICAvKioKICAgKiBQZXJmb3JtcyBSRkMgMzk4NiBQZXJjZW50LUVuY29kaW5nIE5vcm1hbGl6YXRpb24uCiAgICoKICAgKiBSZXR1cm5zIGEgcmVwbGFjZW1lbnQgc3RyaW5nIHRoYXQgc2hvdWxkIGJlIHJlcGxhY2UgdGhlIG9yaWdpbmFsIGVzY2FwZS4KICAgKiBSZXR1cm5zIG51bGwgaWYgbm8gcmVwbGFjZW1lbnQgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGVzY2FwZSBpcwogICAqIG5vdCBmb3IgYW4gdW5yZXNlcnZlZCBjaGFyYWN0ZXIgYW5kIGlzIGFscmVhZHkgbm9uLWxvd2VyLWNhc2UuCiAgICoKICAgKiBSZXR1cm5zICIlIiBpZiB0aGUgZXNjYXBlIGlzIGludmFsaWQgKG5vdCB0d28gdmFsaWQgaGV4IGRpZ2l0cyBmb2xsb3dpbmcKICAgKiB0aGUgcGVyY2VudCBzaWduKS4gVGhlIGNhbGxpbmcgY29kZSBzaG91bGQgcmVwbGFjZSB0aGUgcGVyY2VudAogICAqIHNpZ24gd2l0aCAiJTI1IiwgYnV0IGxlYXZlIHRoZSBmb2xsb3dpbmcgdHdvIGNoYXJhY3RlcnMgdW5tb2RpZmllZC4KICAgKgogICAqIElmIFtsb3dlckNhc2VdIGlzIHRydWUsIGEgc2luZ2xlIGNoYXJhY3RlciByZXR1cm5lZCBpcyBhbHdheXMgbG93ZXIgY2FzZSwKICAgKi8KICBzdGF0aWMgU3RyaW5nIF9ub3JtYWxpemVFc2NhcGUoU3RyaW5nIHNvdXJjZSwgaW50IGluZGV4LCBib29sIGxvd2VyQ2FzZSkgewogICAgYXNzZXJ0KHNvdXJjZS5jb2RlVW5pdEF0KGluZGV4KSA9PSBfUEVSQ0VOVCk7CiAgICBpZiAoaW5kZXggKyAyID49IHNvdXJjZS5sZW5ndGgpIHsKICAgICAgcmV0dXJuICIlIjsgLy8gTWFya3MgdGhlIGVzY2FwZSBhcyBpbnZhbGlkLgogICAgfQogICAgaW50IGZpcnN0RGlnaXQgPSBzb3VyY2UuY29kZVVuaXRBdChpbmRleCArIDEpOwogICAgaW50IHNlY29uZERpZ2l0ID0gc291cmNlLmNvZGVVbml0QXQoaW5kZXggKyAyKTsKICAgIGludCBmaXJzdERpZ2l0VmFsdWUgPSBoZXhEaWdpdFZhbHVlKGZpcnN0RGlnaXQpOwogICAgaW50IHNlY29uZERpZ2l0VmFsdWUgPSBoZXhEaWdpdFZhbHVlKHNlY29uZERpZ2l0KTsKICAgIGlmIChmaXJzdERpZ2l0VmFsdWUgPCAwIHx8IHNlY29uZERpZ2l0VmFsdWUgPCAwKSB7CiAgICAgIHJldHVybiAiJSI7IC8vIE1hcmtzIHRoZSBlc2NhcGUgYXMgaW52YWxpZC4KICAgIH0KICAgIGludCB2YWx1ZSA9IGZpcnN0RGlnaXRWYWx1ZSAqIDE2ICsgc2Vjb25kRGlnaXRWYWx1ZTsKICAgIGlmIChfaXNVbnJlc2VydmVkQ2hhcih2YWx1ZSkpIHsKICAgICAgaWYgKGxvd2VyQ2FzZSAmJiBfVVBQRVJfQ0FTRV9BIDw9IHZhbHVlICYmIF9VUFBFUl9DQVNFX1ogPj0gdmFsdWUpIHsKICAgICAgICB2YWx1ZSB8PSAweDIwOwogICAgICB9CiAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHZhbHVlKTsKICAgIH0KICAgIGlmIChmaXJzdERpZ2l0ID49IF9MT1dFUl9DQVNFX0EgfHwgc2Vjb25kRGlnaXQgPj0gX0xPV0VSX0NBU0VfQSkgewogICAgICAvLyBFaXRoZXIgZGlnaXQgaXMgbG93ZXIgY2FzZS4KICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzdHJpbmcoaW5kZXgsIGluZGV4ICsgMykudG9VcHBlckNhc2UoKTsKICAgIH0KICAgIC8vIEVzY2FwZSBpcyByZXRhaW5lZCwgYW5kIGlzIGFscmVhZHkgbm9uLWxvd2VyIGNhc2UsIHNvIHJldHVybiBudWxsIHRvCiAgICAvLyByZXByZXNlbnQgIm5vIHJlcGxhY2VtZW50IG5lY2Vzc2FyeSIuCiAgICByZXR1cm4gbnVsbDsKICB9CgogIHN0YXRpYyBTdHJpbmcgX2VzY2FwZUNoYXIoaW50IGNoYXIpIHsKICAgIGFzc2VydChjaGFyIDw9IDB4MTBmZmZmKTsgLy8gSXQncyBhIHZhbGlkIHVuaWNvZGUgY29kZSBwb2ludC4KICAgIExpc3Q8aW50PiBjb2RlVW5pdHM7CiAgICBpZiAoY2hhciA8IDB4ODApIHsKICAgICAgLy8gQVNDSUksIGEgc2luZ2xlIHBlcmNlbnQgZW5jb2RlZCBzZXF1ZW5jZS4KICAgICAgY29kZVVuaXRzID0gTGlzdCgzKTsKICAgICAgY29kZVVuaXRzWzBdID0gX1BFUkNFTlQ7CiAgICAgIGNvZGVVbml0c1sxXSA9IF9oZXhEaWdpdHMuY29kZVVuaXRBdChjaGFyID4+IDQpOwogICAgICBjb2RlVW5pdHNbMl0gPSBfaGV4RGlnaXRzLmNvZGVVbml0QXQoY2hhciAmIDB4Zik7CiAgICB9IGVsc2UgewogICAgICAvLyBEbyBVVEYtOCBlbmNvZGluZyBvZiBjaGFyYWN0ZXIsIHRoZW4gcGVyY2VudCBlbmNvZGUgYnl0ZXMuCiAgICAgIGludCBmbGFnID0gMHhjMDsgLy8gVGhlIGhpZ2gtYml0IG1hcmtlcnMgb24gdGhlIGZpcnN0IGJ5dGUgb2YgVVRGLTguCiAgICAgIGludCBlbmNvZGVkQnl0ZXMgPSAyOwogICAgICBpZiAoY2hhciA+IDB4N2ZmKSB7CiAgICAgICAgZmxhZyA9IDB4ZTA7CiAgICAgICAgZW5jb2RlZEJ5dGVzID0gMzsKICAgICAgICBpZiAoY2hhciA+IDB4ZmZmZikgewogICAgICAgICAgZW5jb2RlZEJ5dGVzID0gNDsKICAgICAgICAgIGZsYWcgPSAweGYwOwogICAgICAgIH0KICAgICAgfQogICAgICBjb2RlVW5pdHMgPSBMaXN0KDMgKiBlbmNvZGVkQnl0ZXMpOwogICAgICBpbnQgaW5kZXggPSAwOwogICAgICB3aGlsZSAoLS1lbmNvZGVkQnl0ZXMgPj0gMCkgewogICAgICAgIGludCBieXRlID0gKChjaGFyID4+ICg2ICogZW5jb2RlZEJ5dGVzKSkgJiAweDNmKSB8IGZsYWc7CiAgICAgICAgY29kZVVuaXRzW2luZGV4XSA9IF9QRVJDRU5UOwogICAgICAgIGNvZGVVbml0c1tpbmRleCArIDFdID0gX2hleERpZ2l0cy5jb2RlVW5pdEF0KGJ5dGUgPj4gNCk7CiAgICAgICAgY29kZVVuaXRzW2luZGV4ICsgMl0gPSBfaGV4RGlnaXRzLmNvZGVVbml0QXQoYnl0ZSAmIDB4Zik7CiAgICAgICAgaW5kZXggKz0gMzsKICAgICAgICBmbGFnID0gMHg4MDsgLy8gRm9sbG93aW5nIGJ5dGVzIGhhdmUgb25seSBoaWdoIGJpdCBzZXQuCiAgICAgIH0KICAgIH0KICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2Rlcyhjb2RlVW5pdHMpOwogIH0KCiAgLyoqCiAgICogTm9ybWFsaXplcyB1c2luZyBbX25vcm1hbGl6ZV0gb3IgcmV0dXJucyBzdWJzdHJpbmcgb2Ygb3JpZ2luYWwuCiAgICoKICAgKiBJZiBbX25vcm1hbGl6ZV0gcmV0dXJucyBgbnVsbGAgKG9yaWdpbmFsIGNvbnRlbnQgaXMgYWxyZWFkeSBub3JtYWxpemVkKSwKICAgKiB0aGlzIG1ldGhvZHMgcmV0dXJucyB0aGUgc3Vic3RyaW5nIGlmIFtjb21wb25lbnRdIGZyb20gW3N0YXJ0XSB0byBbZW5kXS4KICAgKi8KICBzdGF0aWMgU3RyaW5nIF9ub3JtYWxpemVPclN1YnN0cmluZygKICAgICAgU3RyaW5nIGNvbXBvbmVudCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBMaXN0PGludD4gY2hhclRhYmxlLAogICAgICB7Ym9vbCBlc2NhcGVEZWxpbWl0ZXJzID0gZmFsc2V9KSB7CiAgICByZXR1cm4gX25vcm1hbGl6ZShjb21wb25lbnQsIHN0YXJ0LCBlbmQsIGNoYXJUYWJsZSwKICAgICAgICAgICAgZXNjYXBlRGVsaW1pdGVyczogZXNjYXBlRGVsaW1pdGVycykgPz8KICAgICAgICBjb21wb25lbnQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpOwogIH0KCiAgLyoqCiAgICogUnVucyB0aHJvdWdoIGNvbXBvbmVudCBjaGVja2luZyB0aGF0IGVhY2ggY2hhcmFjdGVyIGlzIHZhbGlkIGFuZAogICAqIG5vcm1hbGl6ZSBwZXJjZW50IGVzY2FwZXMuCiAgICoKICAgKiBVc2VzIFtjaGFyVGFibGVdIHRvIGNoZWNrIGlmIGEgbm9uLWAlYCBjaGFyYWN0ZXIgaXMgYWxsb3dlZC4KICAgKiBFYWNoIGAlYCBjaGFyYWN0ZXIgbXVzdCBiZSBmb2xsb3dlZCBieSB0d28gaGV4IGRpZ2l0cy4KICAgKiBJZiB0aGUgaGV4LWRpZ2l0cyBhcmUgbG93ZXIgY2FzZSBsZXR0ZXJzLCB0aGV5IGFyZSBjb252ZXJ0ZWQgdG8KICAgKiB1cHBlciBjYXNlLgogICAqCiAgICogUmV0dXJucyBgbnVsbGAgaWYgdGhlIG9yaWdpbmFsIGNvbnRlbnQgd2FzIGFscmVhZHkgbm9ybWFsaXplZC4KICAgKi8KICBzdGF0aWMgU3RyaW5nIF9ub3JtYWxpemUoCiAgICAgIFN0cmluZyBjb21wb25lbnQsIGludCBzdGFydCwgaW50IGVuZCwgTGlzdDxpbnQ+IGNoYXJUYWJsZSwKICAgICAge2Jvb2wgZXNjYXBlRGVsaW1pdGVycyA9IGZhbHNlfSkgewogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKICAgIGludCBzZWN0aW9uU3RhcnQgPSBzdGFydDsKICAgIGludCBpbmRleCA9IHN0YXJ0OwogICAgLy8gTG9vcCB3aGlsZSBjaGFyYWN0ZXJzIGFyZSB2YWxpZCBhbmQgZXNjYXBlcyBjb3JyZWN0IGFuZCB1cHBlci1jYXNlLgogICAgd2hpbGUgKGluZGV4IDwgZW5kKSB7CiAgICAgIGludCBjaGFyID0gY29tcG9uZW50LmNvZGVVbml0QXQoaW5kZXgpOwogICAgICBpZiAoY2hhciA8IDEyNyAmJiAoY2hhclRhYmxlW2NoYXIgPj4gNF0gJiAoMSA8PCAoY2hhciAmIDB4MGYpKSkgIT0gMCkgewogICAgICAgIGluZGV4Kys7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgU3RyaW5nIHJlcGxhY2VtZW50OwogICAgICAgIGludCBzb3VyY2VMZW5ndGg7CiAgICAgICAgaWYgKGNoYXIgPT0gX1BFUkNFTlQpIHsKICAgICAgICAgIHJlcGxhY2VtZW50ID0gX25vcm1hbGl6ZUVzY2FwZShjb21wb25lbnQsIGluZGV4LCBmYWxzZSk7CiAgICAgICAgICAvLyBSZXR1cm5zIG51bGwgaWYgd2Ugc2hvdWxkIGtlZXAgdGhlIGV4aXN0aW5nIGVzY2FwZS4KICAgICAgICAgIGlmIChyZXBsYWNlbWVudCA9PSBudWxsKSB7CiAgICAgICAgICAgIGluZGV4ICs9IDM7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgLy8gUmV0dXJucyAiJSIgaWYgd2Ugc2hvdWxkIGVzY2FwZSB0aGUgZXhpc3RpbmcgcGVyY2VudC4KICAgICAgICAgIGlmICgiJSIgPT0gcmVwbGFjZW1lbnQpIHsKICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSAiJTI1IjsKICAgICAgICAgICAgc291cmNlTGVuZ3RoID0gMTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNvdXJjZUxlbmd0aCA9IDM7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICghZXNjYXBlRGVsaW1pdGVycyAmJiBfaXNHZW5lcmFsRGVsaW1pdGVyKGNoYXIpKSB7CiAgICAgICAgICBfZmFpbChjb21wb25lbnQsIGluZGV4LCAiSW52YWxpZCBjaGFyYWN0ZXIiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc291cmNlTGVuZ3RoID0gMTsKICAgICAgICAgIGlmICgoY2hhciAmIDB4RkMwMCkgPT0gMHhEODAwKSB7CiAgICAgICAgICAgIC8vIFBvc3NpYmxlIGxlYWQgc3Vycm9nYXRlLgogICAgICAgICAgICBpZiAoaW5kZXggKyAxIDwgZW5kKSB7CiAgICAgICAgICAgICAgaW50IHRhaWwgPSBjb21wb25lbnQuY29kZVVuaXRBdChpbmRleCArIDEpOwogICAgICAgICAgICAgIGlmICgodGFpbCAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7CiAgICAgICAgICAgICAgICAvLyBUYWlsIHN1cnJvZ2F0ZS4KICAgICAgICAgICAgICAgIHNvdXJjZUxlbmd0aCA9IDI7CiAgICAgICAgICAgICAgICBjaGFyID0gMHgxMDAwMCB8ICgoY2hhciAmIDB4M2ZmKSA8PCAxMCkgfCAodGFpbCAmIDB4M2ZmKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJlcGxhY2VtZW50ID0gX2VzY2FwZUNoYXIoY2hhcik7CiAgICAgICAgfQogICAgICAgIGJ1ZmZlciA/Pz0gU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgYnVmZmVyLndyaXRlKGNvbXBvbmVudC5zdWJzdHJpbmcoc2VjdGlvblN0YXJ0LCBpbmRleCkpOwogICAgICAgIGJ1ZmZlci53cml0ZShyZXBsYWNlbWVudCk7CiAgICAgICAgaW5kZXggKz0gc291cmNlTGVuZ3RoOwogICAgICAgIHNlY3Rpb25TdGFydCA9IGluZGV4OwogICAgICB9CiAgICB9CiAgICBpZiAoYnVmZmVyID09IG51bGwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoc2VjdGlvblN0YXJ0IDwgZW5kKSB7CiAgICAgIGJ1ZmZlci53cml0ZShjb21wb25lbnQuc3Vic3RyaW5nKHNlY3Rpb25TdGFydCwgZW5kKSk7CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICBzdGF0aWMgYm9vbCBfaXNTY2hlbWVDaGFyYWN0ZXIoaW50IGNoKSB7CiAgICByZXR1cm4gY2ggPCAxMjggJiYgKChfc2NoZW1lVGFibGVbY2ggPj4gNF0gJiAoMSA8PCAoY2ggJiAweDBmKSkpICE9IDApOwogIH0KCiAgc3RhdGljIGJvb2wgX2lzR2VuZXJhbERlbGltaXRlcihpbnQgY2gpIHsKICAgIHJldHVybiBjaCA8PSBfUklHSFRfQlJBQ0tFVCAmJgogICAgICAgICgoX2dlbkRlbGltaXRlcnNUYWJsZVtjaCA+PiA0XSAmICgxIDw8IChjaCAmIDB4MGYpKSkgIT0gMCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIFVSSSBpcyBhYnNvbHV0ZS4KICAgKi8KICBib29sIGdldCBpc0Fic29sdXRlID0+IHNjaGVtZSAhPSAiIiAmJiBmcmFnbWVudCA9PSAiIjsKCiAgU3RyaW5nIF9tZXJnZVBhdGhzKFN0cmluZyBiYXNlLCBTdHJpbmcgcmVmZXJlbmNlKSB7CiAgICAvLyBPcHRpbWl6ZSBmb3IgdGhlIGNhc2U6IGFic29sdXRlIGJhc2UsIHJlZmVyZW5jZSBiZWdpbm5pbmcgd2l0aCAiLi4vIi4KICAgIGludCBiYWNrQ291bnQgPSAwOwogICAgaW50IHJlZlN0YXJ0ID0gMDsKICAgIC8vIENvdW50IG51bWJlciBvZiAiLi4vIiBhdCBiZWdpbm5pbmcgb2YgcmVmZXJlbmNlLgogICAgd2hpbGUgKHJlZmVyZW5jZS5zdGFydHNXaXRoKCIuLi8iLCByZWZTdGFydCkpIHsKICAgICAgcmVmU3RhcnQgKz0gMzsKICAgICAgYmFja0NvdW50Kys7CiAgICB9CgogICAgLy8gRHJvcCBsYXN0IHNlZ21lbnQgLSBldmVyeXRoaW5nIGFmdGVyIGxhc3QgJy8nIG9mIGJhc2UuCiAgICBpbnQgYmFzZUVuZCA9IGJhc2UubGFzdEluZGV4T2YoJy8nKTsKICAgIC8vIERyb3AgZXh0cmEgc2VnbWVudHMgZm9yIGVhY2ggbGVhZGluZyAiLi4vIiBvZiByZWZlcmVuY2UuCiAgICB3aGlsZSAoYmFzZUVuZCA+IDAgJiYgYmFja0NvdW50ID4gMCkgewogICAgICBpbnQgbmV3RW5kID0gYmFzZS5sYXN0SW5kZXhPZignLycsIGJhc2VFbmQgLSAxKTsKICAgICAgaWYgKG5ld0VuZCA8IDApIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBpbnQgZGVsdGEgPSBiYXNlRW5kIC0gbmV3RW5kOwogICAgICAvLyBJZiB3ZSBzZWUgYSAiLiIgb3IgIi4uIiBzZWdtZW50IGluIGJhc2UsIHN0b3AgaGVyZSBhbmQgbGV0CiAgICAgIC8vIF9yZW1vdmVEb3RTZWdtZW50cyBoYW5kbGUgaXQuCiAgICAgIGlmICgoZGVsdGEgPT0gMiB8fCBkZWx0YSA9PSAzKSAmJgogICAgICAgICAgYmFzZS5jb2RlVW5pdEF0KG5ld0VuZCArIDEpID09IF9ET1QgJiYKICAgICAgICAgIChkZWx0YSA9PSAyIHx8IGJhc2UuY29kZVVuaXRBdChuZXdFbmQgKyAyKSA9PSBfRE9UKSkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGJhc2VFbmQgPSBuZXdFbmQ7CiAgICAgIGJhY2tDb3VudC0tOwogICAgfQogICAgcmV0dXJuIGJhc2UucmVwbGFjZVJhbmdlKAogICAgICAgIGJhc2VFbmQgKyAxLCBudWxsLCByZWZlcmVuY2Uuc3Vic3RyaW5nKHJlZlN0YXJ0IC0gMyAqIGJhY2tDb3VudCkpOwogIH0KCiAgLy8vIE1ha2UgYSBndWVzcyBhdCB3aGV0aGVyIGEgcGF0aCBjb250YWlucyBhIGAuLmAgb3IgYC5gIHNlZ21lbnQuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBwcmltaXRpdmUgdGVzdCB0aGF0IGNhbiBjYXVzZSBmYWxzZSBwb3NpdGl2ZXMuCiAgLy8vIEl0J3Mgb25seSB1c2VkIHRvIGF2b2lkIGEgbW9yZSBleHBlbnNpdmUgb3BlcmF0aW9uIGluIHRoZSBjYXNlIHdoZXJlCiAgLy8vIGl0J3Mgbm90IG5lY2Vzc2FyeS4KICBzdGF0aWMgYm9vbCBfbWF5Q29udGFpbkRvdFNlZ21lbnRzKFN0cmluZyBwYXRoKSB7CiAgICBpZiAocGF0aC5zdGFydHNXaXRoKCcuJykpIHJldHVybiB0cnVlOwogICAgaW50IGluZGV4ID0gcGF0aC5pbmRleE9mKCIvLiIpOwogICAgcmV0dXJuIGluZGV4ICE9IC0xOwogIH0KCiAgLy8vIFJlbW92ZXMgJy4nIGFuZCAnLi4nIHNlZ21lbnRzIGZyb20gYSBwYXRoLgogIC8vLwogIC8vLyBGb2xsb3dzIHRoZSBSRkMgMjk4NiAicmVtb3ZlIGRvdCBzZWdtZW50cyIgYWxnb3JpdGhtLgogIC8vLyBUaGlzIGFsZ29yaXRobSBpcyBvbmx5IHVzZWQgb24gcGF0aHMgb2YgVVJJcyB3aXRoIGEgc2NoZW1lLAogIC8vLyBhbmQgaXQgdHJlYXRzIHRoZSBwYXRoIGFzIGlmIGl0IGlzIGFic29sdXRlIChsZWFkaW5nICcuLicgYXJlIHJlbW92ZWQpLgogIHN0YXRpYyBTdHJpbmcgX3JlbW92ZURvdFNlZ21lbnRzKFN0cmluZyBwYXRoKSB7CiAgICBpZiAoIV9tYXlDb250YWluRG90U2VnbWVudHMocGF0aCkpIHJldHVybiBwYXRoOwogICAgYXNzZXJ0KHBhdGguaXNOb3RFbXB0eSk7IC8vIEFuIGVtcHR5IHBhdGggd291bGQgbm90IGhhdmUgZG90IHNlZ21lbnRzLgogICAgTGlzdDxTdHJpbmc+IG91dHB1dCA9IFtdOwogICAgYm9vbCBhcHBlbmRTbGFzaCA9IGZhbHNlOwogICAgZm9yIChTdHJpbmcgc2VnbWVudCBpbiBwYXRoLnNwbGl0KCIvIikpIHsKICAgICAgYXBwZW5kU2xhc2ggPSBmYWxzZTsKICAgICAgaWYgKHNlZ21lbnQgPT0gIi4uIikgewogICAgICAgIGlmIChvdXRwdXQuaXNOb3RFbXB0eSkgewogICAgICAgICAgb3V0cHV0LnJlbW92ZUxhc3QoKTsKICAgICAgICAgIGlmIChvdXRwdXQuaXNFbXB0eSkgewogICAgICAgICAgICBvdXRwdXQuYWRkKCIiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYXBwZW5kU2xhc2ggPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKCIuIiA9PSBzZWdtZW50KSB7CiAgICAgICAgYXBwZW5kU2xhc2ggPSB0cnVlOwogICAgICB9IGVsc2UgewogICAgICAgIG91dHB1dC5hZGQoc2VnbWVudCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChhcHBlbmRTbGFzaCkgb3V0cHV0LmFkZCgiIik7CiAgICByZXR1cm4gb3V0cHV0LmpvaW4oIi8iKTsKICB9CgogIC8vLyBSZW1vdmVzIGFsbCBgLmAgc2VnbWVudHMgYW5kIGFueSBub24tbGVhZGluZyBgLi5gIHNlZ21lbnRzLgogIC8vLwogIC8vLyBJZiB0aGUgcGF0aCBzdGFydHMgd2l0aCBzb21ldGhpbmcgdGhhdCBsb29rcyBsaWtlIGEgc2NoZW1lLAogIC8vLyBhbmQgW2FsbG93U2NoZW1lXSBpcyBmYWxzZSwgdGhlIGNvbG9uIGlzIGVzY2FwZWQuCiAgLy8vCiAgLy8vIFJlbW92aW5nIHRoZSAiLi4iIGZyb20gYSAiYmFyL2Zvby8uLiIgc2VxdWVuY2UgcmVzdWx0cyBpbiAiYmFyLyIKICAvLy8gKHRyYWlsaW5nICIvIikuIElmIHRoZSBlbnRpcmUgcGF0aCBpcyByZW1vdmVkIChiZWNhdXNlIGl0IGNvbnRhaW5zIGFzCiAgLy8vIG1hbnkgIi4uIiBzZWdtZW50cyBhcyByZWFsIHNlZ21lbnRzKSwgdGhlIHJlc3VsdCBpcyAiLi8iLgogIC8vLyBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIGFuIGVtcHR5IHN0cmluZywgd2hpY2ggcmVwcmVzZW50cyAibm8gcGF0aCIsCiAgLy8vIHdoZW4geW91IHJlc29sdmUgaXQgYWdhaW5zdCBhIGJhc2UgVVJJIHdpdGggYSBwYXRoIHdpdGggYSBub24tZW1wdHkKICAvLy8gZmluYWwgc2VnbWVudC4KICBzdGF0aWMgU3RyaW5nIF9ub3JtYWxpemVSZWxhdGl2ZVBhdGgoU3RyaW5nIHBhdGgsIGJvb2wgYWxsb3dTY2hlbWUpIHsKICAgIGFzc2VydCghcGF0aC5zdGFydHNXaXRoKCcvJykpOyAvLyBPbmx5IGdldCBjYWxsZWQgZm9yIHJlbGF0aXZlIHBhdGhzLgogICAgaWYgKCFfbWF5Q29udGFpbkRvdFNlZ21lbnRzKHBhdGgpKSB7CiAgICAgIGlmICghYWxsb3dTY2hlbWUpIHBhdGggPSBfZXNjYXBlU2NoZW1lKHBhdGgpOwogICAgICByZXR1cm4gcGF0aDsKICAgIH0KICAgIGFzc2VydChwYXRoLmlzTm90RW1wdHkpOyAvLyBBbiBlbXB0eSBwYXRoIHdvdWxkIG5vdCBoYXZlIGRvdCBzZWdtZW50cy4KICAgIExpc3Q8U3RyaW5nPiBvdXRwdXQgPSBbXTsKICAgIGJvb2wgYXBwZW5kU2xhc2ggPSBmYWxzZTsKICAgIGZvciAoU3RyaW5nIHNlZ21lbnQgaW4gcGF0aC5zcGxpdCgiLyIpKSB7CiAgICAgIGFwcGVuZFNsYXNoID0gZmFsc2U7CiAgICAgIGlmICgiLi4iID09IHNlZ21lbnQpIHsKICAgICAgICBpZiAoIW91dHB1dC5pc0VtcHR5ICYmIG91dHB1dC5sYXN0ICE9ICIuLiIpIHsKICAgICAgICAgIG91dHB1dC5yZW1vdmVMYXN0KCk7CiAgICAgICAgICBhcHBlbmRTbGFzaCA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG91dHB1dC5hZGQoIi4uIik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKCIuIiA9PSBzZWdtZW50KSB7CiAgICAgICAgYXBwZW5kU2xhc2ggPSB0cnVlOwogICAgICB9IGVsc2UgewogICAgICAgIG91dHB1dC5hZGQoc2VnbWVudCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChvdXRwdXQuaXNFbXB0eSB8fCAob3V0cHV0Lmxlbmd0aCA9PSAxICYmIG91dHB1dFswXS5pc0VtcHR5KSkgewogICAgICByZXR1cm4gIi4vIjsKICAgIH0KICAgIGlmIChhcHBlbmRTbGFzaCB8fCBvdXRwdXQubGFzdCA9PSAnLi4nKSBvdXRwdXQuYWRkKCIiKTsKICAgIGlmICghYWxsb3dTY2hlbWUpIG91dHB1dFswXSA9IF9lc2NhcGVTY2hlbWUob3V0cHV0WzBdKTsKICAgIHJldHVybiBvdXRwdXQuam9pbigiLyIpOwogIH0KCiAgLy8vIElmIFtwYXRoXSBzdGFydHMgd2l0aCBhIHZhbGlkIHNjaGVtZSwgZXNjYXBlIHRoZSBwZXJjZW50LgogIHN0YXRpYyBTdHJpbmcgX2VzY2FwZVNjaGVtZShTdHJpbmcgcGF0aCkgewogICAgaWYgKHBhdGgubGVuZ3RoID49IDIgJiYgX2lzQWxwaGFiZXRpY0NoYXJhY3RlcihwYXRoLmNvZGVVbml0QXQoMCkpKSB7CiAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykgewogICAgICAgIGludCBjaGFyID0gcGF0aC5jb2RlVW5pdEF0KGkpOwogICAgICAgIGlmIChjaGFyID09IF9DT0xPTikgewogICAgICAgICAgcmV0dXJuICIke3BhdGguc3Vic3RyaW5nKDAsIGkpfSUzQSR7cGF0aC5zdWJzdHJpbmcoaSArIDEpfSI7CiAgICAgICAgfQogICAgICAgIGlmIChjaGFyID4gMTI3IHx8CiAgICAgICAgICAgICgoX3NjaGVtZVRhYmxlW2NoYXIgPj4gNF0gJiAoMSA8PCAoY2hhciAmIDB4MGYpKSkgPT0gMCkpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHBhdGg7CiAgfQoKICBVcmkgcmVzb2x2ZShTdHJpbmcgcmVmZXJlbmNlKSB7CiAgICByZXR1cm4gcmVzb2x2ZVVyaShVcmkucGFyc2UocmVmZXJlbmNlKSk7CiAgfQoKICBVcmkgcmVzb2x2ZVVyaShVcmkgcmVmZXJlbmNlKSB7CiAgICAvLyBGcm9tIFJGQyAzOTg2LgogICAgU3RyaW5nIHRhcmdldFNjaGVtZTsKICAgIFN0cmluZyB0YXJnZXRVc2VySW5mbyA9ICIiOwogICAgU3RyaW5nIHRhcmdldEhvc3Q7CiAgICBpbnQgdGFyZ2V0UG9ydDsKICAgIFN0cmluZyB0YXJnZXRQYXRoOwogICAgU3RyaW5nIHRhcmdldFF1ZXJ5OwogICAgaWYgKHJlZmVyZW5jZS5zY2hlbWUuaXNOb3RFbXB0eSkgewogICAgICB0YXJnZXRTY2hlbWUgPSByZWZlcmVuY2Uuc2NoZW1lOwogICAgICBpZiAocmVmZXJlbmNlLmhhc0F1dGhvcml0eSkgewogICAgICAgIHRhcmdldFVzZXJJbmZvID0gcmVmZXJlbmNlLnVzZXJJbmZvOwogICAgICAgIHRhcmdldEhvc3QgPSByZWZlcmVuY2UuaG9zdDsKICAgICAgICB0YXJnZXRQb3J0ID0gcmVmZXJlbmNlLmhhc1BvcnQgPyByZWZlcmVuY2UucG9ydCA6IG51bGw7CiAgICAgIH0KICAgICAgdGFyZ2V0UGF0aCA9IF9yZW1vdmVEb3RTZWdtZW50cyhyZWZlcmVuY2UucGF0aCk7CiAgICAgIGlmIChyZWZlcmVuY2UuaGFzUXVlcnkpIHsKICAgICAgICB0YXJnZXRRdWVyeSA9IHJlZmVyZW5jZS5xdWVyeTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdGFyZ2V0U2NoZW1lID0gdGhpcy5zY2hlbWU7CiAgICAgIGlmIChyZWZlcmVuY2UuaGFzQXV0aG9yaXR5KSB7CiAgICAgICAgdGFyZ2V0VXNlckluZm8gPSByZWZlcmVuY2UudXNlckluZm87CiAgICAgICAgdGFyZ2V0SG9zdCA9IHJlZmVyZW5jZS5ob3N0OwogICAgICAgIHRhcmdldFBvcnQgPQogICAgICAgICAgICBfbWFrZVBvcnQocmVmZXJlbmNlLmhhc1BvcnQgPyByZWZlcmVuY2UucG9ydCA6IG51bGwsIHRhcmdldFNjaGVtZSk7CiAgICAgICAgdGFyZ2V0UGF0aCA9IF9yZW1vdmVEb3RTZWdtZW50cyhyZWZlcmVuY2UucGF0aCk7CiAgICAgICAgaWYgKHJlZmVyZW5jZS5oYXNRdWVyeSkgdGFyZ2V0UXVlcnkgPSByZWZlcmVuY2UucXVlcnk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGFyZ2V0VXNlckluZm8gPSB0aGlzLl91c2VySW5mbzsKICAgICAgICB0YXJnZXRIb3N0ID0gdGhpcy5faG9zdDsKICAgICAgICB0YXJnZXRQb3J0ID0gdGhpcy5fcG9ydDsKICAgICAgICBpZiAocmVmZXJlbmNlLnBhdGggPT0gIiIpIHsKICAgICAgICAgIHRhcmdldFBhdGggPSB0aGlzLnBhdGg7CiAgICAgICAgICBpZiAocmVmZXJlbmNlLmhhc1F1ZXJ5KSB7CiAgICAgICAgICAgIHRhcmdldFF1ZXJ5ID0gcmVmZXJlbmNlLnF1ZXJ5OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGFyZ2V0UXVlcnkgPSB0aGlzLl9xdWVyeTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKHJlZmVyZW5jZS5oYXNBYnNvbHV0ZVBhdGgpIHsKICAgICAgICAgICAgdGFyZ2V0UGF0aCA9IF9yZW1vdmVEb3RTZWdtZW50cyhyZWZlcmVuY2UucGF0aCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBSRkMgMzk4NiBiZWhhdmlvciBmb3IgbWVyZ2luZy4KICAgICAgICAgICAgaWYgKHRoaXMuaGFzRW1wdHlQYXRoKSB7CiAgICAgICAgICAgICAgaWYgKCF0aGlzLmhhc0F1dGhvcml0eSkgewogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmhhc1NjaGVtZSkgewogICAgICAgICAgICAgICAgICAvLyBLZWVwIHRoZSBwYXRoIHJlbGF0aXZlIGlmIG5vIHNjaGVtZSBvciBhdXRob3JpdHkuCiAgICAgICAgICAgICAgICAgIHRhcmdldFBhdGggPSByZWZlcmVuY2UucGF0aDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIGRvdC1zZWdtZW50cyBpZiB0aGUgcGF0aCBpcyBwdXQKICAgICAgICAgICAgICAgICAgLy8gYmVuZWF0aCBhIHNjaGVtZS4KICAgICAgICAgICAgICAgICAgdGFyZ2V0UGF0aCA9IF9yZW1vdmVEb3RTZWdtZW50cyhyZWZlcmVuY2UucGF0aCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIFJGQyBhbGdvcml0aG0gZm9yIGJhc2Ugd2l0aCBhdXRob3JpdHkgYW5kIGVtcHR5IHBhdGguCiAgICAgICAgICAgICAgICB0YXJnZXRQYXRoID0gX3JlbW92ZURvdFNlZ21lbnRzKCIvIiArIHJlZmVyZW5jZS5wYXRoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdmFyIG1lcmdlZFBhdGggPSBfbWVyZ2VQYXRocyh0aGlzLnBhdGgsIHJlZmVyZW5jZS5wYXRoKTsKICAgICAgICAgICAgICBpZiAodGhpcy5oYXNTY2hlbWUgfHwgdGhpcy5oYXNBdXRob3JpdHkgfHwgdGhpcy5oYXNBYnNvbHV0ZVBhdGgpIHsKICAgICAgICAgICAgICAgIHRhcmdldFBhdGggPSBfcmVtb3ZlRG90U2VnbWVudHMobWVyZ2VkUGF0aCk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIE5vbi1SRkMgMzk4NiBiZWhhdmlvci4KICAgICAgICAgICAgICAgIC8vIElmIGJvdGggYmFzZSBhbmQgcmVmZXJlbmNlIGFyZSByZWxhdGl2ZSBwYXRocywKICAgICAgICAgICAgICAgIC8vIGFsbG93IHRoZSBtZXJnZWQgcGF0aCB0byBzdGFydCB3aXRoICIuLiIuCiAgICAgICAgICAgICAgICAvLyBUaGUgUkZDIG9ubHkgc3BlY2lmaWVzIHRoZSBjYXNlIHdoZXJlIHRoZSBiYXNlIGhhcyBhIHNjaGVtZS4KICAgICAgICAgICAgICAgIHRhcmdldFBhdGggPSBfbm9ybWFsaXplUmVsYXRpdmVQYXRoKAogICAgICAgICAgICAgICAgICAgIG1lcmdlZFBhdGgsIHRoaXMuaGFzU2NoZW1lIHx8IHRoaXMuaGFzQXV0aG9yaXR5KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChyZWZlcmVuY2UuaGFzUXVlcnkpIHRhcmdldFF1ZXJ5ID0gcmVmZXJlbmNlLnF1ZXJ5OwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgU3RyaW5nIGZyYWdtZW50ID0gcmVmZXJlbmNlLmhhc0ZyYWdtZW50ID8gcmVmZXJlbmNlLmZyYWdtZW50IDogbnVsbDsKICAgIHJldHVybiBfVXJpLl9pbnRlcm5hbCh0YXJnZXRTY2hlbWUsIHRhcmdldFVzZXJJbmZvLCB0YXJnZXRIb3N0LCB0YXJnZXRQb3J0LAogICAgICAgIHRhcmdldFBhdGgsIHRhcmdldFF1ZXJ5LCBmcmFnbWVudCk7CiAgfQoKICBib29sIGdldCBoYXNTY2hlbWUgPT4gc2NoZW1lLmlzTm90RW1wdHk7CgogIGJvb2wgZ2V0IGhhc0F1dGhvcml0eSA9PiBfaG9zdCAhPSBudWxsOwoKICBib29sIGdldCBoYXNQb3J0ID0+IF9wb3J0ICE9IG51bGw7CgogIGJvb2wgZ2V0IGhhc1F1ZXJ5ID0+IF9xdWVyeSAhPSBudWxsOwoKICBib29sIGdldCBoYXNGcmFnbWVudCA9PiBfZnJhZ21lbnQgIT0gbnVsbDsKCiAgYm9vbCBnZXQgaGFzRW1wdHlQYXRoID0+IHBhdGguaXNFbXB0eTsKCiAgYm9vbCBnZXQgaGFzQWJzb2x1dGVQYXRoID0+IHBhdGguc3RhcnRzV2l0aCgnLycpOwoKICBTdHJpbmcgZ2V0IG9yaWdpbiB7CiAgICBpZiAoc2NoZW1lID09ICIiKSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoIkNhbm5vdCB1c2Ugb3JpZ2luIHdpdGhvdXQgYSBzY2hlbWU6ICR0aGlzIik7CiAgICB9CiAgICBpZiAoc2NoZW1lICE9ICJodHRwIiAmJiBzY2hlbWUgIT0gImh0dHBzIikgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKAogICAgICAgICAgIk9yaWdpbiBpcyBvbmx5IGFwcGxpY2FibGUgc2NoZW1lcyBodHRwIGFuZCBodHRwczogJHRoaXMiKTsKICAgIH0KICAgIGlmIChfaG9zdCA9PSBudWxsIHx8IF9ob3N0ID09ICIiKSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoCiAgICAgICAgICAiQSAkc2NoZW1lOiBVUkkgc2hvdWxkIGhhdmUgYSBub24tZW1wdHkgaG9zdCBuYW1lOiAkdGhpcyIpOwogICAgfQogICAgaWYgKF9wb3J0ID09IG51bGwpIHJldHVybiAiJHNjaGVtZTovLyRfaG9zdCI7CiAgICByZXR1cm4gIiRzY2hlbWU6Ly8kX2hvc3Q6JF9wb3J0IjsKICB9CgogIFN0cmluZyB0b0ZpbGVQYXRoKHtib29sIHdpbmRvd3N9KSB7CiAgICBpZiAoc2NoZW1lICE9ICIiICYmIHNjaGVtZSAhPSAiZmlsZSIpIHsKICAgICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGV4dHJhY3QgYSBmaWxlIHBhdGggZnJvbSBhICRzY2hlbWUgVVJJIik7CiAgICB9CiAgICBpZiAocXVlcnkgIT0gIiIpIHsKICAgICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAgICJDYW5ub3QgZXh0cmFjdCBhIGZpbGUgcGF0aCBmcm9tIGEgVVJJIHdpdGggYSBxdWVyeSBjb21wb25lbnQiKTsKICAgIH0KICAgIGlmIChmcmFnbWVudCAhPSAiIikgewogICAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgIkNhbm5vdCBleHRyYWN0IGEgZmlsZSBwYXRoIGZyb20gYSBVUkkgd2l0aCBhIGZyYWdtZW50IGNvbXBvbmVudCIpOwogICAgfQogICAgd2luZG93cyA/Pz0gX2lzV2luZG93czsKICAgIHJldHVybiB3aW5kb3dzID8gX3RvV2luZG93c0ZpbGVQYXRoKHRoaXMpIDogX3RvRmlsZVBhdGgoKTsKICB9CgogIFN0cmluZyBfdG9GaWxlUGF0aCgpIHsKICAgIGlmIChoYXNBdXRob3JpdHkgJiYgaG9zdCAhPSAiIikgewogICAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgIkNhbm5vdCBleHRyYWN0IGEgbm9uLVdpbmRvd3MgZmlsZSBwYXRoIGZyb20gYSBmaWxlIFVSSSAiCiAgICAgICAgICAid2l0aCBhbiBhdXRob3JpdHkiKTsKICAgIH0KICAgIC8vIFVzZSBwYXRoIHNlZ21lbnRzIHRvIGhhdmUgYW55IGVzY2FwZXMgdW5lc2NhcGVkLgogICAgdmFyIHBhdGhTZWdtZW50cyA9IHRoaXMucGF0aFNlZ21lbnRzOwogICAgX2NoZWNrTm9uV2luZG93c1BhdGhSZXNlcnZlZENoYXJhY3RlcnMocGF0aFNlZ21lbnRzLCBmYWxzZSk7CiAgICB2YXIgcmVzdWx0ID0gU3RyaW5nQnVmZmVyKCk7CiAgICBpZiAoaGFzQWJzb2x1dGVQYXRoKSByZXN1bHQud3JpdGUoIi8iKTsKICAgIHJlc3VsdC53cml0ZUFsbChwYXRoU2VnbWVudHMsICIvIik7CiAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF90b1dpbmRvd3NGaWxlUGF0aChVcmkgdXJpKSB7CiAgICBib29sIGhhc0RyaXZlTGV0dGVyID0gZmFsc2U7CiAgICB2YXIgc2VnbWVudHMgPSB1cmkucGF0aFNlZ21lbnRzOwogICAgaWYgKHNlZ21lbnRzLmxlbmd0aCA+IDAgJiYKICAgICAgICBzZWdtZW50c1swXS5sZW5ndGggPT0gMiAmJgogICAgICAgIHNlZ21lbnRzWzBdLmNvZGVVbml0QXQoMSkgPT0gX0NPTE9OKSB7CiAgICAgIF9jaGVja1dpbmRvd3NEcml2ZUxldHRlcihzZWdtZW50c1swXS5jb2RlVW5pdEF0KDApLCBmYWxzZSk7CiAgICAgIF9jaGVja1dpbmRvd3NQYXRoUmVzZXJ2ZWRDaGFyYWN0ZXJzKHNlZ21lbnRzLCBmYWxzZSwgMSk7CiAgICAgIGhhc0RyaXZlTGV0dGVyID0gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIF9jaGVja1dpbmRvd3NQYXRoUmVzZXJ2ZWRDaGFyYWN0ZXJzKHNlZ21lbnRzLCBmYWxzZSwgMCk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gU3RyaW5nQnVmZmVyKCk7CiAgICBpZiAodXJpLmhhc0Fic29sdXRlUGF0aCAmJiAhaGFzRHJpdmVMZXR0ZXIpIHJlc3VsdC53cml0ZShyIlwiKTsKICAgIGlmICh1cmkuaGFzQXV0aG9yaXR5KSB7CiAgICAgIHZhciBob3N0ID0gdXJpLmhvc3Q7CiAgICAgIGlmIChob3N0LmlzTm90RW1wdHkpIHsKICAgICAgICByZXN1bHQud3JpdGUociJcIik7CiAgICAgICAgcmVzdWx0LndyaXRlKGhvc3QpOwogICAgICAgIHJlc3VsdC53cml0ZShyIlwiKTsKICAgICAgfQogICAgfQogICAgcmVzdWx0LndyaXRlQWxsKHNlZ21lbnRzLCByIlwiKTsKICAgIGlmIChoYXNEcml2ZUxldHRlciAmJiBzZWdtZW50cy5sZW5ndGggPT0gMSkgcmVzdWx0LndyaXRlKHIiXCIpOwogICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogIH0KCiAgYm9vbCBnZXQgX2lzUGF0aEFic29sdXRlIHsKICAgIHJldHVybiBwYXRoICE9IG51bGwgJiYgcGF0aC5zdGFydHNXaXRoKCcvJyk7CiAgfQoKICB2b2lkIF93cml0ZUF1dGhvcml0eShTdHJpbmdTaW5rIHNzKSB7CiAgICBpZiAoX3VzZXJJbmZvLmlzTm90RW1wdHkpIHsKICAgICAgc3Mud3JpdGUoX3VzZXJJbmZvKTsKICAgICAgc3Mud3JpdGUoIkAiKTsKICAgIH0KICAgIGlmIChfaG9zdCAhPSBudWxsKSBzcy53cml0ZShfaG9zdCk7CiAgICBpZiAoX3BvcnQgIT0gbnVsbCkgewogICAgICBzcy53cml0ZSgiOiIpOwogICAgICBzcy53cml0ZShfcG9ydCk7CiAgICB9CiAgfQoKICAvKioKICAgKiBBY2Nlc3MgdGhlIHN0cnVjdHVyZSBvZiBhIGBkYXRhOmAgVVJJLgogICAqCiAgICogUmV0dXJucyBhIFtVcmlEYXRhXSBvYmplY3QgZm9yIGBkYXRhOmAgVVJJcyBhbmQgYG51bGxgIGZvciBhbGwgb3RoZXIKICAgKiBVUklzLgogICAqIFRoZSBbVXJpRGF0YV0gb2JqZWN0IGNhbiBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgbWVkaWEgdHlwZSBhbmQgZGF0YQogICAqIG9mIGEgYGRhdGE6YCBVUkkuCiAgICovCiAgVXJpRGF0YSBnZXQgZGF0YSA9PiAoc2NoZW1lID09ICJkYXRhIikgPyBVcmlEYXRhLmZyb21VcmkodGhpcykgOiBudWxsOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gX3RleHQgPz89IF9pbml0aWFsaXplVGV4dCgpOwogIH0KCiAgU3RyaW5nIF9pbml0aWFsaXplVGV4dCgpIHsKICAgIGFzc2VydChfdGV4dCA9PSBudWxsKTsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IFN0cmluZ0J1ZmZlcigpOwogICAgaWYgKHNjaGVtZS5pc05vdEVtcHR5KSBzYi4ud3JpdGUoc2NoZW1lKS4ud3JpdGUoIjoiKTsKICAgIGlmIChoYXNBdXRob3JpdHkgfHwgKHNjaGVtZSA9PSAiZmlsZSIpKSB7CiAgICAgIC8vIEZpbGUgVVJJUyBhbHdheXMgaGF2ZSB0aGUgYXV0aG9yaXR5LCBldmVuIGlmIGl0IGlzIGVtcHR5LgogICAgICAvLyBUaGUgZW1wdHkgVVJJIG1lYW5zICJsb2NhbGhvc3QiLgogICAgICBzYi53cml0ZSgiLy8iKTsKICAgICAgX3dyaXRlQXV0aG9yaXR5KHNiKTsKICAgIH0KICAgIHNiLndyaXRlKHBhdGgpOwogICAgaWYgKF9xdWVyeSAhPSBudWxsKSBzYi4ud3JpdGUoIj8iKS4ud3JpdGUoX3F1ZXJ5KTsKICAgIGlmIChfZnJhZ21lbnQgIT0gbnVsbCkgc2IuLndyaXRlKCIjIikuLndyaXRlKF9mcmFnbWVudCk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gb3RoZXIgaXMgVXJpICYmCiAgICAgICAgc2NoZW1lID09IG90aGVyLnNjaGVtZSAmJgogICAgICAgIGhhc0F1dGhvcml0eSA9PSBvdGhlci5oYXNBdXRob3JpdHkgJiYKICAgICAgICB1c2VySW5mbyA9PSBvdGhlci51c2VySW5mbyAmJgogICAgICAgIGhvc3QgPT0gb3RoZXIuaG9zdCAmJgogICAgICAgIHBvcnQgPT0gb3RoZXIucG9ydCAmJgogICAgICAgIHBhdGggPT0gb3RoZXIucGF0aCAmJgogICAgICAgIGhhc1F1ZXJ5ID09IG90aGVyLmhhc1F1ZXJ5ICYmCiAgICAgICAgcXVlcnkgPT0gb3RoZXIucXVlcnkgJiYKICAgICAgICBoYXNGcmFnbWVudCA9PSBvdGhlci5oYXNGcmFnbWVudCAmJgogICAgICAgIGZyYWdtZW50ID09IG90aGVyLmZyYWdtZW50OwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gX2hhc2hDb2RlQ2FjaGUgPz89IHRvU3RyaW5nKCkuaGFzaENvZGU7CiAgfQoKICBzdGF0aWMgTGlzdDxTdHJpbmc+IF9jcmVhdGVMaXN0KCkgPT4gPFN0cmluZz5bXTsKCiAgc3RhdGljIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gX3NwbGl0UXVlcnlTdHJpbmdBbGwoU3RyaW5nIHF1ZXJ5LAogICAgICB7RW5jb2RpbmcgZW5jb2RpbmcgPSB1dGY4fSkgewogICAgdmFyIHJlc3VsdCA9IDxTdHJpbmcsIExpc3Q8U3RyaW5nPj57fTsKICAgIGludCBpID0gMDsKICAgIGludCBzdGFydCA9IDA7CiAgICBpbnQgZXF1YWxzSW5kZXggPSAtMTsKCiAgICB2b2lkIHBhcnNlUGFpcihpbnQgc3RhcnQsIGludCBlcXVhbHNJbmRleCwgaW50IGVuZCkgewogICAgICBTdHJpbmcga2V5OwogICAgICBTdHJpbmcgdmFsdWU7CiAgICAgIGlmIChzdGFydCA9PSBlbmQpIHJldHVybjsKICAgICAgaWYgKGVxdWFsc0luZGV4IDwgMCkgewogICAgICAgIGtleSA9IF91cmlEZWNvZGUocXVlcnksIHN0YXJ0LCBlbmQsIGVuY29kaW5nLCB0cnVlKTsKICAgICAgICB2YWx1ZSA9ICIiOwogICAgICB9IGVsc2UgewogICAgICAgIGtleSA9IF91cmlEZWNvZGUocXVlcnksIHN0YXJ0LCBlcXVhbHNJbmRleCwgZW5jb2RpbmcsIHRydWUpOwogICAgICAgIHZhbHVlID0gX3VyaURlY29kZShxdWVyeSwgZXF1YWxzSW5kZXggKyAxLCBlbmQsIGVuY29kaW5nLCB0cnVlKTsKICAgICAgfQogICAgICByZXN1bHQucHV0SWZBYnNlbnQoa2V5LCBfY3JlYXRlTGlzdCkuYWRkKHZhbHVlKTsKICAgIH0KCiAgICB3aGlsZSAoaSA8IHF1ZXJ5Lmxlbmd0aCkgewogICAgICBpbnQgY2hhciA9IHF1ZXJ5LmNvZGVVbml0QXQoaSk7CiAgICAgIGlmIChjaGFyID09IF9FUVVBTFMpIHsKICAgICAgICBpZiAoZXF1YWxzSW5kZXggPCAwKSBlcXVhbHNJbmRleCA9IGk7CiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PSBfQU1QRVJTQU5EKSB7CiAgICAgICAgcGFyc2VQYWlyKHN0YXJ0LCBlcXVhbHNJbmRleCwgaSk7CiAgICAgICAgc3RhcnQgPSBpICsgMTsKICAgICAgICBlcXVhbHNJbmRleCA9IC0xOwogICAgICB9CiAgICAgIGkrKzsKICAgIH0KICAgIHBhcnNlUGFpcihzdGFydCwgZXF1YWxzSW5kZXgsIGkpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBTdHJpbmcgX3VyaUVuY29kZShMaXN0PGludD4gY2Fub25pY2FsVGFibGUsIFN0cmluZyB0ZXh0LAogICAgICBFbmNvZGluZyBlbmNvZGluZywgYm9vbCBzcGFjZVRvUGx1cyk7CgogIC8qKgogICAqIENvbnZlcnQgYSBieXRlICgyIGNoYXJhY3RlciBoZXggc2VxdWVuY2UpIGluIHN0cmluZyBbc10gc3RhcnRpbmcKICAgKiBhdCBwb3NpdGlvbiBbcG9zXSB0byBpdHMgb3JkaW5hbCB2YWx1ZQogICAqLwogIHN0YXRpYyBpbnQgX2hleENoYXJQYWlyVG9CeXRlKFN0cmluZyBzLCBpbnQgcG9zKSB7CiAgICBpbnQgYnl0ZSA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgewogICAgICB2YXIgY2hhckNvZGUgPSBzLmNvZGVVbml0QXQocG9zICsgaSk7CiAgICAgIGlmICgweDMwIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IDB4MzkpIHsKICAgICAgICBieXRlID0gYnl0ZSAqIDE2ICsgY2hhckNvZGUgLSAweDMwOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIENoZWNrIHJhbmdlcyBBLUYgKDB4NDEtMHg0NikgYW5kIGEtZiAoMHg2MS0weDY2KS4KICAgICAgICBjaGFyQ29kZSB8PSAweDIwOwogICAgICAgIGlmICgweDYxIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IDB4NjYpIHsKICAgICAgICAgIGJ5dGUgPSBieXRlICogMTYgKyBjaGFyQ29kZSAtIDB4NTc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoIkludmFsaWQgVVJMIGVuY29kaW5nIik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gYnl0ZTsKICB9CgogIC8qKgogICAqIFVyaS1kZWNvZGUgYSBwZXJjZW50LWVuY29kZWQgc3RyaW5nLgogICAqCiAgICogSXQgdW5lc2NhcGVzIHRoZSBzdHJpbmcgW3RleHRdIGFuZCByZXR1cm5zIHRoZSB1bmVzY2FwZWQgc3RyaW5nLgogICAqCiAgICogVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIHRoZSBKYXZhU2NyaXB0LWZ1bmN0aW9uIGBkZWNvZGVVUklgLgogICAqCiAgICogSWYgW3BsdXNUb1NwYWNlXSBpcyBgdHJ1ZWAsIHBsdXMgY2hhcmFjdGVycyB3aWxsIGJlIGNvbnZlcnRlZCB0byBzcGFjZXMuCiAgICoKICAgKiBUaGUgZGVjb2RlciB3aWxsIGNyZWF0ZSBhIGJ5dGUtbGlzdCBvZiB0aGUgcGVyY2VudC1lbmNvZGVkIHBhcnRzLCBhbmQgdGhlbgogICAqIGRlY29kZSB0aGUgYnl0ZS1saXN0IHVzaW5nIFtlbmNvZGluZ10uIFRoZSBkZWZhdWx0IGVuY29kaW5ncyBVVEYtOC4KICAgKi8KICBzdGF0aWMgU3RyaW5nIF91cmlEZWNvZGUoCiAgICAgIFN0cmluZyB0ZXh0LCBpbnQgc3RhcnQsIGludCBlbmQsIEVuY29kaW5nIGVuY29kaW5nLCBib29sIHBsdXNUb1NwYWNlKSB7CiAgICBhc3NlcnQoMCA8PSBzdGFydCk7CiAgICBhc3NlcnQoc3RhcnQgPD0gZW5kKTsKICAgIGFzc2VydChlbmQgPD0gdGV4dC5sZW5ndGgpOwogICAgYXNzZXJ0KGVuY29kaW5nICE9IG51bGwpOwogICAgLy8gRmlyc3QgY2hlY2sgd2hldGhlciB0aGVyZSBpcyBhbnkgY2hhcmFjdGVycyB3aGljaCBuZWVkIHNwZWNpYWwgaGFuZGxpbmcuCiAgICBib29sIHNpbXBsZSA9IHRydWU7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICB2YXIgY29kZVVuaXQgPSB0ZXh0LmNvZGVVbml0QXQoaSk7CiAgICAgIGlmIChjb2RlVW5pdCA+IDEyNyB8fAogICAgICAgICAgY29kZVVuaXQgPT0gX1BFUkNFTlQgfHwKICAgICAgICAgIChwbHVzVG9TcGFjZSAmJiBjb2RlVW5pdCA9PSBfUExVUykpIHsKICAgICAgICBzaW1wbGUgPSBmYWxzZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgTGlzdDxpbnQ+IGJ5dGVzOwogICAgaWYgKHNpbXBsZSkgewogICAgICBpZiAodXRmOCA9PSBlbmNvZGluZyB8fCBsYXRpbjEgPT0gZW5jb2RpbmcgfHwgYXNjaWkgPT0gZW5jb2RpbmcpIHsKICAgICAgICByZXR1cm4gdGV4dC5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYnl0ZXMgPSB0ZXh0LnN1YnN0cmluZyhzdGFydCwgZW5kKS5jb2RlVW5pdHM7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGJ5dGVzID0gTGlzdCgpOwogICAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICAgIHZhciBjb2RlVW5pdCA9IHRleHQuY29kZVVuaXRBdChpKTsKICAgICAgICBpZiAoY29kZVVuaXQgPiAxMjcpIHsKICAgICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoIklsbGVnYWwgcGVyY2VudCBlbmNvZGluZyBpbiBVUkkiKTsKICAgICAgICB9CiAgICAgICAgaWYgKGNvZGVVbml0ID09IF9QRVJDRU5UKSB7CiAgICAgICAgICBpZiAoaSArIDMgPiB0ZXh0Lmxlbmd0aCkgewogICAgICAgICAgICB0aHJvdyBBcmd1bWVudEVycm9yKCdUcnVuY2F0ZWQgVVJJJyk7CiAgICAgICAgICB9CiAgICAgICAgICBieXRlcy5hZGQoX2hleENoYXJQYWlyVG9CeXRlKHRleHQsIGkgKyAxKSk7CiAgICAgICAgICBpICs9IDI7CiAgICAgICAgfSBlbHNlIGlmIChwbHVzVG9TcGFjZSAmJiBjb2RlVW5pdCA9PSBfUExVUykgewogICAgICAgICAgYnl0ZXMuYWRkKF9TUEFDRSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJ5dGVzLmFkZChjb2RlVW5pdCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gZW5jb2RpbmcuZGVjb2RlKGJ5dGVzKTsKICB9CgogIHN0YXRpYyBib29sIF9pc0FscGhhYmV0aWNDaGFyYWN0ZXIoaW50IGNvZGVVbml0KSB7CiAgICB2YXIgbG93ZXJDYXNlID0gY29kZVVuaXQgfCAweDIwOwogICAgcmV0dXJuIChfTE9XRVJfQ0FTRV9BIDw9IGxvd2VyQ2FzZSAmJiBsb3dlckNhc2UgPD0gX0xPV0VSX0NBU0VfWik7CiAgfQoKICBzdGF0aWMgYm9vbCBfaXNVbnJlc2VydmVkQ2hhcihpbnQgY2hhcikgewogICAgcmV0dXJuIGNoYXIgPCAxMjcgJiYKICAgICAgICAoKF91bnJlc2VydmVkVGFibGVbY2hhciA+PiA0XSAmICgxIDw8IChjaGFyICYgMHgwZikpKSAhPSAwKTsKICB9CgogIC8vIFRhYmxlcyBvZiBjaGFyLWNvZGVzIG9yZ2FuaXplZCBhcyBhIGJpdCB2ZWN0b3Igb2YgMTI4IGJpdHMgd2hlcmUKICAvLyBlYWNoIGJpdCBpbmRpY2F0ZSB3aGV0aGVyIGEgY2hhcmFjdGVyIGNvZGUgb24gdGhlIDAtMTI3IG5lZWRzIHRvCiAgLy8gYmUgZXNjYXBlZCBvciBub3QuCgogIC8vIFRoZSB1bnJlc2VydmVkIGNoYXJhY3RlcnMgb2YgUkZDIDM5ODYuCiAgc3RhdGljIGNvbnN0IF91bnJlc2VydmVkVGFibGUgPSA8aW50PlsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgTFNCICAgICAgICAgICAgTVNCCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CiAgICAweDAwMDAsIC8vIDB4MDAgLSAweDBmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAweDAwMDAsIC8vIDB4MTAgLSAweDFmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS4KICAgIDB4NjAwMCwgLy8gMHgyMCAtIDB4MmYgIDAwMDAwMDAwMDAwMDAxMTAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIDAxMjM0NTY3ODkKICAgIDB4MDNmZiwgLy8gMHgzMCAtIDB4M2YgIDExMTExMTExMTEwMDAwMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBBQkNERUZHSElKS0xNTk8KICAgIDB4ZmZmZSwgLy8gMHg0MCAtIDB4NGYgIDAxMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFBRUlNUVVZXWFlaICAgIF8KICAgIDB4ODdmZiwgLy8gMHg1MCAtIDB4NWYgIDExMTExMTExMTExMDAwMDEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBhYmNkZWZnaGlqa2xtbm8KICAgIDB4ZmZmZSwgLy8gMHg2MCAtIDB4NmYgIDAxMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHBxcnN0dXZ3eHl6ICAgfgogICAgMHg0N2ZmLCAvLyAweDcwIC0gMHg3ZiAgMTExMTExMTExMTEwMDAxMAogIF07CgogIC8vIFRoZSB1bnJlc2VydmVkIGNoYXJhY3RlcnMgb2YgUkZDIDIzOTYuCiAgc3RhdGljIGNvbnN0IF91bnJlc2VydmVkMjM5NlRhYmxlID0gPGludD5bCiAgICAvLyAgICAgICAgICAgICAgICAgICAgIExTQiAgICAgICAgICAgIE1TQgogICAgLy8gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAogICAgMHgwMDAwLCAvLyAweDAwIC0gMHgwZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgMHgwMDAwLCAvLyAweDEwIC0gMHgxZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgICEgICAgICcoKSogIC0uCiAgICAweDY3ODIsIC8vIDB4MjAgLSAweDJmICAwMTAwMDAwMTExMTAwMTEwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAwMTIzNDU2Nzg5CiAgICAweDAzZmYsIC8vIDB4MzAgLSAweDNmICAxMTExMTExMTExMDAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgQUJDREVGR0hJSktMTU5PCiAgICAweGZmZmUsIC8vIDB4NDAgLSAweDRmICAwMTExMTExMTExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBQUVJTVFVWV1hZWiAgICBfCiAgICAweDg3ZmYsIC8vIDB4NTAgLSAweDVmICAxMTExMTExMTExMTAwMDAxCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgYWJjZGVmZ2hpamtsbW5vCiAgICAweGZmZmUsIC8vIDB4NjAgLSAweDZmICAwMTExMTExMTExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBwcXJzdHV2d3h5eiAgIH4KICAgIDB4NDdmZiwgLy8gMHg3MCAtIDB4N2YgIDExMTExMTExMTExMDAwMTAKICBdOwoKICAvLyBUYWJsZSBvZiByZXNlcnZlZCBjaGFyYWN0ZXJzIHNwZWNpZmllZCBieSBFQ01BU2NyaXB0IDUuCiAgc3RhdGljIGNvbnN0IF9lbmNvZGVGdWxsVGFibGUgPSA8aW50PlsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgTFNCICAgICAgICAgICAgTVNCCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CiAgICAweDAwMDAsIC8vIDB4MDAgLSAweDBmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAweDAwMDAsIC8vIDB4MTAgLSAweDFmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgISAjJCAmJygpKissLS4vCiAgICAweGZmZGEsIC8vIDB4MjAgLSAweDJmICAwMTAxMTAxMTExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAwMTIzNDU2Nzg5OjsgPSA/CiAgICAweGFmZmYsIC8vIDB4MzAgLSAweDNmICAxMTExMTExMTExMTEwMTAxCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBAQUJDREVGR0hJSktMTU5PCiAgICAweGZmZmYsIC8vIDB4NDAgLSAweDRmICAxMTExMTExMTExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBQUVJTVFVWV1hZWiAgICBfCiAgICAweDg3ZmYsIC8vIDB4NTAgLSAweDVmICAxMTExMTExMTExMTAwMDAxCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgYWJjZGVmZ2hpamtsbW5vCiAgICAweGZmZmUsIC8vIDB4NjAgLSAweDZmICAwMTExMTExMTExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBwcXJzdHV2d3h5eiAgIH4KICAgIDB4NDdmZiwgLy8gMHg3MCAtIDB4N2YgIDExMTExMTExMTExMDAwMTAKICBdOwoKICAvLyBDaGFyYWN0ZXJzIGFsbG93ZWQgaW4gdGhlIHNjaGVtZS4KICBzdGF0aWMgY29uc3QgX3NjaGVtZVRhYmxlID0gPGludD5bCiAgICAvLyAgICAgICAgICAgICAgICAgICAgIExTQiAgICAgICAgICAgIE1TQgogICAgLy8gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAogICAgMHgwMDAwLCAvLyAweDAwIC0gMHgwZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgMHgwMDAwLCAvLyAweDEwIC0gMHgxZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC0uCiAgICAweDY4MDAsIC8vIDB4MjAgLSAweDJmICAwMDAwMDAwMDAwMDEwMTEwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAwMTIzNDU2Nzg5CiAgICAweDAzZmYsIC8vIDB4MzAgLSAweDNmICAxMTExMTExMTExMDAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgQUJDREVGR0hJSktMTU5PCiAgICAweGZmZmUsIC8vIDB4NDAgLSAweDRmICAwMTExMTExMTExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBQUVJTVFVWV1hZWgogICAgMHgwN2ZmLCAvLyAweDUwIC0gMHg1ZiAgMTExMTExMTExMTEwMDAwMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGFiY2RlZmdoaWprbG1ubwogICAgMHhmZmZlLCAvLyAweDYwIC0gMHg2ZiAgMDExMTExMTExMTExMTExMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgcHFyc3R1dnd4eXoKICAgIDB4MDdmZiwgLy8gMHg3MCAtIDB4N2YgIDExMTExMTExMTExMDAwMTAKICBdOwoKICAvLyBDaGFyYWN0ZXJzIGFsbG93ZWQgaW4gc2NoZW1lIGV4Y2VwdCBmb3IgdXBwZXIgY2FzZSBsZXR0ZXJzLgogIHN0YXRpYyBjb25zdCBfc2NoZW1lTG93ZXJUYWJsZSA9IDxpbnQ+WwogICAgLy8gICAgICAgICAgICAgICAgICAgICBMU0IgICAgICAgICAgICBNU0IKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKICAgIDB4MDAwMCwgLy8gMHgwMCAtIDB4MGYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIDB4MDAwMCwgLy8gMHgxMCAtIDB4MWYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAtLgogICAgMHg2ODAwLCAvLyAweDIwIC0gMHgyZiAgMDAwMDAwMDAwMDAxMDExMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgMDEyMzQ1Njc4OQogICAgMHgwM2ZmLCAvLyAweDMwIC0gMHgzZiAgMTExMTExMTExMTAwMDAwMAogICAgLy8KICAgIDB4MDAwMCwgLy8gMHg0MCAtIDB4NGYgIDAxMTExMTExMTExMTExMTEKICAgIC8vCiAgICAweDAwMDAsIC8vIDB4NTAgLSAweDVmICAxMTExMTExMTExMTAwMDAxCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgYWJjZGVmZ2hpamtsbW5vCiAgICAweGZmZmUsIC8vIDB4NjAgLSAweDZmICAwMTExMTExMTExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBwcXJzdHV2d3h5egogICAgMHgwN2ZmLCAvLyAweDcwIC0gMHg3ZiAgMTExMTExMTExMTEwMDAxMAogIF07CgogIC8vIFN1YiBkZWxpbWl0ZXIgY2hhcmFjdGVycyBjb21iaW5lZCB3aXRoIHVucmVzZXJ2ZWQgYXMgb2YgMzk4Ni4KICAvLyBzdWItZGVsaW1zICA9ICIhIiAvICIkIiAvICImIiAvICInIiAvICIoIiAvICIpIgogIC8vICAgICAgICAgLyAiKiIgLyAiKyIgLyAiLCIgLyAiOyIgLyAiPSIKICAvLyBSRkMgMzk4NiBzZWN0aW9uIDIuMy4KICAvLyB1bnJlc2VydmVkICA9IEFMUEhBIC8gRElHSVQgLyAiLSIgLyAiLiIgLyAiXyIgLyAifiIKICBzdGF0aWMgY29uc3QgX3N1YkRlbGltaXRlcnNUYWJsZSA9IDxpbnQ+WwogICAgLy8gICAgICAgICAgICAgICAgICAgICBMU0IgICAgICAgICAgICBNU0IKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKICAgIDB4MDAwMCwgLy8gMHgwMCAtIDB4MGYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIDB4MDAwMCwgLy8gMHgxMCAtIDB4MWYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAhICAkICYnKCkqKywtLgogICAgMHg3ZmQyLCAvLyAweDIwIC0gMHgyZiAgMDEwMDEwMTExMTExMTExMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgMDEyMzQ1Njc4OSA7ID0KICAgIDB4MmJmZiwgLy8gMHgzMCAtIDB4M2YgIDExMTExMTExMTEwMTAxMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBBQkNERUZHSElKS0xNTk8KICAgIDB4ZmZmZSwgLy8gMHg0MCAtIDB4NGYgIDAxMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFBRUlNUVVZXWFlaICAgIF8KICAgIDB4ODdmZiwgLy8gMHg1MCAtIDB4NWYgIDExMTExMTExMTExMDAwMDEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBhYmNkZWZnaGlqa2xtbm8KICAgIDB4ZmZmZSwgLy8gMHg2MCAtIDB4NmYgIDAxMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHBxcnN0dXZ3eHl6ICAgfgogICAgMHg0N2ZmLCAvLyAweDcwIC0gMHg3ZiAgMTExMTExMTExMTEwMDAxMAogIF07CgogIC8vIEdlbmVyYWwgZGVsaW1pdGVyIGNoYXJhY3RlcnMsIFJGQyAzOTg2IHNlY3Rpb24gMi4yLgogIC8vIGdlbi1kZWxpbXMgID0gIjoiIC8gIi8iIC8gIj8iIC8gIiMiIC8gIlsiIC8gIl0iIC8gIkAiCiAgLy8KICBzdGF0aWMgY29uc3QgX2dlbkRlbGltaXRlcnNUYWJsZSA9IDxpbnQ+WwogICAgLy8gICAgICAgICAgICAgICAgICAgICBMU0IgICAgICAgICAgICBNU0IKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKICAgIDB4MDAwMCwgLy8gMHgwMCAtIDB4MGYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIDB4MDAwMCwgLy8gMHgxMCAtIDB4MWYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIC8KICAgIDB4ODAwOCwgLy8gMHgyMCAtIDB4MmYgIDAwMDEwMDAwMDAwMDAwMDEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgID8KICAgIDB4ODQwMCwgLy8gMHgzMCAtIDB4M2YgIDAwMDAwMDAwMDAxMDAwMDEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIEAKICAgIDB4MDAwMSwgLy8gMHg0MCAtIDB4NGYgIDEwMDAwMDAwMDAwMDAwMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyBdCiAgICAweDI4MDAsIC8vIDB4NTAgLSAweDVmICAwMDAwMDAwMDAwMDEwMTAwCiAgICAvLwogICAgMHgwMDAwLCAvLyAweDYwIC0gMHg2ZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgLy8KICAgIDB4MDAwMCwgLy8gMHg3MCAtIDB4N2YgIDAwMDAwMDAwMDAwMDAwMDAKICBdOwoKICAvLyBDaGFyYWN0ZXJzIGFsbG93ZWQgaW4gdGhlIHVzZXJpbmZvIGFzIG9mIFJGQyAzOTg2LgogIC8vIFJGQyAzOTg2IEFwcGVuZGl4IEEKICAvLyB1c2VyaW5mbyA9ICooIHVucmVzZXJ2ZWQgLyBwY3QtZW5jb2RlZCAvIHN1Yi1kZWxpbXMgLyAnOicpCiAgc3RhdGljIGNvbnN0IF91c2VyaW5mb1RhYmxlID0gPGludD5bCiAgICAvLyAgICAgICAgICAgICAgICAgICAgIExTQiAgICAgICAgICAgIE1TQgogICAgLy8gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAogICAgMHgwMDAwLCAvLyAweDAwIC0gMHgwZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgMHgwMDAwLCAvLyAweDEwIC0gMHgxZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgICEgICQgJicoKSorLC0uCiAgICAweDdmZDIsIC8vIDB4MjAgLSAweDJmICAwMTAwMTAxMTExMTExMTEwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAwMTIzNDU2Nzg5OjsgPQogICAgMHgyZmZmLCAvLyAweDMwIC0gMHgzZiAgMTExMTExMTExMTExMDEwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgIEFCQ0RFRkdISUpLTE1OTwogICAgMHhmZmZlLCAvLyAweDQwIC0gMHg0ZiAgMDExMTExMTExMTExMTExMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgUFFSU1RVVldYWVogICAgXwogICAgMHg4N2ZmLCAvLyAweDUwIC0gMHg1ZiAgMTExMTExMTExMTEwMDAwMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGFiY2RlZmdoaWprbG1ubwogICAgMHhmZmZlLCAvLyAweDYwIC0gMHg2ZiAgMDExMTExMTExMTExMTExMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgcHFyc3R1dnd4eXogICB+CiAgICAweDQ3ZmYsIC8vIDB4NzAgLSAweDdmICAxMTExMTExMTExMTAwMDEwCiAgXTsKCiAgLy8gQ2hhcmFjdGVycyBhbGxvd2VkIGluIHRoZSByZWctbmFtZSBhcyBvZiBSRkMgMzk4Ni4KICAvLyBSRkMgMzk4NiBBcHBlbmRpeCBBCiAgLy8gcmVnLW5hbWUgPSAqKCB1bnJlc2VydmVkIC8gcGN0LWVuY29kZWQgLyBzdWItZGVsaW1zICkKICBzdGF0aWMgY29uc3QgX3JlZ05hbWVUYWJsZSA9IDxpbnQ+WwogICAgLy8gICAgICAgICAgICAgICAgICAgICBMU0IgICAgICAgICAgICBNU0IKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKICAgIDB4MDAwMCwgLy8gMHgwMCAtIDB4MGYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIDB4MDAwMCwgLy8gMHgxMCAtIDB4MWYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAhICAkJSYnKCkqKywtLgogICAgMHg3ZmYyLCAvLyAweDIwIC0gMHgyZiAgMDEwMDExMTExMTExMTExMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgMDEyMzQ1Njc4OSA7ID0KICAgIDB4MmJmZiwgLy8gMHgzMCAtIDB4M2YgIDExMTExMTExMTEwMTAxMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBBQkNERUZHSElKS0xNTk8KICAgIDB4ZmZmZSwgLy8gMHg0MCAtIDB4NGYgIDAxMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFBRUlNUVVZXWFlaICAgIF8KICAgIDB4ODdmZiwgLy8gMHg1MCAtIDB4NWYgIDExMTExMTExMTExMDAwMDEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBhYmNkZWZnaGlqa2xtbm8KICAgIDB4ZmZmZSwgLy8gMHg2MCAtIDB4NmYgIDAxMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHBxcnN0dXZ3eHl6ICAgfgogICAgMHg0N2ZmLCAvLyAweDcwIC0gMHg3ZiAgMTExMTExMTExMTEwMDAxMAogIF07CgogIC8vIENoYXJhY3RlcnMgYWxsb3dlZCBpbiB0aGUgcGF0aCBhcyBvZiBSRkMgMzk4Ni4KICAvLyBSRkMgMzk4NiBzZWN0aW9uIDMuMy4KICAvLyBwY2hhciA9IHVucmVzZXJ2ZWQgLyBwY3QtZW5jb2RlZCAvIHN1Yi1kZWxpbXMgLyAiOiIgLyAiQCIKICBzdGF0aWMgY29uc3QgX3BhdGhDaGFyVGFibGUgPSA8aW50PlsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgTFNCICAgICAgICAgICAgTVNCCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CiAgICAweDAwMDAsIC8vIDB4MDAgLSAweDBmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAweDAwMDAsIC8vIDB4MTAgLSAweDFmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgISAgJCAmJygpKissLS4KICAgIDB4N2ZkMiwgLy8gMHgyMCAtIDB4MmYgIDAxMDAxMDExMTExMTExMTAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIDAxMjM0NTY3ODk6OyA9CiAgICAweDJmZmYsIC8vIDB4MzAgLSAweDNmICAxMTExMTExMTExMTEwMTAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBAQUJDREVGR0hJSktMTU5PCiAgICAweGZmZmYsIC8vIDB4NDAgLSAweDRmICAxMTExMTExMTExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBQUVJTVFVWV1hZWiAgICBfCiAgICAweDg3ZmYsIC8vIDB4NTAgLSAweDVmICAxMTExMTExMTExMTAwMDAxCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgYWJjZGVmZ2hpamtsbW5vCiAgICAweGZmZmUsIC8vIDB4NjAgLSAweDZmICAwMTExMTExMTExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBwcXJzdHV2d3h5eiAgIH4KICAgIDB4NDdmZiwgLy8gMHg3MCAtIDB4N2YgIDExMTExMTExMTExMDAwMTAKICBdOwoKICAvLyBDaGFyYWN0ZXJzIGFsbG93ZWQgaW4gdGhlIHBhdGggYXMgb2YgUkZDIDM5ODYuCiAgLy8gUkZDIDM5ODYgc2VjdGlvbiAzLjMgKmFuZCogc2xhc2guCiAgc3RhdGljIGNvbnN0IF9wYXRoQ2hhck9yU2xhc2hUYWJsZSA9IFsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgTFNCICAgICAgICAgICAgTVNCCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CiAgICAweDAwMDAsIC8vIDB4MDAgLSAweDBmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAweDAwMDAsIC8vIDB4MTAgLSAweDFmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgISAgJCAmJygpKissLS4vCiAgICAweGZmZDIsIC8vIDB4MjAgLSAweDJmICAwMTAwMTAxMTExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAwMTIzNDU2Nzg5OjsgPQogICAgMHgyZmZmLCAvLyAweDMwIC0gMHgzZiAgMTExMTExMTExMTExMDEwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgQEFCQ0RFRkdISUpLTE1OTwogICAgMHhmZmZmLCAvLyAweDQwIC0gMHg0ZiAgMTExMTExMTExMTExMTExMQoKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFBRUlNUVVZXWFlaICAgIF8KICAgIDB4ODdmZiwgLy8gMHg1MCAtIDB4NWYgIDExMTExMTExMTExMDAwMDEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBhYmNkZWZnaGlqa2xtbm8KICAgIDB4ZmZmZSwgLy8gMHg2MCAtIDB4NmYgIDAxMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHBxcnN0dXZ3eHl6ICAgfgogICAgMHg0N2ZmLCAvLyAweDcwIC0gMHg3ZiAgMTExMTExMTExMTEwMDAxMAogIF07CgogIC8vIENoYXJhY3RlcnMgYWxsb3dlZCBpbiB0aGUgcXVlcnkgYXMgb2YgUkZDIDM5ODYuCiAgLy8gUkZDIDM5ODYgc2VjdGlvbiAzLjQuCiAgLy8gcXVlcnkgPSAqKCBwY2hhciAvICIvIiAvICI/IiApCiAgc3RhdGljIGNvbnN0IF9xdWVyeUNoYXJUYWJsZSA9IFsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgTFNCICAgICAgICAgICAgTVNCCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CiAgICAweDAwMDAsIC8vIDB4MDAgLSAweDBmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAweDAwMDAsIC8vIDB4MTAgLSAweDFmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgISAgJCAmJygpKissLS4vCiAgICAweGZmZDIsIC8vIDB4MjAgLSAweDJmICAwMTAwMTAxMTExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAwMTIzNDU2Nzg5OjsgPSA/CiAgICAweGFmZmYsIC8vIDB4MzAgLSAweDNmICAxMTExMTExMTExMTEwMTAxCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBAQUJDREVGR0hJSktMTU5PCiAgICAweGZmZmYsIC8vIDB4NDAgLSAweDRmICAxMTExMTExMTExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBQUVJTVFVWV1hZWiAgICBfCiAgICAweDg3ZmYsIC8vIDB4NTAgLSAweDVmICAxMTExMTExMTExMTAwMDAxCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgYWJjZGVmZ2hpamtsbW5vCiAgICAweGZmZmUsIC8vIDB4NjAgLSAweDZmICAwMTExMTExMTExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBwcXJzdHV2d3h5eiAgIH4KICAgIDB4NDdmZiwgLy8gMHg3MCAtIDB4N2YgIDExMTExMTExMTExMDAwMTAKICBdOwoKICAvLyBDaGFyYWN0ZXJzIGFsbG93ZWQgaW4gdGhlIFpvbmVJRCBhcyBvZiBSRkMgNjg3NC4KICAvLyBab25lSUQgPSAxKiggdW5yZXNlcnZlZCAvIHBjdC1lbmNvZGVkICkKICBzdGF0aWMgY29uc3QgX3pvbmVJRFRhYmxlID0gPGludD5bCiAgICAvLyAgICAgICAgICAgICAgICAgICAgIExTQiAgICAgICAgICAgIE1TQgogICAgLy8gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAogICAgMHgwMDAwLCAvLyAweDAwIC0gMHgwZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgMHgwMDAwLCAvLyAweDEwIC0gMHgxZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgICEgICQlJicoKSorLC0uCiAgICAweDYwMDAsIC8vIDB4MjAgLSAweDJmICAwMDAwMDAwMDAwMDAwMTEwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAwMTIzNDU2Nzg5IDsgPQogICAgMHgwM2ZmLCAvLyAweDMwIC0gMHgzZiAgMTExMTExMTExMTAwMDAwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgIEFCQ0RFRkdISUpLTE1OTwogICAgMHhmZmZlLCAvLyAweDQwIC0gMHg0ZiAgMDExMTExMTExMTExMTExMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgUFFSU1RVVldYWVogICAgXwogICAgMHg4N2ZmLCAvLyAweDUwIC0gMHg1ZiAgMTExMTExMTExMTEwMDAwMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGFiY2RlZmdoaWprbG1ubwogICAgMHhmZmZlLCAvLyAweDYwIC0gMHg2ZiAgMDExMTExMTExMTExMTExMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgcHFyc3R1dnd4eXogICB+CiAgICAweDQ3ZmYsIC8vIDB4NzAgLSAweDdmICAxMTExMTExMTExMTAwMDEwCiAgXTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gRGF0YSBVUkkKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8qKgogKiBBIHdheSB0byBhY2Nlc3MgdGhlIHN0cnVjdHVyZSBvZiBhIGBkYXRhOmAgVVJJLgogKgogKiBEYXRhIFVSSXMgYXJlIG5vbi1oaWVyYXJjaGljYWwgVVJJcyB0aGF0IGNhbiBjb250YWluIGFueSBiaW5hcnkgZGF0YS4KICogVGhleSBhcmUgZGVmaW5lZCBieSBbUkZDIDIzOTddKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMzk3KS4KICoKICogVGhpcyBjbGFzcyBhbGxvd3MgcGFyc2luZyB0aGUgVVJJIHRleHQgYW5kIGV4dHJhY3RpbmcgaW5kaXZpZHVhbCBwYXJ0cyBvZiB0aGUKICogVVJJLCBhcyB3ZWxsIGFzIGJ1aWxkaW5nIHRoZSBVUkkgdGV4dCBmcm9tIHN0cnVjdHVyZWQgcGFydHMuCiAqLwpjbGFzcyBVcmlEYXRhIHsKICBzdGF0aWMgY29uc3QgaW50IF9ub1NjaGVtZSA9IC0xOwogIC8qKgogICAqIENvbnRhaW5zIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYSBgZGF0YTpgIFVSSSwgd2l0aCBvciB3aXRob3V0IGEKICAgKiBsZWFkaW5nIGBkYXRhOmAuCiAgICoKICAgKiBJZiBbX3NlcGFyYXRvckluZGljZXNdIHN0YXJ0cyB3aXRoIGA0YCAodGhlIGluZGV4IG9mIHRoZSBgOmApLCB0aGVuCiAgICogdGhlcmUgaXMgYSBsZWFkaW5nIGBkYXRhOmAsIG90aGVyd2lzZSBbX3NlcGFyYXRvckluZGljZXNdIHN0YXJ0cyB3aXRoCiAgICogYC0xYC4KICAgKi8KICBmaW5hbCBTdHJpbmcgX3RleHQ7CgogIC8qKgogICAqIExpc3Qgb2YgdGhlIHNlcGFyYXRvcnMgKCc7JywgJz0nIGFuZCAnLCcpIGluIHRoZSB0ZXh0LgogICAqCiAgICogU3RhcnRzIHdpdGggdGhlIGluZGV4IG9mIHRoZSBgOmAgaW4gYGRhdGE6YCBvZiB0aGUgbWltZVR5cGUuCiAgICogVGhhdCBpcyBhbHdheXMgZWl0aGVyIC0xIG9yIDQsIGRlcGVuZGluZyBvbiB3aGV0aGVyIGBfdGV4dGAgaW5jbHVkZXMgdGhlCiAgICogYGRhdGE6YCBzY2hlbWUgb3Igbm90LgogICAqCiAgICogVGhlIGZpcnN0IHNwZXBhcmF0b3IgZW5kcyB0aGUgbWltZSB0eXBlLiBXZSBkb24ndCBib3RoZXIgd2l0aCBmaW5kaW5nCiAgICogdGhlICcvJyBpbnNpZGUgdGhlIG1pbWUgdHlwZS4KICAgKgogICAqIEVhY2ggdHdvIHNlcGFyYXRvcnMgYWZ0ZXIgdGhhdCBtYXJrcyBhIHBhcmFtZXRlciBrZXkgYW5kIHZhbHVlLgogICAqCiAgICogSWYgdGhlcmUgaXMgYSBzaW5nbGUgc2VwYXJhdG9yIGxlZnQsIGl0IGVuZHMgdGhlICJiYXNlNjQiIG1hcmtlci4KICAgKgogICAqIFNvIHRoZSBmb2xsb3dpbmcgc2VwYXJhdG9ycyBhcmUgZm91bmQgZm9yIGEgdGV4dDoKICAgKiBgYGAKICAgKiBkYXRhOnRleHQvcGxhaW47Zm9vPWJhcjtiYXNlNjQsQVJHTEVCQVJHTEU9CiAgICogICAgIF4gICAgICAgICAgXiAgIF4gICBeICAgICAgXgogICAqIGBgYAogICAqLwogIGZpbmFsIExpc3Q8aW50PiBfc2VwYXJhdG9ySW5kaWNlczsKCiAgLyoqCiAgICogQ2FjaGUgb2YgdGhlIHJlc3VsdCByZXR1cm5lZCBieSBbdXJpXS4KICAgKi8KICBVcmkgX3VyaUNhY2hlOwoKICBVcmlEYXRhLl8odGhpcy5fdGV4dCwgdGhpcy5fc2VwYXJhdG9ySW5kaWNlcywgdGhpcy5fdXJpQ2FjaGUpOwoKICAvLyBBdm9pZCBzaGFkb3dpbmcgYnkgYXJndW1lbnQuCiAgc3RhdGljIGNvbnN0IEJhc2U2NENvZGVjIF9iYXNlNjQgPSBiYXNlNjQ7CgogIC8qKgogICAqIENyZWF0ZXMgYSBgZGF0YTpgIFVSSSBjb250YWluaW5nIHRoZSBbY29udGVudF0gc3RyaW5nLgogICAqCiAgICogRXF1aXZhbGVudCB0byBgbmV3IFVyaS5kYXRhRnJvbVN0cmluZyguLi4pLmRhdGFgLCBidXQgbWF5CiAgICogYmUgbW9yZSBlZmZpY2llbnQgaWYgdGhlIFt1cmldIGl0c2VsZiBpc24ndCB1c2VkLgogICAqLwogIGZhY3RvcnkgVXJpRGF0YS5mcm9tU3RyaW5nKFN0cmluZyBjb250ZW50LAogICAgICB7U3RyaW5nIG1pbWVUeXBlLAogICAgICBFbmNvZGluZyBlbmNvZGluZywKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBwYXJhbWV0ZXJzLAogICAgICBib29sIGJhc2U2NCA9IGZhbHNlfSkgewogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IFN0cmluZ0J1ZmZlcigpOwogICAgTGlzdDxpbnQ+IGluZGljZXMgPSBbX25vU2NoZW1lXTsKICAgIFN0cmluZyBjaGFyc2V0TmFtZTsKICAgIFN0cmluZyBlbmNvZGluZ05hbWU7CiAgICBpZiAocGFyYW1ldGVycyAhPSBudWxsKSBjaGFyc2V0TmFtZSA9IHBhcmFtZXRlcnNbImNoYXJzZXQiXTsKICAgIGlmIChlbmNvZGluZyA9PSBudWxsKSB7CiAgICAgIGlmIChjaGFyc2V0TmFtZSAhPSBudWxsKSB7CiAgICAgICAgZW5jb2RpbmcgPSBFbmNvZGluZy5nZXRCeU5hbWUoY2hhcnNldE5hbWUpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGNoYXJzZXROYW1lID09IG51bGwpIHsKICAgICAgLy8gTm9uLW51bGwgb25seSBpZiBwYXJhbWV0ZXJzIGRvZXMgbm90IGNvbnRhaW4gImNoYXJzZXQiLgogICAgICBlbmNvZGluZ05hbWUgPSBlbmNvZGluZy5uYW1lOwogICAgfQogICAgZW5jb2RpbmcgPz89IGFzY2lpOwogICAgX3dyaXRlVXJpKG1pbWVUeXBlLCBlbmNvZGluZ05hbWUsIHBhcmFtZXRlcnMsIGJ1ZmZlciwgaW5kaWNlcyk7CiAgICBpbmRpY2VzLmFkZChidWZmZXIubGVuZ3RoKTsKICAgIGlmIChiYXNlNjQpIHsKICAgICAgYnVmZmVyLndyaXRlKCc7YmFzZTY0LCcpOwogICAgICBpbmRpY2VzLmFkZChidWZmZXIubGVuZ3RoIC0gMSk7CiAgICAgIGJ1ZmZlci53cml0ZShlbmNvZGluZy5mdXNlKF9iYXNlNjQpLmVuY29kZShjb250ZW50KSk7CiAgICB9IGVsc2UgewogICAgICBidWZmZXIud3JpdGUoJywnKTsKICAgICAgX3VyaUVuY29kZUJ5dGVzKF91cmljVGFibGUsIGVuY29kaW5nLmVuY29kZShjb250ZW50KSwgYnVmZmVyKTsKICAgIH0KICAgIHJldHVybiBVcmlEYXRhLl8oYnVmZmVyLnRvU3RyaW5nKCksIGluZGljZXMsIG51bGwpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIGBkYXRhOmAgVVJJIGNvbnRhaW5pbmcgYW4gZW5jb2Rpbmcgb2YgW2J5dGVzXS4KICAgKgogICAqIEVxdWl2YWxlbnQgdG8gYG5ldyBVcmkuZGF0YUZyb21CeXRlcyguLi4pLmRhdGFgLCBidXQgbWF5CiAgICogYmUgbW9yZSBlZmZpY2llbnQgaWYgdGhlIFt1cmldIGl0c2VsZiBpc24ndCB1c2VkLgogICAqLwogIGZhY3RvcnkgVXJpRGF0YS5mcm9tQnl0ZXMoTGlzdDxpbnQ+IGJ5dGVzLAogICAgICB7bWltZVR5cGUgPSAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBwYXJhbWV0ZXJzLAogICAgICBwZXJjZW50RW5jb2RlZCA9IGZhbHNlfSkgewogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IFN0cmluZ0J1ZmZlcigpOwogICAgTGlzdDxpbnQ+IGluZGljZXMgPSBbX25vU2NoZW1lXTsKICAgIF93cml0ZVVyaShtaW1lVHlwZSwgbnVsbCwgcGFyYW1ldGVycywgYnVmZmVyLCBpbmRpY2VzKTsKICAgIGluZGljZXMuYWRkKGJ1ZmZlci5sZW5ndGgpOwogICAgaWYgKHBlcmNlbnRFbmNvZGVkKSB7CiAgICAgIGJ1ZmZlci53cml0ZSgnLCcpOwogICAgICBfdXJpRW5jb2RlQnl0ZXMoX3VyaWNUYWJsZSwgYnl0ZXMsIGJ1ZmZlcik7CiAgICB9IGVsc2UgewogICAgICBidWZmZXIud3JpdGUoJztiYXNlNjQsJyk7CiAgICAgIGluZGljZXMuYWRkKGJ1ZmZlci5sZW5ndGggLSAxKTsKICAgICAgX2Jhc2U2NC5lbmNvZGVyCiAgICAgICAgICAuc3RhcnRDaHVua2VkQ29udmVyc2lvbihTdHJpbmdDb252ZXJzaW9uU2luay5mcm9tU3RyaW5nU2luayhidWZmZXIpKQogICAgICAgICAgLmFkZFNsaWNlKGJ5dGVzLCAwLCBieXRlcy5sZW5ndGgsIHRydWUpOwogICAgfQoKICAgIHJldHVybiBVcmlEYXRhLl8oYnVmZmVyLnRvU3RyaW5nKCksIGluZGljZXMsIG51bGwpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIGBEYXRhVXJpYCBmcm9tIGEgW1VyaV0gd2hpY2ggbXVzdCBoYXZlIGBkYXRhYCBhcyBbVXJpLnNjaGVtZV0uCiAgICoKICAgKiBUaGUgW3VyaV0gbXVzdCBoYXZlIHNjaGVtZSBgZGF0YWAgYW5kIG5vIGF1dGhvcml0eSBvciBmcmFnbWVudCwKICAgKiBhbmQgdGhlIHBhdGggKGNvbmNhdGVuYXRlZCB3aXRoIHRoZSBxdWVyeSwgaWYgdGhlcmUgaXMgb25lKSBtdXN0IGJlIHZhbGlkCiAgICogYXMgZGF0YSBVUkkgY29udGVudCB3aXRoIHRoZSBzYW1lIHJ1bGVzIGFzIFtwYXJzZV0uCiAgICovCiAgZmFjdG9yeSBVcmlEYXRhLmZyb21VcmkoVXJpIHVyaSkgewogICAgaWYgKHVyaS5zY2hlbWUgIT0gImRhdGEiKSB7CiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IudmFsdWUodXJpLCAidXJpIiwgIlNjaGVtZSBtdXN0IGJlICdkYXRhJyIpOwogICAgfQogICAgaWYgKHVyaS5oYXNBdXRob3JpdHkpIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvci52YWx1ZSh1cmksICJ1cmkiLCAiRGF0YSB1cmkgbXVzdCBub3QgaGF2ZSBhdXRob3JpdHkiKTsKICAgIH0KICAgIGlmICh1cmkuaGFzRnJhZ21lbnQpIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvci52YWx1ZSgKICAgICAgICAgIHVyaSwgInVyaSIsICJEYXRhIHVyaSBtdXN0IG5vdCBoYXZlIGEgZnJhZ21lbnQgcGFydCIpOwogICAgfQogICAgaWYgKCF1cmkuaGFzUXVlcnkpIHsKICAgICAgcmV0dXJuIF9wYXJzZSh1cmkucGF0aCwgMCwgdXJpKTsKICAgIH0KICAgIC8vIEluY2x1ZGVzIHBhdGggYW5kIHF1ZXJ5IChhbmQgbGVhZGluZyAiZGF0YToiKS4KICAgIHJldHVybiBfcGFyc2UoIiR1cmkiLCA1LCB1cmkpOwogIH0KCiAgLyoqCiAgICogV3JpdGVzIHRoZSBpbml0aWFsIHBhcnQgb2YgYSBgZGF0YTpgIHVyaSwgZnJvbSBhZnRlciB0aGUgImRhdGE6IgogICAqIHVudGlsIGp1c3QgYmVmb3JlIHRoZSAnLCcgYmVmb3JlIHRoZSBkYXRhLCBvciBiZWZvcmUgYSBgO2Jhc2U2NCxgCiAgICogbWFya2VyLgogICAqCiAgICogT2YgYW4gW2luZGljZXNdIGxpc3QgaXMgcGFzc2VkLCBzZXBhcmF0b3IgaW5kaWNlcyBhcmUgc3RvcmVkIGluIHRoYXQKICAgKiBsaXN0LgogICAqLwogIHN0YXRpYyB2b2lkIF93cml0ZVVyaShTdHJpbmcgbWltZVR5cGUsIFN0cmluZyBjaGFyc2V0TmFtZSwKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBwYXJhbWV0ZXJzLCBTdHJpbmdCdWZmZXIgYnVmZmVyLCBMaXN0IGluZGljZXMpIHsKICAgIGlmIChtaW1lVHlwZSA9PSBudWxsIHx8IG1pbWVUeXBlID09ICJ0ZXh0L3BsYWluIikgewogICAgICBtaW1lVHlwZSA9ICIiOwogICAgfQogICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkgfHwgaWRlbnRpY2FsKG1pbWVUeXBlLCAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIikpIHsKICAgICAgYnVmZmVyLndyaXRlKG1pbWVUeXBlKTsgLy8gQ29tbW9uIGNhc2VzIG5lZWQgbm8gZXNjYXBpbmcuCiAgICB9IGVsc2UgewogICAgICBpbnQgc2xhc2hJbmRleCA9IF92YWxpZGF0ZU1pbWVUeXBlKG1pbWVUeXBlKTsKICAgICAgaWYgKHNsYXNoSW5kZXggPCAwKSB7CiAgICAgICAgdGhyb3cgQXJndW1lbnRFcnJvci52YWx1ZShtaW1lVHlwZSwgIm1pbWVUeXBlIiwgIkludmFsaWQgTUlNRSB0eXBlIik7CiAgICAgIH0KICAgICAgYnVmZmVyLndyaXRlKF9VcmkuX3VyaUVuY29kZSgKICAgICAgICAgIF90b2tlbkNoYXJUYWJsZSwgbWltZVR5cGUuc3Vic3RyaW5nKDAsIHNsYXNoSW5kZXgpLCB1dGY4LCBmYWxzZSkpOwogICAgICBidWZmZXIud3JpdGUoIi8iKTsKICAgICAgYnVmZmVyLndyaXRlKF9VcmkuX3VyaUVuY29kZSgKICAgICAgICAgIF90b2tlbkNoYXJUYWJsZSwgbWltZVR5cGUuc3Vic3RyaW5nKHNsYXNoSW5kZXggKyAxKSwgdXRmOCwgZmFsc2UpKTsKICAgIH0KICAgIGlmIChjaGFyc2V0TmFtZSAhPSBudWxsKSB7CiAgICAgIGlmIChpbmRpY2VzICE9IG51bGwpIHsKICAgICAgICBpbmRpY2VzLi5hZGQoYnVmZmVyLmxlbmd0aCkuLmFkZChidWZmZXIubGVuZ3RoICsgOCk7CiAgICAgIH0KICAgICAgYnVmZmVyLndyaXRlKCI7Y2hhcnNldD0iKTsKICAgICAgYnVmZmVyLndyaXRlKF9VcmkuX3VyaUVuY29kZShfdG9rZW5DaGFyVGFibGUsIGNoYXJzZXROYW1lLCB1dGY4LCBmYWxzZSkpOwogICAgfQogICAgcGFyYW1ldGVycz8uZm9yRWFjaCgoa2V5LCB2YWx1ZSkgewogICAgICBpZiAoa2V5LmlzRW1wdHkpIHsKICAgICAgICB0aHJvdyBBcmd1bWVudEVycm9yLnZhbHVlKCIiLCAiUGFyYW1ldGVyIG5hbWVzIG11c3Qgbm90IGJlIGVtcHR5Iik7CiAgICAgIH0KICAgICAgaWYgKHZhbHVlLmlzRW1wdHkpIHsKICAgICAgICB0aHJvdyBBcmd1bWVudEVycm9yLnZhbHVlKAogICAgICAgICAgICAiIiwgIlBhcmFtZXRlciB2YWx1ZXMgbXVzdCBub3QgYmUgZW1wdHkiLCAncGFyYW1ldGVyc1siJGtleSJdJyk7CiAgICAgIH0KICAgICAgaWYgKGluZGljZXMgIT0gbnVsbCkgaW5kaWNlcy5hZGQoYnVmZmVyLmxlbmd0aCk7CiAgICAgIGJ1ZmZlci53cml0ZSgnOycpOwogICAgICAvLyBFbmNvZGUgYW55IG5vbi1SRkMyMDQ1LXRva2VuIGNoYXJhY3RlciBhbmQgYm90aCAnJScgYW5kICcjJy4KICAgICAgYnVmZmVyLndyaXRlKF9VcmkuX3VyaUVuY29kZShfdG9rZW5DaGFyVGFibGUsIGtleSwgdXRmOCwgZmFsc2UpKTsKICAgICAgaWYgKGluZGljZXMgIT0gbnVsbCkgaW5kaWNlcy5hZGQoYnVmZmVyLmxlbmd0aCk7CiAgICAgIGJ1ZmZlci53cml0ZSgnPScpOwogICAgICBidWZmZXIud3JpdGUoX1VyaS5fdXJpRW5jb2RlKF90b2tlbkNoYXJUYWJsZSwgdmFsdWUsIHV0ZjgsIGZhbHNlKSk7CiAgICB9KTsKICB9CgogIC8qKgogICAqIENoZWNrcyBtaW1lVHlwZSBpcyB2YWxpZC1pc2ggKGB0b2tlbiAnLycgdG9rZW5gKS4KICAgKgogICAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBzbGFzaCwgb3IgLTEgaWYgdGhlIG1pbWUgdHlwZSBpcyBub3QKICAgKiBjb25zaWRlcmVkIHZhbGlkLgogICAqCiAgICogQ3VycmVudGx5IG9ubHkgbG9va3MgZm9yIHNsYXNoZXMsIGFsbCBvdGhlciBjaGFyYWN0ZXJzIHdpbGwgYmUKICAgKiBwZXJjZW50LWVuY29kZWQgYXMgVVRGLTggaWYgbmVjZXNzYXJ5LgogICAqLwogIHN0YXRpYyBpbnQgX3ZhbGlkYXRlTWltZVR5cGUoU3RyaW5nIG1pbWVUeXBlKSB7CiAgICBpbnQgc2xhc2hJbmRleCA9IC0xOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaW1lVHlwZS5sZW5ndGg7IGkrKykgewogICAgICB2YXIgY2hhciA9IG1pbWVUeXBlLmNvZGVVbml0QXQoaSk7CiAgICAgIGlmIChjaGFyICE9IF9TTEFTSCkgY29udGludWU7CiAgICAgIGlmIChzbGFzaEluZGV4IDwgMCkgewogICAgICAgIHNsYXNoSW5kZXggPSBpOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIHJldHVybiBzbGFzaEluZGV4OwogIH0KCiAgLyoqCiAgICogUGFyc2VzIGEgc3RyaW5nIGFzIGEgYGRhdGFgIFVSSS4KICAgKgogICAqIFRoZSBzdHJpbmcgbXVzdCBoYXZlIHRoZSBmb3JtYXQ6CiAgICoKICAgKiBgYGAKICAgKiAnZGF0YTonICh0eXBlICcvJyBzdWJ0eXBlKT8gKCc7JyBhdHRyaWJ1dGUgJz0nIHZhbHVlKSogKCc7YmFzZTY0Jyk/ICcsJyBkYXRhCiAgICogYGBgYAogICAqCiAgICogd2hlcmUgYHR5cGVgLCBgc3VidHlwZWAsIGBhdHRyaWJ1dGVgIGFuZCBgdmFsdWVgIGFyZSBzcGVjaWZpZWQgaW4gUkZDLTIwNDUsCiAgICogYW5kIGBkYXRhYCBpcyBhIHNlcXVlbmNlIG9mIFVSSS1jaGFyYWN0ZXJzIChSRkMtMjM5NiBgdXJpY2ApLgogICAqCiAgICogVGhpcyBtZWFucyB0aGF0IGFsbCB0aGUgY2hhcmFjdGVycyBtdXN0IGJlIEFTQ0lJLCBidXQgdGhlIFVSSSBtYXkgY29udGFpbgogICAqIHBlcmNlbnQtZXNjYXBlcyBmb3Igbm9uLUFTQ0lJIGJ5dGUgdmFsdWVzIHRoYXQgbmVlZCBhbiBpbnRlcnByZXRhdGlvbgogICAqIHRvIGJlIGNvbnZlcnRlZCB0byB0aGUgY29ycmVzcG9uZGluZyBzdHJpbmcuCiAgICoKICAgKiBQYXJzaW5nIGNoZWNrcyB0aGF0IEJhc2U2NCBlbmNvZGVkIGRhdGEgaXMgdmFsaWQsIGFuZCBpdCBub3JtYWxpemVzIGl0CiAgICogdG8gdXNlIHRoZSBkZWZhdWx0IEJhc2U2NCBhbHBoYWJldCBhbmQgdG8gdXNlIHBhZGRpbmcuCiAgICogTm9uLUJhc2U2NCBkYXRhIGlzIGVzY2FwZWQgdXNpbmcgcGVyY2VudC1lc2NhcGVzIGFzIG5lY2Vzc2FyeSB0byBtYWtlCiAgICogaXQgdmFsaWQsIGFuZCBleGlzdGluZyBlc2NhcGVzIGFyZSBjYXNlIG5vcm1hbGl6ZWQuCiAgICoKICAgKiBBY2Nlc3NpbmcgdGhlIGluZGl2aWR1YWwgcGFydHMgbWF5IGZhaWwgbGF0ZXIgaWYgdGhleSB0dXJuIG91dCB0byBoYXZlCiAgICogY29udGVudCB0aGF0IGNhbid0IGJlIGRlY29kZWQgc3VjY2Vzc2Z1bGx5IGFzIGEgc3RyaW5nLCBmb3IgZXhhbXBsZSBpZgogICAqIGV4aXN0aW5nIHBlcmNlbnQgZXNjYXBlcyByZXByZXNlbnQgYnl0ZXMgdGhhdCBjYW5ub3QgYmUgZGVjb2RlZAogICAqIGJ5IHRoZSBjaG9zZW4gW0VuY29kaW5nXSAoc2VlIFtjb250ZW50QXNTdHJpbmddKS4KICAgKgogICAqIEEgW0Zvcm1hdEV4Y2VwdGlvbl0gaXMgdGhyb3duIGlmIFt1cmldIGlzIG5vdCBhIHZhbGlkIGRhdGEgVVJJLgogICAqLwogIHN0YXRpYyBVcmlEYXRhIHBhcnNlKFN0cmluZyB1cmkpIHsKICAgIGlmICh1cmkubGVuZ3RoID49IDUpIHsKICAgICAgaW50IGRhdGFEZWx0YSA9IF9zdGFydHNXaXRoRGF0YSh1cmksIDApOwogICAgICBpZiAoZGF0YURlbHRhID09IDApIHsKICAgICAgICAvLyBFeGFjdCBtYXRjaCBvbiAiZGF0YToiLgogICAgICAgIHJldHVybiBfcGFyc2UodXJpLCA1LCBudWxsKTsKICAgICAgfQogICAgICBpZiAoZGF0YURlbHRhID09IDB4MjApIHsKICAgICAgICAvLyBTdGFydHMgd2l0aCBhIG5vbi1ub3JtYWxpemVkICJkYXRhIiBzY2hlbWUgY29udGFpbmluZyB1cHBlci1jYXNlCiAgICAgICAgLy8gbGV0dGVycy4gUGFyc2UgYW55d2F5LCBidXQgdGhyb3cgYXdheSB0aGUgc2NoZW1lLgogICAgICAgIHJldHVybiBfcGFyc2UodXJpLnN1YnN0cmluZyg1KSwgMCwgbnVsbCk7CiAgICAgIH0KICAgIH0KICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiRG9lcyBub3Qgc3RhcnQgd2l0aCAnZGF0YTonIiwgdXJpLCAwKTsKICB9CgogIC8qKgogICAqIFRoZSBbVXJpXSB0aGF0IHRoaXMgYFVyaURhdGFgIGlzIGdpdmluZyBhY2Nlc3MgdG8uCiAgICoKICAgKiBSZXR1cm5zIGEgYFVyaWAgd2l0aCBzY2hlbWUgYGRhdGFgIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoZSBkYXRhIFVSSQogICAqIGFzIHBhdGguCiAgICovCiAgVXJpIGdldCB1cmkgewogICAgaWYgKF91cmlDYWNoZSAhPSBudWxsKSByZXR1cm4gX3VyaUNhY2hlOwogICAgU3RyaW5nIHBhdGggPSBfdGV4dDsKICAgIFN0cmluZyBxdWVyeTsKICAgIGludCBjb2xvbkluZGV4ID0gX3NlcGFyYXRvckluZGljZXNbMF07CiAgICBpbnQgcXVlcnlJbmRleCA9IF90ZXh0LmluZGV4T2YoJz8nLCBjb2xvbkluZGV4ICsgMSk7CiAgICBpbnQgZW5kID0gX3RleHQubGVuZ3RoOwogICAgaWYgKHF1ZXJ5SW5kZXggPj0gMCkgewogICAgICBxdWVyeSA9IF9VcmkuX25vcm1hbGl6ZU9yU3Vic3RyaW5nKAogICAgICAgICAgX3RleHQsIHF1ZXJ5SW5kZXggKyAxLCBlbmQsIF9VcmkuX3F1ZXJ5Q2hhclRhYmxlKTsKICAgICAgZW5kID0gcXVlcnlJbmRleDsKICAgIH0KICAgIHBhdGggPSBfVXJpLl9ub3JtYWxpemVPclN1YnN0cmluZygKICAgICAgICBfdGV4dCwgY29sb25JbmRleCArIDEsIGVuZCwgX1VyaS5fcGF0aENoYXJPclNsYXNoVGFibGUpOwogICAgX3VyaUNhY2hlID0gX0RhdGFVcmkodGhpcywgcGF0aCwgcXVlcnkpOwogICAgcmV0dXJuIF91cmlDYWNoZTsKICB9CgogIC8qKgogICAqIFRoZSBNSU1FIHR5cGUgb2YgdGhlIGRhdGEgVVJJLgogICAqCiAgICogQSBkYXRhIFVSSSBjb25zaXN0cyBvZiBhICJtZWRpYSB0eXBlIiBmb2xsb3dlZCBieSBkYXRhLgogICAqIFRoZSBtZWRpYSB0eXBlIHN0YXJ0cyB3aXRoIGEgTUlNRSB0eXBlIGFuZCBjYW4gYmUgZm9sbG93ZWQgYnkKICAgKiBleHRyYSBwYXJhbWV0ZXJzLgogICAqIElmIHRoZSBNSU1FIHR5cGUgcmVwcmVzZW50YXRpb24gaW4gdGhlIFVSSSB0ZXh0IGNvbnRhaW5zIFVSSSBlc2NhcGVzLAogICAqIHRoZXkgYXJlIHVuZXNjYXBlZCBpbiB0aGUgcmV0dXJuZWQgc3RyaW5nLgogICAqIElmIHRoZSB2YWx1ZSBjb250YWluIG5vbi1BU0NJSSBwZXJjZW50IGVzY2FwZXMsIHRoZXkgYXJlIGRlY29kZWQgYXMgVVRGLTguCiAgICoKICAgKiBFeGFtcGxlOgogICAqCiAgICogICAgIGRhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04LEhlbGxvJTIwV29ybGQhCiAgICoKICAgKiBUaGlzIGRhdGEgVVJJIGhhcyB0aGUgbWVkaWEgdHlwZSBgdGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04YCwgd2hpY2ggaXMgdGhlCiAgICogTUlNRSB0eXBlIGB0ZXh0L3BsYWluYCB3aXRoIHRoZSBwYXJhbWV0ZXIgYGNoYXJzZXRgIHdpdGggdmFsdWUgYHV0Zi04YC4KICAgKiBTZWUgW1JGQyAyMDQ1XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjA0NSkgZm9yIG1vcmUgZGV0YWlsLgogICAqCiAgICogSWYgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGRhdGEgVVJJIGlzIGVtcHR5LCBpdCBkZWZhdWx0cyB0byBgdGV4dC9wbGFpbmAuCiAgICovCiAgU3RyaW5nIGdldCBtaW1lVHlwZSB7CiAgICBpbnQgc3RhcnQgPSBfc2VwYXJhdG9ySW5kaWNlc1swXSArIDE7CiAgICBpbnQgZW5kID0gX3NlcGFyYXRvckluZGljZXNbMV07CiAgICBpZiAoc3RhcnQgPT0gZW5kKSByZXR1cm4gInRleHQvcGxhaW4iOwogICAgcmV0dXJuIF9VcmkuX3VyaURlY29kZShfdGV4dCwgc3RhcnQsIGVuZCwgdXRmOCwgZmFsc2UpOwogIH0KCiAgLyoqCiAgICogVGhlIGNoYXJzZXQgcGFyYW1ldGVyIG9mIHRoZSBtZWRpYSB0eXBlLgogICAqCiAgICogSWYgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIG1lZGlhIHR5cGUgY29udGFpbnMgYSBgY2hhcnNldGAgcGFyYW1ldGVyCiAgICogdGhlbiB0aGlzIHJldHVybnMgaXRzIHZhbHVlLCBvdGhlcndpc2UgaXQgcmV0dXJucyBgVVMtQVNDSUlgLAogICAqIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGNoYXJzZXQgZm9yIGRhdGEgVVJJcy4KICAgKiBJZiB0aGUgdmFsdWUgY29udGFpbiBub24tQVNDSUkgcGVyY2VudCBlc2NhcGVzLCB0aGV5IGFyZSBkZWNvZGVkIGFzIFVURi04LgogICAqCiAgICogSWYgdGhlIE1JTUUgdHlwZSByZXByZXNlbnRhdGlvbiBpbiB0aGUgVVJJIHRleHQgY29udGFpbnMgVVJJIGVzY2FwZXMsCiAgICogdGhleSBhcmUgdW5lc2NhcGVkIGluIHRoZSByZXR1cm5lZCBzdHJpbmcuCiAgICovCiAgU3RyaW5nIGdldCBjaGFyc2V0IHsKICAgIGludCBwYXJhbWV0ZXJTdGFydCA9IDE7CiAgICBpbnQgcGFyYW1ldGVyRW5kID0gX3NlcGFyYXRvckluZGljZXMubGVuZ3RoIC0gMTsgLy8gVGhlICcsJyBiZWZvcmUgZGF0YS4KICAgIGlmIChpc0Jhc2U2NCkgewogICAgICAvLyBUaGVyZSBpcyBhICI7YmFzZTY0IiBzZXBhcmF0b3IsIHNvIHN1YnRyYWN0IG9uZSBmb3IgdGhhdCBhcyB3ZWxsLgogICAgICBwYXJhbWV0ZXJFbmQgLT0gMTsKICAgIH0KICAgIGZvciAoaW50IGkgPSBwYXJhbWV0ZXJTdGFydDsgaSA8IHBhcmFtZXRlckVuZDsgaSArPSAyKSB7CiAgICAgIHZhciBrZXlTdGFydCA9IF9zZXBhcmF0b3JJbmRpY2VzW2ldICsgMTsKICAgICAgdmFyIGtleUVuZCA9IF9zZXBhcmF0b3JJbmRpY2VzW2kgKyAxXTsKICAgICAgaWYgKGtleUVuZCA9PSBrZXlTdGFydCArIDcgJiYgX3RleHQuc3RhcnRzV2l0aCgiY2hhcnNldCIsIGtleVN0YXJ0KSkgewogICAgICAgIHJldHVybiBfVXJpLl91cmlEZWNvZGUoCiAgICAgICAgICAgIF90ZXh0LCBrZXlFbmQgKyAxLCBfc2VwYXJhdG9ySW5kaWNlc1tpICsgMl0sIHV0ZjgsIGZhbHNlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuICJVUy1BU0NJSSI7CiAgfQoKICAvKioKICAgKiBXaGV0aGVyIHRoZSBkYXRhIGlzIEJhc2U2NCBlbmNvZGVkIG9yIG5vdC4KICAgKi8KICBib29sIGdldCBpc0Jhc2U2NCA9PiBfc2VwYXJhdG9ySW5kaWNlcy5sZW5ndGguaXNPZGQ7CgogIC8qKgogICAqIFRoZSBjb250ZW50IHBhcnQgb2YgdGhlIGRhdGEgVVJJLCBhcyBpdHMgYWN0dWFsIHJlcHJlc2VudGF0aW9uLgogICAqCiAgICogVGhpcyBzdHJpbmcgbWF5IGNvbnRhaW4gcGVyY2VudCBlc2NhcGVzLgogICAqLwogIFN0cmluZyBnZXQgY29udGVudFRleHQgPT4gX3RleHQuc3Vic3RyaW5nKF9zZXBhcmF0b3JJbmRpY2VzLmxhc3QgKyAxKTsKCiAgLyoqCiAgICogVGhlIGNvbnRlbnQgcGFydCBvZiB0aGUgZGF0YSBVUkkgYXMgYnl0ZXMuCiAgICoKICAgKiBJZiB0aGUgZGF0YSBpcyBCYXNlNjQgZW5jb2RlZCwgaXQgd2lsbCBiZSBkZWNvZGVkIHRvIGJ5dGVzLgogICAqCiAgICogSWYgdGhlIGRhdGEgaXMgbm90IEJhc2U2NCBlbmNvZGVkLCBpdCB3aWxsIGJlIGRlY29kZWQgYnkgdW5lc2NhcGluZwogICAqIHBlcmNlbnQtZXNjYXBlZCBjaGFyYWN0ZXJzIGFuZCByZXR1cm5pbmcgYnl0ZSB2YWx1ZXMgb2YgZWFjaCB1bmVzY2FwZWQKICAgKiBjaGFyYWN0ZXIuIFRoZSBieXRlcyB3aWxsIG5vdCBiZSwgZS5nLiwgVVRGLTggZGVjb2RlZC4KICAgKi8KICBVaW50OExpc3QgY29udGVudEFzQnl0ZXMoKSB7CiAgICBTdHJpbmcgdGV4dCA9IF90ZXh0OwogICAgaW50IHN0YXJ0ID0gX3NlcGFyYXRvckluZGljZXMubGFzdCArIDE7CiAgICBpZiAoaXNCYXNlNjQpIHsKICAgICAgcmV0dXJuIGJhc2U2NC5kZWNvZGVyLmNvbnZlcnQodGV4dCwgc3RhcnQpOwogICAgfQoKICAgIC8vIE5vdCBiYXNlNjQsIGRvIHBlcmNlbnQtZGVjb2RpbmcgYW5kIHJldHVybiB0aGUgcmVtYWluaW5nIGJ5dGVzLgogICAgLy8gQ29tcHV0ZSByZXN1bHQgc2l6ZS4KICAgIGNvbnN0IGludCBwZXJjZW50ID0gMHgyNTsKICAgIGludCBsZW5ndGggPSB0ZXh0Lmxlbmd0aCAtIHN0YXJ0OwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgdGV4dC5sZW5ndGg7IGkrKykgewogICAgICB2YXIgY29kZVVuaXQgPSB0ZXh0LmNvZGVVbml0QXQoaSk7CiAgICAgIGlmIChjb2RlVW5pdCA9PSBwZXJjZW50KSB7CiAgICAgICAgaSArPSAyOwogICAgICAgIGxlbmd0aCAtPSAyOwogICAgICB9CiAgICB9CiAgICAvLyBGaWxsIHJlc3VsdCBhcnJheS4KICAgIFVpbnQ4TGlzdCByZXN1bHQgPSBVaW50OExpc3QobGVuZ3RoKTsKICAgIGlmIChsZW5ndGggPT0gdGV4dC5sZW5ndGgpIHsKICAgICAgcmVzdWx0LnNldFJhbmdlKDAsIGxlbmd0aCwgdGV4dC5jb2RlVW5pdHMsIHN0YXJ0KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGludCBpbmRleCA9IDA7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBjb2RlVW5pdCA9IHRleHQuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNvZGVVbml0ICE9IHBlcmNlbnQpIHsKICAgICAgICByZXN1bHRbaW5kZXgrK10gPSBjb2RlVW5pdDsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoaSArIDIgPCB0ZXh0Lmxlbmd0aCkgewogICAgICAgICAgaW50IGJ5dGUgPSBwYXJzZUhleEJ5dGUodGV4dCwgaSArIDEpOwogICAgICAgICAgaWYgKGJ5dGUgPj0gMCkgewogICAgICAgICAgICByZXN1bHRbaW5kZXgrK10gPSBieXRlOwogICAgICAgICAgICBpICs9IDI7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oIkludmFsaWQgcGVyY2VudCBlc2NhcGUiLCB0ZXh0LCBpKTsKICAgICAgfQogICAgfQogICAgYXNzZXJ0KGluZGV4ID09IHJlc3VsdC5sZW5ndGgpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBzdHJpbmcgY3JlYXRlZCBmcm9tIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIFVSSS4KICAgKgogICAqIElmIHRoZSBjb250ZW50IGlzIEJhc2U2NCBlbmNvZGVkLCBpdCB3aWxsIGJlIGRlY29kZWQgdG8gYnl0ZXMgYW5kIHRoZW4KICAgKiBkZWNvZGVkIHRvIGEgc3RyaW5nIHVzaW5nIFtlbmNvZGluZ10uCiAgICogSWYgZW5jb2RpbmcgaXMgb21pdHRlZCwgdGhlIHZhbHVlIG9mIGEgYGNoYXJzZXRgIHBhcmFtZXRlciBpcyB1c2VkCiAgICogaWYgaXQgaXMgcmVjb2duaXplZCBieSBbRW5jb2RpbmcuZ2V0QnlOYW1lXSwgb3RoZXJ3aXNlIGl0IGRlZmF1bHRzIHRvCiAgICogdGhlIFthc2NpaV0gZW5jb2RpbmcsIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGVuY29kaW5nIGZvciBkYXRhIFVSSXMKICAgKiB0aGF0IGRvIG5vdCBzcGVjaWZ5IGFuIGVuY29kaW5nLgogICAqCiAgICogSWYgdGhlIGNvbnRlbnQgaXMgbm90IEJhc2U2NCBlbmNvZGVkLCBpdCB3aWxsIGZpcnN0IGhhdmUgcGVyY2VudC1lc2NhcGVzCiAgICogY29udmVydGVkIHRvIGJ5dGVzIGFuZCB0aGVuIHRoZSBjaGFyYWN0ZXIgY29kZXMgYW5kIGJ5dGUgdmFsdWVzIGFyZQogICAqIGRlY29kZWQgdXNpbmcgW2VuY29kaW5nXS4KICAgKi8KICBTdHJpbmcgY29udGVudEFzU3RyaW5nKHtFbmNvZGluZyBlbmNvZGluZ30pIHsKICAgIGlmIChlbmNvZGluZyA9PSBudWxsKSB7CiAgICAgIHZhciBjaGFyc2V0ID0gdGhpcy5jaGFyc2V0OyAvLyBSZXR1cm5zICJVUy1BU0NJSSIgaWYgbm90IHByZXNlbnQuCiAgICAgIGVuY29kaW5nID0gRW5jb2RpbmcuZ2V0QnlOYW1lKGNoYXJzZXQpOwogICAgICBpZiAoZW5jb2RpbmcgPT0gbnVsbCkgewogICAgICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIlVua25vd24gY2hhcnNldDogJGNoYXJzZXQiKTsKICAgICAgfQogICAgfQogICAgU3RyaW5nIHRleHQgPSBfdGV4dDsKICAgIGludCBzdGFydCA9IF9zZXBhcmF0b3JJbmRpY2VzLmxhc3QgKyAxOwogICAgaWYgKGlzQmFzZTY0KSB7CiAgICAgIHZhciBjb252ZXJ0ZXIgPSBiYXNlNjQuZGVjb2Rlci5mdXNlKGVuY29kaW5nLmRlY29kZXIpOwogICAgICByZXR1cm4gY29udmVydGVyLmNvbnZlcnQodGV4dC5zdWJzdHJpbmcoc3RhcnQpKTsKICAgIH0KICAgIHJldHVybiBfVXJpLl91cmlEZWNvZGUodGV4dCwgc3RhcnQsIHRleHQubGVuZ3RoLCBlbmNvZGluZywgZmFsc2UpOwogIH0KCiAgLyoqCiAgICogQSBtYXAgcmVwcmVzZW50aW5nIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBtZWRpYSB0eXBlLgogICAqCiAgICogQSBkYXRhIFVSSSBtYXkgY29udGFpbiBwYXJhbWV0ZXJzIGJldHdlZW4gdGhlIE1JTUUgdHlwZSBhbmQgdGhlCiAgICogZGF0YS4gVGhpcyBjb252ZXJ0cyB0aGVzZSBwYXJhbWV0ZXJzIHRvIGEgbWFwIGZyb20gcGFyYW1ldGVyIG5hbWUKICAgKiB0byBwYXJhbWV0ZXIgdmFsdWUuCiAgICogVGhlIG1hcCBvbmx5IGNvbnRhaW5zIHBhcmFtZXRlcnMgdGhhdCBhY3R1YWxseSBvY2N1ciBpbiB0aGUgVVJJLgogICAqIFRoZSBgY2hhcnNldGAgcGFyYW1ldGVyIGhhcyBhIGRlZmF1bHQgdmFsdWUgZXZlbiBpZiBpdCBkb2Vzbid0IG9jY3VyCiAgICogaW4gdGhlIFVSSSwgd2hpY2ggaXMgcmVmbGVjdGVkIGJ5IHRoZSBbY2hhcnNldF0gZ2V0dGVyLiBUaGlzIG1lYW5zIHRoYXQKICAgKiBbY2hhcnNldF0gbWF5IHJldHVybiBhIHZhbHVlIGV2ZW4gaWYgYHBhcmFtZXRlcnNbImNoYXJzZXQiXWAgaXMgYG51bGxgLgogICAqCiAgICogSWYgdGhlIHZhbHVlcyBjb250YWluIG5vbi1BU0NJSSB2YWx1ZXMgb3IgcGVyY2VudCBlc2NhcGVzLAogICAqIHRoZXkgYXJlIGRlY29kZWQgYXMgVVRGLTguCiAgICovCiAgTWFwPFN0cmluZywgU3RyaW5nPiBnZXQgcGFyYW1ldGVycyB7CiAgICB2YXIgcmVzdWx0ID0gPFN0cmluZywgU3RyaW5nPnt9OwogICAgZm9yIChpbnQgaSA9IDM7IGkgPCBfc2VwYXJhdG9ySW5kaWNlcy5sZW5ndGg7IGkgKz0gMikgewogICAgICB2YXIgc3RhcnQgPSBfc2VwYXJhdG9ySW5kaWNlc1tpIC0gMl0gKyAxOwogICAgICB2YXIgZXF1YWxzID0gX3NlcGFyYXRvckluZGljZXNbaSAtIDFdOwogICAgICB2YXIgZW5kID0gX3NlcGFyYXRvckluZGljZXNbaV07CiAgICAgIFN0cmluZyBrZXkgPSBfVXJpLl91cmlEZWNvZGUoX3RleHQsIHN0YXJ0LCBlcXVhbHMsIHV0ZjgsIGZhbHNlKTsKICAgICAgU3RyaW5nIHZhbHVlID0gX1VyaS5fdXJpRGVjb2RlKF90ZXh0LCBlcXVhbHMgKyAxLCBlbmQsIHV0ZjgsIGZhbHNlKTsKICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgVXJpRGF0YSBfcGFyc2UoU3RyaW5nIHRleHQsIGludCBzdGFydCwgVXJpIHNvdXJjZVVyaSkgewogICAgYXNzZXJ0KHN0YXJ0ID09IDAgfHwgc3RhcnQgPT0gNSk7CiAgICBhc3NlcnQoKHN0YXJ0ID09IDUpID09IHRleHQuc3RhcnRzV2l0aCgiZGF0YToiKSk7CgogICAgLy8vIENoYXJhY3RlciBjb2Rlcy4KICAgIGNvbnN0IGludCBjb21tYSA9IDB4MmM7CiAgICBjb25zdCBpbnQgc2xhc2ggPSAweDJmOwogICAgY29uc3QgaW50IHNlbWljb2xvbiA9IDB4M2I7CiAgICBjb25zdCBpbnQgZXF1YWxzID0gMHgzZDsKICAgIExpc3Q8aW50PiBpbmRpY2VzID0gW3N0YXJ0IC0gMV07CiAgICBpbnQgc2xhc2hJbmRleCA9IC0xOwogICAgdmFyIGNoYXI7CiAgICBpbnQgaSA9IHN0YXJ0OwogICAgZm9yICg7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7CiAgICAgIGNoYXIgPSB0ZXh0LmNvZGVVbml0QXQoaSk7CiAgICAgIGlmIChjaGFyID09IGNvbW1hIHx8IGNoYXIgPT0gc2VtaWNvbG9uKSBicmVhazsKICAgICAgaWYgKGNoYXIgPT0gc2xhc2gpIHsKICAgICAgICBpZiAoc2xhc2hJbmRleCA8IDApIHsKICAgICAgICAgIHNsYXNoSW5kZXggPSBpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBNSU1FIHR5cGUiLCB0ZXh0LCBpKTsKICAgICAgfQogICAgfQogICAgaWYgKHNsYXNoSW5kZXggPCAwICYmIGkgPiBzdGFydCkgewogICAgICAvLyBBbiBlbXB0eSBNSU1FIHR5cGUgaXMgYWxsb3dlZCwgYnV0IGlmIG5vbi1lbXB0eSBpdCBtdXN0IGNvbnRhaW4KICAgICAgLy8gZXhhY3RseSBvbmUgc2xhc2guCiAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBNSU1FIHR5cGUiLCB0ZXh0LCBpKTsKICAgIH0KICAgIHdoaWxlIChjaGFyICE9IGNvbW1hKSB7CiAgICAgIC8vIFBhcnNlIHBhcmFtZXRlcnMgYW5kL29yICJiYXNlNjQiLgogICAgICBpbmRpY2VzLmFkZChpKTsKICAgICAgaSsrOwogICAgICBpbnQgZXF1YWxzSW5kZXggPSAtMTsKICAgICAgZm9yICg7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgY2hhciA9IHRleHQuY29kZVVuaXRBdChpKTsKICAgICAgICBpZiAoY2hhciA9PSBlcXVhbHMpIHsKICAgICAgICAgIGlmIChlcXVhbHNJbmRleCA8IDApIGVxdWFsc0luZGV4ID0gaTsKICAgICAgICB9IGVsc2UgaWYgKGNoYXIgPT0gc2VtaWNvbG9uIHx8IGNoYXIgPT0gY29tbWEpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoZXF1YWxzSW5kZXggPj0gMCkgewogICAgICAgIGluZGljZXMuYWRkKGVxdWFsc0luZGV4KTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBIYXZlIHRvIGJlIGZpbmFsICJiYXNlNjQiLgogICAgICAgIHZhciBsYXN0U2VwYXJhdG9yID0gaW5kaWNlcy5sYXN0OwogICAgICAgIGlmIChjaGFyICE9IGNvbW1hIHx8CiAgICAgICAgICAgIGkgIT0gbGFzdFNlcGFyYXRvciArIDcgLyogImJhc2U2NCwiLmxlbmd0aCAqLyB8fAogICAgICAgICAgICAhdGV4dC5zdGFydHNXaXRoKCJiYXNlNjQiLCBsYXN0U2VwYXJhdG9yICsgMSkpIHsKICAgICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiRXhwZWN0aW5nICc9JyIsIHRleHQsIGkpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaW5kaWNlcy5hZGQoaSk7CiAgICBib29sIGlzQmFzZTY0ID0gaW5kaWNlcy5sZW5ndGguaXNPZGQ7CiAgICBpZiAoaXNCYXNlNjQpIHsKICAgICAgdGV4dCA9IGJhc2U2NC5ub3JtYWxpemUodGV4dCwgaSArIDEsIHRleHQubGVuZ3RoKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFZhbGlkYXRlICJkYXRhIiBwYXJ0LCBtdXN0IG9ubHkgY29udGFpbiBSRkMgMjM5NiAndXJpYycgY2hhcmFjdGVycwogICAgICAvLyAocmVzZXJ2ZWQsIHVucmVzZXJ2ZWQsIG9yIGVzY2FwZSBzZXF1ZW5jZXMpLgogICAgICAvLyBOb3JtYWxpemUgdG8gdGhpcyAodGhyb3dzIG9uIGEgZnJhZ21lbnQgc2VwYXJhdG9yKS4KICAgICAgdmFyIGRhdGEgPSBfVXJpLl9ub3JtYWxpemUodGV4dCwgaSArIDEsIHRleHQubGVuZ3RoLCBfdXJpY1RhYmxlLAogICAgICAgICAgZXNjYXBlRGVsaW1pdGVyczogdHJ1ZSk7CiAgICAgIGlmIChkYXRhICE9IG51bGwpIHsKICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlUmFuZ2UoaSArIDEsIHRleHQubGVuZ3RoLCBkYXRhKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIFVyaURhdGEuXyh0ZXh0LCBpbmRpY2VzLCBzb3VyY2VVcmkpOwogIH0KCiAgLyoqCiAgICogTGlrZSBbVXJpLl91cmlFbmNvZGVdIGJ1dCB0YWtlcyB0aGUgaW5wdXQgYXMgYnl0ZXMsIG5vdCBhIHN0cmluZy4KICAgKgogICAqIEVuY29kZXMgaW50byBbYnVmZmVyXSBpbnN0ZWFkIG9mIGNyZWF0aW5nIGl0cyBvd24gYnVmZmVyLgogICAqLwogIHN0YXRpYyB2b2lkIF91cmlFbmNvZGVCeXRlcygKICAgICAgTGlzdDxpbnQ+IGNhbm9uaWNhbFRhYmxlLCBMaXN0PGludD4gYnl0ZXMsIFN0cmluZ1NpbmsgYnVmZmVyKSB7CiAgICAvLyBFbmNvZGUgdGhlIHN0cmluZyBpbnRvIGJ5dGVzIHRoZW4gZ2VuZXJhdGUgYW4gQVNDSUkgb25seSBzdHJpbmcKICAgIC8vIGJ5IHBlcmNlbnQgZW5jb2Rpbmcgc2VsZWN0ZWQgYnl0ZXMuCiAgICBpbnQgYnl0ZU9yID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaW50IGJ5dGUgPSBieXRlc1tpXTsKICAgICAgYnl0ZU9yIHw9IGJ5dGU7CiAgICAgIGlmIChieXRlIDwgMTI4ICYmCiAgICAgICAgICAoKGNhbm9uaWNhbFRhYmxlW2J5dGUgPj4gNF0gJiAoMSA8PCAoYnl0ZSAmIDB4MGYpKSkgIT0gMCkpIHsKICAgICAgICBidWZmZXIud3JpdGVDaGFyQ29kZShieXRlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBidWZmZXIud3JpdGVDaGFyQ29kZShfUEVSQ0VOVCk7CiAgICAgICAgYnVmZmVyLndyaXRlQ2hhckNvZGUoX2hleERpZ2l0cy5jb2RlVW5pdEF0KGJ5dGUgPj4gNCkpOwogICAgICAgIGJ1ZmZlci53cml0ZUNoYXJDb2RlKF9oZXhEaWdpdHMuY29kZVVuaXRBdChieXRlICYgMHgwZikpOwogICAgICB9CiAgICB9CiAgICBpZiAoKGJ5dGVPciAmIH4weEZGKSAhPSAwKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgYnl0ZSA9IGJ5dGVzW2ldOwogICAgICAgIGlmIChieXRlIDwgMCB8fCBieXRlID4gMjU1KSB7CiAgICAgICAgICB0aHJvdyBBcmd1bWVudEVycm9yLnZhbHVlKGJ5dGUsICJub24tYnl0ZSB2YWx1ZSIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgKF9zZXBhcmF0b3JJbmRpY2VzWzBdID09IF9ub1NjaGVtZSkgPyAiZGF0YTokX3RleHQiIDogX3RleHQ7CgogIC8vIFRhYmxlIG9mIHRoZSBgdG9rZW5gIGNoYXJhY3RlcnMgb2YgUkZDIDIwNDUgaW4gYSBVUkkuCiAgLy8KICAvLyBBIHRva2VuIGlzIGFueSBVUy1BU0NJSSBjaGFyYWN0ZXIgZXhjZXB0IFNQQUNFLCBjb250cm9sIGNoYXJhY3RlcnMgYW5kCiAgLy8gYHRzcGVjaWFsYCBjaGFyYWN0ZXJzLiBUaGUgYHRzcGVjaWFsYCBjYXRlZ29yeSBpczoKICAvLyAnKCcsICcpJywgJzwnLCAnPicsICdAJywgJywnLCAnOycsICc6JywgJ1wnLCAnIicsICcvJywgJ1ssICddJywgJz8nLCAnPScuCiAgLy8KICAvLyBJbiBhIGRhdGEgVVJJLCB3ZSBhbHNvIG5lZWQgdG8gZXNjYXBlICclJyBhbmQgJyMnIGNoYXJhY3RlcnMuCiAgc3RhdGljIGNvbnN0IF90b2tlbkNoYXJUYWJsZSA9IFsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgTFNCICAgICAgICAgICAgIE1TQgogICAgLy8gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwKICAgIDB4MDAwMCwgLy8gMHgwMCAtIDB4MGYgIDAwMDAwMDAwIDAwMDAwMDAwCiAgICAweDAwMDAsIC8vIDB4MTAgLSAweDFmICAwMDAwMDAwMCAwMDAwMDAwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgICEgICQgJicgICAqKyAtLgogICAgMHg2Y2QyLCAvLyAweDIwIC0gMHgyZiAgMDEwMDEwMTEgMDAxMTAxMTAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIDAxMjM0NTY3IDg5CiAgICAweDAzZmYsIC8vIDB4MzAgLSAweDNmICAxMTExMTExMSAxMTAwMDAwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgIEFCQ0RFRkcgSElKS0xNTk8KICAgIDB4ZmZmZSwgLy8gMHg0MCAtIDB4NGYgIDAxMTExMTExIDExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBQUVJTVFVWVyBYWVogICBeXwogICAgMHhjN2ZmLCAvLyAweDUwIC0gMHg1ZiAgMTExMTExMTEgMTExMDAwMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIGBhYmNkZWZnIGhpamtsbW5vCiAgICAweGZmZmYsIC8vIDB4NjAgLSAweDZmICAxMTExMTExMSAxMTExMTExMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgcHFyc3R1dncgeHl6e3x9fgogICAgMHg3ZmZmLCAvLyAweDcwIC0gMHg3ZiAgMTExMTExMTEgMTExMTExMTAKICBdOwoKICAvLyBBbGwgbm9uLWVzY2FwZSBSRkMtMjM5NiB1cmljIGNoYXJhY3RlcnMuCiAgLy8KICAvLyAgdXJpYyAgICAgICAgPSAgcmVzZXJ2ZWQgfCB1bnJlc2VydmVkIHwgZXNjYXBlZAogIC8vICByZXNlcnZlZCAgICA9ICAiOyIgfCAiLyIgfCAiPyIgfCAiOiIgfCAiQCIgfCAiJiIgfCAiPSIgfCAiKyIgfCAiJCIgfCAiLCIKICAvLyAgdW5yZXNlcnZlZCAgPSAgYWxwaGFudW0gfCBtYXJrCiAgLy8gIG1hcmsgICAgICAgID0gICItIiB8ICJfIiB8ICIuIiB8ICIhIiB8ICJ+IiB8ICIqIiB8ICInIiB8ICIoIiB8ICIpIgogIC8vCiAgLy8gVGhpcyBpcyB0aGUgc2FtZSBjaGFyYWN0ZXJzIGFzIGluIGEgVVJJIHF1ZXJ5ICh3aGljaCBpcyBVUkkgcGNoYXIgcGx1cyAnPycpCiAgc3RhdGljIGNvbnN0IF91cmljVGFibGUgPSBfVXJpLl9xdWVyeUNoYXJUYWJsZTsKCiAgLy8gQ2hhcmFjdGVycyBhbGxvd2VkIGluIGJhc2UtNjQgZW5jb2RpbmcgKGFscGhhbnVtZXJpYywgJy8nLCAnKycgYW5kICc9JykuCiAgc3RhdGljIGNvbnN0IF9iYXNlNjRUYWJsZSA9IFsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgTFNCICAgICAgICAgICAgIE1TQgogICAgLy8gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwKICAgIDB4MDAwMCwgLy8gMHgwMCAtIDB4MGYgIDAwMDAwMDAwIDAwMDAwMDAwCiAgICAweDAwMDAsIC8vIDB4MTAgLSAweDFmICAwMDAwMDAwMCAwMDAwMDAwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAgIC8KICAgIDB4ODgwMCwgLy8gMHgyMCAtIDB4MmYgIDAwMDAwMDAwIDAwMDEwMDAxCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAwMTIzNDU2NyA4OQogICAgMHgwM2ZmLCAvLyAweDMwIC0gMHgzZiAgMTExMTExMTEgMTEwMDAwMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBBQkNERUZHIEhJSktMTU5PCiAgICAweGZmZmUsIC8vIDB4NDAgLSAweDRmICAwMTExMTExMSAxMTExMTExMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgUFFSU1RVVlcgWFlaCiAgICAweDA3ZmYsIC8vIDB4NTAgLSAweDVmICAxMTExMTExMSAxMTEwMDAwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGFiY2RlZmcgaGlqa2xtbm8KICAgIDB4ZmZmZSwgLy8gMHg2MCAtIDB4NmYgIDAxMTExMTExIDExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBwcXJzdHV2dyB4eXoKICAgIDB4MDdmZiwgLy8gMHg3MCAtIDB4N2YgIDExMTExMTExIDExMTAwMDAwCiAgXTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gQ29uc3RhbnRzIHVzZWQgdG8gcmVhZCB0aGUgc2Nhbm5lciByZXN1bHQuCi8vIFRoZSBpbmRpY2VzIHBvaW50cyBpbnRvIHRoZSB0YWJsZSBmaWxsZWQgYnkgW19zY2FuXSB3aGljaCBjb250YWlucwovLyByZWNvZ25pemVkIHBvc2l0aW9ucyBpbiB0aGUgc2Nhbm5lZCBVUkkuCi8vIFRoZSBgMGAgaW5kZXggaXMgb25seSB1c2VkIGludGVybmFsbHkuCgovLy8gSW5kZXggb2YgdGhlIHBvc2l0aW9uIG9mIHRoYXQgYDpgIGFmdGVyIGEgc2NoZW1lLgpjb25zdCBpbnQgX3NjaGVtZUVuZEluZGV4ID0gMTsKCi8vLyBJbmRleCBvZiB0aGUgcG9zaXRpb24gb2YgdGhlIGNoYXJhY3RlciBqdXN0IGJlZm9yZSB0aGUgaG9zdCBuYW1lLgpjb25zdCBpbnQgX2hvc3RTdGFydEluZGV4ID0gMjsKCi8vLyBJbmRleCBvZiB0aGUgcG9zaXRpb24gb2YgdGhlIGA6YCBiZWZvcmUgYSBwb3J0IHZhbHVlLgpjb25zdCBpbnQgX3BvcnRTdGFydEluZGV4ID0gMzsKCi8vLyBJbmRleCBvZiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIHBhdGguCmNvbnN0IGludCBfcGF0aFN0YXJ0SW5kZXggPSA0OwoKLy8vIEluZGV4IG9mIHRoZSBwb3NpdGlvbiBvZiB0aGUgYD9gIGJlZm9yZSBhIHF1ZXJ5Lgpjb25zdCBpbnQgX3F1ZXJ5U3RhcnRJbmRleCA9IDU7CgovLy8gSW5kZXggb2YgdGhlIHBvc2l0aW9uIG9mIHRoZSBgI2AgYmVmb3JlIGEgZnJhZ21lbnQuCmNvbnN0IGludCBfZnJhZ21lbnRTdGFydEluZGV4ID0gNjsKCi8vLyBJbmRleCBvZiBhIHBvc2l0aW9uIHdoZXJlIHRoZSBVUkkgd2FzIGRldGVybWluZWQgdG8gYmUgIm5vbi1zaW1wbGUiLgpjb25zdCBpbnQgX25vdFNpbXBsZUluZGV4ID0gNzsKCi8vIEluaXRpYWwgc3RhdGUgZm9yIHNjYW5uZXIuCmNvbnN0IGludCBfdXJpU3RhcnQgPSAwMDsKCi8vIElmIHNjYW5uaW5nIG9mIGEgVVJJIHRlcm1pbmF0ZXMgaW4gdGhpcyBzdGF0ZSBvciBhYm92ZSwKLy8gY29uc2lkZXIgdGhlIFVSSSBub24tc2ltcGxlCmNvbnN0IGludCBfbm9uU2ltcGxlRW5kU3RhdGVzID0gMTQ7CgovLyBJbml0aWFsIHN0YXRlIGZvciBzY2hlbWUgdmFsaWRhdGlvbi4KY29uc3QgaW50IF9zY2hlbWVTdGFydCA9IDIwOwoKLy8vIFRyYW5zaXRpb24gdGFibGVzIHVzZWQgdG8gc2NhbiBhIFVSSSB0byBkZXRlcm1pbmUgaXRzIHN0cnVjdHVyZS4KLy8vCi8vLyBUaGUgdGFibGVzIHJlcHJlc2VudCBhIHN0YXRlIG1hY2hpbmUgd2l0aCBvdXRwdXQuCi8vLwovLy8gVG8gc2NhbiB0aGUgVVJJLCBzdGFydCBpbiB0aGUgW191cmlTdGFydF0gc3RhdGUsIHRoZW4gcmVhZCBlYWNoIGNoYXJhY3RlcgovLy8gb2YgdGhlIFVSSSBpbiBvcmRlciwgZnJvbSBzdGFydCB0byBlbmQsIGFuZCBmb3IgZWFjaCBjaGFyYWN0ZXIgcGVyZm9ybSBhCi8vLyB0cmFuc2l0aW9uIHRvIGEgbmV3IHN0YXRlIHdoaWxlIHdyaXRpbmcgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW50byB0aGUgb3V0cHV0Ci8vLyBidWZmZXIgYXQgYSBkZXNpZ25hdGVkIGluZGV4LgovLy8KLy8vIEVhY2ggc3RhdGUsIHJlcHJlc2VudGVkIGJ5IGFuIGludGVnZXIgd2hpY2ggaXMgYW4gaW5kZXggaW50bwovLy8gW19zY2FubmVyVGFibGVzXSwgaGFzIGEgc2V0IG9mIHRyYW5zaXRpb25zLCBvbmUgZm9yIGVhY2ggY2hhcmFjdGVyLgovLy8gVGhlIHRyYW5zaXRpb25zIGFyZSBlbmNvZGVkIGFzIGEgNS1iaXQgaW50ZWdlciByZXByZXNlbnRpbmcgdGhlIG5leHQgc3RhdGUKLy8vIGFuZCBhIDMtYml0IGluZGV4IGludG8gdGhlIG91dHB1dCB0YWJsZS4KLy8vCi8vLyBGb3IgVVJJIHNjYW5uaW5nLCBvbmx5IGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFUrMDAyMCB0aHJvdWdoIFUrMDA3RSBhcmUKLy8vIGludGVyZXN0aW5nLCBhbGwgY2hhcmFjdGVycyBvdXRzaWRlIHRoYXQgcmFuZ2UgYXJlIHRyZWF0ZWQgdGhlIHNhbWUuCi8vLyBUaGUgdGFibGVzIG9ubHkgY29udGFpbiA5NiBlbnRyaWVzLCByZXByZXNlbnRpbmcgdGhhdCBjaGFyYWN0ZXJzIGluIHRoZQovLy8gaW50ZXJlc3RpbmcgcmFuZ2UsIHBsdXMgb25lIG1vcmUgdG8gcmVwcmVzZW50IGFsbCB2YWx1ZXMgb3V0c2lkZSB0aGUgcmFuZ2UuCi8vLyBUaGUgY2hhcmFjdGVyIGVudHJpZXMgYXJlIHN0b3JlZCBpbiBvbmUgYFVpbnQ4TGlzdGAgcGVyIHN0YXRlLCB3aXRoIHRoZQovLy8gdHJhbnNpdGlvbiBmb3IgYSBjaGFyYWN0ZXIgYXQgcG9zaXRpb24gYGNoYXJhY3RlciBeIDB4NjBgLAovLy8gd2hpY2ggbWFwcyB0aGUgcmFuZ2UgVSswMDIwIC4uIFUrMDA3RiBpbnRvIHBvc2l0aW9ucyAwIC4uIDk1LgovLy8gQWxsIHJlbWFpbmluZyBjaGFyYWN0ZXJzIGFyZSBtYXBwZWQgdG8gcG9zaXRpb24gMzEgKGAweDdmIF4gMHg2MGApIHdoaWNoCi8vLyByZXByZXNlbnRzIHRoZSB0cmFuc2l0aW9uIGZvciBhbGwgcmVtYWluaW5nIGNoYXJhY3RlcnMuCmZpbmFsIExpc3Q8VWludDhMaXN0PiBfc2Nhbm5lclRhYmxlcyA9IF9jcmVhdGVUYWJsZXMoKTsKCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gQ29kZSB0byBjcmVhdGUgdGhlIFVSSSBzY2FubmVyIHRhYmxlLgoKLy8vIENyZWF0ZXMgdGhlIHRhYmxlcyBmb3IgW19zY2FubmVyVGFibGVzXSB1c2VkIGJ5IFtVcmkucGFyc2VdLgovLy8KLy8vIFNlZSBbX3NjYW5uZXJUYWJsZXNdIGZvciB0aGUgZ2VuZXJhdGVkIGZvcm1hdC4KLy8vCi8vLyBUaGUgY29uY3JldGUgdGFibGVzIGFyZSBjaG9zZW4gYXMgYSB0cmFkZS1vZmYgYmV0d2VlbiB0aGUgbnVtYmVyIG9mIHN0YXRlcwovLy8gbmVlZGVkIGFuZCB0aGUgcHJlY2lzaW9uIG9mIHRoZSByZXN1bHQuCi8vLyBUaGlzIGFsbG93cyBkZWZpbml0ZWx5IHJlY29nbml6aW5nIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiB0aGUgVVJJCi8vLyAocHJlc2VuY2UgYW5kIGxvY2F0aW9uIG9mIHNjaGVtZSwgdXNlci1pbmZvLCBob3N0LCBwb3J0LCBwYXRoLCBxdWVyeSBhbmQKLy8vIGZyYWdtZW50KSB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lIGRldGVjdGluZyB0aGF0IHNvbWUgY29tcG9uZW50cyBhcmUgbm90Ci8vLyBpbiBjYW5vbmljYWwgZm9ybSAoYW55dGhpbmcgY29udGFpbmluZyBhIGAlYCwgYSBob3N0LW5hbWUgY29udGFpbmluZyBhCi8vLyBjYXBpdGFsIGxldHRlcikuIFNpbmNlIHRoZSBzY2FubmVyIGRvZXNuJ3Qga25vdyB3aGV0aGVyIHNvbWV0aGluZyBpcyBhCi8vLyBzY2hlbWUgb3IgYSBwYXRoIHVudGlsIGl0IHNlZXMgYDpgLCBvciB1c2VyLWluZm8gb3IgaG9zdCB1bnRpbCBpdCBzZWVzCi8vLyBhIGBAYCwgYSBzZWNvbmQgcGFzcyBpcyBuZWVkZWQgdG8gdmFsaWRhdGUgdGhlIHNjaGVtZSBhbmQgYW55IHVzZXItaW5mbwovLy8gaXMgY29uc2lkZXJlZCBub24tY2Fub25pY2FsIGJ5IGRlZmF1bHQuCi8vLwovLy8gVGhlIHN0YXRlcyAoc3RhcnRpbmcgZnJvbSBbX3VyaVN0YXJ0XSkgd3JpdGUgcG9zaXRpb25zIHdoaWxlIHNjYW5uaW5nCi8vLyBhIHN0cmluZyBmcm9tIGBzdGFydGAgdG8gYGVuZGAgYXMgZm9sbG93czoKLy8vCi8vLyAtIFtfc2NoZW1lRW5kSW5kZXhdOiBTaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG8gYHN0YXJ0LTFgLgovLy8gICBJZiB0aGUgVVJJIGhhcyBhIHNjaGVtZSwgaXQgaXMgc2V0IHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgYDpgIGFmdGVyCi8vLyAgIHRoZSBzY2hlbWUuCi8vLyAtIFtfaG9zdFN0YXJ0SW5kZXhdOiBTaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG8gYHN0YXJ0IC0gMWAuCi8vLyAgIElmIHRoZSBVUkkgaGFzIGFuIGF1dGhvcml0eSwgaXQgaXMgc2V0IHRvIHRoZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZQovLy8gICBob3N0IG5hbWUgLSBlaXRoZXIgdGhlIHNlY29uZCBgL2AgaW4gdGhlIGAvL2AgbGVhZGluZyB0aGUgYXV0aG9yaXR5LAovLy8gICBvciB0aGUgYEBgIGFmdGVyIGEgdXNlci1pbmZvLiBDb21wYXJpbmcgdGhpcyB2YWx1ZSB0byB0aGUgc2NoZW1lIGVuZAovLy8gICBwb3NpdGlvbiBjYW4gYmUgdXNlZCB0byBkZXRlY3QgdGhhdCB0aGVyZSBpcyBhIHVzZXItaW5mbyBjb21wb25lbnQuCi8vLyAtIFtfcG9ydFN0YXJ0SW5kZXhdOiBTaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG8gYHN0YXJ0YC4KLy8vICAgU2V0IHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGFzdCBgOmAgaW4gYW4gYXV0aG9yaXR5LCBhbmQgdW5jaGFuZ2VkCi8vLyAgIGlmIHRoZXJlIGlzIG5vIGF1dGhvcml0eSBvciBubyBgOmAgaW4gYW4gYXV0aG9yaXR5LgovLy8gICBJZiB0aGlzIHBvc2l0aW9uIGlzIGFmdGVyIHRoZSBob3N0IHN0YXJ0LCB0aGVyZSBpcyBhIHBvcnQsIG90aGVyd2lzZSBpdAovLy8gICBpcyBqdXN0IG1hcmtpbmcgYSBjb2xvbiBpbiB0aGUgdXNlci1pbmZvIGNvbXBvbmVudC4KLy8vIC0gW19wYXRoU3RhcnRJbmRleF06IFNob3VsZCBiZSBpbml0aWFsaXplZCB0byBgc3RhcnRgLgovLy8gICBJcyBzZXQgdG8gdGhlIGZpcnN0IHBhdGggY2hhcmFjdGVyIHVubGVzcyB0aGUgcGF0aCBpcyBlbXB0eS4KLy8vICAgSWYgdGhlIHBhdGggaXMgZW1wdHksIHRoZSBwb3NpdGlvbiBpcyBlaXRoZXIgdW5jaGFuZ2VkIChgc3RhcnRgKSBvcgovLy8gICB0aGUgZmlyc3Qgc2xhc2ggb2YgYW4gYXV0aG9yaXR5LiBTbywgaWYgdGhlIHBhdGggc3RhcnQgaXMgYmVmb3JlIGEKLy8vICAgaG9zdCBzdGFydCBvciBzY2hlbWUgZW5kLCB0aGUgcGF0aCBpcyBlbXB0eS4KLy8vIC0gW19xdWVyeVN0YXJ0SW5kZXhdOiBTaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG8gYGVuZGAuCi8vLyAgIFRoZSBwb3NpdGlvbiBvZiB0aGUgYD9gIGxlYWRpbmcgYSBxdWVyeSBpZiB0aGUgVVJJIGNvbnRhaW5zIGEgcXVlcnkuCi8vLyAtIFtfZnJhZ21lbnRTdGFydEluZGV4XTogU2hvdWxkIGJlIGluaXRpYWxpemVkIHRvIGBlbmRgLgovLy8gICBUaGUgcG9zaXRpb24gb2YgdGhlIGAjYCBsZWFkaW5nIGEgZnJhZ21lbnQgaWYgdGhlIFVSSSBjb250YWlucyBhIGZyYWdtZW50LgovLy8gLSBbX25vdFNpbXBsZUluZGV4XTogU2hvdWxkIGJlIGluaXRpYWxpemVkIHRvIGBzdGFydCAtIDFgLgovLy8gICBTZXQgdG8gYW5vdGhlciB2YWx1ZSBpZiB0aGUgVVJJIGlzIGNvbnNpZGVyZWQgIm5vdCBzaW1wbGUiLgovLy8gICBUaGlzIGlzIGVsYWJvcmF0ZWQgYmVsb3cuCi8vLwovLy8gIyBTaW1wbGUgVVJJcwovLy8gQSBVUkkgaXMgY29uc2lkZXJlZCAic2ltcGxlIiBpZiBpdCBpcyBpbiBhIG5vcm1hbGl6ZWQgZm9ybSBjb250YWluaW5nIG5vCi8vLyBlc2NhcGVzLiBUaGlzIGFsbG93cyB1cyB0byBza2lwIG5vcm1hbGl6YXRpb24gYW5kIGNoZWNraW5nIHdoZXRoZXIgZXNjYXBlcwovLy8gYXJlIHZhbGlkLCBhbmQgdG8gZXh0cmFjdCBjb21wb25lbnRzIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgdW5lc2NhcGluZy4KLy8vCi8vLyBUaGUgc2Nhbm5lciBjb21wdXRlcyBhIGNvbnNlcnZhdGl2ZSBhcHByb3hpbWF0aW9uIG9mIGJlaW5nICJzaW1wbGUiLgovLy8gSXQgcmVqZWN0cyBhbnkgVVJJIHdpdGggYW4gZXNjYXBlLCB3aXRoIGEgdXNlci1pbmZvIGNvbXBvbmVudCAobWFpbmx5Ci8vLyBiZWNhdXNlIHRoZXkgYXJlIHJhcmUgYW5kIHdvdWxkIGluY3JlYXNlIHRoZSBudW1iZXIgb2Ygc3RhdGVzIGluIHRoZQovLy8gc2Nhbm5lciBzaWduaWZpY2FudGx5KSwgd2l0aCBhbiBJUFY2IGhvc3Qgb3Igd2l0aCBhIGNhcGl0YWwgbGV0dGVyIGluCi8vLyB0aGUgc2NoZW1lIG9yIGhvc3QgbmFtZSAodGhlIHNjaGVtZSBpcyBoYW5kbGVkIGluIGEgc2Vjb25kIHNjYW4gdXNpbmcKLy8vIGEgc2VwYXJhdGUgdHdvLXN0YXRlIHRhYmxlKS4KLy8vIEZ1cnRoZXIsIHBhdGhzIGNvbnRhaW5pbmcgYC4uYCBvciBgLmAgcGF0aCBzZWdtZW50cyBhcmUgY29uc2lkZXJlZAovLy8gbm9uLXNpbXBsZSBleGNlcHQgZm9yIHB1cmUgcmVsYXRpdmUgcGF0aHMgKG5vIHNjaGVtZSBvciBhdXRob3JpdHkpIHN0YXJ0aW5nCi8vLyB3aXRoIGEgc2VxdWVuY2Ugb2YgIi4uLyIgc2VnbWVudHMuCi8vLwovLy8gVGhlIHRyYW5zaXRpb24gdGFibGVzIGNhbm5vdCBkZXRlY3QgYSB0cmFpbGluZyAiLi4iIGluIHRoZSBwYXRoLAovLy8gZm9sbG93ZWQgYnkgYSBxdWVyeSBvciBmcmFnbWVudCwgYmVjYXVzZSB0aGUgc2VnbWVudCBpcyBub3Qga25vd24gdG8gYmUKLy8vIGNvbXBsZXRlIHVudGlsIHdlIGFyZSBwYXN0IGl0LCBhbmQgd2UgdGhlbiBuZWVkIHRvIHN0b3JlIHRoZSBxdWVyeS9mcmFnbWVudAovLy8gc3RhcnQgaW5zdGVhZC4gVGhpcyBjYXN0IGlzIGNoZWNrZWQgbWFudWFsbHkgcG9zdC1zY2FubmluZyAoc3VjaCBhIHBhdGgKLy8vIG5lZWRzIHRvIGJlIG5vcm1hbGl6ZWQgdG8gZW5kIGluICIuLi8iLCBzbyB0aGUgVVJJIHNob3VsZG4ndCBiZSBjb25zaWRlcmVkCi8vLyBzaW1wbGUpLgpMaXN0PFVpbnQ4TGlzdD4gX2NyZWF0ZVRhYmxlcygpIHsKICAvLyBUT0RPKGxybik6IFVzZSBhIHByZWNvbXB1dGVkIHRhYmxlLgoKICAvLyBUb3RhbCBudW1iZXIgb2Ygc3RhdGVzIGZvciB0aGUgc2Nhbm5lci4KICBjb25zdCBpbnQgc3RhdGVDb3VudCA9IDIyOwoKICAvLyBTdGF0ZXMgdXNlZCB0byBzY2FuIGEgVVJJIGZyb20gc2NyYXRjaC4KICBjb25zdCBpbnQgc2NoZW1lT3JQYXRoID0gMDE7CiAgY29uc3QgaW50IGF1dGhPclBhdGggPSAwMjsKICBjb25zdCBpbnQgYXV0aE9yUGF0aFNsYXNoID0gMDM7CiAgY29uc3QgaW50IHVpbmZvT3JIb3N0MCA9IDA0OwogIGNvbnN0IGludCB1aW5mb09ySG9zdCA9IDA1OwogIGNvbnN0IGludCB1aW5mb09yUG9ydDAgPSAwNjsKICBjb25zdCBpbnQgdWluZm9PclBvcnQgPSAwNzsKICBjb25zdCBpbnQgaXB2Nkhvc3QgPSAwODsKICBjb25zdCBpbnQgcmVsUGF0aFNlZyA9IDA5OwogIGNvbnN0IGludCBwYXRoU2VnID0gMTA7CiAgY29uc3QgaW50IHBhdGggPSAxMTsKICBjb25zdCBpbnQgcXVlcnkgPSAxMjsKICBjb25zdCBpbnQgZnJhZ21lbnQgPSAxMzsKICBjb25zdCBpbnQgc2NoZW1lT3JQYXRoRG90ID0gMTQ7CiAgY29uc3QgaW50IHNjaGVtZU9yUGF0aERvdDIgPSAxNTsKICBjb25zdCBpbnQgcmVsUGF0aFNlZ0RvdCA9IDE2OwogIGNvbnN0IGludCByZWxQYXRoU2VnRG90MiA9IDE3OwogIGNvbnN0IGludCBwYXRoU2VnRG90ID0gMTg7CiAgY29uc3QgaW50IHBhdGhTZWdEb3QyID0gMTk7CgogIC8vIFN0YXRlcyB1c2VkIHRvIHZhbGlkYXRlIGEgc2NoZW1lIGFmdGVyIGl0cyBlbmQgcG9zaXRpb24gaGFzIGJlZW4gZm91bmQuCiAgY29uc3QgaW50IHNjaGVtZTAgPSBfc2NoZW1lU3RhcnQ7CiAgY29uc3QgaW50IHNjaGVtZSA9IDIxOwoKICAvLyBDb25zdGFudHMgZW5jb2RpbmcgdGhlIHdyaXRlLWluZGV4IGZvciB0aGUgc3RhdGUgdHJhbnNpdGlvbiBpbnRvIHRoZSB0b3AgNQogIC8vIGJpdHMgb2YgYSBieXRlLgogIGNvbnN0IGludCBzY2hlbWVFbmQgPSBfc2NoZW1lRW5kSW5kZXggPDwgNTsKICBjb25zdCBpbnQgaG9zdFN0YXJ0ID0gX2hvc3RTdGFydEluZGV4IDw8IDU7CiAgY29uc3QgaW50IHBvcnRTdGFydCA9IF9wb3J0U3RhcnRJbmRleCA8PCA1OwogIGNvbnN0IGludCBwYXRoU3RhcnQgPSBfcGF0aFN0YXJ0SW5kZXggPDwgNTsKICBjb25zdCBpbnQgcXVlcnlTdGFydCA9IF9xdWVyeVN0YXJ0SW5kZXggPDwgNTsKICBjb25zdCBpbnQgZnJhZ21lbnRTdGFydCA9IF9mcmFnbWVudFN0YXJ0SW5kZXggPDwgNTsKICBjb25zdCBpbnQgbm90U2ltcGxlID0gX25vdFNpbXBsZUluZGV4IDw8IDU7CgogIC8vLyBUaGUgYHVucmVzZXJ2ZWRgIGNoYXJhY3RlcnMgb2YgUkZDIDM5ODYuCiAgY29uc3QgdW5yZXNlcnZlZCA9CiAgICAgICIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei0uX34iOwoKICAvLy8gVGhlIGBzdWItZGVsaW1gIGNoYXJhY3RlcnMgb2YgUkZDIDM5ODYuCiAgY29uc3Qgc3ViRGVsaW1zID0gciIhJCYnKCkqKyw7PSI7CiAgLy8gVGhlIGBwY2hhcmAgY2hhcmFjdGVycyBvZiBSRkMgMzk4NjogY2hhcmFjdGVycyB0aGF0IG1heSBvY2N1ciBpbiBhIHBhdGgsCiAgLy8gZXhjbHVkaW5nIGVzY2FwZXMuCiAgY29uc3QgcGNoYXIgPSAiJHVucmVzZXJ2ZWQkc3ViRGVsaW1zIjsKCiAgdmFyIHRhYmxlcyA9IExpc3Q8VWludDhMaXN0Pi5nZW5lcmF0ZShzdGF0ZUNvdW50LCAoXykgPT4gVWludDhMaXN0KDk2KSk7CgogIC8vIEhlbHBlciBmdW5jdGlvbiB3aGljaCBpbml0aWFsaXplIHRoZSB0YWJsZSBmb3IgW3N0YXRlXSB3aXRoIGEgZGVmYXVsdAogIC8vIHRyYW5zaXRpb24gYW5kIHJldHVybnMgdGhlIHRhYmxlLgogIFVpbnQ4TGlzdCBidWlsZChzdGF0ZSwgZGVmYXVsdFRyYW5zaXRpb24pID0+CiAgICAgIHRhYmxlc1tzdGF0ZV0uLmZpbGxSYW5nZSgwLCA5NiwgZGVmYXVsdFRyYW5zaXRpb24pOwoKICAvLyBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggc2V0cyB0aGUgdHJhbnNpdGlvbiBmb3IgZWFjaCBjaGFyYWN0ZXIgaW4gW2NoYXJzXQogIC8vIHRvIFt0cmFuc2l0aW9uXSBpbiB0aGUgW3RhcmdldF0gdGFibGUuCiAgLy8gVGhlIFtjaGFyc10gc3RyaW5nIG11c3QgY29udGFpbiBvbmx5IGNoYXJhY3RlcnMgaW4gdGhlIFUrMDAyMCAuLiBVKzAwN0UKICAvLyByYW5nZS4KICB2b2lkIHNldENoYXJzKFVpbnQ4TGlzdCB0YXJnZXQsIFN0cmluZyBjaGFycywgaW50IHRyYW5zaXRpb24pIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGNoYXIgPSBjaGFycy5jb2RlVW5pdEF0KGkpOwogICAgICB0YXJnZXRbY2hhciBeIDB4NjBdID0gdHJhbnNpdGlvbjsKICAgIH0KICB9CgogIC8vLyBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggc2V0cyB0aGUgdHJhbnNpdGlvbiBmb3IgYWxsIGNoYXJhY3RlcnMgaW4gdGhlCiAgLy8vIHJhbmdlIGZyb20gYHJhbmdlWzBdYCB0byBgcmFuZ2VbMV1gIHRvIFt0cmFuc2l0aW9uXSBpbiB0aGUgW3RhcmdldF0gdGFibGUuCiAgLy8vCiAgLy8vIFRoZSBbcmFuZ2VdIG11c3QgYmUgYSB0d28tY2hhcmFjdGVyIHN0cmluZyB3aGVyZSBib3RoIGNoYXJhY3RlcnMgYXJlIGluCiAgLy8vIHRoZSBVKzAwMjAgLi4gVSswMDdFIHJhbmdlIGFuZCB0aGUgZm9ybWVyIGNoYXJhY3RlciBtdXN0IGhhdmUgYSBsb3dlcgogIC8vLyBjb2RlIHBvaW50IHRoYW4gdGhlIGxhdHRlci4KICB2b2lkIHNldFJhbmdlKFVpbnQ4TGlzdCB0YXJnZXQsIFN0cmluZyByYW5nZSwgaW50IHRyYW5zaXRpb24pIHsKICAgIGZvciAoaW50IGkgPSByYW5nZS5jb2RlVW5pdEF0KDApLCBuID0gcmFuZ2UuY29kZVVuaXRBdCgxKTsgaSA8PSBuOyBpKyspIHsKICAgICAgdGFyZ2V0W2kgXiAweDYwXSA9IHRyYW5zaXRpb247CiAgICB9CiAgfQoKICAvLyBDcmVhdGUgdGhlIHRyYW5zaXRpb25zIGZvciBlYWNoIHN0YXRlLgogIHZhciBiOwoKICAvLyBWYWxpZGF0ZSBhcyBwYXRoLCBpZiBpdCBpcyBhIHNjaGVtZSwgd2UgaGFuZGxlIGl0IGxhdGVyLgogIGIgPSBidWlsZChfdXJpU3RhcnQsIHNjaGVtZU9yUGF0aCB8IG5vdFNpbXBsZSk7CiAgc2V0Q2hhcnMoYiwgcGNoYXIsIHNjaGVtZU9yUGF0aCk7CiAgc2V0Q2hhcnMoYiwgIi4iLCBzY2hlbWVPclBhdGhEb3QpOwogIHNldENoYXJzKGIsICI6IiwgYXV0aE9yUGF0aCB8IHNjaGVtZUVuZCk7IC8vIEhhbmRsZSBsYXRlci4KICBzZXRDaGFycyhiLCAiLyIsIGF1dGhPclBhdGhTbGFzaCk7CiAgc2V0Q2hhcnMoYiwgIj8iLCBxdWVyeSB8IHF1ZXJ5U3RhcnQpOwogIHNldENoYXJzKGIsICIjIiwgZnJhZ21lbnQgfCBmcmFnbWVudFN0YXJ0KTsKCiAgYiA9IGJ1aWxkKHNjaGVtZU9yUGF0aERvdCwgc2NoZW1lT3JQYXRoIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgc2NoZW1lT3JQYXRoKTsKICBzZXRDaGFycyhiLCAiLiIsIHNjaGVtZU9yUGF0aERvdDIpOwogIHNldENoYXJzKGIsICc6JywgYXV0aE9yUGF0aCB8IHNjaGVtZUVuZCk7CiAgc2V0Q2hhcnMoYiwgIi8iLCBwYXRoU2VnIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCAiPyIsIHF1ZXJ5IHwgcXVlcnlTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIiMiLCBmcmFnbWVudCB8IGZyYWdtZW50U3RhcnQpOwoKICBiID0gYnVpbGQoc2NoZW1lT3JQYXRoRG90Miwgc2NoZW1lT3JQYXRoIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgc2NoZW1lT3JQYXRoKTsKICBzZXRDaGFycyhiLCAiJSIsIHNjaGVtZU9yUGF0aCB8IG5vdFNpbXBsZSk7CiAgc2V0Q2hhcnMoYiwgJzonLCBhdXRoT3JQYXRoIHwgc2NoZW1lRW5kKTsKICBzZXRDaGFycyhiLCAiLyIsIHJlbFBhdGhTZWcpOwogIHNldENoYXJzKGIsICI/IiwgcXVlcnkgfCBxdWVyeVN0YXJ0KTsKICBzZXRDaGFycyhiLCAiIyIsIGZyYWdtZW50IHwgZnJhZ21lbnRTdGFydCk7CgogIGIgPSBidWlsZChzY2hlbWVPclBhdGgsIHNjaGVtZU9yUGF0aCB8IG5vdFNpbXBsZSk7CiAgc2V0Q2hhcnMoYiwgcGNoYXIsIHNjaGVtZU9yUGF0aCk7CiAgc2V0Q2hhcnMoYiwgJzonLCBhdXRoT3JQYXRoIHwgc2NoZW1lRW5kKTsKICBzZXRDaGFycyhiLCAiLyIsIHBhdGhTZWcpOwogIHNldENoYXJzKGIsICI/IiwgcXVlcnkgfCBxdWVyeVN0YXJ0KTsKICBzZXRDaGFycyhiLCAiIyIsIGZyYWdtZW50IHwgZnJhZ21lbnRTdGFydCk7CgogIGIgPSBidWlsZChhdXRoT3JQYXRoLCBwYXRoIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgcGF0aCB8IHBhdGhTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIi8iLCBhdXRoT3JQYXRoU2xhc2ggfCBwYXRoU3RhcnQpOwogIHNldENoYXJzKGIsICIuIiwgcGF0aFNlZ0RvdCB8IHBhdGhTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIj8iLCBxdWVyeSB8IHF1ZXJ5U3RhcnQpOwogIHNldENoYXJzKGIsICIjIiwgZnJhZ21lbnQgfCBmcmFnbWVudFN0YXJ0KTsKCiAgYiA9IGJ1aWxkKGF1dGhPclBhdGhTbGFzaCwgcGF0aCB8IG5vdFNpbXBsZSk7CiAgc2V0Q2hhcnMoYiwgcGNoYXIsIHBhdGgpOwogIHNldENoYXJzKGIsICIvIiwgdWluZm9Pckhvc3QwIHwgaG9zdFN0YXJ0KTsKICBzZXRDaGFycyhiLCAiLiIsIHBhdGhTZWdEb3QpOwogIHNldENoYXJzKGIsICI/IiwgcXVlcnkgfCBxdWVyeVN0YXJ0KTsKICBzZXRDaGFycyhiLCAiIyIsIGZyYWdtZW50IHwgZnJhZ21lbnRTdGFydCk7CgogIGIgPSBidWlsZCh1aW5mb09ySG9zdDAsIHVpbmZvT3JIb3N0IHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgdWluZm9Pckhvc3QpOwogIHNldFJhbmdlKGIsICJBWiIsIHVpbmZvT3JIb3N0IHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCAiOiIsIHVpbmZvT3JQb3J0MCB8IHBvcnRTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIkAiLCB1aW5mb09ySG9zdDAgfCBob3N0U3RhcnQpOwogIHNldENoYXJzKGIsICJbIiwgaXB2Nkhvc3QgfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsICIvIiwgcGF0aFNlZyB8IHBhdGhTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIj8iLCBxdWVyeSB8IHF1ZXJ5U3RhcnQpOwogIHNldENoYXJzKGIsICIjIiwgZnJhZ21lbnQgfCBmcmFnbWVudFN0YXJ0KTsKCiAgYiA9IGJ1aWxkKHVpbmZvT3JIb3N0LCB1aW5mb09ySG9zdCB8IG5vdFNpbXBsZSk7CiAgc2V0Q2hhcnMoYiwgcGNoYXIsIHVpbmZvT3JIb3N0KTsKICBzZXRSYW5nZShiLCAiQVoiLCB1aW5mb09ySG9zdCB8IG5vdFNpbXBsZSk7CiAgc2V0Q2hhcnMoYiwgIjoiLCB1aW5mb09yUG9ydDAgfCBwb3J0U3RhcnQpOwogIHNldENoYXJzKGIsICJAIiwgdWluZm9Pckhvc3QwIHwgaG9zdFN0YXJ0KTsKICBzZXRDaGFycyhiLCAiLyIsIHBhdGhTZWcgfCBwYXRoU3RhcnQpOwogIHNldENoYXJzKGIsICI/IiwgcXVlcnkgfCBxdWVyeVN0YXJ0KTsKICBzZXRDaGFycyhiLCAiIyIsIGZyYWdtZW50IHwgZnJhZ21lbnRTdGFydCk7CgogIGIgPSBidWlsZCh1aW5mb09yUG9ydDAsIHVpbmZvT3JQb3J0IHwgbm90U2ltcGxlKTsKICBzZXRSYW5nZShiLCAiMTkiLCB1aW5mb09yUG9ydCk7CiAgc2V0Q2hhcnMoYiwgIkAiLCB1aW5mb09ySG9zdDAgfCBob3N0U3RhcnQpOwogIHNldENoYXJzKGIsICIvIiwgcGF0aFNlZyB8IHBhdGhTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIj8iLCBxdWVyeSB8IHF1ZXJ5U3RhcnQpOwogIHNldENoYXJzKGIsICIjIiwgZnJhZ21lbnQgfCBmcmFnbWVudFN0YXJ0KTsKCiAgYiA9IGJ1aWxkKHVpbmZvT3JQb3J0LCB1aW5mb09yUG9ydCB8IG5vdFNpbXBsZSk7CiAgc2V0UmFuZ2UoYiwgIjA5IiwgdWluZm9PclBvcnQpOwogIHNldENoYXJzKGIsICJAIiwgdWluZm9Pckhvc3QwIHwgaG9zdFN0YXJ0KTsKICBzZXRDaGFycyhiLCAiLyIsIHBhdGhTZWcgfCBwYXRoU3RhcnQpOwogIHNldENoYXJzKGIsICI/IiwgcXVlcnkgfCBxdWVyeVN0YXJ0KTsKICBzZXRDaGFycyhiLCAiIyIsIGZyYWdtZW50IHwgZnJhZ21lbnRTdGFydCk7CgogIGIgPSBidWlsZChpcHY2SG9zdCwgaXB2Nkhvc3QpOwogIHNldENoYXJzKGIsICJdIiwgdWluZm9Pckhvc3QpOwoKICBiID0gYnVpbGQocmVsUGF0aFNlZywgcGF0aCB8IG5vdFNpbXBsZSk7CiAgc2V0Q2hhcnMoYiwgcGNoYXIsIHBhdGgpOwogIHNldENoYXJzKGIsICIuIiwgcmVsUGF0aFNlZ0RvdCk7CiAgc2V0Q2hhcnMoYiwgIi8iLCBwYXRoU2VnIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCAiPyIsIHF1ZXJ5IHwgcXVlcnlTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIiMiLCBmcmFnbWVudCB8IGZyYWdtZW50U3RhcnQpOwoKICBiID0gYnVpbGQocmVsUGF0aFNlZ0RvdCwgcGF0aCB8IG5vdFNpbXBsZSk7CiAgc2V0Q2hhcnMoYiwgcGNoYXIsIHBhdGgpOwogIHNldENoYXJzKGIsICIuIiwgcmVsUGF0aFNlZ0RvdDIpOwogIHNldENoYXJzKGIsICIvIiwgcGF0aFNlZyB8IG5vdFNpbXBsZSk7CiAgc2V0Q2hhcnMoYiwgIj8iLCBxdWVyeSB8IHF1ZXJ5U3RhcnQpOwogIHNldENoYXJzKGIsICIjIiwgZnJhZ21lbnQgfCBmcmFnbWVudFN0YXJ0KTsKCiAgYiA9IGJ1aWxkKHJlbFBhdGhTZWdEb3QyLCBwYXRoIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgcGF0aCk7CiAgc2V0Q2hhcnMoYiwgIi8iLCByZWxQYXRoU2VnKTsKICBzZXRDaGFycyhiLCAiPyIsIHF1ZXJ5IHwgcXVlcnlTdGFydCk7IC8vIFRoaXMgc2hvdWxkIGJlIG5vbi1zaW1wbGUuCiAgc2V0Q2hhcnMoYiwgIiMiLCBmcmFnbWVudCB8IGZyYWdtZW50U3RhcnQpOyAvLyBUaGlzIHNob3VsZCBiZSBub24tc2ltcGxlLgoKICBiID0gYnVpbGQocGF0aFNlZywgcGF0aCB8IG5vdFNpbXBsZSk7CiAgc2V0Q2hhcnMoYiwgcGNoYXIsIHBhdGgpOwogIHNldENoYXJzKGIsICIuIiwgcGF0aFNlZ0RvdCk7CiAgc2V0Q2hhcnMoYiwgIi8iLCBwYXRoU2VnIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCAiPyIsIHF1ZXJ5IHwgcXVlcnlTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIiMiLCBmcmFnbWVudCB8IGZyYWdtZW50U3RhcnQpOwoKICBiID0gYnVpbGQocGF0aFNlZ0RvdCwgcGF0aCB8IG5vdFNpbXBsZSk7CiAgc2V0Q2hhcnMoYiwgcGNoYXIsIHBhdGgpOwogIHNldENoYXJzKGIsICIuIiwgcGF0aFNlZ0RvdDIpOwogIHNldENoYXJzKGIsICIvIiwgcGF0aFNlZyB8IG5vdFNpbXBsZSk7CiAgc2V0Q2hhcnMoYiwgIj8iLCBxdWVyeSB8IHF1ZXJ5U3RhcnQpOwogIHNldENoYXJzKGIsICIjIiwgZnJhZ21lbnQgfCBmcmFnbWVudFN0YXJ0KTsKCiAgYiA9IGJ1aWxkKHBhdGhTZWdEb3QyLCBwYXRoIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgcGF0aCk7CiAgc2V0Q2hhcnMoYiwgIi8iLCBwYXRoU2VnIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCAiPyIsIHF1ZXJ5IHwgcXVlcnlTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIiMiLCBmcmFnbWVudCB8IGZyYWdtZW50U3RhcnQpOwoKICBiID0gYnVpbGQocGF0aCwgcGF0aCB8IG5vdFNpbXBsZSk7CiAgc2V0Q2hhcnMoYiwgcGNoYXIsIHBhdGgpOwogIHNldENoYXJzKGIsICIvIiwgcGF0aFNlZyk7CiAgc2V0Q2hhcnMoYiwgIj8iLCBxdWVyeSB8IHF1ZXJ5U3RhcnQpOwogIHNldENoYXJzKGIsICIjIiwgZnJhZ21lbnQgfCBmcmFnbWVudFN0YXJ0KTsKCiAgYiA9IGJ1aWxkKHF1ZXJ5LCBxdWVyeSB8IG5vdFNpbXBsZSk7CiAgc2V0Q2hhcnMoYiwgcGNoYXIsIHF1ZXJ5KTsKICBzZXRDaGFycyhiLCAiPyIsIHF1ZXJ5KTsKICBzZXRDaGFycyhiLCAiIyIsIGZyYWdtZW50IHwgZnJhZ21lbnRTdGFydCk7CgogIGIgPSBidWlsZChmcmFnbWVudCwgZnJhZ21lbnQgfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsIHBjaGFyLCBmcmFnbWVudCk7CiAgc2V0Q2hhcnMoYiwgIj8iLCBmcmFnbWVudCk7CgogIC8vIEEgc2VwYXJhdGUgdHdvLXN0YXRlIHZhbGlkYXRvciBmb3IgbG93ZXItY2FzZSBzY2hlbWUgbmFtZXMuCiAgLy8gQW55IG5vbi1zY2hlbWUgY2hhcmFjdGVyIG9yIHVwcGVyLWNhc2UgbGV0dGVyIGlzIG1hcmtlZCBhcyBub24tc2ltcGxlLgogIGIgPSBidWlsZChzY2hlbWUwLCBzY2hlbWUgfCBub3RTaW1wbGUpOwogIHNldFJhbmdlKGIsICJheiIsIHNjaGVtZSk7CgogIGIgPSBidWlsZChzY2hlbWUsIHNjaGVtZSB8IG5vdFNpbXBsZSk7CiAgc2V0UmFuZ2UoYiwgImF6Iiwgc2NoZW1lKTsKICBzZXRSYW5nZShiLCAiMDkiLCBzY2hlbWUpOwogIHNldENoYXJzKGIsICIrLS4iLCBzY2hlbWUpOwoKICByZXR1cm4gdGFibGVzOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDb2RlIHRoYXQgdXNlcyB0aGUgVVJJIHNjYW5uZXIgdGFibGUuCgovLy8gU2NhbiBhIHN0cmluZyB1c2luZyB0aGUgW19zY2FubmVyVGFibGVzXSBzdGF0ZSBtYWNoaW5lLgovLy8KLy8vIFNjYW5zIFt1cmldIGZyb20gW3N0YXJ0XSB0byBbZW5kXSwgc3RhcnRpbmcgaW4gc3RhdGUgW3N0YXRlXSBhbmQKLy8vIHdyaXRpbmcgb3V0cHV0IGludG8gW2luZGljZXNdLgovLy8KLy8vIFJldHVybnMgdGhlIGZpbmFsIHN0YXRlLgppbnQgX3NjYW4oU3RyaW5nIHVyaSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgc3RhdGUsIExpc3Q8aW50PiBpbmRpY2VzKSB7CiAgdmFyIHRhYmxlcyA9IF9zY2FubmVyVGFibGVzOwogIGFzc2VydChlbmQgPD0gdXJpLmxlbmd0aCk7CiAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgIHZhciB0YWJsZSA9IHRhYmxlc1tzdGF0ZV07CiAgICAvLyBYb3Igd2l0aCAweDYwIHRvIG1vdmUgcmFuZ2UgMHgyMC0weDdmIGludG8gMHgwMC0weDVmCiAgICBpbnQgY2hhciA9IHVyaS5jb2RlVW5pdEF0KGkpIF4gMHg2MDsKICAgIC8vIFVzZSAweDFmIChuZWUgMHg3ZikgdG8gcmVwcmVzZW50IGFsbCB1bmhhbmRsZWQgY2hhcmFjdGVycy4KICAgIGlmIChjaGFyID4gMHg1ZikgY2hhciA9IDB4MWY7CiAgICBpbnQgdHJhbnNpdGlvbiA9IHRhYmxlW2NoYXJdOwogICAgc3RhdGUgPSB0cmFuc2l0aW9uICYgMHgxZjsKICAgIGluZGljZXNbdHJhbnNpdGlvbiA+PiA1XSA9IGk7CiAgfQogIHJldHVybiBzdGF0ZTsKfQoKY2xhc3MgX1NpbXBsZVVyaSBpbXBsZW1lbnRzIFVyaSB7CiAgZmluYWwgU3RyaW5nIF91cmk7CiAgZmluYWwgaW50IF9zY2hlbWVFbmQ7CiAgZmluYWwgaW50IF9ob3N0U3RhcnQ7CiAgZmluYWwgaW50IF9wb3J0U3RhcnQ7CiAgZmluYWwgaW50IF9wYXRoU3RhcnQ7CiAgZmluYWwgaW50IF9xdWVyeVN0YXJ0OwogIGZpbmFsIGludCBfZnJhZ21lbnRTdGFydDsKCiAgLy8vIFRoZSBzY2hlbWUgaXMgb2Z0ZW4gdXNlZCB0byBkaXN0aW5ndWlzaCBVUklzLgogIC8vLyBUbyBtYWtlIGNvbXBhcmlzb25zIG1vcmUgZWZmaWNpZW50LCB3ZSBjYWNoZSB0aGUgdmFsdWUsIGFuZAogIC8vLyBjYW5vbmljYWxpemUgYSBmZXcga25vd24gdHlwZXMuCiAgU3RyaW5nIF9zY2hlbWVDYWNoZTsKICBpbnQgX2hhc2hDb2RlQ2FjaGU7CgogIF9TaW1wbGVVcmkoCiAgICAgIHRoaXMuX3VyaSwKICAgICAgdGhpcy5fc2NoZW1lRW5kLAogICAgICB0aGlzLl9ob3N0U3RhcnQsCiAgICAgIHRoaXMuX3BvcnRTdGFydCwKICAgICAgdGhpcy5fcGF0aFN0YXJ0LAogICAgICB0aGlzLl9xdWVyeVN0YXJ0LAogICAgICB0aGlzLl9mcmFnbWVudFN0YXJ0LAogICAgICB0aGlzLl9zY2hlbWVDYWNoZSk7CgogIGJvb2wgZ2V0IGhhc1NjaGVtZSA9PiBfc2NoZW1lRW5kID4gMDsKICBib29sIGdldCBoYXNBdXRob3JpdHkgPT4gX2hvc3RTdGFydCA+IDA7CiAgYm9vbCBnZXQgaGFzVXNlckluZm8gPT4gX2hvc3RTdGFydCA+IF9zY2hlbWVFbmQgKyA0OwogIGJvb2wgZ2V0IGhhc1BvcnQgPT4gX2hvc3RTdGFydCA+IDAgJiYgX3BvcnRTdGFydCArIDEgPCBfcGF0aFN0YXJ0OwogIGJvb2wgZ2V0IGhhc1F1ZXJ5ID0+IF9xdWVyeVN0YXJ0IDwgX2ZyYWdtZW50U3RhcnQ7CiAgYm9vbCBnZXQgaGFzRnJhZ21lbnQgPT4gX2ZyYWdtZW50U3RhcnQgPCBfdXJpLmxlbmd0aDsKCiAgYm9vbCBnZXQgX2lzRmlsZSA9PiBfc2NoZW1lRW5kID09IDQgJiYgX3VyaS5zdGFydHNXaXRoKCJmaWxlIik7CiAgYm9vbCBnZXQgX2lzSHR0cCA9PiBfc2NoZW1lRW5kID09IDQgJiYgX3VyaS5zdGFydHNXaXRoKCJodHRwIik7CiAgYm9vbCBnZXQgX2lzSHR0cHMgPT4gX3NjaGVtZUVuZCA9PSA1ICYmIF91cmkuc3RhcnRzV2l0aCgiaHR0cHMiKTsKICBib29sIGdldCBfaXNQYWNrYWdlID0+IF9zY2hlbWVFbmQgPT0gNyAmJiBfdXJpLnN0YXJ0c1dpdGgoInBhY2thZ2UiKTsKCiAgLy8vIExpa2UgW2lzU2NoZW1lXSBidXQgZXhwZWN0cyBhcmd1bWVudCB0byBiZSBjYXNlIG5vcm1hbGl6ZWQuCiAgYm9vbCBfaXNTY2hlbWUoU3RyaW5nIHNjaGVtZSkgPT4KICAgICAgX3NjaGVtZUVuZCA9PSBzY2hlbWUubGVuZ3RoICYmIF91cmkuc3RhcnRzV2l0aChzY2hlbWUpOwoKICBib29sIGdldCBoYXNBYnNvbHV0ZVBhdGggPT4gX3VyaS5zdGFydHNXaXRoKCIvIiwgX3BhdGhTdGFydCk7CiAgYm9vbCBnZXQgaGFzRW1wdHlQYXRoID0+IF9wYXRoU3RhcnQgPT0gX3F1ZXJ5U3RhcnQ7CgogIGJvb2wgZ2V0IGlzQWJzb2x1dGUgPT4gaGFzU2NoZW1lICYmICFoYXNGcmFnbWVudDsKCiAgYm9vbCBpc1NjaGVtZShTdHJpbmcgc2NoZW1lKSB7CiAgICBpZiAoc2NoZW1lID09IG51bGwgfHwgc2NoZW1lLmlzRW1wdHkpIHJldHVybiBfc2NoZW1lRW5kIDwgMDsKICAgIGlmIChzY2hlbWUubGVuZ3RoICE9IF9zY2hlbWVFbmQpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBfVXJpLl9jb21wYXJlU2NoZW1lKHNjaGVtZSwgX3VyaSk7CiAgfQoKICBTdHJpbmcgZ2V0IHNjaGVtZSB7CiAgICBpZiAoX3NjaGVtZUVuZCA8PSAwKSByZXR1cm4gIiI7CiAgICBpZiAoX3NjaGVtZUNhY2hlICE9IG51bGwpIHJldHVybiBfc2NoZW1lQ2FjaGU7CiAgICBpZiAoX2lzSHR0cCkgewogICAgICBfc2NoZW1lQ2FjaGUgPSAiaHR0cCI7CiAgICB9IGVsc2UgaWYgKF9pc0h0dHBzKSB7CiAgICAgIF9zY2hlbWVDYWNoZSA9ICJodHRwcyI7CiAgICB9IGVsc2UgaWYgKF9pc0ZpbGUpIHsKICAgICAgX3NjaGVtZUNhY2hlID0gImZpbGUiOwogICAgfSBlbHNlIGlmIChfaXNQYWNrYWdlKSB7CiAgICAgIF9zY2hlbWVDYWNoZSA9ICJwYWNrYWdlIjsKICAgIH0gZWxzZSB7CiAgICAgIF9zY2hlbWVDYWNoZSA9IF91cmkuc3Vic3RyaW5nKDAsIF9zY2hlbWVFbmQpOwogICAgfQogICAgcmV0dXJuIF9zY2hlbWVDYWNoZTsKICB9CgogIFN0cmluZyBnZXQgYXV0aG9yaXR5ID0+CiAgICAgIF9ob3N0U3RhcnQgPiAwID8gX3VyaS5zdWJzdHJpbmcoX3NjaGVtZUVuZCArIDMsIF9wYXRoU3RhcnQpIDogIiI7CiAgU3RyaW5nIGdldCB1c2VySW5mbyA9PiAoX2hvc3RTdGFydCA+IF9zY2hlbWVFbmQgKyAzKQogICAgICA/IF91cmkuc3Vic3RyaW5nKF9zY2hlbWVFbmQgKyAzLCBfaG9zdFN0YXJ0IC0gMSkKICAgICAgOiAiIjsKICBTdHJpbmcgZ2V0IGhvc3QgPT4KICAgICAgX2hvc3RTdGFydCA+IDAgPyBfdXJpLnN1YnN0cmluZyhfaG9zdFN0YXJ0LCBfcG9ydFN0YXJ0KSA6ICIiOwogIGludCBnZXQgcG9ydCB7CiAgICBpZiAoaGFzUG9ydCkgcmV0dXJuIGludC5wYXJzZShfdXJpLnN1YnN0cmluZyhfcG9ydFN0YXJ0ICsgMSwgX3BhdGhTdGFydCkpOwogICAgaWYgKF9pc0h0dHApIHJldHVybiA4MDsKICAgIGlmIChfaXNIdHRwcykgcmV0dXJuIDQ0MzsKICAgIHJldHVybiAwOwogIH0KCiAgU3RyaW5nIGdldCBwYXRoID0+IF91cmkuc3Vic3RyaW5nKF9wYXRoU3RhcnQsIF9xdWVyeVN0YXJ0KTsKICBTdHJpbmcgZ2V0IHF1ZXJ5ID0+IChfcXVlcnlTdGFydCA8IF9mcmFnbWVudFN0YXJ0KQogICAgICA/IF91cmkuc3Vic3RyaW5nKF9xdWVyeVN0YXJ0ICsgMSwgX2ZyYWdtZW50U3RhcnQpCiAgICAgIDogIiI7CiAgU3RyaW5nIGdldCBmcmFnbWVudCA9PgogICAgICAoX2ZyYWdtZW50U3RhcnQgPCBfdXJpLmxlbmd0aCkgPyBfdXJpLnN1YnN0cmluZyhfZnJhZ21lbnRTdGFydCArIDEpIDogIiI7CgogIFN0cmluZyBnZXQgb3JpZ2luIHsKICAgIC8vIENoZWNrIG9yaWdpbmFsIGJlaGF2aW9yIC0gVzNDIHNwZWMgaXMgd29ua3khCiAgICBib29sIGlzSHR0cCA9IF9pc0h0dHA7CiAgICBpZiAoX3NjaGVtZUVuZCA8IDApIHsKICAgICAgdGhyb3cgU3RhdGVFcnJvcigiQ2Fubm90IHVzZSBvcmlnaW4gd2l0aG91dCBhIHNjaGVtZTogJHRoaXMiKTsKICAgIH0KICAgIGlmICghaXNIdHRwICYmICFfaXNIdHRwcykgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKAogICAgICAgICAgIk9yaWdpbiBpcyBvbmx5IGFwcGxpY2FibGUgdG8gc2NoZW1lcyBodHRwIGFuZCBodHRwczogJHRoaXMiKTsKICAgIH0KICAgIGlmIChfaG9zdFN0YXJ0ID09IF9wb3J0U3RhcnQpIHsKICAgICAgdGhyb3cgU3RhdGVFcnJvcigKICAgICAgICAgICJBICRzY2hlbWU6IFVSSSBzaG91bGQgaGF2ZSBhIG5vbi1lbXB0eSBob3N0IG5hbWU6ICR0aGlzIik7CiAgICB9CiAgICBpZiAoX2hvc3RTdGFydCA9PSBfc2NoZW1lRW5kICsgMykgewogICAgICByZXR1cm4gX3VyaS5zdWJzdHJpbmcoMCwgX3BhdGhTdGFydCk7CiAgICB9CiAgICAvLyBOZWVkIHRvIGRyb3AgYW5vbi1lbXB0eSB1c2VySW5mby4KICAgIHJldHVybiBfdXJpLnN1YnN0cmluZygwLCBfc2NoZW1lRW5kICsgMykgKwogICAgICAgIF91cmkuc3Vic3RyaW5nKF9ob3N0U3RhcnQsIF9wYXRoU3RhcnQpOwogIH0KCiAgTGlzdDxTdHJpbmc+IGdldCBwYXRoU2VnbWVudHMgewogICAgaW50IHN0YXJ0ID0gX3BhdGhTdGFydDsKICAgIGludCBlbmQgPSBfcXVlcnlTdGFydDsKICAgIGlmIChfdXJpLnN0YXJ0c1dpdGgoIi8iLCBzdGFydCkpIHN0YXJ0Kys7CiAgICBpZiAoc3RhcnQgPT0gZW5kKSByZXR1cm4gY29uc3QgPFN0cmluZz5bXTsKICAgIExpc3Q8U3RyaW5nPiBwYXJ0cyA9IFtdOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgdmFyIGNoYXIgPSBfdXJpLmNvZGVVbml0QXQoaSk7CiAgICAgIGlmIChjaGFyID09IF9TTEFTSCkgewogICAgICAgIHBhcnRzLmFkZChfdXJpLnN1YnN0cmluZyhzdGFydCwgaSkpOwogICAgICAgIHN0YXJ0ID0gaSArIDE7CiAgICAgIH0KICAgIH0KICAgIHBhcnRzLmFkZChfdXJpLnN1YnN0cmluZyhzdGFydCwgZW5kKSk7CiAgICByZXR1cm4gTGlzdDxTdHJpbmc+LnVubW9kaWZpYWJsZShwYXJ0cyk7CiAgfQoKICBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldCBxdWVyeVBhcmFtZXRlcnMgewogICAgaWYgKCFoYXNRdWVyeSkgcmV0dXJuIGNvbnN0IDxTdHJpbmcsIFN0cmluZz57fTsKICAgIHJldHVybiBVbm1vZGlmaWFibGVNYXBWaWV3PFN0cmluZywgU3RyaW5nPihVcmkuc3BsaXRRdWVyeVN0cmluZyhxdWVyeSkpOwogIH0KCiAgTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBnZXQgcXVlcnlQYXJhbWV0ZXJzQWxsIHsKICAgIGlmICghaGFzUXVlcnkpIHJldHVybiBjb25zdCA8U3RyaW5nLCBMaXN0PFN0cmluZz4+e307CiAgICBNYXAgcXVlcnlQYXJhbWV0ZXJMaXN0cyA9IF9VcmkuX3NwbGl0UXVlcnlTdHJpbmdBbGwocXVlcnkpOwogICAgZm9yICh2YXIga2V5IGluIHF1ZXJ5UGFyYW1ldGVyTGlzdHMua2V5cykgewogICAgICBxdWVyeVBhcmFtZXRlckxpc3RzW2tleV0gPQogICAgICAgICAgTGlzdDxTdHJpbmc+LnVubW9kaWZpYWJsZShxdWVyeVBhcmFtZXRlckxpc3RzW2tleV0pOwogICAgfQogICAgcmV0dXJuIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4udW5tb2RpZmlhYmxlKHF1ZXJ5UGFyYW1ldGVyTGlzdHMpOwogIH0KCiAgYm9vbCBfaXNQb3J0KFN0cmluZyBwb3J0KSB7CiAgICBpbnQgcG9ydERpZ2l0U3RhcnQgPSBfcG9ydFN0YXJ0ICsgMTsKICAgIHJldHVybiBwb3J0RGlnaXRTdGFydCArIHBvcnQubGVuZ3RoID09IF9wYXRoU3RhcnQgJiYKICAgICAgICBfdXJpLnN0YXJ0c1dpdGgocG9ydCwgcG9ydERpZ2l0U3RhcnQpOwogIH0KCiAgVXJpIG5vcm1hbGl6ZVBhdGgoKSA9PiB0aGlzOwoKICBVcmkgcmVtb3ZlRnJhZ21lbnQoKSB7CiAgICBpZiAoIWhhc0ZyYWdtZW50KSByZXR1cm4gdGhpczsKICAgIHJldHVybiBfU2ltcGxlVXJpKF91cmkuc3Vic3RyaW5nKDAsIF9mcmFnbWVudFN0YXJ0KSwgX3NjaGVtZUVuZCwgX2hvc3RTdGFydCwKICAgICAgICBfcG9ydFN0YXJ0LCBfcGF0aFN0YXJ0LCBfcXVlcnlTdGFydCwgX2ZyYWdtZW50U3RhcnQsIF9zY2hlbWVDYWNoZSk7CiAgfQoKICBVcmkgcmVwbGFjZSgKICAgICAge1N0cmluZyBzY2hlbWUsCiAgICAgIFN0cmluZyB1c2VySW5mbywKICAgICAgU3RyaW5nIGhvc3QsCiAgICAgIGludCBwb3J0LAogICAgICBTdHJpbmcgcGF0aCwKICAgICAgSXRlcmFibGU8U3RyaW5nPiBwYXRoU2VnbWVudHMsCiAgICAgIFN0cmluZyBxdWVyeSwKICAgICAgTWFwPFN0cmluZywgZHluYW1pYyAvKlN0cmluZ3xJdGVyYWJsZTxTdHJpbmc+Ki8gPiBxdWVyeVBhcmFtZXRlcnMsCiAgICAgIFN0cmluZyBmcmFnbWVudH0pIHsKICAgIGJvb2wgc2NoZW1lQ2hhbmdlZCA9IGZhbHNlOwogICAgaWYgKHNjaGVtZSAhPSBudWxsKSB7CiAgICAgIHNjaGVtZSA9IF9VcmkuX21ha2VTY2hlbWUoc2NoZW1lLCAwLCBzY2hlbWUubGVuZ3RoKTsKICAgICAgc2NoZW1lQ2hhbmdlZCA9ICFfaXNTY2hlbWUoc2NoZW1lKTsKICAgIH0gZWxzZSB7CiAgICAgIHNjaGVtZSA9IHRoaXMuc2NoZW1lOwogICAgfQogICAgYm9vbCBpc0ZpbGUgPSAoc2NoZW1lID09ICJmaWxlIik7CiAgICBpZiAodXNlckluZm8gIT0gbnVsbCkgewogICAgICB1c2VySW5mbyA9IF9VcmkuX21ha2VVc2VySW5mbyh1c2VySW5mbywgMCwgdXNlckluZm8ubGVuZ3RoKTsKICAgIH0gZWxzZSBpZiAoX2hvc3RTdGFydCA+IDApIHsKICAgICAgdXNlckluZm8gPSBfdXJpLnN1YnN0cmluZyhfc2NoZW1lRW5kICsgMywgX2hvc3RTdGFydCk7CiAgICB9IGVsc2UgewogICAgICB1c2VySW5mbyA9ICIiOwogICAgfQogICAgaWYgKHBvcnQgIT0gbnVsbCkgewogICAgICBwb3J0ID0gX1VyaS5fbWFrZVBvcnQocG9ydCwgc2NoZW1lKTsKICAgIH0gZWxzZSB7CiAgICAgIHBvcnQgPSB0aGlzLmhhc1BvcnQgPyB0aGlzLnBvcnQgOiBudWxsOwogICAgICBpZiAoc2NoZW1lQ2hhbmdlZCkgewogICAgICAgIC8vIFRoZSBkZWZhdWx0IHBvcnQgbWlnaHQgaGF2ZSBjaGFuZ2VkLgogICAgICAgIHBvcnQgPSBfVXJpLl9tYWtlUG9ydChwb3J0LCBzY2hlbWUpOwogICAgICB9CiAgICB9CiAgICBpZiAoaG9zdCAhPSBudWxsKSB7CiAgICAgIGhvc3QgPSBfVXJpLl9tYWtlSG9zdChob3N0LCAwLCBob3N0Lmxlbmd0aCwgZmFsc2UpOwogICAgfSBlbHNlIGlmIChfaG9zdFN0YXJ0ID4gMCkgewogICAgICBob3N0ID0gX3VyaS5zdWJzdHJpbmcoX2hvc3RTdGFydCwgX3BvcnRTdGFydCk7CiAgICB9IGVsc2UgaWYgKHVzZXJJbmZvLmlzTm90RW1wdHkgfHwgcG9ydCAhPSBudWxsIHx8IGlzRmlsZSkgewogICAgICBob3N0ID0gIiI7CiAgICB9CgogICAgYm9vbCBoYXNBdXRob3JpdHkgPSBob3N0ICE9IG51bGw7CiAgICBpZiAocGF0aCAhPSBudWxsIHx8IHBhdGhTZWdtZW50cyAhPSBudWxsKSB7CiAgICAgIHBhdGggPSBfVXJpLl9tYWtlUGF0aChwYXRoLCAwLCBfc3RyaW5nT3JOdWxsTGVuZ3RoKHBhdGgpLCBwYXRoU2VnbWVudHMsCiAgICAgICAgICBzY2hlbWUsIGhhc0F1dGhvcml0eSk7CiAgICB9IGVsc2UgewogICAgICBwYXRoID0gX3VyaS5zdWJzdHJpbmcoX3BhdGhTdGFydCwgX3F1ZXJ5U3RhcnQpOwogICAgICBpZiAoKGlzRmlsZSB8fCAoaGFzQXV0aG9yaXR5ICYmICFwYXRoLmlzRW1wdHkpKSAmJgogICAgICAgICAgIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7CiAgICAgICAgcGF0aCA9ICIvIiArIHBhdGg7CiAgICAgIH0KICAgIH0KCiAgICBpZiAocXVlcnkgIT0gbnVsbCB8fCBxdWVyeVBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICBxdWVyeSA9IF9VcmkuX21ha2VRdWVyeSgKICAgICAgICAgIHF1ZXJ5LCAwLCBfc3RyaW5nT3JOdWxsTGVuZ3RoKHF1ZXJ5KSwgcXVlcnlQYXJhbWV0ZXJzKTsKICAgIH0gZWxzZSBpZiAoX3F1ZXJ5U3RhcnQgPCBfZnJhZ21lbnRTdGFydCkgewogICAgICBxdWVyeSA9IF91cmkuc3Vic3RyaW5nKF9xdWVyeVN0YXJ0ICsgMSwgX2ZyYWdtZW50U3RhcnQpOwogICAgfQoKICAgIGlmIChmcmFnbWVudCAhPSBudWxsKSB7CiAgICAgIGZyYWdtZW50ID0gX1VyaS5fbWFrZUZyYWdtZW50KGZyYWdtZW50LCAwLCBmcmFnbWVudC5sZW5ndGgpOwogICAgfSBlbHNlIGlmIChfZnJhZ21lbnRTdGFydCA8IF91cmkubGVuZ3RoKSB7CiAgICAgIGZyYWdtZW50ID0gX3VyaS5zdWJzdHJpbmcoX2ZyYWdtZW50U3RhcnQgKyAxKTsKICAgIH0KCiAgICByZXR1cm4gX1VyaS5faW50ZXJuYWwoc2NoZW1lLCB1c2VySW5mbywgaG9zdCwgcG9ydCwgcGF0aCwgcXVlcnksIGZyYWdtZW50KTsKICB9CgogIFVyaSByZXNvbHZlKFN0cmluZyByZWZlcmVuY2UpIHsKICAgIHJldHVybiByZXNvbHZlVXJpKFVyaS5wYXJzZShyZWZlcmVuY2UpKTsKICB9CgogIFVyaSByZXNvbHZlVXJpKFVyaSByZWZlcmVuY2UpIHsKICAgIGlmIChyZWZlcmVuY2UgaXMgX1NpbXBsZVVyaSkgewogICAgICByZXR1cm4gX3NpbXBsZU1lcmdlKHRoaXMsIHJlZmVyZW5jZSk7CiAgICB9CiAgICByZXR1cm4gX3RvTm9uU2ltcGxlKCkucmVzb2x2ZVVyaShyZWZlcmVuY2UpOwogIH0KCiAgLy8gTWVyZ2UgdHdvIHNpbXBsZSBVUklzLiBUaGlzIHNob3VsZCBhbHdheXMgcmVzdWx0IGluIGEgcHJlZml4IG9mCiAgLy8gb25lIGNvbmNhdGVuYXRlZCB3aXRoIGEgc3VmZml4IG9mIHRoZSBvdGhlciwgcG9zc2libHkgd2l0aCBhIGAvYCBpbgogIC8vIHRoZSBtaWRkbGUgb2YgdHdvIG1lcmdlZCBwYXRocywgd2hpY2ggaXMgYWdhaW4gc2ltcGxlLgogIC8vIEluIGEgZmV3IGNhc2VzLCB0aGVyZSBtaWdodCBiZSBhIG5lZWQgZm9yIGV4dHJhIG5vcm1hbGl6YXRpb24sIHdoZW4KICAvLyByZXNvbHZpbmcgb24gdG9wIG9mIGEga25vd24gc2NoZW1lLgogIFVyaSBfc2ltcGxlTWVyZ2UoX1NpbXBsZVVyaSBiYXNlLCBfU2ltcGxlVXJpIHJlZikgewogICAgaWYgKHJlZi5oYXNTY2hlbWUpIHJldHVybiByZWY7CiAgICBpZiAocmVmLmhhc0F1dGhvcml0eSkgewogICAgICBpZiAoIWJhc2UuaGFzU2NoZW1lKSByZXR1cm4gcmVmOwogICAgICBib29sIGlzU2ltcGxlID0gdHJ1ZTsKICAgICAgaWYgKGJhc2UuX2lzRmlsZSkgewogICAgICAgIGlzU2ltcGxlID0gIXJlZi5oYXNFbXB0eVBhdGg7CiAgICAgIH0gZWxzZSBpZiAoYmFzZS5faXNIdHRwKSB7CiAgICAgICAgaXNTaW1wbGUgPSAhcmVmLl9pc1BvcnQoIjgwIik7CiAgICAgIH0gZWxzZSBpZiAoYmFzZS5faXNIdHRwcykgewogICAgICAgIGlzU2ltcGxlID0gIXJlZi5faXNQb3J0KCI0NDMiKTsKICAgICAgfQogICAgICBpZiAoaXNTaW1wbGUpIHsKICAgICAgICB2YXIgZGVsdGEgPSBiYXNlLl9zY2hlbWVFbmQgKyAxOwogICAgICAgIHZhciBuZXdVcmkgPSBiYXNlLl91cmkuc3Vic3RyaW5nKDAsIGJhc2UuX3NjaGVtZUVuZCArIDEpICsKICAgICAgICAgICAgcmVmLl91cmkuc3Vic3RyaW5nKHJlZi5fc2NoZW1lRW5kICsgMSk7CiAgICAgICAgcmV0dXJuIF9TaW1wbGVVcmkoCiAgICAgICAgICAgIG5ld1VyaSwKICAgICAgICAgICAgYmFzZS5fc2NoZW1lRW5kLAogICAgICAgICAgICByZWYuX2hvc3RTdGFydCArIGRlbHRhLAogICAgICAgICAgICByZWYuX3BvcnRTdGFydCArIGRlbHRhLAogICAgICAgICAgICByZWYuX3BhdGhTdGFydCArIGRlbHRhLAogICAgICAgICAgICByZWYuX3F1ZXJ5U3RhcnQgKyBkZWx0YSwKICAgICAgICAgICAgcmVmLl9mcmFnbWVudFN0YXJ0ICsgZGVsdGEsCiAgICAgICAgICAgIGJhc2UuX3NjaGVtZUNhY2hlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBUaGlzIHdpbGwgcmVxdWlyZSBub3JtYWxpemF0aW9uLCBzbyB1c2UgdGhlIF9VcmkgaW1wbGVtZW50YXRpb24uCiAgICAgICAgcmV0dXJuIF90b05vblNpbXBsZSgpLnJlc29sdmVVcmkocmVmKTsKICAgICAgfQogICAgfQogICAgaWYgKHJlZi5oYXNFbXB0eVBhdGgpIHsKICAgICAgaWYgKHJlZi5oYXNRdWVyeSkgewogICAgICAgIGludCBkZWx0YSA9IGJhc2UuX3F1ZXJ5U3RhcnQgLSByZWYuX3F1ZXJ5U3RhcnQ7CiAgICAgICAgdmFyIG5ld1VyaSA9IGJhc2UuX3VyaS5zdWJzdHJpbmcoMCwgYmFzZS5fcXVlcnlTdGFydCkgKwogICAgICAgICAgICByZWYuX3VyaS5zdWJzdHJpbmcocmVmLl9xdWVyeVN0YXJ0KTsKICAgICAgICByZXR1cm4gX1NpbXBsZVVyaSgKICAgICAgICAgICAgbmV3VXJpLAogICAgICAgICAgICBiYXNlLl9zY2hlbWVFbmQsCiAgICAgICAgICAgIGJhc2UuX2hvc3RTdGFydCwKICAgICAgICAgICAgYmFzZS5fcG9ydFN0YXJ0LAogICAgICAgICAgICBiYXNlLl9wYXRoU3RhcnQsCiAgICAgICAgICAgIHJlZi5fcXVlcnlTdGFydCArIGRlbHRhLAogICAgICAgICAgICByZWYuX2ZyYWdtZW50U3RhcnQgKyBkZWx0YSwKICAgICAgICAgICAgYmFzZS5fc2NoZW1lQ2FjaGUpOwogICAgICB9CiAgICAgIGlmIChyZWYuaGFzRnJhZ21lbnQpIHsKICAgICAgICBpbnQgZGVsdGEgPSBiYXNlLl9mcmFnbWVudFN0YXJ0IC0gcmVmLl9mcmFnbWVudFN0YXJ0OwogICAgICAgIHZhciBuZXdVcmkgPSBiYXNlLl91cmkuc3Vic3RyaW5nKDAsIGJhc2UuX2ZyYWdtZW50U3RhcnQpICsKICAgICAgICAgICAgcmVmLl91cmkuc3Vic3RyaW5nKHJlZi5fZnJhZ21lbnRTdGFydCk7CiAgICAgICAgcmV0dXJuIF9TaW1wbGVVcmkoCiAgICAgICAgICAgIG5ld1VyaSwKICAgICAgICAgICAgYmFzZS5fc2NoZW1lRW5kLAogICAgICAgICAgICBiYXNlLl9ob3N0U3RhcnQsCiAgICAgICAgICAgIGJhc2UuX3BvcnRTdGFydCwKICAgICAgICAgICAgYmFzZS5fcGF0aFN0YXJ0LAogICAgICAgICAgICBiYXNlLl9xdWVyeVN0YXJ0LAogICAgICAgICAgICByZWYuX2ZyYWdtZW50U3RhcnQgKyBkZWx0YSwKICAgICAgICAgICAgYmFzZS5fc2NoZW1lQ2FjaGUpOwogICAgICB9CiAgICAgIHJldHVybiBiYXNlLnJlbW92ZUZyYWdtZW50KCk7CiAgICB9CiAgICBpZiAocmVmLmhhc0Fic29sdXRlUGF0aCkgewogICAgICB2YXIgZGVsdGEgPSBiYXNlLl9wYXRoU3RhcnQgLSByZWYuX3BhdGhTdGFydDsKICAgICAgdmFyIG5ld1VyaSA9IGJhc2UuX3VyaS5zdWJzdHJpbmcoMCwgYmFzZS5fcGF0aFN0YXJ0KSArCiAgICAgICAgICByZWYuX3VyaS5zdWJzdHJpbmcocmVmLl9wYXRoU3RhcnQpOwogICAgICByZXR1cm4gX1NpbXBsZVVyaSgKICAgICAgICAgIG5ld1VyaSwKICAgICAgICAgIGJhc2UuX3NjaGVtZUVuZCwKICAgICAgICAgIGJhc2UuX2hvc3RTdGFydCwKICAgICAgICAgIGJhc2UuX3BvcnRTdGFydCwKICAgICAgICAgIGJhc2UuX3BhdGhTdGFydCwKICAgICAgICAgIHJlZi5fcXVlcnlTdGFydCArIGRlbHRhLAogICAgICAgICAgcmVmLl9mcmFnbWVudFN0YXJ0ICsgZGVsdGEsCiAgICAgICAgICBiYXNlLl9zY2hlbWVDYWNoZSk7CiAgICB9CiAgICBpZiAoYmFzZS5oYXNFbXB0eVBhdGggJiYgYmFzZS5oYXNBdXRob3JpdHkpIHsKICAgICAgLy8gcmVmIGhhcyByZWxhdGl2ZSBub24tZW1wdHkgcGF0aC4KICAgICAgLy8gQWRkIGEgIi8iIGluIGZyb250LCB0aGVuIGxlYWRpbmcgIi8uLi8iIHNlZ21lbnRzIGFyZSBmb2xkZWQgdG8gIi8iLgogICAgICBpbnQgcmVmU3RhcnQgPSByZWYuX3BhdGhTdGFydDsKICAgICAgd2hpbGUgKHJlZi5fdXJpLnN0YXJ0c1dpdGgoIi4uLyIsIHJlZlN0YXJ0KSkgewogICAgICAgIHJlZlN0YXJ0ICs9IDM7CiAgICAgIH0KICAgICAgdmFyIGRlbHRhID0gYmFzZS5fcGF0aFN0YXJ0IC0gcmVmU3RhcnQgKyAxOwogICAgICB2YXIgbmV3VXJpID0gIiR7YmFzZS5fdXJpLnN1YnN0cmluZygwLCBiYXNlLl9wYXRoU3RhcnQpfS8iCiAgICAgICAgICAiJHtyZWYuX3VyaS5zdWJzdHJpbmcocmVmU3RhcnQpfSI7CiAgICAgIHJldHVybiBfU2ltcGxlVXJpKAogICAgICAgICAgbmV3VXJpLAogICAgICAgICAgYmFzZS5fc2NoZW1lRW5kLAogICAgICAgICAgYmFzZS5faG9zdFN0YXJ0LAogICAgICAgICAgYmFzZS5fcG9ydFN0YXJ0LAogICAgICAgICAgYmFzZS5fcGF0aFN0YXJ0LAogICAgICAgICAgcmVmLl9xdWVyeVN0YXJ0ICsgZGVsdGEsCiAgICAgICAgICByZWYuX2ZyYWdtZW50U3RhcnQgKyBkZWx0YSwKICAgICAgICAgIGJhc2UuX3NjaGVtZUNhY2hlKTsKICAgIH0KICAgIC8vIE1lcmdlIHBhdGhzLgoKICAgIC8vIFRoZSBSRkMgMzk4NiBhbGdvcml0aG0gbWVyZ2VzIHRoZSBiYXNlIHBhdGggd2l0aG91dCBpdHMgZmluYWwgc2VnbWVudAogICAgLy8gKGFueXRoaW5nIGFmdGVyIHRoZSBmaW5hbCAiLyIsIG9yIGV2ZXJ5dGhpbmcgaWYgdGhlIGJhc2UgcGF0aCBkb2Vzbid0CiAgICAvLyBjb250YWluIGFueSAiLyIpLCBhbmQgdGhlIHJlZmVyZW5jZSBwYXRoLgogICAgLy8gVGhlbiBpdCByZW1vdmVzICIuIiBhbmQgIi4uIiBzZWdtZW50cyB1c2luZyB0aGUgcmVtb3ZlLWRvdC1zZWdtZW50CiAgICAvLyBhbGdvcml0aG0uCiAgICAvLyBUaGlzIGNvZGUgY29tYmluZXMgdGhlIHR3byBzdGVwcy4gSXQgaXMgc2ltcGxpZmllZCBieSBrbm93aW5nIHRoYXQKICAgIC8vIHRoZSBiYXNlIHBhdGggY29udGFpbnMgbm8gIi4iIG9yICIuLiIgc2VnbWVudHMsIGFuZCB0aGUgcmVmZXJlbmNlCiAgICAvLyBwYXRoIGNhbiBvbmx5IGNvbnRhaW4gbGVhZGluZyAiLi4iIHNlZ21lbnRzLgoKICAgIFN0cmluZyBiYXNlVXJpID0gYmFzZS5fdXJpOwogICAgU3RyaW5nIHJlZlVyaSA9IHJlZi5fdXJpOwogICAgaW50IGJhc2VTdGFydCA9IGJhc2UuX3BhdGhTdGFydDsKICAgIGludCBiYXNlRW5kID0gYmFzZS5fcXVlcnlTdGFydDsKICAgIHdoaWxlIChiYXNlVXJpLnN0YXJ0c1dpdGgoIi4uLyIsIGJhc2VTdGFydCkpIGJhc2VTdGFydCArPSAzOwogICAgaW50IHJlZlN0YXJ0ID0gcmVmLl9wYXRoU3RhcnQ7CiAgICBpbnQgcmVmRW5kID0gcmVmLl9xdWVyeVN0YXJ0OwoKICAgIC8vLyBDb3VudCBvZiBsZWFkaW5nICIuLiIgc2VnbWVudHMgaW4gcmVmZXJlbmNlIHBhdGguCiAgICAvLy8gVGhlIGNvdW50IGlzIGRlY3JlbWVudGVkIHdoZW4gdGhlIHNlZ21lbnQgaXMgbWF0Y2hlZCB3aXRoIGEKICAgIC8vLyBzZWdtZW50IG9mIHRoZSBiYXNlIHBhdGgsIGFuZCBib3RoIGFyZSB0aGVuIG9taXR0ZWQgZnJvbSB0aGUgcmVzdWx0LgogICAgaW50IGJhY2tDb3VudCA9IDA7CgogICAgLy8vIENvdW50ICIuLi8iIHNlZ21lbnRzIGFuZCBhZHZhbmNlIGByZWZTdGFydGAgdG8gYWZ0ZXIgdGhlIHNlZ21lbnRzLgogICAgd2hpbGUgKHJlZlN0YXJ0ICsgMyA8PSByZWZFbmQgJiYgcmVmVXJpLnN0YXJ0c1dpdGgoIi4uLyIsIHJlZlN0YXJ0KSkgewogICAgICByZWZTdGFydCArPSAzOwogICAgICBiYWNrQ291bnQgKz0gMTsKICAgIH0KCiAgICAvLyBFeHRyYSBzbGFzaCBpbnNlcnRlZCBiZXR3ZWVuIGJhc2UgYW5kIHJlZmVyZW5jZSBwYXRoIHBhcnRzIGlmCiAgICAvLyB0aGUgYmFzZSBwYXRoIGNvbnRhaW5zIGFueSBzbGFzaGVzLCBvciBlbXB0eSBzdHJpbmcgaWYgbm9uZS4KICAgIC8vIChXZSBjb3VsZCB1c2UgYSBzbGFzaCBmcm9tIHRoZSBiYXNlIHBhdGggaW4gbW9zdCBjYXNlcywgYnV0IG5vdCBpZgogICAgLy8gd2UgcmVtb3ZlIHRoZSBlbnRpcmUgYmFzZSBwYXRoKS4KICAgIFN0cmluZyBpbnNlcnQgPSAiIjsKCiAgICAvLy8gUmVtb3ZlIHNlZ21lbnRzIGZyb20gdGhlIGJhc2UgcGF0aC4KICAgIC8vLyBTdGFydCB3aXRoIHRoZSBzZWdtZW50IHRyYWlsaW5nIHRoZSBsYXN0IHNsYXNoLAogICAgLy8vIHRoZW4gcmVtb3ZlIHNlZ21lbnRzIGZvciBlYWNoIGxlYWRpbmcgIi4uLyIgc2VnbWVudAogICAgLy8vIGZyb20gdGhlIHJlZmVyZW5jZSBwYXRoLCBvciBhcyBtYW55IG9mIHRoZW0gYXMgYXJlIGF2YWlsYWJsZS4KICAgIHdoaWxlIChiYXNlRW5kID4gYmFzZVN0YXJ0KSB7CiAgICAgIGJhc2VFbmQtLTsKICAgICAgaW50IGNoYXIgPSBiYXNlVXJpLmNvZGVVbml0QXQoYmFzZUVuZCk7CiAgICAgIGlmIChjaGFyID09IF9TTEFTSCkgewogICAgICAgIGluc2VydCA9ICIvIjsKICAgICAgICBpZiAoYmFja0NvdW50ID09IDApIGJyZWFrOwogICAgICAgIGJhY2tDb3VudC0tOwogICAgICB9CiAgICB9CgogICAgaWYgKGJhc2VFbmQgPT0gYmFzZVN0YXJ0ICYmICFiYXNlLmhhc1NjaGVtZSAmJiAhYmFzZS5oYXNBYnNvbHV0ZVBhdGgpIHsKICAgICAgLy8gSWYgdGhlIGJhc2UgaXMgKmp1c3QqIGEgcmVsYXRpdmUgcGF0aCAobm8gc2NoZW1lIG9yIGF1dGhvcml0eSksCiAgICAgIC8vIHRoZW4gbWVyZ2luZyB3aXRoIGFub3RoZXIgcmVsYXRpdmUgcGF0aCBkb2Vzbid0IGZvbGxvdyB0aGUKICAgICAgLy8gUkZDLTM5ODYgYmVoYXZpb3IuCiAgICAgIC8vIERvbid0IG5lZWQgdG8gY2hlY2sgYGJhc2UuaGFzQXV0aG9yaXR5YCBzaW5jZSB0aGUgYmFzZSBwYXRoIGlzCiAgICAgIC8vIG5vbi1lbXB0eSAtIGlmIHRoZXJlIGlzIGFuIGF1dGhvcml0eSwgYSBub24tZW1wdHkgcGF0aCBpcyBhYnNvbHV0ZS4KCiAgICAgIC8vIFdlIHJlYWNoZWQgdGhlIHN0YXJ0IG9mIHRoZSBiYXNlIHBhdGgsIGFuZCB3YW50IHRvIHN0YXkgcmVsYXRpdmUsCiAgICAgIC8vIHNvIGRvbid0IGluc2VydCBhIHNsYXNoLgogICAgICBpbnNlcnQgPSAiIjsKICAgICAgLy8gSWYgd2UgcmVhY2hlZCB0aGUgc3RhcnQgb2YgdGhlIGJhc2UgcGF0aCB3aXRoIG1vcmUgIi4uLyIgbGVmdCBvdmVyCiAgICAgIC8vIGluIHRoZSByZWZlcmVuY2UgcGF0aCwgaW5jbHVkZSB0aG9zZSBzZWdtZW50cyBpbiB0aGUgcmVzdWx0LgogICAgICByZWZTdGFydCAtPSBiYWNrQ291bnQgKiAzOwogICAgfQoKICAgIHZhciBkZWx0YSA9IGJhc2VFbmQgLSByZWZTdGFydCArIGluc2VydC5sZW5ndGg7CiAgICB2YXIgbmV3VXJpID0gIiR7YmFzZS5fdXJpLnN1YnN0cmluZygwLCBiYXNlRW5kKX0kaW5zZXJ0IgogICAgICAgICIke3JlZi5fdXJpLnN1YnN0cmluZyhyZWZTdGFydCl9IjsKCiAgICByZXR1cm4gX1NpbXBsZVVyaSgKICAgICAgICBuZXdVcmksCiAgICAgICAgYmFzZS5fc2NoZW1lRW5kLAogICAgICAgIGJhc2UuX2hvc3RTdGFydCwKICAgICAgICBiYXNlLl9wb3J0U3RhcnQsCiAgICAgICAgYmFzZS5fcGF0aFN0YXJ0LAogICAgICAgIHJlZi5fcXVlcnlTdGFydCArIGRlbHRhLAogICAgICAgIHJlZi5fZnJhZ21lbnRTdGFydCArIGRlbHRhLAogICAgICAgIGJhc2UuX3NjaGVtZUNhY2hlKTsKICB9CgogIFN0cmluZyB0b0ZpbGVQYXRoKHtib29sIHdpbmRvd3N9KSB7CiAgICBpZiAoX3NjaGVtZUVuZCA+PSAwICYmICFfaXNGaWxlKSB7CiAgICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBleHRyYWN0IGEgZmlsZSBwYXRoIGZyb20gYSAkc2NoZW1lIFVSSSIpOwogICAgfQogICAgaWYgKF9xdWVyeVN0YXJ0IDwgX3VyaS5sZW5ndGgpIHsKICAgICAgaWYgKF9xdWVyeVN0YXJ0IDwgX2ZyYWdtZW50U3RhcnQpIHsKICAgICAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgICAiQ2Fubm90IGV4dHJhY3QgYSBmaWxlIHBhdGggZnJvbSBhIFVSSSB3aXRoIGEgcXVlcnkgY29tcG9uZW50Iik7CiAgICAgIH0KICAgICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAgICJDYW5ub3QgZXh0cmFjdCBhIGZpbGUgcGF0aCBmcm9tIGEgVVJJIHdpdGggYSBmcmFnbWVudCBjb21wb25lbnQiKTsKICAgIH0KICAgIHdpbmRvd3MgPz89IF9VcmkuX2lzV2luZG93czsKICAgIHJldHVybiB3aW5kb3dzID8gX1VyaS5fdG9XaW5kb3dzRmlsZVBhdGgodGhpcykgOiBfdG9GaWxlUGF0aCgpOwogIH0KCiAgU3RyaW5nIF90b0ZpbGVQYXRoKCkgewogICAgaWYgKF9ob3N0U3RhcnQgPCBfcG9ydFN0YXJ0KSB7CiAgICAgIC8vIEhhcyBhdXRob3JpdHkgYW5kIG5vbi1lbXB0eSBob3N0LgogICAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgIkNhbm5vdCBleHRyYWN0IGEgbm9uLVdpbmRvd3MgZmlsZSBwYXRoIGZyb20gYSBmaWxlIFVSSSAiCiAgICAgICAgICAid2l0aCBhbiBhdXRob3JpdHkiKTsKICAgIH0KICAgIHJldHVybiB0aGlzLnBhdGg7CiAgfQoKICBVcmlEYXRhIGdldCBkYXRhIHsKICAgIGFzc2VydChzY2hlbWUgIT0gImRhdGEiKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSA9PiBfaGFzaENvZGVDYWNoZSA/Pz0gX3VyaS5oYXNoQ29kZTsKCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBvdGhlciBpcyBVcmkgJiYgX3VyaSA9PSBvdGhlci50b1N0cmluZygpOwogIH0KCiAgVXJpIF90b05vblNpbXBsZSgpIHsKICAgIHJldHVybiBfVXJpLl9pbnRlcm5hbCgKICAgICAgICB0aGlzLnNjaGVtZSwKICAgICAgICB0aGlzLnVzZXJJbmZvLAogICAgICAgIHRoaXMuaGFzQXV0aG9yaXR5ID8gdGhpcy5ob3N0IDogbnVsbCwKICAgICAgICB0aGlzLmhhc1BvcnQgPyB0aGlzLnBvcnQgOiBudWxsLAogICAgICAgIHRoaXMucGF0aCwKICAgICAgICB0aGlzLmhhc1F1ZXJ5ID8gdGhpcy5xdWVyeSA6IG51bGwsCiAgICAgICAgdGhpcy5oYXNGcmFnbWVudCA/IHRoaXMuZnJhZ21lbnQgOiBudWxsKTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+IF91cmk7Cn0KCi8vLyBTcGVjaWFsIFtfVXJpXSBjcmVhdGVkIGZyb20gYW4gZXhpc3RpbmcgW1VyaURhdGFdLgpjbGFzcyBfRGF0YVVyaSBleHRlbmRzIF9VcmkgewogIGZpbmFsIFVyaURhdGEgX2RhdGE7CgogIF9EYXRhVXJpKHRoaXMuX2RhdGEsIFN0cmluZyBwYXRoLCBTdHJpbmcgcXVlcnkpCiAgICAgIDogc3VwZXIuX2ludGVybmFsKCJkYXRhIiwgbnVsbCwgbnVsbCwgbnVsbCwgcGF0aCwgcXVlcnksIG51bGwpOwoKICBVcmlEYXRhIGdldCBkYXRhID0+IF9kYXRhOwp9CgovLy8gQ2hlY2tzIHdoZXRoZXIgW3RleHRdIHN0YXJ0cyB3aXRoICJkYXRhOiIgYXQgcG9zaXRpb24gW3N0YXJ0XS4KLy8vCi8vLyBUaGUgdGV4dCBtdXN0IGJlIGxvbmcgZW5vdWdoIHRvIGFsbG93IHJlYWRpbmcgZml2ZSBjaGFyYWN0ZXJzCi8vLyBmcm9tIHRoZSBbc3RhcnRdIHBvc2l0aW9uLgovLy8KLy8vIFJldHVybnMgYW4gaW50ZWdlciB2YWx1ZSB3aGljaCBpcyB6ZXJvIGlmIHRleHQgc3RhcnRzIHdpdGggYWxsLWxvd2VyY2FzZQovLy8gImRhdGE6IiBhbmQgMHgyMCBpZiB0aGUgdGV4dCBzdGFydHMgd2l0aCAiZGF0YToiIHRoYXQgaXNuJ3QgYWxsIGxvd2VyLWNhc2UuCi8vLyBBbGwgb3RoZXIgdmFsdWVzIG1lYW5zIHRoZSB0ZXh0IHN0YXJ0cyB3aXRoIHNvbWUgb3RoZXIgY2hhcmFjdGVyLgppbnQgX3N0YXJ0c1dpdGhEYXRhKFN0cmluZyB0ZXh0LCBpbnQgc3RhcnQpIHsKICAvLyBNdWx0aXBseSBieSAzIHRvIGF2b2lkIGEgbm9uLWNvbG9uIGNoYXJhY3RlciBtYWtpbmcgZGVsdGEgYmUgMHgyMC4KICBpbnQgZGVsdGEgPSAodGV4dC5jb2RlVW5pdEF0KHN0YXJ0ICsgNCkgXiBfQ09MT04pICogMzsKICBkZWx0YSB8PSB0ZXh0LmNvZGVVbml0QXQoc3RhcnQpIF4gMHg2NCAvKmQqLzsKICBkZWx0YSB8PSB0ZXh0LmNvZGVV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QGRhcnQgPSAyLjYKCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7Cgp0eXBlZGVmIFVyaSBfVXJpQmFzZUNsb3N1cmUoKTsKClVyaSBfdW5zdXBwb3J0ZWRVcmlCYXNlKCkgewogIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCInVXJpLmJhc2UnIGlzIG5vdCBzdXBwb3J0ZWQiKTsKfQoKLy8gX3VyaUJhc2VDbG9zdXJlIGNhbiBiZSBvdmVyd3JpdHRlbiBieSB0aGUgZW1iZWRkZXIgdG8gc3VwcGx5IGEgZGlmZmVyZW50Ci8vIHZhbHVlIGZvciBVcmkuYmFzZS4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpfVXJpQmFzZUNsb3N1cmUgX3VyaUJhc2VDbG9zdXJlID0gX3Vuc3VwcG9ydGVkVXJpQmFzZTsKCkBwYXRjaApjbGFzcyBVcmkgewogIEBwYXRjaAogIHN0YXRpYyBVcmkgZ2V0IGJhc2UgPT4gX3VyaUJhc2VDbG9zdXJlKCk7Cn0KCi8vLyBWTSBpbXBsZW1lbnRhdGlvbiBvZiBVcmkuCkBwYXRjaApjbGFzcyBfVXJpIHsKICBzdGF0aWMgZmluYWwgYm9vbCBfaXNXaW5kb3dzQ2FjaGVkID0gX2lzV2luZG93c1BsYXRmb3JtOwoKICBzdGF0aWMgYm9vbCBnZXQgX2lzV2luZG93c1BsYXRmb3JtIG5hdGl2ZSAiVXJpX2lzV2luZG93c1BsYXRmb3JtIjsKCiAgQHBhdGNoCiAgc3RhdGljIGJvb2wgZ2V0IF9pc1dpbmRvd3MgPT4gX2lzV2luZG93c0NhY2hlZDsKCiAgQHBhdGNoCiAgc3RhdGljIFN0cmluZyBfdXJpRW5jb2RlKExpc3Q8aW50PiBjYW5vbmljYWxUYWJsZSwgU3RyaW5nIHRleHQsCiAgICAgIEVuY29kaW5nIGVuY29kaW5nLCBib29sIHNwYWNlVG9QbHVzKSB7CiAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGUgdGV4dCB3aWxsIGJlIGNoYW5nZWQgYnkgZW5jb2RpbmcuCiAgICBpbnQgaSA9IDA7CiAgICBpZiAoaWRlbnRpY2FsKGVuY29kaW5nLCB1dGY4KSB8fAogICAgICAgIGlkZW50aWNhbChlbmNvZGluZywgbGF0aW4xKSB8fAogICAgICAgIGlkZW50aWNhbChlbmNvZGluZywgYXNjaWkpKSB7CiAgICAgIC8vIEVuY29kaW5nIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgb3JpZ2luYWwgc3RyaW5nLgogICAgICAvLyBGaW5kIGZpcnN0IGNoYXJhY3RlciB0aGF0IG5lZWRzIGVuY29kaW5nLgogICAgICBmb3IgKDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgY2hhciA9IHRleHQuY29kZVVuaXRBdChpKTsKICAgICAgICBpZiAoY2hhciA+PSAxMjggfHwKICAgICAgICAgICAgY2Fub25pY2FsVGFibGVbY2hhciA+PiA0XSAmICgxIDw8IChjaGFyICYgMHgwZikpID09IDApIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGkgPT0gdGV4dC5sZW5ndGgpIHJldHVybiB0ZXh0OwoKICAgIC8vIEVuY29kZSB0aGUgc3RyaW5nIGludG8gYnl0ZXMgdGhlbiBnZW5lcmF0ZSBhbiBBU0NJSSBvbmx5IHN0cmluZwogICAgLy8gYnkgcGVyY2VudCBlbmNvZGluZyBzZWxlY3RlZCBieXRlcy4KICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBmb3IgKGludCBqID0gMDsgaiA8IGk7IGorKykgewogICAgICByZXN1bHQud3JpdGVDaGFyQ29kZSh0ZXh0LmNvZGVVbml0QXQoaikpOwogICAgfQoKICAgIC8vIFRPRE8obHJuKTogSXMgdGhlcmUgYSB3YXkgdG8gb25seSBlbmNvZGUgZnJvbSBpbmRleCBpIGFuZCBmb3J3YXJkcy4KICAgIHZhciBieXRlcyA9IGVuY29kaW5nLmVuY29kZSh0ZXh0KTsKICAgIGZvciAoOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaW50IGJ5dGUgPSBieXRlc1tpXTsKICAgICAgaWYgKGJ5dGUgPCAxMjggJiYKICAgICAgICAgICgoY2Fub25pY2FsVGFibGVbYnl0ZSA+PiA0XSAmICgxIDw8IChieXRlICYgMHgwZikpKSAhPSAwKSkgewogICAgICAgIHJlc3VsdC53cml0ZUNoYXJDb2RlKGJ5dGUpOwogICAgICB9IGVsc2UgaWYgKHNwYWNlVG9QbHVzICYmIGJ5dGUgPT0gX1NQQUNFKSB7CiAgICAgICAgcmVzdWx0LndyaXRlQ2hhckNvZGUoX1BMVVMpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IFN0cmluZyBoZXhEaWdpdHMgPSAnMDEyMzQ1Njc4OUFCQ0RFRic7CiAgICAgICAgcmVzdWx0CiAgICAgICAgICAuLndyaXRlQ2hhckNvZGUoX1BFUkNFTlQpCiAgICAgICAgICAuLndyaXRlQ2hhckNvZGUoaGV4RGlnaXRzLmNvZGVVbml0QXQoYnl0ZSA+PiA0KSkKICAgICAgICAgIC4ud3JpdGVDaGFyQ29kZShoZXhEaWdpdHMuY29kZVVuaXRBdChieXRlICYgMHgwZikpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiAgfQp9ClQATk48AQ8BHgEfARw9AgFMFxo3AQcMCSwCAR4HDTsBRQEJMgEJQi08DyUnJjozJScbRREKCAYnAUcrLiIwBgFLJyQbGEckMiUPNQ8kOz4IBh4EAgEeZGFydDpjb3JlLXBhdGNoL3VyaV9wYXRjaC5kYXJ0Um9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL19pbnRlcm5hbC92bS9saWIvaWRlbnRpY2FsX3BhdGNoLmRhcnSB4i8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCkBwYXRjaApAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCmJvb2wgaWRlbnRpY2FsKE9iamVjdCBhLCBPYmplY3QgYikgbmF0aXZlICJJZGVudGljYWxfY29tcGFyaXNvbiI7CgpAcGF0Y2gKQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCmludCBpZGVudGl0eUhhc2hDb2RlKE9iamVjdCBvYmplY3QpID0+IG9iamVjdC5faWRlbnRpdHlIYXNoQ29kZTsKEQBOTjwBDwEeAQcmQgEHIkEBJGRhcnQ6Y29yZS1wYXRjaC9pZGVudGljYWxfcGF0Y2guZGFydDxvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9jb3JlL3ByaW50LmRhcnSB1C8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovLy8gUHJpbnRzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QgdG8gdGhlIGNvbnNvbGUuCnZvaWQgcHJpbnQoT2JqZWN0IG9iamVjdCkgewogIFN0cmluZyBsaW5lID0gIiRvYmplY3QiOwogIGlmIChwcmludFRvWm9uZSA9PSBudWxsKSB7CiAgICBwcmludFRvQ29uc29sZShsaW5lKTsKICB9IGVsc2UgewogICAgcHJpbnRUb1pvbmUobGluZSk7CiAgfQp9ChMATk48AQ8BEwFBHBsdGgsXBAIBFGRhcnQ6Y29yZS9wcmludC5kYXJ0PG9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL19odHRwL2h0dHAuZGFydMABIuMvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCmxpYnJhcnkgZGFydC5faHR0cDsKCmltcG9ydCAnZGFydDphc3luYyc7CmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJwogICAgc2hvdwogICAgICAgIEhhc2hNYXAsCiAgICAgICAgSGFzaFNldCwKICAgICAgICBRdWV1ZSwKICAgICAgICBMaXN0UXVldWUsCiAgICAgICAgTGlua2VkTGlzdCwKICAgICAgICBMaW5rZWRMaXN0RW50cnksCiAgICAgICAgVW5tb2RpZmlhYmxlTWFwVmlldzsKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwppbXBvcnQgJ2RhcnQ6ZGV2ZWxvcGVyJyBoaWRlIGxvZzsKaW1wb3J0ICdkYXJ0Ol9pbnRlcm5hbCcgc2hvdyBTaW5jZSwgSHR0cFN0YXR1czsKaW1wb3J0ICdkYXJ0Om1hdGgnOwppbXBvcnQgJ2RhcnQ6aW8nOwppbXBvcnQgJ2RhcnQ6dHlwZWRfZGF0YSc7CgpwYXJ0ICdjcnlwdG8uZGFydCc7CnBhcnQgJ2h0dHBfZGF0ZS5kYXJ0JzsKcGFydCAnaHR0cF9oZWFkZXJzLmRhcnQnOwpwYXJ0ICdodHRwX2ltcGwuZGFydCc7CnBhcnQgJ2h0dHBfcGFyc2VyLmRhcnQnOwpwYXJ0ICdodHRwX3Nlc3Npb24uZGFydCc7CnBhcnQgJ292ZXJyaWRlcy5kYXJ0JzsKcGFydCAnd2Vic29ja2V0LmRhcnQnOwpwYXJ0ICd3ZWJzb2NrZXRfaW1wbC5kYXJ0JzsKCi8qKgogKiBBIHNlcnZlciB0aGF0IGRlbGl2ZXJzIGNvbnRlbnQsIHN1Y2ggYXMgd2ViIHBhZ2VzLCB1c2luZyB0aGUgSFRUUCBwcm90b2NvbC4KICoKICogVGhlIEh0dHBTZXJ2ZXIgaXMgYSBbU3RyZWFtXSB0aGF0IHByb3ZpZGVzIFtIdHRwUmVxdWVzdF0gb2JqZWN0cy4gRWFjaAogKiBIdHRwUmVxdWVzdCBoYXMgYW4gYXNzb2NpYXRlZCBbSHR0cFJlc3BvbnNlXSBvYmplY3QuCiAqIFRoZSBzZXJ2ZXIgcmVzcG9uZHMgdG8gYSByZXF1ZXN0IGJ5IHdyaXRpbmcgdG8gdGhhdCBIdHRwUmVzcG9uc2Ugb2JqZWN0LgogKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIGJpbmQgYW4gSHR0cFNlcnZlciB0byBhbiBJUHY2CiAqIFtJbnRlcm5ldEFkZHJlc3NdIG9uIHBvcnQgODAgKHRoZSBzdGFuZGFyZCBwb3J0IGZvciBIVFRQIHNlcnZlcnMpCiAqIGFuZCBob3cgdG8gbGlzdGVuIGZvciByZXF1ZXN0cy4KICogUG9ydCA4MCBpcyB0aGUgZGVmYXVsdCBIVFRQIHBvcnQuIEhvd2V2ZXIsIG9uIG1vc3Qgc3lzdGVtcyBhY2Nlc3NpbmcKICogdGhpcyByZXF1aXJlcyBzdXBlci11c2VyIHByaXZpbGVnZXMuIEZvciBsb2NhbCB0ZXN0aW5nIGNvbnNpZGVyCiAqIHVzaW5nIGEgbm9uLXJlc2VydmVkIHBvcnQgKDEwMjQgYW5kIGFib3ZlKS4KICoKICogICAgIGltcG9ydCAnZGFydDppbyc7CiAqCiAqICAgICBtYWluKCkgewogKiAgICAgICBIdHRwU2VydmVyCiAqICAgICAgICAgICAuYmluZChJbnRlcm5ldEFkZHJlc3MuYW55SVB2NiwgODApCiAqICAgICAgICAgICAudGhlbigoc2VydmVyKSB7CiAqICAgICAgICAgICAgIHNlcnZlci5saXN0ZW4oKEh0dHBSZXF1ZXN0IHJlcXVlc3QpIHsKICogICAgICAgICAgICAgICByZXF1ZXN0LnJlc3BvbnNlLndyaXRlKCdIZWxsbywgd29ybGQhJyk7CiAqICAgICAgICAgICAgICAgcmVxdWVzdC5yZXNwb25zZS5jbG9zZSgpOwogKiAgICAgICAgICAgICB9KTsKICogICAgICAgICAgIH0pOwogKiAgICAgfQogKgogKiBJbmNvbXBsZXRlIHJlcXVlc3RzLCBpbiB3aGljaCBhbGwgb3IgcGFydCBvZiB0aGUgaGVhZGVyIGlzIG1pc3NpbmcsIGFyZQogKiBpZ25vcmVkLCBhbmQgbm8gZXhjZXB0aW9ucyBvciBIdHRwUmVxdWVzdCBvYmplY3RzIGFyZSBnZW5lcmF0ZWQgZm9yIHRoZW0uCiAqIExpa2V3aXNlLCB3aGVuIHdyaXRpbmcgdG8gYW4gSHR0cFJlc3BvbnNlLCBhbnkgW1NvY2tldF0gZXhjZXB0aW9ucyBhcmUKICogaWdub3JlZCBhbmQgYW55IGZ1dHVyZSB3cml0ZXMgYXJlIGlnbm9yZWQuCiAqCiAqIFRoZSBIdHRwUmVxdWVzdCBleHBvc2VzIHRoZSByZXF1ZXN0IGhlYWRlcnMgYW5kIHByb3ZpZGVzIHRoZSByZXF1ZXN0IGJvZHksCiAqIGlmIGl0IGV4aXN0cywgYXMgYSBTdHJlYW0gb2YgZGF0YS4gSWYgdGhlIGJvZHkgaXMgdW5yZWFkLCBpdCBpcyBkcmFpbmVkCiAqIHdoZW4gdGhlIHNlcnZlciB3cml0ZXMgdG8gdGhlIEh0dHBSZXNwb25zZSBvciBjbG9zZXMgaXQuCiAqCiAqICMjIEJpbmQgd2l0aCBhIHNlY3VyZSBIVFRQUyBjb25uZWN0aW9uCiAqCiAqIFVzZSBbYmluZFNlY3VyZV0gdG8gY3JlYXRlIGFuIEhUVFBTIHNlcnZlci4KICoKICogVGhlIHNlcnZlciBwcmVzZW50cyBhIGNlcnRpZmljYXRlIHRvIHRoZSBjbGllbnQuIFRoZSBjZXJ0aWZpY2F0ZQogKiBjaGFpbiBhbmQgdGhlIHByaXZhdGUga2V5IGFyZSBzZXQgaW4gdGhlIFtTZWN1cml0eUNvbnRleHRdCiAqIG9iamVjdCB0aGF0IGlzIHBhc3NlZCB0byBbYmluZFNlY3VyZV0uCiAqCiAqICAgICBpbXBvcnQgJ2RhcnQ6aW8nOwogKiAgICAgaW1wb3J0ICJkYXJ0Omlzb2xhdGUiOwogKgogKiAgICAgbWFpbigpIHsKICogICAgICAgU2VjdXJpdHlDb250ZXh0IGNvbnRleHQgPSBuZXcgU2VjdXJpdHlDb250ZXh0KCk7CiAqICAgICAgIHZhciBjaGFpbiA9CiAqICAgICAgICAgICBQbGF0Zm9ybS5zY3JpcHQucmVzb2x2ZSgnY2VydGlmaWNhdGVzL3NlcnZlcl9jaGFpbi5wZW0nKQogKiAgICAgICAgICAgLnRvRmlsZVBhdGgoKTsKICogICAgICAgdmFyIGtleSA9CiAqICAgICAgICAgICBQbGF0Zm9ybS5zY3JpcHQucmVzb2x2ZSgnY2VydGlmaWNhdGVzL3NlcnZlcl9rZXkucGVtJykKICogICAgICAgICAgIC50b0ZpbGVQYXRoKCk7CiAqICAgICAgIGNvbnRleHQudXNlQ2VydGlmaWNhdGVDaGFpbihjaGFpbik7CiAqICAgICAgIGNvbnRleHQudXNlUHJpdmF0ZUtleShrZXksIHBhc3N3b3JkOiAnZGFydGRhcnQnKTsKICoKICogICAgICAgSHR0cFNlcnZlcgogKiAgICAgICAgICAgLmJpbmRTZWN1cmUoSW50ZXJuZXRBZGRyZXNzLmFueUlQdjYsCiAqICAgICAgICAgICAgICAgICAgICAgICA0NDMsCiAqICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0KQogKiAgICAgICAgICAgLnRoZW4oKHNlcnZlcikgewogKiAgICAgICAgICAgICBzZXJ2ZXIubGlzdGVuKChIdHRwUmVxdWVzdCByZXF1ZXN0KSB7CiAqICAgICAgICAgICAgICAgcmVxdWVzdC5yZXNwb25zZS53cml0ZSgnSGVsbG8sIHdvcmxkIScpOwogKiAgICAgICAgICAgICAgIHJlcXVlc3QucmVzcG9uc2UuY2xvc2UoKTsKICogICAgICAgICAgICAgfSk7CiAqICAgICAgICAgICB9KTsKICogICAgIH0KICoKICogIFRoZSBjZXJ0aWZpY2F0ZXMgYW5kIGtleXMgYXJlIFBFTSBmaWxlcywgd2hpY2ggY2FuIGJlIGNyZWF0ZWQgYW5kCiAqICBtYW5hZ2VkIHdpdGggdGhlIHRvb2xzIGluIE9wZW5TU0wuCiAqCiAqICMjIENvbm5lY3QgdG8gYSBzZXJ2ZXIgc29ja2V0CiAqCiAqIFlvdSBjYW4gdXNlIHRoZSBbbGlzdGVuT25dIGNvbnN0cnVjdG9yIHRvIGF0dGFjaCBhbiBIVFRQIHNlcnZlciB0bwogKiBhIFtTZXJ2ZXJTb2NrZXRdLgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJzsKICoKICogICAgIG1haW4oKSB7CiAqICAgICAgIFNlcnZlclNvY2tldC5iaW5kKEludGVybmV0QWRkcmVzcy5hbnlJUHY2LCA4MCkKICogICAgICAgICAudGhlbigoc2VydmVyU29ja2V0KSB7CiAqICAgICAgICAgICBIdHRwU2VydmVyIGh0dHBzZXJ2ZXIgPSBuZXcgSHR0cFNlcnZlci5saXN0ZW5PbihzZXJ2ZXJTb2NrZXQpOwogKiAgICAgICAgICAgc2VydmVyU29ja2V0Lmxpc3RlbigoU29ja2V0IHNvY2tldCkgewogKiAgICAgICAgICAgICBzb2NrZXQud3JpdGUoJ0hlbGxvLCBjbGllbnQuJyk7CiAqICAgICAgICAgICB9KTsKICogICAgICAgICB9KTsKICogICAgIH0KICoKICogIyMgT3RoZXIgcmVzb3VyY2VzCiAqCiAqICogSHR0cFNlcnZlciBpcyBhIFN0cmVhbS4gUmVmZXIgdG8gdGhlIFtTdHJlYW1dIGNsYXNzIGZvciBpbmZvcm1hdGlvbgogKiBhYm91dCB0aGUgc3RyZWFtaW5nIHF1YWxpdGllcyBvZiBhbiBIdHRwU2VydmVyLgogKiBQYXVzaW5nIHRoZSBzdWJzY3JpcHRpb24gb2YgdGhlIHN0cmVhbSwgcGF1c2VzIGF0IHRoZSBPUyBsZXZlbC4KICoKICogKiBUaGUgW3NoZWxmXShodHRwczovL3B1Yi5kZXYvcGFja2FnZXMvc2hlbGYpCiAqIHBhY2thZ2Ugb24gcHViLmRldiBjb250YWlucyBhIHNldCBvZiBoaWdoLWxldmVsIGNsYXNzZXMgdGhhdCwKICogdG9nZXRoZXIgd2l0aCB0aGlzIGNsYXNzLCBtYWtlcyBpdCBlYXN5IHRvIHByb3ZpZGUgY29udGVudCB0aHJvdWdoIEhUVFAKICogc2VydmVycy4KICovCmFic3RyYWN0IGNsYXNzIEh0dHBTZXJ2ZXIgaW1wbGVtZW50cyBTdHJlYW08SHR0cFJlcXVlc3Q+IHsKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBgU2VydmVyYCBoZWFkZXIgZm9yIGFsbCByZXNwb25zZXMKICAgKiBnZW5lcmF0ZWQgYnkgdGhpcyBbSHR0cFNlcnZlcl0uCiAgICoKICAgKiBJZiBbc2VydmVySGVhZGVyXSBpcyBgbnVsbGAsIG5vIGBTZXJ2ZXJgIGhlYWRlciB3aWxsIGJlIGFkZGVkIHRvIGVhY2gKICAgKiByZXNwb25zZS4KICAgKgogICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBudWxsYC4KICAgKi8KICBTdHJpbmcgc2VydmVySGVhZGVyOwoKICAvKioKICAgKiBEZWZhdWx0IHNldCBvZiBoZWFkZXJzIGFkZGVkIHRvIGFsbCByZXNwb25zZSBvYmplY3RzLgogICAqCiAgICogQnkgZGVmYXVsdCB0aGUgZm9sbG93aW5nIGhlYWRlcnMgYXJlIGluIHRoaXMgc2V0OgogICAqCiAgICogICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOAogICAqICAgICBYLUZyYW1lLU9wdGlvbnM6IFNBTUVPUklHSU4KICAgKiAgICAgWC1Db250ZW50LVR5cGUtT3B0aW9uczogbm9zbmlmZgogICAqICAgICBYLVhTUy1Qcm90ZWN0aW9uOiAxOyBtb2RlPWJsb2NrCiAgICoKICAgKiBJZiB0aGUgYFNlcnZlcmAgaGVhZGVyIGlzIGFkZGVkIGhlcmUgYW5kIHRoZSBgc2VydmVySGVhZGVyYCBpcyBzZXQgYXMKICAgKiB3ZWxsIHRoZW4gdGhlIHZhbHVlIG9mIGBzZXJ2ZXJIZWFkZXJgIHRha2VzIHByZWNlZGVuY2UuCiAgICovCiAgSHR0cEhlYWRlcnMgZ2V0IGRlZmF1bHRSZXNwb25zZUhlYWRlcnM7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIFtIdHRwU2VydmVyXSBzaG91bGQgY29tcHJlc3MgdGhlIGNvbnRlbnQsIGlmIHBvc3NpYmxlLgogICAqCiAgICogVGhlIGNvbnRlbnQgY2FuIG9ubHkgYmUgY29tcHJlc3NlZCB3aGVuIHRoZSByZXNwb25zZSBpcyB1c2luZwogICAqIGNodW5rZWQgVHJhbnNmZXItRW5jb2RpbmcgYW5kIHRoZSBpbmNvbWluZyByZXF1ZXN0IGhhcyBgZ3ppcGAKICAgKiBhcyBhbiBhY2NlcHRlZCBlbmNvZGluZyBpbiB0aGUgQWNjZXB0LUVuY29kaW5nIGhlYWRlci4KICAgKgogICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAgKGNvbXByZXNzaW9uIGRpc2FibGVkKS4KICAgKiBUbyBlbmFibGUsIHNldCBgYXV0b0NvbXByZXNzYCB0byBgdHJ1ZWAuCiAgICovCiAgYm9vbCBhdXRvQ29tcHJlc3M7CgogIC8qKgogICAqIEdldHMgb3Igc2V0cyB0aGUgdGltZW91dCB1c2VkIGZvciBpZGxlIGtlZXAtYWxpdmUgY29ubmVjdGlvbnMuIElmIG5vCiAgICogZnVydGhlciByZXF1ZXN0IGlzIHNlZW4gd2l0aGluIFtpZGxlVGltZW91dF0gYWZ0ZXIgdGhlIHByZXZpb3VzIHJlcXVlc3Qgd2FzCiAgICogY29tcGxldGVkLCB0aGUgY29ubmVjdGlvbiBpcyBkcm9wcGVkLgogICAqCiAgICogRGVmYXVsdCBpcyAxMjAgc2Vjb25kcy4KICAgKgogICAqIE5vdGUgdGhhdCBpdCBtYXkgdGFrZSB1cCB0byBgMiAqIGlkbGVUaW1lb3V0YCBiZWZvcmUgYSBpZGxlIGNvbm5lY3Rpb24gaXMKICAgKiBhYm9ydGVkLgogICAqCiAgICogVG8gZGlzYWJsZSwgc2V0IFtpZGxlVGltZW91dF0gdG8gYG51bGxgLgogICAqLwogIER1cmF0aW9uIGlkbGVUaW1lb3V0OwoKICAvKioKICAgKiBTdGFydHMgbGlzdGVuaW5nIGZvciBIVFRQIHJlcXVlc3RzIG9uIHRoZSBzcGVjaWZpZWQgW2FkZHJlc3NdIGFuZAogICAqIFtwb3J0XS4KICAgKgogICAqIFRoZSBbYWRkcmVzc10gY2FuIGVpdGhlciBiZSBhIFtTdHJpbmddIG9yIGFuCiAgICogW0ludGVybmV0QWRkcmVzc10uIElmIFthZGRyZXNzXSBpcyBhIFtTdHJpbmddLCBbYmluZF0gd2lsbAogICAqIHBlcmZvcm0gYSBbSW50ZXJuZXRBZGRyZXNzLmxvb2t1cF0gYW5kIHVzZSB0aGUgZmlyc3QgdmFsdWUgaW4gdGhlCiAgICogbGlzdC4gVG8gbGlzdGVuIG9uIHRoZSBsb29wYmFjayBhZGFwdGVyLCB3aGljaCB3aWxsIGFsbG93IG9ubHkKICAgKiBpbmNvbWluZyBjb25uZWN0aW9ucyBmcm9tIHRoZSBsb2NhbCBob3N0LCB1c2UgdGhlIHZhbHVlCiAgICogW0ludGVybmV0QWRkcmVzcy5sb29wYmFja0lQdjRdIG9yCiAgICogW0ludGVybmV0QWRkcmVzcy5sb29wYmFja0lQdjZdLiBUbyBhbGxvdyBmb3IgaW5jb21pbmcKICAgKiBjb25uZWN0aW9uIGZyb20gdGhlIG5ldHdvcmsgdXNlIGVpdGhlciBvbmUgb2YgdGhlIHZhbHVlcwogICAqIFtJbnRlcm5ldEFkZHJlc3MuYW55SVB2NF0gb3IgW0ludGVybmV0QWRkcmVzcy5hbnlJUHY2XSB0bwogICAqIGJpbmQgdG8gYWxsIGludGVyZmFjZXMgb3IgdGhlIElQIGFkZHJlc3Mgb2YgYSBzcGVjaWZpYyBpbnRlcmZhY2UuCiAgICoKICAgKiBJZiBhbiBJUCB2ZXJzaW9uIDYgKElQdjYpIGFkZHJlc3MgaXMgdXNlZCwgYm90aCBJUCB2ZXJzaW9uIDYKICAgKiAoSVB2NikgYW5kIHZlcnNpb24gNCAoSVB2NCkgY29ubmVjdGlvbnMgd2lsbCBiZSBhY2NlcHRlZC4gVG8KICAgKiByZXN0cmljdCB0aGlzIHRvIHZlcnNpb24gNiAoSVB2Nikgb25seSwgdXNlIFt2Nk9ubHldIHRvIHNldAogICAqIHZlcnNpb24gNiBvbmx5LiBIb3dldmVyLCBpZiB0aGUgYWRkcmVzcyBpcwogICAqIFtJbnRlcm5ldEFkZHJlc3MubG9vcGJhY2tJUHY2XSwgb25seSBJUCB2ZXJzaW9uIDYgKElQdjYpIGNvbm5lY3Rpb25zCiAgICogd2lsbCBiZSBhY2NlcHRlZC4KICAgKgogICAqIElmIFtwb3J0XSBoYXMgdGhlIHZhbHVlIFs6MDpdIGFuIGVwaGVtZXJhbCBwb3J0IHdpbGwgYmUgY2hvc2VuIGJ5CiAgICogdGhlIHN5c3RlbS4gVGhlIGFjdHVhbCBwb3J0IHVzZWQgY2FuIGJlIHJldHJpZXZlZCB1c2luZyB0aGUKICAgKiBbcG9ydF0gZ2V0dGVyLgogICAqCiAgICogVGhlIG9wdGlvbmFsIGFyZ3VtZW50IFtiYWNrbG9nXSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBsaXN0ZW4KICAgKiBiYWNrbG9nIGZvciB0aGUgdW5kZXJseWluZyBPUyBsaXN0ZW4gc2V0dXAuIElmIFtiYWNrbG9nXSBoYXMgdGhlCiAgICogdmFsdWUgb2YgWzowOl0gKHRoZSBkZWZhdWx0KSBhIHJlYXNvbmFibGUgdmFsdWUgd2lsbCBiZSBjaG9zZW4gYnkKICAgKiB0aGUgc3lzdGVtLgogICAqCiAgICogVGhlIG9wdGlvbmFsIGFyZ3VtZW50IFtzaGFyZWRdIHNwZWNpZmllcyB3aGV0aGVyIGFkZGl0aW9uYWwgSHR0cFNlcnZlcgogICAqIG9iamVjdHMgY2FuIGJpbmQgdG8gdGhlIHNhbWUgY29tYmluYXRpb24gb2YgYGFkZHJlc3NgLCBgcG9ydGAgYW5kIGB2Nk9ubHlgLgogICAqIElmIGBzaGFyZWRgIGlzIGB0cnVlYCBhbmQgbW9yZSBgSHR0cFNlcnZlcmBzIGZyb20gdGhpcyBpc29sYXRlIG9yIG90aGVyCiAgICogaXNvbGF0ZXMgYXJlIGJvdW5kIHRvIHRoZSBwb3J0LCB0aGVuIHRoZSBpbmNvbWluZyBjb25uZWN0aW9ucyB3aWxsIGJlCiAgICogZGlzdHJpYnV0ZWQgYW1vbmcgYWxsIHRoZSBib3VuZCBgSHR0cFNlcnZlcmBzLiBDb25uZWN0aW9ucyBjYW4gYmUKICAgKiBkaXN0cmlidXRlZCBvdmVyIG11bHRpcGxlIGlzb2xhdGVzIHRoaXMgd2F5LgogICAqLwogIHN0YXRpYyBGdXR1cmU8SHR0cFNlcnZlcj4gYmluZChhZGRyZXNzLCBpbnQgcG9ydCwKICAgICAgICAgIHtpbnQgYmFja2xvZzogMCwgYm9vbCB2Nk9ubHk6IGZhbHNlLCBib29sIHNoYXJlZDogZmFsc2V9KSA9PgogICAgICBfSHR0cFNlcnZlci5iaW5kKGFkZHJlc3MsIHBvcnQsIGJhY2tsb2csIHY2T25seSwgc2hhcmVkKTsKCiAgLyoqCiAgICogVGhlIFthZGRyZXNzXSBjYW4gZWl0aGVyIGJlIGEgW1N0cmluZ10gb3IgYW4KICAgKiBbSW50ZXJuZXRBZGRyZXNzXS4gSWYgW2FkZHJlc3NdIGlzIGEgW1N0cmluZ10sIFtiaW5kXSB3aWxsCiAgICogcGVyZm9ybSBhIFtJbnRlcm5ldEFkZHJlc3MubG9va3VwXSBhbmQgdXNlIHRoZSBmaXJzdCB2YWx1ZSBpbiB0aGUKICAgKiBsaXN0LiBUbyBsaXN0ZW4gb24gdGhlIGxvb3BiYWNrIGFkYXB0ZXIsIHdoaWNoIHdpbGwgYWxsb3cgb25seQogICAqIGluY29taW5nIGNvbm5lY3Rpb25zIGZyb20gdGhlIGxvY2FsIGhvc3QsIHVzZSB0aGUgdmFsdWUKICAgKiBbSW50ZXJuZXRBZGRyZXNzLmxvb3BiYWNrSVB2NF0gb3IKICAgKiBbSW50ZXJuZXRBZGRyZXNzLmxvb3BiYWNrSVB2Nl0uIFRvIGFsbG93IGZvciBpbmNvbWluZwogICAqIGNvbm5lY3Rpb24gZnJvbSB0aGUgbmV0d29yayB1c2UgZWl0aGVyIG9uZSBvZiB0aGUgdmFsdWVzCiAgICogW0ludGVybmV0QWRkcmVzcy5hbnlJUHY0XSBvciBbSW50ZXJuZXRBZGRyZXNzLmFueUlQdjZdIHRvCiAgICogYmluZCB0byBhbGwgaW50ZXJmYWNlcyBvciB0aGUgSVAgYWRkcmVzcyBvZiBhIHNwZWNpZmljIGludGVyZmFjZS4KICAgKgogICAqIElmIGFuIElQIHZlcnNpb24gNiAoSVB2NikgYWRkcmVzcyBpcyB1c2VkLCBib3RoIElQIHZlcnNpb24gNgogICAqIChJUHY2KSBhbmQgdmVyc2lvbiA0IChJUHY0KSBjb25uZWN0aW9ucyB3aWxsIGJlIGFjY2VwdGVkLiBUbwogICAqIHJlc3RyaWN0IHRoaXMgdG8gdmVyc2lvbiA2IChJUHY2KSBvbmx5LCB1c2UgW3Y2T25seV0gdG8gc2V0CiAgICogdmVyc2lvbiA2IG9ubHkuCiAgICoKICAgKiBJZiBbcG9ydF0gaGFzIHRoZSB2YWx1ZSBbOjA6XSBhbiBlcGhlbWVyYWwgcG9ydCB3aWxsIGJlIGNob3NlbiBieQogICAqIHRoZSBzeXN0ZW0uIFRoZSBhY3R1YWwgcG9ydCB1c2VkIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgdGhlCiAgICogW3BvcnRdIGdldHRlci4KICAgKgogICAqIFRoZSBvcHRpb25hbCBhcmd1bWVudCBbYmFja2xvZ10gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbGlzdGVuCiAgICogYmFja2xvZyBmb3IgdGhlIHVuZGVybHlpbmcgT1MgbGlzdGVuIHNldHVwLiBJZiBbYmFja2xvZ10gaGFzIHRoZQogICAqIHZhbHVlIG9mIFs6MDpdICh0aGUgZGVmYXVsdCkgYSByZWFzb25hYmxlIHZhbHVlIHdpbGwgYmUgY2hvc2VuIGJ5CiAgICogdGhlIHN5c3RlbS4KICAgKgogICAqIElmIFtyZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGVdIGlzIHRydWUsIHRoZSBzZXJ2ZXIgd2lsbAogICAqIHJlcXVlc3QgY2xpZW50cyB0byBhdXRoZW50aWNhdGUgd2l0aCBhIGNsaWVudCBjZXJ0aWZpY2F0ZS4KICAgKiBUaGUgc2VydmVyIHdpbGwgYWR2ZXJ0aXNlIHRoZSBuYW1lcyBvZiB0cnVzdGVkIGlzc3VlcnMgb2YgY2xpZW50CiAgICogY2VydGlmaWNhdGVzLCBnZXR0aW5nIHRoZW0gZnJvbSBhIFtTZWN1cml0eUNvbnRleHRdLCB3aGVyZSB0aGV5IGhhdmUgYmVlbgogICAqIHNldCB1c2luZyBbU2VjdXJpdHlDb250ZXh0LnNldENsaWVudEF1dGhvcml0aWVzXS4KICAgKgogICAqIFRoZSBvcHRpb25hbCBhcmd1bWVudCBbc2hhcmVkXSBzcGVjaWZpZXMgd2hldGhlciBhZGRpdGlvbmFsIEh0dHBTZXJ2ZXIKICAgKiBvYmplY3RzIGNhbiBiaW5kIHRvIHRoZSBzYW1lIGNvbWJpbmF0aW9uIG9mIGBhZGRyZXNzYCwgYHBvcnRgIGFuZCBgdjZPbmx5YC4KICAgKiBJZiBgc2hhcmVkYCBpcyBgdHJ1ZWAgYW5kIG1vcmUgYEh0dHBTZXJ2ZXJgcyBmcm9tIHRoaXMgaXNvbGF0ZSBvciBvdGhlcgogICAqIGlzb2xhdGVzIGFyZSBib3VuZCB0byB0aGUgcG9ydCwgdGhlbiB0aGUgaW5jb21pbmcgY29ubmVjdGlvbnMgd2lsbCBiZQogICAqIGRpc3RyaWJ1dGVkIGFtb25nIGFsbCB0aGUgYm91bmQgYEh0dHBTZXJ2ZXJgcy4gQ29ubmVjdGlvbnMgY2FuIGJlCiAgICogZGlzdHJpYnV0ZWQgb3ZlciBtdWx0aXBsZSBpc29sYXRlcyB0aGlzIHdheS4KICAgKi8KCiAgc3RhdGljIEZ1dHVyZTxIdHRwU2VydmVyPiBiaW5kU2VjdXJlKAogICAgICAgICAgYWRkcmVzcywgaW50IHBvcnQsIFNlY3VyaXR5Q29udGV4dCBjb250ZXh0LAogICAgICAgICAge2ludCBiYWNrbG9nOiAwLAogICAgICAgICAgYm9vbCB2Nk9ubHk6IGZhbHNlLAogICAgICAgICAgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlLAogICAgICAgICAgYm9vbCBzaGFyZWQ6IGZhbHNlfSkgPT4KICAgICAgX0h0dHBTZXJ2ZXIuYmluZFNlY3VyZShhZGRyZXNzLCBwb3J0LCBjb250ZXh0LCBiYWNrbG9nLCB2Nk9ubHksCiAgICAgICAgICByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsIHNoYXJlZCk7CgogIC8qKgogICAqIEF0dGFjaGVzIHRoZSBIVFRQIHNlcnZlciB0byBhbiBleGlzdGluZyBbU2VydmVyU29ja2V0XS4gV2hlbiB0aGUKICAgKiBbSHR0cFNlcnZlcl0gaXMgY2xvc2VkLCB0aGUgW0h0dHBTZXJ2ZXJdIHdpbGwganVzdCBkZXRhY2ggaXRzZWxmLAogICAqIGNsb3NpbmcgY3VycmVudCBjb25uZWN0aW9ucyBidXQgbm90IGNsb3NpbmcgW3NlcnZlclNvY2tldF0uCiAgICovCiAgZmFjdG9yeSBIdHRwU2VydmVyLmxpc3Rlbk9uKFNlcnZlclNvY2tldCBzZXJ2ZXJTb2NrZXQpID0+CiAgICAgIG5ldyBfSHR0cFNlcnZlci5saXN0ZW5PbihzZXJ2ZXJTb2NrZXQpOwoKICAvKioKICAgKiBQZXJtYW5lbnRseSBzdG9wcyB0aGlzIFtIdHRwU2VydmVyXSBmcm9tIGxpc3RlbmluZyBmb3IgbmV3CiAgICogY29ubmVjdGlvbnMuICBUaGlzIGNsb3NlcyB0aGUgW1N0cmVhbV0gb2YgW0h0dHBSZXF1ZXN0XXMgd2l0aCBhCiAgICogZG9uZSBldmVudC4gVGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMgd2hlbiB0aGUgc2VydmVyIGlzCiAgICogc3RvcHBlZC4gRm9yIGEgc2VydmVyIHN0YXJ0ZWQgdXNpbmcgW2JpbmRdIG9yIFtiaW5kU2VjdXJlXSB0aGlzCiAgICogbWVhbnMgdGhhdCB0aGUgcG9ydCBsaXN0ZW5lZCBvbiBubyBsb25nZXIgaW4gdXNlLgogICAqCiAgICogSWYgW2ZvcmNlXSBpcyBgdHJ1ZWAsIGFjdGl2ZSBjb25uZWN0aW9ucyB3aWxsIGJlIGNsb3NlZCBpbW1lZGlhdGVseS4KICAgKi8KICBGdXR1cmUgY2xvc2Uoe2Jvb2wgZm9yY2U6IGZhbHNlfSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHBvcnQgdGhhdCB0aGUgc2VydmVyIGlzIGxpc3RlbmluZyBvbi4gVGhpcyBjYW4gYmUKICAgKiB1c2VkIHRvIGdldCB0aGUgYWN0dWFsIHBvcnQgdXNlZCB3aGVuIGEgdmFsdWUgb2YgMCBmb3IgWzpwb3J0Ol0gaXMKICAgKiBzcGVjaWZpZWQgaW4gdGhlIFtiaW5kXSBvciBbYmluZFNlY3VyZV0gY2FsbC4KICAgKi8KICBpbnQgZ2V0IHBvcnQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGFkZHJlc3MgdGhhdCB0aGUgc2VydmVyIGlzIGxpc3RlbmluZyBvbi4gVGhpcyBjYW4gYmUKICAgKiB1c2VkIHRvIGdldCB0aGUgYWN0dWFsIGFkZHJlc3MgdXNlZCwgd2hlbiB0aGUgYWRkcmVzcyBpcyBmZXRjaGVkIGJ5CiAgICogYSBsb29rdXAgZnJvbSBhIGhvc3RuYW1lLgogICAqLwogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzczsKCiAgLyoqCiAgICogU2V0cyB0aGUgdGltZW91dCwgaW4gc2Vjb25kcywgZm9yIHNlc3Npb25zIG9mIHRoaXMgW0h0dHBTZXJ2ZXJdLgogICAqIFRoZSBkZWZhdWx0IHRpbWVvdXQgaXMgMjAgbWludXRlcy4KICAgKi8KICBzZXQgc2Vzc2lvblRpbWVvdXQoaW50IHRpbWVvdXQpOwoKICAvKioKICAgKiBSZXR1cm5zIGFuIFtIdHRwQ29ubmVjdGlvbnNJbmZvXSBvYmplY3Qgc3VtbWFyaXppbmcgdGhlIG51bWJlciBvZgogICAqIGN1cnJlbnQgY29ubmVjdGlvbnMgaGFuZGxlZCBieSB0aGUgc2VydmVyLgogICAqLwogIEh0dHBDb25uZWN0aW9uc0luZm8gY29ubmVjdGlvbnNJbmZvKCk7Cn0KCi8qKgogKiBTdW1tYXJ5IHN0YXRpc3RpY3MgYWJvdXQgYW4gW0h0dHBTZXJ2ZXJdcyBjdXJyZW50IHNvY2tldCBjb25uZWN0aW9ucy4KICovCmNsYXNzIEh0dHBDb25uZWN0aW9uc0luZm8gewogIC8qKgogICAqIFRvdGFsIG51bWJlciBvZiBzb2NrZXQgY29ubmVjdGlvbnMuCiAgICovCiAgaW50IHRvdGFsID0gMDsKCiAgLyoqCiAgICogTnVtYmVyIG9mIGFjdGl2ZSBjb25uZWN0aW9ucyB3aGVyZSBhY3R1YWwgcmVxdWVzdC9yZXNwb25zZQogICAqIHByb2Nlc3NpbmcgaXMgYWN0aXZlLgogICAqLwogIGludCBhY3RpdmUgPSAwOwoKICAvKioKICAgKiBOdW1iZXIgb2YgaWRsZSBjb25uZWN0aW9ucyBoZWxkIGJ5IGNsaWVudHMgYXMgcGVyc2lzdGVudCBjb25uZWN0aW9ucy4KICAgKi8KICBpbnQgaWRsZSA9IDA7CgogIC8qKgogICAqIE51bWJlciBvZiBjb25uZWN0aW9ucyB3aGljaCBhcmUgcHJlcGFyaW5nIHRvIGNsb3NlLiBOb3RlOiBUaGVzZQogICAqIGNvbm5lY3Rpb25zIGFyZSBhbHNvIHBhcnQgb2YgdGhlIFs6YWN0aXZlOl0gY291bnQgYXMgdGhleSBtaWdodAogICAqIHN0aWxsIGJlIHNlbmRpbmcgZGF0YSB0byB0aGUgY2xpZW50IGJlZm9yZSBmaW5hbGx5IGNsb3NpbmcuCiAgICovCiAgaW50IGNsb3NpbmcgPSAwOwp9CgovKioKICogSGVhZGVycyBmb3IgSFRUUCByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzLgogKgogKiBJbiBzb21lIHNpdHVhdGlvbnMsIGhlYWRlcnMgYXJlIGltbXV0YWJsZToKICoKICogKiBIdHRwUmVxdWVzdCBhbmQgSHR0cENsaWVudFJlc3BvbnNlIGFsd2F5cyBoYXZlIGltbXV0YWJsZSBoZWFkZXJzLgogKgogKiAqIEh0dHBSZXNwb25zZSBhbmQgSHR0cENsaWVudFJlcXVlc3QgaGF2ZSBpbW11dGFibGUgaGVhZGVycwogKiAgIGZyb20gdGhlIG1vbWVudCB0aGUgYm9keSBpcyB3cml0dGVuIHRvLgogKgogKiBJbiB0aGVzZSBzaXR1YXRpb25zLCB0aGUgbXV0YXRpbmcgbWV0aG9kcyB0aHJvdyBleGNlcHRpb25zLgogKgogKiBGb3IgYWxsIG9wZXJhdGlvbnMgb24gSFRUUCBoZWFkZXJzIHRoZSBoZWFkZXIgbmFtZSBpcwogKiBjYXNlLWluc2Vuc2l0aXZlLgogKgogKiBUbyBzZXQgdGhlIHZhbHVlIG9mIGEgaGVhZGVyIHVzZSB0aGUgYHNldCgpYCBtZXRob2Q6CiAqCiAqICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KEh0dHBIZWFkZXJzLmNhY2hlQ29udHJvbEhlYWRlciwKICogICAgICAgICAgICAgICAgICAgICAgICAgJ21heC1hZ2U9MzYwMCwgbXVzdC1yZXZhbGlkYXRlJyk7CiAqCiAqIFRvIHJldHJpZXZlIHRoZSB2YWx1ZSBvZiBhIGhlYWRlciB1c2UgdGhlIGB2YWx1ZSgpYCBtZXRob2Q6CiAqCiAqICAgICBwcmludChyZXF1ZXN0LmhlYWRlcnMudmFsdWUoSHR0cEhlYWRlcnMudXNlckFnZW50SGVhZGVyKSk7CiAqCiAqIEFuIEh0dHBIZWFkZXJzIG9iamVjdCBob2xkcyBhIGxpc3Qgb2YgdmFsdWVzIGZvciBlYWNoIG5hbWUKICogYXMgdGhlIHN0YW5kYXJkIGFsbG93cy4gSW4gbW9zdCBjYXNlcyBhIG5hbWUgaG9sZHMgb25seSBhIHNpbmdsZSB2YWx1ZSwKICogVGhlIG1vc3QgY29tbW9uIG1vZGUgb2Ygb3BlcmF0aW9uIGlzIHRvIHVzZSBgc2V0KClgIGZvciBzZXR0aW5nIGEgdmFsdWUsCiAqIGFuZCBgdmFsdWUoKWAgZm9yIHJldHJpZXZpbmcgYSB2YWx1ZS4KICovCmFic3RyYWN0IGNsYXNzIEh0dHBIZWFkZXJzIHsKICBzdGF0aWMgY29uc3QgYWNjZXB0SGVhZGVyID0gImFjY2VwdCI7CiAgc3RhdGljIGNvbnN0IGFjY2VwdENoYXJzZXRIZWFkZXIgPSAiYWNjZXB0LWNoYXJzZXQiOwogIHN0YXRpYyBjb25zdCBhY2NlcHRFbmNvZGluZ0hlYWRlciA9ICJhY2NlcHQtZW5jb2RpbmciOwogIHN0YXRpYyBjb25zdCBhY2NlcHRMYW5ndWFnZUhlYWRlciA9ICJhY2NlcHQtbGFuZ3VhZ2UiOwogIHN0YXRpYyBjb25zdCBhY2NlcHRSYW5nZXNIZWFkZXIgPSAiYWNjZXB0LXJhbmdlcyI7CiAgc3RhdGljIGNvbnN0IGFnZUhlYWRlciA9ICJhZ2UiOwogIHN0YXRpYyBjb25zdCBhbGxvd0hlYWRlciA9ICJhbGxvdyI7CiAgc3RhdGljIGNvbnN0IGF1dGhvcml6YXRpb25IZWFkZXIgPSAiYXV0aG9yaXphdGlvbiI7CiAgc3RhdGljIGNvbnN0IGNhY2hlQ29udHJvbEhlYWRlciA9ICJjYWNoZS1jb250cm9sIjsKICBzdGF0aWMgY29uc3QgY29ubmVjdGlvbkhlYWRlciA9ICJjb25uZWN0aW9uIjsKICBzdGF0aWMgY29uc3QgY29udGVudEVuY29kaW5nSGVhZGVyID0gImNvbnRlbnQtZW5jb2RpbmciOwogIHN0YXRpYyBjb25zdCBjb250ZW50TGFuZ3VhZ2VIZWFkZXIgPSAiY29udGVudC1sYW5ndWFnZSI7CiAgc3RhdGljIGNvbnN0IGNvbnRlbnRMZW5ndGhIZWFkZXIgPSAiY29udGVudC1sZW5ndGgiOwogIHN0YXRpYyBjb25zdCBjb250ZW50TG9jYXRpb25IZWFkZXIgPSAiY29udGVudC1sb2NhdGlvbiI7CiAgc3RhdGljIGNvbnN0IGNvbnRlbnRNRDVIZWFkZXIgPSAiY29udGVudC1tZDUiOwogIHN0YXRpYyBjb25zdCBjb250ZW50UmFuZ2VIZWFkZXIgPSAiY29udGVudC1yYW5nZSI7CiAgc3RhdGljIGNvbnN0IGNvbnRlbnRUeXBlSGVhZGVyID0gImNvbnRlbnQtdHlwZSI7CiAgc3RhdGljIGNvbnN0IGRhdGVIZWFkZXIgPSAiZGF0ZSI7CiAgc3RhdGljIGNvbnN0IGV0YWdIZWFkZXIgPSAiZXRhZyI7CiAgc3RhdGljIGNvbnN0IGV4cGVjdEhlYWRlciA9ICJleHBlY3QiOwogIHN0YXRpYyBjb25zdCBleHBpcmVzSGVhZGVyID0gImV4cGlyZXMiOwogIHN0YXRpYyBjb25zdCBmcm9tSGVhZGVyID0gImZyb20iOwogIHN0YXRpYyBjb25zdCBob3N0SGVhZGVyID0gImhvc3QiOwogIHN0YXRpYyBjb25zdCBpZk1hdGNoSGVhZGVyID0gImlmLW1hdGNoIjsKICBzdGF0aWMgY29uc3QgaWZNb2RpZmllZFNpbmNlSGVhZGVyID0gImlmLW1vZGlmaWVkLXNpbmNlIjsKICBzdGF0aWMgY29uc3QgaWZOb25lTWF0Y2hIZWFkZXIgPSAiaWYtbm9uZS1tYXRjaCI7CiAgc3RhdGljIGNvbnN0IGlmUmFuZ2VIZWFkZXIgPSAiaWYtcmFuZ2UiOwogIHN0YXRpYyBjb25zdCBpZlVubW9kaWZpZWRTaW5jZUhlYWRlciA9ICJpZi11bm1vZGlmaWVkLXNpbmNlIjsKICBzdGF0aWMgY29uc3QgbGFzdE1vZGlmaWVkSGVhZGVyID0gImxhc3QtbW9kaWZpZWQiOwogIHN0YXRpYyBjb25zdCBsb2NhdGlvbkhlYWRlciA9ICJsb2NhdGlvbiI7CiAgc3RhdGljIGNvbnN0IG1heEZvcndhcmRzSGVhZGVyID0gIm1heC1mb3J3YXJkcyI7CiAgc3RhdGljIGNvbnN0IHByYWdtYUhlYWRlciA9ICJwcmFnbWEiOwogIHN0YXRpYyBjb25zdCBwcm94eUF1dGhlbnRpY2F0ZUhlYWRlciA9ICJwcm94eS1hdXRoZW50aWNhdGUiOwogIHN0YXRpYyBjb25zdCBwcm94eUF1dGhvcml6YXRpb25IZWFkZXIgPSAicHJveHktYXV0aG9yaXphdGlvbiI7CiAgc3RhdGljIGNvbnN0IHJhbmdlSGVhZGVyID0gInJhbmdlIjsKICBzdGF0aWMgY29uc3QgcmVmZXJlckhlYWRlciA9ICJyZWZlcmVyIjsKICBzdGF0aWMgY29uc3QgcmV0cnlBZnRlckhlYWRlciA9ICJyZXRyeS1hZnRlciI7CiAgc3RhdGljIGNvbnN0IHNlcnZlckhlYWRlciA9ICJzZXJ2ZXIiOwogIHN0YXRpYyBjb25zdCB0ZUhlYWRlciA9ICJ0ZSI7CiAgc3RhdGljIGNvbnN0IHRyYWlsZXJIZWFkZXIgPSAidHJhaWxlciI7CiAgc3RhdGljIGNvbnN0IHRyYW5zZmVyRW5jb2RpbmdIZWFkZXIgPSAidHJhbnNmZXItZW5jb2RpbmciOwogIHN0YXRpYyBjb25zdCB1cGdyYWRlSGVhZGVyID0gInVwZ3JhZGUiOwogIHN0YXRpYyBjb25zdCB1c2VyQWdlbnRIZWFkZXIgPSAidXNlci1hZ2VudCI7CiAgc3RhdGljIGNvbnN0IHZhcnlIZWFkZXIgPSAidmFyeSI7CiAgc3RhdGljIGNvbnN0IHZpYUhlYWRlciA9ICJ2aWEiOwogIHN0YXRpYyBjb25zdCB3YXJuaW5nSGVhZGVyID0gIndhcm5pbmciOwogIHN0YXRpYyBjb25zdCB3d3dBdXRoZW50aWNhdGVIZWFkZXIgPSAid3d3LWF1dGhlbnRpY2F0ZSI7CgogIEBEZXByZWNhdGVkKCJVc2UgYWNjZXB0SGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBBQ0NFUFQgPSBhY2NlcHRIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBhY2NlcHRDaGFyc2V0SGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBBQ0NFUFRfQ0hBUlNFVCA9IGFjY2VwdENoYXJzZXRIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBhY2NlcHRFbmNvZGluZ0hlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQUNDRVBUX0VOQ09ESU5HID0gYWNjZXB0RW5jb2RpbmdIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBhY2NlcHRMYW5ndWFnZUhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQUNDRVBUX0xBTkdVQUdFID0gYWNjZXB0TGFuZ3VhZ2VIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBhY2NlcHRSYW5nZXNIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEFDQ0VQVF9SQU5HRVMgPSBhY2NlcHRSYW5nZXNIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBhZ2VIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEFHRSA9IGFnZUhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGFsbG93SGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBBTExPVyA9IGFsbG93SGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgYXV0aG9yaXphdGlvbkhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQVVUSE9SSVpBVElPTiA9IGF1dGhvcml6YXRpb25IZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBjYWNoZUNvbnRyb2xIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IENBQ0hFX0NPTlRST0wgPSBjYWNoZUNvbnRyb2xIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb25uZWN0aW9uSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBDT05ORUNUSU9OID0gY29ubmVjdGlvbkhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGNvbnRlbnRFbmNvZGluZ0hlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQ09OVEVOVF9FTkNPRElORyA9IGNvbnRlbnRFbmNvZGluZ0hlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGNvbnRlbnRMYW5ndWFnZUhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQ09OVEVOVF9MQU5HVUFHRSA9IGNvbnRlbnRMYW5ndWFnZUhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGNvbnRlbnRMZW5ndGhIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IENPTlRFTlRfTEVOR1RIID0gY29udGVudExlbmd0aEhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGNvbnRlbnRMb2NhdGlvbkhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQ09OVEVOVF9MT0NBVElPTiA9IGNvbnRlbnRMb2NhdGlvbkhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGNvbnRlbnRNRDVIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IENPTlRFTlRfTUQ1ID0gY29udGVudE1ENUhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGNvbnRlbnRSYW5nZUhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQ09OVEVOVF9SQU5HRSA9IGNvbnRlbnRSYW5nZUhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGNvbnRlbnRUeXBlSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBDT05URU5UX1RZUEUgPSBjb250ZW50VHlwZUhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGRhdGVIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IERBVEUgPSBkYXRlSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgZXRhZ0hlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgRVRBRyA9IGV0YWdIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBleHBlY3RIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEVYUEVDVCA9IGV4cGVjdEhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGV4cGlyZXNIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEVYUElSRVMgPSBleHBpcmVzSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgZnJvbUhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgRlJPTSA9IGZyb21IZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBob3N0SGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBIT1NUID0gaG9zdEhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGlmTWF0Y2hIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IElGX01BVENIID0gaWZNYXRjaEhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGlmTW9kaWZpZWRTaW5jZUhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgSUZfTU9ESUZJRURfU0lOQ0UgPSBpZk1vZGlmaWVkU2luY2VIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBpZk5vbmVNYXRjaEhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgSUZfTk9ORV9NQVRDSCA9IGlmTm9uZU1hdGNoSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgaWZSYW5nZUhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgSUZfUkFOR0UgPSBpZlJhbmdlSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgaWZVbm1vZGlmaWVkU2luY2VIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IElGX1VOTU9ESUZJRURfU0lOQ0UgPSBpZlVubW9kaWZpZWRTaW5jZUhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGxhc3RNb2RpZmllZEhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgTEFTVF9NT0RJRklFRCA9IGxhc3RNb2RpZmllZEhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGxvY2F0aW9uSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBMT0NBVElPTiA9IGxvY2F0aW9uSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgbWF4Rm9yd2FyZHNIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IE1BWF9GT1JXQVJEUyA9IG1heEZvcndhcmRzSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgcHJhZ21hSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQUkFHTUEgPSBwcmFnbWFIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBwcm94eUF1dGhlbnRpY2F0ZUhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUFJPWFlfQVVUSEVOVElDQVRFID0gcHJveHlBdXRoZW50aWNhdGVIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBwcm94eUF1dGhvcml6YXRpb25IZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFBST1hZX0FVVEhPUklaQVRJT04gPSBwcm94eUF1dGhvcml6YXRpb25IZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSByYW5nZUhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUkFOR0UgPSByYW5nZUhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIHJlZmVyZXJIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFJFRkVSRVIgPSByZWZlcmVySGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgcmV0cnlBZnRlckhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUkVUUllfQUZURVIgPSByZXRyeUFmdGVySGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2Ugc2VydmVySGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBTRVJWRVIgPSBzZXJ2ZXJIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSB0ZUhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgVEUgPSB0ZUhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIHRyYWlsZXJIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFRSQUlMRVIgPSB0cmFpbGVySGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgdHJhbnNmZXJFbmNvZGluZ0hlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgVFJBTlNGRVJfRU5DT0RJTkcgPSB0cmFuc2ZlckVuY29kaW5nSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgdXBncmFkZUhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgVVBHUkFERSA9IHVwZ3JhZGVIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSB1c2VyQWdlbnRIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFVTRVJfQUdFTlQgPSB1c2VyQWdlbnRIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSB2YXJ5SGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBWQVJZID0gdmFyeUhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIHZpYUhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgVklBID0gdmlhSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2Ugd2FybmluZ0hlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgV0FSTklORyA9IHdhcm5pbmdIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSB3d3dBdXRoZW50aWNhdGVIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFdXV19BVVRIRU5USUNBVEUgPSB3d3dBdXRoZW50aWNhdGVIZWFkZXI7CgogIC8vIENvb2tpZSBoZWFkZXJzIGZyb20gUkZDIDYyNjUuCiAgc3RhdGljIGNvbnN0IGNvb2tpZUhlYWRlciA9ICJjb29raWUiOwogIHN0YXRpYyBjb25zdCBzZXRDb29raWVIZWFkZXIgPSAic2V0LWNvb2tpZSI7CgogIEBEZXByZWNhdGVkKCJVc2UgY29va2llSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBDT09LSUUgPSBjb29raWVIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBzZXRDb29raWVIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFNFVF9DT09LSUUgPSBzZXRDb29raWVIZWFkZXI7CgogIHN0YXRpYyBjb25zdCBnZW5lcmFsSGVhZGVycyA9IGNvbnN0IFsKICAgIGNhY2hlQ29udHJvbEhlYWRlciwKICAgIGNvbm5lY3Rpb25IZWFkZXIsCiAgICBkYXRlSGVhZGVyLAogICAgcHJhZ21hSGVhZGVyLAogICAgdHJhaWxlckhlYWRlciwKICAgIHRyYW5zZmVyRW5jb2RpbmdIZWFkZXIsCiAgICB1cGdyYWRlSGVhZGVyLAogICAgdmlhSGVhZGVyLAogICAgd2FybmluZ0hlYWRlcgogIF07CgogIEBEZXByZWNhdGVkKCJVc2UgZ2VuZXJhbEhlYWRlcnMgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEdFTkVSQUxfSEVBREVSUyA9IGdlbmVyYWxIZWFkZXJzOwoKICBzdGF0aWMgY29uc3QgZW50aXR5SGVhZGVycyA9IGNvbnN0IFsKICAgIGFsbG93SGVhZGVyLAogICAgY29udGVudEVuY29kaW5nSGVhZGVyLAogICAgY29udGVudExhbmd1YWdlSGVhZGVyLAogICAgY29udGVudExlbmd0aEhlYWRlciwKICAgIGNvbnRlbnRMb2NhdGlvbkhlYWRlciwKICAgIGNvbnRlbnRNRDVIZWFkZXIsCiAgICBjb250ZW50UmFuZ2VIZWFkZXIsCiAgICBjb250ZW50VHlwZUhlYWRlciwKICAgIGV4cGlyZXNIZWFkZXIsCiAgICBsYXN0TW9kaWZpZWRIZWFkZXIKICBdOwoKICBARGVwcmVjYXRlZCgiVXNlIGVudGl0eUhlYWRlcnMgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEVOVElUWV9IRUFERVJTID0gZW50aXR5SGVhZGVyczsKCiAgc3RhdGljIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IGNvbnN0IFsKICAgIGFjY2VwdFJhbmdlc0hlYWRlciwKICAgIGFnZUhlYWRlciwKICAgIGV0YWdIZWFkZXIsCiAgICBsb2NhdGlvbkhlYWRlciwKICAgIHByb3h5QXV0aGVudGljYXRlSGVhZGVyLAogICAgcmV0cnlBZnRlckhlYWRlciwKICAgIHNlcnZlckhlYWRlciwKICAgIHZhcnlIZWFkZXIsCiAgICB3d3dBdXRoZW50aWNhdGVIZWFkZXIKICBdOwoKICBARGVwcmVjYXRlZCgiVXNlIHJlc3BvbnNlSGVhZGVycyBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUkVTUE9OU0VfSEVBREVSUyA9IHJlc3BvbnNlSGVhZGVyczsKCiAgc3RhdGljIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gY29uc3QgWwogICAgYWNjZXB0SGVhZGVyLAogICAgYWNjZXB0Q2hhcnNldEhlYWRlciwKICAgIGFjY2VwdEVuY29kaW5nSGVhZGVyLAogICAgYWNjZXB0TGFuZ3VhZ2VIZWFkZXIsCiAgICBhdXRob3JpemF0aW9uSGVhZGVyLAogICAgZXhwZWN0SGVhZGVyLAogICAgZnJvbUhlYWRlciwKICAgIGhvc3RIZWFkZXIsCiAgICBpZk1hdGNoSGVhZGVyLAogICAgaWZNb2RpZmllZFNpbmNlSGVhZGVyLAogICAgaWZOb25lTWF0Y2hIZWFkZXIsCiAgICBpZlJhbmdlSGVhZGVyLAogICAgaWZVbm1vZGlmaWVkU2luY2VIZWFkZXIsCiAgICBtYXhGb3J3YXJkc0hlYWRlciwKICAgIHByb3h5QXV0aG9yaXphdGlvbkhlYWRlciwKICAgIHJhbmdlSGVhZGVyLAogICAgcmVmZXJlckhlYWRlciwKICAgIHRlSGVhZGVyLAogICAgdXNlckFnZW50SGVhZGVyCiAgXTsKCiAgQERlcHJlY2F0ZWQoIlVzZSByZXF1ZXN0SGVhZGVycyBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUkVRVUVTVF9IRUFERVJTID0gcmVxdWVzdEhlYWRlcnM7CgogIC8qKgogICAqIEdldHMgYW5kIHNldHMgdGhlIGRhdGUuIFRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IHdpbGwKICAgKiByZWZsZWN0IHRoZSAnZGF0ZScgaGVhZGVyLgogICAqLwogIERhdGVUaW1lIGRhdGU7CgogIC8qKgogICAqIEdldHMgYW5kIHNldHMgdGhlIGV4cGlyeSBkYXRlLiBUaGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSB3aWxsCiAgICogcmVmbGVjdCB0aGUgJ2V4cGlyZXMnIGhlYWRlci4KICAgKi8KICBEYXRlVGltZSBleHBpcmVzOwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSAiaWYtbW9kaWZpZWQtc2luY2UiIGRhdGUuIFRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IHdpbGwKICAgKiByZWZsZWN0IHRoZSAiaWYtbW9kaWZpZWQtc2luY2UiIGhlYWRlci4KICAgKi8KICBEYXRlVGltZSBpZk1vZGlmaWVkU2luY2U7CgogIC8qKgogICAqIEdldHMgYW5kIHNldHMgdGhlIGhvc3QgcGFydCBvZiB0aGUgJ2hvc3QnIGhlYWRlciBmb3IgdGhlCiAgICogY29ubmVjdGlvbi4KICAgKi8KICBTdHJpbmcgaG9zdDsKCiAgLyoqCiAgICogR2V0cyBhbmQgc2V0cyB0aGUgcG9ydCBwYXJ0IG9mIHRoZSAnaG9zdCcgaGVhZGVyIGZvciB0aGUKICAgKiBjb25uZWN0aW9uLgogICAqLwogIGludCBwb3J0OwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBjb250ZW50IHR5cGUuIE5vdGUgdGhhdCB0aGUgY29udGVudCB0eXBlIGluIHRoZQogICAqIGhlYWRlciB3aWxsIG9ubHkgYmUgdXBkYXRlZCBpZiB0aGlzIGZpZWxkIGlzIHNldAogICAqIGRpcmVjdGx5LiBNdXRhdGluZyB0aGUgcmV0dXJuZWQgY3VycmVudCB2YWx1ZSB3aWxsIGhhdmUgbm8KICAgKiBlZmZlY3QuCiAgICovCiAgQ29udGVudFR5cGUgY29udGVudFR5cGU7CgogIC8qKgogICAqIEdldHMgYW5kIHNldHMgdGhlIGNvbnRlbnQgbGVuZ3RoIGhlYWRlciB2YWx1ZS4KICAgKi8KICBpbnQgY29udGVudExlbmd0aDsKCiAgLyoqCiAgICogR2V0cyBhbmQgc2V0cyB0aGUgcGVyc2lzdGVudCBjb25uZWN0aW9uIGhlYWRlciB2YWx1ZS4KICAgKi8KICBib29sIHBlcnNpc3RlbnRDb25uZWN0aW9uOwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBjaHVua2VkIHRyYW5zZmVyIGVuY29kaW5nIGhlYWRlciB2YWx1ZS4KICAgKi8KICBib29sIGNodW5rZWRUcmFuc2ZlckVuY29kaW5nOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIHZhbHVlcyBmb3IgdGhlIGhlYWRlciBuYW1lZCBbbmFtZV0uIElmIHRoZXJlCiAgICogaXMgbm8gaGVhZGVyIHdpdGggdGhlIHByb3ZpZGVkIG5hbWUsIFs6bnVsbDpdIHdpbGwgYmUgcmV0dXJuZWQuCiAgICovCiAgTGlzdDxTdHJpbmc+IG9wZXJhdG9yIFtdKFN0cmluZyBuYW1lKTsKCiAgLyoqCiAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciB0aGUgdmFsdWUgZm9yIGEgc2luZ2xlIHZhbHVlZCBoZWFkZXIuIElmCiAgICogdGhlcmUgaXMgbm8gaGVhZGVyIHdpdGggdGhlIHByb3ZpZGVkIG5hbWUsIFs6bnVsbDpdIHdpbGwgYmUKICAgKiByZXR1cm5lZC4gSWYgdGhlIGhlYWRlciBoYXMgbW9yZSB0aGFuIG9uZSB2YWx1ZSBhbiBleGNlcHRpb24gaXMKICAgKiB0aHJvd24uCiAgICovCiAgU3RyaW5nIHZhbHVlKFN0cmluZyBuYW1lKTsKCiAgLyoqCiAgICogQWRkcyBhIGhlYWRlciB2YWx1ZS4gVGhlIGhlYWRlciBuYW1lZCBbbmFtZV0gd2lsbCBoYXZlIHRoZSB2YWx1ZQogICAqIFt2YWx1ZV0gYWRkZWQgdG8gaXRzIGxpc3Qgb2YgdmFsdWVzLiBTb21lIGhlYWRlcnMgYXJlIHNpbmdsZQogICAqIHZhbHVlZCwgYW5kIGZvciB0aGVzZSBhZGRpbmcgYSB2YWx1ZSB3aWxsIHJlcGxhY2UgdGhlIHByZXZpb3VzCiAgICogdmFsdWUuIElmIHRoZSB2YWx1ZSBpcyBvZiB0eXBlIERhdGVUaW1lIGEgSFRUUCBkYXRlIGZvcm1hdCB3aWxsIGJlCiAgICogYXBwbGllZC4gSWYgdGhlIHZhbHVlIGlzIGEgWzpMaXN0Ol0gZWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0IHdpbGwKICAgKiBiZSBhZGRlZCBzZXBhcmF0ZWx5LiBGb3IgYWxsIG90aGVyIHR5cGVzIHRoZSBkZWZhdWx0IFs6dG9TdHJpbmc6XQogICAqIG1ldGhvZCB3aWxsIGJlIHVzZWQuCiAgICovCiAgdm9pZCBhZGQoU3RyaW5nIG5hbWUsIE9iamVjdCB2YWx1ZSk7CgogIC8qKgogICAqIFNldHMgYSBoZWFkZXIuIFRoZSBoZWFkZXIgbmFtZWQgW25hbWVdIHdpbGwgaGF2ZSBhbGwgaXRzIHZhbHVlcwogICAqIGNsZWFyZWQgYmVmb3JlIHRoZSB2YWx1ZSBbdmFsdWVdIGlzIGFkZGVkIGFzIGl0cyB2YWx1ZS4KICAgKi8KICB2b2lkIHNldChTdHJpbmcgbmFtZSwgT2JqZWN0IHZhbHVlKTsKCiAgLyoqCiAgICogUmVtb3ZlcyBhIHNwZWNpZmljIHZhbHVlIGZvciBhIGhlYWRlciBuYW1lLiBTb21lIGhlYWRlcnMgaGF2ZQogICAqIHN5c3RlbSBzdXBwbGllZCB2YWx1ZXMgYW5kIGZvciB0aGVzZSB0aGUgc3lzdGVtIHN1cHBsaWVkIHZhbHVlcwogICAqIHdpbGwgc3RpbGwgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24gb2YgdmFsdWVzIGZvciB0aGUgaGVhZGVyLgogICAqLwogIHZvaWQgcmVtb3ZlKFN0cmluZyBuYW1lLCBPYmplY3QgdmFsdWUpOwoKICAvKioKICAgKiBSZW1vdmVzIGFsbCB2YWx1ZXMgZm9yIHRoZSBzcGVjaWZpZWQgaGVhZGVyIG5hbWUuIFNvbWUgaGVhZGVycwogICAqIGhhdmUgc3lzdGVtIHN1cHBsaWVkIHZhbHVlcyBhbmQgZm9yIHRoZXNlIHRoZSBzeXN0ZW0gc3VwcGxpZWQKICAgKiB2YWx1ZXMgd2lsbCBzdGlsbCBiZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbiBvZiB2YWx1ZXMgZm9yIHRoZQogICAqIGhlYWRlci4KICAgKi8KICB2b2lkIHJlbW92ZUFsbChTdHJpbmcgbmFtZSk7CgogIC8qKgogICAqIEVudW1lcmF0ZXMgdGhlIGhlYWRlcnMsIGFwcGx5aW5nIHRoZSBmdW5jdGlvbiBbZl0gdG8gZWFjaAogICAqIGhlYWRlci4gVGhlIGhlYWRlciBuYW1lIHBhc3NlZCBpbiBbOm5hbWU6XSB3aWxsIGJlIGFsbCBsb3dlcgogICAqIGNhc2UuCiAgICovCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihTdHJpbmcgbmFtZSwgTGlzdDxTdHJpbmc+IHZhbHVlcykpOwoKICAvKioKICAgKiBEaXNhYmxlcyBmb2xkaW5nIGZvciB0aGUgaGVhZGVyIG5hbWVkIFtuYW1lXSB3aGVuIHNlbmRpbmcgdGhlIEhUVFAKICAgKiBoZWFkZXIuIEJ5IGRlZmF1bHQsIG11bHRpcGxlIGhlYWRlciB2YWx1ZXMgYXJlIGZvbGRlZCBpbnRvIGEKICAgKiBzaW5nbGUgaGVhZGVyIGxpbmUgYnkgc2VwYXJhdGluZyB0aGUgdmFsdWVzIHdpdGggY29tbWFzLiBUaGUKICAgKiAnc2V0LWNvb2tpZScgaGVhZGVyIGhhcyBmb2xkaW5nIGRpc2FibGVkIGJ5IGRlZmF1bHQuCiAgICovCiAgdm9pZCBub0ZvbGRpbmcoU3RyaW5nIG5hbWUpOwoKICAvKioKICAgKiBSZW1vdmUgYWxsIGhlYWRlcnMuIFNvbWUgaGVhZGVycyBoYXZlIHN5c3RlbSBzdXBwbGllZCB2YWx1ZXMgYW5kCiAgICogZm9yIHRoZXNlIHRoZSBzeXN0ZW0gc3VwcGxpZWQgdmFsdWVzIHdpbGwgc3RpbGwgYmUgYWRkZWQgdG8gdGhlCiAgICogY29sbGVjdGlvbiBvZiB2YWx1ZXMgZm9yIHRoZSBoZWFkZXIuCiAgICovCiAgdm9pZCBjbGVhcigpOwp9CgovKioKICogUmVwcmVzZW50YXRpb24gb2YgYSBoZWFkZXIgdmFsdWUgaW4gdGhlIGZvcm06CiAqCiAqICAgWzp2YWx1ZTsgcGFyYW1ldGVyMT12YWx1ZTE7IHBhcmFtZXRlcjI9dmFsdWUyOl0KICoKICogW0hlYWRlclZhbHVlXSBjYW4gYmUgdXNlZCB0byBjb252ZW5pZW50bHkgYnVpbGQgYW5kIHBhcnNlIGhlYWRlcgogKiB2YWx1ZXMgb24gdGhpcyBmb3JtLgogKgogKiBUbyBidWlsZCBhbiBbOmFjY2VwdHM6XSBoZWFkZXIgd2l0aCB0aGUgdmFsdWUKICoKICogICAgIHRleHQvcGxhaW47IHE9MC4zLCB0ZXh0L2h0bWwKICoKICogdXNlIGNvZGUgbGlrZSB0aGlzOgogKgogKiAgICAgSHR0cENsaWVudFJlcXVlc3QgcmVxdWVzdCA9IC4uLjsKICogICAgIHZhciB2ID0gbmV3IEhlYWRlclZhbHVlKCJ0ZXh0L3BsYWluIiwgeyJxIjogIjAuMyJ9KTsKICogICAgIHJlcXVlc3QuaGVhZGVycy5hZGQoSHR0cEhlYWRlcnMuYWNjZXB0SGVhZGVyLCB2KTsKICogICAgIHJlcXVlc3QuaGVhZGVycy5hZGQoSHR0cEhlYWRlcnMuYWNjZXB0SGVhZGVyLCAidGV4dC9odG1sIik7CiAqCiAqIFRvIHBhcnNlIHRoZSBoZWFkZXIgdmFsdWVzIHVzZSB0aGUgWzpwYXJzZTpdIHN0YXRpYyBtZXRob2QuCiAqCiAqICAgICBIdHRwUmVxdWVzdCByZXF1ZXN0ID0gLi4uOwogKiAgICAgTGlzdDxTdHJpbmc+IHZhbHVlcyA9IHJlcXVlc3QuaGVhZGVyc1tIdHRwSGVhZGVycy5hY2NlcHRIZWFkZXJdOwogKiAgICAgdmFsdWVzLmZvckVhY2goKHZhbHVlKSB7CiAqICAgICAgIEhlYWRlclZhbHVlIHYgPSBIZWFkZXJWYWx1ZS5wYXJzZSh2YWx1ZSk7CiAqICAgICAgIC8vIFVzZSB2LnZhbHVlIGFuZCB2LnBhcmFtZXRlcnMKICogICAgIH0pOwogKgogKiBBbiBpbnN0YW5jZSBvZiBbSGVhZGVyVmFsdWVdIGlzIGltbXV0YWJsZS4KICovCmFic3RyYWN0IGNsYXNzIEhlYWRlclZhbHVlIHsKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IGhlYWRlciB2YWx1ZSBvYmplY3Qgc2V0dGluZyB0aGUgdmFsdWUgYW5kIHBhcmFtZXRlcnMuCiAgICovCiAgZmFjdG9yeSBIZWFkZXJWYWx1ZShbU3RyaW5nIHZhbHVlID0gIiIsIE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1ldGVyc10pIHsKICAgIHJldHVybiBuZXcgX0hlYWRlclZhbHVlKHZhbHVlLCBwYXJhbWV0ZXJzKTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgaGVhZGVyIHZhbHVlIG9iamVjdCBmcm9tIHBhcnNpbmcgYSBoZWFkZXIgdmFsdWUKICAgKiBzdHJpbmcgd2l0aCBib3RoIHZhbHVlIGFuZCBvcHRpb25hbCBwYXJhbWV0ZXJzLgogICAqLwogIHN0YXRpYyBIZWFkZXJWYWx1ZSBwYXJzZShTdHJpbmcgdmFsdWUsCiAgICAgIHtTdHJpbmcgcGFyYW1ldGVyU2VwYXJhdG9yOiAiOyIsCiAgICAgIFN0cmluZyB2YWx1ZVNlcGFyYXRvcjogbnVsbCwKICAgICAgYm9vbCBwcmVzZXJ2ZUJhY2tzbGFzaDogZmFsc2V9KSB7CiAgICByZXR1cm4gX0hlYWRlclZhbHVlLnBhcnNlKHZhbHVlLAogICAgICAgIHBhcmFtZXRlclNlcGFyYXRvcjogcGFyYW1ldGVyU2VwYXJhdG9yLAogICAgICAgIHZhbHVlU2VwYXJhdG9yOiB2YWx1ZVNlcGFyYXRvciwKICAgICAgICBwcmVzZXJ2ZUJhY2tzbGFzaDogcHJlc2VydmVCYWNrc2xhc2gpOwogIH0KCiAgLyoqCiAgICogR2V0cyB0aGUgaGVhZGVyIHZhbHVlLgogICAqLwogIFN0cmluZyBnZXQgdmFsdWU7CgogIC8qKgogICAqIEdldHMgdGhlIG1hcCBvZiBwYXJhbWV0ZXJzLgogICAqCiAgICogVGhpcyBtYXAgY2Fubm90IGJlIG1vZGlmaWVkLiBJbnZva2luZyBhbnkgb3BlcmF0aW9uIHdoaWNoIHdvdWxkCiAgICogbW9kaWZ5IHRoZSBtYXAgd2lsbCB0aHJvdyBbVW5zdXBwb3J0ZWRFcnJvcl0uCiAgICovCiAgTWFwPFN0cmluZywgU3RyaW5nPiBnZXQgcGFyYW1ldGVyczsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZm9ybWF0dGVkIHN0cmluZyByZXByZXNlbnRhdGlvbiBpbiB0aGUgZm9ybToKICAgKgogICAqICAgICB2YWx1ZTsgcGFyYW1ldGVyMT12YWx1ZTE7IHBhcmFtZXRlcjI9dmFsdWUyCiAgICovCiAgU3RyaW5nIHRvU3RyaW5nKCk7Cn0KCmFic3RyYWN0IGNsYXNzIEh0dHBTZXNzaW9uIGltcGxlbWVudHMgTWFwIHsKICAvKioKICAgKiBHZXRzIHRoZSBpZCBmb3IgdGhlIGN1cnJlbnQgc2Vzc2lvbi4KICAgKi8KICBTdHJpbmcgZ2V0IGlkOwoKICAvKioKICAgKiBEZXN0cm95cyB0aGUgc2Vzc2lvbi4gVGhpcyB3aWxsIHRlcm1pbmF0ZSB0aGUgc2Vzc2lvbiBhbmQgYW55IGZ1cnRoZXIKICAgKiBjb25uZWN0aW9ucyB3aXRoIHRoaXMgaWQgd2lsbCBiZSBnaXZlbiBhIG5ldyBpZCBhbmQgc2Vzc2lvbi4KICAgKi8KICB2b2lkIGRlc3Ryb3koKTsKCiAgLyoqCiAgICogU2V0cyBhIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgc2Vzc2lvbiBpcyB0aW1lZCBvdXQuCiAgICovCiAgdm9pZCBzZXQgb25UaW1lb3V0KHZvaWQgY2FsbGJhY2soKSk7CgogIC8qKgogICAqIElzIHRydWUgaWYgdGhlIHNlc3Npb24gaGFzIG5vdCBiZWVuIHNlbnQgdG8gdGhlIGNsaWVudCB5ZXQuCiAgICovCiAgYm9vbCBnZXQgaXNOZXc7Cn0KCi8qKgogKiBSZXByZXNlbnRhdGlvbiBvZiBhIGNvbnRlbnQgdHlwZS4gQW4gaW5zdGFuY2Ugb2YgW0NvbnRlbnRUeXBlXSBpcwogKiBpbW11dGFibGUuCiAqLwphYnN0cmFjdCBjbGFzcyBDb250ZW50VHlwZSBpbXBsZW1lbnRzIEhlYWRlclZhbHVlIHsKICAvKioKICAgKiBDb250ZW50IHR5cGUgZm9yIHBsYWluIHRleHQgdXNpbmcgVVRGLTggZW5jb2RpbmcuCiAgICoKICAgKiAgICAgdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOAogICAqLwogIHN0YXRpYyBmaW5hbCB0ZXh0ID0gbmV3IENvbnRlbnRUeXBlKCJ0ZXh0IiwgInBsYWluIiwgY2hhcnNldDogInV0Zi04Iik7CiAgQERlcHJlY2F0ZWQoIlVzZSB0ZXh0IGluc3RlYWQiKQogIHN0YXRpYyBmaW5hbCBURVhUID0gdGV4dDsKCiAgLyoqCiAgICogIENvbnRlbnQgdHlwZSBmb3IgSFRNTCB1c2luZyBVVEYtOCBlbmNvZGluZy4KICAgKgogICAqICAgICB0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgKICAgKi8KICBzdGF0aWMgZmluYWwgaHRtbCA9IG5ldyBDb250ZW50VHlwZSgidGV4dCIsICJodG1sIiwgY2hhcnNldDogInV0Zi04Iik7CiAgQERlcHJlY2F0ZWQoIlVzZSBodG1sIGluc3RlYWQiKQogIHN0YXRpYyBmaW5hbCBIVE1MID0gaHRtbDsKCiAgLyoqCiAgICogIENvbnRlbnQgdHlwZSBmb3IgSlNPTiB1c2luZyBVVEYtOCBlbmNvZGluZy4KICAgKgogICAqICAgICBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04CiAgICovCiAgc3RhdGljIGZpbmFsIGpzb24gPSBuZXcgQ29udGVudFR5cGUoImFwcGxpY2F0aW9uIiwgImpzb24iLCBjaGFyc2V0OiAidXRmLTgiKTsKICBARGVwcmVjYXRlZCgiVXNlIGpzb24gaW5zdGVhZCIpCiAgc3RhdGljIGZpbmFsIEpTT04gPSBqc29uOwoKICAvKioKICAgKiAgQ29udGVudCB0eXBlIGZvciBiaW5hcnkgZGF0YS4KICAgKgogICAqICAgICBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KICAgKi8KICBzdGF0aWMgZmluYWwgYmluYXJ5ID0gbmV3IENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbiIsICJvY3RldC1zdHJlYW0iKTsKICBARGVwcmVjYXRlZCgiVXNlIGJpbmFyeSBpbnN0ZWFkIikKICBzdGF0aWMgZmluYWwgQklOQVJZID0gYmluYXJ5OwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IGNvbnRlbnQgdHlwZSBvYmplY3Qgc2V0dGluZyB0aGUgcHJpbWFyeSB0eXBlIGFuZAogICAqIHN1YiB0eXBlLiBUaGUgY2hhcnNldCBhbmQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGNhbiBhbHNvIGJlIHNldAogICAqIHVzaW5nIFtjaGFyc2V0XSBhbmQgW3BhcmFtZXRlcnNdLiBJZiBjaGFyc2V0IGlzIHBhc3NlZCBhbmQKICAgKiBbcGFyYW1ldGVyc10gY29udGFpbnMgY2hhcnNldCBhcyB3ZWxsIHRoZSBwYXNzZWQgW2NoYXJzZXRdIHdpbGwKICAgKiBvdmVycmlkZSB0aGUgdmFsdWUgaW4gcGFyYW1ldGVycy4gS2V5cyBwYXNzZWQgaW4gcGFyYW1ldGVycyB3aWxsIGJlCiAgICogY29udmVydGVkIHRvIGxvd2VyIGNhc2UuIFRoZSBgY2hhcnNldGAgZW50cnksIHdoZXRoZXIgcGFzc2VkIGFzIGBjaGFyc2V0YAogICAqIG9yIGluIGBwYXJhbWV0ZXJzYCwgd2lsbCBoYXZlIGl0cyB2YWx1ZSBjb252ZXJ0ZWQgdG8gbG93ZXItY2FzZS4KICAgKi8KICBmYWN0b3J5IENvbnRlbnRUeXBlKFN0cmluZyBwcmltYXJ5VHlwZSwgU3RyaW5nIHN1YlR5cGUsCiAgICAgIHtTdHJpbmcgY2hhcnNldCwgTWFwPFN0cmluZywgU3RyaW5nPiBwYXJhbWV0ZXJzfSkgewogICAgcmV0dXJuIG5ldyBfQ29udGVudFR5cGUocHJpbWFyeVR5cGUsIHN1YlR5cGUsIGNoYXJzZXQsIHBhcmFtZXRlcnMpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBjb250ZW50IHR5cGUgb2JqZWN0IGZyb20gcGFyc2luZyBhIENvbnRlbnQtVHlwZQogICAqIGhlYWRlciB2YWx1ZS4gQXMgcHJpbWFyeSB0eXBlLCBzdWIgdHlwZSBhbmQgcGFyYW1ldGVyIG5hbWVzIGFuZAogICAqIHZhbHVlcyBhcmUgbm90IGNhc2Ugc2Vuc2l0aXZlIGFsbCB0aGVzZSB2YWx1ZXMgd2lsbCBiZSBjb252ZXJ0ZWQKICAgKiB0byBsb3dlciBjYXNlLiBQYXJzaW5nIHRoaXMgc3RyaW5nCiAgICoKICAgKiAgICAgdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04CiAgICoKICAgKiB3aWxsIGNyZWF0ZSBhIGNvbnRlbnQgdHlwZSBvYmplY3Qgd2l0aCBwcmltYXJ5IHR5cGUgWzp0ZXh0Ol0sIHN1YgogICAqIHR5cGUgWzpodG1sOl0gYW5kIHBhcmFtZXRlciBbOmNoYXJzZXQ6XSB3aXRoIHZhbHVlIFs6dXRmLTg6XS4KICAgKi8KICBzdGF0aWMgQ29udGVudFR5cGUgcGFyc2UoU3RyaW5nIHZhbHVlKSB7CiAgICByZXR1cm4gX0NvbnRlbnRUeXBlLnBhcnNlKHZhbHVlKTsKICB9CgogIC8qKgogICAqIEdldHMgdGhlIG1pbWUtdHlwZSwgd2l0aG91dCBhbnkgcGFyYW1ldGVycy4KICAgKi8KICBTdHJpbmcgZ2V0IG1pbWVUeXBlOwoKICAvKioKICAgKiBHZXRzIHRoZSBwcmltYXJ5IHR5cGUuCiAgICovCiAgU3RyaW5nIGdldCBwcmltYXJ5VHlwZTsKCiAgLyoqCiAgICogR2V0cyB0aGUgc3ViIHR5cGUuCiAgICovCiAgU3RyaW5nIGdldCBzdWJUeXBlOwoKICAvKioKICAgKiBHZXRzIHRoZSBjaGFyYWN0ZXIgc2V0LgogICAqLwogIFN0cmluZyBnZXQgY2hhcnNldDsKfQoKLyoqCiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgY29va2llLiBGb3IgY29va2llcyByZWNlaXZlZCBieSB0aGUgc2VydmVyIGFzIENvb2tpZQogKiBoZWFkZXIgdmFsdWVzIG9ubHkgW25hbWVdIGFuZCBbdmFsdWVdIHByb3BlcnRpZXMgd2lsbCBiZSBzZXQuIFdoZW4gYnVpbGRpbmcgYQogKiBjb29raWUgZm9yIHRoZSAnc2V0LWNvb2tpZScgaGVhZGVyIGluIHRoZSBzZXJ2ZXIgYW5kIHdoZW4gcmVjZWl2aW5nIGNvb2tpZXMKICogaW4gdGhlIGNsaWVudCBhcyAnc2V0LWNvb2tpZScgaGVhZGVycyBhbGwgZmllbGRzIGNhbiBiZSB1c2VkLgogKi8KYWJzdHJhY3QgY2xhc3MgQ29va2llIHsKICAvKioKICAgKiBUaGUgbmFtZSBvZiB0aGUgY29va2llLgogICAqCiAgICogTXVzdCBiZSBhIGB0b2tlbmAgYXMgc3BlY2lmaWVkIGluIFJGQyA2MjY1LgogICAqCiAgICogVGhlIGFsbG93ZWQgY2hhcmFjdGVycyBpbiBhIGB0b2tlbmAgYXJlIHRoZSB2aXNpYmxlIEFTQ0lJIGNoYXJhY3RlcnMsCiAgICogVSswMDIxIChgIWApIHRocm91Z2ggVSswMDdFIChgfmApLCBleGNlcHQgdGhlIHNlcGFyYXRvciBjaGFyYWN0ZXJzOgogICAqIGAoYCwgYClgLCBgPGAsIGA+YCwgYEBgLCBgLGAsIGA7YCwgYDpgLCBgXGAsIGAiYCwgYC9gLCBgW2AsIGBdYCwgYD9gLCBgPWAsCiAgICogYHtgLCBhbmQgYH1gLgogICAqLwogIFN0cmluZyBuYW1lOwoKICAvKioKICAgKiBUaGUgdmFsdWUgb2YgdGhlIGNvb2tpZS4KICAgKgogICAqIE11c3QgYmUgYSBgY29va2llLXZhbHVlYCBhcyBzcGVjaWZpZWQgaW4gUkZDIDYyNjUuCiAgICoKICAgKiBUaGUgYWxsb3dlZCBjaGFyYWN0ZXJzIGluIGEgY29va2llIHZhbHVlIGFyZSB0aGUgdmlzaWJsZSBBU0NJSSBjaGFyYWN0ZXJzLAogICAqIFUrMDAyMSAoYCFgKSB0aHJvdWdoIFUrMDA3RSAoYH5gKSBleGNlcHQgdGhlIGNoYXJhY3RlcnM6CiAgICogYCJgLCBgLGAsIGA7YCBhbmQgYFxgLgogICAqIENvb2tpZSB2YWx1ZXMgbWF5IGJlIHdyYXBwZWQgaW4gYSBzaW5nbGUgcGFpciBvZiBkb3VibGUgcXVvdGVzCiAgICogKFUrMDAyMiwgYCJgKS4KICAgKi8KICBTdHJpbmcgdmFsdWU7CgogIC8qKgogICAqIFRoZSB0aW1lIGF0IHdoaWNoIHRoZSBjb29raWUgZXhwaXJlcy4KICAgKi8KICBEYXRlVGltZSBleHBpcmVzOwoKICAvKioKICAgKiBUaGUgbnVtYmVyIG9mIHNlY29uZHMgdW50aWwgdGhlIGNvb2tpZSBleHBpcmVzLiBBIHplcm8gb3IgbmVnYXRpdmUgdmFsdWUKICAgKiBtZWFucyB0aGUgY29va2llIGhhcyBleHBpcmVkLgogICAqLwogIGludCBtYXhBZ2U7CgogIC8qKgogICAqIFRoZSBkb21haW4gdGhlIGNvb2tpZSBhcHBsaWVzIHRvLgogICAqLwogIFN0cmluZyBkb21haW47CgogIC8qKgogICAqIFRoZSBwYXRoIHdpdGhpbiB0aGUgW2RvbWFpbl0gdGhlIGNvb2tpZSBhcHBsaWVzIHRvLgogICAqLwogIFN0cmluZyBwYXRoOwoKICAvKioKICAgKiBXaGV0aGVyIHRvIG9ubHkgc2VuZCB0aGlzIGNvb2tpZSBvbiBzZWN1cmUgY29ubmVjdGlvbnMuCiAgICovCiAgYm9vbCBzZWN1cmU7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIGNvb2tpZSBpcyBvbmx5IHNlbnQgaW4gdGhlIEhUVFAgcmVxdWVzdCBhbmQgaXMgbm90IG1hZGUKICAgKiBhdmFpbGFibGUgdG8gY2xpZW50IHNpZGUgc2NyaXB0cy4KICAgKi8KICBib29sIGh0dHBPbmx5OwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IGNvb2tpZSBzZXR0aW5nIHRoZSBuYW1lIGFuZCB2YWx1ZS4KICAgKgogICAqIFtuYW1lXSBhbmQgW3ZhbHVlXSBtdXN0IGJlIGNvbXBvc2VkIG9mIHZhbGlkIGNoYXJhY3RlcnMgYWNjb3JkaW5nIHRvIFJGQwogICAqIDYyNjUuCiAgICoKICAgKiBCeSBkZWZhdWx0IHRoZSB2YWx1ZSBvZiBgaHR0cE9ubHlgIHdpbGwgYmUgc2V0IHRvIGB0cnVlYC4KICAgKi8KICBmYWN0b3J5IENvb2tpZShTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKSA9PiBuZXcgX0Nvb2tpZShuYW1lLCB2YWx1ZSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgY29va2llIGJ5IHBhcnNpbmcgYSBoZWFkZXIgdmFsdWUgZnJvbSBhICdzZXQtY29va2llJwogICAqIGhlYWRlci4KICAgKi8KICBmYWN0b3J5IENvb2tpZS5mcm9tU2V0Q29va2llVmFsdWUoU3RyaW5nIHZhbHVlKSB7CiAgICByZXR1cm4gbmV3IF9Db29raWUuZnJvbVNldENvb2tpZVZhbHVlKHZhbHVlKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIGZvcm1hdHRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvb2tpZS4gVGhlCiAgICogc3RyaW5nIHJlcHJlc2VudGF0aW9uIGNhbiBiZSB1c2VkIGZvciBmb3Igc2V0dGluZyB0aGUgQ29va2llIG9yCiAgICogJ3NldC1jb29raWUnIGhlYWRlcnMKICAgKi8KICBTdHJpbmcgdG9TdHJpbmcoKTsKfQoKLyoqCiAqIEEgc2VydmVyLXNpZGUgb2JqZWN0CiAqIHRoYXQgY29udGFpbnMgdGhlIGNvbnRlbnQgb2YgYW5kIGluZm9ybWF0aW9uIGFib3V0IGFuIEhUVFAgcmVxdWVzdC4KICoKICogX19Ob3RlX186IENoZWNrIG91dCB0aGUKICogW2h0dHBfc2VydmVyXShodHRwczovL3B1Yi5kZXYvcGFja2FnZXMvaHR0cF9zZXJ2ZXIpCiAqIHBhY2thZ2UsIHdoaWNoIG1ha2VzIHdvcmtpbmcgd2l0aCB0aGUgbG93LWxldmVsCiAqIGRhcnQ6aW8gSFRUUCBzZXJ2ZXIgc3Vic3lzdGVtIGVhc2llci4KICoKICogYEh0dHBSZXF1ZXN0YCBvYmplY3RzIGFyZSBnZW5lcmF0ZWQgYnkgYW4gW0h0dHBTZXJ2ZXJdLAogKiB3aGljaCBsaXN0ZW5zIGZvciBIVFRQIHJlcXVlc3RzIG9uIGEgc3BlY2lmaWMgaG9zdCBhbmQgcG9ydC4KICogRm9yIGVhY2ggcmVxdWVzdCByZWNlaXZlZCwgdGhlIEh0dHBTZXJ2ZXIsIHdoaWNoIGlzIGEgW1N0cmVhbV0sCiAqIGdlbmVyYXRlcyBhbiBgSHR0cFJlcXVlc3RgIG9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgc3RyZWFtLgogKgogKiBBbiBgSHR0cFJlcXVlc3RgIG9iamVjdCBkZWxpdmVycyB0aGUgYm9keSBjb250ZW50IG9mIHRoZSByZXF1ZXN0CiAqIGFzIGEgc3RyZWFtIG9mIGJ5dGUgbGlzdHMuCiAqIFRoZSBvYmplY3QgYWxzbyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVxdWVzdCwKICogc3VjaCBhcyB0aGUgbWV0aG9kLCBVUkksIGFuZCBoZWFkZXJzLgogKgogKiBJbiB0aGUgZm9sbG93aW5nIGNvZGUsIGFuIEh0dHBTZXJ2ZXIgbGlzdGVucwogKiBmb3IgSFRUUCByZXF1ZXN0cy4gV2hlbiB0aGUgc2VydmVyIHJlY2VpdmVzIGEgcmVxdWVzdCwKICogaXQgdXNlcyB0aGUgSHR0cFJlcXVlc3Qgb2JqZWN0J3MgYG1ldGhvZGAgcHJvcGVydHkgdG8gZGlzcGF0Y2ggcmVxdWVzdHMuCiAqCiAqICAgICBmaW5hbCBIT1NUID0gSW50ZXJuZXRBZGRyZXNzLmxvb3BiYWNrSVB2NDsKICogICAgIGZpbmFsIFBPUlQgPSA4MDsKICoKICogICAgIEh0dHBTZXJ2ZXIuYmluZChIT1NULCBQT1JUKS50aGVuKChfc2VydmVyKSB7CiAqICAgICAgIF9zZXJ2ZXIubGlzdGVuKChIdHRwUmVxdWVzdCByZXF1ZXN0KSB7CiAqICAgICAgICAgc3dpdGNoIChyZXF1ZXN0Lm1ldGhvZCkgewogKiAgICAgICAgICAgY2FzZSAnR0VUJzoKICogICAgICAgICAgICAgaGFuZGxlR2V0UmVxdWVzdChyZXF1ZXN0KTsKICogICAgICAgICAgICAgYnJlYWs7CiAqICAgICAgICAgICBjYXNlICdQT1NUJzoKICogICAgICAgICAgICAgLi4uCiAqICAgICAgICAgfQogKiAgICAgICB9LAogKiAgICAgICBvbkVycm9yOiBoYW5kbGVFcnJvcik7ICAgIC8vIGxpc3RlbigpIGZhaWxlZC4KICogICAgIH0pLmNhdGNoRXJyb3IoaGFuZGxlRXJyb3IpOwogKgogKiBBbiBIdHRwUmVxdWVzdCBvYmplY3QgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBhc3NvY2lhdGVkIFtIdHRwUmVzcG9uc2VdCiAqIG9iamVjdCB0aHJvdWdoIHRoZSByZXNwb25zZSBwcm9wZXJ0eS4KICogVGhlIHNlcnZlciB3cml0ZXMgaXRzIHJlc3BvbnNlIHRvIHRoZSBib2R5IG9mIHRoZSBIdHRwUmVzcG9uc2Ugb2JqZWN0LgogKiBGb3IgZXhhbXBsZSwgaGVyZSdzIGEgZnVuY3Rpb24gdGhhdCByZXNwb25kcyB0byBhIHJlcXVlc3Q6CiAqCiAqICAgICB2b2lkIGhhbmRsZUdldFJlcXVlc3QoSHR0cFJlcXVlc3QgcmVxKSB7CiAqICAgICAgIEh0dHBSZXNwb25zZSByZXMgPSByZXEucmVzcG9uc2U7CiAqICAgICAgIHJlcy53cml0ZSgnUmVjZWl2ZWQgcmVxdWVzdCAke3JlcS5tZXRob2R9OiAke3JlcS51cmkucGF0aH0nKTsKICogICAgICAgcmVzLmNsb3NlKCk7CiAqICAgICB9CiAqLwphYnN0cmFjdCBjbGFzcyBIdHRwUmVxdWVzdCBpbXBsZW1lbnRzIFN0cmVhbTxVaW50OExpc3Q+IHsKICAvKioKICAgKiBUaGUgY29udGVudCBsZW5ndGggb2YgdGhlIHJlcXVlc3QgYm9keS4KICAgKgogICAqIElmIHRoZSBzaXplIG9mIHRoZSByZXF1ZXN0IGJvZHkgaXMgbm90IGtub3duIGluIGFkdmFuY2UsCiAgICogdGhpcyB2YWx1ZSBpcyAtMS4KICAgKi8KICBpbnQgZ2V0IGNvbnRlbnRMZW5ndGg7CgogIC8qKgogICAqIFRoZSBtZXRob2QsIHN1Y2ggYXMgJ0dFVCcgb3IgJ1BPU1QnLCBmb3IgdGhlIHJlcXVlc3QuCiAgICovCiAgU3RyaW5nIGdldCBtZXRob2Q7CgogIC8qKgogICAqIFRoZSBVUkkgZm9yIHRoZSByZXF1ZXN0LgogICAqCiAgICogVGhpcyBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlCiAgICogcGF0aCBhbmQgcXVlcnkgc3RyaW5nIGZvciB0aGUgcmVxdWVzdC4KICAgKi8KICBVcmkgZ2V0IHVyaTsKCiAgLyoqCiAgICogVGhlIHJlcXVlc3RlZCBVUkkgZm9yIHRoZSByZXF1ZXN0LgogICAqCiAgICogVGhlIHJldHVybmVkIFVSSSBpcyByZWNvbnN0cnVjdGVkIGJ5IHVzaW5nIGh0dHAtaGVhZGVyIGZpZWxkcywgdG8gYWNjZXNzCiAgICogb3RoZXJ3aXNlIGxvc3QgaW5mb3JtYXRpb24sIGUuZy4gaG9zdCBhbmQgc2NoZW1lLgogICAqCiAgICogVG8gcmVjb25zdHJ1Y3QgdGhlIHNjaGVtZSwgZmlyc3QgJ1gtRm9yd2FyZGVkLVByb3RvJyBpcyBjaGVja2VkLCBhbmQgdGhlbgogICAqIGZhbGxpbmcgYmFjayB0byBzZXJ2ZXIgdHlwZS4KICAgKgogICAqIFRvIHJlY29uc3RydWN0IHRoZSBob3N0LCBmaXJzdCAnWC1Gb3J3YXJkZWQtSG9zdCcgaXMgY2hlY2tlZCwgdGhlbiAnSG9zdCcKICAgKiBhbmQgZmluYWxseSBjYWxsaW5nIGJhY2sgdG8gc2VydmVyLgogICAqLwogIFVyaSBnZXQgcmVxdWVzdGVkVXJpOwoKICAvKioKICAgKiBUaGUgcmVxdWVzdCBoZWFkZXJzLgogICAqCiAgICogVGhlIHJldHVybmVkIFtIdHRwSGVhZGVyc10gYXJlIGltbXV0YWJsZS4KICAgKi8KICBIdHRwSGVhZGVycyBnZXQgaGVhZGVyczsKCiAgLyoqCiAgICogVGhlIGNvb2tpZXMgaW4gdGhlIHJlcXVlc3QsIGZyb20gdGhlIENvb2tpZSBoZWFkZXJzLgogICAqLwogIExpc3Q8Q29va2llPiBnZXQgY29va2llczsKCiAgLyoqCiAgICogVGhlIHBlcnNpc3RlbnQgY29ubmVjdGlvbiBzdGF0ZSBzaWduYWxlZCBieSB0aGUgY2xpZW50LgogICAqLwogIGJvb2wgZ2V0IHBlcnNpc3RlbnRDb25uZWN0aW9uOwoKICAvKioKICAgKiBUaGUgY2xpZW50IGNlcnRpZmljYXRlIG9mIHRoZSBjbGllbnQgbWFraW5nIHRoZSByZXF1ZXN0LgogICAqCiAgICogVGhpcyB2YWx1ZSBpcyBudWxsIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCBhIHNlY3VyZSBUTFMgb3IgU1NMIGNvbm5lY3Rpb24sCiAgICogb3IgaWYgdGhlIHNlcnZlciBkb2VzIG5vdCByZXF1ZXN0IGEgY2xpZW50IGNlcnRpZmljYXRlLCBvciBpZiB0aGUgY2xpZW50CiAgICogZG9lcyBub3QgcHJvdmlkZSBvbmUuCiAgICovCiAgWDUwOUNlcnRpZmljYXRlIGdldCBjZXJ0aWZpY2F0ZTsKCiAgLyoqCiAgICogVGhlIHNlc3Npb24gZm9yIHRoZSBnaXZlbiByZXF1ZXN0LgogICAqCiAgICogSWYgdGhlIHNlc3Npb24gaXMKICAgKiBiZWluZyBpbml0aWFsaXplZCBieSB0aGlzIGNhbGwsIFs6aXNOZXc6XSBpcyB0cnVlIGZvciB0aGUgcmV0dXJuZWQKICAgKiBzZXNzaW9uLgogICAqIFNlZSBbSHR0cFNlcnZlci5zZXNzaW9uVGltZW91dF0gb24gaG93IHRvIGNoYW5nZSBkZWZhdWx0IHRpbWVvdXQuCiAgICovCiAgSHR0cFNlc3Npb24gZ2V0IHNlc3Npb247CgogIC8qKgogICAqIFRoZSBIVFRQIHByb3RvY29sIHZlcnNpb24gdXNlZCBpbiB0aGUgcmVxdWVzdCwKICAgKiBlaXRoZXIgIjEuMCIgb3IgIjEuMSIuCiAgICovCiAgU3RyaW5nIGdldCBwcm90b2NvbFZlcnNpb247CgogIC8qKgogICAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjbGllbnQgY29ubmVjdGlvbi4KICAgKgogICAqIFJldHVybnMgWzpudWxsOl0gaWYgdGhlIHNvY2tldCBpcyBub3QgYXZhaWxhYmxlLgogICAqLwogIEh0dHBDb25uZWN0aW9uSW5mbyBnZXQgY29ubmVjdGlvbkluZm87CgogIC8qKgogICAqIFRoZSBbSHR0cFJlc3BvbnNlXSBvYmplY3QsIHVzZWQgZm9yIHNlbmRpbmcgYmFjayB0aGUgcmVzcG9uc2UgdG8gdGhlCiAgICogY2xpZW50LgogICAqCiAgICogSWYgdGhlIFtjb250ZW50TGVuZ3RoXSBvZiB0aGUgYm9keSBpc24ndCAwLCBhbmQgdGhlIGJvZHkgaXNuJ3QgYmVpbmcgcmVhZCwKICAgKiBhbnkgd3JpdGUgY2FsbHMgb24gdGhlIFtIdHRwUmVzcG9uc2VdIGF1dG9tYXRpY2FsbHkgZHJhaW4gdGhlIHJlcXVlc3QKICAgKiBib2R5LgogICAqLwogIEh0dHBSZXNwb25zZSBnZXQgcmVzcG9uc2U7Cn0KCi8qKgogKiBBbiBIVFRQIHJlc3BvbnNlLCB3aGljaCByZXR1cm5zIHRoZSBoZWFkZXJzIGFuZCBkYXRhCiAqIGZyb20gdGhlIHNlcnZlciB0byB0aGUgY2xpZW50IGluIHJlc3BvbnNlIHRvIGFuIEhUVFAgcmVxdWVzdC4KICoKICogRXZlcnkgSHR0cFJlcXVlc3Qgb2JqZWN0IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgYXNzb2NpYXRlZCBbSHR0cFJlc3BvbnNlXQogKiBvYmplY3QgdGhyb3VnaCB0aGUgYHJlc3BvbnNlYCBwcm9wZXJ0eS4KICogVGhlIHNlcnZlciBzZW5kcyBpdHMgcmVzcG9uc2UgdG8gdGhlIGNsaWVudCBieSB3cml0aW5nIHRvIHRoZQogKiBIdHRwUmVzcG9uc2Ugb2JqZWN0LgogKgogKiAjIyBXcml0aW5nIHRoZSByZXNwb25zZQogKgogKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgW0lPU2lua10uCiAqIEFmdGVyIHRoZSBoZWFkZXIgaGFzIGJlZW4gc2V0IHVwLCB0aGUgbWV0aG9kcwogKiBmcm9tIElPU2luaywgc3VjaCBhcyBgd3JpdGVsbigpYCwgY2FuIGJlIHVzZWQgdG8gd3JpdGUKICogdGhlIGJvZHkgb2YgdGhlIEhUVFAgcmVzcG9uc2UuCiAqIFVzZSB0aGUgYGNsb3NlKClgIG1ldGhvZCB0byBjbG9zZSB0aGUgcmVzcG9uc2UgYW5kIHNlbmQgaXQgdG8gdGhlIGNsaWVudC4KICoKICogICAgIHNlcnZlci5saXN0ZW4oKEh0dHBSZXF1ZXN0IHJlcXVlc3QpIHsKICogICAgICAgcmVxdWVzdC5yZXNwb25zZS53cml0ZSgnSGVsbG8sIHdvcmxkIScpOwogKiAgICAgICByZXF1ZXN0LnJlc3BvbnNlLmNsb3NlKCk7CiAqICAgICB9KTsKICoKICogV2hlbiBvbmUgb2YgdGhlIElPU2luayBtZXRob2RzIGlzIHVzZWQgZm9yIHRoZQogKiBmaXJzdCB0aW1lLCB0aGUgcmVxdWVzdCBoZWFkZXIgaXMgc2VudC4gQ2FsbGluZyBhbnkgbWV0aG9kcyB0aGF0CiAqIGNoYW5nZSB0aGUgaGVhZGVyIGFmdGVyIGl0IGlzIHNlbnQgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KICoKICogIyMgU2V0dGluZyB0aGUgaGVhZGVycwogKgogKiBUaGUgSHR0cFJlc3BvbnNlIG9iamVjdCBoYXMgYSBudW1iZXIgb2YgcHJvcGVydGllcyBmb3Igc2V0dGluZyB1cAogKiB0aGUgSFRUUCBoZWFkZXJzIG9mIHRoZSByZXNwb25zZS4KICogV2hlbiB3cml0aW5nIHN0cmluZyBkYXRhIHRocm91Z2ggdGhlIElPU2luaywgdGhlIGVuY29kaW5nIHVzZWQKICogaXMgZGV0ZXJtaW5lZCBmcm9tIHRoZSAiY2hhcnNldCIgcGFyYW1ldGVyIG9mIHRoZQogKiAiQ29udGVudC1UeXBlIiBoZWFkZXIuCiAqCiAqICAgICBIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSAuLi4KICogICAgIHJlc3BvbnNlLmhlYWRlcnMuY29udGVudFR5cGUKICogICAgICAgICA9IG5ldyBDb250ZW50VHlwZSgiYXBwbGljYXRpb24iLCAianNvbiIsIGNoYXJzZXQ6ICJ1dGYtOCIpOwogKiAgICAgcmVzcG9uc2Uud3JpdGUoLi4uKTsgIC8vIFN0cmluZ3Mgd3JpdHRlbiB3aWxsIGJlIFVURi04IGVuY29kZWQuCiAqCiAqIElmIG5vIGNoYXJzZXQgaXMgcHJvdmlkZWQgdGhlIGRlZmF1bHQgb2YgSVNPLTg4NTktMSAoTGF0aW4gMSkgd2lsbAogKiBiZSB1c2VkLgogKgogKiAgICAgSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gLi4uCiAqICAgICByZXNwb25zZS5oZWFkZXJzLmFkZChIdHRwSGVhZGVycy5jb250ZW50VHlwZUhlYWRlciwgInRleHQvcGxhaW4iKTsKICogICAgIHJlc3BvbnNlLndyaXRlKC4uLik7ICAvLyBTdHJpbmdzIHdyaXR0ZW4gd2lsbCBiZSBJU08tODg1OS0xIGVuY29kZWQuCiAqCiAqIEFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gaWYgeW91IHVzZSB0aGUgYHdyaXRlKClgIG1ldGhvZAogKiB3aGlsZSBhbiB1bnN1cHBvcnRlZCBjb250ZW50LXR5cGUgaXMgc2V0LgogKi8KYWJzdHJhY3QgY2xhc3MgSHR0cFJlc3BvbnNlIGltcGxlbWVudHMgSU9TaW5rIHsKICAvLyBUT0RPKGFqb2huc2VuKTogQWRkIGRvY3VtZW50YXRpb24gb2YgaG93IHRvIHBpcGUgYSBmaWxlIHRvIHRoZSByZXNwb25zZS4KICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBjb250ZW50IGxlbmd0aCBvZiB0aGUgcmVzcG9uc2UuIElmIHRoZSBzaXplIG9mCiAgICogdGhlIHJlc3BvbnNlIGlzIG5vdCBrbm93biBpbiBhZHZhbmNlIHNldCB0aGUgY29udGVudCBsZW5ndGggdG8KICAgKiAtMSwgd2hpY2ggaXMgYWxzbyB0aGUgZGVmYXVsdCBpZiBub3Qgc2V0LgogICAqLwogIGludCBjb250ZW50TGVuZ3RoOwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBzdGF0dXMgY29kZS4gQW55IGludGVnZXIgdmFsdWUgaXMgYWNjZXB0ZWQuIEZvcgogICAqIHRoZSBvZmZpY2lhbCBIVFRQIHN0YXR1cyBjb2RlcyB1c2UgdGhlIGZpZWxkcyBmcm9tCiAgICogW0h0dHBTdGF0dXNdLiBJZiBubyBzdGF0dXMgY29kZSBpcyBleHBsaWNpdGx5IHNldCB0aGUgZGVmYXVsdAogICAqIHZhbHVlIFtIdHRwU3RhdHVzLm9rXSBpcyB1c2VkLgogICAqCiAgICogVGhlIHN0YXR1cyBjb2RlIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgYm9keSBpcyB3cml0dGVuCiAgICogdG8uIFNldHRpbmcgdGhlIHN0YXR1cyBjb2RlIGFmdGVyIHdyaXRpbmcgdG8gdGhlIHJlc3BvbnNlIGJvZHkgb3IKICAgKiBjbG9zaW5nIHRoZSByZXNwb25zZSB3aWxsIHRocm93IGEgYFN0YXRlRXJyb3JgLgogICAqLwogIGludCBzdGF0dXNDb2RlOwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSByZWFzb24gcGhyYXNlLiBJZiBubyByZWFzb24gcGhyYXNlIGlzIGV4cGxpY2l0bHkKICAgKiBzZXQgYSBkZWZhdWx0IHJlYXNvbiBwaHJhc2UgaXMgcHJvdmlkZWQuCiAgICoKICAgKiBUaGUgcmVhc29uIHBocmFzZSBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIGJvZHkgaXMgd3JpdHRlbgogICAqIHRvLiBTZXR0aW5nIHRoZSByZWFzb24gcGhyYXNlIGFmdGVyIHdyaXRpbmcgdG8gdGhlIHJlc3BvbnNlIGJvZHkKICAgKiBvciBjbG9zaW5nIHRoZSByZXNwb25zZSB3aWxsIHRocm93IGEgYFN0YXRlRXJyb3JgLgogICAqLwogIFN0cmluZyByZWFzb25QaHJhc2U7CgogIC8qKgogICAqIEdldHMgYW5kIHNldHMgdGhlIHBlcnNpc3RlbnQgY29ubmVjdGlvbiBzdGF0ZS4gVGhlIGluaXRpYWwgdmFsdWUKICAgKiBvZiB0aGlzIHByb3BlcnR5IGlzIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gc3RhdGUgZnJvbSB0aGUKICAgKiByZXF1ZXN0LgogICAqLwogIGJvb2wgcGVyc2lzdGVudENvbm5lY3Rpb247CgogIC8qKgogICAqIFNldCBhbmQgZ2V0IHRoZSBbZGVhZGxpbmVdIGZvciB0aGUgcmVzcG9uc2UuIFRoZSBkZWFkbGluZSBpcyB0aW1lZCBmcm9tIHRoZQogICAqIHRpbWUgaXQncyBzZXQuIFNldHRpbmcgYSBuZXcgZGVhZGxpbmUgd2lsbCBvdmVycmlkZSBhbnkgcHJldmlvdXMgZGVhZGxpbmUuCiAgICogV2hlbiBhIGRlYWRsaW5lIGlzIGV4Y2VlZGVkLCB0aGUgcmVzcG9uc2Ugd2lsbCBiZSBjbG9zZWQgYW5kIGFueSBmdXJ0aGVyCiAgICogZGF0YSBpZ25vcmVkLgogICAqCiAgICogVG8gZGlzYWJsZSBhIGRlYWRsaW5lLCBzZXQgdGhlIFtkZWFkbGluZV0gdG8gYG51bGxgLgogICAqCiAgICogVGhlIFtkZWFkbGluZV0gaXMgYG51bGxgIGJ5IGRlZmF1bHQuCiAgICovCiAgRHVyYXRpb24gZGVhZGxpbmU7CgogIC8qKgogICAqIEdldHMgb3Igc2V0cyBpZiB0aGUgW0h0dHBSZXNwb25zZV0gc2hvdWxkIGJ1ZmZlciBvdXRwdXQuCiAgICoKICAgKiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC4KICAgKgogICAqIF9fTm90ZV9fOiBEaXNhYmxpbmcgYnVmZmVyaW5nIG9mIHRoZSBvdXRwdXQgY2FuIHJlc3VsdCBpbiB2ZXJ5IHBvb3IKICAgKiBwZXJmb3JtYW5jZSwgd2hlbiB3cml0aW5nIG1hbnkgc21hbGwgY2h1bmtzLgogICAqLwogIGJvb2wgYnVmZmVyT3V0cHV0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSByZXNwb25zZSBoZWFkZXJzLgogICAqCiAgICogVGhlIHJlc3BvbnNlIGhlYWRlcnMgY2FuIGJlIG1vZGlmaWVkIHVudGlsIHRoZSByZXNwb25zZSBib2R5IGlzCiAgICogd3JpdHRlbiB0byBvciBjbG9zZWQuIEFmdGVyIHRoYXQgdGhleSBiZWNvbWUgaW1tdXRhYmxlLgogICAqLwogIEh0dHBIZWFkZXJzIGdldCBoZWFkZXJzOwoKICAvKioKICAgKiBDb29raWVzIHRvIHNldCBpbiB0aGUgY2xpZW50IChpbiB0aGUgJ3NldC1jb29raWUnIGhlYWRlcikuCiAgICovCiAgTGlzdDxDb29raWU+IGdldCBjb29raWVzOwoKICAvKioKICAgKiBSZXNwb25kIHdpdGggYSByZWRpcmVjdCB0byBbbG9jYXRpb25dLgogICAqCiAgICogVGhlIFVSSSBpbiBbbG9jYXRpb25dIHNob3VsZCBiZSBhYnNvbHV0ZSwgYnV0IHRoZXJlIGFyZSBubyBjaGVja3MKICAgKiB0byBlbmZvcmNlIHRoYXQuCiAgICoKICAgKiBCeSBkZWZhdWx0IHRoZSBIVFRQIHN0YXR1cyBjb2RlIGBIdHRwU3RhdHVzLm1vdmVkVGVtcG9yYXJpbHlgCiAgICogKGAzMDJgKSBpcyB1c2VkIGZvciB0aGUgcmVkaXJlY3QsIGJ1dCBhbiBhbHRlcm5hdGl2ZSBvbmUgY2FuIGJlCiAgICogc3BlY2lmaWVkIHVzaW5nIHRoZSBbc3RhdHVzXSBhcmd1bWVudC4KICAgKgogICAqIFRoaXMgbWV0aG9kIHdpbGwgYWxzbyBjYWxsIGBjbG9zZWAsIGFuZCB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzCiAgICogdGhlIGZ1dHVyZSByZXR1cm5lZCBieSBgY2xvc2VgLgogICAqLwogIEZ1dHVyZSByZWRpcmVjdChVcmkgbG9jYXRpb24sIHtpbnQgc3RhdHVzOiBIdHRwU3RhdHVzLm1vdmVkVGVtcG9yYXJpbHl9KTsKCiAgLyoqCiAgICogRGV0YWNoZXMgdGhlIHVuZGVybHlpbmcgc29ja2V0IGZyb20gdGhlIEhUVFAgc2VydmVyLiBXaGVuIHRoZQogICAqIHNvY2tldCBpcyBkZXRhY2hlZCB0aGUgSFRUUCBzZXJ2ZXIgd2lsbCBubyBsb25nZXIgcGVyZm9ybSBhbnkKICAgKiBvcGVyYXRpb25zIG9uIGl0LgogICAqCiAgICogVGhpcyBpcyBub3JtYWxseSB1c2VkIHdoZW4gYSBIVFRQIHVwZ3JhZGUgcmVxdWVzdCBpcyByZWNlaXZlZAogICAqIGFuZCB0aGUgY29tbXVuaWNhdGlvbiBzaG91bGQgY29udGludWUgd2l0aCBhIGRpZmZlcmVudCBwcm90b2NvbC4KICAgKgogICAqIElmIFt3cml0ZUhlYWRlcnNdIGlzIGB0cnVlYCwgdGhlIHN0YXR1cyBsaW5lIGFuZCBbaGVhZGVyc10gd2lsbCBiZSB3cml0dGVuCiAgICogdG8gdGhlIHNvY2tldCBiZWZvcmUgaXQncyBkZXRhY2hlZC4gSWYgYGZhbHNlYCwgdGhlIHNvY2tldCBpcyBkZXRhY2hlZAogICAqIGltbWVkaWF0ZWx5LCB3aXRob3V0IGFueSBkYXRhIHdyaXR0ZW4gdG8gdGhlIHNvY2tldC4gRGVmYXVsdCBpcyBgdHJ1ZWAuCiAgICovCiAgRnV0dXJlPFNvY2tldD4gZGV0YWNoU29ja2V0KHtib29sIHdyaXRlSGVhZGVyczogdHJ1ZX0pOwoKICAvKioKICAgKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjbGllbnQgY29ubmVjdGlvbi4gUmV0dXJucyBbOm51bGw6XSBpZiB0aGUKICAgKiBzb2NrZXQgaXMgbm90IGF2YWlsYWJsZS4KICAgKi8KICBIdHRwQ29ubmVjdGlvbkluZm8gZ2V0IGNvbm5lY3Rpb25JbmZvOwp9CgovKioKICogQSBjbGllbnQgdGhhdCByZWNlaXZlcyBjb250ZW50LCBzdWNoIGFzIHdlYiBwYWdlcywgZnJvbQogKiBhIHNlcnZlciB1c2luZyB0aGUgSFRUUCBwcm90b2NvbC4KICoKICogSHR0cENsaWVudCBjb250YWlucyBhIG51bWJlciBvZiBtZXRob2RzIHRvIHNlbmQgYW4gW0h0dHBDbGllbnRSZXF1ZXN0XQogKiB0byBhbiBIdHRwIHNlcnZlciBhbmQgcmVjZWl2ZSBhbiBbSHR0cENsaWVudFJlc3BvbnNlXSBiYWNrLgogKiBGb3IgZXhhbXBsZSwgeW91IGNhbiB1c2UgdGhlIFtnZXRdLCBbZ2V0VXJsXSwgW3Bvc3RdLCBhbmQgW3Bvc3RVcmxdIG1ldGhvZHMKICogZm9yIEdFVCBhbmQgUE9TVCByZXF1ZXN0cywgcmVzcGVjdGl2ZWx5LgogKgogKiAjIyBNYWtpbmcgYSBzaW1wbGUgR0VUIHJlcXVlc3Q6IGFuIGV4YW1wbGUKICoKICogQSBgZ2V0VXJsYCByZXF1ZXN0IGlzIGEgdHdvLXN0ZXAgcHJvY2VzcywgdHJpZ2dlcmVkIGJ5IHR3byBbRnV0dXJlXXMuCiAqIFdoZW4gdGhlIGZpcnN0IGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhIFtIdHRwQ2xpZW50UmVxdWVzdF0sIHRoZSB1bmRlcmx5aW5nCiAqIG5ldHdvcmsgY29ubmVjdGlvbiBoYXMgYmVlbiBlc3RhYmxpc2hlZCwgYnV0IG5vIGRhdGEgaGFzIGJlZW4gc2VudC4KICogSW4gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgZmlyc3QgZnV0dXJlLCB0aGUgSFRUUCBoZWFkZXJzIGFuZCBib2R5CiAqIGNhbiBiZSBzZXQgb24gdGhlIHJlcXVlc3QuIEVpdGhlciB0aGUgZmlyc3Qgd3JpdGUgdG8gdGhlIHJlcXVlc3Qgb2JqZWN0CiAqIG9yIGEgY2FsbCB0byBbY2xvc2VdIHNlbmRzIHRoZSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIuCiAqCiAqIFdoZW4gdGhlIEhUVFAgcmVzcG9uc2UgaXMgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyLAogKiB0aGUgc2Vjb25kIGZ1dHVyZSwgd2hpY2ggaXMgcmV0dXJuZWQgYnkgY2xvc2UsCiAqIGNvbXBsZXRlcyB3aXRoIGFuIFtIdHRwQ2xpZW50UmVzcG9uc2VdIG9iamVjdC4KICogVGhpcyBvYmplY3QgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBoZWFkZXJzIGFuZCBib2R5IG9mIHRoZSByZXNwb25zZS4KICogVGhlIGJvZHkgaXMgYXZhaWxhYmxlIGFzIGEgc3RyZWFtIGltcGxlbWVudGVkIGJ5IEh0dHBDbGllbnRSZXNwb25zZS4KICogSWYgYSBib2R5IGlzIHByZXNlbnQsIGl0IG11c3QgYmUgcmVhZC4gT3RoZXJ3aXNlLCBpdCBsZWFkcyB0byByZXNvdXJjZQogKiBsZWFrcy4gQ29uc2lkZXIgdXNpbmcgW0h0dHBDbGllbnRSZXNwb25zZS5kcmFpbl0gaWYgdGhlIGJvZHkgaXMgdW51c2VkLgogKgogKiAgICAgSHR0cENsaWVudCBjbGllbnQgPSBuZXcgSHR0cENsaWVudCgpOwogKiAgICAgY2xpZW50LmdldFVybChVcmkucGFyc2UoImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIikpCiAqICAgICAgICAgLnRoZW4oKEh0dHBDbGllbnRSZXF1ZXN0IHJlcXVlc3QpIHsKICogICAgICAgICAgIC8vIE9wdGlvbmFsbHkgc2V0IHVwIGhlYWRlcnMuLi4KICogICAgICAgICAgIC8vIE9wdGlvbmFsbHkgd3JpdGUgdG8gdGhlIHJlcXVlc3Qgb2JqZWN0Li4uCiAqICAgICAgICAgICAvLyBUaGVuIGNhbGwgY2xvc2UuCiAqICAgICAgICAgICAuLi4KICogICAgICAgICAgIHJldHVybiByZXF1ZXN0LmNsb3NlKCk7CiAqICAgICAgICAgfSkKICogICAgICAgICAudGhlbigoSHR0cENsaWVudFJlc3BvbnNlIHJlc3BvbnNlKSB7CiAqICAgICAgICAgICAvLyBQcm9jZXNzIHRoZSByZXNwb25zZS4KICogICAgICAgICAgIC4uLgogKiAgICAgICAgIH0pOwogKgogKiBUaGUgZnV0dXJlIGZvciBbSHR0cENsaWVudFJlcXVlc3RdIGlzIGNyZWF0ZWQgYnkgbWV0aG9kcyBzdWNoIGFzCiAqIFtnZXRVcmxdIGFuZCBbb3Blbl0uCiAqCiAqICMjIEhUVFBTIGNvbm5lY3Rpb25zCiAqCiAqIEFuIEh0dHBDbGllbnQgY2FuIG1ha2UgSFRUUFMgcmVxdWVzdHMsIGNvbm5lY3RpbmcgdG8gYSBzZXJ2ZXIgdXNpbmcKICogdGhlIFRMUyAoU1NMKSBzZWN1cmUgbmV0d29ya2luZyBwcm90b2NvbC4gQ2FsbGluZyBbZ2V0VXJsXSB3aXRoIGFuCiAqIGh0dHBzOiBzY2hlbWUgd2lsbCB3b3JrIGF1dG9tYXRpY2FsbHksIGlmIHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZSBpcwogKiBzaWduZWQgYnkgYSByb290IENBIChjZXJ0aWZpY2F0ZSBhdXRob3JpdHkpIG9uIHRoZSBkZWZhdWx0IGxpc3Qgb2YKICogd2VsbC1rbm93biB0cnVzdGVkIENBcywgY29tcGlsZWQgYnkgTW96aWxsYS4KICoKICogVG8gYWRkIGEgY3VzdG9tIHRydXN0ZWQgY2VydGlmaWNhdGUgYXV0aG9yaXR5LCBvciB0byBzZW5kIGEgY2xpZW50CiAqIGNlcnRpZmljYXRlIHRvIHNlcnZlcnMgdGhhdCByZXF1ZXN0IG9uZSwgcGFzcyBhIFtTZWN1cml0eUNvbnRleHRdIG9iamVjdAogKiBhcyB0aGUgb3B0aW9uYWwgYGNvbnRleHRgIGFyZ3VtZW50IHRvIHRoZSBgSHR0cENsaWVudGAgY29uc3RydWN0b3IuCiAqIFRoZSBkZXNpcmVkIHNlY3VyaXR5IG9wdGlvbnMgY2FuIGJlIHNldCBvbiB0aGUgW1NlY3VyaXR5Q29udGV4dF0gb2JqZWN0LgogKgogKiAjIyBIZWFkZXJzCiAqCiAqIEFsbCBIdHRwQ2xpZW50IHJlcXVlc3RzIHNldCB0aGUgZm9sbG93aW5nIGhlYWRlciBieSBkZWZhdWx0OgogKgogKiAgICAgQWNjZXB0LUVuY29kaW5nOiBnemlwCiAqCiAqIFRoaXMgYWxsb3dzIHRoZSBIVFRQIHNlcnZlciB0byB1c2UgZ3ppcCBjb21wcmVzc2lvbiBmb3IgdGhlIGJvZHkgaWYKICogcG9zc2libGUuIElmIHRoaXMgYmVoYXZpb3IgaXMgbm90IGRlc2lyZWQgc2V0IHRoZQogKiBgQWNjZXB0LUVuY29kaW5nYCBoZWFkZXIgdG8gc29tZXRoaW5nIGVsc2UuCiAqIFRvIHR1cm4gb2ZmIGd6aXAgY29tcHJlc3Npb24gb2YgdGhlIHJlc3BvbnNlLCBjbGVhciB0aGlzIGhlYWRlcjoKICoKICogICAgICByZXF1ZXN0LmhlYWRlcnMucmVtb3ZlQWxsKEh0dHBIZWFkZXJzLmFjY2VwdEVuY29kaW5nSGVhZGVyKQogKgogKiAjIyBDbG9zaW5nIHRoZSBIdHRwQ2xpZW50CiAqCiAqIFRoZSBIdHRwQ2xpZW50IHN1cHBvcnRzIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMgYW5kIGNhY2hlcyBuZXR3b3JrCiAqIGNvbm5lY3Rpb25zIHRvIHJldXNlIHRoZW0gZm9yIG11bHRpcGxlIHJlcXVlc3RzIHdoZW5ldmVyCiAqIHBvc3NpYmxlLiBUaGlzIG1lYW5zIHRoYXQgbmV0d29yayBjb25uZWN0aW9ucyBjYW4gYmUga2VwdCBvcGVuIGZvcgogKiBzb21lIHRpbWUgYWZ0ZXIgYSByZXF1ZXN0IGhhcyBjb21wbGV0ZWQuIFVzZSBIdHRwQ2xpZW50LmNsb3NlCiAqIHRvIGZvcmNlIHRoZSBIdHRwQ2xpZW50IG9iamVjdCB0byBzaHV0IGRvd24gYW5kIHRvIGNsb3NlIHRoZSBpZGxlCiAqIG5ldHdvcmsgY29ubmVjdGlvbnMuCiAqCiAqICMjIFR1cm5pbmcgcHJveGllcyBvbiBhbmQgb2ZmCiAqCiAqIEJ5IGRlZmF1bHQgdGhlIEh0dHBDbGllbnQgdXNlcyB0aGUgcHJveHkgY29uZmlndXJhdGlvbiBhdmFpbGFibGUKICogZnJvbSB0aGUgZW52aXJvbm1lbnQsIHNlZSBbZmluZFByb3h5RnJvbUVudmlyb25tZW50XS4gVG8gdHVybiBvZmYKICogdGhlIHVzZSBvZiBwcm94aWVzIHNldCB0aGUgW2ZpbmRQcm94eV0gcHJvcGVydHkgdG8KICogWzpudWxsOl0uCiAqCiAqICAgICBIdHRwQ2xpZW50IGNsaWVudCA9IG5ldyBIdHRwQ2xpZW50KCk7CiAqICAgICBjbGllbnQuZmluZFByb3h5ID0gbnVsbDsKICovCmFic3RyYWN0IGNsYXNzIEh0dHBDbGllbnQgewogIHN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdEh0dHBQb3J0ID0gODA7CiAgQERlcHJlY2F0ZWQoIlVzZSBkZWZhdWx0SHR0cFBvcnQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBERUZBVUxUX0hUVFBfUE9SVCA9IGRlZmF1bHRIdHRwUG9ydDsKCiAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0SHR0cHNQb3J0ID0gNDQzOwogIEBEZXByZWNhdGVkKCJVc2UgZGVmYXVsdEh0dHBzUG9ydCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IERFRkFVTFRfSFRUUFNfUE9SVCA9IGRlZmF1bHRIdHRwc1BvcnQ7CgogIC8vLyBFbmFibGUgbG9nZ2luZyBvZiBIVFRQIHJlcXVlc3RzIGZyb20gYWxsIFtIdHRwQ2xpZW50XXMgdG8gdGhlIGRldmVsb3BlcgogIC8vLyB0aW1lbGluZS4KICAvLy8KICAvLy8gRGVmYXVsdCBpcyBgZmFsc2VgLgogIHN0YXRpYyBzZXQgZW5hYmxlVGltZWxpbmVMb2dnaW5nKGJvb2wgdmFsdWUpIHsKICAgIF9lbmFibGVUaW1lbGluZUxvZ2dpbmcgPSB2YWx1ZSA/PyBmYWxzZTsKICB9CgogIC8vLyBDdXJyZW50IHN0YXRlIG9mIEhUVFAgcmVxdWVzdCBsb2dnaW5nIGZyb20gYWxsIFtIdHRwQ2xpZW50XXMgdG8gdGhlCiAgLy8vIGRldmVsb3BlciB0aW1lbGluZS4KICAvLy8KICAvLy8gRGVmYXVsdCBpcyBgZmFsc2VgLgogIHN0YXRpYyBib29sIGdldCBlbmFibGVUaW1lbGluZUxvZ2dpbmcgPT4gX2VuYWJsZVRpbWVsaW5lTG9nZ2luZzsKCiAgc3RhdGljIGJvb2wgX2VuYWJsZVRpbWVsaW5lTG9nZ2luZyA9IGZhbHNlOwoKICAvLy8gR2V0cyBhbmQgc2V0cyB0aGUgaWRsZSB0aW1lb3V0IG9mIG5vbi1hY3RpdmUgcGVyc2lzdGVudCAoa2VlcC1hbGl2ZSkKICAvLy8gY29ubmVjdGlvbnMuCiAgLy8vCiAgLy8vIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDE1IHNlY29uZHMuCiAgRHVyYXRpb24gaWRsZVRpbWVvdXQ7CgogIC8vLyBHZXRzIGFuZCBzZXRzIHRoZSBjb25uZWN0aW9uIHRpbWVvdXQuCiAgLy8vCiAgLy8vIFdoZW4gY29ubmVjdGluZyB0byBhIG5ldyBob3N0IGV4Y2VlZHMgdGhpcyB0aW1lb3V0LCBhIFtTb2NrZXRFeGNlcHRpb25dCiAgLy8vIGlzIHRocm93bi4gVGhlIHRpbWVvdXQgYXBwbGllcyBvbmx5IHRvIGNvbm5lY3Rpb25zIGluaXRpYXRlZCBhZnRlciB0aGUKICAvLy8gdGltZW91dCBpcyBzZXQuCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBpcyBgbnVsbGAsIHRoZSBPUyBkZWZhdWx0IHRpbWVvdXQgaXMgdXNlZC4gVGhlIGRlZmF1bHQgaXMKICAvLy8gYG51bGxgLgogIER1cmF0aW9uIGNvbm5lY3Rpb25UaW1lb3V0OwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaXZlIGNvbm5lY3Rpb25zLCB0byBhIHNpbmdsZSBob3N0LgogICAqCiAgICogSW5jcmVhc2luZyB0aGlzIG51bWJlciBtYXkgbG93ZXIgcGVyZm9ybWFuY2UgYW5kIHRha2UgdXAgdW53YW50ZWQKICAgKiBzeXN0ZW0gcmVzb3VyY2VzLgogICAqCiAgICogVG8gZGlzYWJsZSwgc2V0IHRvIGBudWxsYC4KICAgKgogICAqIERlZmF1bHQgaXMgYG51bGxgLgogICAqLwogIGludCBtYXhDb25uZWN0aW9uc1Blckhvc3Q7CgogIC8qKgogICAqIEdldHMgYW5kIHNldHMgd2hldGhlciB0aGUgYm9keSBvZiBhIHJlc3BvbnNlIHdpbGwgYmUgYXV0b21hdGljYWxseQogICAqIHVuY29tcHJlc3NlZC4KICAgKgogICAqIFRoZSBib2R5IG9mIGFuIEhUVFAgcmVzcG9uc2UgY2FuIGJlIGNvbXByZXNzZWQuIEluIG1vc3QKICAgKiBzaXR1YXRpb25zIHByb3ZpZGluZyB0aGUgdW4tY29tcHJlc3NlZCBib2R5IGlzIG1vc3QKICAgKiBjb252ZW5pZW50LiBUaGVyZWZvcmUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gdW4tY29tcHJlc3MgdGhlCiAgICogYm9keS4gSG93ZXZlciBpbiBzb21lIHNpdHVhdGlvbnMgKGUuZy4gaW1wbGVtZW50aW5nIGEgdHJhbnNwYXJlbnQKICAgKiBwcm94eSkga2VlcGluZyB0aGUgdW5jb21wcmVzc2VkIHN0cmVhbSBpcyByZXF1aXJlZC4KICAgKgogICAqIE5PVEU6IEhlYWRlcnMgaW4gdGhlIHJlc3BvbnNlIGFyZSBuZXZlciBtb2RpZmllZC4gVGhpcyBtZWFucwogICAqIHRoYXQgd2hlbiBhdXRvbWF0aWMgdW4tY29tcHJlc3Npb24gaXMgdHVybmVkIG9uIHRoZSB2YWx1ZSBvZiB0aGUKICAgKiBoZWFkZXIgYENvbnRlbnQtTGVuZ3RoYCB3aWxsIHJlZmxlY3QgdGhlIGxlbmd0aCBvZiB0aGUgb3JpZ2luYWwKICAgKiBjb21wcmVzc2VkIGJvZHkuIExpa2V3aXNlIHRoZSBoZWFkZXIgYENvbnRlbnQtRW5jb2RpbmdgIHdpbGwgYWxzbwogICAqIGhhdmUgdGhlIG9yaWdpbmFsIHZhbHVlIGluZGljYXRpbmcgY29tcHJlc3Npb24uCiAgICoKICAgKiBOT1RFOiBBdXRvbWF0aWMgdW4tY29tcHJlc3Npb24gaXMgb25seSBwZXJmb3JtZWQgaWYgdGhlCiAgICogYENvbnRlbnQtRW5jb2RpbmdgIGhlYWRlciB2YWx1ZSBpcyBgZ3ppcGAuCiAgICoKICAgKiBUaGlzIHZhbHVlIGFmZmVjdHMgYWxsIHJlc3BvbnNlcyBwcm9kdWNlZCBieSB0aGlzIGNsaWVudCBhZnRlciB0aGUKICAgKiB2YWx1ZSBpcyBjaGFuZ2VkLgogICAqCiAgICogVG8gZGlzYWJsZSwgc2V0IHRvIGBmYWxzZWAuCiAgICoKICAgKiBEZWZhdWx0IGlzIGB0cnVlYC4KICAgKi8KICBib29sIGF1dG9VbmNvbXByZXNzOwoKICAvLy8gR2V0cyBhbmQgc2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYFVzZXItQWdlbnRgIGhlYWRlciBmb3IgYWxsIHJlcXVlc3RzCiAgLy8vIGdlbmVyYXRlZCBieSB0aGlzIFtIdHRwQ2xpZW50XS4KICAvLy8KICAvLy8gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYERhcnQvPHZlcnNpb24+IChkYXJ0OmlvKWAuCiAgLy8vCiAgLy8vIElmIHRoZSB1c2VyQWdlbnQgaXMgc2V0IHRvIGBudWxsYCwgbm8gZGVmYXVsdCBgVXNlci1BZ2VudGAgaGVhZGVyIHdpbGwgYmUKICAvLy8gYWRkZWQgdG8gZWFjaCByZXF1ZXN0LgogIFN0cmluZyB1c2VyQWdlbnQ7CgogIGZhY3RvcnkgSHR0cENsaWVudCh7U2VjdXJpdHlDb250ZXh0IGNvbnRleHR9KSB7CiAgICBIdHRwT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IEh0dHBPdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gbmV3IF9IdHRwQ2xpZW50KGNvbnRleHQpOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5jcmVhdGVIdHRwQ2xpZW50KGNvbnRleHQpOwogIH0KCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24uCiAgICoKICAgKiBUaGUgSFRUUCBtZXRob2QgdG8gdXNlIGlzIHNwZWNpZmllZCBpbiBbbWV0aG9kXSwgdGhlIHNlcnZlciBpcwogICAqIHNwZWNpZmllZCB1c2luZyBbaG9zdF0gYW5kIFtwb3J0XSwgYW5kIHRoZSBwYXRoIChpbmNsdWRpbmcKICAgKiBhIHBvc3NpYmxlIHF1ZXJ5KSBpcyBzcGVjaWZpZWQgdXNpbmcgW3BhdGhdLgogICAqIFRoZSBwYXRoIG1heSBhbHNvIGNvbnRhaW4gYSBVUkkgZnJhZ21lbnQsIHdoaWNoIHdpbGwgYmUgaWdub3JlZC4KICAgKgogICAqIFRoZSBgSG9zdGAgaGVhZGVyIGZvciB0aGUgcmVxdWVzdCB3aWxsIGJlIHNldCB0byB0aGUgdmFsdWUgW2hvc3RdOltwb3J0XQogICAqIChpZiBbaG9zdF0gaXMgYW4gSVAgYWRkcmVzcywgaXQgd2lsbCBzdGlsbCBiZSB1c2VkIGluIHRoZSBgSG9zdGAgaGVhZGVyKS4KICAgKiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIHRocm91Z2ggdGhlIFtIdHRwQ2xpZW50UmVxdWVzdF0gaW50ZXJmYWNlIGJlZm9yZQogICAqIHRoZSByZXF1ZXN0IGlzIHNlbnQuCiAgICoKICAgKiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIGR1cmluZyBhbgogICAqIEhUVFAgdHJhbnNhY3Rpb24sIGFuZCB0aGUgb2JqZWN0cyByZXR1cm5lZCBieSB0aGUgZnV0dXJlcywgc2VlCiAgICogdGhlIG92ZXJhbGwgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGNsYXNzIFtIdHRwQ2xpZW50XS4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IG9wZW4oCiAgICAgIFN0cmluZyBtZXRob2QsIFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHBhdGgpOwoKICAvKioKICAgKiBPcGVucyBhIEhUVFAgY29ubmVjdGlvbi4KICAgKgogICAqIFRoZSBIVFRQIG1ldGhvZCBpcyBzcGVjaWZpZWQgaW4gW21ldGhvZF0gYW5kIHRoZSBVUkwgdG8gdXNlIGluCiAgICogW3VybF0uCiAgICoKICAgKiBUaGUgYEhvc3RgIGhlYWRlciBmb3IgdGhlIHJlcXVlc3Qgd2lsbCBiZSBzZXQgdG8gdGhlIHZhbHVlCiAgICogW1VyaS5ob3N0XTpbVXJpLnBvcnRdIGZyb20gW3VybF0gKGlmIFt1cmwuaG9zdF0gaXMgYW4gSVAgYWRkcmVzcywgaXQgd2lsbAogICAqIHN0aWxsIGJlIHVzZWQgaW4gdGhlIGBIb3N0YCBoZWFkZXIpLiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIHRocm91Z2ggdGhlCiAgICogW0h0dHBDbGllbnRSZXF1ZXN0XSBpbnRlcmZhY2UgYmVmb3JlIHRoZSByZXF1ZXN0IGlzIHNlbnQuCiAgICoKICAgKiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIGR1cmluZyBhbgogICAqIEhUVFAgdHJhbnNhY3Rpb24sIGFuZCB0aGUgb2JqZWN0cyByZXR1cm5lZCBieSB0aGUgZnV0dXJlcywgc2VlCiAgICogdGhlIG92ZXJhbGwgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGNsYXNzIFtIdHRwQ2xpZW50XS4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IG9wZW5VcmwoU3RyaW5nIG1ldGhvZCwgVXJpIHVybCk7CgogIC8qKgogICAqIE9wZW5zIGEgSFRUUCBjb25uZWN0aW9uIHVzaW5nIHRoZSBHRVQgbWV0aG9kLgogICAqCiAgICogVGhlIHNlcnZlciBpcyBzcGVjaWZpZWQgdXNpbmcgW2hvc3RdIGFuZCBbcG9ydF0sIGFuZCB0aGUgcGF0aAogICAqIChpbmNsdWRpbmcgYSBwb3NzaWJsZSBxdWVyeSkgaXMgc3BlY2lmaWVkIHVzaW5nCiAgICogW3BhdGhdLgogICAqCiAgICogU2VlIFtvcGVuXSBmb3IgZGV0YWlscy4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IGdldChTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIEdFVCBtZXRob2QuCiAgICoKICAgKiBUaGUgVVJMIHRvIHVzZSBpcyBzcGVjaWZpZWQgaW4gW3VybF0uCiAgICoKICAgKiBTZWUgW29wZW5VcmxdIGZvciBkZXRhaWxzLgogICAqLwogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gZ2V0VXJsKFVyaSB1cmwpOwoKICAvKioKICAgKiBPcGVucyBhIEhUVFAgY29ubmVjdGlvbiB1c2luZyB0aGUgUE9TVCBtZXRob2QuCiAgICoKICAgKiBUaGUgc2VydmVyIGlzIHNwZWNpZmllZCB1c2luZyBbaG9zdF0gYW5kIFtwb3J0XSwgYW5kIHRoZSBwYXRoCiAgICogKGluY2x1ZGluZyBhIHBvc3NpYmxlIHF1ZXJ5KSBpcyBzcGVjaWZpZWQgdXNpbmcKICAgKiBbcGF0aF0uCiAgICoKICAgKiBTZWUgW29wZW5dIGZvciBkZXRhaWxzLgogICAqLwogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gcG9zdChTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIFBPU1QgbWV0aG9kLgogICAqCiAgICogVGhlIFVSTCB0byB1c2UgaXMgc3BlY2lmaWVkIGluIFt1cmxdLgogICAqCiAgICogU2VlIFtvcGVuVXJsXSBmb3IgZGV0YWlscy4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IHBvc3RVcmwoVXJpIHVybCk7CgogIC8qKgogICAqIE9wZW5zIGEgSFRUUCBjb25uZWN0aW9uIHVzaW5nIHRoZSBQVVQgbWV0aG9kLgogICAqCiAgICogVGhlIHNlcnZlciBpcyBzcGVjaWZpZWQgdXNpbmcgW2hvc3RdIGFuZCBbcG9ydF0sIGFuZCB0aGUgcGF0aAogICAqIChpbmNsdWRpbmcgYSBwb3NzaWJsZSBxdWVyeSkgaXMgc3BlY2lmaWVkIHVzaW5nIFtwYXRoXS4KICAgKgogICAqIFNlZSBbb3Blbl0gZm9yIGRldGFpbHMuCiAgICovCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBwdXQoU3RyaW5nIGhvc3QsIGludCBwb3J0LCBTdHJpbmcgcGF0aCk7CgogIC8qKgogICAqIE9wZW5zIGEgSFRUUCBjb25uZWN0aW9uIHVzaW5nIHRoZSBQVVQgbWV0aG9kLgogICAqCiAgICogVGhlIFVSTCB0byB1c2UgaXMgc3BlY2lmaWVkIGluIFt1cmxdLgogICAqCiAgICogU2VlIFtvcGVuVXJsXSBmb3IgZGV0YWlscy4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IHB1dFVybChVcmkgdXJsKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIERFTEVURSBtZXRob2QuCiAgICoKICAgKiBUaGUgc2VydmVyIGlzIHNwZWNpZmllZCB1c2luZyBbaG9zdF0gYW5kIFtwb3J0XSwgYW5kIHRoZSBwYXRoCiAgICogKGluY2x1ZGluZyBhIHBvc3NpYmxlIHF1ZXJ5KSBpcyBzcGVjaWZpZWQgdXNpbmcgW3BhdGhdLgogICAqCiAgICogU2VlIFtvcGVuXSBmb3IgZGV0YWlscy4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IGRlbGV0ZShTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIERFTEVURSBtZXRob2QuCiAgICoKICAgKiBUaGUgVVJMIHRvIHVzZSBpcyBzcGVjaWZpZWQgaW4gW3VybF0uCiAgICoKICAgKiBTZWUgW29wZW5VcmxdIGZvciBkZXRhaWxzLgogICAqLwogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gZGVsZXRlVXJsKFVyaSB1cmwpOwoKICAvKioKICAgKiBPcGVucyBhIEhUVFAgY29ubmVjdGlvbiB1c2luZyB0aGUgUEFUQ0ggbWV0aG9kLgogICAqCiAgICogVGhlIHNlcnZlciBpcyBzcGVjaWZpZWQgdXNpbmcgW2hvc3RdIGFuZCBbcG9ydF0sIGFuZCB0aGUgcGF0aAogICAqIChpbmNsdWRpbmcgYSBwb3NzaWJsZSBxdWVyeSkgaXMgc3BlY2lmaWVkIHVzaW5nIFtwYXRoXS4KICAgKgogICAqIFNlZSBbb3Blbl0gZm9yIGRldGFpbHMuCiAgICovCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBwYXRjaChTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIFBBVENIIG1ldGhvZC4KICAgKgogICAqIFRoZSBVUkwgdG8gdXNlIGlzIHNwZWNpZmllZCBpbiBbdXJsXS4KICAgKgogICAqIFNlZSBbb3BlblVybF0gZm9yIGRldGFpbHMuCiAgICovCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBwYXRjaFVybChVcmkgdXJsKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIEhFQUQgbWV0aG9kLgogICAqCiAgICogVGhlIHNlcnZlciBpcyBzcGVjaWZpZWQgdXNpbmcgW2hvc3RdIGFuZCBbcG9ydF0sIGFuZCB0aGUgcGF0aAogICAqIChpbmNsdWRpbmcgYSBwb3NzaWJsZSBxdWVyeSkgaXMgc3BlY2lmaWVkIHVzaW5nIFtwYXRoXS4KICAgKgogICAqIFNlZSBbb3Blbl0gZm9yIGRldGFpbHMuCiAgICovCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBoZWFkKFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHBhdGgpOwoKICAvKioKICAgKiBPcGVucyBhIEhUVFAgY29ubmVjdGlvbiB1c2luZyB0aGUgSEVBRCBtZXRob2QuCiAgICoKICAgKiBUaGUgVVJMIHRvIHVzZSBpcyBzcGVjaWZpZWQgaW4gW3VybF0uCiAgICoKICAgKiBTZWUgW29wZW5VcmxdIGZvciBkZXRhaWxzLgogICAqLwogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gaGVhZFVybChVcmkgdXJsKTsKCiAgLyoqCiAgICogU2V0cyB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYSBzaXRlIGlzIHJlcXVlc3RpbmcKICAgKiBhdXRoZW50aWNhdGlvbi4gVGhlIFVSTCByZXF1ZXN0ZWQgYW5kIHRoZSBzZWN1cml0eSByZWFsbSBmcm9tIHRoZQogICAqIHNlcnZlciBhcmUgcGFzc2VkIGluIHRoZSBhcmd1bWVudHMgW3VybF0gYW5kIFtyZWFsbV0uCiAgICoKICAgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIFtGdXR1cmVdIHdoaWNoIHNob3VsZCBjb21wbGV0ZSB3aGVuIHRoZQogICAqIGF1dGhlbnRpY2F0aW9uIGhhcyBiZWVuIHJlc29sdmVkLiBJZiBjcmVkZW50aWFscyBjYW5ub3QgYmUKICAgKiBwcm92aWRlZCB0aGUgW0Z1dHVyZV0gc2hvdWxkIGNvbXBsZXRlIHdpdGggWzpmYWxzZTpdLiBJZgogICAqIGNyZWRlbnRpYWxzIGFyZSBhdmFpbGFibGUgdGhlIGZ1bmN0aW9uIHNob3VsZCBhZGQgdGhlc2UgdXNpbmcKICAgKiBbYWRkQ3JlZGVudGlhbHNdIGJlZm9yZSBjb21wbGV0aW5nIHRoZSBbRnV0dXJlXSB3aXRoIHRoZSB2YWx1ZQogICAqIFs6dHJ1ZTpdLgogICAqCiAgICogSWYgdGhlIFtGdXR1cmVdIGNvbXBsZXRlcyB3aXRoIFs6dHJ1ZTpdIHRoZSByZXF1ZXN0IHdpbGwgYmUgcmV0cmllZAogICAqIHVzaW5nIHRoZSB1cGRhdGVkIGNyZWRlbnRpYWxzLCBob3dldmVyLCB0aGUgcmV0cmllZCByZXF1ZXN0IHdpbGwgbm90CiAgICogY2FycnkgdGhlIG9yaWdpbmFsIHJlcXVlc3QgcGF5bG9hZC4gT3RoZXJ3aXNlIHJlc3BvbnNlIHByb2Nlc3Npbmcgd2lsbAogICAqIGNvbnRpbnVlIG5vcm1hbGx5LgogICAqCiAgICogSWYgaXQgaXMga25vd24gdGhhdCB0aGUgcmVtb3RlIHNlcnZlciByZXF1aXJlcyBhdXRoZW50aWNhdGlvbiBmb3IgYWxsCiAgICogcmVxdWVzdHMsIGl0IGlzIGFkdmlzYWJsZSB0byB1c2UgW2FkZENyZWRlbnRpYWxzXSBkaXJlY3RseSwgb3IgbWFudWFsbHkKICAgKiBzZXQgdGhlIGAnYXV0aG9yaXphdGlvbidgIGhlYWRlciBvbiB0aGUgcmVxdWVzdCB0byBhdm9pZCB0aGUgb3ZlcmhlYWQKICAgKiBvZiBhIGZhaWxlZCByZXF1ZXN0LCBvciBpc3N1ZXMgZHVlIHRvIG1pc3NpbmcgcmVxdWVzdCBwYXlsb2FkIG9uIHJldHJpZWQKICAgKiByZXF1ZXN0LgogICAqLwogIHNldCBhdXRoZW50aWNhdGUoRnV0dXJlPGJvb2w+IGYoVXJpIHVybCwgU3RyaW5nIHNjaGVtZSwgU3RyaW5nIHJlYWxtKSk7CgogIC8qKgogICAqIEFkZCBjcmVkZW50aWFscyB0byBiZSB1c2VkIGZvciBhdXRob3JpemluZyBIVFRQIHJlcXVlc3RzLgogICAqLwogIHZvaWQgYWRkQ3JlZGVudGlhbHMoVXJpIHVybCwgU3RyaW5nIHJlYWxtLCBIdHRwQ2xpZW50Q3JlZGVudGlhbHMgY3JlZGVudGlhbHMpOwoKICAvKioKICAgKiBTZXRzIHRoZSBmdW5jdGlvbiB1c2VkIHRvIHJlc29sdmUgdGhlIHByb3h5IHNlcnZlciB0byBiZSB1c2VkIGZvcgogICAqIG9wZW5pbmcgYSBIVFRQIGNvbm5lY3Rpb24gdG8gdGhlIHNwZWNpZmllZCBbdXJsXS4gSWYgdGhpcwogICAqIGZ1bmN0aW9uIGlzIG5vdCBzZXQsIGRpcmVjdCBjb25uZWN0aW9ucyB3aWxsIGFsd2F5cyBiZSB1c2VkLgogICAqCiAgICogVGhlIHN0cmluZyByZXR1cm5lZCBieSBbZl0gbXVzdCBiZSBpbiB0aGUgZm9ybWF0IHVzZWQgYnkgYnJvd3NlcgogICAqIFBBQyAocHJveHkgYXV0by1jb25maWcpIHNjcmlwdHMuIFRoYXQgaXMgZWl0aGVyCiAgICoKICAgKiAgICAgIkRJUkVDVCIKICAgKgogICAqIGZvciB1c2luZyBhIGRpcmVjdCBjb25uZWN0aW9uIG9yCiAgICoKICAgKiAgICAgIlBST1hZIGhvc3Q6cG9ydCIKICAgKgogICAqIGZvciB1c2luZyB0aGUgcHJveHkgc2VydmVyIFs6aG9zdDpdIG9uIHBvcnQgWzpwb3J0Ol0uCiAgICoKICAgKiBBIGNvbmZpZ3VyYXRpb24gY2FuIGNvbnRhaW4gc2V2ZXJhbCBjb25maWd1cmF0aW9uIGVsZW1lbnRzCiAgICogc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnMsIGUuZy4KICAgKgogICAqICAgICAiUFJPWFkgaG9zdDpwb3J0OyBQUk9YWSBob3N0Mjpwb3J0MjsgRElSRUNUIgogICAqCiAgICogVGhlIHN0YXRpYyBmdW5jdGlvbiBbZmluZFByb3h5RnJvbUVudmlyb25tZW50XSBvbiB0aGlzIGNsYXNzIGNhbgogICAqIGJlIHVzZWQgdG8gaW1wbGVtZW50IHByb3h5IHNlcnZlciByZXNvbHZpbmcgYmFzZWQgb24gZW52aXJvbm1lbnQKICAgKiB2YXJpYWJsZXMuCiAgICovCiAgc2V0IGZpbmRQcm94eShTdHJpbmcgZihVcmkgdXJsKSk7CgogIC8qKgogICAqIEZ1bmN0aW9uIGZvciByZXNvbHZpbmcgdGhlIHByb3h5IHNlcnZlciB0byBiZSB1c2VkIGZvciBhIEhUVFAKICAgKiBjb25uZWN0aW9uIGZyb20gdGhlIHByb3h5IGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVkIHRocm91Z2gKICAgKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCiAgICoKICAgKiBUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgdGFrZW4gaW50byBhY2NvdW50OgogICAqCiAgICogICAgIGh0dHBfcHJveHkKICAgKiAgICAgaHR0cHNfcHJveHkKICAgKiAgICAgbm9fcHJveHkKICAgKiAgICAgSFRUUF9QUk9YWQogICAqICAgICBIVFRQU19QUk9YWQogICAqICAgICBOT19QUk9YWQogICAqCiAgICogWzpodHRwX3Byb3h5Ol0gYW5kIFs6SFRUUF9QUk9YWTpdIHNwZWNpZnkgdGhlIHByb3h5IHNlcnZlciB0byB1c2UgZm9yCiAgICogaHR0cDovLyB1cmxzLiBVc2UgdGhlIGZvcm1hdCBbOmhvc3RuYW1lOnBvcnQ6XS4gSWYgbm8gcG9ydCBpcyB1c2VkIGEKICAgKiBkZWZhdWx0IG9mIDEwODAgd2lsbCBiZSB1c2VkLiBJZiBib3RoIGFyZSBzZXQgdGhlIGxvd2VyIGNhc2Ugb25lIHRha2VzCiAgICogcHJlY2VkZW5jZS4KICAgKgogICAqIFs6aHR0cHNfcHJveHk6XSBhbmQgWzpIVFRQU19QUk9YWTpdIHNwZWNpZnkgdGhlIHByb3h5IHNlcnZlciB0byB1c2UgZm9yCiAgICogaHR0cHM6Ly8gdXJscy4gVXNlIHRoZSBmb3JtYXQgWzpob3N0bmFtZTpwb3J0Ol0uIElmIG5vIHBvcnQgaXMgdXNlZCBhCiAgICogZGVmYXVsdCBvZiAxMDgwIHdpbGwgYmUgdXNlZC4gSWYgYm90aCBhcmUgc2V0IHRoZSBsb3dlciBjYXNlIG9uZSB0YWtlcwogICAqIHByZWNlZGVuY2UuCiAgICoKICAgKiBbOm5vX3Byb3h5Ol0gYW5kIFs6Tk9fUFJPWFk6XSBzcGVjaWZ5IGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YKICAgKiBwb3N0Zml4ZXMgb2YgaG9zdG5hbWVzIGZvciB3aGljaCBub3QgdG8gdXNlIHRoZSBwcm94eQogICAqIHNlcnZlci4gRS5nLiB0aGUgdmFsdWUgImxvY2FsaG9zdCwxMjcuMC4wLjEiIHdpbGwgbWFrZSByZXF1ZXN0cwogICAqIHRvIGJvdGggImxvY2FsaG9zdCIgYW5kICIxMjcuMC4wLjEiIG5vdCB1c2UgYSBwcm94eS4gSWYgYm90aCBhcmUgc2V0CiAgICogdGhlIGxvd2VyIGNhc2Ugb25lIHRha2VzIHByZWNlZGVuY2UuCiAgICoKICAgKiBUbyBhY3RpdmF0ZSB0aGlzIHdheSBvZiByZXNvbHZpbmcgcHJveGllcyBhc3NpZ24gdGhpcyBmdW5jdGlvbiB0bwogICAqIHRoZSBbZmluZFByb3h5XSBwcm9wZXJ0eSBvbiB0aGUgW0h0dHBDbGllbnRdLgogICAqCiAgICogICAgIEh0dHBDbGllbnQgY2xpZW50ID0gbmV3IEh0dHBDbGllbnQoKTsKICAgKiAgICAgY2xpZW50LmZpbmRQcm94eSA9IEh0dHBDbGllbnQuZmluZFByb3h5RnJvbUVudmlyb25tZW50OwogICAqCiAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gdXNlIHRoZSBzeXN0ZW0gZW52aXJvbm1lbnQgeW91IGNhbiB1c2UgYQogICAqIGRpZmZlcmVudCBvbmUgYnkgd3JhcHBpbmcgdGhlIGZ1bmN0aW9uLgogICAqCiAgICogICAgIEh0dHBDbGllbnQgY2xpZW50ID0gbmV3IEh0dHBDbGllbnQoKTsKICAgKiAgICAgY2xpZW50LmZpbmRQcm94eSA9ICh1cmwpIHsKICAgKiAgICAgICByZXR1cm4gSHR0cENsaWVudC5maW5kUHJveHlGcm9tRW52aXJvbm1lbnQoCiAgICogICAgICAgICAgIHVybCwgZW52aXJvbm1lbnQ6IHsiaHR0cF9wcm94eSI6IC4uLiwgIm5vX3Byb3h5IjogLi4ufSk7CiAgICogICAgIH0KICAgKgogICAqIElmIGEgcHJveHkgcmVxdWlyZXMgYXV0aGVudGljYXRpb24gaXQgaXMgcG9zc2libGUgdG8gY29uZmlndXJlCiAgICogdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhcyB3ZWxsLiBVc2UgdGhlIGZvcm1hdAogICAqIFs6dXNlcm5hbWU6cGFzc3dvcmRAaG9zdG5hbWU6cG9ydDpdIHRvIGluY2x1ZGUgdGhlIHVzZXJuYW1lIGFuZAogICAqIHBhc3N3b3JkLiBBbHRlcm5hdGl2ZWx5IHRoZSBBUEkgW2FkZFByb3h5Q3JlZGVudGlhbHNdIGNhbiBiZSB1c2VkCiAgICogdG8gc2V0IGNyZWRlbnRpYWxzIGZvciBwcm94aWVzIHdoaWNoIHJlcXVpcmUgYXV0aGVudGljYXRpb24uCiAgICovCiAgc3RhdGljIFN0cmluZyBmaW5kUHJveHlGcm9tRW52aXJvbm1lbnQoVXJpIHVybCwKICAgICAge01hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnR9KSB7CiAgICBIdHRwT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IEh0dHBPdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX0h0dHBDbGllbnQuX2ZpbmRQcm94eUZyb21FbnZpcm9ubWVudCh1cmwsIGVudmlyb25tZW50KTsKICAgIH0KICAgIHJldHVybiBvdmVycmlkZXMuZmluZFByb3h5RnJvbUVudmlyb25tZW50KHVybCwgZW52aXJvbm1lbnQpOwogIH0KCiAgLyoqCiAgICogU2V0cyB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYSBwcm94eSBpcyByZXF1ZXN0aW5nCiAgICogYXV0aGVudGljYXRpb24uIEluZm9ybWF0aW9uIG9uIHRoZSBwcm94eSBpbiB1c2UgYW5kIHRoZSBzZWN1cml0eQogICAqIHJlYWxtIGZvciB0aGUgYXV0aGVudGljYXRpb24gYXJlIHBhc3NlZCBpbiB0aGUgYXJndW1lbnRzIFtob3N0XSwKICAgKiBbcG9ydF0gYW5kIFtyZWFsbV0uCiAgICoKICAgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIFtGdXR1cmVdIHdoaWNoIHNob3VsZCBjb21wbGV0ZSB3aGVuIHRoZQogICAqIGF1dGhlbnRpY2F0aW9uIGhhcyBiZWVuIHJlc29sdmVkLiBJZiBjcmVkZW50aWFscyBjYW5ub3QgYmUKICAgKiBwcm92aWRlZCB0aGUgW0Z1dHVyZV0gc2hvdWxkIGNvbXBsZXRlIHdpdGggWzpmYWxzZTpdLiBJZgogICAqIGNyZWRlbnRpYWxzIGFyZSBhdmFpbGFibGUgdGhlIGZ1bmN0aW9uIHNob3VsZCBhZGQgdGhlc2UgdXNpbmcKICAgKiBbYWRkUHJveHlDcmVkZW50aWFsc10gYmVmb3JlIGNvbXBsZXRpbmcgdGhlIFtGdXR1cmVdIHdpdGggdGhlIHZhbHVlCiAgICogWzp0cnVlOl0uCiAgICoKICAgKiBJZiB0aGUgW0Z1dHVyZV0gY29tcGxldGVzIHdpdGggWzp0cnVlOl0gdGhlIHJlcXVlc3Qgd2lsbCBiZSByZXRyaWVkCiAgICogdXNpbmcgdGhlIHVwZGF0ZWQgY3JlZGVudGlhbHMuIE90aGVyd2lzZSByZXNwb25zZSBwcm9jZXNzaW5nIHdpbGwKICAgKiBjb250aW51ZSBub3JtYWxseS4KICAgKi8KICBzZXQgYXV0aGVudGljYXRlUHJveHkoCiAgICAgIEZ1dHVyZTxib29sPiBmKFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHNjaGVtZSwgU3RyaW5nIHJlYWxtKSk7CgogIC8qKgogICAqIEFkZCBjcmVkZW50aWFscyB0byBiZSB1c2VkIGZvciBhdXRob3JpemluZyBIVFRQIHByb3hpZXMuCiAgICovCiAgdm9pZCBhZGRQcm94eUNyZWRlbnRpYWxzKAogICAgICBTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyByZWFsbSwgSHR0cENsaWVudENyZWRlbnRpYWxzIGNyZWRlbnRpYWxzKTsKCiAgLyoqCiAgICogU2V0cyBhIGNhbGxiYWNrIHRoYXQgd2lsbCBkZWNpZGUgd2hldGhlciB0byBhY2NlcHQgYSBzZWN1cmUgY29ubmVjdGlvbgogICAqIHdpdGggYSBzZXJ2ZXIgY2VydGlmaWNhdGUgdGhhdCBjYW5ub3QgYmUgYXV0aGVudGljYXRlZCBieSBhbnkgb2Ygb3VyCiAgICogdHJ1c3RlZCByb290IGNlcnRpZmljYXRlcy4KICAgKgogICAqIFdoZW4gYW4gc2VjdXJlIEhUVFAgcmVxdWVzdCBpZiBtYWRlLCB1c2luZyB0aGlzIEh0dHBDbGllbnQsIGFuZCB0aGUKICAgKiBzZXJ2ZXIgcmV0dXJucyBhIHNlcnZlciBjZXJ0aWZpY2F0ZSB0aGF0IGNhbm5vdCBiZSBhdXRoZW50aWNhdGVkLCB0aGUKICAgKiBjYWxsYmFjayBpcyBjYWxsZWQgYXN5bmNocm9ub3VzbHkgd2l0aCB0aGUgW1g1MDlDZXJ0aWZpY2F0ZV0gb2JqZWN0IGFuZAogICAqIHRoZSBzZXJ2ZXIncyBob3N0bmFtZSBhbmQgcG9ydC4gIElmIHRoZSB2YWx1ZSBvZiBbYmFkQ2VydGlmaWNhdGVDYWxsYmFja10KICAgKiBpcyBbOm51bGw6XSwgdGhlIGJhZCBjZXJ0aWZpY2F0ZSBpcyByZWplY3RlZCwgYXMgaWYgdGhlIGNhbGxiYWNrCiAgICogcmV0dXJuZWQgWzpmYWxzZTpdCiAgICoKICAgKiBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCB0aGUgc2VjdXJlIGNvbm5lY3Rpb24gaXMgYWNjZXB0ZWQgYW5kIHRoZQogICAqIFs6RnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PjpdIHRoYXQgd2FzIHJldHVybmVkIGZyb20gdGhlIGNhbGwgbWFraW5nIHRoZQogICAqIHJlcXVlc3QgY29tcGxldGVzIHdpdGggYSB2YWxpZCBIdHRwUmVxdWVzdCBvYmplY3QuIElmIHRoZSBjYWxsYmFjayByZXR1cm5zCiAgICogZmFsc2UsIHRoZSBbOkZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD46XSBjb21wbGV0ZXMgd2l0aCBhbiBleGNlcHRpb24uCiAgICoKICAgKiBJZiBhIGJhZCBjZXJ0aWZpY2F0ZSBpcyByZWNlaXZlZCBvbiBhIGNvbm5lY3Rpb24gYXR0ZW1wdCwgdGhlIGxpYnJhcnkgY2FsbHMKICAgKiB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgdGhlIHZhbHVlIG9mIGJhZENlcnRpZmljYXRlQ2FsbGJhY2sgYXQgdGhlIHRpbWUKICAgKiB0aGUgcmVxdWVzdCBpcyBtYWRlLCBldmVuIGlmIHRoZSB2YWx1ZSBvZiBiYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrCiAgICogaGFzIGNoYW5nZWQgc2luY2UgdGhlbi4KICAgKi8KICBzZXQgYmFkQ2VydGlmaWNhdGVDYWxsYmFjaygKICAgICAgYm9vbCBjYWxsYmFjayhYNTA5Q2VydGlmaWNhdGUgY2VydCwgU3RyaW5nIGhvc3QsIGludCBwb3J0KSk7CgogIC8vLyBTaHV0cyBkb3duIHRoZSBIVFRQIGNsaWVudC4KICAvLy8KICAvLy8gSWYgW2ZvcmNlXSBpcyBgZmFsc2VgICh0aGUgZGVmYXVsdCkgdGhlIFtIdHRwQ2xpZW50XSB3aWxsIGJlIGtlcHQgYWxpdmUKICAvLy8gdW50aWwgYWxsIGFjdGl2ZSBjb25uZWN0aW9ucyBhcmUgZG9uZS4gSWYgW2ZvcmNlXSBpcyBgdHJ1ZWAgYW55IGFjdGl2ZQogIC8vLyBjb25uZWN0aW9ucyB3aWxsIGJlIGNsb3NlZCB0byBpbW1lZGlhdGVseSByZWxlYXNlIGFsbCByZXNvdXJjZXMuIFRoZXNlCiAgLy8vIGNsb3NlZCBjb25uZWN0aW9ucyB3aWxsIHJlY2VpdmUgYW4gZXJyb3IgZXZlbnQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgY2xpZW50CiAgLy8vIHdhcyBzaHV0IGRvd24uIEluIGJvdGggY2FzZXMgdHJ5aW5nIHRvIGVzdGFibGlzaCBhIG5ldyBjb25uZWN0aW9uIGFmdGVyCiAgLy8vIGNhbGxpbmcgW2Nsb3NlXSB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbi4KICB2b2lkIGNsb3NlKHtib29sIGZvcmNlOiBmYWxzZX0pOwp9CgovKioKICogSFRUUCByZXF1ZXN0IGZvciBhIGNsaWVudCBjb25uZWN0aW9uLgogKgogKiBUbyBzZXQgdXAgYSByZXF1ZXN0LCBzZXQgdGhlIGhlYWRlcnMgdXNpbmcgdGhlIGhlYWRlcnMgcHJvcGVydHkKICogcHJvdmlkZWQgaW4gdGhpcyBjbGFzcyBhbmQgd3JpdGUgdGhlIGRhdGEgdG8gdGhlIGJvZHkgb2YgdGhlIHJlcXVlc3QuCiAqIEh0dHBDbGllbnRSZXF1ZXN0IGlzIGFuIFtJT1NpbmtdLiBVc2UgdGhlIG1ldGhvZHMgZnJvbSBJT1NpbmssCiAqIHN1Y2ggYXMgd3JpdGVDaGFyQ29kZSgpLCB0byB3cml0ZSB0aGUgYm9keSBvZiB0aGUgSFRUUAogKiByZXF1ZXN0LiBXaGVuIG9uZSBvZiB0aGUgSU9TaW5rIG1ldGhvZHMgaXMgdXNlZCBmb3IgdGhlIGZpcnN0CiAqIHRpbWUsIHRoZSByZXF1ZXN0IGhlYWRlciBpcyBzZW50LiBDYWxsaW5nIGFueSBtZXRob2RzIHRoYXQKICogY2hhbmdlIHRoZSBoZWFkZXIgYWZ0ZXIgaXQgaXMgc2VudCB0aHJvd3MgYW4gZXhjZXB0aW9uLgogKgogKiBXaGVuIHdyaXRpbmcgc3RyaW5nIGRhdGEgdGhyb3VnaCB0aGUgW0lPU2lua10gdGhlCiAqIGVuY29kaW5nIHVzZWQgaXMgZGV0ZXJtaW5lZCBmcm9tIHRoZSAiY2hhcnNldCIgcGFyYW1ldGVyIG9mCiAqIHRoZSAiQ29udGVudC1UeXBlIiBoZWFkZXIuCiAqCiAqICAgICBIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0ID0gLi4uCiAqICAgICByZXF1ZXN0LmhlYWRlcnMuY29udGVudFR5cGUKICogICAgICAgICA9IG5ldyBDb250ZW50VHlwZSgiYXBwbGljYXRpb24iLCAianNvbiIsIGNoYXJzZXQ6ICJ1dGYtOCIpOwogKiAgICAgcmVxdWVzdC53cml0ZSguLi4pOyAgLy8gU3RyaW5ncyB3cml0dGVuIHdpbGwgYmUgVVRGLTggZW5jb2RlZC4KICoKICogSWYgbm8gY2hhcnNldCBpcyBwcm92aWRlZCB0aGUgZGVmYXVsdCBvZiBJU08tODg1OS0xIChMYXRpbiAxKSBpcwogKiBiZSB1c2VkLgogKgogKiAgICAgSHR0cENsaWVudFJlcXVlc3QgcmVxdWVzdCA9IC4uLgogKiAgICAgcmVxdWVzdC5oZWFkZXJzLmFkZChIdHRwSGVhZGVycy5jb250ZW50VHlwZUhlYWRlciwgInRleHQvcGxhaW4iKTsKICogICAgIHJlcXVlc3Qud3JpdGUoLi4uKTsgIC8vIFN0cmluZ3Mgd3JpdHRlbiB3aWxsIGJlIElTTy04ODU5LTEgZW5jb2RlZC4KICoKICogQW4gZXhjZXB0aW9uIGlzIHRocm93biBpZiB5b3UgdXNlIGFuIHVuc3VwcG9ydGVkIGVuY29kaW5nIGFuZCB0aGUKICogYHdyaXRlKClgIG1ldGhvZCBiZWluZyB1c2VkIHRha2VzIGEgc3RyaW5nIHBhcmFtZXRlci4KICovCmFic3RyYWN0IGNsYXNzIEh0dHBDbGllbnRSZXF1ZXN0IGltcGxlbWVudHMgSU9TaW5rIHsKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSByZXF1ZXN0ZWQgcGVyc2lzdGVudCBjb25uZWN0aW9uIHN0YXRlLgogICAqCiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgWzp0cnVlOl0uCiAgICovCiAgYm9vbCBwZXJzaXN0ZW50Q29ubmVjdGlvbjsKCiAgLyoqCiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gWzp0cnVlOl0gaWYgdGhpcyByZXF1ZXN0IHNob3VsZAogICAqIGF1dG9tYXRpY2FsbHkgZm9sbG93IHJlZGlyZWN0cy4gVGhlIGRlZmF1bHQgaXMgWzp0cnVlOl0uCiAgICoKICAgKiBBdXRvbWF0aWMgcmVkaXJlY3Qgd2lsbCBvbmx5IGhhcHBlbiBmb3IgIkdFVCIgYW5kICJIRUFEIiByZXF1ZXN0cwogICAqIGFuZCBvbmx5IGZvciB0aGUgc3RhdHVzIGNvZGVzIFs6SHR0cFN0YXR1cy5tb3ZlZFBlcm1hbmVudGx5Ol0KICAgKiAoMzAxKSwgWzpIdHRwU3RhdHVzLmZvdW5kOl0gKDMwMiksCiAgICogWzpIdHRwU3RhdHVzLm1vdmVkVGVtcG9yYXJpbHk6XSAoMzAyLCBhbGlhcyBmb3IKICAgKiBbOkh0dHBTdGF0dXMuZm91bmQ6XSksIFs6SHR0cFN0YXR1cy5zZWVPdGhlcjpdICgzMDMpIGFuZAogICAqIFs6SHR0cFN0YXR1cy50ZW1wb3JhcnlSZWRpcmVjdDpdICgzMDcpLiBGb3IKICAgKiBbOkh0dHBTdGF0dXMuc2VlT3RoZXI6XSAoMzAzKSBhdXRvbWF0aWMgcmVkaXJlY3Qgd2lsbCBhbHNvIGhhcHBlbgogICAqIGZvciAiUE9TVCIgcmVxdWVzdHMgd2l0aCB0aGUgbWV0aG9kIGNoYW5nZWQgdG8gIkdFVCIgd2hlbgogICAqIGZvbGxvd2luZyB0aGUgcmVkaXJlY3QuCiAgICoKICAgKiBBbGwgaGVhZGVycyBhZGRlZCB0byB0aGUgcmVxdWVzdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSByZWRpcmVjdGlvbgogICAqIHJlcXVlc3QocykuIEhvd2V2ZXIsIGFueSBib2R5IHNlbmQgd2l0aCB0aGUgcmVxdWVzdCB3aWxsIG5vdCBiZQogICAqIHBhcnQgb2YgdGhlIHJlZGlyZWN0aW9uIHJlcXVlc3QocykuCiAgICovCiAgYm9vbCBmb2xsb3dSZWRpcmVjdHM7CgogIC8qKgogICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZWRpcmVjdHMgdG8gZm9sbG93CiAgICogd2hlbiBbZm9sbG93UmVkaXJlY3RzXSBpcyBgdHJ1ZWAuIElmIHRoaXMgbnVtYmVyIGlzIGV4Y2VlZGVkCiAgICogYW4gZXJyb3IgZXZlbnQgd2lsbCBiZSBhZGRlZCB3aXRoIGEgW1JlZGlyZWN0RXhjZXB0aW9uXS4KICAgKgogICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDUuCiAgICovCiAgaW50IG1heFJlZGlyZWN0czsKCiAgLyoqCiAgICogVGhlIG1ldGhvZCBvZiB0aGUgcmVxdWVzdC4KICAgKi8KICBTdHJpbmcgZ2V0IG1ldGhvZDsKCiAgLyoqCiAgICogVGhlIHVyaSBvZiB0aGUgcmVxdWVzdC4KICAgKi8KICBVcmkgZ2V0IHVyaTsKCiAgLy8vIEdldHMgYW5kIHNldHMgdGhlIGNvbnRlbnQgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LgogIC8vLwogIC8vLyBJZiB0aGUgc2l6ZSBvZiB0aGUgcmVxdWVzdCBpcyBub3Qga25vd24gaW4gYWR2YW5jZSBzZXQgY29udGVudCBsZW5ndGggdG8KICAvLy8gLTEsIHdoaWNoIGlzIGFsc28gdGhlIGRlZmF1bHQuCiAgaW50IGNvbnRlbnRMZW5ndGg7CgogIC8qKgogICAqIEdldHMgb3Igc2V0cyBpZiB0aGUgW0h0dHBDbGllbnRSZXF1ZXN0XSBzaG91bGQgYnVmZmVyIG91dHB1dC4KICAgKgogICAqIERlZmF1bHQgdmFsdWUgaXMgYHRydWVgLgogICAqCiAgICogX19Ob3RlX186IERpc2FibGluZyBidWZmZXJpbmcgb2YgdGhlIG91dHB1dCBjYW4gcmVzdWx0IGluIHZlcnkgcG9vcgogICAqIHBlcmZvcm1hbmNlLCB3aGVuIHdyaXRpbmcgbWFueSBzbWFsbCBjaHVua3MuCiAgICovCiAgYm9vbCBidWZmZXJPdXRwdXQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGNsaWVudCByZXF1ZXN0IGhlYWRlcnMuCiAgICoKICAgKiBUaGUgY2xpZW50IHJlcXVlc3QgaGVhZGVycyBjYW4gYmUgbW9kaWZpZWQgdW50aWwgdGhlIGNsaWVudAogICAqIHJlcXVlc3QgYm9keSBpcyB3cml0dGVuIHRvIG9yIGNsb3NlZC4gQWZ0ZXIgdGhhdCB0aGV5IGJlY29tZQogICAqIGltbXV0YWJsZS4KICAgKi8KICBIdHRwSGVhZGVycyBnZXQgaGVhZGVyczsKCiAgLyoqCiAgICogQ29va2llcyB0byBwcmVzZW50IHRvIHRoZSBzZXJ2ZXIgKGluIHRoZSAnY29va2llJyBoZWFkZXIpLgogICAqLwogIExpc3Q8Q29va2llPiBnZXQgY29va2llczsKCiAgLy8vIEEgW0h0dHBDbGllbnRSZXNwb25zZV0gZnV0dXJlIHRoYXQgd2lsbCBjb21wbGV0ZSBvbmNlIHRoZSByZXNwb25zZSBpcwogIC8vLyBhdmFpbGFibGUuCiAgLy8vCiAgLy8vIElmIGFuIGVycm9yIG9jY3VycyBiZWZvcmUgdGhlIHJlc3BvbnNlIGlzIGF2YWlsYWJsZSwgdGhpcyBmdXR1cmUgd2lsbAogIC8vLyBjb21wbGV0ZSB3aXRoIGFuIGVycm9yLgogIEZ1dHVyZTxIdHRwQ2xpZW50UmVzcG9uc2U+IGdldCBkb25lOwoKICAvKioKICAgKiBDbG9zZSB0aGUgcmVxdWVzdCBmb3IgaW5wdXQuIFJldHVybnMgdGhlIHZhbHVlIG9mIFtkb25lXS4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlc3BvbnNlPiBjbG9zZSgpOwoKICAvLy8gR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2xpZW50IGNvbm5lY3Rpb24uCiAgLy8vCiAgLy8vIFJldHVybnMgWzpudWxsOl0gaWYgdGhlIHNvY2tldCBpcyBub3QgYXZhaWxhYmxlLgogIEh0dHBDb25uZWN0aW9uSW5mbyBnZXQgY29ubmVjdGlvbkluZm87Cn0KCi8qKgogKiBIVFRQIHJlc3BvbnNlIGZvciBhIGNsaWVudCBjb25uZWN0aW9uLgogKgogKiBUaGUgYm9keSBvZiBhIFtIdHRwQ2xpZW50UmVzcG9uc2VdIG9iamVjdCBpcyBhCiAqIFtTdHJlYW1dIG9mIGRhdGEgZnJvbSB0aGUgc2VydmVyLiBMaXN0ZW4gdG8gdGhlIGJvZHkgdG8gaGFuZGxlCiAqIHRoZSBkYXRhIGFuZCBiZSBub3RpZmllZCB3aGVuIHRoZSBlbnRpcmUgYm9keSBpcyByZWNlaXZlZC4KICoKICogICAgIG5ldyBIdHRwQ2xpZW50KCkuZ2V0KCdsb2NhbGhvc3QnLCA4MCwgJy9maWxlLnR4dCcpCiAqICAgICAgICAgIC50aGVuKChIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0KSA9PiByZXF1ZXN0LmNsb3NlKCkpCiAqICAgICAgICAgIC50aGVuKChIdHRwQ2xpZW50UmVzcG9uc2UgcmVzcG9uc2UpIHsKICogICAgICAgICAgICByZXNwb25zZS50cmFuc2Zvcm0odXRmOC5kZWNvZGVyKS5saXN0ZW4oKGNvbnRlbnRzKSB7CiAqICAgICAgICAgICAgICAvLyBoYW5kbGUgZGF0YQogKiAgICAgICAgICAgIH0pOwogKiAgICAgICAgICB9KTsKICovCmFic3RyYWN0IGNsYXNzIEh0dHBDbGllbnRSZXNwb25zZSBpbXBsZW1lbnRzIFN0cmVhbTxMaXN0PGludD4+IHsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzdGF0dXMgY29kZS4KICAgKgogICAqIFRoZSBzdGF0dXMgY29kZSBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIGJvZHkgaXMgd3JpdHRlbgogICAqIHRvLiBTZXR0aW5nIHRoZSBzdGF0dXMgY29kZSBhZnRlciB3cml0aW5nIHRvIHRoZSBib2R5IHdpbGwgdGhyb3cKICAgKiBhIGBTdGF0ZUVycm9yYC4KICAgKi8KICBpbnQgZ2V0IHN0YXR1c0NvZGU7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHJlYXNvbiBwaHJhc2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0dXMgY29kZS4KICAgKgogICAqIFRoZSByZWFzb24gcGhyYXNlIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgYm9keSBpcyB3cml0dGVuCiAgICogdG8uIFNldHRpbmcgdGhlIHJlYXNvbiBwaHJhc2UgYWZ0ZXIgd3JpdGluZyB0byB0aGUgYm9keSB3aWxsIHRocm93CiAgICogYSBgU3RhdGVFcnJvcmAuCiAgICovCiAgU3RyaW5nIGdldCByZWFzb25QaHJhc2U7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGNvbnRlbnQgbGVuZ3RoIG9mIHRoZSByZXNwb25zZSBib2R5LiBSZXR1cm5zIC0xIGlmIHRoZSBzaXplIG9mCiAgICogdGhlIHJlc3BvbnNlIGJvZHkgaXMgbm90IGtub3duIGluIGFkdmFuY2UuCiAgICoKICAgKiBJZiB0aGUgY29udGVudCBsZW5ndGggbmVlZHMgdG8gYmUgc2V0LCBpdCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlCiAgICogYm9keSBpcyB3cml0dGVuIHRvLiBTZXR0aW5nIHRoZSBjb250ZW50IGxlbmd0aCBhZnRlciB3cml0aW5nIHRvIHRoZSBib2R5CiAgICogd2lsbCB0aHJvdyBhIGBTdGF0ZUVycm9yYC4KICAgKi8KICBpbnQgZ2V0IGNvbnRlbnRMZW5ndGg7CgogIC8vLyBUaGUgY29tcHJlc3Npb24gc3RhdGUgb2YgdGhlIHJlc3BvbnNlLgogIC8vLwogIC8vLyBUaGlzIHNwZWNpZmllcyB3aGV0aGVyIHRoZSByZXNwb25zZSBieXRlcyB3ZXJlIGNvbXByZXNzZWQgd2hlbiB0aGV5IHdlcmUKICAvLy8gcmVjZWl2ZWQgYWNyb3NzIHRoZSB3aXJlIGFuZCB3aGV0aGVyIGNhbGxlcnMgd2lsbCByZWNlaXZlIGNvbXByZXNzZWQKICAvLy8gb3IgdW5jb21wcmVzc2VkIGJ5dGVzIHdoZW4gdGhleSBsaXN0ZWQgdG8gdGhpcyByZXNwb25zZSdzIGJ5dGUgc3RyZWFtLgogIEBTaW5jZSgiMi40IikKICBIdHRwQ2xpZW50UmVzcG9uc2VDb21wcmVzc2lvblN0YXRlIGdldCBjb21wcmVzc2lvblN0YXRlOwoKICAvKioKICAgKiBHZXRzIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gc3RhdGUgcmV0dXJuZWQgYnkgdGhlIHNlcnZlci4KICAgKgogICAqIElmIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gc3RhdGUgbmVlZHMgdG8gYmUgc2V0LCBpdCBtdXN0IGJlCiAgICogc2V0IGJlZm9yZSB0aGUgYm9keSBpcyB3cml0dGVuIHRvLiBTZXR0aW5nIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gc3RhdGUKICAgKiBhZnRlciB3cml0aW5nIHRvIHRoZSBib2R5IHdpbGwgdGhyb3cgYSBgU3RhdGVFcnJvcmAuCiAgICovCiAgYm9vbCBnZXQgcGVyc2lzdGVudENvbm5lY3Rpb247CgogIC8qKgogICAqIFJldHVybnMgd2hldGhlciB0aGUgc3RhdHVzIGNvZGUgaXMgb25lIG9mIHRoZSBub3JtYWwgcmVkaXJlY3QKICAgKiBjb2RlcyBbSHR0cFN0YXR1cy5tb3ZlZFBlcm1hbmVudGx5XSwgW0h0dHBTdGF0dXMuZm91bmRdLAogICAqIFtIdHRwU3RhdHVzLm1vdmVkVGVtcG9yYXJpbHldLCBbSHR0cFN0YXR1cy5zZWVPdGhlcl0gYW5kCiAgICogW0h0dHBTdGF0dXMudGVtcG9yYXJ5UmVkaXJlY3RdLgogICAqLwogIGJvb2wgZ2V0IGlzUmVkaXJlY3Q7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHNlcmllcyBvZiByZWRpcmVjdHMgdGhpcyBjb25uZWN0aW9uIGhhcyBiZWVuIHRocm91Z2guIFRoZQogICAqIGxpc3Qgd2lsbCBiZSBlbXB0eSBpZiBubyByZWRpcmVjdHMgd2VyZSBmb2xsb3dlZC4gW3JlZGlyZWN0c10gd2lsbCBiZQogICAqIHVwZGF0ZWQgYm90aCBpbiB0aGUgY2FzZSBvZiBhbiBhdXRvbWF0aWMgYW5kIGEgbWFudWFsIHJlZGlyZWN0LgogICAqLwogIExpc3Q8UmVkaXJlY3RJbmZvPiBnZXQgcmVkaXJlY3RzOwoKICAvKioKICAgKiBSZWRpcmVjdHMgdGhpcyBjb25uZWN0aW9uIHRvIGEgbmV3IFVSTC4gVGhlIGRlZmF1bHQgdmFsdWUgZm9yCiAgICogW21ldGhvZF0gaXMgdGhlIG1ldGhvZCBmb3IgdGhlIGN1cnJlbnQgcmVxdWVzdC4gVGhlIGRlZmF1bHQgdmFsdWUKICAgKiBmb3IgW3VybF0gaXMgdGhlIHZhbHVlIG9mIHRoZSBbSHR0cEhlYWRlcnMubG9jYXRpb25IZWFkZXJdIGhlYWRlciBvZgogICAqIHRoZSBjdXJyZW50IHJlc3BvbnNlLiBBbGwgYm9keSBkYXRhIG11c3QgaGF2ZSBiZWVuIHJlYWQgZnJvbSB0aGUKICAgKiBjdXJyZW50IHJlc3BvbnNlIGJlZm9yZSBjYWxsaW5nIFtyZWRpcmVjdF0uCiAgICoKICAgKiBBbGwgaGVhZGVycyBhZGRlZCB0byB0aGUgcmVxdWVzdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSByZWRpcmVjdGlvbgogICAqIHJlcXVlc3QuIEhvd2V2ZXIsIGFueSBib2R5IHNlbnQgd2l0aCB0aGUgcmVxdWVzdCB3aWxsIG5vdCBiZQogICAqIHBhcnQgb2YgdGhlIHJlZGlyZWN0aW9uIHJlcXVlc3QuCiAgICoKICAgKiBJZiBbZm9sbG93TG9vcHNdIGlzIHNldCB0byBbOnRydWU6XSwgcmVkaXJlY3Qgd2lsbCBmb2xsb3cgdGhlIHJlZGlyZWN0LAogICAqIGV2ZW4gaWYgdGhlIFVSTCB3YXMgYWxyZWFkeSB2aXNpdGVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBbOmZhbHNlOl0uCiAgICoKICAgKiBUaGUgbWV0aG9kIHdpbGwgaWdub3JlIFtIdHRwQ2xpZW50UmVxdWVzdC5tYXhSZWRpcmVjdHNdCiAgICogYW5kIHdpbGwgYWx3YXlzIHBlcmZvcm0gdGhlIHJlZGlyZWN0LgogICAqLwogIEZ1dHVyZTxIdHRwQ2xpZW50UmVzcG9uc2U+IHJlZGlyZWN0KAogICAgICBbU3RyaW5nIG1ldGhvZCwgVXJpIHVybCwgYm9vbCBmb2xsb3dMb29wc10pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjbGllbnQgcmVzcG9uc2UgaGVhZGVycy4KICAgKgogICAqIFRoZSBjbGllbnQgcmVzcG9uc2UgaGVhZGVycyBhcmUgaW1tdXRhYmxlLgogICAqLwogIEh0dHBIZWFkZXJzIGdldCBoZWFkZXJzOwoKICAvKioKICAgKiBEZXRhY2ggdGhlIHVuZGVybHlpbmcgc29ja2V0IGZyb20gdGhlIEhUVFAgY2xpZW50LiBXaGVuIHRoZQogICAqIHNvY2tldCBpcyBkZXRhY2hlZCB0aGUgSFRUUCBjbGllbnQgd2lsbCBubyBsb25nZXIgcGVyZm9ybSBhbnkKICAgKiBvcGVyYXRpb25zIG9uIGl0LgogICAqCiAgICogVGhpcyBpcyBub3JtYWxseSB1c2VkIHdoZW4gYSBIVFRQIHVwZ3JhZGUgaXMgbmVnb3RpYXRlZCBhbmQgdGhlCiAgICogY29tbXVuaWNhdGlvbiBzaG91bGQgY29udGludWUgd2l0aCBhIGRpZmZlcmVudCBwcm90b2NvbC4KICAgKi8KICBGdXR1cmU8U29ja2V0PiBkZXRhY2hTb2NrZXQoKTsKCiAgLyoqCiAgICogQ29va2llcyBzZXQgYnkgdGhlIHNlcnZlciAoZnJvbSB0aGUgJ3NldC1jb29raWUnIGhlYWRlcikuCiAgICovCiAgTGlzdDxDb29raWU+IGdldCBjb29raWVzOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjZXJ0aWZpY2F0ZSBvZiB0aGUgSFRUUFMgc2VydmVyIHByb3ZpZGluZyB0aGUgcmVzcG9uc2UuCiAgICogUmV0dXJucyBudWxsIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCBhIHNlY3VyZSBUTFMgb3IgU1NMIGNvbm5lY3Rpb24uCiAgICovCiAgWDUwOUNlcnRpZmljYXRlIGdldCBjZXJ0aWZpY2F0ZTsKCiAgLyoqCiAgICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2xpZW50IGNvbm5lY3Rpb24uIFJldHVybnMgWzpudWxsOl0gaWYgdGhlIHNvY2tldAogICAqIGlzIG5vdCBhdmFpbGFibGUuCiAgICovCiAgSHR0cENvbm5lY3Rpb25JbmZvIGdldCBjb25uZWN0aW9uSW5mbzsKfQoKLy8vIEVudW0gdGhhdCBzcGVjaWZpZXMgdGhlIGNvbXByZXNzaW9uIHN0YXRlIG9mIHRoZSBieXRlIHN0cmVhbSBvZiBhbgovLy8gW0h0dHBDbGllbnRSZXNwb25zZV0uCi8vLwovLy8gVGhlIHZhbHVlcyBoZXJlaW4gYWxsb3cgY2FsbGVycyB0byBhbnN3ZXIgdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMgYXMgdGhleQovLy8gcGVydGFpbiB0byBhbiBbSHR0cENsaWVudFJlc3BvbnNlXToKLy8vCi8vLyAgKiBDYW4gdGhlIHZhbHVlIG9mIHRoZSByZXNwb25zZSdzIGBDb250ZW50LUxlbmd0aGAgSFRUUCBoZWFkZXIgYmUgdHJ1c3RlZD8KLy8vICAqIERvZXMgdGhlIGNhbGxlciBuZWVkIHRvIG1hbnVhbGx5IGRlY29tcHJlc3MgdGhlIHJlc3BvbnNlJ3MgYnl0ZSBzdHJlYW0/Ci8vLwovLy8gVGhpcyBlbnVtIGlzIGFjY2Vzc2VkIHZpYSB0aGUgW0h0dHBDbGllbnRSZXNwb25zZS5jb21wcmVzc2lvblN0YXRlXSB2YWx1ZS4KQFNpbmNlKCIyLjQiKQplbnVtIEh0dHBDbGllbnRSZXNwb25zZUNvbXByZXNzaW9uU3RhdGUgewogIC8vLyBUaGUgYm9keSBvZiB0aGUgSFRUUCByZXNwb25zZSB3YXMgcmVjZWl2ZWQgYW5kIHJlbWFpbnMgaW4gYW4gdW5jb21wcmVzc2VkCiAgLy8vIHN0YXRlLgogIC8vLwogIC8vLyBJbiB0aGlzIHN0YXRlLCB0aGUgdmFsdWUgb2YgdGhlIGBDb250ZW50LUxlbmd0aGAgSFRUUCBoZWFkZXIsIGlmCiAgLy8vIHNwZWNpZmllZCAobm9uLW5lZ2F0aXZlKSwgc2hvdWxkIG1hdGNoIHRoZSBudW1iZXIgb2YgYnl0ZXMgcHJvZHVjZWQgYnkKICAvLy8gdGhlIHJlc3BvbnNlJ3MgYnl0ZSBzdHJlYW0uCiAgbm90Q29tcHJlc3NlZCwKCiAgLy8vIFRoZSBib2R5IG9mIHRoZSBIVFRQIHJlc3BvbnNlIHdhcyBvcmlnaW5hbGx5IGNvbXByZXNzZWQsIGJ1dCBieSB2aXJ0dWUgb2YKICAvLy8gdGhlIFtIdHRwQ2xpZW50LmF1dG9VbmNvbXByZXNzXSBjb25maWd1cmF0aW9uIG9wdGlvbiwgaXQgaGFzIGJlZW4KICAvLy8gYXV0b21hdGljYWxseSB1bmNvbXByZXNzZWQuCiAgLy8vCiAgLy8vIEhUVFAgaGVhZGVycyBhcmUgbm90IG1vZGlmaWVkLCBzbyB3aGVuIGEgcmVzcG9uc2UgaGFzIGJlZW4gdW5jb21wcmVzc2VkCiAgLy8vIGluIHRoaXMgd2F5LCB0aGUgdmFsdWUgb2YgdGhlIGBDb250ZW50LUxlbmd0aGAgSFRUUCBoZWFkZXIgY2Fubm90IGJlCiAgLy8vIHRydXN0ZWQsIGFzIGl0IHdpbGwgY29udGFpbiB0aGUgY29tcHJlc3NlZCBjb250ZW50IGxlbmd0aCwgd2hlcmVhcyB0aGUKICAvLy8gc3RyZWFtIG9mIGJ5dGVzIHByb2R1Y2VkIGJ5IHRoZSByZXNwb25zZSB3aWxsIGNvbnRhaW4gdW5jb21wcmVzc2VkIGJ5dGVzLgogIGRlY29tcHJlc3NlZCwKCiAgLy8vIFRoZSBib2R5IG9mIHRoZSBIVFRQIHJlc3BvbnNlIGNvbnRhaW5zIGNvbXByZXNzZWQgYnl0ZXMuCiAgLy8vCiAgLy8vIEluIHRoaXMgc3RhdGUsIHRoZSB2YWx1ZSBvZiB0aGUgYENvbnRlbnQtTGVuZ3RoYCBIVFRQIGhlYWRlciwgaWYKICAvLy8gc3BlY2lmaWVkIChub24tbmVnYXRpdmUpLCBzaG91bGQgbWF0Y2ggdGhlIG51bWJlciBvZiBieXRlcyBwcm9kdWNlZCBieQogIC8vLyB0aGUgcmVzcG9uc2UncyBieXRlIHN0cmVhbS4KICAvLy8KICAvLy8gSWYgdGhlIGNhbGxlciB3aXNoZXMgdG8gbWFudWFsbHkgdW5jb21wcmVzcyB0aGUgYm9keSBvZiB0aGUgcmVzcG9uc2UsCiAgLy8vIGl0IHNob3VsZCBjb25zdWx0IHRoZSB2YWx1ZSBvZiB0aGUgYENvbnRlbnQtRW5jb2RpbmdgIEhUVFAgaGVhZGVyIHRvIHNlZQogIC8vLyB3aGF0IHR5cGUgb2YgY29tcHJlc3Npb24gaGFzIGJlZW4gYXBwbGllZC4gU2VlCiAgLy8vIDxodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjYxNiNzZWN0aW9uLTE0LjExPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICBjb21wcmVzc2VkLAp9CgphYnN0cmFjdCBjbGFzcyBIdHRwQ2xpZW50Q3JlZGVudGlhbHMge30KCi8qKgogKiBSZXByZXNlbnRzIGNyZWRlbnRpYWxzIGZvciBiYXNpYyBhdXRoZW50aWNhdGlvbi4KICovCmFic3RyYWN0IGNsYXNzIEh0dHBDbGllbnRCYXNpY0NyZWRlbnRpYWxzIGV4dGVuZHMgSHR0cENsaWVudENyZWRlbnRpYWxzIHsKICBmYWN0b3J5IEh0dHBDbGllbnRCYXNpY0NyZWRlbnRpYWxzKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkKSA9PgogICAgICBuZXcgX0h0dHBDbGllbnRCYXNpY0NyZWRlbnRpYWxzKHVzZXJuYW1lLCBwYXNzd29yZCk7Cn0KCi8qKgogKiBSZXByZXNlbnRzIGNyZWRlbnRpYWxzIGZvciBkaWdlc3QgYXV0aGVudGljYXRpb24uIERpZ2VzdAogKiBhdXRoZW50aWNhdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBmb3Igc2VydmVycyB1c2luZyB0aGUgTUQ1CiAqIGFsZ29yaXRobSBhbmQgcXVhbGl0eSBvZiBwcm90ZWN0aW9uIChxb3ApIG9mIGVpdGhlciAibm9uZSIgb3IKICogImF1dGgiLgogKi8KYWJzdHJhY3QgY2xhc3MgSHR0cENsaWVudERpZ2VzdENyZWRlbnRpYWxzIGV4dGVuZHMgSHR0cENsaWVudENyZWRlbnRpYWxzIHsKICBmYWN0b3J5IEh0dHBDbGllbnREaWdlc3RDcmVkZW50aWFscyhTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCkgPT4KICAgICAgbmV3IF9IdHRwQ2xpZW50RGlnZXN0Q3JlZGVudGlhbHModXNlcm5hbWUsIHBhc3N3b3JkKTsKfQoKLyoqCiAqIEluZm9ybWF0aW9uIGFib3V0IGFuIFtIdHRwUmVxdWVzdF0sIFtIdHRwUmVzcG9uc2VdLCBbSHR0cENsaWVudFJlcXVlc3RdLCBvcgogKiBbSHR0cENsaWVudFJlc3BvbnNlXSBjb25uZWN0aW9uLgogKi8KYWJzdHJhY3QgY2xhc3MgSHR0cENvbm5lY3Rpb25JbmZvIHsKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IHJlbW90ZUFkZHJlc3M7CiAgaW50IGdldCByZW1vdGVQb3J0OwogIGludCBnZXQgbG9jYWxQb3J0Owp9CgovKioKICogUmVkaXJlY3QgaW5mb3JtYXRpb24uCiAqLwphYnN0cmFjdCBjbGFzcyBSZWRpcmVjdEluZm8gewogIC8qKgogICAqIFJldHVybnMgdGhlIHN0YXR1cyBjb2RlIHVzZWQgZm9yIHRoZSByZWRpcmVjdC4KICAgKi8KICBpbnQgZ2V0IHN0YXR1c0NvZGU7CgogIC8qKgogICAqIFJldHVybnMgdGhlIG1ldGhvZCB1c2VkIGZvciB0aGUgcmVkaXJlY3QuCiAgICovCiAgU3RyaW5nIGdldCBtZXRob2Q7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGxvY2F0aW9uIGZvciB0aGUgcmVkaXJlY3QuCiAgICovCiAgVXJpIGdldCBsb2NhdGlvbjsKfQoKLyoqCiAqIFdoZW4gZGV0YWNoaW5nIGEgc29ja2V0IGZyb20gZWl0aGVyIHRoZSBbOkh0dHBTZXJ2ZXI6XSBvciB0aGUKICogWzpIdHRwQ2xpZW50Ol0gZHVlIHRvIGEgSFRUUCBjb25uZWN0aW9uIHVwZ3JhZGUgdGhlcmUgbWlnaHQgYmUKICogdW5wYXJzZWQgZGF0YSBhbHJlYWR5IHJlYWQgZnJvbSB0aGUgc29ja2V0LiBUaGlzIHVucGFyc2VkIGRhdGEKICogdG9nZXRoZXIgd2l0aCB0aGUgZGV0YWNoZWQgc29ja2V0IGlzIHJldHVybmVkIGluIGFuIGluc3RhbmNlIG9mCiAqIHRoaXMgY2xhc3MuCiAqLwphYnN0cmFjdCBjbGFzcyBEZXRhY2hlZFNvY2tldCB7CiAgU29ja2V0IGdldCBzb2NrZXQ7CiAgTGlzdDxpbnQ+IGdldCB1bnBhcnNlZERhdGE7Cn0KCmNsYXNzIEh0dHBFeGNlcHRpb24gaW1wbGVtZW50cyBJT0V4Y2VwdGlvbiB7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CiAgZmluYWwgVXJpIHVyaTsKCiAgY29uc3QgSHR0cEV4Y2VwdGlvbih0aGlzLm1lc3NhZ2UsIHt0aGlzLnVyaX0pOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICB2YXIgYiA9IG5ldyBTdHJpbmdCdWZmZXIoKS4ud3JpdGUoJ0h0dHBFeGNlcHRpb246ICcpLi53cml0ZShtZXNzYWdlKTsKICAgIGlmICh1cmkgIT0gbnVsbCkgewogICAgICBiLndyaXRlKCcsIHVyaSA9ICR1cmknKTsKICAgIH0KICAgIHJldHVybiBiLnRvU3RyaW5nKCk7CiAgfQp9CgpjbGFzcyBSZWRpcmVjdEV4Y2VwdGlvbiBpbXBsZW1lbnRzIEh0dHBFeGNlcHRpb24gewogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwogIGZpbmFsIExpc3Q8UmVkaXJlY3RJbmZvPiByZWRpcmVjdHM7CgogIGNvbnN0IFJlZGlyZWN0RXhjZXB0aW9uKHRoaXMubWVzc2FnZSwgdGhpcy5yZWRpcmVjdHMpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiUmVkaXJlY3RFeGNlcHRpb246ICRtZXNzYWdlIjsKCiAgVXJpIGdldCB1cmkgPT4gcmVkaXJlY3RzLmxhc3QubG9jYXRpb247Cn0KiKgATk48AQ8BFAEVGQkREQ8TFBkdFyIwFBIaARQXGhcZGhcXHAEETwNKOExERSNIQy8DGQMQFDAeNTorExEJA0tNSi4DTks8AyoDLwNEPioDGR4DEDoVRhwTRBwtOwMUMh4iHjU6KxMRCQNGJwMhA0YVAxkDEDgiTDMvEQ8JAxYDSTNDAzFBSwwEOwZOJQVLDwUiBhcBBjsFNwUxJSkpBUs9BioBBkgFQ0M8BTouBhUBBkpRKwUdBU8OBS4GGAEGRw0FMkBHRD0nOz4/RwVCQkEwShcFR0EUBUdGRxEFTFFNS0cyBjRHQAEGMkBHRD0nOz4/RwVCQkEVBUdBFAVHRkcRBTxARk83BUxRTUtHMgYBKDYbHjAiRi0BBkZHQQY8LgEGQEVCRTcFSgYlAQZDSDMGEAEGRkkfBh8BBkYoBiMBBkcwBikCAQRJBBwGKQYRAQZAGwYSAQZLBhABBkVFQQYTAgEELAMuA0cDPy0DPwM5FQM4Azs9Az8DQgM+S0wpBB0oNzk5NSImNjUwOzs3OzE1MyQkKCokJCs8NCtANSwzKD9BJioxKCAqPSovJCIqOwEqJjE1MjcyNzAzJyApJDE0MDMuLjM5MzkxNTM5Li8wMy8xKCIoIiomKygoIigiKykzOi8yKyk1PjAzLCovMSomNT02PykkKyguLyomJh4rKDQ7KygtLSgiJyArKDM5ASMoLwEqJi0tASgYFhASExwTDxIFASwxAScRGxsZGxYYFxMXBQErLwEpGA8QFB0WEhAaBQEtMwEoEhkaGhkSEBATGxcTHRceERMOFAUBLDEBBj0gBhEBBkQjBhQBBlEtBhwBBj4RBg8BBj4RBgwBBkc2QA0GGwEGNAYVAQY7Bh0BBj8GIAEGRkUGKQEGRUFFDQYdAQZGQkRIR0caBicBBkU9BicBBkNFRQYqAQZEQ0QNBh8BBj9CCwY6AQZIQkI6Bh8BBkZFKgYQAgEEMQM1A0QYAzEDJAMXAyg8OUMDPwMiSCAzKQsDLgQdBkkGTTAEAQZDNQYpJyMoJTAoLwQBBhwGFAEGIQVFMwYmAQY+BTUGFQIBLAYqBhEBBktCBhIBBkgGJwEGQQYSAgEERQ4ENAY3BSMGSiIcAQYyBSIGSSIcAQYyBSkGUCIcAQYkBSIGSCQgAQZERUBFSU9GBjo6SAQBBkNFRigFIgVHQwYrJgQBBjEGFwEGHAYaAQYYBhYBBh0GFgIBBExRT0EEGAYdBTEFS0lQEwYPAQYeBTgFUD4cRBQGEAEGKwYUAQZOIwYOAQYnBhEBBjkGDwEGPQYPAQZJJwYRAQY2BU4LBT8GSQEGSA0GNDIEAQZERRoGFQIBBBhHAxs3MykDO0BDQANEHjspAzA6TAMyGAM0MCUZKhYaEw0MNyMDSilKPgMwKkcWCQQ6Bi0FPhcGGQEGOwYVAQYeBSEsBg8BBigFTjcFTyIFTykGGAEGGgUvBhsBBjoGHAEGPQYhAQY+BVFOGwYjAQYoBRdIDkcGGwEGNBwGHgEGLgU2BikBBkoNBVBLCwYdAgEEOEEDTStBGAMbAyMxOiJNAy0yIwsDMkQ7AxoDRSVCNRoDIyRHRwNGDAMjSkwDOi0EME4GRkQvBhUBBkc4QyQFPEc1BhIBBkguBT5GOAYXAQZGQg4GHQEGUVBOEwU6BSoGFQEGPgUeBUkyBhUBBiMFRT0GGwEGQAYcAQYsBUcWBUNFLAVEJQZMAQZDQxcFQ0YFUExNBjoBBkseBikCAQQ7JQNKP08sAy4DSU5HTEs5AzcyMkhISksDLTsvLTohESUOMSYRDwNEGAMYA0dGSUYwA0ZMR0wDDgNAAx0DRzUvRANEAx0DRTxGQUUYAyEDREU2DQMtIAQcKS04ASsuOgFOEAYaMS0EAUoaBhpDAS4BSxMGJxgBLAZOTRYGSg4eAQZNBUcXBSAFGAYdAQZIEwU9OUZHOQVCRkVHNQU9MAVIFwUhBRgGFwFSJgY3BlAdFAEyNR0nBjAEAQYeBURAMkYFTk9NGgVERDsGIjoBBh4FRAwFQE9NPwVERDsGPQEGMwVDNQ0FHQZFAQYzBSsFIAYtAQY0BUM1DQUdBkYBBjQFKwUgBi4BBjMFQz0FHQZFAQYzBSsFIAYtAQY2BUM9BR0GSAEGNgUrBSAGMAEGNQVDPQUdBkcBBjUFKwUgBi8BBjQFQz0FHQZGAQY0BSsFIAYuAQY+RzsFREA+Q0QPBUlKTBgFS01LTg4GSgEGPwZRAQZHP0IFRjUFEgUmBRsFOwVAIwU2BUZGEAYkAQZDPxwFQQUUFRIUFRIFS0pMEQVNS0wRBUU7RUoqBUczBS9BBUMtBS8kN0gLBUQ3RUdCBjIrNR1GBkEEAQY/RkYZBURAPkNJDwVJRxgGGUsBBj4GHE8BBkxKIAVJS01PRhgFTU5QSwVRS0YdBh5DASIGTk1NUU4vIwIBBCkDQ0lCOkE+OwM1Px4DJyNHRgNEDAMnSUsDRTkENQY+BSQGHQEGOj4FR0MoNT4xRz8dBUdFKQYYAQZEQj4FHQYUAQYgBhUBBh0GDwE3Bk8lFQEGQwUeBUkyBhUBBikFQUIQBhsBBkAGHAFMEQZMHicBBj8GJgE0BjcpAgEEKgMyQj4DOkIyQx8SEARBBh4FPEYVBhYBBkAFPkgVBhsBBlAwBUZOIAYZAS0GT0tNEDsBBkIFRFA6BiEBBkM+PiUGFwEGS0tFBiQBBkNHSkYxBUdCJgVNSgU9KwYnMwEGKgUwBhsBBkFDFwVFPgYhAQY/BhwBBklLBiMBBlIXBikCAUcaBE4oBFBPBE8OKlANBkdNIhEBUEgiBk5LTVAQAT8GR00iBkxPNVAOAgEoAQQ0BEpKOwIBBDw+QQsES0s8AgEETyQEJCUWFQIBBBkEHgY0BhYBBi8GFQEGLAYUAgEEQUJCQw8EIBUeAgEtGBEBMQEWShcfBhkEAgEzGCYBOQE2ASoCAQpkYXJ0Ol9odHRwQW9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL19odHRwL2h0dHBfaW1wbC5kYXJ0wAGXhS8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0Ll9odHRwOwoKaW50IF9uZXh0U2VydmljZUlkID0gMTsKCi8vIFRPRE8oYWpvaG5zZW4pOiBVc2Ugb3RoZXIgd2F5IG9mIGdldHRpbmcgYSB1bmlxdWUgaWQuCmFic3RyYWN0IGNsYXNzIF9TZXJ2aWNlT2JqZWN0IHsKICBpbnQgX19zZXJ2aWNlSWQgPSAwOwogIGludCBnZXQgX3NlcnZpY2VJZCB7CiAgICBpZiAoX19zZXJ2aWNlSWQgPT0gMCkgX19zZXJ2aWNlSWQgPSBfbmV4dFNlcnZpY2VJZCsrOwogICAgcmV0dXJuIF9fc2VydmljZUlkOwogIH0KCiAgTWFwIF90b0pTT04oYm9vbCByZWYpOwoKICBTdHJpbmcgZ2V0IF9zZXJ2aWNlUGF0aCA9PiAiJF9zZXJ2aWNlVHlwZVBhdGgvJF9zZXJ2aWNlSWQiOwoKICBTdHJpbmcgZ2V0IF9zZXJ2aWNlVHlwZVBhdGg7CgogIFN0cmluZyBnZXQgX3NlcnZpY2VUeXBlTmFtZTsKCiAgU3RyaW5nIF9zZXJ2aWNlVHlwZShib29sIHJlZikgewogICAgaWYgKHJlZikgcmV0dXJuICJAJF9zZXJ2aWNlVHlwZU5hbWUiOwogICAgcmV0dXJuIF9zZXJ2aWNlVHlwZU5hbWU7CiAgfQp9CgpjbGFzcyBfQ29weWluZ0J5dGVzQnVpbGRlciBpbXBsZW1lbnRzIEJ5dGVzQnVpbGRlciB7CiAgLy8gU3RhcnQgd2l0aCAxMDI0IGJ5dGVzLgogIHN0YXRpYyBjb25zdCBpbnQgX0lOSVRfU0laRSA9IDEwMjQ7CgogIHN0YXRpYyBmaW5hbCBfZW1wdHlMaXN0ID0gbmV3IFVpbnQ4TGlzdCgwKTsKCiAgaW50IF9sZW5ndGggPSAwOwogIFVpbnQ4TGlzdCBfYnVmZmVyOwoKICBfQ29weWluZ0J5dGVzQnVpbGRlcihbaW50IGluaXRpYWxDYXBhY2l0eSA9IDBdKQogICAgICA6IF9idWZmZXIgPSAoaW5pdGlhbENhcGFjaXR5IDw9IDApCiAgICAgICAgICAgID8gX2VtcHR5TGlzdAogICAgICAgICAgICA6IG5ldyBVaW50OExpc3QoX3BvdzJyb3VuZHVwKGluaXRpYWxDYXBhY2l0eSkpOwoKICB2b2lkIGFkZChMaXN0PGludD4gYnl0ZXMpIHsKICAgIGludCBieXRlc0xlbmd0aCA9IGJ5dGVzLmxlbmd0aDsKICAgIGlmIChieXRlc0xlbmd0aCA9PSAwKSByZXR1cm47CiAgICBpbnQgcmVxdWlyZWQgPSBfbGVuZ3RoICsgYnl0ZXNMZW5ndGg7CiAgICBpZiAoX2J1ZmZlci5sZW5ndGggPCByZXF1aXJlZCkgewogICAgICBfZ3JvdyhyZXF1aXJlZCk7CiAgICB9CiAgICBhc3NlcnQoX2J1ZmZlci5sZW5ndGggPj0gcmVxdWlyZWQpOwogICAgaWYgKGJ5dGVzIGlzIFVpbnQ4TGlzdCkgewogICAgICBfYnVmZmVyLnNldFJhbmdlKF9sZW5ndGgsIHJlcXVpcmVkLCBieXRlcyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ5dGVzTGVuZ3RoOyBpKyspIHsKICAgICAgICBfYnVmZmVyW19sZW5ndGggKyBpXSA9IGJ5dGVzW2ldOwogICAgICB9CiAgICB9CiAgICBfbGVuZ3RoID0gcmVxdWlyZWQ7CiAgfQoKICB2b2lkIGFkZEJ5dGUoaW50IGJ5dGUpIHsKICAgIGlmIChfYnVmZmVyLmxlbmd0aCA9PSBfbGVuZ3RoKSB7CiAgICAgIC8vIFRoZSBncm93IGFsZ29yaXRobSBhbHdheXMgYXQgbGVhc3QgZG91Ymxlcy4KICAgICAgLy8gSWYgd2UgYWRkZWQgb25lIHRvIF9sZW5ndGggaXQgd291bGQgcXVhZHJ1cGxlIHVubmVjZXNzYXJpbHkuCiAgICAgIF9ncm93KF9sZW5ndGgpOwogICAgfQogICAgYXNzZXJ0KF9idWZmZXIubGVuZ3RoID4gX2xlbmd0aCk7CiAgICBfYnVmZmVyW19sZW5ndGhdID0gYnl0ZTsKICAgIF9sZW5ndGgrKzsKICB9CgogIHZvaWQgX2dyb3coaW50IHJlcXVpcmVkKSB7CiAgICAvLyBXZSB3aWxsIGNyZWF0ZSBhIGxpc3QgaW4gdGhlIHJhbmdlIG9mIDItNCB0aW1lcyBsYXJnZXIgdGhhbgogICAgLy8gcmVxdWlyZWQuCiAgICBpbnQgbmV3U2l6ZSA9IHJlcXVpcmVkICogMjsKICAgIGlmIChuZXdTaXplIDwgX0lOSVRfU0laRSkgewogICAgICBuZXdTaXplID0gX0lOSVRfU0laRTsKICAgIH0gZWxzZSB7CiAgICAgIG5ld1NpemUgPSBfcG93MnJvdW5kdXAobmV3U2l6ZSk7CiAgICB9CiAgICB2YXIgbmV3QnVmZmVyID0gbmV3IFVpbnQ4TGlzdChuZXdTaXplKTsKICAgIG5ld0J1ZmZlci5zZXRSYW5nZSgwLCBfYnVmZmVyLmxlbmd0aCwgX2J1ZmZlcik7CiAgICBfYnVmZmVyID0gbmV3QnVmZmVyOwogIH0KCiAgVWludDhMaXN0IHRha2VCeXRlcygpIHsKICAgIGlmIChfbGVuZ3RoID09IDApIHJldHVybiBfZW1wdHlMaXN0OwogICAgdmFyIGJ1ZmZlciA9CiAgICAgICAgbmV3IFVpbnQ4TGlzdC52aWV3KF9idWZmZXIuYnVmZmVyLCBfYnVmZmVyLm9mZnNldEluQnl0ZXMsIF9sZW5ndGgpOwogICAgY2xlYXIoKTsKICAgIHJldHVybiBidWZmZXI7CiAgfQoKICBVaW50OExpc3QgdG9CeXRlcygpIHsKICAgIGlmIChfbGVuZ3RoID09IDApIHJldHVybiBfZW1wdHlMaXN0OwogICAgcmV0dXJuIG5ldyBVaW50OExpc3QuZnJvbUxpc3QoCiAgICAgICAgbmV3IFVpbnQ4TGlzdC52aWV3KF9idWZmZXIuYnVmZmVyLCBfYnVmZmVyLm9mZnNldEluQnl0ZXMsIF9sZW5ndGgpKTsKICB9CgogIGludCBnZXQgbGVuZ3RoID0+IF9sZW5ndGg7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2xlbmd0aCA9PSAwOwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9sZW5ndGggIT0gMDsKCiAgdm9pZCBjbGVhcigpIHsKICAgIF9sZW5ndGggPSAwOwogICAgX2J1ZmZlciA9IF9lbXB0eUxpc3Q7CiAgfQoKICBzdGF0aWMgaW50IF9wb3cycm91bmR1cChpbnQgeCkgewogICAgYXNzZXJ0KHggPiAwKTsKICAgIC0teDsKICAgIHggfD0geCA+PiAxOwogICAgeCB8PSB4ID4+IDI7CiAgICB4IHw9IHggPj4gNDsKICAgIHggfD0geCA+PiA4OwogICAgeCB8PSB4ID4+IDE2OwogICAgcmV0dXJuIHggKyAxOwogIH0KfQoKY29uc3QgaW50IF9PVVRHT0lOR19CVUZGRVJfU0laRSA9IDggKiAxMDI0OwoKdHlwZWRlZiB2b2lkIF9CeXRlc0NvbnN1bWVyKExpc3Q8aW50PiBieXRlcyk7CgpjbGFzcyBfSHR0cEluY29taW5nIGV4dGVuZHMgU3RyZWFtPFVpbnQ4TGlzdD4gewogIGZpbmFsIGludCBfdHJhbnNmZXJMZW5ndGg7CiAgZmluYWwgQ29tcGxldGVyIF9kYXRhQ29tcGxldGVyID0gbmV3IENvbXBsZXRlcigpOwogIFN0cmVhbTxVaW50OExpc3Q+IF9zdHJlYW07CgogIGJvb2wgZnVsbEJvZHlSZWFkID0gZmFsc2U7CgogIC8vIENvbW1vbiBwcm9wZXJ0aWVzLgogIGZpbmFsIF9IdHRwSGVhZGVycyBoZWFkZXJzOwogIGJvb2wgdXBncmFkZWQgPSBmYWxzZTsKCiAgLy8gQ2xpZW50UmVzcG9uc2UgcHJvcGVydGllcy4KICBpbnQgc3RhdHVzQ29kZTsKICBTdHJpbmcgcmVhc29uUGhyYXNlOwoKICAvLyBSZXF1ZXN0IHByb3BlcnRpZXMuCiAgU3RyaW5nIG1ldGhvZDsKICBVcmkgdXJpOwoKICBib29sIGhhc1N1YnNjcmliZXIgPSBmYWxzZTsKCiAgLy8gVGhlIHRyYW5zZmVyIGxlbmd0aCBpZiB0aGUgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlIGJvZHkgYXMgaXQKICAvLyBhcHBlYXJzIGluIHRoZSBtZXNzYWdlIChSRkMgMjYxNiBzZWN0aW9uIDQuNCkuIFRoaXMgY2FuIGJlIC0xIGlmCiAgLy8gdGhlIGxlbmd0aCBvZiB0aGUgbWFzc2FnZSBib2R5IGlzIG5vdCBrbm93biBkdWUgdG8gdHJhbnNmZXIKICAvLyBjb2RpbmdzLgogIGludCBnZXQgdHJhbnNmZXJMZW5ndGggPT4gX3RyYW5zZmVyTGVuZ3RoOwoKICBfSHR0cEluY29taW5nKHRoaXMuaGVhZGVycywgdGhpcy5fdHJhbnNmZXJMZW5ndGgsIHRoaXMuX3N0cmVhbSk7CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxVaW50OExpc3Q+IGxpc3Rlbih2b2lkIG9uRGF0YShVaW50OExpc3QgZXZlbnQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgaGFzU3Vic2NyaWJlciA9IHRydWU7CiAgICByZXR1cm4gX3N0cmVhbS5oYW5kbGVFcnJvcigoZXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oZXJyb3IubWVzc2FnZSwgdXJpOiB1cmkpOwogICAgfSkubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQoKICAvLyBJcyBjb21wbGV0ZWQgb25jZSBhbGwgZGF0YSBoYXZlIGJlZW4gcmVjZWl2ZWQuCiAgRnV0dXJlIGdldCBkYXRhRG9uZSA9PiBfZGF0YUNvbXBsZXRlci5mdXR1cmU7CgogIHZvaWQgY2xvc2UoYm9vbCBjbG9zaW5nKSB7CiAgICBmdWxsQm9keVJlYWQgPSB0cnVlOwogICAgaGFzU3Vic2NyaWJlciA9IHRydWU7CiAgICBfZGF0YUNvbXBsZXRlci5jb21wbGV0ZShjbG9zaW5nKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9IdHRwSW5ib3VuZE1lc3NhZ2VMaXN0SW50IGV4dGVuZHMgU3RyZWFtPExpc3Q8aW50Pj4gewogIGZpbmFsIF9IdHRwSW5jb21pbmcgX2luY29taW5nOwogIExpc3Q8Q29va2llPiBfY29va2llczsKCiAgX0h0dHBJbmJvdW5kTWVzc2FnZUxpc3RJbnQodGhpcy5faW5jb21pbmcpOwoKICBMaXN0PENvb2tpZT4gZ2V0IGNvb2tpZXMgewogICAgaWYgKF9jb29raWVzICE9IG51bGwpIHJldHVybiBfY29va2llczsKICAgIHJldHVybiBfY29va2llcyA9IGhlYWRlcnMuX3BhcnNlQ29va2llcygpOwogIH0KCiAgX0h0dHBIZWFkZXJzIGdldCBoZWFkZXJzID0+IF9pbmNvbWluZy5oZWFkZXJzOwogIFN0cmluZyBnZXQgcHJvdG9jb2xWZXJzaW9uID0+IGhlYWRlcnMucHJvdG9jb2xWZXJzaW9uOwogIGludCBnZXQgY29udGVudExlbmd0aCA9PiBoZWFkZXJzLmNvbnRlbnRMZW5ndGg7CiAgYm9vbCBnZXQgcGVyc2lzdGVudENvbm5lY3Rpb24gPT4gaGVhZGVycy5wZXJzaXN0ZW50Q29ubmVjdGlvbjsKfQoKYWJzdHJhY3QgY2xhc3MgX0h0dHBJbmJvdW5kTWVzc2FnZSBleHRlbmRzIFN0cmVhbTxVaW50OExpc3Q+IHsKICBmaW5hbCBfSHR0cEluY29taW5nIF9pbmNvbWluZzsKICBMaXN0PENvb2tpZT4gX2Nvb2tpZXM7CgogIF9IdHRwSW5ib3VuZE1lc3NhZ2UodGhpcy5faW5jb21pbmcpOwoKICBMaXN0PENvb2tpZT4gZ2V0IGNvb2tpZXMgewogICAgaWYgKF9jb29raWVzICE9IG51bGwpIHJldHVybiBfY29va2llczsKICAgIHJldHVybiBfY29va2llcyA9IGhlYWRlcnMuX3BhcnNlQ29va2llcygpOwogIH0KCiAgX0h0dHBIZWFkZXJzIGdldCBoZWFkZXJzID0+IF9pbmNvbWluZy5oZWFkZXJzOwogIFN0cmluZyBnZXQgcHJvdG9jb2xWZXJzaW9uID0+IGhlYWRlcnMucHJvdG9jb2xWZXJzaW9uOwogIGludCBnZXQgY29udGVudExlbmd0aCA9PiBoZWFkZXJzLmNvbnRlbnRMZW5ndGg7CiAgYm9vbCBnZXQgcGVyc2lzdGVudENvbm5lY3Rpb24gPT4gaGVhZGVycy5wZXJzaXN0ZW50Q29ubmVjdGlvbjsKfQoKY2xhc3MgX0h0dHBSZXF1ZXN0IGV4dGVuZHMgX0h0dHBJbmJvdW5kTWVzc2FnZSBpbXBsZW1lbnRzIEh0dHBSZXF1ZXN0IHsKICBmaW5hbCBIdHRwUmVzcG9uc2UgcmVzcG9uc2U7CgogIGZpbmFsIF9IdHRwU2VydmVyIF9odHRwU2VydmVyOwoKICBmaW5hbCBfSHR0cENvbm5lY3Rpb24gX2h0dHBDb25uZWN0aW9uOwoKICBfSHR0cFNlc3Npb24gX3Nlc3Npb247CgogIFVyaSBfcmVxdWVzdGVkVXJpOwoKICBfSHR0cFJlcXVlc3QodGhpcy5yZXNwb25zZSwgX0h0dHBJbmNvbWluZyBfaW5jb21pbmcsIHRoaXMuX2h0dHBTZXJ2ZXIsCiAgICAgIHRoaXMuX2h0dHBDb25uZWN0aW9uKQogICAgICA6IHN1cGVyKF9pbmNvbWluZykgewogICAgaWYgKGhlYWRlcnMucHJvdG9jb2xWZXJzaW9uID09ICIxLjEiKSB7CiAgICAgIHJlc3BvbnNlLmhlYWRlcnMKICAgICAgICAuLmNodW5rZWRUcmFuc2ZlckVuY29kaW5nID0gdHJ1ZQogICAgICAgIC4ucGVyc2lzdGVudENvbm5lY3Rpb24gPSBoZWFkZXJzLnBlcnNpc3RlbnRDb25uZWN0aW9uOwogICAgfQoKICAgIGlmIChfaHR0cFNlcnZlci5fc2Vzc2lvbk1hbmFnZXJJbnN0YW5jZSAhPSBudWxsKSB7CiAgICAgIC8vIE1hcCB0byBzZXNzaW9uIGlmIGV4aXN0cy4KICAgICAgdmFyIHNlc3Npb25JZHMgPSBjb29raWVzCiAgICAgICAgICAud2hlcmUoKGNvb2tpZSkgPT4gY29va2llLm5hbWUudG9VcHBlckNhc2UoKSA9PSBfREFSVF9TRVNTSU9OX0lEKQogICAgICAgICAgLm1hcCgoY29va2llKSA9PiBjb29raWUudmFsdWUpOwogICAgICBmb3IgKHZhciBzZXNzaW9uSWQgaW4gc2Vzc2lvbklkcykgewogICAgICAgIF9zZXNzaW9uID0gX2h0dHBTZXJ2ZXIuX3Nlc3Npb25NYW5hZ2VyLmdldFNlc3Npb24oc2Vzc2lvbklkKTsKICAgICAgICBpZiAoX3Nlc3Npb24gIT0gbnVsbCkgewogICAgICAgICAgX3Nlc3Npb24uX21hcmtTZWVuKCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxVaW50OExpc3Q+IGxpc3Rlbih2b2lkIG9uRGF0YShVaW50OExpc3QgZXZlbnQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgcmV0dXJuIF9pbmNvbWluZy5saXN0ZW4ob25EYXRhLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsIG9uRG9uZTogb25Eb25lLCBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKTsKICB9CgogIFVyaSBnZXQgdXJpID0+IF9pbmNvbWluZy51cmk7CgogIFVyaSBnZXQgcmVxdWVzdGVkVXJpIHsKICAgIGlmIChfcmVxdWVzdGVkVXJpID09IG51bGwpIHsKICAgICAgdmFyIHByb3RvID0gaGVhZGVyc1sneC1mb3J3YXJkZWQtcHJvdG8nXTsKICAgICAgdmFyIHNjaGVtZSA9IHByb3RvICE9IG51bGwKICAgICAgICAgID8gcHJvdG8uZmlyc3QKICAgICAgICAgIDogX2h0dHBDb25uZWN0aW9uLl9zb2NrZXQgaXMgU2VjdXJlU29ja2V0ID8gImh0dHBzIiA6ICJodHRwIjsKICAgICAgdmFyIGhvc3RMaXN0ID0gaGVhZGVyc1sneC1mb3J3YXJkZWQtaG9zdCddOwogICAgICBTdHJpbmcgaG9zdDsKICAgICAgaWYgKGhvc3RMaXN0ICE9IG51bGwpIHsKICAgICAgICBob3N0ID0gaG9zdExpc3QuZmlyc3Q7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaG9zdExpc3QgPSBoZWFkZXJzW0h0dHBIZWFkZXJzLmhvc3RIZWFkZXJdOwogICAgICAgIGlmIChob3N0TGlzdCAhPSBudWxsKSB7CiAgICAgICAgICBob3N0ID0gaG9zdExpc3QuZmlyc3Q7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGhvc3QgPSAiJHtfaHR0cFNlcnZlci5hZGRyZXNzLmhvc3R9OiR7X2h0dHBTZXJ2ZXIucG9ydH0iOwogICAgICAgIH0KICAgICAgfQogICAgICBfcmVxdWVzdGVkVXJpID0gVXJpLnBhcnNlKCIkc2NoZW1lOi8vJGhvc3QkdXJpIik7CiAgICB9CiAgICByZXR1cm4gX3JlcXVlc3RlZFVyaTsKICB9CgogIFN0cmluZyBnZXQgbWV0aG9kID0+IF9pbmNvbWluZy5tZXRob2Q7CgogIEh0dHBTZXNzaW9uIGdldCBzZXNzaW9uIHsKICAgIGlmIChfc2Vzc2lvbiAhPSBudWxsKSB7CiAgICAgIGlmIChfc2Vzc2lvbi5fZGVzdHJveWVkKSB7CiAgICAgICAgLy8gSXQncyBkZXN0cm95ZWQsIGNsZWFyIGl0LgogICAgICAgIF9zZXNzaW9uID0gbnVsbDsKICAgICAgICAvLyBDcmVhdGUgbmV3IHNlc3Npb24gb2JqZWN0IGJ5IGNhbGxpbmcgcmVjdXJzaXZlLgogICAgICAgIHJldHVybiBzZXNzaW9uOwogICAgICB9CiAgICAgIC8vIEl0J3MgYWxyZWFkeSBtYXBwZWQsIHVzZSBpdC4KICAgICAgcmV0dXJuIF9zZXNzaW9uOwogICAgfQogICAgLy8gQ3JlYXRlIHNlc3Npb24sIHN0b3JlIGl0IGluIGNvbm5lY3Rpb24sIGFuZCByZXR1cm4uCiAgICByZXR1cm4gX3Nlc3Npb24gPSBfaHR0cFNlcnZlci5fc2Vzc2lvbk1hbmFnZXIuY3JlYXRlU2Vzc2lvbigpOwogIH0KCiAgSHR0cENvbm5lY3Rpb25JbmZvIGdldCBjb25uZWN0aW9uSW5mbyA9PiBfaHR0cENvbm5lY3Rpb24uY29ubmVjdGlvbkluZm87CgogIFg1MDlDZXJ0aWZpY2F0ZSBnZXQgY2VydGlmaWNhdGUgewogICAgdmFyIHNvY2tldCA9IF9odHRwQ29ubmVjdGlvbi5fc29ja2V0OwogICAgaWYgKHNvY2tldCBpcyBTZWN1cmVTb2NrZXQpIHJldHVybiBzb2NrZXQucGVlckNlcnRpZmljYXRlOwogICAgcmV0dXJuIG51bGw7CiAgfQp9CgpjbGFzcyBfSHR0cENsaWVudFJlc3BvbnNlIGV4dGVuZHMgX0h0dHBJbmJvdW5kTWVzc2FnZUxpc3RJbnQKICAgIGltcGxlbWVudHMgSHR0cENsaWVudFJlc3BvbnNlIHsKICBMaXN0PFJlZGlyZWN0SW5mbz4gZ2V0IHJlZGlyZWN0cyA9PiBfaHR0cFJlcXVlc3QuX3Jlc3BvbnNlUmVkaXJlY3RzOwoKICAvLyBUaGUgSHR0cENsaWVudCB0aGlzIHJlc3BvbnNlIGJlbG9uZ3MgdG8uCiAgZmluYWwgX0h0dHBDbGllbnQgX2h0dHBDbGllbnQ7CgogIC8vIFRoZSBIdHRwQ2xpZW50UmVxdWVzdCBvZiB0aGlzIHJlc3BvbnNlLgogIGZpbmFsIF9IdHRwQ2xpZW50UmVxdWVzdCBfaHR0cFJlcXVlc3Q7CgogIC8vIFRoZSBjb21wcmVzc2lvbiBzdGF0ZSBvZiB0aGlzIHJlc3BvbnNlLgogIGZpbmFsIEh0dHBDbGllbnRSZXNwb25zZUNvbXByZXNzaW9uU3RhdGUgY29tcHJlc3Npb25TdGF0ZTsKCiAgX0h0dHBDbGllbnRSZXNwb25zZSgKICAgICAgX0h0dHBJbmNvbWluZyBfaW5jb21pbmcsIHRoaXMuX2h0dHBSZXF1ZXN0LCB0aGlzLl9odHRwQ2xpZW50KQogICAgICA6IGNvbXByZXNzaW9uU3RhdGUgPSBfZ2V0Q29tcHJlc3Npb25TdGF0ZShfaHR0cENsaWVudCwgX2luY29taW5nLmhlYWRlcnMpLAogICAgICAgIHN1cGVyKF9pbmNvbWluZykgewogICAgLy8gU2V0IHVyaSBmb3IgcG90ZW50aWFsIGV4Y2VwdGlvbnMuCiAgICBfaW5jb21pbmcudXJpID0gX2h0dHBSZXF1ZXN0LnVyaTsKICB9CgogIHN0YXRpYyBIdHRwQ2xpZW50UmVzcG9uc2VDb21wcmVzc2lvblN0YXRlIF9nZXRDb21wcmVzc2lvblN0YXRlKAogICAgICBfSHR0cENsaWVudCBodHRwQ2xpZW50LCBfSHR0cEhlYWRlcnMgaGVhZGVycykgewogICAgaWYgKGhlYWRlcnMudmFsdWUoSHR0cEhlYWRlcnMuY29udGVudEVuY29kaW5nSGVhZGVyKSA9PSAiZ3ppcCIpIHsKICAgICAgcmV0dXJuIGh0dHBDbGllbnQuYXV0b1VuY29tcHJlc3MKICAgICAgICAgID8gSHR0cENsaWVudFJlc3BvbnNlQ29tcHJlc3Npb25TdGF0ZS5kZWNvbXByZXNzZWQKICAgICAgICAgIDogSHR0cENsaWVudFJlc3BvbnNlQ29tcHJlc3Npb25TdGF0ZS5jb21wcmVzc2VkOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIEh0dHBDbGllbnRSZXNwb25zZUNvbXByZXNzaW9uU3RhdGUubm90Q29tcHJlc3NlZDsKICAgIH0KICB9CgogIGludCBnZXQgc3RhdHVzQ29kZSA9PiBfaW5jb21pbmcuc3RhdHVzQ29kZTsKICBTdHJpbmcgZ2V0IHJlYXNvblBocmFzZSA9PiBfaW5jb21pbmcucmVhc29uUGhyYXNlOwoKICBYNTA5Q2VydGlmaWNhdGUgZ2V0IGNlcnRpZmljYXRlIHsKICAgIHZhciBzb2NrZXQgPSBfaHR0cFJlcXVlc3QuX2h0dHBDbGllbnRDb25uZWN0aW9uLl9zb2NrZXQ7CiAgICBpZiAoc29ja2V0IGlzIFNlY3VyZVNvY2tldCkgcmV0dXJuIHNvY2tldC5wZWVyQ2VydGlmaWNhdGU7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIExpc3Q8Q29va2llPiBnZXQgY29va2llcyB7CiAgICBpZiAoX2Nvb2tpZXMgIT0gbnVsbCkgcmV0dXJuIF9jb29raWVzOwogICAgX2Nvb2tpZXMgPSBuZXcgTGlzdDxDb29raWU+KCk7CiAgICBMaXN0PFN0cmluZz4gdmFsdWVzID0gaGVhZGVyc1tIdHRwSGVhZGVycy5zZXRDb29raWVIZWFkZXJdOwogICAgaWYgKHZhbHVlcyAhPSBudWxsKSB7CiAgICAgIHZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgewogICAgICAgIF9jb29raWVzLmFkZChuZXcgQ29va2llLmZyb21TZXRDb29raWVWYWx1ZSh2YWx1ZSkpOwogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBfY29va2llczsKICB9CgogIGJvb2wgZ2V0IGlzUmVkaXJlY3QgewogICAgaWYgKF9odHRwUmVxdWVzdC5tZXRob2QgPT0gIkdFVCIgfHwgX2h0dHBSZXF1ZXN0Lm1ldGhvZCA9PSAiSEVBRCIpIHsKICAgICAgcmV0dXJuIHN0YXR1c0NvZGUgPT0gSHR0cFN0YXR1cy5tb3ZlZFBlcm1hbmVudGx5IHx8CiAgICAgICAgICBzdGF0dXNDb2RlID09IEh0dHBTdGF0dXMuZm91bmQgfHwKICAgICAgICAgIHN0YXR1c0NvZGUgPT0gSHR0cFN0YXR1cy5zZWVPdGhlciB8fAogICAgICAgICAgc3RhdHVzQ29kZSA9PSBIdHRwU3RhdHVzLnRlbXBvcmFyeVJlZGlyZWN0OwogICAgfSBlbHNlIGlmIChfaHR0cFJlcXVlc3QubWV0aG9kID09ICJQT1NUIikgewogICAgICByZXR1cm4gc3RhdHVzQ29kZSA9PSBIdHRwU3RhdHVzLnNlZU90aGVyOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgRnV0dXJlPEh0dHBDbGllbnRSZXNwb25zZT4gcmVkaXJlY3QoCiAgICAgIFtTdHJpbmcgbWV0aG9kLCBVcmkgdXJsLCBib29sIGZvbGxvd0xvb3BzXSkgewogICAgaWYgKG1ldGhvZCA9PSBudWxsKSB7CiAgICAgIC8vIFNldCBtZXRob2QgYXMgZGVmaW5lZCBieSBSRkMgMjYxNiBzZWN0aW9uIDEwLjMuNC4KICAgICAgaWYgKHN0YXR1c0NvZGUgPT0gSHR0cFN0YXR1cy5zZWVPdGhlciAmJiBfaHR0cFJlcXVlc3QubWV0aG9kID09ICJQT1NUIikgewogICAgICAgIG1ldGhvZCA9ICJHRVQiOwogICAgICB9IGVsc2UgewogICAgICAgIG1ldGhvZCA9IF9odHRwUmVxdWVzdC5tZXRob2Q7CiAgICAgIH0KICAgIH0KICAgIGlmICh1cmwgPT0gbnVsbCkgewogICAgICBTdHJpbmcgbG9jYXRpb24gPSBoZWFkZXJzLnZhbHVlKEh0dHBIZWFkZXJzLmxvY2F0aW9uSGVhZGVyKTsKICAgICAgaWYgKGxvY2F0aW9uID09IG51bGwpIHsKICAgICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiUmVzcG9uc2UgaGFzIG5vIExvY2F0aW9uIGhlYWRlciBmb3IgcmVkaXJlY3QiKTsKICAgICAgfQogICAgICB1cmwgPSBVcmkucGFyc2UobG9jYXRpb24pOwogICAgfQogICAgaWYgKGZvbGxvd0xvb3BzICE9IHRydWUpIHsKICAgICAgZm9yICh2YXIgcmVkaXJlY3QgaW4gcmVkaXJlY3RzKSB7CiAgICAgICAgaWYgKHJlZGlyZWN0LmxvY2F0aW9uID09IHVybCkgewogICAgICAgICAgcmV0dXJuIG5ldyBGdXR1cmUuZXJyb3IoCiAgICAgICAgICAgICAgbmV3IFJlZGlyZWN0RXhjZXB0aW9uKCJSZWRpcmVjdCBsb29wIGRldGVjdGVkIiwgcmVkaXJlY3RzKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gX2h0dHBDbGllbnQKICAgICAgICAuX29wZW5VcmxGcm9tUmVxdWVzdChtZXRob2QsIHVybCwgX2h0dHBSZXF1ZXN0KQogICAgICAgIC50aGVuKChyZXF1ZXN0KSB7CiAgICAgIHJlcXVlc3QuX3Jlc3BvbnNlUmVkaXJlY3RzCiAgICAgICAgLi5hZGRBbGwodGhpcy5yZWRpcmVjdHMpCiAgICAgICAgLi5hZGQobmV3IF9SZWRpcmVjdEluZm8oc3RhdHVzQ29kZSwgbWV0aG9kLCB1cmwpKTsKICAgICAgcmV0dXJuIHJlcXVlc3QuY2xvc2UoKTsKICAgIH0pOwogIH0KCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFVpbnQ4TGlzdD4gbGlzdGVuKHZvaWQgb25EYXRhKFVpbnQ4TGlzdCBldmVudCksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICBpZiAoX2luY29taW5nLnVwZ3JhZGVkKSB7CiAgICAgIC8vIElmIHVwZ3JhZGVkLCB0aGUgY29ubmVjdGlvbiBpcyBhbHJlYWR5ICdyZW1vdmVkJyBmb3JtIHRoZSBjbGllbnQuCiAgICAgIC8vIFNpbmNlIGxpc3RlbmluZyB0byB1cGdyYWRlZCBkYXRhIGlzICdib2d1cycsIHNpbXBseSBjbG9zZSBhbmQKICAgICAgLy8gcmV0dXJuIGVtcHR5IHN0cmVhbSBzdWJzY3JpcHRpb24uCiAgICAgIF9odHRwUmVxdWVzdC5faHR0cENsaWVudENvbm5lY3Rpb24uZGVzdHJveSgpOwogICAgICByZXR1cm4gbmV3IFN0cmVhbTxVaW50OExpc3Q+LmVtcHR5KCkubGlzdGVuKG51bGwsIG9uRG9uZTogb25Eb25lKTsKICAgIH0KICAgIFN0cmVhbTxVaW50OExpc3Q+IHN0cmVhbSA9IF9pbmNvbWluZzsKICAgIGlmIChjb21wcmVzc2lvblN0YXRlID09IEh0dHBDbGllbnRSZXNwb25zZUNvbXByZXNzaW9uU3RhdGUuZGVjb21wcmVzc2VkKSB7CiAgICAgIHN0cmVhbSA9IHN0cmVhbQogICAgICAgICAgLmNhc3Q8TGlzdDxpbnQ+PigpCiAgICAgICAgICAudHJhbnNmb3JtKGd6aXAuZGVjb2RlcikKICAgICAgICAgIC50cmFuc2Zvcm0oY29uc3QgX1RvVWludDhMaXN0KCkpOwogICAgfQogICAgcmV0dXJuIHN0cmVhbS5saXN0ZW4ob25EYXRhLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsIG9uRG9uZTogb25Eb25lLCBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKTsKICB9CgogIEZ1dHVyZTxTb2NrZXQ+IGRldGFjaFNvY2tldCgpIHsKICAgIF9odHRwQ2xpZW50Ll9jb25uZWN0aW9uQ2xvc2VkKF9odHRwUmVxdWVzdC5faHR0cENsaWVudENvbm5lY3Rpb24pOwogICAgcmV0dXJuIF9odHRwUmVxdWVzdC5faHR0cENsaWVudENvbm5lY3Rpb24uZGV0YWNoU29ja2V0KCk7CiAgfQoKICBIdHRwQ29ubmVjdGlvbkluZm8gZ2V0IGNvbm5lY3Rpb25JbmZvID0+IF9odHRwUmVxdWVzdC5jb25uZWN0aW9uSW5mbzsKCiAgYm9vbCBnZXQgX3Nob3VsZEF1dGhlbnRpY2F0ZVByb3h5IHsKICAgIC8vIE9ubHkgdHJ5IHRvIGF1dGhlbnRpY2F0ZSBpZiB0aGVyZSBpcyBhIGNoYWxsZW5nZSBpbiB0aGUgcmVzcG9uc2UuCiAgICBMaXN0PFN0cmluZz4gY2hhbGxlbmdlID0gaGVhZGVyc1tIdHRwSGVhZGVycy5wcm94eUF1dGhlbnRpY2F0ZUhlYWRlcl07CiAgICByZXR1cm4gc3RhdHVzQ29kZSA9PSBIdHRwU3RhdHVzLnByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZCAmJgogICAgICAgIGNoYWxsZW5nZSAhPSBudWxsICYmCiAgICAgICAgY2hhbGxlbmdlLmxlbmd0aCA9PSAxOwogIH0KCiAgYm9vbCBnZXQgX3Nob3VsZEF1dGhlbnRpY2F0ZSB7CiAgICAvLyBPbmx5IHRyeSB0byBhdXRoZW50aWNhdGUgaWYgdGhlcmUgaXMgYSBjaGFsbGVuZ2UgaW4gdGhlIHJlc3BvbnNlLgogICAgTGlzdDxTdHJpbmc+IGNoYWxsZW5nZSA9IGhlYWRlcnNbSHR0cEhlYWRlcnMud3d3QXV0aGVudGljYXRlSGVhZGVyXTsKICAgIHJldHVybiBzdGF0dXNDb2RlID09IEh0dHBTdGF0dXMudW5hdXRob3JpemVkICYmCiAgICAgICAgY2hhbGxlbmdlICE9IG51bGwgJiYKICAgICAgICBjaGFsbGVuZ2UubGVuZ3RoID09IDE7CiAgfQoKICBGdXR1cmU8SHR0cENsaWVudFJlc3BvbnNlPiBfYXV0aGVudGljYXRlKGJvb2wgcHJveHlBdXRoKSB7CiAgICBfaHR0cFJlcXVlc3QuX3RpbWVsaW5lPy5pbnN0YW50KCdBdXRoZW50aWNhdGlvbicpOwogICAgRnV0dXJlPEh0dHBDbGllbnRSZXNwb25zZT4gcmV0cnkoKSB7CiAgICAgIF9odHRwUmVxdWVzdC5fdGltZWxpbmU/Lmluc3RhbnQoJ1JldHJ5aW5nJyk7CiAgICAgIC8vIERyYWluIGJvZHkgYW5kIHJldHJ5LgogICAgICByZXR1cm4gZHJhaW4oKS50aGVuKChfKSB7CiAgICAgICAgcmV0dXJuIF9odHRwQ2xpZW50CiAgICAgICAgICAgIC5fb3BlblVybEZyb21SZXF1ZXN0KAogICAgICAgICAgICAgICAgX2h0dHBSZXF1ZXN0Lm1ldGhvZCwgX2h0dHBSZXF1ZXN0LnVyaSwgX2h0dHBSZXF1ZXN0KQogICAgICAgICAgICAudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdC5jbG9zZSgpKTsKICAgICAgfSk7CiAgICB9CgogICAgTGlzdDxTdHJpbmc+IGF1dGhDaGFsbGVuZ2UoKSB7CiAgICAgIHJldHVybiBwcm94eUF1dGgKICAgICAgICAgID8gaGVhZGVyc1tIdHRwSGVhZGVycy5wcm94eUF1dGhlbnRpY2F0ZUhlYWRlcl0KICAgICAgICAgIDogaGVhZGVyc1tIdHRwSGVhZGVycy53d3dBdXRoZW50aWNhdGVIZWFkZXJdOwogICAgfQoKICAgIF9DcmVkZW50aWFscyBmaW5kQ3JlZGVudGlhbHMoX0F1dGhlbnRpY2F0aW9uU2NoZW1lIHNjaGVtZSkgewogICAgICByZXR1cm4gcHJveHlBdXRoCiAgICAgICAgICA/IF9odHRwQ2xpZW50Ll9maW5kUHJveHlDcmVkZW50aWFscyhfaHR0cFJlcXVlc3QuX3Byb3h5LCBzY2hlbWUpCiAgICAgICAgICA6IF9odHRwQ2xpZW50Ll9maW5kQ3JlZGVudGlhbHMoX2h0dHBSZXF1ZXN0LnVyaSwgc2NoZW1lKTsKICAgIH0KCiAgICB2b2lkIHJlbW92ZUNyZWRlbnRpYWxzKF9DcmVkZW50aWFscyBjcikgewogICAgICBpZiAocHJveHlBdXRoKSB7CiAgICAgICAgX2h0dHBDbGllbnQuX3JlbW92ZVByb3h5Q3JlZGVudGlhbHMoY3IpOwogICAgICB9IGVsc2UgewogICAgICAgIF9odHRwQ2xpZW50Ll9yZW1vdmVDcmVkZW50aWFscyhjcik7CiAgICAgIH0KICAgIH0KCiAgICBGdXR1cmUgcmVxdWVzdEF1dGhlbnRpY2F0aW9uKF9BdXRoZW50aWNhdGlvblNjaGVtZSBzY2hlbWUsIFN0cmluZyByZWFsbSkgewogICAgICBpZiAocHJveHlBdXRoKSB7CiAgICAgICAgaWYgKF9odHRwQ2xpZW50Ll9hdXRoZW50aWNhdGVQcm94eSA9PSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZShmYWxzZSk7CiAgICAgICAgfQogICAgICAgIHZhciBwcm94eSA9IF9odHRwUmVxdWVzdC5fcHJveHk7CiAgICAgICAgcmV0dXJuIF9odHRwQ2xpZW50Ll9hdXRoZW50aWNhdGVQcm94eSgKICAgICAgICAgICAgcHJveHkuaG9zdCwgcHJveHkucG9ydCwgc2NoZW1lLnRvU3RyaW5nKCksIHJlYWxtKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoX2h0dHBDbGllbnQuX2F1dGhlbnRpY2F0ZSA9PSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZShmYWxzZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfaHR0cENsaWVudC5fYXV0aGVudGljYXRlKAogICAgICAgICAgICBfaHR0cFJlcXVlc3QudXJpLCBzY2hlbWUudG9TdHJpbmcoKSwgcmVhbG0pOwogICAgICB9CiAgICB9CgogICAgTGlzdDxTdHJpbmc+IGNoYWxsZW5nZSA9IGF1dGhDaGFsbGVuZ2UoKTsKICAgIGFzc2VydChjaGFsbGVuZ2UgIT0gbnVsbCB8fCBjaGFsbGVuZ2UubGVuZ3RoID09IDEpOwogICAgX0hlYWRlclZhbHVlIGhlYWRlciA9CiAgICAgICAgX0hlYWRlclZhbHVlLnBhcnNlKGNoYWxsZW5nZVswXSwgcGFyYW1ldGVyU2VwYXJhdG9yOiAiLCIpOwogICAgX0F1dGhlbnRpY2F0aW9uU2NoZW1lIHNjaGVtZSA9CiAgICAgICAgbmV3IF9BdXRoZW50aWNhdGlvblNjaGVtZS5mcm9tU3RyaW5nKGhlYWRlci52YWx1ZSk7CiAgICBTdHJpbmcgcmVhbG0gPSBoZWFkZXIucGFyYW1ldGVyc1sicmVhbG0iXTsKCiAgICAvLyBTZWUgaWYgYW55IG1hdGNoaW5nIGNyZWRlbnRpYWxzIGFyZSBhdmFpbGFibGUuCiAgICBfQ3JlZGVudGlhbHMgY3IgPSBmaW5kQ3JlZGVudGlhbHMoc2NoZW1lKTsKICAgIGlmIChjciAhPSBudWxsKSB7CiAgICAgIC8vIEZvciBiYXNpYyBhdXRoZW50aWNhdGlvbiBkb24ndCByZXRyeSBhbHJlYWR5IHVzZWQgY3JlZGVudGlhbHMKICAgICAgLy8gYXMgdGhleSBtdXN0IGhhdmUgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSByZXF1ZXN0IGNhdXNpbmcKICAgICAgLy8gdGhpcyBhdXRoZW50aWNhdGUgcmVzcG9uc2UuCiAgICAgIGlmIChjci5zY2hlbWUgPT0gX0F1dGhlbnRpY2F0aW9uU2NoZW1lLkJBU0lDICYmICFjci51c2VkKSB7CiAgICAgICAgLy8gQ3JlZGVudGlhbHMgd2hlcmUgZm91bmQsIHByZXBhcmUgZm9yIHJldHJ5aW5nIHRoZSByZXF1ZXN0LgogICAgICAgIHJldHVybiByZXRyeSgpOwogICAgICB9CgogICAgICAvLyBEaWdlc3QgYXV0aGVudGljYXRpb24gb25seSBzdXBwb3J0cyB0aGUgTUQ1IGFsZ29yaXRobS4KICAgICAgaWYgKGNyLnNjaGVtZSA9PSBfQXV0aGVudGljYXRpb25TY2hlbWUuRElHRVNUICYmCiAgICAgICAgICAoaGVhZGVyLnBhcmFtZXRlcnNbImFsZ29yaXRobSJdID09IG51bGwgfHwKICAgICAgICAgICAgICBoZWFkZXIucGFyYW1ldGVyc1siYWxnb3JpdGhtIl0udG9Mb3dlckNhc2UoKSA9PSAibWQ1IikpIHsKICAgICAgICBpZiAoY3Iubm9uY2UgPT0gbnVsbCB8fCBjci5ub25jZSA9PSBoZWFkZXIucGFyYW1ldGVyc1sibm9uY2UiXSkgewogICAgICAgICAgLy8gSWYgdGhlIG5vbmNlIGlzIG5vdCBzZXQgdGhlbiB0aGlzIGlzIHRoZSBmaXJzdCBhdXRoZW50aWNhdGUKICAgICAgICAgIC8vIHJlc3BvbnNlIGZvciB0aGVzZSBjcmVkZW50aWFscy4gU2V0IHVwIGF1dGhlbnRpY2F0aW9uIHN0YXRlLgogICAgICAgICAgaWYgKGNyLm5vbmNlID09IG51bGwpIHsKICAgICAgICAgICAgY3IKICAgICAgICAgICAgICAuLm5vbmNlID0gaGVhZGVyLnBhcmFtZXRlcnNbIm5vbmNlIl0KICAgICAgICAgICAgICAuLmFsZ29yaXRobSA9ICJNRDUiCiAgICAgICAgICAgICAgLi5xb3AgPSBoZWFkZXIucGFyYW1ldGVyc1sicW9wIl0KICAgICAgICAgICAgICAuLm5vbmNlQ291bnQgPSAwOwogICAgICAgICAgfQogICAgICAgICAgLy8gQ3JlZGVudGlhbHMgd2hlcmUgZm91bmQsIHByZXBhcmUgZm9yIHJldHJ5aW5nIHRoZSByZXF1ZXN0LgogICAgICAgICAgcmV0dXJuIHJldHJ5KCk7CiAgICAgICAgfSBlbHNlIGlmIChoZWFkZXIucGFyYW1ldGVyc1sic3RhbGUiXSAhPSBudWxsICYmCiAgICAgICAgICAgIGhlYWRlci5wYXJhbWV0ZXJzWyJzdGFsZSJdLnRvTG93ZXJDYXNlKCkgPT0gInRydWUiKSB7CiAgICAgICAgICAvLyBJZiBzdGFsZSBpcyB0cnVlIHJldHJ5IHdpdGggbmV3IG5vbmNlLgogICAgICAgICAgY3Iubm9uY2UgPSBoZWFkZXIucGFyYW1ldGVyc1sibm9uY2UiXTsKICAgICAgICAgIC8vIENyZWRlbnRpYWxzIHdoZXJlIGZvdW5kLCBwcmVwYXJlIGZvciByZXRyeWluZyB0aGUgcmVxdWVzdC4KICAgICAgICAgIHJldHVybiByZXRyeSgpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIEFzayBmb3IgbW9yZSBjcmVkZW50aWFscyBpZiBub25lIGZvdW5kIG9yIHRoZSBvbmUgZm91bmQgaGFzCiAgICAvLyBhbHJlYWR5IGJlZW4gdXNlZC4gSWYgaXQgaGFzIGFscmVhZHkgYmVlbiB1c2VkIGl0IG11c3Qgbm93IGJlCiAgICAvLyBpbnZhbGlkIGFuZCBpcyByZW1vdmVkLgogICAgaWYgKGNyICE9IG51bGwpIHsKICAgICAgcmVtb3ZlQ3JlZGVudGlhbHMoY3IpOwogICAgICBjciA9IG51bGw7CiAgICB9CiAgICByZXR1cm4gcmVxdWVzdEF1dGhlbnRpY2F0aW9uKHNjaGVtZSwgcmVhbG0pLnRoZW4oKGNyZWRzQXZhaWxhYmxlKSB7CiAgICAgIGlmIChjcmVkc0F2YWlsYWJsZSkgewogICAgICAgIGNyID0gX2h0dHBDbGllbnQuX2ZpbmRDcmVkZW50aWFscyhfaHR0cFJlcXVlc3QudXJpLCBzY2hlbWUpOwogICAgICAgIHJldHVybiByZXRyeSgpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIE5vIGNyZWRlbnRpYWxzIGF2YWlsYWJsZSwgY29tcGxldGUgd2l0aCBvcmlnaW5hbCByZXNwb25zZS4KICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfQogICAgfSk7CiAgfQp9CgpjbGFzcyBfVG9VaW50OExpc3QgZXh0ZW5kcyBDb252ZXJ0ZXI8TGlzdDxpbnQ+LCBVaW50OExpc3Q+IHsKICBjb25zdCBfVG9VaW50OExpc3QoKTsKCiAgVWludDhMaXN0IGNvbnZlcnQoTGlzdDxpbnQ+IGlucHV0KSA9PiBVaW50OExpc3QuZnJvbUxpc3QoaW5wdXQpOwoKICBTaW5rPExpc3Q8aW50Pj4gc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPFVpbnQ4TGlzdD4gc2luaykgewogICAgcmV0dXJuIF9VaW50OExpc3RDb252ZXJzaW9uU2luayhzaW5rKTsKICB9Cn0KCmNsYXNzIF9VaW50OExpc3RDb252ZXJzaW9uU2luayBpbXBsZW1lbnRzIFNpbms8TGlzdDxpbnQ+PiB7CiAgY29uc3QgX1VpbnQ4TGlzdENvbnZlcnNpb25TaW5rKHRoaXMuX3RhcmdldCk7CgogIGZpbmFsIFNpbms8VWludDhMaXN0PiBfdGFyZ2V0OwoKICB2b2lkIGFkZChMaXN0PGludD4gZGF0YSkgewogICAgX3RhcmdldC5hZGQoVWludDhMaXN0LmZyb21MaXN0KGRhdGEpKTsKICB9CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfdGFyZ2V0LmNsb3NlKCk7CiAgfQp9CgpjbGFzcyBfU3RyZWFtU2lua0ltcGw8VD4gaW1wbGVtZW50cyBTdHJlYW1TaW5rPFQ+IHsKICBmaW5hbCBTdHJlYW1Db25zdW1lcjxUPiBfdGFyZ2V0OwogIGZpbmFsIENvbXBsZXRlciBfZG9uZUNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXIoKTsKICBTdHJlYW1Db250cm9sbGVyPFQ+IF9jb250cm9sbGVySW5zdGFuY2U7CiAgQ29tcGxldGVyIF9jb250cm9sbGVyQ29tcGxldGVyOwogIGJvb2wgX2lzQ2xvc2VkID0gZmFsc2U7CiAgYm9vbCBfaXNCb3VuZCA9IGZhbHNlOwogIGJvb2wgX2hhc0Vycm9yID0gZmFsc2U7CgogIF9TdHJlYW1TaW5rSW1wbCh0aGlzLl90YXJnZXQpOwoKICB2b2lkIGFkZChUIGRhdGEpIHsKICAgIGlmIChfaXNDbG9zZWQpIHsKICAgICAgdGhyb3cgU3RhdGVFcnJvcigiU3RyZWFtU2luayBpcyBjbG9zZWQiKTsKICAgIH0KICAgIF9jb250cm9sbGVyLmFkZChkYXRhKTsKICB9CgogIHZvaWQgYWRkRXJyb3IoZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBpZiAoX2lzQ2xvc2VkKSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoIlN0cmVhbVNpbmsgaXMgY2xvc2VkIik7CiAgICB9CiAgICBfY29udHJvbGxlci5hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICBGdXR1cmUgYWRkU3RyZWFtKFN0cmVhbTxUPiBzdHJlYW0pIHsKICAgIGlmIChfaXNCb3VuZCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiU3RyZWFtU2luayBpcyBhbHJlYWR5IGJvdW5kIHRvIGEgc3RyZWFtIik7CiAgICB9CiAgICBfaXNCb3VuZCA9IHRydWU7CiAgICBpZiAoX2hhc0Vycm9yKSByZXR1cm4gZG9uZTsKICAgIC8vIFdhaXQgZm9yIGFueSBzeW5jIG9wZXJhdGlvbnMgdG8gY29tcGxldGUuCiAgICBGdXR1cmUgdGFyZ2V0QWRkU3RyZWFtKCkgewogICAgICByZXR1cm4gX3RhcmdldC5hZGRTdHJlYW0oc3RyZWFtKS53aGVuQ29tcGxldGUoKCkgewogICAgICAgIF9pc0JvdW5kID0gZmFsc2U7CiAgICAgIH0pOwogICAgfQoKICAgIGlmIChfY29udHJvbGxlckluc3RhbmNlID09IG51bGwpIHJldHVybiB0YXJnZXRBZGRTdHJlYW0oKTsKICAgIHZhciBmdXR1cmUgPSBfY29udHJvbGxlckNvbXBsZXRlci5mdXR1cmU7CiAgICBfY29udHJvbGxlckluc3RhbmNlLmNsb3NlKCk7CiAgICByZXR1cm4gZnV0dXJlLnRoZW4oKF8pID0+IHRhcmdldEFkZFN0cmVhbSgpKTsKICB9CgogIEZ1dHVyZSBmbHVzaCgpIHsKICAgIGlmIChfaXNCb3VuZCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiU3RyZWFtU2luayBpcyBib3VuZCB0byBhIHN0cmVhbSIpOwogICAgfQogICAgaWYgKF9jb250cm9sbGVySW5zdGFuY2UgPT0gbnVsbCkgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUodGhpcyk7CiAgICAvLyBBZGRpbmcgYW4gZW1wdHkgc3RyZWFtLWNvbnRyb2xsZXIgd2lsbCByZXR1cm4gYSBmdXR1cmUgdGhhdCB3aWxsIGNvbXBsZXRlCiAgICAvLyB3aGVuIGFsbCBkYXRhIGlzIGRvbmUuCiAgICBfaXNCb3VuZCA9IHRydWU7CiAgICB2YXIgZnV0dXJlID0gX2NvbnRyb2xsZXJDb21wbGV0ZXIuZnV0dXJlOwogICAgX2NvbnRyb2xsZXJJbnN0YW5jZS5jbG9zZSgpOwogICAgcmV0dXJuIGZ1dHVyZS53aGVuQ29tcGxldGUoKCkgewogICAgICBfaXNCb3VuZCA9IGZhbHNlOwogICAgfSk7CiAgfQoKICBGdXR1cmUgY2xvc2UoKSB7CiAgICBpZiAoX2lzQm91bmQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlN0cmVhbVNpbmsgaXMgYm91bmQgdG8gYSBzdHJlYW0iKTsKICAgIH0KICAgIGlmICghX2lzQ2xvc2VkKSB7CiAgICAgIF9pc0Nsb3NlZCA9IHRydWU7CiAgICAgIGlmIChfY29udHJvbGxlckluc3RhbmNlICE9IG51bGwpIHsKICAgICAgICBfY29udHJvbGxlckluc3RhbmNlLmNsb3NlKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2Nsb3NlVGFyZ2V0KCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBkb25lOwogIH0KCiAgdm9pZCBfY2xvc2VUYXJnZXQoKSB7CiAgICBfdGFyZ2V0LmNsb3NlKCkudGhlbihfY29tcGxldGVEb25lVmFsdWUsIG9uRXJyb3I6IF9jb21wbGV0ZURvbmVFcnJvcik7CiAgfQoKICBGdXR1cmUgZ2V0IGRvbmUgPT4gX2RvbmVDb21wbGV0ZXIuZnV0dXJlOwoKICB2b2lkIF9jb21wbGV0ZURvbmVWYWx1ZSh2YWx1ZSkgewogICAgaWYgKCFfZG9uZUNvbXBsZXRlci5pc0NvbXBsZXRlZCkgewogICAgICBfZG9uZUNvbXBsZXRlci5jb21wbGV0ZSh2YWx1ZSk7CiAgICB9CiAgfQoKICB2b2lkIF9jb21wbGV0ZURvbmVFcnJvcihlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBpZiAoIV9kb25lQ29tcGxldGVyLmlzQ29tcGxldGVkKSB7CiAgICAgIF9oYXNFcnJvciA9IHRydWU7CiAgICAgIF9kb25lQ29tcGxldGVyLmNvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgfQogIH0KCiAgU3RyZWFtQ29udHJvbGxlcjxUPiBnZXQgX2NvbnRyb2xsZXIgewogICAgaWYgKF9pc0JvdW5kKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJTdHJlYW1TaW5rIGlzIGJvdW5kIHRvIGEgc3RyZWFtIik7CiAgICB9CiAgICBpZiAoX2lzQ2xvc2VkKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJTdHJlYW1TaW5rIGlzIGNsb3NlZCIpOwogICAgfQogICAgaWYgKF9jb250cm9sbGVySW5zdGFuY2UgPT0gbnVsbCkgewogICAgICBfY29udHJvbGxlckluc3RhbmNlID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8VD4oc3luYzogdHJ1ZSk7CiAgICAgIF9jb250cm9sbGVyQ29tcGxldGVyID0gbmV3IENvbXBsZXRlcigpOwogICAgICBfdGFyZ2V0LmFkZFN0cmVhbShfY29udHJvbGxlci5zdHJlYW0pLnRoZW4oKF8pIHsKICAgICAgICBpZiAoX2lzQm91bmQpIHsKICAgICAgICAgIC8vIEEgbmV3IHN0cmVhbSB0YWtlcyBvdmVyIC0gZm9yd2FyZCB2YWx1ZXMgdG8gdGhhdCBzdHJlYW0uCiAgICAgICAgICBfY29udHJvbGxlckNvbXBsZXRlci5jb21wbGV0ZSh0aGlzKTsKICAgICAgICAgIF9jb250cm9sbGVyQ29tcGxldGVyID0gbnVsbDsKICAgICAgICAgIF9jb250cm9sbGVySW5zdGFuY2UgPSBudWxsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBObyBuZXcgc3RyZWFtLCAuY2xvc2Ugd2FzIGNhbGxlZC4gQ2xvc2UgX3RhcmdldC4KICAgICAgICAgIF9jbG9zZVRhcmdldCgpOwogICAgICAgIH0KICAgICAgfSwgb25FcnJvcjogKGVycm9yLCBzdGFja1RyYWNlKSB7CiAgICAgICAgaWYgKF9pc0JvdW5kKSB7CiAgICAgICAgICAvLyBBIG5ldyBzdHJlYW0gdGFrZXMgb3ZlciAtIGZvcndhcmQgZXJyb3JzIHRvIHRoYXQgc3RyZWFtLgogICAgICAgICAgX2NvbnRyb2xsZXJDb21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgICAgICBfY29udHJvbGxlckNvbXBsZXRlciA9IG51bGw7CiAgICAgICAgICBfY29udHJvbGxlckluc3RhbmNlID0gbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gTm8gbmV3IHN0cmVhbS4gTm8gbmVlZCB0byBjbG9zZSB0YXJnZXQsIGFzIGl0IGhhcyBhbHJlYWR5CiAgICAgICAgICAvLyBmYWlsZWQuCiAgICAgICAgICBfY29tcGxldGVEb25lRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gX2NvbnRyb2xsZXJJbnN0YW5jZTsKICB9Cn0KCmNsYXNzIF9JT1NpbmtJbXBsIGV4dGVuZHMgX1N0cmVhbVNpbmtJbXBsPExpc3Q8aW50Pj4gaW1wbGVtZW50cyBJT1NpbmsgewogIEVuY29kaW5nIF9lbmNvZGluZzsKICBib29sIF9lbmNvZGluZ011dGFibGUgPSB0cnVlOwoKICBfSU9TaW5rSW1wbChTdHJlYW1Db25zdW1lcjxMaXN0PGludD4+IHRhcmdldCwgdGhpcy5fZW5jb2RpbmcpIDogc3VwZXIodGFyZ2V0KTsKCiAgRW5jb2RpbmcgZ2V0IGVuY29kaW5nID0+IF9lbmNvZGluZzsKCiAgdm9pZCBzZXQgZW5jb2RpbmcoRW5jb2RpbmcgdmFsdWUpIHsKICAgIGlmICghX2VuY29kaW5nTXV0YWJsZSkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiSU9TaW5rIGVuY29kaW5nIGlzIG5vdCBtdXRhYmxlIik7CiAgICB9CiAgICBfZW5jb2RpbmcgPSB2YWx1ZTsKICB9CgogIHZvaWQgd3JpdGUoT2JqZWN0IG9iaikgewogICAgU3RyaW5nIHN0cmluZyA9ICckb2JqJzsKICAgIGlmIChzdHJpbmcuaXNFbXB0eSkgcmV0dXJuOwogICAgYWRkKF9lbmNvZGluZy5lbmNvZGUoc3RyaW5nKSk7CiAgfQoKICB2b2lkIHdyaXRlQWxsKEl0ZXJhYmxlIG9iamVjdHMsIFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKSB7CiAgICBJdGVyYXRvciBpdGVyYXRvciA9IG9iamVjdHMuaXRlcmF0b3I7CiAgICBpZiAoIWl0ZXJhdG9yLm1vdmVOZXh0KCkpIHJldHVybjsKICAgIGlmIChzZXBhcmF0b3IuaXNFbXB0eSkgewogICAgICBkbyB7CiAgICAgICAgd3JpdGUoaXRlcmF0b3IuY3VycmVudCk7CiAgICAgIH0gd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGUoaXRlcmF0b3IuY3VycmVudCk7CiAgICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgICAgd3JpdGUoc2VwYXJhdG9yKTsKICAgICAgICB3cml0ZShpdGVyYXRvci5jdXJyZW50KTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCB3cml0ZWxuKFtPYmplY3Qgb2JqZWN0ID0gIiJdKSB7CiAgICB3cml0ZShvYmplY3QpOwogICAgd3JpdGUoIlxuIik7CiAgfQoKICB2b2lkIHdyaXRlQ2hhckNvZGUoaW50IGNoYXJDb2RlKSB7CiAgICB3cml0ZShuZXcgU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX0h0dHBPdXRib3VuZE1lc3NhZ2U8VD4gZXh0ZW5kcyBfSU9TaW5rSW1wbCB7CiAgLy8gVXNlZCB0byBtYXJrIHdoZW4gdGhlIGJvZHkgc2hvdWxkIGJlIHdyaXR0ZW4uIFRoaXMgaXMgdXNlZCBmb3IgSEVBRAogIC8vIHJlcXVlc3RzIGFuZCBpbiBlcnJvciBoYW5kbGluZy4KICBib29sIF9lbmNvZGluZ1NldCA9IGZhbHNlOwoKICBib29sIF9idWZmZXJPdXRwdXQgPSB0cnVlOwoKICBmaW5hbCBVcmkgX3VyaTsKICBmaW5hbCBfSHR0cE91dGdvaW5nIF9vdXRnb2luZzsKCiAgZmluYWwgX0h0dHBIZWFkZXJzIGhlYWRlcnM7CgogIF9IdHRwT3V0Ym91bmRNZXNzYWdlKFVyaSB1cmksIFN0cmluZyBwcm90b2NvbFZlcnNpb24sIF9IdHRwT3V0Z29pbmcgb3V0Z29pbmcsCiAgICAgIHtfSHR0cEhlYWRlcnMgaW5pdGlhbEhlYWRlcnN9KQogICAgICA6IF91cmkgPSB1cmksCiAgICAgICAgaGVhZGVycyA9IG5ldyBfSHR0cEhlYWRlcnMocHJvdG9jb2xWZXJzaW9uLAogICAgICAgICAgICBkZWZhdWx0UG9ydEZvclNjaGVtZTogdXJpLnNjaGVtZSA9PSAnaHR0cHMnCiAgICAgICAgICAgICAgICA/IEh0dHBDbGllbnQuZGVmYXVsdEh0dHBzUG9ydAogICAgICAgICAgICAgICAgOiBIdHRwQ2xpZW50LmRlZmF1bHRIdHRwUG9ydCwKICAgICAgICAgICAgaW5pdGlhbEhlYWRlcnM6IGluaXRpYWxIZWFkZXJzKSwKICAgICAgICBfb3V0Z29pbmcgPSBvdXRnb2luZywKICAgICAgICBzdXBlcihvdXRnb2luZywgbnVsbCkgewogICAgX291dGdvaW5nLm91dGJvdW5kID0gdGhpczsKICAgIF9lbmNvZGluZ011dGFibGUgPSBmYWxzZTsKICB9CgogIGludCBnZXQgY29udGVudExlbmd0aCA9PiBoZWFkZXJzLmNvbnRlbnRMZW5ndGg7CiAgdm9pZCBzZXQgY29udGVudExlbmd0aChpbnQgY29udGVudExlbmd0aCkgewogICAgaGVhZGVycy5jb250ZW50TGVuZ3RoID0gY29udGVudExlbmd0aDsKICB9CgogIGJvb2wgZ2V0IHBlcnNpc3RlbnRDb25uZWN0aW9uID0+IGhlYWRlcnMucGVyc2lzdGVudENvbm5lY3Rpb247CiAgdm9pZCBzZXQgcGVyc2lzdGVudENvbm5lY3Rpb24oYm9vbCBwKSB7CiAgICBoZWFkZXJzLnBlcnNpc3RlbnRDb25uZWN0aW9uID0gcDsKICB9CgogIGJvb2wgZ2V0IGJ1ZmZlck91dHB1dCA9PiBfYnVmZmVyT3V0cHV0OwogIHZvaWQgc2V0IGJ1ZmZlck91dHB1dChib29sIGJ1ZmZlck91dHB1dCkgewogICAgaWYgKF9vdXRnb2luZy5oZWFkZXJzV3JpdHRlbikgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIkhlYWRlciBhbHJlYWR5IHNlbnQiKTsKICAgIF9idWZmZXJPdXRwdXQgPSBidWZmZXJPdXRwdXQ7CiAgfQoKICBFbmNvZGluZyBnZXQgZW5jb2RpbmcgewogICAgaWYgKF9lbmNvZGluZ1NldCAmJiBfb3V0Z29pbmcuaGVhZGVyc1dyaXR0ZW4pIHsKICAgICAgcmV0dXJuIF9lbmNvZGluZzsKICAgIH0KICAgIHZhciBjaGFyc2V0OwogICAgaWYgKGhlYWRlcnMuY29udGVudFR5cGUgIT0gbnVsbCAmJiBoZWFkZXJzLmNvbnRlbnRUeXBlLmNoYXJzZXQgIT0gbnVsbCkgewogICAgICBjaGFyc2V0ID0gaGVhZGVycy5jb250ZW50VHlwZS5jaGFyc2V0OwogICAgfSBlbHNlIHsKICAgICAgY2hhcnNldCA9ICJpc28tODg1OS0xIjsKICAgIH0KICAgIHJldHVybiBFbmNvZGluZy5nZXRCeU5hbWUoY2hhcnNldCk7CiAgfQoKICB2b2lkIGFkZChMaXN0PGludD4gZGF0YSkgewogICAgaWYgKGRhdGEubGVuZ3RoID09IDApIHJldHVybjsKICAgIHN1cGVyLmFkZChkYXRhKTsKICB9CgogIHZvaWQgd3JpdGUoT2JqZWN0IG9iaikgewogICAgaWYgKCFfZW5jb2RpbmdTZXQpIHsKICAgICAgX2VuY29kaW5nID0gZW5jb2Rpbmc7CiAgICAgIF9lbmNvZGluZ1NldCA9IHRydWU7CiAgICB9CiAgICBzdXBlci53cml0ZShvYmopOwogIH0KCiAgdm9pZCBfd3JpdGVIZWFkZXIoKTsKCiAgYm9vbCBnZXQgX2lzQ29ubmVjdGlvbkNsb3NlZCA9PiBmYWxzZTsKfQoKY2xhc3MgX0h0dHBSZXNwb25zZSBleHRlbmRzIF9IdHRwT3V0Ym91bmRNZXNzYWdlPEh0dHBSZXNwb25zZT4KICAgIGltcGxlbWVudHMgSHR0cFJlc3BvbnNlIHsKICBpbnQgX3N0YXR1c0NvZGUgPSAyMDA7CiAgU3RyaW5nIF9yZWFzb25QaHJhc2U7CiAgTGlzdDxDb29raWU+IF9jb29raWVzOwogIF9IdHRwUmVxdWVzdCBfaHR0cFJlcXVlc3Q7CiAgRHVyYXRpb24gX2RlYWRsaW5lOwogIFRpbWVyIF9kZWFkbGluZVRpbWVyOwoKICBfSHR0cFJlc3BvbnNlKFVyaSB1cmksIFN0cmluZyBwcm90b2NvbFZlcnNpb24sIF9IdHRwT3V0Z29pbmcgb3V0Z29pbmcsCiAgICAgIEh0dHBIZWFkZXJzIGRlZmF1bHRIZWFkZXJzLCBTdHJpbmcgc2VydmVySGVhZGVyKQogICAgICA6IHN1cGVyKHVyaSwgcHJvdG9jb2xWZXJzaW9uLCBvdXRnb2luZywgaW5pdGlhbEhlYWRlcnM6IGRlZmF1bHRIZWFkZXJzKSB7CiAgICBpZiAoc2VydmVySGVhZGVyICE9IG51bGwpIHsKICAgICAgaGVhZGVycy5zZXQoSHR0cEhlYWRlcnMuc2VydmVySGVhZGVyLCBzZXJ2ZXJIZWFkZXIpOwogICAgfQogIH0KCiAgYm9vbCBnZXQgX2lzQ29ubmVjdGlvbkNsb3NlZCA9PiBfaHR0cFJlcXVlc3QuX2h0dHBDb25uZWN0aW9uLl9pc0Nsb3Npbmc7CgogIExpc3Q8Q29va2llPiBnZXQgY29va2llcyB7CiAgICBpZiAoX2Nvb2tpZXMgPT0gbnVsbCkgX2Nvb2tpZXMgPSBuZXcgTGlzdDxDb29raWU+KCk7CiAgICByZXR1cm4gX2Nvb2tpZXM7CiAgfQoKICBpbnQgZ2V0IHN0YXR1c0NvZGUgPT4gX3N0YXR1c0NvZGU7CiAgdm9pZCBzZXQgc3RhdHVzQ29kZShpbnQgc3RhdHVzQ29kZSkgewogICAgaWYgKF9vdXRnb2luZy5oZWFkZXJzV3JpdHRlbikgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIkhlYWRlciBhbHJlYWR5IHNlbnQiKTsKICAgIF9zdGF0dXNDb2RlID0gc3RhdHVzQ29kZTsKICB9CgogIFN0cmluZyBnZXQgcmVhc29uUGhyYXNlID0+IF9maW5kUmVhc29uUGhyYXNlKHN0YXR1c0NvZGUpOwogIHZvaWQgc2V0IHJlYXNvblBocmFzZShTdHJpbmcgcmVhc29uUGhyYXNlKSB7CiAgICBpZiAoX291dGdvaW5nLmhlYWRlcnNXcml0dGVuKSB0aHJvdyBuZXcgU3RhdGVFcnJvcigiSGVhZGVyIGFscmVhZHkgc2VudCIpOwogICAgX3JlYXNvblBocmFzZSA9IHJlYXNvblBocmFzZTsKICB9CgogIEZ1dHVyZSByZWRpcmVjdChVcmkgbG9jYXRpb24sIHtpbnQgc3RhdHVzOiBIdHRwU3RhdHVzLm1vdmVkVGVtcG9yYXJpbHl9KSB7CiAgICBpZiAoX291dGdvaW5nLmhlYWRlcnNXcml0dGVuKSB0aHJvdyBuZXcgU3RhdGVFcnJvcigiSGVhZGVyIGFscmVhZHkgc2VudCIpOwogICAgc3RhdHVzQ29kZSA9IHN0YXR1czsKICAgIGhlYWRlcnMuc2V0KEh0dHBIZWFkZXJzLmxvY2F0aW9uSGVhZGVyLCBsb2NhdGlvbi50b1N0cmluZygpKTsKICAgIHJldHVybiBjbG9zZSgpOwogIH0KCiAgRnV0dXJlPFNvY2tldD4gZGV0YWNoU29ja2V0KHtib29sIHdyaXRlSGVhZGVyczogdHJ1ZX0pIHsKICAgIGlmIChfb3V0Z29pbmcuaGVhZGVyc1dyaXR0ZW4pIHRocm93IG5ldyBTdGF0ZUVycm9yKCJIZWFkZXJzIGFscmVhZHkgc2VudCIpOwogICAgZGVhZGxpbmUgPSBudWxsOyAvLyBCZSBzdXJlIHRvIHN0b3AgYW55IGRlYWRsaW5lLgogICAgdmFyIGZ1dHVyZSA9IF9odHRwUmVxdWVzdC5faHR0cENvbm5lY3Rpb24uZGV0YWNoU29ja2V0KCk7CiAgICBpZiAod3JpdGVIZWFkZXJzKSB7CiAgICAgIHZhciBoZWFkZXJzRnV0dXJlID0KICAgICAgICAgIF9vdXRnb2luZy53cml0ZUhlYWRlcnMoZHJhaW5SZXF1ZXN0OiBmYWxzZSwgc2V0T3V0Z29pbmc6IGZhbHNlKTsKICAgICAgYXNzZXJ0KGhlYWRlcnNGdXR1cmUgPT0gbnVsbCk7CiAgICB9IGVsc2UgewogICAgICAvLyBJbWl0YXRlIGhhdmluZyB3cml0dGVuIHRoZSBoZWFkZXJzLgogICAgICBfb3V0Z29pbmcuaGVhZGVyc1dyaXR0ZW4gPSB0cnVlOwogICAgfQogICAgLy8gQ2xvc2UgY29ubmVjdGlvbiBzbyB0aGUgc29ja2V0IGlzICdmcmVlJy4KICAgIGNsb3NlKCk7CiAgICBkb25lLmNhdGNoRXJyb3IoKF8pIHsKICAgICAgLy8gQ2F0Y2ggYW55IGVycm9yIG9uIGRvbmUsIGFzIHRoZXkgYXV0b21hdGljYWxseSB3aWxsIGJlCiAgICAgIC8vIHByb3BhZ2F0ZWQgdG8gdGhlIHdlYnNvY2tldC4KICAgIH0pOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIEh0dHBDb25uZWN0aW9uSW5mbyBnZXQgY29ubmVjdGlvbkluZm8gPT4gX2h0dHBSZXF1ZXN0LmNvbm5lY3Rpb25JbmZvOwoKICBEdXJhdGlvbiBnZXQgZGVhZGxpbmUgPT4gX2RlYWRsaW5lOwoKICB2b2lkIHNldCBkZWFkbGluZShEdXJhdGlvbiBkKSB7CiAgICBpZiAoX2RlYWRsaW5lVGltZXIgIT0gbnVsbCkgX2RlYWRsaW5lVGltZXIuY2FuY2VsKCk7CiAgICBfZGVhZGxpbmUgPSBkOwoKICAgIGlmIChfZGVhZGxpbmUgPT0gbnVsbCkgcmV0dXJuOwogICAgX2RlYWRsaW5lVGltZXIgPSBuZXcgVGltZXIoX2RlYWRsaW5lLCAoKSB7CiAgICAgIF9odHRwUmVxdWVzdC5faHR0cENvbm5lY3Rpb24uZGVzdHJveSgpOwogICAgfSk7CiAgfQoKICB2b2lkIF93cml0ZUhlYWRlcigpIHsKICAgIEJ5dGVzQnVpbGRlciBidWZmZXIgPSBuZXcgX0NvcHlpbmdCeXRlc0J1aWxkZXIoX09VVEdPSU5HX0JVRkZFUl9TSVpFKTsKCiAgICAvLyBXcml0ZSBzdGF0dXMgbGluZS4KICAgIGlmIChoZWFkZXJzLnByb3RvY29sVmVyc2lvbiA9PSAiMS4xIikgewogICAgICBidWZmZXIuYWRkKF9Db25zdC5IVFRQMTEpOwogICAgfSBlbHNlIHsKICAgICAgYnVmZmVyLmFkZChfQ29uc3QuSFRUUDEwKTsKICAgIH0KICAgIGJ1ZmZlci5hZGRCeXRlKF9DaGFyQ29kZS5TUCk7CiAgICBidWZmZXIuYWRkKHN0YXR1c0NvZGUudG9TdHJpbmcoKS5jb2RlVW5pdHMpOwogICAgYnVmZmVyLmFkZEJ5dGUoX0NoYXJDb2RlLlNQKTsKICAgIGJ1ZmZlci5hZGQocmVhc29uUGhyYXNlLmNvZGVVbml0cyk7CiAgICBidWZmZXIuYWRkQnl0ZShfQ2hhckNvZGUuQ1IpOwogICAgYnVmZmVyLmFkZEJ5dGUoX0NoYXJDb2RlLkxGKTsKCiAgICB2YXIgc2Vzc2lvbiA9IF9odHRwUmVxdWVzdC5fc2Vzc2lvbjsKICAgIGlmIChzZXNzaW9uICE9IG51bGwgJiYgIXNlc3Npb24uX2Rlc3Ryb3llZCkgewogICAgICAvLyBNYXJrIGFzIG5vdCBuZXcuCiAgICAgIHNlc3Npb24uX2lzTmV3ID0gZmFsc2U7CiAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBvbmx5IHNlbmQgdGhlIGN1cnJlbnQgc2Vzc2lvbiBpZC4KICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoY29va2llc1tpXS5uYW1lLnRvVXBwZXJDYXNlKCkgPT0gX0RBUlRfU0VTU0lPTl9JRCkgewogICAgICAgICAgY29va2llc1tpXQogICAgICAgICAgICAuLnZhbHVlID0gc2Vzc2lvbi5pZAogICAgICAgICAgICAuLmh0dHBPbmx5ID0gdHJ1ZQogICAgICAgICAgICAuLnBhdGggPSAiLyI7CiAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghZm91bmQpIHsKICAgICAgICB2YXIgY29va2llID0gbmV3IENvb2tpZShfREFSVF9TRVNTSU9OX0lELCBzZXNzaW9uLmlkKTsKICAgICAgICBjb29raWVzLmFkZChjb29raWUKICAgICAgICAgIC4uaHR0cE9ubHkgPSB0cnVlCiAgICAgICAgICAuLnBhdGggPSAiLyIpOwogICAgICB9CiAgICB9CiAgICAvLyBBZGQgYWxsIHRoZSBjb29raWVzIHNldCB0byB0aGUgaGVhZGVycy4KICAgIGlmIChfY29va2llcyAhPSBudWxsKSB7CiAgICAgIF9jb29raWVzLmZvckVhY2goKGNvb2tpZSkgewogICAgICAgIGhlYWRlcnMuYWRkKEh0dHBIZWFkZXJzLnNldENvb2tpZUhlYWRlciwgY29va2llKTsKICAgICAgfSk7CiAgICB9CgogICAgaGVhZGVycy5fZmluYWxpemUoKTsKCiAgICAvLyBXcml0ZSBoZWFkZXJzLgogICAgaGVhZGVycy5fYnVpbGQoYnVmZmVyKTsKICAgIGJ1ZmZlci5hZGRCeXRlKF9DaGFyQ29kZS5DUik7CiAgICBidWZmZXIuYWRkQnl0ZShfQ2hhckNvZGUuTEYpOwogICAgVWludDhMaXN0IGhlYWRlckJ5dGVzID0gYnVmZmVyLnRha2VCeXRlcygpOwogICAgX291dGdvaW5nLnNldEhlYWRlcihoZWFkZXJCeXRlcywgaGVhZGVyQnl0ZXMubGVuZ3RoKTsKICB9CgogIFN0cmluZyBfZmluZFJlYXNvblBocmFzZShpbnQgc3RhdHVzQ29kZSkgewogICAgaWYgKF9yZWFzb25QaHJhc2UgIT0gbnVsbCkgewogICAgICByZXR1cm4gX3JlYXNvblBocmFzZTsKICAgIH0KCiAgICBzd2l0Y2ggKHN0YXR1c0NvZGUpIHsKICAgICAgY2FzZSBIdHRwU3RhdHVzLmNvbnRpbnVlXzoKICAgICAgICByZXR1cm4gIkNvbnRpbnVlIjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLnN3aXRjaGluZ1Byb3RvY29sczoKICAgICAgICByZXR1cm4gIlN3aXRjaGluZyBQcm90b2NvbHMiOwogICAgICBjYXNlIEh0dHBTdGF0dXMub2s6CiAgICAgICAgcmV0dXJuICJPSyI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5jcmVhdGVkOgogICAgICAgIHJldHVybiAiQ3JlYXRlZCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5hY2NlcHRlZDoKICAgICAgICByZXR1cm4gIkFjY2VwdGVkIjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLm5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoKICAgICAgICByZXR1cm4gIk5vbi1BdXRob3JpdGF0aXZlIEluZm9ybWF0aW9uIjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLm5vQ29udGVudDoKICAgICAgICByZXR1cm4gIk5vIENvbnRlbnQiOwogICAgICBjYXNlIEh0dHBTdGF0dXMucmVzZXRDb250ZW50OgogICAgICAgIHJldHVybiAiUmVzZXQgQ29udGVudCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5wYXJ0aWFsQ29udGVudDoKICAgICAgICByZXR1cm4gIlBhcnRpYWwgQ29udGVudCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5tdWx0aXBsZUNob2ljZXM6CiAgICAgICAgcmV0dXJuICJNdWx0aXBsZSBDaG9pY2VzIjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLm1vdmVkUGVybWFuZW50bHk6CiAgICAgICAgcmV0dXJuICJNb3ZlZCBQZXJtYW5lbnRseSI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5mb3VuZDoKICAgICAgICByZXR1cm4gIkZvdW5kIjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLnNlZU90aGVyOgogICAgICAgIHJldHVybiAiU2VlIE90aGVyIjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLm5vdE1vZGlmaWVkOgogICAgICAgIHJldHVybiAiTm90IE1vZGlmaWVkIjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLnVzZVByb3h5OgogICAgICAgIHJldHVybiAiVXNlIFByb3h5IjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLnRlbXBvcmFyeVJlZGlyZWN0OgogICAgICAgIHJldHVybiAiVGVtcG9yYXJ5IFJlZGlyZWN0IjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLmJhZFJlcXVlc3Q6CiAgICAgICAgcmV0dXJuICJCYWQgUmVxdWVzdCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy51bmF1dGhvcml6ZWQ6CiAgICAgICAgcmV0dXJuICJVbmF1dGhvcml6ZWQiOwogICAgICBjYXNlIEh0dHBTdGF0dXMucGF5bWVudFJlcXVpcmVkOgogICAgICAgIHJldHVybiAiUGF5bWVudCBSZXF1aXJlZCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5mb3JiaWRkZW46CiAgICAgICAgcmV0dXJuICJGb3JiaWRkZW4iOwogICAgICBjYXNlIEh0dHBTdGF0dXMubm90Rm91bmQ6CiAgICAgICAgcmV0dXJuICJOb3QgRm91bmQiOwogICAgICBjYXNlIEh0dHBTdGF0dXMubWV0aG9kTm90QWxsb3dlZDoKICAgICAgICByZXR1cm4gIk1ldGhvZCBOb3QgQWxsb3dlZCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5ub3RBY2NlcHRhYmxlOgogICAgICAgIHJldHVybiAiTm90IEFjY2VwdGFibGUiOwogICAgICBjYXNlIEh0dHBTdGF0dXMucHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOgogICAgICAgIHJldHVybiAiUHJveHkgQXV0aGVudGljYXRpb24gUmVxdWlyZWQiOwogICAgICBjYXNlIEh0dHBTdGF0dXMucmVxdWVzdFRpbWVvdXQ6CiAgICAgICAgcmV0dXJuICJSZXF1ZXN0IFRpbWUtb3V0IjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLmNvbmZsaWN0OgogICAgICAgIHJldHVybiAiQ29uZmxpY3QiOwogICAgICBjYXNlIEh0dHBTdGF0dXMuZ29uZToKICAgICAgICByZXR1cm4gIkdvbmUiOwogICAgICBjYXNlIEh0dHBTdGF0dXMubGVuZ3RoUmVxdWlyZWQ6CiAgICAgICAgcmV0dXJuICJMZW5ndGggUmVxdWlyZWQiOwogICAgICBjYXNlIEh0dHBTdGF0dXMucHJlY29uZGl0aW9uRmFpbGVkOgogICAgICAgIHJldHVybiAiUHJlY29uZGl0aW9uIEZhaWxlZCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5yZXF1ZXN0RW50aXR5VG9vTGFyZ2U6CiAgICAgICAgcmV0dXJuICJSZXF1ZXN0IEVudGl0eSBUb28gTGFyZ2UiOwogICAgICBjYXNlIEh0dHBTdGF0dXMucmVxdWVzdFVyaVRvb0xvbmc6CiAgICAgICAgcmV0dXJuICJSZXF1ZXN0LVVSSSBUb28gTG9uZyI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy51bnN1cHBvcnRlZE1lZGlhVHlwZToKICAgICAgICByZXR1cm4gIlVuc3VwcG9ydGVkIE1lZGlhIFR5cGUiOwogICAgICBjYXNlIEh0dHBTdGF0dXMucmVxdWVzdGVkUmFuZ2VOb3RTYXRpc2ZpYWJsZToKICAgICAgICByZXR1cm4gIlJlcXVlc3RlZCByYW5nZSBub3Qgc2F0aXNmaWFibGUiOwogICAgICBjYXNlIEh0dHBTdGF0dXMuZXhwZWN0YXRpb25GYWlsZWQ6CiAgICAgICAgcmV0dXJuICJFeHBlY3RhdGlvbiBGYWlsZWQiOwogICAgICBjYXNlIEh0dHBTdGF0dXMuaW50ZXJuYWxTZXJ2ZXJFcnJvcjoKICAgICAgICByZXR1cm4gIkludGVybmFsIFNlcnZlciBFcnJvciI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5ub3RJbXBsZW1lbnRlZDoKICAgICAgICByZXR1cm4gIk5vdCBJbXBsZW1lbnRlZCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5iYWRHYXRld2F5OgogICAgICAgIHJldHVybiAiQmFkIEdhdGV3YXkiOwogICAgICBjYXNlIEh0dHBTdGF0dXMuc2VydmljZVVuYXZhaWxhYmxlOgogICAgICAgIHJldHVybiAiU2VydmljZSBVbmF2YWlsYWJsZSI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5nYXRld2F5VGltZW91dDoKICAgICAgICByZXR1cm4gIkdhdGV3YXkgVGltZS1vdXQiOwogICAgICBjYXNlIEh0dHBTdGF0dXMuaHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6CiAgICAgICAgcmV0dXJuICJIdHRwIFZlcnNpb24gbm90IHN1cHBvcnRlZCI7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuICJTdGF0dXMgJHN0YXR1c0NvZGUiOwogICAgfQogIH0KfQoKY2xhc3MgX0h0dHBDbGllbnRSZXF1ZXN0IGV4dGVuZHMgX0h0dHBPdXRib3VuZE1lc3NhZ2U8SHR0cENsaWVudFJlc3BvbnNlPgogICAgaW1wbGVtZW50cyBIdHRwQ2xpZW50UmVxdWVzdCB7CiAgZmluYWwgU3RyaW5nIG1ldGhvZDsKICBmaW5hbCBVcmkgdXJpOwogIGZpbmFsIExpc3Q8Q29va2llPiBjb29raWVzID0gbmV3IExpc3Q8Q29va2llPigpOwoKICAvLyBUaGUgSHR0cENsaWVudCB0aGlzIHJlcXVlc3QgYmVsb25ncyB0by4KICBmaW5hbCBfSHR0cENsaWVudCBfaHR0cENsaWVudDsKICBmaW5hbCBfSHR0cENsaWVudENvbm5lY3Rpb24gX2h0dHBDbGllbnRDb25uZWN0aW9uOwogIGZpbmFsIFRpbWVsaW5lVGFzayBfdGltZWxpbmU7CgogIGZpbmFsIENvbXBsZXRlcjxIdHRwQ2xpZW50UmVzcG9uc2U+IF9yZXNwb25zZUNvbXBsZXRlciA9CiAgICAgIG5ldyBDb21wbGV0ZXI8SHR0cENsaWVudFJlc3BvbnNlPigpOwoKICBmaW5hbCBfUHJveHkgX3Byb3h5OwoKICBGdXR1cmU8SHR0cENsaWVudFJlc3BvbnNlPiBfcmVzcG9uc2U7CgogIC8vIFRPRE8oYWpvaG5zZW4pOiBHZXQgZGVmYXVsdCB2YWx1ZSBmcm9tIGNsaWVudD8KICBib29sIF9mb2xsb3dSZWRpcmVjdHMgPSB0cnVlOwoKICBpbnQgX21heFJlZGlyZWN0cyA9IDU7CgogIExpc3Q8UmVkaXJlY3RJbmZvPiBfcmVzcG9uc2VSZWRpcmVjdHMgPSBbXTsKCiAgX0h0dHBDbGllbnRSZXF1ZXN0KF9IdHRwT3V0Z29pbmcgb3V0Z29pbmcsIFVyaSB1cmksIHRoaXMubWV0aG9kLCB0aGlzLl9wcm94eSwKICAgICAgdGhpcy5faHR0cENsaWVudCwgdGhpcy5faHR0cENsaWVudENvbm5lY3Rpb24sIHRoaXMuX3RpbWVsaW5lKQogICAgICA6IHVyaSA9IHVyaSwKICAgICAgICBzdXBlcih1cmksICIxLjEiLCBvdXRnb2luZykgewogICAgX3RpbWVsaW5lPy5pbnN0YW50KCdSZXF1ZXN0IGluaXRpYXRlZCcpOwogICAgLy8gR0VUIGFuZCBIRUFEIGhhdmUgJ2NvbnRlbnQtbGVuZ3RoOiAwJyBieSBkZWZhdWx0LgogICAgaWYgKG1ldGhvZCA9PSAiR0VUIiB8fCBtZXRob2QgPT0gIkhFQUQiKSB7CiAgICAgIGNvbnRlbnRMZW5ndGggPSAwOwogICAgfSBlbHNlIHsKICAgICAgaGVhZGVycy5jaHVua2VkVHJhbnNmZXJFbmNvZGluZyA9IHRydWU7CiAgICB9CgogICAgX3Jlc3BvbnNlQ29tcGxldGVyLmZ1dHVyZS50aGVuKChyZXNwb25zZSkgewogICAgICBfdGltZWxpbmU/Lmluc3RhbnQoJ1Jlc3BvbnNlIHJlY2VpZXZlZCcpOwogICAgICBNYXAgZm9ybWF0Q29ubmVjdGlvbkluZm8oKSA9PiB7CiAgICAgICAgICAgICdsb2NhbFBvcnQnOiByZXNwb25zZS5jb25uZWN0aW9uSW5mbz8ubG9jYWxQb3J0LAogICAgICAgICAgICAncmVtb3RlQWRkcmVzcyc6IHJlc3BvbnNlLmNvbm5lY3Rpb25JbmZvPy5yZW1vdGVBZGRyZXNzPy5hZGRyZXNzLAogICAgICAgICAgICAncmVtb3RlUG9ydCc6IHJlc3BvbnNlLmNvbm5lY3Rpb25JbmZvPy5yZW1vdGVQb3J0LAogICAgICAgICAgfTsKCiAgICAgIE1hcCBmb3JtYXRIZWFkZXJzKCkgewogICAgICAgIGZpbmFsIGhlYWRlcnMgPSA8U3RyaW5nLCBMaXN0PFN0cmluZz4+e307CiAgICAgICAgcmVzcG9uc2UuaGVhZGVycy5mb3JFYWNoKChuYW1lLCB2YWx1ZXMpIHsKICAgICAgICAgIGhlYWRlcnNbbmFtZV0gPSB2YWx1ZXM7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGhlYWRlcnM7CiAgICAgIH0KCiAgICAgIExpc3Q8TWFwPFN0cmluZywgZHluYW1pYz4+IGZvcm1hdFJlZGlyZWN0SW5mbygpIHsKICAgICAgICBmaW5hbCByZWRpcmVjdHMgPSA8TWFwPFN0cmluZywgZHluYW1pYz4+W107CiAgICAgICAgZm9yIChmaW5hbCByZWRpcmVjdCBpbiByZXNwb25zZS5yZWRpcmVjdHMpIHsKICAgICAgICAgIHJlZGlyZWN0cy5hZGQoewogICAgICAgICAgICAnbG9jYXRpb24nOiByZWRpcmVjdC5sb2NhdGlvbi50b1N0cmluZygpLAogICAgICAgICAgICAnbWV0aG9kJzogcmVkaXJlY3QubWV0aG9kLAogICAgICAgICAgICAnc3RhdHVzQ29kZSc6IHJlZGlyZWN0LnN0YXR1c0NvZGUsCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlZGlyZWN0czsKICAgICAgfQoKICAgICAgX3RpbWVsaW5lPy5maW5pc2goYXJndW1lbnRzOiB7CiAgICAgICAgLy8gVE9ETyhia29ueWkpOiBjb25zaWRlciBleHBvc2luZyBjZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbj8KICAgICAgICAvLyAnY2VydGlmaWNhdGUnOiByZXNwb25zZS5jZXJ0aWZpY2F0ZSwKICAgICAgICAncmVxdWVzdEhlYWRlcnMnOiBvdXRnb2luZy5vdXRib3VuZC5oZWFkZXJzLl9oZWFkZXJzLAogICAgICAgICdjb21wcmVzc2lvblN0YXRlJzogcmVzcG9uc2UuY29tcHJlc3Npb25TdGF0ZS50b1N0cmluZygpLAogICAgICAgICdjb25uZWN0aW9uSW5mbyc6IGZvcm1hdENvbm5lY3Rpb25JbmZvKCksCiAgICAgICAgJ2NvbnRlbnRMZW5ndGgnOiByZXNwb25zZS5jb250ZW50TGVuZ3RoLAogICAgICAgICdjb29raWVzJzogW2ZvciAoZmluYWwgY29va2llIGluIHJlc3BvbnNlLmNvb2tpZXMpIGNvb2tpZS50b1N0cmluZygpXSwKICAgICAgICAncmVzcG9uc2VIZWFkZXJzJzogZm9ybWF0SGVhZGVycygpLAogICAgICAgICdpc1JlZGlyZWN0JzogcmVzcG9uc2UuaXNSZWRpcmVjdCwKICAgICAgICAncGVyc2lzdGVudENvbm5lY3Rpb24nOiByZXNwb25zZS5wZXJzaXN0ZW50Q29ubmVjdGlvbiwKICAgICAgICAncmVhc29uUGhyYXNlJzogcmVzcG9uc2UucmVhc29uUGhyYXNlLAogICAgICAgICdyZWRpcmVjdHMnOiBmb3JtYXRSZWRpcmVjdEluZm8oKSwKICAgICAgICAnc3RhdHVzQ29kZSc6IHJlc3BvbnNlLnN0YXR1c0NvZGUsCiAgICAgIH0pOwogICAgfSwgb25FcnJvcjogKGUpIHt9KTsKICB9CgogIEZ1dHVyZTxIdHRwQ2xpZW50UmVzcG9uc2U+IGdldCBkb25lIHsKICAgIGlmIChfcmVzcG9uc2UgPT0gbnVsbCkgewogICAgICBfcmVzcG9uc2UgPQogICAgICAgICAgRnV0dXJlLndhaXQoW19yZXNwb25zZUNvbXBsZXRlci5mdXR1cmUsIHN1cGVyLmRvbmVdLCBlYWdlckVycm9yOiB0cnVlKQogICAgICAgICAgICAgIC50aGVuKChsaXN0KSA9PiBsaXN0WzBdKTsKICAgIH0KICAgIHJldHVybiBfcmVzcG9uc2U7CiAgfQoKICBGdXR1cmU8SHR0cENsaWVudFJlc3BvbnNlPiBjbG9zZSgpIHsKICAgIHN1cGVyLmNsb3NlKCk7CiAgICByZXR1cm4gZG9uZTsKICB9CgogIGludCBnZXQgbWF4UmVkaXJlY3RzID0+IF9tYXhSZWRpcmVjdHM7CiAgdm9pZCBzZXQgbWF4UmVkaXJlY3RzKGludCBtYXhSZWRpcmVjdHMpIHsKICAgIGlmIChfb3V0Z29pbmcuaGVhZGVyc1dyaXR0ZW4pIHRocm93IG5ldyBTdGF0ZUVycm9yKCJSZXF1ZXN0IGFscmVhZHkgc2VudCIpOwogICAgX21heFJlZGlyZWN0cyA9IG1heFJlZGlyZWN0czsKICB9CgogIGJvb2wgZ2V0IGZvbGxvd1JlZGlyZWN0cyA9PiBfZm9sbG93UmVkaXJlY3RzOwogIHZvaWQgc2V0IGZvbGxvd1JlZGlyZWN0cyhib29sIGZvbGxvd1JlZGlyZWN0cykgewogICAgaWYgKF9vdXRnb2luZy5oZWFkZXJzV3JpdHRlbikgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlJlcXVlc3QgYWxyZWFkeSBzZW50Iik7CiAgICBfZm9sbG93UmVkaXJlY3RzID0gZm9sbG93UmVkaXJlY3RzOwogIH0KCiAgSHR0cENvbm5lY3Rpb25JbmZvIGdldCBjb25uZWN0aW9uSW5mbyA9PiBfaHR0cENsaWVudENvbm5lY3Rpb24uY29ubmVjdGlvbkluZm87CgogIHZvaWQgX29uSW5jb21pbmcoX0h0dHBJbmNvbWluZyBpbmNvbWluZykgewogICAgdmFyIHJlc3BvbnNlID0gbmV3IF9IdHRwQ2xpZW50UmVzcG9uc2UoaW5jb21pbmcsIHRoaXMsIF9odHRwQ2xpZW50KTsKICAgIEZ1dHVyZTxIdHRwQ2xpZW50UmVzcG9uc2U+IGZ1dHVyZTsKICAgIGlmIChmb2xsb3dSZWRpcmVjdHMgJiYgcmVzcG9uc2UuaXNSZWRpcmVjdCkgewogICAgICBpZiAocmVzcG9uc2UucmVkaXJlY3RzLmxlbmd0aCA8IG1heFJlZGlyZWN0cykgewogICAgICAgIC8vIFJlZGlyZWN0IGFuZCBkcmFpbiByZXNwb25zZS4KICAgICAgICBmdXR1cmUgPSByZXNwb25zZQogICAgICAgICAgICAuZHJhaW4oKQogICAgICAgICAgICAudGhlbjxIdHRwQ2xpZW50UmVzcG9uc2U+KChfKSA9PiByZXNwb25zZS5yZWRpcmVjdCgpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBFbmQgd2l0aCBleGNlcHRpb24sIHRvbyBtYW55IHJlZGlyZWN0cy4KICAgICAgICBmdXR1cmUgPSByZXNwb25zZS5kcmFpbigpLnRoZW48SHR0cENsaWVudFJlc3BvbnNlPigoXykgewogICAgICAgICAgcmV0dXJuIG5ldyBGdXR1cmU8SHR0cENsaWVudFJlc3BvbnNlPi5lcnJvcihuZXcgUmVkaXJlY3RFeGNlcHRpb24oCiAgICAgICAgICAgICAgIlJlZGlyZWN0IGxpbWl0IGV4Y2VlZGVkIiwgcmVzcG9uc2UucmVkaXJlY3RzKSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuX3Nob3VsZEF1dGhlbnRpY2F0ZVByb3h5KSB7CiAgICAgIGZ1dHVyZSA9IHJlc3BvbnNlLl9hdXRoZW50aWNhdGUodHJ1ZSk7CiAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLl9zaG91bGRBdXRoZW50aWNhdGUpIHsKICAgICAgZnV0dXJlID0gcmVzcG9uc2UuX2F1dGhlbnRpY2F0ZShmYWxzZSk7CiAgICB9IGVsc2UgewogICAgICBmdXR1cmUgPSBuZXcgRnV0dXJlPEh0dHBDbGllbnRSZXNwb25zZT4udmFsdWUocmVzcG9uc2UpOwogICAgfQogICAgZnV0dXJlLnRoZW4oKHYpID0+IF9yZXNwb25zZUNvbXBsZXRlci5jb21wbGV0ZSh2KSwKICAgICAgICBvbkVycm9yOiBfcmVzcG9uc2VDb21wbGV0ZXIuY29tcGxldGVFcnJvcik7CiAgfQoKICB2b2lkIF9vbkVycm9yKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIF9yZXNwb25zZUNvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIC8vIEdlbmVyYXRlIHRoZSByZXF1ZXN0IFVSSSBiYXNlZCBvbiB0aGUgbWV0aG9kIGFuZCBwcm94eS4KICBTdHJpbmcgX3JlcXVlc3RVcmkoKSB7CiAgICAvLyBHZW5lcmF0ZSB0aGUgcmVxdWVzdCBVUkkgc3RhcnRpbmcgZnJvbSB0aGUgcGF0aCBjb21wb25lbnQuCiAgICBTdHJpbmcgdXJpU3RhcnRpbmdGcm9tUGF0aCgpIHsKICAgICAgU3RyaW5nIHJlc3VsdCA9IHVyaS5wYXRoOwogICAgICBpZiAocmVzdWx0LmlzRW1wdHkpIHJlc3VsdCA9ICIvIjsKICAgICAgaWYgKHVyaS5oYXNRdWVyeSkgewogICAgICAgIHJlc3VsdCA9ICIke3Jlc3VsdH0/JHt1cmkucXVlcnl9IjsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIGlmIChfcHJveHkuaXNEaXJlY3QpIHsKICAgICAgcmV0dXJuIHVyaVN0YXJ0aW5nRnJvbVBhdGgoKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChtZXRob2QgPT0gIkNPTk5FQ1QiKSB7CiAgICAgICAgLy8gRm9yIHRoZSBjb25uZWN0IG1ldGhvZCB0aGUgcmVxdWVzdCBVUkkgaXMgdGhlIGhvc3Q6cG9ydCBvZgogICAgICAgIC8vIHRoZSByZXF1ZXN0ZWQgZGVzdGluYXRpb24gb2YgdGhlIHR1bm5lbCAoc2VlIFJGQyAyODE3CiAgICAgICAgLy8gc2VjdGlvbiA1LjIpCiAgICAgICAgcmV0dXJuICIke3VyaS5ob3N0fToke3VyaS5wb3J0fSI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKF9odHRwQ2xpZW50Q29ubmVjdGlvbi5fcHJveHlUdW5uZWwpIHsKICAgICAgICAgIHJldHVybiB1cmlTdGFydGluZ0Zyb21QYXRoKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiB1cmkucmVtb3ZlRnJhZ21lbnQoKS50b1N0cmluZygpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBfd3JpdGVIZWFkZXIoKSB7CiAgICBCeXRlc0J1aWxkZXIgYnVmZmVyID0gbmV3IF9Db3B5aW5nQnl0ZXNCdWlsZGVyKF9PVVRHT0lOR19CVUZGRVJfU0laRSk7CgogICAgLy8gV3JpdGUgdGhlIHJlcXVlc3QgbWV0aG9kLgogICAgYnVmZmVyLmFkZChtZXRob2QuY29kZVVuaXRzKTsKICAgIGJ1ZmZlci5hZGRCeXRlKF9DaGFyQ29kZS5TUCk7CiAgICAvLyBXcml0ZSB0aGUgcmVxdWVzdCBVUkkuCiAgICBidWZmZXIuYWRkKF9yZXF1ZXN0VXJpKCkuY29kZVVuaXRzKTsKICAgIGJ1ZmZlci5hZGRCeXRlKF9DaGFyQ29kZS5TUCk7CiAgICAvLyBXcml0ZSBIVFRQLzEuMS4KICAgIGJ1ZmZlci5hZGQoX0NvbnN0LkhUVFAxMSk7CiAgICBidWZmZXIuYWRkQnl0ZShfQ2hhckNvZGUuQ1IpOwogICAgYnVmZmVyLmFkZEJ5dGUoX0NoYXJDb2RlLkxGKTsKCiAgICAvLyBBZGQgdGhlIGNvb2tpZXMgdG8gdGhlIGhlYWRlcnMuCiAgICBpZiAoIWNvb2tpZXMuaXNFbXB0eSkgewogICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChpID4gMCkgc2Iud3JpdGUoIjsgIik7CiAgICAgICAgc2IuLndyaXRlKGNvb2tpZXNbaV0ubmFtZSkuLndyaXRlKCI9IikuLndyaXRlKGNvb2tpZXNbaV0udmFsdWUpOwogICAgICB9CiAgICAgIGhlYWRlcnMuYWRkKEh0dHBIZWFkZXJzLmNvb2tpZUhlYWRlciwgc2IudG9TdHJpbmcoKSk7CiAgICB9CgogICAgaGVhZGVycy5fZmluYWxpemUoKTsKCiAgICAvLyBXcml0ZSBoZWFkZXJzLgogICAgaGVhZGVycy5fYnVpbGQoYnVmZmVyKTsKICAgIGJ1ZmZlci5hZGRCeXRlKF9DaGFyQ29kZS5DUik7CiAgICBidWZmZXIuYWRkQnl0ZShfQ2hhckNvZGUuTEYpOwogICAgVWludDhMaXN0IGhlYWRlckJ5dGVzID0gYnVmZmVyLnRha2VCeXRlcygpOwogICAgX291dGdvaW5nLnNldEhlYWRlcihoZWFkZXJCeXRlcywgaGVhZGVyQnl0ZXMubGVuZ3RoKTsKICB9Cn0KCi8vIFVzZWQgYnkgX0h0dHBPdXRnb2luZyBhcyBhIHRhcmdldCBvZiBhIGNodW5rZWQgY29udmVydGVyIGZvciBnemlwCi8vIGNvbXByZXNzaW9uLgpjbGFzcyBfSHR0cEdaaXBTaW5rIGV4dGVuZHMgQnl0ZUNvbnZlcnNpb25TaW5rIHsKICBmaW5hbCBfQnl0ZXNDb25zdW1lciBfY29uc3VtZTsKICBfSHR0cEdaaXBTaW5rKHRoaXMuX2NvbnN1bWUpOwoKICB2b2lkIGFkZChMaXN0PGludD4gY2h1bmspIHsKICAgIF9jb25zdW1lKGNodW5rKTsKICB9CgogIHZvaWQgYWRkU2xpY2UoTGlzdDxpbnQ+IGNodW5rLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBpZiAoY2h1bmsgaXMgVWludDhMaXN0KSB7CiAgICAgIF9jb25zdW1lKG5ldyBVaW50OExpc3QudmlldygKICAgICAgICAgIGNodW5rLmJ1ZmZlciwgY2h1bmsub2Zmc2V0SW5CeXRlcyArIHN0YXJ0LCBlbmQgLSBzdGFydCkpOwogICAgfSBlbHNlIHsKICAgICAgX2NvbnN1bWUoY2h1bmsuc3VibGlzdChzdGFydCwgZW5kIC0gc3RhcnQpKTsKICAgIH0KICB9CgogIHZvaWQgY2xvc2UoKSB7fQp9CgovLyBUaGUgX0h0dHBPdXRnb2luZyBoYW5kbGVzIGFsbCBvZiB0aGUgZm9sbG93aW5nOgovLyAgLSBCdWZmZXJpbmcKLy8gIC0gR1ppcCBjb21wcmVzc2lvbgovLyAgLSBDb250ZW50LUxlbmd0aCB2YWxpZGF0aW9uLgovLyAgLSBFcnJvcnMuCi8vCi8vIE1vc3Qgbm90YWJsZSBpcyB0aGUgR1ppcCBjb21wcmVzc2lvbiwgdGhhdCB1c2VzIGEgZG91YmxlLWJ1ZmZlcmluZyBzeXN0ZW0sCi8vIG9uZSBiZWZvcmUgZ3ppcCAoX2d6aXBCdWZmZXIpIGFuZCBvbmUgYWZ0ZXIgKF9idWZmZXIpLgpjbGFzcyBfSHR0cE91dGdvaW5nIGltcGxlbWVudHMgU3RyZWFtQ29uc3VtZXI8TGlzdDxpbnQ+PiB7CiAgc3RhdGljIGNvbnN0IExpc3Q8aW50PiBfZm9vdGVyQW5kQ2h1bmswTGVuZ3RoID0gY29uc3QgWwogICAgX0NoYXJDb2RlLkNSLAogICAgX0NoYXJDb2RlLkxGLAogICAgMHgzMCwKICAgIF9DaGFyQ29kZS5DUiwKICAgIF9DaGFyQ29kZS5MRiwKICAgIF9DaGFyQ29kZS5DUiwKICAgIF9DaGFyQ29kZS5MRgogIF07CgogIHN0YXRpYyBjb25zdCBMaXN0PGludD4gX2NodW5rMExlbmd0aCA9IGNvbnN0IFsKICAgIDB4MzAsCiAgICBfQ2hhckNvZGUuQ1IsCiAgICBfQ2hhckNvZGUuTEYsCiAgICBfQ2hhckNvZGUuQ1IsCiAgICBfQ2hhckNvZGUuTEYKICBdOwoKICBmaW5hbCBDb21wbGV0ZXI8U29ja2V0PiBfZG9uZUNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXI8U29ja2V0PigpOwogIGZpbmFsIFNvY2tldCBzb2NrZXQ7CgogIGJvb2wgaWdub3JlQm9keSA9IGZhbHNlOwogIGJvb2wgaGVhZGVyc1dyaXR0ZW4gPSBmYWxzZTsKCiAgVWludDhMaXN0IF9idWZmZXI7CiAgaW50IF9sZW5ndGggPSAwOwoKICBGdXR1cmUgX2Nsb3NlRnV0dXJlOwoKICBib29sIGNodW5rZWQgPSBmYWxzZTsKICBpbnQgX3BlbmRpbmdDaHVua2VkRm9vdGVyID0gMDsKCiAgaW50IGNvbnRlbnRMZW5ndGg7CiAgaW50IF9ieXRlc1dyaXR0ZW4gPSAwOwoKICBib29sIF9nemlwID0gZmFsc2U7CiAgQnl0ZUNvbnZlcnNpb25TaW5rIF9nemlwU2luazsKICAvLyBfZ3ppcEFkZCBpcyBzZXQgaWZmIHRoZSBzaW5rIGlzIGJlaW5nIGFkZGVkIHRvLiBJdCdzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZQogIC8vIGd6aXBwZWQgZGF0YSBzaG91bGQgYmUgdGFrZW4gKHNvbWV0aW1lcyBhIGNvbnRyb2xsZXIsIHNvbWV0aW1lcyBhIHNvY2tldCkuCiAgX0J5dGVzQ29uc3VtZXIgX2d6aXBBZGQ7CiAgVWludDhMaXN0IF9nemlwQnVmZmVyOwogIGludCBfZ3ppcEJ1ZmZlckxlbmd0aCA9IDA7CgogIGJvb2wgX3NvY2tldEVycm9yID0gZmFsc2U7CgogIF9IdHRwT3V0Ym91bmRNZXNzYWdlIG91dGJvdW5kOwoKICBfSHR0cE91dGdvaW5nKHRoaXMuc29ja2V0KTsKCiAgLy8gUmV0dXJucyBlaXRoZXIgYSBmdXR1cmUgb3IgJ251bGwnLCBpZiBpdCB3YXMgYWJsZSB0byB3cml0ZSBoZWFkZXJzCiAgLy8gaW1tZWRpYXRlbHkuCiAgRnV0dXJlIHdyaXRlSGVhZGVycyh7Ym9vbCBkcmFpblJlcXVlc3Q6IHRydWUsIGJvb2wgc2V0T3V0Z29pbmc6IHRydWV9KSB7CiAgICBpZiAoaGVhZGVyc1dyaXR0ZW4pIHJldHVybiBudWxsOwogICAgaGVhZGVyc1dyaXR0ZW4gPSB0cnVlOwogICAgRnV0dXJlIGRyYWluRnV0dXJlOwogICAgYm9vbCBnemlwID0gZmFsc2U7CiAgICBpZiAob3V0Ym91bmQgaXMgX0h0dHBSZXNwb25zZSkgewogICAgICAvLyBTZXJ2ZXIgc2lkZS4KICAgICAgX0h0dHBSZXNwb25zZSByZXNwb25zZSA9IG91dGJvdW5kOwogICAgICBpZiAocmVzcG9uc2UuX2h0dHBSZXF1ZXN0Ll9odHRwU2VydmVyLmF1dG9Db21wcmVzcyAmJgogICAgICAgICAgb3V0Ym91bmQuYnVmZmVyT3V0cHV0ICYmCiAgICAgICAgICBvdXRib3VuZC5oZWFkZXJzLmNodW5rZWRUcmFuc2ZlckVuY29kaW5nKSB7CiAgICAgICAgTGlzdCBhY2NlcHRFbmNvZGluZ3MgPQogICAgICAgICAgICByZXNwb25zZS5faHR0cFJlcXVlc3QuaGVhZGVyc1tIdHRwSGVhZGVycy5hY2NlcHRFbmNvZGluZ0hlYWRlcl07CiAgICAgICAgTGlzdCBjb250ZW50RW5jb2RpbmcgPQogICAgICAgICAgICBvdXRib3VuZC5oZWFkZXJzW0h0dHBIZWFkZXJzLmNvbnRlbnRFbmNvZGluZ0hlYWRlcl07CiAgICAgICAgaWYgKGFjY2VwdEVuY29kaW5ncyAhPSBudWxsICYmCiAgICAgICAgICAgIGFjY2VwdEVuY29kaW5ncwogICAgICAgICAgICAgICAgLmV4cGFuZCgobGlzdCkgPT4gbGlzdC5zcGxpdCgiLCIpKQogICAgICAgICAgICAgICAgLmFueSgoZW5jb2RpbmcpID0+IGVuY29kaW5nLnRyaW0oKS50b0xvd2VyQ2FzZSgpID09ICJnemlwIikgJiYKICAgICAgICAgICAgY29udGVudEVuY29kaW5nID09IG51bGwpIHsKICAgICAgICAgIG91dGJvdW5kLmhlYWRlcnMuc2V0KEh0dHBIZWFkZXJzLmNvbnRlbnRFbmNvZGluZ0hlYWRlciwgImd6aXAiKTsKICAgICAgICAgIGd6aXAgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoZHJhaW5SZXF1ZXN0ICYmICFyZXNwb25zZS5faHR0cFJlcXVlc3QuX2luY29taW5nLmhhc1N1YnNjcmliZXIpIHsKICAgICAgICBkcmFpbkZ1dHVyZSA9IHJlc3BvbnNlLl9odHRwUmVxdWVzdC5kcmFpbigpLmNhdGNoRXJyb3IoKF8pIHt9KTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZHJhaW5SZXF1ZXN0ID0gZmFsc2U7CiAgICB9CiAgICBpZiAoIWlnbm9yZUJvZHkpIHsKICAgICAgaWYgKHNldE91dGdvaW5nKSB7CiAgICAgICAgaW50IGNvbnRlbnRMZW5ndGggPSBvdXRib3VuZC5oZWFkZXJzLmNvbnRlbnRMZW5ndGg7CiAgICAgICAgaWYgKG91dGJvdW5kLmhlYWRlcnMuY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcpIHsKICAgICAgICAgIGNodW5rZWQgPSB0cnVlOwogICAgICAgICAgaWYgKGd6aXApIHRoaXMuZ3ppcCA9IHRydWU7CiAgICAgICAgfSBlbHNlIGlmIChjb250ZW50TGVuZ3RoID49IDApIHsKICAgICAgICAgIHRoaXMuY29udGVudExlbmd0aCA9IGNvbnRlbnRMZW5ndGg7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChkcmFpbkZ1dHVyZSAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIGRyYWluRnV0dXJlLnRoZW4oKF8pID0+IG91dGJvdW5kLl93cml0ZUhlYWRlcigpKTsKICAgICAgfQogICAgfQogICAgb3V0Ym91bmQuX3dyaXRlSGVhZGVyKCk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEZ1dHVyZSBhZGRTdHJlYW0oU3RyZWFtPExpc3Q8aW50Pj4gc3RyZWFtKSB7CiAgICBpZiAoX3NvY2tldEVycm9yKSB7CiAgICAgIHN0cmVhbS5saXN0ZW4obnVsbCkuY2FuY2VsKCk7CiAgICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKG91dGJvdW5kKTsKICAgIH0KICAgIGlmIChpZ25vcmVCb2R5KSB7CiAgICAgIHN0cmVhbS5kcmFpbigpLmNhdGNoRXJyb3IoKF8pIHt9KTsKICAgICAgdmFyIGZ1dHVyZSA9IHdyaXRlSGVhZGVycygpOwogICAgICBpZiAoZnV0dXJlICE9IG51bGwpIHsKICAgICAgICByZXR1cm4gZnV0dXJlLnRoZW4oKF8pID0+IGNsb3NlKCkpOwogICAgICB9CiAgICAgIHJldHVybiBjbG9zZSgpOwogICAgfQogICAgU3RyZWFtU3Vic2NyaXB0aW9uPExpc3Q8aW50Pj4gc3ViOwogICAgLy8gVXNlIG5ldyBzdHJlYW0gc28gd2UgYXJlIGFibGUgdG8gcGF1c2UgKHNlZSBiZWxvdyBsaXN0ZW4pLiBUaGUKICAgIC8vIGFsdGVybmF0aXZlIGlzIHRvIHVzZSBzdHJlYW0uZXh0YW5kLCBidXQgdGhhdCB3b24ndCBnaXZlIHVzIGEgd2F5IG9mCiAgICAvLyBwYXVzaW5nLgogICAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcjxMaXN0PGludD4+KAogICAgICAgIG9uUGF1c2U6ICgpID0+IHN1Yi5wYXVzZSgpLCBvblJlc3VtZTogKCkgPT4gc3ViLnJlc3VtZSgpLCBzeW5jOiB0cnVlKTsKCiAgICB2b2lkIG9uRGF0YShMaXN0PGludD4gZGF0YSkgewogICAgICBpZiAoX3NvY2tldEVycm9yKSByZXR1cm47CiAgICAgIGlmIChkYXRhLmxlbmd0aCA9PSAwKSByZXR1cm47CiAgICAgIGlmIChjaHVua2VkKSB7CiAgICAgICAgaWYgKF9nemlwKSB7CiAgICAgICAgICBfZ3ppcEFkZCA9IGNvbnRyb2xsZXIuYWRkOwogICAgICAgICAgX2FkZEdaaXBDaHVuayhkYXRhLCBfZ3ppcFNpbmsuYWRkKTsKICAgICAgICAgIF9nemlwQWRkID0gbnVsbDsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgX2FkZENodW5rKF9jaHVua0hlYWRlcihkYXRhLmxlbmd0aCksIGNvbnRyb2xsZXIuYWRkKTsKICAgICAgICBfcGVuZGluZ0NodW5rZWRGb290ZXIgPSAyOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwpIHsKICAgICAgICAgIF9ieXRlc1dyaXR0ZW4gKz0gZGF0YS5sZW5ndGg7CiAgICAgICAgICBpZiAoX2J5dGVzV3JpdHRlbiA+IGNvbnRlbnRMZW5ndGgpIHsKICAgICAgICAgICAgY29udHJvbGxlci5hZGRFcnJvcihuZXcgSHR0cEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICJDb250ZW50IHNpemUgZXhjZWVkcyBzcGVjaWZpZWQgY29udGVudExlbmd0aC4gIgogICAgICAgICAgICAgICAgIiRfYnl0ZXNXcml0dGVuIGJ5dGVzIHdyaXR0ZW4gd2hpbGUgZXhwZWN0ZWQgIgogICAgICAgICAgICAgICAgIiRjb250ZW50TGVuZ3RoLiAiCiAgICAgICAgICAgICAgICAiWyR7bmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGRhdGEpfV0iKSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgX2FkZENodW5rKGRhdGEsIGNvbnRyb2xsZXIuYWRkKTsKICAgIH0KCiAgICBzdWIgPSBzdHJlYW0ubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBjb250cm9sbGVyLmFkZEVycm9yLAogICAgICAgIG9uRG9uZTogY29udHJvbGxlci5jbG9zZSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIC8vIFdyaXRlIGhlYWRlcnMgbm93IHRoYXQgd2UgYXJlIGxpc3RlbmluZyB0byB0aGUgc3RyZWFtLgogICAgaWYgKCFoZWFkZXJzV3JpdHRlbikgewogICAgICB2YXIgZnV0dXJlID0gd3JpdGVIZWFkZXJzKCk7CiAgICAgIGlmIChmdXR1cmUgIT0gbnVsbCkgewogICAgICAgIC8vIFdoaWxlIGluY29taW5nIGlzIGJlaW5nIGRyYWluZWQsIHRoZSBwYXVzZUZ1dHVyZSBpcyBub24tbnVsbC4gUGF1c2UKICAgICAgICAvLyBvdXRwdXQgdW50aWwgaXQncyBkcmFpbmVkLgogICAgICAgIHN1Yi5wYXVzZShmdXR1cmUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc29ja2V0LmFkZFN0cmVhbShjb250cm9sbGVyLnN0cmVhbSkudGhlbigoXykgewogICAgICByZXR1cm4gb3V0Ym91bmQ7CiAgICB9LCBvbkVycm9yOiAoZXJyb3IsIHN0YWNrVHJhY2UpIHsKICAgICAgLy8gQmUgc3VyZSB0byBjbG9zZSBpdCBpbiBjYXNlIG9mIGFuIGVycm9yLgogICAgICBpZiAoX2d6aXApIF9nemlwU2luay5jbG9zZSgpOwogICAgICBfc29ja2V0RXJyb3IgPSB0cnVlOwogICAgICBfZG9uZUNvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgaWYgKF9pZ25vcmVFcnJvcihlcnJvcikpIHsKICAgICAgICByZXR1cm4gb3V0Ym91bmQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgRnV0dXJlIGNsb3NlKCkgewogICAgLy8gSWYgd2UgYXJlIGFscmVhZHkgY2xvc2VkLCByZXR1cm4gdGhhdCBmdXR1cmUuCiAgICBpZiAoX2Nsb3NlRnV0dXJlICE9IG51bGwpIHJldHVybiBfY2xvc2VGdXR1cmU7CiAgICAvLyBJZiB3ZSBlYXJsaWVyIHNhdyBhbiBlcnJvciwgcmV0dXJuIGltbWVkaWF0ZS4gVGhlIG5vdGlmaWNhdGlvbiB0bwogICAgLy8gX0h0dHAqQ29ubmVjdGlvbiBpcyBhbHJlYWR5IGRvbmUuCiAgICBpZiAoX3NvY2tldEVycm9yKSByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZShvdXRib3VuZCk7CiAgICBpZiAob3V0Ym91bmQuX2lzQ29ubmVjdGlvbkNsb3NlZCkgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUob3V0Ym91bmQpOwogICAgaWYgKCFoZWFkZXJzV3JpdHRlbiAmJiAhaWdub3JlQm9keSkgewogICAgICBpZiAob3V0Ym91bmQuaGVhZGVycy5jb250ZW50TGVuZ3RoID09IC0xKSB7CiAgICAgICAgLy8gSWYgbm8gYm9keSB3YXMgd3JpdHRlbiwgaWdub3JlQm9keSBpcyBmYWxzZSAoaXQncyBub3QgYSBIRUFECiAgICAgICAgLy8gcmVxdWVzdCkgYW5kIHRoZSBjb250ZW50LWxlbmd0aCBpcyB1bnNwZWNpZmllZCwgc2V0IGNvbnRlbnRMZW5ndGggdG8KICAgICAgICAvLyAwLgogICAgICAgIG91dGJvdW5kLmhlYWRlcnMuY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcgPSBmYWxzZTsKICAgICAgICBvdXRib3VuZC5oZWFkZXJzLmNvbnRlbnRMZW5ndGggPSAwOwogICAgICB9IGVsc2UgaWYgKG91dGJvdW5kLmhlYWRlcnMuY29udGVudExlbmd0aCA+IDApIHsKICAgICAgICB2YXIgZXJyb3IgPSBuZXcgSHR0cEV4Y2VwdGlvbigKICAgICAgICAgICAgIk5vIGNvbnRlbnQgZXZlbiB0aG91Z2ggY29udGVudExlbmd0aCB3YXMgc3BlY2lmaWVkIHRvIGJlICIKICAgICAgICAgICAgImdyZWF0ZXIgdGhhbiAwOiAke291dGJvdW5kLmhlYWRlcnMuY29udGVudExlbmd0aH0uIiwKICAgICAgICAgICAgdXJpOiBvdXRib3VuZC5fdXJpKTsKICAgICAgICBfZG9uZUNvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yKTsKICAgICAgICByZXR1cm4gX2Nsb3NlRnV0dXJlID0gbmV3IEZ1dHVyZS5lcnJvcihlcnJvcik7CiAgICAgIH0KICAgIH0KICAgIC8vIElmIGNvbnRlbnRMZW5ndGggd2FzIHNwZWNpZmllZCwgdmFsaWRhdGUgaXQuCiAgICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsKSB7CiAgICAgIGlmIChfYnl0ZXNXcml0dGVuIDwgY29udGVudExlbmd0aCkgewogICAgICAgIHZhciBlcnJvciA9IG5ldyBIdHRwRXhjZXB0aW9uKAogICAgICAgICAgICAiQ29udGVudCBzaXplIGJlbG93IHNwZWNpZmllZCBjb250ZW50TGVuZ3RoLiAiCiAgICAgICAgICAgICIgJF9ieXRlc1dyaXR0ZW4gYnl0ZXMgd3JpdHRlbiBidXQgZXhwZWN0ZWQgIgogICAgICAgICAgICAiJGNvbnRlbnRMZW5ndGguIiwKICAgICAgICAgICAgdXJpOiBvdXRib3VuZC5fdXJpKTsKICAgICAgICBfZG9uZUNvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yKTsKICAgICAgICByZXR1cm4gX2Nsb3NlRnV0dXJlID0gbmV3IEZ1dHVyZS5lcnJvcihlcnJvcik7CiAgICAgIH0KICAgIH0KCiAgICBGdXR1cmUgZmluYWxpemUoKSB7CiAgICAgIC8vIEluIGNhc2Ugb2YgY2h1bmtlZCBlbmNvZGluZyAoYW5kIGd6aXApLCBoYW5kbGUgcmVtYWluaW5nIGd6aXAgZGF0YSBhbmQKICAgICAgLy8gYXBwZW5kIHRoZSAnZm9vdGVyJyBmb3IgY2h1bmtlZCBlbmNvZGluZy4KICAgICAgaWYgKGNodW5rZWQpIHsKICAgICAgICBpZiAoX2d6aXApIHsKICAgICAgICAgIF9nemlwQWRkID0gc29ja2V0LmFkZDsKICAgICAgICAgIGlmIChfZ3ppcEJ1ZmZlckxlbmd0aCA+IDApIHsKICAgICAgICAgICAgX2d6aXBTaW5rLmFkZChuZXcgVWludDhMaXN0LnZpZXcoX2d6aXBCdWZmZXIuYnVmZmVyLAogICAgICAgICAgICAgICAgX2d6aXBCdWZmZXIub2Zmc2V0SW5CeXRlcywgX2d6aXBCdWZmZXJMZW5ndGgpKTsKICAgICAgICAgIH0KICAgICAgICAgIF9nemlwQnVmZmVyID0gbnVsbDsKICAgICAgICAgIF9nemlwU2luay5jbG9zZSgpOwogICAgICAgICAgX2d6aXBBZGQgPSBudWxsOwogICAgICAgIH0KICAgICAgICBfYWRkQ2h1bmsoX2NodW5rSGVhZGVyKDApLCBzb2NrZXQuYWRkKTsKICAgICAgfQogICAgICAvLyBBZGQgYW55IHJlbWFpbmluZyBkYXRhIGluIHRoZSBidWZmZXIuCiAgICAgIGlmIChfbGVuZ3RoID4gMCkgewogICAgICAgIHNvY2tldC5hZGQoCiAgICAgICAgICAgIG5ldyBVaW50OExpc3QudmlldyhfYnVmZmVyLmJ1ZmZlciwgX2J1ZmZlci5vZmZzZXRJbkJ5dGVzLCBfbGVuZ3RoKSk7CiAgICAgIH0KICAgICAgLy8gQ2xlYXIgcmVmZXJlbmNlcywgZm9yIGJldHRlciBHQy4KICAgICAgX2J1ZmZlciA9IG51bGw7CiAgICAgIC8vIEFuZCBmaW5hbGx5IGZsdXNoIGl0LiBBcyB3ZSBzdXBwb3J0IGtlZXAtYWxpdmUsIG5ldmVyIGNsb3NlIGl0IGZyb20KICAgICAgLy8gaGVyZS4gT25jZSB0aGUgc29ja2V0IGlzIGZsdXNoZWQsIHdlJ2xsIGJlIGFibGUgdG8gcmV1c2UgaXQgKHNpZ25hbGVkCiAgICAgIC8vIGJ5IHRoZSAnZG9uZScgZnV0dXJlKS4KICAgICAgcmV0dXJuIHNvY2tldC5mbHVzaCgpLnRoZW4oKF8pIHsKICAgICAgICBfZG9uZUNvbXBsZXRlci5jb21wbGV0ZShzb2NrZXQpOwogICAgICAgIHJldHVybiBvdXRib3VuZDsKICAgICAgfSwgb25FcnJvcjogKGVycm9yLCBzdGFja1RyYWNlKSB7CiAgICAgICAgX2RvbmVDb21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgICAgaWYgKF9pZ25vcmVFcnJvcihlcnJvcikpIHsKICAgICAgICAgIHJldHVybiBvdXRib3VuZDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KCiAgICB2YXIgZnV0dXJlID0gd3JpdGVIZWFkZXJzKCk7CiAgICBpZiAoZnV0dXJlICE9IG51bGwpIHsKICAgICAgcmV0dXJuIF9jbG9zZUZ1dHVyZSA9IGZ1dHVyZS53aGVuQ29tcGxldGUoZmluYWxpemUpOwogICAgfQogICAgcmV0dXJuIF9jbG9zZUZ1dHVyZSA9IGZpbmFsaXplKCk7CiAgfQoKICBGdXR1cmU8U29ja2V0PiBnZXQgZG9uZSA9PiBfZG9uZUNvbXBsZXRlci5mdXR1cmU7CgogIHZvaWQgc2V0SGVhZGVyKExpc3Q8aW50PiBkYXRhLCBpbnQgbGVuZ3RoKSB7CiAgICBhc3NlcnQoX2xlbmd0aCA9PSAwKTsKICAgIF9idWZmZXIgPSBkYXRhOwogICAgX2xlbmd0aCA9IGxlbmd0aDsKICB9CgogIHZvaWQgc2V0IGd6aXAoYm9vbCB2YWx1ZSkgewogICAgX2d6aXAgPSB2YWx1ZTsKICAgIGlmIChfZ3ppcCkgewogICAgICBfZ3ppcEJ1ZmZlciA9IG5ldyBVaW50OExpc3QoX09VVEdPSU5HX0JVRkZFUl9TSVpFKTsKICAgICAgYXNzZXJ0KF9nemlwU2luayA9PSBudWxsKTsKICAgICAgX2d6aXBTaW5rID0gbmV3IFpMaWJFbmNvZGVyKGd6aXA6IHRydWUpCiAgICAgICAgICAuc3RhcnRDaHVua2VkQ29udmVyc2lvbihuZXcgX0h0dHBHWmlwU2luaygoZGF0YSkgewogICAgICAgIC8vIFdlIGFyZSBjbG9zaW5nIGRvd24gcHJlbWF0dXJlbHksIGR1ZSB0byBhbiBlcnJvci4gRGlzY2FyZC4KICAgICAgICBpZiAoX2d6aXBBZGQgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgIF9hZGRDaHVuayhfY2h1bmtIZWFkZXIoZGF0YS5sZW5ndGgpLCBfZ3ppcEFkZCk7CiAgICAgICAgX3BlbmRpbmdDaHVua2VkRm9vdGVyID0gMjsKICAgICAgICBfYWRkQ2h1bmsoZGF0YSwgX2d6aXBBZGQpOwogICAgICB9KSk7CiAgICB9CiAgfQoKICBib29sIF9pZ25vcmVFcnJvcihlcnJvcikgPT4KICAgICAgKGVycm9yIGlzIFNvY2tldEV4Y2VwdGlvbiB8fCBlcnJvciBpcyBUbHNFeGNlcHRpb24pICYmCiAgICAgIG91dGJvdW5kIGlzIEh0dHBSZXNwb25zZTsKCiAgdm9pZCBfYWRkR1ppcENodW5rKExpc3Q8aW50PiBjaHVuaywgdm9pZCBhZGQoTGlzdDxpbnQ+IGRhdGEpKSB7CiAgICBpZiAoIW91dGJvdW5kLmJ1ZmZlck91dHB1dCkgewogICAgICBhZGQoY2h1bmspOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoY2h1bmsubGVuZ3RoID4gX2d6aXBCdWZmZXIubGVuZ3RoIC0gX2d6aXBCdWZmZXJMZW5ndGgpIHsKICAgICAgYWRkKG5ldyBVaW50OExpc3QudmlldygKICAgICAgICAgIF9nemlwQnVmZmVyLmJ1ZmZlciwgX2d6aXBCdWZmZXIub2Zmc2V0SW5CeXRlcywgX2d6aXBCdWZmZXJMZW5ndGgpKTsKICAgICAgX2d6aXBCdWZmZXIgPSBuZXcgVWludDhMaXN0KF9PVVRHT0lOR19CVUZGRVJfU0laRSk7CiAgICAgIF9nemlwQnVmZmVyTGVuZ3RoID0gMDsKICAgIH0KICAgIGlmIChjaHVuay5sZW5ndGggPiBfT1VUR09JTkdfQlVGRkVSX1NJWkUpIHsKICAgICAgYWRkKGNodW5rKTsKICAgIH0gZWxzZSB7CiAgICAgIF9nemlwQnVmZmVyLnNldFJhbmdlKAogICAgICAgICAgX2d6aXBCdWZmZXJMZW5ndGgsIF9nemlwQnVmZmVyTGVuZ3RoICsgY2h1bmsubGVuZ3RoLCBjaHVuayk7CiAgICAgIF9nemlwQnVmZmVyTGVuZ3RoICs9IGNodW5rLmxlbmd0aDsKICAgIH0KICB9CgogIHZvaWQgX2FkZENodW5rKExpc3Q8aW50PiBjaHVuaywgdm9pZCBhZGQoTGlzdDxpbnQ+IGRhdGEpKSB7CiAgICBpZiAoIW91dGJvdW5kLmJ1ZmZlck91dHB1dCkgewogICAgICBpZiAoX2J1ZmZlciAhPSBudWxsKSB7CiAgICAgICAgLy8gSWYgX2J1ZmZlciBpcyBub3QgbnVsbCwgd2UgaGF2ZSBub3Qgd3JpdHRlbiB0aGUgaGVhZGVyIHlldC4gV3JpdGUKICAgICAgICAvLyBpdCBub3cuCiAgICAgICAgYWRkKG5ldyBVaW50OExpc3QudmlldyhfYnVmZmVyLmJ1ZmZlciwgX2J1ZmZlci5vZmZzZXRJbkJ5dGVzLCBfbGVuZ3RoKSk7CiAgICAgICAgX2J1ZmZlciA9IG51bGw7CiAgICAgICAgX2xlbmd0aCA9IDA7CiAgICAgIH0KICAgICAgYWRkKGNodW5rKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGNodW5rLmxlbmd0aCA+IF9idWZmZXIubGVuZ3RoIC0gX2xlbmd0aCkgewogICAgICBhZGQobmV3IFVpbnQ4TGlzdC52aWV3KF9idWZmZXIuYnVmZmVyLCBfYnVmZmVyLm9mZnNldEluQnl0ZXMsIF9sZW5ndGgpKTsKICAgICAgX2J1ZmZlciA9IG5ldyBVaW50OExpc3QoX09VVEdPSU5HX0JVRkZFUl9TSVpFKTsKICAgICAgX2xlbmd0aCA9IDA7CiAgICB9CiAgICBpZiAoY2h1bmsubGVuZ3RoID4gX09VVEdPSU5HX0JVRkZFUl9TSVpFKSB7CiAgICAgIGFkZChjaHVuayk7CiAgICB9IGVsc2UgewogICAgICBfYnVmZmVyLnNldFJhbmdlKF9sZW5ndGgsIF9sZW5ndGggKyBjaHVuay5sZW5ndGgsIGNodW5rKTsKICAgICAgX2xlbmd0aCArPSBjaHVuay5sZW5ndGg7CiAgICB9CiAgfQoKICBMaXN0PGludD4gX2NodW5rSGVhZGVyKGludCBsZW5ndGgpIHsKICAgIGNvbnN0IGhleERpZ2l0cyA9IGNvbnN0IFsKICAgICAgMHgzMCwKICAgICAgMHgzMSwKICAgICAgMHgzMiwKICAgICAgMHgzMywKICAgICAgMHgzNCwKICAgICAgMHgzNSwKICAgICAgMHgzNiwKICAgICAgMHgzNywKICAgICAgMHgzOCwKICAgICAgMHgzOSwKICAgICAgMHg0MSwKICAgICAgMHg0MiwKICAgICAgMHg0MywKICAgICAgMHg0NCwKICAgICAgMHg0NSwKICAgICAgMHg0NgogICAgXTsKICAgIGlmIChsZW5ndGggPT0gMCkgewogICAgICBpZiAoX3BlbmRpbmdDaHVua2VkRm9vdGVyID09IDIpIHJldHVybiBfZm9vdGVyQW5kQ2h1bmswTGVuZ3RoOwogICAgICByZXR1cm4gX2NodW5rMExlbmd0aDsKICAgIH0KICAgIGludCBzaXplID0gX3BlbmRpbmdDaHVua2VkRm9vdGVyOwogICAgaW50IGxlbiA9IGxlbmd0aDsKICAgIC8vIENvbXB1dGUgYSBmYXN0IGludGVnZXIgdmVyc2lvbiBvZiAobG9nKGxlbmd0aCArIDEpIC8gbG9nKDE2KSkuY2VpbCgpLgogICAgd2hpbGUgKGxlbiA+IDApIHsKICAgICAgc2l6ZSsrOwogICAgICBsZW4gPj49IDQ7CiAgICB9CiAgICB2YXIgZm9vdGVyQW5kSGVhZGVyID0gbmV3IFVpbnQ4TGlzdChzaXplICsgMik7CiAgICBpZiAoX3BlbmRpbmdDaHVua2VkRm9vdGVyID09IDIpIHsKICAgICAgZm9vdGVyQW5kSGVhZGVyWzBdID0gX0NoYXJDb2RlLkNSOwogICAgICBmb290ZXJBbmRIZWFkZXJbMV0gPSBfQ2hhckNvZGUuTEY7CiAgICB9CiAgICBpbnQgaW5kZXggPSBzaXplOwogICAgd2hpbGUgKGluZGV4ID4gX3BlbmRpbmdDaHVua2VkRm9vdGVyKSB7CiAgICAgIGZvb3RlckFuZEhlYWRlclstLWluZGV4XSA9IGhleERpZ2l0c1tsZW5ndGggJiAxNV07CiAgICAgIGxlbmd0aCA9IGxlbmd0aCA+PiA0OwogICAgfQogICAgZm9vdGVyQW5kSGVhZGVyW3NpemUgKyAwXSA9IF9DaGFyQ29kZS5DUjsKICAgIGZvb3RlckFuZEhlYWRlcltzaXplICsgMV0gPSBfQ2hhckNvZGUuTEY7CiAgICByZXR1cm4gZm9vdGVyQW5kSGVhZGVyOwogIH0KfQoKY2xhc3MgX0h0dHBDbGllbnRDb25uZWN0aW9uIHsKICBmaW5hbCBTdHJpbmcga2V5OwogIGZpbmFsIFNvY2tldCBfc29ja2V0OwogIGZpbmFsIGJvb2wgX3Byb3h5VHVubmVsOwogIGZpbmFsIFNlY3VyaXR5Q29udGV4dCBfY29udGV4dDsKICBmaW5hbCBfSHR0cFBhcnNlciBfaHR0cFBhcnNlcjsKICBTdHJlYW1TdWJzY3JpcHRpb24gX3N1YnNjcmlwdGlvbjsKICBmaW5hbCBfSHR0cENsaWVudCBfaHR0cENsaWVudDsKICBib29sIF9kaXNwb3NlID0gZmFsc2U7CiAgVGltZXIgX2lkbGVUaW1lcjsKICBib29sIGNsb3NlZCA9IGZhbHNlOwogIFVyaSBfY3VycmVudFVyaTsKCiAgQ29tcGxldGVyPF9IdHRwSW5jb21pbmc+IF9uZXh0UmVzcG9uc2VDb21wbGV0ZXI7CiAgRnV0dXJlPFNvY2tldD4gX3N0cmVhbUZ1dHVyZTsKCiAgX0h0dHBDbGllbnRDb25uZWN0aW9uKHRoaXMua2V5LCB0aGlzLl9zb2NrZXQsIHRoaXMuX2h0dHBDbGllbnQsCiAgICAgIFt0aGlzLl9wcm94eVR1bm5lbCA9IGZhbHNlLCB0aGlzLl9jb250ZXh0XSkKICAgICAgOiBfaHR0cFBhcnNlciA9IG5ldyBfSHR0cFBhcnNlci5yZXNwb25zZVBhcnNlcigpIHsKICAgIF9odHRwUGFyc2VyLmxpc3RlblRvU3RyZWFtKF9zb2NrZXQpOwoKICAgIC8vIFNldCB1cCBoYW5kbGVycyBvbiB0aGUgcGFyc2VyIGhlcmUsIHNvIHdlIGFyZSBzdXJlIHRvIGdldCAnb25Eb25lJyBmcm9tCiAgICAvLyB0aGUgcGFyc2VyLgogICAgX3N1YnNjcmlwdGlvbiA9IF9odHRwUGFyc2VyLmxpc3RlbigoaW5jb21pbmcpIHsKICAgICAgLy8gT25seSBoYW5kbGUgb25lIGluY29taW5nIHJlc3BvbnNlIGF0IHRoZSB0aW1lLiBLZWVwIHRoZQogICAgICAvLyBzdHJlYW0gcGF1c2VkIHVudGlsIHRoZSByZXNwb25zZSBoYXZlIGJlZW4gcHJvY2Vzc2VkLgogICAgICBfc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICAgIC8vIFdlIGFzc3VtZSB0aGUgcmVzcG9uc2UgaXMgbm90IGhlcmUsIHVudGlsIHdlIGhhdmUgc2VuZCB0aGUgcmVxdWVzdC4KICAgICAgaWYgKF9uZXh0UmVzcG9uc2VDb21wbGV0ZXIgPT0gbnVsbCkgewogICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKAogICAgICAgICAgICAiVW5leHBlY3RlZCByZXNwb25zZSAodW5zb2xpY2l0ZWQgcmVzcG9uc2Ugd2l0aG91dCByZXF1ZXN0KS4iLAogICAgICAgICAgICB1cmk6IF9jdXJyZW50VXJpKTsKICAgICAgfQoKICAgICAgLy8gQ2hlY2sgZm9yIHN0YXR1cyBjb2RlICcxMDAgQ29udGludWUnLiBJbiB0aGF0IGNhc2UganVzdAogICAgICAvLyBjb25zdW1lIHRoYXQgcmVzcG9uc2UgYXMgdGhlIGZpbmFsIHJlc3BvbnNlIHdpbGwgZm9sbG93CiAgICAgIC8vIGl0LiBUaGVyZSBpcyBjdXJyZW50bHkgbm8gQVBJIGZvciB0aGUgY2xpZW50IHRvIHdhaXQgZm9yCiAgICAgIC8vIHRoZSAnMTAwIENvbnRpbnVlJyByZXNwb25zZS4KICAgICAgaWYgKGluY29taW5nLnN0YXR1c0NvZGUgPT0gMTAwKSB7CiAgICAgICAgaW5jb21pbmcuZHJhaW4oKS50aGVuKChfKSB7CiAgICAgICAgICBfc3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogICAgICAgIH0pLmNhdGNoRXJyb3IoKGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgICAgICAgX25leHRSZXNwb25zZUNvbXBsZXRlci5jb21wbGV0ZUVycm9yKAogICAgICAgICAgICAgIG5ldyBIdHRwRXhjZXB0aW9uKGVycm9yLm1lc3NhZ2UsIHVyaTogX2N1cnJlbnRVcmkpLCBzdGFja1RyYWNlKTsKICAgICAgICAgIF9uZXh0UmVzcG9uc2VDb21wbGV0ZXIgPSBudWxsOwogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIF9uZXh0UmVzcG9uc2VDb21wbGV0ZXIuY29tcGxldGUoaW5jb21pbmcpOwogICAgICAgIF9uZXh0UmVzcG9uc2VDb21wbGV0ZXIgPSBudWxsOwogICAgICB9CiAgICB9LCBvbkVycm9yOiAoZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICAgIGlmIChfbmV4dFJlc3BvbnNlQ29tcGxldGVyICE9IG51bGwpIHsKICAgICAgICBfbmV4dFJlc3BvbnNlQ29tcGxldGVyLmNvbXBsZXRlRXJyb3IoCiAgICAgICAgICAgIG5ldyBIdHRwRXhjZXB0aW9uKGVycm9yLm1lc3NhZ2UsIHVyaTogX2N1cnJlbnRVcmkpLCBzdGFja1RyYWNlKTsKICAgICAgICBfbmV4dFJlc3BvbnNlQ29tcGxldGVyID0gbnVsbDsKICAgICAgfQogICAgfSwgb25Eb25lOiAoKSB7CiAgICAgIGlmIChfbmV4dFJlc3BvbnNlQ29tcGxldGVyICE9IG51bGwpIHsKICAgICAgICBfbmV4dFJlc3BvbnNlQ29tcGxldGVyLmNvbXBsZXRlRXJyb3IobmV3IEh0dHBFeGNlcHRpb24oCiAgICAgICAgICAgICJDb25uZWN0aW9uIGNsb3NlZCBiZWZvcmUgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkIiwKICAgICAgICAgICAgdXJpOiBfY3VycmVudFVyaSkpOwogICAgICAgIF9uZXh0UmVzcG9uc2VDb21wbGV0ZXIgPSBudWxsOwogICAgICB9CiAgICAgIGNsb3NlKCk7CiAgICB9KTsKICB9CgogIF9IdHRwQ2xpZW50UmVxdWVzdCBzZW5kKAogICAgICBVcmkgdXJpLCBpbnQgcG9ydCwgU3RyaW5nIG1ldGhvZCwgX1Byb3h5IHByb3h5LCBUaW1lbGluZVRhc2sgdGltZWxpbmUpIHsKICAgIGlmIChjbG9zZWQpIHsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIlNvY2tldCBjbG9zZWQgYmVmb3JlIHJlcXVlc3Qgd2FzIHNlbnQiLAogICAgICAgICAgdXJpOiB1cmkpOwogICAgfQogICAgX2N1cnJlbnRVcmkgPSB1cmk7CiAgICAvLyBTdGFydCB3aXRoIHBhdXNpbmcgdGhlIHBhcnNlci4KICAgIF9zdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgIF9Qcm94eUNyZWRlbnRpYWxzIHByb3h5Q3JlZHM7IC8vIENyZWRlbnRpYWxzIHVzZWQgdG8gYXV0aG9yaXplIHByb3h5LgogICAgX1NpdGVDcmVkZW50aWFscyBjcmVkczsgLy8gQ3JlZGVudGlhbHMgdXNlZCB0byBhdXRob3JpemUgdGhpcyByZXF1ZXN0LgogICAgdmFyIG91dGdvaW5nID0gbmV3IF9IdHRwT3V0Z29pbmcoX3NvY2tldCk7CiAgICAvLyBDcmVhdGUgbmV3IHJlcXVlc3Qgb2JqZWN0LCB3cmFwcGluZyB0aGUgb3V0Z29pbmcgY29ubmVjdGlvbi4KICAgIHZhciByZXF1ZXN0ID0gbmV3IF9IdHRwQ2xpZW50UmVxdWVzdCgKICAgICAgICBvdXRnb2luZywgdXJpLCBtZXRob2QsIHByb3h5LCBfaHR0cENsaWVudCwgdGhpcywgdGltZWxpbmUpOwogICAgLy8gRm9yIHRoZSBIb3N0IGhlYWRlciBhbiBJUHY2IGFkZHJlc3MgbXVzdCBiZSBlbmNsb3NlZCBpbiBbXSdzLgogICAgdmFyIGhvc3QgPSB1cmkuaG9zdDsKICAgIGlmIChob3N0LmNvbnRhaW5zKCc6JykpIGhvc3QgPSAiWyRob3N0XSI7CiAgICByZXF1ZXN0LmhlYWRlcnMKICAgICAgLi5ob3N0ID0gaG9zdAogICAgICAuLnBvcnQgPSBwb3J0CiAgICAgIC4uX2FkZChIdHRwSGVhZGVycy5hY2NlcHRFbmNvZGluZ0hlYWRlciwgImd6aXAiKTsKICAgIGlmIChfaHR0cENsaWVudC51c2VyQWdlbnQgIT0gbnVsbCkgewogICAgICByZXF1ZXN0LmhlYWRlcnMuX2FkZChIdHRwSGVhZGVycy51c2VyQWdlbnRIZWFkZXIsIF9odHRwQ2xpZW50LnVzZXJBZ2VudCk7CiAgICB9CiAgICBpZiAocHJveHkuaXNBdXRoZW50aWNhdGVkKSB7CiAgICAgIC8vIElmIHRoZSBwcm94eSBjb25maWd1cmF0aW9uIGNvbnRhaW5zIHVzZXIgaW5mb3JtYXRpb24gdXNlIHRoYXQKICAgICAgLy8gZm9yIHByb3h5IGJhc2ljIGF1dGhvcml6YXRpb24uCiAgICAgIFN0cmluZyBhdXRoID0gX0NyeXB0b1V0aWxzLmJ5dGVzVG9CYXNlNjQoCiAgICAgICAgICB1dGY4LmVuY29kZSgiJHtwcm94eS51c2VybmFtZX06JHtwcm94eS5wYXNzd29yZH0iKSk7CiAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSHR0cEhlYWRlcnMucHJveHlBdXRob3JpemF0aW9uSGVhZGVyLCAiQmFzaWMgJGF1dGgiKTsKICAgIH0gZWxzZSBpZiAoIXByb3h5LmlzRGlyZWN0ICYmIF9odHRwQ2xpZW50Ll9wcm94eUNyZWRlbnRpYWxzLmxlbmd0aCA+IDApIHsKICAgICAgcHJveHlDcmVkcyA9IF9odHRwQ2xpZW50Ll9maW5kUHJveHlDcmVkZW50aWFscyhwcm94eSk7CiAgICAgIGlmIChwcm94eUNyZWRzICE9IG51bGwpIHsKICAgICAgICBwcm94eUNyZWRzLmF1dGhvcml6ZShyZXF1ZXN0KTsKICAgICAgfQogICAgfQogICAgaWYgKHVyaS51c2VySW5mbyAhPSBudWxsICYmICF1cmkudXNlckluZm8uaXNFbXB0eSkgewogICAgICAvLyBJZiB0aGUgVVJMIGNvbnRhaW5zIHVzZXIgaW5mb3JtYXRpb24gdXNlIHRoYXQgZm9yIGJhc2ljCiAgICAgIC8vIGF1dGhvcml6YXRpb24uCiAgICAgIFN0cmluZyBhdXRoID0gX0NyeXB0b1V0aWxzLmJ5dGVzVG9CYXNlNjQodXRmOC5lbmNvZGUodXJpLnVzZXJJbmZvKSk7CiAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSHR0cEhlYWRlcnMuYXV0aG9yaXphdGlvbkhlYWRlciwgIkJhc2ljICRhdXRoIik7CiAgICB9IGVsc2UgewogICAgICAvLyBMb29rIGZvciBjcmVkZW50aWFscy4KICAgICAgY3JlZHMgPSBfaHR0cENsaWVudC5fZmluZENyZWRlbnRpYWxzKHVyaSk7CiAgICAgIGlmIChjcmVkcyAhPSBudWxsKSB7CiAgICAgICAgY3JlZHMuYXV0aG9yaXplKHJlcXVlc3QpOwogICAgICB9CiAgICB9CgogICAgLy8gU3RhcnQgc2VuZGluZyB0aGUgcmVxdWVzdCAobGF6eSwgZGVsYXllZCB1bnRpbCB0aGUgdXNlciBwcm92aWRlcwogICAgLy8gZGF0YSkuCiAgICBfaHR0cFBhcnNlci5pc0hlYWQgPSBtZXRob2QgPT0gIkhFQUQiOwogICAgX3N0cmVhbUZ1dHVyZSA9IG91dGdvaW5nLmRvbmUudGhlbjxTb2NrZXQ+KChTb2NrZXQgcykgewogICAgICAvLyBSZXF1ZXN0IHNlbnQsIHNldCB1cCByZXNwb25zZSBjb21wbGV0ZXIuCiAgICAgIF9uZXh0UmVzcG9uc2VDb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPF9IdHRwSW5jb21pbmc+KCk7CgogICAgICAvLyBMaXN0ZW4gZm9yIHJlc3BvbnNlLgogICAgICBfbmV4dFJlc3BvbnNlQ29tcGxldGVyLmZ1dHVyZS50aGVuKChpbmNvbWluZykgewogICAgICAgIF9jdXJyZW50VXJpID0gbnVsbDsKICAgICAgICBpbmNvbWluZy5kYXRhRG9uZS50aGVuKChjbG9zaW5nKSB7CiAgICAgICAgICBpZiAoaW5jb21pbmcudXBncmFkZWQpIHsKICAgICAgICAgICAgX2h0dHBDbGllbnQuX2Nvbm5lY3Rpb25DbG9zZWQodGhpcyk7CiAgICAgICAgICAgIHN0YXJ0VGltZXIoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNsb3NlZCkgcmV0dXJuOwogICAgICAgICAgaWYgKCFjbG9zaW5nICYmCiAgICAgICAgICAgICAgIV9kaXNwb3NlICYmCiAgICAgICAgICAgICAgaW5jb21pbmcuaGVhZGVycy5wZXJzaXN0ZW50Q29ubmVjdGlvbiAmJgogICAgICAgICAgICAgIHJlcXVlc3QucGVyc2lzdGVudENvbm5lY3Rpb24pIHsKICAgICAgICAgICAgLy8gUmV0dXJuIGNvbm5lY3Rpb24sIG5vdyB3ZSBhcmUgZG9uZS4KICAgICAgICAgICAgX2h0dHBDbGllbnQuX3JldHVybkNvbm5lY3Rpb24odGhpcyk7CiAgICAgICAgICAgIF9zdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkZXN0cm95KCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgLy8gRm9yIGRpZ2VzdCBhdXRoZW50aWNhdGlvbiBpZiBwcm94eSBjaGVjayBpZiB0aGUgcHJveHkKICAgICAgICAvLyByZXF1ZXN0cyB0aGUgY2xpZW50IHRvIHN0YXJ0IHVzaW5nIGEgbmV3IG5vbmNlIGZvciBwcm94eQogICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uLgogICAgICAgIGlmIChwcm94eUNyZWRzICE9IG51bGwgJiYKICAgICAgICAgICAgcHJveHlDcmVkcy5zY2hlbWUgPT0gX0F1dGhlbnRpY2F0aW9uU2NoZW1lLkRJR0VTVCkgewogICAgICAgICAgdmFyIGF1dGhJbmZvID0gaW5jb21pbmcuaGVhZGVyc1sicHJveHktYXV0aGVudGljYXRpb24taW5mbyJdOwogICAgICAgICAgaWYgKGF1dGhJbmZvICE9IG51bGwgJiYgYXV0aEluZm8ubGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgdmFyIGhlYWRlciA9CiAgICAgICAgICAgICAgICBfSGVhZGVyVmFsdWUucGFyc2UoYXV0aEluZm9bMF0sIHBhcmFtZXRlclNlcGFyYXRvcjogJywnKTsKICAgICAgICAgICAgdmFyIG5leHRub25jZSA9IGhlYWRlci5wYXJhbWV0ZXJzWyJuZXh0bm9uY2UiXTsKICAgICAgICAgICAgaWYgKG5leHRub25jZSAhPSBudWxsKSBwcm94eUNyZWRzLm5vbmNlID0gbmV4dG5vbmNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBGb3IgZGlnZXN0IGF1dGhlbnRpY2F0aW9uIGNoZWNrIGlmIHRoZSBzZXJ2ZXIgcmVxdWVzdHMgdGhlCiAgICAgICAgLy8gY2xpZW50IHRvIHN0YXJ0IHVzaW5nIGEgbmV3IG5vbmNlLgogICAgICAgIGlmIChjcmVkcyAhPSBudWxsICYmIGNyZWRzLnNjaGVtZSA9PSBfQXV0aGVudGljYXRpb25TY2hlbWUuRElHRVNUKSB7CiAgICAgICAgICB2YXIgYXV0aEluZm8gPSBpbmNvbWluZy5oZWFkZXJzWyJhdXRoZW50aWNhdGlvbi1pbmZvIl07CiAgICAgICAgICBpZiAoYXV0aEluZm8gIT0gbnVsbCAmJiBhdXRoSW5mby5sZW5ndGggPT0gMSkgewogICAgICAgICAgICB2YXIgaGVhZGVyID0KICAgICAgICAgICAgICAgIF9IZWFkZXJWYWx1ZS5wYXJzZShhdXRoSW5mb1swXSwgcGFyYW1ldGVyU2VwYXJhdG9yOiAnLCcpOwogICAgICAgICAgICB2YXIgbmV4dG5vbmNlID0gaGVhZGVyLnBhcmFtZXRlcnNbIm5leHRub25jZSJdOwogICAgICAgICAgICBpZiAobmV4dG5vbmNlICE9IG51bGwpIGNyZWRzLm5vbmNlID0gbmV4dG5vbmNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXF1ZXN0Ll9vbkluY29taW5nKGluY29taW5nKTsKICAgICAgfSkKICAgICAgICAgIC8vIElmIHdlIHNlZSBhIHN0YXRlIGVycm9yLCB3ZSBmYWlsZWQgdG8gZ2V0IHRoZSAnZmlyc3QnCiAgICAgICAgICAvLyBlbGVtZW50LgogICAgICAgICAgLmNhdGNoRXJyb3IoKGVycm9yKSB7CiAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkNvbm5lY3Rpb24gY2xvc2VkIGJlZm9yZSBkYXRhIHdhcyByZWNlaXZlZCIsCiAgICAgICAgICAgIHVyaTogdXJpKTsKICAgICAgfSwgdGVzdDogKGVycm9yKSA9PiBlcnJvciBpcyBTdGF0ZUVycm9yKS5jYXRjaEVycm9yKChlcnJvciwgc3RhY2tUcmFjZSkgewogICAgICAgIC8vIFdlIGFyZSBkb25lIHdpdGggdGhlIHNvY2tldC4KICAgICAgICBkZXN0cm95KCk7CiAgICAgICAgcmVxdWVzdC5fb25FcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIH0pOwoKICAgICAgLy8gUmVzdW1lIHRoZSBwYXJzZXIgbm93IHdlIGhhdmUgYSBoYW5kbGVyLgogICAgICBfc3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogICAgICByZXR1cm4gczsKICAgIH0sIG9uRXJyb3I6IChlKSB7CiAgICAgIGRlc3Ryb3koKTsKICAgIH0pOwogICAgcmV0dXJuIHJlcXVlc3Q7CiAgfQoKICBGdXR1cmU8U29ja2V0PiBkZXRhY2hTb2NrZXQoKSB7CiAgICByZXR1cm4gX3N0cmVhbUZ1dHVyZS50aGVuKAogICAgICAgIChfKSA9PiBuZXcgX0RldGFjaGVkU29ja2V0KF9zb2NrZXQsIF9odHRwUGFyc2VyLmRldGFjaEluY29taW5nKCkpKTsKICB9CgogIHZvaWQgZGVzdHJveSgpIHsKICAgIGNsb3NlZCA9IHRydWU7CiAgICBfaHR0cENsaWVudC5fY29ubmVjdGlvbkNsb3NlZCh0aGlzKTsKICAgIF9zb2NrZXQuZGVzdHJveSgpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIGNsb3NlZCA9IHRydWU7CiAgICBfaHR0cENsaWVudC5fY29ubmVjdGlvbkNsb3NlZCh0aGlzKTsKICAgIF9zdHJlYW1GdXR1cmUKICAgICAgICAudGltZW91dChfaHR0cENsaWVudC5pZGxlVGltZW91dCkKICAgICAgICAudGhlbigoXykgPT4gX3NvY2tldC5kZXN0cm95KCkpOwogIH0KCiAgRnV0dXJlPF9IdHRwQ2xpZW50Q29ubmVjdGlvbj4gY3JlYXRlUHJveHlUdW5uZWwoCiAgICAgIFN0cmluZyBob3N0LAogICAgICBpbnQgcG9ydCwKICAgICAgX1Byb3h5IHByb3h5LAogICAgICBib29sIGNhbGxiYWNrKFg1MDlDZXJ0aWZpY2F0ZSBjZXJ0aWZpY2F0ZSksCiAgICAgIFRpbWVsaW5lVGFzayB0aW1lbGluZSkgewogICAgdGltZWxpbmU/Lmluc3RhbnQoJ0VzdGFibGlzaGluZyBwcm94eSB0dW5uZWwnLCBhcmd1bWVudHM6IHsKICAgICAgJ3Byb3h5SW5mbyc6IHsKICAgICAgICBpZiAocHJveHkuaG9zdCAhPSBudWxsKSAnaG9zdCc6IHByb3h5Lmhvc3QsCiAgICAgICAgaWYgKHByb3h5LnBvcnQgIT0gbnVsbCkKICAgICAgICAgICdwb3J0JzogcHJveHkucG9ydCwKICAgICAgICBpZiAocHJveHkudXNlcm5hbWUgIT0gbnVsbCkKICAgICAgICAgICd1c2VybmFtZSc6IHByb3h5LnVzZXJuYW1lLAogICAgICAgIC8vIFRPRE8oYmtvbnlpKTogaXMgdGhpcyBzb21ldGhpbmcgd2Ugd291bGQgd2FudCB0byBzdXJmYWNlPyBJbml0aWFsCiAgICAgICAgLy8gdGhvdWdodCBpcyBuby4KICAgICAgICAvLyBpZiAocHJveHkucGFzc3dvcmQgIT0gbnVsbCkKICAgICAgICAvLyAgICdwYXNzd29yZCc6IHByb3h5LnBhc3N3b3JkLAogICAgICAgICdpc0RpcmVjdCc6IHByb3h5LmlzRGlyZWN0LAogICAgICB9CiAgICB9KTsKICAgIGZpbmFsIG1ldGhvZCA9ICJDT05ORUNUIjsKICAgIGZpbmFsIHVyaSA9IFVyaShob3N0OiBob3N0LCBwb3J0OiBwb3J0KTsKICAgIF9IdHRwQ2xpZW50Ll9zdGFydFJlcXVlc3RUaW1lbGluZUV2ZW50KHRpbWVsaW5lLCBtZXRob2QsIHVyaSk7CiAgICBfSHR0cENsaWVudFJlcXVlc3QgcmVxdWVzdCA9CiAgICAgICAgc2VuZChVcmkoaG9zdDogaG9zdCwgcG9ydDogcG9ydCksIHBvcnQsIG1ldGhvZCwgcHJveHksIHRpbWVsaW5lKTsKICAgIGlmIChwcm94eS5pc0F1dGhlbnRpY2F0ZWQpIHsKICAgICAgLy8gSWYgdGhlIHByb3h5IGNvbmZpZ3VyYXRpb24gY29udGFpbnMgdXNlciBpbmZvcm1hdGlvbiB1c2UgdGhhdAogICAgICAvLyBmb3IgcHJveHkgYmFzaWMgYXV0aG9yaXphdGlvbi4KICAgICAgU3RyaW5nIGF1dGggPSBfQ3J5cHRvVXRpbHMuYnl0ZXNUb0Jhc2U2NCgKICAgICAgICAgIHV0ZjguZW5jb2RlKCIke3Byb3h5LnVzZXJuYW1lfToke3Byb3h5LnBhc3N3b3JkfSIpKTsKICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChIdHRwSGVhZGVycy5wcm94eUF1dGhvcml6YXRpb25IZWFkZXIsICJCYXNpYyAkYXV0aCIpOwogICAgfQogICAgcmV0dXJuIHJlcXVlc3QuY2xvc2UoKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPSBIdHRwU3RhdHVzLm9rKSB7CiAgICAgICAgZmluYWwgZXJyb3IgPSAiUHJveHkgZmFpbGVkIHRvIGVzdGFibGlzaCB0dW5uZWwgIgogICAgICAgICAgICAiKCR7cmVzcG9uc2Uuc3RhdHVzQ29kZX0gJHtyZXNwb25zZS5yZWFzb25QaHJhc2V9KSI7CiAgICAgICAgdGltZWxpbmU/Lmluc3RhbnQoZXJyb3IpOwogICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKGVycm9yLCB1cmk6IHJlcXVlc3QudXJpKTsKICAgICAgfQogICAgICB2YXIgc29ja2V0ID0gKHJlc3BvbnNlIGFzIF9IdHRwQ2xpZW50UmVzcG9uc2UpCiAgICAgICAgICAuX2h0dHBSZXF1ZXN0CiAgICAgICAgICAuX2h0dHBDbGllbnRDb25uZWN0aW9uCiAgICAgICAgICAuX3NvY2tldDsKICAgICAgcmV0dXJuIFNlY3VyZVNvY2tldC5zZWN1cmUoc29ja2V0LAogICAgICAgICAgaG9zdDogaG9zdCwgY29udGV4dDogX2NvbnRleHQsIG9uQmFkQ2VydGlmaWNhdGU6IGNhbGxiYWNrKTsKICAgIH0pLnRoZW4oKHNlY3VyZVNvY2tldCkgewogICAgICBTdHJpbmcga2V5ID0gX0h0dHBDbGllbnRDb25uZWN0aW9uLm1ha2VLZXkodHJ1ZSwgaG9zdCwgcG9ydCk7CiAgICAgIHRpbWVsaW5lPy5pbnN0YW50KCdQcm94eSB0dW5uZWwgZXN0YWJsaXNoZWQnKTsKICAgICAgcmV0dXJuIG5ldyBfSHR0cENsaWVudENvbm5lY3Rpb24oCiAgICAgICAgICBrZXksIHNlY3VyZVNvY2tldCwgcmVxdWVzdC5faHR0cENsaWVudCwgdHJ1ZSk7CiAgICB9KTsKICB9CgogIEh0dHBDb25uZWN0aW9uSW5mbyBnZXQgY29ubmVjdGlvbkluZm8gPT4gX0h0dHBDb25uZWN0aW9uSW5mby5jcmVhdGUoX3NvY2tldCk7CgogIHN0YXRpYyBtYWtlS2V5KGJvb2wgaXNTZWN1cmUsIFN0cmluZyBob3N0LCBpbnQgcG9ydCkgewogICAgcmV0dXJuIGlzU2VjdXJlID8gInNzaDokaG9zdDokcG9ydCIgOiAiJGhvc3Q6JHBvcnQiOwogIH0KCiAgdm9pZCBzdG9wVGltZXIoKSB7CiAgICBpZiAoX2lkbGVUaW1lciAhPSBudWxsKSB7CiAgICAgIF9pZGxlVGltZXIuY2FuY2VsKCk7CiAgICAgIF9pZGxlVGltZXIgPSBudWxsOwogICAgfQogIH0KCiAgdm9pZCBzdGFydFRpbWVyKCkgewogICAgYXNzZXJ0KF9pZGxlVGltZXIgPT0gbnVsbCk7CiAgICBfaWRsZVRpbWVyID0gbmV3IFRpbWVyKF9odHRwQ2xpZW50LmlkbGVUaW1lb3V0LCAoKSB7CiAgICAgIF9pZGxlVGltZXIgPSBudWxsOwogICAgICBjbG9zZSgpOwogICAgfSk7CiAgfQp9CgpjbGFzcyBfQ29ubmVjdGlvbkluZm8gewogIGZpbmFsIF9IdHRwQ2xpZW50Q29ubmVjdGlvbiBjb25uZWN0aW9uOwogIGZpbmFsIF9Qcm94eSBwcm94eTsKCiAgX0Nvbm5lY3Rpb25JbmZvKHRoaXMuY29ubmVjdGlvbiwgdGhpcy5wcm94eSk7Cn0KCmNsYXNzIF9Db25uZWN0aW9uVGFyZ2V0IHsKICAvLyBVbmlxdWUga2V5IGZvciB0aGlzIGNvbm5lY3Rpb24gdGFyZ2V0LgogIGZpbmFsIFN0cmluZyBrZXk7CiAgZmluYWwgU3RyaW5nIGhvc3Q7CiAgZmluYWwgaW50IHBvcnQ7CiAgZmluYWwgYm9vbCBpc1NlY3VyZTsKICBmaW5hbCBTZWN1cml0eUNvbnRleHQgY29udGV4dDsKICBmaW5hbCBTZXQ8X0h0dHBDbGllbnRDb25uZWN0aW9uPiBfaWRsZSA9IG5ldyBIYXNoU2V0KCk7CiAgZmluYWwgU2V0PF9IdHRwQ2xpZW50Q29ubmVjdGlvbj4gX2FjdGl2ZSA9IG5ldyBIYXNoU2V0KCk7CiAgZmluYWwgU2V0PENvbm5lY3Rpb25UYXNrPiBfc29ja2V0VGFza3MgPSBuZXcgSGFzaFNldCgpOwogIGZpbmFsIFF1ZXVlIF9wZW5kaW5nID0gbmV3IExpc3RRdWV1ZSgpOwogIGludCBfY29ubmVjdGluZyA9IDA7CgogIF9Db25uZWN0aW9uVGFyZ2V0KAogICAgICB0aGlzLmtleSwgdGhpcy5ob3N0LCB0aGlzLnBvcnQsIHRoaXMuaXNTZWN1cmUsIHRoaXMuY29udGV4dCk7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2lkbGUuaXNFbXB0eSAmJiBfYWN0aXZlLmlzRW1wdHkgJiYgX2Nvbm5lY3RpbmcgPT0gMDsKCiAgYm9vbCBnZXQgaGFzSWRsZSA9PiBfaWRsZS5pc05vdEVtcHR5OwoKICBib29sIGdldCBoYXNBY3RpdmUgPT4gX2FjdGl2ZS5pc05vdEVtcHR5IHx8IF9jb25uZWN0aW5nID4gMDsKCiAgX0h0dHBDbGllbnRDb25uZWN0aW9uIHRha2VJZGxlKCkgewogICAgYXNzZXJ0KGhhc0lkbGUpOwogICAgX0h0dHBDbGllbnRDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBfaWRsZS5maXJzdDsKICAgIF9pZGxlLnJlbW92ZShjb25uZWN0aW9uKTsKICAgIGNvbm5lY3Rpb24uc3RvcFRpbWVyKCk7CiAgICBfYWN0aXZlLmFkZChjb25uZWN0aW9uKTsKICAgIHJldHVybiBjb25uZWN0aW9uOwogIH0KCiAgX2NoZWNrUGVuZGluZygpIHsKICAgIGlmIChfcGVuZGluZy5pc05vdEVtcHR5KSB7CiAgICAgIF9wZW5kaW5nLnJlbW92ZUZpcnN0KCkoKTsKICAgIH0KICB9CgogIHZvaWQgYWRkTmV3QWN0aXZlKF9IdHRwQ2xpZW50Q29ubmVjdGlvbiBjb25uZWN0aW9uKSB7CiAgICBfYWN0aXZlLmFkZChjb25uZWN0aW9uKTsKICB9CgogIHZvaWQgcmV0dXJuQ29ubmVjdGlvbihfSHR0cENsaWVudENvbm5lY3Rpb24gY29ubmVjdGlvbikgewogICAgYXNzZXJ0KF9hY3RpdmUuY29udGFpbnMoY29ubmVjdGlvbikpOwogICAgX2FjdGl2ZS5yZW1vdmUoY29ubmVjdGlvbik7CiAgICBfaWRsZS5hZGQoY29ubmVjdGlvbik7CiAgICBjb25uZWN0aW9uLnN0YXJ0VGltZXIoKTsKICAgIF9jaGVja1BlbmRpbmcoKTsKICB9CgogIHZvaWQgY29ubmVjdGlvbkNsb3NlZChfSHR0cENsaWVudENvbm5lY3Rpb24gY29ubmVjdGlvbikgewogICAgYXNzZXJ0KCFfYWN0aXZlLmNvbnRhaW5zKGNvbm5lY3Rpb24pIHx8ICFfaWRsZS5jb250YWlucyhjb25uZWN0aW9uKSk7CiAgICBfYWN0aXZlLnJlbW92ZShjb25uZWN0aW9uKTsKICAgIF9pZGxlLnJlbW92ZShjb25uZWN0aW9uKTsKICAgIF9jaGVja1BlbmRpbmcoKTsKICB9CgogIHZvaWQgY2xvc2UoYm9vbCBmb3JjZSkgewogICAgLy8gQWx3YXlzIGNhbmNlbCBwZW5kaW5nIHNvY2tldCBjb25uZWN0aW9ucy4KICAgIGZvciAodmFyIHQgaW4gX3NvY2tldFRhc2tzLnRvTGlzdCgpKSB7CiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgc29ja2V0IGlzIGRlc3Ryb3llZCBpZiB0aGUgQ29ubmVjdGlvblRhc2sgaXMgY2FuY2VsbGVkLgogICAgICB0LnNvY2tldC50aGVuKChzKSB7CiAgICAgICAgcy5kZXN0cm95KCk7CiAgICAgIH0sIG9uRXJyb3I6IChlKSB7fSk7CiAgICAgIHQuY2FuY2VsKCk7CiAgICB9CiAgICBpZiAoZm9yY2UpIHsKICAgICAgZm9yICh2YXIgYyBpbiBfaWRsZS50b0xpc3QoKSkgewogICAgICAgIGMuZGVzdHJveSgpOwogICAgICB9CiAgICAgIGZvciAodmFyIGMgaW4gX2FjdGl2ZS50b0xpc3QoKSkgewogICAgICAgIGMuZGVzdHJveSgpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBjIGluIF9pZGxlLnRvTGlzdCgpKSB7CiAgICAgICAgYy5jbG9zZSgpOwogICAgICB9CiAgICB9CiAgfQoKICBGdXR1cmU8X0Nvbm5lY3Rpb25JbmZvPiBjb25uZWN0KFN0cmluZyB1cmlIb3N0LCBpbnQgdXJpUG9ydCwgX1Byb3h5IHByb3h5LAogICAgICBfSHR0cENsaWVudCBjbGllbnQsIFRpbWVsaW5lVGFzayB0aW1lbGluZSkgewogICAgaWYgKGhhc0lkbGUpIHsKICAgICAgdmFyIGNvbm5lY3Rpb24gPSB0YWtlSWRsZSgpOwogICAgICBjbGllbnQuX2Nvbm5lY3Rpb25zQ2hhbmdlZCgpOwogICAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZShuZXcgX0Nvbm5lY3Rpb25JbmZvKGNvbm5lY3Rpb24sIHByb3h5KSk7CiAgICB9CiAgICBpZiAoY2xpZW50Lm1heENvbm5lY3Rpb25zUGVySG9zdCAhPSBudWxsICYmCiAgICAgICAgX2FjdGl2ZS5sZW5ndGggKyBfY29ubmVjdGluZyA+PSBjbGllbnQubWF4Q29ubmVjdGlvbnNQZXJIb3N0KSB7CiAgICAgIHZhciBjb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPF9Db25uZWN0aW9uSW5mbz4oKTsKICAgICAgX3BlbmRpbmcuYWRkKCgpIHsKICAgICAgICBjb21wbGV0ZXIuY29tcGxldGUoY29ubmVjdCh1cmlIb3N0LCB1cmlQb3J0LCBwcm94eSwgY2xpZW50LCB0aW1lbGluZSkpOwogICAgICB9KTsKICAgICAgcmV0dXJuIGNvbXBsZXRlci5mdXR1cmU7CiAgICB9CiAgICB2YXIgY3VycmVudEJhZENlcnRpZmljYXRlQ2FsbGJhY2sgPSBjbGllbnQuX2JhZENlcnRpZmljYXRlQ2FsbGJhY2s7CgogICAgYm9vbCBjYWxsYmFjayhYNTA5Q2VydGlmaWNhdGUgY2VydGlmaWNhdGUpIHsKICAgICAgaWYgKGN1cnJlbnRCYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIGN1cnJlbnRCYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrKGNlcnRpZmljYXRlLCB1cmlIb3N0LCB1cmlQb3J0KTsKICAgIH0KCiAgICBGdXR1cmU8Q29ubmVjdGlvblRhc2s+IGNvbm5lY3Rpb25UYXNrID0gKGlzU2VjdXJlICYmIHByb3h5LmlzRGlyZWN0CiAgICAgICAgPyBTZWN1cmVTb2NrZXQuc3RhcnRDb25uZWN0KGhvc3QsIHBvcnQsCiAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsIG9uQmFkQ2VydGlmaWNhdGU6IGNhbGxiYWNrKQogICAgICAgIDogU29ja2V0LnN0YXJ0Q29ubmVjdChob3N0LCBwb3J0KSk7CiAgICBfY29ubmVjdGluZysrOwogICAgcmV0dXJuIGNvbm5lY3Rpb25UYXNrLnRoZW4oKENvbm5lY3Rpb25UYXNrIHRhc2spIHsKICAgICAgX3NvY2tldFRhc2tzLmFkZCh0YXNrKTsKICAgICAgRnV0dXJlIHNvY2tldEZ1dHVyZSA9IHRhc2suc29ja2V0OwogICAgICBmaW5hbCBEdXJhdGlvbiBjb25uZWN0aW9uVGltZW91dCA9IGNsaWVudC5jb25uZWN0aW9uVGltZW91dDsKICAgICAgaWYgKGNvbm5lY3Rpb25UaW1lb3V0ICE9IG51bGwpIHsKICAgICAgICBzb2NrZXRGdXR1cmUgPSBzb2NrZXRGdXR1cmUudGltZW91dChjb25uZWN0aW9uVGltZW91dCwgb25UaW1lb3V0OiAoKSB7CiAgICAgICAgICBfc29ja2V0VGFza3MucmVtb3ZlKHRhc2spOwogICAgICAgICAgdGFzay5jYW5jZWwoKTsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiBzb2NrZXRGdXR1cmUudGhlbigoc29ja2V0KSB7CiAgICAgICAgLy8gV2hlbiB0aGVyZSBpcyBhIHRpbWVvdXQsIHRoZXJlIGlzIGEgcmFjZSBpbiB3aGljaCB0aGUgY29ubmVjdGlvblRhc2sKICAgICAgICAvLyBGdXR1cmUgd29uJ3QgYmUgY29tcGxldGVkIHdpdGggYW4gZXJyb3IgYmVmb3JlIHRoZSBzb2NrZXRGdXR1cmUgaGVyZQogICAgICAgIC8vIGlzIGNvbXBsZXRlZCB3aXRoICdudWxsJyBieSB0aGUgb25UaW1lb3V0IGNhbGxiYWNrIGFib3ZlLiBJbiB0aGlzCiAgICAgICAgLy8gY2FzZSwgcHJvcGFnYXRlIGEgU29ja2V0RXhjZXB0aW9uIGFzIHNwZWNpZmllZCBieSB0aGUKICAgICAgICAvLyBIdHRwQ2xpZW50LmNvbm5lY3Rpb25UaW1lb3V0IGRvY3MuCiAgICAgICAgaWYgKHNvY2tldCA9PSBudWxsKSB7CiAgICAgICAgICBhc3NlcnQoY29ubmVjdGlvblRpbWVvdXQgIT0gbnVsbCk7CiAgICAgICAgICB0aHJvdyBuZXcgU29ja2V0RXhjZXB0aW9uKAogICAgICAgICAgICAgICJIVFRQIGNvbm5lY3Rpb24gdGltZWQgb3V0IGFmdGVyICR7Y29ubmVjdGlvblRpbWVvdXR9LCAiCiAgICAgICAgICAgICAgImhvc3Q6ICR7aG9zdH0sIHBvcnQ6ICR7cG9ydH0iKTsKICAgICAgICB9CiAgICAgICAgX2Nvbm5lY3RpbmctLTsKICAgICAgICBzb2NrZXQuc2V0T3B0aW9uKFNvY2tldE9wdGlvbi50Y3BOb0RlbGF5LCB0cnVlKTsKICAgICAgICB2YXIgY29ubmVjdGlvbiA9CiAgICAgICAgICAgIG5ldyBfSHR0cENsaWVudENvbm5lY3Rpb24oa2V5LCBzb2NrZXQsIGNsaWVudCwgZmFsc2UsIGNvbnRleHQpOwogICAgICAgIGlmIChpc1NlY3VyZSAmJiAhcHJveHkuaXNEaXJlY3QpIHsKICAgICAgICAgIGNvbm5lY3Rpb24uX2Rpc3Bvc2UgPSB0cnVlOwogICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAuY3JlYXRlUHJveHlUdW5uZWwodXJpSG9zdCwgdXJpUG9ydCwgcHJveHksIGNhbGxiYWNrLCB0aW1lbGluZSkKICAgICAgICAgICAgICAudGhlbigodHVubmVsKSB7CiAgICAgICAgICAgIGNsaWVudAogICAgICAgICAgICAgICAgLl9nZXRDb25uZWN0aW9uVGFyZ2V0KHVyaUhvc3QsIHVyaVBvcnQsIHRydWUpCiAgICAgICAgICAgICAgICAuYWRkTmV3QWN0aXZlKHR1bm5lbCk7CiAgICAgICAgICAgIF9zb2NrZXRUYXNrcy5yZW1vdmUodGFzayk7CiAgICAgICAgICAgIHJldHVybiBuZXcgX0Nvbm5lY3Rpb25JbmZvKHR1bm5lbCwgcHJveHkpOwogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFkZE5ld0FjdGl2ZShjb25uZWN0aW9uKTsKICAgICAgICAgIF9zb2NrZXRUYXNrcy5yZW1vdmUodGFzayk7CiAgICAgICAgICByZXR1cm4gbmV3IF9Db25uZWN0aW9uSW5mbyhjb25uZWN0aW9uLCBwcm94eSk7CiAgICAgICAgfQogICAgICB9LCBvbkVycm9yOiAoZXJyb3IpIHsKICAgICAgICBfY29ubmVjdGluZy0tOwogICAgICAgIF9zb2NrZXRUYXNrcy5yZW1vdmUodGFzayk7CiAgICAgICAgX2NoZWNrUGVuZGluZygpOwogICAgICAgIHRocm93IGVycm9yOwogICAgICB9KTsKICAgIH0pOwogIH0KfQoKdHlwZWRlZiBib29sIEJhZENlcnRpZmljYXRlQ2FsbGJhY2soWDUwOUNlcnRpZmljYXRlIGNyLCBTdHJpbmcgaG9zdCwgaW50IHBvcnQpOwoKY2xhc3MgX0h0dHBDbGllbnQgaW1wbGVtZW50cyBIdHRwQ2xpZW50IHsKICBib29sIF9jbG9zaW5nID0gZmFsc2U7CiAgYm9vbCBfY2xvc2luZ0ZvcmNlZnVsbHkgPSBmYWxzZTsKICBmaW5hbCBNYXA8U3RyaW5nLCBfQ29ubmVjdGlvblRhcmdldD4gX2Nvbm5lY3Rpb25UYXJnZXRzID0KICAgICAgbmV3IEhhc2hNYXA8U3RyaW5nLCBfQ29ubmVjdGlvblRhcmdldD4oKTsKICBmaW5hbCBMaXN0PF9DcmVkZW50aWFscz4gX2NyZWRlbnRpYWxzID0gW107CiAgZmluYWwgTGlzdDxfUHJveHlDcmVkZW50aWFscz4gX3Byb3h5Q3JlZGVudGlhbHMgPSBbXTsKICBmaW5hbCBTZWN1cml0eUNvbnRleHQgX2NvbnRleHQ7CiAgRnVuY3Rpb24gX2F1dGhlbnRpY2F0ZTsKICBGdW5jdGlvbiBfYXV0aGVudGljYXRlUHJveHk7CiAgRnVuY3Rpb24gX2ZpbmRQcm94eSA9IEh0dHBDbGllbnQuZmluZFByb3h5RnJvbUVudmlyb25tZW50OwogIER1cmF0aW9uIF9pZGxlVGltZW91dCA9IGNvbnN0IER1cmF0aW9uKHNlY29uZHM6IDE1KTsKICBCYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrIF9iYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrOwoKICBEdXJhdGlvbiBnZXQgaWRsZVRpbWVvdXQgPT4gX2lkbGVUaW1lb3V0OwoKICBEdXJhdGlvbiBjb25uZWN0aW9uVGltZW91dDsKCiAgaW50IG1heENvbm5lY3Rpb25zUGVySG9zdDsKCiAgYm9vbCBhdXRvVW5jb21wcmVzcyA9IHRydWU7CgogIFN0cmluZyB1c2VyQWdlbnQgPSBfZ2V0SHR0cFZlcnNpb24oKTsKCiAgX0h0dHBDbGllbnQodGhpcy5fY29udGV4dCk7CgogIHZvaWQgc2V0IGlkbGVUaW1lb3V0KER1cmF0aW9uIHRpbWVvdXQpIHsKICAgIF9pZGxlVGltZW91dCA9IHRpbWVvdXQ7CiAgICBmb3IgKHZhciBjIGluIF9jb25uZWN0aW9uVGFyZ2V0cy52YWx1ZXMpIHsKICAgICAgZm9yICh2YXIgaWRsZSBpbiBjLl9pZGxlKSB7CiAgICAgICAgLy8gUmVzZXQgdGltZXIuIFRoaXMgaXMgZmluZSwgYXMgaXQncyBub3QgaGFwcGVuaW5nIG9mdGVuLgogICAgICAgIGlkbGUuc3RvcFRpbWVyKCk7CiAgICAgICAgaWRsZS5zdGFydFRpbWVyKCk7CiAgICAgIH0KICAgIH0KICB9CgogIHNldCBiYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrKAogICAgICBib29sIGNhbGxiYWNrKFg1MDlDZXJ0aWZpY2F0ZSBjZXJ0LCBTdHJpbmcgaG9zdCwgaW50IHBvcnQpKSB7CiAgICBfYmFkQ2VydGlmaWNhdGVDYWxsYmFjayA9IGNhbGxiYWNrOwogIH0KCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBvcGVuKAogICAgICBTdHJpbmcgbWV0aG9kLCBTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKSB7CiAgICBjb25zdCBpbnQgaGFzaE1hcmsgPSAweDIzOwogICAgY29uc3QgaW50IHF1ZXN0aW9uTWFyayA9IDB4M2Y7CiAgICBpbnQgZnJhZ21lbnRTdGFydCA9IHBhdGgubGVuZ3RoOwogICAgaW50IHF1ZXJ5U3RhcnQgPSBwYXRoLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIHZhciBjaGFyID0gcGF0aC5jb2RlVW5pdEF0KGkpOwogICAgICBpZiAoY2hhciA9PSBoYXNoTWFyaykgewogICAgICAgIGZyYWdtZW50U3RhcnQgPSBpOwogICAgICAgIHF1ZXJ5U3RhcnQgPSBpOwogICAgICB9IGVsc2UgaWYgKGNoYXIgPT0gcXVlc3Rpb25NYXJrKSB7CiAgICAgICAgcXVlcnlTdGFydCA9IGk7CiAgICAgIH0KICAgIH0KICAgIFN0cmluZyBxdWVyeSA9IG51bGw7CiAgICBpZiAocXVlcnlTdGFydCA8IGZyYWdtZW50U3RhcnQpIHsKICAgICAgcXVlcnkgPSBwYXRoLnN1YnN0cmluZyhxdWVyeVN0YXJ0ICsgMSwgZnJhZ21lbnRTdGFydCk7CiAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBxdWVyeVN0YXJ0KTsKICAgIH0KICAgIFVyaSB1cmkgPSBuZXcgVXJpKAogICAgICAgIHNjaGVtZTogImh0dHAiLCBob3N0OiBob3N0LCBwb3J0OiBwb3J0LCBwYXRoOiBwYXRoLCBxdWVyeTogcXVlcnkpOwogICAgcmV0dXJuIF9vcGVuVXJsKG1ldGhvZCwgdXJpKTsKICB9CgogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gb3BlblVybChTdHJpbmcgbWV0aG9kLCBVcmkgdXJsKSA9PgogICAgICBfb3BlblVybChtZXRob2QsIHVybCk7CgogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gZ2V0KFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHBhdGgpID0+CiAgICAgIG9wZW4oImdldCIsIGhvc3QsIHBvcnQsIHBhdGgpOwoKICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IGdldFVybChVcmkgdXJsKSA9PiBfb3BlblVybCgiZ2V0IiwgdXJsKTsKCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBwb3N0KFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHBhdGgpID0+CiAgICAgIG9wZW4oInBvc3QiLCBob3N0LCBwb3J0LCBwYXRoKTsKCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBwb3N0VXJsKFVyaSB1cmwpID0+IF9vcGVuVXJsKCJwb3N0IiwgdXJsKTsKCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBwdXQoU3RyaW5nIGhvc3QsIGludCBwb3J0LCBTdHJpbmcgcGF0aCkgPT4KICAgICAgb3BlbigicHV0IiwgaG9zdCwgcG9ydCwgcGF0aCk7CgogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gcHV0VXJsKFVyaSB1cmwpID0+IF9vcGVuVXJsKCJwdXQiLCB1cmwpOwoKICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IGRlbGV0ZShTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKSA9PgogICAgICBvcGVuKCJkZWxldGUiLCBob3N0LCBwb3J0LCBwYXRoKTsKCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBkZWxldGVVcmwoVXJpIHVybCkgPT4gX29wZW5VcmwoImRlbGV0ZSIsIHVybCk7CgogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gaGVhZChTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKSA9PgogICAgICBvcGVuKCJoZWFkIiwgaG9zdCwgcG9ydCwgcGF0aCk7CgogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gaGVhZFVybChVcmkgdXJsKSA9PiBfb3BlblVybCgiaGVhZCIsIHVybCk7CgogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gcGF0Y2goU3RyaW5nIGhvc3QsIGludCBwb3J0LCBTdHJpbmcgcGF0aCkgPT4KICAgICAgb3BlbigicGF0Y2giLCBob3N0LCBwb3J0LCBwYXRoKTsKCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBwYXRjaFVybChVcmkgdXJsKSA9PiBfb3BlblVybCgicGF0Y2giLCB1cmwpOwoKICB2b2lkIGNsb3NlKHtib29sIGZvcmNlOiBmYWxzZX0pIHsKICAgIF9jbG9zaW5nID0gdHJ1ZTsKICAgIF9jbG9zaW5nRm9yY2VmdWxseSA9IGZvcmNlOwogICAgX2Nsb3NlQ29ubmVjdGlvbnMoX2Nsb3NpbmdGb3JjZWZ1bGx5KTsKICAgIGFzc2VydCghX2Nvbm5lY3Rpb25UYXJnZXRzLnZhbHVlcy5hbnkoKHMpID0+IHMuaGFzSWRsZSkpOwogICAgYXNzZXJ0KAogICAgICAgICFmb3JjZSB8fCAhX2Nvbm5lY3Rpb25UYXJnZXRzLnZhbHVlcy5hbnkoKHMpID0+IHMuX2FjdGl2ZS5pc05vdEVtcHR5KSk7CiAgfQoKICBzZXQgYXV0aGVudGljYXRlKEZ1dHVyZTxib29sPiBmKFVyaSB1cmwsIFN0cmluZyBzY2hlbWUsIFN0cmluZyByZWFsbSkpIHsKICAgIF9hdXRoZW50aWNhdGUgPSBmOwogIH0KCiAgdm9pZCBhZGRDcmVkZW50aWFscyhVcmkgdXJsLCBTdHJpbmcgcmVhbG0sIEh0dHBDbGllbnRDcmVkZW50aWFscyBjcikgewogICAgX2NyZWRlbnRpYWxzLmFkZChuZXcgX1NpdGVDcmVkZW50aWFscyh1cmwsIHJlYWxtLCBjcikpOwogIH0KCiAgc2V0IGF1dGhlbnRpY2F0ZVByb3h5KAogICAgICBGdXR1cmU8Ym9vbD4gZihTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBzY2hlbWUsIFN0cmluZyByZWFsbSkpIHsKICAgIF9hdXRoZW50aWNhdGVQcm94eSA9IGY7CiAgfQoKICB2b2lkIGFkZFByb3h5Q3JlZGVudGlhbHMoCiAgICAgIFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHJlYWxtLCBIdHRwQ2xpZW50Q3JlZGVudGlhbHMgY3IpIHsKICAgIF9wcm94eUNyZWRlbnRpYWxzLmFkZChuZXcgX1Byb3h5Q3JlZGVudGlhbHMoaG9zdCwgcG9ydCwgcmVhbG0sIGNyKSk7CiAgfQoKICBzZXQgZmluZFByb3h5KFN0cmluZyBmKFVyaSB1cmkpKSA9PiBfZmluZFByb3h5ID0gZjsKCiAgc3RhdGljIHZvaWQgX3N0YXJ0UmVxdWVzdFRpbWVsaW5lRXZlbnQoCiAgICAgIFRpbWVsaW5lVGFzayB0aW1lbGluZSwgU3RyaW5nIG1ldGhvZCwgVXJpIHVyaSkgewogICAgdGltZWxpbmU/LnN0YXJ0KCdIVFRQIENMSUVOVCAke21ldGhvZC50b1VwcGVyQ2FzZSgpfScsIGFyZ3VtZW50czogewogICAgICAnZmlsdGVyS2V5JzoKICAgICAgICAgICdIVFRQL2NsaWVudCcsIC8vIGtleSB1c2VkIHRvIGZpbHRlciBuZXR3b3JrIHJlcXVlc3RzIGZyb20gdGltZWxpbmUKICAgICAgJ21ldGhvZCc6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLAogICAgICAndXJpJzogdXJpLnRvU3RyaW5nKCksCiAgICB9KTsKICB9CgogIEZ1dHVyZTxfSHR0cENsaWVudFJlcXVlc3Q+IF9vcGVuVXJsKFN0cmluZyBtZXRob2QsIFVyaSB1cmkpIHsKICAgIGlmIChfY2xvc2luZykgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiQ2xpZW50IGlzIGNsb3NlZCIpOwogICAgfQoKICAgIC8vIElnbm9yZSBhbnkgZnJhZ21lbnRzIG9uIHRoZSByZXF1ZXN0IFVSSS4KICAgIHVyaSA9IHVyaS5yZW1vdmVGcmFnbWVudCgpOwoKICAgIGlmIChtZXRob2QgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihtZXRob2QpOwogICAgfQogICAgaWYgKG1ldGhvZCAhPSAiQ09OTkVDVCIpIHsKICAgICAgaWYgKHVyaS5ob3N0LmlzRW1wdHkpIHsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiTm8gaG9zdCBzcGVjaWZpZWQgaW4gVVJJICR1cmkiKTsKICAgICAgfSBlbHNlIGlmICh1cmkuc2NoZW1lICE9ICJodHRwIiAmJiB1cmkuc2NoZW1lICE9ICJodHRwcyIpIHsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigKICAgICAgICAgICAgIlVuc3VwcG9ydGVkIHNjaGVtZSAnJHt1cmkuc2NoZW1lfScgaW4gVVJJICR1cmkiKTsKICAgICAgfQogICAgfQoKICAgIGJvb2wgaXNTZWN1cmUgPSAodXJpLnNjaGVtZSA9PSAiaHR0cHMiKTsKICAgIGludCBwb3J0ID0gdXJpLnBvcnQ7CiAgICBpZiAocG9ydCA9PSAwKSB7CiAgICAgIHBvcnQgPQogICAgICAgICAgaXNTZWN1cmUgPyBIdHRwQ2xpZW50LmRlZmF1bHRIdHRwc1BvcnQgOiBIdHRwQ2xpZW50LmRlZmF1bHRIdHRwUG9ydDsKICAgIH0KICAgIC8vIENoZWNrIHRvIHNlZSBpZiBhIHByb3h5IHNlcnZlciBzaG91bGQgYmUgdXNlZCBmb3IgdGhpcyBjb25uZWN0aW9uLgogICAgdmFyIHByb3h5Q29uZiA9IGNvbnN0IF9Qcm94eUNvbmZpZ3VyYXRpb24uZGlyZWN0KCk7CiAgICBpZiAoX2ZpbmRQcm94eSAhPSBudWxsKSB7CiAgICAgIC8vIFRPRE8oc2dqZXNzZSk6IEtlZXAgYSBtYXAgb2YgdGhlc2UgYXMgbm9ybWFsbHkgb25seSBhIGZldwogICAgICAvLyBjb25maWd1cmF0aW9uIHN0cmluZ3Mgd2lsbCBiZSB1c2VkLgogICAgICB0cnkgewogICAgICAgIHByb3h5Q29uZiA9IG5ldyBfUHJveHlDb25maWd1cmF0aW9uKF9maW5kUHJveHkodXJpKSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yLCBzdGFja1RyYWNlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBGdXR1cmUuZXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICB9CiAgICB9CiAgICBUaW1lbGluZVRhc2sgdGltZWxpbmU7CiAgICAvLyBUT0RPKGJrb255aSk6IGRvIHdlIHdhbnQgdGhpcyB0byBiZSBvcHQtaW4/CiAgICBpZiAoSHR0cENsaWVudC5lbmFibGVUaW1lbGluZUxvZ2dpbmcpIHsKICAgICAgdGltZWxpbmUgPSBUaW1lbGluZVRhc2soKTsKICAgICAgX3N0YXJ0UmVxdWVzdFRpbWVsaW5lRXZlbnQodGltZWxpbmUsIG1ldGhvZCwgdXJpKTsKICAgIH0KICAgIHJldHVybiBfZ2V0Q29ubmVjdGlvbih1cmkuaG9zdCwgcG9ydCwgcHJveHlDb25mLCBpc1NlY3VyZSwgdGltZWxpbmUpLnRoZW4oCiAgICAgICAgKF9Db25uZWN0aW9uSW5mbyBpbmZvKSB7CiAgICAgIF9IdHRwQ2xpZW50UmVxdWVzdCBzZW5kKF9Db25uZWN0aW9uSW5mbyBpbmZvKSB7CiAgICAgICAgdGltZWxpbmU/Lmluc3RhbnQoJ0Nvbm5lY3Rpb24gZXN0YWJsaXNoZWQnKTsKICAgICAgICByZXR1cm4gaW5mby5jb25uZWN0aW9uCiAgICAgICAgICAgIC5zZW5kKHVyaSwgcG9ydCwgbWV0aG9kLnRvVXBwZXJDYXNlKCksIGluZm8ucHJveHksIHRpbWVsaW5lKTsKICAgICAgfQoKICAgICAgLy8gSWYgdGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCBiZWZvcmUgdGhlIHJlcXVlc3Qgd2FzIHNlbnQsIGNyZWF0ZQogICAgICAvLyBhbmQgdXNlIGFub3RoZXIgY29ubmVjdGlvbi4KICAgICAgaWYgKGluZm8uY29ubmVjdGlvbi5jbG9zZWQpIHsKICAgICAgICByZXR1cm4gX2dldENvbm5lY3Rpb24odXJpLmhvc3QsIHBvcnQsIHByb3h5Q29uZiwgaXNTZWN1cmUsIHRpbWVsaW5lKQogICAgICAgICAgICAudGhlbihzZW5kKTsKICAgICAgfQogICAgICByZXR1cm4gc2VuZChpbmZvKTsKICAgIH0sIG9uRXJyb3I6IChlcnJvcikgewogICAgICB0aW1lbGluZT8uZmluaXNoKGFyZ3VtZW50czogewogICAgICAgICdlcnJvcic6IGVycm9yLnRvU3RyaW5nKCksCiAgICAgIH0pOwogICAgICB0aHJvdyBlcnJvcjsKICAgIH0pOwogIH0KCiAgRnV0dXJlPF9IdHRwQ2xpZW50UmVxdWVzdD4gX29wZW5VcmxGcm9tUmVxdWVzdCgKICAgICAgU3RyaW5nIG1ldGhvZCwgVXJpIHVyaSwgX0h0dHBDbGllbnRSZXF1ZXN0IHByZXZpb3VzKSB7CiAgICAvLyBJZiB0aGUgbmV3IFVSSSBpcyByZWxhdGl2ZSAodG8gZWl0aGVyICcvJyBvciBzb21lIHN1Yi1wYXRoKSwKICAgIC8vIGNvbnN0cnVjdCBhIGZ1bGwgVVJJIGZyb20gdGhlIHByZXZpb3VzIG9uZS4KICAgIFVyaSByZXNvbHZlZCA9IHByZXZpb3VzLnVyaS5yZXNvbHZlVXJpKHVyaSk7CiAgICByZXR1cm4gX29wZW5VcmwobWV0aG9kLCByZXNvbHZlZCkudGhlbigoX0h0dHBDbGllbnRSZXF1ZXN0IHJlcXVlc3QpIHsKICAgICAgcmVxdWVzdAogICAgICAgIC8vIE9ubHkgZm9sbG93IHJlZGlyZWN0cyBpZiBpbml0aWFsIHJlcXVlc3QgZGlkLgogICAgICAgIC4uZm9sbG93UmVkaXJlY3RzID0gcHJldmlvdXMuZm9sbG93UmVkaXJlY3RzCiAgICAgICAgLy8gQWxsb3cgc2FtZSBudW1iZXIgb2YgcmVkaXJlY3RzLgogICAgICAgIC4ubWF4UmVkaXJlY3RzID0gcHJldmlvdXMubWF4UmVkaXJlY3RzOwogICAgICAvLyBDb3B5IGhlYWRlcnMuCiAgICAgIGZvciAodmFyIGhlYWRlciBpbiBwcmV2aW91cy5oZWFkZXJzLl9oZWFkZXJzLmtleXMpIHsKICAgICAgICBpZiAocmVxdWVzdC5oZWFkZXJzW2hlYWRlcl0gPT0gbnVsbCkgewogICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChoZWFkZXIsIHByZXZpb3VzLmhlYWRlcnNbaGVhZGVyXSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXF1ZXN0CiAgICAgICAgLi5oZWFkZXJzLmNodW5rZWRUcmFuc2ZlckVuY29kaW5nID0gZmFsc2UKICAgICAgICAuLmNvbnRlbnRMZW5ndGggPSAwOwogICAgfSk7CiAgfQoKICAvLyBSZXR1cm4gYSBsaXZlIGNvbm5lY3Rpb24gdG8gdGhlIGlkbGUgcG9vbC4KICB2b2lkIF9yZXR1cm5Db25uZWN0aW9uKF9IdHRwQ2xpZW50Q29ubmVjdGlvbiBjb25uZWN0aW9uKSB7CiAgICBfY29ubmVjdGlvblRhcmdldHNbY29ubmVjdGlvbi5rZXldLnJldHVybkNvbm5lY3Rpb24oY29ubmVjdGlvbik7CiAgICBfY29ubmVjdGlvbnNDaGFuZ2VkKCk7CiAgfQoKICAvLyBSZW1vdmUgYSBjbG9zZWQgY29ubmVjdGlvbiBmcm9tIHRoZSBhY3RpdmUgc2V0LgogIHZvaWQgX2Nvbm5lY3Rpb25DbG9zZWQoX0h0dHBDbGllbnRDb25uZWN0aW9uIGNvbm5lY3Rpb24pIHsKICAgIGNvbm5lY3Rpb24uc3RvcFRpbWVyKCk7CiAgICB2YXIgY29ubmVjdGlvblRhcmdldCA9IF9jb25uZWN0aW9uVGFyZ2V0c1tjb25uZWN0aW9uLmtleV07CiAgICBpZiAoY29ubmVjdGlvblRhcmdldCAhPSBudWxsKSB7CiAgICAgIGNvbm5lY3Rpb25UYXJnZXQuY29ubmVjdGlvbkNsb3NlZChjb25uZWN0aW9uKTsKICAgICAgaWYgKGNvbm5lY3Rpb25UYXJnZXQuaXNFbXB0eSkgewogICAgICAgIF9jb25uZWN0aW9uVGFyZ2V0cy5yZW1vdmUoY29ubmVjdGlvbi5rZXkpOwogICAgICB9CiAgICAgIF9jb25uZWN0aW9uc0NoYW5nZWQoKTsKICAgIH0KICB9CgogIHZvaWQgX2Nvbm5lY3Rpb25zQ2hhbmdlZCgpIHsKICAgIGlmIChfY2xvc2luZykgewogICAgICBfY2xvc2VDb25uZWN0aW9ucyhfY2xvc2luZ0ZvcmNlZnVsbHkpOwogICAgfQogIH0KCiAgdm9pZCBfY2xvc2VDb25uZWN0aW9ucyhib29sIGZvcmNlKSB7CiAgICBmb3IgKHZhciBjb25uZWN0aW9uVGFyZ2V0IGluIF9jb25uZWN0aW9uVGFyZ2V0cy52YWx1ZXMudG9MaXN0KCkpIHsKICAgICAgY29ubmVjdGlvblRhcmdldC5jbG9zZShmb3JjZSk7CiAgICB9CiAgfQoKICBfQ29ubmVjdGlvblRhcmdldCBfZ2V0Q29ubmVjdGlvblRhcmdldChTdHJpbmcgaG9zdCwgaW50IHBvcnQsIGJvb2wgaXNTZWN1cmUpIHsKICAgIFN0cmluZyBrZXkgPSBfSHR0cENsaWVudENvbm5lY3Rpb24ubWFrZUtleShpc1NlY3VyZSwgaG9zdCwgcG9ydCk7CiAgICByZXR1cm4gX2Nvbm5lY3Rpb25UYXJnZXRzLnB1dElmQWJzZW50KGtleSwgKCkgewogICAgICByZXR1cm4gbmV3IF9Db25uZWN0aW9uVGFyZ2V0KGtleSwgaG9zdCwgcG9ydCwgaXNTZWN1cmUsIF9jb250ZXh0KTsKICAgIH0pOwogIH0KCiAgLy8gR2V0IGEgbmV3IF9IdHRwQ2xpZW50Q29ubmVjdGlvbiwgZnJvbSB0aGUgbWF0Y2hpbmcgX0Nvbm5lY3Rpb25UYXJnZXQuCiAgRnV0dXJlPF9Db25uZWN0aW9uSW5mbz4gX2dldENvbm5lY3Rpb24oU3RyaW5nIHVyaUhvc3QsIGludCB1cmlQb3J0LAogICAgICBfUHJveHlDb25maWd1cmF0aW9uIHByb3h5Q29uZiwgYm9vbCBpc1NlY3VyZSwgVGltZWxpbmVUYXNrIHRpbWVsaW5lKSB7CiAgICBJdGVyYXRvcjxfUHJveHk+IHByb3hpZXMgPSBwcm94eUNvbmYucHJveGllcy5pdGVyYXRvcjsKCiAgICBGdXR1cmU8X0Nvbm5lY3Rpb25JbmZvPiBjb25uZWN0KGVycm9yKSB7CiAgICAgIGlmICghcHJveGllcy5tb3ZlTmV4dCgpKSByZXR1cm4gbmV3IEZ1dHVyZS5lcnJvcihlcnJvcik7CiAgICAgIF9Qcm94eSBwcm94eSA9IHByb3hpZXMuY3VycmVudDsKICAgICAgU3RyaW5nIGhvc3QgPSBwcm94eS5pc0RpcmVjdCA/IHVyaUhvc3QgOiBwcm94eS5ob3N0OwogICAgICBpbnQgcG9ydCA9IHByb3h5LmlzRGlyZWN0ID8gdXJpUG9ydCA6IHByb3h5LnBvcnQ7CiAgICAgIHJldHVybiBfZ2V0Q29ubmVjdGlvblRhcmdldChob3N0LCBwb3J0LCBpc1NlY3VyZSkKICAgICAgICAgIC5jb25uZWN0KHVyaUhvc3QsIHVyaVBvcnQsIHByb3h5LCB0aGlzLCB0aW1lbGluZSkKICAgICAgICAgIC8vIE9uIGVycm9yLCBjb250aW51ZSB3aXRoIG5leHQgcHJveHkuCiAgICAgICAgICAuY2F0Y2hFcnJvcihjb25uZWN0KTsKICAgIH0KCiAgICByZXR1cm4gY29ubmVjdChuZXcgSHR0cEV4Y2VwdGlvbigiTm8gcHJveGllcyBnaXZlbiIpKTsKICB9CgogIF9TaXRlQ3JlZGVudGlhbHMgX2ZpbmRDcmVkZW50aWFscyhVcmkgdXJsLCBbX0F1dGhlbnRpY2F0aW9uU2NoZW1lIHNjaGVtZV0pIHsKICAgIC8vIExvb2sgZm9yIGNyZWRlbnRpYWxzLgogICAgX1NpdGVDcmVkZW50aWFscyBjciA9CiAgICAgICAgX2NyZWRlbnRpYWxzLmZvbGQobnVsbCwgKF9TaXRlQ3JlZGVudGlhbHMgcHJldiwgdmFsdWUpIHsKICAgICAgdmFyIHNpdGVDcmVkZW50aWFscyA9IHZhbHVlIGFzIF9TaXRlQ3JlZGVudGlhbHM7CiAgICAgIGlmIChzaXRlQ3JlZGVudGlhbHMuYXBwbGllcyh1cmwsIHNjaGVtZSkpIHsKICAgICAgICBpZiAocHJldiA9PSBudWxsKSByZXR1cm4gdmFsdWU7CiAgICAgICAgcmV0dXJuIHNpdGVDcmVkZW50aWFscy51cmkucGF0aC5sZW5ndGggPiBwcmV2LnVyaS5wYXRoLmxlbmd0aAogICAgICAgICAgICA/IHNpdGVDcmVkZW50aWFscwogICAgICAgICAgICA6IHByZXY7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHByZXY7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIGNyOwogIH0KCiAgX1Byb3h5Q3JlZGVudGlhbHMgX2ZpbmRQcm94eUNyZWRlbnRpYWxzKF9Qcm94eSBwcm94eSwKICAgICAgW19BdXRoZW50aWNhdGlvblNjaGVtZSBzY2hlbWVdKSB7CiAgICAvLyBMb29rIGZvciBjcmVkZW50aWFscy4KICAgIHZhciBpdCA9IF9wcm94eUNyZWRlbnRpYWxzLml0ZXJhdG9yOwogICAgd2hpbGUgKGl0Lm1vdmVOZXh0KCkpIHsKICAgICAgaWYgKGl0LmN1cnJlbnQuYXBwbGllcyhwcm94eSwgc2NoZW1lKSkgewogICAgICAgIHJldHVybiBpdC5jdXJyZW50OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgX3JlbW92ZUNyZWRlbnRpYWxzKF9DcmVkZW50aWFscyBjcikgewogICAgaW50IGluZGV4ID0gX2NyZWRlbnRpYWxzLmluZGV4T2YoY3IpOwogICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgIF9jcmVkZW50aWFscy5yZW1vdmVBdChpbmRleCk7CiAgICB9CiAgfQoKICB2b2lkIF9yZW1vdmVQcm94eUNyZWRlbnRpYWxzKF9DcmVkZW50aWFscyBjcikgewogICAgaW50IGluZGV4ID0gX3Byb3h5Q3JlZGVudGlhbHMuaW5kZXhPZihjcik7CiAgICBpZiAoaW5kZXggIT0gLTEpIHsKICAgICAgX3Byb3h5Q3JlZGVudGlhbHMucmVtb3ZlQXQoaW5kZXgpOwogICAgfQogIH0KCiAgc3RhdGljIFN0cmluZyBfZmluZFByb3h5RnJvbUVudmlyb25tZW50KAogICAgICBVcmkgdXJsLCBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50KSB7CiAgICBjaGVja05vUHJveHkoU3RyaW5nIG9wdGlvbikgewogICAgICBpZiAob3B0aW9uID09IG51bGwpIHJldHVybiBudWxsOwogICAgICBJdGVyYXRvcjxTdHJpbmc+IG5hbWVzID0gb3B0aW9uLnNwbGl0KCIsIikubWFwKChzKSA9PiBzLnRyaW0oKSkuaXRlcmF0b3I7CiAgICAgIHdoaWxlIChuYW1lcy5tb3ZlTmV4dCgpKSB7CiAgICAgICAgdmFyIG5hbWUgPSBuYW1lcy5jdXJyZW50OwogICAgICAgIGlmICgobmFtZS5zdGFydHNXaXRoKCJbIikgJiYKICAgICAgICAgICAgICAgIG5hbWUuZW5kc1dpdGgoIl0iKSAmJgogICAgICAgICAgICAgICAgIlske3VybC5ob3N0fV0iID09IG5hbWUpIHx8CiAgICAgICAgICAgIChuYW1lLmlzTm90RW1wdHkgJiYgdXJsLmhvc3QuZW5kc1dpdGgobmFtZSkpKSB7CiAgICAgICAgICByZXR1cm4gIkRJUkVDVCI7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGNoZWNrUHJveHkoU3RyaW5nIG9wdGlvbikgewogICAgICBpZiAob3B0aW9uID09IG51bGwpIHJldHVybiBudWxsOwogICAgICBvcHRpb24gPSBvcHRpb24udHJpbSgpOwogICAgICBpZiAob3B0aW9uLmlzRW1wdHkpIHJldHVybiBudWxsOwogICAgICBpbnQgcG9zID0gb3B0aW9uLmluZGV4T2YoIjovLyIpOwogICAgICBpZiAocG9zID49IDApIHsKICAgICAgICBvcHRpb24gPSBvcHRpb24uc3Vic3RyaW5nKHBvcyArIDMpOwogICAgICB9CiAgICAgIHBvcyA9IG9wdGlvbi5pbmRleE9mKCIvIik7CiAgICAgIGlmIChwb3MgPj0gMCkgewogICAgICAgIG9wdGlvbiA9IG9wdGlvbi5zdWJzdHJpbmcoMCwgcG9zKTsKICAgICAgfQogICAgICAvLyBBZGQgZGVmYXVsdCBwb3J0IGlmIG5vIHBvcnQgY29uZmlndXJlZC4KICAgICAgaWYgKG9wdGlvbi5pbmRleE9mKCJbIikgPT0gMCkgewogICAgICAgIHZhciBwb3MgPSBvcHRpb24ubGFzdEluZGV4T2YoIjoiKTsKICAgICAgICBpZiAob3B0aW9uLmluZGV4T2YoIl0iKSA+IHBvcykgb3B0aW9uID0gIiRvcHRpb246MTA4MCI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKG9wdGlvbi5pbmRleE9mKCI6IikgPT0gLTEpIG9wdGlvbiA9ICIkb3B0aW9uOjEwODAiOwogICAgICB9CiAgICAgIHJldHVybiAiUFJPWFkgJG9wdGlvbiI7CiAgICB9CgogICAgLy8gRGVmYXVsdCB0byB1c2luZyB0aGUgcHJvY2VzcyBjdXJyZW50IGVudmlyb25tZW50LgogICAgaWYgKGVudmlyb25tZW50ID09IG51bGwpIGVudmlyb25tZW50ID0gX3BsYXRmb3JtRW52aXJvbm1lbnRDYWNoZTsKCiAgICBTdHJpbmcgcHJveHlDZmc7CgogICAgU3RyaW5nIG5vUHJveHkgPSBlbnZpcm9ubWVudFsibm9fcHJveHkiXTsKICAgIGlmIChub1Byb3h5ID09IG51bGwpIG5vUHJveHkgPSBlbnZpcm9ubWVudFsiTk9fUFJPWFkiXTsKICAgIGlmICgocHJveHlDZmcgPSBjaGVja05vUHJveHkobm9Qcm94eSkpICE9IG51bGwpIHsKICAgICAgcmV0dXJuIHByb3h5Q2ZnOwogICAgfQoKICAgIGlmICh1cmwuc2NoZW1lID09ICJodHRwIikgewogICAgICBTdHJpbmcgcHJveHkgPSBlbnZpcm9ubWVudFsiaHR0cF9wcm94eSJdOwogICAgICBpZiAocHJveHkgPT0gbnVsbCkgcHJveHkgPSBlbnZpcm9ubWVudFsiSFRUUF9QUk9YWSJdOwogICAgICBpZiAoKHByb3h5Q2ZnID0gY2hlY2tQcm94eShwcm94eSkpICE9IG51bGwpIHsKICAgICAgICByZXR1cm4gcHJveHlDZmc7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodXJsLnNjaGVtZSA9PSAiaHR0cHMiKSB7CiAgICAgIFN0cmluZyBwcm94eSA9IGVudmlyb25tZW50WyJodHRwc19wcm94eSJdOwogICAgICBpZiAocHJveHkgPT0gbnVsbCkgcHJveHkgPSBlbnZpcm9ubWVudFsiSFRUUFNfUFJPWFkiXTsKICAgICAgaWYgKChwcm94eUNmZyA9IGNoZWNrUHJveHkocHJveHkpKSAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHByb3h5Q2ZnOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gIkRJUkVDVCI7CiAgfQoKICBzdGF0aWMgTWFwPFN0cmluZywgU3RyaW5nPiBfcGxhdGZvcm1FbnZpcm9ubWVudENhY2hlID0gUGxhdGZvcm0uZW52aXJvbm1lbnQ7Cn0KCmNsYXNzIF9IdHRwQ29ubmVjdGlvbiBleHRlbmRzIExpbmtlZExpc3RFbnRyeTxfSHR0cENvbm5lY3Rpb24+CiAgICB3aXRoIF9TZXJ2aWNlT2JqZWN0IHsKICBzdGF0aWMgY29uc3QgX0FDVElWRSA9IDA7CiAgc3RhdGljIGNvbnN0IF9JRExFID0gMTsKICBzdGF0aWMgY29uc3QgX0NMT1NJTkcgPSAyOwogIHN0YXRpYyBjb25zdCBfREVUQUNIRUQgPSAzOwoKICAvLyBVc2UgSGFzaE1hcCwgYXMgd2UgZG9uJ3QgbmVlZCB0byBrZWVwIG9yZGVyLgogIHN0YXRpYyBNYXA8aW50LCBfSHR0cENvbm5lY3Rpb24+IF9jb25uZWN0aW9ucyA9CiAgICAgIG5ldyBIYXNoTWFwPGludCwgX0h0dHBDb25uZWN0aW9uPigpOwoKICBmaW5hbCAvKl9TZXJ2ZXJTb2NrZXQqLyBfc29ja2V0OwogIGZpbmFsIF9IdHRwU2VydmVyIF9odHRwU2VydmVyOwogIGZpbmFsIF9IdHRwUGFyc2VyIF9odHRwUGFyc2VyOwogIGludCBfc3RhdGUgPSBfSURMRTsKICBTdHJlYW1TdWJzY3JpcHRpb24gX3N1YnNjcmlwdGlvbjsKICBib29sIF9pZGxlTWFyayA9IGZhbHNlOwogIEZ1dHVyZSBfc3RyZWFtRnV0dXJlOwoKICBfSHR0cENvbm5lY3Rpb24odGhpcy5fc29ja2V0LCB0aGlzLl9odHRwU2VydmVyKQogICAgICA6IF9odHRwUGFyc2VyID0gbmV3IF9IdHRwUGFyc2VyLnJlcXVlc3RQYXJzZXIoKSB7CiAgICBfY29ubmVjdGlvbnNbX3NlcnZpY2VJZF0gPSB0aGlzOwogICAgX2h0dHBQYXJzZXIubGlzdGVuVG9TdHJlYW0oX3NvY2tldCk7CiAgICBfc3Vic2NyaXB0aW9uID0gX2h0dHBQYXJzZXIubGlzdGVuKChpbmNvbWluZykgewogICAgICBfaHR0cFNlcnZlci5fbWFya0FjdGl2ZSh0aGlzKTsKICAgICAgLy8gSWYgdGhlIGluY29taW5nIHdhcyBjbG9zZWQsIGNsb3NlIHRoZSBjb25uZWN0aW9uLgogICAgICBpbmNvbWluZy5kYXRhRG9uZS50aGVuKChjbG9zaW5nKSB7CiAgICAgICAgaWYgKGNsb3NpbmcpIGRlc3Ryb3koKTsKICAgICAgfSk7CiAgICAgIC8vIE9ubHkgaGFuZGxlIG9uZSBpbmNvbWluZyByZXF1ZXN0IGF0IHRoZSB0aW1lLiBLZWVwIHRoZQogICAgICAvLyBzdHJlYW0gcGF1c2VkIHVudGlsIHRoZSByZXF1ZXN0IGhhcyBiZWVuIHNlbmQuCiAgICAgIF9zdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgICAgX3N0YXRlID0gX0FDVElWRTsKICAgICAgdmFyIG91dGdvaW5nID0gbmV3IF9IdHRwT3V0Z29pbmcoX3NvY2tldCk7CiAgICAgIHZhciByZXNwb25zZSA9IG5ldyBfSHR0cFJlc3BvbnNlKAogICAgICAgICAgaW5jb21pbmcudXJpLAogICAgICAgICAgaW5jb21pbmcuaGVhZGVycy5wcm90b2NvbFZlcnNpb24sCiAgICAgICAgICBvdXRnb2luZywKICAgICAgICAgIF9odHRwU2VydmVyLmRlZmF1bHRSZXNwb25zZUhlYWRlcnMsCiAgICAgICAgICBfaHR0cFNlcnZlci5zZXJ2ZXJIZWFkZXIpOwogICAgICB2YXIgcmVxdWVzdCA9IG5ldyBfSHR0cFJlcXVlc3QocmVzcG9uc2UsIGluY29taW5nLCBfaHR0cFNlcnZlciwgdGhpcyk7CiAgICAgIF9zdHJlYW1GdXR1cmUgPSBvdXRnb2luZy5kb25lLnRoZW4oKF8pIHsKICAgICAgICByZXNwb25zZS5kZWFkbGluZSA9IG51bGw7CiAgICAgICAgaWYgKF9zdGF0ZSA9PSBfREVUQUNIRUQpIHJldHVybjsKICAgICAgICBpZiAocmVzcG9uc2UucGVyc2lzdGVudENvbm5lY3Rpb24gJiYKICAgICAgICAgICAgcmVxdWVzdC5wZXJzaXN0ZW50Q29ubmVjdGlvbiAmJgogICAgICAgICAgICBpbmNvbWluZy5mdWxsQm9keVJlYWQgJiYKICAgICAgICAgICAgIV9odHRwUGFyc2VyLnVwZ3JhZGUgJiYKICAgICAgICAgICAgIV9odHRwU2VydmVyLmNsb3NlZCkgewogICAgICAgICAgX3N0YXRlID0gX0lETEU7CiAgICAgICAgICBfaWRsZU1hcmsgPSBmYWxzZTsKICAgICAgICAgIF9odHRwU2VydmVyLl9tYXJrSWRsZSh0aGlzKTsKICAgICAgICAgIC8vIFJlc3VtZSB0aGUgc3Vic2NyaXB0aW9uIGZvciBpbmNvbWluZyByZXF1ZXN0cyBhcyB0aGUKICAgICAgICAgIC8vIHJlcXVlc3QgaXMgbm93IHByb2Nlc3NlZC4KICAgICAgICAgIF9zdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIENsb3NlIHNvY2tldCwga2VlcC1hbGl2ZSBub3QgdXNlZCBvciBib2R5IHNlbnQgYmVmb3JlCiAgICAgICAgICAvLyByZWNlaXZlZCBkYXRhIHdhcyBoYW5kbGVkLgogICAgICAgICAgZGVzdHJveSgpOwogICAgICAgIH0KICAgICAgfSwgb25FcnJvcjogKF8pIHsKICAgICAgICBkZXN0cm95KCk7CiAgICAgIH0pOwogICAgICBvdXRnb2luZy5pZ25vcmVCb2R5ID0gcmVxdWVzdC5tZXRob2QgPT0gIkhFQUQiOwogICAgICByZXNwb25zZS5faHR0cFJlcXVlc3QgPSByZXF1ZXN0OwogICAgICBfaHR0cFNlcnZlci5faGFuZGxlUmVxdWVzdChyZXF1ZXN0KTsKICAgIH0sIG9uRG9uZTogKCkgewogICAgICBkZXN0cm95KCk7CiAgICB9LCBvbkVycm9yOiAoZXJyb3IpIHsKICAgICAgLy8gSWdub3JlIGZhaWxlZCByZXF1ZXN0cyB0aGF0IHdhcyBjbG9zZWQgYmVmb3JlIGhlYWRlcnMgd2FzIHJlY2VpdmVkLgogICAgICBkZXN0cm95KCk7CiAgICB9KTsKICB9CgogIHZvaWQgbWFya0lkbGUoKSB7CiAgICBfaWRsZU1hcmsgPSB0cnVlOwogIH0KCiAgYm9vbCBnZXQgaXNNYXJrZWRJZGxlID0+IF9pZGxlTWFyazsKCiAgdm9pZCBkZXN0cm95KCkgewogICAgaWYgKF9zdGF0ZSA9PSBfQ0xPU0lORyB8fCBfc3RhdGUgPT0gX0RFVEFDSEVEKSByZXR1cm47CiAgICBfc3RhdGUgPSBfQ0xPU0lORzsKICAgIF9zb2NrZXQuZGVzdHJveSgpOwogICAgX2h0dHBTZXJ2ZXIuX2Nvbm5lY3Rpb25DbG9zZWQodGhpcyk7CiAgICBfY29ubmVjdGlvbnMucmVtb3ZlKF9zZXJ2aWNlSWQpOwogIH0KCiAgRnV0dXJlPFNvY2tldD4gZGV0YWNoU29ja2V0KCkgewogICAgX3N0YXRlID0gX0RFVEFDSEVEOwogICAgLy8gUmVtb3ZlIGNvbm5lY3Rpb24gZnJvbSBzZXJ2ZXIuCiAgICBfaHR0cFNlcnZlci5fY29ubmVjdGlvbkNsb3NlZCh0aGlzKTsKCiAgICBfSHR0cERldGFjaGVkSW5jb21pbmcgZGV0YWNoZWRJbmNvbWluZyA9IF9odHRwUGFyc2VyLmRldGFjaEluY29taW5nKCk7CgogICAgcmV0dXJuIF9zdHJlYW1GdXR1cmUudGhlbigoXykgewogICAgICBfY29ubmVjdGlvbnMucmVtb3ZlKF9zZXJ2aWNlSWQpOwogICAgICByZXR1cm4gbmV3IF9EZXRhY2hlZFNvY2tldChfc29ja2V0LCBkZXRhY2hlZEluY29taW5nKTsKICAgIH0pOwogIH0KCiAgSHR0cENvbm5lY3Rpb25JbmZvIGdldCBjb25uZWN0aW9uSW5mbyA9PiBfSHR0cENvbm5lY3Rpb25JbmZvLmNyZWF0ZShfc29ja2V0KTsKCiAgYm9vbCBnZXQgX2lzQWN0aXZlID0+IF9zdGF0ZSA9PSBfQUNUSVZFOwogIGJvb2wgZ2V0IF9pc0lkbGUgPT4gX3N0YXRlID09IF9JRExFOwogIGJvb2wgZ2V0IF9pc0Nsb3NpbmcgPT4gX3N0YXRlID09IF9DTE9TSU5HOwoKICBTdHJpbmcgZ2V0IF9zZXJ2aWNlVHlwZVBhdGggPT4gJ2lvL2h0dHAvc2VydmVyY29ubmVjdGlvbnMnOwogIFN0cmluZyBnZXQgX3NlcnZpY2VUeXBlTmFtZSA9PiAnSHR0cFNlcnZlckNvbm5lY3Rpb24nOwoKICBNYXAgX3RvSlNPTihib29sIHJlZikgewogICAgdmFyIG5hbWUgPSAiJHtfc29ja2V0LmFkZHJlc3MuaG9zdH06JHtfc29ja2V0LnBvcnR9IDwtPiAiCiAgICAgICAgIiR7X3NvY2tldC5yZW1vdGVBZGRyZXNzLmhvc3R9OiR7X3NvY2tldC5yZW1vdGVQb3J0fSI7CiAgICB2YXIgciA9IDxTdHJpbmcsIGR5bmFtaWM+ewogICAgICAnaWQnOiBfc2VydmljZVBhdGgsCiAgICAgICd0eXBlJzogX3NlcnZpY2VUeXBlKHJlZiksCiAgICAgICduYW1lJzogbmFtZSwKICAgICAgJ3VzZXJfbmFtZSc6IG5hbWUsCiAgICB9OwogICAgaWYgKHJlZikgewogICAgICByZXR1cm4gcjsKICAgIH0KICAgIHJbJ3NlcnZlciddID0gX2h0dHBTZXJ2ZXIuX3RvSlNPTih0cnVlKTsKICAgIHRyeSB7CiAgICAgIHJbJ3NvY2tldCddID0gX3NvY2tldC5fdG9KU09OKHRydWUpOwogICAgfSBjYXRjaCAoXykgewogICAgICByWydzb2NrZXQnXSA9IHsKICAgICAgICAnaWQnOiBfc2VydmljZVBhdGgsCiAgICAgICAgJ3R5cGUnOiAnQFNvY2tldCcsCiAgICAgICAgJ25hbWUnOiAnVXNlclNvY2tldCcsCiAgICAgICAgJ3VzZXJfbmFtZSc6ICdVc2VyU29ja2V0JywKICAgICAgfTsKICAgIH0KICAgIHN3aXRjaCAoX3N0YXRlKSB7CiAgICAgIGNhc2UgX0FDVElWRToKICAgICAgICByWydzdGF0ZSddID0gIkFjdGl2ZSI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgX0lETEU6CiAgICAgICAgclsnc3RhdGUnXSA9ICJJZGxlIjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBfQ0xPU0lORzoKICAgICAgICByWydzdGF0ZSddID0gIkNsb3NpbmciOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIF9ERVRBQ0hFRDoKICAgICAgICByWydzdGF0ZSddID0gIkRldGFjaGVkIjsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICByWydzdGF0ZSddID0gJ1Vua25vd24nOwogICAgICAgIGJyZWFrOwogICAgfQogICAgcmV0dXJuIHI7CiAgfQp9CgovLyBIVFRQIHNlcnZlciB3YWl0aW5nIGZvciBzb2NrZXQgY29ubmVjdGlvbnMuCmNsYXNzIF9IdHRwU2VydmVyIGV4dGVuZHMgU3RyZWFtPEh0dHBSZXF1ZXN0PgogICAgd2l0aCBfU2VydmljZU9iamVjdAogICAgaW1wbGVtZW50cyBIdHRwU2VydmVyIHsKICAvLyBVc2UgZGVmYXVsdCBNYXAgc28gd2Uga2VlcCBvcmRlci4KICBzdGF0aWMgTWFwPGludCwgX0h0dHBTZXJ2ZXI+IF9zZXJ2ZXJzID0gbmV3IE1hcDxpbnQsIF9IdHRwU2VydmVyPigpOwoKICBTdHJpbmcgc2VydmVySGVhZGVyOwogIGZpbmFsIEh0dHBIZWFkZXJzIGRlZmF1bHRSZXNwb25zZUhlYWRlcnMgPSBfaW5pdERlZmF1bHRSZXNwb25zZUhlYWRlcnMoKTsKICBib29sIGF1dG9Db21wcmVzcyA9IGZhbHNlOwoKICBEdXJhdGlvbiBfaWRsZVRpbWVvdXQ7CiAgVGltZXIgX2lkbGVUaW1lcjsKCiAgc3RhdGljIEZ1dHVyZTxIdHRwU2VydmVyPiBiaW5kKAogICAgICBhZGRyZXNzLCBpbnQgcG9ydCwgaW50IGJhY2tsb2csIGJvb2wgdjZPbmx5LCBib29sIHNoYXJlZCkgewogICAgcmV0dXJuIFNlcnZlclNvY2tldC5iaW5kKGFkZHJlc3MsIHBvcnQsCiAgICAgICAgICAgIGJhY2tsb2c6IGJhY2tsb2csIHY2T25seTogdjZPbmx5LCBzaGFyZWQ6IHNoYXJlZCkKICAgICAgICAudGhlbjxIdHRwU2VydmVyPigoc29ja2V0KSB7CiAgICAgIHJldHVybiBuZXcgX0h0dHBTZXJ2ZXIuXyhzb2NrZXQsIHRydWUpOwogICAgfSk7CiAgfQoKICBzdGF0aWMgRnV0dXJlPEh0dHBTZXJ2ZXI+IGJpbmRTZWN1cmUoCiAgICAgIGFkZHJlc3MsCiAgICAgIGludCBwb3J0LAogICAgICBTZWN1cml0eUNvbnRleHQgY29udGV4dCwKICAgICAgaW50IGJhY2tsb2csCiAgICAgIGJvb2wgdjZPbmx5LAogICAgICBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgYm9vbCBzaGFyZWQpIHsKICAgIHJldHVybiBTZWN1cmVTZXJ2ZXJTb2NrZXQuYmluZChhZGRyZXNzLCBwb3J0LCBjb250ZXh0LAogICAgICAgICAgICBiYWNrbG9nOiBiYWNrbG9nLAogICAgICAgICAgICB2Nk9ubHk6IHY2T25seSwKICAgICAgICAgICAgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOiByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgICAgIHNoYXJlZDogc2hhcmVkKQogICAgICAgIC50aGVuPEh0dHBTZXJ2ZXI+KChzb2NrZXQpIHsKICAgICAgcmV0dXJuIG5ldyBfSHR0cFNlcnZlci5fKHNvY2tldCwgdHJ1ZSk7CiAgICB9KTsKICB9CgogIF9IdHRwU2VydmVyLl8odGhpcy5fc2VydmVyU29ja2V0LCB0aGlzLl9jbG9zZVNlcnZlcikgewogICAgX2NvbnRyb2xsZXIgPQogICAgICAgIG5ldyBTdHJlYW1Db250cm9sbGVyPEh0dHBSZXF1ZXN0PihzeW5jOiB0cnVlLCBvbkNhbmNlbDogY2xvc2UpOwogICAgaWRsZVRpbWVvdXQgPSBjb25zdCBEdXJhdGlvbihzZWNvbmRzOiAxMjApOwogICAgX3NlcnZlcnNbX3NlcnZpY2VJZF0gPSB0aGlzOwogIH0KCiAgX0h0dHBTZXJ2ZXIubGlzdGVuT24odGhpcy5fc2VydmVyU29ja2V0KSA6IF9jbG9zZVNlcnZlciA9IGZhbHNlIHsKICAgIF9jb250cm9sbGVyID0KICAgICAgICBuZXcgU3RyZWFtQ29udHJvbGxlcjxIdHRwUmVxdWVzdD4oc3luYzogdHJ1ZSwgb25DYW5jZWw6IGNsb3NlKTsKICAgIGlkbGVUaW1lb3V0ID0gY29uc3QgRHVyYXRpb24oc2Vjb25kczogMTIwKTsKICAgIF9zZXJ2ZXJzW19zZXJ2aWNlSWRdID0gdGhpczsKICB9CgogIHN0YXRpYyBIdHRwSGVhZGVycyBfaW5pdERlZmF1bHRSZXNwb25zZUhlYWRlcnMoKSB7CiAgICB2YXIgZGVmYXVsdFJlc3BvbnNlSGVhZGVycyA9IG5ldyBfSHR0cEhlYWRlcnMoJzEuMScpOwogICAgZGVmYXVsdFJlc3BvbnNlSGVhZGVycy5jb250ZW50VHlwZSA9IENvbnRlbnRUeXBlLnRleHQ7CiAgICBkZWZhdWx0UmVzcG9uc2VIZWFkZXJzLnNldCgnWC1GcmFtZS1PcHRpb25zJywgJ1NBTUVPUklHSU4nKTsKICAgIGRlZmF1bHRSZXNwb25zZUhlYWRlcnMuc2V0KCdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJywgJ25vc25pZmYnKTsKICAgIGRlZmF1bHRSZXNwb25zZUhlYWRlcnMuc2V0KCdYLVhTUy1Qcm90ZWN0aW9uJywgJzE7IG1vZGU9YmxvY2snKTsKICAgIHJldHVybiBkZWZhdWx0UmVzcG9uc2VIZWFkZXJzOwogIH0KCiAgRHVyYXRpb24gZ2V0IGlkbGVUaW1lb3V0ID0+IF9pZGxlVGltZW91dDsKCiAgdm9pZCBzZXQgaWRsZVRpbWVvdXQoRHVyYXRpb24gZHVyYXRpb24pIHsKICAgIGlmIChfaWRsZVRpbWVyICE9IG51bGwpIHsKICAgICAgX2lkbGVUaW1lci5jYW5jZWwoKTsKICAgICAgX2lkbGVUaW1lciA9IG51bGw7CiAgICB9CiAgICBfaWRsZVRpbWVvdXQgPSBkdXJhdGlvbjsKICAgIGlmIChfaWRsZVRpbWVvdXQgIT0gbnVsbCkgewogICAgICBfaWRsZVRpbWVyID0gbmV3IFRpbWVyLnBlcmlvZGljKF9pZGxlVGltZW91dCwgKF8pIHsKICAgICAgICBmb3IgKHZhciBpZGxlIGluIF9pZGxlQ29ubmVjdGlvbnMudG9MaXN0KCkpIHsKICAgICAgICAgIGlmIChpZGxlLmlzTWFya2VkSWRsZSkgewogICAgICAgICAgICBpZGxlLmRlc3Ryb3koKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlkbGUubWFya0lkbGUoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0KCiAgU3RyZWFtU3Vic2NyaXB0aW9uPEh0dHBSZXF1ZXN0PiBsaXN0ZW4odm9pZCBvbkRhdGEoSHR0cFJlcXVlc3QgZXZlbnQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgX3NlcnZlclNvY2tldC5saXN0ZW4oKFNvY2tldCBzb2NrZXQpIHsKICAgICAgc29ja2V0LnNldE9wdGlvbihTb2NrZXRPcHRpb24udGNwTm9EZWxheSwgdHJ1ZSk7CiAgICAgIC8vIEFjY2VwdCB0aGUgY2xpZW50IGNvbm5lY3Rpb24uCiAgICAgIF9IdHRwQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gbmV3IF9IdHRwQ29ubmVjdGlvbihzb2NrZXQsIHRoaXMpOwogICAgICBfaWRsZUNvbm5lY3Rpb25zLmFkZChjb25uZWN0aW9uKTsKICAgIH0sIG9uRXJyb3I6IChlcnJvciwgc3RhY2tUcmFjZSkgewogICAgICAvLyBJZ25vcmUgSGFuZHNoYWtlRXhjZXB0aW9ucyBhcyB0aGV5IGFyZSBib3VuZCB0byBhIHNpbmdsZSByZXF1ZXN0LAogICAgICAvLyBhbmQgYXJlIG5vdCBmYXRhbCBmb3IgdGhlIHNlcnZlci4KICAgICAgaWYgKGVycm9yIGlzISBIYW5kc2hha2VFeGNlcHRpb24pIHsKICAgICAgICBfY29udHJvbGxlci5hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIH0KICAgIH0sIG9uRG9uZTogX2NvbnRyb2xsZXIuY2xvc2UpOwogICAgcmV0dXJuIF9jb250cm9sbGVyLnN0cmVhbS5saXN0ZW4ob25EYXRhLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsIG9uRG9uZTogb25Eb25lLCBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKTsKICB9CgogIEZ1dHVyZSBjbG9zZSh7Ym9vbCBmb3JjZTogZmFsc2V9KSB7CiAgICBjbG9zZWQgPSB0cnVlOwogICAgRnV0dXJlIHJlc3VsdDsKICAgIGlmIChfc2VydmVyU29ja2V0ICE9IG51bGwgJiYgX2Nsb3NlU2VydmVyKSB7CiAgICAgIHJlc3VsdCA9IF9zZXJ2ZXJTb2NrZXQuY2xvc2UoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdCA9IG5ldyBGdXR1cmUudmFsdWUoKTsKICAgIH0KICAgIGlkbGVUaW1lb3V0ID0gbnVsbDsKICAgIGlmIChmb3JjZSkgewogICAgICBmb3IgKHZhciBjIGluIF9hY3RpdmVDb25uZWN0aW9ucy50b0xpc3QoKSkgewogICAgICAgIGMuZGVzdHJveSgpOwogICAgICB9CiAgICAgIGFzc2VydChfYWN0aXZlQ29ubmVjdGlvbnMuaXNFbXB0eSk7CiAgICB9CiAgICBmb3IgKHZhciBjIGluIF9pZGxlQ29ubmVjdGlvbnMudG9MaXN0KCkpIHsKICAgICAgYy5kZXN0cm95KCk7CiAgICB9CiAgICBfbWF5YmVQZXJmb3JtQ2xlYW51cCgpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgX21heWJlUGVyZm9ybUNsZWFudXAoKSB7CiAgICBpZiAoY2xvc2VkICYmCiAgICAgICAgX2lkbGVDb25uZWN0aW9ucy5pc0VtcHR5ICYmCiAgICAgICAgX2FjdGl2ZUNvbm5lY3Rpb25zLmlzRW1wdHkgJiYKICAgICAgICBfc2Vzc2lvbk1hbmFnZXJJbnN0YW5jZSAhPSBudWxsKSB7CiAgICAgIF9zZXNzaW9uTWFuYWdlckluc3RhbmNlLmNsb3NlKCk7CiAgICAgIF9zZXNzaW9uTWFuYWdlckluc3RhbmNlID0gbnVsbDsKICAgICAgX3NlcnZlcnMucmVtb3ZlKF9zZXJ2aWNlSWQpOwogICAgfQogIH0KCiAgaW50IGdldCBwb3J0IHsKICAgIGlmIChjbG9zZWQpIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJIdHRwU2VydmVyIGlzIG5vdCBib3VuZCB0byBhIHNvY2tldCIpOwogICAgcmV0dXJuIF9zZXJ2ZXJTb2NrZXQucG9ydDsKICB9CgogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzcyB7CiAgICBpZiAoY2xvc2VkKSB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSHR0cFNlcnZlciBpcyBub3QgYm91bmQgdG8gYSBzb2NrZXQiKTsKICAgIHJldHVybiBfc2VydmVyU29ja2V0LmFkZHJlc3M7CiAgfQoKICBzZXQgc2Vzc2lvblRpbWVvdXQoaW50IHRpbWVvdXQpIHsKICAgIF9zZXNzaW9uTWFuYWdlci5zZXNzaW9uVGltZW91dCA9IHRpbWVvdXQ7CiAgfQoKICB2b2lkIF9oYW5kbGVSZXF1ZXN0KF9IdHRwUmVxdWVzdCByZXF1ZXN0KSB7CiAgICBpZiAoIWNsb3NlZCkgewogICAgICBfY29udHJvbGxlci5hZGQocmVxdWVzdCk7CiAgICB9IGVsc2UgewogICAgICByZXF1ZXN0Ll9odHRwQ29ubmVjdGlvbi5kZXN0cm95KCk7CiAgICB9CiAgfQoKICB2b2lkIF9jb25uZWN0aW9uQ2xvc2VkKF9IdHRwQ29ubmVjdGlvbiBjb25uZWN0aW9uKSB7CiAgICAvLyBSZW1vdmUgaXRzZWxmIGZyb20gZWl0aGVyIGlkbGUgb3IgYWN0aXZlIGNvbm5lY3Rpb25zLgogICAgY29ubmVjdGlvbi51bmxpbmsoKTsKICAgIF9tYXliZVBlcmZvcm1DbGVhbnVwKCk7CiAgfQoKICB2b2lkIF9tYXJrSWRsZShfSHR0cENvbm5lY3Rpb24gY29ubmVjdGlvbikgewogICAgX2FjdGl2ZUNvbm5lY3Rpb25zLnJlbW92ZShjb25uZWN0aW9uKTsKICAgIF9pZGxlQ29ubmVjdGlvbnMuYWRkKGNvbm5lY3Rpb24pOwogIH0KCiAgdm9pZCBfbWFya0FjdGl2ZShfSHR0cENvbm5lY3Rpb24gY29ubmVjdGlvbikgewogICAgX2lkbGVDb25uZWN0aW9ucy5yZW1vdmUoY29ubmVjdGlvbik7CiAgICBfYWN0aXZlQ29ubmVjdGlvbnMuYWRkKGNvbm5lY3Rpb24pOwogIH0KCiAgX0h0dHBTZXNzaW9uTWFuYWdlciBnZXQgX3Nlc3Npb25NYW5hZ2VyIHsKICAgIC8vIExhenkgaW5pdC4KICAgIGlmIChfc2Vzc2lvbk1hbmFnZXJJbnN0YW5jZSA9PSBudWxsKSB7CiAgICAgIF9zZXNzaW9uTWFuYWdlckluc3RhbmNlID0gbmV3IF9IdHRwU2Vzc2lvbk1hbmFnZXIoKTsKICAgIH0KICAgIHJldHVybiBfc2Vzc2lvbk1hbmFnZXJJbnN0YW5jZTsKICB9CgogIEh0dHBDb25uZWN0aW9uc0luZm8gY29ubmVjdGlvbnNJbmZvKCkgewogICAgSHR0cENvbm5lY3Rpb25zSW5mbyByZXN1bHQgPSBuZXcgSHR0cENvbm5lY3Rpb25zSW5mbygpOwogICAgcmVzdWx0LnRvdGFsID0gX2FjdGl2ZUNvbm5lY3Rpb25zLmxlbmd0aCArIF9pZGxlQ29ubmVjdGlvbnMubGVuZ3RoOwogICAgX2FjdGl2ZUNvbm5lY3Rpb25zLmZvckVhY2goKF9IdHRwQ29ubmVjdGlvbiBjb25uKSB7CiAgICAgIGlmIChjb25uLl9pc0FjdGl2ZSkgewogICAgICAgIHJlc3VsdC5hY3RpdmUrKzsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoY29ubi5faXNDbG9zaW5nKTsKICAgICAgICByZXN1bHQuY2xvc2luZysrOwogICAgICB9CiAgICB9KTsKICAgIF9pZGxlQ29ubmVjdGlvbnMuZm9yRWFjaCgoX0h0dHBDb25uZWN0aW9uIGNvbm4pIHsKICAgICAgcmVzdWx0LmlkbGUrKzsKICAgICAgYXNzZXJ0KGNvbm4uX2lzSWRsZSk7CiAgICB9KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTdHJpbmcgZ2V0IF9zZXJ2aWNlVHlwZVBhdGggPT4gJ2lvL2h0dHAvc2VydmVycyc7CiAgU3RyaW5nIGdldCBfc2VydmljZVR5cGVOYW1lID0+ICdIdHRwU2VydmVyJzsKCiAgTWFwPFN0cmluZywgZHluYW1pYz4gX3RvSlNPTihib29sIHJlZikgewogICAgdmFyIHIgPSA8U3RyaW5nLCBkeW5hbWljPnsKICAgICAgJ2lkJzogX3NlcnZpY2VQYXRoLAogICAgICAndHlwZSc6IF9zZXJ2aWNlVHlwZShyZWYpLAogICAgICAnbmFtZSc6ICcke2FkZHJlc3MuaG9zdH06JHBvcnQnLAogICAgICAndXNlcl9uYW1lJzogJyR7YWRkcmVzcy5ob3N0fTokcG9ydCcsCiAgICB9OwogICAgaWYgKHJlZikgewogICAgICByZXR1cm4gcjsKICAgIH0KICAgIHRyeSB7CiAgICAgIHJbJ3NvY2tldCddID0gX3NlcnZlclNvY2tldC5fdG9KU09OKHRydWUpOwogICAgfSBjYXRjaCAoXykgewogICAgICByWydzb2NrZXQnXSA9IHsKICAgICAgICAnaWQnOiBfc2VydmljZVBhdGgsCiAgICAgICAgJ3R5cGUnOiAnQFNvY2tldCcsCiAgICAgICAgJ25hbWUnOiAnVXNlclNvY2tldCcsCiAgICAgICAgJ3VzZXJfbmFtZSc6ICdVc2VyU29ja2V0JywKICAgICAgfTsKICAgIH0KICAgIHJbJ3BvcnQnXSA9IHBvcnQ7CiAgICByWydhZGRyZXNzJ10gPSBhZGRyZXNzLmhvc3Q7CiAgICByWydhY3RpdmUnXSA9IF9hY3RpdmVDb25uZWN0aW9ucy5tYXAoKGMpID0+IGMuX3RvSlNPTih0cnVlKSkudG9MaXN0KCk7CiAgICByWydpZGxlJ10gPSBfaWRsZUNvbm5lY3Rpb25zLm1hcCgoYykgPT4gYy5fdG9KU09OKHRydWUpKS50b0xpc3QoKTsKICAgIHJbJ2Nsb3NlZCddID0gY2xvc2VkOwogICAgcmV0dXJuIHI7CiAgfQoKICBfSHR0cFNlc3Npb25NYW5hZ2VyIF9zZXNzaW9uTWFuYWdlckluc3RhbmNlOwoKICAvLyBJbmRpY2F0ZWQgaWYgdGhlIGh0dHAgc2VydmVyIGhhcyBiZWVuIGNsb3NlZC4KICBib29sIGNsb3NlZCA9IGZhbHNlOwoKICAvLyBUaGUgc2VydmVyIGxpc3RlbiBzb2NrZXQuIFVudHlwZWQgYXMgaXQgY2FuIGJlIGJvdGggU2VydmVyU29ja2V0IGFuZAogIC8vIFNlY3VyZVNlcnZlclNvY2tldC4KICBmaW5hbCBkeW5hbWljIC8qU2VydmVyU29ja2V0fFNlY3VyZVNlcnZlclNvY2tldCovIF9zZXJ2ZXJTb2NrZXQ7CiAgZmluYWwgYm9vbCBfY2xvc2VTZXJ2ZXI7CgogIC8vIFNldCBvZiBjdXJyZW50bHkgY29ubmVjdGVkIGNsaWVudHMuCiAgZmluYWwgTGlua2VkTGlzdDxfSHR0cENvbm5lY3Rpb24+IF9hY3RpdmVDb25uZWN0aW9ucyA9CiAgICAgIG5ldyBMaW5rZWRMaXN0PF9IdHRwQ29ubmVjdGlvbj4oKTsKICBmaW5hbCBMaW5rZWRMaXN0PF9IdHRwQ29ubmVjdGlvbj4gX2lkbGVDb25uZWN0aW9ucyA9CiAgICAgIG5ldyBMaW5rZWRMaXN0PF9IdHRwQ29ubmVjdGlvbj4oKTsKICBTdHJlYW1Db250cm9sbGVyPEh0dHBSZXF1ZXN0PiBfY29udHJvbGxlcjsKfQoKY2xhc3MgX1Byb3h5Q29uZmlndXJhdGlvbiB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBQUk9YWV9QUkVGSVggPSAiUFJPWFkgIjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIERJUkVDVF9QUkVGSVggPSAiRElSRUNUIjsKCiAgX1Byb3h5Q29uZmlndXJhdGlvbihTdHJpbmcgY29uZmlndXJhdGlvbikgOiBwcm94aWVzID0gbmV3IExpc3Q8X1Byb3h5PigpIHsKICAgIGlmIChjb25maWd1cmF0aW9uID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgcHJveHkgY29uZmlndXJhdGlvbiAkY29uZmlndXJhdGlvbiIpOwogICAgfQogICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBjb25maWd1cmF0aW9uLnNwbGl0KCI7Iik7CiAgICBsaXN0LmZvckVhY2goKFN0cmluZyBwcm94eSkgewogICAgICBwcm94eSA9IHByb3h5LnRyaW0oKTsKICAgICAgaWYgKCFwcm94eS5pc0VtcHR5KSB7CiAgICAgICAgaWYgKHByb3h5LnN0YXJ0c1dpdGgoUFJPWFlfUFJFRklYKSkgewogICAgICAgICAgU3RyaW5nIHVzZXJuYW1lOwogICAgICAgICAgU3RyaW5nIHBhc3N3b3JkOwogICAgICAgICAgLy8gU2tpcCB0aGUgIlBST1hZICIgcHJlZml4LgogICAgICAgICAgcHJveHkgPSBwcm94eS5zdWJzdHJpbmcoUFJPWFlfUFJFRklYLmxlbmd0aCkudHJpbSgpOwogICAgICAgICAgLy8gTG9vayBmb3IgcHJveHkgYXV0aGVudGljYXRpb24uCiAgICAgICAgICBpbnQgYXQgPSBwcm94eS5pbmRleE9mKCJAIik7CiAgICAgICAgICBpZiAoYXQgIT0gLTEpIHsKICAgICAgICAgICAgU3RyaW5nIHVzZXJpbmZvID0gcHJveHkuc3Vic3RyaW5nKDAsIGF0KS50cmltKCk7CiAgICAgICAgICAgIHByb3h5ID0gcHJveHkuc3Vic3RyaW5nKGF0ICsgMSkudHJpbSgpOwogICAgICAgICAgICBpbnQgY29sb24gPSB1c2VyaW5mby5pbmRleE9mKCI6Iik7CiAgICAgICAgICAgIGlmIChjb2xvbiA9PSAtMSB8fCBjb2xvbiA9PSAwIHx8IGNvbG9uID09IHByb3h5Lmxlbmd0aCAtIDEpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgIkludmFsaWQgcHJveHkgY29uZmlndXJhdGlvbiAkY29uZmlndXJhdGlvbiIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHVzZXJuYW1lID0gdXNlcmluZm8uc3Vic3RyaW5nKDAsIGNvbG9uKS50cmltKCk7CiAgICAgICAgICAgIHBhc3N3b3JkID0gdXNlcmluZm8uc3Vic3RyaW5nKGNvbG9uICsgMSkudHJpbSgpOwogICAgICAgICAgfQogICAgICAgICAgLy8gTG9vayBmb3IgcHJveHkgaG9zdCBhbmQgcG9ydC4KICAgICAgICAgIGludCBjb2xvbiA9IHByb3h5Lmxhc3RJbmRleE9mKCI6Iik7CiAgICAgICAgICBpZiAoY29sb24gPT0gLTEgfHwgY29sb24gPT0gMCB8fCBjb2xvbiA9PSBwcm94eS5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgIkludmFsaWQgcHJveHkgY29uZmlndXJhdGlvbiAkY29uZmlndXJhdGlvbiIpOwogICAgICAgICAgfQogICAgICAgICAgU3RyaW5nIGhvc3QgPSBwcm94eS5zdWJzdHJpbmcoMCwgY29sb24pLnRyaW0oKTsKICAgICAgICAgIGlmIChob3N0LnN0YXJ0c1dpdGgoIlsiKSAmJiBob3N0LmVuZHNXaXRoKCJdIikpIHsKICAgICAgICAgICAgaG9zdCA9IGhvc3Quc3Vic3RyaW5nKDEsIGhvc3QubGVuZ3RoIC0gMSk7CiAgICAgICAgICB9CiAgICAgICAgICBTdHJpbmcgcG9ydFN0cmluZyA9IHByb3h5LnN1YnN0cmluZyhjb2xvbiArIDEpLnRyaW0oKTsKICAgICAgICAgIGludCBwb3J0OwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcG9ydCA9IGludC5wYXJzZShwb3J0U3RyaW5nKTsKICAgICAgICAgIH0gb24gRm9ybWF0RXhjZXB0aW9uIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAiSW52YWxpZCBwcm94eSBjb25maWd1cmF0aW9uICRjb25maWd1cmF0aW9uLCAiCiAgICAgICAgICAgICAgICAiaW52YWxpZCBwb3J0ICckcG9ydFN0cmluZyciKTsKICAgICAgICAgIH0KICAgICAgICAgIHByb3hpZXMuYWRkKG5ldyBfUHJveHkoaG9zdCwgcG9ydCwgdXNlcm5hbWUsIHBhc3N3b3JkKSk7CiAgICAgICAgfSBlbHNlIGlmIChwcm94eS50cmltKCkgPT0gRElSRUNUX1BSRUZJWCkgewogICAgICAgICAgcHJveGllcy5hZGQobmV3IF9Qcm94eS5kaXJlY3QoKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIHByb3h5IGNvbmZpZ3VyYXRpb24gJGNvbmZpZ3VyYXRpb24iKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogIH0KCiAgY29uc3QgX1Byb3h5Q29uZmlndXJhdGlvbi5kaXJlY3QoKSA6IHByb3hpZXMgPSBjb25zdCBbY29uc3QgX1Byb3h5LmRpcmVjdCgpXTsKCiAgZmluYWwgTGlzdDxfUHJveHk+IHByb3hpZXM7Cn0KCmNsYXNzIF9Qcm94eSB7CiAgZmluYWwgU3RyaW5nIGhvc3Q7CiAgZmluYWwgaW50IHBvcnQ7CiAgZmluYWwgU3RyaW5nIHVzZXJuYW1lOwogIGZpbmFsIFN0cmluZyBwYXNzd29yZDsKICBmaW5hbCBib29sIGlzRGlyZWN0OwoKICBjb25zdCBfUHJveHkodGhpcy5ob3N0LCB0aGlzLnBvcnQsIHRoaXMudXNlcm5hbWUsIHRoaXMucGFzc3dvcmQpCiAgICAgIDogaXNEaXJlY3QgPSBmYWxzZTsKICBjb25zdCBfUHJveHkuZGlyZWN0KCkKICAgICAgOiBob3N0ID0gbnVsbCwKICAgICAgICBwb3J0ID0gbnVsbCwKICAgICAgICB1c2VybmFtZSA9IG51bGwsCiAgICAgICAgcGFzc3dvcmQgPSBudWxsLAogICAgICAgIGlzRGlyZWN0ID0gdHJ1ZTsKCiAgYm9vbCBnZXQgaXNBdXRoZW50aWNhdGVkID0+IHVzZXJuYW1lICE9IG51bGw7Cn0KCmNsYXNzIF9IdHRwQ29ubmVjdGlvbkluZm8gaW1wbGVtZW50cyBIdHRwQ29ubmVjdGlvbkluZm8gewogIEludGVybmV0QWRkcmVzcyByZW1vdGVBZGRyZXNzOwogIGludCByZW1vdGVQb3J0OwogIGludCBsb2NhbFBvcnQ7CgogIHN0YXRpYyBfSHR0cENvbm5lY3Rpb25JbmZvIGNyZWF0ZShTb2NrZXQgc29ja2V0KSB7CiAgICBpZiAoc29ja2V0ID09IG51bGwpIHJldHVybiBudWxsOwogICAgdHJ5IHsKICAgICAgX0h0dHBDb25uZWN0aW9uSW5mbyBpbmZvID0gbmV3IF9IdHRwQ29ubmVjdGlvbkluZm8oKTsKICAgICAgcmV0dXJuIGluZm8KICAgICAgICAuLnJlbW90ZUFkZHJlc3MgPSBzb2NrZXQucmVtb3RlQWRkcmVzcwogICAgICAgIC4ucmVtb3RlUG9ydCA9IHNvY2tldC5yZW1vdGVQb3J0CiAgICAgICAgLi5sb2NhbFBvcnQgPSBzb2NrZXQucG9ydDsKICAgIH0gY2F0Y2ggKGUpIHt9CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCmNsYXNzIF9EZXRhY2hlZFNvY2tldCBleHRlbmRzIFN0cmVhbTxVaW50OExpc3Q+IGltcGxlbWVudHMgU29ja2V0IHsKICBmaW5hbCBTdHJlYW08VWludDhMaXN0PiBfaW5jb21pbmc7CiAgZmluYWwgU29ja2V0IF9zb2NrZXQ7CgogIF9EZXRhY2hlZFNvY2tldCh0aGlzLl9zb2NrZXQsIHRoaXMuX2luY29taW5nKTsKCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFVpbnQ4TGlzdD4gbGlzdGVuKHZvaWQgb25EYXRhKFVpbnQ4TGlzdCBldmVudCksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICByZXR1cm4gX2luY29taW5nLmxpc3RlbihvbkRhdGEsCiAgICAgICAgb25FcnJvcjogb25FcnJvciwgb25Eb25lOiBvbkRvbmUsIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgRW5jb2RpbmcgZ2V0IGVuY29kaW5nID0+IF9zb2NrZXQuZW5jb2Rpbmc7CgogIHZvaWQgc2V0IGVuY29kaW5nKEVuY29kaW5nIHZhbHVlKSB7CiAgICBfc29ja2V0LmVuY29kaW5nID0gdmFsdWU7CiAgfQoKICB2b2lkIHdyaXRlKE9iamVjdCBvYmopIHsKICAgIF9zb2NrZXQud3JpdGUob2JqKTsKICB9CgogIHZvaWQgd3JpdGVsbihbT2JqZWN0IG9iaiA9ICIiXSkgewogICAgX3NvY2tldC53cml0ZWxuKG9iaik7CiAgfQoKICB2b2lkIHdyaXRlQ2hhckNvZGUoaW50IGNoYXJDb2RlKSB7CiAgICBfc29ja2V0LndyaXRlQ2hhckNvZGUoY2hhckNvZGUpOwogIH0KCiAgdm9pZCB3cml0ZUFsbChJdGVyYWJsZSBvYmplY3RzLCBbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgewogICAgX3NvY2tldC53cml0ZUFsbChvYmplY3RzLCBzZXBhcmF0b3IpOwogIH0KCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGJ5dGVzKSB7CiAgICBfc29ja2V0LmFkZChieXRlcyk7CiAgfQoKICB2b2lkIGFkZEVycm9yKGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgPT4KICAgICAgX3NvY2tldC5hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CgogIEZ1dHVyZSBhZGRTdHJlYW0oU3RyZWFtPExpc3Q8aW50Pj4gc3RyZWFtKSB7CiAgICByZXR1cm4gX3NvY2tldC5hZGRTdHJlYW0oc3RyZWFtKTsKICB9CgogIHZvaWQgZGVzdHJveSgpIHsKICAgIF9zb2NrZXQuZGVzdHJveSgpOwogIH0KCiAgRnV0dXJlIGZsdXNoKCkgPT4gX3NvY2tldC5mbHVzaCgpOwoKICBGdXR1cmUgY2xvc2UoKSA9PiBfc29ja2V0LmNsb3NlKCk7CgogIEZ1dHVyZSBnZXQgZG9uZSA9PiBfc29ja2V0LmRvbmU7CgogIGludCBnZXQgcG9ydCA9PiBfc29ja2V0LnBvcnQ7CgogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzcyA9PiBfc29ja2V0LmFkZHJlc3M7CgogIEludGVybmV0QWRkcmVzcyBnZXQgcmVtb3RlQWRkcmVzcyA9PiBfc29ja2V0LnJlbW90ZUFkZHJlc3M7CgogIGludCBnZXQgcmVtb3RlUG9ydCA9PiBfc29ja2V0LnJlbW90ZVBvcnQ7CgogIGJvb2wgc2V0T3B0aW9uKFNvY2tldE9wdGlvbiBvcHRpb24sIGJvb2wgZW5hYmxlZCkgewogICAgcmV0dXJuIF9zb2NrZXQuc2V0T3B0aW9uKG9wdGlvbiwgZW5hYmxlZCk7CiAgfQoKICBVaW50OExpc3QgZ2V0UmF3T3B0aW9uKFJhd1NvY2tldE9wdGlvbiBvcHRpb24pIHsKICAgIHJldHVybiBfc29ja2V0LmdldFJhd09wdGlvbihvcHRpb24pOwogIH0KCiAgdm9pZCBzZXRSYXdPcHRpb24oUmF3U29ja2V0T3B0aW9uIG9wdGlvbikgewogICAgX3NvY2tldC5zZXRSYXdPcHRpb24ob3B0aW9uKTsKICB9CgogIE1hcCBfdG9KU09OKGJvb2wgcmVmKSB7CiAgICByZXR1cm4gKF9zb2NrZXQgYXMgZHluYW1pYykuX3RvSlNPTihyZWYpOwogIH0KfQoKY2xhc3MgX0F1dGhlbnRpY2F0aW9uU2NoZW1lIHsKICBmaW5hbCBpbnQgX3NjaGVtZTsKCiAgc3RhdGljIGNvbnN0IFVOS05PV04gPSBjb25zdCBfQXV0aGVudGljYXRpb25TY2hlbWUoLTEpOwogIHN0YXRpYyBjb25zdCBCQVNJQyA9IGNvbnN0IF9BdXRoZW50aWNhdGlvblNjaGVtZSgwKTsKICBzdGF0aWMgY29uc3QgRElHRVNUID0gY29uc3QgX0F1dGhlbnRpY2F0aW9uU2NoZW1lKDEpOwoKICBjb25zdCBfQXV0aGVudGljYXRpb25TY2hlbWUodGhpcy5fc2NoZW1lKTsKCiAgZmFjdG9yeSBfQXV0aGVudGljYXRpb25TY2hlbWUuZnJvbVN0cmluZyhTdHJpbmcgc2NoZW1lKSB7CiAgICBpZiAoc2NoZW1lLnRvTG93ZXJDYXNlKCkgPT0gImJhc2ljIikgcmV0dXJuIEJBU0lDOwogICAgaWYgKHNjaGVtZS50b0xvd2VyQ2FzZSgpID09ICJkaWdlc3QiKSByZXR1cm4gRElHRVNUOwogICAgcmV0dXJuIFVOS05PV047CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBpZiAodGhpcyA9PSBCQVNJQykgcmV0dXJuICJCYXNpYyI7CiAgICBpZiAodGhpcyA9PSBESUdFU1QpIHJldHVybiAiRGlnZXN0IjsKICAgIHJldHVybiAiVW5rbm93biI7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfQ3JlZGVudGlhbHMgewogIF9IdHRwQ2xpZW50Q3JlZGVudGlhbHMgY3JlZGVudGlhbHM7CiAgU3RyaW5nIHJlYWxtOwogIGJvb2wgdXNlZCA9IGZhbHNlOwoKICAvLyBEaWdlc3Qgc3BlY2lmaWMgZmllbGRzLgogIFN0cmluZyBoYTE7CiAgU3RyaW5nIG5vbmNlOwogIFN0cmluZyBhbGdvcml0aG07CiAgU3RyaW5nIHFvcDsKICBpbnQgbm9uY2VDb3VudDsKCiAgX0NyZWRlbnRpYWxzKHRoaXMuY3JlZGVudGlhbHMsIHRoaXMucmVhbG0pIHsKICAgIGlmIChjcmVkZW50aWFscy5zY2hlbWUgPT0gX0F1dGhlbnRpY2F0aW9uU2NoZW1lLkRJR0VTVCkgewogICAgICAvLyBDYWxjdWxhdGUgdGhlIEgoQTEpIHZhbHVlIG9uY2UuIFRoZXJlIGlzIG5vIG1lbnRpb25pbmcgb2YKICAgICAgLy8gdXNlcm5hbWUvcGFzc3dvcmQgZW5jb2RpbmcgaW4gUkZDIDI2MTcuIEhvd2V2ZXIgdGhlcmUgaXMgYW4KICAgICAgLy8gb3BlbiBkcmFmdCBmb3IgYWRkaW5nIGFuIGFkZGl0aW9uYWwgYWNjZXB0LWNoYXJzZXQgcGFyYW1ldGVyIHRvCiAgICAgIC8vIHRoZSBXV1ctQXV0aGVudGljYXRlIGFuZCBQcm94eS1BdXRoZW50aWNhdGUgaGVhZGVycywgc2VlCiAgICAgIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LXJlc2Noa2UtYmFzaWNhdXRoLWVuYy0wNi4gRm9yCiAgICAgIC8vIG5vdyBhbHdheXMgdXNlIFVURi04IGVuY29kaW5nLgogICAgICBfSHR0cENsaWVudERpZ2VzdENyZWRlbnRpYWxzIGNyZWRzID0gY3JlZGVudGlhbHM7CiAgICAgIHZhciBoYXNoZXIgPSBuZXcgX01ENSgpCiAgICAgICAgLi5hZGQodXRmOC5lbmNvZGUoY3JlZHMudXNlcm5hbWUpKQogICAgICAgIC4uYWRkKFtfQ2hhckNvZGUuQ09MT05dKQogICAgICAgIC4uYWRkKHJlYWxtLmNvZGVVbml0cykKICAgICAgICAuLmFkZChbX0NoYXJDb2RlLkNPTE9OXSkKICAgICAgICAuLmFkZCh1dGY4LmVuY29kZShjcmVkcy5wYXNzd29yZCkpOwogICAgICBoYTEgPSBfQ3J5cHRvVXRpbHMuYnl0ZXNUb0hleChoYXNoZXIuY2xvc2UoKSk7CiAgICB9CiAgfQoKICBfQXV0aGVudGljYXRpb25TY2hlbWUgZ2V0IHNjaGVtZSA9PiBjcmVkZW50aWFscy5zY2hlbWU7CgogIHZvaWQgYXV0aG9yaXplKEh0dHBDbGllbnRSZXF1ZXN0IHJlcXVlc3QpOwp9CgpjbGFzcyBfU2l0ZUNyZWRlbnRpYWxzIGV4dGVuZHMgX0NyZWRlbnRpYWxzIHsKICBVcmkgdXJpOwoKICBfU2l0ZUNyZWRlbnRpYWxzKHRoaXMudXJpLCByZWFsbSwgX0h0dHBDbGllbnRDcmVkZW50aWFscyBjcmVkcykKICAgICAgOiBzdXBlcihjcmVkcywgcmVhbG0pOwoKICBib29sIGFwcGxpZXMoVXJpIHVyaSwgX0F1dGhlbnRpY2F0aW9uU2NoZW1lIHNjaGVtZSkgewogICAgaWYgKHNjaGVtZSAhPSBudWxsICYmIGNyZWRlbnRpYWxzLnNjaGVtZSAhPSBzY2hlbWUpIHJldHVybiBmYWxzZTsKICAgIGlmICh1cmkuaG9zdCAhPSB0aGlzLnVyaS5ob3N0KSByZXR1cm4gZmFsc2U7CiAgICBpbnQgdGhpc1BvcnQgPQogICAgICAgIHRoaXMudXJpLnBvcnQgPT0gMCA/IEh0dHBDbGllbnQuZGVmYXVsdEh0dHBQb3J0IDogdGhpcy51cmkucG9ydDsKICAgIGludCBvdGhlclBvcnQgPSB1cmkucG9ydCA9PSAwID8gSHR0cENsaWVudC5kZWZhdWx0SHR0cFBvcnQgOiB1cmkucG9ydDsKICAgIGlmIChvdGhlclBvcnQgIT0gdGhpc1BvcnQpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB1cmkucGF0aC5zdGFydHNXaXRoKHRoaXMudXJpLnBhdGgpOwogIH0KCiAgdm9pZCBhdXRob3JpemUoSHR0cENsaWVudFJlcXVlc3QgcmVxdWVzdCkgewogICAgLy8gRGlnZXN0IGNyZWRlbnRpYWxzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgYSBub25jZSBmcm9tIHRoZQogICAgLy8gc2VydmVyLgogICAgaWYgKGNyZWRlbnRpYWxzLnNjaGVtZSA9PSBfQXV0aGVudGljYXRpb25TY2hlbWUuRElHRVNUICYmIG5vbmNlID09IG51bGwpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY3JlZGVudGlhbHMuYXV0aG9yaXplKHRoaXMsIHJlcXVlc3QpOwogICAgdXNlZCA9IHRydWU7CiAgfQp9CgpjbGFzcyBfUHJveHlDcmVkZW50aWFscyBleHRlbmRzIF9DcmVkZW50aWFscyB7CiAgU3RyaW5nIGhvc3Q7CiAgaW50IHBvcnQ7CgogIF9Qcm94eUNyZWRlbnRpYWxzKHRoaXMuaG9zdCwgdGhpcy5wb3J0LCByZWFsbSwgX0h0dHBDbGllbnRDcmVkZW50aWFscyBjcmVkcykKICAgICAgOiBzdXBlcihjcmVkcywgcmVhbG0pOwoKICBib29sIGFwcGxpZXMoX1Byb3h5IHByb3h5LCBfQXV0aGVudGljYXRpb25TY2hlbWUgc2NoZW1lKSB7CiAgICBpZiAoc2NoZW1lICE9IG51bGwgJiYgY3JlZGVudGlhbHMuc2NoZW1lICE9IHNjaGVtZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHByb3h5Lmhvc3QgPT0gaG9zdCAmJiBwcm94eS5wb3J0ID09IHBvcnQ7CiAgfQoKICB2b2lkIGF1dGhvcml6ZShIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0KSB7CiAgICAvLyBEaWdlc3QgY3JlZGVudGlhbHMgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBhIG5vbmNlIGZyb20gdGhlCiAgICAvLyBzZXJ2ZXIuCiAgICBpZiAoY3JlZGVudGlhbHMuc2NoZW1lID09IF9BdXRoZW50aWNhdGlvblNjaGVtZS5ESUdFU1QgJiYgbm9uY2UgPT0gbnVsbCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjcmVkZW50aWFscy5hdXRob3JpemVQcm94eSh0aGlzLCByZXF1ZXN0KTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9IdHRwQ2xpZW50Q3JlZGVudGlhbHMgaW1wbGVtZW50cyBIdHRwQ2xpZW50Q3JlZGVudGlhbHMgewogIF9BdXRoZW50aWNhdGlvblNjaGVtZSBnZXQgc2NoZW1lOwogIHZvaWQgYXV0aG9yaXplKF9DcmVkZW50aWFscyBjcmVkZW50aWFscywgSHR0cENsaWVudFJlcXVlc3QgcmVxdWVzdCk7CiAgdm9pZCBhdXRob3JpemVQcm94eShfUHJveHlDcmVkZW50aWFscyBjcmVkZW50aWFscywgSHR0cENsaWVudFJlcXVlc3QgcmVxdWVzdCk7Cn0KCmNsYXNzIF9IdHRwQ2xpZW50QmFzaWNDcmVkZW50aWFscyBleHRlbmRzIF9IdHRwQ2xpZW50Q3JlZGVudGlhbHMKICAgIGltcGxlbWVudHMgSHR0cENsaWVudEJhc2ljQ3JlZGVudGlhbHMgewogIFN0cmluZyB1c2VybmFtZTsKICBTdHJpbmcgcGFzc3dvcmQ7CgogIF9IdHRwQ2xpZW50QmFzaWNDcmVkZW50aWFscyh0aGlzLnVzZXJuYW1lLCB0aGlzLnBhc3N3b3JkKTsKCiAgX0F1dGhlbnRpY2F0aW9uU2NoZW1lIGdldCBzY2hlbWUgPT4gX0F1dGhlbnRpY2F0aW9uU2NoZW1lLkJBU0lDOwoKICBTdHJpbmcgYXV0aG9yaXphdGlvbigpIHsKICAgIC8vIFRoZXJlIGlzIG5vIG1lbnRpb25pbmcgb2YgdXNlcm5hbWUvcGFzc3dvcmQgZW5jb2RpbmcgaW4gUkZDCiAgICAvLyAyNjE3LiBIb3dldmVyIHRoZXJlIGlzIGFuIG9wZW4gZHJhZnQgZm9yIGFkZGluZyBhbiBhZGRpdGlvbmFsCiAgICAvLyBhY2NlcHQtY2hhcnNldCBwYXJhbWV0ZXIgdG8gdGhlIFdXVy1BdXRoZW50aWNhdGUgYW5kCiAgICAvLyBQcm94eS1BdXRoZW50aWNhdGUgaGVhZGVycywgc2VlCiAgICAvLyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1yZXNjaGtlLWJhc2ljYXV0aC1lbmMtMDYuIEZvcgogICAgLy8gbm93IGFsd2F5cyB1c2UgVVRGLTggZW5jb2RpbmcuCiAgICBTdHJpbmcgYXV0aCA9CiAgICAgICAgX0NyeXB0b1V0aWxzLmJ5dGVzVG9CYXNlNjQodXRmOC5lbmNvZGUoIiR1c2VybmFtZTokcGFzc3dvcmQiKSk7CiAgICByZXR1cm4gIkJhc2ljICRhdXRoIjsKICB9CgogIHZvaWQgYXV0aG9yaXplKF9DcmVkZW50aWFscyBfLCBIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0KSB7CiAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KEh0dHBIZWFkZXJzLmF1dGhvcml6YXRpb25IZWFkZXIsIGF1dGhvcml6YXRpb24oKSk7CiAgfQoKICB2b2lkIGF1dGhvcml6ZVByb3h5KF9Qcm94eUNyZWRlbnRpYWxzIF8sIEh0dHBDbGllbnRSZXF1ZXN0IHJlcXVlc3QpIHsKICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSHR0cEhlYWRlcnMucHJveHlBdXRob3JpemF0aW9uSGVhZGVyLCBhdXRob3JpemF0aW9uKCkpOwogIH0KfQoKY2xhc3MgX0h0dHBDbGllbnREaWdlc3RDcmVkZW50aWFscyBleHRlbmRzIF9IdHRwQ2xpZW50Q3JlZGVudGlhbHMKICAgIGltcGxlbWVudHMgSHR0cENsaWVudERpZ2VzdENyZWRlbnRpYWxzIHsKICBTdHJpbmcgdXNlcm5hbWU7CiAgU3RyaW5nIHBhc3N3b3JkOwoKICBfSHR0cENsaWVudERpZ2VzdENyZWRlbnRpYWxzKHRoaXMudXNlcm5hbWUsIHRoaXMucGFzc3dvcmQpOwoKICBfQXV0aGVudGljYXRpb25TY2hlbWUgZ2V0IHNjaGVtZSA9PiBfQXV0aGVudGljYXRpb25TY2hlbWUuRElHRVNUOwoKICBTdHJpbmcgYXV0aG9yaXphdGlvbihfQ3JlZGVudGlhbHMgY3JlZGVudGlhbHMsIF9IdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0KSB7CiAgICBTdHJpbmcgcmVxdWVzdFVyaSA9IHJlcXVlc3QuX3JlcXVlc3RVcmkoKTsKICAgIF9NRDUgaGFzaGVyID0gbmV3IF9NRDUoKQogICAgICAuLmFkZChyZXF1ZXN0Lm1ldGhvZC5jb2RlVW5pdHMpCiAgICAgIC4uYWRkKFtfQ2hhckNvZGUuQ09MT05dKQogICAgICAuLmFkZChyZXF1ZXN0VXJpLmNvZGVVbml0cyk7CiAgICB2YXIgaGEyID0gX0NyeXB0b1V0aWxzLmJ5dGVzVG9IZXgoaGFzaGVyLmNsb3NlKCkpOwoKICAgIFN0cmluZyBxb3A7CiAgICBTdHJpbmcgY25vbmNlOwogICAgU3RyaW5nIG5jOwogICAgaGFzaGVyID0gbmV3IF9NRDUoKS4uYWRkKGNyZWRlbnRpYWxzLmhhMS5jb2RlVW5pdHMpLi5hZGQoW19DaGFyQ29kZS5DT0xPTl0pOwogICAgaWYgKGNyZWRlbnRpYWxzLnFvcCA9PSAiYXV0aCIpIHsKICAgICAgcW9wID0gY3JlZGVudGlhbHMucW9wOwogICAgICBjbm9uY2UgPSBfQ3J5cHRvVXRpbHMuYnl0ZXNUb0hleChfQ3J5cHRvVXRpbHMuZ2V0UmFuZG9tQnl0ZXMoNCkpOwogICAgICArK2NyZWRlbnRpYWxzLm5vbmNlQ291bnQ7CiAgICAgIG5jID0gY3JlZGVudGlhbHMubm9uY2VDb3VudC50b1JhZGl4U3RyaW5nKDE2KTsKICAgICAgbmMgPSAiMDAwMDAwMDAiLnN1YnN0cmluZygwLCA4IC0gbmMubGVuZ3RoICsgMSkgKyBuYzsKICAgICAgaGFzaGVyCiAgICAgICAgLi5hZGQoY3JlZGVudGlhbHMubm9uY2UuY29kZVVuaXRzKQogICAgICAgIC4uYWRkKFtfQ2hhckNvZGUuQ09MT05dKQogICAgICAgIC4uYWRkKG5jLmNvZGVVbml0cykKICAgICAgICAuLmFkZChbX0NoYXJDb2RlLkNPTE9OXSkKICAgICAgICAuLmFkZChjbm9uY2UuY29kZVVuaXRzKQogICAgICAgIC4uYWRkKFtfQ2hhckNvZGUuQ09MT05dKQogICAgICAgIC4uYWRkKGNyZWRlbnRpYWxzLnFvcC5jb2RlVW5pdHMpCiAgICAgICAgLi5hZGQoW19DaGFyQ29kZS5DT0xPTl0pCiAgICAgICAgLi5hZGQoaGEyLmNvZGVVbml0cyk7CiAgICB9IGVsc2UgewogICAgICBoYXNoZXIKICAgICAgICAuLmFkZChjcmVkZW50aWFscy5ub25jZS5jb2RlVW5pdHMpCiAgICAgICAgLi5hZGQoW19DaGFyQ29kZS5DT0xPTl0pCiAgICAgICAgLi5hZGQoaGEyLmNvZGVVbml0cyk7CiAgICB9CiAgICB2YXIgcmVzcG9uc2UgPSBfQ3J5cHRvVXRpbHMuYnl0ZXNUb0hleChoYXNoZXIuY2xvc2UoKSk7CgogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKQogICAgICAuLndyaXRlKCdEaWdlc3QgJykKICAgICAgLi53cml0ZSgndXNlcm5hbWU9IiR1c2VybmFtZSInKQogICAgICAuLndyaXRlKCcsIHJlYWxtPSIke2NyZWRlbnRpYWxzLnJlYWxtfSInKQogICAgICAuLndyaXRlKCcsIG5vbmNlPSIke2NyZWRlbnRpYWxzLm5vbmNlfSInKQogICAgICAuLndyaXRlKCcsIHVyaT0iJHJlcXVlc3RVcmkiJykKICAgICAgLi53cml0ZSgnLCBhbGdvcml0aG09IiR7Y3JlZGVudGlhbHMuYWxnb3JpdGhtfSInKTsKICAgIGlmIChxb3AgPT0gImF1dGgiKSB7CiAgICAgIGJ1ZmZlcgogICAgICAgIC4ud3JpdGUoJywgcW9wPSIkcW9wIicpCiAgICAgICAgLi53cml0ZSgnLCBjbm9uY2U9IiRjbm9uY2UiJykKICAgICAgICAuLndyaXRlKCcsIG5jPSIkbmMiJyk7CiAgICB9CiAgICBidWZmZXIud3JpdGUoJywgcmVzcG9uc2U9IiRyZXNwb25zZSInKTsKICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIHZvaWQgYXV0aG9yaXplKF9DcmVkZW50aWFscyBjcmVkZW50aWFscywgSHR0cENsaWVudFJlcXVlc3QgcmVxdWVzdCkgewogICAgcmVxdWVzdC5oZWFkZXJzLnNldCgKICAgICAgICBIdHRwSGVhZGVycy5hdXRob3JpemF0aW9uSGVhZGVyLCBhdXRob3JpemF0aW9uKGNyZWRlbnRpYWxzLCByZXF1ZXN0KSk7CiAgfQoKICB2b2lkIGF1dGhvcml6ZVByb3h5KAogICAgICBfUHJveHlDcmVkZW50aWFscyBjcmVkZW50aWFscywgSHR0cENsaWVudFJlcXVlc3QgcmVxdWVzdCkgewogICAgcmVxdWVzdC5oZWFkZXJzLnNldChIdHRwSGVhZGVycy5wcm94eUF1dGhvcml6YXRpb25IZWFkZXIsCiAgICAgICAgYXV0aG9yaXphdGlvbihjcmVkZW50aWFscywgcmVxdWVzdCkpOwogIH0KfQoKY2xhc3MgX1JlZGlyZWN0SW5mbyBpbXBsZW1lbnRzIFJlZGlyZWN0SW5mbyB7CiAgZmluYWwgaW50IHN0YXR1c0NvZGU7CiAgZmluYWwgU3RyaW5nIG1ldGhvZDsKICBmaW5hbCBVcmkgbG9jYXRpb247CiAgY29uc3QgX1JlZGlyZWN0SW5mbyh0aGlzLnN0YXR1c0NvZGUsIHRoaXMubWV0aG9kLCB0aGlzLmxvY2F0aW9uKTsKfQoKU3RyaW5nIF9nZXRIdHRwVmVy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ZGFydEZvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faHR0cC93ZWJzb2NrZXRfaW1wbC5kYXJ0wACg0y8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0Ll9odHRwOwoKY29uc3QgU3RyaW5nIF93ZWJTb2NrZXRHVUlEID0gIjI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSI7CmNvbnN0IFN0cmluZyBfY2xpZW50Tm9Db250ZXh0VGFrZW92ZXIgPSAiY2xpZW50X25vX2NvbnRleHRfdGFrZW92ZXIiOwpjb25zdCBTdHJpbmcgX3NlcnZlck5vQ29udGV4dFRha2VvdmVyID0gInNlcnZlcl9ub19jb250ZXh0X3Rha2VvdmVyIjsKY29uc3QgU3RyaW5nIF9jbGllbnRNYXhXaW5kb3dCaXRzID0gImNsaWVudF9tYXhfd2luZG93X2JpdHMiOwpjb25zdCBTdHJpbmcgX3NlcnZlck1heFdpbmRvd0JpdHMgPSAic2VydmVyX21heF93aW5kb3dfYml0cyI7CgovLyBNYXRjaGVzIF9XZWJTb2NrZXRPcGNvZGUuCmNsYXNzIF9XZWJTb2NrZXRNZXNzYWdlVHlwZSB7CiAgc3RhdGljIGNvbnN0IGludCBOT05FID0gMDsKICBzdGF0aWMgY29uc3QgaW50IFRFWFQgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgQklOQVJZID0gMjsKfQoKY2xhc3MgX1dlYlNvY2tldE9wY29kZSB7CiAgc3RhdGljIGNvbnN0IGludCBDT05USU5VQVRJT04gPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgVEVYVCA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBCSU5BUlkgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgUkVTRVJWRURfMyA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBSRVNFUlZFRF80ID0gNDsKICBzdGF0aWMgY29uc3QgaW50IFJFU0VSVkVEXzUgPSA1OwogIHN0YXRpYyBjb25zdCBpbnQgUkVTRVJWRURfNiA9IDY7CiAgc3RhdGljIGNvbnN0IGludCBSRVNFUlZFRF83ID0gNzsKICBzdGF0aWMgY29uc3QgaW50IENMT1NFID0gODsKICBzdGF0aWMgY29uc3QgaW50IFBJTkcgPSA5OwogIHN0YXRpYyBjb25zdCBpbnQgUE9ORyA9IDEwOwogIHN0YXRpYyBjb25zdCBpbnQgUkVTRVJWRURfQiA9IDExOwogIHN0YXRpYyBjb25zdCBpbnQgUkVTRVJWRURfQyA9IDEyOwogIHN0YXRpYyBjb25zdCBpbnQgUkVTRVJWRURfRCA9IDEzOwogIHN0YXRpYyBjb25zdCBpbnQgUkVTRVJWRURfRSA9IDE0OwogIHN0YXRpYyBjb25zdCBpbnQgUkVTRVJWRURfRiA9IDE1Owp9CgpjbGFzcyBfRW5jb2RlZFN0cmluZyB7CiAgZmluYWwgTGlzdDxpbnQ+IGJ5dGVzOwogIF9FbmNvZGVkU3RyaW5nKHRoaXMuYnl0ZXMpOwp9CgovKioKICogIFN0b3JlcyB0aGUgaGVhZGVyIGFuZCBpbnRlZ2VyIHZhbHVlIGRlcml2ZWQgZnJvbSBuZWdvdGlhdGlvbiBvZgogKiAgY2xpZW50X21heF93aW5kb3dfYml0cyBhbmQgc2VydmVyX21heF93aW5kb3dfYml0cy4gaGVhZGVyVmFsdWUgd2lsbCBiZQogKiAgc2V0IGluIHRoZSBXZWJzb2NrZXQgcmVzcG9uc2UgaGVhZGVycy4KICovCmNsYXNzIF9Db21wcmVzc2lvbk1heFdpbmRvd0JpdHMgewogIFN0cmluZyBoZWFkZXJWYWx1ZTsKICBpbnQgbWF4V2luZG93Qml0czsKICBfQ29tcHJlc3Npb25NYXhXaW5kb3dCaXRzKFt0aGlzLmhlYWRlclZhbHVlLCB0aGlzLm1heFdpbmRvd0JpdHNdKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBoZWFkZXJWYWx1ZTsKfQoKLyoqCiAqIFRoZSB3ZWIgc29ja2V0IHByb3RvY29sIHRyYW5zZm9ybWVyIGhhbmRsZXMgdGhlIHByb3RvY29sIGJ5dGUgc3RyZWFtCiAqIHdoaWNoIGlzIHN1cHBsaWVkIHRocm91Z2ggdGhlIGBoYW5kbGVEYXRhYC4gQXMgdGhlIHByb3RvY29sIGlzIHByb2Nlc3NlZCwKICogaXQnbGwgb3V0cHV0IGZyYW1lIGRhdGEgYXMgZWl0aGVyIGEgTGlzdDxpbnQ+IG9yIFN0cmluZy4KICoKICogSW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHVzYWdlOiBCZSBzdXJlIHlvdSB1c2UgY2FuY2VsT25FcnJvciwgc28gdGhlCiAqIHNvY2tldCB3aWxsIGJlIGNsb3NlZCB3aGVuIHRoZSBwcm9jZXNzb3IgZW5jb3VudGVyIGFuIGVycm9yLiBOb3QgdXNpbmcgaXQKICogd2lsbCBsZWFkIHRvIHVuZGVmaW5lZCBiZWhhdmlvdXIuCiAqLwpjbGFzcyBfV2ViU29ja2V0UHJvdG9jb2xUcmFuc2Zvcm1lciBleHRlbmRzIFN0cmVhbVRyYW5zZm9ybWVyQmFzZTxMaXN0PGludD4sCiAgICAgICAgZHluYW1pYyAvKkxpc3Q8aW50PnxfV2ViU29ja2V0UGluZ3xfV2ViU29ja2V0UG9uZyovID4KICAgIGltcGxlbWVudHMgRXZlbnRTaW5rPExpc3Q8aW50Pj4gewogIHN0YXRpYyBjb25zdCBpbnQgU1RBUlQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgTEVOX0ZJUlNUID0gMTsKICBzdGF0aWMgY29uc3QgaW50IExFTl9SRVNUID0gMjsKICBzdGF0aWMgY29uc3QgaW50IE1BU0sgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgUEFZTE9BRCA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBDTE9TRUQgPSA1OwogIHN0YXRpYyBjb25zdCBpbnQgRkFJTFVSRSA9IDY7CiAgc3RhdGljIGNvbnN0IGludCBGSU4gPSAweDgwOwogIHN0YXRpYyBjb25zdCBpbnQgUlNWMSA9IDB4NDA7CiAgc3RhdGljIGNvbnN0IGludCBSU1YyID0gMHgyMDsKICBzdGF0aWMgY29uc3QgaW50IFJTVjMgPSAweDEwOwogIHN0YXRpYyBjb25zdCBpbnQgT1BDT0RFID0gMHhGOwoKICBpbnQgX3N0YXRlID0gU1RBUlQ7CiAgYm9vbCBfZmluID0gZmFsc2U7CiAgYm9vbCBfY29tcHJlc3NlZCA9IGZhbHNlOwogIGludCBfb3Bjb2RlID0gLTE7CiAgaW50IF9sZW4gPSAtMTsKICBib29sIF9tYXNrZWQgPSBmYWxzZTsKICBpbnQgX3JlbWFpbmluZ0xlbkJ5dGVzID0gLTE7CiAgaW50IF9yZW1haW5pbmdNYXNraW5nS2V5Qnl0ZXMgPSA0OwogIGludCBfcmVtYWluaW5nUGF5bG9hZEJ5dGVzID0gLTE7CiAgaW50IF91bm1hc2tpbmdJbmRleCA9IDA7CiAgaW50IF9jdXJyZW50TWVzc2FnZVR5cGUgPSBfV2ViU29ja2V0TWVzc2FnZVR5cGUuTk9ORTsKICBpbnQgY2xvc2VDb2RlID0gV2ViU29ja2V0U3RhdHVzLm5vU3RhdHVzUmVjZWl2ZWQ7CiAgU3RyaW5nIGNsb3NlUmVhc29uID0gIiI7CgogIEV2ZW50U2luazxkeW5hbWljIC8qTGlzdDxpbnQ+fF9XZWJTb2NrZXRQaW5nfF9XZWJTb2NrZXRQb25nKi8gPiBfZXZlbnRTaW5rOwoKICBmaW5hbCBib29sIF9zZXJ2ZXJTaWRlOwogIGZpbmFsIExpc3QgX21hc2tpbmdCeXRlcyA9IG5ldyBMaXN0KDQpOwogIGZpbmFsIEJ5dGVzQnVpbGRlciBfcGF5bG9hZCA9IG5ldyBCeXRlc0J1aWxkZXIoY29weTogZmFsc2UpOwoKICBfV2ViU29ja2V0UGVyTWVzc2FnZURlZmxhdGUgX2RlZmxhdGU7CiAgX1dlYlNvY2tldFByb3RvY29sVHJhbnNmb3JtZXIoW3RoaXMuX3NlcnZlclNpZGUgPSBmYWxzZSwgdGhpcy5fZGVmbGF0ZV0pOwoKICBTdHJlYW08ZHluYW1pYyAvKkxpc3Q8aW50PnxfV2ViU29ja2V0UGluZ3xfV2ViU29ja2V0UG9uZyovID4gYmluZCgKICAgICAgU3RyZWFtPExpc3Q8aW50Pj4gc3RyZWFtKSB7CiAgICByZXR1cm4gbmV3IFN0cmVhbS5ldmVudFRyYW5zZm9ybWVkKHN0cmVhbSwgKEV2ZW50U2luayBldmVudFNpbmspIHsKICAgICAgaWYgKF9ldmVudFNpbmsgIT0gbnVsbCkgewogICAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJXZWJTb2NrZXQgdHJhbnNmb3JtZXIgYWxyZWFkeSB1c2VkLiIpOwogICAgICB9CiAgICAgIF9ldmVudFNpbmsgPSBldmVudFNpbms7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgfQoKICB2b2lkIGFkZEVycm9yKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIF9ldmVudFNpbmsuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9ldmVudFNpbmsuY2xvc2UoKTsKICB9CgogIC8qKgogICAqIFByb2Nlc3MgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSB1bmRlcmx5aW5nIGNvbW11bmljYXRpb24gY2hhbm5lbC4KICAgKi8KICB2b2lkIGFkZChMaXN0PGludD4gYnl0ZXMpIHsKICAgIHZhciBidWZmZXIgPSBieXRlcyBpcyBVaW50OExpc3QgPyBieXRlcyA6IG5ldyBVaW50OExpc3QuZnJvbUxpc3QoYnl0ZXMpOwogICAgaW50IGluZGV4ID0gMDsKICAgIGludCBsYXN0SW5kZXggPSBidWZmZXIubGVuZ3RoOwogICAgaWYgKF9zdGF0ZSA9PSBDTE9TRUQpIHsKICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiRGF0YSBvbiBjbG9zZWQgY29ubmVjdGlvbiIpOwogICAgfQogICAgaWYgKF9zdGF0ZSA9PSBGQUlMVVJFKSB7CiAgICAgIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24oIkRhdGEgb24gZmFpbGVkIGNvbm5lY3Rpb24iKTsKICAgIH0KICAgIHdoaWxlICgoaW5kZXggPCBsYXN0SW5kZXgpICYmIF9zdGF0ZSAhPSBDTE9TRUQgJiYgX3N0YXRlICE9IEZBSUxVUkUpIHsKICAgICAgaW50IGJ5dGUgPSBidWZmZXJbaW5kZXhdOwogICAgICBpZiAoX3N0YXRlIDw9IExFTl9SRVNUKSB7CiAgICAgICAgaWYgKF9zdGF0ZSA9PSBTVEFSVCkgewogICAgICAgICAgX2ZpbiA9IChieXRlICYgRklOKSAhPSAwOwoKICAgICAgICAgIGlmICgoYnl0ZSAmIChSU1YyIHwgUlNWMykpICE9IDApIHsKICAgICAgICAgICAgLy8gVGhlIFJTVjIsIFJTVjMgYml0cyBtdXN0IGJvdGggYmUgemVyby4KICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiUHJvdG9jb2wgZXJyb3IiKTsKICAgICAgICAgIH0KCiAgICAgICAgICBfb3Bjb2RlID0gKGJ5dGUgJiBPUENPREUpOwoKICAgICAgICAgIGlmIChfb3Bjb2RlICE9IF9XZWJTb2NrZXRPcGNvZGUuQ09OVElOVUFUSU9OKSB7CiAgICAgICAgICAgIGlmICgoYnl0ZSAmIFJTVjEpICE9IDApIHsKICAgICAgICAgICAgICBfY29tcHJlc3NlZCA9IHRydWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX2NvbXByZXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIGlmIChfb3Bjb2RlIDw9IF9XZWJTb2NrZXRPcGNvZGUuQklOQVJZKSB7CiAgICAgICAgICAgIGlmIChfb3Bjb2RlID09IF9XZWJTb2NrZXRPcGNvZGUuQ09OVElOVUFUSU9OKSB7CiAgICAgICAgICAgICAgaWYgKF9jdXJyZW50TWVzc2FnZVR5cGUgPT0gX1dlYlNvY2tldE1lc3NhZ2VUeXBlLk5PTkUpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24oIlByb3RvY29sIGVycm9yIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGFzc2VydChfb3Bjb2RlID09IF9XZWJTb2NrZXRPcGNvZGUuVEVYVCB8fAogICAgICAgICAgICAgICAgICBfb3Bjb2RlID09IF9XZWJTb2NrZXRPcGNvZGUuQklOQVJZKTsKICAgICAgICAgICAgICBpZiAoX2N1cnJlbnRNZXNzYWdlVHlwZSAhPSBfV2ViU29ja2V0TWVzc2FnZVR5cGUuTk9ORSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiUHJvdG9jb2wgZXJyb3IiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX2N1cnJlbnRNZXNzYWdlVHlwZSA9IF9vcGNvZGU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoX29wY29kZSA+PSBfV2ViU29ja2V0T3Bjb2RlLkNMT1NFICYmCiAgICAgICAgICAgICAgX29wY29kZSA8PSBfV2ViU29ja2V0T3Bjb2RlLlBPTkcpIHsKICAgICAgICAgICAgLy8gQ29udHJvbCBmcmFtZXMgY2Fubm90IGJlIGZyYWdtZW50ZWQuCiAgICAgICAgICAgIGlmICghX2ZpbikgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiUHJvdG9jb2wgZXJyb3IiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24oIlByb3RvY29sIGVycm9yIik7CiAgICAgICAgICB9CiAgICAgICAgICBfc3RhdGUgPSBMRU5fRklSU1Q7CiAgICAgICAgfSBlbHNlIGlmIChfc3RhdGUgPT0gTEVOX0ZJUlNUKSB7CiAgICAgICAgICBfbWFza2VkID0gKGJ5dGUgJiAweDgwKSAhPSAwOwogICAgICAgICAgX2xlbiA9IGJ5dGUgJiAweDdGOwogICAgICAgICAgaWYgKF9pc0NvbnRyb2xGcmFtZSgpICYmIF9sZW4gPiAxMjUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiUHJvdG9jb2wgZXJyb3IiKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChfbGVuID09IDEyNikgewogICAgICAgICAgICBfbGVuID0gMDsKICAgICAgICAgICAgX3JlbWFpbmluZ0xlbkJ5dGVzID0gMjsKICAgICAgICAgICAgX3N0YXRlID0gTEVOX1JFU1Q7CiAgICAgICAgICB9IGVsc2UgaWYgKF9sZW4gPT0gMTI3KSB7CiAgICAgICAgICAgIF9sZW4gPSAwOwogICAgICAgICAgICBfcmVtYWluaW5nTGVuQnl0ZXMgPSA4OwogICAgICAgICAgICBfc3RhdGUgPSBMRU5fUkVTVDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFzc2VydChfbGVuIDwgMTI2KTsKICAgICAgICAgICAgX2xlbmd0aERvbmUoKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgYXNzZXJ0KF9zdGF0ZSA9PSBMRU5fUkVTVCk7CiAgICAgICAgICBfbGVuID0gX2xlbiA8PCA4IHwgYnl0ZTsKICAgICAgICAgIF9yZW1haW5pbmdMZW5CeXRlcy0tOwogICAgICAgICAgaWYgKF9yZW1haW5pbmdMZW5CeXRlcyA9PSAwKSB7CiAgICAgICAgICAgIF9sZW5ndGhEb25lKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmIChfc3RhdGUgPT0gTUFTSykgewogICAgICAgICAgX21hc2tpbmdCeXRlc1s0IC0gX3JlbWFpbmluZ01hc2tpbmdLZXlCeXRlcy0tXSA9IGJ5dGU7CiAgICAgICAgICBpZiAoX3JlbWFpbmluZ01hc2tpbmdLZXlCeXRlcyA9PSAwKSB7CiAgICAgICAgICAgIF9tYXNrRG9uZSgpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhc3NlcnQoX3N0YXRlID09IFBBWUxPQUQpOwogICAgICAgICAgLy8gVGhlIHBheWxvYWQgaXMgbm90IGhhbmRsZWQgb25lIGJ5dGUgYXQgYSB0aW1lIGJ1dCBpbiBibG9ja3MuCiAgICAgICAgICBpbnQgcGF5bG9hZExlbmd0aCA9IG1pbihsYXN0SW5kZXggLSBpbmRleCwgX3JlbWFpbmluZ1BheWxvYWRCeXRlcyk7CiAgICAgICAgICBfcmVtYWluaW5nUGF5bG9hZEJ5dGVzIC09IHBheWxvYWRMZW5ndGg7CiAgICAgICAgICAvLyBVbm1hc2sgcGF5bG9hZCBpZiBtYXNrZWQuCiAgICAgICAgICBpZiAoX21hc2tlZCkgewogICAgICAgICAgICBfdW5tYXNrKGluZGV4LCBwYXlsb2FkTGVuZ3RoLCBidWZmZXIpOwogICAgICAgICAgfQogICAgICAgICAgLy8gQ29udHJvbCBmcmFtZSBhbmQgZGF0YSBmcmFtZSBzaGFyZSBfcGF5bG9hZHMuCiAgICAgICAgICBfcGF5bG9hZC5hZGQobmV3IFVpbnQ4TGlzdC52aWV3KAogICAgICAgICAgICAgIGJ1ZmZlci5idWZmZXIsIGJ1ZmZlci5vZmZzZXRJbkJ5dGVzICsgaW5kZXgsIHBheWxvYWRMZW5ndGgpKTsKICAgICAgICAgIGluZGV4ICs9IHBheWxvYWRMZW5ndGg7CiAgICAgICAgICBpZiAoX2lzQ29udHJvbEZyYW1lKCkpIHsKICAgICAgICAgICAgaWYgKF9yZW1haW5pbmdQYXlsb2FkQnl0ZXMgPT0gMCkgX2NvbnRyb2xGcmFtZUVuZCgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKF9jdXJyZW50TWVzc2FnZVR5cGUgIT0gX1dlYlNvY2tldE1lc3NhZ2VUeXBlLlRFWFQgJiYKICAgICAgICAgICAgICAgIF9jdXJyZW50TWVzc2FnZVR5cGUgIT0gX1dlYlNvY2tldE1lc3NhZ2VUeXBlLkJJTkFSWSkgewogICAgICAgICAgICAgIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24oIlByb3RvY29sIGVycm9yIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKF9yZW1haW5pbmdQYXlsb2FkQnl0ZXMgPT0gMCkgX21lc3NhZ2VGcmFtZUVuZCgpOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIEhhY2sgLSBhcyB3ZSBhbHdheXMgZG8gaW5kZXgrKyBiZWxvdy4KICAgICAgICAgIGluZGV4LS07CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IGJ5dGUuCiAgICAgIGluZGV4Kys7CiAgICB9CiAgfQoKICB2b2lkIF91bm1hc2soaW50IGluZGV4LCBpbnQgbGVuZ3RoLCBVaW50OExpc3QgYnVmZmVyKSB7CiAgICBjb25zdCBpbnQgQkxPQ0tfU0laRSA9IDE2OwogICAgLy8gU2tpcCBJbnQzMng0LXZlcnNpb24gaWYgbWVzc2FnZSBpcyBzbWFsbC4KICAgIGlmIChsZW5ndGggPj0gQkxPQ0tfU0laRSkgewogICAgICAvLyBTdGFydCBieSBhbGlnbmluZyB0byAxNiBieXRlcy4KICAgICAgZmluYWwgaW50IHN0YXJ0T2Zmc2V0ID0gQkxPQ0tfU0laRSAtIChpbmRleCAmIDE1KTsKICAgICAgZmluYWwgaW50IGVuZCA9IGluZGV4ICsgc3RhcnRPZmZzZXQ7CiAgICAgIGZvciAoaW50IGkgPSBpbmRleDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgICAgYnVmZmVyW2ldIF49IF9tYXNraW5nQnl0ZXNbX3VubWFza2luZ0luZGV4KysgJiAzXTsKICAgICAgfQogICAgICBpbmRleCArPSBzdGFydE9mZnNldDsKICAgICAgbGVuZ3RoIC09IHN0YXJ0T2Zmc2V0OwogICAgICBmaW5hbCBpbnQgYmxvY2tDb3VudCA9IGxlbmd0aCB+LyBCTE9DS19TSVpFOwogICAgICBpZiAoYmxvY2tDb3VudCA+IDApIHsKICAgICAgICAvLyBDcmVhdGUgbWFzayBibG9jay4KICAgICAgICBpbnQgbWFzayA9IDA7CiAgICAgICAgZm9yIChpbnQgaSA9IDM7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICBtYXNrID0gKG1hc2sgPDwgOCkgfCBfbWFza2luZ0J5dGVzWyhfdW5tYXNraW5nSW5kZXggKyBpKSAmIDNdOwogICAgICAgIH0KICAgICAgICBJbnQzMng0IGJsb2NrTWFzayA9IG5ldyBJbnQzMng0KG1hc2ssIG1hc2ssIG1hc2ssIG1hc2spOwogICAgICAgIEludDMyeDRMaXN0IGJsb2NrQnVmZmVyID0gbmV3IEludDMyeDRMaXN0LnZpZXcoCiAgICAgICAgICAgIGJ1ZmZlci5idWZmZXIsIGJ1ZmZlci5vZmZzZXRJbkJ5dGVzICsgaW5kZXgsIGJsb2NrQ291bnQpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmxvY2tCdWZmZXIubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGJsb2NrQnVmZmVyW2ldIF49IGJsb2NrTWFzazsKICAgICAgICB9CiAgICAgICAgZmluYWwgaW50IGJ5dGVzID0gYmxvY2tDb3VudCAqIEJMT0NLX1NJWkU7CiAgICAgICAgaW5kZXggKz0gYnl0ZXM7CiAgICAgICAgbGVuZ3RoIC09IGJ5dGVzOwogICAgICB9CiAgICB9CiAgICAvLyBIYW5kbGUgZW5kLgogICAgZmluYWwgaW50IGVuZCA9IGluZGV4ICsgbGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IGluZGV4OyBpIDwgZW5kOyBpKyspIHsKICAgICAgYnVmZmVyW2ldIF49IF9tYXNraW5nQnl0ZXNbX3VubWFza2luZ0luZGV4KysgJiAzXTsKICAgIH0KICB9CgogIHZvaWQgX2xlbmd0aERvbmUoKSB7CiAgICBpZiAoX21hc2tlZCkgewogICAgICBpZiAoIV9zZXJ2ZXJTaWRlKSB7CiAgICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiUmVjZWl2ZWQgbWFza2VkIGZyYW1lIGZyb20gc2VydmVyIik7CiAgICAgIH0KICAgICAgX3N0YXRlID0gTUFTSzsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChfc2VydmVyU2lkZSkgewogICAgICAgIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24oIlJlY2VpdmVkIHVubWFza2VkIGZyYW1lIGZyb20gY2xpZW50Iik7CiAgICAgIH0KICAgICAgX3JlbWFpbmluZ1BheWxvYWRCeXRlcyA9IF9sZW47CiAgICAgIF9zdGFydFBheWxvYWQoKTsKICAgIH0KICB9CgogIHZvaWQgX21hc2tEb25lKCkgewogICAgX3JlbWFpbmluZ1BheWxvYWRCeXRlcyA9IF9sZW47CiAgICBfc3RhcnRQYXlsb2FkKCk7CiAgfQoKICB2b2lkIF9zdGFydFBheWxvYWQoKSB7CiAgICAvLyBJZiB0aGVyZSBpcyBubyBhY3R1YWwgcGF5bG9hZCBwZXJmb3JtIHBlcmZvcm0gY2FsbGJhY2tzIHdpdGhvdXQKICAgIC8vIGdvaW5nIHRocm91Z2ggdGhlIFBBWUxPQUQgc3RhdGUuCiAgICBpZiAoX3JlbWFpbmluZ1BheWxvYWRCeXRlcyA9PSAwKSB7CiAgICAgIGlmIChfaXNDb250cm9sRnJhbWUoKSkgewogICAgICAgIHN3aXRjaCAoX29wY29kZSkgewogICAgICAgICAgY2FzZSBfV2ViU29ja2V0T3Bjb2RlLkNMT1NFOgogICAgICAgICAgICBfc3RhdGUgPSBDTE9TRUQ7CiAgICAgICAgICAgIF9ldmVudFNpbmsuY2xvc2UoKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIF9XZWJTb2NrZXRPcGNvZGUuUElORzoKICAgICAgICAgICAgX2V2ZW50U2luay5hZGQobmV3IF9XZWJTb2NrZXRQaW5nKCkpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgX1dlYlNvY2tldE9wY29kZS5QT05HOgogICAgICAgICAgICBfZXZlbnRTaW5rLmFkZChuZXcgX1dlYlNvY2tldFBvbmcoKSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBfcHJlcGFyZUZvck5leHRGcmFtZSgpOwogICAgICB9IGVsc2UgewogICAgICAgIF9tZXNzYWdlRnJhbWVFbmQoKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgX3N0YXRlID0gUEFZTE9BRDsKICAgIH0KICB9CgogIHZvaWQgX21lc3NhZ2VGcmFtZUVuZCgpIHsKICAgIGlmIChfZmluKSB7CiAgICAgIHZhciBieXRlcyA9IF9wYXlsb2FkLnRha2VCeXRlcygpOwogICAgICBpZiAoX2RlZmxhdGUgIT0gbnVsbCAmJiBfY29tcHJlc3NlZCkgewogICAgICAgIGJ5dGVzID0gX2RlZmxhdGUucHJvY2Vzc0luY29taW5nTWVzc2FnZShieXRlcyk7CiAgICAgIH0KCiAgICAgIHN3aXRjaCAoX2N1cnJlbnRNZXNzYWdlVHlwZSkgewogICAgICAgIGNhc2UgX1dlYlNvY2tldE1lc3NhZ2VUeXBlLlRFWFQ6CiAgICAgICAgICBfZXZlbnRTaW5rLmFkZCh1dGY4LmRlY29kZShieXRlcykpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBfV2ViU29ja2V0TWVzc2FnZVR5cGUuQklOQVJZOgogICAgICAgICAgX2V2ZW50U2luay5hZGQoYnl0ZXMpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgX2N1cnJlbnRNZXNzYWdlVHlwZSA9IF9XZWJTb2NrZXRNZXNzYWdlVHlwZS5OT05FOwogICAgfQogICAgX3ByZXBhcmVGb3JOZXh0RnJhbWUoKTsKICB9CgogIHZvaWQgX2NvbnRyb2xGcmFtZUVuZCgpIHsKICAgIHN3aXRjaCAoX29wY29kZSkgewogICAgICBjYXNlIF9XZWJTb2NrZXRPcGNvZGUuQ0xPU0U6CiAgICAgICAgY2xvc2VDb2RlID0gV2ViU29ja2V0U3RhdHVzLm5vU3RhdHVzUmVjZWl2ZWQ7CiAgICAgICAgdmFyIHBheWxvYWQgPSBfcGF5bG9hZC50YWtlQnl0ZXMoKTsKICAgICAgICBpZiAocGF5bG9hZC5sZW5ndGggPiAwKSB7CiAgICAgICAgICBpZiAocGF5bG9hZC5sZW5ndGggPT0gMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgV2ViU29ja2V0RXhjZXB0aW9uKCJQcm90b2NvbCBlcnJvciIpOwogICAgICAgICAgfQogICAgICAgICAgY2xvc2VDb2RlID0gcGF5bG9hZFswXSA8PCA4IHwgcGF5bG9hZFsxXTsKICAgICAgICAgIGlmIChjbG9zZUNvZGUgPT0gV2ViU29ja2V0U3RhdHVzLm5vU3RhdHVzUmVjZWl2ZWQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiUHJvdG9jb2wgZXJyb3IiKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChwYXlsb2FkLmxlbmd0aCA+IDIpIHsKICAgICAgICAgICAgY2xvc2VSZWFzb24gPSB1dGY4LmRlY29kZShwYXlsb2FkLnN1Ymxpc3QoMikpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBfc3RhdGUgPSBDTE9TRUQ7CiAgICAgICAgX2V2ZW50U2luay5jbG9zZSgpOwogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBfV2ViU29ja2V0T3Bjb2RlLlBJTkc6CiAgICAgICAgX2V2ZW50U2luay5hZGQobmV3IF9XZWJTb2NrZXRQaW5nKF9wYXlsb2FkLnRha2VCeXRlcygpKSk7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIF9XZWJTb2NrZXRPcGNvZGUuUE9ORzoKICAgICAgICBfZXZlbnRTaW5rLmFkZChuZXcgX1dlYlNvY2tldFBvbmcoX3BheWxvYWQudGFrZUJ5dGVzKCkpKTsKICAgICAgICBicmVhazsKICAgIH0KICAgIF9wcmVwYXJlRm9yTmV4dEZyYW1lKCk7CiAgfQoKICBib29sIF9pc0NvbnRyb2xGcmFtZSgpIHsKICAgIHJldHVybiBfb3Bjb2RlID09IF9XZWJTb2NrZXRPcGNvZGUuQ0xPU0UgfHwKICAgICAgICBfb3Bjb2RlID09IF9XZWJTb2NrZXRPcGNvZGUuUElORyB8fAogICAgICAgIF9vcGNvZGUgPT0gX1dlYlNvY2tldE9wY29kZS5QT05HOwogIH0KCiAgdm9pZCBfcHJlcGFyZUZvck5leHRGcmFtZSgpIHsKICAgIGlmIChfc3RhdGUgIT0gQ0xPU0VEICYmIF9zdGF0ZSAhPSBGQUlMVVJFKSBfc3RhdGUgPSBTVEFSVDsKICAgIF9maW4gPSBmYWxzZTsKICAgIF9vcGNvZGUgPSAtMTsKICAgIF9sZW4gPSAtMTsKICAgIF9yZW1haW5pbmdMZW5CeXRlcyA9IC0xOwogICAgX3JlbWFpbmluZ01hc2tpbmdLZXlCeXRlcyA9IDQ7CiAgICBfcmVtYWluaW5nUGF5bG9hZEJ5dGVzID0gLTE7CiAgICBfdW5tYXNraW5nSW5kZXggPSAwOwogIH0KfQoKY2xhc3MgX1dlYlNvY2tldFBpbmcgewogIGZpbmFsIExpc3Q8aW50PiBwYXlsb2FkOwogIF9XZWJTb2NrZXRQaW5nKFt0aGlzLnBheWxvYWQgPSBudWxsXSk7Cn0KCmNsYXNzIF9XZWJTb2NrZXRQb25nIHsKICBmaW5hbCBMaXN0PGludD4gcGF5bG9hZDsKICBfV2ViU29ja2V0UG9uZyhbdGhpcy5wYXlsb2FkID0gbnVsbF0pOwp9Cgp0eXBlZGVmIC8qU3RyaW5nfEZ1dHVyZTxTdHJpbmc+Ki8gX1Byb3RvY29sU2VsZWN0b3IoTGlzdDxTdHJpbmc+IHByb3RvY29scyk7CgpjbGFzcyBfV2ViU29ja2V0VHJhbnNmb3JtZXJJbXBsCiAgICBleHRlbmRzIFN0cmVhbVRyYW5zZm9ybWVyQmFzZTxIdHRwUmVxdWVzdCwgV2ViU29ja2V0PgogICAgaW1wbGVtZW50cyBXZWJTb2NrZXRUcmFuc2Zvcm1lciB7CiAgZmluYWwgU3RyZWFtQ29udHJvbGxlcjxXZWJTb2NrZXQ+IF9jb250cm9sbGVyID0KICAgICAgbmV3IFN0cmVhbUNvbnRyb2xsZXI8V2ViU29ja2V0PihzeW5jOiB0cnVlKTsKICBmaW5hbCBfUHJvdG9jb2xTZWxlY3RvciBfcHJvdG9jb2xTZWxlY3RvcjsKICBmaW5hbCBDb21wcmVzc2lvbk9wdGlvbnMgX2NvbXByZXNzaW9uOwoKICBfV2ViU29ja2V0VHJhbnNmb3JtZXJJbXBsKHRoaXMuX3Byb3RvY29sU2VsZWN0b3IsIHRoaXMuX2NvbXByZXNzaW9uKTsKCiAgU3RyZWFtPFdlYlNvY2tldD4gYmluZChTdHJlYW08SHR0cFJlcXVlc3Q+IHN0cmVhbSkgewogICAgc3RyZWFtLmxpc3RlbigocmVxdWVzdCkgewogICAgICBfdXBncmFkZShyZXF1ZXN0LCBfcHJvdG9jb2xTZWxlY3RvciwgX2NvbXByZXNzaW9uKQogICAgICAgICAgLnRoZW4oKFdlYlNvY2tldCB3ZWJTb2NrZXQpID0+IF9jb250cm9sbGVyLmFkZCh3ZWJTb2NrZXQpKQogICAgICAgICAgLmNhdGNoRXJyb3IoX2NvbnRyb2xsZXIuYWRkRXJyb3IpOwogICAgfSwgb25Eb25lOiAoKSB7CiAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICB9KTsKCiAgICByZXR1cm4gX2NvbnRyb2xsZXIuc3RyZWFtOwogIH0KCiAgc3RhdGljIExpc3Q8U3RyaW5nPiBfdG9rZW5pemVGaWVsZFZhbHVlKFN0cmluZyBoZWFkZXJWYWx1ZSkgewogICAgTGlzdDxTdHJpbmc+IHRva2VucyA9IG5ldyBMaXN0PFN0cmluZz4oKTsKICAgIGludCBzdGFydCA9IDA7CiAgICBpbnQgaW5kZXggPSAwOwogICAgd2hpbGUgKGluZGV4IDwgaGVhZGVyVmFsdWUubGVuZ3RoKSB7CiAgICAgIGlmIChoZWFkZXJWYWx1ZVtpbmRleF0gPT0gIiwiKSB7CiAgICAgICAgdG9rZW5zLmFkZChoZWFkZXJWYWx1ZS5zdWJzdHJpbmcoc3RhcnQsIGluZGV4KSk7CiAgICAgICAgc3RhcnQgPSBpbmRleCArIDE7CiAgICAgIH0gZWxzZSBpZiAoaGVhZGVyVmFsdWVbaW5kZXhdID09ICIgIiB8fCBoZWFkZXJWYWx1ZVtpbmRleF0gPT0gIlx0IikgewogICAgICAgIHN0YXJ0Kys7CiAgICAgIH0KICAgICAgaW5kZXgrKzsKICAgIH0KICAgIHRva2Vucy5hZGQoaGVhZGVyVmFsdWUuc3Vic3RyaW5nKHN0YXJ0LCBpbmRleCkpOwogICAgcmV0dXJuIHRva2VuczsKICB9CgogIHN0YXRpYyBGdXR1cmU8V2ViU29ja2V0PiBfdXBncmFkZShIdHRwUmVxdWVzdCByZXF1ZXN0LAogICAgICBfUHJvdG9jb2xTZWxlY3RvciBfcHJvdG9jb2xTZWxlY3RvciwgQ29tcHJlc3Npb25PcHRpb25zIGNvbXByZXNzaW9uKSB7CiAgICB2YXIgcmVzcG9uc2UgPSByZXF1ZXN0LnJlc3BvbnNlOwogICAgaWYgKCFfaXNVcGdyYWRlUmVxdWVzdChyZXF1ZXN0KSkgewogICAgICAvLyBTZW5kIGVycm9yIHJlc3BvbnNlLgogICAgICByZXNwb25zZQogICAgICAgIC4uc3RhdHVzQ29kZSA9IEh0dHBTdGF0dXMuYmFkUmVxdWVzdAogICAgICAgIC4uY2xvc2UoKTsKICAgICAgcmV0dXJuIG5ldyBGdXR1cmUuZXJyb3IoCiAgICAgICAgICBuZXcgV2ViU29ja2V0RXhjZXB0aW9uKCJJbnZhbGlkIFdlYlNvY2tldCB1cGdyYWRlIHJlcXVlc3QiKSk7CiAgICB9CgogICAgRnV0dXJlPFdlYlNvY2tldD4gdXBncmFkZShTdHJpbmcgcHJvdG9jb2wpIHsKICAgICAgLy8gU2VuZCB0aGUgdXBncmFkZSByZXNwb25zZS4KICAgICAgcmVzcG9uc2UKICAgICAgICAuLnN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzLnN3aXRjaGluZ1Byb3RvY29scwogICAgICAgIC4uaGVhZGVycy5hZGQoSHR0cEhlYWRlcnMuY29ubmVjdGlvbkhlYWRlciwgIlVwZ3JhZGUiKQogICAgICAgIC4uaGVhZGVycy5hZGQoSHR0cEhlYWRlcnMudXBncmFkZUhlYWRlciwgIndlYnNvY2tldCIpOwogICAgICBTdHJpbmcga2V5ID0gcmVxdWVzdC5oZWFkZXJzLnZhbHVlKCJTZWMtV2ViU29ja2V0LUtleSIpOwogICAgICBfU0hBMSBzaGExID0gbmV3IF9TSEExKCk7CiAgICAgIHNoYTEuYWRkKCIka2V5JF93ZWJTb2NrZXRHVUlEIi5jb2RlVW5pdHMpOwogICAgICBTdHJpbmcgYWNjZXB0ID0gX0NyeXB0b1V0aWxzLmJ5dGVzVG9CYXNlNjQoc2hhMS5jbG9zZSgpKTsKICAgICAgcmVzcG9uc2UuaGVhZGVycy5hZGQoIlNlYy1XZWJTb2NrZXQtQWNjZXB0IiwgYWNjZXB0KTsKICAgICAgaWYgKHByb3RvY29sICE9IG51bGwpIHsKICAgICAgICByZXNwb25zZS5oZWFkZXJzLmFkZCgiU2VjLVdlYlNvY2tldC1Qcm90b2NvbCIsIHByb3RvY29sKTsKICAgICAgfQoKICAgICAgdmFyIGRlZmxhdGUgPSBfbmVnb3RpYXRlQ29tcHJlc3Npb24ocmVxdWVzdCwgcmVzcG9uc2UsIGNvbXByZXNzaW9uKTsKCiAgICAgIHJlc3BvbnNlLmhlYWRlcnMuY29udGVudExlbmd0aCA9IDA7CiAgICAgIHJldHVybiByZXNwb25zZS5kZXRhY2hTb2NrZXQoKS50aGVuPFdlYlNvY2tldD4oKHNvY2tldCkgPT4KICAgICAgICAgIG5ldyBfV2ViU29ja2V0SW1wbC5fZnJvbVNvY2tldCgKICAgICAgICAgICAgICBzb2NrZXQsIHByb3RvY29sLCBjb21wcmVzc2lvbiwgdHJ1ZSwgZGVmbGF0ZSkpOwogICAgfQoKICAgIHZhciBwcm90b2NvbHMgPSByZXF1ZXN0LmhlYWRlcnNbJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnXTsKICAgIGlmIChwcm90b2NvbHMgIT0gbnVsbCAmJiBfcHJvdG9jb2xTZWxlY3RvciAhPSBudWxsKSB7CiAgICAgIC8vIFRoZSBzdWdnZXN0ZWQgcHJvdG9jb2xzIGNhbiBiZSBzcHJlYWQgb3ZlciBtdWx0aXBsZSBsaW5lcywgZWFjaAogICAgICAvLyBjb25zaXN0aW5nIG9mIG11bHRpcGxlIHByb3RvY29scy4gVG8gdW5pZnkgYWxsIG9mIHRoZW0sIGZpcnN0IGpvaW4KICAgICAgLy8gdGhlIGxpc3RzIHdpdGggJywgJyBhbmQgdGhlbiB0b2tlbml6ZS4KICAgICAgcHJvdG9jb2xzID0gX3Rva2VuaXplRmllbGRWYWx1ZShwcm90b2NvbHMuam9pbignLCAnKSk7CiAgICAgIHJldHVybiBuZXcgRnV0dXJlPFN0cmluZz4oKCkgPT4gX3Byb3RvY29sU2VsZWN0b3IocHJvdG9jb2xzKSkKICAgICAgICAgIC50aGVuPFN0cmluZz4oKHByb3RvY29sKSB7CiAgICAgICAgaWYgKHByb3RvY29scy5pbmRleE9mKHByb3RvY29sKSA8IDApIHsKICAgICAgICAgIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24oCiAgICAgICAgICAgICAgIlNlbGVjdGVkIHByb3RvY29sIGlzIG5vdCBpbiB0aGUgbGlzdCBvZiBhdmFpbGFibGUgcHJvdG9jb2xzIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwcm90b2NvbDsKICAgICAgfSkuY2F0Y2hFcnJvcigoZXJyb3IpIHsKICAgICAgICByZXNwb25zZQogICAgICAgICAgLi5zdGF0dXNDb2RlID0gSHR0cFN0YXR1cy5pbnRlcm5hbFNlcnZlckVycm9yCiAgICAgICAgICAuLmNsb3NlKCk7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgIH0pLnRoZW48V2ViU29ja2V0Pih1cGdyYWRlKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB1cGdyYWRlKG51bGwpOwogICAgfQogIH0KCiAgc3RhdGljIF9XZWJTb2NrZXRQZXJNZXNzYWdlRGVmbGF0ZSBfbmVnb3RpYXRlQ29tcHJlc3Npb24oSHR0cFJlcXVlc3QgcmVxdWVzdCwKICAgICAgSHR0cFJlc3BvbnNlIHJlc3BvbnNlLCBDb21wcmVzc2lvbk9wdGlvbnMgY29tcHJlc3Npb24pIHsKICAgIHZhciBleHRlbnNpb25IZWFkZXIgPSByZXF1ZXN0LmhlYWRlcnMudmFsdWUoIlNlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucyIpOwoKICAgIGV4dGVuc2lvbkhlYWRlciA/Pz0gIiI7CgogICAgdmFyIGh2ID0gSGVhZGVyVmFsdWUucGFyc2UoZXh0ZW5zaW9uSGVhZGVyLCB2YWx1ZVNlcGFyYXRvcjogJywnKTsKICAgIGlmIChjb21wcmVzc2lvbi5lbmFibGVkICYmIGh2LnZhbHVlID09IF9XZWJTb2NrZXRJbXBsLlBFUl9NRVNTQUdFX0RFRkxBVEUpIHsKICAgICAgdmFyIGluZm8gPSBjb21wcmVzc2lvbi5fY3JlYXRlSGVhZGVyKGh2KTsKCiAgICAgIHJlc3BvbnNlLmhlYWRlcnMuYWRkKCJTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMiLCBpbmZvLmhlYWRlclZhbHVlKTsKICAgICAgdmFyIHNlcnZlck5vQ29udGV4dFRha2VvdmVyID0KICAgICAgICAgIChodi5wYXJhbWV0ZXJzLmNvbnRhaW5zS2V5KF9zZXJ2ZXJOb0NvbnRleHRUYWtlb3ZlcikgJiYKICAgICAgICAgICAgICBjb21wcmVzc2lvbi5zZXJ2ZXJOb0NvbnRleHRUYWtlb3Zlcik7CiAgICAgIHZhciBjbGllbnROb0NvbnRleHRUYWtlb3ZlciA9CiAgICAgICAgICAoaHYucGFyYW1ldGVycy5jb250YWluc0tleShfY2xpZW50Tm9Db250ZXh0VGFrZW92ZXIpICYmCiAgICAgICAgICAgICAgY29tcHJlc3Npb24uY2xpZW50Tm9Db250ZXh0VGFrZW92ZXIpOwogICAgICB2YXIgZGVmbGF0ZSA9IG5ldyBfV2ViU29ja2V0UGVyTWVzc2FnZURlZmxhdGUoCiAgICAgICAgICBzZXJ2ZXJOb0NvbnRleHRUYWtlb3Zlcjogc2VydmVyTm9Db250ZXh0VGFrZW92ZXIsCiAgICAgICAgICBjbGllbnROb0NvbnRleHRUYWtlb3ZlcjogY2xpZW50Tm9Db250ZXh0VGFrZW92ZXIsCiAgICAgICAgICBzZXJ2ZXJNYXhXaW5kb3dCaXRzOiBpbmZvLm1heFdpbmRvd0JpdHMsCiAgICAgICAgICBjbGllbnRNYXhXaW5kb3dCaXRzOiBpbmZvLm1heFdpbmRvd0JpdHMsCiAgICAgICAgICBzZXJ2ZXJTaWRlOiB0cnVlKTsKCiAgICAgIHJldHVybiBkZWZsYXRlOwogICAgfQoKICAgIHJldHVybiBudWxsOwogIH0KCiAgc3RhdGljIGJvb2wgX2lzVXBncmFkZVJlcXVlc3QoSHR0cFJlcXVlc3QgcmVxdWVzdCkgewogICAgaWYgKHJlcXVlc3QubWV0aG9kICE9ICJHRVQiKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChyZXF1ZXN0LmhlYWRlcnNbSHR0cEhlYWRlcnMuY29ubmVjdGlvbkhlYWRlcl0gPT0gbnVsbCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBib29sIGlzVXBncmFkZSA9IGZhbHNlOwogICAgcmVxdWVzdC5oZWFkZXJzW0h0dHBIZWFkZXJzLmNvbm5lY3Rpb25IZWFkZXJdLmZvckVhY2goKFN0cmluZyB2YWx1ZSkgewogICAgICBpZiAodmFsdWUudG9Mb3dlckNhc2UoKSA9PSAidXBncmFkZSIpIGlzVXBncmFkZSA9IHRydWU7CiAgICB9KTsKICAgIGlmICghaXNVcGdyYWRlKSByZXR1cm4gZmFsc2U7CiAgICBTdHJpbmcgdXBncmFkZSA9IHJlcXVlc3QuaGVhZGVycy52YWx1ZShIdHRwSGVhZGVycy51cGdyYWRlSGVhZGVyKTsKICAgIGlmICh1cGdyYWRlID09IG51bGwgfHwgdXBncmFkZS50b0xvd2VyQ2FzZSgpICE9ICJ3ZWJzb2NrZXQiKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIFN0cmluZyB2ZXJzaW9uID0gcmVxdWVzdC5oZWFkZXJzLnZhbHVlKCJTZWMtV2ViU29ja2V0LVZlcnNpb24iKTsKICAgIGlmICh2ZXJzaW9uID09IG51bGwgfHwgdmVyc2lvbiAhPSAiMTMiKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIFN0cmluZyBrZXkgPSByZXF1ZXN0LmhlYWRlcnMudmFsdWUoIlNlYy1XZWJTb2NrZXQtS2V5Iik7CiAgICBpZiAoa2V5ID09IG51bGwpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQp9CgpjbGFzcyBfV2ViU29ja2V0UGVyTWVzc2FnZURlZmxhdGUgewogIGJvb2wgc2VydmVyTm9Db250ZXh0VGFrZW92ZXI7CiAgYm9vbCBjbGllbnROb0NvbnRleHRUYWtlb3ZlcjsKICBpbnQgY2xpZW50TWF4V2luZG93Qml0czsKICBpbnQgc2VydmVyTWF4V2luZG93Qml0czsKICBib29sIHNlcnZlclNpZGU7CgogIFJhd1pMaWJGaWx0ZXIgZGVjb2RlcjsKICBSYXdaTGliRmlsdGVyIGVuY29kZXI7CgogIF9XZWJTb2NrZXRQZXJNZXNzYWdlRGVmbGF0ZSgKICAgICAge3RoaXMuY2xpZW50TWF4V2luZG93Qml0czogX1dlYlNvY2tldEltcGwuREVGQVVMVF9XSU5ET1dfQklUUywKICAgICAgdGhpcy5zZXJ2ZXJNYXhXaW5kb3dCaXRzOiBfV2ViU29ja2V0SW1wbC5ERUZBVUxUX1dJTkRPV19CSVRTLAogICAgICB0aGlzLnNlcnZlck5vQ29udGV4dFRha2VvdmVyOiBmYWxzZSwKICAgICAgdGhpcy5jbGllbnROb0NvbnRleHRUYWtlb3ZlcjogZmFsc2UsCiAgICAgIHRoaXMuc2VydmVyU2lkZTogZmFsc2V9KTsKCiAgdm9pZCBfZW5zdXJlRGVjb2RlcigpIHsKICAgIGlmIChkZWNvZGVyID09IG51bGwpIHsKICAgICAgZGVjb2RlciA9IG5ldyBSYXdaTGliRmlsdGVyLmluZmxhdGVGaWx0ZXIoCiAgICAgICAgICB3aW5kb3dCaXRzOiBzZXJ2ZXJTaWRlID8gY2xpZW50TWF4V2luZG93Qml0cyA6IHNlcnZlck1heFdpbmRvd0JpdHMsCiAgICAgICAgICByYXc6IHRydWUpOwogICAgfQogIH0KCiAgdm9pZCBfZW5zdXJlRW5jb2RlcigpIHsKICAgIGlmIChlbmNvZGVyID09IG51bGwpIHsKICAgICAgZW5jb2RlciA9IG5ldyBSYXdaTGliRmlsdGVyLmRlZmxhdGVGaWx0ZXIoCiAgICAgICAgICB3aW5kb3dCaXRzOiBzZXJ2ZXJTaWRlID8gc2VydmVyTWF4V2luZG93Qml0cyA6IGNsaWVudE1heFdpbmRvd0JpdHMsCiAgICAgICAgICByYXc6IHRydWUpOwogICAgfQogIH0KCiAgVWludDhMaXN0IHByb2Nlc3NJbmNvbWluZ01lc3NhZ2UoTGlzdDxpbnQ+IG1zZykgewogICAgX2Vuc3VyZURlY29kZXIoKTsKCiAgICB2YXIgZGF0YSA9IDxpbnQ+W107CiAgICBkYXRhLmFkZEFsbChtc2cpOwogICAgZGF0YS5hZGRBbGwoY29uc3QgWzB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmZdKTsKCiAgICBkZWNvZGVyLnByb2Nlc3MoZGF0YSwgMCwgZGF0YS5sZW5ndGgpOwogICAgZmluYWwgcmVzdWx0ID0gbmV3IEJ5dGVzQnVpbGRlcigpOwogICAgTGlzdDxpbnQ+IG91dDsKCiAgICB3aGlsZSAoKG91dCA9IGRlY29kZXIucHJvY2Vzc2VkKCkpICE9IG51bGwpIHsKICAgICAgcmVzdWx0LmFkZChvdXQpOwogICAgfQoKICAgIGlmICgoc2VydmVyU2lkZSAmJiBjbGllbnROb0NvbnRleHRUYWtlb3ZlcikgfHwKICAgICAgICAoIXNlcnZlclNpZGUgJiYgc2VydmVyTm9Db250ZXh0VGFrZW92ZXIpKSB7CiAgICAgIGRlY29kZXIgPSBudWxsOwogICAgfQoKICAgIHJldHVybiByZXN1bHQudGFrZUJ5dGVzKCk7CiAgfQoKICBMaXN0PGludD4gcHJvY2Vzc091dGdvaW5nTWVzc2FnZShMaXN0PGludD4gbXNnKSB7CiAgICBfZW5zdXJlRW5jb2RlcigpOwogICAgdmFyIHJlc3VsdCA9IDxpbnQ+W107CiAgICBVaW50OExpc3QgYnVmZmVyOwoKICAgIGlmIChtc2cgaXMhIFVpbnQ4TGlzdCkgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChtc2dbaV0gPCAwIHx8IDI1NSA8IG1zZ1tpXSkgewogICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkxpc3QgZWxlbWVudCBpcyBub3QgYSBieXRlIHZhbHVlICIKICAgICAgICAgICAgICAiKHZhbHVlICR7bXNnW2ldfSBhdCBpbmRleCAkaSkiKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYnVmZmVyID0gbmV3IFVpbnQ4TGlzdC5mcm9tTGlzdChtc2cpOwogICAgfSBlbHNlIHsKICAgICAgYnVmZmVyID0gbXNnOwogICAgfQoKICAgIGVuY29kZXIucHJvY2VzcyhidWZmZXIsIDAsIGJ1ZmZlci5sZW5ndGgpOwoKICAgIExpc3Q8aW50PiBvdXQ7CiAgICB3aGlsZSAoKG91dCA9IGVuY29kZXIucHJvY2Vzc2VkKCkpICE9IG51bGwpIHsKICAgICAgcmVzdWx0LmFkZEFsbChvdXQpOwogICAgfQoKICAgIGlmICgoIXNlcnZlclNpZGUgJiYgY2xpZW50Tm9Db250ZXh0VGFrZW92ZXIpIHx8CiAgICAgICAgKHNlcnZlclNpZGUgJiYgc2VydmVyTm9Db250ZXh0VGFrZW92ZXIpKSB7CiAgICAgIGVuY29kZXIgPSBudWxsOwogICAgfQoKICAgIGlmIChyZXN1bHQubGVuZ3RoID4gNCkgewogICAgICByZXN1bHQgPSByZXN1bHQuc3VibGlzdCgwLCByZXN1bHQubGVuZ3RoIC0gNCk7CiAgICB9CgogICAgLy8gUkZDIDc2OTIgNy4yLjMuNi4gIkdlbmVyYXRpbmcgYW4gRW1wdHkgRnJhZ21lbnQiIHNheXMgdGhhdCBpZiB0aGUKICAgIC8vIGNvbXByZXNzaW9uIGxpYnJhcnkgZG9lc24ndCBnZW5lcmF0ZSBhbnkgZGF0YSB3aGVuIHRoZSBidWZlciBpcyBlbXB0eSwKICAgIC8vIHRoZW4gYW4gZW1wdHkgdW5jb21wcmVzc2VkIGRlZmxhdGUgYmxvY2sgaXMgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLiBUaGUKICAgIC8vIDB4MDAgYmxvY2sgaGFzIHRoZSBCRklOQUwgaGVhZGVyIGJpdCBzZXQgdG8gMCBhbmQgdGhlIEJUWVBFIGhlYWRlciBzZXQgdG8KICAgIC8vIDAwIGFsb25nIHdpdGggNSBiaXRzIG9mIHBhZGRpbmcuIFRoaXMgYmxvY2sgZGVjb2RlcyB0byB6ZXJvIGJ5dGVzLgogICAgaWYgKHJlc3VsdC5sZW5ndGggPT0gMCkgewogICAgICByZXR1cm4gWzB4MDBdOwogICAgfQoKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CgovLyBUT0RPKGFqb2huc2VuKTogTWFrZSB0aGlzIHRyYW5zZm9ybWVyIHJldXNhYmxlLgpjbGFzcyBfV2ViU29ja2V0T3V0Z29pbmdUcmFuc2Zvcm1lcgogICAgZXh0ZW5kcyBTdHJlYW1UcmFuc2Zvcm1lckJhc2U8ZHluYW1pYywgTGlzdDxpbnQ+PiBpbXBsZW1lbnRzIEV2ZW50U2luayB7CiAgZmluYWwgX1dlYlNvY2tldEltcGwgd2ViU29ja2V0OwogIEV2ZW50U2luazxMaXN0PGludD4+IF9ldmVudFNpbms7CgogIF9XZWJTb2NrZXRQZXJNZXNzYWdlRGVmbGF0ZSBfZGVmbGF0ZUhlbHBlcjsKCiAgX1dlYlNvY2tldE91dGdvaW5nVHJhbnNmb3JtZXIodGhpcy53ZWJTb2NrZXQpIHsKICAgIF9kZWZsYXRlSGVscGVyID0gd2ViU29ja2V0Ll9kZWZsYXRlOwogIH0KCiAgU3RyZWFtPExpc3Q8aW50Pj4gYmluZChTdHJlYW0gc3RyZWFtKSB7CiAgICByZXR1cm4gbmV3IFN0cmVhbTxMaXN0PGludD4+LmV2ZW50VHJhbnNmb3JtZWQoc3RyZWFtLAogICAgICAgIChFdmVudFNpbms8TGlzdDxpbnQ+PiBldmVudFNpbmspIHsKICAgICAgaWYgKF9ldmVudFNpbmsgIT0gbnVsbCkgewogICAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJXZWJTb2NrZXQgdHJhbnNmb3JtZXIgYWxyZWFkeSB1c2VkIik7CiAgICAgIH0KICAgICAgX2V2ZW50U2luayA9IGV2ZW50U2luazsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9KTsKICB9CgogIHZvaWQgYWRkKG1lc3NhZ2UpIHsKICAgIGlmIChtZXNzYWdlIGlzIF9XZWJTb2NrZXRQb25nKSB7CiAgICAgIGFkZEZyYW1lKF9XZWJTb2NrZXRPcGNvZGUuUE9ORywgbWVzc2FnZS5wYXlsb2FkKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKG1lc3NhZ2UgaXMgX1dlYlNvY2tldFBpbmcpIHsKICAgICAgYWRkRnJhbWUoX1dlYlNvY2tldE9wY29kZS5QSU5HLCBtZXNzYWdlLnBheWxvYWQpOwogICAgICByZXR1cm47CiAgICB9CiAgICBMaXN0PGludD4gZGF0YTsKICAgIGludCBvcGNvZGU7CiAgICBpZiAobWVzc2FnZSAhPSBudWxsKSB7CiAgICAgIGlmIChtZXNzYWdlIGlzIFN0cmluZykgewogICAgICAgIG9wY29kZSA9IF9XZWJTb2NrZXRPcGNvZGUuVEVYVDsKICAgICAgICBkYXRhID0gdXRmOC5lbmNvZGUobWVzc2FnZSk7CiAgICAgIH0gZWxzZSBpZiAobWVzc2FnZSBpcyBMaXN0PGludD4pIHsKICAgICAgICBvcGNvZGUgPSBfV2ViU29ja2V0T3Bjb2RlLkJJTkFSWTsKICAgICAgICBkYXRhID0gbWVzc2FnZTsKICAgICAgfSBlbHNlIGlmIChtZXNzYWdlIGlzIF9FbmNvZGVkU3RyaW5nKSB7CiAgICAgICAgb3Bjb2RlID0gX1dlYlNvY2tldE9wY29kZS5URVhUOwogICAgICAgIGRhdGEgPSBtZXNzYWdlLmJ5dGVzOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKG1lc3NhZ2UpOwogICAgICB9CgogICAgICBpZiAoX2RlZmxhdGVIZWxwZXIgIT0gbnVsbCkgewogICAgICAgIGRhdGEgPSBfZGVmbGF0ZUhlbHBlci5wcm9jZXNzT3V0Z29pbmdNZXNzYWdlKGRhdGEpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBvcGNvZGUgPSBfV2ViU29ja2V0T3Bjb2RlLlRFWFQ7CiAgICB9CiAgICBhZGRGcmFtZShvcGNvZGUsIGRhdGEpOwogIH0KCiAgdm9pZCBhZGRFcnJvcihPYmplY3QgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBfZXZlbnRTaW5rLmFkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIHZvaWQgY2xvc2UoKSB7CiAgICBpbnQgY29kZSA9IHdlYlNvY2tldC5fb3V0Q2xvc2VDb2RlOwogICAgU3RyaW5nIHJlYXNvbiA9IHdlYlNvY2tldC5fb3V0Q2xvc2VSZWFzb247CiAgICBMaXN0PGludD4gZGF0YTsKICAgIGlmIChjb2RlICE9IG51bGwpIHsKICAgICAgZGF0YSA9IG5ldyBMaXN0PGludD4oKTsKICAgICAgZGF0YS5hZGQoKGNvZGUgPj4gOCkgJiAweEZGKTsKICAgICAgZGF0YS5hZGQoY29kZSAmIDB4RkYpOwogICAgICBpZiAocmVhc29uICE9IG51bGwpIHsKICAgICAgICBkYXRhLmFkZEFsbCh1dGY4LmVuY29kZShyZWFzb24pKTsKICAgICAgfQogICAgfQogICAgYWRkRnJhbWUoX1dlYlNvY2tldE9wY29kZS5DTE9TRSwgZGF0YSk7CiAgICBfZXZlbnRTaW5rLmNsb3NlKCk7CiAgfQoKICB2b2lkIGFkZEZyYW1lKGludCBvcGNvZGUsIExpc3Q8aW50PiBkYXRhKSB7CiAgICBjcmVhdGVGcmFtZSgKICAgICAgICAgICAgb3Bjb2RlLAogICAgICAgICAgICBkYXRhLAogICAgICAgICAgICB3ZWJTb2NrZXQuX3NlcnZlclNpZGUsCiAgICAgICAgICAgIF9kZWZsYXRlSGVscGVyICE9IG51bGwgJiYKICAgICAgICAgICAgICAgIChvcGNvZGUgPT0gX1dlYlNvY2tldE9wY29kZS5URVhUIHx8CiAgICAgICAgICAgICAgICAgICAgb3Bjb2RlID09IF9XZWJTb2NrZXRPcGNvZGUuQklOQVJZKSkKICAgICAgICAuZm9yRWFjaCgoZSkgewogICAgICBfZXZlbnRTaW5rLmFkZChlKTsKICAgIH0pOwogIH0KCiAgc3RhdGljIEl0ZXJhYmxlPExpc3Q8aW50Pj4gY3JlYXRlRnJhbWUoCiAgICAgIGludCBvcGNvZGUsIExpc3Q8aW50PiBkYXRhLCBib29sIHNlcnZlclNpZGUsIGJvb2wgY29tcHJlc3NlZCkgewogICAgYm9vbCBtYXNrID0gIXNlcnZlclNpZGU7IC8vIE1hc2tpbmcgbm90IGltcGxlbWVudGVkIGZvciBzZXJ2ZXIuCiAgICBpbnQgZGF0YUxlbmd0aCA9IGRhdGEgPT0gbnVsbCA/IDAgOiBkYXRhLmxlbmd0aDsKICAgIC8vIERldGVybWluZSB0aGUgaGVhZGVyIHNpemUuCiAgICBpbnQgaGVhZGVyU2l6ZSA9IChtYXNrKSA/IDYgOiAyOwogICAgaWYgKGRhdGFMZW5ndGggPiA2NTUzNSkgewogICAgICBoZWFkZXJTaXplICs9IDg7CiAgICB9IGVsc2UgaWYgKGRhdGFMZW5ndGggPiAxMjUpIHsKICAgICAgaGVhZGVyU2l6ZSArPSAyOwogICAgfQogICAgVWludDhMaXN0IGhlYWRlciA9IG5ldyBVaW50OExpc3QoaGVhZGVyU2l6ZSk7CiAgICBpbnQgaW5kZXggPSAwOwoKICAgIC8vIFNldCBGSU4gYW5kIG9wY29kZS4KICAgIHZhciBob2MgPSBfV2ViU29ja2V0UHJvdG9jb2xUcmFuc2Zvcm1lci5GSU4gfAogICAgICAgIChjb21wcmVzc2VkID8gX1dlYlNvY2tldFByb3RvY29sVHJhbnNmb3JtZXIuUlNWMSA6IDApIHwKICAgICAgICAob3Bjb2RlICYgX1dlYlNvY2tldFByb3RvY29sVHJhbnNmb3JtZXIuT1BDT0RFKTsKCiAgICBoZWFkZXJbaW5kZXgrK10gPSBob2M7CiAgICAvLyBEZXRlcm1pbmUgc2l6ZSBhbmQgcG9zaXRpb24gb2YgbGVuZ3RoIGZpZWxkLgogICAgaW50IGxlbmd0aEJ5dGVzID0gMTsKICAgIGlmIChkYXRhTGVuZ3RoID4gNjU1MzUpIHsKICAgICAgaGVhZGVyW2luZGV4KytdID0gMTI3OwogICAgICBsZW5ndGhCeXRlcyA9IDg7CiAgICB9IGVsc2UgaWYgKGRhdGFMZW5ndGggPiAxMjUpIHsKICAgICAgaGVhZGVyW2luZGV4KytdID0gMTI2OwogICAgICBsZW5ndGhCeXRlcyA9IDI7CiAgICB9CiAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIGluIG5ldHdvcmsgYnl0ZSBvcmRlciBpbnRvIHRoZSBoZWFkZXIuCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aEJ5dGVzOyBpKyspIHsKICAgICAgaGVhZGVyW2luZGV4KytdID0gZGF0YUxlbmd0aCA+PiAoKChsZW5ndGhCeXRlcyAtIDEpIC0gaSkgKiA4KSAmIDB4RkY7CiAgICB9CiAgICBpZiAobWFzaykgewogICAgICBoZWFkZXJbMV0gfD0gMSA8PCA3OwogICAgICB2YXIgbWFza0J5dGVzID0gX0NyeXB0b1V0aWxzLmdldFJhbmRvbUJ5dGVzKDQpOwogICAgICBoZWFkZXIuc2V0UmFuZ2UoaW5kZXgsIGluZGV4ICsgNCwgbWFza0J5dGVzKTsKICAgICAgaW5kZXggKz0gNDsKICAgICAgaWYgKGRhdGEgIT0gbnVsbCkgewogICAgICAgIFVpbnQ4TGlzdCBsaXN0OwogICAgICAgIC8vIElmIHRoaXMgaXMgYSB0ZXh0IG1lc3NhZ2UganVzdCBkbyB0aGUgbWFza2luZyBpbnNpZGUgdGhlCiAgICAgICAgLy8gZW5jb2RlZCBkYXRhLgogICAgICAgIGlmIChvcGNvZGUgPT0gX1dlYlNvY2tldE9wY29kZS5URVhUICYmIGRhdGEgaXMgVWludDhMaXN0KSB7CiAgICAgICAgICBsaXN0ID0gZGF0YTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGRhdGEgaXMgVWludDhMaXN0KSB7CiAgICAgICAgICAgIGxpc3QgPSBuZXcgVWludDhMaXN0LmZyb21MaXN0KGRhdGEpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGlzdCA9IG5ldyBVaW50OExpc3QoZGF0YS5sZW5ndGgpOwogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBpZiAoZGF0YVtpXSA8IDAgfHwgMjU1IDwgZGF0YVtpXSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkxpc3QgZWxlbWVudCBpcyBub3QgYSBieXRlIHZhbHVlICIKICAgICAgICAgICAgICAgICAgICAiKHZhbHVlICR7ZGF0YVtpXX0gYXQgaW5kZXggJGkpIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGxpc3RbaV0gPSBkYXRhW2ldOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IGludCBCTE9DS19TSVpFID0gMTY7CiAgICAgICAgaW50IGJsb2NrQ291bnQgPSBsaXN0Lmxlbmd0aCB+LyBCTE9DS19TSVpFOwogICAgICAgIGlmIChibG9ja0NvdW50ID4gMCkgewogICAgICAgICAgLy8gQ3JlYXRlIG1hc2sgYmxvY2suCiAgICAgICAgICBpbnQgbWFzayA9IDA7CiAgICAgICAgICBmb3IgKGludCBpID0gMzsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgbWFzayA9IChtYXNrIDw8IDgpIHwgbWFza0J5dGVzW2ldOwogICAgICAgICAgfQogICAgICAgICAgSW50MzJ4NCBibG9ja01hc2sgPSBuZXcgSW50MzJ4NChtYXNrLCBtYXNrLCBtYXNrLCBtYXNrKTsKICAgICAgICAgIEludDMyeDRMaXN0IGJsb2NrQnVmZmVyID0KICAgICAgICAgICAgICBuZXcgSW50MzJ4NExpc3QudmlldyhsaXN0LmJ1ZmZlciwgbGlzdC5vZmZzZXRJbkJ5dGVzLCBibG9ja0NvdW50KTsKICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmxvY2tCdWZmZXIubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgYmxvY2tCdWZmZXJbaV0gXj0gYmxvY2tNYXNrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBIYW5kbGUgZW5kLgogICAgICAgIGZvciAoaW50IGkgPSBibG9ja0NvdW50ICogQkxPQ0tfU0laRTsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGxpc3RbaV0gXj0gbWFza0J5dGVzW2kgJiAzXTsKICAgICAgICB9CiAgICAgICAgZGF0YSA9IGxpc3Q7CiAgICAgIH0KICAgIH0KICAgIGFzc2VydChpbmRleCA9PSBoZWFkZXJTaXplKTsKICAgIGlmIChkYXRhID09IG51bGwpIHsKICAgICAgcmV0dXJuIFtoZWFkZXJdOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIFtoZWFkZXIsIGRhdGFdOwogICAgfQogIH0KfQoKY2xhc3MgX1dlYlNvY2tldENvbnN1bWVyIGltcGxlbWVudHMgU3RyZWFtQ29uc3VtZXIgewogIGZpbmFsIF9XZWJTb2NrZXRJbXBsIHdlYlNvY2tldDsKICBmaW5hbCBTb2NrZXQgc29ja2V0OwogIFN0cmVhbUNvbnRyb2xsZXIgX2NvbnRyb2xsZXI7CiAgU3RyZWFtU3Vic2NyaXB0aW9uIF9zdWJzY3JpcHRpb247CiAgYm9vbCBfaXNzdWVkUGF1c2UgPSBmYWxzZTsKICBib29sIF9jbG9zZWQgPSBmYWxzZTsKICBDb21wbGV0ZXIgX2Nsb3NlQ29tcGxldGVyID0gbmV3IENvbXBsZXRlcjxXZWJTb2NrZXQ+KCk7CiAgQ29tcGxldGVyIF9jb21wbGV0ZXI7CgogIF9XZWJTb2NrZXRDb25zdW1lcih0aGlzLndlYlNvY2tldCwgdGhpcy5zb2NrZXQpOwoKICB2b2lkIF9vbkxpc3RlbigpIHsKICAgIGlmIChfc3Vic2NyaXB0aW9uICE9IG51bGwpIHsKICAgICAgX3N1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgIH0KICB9CgogIHZvaWQgX29uUGF1c2UoKSB7CiAgICBpZiAoX3N1YnNjcmlwdGlvbiAhPSBudWxsKSB7CiAgICAgIF9zdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9pc3N1ZWRQYXVzZSA9IHRydWU7CiAgICB9CiAgfQoKICB2b2lkIF9vblJlc3VtZSgpIHsKICAgIGlmIChfc3Vic2NyaXB0aW9uICE9IG51bGwpIHsKICAgICAgX3N1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9pc3N1ZWRQYXVzZSA9IGZhbHNlOwogICAgfQogIH0KCiAgdm9pZCBfY2FuY2VsKCkgewogICAgaWYgKF9zdWJzY3JpcHRpb24gIT0gbnVsbCkgewogICAgICB2YXIgc3Vic2NyaXB0aW9uID0gX3N1YnNjcmlwdGlvbjsKICAgICAgX3N1YnNjcmlwdGlvbiA9IG51bGw7CiAgICAgIHN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgIH0KICB9CgogIF9lbnN1cmVDb250cm9sbGVyKCkgewogICAgaWYgKF9jb250cm9sbGVyICE9IG51bGwpIHJldHVybjsKICAgIF9jb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXIoCiAgICAgICAgc3luYzogdHJ1ZSwKICAgICAgICBvblBhdXNlOiBfb25QYXVzZSwKICAgICAgICBvblJlc3VtZTogX29uUmVzdW1lLAogICAgICAgIG9uQ2FuY2VsOiBfb25MaXN0ZW4pOwogICAgdmFyIHN0cmVhbSA9IF9jb250cm9sbGVyLnN0cmVhbQogICAgICAgIC50cmFuc2Zvcm0obmV3IF9XZWJTb2NrZXRPdXRnb2luZ1RyYW5zZm9ybWVyKHdlYlNvY2tldCkpOwogICAgc29ja2V0LmFkZFN0cmVhbShzdHJlYW0pLnRoZW4oKF8pIHsKICAgICAgX2RvbmUoKTsKICAgICAgX2Nsb3NlQ29tcGxldGVyLmNvbXBsZXRlKHdlYlNvY2tldCk7CiAgICB9LCBvbkVycm9yOiAoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgICBfY2xvc2VkID0gdHJ1ZTsKICAgICAgX2NhbmNlbCgpOwogICAgICBpZiAoZXJyb3IgaXMgQXJndW1lbnRFcnJvcikgewogICAgICAgIGlmICghX2RvbmUoZXJyb3IsIHN0YWNrVHJhY2UpKSB7CiAgICAgICAgICBfY2xvc2VDb21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIF9kb25lKCk7CiAgICAgICAgX2Nsb3NlQ29tcGxldGVyLmNvbXBsZXRlKHdlYlNvY2tldCk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgYm9vbCBfZG9uZShbZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIGlmIChfY29tcGxldGVyID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIGlmIChlcnJvciAhPSBudWxsKSB7CiAgICAgIF9jb21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICB9IGVsc2UgewogICAgICBfY29tcGxldGVyLmNvbXBsZXRlKHdlYlNvY2tldCk7CiAgICB9CiAgICBfY29tcGxldGVyID0gbnVsbDsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgRnV0dXJlIGFkZFN0cmVhbSh2YXIgc3RyZWFtKSB7CiAgICBpZiAoX2Nsb3NlZCkgewogICAgICBzdHJlYW0ubGlzdGVuKG51bGwpLmNhbmNlbCgpOwogICAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZSh3ZWJTb2NrZXQpOwogICAgfQogICAgX2Vuc3VyZUNvbnRyb2xsZXIoKTsKICAgIF9jb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyKCk7CiAgICBfc3Vic2NyaXB0aW9uID0gc3RyZWFtLmxpc3RlbigoZGF0YSkgewogICAgICBfY29udHJvbGxlci5hZGQoZGF0YSk7CiAgICB9LCBvbkRvbmU6IF9kb25lLCBvbkVycm9yOiBfZG9uZSwgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICBpZiAoX2lzc3VlZFBhdXNlKSB7CiAgICAgIF9zdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgICAgX2lzc3VlZFBhdXNlID0gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gX2NvbXBsZXRlci5mdXR1cmU7CiAgfQoKICBGdXR1cmUgY2xvc2UoKSB7CiAgICBfZW5zdXJlQ29udHJvbGxlcigpOwogICAgRnV0dXJlIGNsb3NlU29ja2V0KCkgewogICAgICByZXR1cm4gc29ja2V0LmNsb3NlKCkuY2F0Y2hFcnJvcigoXykge30pLnRoZW4oKF8pID0+IHdlYlNvY2tldCk7CiAgICB9CgogICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgIHJldHVybiBfY2xvc2VDb21wbGV0ZXIuZnV0dXJlLnRoZW4oKF8pID0+IGNsb3NlU29ja2V0KCkpOwogIH0KCiAgdm9pZCBhZGQoZGF0YSkgewogICAgaWYgKF9jbG9zZWQpIHJldHVybjsKICAgIF9lbnN1cmVDb250cm9sbGVyKCk7CiAgICAvLyBTdG9wIHNlbmRpbmcgbWVzc2FnZSBpZiBfY29udHJvbGxlciBoYXMgYmVlbiBjbG9zZWQuCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMzc0NDEKICAgIGlmIChfY29udHJvbGxlci5pc0Nsb3NlZCkgcmV0dXJuOwogICAgX2NvbnRyb2xsZXIuYWRkKGRhdGEpOwogIH0KCiAgdm9pZCBjbG9zZVNvY2tldCgpIHsKICAgIF9jbG9zZWQgPSB0cnVlOwogICAgX2NhbmNlbCgpOwogICAgY2xvc2UoKTsKICB9Cn0KCmNsYXNzIF9XZWJTb2NrZXRJbXBsIGV4dGVuZHMgU3RyZWFtIHdpdGggX1NlcnZpY2VPYmplY3QgaW1wbGVtZW50cyBXZWJTb2NrZXQgewogIC8vIFVzZSBkZWZhdWx0IE1hcCBzbyB3ZSBrZWVwIG9yZGVyLgogIHN0YXRpYyBNYXA8aW50LCBfV2ViU29ja2V0SW1wbD4gX3dlYlNvY2tldHMgPSBuZXcgTWFwPGludCwgX1dlYlNvY2tldEltcGw+KCk7CiAgc3RhdGljIGNvbnN0IGludCBERUZBVUxUX1dJTkRPV19CSVRTID0gMTU7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBQRVJfTUVTU0FHRV9ERUZMQVRFID0gInBlcm1lc3NhZ2UtZGVmbGF0ZSI7CgogIGZpbmFsIFN0cmluZyBwcm90b2NvbDsKCiAgU3RyZWFtQ29udHJvbGxlciBfY29udHJvbGxlcjsKICBTdHJlYW1TdWJzY3JpcHRpb24gX3N1YnNjcmlwdGlvbjsKICBTdHJlYW1TaW5rIF9zaW5rOwoKICBmaW5hbCBfc29ja2V0OwogIGZpbmFsIGJvb2wgX3NlcnZlclNpZGU7CiAgaW50IF9yZWFkeVN0YXRlID0gV2ViU29ja2V0LmNvbm5lY3Rpbmc7CiAgYm9vbCBfd3JpdGVDbG9zZWQgPSBmYWxzZTsKICBpbnQgX2Nsb3NlQ29kZTsKICBTdHJpbmcgX2Nsb3NlUmVhc29uOwogIER1cmF0aW9uIF9waW5nSW50ZXJ2YWw7CiAgVGltZXIgX3BpbmdUaW1lcjsKICBfV2ViU29ja2V0Q29uc3VtZXIgX2NvbnN1bWVyOwoKICBpbnQgX291dENsb3NlQ29kZTsKICBTdHJpbmcgX291dENsb3NlUmVhc29uOwogIFRpbWVyIF9jbG9zZVRpbWVyOwogIF9XZWJTb2NrZXRQZXJNZXNzYWdlRGVmbGF0ZSBfZGVmbGF0ZTsKCiAgc3RhdGljIGZpbmFsIEh0dHBDbGllbnQgX2h0dHBDbGllbnQgPSBuZXcgSHR0cENsaWVudCgpOwoKICBzdGF0aWMgRnV0dXJlPFdlYlNvY2tldD4gY29ubmVjdCgKICAgICAgU3RyaW5nIHVybCwgSXRlcmFibGU8U3RyaW5nPiBwcm90b2NvbHMsIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGhlYWRlcnMsCiAgICAgIHtDb21wcmVzc2lvbk9wdGlvbnMgY29tcHJlc3Npb246IENvbXByZXNzaW9uT3B0aW9ucy5jb21wcmVzc2lvbkRlZmF1bHR9KSB7CiAgICBVcmkgdXJpID0gVXJpLnBhcnNlKHVybCk7CiAgICBpZiAodXJpLnNjaGVtZSAhPSAid3MiICYmIHVyaS5zY2hlbWUgIT0gIndzcyIpIHsKICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQgVVJMIHNjaGVtZSAnJHt1cmkuc2NoZW1lfSciKTsKICAgIH0KCiAgICBSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbSgpOwogICAgLy8gR2VuZXJhdGUgMTYgcmFuZG9tIGJ5dGVzLgogICAgVWludDhMaXN0IG5vbmNlRGF0YSA9IG5ldyBVaW50OExpc3QoMTYpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAgICAgIG5vbmNlRGF0YVtpXSA9IHJhbmRvbS5uZXh0SW50KDI1Nik7CiAgICB9CiAgICBTdHJpbmcgbm9uY2UgPSBfQ3J5cHRvVXRpbHMuYnl0ZXNUb0Jhc2U2NChub25jZURhdGEpOwoKICAgIHVyaSA9IG5ldyBVcmkoCiAgICAgICAgc2NoZW1lOiB1cmkuc2NoZW1lID09ICJ3c3MiID8gImh0dHBzIiA6ICJodHRwIiwKICAgICAgICB1c2VySW5mbzogdXJpLnVzZXJJbmZvLAogICAgICAgIGhvc3Q6IHVyaS5ob3N0LAogICAgICAgIHBvcnQ6IHVyaS5wb3J0LAogICAgICAgIHBhdGg6IHVyaS5wYXRoLAogICAgICAgIHF1ZXJ5OiB1cmkucXVlcnksCiAgICAgICAgZnJhZ21lbnQ6IHVyaS5mcmFnbWVudCk7CiAgICByZXR1cm4gX2h0dHBDbGllbnQub3BlblVybCgiR0VUIiwgdXJpKS50aGVuKChyZXF1ZXN0KSB7CiAgICAgIGlmICh1cmkudXNlckluZm8gIT0gbnVsbCAmJiAhdXJpLnVzZXJJbmZvLmlzRW1wdHkpIHsKICAgICAgICAvLyBJZiB0aGUgVVJMIGNvbnRhaW5zIHVzZXIgaW5mb3JtYXRpb24gdXNlIHRoYXQgZm9yIGJhc2ljCiAgICAgICAgLy8gYXV0aG9yaXphdGlvbi4KICAgICAgICBTdHJpbmcgYXV0aCA9IF9DcnlwdG9VdGlscy5ieXRlc1RvQmFzZTY0KHV0ZjguZW5jb2RlKHVyaS51c2VySW5mbykpOwogICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSHR0cEhlYWRlcnMuYXV0aG9yaXphdGlvbkhlYWRlciwgIkJhc2ljICRhdXRoIik7CiAgICAgIH0KICAgICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkgewogICAgICAgIGhlYWRlcnMuZm9yRWFjaCgoZmllbGQsIHZhbHVlKSA9PiByZXF1ZXN0LmhlYWRlcnMuYWRkKGZpZWxkLCB2YWx1ZSkpOwogICAgICB9CiAgICAgIC8vIFNldHVwIHRoZSBpbml0aWFsIGhhbmRzaGFrZS4KICAgICAgcmVxdWVzdC5oZWFkZXJzCiAgICAgICAgLi5zZXQoSHR0cEhlYWRlcnMuY29ubmVjdGlvbkhlYWRlciwgIlVwZ3JhZGUiKQogICAgICAgIC4uc2V0KEh0dHBIZWFkZXJzLnVwZ3JhZGVIZWFkZXIsICJ3ZWJzb2NrZXQiKQogICAgICAgIC4uc2V0KCJTZWMtV2ViU29ja2V0LUtleSIsIG5vbmNlKQogICAgICAgIC4uc2V0KCJDYWNoZS1Db250cm9sIiwgIm5vLWNhY2hlIikKICAgICAgICAuLnNldCgiU2VjLVdlYlNvY2tldC1WZXJzaW9uIiwgIjEzIik7CiAgICAgIGlmIChwcm90b2NvbHMgIT0gbnVsbCkgewogICAgICAgIHJlcXVlc3QuaGVhZGVycy5hZGQoIlNlYy1XZWJTb2NrZXQtUHJvdG9jb2wiLCBwcm90b2NvbHMudG9MaXN0KCkpOwogICAgICB9CgogICAgICBpZiAoY29tcHJlc3Npb24uZW5hYmxlZCkgewogICAgICAgIHJlcXVlc3QuaGVhZGVycwogICAgICAgICAgICAuYWRkKCJTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMiLCBjb21wcmVzc2lvbi5fY3JlYXRlSGVhZGVyKCkpOwogICAgICB9CgogICAgICByZXR1cm4gcmVxdWVzdC5jbG9zZSgpOwogICAgfSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgdm9pZCBlcnJvcihTdHJpbmcgbWVzc2FnZSkgewogICAgICAgIC8vIEZsdXNoIGRhdGEuCiAgICAgICAgcmVzcG9uc2UuZGV0YWNoU29ja2V0KCkudGhlbigoc29ja2V0KSB7CiAgICAgICAgICBzb2NrZXQuZGVzdHJveSgpOwogICAgICAgIH0pOwogICAgICAgIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24obWVzc2FnZSk7CiAgICAgIH0KCiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9IEh0dHBTdGF0dXMuc3dpdGNoaW5nUHJvdG9jb2xzIHx8CiAgICAgICAgICByZXNwb25zZS5oZWFkZXJzW0h0dHBIZWFkZXJzLmNvbm5lY3Rpb25IZWFkZXJdID09IG51bGwgfHwKICAgICAgICAgICFyZXNwb25zZS5oZWFkZXJzW0h0dHBIZWFkZXJzLmNvbm5lY3Rpb25IZWFkZXJdCiAgICAgICAgICAgICAgLmFueSgodmFsdWUpID0+IHZhbHVlLnRvTG93ZXJDYXNlKCkgPT0gInVwZ3JhZGUiKSB8fAogICAgICAgICAgcmVzcG9uc2UuaGVhZGVycy52YWx1ZShIdHRwSGVhZGVycy51cGdyYWRlSGVhZGVyKS50b0xvd2VyQ2FzZSgpICE9CiAgICAgICAgICAgICAgIndlYnNvY2tldCIpIHsKICAgICAgICBlcnJvcigiQ29ubmVjdGlvbiB0byAnJHVyaScgd2FzIG5vdCB1cGdyYWRlZCB0byB3ZWJzb2NrZXQiKTsKICAgICAgfQogICAgICBTdHJpbmcgYWNjZXB0ID0gcmVzcG9uc2UuaGVhZGVycy52YWx1ZSgiU2VjLVdlYlNvY2tldC1BY2NlcHQiKTsKICAgICAgaWYgKGFjY2VwdCA9PSBudWxsKSB7CiAgICAgICAgZXJyb3IoIlJlc3BvbnNlIGRpZCBub3QgY29udGFpbiBhICdTZWMtV2ViU29ja2V0LUFjY2VwdCcgaGVhZGVyIik7CiAgICAgIH0KICAgICAgX1NIQTEgc2hhMSA9IG5ldyBfU0hBMSgpOwogICAgICBzaGExLmFkZCgiJG5vbmNlJF93ZWJTb2NrZXRHVUlEIi5jb2RlVW5pdHMpOwogICAgICBMaXN0PGludD4gZXhwZWN0ZWRBY2NlcHQgPSBzaGExLmNsb3NlKCk7CiAgICAgIExpc3Q8aW50PiByZWNlaXZlZEFjY2VwdCA9IF9DcnlwdG9VdGlscy5iYXNlNjRTdHJpbmdUb0J5dGVzKGFjY2VwdCk7CiAgICAgIGlmIChleHBlY3RlZEFjY2VwdC5sZW5ndGggIT0gcmVjZWl2ZWRBY2NlcHQubGVuZ3RoKSB7CiAgICAgICAgZXJyb3IoIlJlc3BvbnNlIGhlYWRlciAnU2VjLVdlYlNvY2tldC1BY2NlcHQnIGlzIHRoZSB3cm9uZyBsZW5ndGgiKTsKICAgICAgfQogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkQWNjZXB0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGV4cGVjdGVkQWNjZXB0W2ldICE9IHJlY2VpdmVkQWNjZXB0W2ldKSB7CiAgICAgICAgICBlcnJvcigiQmFkIHJlc3BvbnNlICdTZWMtV2ViU29ja2V0LUFjY2VwdCcgaGVhZGVyIik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhciBwcm90b2NvbCA9IHJlc3BvbnNlLmhlYWRlcnMudmFsdWUoJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnKTsKCiAgICAgIF9XZWJTb2NrZXRQZXJNZXNzYWdlRGVmbGF0ZSBkZWZsYXRlID0KICAgICAgICAgIG5lZ290aWF0ZUNsaWVudENvbXByZXNzaW9uKHJlc3BvbnNlLCBjb21wcmVzc2lvbik7CgogICAgICByZXR1cm4gcmVzcG9uc2UuZGV0YWNoU29ja2V0KCkudGhlbjxXZWJTb2NrZXQ+KChzb2NrZXQpID0+CiAgICAgICAgICBuZXcgX1dlYlNvY2tldEltcGwuX2Zyb21Tb2NrZXQoCiAgICAgICAgICAgICAgc29ja2V0LCBwcm90b2NvbCwgY29tcHJlc3Npb24sIGZhbHNlLCBkZWZsYXRlKSk7CiAgICB9KTsKICB9CgogIHN0YXRpYyBfV2ViU29ja2V0UGVyTWVzc2FnZURlZmxhdGUgbmVnb3RpYXRlQ2xpZW50Q29tcHJlc3Npb24oCiAgICAgIEh0dHBDbGllbnRSZXNwb25zZSByZXNwb25zZSwgQ29tcHJlc3Npb25PcHRpb25zIGNvbXByZXNzaW9uKSB7CiAgICBTdHJpbmcgZXh0ZW5zaW9uSGVhZGVyID0gcmVzcG9uc2UuaGVhZGVycy52YWx1ZSgnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJyk7CgogICAgaWYgKGV4dGVuc2lvbkhlYWRlciA9PSBudWxsKSB7CiAgICAgIGV4dGVuc2lvbkhlYWRlciA9ICIiOwogICAgfQoKICAgIHZhciBodiA9IEhlYWRlclZhbHVlLnBhcnNlKGV4dGVuc2lvbkhlYWRlciwgdmFsdWVTZXBhcmF0b3I6ICcsJyk7CgogICAgaWYgKGNvbXByZXNzaW9uLmVuYWJsZWQgJiYgaHYudmFsdWUgPT0gUEVSX01FU1NBR0VfREVGTEFURSkgewogICAgICB2YXIgc2VydmVyTm9Db250ZXh0VGFrZW92ZXIgPQogICAgICAgICAgaHYucGFyYW1ldGVycy5jb250YWluc0tleShfc2VydmVyTm9Db250ZXh0VGFrZW92ZXIpOwogICAgICB2YXIgY2xpZW50Tm9Db250ZXh0VGFrZW92ZXIgPQogICAgICAgICAgaHYucGFyYW1ldGVycy5jb250YWluc0tleShfY2xpZW50Tm9Db250ZXh0VGFrZW92ZXIpOwoKICAgICAgaW50IGdldFdpbmRvd0JpdHMoU3RyaW5nIHR5cGUpIHsKICAgICAgICB2YXIgbyA9IGh2LnBhcmFtZXRlcnNbdHlwZV07CiAgICAgICAgaWYgKG8gPT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIERFRkFVTFRfV0lORE9XX0JJVFM7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW50LnRyeVBhcnNlKG8pID8/IERFRkFVTFRfV0lORE9XX0JJVFM7CiAgICAgIH0KCiAgICAgIHJldHVybiBuZXcgX1dlYlNvY2tldFBlck1lc3NhZ2VEZWZsYXRlKAogICAgICAgICAgY2xpZW50TWF4V2luZG93Qml0czogZ2V0V2luZG93Qml0cyhfY2xpZW50TWF4V2luZG93Qml0cyksCiAgICAgICAgICBzZXJ2ZXJNYXhXaW5kb3dCaXRzOiBnZXRXaW5kb3dCaXRzKF9zZXJ2ZXJNYXhXaW5kb3dCaXRzKSwKICAgICAgICAgIGNsaWVudE5vQ29udGV4dFRha2VvdmVyOiBjbGllbnROb0NvbnRleHRUYWtlb3ZlciwKICAgICAgICAgIHNlcnZlck5vQ29udGV4dFRha2VvdmVyOiBzZXJ2ZXJOb0NvbnRleHRUYWtlb3Zlcik7CiAgICB9CgogICAgcmV0dXJuIG51bGw7CiAgfQoKICBfV2ViU29ja2V0SW1wbC5fZnJvbVNvY2tldCgKICAgICAgdGhpcy5fc29ja2V0LCB0aGlzLnByb3RvY29sLCBDb21wcmVzc2lvbk9wdGlvbnMgY29tcHJlc3Npb24sCiAgICAgIFt0aGlzLl9zZXJ2ZXJTaWRlID0gZmFsc2UsIF9XZWJTb2NrZXRQZXJNZXNzYWdlRGVmbGF0ZSBkZWZsYXRlXSkgewogICAgX2NvbnN1bWVyID0gbmV3IF9XZWJTb2NrZXRDb25zdW1lcih0aGlzLCBfc29ja2V0KTsKICAgIF9zaW5rID0gbmV3IF9TdHJlYW1TaW5rSW1wbChfY29uc3VtZXIpOwogICAgX3JlYWR5U3RhdGUgPSBXZWJTb2NrZXQub3BlbjsKICAgIF9kZWZsYXRlID0gZGVmbGF0ZTsKCiAgICB2YXIgdHJhbnNmb3JtZXIgPSBuZXcgX1dlYlNvY2tldFByb3RvY29sVHJhbnNmb3JtZXIoX3NlcnZlclNpZGUsIF9kZWZsYXRlKTsKICAgIF9zdWJzY3JpcHRpb24gPSB0cmFuc2Zvcm1lci5iaW5kKF9zb2NrZXQpLmxpc3RlbigoZGF0YSkgewogICAgICBpZiAoZGF0YSBpcyBfV2ViU29ja2V0UGluZykgewogICAgICAgIGlmICghX3dyaXRlQ2xvc2VkKSBfY29uc3VtZXIuYWRkKG5ldyBfV2ViU29ja2V0UG9uZyhkYXRhLnBheWxvYWQpKTsKICAgICAgfSBlbHNlIGlmIChkYXRhIGlzIF9XZWJTb2NrZXRQb25nKSB7CiAgICAgICAgLy8gU2ltcGx5IHNldCBwaW5nSW50ZXJ2YWwsIGFzIGl0J2xsIGNhbmNlbCBhbnkgdGltZXJzLgogICAgICAgIHBpbmdJbnRlcnZhbCA9IF9waW5nSW50ZXJ2YWw7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2NvbnRyb2xsZXIuYWRkKGRhdGEpOwogICAgICB9CiAgICB9LCBvbkVycm9yOiAoZXJyb3IsIHN0YWNrVHJhY2UpIHsKICAgICAgaWYgKF9jbG9zZVRpbWVyICE9IG51bGwpIF9jbG9zZVRpbWVyLmNhbmNlbCgpOwogICAgICBpZiAoZXJyb3IgaXMgRm9ybWF0RXhjZXB0aW9uKSB7CiAgICAgICAgX2Nsb3NlKFdlYlNvY2tldFN0YXR1cy5pbnZhbGlkRnJhbWVQYXlsb2FkRGF0YSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2Nsb3NlKFdlYlNvY2tldFN0YXR1cy5wcm90b2NvbEVycm9yKTsKICAgICAgfQogICAgICAvLyBBbiBlcnJvciBoYXBwZW5lZCwgc2V0IHRoZSBjbG9zZSBjb2RlIHNldCBhYm92ZS4KICAgICAgX2Nsb3NlQ29kZSA9IF9vdXRDbG9zZUNvZGU7CiAgICAgIF9jbG9zZVJlYXNvbiA9IF9vdXRDbG9zZVJlYXNvbjsKICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgIH0sIG9uRG9uZTogKCkgewogICAgICBpZiAoX2Nsb3NlVGltZXIgIT0gbnVsbCkgX2Nsb3NlVGltZXIuY2FuY2VsKCk7CiAgICAgIGlmIChfcmVhZHlTdGF0ZSA9PSBXZWJTb2NrZXQub3BlbikgewogICAgICAgIF9yZWFkeVN0YXRlID0gV2ViU29ja2V0LmNsb3Npbmc7CiAgICAgICAgaWYgKCFfaXNSZXNlcnZlZFN0YXR1c0NvZGUodHJhbnNmb3JtZXIuY2xvc2VDb2RlKSkgewogICAgICAgICAgX2Nsb3NlKHRyYW5zZm9ybWVyLmNsb3NlQ29kZSwgdHJhbnNmb3JtZXIuY2xvc2VSZWFzb24pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfY2xvc2UoKTsKICAgICAgICB9CiAgICAgICAgX3JlYWR5U3RhdGUgPSBXZWJTb2NrZXQuY2xvc2VkOwogICAgICB9CiAgICAgIC8vIFByb3RvY29sIGNsb3NlLCB1c2UgY2xvc2UgY29kZSBmcm9tIHRyYW5zZm9ybWVyLgogICAgICBfY2xvc2VDb2RlID0gdHJhbnNmb3JtZXIuY2xvc2VDb2RlOwogICAgICBfY2xvc2VSZWFzb24gPSB0cmFuc2Zvcm1lci5jbG9zZVJlYXNvbjsKICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgIH0sIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgX3N1YnNjcmlwdGlvbi5wYXVzZSgpOwogICAgX2NvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcigKICAgICAgICBzeW5jOiB0cnVlLAogICAgICAgIG9uTGlzdGVuOiBfc3Vic2NyaXB0aW9uLnJlc3VtZSwKICAgICAgICBvbkNhbmNlbDogKCkgewogICAgICAgICAgX3N1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgICAgICAgIF9zdWJzY3JpcHRpb24gPSBudWxsOwogICAgICAgIH0sCiAgICAgICAgb25QYXVzZTogX3N1YnNjcmlwdGlvbi5wYXVzZSwKICAgICAgICBvblJlc3VtZTogX3N1YnNjcmlwdGlvbi5yZXN1bWUpOwoKICAgIF93ZWJTb2NrZXRzW19zZXJ2aWNlSWRdID0gdGhpczsKICB9CgogIFN0cmVhbVN1YnNjcmlwdGlvbiBsaXN0ZW4odm9pZCBvbkRhdGEobWVzc2FnZSksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICByZXR1cm4gX2NvbnRyb2xsZXIuc3RyZWFtLmxpc3RlbihvbkRhdGEsCiAgICAgICAgb25FcnJvcjogb25FcnJvciwgb25Eb25lOiBvbkRvbmUsIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgRHVyYXRpb24gZ2V0IHBpbmdJbnRlcnZhbCA9PiBfcGluZ0ludGVydmFsOwoKICB2b2lkIHNldCBwaW5nSW50ZXJ2YWwoRHVyYXRpb24gaW50ZXJ2YWwpIHsKICAgIGlmIChfd3JpdGVDbG9zZWQpIHJldHVybjsKICAgIGlmIChfcGluZ1RpbWVyICE9IG51bGwpIF9waW5nVGltZXIuY2FuY2VsKCk7CiAgICBfcGluZ0ludGVydmFsID0gaW50ZXJ2YWw7CgogICAgaWYgKF9waW5nSW50ZXJ2YWwgPT0gbnVsbCkgcmV0dXJuOwoKICAgIF9waW5nVGltZXIgPSBuZXcgVGltZXIoX3BpbmdJbnRlcnZhbCwgKCkgewogICAgICBpZiAoX3dyaXRlQ2xvc2VkKSByZXR1cm47CiAgICAgIF9jb25zdW1lci5hZGQobmV3IF9XZWJTb2NrZXRQaW5nKCkpOwogICAgICBfcGluZ1RpbWVyID0gbmV3IFRpbWVyKF9waW5nSW50ZXJ2YWwsICgpIHsKICAgICAgICAvLyBObyBwb25nIHJlY2VpdmVkLgogICAgICAgIF9jbG9zZShXZWJTb2NrZXRTdGF0dXMuZ29pbmdBd2F5KTsKICAgICAgfSk7CiAgICB9KTsKICB9CgogIGludCBnZXQgcmVhZHlTdGF0ZSA9PiBfcmVhZHlTdGF0ZTsKCiAgU3RyaW5nIGdldCBleHRlbnNpb25zID0+IG51bGw7CiAgaW50IGdldCBjbG9zZUNvZGUgPT4gX2Nsb3NlQ29kZTsKICBTdHJpbmcgZ2V0IGNsb3NlUmVhc29uID0+IF9jbG9zZVJlYXNvbjsKCiAgdm9pZCBhZGQoZGF0YSkgewogICAgX3NpbmsuYWRkKGRhdGEpOwogIH0KCiAgdm9pZCBhZGRVdGY4VGV4dChMaXN0PGludD4gYnl0ZXMpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGJ5dGVzLCAiYnl0ZXMiKTsKICAgIF9zaW5rLmFkZChuZXcgX0VuY29kZWRTdHJpbmcoYnl0ZXMpKTsKICB9CgogIHZvaWQgYWRkRXJyb3IoZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBfc2luay5hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICBGdXR1cmUgYWRkU3RyZWFtKFN0cmVhbSBzdHJlYW0pID0+IF9zaW5rLmFkZFN0cmVhbShzdHJlYW0pOwogIEZ1dHVyZSBnZXQgZG9uZSA9PiBfc2luay5kb25lOwoKICBGdXR1cmUgY2xvc2UoW2ludCBjb2RlLCBTdHJpbmcgcmVhc29uXSkgewogICAgaWYgKF9pc1Jlc2VydmVkU3RhdHVzQ29kZShjb2RlKSkgewogICAgICB0aHJvdyBuZXcgV2ViU29ja2V0RXhjZXB0aW9uKCJSZXNlcnZlZCBzdGF0dXMgY29kZSAkY29kZSIpOwogICAgfQogICAgaWYgKF9vdXRDbG9zZUNvZGUgPT0gbnVsbCkgewogICAgICBfb3V0Q2xvc2VDb2RlID0gY29kZTsKICAgICAgX291dENsb3NlUmVhc29uID0gcmVhc29uOwogICAgfQogICAgaWYgKCFfY29udHJvbGxlci5pc0Nsb3NlZCkgewogICAgICAvLyBJZiBhIGNsb3NlIGhhcyBub3QgeWV0IGJlZW4gcmVjZWl2ZWQgZnJvbSB0aGUgb3RoZXIgZW5kIHRoZW4KICAgICAgLy8gICAxKSBtYWtlIHN1cmUgdG8gbGlzdGVuIG9uIHRoZSBzdHJlYW0gc28gdGhlIGNsb3NlIGZyYW1lIHdpbGwgYmUKICAgICAgLy8gICAgICBwcm9jZXNzZWQgaWYgcmVjZWl2ZWQuCiAgICAgIC8vICAgMikgc2V0IGEgdGltZXIgdGVybWluYXRlIHRoZSBjb25uZWN0aW9uIGlmIGEgY2xvc2UgZnJhbWUgaXMKICAgICAgLy8gICAgICBub3QgcmVjZWl2ZWQuCiAgICAgIGlmICghX2NvbnRyb2xsZXIuaGFzTGlzdGVuZXIgJiYgX3N1YnNjcmlwdGlvbiAhPSBudWxsKSB7CiAgICAgICAgX2NvbnRyb2xsZXIuc3RyZWFtLmRyYWluKCkuY2F0Y2hFcnJvcigoXykgPT4ge30pOwogICAgICB9CiAgICAgIGlmIChfY2xvc2VUaW1lciA9PSBudWxsKSB7CiAgICAgICAgLy8gV2hlbiBjbG9zaW5nIHRoZSB3ZWItc29ja2V0LCB3ZSBubyBsb25nZXIgYWNjZXB0IGRhdGEuCiAgICAgICAgX2Nsb3NlVGltZXIgPSBuZXcgVGltZXIoY29uc3QgRHVyYXRpb24oc2Vjb25kczogNSksICgpIHsKICAgICAgICAgIC8vIFJldXNlIGNvZGUgYW5kIHJlYXNvbiBmcm9tIHRoZSBsb2NhbCBjbG9zZS4KICAgICAgICAgIF9jbG9zZUNvZGUgPSBfb3V0Q2xvc2VDb2RlOwogICAgICAgICAgX2Nsb3NlUmVhc29uID0gX291dENsb3NlUmVhc29uOwogICAgICAgICAgaWYgKF9zdWJzY3JpcHRpb24gIT0gbnVsbCkgX3N1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgICAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICAgICAgICBfd2ViU29ja2V0cy5yZW1vdmUoX3NlcnZpY2VJZCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfc2luay5jbG9zZSgpOwogIH0KCiAgc3RhdGljIFN0cmluZyBnZXQgdXNlckFnZW50ID0+IF9odHRwQ2xpZW50LnVzZXJBZ2VudDsKCiAgc3RhdGljIHNldCB1c2VyQWdlbnQoU3RyaW5nIHVzZXJBZ2VudCkgewogICAgX2h0dHBDbGllbnQudXNlckFnZW50ID0gdXNlckFnZW50OwogIH0KCiAgdm9pZCBfY2xvc2UoW2ludCBjb2RlLCBTdHJpbmcgcmVhc29uXSkgewogICAgaWYgKF93cml0ZUNsb3NlZCkgcmV0dXJuOwogICAgaWYgKF9vdXRDbG9zZUNvZGUgPT0gbnVsbCkgewogICAgICBfb3V0Q2xvc2VDb2RlID0gY29kZTsKICAgICAgX291dENsb3NlUmVhc29uID0gcmVhc29uOwogICAgfQogICAgX3dyaXRlQ2xvc2VkID0gdHJ1ZTsKICAgIF9jb25zdW1lci5jbG9zZVNvY2tldCgpOwogICAgX3dlYlNvY2tldHMucmVtb3ZlKF9zZXJ2aWNlSWQpOwogIH0KCiAgU3RyaW5nIGdldCBfc2VydmljZVR5cGVQYXRoID0+ICdpby93ZWJzb2NrZXRzJzsKICBTdHJpbmcgZ2V0IF9zZXJ2aWNlVHlwZU5hbWUgPT4gJ1dlYlNvY2tldCc7CgogIE1hcDxTdHJpbmcsIGR5bmFtaWM+IF90b0pTT04oYm9vbCByZWYpIHsKICAgIHZhciBuYW1lID0gJyR7X3NvY2tldC5hZGRyZXNzLmhvc3R9OiR7X3NvY2tldC5wb3J0fSc7CiAgICB2YXIgciA9IDxTdHJpbmcsIGR5bmFtaWM+ewogICAgICAnaWQnOiBfc2VydmljZVBhdGgsCiAgICAgICd0eXBlJzogX3NlcnZpY2VUeXBlKHJlZiksCiAgICAgICduYW1lJzogbmFtZSwKICAgICAgJ3VzZXJfbmFtZSc6IG5hbWUsCiAgICB9OwogICAgaWYgKHJl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OwoKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9lbmNvZGVUYWJsZVVybFNhZmUgPQogICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktXyI7CgogIC8vIExvb2t1cCB0YWJsZSB1c2VkIGZvciBmaW5kaW5nIEJhc2UgNjQgYWxwaGFiZXQgaW5kZXggb2YgYSBnaXZlbiBieXRlLgogIC8vIC0yIDogT3V0c2lkZSBCYXNlIDY0IGFscGhhYmV0LgogIC8vIC0xIDogJ1xyJyBvciAnXG4nCiAgLy8gIDAgOiA9IChQYWRkaW5nIGNoYXJhY3RlcikuCiAgLy8gPjAgOiBCYXNlIDY0IGFscGhhYmV0IGluZGV4IG9mIGdpdmVuIGJ5dGUuCiAgc3RhdGljIGNvbnN0IExpc3Q8aW50PiBfZGVjb2RlVGFibGUgPSBjb25zdCBbCiAgICAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTEsIC0yLCAtMiwgLTEsIC0yLCAtMiwgLy8KICAgIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAvLwogICAgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCA2MiwgLTIsIDYyLCAtMiwgNjMsIC8vCiAgICA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgLTIsIC0yLCAtMiwgMDAsIC0yLCAtMiwgLy8KICAgIC0yLCAwMCwgMDEsIDAyLCAwMywgMDQsIDA1LCAwNiwgMDcsIDA4LCAwOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAvLwogICAgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAtMiwgLTIsIC0yLCAtMiwgNjMsIC8vCiAgICAtMiwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIDM5LCA0MCwgLy8KICAgIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgLTIsIC0yLCAtMiwgLTIsIC0yLCAvLwogICAgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC8vCiAgICAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLy8KICAgIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAvLwogICAgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC8vCiAgICAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLy8KICAgIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAvLwogICAgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC8vCiAgICAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMgogIF07CgogIHN0YXRpYyBSYW5kb20gX3JuZyA9IG5ldyBSYW5kb20uc2VjdXJlKCk7CgogIHN0YXRpYyBVaW50OExpc3QgZ2V0UmFuZG9tQnl0ZXMoaW50IGNvdW50KSB7CiAgICBmaW5hbCBVaW50OExpc3QgcmVzdWx0ID0gbmV3IFVpbnQ4TGlzdChjb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgcmVzdWx0W2ldID0gX3JuZy5uZXh0SW50KDB4ZmYpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBTdHJpbmcgYnl0ZXNUb0hleChMaXN0PGludD4gYnl0ZXMpIHsKICAgIHZhciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBmb3IgKHZhciBwYXJ0IGluIGJ5dGVzKSB7CiAgICAgIHJlc3VsdC53cml0ZSgnJHtwYXJ0IDwgMTYgPyAnMCcgOiAnJ30ke3BhcnQudG9SYWRpeFN0cmluZygxNil9Jyk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiAgfQoKICBzdGF0aWMgU3RyaW5nIGJ5dGVzVG9CYXNlNjQoTGlzdDxpbnQ+IGJ5dGVzLAogICAgICBbYm9vbCB1cmxTYWZlID0gZmFsc2UsIGJvb2wgYWRkTGluZVNlcGFyYXRvciA9IGZhbHNlXSkgewogICAgaW50IGxlbiA9IGJ5dGVzLmxlbmd0aDsKICAgIGlmIChsZW4gPT0gMCkgewogICAgICByZXR1cm4gIiI7CiAgICB9CiAgICBmaW5hbCBTdHJpbmcgbG9va3VwID0gdXJsU2FmZSA/IF9lbmNvZGVUYWJsZVVybFNhZmUgOiBfZW5jb2RlVGFibGU7CiAgICAvLyBTaXplIG9mIDI0IGJpdCBjaHVua3MuCiAgICBmaW5hbCBpbnQgcmVtYWluZGVyTGVuZ3RoID0gbGVuLnJlbWFpbmRlcigzKTsKICAgIGZpbmFsIGludCBjaHVua0xlbmd0aCA9IGxlbiAtIHJlbWFpbmRlckxlbmd0aDsKICAgIC8vIFNpemUgb2YgYmFzZSBvdXRwdXQuCiAgICBpbnQgb3V0cHV0TGVuID0gKChsZW4gfi8gMykgKiA0KSArICgocmVtYWluZGVyTGVuZ3RoID4gMCkgPyA0IDogMCk7CiAgICAvLyBBZGQgZXh0cmEgZm9yIGxpbmUgc2VwYXJhdG9ycy4KICAgIGlmIChhZGRMaW5lU2VwYXJhdG9yKSB7CiAgICAgIG91dHB1dExlbiArPSAoKG91dHB1dExlbiAtIDEpIH4vIExJTkVfTEVOR1RIKSA8PCAxOwogICAgfQogICAgTGlzdDxpbnQ+IG91dCA9IG5ldyBMaXN0PGludD4ob3V0cHV0TGVuKTsKCiAgICAvLyBFbmNvZGUgMjQgYml0IGNodW5rcy4KICAgIGludCBqID0gMCwgaSA9IDAsIGMgPSAwOwogICAgd2hpbGUgKGkgPCBjaHVua0xlbmd0aCkgewogICAgICBpbnQgeCA9ICgoYnl0ZXNbaSsrXSA8PCAxNikgJiAweEZGRkZGRikgfAogICAgICAgICAgKChieXRlc1tpKytdIDw8IDgpICYgMHhGRkZGRkYpIHwKICAgICAgICAgIGJ5dGVzW2krK107CiAgICAgIG91dFtqKytdID0gbG9va3VwLmNvZGVVbml0QXQoeCA+PiAxOCk7CiAgICAgIG91dFtqKytdID0gbG9va3VwLmNvZGVVbml0QXQoKHggPj4gMTIpICYgMHgzRik7CiAgICAgIG91dFtqKytdID0gbG9va3VwLmNvZGVVbml0QXQoKHggPj4gNikgJiAweDNGKTsKICAgICAgb3V0W2orK10gPSBsb29rdXAuY29kZVVuaXRBdCh4ICYgMHgzZik7CiAgICAgIC8vIEFkZCBvcHRpb25hbCBsaW5lIHNlcGFyYXRvciBmb3IgZWFjaCA3NiBjaGFyIG91dHB1dC4KICAgICAgaWYgKGFkZExpbmVTZXBhcmF0b3IgJiYgKytjID09IDE5ICYmIGogPCBvdXRwdXRMZW4gLSAyKSB7CiAgICAgICAgb3V0W2orK10gPSBDUjsKICAgICAgICBvdXRbaisrXSA9IExGOwogICAgICAgIGMgPSAwOwogICAgICB9CiAgICB9CgogICAgLy8gSWYgaW5wdXQgbGVuZ3RoIGlmIG5vdCBhIG11bHRpcGxlIG9mIDMsIGVuY29kZSByZW1haW5pbmcgYnl0ZXMgYW5kCiAgICAvLyBhZGQgcGFkZGluZy4KICAgIGlmIChyZW1haW5kZXJMZW5ndGggPT0gMSkgewogICAgICBpbnQgeCA9IGJ5dGVzW2ldOwogICAgICBvdXRbaisrXSA9IGxvb2t1cC5jb2RlVW5pdEF0KHggPj4gMik7CiAgICAgIG91dFtqKytdID0gbG9va3VwLmNvZGVVbml0QXQoKHggPDwgNCkgJiAweDNGKTsKICAgICAgb3V0W2orK10gPSBQQUQ7CiAgICAgIG91dFtqKytdID0gUEFEOwogICAgfSBlbHNlIGlmIChyZW1haW5kZXJMZW5ndGggPT0gMikgewogICAgICBpbnQgeCA9IGJ5dGVzW2ldOwogICAgICBpbnQgeSA9IGJ5dGVzW2kgKyAxXTsKICAgICAgb3V0W2orK10gPSBsb29rdXAuY29kZVVuaXRBdCh4ID4+IDIpOwogICAgICBvdXRbaisrXSA9IGxvb2t1cC5jb2RlVW5pdEF0KCgoeCA8PCA0KSB8ICh5ID4+IDQpKSAmIDB4M0YpOwogICAgICBvdXRbaisrXSA9IGxvb2t1cC5jb2RlVW5pdEF0KCh5IDw8IDIpICYgMHgzRik7CiAgICAgIG91dFtqKytdID0gUEFEOwogICAgfQoKICAgIHJldHVybiBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMob3V0KTsKICB9CgogIHN0YXRpYyBMaXN0PGludD4gYmFzZTY0U3RyaW5nVG9CeXRlcyhTdHJpbmcgaW5wdXQsCiAgICAgIFtib29sIGlnbm9yZUludmFsaWRDaGFyYWN0ZXJzID0gdHJ1ZV0pIHsKICAgIGludCBsZW4gPSBpbnB1dC5sZW5ndGg7CiAgICBpZiAobGVuID09IDApIHsKICAgICAgcmV0dXJuIG5ldyBMaXN0PGludD4oMCk7CiAgICB9CgogICAgLy8gQ291bnQgJ1xyJywgJ1xuJyBhbmQgaWxsZWdhbCBjaGFyYWN0ZXJzLCBGb3IgaWxsZWdhbCBjaGFyYWN0ZXJzLAogICAgLy8gaWYgW2lnbm9yZUludmFsaWRDaGFyYWN0ZXJzXSBpcyBmYWxzZSwgdGhyb3cgYW4gZXhjZXB0aW9uLgogICAgaW50IGV4dHJhc0xlbiA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGludCBjID0gX2RlY29kZVRhYmxlW2lucHV0LmNvZGVVbml0QXQoaSldOwogICAgICBpZiAoYyA8IDApIHsKICAgICAgICBleHRyYXNMZW4rKzsKICAgICAgICBpZiAoYyA9PSAtMiAmJiAhaWdub3JlSW52YWxpZENoYXJhY3RlcnMpIHsKICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oJ0ludmFsaWQgY2hhcmFjdGVyOiAke2lucHV0W2ldfScpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGlmICgobGVuIC0gZXh0cmFzTGVuKSAlIDQgIT0gMCkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKCcnJ1NpemUgb2YgQmFzZSA2NCBjaGFyYWN0ZXJzIGluIElucHV0CiAgICAgICAgICBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4gSW5wdXQ6ICRpbnB1dCcnJyk7CiAgICB9CgogICAgLy8gQ291bnQgcGFkIGNoYXJhY3RlcnMsIGlnbm9yZSBpbGxlZ2FsIGNoYXJhY3RlcnMgYXQgdGhlIGVuZC4KICAgIGludCBwYWRMZW5ndGggPSAwOwogICAgZm9yIChpbnQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGludCBjdXJyZW50Q29kZVVuaXQgPSBpbnB1dC5jb2RlVW5pdEF0KGkpOwogICAgICBpZiAoX2RlY29kZVRhYmxlW2N1cnJlbnRDb2RlVW5pdF0gPiAwKSBicmVhazsKICAgICAgaWYgKGN1cnJlbnRDb2RlVW5pdCA9PSBQQUQpIHBhZExlbmd0aCsrOwogICAgfQogICAgaW50IG91dHB1dExlbiA9ICgoKGxlbiAtIGV4dHJhc0xlbikgKiA2KSA+PiAzKSAtIHBhZExlbmd0aDsKICAgIExpc3Q8aW50PiBvdXQgPSBuZXcgTGlzdDxpbnQ+KG91dHB1dExlbik7CgogICAgZm9yIChpbnQgaSA9IDAsIG8gPSAwOyBvIDwgb3V0cHV0TGVuOykgewogICAgICAvLyBBY2N1bXVsYXRlIDQgdmFsaWQgNiBiaXQgQmFzZSA2NCBjaGFyYWN0ZXJzIGludG8gYW4gaW50LgogICAgICBpbnQgeCA9IDA7CiAgICAgIGZvciAoaW50IGogPSA0OyBqID4gMDspIHsKICAgICAgICBpbnQgYyA9IF9kZWNvZGVUYWJsZVtpbnB1dC5jb2RlVW5pdEF0KGkrKyldOwogICAgICAgIGlmIChjID49IDApIHsKICAgICAgICAgIHggPSAoKHggPDwgNikgJiAweEZGRkZGRikgfCBjOwogICAgICAgICAgai0tOwogICAgICAgIH0KICAgICAgfQogICAgICBvdXRbbysrXSA9IHggPj4gMTY7CiAgICAgIGlmIChvIDwgb3V0cHV0TGVuKSB7CiAgICAgICAgb3V0W28rK10gPSAoeCA+PiA4KSAmIDB4RkY7CiAgICAgICAgaWYgKG8gPCBvdXRwdXRMZW4pIG91dFtvKytdID0geCAmIDB4RkY7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBvdXQ7CiAgfQp9CgovLyBDb25zdGFudHMuCmNvbnN0IF9NQVNLXzggPSAweGZmOwpjb25zdCBfTUFTS18zMiA9IDB4ZmZmZmZmZmY7CmNvbnN0IF9CSVRTX1BFUl9CWVRFID0gODsKY29uc3QgX0JZVEVTX1BFUl9XT1JEID0gNDsKCi8vIEJhc2UgY2xhc3MgZW5jYXBzdWxhdGluZyBjb21tb24gYmVoYXZpb3IgZm9yIGNyeXB0b2dyYXBoaWMgaGFzaAovLyBmdW5jdGlvbnMuCmFic3RyYWN0IGNsYXNzIF9IYXNoQmFzZSB7CiAgLy8gSGFzaGVyIHN0YXRlLgogIGZpbmFsIGludCBfY2h1bmtTaXplSW5Xb3JkczsKICBmaW5hbCBpbnQgX2RpZ2VzdFNpemVJbldvcmRzOwogIGZpbmFsIGJvb2wgX2JpZ0VuZGlhbldvcmRzOwogIGludCBfbGVuZ3RoSW5CeXRlcyA9IDA7CiAgTGlzdDxpbnQ+IF9wZW5kaW5nRGF0YTsKICBMaXN0PGludD4gX2N1cnJlbnRDaHVuazsKICBMaXN0PGludD4gX2g7CiAgYm9vbCBfZGlnZXN0Q2FsbGVkID0gZmFsc2U7CgogIF9IYXNoQmFzZSgKICAgICAgdGhpcy5fY2h1bmtTaXplSW5Xb3JkcywgdGhpcy5fZGlnZXN0U2l6ZUluV29yZHMsIHRoaXMuX2JpZ0VuZGlhbldvcmRzKQogICAgICA6IF9wZW5kaW5nRGF0YSA9IFtdIHsKICAgIF9jdXJyZW50Q2h1bmsgPSBuZXcgTGlzdChfY2h1bmtTaXplSW5Xb3Jkcyk7CiAgICBfaCA9IG5ldyBMaXN0KF9kaWdlc3RTaXplSW5Xb3Jkcyk7CiAgfQoKICAvLyBVcGRhdGUgdGhlIGhhc2hlciB3aXRoIG1vcmUgZGF0YS4KICBhZGQoTGlzdDxpbnQ+IGRhdGEpIHsKICAgIGlmIChfZGlnZXN0Q2FsbGVkKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKAogICAgICAgICAgJ0hhc2ggdXBkYXRlIG1ldGhvZCBjYWxsZWQgYWZ0ZXIgZGlnZXN0IHdhcyByZXRyaWV2ZWQnKTsKICAgIH0KICAgIF9sZW5ndGhJbkJ5dGVzICs9IGRhdGEubGVuZ3RoOwogICAgX3BlbmRpbmdEYXRhLmFkZEFsbChkYXRhKTsKICAgIF9pdGVyYXRlKCk7CiAgfQoKICAvLyBGaW5pc2ggdGhlIGhhc2ggY29tcHV0YXRpb24gYW5kIHJldHVybiB0aGUgZGlnZXN0IHN0cmluZy4KICBMaXN0PGludD4gY2xvc2UoKSB7CiAgICBpZiAoX2RpZ2VzdENhbGxlZCkgewogICAgICByZXR1cm4gX3Jlc3VsdEFzQnl0ZXMoKTsKICAgIH0KICAgIF9kaWdlc3RDYWxsZWQgPSB0cnVlOwogICAgX2ZpbmFsaXplRGF0YSgpOwogICAgX2l0ZXJhdGUoKTsKICAgIGFzc2VydChfcGVuZGluZ0RhdGEubGVuZ3RoID09IDApOwogICAgcmV0dXJuIF9yZXN1bHRBc0J5dGVzKCk7CiAgfQoKICAvLyBSZXR1cm5zIHRoZSBibG9jayBzaXplIG9mIHRoZSBoYXNoIGluIGJ5dGVzLgogIGludCBnZXQgYmxvY2tTaXplIHsKICAgIHJldHVybiBfY2h1bmtTaXplSW5Xb3JkcyAqIF9CWVRFU19QRVJfV09SRDsKICB9CgogIC8vIENyZWF0ZSBhIGZyZXNoIGluc3RhbmNlIG9mIHRoaXMgSGFzaC4KICBuZXdJbnN0YW5jZSgpOwoKICAvLyBPbmUgcm91bmQgb2YgdGhlIGhhc2ggY29tcHV0YXRpb24uCiAgX3VwZGF0ZUhhc2goTGlzdDxpbnQ+IG0pOwoKICAvLyBIZWxwZXIgbWV0aG9kcy4KICBfYWRkMzIoeCwgeSkgPT4gKHggKyB5KSAmIF9NQVNLXzMyOwogIF9yb3VuZFVwKHZhbCwgbikgPT4gKHZhbCArIG4gLSAxKSAmIC1uOwoKICAvLyBSb3RhdGUgbGVmdCBsaW1pdGluZyB0byB1bnNpZ25lZCAzMi1iaXQgdmFsdWVzLgogIGludCBfcm90bDMyKGludCB2YWwsIGludCBzaGlmdCkgewogICAgdmFyIG1vZF9zaGlmdCA9IHNoaWZ0ICYgMzE7CiAgICByZXR1cm4gKCh2YWwgPDwgbW9kX3NoaWZ0KSAmIF9NQVNLXzMyKSB8CiAgICAgICAgKCh2YWwgJiBfTUFTS18zMikgPj4gKDMyIC0gbW9kX3NoaWZ0KSk7CiAgfQoKICAvLyBDb21wdXRlIHRoZSBmaW5hbCByZXN1bHQgYXMgYSBsaXN0IG9mIGJ5dGVzIGZyb20gdGhlIGhhc2ggd29yZHMuCiAgTGlzdDxpbnQ+IF9yZXN1bHRBc0J5dGVzKCkgewogICAgdmFyIHJlc3VsdCA9IDxpbnQ+W107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IF9oLmxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdC5hZGRBbGwoX3dvcmRUb0J5dGVzKF9oW2ldKSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gQ29udmVydHMgYSBsaXN0IG9mIGJ5dGVzIHRvIGEgY2h1bmsgb2YgMzItYml0IHdvcmRzLgogIF9ieXRlc1RvQ2h1bmsoTGlzdDxpbnQ+IGRhdGEsIGludCBkYXRhSW5kZXgpIHsKICAgIGFzc2VydCgoZGF0YS5sZW5ndGggLSBkYXRhSW5kZXgpID49IChfY2h1bmtTaXplSW5Xb3JkcyAqIF9CWVRFU19QRVJfV09SRCkpOwoKICAgIGZvciAodmFyIHdvcmRJbmRleCA9IDA7IHdvcmRJbmRleCA8IF9jaHVua1NpemVJbldvcmRzOyB3b3JkSW5kZXgrKykgewogICAgICB2YXIgdzMgPSBfYmlnRW5kaWFuV29yZHMgPyBkYXRhW2RhdGFJbmRleF0gOiBkYXRhW2RhdGFJbmRleCArIDNdOwogICAgICB2YXIgdzIgPSBfYmlnRW5kaWFuV29yZHMgPyBkYXRhW2RhdGFJbmRleCArIDFdIDogZGF0YVtkYXRhSW5kZXggKyAyXTsKICAgICAgdmFyIHcxID0gX2JpZ0VuZGlhbldvcmRzID8gZGF0YVtkYXRhSW5kZXggKyAyXSA6IGRhdGFbZGF0YUluZGV4ICsgMV07CiAgICAgIHZhciB3MCA9IF9iaWdFbmRpYW5Xb3JkcyA/IGRhdGFbZGF0YUluZGV4ICsgM10gOiBkYXRhW2RhdGFJbmRleF07CiAgICAgIGRhdGFJbmRleCArPSA0OwogICAgICB2YXIgd29yZCA9ICh3MyAmIDB4ZmYpIDw8IDI0OwogICAgICB3b3JkIHw9ICh3MiAmIF9NQVNLXzgpIDw8IDE2OwogICAgICB3b3JkIHw9ICh3MSAmIF9NQVNLXzgpIDw8IDg7CiAgICAgIHdvcmQgfD0gKHcwICYgX01BU0tfOCk7CiAgICAgIF9jdXJyZW50Q2h1bmtbd29yZEluZGV4XSA9IHdvcmQ7CiAgICB9CiAgfQoKICAvLyBDb252ZXJ0IGEgMzItYml0IHdvcmQgdG8gZm91ciBieXRlcy4KICBMaXN0PGludD4gX3dvcmRUb0J5dGVzKGludCB3b3JkKSB7CiAgICBMaXN0PGludD4gYnl0ZXMgPSBuZXcgTGlzdChfQllURVNfUEVSX1dPUkQpOwogICAgYnl0ZXNbMF0gPSAod29yZCA+PiAoX2JpZ0VuZGlhbldvcmRzID8gMjQgOiAwKSkgJiBfTUFTS184OwogICAgYnl0ZXNbMV0gPSAod29yZCA+PiAoX2JpZ0VuZGlhbldvcmRzID8gMTYgOiA4KSkgJiBfTUFTS184OwogICAgYnl0ZXNbMl0gPSAod29yZCA+PiAoX2JpZ0VuZGlhbldvcmRzID8gOCA6IDE2KSkgJiBfTUFTS184OwogICAgYnl0ZXNbM10gPSAod29yZCA+PiAoX2JpZ0VuZGlhbldvcmRzID8gMCA6IDI0KSkgJiBfTUFTS184OwogICAgcmV0dXJuIGJ5dGVzOwogIH0KCiAgLy8gSXRlcmF0ZSB0aHJvdWdoIGRhdGEgdXBkYXRpbmcgdGhlIGhhc2ggY29tcHV0YXRpb24gZm9yIGVhY2gKICAvLyBjaHVuay4KICBfaXRlcmF0ZSgpIHsKICAgIHZhciBsZW4gPSBfcGVuZGluZ0RhdGEubGVuZ3RoOwogICAgdmFyIGNodW5rU2l6ZUluQnl0ZXMgPSBfY2h1bmtTaXplSW5Xb3JkcyAqIF9CWVRFU19QRVJfV09SRDsKICAgIGlmIChsZW4gPj0gY2h1bmtTaXplSW5CeXRlcykgewogICAgICB2YXIgaW5kZXggPSAwOwogICAgICBmb3IgKDsgKGxlbiAtIGluZGV4KSA+PSBjaHVua1NpemVJbkJ5dGVzOyBpbmRleCArPSBjaHVua1NpemVJbkJ5dGVzKSB7CiAgICAgICAgX2J5dGVzVG9DaHVuayhfcGVuZGluZ0RhdGEsIGluZGV4KTsKICAgICAgICBfdXBkYXRlSGFzaChfY3VycmVudENodW5rKTsKICAgICAgfQogICAgICBfcGVuZGluZ0RhdGEgPSBfcGVuZGluZ0RhdGEuc3VibGlzdChpbmRleCwgbGVuKTsKICAgIH0KICB9CgogIC8vIEZpbmFsaXplIHRoZSBkYXRhLiBBZGQgYSAxIGJpdCB0byB0aGUgZW5kIG9mIHRoZSBtZXNzYWdlLiBFeHBhbmQgd2l0aAogIC8vIDAgYml0cyBhbmQgYWRkIHRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UuCiAgX2ZpbmFsaXplRGF0YSgpIHsKICAgIF9wZW5kaW5nRGF0YS5hZGQoMHg4MCk7CiAgICB2YXIgY29udGVudHNMZW5ndGggPSBfbGVuZ3RoSW5CeXRlcyArIDk7CiAgICB2YXIgY2h1bmtTaXplSW5CeXRlcyA9IF9jaHVua1NpemVJbldvcmRzICogX0JZVEVTX1BFUl9XT1JEOwogICAgdmFyIGZpbmFsaXplZExlbmd0aCA9IF9yb3VuZFVwKGNvbnRlbnRzTGVuZ3RoLCBjaHVua1NpemVJbkJ5dGVzKTsKICAgIHZhciB6ZXJvUGFkZGluZyA9IGZpbmFsaXplZExlbmd0aCAtIGNvbnRlbnRzTGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB6ZXJvUGFkZGluZzsgaSsrKSB7CiAgICAgIF9wZW5kaW5nRGF0YS5hZGQoMCk7CiAgICB9CiAgICB2YXIgbGVuZ3RoSW5CaXRzID0gX2xlbmd0aEluQnl0ZXMgKiBfQklUU19QRVJfQllURTsKICAgIGFzc2VydChsZW5ndGhJbkJpdHMgPCBwb3coMiwgMzIpKTsKICAgIGlmIChfYmlnRW5kaWFuV29yZHMpIHsKICAgICAgX3BlbmRpbmdEYXRhLmFkZEFsbChfd29yZFRvQnl0ZXMoMCkpOwogICAgICBfcGVuZGluZ0RhdGEuYWRkQWxsKF93b3JkVG9CeXRlcyhsZW5ndGhJbkJpdHMgJiBfTUFTS18zMikpOwogICAgfSBlbHNlIHsKICAgICAgX3BlbmRpbmdEYXRhLmFkZEFsbChfd29yZFRvQnl0ZXMobGVuZ3RoSW5CaXRzICYgX01BU0tfMzIpKTsKICAgICAgX3BlbmRpbmdEYXRhLmFkZEFsbChfd29yZFRvQnl0ZXMoMCkpOwogICAgfQogIH0KfQoKLy8gVGhlIE1ENSBoYXNoZXIgaXMgdXNlZCB0byBjb21wdXRlIGFuIE1ENSBtZXNzYWdlIGRpZ2VzdC4KY2xhc3MgX01ENSBleHRlbmRzIF9IYXNoQmFzZSB7CiAgX01ENSgpIDogc3VwZXIoMTYsIDQsIGZhbHNlKSB7CiAgICBfaFswXSA9IDB4Njc0NTIzMDE7CiAgICBfaFsxXSA9IDB4ZWZjZGFiODk7CiAgICBfaFsyXSA9IDB4OThiYWRjZmU7CiAgICBfaFszXSA9IDB4MTAzMjU0NzY7CiAgfQoKICAvLyBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgSGFzaC4KICBfTUQ1IG5ld0luc3RhbmNlKCkgewogICAgcmV0dXJuIG5ldyBfTUQ1KCk7CiAgfQoKICBzdGF0aWMgY29uc3QgX2sgPSBjb25zdCBbCiAgICAweGQ3NmFhNDc4LCAweGU4YzdiNzU2LCAweDI0MjA3MGRiLCAweGMxYmRjZWVlLCAweGY1N2MwZmFmLCAweDQ3ODdjNjJhLCAvLwogICAgMHhhODMwNDYxMywgMHhmZDQ2OTUwMSwgMHg2OTgwOThkOCwgMHg4YjQ0ZjdhZiwgMHhmZmZmNWJiMSwgMHg4OTVjZDdiZSwgLy8KICAgIDB4NmI5MDExMjIsIDB4ZmQ5ODcxOTMsIDB4YTY3OTQzOGUsIDB4NDliNDA4MjEsIDB4ZjYxZTI1NjIsIDB4YzA0MGIzNDAsIC8vCiAgICAweDI2NWU1YTUxLCAweGU5YjZjN2FhLCAweGQ2MmYxMDVkLCAweDAyNDQxNDUzLCAweGQ4YTFlNjgxLCAweGU3ZDNmYmM4LCAvLwogICAgMHgyMWUxY2RlNiwgMHhjMzM3MDdkNiwgMHhmNGQ1MGQ4NywgMHg0NTVhMTRlZCwgMHhhOWUzZTkwNSwgMHhmY2VmYTNmOCwgLy8KICAgIDB4Njc2ZjAyZDksIDB4OGQyYTRjOGEsIDB4ZmZmYTM5NDIsIDB4ODc3MWY2ODEsIDB4NmQ5ZDYxMjIsIDB4ZmRlNTM4MGMsIC8vCiAgICAweGE0YmVlYTQ0LCAweDRiZGVjZmE5LCAweGY2YmI0YjYwLCAweGJlYmZiYzcwLCAweDI4OWI3ZWM2LCAweGVhYTEyN2ZhLCAvLwogICAgMHhkNGVmMzA4NSwgMHgwNDg4MWQwNSwgMHhkOWQ0ZDAzOSwgMHhlNmRiOTllNSwgMHgxZmEyN2NmOCwgMHhjNGFjNTY2NSwgLy8KICAgIDB4ZjQyOTIyNDQsIDB4NDMyYWZmOTcsIDB4YWI5NDIzYTcsIDB4ZmM5M2EwMzksIDB4NjU1YjU5YzMsIDB4OGYwY2NjOTIsIC8vCiAgICAweGZmZWZmNDdkLCAweDg1ODQ1ZGQxLCAweDZmYTg3ZTRmLCAweGZlMmNlNmUwLCAweGEzMDE0MzE0LCAweDRlMDgxMWExLCAvLwogICAgMHhmNzUzN2U4MiwgMHhiZDNhZjIzNSwgMHgyYWQ3ZDJiYiwgMHhlYjg2ZDM5MQogIF07CgogIHN0YXRpYyBjb25zdCBfciA9IGNvbnN0IFsKICAgIDcsIDEyLCAxNywgMjIsIDcsIDEyLCAxNywgMjIsIDcsIDEyLCAxNywgMjIsIDcsIDEyLCAxNywgMjIsIDUsIDksIDE0LCAvLwogICAgMjAsIDUsIDksIDE0LCAyMCwgNSwgOSwgMTQsIDIwLCA1LCA5LCAxNCwgMjAsIDQsIDExLCAxNiwgMjMsIDQsIDExLCAvLwogICAgMTYsIDIzLCA0LCAxMSwgMTYsIDIzLCA0LCAxMSwgMTYsIDIzLCA2LCAxMCwgMTUsIDIxLCA2LCAxMCwgMTUsIDIxLCA2LCAvLwogICAgMTAsIDE1LCAyMSwgNiwgMTAsIDE1LCAyMQogIF07CgogIC8vIENvbXB1dGUgb25lIGl0ZXJhdGlvbiBvZiB0aGUgTUQ1IGFsZ29yaXRobSB3aXRoIGEgY2h1bmsgb2YKICAvLyAxNiAzMi1iaXQgcGllY2VzLgogIHZvaWQgX3VwZGF0ZUhhc2goTGlzdDxpbnQ+IG0pIHsKICAgIGFzc2VydChtLmxlbmd0aCA9PSAxNik7CgogICAgdmFyIGEgPSBfaFswXTsKICAgIHZhciBiID0gX2hbMV07CiAgICB2YXIgYyA9IF9oWzJdOwogICAgdmFyIGQgPSBfaFszXTsKCiAgICB2YXIgdDA7CiAgICB2YXIgdDE7CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2NDsgaSsrKSB7CiAgICAgIGlmIChpIDwgMTYpIHsKICAgICAgICB0MCA9IChiICYgYykgfCAoKH5iICYgX01BU0tfMzIpICYgZCk7CiAgICAgICAgdDEgPSBpOwogICAgICB9IGVsc2UgaWYgKGkgPCAzMikgewogICAgICAgIHQwID0gKGQgJiBiKSB8ICgofmQgJiBfTUFTS18zMikgJiBjKTsKICAgICAgICB0MSA9ICgoNSAqIGkpICsgMSkgJSAxNjsKICAgICAgfSBlbHNlIGlmIChpIDwgNDgpIHsKICAgICAgICB0MCA9IGIgXiBjIF4gZDsKICAgICAgICB0MSA9ICgoMyAqIGkpICsgNSkgJSAxNjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0MCA9IGMgXiAoYiB8ICh+ZCAmIF9NQVNLXzMyKSk7CiAgICAgICAgdDEgPSAoNyAqIGkpICUgMTY7CiAgICAgIH0KCiAgICAgIHZhciB0ZW1wID0gZDsKICAgICAgZCA9IGM7CiAgICAgIGMgPSBiOwogICAgICBiID0gX2FkZDMyKAogICAgICAgICAgYiwgX3JvdGwzMihfYWRkMzIoX2FkZDMyKGEsIHQwKSwgX2FkZDMyKF9rW2ldLCBtW3QxXSkpLCBfcltpXSkpOwogICAgICBhID0gdGVtcDsKICAgIH0KCiAgICBfaFswXSA9IF9hZGQzMihhLCBfaFswXSk7CiAgICBfaFsxXSA9IF9hZGQzMihiLCBfaFsxXSk7CiAgICBfaFsyXSA9IF9hZGQzMihjLCBfaFsyXSk7CiAgICBfaFszXSA9IF9hZGQzMihkLCBfaFszXSk7CiAgfQp9CgovLyBUaGUgU0hBMSBoYXNoZXIgaXMgdXNlZCB0byBjb21wdXRlIGFuIFNIQTEgbWVzc2FnZSBkaWdlc3QuCmNsYXNzIF9TSEExIGV4dGVuZHMgX0hhc2hCYXNlIHsKICAvLyBDb25zdHJ1Y3QgYSBTSEExIGhhc2hlciBvYmplY3QuCiAgX1NIQTEoKQogICAgICA6IF93ID0gbmV3IExpc3QoODApLAogICAgICAgIHN1cGVyKDE2LCA1LCB0cnVlKSB7CiAgICBfaFswXSA9IDB4Njc0NTIzMDE7CiAgICBfaFsxXSA9IDB4RUZDREFCODk7CiAgICBfaFsyXSA9IDB4OThCQURDRkU7CiAgICBfaFszXSA9IDB4MTAzMjU0NzY7CiAgICBfaFs0XSA9IDB4QzNEMkUxRjA7CiAgfQoKICAvLyBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgSGFzaC4KICBfU0hBMSBuZXdJbnN0YW5jZSgpIHsKICAgIHJldHVybiBuZXcgX1NIQTEoKTsKICB9CgogIC8vIENvbXB1dGUgb25lIGl0ZXJhdGlvbiBvZiB0aGUgU0hBMSBhbGdvcml0aG0gd2l0aCBhIGNodW5rIG9mCiAgLy8gMTYgMzItYml0IHBpZWNlcy4KICB2b2lkIF91cGRhdGVIYXNoKExpc3Q8aW50PiBtKSB7CiAgICBhc3NlcnQobS5sZW5ndGggPT0gMTYpOwoKICAgIHZhciBhID0gX2hbMF07CiAgICB2YXIgYiA9IF9oWzFdOwogICAgdmFyIGMgPSBfaFsyXTsKICAgIHZhciBkID0gX2hbM107CiAgICB2YXIgZSA9IF9oWzRdOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkrKykgewogICAgICBpZiAoaSA8IDE2KSB7CiAgICAgICAgX3dbaV0gPSBtW2ldOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBuID0gX3dbaSAtIDNdIF4gX3dbaSAtIDhdIF4gX3dbaSAtIDE0XSBeIF93W2kgLSAxNl07CiAgICAgICAgX3dbaV0gPSBfcm90bDMyKG4sIDEpOwogICAgICB9CiAgICAgIHZhciB0ID0gX2FkZDMyKF9hZGQzMihfcm90bDMyKGEsIDUpLCBlKSwgX3dbaV0pOwogICAgICBpZiAoaSA8IDIwKSB7CiAgICAgICAgdCA9IF9hZGQzMihfYWRkMzIodCwgKGIgJiBjKSB8ICh+YiAmIGQpKSwgMHg1QTgyNzk5OSk7CiAgICAgIH0gZWxzZSBpZiAoaSA8IDQwKSB7CiAgICAgICAgdCA9IF9hZGQzMihfYWRkMzIodCwgKGIgXiBjIF4gZCkpLCAweDZFRDlFQkExKTsKICAgICAgfSBlbHNlIGlmIChpIDwgNjApIHsKICAgICAgICB0ID0gX2FkZDMyKF9hZGQzMih0LCAoYiAmIGMpIHwgKGIgJiBkKSB8IChjICYgZCkpLCAweDhGMUJCQ0RDKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0ID0gX2FkZDMyKF9hZGQzMih0LCBiIF4gYyBeIGQpLCAweENBNjJDMUQ2KTsKICAgICAgfQoKICAgICAgZSA9IGQ7CiAgICAgIGQgPSBjOwogICAgICBjID0gX3JvdGwzMihiLCAzMCk7CiAgICAgIGIgPSBhOwogICAgICBhID0gdCAmIF9NQVNLXzMyOwogICAgfQoKICAgIF9oWzBdID0gX2FkZDMyKGEsIF9oWzBdKTsKICAgIF9oWzFdID0gX2FkZDMyKGIsIF9oWzFdKTsKICAgIF9oWzJdID0gX2FkZDMyKGMsIF9oWzJdKTsKICAgIF9oWzNdID0gX2FkZDMyKGQsIF9oWzNdKTsKICAgIF9oWzRdID0gX2FkZDMyKGUsIF9oWzRdKTsKICB9CgogIExpc3Q8aW50PiBfdzsKfQqBzgBOTjwBDwEUARUkJCQlASVKASxKAUskFyEwMEdHR0dHR0dHR0dHR0dHR0MFASwBLzMmJgYTBAEuJR5IBh4EAS8/HBQRBkgeMjMcSCYcOgYuAR0dHjArFi02NS4+QBcXDwgGAUoUIBgsNRYWJxgcLEI1FgYBKgQBNS8cFB8GAUhCFyQxExUzRwoIBgEmRzYGAUMXKTE0LwZALgEtQhEgNRYpDwoIGhskMAgGEAQCAQ4WHRobAUMOGxMfIB4aGhsQHgENTRwxJwQBJxgZHEMGIx8QBAE/FhkfBhoVECYdBAEyFjAEASsRASgcARUmKgE1JCAtMAQBRh8aKioGEwQBOjFQAUpITExIFiQkIx4nBgQBKiUxPz8/PxIEAUEMDyNAIxVNLCQINwYEAUsvFBwtQEY4LBsGOCcbLEINQiwGBAIBPB8hGBgYGAQBKhcXBAEcT09PT09PT09PTzMFARxNS04eBQFAFyIcARMTExMBDAwBIxQuEBsuIRsYIQ8oGwgBFA0NEksQBgEeHh4eBAIBPiAlChsdGBgYGBgEASoYGAQBQRciHAETExMTEwEjFBYPQR8INxQ/GzgbSA82CAENDRoNGAYBHh4eHh4EARACARZkYXJ0Ol9odHRwL2NyeXB0by5kYXJ0QW9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL19odHRwL2h0dHBfZGF0ZS5kYXJ0qAovLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5faHR0cDsKCi8qKgogKiBVdGlsaXR5IGZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoIGRhdGVzIHdpdGggSFRUUCBzcGVjaWZpYyBkYXRlCiAqIGZvcm1hdHMuCiAqLwpjbGFzcyBIdHRwRGF0ZSB7CiAgLy8gRnJvbSBSRkMtMjYxNiBzZWN0aW9uICIzLjMuMSBGdWxsIERhdGUiLAogIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI2MTYjc2VjdGlvbi0zLjMuMQogIC8vCiAgLy8gSFRUUC1kYXRlICAgID0gcmZjMTEyMy1kYXRlIHwgcmZjODUwLWRhdGUgfCBhc2N0aW1lLWRhdGUKICAvLyByZmMxMTIzLWRhdGUgPSB3a2RheSAiLCIgU1AgZGF0ZTEgU1AgdGltZSBTUCAiR01UIgogIC8vIHJmYzg1MC1kYXRlICA9IHdlZWtkYXkgIiwiIFNQIGRhdGUyIFNQIHRpbWUgU1AgIkdNVCIKICAvLyBhc2N0aW1lLWRhdGUgPSB3a2RheSBTUCBkYXRlMyBTUCB0aW1lIFNQIDRESUdJVAogIC8vIGRhdGUxICAgICAgICA9IDJESUdJVCBTUCBtb250aCBTUCA0RElHSVQKICAvLyAgICAgICAgICAgICAgICA7IGRheSBtb250aCB5ZWFyIChlLmcuLCAwMiBKdW4gMTk4MikKICAvLyBkYXRlMiAgICAgICAgPSAyRElHSVQgIi0iIG1vbnRoICItIiAyRElHSVQKICAvLyAgICAgICAgICAgICAgICA7IGRheS1tb250aC15ZWFyIChlLmcuLCAwMi1KdW4tODIpCiAgLy8gZGF0ZTMgICAgICAgID0gbW9udGggU1AgKCAyRElHSVQgfCAoIFNQIDFESUdJVCApKQogIC8vICAgICAgICAgICAgICAgIDsgbW9udGggZGF5IChlLmcuLCBKdW4gIDIpCiAgLy8gdGltZSAgICAgICAgID0gMkRJR0lUICI6IiAyRElHSVQgIjoiIDJESUdJVAogIC8vICAgICAgICAgICAgICAgIDsgMDA6MDA6MDAgLSAyMzo1OTo1OQogIC8vIHdrZGF5ICAgICAgICA9ICJNb24iIHwgIlR1ZSIgfCAiV2VkIgogIC8vICAgICAgICAgICAgICB8ICJUaHUiIHwgIkZyaSIgfCAiU2F0IiB8ICJTdW4iCiAgLy8gd2Vla2RheSAgICAgID0gIk1vbmRheSIgfCAiVHVlc2RheSIgfCAiV2VkbmVzZGF5IgogIC8vICAgICAgICAgICAgICB8ICJUaHVyc2RheSIgfCAiRnJpZGF5IiB8ICJTYXR1cmRheSIgfCAiU3VuZGF5IgogIC8vIG1vbnRoICAgICAgICA9ICJKYW4iIHwgIkZlYiIgfCAiTWFyIiB8ICJBcHIiCiAgLy8gICAgICAgICAgICAgIHwgIk1heSIgfCAiSnVuIiB8ICJKdWwiIHwgIkF1ZyIKICAvLyAgICAgICAgICAgICAgfCAiU2VwIiB8ICJPY3QiIHwgIk5vdiIgfCAiRGVjIgoKICAvKioKICAgKiBGb3JtYXQgYSBkYXRlIGFjY29yZGluZyB0bwogICAqIFtSRkMtMTEyM10oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTEyMyAiUkZDLTExMjMiKSwKICAgKiBlLmcuIGBUaHUsIDEgSmFuIDE5NzAgMDA6MDA6MDAgR01UYC4KICAgKi8KICBzdGF0aWMgU3RyaW5nIGZvcm1hdChEYXRlVGltZSBkYXRlKSB7CiAgICBjb25zdCBMaXN0IHdrZGF5ID0gY29uc3QgWyJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCIsICJTdW4iXTsKICAgIGNvbnN0IExpc3QgbW9udGggPSBjb25zdCBbCiAgICAgICJKYW4iLAogICAgICAiRmViIiwKICAgICAgIk1hciIsCiAgICAgICJBcHIiLAogICAgICAiTWF5IiwKICAgICAgIkp1biIsCiAgICAgICJKdWwiLAogICAgICAiQXVnIiwKICAgICAgIlNlcCIsCiAgICAgICJPY3QiLAogICAgICAiTm92IiwKICAgICAgIkRlYyIKICAgIF07CgogICAgRGF0ZVRpbWUgZCA9IGRhdGUudG9VdGMoKTsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKQogICAgICAuLndyaXRlKHdrZGF5W2Qud2Vla2RheSAtIDFdKQogICAgICAuLndyaXRlKCIsICIpCiAgICAgIC4ud3JpdGUoZC5kYXkgPD0gOSA/ICIwIiA6ICIiKQogICAgICAuLndyaXRlKGQuZGF5LnRvU3RyaW5nKCkpCiAgICAgIC4ud3JpdGUoIiAiKQogICAgICAuLndyaXRlKG1vbnRoW2QubW9udGggLSAxXSkKICAgICAgLi53cml0ZSgiICIpCiAgICAgIC4ud3JpdGUoZC55ZWFyLnRvU3RyaW5nKCkpCiAgICAgIC4ud3JpdGUoZC5ob3VyIDw9IDkgPyAiIDAiIDogIiAiKQogICAgICAuLndyaXRlKGQuaG91ci50b1N0cmluZygpKQogICAgICAuLndyaXRlKGQubWludXRlIDw9IDkgPyAiOjAiIDogIjoiKQogICAgICAuLndyaXRlKGQubWludXRlLnRvU3RyaW5nKCkpCiAgICAgIC4ud3JpdGUoZC5zZWNvbmQgPD0gOSA/ICI6MCIgOiAiOiIpCiAgICAgIC4ud3JpdGUoZC5zZWNvbmQudG9TdHJpbmcoKSkKICAgICAgLi53cml0ZSgiIEdNVCIpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICAvKioKICAgKiBQYXJzZSBhIGRhdGUgc3RyaW5nIGluIGVpdGhlciBvZiB0aGUgZm9ybWF0cwogICAqIFtSRkMtMTEyM10oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTEyMyAiUkZDLTExMjMiKSwKICAgKiBbUkZDLTg1MF0oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjODUwICJSRkMtODUwIikgb3IKICAgKiBBTlNJIEMncyBhc2N0aW1lKCkgZm9ybWF0LiBUaGVzZSBmb3JtYXRzIGFyZSBsaXN0ZWQgaGVyZS4KICAgKgogICAqICAgICBUaHUsIDEgSmFuIDE5NzAgMDA6MDA6MDAgR01UCiAgICogICAgIFRodXJzZGF5LCAxLUphbi0xOTcwIDAwOjAwOjAwIEdNVAogICAqICAgICBUaHUgSmFuICAxIDAwOjAwOjAwIDE5NzAKICAgKgogICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBbUkZDLTI2MTYgc2VjdGlvbgogICAqIDMuMS4xXShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyNjE2I3NlY3Rpb24tMy4zLjEKICAgKiAiUkZDLTI2MTYgc2VjdGlvbiAzLjEuMSIpLgogICAqLwogIHN0YXRpYyBEYXRlVGltZSBwYXJzZShTdHJpbmcgZGF0ZSkgewogICAgZmluYWwgaW50IFNQID0gMzI7CiAgICBjb25zdCBMaXN0IHdrZGF5cyA9IGNvbnN0IFsiTW9uIiwgIlR1ZSIsICJXZWQiLCAiVGh1IiwgIkZyaSIsICJTYXQiLCAiU3VuIl07CiAgICBjb25zdCBMaXN0IHdlZWtkYXlzID0gY29uc3QgWwogICAgICAiTW9uZGF5IiwKICAgICAgIlR1ZXNkYXkiLAogICAgICAiV2VkbmVzZGF5IiwKICAgICAgIlRodXJzZGF5IiwKICAgICAgIkZyaWRheSIsCiAgICAgICJTYXR1cmRheSIsCiAgICAgICJTdW5kYXkiCiAgICBdOwogICAgY29uc3QgTGlzdCBtb250aHMgPSBjb25zdCBbCiAgICAgICJKYW4iLAogICAgICAiRmViIiwKICAgICAgIk1hciIsCiAgICAgICJBcHIiLAogICAgICAiTWF5IiwKICAgICAgIkp1biIsCiAgICAgICJKdWwiLAogICAgICAiQXVnIiwKICAgICAgIlNlcCIsCiAgICAgICJPY3QiLAogICAgICAiTm92IiwKICAgICAgIkRlYyIKICAgIF07CgogICAgZmluYWwgaW50IGZvcm1hdFJmYzExMjMgPSAwOwogICAgZmluYWwgaW50IGZvcm1hdFJmYzg1MCA9IDE7CiAgICBmaW5hbCBpbnQgZm9ybWF0QXNjdGltZSA9IDI7CgogICAgaW50IGluZGV4ID0gMDsKICAgIFN0cmluZyB0bXA7CiAgICBpbnQgZm9ybWF0OwoKICAgIHZvaWQgZXhwZWN0KFN0cmluZyBzKSB7CiAgICAgIGlmIChkYXRlLmxlbmd0aCAtIGluZGV4IDwgcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCBIVFRQIGRhdGUgJGRhdGUiKTsKICAgICAgfQogICAgICBTdHJpbmcgdG1wID0gZGF0ZS5zdWJzdHJpbmcoaW5kZXgsIGluZGV4ICsgcy5sZW5ndGgpOwogICAgICBpZiAodG1wICE9IHMpIHsKICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCBIVFRQIGRhdGUgJGRhdGUiKTsKICAgICAgfQogICAgICBpbmRleCArPSBzLmxlbmd0aDsKICAgIH0KCiAgICBpbnQgZXhwZWN0V2Vla2RheSgpIHsKICAgICAgaW50IHdlZWtkYXk7CiAgICAgIC8vIFRoZSBmb3JtYXR0aW5nIG9mIHRoZSB3ZWVrZGF5IHNpZ25hbHMgdGhlIGZvcm1hdCBvZiB0aGUgZGF0ZSBzdHJpbmcuCiAgICAgIGludCBwb3MgPSBkYXRlLmluZGV4T2YoIiwiLCBpbmRleCk7CiAgICAgIGlmIChwb3MgPT0gLTEpIHsKICAgICAgICBpbnQgcG9zID0gZGF0ZS5pbmRleE9mKCIgIiwgaW5kZXgpOwogICAgICAgIGlmIChwb3MgPT0gLTEpIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIEhUVFAgZGF0ZSAkZGF0ZSIpOwogICAgICAgIHRtcCA9IGRhdGUuc3Vic3RyaW5nKGluZGV4LCBwb3MpOwogICAgICAgIGluZGV4ID0gcG9zICsgMTsKICAgICAgICB3ZWVrZGF5ID0gd2tkYXlzLmluZGV4T2YodG1wKTsKICAgICAgICBpZiAod2Vla2RheSAhPSAtMSkgewogICAgICAgICAgZm9ybWF0ID0gZm9ybWF0QXNjdGltZTsKICAgICAgICAgIHJldHVybiB3ZWVrZGF5OwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0bXAgPSBkYXRlLnN1YnN0cmluZyhpbmRleCwgcG9zKTsKICAgICAgICBpbmRleCA9IHBvcyArIDE7CiAgICAgICAgd2Vla2RheSA9IHdrZGF5cy5pbmRleE9mKHRtcCk7CiAgICAgICAgaWYgKHdlZWtkYXkgIT0gLTEpIHsKICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdFJmYzExMjM7CiAgICAgICAgICByZXR1cm4gd2Vla2RheTsKICAgICAgICB9CiAgICAgICAgd2Vla2RheSA9IHdlZWtkYXlzLmluZGV4T2YodG1wKTsKICAgICAgICBpZiAod2Vla2RheSAhPSAtMSkgewogICAgICAgICAgZm9ybWF0ID0gZm9ybWF0UmZjODUwOwogICAgICAgICAgcmV0dXJuIHdlZWtkYXk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIEhUVFAgZGF0ZSAkZGF0ZSIpOwogICAgfQoKICAgIGludCBleHBlY3RNb250aChTdHJpbmcgc2VwYXJhdG9yKSB7CiAgICAgIGludCBwb3MgPSBkYXRlLmluZGV4T2Yoc2VwYXJhdG9yLCBpbmRleCk7CiAgICAgIGlmIChwb3MgLSBpbmRleCAhPSAzKSB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCBIVFRQIGRhdGUgJGRhdGUiKTsKICAgICAgdG1wID0gZGF0ZS5zdWJzdHJpbmcoaW5kZXgsIHBvcyk7CiAgICAgIGluZGV4ID0gcG9zICsgMTsKICAgICAgaW50IG1vbnRoID0gbW9udGhzLmluZGV4T2YodG1wKTsKICAgICAgaWYgKG1vbnRoICE9IC0xKSByZXR1cm4gbW9udGg7CiAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIEhUVFAgZGF0ZSAkZGF0ZSIpOwogICAgfQoKICAgIGludCBleHBlY3ROdW0oU3RyaW5nIHNlcGFyYXRvcikgewogICAgICBpbnQgcG9zOwogICAgICBpZiAoc2VwYXJhdG9yLmxlbmd0aCA+IDApIHsKICAgICAgICBwb3MgPSBkYXRlLmluZGV4T2Yoc2VwYXJhdG9yLCBpbmRleCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcG9zID0gZGF0ZS5sZW5ndGg7CiAgICAgIH0KICAgICAgU3RyaW5nIHRtcCA9IGRhdGUuc3Vic3RyaW5nKGluZGV4LCBwb3MpOwogICAgICBpbmRleCA9IHBvcyArIHNlcGFyYXRvci5sZW5ndGg7CiAgICAgIHRyeSB7CiAgICAgICAgaW50IHZhbHVlID0gaW50LnBhcnNlKHRtcCk7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICB9IG9uIEZvcm1hdEV4Y2VwdGlvbiB7CiAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgSFRUUCBkYXRlICRkYXRlIik7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGV4cGVjdEVuZCgpIHsKICAgICAgaWYgKGluZGV4ICE9IGRhdGUubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgSFRUUCBkYXRlICRkYXRlIik7CiAgICAgIH0KICAgIH0KCiAgICBpbnQgd2Vla2RheSA9IGV4cGVjdFdlZWtkYXkoKTsKICAgIGludCBkYXk7CiAgICBpbnQgbW9udGg7CiAgICBpbnQgeWVhcjsKICAgIGludCBob3VyczsKICAgIGludCBtaW51dGVzOwogICAgaW50IHNlY29uZHM7CiAgICBpZiAoZm9ybWF0ID09IGZvcm1hdEFzY3RpbWUpIHsKICAgICAgbW9udGggPSBleHBlY3RNb250aCgiICIpOwogICAgICBpZiAoZGF0ZS5jb2RlVW5pdEF0KGluZGV4KSA9PSBTUCkgaW5kZXgrKzsKICAgICAgZGF5ID0gZXhwZWN0TnVtKCIgIik7CiAgICAgIGhvdXJzID0gZXhwZWN0TnVtKCI6Iik7CiAgICAgIG1pbnV0ZXMgPSBleHBlY3ROdW0oIjoiKTsKICAgICAgc2Vjb25kcyA9IGV4cGVjdE51bSgiICIpOwogICAgICB5ZWFyID0gZXhwZWN0TnVtKCIiKTsKICAgIH0gZWxzZSB7CiAgICAgIGV4cGVjdCgiICIpOwogICAgICBkYXkgPSBleHBlY3ROdW0oZm9ybWF0ID09IGZvcm1hdFJmYzExMjMgPyAiICIgOiAiLSIpOwogICAgICBtb250aCA9IGV4cGVjdE1vbnRoKGZvcm1hdCA9PSBmb3JtYXRSZmMxMTIzID8gIiAiIDogIi0iKTsKICAgICAgeWVhciA9IGV4cGVjdE51bSgiICIpOwogICAgICBob3VycyA9IGV4cGVjdE51bSgiOiIpOwogICAgICBtaW51dGVzID0gZXhwZWN0TnVtKCI6Iik7CiAgICAgIHNlY29uZHMgPSBleHBlY3ROdW0oIiAiKTsKICAgICAgZXhwZWN0KCJHTVQiKTsKICAgIH0KICAgIGV4cGVjdEVuZCgpOwogICAgcmV0dXJuIG5ldyBEYXRlVGltZS51dGMoeWVhciwgbW9udGggKyAxLCBkYXksIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCAwKTsKICB9CgogIC8vIFBhcnNlIGEgY29va2llIGRhdGUgc3RyaW5nLgogIHN0YXRpYyBEYXRlVGltZSBfcGFyc2VDb29raWVEYXRlKFN0cmluZyBkYXRlKSB7CiAgICBjb25zdCBMaXN0IG1vbnRoc0xvd2VyQ2FzZSA9IGNvbnN0IFsKICAgICAgImphbiIsCiAgICAgICJmZWIiLAogICAgICAibWFyIiwKICAgICAgImFwciIsCiAgICAgICJtYXkiLAogICAgICAianVuIiwKICAgICAgImp1bCIsCiAgICAgICJhdWciLAogICAgICAic2VwIiwKICAgICAgIm9jdCIsCiAgICAgICJub3YiLAogICAgICAiZGVjIgogICAgXTsKCiAgICBpbnQgcG9zaXRpb24gPSAwOwoKICAgIHZvaWQgZXJyb3IoKSB7CiAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIGNvb2tpZSBkYXRlICRkYXRlIik7CiAgICB9CgogICAgYm9vbCBpc0VuZCgpID0+IHBvc2l0aW9uID09IGRhdGUubGVuZ3RoOwoKICAgIGJvb2wgaXNEZWxpbWl0ZXIoU3RyaW5nIHMpIHsKICAgICAgaW50IGNoYXIgPSBzLmNvZGVVbml0QXQoMCk7CiAgICAgIGlmIChjaGFyID09IDB4MDkpIHJldHVybiB0cnVlOwogICAgICBpZiAoY2hhciA+PSAweDIwICYmIGNoYXIgPD0gMHgyRikgcmV0dXJuIHRydWU7CiAgICAgIGlmIChjaGFyID49IDB4M0IgJiYgY2hhciA8PSAweDQwKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGNoYXIgPj0gMHg1QiAmJiBjaGFyIDw9IDB4NjApIHJldHVybiB0cnVlOwogICAgICBpZiAoY2hhciA+PSAweDdCICYmIGNoYXIgPD0gMHg3RSkgcmV0dXJuIHRydWU7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBib29sIGlzTm9uRGVsaW1pdGVyKFN0cmluZyBzKSB7CiAgICAgIGludCBjaGFyID0gcy5jb2RlVW5pdEF0KDApOwogICAgICBpZiAoY2hhciA+PSAweDAwICYmIGNoYXIgPD0gMHgwOCkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChjaGFyID49IDB4MEEgJiYgY2hhciA8PSAweDFGKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGNoYXIgPj0gMHgzMCAmJiBjaGFyIDw9IDB4MzkpIHJldHVybiB0cnVlOyAvLyBEaWdpdAogICAgICBpZiAoY2hhciA9PSAweDNBKSByZXR1cm4gdHJ1ZTsgLy8gJzonCiAgICAgIGlmIChjaGFyID49IDB4NDEgJiYgY2hhciA8PSAweDVBKSByZXR1cm4gdHJ1ZTsgLy8gQWxwaGEKICAgICAgaWYgKGNoYXIgPj0gMHg2MSAmJiBjaGFyIDw9IDB4N0EpIHJldHVybiB0cnVlOyAvLyBBbHBoYQogICAgICBpZiAoY2hhciA+PSAweDdGICYmIGNoYXIgPD0gMHhGRikgcmV0dXJuIHRydWU7IC8vIEFscGhhCiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBib29sIGlzRGlnaXQoU3RyaW5nIHMpIHsKICAgICAgaW50IGNoYXIgPSBzLmNvZGVVbml0QXQoMCk7CiAgICAgIGlmIChjaGFyID4gMHgyRiAmJiBjaGFyIDwgMHgzQSkgcmV0dXJuIHRydWU7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpbnQgZ2V0TW9udGgoU3RyaW5nIG1vbnRoKSB7CiAgICAgIGlmIChtb250aC5sZW5ndGggPCAzKSByZXR1cm4gLTE7CiAgICAgIHJldHVybiBtb250aHNMb3dlckNhc2UuaW5kZXhPZihtb250aC5zdWJzdHJpbmcoMCwgMykpOwogICAgfQoKICAgIGludCB0b0ludChTdHJpbmcgcykgewogICAgICBpbnQgaW5kZXggPSAwOwogICAgICBmb3IgKDsgaW5kZXggPCBzLmxlbmd0aCAmJiBpc0RpZ2l0KHNbaW5kZXhdKTsgaW5kZXgrKyk7CiAgICAgIHJldHVybiBpbnQucGFyc2Uocy5zdWJzdHJpbmcoMCwgaW5kZXgpKTsKICAgIH0KCiAgICB2YXIgdG9rZW5zID0gW107CiAgICB3aGlsZSAoIWlzRW5kKCkpIHsKICAgICAgd2hpbGUgKCFpc0VuZCgpICYmIGlzRGVsaW1pdGVyKGRhdGVbcG9zaXRpb25dKSkgcG9zaXRpb24rKzsKICAgICAgaW50IHN0YXJ0ID0gcG9zaXRpb247CiAgICAgIHdoaWxlICghaXNFbmQoKSAmJiBpc05vbkRlbGltaXRlcihkYXRlW3Bvc2l0aW9uXSkpIHBvc2l0aW9uKys7CiAgICAgIHRva2Vucy5hZGQoZGF0ZS5zdWJzdHJpbmcoc3RhcnQsIHBvc2l0aW9uKS50b0xvd2VyQ2FzZSgpKTsKICAgICAgd2hpbGUgKCFpc0VuZCgpICYmIGlzRGVsaW1pdGVyKGRhdGVbcG9zaXRpb25dKSkgcG9zaXRpb24rKzsKICAgIH0KCiAgICBTdHJpbmcgdGltZVN0cjsKICAgIFN0cmluZyBkYXlPZk1vbnRoU3RyOwogICAgU3RyaW5nIG1vbnRoU3RyOwogICAgU3RyaW5nIHllYXJTdHI7CgogICAgZm9yICh2YXIgdG9rZW4gaW4gdG9rZW5zKSB7CiAgICAgIGlmICh0b2tlbi5sZW5ndGggPCAxKSBjb250aW51ZTsKICAgICAgaWYgKHRpbWVTdHIgPT0gbnVsbCAmJgogICAgICAgICAgdG9rZW4ubGVuZ3RoID49IDUgJiYKICAgICAgICAgIGlzRGlnaXQodG9rZW5bMF0pICYmCiAgICAgICAgICAodG9rZW5bMV0gPT0gIjoiIHx8IChpc0RpZ2l0KHRva2VuWzFdKSAmJiB0b2tlblsyXSA9PSAiOiIpKSkgewogICAgICAgIHRpbWVTdHIgPSB0b2tlbjsKICAgICAgfSBlbHNlIGlmIChkYXlPZk1vbnRoU3RyID09IG51bGwgJiYgaXNEaWdpdCh0b2tlblswXSkpIHsKICAgICAgICBkYXlPZk1vbnRoU3RyID0gdG9rZW47CiAgICAgIH0gZWxzZSBpZiAobW9udGhTdHIgPT0gbnVsbCAmJiBnZXRNb250aCh0b2tlbikgPj0gMCkgewogICAgICAgIG1vbnRoU3RyID0gdG9rZW47CiAgICAgIH0gZWxzZSBpZiAoeWVhclN0ciA9PSBudWxsICYmCiAgICAgICAgICB0b2tlbi5sZW5ndGggPj0gMiAmJgogICAgICAgICAgaXNEaWdpdCh0b2tlblswXSkgJiYKICAgICAgICAgIGlzRGlnaXQodG9rZW5bMV0pKSB7CiAgICAgICAgeWVhclN0ciA9IHRva2VuOwogICAgICB9CiAgICB9CgogICAgaWYgKHRpbWVTdHIgPT0gbnVsbCB8fAogICAgICAgIGRheU9mTW9udGhTdHIgPT0gbnVsbCB8fAogICAgICAgIG1vbnRoU3RyID09IG51bGwgfHwKICAgICAgICB5ZWFyU3RyID09IG51bGwpIHsKICAgICAgZXJyb3IoKTsKICAgIH0KCiAgICBpbnQgeWVhciA9IHRvSW50KHllYXJTdHIpOwogICAgaWYgKHllYXIgPj0gNzAgJiYgeWVhciA8PSA5OSkKICAgICAgeWVhciArPSAxOTAwOwogICAgZWxzZSBpZiAoeWVhciA+PSAwICYmIHllYXIgPD0gNjkpIHllYXIgKz0gMjAwMDsKICAgIGlmICh5ZWFyIDwgMTYwMSkgZXJyb3IoKTsKCiAgICBpbnQgZGF5T2ZNb250aCA9IHRvSW50KGRheU9mTW9udGhTdHIpOwogICAgaWYgKGRheU9mTW9udGggPCAxIHx8IGRheU9mTW9udGggPiAzMSkgZXJyb3IoKTsKCiAgICBpbnQgbW9udGggPSBnZXRNb250aChtb250aFN0cikgKyAxOwoKICAgIHZhciB0aW1lTGlzdCA9IHRpbWVTdHIuc3BsaXQoIjoiKTsKICAgIGlmICh0aW1lTGlzdC5sZW5ndGggIT0gMykgZXJyb3IoKTsKICAgIGludCBob3VyID0gdG9JbnQodGltZUxpc3RbMF0pOwogICAgaW50IG1pbnV0ZSA9IHRvSW50KHRpbWVMaXN0WzFdKTsKICAgIGludCBzZWNvbmQgPSB0b0ludCh0aW1lTGlzdFsyXSk7CiAgICBpZiAoaG91ciA+IDIzKSBlcnJvcigpOwogICAgaWYgKG1pbnV0ZSA+IDU5KSBlcnJvcigpOwogICAgaWYgKHNlY29uZCA+IDU5KSBlcnJvcigpOwoKICAgIHJldHVybiBuZXcgRGF0ZVRpbWUudXRjKHllYXIsIG1vbnRoLCBkYXlPZk1vbnRoLCBob3VyLCBtaW51dGUsIHNlY29uZCwgMCk7CiAgfQp9CoFoAE5OPAEPARQBBEQMBBEuNgU+ODo1LjkwNzcvMSoqMjdCMjIyAQYgQCoGKFAfDQ0NDQ0NDQ0NDQ0MBwEfKSQUJSATIhMhKCEqIyojFxoEAQYyQD8/BSYrIgUwPSAGJxdRIhARExIQEg8HIA0NDQ0NDQ0NDQ0NDAcBISAhARMQEAEcLDwIPBY8CBkGARoTTioXLEsqGScdIhoKDyoZJx0iGgopHSEaCgg6BgEoMFAoFyclOgYBJg8iLg8bCC8mDCQWHTwIBgEXIjwIBgEjDQ8ODxERIyAxHB4gIBwNEzxAHR4gIBUGEU8EASEyKQ0NDQ0NDQ0NDQ0NDAcBFgETPAYBLQEhIiU1NTU1FAYBJCI1NT4sPj4+FAYBHSIzFAYBISc9BgEaFT4vBgEVF0IcRUFCBgEUGhUUASAmHR8fSRk/Hz0aJB8fHxkIBgEbIRwbDwYBHyIUNB4BKzQBKAEnJyMlJRweHgFPBAIBGWRhcnQ6X2h0dHAvaHR0cF9kYXRlLmRhcnREb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvX2h0dHAvaHR0cF9oZWFkZXJzLmRhcnTAAG12Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuX2h0dHA7CgpjbGFzcyBfSHR0cEhlYWRlcnMgaW1wbGVtZW50cyBIdHRwSGVhZGVycyB7CiAgZmluYWwgTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBfaGVhZGVyczsKICBmaW5hbCBTdHJpbmcgcHJvdG9jb2xWZXJzaW9uOwoKICBib29sIF9tdXRhYmxlID0gdHJ1ZTsgLy8gQXJlIHRoZSBoZWFkZXJzIGN1cnJlbnRseSBtdXRhYmxlPwogIExpc3Q8U3RyaW5nPiBfbm9Gb2xkaW5nSGVhZGVyczsKCiAgaW50IF9jb250ZW50TGVuZ3RoID0gLTE7CiAgYm9vbCBfcGVyc2lzdGVudENvbm5lY3Rpb24gPSB0cnVlOwogIGJvb2wgX2NodW5rZWRUcmFuc2ZlckVuY29kaW5nID0gZmFsc2U7CiAgU3RyaW5nIF9ob3N0OwogIGludCBfcG9ydDsKCiAgZmluYWwgaW50IF9kZWZhdWx0UG9ydEZvclNjaGVtZTsKCiAgX0h0dHBIZWFkZXJzKHRoaXMucHJvdG9jb2xWZXJzaW9uLAogICAgICB7aW50IGRlZmF1bHRQb3J0Rm9yU2NoZW1lOiBIdHRwQ2xpZW50LmRlZmF1bHRIdHRwUG9ydCwKICAgICAgX0h0dHBIZWFkZXJzIGluaXRpYWxIZWFkZXJzfSkKICAgICAgOiBfaGVhZGVycyA9IG5ldyBIYXNoTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PigpLAogICAgICAgIF9kZWZhdWx0UG9ydEZvclNjaGVtZSA9IGRlZmF1bHRQb3J0Rm9yU2NoZW1lIHsKICAgIGlmIChpbml0aWFsSGVhZGVycyAhPSBudWxsKSB7CiAgICAgIGluaXRpYWxIZWFkZXJzLl9oZWFkZXJzLmZvckVhY2goKG5hbWUsIHZhbHVlKSA9PiBfaGVhZGVyc1tuYW1lXSA9IHZhbHVlKTsKICAgICAgX2NvbnRlbnRMZW5ndGggPSBpbml0aWFsSGVhZGVycy5fY29udGVudExlbmd0aDsKICAgICAgX3BlcnNpc3RlbnRDb25uZWN0aW9uID0gaW5pdGlhbEhlYWRlcnMuX3BlcnNpc3RlbnRDb25uZWN0aW9uOwogICAgICBfY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcgPSBpbml0aWFsSGVhZGVycy5fY2h1bmtlZFRyYW5zZmVyRW5jb2Rpbmc7CiAgICAgIF9ob3N0ID0gaW5pdGlhbEhlYWRlcnMuX2hvc3Q7CiAgICAgIF9wb3J0ID0gaW5pdGlhbEhlYWRlcnMuX3BvcnQ7CiAgICB9CiAgICBpZiAocHJvdG9jb2xWZXJzaW9uID09ICIxLjAiKSB7CiAgICAgIF9wZXJzaXN0ZW50Q29ubmVjdGlvbiA9IGZhbHNlOwogICAgICBfY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcgPSBmYWxzZTsKICAgIH0KICB9CgogIExpc3Q8U3RyaW5nPiBvcGVyYXRvciBbXShTdHJpbmcgbmFtZSkgPT4gX2hlYWRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXTsKCiAgU3RyaW5nIHZhbHVlKFN0cmluZyBuYW1lKSB7CiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOwogICAgTGlzdDxTdHJpbmc+IHZhbHVlcyA9IF9oZWFkZXJzW25hbWVdOwogICAgaWYgKHZhbHVlcyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMSkgewogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiTW9yZSB0aGFuIG9uZSB2YWx1ZSBmb3IgaGVhZGVyICRuYW1lIik7CiAgICB9CiAgICByZXR1cm4gdmFsdWVzWzBdOwogIH0KCiAgdm9pZCBhZGQoU3RyaW5nIG5hbWUsIHZhbHVlKSB7CiAgICBfY2hlY2tNdXRhYmxlKCk7CiAgICBfYWRkQWxsKF92YWxpZGF0ZUZpZWxkKG5hbWUpLCB2YWx1ZSk7CiAgfQoKICB2b2lkIF9hZGRBbGwoU3RyaW5nIG5hbWUsIHZhbHVlKSB7CiAgICBhc3NlcnQobmFtZSA9PSBfdmFsaWRhdGVGaWVsZChuYW1lKSk7CiAgICBpZiAodmFsdWUgaXMgSXRlcmFibGUpIHsKICAgICAgZm9yICh2YXIgdiBpbiB2YWx1ZSkgewogICAgICAgIF9hZGQobmFtZSwgX3ZhbGlkYXRlVmFsdWUodikpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBfYWRkKG5hbWUsIF92YWxpZGF0ZVZhbHVlKHZhbHVlKSk7CiAgICB9CiAgfQoKICB2b2lkIHNldChTdHJpbmcgbmFtZSwgT2JqZWN0IHZhbHVlKSB7CiAgICBfY2hlY2tNdXRhYmxlKCk7CiAgICBuYW1lID0gX3ZhbGlkYXRlRmllbGQobmFtZSk7CiAgICBfaGVhZGVycy5yZW1vdmUobmFtZSk7CiAgICBpZiAobmFtZSA9PSBIdHRwSGVhZGVycy50cmFuc2ZlckVuY29kaW5nSGVhZGVyKSB7CiAgICAgIF9jaHVua2VkVHJhbnNmZXJFbmNvZGluZyA9IGZhbHNlOwogICAgfQogICAgX2FkZEFsbChuYW1lLCB2YWx1ZSk7CiAgfQoKICB2b2lkIHJlbW92ZShTdHJpbmcgbmFtZSwgT2JqZWN0IHZhbHVlKSB7CiAgICBfY2hlY2tNdXRhYmxlKCk7CiAgICBuYW1lID0gX3ZhbGlkYXRlRmllbGQobmFtZSk7CiAgICB2YWx1ZSA9IF92YWxpZGF0ZVZhbHVlKHZhbHVlKTsKICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSBfaGVhZGVyc1tuYW1lXTsKICAgIGlmICh2YWx1ZXMgIT0gbnVsbCkgewogICAgICBpbnQgaW5kZXggPSB2YWx1ZXMuaW5kZXhPZih2YWx1ZSk7CiAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgIHZhbHVlcy5yZW1vdmVSYW5nZShpbmRleCwgaW5kZXggKyAxKTsKICAgICAgfQogICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PSAwKSBfaGVhZGVycy5yZW1vdmUobmFtZSk7CiAgICB9CiAgICBpZiAobmFtZSA9PSBIdHRwSGVhZGVycy50cmFuc2ZlckVuY29kaW5nSGVhZGVyICYmIHZhbHVlID09ICJjaHVua2VkIikgewogICAgICBfY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcgPSBmYWxzZTsKICAgIH0KICB9CgogIHZvaWQgcmVtb3ZlQWxsKFN0cmluZyBuYW1lKSB7CiAgICBfY2hlY2tNdXRhYmxlKCk7CiAgICBuYW1lID0gX3ZhbGlkYXRlRmllbGQobmFtZSk7CiAgICBfaGVhZGVycy5yZW1vdmUobmFtZSk7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmKFN0cmluZyBuYW1lLCBMaXN0PFN0cmluZz4gdmFsdWVzKSkgewogICAgX2hlYWRlcnMuZm9yRWFjaChmKTsKICB9CgogIHZvaWQgbm9Gb2xkaW5nKFN0cmluZyBuYW1lKSB7CiAgICBuYW1lID0gX3ZhbGlkYXRlRmllbGQobmFtZSk7CiAgICBpZiAoX25vRm9sZGluZ0hlYWRlcnMgPT0gbnVsbCkgX25vRm9sZGluZ0hlYWRlcnMgPSBuZXcgTGlzdDxTdHJpbmc+KCk7CiAgICBfbm9Gb2xkaW5nSGVhZGVycy5hZGQobmFtZSk7CiAgfQoKICBib29sIGdldCBwZXJzaXN0ZW50Q29ubmVjdGlvbiA9PiBfcGVyc2lzdGVudENvbm5lY3Rpb247CgogIHZvaWQgc2V0IHBlcnNpc3RlbnRDb25uZWN0aW9uKGJvb2wgcGVyc2lzdGVudENvbm5lY3Rpb24pIHsKICAgIF9jaGVja011dGFibGUoKTsKICAgIGlmIChwZXJzaXN0ZW50Q29ubmVjdGlvbiA9PSBfcGVyc2lzdGVudENvbm5lY3Rpb24pIHJldHVybjsKICAgIGlmIChwZXJzaXN0ZW50Q29ubmVjdGlvbikgewogICAgICBpZiAocHJvdG9jb2xWZXJzaW9uID09ICIxLjEiKSB7CiAgICAgICAgcmVtb3ZlKEh0dHBIZWFkZXJzLmNvbm5lY3Rpb25IZWFkZXIsICJjbG9zZSIpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChfY29udGVudExlbmd0aCA9PSAtMSkgewogICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oCiAgICAgICAgICAgICAgIlRyeWluZyB0byBzZXQgJ0Nvbm5lY3Rpb246IEtlZXAtQWxpdmUnIG9uIEhUVFAgMS4wIGhlYWRlcnMgd2l0aCAiCiAgICAgICAgICAgICAgIm5vIENvbnRlbnRMZW5ndGgiKTsKICAgICAgICB9CiAgICAgICAgYWRkKEh0dHBIZWFkZXJzLmNvbm5lY3Rpb25IZWFkZXIsICJrZWVwLWFsaXZlIik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmIChwcm90b2NvbFZlcnNpb24gPT0gIjEuMSIpIHsKICAgICAgICBhZGQoSHR0cEhlYWRlcnMuY29ubmVjdGlvbkhlYWRlciwgImNsb3NlIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVtb3ZlKEh0dHBIZWFkZXJzLmNvbm5lY3Rpb25IZWFkZXIsICJrZWVwLWFsaXZlIik7CiAgICAgIH0KICAgIH0KICAgIF9wZXJzaXN0ZW50Q29ubmVjdGlvbiA9IHBlcnNpc3RlbnRDb25uZWN0aW9uOwogIH0KCiAgaW50IGdldCBjb250ZW50TGVuZ3RoID0+IF9jb250ZW50TGVuZ3RoOwoKICB2b2lkIHNldCBjb250ZW50TGVuZ3RoKGludCBjb250ZW50TGVuZ3RoKSB7CiAgICBfY2hlY2tNdXRhYmxlKCk7CiAgICBpZiAocHJvdG9jb2xWZXJzaW9uID09ICIxLjAiICYmCiAgICAgICAgcGVyc2lzdGVudENvbm5lY3Rpb24gJiYKICAgICAgICBjb250ZW50TGVuZ3RoID09IC0xKSB7CiAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKAogICAgICAgICAgIlRyeWluZyB0byBjbGVhciBDb250ZW50TGVuZ3RoIG9uIEhUVFAgMS4wIGhlYWRlcnMgd2l0aCAiCiAgICAgICAgICAiJ0Nvbm5lY3Rpb246IEtlZXAtQWxpdmUnIHNldCIpOwogICAgfQogICAgaWYgKF9jb250ZW50TGVuZ3RoID09IGNvbnRlbnRMZW5ndGgpIHJldHVybjsKICAgIF9jb250ZW50TGVuZ3RoID0gY29udGVudExlbmd0aDsKICAgIGlmIChfY29udGVudExlbmd0aCA+PSAwKSB7CiAgICAgIGlmIChjaHVua2VkVHJhbnNmZXJFbmNvZGluZykgY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcgPSBmYWxzZTsKICAgICAgX3NldChIdHRwSGVhZGVycy5jb250ZW50TGVuZ3RoSGVhZGVyLCBjb250ZW50TGVuZ3RoLnRvU3RyaW5nKCkpOwogICAgfSBlbHNlIHsKICAgICAgcmVtb3ZlQWxsKEh0dHBIZWFkZXJzLmNvbnRlbnRMZW5ndGhIZWFkZXIpOwogICAgICBpZiAocHJvdG9jb2xWZXJzaW9uID09ICIxLjEiKSB7CiAgICAgICAgY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcgPSB0cnVlOwogICAgICB9CiAgICB9CiAgfQoKICBib29sIGdldCBjaHVua2VkVHJhbnNmZXJFbmNvZGluZyA9PiBfY2h1bmtlZFRyYW5zZmVyRW5jb2Rpbmc7CgogIHZvaWQgc2V0IGNodW5rZWRUcmFuc2ZlckVuY29kaW5nKGJvb2wgY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcpIHsKICAgIF9jaGVja011dGFibGUoKTsKICAgIGlmIChjaHVua2VkVHJhbnNmZXJFbmNvZGluZyAmJiBwcm90b2NvbFZlcnNpb24gPT0gIjEuMCIpIHsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oCiAgICAgICAgICAiVHJ5aW5nIHRvIHNldCAnVHJhbnNmZXItRW5jb2Rpbmc6IENodW5rZWQnIG9uIEhUVFAgMS4wIGhlYWRlcnMiKTsKICAgIH0KICAgIGlmIChjaHVua2VkVHJhbnNmZXJFbmNvZGluZyA9PSBfY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcpIHJldHVybjsKICAgIGlmIChjaHVua2VkVHJhbnNmZXJFbmNvZGluZykgewogICAgICBMaXN0PFN0cmluZz4gdmFsdWVzID0gX2hlYWRlcnNbSHR0cEhlYWRlcnMudHJhbnNmZXJFbmNvZGluZ0hlYWRlcl07CiAgICAgIGlmICgodmFsdWVzID09IG51bGwgfHwgdmFsdWVzLmxhc3QgIT0gImNodW5rZWQiKSkgewogICAgICAgIC8vIEhlYWRlcnMgZG9lcyBub3Qgc3BlY2lmeSBjaHVua2VkIGVuY29kaW5nIC0gYWRkIGl0IGlmIHNldC4KICAgICAgICBfYWRkVmFsdWUoSHR0cEhlYWRlcnMudHJhbnNmZXJFbmNvZGluZ0hlYWRlciwgImNodW5rZWQiKTsKICAgICAgfQogICAgICBjb250ZW50TGVuZ3RoID0gLTE7CiAgICB9IGVsc2UgewogICAgICAvLyBIZWFkZXJzIGRvZXMgc3BlY2lmeSBjaHVua2VkIGVuY29kaW5nIC0gcmVtb3ZlIGl0IGlmIG5vdCBzZXQuCiAgICAgIHJlbW92ZShIdHRwSGVhZGVycy50cmFuc2ZlckVuY29kaW5nSGVhZGVyLCAiY2h1bmtlZCIpOwogICAgfQogICAgX2NodW5rZWRUcmFuc2ZlckVuY29kaW5nID0gY2h1bmtlZFRyYW5zZmVyRW5jb2Rpbmc7CiAgfQoKICBTdHJpbmcgZ2V0IGhvc3QgPT4gX2hvc3Q7CgogIHZvaWQgc2V0IGhvc3QoU3RyaW5nIGhvc3QpIHsKICAgIF9jaGVja011dGFibGUoKTsKICAgIF9ob3N0ID0gaG9zdDsKICAgIF91cGRhdGVIb3N0SGVhZGVyKCk7CiAgfQoKICBpbnQgZ2V0IHBvcnQgPT4gX3BvcnQ7CgogIHZvaWQgc2V0IHBvcnQoaW50IHBvcnQpIHsKICAgIF9jaGVja011dGFibGUoKTsKICAgIF9wb3J0ID0gcG9ydDsKICAgIF91cGRhdGVIb3N0SGVhZGVyKCk7CiAgfQoKICBEYXRlVGltZSBnZXQgaWZNb2RpZmllZFNpbmNlIHsKICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSBfaGVhZGVyc1tIdHRwSGVhZGVycy5pZk1vZGlmaWVkU2luY2VIZWFkZXJdOwogICAgaWYgKHZhbHVlcyAhPSBudWxsKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIEh0dHBEYXRlLnBhcnNlKHZhbHVlc1swXSk7CiAgICAgIH0gb24gRXhjZXB0aW9uIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHNldCBpZk1vZGlmaWVkU2luY2UoRGF0ZVRpbWUgaWZNb2RpZmllZFNpbmNlKSB7CiAgICBfY2hlY2tNdXRhYmxlKCk7CiAgICAvLyBGb3JtYXQgImlmTW9kaWZpZWRTaW5jZSIgaGVhZGVyIHdpdGggZGF0ZSBpbiBHcmVlbndpY2ggTWVhbiBUaW1lIChHTVQpLgogICAgU3RyaW5nIGZvcm1hdHRlZCA9IEh0dHBEYXRlLmZvcm1hdChpZk1vZGlmaWVkU2luY2UudG9VdGMoKSk7CiAgICBfc2V0KEh0dHBIZWFkZXJzLmlmTW9kaWZpZWRTaW5jZUhlYWRlciwgZm9ybWF0dGVkKTsKICB9CgogIERhdGVUaW1lIGdldCBkYXRlIHsKICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSBfaGVhZGVyc1tIdHRwSGVhZGVycy5kYXRlSGVhZGVyXTsKICAgIGlmICh2YWx1ZXMgIT0gbnVsbCkgewogICAgICB0cnkgewogICAgICAgIHJldHVybiBIdHRwRGF0ZS5wYXJzZSh2YWx1ZXNbMF0pOwogICAgICB9IG9uIEV4Y2VwdGlvbiB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCBzZXQgZGF0ZShEYXRlVGltZSBkYXRlKSB7CiAgICBfY2hlY2tNdXRhYmxlKCk7CiAgICAvLyBGb3JtYXQgIkRhdGVUaW1lIiBoZWFkZXIgd2l0aCBkYXRlIGluIEdyZWVud2ljaCBNZWFuIFRpbWUgKEdNVCkuCiAgICBTdHJpbmcgZm9ybWF0dGVkID0gSHR0cERhdGUuZm9ybWF0KGRhdGUudG9VdGMoKSk7CiAgICBfc2V0KCJkYXRlIiwgZm9ybWF0dGVkKTsKICB9CgogIERhdGVUaW1lIGdldCBleHBpcmVzIHsKICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSBfaGVhZGVyc1tIdHRwSGVhZGVycy5leHBpcmVzSGVhZGVyXTsKICAgIGlmICh2YWx1ZXMgIT0gbnVsbCkgewogICAgICB0cnkgewogICAgICAgIHJldHVybiBIdHRwRGF0ZS5wYXJzZSh2YWx1ZXNbMF0pOwogICAgICB9IG9uIEV4Y2VwdGlvbiB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCBzZXQgZXhwaXJlcyhEYXRlVGltZSBleHBpcmVzKSB7CiAgICBfY2hlY2tNdXRhYmxlKCk7CiAgICAvLyBGb3JtYXQgIkV4cGlyZXMiIGhlYWRlciB3aXRoIGRhdGUgaW4gR3JlZW53aWNoIE1lYW4gVGltZSAoR01UKS4KICAgIFN0cmluZyBmb3JtYXR0ZWQgPSBIdHRwRGF0ZS5mb3JtYXQoZXhwaXJlcy50b1V0YygpKTsKICAgIF9zZXQoSHR0cEhlYWRlcnMuZXhwaXJlc0hlYWRlciwgZm9ybWF0dGVkKTsKICB9CgogIENvbnRlbnRUeXBlIGdldCBjb250ZW50VHlwZSB7CiAgICB2YXIgdmFsdWVzID0gX2hlYWRlcnNbSHR0cEhlYWRlcnMuY29udGVudFR5cGVIZWFkZXJdOwogICAgaWYgKHZhbHVlcyAhPSBudWxsKSB7CiAgICAgIHJldHVybiBDb250ZW50VHlwZS5wYXJzZSh2YWx1ZXNbMF0pOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICB2b2lkIHNldCBjb250ZW50VHlwZShDb250ZW50VHlwZSBjb250ZW50VHlwZSkgewogICAgX2NoZWNrTXV0YWJsZSgpOwogICAgX3NldChIdHRwSGVhZGVycy5jb250ZW50VHlwZUhlYWRlciwgY29udGVudFR5cGUudG9TdHJpbmcoKSk7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgX2NoZWNrTXV0YWJsZSgpOwogICAgX2hlYWRlcnMuY2xlYXIoKTsKICAgIF9jb250ZW50TGVuZ3RoID0gLTE7CiAgICBfcGVyc2lzdGVudENvbm5lY3Rpb24gPSB0cnVlOwogICAgX2NodW5rZWRUcmFuc2ZlckVuY29kaW5nID0gZmFsc2U7CiAgICBfaG9zdCA9IG51bGw7CiAgICBfcG9ydCA9IG51bGw7CiAgfQoKICAvLyBbbmFtZV0gbXVzdCBiZSBhIGxvd2VyLWNhc2UgdmVyc2lvbiBvZiB0aGUgbmFtZS4KICB2b2lkIF9hZGQoU3RyaW5nIG5hbWUsIHZhbHVlKSB7CiAgICBhc3NlcnQobmFtZSA9PSBfdmFsaWRhdGVGaWVsZChuYW1lKSk7CiAgICAvLyBVc2UgdGhlIGxlbmd0aCBhcyBpbmRleCBvbiB3aGF0IG1ldGhvZCB0byBjYWxsLiBUaGlzIGlzIG5vdGFibGUKICAgIC8vIGZhc3RlciB0aGFuIGNvbXB1dGluZyBoYXNoIGFuZCBsb29raW5nIHVwIGluIGEgaGFzaC1tYXAuCiAgICBzd2l0Y2ggKG5hbWUubGVuZ3RoKSB7CiAgICAgIGNhc2UgNDoKICAgICAgICBpZiAoSHR0cEhlYWRlcnMuZGF0ZUhlYWRlciA9PSBuYW1lKSB7CiAgICAgICAgICBfYWRkRGF0ZShuYW1lLCB2YWx1ZSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChIdHRwSGVhZGVycy5ob3N0SGVhZGVyID09IG5hbWUpIHsKICAgICAgICAgIF9hZGRIb3N0KG5hbWUsIHZhbHVlKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNzoKICAgICAgICBpZiAoSHR0cEhlYWRlcnMuZXhwaXJlc0hlYWRlciA9PSBuYW1lKSB7CiAgICAgICAgICBfYWRkRXhwaXJlcyhuYW1lLCB2YWx1ZSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDEwOgogICAgICAgIGlmIChIdHRwSGVhZGVycy5jb25uZWN0aW9uSGVhZGVyID09IG5hbWUpIHsKICAgICAgICAgIF9hZGRDb25uZWN0aW9uKG5hbWUsIHZhbHVlKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTI6CiAgICAgICAgaWYgKEh0dHBIZWFkZXJzLmNvbnRlbnRUeXBlSGVhZGVyID09IG5hbWUpIHsKICAgICAgICAgIF9hZGRDb250ZW50VHlwZShuYW1lLCB2YWx1ZSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDE0OgogICAgICAgIGlmIChIdHRwSGVhZGVycy5jb250ZW50TGVuZ3RoSGVhZGVyID09IG5hbWUpIHsKICAgICAgICAgIF9hZGRDb250ZW50TGVuZ3RoKG5hbWUsIHZhbHVlKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTc6CiAgICAgICAgaWYgKEh0dHBIZWFkZXJzLnRyYW5zZmVyRW5jb2RpbmdIZWFkZXIgPT0gbmFtZSkgewogICAgICAgICAgX2FkZFRyYW5zZmVyRW5jb2RpbmcobmFtZSwgdmFsdWUpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoSHR0cEhlYWRlcnMuaWZNb2RpZmllZFNpbmNlSGVhZGVyID09IG5hbWUpIHsKICAgICAgICAgIF9hZGRJZk1vZGlmaWVkU2luY2UobmFtZSwgdmFsdWUpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIF9hZGRWYWx1ZShuYW1lLCB2YWx1ZSk7CiAgfQoKICB2b2lkIF9hZGRDb250ZW50TGVuZ3RoKFN0cmluZyBuYW1lLCB2YWx1ZSkgewogICAgaWYgKHZhbHVlIGlzIGludCkgewogICAgICBjb250ZW50TGVuZ3RoID0gdmFsdWU7CiAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIFN0cmluZykgewogICAgICBjb250ZW50TGVuZ3RoID0gaW50LnBhcnNlKHZhbHVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJVbmV4cGVjdGVkIHR5cGUgZm9yIGhlYWRlciBuYW1lZCAkbmFtZSIpOwogICAgfQogIH0KCiAgdm9pZCBfYWRkVHJhbnNmZXJFbmNvZGluZyhTdHJpbmcgbmFtZSwgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSA9PSAiY2h1bmtlZCIpIHsKICAgICAgY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgX2FkZFZhbHVlKEh0dHBIZWFkZXJzLnRyYW5zZmVyRW5jb2RpbmdIZWFkZXIsIHZhbHVlKTsKICAgIH0KICB9CgogIHZvaWQgX2FkZERhdGUoU3RyaW5nIG5hbWUsIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgaXMgRGF0ZVRpbWUpIHsKICAgICAgZGF0ZSA9IHZhbHVlOwogICAgfSBlbHNlIGlmICh2YWx1ZSBpcyBTdHJpbmcpIHsKICAgICAgX3NldChIdHRwSGVhZGVycy5kYXRlSGVhZGVyLCB2YWx1ZSk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiVW5leHBlY3RlZCB0eXBlIGZvciBoZWFkZXIgbmFtZWQgJG5hbWUiKTsKICAgIH0KICB9CgogIHZvaWQgX2FkZEV4cGlyZXMoU3RyaW5nIG5hbWUsIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgaXMgRGF0ZVRpbWUpIHsKICAgICAgZXhwaXJlcyA9IHZhbHVlOwogICAgfSBlbHNlIGlmICh2YWx1ZSBpcyBTdHJpbmcpIHsKICAgICAgX3NldChIdHRwSGVhZGVycy5leHBpcmVzSGVhZGVyLCB2YWx1ZSk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiVW5leHBlY3RlZCB0eXBlIGZvciBoZWFkZXIgbmFtZWQgJG5hbWUiKTsKICAgIH0KICB9CgogIHZvaWQgX2FkZElmTW9kaWZpZWRTaW5jZShTdHJpbmcgbmFtZSwgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSBpcyBEYXRlVGltZSkgewogICAgICBpZk1vZGlmaWVkU2luY2UgPSB2YWx1ZTsKICAgIH0gZWxzZSBpZiAodmFsdWUgaXMgU3RyaW5nKSB7CiAgICAgIF9zZXQoSHR0cEhlYWRlcnMuaWZNb2RpZmllZFNpbmNlSGVhZGVyLCB2YWx1ZSk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiVW5leHBlY3RlZCB0eXBlIGZvciBoZWFkZXIgbmFtZWQgJG5hbWUiKTsKICAgIH0KICB9CgogIHZvaWQgX2FkZEhvc3QoU3RyaW5nIG5hbWUsIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgaXMgU3RyaW5nKSB7CiAgICAgIGludCBwb3MgPSB2YWx1ZS5pbmRleE9mKCI6Iik7CiAgICAgIGlmIChwb3MgPT0gLTEpIHsKICAgICAgICBfaG9zdCA9IHZhbHVlOwogICAgICAgIF9wb3J0ID0gSHR0cENsaWVudC5kZWZhdWx0SHR0cFBvcnQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHBvcyA+IDApIHsKICAgICAgICAgIF9ob3N0ID0gdmFsdWUuc3Vic3RyaW5nKDAsIHBvcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF9ob3N0ID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKHBvcyArIDEgPT0gdmFsdWUubGVuZ3RoKSB7CiAgICAgICAgICBfcG9ydCA9IEh0dHBDbGllbnQuZGVmYXVsdEh0dHBQb3J0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBfcG9ydCA9IGludC5wYXJzZSh2YWx1ZS5zdWJzdHJpbmcocG9zICsgMSkpOwogICAgICAgICAgfSBvbiBGb3JtYXRFeGNlcHRpb24gewogICAgICAgICAgICBfcG9ydCA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIF9zZXQoSHR0cEhlYWRlcnMuaG9zdEhlYWRlciwgdmFsdWUpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIlVuZXhwZWN0ZWQgdHlwZSBmb3IgaGVhZGVyIG5hbWVkICRuYW1lIik7CiAgICB9CiAgfQoKICB2b2lkIF9hZGRDb25uZWN0aW9uKFN0cmluZyBuYW1lLCB2YWx1ZSkgewogICAgdmFyIGxvd2VyQ2FzZVZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTsKICAgIGlmIChsb3dlckNhc2VWYWx1ZSA9PSAnY2xvc2UnKSB7CiAgICAgIF9wZXJzaXN0ZW50Q29ubmVjdGlvbiA9IGZhbHNlOwogICAgfSBlbHNlIGlmIChsb3dlckNhc2VWYWx1ZSA9PSAna2VlcC1hbGl2ZScpIHsKICAgICAgX3BlcnNpc3RlbnRDb25uZWN0aW9uID0gdHJ1ZTsKICAgIH0KICAgIF9hZGRWYWx1ZShuYW1lLCB2YWx1ZSk7CiAgfQoKICB2b2lkIF9hZGRDb250ZW50VHlwZShTdHJpbmcgbmFtZSwgdmFsdWUpIHsKICAgIF9zZXQoSHR0cEhlYWRlcnMuY29udGVudFR5cGVIZWFkZXIsIHZhbHVlKTsKICB9CgogIHZvaWQgX2FkZFZhbHVlKFN0cmluZyBuYW1lLCBPYmplY3QgdmFsdWUpIHsKICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSBfaGVhZGVyc1tuYW1lXTsKICAgIGlmICh2YWx1ZXMgPT0gbnVsbCkgewogICAgICB2YWx1ZXMgPSBuZXcgTGlzdDxTdHJpbmc+KCk7CiAgICAgIF9oZWFkZXJzW25hbWVdID0gdmFsdWVzOwogICAgfQogICAgaWYgKHZhbHVlIGlzIERhdGVUaW1lKSB7CiAgICAgIHZhbHVlcy5hZGQoSHR0cERhdGUuZm9ybWF0KHZhbHVlKSk7CiAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIFN0cmluZykgewogICAgICB2YWx1ZXMuYWRkKHZhbHVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHZhbHVlcy5hZGQoX3ZhbGlkYXRlVmFsdWUodmFsdWUudG9TdHJpbmcoKSkpOwogICAgfQogIH0KCiAgdm9pZCBfc2V0KFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpIHsKICAgIGFzc2VydChuYW1lID09IF92YWxpZGF0ZUZpZWxkKG5hbWUpKTsKICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSBuZXcgTGlzdDxTdHJpbmc+KCk7CiAgICBfaGVhZGVyc1tuYW1lXSA9IHZhbHVlczsKICAgIHZhbHVlcy5hZGQodmFsdWUpOwogIH0KCiAgX2NoZWNrTXV0YWJsZSgpIHsKICAgIGlmICghX211dGFibGUpIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJIVFRQIGhlYWRlcnMgYXJlIG5vdCBtdXRhYmxlIik7CiAgfQoKICBfdXBkYXRlSG9zdEhlYWRlcigpIHsKICAgIGJvb2wgZGVmYXVsdFBvcnQgPSBfcG9ydCA9PSBudWxsIHx8IF9wb3J0ID09IF9kZWZhdWx0UG9ydEZvclNjaGVtZTsKICAgIF9zZXQoImhvc3QiLCBkZWZhdWx0UG9ydCA/IGhvc3QgOiAiJGhvc3Q6JF9wb3J0Iik7CiAgfQoKICBfZm9sZEhlYWRlcihTdHJpbmcgbmFtZSkgewogICAgaWYgKG5hbWUgPT0gSHR0cEhlYWRlcnMuc2V0Q29va2llSGVhZGVyIHx8CiAgICAgICAgKF9ub0ZvbGRpbmdIZWFkZXJzICE9IG51bGwgJiYgX25vRm9sZGluZ0hlYWRlcnMuaW5kZXhPZihuYW1lKSAhPSAtMSkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICB2b2lkIF9maW5hbGl6ZSgpIHsKICAgIF9tdXRhYmxlID0gZmFsc2U7CiAgfQoKICB2b2lkIF9idWlsZChCeXRlc0J1aWxkZXIgYnVpbGRlcikgewogICAgZm9yIChTdHJpbmcgbmFtZSBpbiBfaGVhZGVycy5rZXlzKSB7CiAgICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSBfaGVhZGVyc1tuYW1lXTsKICAgICAgYm9vbCBmb2xkID0gX2ZvbGRIZWFkZXIobmFtZSk7CiAgICAgIHZhciBuYW1lRGF0YSA9IG5hbWUuY29kZVVuaXRzOwogICAgICBidWlsZGVyLmFkZChuYW1lRGF0YSk7CiAgICAgIGJ1aWxkZXIuYWRkQnl0ZShfQ2hhckNvZGUuQ09MT04pOwogICAgICBidWlsZGVyLmFkZEJ5dGUoX0NoYXJDb2RlLlNQKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoaSA+IDApIHsKICAgICAgICAgIGlmIChmb2xkKSB7CiAgICAgICAgICAgIGJ1aWxkZXIuYWRkQnl0ZShfQ2hhckNvZGUuQ09NTUEpOwogICAgICAgICAgICBidWlsZGVyLmFkZEJ5dGUoX0NoYXJDb2RlLlNQKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJ1aWxkZXIuYWRkQnl0ZShfQ2hhckNvZGUuQ1IpOwogICAgICAgICAgICBidWlsZGVyLmFkZEJ5dGUoX0NoYXJDb2RlLkxGKTsKICAgICAgICAgICAgYnVpbGRlci5hZGQobmFtZURhdGEpOwogICAgICAgICAgICBidWlsZGVyLmFkZEJ5dGUoX0NoYXJDb2RlLkNPTE9OKTsKICAgICAgICAgICAgYnVpbGRlci5hZGRCeXRlKF9DaGFyQ29kZS5TUCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJ1aWxkZXIuYWRkKHZhbHVlc1tpXS5jb2RlVW5pdHMpOwogICAgICB9CiAgICAgIGJ1aWxkZXIuYWRkQnl0ZShfQ2hhckNvZGUuQ1IpOwogICAgICBidWlsZGVyLmFkZEJ5dGUoX0NoYXJDb2RlLkxGKTsKICAgIH0KICB9CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIF9oZWFkZXJzLmZvckVhY2goKFN0cmluZyBuYW1lLCBMaXN0PFN0cmluZz4gdmFsdWVzKSB7CiAgICAgIHNiLi53cml0ZShuYW1lKS4ud3JpdGUoIjogIik7CiAgICAgIGJvb2wgZm9sZCA9IF9mb2xkSGVhZGVyKG5hbWUpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgaWYgKGZvbGQpIHsKICAgICAgICAgICAgc2Iud3JpdGUoIiwgIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzYi4ud3JpdGUoIlxuIikuLndyaXRlKG5hbWUpLi53cml0ZSgiOiAiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc2Iud3JpdGUodmFsdWVzW2ldKTsKICAgICAgfQogICAgICBzYi53cml0ZSgiXG4iKTsKICAgIH0pOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBMaXN0PENvb2tpZT4gX3BhcnNlQ29va2llcygpIHsKICAgIC8vIFBhcnNlIGEgQ29va2llIGhlYWRlciB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGluIFJGQyA2MjY1LgogICAgdmFyIGNvb2tpZXMgPSBuZXcgTGlzdDxDb29raWU+KCk7CiAgICB2b2lkIHBhcnNlQ29va2llU3RyaW5nKFN0cmluZyBzKSB7CiAgICAgIGludCBpbmRleCA9IDA7CgogICAgICBib29sIGRvbmUoKSA9PiBpbmRleCA9PSAtMSB8fCBpbmRleCA9PSBzLmxlbmd0aDsKCiAgICAgIHZvaWQgc2tpcFdTKCkgewogICAgICAgIHdoaWxlICghZG9uZSgpKSB7CiAgICAgICAgICBpZiAoc1tpbmRleF0gIT0gIiAiICYmIHNbaW5kZXhdICE9ICJcdCIpIHJldHVybjsKICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgfQogICAgICB9CgogICAgICBTdHJpbmcgcGFyc2VOYW1lKCkgewogICAgICAgIGludCBzdGFydCA9IGluZGV4OwogICAgICAgIHdoaWxlICghZG9uZSgpKSB7CiAgICAgICAgICBpZiAoc1tpbmRleF0gPT0gIiAiIHx8IHNbaW5kZXhdID09ICJcdCIgfHwgc1tpbmRleF0gPT0gIj0iKSBicmVhazsKICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzLnN1YnN0cmluZyhzdGFydCwgaW5kZXgpOwogICAgICB9CgogICAgICBTdHJpbmcgcGFyc2VWYWx1ZSgpIHsKICAgICAgICBpbnQgc3RhcnQgPSBpbmRleDsKICAgICAgICB3aGlsZSAoIWRvbmUoKSkgewogICAgICAgICAgaWYgKHNbaW5kZXhdID09ICIgIiB8fCBzW2luZGV4XSA9PSAiXHQiIHx8IHNbaW5kZXhdID09ICI7IikgYnJlYWs7CiAgICAgICAgICBpbmRleCsrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcy5zdWJzdHJpbmcoc3RhcnQsIGluZGV4KTsKICAgICAgfQoKICAgICAgYm9vbCBleHBlY3QoU3RyaW5nIGV4cGVjdGVkKSB7CiAgICAgICAgaWYgKGRvbmUoKSkgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChzW2luZGV4XSAhPSBleHBlY3RlZCkgcmV0dXJuIGZhbHNlOwogICAgICAgIGluZGV4Kys7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KCiAgICAgIHdoaWxlICghZG9uZSgpKSB7CiAgICAgICAgc2tpcFdTKCk7CiAgICAgICAgaWYgKGRvbmUoKSkgcmV0dXJuOwogICAgICAgIFN0cmluZyBuYW1lID0gcGFyc2VOYW1lKCk7CiAgICAgICAgc2tpcFdTKCk7CiAgICAgICAgaWYgKCFleHBlY3QoIj0iKSkgewogICAgICAgICAgaW5kZXggPSBzLmluZGV4T2YoJzsnLCBpbmRleCk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgc2tpcFdTKCk7CiAgICAgICAgU3RyaW5nIHZhbHVlID0gcGFyc2VWYWx1ZSgpOwogICAgICAgIHRyeSB7CiAgICAgICAgICBjb29raWVzLmFkZChuZXcgX0Nvb2tpZShuYW1lLCB2YWx1ZSkpOwogICAgICAgIH0gY2F0Y2ggKF8pIHsKICAgICAgICAgIC8vIFNraXAgaXQsIGludmFsaWQgY29va2llIGRhdGEuCiAgICAgICAgfQogICAgICAgIHNraXBXUygpOwogICAgICAgIGlmIChkb25lKCkpIHJldHVybjsKICAgICAgICBpZiAoIWV4cGVjdCgiOyIpKSB7CiAgICAgICAgICBpbmRleCA9IHMuaW5kZXhPZignOycsIGluZGV4KTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSBfaGVhZGVyc1tIdHRwSGVhZGVycy5jb29raWVIZWFkZXJdOwogICAgaWYgKHZhbHVlcyAhPSBudWxsKSB7CiAgICAgIHZhbHVlcy5mb3JFYWNoKChoZWFkZXJWYWx1ZSkgPT4gcGFyc2VDb29raWVTdHJpbmcoaGVhZGVyVmFsdWUpKTsKICAgIH0KICAgIHJldHVybiBjb29raWVzOwogIH0KCiAgc3RhdGljIFN0cmluZyBfdmFsaWRhdGVGaWVsZChTdHJpbmcgZmllbGQpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmllbGQubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKCFfSHR0cFBhcnNlci5faXNUb2tlbkNoYXIoZmllbGQuY29kZVVuaXRBdChpKSkpIHsKICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKAogICAgICAgICAgICAiSW52YWxpZCBIVFRQIGhlYWRlciBmaWVsZCBuYW1lOiAke2pzb24uZW5jb2RlKGZpZWxkKX0iKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZpZWxkLnRvTG93ZXJDYXNlKCk7CiAgfQoKICBzdGF0aWMgX3ZhbGlkYXRlVmFsdWUodmFsdWUpIHsKICAgIGlmICh2YWx1ZSBpcyEgU3RyaW5nKSByZXR1cm4gdmFsdWU7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICghX0h0dHBQYXJzZXIuX2lzVmFsdWVDaGFyKHZhbHVlLmNvZGVVbml0QXQoaSkpKSB7CiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgIkludmFsaWQgSFRUUCBoZWFkZXIgZmllbGQgdmFsdWU6ICR7anNvbi5lbmNvZGUodmFsdWUpfSIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQp9CgpjbGFzcyBfSGVhZGVyVmFsdWUgaW1wbGVtZW50cyBIZWFkZXJWYWx1ZSB7CiAgU3RyaW5nIF92YWx1ZTsKICBNYXA8U3RyaW5nLCBTdHJpbmc+IF9wYXJhbWV0ZXJzOwogIE1hcDxTdHJpbmcsIFN0cmluZz4gX3VubW9kaWZpYWJsZVBhcmFtZXRlcnM7CgogIF9IZWFkZXJWYWx1ZShbdGhpcy5fdmFsdWUgPSAiIiwgTWFwPFN0cmluZywgU3RyaW5nPiBwYXJhbWV0ZXJzXSkgewogICAgaWYgKHBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICBfcGFyYW1ldGVycyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPi5mcm9tKHBhcmFtZXRlcnMpOwogICAgfQogIH0KCiAgc3RhdGljIF9IZWFkZXJWYWx1ZSBwYXJzZShTdHJpbmcgdmFsdWUsCiAgICAgIHtwYXJhbWV0ZXJTZXBhcmF0b3I6ICI7IiwKICAgICAgdmFsdWVTZXBhcmF0b3I6IG51bGwsCiAgICAgIHByZXNlcnZlQmFja3NsYXNoOiBmYWxzZX0pIHsKICAgIC8vIFBhcnNlIHRoZSBzdHJpbmcuCiAgICB2YXIgcmVzdWx0ID0gbmV3IF9IZWFkZXJWYWx1ZSgpOwogICAgcmVzdWx0Ll9wYXJzZSh2YWx1ZSwgcGFyYW1ldGVyU2VwYXJhdG9yLCB2YWx1ZVNlcGFyYXRvciwgcHJlc2VydmVCYWNrc2xhc2gpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFN0cmluZyBnZXQgdmFsdWUgPT4gX3ZhbHVlOwoKICB2b2lkIF9lbnN1cmVQYXJhbWV0ZXJzKCkgewogICAgaWYgKF9wYXJhbWV0ZXJzID09IG51bGwpIHsKICAgICAgX3BhcmFtZXRlcnMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKICAgIH0KICB9CgogIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0IHBhcmFtZXRlcnMgewogICAgX2Vuc3VyZVBhcmFtZXRlcnMoKTsKICAgIGlmIChfdW5tb2RpZmlhYmxlUGFyYW1ldGVycyA9PSBudWxsKSB7CiAgICAgIF91bm1vZGlmaWFibGVQYXJhbWV0ZXJzID0gbmV3IFVubW9kaWZpYWJsZU1hcFZpZXcoX3BhcmFtZXRlcnMpOwogICAgfQogICAgcmV0dXJuIF91bm1vZGlmaWFibGVQYXJhbWV0ZXJzOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoX3ZhbHVlKTsKICAgIGlmIChwYXJhbWV0ZXJzICE9IG51bGwgJiYgcGFyYW1ldGVycy5sZW5ndGggPiAwKSB7CiAgICAgIF9wYXJhbWV0ZXJzLmZvckVhY2goKFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpIHsKICAgICAgICBzYi4ud3JpdGUoIjsgIikuLndyaXRlKG5hbWUpLi53cml0ZSgiPSIpLi53cml0ZSh2YWx1ZSk7CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICB2b2lkIF9wYXJzZShTdHJpbmcgcywgU3RyaW5nIHBhcmFtZXRlclNlcGFyYXRvciwgU3RyaW5nIHZhbHVlU2VwYXJhdG9yLAogICAgICBib29sIHByZXNlcnZlQmFja3NsYXNoKSB7CiAgICBpbnQgaW5kZXggPSAwOwoKICAgIGJvb2wgZG9uZSgpID0+IGluZGV4ID09IHMubGVuZ3RoOwoKICAgIHZvaWQgc2tpcFdTKCkgewogICAgICB3aGlsZSAoIWRvbmUoKSkgewogICAgICAgIGlmIChzW2luZGV4XSAhPSAiICIgJiYgc1tpbmRleF0gIT0gIlx0IikgcmV0dXJuOwogICAgICAgIGluZGV4Kys7CiAgICAgIH0KICAgIH0KCiAgICBTdHJpbmcgcGFyc2VWYWx1ZSgpIHsKICAgICAgaW50IHN0YXJ0ID0gaW5kZXg7CiAgICAgIHdoaWxlICghZG9uZSgpKSB7CiAgICAgICAgaWYgKHNbaW5kZXhdID09ICIgIiB8fAogICAgICAgICAgICBzW2luZGV4XSA9PSAiXHQiIHx8CiAgICAgICAgICAgIHNbaW5kZXhdID09IHZhbHVlU2VwYXJhdG9yIHx8CiAgICAgICAgICAgIHNbaW5kZXhdID09IHBhcmFtZXRlclNlcGFyYXRvcikgYnJlYWs7CiAgICAgICAgaW5kZXgrKzsKICAgICAgfQogICAgICByZXR1cm4gcy5zdWJzdHJpbmcoc3RhcnQsIGluZGV4KTsKICAgIH0KCiAgICB2b2lkIGV4cGVjdChTdHJpbmcgZXhwZWN0ZWQpIHsKICAgICAgaWYgKGRvbmUoKSB8fCBzW2luZGV4XSAhPSBleHBlY3RlZCkgewogICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJGYWlsZWQgdG8gcGFyc2UgaGVhZGVyIHZhbHVlIik7CiAgICAgIH0KICAgICAgaW5kZXgrKzsKICAgIH0KCiAgICB2b2lkIG1heWJlRXhwZWN0KFN0cmluZyBleHBlY3RlZCkgewogICAgICBpZiAoc1tpbmRleF0gPT0gZXhwZWN0ZWQpIGluZGV4Kys7CiAgICB9CgogICAgdm9pZCBwYXJzZVBhcmFtZXRlcnMoKSB7CiAgICAgIHZhciBwYXJhbWV0ZXJzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CiAgICAgIF9wYXJhbWV0ZXJzID0gbmV3IFVubW9kaWZpYWJsZU1hcFZpZXcocGFyYW1ldGVycyk7CgogICAgICBTdHJpbmcgcGFyc2VQYXJhbWV0ZXJOYW1lKCkgewogICAgICAgIGludCBzdGFydCA9IGluZGV4OwogICAgICAgIHdoaWxlICghZG9uZSgpKSB7CiAgICAgICAgICBpZiAoc1tpbmRleF0gPT0gIiAiIHx8CiAgICAgICAgICAgICAgc1tpbmRleF0gPT0gIlx0IiB8fAogICAgICAgICAgICAgIHNbaW5kZXhdID09ICI9IiB8fAogICAgICAgICAgICAgIHNbaW5kZXhdID09IHBhcmFtZXRlclNlcGFyYXRvciB8fAogICAgICAgICAgICAgIHNbaW5kZXhdID09IHZhbHVlU2VwYXJhdG9yKSBicmVhazsKICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzLnN1YnN0cmluZyhzdGFydCwgaW5kZXgpLnRvTG93ZXJDYXNlKCk7CiAgICAgIH0KCiAgICAgIFN0cmluZyBwYXJzZVBhcmFtZXRlclZhbHVlKCkgewogICAgICAgIGlmICghZG9uZSgpICYmIHNbaW5kZXhdID09ICJcIiIpIHsKICAgICAgICAgIC8vIFBhcnNlIHF1b3RlZCB2YWx1ZS4KICAgICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgICB3aGlsZSAoIWRvbmUoKSkgewogICAgICAgICAgICBpZiAoc1tpbmRleF0gPT0gIlxcIikgewogICAgICAgICAgICAgIGlmIChpbmRleCArIDEgPT0gcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJGYWlsZWQgdG8gcGFyc2UgaGVhZGVyIHZhbHVlIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChwcmVzZXJ2ZUJhY2tzbGFzaCAmJiBzW2luZGV4ICsgMV0gIT0gIlwiIikgewogICAgICAgICAgICAgICAgc2Iud3JpdGUoc1tpbmRleF0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpbmRleCsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKHNbaW5kZXhdID09ICJcIiIpIHsKICAgICAgICAgICAgICBpbmRleCsrOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNiLndyaXRlKHNbaW5kZXhdKTsKICAgICAgICAgICAgaW5kZXgrKzsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBQYXJzZSBub24tcXVvdGVkIHZhbHVlLgogICAgICAgICAgdmFyIHZhbCA9IHBhcnNlVmFsdWUoKTsKICAgICAgICAgIHJldHVybiB2YWwgPT0gIiIgPyBudWxsIDogdmFsOwogICAgICAgIH0KICAgICAgfQoKICAgICAgd2hpbGUgKCFkb25lKCkpIHsKICAgICAgICBza2lwV1MoKTsKICAgICAgICBpZiAoZG9uZSgpKSByZXR1cm47CiAgICAgICAgU3RyaW5nIG5hbWUgPSBwYXJzZVBhcmFtZXRlck5hbWUoKTsKICAgICAgICBza2lwV1MoKTsKICAgICAgICBpZiAoZG9uZSgpKSB7CiAgICAgICAgICBwYXJhbWV0ZXJzW25hbWVdID0gbnVsbDsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgbWF5YmVFeHBlY3QoIj0iKTsKICAgICAgICBza2lwV1MoKTsKICAgICAgICBpZiAoZG9uZSgpKSB7CiAgICAgICAgICBwYXJhbWV0ZXJzW25hbWVdID0gbnVsbDsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgU3RyaW5nIHZhbHVlID0gcGFyc2VQYXJhbWV0ZXJWYWx1ZSgpOwogICAgICAgIGlmIChuYW1lID09ICdjaGFyc2V0JyAmJiB0aGlzIGlzIF9Db250ZW50VHlwZSAmJiB2YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgICAvLyBDaGFyc2V0IHBhcmFtZXRlciBvZiBDb250ZW50VHlwZXMgYXJlIGFsd2F5cyBsb3dlci1jYXNlLgogICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpOwogICAgICAgIH0KICAgICAgICBwYXJhbWV0ZXJzW25hbWVdID0gdmFsdWU7CiAgICAgICAgc2tpcFdTKCk7CiAgICAgICAgaWYgKGRvbmUoKSkgcmV0dXJuOwogICAgICAgIC8vIFRPRE86IEltcGxlbWVudCBzdXBwb3J0IGZvciBtdWx0aS12YWx1ZWQgcGFyYW1ldGVycy4KICAgICAgICBpZiAoc1tpbmRleF0gPT0gdmFsdWVTZXBhcmF0b3IpIHJldHVybjsKICAgICAgICBleHBlY3QocGFyYW1ldGVyU2VwYXJhdG9yKTsKICAgICAgfQogICAgfQoKICAgIHNraXBXUygpOwogICAgX3ZhbHVlID0gcGFyc2VWYWx1ZSgpOwogICAgc2tpcFdTKCk7CiAgICBpZiAoZG9uZSgpKSByZXR1cm47CiAgICBtYXliZUV4cGVjdChwYXJhbWV0ZXJTZXBhcmF0b3IpOwogICAgcGFyc2VQYXJhbWV0ZXJzKCk7CiAgfQp9CgpjbGFzcyBfQ29udGVudFR5cGUgZXh0ZW5kcyBfSGVhZGVyVmFsdWUgaW1wbGVtZW50cyBDb250ZW50VHlwZSB7CiAgU3RyaW5nIF9wcmltYXJ5VHlwZSA9ICIiOwogIFN0cmluZyBfc3ViVHlwZSA9ICIiOwoKICBfQ29udGVudFR5cGUoU3RyaW5nIHByaW1hcnlUeXBlLCBTdHJpbmcgc3ViVHlwZSwgU3RyaW5nIGNoYXJzZXQsCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1ldGVycykKICAgICAgOiBfcHJpbWFyeVR5cGUgPSBwcmltYXJ5VHlwZSwKICAgICAgICBfc3ViVHlwZSA9IHN1YlR5cGUsCiAgICAgICAgc3VwZXIoIiIpIHsKICAgIGlmIChfcHJpbWFyeVR5cGUgPT0gbnVsbCkgX3ByaW1hcnlUeXBlID0gIiI7CiAgICBpZiAoX3N1YlR5cGUgPT0gbnVsbCkgX3N1YlR5cGUgPSAiIjsKICAgIF92YWx1ZSA9ICIkX3ByaW1hcnlUeXBlLyRfc3ViVHlwZSI7CiAgICBpZiAocGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgIF9lbnN1cmVQYXJhbWV0ZXJzKCk7CiAgICAgIHBhcmFtZXRlcnMuZm9yRWFjaCgoU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlKSB7CiAgICAgICAgU3RyaW5nIGxvd2VyQ2FzZUtleSA9IGtleS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGlmIChsb3dlckNhc2VLZXkgPT0gImNoYXJzZXQiKSB7CiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX3BhcmFtZXRlcnNbbG93ZXJDYXNlS2V5XSA9IHZhbHVlOwogICAgICB9KTsKICAgIH0KICAgIGlmIChjaGFyc2V0ICE9IG51bGwpIHsKICAgICAgX2Vuc3VyZVBhcmFtZXRlcnMoKTsKICAgICAgdGhpcy5fcGFyYW1ldGVyc1siY2hhcnNldCJdID0gY2hhcnNldC50b0xvd2VyQ2FzZSgpOwogICAgfQogIH0KCiAgX0NvbnRlbnRUeXBlLl8oKTsKCiAgc3RhdGljIF9Db250ZW50VHlwZSBwYXJzZShTdHJpbmcgdmFsdWUpIHsKICAgIHZhciByZXN1bHQgPSBuZXcgX0NvbnRlbnRUeXBlLl8oKTsKICAgIHJlc3VsdC5fcGFyc2UodmFsdWUsICI7IiwgbnVsbCwgZmFsc2UpOwogICAgaW50IGluZGV4ID0gcmVzdWx0Ll92YWx1ZS5pbmRleE9mKCIvIik7CiAgICBpZiAoaW5kZXggPT0gLTEgfHwgaW5kZXggPT0gKHJlc3VsdC5fdmFsdWUubGVuZ3RoIC0gMSkpIHsKICAgICAgcmVzdWx0Ll9wcmltYXJ5VHlwZSA9IHJlc3VsdC5fdmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7CiAgICAgIHJlc3VsdC5fc3ViVHlwZSA9ICIiOwogICAgfSBlbHNlIHsKICAgICAgcmVzdWx0Ll9wcmltYXJ5VHlwZSA9CiAgICAgICAgICByZXN1bHQuX3ZhbHVlLnN1YnN0cmluZygwLCBpbmRleCkudHJpbSgpLnRvTG93ZXJDYXNlKCk7CiAgICAgIHJlc3VsdC5fc3ViVHlwZSA9IHJlc3VsdC5fdmFsdWUuc3Vic3RyaW5nKGluZGV4ICsgMSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU3RyaW5nIGdldCBtaW1lVHlwZSA9PiAnJHByaW1hcnlUeXBlLyRzdWJUeXBlJzsKCiAgU3RyaW5nIGdldCBwcmltYXJ5VHlwZSA9PiBfcHJpbWFyeVR5cGU7CgogIFN0cmluZyBnZXQgc3ViVHlwZSA9PiBfc3ViVHlwZTsKCiAgU3RyaW5nIGdldCBjaGFyc2V0ID0+IHBhcmFtZXRlcnNbImNoYXJzZXQiXTsKfQoKY2xhc3MgX0Nvb2tpZSBpbXBsZW1lbnRzIENvb2tpZSB7CiAgU3RyaW5nIF9uYW1lOwogIFN0cmluZyBfdmFsdWU7CiAgRGF0ZVRpbWUgZXhwaXJlczsKICBpbnQgbWF4QWdlOwogIFN0cmluZyBkb21haW47CiAgU3RyaW5nIHBhdGg7CiAgYm9vbCBodHRwT25seSA9IGZhbHNlOwogIGJvb2wgc2VjdXJlID0gZmFsc2U7CgogIF9Db29raWUoU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkKICAgICAgOiBfbmFtZSA9IF92YWxpZGF0ZU5hbWUobmFtZSksCiAgICAgICAgX3ZhbHVlID0gX3ZhbGlkYXRlVmFsdWUodmFsdWUpLAogICAgICAgIGh0dHBPbmx5ID0gdHJ1ZTsKCiAgU3RyaW5nIGdldCBuYW1lID0+IF9uYW1lOwogIFN0cmluZyBnZXQgdmFsdWUgPT4gX3ZhbHVlOwoKICBzZXQgbmFtZShTdHJpbmcgbmV3TmFtZSkgewogICAgX3ZhbGlkYXRlTmFtZShuZXdOYW1lKTsKICAgIF9uYW1lID0gbmV3TmFtZTsKICB9CgogIHNldCB2YWx1ZShTdHJpbmcgbmV3VmFsdWUpIHsKICAgIF92YWxpZGF0ZVZhbHVlKG5ld1ZhbHVlKTsKICAgIF92YWx1ZSA9IG5ld1ZhbHVlOwogIH0KCiAgX0Nvb2tpZS5mcm9tU2V0Q29va2llVmFsdWUoU3RyaW5nIHZhbHVlKSB7CiAgICAvLyBQYXJzZSB0aGUgJ3NldC1jb29raWUnIGhlYWRlciB2YWx1ZS4KICAgIF9wYXJzZVNldENvb2tpZVZhbHVlKHZhbHVlKTsKICB9CgogIC8vIFBhcnNlIGEgJ3NldC1jb29raWUnIGhlYWRlciB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGluIFJGQyA2MjY1LgogIHZvaWQgX3BhcnNlU2V0Q29va2llVmFsdWUoU3RyaW5nIHMpIHsKICAgIGludCBpbmRleCA9IDA7CgogICAgYm9vbCBkb25lKCkgPT4gaW5kZXggPT0gcy5sZW5ndGg7CgogICAgU3RyaW5nIHBhcnNlTmFtZSgpIHsKICAgICAgaW50IHN0YXJ0ID0gaW5kZXg7CiAgICAgIHdoaWxlICghZG9uZSgpKSB7CiAgICAgICAgaWYgKHNbaW5kZXhdID09ICI9IikgYnJlYWs7CiAgICAgICAgaW5kZXgrKzsKICAgICAgfQogICAgICByZXR1cm4gcy5zdWJzdHJpbmcoc3RhcnQsIGluZGV4KS50cmltKCk7CiAgICB9CgogICAgU3RyaW5nIHBhcnNlVmFsdWUoKSB7CiAgICAgIGludCBzdGFydCA9IGluZGV4OwogICAgICB3aGlsZSAoIWRvbmUoKSkgewogICAgICAgIGlmIChzW2luZGV4XSA9PSAiOyIpIGJyZWFrOwogICAgICAgIGluZGV4Kys7CiAgICAgIH0KICAgICAgcmV0dXJuIHMuc3Vic3RyaW5nKHN0YXJ0LCBpbmRleCkudHJpbSgpOwogICAgfQoKICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGVzKCkgewogICAgICBTdHJpbmcgcGFyc2VBdHRyaWJ1dGVOYW1lKCkgewogICAgICAgIGludCBzdGFydCA9IGluZGV4OwogICAgICAgIHdoaWxlICghZG9uZSgpKSB7CiAgICAgICAgICBpZiAoc1tpbmRleF0gPT0gIj0iIHx8IHNbaW5kZXhdID09ICI7IikgYnJlYWs7CiAgICAgICAgICBpbmRleCsrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcy5zdWJzdHJpbmcoc3RhcnQsIGluZGV4KS50cmltKCkudG9Mb3dlckNhc2UoKTsKICAgICAgfQoKICAgICAgU3RyaW5nIHBhcnNlQXR0cmlidXRlVmFsdWUoKSB7CiAgICAgICAgaW50IHN0YXJ0ID0gaW5kZXg7CiAgICAgICAgd2hpbGUgKCFkb25lKCkpIHsKICAgICAgICAgIGlmIChzW2luZGV4XSA9PSAiOyIpIGJyZWFrOwogICAgICAgICAgaW5kZXgrKzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHMuc3Vic3RyaW5nKHN0YXJ0LCBpbmRleCkudHJpbSgpLnRvTG93ZXJDYXNlKCk7CiAgICAgIH0KCiAgICAgIHdoaWxlICghZG9uZSgpKSB7CiAgICAgICAgU3RyaW5nIG5hbWUgPSBwYXJzZUF0dHJpYnV0ZU5hbWUoKTsKICAgICAgICBTdHJpbmcgdmFsdWUgPSAiIjsKICAgICAgICBpZiAoIWRvbmUoKSAmJiBzW2luZGV4XSA9PSAiPSIpIHsKICAgICAgICAgIGluZGV4Kys7IC8vIFNraXAgdGhlID0gY2hhcmFjdGVyLgogICAgICAgICAgdmFsdWUgPSBwYXJzZUF0dHJpYnV0ZVZhbHVlKCk7CiAgICAgICAgfQogICAgICAgIGlmIChuYW1lID09ICJleHBpcmVzIikgewogICAgICAgICAgZXhwaXJlcyA9IEh0dHBEYXRlLl9wYXJzZUNvb2tpZURhdGUodmFsdWUpOwogICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAibWF4LWFnZSIpIHsKICAgICAgICAgIG1heEFnZSA9IGludC5wYXJzZSh2YWx1ZSk7CiAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJkb21haW4iKSB7CiAgICAgICAgICBkb21haW4gPSB2YWx1ZTsKICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gInBhdGgiKSB7CiAgICAgICAgICBwYXRoID0gdmFsdWU7CiAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJodHRwb25seSIpIHsKICAgICAgICAgIGh0dHBPbmx5ID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gInNlY3VyZSIpIHsKICAgICAgICAgIHNlY3VyZSA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGlmICghZG9uZSgpKSBpbmRleCsrOyAvLyBTa2lwIHRoZSA7IGNoYXJhY3RlcgogICAgICB9CiAgICB9CgogICAgX25hbWUgPSBfdmFsaWRhdGVOYW1lKHBhcnNlTmFtZSgpKTsKICAgIGlmIChkb25lKCkgfHwgX25hbWUubGVuZ3RoID09IDApIHsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkZhaWxlZCB0byBwYXJzZSBoZWFkZXIgdmFsdWUgWyRzXSIpOwogICAgfQogICAgaW5kZXgrKzsgLy8gU2tpcCB0aGUgPSBjaGFyYWN0ZXIuCiAgICBfdmFsdWUgPSBfdmFsaWRhdGVWYWx1ZShwYXJzZVZhbHVlKCkpOwogICAgaWYgKGRvbmUoKSkgcmV0dXJuOwogICAgaW5kZXgrKzsgLy8gU2tpcCB0aGUgOyBjaGFyYWN0ZXIuCiAgICBwYXJzZUF0dHJpYnV0ZXMoKTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLi53cml0ZShfbmFtZSkuLndyaXRlKCI9IikuLndyaXRlKF92YWx1ZSk7CiAgICBpZiAoZXhwaXJlcyAhPSBudWxsKSB7CiAgICAgIHNiLi53cml0ZSgiOyBFeHBpcmVzPSIpLi53cml0ZShIdHRwRGF0ZS5mb3JtYXQoZXhwaXJlcykpOwogICAgfQogICAgaWYgKG1heEFnZSAhPSBudWxsKSB7CiAgICAgIHNiLi53cml0ZSgiOyBNYXgtQWdlPSIpLi53cml0ZShtYXhBZ2UpOwogICAgfQogICAgaWYgKGRvbWFpbiAhPSBudWxsKSB7CiAgICAgIHNiLi53cml0ZSgiOyBEb21haW49IikuLndyaXRlKGRvbWFpbik7CiAgICB9CiAgICBpZiAocGF0aCAhPSBudWxsKSB7CiAgICAgIHNiLi53cml0ZSgiOyBQYXRoPSIpLi53cml0ZShwYXRoKTsKICAgIH0KICAgIGlmIChzZWN1cmUpIHNiLndyaXRlKCI7IFNlY3VyZSIpOwogICAgaWYgKGh0dHBPbmx5KSBzYi53cml0ZSgiOyBIdHRwT25seSIpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF92YWxpZGF0ZU5hbWUoU3RyaW5nIG5ld05hbWUpIHsKICAgIGNvbnN0IHNlcGFyYXRvcnMgPSBjb25zdCBbCiAgICAgICIoIiwKICAgICAgIikiLAogICAgICAiPCIsCiAgICAgICI+IiwKICAgICAgIkAiLAogICAgICAiLCIsCiAgICAgICI7IiwKICAgICAgIjoiLAogICAgICAiXFwiLAogICAgICAnIicsCiAgICAgICIvIiwKICAgICAgIlsiLAogICAgICAiXSIsCiAgICAgICI/IiwKICAgICAgIj0iLAogICAgICAieyIsCiAgICAgICJ9IgogICAgXTsKICAgIGlmIChuZXdOYW1lID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoIm5hbWUiKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmV3TmFtZS5sZW5ndGg7IGkrKykgewogICAgICBpbnQgY29kZVVuaXQgPSBuZXdOYW1lLmNvZGVVbml0c1tpXTsKICAgICAgaWYgKGNvZGVVbml0IDw9IDMyIHx8CiAgICAgICAgICBjb2RlVW5pdCA+PSAxMjcgfHwKICAgICAgICAgIHNlcGFyYXRvcnMuaW5kZXhPZihuZXdOYW1lW2ldKSA+PSAwKSB7CiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgIkludmFsaWQgY2hhcmFjdGVyIGluIGNvb2tpZSBuYW1lLCBjb2RlIHVuaXQ6ICckY29kZVVuaXQnIiwKICAgICAgICAgICAgbmV3TmFtZSwKICAgICAgICAgICAgaSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXdOYW1lOwogIH0KCiAgc3RhdGljIFN0cmluZyBfdmFsaWRhdGVWYWx1ZShTdHJpbmcgbmV3VmFsdWUpIHsKICAgIGlmIChuZXdWYWx1ZSA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJ2YWx1ZSIpOwogICAgLy8gUGVyIFJGQyA2MjY1LCBjb25zaWRlciBzdXJyb3VuZGluZyAiIiBhcyBwYXJ0IG9mIHRoZSB2YWx1ZSwgYnV0IG90aGVyd2lzZQogICAgLy8gZG91YmxlIHF1b3RlcyBhcmUgbm90IGFsbG93ZWQuCiAgICBpbnQgc3RhcnQgPSAwOwogICAgaW50IGVuZCA9IG5ld1ZhbHVlLmxlbmd0aDsKICAgIGlmICgyIDw9IG5ld1ZhbHVlLmxlbmd0aCAmJgogICAgICAgIG5ld1ZhbHVlLmNvZGVVbml0c1tzdGFydF0gPT0gMHgyMiAmJgogICAgICAgIG5ld1ZhbHVlLmNvZGVVbml0c1tlbmQgLSAxXSA9PSAweDIyKSB7CiAgICAgIHN0YXJ0Kys7CiAgICAgIGVuZC0tOwogICAgfQoKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIGludCBjb2RlVW5pdCA9IG5ld1ZhbHVlLmNvZGVVbml0c1tpXTsKICAgICAgaWYgKCEoY29kZVVuaXQgPT0gMHgyMSB8fAogICAgICAgICAgKGNvZGVVbml0ID49IDB4MjMgJiYgY29kZVVuaXQgPD0gMHgyQikgfHwKICAgICAgICAgIChjb2RlVW5pdCA+PSAweDJEICYmIGNvZGVVbml0IDw9IDB4M0EpIHx8CiAgICAgICAgICAoY29kZVVuaXQgPj0gMHgzQyAmJiBjb2RlVW5pdCA8PSAweDVCKSB8fAog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LCA4MCwgNDcsIDQ5LCA0Nl07CiAgLy8gQnl0ZXMgZm9yICJIVFRQLzEuMCIuCiAgc3RhdGljIGNvbnN0IEhUVFAxMCA9IGNvbnN0IFs3MiwgODQsIDg0LCA4MCwgNDcsIDQ5LCA0NiwgNDhdOwogIC8vIEJ5dGVzIGZvciAiSFRUUC8xLjEiLgogIHN0YXRpYyBjb25zdCBIVFRQMTEgPSBjb25zdCBbNzIsIDg0LCA4NCwgODAsIDQ3LCA0OSwgNDYsIDQ5XTsKCiAgc3RhdGljIGNvbnN0IGJvb2wgVCA9IHRydWU7CiAgc3RhdGljIGNvbnN0IGJvb2wgRiA9IGZhbHNlOwogIC8vIExvb3B1cC1tYXAgZm9yIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczogJygpPD5ALDs6XFwiL1tdPz17fSBcdCcuCiAgc3RhdGljIGNvbnN0IFNFUEFSQVRPUl9NQVAgPSBjb25zdCBbCiAgICBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBULCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCAvLwogICAgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgVCwgRiwgVCwgRiwgRiwgRiwgRiwgRiwgVCwgVCwgRiwgRiwgVCwgRiwgRiwgVCwgLy8KICAgIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIFQsIFQsIFQsIFQsIFQsIFQsIFQsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIC8vCiAgICBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBULCBULCBULCBGLCBGLCAvLwogICAgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgLy8KICAgIEYsIEYsIEYsIFQsIEYsIFQsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIC8vCiAgICBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCAvLwogICAgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgLy8KICAgIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIC8vCiAgICBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCAvLwogICAgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRgogIF07Cn0KCi8vIEZyZXF1ZW50bHkgdXNlZCBjaGFyYWN0ZXIgY29kZXMuCmNsYXNzIF9DaGFyQ29kZSB7CiAgc3RhdGljIGNvbnN0IGludCBIVCA9IDk7CiAgc3RhdGljIGNvbnN0IGludCBMRiA9IDEwOwogIHN0YXRpYyBjb25zdCBpbnQgQ1IgPSAxMzsKICBzdGF0aWMgY29uc3QgaW50IFNQID0gMzI7CiAgc3RhdGljIGNvbnN0IGludCBBTVBFUlNBTkQgPSAzODsKICBzdGF0aWMgY29uc3QgaW50IENPTU1BID0gNDQ7CiAgc3RhdGljIGNvbnN0IGludCBEQVNIID0gNDU7CiAgc3RhdGljIGNvbnN0IGludCBTTEFTSCA9IDQ3OwogIHN0YXRpYyBjb25zdCBpbnQgWkVSTyA9IDQ4OwogIHN0YXRpYyBjb25zdCBpbnQgT05FID0gNDk7CiAgc3RhdGljIGNvbnN0IGludCBDT0xPTiA9IDU4OwogIHN0YXRpYyBjb25zdCBpbnQgU0VNSV9DT0xPTiA9IDU5OwogIHN0YXRpYyBjb25zdCBpbnQgRVFVQUwgPSA2MTsKfQoKLy8gU3RhdGVzIG9mIHRoZSBIVFRQIHBhcnNlciBzdGF0ZSBtYWNoaW5lLgpjbGFzcyBfU3RhdGUgewogIHN0YXRpYyBjb25zdCBpbnQgU1RBUlQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgTUVUSE9EX09SX1JFU1BPTlNFX0hUVFBfVkVSU0lPTiA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBSRVNQT05TRV9IVFRQX1ZFUlNJT04gPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgUkVRVUVTVF9MSU5FX01FVEhPRCA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBSRVFVRVNUX0xJTkVfVVJJID0gNDsKICBzdGF0aWMgY29uc3QgaW50IFJFUVVFU1RfTElORV9IVFRQX1ZFUlNJT04gPSA1OwogIHN0YXRpYyBjb25zdCBpbnQgUkVRVUVTVF9MSU5FX0VORElORyA9IDY7CiAgc3RhdGljIGNvbnN0IGludCBSRVNQT05TRV9MSU5FX1NUQVRVU19DT0RFID0gNzsKICBzdGF0aWMgY29uc3QgaW50IFJFU1BPTlNFX0xJTkVfUkVBU09OX1BIUkFTRSA9IDg7CiAgc3RhdGljIGNvbnN0IGludCBSRVNQT05TRV9MSU5FX0VORElORyA9IDk7CiAgc3RhdGljIGNvbnN0IGludCBIRUFERVJfU1RBUlQgPSAxMDsKICBzdGF0aWMgY29uc3QgaW50IEhFQURFUl9GSUVMRCA9IDExOwogIHN0YXRpYyBjb25zdCBpbnQgSEVBREVSX1ZBTFVFX1NUQVJUID0gMTI7CiAgc3RhdGljIGNvbnN0IGludCBIRUFERVJfVkFMVUUgPSAxMzsKICBzdGF0aWMgY29uc3QgaW50IEhFQURFUl9WQUxVRV9GT0xESU5HX09SX0VORElORyA9IDE0OwogIHN0YXRpYyBjb25zdCBpbnQgSEVBREVSX1ZBTFVFX0ZPTERfT1JfRU5EID0gMTU7CiAgc3RhdGljIGNvbnN0IGludCBIRUFERVJfRU5ESU5HID0gMTY7CgogIHN0YXRpYyBjb25zdCBpbnQgQ0hVTktfU0laRV9TVEFSVElOR19DUiA9IDE3OwogIHN0YXRpYyBjb25zdCBpbnQgQ0hVTktfU0laRV9TVEFSVElOR19MRiA9IDE4OwogIHN0YXRpYyBjb25zdCBpbnQgQ0hVTktfU0laRSA9IDE5OwogIHN0YXRpYyBjb25zdCBpbnQgQ0hVTktfU0laRV9FWFRFTlNJT04gPSAyMDsKICBzdGF0aWMgY29uc3QgaW50IENIVU5LX1NJWkVfRU5ESU5HID0gMjE7CiAgc3RhdGljIGNvbnN0IGludCBDSFVOS0VEX0JPRFlfRE9ORV9DUiA9IDIyOwogIHN0YXRpYyBjb25zdCBpbnQgQ0hVTktFRF9CT0RZX0RPTkVfTEYgPSAyMzsKICBzdGF0aWMgY29uc3QgaW50IEJPRFkgPSAyNDsKICBzdGF0aWMgY29uc3QgaW50IENMT1NFRCA9IDI1OwogIHN0YXRpYyBjb25zdCBpbnQgVVBHUkFERUQgPSAyNjsKICBzdGF0aWMgY29uc3QgaW50IEZBSUxVUkUgPSAyNzsKCiAgc3RhdGljIGNvbnN0IGludCBGSVJTVF9CT0RZX1NUQVRFID0gQ0hVTktfU0laRV9TVEFSVElOR19DUjsKfQoKLy8gSFRUUCB2ZXJzaW9uIG9mIHRoZSByZXF1ZXN0IG9yIHJlc3BvbnNlIGJlaW5nIHBhcnNlZC4KY2xhc3MgX0h0dHBWZXJzaW9uIHsKICBzdGF0aWMgY29uc3QgaW50IFVOREVURVJNSU5FRCA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBIVFRQMTAgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgSFRUUDExID0gMjsKfQoKLy8gU3RhdGVzIG9mIHRoZSBIVFRQIHBhcnNlciBzdGF0ZSBtYWNoaW5lLgpjbGFzcyBfTWVzc2FnZVR5cGUgewogIHN0YXRpYyBjb25zdCBpbnQgVU5ERVRFUk1JTkVEID0gMDsKICBzdGF0aWMgY29uc3QgaW50IFJFUVVFU1QgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgUkVTUE9OU0UgPSAwOwp9CgovKioKICogVGhlIF9IdHRwRGV0YWNoZWRTdHJlYW1TdWJzY3JpcHRpb24gdGFrZXMgYSBzdWJzY3JpcHRpb24gYW5kIHNvbWUgZXh0cmEgZGF0YSwKICogYW5kIG1ha2VzIGl0IHBvc3NpYmxlIHRvICJpbmplY3QiIHRoZSBkYXRhIGluIGZyb20gb2Ygb3RoZXIgZGF0YSBldmVudHMKICogZnJvbSB0aGUgc3Vic2NyaXB0aW9uLgogKgogKiBJdCBkb2VzIHNvIGJ5IG92ZXJyaWRpbmcgcGF1c2UvcmVzdW1lLCBzbyB0aGF0IG9uY2UgdGhlCiAqIF9IdHRwRGV0YWNoZWRTdHJlYW1TdWJzY3JpcHRpb24gaXMgcmVzdW1lZCwgaXQnbGwgZGVsaXZlciB0aGUgZGF0YSBiZWZvcmUKICogcmVzdW1pbmcgdGhlIHVuZGVybGF5aW5nIHN1YnNjcmlwdGlvbi4KICovCmNsYXNzIF9IdHRwRGV0YWNoZWRTdHJlYW1TdWJzY3JpcHRpb24gaW1wbGVtZW50cyBTdHJlYW1TdWJzY3JpcHRpb248VWludDhMaXN0PiB7CiAgU3RyZWFtU3Vic2NyaXB0aW9uPFVpbnQ4TGlzdD4gX3N1YnNjcmlwdGlvbjsKICBVaW50OExpc3QgX2luamVjdERhdGE7CiAgYm9vbCBfaXNDYW5jZWxlZCA9IGZhbHNlOwogIGludCBfcGF1c2VDb3VudCA9IDE7CiAgRnVuY3Rpb24gX3VzZXJPbkRhdGE7CiAgYm9vbCBfc2NoZWR1bGVkID0gZmFsc2U7CgogIF9IdHRwRGV0YWNoZWRTdHJlYW1TdWJzY3JpcHRpb24oCiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbiwgdGhpcy5faW5qZWN0RGF0YSwgdGhpcy5fdXNlck9uRGF0YSk7CgogIGJvb2wgZ2V0IGlzUGF1c2VkID0+IF9zdWJzY3JpcHRpb24uaXNQYXVzZWQ7CgogIEZ1dHVyZTxUPiBhc0Z1dHVyZTxUPihbVCBmdXR1cmVWYWx1ZV0pID0+CiAgICAgIF9zdWJzY3JpcHRpb24uYXNGdXR1cmU8VD4oZnV0dXJlVmFsdWUpOwoKICBGdXR1cmUgY2FuY2VsKCkgewogICAgX2lzQ2FuY2VsZWQgPSB0cnVlOwogICAgX2luamVjdERhdGEgPSBudWxsOwogICAgcmV0dXJuIF9zdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgfQoKICB2b2lkIG9uRGF0YSh2b2lkIGhhbmRsZURhdGEoVWludDhMaXN0IGRhdGEpKSB7CiAgICBfdXNlck9uRGF0YSA9IGhhbmRsZURhdGE7CiAgICBfc3Vic2NyaXB0aW9uLm9uRGF0YShoYW5kbGVEYXRhKTsKICB9CgogIHZvaWQgb25Eb25lKHZvaWQgaGFuZGxlRG9uZSgpKSB7CiAgICBfc3Vic2NyaXB0aW9uLm9uRG9uZShoYW5kbGVEb25lKTsKICB9CgogIHZvaWQgb25FcnJvcihGdW5jdGlvbiBoYW5kbGVFcnJvcikgewogICAgX3N1YnNjcmlwdGlvbi5vbkVycm9yKGhhbmRsZUVycm9yKTsKICB9CgogIHZvaWQgcGF1c2UoW0Z1dHVyZSByZXN1bWVTaWduYWxdKSB7CiAgICBpZiAoX2luamVjdERhdGEgPT0gbnVsbCkgewogICAgICBfc3Vic2NyaXB0aW9uLnBhdXNlKHJlc3VtZVNpZ25hbCk7CiAgICB9IGVsc2UgewogICAgICBfcGF1c2VDb3VudCsrOwogICAgICBpZiAocmVzdW1lU2lnbmFsICE9IG51bGwpIHsKICAgICAgICByZXN1bWVTaWduYWwud2hlbkNvbXBsZXRlKHJlc3VtZSk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgcmVzdW1lKCkgewogICAgaWYgKF9pbmplY3REYXRhID09IG51bGwpIHsKICAgICAgX3N1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9wYXVzZUNvdW50LS07CiAgICAgIF9tYXliZVNjaGVkdWxlRGF0YSgpOwogICAgfQogIH0KCiAgdm9pZCBfbWF5YmVTY2hlZHVsZURhdGEoKSB7CiAgICBpZiAoX3NjaGVkdWxlZCkgcmV0dXJuOwogICAgaWYgKF9wYXVzZUNvdW50ICE9IDApIHJldHVybjsKICAgIF9zY2hlZHVsZWQgPSB0cnVlOwogICAgc2NoZWR1bGVNaWNyb3Rhc2soKCkgewogICAgICBfc2NoZWR1bGVkID0gZmFsc2U7CiAgICAgIGlmIChfcGF1c2VDb3VudCA+IDAgfHwgX2lzQ2FuY2VsZWQpIHJldHVybjsKICAgICAgdmFyIGRhdGEgPSBfaW5qZWN0RGF0YTsKICAgICAgX2luamVjdERhdGEgPSBudWxsOwogICAgICAvLyBUbyBlbnN1cmUgdGhhdCAnc3Vic2NyaXB0aW9uLmlzUGF1c2VkJyBpcyBmYWxzZSwgd2UgcmVzdW1lIHRoZQogICAgICAvLyBzdWJzY3JpcHRpb24gaGVyZS4gVGhpcyBpcyBmaW5lIGFzIHBvdGVudGlhbCBldmVudHMgYXJlIGRlbGF5ZWQuCiAgICAgIF9zdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgICAgIGlmIChfdXNlck9uRGF0YSAhPSBudWxsKSB7CiAgICAgICAgX3VzZXJPbkRhdGEoZGF0YSk7CiAgICAgIH0KICAgIH0pOwogIH0KfQoKY2xhc3MgX0h0dHBEZXRhY2hlZEluY29taW5nIGV4dGVuZHMgU3RyZWFtPFVpbnQ4TGlzdD4gewogIGZpbmFsIFN0cmVhbVN1YnNjcmlwdGlvbjxVaW50OExpc3Q+IHN1YnNjcmlwdGlvbjsKICBmaW5hbCBVaW50OExpc3QgYnVmZmVyZWREYXRhOwoKICBfSHR0cERldGFjaGVkSW5jb21pbmcodGhpcy5zdWJzY3JpcHRpb24sIHRoaXMuYnVmZmVyZWREYXRhKTsKCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFVpbnQ4TGlzdD4gbGlzdGVuKHZvaWQgb25EYXRhKFVpbnQ4TGlzdCBldmVudCksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICBpZiAoc3Vic2NyaXB0aW9uICE9IG51bGwpIHsKICAgICAgc3Vic2NyaXB0aW9uCiAgICAgICAgLi5vbkRhdGEob25EYXRhKQogICAgICAgIC4ub25FcnJvcihvbkVycm9yKQogICAgICAgIC4ub25Eb25lKG9uRG9uZSk7CiAgICAgIGlmIChidWZmZXJlZERhdGEgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBzdWJzY3JpcHRpb24uLnJlc3VtZSgpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgX0h0dHBEZXRhY2hlZFN0cmVhbVN1YnNjcmlwdGlvbigKICAgICAgICAgIHN1YnNjcmlwdGlvbiwgYnVmZmVyZWREYXRhLCBvbkRhdGEpCiAgICAgICAgLi5yZXN1bWUoKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRPRE8oMjYzNzkpOiBhZGQgdGVzdCBmb3IgdGhpcyBicmFuY2guCiAgICAgIHJldHVybiBuZXcgU3RyZWFtPFVpbnQ4TGlzdD4uZnJvbUl0ZXJhYmxlKFtidWZmZXJlZERhdGFdKS5saXN0ZW4ob25EYXRhLAogICAgICAgICAgb25FcnJvcjogb25FcnJvciwgb25Eb25lOiBvbkRvbmUsIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogICAgfQogIH0KfQoKLyoqCiAqIEhUVFAgcGFyc2VyIHdoaWNoIHBhcnNlcyB0aGUgZGF0YSBzdHJlYW0gZ2l2ZW4gdG8gW2NvbnN1bWVdLgogKgogKiBJZiBhbiBIVFRQIHBhcnNlciBlcnJvciBvY2N1cnMsIHRoZSBwYXJzZXIgd2lsbCBzaWduYWwgYW4gZXJyb3IgdG8gZWl0aGVyCiAqIHRoZSBjdXJyZW50IF9IdHRwSW5jb21pbmcgb3IgdGhlIF9wYXJzZXIgaXRzZWxmLgogKgogKiBUaGUgY29ubmVjdGlvbiB1cGdyYWRlcyAoZS5nLiBzd2l0Y2hpbmcgZnJvbSBIVFRQLzEuMSB0byB0aGUKICogV2ViU29ja2V0IHByb3RvY29sKSBpcyBoYW5kbGVkIGluIGEgc3BlY2lhbCB3YXkuIElmIGNvbm5lY3Rpb24KICogdXBncmFkZSBpcyBzcGVjaWZpZWQgaW4gdGhlIGhlYWRlcnMsIHRoZW4gb24gdGhlIGNhbGxiYWNrIHRvCiAqIFs6cmVzcG9uc2VTdGFydDpdIHRoZSBbOnVwZ3JhZGU6XSBwcm9wZXJ0eSBvbiB0aGUgWzpIdHRwUGFyc2VyOl0KICogb2JqZWN0IHdpbGwgYmUgWzp0cnVlOl0gaW5kaWNhdGluZyB0aGF0IGZyb20gbm93IG9uIHRoZSBwcm90b2NvbCBpcwogKiBub3QgSFRUUCBhbnltb3JlIGFuZCBubyBtb3JlIGNhbGxiYWNrcyB3aWxsIGhhcHBlbiwgdGhhdCBpcwogKiBbOmRhdGFSZWNlaXZlZDpdIGFuZCBbOmRhdGFFbmQ6XSBhcmUgbm90IGNhbGxlZCBpbiB0aGlzIGNhc2UgYXMKICogdGhlcmUgaXMgbm8gbW9yZSBIVFRQIGRhdGEuIEFmdGVyIHRoZSB1cGdyYWRlIHRoZSBtZXRob2QKICogWzpyZWFkVW5wYXJzZWREYXRhOl0gY2FuIGJlIHVzZWQgdG8gcmVhZCBhbnkgcmVtYWluaW5nIGJ5dGVzIGluIHRoZQogKiBIVFRQIHBhcnNlciB3aGljaCBhcmUgcGFydCBvZiB0aGUgcHJvdG9jb2wgdGhlIGNvbm5lY3Rpb24gaXMKICogdXBncmFkaW5nIHRvLiBUaGVzZSBieXRlcyBjYW5ub3QgYmUgcHJvY2Vzc2VkIGJ5IHRoZSBIVFRQIHBhcnNlcgogKiBhbmQgc2hvdWxkIGJlIGhhbmRsZWQgYWNjb3JkaW5nIHRvIHdoYXRldmVyIHByb3RvY29sIGlzIGJlaW5nCiAqIHVwZ3JhZGVkIHRvLgogKi8KY2xhc3MgX0h0dHBQYXJzZXIgZXh0ZW5kcyBTdHJlYW08X0h0dHBJbmNvbWluZz4gewogIC8vIFN0YXRlLgogIGJvb2wgX3BhcnNlckNhbGxlZCA9IGZhbHNlOwoKICAvLyBUaGUgZGF0YSB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBwYXJzZWQuCiAgVWludDhMaXN0IF9idWZmZXI7CiAgaW50IF9pbmRleDsKCiAgZmluYWwgYm9vbCBfcmVxdWVzdFBhcnNlcjsKICBpbnQgX3N0YXRlOwogIGludCBfaHR0cFZlcnNpb25JbmRleDsKICBpbnQgX21lc3NhZ2VUeXBlOwogIGludCBfc3RhdHVzQ29kZSA9IDA7CiAgaW50IF9zdGF0dXNDb2RlTGVuZ3RoID0gMDsKICBmaW5hbCBMaXN0PGludD4gX21ldGhvZCA9IFtdOwogIGZpbmFsIExpc3Q8aW50PiBfdXJpT3JSZWFzb25QaHJhc2UgPSBbXTsKICBmaW5hbCBMaXN0PGludD4gX2hlYWRlckZpZWxkID0gW107CiAgZmluYWwgTGlzdDxpbnQ+IF9oZWFkZXJWYWx1ZSA9IFtdOwoKICBpbnQgX2h0dHBWZXJzaW9uOwogIGludCBfdHJhbnNmZXJMZW5ndGggPSAtMTsKICBib29sIF9wZXJzaXN0ZW50Q29ubmVjdGlvbjsKICBib29sIF9jb25uZWN0aW9uVXBncmFkZTsKICBib29sIF9jaHVua2VkOwoKICBib29sIF9ub01lc3NhZ2VCb2R5ID0gZmFsc2U7CiAgaW50IF9yZW1haW5pbmdDb250ZW50ID0gLTE7CgogIF9IdHRwSGVhZGVycyBfaGVhZGVyczsKCiAgLy8gVGhlIGN1cnJlbnQgaW5jb21pbmcgY29ubmVjdGlvbi4KICBfSHR0cEluY29taW5nIF9pbmNvbWluZzsKICBTdHJlYW1TdWJzY3JpcHRpb248VWludDhMaXN0PiBfc29ja2V0U3Vic2NyaXB0aW9uOwogIGJvb2wgX3BhdXNlZCA9IHRydWU7CiAgYm9vbCBfYm9keVBhdXNlZCA9IGZhbHNlOwogIFN0cmVhbUNvbnRyb2xsZXI8X0h0dHBJbmNvbWluZz4gX2NvbnRyb2xsZXI7CiAgU3RyZWFtQ29udHJvbGxlcjxVaW50OExpc3Q+IF9ib2R5Q29udHJvbGxlcjsKCiAgZmFjdG9yeSBfSHR0cFBhcnNlci5yZXF1ZXN0UGFyc2VyKCkgewogICAgcmV0dXJuIG5ldyBfSHR0cFBhcnNlci5fKHRydWUpOwogIH0KCiAgZmFjdG9yeSBfSHR0cFBhcnNlci5yZXNwb25zZVBhcnNlcigpIHsKICAgIHJldHVybiBuZXcgX0h0dHBQYXJzZXIuXyhmYWxzZSk7CiAgfQoKICBfSHR0cFBhcnNlci5fKHRoaXMuX3JlcXVlc3RQYXJzZXIpIHsKICAgIF9jb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8X0h0dHBJbmNvbWluZz4oCiAgICAgICAgc3luYzogdHJ1ZSwKICAgICAgICBvbkxpc3RlbjogKCkgewogICAgICAgICAgX3BhdXNlZCA9IGZhbHNlOwogICAgICAgIH0sCiAgICAgICAgb25QYXVzZTogKCkgewogICAgICAgICAgX3BhdXNlZCA9IHRydWU7CiAgICAgICAgICBfcGF1c2VTdGF0ZUNoYW5nZWQoKTsKICAgICAgICB9LAogICAgICAgIG9uUmVzdW1lOiAoKSB7CiAgICAgICAgICBfcGF1c2VkID0gZmFsc2U7CiAgICAgICAgICBfcGF1c2VTdGF0ZUNoYW5nZWQoKTsKICAgICAgICB9LAogICAgICAgIG9uQ2FuY2VsOiAoKSB7CiAgICAgICAgICBpZiAoX3NvY2tldFN1YnNjcmlwdGlvbiAhPSBudWxsKSB7CiAgICAgICAgICAgIF9zb2NrZXRTdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICBfcmVzZXQoKTsKICB9CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxfSHR0cEluY29taW5nPiBsaXN0ZW4odm9pZCBvbkRhdGEoX0h0dHBJbmNvbWluZyBldmVudCksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICByZXR1cm4gX2NvbnRyb2xsZXIuc3RyZWFtLmxpc3RlbihvbkRhdGEsCiAgICAgICAgb25FcnJvcjogb25FcnJvciwgb25Eb25lOiBvbkRvbmUsIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgdm9pZCBsaXN0ZW5Ub1N0cmVhbShTdHJlYW08VWludDhMaXN0PiBzdHJlYW0pIHsKICAgIC8vIExpc3RlbiB0byB0aGUgc3RyZWFtIGFuZCBoYW5kbGUgZGF0YSBhY2NvcmRpbmdseS4gV2hlbiBhCiAgICAvLyBfSHR0cEluY29taW5nIGlzIGNyZWF0ZWQsIF9kYXRhUGF1c2UsIF9kYXRhUmVzdW1lLCBfZGF0YURvbmUgaXMKICAgIC8vIGdpdmVuIHRvIHByb3ZpZGUgYSB3YXkgb2YgY29udHJvbGxpbmcgdGhlIHBhcnNlci4KICAgIC8vIFRPRE8oYWpvaG5zZW4pOiBSZW1vdmUgX2RhdGFQYXVzZSwgX2RhdGFSZXN1bWUgYW5kIF9kYXRhRG9uZSBhbmQgY2xlYW4gdXAKICAgIC8vIGhvdyB0aGUgX0h0dHBJbmNvbWluZyBzaWduYWxzIHRoZSBwYXJzZXIuCiAgICBfc29ja2V0U3Vic2NyaXB0aW9uID0KICAgICAgICBzdHJlYW0ubGlzdGVuKF9vbkRhdGEsIG9uRXJyb3I6IF9jb250cm9sbGVyLmFkZEVycm9yLCBvbkRvbmU6IF9vbkRvbmUpOwogIH0KCiAgdm9pZCBfcGFyc2UoKSB7CiAgICB0cnkgewogICAgICBfZG9QYXJzZSgpOwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBpZiAoX3N0YXRlID49IF9TdGF0ZS5DSFVOS19TSVpFX1NUQVJUSU5HX0NSICYmIF9zdGF0ZSA8PSBfU3RhdGUuQk9EWSkgewogICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5GQUlMVVJFOwogICAgICAgIF9yZXBvcnRCb2R5RXJyb3IoZSwgcyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3N0YXRlID0gX1N0YXRlLkZBSUxVUkU7CiAgICAgICAgX3JlcG9ydEh0dHBFcnJvcihlLCBzKTsKICAgICAgfQogICAgfQogIH0KCiAgLy8gUHJvY2VzcyBlbmQgb2YgaGVhZGVycy4gUmV0dXJucyB0cnVlIGlmIHRoZSBwYXJzZXIgc2hvdWxkIHN0b3AKICAvLyBwYXJzaW5nIGFuZCByZXR1cm4uIFRoaXMgd2lsbCBiZSBpbiBjYXNlIG9mIGVpdGhlciBhbiB1cGdyYWRlCiAgLy8gcmVxdWVzdCBvciBhIHJlcXVlc3Qgb3IgcmVzcG9uc2Ugd2l0aCBhbiBlbXB0eSBib2R5LgogIGJvb2wgX2hlYWRlcnNFbmQoKSB7CiAgICBfaGVhZGVycy5fbXV0YWJsZSA9IGZhbHNlOwoKICAgIF90cmFuc2Zlckxlbmd0aCA9IF9oZWFkZXJzLmNvbnRlbnRMZW5ndGg7CiAgICAvLyBJZ25vcmUgdGhlIENvbnRlbnQtTGVuZ3RoIGhlYWRlciBpZiBUcmFuc2Zlci1FbmNvZGluZwogICAgLy8gaXMgY2h1bmtlZCAoUkZDIDI2MTYgc2VjdGlvbiA0LjQpCiAgICBpZiAoX2NodW5rZWQpIF90cmFuc2Zlckxlbmd0aCA9IC0xOwoKICAgIC8vIElmIGEgcmVxdWVzdCBtZXNzYWdlIGhhcyBuZWl0aGVyIENvbnRlbnQtTGVuZ3RoIG5vcgogICAgLy8gVHJhbnNmZXItRW5jb2RpbmcgdGhlIG1lc3NhZ2UgbXVzdCBub3QgaGF2ZSBhIGJvZHkgKFJGQwogICAgLy8gMjYxNiBzZWN0aW9uIDQuMykuCiAgICBpZiAoX21lc3NhZ2VUeXBlID09IF9NZXNzYWdlVHlwZS5SRVFVRVNUICYmCiAgICAgICAgX3RyYW5zZmVyTGVuZ3RoIDwgMCAmJgogICAgICAgIF9jaHVua2VkID09IGZhbHNlKSB7CiAgICAgIF90cmFuc2Zlckxlbmd0aCA9IDA7CiAgICB9CiAgICBpZiAoX2Nvbm5lY3Rpb25VcGdyYWRlKSB7CiAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5VUEdSQURFRDsKICAgICAgX3RyYW5zZmVyTGVuZ3RoID0gMDsKICAgIH0KICAgIF9jcmVhdGVJbmNvbWluZyhfdHJhbnNmZXJMZW5ndGgpOwogICAgaWYgKF9yZXF1ZXN0UGFyc2VyKSB7CiAgICAgIF9pbmNvbWluZy5tZXRob2QgPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoX21ldGhvZCk7CiAgICAgIF9pbmNvbWluZy51cmkgPSBVcmkucGFyc2UobmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKF91cmlPclJlYXNvblBocmFzZSkpOwogICAgfSBlbHNlIHsKICAgICAgX2luY29taW5nLnN0YXR1c0NvZGUgPSBfc3RhdHVzQ29kZTsKICAgICAgX2luY29taW5nLnJlYXNvblBocmFzZSA9IG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhfdXJpT3JSZWFzb25QaHJhc2UpOwogICAgfQogICAgX21ldGhvZC5jbGVhcigpOwogICAgX3VyaU9yUmVhc29uUGhyYXNlLmNsZWFyKCk7CiAgICBpZiAoX2Nvbm5lY3Rpb25VcGdyYWRlKSB7CiAgICAgIF9pbmNvbWluZy51cGdyYWRlZCA9IHRydWU7CiAgICAgIF9wYXJzZXJDYWxsZWQgPSBmYWxzZTsKICAgICAgdmFyIHRtcCA9IF9pbmNvbWluZzsKICAgICAgX2Nsb3NlSW5jb21pbmcoKTsKICAgICAgX2NvbnRyb2xsZXIuYWRkKHRtcCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKF90cmFuc2Zlckxlbmd0aCA9PSAwIHx8CiAgICAgICAgKF9tZXNzYWdlVHlwZSA9PSBfTWVzc2FnZVR5cGUuUkVTUE9OU0UgJiYgX25vTWVzc2FnZUJvZHkpKSB7CiAgICAgIF9yZXNldCgpOwogICAgICB2YXIgdG1wID0gX2luY29taW5nOwogICAgICBfY2xvc2VJbmNvbWluZygpOwogICAgICBfY29udHJvbGxlci5hZGQodG1wKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSBlbHNlIGlmIChfY2h1bmtlZCkgewogICAgICBfc3RhdGUgPSBfU3RhdGUuQ0hVTktfU0laRTsKICAgICAgX3JlbWFpbmluZ0NvbnRlbnQgPSAwOwogICAgfSBlbHNlIGlmIChfdHJhbnNmZXJMZW5ndGggPiAwKSB7CiAgICAgIF9yZW1haW5pbmdDb250ZW50ID0gX3RyYW5zZmVyTGVuZ3RoOwogICAgICBfc3RhdGUgPSBfU3RhdGUuQk9EWTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIE5laXRoZXIgY2h1bmtlZCBub3IgY29udGVudCBsZW5ndGguIEVuZCBvZiBib2R5CiAgICAgIC8vIGluZGljYXRlZCBieSBjbG9zZS4KICAgICAgX3N0YXRlID0gX1N0YXRlLkJPRFk7CiAgICB9CiAgICBfcGFyc2VyQ2FsbGVkID0gZmFsc2U7CiAgICBfY29udHJvbGxlci5hZGQoX2luY29taW5nKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgLy8gRnJvbSBSRkMgMjYxNi4KICAvLyBnZW5lcmljLW1lc3NhZ2UgPSBzdGFydC1saW5lCiAgLy8gICAgICAgICAgICAgICAgICAgKihtZXNzYWdlLWhlYWRlciBDUkxGKQogIC8vICAgICAgICAgICAgICAgICAgIENSTEYKICAvLyAgICAgICAgICAgICAgICAgICBbIG1lc3NhZ2UtYm9keSBdCiAgLy8gc3RhcnQtbGluZSAgICAgID0gUmVxdWVzdC1MaW5lIHwgU3RhdHVzLUxpbmUKICAvLyBSZXF1ZXN0LUxpbmUgICAgPSBNZXRob2QgU1AgUmVxdWVzdC1VUkkgU1AgSFRUUC1WZXJzaW9uIENSTEYKICAvLyBTdGF0dXMtTGluZSAgICAgPSBIVFRQLVZlcnNpb24gU1AgU3RhdHVzLUNvZGUgU1AgUmVhc29uLVBocmFzZSBDUkxGCiAgLy8gbWVzc2FnZS1oZWFkZXIgID0gZmllbGQtbmFtZSAiOiIgWyBmaWVsZC12YWx1ZSBdCiAgdm9pZCBfZG9QYXJzZSgpIHsKICAgIGFzc2VydCghX3BhcnNlckNhbGxlZCk7CiAgICBfcGFyc2VyQ2FsbGVkID0gdHJ1ZTsKICAgIGlmIChfc3RhdGUgPT0gX1N0YXRlLkNMT1NFRCkgewogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiRGF0YSBvbiBjbG9zZWQgY29ubmVjdGlvbiIpOwogICAgfQogICAgaWYgKF9zdGF0ZSA9PSBfU3RhdGUuRkFJTFVSRSkgewogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiRGF0YSBvbiBmYWlsZWQgY29ubmVjdGlvbiIpOwogICAgfQogICAgd2hpbGUgKF9idWZmZXIgIT0gbnVsbCAmJgogICAgICAgIF9pbmRleCA8IF9idWZmZXIubGVuZ3RoICYmCiAgICAgICAgX3N0YXRlICE9IF9TdGF0ZS5GQUlMVVJFICYmCiAgICAgICAgX3N0YXRlICE9IF9TdGF0ZS5VUEdSQURFRCkgewogICAgICAvLyBEZXBlbmRpbmcgb24gX2luY29taW5nLCB3ZSBlaXRoZXIgYnJlYWsgb24gX2JvZHlQYXVzZWQgb3IgX3BhdXNlZC4KICAgICAgaWYgKChfaW5jb21pbmcgIT0gbnVsbCAmJiBfYm9keVBhdXNlZCkgfHwKICAgICAgICAgIChfaW5jb21pbmcgPT0gbnVsbCAmJiBfcGF1c2VkKSkgewogICAgICAgIF9wYXJzZXJDYWxsZWQgPSBmYWxzZTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaW50IGJ5dGUgPSBfYnVmZmVyW19pbmRleCsrXTsKICAgICAgc3dpdGNoIChfc3RhdGUpIHsKICAgICAgICBjYXNlIF9TdGF0ZS5TVEFSVDoKICAgICAgICAgIGlmIChieXRlID09IF9Db25zdC5IVFRQWzBdKSB7CiAgICAgICAgICAgIC8vIFN0YXJ0IHBhcnNpbmcgbWV0aG9kIG9yIEhUVFAgdmVyc2lvbi4KICAgICAgICAgICAgX2h0dHBWZXJzaW9uSW5kZXggPSAxOwogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuTUVUSE9EX09SX1JFU1BPTlNFX0hUVFBfVkVSU0lPTjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFN0YXJ0IHBhcnNpbmcgbWV0aG9kLgogICAgICAgICAgICBpZiAoIV9pc1Rva2VuQ2hhcihieXRlKSkgewogICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIHJlcXVlc3QgbWV0aG9kIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX21ldGhvZC5hZGQoYnl0ZSk7CiAgICAgICAgICAgIGlmICghX3JlcXVlc3RQYXJzZXIpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCByZXNwb25zZSBsaW5lIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLlJFUVVFU1RfTElORV9NRVRIT0Q7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuTUVUSE9EX09SX1JFU1BPTlNFX0hUVFBfVkVSU0lPTjoKICAgICAgICAgIGlmIChfaHR0cFZlcnNpb25JbmRleCA8IF9Db25zdC5IVFRQLmxlbmd0aCAmJgogICAgICAgICAgICAgIGJ5dGUgPT0gX0NvbnN0LkhUVFBbX2h0dHBWZXJzaW9uSW5kZXhdKSB7CiAgICAgICAgICAgIC8vIENvbnRpbnVlIHBhcnNpbmcgSFRUUCB2ZXJzaW9uLgogICAgICAgICAgICBfaHR0cFZlcnNpb25JbmRleCsrOwogICAgICAgICAgfSBlbHNlIGlmIChfaHR0cFZlcnNpb25JbmRleCA9PSBfQ29uc3QuSFRUUC5sZW5ndGggJiYKICAgICAgICAgICAgICBieXRlID09IF9DaGFyQ29kZS5TTEFTSCkgewogICAgICAgICAgICAvLyBIVFRQLyBwYXJzZWQuIEFzIG1ldGhvZCBpcyBhIHRva2VuIHRoaXMgY2Fubm90IGJlIGEKICAgICAgICAgICAgLy8gbWV0aG9kIGFueW1vcmUuCiAgICAgICAgICAgIF9odHRwVmVyc2lvbkluZGV4Kys7CiAgICAgICAgICAgIGlmIChfcmVxdWVzdFBhcnNlcikgewogICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIHJlcXVlc3QgbGluZSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5SRVNQT05TRV9IVFRQX1ZFUlNJT047CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBEaWQgbm90IHBhcnNlIEhUVFAgdmVyc2lvbi4gRXhwZWN0IG1ldGhvZCBpbnN0ZWFkLgogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IF9odHRwVmVyc2lvbkluZGV4OyBpKyspIHsKICAgICAgICAgICAgICBfbWV0aG9kLmFkZChfQ29uc3QuSFRUUFtpXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLlNQKSB7CiAgICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLlJFUVVFU1RfTElORV9VUkk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX21ldGhvZC5hZGQoYnl0ZSk7CiAgICAgICAgICAgICAgX2h0dHBWZXJzaW9uID0gX0h0dHBWZXJzaW9uLlVOREVURVJNSU5FRDsKICAgICAgICAgICAgICBpZiAoIV9yZXF1ZXN0UGFyc2VyKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCByZXNwb25zZSBsaW5lIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5SRVFVRVNUX0xJTkVfTUVUSE9EOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuUkVTUE9OU0VfSFRUUF9WRVJTSU9OOgogICAgICAgICAgaWYgKF9odHRwVmVyc2lvbkluZGV4IDwgX0NvbnN0LkhUVFAxRE9ULmxlbmd0aCkgewogICAgICAgICAgICAvLyBDb250aW51ZSBwYXJzaW5nIEhUVFAgdmVyc2lvbi4KICAgICAgICAgICAgX2V4cGVjdChieXRlLCBfQ29uc3QuSFRUUDFET1RbX2h0dHBWZXJzaW9uSW5kZXhdKTsKICAgICAgICAgICAgX2h0dHBWZXJzaW9uSW5kZXgrKzsKICAgICAgICAgIH0gZWxzZSBpZiAoX2h0dHBWZXJzaW9uSW5kZXggPT0gX0NvbnN0LkhUVFAxRE9ULmxlbmd0aCAmJgogICAgICAgICAgICAgIGJ5dGUgPT0gX0NoYXJDb2RlLk9ORSkgewogICAgICAgICAgICAvLyBIVFRQLzEuMSBwYXJzZWQuCiAgICAgICAgICAgIF9odHRwVmVyc2lvbiA9IF9IdHRwVmVyc2lvbi5IVFRQMTE7CiAgICAgICAgICAgIF9wZXJzaXN0ZW50Q29ubmVjdGlvbiA9IHRydWU7CiAgICAgICAgICAgIF9odHRwVmVyc2lvbkluZGV4Kys7CiAgICAgICAgICB9IGVsc2UgaWYgKF9odHRwVmVyc2lvbkluZGV4ID09IF9Db25zdC5IVFRQMURPVC5sZW5ndGggJiYKICAgICAgICAgICAgICBieXRlID09IF9DaGFyQ29kZS5aRVJPKSB7CiAgICAgICAgICAgIC8vIEhUVFAvMS4wIHBhcnNlZC4KICAgICAgICAgICAgX2h0dHBWZXJzaW9uID0gX0h0dHBWZXJzaW9uLkhUVFAxMDsKICAgICAgICAgICAgX3BlcnNpc3RlbnRDb25uZWN0aW9uID0gZmFsc2U7CiAgICAgICAgICAgIF9odHRwVmVyc2lvbkluZGV4Kys7CiAgICAgICAgICB9IGVsc2UgaWYgKF9odHRwVmVyc2lvbkluZGV4ID09IF9Db25zdC5IVFRQMURPVC5sZW5ndGggKyAxKSB7CiAgICAgICAgICAgIF9leHBlY3QoYnl0ZSwgX0NoYXJDb2RlLlNQKTsKICAgICAgICAgICAgLy8gSFRUUCB2ZXJzaW9uIHBhcnNlZC4KICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLlJFU1BPTlNFX0xJTkVfU1RBVFVTX0NPREU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCByZXNwb25zZSBsaW5lIik7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuUkVRVUVTVF9MSU5FX01FVEhPRDoKICAgICAgICAgIGlmIChieXRlID09IF9DaGFyQ29kZS5TUCkgewogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuUkVRVUVTVF9MSU5FX1VSSTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChfQ29uc3QuU0VQQVJBVE9SX01BUFtieXRlXSB8fAogICAgICAgICAgICAgICAgYnl0ZSA9PSBfQ2hhckNvZGUuQ1IgfHwKICAgICAgICAgICAgICAgIGJ5dGUgPT0gX0NoYXJDb2RlLkxGKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgcmVxdWVzdCBtZXRob2QiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfbWV0aG9kLmFkZChieXRlKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5SRVFVRVNUX0xJTkVfVVJJOgogICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLlNQKSB7CiAgICAgICAgICAgIGlmIChfdXJpT3JSZWFzb25QaHJhc2UubGVuZ3RoID09IDApIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCByZXF1ZXN0IFVSSSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5SRVFVRVNUX0xJTkVfSFRUUF9WRVJTSU9OOwogICAgICAgICAgICBfaHR0cFZlcnNpb25JbmRleCA9IDA7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuQ1IgfHwgYnl0ZSA9PSBfQ2hhckNvZGUuTEYpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCByZXF1ZXN0IFVSSSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF91cmlPclJlYXNvblBocmFzZS5hZGQoYnl0ZSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuUkVRVUVTVF9MSU5FX0hUVFBfVkVSU0lPTjoKICAgICAgICAgIGlmIChfaHR0cFZlcnNpb25JbmRleCA8IF9Db25zdC5IVFRQMURPVC5sZW5ndGgpIHsKICAgICAgICAgICAgX2V4cGVjdChieXRlLCBfQ29uc3QuSFRUUDExW19odHRwVmVyc2lvbkluZGV4XSk7CiAgICAgICAgICAgIF9odHRwVmVyc2lvbkluZGV4Kys7CiAgICAgICAgICB9IGVsc2UgaWYgKF9odHRwVmVyc2lvbkluZGV4ID09IF9Db25zdC5IVFRQMURPVC5sZW5ndGgpIHsKICAgICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLk9ORSkgewogICAgICAgICAgICAgIC8vIEhUVFAvMS4xIHBhcnNlZC4KICAgICAgICAgICAgICBfaHR0cFZlcnNpb24gPSBfSHR0cFZlcnNpb24uSFRUUDExOwogICAgICAgICAgICAgIF9wZXJzaXN0ZW50Q29ubmVjdGlvbiA9IHRydWU7CiAgICAgICAgICAgICAgX2h0dHBWZXJzaW9uSW5kZXgrKzsKICAgICAgICAgICAgfSBlbHNlIGlmIChieXRlID09IF9DaGFyQ29kZS5aRVJPKSB7CiAgICAgICAgICAgICAgLy8gSFRUUC8xLjAgcGFyc2VkLgogICAgICAgICAgICAgIF9odHRwVmVyc2lvbiA9IF9IdHRwVmVyc2lvbi5IVFRQMTA7CiAgICAgICAgICAgICAgX3BlcnNpc3RlbnRDb25uZWN0aW9uID0gZmFsc2U7CiAgICAgICAgICAgICAgX2h0dHBWZXJzaW9uSW5kZXgrKzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCByZXNwb25zZSBsaW5lIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChieXRlID09IF9DaGFyQ29kZS5DUikgewogICAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5SRVFVRVNUX0xJTkVfRU5ESU5HOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF9leHBlY3QoYnl0ZSwgX0NoYXJDb2RlLkxGKTsKICAgICAgICAgICAgICBfbWVzc2FnZVR5cGUgPSBfTWVzc2FnZVR5cGUuUkVRVUVTVDsKICAgICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuSEVBREVSX1NUQVJUOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuUkVRVUVTVF9MSU5FX0VORElORzoKICAgICAgICAgIF9leHBlY3QoYnl0ZSwgX0NoYXJDb2RlLkxGKTsKICAgICAgICAgIF9tZXNzYWdlVHlwZSA9IF9NZXNzYWdlVHlwZS5SRVFVRVNUOwogICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9TVEFSVDsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5SRVNQT05TRV9MSU5FX1NUQVRVU19DT0RFOgogICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLlNQKSB7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5SRVNQT05TRV9MSU5FX1JFQVNPTl9QSFJBU0U7CiAgICAgICAgICB9IGVsc2UgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLkNSKSB7CiAgICAgICAgICAgIC8vIFNvbWUgSFRUUCBzZXJ2ZXJzIGRvZXMgbm90IGZvbGxvdyB0aGUgc3BlYy4gYW5kIHNlbmQKICAgICAgICAgICAgLy8gXHJcbiByaWdodCBhZnRlciB0aGUgc3RhdHVzIGNvZGUuCiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5SRVNQT05TRV9MSU5FX0VORElORzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9zdGF0dXNDb2RlTGVuZ3RoKys7CiAgICAgICAgICAgIGlmIChieXRlIDwgMHgzMCB8fCBieXRlID4gMHgzOSB8fCBfc3RhdHVzQ29kZUxlbmd0aCA+IDMpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgY29kZSIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF9zdGF0dXNDb2RlID0gX3N0YXR1c0NvZGUgKiAxMCArIGJ5dGUgLSAweDMwOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuUkVTUE9OU0VfTElORV9SRUFTT05fUEhSQVNFOgogICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLkNSKSB7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5SRVNQT05TRV9MSU5FX0VORElORzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChieXRlID09IF9DaGFyQ29kZS5DUiB8fCBieXRlID09IF9DaGFyQ29kZS5MRikgewogICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIHJlc3BvbnNlIHJlYXNvbiBwaHJhc2UiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfdXJpT3JSZWFzb25QaHJhc2UuYWRkKGJ5dGUpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLlJFU1BPTlNFX0xJTkVfRU5ESU5HOgogICAgICAgICAgX2V4cGVjdChieXRlLCBfQ2hhckNvZGUuTEYpOwogICAgICAgICAgX21lc3NhZ2VUeXBlID09IF9NZXNzYWdlVHlwZS5SRVNQT05TRTsKICAgICAgICAgIGlmIChfc3RhdHVzQ29kZSA8IDEwMCB8fCBfc3RhdHVzQ29kZSA+IDU5OSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgY29kZSIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGlzIHJlc3BvbnNlIHdpbGwgbmV2ZXIgaGF2ZSBhIGJvZHkuCiAgICAgICAgICAgIGlmIChfc3RhdHVzQ29kZSA8PSAxOTkgfHwKICAgICAgICAgICAgICAgIF9zdGF0dXNDb2RlID09IDIwNCB8fAogICAgICAgICAgICAgICAgX3N0YXR1c0NvZGUgPT0gMzA0KSB7CiAgICAgICAgICAgICAgX25vTWVzc2FnZUJvZHkgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuSEVBREVSX1NUQVJUOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLkhFQURFUl9TVEFSVDoKICAgICAgICAgIF9oZWFkZXJzID0gbmV3IF9IdHRwSGVhZGVycyh2ZXJzaW9uKTsKICAgICAgICAgIGlmIChieXRlID09IF9DaGFyQ29kZS5DUikgewogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuSEVBREVSX0VORElORzsKICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuTEYpIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9FTkRJTkc7CiAgICAgICAgICAgIF9pbmRleC0tOyAvLyBNYWtlIHRoZSBuZXcgc3RhdGUgc2VlIHRoZSBMRiBhZ2Fpbi4KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFN0YXJ0IG9mIG5ldyBoZWFkZXIgZmllbGQuCiAgICAgICAgICAgIF9oZWFkZXJGaWVsZC5hZGQoX3RvTG93ZXJDYXNlQnl0ZShieXRlKSk7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5IRUFERVJfRklFTEQ7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuSEVBREVSX0ZJRUxEOgogICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLkNPTE9OKSB7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5IRUFERVJfVkFMVUVfU1RBUlQ7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIV9pc1Rva2VuQ2hhcihieXRlKSkgewogICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIGhlYWRlciBmaWVsZCBuYW1lIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX2hlYWRlckZpZWxkLmFkZChfdG9Mb3dlckNhc2VCeXRlKGJ5dGUpKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5IRUFERVJfVkFMVUVfU1RBUlQ6CiAgICAgICAgICBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuQ1IpIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9WQUxVRV9GT0xESU5HX09SX0VORElORzsKICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuTEYpIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9WQUxVRV9GT0xEX09SX0VORDsKICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZSAhPSBfQ2hhckNvZGUuU1AgJiYgYnl0ZSAhPSBfQ2hhckNvZGUuSFQpIHsKICAgICAgICAgICAgLy8gU3RhcnQgb2YgbmV3IGhlYWRlciB2YWx1ZS4KICAgICAgICAgICAgX2hlYWRlclZhbHVlLmFkZChieXRlKTsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9WQUxVRTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5IRUFERVJfVkFMVUU6CiAgICAgICAgICBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuQ1IpIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9WQUxVRV9GT0xESU5HX09SX0VORElORzsKICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuTEYpIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9WQUxVRV9GT0xEX09SX0VORDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9oZWFkZXJWYWx1ZS5hZGQoYnl0ZSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuSEVBREVSX1ZBTFVFX0ZPTERJTkdfT1JfRU5ESU5HOgogICAgICAgICAgX2V4cGVjdChieXRlLCBfQ2hhckNvZGUuTEYpOwogICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9WQUxVRV9GT0xEX09SX0VORDsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5IRUFERVJfVkFMVUVfRk9MRF9PUl9FTkQ6CiAgICAgICAgICBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuU1AgfHwgYnl0ZSA9PSBfQ2hhckNvZGUuSFQpIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9WQUxVRV9TVEFSVDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIFN0cmluZyBoZWFkZXJGaWVsZCA9IG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhfaGVhZGVyRmllbGQpOwogICAgICAgICAgICBTdHJpbmcgaGVhZGVyVmFsdWUgPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoX2hlYWRlclZhbHVlKTsKICAgICAgICAgICAgaWYgKGhlYWRlckZpZWxkID09IEh0dHBIZWFkZXJzLnRyYW5zZmVyRW5jb2RpbmdIZWFkZXIgJiYKICAgICAgICAgICAgICAgIF9jYXNlSW5zZW5zaXRpdmVDb21wYXJlKCJjaHVua2VkIi5jb2RlVW5pdHMsIF9oZWFkZXJWYWx1ZSkpIHsKICAgICAgICAgICAgICBfY2h1bmtlZCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGhlYWRlckZpZWxkID09IEh0dHBIZWFkZXJzLmNvbm5lY3Rpb25IZWFkZXIpIHsKICAgICAgICAgICAgICBMaXN0PFN0cmluZz4gdG9rZW5zID0gX3Rva2VuaXplRmllbGRWYWx1ZShoZWFkZXJWYWx1ZSk7CiAgICAgICAgICAgICAgZmluYWwgYm9vbCBpc1Jlc3BvbnNlID0gX21lc3NhZ2VUeXBlID09IF9NZXNzYWdlVHlwZS5SRVNQT05TRTsKICAgICAgICAgICAgICBmaW5hbCBib29sIGlzVXBncmFkZUNvZGUgPQogICAgICAgICAgICAgICAgICAoX3N0YXR1c0NvZGUgPT0gSHR0cFN0YXR1cy51cGdyYWRlUmVxdWlyZWQpIHx8CiAgICAgICAgICAgICAgICAgICAgICAoX3N0YXR1c0NvZGUgPT0gSHR0cFN0YXR1cy5zd2l0Y2hpbmdQcm90b2NvbHMpOwogICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBmaW5hbCBib29sIGlzVXBncmFkZSA9IF9jYXNlSW5zZW5zaXRpdmVDb21wYXJlKAogICAgICAgICAgICAgICAgICAgICJ1cGdyYWRlIi5jb2RlVW5pdHMsIHRva2Vuc1tpXS5jb2RlVW5pdHMpOwogICAgICAgICAgICAgICAgaWYgKChpc1VwZ3JhZGUgJiYgIWlzUmVzcG9uc2UpIHx8CiAgICAgICAgICAgICAgICAgICAgKGlzVXBncmFkZSAmJiBpc1Jlc3BvbnNlICYmIGlzVXBncmFkZUNvZGUpKSB7CiAgICAgICAgICAgICAgICAgIF9jb25uZWN0aW9uVXBncmFkZSA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBfaGVhZGVycy5fYWRkKGhlYWRlckZpZWxkLCB0b2tlbnNbaV0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBfaGVhZGVycy5fYWRkKGhlYWRlckZpZWxkLCBoZWFkZXJWYWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX2hlYWRlckZpZWxkLmNsZWFyKCk7CiAgICAgICAgICAgIF9oZWFkZXJWYWx1ZS5jbGVhcigpOwoKICAgICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLkNSKSB7CiAgICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9FTkRJTkc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuTEYpIHsKICAgICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuSEVBREVSX0VORElORzsKICAgICAgICAgICAgICBfaW5kZXgtLTsgLy8gTWFrZSB0aGUgbmV3IHN0YXRlIHNlZSB0aGUgTEYgYWdhaW4uCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgLy8gU3RhcnQgb2YgbmV3IGhlYWRlciBmaWVsZC4KICAgICAgICAgICAgICBfaGVhZGVyRmllbGQuYWRkKF90b0xvd2VyQ2FzZUJ5dGUoYnl0ZSkpOwogICAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5IRUFERVJfRklFTEQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5IRUFERVJfRU5ESU5HOgogICAgICAgICAgX2V4cGVjdChieXRlLCBfQ2hhckNvZGUuTEYpOwogICAgICAgICAgaWYgKF9oZWFkZXJzRW5kKCkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CgogICAgICAgIGNhc2UgX1N0YXRlLkNIVU5LX1NJWkVfU1RBUlRJTkdfQ1I6CiAgICAgICAgICBfZXhwZWN0KGJ5dGUsIF9DaGFyQ29kZS5DUik7CiAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuQ0hVTktfU0laRV9TVEFSVElOR19MRjsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5DSFVOS19TSVpFX1NUQVJUSU5HX0xGOgogICAgICAgICAgX2V4cGVjdChieXRlLCBfQ2hhckNvZGUuTEYpOwogICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkNIVU5LX1NJWkU7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuQ0hVTktfU0laRToKICAgICAgICAgIGlmIChieXRlID09IF9DaGFyQ29kZS5DUikgewogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuQ0hVTktfU0laRV9FTkRJTkc7CiAgICAgICAgICB9IGVsc2UgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLlNFTUlfQ09MT04pIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkNIVU5LX1NJWkVfRVhURU5TSU9OOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaW50IHZhbHVlID0gX2V4cGVjdEhleERpZ2l0KGJ5dGUpOwogICAgICAgICAgICBfcmVtYWluaW5nQ29udGVudCA9IF9yZW1haW5pbmdDb250ZW50ICogMTYgKyB2YWx1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5DSFVOS19TSVpFX0VYVEVOU0lPTjoKICAgICAgICAgIGlmIChieXRlID09IF9DaGFyQ29kZS5DUikgewogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuQ0hVTktfU0laRV9FTkRJTkc7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuQ0hVTktfU0laRV9FTkRJTkc6CiAgICAgICAgICBfZXhwZWN0KGJ5dGUsIF9DaGFyQ29kZS5MRik7CiAgICAgICAgICBpZiAoX3JlbWFpbmluZ0NvbnRlbnQgPiAwKSB7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5CT0RZOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkNIVU5LRURfQk9EWV9ET05FX0NSOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLkNIVU5LRURfQk9EWV9ET05FX0NSOgogICAgICAgICAgX2V4cGVjdChieXRlLCBfQ2hhckNvZGUuQ1IpOwogICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkNIVU5LRURfQk9EWV9ET05FX0xGOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLkNIVU5LRURfQk9EWV9ET05FX0xGOgogICAgICAgICAgX2V4cGVjdChieXRlLCBfQ2hhckNvZGUuTEYpOwogICAgICAgICAgX3Jlc2V0KCk7CiAgICAgICAgICBfY2xvc2VJbmNvbWluZygpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLkJPRFk6CiAgICAgICAgICAvLyBUaGUgYm9keSBpcyBub3QgaGFuZGxlZCBvbmUgYnl0ZSBhdCBhIHRpbWUgYnV0IGluIGJsb2Nrcy4KICAgICAgICAgIF9pbmRleC0tOwogICAgICAgICAgaW50IGRhdGFBdmFpbGFibGUgPSBfYnVmZmVyLmxlbmd0aCAtIF9pbmRleDsKICAgICAgICAgIGlmIChfcmVtYWluaW5nQ29udGVudCA+PSAwICYmIGRhdGFBdmFpbGFibGUgPiBfcmVtYWluaW5nQ29udGVudCkgewogICAgICAgICAgICBkYXRhQXZhaWxhYmxlID0gX3JlbWFpbmluZ0NvbnRlbnQ7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBBbHdheXMgcHJlc2VudCB0aGUgZGF0YSBhcyBhIHZpZXcuIFRoaXMgd2F5IHdlIGNhbiBoYW5kbGUgYWxsCiAgICAgICAgICAvLyBjYXNlcyBsaWtlIHRoaXMsIGFuZCB0aGUgdXNlciB3aWxsIG5vdCBleHBlcmllbmNlIGRpZmZlcmVudCBkYXRhCiAgICAgICAgICAvLyB0eXBlZCAod2hpY2ggY291bGQgbGVhZCB0byBwb2x5bW9ycGhpYyB1c2VyIGNvZGUpLgogICAgICAgICAgVWludDhMaXN0IGRhdGEgPSBuZXcgVWludDhMaXN0LnZpZXcoCiAgICAgICAgICAgICAgX2J1ZmZlci5idWZmZXIsIF9idWZmZXIub2Zmc2V0SW5CeXRlcyArIF9pbmRleCwgZGF0YUF2YWlsYWJsZSk7CiAgICAgICAgICBfYm9keUNvbnRyb2xsZXIuYWRkKGRhdGEpOwogICAgICAgICAgaWYgKF9yZW1haW5pbmdDb250ZW50ICE9IC0xKSB7CiAgICAgICAgICAgIF9yZW1haW5pbmdDb250ZW50IC09IGRhdGEubGVuZ3RoOwogICAgICAgICAgfQogICAgICAgICAgX2luZGV4ICs9IGRhdGEubGVuZ3RoOwogICAgICAgICAgaWYgKF9yZW1haW5pbmdDb250ZW50ID09IDApIHsKICAgICAgICAgICAgaWYgKCFfY2h1bmtlZCkgewogICAgICAgICAgICAgIF9yZXNldCgpOwogICAgICAgICAgICAgIF9jbG9zZUluY29taW5nKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkNIVU5LX1NJWkVfU1RBUlRJTkdfQ1I7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5GQUlMVVJFOgogICAgICAgICAgLy8gU2hvdWxkIGJlIHVucmVhY2hhYmxlLgogICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgLy8gU2hvdWxkIGJlIHVucmVhY2hhYmxlLgogICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CgogICAgX3BhcnNlckNhbGxlZCA9IGZhbHNlOwogICAgaWYgKF9idWZmZXIgIT0gbnVsbCAmJiBfaW5kZXggPT0gX2J1ZmZlci5sZW5ndGgpIHsKICAgICAgLy8gSWYgYWxsIGRhdGEgaXMgcGFyc2VkIHJlbGVhc2UgdGhlIGJ1ZmZlciBhbmQgcmVzdW1lIHJlY2VpdmluZwogICAgICAvLyBkYXRhLgogICAgICBfcmVsZWFzZUJ1ZmZlcigpOwogICAgICBpZiAoX3N0YXRlICE9IF9TdGF0ZS5VUEdSQURFRCAmJiBfc3RhdGUgIT0gX1N0YXRlLkZBSUxVUkUpIHsKICAgICAgICBfc29ja2V0U3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9vbkRhdGEoVWludDhMaXN0IGJ1ZmZlcikgewogICAgX3NvY2tldFN1YnNjcmlwdGlvbi5wYXVzZSgpOwogICAgYXNzZXJ0KF9idWZmZXIgPT0gbnVsbCk7CiAgICBfYnVmZmVyID0gYnVmZmVyOwogICAgX2luZGV4ID0gMDsKICAgIF9wYXJzZSgpOwogIH0KCiAgdm9pZCBfb25Eb25lKCkgewogICAgLy8gb25Eb25lIGNhbmNlbHMgdGhlIHN1YnNjcmlwdGlvbi4KICAgIF9zb2NrZXRTdWJzY3JpcHRpb24gPSBudWxsOwogICAgaWYgKF9zdGF0ZSA9PSBfU3RhdGUuQ0xPU0VEIHx8IF9zdGF0ZSA9PSBfU3RhdGUuRkFJTFVSRSkgcmV0dXJuOwoKICAgIGlmIChfaW5jb21pbmcgIT0gbnVsbCkgewogICAgICBpZiAoX3N0YXRlICE9IF9TdGF0ZS5VUEdSQURFRCAmJgogICAgICAgICAgIShfc3RhdGUgPT0gX1N0YXRlLlNUQVJUICYmICFfcmVxdWVzdFBhcnNlcikgJiYKICAgICAgICAgICEoX3N0YXRlID09IF9TdGF0ZS5CT0RZICYmICFfY2h1bmtlZCAmJiBfdHJhbnNmZXJMZW5ndGggPT0gLTEpKSB7CiAgICAgICAgX3JlcG9ydEJvZHlFcnJvcigKICAgICAgICAgICAgSHR0cEV4Y2VwdGlvbigiQ29ubmVjdGlvbiBjbG9zZWQgd2hpbGUgcmVjZWl2aW5nIGRhdGEiKSk7CiAgICAgIH0KICAgICAgX2Nsb3NlSW5jb21pbmcodHJ1ZSk7CiAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIElmIHRoZSBjb25uZWN0aW9uIGlzIGlkbGUgdGhlIEhUVFAgc3RyZWFtIGlzIGNsb3NlZC4KICAgIGlmIChfc3RhdGUgPT0gX1N0YXRlLlNUQVJUKSB7CiAgICAgIGlmICghX3JlcXVlc3RQYXJzZXIpIHsKICAgICAgICBfcmVwb3J0SHR0cEVycm9yKAogICAgICAgICAgICBIdHRwRXhjZXB0aW9uKCJDb25uZWN0aW9uIGNsb3NlZCBiZWZvcmUgZnVsbCBoZWFkZXIgd2FzIHJlY2VpdmVkIikpOwogICAgICB9CiAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoX3N0YXRlID09IF9TdGF0ZS5VUEdSQURFRCkgewogICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKF9zdGF0ZSA8IF9TdGF0ZS5GSVJTVF9CT0RZX1NUQVRFKSB7CiAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5GQUlMVVJFOwogICAgICAvLyBSZXBvcnQgdGhlIGVycm9yIHRocm91Z2ggdGhlIGVycm9yIGNhbGxiYWNrIGlmIGFueS4gT3RoZXJ3aXNlCiAgICAgIC8vIHRocm93IHRoZSBlcnJvci4KICAgICAgX3JlcG9ydEh0dHBFcnJvcigKICAgICAgICAgIEh0dHBFeGNlcHRpb24oIkNvbm5lY3Rpb24gY2xvc2VkIGJlZm9yZSBmdWxsIGhlYWRlciB3YXMgcmVjZWl2ZWQiKSk7CiAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIV9jaHVua2VkICYmIF90cmFuc2Zlckxlbmd0aCA9PSAtMSkgewogICAgICBfc3RhdGUgPSBfU3RhdGUuQ0xPU0VEOwogICAgfSBlbHNlIHsKICAgICAgX3N0YXRlID0gX1N0YXRlLkZBSUxVUkU7CiAgICAgIC8vIFJlcG9ydCB0aGUgZXJyb3IgdGhyb3VnaCB0aGUgZXJyb3IgY2FsbGJhY2sgaWYgYW55LiBPdGhlcndpc2UKICAgICAgLy8gdGhyb3cgdGhlIGVycm9yLgogICAgICBfcmVwb3J0SHR0cEVycm9yKAogICAgICAgICAgSHR0cEV4Y2VwdGlvbigiQ29ubmVjdGlvbiBjbG9zZWQgYmVmb3JlIGZ1bGwgYm9keSB3YXMgcmVjZWl2ZWQiKSk7CiAgICB9CiAgICBfY29udHJvbGxlci5jbG9zZSgpOwogIH0KCiAgU3RyaW5nIGdldCB2ZXJzaW9uIHsKICAgIHN3aXRjaCAoX2h0dHBWZXJzaW9uKSB7CiAgICAgIGNhc2UgX0h0dHBWZXJzaW9uLkhUVFAxMDoKICAgICAgICByZXR1cm4gIjEuMCI7CiAgICAgIGNhc2UgX0h0dHBWZXJzaW9uLkhUVFAxMToKICAgICAgICByZXR1cm4gIjEuMSI7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGludCBnZXQgbWVzc2FnZVR5cGUgPT4gX21lc3NhZ2VUeXBlOwogIGludCBnZXQgdHJhbnNmZXJMZW5ndGggPT4gX3RyYW5zZmVyTGVuZ3RoOwogIGJvb2wgZ2V0IHVwZ3JhZGUgPT4gX2Nvbm5lY3Rpb25VcGdyYWRlICYmIF9zdGF0ZSA9PSBfU3RhdGUuVVBHUkFERUQ7CiAgYm9vbCBnZXQgcGVyc2lzdGVudENvbm5lY3Rpb24gPT4gX3BlcnNpc3RlbnRDb25uZWN0aW9uOwoKICB2b2lkIHNldCBpc0hlYWQoYm9vbCB2YWx1ZSkgewogICAgaWYgKHZhbHVlKSBfbm9NZXNzYWdlQm9keSA9IHRydWU7CiAgfQoKICBfSHR0cERldGFjaGVkSW5jb21pbmcgZGV0YWNoSW5jb21pbmcoKSB7CiAgICAvLyBTaW11bGF0ZSBkZXRhY2hlZCBieSBtYXJraW5nIGFzIHVwZ3JhZGVkLgogICAgX3N0YXRlID0gX1N0YXRlLlVQR1JBREVEOwogICAgcmV0dXJuIG5ldyBfSHR0cERldGFjaGVkSW5jb21pbmcoX3NvY2tldFN1YnNjcmlwdGlvbiwgcmVhZFVucGFyc2VkRGF0YSgpKTsKICB9CgogIFVpbnQ4TGlzdCByZWFkVW5wYXJzZWREYXRhKCkgewogICAgaWYgKF9idWZmZXIgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAoX2luZGV4ID09IF9idWZmZXIubGVuZ3RoKSByZXR1cm4gbnVsbDsKICAgIHZhciByZXN1bHQgPSBfYnVmZmVyLnN1Ymxpc3QoX2luZGV4KTsKICAgIF9yZWxlYXNlQnVmZmVyKCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCBfcmVzZXQoKSB7CiAgICBpZiAoX3N0YXRlID09IF9TdGF0ZS5VUEdSQURFRCkgcmV0dXJuOwogICAgX3N0YXRlID0gX1N0YXRlLlNUQVJUOwogICAgX21lc3NhZ2VUeXBlID0gX01lc3NhZ2VUeXBlLlVOREVURVJNSU5FRDsKICAgIF9oZWFkZXJGaWVsZC5jbGVhcigpOwogICAgX2hlYWRlclZhbHVlLmNsZWFyKCk7CiAgICBfbWV0aG9kLmNsZWFyKCk7CiAgICBfdXJpT3JSZWFzb25QaHJhc2UuY2xlYXIoKTsKCiAgICBfc3RhdHVzQ29kZSA9IDA7CiAgICBfc3RhdHVzQ29kZUxlbmd0aCA9IDA7CgogICAgX2h0dHBWZXJzaW9uID0gX0h0dHBWZXJzaW9uLlVOREVURVJNSU5FRDsKICAgIF90cmFuc2Zlckxlbmd0aCA9IC0xOwogICAgX3BlcnNpc3RlbnRDb25uZWN0aW9uID0gZmFsc2U7CiAgICBfY29ubmVjdGlvblVwZ3JhZGUgPSBmYWxzZTsKICAgIF9jaHVua2VkID0gZmFsc2U7CgogICAgX25vTWVzc2FnZUJvZHkgPSBmYWxzZTsKICAgIF9yZW1haW5pbmdDb250ZW50ID0gLTE7CgogICAgX2hlYWRlcnMgPSBudWxsOwogIH0KCiAgdm9pZCBfcmVsZWFzZUJ1ZmZlcigpIHsKICAgIF9idWZmZXIgPSBudWxsOwogICAgX2luZGV4ID0gbnVsbDsKICB9CgogIHN0YXRpYyBib29sIF9pc1Rva2VuQ2hhcihpbnQgYnl0ZSkgewogICAgcmV0dXJuIGJ5dGUgPiAzMSAmJiBieXRlIDwgMTI4ICYmICFfQ29uc3QuU0VQQVJBVE9SX01BUFtieXRlXTsKICB9CgogIHN0YXRpYyBib29sIF9pc1ZhbHVlQ2hhcihpbnQgYnl0ZSkgewogICAgcmV0dXJuIChieXRlID4gMzEgJiYgYnl0ZSA8IDEyOCkgfHwKICAgICAgICAoYnl0ZSA9PSBfQ2hhckNvZGUuU1ApIHx8CiAgICAgICAgKGJ5dGUgPT0gX0NoYXJDb2RlLkhUKTsKICB9CgogIHN0YXRpYyBMaXN0PFN0cmluZz4gX3Rva2VuaXplRmllbGRWYWx1ZShTdHJpbmcgaGVhZGVyVmFsdWUpIHsKICAgIExpc3Q8U3RyaW5nPiB0b2tlbnMgPSBuZXcgTGlzdDxTdHJpbmc+KCk7CiAgICBpbnQgc3RhcnQgPSAwOwogICAgaW50IGluZGV4ID0gMDsKICAgIHdoaWxlIChpbmRleCA8IGhlYWRlclZhbHVlLmxlbmd0aCkgewogICAgICBpZiAoaGVhZGVyVmFsdWVbaW5kZXhdID09ICIsIikgewogICAgICAgIHRva2Vucy5hZGQoaGVhZGVyVmFsdWUuc3Vic3RyaW5nKHN0YXJ0LCBpbmRleCkpOwogICAgICAgIHN0YXJ0ID0gaW5kZXggKyAxOwogICAgICB9IGVsc2UgaWYgKGhlYWRlclZhbHVlW2luZGV4XSA9PSAiICIgfHwgaGVhZGVyVmFsdWVbaW5kZXhdID09ICJcdCIpIHsKICAgICAgICBzdGFydCsrOwogICAgICB9CiAgICAgIGluZGV4Kys7CiAgICB9CiAgICB0b2tlbnMuYWRkKGhlYWRlclZhbHVlLnN1YnN0cmluZyhzdGFydCwgaW5kZXgpKTsKICAgIHJldHVybiB0b2tlbnM7CiAgfQoKICBzdGF0aWMgaW50IF90b0xvd2VyQ2FzZUJ5dGUoaW50IHgpIHsKICAgIC8vIE9wdGltaXplZCB2ZXJzaW9uOgogICAgLy8gIC0gIDB4NDEgaXMgJ0EnCiAgICAvLyAgLSAgMHg3ZiBpcyBBU0NJSSBtYXNrCiAgICAvLyAgLSAgMjYgaXMgdGhlIG51bWJlciBvZiBhbHBoYSBjaGFyYWN0ZXJzLgogICAgLy8gIC0gIDB4MjAgaXMgdGhlIGRlbHRhIGJldHdlZW4gbG93ZXIgYW5kIHVwcGVyIGNoYXJzLgogICAgcmV0dXJuICgoKHggLSAweDQxKSAmIDB4N2YpIDwgMjYpID8gKHggfCAweDIwKSA6IHg7CiAgfQoKICAvLyBleHBlY3RlZCBzaG91bGQgYWxyZWFkeSBiZSBsb3dlcmNhc2UuCiAgc3RhdGljIGJvb2wgX2Nhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoTGlzdDxpbnQ+IGV4cGVjdGVkLCBMaXN0PGludD4gdmFsdWUpIHsKICAgIGlmIChleHBlY3RlZC5sZW5ndGggIT0gdmFsdWUubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChleHBlY3RlZFtpXSAhPSBfdG9Mb3dlckNhc2VCeXRlKHZhbHVlW2ldKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICB2b2lkIF9leHBlY3QoaW50IHZhbDEsIGludCB2YWwyKSB7CiAgICBpZiAodmFsMSAhPSB2YWwyKSB7CiAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKAogICAgICAgICAgIkZhaWxlZCB0byBwYXJzZSBIVFRQLCAkdmFsMSBkb2VzIG5vdCBtYXRjaCAkdmFsMiIpOwogICAgfQogIH0KCiAgaW50IF9leHBlY3RIZXhEaWdpdChpbnQgYnl0ZSkgewogICAgaWYgKDB4MzAgPD0gYnl0ZSAmJiBieXRlIDw9IDB4MzkpIHsKICAgICAgcmV0dXJuIGJ5dGUgLSAweDMwOyAvLyAwIC0gOQogICAgfSBlbHNlIGlmICgweDQxIDw9IGJ5dGUgJiYgYnl0ZSA8PSAweDQ2KSB7CiAgICAgIHJldHVybiBieXRlIC0gMHg0MSArIDEwOyAvLyBBIC0gRgogICAgfSBlbHNlIGlmICgweDYxIDw9IGJ5dGUgJiYgYnl0ZSA8PSAweDY2KSB7CiAgICAgIHJldHVybiBieXRlIC0gMHg2MSArIDEwOyAvLyBhIC0gZgogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oCiAgICAgICAgICAiRmFpbGVkIHRvIHBhcnNlIEhUVFAsICRieXRlIHNob3VsZCBiZSBhIEhleCBkaWdpdCIpOwogICAgfQogIH0KCiAgdm9pZCBfY3JlYXRlSW5jb21pbmcoaW50IHRyYW5zZmVyTGVuZ3RoKSB7CiAgICBhc3NlcnQoX2luY29taW5nID09IG51bGwpOwogICAgYXNzZXJ0KF9ib2R5Q29udHJvbGxlciA9PSBudWxsKTsKICAgIGFzc2VydCghX2JvZHlQYXVzZWQpOwogICAgdmFyIGluY29taW5nOwogICAgX2JvZHlDb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8VWludDhMaXN0PigKICAgICAgICBzeW5jOiB0cnVlLAogICAgICAgIG9uTGlzdGVuOiAoKSB7CiAgICAgICAgICBpZiAoaW5jb21pbmcgIT0gX2luY29taW5nKSByZXR1cm47CiAgICAgICAgICBhc3NlcnQoX2JvZHlQYXVzZWQpOwogICAgICAgICAgX2JvZHlQYXVzZWQgPSBmYWxzZTsKICAgICAgICAgIF9wYXVzZVN0YXRlQ2hhbmdlZCgpOwogICAgICAgIH0sCiAgICAgICAgb25QYXVzZTogKCkgewogICAgICAgICAgaWYgKGluY29taW5nICE9IF9pbmNvbWluZykgcmV0dXJuOwogICAgICAgICAgYXNzZXJ0KCFfYm9keVBhdXNlZCk7CiAgICAgICAgICBfYm9keVBhdXNlZCA9IHRydWU7CiAgICAgICAgICBfcGF1c2VTdGF0ZUNoYW5nZWQoKTsKICAgICAgICB9LAogICAgICAgIG9uUmVzdW1lOiAoKSB7CiAgICAgICAgICBpZiAoaW5jb21pbmcgIT0gX2luY29taW5nKSByZXR1cm47CiAgICAgICAgICBhc3NlcnQoX2JvZHlQYXVzZWQpOwogICAgICAgICAgX2JvZHlQYXVzZWQgPSBmYWxzZTsKICAgICAgICAgIF9wYXVzZVN0YXRlQ2hhbmdlZCgpOwogICAgICAgIH0sCiAgICAgICAgb25DYW5jZWw6ICgpIHsKICAgICAgICAgIGlmIChpbmNvbWluZyAhPSBfaW5jb21pbmcpIHJldHVybjsKICAgICAgICAgIGlmIChfc29ja2V0U3Vic2NyaXB0aW9uICE9IG51bGwpIHsKICAgICAgICAgICAgX3NvY2tldFN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgICAgICAgIH0KICAgICAgICAgIF9jbG9zZUluY29taW5nKHRydWUpOwogICAgICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgICAgICB9KTsKICAgIGluY29taW5nID0gX2luY29taW5nID0KICAgICAgICBuZXcgX0h0dHBJbmNvbWluZyhfaGVhZGVycywgdHJhbnNmZXJMZW5ndGgsIF9ib2R5Q29udHJvbGxlci5zdHJlYW0pOwogICAgX2JvZHlQYXVzZWQgPSB0cnVlOwogICAgX3BhdXNlU3RhdGVDaGFuZ2VkKCk7CiAgfQoKICB2b2lkIF9jbG9zZUluY29taW5nKFtib29sIGNsb3NpbmcgPSBmYWxzZV0pIHsKICAgIC8vIElnbm9yZSBtdWx0aXBsZSBjbG9zZSAoY2FuIGhhcHBlbiBpbiByZS1lbnRyYW5jZSkuCiAgICBpZiAoX2luY29taW5nID09IG51bGwpIHJldHVybjsKICAgIHZhciB0bXAgPSBfaW5jb21pbmc7CiAgICB0bXAuY2xvc2UoY2xvc2luZyk7CiAgICBfaW5jb21pbmcgPSBudWxsOwogICAgaWYgKF9ib2R5Q29udHJvbGxlciAhPSBudWxsKSB7CiAgICAgIF9ib2R5Q29udHJvbGxlci5jbG9zZSgpOwogICAgICBfYm9keUNvbnRyb2xsZXIgPSBudWxsOwogICAgfQogICAgX2JvZHlQYXVzZWQgPSBmYWxzZTsKICAgIF9wYXVzZVN0YXRlQ2hhbmdlZCgpOwogIH0KCiAgdm9pZCBfcGF1c2VTdGF0ZUNoYW5nZWQoKSB7CiAgICBpZiAoX2luY29taW5nICE9IG51bGwpIHsKICAgICAgaWYgKCFfYm9keVBhdXNlZCAmJiAhX3BhcnNlckNhbGxlZCkgewogICAgICAgIF9wYXJzZSgpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAoIV9wYXVzZWQgJiYgIV9wYXJzZXJDYWxsZWQpIHsKICAgICAgICBfcGFyc2UoKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBfcmVwb3J0SHR0cEVycm9yKGVycm9yLCBbc3RhY2tUcmFjZV0pIHsKICAgIGlmIChfc29ja2V0U3Vic2NyaXB0aW9uICE9IG51bGwpIF9zb2NrZXRTdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgICBfc3RhdGUgPSBfU3RhdGUuRkFJTFVSRTsKICAgIF9jb250cm9sbGVyLmFkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgfQoKICB2b2lkIF9yZXBvcnRCb2R5RXJyb3IoZXJyb3IsIFtzdGFja1RyYWNlXSkgewogICAgaWYgKF9zb2NrZXRTdWJzY3JpcHRpb24gIT0gbnVsbCkgX3NvY2tldFN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgIF9z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IHBvaW50ZXJzLgpjbGFzcyBfSHR0cFNlc3Npb24gaW1wbGVtZW50cyBIdHRwU2Vzc2lvbiB7CiAgLy8gRGVzdHJveWVkIG1hcmtlZC4gVXNlZCBieSB0aGUgaHR0cCBjb25uZWN0aW9uIHRvIHNlZSBpZiBhIHNlc3Npb24gaXMgdmFsaWQuCiAgYm9vbCBfZGVzdHJveWVkID0gZmFsc2U7CiAgYm9vbCBfaXNOZXcgPSB0cnVlOwogIERhdGVUaW1lIF9sYXN0U2VlbjsKICBGdW5jdGlvbiBfdGltZW91dENhbGxiYWNrOwogIF9IdHRwU2Vzc2lvbk1hbmFnZXIgX3Nlc3Npb25NYW5hZ2VyOwogIC8vIFBvaW50ZXJzIGluIHRpbWVvdXQgcXVldWUuCiAgX0h0dHBTZXNzaW9uIF9wcmV2OwogIF9IdHRwU2Vzc2lvbiBfbmV4dDsKICBmaW5hbCBTdHJpbmcgaWQ7CgogIGZpbmFsIE1hcCBfZGF0YSA9IG5ldyBIYXNoTWFwKCk7CgogIF9IdHRwU2Vzc2lvbih0aGlzLl9zZXNzaW9uTWFuYWdlciwgdGhpcy5pZCkgOiBfbGFzdFNlZW4gPSBuZXcgRGF0ZVRpbWUubm93KCk7CgogIHZvaWQgZGVzdHJveSgpIHsKICAgIF9kZXN0cm95ZWQgPSB0cnVlOwogICAgX3Nlc3Npb25NYW5hZ2VyLl9yZW1vdmVGcm9tVGltZW91dFF1ZXVlKHRoaXMpOwogICAgX3Nlc3Npb25NYW5hZ2VyLl9zZXNzaW9ucy5yZW1vdmUoaWQpOwogIH0KCiAgLy8gTWFyayB0aGUgc2Vzc2lvbiBhcyBzZWVuLiBUaGlzIHdpbGwgcmVzZXQgdGhlIHRpbWVvdXQgYW5kIG1vdmUgdGhlIG5vZGUgdG8KICAvLyB0aGUgZW5kIG9mIHRoZSB0aW1lb3V0IHF1ZXVlLgogIHZvaWQgX21hcmtTZWVuKCkgewogICAgX2xhc3RTZWVuID0gbmV3IERhdGVUaW1lLm5vdygpOwogICAgX3Nlc3Npb25NYW5hZ2VyLl9idW1wVG9FbmQodGhpcyk7CiAgfQoKICBEYXRlVGltZSBnZXQgbGFzdFNlZW4gPT4gX2xhc3RTZWVuOwoKICBib29sIGdldCBpc05ldyA9PiBfaXNOZXc7CgogIHZvaWQgc2V0IG9uVGltZW91dCh2b2lkIGNhbGxiYWNrKCkpIHsKICAgIF90aW1lb3V0Q2FsbGJhY2sgPSBjYWxsYmFjazsKICB9CgogIC8vIE1hcCBpbXBsZW1lbnRhdGlvbjoKICBib29sIGNvbnRhaW5zVmFsdWUodmFsdWUpID0+IF9kYXRhLmNvbnRhaW5zVmFsdWUodmFsdWUpOwogIGJvb2wgY29udGFpbnNLZXkoa2V5KSA9PiBfZGF0YS5jb250YWluc0tleShrZXkpOwogIG9wZXJhdG9yIFtdKGtleSkgPT4gX2RhdGFba2V5XTsKICB2b2lkIG9wZXJhdG9yIFtdPShrZXksIHZhbHVlKSB7CiAgICBfZGF0YVtrZXldID0gdmFsdWU7CiAgfQoKICBwdXRJZkFic2VudChrZXksIGlmQWJzZW50KSA9PiBfZGF0YS5wdXRJZkFic2VudChrZXksIGlmQWJzZW50KTsKICBhZGRBbGwoTWFwIG90aGVyKSA9PiBfZGF0YS5hZGRBbGwob3RoZXIpOwogIHJlbW92ZShrZXkpID0+IF9kYXRhLnJlbW92ZShrZXkpOwogIHZvaWQgY2xlYXIoKSB7CiAgICBfZGF0YS5jbGVhcigpOwogIH0KCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihrZXksIHZhbHVlKSkgewogICAgX2RhdGEuZm9yRWFjaChmKTsKICB9CgogIEl0ZXJhYmxlPE1hcEVudHJ5PiBnZXQgZW50cmllcyA9PiBfZGF0YS5lbnRyaWVzOwoKICB2b2lkIGFkZEVudHJpZXMoSXRlcmFibGU8TWFwRW50cnk+IGVudHJpZXMpIHsKICAgIF9kYXRhLmFkZEVudHJpZXMoZW50cmllcyk7CiAgfQoKICBNYXA8SywgVj4gbWFwPEssIFY+KE1hcEVudHJ5PEssIFY+IHRyYW5zZm9ybShrZXksIHZhbHVlKSkgPT4KICAgICAgX2RhdGEubWFwKHRyYW5zZm9ybSk7CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KGtleSwgdmFsdWUpKSB7CiAgICBfZGF0YS5yZW1vdmVXaGVyZSh0ZXN0KTsKICB9CgogIE1hcDxLLCBWPiBjYXN0PEssIFY+KCkgPT4gX2RhdGEuY2FzdDxLLCBWPigpOwogIHVwZGF0ZShrZXksIHVwZGF0ZSh2YWx1ZSksIHtpZkFic2VudCgpfSkgPT4KICAgICAgX2RhdGEudXBkYXRlKGtleSwgdXBkYXRlLCBpZkFic2VudDogaWZBYnNlbnQpOwoKICB2b2lkIHVwZGF0ZUFsbCh1cGRhdGUoa2V5LCB2YWx1ZSkpIHsKICAgIF9kYXRhLnVwZGF0ZUFsbCh1cGRhdGUpOwogIH0KCiAgSXRlcmFibGUgZ2V0IGtleXMgPT4gX2RhdGEua2V5czsKICBJdGVyYWJsZSBnZXQgdmFsdWVzID0+IF9kYXRhLnZhbHVlczsKICBpbnQgZ2V0IGxlbmd0aCA9PiBfZGF0YS5sZW5ndGg7CiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfZGF0YS5pc0VtcHR5OwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX2RhdGEuaXNOb3RFbXB0eTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0h0dHBTZXNzaW9uIGlkOiRpZCAkX2RhdGEnOwp9CgovLyBQcml2YXRlIGNsYXNzIHVzZWQgdG8gbWFuYWdlIGFsbCB0aGUgYWN0aXZlIHNlc3Npb25zLiBUaGUgc2Vzc2lvbnMgYXJlIHN0b3JlZAovLyBpbiB0d28gd2F5czoKLy8KLy8gICogSW4gYSBtYXAsIG1hcHBpbmcgZnJvbSBJRCB0byBIdHRwU2Vzc2lvbi4KLy8gICogSW4gYSBsaW5rZWQgbGlzdCwgdXNlZCBhcyBhIHRpbWVvdXQgcXVldWUuCmNsYXNzIF9IdHRwU2Vzc2lvbk1hbmFnZXIgewogIE1hcDxTdHJpbmcsIF9IdHRwU2Vzc2lvbj4gX3Nlc3Npb25zOwogIGludCBfc2Vzc2lvblRpbWVvdXQgPSAyMCAqIDYwOyAvLyAyMCBtaW5zLgogIF9IdHRwU2Vzc2lvbiBfaGVhZDsKICBfSHR0cFNlc3Npb24gX3RhaWw7CiAgVGltZXIgX3RpbWVyOwoKICBfSHR0cFNlc3Npb25NYW5hZ2VyKCkgOiBfc2Vzc2lvbnMgPSB7fTsKCiAgU3RyaW5nIGNyZWF0ZVNlc3Npb25JZCgpIHsKICAgIGNvbnN0IGludCBfS0VZX0xFTkdUSCA9IDE2OyAvLyAxMjggYml0cy4KICAgIHZhciBkYXRhID0gX0NyeXB0b1V0aWxzLmdldFJhbmRvbUJ5dGVzKF9LRVlfTEVOR1RIKTsKICAgIHJldHVybiBfQ3J5cHRvVXRpbHMuYnl0ZXNUb0hleChkYXRhKTsKICB9CgogIF9IdHRwU2Vzc2lvbiBnZXRTZXNzaW9uKFN0cmluZyBpZCkgPT4gX3Nlc3Npb25zW2lkXTsKCiAgX0h0dHBTZXNzaW9uIGNyZWF0ZVNlc3Npb24oKSB7CiAgICB2YXIgaWQgPSBjcmVhdGVTZXNzaW9uSWQoKTsKICAgIC8vIFRPRE8oYWpvaG5zZW4pOiBDb25zaWRlciBhZGRpbmcgYSBsaW1pdCBhbmQgdGhyb3dpbmcgYW4gZXhjZXB0aW9uLgogICAgLy8gU2hvdWxkIGJlIHZlcnkgdW5saWtlbHkgaG93ZXZlci4KICAgIHdoaWxlIChfc2Vzc2lvbnMuY29udGFpbnNLZXkoaWQpKSB7CiAgICAgIGlkID0gY3JlYXRlU2Vzc2lvbklkKCk7CiAgICB9CiAgICB2YXIgc2Vzc2lvbiA9IF9zZXNzaW9uc1tpZF0gPSBuZXcgX0h0dHBTZXNzaW9uKHRoaXMsIGlkKTsKICAgIF9hZGRUb1RpbWVvdXRRdWV1ZShzZXNzaW9uKTsKICAgIHJldHVybiBzZXNzaW9uOwogIH0KCiAgdm9pZCBzZXQgc2Vzc2lvblRpbWVvdXQoaW50IHRpbWVvdXQpIHsKICAgIF9zZXNzaW9uVGltZW91dCA9IHRpbWVvdXQ7CiAgICBfc3RvcFRpbWVyKCk7CiAgICBfc3RhcnRUaW1lcigpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9zdG9wVGltZXIoKTsKICB9CgogIHZvaWQgX2J1bXBUb0VuZChfSHR0cFNlc3Npb24gc2Vzc2lvbikgewogICAgX3JlbW92ZUZyb21UaW1lb3V0UXVldWUoc2Vzc2lvbik7CiAgICBfYWRkVG9UaW1lb3V0UXVldWUoc2Vzc2lvbik7CiAgfQoKICB2b2lkIF9hZGRUb1RpbWVvdXRRdWV1ZShfSHR0cFNlc3Npb24gc2Vzc2lvbikgewogICAgaWYgKF9oZWFkID09IG51bGwpIHsKICAgICAgYXNzZXJ0KF90YWlsID09IG51bGwpOwogICAgICBfdGFpbCA9IF9oZWFkID0gc2Vzc2lvbjsKICAgICAgX3N0YXJ0VGltZXIoKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChfdGltZXIgIT0gbnVsbCk7CiAgICAgIGFzc2VydChfdGFpbCAhPSBudWxsKTsKICAgICAgLy8gQWRkIHRvIGVuZC4KICAgICAgX3RhaWwuX25leHQgPSBzZXNzaW9uOwogICAgICBzZXNzaW9uLl9wcmV2ID0gX3RhaWw7CiAgICAgIF90YWlsID0gc2Vzc2lvbjsKICAgIH0KICB9CgogIHZvaWQgX3JlbW92ZUZyb21UaW1lb3V0UXVldWUoX0h0dHBTZXNzaW9uIHNlc3Npb24pIHsKICAgIGlmIChzZXNzaW9uLl9uZXh0ICE9IG51bGwpIHsKICAgICAgc2Vzc2lvbi5fbmV4dC5fcHJldiA9IHNlc3Npb24uX3ByZXY7CiAgICB9CiAgICBpZiAoc2Vzc2lvbi5fcHJldiAhPSBudWxsKSB7CiAgICAgIHNlc3Npb24uX3ByZXYuX25leHQgPSBzZXNzaW9uLl9uZXh0OwogICAgfQogICAgaWYgKF9oZWFkID09IHNlc3Npb24pIHsKICAgICAgLy8gV2UgcmVtb3ZlZCB0aGUgaGVhZCBlbGVtZW50LCBzdGFydCBuZXcgdGltZXIuCiAgICAgIF9oZWFkID0gc2Vzc2lvbi5fbmV4dDsKICAgICAgX3N0b3BUaW1lcigpOwogICAgICBfc3RhcnRUaW1lcigpOwogICAgfQogICAgaWYgKF90YWlsID09IHNlc3Npb24pIHsKICAgICAgX3RhaWwgPSBzZXNzaW9uLl9wcmV2OwogICAgfQogICAgc2Vzc2lvbi5fbmV4dCA9IHNlc3Npb24uX3ByZXYgPSBudWxsOwogIH0KCiAgdm9pZCBfdGltZXJUaW1lb3V0KCkgewogICAgX3N0b3BUaW1lcigpOyAvLyBDbGVhciB0aW1lci4KICAgIGFzc2VydChfaGVhZCAhPSBudWxsKTsKICAgIHZhciBzZXNzaW9uID0gX2hlYWQ7CiAgICBzZXNzaW9uLmRlc3Ryb3koKTsgLy8gV2lsbCByZW1vdmUgdGhlIHNlc3Npb24gZnJvbSB0aW1lb3V0IHF1ZXVlIGFuZCBtYXAuCiAgICBpZiAoc2Vzc2lvbi5fdGltZW91dENhbGxiYWNrICE9IG51bGwpIHsKICAgICAgc2Vzc2lvbi5fdGltZW91dENhbGxiYWNrKCk7CiAgICB9CiAgfQoKICB2b2lkIF9zdGFydFRpbWVyKCkgewogICAgYXNzZXJ0KF90aW1lciA9PSBudWxsKTsKICAgIGlmIChfaGVhZCAhPSBudWxsKSB7CiAgICAgIGludCBzZWNvbmRzID0gbmV3IERhdGVUaW1lLm5vdygpLmRpZmZlcmVuY2UoX2hlYWQubGFzdFNlZW4pLmluU2Vjb25kczsKICAgICAgX3RpbWVyID0gbmV3IFRpbWVyKAogICAgICAgICAgbmV3IER1cmF0aW9uKHNlY29uZHM6IF9zZXNzaW9uVGltZW91dCAtIHNlY29uZHMpLCBfdGltZXJUaW1lb3V0KTsKICAgIH0KICB9CgogIHZvaWQgX3N0b3BUaW1lcigpIHsKICAgIGlmIChfdGltZXIgIT0gbnVsbCkgewogICAgICBfdGltZXIuY2FuY2VsKCk7CiAgICAgIF90aW1lciA9IG51bGw7CiAgICB9CiAgfQp9CoDRAE5OPAEPARQBLgFQIyxRGxYWHScgFhYTASMBUAETFzMqBAFQIxUkJgQBJgEcASghBAEZOzMiIhgEAUIsJBETBAElFgQBMwEwHwQBPxwBLB0EATAuNQEnHQQBIyciJSsBNAIBURADMDEcJy0WFhABKgEdLTkqBAE3ASEgSigoHgY+IRQEASkfEhMEARESBAEqJiEEATIZHR8VDR4dFR0dFwYEATchKwYhKwYcNx0UFQYcHQYqBAEZIhsZTiwiBgQBFxwZTRpMBgQBFhoXFQYEAgEcZGFydDpfaHR0cC9odHRwX3Nlc3Npb24uZGFydEFvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi9faHR0cC9vdmVycmlkZXMuZGFydJCTLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuX2h0dHA7CgpmaW5hbCBfaHR0cE92ZXJyaWRlc1Rva2VuID0gbmV3IE9iamVjdCgpOwoKY29uc3QgX2FzeW5jUnVuWm9uZWQgPSBydW5ab25lZDsKCi8vLyBUaGlzIGNsYXNzIGZhY2lsaXRhdGVzIG92ZXJyaWRpbmcgW0h0dHBDbGllbnRdIHdpdGggYSBtb2NrIGltcGxlbWVudGF0aW9uLgovLy8gSXQgc2hvdWxkIGJlIGV4dGVuZGVkIGJ5IGFub3RoZXIgY2xhc3MgaW4gY2xpZW50IGNvZGUgd2l0aCBvdmVycmlkZXMKLy8vIHRoYXQgY29uc3RydWN0IGEgbW9jayBpbXBsZW1lbnRhdGlvbi4gVGhlIGltcGxlbWVudGF0aW9uIGluIHRoaXMgYmFzZSBjbGFzcwovLy8gZGVmYXVsdHMgdG8gdGhlIGFjdHVhbCBbSHR0cENsaWVudF0gaW1wbGVtZW50YXRpb24uIEZvciBleGFtcGxlOgovLy8KLy8vIGBgYAovLy8gY2xhc3MgTXlIdHRwQ2xpZW50IGltcGxlbWVudHMgSHR0cENsaWVudCB7Ci8vLyAgIC4uLgovLy8gICAvLyBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSHR0cENsaWVudCBpbnRlcmZhY2UKLy8vICAgLi4uCi8vLyB9Ci8vLwovLy8gbWFpbigpIHsKLy8vICAgSHR0cE92ZXJyaWRlcy5ydW5ab25lZCgoKSB7Ci8vLyAgICAgLi4uCi8vLyAgICAgLy8gT3BlcmF0aW9ucyB3aWxsIHVzZSBNeUh0dHBDbGllbnQgaW5zdGVhZCBvZiB0aGUgcmVhbCBIdHRwQ2xpZW50Ci8vLyAgICAgLy8gaW1wbGVtZW50YXRpb24gd2hlbmV2ZXIgSHR0cENsaWVudCBpcyB1c2VkLgovLy8gICAgIC4uLgovLy8gICB9LCBjcmVhdGVIdHRwQ2xpZW50OiAoU2VjdXJpdHlDb250ZXh0IGMpID0+IG5ldyBNeUh0dHBDbGllbnQoYykpOwovLy8gfQovLy8gYGBgCmFic3RyYWN0IGNsYXNzIEh0dHBPdmVycmlkZXMgewogIHN0YXRpYyBIdHRwT3ZlcnJpZGVzIF9nbG9iYWw7CgogIHN0YXRpYyBIdHRwT3ZlcnJpZGVzIGdldCBjdXJyZW50IHsKICAgIHJldHVybiBab25lLmN1cnJlbnRbX2h0dHBPdmVycmlkZXNUb2tlbl0gPz8gX2dsb2JhbDsKICB9CgogIC8vLyBUaGUgW0h0dHBPdmVycmlkZXNdIHRvIHVzZSBpbiB0aGUgcm9vdCBbWm9uZV0uCiAgLy8vCiAgLy8vIFRoZXNlIGFyZSB0aGUgW0h0dHBPdmVycmlkZXNdIHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSByb290IFpvbmUsIGFuZCBpbgogIC8vLyBab25lJ3MgdGhhdCBkbyBub3Qgc2V0IFtIdHRwT3ZlcnJpZGVzXSBhbmQgd2hvc2UgYW5jZXN0b3JzIHVwIHRvIHRoZSByb290CiAgLy8vIFpvbmUgZG8gbm90IHNldCBbSHR0cE92ZXJyaWRlc10uCiAgc3RhdGljIHNldCBnbG9iYWwoSHR0cE92ZXJyaWRlcyBvdmVycmlkZXMpIHsKICAgIF9nbG9iYWwgPSBvdmVycmlkZXM7CiAgfQoKICAvLy8gUnVucyBbYm9keV0gaW4gYSBmcmVzaCBbWm9uZV0gdXNpbmcgdGhlIHByb3ZpZGVkIG92ZXJyaWRlcy4KICBzdGF0aWMgUiBydW5ab25lZDxSPihSIGJvZHkoKSwKICAgICAge0h0dHBDbGllbnQgRnVuY3Rpb24oU2VjdXJpdHlDb250ZXh0KSBjcmVhdGVIdHRwQ2xpZW50LAogICAgICBTdHJpbmcgRnVuY3Rpb24oVXJpIHVyaSwgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCkKICAgICAgICAgIGZpbmRQcm94eUZyb21FbnZpcm9ubWVudCwKICAgICAgWm9uZVNwZWNpZmljYXRpb24gem9uZVNwZWNpZmljYXRpb24sCiAgICAgIEZ1bmN0aW9uIG9uRXJyb3J9KSB7CiAgICBIdHRwT3ZlcnJpZGVzIG92ZXJyaWRlcyA9CiAgICAgICAgbmV3IF9IdHRwT3ZlcnJpZGVzU2NvcGUoY3JlYXRlSHR0cENsaWVudCwgZmluZFByb3h5RnJvbUVudmlyb25tZW50KTsKICAgIHJldHVybiBfYXN5bmNSdW5ab25lZDxSPihib2R5LAogICAgICAgIHpvbmVWYWx1ZXM6IHtfaHR0cE92ZXJyaWRlc1Rva2VuOiBvdmVycmlkZXN9LAogICAgICAgIHpvbmVTcGVjaWZpY2F0aW9uOiB6b25lU3BlY2lmaWNhdGlvbiwKICAgICAgICBvbkVycm9yOiBvbkVycm9yKTsKICB9CgogIC8vLyBSdW5zIFtib2R5XSBpbiBhIGZyZXNoIFtab25lXSB1c2luZyB0aGUgb3ZlcnJpZGVzIGZvdW5kIGluIFtvdmVycmlkZXNdLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgW292ZXJyaWRlc10gc2hvdWxkIGJlIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBleHRlbmRzCiAgLy8vIFtIdHRwT3ZlcnJpZGVzXS4KICBzdGF0aWMgUiBydW5XaXRoSHR0cE92ZXJyaWRlczxSPihSIGJvZHkoKSwgSHR0cE92ZXJyaWRlcyBvdmVycmlkZXMsCiAgICAgIHtab25lU3BlY2lmaWNhdGlvbiB6b25lU3BlY2lmaWNhdGlvbiwgRnVuY3Rpb24gb25FcnJvcn0pIHsKICAgIHJldHVybiBfYXN5bmNSdW5ab25lZDxSPihib2R5LAogICAgICAgIHpvbmVWYWx1ZXM6IHtfaHR0cE92ZXJyaWRlc1Rva2VuOiBvdmVycmlkZXN9LAogICAgICAgIHpvbmVTcGVjaWZpY2F0aW9uOiB6b25lU3BlY2lmaWNhdGlvbiwKICAgICAgICBvbkVycm9yOiBvbkVycm9yKTsKICB9CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtIdHRwQ2xpZW50XSB1c2luZyB0aGUgZ2l2ZW4gW2NvbnRleHRdLgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gYG5ldyBIdHRwQ2xpZW50YC4KICBIdHRwQ2xpZW50IGNyZWF0ZUh0dHBDbGllbnQoU2VjdXJpdHlDb250ZXh0IGNvbnRleHQpIHsKICAgIHJldHVybiBuZXcgX0h0dHBDbGllbnQoY29udGV4dCk7CiAgfQoKICAvLy8gUmVzb2x2ZXMgdGhlIHByb3h5IHNlcnZlciB0byBiZSB1c2VkIGZvciBIVFRQIGNvbm5lY3Rpb25zLgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gYEh0dHBDbGllbnQuZmluZFByb3h5RnJvbUVudmlyb25tZW50YC4KICBTdHJpbmcgZmluZFByb3h5RnJvbUVudmlyb25tZW50KFVyaSB1cmwsIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQpIHsKICAgIHJldHVybiBfSHR0cENsaWVudC5fZmluZFByb3h5RnJvbUVudmlyb25tZW50KHVybCwgZW52aXJvbm1lbnQpOwogIH0KfQoKY2xhc3MgX0h0dHBPdmVycmlkZXNTY29wZSBleHRlbmRzIEh0dHBPdmVycmlkZXMgewogIGZpbmFsIEh0dHBPdmVycmlkZXMgX3ByZXZpb3VzID0gSHR0cE92ZXJyaWRlcy5jdXJyZW50OwoKICBmaW5hbCBIdHRwQ2xpZW50IEZ1bmN0aW9uKFNlY3VyaXR5Q29udGV4dCkgX2NyZWF0ZUh0dHBDbGllbnQ7CiAgZmluYWwgU3RyaW5nIEZ1bmN0aW9uKFVyaSB1cmksIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQpCiAgICAgIF9maW5kUHJveHlGcm9tRW52aXJvbm1lbnQ7CgogIF9IdHRwT3ZlcnJpZGVzU2NvcGUodGhpcy5fY3JlYXRlSHR0cENsaWVudCwgdGhpcy5fZmluZFByb3h5RnJvbUVudmlyb25tZW50KTsKCiAgQG92ZXJyaWRlCiAgSHR0cENsaWVudCBjcmVhdGVIdHRwQ2xpZW50KFNlY3VyaXR5Q29udGV4dCBjb250ZXh0KSB7CiAgICBpZiAoX2NyZWF0ZUh0dHBDbGllbnQgIT0gbnVsbCkgcmV0dXJuIF9jcmVhdGVIdHRwQ2xpZW50KGNvbnRleHQpOwogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSByZXR1cm4gX3ByZXZpb3VzLmNyZWF0ZUh0dHBDbGllbnQoY29udGV4dCk7CiAgICByZXR1cm4gc3VwZXIuY3JlYXRlSHR0cENsaWVudChjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBmaW5kUHJveHlGcm9tRW52aXJvbm1lbnQoVXJpIHVybCwgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCkgewogICAgaWYgKF9maW5kUHJveHlGcm9tRW52aXJvbm1lbnQgIT0gbnVsbCkgewogICAgICByZXR1cm4gX2ZpbmRQcm94eUZyb21FbnZpcm9ubWVudCh1cmwsIGVudmlyb25tZW50KTsKICAgIH0KICAgIGlmIChfcHJldmlvdXMgIT0gbnVsbCkgewogICAgICByZXR1cm4gX3ByZXZpb3VzLmZpbmRQcm94eUZyb21FbnZpcm9ubWVudCh1cmwsIGVudmlyb25tZW50KTsKICAgIH0KICAgIHJldHVybiBzdXBlci5maW5kUHJveHlGcm9tRW52aXJvbm1lbnQodXJsLCBlbnZpcm9ubWVudCk7CiAgfQp9CnoATk48AQ8BFAEqASEBT0lQRQQILwo3CgYEDSIMSzcMSAYIHyABJTkEATUGT1AnLxkEAUIhPkAkKxseTSM2LhsEAU4GShdGQSM2LhsEATwGTxg5JQQBQQZPLU5EBAIBMjkBQEIhAU8BDDlGRywEAQxOLToGHUMGPQQCARlkYXJ0Ol9odHRwL292ZXJyaWRlcy5kYXJ0QW9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL19odHRwL3dlYnNvY2tldC5kYXJ0wABJFC8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0Ll9odHRwOwoKLyoqCiAqIFdlYlNvY2tldCBzdGF0dXMgY29kZXMgdXNlZCB3aGVuIGNsb3NpbmcgYSBXZWJTb2NrZXQgY29ubmVjdGlvbi4KICovCmFic3RyYWN0IGNsYXNzIFdlYlNvY2tldFN0YXR1cyB7CiAgc3RhdGljIGNvbnN0IGludCBub3JtYWxDbG9zdXJlID0gMTAwMDsKICBzdGF0aWMgY29uc3QgaW50IGdvaW5nQXdheSA9IDEwMDE7CiAgc3RhdGljIGNvbnN0IGludCBwcm90b2NvbEVycm9yID0gMTAwMjsKICBzdGF0aWMgY29uc3QgaW50IHVuc3VwcG9ydGVkRGF0YSA9IDEwMDM7CiAgc3RhdGljIGNvbnN0IGludCByZXNlcnZlZDEwMDQgPSAxMDA0OwogIHN0YXRpYyBjb25zdCBpbnQgbm9TdGF0dXNSZWNlaXZlZCA9IDEwMDU7CiAgc3RhdGljIGNvbnN0IGludCBhYm5vcm1hbENsb3N1cmUgPSAxMDA2OwogIHN0YXRpYyBjb25zdCBpbnQgaW52YWxpZEZyYW1lUGF5bG9hZERhdGEgPSAxMDA3OwogIHN0YXRpYyBjb25zdCBpbnQgcG9saWN5VmlvbGF0aW9uID0gMTAwODsKICBzdGF0aWMgY29uc3QgaW50IG1lc3NhZ2VUb29CaWcgPSAxMDA5OwogIHN0YXRpYyBjb25zdCBpbnQgbWlzc2luZ01hbmRhdG9yeUV4dGVuc2lvbiA9IDEwMTA7CiAgc3RhdGljIGNvbnN0IGludCBpbnRlcm5hbFNlcnZlckVycm9yID0gMTAxMTsKICBzdGF0aWMgY29uc3QgaW50IHJlc2VydmVkMTAxNSA9IDEwMTU7CgogIEBEZXByZWNhdGVkKCJVc2Ugbm9ybWFsQ2xvc3VyZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE5PUk1BTF9DTE9TVVJFID0gbm9ybWFsQ2xvc3VyZTsKICBARGVwcmVjYXRlZCgiVXNlIGdvaW5nQXdheSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IEdPSU5HX0FXQVkgPSBnb2luZ0F3YXk7CiAgQERlcHJlY2F0ZWQoIlVzZSBwcm90b2NvbEVycm9yIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgUFJPVE9DT0xfRVJST1IgPSBwcm90b2NvbEVycm9yOwogIEBEZXByZWNhdGVkKCJVc2UgdW5zdXBwb3J0ZWREYXRhIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgVU5TVVBQT1JURURfREFUQSA9IHVuc3VwcG9ydGVkRGF0YTsKICBARGVwcmVjYXRlZCgiVXNlIHJlc2VydmVkMTAwNCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFJFU0VSVkVEXzEwMDQgPSByZXNlcnZlZDEwMDQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBub1N0YXR1c1JlY2VpdmVkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTk9fU1RBVFVTX1JFQ0VJVkVEID0gbm9TdGF0dXNSZWNlaXZlZDsKICBARGVwcmVjYXRlZCgiVXNlIGFibm9ybWFsQ2xvc3VyZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IEFCTk9STUFMX0NMT1NVUkUgPSBhYm5vcm1hbENsb3N1cmU7CiAgQERlcHJlY2F0ZWQoIlVzZSBpbnZhbGlkRnJhbWVQYXlsb2FkRGF0YSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IElOVkFMSURfRlJBTUVfUEFZTE9BRF9EQVRBID0gaW52YWxpZEZyYW1lUGF5bG9hZERhdGE7CiAgQERlcHJlY2F0ZWQoIlVzZSBwb2xpY3lWaW9sYXRpb24gaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBQT0xJQ1lfVklPTEFUSU9OID0gcG9saWN5VmlvbGF0aW9uOwogIEBEZXByZWNhdGVkKCJVc2UgbWVzc2FnZVRvb0JpZyBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE1FU1NBR0VfVE9PX0JJRyA9IG1lc3NhZ2VUb29CaWc7CiAgQERlcHJlY2F0ZWQoIlVzZSBtaXNzaW5nTWFuZGF0b3J5RXh0ZW5zaW9uIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTUlTU0lOR19NQU5EQVRPUllfRVhURU5TSU9OID0gbWlzc2luZ01hbmRhdG9yeUV4dGVuc2lvbjsKICBARGVwcmVjYXRlZCgiVXNlIGludGVybmFsU2VydmVyRXJyb3IgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBJTlRFUk5BTF9TRVJWRVJfRVJST1IgPSBpbnRlcm5hbFNlcnZlckVycm9yOwogIEBEZXByZWNhdGVkKCJVc2UgcmVzZXJ2ZWQxMDE1IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgUkVTRVJWRURfMTAxNSA9IHJlc2VydmVkMTAxNTsKfQoKLy8vIE9wdGlvbnMgY29udHJvbGxpbmcgY29tcHJlc3Npb24gaW4gYSBbV2ViU29ja2V0XS4KLy8vCi8vLyBBIFtDb21wcmVzc2lvbk9wdGlvbnNdIGluc3RhbmNlIGNhbiBiZSBwYXNzZWQgdG8gW1dlYlNvY2tldC5jb25uZWN0XSwgb3IKLy8vIHVzZWQgaW4gb3RoZXIgc2ltaWxhciBwbGFjZXMgd2hlcmUgW1dlYlNvY2tldF0gY29tcHJlc3Npb24gaXMgY29uZmlndXJlZC4KLy8vCi8vLyBJbiBtb3N0IGNhc2VzIHRoZSBkZWZhdWx0IFtjb21wcmVzc2lvbkRlZmF1bHRdIGlzIHN1ZmZpY2llbnQsIGJ1dCBpbiBzb21lCi8vLyBzaXR1YXRpb25zLCBpdCBtaWdodCBiZSBkZXNpcmFibGUgdG8gdXNlIGRpZmZlcmVudCBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzLAovLy8gZm9yIGV4YW1wbGUgdG8gcHJlc2VydmUgbWVtb3J5IG9uIHNtYWxsIGRldmljZXMuCmNsYXNzIENvbXByZXNzaW9uT3B0aW9ucyB7CiAgLy8vIERlZmF1bHQgW1dlYlNvY2tldF0gY29tcHJlc3Npb24gY29uZmlndXJhdGlvbi4KICAvLy8KICAvLy8gRW5hYmxlcyBjb21wcmVzc2lvbiB3aXRoIGRlZmF1bHQgd2luZG93IHNpemVzIGFuZCBubyByZXVzZS4gVGhpcyBpcyB0aGUKICAvLy8gZGVmYXVsdCBvcHRpb25zIHVzZWQgYnkgW1dlYlNvY2tldC5jb25uZWN0XSBpZiBubyBbQ29tcHJlc3Npb25PcHRpb25zXSBpcwogIC8vLyBzdXBwbGllZC4KICAvLy8KICAvLy8gKiBgY2xpZW50Tm9Db250ZXh0VGFrZW92ZXJgOiBmYWxzZQogIC8vLyAqIGBzZXJ2ZXJOb0NvbnRleHRUYWtlb3ZlcmA6IGZhbHNlCiAgLy8vICogYGNsaWVudE1heFdpbmRvd0JpdHNgOiBudWxsIChkZWZhdWx0IG1heGltYWwgd2luZG93IHNpemUgb2YgMTUgYml0cykKICAvLy8gKiBgc2VydmVyTWF4V2luZG93Qml0c2A6IG51bGwgKGRlZmF1bHQgbWF4aW1hbCB3aW5kb3cgc2l6ZSBvZiAxNSBiaXRzKQogIHN0YXRpYyBjb25zdCBDb21wcmVzc2lvbk9wdGlvbnMgY29tcHJlc3Npb25EZWZhdWx0ID0KICAgICAgY29uc3QgQ29tcHJlc3Npb25PcHRpb25zKCk7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb21wcmVzc2lvbkRlZmF1bHQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IENvbXByZXNzaW9uT3B0aW9ucyBERUZBVUxUID0gY29tcHJlc3Npb25EZWZhdWx0OwoKICAvLy8gTm8tY29tcHJlc3Npb24gY29uZmlndXJhdGlvbi4KICAvLy8KICAvLy8gRGlzYWJsZXMgY29tcHJlc3Npb24gd2hlbiB1c2VkIGFzIGNvbXByZXNzaW9uIGNvbmZpZ3VyYXRpb24gZm9yIGEKICAvLy8gW1dlYlNvY2tldF0uCiAgc3RhdGljIGNvbnN0IENvbXByZXNzaW9uT3B0aW9ucyBjb21wcmVzc2lvbk9mZiA9CiAgICAgIGNvbnN0IENvbXByZXNzaW9uT3B0aW9ucyhlbmFibGVkOiBmYWxzZSk7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb21wcmVzc2lvbk9mZiBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQ29tcHJlc3Npb25PcHRpb25zIE9GRiA9IGNvbXByZXNzaW9uT2ZmOwoKICAvLy8gV2hldGhlciB0aGUgY2xpZW50IHdpbGwgcmV1c2UgaXRzIGNvbXByZXNzaW9uIGluc3RhbmNlcy4KICBmaW5hbCBib29sIGNsaWVudE5vQ29udGV4dFRha2VvdmVyOwoKICAvLy8gV2hldGhlciB0aGUgc2VydmVyIHdpbGwgcmV1c2UgaXRzIGNvbXByZXNzaW9uIGluc3RhbmNlcy4KICBmaW5hbCBib29sIHNlcnZlck5vQ29udGV4dFRha2VvdmVyOwoKICAvLy8gVGhlIG1heGltYWwgd2luZG93IHNpemUgYml0IGNvdW50IHJlcXVlc3RlZCBieSB0aGUgY2xpZW50LgogIC8vLwogIC8vLyBUaGUgd2luZG93cyBzaXplIGZvciB0aGUgY29tcHJlc3Npb24gaXMgYWx3YXlzIGEgcG93ZXIgb2YgdHdvLCBzbyB0aGUKICAvLy8gbnVtYmVyIG9mIGJpdHMgcHJlY2lzZWx5IGRldGVybWluZXMgdGhlIHdpbmRvdyBzaXplLgogIC8vLwogIC8vLyBJZiBzZXQgdG8gYG51bGxgLCB0aGUgY2xpZW50IGhhcyBubyBwcmVmZXJlbmNlLCBhbmQgdGhlIGNvbXByZXNzaW9uIGNhbgogIC8vLyB1c2UgdXAgdG8gaXRzIGRlZmF1bHQgbWF4aW11bSB3aW5kb3cgc2l6ZSBvZiAxNSBiaXRzIGRlcGVuZGluZyBvbiB0aGUKICAvLy8gc2VydmVyJ3MgcHJlZmVyZW5jZS4KICBmaW5hbCBpbnQgY2xpZW50TWF4V2luZG93Qml0czsKCiAgLy8vIFRoZSBtYXhpbWFsIHdpbmRvdyBzaXplIGJpdCBjb3VudCByZXF1ZXN0ZWQgYnkgdGhlIHNlcnZlci4KICAvLy8KICAvLy8gVGhlIHdpbmRvd3Mgc2l6ZSBmb3IgdGhlIGNvbXByZXNzaW9uIGlzIGFsd2F5cyBhIHBvd2VyIG9mIHR3bywgc28gdGhlCiAgLy8vIG51bWJlciBvZiBiaXRzIHByZWNpc2VseSBkZXRlcm1pbmVzIHRoZSB3aW5kb3cgc2l6ZS4KICAvLy8KICAvLy8gSWYgc2V0IHRvIGBudWxsYCwgdGhlIHNlcnZlciBoYXMgbm8gcHJlZmVyZW5jZSwgYW5kIHRoZSBjb21wcmVzc2lvbiBjYW4KICAvLy8gdXNlIHVwIHRvIGl0cyBkZWZhdWx0IG1heGltdW0gd2luZG93IHNpemUgb2YgMTUgYml0cyBkZXBlbmRpbmcgb24gdGhlCiAgLy8vIGNsaWVudCdzIHByZWZlcmVuY2UuCiAgZmluYWwgaW50IHNlcnZlck1heFdpbmRvd0JpdHM7CgogIC8vLyBXaGV0aGVyIFdlYlNvY2tldCBjb21wcmVzc2lvbiBpcyBlbmFibGVkLgogIC8vLwogIC8vLyBJZiBub3QgZW5hYmxlZCwgdGhlIHJlbWFpbmluZyBmaWVsZHMgaGF2ZSBubyBlZmZlY3QsIGFuZCB0aGUKICAvLy8gW2NvbXByZXNzaW9uT2ZmXSBpbnN0YW5jZSBjYW4sIGFuZCBzaG91bGQsIGJlIHJldXNlZCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEKICAvLy8gbmV3IGluc3RhbmNlIHdpdGggY29tcHJlc3Npb24gZGlzYWJsZWQuCiAgZmluYWwgYm9vbCBlbmFibGVkOwoKICBjb25zdCBDb21wcmVzc2lvbk9wdGlvbnMoCiAgICAgIHt0aGlzLmNsaWVudE5vQ29udGV4dFRha2VvdmVyID0gZmFsc2UsCiAgICAgIHRoaXMuc2VydmVyTm9Db250ZXh0VGFrZW92ZXIgPSBmYWxzZSwKICAgICAgdGhpcy5jbGllbnRNYXhXaW5kb3dCaXRzLAogICAgICB0aGlzLnNlcnZlck1heFdpbmRvd0JpdHMsCiAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWV9KTsKCiAgLy8vIFBhcnNlcyBsaXN0IG9mIHJlcXVlc3RlZCBzZXJ2ZXIgaGVhZGVycyB0byByZXR1cm4gc2VydmVyIGNvbXByZXNzaW9uCiAgLy8vIHJlc3BvbnNlIGhlYWRlcnMuCiAgLy8vCiAgLy8vIFVzZXMgW3NlcnZlck1heFdpbmRvd0JpdHNdIHZhbHVlIGlmIHNldCwgb3RoZXJ3aXNlIHdpbGwgYXR0ZW1wdCB0byB1c2UKICAvLy8gdmFsdWUgZnJvbSBoZWFkZXJzLiBEZWZhdWx0cyB0byBbV2ViU29ja2V0LkRFRkFVTFRfV0lORE9XX0JJVFNdLiBSZXR1cm5zIGEKICAvLy8gW19Db21wcmVzc2lvbk1heFdpbmRvd0JpdHNdIG9iamVjdCB3aGljaCBjb250YWlucyB0aGUgcmVzcG9uc2UgaGVhZGVycyBhbmQKICAvLy8gbmVnb3RpYXRlZCBtYXggd2luZG93IGJpdHMuCiAgX0NvbXByZXNzaW9uTWF4V2luZG93Qml0cyBfY3JlYXRlU2VydmVyUmVzcG9uc2VIZWFkZXIoSGVhZGVyVmFsdWUgcmVxdWVzdGVkKSB7CiAgICB2YXIgaW5mbyA9IG5ldyBfQ29tcHJlc3Npb25NYXhXaW5kb3dCaXRzKCk7CgogICAgaW50IG13YjsKICAgIFN0cmluZyBwYXJ0OwogICAgaWYgKHJlcXVlc3RlZD8ucGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgIHBhcnQgPSByZXF1ZXN0ZWQucGFyYW1ldGVyc1tfc2VydmVyTWF4V2luZG93Qml0c107CiAgICB9CiAgICBpZiAocGFydCAhPSBudWxsKSB7CiAgICAgIGlmIChwYXJ0Lmxlbmd0aCA+PSAyICYmIHBhcnQuc3RhcnRzV2l0aCgnMCcpKSB7CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIklsbGVnYWwgMCBwYWRkaW5nIG9uIHZhbHVlLiIpOwogICAgICB9IGVsc2UgewogICAgICAgIG13YiA9IHNlcnZlck1heFdpbmRvd0JpdHMgPT0gbnVsbAogICAgICAgICAgICA/IGludC50cnlQYXJzZShwYXJ0KSA/PyBfV2ViU29ja2V0SW1wbC5ERUZBVUxUX1dJTkRPV19CSVRTCiAgICAgICAgICAgIDogc2VydmVyTWF4V2luZG93Qml0czsKICAgICAgICBpbmZvLmhlYWRlclZhbHVlID0gIjsgc2VydmVyX21heF93aW5kb3dfYml0cz0ke213Yn0iOwogICAgICAgIGluZm8ubWF4V2luZG93Qml0cyA9IG13YjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaW5mby5oZWFkZXJWYWx1ZSA9ICIiOwogICAgICBpbmZvLm1heFdpbmRvd0JpdHMgPSBfV2ViU29ja2V0SW1wbC5ERUZBVUxUX1dJTkRPV19CSVRTOwogICAgfQogICAgcmV0dXJuIGluZm87CiAgfQoKICAvLy8gUmV0dXJucyBkZWZhdWx0IHZhbHVlcyBmb3IgY2xpZW50IGNvbXByZXNzaW9uIHJlcXVlc3QgaGVhZGVycy4KICBTdHJpbmcgX2NyZWF0ZUNsaWVudFJlcXVlc3RIZWFkZXIoSGVhZGVyVmFsdWUgcmVxdWVzdGVkLCBpbnQgc2l6ZSkgewogICAgdmFyIGluZm8gPSAiIjsKCiAgICAvLyBJZiByZXNwb25kaW5nIHRvIGEgdmFsaWQgcmVxdWVzdCwgc3BlY2lmeSBzaXplCiAgICBpZiAocmVxdWVzdGVkICE9IG51bGwpIHsKICAgICAgaW5mbyA9ICI7IGNsaWVudF9tYXhfd2luZG93X2JpdHM9JHNpemUiOwogICAgfSBlbHNlIHsKICAgICAgLy8gQ2xpZW50IHJlcXVlc3QuIFNwZWNpZnkgZGVmYXVsdAogICAgICBpZiAoY2xpZW50TWF4V2luZG93Qml0cyA9PSBudWxsKSB7CiAgICAgICAgaW5mbyA9ICI7IGNsaWVudF9tYXhfd2luZG93X2JpdHMiOwogICAgICB9IGVsc2UgewogICAgICAgIGluZm8gPSAiOyBjbGllbnRfbWF4X3dpbmRvd19iaXRzPSRjbGllbnRNYXhXaW5kb3dCaXRzIjsKICAgICAgfQogICAgICBpZiAoc2VydmVyTWF4V2luZG93Qml0cyAhPSBudWxsKSB7CiAgICAgICAgaW5mbyArPSAiOyBzZXJ2ZXJfbWF4X3dpbmRvd19iaXRzPSRzZXJ2ZXJNYXhXaW5kb3dCaXRzIjsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBpbmZvOwogIH0KCiAgLy8vIENyZWF0ZSBhIENvbXByZXNzaW9uIEhlYWRlci4KICAvLy8KICAvLy8gSWYgW3JlcXVlc3RlZF0gaXMgbnVsbCBvciBjb250YWlucyBjbGllbnQgcmVxdWVzdCBoZWFkZXJzLCByZXR1cm5zIENsaWVudAogIC8vLyBjb21wcmVzc2lvbiByZXF1ZXN0IGhlYWRlcnMgd2l0aCBkZWZhdWx0IHNldHRpbmdzIGZvcgogIC8vLyBgY2xpZW50X21heF93aW5kb3dfYml0c2AgaGVhZGVyIHZhbHVlLiAgSWYgW3JlcXVlc3RlZF0gY29udGFpbnMgc2VydmVyCiAgLy8vIHJlc3BvbnNlIGhlYWRlcnMgdGhpcyBtZXRob2QgcmV0dXJucyBhIFNlcnZlciBjb21wcmVzc2lvbiByZXNwb25zZSBoZWFkZXIKICAvLy8gbmVnb3RpYXRpbmcgdGhlIG1heCB3aW5kb3cgYml0cyBmb3IgYm90aCBjbGllbnQgYW5kIHNlcnZlciBhcyByZXF1ZXN0ZWQKICAvLy8gYHNlcnZlcl9tYXhfd2luZG93X2JpdHNgIHZhbHVlLiAgVGhpcyBtZXRob2QgcmV0dXJucyBhCiAgLy8vIFtfQ29tcHJlc3Npb25NYXhXaW5kb3dCaXRzXSBvYmplY3Qgd2l0aCB0aGUgcmVzcG9uc2UgaGVhZGVycyBhbmQKICAvLy8gbmVnb3RpYXRlZCBgbWF4V2luZG93Qml0c2AgdmFsdWUuCiAgX0NvbXByZXNzaW9uTWF4V2luZG93Qml0cyBfY3JlYXRlSGVhZGVyKFtIZWFkZXJWYWx1ZSByZXF1ZXN0ZWRdKSB7CiAgICB2YXIgaW5mbyA9IG5ldyBfQ29tcHJlc3Npb25NYXhXaW5kb3dCaXRzKCIiLCAwKTsKICAgIGlmICghZW5hYmxlZCkgewogICAgICByZXR1cm4gaW5mbzsKICAgIH0KCiAgICBpbmZvLmhlYWRlclZhbHVlID0gX1dlYlNvY2tldEltcGwuUEVSX01FU1NBR0VfREVGTEFURTsKCiAgICBpZiAoY2xpZW50Tm9Db250ZXh0VGFrZW92ZXIgJiYKICAgICAgICAocmVxdWVzdGVkID09IG51bGwgfHwKICAgICAgICAgICAgKHJlcXVlc3RlZCAhPSBudWxsICYmCiAgICAgICAgICAgICAgICByZXF1ZXN0ZWQucGFyYW1ldGVycy5jb250YWluc0tleShfY2xpZW50Tm9Db250ZXh0VGFrZW92ZXIpKSkpIHsKICAgICAgaW5mby5oZWFkZXJWYWx1ZSArPSAiOyBjbGllbnRfbm9fY29udGV4dF90YWtlb3ZlciI7CiAgICB9CgogICAgaWYgKHNlcnZlck5vQ29udGV4dFRha2VvdmVyICYmCiAgICAgICAgKHJlcXVlc3RlZCA9PSBudWxsIHx8CiAgICAgICAgICAgIChyZXF1ZXN0ZWQgIT0gbnVsbCAmJgogICAgICAgICAgICAgICAgcmVxdWVzdGVkLnBhcmFtZXRlcnMuY29udGFpbnNLZXkoX3NlcnZlck5vQ29udGV4dFRha2VvdmVyKSkpKSB7CiAgICAgIGluZm8uaGVhZGVyVmFsdWUgKz0gIjsgc2VydmVyX25vX2NvbnRleHRfdGFrZW92ZXIiOwogICAgfQoKICAgIHZhciBoZWFkZXJMaXN0ID0gX2NyZWF0ZVNlcnZlclJlc3BvbnNlSGVhZGVyKHJlcXVlc3RlZCk7CiAgICBpbmZvLmhlYWRlclZhbHVlICs9IGhlYWRlckxpc3QuaGVhZGVyVmFsdWU7CiAgICBpbmZvLm1heFdpbmRvd0JpdHMgPSBoZWFkZXJMaXN0Lm1heFdpbmRvd0JpdHM7CgogICAgaW5mby5oZWFkZXJWYWx1ZSArPQogICAgICAgIF9jcmVhdGVDbGllbnRSZXF1ZXN0SGVhZGVyKHJlcXVlc3RlZCwgaW5mby5tYXhXaW5kb3dCaXRzKTsKCiAgICByZXR1cm4gaW5mbzsKICB9Cn0KCi8qKgogKiBUaGUgW1dlYlNvY2tldFRyYW5zZm9ybWVyXSBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byB1cGdyYWRlIGEKICogW0h0dHBSZXF1ZXN0XSB0byBhIFtXZWJTb2NrZXRdIGNvbm5lY3Rpb24uIEl0IHN1cHBvcnRzIGJvdGgKICogdXBncmFkaW5nIGEgc2luZ2xlIFtIdHRwUmVxdWVzdF0gYW5kIHVwZ3JhZGluZyBhIHN0cmVhbSBvZgogKiBbSHR0cFJlcXVlc3Rdcy4KICoKICogVG8gdXBncmFkZSBhIHNpbmdsZSBbSHR0cFJlcXVlc3RdIHVzZSB0aGUgc3RhdGljIFt1cGdyYWRlXSBtZXRob2QuCiAqCiAqICAgICBIdHRwU2VydmVyIHNlcnZlcjsKICogICAgIHNlcnZlci5saXN0ZW4oKHJlcXVlc3QpIHsKICogICAgICAgaWYgKC4uLikgewogKiAgICAgICAgIFdlYlNvY2tldFRyYW5zZm9ybWVyLnVwZ3JhZGUocmVxdWVzdCkudGhlbigod2Vic29ja2V0KSB7CiAqICAgICAgICAgICAuLi4KICogICAgICAgICB9KTsKICogICAgICAgfSBlbHNlIHsKICogICAgICAgICAvLyBEbyBub3JtYWwgSFRUUCByZXF1ZXN0IHByb2Nlc3NpbmcuCiAqICAgICAgIH0KICogICAgIH0pOwogKgogKiBUbyB0cmFuc2Zvcm0gYSBzdHJlYW0gb2YgW0h0dHBSZXF1ZXN0XSBldmVudHMgYXMgaXQgaW1wbGVtZW50cyBhCiAqIHN0cmVhbSB0cmFuc2Zvcm1lciB0aGF0IHRyYW5zZm9ybXMgYSBzdHJlYW0gb2YgSHR0cFJlcXVlc3QgaW50byBhCiAqIHN0cmVhbSBvZiBXZWJTb2NrZXRzIGJ5IHVwZ3JhZGluZyBlYWNoIEh0dHBSZXF1ZXN0IGZyb20gdGhlIEhUVFAgb3IKICogSFRUUFMgc2VydmVyLCB0byB0aGUgV2ViU29ja2V0IHByb3RvY29sLgogKgogKiAgICAgc2VydmVyLnRyYW5zZm9ybShuZXcgV2ViU29ja2V0VHJhbnNmb3JtZXIoKSkubGlzdGVuKCh3ZWJTb2NrZXQpID0+IC4uLik7CiAqCiAqIFRoaXMgdHJhbnNmb3JtZXIgc3RyaXZlcyB0byBpbXBsZW1lbnQgV2ViU29ja2V0cyBhcyBzcGVjaWZpZWQgYnkgUkZDNjQ1NS4KICovCmFic3RyYWN0IGNsYXNzIFdlYlNvY2tldFRyYW5zZm9ybWVyCiAgICBpbXBsZW1lbnRzIFN0cmVhbVRyYW5zZm9ybWVyPEh0dHBSZXF1ZXN0LCBXZWJTb2NrZXQ+IHsKICAvKioKICAgKiBDcmVhdGUgYSBuZXcgW1dlYlNvY2tldFRyYW5zZm9ybWVyXS4KICAgKgogICAqIElmIFtwcm90b2NvbFNlbGVjdG9yXSBpcyBwcm92aWRlZCwgW3Byb3RvY29sU2VsZWN0b3JdIHdpbGwgYmUgY2FsbGVkIHRvCiAgICogc2VsZWN0IHdoYXQgcHJvdG9jb2wgdG8gdXNlLCBpZiBhbnkgd2VyZSBwcm92aWRlZCBieSB0aGUgY2xpZW50LgogICAqIFtwcm90b2NvbFNlbGVjdG9yXSBpcyBzaG91bGQgcmV0dXJuIGVpdGhlciBhIFtTdHJpbmddIG9yIGEgW0Z1dHVyZV0KICAgKiBjb21wbGV0aW5nIHdpdGggYSBbU3RyaW5nXS4gVGhlIFtTdHJpbmddIG11c3QgZXhpc3QgaW4gdGhlIGxpc3Qgb2YKICAgKiBwcm90b2NvbHMuCiAgICoKICAgKiBJZiBbY29tcHJlc3Npb25dIGlzIHByb3ZpZGVkLCB0aGUgW1dlYlNvY2tldF0gY3JlYXRlZCB3aWxsIGJlIGNvbmZpZ3VyZWQKICAgKiB0byBuZWdvdGlhdGUgd2l0aCB0aGUgc3BlY2lmaWVkIFtDb21wcmVzc2lvbk9wdGlvbnNdLiBJZiBub25lIGlzIHNwZWNpZmllZAogICAqIHRoZW4gdGhlIFtXZWJTb2NrZXRdIHdpbGwgYmUgY3JlYXRlZCB3aXRoIHRoZSBkZWZhdWx0IFtDb21wcmVzc2lvbk9wdGlvbnNdLgogICAqLwogIGZhY3RvcnkgV2ViU29ja2V0VHJhbnNmb3JtZXIoCiAgICAgIHsvKlN0cmluZ3xGdXR1cmU8U3RyaW5nPiovIHByb3RvY29sU2VsZWN0b3IoTGlzdDxTdHJpbmc+IHByb3RvY29scyksCiAgICAgIENvbXByZXNzaW9uT3B0aW9ucyBjb21wcmVzc2lvbjogQ29tcHJlc3Npb25PcHRpb25zLmNvbXByZXNzaW9uRGVmYXVsdH0pIHsKICAgIHJldHVybiBuZXcgX1dlYlNvY2tldFRyYW5zZm9ybWVySW1wbChwcm90b2NvbFNlbGVjdG9yLCBjb21wcmVzc2lvbik7CiAgfQoKICAvKioKICAgKiBVcGdyYWRlcyBhIFtIdHRwUmVxdWVzdF0gdG8gYSBbV2ViU29ja2V0XSBjb25uZWN0aW9uLiBJZiB0aGUKICAgKiByZXF1ZXN0IGlzIG5vdCBhIHZhbGlkIFdlYlNvY2tldCB1cGdyYWRlIHJlcXVlc3QgYW4gSFRUUCByZXNwb25zZQogICAqIHdpdGggc3RhdHVzIGNvZGUgNTAwIHdpbGwgYmUgcmV0dXJuZWQuIE90aGVyd2lzZSB0aGUgcmV0dXJuZWQKICAgKiBmdXR1cmUgd2lsbCBjb21wbGV0ZSB3aXRoIHRoZSBbV2ViU29ja2V0XSB3aGVuIHRoZSB1cGdyYWRlIHByb2Nlc3MKICAgKiBpcyBjb21wbGV0ZS4KICAgKgogICAqIElmIFtwcm90b2NvbFNlbGVjdG9yXSBpcyBwcm92aWRlZCwgW3Byb3RvY29sU2VsZWN0b3JdIHdpbGwgYmUgY2FsbGVkIHRvCiAgICogc2VsZWN0IHdoYXQgcHJvdG9jb2wgdG8gdXNlLCBpZiBhbnkgd2VyZSBwcm92aWRlZCBieSB0aGUgY2xpZW50LgogICAqIFtwcm90b2NvbFNlbGVjdG9yXSBpcyBzaG91bGQgcmV0dXJuIGVpdGhlciBhIFtTdHJpbmddIG9yIGEgW0Z1dHVyZV0KICAgKiBjb21wbGV0aW5nIHdpdGggYSBbU3RyaW5nXS4gVGhlIFtTdHJpbmddIG11c3QgZXhpc3QgaW4gdGhlIGxpc3Qgb2YKICAgKiBwcm90b2NvbHMuCiAgICoKICAgKiBJZiBbY29tcHJlc3Npb25dIGlzIHByb3ZpZGVkLCB0aGUgW1dlYlNvY2tldF0gY3JlYXRlZCB3aWxsIGJlIGNvbmZpZ3VyZWQKICAgKiB0byBuZWdvdGlhdGUgd2l0aCB0aGUgc3BlY2lmaWVkIFtDb21wcmVzc2lvbk9wdGlvbnNdLiBJZiBub25lIGlzIHNwZWNpZmllZAogICAqIHRoZW4gdGhlIFtXZWJTb2NrZXRdIHdpbGwgYmUgY3JlYXRlZCB3aXRoIHRoZSBkZWZhdWx0IFtDb21wcmVzc2lvbk9wdGlvbnNdLgogICAqLwogIHN0YXRpYyBGdXR1cmU8V2ViU29ja2V0PiB1cGdyYWRlKEh0dHBSZXF1ZXN0IHJlcXVlc3QsCiAgICAgIHtwcm90b2NvbFNlbGVjdG9yKExpc3Q8U3RyaW5nPiBwcm90b2NvbHMpLAogICAgICBDb21wcmVzc2lvbk9wdGlvbnMgY29tcHJlc3Npb246IENvbXByZXNzaW9uT3B0aW9ucy5jb21wcmVzc2lvbkRlZmF1bHR9KSB7CiAgICByZXR1cm4gX1dlYlNvY2tldFRyYW5zZm9ybWVySW1wbC5fdXBncmFkZSgKICAgICAgICByZXF1ZXN0LCBwcm90b2NvbFNlbGVjdG9yLCBjb21wcmVzc2lvbik7CiAgfQoKICAvKioKICAgKiBDaGVja3Mgd2hldGhlciB0aGUgcmVxdWVzdCBpcyBhIHZhbGlkIFdlYlNvY2tldCB1cGdyYWRlIHJlcXVlc3QuCiAgICovCiAgc3RhdGljIGJvb2wgaXNVcGdyYWRlUmVxdWVzdChIdHRwUmVxdWVzdCByZXF1ZXN0KSB7CiAgICByZXR1cm4gX1dlYlNvY2tldFRyYW5zZm9ybWVySW1wbC5faXNVcGdyYWRlUmVxdWVzdChyZXF1ZXN0KTsKICB9Cn0KCi8qKgogKiBBIHR3by13YXkgSFRUUCBjb21tdW5pY2F0aW9uIG9iamVjdCBmb3IgY2xpZW50IG9yIHNlcnZlciBhcHBsaWNhdGlvbnMuCiAqCiAqIFRoZSBzdHJlYW0gZXhwb3NlcyB0aGUgbWVzc2FnZXMgcmVjZWl2ZWQuIEEgdGV4dCBtZXNzYWdlIHdpbGwgYmUgb2YgdHlwZQogKiBgU3RyaW5nYCBhbmQgYSBiaW5hcnkgbWVzc2FnZSB3aWxsIGJlIG9mIHR5cGUgYExpc3Q8aW50PmAuCiAqLwphYnN0cmFjdCBjbGFzcyBXZWJTb2NrZXQKICAgIGltcGxlbWVudHMKICAgICAgICBTdHJlYW08ZHluYW1pYyAvKlN0cmluZ3xMaXN0PGludD4qLyA+LAogICAgICAgIFN0cmVhbVNpbms8ZHluYW1pYyAvKlN0cmluZ3xMaXN0PGludD4qLyA+IHsKICAvKioKICAgKiBQb3NzaWJsZSBzdGF0ZXMgb2YgdGhlIGNvbm5lY3Rpb24uCiAgICovCiAgc3RhdGljIGNvbnN0IGludCBjb25uZWN0aW5nID0gMDsKICBzdGF0aWMgY29uc3QgaW50IG9wZW4gPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgY2xvc2luZyA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBjbG9zZWQgPSAzOwoKICBARGVwcmVjYXRlZCgiVXNlIGNvbm5lY3RpbmcgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBDT05ORUNUSU5HID0gY29ubmVjdGluZzsKICBARGVwcmVjYXRlZCgiVXNlIG9wZW4gaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBPUEVOID0gb3BlbjsKICBARGVwcmVjYXRlZCgiVXNlIGNsb3NpbmcgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBDTE9TSU5HID0gY2xvc2luZzsKICBARGVwcmVjYXRlZCgiVXNlIGNsb3NlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IENMT1NFRCA9IGNsb3NlZDsKCiAgLyoqCiAgICogU2V0IGFuZCBnZXQgdGhlIGludGVydmFsIGZvciBzZW5kaW5nIHBpbmcgc2lnbmFscy4gSWYgYSBwaW5nIG1lc3NhZ2UgaXMgbm90CiAgICogYW5zd2VyZWQgYnkgYSBwb25nIG1lc3NhZ2UgZnJvbSB0aGUgcGVlciwgdGhlIGBXZWJTb2NrZXRgIGlzIGFzc3VtZWQKICAgKiBkaXNjb25uZWN0ZWQgYW5kIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZCB3aXRoIGEKICAgKiBbV2ViU29ja2V0U3RhdHVzLmdvaW5nQXdheV0gY2xvc2UgY29kZS4gV2hlbiBhIHBpbmcgc2lnbmFsIGlzIHNlbnQsIHRoZQogICAqIHBvbmcgbWVzc2FnZSBtdXN0IGJlIHJlY2VpdmVkIHdpdGhpbiBbcGluZ0ludGVydmFsXS4KICAgKgogICAqIFRoZXJlIGFyZSBuZXZlciB0d28gb3V0c3RhbmRpbmcgcGluZ3MgYXQgYW55IGdpdmVuIHRpbWUsIGFuZCB0aGUgbmV4dCBwaW5nCiAgICogdGltZXIgc3RhcnRzIHdoZW4gdGhlIHBvbmcgaXMgcmVjZWl2ZWQuCiAgICoKICAgKiBTZXQgdGhlIFtwaW5nSW50ZXJ2YWxdIHRvIGBudWxsYCB0byBkaXNhYmxlIHNlbmRpbmcgcGluZyBtZXNzYWdlcy4KICAgKgogICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBudWxsYC4KICAgKi8KICBEdXJhdGlvbiBwaW5nSW50ZXJ2YWw7CgogIC8qKgogICAqIENyZWF0ZSBhIG5ldyBXZWJTb2NrZXQgY29ubmVjdGlvbi4gVGhlIFVSTCBzdXBwbGllZCBpbiBbdXJsXQogICAqIG11c3QgdXNlIHRoZSBzY2hlbWUgYHdzYCBvciBgd3NzYC4KICAgKgogICAqIFRoZSBbcHJvdG9jb2xzXSBhcmd1bWVudCBpcyBzcGVjaWZ5aW5nIHRoZSBzdWJwcm90b2NvbHMgdGhlCiAgICogY2xpZW50IGlzIHdpbGxpbmcgdG8gc3BlYWsuCiAgICoKICAgKiBUaGUgW2hlYWRlcnNdIGFyZ3VtZW50IGlzIHNwZWNpZnlpbmcgYWRkaXRpb25hbCBIVFRQIGhlYWRlcnMgZm9yCiAgICogc2V0dGluZyB1cCB0aGUgY29ubmVjdGlvbi4gVGhpcyB3b3VsZCB0eXBpY2FsbHkgYmUgdGhlIGBPcmlnaW5gCiAgICogaGVhZGVyIGFuZCBwb3RlbnRpYWxseSBjb29raWVzLiBUaGUga2V5cyBvZiB0aGUgbWFwIGFyZSB0aGUgaGVhZGVyCiAgICogZmllbGRzIGFuZCB0aGUgdmFsdWVzIGFyZSBlaXRoZXIgU3RyaW5nIG9yIExpc3Q8U3RyaW5nPi4KICAgKgogICAqIElmIFtoZWFkZXJzXSBpcyBwcm92aWRlZCwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIGhlYWRlcnMKICAgKiB3aGljaCBhcmUgY29udHJvbGxlZCBieSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gcHJvY2Vzcy4gVGhlc2UKICAgKiBoZWFkZXJzIGFyZToKICAgKgogICAqICAgLSBgY29ubmVjdGlvbmAKICAgKiAgIC0gYHNlYy13ZWJzb2NrZXQta2V5YAogICAqICAgLSBgc2VjLXdlYnNvY2tldC1wcm90b2NvbGAKICAgKiAgIC0gYHNlYy13ZWJzb2NrZXQtdmVyc2lvbmAKICAgKiAgIC0gYHVwZ3JhZGVgCiAgICoKICAgKiBJZiBhbnkgb2YgdGhlc2UgYXJlIHBhc3NlZCBpbiB0aGUgYGhlYWRlcnNgIG1hcCB0aGV5IHdpbGwgYmUgaWdub3JlZC4KICAgKgogICAqIElmIHRoZSBgdXJsYCBjb250YWlucyB1c2VyIGluZm9ybWF0aW9uIHRoaXMgd2lsbCBiZSBwYXNzZWQgYXMgYmFzaWMKICAgKiBhdXRoZW50aWNhdGlvbiB3aGVuIHNldHRpbmcgdXAgdGhlIGNvbm5lY3Rpb24uCiAgICovCiAgc3RhdGljIEZ1dHVyZTxXZWJTb2NrZXQ+IGNvbm5lY3QoU3RyaW5nIHVybCwKICAgICAgICAgIHtJdGVyYWJsZTxTdHJpbmc+IHByb3RvY29scywKICAgICAgICAgIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGhlYWRlcnMsCiAgICAgICAgICBDb21wcmVzc2lvbk9wdGlvbnMgY29tcHJlc3Npb246CiAgICAgICAgICAgICAgQ29tcHJlc3Npb25PcHRpb25zLmNvbXByZXNzaW9uRGVmYXVsdH0pID0+CiAgICAgIF9XZWJTb2NrZXRJbXBsLmNvbm5lY3QodXJsLCBwcm90b2NvbHMsIGhlYWRlcnMsIGNvbXByZXNzaW9uOiBjb21wcmVzc2lvbik7CgogIEBEZXByZWNhdGVkKCdUaGlzIGNvbnN0cnVjdG9yIHdpbGwgYmUgcmVtb3ZlZCBpbiBEYXJ0IDIuMC4gVXNlIGBpbXBsZW1lbnRzYCcKICAgICAgJyBpbnN0ZWFkIG9mIGBleHRlbmRzYCBpZiBpbXBsZW1lbnRpbmcgdGhpcyBhYnN0cmFjdCBjbGFzcy4nKQogIFdlYlNvY2tldCgpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgV2ViU29ja2V0IGZyb20gYW4gYWxyZWFkeS11cGdyYWRlZCBzb2NrZXQuCiAgICoKICAgKiBUaGUgaW5pdGlhbCBXZWJTb2NrZXQgaGFuZHNoYWtlIG11c3QgaGF2ZSBvY2N1cnJlZCBwcmlvciB0byB0aGlzIGNhbGwuIEEKICAgKiBXZWJTb2NrZXQgY2xpZW50IGNhbiBhdXRvbWF0aWNhbGx5IHBlcmZvcm0gdGhlIGhhbmRzaGFrZSB1c2luZwogICAqIFtXZWJTb2NrZXQuY29ubmVjdF0sIHdoaWxlIGEgc2VydmVyIGNhbiBkbyBzbyB1c2luZwogICAqIFtXZWJTb2NrZXRUcmFuc2Zvcm1lci51cGdyYWRlXS4gVG8gbWFudWFsbHkgdXBncmFkZSBhbiBbSHR0cFJlcXVlc3RdLAogICAqIFtIdHRwUmVzcG9uc2UuZGV0YWNoU29ja2V0XSBtYXkgYmUgY2FsbGVkLgogICAqCiAgICogW3Byb3RvY29sXSBzaG91bGQgYmUgdGhlIHByb3RvY29sIG5lZ290aWF0ZWQgYnkgdGhpcyBoYW5kc2hha2UsIGlmIGFueS4KICAgKgogICAqIFtzZXJ2ZXJTaWRlXSBtdXN0IGJlIHBhc3NlZCBleHBsaWNpdGx5LiBJZiBpdCdzIGBmYWxzZWAsIHRoZSBXZWJTb2NrZXQgd2lsbAogICAqIGFjdCBhcyB0aGUgY2xpZW50IGFuZCBtYXNrIHRoZSBtZXNzYWdlcyBpdCBzZW5kcy4gSWYgaXQncyBgdHJ1ZWAsIGl0IHdpbGwKICAgKiBhY3QgYXMgdGhlIHNlcnZlciBhbmQgd2lsbCBub3QgbWFzayBpdHMgbWVzc2FnZXMuCiAgICoKICAgKiBJZiBbY29tcHJlc3Npb25dIGlzIHByb3ZpZGVkLCB0aGUgW1dlYlNvY2tldF0gY3JlYXRlZCB3aWxsIGJlIGNvbmZpZ3VyZWQKICAgKiB0byBuZWdvdGlhdGUgd2l0aCB0aGUgc3BlY2lmaWVkIFtDb21wcmVzc2lvbk9wdGlvbnNdLiBJZiBub25lIGlzIHNwZWNpZmllZAogICAqIHRoZW4gdGhlIFtXZWJTb2NrZXRdIHdpbGwgYmUgY3JlYXRlZCB3aXRoIHRoZSBkZWZhdWx0IFtDb21wcmVzc2lvbk9wdGlvbnNdLgogICAqLwogIGZhY3RvcnkgV2ViU29ja2V0LmZyb21VcGdyYWRlZFNvY2tldChTb2NrZXQgc29ja2V0LAogICAgICB7U3RyaW5nIHByb3RvY29sLAogICAgICBib29sIHNlcnZlclNpZGUsCiAgICAgIENvbXByZXNzaW9uT3B0aW9ucyBjb21wcmVzc2lvbjogQ29tcHJlc3Npb25PcHRpb25zLmNvbXByZXNzaW9uRGVmYXVsdH0pIHsKICAgIGlmIChzZXJ2ZXJTaWRlID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIlRoZSBzZXJ2ZXJTaWRlIGFyZ3VtZW50IG11c3QgYmUgcGFzc2VkICIKICAgICAgICAgICJleHBsaWNpdGx5IHRvIFdlYlNvY2tldC5mcm9tVXBncmFkZWRTb2NrZXQuIik7CiAgICB9CiAgICByZXR1cm4gbmV3IF9XZWJTb2NrZXRJbXBsLl9mcm9tU29ja2V0KAogICAgICAgIHNvY2tldCwgcHJvdG9jb2wsIGNvbXByZXNzaW9uLCBzZXJ2ZXJTaWRlKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGNvbm5lY3Rpb24uCiAgICovCiAgaW50IGdldCByZWFkeVN0YXRlOwoKICAvKioKICAgKiBUaGUgZXh0ZW5zaW9ucyBwcm9wZXJ0eSBpcyBpbml0aWFsbHkgdGhlIGVtcHR5IHN0cmluZy4gQWZ0ZXIgdGhlCiAgICogV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgdGhpcyBzdHJpbmcgcmVmbGVjdHMgdGhlCiAgICogZXh0ZW5zaW9ucyB1c2VkIGJ5IHRoZSBzZXJ2ZXIuCiAgICovCiAgU3RyaW5nIGdldCBleHRlbnNpb25zOwoKICAvKioKICAgKiBUaGUgcHJvdG9jb2wgcHJvcGVydHkgaXMgaW5pdGlhbGx5IHRoZSBlbXB0eSBzdHJpbmcuIEFmdGVyIHRoZQogICAqIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIHRoZSB2YWx1ZSBpcyB0aGUgc3VicHJvdG9jb2wKICAgKiBzZWxlY3RlZCBieSB0aGUgc2VydmVyLiBJZiBubyBzdWJwcm90b2NvbCBpcyBuZWdvdGlhdGVkIHRoZQogICAqIHZhbHVlIHdpbGwgcmVtYWluIFs6bnVsbDpdLgogICAqLwogIFN0cmluZyBnZXQgcHJvdG9jb2w7CgogIC8qKgogICAqIFRoZSBjbG9zZSBjb2RlIHNldCB3aGVuIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBjbG9zZWQuIElmCiAgICogdGhlcmUgaXMgbm8gY2xvc2UgY29kZSBhdmFpbGFibGUgdGhpcyBwcm9wZXJ0eSB3aWxsIGJlIFs6bnVsbDpdCiAgICovCiAgaW50IGdldCBjbG9zZUNvZGU7CgogIC8qKgogICAqIFRoZSBjbG9zZSByZWFzb24gc2V0IHdoZW4gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGNsb3NlZC4gSWYKICAgKiB0aGVyZSBpcyBubyBjbG9zZSByZWFzb24gYXZhaWxhYmxlIHRoaXMgcHJvcGVydHkgd2lsbCBiZSBbOm51bGw6XQogICAqLwogIFN0cmluZyBnZXQgY2xvc2VSZWFzb247CgogIC8qKgogICAqIENsb3NlcyB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFNldCB0aGUgb3B0aW9uYWwgW2NvZGVdIGFuZCBbcmVhc29uXQogICAqIGFyZ3VtZW50cyB0byBzZW5kIGNsb3NlIGluZm9ybWF0aW9uIHRvIHRoZSByZW1vdGUgcGVlci4gSWYgdGhleSBhcmUKICAgKiBvbWl0dGVkLCB0aGUgcGVlciB3aWxsIHNlZSBbV2ViU29ja2V0U3RhdHVzLm5vU3RhdHVzUmVjZWl2ZWRdIGNvZGUKICAgKiB3aXRoIG5vIHJlYXNvbi4KICAgKi8KICBGdXR1cmUgY2xvc2UoW2ludCBjb2RlLCBTdHJpbmcgcmVhc29uXSk7CgogIC8qKgogICAqIFNlbmRzIGRhdGEgb24gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLiBUaGUgZGF0YSBpbiBbZGF0YV0gbXVzdAogICAqIGJlIGVpdGhlciBhIGBTdHJpbmdgLCBvciBhIGBMaXN0PGludD5gIGhvbGRpbmcgYnl0ZXMuCiAgICovCiAgdm9pZCBhZGQoLypTdHJpbmd8TGlzdDxpbnQ+Ki8gZGF0YSk7CgogIC8qKgogICAqIFNlbmRzIGRhdGEgZnJvbSBhIHN0cmVhbSBvbiBXZWJTb2NrZXQgY29ubmVjdGlvbi4gRWFjaCBkYXRhIGV2ZW50IGZyb20KICAgKiBbc3RyZWFtXSB3aWxsIGJlIHNlbmQgYXMgYSBzaW5nbGUgV2ViU29ja2V0IGZyYW1lLiBUaGUgZGF0YSBmcm9tIFtzdHJlYW1dCiAgICogbXVzdCBiZSBlaXRoZXIgYFN0cmluZ2BzLCBvciBgTGlzdDxpbnQ+YHMgaG9sZGluZyBieXRlcy4KICAgKi8KICBGdXR1cmUgYWRkU3RyZWFtKFN0cmVhbSBzdHJlYW0pOwoKICAvKioKICAgKiBTZW5kcyBhIHRleHQgbWVzc2FnZSB3aXRoIHRoZSB0ZXh0IHJlcHJlc2VudGVkIGJ5IFtieXRlc10uCiAgICoKICAgKiBUaGUgW2J5dGVzXSBzaG91bGQgYmUgdmFsaWQgVVRGLTggZW5jb2RlZCBVbmljb2RlIGNoYXJhY3RlcnMuIElmIHRoZXkgYXJlCiAgICogbm90LCB0aGUgcmVjZWl2aW5nIGVuZCB3aWxsIGNsb3NlIHRoZSBjb25uZWN0aW9uLgogICAqLwogIHZvaWQgYWRkVXRmOFRleHQoTGlzdDxpbnQ+IGJ5dGVzKTsKCiAgLyoqCiAgICogR2V0cyB0aGUgdXNlciBhZ2VudCB1c2VkIGZvciBXZWJTb2NrZXQgY29ubmVjdGlvbnMuCiAgICovCiAgc3RhdGljIFN0cmluZyBnZXQgdXNlckFnZW50ID0+IF9XZWJTb2NrZXRJbXBsLnVzZXJBZ2VudDsKCiAgLyoqCiAgICogU2V0cyB0aGUgdXNlciBhZ2VudCB0byB1c2UgZm9yIFdlYlNvY2tldCBjb25uZWN0aW9ucy4KICAgKi8KICBzdGF0aWMgc2V0IHVzZXJBZ2VudChTdHJpbmcgdXNlckFnZW50KSB7CiAgICBfV2ViU29ja2V0SW1wbC51c2VyQWdlbnQgPSB1c2VyQWdlbnQ7CiAgfQp9CgpjbGFzcyBXZWJTb2NrZXRFeGNlcHRpb24gaW1wbGVtZW50cyBJT0V4Y2VwdGlvbiB7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CgogIGNvbnN0IFdlYlNvY2tldEV4Y2VwdGlvbihbdGhpcy5tZXNzYWdlID0gIiJdKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIldlYlNvY2tldEV4Y2VwdGlvbjogJG1lc3NhZ2UiOwp9CoH0AE5OPAEPARQBBEQEISklKSsoLCszKyk1LygBKzMnKyszLTcqMS46LTc1SS03KzQ3TDFAKjECATYETU4ETk81GzUGTlAQBikpTU03IjBAASQGSBMzMCw4AT8mAT8mAUEGTDsGTkwbIQFBBkw7Bk5MGyEBMAZDUS4WARwtLCAgHQFLGAZNUVEiUTABDREpOQYYNkAPKkcjPiIIDR0/BhEEAUVHEwE2HS8NKSkrD0AIKUEIBgERBAEjBlA8TVBOPUcoRTUUEwYBOwEjHiJQOgYBIx4iUDoGAT0wMwEYQwERBAIBBEA/PhMDRgMaIRREEQ8SMQsLA0RFRywDUANNBCQ7BioFTUZJSBAFTlBRBiBLUEkEAQZCR0NIEgVNRklIEAVOUFEGODFQLzEEAQZGBjZBBAIBBEoDTD4EGQ8vNAYoBiMdIB8BKCwiICUmJCQBBlFKNk06BVAtBUgFIgYZAQZCKAVBIQVGRUg+BT1FEgUWHSIhEwVLBUk0Bi8nKCo5UQFPRA8BBjoFTkQ5SzAFTQVRTzcFTlBRBjYYF1AeSDoGKzQEAQYyBhYBBkZCJAYZAQZERkEhBhcBBkRFBhUBBkZHBhoBBktJSBUGKwEGRTsGJwEGTE8+BiMBBkAFTzcGJQEGOQY7AQY7BisqBAIBMhgBMQE3AgEZZGFydDpfaHR0cC93ZWJzb2NrZXQuZGFydEVvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi92bXNlcnZpY2Uvdm1zZXJ2aWNlLmRhcnTAAGPaLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpsaWJyYXJ5IGRhcnQuX3Ztc2VydmljZTsKCmltcG9ydCAnZGFydDphc3luYyc7CmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwppbXBvcnQgJ2RhcnQ6aXNvbGF0ZSc7CmltcG9ydCAnZGFydDptYXRoJzsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwoKcGFydCAnYXNzZXQuZGFydCc7CnBhcnQgJ2NsaWVudC5kYXJ0JzsKcGFydCAnZGV2ZnMuZGFydCc7CnBhcnQgJ2NvbnN0YW50cy5kYXJ0JzsKcGFydCAncnVubmluZ19pc29sYXRlLmRhcnQnOwpwYXJ0ICdydW5uaW5nX2lzb2xhdGVzLmRhcnQnOwpwYXJ0ICdtZXNzYWdlLmRhcnQnOwpwYXJ0ICdtZXNzYWdlX3JvdXRlci5kYXJ0JzsKcGFydCAnbmFtZWRfbG9va3VwLmRhcnQnOwoKZmluYWwgUmF3UmVjZWl2ZVBvcnQgaXNvbGF0ZUNvbnRyb2xQb3J0ID0gbmV3IFJhd1JlY2VpdmVQb3J0KCk7CmZpbmFsIFJhd1JlY2VpdmVQb3J0IHNjcmlwdExvYWRQb3J0ID0gbmV3IFJhd1JlY2VpdmVQb3J0KCk7CgphYnN0cmFjdCBjbGFzcyBJc29sYXRlRW1iZWRkZXJEYXRhIHsKICB2b2lkIGNsZWFudXAoKTsKfQoKU3RyaW5nIF9tYWtlQXV0aFRva2VuKCkgewogIGZpbmFsIGtUb2tlbkJ5dGVTaXplID0gODsKICBVaW50OExpc3QgYnl0ZXMgPSBuZXcgVWludDhMaXN0KGtUb2tlbkJ5dGVTaXplKTsKICBSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbS5zZWN1cmUoKTsKICBmb3IgKGludCBpID0gMDsgaSA8IGtUb2tlbkJ5dGVTaXplOyBpKyspIHsKICAgIGJ5dGVzW2ldID0gcmFuZG9tLm5leHRJbnQoMjU2KTsKICB9CiAgcmV0dXJuIGJhc2U2NFVybC5lbmNvZGUoYnl0ZXMpOwp9CgovLyBUaGUgcmFuZG9tbHkgZ2VuZXJhdGVkIGF1dGggdG9rZW4gdXNlZCB0byBhY2Nlc3MgdGhlIFZNIHNlcnZpY2UuCmZpbmFsIFN0cmluZyBzZXJ2aWNlQXV0aFRva2VuID0gX21ha2VBdXRoVG9rZW4oKTsKCi8vIFRoaXMgaXMgZm9yIHVzZSBieSB0aGUgZW1iZWRkZXIuIEl0IGlzIGEgbWFwIGZyb20gdGhlIGlzb2xhdGVJZCB0bwovLyBhbnl0aGluZyBpbXBsZW1lbnRpbmcgSXNvbGF0ZUVtYmVkZGVyRGF0YS4gV2hlbiBhbiBpc29sYXRlIGdvZXMgYXdheSwKLy8gdGhlIGNsZWFudXAgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCBhZnRlciBiZWluZyByZW1vdmVkIGZyb20gdGhlIG1hcC4KZmluYWwgTWFwPGludCwgSXNvbGF0ZUVtYmVkZGVyRGF0YT4gaXNvbGF0ZUVtYmVkZGVyRGF0YSA9CiAgICBuZXcgTWFwPGludCwgSXNvbGF0ZUVtYmVkZGVyRGF0YT4oKTsKCi8vIFRoZXNlIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIGRlY2xhcmF0aW9ucyBpbiB2bS9qc29uX3N0cmVhbS5oLgpjb25zdCBrUGFyc2VFcnJvciA9IC0zMjcwMDsKY29uc3Qga0ludmFsaWRSZXF1ZXN0ID0gLTMyNjAwOwpjb25zdCBrTWV0aG9kTm90Rm91bmQgPSAtMzI2MDE7CmNvbnN0IGtJbnZhbGlkUGFyYW1zID0gLTMyNjAyOwpjb25zdCBrSW50ZXJuYWxFcnJvciA9IC0zMjYwMzsKCmNvbnN0IGtFeHRlbnNpb25FcnJvciA9IC0zMjAwMDsKCmNvbnN0IGtGZWF0dXJlRGlzYWJsZWQgPSAxMDA7CmNvbnN0IGtDYW5ub3RBZGRCcmVha3BvaW50ID0gMTAyOwpjb25zdCBrU3RyZWFtQWxyZWFkeVN1YnNjcmliZWQgPSAxMDM7CmNvbnN0IGtTdHJlYW1Ob3RTdWJzY3JpYmVkID0gMTA0Owpjb25zdCBrSXNvbGF0ZU11c3RCZVJ1bm5hYmxlID0gMTA1Owpjb25zdCBrSXNvbGF0ZU11c3RCZVBhdXNlZCA9IDEwNjsKY29uc3Qga0Nhbm5vdFJlc3VtZSA9IDEwNzsKY29uc3Qga0lzb2xhdGVJc1JlbG9hZGluZyA9IDEwODsKY29uc3Qga0lzb2xhdGVSZWxvYWRCYXJyZWQgPSAxMDk7CmNvbnN0IGtJc29sYXRlTXVzdEhhdmVSZWxvYWRlZCA9IDExMDsKY29uc3Qga1NlcnZpY2VBbHJlYWR5UmVnaXN0ZXJlZCA9IDExMTsKY29uc3Qga1NlcnZpY2VEaXNhcHBlYXJlZCA9IDExMjsKY29uc3Qga0V4cHJlc3Npb25Db21waWxhdGlvbkVycm9yID0gMTEzOwpjb25zdCBrSW52YWxpZFRpbWVsaW5lUmVxdWVzdCA9IDExNDsKCi8vIEV4cGVyaW1lbnRhbCAodXNlZCBpbiBwcml2YXRlIHJwY3MpLgpjb25zdCBrRmlsZVN5c3RlbUFscmVhZHlFeGlzdHMgPSAxMDAxOwpjb25zdCBrRmlsZVN5c3RlbURvZXNOb3RFeGlzdCA9IDEwMDI7CmNvbnN0IGtGaWxlRG9lc05vdEV4aXN0ID0gMTAwMzsKCnZhciBfZXJyb3JNZXNzYWdlcyA9IHsKICBrSW52YWxpZFBhcmFtczogJ0ludmFsaWQgcGFyYW1zJywKICBrSW50ZXJuYWxFcnJvcjogJ0ludGVybmFsIGVycm9yJywKICBrRmVhdHVyZURpc2FibGVkOiAnRmVhdHVyZSBpcyBkaXNhYmxlZCcsCiAga1N0cmVhbUFscmVhZHlTdWJzY3JpYmVkOiAnU3RyZWFtIGFscmVhZHkgc3Vic2NyaWJlZCcsCiAga1N0cmVhbU5vdFN1YnNjcmliZWQ6ICdTdHJlYW0gbm90IHN1YnNjcmliZWQnLAogIGtGaWxlU3lzdGVtQWxyZWFkeUV4aXN0czogJ0ZpbGUgc3lzdGVtIGFscmVhZHkgZXhpc3RzJywKICBrRmlsZVN5c3RlbURvZXNOb3RFeGlzdDogJ0ZpbGUgc3lzdGVtIGRvZXMgbm90IGV4aXN0JywKICBrRmlsZURvZXNOb3RFeGlzdDogJ0ZpbGUgZG9lcyBub3QgZXhpc3QnLAogIGtTZXJ2aWNlQWxyZWFkeVJlZ2lzdGVyZWQ6ICdTZXJ2aWNlIGFscmVhZHkgcmVnaXN0ZXJlZCcsCiAga1NlcnZpY2VEaXNhcHBlYXJlZDogJ1NlcnZpY2UgaGFzIGRpc2FwcGVhcmVkJywKICBrRXhwcmVzc2lvbkNvbXBpbGF0aW9uRXJyb3I6ICdFeHByZXNzaW9uIGNvbXBpbGF0aW9uIGVycm9yJywKICBrSW52YWxpZFRpbWVsaW5lUmVxdWVzdDogJ1RoZSB0aW1lbGluZSByZWxhdGVkIHJlcXVlc3QgY291bGQgbm90IGJlIGNvbXBsZXRlZCcKICAgICAgJ2R1ZSB0byB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uJywKfTsKClN0cmluZyBlbmNvZGVScGNFcnJvcihNZXNzYWdlIG1lc3NhZ2UsIGludCBjb2RlLCB7U3RyaW5nIGRldGFpbHN9KSB7CiAgdmFyIHJlc3BvbnNlID0gewogICAgJ2pzb25ycGMnOiAnMi4wJywKICAgICdpZCc6IG1lc3NhZ2Uuc2VyaWFsLAogICAgJ2Vycm9yJzogewogICAgICAnY29kZSc6IGNvZGUsCiAgICAgICdtZXNzYWdlJzogX2Vycm9yTWVzc2FnZXNbY29kZV0sCiAgICB9LAogIH07CiAgaWYgKGRldGFpbHMgIT0gbnVsbCkgewogICAgcmVzcG9uc2VbJ2Vycm9yJ11bJ2RhdGEnXSA9IHsKICAgICAgJ2RldGFpbHMnOiBkZXRhaWxzLAogICAgfTsKICB9CiAgcmV0dXJuIGpzb24uZW5jb2RlKHJlc3BvbnNlKTsKfQoKU3RyaW5nIGVuY29kZU1pc3NpbmdQYXJhbUVycm9yKE1lc3NhZ2UgbWVzc2FnZSwgU3RyaW5nIHBhcmFtKSB7CiAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtJbnZhbGlkUGFyYW1zLAogICAgICBkZXRhaWxzOiAiJHttZXNzYWdlLm1ldGhvZH0gZXhwZWN0cyB0aGUgJyR7cGFyYW19JyBwYXJhbWV0ZXIiKTsKfQoKU3RyaW5nIGVuY29kZUludmFsaWRQYXJhbUVycm9yKE1lc3NhZ2UgbWVzc2FnZSwgU3RyaW5nIHBhcmFtKSB7CiAgdmFyIHZhbHVlID0gbWVzc2FnZS5wYXJhbXNbcGFyYW1dOwogIHJldHVybiBlbmNvZGVScGNFcnJvcihtZXNzYWdlLCBrSW52YWxpZFBhcmFtcywKICAgICAgZGV0YWlsczogIiR7bWVzc2FnZS5tZXRob2R9OiBpbnZhbGlkICcke3BhcmFtfScgcGFyYW1ldGVyOiAke3ZhbHVlfSIpOwp9CgpTdHJpbmcgZW5jb2RlQ29tcGlsYXRpb25FcnJvcihNZXNzYWdlIG1lc3NhZ2UsIFN0cmluZyBkaWFnbm9zdGljKSB7CiAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtFeHByZXNzaW9uQ29tcGlsYXRpb25FcnJvciwKICAgICAgZGV0YWlsczogZGlhZ25vc3RpYyk7Cn0KClN0cmluZyBlbmNvZGVSZXN1bHQoTWVzc2FnZSBtZXNzYWdlLCBNYXAgcmVzdWx0KSB7CiAgdmFyIHJlc3BvbnNlID0gewogICAgJ2pzb25ycGMnOiAnMi4wJywKICAgICdpZCc6IG1lc3NhZ2Uuc2VyaWFsLAogICAgJ3Jlc3VsdCc6IHJlc3VsdCwKICB9OwogIHJldHVybiBqc29uLmVuY29kZShyZXNwb25zZSk7Cn0KClN0cmluZyBlbmNvZGVTdWNjZXNzKE1lc3NhZ2UgbWVzc2FnZSkgewogIHJldHVybiBlbmNvZGVSZXN1bHQobWVzc2FnZSwgeyd0eXBlJzogJ1N1Y2Nlc3MnfSk7Cn0KCmNvbnN0IHNob3J0RGVsYXkgPSBjb25zdCBEdXJhdGlvbihtaWxsaXNlY29uZHM6IDEwKTsKCi8vLyBDYWxsZWQgd2hlbiB0aGUgc2VydmVyIHNob3VsZCBiZSBzdGFydGVkLgp0eXBlZGVmIEZ1dHVyZSBTZXJ2ZXJTdGFydENhbGxiYWNrKCk7CgovLy8gQ2FsbGVkIHdoZW4gdGhlIHNlcnZlciBzaG91bGQgYmUgc3RvcHBlZC4KdHlwZWRlZiBGdXR1cmUgU2VydmVyU3RvcENhbGxiYWNrKCk7CgovLy8gQ2FsbGVkIHdoZW4gdGhlIHNlcnZpY2UgaXMgZXhpdGluZy4KdHlwZWRlZiBGdXR1cmUgQ2xlYW51cENhbGxiYWNrKCk7CgovLy8gQ2FsbGVkIHRvIGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkKdHlwZWRlZiBGdXR1cmU8VXJpPiBDcmVhdGVUZW1wRGlyQ2FsbGJhY2soU3RyaW5nIGJhc2UpOwoKLy8vIENhbGxlZCB0byBkZWxldGUgYSBkaXJlY3RvcnkKdHlwZWRlZiBGdXR1cmUgRGVsZXRlRGlyQ2FsbGJhY2soVXJpIHBhdGgpOwoKLy8vIENhbGxlZCB0byB3cml0ZSBhIGZpbGUuCnR5cGVkZWYgRnV0dXJlIFdyaXRlRmlsZUNhbGxiYWNrKFVyaSBwYXRoLCBMaXN0PGludD4gYnl0ZXMpOwoKLy8vIENhbGxlZCB0byB3cml0ZSBhIHN0cmVhbSBpbnRvIGEgZmlsZS4KdHlwZWRlZiBGdXR1cmUgV3JpdGVTdHJlYW1GaWxlQ2FsbGJhY2soVXJpIHBhdGgsIFN0cmVhbTxMaXN0PGludD4+IGJ5dGVzKTsKCi8vLyBDYWxsZWQgdG8gcmVhZCBhIGZpbGUuCnR5cGVkZWYgRnV0dXJlPExpc3Q8aW50Pj4gUmVhZEZpbGVDYWxsYmFjayhVcmkgcGF0aCk7CgovLy8gQ2FsbGVkIHRvIGxpc3QgYWxsIGZpbGVzIHVuZGVyIHNvbWUgcGF0aC4KdHlwZWRlZiBGdXR1cmU8TGlzdDxNYXA8U3RyaW5nLCBkeW5hbWljPj4+IExpc3RGaWxlc0NhbGxiYWNrKFVyaSBwYXRoKTsKCi8vLyBDYWxsZWQgd2hlbiB3ZSBuZWVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXJ2ZXIuCnR5cGVkZWYgRnV0dXJlPFVyaT4gU2VydmVySW5mb3JtYW1lc3NhZ2Vfcm91dGVydGlvbkNhbGxiYWNrKCk7CgovLy8gQ2FsbGVkIHdoZW4gd2UgbmVlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VydmVyLgp0eXBlZGVmIEZ1dHVyZTxVcmk+IFNlcnZlckluZm9ybWF0aW9uQ2FsbGJhY2soKTsKCi8vLyBDYWxsZWQgd2hlbiB3ZSB3YW50IHRvIFtlbmFibGVdIG9yIGRpc2FibGUgdGhlIHdlYiBzZXJ2ZXIuCnR5cGVkZWYgRnV0dXJlPFVyaT4gV2ViU2VydmVyQ29udHJvbENhbGxiYWNrKGJvb2wgZW5hYmxlKTsKCi8vLyBIb29rcyB0aGF0IGFyZSBzZXR1cCBieSB0aGUgZW1iZWRkZXIuCmNsYXNzIFZNU2VydmljZUVtYmVkZGVySG9va3MgewogIHN0YXRpYyBTZXJ2ZXJTdGFydENhbGxiYWNrIHNlcnZlclN0YXJ0OwogIHN0YXRpYyBTZXJ2ZXJTdG9wQ2FsbGJhY2sgc2VydmVyU3RvcDsKICBzdGF0aWMgQ2xlYW51cENhbGxiYWNrIGNsZWFudXA7CiAgc3RhdGljIENyZWF0ZVRlbXBEaXJDYWxsYmFjayBjcmVhdGVUZW1wRGlyOwogIHN0YXRpYyBEZWxldGVEaXJDYWxsYmFjayBkZWxldGVEaXI7CiAgc3RhdGljIFdyaXRlRmlsZUNhbGxiYWNrIHdyaXRlRmlsZTsKICBzdGF0aWMgV3JpdGVTdHJlYW1GaWxlQ2FsbGJhY2sgd3JpdGVTdHJlYW1GaWxlOwogIHN0YXRpYyBSZWFkRmlsZUNhbGxiYWNrIHJlYWRGaWxlOwogIHN0YXRpYyBMaXN0RmlsZXNDYWxsYmFjayBsaXN0RmlsZXM7CiAgc3RhdGljIFNlcnZlckluZm9ybWF0aW9uQ2FsbGJhY2sgc2VydmVySW5mb3JtYXRpb247CiAgc3RhdGljIFdlYlNlcnZlckNvbnRyb2xDYWxsYmFjayB3ZWJTZXJ2ZXJDb250cm9sOwp9CgpjbGFzcyBfQ2xpZW50UmVzdW1lUGVybWlzc2lvbnMgewogIGZpbmFsIExpc3Q8Q2xpZW50PiBjbGllbnRzID0gW107CiAgaW50IHBlcm1pc3Npb25zTWFzayA9IDA7Cn0KCmNsYXNzIFZNU2VydmljZSBleHRlbmRzIE1lc3NhZ2VSb3V0ZXIgewogIHN0YXRpYyBWTVNlcnZpY2UgX2luc3RhbmNlOwoKICBzdGF0aWMgY29uc3Qgc2VydmljZU5hbWVzcGFjZSA9ICdzJzsKCiAgLy8vIENvbGxlY3Rpb24gb2YgY3VycmVudGx5IGNvbm5lY3RlZCBjbGllbnRzLgogIGZpbmFsIE5hbWVkTG9va3VwPENsaWVudD4gY2xpZW50cyA9CiAgICAgIG5ldyBOYW1lZExvb2t1cDxDbGllbnQ+KHByb2xvZ3VlOiBzZXJ2aWNlTmFtZXNwYWNlKTsKICBmaW5hbCBJZEdlbmVyYXRvciBfc2VydmljZVJlcXVlc3RzID0gbmV3IElkR2VuZXJhdG9yKHByb2xvZ3VlOiAnc3InKTsKCiAgLy8vIE1hcHBpbmcgb2YgY2xpZW50IG5hbWVzIHRvIGFsbCBjbGllbnRzIG9mIHRoYXQgbmFtZSBhbmQgdGhlaXIgcmVzdW1lCiAgLy8vIHBlcm1pc3Npb25zLgogIGZpbmFsIE1hcDxTdHJpbmcsIF9DbGllbnRSZXN1bWVQZXJtaXNzaW9ucz4gY2xpZW50UmVzdW1lUGVybWlzc2lvbnMgPSB7fTsKCiAgLy8vIENvbGxlY3Rpb24gb2YgY3VycmVudGx5IHJ1bm5pbmcgaXNvbGF0ZXMuCiAgUnVubmluZ0lzb2xhdGVzIHJ1bm5pbmdJc29sYXRlcyA9IG5ldyBSdW5uaW5nSXNvbGF0ZXMoKTsKCiAgLy8vIEZsYWcgdG8gaW5kaWNhdGUgVk0gc2VydmljZSBpcyBleGl0aW5nLgogIGJvb2wgaXNFeGl0aW5nID0gZmFsc2U7CgogIC8vLyBBIHBvcnQgdXNlZCB0byByZWNlaXZlIGV2ZW50cyBmcm9tIHRoZSBWTS4KICBmaW5hbCBSYXdSZWNlaXZlUG9ydCBldmVudFBvcnQ7CgogIGZpbmFsIGRldmZzID0gbmV3IERldkZTKCk7CgogIHZvaWQgX2NsZWFyQ2xpZW50TmFtZShDbGllbnQgY2xpZW50KSB7CiAgICBmaW5hbCBuYW1lID0gY2xpZW50Lm5hbWU7CiAgICBjbGllbnQubmFtZSA9IG51bGw7CiAgICBmaW5hbCBjbGllbnRzRm9yTmFtZSA9IGNsaWVudFJlc3VtZVBlcm1pc3Npb25zW25hbWVdOwogICAgaWYgKGNsaWVudHNGb3JOYW1lICE9IG51bGwpIHsKICAgICAgY2xpZW50c0Zvck5hbWUuY2xpZW50cy5yZW1vdmUoY2xpZW50KTsKICAgICAgLy8gSWYgdGhpcyB3YXMgdGhlIGxhc3QgY2xpZW50IHdpdGggYSBnaXZlbiBuYW1lLCBjbGVhbnVwIHJlc3VtZQogICAgICAvLyBwZXJtaXNzaW9ucy4KICAgICAgaWYgKGNsaWVudHNGb3JOYW1lLmNsaWVudHMuaXNFbXB0eSkgewogICAgICAgIGNsaWVudFJlc3VtZVBlcm1pc3Npb25zLnJlbW92ZShuYW1lKTsKCiAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gcmVzdW1lIGFueSBpc29sYXRlcyBub3cgdGhhdCB0aGUgbGFzdAogICAgICAgIC8vIGNsaWVudCBvZiBhIGdpdmVuIG5hbWUgaGFzIGRpc2Nvbm5lY3RlZCBvciBjaGFuZ2VkIG5hbWVzLgogICAgICAgIC8vCiAgICAgICAgLy8gQW4gaXNvbGF0ZSB3aWxsIGJlIHJlc3VtZWQgaW4gdGhpcyBzaXR1YXRpb24gaWY6CiAgICAgICAgLy8KICAgICAgICAvLyAxKSBUaGlzIGNsaWVudCByZXF1aXJlZCByZXN1bWUgYXBwcm92YWxzIGZvciB0aGUgY3VycmVudCBwYXVzZSBldmVudAogICAgICAgIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGUgaXNvbGF0ZSBhbmQgYWxsIG90aGVyIHJlcXVpcmVkIHJlc3VtZSBhcHByb3ZhbHMKICAgICAgICAvLyBoYXZlIGJlZW4gcHJvdmlkZWQgYnkgb3RoZXIgY2xpZW50cy4KICAgICAgICAvLwogICAgICAgIC8vIE9SCiAgICAgICAgLy8KICAgICAgICAvLyAyKSBUaGlzIGNsaWVudCByZXF1aXJlZCByZXN1bWUgYXBwcm92YWxzIGZvciB0aGUgY3VycmVudCBwYXVzZSBldmVudAogICAgICAgIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGUgaXNvbGF0ZSwgbm8gb3RoZXIgY2xpZW50cyByZXF1aXJlIHJlc3VtZSBhcHByb3ZhbHMKICAgICAgICAvLyBmb3IgdGhlIGN1cnJlbnQgcGF1c2UgZXZlbnQsIGFuZCBhdCBsZWFzdCBvbmUgY2xpZW50IGhhcyBpc3N1ZWQgYSByZXN1bWUKICAgICAgICAvLyByZXF1ZXN0LgogICAgICAgIHJ1bm5pbmdJc29sYXRlcy5pc29sYXRlcy5mb3JFYWNoKChfLCBpc29sYXRlKSBhc3luYyA9PgogICAgICAgICAgICBhd2FpdCBpc29sYXRlLm1heWJlUmVzdW1lQWZ0ZXJDbGllbnRDaGFuZ2UodGhpcywgbmFtZSkpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gU2V0cyB0aGUgbmFtZSBhc3NvY2lhdGVkIHdpdGggYSBbQ2xpZW50XS4KICAvLy8KICAvLy8gSWYgYW55IHJlc3VtZSBhcHByb3ZhbHMgd2VyZSBzZXQgZm9yIHRoaXMgY2xpZW50IHByZXZpb3VzbHkgdGhleSB3aWxsCiAgLy8vIG5lZWQgdG8gYmUgcmVzZXQgYWZ0ZXIgYSBuYW1lIGNoYW5nZS4KICBTdHJpbmcgX3NldENsaWVudE5hbWUoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICBmaW5hbCBjbGllbnQgPSBtZXNzYWdlLmNsaWVudDsKICAgIGlmICghbWVzc2FnZS5wYXJhbXMuY29udGFpbnNLZXkoJ25hbWUnKSkgewogICAgICByZXR1cm4gZW5jb2RlUnBjRXJyb3IobWVzc2FnZSwga0ludmFsaWRQYXJhbXMsCiAgICAgICAgICBkZXRhaWxzOiAic2V0Q2xpZW50TmFtZTogbWlzc2luZyByZXF1aXJlZCBwYXJhbWV0ZXIgJ25hbWUnIik7CiAgICB9CiAgICBmaW5hbCBuYW1lID0gbWVzc2FnZS5wYXJhbXNbJ25hbWUnXTsKICAgIGlmIChuYW1lIGlzISBTdHJpbmcpIHsKICAgICAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtJbnZhbGlkUGFyYW1zLAogICAgICAgICAgZGV0YWlsczogInNldENsaWVudE5hbWU6IGludmFsaWQgJ25hbWUnIHBhcmFtZXRlcjogJG5hbWUiKTsKICAgIH0KICAgIF9zZXRDbGllbnROYW1lSGVscGVyKGNsaWVudCwgbmFtZSk7CiAgICByZXR1cm4gZW5jb2RlU3VjY2VzcyhtZXNzYWdlKTsKICB9CgogIHZvaWQgX3NldENsaWVudE5hbWVIZWxwZXIoQ2xpZW50IGNsaWVudCwgU3RyaW5nIG5hbWUpIHsKICAgIF9jbGVhckNsaWVudE5hbWUoY2xpZW50KTsKICAgIGNsaWVudC5uYW1lID0gbmFtZS5pc0VtcHR5ID8gY2xpZW50LmRlZmF1bHRDbGllbnROYW1lIDogbmFtZTsKICAgIGNsaWVudFJlc3VtZVBlcm1pc3Npb25zLnB1dElmQWJzZW50KAogICAgICAgIGNsaWVudC5uYW1lLCAoKSA9PiBfQ2xpZW50UmVzdW1lUGVybWlzc2lvbnMoKSk7CiAgICBjbGllbnRSZXN1bWVQZXJtaXNzaW9uc1tjbGllbnQubmFtZV0uY2xpZW50cy5hZGQoY2xpZW50KTsKICB9CgogIFN0cmluZyBfZ2V0Q2xpZW50TmFtZShNZXNzYWdlIG1lc3NhZ2UpID0+IGVuY29kZVJlc3VsdChtZXNzYWdlLCB7CiAgICAgICAgJ3R5cGUnOiAnQ2xpZW50TmFtZScsCiAgICAgICAgJ25hbWUnOiBtZXNzYWdlLmNsaWVudC5uYW1lLAogICAgICB9KTsKCiAgU3RyaW5nIF9yZXF1aXJlUGVybWlzc2lvblRvUmVzdW1lKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgYm9vbCBwYXJzZVBlcm1pc3Npb24oU3RyaW5nIGFyZ05hbWUpIHsKICAgICAgZmluYWwgYXJnID0gbWVzc2FnZS5wYXJhbXNbYXJnTmFtZV07CiAgICAgIGlmIChhcmcgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAoYXJnIGlzISBib29sKSB7CiAgICAgICAgdGhyb3cgZW5jb2RlUnBjRXJyb3IobWVzc2FnZSwga0ludmFsaWRQYXJhbXMsCiAgICAgICAgICAgIGRldGFpbHM6ICJyZXF1aXJlUGVybWlzc2lvblRvUmVzdW1lOiBpbnZhbGlkICckYXJnTmFtZSc6ICRhcmciKTsKICAgICAgfQogICAgICByZXR1cm4gYXJnOwogICAgfQoKICAgIGZpbmFsIGNsaWVudCA9IG1lc3NhZ2UuY2xpZW50OwogICAgaW50IHBhdXNlVHlwZU1hc2sgPSAwOwogICAgdHJ5IHsKICAgICAgaWYgKHBhcnNlUGVybWlzc2lvbignb25QYXVzZVN0YXJ0JykpIHsKICAgICAgICBwYXVzZVR5cGVNYXNrIHw9IFJ1bm5pbmdJc29sYXRlLmtQYXVzZU9uU3RhcnRNYXNrOwogICAgICB9CiAgICAgIGlmIChwYXJzZVBlcm1pc3Npb24oJ29uUGF1c2VSZWxvYWQnKSkgewogICAgICAgIHBhdXNlVHlwZU1hc2sgfD0gUnVubmluZ0lzb2xhdGUua1BhdXNlT25SZWxvYWRNYXNrOwogICAgICB9CiAgICAgIGlmIChwYXJzZVBlcm1pc3Npb24oJ29uUGF1c2VFeGl0JykpIHsKICAgICAgICBwYXVzZVR5cGVNYXNrIHw9IFJ1bm5pbmdJc29sYXRlLmtQYXVzZU9uRXhpdE1hc2s7CiAgICAgIH0KICAgIH0gY2F0Y2ggKHJwY0Vycm9yKSB7CiAgICAgIHJldHVybiBycGNFcnJvcjsKICAgIH0KCiAgICBjbGllbnRSZXN1bWVQZXJtaXNzaW9uc1tjbGllbnQubmFtZV0ucGVybWlzc2lvbnNNYXNrID0gcGF1c2VUeXBlTWFzazsKICAgIHJldHVybiBlbmNvZGVTdWNjZXNzKG1lc3NhZ2UpOwogIH0KCiAgdm9pZCBfYWRkQ2xpZW50KENsaWVudCBjbGllbnQpIHsKICAgIGFzc2VydChjbGllbnQuc3RyZWFtcy5pc0VtcHR5KTsKICAgIGFzc2VydChjbGllbnQuc2VydmljZXMuaXNFbXB0eSk7CiAgICBfc2V0Q2xpZW50TmFtZUhlbHBlcihjbGllbnQsIGNsaWVudC5kZWZhdWx0Q2xpZW50TmFtZSk7CiAgICBjbGllbnRzLmFkZChjbGllbnQpOwogIH0KCiAgdm9pZCBfcmVtb3ZlQ2xpZW50KENsaWVudCBjbGllbnQpIHsKICAgIGZpbmFsIG5hbWVzcGFjZSA9IGNsaWVudHMua2V5T2YoY2xpZW50KTsKICAgIGNsaWVudHMucmVtb3ZlKGNsaWVudCk7CiAgICBmb3IgKHZhciBzdHJlYW1JZCBpbiBjbGllbnQuc3RyZWFtcykgewogICAgICBpZiAoIV9pc0FueUNsaWVudFN1YnNjcmliZWQoc3RyZWFtSWQpKSB7CiAgICAgICAgX3ZtQ2FuY2VsU3RyZWFtKHN0cmVhbUlkKTsKICAgICAgfQogICAgfQoKICAgIC8vIENsZWFuIHVwIGNsaWVudCBhcHByb3ZhbHMgc3RhdGUuCiAgICBfY2xlYXJDbGllbnROYW1lKGNsaWVudCk7CgogICAgZm9yICh2YXIgc2VydmljZSBpbiBjbGllbnQuc2VydmljZXMua2V5cykgewogICAgICBfZXZlbnRNZXNzYWdlSGFuZGxlcigKICAgICAgICAgICdTZXJ2aWNlJywKICAgICAgICAgIG5ldyBSZXNwb25zZS5qc29uKHsKICAgICAgICAgICAgJ2pzb25ycGMnOiAnMi4wJywKICAgICAgICAgICAgJ21ldGhvZCc6ICdzdHJlYW1Ob3RpZnknLAogICAgICAgICAgICAncGFyYW1zJzogewogICAgICAgICAgICAgICdzdHJlYW1JZCc6ICdTZXJ2aWNlJywKICAgICAgICAgICAgICAnZXZlbnQnOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJFdmVudCIsCiAgICAgICAgICAgICAgICAia2luZCI6ICJTZXJ2aWNlVW5yZWdpc3RlcmVkIiwKICAgICAgICAgICAgICAgICd0aW1lc3RhbXAnOiBuZXcgRGF0ZVRpbWUubm93KCkubWlsbGlzZWNvbmRzU2luY2VFcG9jaCwKICAgICAgICAgICAgICAgICdzZXJ2aWNlJzogc2VydmljZSwKICAgICAgICAgICAgICAgICdtZXRob2QnOiBuYW1lc3BhY2UgKyAnLicgKyBzZXJ2aWNlLAogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSkpOwogICAgfQogICAgLy8gQ29tcGxldGUgYWxsIHJlcXVlc3RzIGFzIGZhaWxlZAogICAgZm9yICh2YXIgaGFuZGxlIGluIGNsaWVudC5zZXJ2aWNlSGFuZGxlcy52YWx1ZXMpIHsKICAgICAgaGFuZGxlKG51bGwpOwogICAgfQogIH0KCiAgdm9pZCBfZXZlbnRNZXNzYWdlSGFuZGxlcihTdHJpbmcgc3RyZWFtSWQsIFJlc3BvbnNlIGV2ZW50KSB7CiAgICBmb3IgKHZhciBjbGllbnQgaW4gY2xpZW50cykgewogICAgICBpZiAoY2xpZW50LnNlbmRFdmVudHMgJiYgY2xpZW50LnN0cmVhbXMuY29udGFpbnMoc3RyZWFtSWQpKSB7CiAgICAgICAgY2xpZW50LnBvc3QoZXZlbnQpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9jb250cm9sTWVzc2FnZUhhbmRsZXIoaW50IGNvZGUsIGludCBwb3J0SWQsIFNlbmRQb3J0IHNwLCBTdHJpbmcgbmFtZSkgewogICAgc3dpdGNoIChjb2RlKSB7CiAgICAgIGNhc2UgQ29uc3RhbnRzLklTT0xBVEVfU1RBUlRVUF9NRVNTQUdFX0lEOgogICAgICAgIHJ1bm5pbmdJc29sYXRlcy5pc29sYXRlU3RhcnR1cChwb3J0SWQsIHNwLCBuYW1lKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDb25zdGFudHMuSVNPTEFURV9TSFVURE9XTl9NRVNTQUdFX0lEOgogICAgICAgIHJ1bm5pbmdJc29sYXRlcy5pc29sYXRlU2h1dGRvd24ocG9ydElkLCBzcCk7CiAgICAgICAgSXNvbGF0ZUVtYmVkZGVyRGF0YSBpZWQgPSBpc29sYXRlRW1iZWRkZXJEYXRhLnJlbW92ZShwb3J0SWQpOwogICAgICAgIGlmIChpZWQgIT0gbnVsbCkgewogICAgICAgICAgaWVkLmNsZWFudXAoKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQoKICBGdXR1cmU8TnVsbD4gX3NlcnZlck1lc3NhZ2VIYW5kbGVyKGludCBjb2RlLCBTZW5kUG9ydCBzcCwgYm9vbCBlbmFibGUpIGFzeW5jIHsKICAgIHN3aXRjaCAoY29kZSkgewogICAgICBjYXNlIENvbnN0YW50cy5XRUJfU0VSVkVSX0NPTlRST0xfTUVTU0FHRV9JRDoKICAgICAgICBpZiAoVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy53ZWJTZXJ2ZXJDb250cm9sID09IG51bGwpIHsKICAgICAgICAgIHNwLnNlbmQobnVsbCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIFVyaSB1cmkgPSBhd2FpdCBWTVNlcnZpY2VFbWJlZGRlckhvb2tzLndlYlNlcnZlckNvbnRyb2woZW5hYmxlKTsKICAgICAgICBzcC5zZW5kKHVyaSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ29uc3RhbnRzLlNFUlZFUl9JTkZPX01FU1NBR0VfSUQ6CiAgICAgICAgaWYgKFZNU2VydmljZUVtYmVkZGVySG9va3Muc2VydmVySW5mb3JtYXRpb24gPT0gbnVsbCkgewogICAgICAgICAgc3Auc2VuZChudWxsKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgVXJpIHVyaSA9IGF3YWl0IFZNU2VydmljZUVtYmVkZGVySG9va3Muc2VydmVySW5mb3JtYXRpb24oKTsKICAgICAgICBzcC5zZW5kKHVyaSk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQoKICBGdXR1cmU8TnVsbD4gX2hhbmRsZU5hdGl2ZVJwY0NhbGwobWVzc2FnZSwgU2VuZFBvcnQgcmVwbHlQb3J0KSBhc3luYyB7CiAgICAvLyBLZWVwIGluIHN5bmMgd2l0aCAicnVudGltZS92bS9zZXJ2aWNlX2lzb2xhdGUuY2M6SW52b2tlU2VydmljZVJwYyIuCiAgICBSZXNwb25zZSByZXNwb25zZTsKCiAgICB0cnkgewogICAgICBmaW5hbCBNZXNzYWdlIHJwYyA9IG5ldyBNZXNzYWdlLmZyb21Kc29uUnBjKAogICAgICAgICAgbnVsbCwganNvbi5kZWNvZGUodXRmOC5kZWNvZGUobWVzc2FnZSBhcyBMaXN0PGludD4pKSk7CiAgICAgIGlmIChycGMudHlwZSAhPSBNZXNzYWdlVHlwZS5SZXF1ZXN0KSB7CiAgICAgICAgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UuaW50ZXJuYWxFcnJvcigKICAgICAgICAgICAgJ1RoZSBjbGllbnQgc2VudCBhIG5vbi1yZXF1ZXN0IGpzb24tcnBjIG1lc3NhZ2UuJyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCByb3V0ZVJlcXVlc3QodGhpcywgcnBjKTsKICAgICAgfQogICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7CiAgICAgIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlLmludGVybmFsRXJyb3IoCiAgICAgICAgICAnVGhlIHJwYyBjYWxsIHJlc3VsdGVkIGluIGV4Y2VwdGlvbjogJGV4Y2VwdGlvbi4nKTsKICAgIH0KICAgIExpc3Q8aW50PiBieXRlczsKICAgIHN3aXRjaCAocmVzcG9uc2Uua2luZCkgewogICAgICBjYXNlIFJlc3BvbnNlUGF5bG9hZEtpbmQuU3RyaW5nOgogICAgICAgIGJ5dGVzID0gdXRmOC5lbmNvZGUocmVzcG9uc2UucGF5bG9hZCk7CiAgICAgICAgYnl0ZXMgPSBieXRlcyBpcyBVaW50OExpc3QgPyBieXRlcyA6IG5ldyBVaW50OExpc3QuZnJvbUxpc3QoYnl0ZXMpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFJlc3BvbnNlUGF5bG9hZEtpbmQuQmluYXJ5OgogICAgICBjYXNlIFJlc3BvbnNlUGF5bG9hZEtpbmQuVXRmOFN0cmluZzoKICAgICAgICBieXRlcyA9IHJlc3BvbnNlLnBheWxvYWQgYXMgVWludDhMaXN0OwogICAgICAgIGJyZWFrOwogICAgfQogICAgcmVwbHlQb3J0LnNlbmQoYnl0ZXMpOwogIH0KCiAgRnV0dXJlIF9leGl0KCkgYXN5bmMgewogICAgaXNFeGl0aW5nID0gdHJ1ZTsKCiAgICAvLyBTdG9wIHRoZSBzZXJ2ZXIuCiAgICBpZiAoVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy5zZXJ2ZXJTdG9wICE9IG51bGwpIHsKICAgICAgYXdhaXQgVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy5zZXJ2ZXJTdG9wKCk7CiAgICB9CgogICAgLy8gQ2xvc2UgcmVjZWl2ZSBwb3J0cy4KICAgIGlzb2xhdGVDb250cm9sUG9ydC5jbG9zZSgpOwogICAgc2NyaXB0TG9hZFBvcnQuY2xvc2UoKTsKCiAgICAvLyBDcmVhdGUgYSBjb3B5IG9mIHRoZSBzZXQgYXMgYSBsaXN0IGJlY2F1c2UgY2xpZW50LmRpc2Nvbm5lY3QoKSB3aWxsCiAgICAvLyBhbHRlciB0aGUgY29ubmVjdGVkIGNsaWVudHMgc2V0LgogICAgdmFyIGNsaWVudHNMaXN0ID0gY2xpZW50cy50b0xpc3QoKTsKICAgIGZvciAodmFyIGNsaWVudCBpbiBjbGllbnRzTGlzdCkgewogICAgICBjbGllbnQuZGlzY29ubmVjdCgpOwogICAgfQogICAgZGV2ZnMuY2xlYW51cCgpOwogICAgaWYgKFZNU2VydmljZUVtYmVkZGVySG9va3MuY2xlYW51cCAhPSBudWxsKSB7CiAgICAgIGF3YWl0IFZNU2VydmljZUVtYmVkZGVySG9va3MuY2xlYW51cCgpOwogICAgfQoKICAgIC8vIE5vdGlmeSB0aGUgVk0gdGhhdCB3ZSBoYXZlIGV4aXRlZC4KICAgIF9vbkV4aXQoKTsKICB9CgogIHZvaWQgbWVzc2FnZUhhbmRsZXIobWVzc2FnZSkgewogICAgaWYgKG1lc3NhZ2UgaXMgTGlzdCkgewogICAgICBpZiAobWVzc2FnZS5sZW5ndGggPT0gMikgewogICAgICAgIC8vIFRoaXMgaXMgYW4gZXZlbnQuCiAgICAgICAgX2V2ZW50TWVzc2FnZUhhbmRsZXIobWVzc2FnZVswXSwgbmV3IFJlc3BvbnNlLmZyb20obWVzc2FnZVsxXSkpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAobWVzc2FnZS5sZW5ndGggPT0gMSkgewogICAgICAgIC8vIFRoaXMgaXMgYSBjb250cm9sIG1lc3NhZ2UgZGlyZWN0aW5nIHRoZSB2bSBzZXJ2aWNlIHRvIGV4aXQuCiAgICAgICAgYXNzZXJ0KG1lc3NhZ2VbMF0gPT0gQ29uc3RhbnRzLlNFUlZJQ0VfRVhJVF9NRVNTQUdFX0lEKTsKICAgICAgICBfZXhpdCgpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAobWVzc2FnZS5sZW5ndGggPT0gMykgewogICAgICAgIGZpbmFsIG9wY29kZSA9IG1lc3NhZ2VbMF07CiAgICAgICAgaWYgKG9wY29kZSA9PSBDb25zdGFudHMuTUVUSE9EX0NBTExfRlJPTV9OQVRJVkUpIHsKICAgICAgICAgIF9oYW5kbGVOYXRpdmVScGNDYWxsKG1lc3NhZ2VbMV0sIG1lc3NhZ2VbMl0pOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBUaGlzIGlzIGEgbWVzc2FnZSBpbnRlcmFjdGluZyB3aXRoIHRoZSB3ZWIgc2VydmVyLgogICAgICAgICAgYXNzZXJ0KChvcGNvZGUgPT0gQ29uc3RhbnRzLldFQl9TRVJWRVJfQ09OVFJPTF9NRVNTQUdFX0lEKSB8fAogICAgICAgICAgICAgIChvcGNvZGUgPT0gQ29uc3RhbnRzLlNFUlZFUl9JTkZPX01FU1NBR0VfSUQpKTsKICAgICAgICAgIF9zZXJ2ZXJNZXNzYWdlSGFuZGxlcihtZXNzYWdlWzBdLCBtZXNzYWdlWzFdLCBtZXNzYWdlWzJdKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKG1lc3NhZ2UubGVuZ3RoID09IDQpIHsKICAgICAgICAvLyBUaGlzIGlzIGEgbWVzc2FnZSBpbmZvcm1pbmcgdXMgb2YgdGhlIGJpcnRoIG9yIGRlYXRoIG9mIGFuCiAgICAgICAgLy8gaXNvbGF0ZS4KICAgICAgICBfY29udHJvbE1lc3NhZ2VIYW5kbGVyKG1lc3NhZ2VbMF0sIG1lc3NhZ2VbMV0sIG1lc3NhZ2VbMl0sIG1lc3NhZ2VbM10pOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgcHJpbnQoJ0ludGVybmFsIHZtLXNlcnZpY2UgZXJyb3I6IGlnbm9yaW5nIGlsbGVnYWwgbWVzc2FnZTogJG1lc3NhZ2UnKTsKICB9CgogIFZNU2VydmljZS5faW50ZXJuYWwoKSA6IGV2ZW50UG9ydCA9IGlzb2xhdGVDb250cm9sUG9ydCB7CiAgICBldmVudFBvcnQuaGFuZGxlciA9IG1lc3NhZ2VIYW5kbGVyOwogIH0KCiAgZmFjdG9yeSBWTVNlcnZpY2UoKSB7CiAgICBpZiAoVk1TZXJ2aWNlLl9pbnN0YW5jZSA9PSBudWxsKSB7CiAgICAgIFZNU2VydmljZS5faW5zdGFuY2UgPSBuZXcgVk1TZXJ2aWNlLl9pbnRlcm5hbCgpOwogICAgICBfb25TdGFydCgpOwogICAgfQogICAgcmV0dXJuIF9pbnN0YW5jZTsKICB9CgogIGJvb2wgX2lzQW55Q2xpZW50U3Vic2NyaWJlZChTdHJpbmcgc3RyZWFtSWQpIHsKICAgIGZvciAodmFyIGNsaWVudCBpbiBjbGllbnRzKSB7CiAgICAgIGlmIChjbGllbnQuc3RyZWFtcy5jb250YWlucyhzdHJlYW1JZCkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQ2xpZW50IF9maW5kRmlyc3RDbGllbnRUaGF0SGFuZGxlc1NlcnZpY2UoU3RyaW5nIHNlcnZpY2UpIHsKICAgIGlmIChjbGllbnRzICE9IG51bGwpIHsKICAgICAgZm9yIChDbGllbnQgYyBpbiBjbGllbnRzKSB7CiAgICAgICAgaWYgKGMuc2VydmljZXMuY29udGFpbnNLZXkoc2VydmljZSkpIHsKICAgICAgICAgIHJldHVybiBjOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBzdGF0aWMgY29uc3Qga1NlcnZpY2VTdHJlYW0gPSAnU2VydmljZSc7CiAgc3RhdGljIGNvbnN0IHNlcnZpY2VTdHJlYW1zID0gY29uc3QgW2tTZXJ2aWNlU3RyZWFtXTsKCiAgRnV0dXJlPFN0cmluZz4gX3N0cmVhbUxpc3RlbihNZXNzYWdlIG1lc3NhZ2UpIGFzeW5jIHsKICAgIHZhciBjbGllbnQgPSBtZXNzYWdlLmNsaWVudDsKICAgIHZhciBzdHJlYW1JZCA9IG1lc3NhZ2UucGFyYW1zWydzdHJlYW1JZCddOwoKICAgIGlmIChjbGllbnQuc3RyZWFtcy5jb250YWlucyhzdHJlYW1JZCkpIHsKICAgICAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtTdHJlYW1BbHJlYWR5U3Vic2NyaWJlZCk7CiAgICB9CiAgICBpZiAoIV9pc0FueUNsaWVudFN1YnNjcmliZWQoc3RyZWFtSWQpKSB7CiAgICAgIGlmICghc2VydmljZVN0cmVhbXMuY29udGFpbnMoc3RyZWFtSWQpICYmICFfdm1MaXN0ZW5TdHJlYW0oc3RyZWFtSWQpKSB7CiAgICAgICAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtJbnZhbGlkUGFyYW1zLAogICAgICAgICAgICBkZXRhaWxzOiAic3RyZWFtTGlzdGVuOiBpbnZhbGlkICdzdHJlYW1JZCcgcGFyYW1ldGVyOiAke3N0cmVhbUlkfSIpOwogICAgICB9CiAgICB9CgogICAgLy8gU29tZSBzdHJlYW1zIGNhbiBnZW5lcmF0ZSBldmVudHMgb3Igc2lkZSBlZmZlY3RzIGFmdGVyIHJlZ2lzdHJhdGlvbgogICAgc3dpdGNoIChzdHJlYW1JZCkgewogICAgICBjYXNlIGtTZXJ2aWNlU3RyZWFtOgogICAgICAgIGZvciAoQ2xpZW50IGMgaW4gY2xpZW50cykgewogICAgICAgICAgaWYgKGMgPT0gY2xpZW50KSBjb250aW51ZTsKICAgICAgICAgIGZvciAoU3RyaW5nIHNlcnZpY2UgaW4gYy5zZXJ2aWNlcy5rZXlzKSB7CiAgICAgICAgICAgIF9zZW5kU2VydmljZVJlZ2lzdGVyZWRFdmVudChjLCBzZXJ2aWNlLCB0YXJnZXQ6IGNsaWVudCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIDsKICAgICAgICBicmVhazsKICAgIH0KCiAgICBjbGllbnQuc3RyZWFtcy5hZGQoc3RyZWFtSWQpOwogICAgcmV0dXJuIGVuY29kZVN1Y2Nlc3MobWVzc2FnZSk7CiAgfQoKICBGdXR1cmU8U3RyaW5nPiBfc3RyZWFtQ2FuY2VsKE1lc3NhZ2UgbWVzc2FnZSkgYXN5bmMgewogICAgdmFyIGNsaWVudCA9IG1lc3NhZ2UuY2xpZW50OwogICAgdmFyIHN0cmVhbUlkID0gbWVzc2FnZS5wYXJhbXNbJ3N0cmVhbUlkJ107CgogICAgaWYgKCFjbGllbnQuc3RyZWFtcy5jb250YWlucyhzdHJlYW1JZCkpIHsKICAgICAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtTdHJlYW1Ob3RTdWJzY3JpYmVkKTsKICAgIH0KICAgIGNsaWVudC5zdHJlYW1zLnJlbW92ZShzdHJlYW1JZCk7CiAgICBpZiAoIXNlcnZpY2VTdHJlYW1zLmNvbnRhaW5zKHN0cmVhbUlkKSAmJgogICAgICAgICFfaXNBbnlDbGllbnRTdWJzY3JpYmVkKHN0cmVhbUlkKSkgewogICAgICBfdm1DYW5jZWxTdHJlYW0oc3RyZWFtSWQpOwogICAgfQoKICAgIHJldHVybiBlbmNvZGVTdWNjZXNzKG1lc3NhZ2UpOwogIH0KCiAgc3RhdGljIGJvb2wgX2hhc05hbWVzcGFjZShTdHJpbmcgbWV0aG9kKSA9PgogICAgICBtZXRob2QuY29udGFpbnMoJy4nKSAmJgogICAgICBfZ2V0TmFtZXNwYWNlKG1ldGhvZCkuc3RhcnRzV2l0aChzZXJ2aWNlTmFtZXNwYWNlKTsKICBzdGF0aWMgU3RyaW5nIF9nZXROYW1lc3BhY2UoU3RyaW5nIG1ldGhvZCkgPT4gbWV0aG9kLnNwbGl0KCcuJykuZmlyc3Q7CiAgc3RhdGljIFN0cmluZyBfZ2V0TWV0aG9kKFN0cmluZyBtZXRob2QpID0+IG1ldGhvZC5zcGxpdCgnLicpLmxhc3Q7CgogIEZ1dHVyZTxTdHJpbmc+IF9yZWdpc3RlclNlcnZpY2UoTWVzc2FnZSBtZXNzYWdlKSBhc3luYyB7CiAgICBmaW5hbCBjbGllbnQgPSBtZXNzYWdlLmNsaWVudDsKICAgIGZpbmFsIHNlcnZpY2UgPSBtZXNzYWdlLnBhcmFtc1snc2VydmljZSddOwogICAgZmluYWwgYWxpYXMgPSBtZXNzYWdlLnBhcmFtc1snYWxpYXMnXTsKCiAgICBpZiAoc2VydmljZSBpcyEgU3RyaW5nIHx8IHNlcnZpY2UgPT0gJycpIHsKICAgICAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtJbnZhbGlkUGFyYW1zLAogICAgICAgICAgZGV0YWlsczogInJlZ2lzdGVyU2VydmljZTogaW52YWxpZCAnc2VydmljZScgcGFyYW1ldGVyOiAke3NlcnZpY2V9Iik7CiAgICB9CiAgICBpZiAoYWxpYXMgaXMhIFN0cmluZyB8fCBhbGlhcyA9PSAnJykgewogICAgICByZXR1cm4gZW5jb2RlUnBjRXJyb3IobWVzc2FnZSwga0ludmFsaWRQYXJhbXMsCiAgICAgICAgICBkZXRhaWxzOiAicmVnaXN0ZXJTZXJ2aWNlOiBpbnZhbGlkICdhbGlhcycgcGFyYW1ldGVyOiAke2FsaWFzfSIpOwogICAgfQogICAgaWYgKGNsaWVudC5zZXJ2aWNlcy5jb250YWluc0tleShzZXJ2aWNlKSkgewogICAgICByZXR1cm4gZW5jb2RlUnBjRXJyb3IobWVzc2FnZSwga1NlcnZpY2VBbHJlYWR5UmVnaXN0ZXJlZCk7CiAgICB9CiAgICBjbGllbnQuc2VydmljZXNbc2VydmljZV0gPSBhbGlhczsKCiAgICBib29sIHJlbW92ZWQ7CiAgICB0cnkgewogICAgICAvLyBEbyBub3Qgc2VuZCBzdHJlYW1pbmcgZXZlbnRzIHRvIHRoZSBjbGllbnQgd2hpY2ggcmVnaXN0ZXJzIHRoZSBzZXJ2aWNlCiAgICAgIHJlbW92ZWQgPSBjbGllbnQuc3RyZWFtcy5yZW1vdmUoa1NlcnZpY2VTdHJlYW0pOwogICAgICBhd2FpdCBfc2VuZFNlcnZpY2VSZWdpc3RlcmVkRXZlbnQoY2xpZW50LCBzZXJ2aWNlKTsKICAgIH0gZmluYWxseSB7CiAgICAgIGlmIChyZW1vdmVkKSBjbGllbnQuc3RyZWFtcy5hZGQoa1NlcnZpY2VTdHJlYW0pOwogICAgfQoKICAgIHJldHVybiBlbmNvZGVTdWNjZXNzKG1lc3NhZ2UpOwogIH0KCiAgX3NlbmRTZXJ2aWNlUmVnaXN0ZXJlZEV2ZW50KENsaWVudCBjbGllbnQsIFN0cmluZyBzZXJ2aWNlLAogICAgICB7Q2xpZW50IHRhcmdldH0pIGFzeW5jIHsKICAgIGZpbmFsIG5hbWVzcGFjZSA9IGNsaWVudHMua2V5T2YoY2xpZW50KTsKICAgIGZpbmFsIGFsaWFzID0gY2xpZW50LnNlcnZpY2VzW3NlcnZpY2VdOwogICAgZmluYWwgZXZlbnQgPSBuZXcgUmVzcG9uc2UuanNvbih7CiAgICAgICdqc29ucnBjJzogJzIuMCcsCiAgICAgICdtZXRob2QnOiAnc3RyZWFtTm90aWZ5JywKICAgICAgJ3BhcmFtcyc6IHsKICAgICAgICAnc3RyZWFtSWQnOiBrU2VydmljZVN0cmVhbSwKICAgICAgICAnZXZlbnQnOiB7CiAgICAgICAgICAidHlwZSI6ICJFdmVudCIsCiAgICAgICAgICAia2luZCI6ICJTZXJ2aWNlUmVnaXN0ZXJlZCIsCiAgICAgICAgICAndGltZXN0YW1wJzogbmV3IERhdGVUaW1lLm5vdygpLm1pbGxpc2Vjb25kc1NpbmNlRXBvY2gsCiAgICAgICAgICAnc2VydmljZSc6IHNlcnZpY2UsCiAgICAgICAgICAnbWV0aG9kJzogbmFtZXNwYWNlICsgJy4nICsgc2VydmljZSwKICAgICAgICAgICdhbGlhcyc6IGFsaWFzCiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIGlmICh0YXJnZXQgPT0gbnVsbCkgewogICAgICBfZXZlbnRNZXNzYWdlSGFuZGxlcihrU2VydmljZVN0cmVhbSwgZXZlbnQpOwogICAgfSBlbHNlIHsKICAgICAgdGFyZ2V0LnBvc3QoZXZlbnQpOwogICAgfQogIH0KCiAgRnV0dXJlPFN0cmluZz4gX2hhbmRsZVNlcnZpY2UoTWVzc2FnZSBtZXNzYWdlKSBhc3luYyB7CiAgICBmaW5hbCBuYW1lc3BhY2UgPSBfZ2V0TmFtZXNwYWNlKG1lc3NhZ2UubWV0aG9kKTsKICAgIGZpbmFsIG1ldGhvZCA9IF9nZXRNZXRob2QobWVzc2FnZS5tZXRob2QpOwogICAgZmluYWwgY2xpZW50ID0gY2xpZW50c1tuYW1lc3BhY2VdOwogICAgaWYgKGNsaWVudCAhPSBudWxsKSB7CiAgICAgIGlmIChjbGllbnQuc2VydmljZXMuY29udGFpbnNLZXkobWV0aG9kKSkgewogICAgICAgIGZpbmFsIGlkID0gX3NlcnZpY2VSZXF1ZXN0cy5uZXdJZCgpOwogICAgICAgIGZpbmFsIG9sZElkID0gbWVzc2FnZS5zZXJpYWw7CiAgICAgICAgZmluYWwgY29tcGxldGVyID0gbmV3IENvbXBsZXRlcjxTdHJpbmc+KCk7CiAgICAgICAgY2xpZW50LnNlcnZpY2VIYW5kbGVzW2lkXSA9IChNZXNzYWdlIG0pIHsKICAgICAgICAgIGlmIChtICE9IG51bGwpIHsKICAgICAgICAgICAgY29tcGxldGVyLmNvbXBsZXRlKGpzb24uZW5jb2RlKG0uZm9yd2FyZFRvSnNvbih7J2lkJzogb2xkSWR9KSkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29tcGxldGVyLmNvbXBsZXRlKGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtTZXJ2aWNlRGlzYXBwZWFyZWQpKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGNsaWVudC5wb3N0KG5ldyBSZXNwb25zZS5qc29uKAogICAgICAgICAgICBtZXNzYWdlLmZvcndhcmRUb0pzb24oeydpZCc6IGlkLCAnbWV0aG9kJzogbWV0aG9kfSkpKTsKICAgICAgICByZXR1cm4gY29tcGxldGVyLmZ1dHVyZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtNZXRob2ROb3RGb3VuZCwKICAgICAgICBkZXRhaWxzOiAiVW5rbm93biBzZXJ2aWNlOiAke21lc3NhZ2UubWV0aG9kfSIpOwogIH0KCiAgRnV0dXJlPFN0cmluZz4gX3NwYXduVXJpKE1lc3NhZ2UgbWVzc2FnZSkgYXN5bmMgewogICAgdmFyIHRva2VuID0gbWVzc2FnZS5wYXJhbXNbJ3Rva2VuJ107CiAgICBpZiAodG9rZW4gPT0gbnVsbCkgewogICAgICByZXR1cm4gZW5jb2RlTWlzc2luZ1BhcmFtRXJyb3IobWVzc2FnZSwgJ3Rva2VuJyk7CiAgICB9CiAgICBpZiAodG9rZW4gaXMhIFN0cmluZykgewogICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ3Rva2VuJyk7CiAgICB9CiAgICB2YXIgdXJpID0gbWVzc2FnZS5wYXJhbXNbJ3VyaSddOwogICAgaWYgKHVyaSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBlbmNvZGVNaXNzaW5nUGFyYW1FcnJvcihtZXNzYWdlLCAndXJpJyk7CiAgICB9CiAgICBpZiAodXJpIGlzISBTdHJpbmcpIHsKICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICd1cmknKTsKICAgIH0KICAgIHZhciBhcmdzID0gbWVzc2FnZS5wYXJhbXNbJ2FyZ3MnXTsKICAgIHZhciBhcmdzT2ZTdHJpbmcgPSBuZXcgTGlzdDxTdHJpbmc+KCk7CiAgICBpZiAoYXJncyAhPSBudWxsKSB7CiAgICAgIGlmIChhcmdzIGlzISBMaXN0KSB7CiAgICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICdhcmdzJyk7CiAgICAgIH0KICAgICAgZm9yICh2YXIgYXJnIGluIGFyZ3MpIHsKICAgICAgICBpZiAoYXJnIGlzISBTdHJpbmcpIHsKICAgICAgICAgIHJldHVybiBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihtZXNzYWdlLCAnYXJncycpOwogICAgICAgIH0KICAgICAgICBhcmdzT2ZTdHJpbmcuYWRkKGFyZyk7CiAgICAgIH0KICAgIH0KICAgIHZhciBtc2cgPSBtZXNzYWdlLnBhcmFtc1snbWVzc2FnZSddOwoKICAgIElzb2xhdGUuc3Bhd25VcmkoVXJpLnBhcnNlKHVyaSksIGFyZ3NPZlN0cmluZywgbXNnKS50aGVuKChpc29sYXRlKSB7CiAgICAgIF9zcGF3blVyaU5vdGlmeShpc29sYXRlLmNvbnRyb2xQb3J0LCB0b2tlbik7CiAgICB9KS5jYXRjaEVycm9yKChlKSB7CiAgICAgIF9zcGF3blVyaU5vdGlmeShlLnRvU3RyaW5nKCksIHRva2VuKTsKICAgIH0pOwoKICAgIHJldHVybiBlbmNvZGVTdWNjZXNzKG1lc3NhZ2UpOwogIH0KCiAgRnV0dXJlPFJlc3BvbnNlPiByb3V0ZVJlcXVlc3QoVk1TZXJ2aWNlIF8sIE1lc3NhZ2UgbWVzc2FnZSkgYXN5bmMgewogICAgZmluYWwgcmVzcG9uc2UgPSBhd2FpdCBfcm91dGVSZXF1ZXN0SW1wbChtZXNzYWdlKTsKICAgIGlmIChyZXNwb25zZSA9PSBudWxsKSB7CiAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGhhdmUgYSBudWxsIHJlc3BvbnNlIGZvciBOb3RpZmljYXRpb25zLgogICAgICBhc3NlcnQobWVzc2FnZS50eXBlID09IE1lc3NhZ2VUeXBlLk5vdGlmaWNhdGlvbik7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIG5ldyBSZXNwb25zZS5mcm9tKHJlc3BvbnNlKTsKICB9CgogIEZ1dHVyZSBfcm91dGVSZXF1ZXN0SW1wbChNZXNzYWdlIG1lc3NhZ2UpIGFzeW5jIHsKICAgIHRyeSB7CiAgICAgIGlmIChtZXNzYWdlLmNvbXBsZXRlZCkgewogICAgICAgIHJldHVybiBhd2FpdCBtZXNzYWdlLnJlc3BvbnNlOwogICAgICB9CiAgICAgIGlmIChtZXNzYWdlLm1ldGhvZCA9PSAnc3RyZWFtTGlzdGVuJykgewogICAgICAgIHJldHVybiBhd2FpdCBfc3RyZWFtTGlzdGVuKG1lc3NhZ2UpOwogICAgICB9CiAgICAgIGlmIChtZXNzYWdlLm1ldGhvZCA9PSAnc3RyZWFtQ2FuY2VsJykgewogICAgICAgIHJldHVybiBhd2FpdCBfc3RyZWFtQ2FuY2VsKG1lc3NhZ2UpOwogICAgICB9CiAgICAgIGlmIChtZXNzYWdlLm1ldGhvZCA9PSAncmVnaXN0ZXJTZXJ2aWNlJykgewogICAgICAgIHJldHVybiBhd2FpdCBfcmVnaXN0ZXJTZXJ2aWNlKG1lc3NhZ2UpOwogICAgICB9CiAgICAgIGlmIChtZXNzYWdlLm1ldGhvZCA9PSAnX3NwYXduVXJpJykgewogICAgICAgIHJldHVybiBhd2FpdCBfc3Bhd25VcmkobWVzc2FnZSk7CiAgICAgIH0KICAgICAgaWYgKG1lc3NhZ2UubWV0aG9kID09ICdzZXRDbGllbnROYW1lJykgewogICAgICAgIHJldHVybiBfc2V0Q2xpZW50TmFtZShtZXNzYWdlKTsKICAgICAgfQogICAgICBpZiAobWVzc2FnZS5tZXRob2QgPT0gJ2dldENsaWVudE5hbWUnKSB7CiAgICAgICAgcmV0dXJuIF9nZXRDbGllbnROYW1lKG1lc3NhZ2UpOwogICAgICB9CiAgICAgIGlmIChtZXNzYWdlLm1ldGhvZCA9PSAncmVxdWlyZVBlcm1pc3Npb25Ub1Jlc3VtZScpIHsKICAgICAgICByZXR1cm4gX3JlcXVpcmVQZXJtaXNzaW9uVG9SZXN1bWUobWVzc2FnZSk7CiAgICAgIH0KICAgICAgaWYgKGRldmZzLnNob3VsZEhhbmRsZU1lc3NhZ2UobWVzc2FnZSkpIHsKICAgICAgICByZXR1cm4gYXdhaXQgZGV2ZnMuaGFuZGxlTWVzc2FnZShtZXNzYWdlKTsKICAgICAgfQogICAgICBpZiAoX2hhc05hbWVzcGFjZShtZXNzYWdlLm1ldGhvZCkpIHsKICAgICAgICByZXR1cm4gYXdhaXQgX2hhbmRsZVNlcnZpY2UobWVzc2FnZSk7CiAgICAgIH0KICAgICAgaWYgKG1lc3NhZ2UucGFyYW1zWydpc29sYXRlSWQnXSAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIGF3YWl0IHJ1bm5pbmdJc29sYXRlcy5yb3V0ZVJlcXVlc3QodGhpcywgbWVzc2FnZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGF3YWl0IG1lc3NhZ2Uuc2VuZFRvVk0oKTsKICAgIH0gY2F0Y2ggKGUsIHN0KSB7CiAgICAgIG1lc3NhZ2Uuc2V0RXJyb3JSZXNwb25zZShrSW50ZXJuYWxFcnJvciwgJ1VuZXhwZWN0ZWQgZXhjZXB0aW9uOiRlXG4kc3QnKTsKICAgICAgcmV0dXJuIG1lc3NhZ2UucmVzcG9uc2U7CiAgICB9CiAgfQoKICB2b2lkIHJvdXRlUmVzcG9uc2UobWVzc2FnZSkgewogICAgZmluYWwgY2xpZW50ID0gbWVzc2FnZS5jbGllbnQ7CiAgICBpZiAoY2xpZW50LnNlcnZpY2VIYW5kbGVzLmNvbnRhaW5zS2V5KG1lc3NhZ2Uuc2VyaWFsKSkgewogICAgICBjbGllbnQuc2VydmljZUhhbmRsZXMucmVtb3ZlKG1lc3NhZ2Uuc2VyaWFsKShtZXNzYWdlKTsKICAgICAgX3NlcnZpY2VSZXF1ZXN0cy5yZWxlYXNlKG1lc3NhZ2Uuc2VyaWFsKTsKICAgIH0KICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwKICAgIGNvbnN0IGJvb2wuZnJvbUVudmlyb25tZW50KCJkYXJ0LnZtLnByb2R1Y3QiKSA/IGZhbHNlIDogImNhbGwiKQpSYXdSZWNlaXZlUG9ydCBib290KCkgewogIC8vIFJldHVybiB0aGUgcG9ydCB3ZSBleHBlY3QgaXNvbGF0ZSBjb250cm9sIG1lc3NhZ2VzIG9uLgogIHJldHVybiBpc29sYXRlQ29udHJvbFBvcnQ7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgIWNvbnN0IGJvb2wuZnJvbUVudmlyb25tZW50KCJkYXJ0LnZtLnByb2R1Y3QiKSkKdm9pZCBfcmVnaXN0ZXJJc29sYXRlKGludCBwb3J0X2lkLCBTZW5kUG9ydCBzcCwgU3RyaW5nIG5hbWUpIHsKICB2YXIgc2VydmljZSA9IG5ldyBWTVNlcnZpY2UoKTsKICBzZXJ2aWNlLnJ1bm5pbmdJc29sYXRlcy5pc29sYXRlU3RhcnR1cChwb3J0X2lkLCBzcCwgbmFtZSk7Cn0KCi8vLyBOb3RpZnkgdGhlIFZNIHRoYXQgdGhlIHNlcnZpY2UgaXMgcnVubmluZy4Kdm9pZCBfb25TdGFydCgpIG5hdGl2ZSAiVk1TZXJ2aWNlX09uU3RhcnQiOwoKLy8vIE5vdGlmeSB0aGUgVk0gdGhhdCB0aGUgc2VydmljZSBpcyBubyBsb25nZXIgcnVubmluZy4Kdm9pZCBfb25FeGl0KCkgbmF0aXZlICJWTVNlcnZpY2VfT25FeGl0IjsKCi8vLyBOb3RpZnkgdGhlIFZNIHRoYXQgdGhlIHNlcnZlcidzIGFkZHJlc3MgaGFzIGNoYW5nZWQuCnZvaWQgb25TZXJ2ZXJBZGRyZXNzQ2hhbmdlKFN0cmluZyBhZGRyZXNzKQogICAgbmF0aXZlICJWTVNlcnZpY2VfT25TZXJ2ZXJBZGRyZXNzQ2hhbmdlIjsKCi8vLyBTdWJzY3JpYmUgdG8gYSBzZXJ2aWNlIHN0cmVhbS4KYm9vbCBfdm1MaXN0ZW5TdHJlYW0oU3RyaW5nIHN0cmVhbUlkKSBuYXRpdmUgIlZNU2VydmljZV9MaXN0ZW5TdHJlYW0iOwoKLy8vIENhbmNlbCBhIHN1YnNjcmlwdGlvbiB0byBhIHNlcnZpY2Ugc3RyZWFtLgp2b2lkIF92bUNhbmNlbFN0cmVhbShTdHJpbmcgc3RyZWFtSWQpIG5hdGl2ZSAiVk1TZXJ2aWNlX0NhbmNlbFN0cmVhbSI7CgovLy8gR2V0IHRoZSBieXRlcyB0byB0aGUgdGFyIGFyY2hpdmUuClVpbnQ4TGlzdCBfcmVxdWVzdEFzc2V0cygpIG5hdGl2ZSAiVk1TZXJ2aWNlX1JlcXVlc3RBc3NldHMiOwoKLy8vIE5vdGlmeSB0aGUgdm0gc2VydmljZSB0aGF0IGFuIGlzb2xhdGUgaGFzIGJlZW4gc3Bhd25lZCB2aWEgcnBjLgp2b2lkIF9zcGF3blVyaU5vdGlmeShvYmosIFN0cmluZyB0b2tlbikgbmF0aXZlICJWTVNlcnZpY2Vfc3Bhd25VcmlOb3RpZnkiOwqDKABOTjwBDwEZARUaFxcUGgETFBMXHR4VHBoBQDwBJRICARocMyctJAQiAgFEMgFGSUg6KQFJHCAgHx8BIAEeIiYiJCIbISImJyEpJQEoJyYgARckJCs5MTo5LDsyP1EqAwFFExYaDxQnBwUZIhoHBCACAUAxRgIBQCUxTQIBRD4cAgEzExYaFgUgAgEoNQIBNQEuJgEuJQEoIgErOAEhLAEcPQEqSwEbNgEuSAE2PwE2MQE/OwEqHyooIi4mJjIkJjY0AgEhIxsCASgeAScBMSY7SAFLE0wBMDsBLhoBMSIBHQEpHhg6Ii1HFiwuAUxFCzwLUE8wCw4LUFJUFD9FCAYEATAGTCwrIy81SAYpGzVGBigjBAE6HkIpOD4EAUQeJQoBNysrGRYIGjZNCBIGASMbCi07CC48CCw6CBkXBgFKIwQBIyQlPBkEASYtHCsvIwgGASgeATAcFR4eJhglGSEvSCQ1EA4PBic3FAYEAT8iRBwIBgQBUBQxOg8yNUYbGQoPBgQBURQ0PxkSCkkWDy1AGRIKRBYPBgQBSUsXAQozQS0vQA8yCBotPgYVHScvTA8nKy8PBhsEARkWARg1MQYBHCAcAUsoKCYbBhUyLgYBKg8EASEbIR1JEAghR0EREAghIzs4EhFASD1FEgoIIUYUUBAIBkwEATsoBAEYJzcSBhYEATEiLxUIBhIEAT4bIi8UCggGEQQBKzgBOCEvAS1ABi1ON1EIBgFLGBskJTRFDAoKDwYBIiMEATghLwEuPAYlLi0hBgEjBAEuHjpJRQE7Iy8rAS81UAYrNUwGMEEGJgESClA3OhA3BgEjBAE9Hy0sJhggEiQTGydCHi8ZCggIGjMNGgYEATk1LycaMS0mMzIbTRNODAsnQyEIBjQ4BAE0KRk4Bhw4BiUXNgYaNgYnKxgbOQgeHjsKHwgGKQFJMxgsCAEjBAFGNxxAOBMGKAQBNAofJwguLQguLQgxMAgrKQgvKAgvKAg7NAgwMwgrLggxQggnFlAfBgQBICM9PTAGBAIBGkQYPB0CAUo/IT0CAS8sATkqATkrLgEjRwEvRwEmPQFESwEPZGFydDpfdm1zZXJ2aWNlQm9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL3Ztc2VydmljZS9jbGllbnQuZGFydIj2Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuX3Ztc2VydmljZTsKCnR5cGVkZWYgdm9pZCBDbGllbnRTZXJ2aWNlSGFuZGxlKE1lc3NhZ2UgcmVzcG9uc2UpOwoKLy8gQSBzZXJ2aWNlIGNsaWVudC4KYWJzdHJhY3QgY2xhc3MgQ2xpZW50IHsKICBzdGF0aWMgaW50IF9pZENvdW50ZXIgPSAwOwogIGZpbmFsIGludCBfaWQgPSArK19pZENvdW50ZXI7CgogIFN0cmluZyBnZXQgZGVmYXVsdENsaWVudE5hbWUgPT4gJ2NsaWVudCRfaWQnOwoKICBTdHJpbmcgZ2V0IG5hbWUgPT4gX25hbWU7CiAgc2V0IG5hbWUobikgPT4gX25hbWUgPSBuID8/IGRlZmF1bHRDbGllbnROYW1lOwogIFN0cmluZyBfbmFtZTsKCiAgZmluYWwgVk1TZXJ2aWNlIHNlcnZpY2U7CiAgZmluYWwgYm9vbCBzZW5kRXZlbnRzOwoKICAvLy8gQSBzZXQgc3RyZWFtSWRzIHdoaWNoIGRlc2NyaWJlcyB0aGUgc3RyZWFtcyB0aGUgY2xpZW50IGlzIGNvbm5lY3RlZCB0bwogIGZpbmFsIFNldDxTdHJpbmc+IHN0cmVhbXMgPSBuZXcgU2V0PFN0cmluZz4oKTsKCiAgLy8vIFNlcnZpY2VzIHJlZ2lzdGVyZWQgYW5kIHRoZWlyIGFsaWFzZXMKICAvLy8ga2V5OiBzZXJ2aWNlCiAgLy8vIHZhbHVlOiBhbGlhcwogIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gc2VydmljZXMgPSBuZXcgTWFwPFN0cmluZywgU3RyaW5nPigpOwoKICAvLy8gQ2FsbGJhY2tzIHJlZ2lzdGVyZWQgZm9yIHNlcnZpY2UgaW52b2NhdGlvbnMgc2V0IHRvIHRoZSBjbGllbnQKICAvLy8ga2V5OiBSUEMgaWQgdXNlZCBmb3IgdGhlIHJlcXVlc3QKICAvLy8gdmFsdWU6IGNhbGxiYWNrIHRoYXQgc2hvdWxkIGJlIGludm9rZWQKICBmaW5hbCBNYXA8U3RyaW5nLCBDbGllbnRTZXJ2aWNlSGFuZGxlPiBzZXJ2aWNlSGFuZGxlcyA9CiAgICAgIG5ldyBNYXA8U3RyaW5nLCBDbGllbnRTZXJ2aWNlSGFuZGxlPigpOwoKICBDbGllbnQodGhpcy5zZXJ2aWNlLCB7Ym9vbCBzZW5kRXZlbnRzOiB0cnVlfSkgOiB0aGlzLnNlbmRFdmVudHMgPSBzZW5kRXZlbnRzIHsKICAgIG5hbWUgPSBkZWZhdWx0Q2xpZW50TmFtZTsKICAgIHNlcnZpY2UuX2FkZENsaWVudCh0aGlzKTsKICB9CgogIC8vIERpc2Nvbm5lY3RzIHRoZSBjbGllbnQuCiAgZGlzY29ubmVjdCgpOwoKICAvLy8gV2hlbiBpbXBsZW1lbnRpbmcsIGNhbGwgW2Nsb3NlXSB3aGVuIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gY2xvc2VzLgogIHZvaWQgY2xvc2UoKSB7CiAgICBzZXJ2aWNlLl9yZW1vdmVDbGllbnQodGhpcyk7CiAgfQoKICAvLy8gQ2FsbCB0byBwcm9jZXNzIGEgcmVxdWVzdC4gUmVzcG9uc2Ugd2lsbCBiZSBwb3N0ZWQgd2l0aCAnc2VxJy4KICB2b2lkIG9uUmVxdWVzdChNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIC8vIEluIEpTT04tUlBDIDIuMCBtZXNzYWdlcyB3aXRoIGFuZCBpZCBhcmUgUmVxdWVzdCBhbmQgbXVzdCBiZSBhbnN3ZXJlZAogICAgLy8gaHR0cDovL3d3dy5qc29ucnBjLm9yZy9zcGVjaWZpY2F0aW9uI25vdGlmaWNhdGlvbgogICAgc2VydmljZS5yb3V0ZVJlcXVlc3Qoc2VydmljZSwgbWVzc2FnZSkudGhlbihwb3N0KTsKICB9CgogIHZvaWQgb25SZXNwb25zZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIHNlcnZpY2Uucm91dGVSZXNwb25zZShtZXNzYWdlKTsKICB9CgogIC8vLyBDYWxsIHRvIHByb2Nlc3MgYSBub3RpZmljYXRpb24uIFJlc3BvbnNlIHdpbGwgbm90IGJlIHBvc3RlZC4KICB2b2lkIG9uTm90aWZpY2F0aW9uKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgLy8gSW4gSlNPTi1SUEMgMi4wIG1lc3NhZ2VzIHdpdGhvdXQgYW4gaWQgYXJlIE5vdGlmaWNhdGlvbgogICAgLy8gYW5kIHNob3VsZCBub3QgYmUgYW5zd2VyZWQKICAgIC8vIGh0dHA6Ly93d3cuanNvbnJwYy5vcmcvc3BlY2lmaWNhdGlvbiNub3RpZmljYXRpb24KICAgIHNlcnZpY2Uucm91dGVSZXF1ZXN0KHNlcnZpY2UsIG1lc3NhZ2UpOwogIH0KCiAgLy8gU2VuZHMgYSByZXN1bHQgdG8gdGhlIGNsaWVudC4gIEltcGxlbWVudGVkIGluIHN1YmNsYXNzZXMuCiAgdm9pZCBwb3N0KFJlc3BvbnNlIHJlc3VsdCk7CgogIGR5bmFtaWMgdG9Kc29uKCkgewogICAgcmV0dXJuIHt9OwogIH0KfQpPAE5OPAEPARkBNAEVGB0gATABHDEQARsZAU0xASwTE0IBRSctOi4BUR4eBAEdEAFKESEEAUUkTTk3BAElJAQBQyk/IjksBAE/HgEVDwQCARtkYXJ0Ol92bXNlcnZpY2UvY2xpZW50LmRhcnRBb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvdm1zZXJ2aWNlL2Fzc2V0LmRhcnSHFy8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0Ll92bXNlcnZpY2U7CgpjbGFzcyBBc3NldCB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgZmluYWwgVWludDhMaXN0IGRhdGE7CgogIEFzc2V0KHRoaXMubmFtZSwgdGhpcy5kYXRhKTsKCiAgU3RyaW5nIGdldCBtaW1lVHlwZSB7CiAgICB2YXIgZXh0ZW5zaW9uU3RhcnQgPSBuYW1lLmxhc3RJbmRleE9mKCcuJyk7CiAgICB2YXIgZXh0ZW5zaW9uID0gbmFtZS5zdWJzdHJpbmcoZXh0ZW5zaW9uU3RhcnQgKyAxKTsKICAgIHN3aXRjaCAoZXh0ZW5zaW9uKSB7CiAgICAgIGNhc2UgJ2h0bWwnOgogICAgICAgIHJldHVybiAndGV4dC9odG1sOyBjaGFyc2V0PVVURi04JzsKICAgICAgY2FzZSAnZGFydCc6CiAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9kYXJ0OyBjaGFyc2V0PVVURi04JzsKICAgICAgY2FzZSAnanMnOgogICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vamF2YXNjcmlwdDsgY2hhcnNldD1VVEYtOCc7CiAgICAgIGNhc2UgJ2Nzcyc6CiAgICAgICAgcmV0dXJuICd0ZXh0L2NzczsgY2hhcnNldD1VVEYtOCc7CiAgICAgIGNhc2UgJ2dpZic6CiAgICAgICAgcmV0dXJuICdpbWFnZS9naWYnOwogICAgICBjYXNlICdwbmcnOgogICAgICAgIHJldHVybiAnaW1hZ2UvcG5nJzsKICAgICAgY2FzZSAnanBnJzoKICAgICAgICByZXR1cm4gJ2ltYWdlL2pwZWcnOwogICAgICBjYXNlICdqcGVnJzoKICAgICAgICByZXR1cm4gJ2ltYWdlL2pwZWcnOwogICAgICBjYXNlICdzdmcnOgogICAgICAgIHJldHVybiAnaW1hZ2Uvc3ZnK3htbCc7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJzsKICAgIH0KICB9CgogIHN0YXRpYyBNYXA8U3RyaW5nLCBBc3NldD4gcmVxdWVzdCgpIHsKICAgIFVpbnQ4TGlzdCB0YXJCeXRlcyA9IF9yZXF1ZXN0QXNzZXRzKCk7CiAgICBpZiAodGFyQnl0ZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIExpc3QgYXNzZXRMaXN0ID0gX2RlY29kZUFzc2V0cyh0YXJCeXRlcyk7CiAgICBNYXA8U3RyaW5nLCBBc3NldD4gYXNzZXRzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBBc3NldD4oKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXNzZXRMaXN0Lmxlbmd0aDsgaSArPSAyKSB7CiAgICAgIHZhciBhID0gbmV3IEFzc2V0KGFzc2V0TGlzdFtpXSwgYXNzZXRMaXN0W2kgKyAxXSk7CiAgICAgIGFzc2V0c1thLm5hbWVdID0gYTsKICAgIH0KICAgIHJldHVybiBhc3NldHM7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJG5hbWUgKCRtaW1lVHlwZSknOwp9CgpMaXN0IF9kZWNvZGVBc3NldHMoVWludDhMaXN0IGRhdGEpIG5hdGl2ZSAiVk1TZXJ2aWNlX0RlY29kZUFzc2V0cyI7CgpNYXA8U3RyaW5nLCBBc3NldD4gX2Fzc2V0czsKTWFwPFN0cmluZywgQXNzZXQ+IGdldCBhc3NldHMgewogIGlmIChfYXNzZXRzID09IG51bGwpIHsKICAgIHRyeSB7CiAgICAgIF9hc3NldHMgPSBBc3NldC5yZXF1ZXN0KCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHByaW50KCdDb3VsZCBub3QgbG9hZCBPYnNlcnZhdG9yeSBhc3NldHM6ICRlJyk7CiAgICB9CiAgfQogIHJldHVybiBfYXNzZXRzOwp9CkkATk48AQ8BGQEOFRgBHwEYMDgZEysTMhE4EioSHBIcEh0THRIgDx0GBAEoKxwTBi4+NDkaBhMEASwCAUQBHCAZCiESNgYEEgIBGmRhcnQ6X3Ztc2VydmljZS9hc3NldC5kYXJ0QW9yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL3Ztc2VydmljZS9kZXZmcy5kYXJ0ryIvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5fdm1zZXJ2aWNlOwoKU3RyaW5nIF9lbmNvZGVEZXZGU0Rpc2FibGVkRXJyb3IoTWVzc2FnZSBtZXNzYWdlKSB7CiAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtGZWF0dXJlRGlzYWJsZWQsCiAgICAgIGRldGFpbHM6ICJEZXZGUyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgRGFydCBpbXBsZW1lbnRhdGlvbiIpOwp9CgpTdHJpbmcgX2VuY29kZUZpbGVTeXN0ZW1BbHJlYWR5RXhpc3RzRXJyb3IoTWVzc2FnZSBtZXNzYWdlLCBTdHJpbmcgZnNOYW1lKSB7CiAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtGaWxlU3lzdGVtQWxyZWFkeUV4aXN0cywKICAgICAgZGV0YWlsczogIiR7bWVzc2FnZS5tZXRob2R9OiBmaWxlIHN5c3RlbSAnJHtmc05hbWV9JyBhbHJlYWR5IGV4aXN0cyIpOwp9CgpTdHJpbmcgX2VuY29kZUZpbGVTeXN0ZW1Eb2VzTm90RXhpc3RFcnJvcihNZXNzYWdlIG1lc3NhZ2UsIFN0cmluZyBmc05hbWUpIHsKICByZXR1cm4gZW5jb2RlUnBjRXJyb3IobWVzc2FnZSwga0ZpbGVTeXN0ZW1Eb2VzTm90RXhpc3QsCiAgICAgIGRldGFpbHM6ICIke21lc3NhZ2UubWV0aG9kfTogZmlsZSBzeXN0ZW0gJyR7ZnNOYW1lfScgZG9lcyBub3QgZXhpc3QiKTsKfQoKY2xhc3MgX0ZpbGVTeXN0ZW0gewogIF9GaWxlU3lzdGVtKHRoaXMubmFtZSwgdGhpcy51cmkpOwoKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBmaW5hbCBVcmkgdXJpOwoKICBVcmkgcmVzb2x2ZVBhdGgoU3RyaW5nIHBhdGgpIHsKICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoJy8nKSkgewogICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMSk7CiAgICB9CiAgICBpZiAocGF0aC5pc0VtcHR5KSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgVXJpIHBhdGhVcmk7CiAgICB0cnkgewogICAgICBwYXRoVXJpID0gbmV3IFVyaS5maWxlKHBhdGgpOwogICAgfSBvbiBGb3JtYXRFeGNlcHRpb24gY2F0Y2ggKGUpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcmV0dXJuIHJlc29sdmUocGF0aFVyaSk7CiAgfQoKICBVcmkgcmVzb2x2ZShVcmkgcGF0aFVyaSkgewogICAgdHJ5IHsKICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhpcyBwYXRoVXJpIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSBmaWxlIHBhdGguCiAgICAgIHBhdGhVcmkudG9GaWxlUGF0aCgpOwogICAgfSBvbiBVbnN1cHBvcnRlZEVycm9yIGNhdGNoIChlKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIFVyaSByZXNvbHZlZFVyaSA9IHVyaS5yZXNvbHZlVXJpKHBhdGhVcmkpOwogICAgaWYgKCFyZXNvbHZlZFVyaS50b1N0cmluZygpLnN0YXJ0c1dpdGgodXJpLnRvU3RyaW5nKCkpKSB7CiAgICAgIC8vIFJlc29sdmVkIHVyaSBtdXN0IGJlIHdpdGhpbiB0aGUgZmlsZXN5c3RlbSdzIGJhc2UgdXJpLgogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiByZXNvbHZlZFVyaTsKICB9CgogIE1hcCB0b01hcCgpIHsKICAgIHJldHVybiB7CiAgICAgICd0eXBlJzogJ0ZpbGVTeXN0ZW0nLAogICAgICAnbmFtZSc6IG5hbWUsCiAgICAgICd1cmknOiB1cmkudG9TdHJpbmcoKSwKICAgIH07CiAgfQp9CgpjbGFzcyBEZXZGUyB7CiAgRGV2RlMoKTsKCiAgTWFwPFN0cmluZywgX0ZpbGVTeXN0ZW0+IF9mc01hcCA9IHt9OwoKICBmaW5hbCBTZXQgX3JwY05hbWVzID0gbmV3IFNldC5mcm9tKFsKICAgICdfbGlzdERldkZTJywKICAgICdfY3JlYXRlRGV2RlMnLAogICAgJ19kZWxldGVEZXZGUycsCiAgICAnX3JlYWREZXZGU0ZpbGUnLAogICAgJ193cml0ZURldkZTRmlsZScsCiAgICAnX3dyaXRlRGV2RlNGaWxlcycsCiAgICAnX2xpc3REZXZGU0ZpbGVzJywKICBdKTsKCiAgdm9pZCBjbGVhbnVwKCkgewogICAgdmFyIGRlbGV0ZURpciA9IFZNU2VydmljZUVtYmVkZGVySG9va3MuZGVsZXRlRGlyOwogICAgaWYgKGRlbGV0ZURpciA9PSBudWxsKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHZhciBkZWxldGlvbnMgPSA8RnV0dXJlPltdOwogICAgZm9yICh2YXIgZnMgaW4gX2ZzTWFwLnZhbHVlcykgewogICAgICBkZWxldGlvbnMuYWRkKGRlbGV0ZURpcihmcy51cmkpKTsKICAgIH0KICAgIEZ1dHVyZS53YWl0KGRlbGV0aW9ucyk7CiAgICBfZnNNYXAuY2xlYXIoKTsKICB9CgogIGJvb2wgc2hvdWxkSGFuZGxlTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIHJldHVybiBfcnBjTmFtZXMuY29udGFpbnMobWVzc2FnZS5tZXRob2QpOwogIH0KCiAgRnV0dXJlPFN0cmluZz4gaGFuZGxlTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIGFzeW5jIHsKICAgIHN3aXRjaCAobWVzc2FnZS5tZXRob2QpIHsKICAgICAgY2FzZSAnX2xpc3REZXZGUyc6CiAgICAgICAgcmV0dXJuIF9saXN0RGV2RlMobWVzc2FnZSk7CiAgICAgIGNhc2UgJ19jcmVhdGVEZXZGUyc6CiAgICAgICAgcmV0dXJuIF9jcmVhdGVEZXZGUyhtZXNzYWdlKTsKICAgICAgY2FzZSAnX2RlbGV0ZURldkZTJzoKICAgICAgICByZXR1cm4gX2RlbGV0ZURldkZTKG1lc3NhZ2UpOwogICAgICBjYXNlICdfcmVhZERldkZTRmlsZSc6CiAgICAgICAgcmV0dXJuIF9yZWFkRGV2RlNGaWxlKG1lc3NhZ2UpOwogICAgICBjYXNlICdfd3JpdGVEZXZGU0ZpbGUnOgogICAgICAgIHJldHVybiBfd3JpdGVEZXZGU0ZpbGUobWVzc2FnZSk7CiAgICAgIGNhc2UgJ193cml0ZURldkZTRmlsZXMnOgogICAgICAgIHJldHVybiBfd3JpdGVEZXZGU0ZpbGVzKG1lc3NhZ2UpOwogICAgICBjYXNlICdfbGlzdERldkZTRmlsZXMnOgogICAgICAgIHJldHVybiBfbGlzdERldkZTRmlsZXMobWVzc2FnZSk7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtJbnRlcm5hbEVycm9yLAogICAgICAgICAgICBkZXRhaWxzOiAnVW5leHBlY3RlZCBycGMgJHttZXNzYWdlLm1ldGhvZH0nKTsKICAgIH0KICB9CgogIEZ1dHVyZTxTdHJpbmc+IGhhbmRsZVB1dFN0cmVhbSgKICAgICAgT2JqZWN0IGZzTmFtZSwgT2JqZWN0IHBhdGgsIFVyaSBmc1VyaSwgU3RyZWFtPExpc3Q8aW50Pj4gYnl0ZXMpIGFzeW5jIHsKICAgIC8vIEEgZHVtbXkgTWVzc2FnZSBmb3IgZXJyb3IgbWVzc2FnZSBjb25zdHJ1Y3Rpb24uCiAgICBNZXNzYWdlIG1lc3NhZ2UgPSBuZXcgTWVzc2FnZS5mb3JNZXRob2QoJ193cml0ZURldkZTRmlsZScpOwogICAgdmFyIHdyaXRlU3RyZWFtRmlsZSA9IFZNU2VydmljZUVtYmVkZGVySG9va3Mud3JpdGVTdHJlYW1GaWxlOwogICAgaWYgKHdyaXRlU3RyZWFtRmlsZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfZW5jb2RlRGV2RlNEaXNhYmxlZEVycm9yKG1lc3NhZ2UpOwogICAgfQogICAgaWYgKGZzTmFtZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBlbmNvZGVNaXNzaW5nUGFyYW1FcnJvcihtZXNzYWdlLCAnZnNOYW1lJyk7CiAgICB9CiAgICBpZiAoZnNOYW1lIGlzISBTdHJpbmcpIHsKICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICdmc05hbWUnKTsKICAgIH0KICAgIHZhciBmcyA9IF9mc01hcFtmc05hbWVdOwogICAgaWYgKGZzID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9lbmNvZGVGaWxlU3lzdGVtRG9lc05vdEV4aXN0RXJyb3IobWVzc2FnZSwgZnNOYW1lKTsKICAgIH0KICAgIFVyaSB1cmkgPSBmc1VyaTsKICAgIGlmICh1cmkgPT0gbnVsbCkgewogICAgICBpZiAocGF0aCA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIGVuY29kZU1pc3NpbmdQYXJhbUVycm9yKG1lc3NhZ2UsICdwYXRoJyk7CiAgICAgIH0KICAgICAgaWYgKHBhdGggaXMhIFN0cmluZykgewogICAgICAgIHJldHVybiBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihtZXNzYWdlLCAncGF0aCcpOwogICAgICB9CiAgICAgIHVyaSA9IGZzLnJlc29sdmVQYXRoKHBhdGgpOwogICAgICBpZiAodXJpID09IG51bGwpIHsKICAgICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ3BhdGgnKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdXJpID0gZnMucmVzb2x2ZSh1cmkpOwogICAgICBpZiAodXJpID09IG51bGwpIHsKICAgICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ3VyaScpOwogICAgICB9CiAgICB9CiAgICBhd2FpdCB3cml0ZVN0cmVhbUZpbGUodXJpLCBieXRlcyk7CiAgICByZXR1cm4gZW5jb2RlU3VjY2VzcyhtZXNzYWdlKTsKICB9CgogIEZ1dHVyZTxTdHJpbmc+IF9saXN0RGV2RlMoTWVzc2FnZSBtZXNzYWdlKSBhc3luYyB7CiAgICB2YXIgcmVzdWx0ID0ge307CiAgICByZXN1bHRbJ3R5cGUnXSA9ICdGaWxlU3lzdGVtTGlzdCc7CiAgICByZXN1bHRbJ2ZzTmFtZXMnXSA9IF9mc01hcC5rZXlzLnRvTGlzdCgpOwogICAgcmV0dXJuIGVuY29kZVJlc3VsdChtZXNzYWdlLCByZXN1bHQpOwogIH0KCiAgRnV0dXJlPFN0cmluZz4gX2NyZWF0ZURldkZTKE1lc3NhZ2UgbWVzc2FnZSkgYXN5bmMgewogICAgdmFyIGNyZWF0ZVRlbXBEaXIgPSBWTVNlcnZpY2VFbWJlZGRlckhvb2tzLmNyZWF0ZVRlbXBEaXI7CiAgICBpZiAoY3JlYXRlVGVtcERpciA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfZW5jb2RlRGV2RlNEaXNhYmxlZEVycm9yKG1lc3NhZ2UpOwogICAgfQogICAgdmFyIGZzTmFtZSA9IG1lc3NhZ2UucGFyYW1zWydmc05hbWUnXTsKICAgIGlmIChmc05hbWUgPT0gbnVsbCkgewogICAgICByZXR1cm4gZW5jb2RlTWlzc2luZ1BhcmFtRXJyb3IobWVzc2FnZSwgJ2ZzTmFtZScpOwogICAgfQogICAgaWYgKGZzTmFtZSBpcyEgU3RyaW5nKSB7CiAgICAgIHJldHVybiBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihtZXNzYWdlLCAnZnNOYW1lJyk7CiAgICB9CiAgICB2YXIgZnMgPSBfZnNNYXBbZnNOYW1lXTsKICAgIGlmIChmcyAhPSBudWxsKSB7CiAgICAgIHJldHVybiBfZW5jb2RlRmlsZVN5c3RlbUFscmVhZHlFeGlzdHNFcnJvcihtZXNzYWdlLCBmc05hbWUpOwogICAgfQogICAgdmFyIHRlbXBEaXIgPSBhd2FpdCBjcmVhdGVUZW1wRGlyKGZzTmFtZSk7CiAgICBmcyA9IG5ldyBfRmlsZVN5c3RlbShmc05hbWUsIHRlbXBEaXIpOwogICAgX2ZzTWFwW2ZzTmFtZV0gPSBmczsKICAgIHJldHVybiBlbmNvZGVSZXN1bHQobWVzc2FnZSwgZnMudG9NYXAoKSk7CiAgfQoKICBGdXR1cmU8U3RyaW5nPiBfZGVsZXRlRGV2RlMoTWVzc2FnZSBtZXNzYWdlKSBhc3luYyB7CiAgICB2YXIgZGVsZXRlRGlyID0gVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy5kZWxldGVEaXI7CiAgICBpZiAoZGVsZXRlRGlyID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9lbmNvZGVEZXZGU0Rpc2FibGVkRXJyb3IobWVzc2FnZSk7CiAgICB9CiAgICB2YXIgZnNOYW1lID0gbWVzc2FnZS5wYXJhbXNbJ2ZzTmFtZSddOwogICAgaWYgKGZzTmFtZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBlbmNvZGVNaXNzaW5nUGFyYW1FcnJvcihtZXNzYWdlLCAnZnNOYW1lJyk7CiAgICB9CiAgICBpZiAoZnNOYW1lIGlzISBTdHJpbmcpIHsKICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICdmc05hbWUnKTsKICAgIH0KICAgIHZhciBmcyA9IF9mc01hcC5yZW1vdmUoZnNOYW1lKTsKICAgIGlmIChmcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfZW5jb2RlRmlsZVN5c3RlbURvZXNOb3RFeGlzdEVycm9yKG1lc3NhZ2UsIGZzTmFtZSk7CiAgICB9CiAgICBhd2FpdCBkZWxldGVEaXIoZnMudXJpKTsKICAgIHJldHVybiBlbmNvZGVTdWNjZXNzKG1lc3NhZ2UpOwogIH0KCiAgRnV0dXJlPFN0cmluZz4gX3JlYWREZXZGU0ZpbGUoTWVzc2FnZSBtZXNzYWdlKSBhc3luYyB7CiAgICB2YXIgcmVhZEZpbGUgPSBWTVNlcnZpY2VFbWJlZGRlckhvb2tzLnJlYWRGaWxlOwogICAgaWYgKHJlYWRGaWxlID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9lbmNvZGVEZXZGU0Rpc2FibGVkRXJyb3IobWVzc2FnZSk7CiAgICB9CiAgICB2YXIgZnNOYW1lID0gbWVzc2FnZS5wYXJhbXNbJ2ZzTmFtZSddOwogICAgaWYgKGZzTmFtZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBlbmNvZGVNaXNzaW5nUGFyYW1FcnJvcihtZXNzYWdlLCAnZnNOYW1lJyk7CiAgICB9CiAgICBpZiAoZnNOYW1lIGlzISBTdHJpbmcpIHsKICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICdmc05hbWUnKTsKICAgIH0KICAgIHZhciBmcyA9IF9mc01hcFtmc05hbWVdOwogICAgaWYgKGZzID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9lbmNvZGVGaWxlU3lzdGVtRG9lc05vdEV4aXN0RXJyb3IobWVzc2FnZSwgZnNOYW1lKTsKICAgIH0KICAgIFVyaSB1cmk7CiAgICBpZiAobWVzc2FnZS5wYXJhbXNbJ3VyaSddICE9IG51bGwpIHsKICAgICAgdHJ5IHsKICAgICAgICB2YXIgdXJpUGFyYW0gPSBtZXNzYWdlLnBhcmFtc1sndXJpJ107CiAgICAgICAgaWYgKHVyaVBhcmFtIGlzISBTdHJpbmcpIHsKICAgICAgICAgIHJldHVybiBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihtZXNzYWdlLCAndXJpJyk7CiAgICAgICAgfQogICAgICAgIFVyaSBwYXJzZWRVcmkgPSBVcmkucGFyc2UodXJpUGFyYW0pOwogICAgICAgIHVyaSA9IGZzLnJlc29sdmUocGFyc2VkVXJpKTsKICAgICAgICBpZiAodXJpID09IG51bGwpIHsKICAgICAgICAgIHJldHVybiBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihtZXNzYWdlLCAndXJpJyk7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICd1cmknKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdmFyIHBhdGggPSBtZXNzYWdlLnBhcmFtc1sncGF0aCddOwogICAgICBpZiAocGF0aCA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIGVuY29kZU1pc3NpbmdQYXJhbUVycm9yKG1lc3NhZ2UsICdwYXRoJyk7CiAgICAgIH0KICAgICAgaWYgKHBhdGggaXMhIFN0cmluZykgewogICAgICAgIHJldHVybiBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihtZXNzYWdlLCAncGF0aCcpOwogICAgICB9CiAgICAgIHVyaSA9IGZzLnJlc29sdmVQYXRoKHBhdGgpOwogICAgICBpZiAodXJpID09IG51bGwpIHsKICAgICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ3BhdGgnKTsKICAgICAgfQogICAgfQogICAgdHJ5IHsKICAgICAgTGlzdDxpbnQ+IGJ5dGVzID0gYXdhaXQgcmVhZEZpbGUodXJpKTsKICAgICAgdmFyIHJlc3VsdCA9IHsndHlwZSc6ICdGU0ZpbGUnLCAnZmlsZUNvbnRlbnRzJzogYmFzZTY0LmVuY29kZShieXRlcyl9OwogICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG1lc3NhZ2UsIHJlc3VsdCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHJldHVybiBlbmNvZGVScGNFcnJvcihtZXNzYWdlLCBrRmlsZURvZXNOb3RFeGlzdCwKICAgICAgICAgIGRldGFpbHM6ICJfcmVhZERldkZTRmlsZTogJGUiKTsKICAgIH0KICB9CgogIEZ1dHVyZTxTdHJpbmc+IF93cml0ZURldkZTRmlsZShNZXNzYWdlIG1lc3NhZ2UpIGFzeW5jIHsKICAgIHZhciB3cml0ZUZpbGUgPSBWTVNlcnZpY2VFbWJlZGRlckhvb2tzLndyaXRlRmlsZTsKICAgIGlmICh3cml0ZUZpbGUgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2VuY29kZURldkZTRGlzYWJsZWRFcnJvcihtZXNzYWdlKTsKICAgIH0KICAgIHZhciBmc05hbWUgPSBtZXNzYWdlLnBhcmFtc1snZnNOYW1lJ107CiAgICBpZiAoZnNOYW1lID09IG51bGwpIHsKICAgICAgcmV0dXJuIGVuY29kZU1pc3NpbmdQYXJhbUVycm9yKG1lc3NhZ2UsICdmc05hbWUnKTsKICAgIH0KICAgIGlmIChmc05hbWUgaXMhIFN0cmluZykgewogICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ2ZzTmFtZScpOwogICAgfQogICAgdmFyIGZzID0gX2ZzTWFwW2ZzTmFtZV07CiAgICBpZiAoZnMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2VuY29kZUZpbGVTeXN0ZW1Eb2VzTm90RXhpc3RFcnJvcihtZXNzYWdlLCBmc05hbWUpOwogICAgfQogICAgVXJpIHVyaTsKICAgIGlmIChtZXNzYWdlLnBhcmFtc1sndXJpJ10gIT0gbnVsbCkgewogICAgICB0cnkgewogICAgICAgIHZhciB1cmlQYXJhbSA9IG1lc3NhZ2UucGFyYW1zWyd1cmknXTsKICAgICAgICBpZiAodXJpUGFyYW0gaXMhIFN0cmluZykgewogICAgICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICd1cmknKTsKICAgICAgICB9CiAgICAgICAgVXJpIHBhcnNlZFVyaSA9IFVyaS5wYXJzZSh1cmlQYXJhbSk7CiAgICAgICAgdXJpID0gZnMucmVzb2x2ZShwYXJzZWRVcmkpOwogICAgICAgIGlmICh1cmkgPT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICd1cmknKTsKICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ3VyaScpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB2YXIgcGF0aCA9IG1lc3NhZ2UucGFyYW1zWydwYXRoJ107CiAgICAgIGlmIChwYXRoID09IG51bGwpIHsKICAgICAgICByZXR1cm4gZW5jb2RlTWlzc2luZ1BhcmFtRXJyb3IobWVzc2FnZSwgJ3BhdGgnKTsKICAgICAgfQogICAgICBpZiAocGF0aCBpcyEgU3RyaW5nKSB7CiAgICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICdwYXRoJyk7CiAgICAgIH0KICAgICAgdXJpID0gZnMucmVzb2x2ZVBhdGgocGF0aCk7CiAgICAgIGlmICh1cmkgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihtZXNzYWdlLCAncGF0aCcpOwogICAgICB9CiAgICB9CiAgICB2YXIgZmlsZUNvbnRlbnRzID0gbWVzc2FnZS5wYXJhbXNbJ2ZpbGVDb250ZW50cyddOwogICAgaWYgKGZpbGVDb250ZW50cyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBlbmNvZGVNaXNzaW5nUGFyYW1FcnJvcihtZXNzYWdlLCAnZmlsZUNvbnRlbnRzJyk7CiAgICB9CiAgICBpZiAoZmlsZUNvbnRlbnRzIGlzISBTdHJpbmcpIHsKICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICdmaWxlQ29udGVudHMnKTsKICAgIH0KICAgIExpc3Q8aW50PiBkZWNvZGVkRmlsZUNvbnRlbnRzID0gYmFzZTY0LmRlY29kZShmaWxlQ29udGVudHMpOwoKICAgIGF3YWl0IHdyaXRlRmlsZSh1cmksIGRlY29kZWRGaWxlQ29udGVudHMpOwogICAgcmV0dXJuIGVuY29kZVN1Y2Nlc3MobWVzc2FnZSk7CiAgfQoKICBGdXR1cmU8U3RyaW5nPiBfd3JpdGVEZXZGU0ZpbGVzKE1lc3NhZ2UgbWVzc2FnZSkgYXN5bmMgewogICAgdmFyIHdyaXRlRmlsZSA9IFZNU2VydmljZUVtYmVkZGVySG9va3Mud3JpdGVGaWxlOwogICAgaWYgKHdyaXRlRmlsZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfZW5jb2RlRGV2RlNEaXNhYmxlZEVycm9yKG1lc3NhZ2UpOwogICAgfQogICAgdmFyIGZzTmFtZSA9IG1lc3NhZ2UucGFyYW1zWydmc05hbWUnXTsKICAgIGlmIChmc05hbWUgPT0gbnVsbCkgewogICAgICByZXR1cm4gZW5jb2RlTWlzc2luZ1BhcmFtRXJyb3IobWVzc2FnZSwgJ2ZzTmFtZScpOwogICAgfQogICAgaWYgKGZzTmFtZSBpcyEgU3RyaW5nKSB7CiAgICAgIHJldHVybiBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihtZXNzYWdlLCAnZnNOYW1lJyk7CiAgICB9CiAgICB2YXIgZnMgPSBfZnNNYXBbZnNOYW1lXTsKICAgIGlmIChmcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfZW5jb2RlRmlsZVN5c3RlbURvZXNOb3RFeGlzdEVycm9yKG1lc3NhZ2UsIGZzTmFtZSk7CiAgICB9CiAgICB2YXIgZmlsZXMgPSBtZXNzYWdlLnBhcmFtc1snZmlsZXMnXTsKICAgIGlmIChmaWxlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBlbmNvZGVNaXNzaW5nUGFyYW1FcnJvcihtZXNzYWdlLCAnZmlsZXMnKTsKICAgIH0KICAgIGlmIChmaWxlcyBpcyEgTGlzdCkgewogICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ2ZpbGVzJyk7CiAgICB9CiAgICB2YXIgdXJpcyA9IFtdOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgZmlsZUluZm8gPSBmaWxlc1tpXTsKICAgICAgaWYgKGZpbGVJbmZvIGlzISBMaXN0IHx8CiAgICAgICAgICBmaWxlSW5mby5sZW5ndGggIT0gMiB8fAogICAgICAgICAgZmlsZUluZm9bMF0gaXMhIFN0cmluZyB8fAogICAgICAgICAgZmlsZUluZm9bMV0gaXMhIFN0cmluZykgewogICAgICAgIHJldHVybiBlbmNvZGVScGNFcnJvcihtZXNzYWdlLCBrSW52YWxpZFBhcmFtcywKICAgICAgICAgICAgZGV0YWlsczogIiR7bWVzc2FnZS5tZXRob2R9OiBpbnZhbGlkICdmaWxlcycgcGFyYW1ldGVyICIKICAgICAgICAgICAgICAgICJhdCBpbmRleCAke2l9OiAke2ZpbGVJbmZvfSIpOwogICAgICB9CiAgICAgIHZhciB1cmkgPSBmcy5yZXNvbHZlUGF0aChmaWxlSW5mb1swXSk7CiAgICAgIGlmICh1cmkgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBlbmNvZGVScGNFcnJvcihtZXNzYWdlLCBrSW52YWxpZFBhcmFtcywKICAgICAgICAgICAgZGV0YWlsczogIiR7bWVzc2FnZS5tZXRob2R9OiBpbnZhbGlkICdmaWxlcycgcGFyYW1ldGVyICIKICAgICAgICAgICAgICAgICJhdCBpbmRleCAke2l9OiAke2ZpbGVJbmZvfSIpOwogICAgICB9CiAgICAgIHVyaXMuYWRkKHVyaSk7CiAgICB9CiAgICB2YXIgcGVuZGluZ1dyaXRlcyA9IDxGdXR1cmU+W107CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHVyaXMubGVuZ3RoOyBpKyspIHsKICAgICAgTGlzdDxpbnQ+IGRlY29kZWRGaWxlQ29udGVudHMgPSBiYXNlNjQuZGVjb2RlKGZpbGVzW2ldWzFdKTsKICAgICAgcGVuZGluZ1dyaXRlcy5hZGQod3JpdGVGaWxlKHVyaXNbaV0sIGRlY29kZWRGaWxlQ29udGVudHMpKTsKICAgIH0KICAgIGF3YWl0IEZ1dHVyZS53YWl0KHBlbmRpbmdXcml0ZXMpOwogICAgcmV0dXJuIGVuY29kZVN1Y2Nlc3MobWVzc2FnZSk7CiAgfQoKICBGdXR1cmU8U3RyaW5nPiBfbGlzdERldkZTRmlsZXMoTWVzc2FnZSBtZXNzYWdlKSBhc3luYyB7CiAgICB2YXIgbGlzdEZpbGVzID0gVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy5saXN0RmlsZXM7CiAgICBpZiAobGlzdEZpbGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9lbmNvZGVEZXZGU0Rpc2FibGVkRXJyb3IobWVzc2FnZSk7CiAgICB9CiAgICB2YXIgZnNOYW1lID0gbWVzc2FnZS5wYXJhbXNbJ2ZzTmFtZSddOwogICAgaWYgKGZzTmFtZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBlbmNvZGVNaXNzaW5nUGFyYW1FcnJvcihtZXNzYWdlLCAnZnNOYW1lJyk7CiAgICB9CiAgICBpZiAoZnNOYW1lIGlzISBTdHJpbmcpIHsKICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICdmc05hbWUnKTsKICAgIH0KICAgIHZhciBmcyA9IF9mc01hcFtmc05hbWVdOwogICAgaWYgKGZzID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9lbmNvZGVGaWxlU3lzdGVtRG9lc05vdEV4aXN0RXJyb3IobWVzc2FnZSwgZnNOYW1lKTsKICAgIH0KICAgIHZhciBmaWxlTGlzdCA9IGF3YWl0IGxpc3RGaWxlcyhmcy51cmkpOwogICAgLy8gUmVtb3ZlIGFueSB1cmwtZW5jb2RpbmcgaW4gdGhlIGZpbGVuYW1lcy4KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZUxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgZmlsZUxpc3RbaV1bJ25hbWUnXSA9IFVyaS5kZWNvZGVGdWxsKGZpbGVMaXN0W2ldWyduYW1lJ10pOwogICAgfQogICAgdmFyIHJlc3VsdCA9IHsndHlwZSc6ICdGU0ZpbGVMaXN0JywgJ2ZpbGVzJzogZmlsZUxpc3R9OwogICAgcmV0dXJuIGVuY29kZVJlc3VsdChtZXNzYWdlLCByZXN1bHQpOwogIH0KfQqBkwBOTjwBDwEZATQzRgIBTTtNAgFMOk0CARQkARURASEgIAYYEwYRCiQlEwYBHQQBHQpGHCYTBgEvPkATBhgEARANHBQdBwQCAQ4LASgBJxIUFBYXGBcGARM2HQ4GICQoBhwUBAEuLwQBOB4ZJBsmGyYdKB4pHyoeKQ83OgYEASJON0BCIzEGGjkGHTkGHRZCBhUXGjkIHTkIIhk5CA0dGTgIBicjBAE1FScuKgQBNz4hMQYrGjkGHTkGHRZDBi8rGS4EATc2HTEGKxo5Bh05BiQWQgYdIwQBOTQcMQYrGjkGHTkGHRZCBg0pDC4jOgotJRs6ChQ4CA0pGjkIHTkIIhk5CAYKLU0sEjgqBgQBOjYdMQYrGjkGHTkGHRZCBg0pDC4jOgotJRs6ChQ4CA0pGjkIHTkIIhk5CAY3ID8GIz8GQQEvIwQBOzYdMQYrGjkGHTkGHRZCBikZOAYaOAYTLR8fIiQkN0UvCC0ZN0UvCBUGJCxCQgYmIwQBOjYdMQYrGjkGHTkGHRZCBiwxMEEGPCoEAgEaZGFydDpfdm1zZXJ2aWNlL2RldmZzLmRhcnRFb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvdm1zZXJ2aWNlL2NvbnN0YW50cy5kYXJ0g78vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5fdm1zZXJ2aWNlOwoKLy8gVGhlc2UgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCBydW50aW1lL3ZtL3NlcnZpY2UuY2MuCmNsYXNzIENvbnN0YW50cyB7CiAgc3RhdGljIGNvbnN0IGludCBTRVJWSUNFX0VYSVRfTUVTU0FHRV9JRCA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBJU09MQVRFX1NUQVJUVVBfTUVTU0FHRV9JRCA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBJU09MQVRFX1NIVVRET1dOX01FU1NBR0VfSUQgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgV0VCX1NFUlZFUl9DT05UUk9MX01FU1NBR0VfSUQgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgU0VSVkVSX0lORk9fTUVTU0FHRV9JRCA9IDQ7CgogIC8vLyBTaWduYWxzIGFuIFJQQyBjb21pbmcgZnJvbSBuYXRpdmUgY29kZSAoaW5zdGVhZCBvZiBmcm9tIGEgd2Vic29ja2V0CiAgLy8vIGNvbm5lY3Rpb24pLiAgVGhlc2UgY2FsbHMgYXJlIGxpbWl0ZWQgdG8gc2ltcGxlIHJlcXVlc3QtcmVzcG9uc2UgYW5kIGRvCiAgLy8vIG5vdCBhbGxvdyBhcmJpdHJhcnkganNvbi1ycGMgbWVzc2FnZXMuCiAgLy8vCiAgLy8vIFRoZSBtZXNzYWdlcyBhcmUgYW4gYXJyYXkgb2YgbGVuZ3RoIDM6CiAgLy8vICAgKE1FVEhPRF9DQUxMX0ZST01fTkFUSVZFLCBTdHJpbmcganNvblJlcXVlc3QsIFBvcnRJZCByZXBseVBvcnQpLgogIHN0YXRpYyBjb25zdCBpbnQgTUVUSE9EX0NBTExfRlJPTV9OQVRJVkUgPSA1Owp9ChoATk48AQ8BGQE6EjAzNDYvAUpOLQYtSTACAR5kYXJ0Ol92bXNlcnZpY2UvY29uc3RhbnRzLmRhcnRLb3JnLWRhcnRsYW5nLXNkazovLy90aGlyZF9wYXJ0eS9kYXJ0L3Nkay9saWIvdm1zZXJ2aWNlL3J1bm5pbmdfaXNvbGF0ZS5kYXJ0kI4vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5fdm1zZXJ2aWNlOwoKY2xhc3MgUnVubmluZ0lzb2xhdGUgaW1wbGVtZW50cyBNZXNzYWdlUm91dGVyIHsKICBmaW5hbCBpbnQgcG9ydElkOwogIGZpbmFsIFNlbmRQb3J0IHNlbmRQb3J0OwogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIFNldDxTdHJpbmc+IF9yZXN1bWVBcHByb3ZhbHNCeU5hbWUgPSB7fTsKCiAgUnVubmluZ0lzb2xhdGUodGhpcy5wb3J0SWQsIHRoaXMuc2VuZFBvcnQsIHRoaXMubmFtZSk7CgogIFN0cmluZyBnZXQgc2VydmljZUlkID0+ICdpc29sYXRlcy8kcG9ydElkJzsKCiAgc3RhdGljIGNvbnN0IGtJbnZhbGlkUGF1c2VFdmVudCA9IC0xOwogIHN0YXRpYyBjb25zdCBrUGF1c2VPblN0YXJ0TWFzayA9IDEgPDwgMDsKICBzdGF0aWMgY29uc3Qga1BhdXNlT25SZWxvYWRNYXNrID0gMSA8PCAxOwogIHN0YXRpYyBjb25zdCBrUGF1c2VPbkV4aXRNYXNrID0gMSA8PCAyOwogIHN0YXRpYyBjb25zdCBrRGVmYXVsdFJlc3VtZVBlcm1pc3Npb25NYXNrID0KICAgICAga1BhdXNlT25TdGFydE1hc2sgfCBrUGF1c2VPblJlbG9hZE1hc2sgfCBrUGF1c2VPbkV4aXRNYXNrOwoKICAvLy8gUmVzdW1lcyB0aGUgaXNvbGF0ZSBpZiBhbGwgY2xpZW50cyB3aGljaCBuZWVkIHRvIGFwcHJvdmUgYSByZXN1bWUgaGF2ZQogIC8vLyBkb25lIHNvLiBDYWxsZWQgd2hlbiB0aGUgbGFzdCBjbGllbnQgb2YgYSBnaXZlbiBuYW1lIGRpc2Nvbm5lY3RzIG9yCiAgLy8vIGNoYW5nZXMgbmFtZSB0byBlbnN1cmUgd2UgZG9uJ3QgZGVhZGxvY2sgd2FpdGluZyBmb3IgYXBwcm92YWwgdG8gcmVzdW1lCiAgLy8vIGZyb20gYSBkaXNjb25uZWN0ZWQgY2xpZW50LgogIEZ1dHVyZTx2b2lkPiBtYXliZVJlc3VtZUFmdGVyQ2xpZW50Q2hhbmdlKAogICAgICBWTVNlcnZpY2Ugc2VydmljZSwgU3RyaW5nIGRpc2Nvbm5lY3RlZENsaWVudE5hbWUpIGFzeW5jIHsKICAgIC8vIFJlbW92ZSBhcHByb3ZhbHMgZnJvbSB0aGUgZGlzY29ubmVjdGVkIGNsaWVudC4KICAgIF9yZXN1bWVBcHByb3ZhbHNCeU5hbWUucmVtb3ZlKGRpc2Nvbm5lY3RlZENsaWVudE5hbWUpOwoKICAgIC8vIElmIHdlJ3ZlIHJlY2VpdmVkIGFwcHJvdmFsIHRvIHJlc3VtZSBmcm9tIGFsbCBjbGllbnRzIHdobyBjYXJlLCBjbGVhcgogICAgLy8gYXBwcm92YWwgc3RhdGUgYW5kIHJlc3VtZS4KICAgIGZpbmFsIHBhdXNlVHlwZSA9IGF3YWl0IF9pc29sYXRlUGF1c2VUeXBlKHNlcnZpY2UsIHBvcnRJZC50b1N0cmluZygpKTsKICAgIGlmIChwYXVzZVR5cGUgIT0ga0ludmFsaWRQYXVzZUV2ZW50ICYmCiAgICAgICAgX3Nob3VsZFJlc3VtZShzZXJ2aWNlLCBudWxsLCBwYXVzZVR5cGUpKSB7CiAgICAgIF9yZXN1bWVBcHByb3ZhbHNCeU5hbWUuY2xlYXIoKTsKICAgICAgYXdhaXQgTWVzc2FnZS5mb3JNZXRob2QoJ3Jlc3VtZScpCiAgICAgICAgLi5wYXJhbXMuYWRkQWxsKHsKICAgICAgICAgICdpc29sYXRlSWQnOiBwb3J0SWQsCiAgICAgICAgfSkKICAgICAgICAuLnNlbmRUb0lzb2xhdGUoc2VuZFBvcnQpOwogICAgfQogIH0KCiAgYm9vbCBfc2hvdWxkUmVzdW1lKFZNU2VydmljZSBzZXJ2aWNlLCBDbGllbnQgY2xpZW50LCBpbnQgcGF1c2VUeXBlKSB7CiAgICBpZiAoY2xpZW50ICE9IG51bGwpIHsKICAgICAgLy8gTWFyayB0aGUgYXBwcm92YWwgYnkgdGhlIGNsaWVudC4KICAgICAgX3Jlc3VtZUFwcHJvdmFsc0J5TmFtZS5hZGQoY2xpZW50Lm5hbWUpOwogICAgfQogICAgZmluYWwgcmVxdWlyZWRDbGllbnRBcHByb3ZhbHMgPSA8U3RyaW5nPnt9OwogICAgZmluYWwgcGVybWlzc2lvbnMgPSBzZXJ2aWNlLmNsaWVudFJlc3VtZVBlcm1pc3Npb25zOwoKICAgIC8vIERldGVybWluZSB3aGljaCBjbGllbnRzIHJlcXVpcmUgYXBwcm92YWwgZm9yIHRoaXMgcGF1c2UgdHlwZS4KICAgIHBlcm1pc3Npb25zLmZvckVhY2goKG5hbWUsIGNsaWVudE5hbWVQZXJtaXNzaW9ucykgewogICAgICBpZiAoY2xpZW50TmFtZVBlcm1pc3Npb25zLnBlcm1pc3Npb25zTWFzayAmIHBhdXNlVHlwZSAhPSAwKSB7CiAgICAgICAgcmVxdWlyZWRDbGllbnRBcHByb3ZhbHMuYWRkKG5hbWUpOwogICAgICB9CiAgICB9KTsKCiAgICAvLyBXZSByZXF1aXJlIGF0IGxlYXN0IGEgc2luZ2xlIGNsaWVudCB0byByZXN1bWUsIGV2ZW4gaWYgdGhhdCBjbGllbnQKICAgIC8vIGRvZXNuJ3QgcmVxdWlyZSByZXN1bWUgYXBwcm92YWwuCiAgICBpZiAoX3Jlc3VtZUFwcHJvdmFsc0J5TmFtZS5pc0VtcHR5KSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvLyBJZiBhbGwgdGhlIHJlcXVpcmVkIGFwcHJvdmFscyBhcmUgcHJlc2VudCwgd2Ugc2hvdWxkIHJlc3VtZS4KICAgIHJldHVybiBfcmVzdW1lQXBwcm92YWxzQnlOYW1lLmNvbnRhaW5zQWxsKHJlcXVpcmVkQ2xpZW50QXBwcm92YWxzKTsKICB9CgogIEZ1dHVyZTxpbnQ+IF9pc29sYXRlUGF1c2VUeXBlKFZNU2VydmljZSBzZXJ2aWNlLCBTdHJpbmcgaXNvbGF0ZUlkKSBhc3luYyB7CiAgICBmaW5hbCBnZXRJc29sYXRlTWVzc2FnZSA9IE1lc3NhZ2UuZm9yTWV0aG9kKCdnZXRJc29sYXRlJykKICAgICAgLi5wYXJhbXMuYWRkQWxsKHsKICAgICAgICAnaXNvbGF0ZUlkJzogaXNvbGF0ZUlkLAogICAgICB9KTsKICAgIGZpbmFsIHJlc3VsdCA9CiAgICAgICAgKGF3YWl0IHJvdXRlUmVxdWVzdChzZXJ2aWNlLCBnZXRJc29sYXRlTWVzc2FnZSkpLmRlY29kZUpzb24oKTsKICAgIGZpbmFsIHBhdXNlRXZlbnQgPSByZXN1bHRbJ3Jlc3VsdCddWydwYXVzZUV2ZW50J107CiAgICBjb25zdCBwYXVzZUV2ZW50cyA9IDxTdHJpbmcsIGludD57CiAgICAgICdQYXVzZVN0YXJ0Jzoga1BhdXNlT25TdGFydE1hc2ssCiAgICAgICdQYXVzZVBvc3RSZXF1ZXN0Jzoga1BhdXNlT25SZWxvYWRNYXNrLAogICAgICAnUGF1c2VFeGl0Jzoga1BhdXNlT25FeGl0TWFzaywKICAgIH07CiAgICBmaW5hbCBraW5kID0gcGF1c2VFdmVudFsna2luZCddOwogICAgcmV0dXJuIHBhdXNlRXZlbnRzW2tpbmRdID8/IGtJbnZhbGlkUGF1c2VFdmVudDsKICB9CgogIEZ1dHVyZTxSZXNwb25zZT4gX3JvdXRlUmVzdW1lUmVxdWVzdCgKICAgICAgVk1TZXJ2aWNlIHNlcnZpY2UsIE1lc3NhZ2UgbWVzc2FnZSkgYXN5bmMgewogICAgLy8gSWYgd2UndmUgcmVjZWl2ZWQgYXBwcm92YWwgdG8gcmVzdW1lIGZyb20gYWxsIGNsaWVudHMgd2hvIGNhcmUsIGNsZWFyCiAgICAvLyBhcHByb3ZhbCBzdGF0ZSBhbmQgcmVzdW1lLgogICAgZmluYWwgcGF1c2VUeXBlID0KICAgICAgICBhd2FpdCBfaXNvbGF0ZVBhdXNlVHlwZShzZXJ2aWNlLCBtZXNzYWdlLnBhcmFtc1snaXNvbGF0ZUlkJ10pOwogICAgaWYgKHBhdXNlVHlwZSA9PSBrSW52YWxpZFBhdXNlRXZlbnQgfHwKICAgICAgICBfc2hvdWxkUmVzdW1lKHNlcnZpY2UsIG1lc3NhZ2UuY2xpZW50LCBwYXVzZVR5cGUpKSB7CiAgICAgIF9yZXN1bWVBcHByb3ZhbHNCeU5hbWUuY2xlYXIoKTsKICAgICAgcmV0dXJuIG1lc3NhZ2Uuc2VuZFRvSXNvbGF0ZShzZW5kUG9ydCk7CiAgICB9CgogICAgLy8gV2UncmUgc3RpbGwgYXdhaXRpbmcgc29tZSBhcHByb3ZhbHMuIFNpbXBseSByZXR1cm4gc3VjY2VzcywgYnV0IGRvbid0CiAgICAvLyByZXN1bWUgeWV0LgogICAgcmV0dXJuIFJlc3BvbnNlKFJlc3BvbnNlUGF5bG9hZEtpbmQuU3RyaW5nLCBlbmNvZGVTdWNjZXNzKG1lc3NhZ2UpKTsKICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxSZXNwb25zZT4gcm91dGVSZXF1ZXN0KFZNU2VydmljZSBzZXJ2aWNlLCBNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIGlmIChtZXNzYWdlLm1ldGhvZCA9PSAncmVzdW1lJykgewogICAgICByZXR1cm4gX3JvdXRlUmVzdW1lUmVxdWVzdChzZXJ2aWNlLCBtZXNzYWdlKTsKICAgIH0KICAgIC8vIFNlbmQgbWVzc2FnZSB0byBpc29sYXRlLgogICAgcmV0dXJuIG1lc3NhZ2Uuc2VuZFRvSXNvbGF0ZShzZW5kUG9ydCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJvdXRlUmVzcG9uc2UoTWVzc2FnZSBtZXNzYWdlKSB7fQp9CnkATk48AQ8BGQEwFBsVMQE5AS4BKCssKi5BAU1KTiItQDY7AU0iSyszJigaHwsjBgQBSBoqLwYwOQFFOEQrCAgBSigqFAYBREgEAU0+GCAKE0c3JycuJQclNAQBKDJNIhZHKz0mLgYBTRNJBAEMRiY0BiAsBAEMKQIBJGRhcnQ6X3Ztc2VydmljZS9ydW5uaW5nX2lzb2xhdGUuZGFydExvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi92bXNlcnZpY2UvcnVubmluZ19pc29sYXRlcy5kYXJ0nIcvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQGRhcnQgPSAyLjYKCnBhcnQgb2YgZGFydC5fdm1zZXJ2aWNlOwoKY2xhc3MgUnVubmluZ0lzb2xhdGVzIGltcGxlbWVudHMgTWVzc2FnZVJvdXRlciB7CiAgZmluYWwgTWFwPGludCwgUnVubmluZ0lzb2xhdGU+IGlzb2xhdGVzID0gbmV3IE1hcDxpbnQsIFJ1bm5pbmdJc29sYXRlPigpOwogIGludCBfcm9vdFBvcnRJZDsKCiAgUnVubmluZ0lzb2xhdGVzKCk7CgogIHZvaWQgaXNvbGF0ZVN0YXJ0dXAoaW50IHBvcnRJZCwgU2VuZFBvcnQgc3AsIFN0cmluZyBuYW1lKSB7CiAgICBpZiAoX3Jvb3RQb3J0SWQgPT0gbnVsbCkgewogICAgICBfcm9vdFBvcnRJZCA9IHBvcnRJZDsKICAgIH0KICAgIHZhciByaSA9IG5ldyBSdW5uaW5nSXNvbGF0ZShwb3J0SWQsIHNwLCBuYW1lKTsKICAgIGlzb2xhdGVzW3BvcnRJZF0gPSByaTsKICB9CgogIHZvaWQgaXNvbGF0ZVNodXRkb3duKGludCBwb3J0SWQsIFNlbmRQb3J0IHNwKSB7CiAgICBpZiAoX3Jvb3RQb3J0SWQgPT0gcG9ydElkKSB7CiAgICAgIF9yb290UG9ydElkID0gbnVsbDsKICAgIH0KICAgIGlzb2xhdGVzLnJlbW92ZShwb3J0SWQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnV0dXJlPFJlc3BvbnNlPiByb3V0ZVJlcXVlc3QoVk1TZXJ2aWNlIHNlcnZpY2UsIE1lc3NhZ2UgbWVzc2FnZSkgewogICAgU3RyaW5nIGlzb2xhdGVQYXJhbSA9IG1lc3NhZ2UucGFyYW1zWydpc29sYXRlSWQnXTsKICAgIGludCBpc29sYXRlSWQ7CiAgICBpZiAoIWlzb2xhdGVQYXJhbS5zdGFydHNXaXRoKCdpc29sYXRlcy8nKSkgewogICAgICBtZXNzYWdlLnNldEVycm9yUmVzcG9uc2UoCiAgICAgICAgICBrSW52YWxpZFBhcmFtcywgImludmFsaWQgJ2lzb2xhdGVJZCcgcGFyYW1ldGVyOiAkaXNvbGF0ZVBhcmFtIik7CiAgICAgIHJldHVybiBtZXNzYWdlLnJlc3BvbnNlOwogICAgfQogICAgaXNvbGF0ZVBhcmFtID0gaXNvbGF0ZVBhcmFtLnN1YnN0cmluZygnaXNvbGF0ZXMvJy5sZW5ndGgpOwogICAgaWYgKGlzb2xhdGVQYXJhbSA9PSAncm9vdCcpIHsKICAgICAgaXNvbGF0ZUlkID0gX3Jvb3RQb3J0SWQ7CiAgICB9IGVsc2UgewogICAgICB0cnkgewogICAgICAgIGlzb2xhdGVJZCA9IGludC5wYXJzZShpc29sYXRlUGFyYW0pOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgbWVzc2FnZS5zZXRFcnJvclJlc3BvbnNlKAogICAgICAgICAgICBrSW52YWxpZFBhcmFtcywgImludmFsaWQgJ2lzb2xhdGVJZCcgcGFyYW1ldGVyOiAkaXNvbGF0ZVBhcmFtIik7CiAgICAgICAgcmV0dXJuIG1lc3NhZ2UucmVzcG9uc2U7CiAgICAgIH0KICAgIH0KICAgIHZhciBpc29sYXRlID0gaXNvbGF0ZXNbaXNvbGF0ZUlkXTsKICAgIGlmIChpc29sYXRlID09IG51bGwpIHsKICAgICAgLy8gVGhlcmUgaXMgc29tZSBjaGFuY2UgdGhhdCB0aGlzIGlzb2xhdGUgbWF5IGhhdmUgbGl2ZWQgYmVmb3JlLAogICAgICAvLyBzbyByZXR1cm4gYSBzZW50aW5lbCByYXRoZXIgdGhhbiBhbiBlcnJvci4KICAgICAgdmFyIHJlc3VsdCA9IHsKICAgICAgICAndHlwZSc6ICdTZW50aW5lbCcsCiAgICAgICAgJ2tpbmQnOiAnQ29sbGVjdGVkJywKICAgICAgICAndmFsdWVBc1N0cmluZyc6ICc8Y29sbGVjdGVkPicsCiAgICAgIH07CiAgICAgIG1lc3NhZ2Uuc2V0UmVzcG9uc2UoZW5jb2RlUmVzdWx0KG1lc3NhZ2UsIHJlc3VsdCkpOwogICAgICByZXR1cm4gbWVzc2FnZS5yZXNwb25zZTsKICAgIH0KCiAgICBpZiAobWVzc2FnZS5tZXRob2QgPT0gJ2V2YWx1YXRlSW5GcmFtZScgfHwgbWVzc2FnZS5tZXRob2QgPT0gJ2V2YWx1YXRlJykgewogICAgICByZXR1cm4gbmV3IF9FdmFsdWF0b3IobWVzc2FnZSwgaXNvbGF0ZSwgc2VydmljZSkucnVuKCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gaXNvbGF0ZS5yb3V0ZVJlcXVlc3Qoc2VydmljZSwgbWVzc2FnZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJvdXRlUmVzcG9uc2UoTWVzc2FnZSBtZXNzYWdlKSB7fQp9CgovLy8gQ2xhc3MgdGhhdCBrbm93cyBob3cgdG8gb3JjaGVzdHJhdGUgZXhwcmVzc2lvbiBldmFsdWF0aW9uIGluIGRhcnQyIHdvcmxkLgpjbGFzcyBfRXZhbHVhdG9yIHsKICBfRXZhbHVhdG9yKHRoaXMuX21lc3NhZ2UsIHRoaXMuX2lzb2xhdGUsIHRoaXMuX3NlcnZpY2UpOwoKICBGdXR1cmU8UmVzcG9uc2U+IHJ1bigpIGFzeW5jIHsKICAgIFJlc3BvbnNlIGJ1aWxkU2NvcGVSZXNwb25zZSA9IGF3YWl0IF9idWlsZFNjb3BlKCk7CiAgICBNYXA8U3RyaW5nLCBkeW5hbWljPiByZXNwb25zZUpzb24gPSBidWlsZFNjb3BlUmVzcG9uc2UuZGVjb2RlSnNvbigpOwoKICAgIGlmIChyZXNwb25zZUpzb24uY29udGFpbnNLZXkoJ2Vycm9yJykpIHsKICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZS5mcm9tKGVuY29kZUNvbXBpbGF0aW9uRXJyb3IoCiAgICAgICAgICBfbWVzc2FnZSwgcmVzcG9uc2VKc29uWydlcnJvciddWydkYXRhJ11bJ2RldGFpbHMnXSkpOwogICAgfQoKICAgIFN0cmluZyBrZXJuZWxCYXNlNjQ7CiAgICB0cnkgewogICAgICBrZXJuZWxCYXNlNjQgPSBhd2FpdCBfY29tcGlsZUV4cHJlc3Npb24ocmVzcG9uc2VKc29uWydyZXN1bHQnXSk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UuZnJvbShlbmNvZGVDb21waWxhdGlvbkVycm9yKF9tZXNzYWdlLCBlLnRvU3RyaW5nKCkpKTsKICAgIH0KICAgIHJldHVybiBfZXZhbHVhdGVDb21waWxlZEV4cHJlc3Npb24oa2VybmVsQmFzZTY0KTsKICB9CgogIE1lc3NhZ2UgX21lc3NhZ2U7CiAgUnVubmluZ0lzb2xhdGUgX2lzb2xhdGU7CiAgVk1TZXJ2aWNlIF9zZXJ2aWNlOwoKICBGdXR1cmU8UmVzcG9uc2U+IF9idWlsZFNjb3BlKCkgewogICAgTWFwPFN0cmluZywgZHluYW1pYz4gcGFyYW1zID0gX3NldHVwUGFyYW1zKCk7CiAgICBwYXJhbXNbJ2lzb2xhdGVJZCddID0gX21lc3NhZ2UucGFyYW1zWydpc29sYXRlSWQnXTsKICAgIE1hcCBidWlsZFNjb3BlUGFyYW1zID0gewogICAgICAnbWV0aG9kJzogJ19idWlsZEV4cHJlc3Npb25FdmFsdWF0aW9uU2NvcGUnLAogICAgICAnaWQnOiBfbWVzc2FnZS5zZXJpYWwsCiAgICAgICdwYXJhbXMnOiBwYXJhbXMsCiAgICB9OwogICAgaWYgKF9tZXNzYWdlLnBhcmFtc1snc2NvcGUnXSAhPSBudWxsKSB7CiAgICAgIGJ1aWxkU2NvcGVQYXJhbXNbJ3BhcmFtcyddWydzY29wZSddID0gX21lc3NhZ2UucGFyYW1zWydzY29wZSddOwogICAgfQogICAgdmFyIGJ1aWxkU2NvcGUgPQogICAgICAgIG5ldyBNZXNzYWdlLl9mcm9tSnNvblJwY1JlcXVlc3QoX21lc3NhZ2UuY2xpZW50LCBidWlsZFNjb3BlUGFyYW1zKTsKCiAgICAvLyBEZWNvZGUgdGhlIEpTT04gYW5kIGFuZCBpbnNlcnQgaXQgaW50byB0aGUgbWFwLiBUaGUgbWFwIGtleQogICAgLy8gaXMgdGhlIHJlcXVlc3QgVXJpLgogICAgcmV0dXJuIF9pc29sYXRlLnJvdXRlUmVxdWVzdChfc2VydmljZSwgYnVpbGRTY29wZSk7CiAgfQoKICBGdXR1cmU8U3RyaW5nPiBfY29tcGlsZUV4cHJlc3Npb24oCiAgICAgIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGJ1aWxkU2NvcGVSZXNwb25zZVJlc3VsdCkgewogICAgQ2xpZW50IGV4dGVybmFsQ2xpZW50ID0KICAgICAgICBfc2VydmljZS5fZmluZEZpcnN0Q2xpZW50VGhhdEhhbmRsZXNTZXJ2aWNlKCdjb21waWxlRXhwcmVzc2lvbicpOwoKICAgIE1hcCBjb21waWxlUGFyYW1zID0gewogICAgICAnaXNvbGF0ZUlkJzogX21lc3NhZ2UucGFyYW1zWydpc29sYXRlSWQnXSwKICAgICAgJ2V4cHJlc3Npb24nOiBfbWVzc2FnZS5wYXJhbXNbJ2V4cHJlc3Npb24nXSwKICAgICAgJ2RlZmluaXRpb25zJzogYnVpbGRTY29wZVJlc3BvbnNlUmVzdWx0WydwYXJhbV9uYW1lcyddLAogICAgICAndHlwZURlZmluaXRpb25zJzogYnVpbGRTY29wZVJlc3BvbnNlUmVzdWx0Wyd0eXBlX3BhcmFtc19uYW1lcyddLAogICAgICAnbGlicmFyeVVyaSc6IGJ1aWxkU2NvcGVSZXNwb25zZVJlc3VsdFsnbGlicmFyeVVyaSddLAogICAgICAnaXNTdGF0aWMnOiBidWlsZFNjb3BlUmVzcG9uc2VSZXN1bHRbJ2lzU3RhdGljJ10sCiAgICB9OwogICAgZHluYW1pYyBrbGFzcyA9IGJ1aWxkU2NvcGVSZXNwb25zZVJlc3VsdFsna2xhc3MnXTsKICAgIGlmIChrbGFzcyAhPSBudWxsKSB7CiAgICAgIGNvbXBpbGVQYXJhbXNbJ2tsYXNzJ10gPSBrbGFzczsKICAgIH0KICAgIGlmIChleHRlcm5hbENsaWVudCAhPSBudWxsKSB7CiAgICAgIHZhciBjb21waWxlRXhwcmVzc2lvbiA9IG5ldyBNZXNzYWdlLmZvck1ldGhvZCgnY29tcGlsZUV4cHJlc3Npb24nKTsKICAgICAgY29tcGlsZUV4cHJlc3Npb24uY2xpZW50ID0gZXh0ZXJuYWxDbGllbnQ7CiAgICAgIGNvbXBpbGVFeHByZXNzaW9uLnBhcmFtcy5hZGRBbGwoY29tcGlsZVBhcmFtcyk7CgogICAgICBmaW5hbCBpZCA9IF9zZXJ2aWNlLl9zZXJ2aWNlUmVxdWVzdHMubmV3SWQoKTsKICAgICAgZmluYWwgb2xkSWQgPSBfbWVzc2FnZS5zZXJpYWw7CiAgICAgIGZpbmFsIGNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXI8U3RyaW5nPigpOwogICAgICBleHRlcm5hbENsaWVudC5zZXJ2aWNlSGFuZGxlc1tpZF0gPSAoTWVzc2FnZSBtKSB7CiAgICAgICAgaWYgKG0gIT0gbnVsbCkgewogICAgICAgICAgY29tcGxldGVyLmNvbXBsZXRlKGpzb24uZW5jb2RlKG0uZm9yd2FyZFRvSnNvbih7J2lkJzogb2xkSWR9KSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb21wbGV0ZXIuY29tcGxldGUoZW5jb2RlUnBjRXJyb3IoX21lc3NhZ2UsIGtTZXJ2aWNlRGlzYXBwZWFyZWQpKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGV4dGVybmFsQ2xpZW50LnBvc3QobmV3IFJlc3BvbnNlLmpzb24oY29tcGlsZUV4cHJlc3Npb24KICAgICAgICAgIC5mb3J3YXJkVG9Kc29uKHsnaWQnOiBpZCwgJ21ldGhvZCc6ICdjb21waWxlRXhwcmVzc2lvbid9KSkpOwogICAgICByZXR1cm4gY29tcGxldGVyLmZ1dHVyZQogICAgICAgICAgLnRoZW4oKFN0cmluZyBzKSA9PiBqc29uRGVjb2RlKHMpKQogICAgICAgICAgLnRoZW4oKGR5bmFtaWMganNvbikgewogICAgICAgIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGpzb25NYXAgPSBqc29uOwogICAgICAgIGlmIChqc29uTWFwLmNvbnRhaW5zS2V5KCdlcnJvcicpKSB7CiAgICAgICAgICB0aHJvdyBqc29uTWFwWydlcnJvciddOwogICAgICAgIH0KICAgICAgICByZXR1cm4ganNvbk1hcFsncmVzdWx0J11bJ3Jlc3VsdCddWydrZXJuZWxCeXRlcyddOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIGZhbGxiYWNrIHRvIGNvbXBpbGUgdXNpbmcga2VybmVsIHNlcnZpY2UKICAgICAgTWFwIGNvbXBpbGVFeHByZXNzaW9uUGFyYW1zID0gewogICAgICAgICdtZXRob2QnOiAnX2NvbXBpbGVFeHByZXNzaW9uJywKICAgICAgICAnaWQnOiBfbWVzc2FnZS5zZXJpYWwsCiAgICAgICAgJ3BhcmFtcyc6IGNvbXBpbGVQYXJhbXMsCiAgICAgIH07CiAgICAgIHZhciBjb21waWxlRXhwcmVzc2lvbiA9IG5ldyBNZXNzYWdlLl9mcm9tSnNvblJwY1JlcXVlc3QoCiAgICAgICAgICBfbWVzc2FnZS5jbGllbnQsIGNvbXBpbGVFeHByZXNzaW9uUGFyYW1zKTsKCiAgICAgIHJldHVybiBfaXNvbGF0ZQogICAgICAgICAgLnJvdXRlUmVxdWVzdChfc2VydmljZSwgY29tcGlsZUV4cHJlc3Npb24pCiAgICAgICAgICAudGhlbigoUmVzcG9uc2UgcmVzcG9uc2UpID0+IHJlc3BvbnNlLmRlY29kZUpzb24oKSkKICAgICAgICAgIC50aGVuKChkeW5hbWljIGpzb24pIHsKICAgICAgICBpZiAoanNvblsncmVzdWx0J10gIT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIGpzb25bJ3Jlc3VsdCddWydrZXJuZWxCeXRlcyddOwogICAgICAgIH0KICAgICAgICB0aHJvdyBqc29uWydlcnJvciddWydkYXRhJ11bJ2RldGFpbHMnXTsKICAgICAgfSk7CiAgICB9CiAgfQoKICBGdXR1cmU8UmVzcG9uc2U+IF9ldmFsdWF0ZUNvbXBpbGVkRXhwcmVzc2lvbihTdHJpbmcga2VybmVsQmFzZTY0KSB7CiAgICBpZiAoa2VybmVsQmFzZTY0LmlzTm90RW1wdHkpIHsKICAgICAgTWFwPFN0cmluZywgZHluYW1pYz4gcGFyYW1zID0gX3NldHVwUGFyYW1zKCk7CiAgICAgIHBhcmFtc1snaXNvbGF0ZUlkJ10gPSBfbWVzc2FnZS5wYXJhbXNbJ2lzb2xhdGVJZCddOwogICAgICBwYXJhbXNbJ2tlcm5lbEJ5dGVzJ10gPSBrZXJuZWxCYXNlNjQ7CiAgICAgIHBhcmFtc1snZGlzYWJsZUJyZWFrcG9pbnRzJ10gPSBfbWVzc2FnZS5wYXJhbXNbJ2Rpc2FibGVCcmVha3BvaW50cyddOwogICAgICBNYXAgcnVuUGFyYW1zID0gewogICAgICAgICdtZXRob2QnOiAnX2V2YWx1YXRlQ29tcGlsZWRFeHByZXNzaW9uJywKICAgICAgICAnaWQnOiBfbWVzc2FnZS5zZXJpYWwsCiAgICAgICAgJ3BhcmFtcyc6IHBhcmFtcywKICAgICAgfTsKICAgICAgaWYgKF9tZXNzYWdlLnBhcmFtc1snc2NvcGUnXSAhPSBudWxsKSB7CiAgICAgICAgcnVuUGFyYW1zWydwYXJhbXMnXVsnc2NvcGUnXSA9IF9tZXNzYWdlLnBhcmFtc1snc2NvcGUnXTsKICAgICAgfQogICAgICB2YXIgcnVuRXhwcmVzc2lvbiA9CiAgICAgICAgICBuZXcgTWVzc2FnZS5fZnJvbUpzb25ScGNSZXF1ZXN0KF9tZXNzYWdlLmNsaWVudCwgcnVuUGFyYW1zKTsKICAgICAgcmV0dXJuIF9pc29sYXRlLnJvdXRlUmVxdWVzdChfc2VydmljZSwgcnVuRXhwcmVzc2lvbik7IC8vIF9tZXNzYWdlCiAgICB9IGVsc2UgewogICAgICAvLyBlbXB0eSBrZXJuZWwgaW5kaWNhdGVzIGRhcnQxIG1vZGUKICAgICAgcmV0dXJuIF9pc29sYXRlLnJvdXRlUmVxdWVzdChfc2VydmljZSwgX21lc3NhZ2UpOwogICAgfQogIH0KCiAgTWFwPFN0cmluZywgZHluYW1pYz4gX3NldHVwUGFyYW1zKCkgewogICAgaWYgKF9tZXNzYWdlLm1ldGhvZCA9PSAnZXZhbHVhdGVJbkZyYW1lJykgewogICAgICByZXR1cm4gPFN0cmluZywgZHluYW1pYz57J2ZyYW1lSW5kZXgnOiBfbWVzc2FnZS5wYXJhbXNbJ2ZyYW1lSW5kZXgnXX07CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoX21lc3NhZ2UubWV0aG9kID09ICdldmFsdWF0ZScpOwogICAgICByZXR1cm4gPFN0cmluZywgZHluYW1pYz57J3RhcmdldElkJzogX21lc3NhZ2UucGFyYW1zWyd0YXJnZXRJZCddfTsKICAgIH0KICB9Cn0KgNoATk48AQ8BGQExTBMBFQE+HxwGMxsEATIhGgYdBAEMRjcTMSBLHwY/Ih8NDC0UIk0hCAYnG0c0FRwdKAk6HwYBTz4NNQYEAQwpAgFOEzsBITdJAS03QAYBGQpHElAGNgQBFBsWASMyOB0zHRgHLEYGFUwBQxs4BAElNxxKARoxMz5IPDgHNxkmBiJKMTYBNCUxOBlLEU0KCT5HHi0hLSwiCjsKDTImKB8hCT81ARY1PiEmMAowCgYEAUYjNDosTBgxHxoJLkEIGkdJDSs4BgQBKDBNDS1JBgQCASVkYXJ0Ol92bXNlcnZpY2UvcnVubmluZ19pc29sYXRlcy5kYXJ0Q29yZy1kYXJ0bGFuZy1zZGs6Ly8vdGhpcmRfcGFydHkvZGFydC9zZGsvbGliL3Ztc2VydmljZS9tZXNzYWdlLmRhcnSe+i8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0Ll92bXNlcnZpY2U7CgplbnVtIE1lc3NhZ2VUeXBlIHsgUmVxdWVzdCwgTm90aWZpY2F0aW9uLCBSZXNwb25zZSB9CgpjbGFzcyBNZXNzYWdlIHsKICBmaW5hbCBDb21wbGV0ZXI8UmVzcG9uc2U+IF9jb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPFJlc3BvbnNlPi5zeW5jKCk7CiAgYm9vbCBnZXQgY29tcGxldGVkID0+IF9jb21wbGV0ZXIuaXNDb21wbGV0ZWQ7CgogIC8vLyBGdXR1cmUgb2YgcmVzcG9uc2UuCiAgRnV0dXJlPFJlc3BvbnNlPiBnZXQgcmVzcG9uc2UgPT4gX2NvbXBsZXRlci5mdXR1cmU7CiAgQ2xpZW50IGNsaWVudDsKCiAgLy8gSXMgYSBub3RpZmljYXRpb24gbWVzc2FnZSAobm8gc2VyaWFsKQogIGZpbmFsIE1lc3NhZ2VUeXBlIHR5cGU7CgogIC8vIENsaWVudC1zaWRlIGlkZW50aWZpZXIgZm9yIHRoaXMgbWVzc2FnZS4KICBmaW5hbCBzZXJpYWw7CgogIGZpbmFsIFN0cmluZyBtZXRob2Q7CgogIGZpbmFsIE1hcCBwYXJhbXMgPSBuZXcgTWFwKCk7CiAgZmluYWwgTWFwIHJlc3VsdCA9IG5ldyBNYXAoKTsKICBmaW5hbCBNYXAgZXJyb3IgPSBuZXcgTWFwKCk7CgogIGZhY3RvcnkgTWVzc2FnZS5mcm9tSnNvblJwYyhDbGllbnQgY2xpZW50LCBNYXAgbWFwKSB7CiAgICBpZiAobWFwLmNvbnRhaW5zS2V5KCdpZCcpKSB7CiAgICAgIGZpbmFsIGlkID0gbWFwWydpZCddOwogICAgICBpZiAoaWQgIT0gbnVsbCAmJiBpZCBpcyEgbnVtICYmIGlkIGlzISBTdHJpbmcpIHsKICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCciaWQiIG11c3QgYmUgYSBudW1iZXIsIHN0cmluZywgb3IgbnVsbC4nKTsKICAgICAgfQogICAgICBpZiAobWFwLmNvbnRhaW5zS2V5KCdtZXRob2QnKSkgewogICAgICAgIHJldHVybiBuZXcgTWVzc2FnZS5fZnJvbUpzb25ScGNSZXF1ZXN0KGNsaWVudCwgbWFwKTsKICAgICAgfQogICAgICBpZiAobWFwLmNvbnRhaW5zS2V5KCdyZXN1bHQnKSkgewogICAgICAgIHJldHVybiBuZXcgTWVzc2FnZS5fZnJvbUpzb25ScGNSZXN1bHQoY2xpZW50LCBtYXApOwogICAgICB9CiAgICAgIGlmIChtYXAuY29udGFpbnNLZXkoJ2Vycm9yJykpIHsKICAgICAgICByZXR1cm4gbmV3IE1lc3NhZ2UuX2Zyb21Kc29uUnBjRXJyb3IoY2xpZW50LCBtYXApOwogICAgICB9CiAgICB9IGVsc2UgaWYgKG1hcC5jb250YWluc0tleSgnbWV0aG9kJykpIHsKICAgICAgcmV0dXJuIG5ldyBNZXNzYWdlLl9mcm9tSnNvblJwY05vdGlmaWNhdGlvbihjbGllbnQsIG1hcCk7CiAgICB9CiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0Jyk7CiAgfQoKICAvLyBodHRwOi8vd3d3Lmpzb25ycGMub3JnL3NwZWNpZmljYXRpb24jcmVxdWVzdF9vYmplY3QKICBNZXNzYWdlLl9mcm9tSnNvblJwY1JlcXVlc3QoQ2xpZW50IGNsaWVudCwgTWFwIG1hcCkKICAgICAgOiBjbGllbnQgPSBjbGllbnQsCiAgICAgICAgdHlwZSA9IE1lc3NhZ2VUeXBlLlJlcXVlc3QsCiAgICAgICAgc2VyaWFsID0gbWFwWydpZCddLAogICAgICAgIG1ldGhvZCA9IG1hcFsnbWV0aG9kJ10gewogICAgaWYgKG1hcFsncGFyYW1zJ10gIT0gbnVsbCkgewogICAgICBwYXJhbXMuYWRkQWxsKG1hcFsncGFyYW1zJ10pOwogICAgfQogIH0KCiAgLy8gaHR0cDovL3d3dy5qc29ucnBjLm9yZy9zcGVjaWZpY2F0aW9uI25vdGlmaWNhdGlvbgogIE1lc3NhZ2UuX2Zyb21Kc29uUnBjTm90aWZpY2F0aW9uKENsaWVudCBjbGllbnQsIE1hcCBtYXApCiAgICAgIDogY2xpZW50ID0gY2xpZW50LAogICAgICAgIHR5cGUgPSBNZXNzYWdlVHlwZS5Ob3RpZmljYXRpb24sCiAgICAgICAgbWV0aG9kID0gbWFwWydtZXRob2QnXSwKICAgICAgICBzZXJpYWwgPSBudWxsIHsKICAgIGlmIChtYXBbJ3BhcmFtcyddICE9IG51bGwpIHsKICAgICAgcGFyYW1zLmFkZEFsbChtYXBbJ3BhcmFtcyddKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly93d3cuanNvbnJwYy5vcmcvc3BlY2lmaWNhdGlvbiNyZXNwb25zZV9vYmplY3QKICBNZXNzYWdlLl9mcm9tSnNvblJwY1Jlc3VsdChDbGllbnQgY2xpZW50LCBNYXAgbWFwKQogICAgICA6IGNsaWVudCA9IGNsaWVudCwKICAgICAgICB0eXBlID0gTWVzc2FnZVR5cGUuUmVzcG9uc2UsCiAgICAgICAgc2VyaWFsID0gbWFwWydpZCddLAogICAgICAgIG1ldGhvZCA9IG51bGwgewogICAgcmVzdWx0LmFkZEFsbChtYXBbJ3Jlc3VsdCddKTsKICB9CgogIC8vIGh0dHA6Ly93d3cuanNvbnJwYy5vcmcvc3BlY2lmaWNhdGlvbiNyZXNwb25zZV9vYmplY3QKICBNZXNzYWdlLl9mcm9tSnNvblJwY0Vycm9yKENsaWVudCBjbGllbnQsIE1hcCBtYXApCiAgICAgIDogY2xpZW50ID0gY2xpZW50LAogICAgICAgIHR5cGUgPSBNZXNzYWdlVHlwZS5SZXNwb25zZSwKICAgICAgICBzZXJpYWwgPSBtYXBbJ2lkJ10sCiAgICAgICAgbWV0aG9kID0gbnVsbCB7CiAgICBlcnJvci5hZGRBbGwobWFwWydlcnJvciddKTsKICB9CgogIHN0YXRpYyBTdHJpbmcgX21ldGhvZE5hbWVGcm9tVXJpKFVyaSB1cmkpIHsKICAgIGlmICh1cmkgPT0gbnVsbCkgewogICAgICByZXR1cm4gJyc7CiAgICB9CiAgICBpZiAodXJpLnBhdGhTZWdtZW50cy5sZW5ndGggPT0gMCkgewogICAgICByZXR1cm4gJyc7CiAgICB9CiAgICByZXR1cm4gdXJpLnBhdGhTZWdtZW50c1swXTsKICB9CgogIE1lc3NhZ2UuZm9yTWV0aG9kKFN0cmluZyBtZXRob2QpCiAgICAgIDogY2xpZW50ID0gbnVsbCwKICAgICAgICBtZXRob2QgPSBtZXRob2QsCiAgICAgICAgdHlwZSA9IE1lc3NhZ2VUeXBlLlJlcXVlc3QsCiAgICAgICAgc2VyaWFsID0gJyc7CgogIE1lc3NhZ2UuZnJvbVVyaSh0aGlzLmNsaWVudCwgVXJpIHVyaSkKICAgICAgOiB0eXBlID0gTWVzc2FnZVR5cGUuUmVxdWVzdCwKICAgICAgICBzZXJpYWwgPSAnJywKICAgICAgICBtZXRob2QgPSBfbWV0aG9kTmFtZUZyb21VcmkodXJpKSB7CiAgICBwYXJhbXMuYWRkQWxsKHVyaS5xdWVyeVBhcmFtZXRlcnMpOwogIH0KCiAgTWVzc2FnZS5mb3JJc29sYXRlKHRoaXMuY2xpZW50LCBVcmkgdXJpLCBSdW5uaW5nSXNvbGF0ZSBpc29sYXRlKQogICAgICA6IHR5cGUgPSBNZXNzYWdlVHlwZS5SZXF1ZXN0LAogICAgICAgIHNlcmlhbCA9ICcnLAogICAgICAgIG1ldGhvZCA9IF9tZXRob2ROYW1lRnJvbVVyaSh1cmkpIHsKICAgIHBhcmFtcy5hZGRBbGwodXJpLnF1ZXJ5UGFyYW1ldGVycyk7CiAgICBwYXJhbXNbJ2lzb2xhdGVJZCddID0gaXNvbGF0ZS5zZXJ2aWNlSWQ7CiAgfQoKICBVcmkgdG9VcmkoKSB7CiAgICByZXR1cm4gbmV3IFVyaShwYXRoOiBtZXRob2QsIHF1ZXJ5UGFyYW1ldGVyczogcGFyYW1zKTsKICB9CgogIGR5bmFtaWMgdG9Kc29uKCkgewogICAgdGhyb3cgJ3Vuc3VwcG9ydGVkJzsKICB9CgogIGR5bmFtaWMgZm9yd2FyZFRvSnNvbihbTWFwIG92ZXJsb2Fkc10pIHsKICAgIE1hcDxkeW5hbWljLCBkeW5hbWljPiBqc29uID0geydqc29ucnBjJzogJzIuMCcsICdpZCc6IHNlcmlhbH07CiAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgY2FzZSBNZXNzYWdlVHlwZS5SZXF1ZXN0OgogICAgICBjYXNlIE1lc3NhZ2VUeXBlLk5vdGlmaWNhdGlvbjoKICAgICAgICBqc29uWydtZXRob2QnXSA9IG1ldGhvZDsKICAgICAgICBpZiAocGFyYW1zLmlzTm90RW1wdHkpIHsKICAgICAgICAgIGpzb25bJ3BhcmFtcyddID0gcGFyYW1zOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBNZXNzYWdlVHlwZS5SZXNwb25zZToKICAgICAgICBpZiAocmVzdWx0LmlzTm90RW1wdHkpIHsKICAgICAgICAgIGpzb25bJ3Jlc3VsdCddID0gcmVzdWx0OwogICAgICAgIH0KICAgICAgICBpZiAoZXJyb3IuaXNOb3RFbXB0eSkgewogICAgICAgICAganNvblsnZXJyb3InXSA9IGVycm9yOwogICAgICAgIH0KICAgIH0KICAgIGlmIChvdmVybG9hZHMgIT0gbnVsbCkgewogICAgICBqc29uLmFkZEFsbChvdmVybG9hZHMpOwogICAgfQogICAgcmV0dXJuIGpzb247CiAgfQoKICAvLyBDYWxscyB0b1N0cmluZyBvbiBhbGwgbm9uLVN0cmluZyBlbGVtZW50cyBvZiBbbGlzdF0uIFdlIGRvIHRoaXMgc28gYWxsCiAgLy8gZWxlbWVudHMgaW4gdGhlIGxpc3QgYXJlIHN0cmluZ3MsIG1ha2luZyBjb25zdW1wdGlvbiBieSBDKysgc2ltcGxlci4KICAvLyBUaGlzIGhhcyBhIHNpZGUgZWZmZWN0IHRoYXQgYm9vbGVhbiBsaXRlcmFsIHZhbHVlcyBsaWtlIHRydWUgYmVjb21lICd0cnVlJwogIC8vIGFuZCB0aHVzIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gdGhlIHN0cmluZyBsaXRlcmFsICd0cnVlJy4KICBMaXN0PFN0cmluZz4gX21ha2VBbGxTdHJpbmcoTGlzdCBsaXN0KSB7CiAgICBpZiAobGlzdCA9PSBudWxsKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgdmFyIG5ld19saXN0ID0gbmV3IExpc3Q8U3RyaW5nPihsaXN0Lmxlbmd0aCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgbmV3X2xpc3RbaV0gPSBsaXN0W2ldLnRvU3RyaW5nKCk7CiAgICB9CiAgICByZXR1cm4gbmV3X2xpc3Q7CiAgfQoKICBGdXR1cmU8UmVzcG9uc2U+IHNlbmRUb0lzb2xhdGUoU2VuZFBvcnQgc2VuZFBvcnQpIHsKICAgIGZpbmFsIHJlY2VpdmVQb3J0ID0gbmV3IFJhd1JlY2VpdmVQb3J0KCk7CiAgICByZWNlaXZlUG9ydC5oYW5kbGVyID0gKHZhbHVlKSB7CiAgICAgIHJlY2VpdmVQb3J0LmNsb3NlKCk7CiAgICAgIF9zZXRSZXNwb25zZUZyb21Qb3J0KHZhbHVlKTsKICAgIH07CiAgICB2YXIga2V5cyA9IF9tYWtlQWxsU3RyaW5nKHBhcmFtcy5rZXlzLnRvTGlzdChncm93YWJsZTogZmFsc2UpKTsKICAgIHZhciB2YWx1ZXMgPSBfbWFrZUFsbFN0cmluZyhwYXJhbXMudmFsdWVzLnRvTGlzdChncm93YWJsZTogZmFsc2UpKTsKICAgIHZhciByZXF1ZXN0ID0gbmV3IExpc3QoNikKICAgICAgLi5bMF0gPSAwIC8vIE1ha2Ugcm9vbSBmb3IgT09CIG1lc3NhZ2UgdHlwZS4KICAgICAgLi5bMV0gPSByZWNlaXZlUG9ydC5zZW5kUG9ydAogICAgICAuLlsyXSA9IHNlcmlhbAogICAgICAuLlszXSA9IG1ldGhvZAogICAgICAuLls0XSA9IGtleXMKICAgICAgLi5bNV0gPSB2YWx1ZXM7CiAgICBpZiAoIXNlbmRJc29sYXRlU2VydmljZU1lc3NhZ2Uoc2VuZFBvcnQsIHJlcXVlc3QpKSB7CiAgICAgIHJlY2VpdmVQb3J0LmNsb3NlKCk7CiAgICAgIF9jb21wbGV0ZXIuY29tcGxldGUobmV3IFJlc3BvbnNlLmludGVybmFsRXJyb3IoCiAgICAgICAgICAnY291bGQgbm90IHNlbmQgbWVzc2FnZSBbJHtzZXJpYWx9XSB0byBpc29sYXRlJykpOwogICAgfQogICAgcmV0dXJuIF9jb21wbGV0ZXIuZnV0dXJlOwogIH0KCiAgLy8gV2UgY3VycmVudGx5IHN1cHBvcnQgdHdvIHdheXMgb2YgcGFzc2luZyBwYXJhbWV0ZXJzIGZyb20gRGFydCBjb2RlIHRvIEMKICAvLyBjb2RlLiBUaGUgb3JpZ2luYWwgd2F5IGFsd2F5cyBjb252ZXJ0cyB0aGUgcGFyYW1ldGVycyB0byBzdHJpbmdzIGJlZm9yZQogIC8vIHBhc3NpbmcgdGhlbSBvdmVyLiBPdXIgZ29hbCBpcyB0byBjb252ZXJ0IGFsbCBDIGhhbmRsZXJzIHRvIHRha2UgdGhlCiAgLy8gcGFyYW1ldGVycyBhcyBEYXJ0IG9iamVjdHMgYnV0IHVudGlsIHRoZSBjb252ZXJzaW9uIGlzIGNvbXBsZXRlLCB3ZQogIC8vIG1haW50YWluIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBtZXRob2RzIGJlbG93LgogIGJvb2wgX21ldGhvZE5lZWRzT2JqZWN0UGFyYW1ldGVycyhTdHJpbmcgbWV0aG9kKSB7CiAgICBzd2l0Y2ggKG1ldGhvZCkgewogICAgICBjYXNlICdfbGlzdERldkZTJzoKICAgICAgY2FzZSAnX2xpc3REZXZGU0ZpbGVzJzoKICAgICAgY2FzZSAnX2NyZWF0ZURldkZTJzoKICAgICAgY2FzZSAnX2RlbGV0ZURldkZTJzoKICAgICAgY2FzZSAnX3dyaXRlRGV2RlNGaWxlJzoKICAgICAgY2FzZSAnX3dyaXRlRGV2RlNGaWxlcyc6CiAgICAgIGNhc2UgJ19yZWFkRGV2RlNGaWxlJzoKICAgICAgY2FzZSAnX3NwYXduVXJpJzoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQoKICBGdXR1cmU8UmVzcG9uc2U+IHNlbmRUb1ZNKCkgewogICAgZmluYWwgcmVjZWl2ZVBvcnQgPSBuZXcgUmF3UmVjZWl2ZVBvcnQoKTsKICAgIHJlY2VpdmVQb3J0LmhhbmRsZXIgPSAodmFsdWUpIHsKICAgICAgcmVjZWl2ZVBvcnQuY2xvc2UoKTsKICAgICAgX3NldFJlc3BvbnNlRnJvbVBvcnQodmFsdWUpOwogICAgfTsKICAgIHZhciBrZXlzID0gcGFyYW1zLmtleXMudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICB2YXIgdmFsdWVzID0gcGFyYW1zLnZhbHVlcy50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICAgIGlmICghX21ldGhvZE5lZWRzT2JqZWN0UGFyYW1ldGVycyhtZXRob2QpKSB7CiAgICAgIGtleXMgPSBfbWFrZUFsbFN0cmluZyhrZXlzKTsKICAgICAgdmFsdWVzID0gX21ha2VBbGxTdHJpbmcodmFsdWVzKTsKICAgIH0KCiAgICBmaW5hbCByZXF1ZXN0ID0gbmV3IExpc3QoNikKICAgICAgLi5bMF0gPSAwIC8vIE1ha2Ugcm9vbSBmb3IgT09CIG1lc3NhZ2UgdHlwZS4KICAgICAgLi5bMV0gPSByZWNlaXZlUG9ydC5zZW5kUG9ydAogICAgICAuLlsyXSA9IHNlcmlhbAogICAgICAuLlszXSA9IG1ldGhvZAogICAgICAuLls0XSA9IGtleXMKICAgICAgLi5bNV0gPSB2YWx1ZXM7CgogICAgaWYgKF9tZXRob2ROZWVkc09iamVjdFBhcmFtZXRlcnMobWV0aG9kKSkgewogICAgICAvLyBXZSB1c2UgYSBkaWZmZXJlbnQgbWV0aG9kIGludm9jYXRpb24gcGF0aCBoZXJlLgogICAgICBzZW5kT2JqZWN0Um9vdFNlcnZpY2VNZXNzYWdlKHJlcXVlc3QpOwogICAgfSBlbHNlIHsKICAgICAgc2VuZFJvb3RTZXJ2aWNlTWVzc2FnZShyZXF1ZXN0KTsKICAgIH0KCiAgICByZXR1cm4gX2NvbXBsZXRlci5mdXR1cmU7CiAgfQoKICB2b2lkIF9zZXRSZXNwb25zZUZyb21Qb3J0KGR5bmFtaWMgcmVzcG9uc2UpIHsKICAgIGlmIChyZXNwb25zZSA9PSBudWxsKSB7CiAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGhhdmUgYSBudWxsIHJlc3BvbnNlIGZvciBOb3RpZmljYXRpb25zLgogICAgICBhc3NlcnQodHlwZSA9PSBNZXNzYWdlVHlwZS5Ob3RpZmljYXRpb24pOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIF9jb21wbGV0ZXIuY29tcGxldGUoUmVzcG9uc2UuZnJvbShyZXNwb25zZSkpOwogIH0KCiAgdm9pZCBzZXRSZXNwb25zZShTdHJpbmcgcmVzcG9uc2UpIHsKICAgIF9jb21wbGV0ZXIuY29tcGxldGUobmV3IFJlc3BvbnNlKFJlc3BvbnNlUGF5bG9hZEtpbmQuU3RyaW5nLCByZXNwb25zZSkpOwogIH0KCiAgdm9pZCBzZXRFcnJvclJlc3BvbnNlKGludCBjb2RlLCBTdHJpbmcgZGV0YWlscykgewogICAgc2V0UmVzcG9uc2UoZW5jb2RlUnBjRXJyb3IodGhpcywgY29kZSwgZGV0YWlsczogJyRtZXRob2Q6ICRkZXRhaWxzJykpOwogIH0KfQoKYm9vbCBzZW5kSXNvbGF0ZVNlcnZpY2VNZXNzYWdlKFNlbmRQb3J0IHNwLCBMaXN0IG0pCiAgICBuYXRpdmUgIlZNU2VydmljZV9TZW5kSXNvbGF0ZVNlcnZpY2VNZXNzYWdlIjsKCnZvaWQgc2VuZFJvb3RTZXJ2aWNlTWVzc2FnZShMaXN0IG0pIG5hdGl2ZSAiVk1TZXJ2aWNlX1NlbmRSb290U2VydmljZU1lc3NhZ2UiOwoKdm9pZCBzZW5kT2JqZWN0Um9vdFNlcnZpY2VNZXNzYWdlKExpc3QgbSkKICAgIG5hdGl2ZSAiVk1TZXJ2aWNlX1NlbmRPYmplY3RSb290U2VydmljZU1lc3NhZ2UiOwqBDwBOTjwBDwEZATUBEEkwARo2EQErGgEuEAEXASAgHwE4IRw3SAgnPQgnPAgmOwgsQAYzBAE5NhkkHCEhJAYEATc7GSkgGCEkBgQBOjUZJRwYIgQBOjQZJRwYIAQBLhcRBigRBiAEASMXGSQVASgkFSsoBAFDJBUrKC0EARA7BAEVGQQBK0MUICUhISMKDyEhIwogIQoGHR4GEQQBTEpQQCsYEwYyLCgGFQQBNi4kGyMHREgeMyMVFRMWORs2PQYeBAFNTUpJMzUWGR4bGx4fHRgVDxYGBAEgLiQbIwc0ODEjJwYBIDMjFRUTFgEwOS0NJwYBHgQBMBxAMBMGMgQBJk0EATRLBAIBNDIBTwEqNQEcZGFydDpfdm1zZXJ2aWNlL21lc3NhZ2UuZGFydEpvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi92bXNlcnZpY2UvbWVzc2FnZV9yb3V0ZXIuZGFydInQLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEBkYXJ0ID0gMi42CgpwYXJ0IG9mIGRhcnQuX3Ztc2VydmljZTsKCmFic3RyYWN0IGNsYXNzIE1lc3NhZ2VSb3V0ZXIgewogIEZ1dHVyZTxSZXNwb25zZT4gcm91dGVSZXF1ZXN0KFZNU2VydmljZSBzZXJ2aWNlLCBNZXNzYWdlIG1lc3NhZ2UpOwogIHZvaWQgcm91dGVSZXNwb25zZShNZXNzYWdlIG1lc3NhZ2UpOwp9CgplbnVtIFJlc3BvbnNlUGF5bG9hZEtpbmQgewogIC8vLyBSZXNwb25zZSBwYXlsb2FkIGlzIGEgRGFydCBzdHJpbmcuCiAgU3RyaW5nLAoKICAvLy8gUmVzcG9uc2UgcGF5bG9hZCBpcyBhIGJpbmFyeSAoVWludDhMaXN0KS4KICBCaW5hcnksCgogIC8vLyBSZXNwb25zZSBwYXlsb2FkIGlzIGEgc3RyaW5nIGVuY29kZWQgYXMgVVRGOCBieXRlcyAoVWludDhMaXN0KS4KICBVdGY4U3RyaW5nLAp9CgpjbGFzcyBSZXNwb25zZSB7CiAgZmluYWwgUmVzcG9uc2VQYXlsb2FkS2luZCBraW5kOwogIGZpbmFsIHBheWxvYWQ7CgogIC8vLyBDb25zdHJ1Y3QgcmVzcG9uc2Ugb2JqZWN0IHdpdGggdGhlIGdpdmVuIFtwYXlsb2FkXSBhbmQgW2tpbmRdLgogIFJlc3BvbnNlKHRoaXMua2luZCwgdGhpcy5wYXlsb2FkKSB7CiAgICBhc3NlcnQoKCkgewogICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICBjYXNlIFJlc3BvbnNlUGF5bG9hZEtpbmQuU3RyaW5nOgogICAgICAgICAgcmV0dXJuIHBheWxvYWQgaXMgU3RyaW5nOwogICAgICAgIGNhc2UgUmVzcG9uc2VQYXlsb2FkS2luZC5CaW5hcnk6CiAgICAgICAgY2FzZSBSZXNwb25zZVBheWxvYWRLaW5kLlV0ZjhTdHJpbmc6CiAgICAgICAgICByZXR1cm4gcGF5bG9hZCBpcyBVaW50OExpc3Q7CiAgICAgIH0KICAgIH0oKSk7CiAgfQoKICAvLy8gQ29uc3RydWN0IGEgc3RyaW5nIHJlc3BvbnNlIGZyb20gdGhlIGdpdmVuIFt2YWx1ZV0gYnkgZW5jb2RpbmcgaXQKICAvLy8gYXMgSlNPTi4KICBSZXNwb25zZS5qc29uKE9iamVjdCB2YWx1ZSkKICAgICAgOiB0aGlzKFJlc3BvbnNlUGF5bG9hZEtpbmQuU3RyaW5nLCBqc29uLmVuY29kZSh2YWx1ZSkpOwoKICBmYWN0b3J5IFJlc3BvbnNlLmludGVybmFsRXJyb3IoU3RyaW5nIG1lc3NhZ2UpIHsKICAgIHJldHVybiBuZXcgUmVzcG9uc2UuanNvbih7CiAgICAgICd0eXBlJzogJ1NlcnZpY2VFcnJvcicsCiAgICAgICdpZCc6ICcnLAogICAgICAna2luZCc6ICdJbnRlcm5hbEVycm9yJywKICAgICAgJ21lc3NhZ2UnOiBtZXNzYWdlLAogICAgfSk7CiAgfQoKICAvLy8gQ29uc3RydWN0IHJlc3BvbnNlIGZyb20gdGhlIHJlc3BvbnNlIFt2YWx1ZV0gd2hpY2ggY2FuIGJlIGVpdGhlcjoKICAvLy8gICAgIFN0cmluZzogYSBzdHJpbmcKICAvLy8gICAgIEJpbmFyeTogYSBVaW50OExpc3QKICAvLy8gICAgIFV0ZjhTdHJpbmc6IGEgc2luZ2xlIGVsZW1lbnQgbGlzdCBjb250YWluaW5nIFVpbnQ4TGlzdAogIGZhY3RvcnkgUmVzcG9uc2UuZnJvbShPYmplY3QgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSBpcyBTdHJpbmcpIHsKICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShSZXNwb25zZVBheWxvYWRLaW5kLlN0cmluZywgdmFsdWUpOwogICAgfSBlbHNlIGlmICh2YWx1ZSBpcyBVaW50OExpc3QpIHsKICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShSZXNwb25zZVBheWxvYWRLaW5kLkJpbmFyeSwgdmFsdWUpOwogICAgfSBlbHNlIGlmICh2YWx1ZSBpcyBMaXN0KSB7CiAgICAgIGFzc2VydCh2YWx1ZS5sZW5ndGggPT0gMSk7CiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoCiAgICAgICAgICBSZXNwb25zZVBheWxvYWRLaW5kLlV0ZjhTdHJpbmcsIHZhbHVlWzBdIGFzIFVpbnQ4TGlzdCk7CiAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIFJlc3BvbnNlKSB7CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93ICdVbnJlY29nbml6ZWQgcmVzcG9uc2U6ICR7dmFsdWV9JzsKICAgIH0KICB9CgogIC8vLyBEZWNvZGUgSlNPTiBjb250YWluZWQgaW4gdGhpcyByZXNwb25zZS4KICBkeW5hbWljIGRlY29kZUpzb24oKSB7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBSZXNwb25zZVBheWxvYWRLaW5kLlN0cmluZzoKICAgICAgICByZXR1cm4ganNvbi5kZWNvZGUocGF5bG9hZCk7CiAgICAgIGNhc2UgUmVzcG9uc2VQYXlsb2FkS2luZC5VdGY4U3RyaW5nOgogICAgICAgIHJldHVybiBqc29uLmZ1c2UodXRmOCkuZGVjb2RlKHBheWxvYWQpOwogICAgICBjYXNlIFJlc3BvbnNlUGF5bG9hZEtpbmQuQmluYXJ5OgogICAgICAgIHRocm93ICdCaW5hcnkgcmVzcG9uc2VzIGNhbiBub3QgYmUgZGVjb2RlZCc7CiAgICB9CiAgfQp9ClkATk48AQ8BGQEfRScCARspCgEwCgFGDgIBESIRAUUmEBYpJCktJwgKBAFIDx4+ATMfHhAfGggEAUgbHkEoGz4lPiAhG0IkFA0vBgQBLhkUJyUrMCc1BgQCASNkYXJ0Ol92bXNlcnZpY2UvbWVzc2FnZV9yb3V0ZXIuZGFydEhvcmctZGFydGxhbmctc2RrOi8vL3RoaXJkX3BhcnR5L2RhcnQvc2RrL2xpYi92bXNlcnZpY2UvbmFtZWRfbG9va3VwLmRhcnSHDS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBAZGFydCA9IDIuNgoKcGFydCBvZiBkYXJ0Ll92bXNlcnZpY2U7CgovLy8gU2V0IGxpa2UgY29udGFpbmVzIHdoaWNoIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIFN0cmluZyBpZHMgZm9yIGl0cyBpdGVtcwpjbGFzcyBOYW1lZExvb2t1cDxFPiBleHRlbmRzIE9iamVjdCB3aXRoIEl0ZXJhYmxlTWl4aW48RT4gewogIGZpbmFsIElkR2VuZXJhdG9yIF9nZW5lcmF0b3I7CiAgZmluYWwgTWFwPFN0cmluZywgRT4gX2VsZW1lbnRzID0gbmV3IE1hcDxTdHJpbmcsIEU+KCk7CiAgZmluYWwgTWFwPEUsIFN0cmluZz4gX2lkcyA9IG5ldyBNYXA8RSwgU3RyaW5nPigpOwoKICBOYW1lZExvb2t1cCh7U3RyaW5nIHByb2xvZ3VlID0gJyd9KQogICAgICA6IF9nZW5lcmF0b3IgPSBuZXcgSWRHZW5lcmF0b3IocHJvbG9ndWU6IHByb2xvZ3VlKTsKCiAgdm9pZCBhZGQoRSBlKSB7CiAgICBmaW5hbCBpZCA9IF9nZW5lcmF0b3IubmV3SWQoKTsKICAgIF9lbGVtZW50c1tpZF0gPSBlOwogICAgX2lkc1tlXSA9IGlkOwogIH0KCiAgdm9pZCByZW1vdmUoRSBlKSB7CiAgICBmaW5hbCBpZCA9IF9pZHMucmVtb3ZlKGUpOwogICAgX2VsZW1lbnRzLnJlbW92ZShpZCk7CiAgICBfZ2VuZXJhdG9yLnJlbGVhc2UoaWQpOwogIH0KCiAgRSBvcGVyYXRvciBbXShTdHJpbmcgaWQpID0+IF9lbGVtZW50c1tpZF07CiAgU3RyaW5nIGtleU9mKEUgZSkgPT4gX2lkc1tlXTsKCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yID0+IF9pZHMua2V5cy5pdGVyYXRvcjsKfQoKLy8vIEdlbmVyYXRvciBmb3IgdW5pcXVlIGlkcyB3aGljaCByZWN5Y2xlcyBleHBpcmVkIG9uZXMKY2xhc3MgSWRHZW5lcmF0b3IgewogIC8vLyBGaXhlZCBpbml0aWFsIHBhcnQgb2YgdGhlIGlkCiAgZmluYWwgU3RyaW5nIHByb2xvZ3VlOwogIC8vIElkcyBpbiB1c2UKICBmaW5hbCBTZXQ8U3RyaW5nPiBfdXNlZCA9IG5ldyBTZXQ8U3RyaW5nPigpOwoKICAvLy8gSWRzIHRoYXQgaGFzIGJlZW4gcmVsZWFzZWQgKHVzZSB0aGVzZSBiZWZvcmUgZ2VuZXJhdGUgbmV3IG9uZXMpCiAgZmluYWwgU2V0PFN0cmluZz4gX2ZyZWUgPSBuZXcgU2V0PFN0cmluZz4oKTsKCiAgLy8v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gUllgUloAYEmgUywA4FNb4FMsASBT2WBT2iBT7ABgVJrgUywBYFUcIFMsAaBVgABgSiBWLAEgVllgVmwAYFba4FYsAaBXQABgSmBX7AEgWBlgWCwAYFia4FfsAaBZAABgSqBZrADgWeBK4FngSyBZ4EtgWeBLoFngS+BZ4EwgWeBMYFngTKBZ4EzgWeBNIFngTWBZ4E2gWewAYF0gTeBZ4DmgWeBOIFnG4FngM6BZrAFgXqwAYF7gTqBe4FAgXuBQYF7gUKBe4FDgXqBO4F6gTyBeoE9gXqBPoF6gT+BeoFEgWawBIGHgUWBh4FIgYeBA4GHgUuBZrAGgYyAiYGMgTmBjIEagYyBHAGBTYGRsAOBkrABgZOBToGTgU+Bk4FQgZOBUYGTgVKBk4FTgZOAroGTgTqBk4FUgZGwBYGdsAGBnnGBnoFZgZ6BWoGegVyBnoFdgZ6BX4GegWuBnoFsgZGwBIGnsAGBqIFggaiBYoGogWaBqIFpgaiBaoGogVeBqIFtgaiBboGogW+BqIC9gaiBcYGogXaBqIF1gaiBeIGogXqBqID4gahngahrgahmgaiBe4GobIGogXyBp4CJgaeBGoGngRyBp4EdgaeBHoGRsAaBxACBxIFVgcSBVoHEgViBxCIBgY2ByrADgcsbgcuAwoHKsAaBzgABgY6B0LAEgdGwAYHSgY+B0LAGgdQAAYGRgdawA4HXsAGB2IGSgdawCIHagZSB2iKB2iSB2oGZgdqBmoHagZyB2oGdgdqBpYHWsASB44GngeOBqIHjgamB44GqgeOBq4Hjga2B44GxgeOBA4HjgbOB44G0geOBtoHjgbmB44G9geOBv4HjgcSB44ESgeOBx4HjgQ6B44HJgeOByoHjgcuB44HMgeOBz4HjgdCB44HRgeOB0oHjgdOB44HYgeOB2oHjgduB44HcgeOBHoHWsAWCBICUggSByIIEgOOCBIHCggSB1YIEgdeB1rAGggsAgguwAYINgZMBgeWCD7AEghCBjIIQgJyCEICdghCAnoIQga+CEIGwghCBzoIPsAWCGICBgg+wBoIaAAGB6YIcsASCHYCCgh2Ai4IdgI2CHLAGgiEAAYHqgiOwA4IksAGCJYHrgiOwBYIngJSCI7AEgimBqIIpgamCI7AGgiwAAYHsgi6wBIIvgIeCL4CNgi6wBoIyAAGB7YI0sASC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hA2BCYQNsAGED4J2hA+CL4QPgUGED4IwhA2BjIQFsAaEFQABgnmEF7AFhBiAlIQXsASEGoGphBewBoQcAAGCeoQesAOEH7ABhCCCaYQesAWEIoCUhB6wBIQkgamEJLABhCaCG4QmgnuEJoJ8hCaCfYQesAaEKwABgn6ELbADhC6wAYQvgeuEL4IKhC2wBIQysAGEM4DUhDOA1YQzgKiEM4CphDOCH4QzgnuEM4J8hDOCfYQtsAaEPAABgn+EPrADhD+wAYRAgoCEPrAEhEKwAYRDgnuEPrAGhEUAAYKDhEewA4RIsAGESYKEhEewBIRLsAGETIJ7hEewBoROAAGChoRQsAOEUbABhFKCh4RQsASEVLABhFWCe4RQsAaEVwABgoiEWbADhFqwAYRbgoSEW4KAhFmwBIResAGEX4J8hFmwBoRhAAGCioRjsAOEZLABhGWCi4RjsASEZ7ABhGiCG4RognuEY7AGhGsAAYKNhG2wA4RusAGEb4KOhG2wBYRxsAGEcoKPhHKCi4RygpGEbbAHhHawAYR3go+Ed4KLhHeCkYRtsAaEewABgpKEfbADhH6wAYR/goCEfbAEhIGwAYSCgnuEfbAGhIQAAYKThIawA4SHsAGEiIKLhIawBISKsAGEi4IbhIuCe4SGsAaEjgABgpSEkLADhJGwAYSSgoCEkLAEhJSwAYSVghuElYJ7hJCwBoSYAAGCloSasAOEm7ABhJyCl4ScgpiEmrAEhJ+wAYSgghuEoIJ7hJqwBoSjAAGCm4SlsAOEprABhKeB44SlsASEqYCChKmAi4SpgI2EpbAGhK0AAYKchK+wA4SwsAGEsYKdhLGCCoSvsAWEtLABhLWCoISvsASEt7ABhLiA1IS4gNWEuIDWhLiAqIS4gKmEuIIfhLiCe4S4gnyEuIJ9hK+wBoTCAAGCooTEsAOExbABhMaCo4TEsASEyIG4hMSwBoTKAAGCpITMsAOEzbABhM6Co4TOgeuEzLAFhNGAlITMsASE04GphMywBoTVAAGCpYTXsAOE2LABhNmCe4TZgnyE2YJ9hNmB44TXsAWE3rABhN+CP4TXsASE4YCChOGAi4ThgI2E17AGhOUAAYKohOewBITogbiE57AGhOoAAYKqhOywA4TtsAGE7oKrhOywBITwgbiE7LAGhPIAAYKshPSwA4T1sAGE9oJLhPSwBIT4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ilODbIpTg5WKU4NoilOD14pTg9mGFYSPil2wA4pesAqKX4Llil2wBYphgciKYYDjimGDYophgcKKYYHXimGB1YphgQiKXbAGimkAhhWEkIprsAOKbLAKim2EkYptguWKbYLFimuwBIpxgQmKa7AFinOBCoprsAaKdQCGFYSSinewBIp4gQyKeINriniD3Yp4gOeKeINsiniDlYp4g2iKeIPXiniD2Yp3sAaKggCGFYSTioSwA4qFsAqKhoLlioSwBIqIgcmKiILRioiBDIqIg2uKiIDnioiDaIqIgumKiINlioiBEoqIg2yKiIDvioiD3YqIgauKiIPXioiD2YqIg5WKhLAFipmA44qZg2KKmYHIipmDY4qZgQGKmYPaioSwBoqgAIYVhJSKorAGiqMAiqKwBIqlgQyKpYNriqWD3YqlgOeKpYNsiqWDlYqlg2iKpYPXiqWD2YYVhJWKr7AEirCByYqvsAaKsgCGFYSWirSwA4q1sAqKtoGSirSwCIq4AIq4gsCKuIQhirSwBIq8gaeKvIHJiryEl4q8hC+KvIQ/iryEmIq8gIKKvINsiryDa4q8g5WKvIOWiryA54YVhJmKybADisqwCorLhJuKy4ScismwBIrOsAqKz4Sdis+EQ4rJsAaK0gCGFYSeitSwA4rVgbyK1LAEiteEn4rXhKCK14NsiteEoYrXg4yK1LAGit0AhhWEoorfsAOK4LAKiuGEo4rfsASK47AKiuSEpIrkhKWK5ISmiuSDjorjg4yK44Shit+wBYrrsAqK7ISnit+wBoruAIYVhKiK8LAEivGEn4rxhKCK8bAKivSDjor0hKSK8YNsivCwBor4AIYVhKqK+rAEivuwCor8hKSK/IOOivqwBYr/sAqLAISnivqwBosCAIYVhKuLBLADiwWwCosGhKyLBoNfiwSwCIsJgsCLCYQhiwSwBIsMgcmLDISYiwyEP4sMgIKLDINriwyEL4sMhJeLDINsiwywCosVhFWLDIOViwyDlosMhK6LDIStiwyA54sMhK+LDIDviwSwBYsegciLHoHCix6B1YsegdeLHoDjix6BCIsEsAaLJQCGFYSwiyewA4sosAqLKYSsiymEsYspgsWLJ7AEiy2BCYsnsAWLL4EKiyewBosxAIYVhLSLM7ADizSwCos1g16LNYP/izWEtYs1hLaLNYNhizOwCIs7gsCLO4QhizOwBIs+gcmLPoESiz6B3Is+gcqLPoCCiz6Da4s+g2yLPrAKi0aDkYtGhMCLRoTCi0aEuYtGgNSLRoOOi0aEv4tGhLqLRoS8iz6DlYs+g5aLPoDniz6A74s+hJiLPoQ/iz6El4s+hC+LM7AFi1iBCItYgOOLWIHIi1iBwotYgdWLWIHXizOwBotfAIYVhM+LYbADi2KwCotjhKOLY4TQi2ODYYtjhNGLY4LFi2GwBYtpgQqLYbAEi2uBCYthsAaLbQCGFYTSi2+wBItwgIKLcIHEi3CDi4twg2yLcIHLi3CByYtwhAiLcIQJi3CA54twg2uLcIOPi3CECotwg5WLcIOWi3CDnotwhAyLcIQNi3CEDotwgcqLcIGri3CA74twgaqLcIGzi3CBEotwgbmLcIG9i3CBx4twgb+LcIEOi3CBz4twgdCLcIHRi3CB0otwgdiLcIHai3CB24twgdyLb7AFi5aBCIuWgciLloDji5aDYouWgdeLloHCi5aB1YtvsAaLngCGFYTTi6CwBouhAIugsASLo4CCi6OBxIujg4uLo4Nsi6OBy4ujgcmLo4QIi6OECYujgOeLo4Nri6ODj4ujhAqLo4OVi6ODloujg56Lo4QMi6OEDYujhA6Lo4HKi6OBq4ujgO+Lo4Gqi6OBs4ujgRKLo4G5i6OBvYujgceLo4G/i6OBDoujgc+Lo4HQi6OB0YujgdKLo4HYi6OB2oujgduLo4Hci6CwBYvJgQiLyYHIi8mA44vJg2KLyYHXi8mBwovJgdWGFYTUi9GwBIvShNWL0bAGi9QAhhWE14vWsASL17AKi9iDmIvYg5mL14HJi9eEDovXhA2L14HLi9eECIvXhAmL14Dni9eDa4vXg4+L14QKi9eDlYvXg5aL14Oei9eEDIvXgcqL14Gri9eA74vXgaqL14Gzi9eBEovXgbmL14G9i9eBx4vXgb+L14EOi9eBz4vXgdCL14HRi9eB0ovXgdiL14Hai9eB24vXgdyL1rAFi/yA44v8g2KL/IHXi/yBwov8gdWL1rAGjAIAhhWE2IwEsAOMBbAKjAaC5YwEsASMCLAKjAmDmIwJg5mMCIHEjAiDi4wIgIKMCIDnjAiDa4wIg4+MCIQKjAiDlYwIg5aMCINsjASwBYwWgQiMFoHIjASwBowZAIYVhNqMG7ADjByC0owchNuMHITcjBuwBowgAIYVhN2MIrADjCMijCKwBowlAIYVhN6MJ7ADjCiwCowpgouMKYNhjCmE4IwnsAWMLbAKjC6E4YwuhOKMLoTjjC6DeowuhD6MLoTtjCewB4w1sAqMNoThjCewBIw4sAqMOYTkjDmE54w5hOmMOYTrjDmDjow5hOyMOYTujCewBoxBAIYVhO+MQ7AEjESBG4xDsAaMRgCGFYTwjEiwBoxJAIxIsAWMS4NjjEuD2oxLgciMS4DjjEuDYoxLgQGMSLAEjFKC0YxSgQyMUoNsjFKA54xSgcmMUoESjFKDa4xSg2WMUoNojFKD14xSg9mMUoGrjFKD3YxSg5WMUoLpjFKA74YVhPGMY7ADjGSwCoxlhOGMZYTijGWE44xlg3qMY7AIjGqCwIxqhCGMaoGcjGqEI4xjsASMb7AKjHCE5IxvgtGMb4NsjG+BDIxvg2iMb4NrjG+BEoxvgOeMb4LpjG+DZYxvhPeMb4T4jG+E+YxvhPqMY7AFjH+A44x/g2KMf4HIjH+DY4x/gQGMY7AGjIUAjIWwCoyHgZOGFYT7jImwA4yKsAqMi4T8jIuE/YyLg2GMi4TgjIuE/oyJsAWMkYEKjImwBIyTsAqMlIUAjJSFBIyUhQOMk4EJjImwBoyZAIyZhQGGFYUGjJywA4ydsAqMnoT8jJywBYyggciMoIDjjKCBCIycsASMpIHLjJywBoymAIYVhQiMqLADjKmwCoyqguWMqLAFjKyByIysgOOMrIEIjKiwBoywAIYVhQmMsrAEjLOwCoy0hQOMsrAGjLYAhhWFCoy4sASMubAKjLqFA4y4sAaMvACGFYUMjL6wBIy/sAqMwIUDjL6wBozCAIzChQGGFYUNjMWwBozGAIzFsASMyIHJjMiBq4zIgaqMyIQJjMiBs4zIhAiMyIHEjMiBEozIgbmMyIG9jMiBx4zIgb+MyIEOjMiByozIgcuMyIHPjMiB0IzIgdGMyIHSjMiB2IzIgdqMyIHbjMiB3IzIgO+MxbAFjOGByIzhgOOM4YNijOGBwozhgdWM4YHXhhWFDozosAaM6QCM6LAEjOuAgozrgcSM64OLjOuDbIzrgcuM64HJjOuECIzrhAmM64DnjOuDa4zrg4+M64QKjOuDlYzrg5aM64OejOuEDIzrhA2M64QOjOuByozrgauM64DvjOuBqozrgbOM64ESjOuBuYzrgb2M64HHjOuBv4zrgQ6M64HPjOuB0IzrgdGM64HSjOuB2IzrgdqM64HbjOuB3IzosAWNEYEIjRGByI0RgOONEYNijRGB140RgcKNEYHVhhWFD40ZsAONGrAKjRuE4Y0bhOKNG4TjjRuDeo0ZsAiNIILAjSCEIY0ZsASNI7AKjSSDmI0khOSNJIURjSSFB40jgcmNI4HEjSOAgo0jg2yNI4NrjSODj40jhAqNI4OLjSOEDY0jhA6NI4QMjSOA540jgcuNI4DvjRmwBY03gQiNN4HIjTeA4403g2KNN4HCjTeB1Y03gdeNGbAGjT8AALALjUGwA41ChvWNQrALjUSHyo1Eh82NRIfQjUSH0Y1Eh9KNRIfVjUSH1o1Eh9eNRIfYjUSH2Y1Eh9qNRIfbjUSH3I1Ch8uNQofMjUKHzo1Ch8+NQobnjUKH041Ch9SNQoYzjUGwBI1asAuNW4fdjVuH5I1bh+WNW4fnjVuH6I1bh+mNW4fsjVqH341ah+CNWofhjVqH4o1ah+ONQYU0jWiwA41psAuNaoU1jWqFNo1osASNbYGsjW2FPI1osAaNcACNQYU9jXKwBI1zhT6Nc4U/jXOFQI1zhUGNc4VCjXOFQ41zhUSNc4VFjXOFRo1zhUeNc4VIjXKwBY1/gOaNcrAGjYEAjUGFSY2DsAONhIERjYSFSo2EgtKNhCKNg7AEjYmFS42JhUyNiYU+jYmFP42JhUCNiYVBjYmFQo2JhUONiYVEjYmFRY2JhUaNiYVHjYmFSI2DsAWNl4DmjYOwBo2ZAI1BhU2Nm7ADjZyFTo2bsASNnoVHjZ6FRI2bsAWNoYDmjZuwBo2jAI1BhU+NpbADjaaFUI2mhVGNpoRGjaaByI2lsAWNq4S4jaWwBI2tsAuNroVSja2FU42thVWNrYVWja2FV42lsAaNtACNQYVYjbawA423hVmNt4VajbeFW423hVyNt4VdjbeFXo23hV+Nt4VgjbeFYY23hWKNt4VjjbeFZI23hWWNt4VmjbeFZ423hWiNt4VpjbeFao23hWuNt4VsjbeFbY23hW6Nt4VvjbeFcI23hXGNt4VyjbeFc423hXSNt4V1jbeFdo23hXeNt4V4jbeFeY23hXqNt4V7jbeFfI23hX2Nt4V+jbeFf423hYCNt4WBjbeFgo23hYONt4WEjbeFhY23hYaNt4WH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XrAFkmIikl6wB5JkIpJesASSZrAMkmeIHJJesAaSaQCR+ogjkmuwA5JssAySbYgkkmuwBJJviCWSb4gokm+wDJJyiCmScogqkmuwBpJ1AJH6iC2Sd7ADkniILpJ4iC+SeIgwknewBJJ8gO+Sd7AGkn4AkfqIM5KAsASSgYg0koGIQpKBiESSgLAGkoUAkfqIR5KHsAOSiLAMkomISJKJhAKSiYTQkomISZKIgNySh7AEko+ISpKPiEuSj4RUkoewBpKTsAySlICKkfqITJKWsAOSl7AMkpiITZKWsASSmohOkpqIVJKaiFeSmohakpawBZKfiFuSlrAGkqEAkfqIXJKjsAOSpLAMkqWIXZKliF6SpYhNkqOwBJKpbZKpiGOSqYhWkqmIZpKjsAaSrgCSrohfkfqIapKxsAOSsohrkrKGTZKysAyStYhekrGwBJK3sAySuIhhkriIZZKxsAaSu7AMkryAipH6iGySvrADkr+Ia5K/hk2Sv7AMksKIUpLCiG2SvrAEksWwDJLGiFOSxYhWkr6wB5LJiFCSvrAGksuwDJLMgIoAsA2SzrADks+wDZLQiQiS0IkJks+JCpLPiQuSzrAEktWwDZLWiQyS1okOktaJEJLWiRKS1okUktaJFpLWiRqS1okcktaJHpLWiSCS1okiktaJJZLWiSeS1okpktaJK5LWiS2S1okvktaJMZLWiTOS1ok1ktaJN5LWiTmS1ok7ktaJPZLWiT+S1olBktaJQ5LWiUWS1olHktaJSZLWiUuS1olNktaJT5LWiVGS1olTktaJVZLWiVaS1olXktaJWJLWiVmS1olaktaJW5LWiVyS1oldktaJXpLWiV+S1olgktWJYZLViWOS1YllktWJZpLViWeS1YloktWJaZLViWqS1YlrktWJbJLViW2S1YluktWJb5LViXCS1YlxktWJcpLViXOS1Yl0ktWJdZLViXaS1Yl3ktWJeJLViXmS1Yl6ktWJe5LViXyS1Yl9ktWJfpLViX+S1YmAktWJgZLViYKS1YmDktWJhJLViYWS1YmGktWJh5LViYiS1YmJktWJipLViYuS1YmMktWJjZLViY6S1YmPktWJkJLViZGS1YmSktWJk5LViZSS1YmVktWJlpLViZeS1YmYktWJmZLViZqS1YmbktWJnJLViZ2S1YmektWJn5LViaCS1YmhktWJopLViaOS1YmkktWJpZLViaaS1YmnktWJqJLViamS1YmqktWJrJLOiMeTT7AEk1CwDZNRiMiTUIjMk1CB3JNQgcmTUIjRk1CAjJNPsAiTWIjKk0+wBZNaiMmTWoIcks6I05NdsAaTXgCSzojUk2CwBpNhAJLOiNWTY7AGk2QAks6I1pNmsAaTZwCSzojXk2mwBpNqAJLOiNiTbLAGk20Aks6I2ZNvsAaTcACSzojak3KwBpNzAJLOiNuTdbAGk3YAks6I3JN4sAaTeQCSzojdk3uwBpN8AJLOiN6TfrAGk38Aks6I35OBsAaTggCSzojgk4SwBpOFAJLOiOGTh7AGk4gAks6I4pOKsAaTiwCSzojjk42wBpOOAJLOiOWTkLAGk5EAks6I5pOTsASTlIjnk5SDi5OUiO6TlICMk5OwCJOZiOmTmYjqk5mI65OTsAWTnYIck52I8ZLOiPKToLADk6GwDZOiiPOToLAGk6QAk6SwDZOmiPSSzoj1ks6I95LOiPiSzoj5ks6I+pLOiPuSzoj8ks6I/ZLOiP6Szoj/ks6JAJLOiQGSzokCks6JBJLOiQYAsA6Tt7ACk7iJtpO4M5O4ibeTuIm4k7ewA5O9ixuTvbAOk7+LHJO9A5O9hSGTvQqTt7AEk8SwDpPFix2TxYsfk8WLI5PFiymTxYssk8WLMJPFizmTxIsuk8SLMpPEhSaTxIs1k8SLOpPEiz2TxAuTtwKT1LADk9WJupPVibuT1Ym8k9WJvZPVib6T1Ym/k9WJwJPVicGT1YnCk9WwDpPficOT34nEk9SwB5PiicWT1LAFk+SJxZPUsAaT5gCTt4nGk+iwBJPpiceT6LAGk+sAk7eFIpPtsAOT7onNk+6JzpPuic+T7onQk+6J0ZPuidKT7onTk+2wBJP2idST7bAGk/gAk7eJ1pP6sAaT+wCTt4nXk/2wA5P+sA6T/4nYk/2wBZQBgciT/bAElAOC0ZQDidmT/bAGlAYAk7eJ25QIsAOUCYZNlAiwBpQLAJO3DJQNsAOUDondlA2wBpQQAJO3id6UErADlBOJ35QTieCUE4nhlBOJ4pQTieOUE4nklBOJ5ZQTieaUE4nnlBOJ6JQTiemUE4nqlBOJ65QTieyUE4ntlBOJ7pQTie+UE4nwlBOJ8ZQTifKUE4nzlBOJ9JQTifWUE4n2lBOJ95QTifiUE4n5lBOJ+pQTifuUE4n8lBOJ/ZQTif6UE4n/lBOKAJQTigGUE4oClBOKA5QTigSUE4oFlBOKBpQTigeUE4oIlBOKCZQTigqUE4oLlBOKDJQTig2UE4oOlBOKD5QTihCUE4oRlBOKEpQTihOUE4oUlBOKFZQTihaUE4oXlBOKGJQTihmUE4oalBOKG5QTihyUE4odlBOKHpQTiiCUE4oilBOKJJQTiiaUE4oolBOKKpQTiiyUE4oulBOKMJQTijKUE4o0lBOKNpQTijiUE4o6lBOKPJQTij6UE4pAlBOKQpQTikSUE4pGlBOKSJQTikqUE4pMlBOKTpQTilCUE4pSlBOKVJQTilaUE4pYlBOKWpQTilyUE4pelBOKYJQTimKUE4pklBOKZpQTimiUE4pqlBOKbJQTim6UE4pwlBOKcpQSsAaUfgCTtwaUgLADlIGwDpSCgmmUgLAFlISAlJSAsASUhoGplIaByZSAsAaUiQCTt4p0lIuwA5SMsA6UjYJplI2BOpSNgnuUjYJ8lIuwBJSSgYyUkoCclJKAnZSSgJ6UkrAOlJeCL5SSga+UkoGwlJKBzpSLsAWUnICBlIuwBpSeAJO3B5SgsAOUobAOlKKCaZSgsASUpIHJlKSBuJSgsAaUpwCTt4UllKmwA5SqsA6Uq4JplKmwBJStgayUrYG4lK2ByZSpsAaUsQCTt4p2lLOwBZS0sA6UtYJplLSBCJS0gciUtIDjlLSDYpS0gcKUtIHVlLSB15SzsASUvoHRlL6Bz5S+gdyUvoHElL6B2pS+gO+Us7AGlMUAk7eKd5THsAOUyLAOlMmCaZTHsASUy4EJlMewBZTNgQqUx7AGlM8Ak7eKeJTRsAOU0rAOlNOCaZTRsAiU1QCU0bAElNeByZTRsAaU2bAOlNqAipO3inmU3LAGlN0Ak7eKepTfsAaU4ACU37AFlOKBCJTigOOU4oNilOKBwpTigdWU4oHXlOKEeZTfsASU6oHclOqECJTqgRKU6oHElOqBx5TqgQ6U6oHYlOqB2pTqgduU6oG/lOqBqpTqhAmU6oGrlOqBs5TqgbmU6oG9lOqB0ZTqgdKU6oHPlOqB0JTqgcqU6oHLlOqAgpTqg2uU6oNslOqwCpUEhFOVBIRVlQSEW5Tqg5WU6oOWlOqA55TqgcmU6oQvlOqEWZTqhFyU6oRglOqBDZTqhGGU6oRj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mKWLwJilgQqYpYu+mKWLv5ili/WYebAGmKsAl9KH8JitsASYroiBmK6AjJitsAWYsYIcmK2wBpizAJfSi/mYtbAImLYAmLaLUJi1sASYuYGpmLmAjZi1sAWYvIhBl9KH8pi+sAiYvwCYvrAHmMGC2Ji+sASYw4CNmL6wBZjFiEGX0ov8mMewA5jIsA+YyYv9mMgxmMewBJjMgO+Yx7AFmM6wCZjPgriYx7AHmNGwCZjSgriYx7AGmNQAl9KL/pjWsAiY14wAmNawBJjZi2aX0owCmNuwCJjcAACwEJjesAOY32mY34xWmN+MWJjfjFqY34xcmN+MXpjfjGCY34ximN6wBJjosBCY6YxkmOmMaZjpjGuY6YxsmOmMbpjpjHCY6YxymOmMdJjpjHaY6Yx4mOmMepjpjHyY6YhxmOmMjJjoiB6Y6IgfmOiMgJjojIKY6IyDmOiMhZjojIaY6IyHmOiMiJjojImY6IyKmOiMi5joiJSY3owSmQWwA5kGsBCZB4CumQeME5kHjBSZB4wVmQeMF5kHjBiZB4wamQWwBJkPsBCZEIwcmRCMIpkQjCWZEIwnmQ+EXpkPjCCZD4whmQWwBpkYsBCZGYwbmN6MKJkbsAOZHLAQmR2MFZkdjBeZG7AEmSCwEJkhjCmZIIRemSCMIJkgjCGZG7AGmSYAmN6MLZkosASZKYG6mSmIVpkpjC+ZKYwwmSiwBpkuAJjejDGZMLADmTGEhJkxjDKZMLAEmTSA75k0gIyZNIENmTSBBpk0g8aZNIw2mTSMOZkwsAWZPIIcmTyMNZkwsAaZPwCY3oNMmUGwCJlCAJlCjDqZQbAEmUWEXplFjCCZRYwhmN6MO5lJsAWZSoTbmUqMPJlKjD2ZSow+mUqE3JlKjD+ZSoIcmUqMTJlKjE2ZSoxOmUqMT5lJsASZVoDvmVaAjJlWhA2ZVoxHmVaMSJlWjEmZVoxLmUmwBpleAJjejFCZYLADmWGE25lhjDyZYYw9mWGMPplgsAiZZoxRmWCwBploAJjejFKZarADmWuE25lrjDyZa7AQmW6MU5lujFSZarAImXGMUZlqsAWZc4w9mXOMPplqsAeZdow9mXaMPplqsAaZeQAAsBGZe7ADmXywEZl9jfyZe7AEmX+wEZmAjf2ZgIDumYCN/pmAjf+ZgI4AmYCOBpmAjgiZgI4KmYCODZmAjg+Zf43HmX+NyJl/jc+Zf43RmXuMjpmPsAOZkLARmZGMj5mPsASZk4DvmY+wBpmVAJl7jJCZl7ADmZiMkZmYjJOZmIyVmZiwEZmcjJeZnIyYmZewBZmfjJmZn4hFmZewBJmisBGZo4ybmaOMnZmigO+Zl7AGmacAmXuMoJmpsAOZql2ZqoyhmaqMopmpsASZroDvmamwBpmwsBGZsYCKmXuMpJmzsAOZtIvAmbSMpZmzsAWZt4ymmbOwBJm5gO+ZuYyombmwEZm8jKqZs7AGmb6wEZm/gIqZe4ysmcGwA5nCjK2ZwoyumcKMr5nCjLCZwoyxmcKwEZnIgiGZwbAFmcqMspnKjLOZyoy0mcqMtZnKjLaZyoy3mcqMuJnKjLmZyoy6mcqMu5nKjLyZyoy9mcqMvpnKjL+ZyozAmcqMwZnKh/mZyozCmcqMw5nKgWOZwbAGmd8AmXuMxJnhsAOZ4oytmeKwEZnkgiGZ4bAFmeaMrpnmjL+Z5oXZmeaMxZnmjMaZ5oywmeaMsZnmjMeZ5ozImeaMvpnmjLyZ5ozJmeaMypnmjMKZ5ozDmeGwBpn2AJl7jMuZ+LADmfmwEZn6jMyZ+LAEmfywEZn9jM2Z/YzRmf2M05n8jNWZ/IzfmfyM4Jn8jOGZ+LAGmgWwEZoGgIqZe4znmgiwA5oJsBGaCohJmgiwBZoMhdmaDIzomgyMzpoMghyaCLAEmhGA75oRgIyaEYzfmhGM4JoRjNWaEbARmheMzZoXjNGaF4zTmheM7ZoIsAaaHLARmh2Aipl7jO+aH7ADmiCwEZohjPCaH7AFmiOCvJofsASaJYzxmiWA75olsBGaKIzzmh+wBpoqsBGaK4CKmXuM9ZotsAWaLrARmi+M9potsAaaMQCZe4z3mjOwA5o0sBGaNYz2mjWM+Jo1jPmaNYz6mjWM+5o1jPyaNYz+mjWM/5o1jQCaNY0BmjWNApo1jQOaNY0EmjWNBZo1jQaaNY0HmjSMu5o0jP2aM7AFmkiNCZpIjQiaSIyumkiMv5pIjK2aSIy+mkiMsZpIjMKaSLARmlGNDJpRjQuaUY0qmkiNEJpIjRGaSI0XmkiNGppIjR6aSI0cmkiNKJpIjS6aSI0OmkiNLJpIjMOaSIIcmjOwBJphgO+aYY0wmmGAjJphjTKaYY0zmmGNNZphsBGaaI03mmiNOZpojTuaaI09mmiNP5pojUGaaI1DmmiNRppojSSaaIzNmmiM0ZpojNOaaI1MmmiNTppojVCaM7AGmniwEZp5gIqZe41SmnuwA5p8sBGafY1Tmn2M+Jp9jVSafY1Vmn2NVpp7sAWag7ARmoSNKpqDjK6ag41XmoOMwZqDh/mag40OmoONLJqDjSiag40umoOMw5qDjMKae7AEmpCA75qQsBGako1YmpKNXpqSjVqae7AGmpawEZqXgIqZe41hmpmwA5qasBGam4zMmpuM+JqbjP+ambAFmp+MrpqfjL+an4y+mp+MwpqfjMOan4IcmpmwBJqmgIyambAGmqiwEZqpgIqZe41imquwA5qssBGarYz5mq2NY5qrsAWasIytmrCMsJqwjLGasI1kmrCNCZqwjQiasLARmreM9pqwjSiasI0umrCNDpqwjSyasIIcmquwBJq+gO+avoCMmr6NMpq+jTOavrARmsONZ5rDjWmaq7AGmsawEZrHgIqZe41rmsmwA5rKsBGay4z2msuM+prLjPyay4z5msuNbJrLjQaay40HmsmwBZrTjLGa04ytmtONbZrTjQma040ImtONDprTjSya040omtONLprJsASa3YDvmt2NMprdjTOa3bARmuGNb5rhjXGaybAGmuQAmXuNc5rmsAOa54yumueA65rnsBGa6o0FmuqNdJrmsAWa7Yy/mu2MrZrtjL6a7Yyxmu2wEZryjP6a7Y0cmu2MwprtjMOa7YIcmu2Nd5rmsASa+YCMmvmA75r5sBGa/I14mvyMzZr8jNGa/IzTmvyNRprmsAabArARmwOAipl7jX6bBbADmwaNf5sGsBGbCI2AmwaNgZsGhxqbBo2CmwaNg5sGjMObBbAFmw+Nh5sPjYibD4zCmwWwBJsTjYqbE7ARmxWNjJsFsAabF7ARmxiAipl7jY+bGrADmxuNkJsbjZGbGrAFmx6Nk5sasAabILARmyGAipl7jZSbI7ADmySwEZsljP6bJY2VmyWNoZsljPmbJY1VmyWNVpsljaKbJIywmySNlpskjZebJI2YmySNmZskjZqbJI2bmySNnJskjZ2bJI2emySNn5skjaCbI7AFmzmMu5s5jK+bOYy9mzmMtZs5jLabOYy3mzmMups5jLibOYy5mzmMsps5jLybOYy0mzmMrZs5jL6bOYyxmzmMwZs5h/mbOYyzmzmMwJs5gWObI7AE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ne2OOZ3tjjqd7Y47ne2OPJ3tjj2d47AGnf4AnIaOPp4AsAWeAY4UngGGnZ4BjhmeAYHBngGByJ4AsASeB7ASngiOQJ4IjkKeCI5EngiORp4IjkieCI5KngiOTJ4Ijk6eCI5QngiOUp4IjlSeCI5WngiOWJ4IjlqeCI5cngiOXp4IjmCeCI5ingiOZJ4IjmaeCI5ongiOap4IjmyeCI5ungiOcJ4IjnKeCI50ngCwBp4kAJyGjneeJrAEnieEap4nhAmeJ4QInieByZ4nhHGeJ4RznieBDZ4ngcSeJ4RcnieBqp4ngc+eJ4HQnieB0Z4ngdKeJ4RgnieEY54ngcqeJ4HLnieBEp4ngbmeJ4G9nieBq54ngbOeJ4HHnieBDp4ngdieJ4HanieB254ngdyeJ4CCnieDa54nhHSeJ4R2nieEWZ4nhHCeJ4RynieEL54nhHWeJ4OVnieDlp4nhHieJ4RlniawBp5SAJ4msAWeVI4UnlSGnZ5UgcGeVIR5nlSBCJ5UgcKeVIHVnlSB154msAeeXYHCnl2B1ZyGjnieYLAEnmGEap5hsBKeY44jnmGEWJ5hhGGeYLAGnmcAnIaOeZ5psAiearASnmuLX55psASebYLRnm2BDJ5tsBKecI4jnm2Eap5psAWec44UnIaOep51sASedoRqnnaECZ52hAiedoHJnnaEcZ52hHOedoENnnaBxJ52hFyedoGqnnaBz552gdCedoHRnnaB0p52hGCedoRjnnaByp52gcuedoESnnaBuZ52gb2edoGrnnaBs552gceedoEOnnaB2J52gdqedoHbnnaB3J52gIKedoNrnnaEdJ52hHaedoRZnnaEcJ52hHKedoQvnnaEdZ52g5WedoOWnnaEeJ52hGWedbAGnqEAnnWwBZ6jjhSeo4adnqOBwZ6jhHmeo4EInqOBwp6jgdWeo4HXnnWwB56sgcKerIHVnIaOe56vsASesIRqnrCwEp6yjiOesIRYnrCEYZ6vsAaetgCcho58nriwCJ65sBKeuotfnriwBJ68gtGevIEMnrywEp6/jiOevIRqnriwBZ7CjhScho59nsSwBJ7FhGqexYQJnsWECJ7FgcmexYRxnsWEc57FgQ2exYHEnsWEXJ7FgaqexYHPnsWB0J7FgdGexYHSnsWEYJ7FhGOexYHKnsWBy57FgRKexYG5nsWBvZ7FgauexYGznsWBx57FgQ6exYHYnsWB2p7FgduexYHcnsWAgp7Fg2uexYR0nsWEdp7FhFmexYRwnsWEcp7FhC+exYR1nsWDlZ7Fg5aexYR4nsWEZZ7EsAae8ACexLAFnvKOFJ7yhp2e8oHBnvKEeZ7ygQie8oHCnvKB1Z7ygdeexLAHnvuBwp77gdWcho5+nv6wBJ7/hGqe/7ASnwGOI57/hFie/4Rhnv6wBp8FAJyGjn+fB7AInwiwEp8Ji1+fB7AEnwuC0Z8LgQyfC7ASnw6OI58LhGqfB7AFnxGOFJyGjoCfE7AEnxSEap8UhAmfFIQInxSByZ8UhHGfFIRznxSBDZ8UgcSfFIRcnxSBqp8Ugc+fFIHQnxSB0Z8UgdKfFIRgnxSEY58UgcqfFIHLnxSBEp8UgbmfFIG9nxSBq58UgbOfFIHHnxSBDp8UgdifFIHanxSB258UgdyfFICCnxSDa58UhHSfFIR2nxSEWZ8UhHCfFIRynxSEL58UhHWfFIOVnxSDlp8UhHifFIRlnxOwBp8/AJ8TsAWfQY4Un0GGnZ9BgcGfQYR5n0GBCJ9BgcKfQYHVn0GB158TsAefSoHCn0qB1ZyGjoGfTbAEn06Eap9OsBKfUI4jn06EWJ9OhGGfTbAGn1QAnIaOgp9WsAifV7ASn1iLX59WsASfWoLRn1qBDJ9ahFifWrASn16OI59ejoOfXo6En1qEap9WsAWfY44UnIaOhZ9lsASfZoRqn2aECZ9mhAifZoHJn2aEcZ9mhHOfZoENn2aBxJ9mhFyfZoGqn2aBz59mgdCfZoHRn2aB0p9mhGCfZoRjn2aByp9mgcufZoESn2aBuZ9mgb2fZoGrn2aBs59mgcefZoEOn2aB2J9mgdqfZoHbn2aB3J9mgIKfZoNrn2aEdJ9mhHafZoRZn2aEcJ9mhHKfZoQvn2aEdZ9mg5WfZoOWn2aEeJ9mhGWfZbAGn5EAn2WwBZ+TjhSfk4adn5OBwZ+ThHmfk4EIn5OBwp+TgdWfk4HXn2WwB5+cgcKfnIHVnIaOhp+fsASfoIRqn6CwEp+ijiOfoIRYn6CEYZ+fsAafpgCcho6Hn6iwCJ+psBKfqotfn6iwBJ+sgtGfrIEMn6yEWJ+ssBKfsI4jn7COiJ+wjomfrIRqn6iwBZ+1jhScho6Kn7ewBJ+4hGqfuIQJn7iECJ+4gcmfuIRx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hGWiNbAGomUAojWwBaJnjhSiZ4adomeBwaJnhHmiZ4EIomeBwqJngdWiZ4HXojWwB6JwgcKicIHVnIaOsaJzsAiidLASonWLX6JzsASid4LRoneBDKJ3sBKieo4jonqOsqJ6jrOid4RqonOwBaJ/jhScho60ooGwBKKChGqigoQJooKECKKCgcmigoRxooKEc6KCgQ2igoHEooKEXKKCgaqigoHPooKB0KKCgdGigoHSooKEYKKChGOigoHKooKBy6KCgRKigoG5ooKBvaKCgauigoGzooKBx6KCgQ6igoHYooKB2qKCgduigoHcooKAgqKCg2uigoR0ooKEdqKChFmigoRwooKEcqKChC+igoR1ooKDlaKCg5aigoR4ooKEZaKBsAairQCigbAFoq+OFKKvhp2ir4HBoq+EeaKvgQiir4HCoq+B1aKvgdeigbAHoriBwqK4gdWcho61oruwBKK8hGqivLASor6OI6K8hFiivIRhoruwBqLCAJyGjraixLAIosWwEqLGi1+ixLAEosiC0aLIgQyiyLASosuOI6LIhGqixLAFos6OFJyGjrei0LAEotGEaqLRhAmi0YQIotGByaLRhHGi0YRzotGBDaLRgcSi0YRcotGBqqLRgc+i0YHQotGB0aLRgdKi0YRgotGEY6LRgcqi0YHLotGBEqLRgbmi0YG9otGBq6LRgbOi0YHHotGBDqLRgdii0YHaotGB26LRgdyi0YCCotGDa6LRhHSi0YR2otGEWaLRhHCi0YRyotGEL6LRhHWi0YOVotGDlqLRhHii0YRlotCwBqL8AKLQsAWi/o4Uov6GnaL+gcGi/oR5ov6BCKL+gcKi/oHVov6B16LQsAejB4HCoweB1ZyGjrijCrAEowuEaqMLsBKjDY4jowuEWKMLhGGjCrAGoxEAnIaOuaMTsAijFLASoxWLX6MTsASjF4LRoxeBDKMXsBKjGo4joxeEaqMTsAWjHY4UnIaOuqMfsASjIIRqoyCECaMghAijIIHJoyCEcaMghHOjIIENoyCBxKMghFyjIIGqoyCBz6MggdCjIIHRoyCB0qMghGCjIIRjoyCByqMggcujIIESoyCBuaMggb2jIIGroyCBs6MggcejIIEOoyCB2KMggdqjIIHboyCB3KMggIKjIINroyCEdKMghHajIIRZoyCEcKMghHKjIIQvoyCE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F7AErB+BDawfhGGcho+3rCKwA6wjj7SsIrAIrCUArCWMAKwlj7CsJY+xrCKwBKwqhGGcho+5rCywA6wtj7SsLLAIrC8ArC+MAKwvj7CsL4+xrCywBKw0hGGchoUkrDawA6w3j7SsNrAIrDkArDmMAKw5j7CsOY+xrDawBKw+hGGchomurECwA6xBj7SsQLAIrEMArEOMAKxDj7CsQ4+xrECwBKxIhGGchoNKrEqwA6xLj7SsSrAIrE0ArE2MAKxNj7CsTY+xrEqwBKxShGGcho/ArFSwA6xVj7SsVLAIrFcArFeMAKxXj7CsV4+xrFSwBKxchGGcho/CrF6wA6xfj7SsXrAIrGEArGGMAKxhj7CsYY+xrF6wBKxmhGGcho/ErGiwA6xpj7SsaLAIrGsArGuMAKxrj7Csa4+xrGiwBKxwhGGcho/GrHKwA6xzj7SscrAIrHUArHWMAKx1j7CsdY+xrHKwBKx6hGGcho/IrHywA6x9j7SsfLAIrH8ArH+MAKx/j7Csf4+xrHywBKyEgQ2shIRhnIaPyqyHsAOsiI+0rIewCKyKAKyKjACsio+wrIqPsayHsASsj4ENrI+EYZyGj8yskrADrJOPtKySsAislQCslYwArJWPsKyVj7GskrAErJqBDayahGGcho/OrJ2wA6yej8+sno/QrJ6P0ayej9Ksno/TrJ6P1Kyej9Wsno/WrJ6P16yej9isno/ZrJ6P2qyej9usno/crJ6P3ayej96sno/frJ6P4Kyej+Gsno/irJ6P46yej+Ssno/lrJ6P5qyej+esno/orJ6P6ayej+qsno/rrJ6P7Kyej+2sno/urJ6P76yej/Csno/xrJ6P8qyej/Osno/0rJ6P9ayej/asno/3rJ6P+Kyej/msno/6rJ6P+6yej/ysno/9rJ6P/qyej/+snpAArJ6QAayekAKsnpADrJ6QBKyekAWsnpAGrJ6QB6yekAisnpAJrJ6QCqyekAusnpAMrJ6QDayekA6snpAPrJ6QEKyekBGsnpASrJ6QE6yekBSsnpAVrJ6QFqyekBesnpAYrJ6QGayekBqsnpAbrJ6QHKyekB2snpAerJ6QH6yekCCsnpAhrJ6QIqyekCOsnpAkrJ6QJayekCasnpAnrJ6QKKyekCmsnpAqrJ6QK6yekCysnpAtrJ6QLqyekC+snpAwrJ6QMayekDKsnpAzrJ6QNKyekDWsnpA2rJ6QN6yekDisnpA5rJ6QOqyekDusnpA8rJ6QPayekD6snpA/rJ6QQKyekEGsnpBCrJ6QQ6yekESsnpBFrJ6QRqyekEesnpBIrJ6QSayekEqsnpBLrJ6QTKyekE2snpBOrJ6QT6yekFCsnpBRrJ6QUqyekFOsnpBUrJ6QVayekFasnpBXrJ6QWKyekFmsnpBarJ6QW6yekFysnpBdrJ6QXqyekF+snpBgrJ6QYayekGKsnpBjrJ6QZKyekGWsnpBmrJ6QZ6yekGisnpBprJ6QaqyekGusnpBsrJ6QbayekG6snpBvrJ6QcKyekHGsnpByrJ6Qc6yekHSsnpB1rJ6QdqyekHesnpB4rJ6QeayekHqsnpB7rJ6QfKyekH2snpB+rJ6Qf6yekICsnpCBrJ6QgqyekIOsnpCErJ6QhayekIasnpCHrJ6QiKyekImsnpCKrJ6Qi6yekIysnpCNrJ6QjqyekI+snpCQrJ6QkayekJKsnpCTrJ6QlKyekJWsnpCWrJ6Ql6yekJisnpCZrJ6QmqyekJusnpCcrJ6QnayekJ6snpCfrJ6QoKyekKGsnpCirJ6Qo6yekKSsnpClrJ6QpqyekKesnpCorJ6QqayekKqsnpCrrJ6QrKyekK2snpCurJ6Qr6yekLCsnpCxrJ6QsqyekLOsnpC0rJ6QtayekLasnpC3rJ6QuKyekLmsnpC6rJ6Qu6yekLysnpC9rJ6QvqyekL+snpDArJ6QwayekMKsnpDDrJ6QxKyekMWsnpDGrJ6Qx6yekMisnpDJrJ6QyqyekMusnpDMrJ6QzayekM6snbAErZ+wEq2gkM+toJDRrZ+BDa2fg+utn4EGrZ+Dxq2fhfitn47hrZ+O462fjuWtn47nrZ+O6a2fjuutn47trZ+O762fjvGtn4RcrZ+O/K2fjv+tn48CrZ+PBa2fjwitn4gerZ+IH62fjIqtn48OrZ+PEKydsAitvACtvJDTrbyQ1K28kNatvJDYrJ2wBa3ChIStwowyrcKO9a3Cjvetwo75nIaQ2q3IsAOtyY/PrcmP0K3Jj9GtyY/SrcmP063Jj9StyY/VrcmP1q3Jj9etyY/YrcmP2a3Jj9qtyY/brcmP3K3Jj92tyY/ercmP363Jj+CtyY/hrcmP4q3Jj+OtyY/krcmP5a3Jj+atyY/nrcmP6K3Jj+mtyY/qrcmP663Jj+ytyY/trcmP7q3Jj++tyY/wrcmP8a3Jj/KtyY/zrcmP9K3Jj/WtyY/2rcmP963Jj/ityY/5rcmP+q3Jj/utyY/8rcmP/a3Jj/6tyY//rcmQAK3JkAGtyZACrcmQA63JkAStyZAFrcmQBq3JkAetyZAIrcmQCa3JkAqtyZALrcmQDK3JkA2tyZAOrcmQD63JkBCtyZARrcmQEq3JkBOtyZAUrcmQFa3JkBatyZAXrcmQGK3JkBmtyZAarcmQG63JkBytyZAdrcmQHq3JkB+tyZAgrcmQIa3JkCKtyZAjrcmQJK3JkCWtyZAmrcmQJ63JkCityZAprcmQKq3JkCutyZAsrcmQLa3JkC6tyZAvrcmQMK3JkDGtyZAyrcmQM63JkDStyZA1rcmQNq3JkDetyZA4rcmQOa3JkDqtyZA7rcmQPK3JkD2tyZA+rcmQP63JkECtyZBBrcmQQq3JkEOtyZBErcmQRa3JkEatyZBHrcmQSK3JkEmtyZBKrcmQS63JkEytyZBNrcmQTq3JkE+tyZBQrcmQUa3JkFKtyZBTrcmQVK3JkFWtyZBWrcmQV63JkFityZBZrcmQWq3JkFutyZBcrcmQXa3JkF6tyZBfrcmQYK3JkGGtyZBircmQY63JkGStyZBlrcmQZq3JkGetyZBorcmQaa3JkGqtyZBrrcmQbK3JkG2tyZBurcmQb63JkHCtyZBxrcmQcq3JkHOtyZB0rcmQda3JkHatyZB3rcmQeK3JkHmtyZB6rcmQe63JkHytyZB9rcmQfq3JkH+tyZCArcmQga3JkIKtyZCDrcmQhK3JkIWtyZCGrcmQh63JkIityZCJrcmQiq3JkIutyZCMrcmQja3JkI6tyZCPrcmQkK3JkJGtyZCSrcmQk63JkJStyZCVrcmQlq3JkJetyZCYrcmQma3JkJqtyZCbrcmQnK3JkJ2tyZCercmQn63JkKCtyZChrcmQoq3JkKOtyZCkrcmQpa3JkKatyZCnrcmQqK3JkKmtyZCqrcmQq63JkKytyZCtrcmQrq3JkK+tyZCwrcmQsa3JkLKtyZCzrcmQtK3JkLWtyZC2rcmQt63JkLityZC5rcmQuq3JkLutyZC8rcmQva3JkL6tyZC/rcmQwK3JkMGtyZDCrcmQw63JkMStyZDFrcmQxq3JkMetyZDIrcmQya3JkMqtyZDLrcmQzK3JkM2tyZDOrciwBK7KsBKuy5DbrsuQ3a7KgKauyoChrsqAo67KgQ2uyoEGrsqEXK7Kjvyuyo7/rsqPAq7KjwWuyo8IrsqPK67Kjy6uyo8xrsqPNK7KjzetyLAIrt4Art6Q367ekOCtyLAFruKEhK7ijDKu4o71ruKO967ijvmu4o8jruKPJa7ijyeu4o8pnIaQ4q7ssASu7bASru6Q467ukOWu7YENru2D667tgQau7YPGru2F+K7tju2u7Y7vru2O8a7tjv+u7Y8Cru2IHq7tiB+u7YyKruywCK7+AK7+kNOu/pDUrv6Q6K7ssAWvA4SErwOMMq8DjvmchpDqrwewA68IsBKvCYOkrwewBa8LjhmvB7AErw2OMa8NjjCvDY4yrw2ONK8NjjOvDY42rw2ONa8NjjivDY43rw2OPK8NjjmvDY46rw2OO68Njj2vDY4vrwewBq8dAJyGkOuvH7ADryCwEq8hg6SvH7AEryOPja8jj4+vI4+QryOPka8jj5KvI4+VryOPlq8jj5evI4+YryOPma8jj5qvI4+bryOPnK8jj52vI4+eryOPn68jj6CvI4+hryOPoq8jj6OvI7ASrziQ7K8fsAWvOo4UrzqGna86jhmvOoHBrx+wBq8/AJyGkO6vQbAFr0KwEq9DhEKvQ4Okr0KByK9CjhSvQoadr0KOGa9CgcGvQbAEr0uC0a9LsBKvTY4jr0uEYa9BsAavUACchpDzr1KwBq9TAK9SsAWvVbASr1aEQq9Wg6SvVYHIr1WOFK9Vhp2vVY4Zr1WBwa9SsASvXoLRr16wEq9gjiOvXoRhnIaQ9K9jsAOvZLASr2WEQq9jsASvZ7ASr2iOI69jsAavagCchpD1r2ywBq9tAK9ssAWvb7ASr3CEQq9wg6Svb4HIr2+OFK9vhp2vb44Zr2+Bwa9ssASveILRr3iwEq96jiOveIRhnIaQ9q99sAOvfrASr3+EQq99sASvgbASr4KOI699sAavhACchpD3r4awBq+HAK+GsAWvibASr4qEQq+Kg6SviYHIr4mOFK+Jhp2viY4Zr4mBwa+GsASvkoLRr5KwEq+UjiOvkoRhnIaQ+K+XsAOvmLASr5mEQq+XsASvm7ASr5yOI6+XsAavngCchpD5r6CwBq+hAK+gsAWvo7ASr6SEQq+kg6Svo4HIr6OOFK+jhp2vo44Zr6OBwa+gsASvrILRr6ywEq+ujiOvrIRhnIaQ+q+xsAOvsrASr7OEQq+xsASvtbASr7aOI6+xsAavuACchpD7r7qwBq+7AK+6sAWvvbASr76EQq++g6SvvYHIr72OFK+9hp2vvY4Zr72Bwa+6sASvxoLRr8awEq/IjiOvxoRhnIaQ/K/LsAOvzLASr82EQq/LsASvz7ASr9COI6/LsAav0gCchpD9r9SwBq/VAK/UsAWv17ASr9iEQq/Yg6Sv14HIr9eOFK/Xhp2v144Zr9eBwa/UsASv4ILRr+CwEq/ijiOv4IRhnIaQ/q/lsAOv5rASr+eEQq/lsASv6bASr+qOI6/lsAav7ACchpD/r+6wBq/vAK/usAWv8bASr/KEQq/yg6Sv8YHIr/GOFK/xhp2v8Y4Zr/GBwa/usASv+oLRr/qwEq/8jiOv+oRhnIaRAK//sAOwALASsAGEQq//sASwA7ASsASOI6//sAawBgCchpEBsAiwBrAJALAIsAWwC7ASsAyEQrAMg6SwC4HIsAuOFLALhp2wC44ZsAuBwbAIsASwFILRsBSwErAWjiOwFIRhnIaRArAZsAOwGrASsBuEQrAZsASwHbASsB6OI7AZsAawIACchpEDsCKwBrAjALAisAWwJbASsCaEQrAmg6SwJYHIsCWOFLAlhp2wJY4ZsCWBwbAisASwLoLRsC6wErAwjiOwLoRhnIaRBLAzsAOwNLASsDWEQrAzsASwN7ASsDiOI7AzsAawOgCchpEFsDywBrA9ALA8sAWwP7ASsECEQrBAg6SwP4HIsD+OFLA/hp2wP44ZsD+BwbA8sASwSILRsEiwErBKjiOwSIRhnIaRBrBNsAOwTrASsE+EQrBNsASwUbASsFKOI7BNsAawVACchpEHsFawBrBXALBWsAWwWbASsFqEQrBag6SwWYHIsFmOFLBZhp2wWY4ZsFmBwbBWsASwYoLRsGKwErBkjiOwYoRhnIaRCLBnsAOwaLASsGmEQrBnsASwa7ASsGyOI7BnsAawbgCchpEJsHCwBrBxALBwsAWwc7ASsHSEQrB0g6Swc4HIsHOOFLBzhp2wc44ZsHOBwbBwsASwfILRsHywErB+jiOwfIRhnIaRCrCBsAOwgrASsIOEQrCBsASwhbASsIaOI7CBsAawiACchpELsIqwBrCLALCKsAWwjbASsI6EQrCOg6SwjYHIsI2OFLCNhp2wjY4ZsI2BwbCKsASwloLRsJawErCYjiOwloRhnIaRDLCbsAOwnLASsJ2EQrCbsASwn7ASsKCOI7CbsAawogCchpENsKSwBrClALCksAWwp7ASsKiEQrCog6Swp4HIsKeOFLCnhp2wp44ZsKeBwbCksASwsILRsLCwErCyjiOwsIRhnIaRDrC1sAOwtrASsLeEQrC1sASwubASsLqOI7C1sAawvAAAsBOwvpEpsL+wBrDAALC+kSqwwrAGsMMAsL6RK7DFsAawxgCwvpEssMiwBrDJAACwFLDLsAOwzLAUsM2Yc7DNmHSwzZh1sM2YdrDNmHewzZh4sM2YebDNmHqwzZiFsM2YhrDNmIewzZiIsM2YibDNmIqwzZiLsM2YjLDNmI2wzZiOsM2Yj7DNmJCwzZiRsM2YkrDNka6wzZGvsM2RsLDNmJOwzZiUsM2YlbDMmHuwzJh8sMyRf7DMmH6wzJRjsMyUZbDMlGewzJRqsMyUbbDMmJawzJiXsMuwBLD1sBSw9owMsPaYmbD2mJqw9pibsPaYnLD2mJ2w9pifsPaYoLD2mKKw9piksPaYpbD2mKiw9pQysPaWNbD2mKqw9pirsPaYrLD2mK2w9piusPaYsLD2mLKw9pi1sPaYuLD2mLqw9pjAsPWYu7D1mL2w9ZjBsMuwB7ETkd+wy7AFsRWR37EVkfSxFZHtsRWR7rEVke+wy5FLsRuwCLEcALEbsASxHrAUsR+RTLEekU6xG7AGsSKwFLEjgIqwy5FQsSWwCLEmALElsASxKLAUsSmRTLEokU6xKICNsSiRVLEokVaxKJFYsSiHcLEokVuxKIW8sSiRXrEokWCxKIHIsSiHbrEokWSxJbAGsTiwFLE5gIqwy5FmsTuwA7E8kWexPJFosTyRabE8gZuxO7AGsUEAsMuRarFDsAOxRLAUsUWRa7FFggqxQ7AEsUiwFLFJkW2xSZFusUmRb7FJkXGxQ7AGsU4AsMuRcrFQsAOxUbAUsVKCCrFSgMCxULAEsVWwFLFWkW+xVpFxsVCwBrFZALDLkXOxW7ADsVywFLFdggqxXYDAsVuwBLFgsBSxYZFvsWGRcbFbsAaxZACwy5F1sWawBLFniOmxZ5F3sWawBrFqALDLkXmxbLAEsW2wFLFug+KxbLAGsXAAsMuRfrFysASxc7AUsXSD4rFysAaxdgCwy5GDsXiwA7F5kYSxebAUsXuRhbF7kYaxe5GHsXiwBLF/sBSxgJGIsYCRirGAkYuxeLAGsYQAsMuRjbGGsAOxh7AUsYiRjrGGsASxirAUsYuRj7GLkZKxi5GUsYuRlrGGsAWxkLAUsZGRl7GRkZixhrAGsZSwFLGVgIqwy5GZsZewA7GYkZqxmLAUsZqAwLGahIOxl7AFsZ1AsZewBLGfsBSxoJGbsaCCPbGgkZ+xoJGhsZewBrGlALDLkaOxp7ADsaiwFLGpkaSxqZGlsaewBrGsALDLkaaxrrAGsa8AsMuRp7GxsAOxsrAUsbORqLGzkaqxs4hSsbORq7Gzkayxs5GtsbORrrGzka+xs5GwsbORsbGzkbKxs5GzsbORtLGykamxsbAFscKwFLHDkcGxw5HDscORxLHCke6xwpHvscKR7bHCkd+xwpH0sbGwBLHMsBSxzZHFsc2RxrHNkcexzZHKsc2RvLHNkdmxzYhhsc2R5bHNkduxzZHoscyL8LGxsAax2QCwy5H1sduwA7HcsBSx3ZH2sd2R97Hdkfix3ZH5sd2R+rHdkfux3ZIAsd2SAbHdkgKx3JH8sdyR/bHckf6x3JH/sdyIybHbsAWx7IXZseyPrLHskgOx7JIEseySBbHskgax7IIcsduwBLH0kgex9LAUsfaSD7H2khKx9ICMsfSA77HbsAix+4U7sfuSCrHbsAax/gCwy5IUsgCwA7IBhk2yAYHdsgGSFbIAsASyBYDvsgCwBrIHALDLkheyCbAGsgoAsMuSGLIMsAayDQCyDLADsg+wFLIQkhmyDLAFshKwFLITkhqyE5IbshOSHLITkh2yDLAEshiwFLIZiByyGZIesMuSH7IcsAOyHZIgsh2SIbIdkiKyHZIjsh2SJLIdkiWyHZImsh2SJ7IdkiiyHZIpsh2SKrIdkiuyHZIssh2SLbIdki6yHZIvsh2SMLIdkjGyHZIysh2SM7IdkjSyHZI1sh2SNrIdkjeyHZI4sh2SObIdkjqyHZI7sh2SPLIdkj2yHZI+sh2SP7IdkkCyHZJBsh2SQrIdkkOyHZJEsh2wFLJDkkWyQ5JGsh2AjrIdkkeyHZJIsh2SSbIdkkqyHZJLsh2STLIdkk2yHZJOsh2ST7IdklCyHZJRsh2SUrIdklOyHZJUsh2SVbIdklayHZJXsh2SWLIdkamyHZJZsh2MrbIcsASyXIOLslySYLJckmOyXJJnslySarJckm6yXJJ9slywFLJkkoGyZIgcslyBuLJckoiyXJKJslyRVrJckp2yXIHDslyIgbJckqmyXJKyslyStLJckrWyXJKqslySd7JcknqyXICNslyCbLJckr+yXJK+slySubJckoeyXJK3slySw7JcksSyXJKXslySxrJcksmyXJLLslySzrJcktCyXJLUslyS2LJckl2yXJKgslySlrJckp6yXJKkslySp7JcknKyXJJzslySdLJckoWyXJKNslySq7Jckq6yXJKwslySm7JcknmyXJLIslySzbJcksqyXJLPslyS17JcktmyHLAFspySj7KckpCynJKRspySkrKckpOynJKUspywFLKjkhyyo5IdspyLkrKckq+ynIjJspySsbIcsAayqpJasqqSW7KqgamyqoG0sqqwFLKvklyyqpJesqqBn7DLkvSys7ADsrSwFLK1kvWytYDAsrWS9rK1kveys7AEsrqBuLK6gamyuoCNsrqwFLK+i+uyvpL9sr6S+rK+kvuys7AFssOLkrLDiMmys7AHssawFLLHjPmys7AGsskAsMuS/rLLsAOyzLAUss2S9bLNgMCyzZL/ss2TALLNkwGyy7AEstOSfbLTkm6y04GpstOSUrLTkVay04HDstOAjbLTgmyy05LJstOSy7LTks6y07AUst+L67Lfkv2y35L7st+S+rLLsAiy5LAUsuWTBbLlkweyy7AFsuiLkrLokq+y6IjJsuiSsbLokwuy6JMCssuwB7Lvkwuy75MCsu+wFLLyjPmyy7AGsvQAsMuTDbL2sAOy97AUsviS9bL2sASy+oG4svqBqbL6gI2y9rAFsv6LkrL+iMmy9rAHswGwFLMCjPmy9rAGswQAsMuTD7MGsAOzBy+zB5GesweEF7MHgcGzB4u7sweTELMGsASzDoCHsw6AjbMOgcOzDoDSsw6Bo7MGsAazFACwy5MXsxawA7MXsBSzGJMSsxiTGLMYgMCzGJMZsxiTGrMYgeOzGIIKsxiTG7MWsAizIbAUsyKTBbMikwezFrAFsyWwFLMmkcKzJZHqsyWA0rMli5KzJYjJsyWSr7MlkrGzFrAEsy6BqbMugcOzLoeRsy6GFLMuhDCzLoCCsy6Ai7MugIezLodusy6AjbMukeOzLpLJsy6Sy7Muks6zLrAUsz2TILM9kxGzPZMfsz2S+rM9kvuzPYIvsz2CMLM9gUGzPZMUsz2TFbM9kxazPZMTsxawB7NKkeqzSrAUs0yM+bMWsAazTgCwy5Mhs1CwA7NRsBSzUpL1s1KAwLNSkv+zUpMAs1CwBLNXgbizV4Gps1eAjbNXiIGzV5Kds1eS1LNXktizV7AUs1+L67Nfkv2zX5L7s1+S+rNXksuzV5LOs1CwBbNmkwuzZpMCs2aTJLNmkyWzZpMms2aTKLNmi5KzZojJs1CwB7Nvkwuzb5MCs2+TJLNvkyWzb5Mms2+TKLNQsAazdgCwy5Mps3iwBbN5sBSzepMSs3mTLrN5kzCzeLAEs36TKrN4sAazgACwy5Mys4KwA7ODkzOzg5M0s4OTNbOCsASzh5J9s4eR47OHsBSzipM8s4qTTbOHkz6zh5NAs4eTQbOHkzCzh5Mqs4eTRbOHk0izh5NKs4KwBbOVky6zgrAGs5ewFLOYgIqwy5NPs5qwA7Obk1CzmrAEs52wFLOek1KznpNrs56TU7Odk1WznZNZs52TXLOdk12znZNgs52TYbOdk2SznZNls52TaLOasAazqwCwy5Nus62wA7OusBSzr5Nvs6+TcLOvk3GzrbAFs7OwFLO0k3KztJN1s7STeLOzk3Szs5N3s7OTerOzk3uzs5N9s7OTf7Ozk4KzrbAEs7+wFLPAk4CzwJODs62wBrPDsBSzxICKsMuThrPGsAOzx7AUs8iS9bPGsASzypOHs8qSUrPKk4izypOJs8qTirPKgmyzypOLs8awBbPSiMmz0ouSs9KSsbPSkq+zxrAGs9cAsMuTjLPZsAaz2gCwy5ONs9ywA7PdgI6z3ZJIs92SSrPdklGz3ZJQs92SWbPcsASz5JOHs+STiLPkksSz5IOLs+STibPkk4qz5JKIs+SCbLPkkr6z5JK/s+STi7PksBSz8JOUs/CTorPwk4+z8JOQs/CTk7Pwk5Gz8JOSs/CTmrPwk5iz8JObs/CTnLPwk6Cz3LAFs/2IybP9klKz/YuSs/2SsbP9kq+z3LAGtAMAsMuTrrQFsAi0BgC0BbAEtAiAgrQIk6+0CJOwtAiTsbQIgOe0BbAFtA6ByLQOgOO0DoNisMuTsrQSsAO0E7AUtBSTs7QUk7S0FIQ9tBSGybQSsAS0GYCCtBmTr7QZsBS0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teWUGbXjsAW16JFoteiUFbXjsAS167AUteyRmLXslLi17JQjteyRj7XslL+17JTBteyUPbXslCa17JTGteyUP7XslCi17JTMteyUz7XslNS17JTXteyU27XslN+17JTiteyJDLXslOa17JToteyU7bXrlDG165Q1teuUCrXrlAu165QSteuUFLXrice165R9teuI67Xrgci165R+teuUf7XrlIC165SBteuUgrXrlIO165SEteuUhbXrlIa165SHteuUiLXrlIm165SKteuTWLXrlIu165SMteuUjbXrlI6165SPteuUkLXrlJG165STteuA77XrlPC147AGtiUAtiWUBbDLlPG2KLAItikAtiiwBLYrkU62K4CNtiuRVLYrkVa2K5FYtiuHcLYrkVu2K4W8tiuRXrYrkWC2K4HItiuHbrYrkWSwy5TytjmwA7Y6sBS2O5TztjuU9LY7lPW2O5GotjuUULY6kWi2OpT2tjqSurY5sAS2RLAUtkWU+LZFlPe2RZUKtkWTTbZFlPu2RZOUtkSAjbZEk4i2RJFUtkSUlbZEkVa2RJOKtkSRWLZEk4m2RIdwtkSUlrZEkVu2RJOLtkSHSbZElJe2RIW8tkSUmLZEkV62RJSZtkSRYLZElJq2RIHItkSUfrZEh262RJSbtkSRZLZElJ22RJSctkSUnrY5sAa2aACwy5UQtmqwA7Zrk1a2a5URtmuVE7ZrlRS2a5UWtmuVF7Zrifm2a4pItmuwFLZ0lRm2dIhJtmqwBLZ3sBS2eJUatneA77ZqsAa2e7AUtnyBk7DLlRu2frADtn+wFLaAiEm2gJUctoCVHbaAlR62gJGttoCVH7aAlSC2f5Uhtn+VIrZ/lSO2f4XZtn+HB7Z/g8O2frAEto6wFLaPlSW2j5Uoto+VKraOlSe2jpUpto6A77aOlTC2frAGtpewFLaYgZO2mJUksMuVP7absAO2nLAUtp2RqradlBm2nZVAtp2VQrabsAW2opFotqKA67ailU62opQVtqKwFLanlDa2p5VPtqKVVLaiTbabsAS2rJQxtqyUNbaslBK2rJQUtqyUELaslBG2rJUptqyVJ7aslMO2rJTItqyBn7assBS2uJQ9triUP7a4lUi2uJVQtriVVra4lVe2uJVZtriVXba4lWG2uJVktriVZra4lWi2uJVttriVb7a4lXG2uJVztriVdba4lXa2uJV3tqyVTLaslVK2rIXZtqyVW7aslVy2rJVetqyVX7aslWC2rJVitqyVY7aslWq2m7AGttcAsMuVeLbZsAO22pQKttqVebbalXu22pV8ttqUw7balX622pWAttqVgbbalYO22pWEttqwFLbllYa25ZWHtuWViLbahdm22pFottqVX7bZsAa27LAUtu2AirDLlYm277AEtvCA77bvsAa28rAUtvOAirDLlYy29bADtvaVjbb1sAS2+IDvtvWwBrb6sBS2+4CKsMuVkLb9sAS2/oDvtv2wBrcAsBS3AYCKsMuVkrcDsAO3BJWTtwOwBLcGgO+3A7AGtwiwFLcJgIqwy5WWtwuwA7cMsBS3DYSDtw2Ra7cNkaq3DZWXtw2VmLcNkXC3DZWZtwuwBLcVsBS3FpFxtxaRm7cWgj23FpFttxaRbrcWkW+3FpWdtxaVnrcWlZ+3FpWmtxaVqLcWlaq3FpWstxaVr7cWlbG3FpWztwuwBbcnsBS3KIHrtyeVtLcLsAa3K7AUtyyAirDLlba3LrADty+F2bcvgNy3L7AUtzKCi7cylbe3MpW4ty6wBbc2hk23NohztzaVurc2lbu3LrAEtzuVvLcusAa3PQCwy5W9tz+wA7dAkpm3QJW+t0CVv7dAlcC3QJXBt0CVwrc/sAS3R5Kst0eSmrdHkqa3P7AFt0uVurc/sAa3TQCwy5XDt0+wA7dQsBS3UYhJt1CTVrdQlcS3T7AEt1WVxbdVlce3VZXIt1WVybdVlcy3VZXNt0+wBbdchk23T7AGt14AsMuVzrdgsAO3YbAUt2KISbdhiOm3YZXQt2GV0bdgsAW3Z4ZNt2eVurdgsAS3apHkt2qV0rdqldO3apXUt2qV1bdqlde3YLAGt3EAsMuV2LdzsAO3dLAUt3WV2bd1ldu3dYhJt3SRnrd0ld23c7AFt3uGTbdzsAS3fZXit32V47d9lee3fZXot32V6rd9leu3c7AGt4QAsMuV7LeGsAO3h5Hqt4awCLeJALeGsAS3i4CCt4uBw7eLhDC3i4eRt4uGFLeLgIu3i4CHt4uHbreLgI23hrAFt5WA0rDLle23l7ADt5iwFLeZgiG3mZXut5mV77eZlfC3mYI/t5mV8beZgV+3l7AEt6GAgrehgIu3oYCHt6GHbrehgI23obAUt6eV9benlfa3p5X3t5ewBbergNK3q7AUt62AwLeXsAa3rwCwy5X4t7GwA7eysBS3s5X5t7OV+rexsAW3tpHqt7GwB7e4keq3sbAEt7qBw7e6hDC3uoeRt7qGFLexsAa3vwCwy5X8t8GwA7fCsBS3w5X9t8OLgrfDlf63w5X/t8OEg7fClgC3wpYBt8KWArfClgO3wpYEt8KWBbfClga3wpYHt8KWCLfClgm3wpYKt8KWC7fClgy3wpYNt8KWDrfClg+3wpYQt8KWEbfClhK3wpYTt8KWFLfClhW3wpYWt8KWF7fClhi3wpYZt8KWGrfClhu3wpYct8KWHbfClh63wpYft8KWILfCliG3wpYit8KWI7fCliS3wpYlt8KWJrfClie3wpYot8KWKbfCliq3wbAEt/SwFLf1liu39ZYst/WWLbf1lPu3wbAGt/oAsMuEmrf8sAi3/QC3/ZQFt/2UBrf8sAS4AZQKuAGUC7gBljG4AYPXuAGUELgBlBG4AZQSuAGUFLgBgXm4AZYyt/ywBbgMlBWwy5YzuA6wA7gPsBS4EJGquBCUGbgOsAW4E5FouBOUFbgOsAS4FoDvuBaUMbgWlDW4FpQKuBaUC7gWljG4FoPXuBawFLgelD24HpQ/uB6UMrgeljW4FpQSuBaUFLgWgXm4FpYyuBaU8LgOsAa4KAC4KJQFsMuWPrgrsAW4LLAUuC2Rl7gtkZi4K7AEuDCwFLgxkZa4K7AGuDMAsMuWP7g1sAO4NrAUuDeWQLg3lkK4N5ZEuDeWRrg3lki4N5ZKuDeWTLg1sAS4P7AUuECWTrhAlk+4P5ZUuDWwBrhEALDLlli4RrADuEewFLhIllm4SJZbuEiWXLhGsAS4TIfmuEyWX7hMlmS4TG24TIGvuEyA57hGsAa4UwCwy5ZsuFWwA7hWgd24VrAUuFiG/bhWgQG4VpZmuFaWZ7hWiMm4VouSuFaTCbhWlKy4VpZpuFWwBLhigO+4VbAGuGQAsMuWbbhmsAO4Z4DcuGeWZrhnlme4Z4jJuGeLkrhnkwm4Z5SsuGeWabhnlmq4Z5ZouGawBLhyll64crAUuHSWbrhmsAa4dgCwy5ZvuHiwA7h5sBS4epZwuHiwBbh8gQq4eLAHuH6Wcbh4sAS4gINBuICWdbiAlAS4gJQIuICUCbiAlA24gJR8uICVKbiAlSe4gJVNuICVU7iAlXS4gJVwuICVR7iAlVW4gJYwuICWcriAlnO4gJZ0uHiwBriUALDLlna4lrADuJewFLiYgJu4mJZ3uJiWeLiYlnm4mJZ6uJiWe7iYlSq4mJUluJiWfLiYln24mJZ+uJiWf7iYloC4mJaBuJiUv7iYloK4mJaDuJiWhLiWsAS4q5QEuKuUCLirlAm4q5QNuKuUfLirlSm4q5UnuKuVTbirlVO4q5V0uKuVcLirlUe4q5VVuKuWMLirlnK4q5ZzuKuWdLiWsAa4vQCwy5aFuL+wA7jAsBS4wZaGuMGWh7jBloi4wZaJuMGWirjBlou4wJaMuMCWjrjAlpC4wJaSuMCWlLjAlpa4v7AFuM6WmLjOlpm4zpaauM6Wm7jOlpy4zpaduM6LxLjOiOq4zpaeuM6L3LjOlp+4zou+uM6Lv7jOid24v7AGuN0AsMuWobjfsAO44IjquOCWnrjgi7644Iu/uOCwFLjllqK45ZajuOWWpLjfsAe46bAUuOqWpbjfsAS47LAUuO2Whrjtloe47ZaIuO2Wibjtloq47ZaxuO2Ws7jtkay47Za2uO2WuLjtlrm47ZaLuO2Wu7jtlr247JaauN+wBbj9lpi4/ZaZuP2Wm7j9i9y4/ZacuP2Wnbj9lp+4/YvEuP2J3bjfsAa5BwCwy5bAuQmwA7kKsBS5C4LluQmwBLkNgum5DYNluQ2C0bkNgQy5DYNouQ2Da7kNg2y5DYDnuQ2BErkNgau5DYPXuQ2D2bkNg5W5DYDvuQmwBbkcg2O5HIEBuRyByLkcgOO5HINiuRyD2rkJsAa5IwCwy5bCuSWwBLkmsBS5J5bDuSeWxbknlsa5J5bIuSeWyrknlsy5J5bOuSeW0LklsAa5MACwy5bYuTKwBLkzsBS5NJbZuTSW27kysAW5N5bduTeW3rkysAa5OgCwy5bfuTywA7k9klu5PZbguT2W4rk9luO5PZbluT2W5rk9lui5PZbpuT2wFLlGka25PLAFuUiBAbk8sAS5SoDvuTywBrlMsBS5TYGTsMuW67lPsAW5UJHfuVCR7rlQke+5UJHtuVCR9LlPsAS5Vm25VoFMuVaW7LlWlu25VovwuU+wBrlcALDLlu65XrADuV+R37lfke65X5HvuV+R9LlesAa5ZACwy5bvuWawA7lnlvC5Z5bxuWeW8rlnlvS5Z5b2uWeW+Llnlvq5Z5b8uWeW/rlnlwC5Z5cBuWeXA7lnlwS5Z5cGuWeXCLlnlwm5Z5cLuWeXDblnlw+5Z5cRuWeXE7lnlxW5Z5cXuWeXGblnlxu5Z5cduWeXH7lnlyC5Z5ciuWeW0blnltK5Z5bzuWeW9blnlve5Z5b5uWeW+7lnlv25Z5b/uWeW07lnlwK5Z5bUuWeXBblnlwe5Z5HyuWeXCrlnlwy5Z5cOuWeXELlnlxK5Z5cUuWeXFrlnlxi5Z5cauWeXHLlnlx65Z5bVuWeXIblnlyO5Z7AUuaKRnLmihv25ZrAEuaWA77mlgZ+5ZrAGuaiwFLmpgIqwy5dBuauwA7msgSK5rJJ4uauwBLmvgO+5q7AGubEAsMuXRLmzsAO5tIjqubSIT7m0gSK5tIgDubOwBLm5gO+5s7AGubsAsMuXSLm9sAO5vrAUub+S9bm9sAS5wYG4ucGBqbnBgI25vbAFucWLkrnFiMm5vbAHuciwFLnJjPm5vbAGucuwFLnMgIqwy5dLuc6wA7nPsBS50JL1udCAwLnQggq50JdMudCTGLnPkyy5z5Mtuc+XSbnOsAS52YG4udmBqbnZgI252bAUud2CL7ndkvu53ZL6uc6wBbnhi5K54YjJuc6wB7nksBS55Yz5uc6wBrnnsBS56ICKsMuXT7nqsAi567AUueyAirnqsAS57pJ9ue6SbrnujDq57pdUue6TKrnqsAW59JMuufSTMLDLl1a597AEufiSfbn4km65+Iw6ufiXVLn4kyq597AFuf6TLrn+kzC597AGugEAsMuXV7oDsAi6BLAUugWAiroDsAW6B5N0ugeTd7oHk3q6B5N7ugeTfboHk3+6B5OCsMuXWLoPsAO6EJdZuhCXWroQl1u6EJdcuhCXXboQl166EJdfug+wBroYALDLl2C6GrADuhuXYbobl2K6G5djuhuXZLobl2W6G5dmuhuXZ7obl2i6G7AUuiSS9bokl2m6JIDAuiSB67okl2q6JJdruiSXbLokl226JJMAuiSS/7okl266JJdvuiSXcLokl3G6JJdyuiSXc7oklKS6JJd0uiSXdbokl3a6JJd3uiSXeLokl3m6G4jJuhuTOrobkzm6G5MsuhuTLbobl1C6GrAEukKwFLpDl4K6Q5eFukOXiLpDgNa6Q5d8ukOXfbpDl5S6Q5eVukOXf7pDl366Q5eWukOXgbpDl3u6Q5L7ukOS+rpDl426Q5ebukOXnbpDl5e6Q5eYukOXirpDl6C6Q5eEukOXnLpCkn26QoGpukKSUrpCgI26QoJsukKRVrpCgcO6QpLJukKSy7pCks66QpMquhqwBbpni5K6Z5KxumeSr7pnkwK6Z5MLumeTLrpnkzC6GrAHum+wFLpwjPm6b5MCum+TC7oasAa6dACwy5enunawA7p3O7p3bbp3hFS6d4PDunawBLp8l6i6fJepunyRVrp8gcO6fJeeunyXn7p2sAW6g4DjuoOByLqDl6q6g5ehuoOXq7p2sAa6iQCwy5exuouwCLqMsBS6jYCKuouwBLqPkn26j5Hjuo+TPrqPkzC6j5NAuo+TKrqPk0W6j5NBuo+TSLqPk0q6j7AUupqTTbqLsAW6nJMuupyTNbDLl7K6n7ADuqCF2bqggSK6oJJ4up+wBLqkgO+6n7AGuqYAuqawFLqogIqwy5ezuqqwBrqrALDLl7S6rbAGuq4AsMuXtbqwsAi6sQC6sLAFurOTULqzl7a6sLAEuraTVbq2k1m6tpNcuraTXbq2k2C6tpNhuraTZLq2k2W6tpNourawFLrAl7e6wJe/sMuXw7rDsAO6xLAUusWSGbrDsAW6x7AUusiSGrrIkhu6yJIcusiSHbrDsAS6zbAUus6IHLrOkh66w7AGutEAsMuXxLrTsAO61JfFutSXxrrUgQ661JfHutSXybrUl8u61LAUutuCkbrTsAi63bAUut6XzbrTsAW64IZNutOwBLrigO+607AGuuSwFLrlgIqwy5fRuuewBbrokfy66JfSuuiR/brol9S66JH+uuiX1rrokf+66JfYuuiF2broiMm66I+suuiSA7rokgS66JIFuuiSBrrnsAi6+AC657AEuvqSB7r6g4u6+rAUuv2SD7DLl9q6/7AEuwCwFLsBl9u7AIRGuv+wBbsEhk27BIHduwSSFbsEl926/7AGuwkAsMuX3rsLsAS7DIG4uwyAjbsLsAW7D4uSuw+IybsLsAa7EgCwy5ffuxSwBLsVgbi7FbAUuxeCq7sVgI27FLAFuxqLkrsaiMm7FLAGux0AsMuX4LsfsAO7IJKduyCIgbsgl+G7IJfiuyCX5Lsgl+a7ILAUuyeCkbsfsAa7KbAUuyqAirDLl+i7LLADuy2X6bstl+q7LbAUuzCX7Lswl+27MJfuuzCX77swgpG7LLAGuzawFLs3gIqwy5fwuzmwA7s6gd27OrAUuzyG/bs6gQG7Opf4uzqX+bs6l/q7Opf7uzqX/Ls6l/27Opf+uzmwBLtGgO+7ObAGu0gAsMuX/7tKsAO7S7AUu0yYALtLiHW7S5LHu0siu0qwBLtRsBS7UpgBu1KYDLtKsAi7VZgDu1WYBLtKsAW7WJgFu1iYBrtYmAe7WJgIu1iYCbtYmAq7WJgLu0qwBrtgALDLmA27YrADu2ORVrtjgcO7Y5gOu2OSurtjlGO7Y5Rlu2OYD7tjmBG7Y7AUu2yCkbtisAS7boDvu2KwBrtwsBS7cYCKsMuYF7tzsAO7dJGeu3SwFLt2gh+7c7AEu3iBjLtzsAa7erAUu3uAirDLmBi7fbADu36TC7t+kwK7fbAEu4GSfbuBkm67gZJSu4GRVruBgcO7gYCNu4GCbLuBksm7gZLLu4GSzrt9sAW7jIuSu4ySr7uMiMm7jJKxu32wBruRALDLmBm7k7AEu5SSfbuUkm67lLAUu5eYGruXmBu7lJHju5SSybuUksu7lJLOu5SAjbuTsAW7n4uSu5+Sr7ufiMm7n5Kxu5+A0ruTsAa7pQCwy5gdu6ewA7uoO7uoiMm7qIuSu6ewBrusALDLmB67rrADu6+TC7uvkwK7r5Mku6+TJbuvkya7r5Mou66wBLu2gbi7toCNu7aIgbu2kp27tpLUu7aS2Lu2ksu7tpLOu66wBbu/i5K7v4jJu66wBrvCALDLmCC7xLADu8WBIrvFkni7xYjJu8WLkrvEsAS7yoDvu8SwBrvMALvMkrqwy5gju8+wA7vQsBS70YHru8+wBLvTgam7z7AGu9UAsMuYJLvXsAO72LAUu9mYJbvXsAS727AUu9yYJrvcmCi73Jgqu9yYLLvcmC673Jgwu9uYMrvblJW717AFu+WYN7vlmDa75Zg+u+WYQbvXsAe76pg3u+qYNrvXsAa77bAUu+6AirDLmEK78LADu/GwFLvymCW78phDu/CwBLv1sBS79phEu/aYRrv2mEi79phKu/aYTLv2mE679pgwu/CwBbv+mEG7/phLu/6YTbv+mD67/phPu/CwBrwEsBS8BYCKsMuYULwHsAO8CIEivAiSeLwHsAS8C4DvvAewBrwNALDLmFK8D7ADvBCBIrwQkni8D7AEvBOA77wPsAa8FQCwy5hUvBewA7wYsBS8GZSzvBewBLwbgIe8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ghzAAEIhsAbAAEIznPnAAEIznLy+IJ0lwABCNrADwABCN5wywABCNrAEwABCObAawABCOpqCwABCOp0mwABCOp0PwABCNrAGwABCPpz5wABCPpy8viCdKsAAQkGwBsAAQkKwGsAAQkOAir4gnSvAAEJFsAPAAEJGgd3AAEJGsBrAAEJIhv3AAEJGgQHAAEJGjvHAAEJGnS/AAEJGjS3AAEJFsATAAEJOgO/AAEJFsAbAAEJQAL4gnTDAAEJSsATAAEJTsBrAAEJUmoLAAEJUnTjAAEJUnTzAAEJUnT3AAEJUnUHAAEJUnVDAAEJSsAbAAEJbnTHAAEJbnTnAAEJbnT6+IJ1TwABCX7AEwABCYLAawABCYZqCwABCYZ1WwABCX7AGwABCZAC+IJ1ZwABCZrADwABCZ4HdwABCZ7AawABCaYb9wABCZ4EBwABCZ51dwABCZ51ewABCZ51fwABCZrAEwABCb4DvwABCZrAGwABCcQC+IJ1gwABCc7AEwABCdLAawABCdZqCwABCdYPiwABCc7AGwABCeADAAEJ4kXy+IJ1uwABCe7ADwABCfIHdwABCfLAawABCfob9wABCfIEBwABCfJyxwABCfIeBwABCfJ1ywABCe7AEwABChIDvwABCe7AGwABChgC+IJ1zwABCiLADwABCiYHdwABCibAawABCi4b9wABCiYEBwABCiYQOwABCiZs3wABCiLAEwABCkIDvwABCiLAGwABCkgC+IJ12wABClLAEwABClbAawABClpqCwABClp2AwABClp2BwABClp2NwABCloKEwABClp2XwABClp2awABClp2dwABClp2gwABClp2lwABClp2owABClp2rwABClp2uwABClp2xwABClp20wABClp23wABClp27wABClp2+wABClp3BwABClp3EwABClp3PwABClp3UwABClp3bwABClp3hwABClp3wwABClp35wABClZ18wABClZ1+wABClZ2GwABClZ2IwABClZsUwABClY7twABClZ2PwABClZ2RwABClYG2wABClZ2UwABClZ2ZwABClZ2cwABClZ2fwABClZ2iwABClZ2nwABClZ2qwABClZ2twABClZ2wwABClZ2zwABClZ22wABClZ25wABClZ29wABClZ3AwABClZ3DwABClZ3OwABClZ3TwABClZ3WwABClZ3ZwABClZ3cwABClZ3fwABClZ3jwABClZ3xwABClZ33wABClLAGwABC0gC+IJ37wABC1LAEwABC1ZpiwABC1bAawABC15pkwABC1ZpmwABC1LAFwABC2p3+wABC1LAGwABC3LAawABC3YCKviCeAMAAQt+wBMAAQuCwGsAAQuGagsAAQuCeA8AAQt+wBcAAQuSdecAAQt+wBsAAQuYAviCeBcAAQuiwA8AAQumwGsAAQuqcHcAAQuqeBsAAQuqcCsAAQuqeB8AAQuqeCMAAQuqeCcAAQumaxsAAQumEF8AAQumeCsAAQuiwBMAAQvSeDsAAQvSeEMAAQvSO7cAAQvSbGMAAQvSeEcAAQvSAjMAAQvSwGsAAQvueE8AAQvSA78AAQuiwBcAAQv6eD8AAQv6CHMAAQuiwBsAAQwEAviCeGsAAQwOwA8AAQwSwGsAAQwWZEcAAQwOwBMAAQweeHcAAQweAjMAAQwOwBcAAQwqCHMAAQwOwBsAAQwyeG74gnh7AAEMOsAPAAEMPsBrAAEMQnh/AAEMQniDAAEMOsAjAAEMTsBrAAEMUgIrAAEMOsATAAEMWniHAAEMWniO+IJ4lwABDGbADwABDGoHdwABDGrAawABDHIb9wABDGoEBwABDGoGMwABDGoCCwABDGoNswABDGp4twABDGp4uwABDGpWAwABDGp4vwABDGbAEwABDJoDvwABDGbAGwABDKAC+IJ4wwABDKrADwABDK4HdwABDK7AawABDLYb9wABDK4EBwABDK542wABDK543wABDK544wABDK545wABDK4cCwABDKrAEwABDNYDvwABDKrAGwABDNwC+IJ46wABDObADwABDOoHdwABDOrAawABDPIb9wABDOoEBwABDOpvhwABDOp4+wABDOocCwABDObAEwABDQoDvwABDObAGwABDRAC+IJ4/wABDRrADwABDR55AwABDR4rYwABDR5mTwABDR55BwABDR55CwABDR55DwABDR55EwABDR55FwABDR55GwABDR55HwABDR55IwABDR55JwABDR55KwABDR55LwABDR55MwABDR55NwABDR5sQwABDR55OwABDR4PDwABDR55PwABDR55QwABDR55RwABDR55SwABDR55TwABDR55UwABDR55VwABDR55WwABDR55XwABDRrAEwABDZIDvwABDZJ5awABDRrAGwABDZwC+IJ52wABDabADwABDajvAAENpsAbAAENsAL4gnnfAAENusAPAAENvsBrAAENwnnjAAENwnnnAAENwnnrAAENwnnvAAENwnnzAAENwnn3AAENwnn7AAENwnn/AAENwnoDAAENwnoHAAENwnoLAAENwnoPAAENwnoTAAENwnoXAAENwnobAAENwnofAAENwnojAAENwnonAAENwnorAAENwnovAAENwnozAAENvgd3AAENvno3AAENvno7AAENvno/AAENvnpDAAENvnpHAAENvnpLAAENvnpPAAENvnpTAAENvnpXAAENvnpbAAENvnpfAAENvnpjAAENvicfAAENvnpnAAENvnprAAENvnpvAAENvnpzAAENvnp3AAENvnp7AAENvnp/AAENvnqDAAENvgQHAAENusATAAEOdgO/AAENusAbAAEOfsBrAAEOggIq+IJ62wABDorADwABDo7AawABDpJ63wABDpJ64wABDpJ65wABDpJ66wABDpJ67wABDpJ68wABDpJ69wABDpJ6+wABDpJ6/wABDpJ7AwABDpJ7BwABDpJ7CwABDpJ7DwABDpJ7EwABDpJ7FwABDpJ7GwABDpJ7HwABDpJ7IwABDpJ7JwABDpJ7KwABDpJ7LwABDpJ7MwABDpJ7NwABDo4HdwABDo57OwABDo57PwABDo57QwABDo57RwABDo57SwABDo57TwABDo5VcwABDo57UwABDo57VwABDo57WwABDo57XwABDo57YwABDo57ZwABDo57awABDo57bwABDo57cwABDo57dwABDo57ewABDo57fwABDo57gwABDo57hwABDo57iwABDo57jwABDo4EBwABDorAEwABD1YDvwABDorAGwABD17AawABD2ICKviCe+8AAQ9qwBMAAQ9uwGsAAQ9yagsAAQ9yfEsAAQ9yfFsAAQ9ue/cAAQ9ufFMAAQ9ua9sAAQ9qwBsAAQ+MAviCfGcAAQ+WwBMAAQ+aaZsAAQ+WwBsAAQ+iwGsAAQ+mAir4gnxvAAEPrsAPAAEPsgd3AAEPssBrAAEPuhv3AAEPsgQHAAEPsklvAAEPsnx7AAEPrsATAAEPzgO/AAEPrsAbAAEP1AL4gnx/AAEP3sAPAAEP4gd3AAEP4nyDAAEP4nyHAAEP4nyLAAEP4nyPAAEP4nyTAAEP4nyXAAEP4nybAAEP4nyfAAEP4nyjAAEP4klvAAEP4nynAAEP4gQHAAEP3sATAAEQGmxjAAEQGgO/AAEP3sAbAAEQJsBrAAEQKgIq+IJ8zwABEDLADwABEDZ80wABEDSLAAEQNsBrAAEQQnzXAAEQMsAjAAEQSn0DAAEQMsATAAEQUsBrAAEQVn0LAAEQUgIzAAEQUgO/AAEQMsAXAAEQZghzAAEQMsAbAAEQbAMAARBuIQ8AARBufNsAARBufN8AARBufOcAARBufOsAARBufPMAARBufPr4gn0XAAEQksAPAAEQlgd3AAEQlsBrAAEQnhv3AAEQlgQHAAEQlhNvAAEQlhNzAAEQlmybAAEQln0zAAEQlbcAARCWEVMAARCSwBMAARDCA78AARCSwBsAARDIAviCfTcAARDSwA8AARDWB3cAARDWwGsAARDeG/cAARDWBAcAARDWfUMAARDWfUcAARDSwBMAARDyA78AARDSwBsAARD4AviCfUsAARECwA8AAREGwGsAAREKfU8AAREGb4cAAREGfVMAAREGfVcAAREGfVsAARECwCMAAREiBusAARECwBMAAREqBxMAAREqAjMAAREqA78AARECwBcAARE6CHMAARECwBsAARFCwGsAARFGAir4gn13AAERTsAPAAERUgd3AAERUsBrAAERWhv3AAERUgQHAAERUnPPAAERUn2PAAERUn2TAAERUn2XAAERUn2bAAERTsATAAERegO/AAERTsAbAAERgAL4gn2fAAERisAPAAERjn2jAAERjn2nAAERisATAAERmhk/AAERmgIzAAERmgO/AAERisAXAAERqghzAAERisAbAAERsAMAARGyfar4gn27AAERvsAPAAERwsBrAAERxn2/AAERxn3DAAERxn3HAAERxn3LAAERxn3PAAERxn3TAAERxjFTAAERxn3XAAERxn3bAAERxn3fAAERxn3jAAERxn3nAAERxn3rAAERvsATAAER/gIzAAER/gO/AAERvsAXAAESCghzAAERvsAbAAESEAL4gn5/AAESGsAPAAESHsBrAAESIn2/AAESIn3DAAESIn3LAAESIjFTAAESIn6DAAESIn6HAAESIn3bAAESGsATAAESQgIzAAESQgO/AAESGsAXAAESTghzAAESGsAbAAESVAL4gn6/AAESXsAPAAESYsBrAAESZn2/AAESZn3DAAESZn3HAAESXsATAAESdgIzAAESXsAXAAESfghzAAESXsAbAAEShAL4gn7LAAESjsAPAAESkgd3AAESksBrAAESmhv3AAESkgQHAAESkn7PAAESkn7TAAESjsATAAESrgO/AAESjsAbAAEStAL4gn7XAAESvsAPAAESwhNvAAESwjDzAAESwhNzAAESwjD/AAESwkr3AAESvsATAAES2n7jAAES2gIzAAES2gO/AAESvsAXAAES6bcAARLqEVMAARLqCHMAARK+wBsAARL6ftsAARL6wGsAARMCAir4gn7rAAETCsAPAAETDgd3AAETDsBrAAETFhv3AAETDgQHAAETDn73AAETDn77AAETCsATAAETKgO/AAETCsAbAAETMAL4gn7/AAETOsAPAAETPhBfAAETPn8DAAETOsATAAETSgIzAAETSgO/AAETOsAXAAETVghzAAETOsAbAAETXAL4gn8PAAETZsAPAAETagZTAAETabcAARNqEVMAARNmwBcAARN6ZFMAARN6fxcAARN6fxsAARN6CHMAARNmwBMAAROOfx8AAROOfyMAAROOfycAAROOAjMAAROOA78AARNmwBsAAROkAwABE6Z/EviCfzMAAROywA8AARO2MPcAAROywBMAARO+AjMAARO+A78AAROywBcAARPKCHMAAROywBsAARPQAviCfzsAARPawA8AARPeB3cAARPewGsAARPmG/cAARPeBAcAARPef1cAARPeIH8AARPef1sAARPef18AARPef2MAARPef2cAARPawBMAARQKA78AARPawBsAARQQAviCf2sAARQawA8AARQeB3cAARQewGsAARQmG/cAARQeBAcAARQef1cAARQeIH8AARQawBMAARQ6A78AARQawBsAARRAAviCf3cAARRKwA8AARROB3cAARROwGsAARRWG/cAARROBAcAARROf5MAARROf5cAARROf5sAARROMPMAARROMP8AARROf58AARRKwBMAARR6A78AARRKwBsAARSAAviCf6MAARSKwA8AARSOf6cAARSOf6sAARSOf68AARSOf7MAARSOMPsAARSOMPcAARSOE28AARSOf5MAARSOf7cAARSKwBsAARS0AwABFLbAawABFL4CKviCf7sAARTGwBcAARTKMPcAARTKMPsAARTKf8cAARTKf88AARTKf9cAARTKf98AARTKf+cAARTKf+8AARTGwBMAARTuf/cAARTuwGsAART2f/8AART2gBMAART2gCcAART2gDcAART2gEMAART2d2MAARTugAcAARTugBsAARTugCMAARTugC8AARTugD8AARTugFMAARTGwBsAARUqwGsAARUuAir4goBbAAEVNsAPAAEVOsBrAAEVPoBfAAEVPoBjAAEVNsATAAEVSsBrAAEVTmoLAAEVToCLAAEVToCrAAEVToC3AAEVToDHAAEVSoB/AAEVSmkbAAEVSoCzAAEVSoC/AAEVSmvbAAEVNsAXAAEVeoB3AAEVeoB7AAEVNsAbAAEVhAL4goDTAAEVjsAPAAEVkgd3AAEVksBrAAEVmhv3AAEVkgQHAAEVkoDnAAEVkoDrAAEVkoDvAAEVkoDzAAEVjsATAAEVtgO/AAEVjsAbAAEVvAL4goD3AAEVxsAPAAEVysBrAAEVzoD7AAEVxsATAAEV1oEDAAEV1sBrAAEV3oEHAAEV3oEbAAEV1gO/AAEVxsAXAAEV7oEPAAEV7oETAAEV7oEXAAEVxsAbAAEV/AL4goEvAAEWBsAPAAEWCgd3AAEWCsBrAAEWEhv3AAEWCgQHAAEWCoFDAAEWCoFHAAEWCi7vAAEWCluXAAEWBsATAAEWLgO/AAEWBsAbAAEWNAL4goFLAAEWPsAPAAEWQhNvAAEWQjDzAAEWQhNzAAEWQjD/AAEWQkNTAAEWPsATAAEWWgO/AAEWPsAbAAEWYsBrAAEWZgIq+IKBXwABFm7ADwABFnLAawABFnaBYwABFnaBZwABFnaDqwABFnaDrwABFnaD4wABFnaD5wABFnKDpwABFm7AFwABFpaD7wABFpaD9wABFpYIcwABFm7AEwABFqYCMwABFqYDvwABFqaD/wABFqbAawABFraD+wABFm7AGwABFrwDAAEWvoPq+IKEAwABFsrADwABFs7AawABFtKEBwABFtKECwABFtKEDwABFtKEFwABFtKEGwABFtKEHwABFtIakwABFtKEIwABFtKEJwABFtKEKwABFtKELwABFtKEMwABFtKENwABFtKEOwABFtKEPwABFtKEQwABFtKERwABFtKESwABFtKETwABFtKEVwABFtKEWwABFtKEXwABFtKEYwABFtKEZwABFtKEawABFtKEbwABFtKEcwABFtKEdwABFtKEewABFtKEfwABFtKEgwABFtKEhwABFtKEiwABFtKEjwABFtKEkwABFtKElwABFtKEmwABFtKEnwABFtKEowABFtKEpwABFsrAFwABF3aErwABF3aEswABF3aEtwABF3aEuwABF3aEvwABF3aEwwABF3Ya8wABF3aExwABF3Z+GwABF3aEywABF3aEzwABF3aE0wABF3aE1wABF3aE2wABF3aE3wABF3aE4wABF3aE5wABF3aE6wABF3aE7wABF3aE8wABF3aE+wABF3aE/wABF3aFHwABF3aFIwABF3aFJwABF3aFKwABF3aFLwABF3aFTwABFsrAHwABF+qExwABF+qEzwABF+qE3wABF+qE5wABF+qE6wABF+qE7wABF+qE8wABF+qE+wABF+qFIwABF+qFJwABF+qFLwABF+qFTwABFsrAEwABGB7AawABGCKEqwABGCKFAwABGCKFRwABGCKFUwABGCKFXwABGB6FCwABGB6FEwABGB6FMwABGB6FOwABGB6FQwABGB6FZwABFsrAGwABGFLAawABGFYCKviChW8AARhewA8AARhiwGsAARhmhXMAARhmhXcAARhmhXsAARhmhX8AARhmhYMAARhmDg8AARhewBcAARiChYcAARiCcNMAARiChYsAARiChY8AARiChZMAARiCCHMAARhewBMAARieA78AARieAjMAARhewBsAARiqwGsAARiuAir4goWbAAEYtsAPAAEYugd3AAEYusBrAAEYwhv3AAEYugQHAAEYuoWjAAEYuoWnAAEYtsATAAEY1gO/AAEYtsAbAAEY3AACwCcAARjmwAsAARjqiGMAARjqiGcAARjqiGsAARjqiG8AARjmwA8AARj+wCcAARkCpAMAARkCpAcAARkCpAsAARkCpA8AARkCYmcAARkCpB8AARkCpCMAARkCpCcAARkCpCsAARkCpC8AARkCpDMAARkCpDcAARkCpDsAARkCpD8AARkCpEMAARkCpEcAARkCpEsAARkCpE8AARkCpFMAARkCpFcAARkCpFsAARkCpF8AARkCpGMAARkCpGcAARkCpGsAARkCpG8AARkCpHMAARkCpHcAARkCpHsAARkCpH8AARkCpIMAARkCpIcAARkCpIsAARj+pBMAARj+N+8AARj+pBcAARj+pBsAARjmwBMAARmawCcAARmepI8AARmepJMAARmepJcAARmepJsAARmepKMAARmepKsAARmeH58AARmelHcAARmeH6cAARmepLsAARmepOMAARmepOcAARmepOsAARmaVTMAARmapLcAARmaCvsAARjmiHMAARniwA8AARnmwCcAARnqiHcAARniwBcAARnyBCMAARniwBsAARn4AwABGOaIewABGgLADwABGgbAJwABGgqIdwABGgqIfwABGgoLFwABGgqIgwABGgLAFwABGh4EKwABGgLAEwABGiYEJwABGgLAGwABGiwDAAEY5oiHAAEaNsAjAAEaOAMAARo2wBMAARpCC0cAARpCBDMAARpCwCcAARpOiJcAARpOiKMAARpOiKsAARpCEWMAARpCEeMAARpCEYcAARpCBEsAARpCBysAARo2wBcAARpyByMAARpyBCMAARpyBwsAARpyB1cAARpyB18AARjmiLsAARqKwCMAARqOwCcAARqSLX8AARqSXzcAARqKwBMAARqeC0cAARqeEYcAARqeBEsAARqeBysAARqKwBcAARqyByMAARqyBCMAARqyBwsAARqyB1cAARqyB18AARjmiMcAARrKwA8AARrOwCcAARrSPTcAARrSEPcAARrSDg8AARrSCxcAARrKwBcAARrmBCsAARrKwBMAARruBCcAARrKwBsAARr0AwABGOaIywABGv7ADwABGwLAJwABGwaIzwABGwaI0wABGwaI1wABGwaI2wABGwaI3wABGwaI6wABGwaI7wABGwaI8wABGwaI9wABGwaI+wABGwaJAwABGwaJCwABGwaJEwABGwaJFwABGwaJGwABGwaJHwABGwaJIwABGwaJJwABGwaJKwABGwaJLwABGwaJMwABGwaJNwABGwYtqwABGwaJOwABGwaJRwABGwaJSwABGwaJTwABGwaJUwABGwaJVwABGwJDUwABGwKI4wABGwKI5wABGv7AEwABG4oU7wABG4rAJwABG5KJbwABG5KJfwABG5KJgwABG5KJmwABG5KJnwABG5KJwwABG5KJywABG5KJ9wABG5KJ/wABG5KKDwABG5KKEwABG5KKFwABG5KKNwABG5KKPwABG5KKQwABG5KKRwABG5KKUwABG5KKXwABG5KKYwABG5KKZwABG5KKawABG5KKbwABG5KKcwABG5KKdwABG5KKfwABG5KKjwABG5KKswABG5KKvwABG5KKwwABG5KKxwABG5KKzwABG5KK4wABG5KK0wABG5KLDwABG5KLfwABG5KMMwABG5KMOwABG4oPrwABG4o7vwABG4oNxwABG4oPFwABG4qKTwABG4oChwABG4oCmwABG4oCjwABG4oDYwABG4oENwABG4oEGwABG4oPGwABG4oCMwABG4oaSwABG4qJewABG4oX4wABG4oC7wABG4oFbwABG4oKMwABG4oFewABG4oZ4wABG4oyCwABG4qLFwABG4qL4wABG4qL6wABG4qL7wABG4o+UwABG4pudwABG4oXvwABG4oDvwABG4oY6wABGv7AFwABHKbAJwABHKqJxwABHKYIcwABHKYO/wABHKYXpwABHKYwswABHKaKCwABHKYx/wABHKaL8wABGv7AIwABHM4LAwABHM7AJwABHNaJ0wABHNaJ2wABGv7AGwABHOLAJwABHOYCKwABHOaJYwABGOaMRwABHPLAFwABHPbAJwABHPqLNwABHPLAEwABHQLAJwABHQYcKwABHQaLTwABHQaLSwABHQaLUwABHPLAGwABHRgDAAEY5oxLAAEdIsAPAAEdJsAnAAEdKoxPAAEdKos3AAEdKoxTAAEdKoxXAAEdKoxbAAEdKoxfAAEdKoxjAAEdKoxnAAEdKoxrAAEdKoxvAAEdKoxzAAEdIsATAAEdWsAnAAEdXox3AAEdXox7AAEdXox/AAEdXhwrAAEdXotTAAEdXoyTAAEdXotLAAEdXotPAAEdIsAbAAEdgAMAARjmjJcAAR2KwA8AAR2OwCcAAR2SjE8AAR2SizcAAR2SjJsAAR2SjJ8AAR2SjKMAAR2SjKcAAR2SjFcAAR2SjKsAAR2KwBMAAR22wCcAAR26HCsAAR26i1MAAR26jJMAAR26i0sAAR26i08AAR2KwBsAAR3QAwABGOaMswABHdrADwABHd6MtwABHd6MuwABHd6MvwABHd7AJwABHe6MwwABHe6MxwABHdrAIwABHfqMywABHdrAFwABHgIIcwABHgLAJwABHgqM1wABHgIx/wABHgJsKwABHgIxnwABHgIdUwABHgIXpwABHdrAEwABHiYENwABHibAJwABHi4DUwABHi6M3wABHi6LTwABHi6M6wABHi6KzwABHi6M9wABHi6M/wABHi6NCwABHi6NEwABHi6NGwABHi6NIwABHi6NJwABHi6NKwABHi6NLwABHi6NMwABHi6NNwABHi6NOwABHi4gTwABHi6NfwABHi6NiwABHi6NmwABHiYEGwABHiYPGwABHiYaSwABHiYX4wABHiYZ4wABHiaJewABHiYPrwABHiYCMwABHiYC7wABHiYKMwABHiYFewABHiYFbwABHiY7vwABHiZuVwABHiaNUwABHiaNVwABHiZFgwABHiaNTwABHiaJ4wABHiaNWwABHiaNXwABHiY7xwABHiZudwABHiYXvwABHiYDvwABHiZsMwABHiaNhwABHiaNkwABHiaKTwABGOaNtwABHvrADwABHv7AJwABHwKNuwABHwKNvwABHwKNwwABHwKNxwABHv4EiwABHvrAEwABHxrAJwABHx6NywABHx6N1wABHx6N3wABHxoDvwABHvrAFwABHzLAJwABHzaN5wABHvrAGwABHz7AJwABH0JGPwABGOaN/wABH0rAEwABH07AJwABH1KNywABH04DvwABH0rAGwABH17AJwABH2JGPwABGOaOGwABH2rADwABH27AJwABH3KNvwABH3KNwwABH3KNxwABH3KOHwABH2rAEwABH4YDvwABH2rAGwABH47AJwABH5JGPwABGOaOIwABH5rADwABH57AJwABH6IyPwABH5rAEwABH6oDvwABH5rAGwABH7ADAAEY5o4rAAEfusAPAAEfvsAnAAEfwo4fAAEfusATAAEfygO/AAEfusAbAAEf0AMAARjmji8AAR/awA8AAR/ewCcAAR/iG/cAAR/awBMAAR/qA78AAR/awBsAAR/wAwABGOaOOwABH/rADwABH/7AJwABIAIb9wABH/rAEwABIArAJwABIA6NywABIAoDvwABH/rAGwABIBgDAAEY5o4/AAEgIsAPAAEgJsAnAAEgKo5DAAEgKo5HAAEgKo5LAAEgKjPDAAEgKl0zAAEgKo5PAAEgIsAjAAEgRsAnAAEgSi1/AAEgIsATAAEgUgIzAAEgUsAnAAEgWhRHAAEgWo5XAAEgIsAXAAEgZghzAAEgZbsAARjmjmMAASBywA8AASB2wCcAASB6TtMAASBywBMAASCCEdMAASCCEdcAASCCDbMAASCCEdsAASCCEeMAASCCEZMAASCCEYcAASCCwCcAASCiiLcAASCijpMAASCiiJcAASCijrsAASCijqMAASCiEv8AASCijosAASCijscAASCCC0cAASCCBDMAASCCAgsAASCCDa8AASCCEL8AASCCBEsAASCCBv8AASCCB3MAASCCA58AASCCA78AASCCBysAASCCBy8AASBywCMAASD0AwABIPaOZwABIPbAJwABIQKOawABIHLAFwABIQrAJwABIQ5pAwABIQoHIwABIQoHCwABIQoHVwABIQoHXwABIQoDjwABIQoNiwABIQoEIwABIHLAHwABITIHIwABGOaO4wABITrADwABIT7AJwABIUKO5wABITrAEwABIUoHJwABIUoLRwABIUoESwABIUoLpwABIUoNlwABIUoEMwABIUoNrwABIUoNowABIUoDnwABIUoNswABIUoGrwABIUoPdwABIUoPXwABIUoPZwABIUoOVwABIUoDvwABITrAFwABIY4DjwABIY4NiwABIY4HIwABIY4NjwABIY4EBwABIY4PawABITrAGwABIarAJwABIa5GPwABGOaPAwABIbbADwABIbrAJwABIb4LlwABIbbAFwABIcYEIwABIcYHIwABIbbAGwABIdADAAEY5o8HAAEh2sAPAAEh3sAnAAEh4guXAAEh2sAXAAEh6gQjAAEh6gcjAAEh2sAbAAEh9AMAARjmjwsAASH+wA8AASICwCcAASIGC5cAASH+wBcAASIOBCMAASIOByMAASH+wBsAASIYAwABGOaPDwABIiLADwABIibAJwABIioLlwABIiqPEwABIioLFwABIiLAEwABIjoEJwABIiLAFwABIkIEKwABIiLAGwABIkgDAAEY5o8XAAEiUsAPAAEiVsAnAAEiWguXAAEiWo8TAAEiWgsXAAEiUsATAAEiagQnAAEiUsAXAAEicgQrAAEiUsAbAAEieAMAARjmjxsAASKCwA8AASKGwCcAASKKC5cAASKKjxMAASKKCxcAASKCwBMAASKaBCcAASKCwBcAASKiBCsAASKCwBsAASKoAwABGOaPHwABIrLADwABIrbAJwABIrqJNwABIrLAEwABIsIENwABIsIEGwABIsIPGwABIsIaSwABIsIX4wABIsIZ4wABIsIPrwABIsIChwABIsICmwABIsICjwABIsKJewABIsLAJwABIvKPMwABIvKPJwABIvKPKwABIvKPLwABIvKPQwABIvKPSwABIvKNIwABIvKNJwABIvKNKwABIvKNLwABIvKNMwABIvKNNwABIvKNOwABIvKNEwABIvKPcwABIvKPdwABIvKLfwABIsIPFwABIsINxwABIsIC7wABIsIKMwABIsIFewABIsIFbwABIsICMwABIsI7vwABIsKL7wABIsI+UwABIsKKTwABIsJuVwABIsKNUwABIsKNVwABIsJFgwABIsKNTwABIsKJ4wABIsKNWwABIsKNXwABIsI7xwABIsJudwABIsIXvwABIsJsMwABIsKNhwABIsKNkwABIsIY6wABIsKLFwABIsKL4wABIsKL6wABIrLAFwABI64XpwABI64wswABI66KCwABI64xnwABI64x/wABI65sKwABI64dUwABIrLAGwABI8wDAAEY5o+HAAEj1sAPAAEj2sAnAAEj3o+LAAEj3o+PAAEj3pKfAAEj3pKjAAEj3pKnAAEj1sAjAAEj9sAnAAEj+i1/AAEj1sAXAAEkAghzAAEkAsAnAAEkCozXAAEkAg7/AAEj1sATAAEkFgNjAAEkFgKHAAEkFsAnAAEkIo8zAAEkIpK3AAEkIpLDAAEkIpLLAAEkFgO/AAEY5pLPAAEkOsAjAAEkPsAnAAEkQi1/AAEkOsAXAAEkSghzAAEkSsAnAAEkUozXAAEkSg7/AAEkOsATAAEkXgNjAAEkXsAnAAEkZo8zAAEY5pLbAAEkbsAPAAEkcsAnAAEkdpLfAAEkdpLjAAEkdpLnAAEkdpLrAAEkdpLvAAEkdpLzAAEkdpL3AAEkdpL7AAEkdpL/AAEkdpMDAAEkdpMHAAEkdpMLAAEkdpMPAAEkdpMTAAEkdpMXAAEkdpMbAAEkdpMfAAEkdpMjAAEkdpMnAAEkdpMrAAEkdpMvAAEkdpMzAAEkdiFLAAEkdpM3AAEkdpM7AAEkdpM/AAEkdiEnAAEkdjQfAAEkdpNDAAEkdpNHAAEkbsATAAEk8sAnAAEk9pNTAAEk9pNnAAEk9pOHAAEk9pOTAAEkbsAXAAElCjNbAAElCsAnAAElEpNfAAElCjS7AAElCjNfAAElCjNjAAElCjOPAAElCpODAAElCjK/AAElCjL3AAEkbsAbAAElNsAnAAElOpNLAAElOpNPAAElNAMAARjmk5sAASVKwCMAASVOwCcAASVSLX8AASVKwBMAASVak58AASVaNisAARjmk6MAASVmwA8AASVqk6cAASVqk6sAASVqiUMAASVqk68AASVqk7MAASVmwBcAASWCCHMAASVmwBMAASWKAjMAASVmwBsAASWQAwABGOaTuwABJZrADwABJZ6TvwABJZ4LSwABJZrAGwABJagDAAEY5pPDAAElssAPAAEltsAnAAElupPHAAElupPLAAElupPPAAElthTfAAElssAXAAElzbcAASXOEVMAASXOk+sAASXOk6cAASXOk/8AASWywBMAASXmwCcAASXqIYcAASXqE0MAASXmTI8AASXmC0cAASXmk98AASXmk+8AASWywBsAASYGwCcAASYKAisAARjmlAcAASYSwA8AASYWwCcAASYalAsAASYSwCMAASYgAwABJhLAEwABJiqJowABJiqUFwABJiqUGwABJiosRwABJiqUIwABJirAJwABJkKT9wABJkKUEwABJkKUHwABJhLAFwABJlKTpwABJlKUKwABJlKUMwABJlKUOwABJlKUQwABJlLAJwABJmqT1wABJmqUTwABJmqUAwABGOaUZwABJnrADwABJn7AJwABJoKUawABJoKUbwABJoIhhwABJnrAFwABJpIEIwABJnrAGwABJpgDAAEY5pRzAAEmosAPAAEmpsAnAAEmqpRvAAEmqo8TAAEmqpRrAAEmqgsXAAEmosAXAAEmvgQrAAEmosATAAEmxsAnAAEmyh+fAAEmypR3AAEmxgQnAAEmosAbAAEm2AMAARjmlHsAASbiwBsAASbkAwABGOaUfwABJu7ADwABJvLAJwABJvaUgwABJvaUhwABJvaUiwABJvaUjwABJvaUkwABJvaUlwABJvaUmwABJu7AEwABJxbAJwABJxqUnwABJxqUvwABJxqUwwABJxqUzwABJxqU0wABJxqU+wABJxqT2wABJxqVAwABJxqVCwABJxqVDwABJxqVEwABJxqVFwABJxqVOwABJxqVPwABJxqVSwABJxqVXwABJxqVYwABJxqVZwABJxqVewABJxqVfwABJxqVlwABJxqVnwABJxaUrwABJxYLRwABJxYXQwABJxYENwABJxYDvwABJxYCMwABJxaKTwABJxZQ7wABJxYiawABJxYRwwABJxYRywABJxYYTwABJxaN7wABJxaVGwABJxaVHwABJxYPGwABJxYY7wABJxaVJwABJxYHEwABJxaVKwABJxYRqwABJxZHOwABJxaVVwABJxaVWwABJxaVcwABJxaUFwABJxaUGwABJxYTLwABJxZbBwABJxYb7wABJu7AIwABJ+7AJwABJ/ItfwABJu7AFwABJ/oIcwABJ/rAJwABKAKM1wABKAKUqwABJ/oHIwABJ/oDjwABJ/oNiwABJ/oZdwABJ/qViwABGOaVpwABKCLADwABKCbAJwABKCqVqwABKCqVswABKCLAIwABKDbAJwABKDotfwABKCLAFwABKEIIcwABKCLAEwABKEoXQwABKErAJwABKFKUnwABKFKVAwABKFKVwwABKFKVzwABKFKV+wABKFKWAwABKFKPewABKFI4WwABKEoCMwABKEoTLwABKEoRwwABKEoHEwABKEoPGwABKEoY7wABKEqVJwABKEob7wABKEpbBwABGOaWFwABKJrAIwABKJ7AJwABKKItfwABKJrAEwABKKrAJwABKK6WGwABKK6UnwABKKoXQwABKKoCMwABGOaWIwABKMLAIwABKMbAJwABKMotfwABKMLAEwABKNLAJwABKNaUnwABKNIXQwABKNICMwABGOaWJwABKObAIwABKOrAJwABKO4tfwABKObAEwABKPbAJwABKPqUnwABKPYXQwABKPYCMwABGOaWKwABKQrADwABKQ23AAEpDhTfAAEpDpOnAAEpCsAXAAEpHhFTAAEpHpPrAAEpCsATAAEpKgtHAAEpKkyPAAEpKpPfAAEpCsAbAAEpOAMAARjmli8AASlCwA8AASlGwCcAASlKljMAASlKljcAASlKDg8AASlCwBcAASlaBCMAASlaBwsAASlCwBsAASlkAwABGOaWOwABKW7ADwABKXLAJwABKXaWMwABKXaWNwABKXYODwABKXYLFwABKW7AEwABKYoEJwABKW7AFwABKZIEKwABKW7AGwABKZgDAAEY5pY/AAEposATAAEppgO/AAEposAbAAEprAMAARjmlkcAASm2wCMAASm6wCcAASm+LX8AASm2wBcAASnGCHMAASm2wBMAASnOAjMAARjmllMAASnWwCMAASnawCcAASneLX8AARjmllcAASnmwCMAASnqwCcAASnuLX8AARjmllsAASn2wCMAASn4AwABKfbAFwABKgILSwABKgCLAAEp9sAfAAEqDIsAASn2wBMAASoWwCcAASoalmMAASoall8AASoaFA8AASoaBV8AARjmlncAASouwA8AASoyBIsAASouwBcAASo6lnsAASouwBMAASpCA78AASouwBsAASpIAwABGOaWhwABKlLAGwABKlQDAAEY5paLAAEqXsAXAAEqYgSLAAEqXsAbAAEqaAMAARjmlo8AASpywBsAASp0AwABGOaWkwABKn7ADwABKoIZNwABKoJlDwABKoLAJwABKo4GSwABKn7AIwABKpQDAAEqfsAbAAEqnsAnAAEqogIrAAEY5paXAAEqqsAXAAEqrkNTAAEqrojjAAEqrojnAAEqrg7/AAEqrhenAAEqrjCzAAEqrooLAAEqrjH/AAEqrovzAAEqqsATAAEq1hTvAAEq1pabAAEq1ju/AAEq1g+vAAEq1gQ3AAEq1gQbAAEq1g8bAAEq1hfjAAEq1hpLAAEq1hnjAAEq1ol7AAEq1g3HAAEq1g8XAAEq1gKHAAEq1gKbAAEq1gKPAAEq1gNjAAEq1gLvAAEq1gVvAAEq1gozAAEq1gV7AAEq1opPAAEq1jILAAEq1osXAAEq1ovjAAEq1ovrAAEq1ovvAAEq1j5TAAEq1m53AAEq1he/AAEq1gO/AAEq1hjrAAEqqsAjAAErWgsDAAEY5kN/AAErYsAXAAErZsAnAAEraozXAAErZghzAAErYsAjAAErdpafAAErYsATAAErfgKHAAErfgKbAAErfgKPAAErfgO/AAEY5panAAErksATAAErlopPAAErlhFrAAErksAbAAEroAMAARjmlqsAASuqwA8AASuuwCcAASuylq8AASuylrMAASuylrcAASuylrsAASuylr8AASuylsMAASuylscAASuylssAASuyls8AASuyltMAASuyltcAASuyCkcAASuyly8AASuylzcAASuultsAASuult8AASuuluMAASuulucAASuulusAASuulu8AASuulvMAASuulvcAASuulvsAASuulv8AASuulwMAASuulwcAASuulwsAASuulw8AASuulxMAASuulxcAASuulxsAASuulx8AASuulyMAASuulycAASuulysAASuuTgcAASuqwBMAASxGwCcAASxKl4MAASxKl4sAASxKl5cAASxKl58AASxKl6cAASxKmAMAASxKmAcAASxKmAsAASxKmA8AASxKmBMAASxKmBsAASxKmB8AASxKmC8AASxKmDcAASxKmHsAASxKmIcAASxKmIsAASxKmI8AASxKmKMAASxGFO8AASxGlpsAASxGAjMAASxGmGcAASxGmGsAASxGmG8AASxGik8AASxGmHMAASxGmHcAASxGA78AASxGmJsAASxGAgsAASxGmJ8AASxGEDsAASuqwBcAASzSwCcAASzWl/cAASzWl/sAASzSCHMAASzSImMAASzSl28AASzSmLMAASzSmLsAASzSl0cAASzSl0sAASzSl08AASzSl1MAASzSl1cAASzSKtsAASzSl1sAASzSl18AASzSmMcAASuqwBsAAS0YAwABLRqXYwABLRohbwABLRqXZwABLRqXawABLRrAJwABLTKXcwABLTIGTwABLTKXfwABGOZ9jwABLULADwABLUaYywABLUaYzwABLUaY0wABLUaY1wABLUaY3wABLULAEwABLV7AJwABLWKY4wABLWKY5wABLWJISwABLV6JewABLV4ENwABLV4EGwABLV4PGwABLV4Z4wABLV4X4wABLV4aSwABLV4PrwABLV47vwABLV5uVwABLV6NUwABLV6NVwABLV5FgwABLV6NTwABLV6J4wABLV6NWwABLV6NXwABLV4DvwABLV4U7wABLV6WmwABLULAFwABLcIXpwABLULAGwABLcgDAAEY5pkLAAEt0sAPAAEt1pkPAAEt1pkTAAEt1pkXAAEt1pkbAAEt1pkfAAEt1pkjAAEt1pknAAEt1pkrAAEt1pkvAAEt1pkzAAEt1pk3AAEt1pk7AAEt1pk/AAEt1plDAAEt1plHAAEt1kNTAAEt1sAnAAEuGplLAAEt0sATAAEuIgQ3AAEuIgQbAAEuIg8bAAEuIhpLAAEuIgLvAAEuIgozAAEuIgVvAAEuIgV7AAEuIgIzAAEuIopPAAEuIgO/AAEuIju/AAEuIg+vAAEt0sAXAAEuWplfAAEuWpljAAEuWplnAAEuWplrAAEuWgrXAAEuWoEfAAEuWghzAAEuWjH/AAEt0sAbAAEufAMAAS5+wCcAAS6GmVcAARjmmYMAAS6OwA8AAS6SwCcAAS6WCuMAAS6OwBMAAS6emYcAAS6ewCcAAS6mmYsAAS6mmY8AAS6OwBcAAS6wxwABLo7AGwABLrgDAAEY5pmTAAEuwsAPAAEuxgSLAAEuwsATAAEuzgO/AAEuwsAbAAEu1AMAARjmmZ8AAS7ewBsAAS7gAwABGOaZowABLurAGwABLuwDAAEY5pmnAAEu9sATAAEu+gO/AAEu9sAbAAEvAAMAARjmma8AAS8KwA8AAS8OwCcAAS8SmbMAAS8OmbcAAS8OGTcAAS8OBIsAAS8KwBMAAS8mmcMAAS8mA78AAS8KwBcAAS8ywCcAAS82mccAAS82mdMAAS8KwBsAAS9AAwABL0CLAAEvQpm7AAEY5pnjAAEvUsAPAAEvVbcAAS9WEVMAAS9WwCcAAS9iBksAAS9SwCMAAS9qB3cAAS9SwBMAAS9ymf8AAS9ymgMAAS9ymgcAAS9ymhMAAS9SwBcAAS+GwCcAAS+KmccAAS+KmdMAAS9SwBsAAS+UAwABL5SLAAEvlpnrAAEY5pozAAEvpsAPAAEvqpn7AAEvqgcjAAEvpsAXAAEvtbcAAS+2EVMAAS+2wCcAAS/CmccAAS/CmdMAAS+mwBsAAS/MAwABGOaaRwABL9bADwABL9rAJwABL96NvwABL96NwwABL9bAEwABL+rAJwABL+6NywABL+oDvwABL9bAGwABL/gDAAEv+sAnAAEwAkY/AAEY5ppXAAEwCsAPAAEwDsAnAAEwEo2/AAEwEo3DAAEwEppbAAEwCsATAAEwIsAnAAEwJo3LAAEwIgO/AAEwCsAbAAEwMsAnAAEwNkY/AAEwMAMAARjmmnMAATBCwA8AATBGwCcAATBKkz8AATBKIUsAATBKk0cAATBKmncAATBKmnsAATBKmn8AATBKmoMAATBCwBMAATBqwCcAATBumpsAATBujcsAATBump8AATBumqMAATBumqcAATBumrMAATBqA78AATBCwBsAATCOwCcAATCSk0sAATCOmosAATCMAwABGOabfwABMKLADwABMKYEiwABMKLAEwABMK7AJwABMLKNywABMK4DvwABMKLAGwABMLwDAAEY5puHAAEwxsAPAAEwygSLAAEwxsATAAEw0gO/AAEwxsAbAAEw2AMAARjmm48AATDiwA8AATDmBIsAATDiwBMAATDuA78AATDiwBsAATD0AwABGOablwABMP7ADwABMQKbmwABMP7AEwABMQoDvwABMP7AGwABMRADAAEY5punAAExGsATAAExHgO/AAExGsAXAAExJMcAATEmwCcAATEuCuMAATEawB8AATE2wCcAATE6CuMAATEawBsAATFAAwABGOabrwABMUrAEwABMU4DvwABMUrAFwABMVTHAAExVsAnAAExXgrjAAExSsAfAAExZsAnAAExagrjAAExSsAbAAExcAMAARjmm7cAATF6wA8AATF+m7sAATF6wBMAATGGwCcAATGKjcsAATGGA78AATF6wBsAATGUAwABGOYqNwABMZ7AIwABMaLAJwABMaYCKwABGOabywABMa7AIwABMbADAAEY5pvPAAExusAPAAExvgSLAAExusATAAExxgO/AAExusAbAAExzAMAARjmm9cAATHWwA8AATHaBIsAATHaBY8AATHaEF8AATHWwBMAATHqA78AATHWwBsAATHwAwABGOacFwABMfrAEwABMf4DvwABMfrAGwABMgQDAAEY5pwbAAEyDsAPAAEyEsAnAAEyFpwfAAEyFpwjAAEyFg6TAAEyFi2rAAEyEhk3AAEyDsATAAEyLsAnAAEyMg+HAAEyMpwvAAEyLgO/AAEyLgtHAAEyLgQzAAEyDsAXAAEySsAnAAEyTlR/AAEyTpw3AAEyDsAbAAEyWAMAARjmnEcAATJiwBMAATJmwCcAATJqnEsAATJmM8cAATJmAjMAATJiwBcAATJ6CHMAATJiwBsAATKAAwABGOacUwABMorADwABMo7AJwABMpKcVwABMpKc1wABMpKc2wABMpKc3wABMpKc5wABMpKc7wABMorAEwABMq7AJwABMrKPMwABMrKPJwABMrKPKwABMrKPLwABMrKPQwABMrKPSwABMrKc8wABMrJISwABMrKc/wABMrKdAwABMrKJmwABMrKdPwABMrKdQwABMq4ChwABMq4CmwABMq4CjwABMq4DYwABMq4NxwABMq4PFwABMq6LFwABMq6L4wABMq6L6wABMq6L7wABMq4+UwABMq4PrwABMq47vwABMq5uVwABMq6NUwABMq6NVwABMq5FgwABMq6NTwABMq6J4wABMq6NWwABMq6NXwABMq4DvwABMq4Y6wABMq4U7wABMq6WmwABMorAIwABM06WnwABMorAFwABM1YwswABM1aKCwABM1YO/wABM1YXpwABGOadVwABM2rADwABM27AJwABM3IGSwABM2rAIwABM3of4wABM3qdWwABM3o4QwABM3qazwABM2rAFwABM44zWwABM440uwABM44zXwABM44zYwABM44zjwABM44yvwABM44y9wABM46TgwABM2rAGwABM7ADAAEY5p1fAAEzusAPAAEzvjNbAAEzvjS7AAEzvsAnAAEzyp1jAAEzyp1nAAEzusAXAAEz1jNfAAEz1jNjAAEz1jOPAAEz1jK/AAEz1jL3AAEz1pODAAEzusATAAEz8sAnAAEz9p13AAEz9p1/AAEzusAbAAE0Ah/jAAE0AjhDAAE0AprPAAEY5p2DAAE0EsAPAAE0FsAnAAE0GgZLAAE0EsAjAAE0Ip2HAAE0IgZTAAE0EsATAAE0LgafAAE0LgcnAAE0LhAjAAE0LgavAAE0LgarAAE0LhAnAAE0LgbPAAE0LgcTAAE0LgRLAAE0LgbnAAE0Lgb3AAE0LgcfAAE0Lgb/AAE0LgQ7AAE0LgcrAAE0LgcvAAE0Lgc/AAE0LgdDAAE0LgdHAAE0LgdLAAE0LgdjAAE0LgdrAAE0LgdvAAE0LgdzAAE0LgO/AAE0EsAXAAE0lgQjAAE0lgcjAAE0lgOPAAE0lg2LAAE0lgcLAAE0lgdXAAE0lgdfAAE0EsAbAAE0tAMAARjmnY8AATS+wA8AATTCByMAATTCwCcAATTJ+wABNL7AEwABNNIHcwABNNLAJwABNNoSDwABNL7AGwABNOADAAEY5p2TAAE06sATAAE07p2XAAE06sAbAAE09AMAARjmnZsAATT+wBMAATUCBCcAATT+wBcAATUKBCsAATT+wBsAATUQAwABGOadnwABNRrAIwABNR7AJwABNSKdowABNRwDAAE1Hp2rAAE1HgsDAAE1HhCHAAE1Hp2HAAE1Hp2vAAE1GsATAAE1QgafAAE1Qp2zAAE1Qp2/AAE1QgcnAAE1QgtHAAE1QgQzAAE1QgILAAE1Qg2vAAE1QhFnAAE1QhFzAAE1QhHDAAE1QhHHAAE1QhHPAAE1QhHLAAE1QgOfAAE1QhHTAAE1QhHbAAE1QhHjAAE1Qg2zAAE1QhHXAAE1QhC/AAE1Qg5XAAE1Qg5bAAE1QgQ3AAE1QhGHAAE1QhGPAAE1QhFjAAE1QhGTAAE1QhGXAAE1QhGrAAE1QhGDAAE1QgIzAAE1GsAfAAE1xgcLAAE1xgdXAAE1xgcjAAE1GsAXAAE11gcjAAE11hHnAAEY5p3HAAE14sAPAAE15sAnAAE16gZLAAE14sAjAAE18sAnAAE19p2jAAE18AMAATXyCwMAATXyEIcAATXyna8AATXyEIMAATXyBnMAATXyEI8AATXyEJMAATXiwBMAATYeBp8AATYeBycAATYeDZcAATYeC6cAATYeC0cAATYeBDMAATYeBq8AATYeD3cAATYeD18AATYeD2cAATYeDlcAATYeDaMAATYeDa8AATYeDbMAATYeA58AATYeBEsAATXiwBcAATZiD2sAATZiDY8AATZiBAcAATZiByMAATZiA48AATZiDYsAARjmncsAATZ+wA8AATaCC0sAATaAiwABNoLAJwABNo4GSwABNn7AIwABNpQDAAE2fsATAAE2ngO/AAE2fsAbAAE2psAnAAE2qgIrAAEY5p3TAAE2ssAPAAE2tsAnAAE2up3XAAE2ssAXAAE2wsAnAAE2xozXAAE2wghzAAE2ssAjAAE20sAnAAE21i1/AAE2ssATAAE23gO/AAEY5mKfAAE25sATAAE26sAnAAE27o0jAAE27o0nAAE27o0rAAE27o0vAAE27o0zAAE27o03AAE27o07AAE27o0TAAE27p3fAAE27p3jAAE26gIzAAE26opPAAE26gQ3AAE26gQbAAE26g8bAAE26hnjAAE26hfjAAE26hpLAAE26g+vAAE26ol7AAE26gLvAAE26gVvAAE26gozAAE26gV7AAE26ju/AAE26m5XAAE26o1TAAE26o1XAAE26kWDAAE26o1PAAE26onjAAE26o1bAAE26o1fAAE26jvHAAE26m53AAE26he/AAE26mwzAAE26o2HAAE26o2TAAE26gO/AAE26hTvAAE26pabAAE25sAXAAE3mghzAAE3mjGfAAE3mjH/AAE3mmwrAAE3mh1TAAE3mhenAAE25sAbAAE3tAMAARjmnecAATe+wA8AATfCwCcAATfGnesAATe+wBMAATfOwCcAATfSne8AATfSIE8AATfSnfcAATfSnf8AATfSng8AATfSnhcAATfSnhsAATfOAjMAATfOA78AATfOCucAATe+wBcAATf+wCcAATgCjNcAATf+CHMAATf+NMcAATe+wBsAATgQAwABGOaeKwABOBrAEwABOB6UFwABOB6UGwABOBrAGwABOCgDAAEY5p4vAAE4MsAXAAE4NbcAATg2EVMAATg2k+sAATg2FN8AATg2k6cAATgywBMAAThOTI8AAThOC0cAAThOk98AATgywBsAAThcAwABGOaeNwABOGbADwABOGrAJwABOG6eOwABOG6MwwABOG6ePwABOGbAEwABOH7AJwABOIKeQwABOIKT9wABOH6eSwABOH6JowABOH6UFwABOH4sRwABOH6UIwABOGbAFwABOKLAJwABOKaT1wABOKaUAwABOKKTpwABOKKUKwABOKKUMwABOKKUOwABOKKUQwABOGbAIwABOMQDAAEY5p5bAAE4zsATAAE40pPvAAE4zsAXAAE42pP/AAE4zsAbAAE44AMAARjmnl8AATjqwA8AATjuwCcAATjyBksAATjqwCMAATj4AwABOPoQgwABOPoLAwABOPoQhwABOOrAEwABOQ4GnwABOQ4HJwABOQ4HEwABOQ4CCwABOQ4NrwABOQ4NswABOQ4OLwABOQ4OPwABOQ4QKwABOQ4OVwABOQ4OWwABOQ4OewABOQ4QNwABOQ4QMwABOQ4QOwABOQ4DnwABOQ4HLwABOOrAFwABOVYEIwABGOaeYwABOV7AEwABOWICCwABOWICNwABOV7AGwABOWwDAAEY5p5nAAE5dsAPAAE5esAnAAE5fgZLAAE5dsAjAAE5hp5rAAE5dsAXAAE5jgQrAAE5dsATAAE5lgO/AAE5dsAbAAE5nAMAARjmnncAATmmwA8AATmqwCcAATmuCuMAATmmwBMAATm2A78AATmmwBsAATm8AwABGOaeewABOcbADwABOcrAJwABOc6JAwABOc6efwABOc4hhwABOc6egwABOcbAEwABOeLAJwABOeaehwABOeaeqwABOeaXfwABOeG3AAE54gaPAAE54gaHAAE5xsAXAAE6Ap6PAAE6Ap6TAAE6AgaTAAE6AlbnAAE6Ap6jAAE6Ap6nAAE5xsAbAAE6HAMAARjmnrMAATomwBcAAToqwCcAAToulKsAAToqByMAAToqCHMAAToqA48AAToqDYsAAToqGXcAAToqlYsAATomwBMAATpOwCcAATpSk9sAATpOC0cAATpOF0MAATpOAjMAATpOik8AATpOUO8AATpOImsAATpOEcMAATpOEcsAATpOBDcAATpOGE8AATpOje8AATpOlRsAATpOlR8AATpODxsAATpOGO8AATpOlScAATpOBxMAATpOlSsAATpOlVsAATpORzsAATpOlVcAATpOEasAATpOEy8AATpOlXMAATpOG+8AATpOWwcAATomwCMAATrCnrcAATrCnrsAATrClp8AARjmnsMAATrSwA8AATrWGR8AATrSwBcAATreBCMAATreB1cAATrSwBsAATroAwABGOaezwABOvLADwABOvYZHwABOvbAJwABOv4TRwABOv6e0wABOv6e1wABOvLAEwABOw7AJwABOxKe2wABOw4GhwABOw4EJwABOw6dlwABOvLAFwABOyae4wABOyYEKwABOyae5wABOyae6wABOvLAHwABOzqe4wABOvLAGwABO0ADAAE7QisbAAEY5p7zAAE7TsAPAAE7UsAnAAE7Vp73AAE7Vp77AAE7Vp7/AAE7Vpf3AAE7Vp8DAAE7Vp8HAAE7Vp8LAAE7VhsnAAE7Vp8PAAE7Vp8TAAE7TsATAAE7gsAnAAE7hp8bAAE7hp8fAAE7hp8jAAE7hp8rAAE7hkY/AAE7ggcPAAE7ghhTAAE7ghDDAAE7gh5HAAE7ggOfAAE7ggO/AAE7TsAXAAE7tgcjAAE7tgOPAAE7tg2LAAE7TsAbAAE7xAMAARjmnzcAATvOwBMAATvSBw8AATvSEMMAATvSHkcAATvSGFMAATvOwBsAATvkAwABGOYNLwABO+7ADwABO/KfOwABO/IGUwABO/LAJwABO/4GSwABO+7AIwABPAQDAAE77sAXAAE8DghzAAE77sATAAE8FgIzAAEY5p8/AAE8HsAbAAE8IAMAARjmn0MAATwqwA8AATwuwCcAATwyBksAATwqwBcAATw6MZsAATw6L3sAATw6n1MAATw6n0cAATw6PrMAATw6LksAATw6RaMAATw6n0sAATw6n08AATw6ZvsAATw6Z3cAATw6n28AATw6VTsAATw6n3MAATw6n3cAATw6n3sAATw6n38AATw6n4MAATw6n4cAATw6n4sAATw6ZtcAATw47wABPDoIcwABPCrAIwABPJgDAAE8mmbPAAE8mp9bAAE8mk1bAAE8mlRPAAE8mp9fAAE8mp9jAAE8KsATAAE8up+PAAE8ulAfAAE8ugIzAAE8ugO/AAE8umcDAAE8up+TAAE8up+XAAE8ui+nAAE8up+fAAE8uhTvAAE8upabAAE8up/XAAE8up/bAAE8up/fAAE8up/nAAE8up/rAAE8up/vAAE8up/zAAE8up/3AAE8usAnAAE9Cp/7AAE8uqAXAAEY5qBbAAE9FsAPAAE9GsAnAAE9HqBfAAE9HqBjAAE9HkgDAAE9Hma7AAE9HqBnAAE9HqBrAAE9HqBvAAE9HqBzAAE9HqB3AAE9HqB7AAE9HqB/AAE9HqCDAAE9HqCHAAE9HqCLAAE9HqCPAAE9HqCTAAE9HqCXAAE9HqCbAAE9HqCfAAE9HqCjAAE9HqCnAAE9HqCrAAE9HqCvAAE9HqCzAAE9Gi97AAE9GkWjAAE9FsAXAAE9isAnAAE9jqC3AAE9jmfjAAE9jqKjAAE9ip9TAAE9ip9HAAE9ij6zAAE9ii5LAAE9ip9LAAE9ip9PAAE9imb7AAE9imd3AAE9ip9vAAE9ilU7AAE9ip9zAAE9ip93AAE9ip97AAE9ip9/AAE9ip+DAAE9ip+HAAE9ip+LAAE9imbXAAE9iO8AAT2KCHMAAT0WwCMAAT3uoL8AAT3sAwABPe5mzwABPe6fWwABPe5NWwABPe5UTwABPRbAEwABPgrAJwABPg6g2wABPg6g4wABPg6g8wABPg6g9wABPg6hEwABPg6hJwABPg6hOwABPg6hQwABPg6hSwABPg6hcwABPg6hdwABPg6hjwABPg6hkwABPg6hlwABPg6howABPg6hpwABPg6hqwABPg6hvwABPg6hwwABPg6hxwABPg6h1wABPg6h2wABPg6h5wABPg6h6wABPg6h/wABPg6iCwABPg6JwwABPg6iEwABPg6iFwABPg6iGwABPg6iLwABPg6iNwABPg6iPwABPg6iRwABPg6ijwABPg6imwABPg6g1wABPg6ipwABPg44jwABPg6iswABPg6iuwABPg6ixwABPg6izwABPg6i4wABPg6i5wABPgqfjwABPgpnAwABPgqfkwABPgqfnwABPgqflwABPgovpwABPgpQHwABPgoDvwABPgoCMwABPRbAGwABPurAJwABPu4GTwABGOai6wABPvbADwABPvrAJwABPv6i7wABPv6gcwABPv6i8wABPv6i9wABPv6i+wABPv6i/wABPv6jAwABPv6jBwABPvbAIwABPyKeawABPyKjFwABPyJQGwABPvbAEwABPzLAJwABPzajJwABPzajTwABPzZISwABPzajkwABPzIU7wABPzKjewABPzKjgwABPzIDvwABPvbAFwABP1oDrwABP1pnbwABP1pmcwABP1qjZwABP1qjdwABP1of5wABPvbAGwABP3bAJwABP3oCKwABGOajmwABP4LADwABP4bAJwABP4qjnwABP4qjowABP4qjpwABP4qjqwABP4qjrwABP4qjswABP4qjtwABP4qjuwABP4qgdwABP4LAFwABP7KfcwABP7KfdwABP7Kg+wABP7KfewABP7KffwABP7KfgwABP7LAJwABP86jvwABP86jwwABP86jxwABP86jywABP7KfiwABP7KfhwABP7JVOwABP7IvewABP7KfUwABP7KfRwABP7I+swABP7IuSwABP7JFowABP7KfSwABP7KfTwABP7Jm1wABP7Jm+wABP7JndwABP7KfbwABP7DvAAE/sghzAAE/gsATAAFAJsAnAAFAKqPPAAFAKqPbAAFAKqPjAAFAKqKPAAFAKqPnAAFAJp+PAAFAJp+fAAFAJp+TAAFAJmcDAAFAJp+XAAFAJi+nAAFAJlAfAAFAJgIzAAFAJgO/AAE/gsAbAAFAZAMAARjmo/8AAUBuwA8AAUBywCcAAUB2DpMAAUBuwBcAAUB87wABQG7AGwABQIQAAsBvAAFAjsALAAFAkqUTAAFAkqUXAAFAkqUfAAFAjsAPAAFAosBvAAFAprnLAAFAprnPAAFAprnTAAFAprnXAAFApmIzAAFAprnbAAFAprnfAAFAprnjAAFApmIvAAFAprnnAAFAprnrAAFAprnvAAFAprnzAAFAprn3AAFAjsATAAFA4sBvAAFA5rn7AAFAjqUjAAFA7sAPAAFA8qUnAAFA8qUrAAFA8qUvAAFA7sAXAAFBAqUzAAFBAi5LAAFBAiMnAAFA7sATAAFBEgbjAAFBEqU3AAFBEgI3AAFBEqVDAAFA7sAjAAFBJqU7AAFA7sAfAAFBLqU/AAFAjqVHAAFBNsAPAAFBOqVLAAFBOqVPAAFBOqVTAAFBOqVXAAFBNsAbAAFBTAMAAUCOpVsAAUFWwA8AAUFapV8AAUFapWMAAUFapWsAAUFapXMAAUFapXsAAUFapYMAAUFapYsAAUFapZMAAUFapZsAAUFapaMAAUFapacAAUFapa8AAUFapbcAAUFapb8AAUFapccAAUFapc8AAUFapdcAAUFapd8AAUFapecAAUFape8AAUFapfcAAUFapfsAAUFapf8AAUFapgMAAUFapgsAAUFaphMAAUFaphsAAUFapiMAAUFapisAAUFapjMAAUFapjcAAUFapj8AAUFapkMAAUFapksAAUFaplMAAUFaplcAAUFapl8AAUFapScAAUFapmcAAUFapm8AAUFapncAAUFapn8AAUFapocAAUFapo8AAUFappcAAUFapp8AAUFapqcAAUFapq8AAUFaprcAAUFapr8AAUFapscAAUFaps8AAUFaptcAAUFapt8AAUFapucAAUFapu8AAUFapvcAAUFapv8AAUFapwcAAUFapw8AAUFapxcAAUFapx8AAUFapycAAUFapy8AAUFapzcAAUFapz8AAUFap0cAAUFap08AAUFap1cAAUFap18AAUFap2cAAUFap28AAUFap3cAAUFap38AAUFap4cAAUFap48AAUFap5cAAUFap58AAUFap6cAAUFap68AAUFap7cAAUFap78AAUFap8cAAUFap88AAUFap9cAAUFap98AAUFap+cAAUFap+8AAUFap/cAAUFap/8AAUFaqAcAAUFaqA8AAUFaqBcAAUFaqB8AAUFaqCcAAUFaqC8AAUFaqDcAAUFaqD8AAUFaqEcAAUFaqEsAAUFaqFMAAUFaqFcAAUFaqF8AAUFaqGMAAUFaqGsAAUFaqG8AAUFapeMAAUFalnsAAUFaqHcAAUFaPrMAAUFaLksAAUFaZoMAAUFaqHsAAUFaqH8AAUFaqIMAAUFWwBMAAUMqC0cAAUMoiwABQyoCCwABQyoTWwABQyoNswABQyoOPwABQyoESwABQyqohwABQyoDnwABQVbAGwABQ1ADAAFAjqiLAAFDWsAjAAFDXAMAAUNawBMAAUNmFO8AAUNmA78AAUNawBcAAUNwiwABQ3If5wABQI6omwABQ37AFwABQ4IDcwABQ4KonwABQ37AEwABQ45HjwABQ37AHwABQ5YEgwABQ37AGwABQ5wDAAFAjqijAAFDpsAPAAFDqhwjAAFDqqirAAFDqqizAAFDqqi3AAFDqh8/AAFDqqi/AAFDqqjHAAFDqqjPAAFDpsAjAAFDzAMAAUOmwBMAAUPWFO8AAUOmwBcAAUPeZ28AAUPeqNcAAUPeqNsAAUPeZnMAAUCOqN8AAUPywA8AAUP2GTcAAUP0iwABQ/aWewABQ/ao4wABQ/ao5wABQ/ZFowABQ/Yw6wABQ/ao6wABQ/LAIwABR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U/isesAAU/ise8AAU/iAjcAAU/iSfcAAU+ewBsAAVAEAwABQI6yGwABUA7ADwABUBLAbwABUBayHwABUBayIwABUBayJwABUBayKwABUBaxawABUBZdMwABUBau8wABUBavLwABUBayLwABUBayMwABUBayAwABUBayNwABUBKpPwABUBKpQwABUBKpRwABUBKpSwABUA7AFwABUFqlLwABUA7AHwABUGKlLwABUGKpmwABUGKpewABUGKpkwABUGKpiwABUA7AEwABUHojrwABUHqpVwABUHpM2wABUHqpWwABUHpmSwABUHqpXwABUHqpYwABUHqpZwABUHpTDwABUHqpawABUHqpcwABUHqpdwABUHgPAAFQeqlvAAFQegI3AAFQeql/AAFQeqmXAAFQesBvAAFQwrJDAAFQwrI7AAFQwq7fAAFQwrF7AAFQwq7jAAFQwrH7AAFQwrI/AAFQwrIXAAFQwrJnAAFQwq8bAAFQwq8TAAFQwq8nAAFQwq8jAAFQwrKHAAFQDsAbAAFQ/AMAAUCOsr8AAVEGwBsAAVEIAwABUQbADwABURLAbwABURZIZwABUQbAFwABUR7AbwABUSJIawABUSJIbwABUSJIcwABUSJIdwABUQbAEwABUTbAbwABUTogcwABUTpIewABQI6ywwABUUbADwABUUrAbwABUU6yxwABUU6yywABUU6yzwABUU6y0wABUU6y1wABUU5L1wABUU6ucwABUU6xKwABUU4CuwABUU4IKwABUU6y2wABUU6xPwABUUbAEwABUYKy6wABUYJHjwABUYKpGwABUYLAbwABUZIgcwABUUbAFwABUZqy7wABUZqpBwABUZrAbwABUaay9wABUaay+wABUaavowABUaZIcwABUaZIdwABUUbAGwABUbwDAAFAjrMrAAFRxsAbAAFRyAMAAVHKwAcAAVHSBk8AAVHGwA8AAVHawG8AAVHeSGcAAVHGwBcAAVHmwG8AAVHqSGsAAVHqSG8AAVHqSHMAAVHqSHcAAVHGwBMAAVH+wG8AAVICIHMAAVICSHsAAUCOsy8AAVIOwA8AAVISwG8AAVIWszMAAVIWsjMAAVIWsTMAAVIWroMAAVIWszcAAVIWszsAAVIWsz8AAVIWs0MAAVIWAwMAAVISpScAAVISpTMAAVISpSsAAVISSusAAVIOwBMAA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Uq2XwABWUq2YwABWUq2ZwABWUq2awABWUooSwABWUq2bwABWUq2cwABWUq2ewABWUq2gwABWUq2iwABWUq2kwABWUq2mwABWUq2owABWUq2qwABWUq2swABWUq2uwABWUq2wwABWUopmwABWUq2ywABWUbAGwABWbQDAAFAjrbTAAFZvsAPAAFZwrbXAAFZwrbbAAFZwrbjAAFZwrbnAAFZwrbvAAFZwrbzAAFZwrb3AAFZwrb7AAFZwkwzAAFZvsATAAFZ6sBvAAFZ7rb/AAFZ7rcXAAFZ7rcjAAFZvsAbAAFZ/AMAAUCOtz8AAVoGwCMAAVoIAwABWgbAEwABWhKmgwABWhK3RwABQI63SwABWh7ADwABWiJJwwABWiIjrwABWiKlVwABWiJK6wABWiK3TwABWiK3VwABWiK3XwABWiJgRwABWiK3ZwABWh7AEwABWkpJ9wABWkoCNwABWkoCCwABWkoCHwABWkpmYwABWh7AIwABWmK3bwABWh7AFwABWmq3fwABWmq3gwABWmpLuwABWmq3hwABWmq3iwABWmqpSwABWh7AHwABWoapSwABWh7AGwABWowDAAFAjreTAAFalsAPAAFamgSLAAFalsATAAFaogO/AAFalsAbAAFaqAMAAUCOt5sAAVqywA8AAVq2t58AAVq2qKsAAVq2qM8AAVqywBsAAVrEAwABQI63owABWs7ADwABWtK3pwABWtKoqwABWtKozwABWtK3qwABWtK3rwABWtK3swABWtK3twABWtK3uwABWtK3vwABWtK3wwABWtK3xwABWtK3ywABWtK3zwABWtK30wABWtK31wABWtK32wABWs7AGwABWxQDAAFAjrffAAFbHsAPAAFbIhlLAAFbHsAbAAFbKAMAAUCOt+MAAVsywA8AAVs2rasAAVs2TysAAVsywBMAAVtCA78AAVsywBsAAVtIAwABQI635wABW1LADwABW1a0XwABW1a36wABW1a37wABW1a38wABW1a39wABW1ZgRwABW1a0xwABW1a3+wABW1a3/wABW1a4AwABW1a4BwABW1a4CwABW1bAbwABW4oCuwABW4q4DwABW4q4EwABW4q4FwABW4oQAwABW4q4GwABW4q4HwABW4q4IwABW4q4JwABW4q4KwABW4q4LwABW4obSwABW4q4MwABW4q4NwABW4q4OwABW4q4PwABW1a3hwABW1a3iwABW1LAEwABW9YG4wABW9YCLwABW9YCNwABW9YCCwABW9bAbwABW+q4XwABW+q4UwABW+q4VwABW+q4gwABW+q4ZwABW+q4YwABW+q4TwABW+q4hwABW1LAGwABXAwDAAFAjriPAAFcFsAPAAFcGmZbAAFcFsAbAAFcIAMAAUCOuJMAAVwqwA8AAVwuZlsAAVwqwBsAAVw0AwABQI64lwABXD7ADwABXELAbwABXEYDAwABXEa4mwABXEa4nwABXD7AEwABXFYG4wABXFbAbwABXF61ywABXF64owABXF64xwABXF641wABXD7AGwABXHADAAFAjrjfAAFcesAPAAFcfrbzAAFcfrbvAAFcfrb3AAFcfrb7AAFcfrdzAAFcfhlPAAFcfhlDAAFcesATAAFcnsBvAAFcorjjAAFcorjnAAFcnriLAAFcnrjrAAFcesAbAAFctAMAAUCOuPsAAVy+wA8AAVzCZ2MAAVzCwG8AAVzKG0sAAVzKuP8AAVy+wBMAAVzWBuMAAVzWAgsAAVzWAi8AAVzWAjcAAVzWuQcAAVzWuRcAAVy+wBsAAVzwAwABQI65LwABXPrADwABXP5nYwABXP5GewABXP7AbwABXQoDAwABXQoIKwABXQq5MwABXQpMYwABXQpSkwABXQq5NwABXPrAEwABXSbAbwABXSoJLwABXSoCowABXSoCpwABXSoI9wABXSq5OwABXSq5PwABXSYCHwABXSYCNwABXSYCCwABXSa5QwABXPrAGwABXVQDAAFAjrlHAAFdXsAbAAFdYAMAAV1iwAcAAV1qBk8AAV1ewA8AAV1ywG8AAV12SGcAAV1ewBcAAV1+wG8AAV2CSGsAAV2CSG8AAV2CSHMAAV2CSHcAAV1ewBMAAV2WwG8AAV2aIHMAAV2aSHsAAUCOuUsAAV2mwA8AAV2qwG8AAV2uuU8AAV2uAwMAAV2uCCsAAV2uB48AAV2uS9cAAV2uuDMAAV2uuVcAAV2uuVsAAV2uuV8AAV2uuWMAAV2uuWcAAV2uuWsAAV2uTGsAAV2uuQ8AAV2uuRMAAV2uuW8AAV2uuD8AAV2urrcAAV2qTzsAAV2quVMAAV2qS7sAAV2mwBMAAV4GSfcAAV4Gua8AAV4GBqcAAV4GAgsAAV4GZmMAAV4GAi8AAV4GAh8AAV4GAjcAAV4GwG8AAV4qA1sAAV4qIHMAAV4quccAAV2mwBcAAV46t2cAAV46t38AAV46t4MAAV46t4cAAV46t4sAAV46A0sAAV46qUsAAV46wG8AAV5aSHMAAV5aSHcAAV2mwB8AAV5mt2cAAV5mqUsAAV2mwBsAAV5ywG8AAV52uXACwHMAAV5+wAsAAV6Cui8AAV6CujMAAV6CujcAAV6CujsAAV6Cuj8AAV6CukMAAV6CukcAAV6CuksAAV6Cuk8AAV6CulMAAV6CulcAAV6CulsAAV6Cul8AAV5+wA8AAV66vrMAAV66vrcAAV66vrsAAV66vr8AAV66vsMAAV66vscAAV66vssAAV66IBcAAV66vs8AAV66IBsAAV66vtMAAV66vtcAAV66vtsAAV66vt8AAV66vuMAAV66vucAAV66vusAAV66vu8AAV66vvMAAV66vvcAAV66vvsAAV66vv8AAV66vwMAAV66vwcAAV66vwsAAV66vw8AAV66vxMAAV66wHMAAV8qvxcAAV8qv0sAAV66v0cAAV5+wBMAAV86wHMAAV8+v08AAV8+v1sAAV8+v2MAAV8+v28AAV8+v48AAV8+v8cAAV8+v88AAV8+v9cAAV8+v+cAAV8+v+8AAV8+v/cAAV8+v/8AAV86v3cAAV86v38AAV86v4cAAV86v5cAAV86v5sAAV86v6cAAV86v7MAAV86v7sAAV86v78AAV86v8MAAV86v98AAV5+wBcAAV+evGsAAV5+umMAAV+mwBMAAV+qZ8MAAV+mwBsAAV+wAwABXn66ZwABX7rADwABX766awABX766bwABX75nwwABX766cwABX766dwABX766ewABX766fwABX766gwABX766hwABX766iwABX766jwABX7rAGwABX+wDAAFefrqTAAFf9sAPAAFf+rqXAAFf+rqbAAFf9sAbAAFgBAMAAV5+up8AAWAOwA8AAWASwHMAAWAWuqMAAWAWuq8AAWASuqcAAWASupcAAWASurcAAWASursAAWASZ6sAAWASSTcAAWASZ0cAAWASur8AAWASusMAAWAOwBMAAWBGwHMAAWBKussAAWBKutsAAWBKuucAAWBKuu8AAWBKuvcAAWBKuxsAAWBKuycAAWBKuzcAAWBKu1MAAWBKu2sAAWBKu28AAWBKWxsAAWBKuzMAAWBKu4sAAWBKu48AAWBKu5sAAWBKu58AAWBKu6MAAWBKu6cAAWBKu6sAAWBKu5cAAWBKu8MAAWBKLwcAAWBKu98AAWBGuscAAWBGu3cAAWBGvBMAAWAOwCMAAWC4AwABYA7AGwABYMLAcwABYMYGTwABXn68GwABYM7ADwABYNIZNwABYNDvAAFgzsAXAAFg3mdvAAFgzsATAAFg5lLnAAFg5gO/AAFgzsAbAAFg8AMAAV5+vG8AAWD6wA8AAWD+wHMAAWECvHMAAWECEg8AAWECG/cAAWD+ZhcAAWD+ZncAAWD+ux8AAWD+uyMAAWD+u08AAWD6wBcAAWEmuusAAWEmGTcAAWD6wB8AAWEyGTcAAWD6wBMAAWE6Zh8AAWE6AjcAAWE6ZjMAAWE6ZkMAAWE6ZjsAAWE6ZksAAWE6H5sAAWD6wBsAAWFYAwABXn68dwABYWLADwABYWYZNwABYWYDrwABYWLAEwABYXK8ewABYXKflwABYXJZewABYWLAGwABYYADAAFefryLAAFhisAPAAFhjsBzAAFhkryPAAFhkryTAAFhisATAAFhnmfDAAFhnrv/AAFhnmlzAAFhnmdLAAFhnsBzAAFhsryXAAFhsrybAAFhsryfAAFhsryjAAFhsrynAAFhsryrAAFhsryvAAFhisAbAAFh0AMAAV5+vPsAAWHawA8AAWHevP8AAWHevQMAAWHevQcAAWHevQsAAWHevQ8AAWHevRMAAWHawBsAAWH4AwABXn69FwABYgLADwABYga7VwABYgYhBwABYgYZNwABYgbAcwABYha9GwABYga9HwABYga9IwABYga9JwABYga9KwABYga9LwABYgLAFwABYjK9MwABYgLAEwABYjq61wABYjrAcwABYkK9RwABYkK9PwABYkK9cwABYjq7dwABYjq8EwABYgLAGwABYlgDAAFefr13AAFiYsAPAAFiZrrTAAFiZsBzAAFibr17AAFiYsATAAFidrtfAAFidrtjAAFidrt3AAFidrwTAAFiYsAbAAFiiAMAAV5+vaMAAWKSwA8AAWKWwHMAAWKaKi8AAWKaMmMAAWKaZp8AAWKSwBMAAWKqBTMAAWKqwHMAAWKyvacAAWKyvbMAAWKyvbcAAWKyvbsAAWKSwBsAAWLEAwABXn6+FwABYs7ADwABYtIHdwABYtLAcwABYtob9wABYtIEBwABYtK+GwABYtK+HwABYtK+IwABYs7AEwABYvIDvwABYs7AGwABYvgDAAFefr4nAAFjAsAPAAFjBsBzAAFjCrk3AAFjBmdzAAFjBhdnAAFjBrvPAAFjBh/jAAFjBjSvAAFjBgObAAFjBJMAAWMCwBcAAWMuu+MAAWMuIe8AAWMCwCMAAWM6vkMAAWMCwBMAAWNCwHMAAWNGvk8AAWNGvl8AAWNGvnMAAWNGvmcAAWNCvlMAAWNCH5sAAWNCu9MAAWNCvUsAAWNCvAcAAWNCvZcAAWNCvAsAAWMCwBsAAWN2wHMAAWN6visAAWN6vi8AAWN6vjMAAWN6vjcAAWN2vjsAAWN2UBsAAWN2vj8AAV5+vncAAWOawBMAAWOeu3cAAWOevBMAAWOawBsAAWOoAwABXn6+ewABY7LADwABY7YHdwABY7bAcwABY74b9wABY7YEBwABY7aeswABY7a+fwABY7a+gwABY7LAEwABY9YDvwABY7LAGwABY9wDAAFefr4jAAFj5sAPAAFj6mZPAAFj6mZbAAFj5sAjAAFj9r6HAAFj9gsDAAFj5sATAAFkAr1fAAFj5sAbAAFkCAMAAWQKHz8AAV5+vpsAAWQWwBsAAWQYAwABZBbAEwABZCIHJwABZCIGrwABZCIGqwABZCIQJwABZCIGzwABZCIQIwABZCIHEwABZCIESwABZCIG5wABZCIG9wABZCIHHwABZCIG/wABZCIEOwABZCIHKwABZCIHLwABZCIHPwABZCIHQwABZCIHRwABZCIHSwABZCIHYwABZCIHawABZCIHbwABZCIHcwABZCIDvwABZBbAFwABZIYHIwABZIYDjwABZIYNiwABZIYHCwABZIYHVwABZIYHXwABXn6+nwABZKLADwABZKbAcwABZKn7AAFkqr6jAAFkqr6nAAFkosATAAFkugILAAFkug2zAAFkugtHAAFkursrAAFkosAXAAFkzgQjAAFkosAbAAFk1AMAAV5+vqsAAWTewA8AAWTiuqsAAWTiwHMAAWTqLasAAWTqvq8AAWTqAmsAAWTewBMAAWT6u8cAAWT6vBcAAWTewBsAAWUEAAAAAXQOBkQFfAwAAXQOBkQFfAwAAW10DdgFfAwAAXQOCXgFfAwAAXQOCXgFfAwAAXQOBkQFbXQOAngFfAwAAXQOAngFfAwAAXQOAtAFfAwAAXQOAngFfAwAAXQOAngFfAwAAXQOAtAFfAwAAXQOAngFfAwAAXQOAtAFfAwAAXQOAngFfAwAAXQOAtAFfAwAAXQOAngFfAwAAXQOAngFfAwAAXQOAngFfAwAAXQOAtAFfAwAAXQOAtAFfAwAAXQOAtAFfAwAAXQOAtAFfAwAAXQOAtAFfAwAAXQOAtAFfAwAAYQMBXQODKwFfAwAAXF0DgLQBXwMAAF0DgZEBW10DgJ4BXwMAAF0DgysBXwMAAF0DgZEBW10DgZEBW10DgP4BXwMAAF0Dg7cBXwMAAF0Dg7cBXwMAAF0DgP4BXwMAAF0DwABOOgFgA8AAToldA4GRAV8DAQBhAwBdA4EeAV8DAQBdA4GRAV8DAQBhAwBdA4EeAV8DAQBhAwBdA4EeAV8DAQBdA4GRAV8DAQBdA4GRAV8DAQBhAwBdA4EeAV8DAQBhAwFfAwEAXF0DwABNRgFfAwEAXQOBkQFdA8AATUYBXwMBAGEDAV8DAQBcXQOBQgFfAwEAYQMBXwMBAF0DgR4BW2EDAF0DgR4BYAPAAErYXQOBkQFbYQMBYAPAAErYXF0DgZEBXwMAAF0DgZEBXwMAAF0DgZEBXwMAAF0DgZEBXwMAAF0DwABNRgFgA8AATJhdA4GRAVtdA4GRAV8DAABdA4GRAV8DAABdA4GRAV8DAABdA4GRAV8DAABdA4FmAltbYQMAXGEDAFxhAwBcXQOBkQFbXQOBkQFfAwAAXQOBkQFfAwAAXgMAAQEBYQMAXAABVwMDAFxdA4LQAV8DAQBdA4KJAV8DAQBdA4KJAV8DAQBhAwFgA8AATKJfAwEAXQOCXgFfAwEAYQMAXGEDAFxhAwBcYQMAXGEDAV8DAABdA4EeAV8DAQBdA4KGAV8DAQBhAwFfAwAAXQOB1gFfAwEAXQOChgFfAwEAXQOCLgFfAwAAXQOCOwJfAwAAXwMBAGEDAl8DAABfAwAAXwMAAF0DgZEBXwMAAGEDAl8DAQBfAwAAXwMBAF0DgZEBXwMBAF0DgZEBYAPAAE6JXQOBkQFgA8AASthhAwFfAwAAXF0DgZEBW2EDAV8DAABgA8AASthdA4GRAWADwABK2GEDAV8DAABgA8AASthdA4GRAWADwABK2F0DgZEBYAPAAEyiXQOBkQFgA8AASthdA8AATUYBXwMAAF0DgZEBXQPAAE1GAV8DAABdA8AATjoBXwMAAF0DgZEBXQPAAE46AV8DAABdA4GRAV8DAABdA4GRAV8DAABhAwFfAwAAYAPAAErYYQMBXwMAAGADwABK2F0DgZEBXwMAAGEDAV8DAABgA8AASthdA4GRAV8DAABdA4KGAV8DAABdA4IcAVtdA4KJAV8DAABdA4KJAV8DAABdA4LyAV8DAABdA4GRAVthAwBcXQOC8gFfAwAAXQOC8gFfAwAAXQOCfQFfAwAAXQOCfQFfAwAAXQOCfQFfAwAAXQOCXgFbXQOCXgFbXQOBkQFbXQOBkQFbXQOBkQFbXQODKwFfAwAAXQODpAFfAwAAXQODpAFfAwAAXQOBkQFfAwEAXQODKwFfAwAAXQODKwFfAwAAXQODKwFfAwAAXQODpAFfAwAAYQMAXGEDAFxhAwBcYQMAXF0DgysBXwMAAF0Dg6QBXwMAAF0DgysBXwMAAF0DgyMBXwMAAF0Dg3oBXwMAAF0Dg3oBXwMAAF0Dg3oBXwMAAF0DgyMBXwMAAF0Dg6QBXwMAAF0Dg4UBW10DgZEBXwMBAF0Dg94BXwMAAF0Dg94BXwMAAF0Dg94BXwMAAF0Dg94BXwMAAF0Dg94BXwMAAF0DgZEBYAPAAErYXQOBkQFgA8AASthdA4GRAWADwABK2F0DgxsBXwMBAF0DhC0CXwMAAF8DAQBdA4QtAl8DAABfAwEAXQOEHgJfAwAAXwMBAF0DhB4CXwMAAF8DAQBdA4QeAl8DAABfAwEAXQODGwFfAwAAXQODGwFfAwEAXQODGwFfAwEAXQODGwFfAwAAXQODGwFfAwAAXQODGwFfAwAAXQODGwFfAwAAXQODGwFfAwAAXQODGwFfAwAAXQODGwFfAwAAXQODGwFbXQOErwJfAwAAXwMBAF4DAAEBAV0DghwBXwMBAAABVwMWAl8DAABfAwEAXQOCHAFfAwAAXQOErwJfAwAAXwMBAF0DhK8CXwMAAF8DAQBdA4IcAV8DAABdA4SvAl8DAABfAwEAXQOCHAFfAwEAXQOE1wJfAwAAXwMBAF4DAAMDA2ADwABMomEDAWADhQdcYAPAAErYAAFXAwQAYAOFB2EDAFxeAwADAwNgA8AATKJhAwFgA4UHXGADwABK2AABVwMEAGADhQdeAwAFBQVgA4VfYAOFTmADhV9gA8AATe9gA8AATl0AAVcDHgBcXgMBAAAEQ2ADwABN7wFbBAQEYAOFX2ADhU5gA4VfYQMAXwMBAAABVwMfAF8DAQBeAwIAAARDYAPAAE3vAVsAAAQhYAPAAE3vAVsFBQVgA4VfYAOFTmADhV9hAwFfAwMAXwMCAF8DAwAAAVcDIABfAwIAXgMDAAAEQ2ADwABN7wFbAAAER2ADwABN7wFbAAAESGADwABN7wFbBgYGYAOFX2ADhU5gA4VfYQMCXwMEAF8DBQBfAwMAXwMEAF8DBQAAAVcDIQBfAwMAXgMBAAAEQ2ADwABN7wFbBAQEYAOFX2ADhU5gA4VfYQMAXwMBAAABVwMiAF4DAAAAAAABVwMbAV8DAQBfAwEAXgMCAAAEQ2ADwABN7wFbAAAEIWADwABN7wFbBAQEYAOFX2ADhU5gA4VfYQMBXwMDAF8DAgAAAVcDIwBeAwABAQFfAwMAAAFXAxwCXwMCAF8DAwBfAwIAXgMDAAAEQ2ADwABN7wFbAAAER2ADwABN7wFbAAAESGADwABN7wFbBAQEYAOFX2ADhU5gA4VfYQMCXwMEAF8DBQBfAwMAAAFXAyQAXgMAAgICXwMEAF8DBQAAAVcDHQNfAwMAXwMEAF8DBQBfAwMAXgMABQUFYAOFX2ADhU5gA4VfYAPAAE3vYAPAAE5dAAFXAyUAYAOFFF4DAAQEBGADhV9gA4VOYAOFX2EDAFwAAVcDJgBcXgMABQUFYAOFX2ADhU5gA4VfYAPAAEt0YQMAXAABVwMnAGADhQdeAwAFBQVgA4VfYAOFTmADhV9gA8AAS3RhAwFgA4UHXAABVwMoAGADhQdeAwAEBARgA4VfYAOFTmADhV9gA8AATokAAVcDKQBcXgMABQUFYAOFX2ADhU5gA4VfYAOFKF0DwABNeAJbWwABVwMqAGADhV9dA8AATXgCW1teAwAFBQVgA4VfYAOFTmADhV9gA8AATe9gA8AATl0AAVcDHgBcXgMABQUFYAOFX2ADhU5gA4VfYAOFKF0DwABNeAJbWwABVwMqAGADhV9eAwEAAARDYAPAAE3vAVsEBARgA4VfYAOFTmADhV9hAwBfAwEAAAFXAx8AXwMBAF4DAgAABENgA8AATe8BWwAABCFgA8AATe8BWwUFBWADhV9gA4VOYAOFX2EDAV8DAwBfAwIAXwMDAAABVwMgAF8DAgBeAwMAAARDYAPAAE3vAVsAAARHYAPAAE3vAVsAAARIYAPAAE3vAVsGBgZgA4VfYAOFTmADhV9hAwJfAwQAXwMFAF8DAwBfAwQAXwMFAAABVwMhAF8DAwBeAwEAAARDYAPAAE3vAVsEBARgA4VfYAOFTmADhV9hAwBfAwEAAAFXAyIAXgMAAAAAAAFXAxsBXwMBAF8DAQBeAwIAAARDYAPAAE3vAVsAAAQhYAPAAE3vAVsEBARgA4VfYAOFTmADhV9hAwFfAwMAXwMCAAABVwMjAF4DAAEBAV8DAwAAAVcDHAJfAwIAXwMDAF8DAgBeAwMAAARDYAPAAE3vAVsAAARHYAPAAE3vAVsAAARIYAPAAE3vAVsEBARgA4VfYAOFTmADhV9hAwJfAwQAXwMFAF8DAwAAAVcDJABeAwACAgJfAwQAXwMFAAABVwMdA18DAwBfAwQAXwMFAF8DAwBeAwAFBQVgA4VfYAOFTmADhV9gA8AATe9gA8AATl0AAVcDJQBgA4UUXgMABAQEYAOFX2ADhU5gA4VfYQMAXAABVwMmAFxeAwAFBQVgA4VfYAOFTmADhV9gA8AAS3RhAwBcAAFXAycAYAOFB14DAAUFBWADhV9gA4VOYAOFX2ADwABLdGEDAWADhQdcAAFXAygAYAOFB14DAAQEBGADhV9gA4VOYAOFX2ADwABOiQABVwMpAFxhAwBcYQMBXwMAAFxhAwJfAwAAXwMBAFxhAwBfAwAAYQMBXwMBAF8DAABhAwJfAwEAXwMCAF8DAABbXQOBkQFbXQOBQgFbW14DAAEBAVsAAVcDHAJbW1teAwAAAAAAAVcDCABcXgMAAAAAAAFXAwwAW2EDAV8DAABbYQMAXwMAAGEDAltgA8AATl1bYQMCW2ADwABOXVtdA4GRAVtdA4GRAVthAwBfAwAAYQMAXwMAAGEDAV8DAQBfAwAAYQMBXwMBAF8DAABhAwJfAwEAXwMCAF8DAABhAwJfAwEAXwMCAF8DAABhAwJgA8AATe9gA8AATl1cYQMBYAPAAE3vXF0DhmACXwMAAF8DAQBdA4YnAl8DAABfAwEAYQMAXwMBAF0DhicCXwMAAF8DAQBdA4YnAl8DAABfAwEAXQOGJwJfAwAAXwMBAGEDAl8DAABfAwEAXF0DhicCXwMAAF8DAQBdA4YnAl8DAABfAwEAXQPAAE1GAV0DhmACXwMAAF8DAQBdA4ZgAl8DAABfAwEAXQPAAE1GAV0DhmACXwMAAF8DAQBdA4ZgAl8DAABfAwEAXQPAAE1GAV0DhmACXwMAAF8DAQBdA4YnAl8DAABfAwEAXQOGYAJfAwAAXwMBAF0DhkUCXwMAAF8DAQBhAwBfAwEAXQOGRQJfAwAAXwMBAF0DhkUCXwMAAF8DAQBdA4ZFAl8DAABfAwEAXQOGYAJfAwAAXwMBAF0DhlUCXwMAAF8DAQBhAwBfAwEAXQOGVQJfAwAAXwMBAF0DhlUCXwMAAF8DAQBdA4ZVAl8DAABfAwEAYQMBXwMAAFxdA8AATjoBXwMAAGEDAV8DAQBcXQOGgwNfAwAAXwMBAF8DAgBdA4aDA18DAABfAwEAXwMCAF0DhoMDXwMAAF8DAQBfAwIAXQOGmAFfAwAAXQOGmAFfAwAAXQPAAE1GAV0DhtgBXwMAAF0DhtgBXwMAAGEDAV8DAABgA8AASthdA8AATUYBXQOG2AFfAwAAXQOG2AFfAwAAXQOGmAFfAwAAXQPAAE1GAV0DhtgBXwMAAF0DhtgBXwMAAF0DwABNRgFbXQOGmAFfAwAAXQOG2AFfAwAAXQOG4QFfAwAAXQOG4QFfAwAAXQOG4QFfAwAAXQOG4QFfAwAAXQOG4QFfAwAAXQOG4QFfAwAAXQPAAE1GAVthAwJfAwAAXwMBAFxdA4cuAl8DAABfAwEAYQMAXwMBAF0Dhy4CXwMAAF8DAQBhAwFfAwEAXwMBAF0Dhy4CXwMAAF8DAQBhAwBfAwEAXQOHLgJfAwAAXwMBAF0Dhy4CXwMAAF8DAQBhAwJfAwAAXwMBAF8DAQBhAwJfAwAAXwMBAF0DwABNnwJfAwIAXwMDAF0DwABNeAJfAwIAXwMDAF0Dhy4CXwMAAF8DAQBhAwJfAwAAXwMBAGADwABK2F0DwABNRgFfAwAAXQOHSQJfAwAAXwMBAF0Dh0kCXwMAAF8DAQBdA4dJAl8DAABfAwEAYAOsSl0DwABNRgFbXQPAAE1GAVtdA4dJAl8DAABfAwEAXQPAAE1GAVtdA4dJAl8DAABfAwEAXQOHSQJfAwAAXwMBAGEDAF8DAQBdA4dJAl8DAABfAwEAXQOHSQJfAwAAXwMBAGADrEphAwJfAwAAXwMBAFxdA8AATUYBW10Dh4cCXwMAAF8DAQBdA4eHAl8DAABfAwEAXQOHhwJfAwAAXwMBAGADrEpdA8AATUYBW10DwABNRgFbXQOHhwJfAwAAXwMBAF0DwABNRgFbXQOHhwJfAwAAXwMBAF0Dh4cCXwMAAF8DAQBhAwBfAwEAXQOHhwJfAwAAXwMBAF0Dh4cCXwMAAF8DAQBgA6xKYQMCXwMAAF8DAQBcYQMCXwMAAF8DAQBcXQOHpQJfAwAAXwMBAGEDAF8DAQBdA4elAl8DAABfAwEAYQMBXwMBAF8DAQBdA4elAl8DAABfAwEAYQMAXwMBAF0Dh6UCXwMAAF8DAQBdA4elAl8DAABfAwEAYQMCXwMAAF8DAQBfAwEAYQMCXwMAAF8DAQBdA8AATZ8CXwMCAF8DAwBdA8AATXgCXwMCAF8DAwBdA4elAl8DAABfAwEAYQMCXwMAAF8DAQBgA8AASthdA8AATUYBXwMAAF0Dh8ACXwMAAF8DAQBdA4fAAl8DAABfAwEAXQOHwAJfAwAAXwMBAGADrEpdA8AATUYBW10DwABNRgFbXQOHwAJfAwAAXwMBAF0DwABNRgFbXQOHwAJfAwAAXwMBAF0Dh8ACXwMAAF8DAQBhAwBfAwEAXQOHwAJfAwAAXwMBAF0Dh8ACXwMAAF8DAQBgA6xKYQMCXwMAAF8DAQBcXQPAAE1GAVthAwJfAwAAXwMBAFxdA4f+Al8DAABfAwEAYQMAXwMBAF0Dh/4CXwMAAF8DAQBhAwFfAwEAXwMBAF0Dh/4CXwMAAF8DAQBhAwBfAwEAXQOH/gJfAwAAXwMBAF0Dh/4CXwMAAF8DAQBhAwJfAwAAXwMBAF8DAQBhAwJfAwAAXwMBAF0DwABNnwJfAwIAXwMDAF0DwABNeAJfAwIAXwMDAF0Dh/4CXwMAAF8DAQBhAwJfAwAAXwMBAGADwABK2F0DwABNRgFfAwAAXQOIGQJfAwAAXwMBAF0DiBkCXwMAAF8DAQBdA4gZAl8DAABfAwEAYAOsSl0DwABNRgFbXQPAAE1GAVtdA4gZAl8DAABfAwEAXQPAAE1GAVtdA4gZAl8DAABfAwEAXQOIGQJfAwAAXwMBAGEDAF8DAQBdA4gZAl8DAABfAwEAXQOIGQJfAwAAXwMBAGADrEphAwJfAwAAXwMBAFxdA8AATUYBW10DiGsBXwMAAF0DiGsBXwMAAF0DwABNRgFbXQOIlgFfAwAAYQMBXwMAAGADwABK2F0DwABNRgFbYQMBXwMAAGADwABK2F0DwABNRgFbXQPAAE46AV8DAABdA8AATUYBXwMAAGEDAV8DAABcYQMCXwMAAF8DAABfAwAAYQMCXwMBAF8DAABfAwEAYQMBXwMAAGADwABK2GEDAV8DAABgA8AASthhAwFfAwAAYAPAAErYYQMAXwMAAGEDAV8DAABgA8AASthhAwBfAwAAYQMBXwMAAGADwABK2GEDAF8DAABdA4jHAV8DAABdA4jHAV8DAABgA6xKXQPAAE1GAVtgA6xKXQOIxwFfAwAAXQOI5AFfAwAAXQOI7AFfAwAAXQPAAE14Al8DAgBfAwMAXQOJCAJfAwIAXwMDAF0DiQgCXwMCAF8DAwBdA4kUAV8DAQBdA4kUAV8DAQBhAwFfAwAAXGEDAl8DAABfAwAAXwMAAGEDAl8DAQBfAwAAXwMBAGEDAV8DAABgA8AASthhAwFfAwAAYAPAAErYYQMBXwMAAGADwABK2GEDAF8DAABhAwFfAwAAYAPAAErYYQMAXwMAAGEDAV8DAABgA8AASthhAwBfAwAAXQPAAE1GAVtdA8AATUYBW10DiVUCXwMCAF8DAwBdA4lVAl8DAgBfAwMAXQPAAE14Al8DAgBfAwMAXQOJXgFfAwEAXQOJXgFfAwEAXQOJaAFfAwAAXQOJaAFfAwAAXQOJaAFfAwAAXQOJaAFfAwAAXwMAAF8DAABfAwAAXQOJaAFfAwAAYQMBXwMAAFxfAwAAXwMAAF8DAABdA4loAV8DAABfAwAAXwMAAF8DAABfAwAAXQOJaAFfAwAAXwMAAF8DAABfAwAAXwMAAF8DAABdA4loAV8DAABdA4loAV8DAABdA4mBAV8DAABdA4mBAV8DAABdA4mBAV8DAABdA4loAV8DAABdA4loAV8DAABdA4loAV8DAABhAwFfAwAAXF0DiZ8BXwMAAF0DiZ8BXwMAAGEDAV8DAABgA8AASthhAwFfAwAAYAPAAErYYQMBXwMAAGADwABK2GEDAF8DAABhAwFfAwAAYAPAAErYYQMAXwMAAGEDAV8DAABgA8AASthhAwBfAwAAYQMCXwMAAF8DAABfAwAAYQMCXwMBAF8DAABfAwEAXQPAAE1GAV8DAABdA8AATjoBXwMAAF0DiZ8BXwMAAF0DiZ8BXwMAAF0DiZ8BXwMAAGEDAV8DAABgA8AASthdA8AATUYBXwMAAF0DiZ8BXwMAAF0DiZ8BXwMAAF0DiZ8BXwMAAF0DwABNRgFfAwAAXQPAAE1GAV8DAABdA8AATUYBXwMAAF0DiZ8BXwMAAF0DiZ8BXwMAAF0DiZ8BXwMAAF0DiZ8BXwMAAF0DiZ8BXwMAAF0DiZ8BXwMAAGEDAV8DAABgA8AASthhAwFfAwAAYAPAAErYXQOJnwFfAwAAXQOJnwFfAwAAXQOJnwFfAwAAXQOJnwFfAwAAXQOJnwFfAwAAXQOJnwFfAwAAXQOJnwFfAwAAYQMBXwMAAFxdA4noAV8DAABdA4noAV8DAABhAwFfAwAAYAPAAErYYQMBXwMAAGADwABK2GEDAV8DAABgA8AASthhAwBfAwAAYQMBXwMAAGADwABK2GEDAF8DAABhAwFfAwAAYAPAAErYYQMAXwMAAGEDAl8DAABfAwAAXwMAAGEDAl8DAQBfAwAAXwMBAF0DwABNRgFfAwAAXQPAAE46AV8DAABdA4noAV8DAABdA4noAV8DAABdA4noAV8DAABhAwFfAwAAYAPAAErYXQPAAE1GAV8DAABdA4noAV8DAABdA4noAV8DAABdA4noAV8DAABdA8AATUYBXwMAAF0DwABNRgFfAwAAXQPAAE1GAV8DAABdA4noAV8DAABdA4noAV8DAABdA4noAV8DAABdA4noAV8DAABdA4noAV8DAABdA4noAV8DAABhAwFfAwAAYAPAAErYYQMBXwMAAGADwABK2F0DiegBXwMAAF0DiegBXwMAAF0DiegBXwMAAF0DiegBXwMAAF0DiegBXwMAAF0DiegBXwMAAF0DiegBXwMAAF0DwABNRgFbXQPAAE14AltbYQMBW1thAwFbW10DwABNeAJbW2EDAl8DAABfAwEAXF0DijUCXwMAAF8DAQBhAwBfAwEAXQOKNQJfAwAAXwMBAGEDAV8DAQBfAwEAXQOKNQJfAwAAXwMBAGEDAF8DAQBdA4o1Al8DAABfAwEAXQOKNQJfAwAAXwMBAGEDAl8DAABfAwEAXwMBAGEDAl8DAABfAwEAXQPAAE2fAl8DAgBfAwMAXQPAAE14Al8DAgBfAwMAXQOKNQJfAwAAXwMBAGEDAl8DAABfAwEAYAPAAErYXQPAAE1GAV8DAABdA4prAl8DAABfAwEAXQOKawJfAwAAXwMBAF0DwABNeAJfAwAAXwMBAF0DwABNeAJfAwAAXwMBAF0DwABNeAJfAwAAXwMBAF0DwABNeAJfAwAAXwMBAF0DwABNeAJfAwAAXwMBAF0DwABNeAJfAwAAXwMBAF0DiskBXwMAAF0DiskBXwMAAF8DAABfAwAAXwMAAF8DAABdA4rJAV8DAABdA4rJAV8DAABdA4rUAV8DAABdA4rUAV8DAABdA4rwAV8DAABdA4rwAV8DAABdA4rwAV8DAABdA4rwAV8DAABdA4rwAV8DAABdA4r6AV8DAABdA4r6AV8DAABdA4sEAV8DAABdA4q0AV8DAQBdA4sEAV8DAQBdA4r6AV8DAABdA4r6AV8DAABdA4r6AV8DAABdA4r6AV8DAABhAwFfAwAAYAPAAErYXQOK+gFfAwAAXQOK+gFfAwAAYQMBXQOK1AFfAwAAXF0DiycBXwMAAF0DiycBXwMAAF0DiycBXwMAAF0DiycBXwMAAF0DiycBXwMAAF0DizMBXwMAAF0DwABNRgFfAwEAXQOLMwFfAwEAXQOLMwFfAwEAYQMBXwMAAFxdA4szAV8DAABdA4szAV8DAABdA8AATUYBXwMAAF0DwABNRgFfAwAAXQPAAE1GAV8DAABdA8AATUYBXwMAAF0DizMBXwMAAGEDAV8DAABgA8AASthdA8AATUYBXwMAAF0DizMBXwMAAF0DwABNRgFfAwAAXQPAAE1GAV8DAABdA8AATUYBXwMAAF0DwABNRgFfAwAAXQPAAE1GAV8DAABdA8AATUYBXwMAAF0DwABNRgFfAwAAXQPAAE1GAV8DAABdA8AATUYBXwMAAF0DwABNRgFfAwAAXQOLMwFfAwAAXQPAAE1GAV8DAABdA8AATUYBXwMAAF0DwABNRgFfAwAAXQOLMwFfAwAAXQOLMwFfAwAAXQOLYQFfAwAAXQOLYQFfAwAAXQOLbwFfAwAAYQMBXwMAAGADwABK2F0DwABNRgFbYQMBXwMAAGADwABK2F0DwABNRgFbXQPAAE46AV8DAABdA8AATUYBXwMAAGEDAV8DAABcYQMCXwMAAF8DAABfAwAAYQMCXwMBAF8DAABfAwEAYQMBXwMAAGADwABK2GEDAV8DAABgA8AASthhAwFfAwAAYAPAAErYYQMAXwMAAGEDAV8DAABgA8AASthhAwBfAwAAYQMBXwMAAGADwABK2GEDAF8DAABdA4ugAV8DAABhAwFfAwAAYAPAAErYXQPAAE1GAVthAwFfAwAAYAPAAErYXQPAAE1GAVtdA8AATjoBXwMAAF0DwABNRgFfAwAAYQMBXwMAAFxhAwJfAwAAXwMAAF8DAABhAwJfAwEAXwMAAF8DAQBhAwFfAwAAYAPAAErYYQMBXwMAAGADwABK2GEDAV8DAABgA8AASthhAwBfAwAAYQMBXwMAAGADwABK2GEDAF8DAABhAwFfAwAAYAPAAErYYQMAXwMAAF0DwABOOgFfAwAAXQPAAE46AV8DAABdA8AATjoBXwMAAF0Di9YBXwMAAGEDAV8DAABgA8AASthdA8AATUYBW2EDAV8DAABgA8AASthdA8AATUYBW10DwABOOgFfAwAAXQPAAE1GAV8DAABhAwFfAwAAXGEDAl8DAABfAwAAXwMAAGEDAl8DAQBfAwAAXwMBAGEDAV8DAABgA8AASthhAwFfAwAAYAPAAErYYQMBXwMAAGADwABK2GEDAF8DAABhAwFfAwAAYAPAAErYYQMAXwMAAGEDAV8DAABgA8AASthhAwBfAwAAXQOMJwJfAwAAXwMBAF0DjCcCXwMAAF8DAQBfAwEAXQOMGwFfAwAAXwMBAF0DjCcCXwMAAF8DAQBfAwEAXwMBAF8DAQBfAwEAXwMBAF8DAQBfAwEAXQOMJwJfAwAAXwMBAF8DAQBfAwEAXwMBAF8DAQBfAwEAXwMBAF0DjCcCXwMAAF8DAQBdA4wnAl8DAABfAwEAXQOMJwJfAwAAXwMBAF0DjCcCXwMAAF8DAQBfAwEAXQOMJwJfAwAAXwMBAF8DAQBfAwEAXwMBAF8DAQBfAwEAXwMBAF0DjCcCXwMAAF8DAQBdA4wnAl8DAABfAwEAXQOMJwJfAwAAXwMBAF0DjCcCXwMAAF8DAQBdA4wnAl8DAABfAwEAXQOMJwJfAwAAXwMBAGEDAl8DAABfAwEAXF0DjEgCXwMAAF8DAQBhAwBfAwEAXQOMSAJfAwAAXwMBAGEDAV8DAQBfAwEAXQOMSAJfAwAAXwMBAGEDAF8DAQBdA4xIAl8DAABfAwEAXQOMSAJfAwAAXwMBAGEDAl8DAABfAwEAXwMBAGEDAl8DAABfAwEAXQPAAE2fAl8DAgBfAwMAXQPAAE14Al8DAgBfAwMAXQOMSAJfAwAAXwMBAGEDAl8DAABfAwEAYAPAAErYXQPAAE1GAV8DAABdA4xjAl8DAgBfAwMAXQOMYwJfAwIAXwMDAF0DjGMCXwMAAF8DAQBdA4xjAl8DAABfAwEAXQOMYwJfAwAAXwMBAF0DjCICXwMAAF8DAQBdA4xjAl8DAABfAwEAXQOMYwJfAwAAXwMBAGEDAF8DAQBdA4xjAl8DAABfAwEAXQOMYwJfAwAAXwMBAF0DjGMCXwMAAF8DAQBhAwJfAwAAXwMBAFxdA4xjAl8DAABfAwEAYQMBXQOMIgJbW2ADwABK2GEDAV0DjCICW1tgA8AASthdA4xjAl8DAABfAwEAXQOMYwJfAwAAXwMBAF0DjIkCXwMAAF8DAQBdA4wnAl8DAABdA4wbAV8DAABdA4yJAl8DAABfAwEAXQPAAE1GAV0DjBsBXwMAAF0DjIkCXwMAAF8DAQBdA8AATUYBXQOMGwFfAwAAXQOMiQJfAwAAXwMBAF0DjCcCXwMAAF0DjBsBXwMAAF0DjIkCXwMAAF8DAQBdA4yJAl8DAABfAwEAXQOMiQJfAwAAXwMBAF0DjIkCXwMAAF8DAQBdA4yJAl8DAABfAwEAXQONGQFfAwAAXQONGQFfAwAAYQMBXwMAAFxhAwJfAwAAXwMAAF8DAABhAwJfAwEAXwMAAF8DAQBhAwFfAwAAYAPAAErYYQMBXwMAAGADwABK2GEDAV8DAABgA8AASthhAwBfAwAAYQMBXwMAAGADwABK2GEDAF8DAABhAwFfAwAAYAPAAErYYQMAXwMAAF0DjOgBXwMAAGEDAV8DAABgA8AASthdA8AATUYBW2EDAV8DAABgA8AASthdA8AATUYBW10DwABOOgFfAwAAXQPAAE1GAV8DAABhAwFfAwAAXGEDAl8DAABfAwAAXwMAAGEDAl8DAQBfAwAAXwMBAGEDAV8DAABgA8AASthhAwFfAwAAYAPAAErYYQMBXwMAAGADwABK2GEDAF8DAABhAwFfAwAAYAPAAErYYQMAXwMAAGEDAV8DAABgA8AASthhAwBfAwAAXQONGQFfAwEAXQONGQFfAwEAXQONGQFfAwAAXQONGQFfAwAAXQONGQFfAwAAXQONGQFfAwAAXQONGQFfAwAAXQONGQFfAwAAXQONGQFfAwAAXQONGQFfAwAAXQONGQFfAwAAXQONGQFfAwAAXQONGQFfAwAAXQPAAE46AV8DAABdA8AATjoBXwMAAF0DjRkBXwMAAF0DjRkBXwMAAF0DjRkBXwMAAF0DjBsBXwMAAF0DjRkBXwMAAF0DjBsBXwMAAF0DjRkBXwMAAF0DwABNRgFgA8AAToldA8AATUYBYAPAAE6JXQPAAE1GAWADwABOiV0DwABNRgFgA8AAToldA8AATUYBYAPAAE6JXQPAAE1GAWADwABOiWADjntdA8AATUYBW10DwABNRgFbXQPAAE14AltbYAOsF10DwABNRgFgA8AATKJdA8AATUYBW2ADjjhdA8AATlcBYAPAAE3vXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiYAOsNl0DwABNRgFbXQPAAE1GAWADwABMol0DwABNRgFbXQPAAE1GAVtdA8AATUYBW2ADjntdA8AATlcBYAPAAE3vYAOOsGADjspgA47KYAOsF2ADj2RgA49kXQPAAE5XAVtgA47ZYAOPNWADrBdgA6wXYAOsF2ADrBdgA6wXYAOsF2ADrBdgA6wXYAOsF2ADrBdgA6wXYAOsF10DwABOVwFgA8AATolgA6wXYAOsF2ADrBdgA6wXYAOsF2ADrBddA8AATlcBXQPAAE1GAWADwABMol0DwABOVwFdA8AATUYBYAPAAEyiYAOPb10DwABOVwFdA8AATUYBYAPAAEyiYAOsF10DwABNRgFgA8AATKJdA8AATUYBXwMAAF0Dj8wCXwMAAF8DAQBdA8AATlcBXwMAAF0Dj8wCXwMAAF8DAQBdA4/MAl8DAQBfAwAAXQOPzAJfAwAAXwMBAF0Dj8wCXwMCAF8DAQBdA4/MAl8DAQBfAwIAXQOPzAJfAwAAXwMBAF0Dj8wCXwMAAF8DAQBdA4/MAl8DAQBfAwIAXQOPzAJdA8AATUYBYAPAAEyiYAPAAE6JYAORL2ADkGdgA5BnYAOQL2ADkC9gA5GmXQPAAE1GAV0DwABNRgFgA8AATKJgA6wXXQPAAE1GAVtdA8AATUYBW10DwABNRgFbXQPAAE1GAVtdA8AATUYBW10DwABNRgFbXQPAAE1GAVtgA6wXXQPAAE1GAVtdA8AATUYBW2ADrBdgA5D3YAOQ+mADkPpgA5EvXQPAAEaAAWADwABOiV0DwABGgAFgA8AAToldA8AATUYBYAPAAE6JXQPAAE1GAWADwABOiWADkS9gA5EvYAORL2ADkS9gA5EvYAORL2ADkS9dA8AATlcBYAPAAE6JYAORg2ADkYNgA5HbYAOsF2ADrBdgA6wXYAOsF2ADrBdgA6wXYAOsF2ADrBdgA6wXYAOsF2ADrBdgA6wXYAOsF2ADjuNgA47jYAOO42ADkCFgA5AhYAOOOGADkCFdA8AATXgCYAPAAE6JYAOSRmADkCFdA8AATUYBW2ADkCFdA4FCAWADwABPCl0DgUIBYAPAAE8KXQPAAE1GAWADkr5dA8AATUYBYAOSvl4DAAAAAAABVwOR/QFfAwAAXwMAAF0DwABNRgFgA5KxXQPAAE14AltbXQPAAE14AltbXQPAAE14AmADwABOiWADwABOiV4DAAICAmADwABOiV0DwABNeAJgA8AATolgA8AATokAAVcDkfwAXQOBIgFgA5ImYAOQIWADkCFbXQPAAE1GAVtdA8AATUYBW10DgjsCXwMAAF8DAQBdA4/MAl8DAABfAwEAXQOPzAJfAwAAXwMBAF0DwABNBAFfAwAAYQMBXwMBAGADwABK2GEDAF8DAQBhAwFfAwEAXF0DlN8CXwMAAF8DAQBdA5TfAl8DAABfAwEAYQMBXwMBAGADwABK2GEDAV8DAQBgA8AASthhAwFfAwEAYAPAAErYYQMAXwMBAGEDAV8DAQBgA8AASthhAwBfAwEAYQMBXwMBAGADwABK2GEDAF8DAQBhAwJfAwEAXwMBAF8DAQBhAwJfAwIAXwMBAF8DAgBdA8AATUYBXwMBAF0DwABOOgFfAwEAXQOU3wJfAwAAXwMBAF0DlN8CXwMAAF8DAQBdA5TfAl8DAABfAwEAYQMBXwMBAGADwABK2F0DwABNRgFfAwEAXQOU3wJfAwAAXwMBAF0DlN8CXwMAAF8DAQBdA5TfAl8DAABfAwEAXQPAAE1GAV8DAQBdA8AATUYBXwMBAF0DwABNRgFfAwEAXQOU3wJfAwAAXwMBAF0DlN8CXwMAAF8DAQBdA5TfAl8DAABfAwEAXQOU3wJfAwAAXwMBAF0DlN8CXwMAAF8DAQBdA5TfAl8DAABfAwEAYQMBXwMBAGADwABK2GEDAV8DAQBgA8AASthdA5TfAl8DAABfAwEAXQOU3wJfAwAAXwMBAF0DlN8CXwMAAF8DAQBdA5TfAl8DAABfAwEAXQOU3wJfAwAAXwMBAF0DlN8CXwMAAF8DAQBdA5TfAl8DAABfAwEAXQPAAE1GAV8DAABdA8AATUYBXwMAAF0DwABNRgFfAwAAYQMCXwMBAF8DAQBgA8AATKJdA8AATUYBXwMAAF0DwABNRgFfAwAAXQPAAE1GAV8DAABhAwFfAwEAYAPAAErYYQMBXwMBAGADwABK2F0DwABNRgFfAwAAXQPAAE1GAV8DAABdA8AATUYBXwMAAF0DwABOOgFfAwAAXQPAAE46AV8DAABhAwFfAwEAYAPAAErYYQMBXwMBAGADwABK2F0DwABOOgFfAwEAXQPAAE46AV8DAQBdA8AATjoBXwMBAF0DwABNeAJfAwAAXwMBAF0DwABNeAJfAwAAXwMBAGEDAF8DAwBdA8AATXgCXwMAAF8DAQBhAwJfAwIAXwMDAFxdA8AATXgCXwMAAF8DAQBhAwFfAwMAXwMDAGEDAF8DAwBdA8AATXgCXwMAAF8DAQBhAwJfAwIAXwMDAF8DAwBdA8AATXgCXwMAAF8DAQBhAwJfAwIAXwMDAGADwABK2F0DirQBXwMAAF0DirQBXwMAAF0DirQBXwMAAF0DirQBXwMAAGEDAV8DAQBgA8AASthhAwFfAwEAYAPAAErYYQMBXwMAAFxhAwFfAwAAYAPAAErYYQMBXwMAAGADwABK2GEDAV8DAABgA8AASthhAwBfAwAAYQMBXwMAAGADwABK2GEDAF8DAABhAwFfAwAAYAPAAErYYQMAXwMAAGEDAl8DAABfAwAAXwMAAGEDAl8DAQBfAwAAXwMBAF0DwABNRgFfAwAAXQPAAE46AV8DAABdA8AATUYBXwMAAF0Dlc0BXwMAAF0Dlc0BXwMAAF0DlfACXwMAAF8DAQBdA5XwAl8DAABfAwEAXQOWJgJfAwAAXwMBAF0DliYCXwMAAF8DAQBdA5YmAl8DAABfAwEAXQOWJgJfAwAAXwMBAGEDAF8DAABhAwBfAwAAYQMAXwMAAF0Dlt0BXwMAAF0Dlt0BXwMAAGEDAmADwABMol8DAABcYQMCXwMAAF8DAABgA8AATKJdA8AATUYBXwMAAF0DwABNRgFfAwAAYQMCXwMAAF8DAABgA8AATKJhAwJfAwAAXwMAAGADwABMomEDAl8DAABfAwAAYAPAAEyiYQMCXwMAAF8DAABgA8AATKJhAwJfAwAAXwMAAGADwABMomEDAl8DAABfAwAAYAPAAEyiYQMCXwMAAF8DAABgA8AATKJhAwJfAwAAXwMAAGADwABMomEDAl8DAABfAwAAYAPAAEyiXQPAAE1GAV8DAABdA8AATUYBXwMAAF0DwABNRgFfAwAAXQPAAE1GAV8DAABdA8AATUYBXwMAAGEDAl8DAABfAwAAYAPAAEyiYQMCXwMAAF8DAABgA8AATKJdA8AATUYBXwMAAF0DwABNRgFfAwAAYQMCXwMAAF8DAABgA8AATKJdA8AATUYBXwMAAF0DwABNRgFfAwAAXQPAAE1GAV8DAABdA8AATUYBXwMAAF0DwABNRgFfAwAAYQMCXwMAAF8DAABgA8AATKJdA8AATUYBXwMAAF0DwABNRgFfAwAAYQMCXwMAAF8DAABgA8AATKJhAwJfAwAAXwMAAGADwABMomEDAl8DAABfAwAAYAPAAEyiXQPAAE1GAV8DAABdA8AATUYBXwMAAF0DwABNRgFfAwAAXQPAAE1GAV8DAABdA8AATUYBXwMAAF0DwABNRgFfAwAAXQPAAE1GAV8DAABdA8AATUYBXwMAAF0DwABNRgFfAwAAYQMCXwMAAF8DAABgA8AATKJhAwJfAwAAXwMAAGADwABMomEDAl8DAABfAwAAYAPAAEyiXQPAAE1GAV8DAABdA8AATUYBXwMAAGEDAl8DAABfAwAAYAPAAEyiYQMCXwMAAF8DAABgA8AATKJhAwJfAwAAXwMAAGADwABMol0DwABNRgFfAwAAXQPAAE1GAV8DAABdA8AATUYBXwMAAF0DwABNRgFfAwAAXQPAAE1GAV8DAABfAwAAXQOXsQFfAwAAXwMAAF0Dl7EBXwMAAF8DAABfAwAAXQOXsQFfAwAAXwMAAF0Dl7EBXwMAAF8DAABdA5exAV8DAABfAwAAXQOXsQFfAwAAXwMAAF8DAABfAwAAXwMAAF0Dl7EBXwMAAF0Dl8kBXwMAAF0Dl8kBXwMAAF0Dl8kBXwMAAF0Dl8kBXwMAAGADrEBeAwABAQFgA8AATokAAVcDk7kAXGADwABMmF0DwABNeAJbW10DiQgCW1tdA4kIAltbXQPAAE1GAWADmDxdA8AATUYBYAOYPF0DwABNRgFgA5g8XQPAAE1GAWADmDxdA8AATUYBYAOYPF0DwABNRgFgA5g8XQPAAE1GAWADmDxbW10DwABNRgFbXQPAAE1GAVtdA8AATUYBW1tdA8AATUYBW1tbW1tdA4FCAVtbW10DwABNRgFbXQPAAE1GAVtdA8AATUYBW10DwABNRgFbXQPAAE1GAVtdA8AATUYBW10DwABNRgFbXQPAAE1GAVtdA8AATUYBW10DwABNRgFbXQPAAE1GAVtdA8AATUYBW10DwABNRgFbXQPAAE1GAVtdA8AATUYBW10DwABNRgFbXQPAAE1GAVtdA8AATUYBW10DwABNRgFbXQPAAE1GAVtdA8AATUYBW10DwABNRgFbXQPAAE1GAVtdA8AATUYBW10DwABNRgFbXQPAAE1GAVtdA8AATUYBW10DwABNRgFbXQPAAE1GAVtdA8AATUYBW10DwABNRgFbXQPAAE1GAVtdA8AATUYBW10DwABNRgFbXgMAAAAAAAFXA5fUAFxdA8AATUYBW10DwABNRgFbW1tgA8AATJhgA8AATJhdA5lqAV8DAABdA5lqAV8DAABdA8AATUYBW10DwABNRgFbXQPAAE1GAVtdA8AATUYBW10DwABNRgFbXQPAAE1GAVtdA8AATUYBW10DwABNRgFgA5whXQPAAE1GAWADnCFdA8AATXgCYAPAAE77YAOcRV0DwABNeAJgA8AATvtgA5xFXQPAAE14AmADwABO+2ADnEVdA8AATXgCYAPAAE77YAOcRV0DwABNeAJgA8AATvtgA5xFXQPAAE14AmADwABO+2ADnEVdA8AATXgCYAPAAE77YAOcRV0DwABNeAJgA8AATvtgA5vSXQPAAE14AmADwABO+2ADm9JdA8AATXgCYAPAAE77YAOb0l0DwABNRgFgA5w4XQPAAE1GAVtdA8AATUYBW10DwABNRgFbXQPAAE1GAWADnDhdA8AATXgCYAPAAE77YAOb0l0DwABMgwFgA5ozXQPAAEyDAWADnBRdA8AATIMBYAOcFF0DwABMgwFgA5ozXQPAAE1GAWADm+VgA5yyYAOcsmEDAWADwABMomADwABK2GEDAWADwABMomADwABK2F0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiYAOcsmADnLJhAwFgA8AATKJcYQMCYAPAAEyiYAPAAEyiYAPAAEyiYQMCXwMAAGADwABMol8DAABhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthhAwBgA8AATKJhAwFgA8AATKJgA8AASthhAwBgA8AATKJhAwFgA8AATKJgA8AASthhAwBgA8AATKJgA5yyYAOcsl8DAABdA5zpAV8DAABfAwAAYAOc72ADnO9hAwFgA8AAS1BgA8AASthhAwFgA8AAS1BgA8AASthdA8AATUYBYAPAAEtQXQPAAE1GAWADwABLUGADnO9gA5zvYQMBYAPAAEtQXGEDAmADwABLUGADwABLUGADwABLUGEDAl8DAABgA8AAS1BfAwAAYQMBYAPAAEtQYAPAAErYYQMBYAPAAEtQYAPAAErYYQMBYAPAAEtQYAPAAErYYQMAYAPAAEtQYQMBYAPAAEtQYAPAAErYYQMAYAPAAEtQYQMBYAPAAEtQYAPAAErYYQMAYAPAAEtQYAOc72ADnO9fAwAAXQOdJgFfAwAAXwMAAGADnSxgA50sYQMBYAOsnWADwABK2GEDAWADrJ1gA8AASthdA8AATUYBYAOsnV0DwABNRgFgA6ydYAOdLGADnSxgA6x8YAOdLGEDAWADrJ1cYQMCYAOsnWADrJ1gA6ydYQMCXwMAAGADrJ1fAwAAYQMBYAOsnWADwABK2GEDAWADrJ1gA8AASthhAwFgA6ydYAPAAErYYQMAYAOsnWEDAWADrJ1gA8AASthhAwBgA6ydYQMBYAOsnWADwABK2GEDAGADrJ1gA6x8YAOdLGADnSxgA51pYAOdaWEDAWADrchgA8AASthhAwFgA63IYAPAAErYXQPAAE1GAWADrchdA8AATUYBYAOtyGADnWlgA51pYAOsh2ADnWlhAwFgA63IXGEDAmADrchgA63IYAOtyGEDAl8DAABgA63IXwMAAGEDAWADrchgA8AASthhAwFgA63IYAPAAErYYQMBYAOtyGADwABK2GEDAGADrchhAwFgA63IYAPAAErYYQMAYAOtyGEDAWADrchgA8AASthhAwBgA63IYAOsh2ADnWlgA51pYAOdpmADnaZhAwFgA67sYAPAAErYYQMBYAOu7GADwABK2F0DwABNRgFgA67sXQPAAE1GAWADruxgA52mYAOdpmADrJJgA52mYQMBYAOu7FxhAwJgA67sYAOu7GADruxhAwJfAwAAYAOu7F8DAABhAwFgA67sYAPAAErYYQMBYAOu7GADwABK2GEDAWADruxgA8AASthhAwBgA67sYQMBYAOu7GADwABK2GEDAGADruxhAwFgA67sYAPAAErYYQMAYAOu7GADrJJgA52mYAOdpmADniZgA54mYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJgA54mYAOeJmEDAWADwABMolxhAwJgA8AATKJgA8AATKJgA8AATKJhAwJfAwAAYAPAAEyiXwMAAGEDAWADwABMomADwABK2GEDAWADwABMomADwABK2GEDAWADwABMomADwABK2GEDAGADwABMomEDAWADwABMomADwABK2GEDAGADwABMomEDAWADwABMomADwABK2GEDAGADwABMomADniZgA54mYAOsDWADnmBgA6wNYAOedWADnnVhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMomADnnVgA551YQMBYAPAAEyiXGEDAmADwABMomADwABMomADwABMomEDAl8DAABgA8AATKJfAwAAYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYAOedWADnnVgA6wXYAOer2ADrBdgA57EYAOexGEDAWADwABMomADwABK2GEDAWADwABMomADwABK2F0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiYAOexGADnsRhAwFgA8AATKJcYQMCYAPAAEyiYAPAAEyiYAPAAEyiYQMCXwMAAGADwABMol8DAABhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthhAwBgA8AATKJhAwFgA8AATKJgA8AASthhAwBgA8AATKJhAwFgA8AATKJgA8AASthhAwBgA8AATKJgA57EYAOexGADrCJgA57+YAOsImADnxNgA58TYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJgA58TYAOfE2EDAWADwABMolxhAwJgA8AATKJgA8AATKJgA8AATKJhAwJfAwAAYAPAAEyiXwMAAGEDAWADwABMomADwABK2GEDAWADwABMomADwABK2GEDAWADwABMomADwABK2GEDAGADwABMomEDAWADwABMomADwABK2GEDAGADwABMomEDAWADwABMomADwABK2GEDAGADwABMomADnxNgA58TYAOsLGADn01gA6wsYAOfZWADn2VhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMomADn2VgA59lYQMBYAPAAEyiXGEDAmADwABMomADwABMomADwABMomEDAl8DAABgA8AATKJfAwAAYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYAOfZWADn2VgA6w2YAOfn2ADrDZgA5+3YAOft2EDAWADwABMomADwABK2GEDAWADwABMomADwABK2F0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiYAOft2ADn7dhAwFgA8AATKJcYQMCYAPAAEyiYAPAAEyiYAPAAEyiYQMCXwMAAGADwABMol8DAABhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthhAwBgA8AATKJhAwFgA8AATKJgA8AASthhAwBgA8AATKJhAwFgA8AATKJgA8AASthhAwBgA8AATKJgA5+3YAOft2ADrEBgA5/xYAOsQGADoAhgA6AIYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJgA6AIYAOgCGEDAWADwABMolxhAwJgA8AATKJgA8AATKJgA8AATKJhAwJfAwAAYAPAAEyiXwMAAGEDAWADwABMomADwABK2GEDAWADwABMomADwABK2GEDAWADwABMomADwABK2GEDAGADwABMomEDAWADwABMomADwABK2GEDAGADwABMomEDAWADwABMomADwABK2GEDAGADwABMomADoAhgA6AIYAOsSmADoEJgA6xKYAOgWWADoFlhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMomADoFlgA6BZYQMBYAPAAEyiXGEDAmADwABMomADwABMomADwABMomEDAl8DAABgA8AATKJfAwAAYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYAOgWWADoFlgA6xUYAOgk2ADrFRgA6CqYAOgqmEDAWADwABMomADwABK2GEDAWADwABMomADwABK2F0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiYAOgqmADoKphAwFgA8AATKJcYQMCYAPAAEyiYAPAAEyiYAPAAEyiYQMCXwMAAGADwABMol8DAABhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthhAwBgA8AATKJhAwFgA8AATKJgA8AASthhAwBgA8AATKJhAwFgA8AATKJgA8AASthhAwBgA8AATKJgA6CqYAOgqmADrF5gA6DkYAOsXmADoPtgA6D7YQMBYAPAAEtQYAPAAErYYQMBYAPAAEtQYAPAAErYXQPAAE1GAWADwABLUF0DwABNRgFgA8AAS1BgA6D7YAOg+2EDAWADwABLUFxhAwJgA8AAS1BgA8AAS1BgA8AAS1BhAwJfAwAAYAPAAEtQXwMAAGEDAWADwABLUGADwABK2GEDAWADwABLUGADwABK2GEDAWADwABLUGADwABK2GEDAGADwABLUGEDAWADwABLUGADwABK2GEDAGADwABLUGEDAWADwABLUGADwABK2GEDAGADwABLUGADoPtgA6D7YAOsaGADoTVgA6xoYAOhTGADoUxhAwFgA8AAS1BgA8AASthhAwFgA8AAS1BgA8AASthdA8AATUYBYAPAAEtQXQPAAE1GAWADwABLUGADoUxgA6FMYQMBYAPAAEtQXGEDAmADwABLUGADwABLUGADwABLUGEDAl8DAABgA8AAS1BfAwAAYQMBYAPAAEtQYAPAAErYYQMBYAPAAEtQYAPAAErYYQMBYAPAAEtQYAPAAErYYQMAYAPAAEtQYQMBYAPAAEtQYAPAAErYYQMAYAPAAEtQYQMBYAPAAEtQYAPAAErYYQMAYAPAAEtQYAOhTGADoUxgA6xyYAOhhmADrHJgA6GdYAOhnWEDAWADrJ1gA8AASthhAwFgA6ydYAPAAErYXQPAAE1GAWADrJ1dA8AATUYBYAOsnWADoZ1gA6GdYAOsfGADoZ1hAwFgA6ydXGEDAmADrJ1gA6ydYAOsnWEDAl8DAABgA6ydXwMAAGEDAWADrJ1gA8AASthhAwFgA6ydYAPAAErYYQMBYAOsnWADwABK2GEDAGADrJ1hAwFgA6ydYAPAAErYYQMAYAOsnWEDAWADrJ1gA8AASthhAwBgA6ydYAOsfGADoZ1gA6GdYAOh6WADoelhAwFgA63IYAPAAErYYQMBYAOtyGADwABK2F0DwABNRgFgA63IXQPAAE1GAWADrchgA6HpYAOh6WADrIdgA6HpYQMBYAOtyFxhAwJgA63IYAOtyGADrchhAwJfAwAAYAOtyF8DAABhAwFgA63IYAPAAErYYQMBYAOtyGADwABK2GEDAWADrchgA8AASthhAwBgA63IYQMBYAOtyGADwABK2GEDAGADrchhAwFgA63IYAPAAErYYQMAYAOtyGADrIdgA6HpYAOh6WADojVgA6I1YQMBYAOu7GADwABK2GEDAWADruxgA8AASthdA8AATUYBYAOu7F0DwABNRgFgA67sYAOiNWADojVgA6ySYAOiNWEDAWADruxcYQMCYAOu7GADruxgA67sYQMCXwMAAGADruxfAwAAYQMBYAOu7GADwABK2GEDAWADruxgA8AASthhAwFgA67sYAPAAErYYQMAYAOu7GEDAWADruxgA8AASthhAwBgA67sYQMBYAOu7GADwABK2GEDAGADruxgA6ySYAOiNWADojVgA6KBYAOigWEDAWADwABMomADwABK2GEDAWADwABMomADwABK2F0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiYAOigWADooFhAwFgA8AATKJcYQMCYAPAAEyiYAPAAEyiYAPAAEyiYQMCXwMAAGADwABMol8DAABhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthhAwBgA8AATKJhAwFgA8AATKJgA8AASthhAwBgA8AATKJhAwFgA8AATKJgA8AASthhAwBgA8AATKJgA6KBYAOigWADrA1gA6K7YAOsDWADotBgA6LQYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJgA6LQYAOi0GEDAWADwABMolxhAwJgA8AATKJgA8AATKJgA8AATKJhAwJfAwAAYAPAAEyiXwMAAGEDAWADwABMomADwABK2GEDAWADwABMomADwABK2GEDAWADwABMomADwABK2GEDAGADwABMomEDAWADwABMomADwABK2GEDAGADwABMomEDAWADwABMomADwABK2GEDAGADwABMomADotBgA6LQYAOsF2ADowpgA6wXYAOjH2ADox9hAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMomADox9gA6MfYQMBYAPAAEyiXGEDAmADwABMomADwABMomADwABMomEDAl8DAABgA8AATKJfAwAAYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYAOjH2ADox9gA6wiYAOjWWADrCJgA6NuYAOjbmEDAWADwABMomADwABK2GEDAWADwABMomADwABK2F0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiYAOjbmADo25hAwFgA8AATKJcYQMCYAPAAEyiYAPAAEyiYAPAAEyiYQMCXwMAAGADwABMol8DAABhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthhAwBgA8AATKJhAwFgA8AATKJgA8AASthhAwBgA8AATKJhAwFgA8AATKJgA8AASthhAwBgA8AATKJgA6NuYAOjbmADrCxgA6OoYAOsLGADo79gA6O/YQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJgA6O/YAOjv2EDAWADwABMolxhAwJgA8AATKJgA8AATKJgA8AATKJhAwJfAwAAYAPAAEyiXwMAAGEDAWADwABMomADwABK2GEDAWADwABMomADwABK2GEDAWADwABMomADwABK2GEDAGADwABMomEDAWADwABMomADwABK2GEDAGADwABMomEDAWADwABMomADwABK2GEDAGADwABMomADo79gA6O/YAOsNmADo/lgA6w2YAOkEGADpBBhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMomADpBBgA6QQYQMBYAPAAEyiXGEDAmADwABMomADwABMomADwABMomEDAl8DAABgA8AATKJfAwAAYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYAOkEGADpBBgA6xAYAOkSmADrEBgA6RhYAOkYWEDAWADwABMomADwABK2GEDAWADwABMomADwABK2F0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiYAOkYWADpGFhAwFgA8AATKJcYQMCYAPAAEyiYAPAAEyiYAPAAEyiYQMCXwMAAGADwABMol8DAABhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthhAwBgA8AATKJhAwFgA8AATKJgA8AASthhAwBgA8AATKJhAwFgA8AATKJgA8AASthhAwBgA8AATKJgA6RhYAOkYWADrEpgA6SbYAOsSmADpLJgA6SyYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJgA6SyYAOksmEDAWADwABMolxhAwJgA8AATKJgA8AATKJgA8AATKJhAwJfAwAAYAPAAEyiXwMAAGEDAWADwABMomADwABK2GEDAWADwABMomADwABK2GEDAWADwABMomADwABK2GEDAGADwABMomEDAWADwABMomADwABK2GEDAGADwABMomEDAWADwABMomADwABK2GEDAGADwABMomADpLJgA6SyYAOsVGADpOxgA6xUYAOlA2ADpQNhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMomADpQNgA6UDYQMBYAPAAEyiXGEDAmADwABMomADwABMomADwABMomEDAl8DAABgA8AATKJfAwAAYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYAOlA2ADpQNgA6xeYAOlPWADrF5gA6VUYAOlVGEDAWADwABLUGADwABK2GEDAWADwABLUGADwABK2F0DwABNRgFgA8AAS1BdA8AATUYBYAPAAEtQYAOlVGADpVRhAwFgA8AAS1BcYQMCYAPAAEtQYAPAAEtQYAPAAEtQYQMCXwMAAGADwABLUF8DAABhAwFgA8AAS1BgA8AASthhAwFgA8AAS1BgA8AASthhAwFgA8AAS1BgA8AASthhAwBgA8AAS1BhAwFgA8AAS1BgA8AASthhAwBgA8AAS1BhAwFgA8AAS1BgA8AASthhAwBgA8AAS1BgA6VUYAOlVGADrGhgA6WOYAOsaGADpaVgA6WlYQMBYAPAAEtQYAPAAErYYQMBYAPAAEtQYAPAAErYXQPAAE1GAWADwABLUF0DwABNRgFgA8AAS1BgA6WlYAOlpWEDAWADwABLUFxhAwJgA8AAS1BgA8AAS1BgA8AAS1BhAwJfAwAAYAPAAEtQXwMAAGEDAWADwABLUGADwABK2GEDAWADwABLUGADwABK2GEDAWADwABLUGADwABK2GEDAGADwABLUGEDAWADwABLUGADwABK2GEDAGADwABLUGEDAWADwABLUGADwABK2GEDAGADwABLUGADpaVgA6WlYAOscmADpd9gA6xyYAOl9mADpfZhAwFgA6ydYAPAAErYYQMBYAOsnWADwABK2F0DwABNRgFgA6ydXQPAAE1GAWADrJ1gA6X2YAOl9mADrHxgA6X2YQMBYAOsnVxhAwJgA6ydYAOsnWADrJ1hAwJfAwAAYAOsnV8DAABhAwFgA6ydYAPAAErYYQMBYAOsnWADwABK2GEDAWADrJ1gA8AASthhAwBgA6ydYQMBYAOsnWADwABK2GEDAGADrJ1hAwFgA6ydYAPAAErYYQMAYAOsnWADrHxgA6X2YAOl9mADpkJgA6ZCYQMBYAOtyGADwABK2GEDAWADrchgA8AASthdA8AATUYBYAOtyF0DwABNRgFgA63IYAOmQmADpkJgA6yHYAOmQmEDAWADrchcYQMCYAOtyGADrchgA63IYQMCXwMAAGADrchfAwAAYQMBYAOtyGADwABK2GEDAWADrchgA8AASthhAwFgA63IYAPAAErYYQMAYAOtyGEDAWADrchgA8AASthhAwBgA63IYQMBYAOtyGADwABK2GEDAGADrchgA6yHYAOmQmADpkJgA6aOYAOmjmEDAWADruxgA8AASthhAwFgA67sYAPAAErYXQPAAE1GAWADruxdA8AATUYBYAOu7GADpo5gA6aOYAOskmADpo5hAwFgA67sXGEDAmADruxgA67sYAOu7GEDAl8DAABgA67sXwMAAGEDAWADruxgA8AASthhAwFgA67sYAPAAErYYQMBYAOu7GADwABK2GEDAGADruxhAwFgA67sYAPAAErYYQMAYAOu7GEDAWADruxgA8AASthhAwBgA67sYAOskmADpo5gA6aOXQOnQQFfAwAAXQOnQQFfAwAAYAOnWGADp1hhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMomADp1hgA6dYYQMBYAPAAEyiXGEDAmADwABMomADwABMomADwABMomEDAl8DAABgA8AATKJfAwAAYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYAOnWGADp1hgA6wNYAOnkmADrA1gA6enYAOnp2EDAWADwABMomADwABK2GEDAWADwABMomADwABK2F0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiYAOnp2ADp6dhAwFgA8AATKJcYQMCYAPAAEyiYAPAAEyiYAPAAEyiYQMCXwMAAGADwABMol8DAABhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthhAwBgA8AATKJhAwFgA8AATKJgA8AASthhAwBgA8AATKJhAwFgA8AATKJgA8AASthhAwBgA8AATKJgA6enYAOnp2ADrBdgA6fhYAOsF2ADp/ZgA6f2YQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJgA6f2YAOn9mEDAWADwABMolxhAwJgA8AATKJgA8AATKJgA8AATKJhAwJfAwAAYAPAAEyiXwMAAGEDAWADwABMomADwABK2GEDAWADwABMomADwABK2GEDAWADwABMomADwABK2GEDAGADwABMomEDAWADwABMomADwABK2GEDAGADwABMomEDAWADwABMomADwABK2GEDAGADwABMomADp/ZgA6f2YAOsImADqDBgA6wiYAOoRWADqEVhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMomADqEVgA6hFYQMBYAPAAEyiXGEDAmADwABMomADwABMomADwABMomEDAl8DAABgA8AATKJfAwAAYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYAOoRWADqEVgA6wsYAOof2ADrCxgA6iVYAOolWEDAWADwABMomADwABK2GEDAWADwABMomADwABK2F0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiYAOolWADqJVhAwFgA8AATKJcYQMCYAPAAEyiYAPAAEyiYAPAAEyiYQMCXwMAAGADwABMol8DAABhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthhAwBgA8AATKJhAwFgA8AATKJgA8AASthhAwBgA8AATKJhAwFgA8AATKJgA8AASthhAwBgA8AATKJgA6iVYAOolWADrDZgA6jPYAOsNmADqOVgA6jlYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJgA6jlYAOo5WEDAWADwABMolxhAwJgA8AATKJgA8AATKJgA8AATKJhAwJfAwAAYAPAAEyiXwMAAGEDAWADwABMomADwABK2GEDAWADwABMomADwABK2GEDAWADwABMomADwABK2GEDAGADwABMomEDAWADwABMomADwABK2GEDAGADwABMomEDAWADwABMomADwABK2GEDAGADwABMomADqOVgA6jlYAOsQGADqR9gA6xAYAOpNGADqTRhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMomADqTRgA6k0YQMBYAPAAEyiXGEDAmADwABMomADwABMomADwABMomEDAl8DAABgA8AATKJfAwAAYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYQMBYAPAAEyiYAPAAErYYQMAYAPAAEyiYAOpNGADqTRgA6xKYAOpbmADrEpgA6mDYAOpg2EDAWADwABMomADwABK2GEDAWADwABMomADwABK2F0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiYAOpg2ADqYNhAwFgA8AATKJcYQMCYAPAAEyiYAPAAEyiYAPAAEyiYQMCXwMAAGADwABMol8DAABhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthhAwFgA8AATKJgA8AASthhAwBgA8AATKJhAwFgA8AATKJgA8AASthhAwBgA8AATKJhAwFgA8AATKJgA8AASthhAwBgA8AATKJgA6mDYAOpg2ADrFRgA6m9YAOsVGADqdJgA6nSYQMBYAPAAEyiYAPAAErYYQMBYAPAAEyiYAPAAErYXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJgA6nSYAOp0mEDAWADwABMolxhAwJgA8AATKJgA8AATKJgA8AATKJhAwJfAwAAYAPAAEyiXwMAAGEDAWADwABMomADwABK2GEDAWADwABMomADwABK2GEDAWADwABMomADwABK2GEDAGADwABMomEDAWADwABMomADwABK2GEDAGADwABMomEDAWADwABMomADwABK2GEDAGADwABMomADqdJgA6nSYAOsXmADqgxgA6xeYAOqIWADqiFhAwFgA8AAS1BgA8AASthhAwFgA8AAS1BgA8AASthdA8AATUYBYAPAAEtQXQPAAE1GAWADwABLUGADqiFgA6ohYQMBYAPAAEtQXGEDAmADwABLUGADwABLUGADwABLUGEDAl8DAABgA8AAS1BfAwAAYQMBYAPAAEtQYAPAAErYYQMBYAPAAEtQYAPAAErYYQMBYAPAAEtQYAPAAErYYQMAYAPAAEtQYQMBYAPAAEtQYAPAAErY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AWADwABMomADwABRG2ADkCFhAwBdA4EiAWADwABK2GADt4ZdA8AATXgCYAPAAE6JW10DwABNeAJgA8AATolbXQPAAE14AmADwABOiVtdA8AATUYBXQPAAE14AmADwABOiVtbXQOLMwFfAwAAXQPAAE14AmADwABOiV0DvoUBYAO+e10DvoUBYAO+e10DwABNeAJgA8AAToldA76FAWADvnteAwACAgJgA6vxXgMAAQEBYAOr8QABVwO+LgBcAAFXA74iAF0DgSIBXGADkaZhAwBgA8AASthdA8AATXgCYAPAAEFgYAPAAE6JYQMAYAPAAErYYQMAYAPAAErYXQPAAE1GAWADvrVdA8AATUYBYAO+tWEDAGADwABK2GEDAWADvrVcYAOsaGADrGhgA6xoYAOsaF0DwABNRgFbXQPAAE1GAVtdA8AATUYBW10DwABNRgFbXQPAAE1GAVtdA8AATUYBW14DAAEBAWADq/EAAVcDvicBYAOr8VxgA6xyYAOscmADrGhgA6xoYAOsaGADrGhgA6xoYAOsaGADrGhgA6xoXQPAAE1GAWADwABC6F0DwABNRgFgA8AAQuhdA8AATUYBYAPAAELoXQPAAE14AmADwABMmGADwABDA10DwABNeAJgA8AAQwNgA8AATJhdA8AATUYBYAPAAE6JXQPAAE1GAWADwABOiV0DwABNRgFgA8AAToldA8AATUYBYAPAAE6JXQPAAE1GAWADwABOiV0DwABNRgFgA8AAToldA8AATUYBYAPAAE6JXQPAAE1GAWADwABLUF0DwABNRgFgA8AAToldA8AATUYBYAPAAE6JXQPAAE1GAWADwABOiV0DwABNRgFgA8AAToldA8AATUYBYAPAAE6JYAORsmADkCFgA5HbYAOQIV0DwABNRgFgA8AARZtgA5AhXQPAAE1GAWADwABFcWADwABMmFtbYAPAAEyYYQMAXGEDAV8DAABcYQMCXwMAAF8DAQBcYQMDXwMAAF8DAQBfAwIAXGEDA18DAABfAwEAXwMCAFxdA8AATUYBYAPAAENGYAOQIWEDAGADwABK2F4DAAEBAWADwABBIwABVwO+JgBcXgMAAQEBYAPAAEEjAAFXA74mAFxgA6xAYAOsaGADrGhgA6xoYAOsaGADrGhgA6xoXgMAAQEBXgMAAQEBXwMAAAABVwO+JwFfAwAA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W10DwABNRgFbXQPAAE1GAVtdA8AATUYBW2EDAWADwABOiWADwABMomEDAWADwABOiWADwABMomEDAWADwABOiWADwABMomEDAWADwABOiWADwABMomEDAWADwABOiWADwABMomADwABMomEDAWADwABOiWADwABLUGADwABMomEDAWADwABMomADwABOiWEDAWADwABMomADwABOiWEDAWADwABMomADwABOiWADkCFdA8AATXgCYAPAAE77W10DwABMgwFfAwAAXQPAAE1GAVtdA8AATUYBW10DwABNRgFbXQPAAE1GAVtdA8AATIMBXwMAAF0DwABNRgFbXQPAAE1GAVtdA8AATUYBW10DwABNRgFbW2ADrFRgA6xUYAOsVGADrFRhAwFfAwAAXGEDAl8DAABfAwAAXwMAAGEDAl8DAQBfAwAAXwMBAGEDAV8DAABgA8AASthhAwFfAwAAYAPAAErYYQMBXwMAAGADwABK2GEDAF8DAABhAwFfAwAAYAPAAErYYQMAXwMAAGEDAV8DAABgA8AASthhAwBfAwAAXQOJ4wFfAwEAXQOJ4wFfAwEAXQPAAE1GAV8DAQBdA8AATUYBXwMBAF0DwABNRgFfAwEAYQMBYAPAAEyiXwMBAF0DwABNRgFfAwEAXQPAAE1GAV8DAQBdA8AATUYBXwMBAF0DiVUCXwMCAF8DAwBdA8AATXgCXwMCAF8DAwBhAwFgA8AATolgA8AATbldA4loAWADwABJWV0DwABNeAJgA8AASVlgA8AASWZdA4loAWADwABJWV0DwABGjQFgA8AATKJdA8AARo0BYAPAAEyiXQPAAEaNAWADwABMol0DwABIHAFgA8AAToldA8AATUYBYAPAAE6JXQPAAE1GAWADwABOiWADrDZgA6w2YAOsNl4DAAAAAAABVwPAAEY8AGADwABPCl0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATXgCYAPAAE6JYAPAAE6JXQPAAE14AmADwABOiWADwABOiWEDAmADwABOiWADwABMolxhAwJgA8AATolgA8AATKJcYQMCYAPAAE6JYAPAAEyiXGADrBdhAwJgA8AATolgA8AATKJcYQMCYAPAAE6JYAPAAEyiXGADrBdeAwABAgJgA8AATolbAABcXgMAAQICYAPAAE6JWwAAXF4DAAECAmADwABOiVsAAFxeAwABAgJgA8AATolbAABcXgMAAQICYAPAAE6JWwAAXF0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiYQMCYAPAAEyiYAPAAEyiYAPAAEyiXgMAAQICYAPAAE6JWwAAXF4DAAECAmADwABOiVsAAFxdA8AATUYBYAPAAEyiYQMCYAPAAEyiYAPAAEyiYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJeAwABAgJgA8AATolbAABcXgMAAQICYAPAAE6JWwAAXF0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAE6JXQPAAE1GAWADwABOiV0DwABNRgFgA8AAToldA8AATUYBYAPAAE6JXQPAAE1GAWADwABOiV0DwABNeAJbW2EDAmADwABOiWADwABOiVxhAwJgA8AATolgA8AATolcXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABOiV0DwABNRgFgA8AAToldA8AATUYBYAPAAE6JXQPAAE1GAWADwABOiV0DwABNRgFgA8AAToldA8AATUYBYAPAAE6JXQPAAE1GAWADwABOiV0DwABNRgFgA8AAToldA8AATXgCYAPAAE6JXQPAAE1GAWADwABOiWEDA2ADwABMomADwABMomADwABMolxhAwNgA8AATKJgA8AATKJgA8AATKJcYAOP4F0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMomADj+BdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0Dj60CYAPAAE6JYAPAAE6JYAOP4GADj+BdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMomADjvJdA8AATUYBW10DwABNRgFbXQPAAE1GAVtdA8AATUYBW2ADjzVgA6wXYAOsF2ADrBdgA481XQOPzAJgA8AATolgA8AAToldA8AATXgCYAPAAE6JYAPAAE6JXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABOiV0DwABNRgFgA8AAToldA8AATXgCW1thAwFgA8AATolcYAOsF2ADrBdgA6wXYQMCW1tgA6wXYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMCW1tgA6wXYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMCW1tgA6wXYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMCW1tgA6wXYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDAltbYAOsF2EDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxhAwJbW2ADrBdhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMCW1tgA6wXYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDAltbYAOsF2EDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMCW1tgA6wXYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDAltbYAOsF2EDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxhAwJbW2ADrBdhAwNgA6wXYAPAAE6JYAPAAEyiXGEDAltbYAOsF2EDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxhAwJbW2ADrBdhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMCW1tgA6wXYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxhAwJbW2ADrBdhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMCW1tgA6wXYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDAltbYAOsF2EDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMCW1tgA6wXYQMDYAOsF2ADwABOiWADwABMolxhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxhAwJbW2ADrBdhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxhAwJbW2ADrBdhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMCW1tgA6wXYQMDYAOsF2ADwABOiWADwABMolxhAwJbW2ADrBdhAwNgA6wXYAPAAE6JYAPAAEyiXGEDA2ADrBdgA8AATolgA8AATKJcYQMDYAOsF2ADwABOiWADwABMolxdA8AATUYBYAPAAEyiYAOsF10DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAVtdA8AATUYBW10DwABNRgFbXQPAAE1GAVthAwBgA8AATKJhAwFgA8AATolgA8AATKJhAwFgA8AATolgA8AATKJhAwFgA8AATolgA8AATKJhAwFgA8AATolgA8AATKJhAwFgA8AATolgA8AATKJhAwFgA8AATolgA8AATKJhAwFgA8AATolcYQMBYAPAAE6JYAPAAEyiYQMBYAPAAE6JYAPAAEyiYQMBYAPAAE6JYAPAAEyiYQMBYAPAAE6JYAPAAEyiYQMBYAPAAE6JYAPAAEyiYQMBYAPAAE6JYAPAAEyiYQMBYAPAAE6JXGEDAFxdA8AATUYBW2EDAWADwABOiWADwABK2GEDAGADwABK2GEDAGADwABK2GEDAWADwABOiWADwABK2GEDAGADwABK2GEDAWADwABOiWADwABK2F0DwABNRgFbYQMAYAPAAErYYQMBYAPAAE6JYAPAAErYYQMBYAPAAE6JYAPAAErYYQMBYAPAAE6JYAPAAErYYQMBYAPAAE6JYAPAAErYYQMBYAPAAE6JYAPAAEyiYQMBYAPAAE6JYAPAAErYYQMBYAPAAE6JYAPAAErYYQMAXGEDAWADwABOiWADwABMomEDAFxhAwFgA8AATolgA8AATKJhAwBcYQMBYAPAAE6JYAPAAEyiYQMAXGEDAWADwABOiWADwABMomEDAWADwABOiWADwABMomEDAWADwABOiWADwABMomEDAFxhAwBcYQMAXF0DwABNeAJgA8AAToldA8AATUYBYAPAAE6JXQPAAE1GAWADwABOiV0DwABNRgFgA8AAToldA8AATXgCYAPAAE6JXQPAAE1GAWADwABOiV0DwABNRgFgA8AAToldA8AATUYBYAPAAE6JXQPAAE1GAWADwABOiV0DwABNeAJgA8AAToldA8AATUYBYAPAAE6JXQPAAE1GAWADwABOiV0DwABNRgFgA8AATolhAwBgA8AASthhAwBgA8AASthhAwBgA8AASthhAwBgA8AASthhAwBgA8AASthhAwBcYQMAYAPAAErYYQMAYAPAAE6JYQMAXGEDAWADwABOiWADwABK2GEDAFxhAwBgA8AAToldA8AATUYBYAPAAFD8YQMAXGEDAGADwABK2GEDAWADwABOiWADwABK2GEDAWADwABOiVxgA5AhYAOQIWEDAGADwABK2GEDAGADwABK2GEDAGADwABK2GEDAGADwABK2GEDAGADwABK2GEDAGADwABK2GEDAGADwABOiWEDAGADwABK2GEDAFxhAwBgA8AASthhAwBgA8AATolhAwBcYQMAYAPAAErYXQOJCAJgA8AATolgA8AATolhAwFgA8AATolcYQMAXGEDAGADwABK2F0DiQgCYAPAAE6JYAPAAE6JYQMAYAPAAE6JXQOJCAJgA8AATolgA8AATolhAwBcYQMAYAPAAErYYQMBYAPAAE6JXGEDAFxhAwBgA8AATolhAwBcYQMAYAPAAErYYQMBYAPAAE6JXGEDAFxdA8AATXgCYAPAAE6JYAPAAE6JXQPAAE14AmADwABOiWADwABOiWEDAGADwABK2GEDAGADwABK2GEDAGADwABK2GEDAGADwABK2GEDAGADwABK2GEDAGADwABOiWEDAGADwABK2GEDAGADwABOiWEDAGADwABK2GEDAGADwABOiWEDAGADwABK2GEDAGADwABOiWEDAGADwABK2GEDAFxdA8AATUYBYAPAAE6JYAOsF2ADrBdgA6wXYAOsF10DgUIBW10DwABNRgFgA8AAUPxdA8AATUYBYAPAAFGXXQPAAE1GAWADwABRl10DgdYBXQPAAE1GAWADwABMol0DgdYBXQPAAE1GAWADwABMomEDAF0DwABNRgFgA8AATolhAwFgA8AAVO5gA8AAVPthAwBdA4EiAWADwABRaGEDAF0DgSIBYAPAAFFoYQMAXQOBIgFgA8AAUWhhAwFgA8AAVPtcYQMCYAPAAFTuYAPAAE6JXQOBIgFbYQMAXQOBIgFgA8AAUWhdA8AATlcBYAOsF10Dgl4BXwMAAF0Dgi4BXwMAAGEDAF0DgSIBW2EDAF0DgSIBW10DgUIBW10DwABTEgFfAwAAXQOCLgFfAwAAXQOBQgFbXQPAAFMSAV8DAABdA8AAUxIBXwMAAGADwABTLGADj+BdA8AATUYBYAPAAFD8XQPAAE14AmADwABOiV0DwABNRgFgA8AAToldA8AATUYBXQPAAE14AmADwABOiVthAwBdA8AATXgCW1tdA8AATUYBYAPAAE6JYQMAXQPAAE14AltbYQMAXQPAAE1GAV0DwABNeAJgA8AATolbXQOBQgFgA8AAUWhhAwBgA8AATolhAwBgA8AATolgA7uTYAOPZGADu5NdA4FCAWADu5NhAwBdA4EiAVtgA7SSYQMBXQPAAE1GAWADwABMolxhAwFdA8AATUYBYAPAAEyiXGEDAV0DwABNRgFgA8AATKJcYAOsF2EDAV0DwABNRgFgA8AATKJcYQMBXQPAAE1GAWADwABMolxhAwFdA8AATUYBYAPAAEyiXGEDAV0DwABNRgFgA8AATKJcYAOsF2ADrBdgA6wXYAOsF2ADrBdgA6wXXQOBQgFgA8AAUqZgA5GmYAORpl0DgSIBYAO7k10DwABNeAJgA8AATolgA8AATe9dA8AATXgCYAPAAE6JYAPAAE3vXQPAAE14AmADwABOiWADwABN710DwABNeAJgA8AATolgA8AATe9gA5GmXQPAAE46AWADwABTxFtdA8AATjoBYAPAAFPEXQPAAE46AWADwABTxF0DirQBW10DgUIBYAPAAFPhXgMAAwMDYAO6A2ADwABOiWADwABMogABVwPAAFAmAGADwABK2F0DwABOOgFdA7tzAVtdA4EiAVtdA8AATUYBYAPAAFT7XQPAAE1GAWADwABVE2EDAWADwABT4WADwABTc10DwABNeAJgA8AATolgA8AAU+dhAwFbXQOBIgFgA8AAU+FdA8AATUYBYAPAAFT7XQPAAE1GAWADwABVE2EDAWADwABOiWADwABOiWEDAWADwABOiWADwABOiWEDAWADwABOiWADwABOiV0DwABNeAJgA8AATKJgA8AAVFFdA8AATXgCYAPAAE6JW10DwABNeAJgA8AATolbXQPAAE14AmADwABOiVtdA8AATXgCYAPAAE6JW10DwABNeAJgA8AATolbXQPAAE14AmADwABOiVtdA8AATXgCYAPAAE6JW10DwABNeAJgA8AATolbXQPAAE14AmADwABMomADwABUg10DwABNeAJgA8AATKJgA8AAVINdA4loAWADwABUUV0Dgl4BYAPAAFELXQOJaAFgA8AAVFFdA4loAWADwABUUV0DiWgBYAPAAFRRXQOJaAFgA8AAVFFdA8AATXgCYAPAAE6JW10DwABNeAJgA8AATolbXQPAAE14AmADwABOiVtdA8AATXgCYAPAAE6JW10DwABNeAJgA8AATolbXQPAAE14AmADwABOiVtdA8AATXgCYAPAAE6JW10DwABNRgFgA8AAVLhdA8AATUYBYAPAAFS4YAO7k2ADu5NgA5GmYAORpmADkaZdA4JeAWADwABSpl0Dgl4BYAPAAFKmXQOCXgFgA8AAUqZdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0Dgl4BYAOsF10DwABNRgFgA8AAToldA8AATUYBYAPAAE6JXQPAAE14AltbXQPAAE14AltbXQPAAE14AltbXQPAAE14AltbXQPAAE14AltbXQPAAE14AltbXQPAAE14AmADwABOiWADwABV8l4DAQAABENgA8AATe8BWwEEAWEDAF8DAQADgJ1gA8AATJgAg0NgA4UoAGBdA8AATXgCW1sAAF8DAQBeAwEAAARDYAPAAE3vAVsBBAFhAwBfAwEAA4CdYAPAAEyYAINDYAOFKABgXQPAAE14AltbAABfAwEAXQPAAE1GAVtgA6wXYAOsh2ADrBddA4IcAVtdA4IcAVtdA4IcAVtgA5GmXQOCHAFbYAORpl0DghwBW10DghwBW10Dgl4BYAPAAFaHXQPAAE1GAWADwABOiV0DwABNRgFgA8AAToleAwABAQFdA8AATUYBYAPAAE6JAAFXA8AAUCcAW10DwABNRgFgA8AATolhAwFgA8AAToldA4EiAWADwABWh10DwABNRgFgA8AATKJdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMomADkaZdA8AATUYBYAPAAEyiXQPAAE1GAWADwABMol0DwABNRgFgA8AATKJgA5GmXQOCHAFdA8AATUYBYAPAAEyiYAOsF2ADrBdgA6wXYAOsF2ADrBdgA6wXYAOsF2ADrIdgA6wXXQOB1gFbYAO7k10DgUIBW10DgUIBW10DgUIBW10Dgl4BW2EDAF0DgSIBW10Dgl4BW2ADwABW1F0Dgl4BW10DwABNeAJgA8AATKJgA8AAV2lgA6wXYAORpmEDAWADwABOiVxhAwFgA8AATolcYQMBYAPAAE6JXGEDAWADwABOiVxhAwFgA8AATolgA8AATKJhAwFgA8AATolgA8AATKJdA4I0AVtdA4I0AVtdA4I0AVtdA8AATXgCYAPAAE6JW10DwABNeAJgA8AATolbXQPAAE14AmADwABOiWADwABX/V0DwABNRgFgA8AAWD5hAwFgA8AATolgA8AASthhAwFgA8AATolgA8AASthhAwFgA8AATolgA8AASthdA8AAWSgBYAPAAFg+XQPAAFkoAWADwABYPl0DwABZKAFgA8AAWD5eAwABAQFgA8AAWMAAAVcDwABXrQBcXgMAAQEBYAPAAErYAAFXA8AAV6wAXQOBIgFgA8AATwpeAwAAAAAAAVcDwABXqwBdA4EiAWADwABPCmADkCFgA5GmYAORpl4DAAAAAAABVwPAAFeiAF0DgSIBW14DAAAAAAABVwPAAFejAF0DgSIBW10DwABOOgFgA8AAToldA8AATXgCYAPAAE6JYAPAAE6JXQPAAE46AWADwABOiV0DwABZKAFgA8AAWD5dA8AATXgCYAPAAE6JXgMAAQEBYAPAAFjAAAFXA8AAV60AXF0DgUIBYAPAAE6JYAOQIV0DgUIBYAPAAE6JXQPAAE1GAWADwABOiV4DAAEBAWADwABYwAABVwPAAFetAFxdA8AATXgCYAPAAE6JYAPAAFgzXQPAAE1GAV0DgSIBW14DAAEBAWADwABPCgABVwPAAFelAF0DgSIBW14DAAICAmADwABPCl0DgdYBXQPAAE1GAWADwABMogABVwPAAFenAF0DgSIBW10DwABNeAJbW10DwABNeAJbW14DAAEBAWADwABOiQABVwPAAFekAF0DgSIBYAPAAE8KXQPAAE14AmADwABOiWADwABYWF4DAAEBAWADwABPCgABVwPAAFelAF0DgSIBW14DAAEBAWADwABPCgABVwPAAFeoAF0DgSIBXQPAAE1GAWADwABMomADjuNgA47jXgMAAgICYAPAAE8KXQPAAE1GAWADwABMogABVwPAAFemAF0DgSIBW10DwABNRgFbYAOO410DwABNRgFdA4EiAVteAwACAgJgA8AATwpdA8AATUYBYAPAAEyiAAFXA8AAV6YAXQOBIgFbXgMAAQEBYAPAAE8KAAFXA8AAV6kAXQOBIgFdA8AATUYBXQPAAE14AmADwABOiVtdA8AATXgCYAPAAE6JW10DwABNeAJbW10DwABOOgFgA8AAToldA8AATjoBYAPAAE6JXQPAAE14AltbXQPAAE14AmADwABMomADwABYgF0DwABNeAJgA8AATolbXQPAAE14AltbXQPAAE14AltbXQPAAE14AmADwABOiV4DAAEBAWADwABYwAABVwPAAFetAFxdA4FCAWADwABOiWADkCFdA4FCAWADwABOiV0DwABNeAJgA8AATolbXQPAAE14AmADwABOiVtdA8AATXgCYAPAAE6JW10DwABNeAJbW10DwABNeAJbW10DwABNeAJbW10DwABNeAJbW10DwABNeAJbW10DwABNeAJbW10DwABNeAJbW10DwABNeAJbW10DwABNeAJbW10DwABNeAJbW10DwABNeAJbW10DwABNeAJbW10DwABNRgFgA8AAToldA8AATUYBW10DwABNRgFbXQPAAE1GAVtdA8AATUYBW10DwABNRgFbXQPAAE1GAVtdA4FCAWADwABY+V0DwABNRgFbXQPAAE1GAVtdA8AATUYBW10DwABNRgFbXQPAAE1GAVtdA8AATUYBW10DgUIBYAPAAFj5XQOBQgFgA8AAWPlhAwBgA8AASthgA5AhYAOQIV0Dj60CYAPAAE3vXQPAAE1GAWADwABMomADkCFhAwFfAwAAXGEDAl8DAABfAwAAXwMAAGEDAl8DAQBfAwAAXwMBAGEDAV8DAABgA8AASthhAwFfAwAAYAPAAErYYQMBXwMAAGADwABK2GEDAF8DAABhAwFfAwAAYAPAAErYYQMAXwMAAGEDAV8DAABgA8AASthhAwBfAwAAXQPAAE14AmADwABOiV8DAABdA8AATXgCXwMAAGADwABOiV0D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AAAM7AACLnYAAAzzAAIvbwAADP4AAjV9AAANDQACNngAAA0OAAI4aQAADRQAAjqHAAANGgACOw0AAA0bAAI/pwAADSsAAkPAAAANOAACRWUAAA1FAAJFcwAADU0AAkXrAAANVAACRkwAAA1fAAJJ0gAADWoAAknyAAANcAACTXIAAA12AAJNtgAADX0AAk6aAAANhAACTucAAA2PAAJP8QAADZoAAlBHAAANqQACXZUAAA24AAJd5AAADcgAAmpqAAAN0gACapoAAA3fAAJsmgAADewAAmzOAAAN8wACbQsAAA4AAAJtrQAADg0AAm8BAAAOGgACcQoAAA4mAAJx4wAADjMAAnLrAAAOQAACcxoAAA5UAAJ0EAAADmEAAnbsAAAOdQACdxgAAA6CAAJ3TAAADpYAAn5pAAAOowACfpkAAA6wAAKAnwAADr0AAoDTAAAOxAACgRAAAA7RAAKDAQAADt4AAokHAAAO6wACiTcAAA74AAKLNwAADwUAAotrAAAPDAACi6gAAA8ZAAKNZAAADyYAApK2AAAPMwACkzEAAA87AAKVBQAAD0YAApc/AAAPTgACl1cAAA9fAAKYawAAD3AAAqRIAAAPgQACpTkAAA+KAAKm6gAAD5MAAqcaAAAPowACqtoAAA+sAAKrtwAAD7kAAqvpAAAPyQACraMAAA/SAAKupQAAD9sAArJSAAAP6wACspUAAA/0AAKy0wAAD/wAAr6EAAAQBQACwIoAABAOAALArAAAEBcAAsFBAAAQIAACwb8AABApAALB4QAAEDIAAsILAAAQOwACysYAABBEAALQSAAAEEwAAtEmAAAQWAAC0sIAABBlAALS2wAAEGwAAtOTAAAQeQAC078AABCEAALUHwAAEJEAAtQ4AAAQmAAC1SIAABClAALVMgAAELIAAtc2AAAQwQAC12EAABDbAALYcgAAEOoAAtlqAAAQ9wAC2ZUAABEIAALhNAAAERMAAuKIAAARIAAC44QAABEtAALkOQAAEToAAuRzAAARPgAC5N4AABFGAALo+QAAEU4AAuk+AAARWwAC6YoAABFjAALqfQAAEXAAAusvAAARfQAC62EAABGEAALrpAAAEZEAAu4hAAARngAC9JQAABGiAAL6SwAAEa4AAwLLAAARtgADBB8AABHDAAMFGwAAEdAAAwXQAAAR3QADBgoAABHhAAMGdQAAEekAAwqQAAAR8QADCtUAABH+AAMLIQAAEgYAAwwUAAASEwADDMYAABIgAAMM+AAAEicAAw07AAASNAADD7gAABJBAAMWKwAAEkUAAxnyAAASUQADGtAAABJdAAMcbAAAEmoAAxyFAAAScQADHT0AABJ+AAMdaQAAEokAAx3JAAASlgADHeIAABKdAAMezAAAEqoAAx7cAAAStwADIOAAABLGAAMhCwAAEuAAAyIcAAAS7wADIxQAABL8AAMjPwAAEw0AAyrxAAATGAADLEUAABMlAAMtQQAAEzIAAy32AAATPwADLjAAABNDAAMumwAAE0sAAzK2AAATUwADMvsAABNgAAMzRwAAE2gAAzQ6AAATdQADNOwAABOCAAM1HgAAE4kAAzVhAAATlgADN94AABOjAAM+UQAAE6cAA0QbAAATswADSZEAABO7AANKbwAAE8cAA0wLAAAT1AADTCQAABPbAANM3AAAE+gAA00IAAAT8wADTWgAABQAAANNgQAAFAcAA05rAAAUFAADTnsAABQhAANQfwAAFDAAA1CqAAAUSgADUbsAABRZAANSswAAFGYAA1LeAAAUdwADWpAAABSCAANb5AAAFI8AA1zgAAAUnAADXZUAABSpAANdzwAAFK0AA146AAAUtQADYlUAABS9AANimgAAFMoAA2LmAAAU0gADY9kAABTfAANkiwAAFOwAA2S9AAAU8wADZQAAABUAAANnfQAAFQ0AA23wAAAVEQADc7oAABUdAAN9TAAAFSUAA32KAAAVLgADgfIAABU3AAOIMgAAFT8AA4rAAAAVSAADitgAABVVAAOLxQAAFV0AA4vdAAAVagADjU0AABVyAAOQ2QAAFX0AA5P5AAAViAADlM8AABWQAAOV2gAAFZ8AA5atAAAVrgADmRgAABW7AAOchQAAFcgAA5zFAAAV1QADncEAABXcAAOeJgAAFekAA58iAAAV8AADn6EAABX9AAOotgAAFgQAA6xwAAAWDQADrV4AABYWAAOtqQAAFhoAA7UUAAAWIgADts8AABYmAAO5QgAAFi8AA77QAAAWOAADxMUAABZBAAPFqAAAFlAAA8gxAAAWXQADzDcAABZqAAPM2AAAFnMAA9FxAAAWfAAD0kkAABaEAAPTVAAAFpMAA9QnAAAWogAD1qAAABavAAPcfwAAFrwAA9y/AAAWyQAD3bsAABbQAAPeIAAAFt0AA98cAAAW5AAD35sAABbxAAPjCwAAFvgAA+S4AAAXAAAD7IEAABcIAAPtUwAAFxUAA++3AAAXIgAD9DcAABcxAAP02AAAFzoAA/ZKAAAXQwAD9m0AABdMAAP2rQAAF1UAA/d9AAAXXgAD+KYAABdnAAP4tAAAF2sAA/jCAAAXbwAD+PUAABdzAAP6uAAAF3wAA/wmAAAXhAAD/GAAABeIAAP8bgAAF4wAA/yIAAAXkAAD/PUAABeZAAP9DQAAF50AA/0lAAAXoQAD/T0AABelAAP9fwAAF6kAA/4IAAAXsgAD/j8AABe2AAP+jAAAF7oAA/6aAAAXvgAD/qgAABfCAAP+ywAAF8YAA/74AAAXzwAEAVIAABfYAAQBcAAAF+EABAGNAAAX6gAEArUAABfzAAQD8wAAF/wABARNAAAYBQAEBmwAABgOAAQH/AAAGBYABAjhAAAYHwAEC0sAABgoAAQMWAAAGDUABA2eAAAYQgAEDhMAABhPAAQPIAAAGFYABA+VAAAYYwAEELIAABhqAAQRZgAAGHcABBSyAAAYfgAEFfcAABiNAAQY4wAAGJwABBm/AAAYpwAEGiIAABiyAAQbmQAAGLsABB30AAAYxAAEH+oAABjNAAQgFQAAGNoABCCUAAAY5QAEJCQAABjuAAQkTwAAGPcABCVmAAAZAAAEJYcAABkLAAQnUQAAGRYABCmWAAAZIQAELAwAABkqAAQstgAAGTMABC5NAAAZPAAEL0UAABlFAAQvaAAAGU4ABDFpAAAZVwAEM+YAABlkAAQ0wAAAGXEABDT8AAAZegAENTAAABmDAAQ3OQAAGYwABDdzAAAZlQAEN+kAABmeAAQ4mwAAGacABDzuAAAZsAAEPn4AABm4AAQ/YwAAGcEABEHNAAAZygAEQtoAABnXAAREIAAAGeQABESVAAAZ8QAERaIAABn4AARGFwAAGgUABEc0AAAaDAAER+gAABoZAARLNAAAGiAABEx5AAAaLwAET2UAABo+AARQQQAAGkkABFCkAAAaVAAEUhsAABpdAARUdgAAGmYABFZsAAAabwAEVpcAABp8AARXFgAAGocABFqmAAAakAAEWtEAABqZAARb6AAAGqIABFwJAAAarQAEXdMAABq4AARgGAAAGsMABGKOAAAazAAEYzgAABrVAARkzwAAGt4ABGXHAAAa5wAEZeoAABrwAARn6wAAGvkABGpoAAAbBgAEa0IAABsTAARrfgAAGxwABGuyAAAbJQAEbbsAABsuAARt9QAAGzcABG5rAAAbQAAEbx0AABtJAARxxwAAG1IABHSNAAAbWgAEdJwAABtjAAR0swAAG2gABHXGAAAbbQAEeNoAABt2AAR5uAAAG4IABHtUAAAbjwAEe20AABuWAAR8JQAAG6MABHxRAAAbrgAEfLEAABu7AAR8ygAAG8IABH20AAAbzwAEfcQAABvcAAR/yAAAG+sABH/zAAAcBQAEgQQAABwUAASB/AAAHCEABIInAAAcMgAEjBcAABw9AASMUgAAHEoABJGuAAAcVwAEkg0AABxmAASSpwAAHHUABJYgAAAchAAElzAAAByTAASXmAAAHKIABKHGAAAcsQAEodgAABy6AASiAwAAHMMABKI3AAAcxwAEopIAABzLAASizQAAHM8ABKLsAAAc0wAEovgAABzcAASjyAAAHOUABKQiAAAc7gAEphEAABz3AASmdwAAHQAABKizAAAdCQAEqV0AAB0SAASqAQAAHRsABKt0AAAdJAAEq4AAAB0tAASs1wAAHTYABK3MAAAdPwAErngAAB1IAASvQwAAHVEABK+yAAAdWgAEsCEAAB1jAASxCAAAHWwABLSqAAAddQAEuLMAAB2CAAS40QAAHYsABLneAAAdlAAEvJUAAB2hAAS8oQAAHaoABLytAAAdswAEvUAAAB28AAS9WwAAHcUABL+QAAAdzgAEwVMAAB3XAATC6AAAHeIABMOnAAAd6wAExXUAAB30AATKyAAAHfwABMsqAAAeBQAEzJsAAB4OAATNjAAAHhkABM5KAAAeJAAEzqAAAB4vAATPlAAAHjoABNJjAAAeQwAE1RkAAB5QAATWAwAAHlsABNa1AAAeZAAE2BwAAB5vAATZ4QAAHnoABNyFAAAehQAE31AAAB6QAATfrAAAHpsABOEeAAAepgAE4XoAAB6xAATidwAAHrwABOKyAAAexwAE4zcAAB7SAATkNQAAHtsABOTHAAAe5gAE5QIAAB7xAATmiQAAHvwABOalAAAfBQAE6XUAAB8OAATpiwAAHxcABO4zAAAfIAAE8MEAAB8pAATw2QAAHzYABPHGAAAfPgAE8d4AAB9LAATzTgAAH1MABPba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AAh83gAAK9kACH1FAAAr5gAIgjsAACvzAAiCcwAAK/4ACILIAAAsCwAIiOsAACwSAAiKewAALBoACItgAAAsJwAIjcoAACw0AAiO1wAALEEACJAdAAAsTgAIkJIAACxbAAiRnwAALGIACJIUAAAsbwAIkzEAACx2AAiT5QAALIMACJcxAAAsigAImHYAACyZAAibYgAALKgACJw+AAAsswAInKEAACy+AAieGAAALMsACKBzAAAs2AAIomkAACzlAAiilAAALPIACKMTAAAs/QAIpqMAAC0KAAimzgAALRcACKflAAAtJAAIqAYAAC0vAAip0AAALToACKwVAAAtRQAIrosAAC1SAAivNQAALV8ACLDMAAAtbAAIscQAAC15AAix5wAALYYACLPoAAAtkwAItmUAAC2gAAi3PwAALa0ACLd7AAAtugAIt68AAC3HAAi5uAAALdQACLnyAAAt4QAIumgAAC3uAAi7GgAALfsACL4RAAAuCAAIvrcAAC4TAAi/EwAALh4ACL/iAAAuKQAIwLoAAC46AAjBKwAALkUACMGlAAAuUAAIw0AAAC5bAAjD1AAALmgACMTgAAAudQAIxdoAAC6AAAjGXwAALosACMnpAAAulgAIykUAAC6hAAjL5QAALqwACMx5AAAuuQAIz78AAC7GAAjQUQAALtEACNE1AAAu3AAI1LoAAC7nAAjVNQAALvYACNWJAAAvBQAI1egAAC8MAAjXLAAALxsACNkbAAAvJwAI2WMAAC82AAjZvAAAL0EACNoaAAAvSAAI2l8AAC9XAAjcTgAAL2YACN0TAAAvdQAI31EAAC+GAAjfowAAL48ACN/1AAAvmAAI4KIAAC+hAAjhPwAAL6oACOHRAAAvtwAI5XkAAC/EAAjpDAAAL8wACOoTAAAv2QAI61EAAC/mAAjrxAAAL/MACOzNAAAv+gAI7UAAADAHAAjuWwAAMA4ACO8NAAAwGwAI85EAADAiAAj00AAAMDEACPesAAAwQAAI+IQAADBLAAkBxQAAMFYACQRYAAAwYQAJBGoAADBqAAkK2AAAMHMACQsKAAAwgAAJE8cAADCNAAkT7wAAMJoACRP7AAAwpwAJFDcAADC0AAkrwQAAMMEACSxsAAAwyAAJLRcAADDPAAk/XwAAMNYACT+DAAAw3wAJX4AAADDoAAloBAAAMPYACWhSAAAxBwAJaLQAADESAAlrigAAMR0ACWv7AAAxLgAJbGwAADE/AAls3QAAMVAACW1OAAAxYQAJbb8AADFyAAluMAAAMYMACW6hAAAxlAAJbxIAADGlAAlvrAAAMbYACW/RAAAxwQAJb/YAADHMAAlwGwAAMdcACXBUAAAx4gAJcOkAADHtAAlx1QAAMf4ACXJYAAAyDwAJcpMAADIaAAly7QAAMiUACXOAAAAyNgAJc7sAADJBAAl0OgAAMkwACXSrAAAyVwAJdOYAADJiAAl17wAAMm0ACXZTAAAyfgAJdo4AADKJAAl25wAAMpQACXc9AAAypQAJd+UAADK2AAl4OAAAMscACXhzAAAy0gAJePIAADLdAAl5XwAAMugACXmaAAAy8wAJegoAADL+AAl6UQAAMwkACXqGAAAzFAAJes0AADMfAAl7zwAAMyoACXw4AAAzOwAJfTQAADNMAAl9mAAAM10ACX3TAAAzaAAJfiwAADNzAAl+ggAAM4QACX8qAAAzlQAJf30AADOmAAl/uAAAM7EACYA3AAAzvAAJgKQAADPHAAmA3wAAM9IACYqqAAAz3QAJisUAADPhAAmK1QAAM+oACYruAAAz7gAJiv4AADP3AAmLnwAAM/sACYu6AAAz/wAJi8oAADQIAAmL4wAANAwACYvzAAA0FQAJjNwAADQZAAmM9wAANCIACY1kAAA0JgAJjX8AADQvAAmNqQAANDMACY23AAA0NwAJjcsAADQ7AAmPEwAAND8ACY/6AAA0SAAJkKcAADRRAAmQwQAANFoACZDTAAA0YwAJlAoAADRsAAmZUAAANHAACaJwAAA0hAAJousAADSKAAmjUwAANJMACaNsAAA0mgAJqTkAADShAAmqPwAANKwACarfAAA0twAJq3UAADTCAAmsJgAANM0ACa/IAAA02AAJsAEAADTjAAm18AAANO4ACbn6AAA07wAJvDcAADTwAAm8jgAANPgACb6mAAA1AAAJvs4AADUIAAm/RgAANQkACcFWAAA1EQAJwroAADUSAAnFcAAANRMACcXWAAA1FAAJzQIAADUVAAnTLgAANRsACdPQAAA1HAAJ4b8AADUdAAnh5AAANSUACeIUAAA1LQAJ4kIAADU1AAnjEgAANT0ACeM3AAA1RQAJ42cAADVNAAnjlQAANVUACeR+AAA1XQAJ5KMAADVlAAnk1AAANW0ACeUBAAA1dQAJ5dEAADV9AAnl9gAANYUACeYmAAA1jQAJ5vgAADWVAAnnHQAANZ0ACedOAAA1pQAJ53wAADWtAAnoWgAANbUACeh/AAA1vQAJ6K8AADXFAAno3QAANc0ACenjAAA11QAJ6ggAADXdAAnqOAAANeUACeplAAA17QAJ6pIAADX1AAnrYgAANf0ACeuHAAA2BQAJ67gAADYNAAnsiAAANhUACeytAAA2HQAJ7N0AADYlAAn5pwAANi0ACfvWAAA2OwAJ+/oAADZDAAn85AAANksACf1IAAA2TAAJ/X0AADZNAAn9kAAANlMACiZvAAA2WQAKJxUAADZiAApN+wAANmsACk7EAAA2cwAKTy8AADZ7AApXFgAANoMAClc2AAA2iwAKV/8AADaTAApYagAANpsACmWWAAA2owAKZnkAADauAApphQAANrkACmoKAAA2ygAKapUAADbbAApsRwAANuwACm0qAAA2/QAKbcwAADcOAApudQAANx8ACnB4AAA3MAAKcb0AADdBAApyhAAAN1IACnWAAAA3YwAKeVMAADduAAp6SgAAN3YACnrJAAA3fgAKodkAADeGAAqqkwAAN5EACttpAAA3ogAK264AADetAArc/wAAN7gACt1fAAA3wwALBucAADfOAAsQ6wAAN9kACxFeAAA33QALEl0AADfhAAsTnwAAN/AACxSoAAA3/wALFNEAADgMAAsW3QAAOBkACxcIAAA4HQALG4wAADghAAscqgAAOCsACx2oAAA4QAALH2IAADhRAAsgOwAAOGAACyFUAAA4bwALIZQAADh+AAsiqQAAOIcACyLrAAA4lgALJA8AADifAAskmAAAOK4ACyytAAA4twALLZ4AADi7AAszPAAAOL8ACzPlAAA4wwALNhAAADjMAAs4PAAAONAACzivAAA41AALOa4AADjYAAs68AAAOOcACzv5AAA49gALPCIAADkDAAs+LgAAORAACz5ZAAA5FAALQt0AADkYAAtEKQAAOSIAC0VdAAA5NwALR28AADlIAAtIegAAOVcAC0nPAAA5ZgALSiEAADl1AAtLcAAAOX4AC0vEAAA5jQALTSgAADmWAAtN1wAAOaUAC1esAAA5rgALWNEAADmyAAtfewAAObYAC2BIAAA5ugALYucAADnDAAtl3gAAOccAC2Zp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AABCSgANLpoAAEJbAA0vcwAAQmoADTCMAABCeQANMMwAAEKIAA0x4QAAQpEADTIjAABCoAANM0cAAEKpAA0z0AAAQrgADTvlAABCwQANPNYAAELFAA1C6AAAQskADUORAABCzQANRbwAAELRAA1MuAAAQtUADU0rAABC2QANTioAAELdAA1PbAAAQuwADVB1AABC+wANUJ4AAEMIAA1SqgAAQxUADVLVAABDGQANV1kAAEMdAA1YdwAAQycADVl1AABDPAANWy8AAENNAA1cCAAAQ1wADV0hAABDawANXWEAAEN6AA1edgAAQ4MADV64AABDkgANX9wAAEObAA1gZQAAQ6oADWh6AABDswANaWsAAEO3AA1vfQAAQ7sADXAmAABDvwANclEAAEPDAA15QgAAQ8cADXm1AABDywANerQAAEPPAA179gAAQ94ADXz/AABD7QANfSgAAEP6AA1/NAAARAcADX9fAABECwANg+MAAEQPAA2FAQAARBkADYX/AABELgANh7kAAEQ/AA2IkgAARE4ADYmrAABEXQANiesAAERsAA2LAAAARHUADYtCAABEhAANjGYAAESNAA2M7wAARJwADZUEAABEpQANlfUAAESpAA2cBwAARK0ADZywAABEsQANntsAAES1AA2lzAAARLkADaY/AABEvQANpz4AAETBAA2ogAAARNAADamJAABE3wANqbIAAETsAA2rvgAARPkADavpAABE/QANsG0AAEUBAA2xuQAARQsADbLtAABFIAANtP8AAEUxAA22CgAARUAADbdfAABFTwANt7EAAEVeAA25AAAARWcADblUAABFdgANurgAAEV/AA27ZwAARY4ADcU8AABFlwANxmEAAEWbAA3NeQAARZ8ADc5GAABFowAN0OUAAEWnAA3X7wAARasADdhiAABFrwAN2WEAAEWzAA3aowAARcIADdusAABF0QAN29UAAEXeAA3d4QAAResADd4MAABF7wAN4pAAAEXzAA3j3AAARf0ADeUQAABGEgAN5yIAAEYjAA3oLQAARjIADemCAABGQQAN6dQAAEZQAA3rIwAARlkADet3AABGaAAN7NsAAEZxAA3tigAARoAADfdfAABGiQAN+IQAAEaNAA3/nAAARpEADgBpAABGlQAOAwgAAEaZAA4KqQAARp0ADgs0AABGoQAODGcAAEalAA4N6wAARrIADg8kAABGvwAOD1UAAEbKAA4R1QAARtUADhIIAABG2QAOF0oAAEbdAA4YFwAARuEADh7hAABG5QAOIDMAAEbtAA4hZQAARvwADiNtAABHCwAOJHYAAEcYAA4lwwAARyUADiYVAABHMgAOJ1wAAEc5AA4nsAAAR0YADikMAABHTQAOKbkAAEdaAA4zdwAAR2EADjREAABHZQAONWUAAEdpAA49sQAAR20ADj48AABHcQAOP28AAEd1AA5A8wAAR4IADkIsAABHjwAOQl0AAEeaAA5E3QAAR6UADkUQAABHqQAOSlIAAEetAA5LHwAAR7EADlHpAABHtQAOUzsAAEe9AA5UbQAAR8wADlZ1AABH2wAOV34AAEfoAA5YywAAR/UADlkdAABIAgAOWmQAAEgJAA5auAAASBYADlwUAABIHQAOXMEAAEgqAA5mfwAASDEADmdMAABINQAOaG0AAEg5AA5wuQAASD0ADnFEAABIQQAOcncAAEhFAA5z+wAASFIADnU0AABIXwAOdWUAAEhqAA535QAASHUADngYAABIeQAOfVoAAEh9AA5+JwAASIEADoTxAABIhQAOhkMAAEiNAA6HdQAASJwADol9AABIqwAOioYAAEi4AA6L0wAASMUADowlAABI0gAOjWwAAEjZAA6NwAAASOYADo8cAABI7QAOj8kAAEj6AA6ZhwAASQEADppUAABJBQAOm3UAAEkJAA6jKgAASQ0ADqOdAABJEQAOpJwAAEkVAA6l3gAASSQADqbnAABJMwAOpxAAAElAAA6pHAAASU0ADqlHAABJUQAOrcsAAElVAA6u6QAASV8ADq/nAABJdAAOsaEAAEmFAA6yegAASZQADrOTAABJowAOs9MAAEmyAA606AAASbsADrUqAABJygAOtk4AAEnTAA621wAASeIADr7sAABJ6wAOv90AAEnvAA7F7wAASfMADsaYAABJ9wAOyMMAAEn7AA7OpAAASf8ADs8XAABKAwAO0BYAAEoHAA7RWAAAShYADtJhAABKJQAO0ooAAEoyAA7UlgAASj8ADtTBAABKQwAO2UUAAEpHAA7aYwAASlEADtthAABKZgAO3RsAAEp3AA7d9AAASoYADt8NAABKlQAO300AAEqkAA7gYgAASq0ADuCkAABKvAAO4cgAAErFAA7iUQAAStQADupmAABK3QAO61cAAErhAA7xaQAASuUADvISAABK6QAO9D0AAErtAA76NgAASvEADvqpAABK9QAO+6gAAEr5AA786gAASwgADv3zAABLFwAO/hwAAEskAA8AKAAASzEADwBTAABLNQAPBNcAAEs5AA8F9QAAS0MADwbzAABLWAAPCK0AAEtpAA8JhgAAS3gADwqfAABLhwAPCt8AAEuWAA8L9AAAS58ADww2AABLrgAPDVoAAEu3AA8N4wAAS8YADxX4AABLzwAPFukAAEvTAA8c+wAAS9cADx2kAABL2wAPH88AAEvfAA8lyAAAS+MADyY7AABL5wAPJzoAAEvrAA8ofAAAS/oADymFAABMCQAPKa4AAEwWAA8rugAATCMADyvlAABMJwAPMGkAAEwrAA8xhwAATDUADzKFAABMSgAPND8AAExbAA81GAAATGoADzYxAABMeQAPNnEAAEyIAA83hgAATJEADzfIAABMoAAPOOwAAEypAA85dQAATLgAD0GKAABMwQAPQnsAAEzFAA9IjQAATMkAD0k2AABMzQAPS2EAAEzRAA9SXQAATNUAD1LQAABM2QAPU88AAEzdAA9VEQAATOwAD1YaAABM+wAPVkMAAE0IAA9YTwAATRUAD1h6AABNGQAPXP4AAE0dAA9eHAAATScAD18aAABNPAAPYNQAAE1NAA9hrQAATVwAD2LGAABNawAPYwYAAE16AA9kGwAATYMAD2RdAABNkgAPZYEAAE2bAA9mCgAATaoAD24fAABNswAPbxAAAE23AA91IgAATbsAD3XLAABNvwAPd/YAAE3DAA9+8gAATccAD39lAABNywAPgGQAAE3PAA+BpgAATd4AD4KvAABN7QAPgtgAAE36AA+E5AAATgcAD4UPAABOCwAPiZMAAE4PAA+KsQAAThkAD4uvAABOLgAPjWkAAE4/AA+OQgAATk4AD49bAABOXQAPj5sAAE5sAA+QsAAATnUAD5DyAABOhAAPkhYAAE6NAA+SnwAATpwAD5q0AABOpQAPm6UAAE6pAA+htwAATq0AD6JgAABOsQAPpIsAAE61AA+rhwAATrkAD6v6AABOvQAPrPkAAE7BAA+uOwAATtAAD69EAABO3wAPr20AAE7sAA+xeQAATvkAD7GkAABO/QAPtigAAE8BAA+3RgAATwsAD7hEAABPIAAPuf4AAE8x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ABGZVwAAV8UAEZpIAABXyQARoFoAAFfNABGhAwAAV9EAEaMuAABX1QARqeoAAFfZABGqXQAAV90AEatcAABX4QARrJ4AAFfwABGtpwAAV/8AEa3QAABYDAARr9wAAFgZABGwBwAAWB0AEbSLAABYIQARtakAAFgrABG2pwAAWEAAEbhhAABYUQARuToAAFhgABG6UwAAWG8AEbqTAABYfgARu6gAAFiHABG76gAAWJYAEb0OAABYnwARvZcAAFiuABHFrAAAWLcAEcadAABYuwARzK8AAFi/ABHNWAAAWMMAEc+DAABYxwAR1j8AAFjLABHWsgAAWM8AEdexAABY0wAR2PMAAFjiABHZ/AAAWPEAEdolAABY/gAR3DEAAFkLABHcXAAAWQ8AEeDgAABZEwAR4f4AAFkdABHi/AAAWTIAEeS2AABZQwAR5Y8AAFlSABHmqAAAWWEAEeboAABZcAAR5/0AAFl5ABHoPwAAWYgAEeljAABZkQAR6ewAAFmgABHyAQAAWakAEfLyAABZrQAR+QQAAFmxABH5rQAAWbUAEfvYAABZuQASBHEAAFm9ABIE5AAAWcEAEgXjAABZxQASByUAAFnUABIILgAAWeMAEghXAABZ8AASCmMAAFn9ABIKjgAAWgEAEg8SAABaBQASEDAAAFoPABIRLgAAWiQAEhLoAABaNQASE8EAAFpEABIU2gAAWlMAEhUaAABaYgASFi8AAFprABIWcQAAWnoAEheVAABagwASGB4AAFqSABIgMwAAWpsAEiEkAABanwASJzYAAFqjABIn3wAAWqcAEioKAABaqwASMqMAAFqvABIzFgAAWrMAEjQVAABatwASNVcAAFrGABI2YAAAWtUAEjaJAABa4gASOJUAAFrvABI4wAAAWvMAEj1EAABa9wASPmIAAFsBABI/YAAAWxYAEkEaAABbJwASQfMAAFs2ABJDDAAAW0UAEkNMAABbVAASRGEAAFtdABJEowAAW2wAEkXHAABbdQASRlAAAFuEABJOZQAAW40AEk9WAABbkQASVWgAAFuVABJWEQAAW5kAElg8AABbnQASXvgAAFuhABJfawAAW6UAEmBqAABbqQASYawAAFu4ABJitQAAW8cAEmLeAABb1AASZOoAAFvhABJlFQAAW+UAEmmZAABb6QASarcAAFvzABJrtQAAXAgAEm1vAABcGQASbkgAAFwoABJvYQAAXDcAEm+hAABcRgAScLYAAFxPABJw+AAAXF4AEnIcAABcZwAScqUAAFx2ABJ6ugAAXH8AEnurAABcgwASgb0AAFyHABKCZgAAXIsAEoSRAABcjwASi00AAFyTABKLwAAAXJcAEoy/AABcmwASjgEAAFyqABKPCgAAXLkAEo8zAABcxgASkT8AAFzTABKRagAAXNcAEpXuAABc2wASlwwAAFzlABKYCgAAXPoAEpnEAABdCwASmp0AAF0aABKbtgAAXSkAEpv2AABdOAASnQsAAF1BABKdTQAAXVAAEp5xAABdWQASnvoAAF1oABKnDwAAXXEAEqgAAABddQASrhIAAF15ABKuuwAAXX0AErDmAABdgQASt5cAAF2FABK4CgAAXYkAErkJAABdjQASuksAAF2cABK7VAAAXasAErt9AABduAASvYkAAF3FABK9tAAAXckAEsI4AABdzQASw1YAAF3XABLEVAAAXewAEsYOAABd/QASxucAAF4MABLIAAAAXhsAEshAAABeKgASyVUAAF4zABLJlwAAXkIAEsq7AABeSwASy0QAAF5aABLTWQAAXmMAEtRKAABeZwAS2lwAAF5rABLbBQAAXm8AEt0wAABecwAS4+EAAF53ABLkVAAAXnsAEuVTAABefwAS5pUAAF6OABLnngAAXp0AEufHAABeqgAS6dMAAF63ABLp/gAAXrsAEu6CAABevwAS784AAF7JABLxAgAAXt4AEvMUAABe7wAS9B8AAF7+ABL1dAAAXw0AEvXGAABfHAAS9xUAAF8lABL3aQAAXzQAEvjNAABfPQAS+XwAAF9MABMDUQAAX1UAEwR2AABfWQATC44AAF9dABMMWwAAX2EAEw76AABfZQATFbcAAF9pABMWKgAAX20AExcpAABfcQATGGsAAF+AABMZdAAAX48AExmdAABfnAATG6kAAF+pABMb1AAAX60AEyBYAABfsQATIaQAAF+7ABMi2AAAX9AAEyTqAABf4QATJfUAAF/wABMnSgAAX/8AEyecAABgDgATKOsAAGAXABMpPwAAYCYAEyqjAABgLwATK1IAAGA+ABM1JwAAYEcAEzZMAABgSwATPWQAAGBPABM+MQAAYFMAE0DQAABgVwATSCQAAGBbABNIrwAAYF8AE0niAABgYwATS2YAAGBw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bL5yvn++ib6ivqa+s76+vsi+0r7avt++7L77vwa/GL8cvyW/Lb9Fv0y/V79av2K/cr+Qv56/or+nv7i/wr/Gv9G/1r/cv+e/77/zv/e//cAAQAHAAEAKwABADsAAQBfAAEAiwABAJ8AAQC3AAEA2wABAV8AAQGPAAEBqwABAdMAAQHnAAECKwABAj8AAQJfAAECewABAq8AAQLjAAEDKwABAz8AAQNjAAEDkwABA6MAAQP/AAEEGwABBDsAAQRfAAEEnwABBMsAAQUfAAEFQwABBZ8AAQXzAAEGTwABBmsAAQbDAAEHWwABCBcAAQhHAAEIawABCIMAAQjjAAEJJwABCV8AAQmXAAEJ1wABCiMAAQp/AAEKwwABCvsAAQsnAAELRwABC2MAAQufAAEL2wABDAsAAQw/AAEMWwABDH8AAQynAAEM2wABDQsAAQ0zAAENXwABDa8AAQ4LAAEOMwABDmsAAQ6fAAEO3wABDwMAAQ8vAAEPdwABD88AAQ/vAAEQLwABEE8AARCLAAEQnwABELcAARDLAAEQ6wABEP8AARFXAAERiwABEbsAARHrAAESEwABEjsAARJnAAESlwABEssAARLvAAETFwABE0cAARNnAAETrwABE+8AARQjAAEUUwABFKMAARS/AAEU8wABFR8AARVfAAEVnwABFdcAARXzAAEWFwABFjcAARZjAAEWqwABFs8AARb/AAEXMwABF18AARejAAEX4wABGA8AARg7AAEYXwABGHMAARiXAAEYvwABGPMAARkXAAEZWwABGZ8AARnjAAEaKwABGmsAARqzAAEa+wABG0MAARt/AAEbowABG68AARvLAAEcBwABHCsAARw/AAEcUwABHGMAARx3AAEciwABHLsAARzPAAEc5wABHP8AAR0TAAEdKwABHUsAAR1vAAEdjwABHacAAR2/AAEd1wABHe8AAR4HAAEeHwABHjcAAR5PAAEeZwABHn8AAR6XAAEerwABHtcAAR8PAAEfSwABH4cAAR+3AAEf1wABH/cAASAbAAEgNwABIGsAASB/AAEgpwABINMAASD/AAEhIwABIUsAASFfAAEhowABIecAASIbAAEiUwABInMAASKTAAEitwABItMAASMPAAEjPwABI1cAASOHAAEjqwABI9sAASQHAAEkJwABJGsAASR7AAEkxwABJOMAASUfAAElSwABJYcAASWnAAEl5wABJgsAASYbAAEmSwABJmsAASazAAEm+wABJ0cAASdXAAEnawABJ7cAASgDAAEoRwABKI8AASjDAAEpBwABKTMAASlzAAEpjwABKZ8AASmvAAEpwwABKdsAASoLAAEqMwABKksAASp3AAEqmwABKsMAASrnAAErEwABK1sAAStvAAErfwABK58AASwLAAEsNwABLGMAASyXAAEstwABLQ8AAS13AAEttwABLe8AAS4PAAEuLwABLpsAAS67AAEu5wABLvcAAS8XAAEvbwABL5cAAS+7AAEwAwABMCMAATA/AAEwXwABMJ8AATDDAAEw4wABMP8AATFHAAExfwABMYMAATGPAAExnwABMbMAATHLAAEx5wABMgcAATIrAAEyUwABMn8AATKvAAEy4wABMxsAATNXAAEzlwABM9sAATQjAAE0bwABNL8AATUTAAE1awABNccAATXbAAE17wABNj8AATabAAE23wABNwMAATc3AAE3jwABN6sAATffAAE3/wABOBcAATgzAAE4WwABOJMAATjXAAE5FwABOUcAATlrAAE5nwABOcsAATnvAAE6HwABOlcAATqDAAE6twABOvMAATsrAAE7bwABO7sAATvrAAE8IwABPFsAATyrAAE88wABPRMAAT1PAAE9XwABPXsAAT2XAAE9wwABPksAAT5jAAE+swABPucAAT8DAAE/BwABPzcAAT9TAAE/twABP9cAAT/7AAFAPwABQMcAAUEXAAFBSwABQYcAAUGfAAFB7wABQhMAAUI7AAFCbwABQp8AAUKvAAFCzwABQucAAUMDAAFDGwABQy8AAUNLAAFDnwABQ8sAAUP7AAFEGwABRIsAAUS7AAFFHwABResAAUXvAAFGEwABRmcAAUaLAAFGmwABRvsAAUc3AAFHZwABR48AAUgHAAFIKwABSIcAAUkHAAFJMwABSVMAAUlvAAFJiwABSa8AAUnXAAFJ9wABSvcAAUszAAFLYwABS78AAUvvAAFMHwABTGsAAUyPAAFMkwABTQ8AAU0TAAFNRwABTXMAAU2XAAFOlwABTqMAAU9LAAFQGwABUE8AAVBvAAFQpwABUOMAAVErAAFSKwABUlcAAVJ/AAFSqwABUs8AAVL/AAFTJwABU1MAAVODAAFTswABU9sAAVPjAAFUKwABVFcAAVSDAAFUtwABVM8AAVU3AAFVRwABVYMAAVXvAAFWGwABVk8AAVaXAAFW8wABV0sAAVd/AAFXtwABV9cAAVf3AAFX/wABWAcAAVhHAAFYewABWJcAAVizAAFZBwABWVMAAVmPAAFZwwABWf8AAVpjAAFbAwABWy8AAVtPAAFbZwABW3cAAVvzAAFcNwABXHMAAVyjAAFc3wABXSMAAV0/AAFdVwABXa8AAV4TAAFeWwABXnsAAV7DAAFe8wABX0sAAV+LAAFfzwABYB8AAWBDAAFgXwABYI8AAWCzAAFgxwABYQcAAWFbAAFhpwABYdcAAWI7AAFiYwABYpMAAWK3AAFiywABYtsAAWL7AAFjJwABYysAAWNHAAFjfwABY5cAAWOrAAFjzwABZKMAAWTfAAFk/wABZTsAAWV3AAFlnwABZccAAWXvAAFmBwABZg8AAWYnAAFmOwABZmcAAWaHAAFmvwABZvcAAWc3AAFnWwABZ2MAAWd7AAFnjwABZ6sAAWe/AAFn1wABZ+sAAWgbAAFoQwABaGcAAWiTAAFoywABaN8AAWkHAAFpLwABaVcAAWmDAAFpnwABacMAAWnvAAFqBwABai8AAWo/AAFqTwABalsAAWp7AAFqgwABapcAAWqbAAFqswABascAAWrXAAFq5wABavsAAWs3AAFrUwABa7sAAWv/AAFsEwABbEcAAWxvAAFshwABbUcAAW4bAAFuHwABblsAAW7TAAFu9wABbycAAW9TAAFvfwABb6sAAW/DAAFv6wABcCcAAXBvAAFwuwABcOsAAXEHAAFxMwABcVsAAXGHAAFxpwABcccAAXHnAAFyJwABckMAAXKzAAFy4wABczMAAXNfAAFznwABc8MAAXPPAAFz6wABdCMAAXRDAAF0VwABdG8AAXSTAAF0qwABdMMAAXTbAAF08wABdQsAAXUjAAF1NwABdW8AAXWbAAF1wwABdgMAAXYvAAF2TwABdpcAAXbDAAF27wABdxsAAXdTAAF3ewABd5sAAXe/AAF32wABd/sAAXf/AAF4BwABeDcAAXhrAAF4cwABeHsAAXjPAAF4/wABeT8AAXlrAAF5cwABeXsAAXl/AAF5hwABeZMAAXnrAAF6DwABeisAAXpXAAF7fwABe+8AAXw/AAF8UwABfJMAAXy3AAF81wABfSsAAX2DAAF+mwABfwMAAX8zAAF/XwABf5MAAX/HAAGADwABgEsAAYCPAAGA3wABgXsAAYHzAAGCIwABgjcAAYJzAAGCqwABgssAAYLvAAGDHwABg2MAAYN7AAGDswABg9cAAYQvAAGEfwABhLcAAYT/AAGFGwABhWcAAYWDAAGGIwABhmMAAYZ7AAGGpwABhwcAAYdrAAGHdwABh9sAAYgHAAGIMwABiH8AAYjHAAGJHwABiUcAAYlnAAGJswABieMAAYoHAAGKMwABil8AAYqLAAGKuwABiucAAYsjAAGLUwABi7cAAYvvAAGMIwABjGMAAYyTAAGMowABjM8AAY2vAAGN7wABjhsAAY5XAAGOgwABjqMAAY7jAAGPBwABj0sAAY+XAAGPxwABj/8AAZArAAGQRwABkIMAAZD/AAGRMwABkVsAAZFrAAGRvwABkhsAAZK3AAGSvwABkzMAAZNbAAGTcwABk5cAAZPHAAGT7wABk/8AAZQrAAGUNwABlEMAAZS/AAGVGwABlVcAAZWTAAGV1wABlhcAAZZjAAGWtwABlwMAAZdPAAGXfwABl68AAZffAAGYGwABmEsAAZhzAAGYmwABmMMAAZkPAAGZJwABmWcAAZmnAAGZ+wABmgsAAZobAAGacwABmocAAZqPAAGaxwABmucAAZsDAAGbOwABm3MAAZunAAGb1wABnAsAAZxnAAGcfwABnKcAAZz3AAGdSwABnWsAAZ2XAAGdqwABnd8AAZ4LAAGeVwABnrcAAZ7bAAGfBwABnz8AAZ97AAGfwwABoAsAAaA/AAGgdwABoLsAAaD/AAGhQwABoXsAAaGrAAGh8wABoiMAAaI/AAGiYwABon8AAaKbAAGizwABovcAAaMPAAGjOwABo0MAAaOTAAGjrwABo8MAAaPPAAGj2wABpD8AAaRfAAGkewABpJcAAaS3AAGk1wABpO8AAaV/AAGlpwABpdcAAaYLAAGmJwABpk8AAaabAAGmywABpvsAAacfAAGnhwABp7sAAafXAAGn8wABqDMAAahnAAGorwABqOcAAakjAAGpfwABqaMAAam/AAGp5wABqhcAAapDAAGqcwABqpMAAarTAAGq6wABqxsAAas3AAGrYwABq3MAAauLAAGrnwABq7MAAavDAAGr4wABq/sAAawfAAGsQwABrFMAAaxnAAGsjwABrLcAAazfAAGtfwABrZcAAa3DAAGuAwABrhMAAa4zAAGuPwABrm8AAa6LAAGupwABrs8AAa7nAAGu/wABrx8AAa87AAGvuwABr9cAAa/nAAGw2wABsQMAAbEHAAGxMwABsVMAAbF7AAGxjwABsZMAAbHfAAGyDwABsh8AAbJTAAGydwABsq8AAbLDAAGy9wABsysAAbNnAAGziwABs78AAbPfAAG0DwABtKcAAbWbAAG1zwABtnsAAbaLAAG2kwABttcAAbeTAAG3swABuFcAAbh7AAG4kwABuJsAAbivAAG45wABuT8AAbl3AAG5vwABud8AAbonAAG6NwABulMAAbqXAAG6owABurMAAbrzAAG7OwABu5MAAbvXAAG7/wABvA8AAbxfAAG81wABvPsAAb0fAAG9QwABvYcAAb2vAAG9+wABvjsAAb6fAAG+5wABv1MAAb+HAAG/vwABwBsAAcBfAAHAxwABwSMAAcGjAAHB/wABwn8AAcLjAAHDawABw6sAAcP7AAHEawABxKcAAcUDAAHFOwABxZMAAcXTAAHGMwABxkcAAcaDAAHGwwABxyMAAcdvAAHH2wABx/sAAcg7AAHIewAByMsAAcj3AAHJEwAByTcAAclTAAHJfwAByYsAAcm7AAHJ/wAByscAAcrzAAHK9wAByx8AAcvfAAHMBwABzD8AAcxzAAHMgwABzJcAAcyrAAHMvwABzNMAAczrAAHNAwABzRsAAc0zAAHNRwABzV8AAc1vAAHNpwABzfcAAc4fAAHOOwABznMAAc6XAAHO1wABzvMAAc8bAAHPKwABz18AAc+HAAHPvwABz8MAAdCbAAHQswAB0MsAAdDzAAHRIwAB0U8AAdF7AAHRqwAB0dsAAdILAAHSOwAB0m8AAdKjAAHS1wAB0wsAAdM7AAHTbwAB06cAAdPbAAHT5wAB1A8AAdQ3AAHUcwAB1JcAAdTDAAHU7wAB1QsAAdUnAAHVOwAB1WcAAdWjAAHV9wAB1j8AAdafAAHWuwAB1uMAAdcTAAHXTwAB15sAAdfzAAHX+wAB2AMAAdhTAAHYrwAB2QsAAdlzAAHZwwAB2h8AAdovAAHcIwAB3EcAAdx3AAHckwAB3LsAAdzvAAHdFwAB3UsAAd1zAAHdpwAB3c8AAd4DAAHeLwAB3mcAAd6TAAHeywAB3vcAAd8vAAHfWwAB35MAAd+7AAHf7wAB4BsAAeBTAAHggwAB4L8AAeDrAAHhIwAB4UsAAeF/AAHhqwAB4eMAAeIPAAHiRwAB4nMAAeKrAAHi1wAB4w8AAeM/AAHjewAB46sAAePnAAHkFwAB5FMAAeSDAAHkvwAB5OsAAeUjAAHlUwAB5Y8AAeXDAAHmAwAB5jsAAeZ3AAHmswAB5u8AAecrAAHnawAB56sAAefrAAHoKwAB6GcAAeinAAHo6wAB6QMAAeknAAHpewAB6Y8AAenjAAHqGwAB6lcAAeqzAAHrHwAB63cAAevPAAHsCwAB7EsAAeyrAAHtGwAB7XMAAe3LAAHuBwAB7kcAAe6nAAHvFwAB728AAe/HAAHwAwAB8EMAAfCjAAHxEwAB8WsAAfHDAAHx/wAB8j8AAfKfAAHzDwAB82sAAfPHAAH0BwAB9EsAAfS/AAH1IwAB9X8AAfXbAAH2GwAB9l8AAfbDAAH3NwAB95MAAffvAAH4LwAB+HMAAfjnAAH5SwAB+acAAfoDAAH6QwAB+ocAAfrfAAH7NwAB+3MAAfuzAAH8EwAB/IMAAfzfAAH9OwAB/XsAAf2/AAH+IwAB/pcAAf73AAH/VwAB/5sAAf/jAAIANwACAHcAAgDbAAIBJwACAZsAAgHTAAIB9wACAgcAAgJDAAICZwACApMAAgK7AAIC3wACAwsAAgM/AAIDgwACA78AAgPzAAIEIwACBHMAAgTHAAIFEwACBVcAAgWjAAIF8wACBksAAganAAIG6wACBx8AAgdXAAIHawACB3sAAgeHAAIHpwACB7MAAgfTAAIH1wACB/cAAghXAAIIrwACCPMAAgkzAAIJcwACCbcAAgnLAAIJ/wACChcAAgo7AAIKVwACCncAAgp7AAIKqwACCrcAAgrTAAIK+wACCx8AAgtnAAILjwACC5cAAguzAAIL0wACDD8AAgxjAAIMkwACDMsAAgz3AAINMwACDUsAAg2HAAINxwACDdsAAg4bAAIOOwACDmcAAg6HAAIOywACDw8AAg83AAIPZwACD6MAAg/HAAIP5wACECcAAhBbAAIQxwACEP8AAhEfAAIRLwACEWcAAhGvAAISAwACEkcAAhKXAAITBwACE0sAAhOTAAIT3wACE/cAAhQ3AAIUcwACFMMAAhT/AAIVawACFecAAhZPAAIWmwACFucAAhcfAAIXRwACF48AAhfHAAIYIwACGHcAAhjDAAIY8wACGR8AAhmTAAIZ+wACGhsAAhpvAAIauwACGzMAAhs7AAIbcwACG48AAhvbAAIb+wACHEsAAhy/AAIdWwACHYMAAh3XAAIeCwACHmsAAh6nAAIfDwACH08AAh+7AAIf/wACIG8AAiCDAAIgxwACIQsAAiF7AAIhnwACIe8AAiIfAAIiewACIp8AAiLvAAIjNwACI6sAAiPXAAIkLwACJF8AAiS/AAIk/wACJWsAAiWPAAIl4wACJgcAAiZXAAImnwACJw8AAidHAAInqwACKB8AAii7AAIo9wACKV8AAil/AAIpzwACKd8AAiofAAIqWwACKsMAAisPAAIrhwACK+cAAixrAAIsuwACLS8AAi2HAAIuBwACLoMAAi8jAAIvawACL98AAjAfAAIwiwACMN8AAjFbAAIxlwACMf8AAjIrAAIygwACMs8AAjNHAAIzgwACM+sAAjRTAAI03wACNVMAAjXrAAI2QwACNmsAAjavAAI23wACNw8AAjd/AAI4JwACOFsAAjhjAAI4awACOI8AAjivAAI4ywACOO8AAjkvAAI5awACOZ8AAjnLAAI55wACOe8AAjn3AAI6GwACOocAAjqnAAI7CwACO2cAAjvDAAI78wACPC8AAjxTAAI8gwACPKcAAjzTAAI89wACPRcAAj1HAAI9fwACPYcAAj37AAI+MwACPnsAAj6vAAI+4wACPxsAAj9TAAI/lwACP8cAAj/vAAJAEwACQH8AAkC3AAJA5wACQQ8AAkFTAAJBlwACQcMAAkHzAAJCGwACQocAAkK3AAJC+wACQz8AAkNrAAJDnwACQ+cAAkQfAAJENwACRLsAAkTnAAJFLwACRW8AAkWjAAJF5wACRisAAkZPAAJGdwACRpMAAkarAAJG6wACRzsAAkf3AAJIewACSIMAAkkbAAJJmwACSe8AAkp3AAJLNwACS78AAkxbAAJM3wACTSsAAk17AAJNywACTfcAAk4jAAJOPwACTo8AAk7jAAJPXwACT3cAAlA7AAJQ3wACUW8AAlG/AAJSOwACUt8AAlNvAAJTfwACU+MAAlQHAAJULwACVEsAAlSDAAJUiwACVNcAAlTrAAJVAwACVRsAAlUzAAJVSwACVWMAAlVvAAJVewACVYcAAlWTAAJVnwACVaMAAlW7AAJV0wACVeMAAlX3AAJWNwACVksAAlZTAAJWfwACVqsAAlbjAAJaQwACWosAAl5XAAJehwACYlcAAmJ/AAJjRwACY5MAAmOjAAJjqwACY/sAAmQvAAJkWwACZH8AAmSfAAJkpwACZMMAAmTbAAJlKwACZUsAAmWvAAJmTwACZoMAAmbTAAJnFwACZxsAAmcfAAJnOwACZ1sAAmd3AAJnqwACZ+cAAmhDAAJogwACaI8AAmi3AAJo3wACaTMAAmmnAAJp+wACakcAAmprAAJqiwACaxcAAmvDAAJr4wACbCMAAmxDAAJsawACbLcAAmz7AAJtWwACbY8AAm2nAAJtvwACbg8AAm6DAAJuowACbr8AAm7rAAJvNwACb6cAAm/XAAJwOwACcMMAAnD/AAJxLwACcVcAAnF7AAJxtwACcf8AAnI/AAJydwACcocAAnLDAAJy/wACc1cAAnOLAAJz3wACdEsAAnSLAAJ0qwACdPMAAnU/AAJ1awACddMAAnYLAAJ2PwACdlsAAna/AAJ3OwACd3MAAnerAAJ4KwACeGcAAniDAAJ4twACePMAAnkfAAJ5UwACebcAAnofAAJ6hwACevsAAnsnAAJ7iwACfA8AAnw3AAJ8SwACfGsAAnyHAAJ8twACfNsAAn0DAAJ9LwACfUMAAn1nAAJ9jwACfacAAn3XAAJ+EwACflMAAn5rAAJ+jwACfscAAn7zAAJ/KwACfz8AAn97AAJ/swACf9MAAn/zAAKAIwACgEcAAoCXAAKA3wACgQsAAoE/AAKBZwACgXsAAoGXAAKBxwACge8AAoIPAAKCMwACgjcAAoJ/AAKCxwACgtcAAoMjAAKDVwACg28AAoO7AAKEEwAChD8AAoRnAAKEbwAChIsAAoS3AAKE8wAChScAAoVzAAKFxwAChhsAAoZ3AAKGswAChtMAAobrAAKHBwAChxsAAocvAAKHUwACh3cAAoefAAKHxwACh/cAAogzAAKIbwACiLsAAoj/AAKJLwACiVMAAomDAAKJswACihcAAorrAAKLIwACi3cAAou3AAKLzwACjAcAAowfAAKMSwACjH8AAoyjAAKMxwACjQcAAo0jAAKNTwACjW8AAo2rAAKN3wACji8AAo53AAKOwwACj18AApAXAAKQXwACkLMAApEjAAKRLwACkhcAApInAAKSewACkr8AApLnAAKTSwACk18AApOHAAKT4wAClA8AApRDAAKUWwAClI8AApSnAAKUwwAClOMAApVLAAKVwwAClmMAApaTAAKWywACl0sAApfLAAKX8wACmBsAAphbAAKYcwACmLcAApjnAAKZNwACmW8AApl/AAKZnwACma8AApnvAAKaOwACmlMAApp/AAKavwACmv8AApsrAAKbRwACm28AApubAAKbywACnB8AApwzAAKcUwACnGsAApyTAAKc9wACnVsAAp3LAAKeVwACnpsAAp8LAAKfPwACn2cAAp+PAAKfuwACn98AAqAzAAKgWwACoIcAAqC/AAKg2wACoQMAAqErAAKhSwACoXMAAqGbAAKhwwACoe8AAqIDAAKiKwAColMAAqKTAAKjAwACoxcAAqM/AAKjXwACo4cAAqPHAAKj1wACpAcAAqRPAAKkcwACpKcAAqTLAAKlHwACpSsAAqVDAAKlfwACpY8AAqWjAAKltwACpcsAAqXPAAKl5wACpf8AAqYjAAKmSwACplMAAqZbAAKmnwACprcAAqbvAAKm+wACpw8AAqcnAAKnPwACp2sAAqdzAAKnfwACp4cAAqePAAKnlwACp58AAqfHAAKn8wACqDcAAqhTAAKohwACqKMAAqjDAAKo7wACqRcAAqk7AAKpYwACqaMAAqm7AAKp1wACqhsAAqorAAKqbwACqnsAAqrDAAKq1wACqx8AAqs3AAKrfwACq4cAAqvLAAKr5wACrC8AAqxDAAKsiwACrLMAAqz3AAKtBwACrRsAAq0nAAKtNwACrW8AAq2LAAKtowACrcsAAq3bAAKt+wACrgsAAq4rAAKuOwACrlsAAq5vAAKukwACrqcAAq7LAAKu3wACrwMAAq8XAAKvOwACr0sAAq9rAAKviwACr7MAAq/HAAKwAwACsA8AArAbAAKwNwACsEMAArBPAAKwXwACsG8AArB/AAKwjwACsJsAArDLAAKw+wACsUsAArFbAAKxjwACsbsAArHXAAKx9wACsgcAArIrAAKyPwACsmcAArKHAAKyqwACsrcAArL7AAKzUwACs48AArPfAAK0RwACtIMAArSbAAK0vwACtOMAArUbAAK1RwACtWsAArWzAAK1zwACtf8AArYfAAK2cwACtrsAArbPAAK29wACtxcAArc3AAK3XwACt4sAArfHAAK37wACuCMAArhrAAK4xwACuRcAArk/AAK5nwACuccAAroLAAK6KwACuk8AArqDAAK6vwACuucAArsHAAK7JwACu4sAAruzAAK7zwACu+sAArwHAAK8QwACvHMAArynAAK8zwACvOsAAr0PAAK9PwACvXMAAr2nAAK9zwACvgMAAr4rAAK+QwACvmsAAr63AAK+7wACv0cAAr+LAAK/uwACv88AAsADAALAJwACwEcAAsBnAALAhwACwK8AAsDPAALA8wACwSMAAsFPAALBiwACwbsAAsIDAALCVwACwsMAAsMvAALDXwACw8cAAsP/AALEIwACxDcAAsR/AALEvwACxRcAAsVDAALFewACxasAAsXXAALF7wACxhcAAsaPAALG4wACxvsAAscvAALHZwACx7cAAsf3AALIDwACyF8AAsi3AALI6wACySMAAslbAALJjwACyc8AAsqLAALK3wACyxsAAss/AALLkwACy88AAsv3AALMMwACzGsAAsyrAALM3wACzPcAAs0LAALNHwACzTcAAs1bAALNjwACzasAAs3bAALN6wACzicAAs4zAALORwACzmMAAs57AALOqwACzvsAAs8jAALPTwACz6MAAs/XAALQBwAC0HcAAtCPAALQ2wAC0PMAAtEnAALRZwAC0ZMAAtG/AALR6wAC0iMAAtJrAALSmwAC0tsAAtMHAALTXwAC04cAAtPbAALUMwAC1LsAAtT/AALVVwAC1csAAtZXAALWhwAC1ssAAtcrAALXowAC19MAAtgPAALYWwAC2LsAAtkDAALZYwAC2cMAAtoLAALafwAC2usAAttTAALbpwAC3A8AAtxbAALcowAC3M8AAtz7AALdJwAC3U8AAt3LAALdzwAC3kcAAt6jAALfGwAC318AAt/bAALgUwAC4McAAuEPAALhWwAC4YcAAuGvAALiQwAC4p8AAuMDAALjYwAC498AAuRXAALkjwAC5LMAAuTTAALlGwAC5VcAAuWvAALl9wAC5lsAAuaTAALm+wAC5wcAAudPAALnmwAC5+sAAuhvAALovwAC6ScAAumPAALp4wAC6kMAAup3AALqywAC6vcAAusXAALrPwAC64cAAuu3AALr+wAC7BsAAuxPAALsfwAC7KsAAuzXAALtGwAC7XsAAu2vAALt8wAC7h8AAu43AALudwAC7o8AAu7DAALu6wAC7w8AAu8rAALvRwAC73cAAu+fAALv2wAC8BsAAvBLAALwbwAC8JcAAvDXAALw/wAC8T8AAvGfAALyXwAC8p8AAvLbAALy/wAC8wcAAvNLAALzlwAC898AAvRDAAL0owAC9P8AAvVPAAL1mwAC9dcAAvYbAAL2ZwAC9rcAAvcDAAL3QwAC948AAvfnAAL4GwAC+LMAAvkDAAL5VwAC+acAAvnvAAL6VwAC+pMAAvqzAAL7AwAC+0cAAvtzAAL7vwAC++cAAvwzAAL8TwAC/KMAAv0TAAL9YwAC/c8AAv4rAAL+owAC/tMAAv7/AAL/KwAC/1MAAv+TAAMAIwADAGMAAwC7AAMA6wADARcAAwFfAAMBiwADAbMAAwHDAAMCTwADAlsAAwLHAAMC0wADAvcAAwMPAAMDQwADA4cAAwO3AAMD2wADBBMAAwRHAAMEewADBNcAAwUXAAMFXwADBacAAwXbAAMGCwADBkMAAwZ/AAMGtwADBtMAAwb/AAMHLwADB1sAAwhPAAMIawADCIcAAwizAAMI0wADCOsAAwjzAAMJBwADCVsAAwmrAAMJtwADChsAAwprAAMKfwADCpMAAwq3AAMLHwADC0MAAwurAAML3wADDAcAAwwjAAMMUwADDKsAAwzPAAMM5wADDSMAAw2TAAMNywADDhMAAw6XAAMOuwADDwMAAw8zAAMPZwADD6cAAw+7AAMP1wADEAsAAxA3AAMQQwADENsAAxEjAAMRTwADEXsAAxG3AAMR3wADEgcAAxJHAAMSmwADEucAAxNnAAMTqwADE/cAAxQjAAMUMwADFFsAAxSDAAMUrwADFPcAAxUjAAMVUwADFX8AAxWvAAMV2wADFgsAAxY/AAMWcwADFq8AAxbjAAMXHwADF0cAAxeHAAMXpwADF+sAAxgLAAMYTwADGHMAAxi7AAMY3wADGScAAxlLAAMZkwADGbcAAxn/AAMaJwADGnMAAxqbAAMa5wADGwsAAxtTAAMbdwADG78AAxvnAAMcMwADHFsAAxynAAMcywADHRMAAx03AAMdfwADHacAAx3zAAMeGwADHmcAAx6TAAMe4wADHw8AAx9fAAMfiwADH9sAAyAHAAMgVwADIIsAAyDjAAMhFwADIW8AAyGbAAMh6wADIhcAAyJnAAMimwADIvMAAyMnAAMjfwADI7MAAyPXAAMkHwADJKsAAyWDAAMlpwADJjcAAycTAAMnOwADJ+cAAyjfAAMpIwADKbMAAyqPAAMqtwADKvcAAys3AAMrywADLKsAAyzXAAMtGwADLV8AAy3vAAMuywADLvMAAy8zAAMvcwADMAcAAzDnAAMxEwADMVcAAzGbAAMyKwADMwcAAzMvAAMzbwADM68AAzRDAAM1IwADNU8AAzWTAAM11wADNnsAAzd3AAM3pwADN+8AAzg3AAM42wADOdcAAzoHAAM6TwADOpcAAztPAAM7hwADO9cAAzwnAAM8zwADPP8AAz1HAAM9jwADPkcAAz5/AAM+zwADPx8AAz/PAANAywADQRMAA0HHAANCxwADQxMAA0PjAANE/wADRWcAA0YbAANHGwADR2cAA0gfAANJIwADSXMAA0onAANLJwADS3MAA0wrAANNLwADTX8AA04zAANPMwADT38AA1A3AANROwADUYsAA1JTAANTcwADU8cAA1SPAANVrwADVgMAA1bfAANXOwADWAcAA1hbAANZNwADWZMAA1m7AANZ7wADWi8AA1pjAANalwADWssAA1rrAANbJwADW2MAA1ujAANbzwADXAsAA1xTAANckwADXKcAA1zvAANdDwADXVsAA11vAANdqwADXbcAA13rAANd/wADXjsAA15zAANeqwADXq8AA17nAANe6wADXyMAA19DAANflwADX9sAA2ADAANgUwADYFsAA2BvAANghwADYL8AA2DTAANg6wADYSMAA2E3AANhTwADYYcAA2GbAANhswADYesAA2IfAANiUwADYosAA2KzAANjAwADYzsAA2ObAANjuwADY+MAA2QPAANkOwADZGcAA2STAANkwwADZPMAA2UjAANlUwADZZ8AA2XbAANmIwADZlMAA2aDAANmswADZuMAA2b3AANnNwADZ0sAA2eLAANnnwADZ98AA2fzAANoMwADaFcAA2h/AANovwADaOMAA2kLAANpSwADaW8AA2mXAANp1wADafsAA2ojAANqYwADansAA2qzAANq1wADav8AA2snAANrWwADa5sAA2vPAANsAwADbDcAA2xzAANspwADbOMAA20bAANtUwADbacAA23fAANuFwADbksAA25/AANutwADbv8AA28XAANvKwADb1sAA2+TAANvuwADcCcAA3CDAANw7wADcT8AA3HvAANy6wADcyMAA3OfAAN0UwADdVMAA3WPAAN2DwADdt8AA3f7AAN4UwADeO8AA3mjAAN6owADet8AA3tfAAN8FwADfRsAA31bAAN93wADfpMAA3+TAAN/zwADgE8AA4EHAAOCCwADgksAA4LPAAODgwADhIMAA4S/AAOFPwADhfcAA4b7AAOHOwADh78AA4iHAAOJpwADiesAA4pzAAOLOwADjFsAA4yfAAONJwADjgMAA45PAAOO3wADj6sAA4/vAAOQdwADkVMAA5GfAAOSLwADkmMAA5LbAAOS9wADkx8AA5M7AAOTWwADk3sAA5ObAAOTswADk9MAA5PzAAOUFwADlDsAA5RbAAOUewADlJ8AA5TDAAOU4wADlQMAA5UnAAOVSwADlXMAA5WbAAOVwwADlesAA5YbAAOWSwADln8AA5a7AAOW0wADlwcAA5cTAAOXKwADlzsAA5dbAAOXbwADl5MAA5ejAAOXzwADl/sAA5gbAAOYVwADmLMAA5kTAAOZUwADmc8AA5nzAAOaUwADmnsAA5tDAAObpwADnAcAA5xrAAOcjwADnO8AA50XAAOdewADnacAA54PAAOeOwADnqMAA57XAAOfRwADn3MAA5/bAAOgDwADoH8AA6CjAAOgswADoMMAA6DTAAOg4wADoPMAA6EDAAOhEwADoSMAA6EzAAOhQwADoVMAA6FjAAOhcwADoYMAA6GTAAOhowADobMAA6HDAAOh0wADoeMAA6HzAAOiAwADohMAA6IjAAOiMwADokMAA6JTAAOiYwADonMAA6KDAAOikwADoqMAA6KzAAOiwwADotMAA6LjAAOi8wADowMAA6MTAAOjIwADozMAA6NDAAOjUwADo2MAA6NzAAOjgwADo5MAA6OjAAOjswADo8MAA6PTAAOj4wADo/MAA6QDAAOkEwADpCMAA6QzAAOkQwADpFMAA6RjAAOkcwADpIMAA6STAAOkowADpLMAA6TDAAOk0wADpOMAA6TzAAOlAwADpRMAA6UjAAOlMwADpUMAA6VTAAOlYwADpXMAA6WDAAOlkwADpaMAA6WzAAOlwwADpdMAA6XjAAOl8wADpgMAA6YTAAOmIwADpjMAA6ZDAAOmUwADpmMAA6ZzAAOmgwADppMAA6ajAAOmswADpsMAA6bTAAOm4wADpvMAA6cDAAOnEwADpyMAA6czAAOnQwADp1MAA6djAAOncwADp4MAA6eTAAOnowADp7MAA6fDA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AQCMwAEAlsABAKHAAQCswAEAs8ABAMzAAQDTwAEA2MABAOHAAQDkwAEA68ABAO3AAQD+wAEBD8ABARLAAQEYwAEBLcABAT7AAQFHwAEBWcABAXPAAQGrwAEBtsABAcDAAQHMwAEB3MABAezAAQH4wAECBcABAg7AAQIYwAECIsABAi3AAQI7wAECRcABAk7AAQJYwAECZMABAnfAAQKLwAECncABArDAAQK8wAECx8ABAtbAAQLgwAEC8MABAwPAAQMLwAEDF8ABAyDAAQMpwAEDN8ABA0vAAQNYwAEDZcABA3fAAQOPwAEDn8ABA7TAAQPJwAED3cABA+nAAQP1wAEECcABBCDAAQQuwAEERMABBE3AAQRZwAEEbMABBHnAAQSHwAEElMABBJ3AAQSmwAEEr8ABBLjAAQTEwAEEzcABBNPAAQThwAEE8MABBP/AAQUPwAEFHcABBSnAAQUxwAEFN8ABBUPAAQVUwAEFX8ABBXTAAQWBwAEFhcABBZ/AAQWtwAEFvMABBczAAQXlwAEF+8ABBmTAAQZmwAEGe8ABBn3AAQZ+wAEGf8ABBovAAQaYwAEGosABBq3AAQbAwAEG18ABBuLAAQbtwAEG/sABBwnAAQcQwAEHHsABByrAAQdOwAEHVsABB13AAQdhwAEHbcABB4nAAQeVwAEHnMABB6LAAQeowAEHvsABB9zAAQfxwAEIAsABCA7AAQgawAEII8ABCCbAAQg+wAEIXsABCGnAAQhvwAEIecABCInAAQiOwAEIk8ABCKLAAQiswAEIt8ABCMLAAQjLwAEI0sABCOPAAQj/wAEJBsABCRTAAQkiwAEJMcABCVXAAQljwAEJgMABCYvAAQmXwAEJn8ABCavAAQm2wAEJvMABCcjAAQnUwAEJ28ABCfHAAQn+wAEKCMABChvAAQoowAEKNsABCjvAAQpKwAEKU8ABClzAAQp2wAEKhMABCpbAAQqcwAEKpcABCqrAAQqzwAEKv8ABCszAAQrUwAEK7sABCwfAAQsWwAELIcABCy7AAQs3wAELPcABC0zAAQtVwAELZMABC3DAAQt8wAELjsABC5rAAQuswAELvMABC8XAAQv0wAEMH8ABDCzAAQw5wAEMR8ABDFrAAQxowAEMfMABDI7AAQyewAEMqcABDLjAAQzIwAEM1cABDOnAAQzxwAENCcABDRPAAQ0pwAENNMABDVHAAQ1qwAENfcABDYvAAQ2fwAENscABDcDAAQ3QwAEN2MABDevAAQ37wAEODsABDiLAAQ43wAEOR8ABDk7AAQ5cwAEOY8ABDnPAAQ6RwAEOq8ABDr7AAQ7BwAEOyMABDtLAAQ7kwAEO98ABDwzAAQ8ewAEPKMABDzTAAQ8+wAEPRMABD03AAQ9PwAEPWcABD3PAAQ+EwAEPi8ABD5jAAQ+hwAEPtsABD8XAAQ/hwAEP5cABD/LAAQ/4wAEQCcABEBvAARAiwAEQKcABEDrAARBDwAEQT8ABEFLAARBVwAEQcsABEIHAARCLwAEQncABEKDAARClwAEQtsABEMPAARDVwAEQ5MABEPTAAREBwAERDMABERvAAREzwAERS8ABEVrAARGKwAERmsABEcvAARHcwAER4MABEe7AARH1wAER+MABEgzAARIUwAESG8ABEiTAARItwAESNcABEknAARJSwAESaMABEnPAARKAwAESi8ABEqvAARLDwAESx8ABEtjAARL0wAETEsABEz3AARNewAETjMABE6TAAROswAETxsABE9bAARPkwAET9MABFAjAARQawAEUMsABFD/AARRDwAEUS8ABFFrAARRswAEUjsABFJbAARSswAEUx8ABFPLAART7wAEVDsABFSbAARVOwAEVWMABFWzAARWFwAEVrsABFbvAARXLwAEV08ABFePAARX0wAEWFMABFjXAARZJwAEWU8ABFl3AARZowAEWbMABFnTAARZ3wAEWe8ABFoPAARaGwAEWi8ABFpTAARaYwAEWn8ABFqvAARaxwAEWvMABFsnAARbXwAEW3MABFufAARbzwAEXBcABFxXAARcqwAEXNcABFz7AARdKwAEXUsABF1/AAReEwAEXnMABF7nAARfRwAEX4cABF+/AARgDwAEYE8ABGCLAARg+wAEYX8ABGHPAARiCwAEYlcABGKDAARizwAEYx8ABGOPAARkFwAEZIsABGS7AARlCwAEZVsABGXXAARmYwAEZs8ABGc7AARnnwAEaBsABGhzAARo2wAEaVMABGnPAARqOwAEamsABGqHAARqqwAEascABGsXAARrOwAEa2MABGuPAARrrwAEa8sABGv7AARsLwAEbEsABGxzAARsnwAEbLsABGznAARtBwAEbS8ABG1XAARtkwAEbbcABG3vAARuQwAEbmsABG6fAARu2wAEbz8ABG9zAARvrwAEcBMABHBXAARwowAEcRcABHE3AARxWwAEcasABHHLAARx7wAEcj8ABHJvAARyowAEcwMABHMvAARzYwAEc78ABHPrAAR0HwAEdHsABHS3AAR0+wAEdWcABHWnAAR16wAEdlsABHanAAR2+wAEd3cABHejAAR30wAEeC8ABHhjAAR4mwAEeP8ABHk7AAR5ewAEeecABHoLAAR6KwAEek8ABHp7AAR6lwAEesMABHr3AAR7KwAEe18ABHu3AAR8DwAEfDsABHx7AAR8uwAEfOcABHz/AAR9CwAEfS8ABH1TAAR9jwAEfbsABH3XAAR9/wAEfksABH6XAAR+rwAEftcABH7/AAR/VwAEf38ABH+3AASABwAEgGcABIB/AASAmwAEgMMABIDjAASBDwAEgS8ABIFXAASBdwAEgZMABIHrAASCLwAEglsABIKrAASC1wAEgycABINTAASDowAEg78ABIP/AASEPwAEhHMABISzAASEzwAEhQ8ABIVzAASF+wAEhpsABIbnAASHDwAEh9MABIhzAASIiwAEiMsABIk/AASJcwAEiZsABInPAASKCwAEissABIuzAASL2wAEi/sABIyTAASMrwAEjOsABI0XAASNSwAEjXsABI2HAASN5wAEjjsABI5bAASOjwAEjq8ABI7TAASO8wAEjyMABI9TAASPkwAEj8cABI/nAASQEwAEkCMABJBbAASQewAEkJ8ABJDjAASRBwAEkWcABJGjAASRxwAEkecABJIjAASSXwAEkoMABJK3AASTDwAEk5cABJPrAASUAwAElCMABJQzAASUcwAElIcABJTLAASU4wAElSsABJVPAASVdwAElcsABJYHAASWSwAElrcABJbXAASW7wAElzcABJdbAASXfwAEl9MABJgLAASYRwAEmK8ABJjzAASZOwAEma8ABJm/AASZ5wAEmgcABJovAASaXwAEmp8ABJrbAASbJwAEm1cABJuXAASb0wAEnB8ABJw/AAScXwAEnIMABJyvAASc3wAEnR8ABJ1LAASdhwAEnbcABJ33AASeKwAEnksABJ6PAASezwAEnv8ABJ8zAASfbwAEn58ABJ/bAASgCwAEoC8ABKBPAASgZwAEoI8ABKDbAAShAwAEoQsABKE3AAShYwAEoZ8ABKHTAASiDwAEoicABKJHAASihwAEoq8ABKLXAASi+wAEo0MABKOTAASjrwAEo9cABKP/AASkSwAEpF8ABKSLAASkrwAEpNcABKTrAASlQwAEpV8ABKW3AASl4wAEplsABKajAASmzwAEpvsABKc3AASnYwAEp58ABKe3AASn/wAEqCsABKhvAASoqwAEqNMABKkvAASpWwAEqXcABKmjAASp3wAEqjMABKpHAASqawAEqvsABKs7AASrswAEq+8ABKw7AASspwAErNsABK0fAAStNwAErY8ABK3PAASuHwAErpcABK8bAASvTwAEr5MABLADAASwQwAEsJMABLEjAASxRwAEsW8ABLGnAASx3wAEsk8ABLJvAASyqwAEssMABLLrAASzgwAEs58ABLPPAAS0HwAEtGMABLTHAAS1BwAEtTcABLVfAAS1rwAEtf8ABLZfAAS2uwAEtt8ABLcHAAS3SwAEt4cABLezAAS37wAEuCsABLhrAAS44wAEuSMABLlfAAS5pwAEueMABLoXAAS6RwAEun8ABLqHAAS6swAEuucABLsTAAS7rwAEu/8ABLwPAAS8TwAEvHMABLyXAAS86wAEvPsABL0LAAS9SwAEvW8ABL2LAAS9qwAEvdsABL4PAAS+QwAEvlcABL57AAS+lwAEvrcABL7XAAS/GwAEvz8ABL9jAAS/gwAEv8cABL/XAAS/6wAEwCcABMBzAATAwwAEwRMABMFTAATBewAEwbsABMHnAATB+wAEwgcABMITAATCHwAEwisABMI3AATCQwAEwk8ABMJbAATCdwAEwpMABMK3AATC9wAEw2MABMO7AATD7wAExDcABMRfAATE0wAExP8ABMUbAATFQwAExVcABMVrAATF+wAExh8ABMZPAATGdwAExrcABMbvAATHiwAEx78ABMf/AATIPwAEyIcABMi3AATJHwAEySMABMl7AATJvwAEyd8ABMn3AATKHwAEyjcABMpjAATKiwAEysMABMrrAATLJwAEy18ABMuPAATLzwAEzBMABMxnAATMywAEzOsABM0HAATNGwAEzWMABM37AATOKwAEzmMABM6fAATO5wAEzwcABM8vAATPYwAEz88ABNBDAATQfwAE0JcABNDfAATQ9wAE0Q8ABNFXAATRbwAE0bcABNHHAATR1wAE0hcABNIjAATSLwAE0msABNKvAATS2wAE0vMABNNHAATTowAE06sABNP/AATUNwAE1JMABNTbAATVLwAE1YsABNXXAATWAwAE1lcABNZjAATWqwAE1scABNbvAATXPwAE2BcABNjTAATZIwAE2WMABNmfAATZ2wAE2e8ABNoLAATaKwAE2lcABNprAATa/wAE2y8ABNujAATb1wAE3E8ABNx3AATc4wAE3RMABN2HAATdowAE3c8ABN4/AATebwAE3uMABN77AATfJwAE35sABN/XAATf4wAE4AsABOBXAATghwAE4MsABODvAAThRwAE4XcABOGbAAThwwAE4eMABOIHAATiSwAE4m8ABOKXAATipwAE4s8ABOMPAATjPwAE42cABOOLAATjwwAE5AsABORbAATkewAE5J8ABOTfAATlFwAE5U8ABOWrAATl9wAE5jsABOaPAATm2wAE5wMABOcPAATnNwAE50MABOdvAATnlwAE568ABOfXAATn5wAE6C8ABOhvAATokwAE6JsABOjHAATpFwAE6U8ABOl/AATprwAE6d8ABOn3AATqMwAE6msABOq3AATrBwAE6ycABOt3AATsEwAE7I8ABOy/AATtBwAE7U8ABO17AATtnwAE7d8ABO5XAATufwAE7rMABO7jAATvDwAE7zcABO9fAATvhwAE768ABO/PAATv7wAE8E8ABPBzAATwowAE8N8ABPEPAATxNwAE8X8ABPG/AATyCwAE8ksABPKXAATyuwAE8usABPMfAATzPwAE828ABPOjAATz2wAE9BMABPRLAAT0gwAE9KMABPTXAAT09wAE9RcABPVHAAT1lwAE9eMABPYfAAT2WwAE9pcABPbjAAT3KwAE928ABPezAAT37wAE+C8ABPhzAAT4lwAE+L8ABPjnAAT5EwAE+TsABPljAAT5iwAE+Z8ABPm7AAT6EwAE+osABPrTAAT7GwAE+3cABPvHAAT73wAE/EMABPyDAAT8qwAE/O8ABP1nAAT+BwAE/n8ABP8fAAT/ewAE//MABQBHAAUAtwAFARsABQGbAAUB/wAFAn8ABQK7AAUDEwAFA3cABQPXAAUEBwAFBCMABQRfAAUEjwAFBLcABQTTAAUE5wAFBPsABQUzAAUFSwAFBX8ABQXXAAUGJwAFBkMABQZXAAUGlwAFBwcABQd7AAUH4wAFCD8ABQh/AAUIkwAFCLcABQjTAAUJAwAFCSsABQlfAAUJcwAFCbsABQn7AAUKLwAFClsABQp3AAUKjwAFCsMABQsLAAULSwAFC5MABQvXAAUMFwAFDGcABQy3AAUNEwAFDT8ABQ1zAAUNtwAFDeMABQ4fAAUOPwAFDosABQ7DAAUPDwAFD1MABQ9zAAUPvwAFD/cABRA3AAUQkwAFEMsABRDrAAURBwAFERsABRE3AAURSwAFEW8ABRGLAAURrwAFEcsABRHfAAUR6wAFEg8ABRIrAAUScwAFEqcABRLPAAUTCwAFE2MABROXAAUT3wAFFCsABRUPAAUVMwAFFWsABRWvAAUV7wAFFiMABRY3AAUWTwAFFm8ABRaDAAUWlwAFFqsABRcXAAUXbwAFF88ABRhLAAUYowAFGM8ABRkrAAUZdwAFGfMABRpDAAUakwAFGwMABRszAAUbawAFG7cABRvjAAUcLwAFHEsABRxXAAUcgwAFHOcABR0TAAUdRwAFHWcABR2jAAUd8wAFHgcABR43AAUeZwAFHrMABR7jAAUfLwAFH0cABR97AAUfiwAFH7cABR/nAAUf/wAFIBcABSAzAAUgTwAFIG8ABSDDAAUhBwAFITMABSFPAAUhlwAFIcMABSIbAAUiQwAFIlsABSKbAAUiswAFIvsABSMrAAUjXwAFI78ABSPfAAUj/wAFJE8ABSSTAAUk3wAFJVMABSVvAAUliwAFJacABSXbAAUmDwAFJicABSY/AAUmWwAFJncABSaPAAUmpwAFJsMABSbfAAUm+wAFJxcABScvAAUnRwAFJ18ABSd3AAUnkwAFJ68ABSfLAAUn5wAFKAMABSgfAAUoOwAFKFcABShzAAUojwAFKKsABSjHAAUo4wAFKP8ABSkbAAUpNwAFKVMABSlvAAUpiwAFKacABSnDAAUp3wAFKfsABSoTAAUqKwAFKkcABSpjAAUqfwAFKpsABSq/AAUq4wAFKv8ABSsbAAUrOwAFK1cABStzAAUriwAFK6MABSvrAAUsMwAFLH8ABSzHAAUtEwAFLV8ABS2nAAUt7wAFLjsABS6HAAUu0wAFLx8ABS9rAAUvtwAFMAMABTBPAAUwmwAFMOcABTEzAAUxfwAFMcsABTITAAUyXwAFMqsABTL/AAUzSwAFM5sABTPnAAU0LwAFNGsABTSXAAU02wAFNRsABTVXAAU1nwAFNc8ABTYXAAU2XwAFNo8ABTbjAAU3AwAFNysABTdrAAU3mwAFN9sABTf7AAU4BwAFODMABThjAAU4kwAFOM8ABTkLAAU5PwAFOV8ABTmDAAU5qwAFOhMABTp7AAU63wAFO0sABTuLAAU7xwAFPAMABTwzAAU8bwAFPK8ABTzrAAU9KwAFPVcABT2fAAU96wAFPh8ABT5nAAU+gwAFPq8ABT7zAAU/NwAFP38ABT+rAAU/2wAFQA8ABUBLAAVAgwAFQLcABUDrAAVBLwAFQWMABUHfAAVCPwAFQn8ABUKvAAVC3wAFQ48ABUPPAAVEFwAFRD8ABUR7AAVErwAFRVcABUX/AAVGWwAFRm8ABUa3AAVHkwAFSAMABUg/AAVJEwAFSe8ABUpXAAVKcwAFSp8ABUtbAAVLiwAFS78ABUvzAAVMHwAFTE8ABUznAAVNlwAFTb8ABU4PAAVOcwAFTq8ABU7fAAVPFwAFTycABU9fAAVPbwAFT4sABU+vAAVPywAFUAcABVA3AAVQXwAFUI8ABVC3AAVQ2wAFUPMABVEXAAVRMwAFUU8ABVGDAAVRswAFUfsABVJLAAVShwAFUrsABVMjAAVTXwAFU5cABVRjAAVUawAFVScABVVTAAVVZwAFVgsABVY3AAVWVwAFVosABVbDAAVXDwAFVx8ABVcvAAVXQwAFV4MABVeXAAVX1wAFV+MABVgfAAVYMwAFWGsABVjHAAVZGwAFWVcABVmPAAVZ7wAFWicABVqHAAVaqwAFWvcABVsbAAVbZwAFW6cABVvfAAVcVwAFXIsABVzHAAVc9wAFXTMABV1DAAVdXwAFXasABV27AAVd+wAFXgsABV5LAAVeewAFXqMABV7PAAVfJwAFX2cABV+nAAVf3wAFYA8ABWBTAAVgwwAFYTMABWG3AAViLwAFYrsABWMvAAVjowAFY8sABWPzAAVkLwAFZF8ABWSjAAVkzwAFZPsABWU3AAVlawAFZb8ABWY3AAVmUwAFZnMABWafAAVmwwAFZxsABWc/AAVnlwAFZ7cABWfXAAVoEwAFaEsABWhzAAVonwAFaPcABWkPAAVpVwAFaaMABWnzAAVqVwAFaqsABWrjAAVrBwAFax8ABWs/AAVrcwAFa48ABWuvAAVr8wAFbSMABW1fAAVtjwAFbbMABW3bAAVt7wAFbfsABW4fAAVuYwAFbpMABW7XAAVu+wAFbz8ABW9vAAVvswAFb9cABXAPAAVwXwAFcKsABXDbAAVxEwAFcT8ABXFfAAVxfwAFcZ8ABXIfAAVy1wAFc1cABXPXAAV0jwAFdQ8ABXVbAAV10wAFdkcABXZzAAV2iwAFdrsABXbvAAV3WwAFd5sABXfzAAV4NwAFeIcABXi3AAV48wAFeTMABXlnAAV5nwAFecsABXoHAAV6SwAFeoMABXrDAAV68wAFexMABXs3AAV7VwAFe6cABXu3AAV79wAFfAsABXxPAAV8ewAFfKcABXzrAAV9WwAFfa8ABX5LAAV+mwAFfscABX8TAAV/bwAFf6cABX+/AAWAGwAFgJMABYDHAAWBHwAFgYsABYHnAAWCFwAFgm8ABYLbAAWDKwAFg3MABYOzAAWEEwAFhFMABYSfAAWE+wAFhV8ABYW7AAWFywAFhdsABYYbAAWGKwAFhmsABYbPAAWHNwAFh6MABYgbAAWIqwAFiNMABYkHAAWJOwAFiWMABYmLAAWJzwAFigcABYo/AAWKnwAFiu8ABYs/AAWLlwAFi+sABYw/AAWMXwAFjIMABYynAAWM3wAFjRsABY2DAAWNvwAFjgcABY5PAAWOqwAFjw8ABY83AAWPqwAFj+cABZAbAAWQUwAFkIMABZC3AAWQ8wAFkUcABZFTAAWRiwAFkcMABZJLAAWSpwAFkvMABZNHAAWTmwAFk/MABZQTAAWULwAFlG8ABZTDAAWVAwAFlUMABZVvAAWVowAFlhcABZZ3AAWW6wAFlvsABZe7AAWXzwAFmFcABZkbAAWZSwAFmW8ABZmLAAWZrwAFmfMABZofAAWaOwAFmncABZqXAAWa4wAFmysABZtPAAWbXwAFm4MABZurAAWbwwAFm+sABZwPAAWcKwAFnFMABZx/AAWchwAFnLcABZzjAAWc7wAFnS8ABZ1/AAWdzwAFnicABZ5rAAWegwAFnrMABZ7TAAWfAwAFnxMABZ9XAAWfewAFn68ABZ+/AAWf5wAFoAcABaBDAAWgfwAFoOsABaE3AAWhgwAFoZ8ABaG/AAWh1wAFohsABaJnAAWiewAFopsABaKvAAWi8wAFowsABaNPAAWjdwAFo6MABaPLAAWkCwAFpDsABaRrAAWkpwAFpMMABaTzAAWlOwAFpWMABaWLAAWlzwAFpj8ABaZ/AAWmlwAFptMABacrAAWnZwAFp6sABafDAAWn3wAFqBcABahnAAWogwAFqLcABajTAAWo7wAFqSsABalbAAWpfwAFqb8ABanbAAWp/wAFqj8ABapXAAWqrwAFqsMABarXAAWrBwAFq1MABauXAAWsBwAFrBMABawvAAWsXwAFrK8ABazTAAWtEwAFrXMABa2TAAWttwAFrd8ABa3/AAWuGwAFrlsABa6fAAWu5wAFrwcABa8zAAWvWwAFr4cABa/TAAWwBwAFsFsABbB3AAWwrwAFsQcABbErAAWxbwAFsYsABbGjAAWx1wAFsicABbJDAAWyfwAFstcABbMXAAWzcwAFs48ABbO/AAW0CwAFtFcABbS/AAW0+wAFtVMABbWDAAW1zwAFtfsABbZDAAW2awAFtq8ABbbTAAW3EwAFtz8ABbeHAAW3rwAFt/MABbf/AAW4JwAFuGsABbiLAAW4xwAFuOMABbkbAAW5MwAFuWcABbmHAAW5wwAFud8ABbn3AAW6KwAFumcABbtbAAW7qwAFvLMABbzfAAW9wwAFvgcABb4nAAW+XwAFvpMABb67AAW+6wAFvz8ABb9vAAW/rwAFv98ABcATAAXASwAFwHMABcCnAAXArwAFwO8ABcErAAXBZwAFwacABcILAAXCUwAFwocABcKjAAXC6wAFwxMABcNnAAXD0wAFw98ABcQrAAXETwAFxK8ABcTnAAXFNwAFxV8ABcXDAAXF0wAFxeMABcZLAAXGswAFxs8ABcdHAAXHcwAFx7cABcfzAAXIHwAFyDsABchjAAXIfwAFyOsABckXAAXJkwAFyasABcnjAAXJ7wAFyjcABcpjAAXKgwAFyo8ABcrfAAXLJwAFy48ABcvfAAXL+wAFzA8ABcxTAAXMbwAFzKMABcyrAAXMuwAFzPsABc0TAAXNNwAFzWcABc2DAAXN0wAFzesABc5PAAXOdwAFzsMABc7zAAXPFwAFzzMABc9vAAXPlwAFz9cABc/jAAXQCwAF0DMABdBzAAXQrwAF0McABdDfAAXQ8wAF0R8ABdFXAAXRhwAF0bMABdHvAAXSAwAF0j8ABdJLAAXSkwAF0ysABdNLAAXTdwAF05sABdRPAAXUYwAF1IMABdSbAAXU1wAF1S8ABdVbAAXVdwAF1ZsABdW/AAXVzwAF1e8ABdYbAAXWvwAF1tcABdd7AAXYGwAF2D8ABdkPAAXZowAF2gcABdpDAAXaZwAF2oMABdqXAAXauwAF2tMABdsTAAXbnwAF3E8ABdx3AAXcnwAF3McABdz3AAXdQwAF3VsABd2LAAXd9wAF3jsABd6DAAXevwAF3vsABd9zAAXfxwAF39cABeAbAAXgJwAF4GsABeDHAAXhBwAF4UsABeFnAAXhjwAF4asABeHfAAXiBwAF4icABeKLAAXi6wAF4xsABeM/AAXjlwAF46cABePLAAXkGwAF5EcABeSPAAXlAwAF5R8ABeVHAAXlawAF5XsABeXLAAXmCwAF5j8ABeZ7AAXmowAF5wMABecnAAXnVwAF54sABee7AAXn6wAF6CMABehHAAXocwAF6MMABej7AAXpSwAF6W8ABembAAXpywAF6f8ABeo7AAXqVwAF6rsABerTAAXrLwAF66sABewHAAXsbwAF7KcABezTAAXs9wAF7TsABe17AAXtiwAF7b8ABe4HAAXuEwAF7j8ABe5PAAXuZwAF7p8ABe7nAAXvMwAF758ABe/DAAXv/wAF8CsABfBXAAXwqwAF8LMABfGrAAXyewAF8vcABfMHAAXzYwAF89sABfSHAAX0rwAF9OMABfT/AAX1AwAF9VcABfV7AAX1jwAF9asABfYPAAX2LwAF9mMABfZ/AAX2swAF9v8ABfcvAAX3ZwAF98MABfgzAAX4SwAF+NMABfnnAAX7FwAF/C8ABfxLAAX8mwAF/McABf0LAAX9VwAF/acABf3zAAX+OwAF/pMABf7rAAX/TwAF/6MABgADAAYAMwAGAF8ABgCLAAYAuwAGARsABgFnAAYBewAGAY8ABgHLAAYCVwAGApcABgNTAAYDywAGA/MABgQjAAYEXwAGBH8ABgSvAAYE4wAGBP8ABgUfAAYFVwAGBb8ABgXnAAYGEwAGBm8ABgafAAYGrwAGBt8ABgcXAAYHOwAGB28ABgfTAAYIBwAGCBsABghTAAYIcwAGCNsABgkLAAYJPwAGCaMABgnPAAYJ4wAGCe8ABgofAAYKfwAGCrsABgrTAAYLAwAGC1MABguTAAYMAwAGDD8ABgyPAAYMzwAGDT8ABg2HAAYN0wAGDk8ABg6HAAYOnwAGDr8ABg7jAAYPHwAGD4sABg+7AAYP7wAGEBsABhBTAAYQlwAGELsABhDPAAYQ+wAGEUMABhFrAAYR4wAGEiMABhJPAAYSgwAGEwMABhMvAAYTZwAGE5cABhP3AAYUSwAGFIMABhSbAAYU8wAGFXsABhWjAAYVvwAGFfMABhYrAAYWPwAGFmsABhbHAAYW7wAGFxMABhcrAAYXiwAGF7cABhgTAAYYTwAGGGcABhinAAYZFwAGGUsABhlvAAYZmwAGGdMABho7AAYarwAGG1cABhuLAAYcCwAGHL8ABhzvAAYdZwAGHhMABh4nAAYebwAGHpMABh7PAAYfIwAGH4MABh/jAAYgNwAGIJMABiDXAAYhCwAGIWcABiGHAAYhrwAGIdsABiH/AAYiIwAGIksABiJXAAYiYwAGIosABiK3AAYi8wAGIwsABiMrAAYjXwAGI38ABiO7AAYj0wAGI+sABiQPAAYkNwAGJF8ABiR7AAYkiwAGJKcABiS3AAYkzwAGJPMABiUXAAYlPwAGJWcABiV/AAYlqwAGJdsABiYHAAYmKwAGJlMABiZrAAYmlwAGJscABibjAAYm9wAGJwcABic3AAYnUwAGJ4cABienAAYnxwAGJ+8ABigXAAYoLwAGKEMABihfAAYoewAGKJ8ABijbAAYo+wAGKTMABilLAAYpawAGKZMABinTAAYqGwAGKi8ABipTAAYqdwAGKpsABiq/AAYq4wAGKwcABisrAAYrTwAGK3cABiuTAAYrrwAGK9MABiv7AAYsPwAGLIcABizPAAYs7wAGLQ8ABi0vAAYtTwAGLXMABi2nAAYtzwAGLfMABi4fAAYuTwAGLoMABi6rAAYu4wAGLxsABi8zAAYvVwAGL3sABi+bAAYvtwAGL9MABi/vAAYwAwAGMA8ABjA3AAYwSwAGMGMABjCjAAYw5wAGMUsABjFvAAYxlwAGMcsABjH7AAYyJwAGMjcABjJHAAYyTwAGMlcABjKPAAYyrwAGMssABjLnAAYzBwAGMycABjNrAAYzqwAGNAMABjRTAAY0qwAGNP8ABjVDAAY15wAGNjsABjbvAAY3RwAGN/8ABjhDAAY4nwAGOLMABjjTAAY41wAGOPcABjkTAAY5HwAGOTMABjlDAAY5ZwAGOZMABjmnAAY5wwAGOecABjoHAAY6ZwAGOosABjrLAAY6zwAGOuMABjsLAAY7MwAGO1sABjt7AAY7nwAGO78ABjwLAAY8KwAGPE8ABjyLAAY8vwAGPPMABj03AAY9ewAGPbcABj3zAAY+MwAGPnMABj63AAY++wAGPy8ABj9nAAY/rwAGP+8ABkAzAAZAcwAGQLcABkEHAAZBUwAGQZ8ABkHrAAZCOwAGQocABkLPAAZDAwAGQ1MABkOPAAZD3wAGQ/sABkQXAAZEKwAGRD8ABkRXAAZEbwAGRIsABkSnAAZEswAGRMMABkTjAAZE+wAGRRcABkUvAAZFSwAGRXMABkWXAAZFuwAGRd8ABkYDAAZGIwAGRi8ABkZXAAZGfwAGRrMABkb7AAZHPwAGR48ABkfXAAZH5wAGR/MABkgLAAZIGwAGSD8ABkh3AAZIswAGSPMABkkDAAZJKwAGSWsABkmrAAZJ6wAGSf8ABkoTAAZKRwAGSo8ABkrfAAZK9wAGSwcABks7AAZLpwAGS8cABkvrAAZMQwAGTFcABkyfAAZMzwAGTQ8ABk0/AAZNhwAGTccABk4LAAZOZwAGTrcABk77AAZPYwAGT7sABlADAAZQNwAGUIMABlC3AAZQ+wAGUS8ABlF7AAZRvwAGUgcABlJnAAZSuwAGUwMABlNvAAZTywAGVBcABlRPAAZUiwAGVKsABlTfAAZVJwAGVW8ABlWjAAZV2wAGViMABlaHAAZWkwAGVs8ABlbrAAZXFwAGVysABldXAAZXewAGV6MABlfjAAZYCwAGWEsABliHAAZYwwAGWP8ABlkXAAZZLwAGWWMABlmPAAZZqwAGWdcABloHAAZaKwAGWkMABlpnAAZagwAGWosABlq/AAZa3wAGWxMABltDAAZbfwAGW58ABlvTAAZb8wAGXBMABlxPAAZcqwAGXR8ABl1rAAZdhwAGXbsABl3HAAZd8wAGXkMABl6TAAZeswAGXtMABl77AAZfEwAGXzMABl9HAAZfcwAGX6MABl/LAAZf9wAGYDcABmBrAAZgcwAGYJcABmDTAAZhMwAGYUcABmGDAAZhqwAGYesABmInAAZiewAGYqsABmLfAAZjJwAGY1sABmOLAAZj2wAGZCsABmRHAAZkYwAGZJcABmT3AAZlUwAGZZ8ABmXjAAZmXwAGZqMABmbPAAZm3wAGZx8ABmdHAAZnZwAGZ5cABmfHAAZoBwAGaEcABmhfAAZoiwAGaMMABmkPAAZpJwAGaVMABmmLAAZp1wAGahsABmpzAAZqewAGaoMABmrnAAZrXwAGa3sABmurAAZrswAGa7sABmv3AAZsRwAGbGMABmyTAAZszwAGbR8ABm0zAAZtWwAGbYMABm2vAAZtxwAGbe8ABm4XAAZuLwAGbk8ABm5zAAZunwAGbtsABm73AAZvEwAGb1sABm+HAAZv0wAGcC8ABnBLAAZwawAGcJsABnC3AAZwxwAGcOcABnEXAAZxLwAGcUsABnF3AAZxnwAGcbcABnHjAAZyHwAGcj8ABnJjAAZylwAGcrMABnL7AAZzGwAGc0sABnOjAAZzuwAGc/MABnRTAAZ0jwAGdNsABnVLAAZ1cwAGdZsABnW/AAZ18wAGdgsABnYzAAZ2awAGdo8ABna3AAZ27wAGdxMABncfAAZ4kwAGeK8ABnjnAAZ5EwAGeS8ABnlHAAZ5awAGeX8ABnmrAAZ58wAGeh8ABnpPAAZ6fwAGeqcABnrXAAZ69wAGe0MABnuPAAZ7uwAGe/cABnwbAAZ8SwAGfIcABny3AAZ9EwAGfa8ABn3jAAZ+NwAGfk8ABn53AAZ+ywAGfvsABn9TAAZ/owAGf+sABoBHAAaAawAGgH8ABoCTAAaApwAGgM8ABoDzAAaBFwAGgScABoFnAAaBkwAGgasABoHTAAaB7wAGghMABoI/AAaClwAGgu8ABoMzAAaDdwAGg/8ABoQzAAaEdwAGhLsABoUHAAaFgwAGhf8ABogjAAaIUwAGiHcABoijAAaI+wAGiVMABomvAAaJ/wAGilcABorbAAaLXwAGi4sABovDAAaL9wAGjB8ABoxPAAaMZwAGjH8ABoz7AAaNHwAGjXcABo27AAaN/wAGjksABpBvAAaQnwAGkMMABpEfAAaRbwAGkccABpHfAAaR/wAGkjcABpJ7AAaStwAGktcABpL3AAaTDwAGkycABpNPAAaTbwAGk6sABpPbAAaUGwAGlEcABpRfAAaUcwAGlJ8ABpTLAAaU+wAGlQ8ABpUvAAaVcwAGlZsABpXrAAaWNwAGllsABpanAAaWwwAGlt8ABpdPAAaXZwAGl38ABperAAaXuwAGl8sABpfvAAaYNwAGmIMABplfAAaaSwAGmncABpqDAAaajwAGmscABpsjAAabhwAGm68ABpv/AAacXwAGnLcABpzbAAadDwAGnTsABp1bAAadfwAGnccABp3jAAaewwAGn3MABqBnAAagpwAGoQsABqE/AAahdwAGogMABqJTAAaihwAGoqsABqLrAAajJwAGo2sABqOHAAajnwAGo+MABqQjAAakOwAGpFsABqR7AAakpwAGpZ8ABqXnAAal9wAGpiMABqZHAAamWwAGprcABqbfAAanUwAGp4MABqenAAan5wAGqAMABqg7AAaoawAGqLcABqj3AAao/wAGqQcABqkfAAapTwAGqWcABqmbAAapqwAGqdcABqoXAAaqNwAGqk8ABqp7AAaqnwAGqtsABqr/AAarJwAGq2cABquHAAarqwAGq+cABqwLAAasMwAGrHMABqyTAAasmwAGrKMABqzHAAatAwAGrScABq1PAAatjwAGra8ABq3TAAauDwAGrjMABq5bAAaumwAGrsMABq7vAAavMwAGr1MABq93AAavswAGr9sABrAHAAawSwAGsGcABrCLAAawqwAGsOMABrEDAAaxJwAGsWMABrGHAAaxrwAGse8ABrIjAAayWwAGsqsABrLHAAay3wAGsv8ABrMjAAazPwAGs1cABrN3AAazmwAGs88ABrQHAAa0VwAGtHsABrSrAAa01wAGtQcABrVPAAa1gwAGtacABrW/AAa15wAGtgsABrY3AAa2awAGtxsABrdfAAa3jwAGt68ABrfjAAa4LwAGuFMABrhnAAa4jwAGuKMABrjHAAa5dwAGupsABrrjAAa7CwAGuyMABrtTAAa7fwAGu7cABrvfAAa8DwAGvEMABrz/AAa9+wAGv2MABr+jAAa/ywAGwBcABsBDAAbAhwAGwKMABsDfAAbBGwAGwWsABsHPAAbCCwAGwncABsLjAAbDEwAGw4MABsObAAbD2wAGw/8ABsQjAAbEUwAGxHsABsTnAAbFVwAGxhMABsZjAAbGhwAGxqMABsbDAAbG8wAGxysABsdHAAbHcwAGx6MABsfPAAbH5wAGyBMABshLAAbIfwAGyOsABskXAAbJUwAGyYcABsm/AAbKAwAGynMABsrHAAbLLwAGy2MABsuzAAbL9wAGzEcABsyTAAbM2wAGzSMABs1jAAbNdwAGzYcABs2PAAbN0wAGzi8ABs6LAAbO6wAGz2sABs/PAAbP4wAGz/cABtAPAAbQRwAG0IsABtDjAAbRQwAG0acABtG/AAbR6wAG0g8ABtI3AAbSTwAG0pMABtK3AAbS2wAG0xMABtNLAAbTZwAG04cABtOzAAbT0wAG0/8ABtQrAAbUVwAG1IMABtSvAAbU0wAG1PcABtUjAAbVMwAG1WMABtWTAAbVwwAG1f8ABtYTAAbWQwAG1m8ABtaPAAbWpwAG1tcABtb3AAbXQwAG128ABtebAAbX2wAG2BsABtg/AAbYcwAG2JsABtjPAAbZAwAG2SsABtlfAAbZdwAG2asABtnfAAbaCwAG2jcABtprAAbagwAG2rsABtrzAAbbKwAG228ABturAAbb0wAG3BMABtxXAAbcnwAG3NsABt0fAAbdWwAG3ZcABt3jAAbebwAG3v8ABt9LAAbfdwAG358ABt/PAAbgTwAG4M8ABuEHAAbhPwAG4bcABuIzAAbiPwAG4mMABuKLAAbitwAG4tcABuL/AAbjHwAG4z8ABuNvAAbj3wAG5FMABuSDAAbkjwAG5KMABuUHAAblawAG5ZsABuW3AAbmEwAG5nMABua/AAbnIwAG54sABuf3AAboVwAG6L8ABukfAAbpfwAG6e8ABuqfAAbrUwAG68MABuwTAAbsXwAG7LMABu1XAAbt+wAG7msABu7HAAbvYwAG8AMABvA3AAbwjwAG8M8ABvETAAbxTwAG8ZcABvHXAAbyLwAG8m8ABvLzAAbzLwAG83MABvO7AAbz/wAG9DsABvRzAAb0vwAG9RcABvVXAAb1wwAG9gsABvZPAAb2lwAG9ssABvcHAAb3KwAG91MABvdzAAb3nwAG98cABvfzAAb4FwAG+FMABvh3AAb43wAG+P8ABvknAAb5UwAG+X8ABvmnAAb5xwAG+eMABvoTAAb6TwAG+nMABvrDAAb7NwAG+5MABvvzAAb8SwAG/K8ABv0LAAb9fwAG/dsABv57AAb+0wAG/zMABv+XAAb/9wAHAE8ABwCjAAcBCwAHAX8ABwHbAAcCYwAHAscABwMnAAcDiwAHA9sABwQzAAcEuwAHBOMABwT/AAcFNwAHBX8ABwXDAAcGDwAHBkcABwZ/AAcGqwAHBuMABwcfAAcHWwAHB38ABwePAAcHxwAHB/8ABwgzAAcIkwAHCOsABwkvAAcKMwAHCl8ABwrjAAcLKwAHC1MABwufAAcMQwAHDLMABwzvAAcNSwAHDW8ABw2vAAcN7wAHDgcABw4vAAcOPwAHDk8ABw5fAAcObwAHDn8ABw6PAAcOnwAHDq8ABw6/AAcOzwAHDwsABw9HAAcPgwAHD78ABw/7AAcQNwAHEHMABxCvAAcQ6wAHERcABxEzAAcRZwAHEYMABxGnAAcRtwAHEeMABxIfAAcSLwAHEnsABxKLAAcSwwAHEtMABxMDAAcTCwAHEycABxNHAAcTdwAHE5sABxPTAAcUDwAHFE8ABxSTAAcUzwAHFQMABxUfAAcVTwAHFasABxYLAAcWMwAHFl8ABxaXAAcWqwAHFs8ABxbvAAcXGwAHF0cABxdvAAcXuwAHF/cABxhXAAcYXwAHGKsABxkPAAcZdwAHGd8ABxpHAAcapwAHGr8ABxrXAAca7wAHGv8ABxtHAAcbpwAHHAcABxwzAAccfwAHHOcABx1PAAcdcwAHHZMABx2/AAceCwAHHi8ABx5nAAcelwAHHucABx8DAAcfLwAHH1sABx97AAcfrwAHH+sAByAnAAcgcwAHIJsAByC/AAcg7wAHIRcAByFfAAchfwAHIbMAByHfAAch9wAHIicAByLbAAckGwAHJEMAByRfAAckiwAHJLsAByT/AAclQwAHJZcAByXHAAcl8wAHJisAByZbAAcmqwAHJtMABycPAAcnQwAHJ2MAByeDAAcnswAHJ+MABygHAAcoPwAHKHcAByijAAcoxwAHKOsABykLAAcpUwAHKXsABymbAAcp1wAHKgMAByo/AAcqgwAHKscAByrvAAcrPwAHK2cAByuPAAcrqwAHK+sABywfAAcsKwAHLDcAByxTAAcsdwAHLK8AByzHAActDwAHLT8ABy2TAAct7wAHLg8ABy43AAcuZwAHLocABy7bAAcvCwAHLy8ABy9TAAcvfwAHL68ABy/XAAcv+wAHMCMABzBnAAcwgwAHMNMABzFDAAcxewAHMcsABzITAAcyrwAHMz8ABzPbAAc0KwAHND8ABzSfAAc08wAHNVMABzVnAAc1mwAHNecABzYrAAc2ewAHNu8ABzd3AAc3/wAHOF8ABzjLAAc5NwAHOVcABzmLAAc5vwAHOdcABzoDAAc6JwAHOj8ABzpbAAc6kwAHOrsABzrfAAc7GwAHO1sABzuHAAc72wAHPB8ABzyLAAc8zwAHPTsABz2DAAc98wAHPj8ABz6zAAc+9wAHP2MABz97AAc/pwAHP8MAB0ADAAdAQwAHQHsAB0CvAAdA8wAHQVsAB0G3AAdCOwAHQosAB0LfAAdDVwAHQ5MAB0OzAAdD8wAHRFcAB0STAAdE0wAHRTcAB0VzAAdFiwAHRdMAB0ZDAAdGgwAHRscAB0cPAAdHUwAHR8MAB0fnAAdIIwAHSGMAB0inAAdIywAHSQsAB0lXAAdJfwAHSecAB0oXAAdKWwAHSpMAB0rXAAdLDwAHS08AB0uDAAdL0wAHS+8AB0wPAAdMbwAHTKcAB0zfAAdNGwAHTZcAB03vAAdOFwAHTmsAB07DAAdPGwAHT3cAB0+fAAdPywAHT/cAB1AnAAdQUwAHUH8AB1CnAAdRAwAHUTMAB1FjAAdRlwAHUc8AB1HzAAdSFwAHUk8AB1KPAAdS1wAHUwsAB1NPAAdTswAHVBsAB1R7AAdU4wAHVP8AB1UfAAdVUwAHVaMAB1W/AAdV4wAHVgsAB1YjAAdWVwAHVscAB1bPAAdW1wAHVt8AB1bnAAdW7wAHVvcAB1b/AAdXBwAHVw8AB1cbAAdXJwAHVzMAB1c7AAdXRwAHV1MAB1dfAAdXawAHV3cAB1eDAAdXjwAHV5sAB1enAAdXswAHV78AB1fLAAdX1wAHV+MAB1fvAAdX+wAHWAcAB1gTAAdYHwAHWCsAB1g3AAdYQwAHWE8AB1hbAAdYZwAHWHMAB1h/AAdYiwAHWJcAB1ijAAdYrwAHWLsAB1jHAAdY0wAHWN8AB1jrAAdY9wAHWQMAB1kPAAdZGwAHWScAB1kzAAdZPwAHWUsAB1lXAAdZYwAHWW8AB1l7AAdZhwAHWZMAB1mfAAdZqwAHWbcAB1nDAAdZzwAHWdsAB1nnAAdZ8wAHWf8AB1oLAAdaFwAHWiMAB1ovAAdaOwAHWkcAB1pTAAdaXwAHWmsAB1p3AAdagwAHWo8AB1qbAAdapwAHWrMAB1q/AAdaywAHWtcAB1rjAAda7wAHWvsAB1sHAAdbEwAHWx8AB1srAAdbNwAHW0MAB1tPAAdbWwAHW2cAB1tzAAdbfwAHW4sAB1uXAAdbowAHW68AB1u7AAdbxwAHW9MAB1vfAAdb6wAHW/cAB1wDAAdcDwAHXBsAB1wnAAdcMwAHXD8AB1xLAAdcVwAHXGMAB1xvAAdcewAHXIcAB1yTAAdcnwAHXKsAB1y3AAdcwwAHXM8AB1zbAAdc5wAHXPMAB1z/AAddCwAHXRcAB10jAAddLwAHXTsAB11HAAddUwAHXXsAB12rAAdeEwAHXhsAB14jAAdeKwAHXjMAB147AAdeQwAHXksAB15TAAdeWwAHXmMAB15rAAdecwAHXqcAB17zAAdfHwAHX08AB19bAAdfhwAHX7cAB1/rAAdgAwAHYEcAB2B7AAdgswAHYQ8AB2E7AAdhawAHYbsAB2H/AAdiUwAHYnMAB2KzAAdjAwAHY1sAB2PTAAdkEwAHZGsAB2TPAAdlQwAHZY8AB2XPAAdmPwAHZr8AB2bzAAdnNwAHZ2cAB2enAAdn5wAHaDcAB2iPAAdo3wAHaT8AB2mDAAdp6wAHamMAB2qrAAdrAwAHa1sAB2vXAAdsVwAHbJ8AB2z3AAdtZwAHbacAB23XAAduCwAHbjMAB25fAAduqwAHbusAB28HAAdvQwAHb5cAB2/TAAdwJwAHcIcAB3DPAAdxOwAHcWsAB3GXAAdx0wAHckMAB3KPAAdyzwAHcxMAB3NvAAdzowAHc/MAB3QLAAd0PwAHdFMAB3STAAd09wAHdTsAB3WPAAd2BwAHdkMAB3abAAd25wAHd08AB3ebAAd36wAHeFMAB3iXAAd4+wAHeXcAB3mfAAd6MwAHenMAB3rTAAd7TwAHe6MAB3v7AAd8RwAHfKcAB3zjAAd9LwAHfX8AB33DAAd94wAHfhMAB34zAAd+WwAHfpcAB36nAAd+uwAHfvMAB38TAAd/bwAHf68AB3/XAAeALwAHgHcAB4CjAAeAuwAHgOMAB4D3AAeBCwAHgR8AB4EzAAeBRwAHgVsAB4FvAAeBgwAHgZcAB4GrAAeBvwAHgdMAB4HnAAeB+wAHgg8AB4IjAAeCNwAHgksAB4JfAAeCcwAHgpMAB4K/AAeC6wAHgzsAB4NPAAeDhwAHg8cAB4QLAAeERwAHhHcAB4SvAAeE6wAHhR8AB4VzAAeFzwAHhi8AB4aHAAeGywAHhwMAB4crAAeHVwAHh7MAB4fTAAeIJwAHiH8AB4jvAAeJUwAHiYsAB4nnAAeKVwAHioMAB4rjAAeK6wAHixsAB4tnAAeLlwAHi/8AB4xfAAeMiwAHjMMAB4zzAAeNGwAHjU8AB42vAAeN7wAHjlMAB47PAAeO7wAHjvMAB48TAAePGwAHjyMAB49DAAePSwAHj1sAB4+7AAeP4wAHkA8AB5BHAAeQswAHkQMAB5FXAAeRpwAHke8AB5IzAAeSiwAHkt8AB5MPAAeTawAHk/sAB5QvAAeUjwAHlSMAB5VbAAeVvwAHllcAB5aTA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AgIQwAICEsACAhTAAgIWwAICGMACAhrAAgIcwAICHsACAiDAAgIiwAICJMACAibAAgIowAICKsACAizAAgIuwAICMMACAjLAAgI0wAICNsACAjjAAgI6wAICPMACAj7AAgJAwAICQsACAkTAAgJGwAICSMACAkrAAgJMwAICTsACAlDAAgJSwAICVMACAlbAAgJYwAICWsACAlzAAgJewAICYMACAmLAAgJkwAICZsACAmjAAgJqwAICbMACAnXAAgJ+wAICh8ACApTAAgKhwAICssACAsfAAgLKwAIC08ACAujAAgLuwAIC/8ACAwTAAgMSwAIDIMACAzHAAgM4wAIDP8ACA0bAAgNMwAIDVsACA2HAAgNrwAIDdcACA33AAgODwAIDisACA5bAAgOgwAIDrMACA7fAAgPCwAID0MACA9bAAgPnwAID+cACBAbAAgQawAIELMACBETAAgRPwAIEY8ACBHLAAgR7wAIEh8ACBJzAAgSgwAIEpMACBLDAAgS7wAIEz8ACBPPAAgUDwAIFEMACBR/AAgUnwAIFMMACBTrAAgVTwAIFZsACBXfAAgWawAIFscACBb/AAgXHwAIF1cACBdzAAgXlwAIF7MACBfLAAgX2wAIGBsACBgzAAgYYwAIGH8ACBiXAAgYwwAIGOMACBkPAAgZWwAIGXMACBmbAAgZwwAIGesACBoTAAgaHwAIGlsACBrDAAga6wAIGxcACBszAAgbdwAIG68ACBvjAAgcCwAIHD8ACByLAAgctwAIHPsACB0nAAgdewAIHbcACB4bAAgePwAIHosACB6rAAge8wAIH0MACB97AAgf0wAIH/MACCA/AAggawAIIM8ACCEbAAghJwAIITcACCGDAAghxwAIIfMACCIfAAgiSwAIIocACCKzAAgi2wAIIxMACCNfAAgj5wAIJBsACCSbAAgk4wAIJQsACCVXAAglewAIJYsACCWvAAgl5wAIJksACCZ7AAgmtwAIJwcACCdbAAgn1wAIJ/8ACCgzAAgocwAIKKcACCjPAAgo+wAIKSsACClfAAgpowAIKcMACConAAgqmwAIKusACCs7AAgrhwAIK88ACCvvAAgsEwAILCcACCxHAAgsdwAILMcACC0LAAgtIwAILWMACC3TAAgt+wAILicACC57AAgu9wAIL2cACC+nAAgv7wAIMB8ACDBbAAgwuwAIMNcACDD/AAgxLwAIMWMACDGrAAgx2wAIMf8ACDIzAAgyRwAIMo8ACDLXAAgzBwAIMyMACDNrAAgzswAIM+sACDQPAAg6DwAIOjMACEAnAAhAawAIQOsACEEzAAhBrwAIQesACEITAAhCHwAIQlMACEJfAAhCewAIQosACEKzAAhCywAIQu8ACEMfAAhDOwAIQ18ACEO3AAhEFwAIRKsACET3AAhFGwAIRU8ACEWHAAhF5wAIRnsACEbTAAhHKwAIR1sACEe/AAhH1wAIR/cACEhbAAhIjwAISOMACEj3AAhJNwAISWsACEmLAAhJwwAISfcACEoTAAhKIwAISmMACEqvAAhLAwAIS1cACEt/AAhLmwAITGsACEy7AAhM3wAITQsACE0jAAhNOwAITVMACE1zAAhNrwAITf8ACE4nAAhORwAITo8ACE7XAAhPCwAITz8ACE9rAAhPkwAIT8sACE/7AAhQJwAIUEMACFCHAAhQnwAIULsACFDfAAhQ/wAIURcACFE3AAhRTwAIUXsACFGXAAhRtwAIUcsACFHfAAhR6wAIUfsACFILAAhSIwAIUkcACFJjAAhSgwAIUqMACFLXAAhTPwAIU38ACFOvAAhUKwAIVP8ACFWfAAhVrwAIVcMACFXPAAhV3wAIVfcACFYjAAhWTwAIVlsACFbDAAhXKwAIV4MACFerAAhYLwAIWKcACFi3AAhY+wAIWWMACFnbAAhaLwAIWnMACFsXAAhblwAIXBsACFy/AAhdAwAIXS8ACF1XAAhdgwAIXacACF3bAAheBwAIXhcACF4jAAheLwAIXjsACF5TAAheiwAIXs8ACF8TAAhfQwAIX3MACF+bAAhfwwAIX/cACGAPAAhgYwAIYHsACGC7AAhg6wAIYRcACGE3AAhhcwAIYZsACGIHAAhiTwAIYocACGK/AAhi3wAIYz8ACGODAAhjtwAIY/MACGP7AAhkMwAIZE8ACGSzAAhkxwAIZRcACGVPAAhljwAIZdMACGYfAAhmPwAIZlsACGabAAhmtwAIZssACGb3AAhnBwAIZxMACGc7AAhnawAIZ5MACGefAAhnowAIZ98ACGf/AAhoVwAIaHsACGijAAhoywAIaPsACGkHAAhpPwAIaXsACGmXAAhpswAIab8ACGnfAAhqHwAIaksACGpjAAhqhwAIarcACGrzAAhrGwAIa08ACGtzAAhrjwAIa7cACGvTAAhr/wAIbDcACGxXAAhsvwAIbRMACG1TAAhtiwAIbbcACG4LAAhuXwAIbqsACG7zAAhvRwAIb5MACG/bAAhwEwAIcEcACHB7AAhwnwAIcLMACHDPAAhxAwAIcSMACHE7AAhxVwAIcXsACHGfAAhxwwAIcdcACHITAAhyTwAIcncACHKLAAhyuwAIcwcACHNDAAhzewAIc8MACHQDAAh0JwAIdEsACHSHAAh0vwAIdPMACHUXAAh1RwAIdWMACHWjAAh10wAIdfsACHY7AAh2RwAIdosACHazAAh23wAIdwcACHcvAAh3dwAId4sACHerAAh3ywAId/8ACHgjAAh4cwAIeK8ACHjrAAh5DwAIeSsACHlrAAh52wAIelcACHqTAAh6mwAIescACHs3AAh7jwAIe7cACHv/AAh8bwAIfMcACH03AAh9dwAIfdsACH4XAAh+pwAIfyMACH9LAAh/bwAIgA8ACICXAAiArwAIgMsACIEPAAiBZwAIgYsACIG3AAiB9wAIgjMACIJrAAiCiwAIgycACIN7AAiDxwAIhBcACIRfAAiEvwAIhWMACIWbAAiF5wAIhrcACIbrAAiHGwAIh0cACIenAAiHxwAIh98ACIgfAAiIPwAIiFsACIinAAiI1wAIiVcACIlnAAiJuwAIilsACIqDAAiK3wAIiyMACIv/AAiMkwAIjNcACI0/AAiNWwAIjaMACI37AAiOEwAIjkMACI5bAAiOgwAIjs8ACI7XAAiPFwAIjz8ACI9nAAiPdwAIj6sACI/PAAiQGwAIkEMACJB/AAiQiwAIkMsACJDrAAiRKwAIkVsACJGHAAiRowAIkb8ACJHXAAiSFwAIknMACJK7AAiTCwAIkzMACJNfAAiTywAIlAMACJSnAAiVTwAIlY8ACJXDAAiWCwAIlkMACJanAAiW1wAIl5sACJf/AAiYawAImI8ACJi3AAiY4wAImR8ACJk3AAiZZwAImYMACJmnAAiZ6wAImhMACJpDAAiaSwAImocACJqjAAiavwAImtMACJr7AAibAwAImzMACJurAAibxwAIm+cACJwbAAicOwAInFsACJyDAAidewAInZMACJ2zAAiduwAInd8ACJ3/AAieFwAInk8ACJ5bAAiejwAInrcACJ8DAAifTwAIn5sACJ/nA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Ak7dwAJO7cACTw7AAk8ewAJPP8ACT03AAk9swAJPfMACT53AAk+owAJPxMACT9HAAk/vwAJP+8ACUBjAAlAcwAJQMsACUDbAAlBMwAJQUsACUGrAAlBxwAJQisACUI7AAlCkwAJQqMACUL7AAlDGwAJQ38ACUPDAAlERwAJRHsACUTvAAlFDwAJRXMACUW/AAlGSwAJRn8ACUb3AAlHFwAJR38ACUevAAlIIwAJSDsACUibAAlI4wAJSW8ACUm7AAlKSwAJSl8ACUq7AAlK1wAJSzsACUtnAAlL1wAJS+8ACUxPAAlMVwAJTKcACUzDAAlNJwAJTWsACU3zAAlODwAJTnMACU6bAAlPBwAJTxcACU9vAAlPewAJT88ACU/rAAlQTwAJUI8ACVETAAlRQwAJUVsACVGXAAlRvwAJUdcACVI3AAlSXwAJUssACVMDAAlTPwAJU6cACVPbAAlUEwAJVHcACVSzAAlU8wAJVV8ACVWXAAlV0wAJVjsACVZ3AAlWqwAJVvsACVdXAAlXewAJV6cACVfvAAlYJwAJWGsACViXAAlYqwAJWNcACVjrAAlY+wAJWTsACVlLAAlZWwAJWZsACVmrAAlZ6wAJWgMACVozAAlaSwAJWpMACVq/AAla2wAJWvMACVsLAAlbIwAJW0MACVuLAAlbtwAJW+cACVwDAAlcHwAJXFsACVyTAAlcwwAJXPMACV0TAAldQwAJXXMACV2jAAld3wAJXiMACV6PAAlezwAJXxcACV+HAAlf3wAJYCMACWB3AAlgrwAJYNMACWEnAAlhZwAJYYMACWGbAAlhtwAJYcMACWHbAAlh/wAJYh8ACWIvAAliSwAJYnsACWKzAAlixwAJYvMACWMXAAljdwAJY7sACWQHAAlkXwAJZKMACWTfAAllDwAJZVcACWWXAAllvwAJZeMACWYPAAlmlwAJZ1cACWgTAAloxwAJaPsACWkrAAlpUwAJaacACWoPAAlqLwAJapsACWrjAAlrEwAJa0sACWt7AAlrrwAJa+sACWwLAAlsTwAJbJsACWzLAAls1wAJbN8ACWznAAltEwAJbUMACW2PAAltvwAJbc8ACW33AAluKwAJbmsACW6XAAluuwAJbwcACW9jAAlvhwAJb9MACXELAAlxRwAJcYsACXHTAAlyDwAJckcACXJ3AAlyqwAJcrMACXLnAAlztwAJc9cACXQPAAl0QwAJdG8ACXSHAAl0pwAJdMMACXTnAAl1FwAJdUsACXVvAAl1kwAJdZsACXWjAAl1qwAJdbMACXXDAAl2AwAJdjsACXZ3AAl2owAJdtMACXbjAAl26wAJdxMACXc7AAl3YwAJd4sACXezAAl32wAJeAMACXgrAAl4UwAJeHsACXijAAl4ywAJePMACXkbAAl5QwAJeWsACXmTAAl5uwAJeeMACXoLAAl6MwAJelsACXqDAAl6qwAJetMACXr7AAl7IwAJe0sACXtzAAl7mwAJe8MACXvrAAl8EwAJfDsACXxjAAl8iwAJfLMACXzbAAl9AwAJfSsACX1TAAl9ewAJfaMACX3LAAl98wAJfhsACX5DAAl+awAJfpMACX67AAl+4wAJfwsACX8zAAl/WwAJf4MACX+rAAl/swAJf9sACYADAAmAKwAJgDMACYA7AAmATwAJgFcACYB/AAmApwAJgM8ACYD3AAmBHwAJgT8ACYFLAAmBVwAJgWMACYFvAAmBewAJgYcACYGTAAmBnwAJgasACYG3AAmBwwAJgc8ACYHbAAmB5wAJgfMACYH/AAmCCwAJghcACYIjAAmCKwAJgjMACYJDAAmCSwAJgn8ACYKvAAmC4wAJgysACYNfAAmDdwAJg5MACYO3AAmD1wAJg+8ACYQPAAmEJwAJhFMACYR3AAmEmwAJhKcACYTnAAmFNwAJhUsACYV3AAmFrwAJhcsACYXrAAmF9wAJhgMACYYPAAmGGwAJhicACYYzAAmGPwAJhksACYZXAAmGYwAJhn8ACYazAAmG0wAJhu8ACYcDAAmHKwAJh0sACYd7AAmHmwAJh7sACYf/AAmINwAJiIsACYjrAAmJPwAJiY8ACYnHAAmKQwAJincACYqTAAmKrwAJirsACYu7AAmL+wAJjCMACYz/AAmNbwAJjmcACY6LAAmOzwAJjvMACY8TAAmPMwAJj18ACY+XAAmP0wAJkBcACZBnAAmQswAJkTcACZFvAAmR3wAJkgsACZI3AAmSTwAJkm8ACZKjAAmS5wAJkv8ACZMjAAmTSwAJk2sACZOXAAmTzwAJk+MACZRjAAmUmwAJlR8ACZVPAAmVqwAJle8ACZZfAAmWiwAJlscACZcPAAmXWwAJl4sACZe7AAmX2wAJmAsACZgnAAmYdwAJmJMACZjPAAmZFwAJmWMACZl/AAmZnwAJmhcACZo/AAmaZwAJmosACZqnAAmaxwAJmu8ACZsjAAmb2wAJnJcACZy/AAmc8wAJnS8ACZ1nAAmdlwAJnbcACZ3rAAmeIwAJnkMACZ6rAAmezwAJnu8ACZ87AAmfawAJn5cACZ/TAAmf8wAJoCcACaCDAAmgqwAJoNMACaD3AAmhMwAJoVsACaF/AAmhwwAJoeMACaIjAAmiSwAJon8ACaLLAAmi9wAJoycACaNvAAmjvwAJo+cACaQ7AAmkSwAJpFsACaULAAmlYwAJpa8ACaXzAAmmUwAJpncACabDAAmm9wAJpxsACac/AAmndwAJp4sACaerAAmn3wAJqBsACahvAAmohwAJqMcACakLAAmpZwAJqa8ACaoDAAmqSwAJqmMACaqHAAmqkwAJqqcACaqzAAmqvwAJqucACar7AAmrMwAJq2MACavDAAmr/wAJrE8ACax/AAmsswAJrNcACaz3AAmtFwAJrU8ACa2bAAmtywAJrhcACa5LAAmudwAJrqsACa7PAAmvBwAJrz8ACa9nAAmvqwAJr/sACbAvAAmwXwAJsIsACbCjAAmwzwAJsPMACbETAAmxXwAJsXsACbGbAAmyDwAJsjcACbJrAAmypwAJsucACbMrAAmzPwAJs2MACbOTAAmztwAJs/8ACbQrAAm0WwAJtJsACbS/AAm04wAJtSsACbVjAAm11wAJthcACbY3AAm2RwAJtoMACbbPAAm3LwAJt38ACbfXAAm4UwAJuJsACbjvAAm5KwAJuVcACbmjAAm54wAJuksACbpnAAm6rwAJuvcACbsbAAm7WwAJu48ACbvTAAm8GwAJvGsACbyfAAm85wAJvTcACb1jAAm9gwAJvd8ACb4LAAm+VwAJvncACb6TAAm+wwAJvvcACb8XAAm/SwAJv6MACb/XAAm//wAJwC8ACcCDAAnAtwAJwMsACcDvAAnBDwAJwTsACcF/AAnBrwAJwdsACcIXAAnCUwAJwocACcK3AAnDbwAJw+cACcQXAAnE+wAJxTsACcXrAAnGWwAJxnsACca3AAnHCwAJxzcACcdXAAnHfwAJx6sACcgDAAnINwAJyG8ACclbAAnKEwAJyjMACcrHAAnK7wAJywMACcs/AAnLTwAJy2cACcurAAnLzwAJy+cACcwPAAnMUwAJzHMACczXAAnM+wAJzUcACc3vAAnOJwAJzmsACc7PAAnO8wAJz3cACc+nAAnQBwAJ0CMACdBDAAnQUwAJ0HcACdCzAAnQ9wAJ0QsACdEnAAnRVwAJ0YMACdGfAAnRwwAJ0eMACdIXAAnSRwAJ0ocACdLHAAnS4wAJ0v8ACdNLAAnTvwAJ1BsACdRTAAnU0wAJ1OsACdUDAAnVUwAJ1X8ACdWfAAnV5wAJ1i8ACdZfAAnWhwAJ1rcACdcbAAnXOwAJ138ACdfnAAnYFwAJ2DsACdhnAAnYpwAJ2QsACdlbAAnZfwAJ2aMACdnbAAnaMwAJ2lMACdqTAAnarwAJ2u8ACdsrAAnbRwAJ26sACdvbAAnb8wAJ3BsACdwvAAncRwAJ3GcACdyDAAncowAJ3MMACdzrAAndEwAJ3T8ACd1rAAneJwAJ3mMACd5/AAnekwAJ3rMACd7XAAnfBwAJ3ysACd9XAAnfewAJ37MACd/TAAngAwAJ4EMACeBnAAnggwAJ4OcACeE3AAnhSwAJ4W8ACeGLAAnhswAJ4csACeHbAAnh9wAJ4hcACeIzAAniuwAJ4ucACeMHAAnjOwAJ42sACeOzAAnj8wAJ5F8ACeSbAAnkwwAJ5RsACeU3AAnldwAJ5asACeY3AAnmRwAJ5oMACebPAAnm/wAJ5zMACednAAnn1wAJ5/cACegLAAnoQwAJ6FsACeinAAno4wAJ6TcACelTAAnpbwAJ6YMACembAAnprwAJ6ccACenbAAnp8wAJ6iMACeovAAnqRwAJ6ocACeqnAAnqywAJ6w8ACetHAAnrnwAJ7AsACex7AAnshwAJ7J8ACeynAAnswwAJ7OsACe0PAAntMwAJ7U8ACe2DAAntnwAJ7ccACe3fAAnuDwAJ7kMACe5bAAnuawAJ7osACe6jAAnuuwAJ7u8ACe8TAAnvGwAJ7z8ACe9PAAnvXwAJ72sACe+TAAnvpwAJ778ACe/TAAnwTwAJ8KMACfDvAAnxLwAJ8ZMACfHfAAnyQwAJ8q8ACfL/AAnzLwAJ818ACfOnAAnz1wAJ9E8ACfSvAAn04wAJ9TsACfWTAAn1uwAJ9gsACfZPAAn2nwAJ9u8ACfb/AAn3HwAJ9zsACfd7AAn3qwAJ99sACfgLAAn4JwAJ+EcACfjDAAn47wAJ+RsACflDAAn5iwAJ+d8ACfoLAAn6PwAJ+ncACfq7AAn66wAJ+y8ACftLAAn7kwAJ+8MACfvzAAn8IwAJ/GsACfyLAAn8wwAJ/QcACf0jAAn9TwAJ/YsACf3TAAn96wAJ/h8ACf5XAAn+dwAJ/rcACf73AAn/IwAJ/18ACf+XAAn/+wAKAF8ACgC3AAoBCwAKAVsACgF3AAoBwwAKAjMACgKrAAoDDwAKAzsACgNjAAoDlwAKA7sACgP3AAoEKwAKBGMACgT7AAoFvwAKBnsACganAAoG5wAKBxcACgdHAAoHkwAKB9MACggvAAoIPwAKCE8ACginAAoI5wAKCT8ACglvAAoJkwAKCdMACgnnAAoKQwAKCmcACgqPAAoKrwAKCusACgs3AAoLcwAKC4sACgvHAAoMDwAKDDcACgxjAAoMlwAKDMsACg0bAAoNZwAKDasACg3nAAoOGwAKDj8ACg5zAAoOrwAKDt8ACg8fAAoPWwAKD7cACg/zAAoQJwAKEIsAChC7AAoQ8wAKEVcAChF/AAoR0wAKEgsAChJvAAoSrwAKExsAChNPAAoTrwAKE/cAChRnAAoUpwAKFRMAChV7AAoWBwAKFkcAChazAAoW7wAKF1MAChe/AAoYUwAKGIcAChjnAAoZLwAKGXcAChmTAAoaCwAKGkMAChpPAAoatwAKGxMAChtvAAobuwAKHAcAChxzAAoclwAKHKMAChz7AAodZwAKHcsACh4zAAoelwAKHvcACh8rAAofcwAKH9sACiBLAAogswAKISMACiFLAAohmwAKIdsACiIbAAoiPwAKImcACiK/AAoizwAKIw8ACiMrAAojdwAKI6cACiWHAAolzwAKJfcACiaTAAonPwAKJ2cACiePAAonswAKJ98ACif3AAooPwAKKI8ACijjAAoo8wAKKTMACiljAAopiwAKKbMACinbAAoqAwAKKisACio/AAoqTwAKKl8ACiqHAAoqrwAKKtcACir/AAorJwAKK18ACivDAAosNwAKLFsACix7AAosiwAKLKcACiyzAAoswwAKLNMACizjAAos+wAKLQsACi03AAotUwAKLW8ACi23AAouGwAKLnMACi6vAAou+wAKLycACi9bAAovewAKL5sACjAnAAowSwAKMIMACjC/AAow6wAKMQ8ACjFDAAoxXwAKMZ8ACjHfAAoyCwAKMjMACjJXAAoygwAKMwcACjOTAAozxwAKNBcACjRvAAo0pwAKNN8ACjVDAAo1hwAKNbcACjXXAAo2WwAKNncACjabAAo23wAKN28ACje/AAo4FwAKOQMACjlXAAo5kwAKOfMACjn7AAo6PwAKOpMACjr/AAo7NwAKO28ACjvHAAo8SwAKPGcACjyPAAo9AwAKPTsACj3DAAo94wAKPfsACj4vAAo+awAKPpcACj6/AAo+5wAKPvMACj8fAAo/QwAKP4sACj+7AAo/4wAKQCcACkA7AApAZwAKQPsACkEzAApBXwAKQasACkHXAApCBwAKQi8ACkJfAApCkwAKQrsACkLnAApDEwAKQz8ACkNHAApDUwAKQ7MACkPXAApECwAKRCsACkRnAApE4wAKRcMACkX7AApGMwAKRxsACkfDAApIKwAKSF8ACki3AApI1wAKSSsACklfAApJswAKSc8ACknvAApKJwAKSmMACkq3AApK9wAKS0MACkt7AApL2wAKTDsACkyLAApM2wAKTRcACk0rAApNUwAKTY8ACk23AApN4wAKTgsACk5DAApOkwAKTucACk8XAApPYwAKT6cACk/zAApQOwAKUHcAClDLAApRDwAKUVMAClGvAApR7wAKUjMAClLPAApTMwAKU5MAClPfAApUKwAKVIMAClSvAApU1wAKVQsAClUvAApVUwAKVY8AClWvAApV0wAKVhcAClZXAApWtwAKVtMAClcPAApXMwAKV1cACleXAApXtwAKV/cAClf/AApYWwAKWJcACljPAApZBwAKWT8ACll/AApZtwAKWdcAClpHAApafwAKWz8AClvjAApcMwAKXHcAClyvAApc1wAKXT8ACl17AApdlwAKXicACl5bAApeiwAKXr8ACl7rAApfCwAKXzMACl9PAApfbwAKX6MACl+3AApf1wAKYC8ACmB/AApgmwAKYKcACmDXAApg6wAKYTcACmFvAAphxwAKYd8ACmHnAApiHwAKYlsACmJnAApiuwAKYwsACmPHAApj9wAKZBsACmSrAApk1wAKZasACmYzAApmZwAKZxcACmeDAApntwAKZ+sACmgfAApoRwAKaIcACmibAAppUwAKagMACmofAApqYwAKapsACmqvAApqwwAKatsACmsPAAprUwAKa4MACmvHAApr6wAKbBsACmxLAApshwAKbLsACmzvAAptUwAKbZ8ACm3DAApt4wAKbiMACm53AApuqwAKbscACm7bAApvEwAKbzcACm+XAApvpwAKcCMACnArAApwvwAKcMsACnEnAApxMwAKcVcACnF7AApxhwAKca8ACnG/AApxywAKcf8ACnIfAApyQwAKclsACnJzAApymwAKcscACnLzAApzDwAKczsACnNjAApzdwAKc48ACnOzAApz2wAKdAsACnQ7AAp0cwAKdK8ACnTvAAp1KwAKdU8ACnVXAAp1kwAKdcsACnXnAAp2AwAKdiMACnZHAAp2XwAKdo8ACnbPAAp3GwAKdy8ACndPAAp3vwAKd+MACngDAAp4KwAKeE8ACnirAAp5EwAKeX8ACnnzAAp6SwAKeqcACnrfAAp7NwAKe38ACnvDAAp8CwAKfEsACny7AAp83wAKfQMACn1bAAp9nwAKfcMACn33AAp+KwAKfocACn7bAAp/HwAKf0cACn9vAAp/lwAKf78ACn//AAqAIwAKgG8ACoCrAAqA1wAKgQcACoGDAAqBowAKgccACoH7AAqCJwAKglMACoKPAAqCrwAKgtcACoMDAAqDSwAKg3sACoPDAAqELwAKhF8ACoSfAAqFGwAKhS8ACoVXAAqFtwAKhe8ACoYzAAqGZwAKho8ACoa7AAqG5wAKhyMACodnAAqHjwAKh6sACofXAAqIMwAKiHsACoifAAqI0wAKiPsACokbAAqJRwAKiWMAComTAAqJswAKic8ACoobAAqKewAKisMACosHAAqLKwAKi1MACot/AAqMGwAKjHMACoy7AAqMzwAKjPsACo0fAAqNVwAKjXcACo3HAAqOJwAKjlcACo7HAAqO+wAKj0cACo9fAAqPhwAKj7sACo/rAAqQHwAKkHsACpEHAAqRiwAKkbcACpHbAAqR6wAKkhcACpIrAAqScwAKkqsACpLrAAqTNwAKk2MACpOfAAqT2wAKlBMACpRTAAqUowAKlQMACpVTAAqVqwAKlfsACpYvAAqWewAKlssACpcrAAqXjwAKl9sACphHAAqYowAKmQMACplfAAqZowAKmdsACponAAqaiwAKmt8ACptHAAqbrwAKm/sACpxjAAqcvwAKnS8ACp37AAqeewAKnqMACp6/AAqe8wAKn0sACp/XAAqgOwAKoQMACqGPAAqhywAKogsACqKTAAqi0wAKozcACqPDAAqkGwAKpJsACqULAAqlowAKpdsACqYTAAqmSwAKpqcACqbfAAqnCwAKp2cACqeTAAqnxwAKqB8ACqhHAAqodwAKqKsACqi7AAqo+wAKqRcACqk3AAqpewAKqZcACqnXAAqqKwAKqqcACqrjAAqrOwAKq3cACqvPAAqsBwAKrGMACqyfAAqs/wAKrScACq1LAAqtZwAKrYcACq2nAAqt2wAKrfsACq4jAAquRwAKroMACq6zAAqu6wAKrwsACq9DAAqvcwAKr5cACq/HAAqwAwAKsE8ACrBrAAqwjwAKsN8ACrELAAqxOwAKsX8ACrGbAAqxwwAKsf8ACrJ9kYXJ0LmFzeW5jVk1MaWJyYXJ5SG9va3NwYXRjaEhhc2hNYXBJdGVyYWJsZUJhc2VDYXN0U3RyZWFtQ2FzdFN0cmVhbVRyYW5zZm9ybWVyRW1wdHlJdGVyYXRvckl0ZXJhYmxlRWxlbWVudEVycm9ycHJpbnRUb1pvbmVwcmludFRvQ29uc29sZVNpbmNlYXN5bmNfZXJyb3IuZGFydGJyb2FkY2FzdF9zdHJlYW1fY29udHJvbGxlci5kYXJ0ZGVmZXJyZWRfbG9hZC5kYXJ0ZnV0dXJlLmRhcnRmdXR1cmVfaW1wbC5kYXJ0c2NoZWR1bGVfbWljcm90YXNrLmRhcnRzdHJlYW0uZGFydHN0cmVhbV9jb250cm9sbGVyLmRhcnRzdHJlYW1faW1wbC5kYXJ0c3RyZWFtX3BpcGUuZGFydHN0cmVhbV90cmFuc2Zvcm1lcnMuZGFydHRpbWVyLmRhcnR6b25lLmRhcnRfU2NoZWR1bGVJbW1lZGlhdGVDbG9zdXJlY2FsbGJhY2tfVGltZXJGYWN0b3J5Q2xvc3VyZW1pbGxpc2Vjb25kc3JlcGVhdGluZ19GdXR1cmVPblZhbHVlU1R2YWx1ZV9GdXR1cmVFcnJvclRlc3RlcnJvcl9GdXR1cmVBY3Rpb25fQXN5bmNDYWxsYmFja19UaW1lckNhbGxiYWNrQ29udHJvbGxlckNhbGxiYWNrQ29udHJvbGxlckNhbmNlbENhbGxiYWNrX05vdGlmaWNhdGlvbkhhbmRsZXJfRXZlbnRHZW5lcmF0b3JfRGF0YUhhbmRsZXJfRG9uZUhhbmRsZXJfQnJvYWRjYXN0Q2FsbGJhY2tzdWJzY3JpcHRpb25fRXJyb3JDYWxsYmFja3N0YWNrVHJhY2VfUHJlZGljYXRlX1RyYW5zZm9ybWF0aW9uX0Vycm9yVGVzdF9FcXVhbGl0eWFiX1NpbmtNYXBwZXJvdXRwdXRfVHJhbnNmb3JtRGF0YUhhbmRsZXJkYXRhc2lua19UcmFuc2Zvcm1FcnJvckhhbmRsZXJfVHJhbnNmb3JtRG9uZUhhbmRsZXJfU3Vic2NyaXB0aW9uVHJhbnNmb3JtZXJzdHJlYW1jYW5jZWxPbkVycm9yWm9uZUNhbGxiYWNrUlpvbmVVbmFyeUNhbGxiYWNrYXJnWm9uZUJpbmFyeUNhbGxiYWNrVDFUMmFyZzFhcmcySGFuZGxlVW5jYXVnaHRFcnJvckhhbmRsZXJzZWxmcGFyZW50em9uZVJ1bkhhbmRsZXJmUnVuVW5hcnlIYW5kbGVyUnVuQmluYXJ5SGFuZGxlclJlZ2lzdGVyQ2FsbGJhY2tIYW5kbGVyUmVnaXN0ZXJVbmFyeUNhbGxiYWNrSGFuZGxlclJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2tIYW5kbGVyRXJyb3JDYWxsYmFja0hhbmRsZXJTY2hlZHVsZU1pY3JvdGFza0hhbmRsZXJDcmVhdGVUaW1lckhhbmRsZXJkdXJhdGlvbkNyZWF0ZVBlcmlvZGljVGltZXJIYW5kbGVycGVyaW9kUHJpbnRIYW5kbGVybGluZUZvcmtIYW5kbGVyc3BlY2lmaWNhdGlvbnpvbmVWYWx1ZXNfQXN5bmNBd2FpdENvbXBsZXRlcl9mdXR1cmV2bTplbnRyeS1wb2ludGlzU3luY2NvbXBsZXRlX2FzeW5jQ29tcGxldGVfY29tcGxldGVXaXRoVmFsdWVjb21wbGV0ZUVycm9yZXN0X2NvbXBsZXRlRXJyb3JfYXN5bmNDb21wbGV0ZUVycm9yc3RhcnRjYWxsZnV0dXJlaXNDb21wbGV0ZWRfbWF5Q29tcGxldGVfQXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlcmNvbnRyb2xsZXJhc3luY1N0YXJCb2R5aXNBZGRpbmdvbkxpc3RlblJlY2VpdmVkaXNTY2hlZHVsZWRpc1N1c3BlbmRlZEF0WWllbGRjYW5jZWxsYXRpb25GdXR1cmVvbkxpc3Rlbm9uUmVzdW1lb25DYW5jZWxsb2NhbF9nZW5lcmF0b3JydW5Cb2R5c2NoZWR1bGVHZW5lcmF0b3Jpc1BhdXNlZGFkZGV2ZW50eWllbGQgYmVmb3JlIHN0cmVhbSBpcyBsaXN0ZW5lZCB0b3VuZXhwZWN0ZWQgeWllbGRoYXNMaXN0ZW5lcmFkZFN0cmVhbXdoZW5Eb25lQWRkaW5ndGhlbl9hZGRFcnJvcj09Y2xvc2Vpc0Nsb3NlZF9TY2hlZHVsZUltbWVkaWF0ZV9jbG9zdXJlX1RpbWVyRmFjdG9yeV9mYWN0b3J5X0Jyb2FkY2FzdFN0cmVhbWlzQnJvYWRjYXN0X0Jyb2FkY2FzdFN1YnNjcmlwdGlvbl9TVEFURV9FVkVOVF9JRF9TVEFURV9GSVJJTkdfU1RBVEVfUkVNT1ZFX0FGVEVSX0ZJUklOR19ldmVudFN0YXRlX25leHRfcHJldmlvdXNvbkRhdGFvbkVycm9yb25Eb25lX2V4cGVjdHNFdmVudGV2ZW50SWQmX3RvZ2dsZUV2ZW50SWReX2lzRmlyaW5nX3NldFJlbW92ZUFmdGVyRmlyaW5nfF9yZW1vdmVBZnRlckZpcmluZ19vblBhdXNlX29uUmVzdW1lX0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXJfU1RBVEVfSU5JVElBTF9TVEFURV9DTE9TRURfU1RBVEVfQUREU1RSRUFNX3N0YXRlX2ZpcnN0U3Vic2NyaXB0aW9uX2xhc3RTdWJzY3JpcHRpb25fYWRkU3RyZWFtU3RhdGVfZG9uZUZ1dHVyZW9uUGF1c2VCcm9hZGNhc3Qgc3RyZWFtIGNvbnRyb2xsZXJzIGRvIG5vdCBzdXBwb3J0IHBhdXNlIGNhbGxiYWNrc29uUGF1c2VIYW5kbGVyb25SZXN1bWVIYW5kbGVyX2lzRW1wdHlfaGFzT25lTGlzdGVuZXJfaXNBZGRpbmdTdHJlYW1fbWF5QWRkRXZlbnQ8X2Vuc3VyZURvbmVGdXR1cmVfYWRkTGlzdGVuZXJvbGRMYXN0X3JlbW92ZUxpc3RlbmVyX2NvbnRyb2xsZXJwcmV2aW91c25leHRfc3Vic2NyaWJlX3JlY29yZENhbmNlbHN1Yl9jYWxsT25DYW5jZWxfcmVjb3JkUGF1c2VfcmVjb3JkUmVzdW1lX2FkZEV2ZW50RXJyb3JDYW5ub3QgYWRkIG5ldyBldmVudHMgYWZ0ZXIgY2FsbGluZyBjbG9zZUNhbm5vdCBhZGQgbmV3IGV2ZW50cyB3aGlsZSBkb2luZyBhbiBhZGRTdHJlYW1fc2VuZERhdGFyZXBsYWNlbWVudGVycm9yQ2FsbGJhY2tfc2VuZEVycm9yZG9uZUZ1dHVyZV9zZW5kRG9uZWRvbmVhZGRTdHJlYW1GdXR1cmVfYWRkX2FkZEVycm9yX2Nsb3NlYWRkU3RhdGV+X2ZvckVhY2hMaXN0ZW5lcmFjdGlvbkNhbm5vdCBmaXJlIG5ldyBldmVudC4gQ29udHJvbGxlciBpcyBhbHJlYWR5IGZpcmluZyBhbiBldmVudGlkX1N5bmNCcm9hZGNhc3RTdHJlYW1Db250cm9sbGVyX0FzeW5jQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcl9hZGRQZW5kaW5nX0FzQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcl9wZW5kaW5nX2hhc1BlbmRpbmdpc0VtcHR5X2FkZFBlbmRpbmdFdmVudGhhbmRsZU5leHRyZXN1bHRjbGVhckRlZmVycmVkTGlicmFyeURhcnQgc2RrIHYuIDEuOGxpYnJhcnlOYW1ldXJpbG9hZERlZmVycmVkTG9hZEV4Y2VwdGlvbl9zdG9TdHJpbmdEZWZlcnJlZExvYWRFeGNlcHRpb246ICcnRnV0dXJlT3JGdXR1cmVPciBjYW4ndCBiZSBpbnN0YW50aWF0ZWRGdXR1cmVfbnVsbEZ1dHVyZV9mYWxzZUZ1dHVyZWNvbXB1dGF0aW9uX2NvbXBsZXRlc21pY3JvdGFza3N5bmNkZWxheWVkd2FpdGZ1dHVyZXNlYWdlckVycm9yY2xlYW5VcHZhbHVlc3JlbWFpbmluZ2hhbmRsZUVycm9ydGhlRXJyb3J0aGVTdGFja1RyYWNlLTpzeW5jLWZvci1pdGVyYXRvcml0ZXJhdG9ybW92ZU5leHRjdXJyZW50cG9zW109K2FueWNvbXBsZXRlcm9uVmFsdWVzdGFja2ZvckVhY2hlbGVtZW50c19rVHJ1ZWRvV2hpbGVkb25lU2lnbmFsbmV4dEl0ZXJhdGlvbmJpbmRVbmFyeUNhbGxiYWNrR3VhcmRlZGtlZXBHb2luZ2NhdGNoRXJyb3J0ZXN0d2hlbkNvbXBsZXRlYXNTdHJlYW10aW1lb3V0dGltZUxpbWl0b25UaW1lb3V0VGltZW91dEV4Y2VwdGlvbm1lc3NhZ2VUaW1lb3V0RXhjZXB0aW9uIGFmdGVyIDogQ29tcGxldGVyX0NvbXBsZXRlckZ1dHVyZSBhbHJlYWR5IGNvbXBsZXRlZF9Bc3luY0NvbXBsZXRlcl9TeW5jQ29tcGxldGVyX0Z1dHVyZUxpc3RlbmVybWFza1ZhbHVlbWFza0Vycm9ybWFza1Rlc3RFcnJvcm1hc2tXaGVuY29tcGxldGVzdGF0ZUNoYWluc3RhdGVUaGVuc3RhdGVUaGVuT25lcnJvcnN0YXRlQ2F0Y2hlcnJvcnN0YXRlQ2F0Y2hlcnJvclRlc3RzdGF0ZVdoZW5jb21wbGV0ZW1hc2tUeXBlc3RhdGVJc0F3YWl0X25leHRMaXN0ZW5lcnN0YXRldGhlbkF3YWl0X3pvbmVoYW5kbGVzVmFsdWVoYW5kbGVzRXJyb3JoYXNFcnJvclRlc3RoYW5kbGVzQ29tcGxldGVpc0F3YWl0X29uVmFsdWVfb25FcnJvcl9lcnJvclRlc3Rfd2hlbkNvbXBsZXRlQWN0aW9uaGFzRXJyb3JDYWxsYmFja2hhbmRsZVZhbHVlc291cmNlUmVzdWx0cnVuVW5hcnltYXRjaGVzRXJyb3JUZXN0YXN5bmNFcnJvcnJ1bkJpbmFyeWhhbmRsZVdoZW5Db21wbGV0ZXJ1bl9GdXR1cmVfYXdhaXRlcl9zdGF0ZUluY29tcGxldGVfc3RhdGVQZW5kaW5nQ29tcGxldGVfc3RhdGVDaGFpbmVkX3N0YXRlVmFsdWVfc3RhdGVFcnJvcl9yZXN1bHRPckxpc3RlbmVyc2ltbWVkaWF0ZXpvbmVWYWx1ZV9zZXRWYWx1ZWltbWVkaWF0ZUVycm9yX2lzUGVuZGluZ0NvbXBsZXRlX21heUFkZExpc3RlbmVyPD1faXNDaGFpbmVkX2lzQ29tcGxldGU+PV9oYXNFcnJvcl9jb250aW51YXRpb25GdW5jdGlvbnNsaXN0ZW5lcl9zZXRDaGFpbmVkc291cmNlY3VycmVudFpvbmVyZWdpc3RlclVuYXJ5Q2FsbGJhY2tfdGhlbkF3YWl0RXJlZ2lzdGVyQ2FsbGJhY2tfc2V0UGVuZGluZ0NvbXBsZXRlX2NsZWFyUGVuZGluZ0NvbXBsZXRlX2Vycm9yX2NoYWluU291cmNlX3NldEVycm9yT2JqZWN0X3NldEVycm9yX2Nsb25lUmVzdWx0c2NoZWR1bGVNaWNyb3Rhc2tfcHJlcGVuZExpc3RlbmVyc2xpc3RlbmVyc2V4aXN0aW5nTGlzdGVuZXJzY3Vyc29yX3JldmVyc2VMaXN0ZW5lcnNfcmVtb3ZlTGlzdGVuZXJzcHJldl9jaGFpbkZvcmVpZ25GdXR1cmV0YXJnZXRfY2hhaW5Db3JlRnV0dXJlX2NoYWluRnV0dXJlX3Byb3BhZ2F0ZVRvTGlzdGVuZXJzaGFzRXJyb3JoYW5kbGVVbmNhdWdodEVycm9ybGlzdGVuZXJIYXNFcnJvcmxpc3RlbmVyVmFsdWVPckVycm9yaW5TYW1lRXJyb3Jab25lb2xkWm9uZWhhbmRsZVdoZW5Db21wbGV0ZUNhbGxiYWNrY29tcGxldGVSZXN1bHRvcmlnaW5hbFNvdXJjZWhhbmRsZVZhbHVlQ2FsbGJhY2tjaGFpblNvdXJjZXRpbWVyRnV0dXJlIG5vdCBjb21wbGV0ZWR2aXNBY3RpdmVjYW5jZWxfQXN5bmNDYWxsYmFja0VudHJ5X0FzeW5jUnVuX3NjaGVkdWxlSW1tZWRpYXRlTWljcm90YXNrcyBhcmUgbm90IHN1cHBvcnRlZFN0cmVhbV9yZWRpcmVjdGluZyNfaW50ZXJuYWxlbXB0eSNyZWRpcmVjdGluZ19mYWN0b3J5I3R5cGVBcmcwMi41X2Nsb3NlVW5jaGVja2VkZnJvbUZ1dHVyZWZyb21GdXR1cmVzY291bnRmcm9tSXRlcmFibGVwZXJpb2RpY2NvbXB1dGF0aW9uQ291bnR3YXRjaHNlbmRFdmVudHJlc2V0c3RhcnRQZXJpb2RpY1RpbWVyc3RvcGVsYXBzZWRldmVudFRyYW5zZm9ybWVkbWFwU2lua2Nhc3RGcm9tYXNCcm9hZGNhc3RTdHJlYW1saXN0ZW53aGVyZW1hcGNvbnZlcnRhc3luY01hcG5ld1ZhbHVlcGF1c2VyZXN1bWVhc3luY0V4cGFuZG5ld1N0cmVhbWV4cGFuZHBpcGVzdHJlYW1Db25zdW1lcnRyYW5zZm9ybXN0cmVhbVRyYW5zZm9ybWVyYmluZHJlZHVjZWNvbWJpbmVzZWVuRmlyc3RlbGVtZW50Zm9sZGluaXRpYWxWYWx1ZWpvaW5zZXBhcmF0b3JidWZmZXJmaXJzdHdyaXRlY29udGFpbnNuZWVkbGVpc01hdGNoZXZlcnlsZW5ndGhjYXN0dG9MaXN0dG9TZXRkcmFpbmZ1dHVyZVZhbHVlYXNGdXR1cmV0YWtldGFrZVdoaWxlc2tpcHNraXBXaGlsZWRpc3RpbmN0ZXF1YWxzbGFzdGZvdW5kUmVzdWx0c2luZ2xlZmlyc3RXaGVyZW9yRWxzZWxhc3RXaGVyZXNpbmdsZVdoZXJlZWxlbWVudEF0aW5kZXhlbGVtZW50SW5kZXhjcmVhdGVUaW1lck5vIHN0cmVhbSBldmVudHJlZ2lzdGVyZWRPblRpbWVvdXR3cmFwcGVyX3NpbmtydW5VbmFyeUd1YXJkZWRTdHJlYW1TdWJzY3JpcHRpb25oYW5kbGVEYXRhaGFuZGxlRG9uZXJlc3VtZVNpZ25hbEV2ZW50U2lua1N0cmVhbVZpZXdfc3RyZWFtU3RyZWFtQ29uc3VtZXJTdHJlYW1TaW5rU3RyZWFtVHJhbnNmb3JtZXIjdHlwZUFyZzFmcm9tSGFuZGxlcnNmcm9tQmluZDIuMVNTU1RUU1RUUlNSVFN0cmVhbVRyYW5zZm9ybWVyQmFzZVN0cmVhbUl0ZXJhdG9yX0NvbnRyb2xsZXJFdmVudFNpbmtXcmFwcGVyU3RyZWFtQ29udHJvbGxlcmJyb2FkY2FzdG9uTGlzdGVuSGFuZGxlcm9uQ2FuY2VsSGFuZGxlclN5bmNocm9ub3VzU3RyZWFtQ29udHJvbGxlcl9TdHJlYW1Db250cm9sbGVyTGlmZWN5Y2xlX1N0cmVhbUNvbnRyb2xsZXJCYXNlX1N0cmVhbUNvbnRyb2xsZXJfU1RBVEVfU1VCU0NSSUJFRF9TVEFURV9DQU5DRUxFRF9TVEFURV9TVUJTQ1JJUFRJT05fTUFTS192YXJEYXRhX2lzQ2FuY2VsZWRfaXNJbml0aWFsU3RhdGVfc3Vic2NyaXB0aW9uX2lzSW5wdXRQYXVzZWRfcGVuZGluZ0V2ZW50c3ZhckRhdGFfZW5zdXJlUGVuZGluZ0V2ZW50c19iYWRFdmVudFN0YXRlQ2Fubm90IGFkZCBldmVudCBhZnRlciBjbG9zaW5nQ2Fubm90IGFkZCBldmVudCB3aGlsZSBhZGRpbmcgYSBzdHJlYW1TdHJlYW0gaGFzIGFscmVhZHkgYmVlbiBsaXN0ZW5lZCB0by5wZW5kaW5nRXZlbnRzX3NldFBlbmRpbmdFdmVudHNfZ3VhcmRDYWxsYmFja19TeW5jU3RyZWFtQ29udHJvbGxlckRpc3BhdGNoX0FzeW5jU3RyZWFtQ29udHJvbGxlckRpc3BhdGNoX0FzeW5jU3RyZWFtQ29udHJvbGxlcl9TeW5jU3RyZWFtQ29udHJvbGxlcl9Db250cm9sbGVyU3RyZWFtX2NyZWF0ZVN1YnNjcmlwdGlvbmhhc2hDb2Rlb3RoZXJfQ29udHJvbGxlclN1YnNjcmlwdGlvbl9vbkNhbmNlbF9TdHJlYW1TaW5rV3JhcHBlcl90YXJnZXRfQWRkU3RyZWFtU3RhdGVhZGRTdWJzY3JpcHRpb25tYWtlRXJyb3JIYW5kbGVyX1N0cmVhbUNvbnRyb2xsZXJBZGRTdHJlYW1TdGF0ZV9FdmVudFNpbmtfRXZlbnREaXNwYXRjaF9CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb25fU1RBVEVfQ0FOQ0VMX09OX0VSUk9SX1NUQVRFX0lOUFVUX1BBVVNFRF9TVEFURV9XQUlUX0ZPUl9DQU5DRUxfU1RBVEVfSU5fQ0FMTEJBQ0tfU1RBVEVfSEFTX1BFTkRJTkdfU1RBVEVfUEFVU0VfQ09VTlRfb25EYXRhX29uRG9uZV9jYW5jZWxGdXR1cmVzY2hlZHVsZXJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2toYW5kbGVFcnJvciBjYWxsYmFjayBtdXN0IHRha2UgZWl0aGVyIGFuIE9iamVjdCAodGhlIGVycm9yKSwgb3IgYm90aCBhbiBPYmplY3QgKHRoZSBlcnJvcikgYW5kIGEgU3RhY2tUcmFjZS53YXNQYXVzZWRfaXNQYXVzZWR3YXNJbnB1dFBhdXNlZGNhbmNlbFNjaGVkdWxlX2luQ2FsbGJhY2tfZGVjcmVtZW50UGF1c2VDb3VudF9tYXlSZXN1bWVJbnB1dF9jYW5jZWxjYW5jZWxGdXR1cmVfaXNDbG9zZWRfd2FpdHNGb3JDYW5jZWxfY2FuRmlyZV9jYW5jZWxPbkVycm9ycGVuZGluZ19jaGVja1N0YXRlc2VuZEVycm9ycnVuQmluYXJ5R3VhcmRlZHNlbmREb25lcnVuR3VhcmRlZGlzSW5wdXRQYXVzZWRfU3RyZWFtSW1wbF9vbkxpc3Rlbl9HZW5lcmF0ZWRTdHJlYW1JbXBsX2lzVXNlZF9JdGVyYWJsZVBlbmRpbmdFdmVudHNfaXRlcmF0b3JkaXNwYXRjaE5vIGV2ZW50cyBwZW5kaW5nLmhhc01vcmVfRGVsYXllZEV2ZW50cGVyZm9ybV9EZWxheWVkRGF0YV9EZWxheWVkRXJyb3JfRGVsYXllZERvbmVObyBldmVudHMgYWZ0ZXIgYSBkb25lLl9QZW5kaW5nRXZlbnRzX1NUQVRFX1VOU0NIRURVTEVEX1NUQVRFX1NDSEVEVUxFRF9ldmVudFNjaGVkdWxlZG9sZFN0YXRlX1N0cmVhbUltcGxFdmVudHNmaXJzdFBlbmRpbmdFdmVudGxhc3RQZW5kaW5nRXZlbnRfRG9uZVN0cmVhbVN1YnNjcmlwdGlvbl9ET05FX1NFTlRfU0NIRURVTEVEX1BBVVNFRF9zY2hlZHVsZV9pc1NlbnRfaXNTY2hlZHVsZWRfQXNCcm9hZGNhc3RTdHJlYW1fc291cmNlX29uTGlzdGVuSGFuZGxlcl9vbkNhbmNlbEhhbmRsZXJzaHV0ZG93bl9jYW5jZWxTdWJzY3JpcHRpb25fcGF1c2VTdWJzY3JpcHRpb25fcmVzdW1lU3Vic2NyaXB0aW9uX2lzU3Vic2NyaXB0aW9uUGF1c2VkX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbldyYXBwZXJDYW5ub3QgY2hhbmdlIGhhbmRsZXJzIG9mIGFzQnJvYWRjYXN0U3RyZWFtIHNvdXJjZSBzdWJzY3JpcHRpb24uX1N0cmVhbUl0ZXJhdG9yX3N0YXRlRGF0YUFscmVhZHkgd2FpdGluZyBmb3IgbmV4dC5faW5pdGlhbGl6ZU9yRG9uZXN0YXRlRGF0YW1vdmVOZXh0RnV0dXJlX0VtcHR5U3RyZWFtX0ZvcndhcmRpbmdTdHJlYW1faGFuZGxlRGF0YV9oYW5kbGVFcnJvcl9oYW5kbGVEb25lX0ZvcndhcmRpbmdTdHJlYW1TdWJzY3JpcHRpb25fV2hlcmVTdHJlYW1fdGVzdGlucHV0RXZlbnRzYXRpc2ZpZXNfTWFwU3RyZWFtX3RyYW5zZm9ybW91dHB1dEV2ZW50X0V4cGFuZFN0cmVhbV9leHBhbmRfSGFuZGxlRXJyb3JTdHJlYW1tYXRjaGVzX1Rha2VTdHJlYW1fY291bnQ+X1N0YXRlU3RyZWFtU3Vic2NyaXB0aW9uX3NoYXJlZFN0YXRlX2ZsYWdmbGFnX3ZhbHVlX1Rha2VXaGlsZVN0cmVhbV9Ta2lwU3RyZWFtX1NraXBXaGlsZVN0cmVhbWhhc0ZhaWxlZF9EaXN0aW5jdFN0cmVhbV9TRU5USU5FTF9lcXVhbHNwcmV2aW91c0V2ZW50aXNFcXVhbF9FdmVudFNpbmtXcmFwcGVyX1NpbmtUcmFuc2Zvcm1lclN0cmVhbVN1YnNjcmlwdGlvbl90cmFuc2Zvcm1lclNpbmttYXBwZXJldmVudFNpbmtfaXNTdWJzY3JpYmVkU3RyZWFtIGlzIGFscmVhZHkgY2xvc2VkX1N0cmVhbVNpbmtUcmFuc2Zvcm1lcl9zaW5rTWFwcGVyX0JvdW5kU2lua1N0cmVhbV9IYW5kbGVyRXZlbnRTaW5rVGhlIHByb3ZpZGVkIHNpbmsgbXVzdCBub3QgYmUgbnVsbC5TaW5rIGlzIGNsb3NlZF9TdHJlYW1IYW5kbGVyVHJhbnNmb3JtZXJvdXRwdXRTaW5rX1N0cmVhbUJpbmRUcmFuc2Zvcm1lcl9iaW5kX1N0cmVhbVN1YnNjcmlwdGlvblRyYW5zZm9ybWVyX0JvdW5kU3Vic2NyaXB0aW9uU3RyZWFtVGltZXJiaW5kQ2FsbGJhY2tHdWFyZGVkY3JlYXRlUGVyaW9kaWNUaW1lcmJvdW5kQ2FsbGJhY2t0aWNrX2NyZWF0ZVRpbWVyVGltZXIgaW50ZXJmYWNlIG5vdCBzdXBwb3J0ZWQuaW5NaWxsaXNlY29uZHNfY3JlYXRlUGVyaW9kaWNUaW1lckFzeW5jRXJyb3Jfc3RhY2tUcmFjZW5vU3VjaE1ldGhvZF9zdGFja1RyYWNlPV9ab25lRnVuY3Rpb25mdW5jdGlvblpvbmVTcGVjaWZpY2F0aW9ucHJpbnRmb3JrZnJvbV9ab25lU3BlY2lmaWNhdGlvblpvbmVEZWxlZ2F0ZVpvbmVyb290X2N1cnJlbnRlcnJvclpvbmVvdGhlclpvbmVhcmd1bWVudGFyZ3VtZW50MWFyZ3VtZW50MmJpbmRDYWxsYmFja2JpbmRVbmFyeUNhbGxiYWNrYmluZEJpbmFyeUNhbGxiYWNrYmluZEJpbmFyeUNhbGxiYWNrR3VhcmRlZF9lbnRlcl9sZWF2ZVtda2V5X1pvbmVEZWxlZ2F0ZV9kZWxlZ2F0aW9uVGFyZ2V0aW1wbGVtZW50YXRpb25faGFuZGxlVW5jYXVnaHRFcnJvcmltcGxab25laGFuZGxlcl9ydW5fcnVuVW5hcnlfcnVuQmluYXJ5X3JlZ2lzdGVyQ2FsbGJhY2tfcmVnaXN0ZXJVbmFyeUNhbGxiYWNrX3JlZ2lzdGVyQmluYXJ5Q2FsbGJhY2tfZXJyb3JDYWxsYmFja19zY2hlZHVsZU1pY3JvdGFza19wcmludF9mb3JrX1pvbmVfZGVsZWdhdGVfbWFwX0N1c3RvbVpvbmVfZGVsZWdhdGVDYWNoZXJlZ2lzdGVyZWRjb250YWluc0tleXBhcmVudERlbGVnYXRlaW1wbGVtZW50YXRpb25ab25lX1Jvb3Rab25lX3Jvb3RNYXBfcm9vdERlbGVnYXRlX2xvYWRlZExpYnJhcmllc19uZXh0Q2FsbGJhY2tfbGFzdENhbGxiYWNrX2xhc3RQcmlvcml0eUNhbGxiYWNrX2lzSW5DYWxsYmFja0xvb3Bfcm9vdFpvbmVfZmF0YWxEYXJ0QXN5bmNfZmF0YWxtc2dfYXN5bmNUaGVuV3JhcHBlckhlbHBlcmNvbnRpbnVhdGlvbl9hc3luY0Vycm9yV3JhcHBlckhlbHBlcl9hd2FpdEhlbHBlcm9iamVjdHRoZW5DYWxsYmFja2F3YWl0ZXJfYXN5bmNTdGFyTGlzdGVuSGVscGVyX2FzeW5jU3Rhck1vdmVOZXh0SGVscGVyX2NvbXBsZXRlT25Bc3luY1JldHVybl9hc3luY1N0YWNrVHJhY2VIZWxwZXJ2bTpwcmVmZXItaW5saW5lU3RhY2tUcmFjZV9hc3luY1N0YWNrVHJhY2VIZWxwZXJhc3luY19vcF9jbGVhckFzeW5jVGhyZWFkU3RhY2tUcmFjZVN0YWNrVHJhY2VfY2xlYXJBc3luY1RocmVhZFN0YWNrVHJhY2Vfc2V0QXN5bmNUaHJlYWRTdGFja1RyYWNlU3RhY2tUcmFjZV9zZXRBc3luY1RocmVhZFN0YWNrVHJhY2VfbW92ZU5leHREZWJ1Z2dlclN0ZXBDaGVja0FzeW5jU3Rhck1vdmVOZXh0X2RlYnVnZ2VyU3RlcENoZWNrX3NldFNjaGVkdWxlSW1tZWRpYXRlQ2xvc3VyZWNsb3N1cmVfZW5zdXJlU2NoZWR1bGVJbW1lZGlhdGVfaW52b2tlRXJyb3JIYW5kbGVyZXJyb3JIYW5kbGVydW5hcnlFcnJvckhhbmRsZXJfY29tcGxldGVXaXRoRXJyb3JDYWxsYmFja19hc3luY0NvbXBsZXRlV2l0aEVycm9yQ2FsbGJhY2tfbm9uTnVsbEVycm9yX3JlZ2lzdGVyRXJyb3JIYW5kbGVyRXJyb3IgaGFuZGxlciBtdXN0IGFjY2VwdCBvbmUgT2JqZWN0IG9yIG9uZSBPYmplY3QgYW5kIGEgU3RhY2tUcmFjZSBhcyBhcmd1bWVudHMsIGFuZCByZXR1cm4gYSBhIHZhbGlkIHJlc3VsdF9taWNyb3Rhc2tMb29wZW50cnlfc3RhcnRNaWNyb3Rhc2tMb29wX3NjaGVkdWxlQXN5bmNDYWxsYmFja25ld0VudHJ5X3NjaGVkdWxlUHJpb3JpdHlBc3luY0NhbGxiYWNrX3J1bkd1YXJkZWRub3RpZmljYXRpb25IYW5kbGVyX251bGxEYXRhSGFuZGxlcl9udWxsRXJyb3JIYW5kbGVyX251bGxEb25lSGFuZGxlcl9ydW5Vc2VyQ29kZXVzZXJDb2Rlb25TdWNjZXNzX2NhbmNlbEFuZEVycm9yX2NhbmNlbEFuZEVycm9yV2l0aFJlcGxhY2VtZW50X2NhbmNlbEFuZEVycm9yQ2xvc3VyZV9jYW5jZWxBbmRWYWx1ZV9hZGRFcnJvcldpdGhSZXBsYWNlbWVudF9wYXJlbnREZWxlZ2F0ZV9yb290SGFuZGxlVW5jYXVnaHRFcnJvcl9yZXRocm93QXN5bmNfcmV0aHJvd19yb290UnVub2xkX3Jvb3RSdW5VbmFyeV9yb290UnVuQmluYXJ5X3Jvb3RSZWdpc3RlckNhbGxiYWNrX3Jvb3RSZWdpc3RlclVuYXJ5Q2FsbGJhY2tfcm9vdFJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2tfcm9vdEVycm9yQ2FsbGJhY2tfcm9vdFNjaGVkdWxlTWljcm90YXNraGFzRXJyb3JIYW5kbGVyX3Jvb3RDcmVhdGVUaW1lcl9yb290Q3JlYXRlUGVyaW9kaWNUaW1lcl9yb290UHJpbnRfcHJpbnRUb1pvbmVfcm9vdEZvcmtab25lU3BlY2lmaWNhdGlvbnMgbXVzdCBiZSBpbnN0YW50aWF0ZWQgd2l0aCB0aGUgcHJvdmlkZWQgY29uc3RydWN0b3IudmFsdWVNYXBydW5ab25lZGJvZHl6b25lU3BlY2lmaWNhdGlvbnVuYXJ5T25FcnJvcmJpbmFyeU9uRXJyb3JvbkVycm9yIGNhbGxiYWNrIG11c3QgdGFrZSBlaXRoZXIgYW4gT2JqZWN0IF9ydW5ab25lZGRhcnQuY29sbGVjdGlvbmludGVybmFsVWludDMyTGlzdFN5bWJvbFJhbmRvbWNvbGxlY3Rpb25zLmRhcnRoYXNoX21hcC5kYXJ0aGFzaF9zZXQuZGFydGl0ZXJhYmxlLmRhcnRpdGVyYXRvci5kYXJ0bGlua2VkX2hhc2hfbWFwLmRhcnRsaW5rZWRfaGFzaF9zZXQuZGFydGxpbmtlZF9saXN0LmRhcnRsaXN0LmRhcnRtYXBzLmRhcnRxdWV1ZS5kYXJ0c2V0LmRhcnRzcGxheV90cmVlLmRhcnRLX0hhc2hlcl9IYXNoTWFwVl9JTklUSUFMX0NBUEFDSVRZX2VsZW1lbnRDb3VudF9idWNrZXRzX21vZGlmaWNhdGlvbkNvdW50aXNOb3RFbXB0eWtleXNidWNrZXRzY29udGFpbnNWYWx1ZWlfYWRkRW50cnlwdXRJZkFic2VudGlmQWJzZW50c3RhbXBhZGRBbGxyZW1vdmVfcmVtb3ZlRW50cnlwcmV2aW91c0luQnVja2V0YnVja2V0SW5kZXhuZXdFbGVtZW50czw8X3Jlc2l6ZW9sZEJ1Y2tldHNvbGRMZW5ndGhuZXdMZW5ndGhuZXdCdWNrZXRzX25ld0tleVNldF9DdXN0b21IYXNoTWFwX2hhc2hDb2RlX3ZhbGlkS2V5dmFsaWRLZXlfSWRlbnRpdHlIYXNoTWFwX0hhc2hNYXBFbnRyeV9IYXNoTWFwSXRlcmFibGVfSGFzaE1hcEtleUl0ZXJhYmxlX0hhc2hNYXBWYWx1ZUl0ZXJhYmxlX0hhc2hNYXBJdGVyYXRvcl9zdGFtcF9pbmRleF9lbnRyeV9IYXNoTWFwS2V5SXRlcmF0b3JfSGFzaE1hcFZhbHVlSXRlcmF0b3JfSGFzaFNldGUxZTJfbmV3RW1wdHlsb29rdXBuZXh0RW50cnlvYmplY3RzX3JlbW92ZXJlbW92ZUFsbG9iamVjdHNUb1JlbW92ZV9maWx0ZXJXaGVyZXJlbW92ZU1hdGNoaW5nbW9kaWZpY2F0aW9uQ291bnR0ZXN0UmVzdWx0cmVtb3ZlV2hlcmVyZXRhaW5XaGVyZW5ld0luZGV4X25ld1NldF9uZXdTaW1pbGFyU2V0X0lkZW50aXR5SGFzaFNldF9DdXN0b21IYXNoU2V0X2VxdWFsaXR5X2hhc2hlcmNvbnRhaW5zQWxsX0hhc2hTZXRFbnRyeV9IYXNoU2V0SXRlcmF0b3Jfc2V0X0hhc2hGaWVsZEJhc2VfaGFzaE1hc2tfZGF0YV91c2VkRGF0YV9kZWxldGVkS2V5c2RhdGFTaXplX0hhc2hWTUJhc2V2bTpleGFjdC1yZXN1bHQtdHlwZWRhcnQ6dHlwZWRfZGF0YSNfVWludDMyTGlzdExpbmtlZEhhc2hNYXBfZ2V0SW5kZXhMaW5rZWRIYXNoTWFwX3NldEluZGV4ZGFydDpjb3JlI19TbWlMaW5rZWRIYXNoTWFwX2dldEhhc2hNYXNrTGlua2VkSGFzaE1hcF9zZXRIYXNoTWFza2RhcnQ6Y29yZSNfTGlzdExpbmtlZEhhc2hNYXBfZ2V0RGF0YUxpbmtlZEhhc2hNYXBfc2V0RGF0YUxpbmtlZEhhc2hNYXBfZ2V0VXNlZERhdGFMaW5rZWRIYXNoTWFwX3NldFVzZWREYXRhTGlua2VkSGFzaE1hcF9nZXREZWxldGVkS2V5c0xpbmtlZEhhc2hNYXBfc2V0RGVsZXRlZEtleXNfSGFzaEJhc2VfSU5JVElBTF9JTkRFWF9CSVRTX0lOSVRJQUxfSU5ERVhfU0laRV9VTlVTRURfUEFJUl9ERUxFVEVEX1BBSVJfaW5kZXhTaXplVG9IYXNoTWFza2luZGV4U2l6ZWluZGV4Qml0c2JpdExlbmd0aF9oYXNoUGF0dGVybmZ1bGxIYXNoaGFzaE1hc2tzaXplbWFza2VkSGFzaD4+Kl9maXJzdFByb2Jlc2l6ZU1hc2tfbmV4dFByb2JlX2lzRGVsZXRlZGtleU9yVmFsdWVfc2V0RGVsZXRlZEF0ZF9jaGVja1N1bV9pc01vZGlmaWVkU2luY2VvbGREYXRhb2xkQ2hlY2tTdW1fT3BlcmF0b3JFcXVhbHNBbmRIYXNoQ29kZV9JZGVudGljYWxBbmRJZGVudGl0eUhhc2hDb2RlX19JbnRlcm5hbExpbmtlZEhhc2hNYXAmX0hhc2hWTUJhc2UmTWFwTWl4aW5SS1JWdXBkYXRlS2V5IG5vdCBpbiBtYXAudXBkYXRlQWxsZW50cmllc0syVjJhZGRFbnRyaWVzbmV3RW50cmllc2tleXNUb1JlbW92ZV9fSW50ZXJuYWxMaW5rZWRIYXNoTWFwJl9IYXNoVk1CYXNlJk1hcE1peGluJl9MaW5rZWRIYXNoTWFwTWl4aW5fcmVoYXNoX2luaXRvbGRVc2VkX3JlZ2VuZXJhdGVJbmRleHRtcFVzZWRfaW5zZXJ0aGFzaFBhdHRlcm5fZmluZFZhbHVlT3JJbnNlcnRQb2ludG1heEVudHJpZXNmaXJzdERlbGV0ZWR1bmFyeS1wYWlyX2dldFZhbHVlT3JEYXRha2l2aV9fSW50ZXJuYWxMaW5rZWRIYXNoTWFwJl9IYXNoVk1CYXNlJk1hcE1peGluJl9MaW5rZWRIYXNoTWFwTWl4aW4mX0hhc2hCYXNlX19JbnRlcm5hbExpbmtlZEhhc2hNYXAmX0hhc2hWTUJhc2UmTWFwTWl4aW4mX0xpbmtlZEhhc2hNYXBNaXhpbiZfSGFzaEJhc2UmX09wZXJhdG9yRXF1YWxzQW5kSGFzaENvZGVfSW50ZXJuYWxMaW5rZWRIYXNoTWFwX0xpbmtlZEhhc2hNYXBNaXhpbl9fQ29tcGFjdExpbmtlZElkZW50aXR5SGFzaE1hcCZfSGFzaEZpZWxkQmFzZSZNYXBNaXhpbl9fQ29tcGFjdExpbmtlZElkZW50aXR5SGFzaE1hcCZfSGFzaEZpZWxkQmFzZSZNYXBNaXhpbiZfTGlua2VkSGFzaE1hcE1peGluX19Db21wYWN0TGlua2VkSWRlbnRpdHlIYXNoTWFwJl9IYXNoRmllbGRCYXNlJk1hcE1peGluJl9MaW5rZWRIYXNoTWFwTWl4aW4mX0hhc2hCYXNlX19Db21wYWN0TGlua2VkSWRlbnRpdHlIYXNoTWFwJl9IYXNoRmllbGRCYXNlJk1hcE1peGluJl9MaW5rZWRIYXNoTWFwTWl4aW4mX0hhc2hCYXNlJl9JZGVudGljYWxBbmRJZGVudGl0eUhhc2hDb2RlX0NvbXBhY3RMaW5rZWRJZGVudGl0eUhhc2hNYXBfX0NvbXBhY3RMaW5rZWRDdXN0b21IYXNoTWFwJl9IYXNoRmllbGRCYXNlJk1hcE1peGluX19Db21wYWN0TGlua2VkQ3VzdG9tSGFzaE1hcCZfSGFzaEZpZWxkQmFzZSZNYXBNaXhpbiZfTGlua2VkSGFzaE1hcE1peGluX19Db21wYWN0TGlua2VkQ3VzdG9tSGFzaE1hcCZfSGFzaEZpZWxkQmFzZSZNYXBNaXhpbiZfTGlua2VkSGFzaE1hcE1peGluJl9IYXNoQmFzZV9Db21wYWN0TGlua2VkQ3VzdG9tSGFzaE1hcG9fQ29tcGFjdEl0ZXJhYmxlX3RhYmxlX2xlbl9vZmZzZXRfc3RlcF9Db21wYWN0SXRlcmF0b3J0YWJsZV9fQ29tcGFjdExpbmtlZEhhc2hTZXQmX0hhc2hGaWVsZEJhc2UmX0hhc2hCYXNlX19Db21wYWN0TGlua2VkSGFzaFNldCZfSGFzaEZpZWxkQmFzZSZfSGFzaEJhc2UmX09wZXJhdG9yRXF1YWxzQW5kSGFzaENvZGVfX0NvbXBhY3RMaW5rZWRIYXNoU2V0Jl9IYXNoRmllbGRCYXNlJl9IYXNoQmFzZSZfT3BlcmF0b3JFcXVhbHNBbmRIYXNoQ29kZSZTZXRNaXhpbmZvbGxvd2VkQnl3aGVyZVR5cGVyZXRhaW5BbGx0b1JlbW92ZXVuaW9uaW50ZXJzZWN0aW9uZGlmZmVyZW5jZWdyb3dhYmxlaXR7fW5mb3VuZE1hdGNoaW5nX0NvbXBhY3RMaW5rZWRIYXNoU2V0bmV3U2V0b2Zmc2V0aW5zZXJ0aW9uUG9pbnRfZ2V0S2V5T3JEYXRha19fQ29tcGFjdExpbmtlZElkZW50aXR5SGFzaFNldCZfQ29tcGFjdExpbmtlZEhhc2hTZXQmX0lkZW50aWNhbEFuZElkZW50aXR5SGFzaENvZGVfQ29tcGFjdExpbmtlZElkZW50aXR5SGFzaFNldF9Db21wYWN0TGlua2VkQ3VzdG9tSGFzaFNldFVubW9kaWZpYWJsZUxpc3RWaWV3aXNWYWxpZEtleWlkZW50aXR5b2ZpdGVyYWJsZWZyb21JdGVyYWJsZXNmcm9tRW50cmllc0hhc2hTZXRJdGVyYWJsZU1peGluKClpdGVyYWJsZVRvU2hvcnRTdHJpbmdsZWZ0RGVsaW1pdGVycmlnaHREZWxpbWl0ZXIoLi4uKS4uLnBhcnRzcmVtb3ZlTGFzdHdyaXRlQWxsLCBpdGVyYWJsZVRvRnVsbFN0cmluZ0hhc05leHRJdGVyYXRvcl9IQVNfTkVYVF9BTkRfTkVYVF9JTl9DVVJSRU5UX05PX05FWFRfTk9UX01PVkVEX1lFVGhhc05leHRfbW92ZU5vIG1vcmUgZWxlbWVudHNMaW5rZWRIYXNoTWFwTGlua2VkSGFzaFNldExpbmtlZExpc3RfbGVuZ3RoX2ZpcnN0YWRkRmlyc3RfaW5zZXJ0QmVmb3JldXBkYXRlRmlyc3RfbGlzdF91bmxpbmtObyBzdWNoIGVsZW1lbnRUb28gbWFueSBlbGVtZW50c2xpc3RMaW5rZWRMaXN0RW50cnkgaXMgYWxyZWFkeSBpbiBhIExpbmtlZExpc3RwcmVkZWNlc3NvcnN1Y2Nlc3Nvcl9MaW5rZWRMaXN0SXRlcmF0b3JfdmlzaXRlZEZpcnN0TGlua2VkTGlzdEVudHJ5dW5saW5raW5zZXJ0QWZ0ZXJpbnNlcnRCZWZvcmVfTGlzdEJhc2UmT2JqZWN0Jkxpc3RNaXhpbm1hdGNobWF0Y2hGb3VuZF9jbG9zZUdhcGVuZF9maWx0ZXJyZXRhaW5NYXRjaGluZ3JldGFpbmVkc2V0UmFuZ2Vzb3J0Y29tcGFyZV9jb21wYXJlQW55c2h1ZmZsZXJhbmRvbW5leHRJbnR0bXBhc01hcHN1Ymxpc3RsaXN0TGVuZ3RoZ2V0UmFuZ2VyZW1vdmVSYW5nZWZpbGxSYW5nZWZpbGxza2lwQ291bnRvdGhlckxpc3RvdGhlclN0YXJ0cmVwbGFjZVJhbmdlbmV3Q29udGVudHNyZW1vdmVMZW5ndGhpbnNlcnRMZW5ndGhpbnNlcnRFbmRkZWx0YWluZGV4T2ZpbmRleFdoZXJlbGFzdEluZGV4T2ZsYXN0SW5kZXhXaGVyZWluc2VydHJlbW92ZUF0aW5zZXJ0QWxsaW5zZXJ0aW9uTGVuZ3Roc2V0QWxscmV2ZXJzZWRbXUxpc3RCYXNlbGlzdFRvU3RyaW5nTGlzdE1peGluTWFwQmFzZW1hcFRvU3RyaW5nbXsuLi59X2lkeF9maWxsTWFwV2l0aE1hcHBlZEl0ZXJhYmxlX2ZpbGxNYXBXaXRoSXRlcmFibGVza2V5SXRlcmF0b3J2YWx1ZUl0ZXJhdG9yaGFzTmV4dEtleWhhc05leHRWYWx1ZUl0ZXJhYmxlcyBkbyBub3QgaGF2ZSBzYW1lIGxlbmd0aC5NYXBNaXhpblVubW9kaWZpYWJsZU1hcEJhc2VDYW5ub3QgbW9kaWZ5IHVubW9kaWZpYWJsZSBtYXBfTWFwQmFzZVZhbHVlSXRlcmFibGVfTWFwQmFzZVZhbHVlSXRlcmF0b3Jfa2V5c19Vbm1vZGlmaWFibGVNYXBNaXhpbk1hcFZpZXdfVW5tb2RpZmlhYmxlTWFwVmlldyZNYXBWaWV3Jl9Vbm1vZGlmaWFibGVNYXBNaXhpblVubW9kaWZpYWJsZU1hcFZpZXdRdWV1ZXJlbW92ZUZpcnN0YWRkTGFzdF9Eb3VibGVMaW5rTGlua19wcmV2aW91c0xpbmtfbmV4dExpbmtfbGlua0RvdWJsZUxpbmtlZFF1ZXVlRW50cnlhcHBlbmRwcmVwZW5kcHJldmlvdXNFbnRyeV9Eb3VibGVMaW5rZWRRdWV1ZUVudHJ5X3F1ZXVlX2FzTm9uU2VudGluZWxFbnRyeV9hcHBlbmRfcHJlcGVuZF9lbGVtZW50X0RvdWJsZUxpbmtlZFF1ZXVlRWxlbWVudHF1ZXVlX0RvdWJsZUxpbmtlZFF1ZXVlU2VudGluZWxEb3VibGVMaW5rZWRRdWV1ZV9zZW50aW5lbGxhc3RFbnRyeWZpcnN0RW50cnlmb3JFYWNoRW50cnlfRG91YmxlTGlua2VkUXVldWVJdGVyYXRvcl9uZXh0RW50cnlzZW50aW5lbGVsZW1lbnRFbnRyeUxpc3RRdWV1ZV9oZWFkX3RhaWxpbml0aWFsQ2FwYWNpdHljYXBhY2l0eV9jaGVja01vZGlmaWNhdGlvbl93cml0ZVRvTGlzdGFkZENvdW50X3ByZUdyb3dlbmRTcGFjZXByZVNwYWNlX2dyb3dfaXNQb3dlck9mMm51bWJlcl9uZXh0UG93ZXJPZjJuZXh0TnVtYmVyZXhwZWN0ZWRNb2RpZmljYXRpb25Db3VudG1hc2tzdGFydERpc3RhbmNlZW5kRGlzdGFuY2VwcmV2T2Zmc2V0bmV4dE9mZnNldG5ld1RhYmxlc3BsaXRmaXJzdFBhcnRTaXplbmV3RWxlbWVudENvdW50bmV3Q2FwYWNpdHlfTGlzdFF1ZXVlSXRlcmF0b3JfZW5kX3Bvc2l0aW9uU2V0TWl4aW5fU2V0QmFzZSZPYmplY3QmU2V0TWl4aW5TZXRCYXNlc2V0VG9TdHJpbmdzZXRfU2V0QmFzZV9Vbm1vZGlmaWFibGVTZXRDYW5ub3QgY2hhbmdlIHVubW9kaWZpYWJsZSBzZXRfU3BsYXlUcmVlTm9kZWxlZnRyaWdodF9TcGxheVRyZWVNYXBOb2RlX1NwbGF5VHJlZU5vZGVfc3BsYXlDb3VudF9yb290X2R1bW15X2NvbXBhcmF0b3JfY29tcGFyZWtleTFrZXkyX3NwbGF5Y29tcF9zcGxheU1pbm5vZGVfc3BsYXlNYXhfYWRkTmV3Um9vdF9sYXN0X2NsZWFyX1R5cGVUZXN0X1NwbGF5VHJlZU1hcCZfU3BsYXlUcmVlJk1hcE1peGluU3BsYXlUcmVlTWFwbWFwUm9vdHNwbGF5Q291bnRub2Rlc2luaXRpYWxTcGxheUNvdW50dmlzaXRmaXJzdEtleWxhc3RLZXlsYXN0S2V5QmVmb3JlZmlyc3RLZXlBZnRlcl9TcGxheVRyZWVJdGVyYXRvcl90cmVlX3dvcmtMaXN0X2N1cnJlbnROb2RldHJlZV9maW5kTGVmdE1vc3REZXNjZW5kZW50c3RhcnRBdHN0YXJ0S2V5X2dldFZhbHVlX3JlYnVpbGRXb3JrTGlzdGN1cnJlbnROb2RlX1NwbGF5VHJlZUtleUl0ZXJhYmxlX2NvcHlOb2RlX1NwbGF5VHJlZVZhbHVlSXRlcmFibGVfU3BsYXlUcmVlS2V5SXRlcmF0b3JfU3BsYXlUcmVlVmFsdWVJdGVyYXRvcm1hcE5vZGVfU3BsYXlUcmVlTm9kZUl0ZXJhdG9yX1NwbGF5VHJlZVNldCZfU3BsYXlUcmVlJkl0ZXJhYmxlTWl4aW5fU3BsYXlUcmVlU2V0Jl9TcGxheVRyZWUmSXRlcmFibGVNaXhpbiZTZXRNaXhpblNwbGF5VHJlZVNldHJldGFpblNldF9jbG9uZV9NT0RJRklDQVRJT05fQ09VTlRfTUFTS190b1N0cmluZ1Zpc2l0aW5nX3JlaGFzaE9iamVjdHNfZGVmYXVsdEVxdWFsc19kZWZhdWx0SGFzaENvZGVfaXNUb1N0cmluZ1Zpc2l0aW5nX2l0ZXJhYmxlUGFydHNUb1N0cmluZ3NwZW51bHRpbWF0ZVN0cmluZ3VsdGltYXRlU3RyaW5ncGVudWx0aW1hdGV1bHRpbWF0ZWVsaXNpb25fZHluYW1pY0NvbXBhcmVfZGVmYXVsdENvbXBhcmVkYXJ0LmNvbnZlcnRQT1dFUlNfT0ZfVEVOQ2xhc3NJRFVpbnQ4TGlzdFVpbnQxNkxpc3RDYXN0Q29udmVydGVycGFyc2VIZXhCeXRlYXNjaWkuZGFydGJhc2U2NC5kYXJ0Ynl0ZV9jb252ZXJzaW9uLmRhcnRjaHVua2VkX2NvbnZlcnNpb24uZGFydGNvZGVjLmRhcnRjb252ZXJ0ZXIuZGFydGVuY29kaW5nLmRhcnRodG1sX2VzY2FwZS5kYXJ0anNvbi5kYXJ0bGF0aW4xLmRhcnRsaW5lX3NwbGl0dGVyLmRhcnRzdHJpbmdfY29udmVyc2lvbi5kYXJ0dXRmLmRhcnRfSnNvblV0ZjhEZWNvZGVyX3Jldml2ZXJfYWxsb3dNYWxmb3JtZWRpbnB1dHBhcnNlcmNodW5rY2h1bmtFbmRwYXJzZXN0YXJ0Q2h1bmtlZENvbnZlcnNpb25fSnNvbkxpc3RlbmVyaGFuZGxlU3RyaW5naGFuZGxlTnVtYmVyaGFuZGxlQm9vbGhhbmRsZU51bGxiZWdpbk9iamVjdHByb3BlcnR5TmFtZXByb3BlcnR5VmFsdWVlbmRPYmplY3RiZWdpbkFycmF5YXJyYXlFbGVtZW50ZW5kQXJyYXlfQnVpbGRKc29uTGlzdGVuZXJjdXJyZW50Q29udGFpbmVycHVzaENvbnRhaW5lcnBvcENvbnRhaW5lcl9SZXZpdmVySnNvbkxpc3RlbmVycmV2aXZlcl9OdW1iZXJCdWZmZXJtaW5DYXBhY2l0eWtEZWZhdWx0T3ZlcmhlYWRfaW5pdGlhbENhcGFjaXR5ZW5zdXJlQ2FwYWNpdHluZXdMaXN0Z2V0U3RyaW5ncGFyc2VOdW1wYXJzZURvdWJsZV9DaHVua2VkSnNvblBhcnNlclRPUF9MRVZFTElOU0lERV9BUlJBWUlOU0lERV9PQkpFQ1RBRlRFUl9DT0xPTkFMTE9XX1NUUklOR19NQVNLQUxMT1dfVkFMVUVfTUFTS0FMTE9XX1ZBTFVFU1RSSU5HX09OTFlOT19WQUxVRVNFTVBUWU5PTl9FTVBUWUVNUFRZX01BU0tTVEFURV9JTklUSUFMU1RBVEVfRU5EU1RBVEVfQVJSQVlfRU1QVFlTVEFURV9BUlJBWV9WQUxVRVNUQVRFX0FSUkFZX0NPTU1BU1RBVEVfT0JKRUNUX0VNUFRZU1RBVEVfT0JKRUNUX0tFWVNUQVRFX09CSkVDVF9DT0xPTlNUQVRFX09CSkVDVF9WQUxVRVNUQVRFX09CSkVDVF9DT01NQVZBTFVFX1JFQURfQklUU0JBQ0tTUEFDRVRBQk5FV0xJTkVDQVJSSUFHRV9SRVRVUk5GT1JNX0ZFRURTUEFDRVFVT1RFUExVU0NPTU1BTUlOVVNERUNJTUFMUE9JTlRTTEFTSENIQVJfMENIQVJfOUNPTE9OQ0hBUl9FTEJSQUNLRVRCQUNLU0xBU0hSQlJBQ0tFVENIQVJfYUNIQVJfYkNIQVJfZUNIQVJfZkNIQVJfbENIQVJfbkNIQVJfckNIQVJfc0NIQVJfdENIQVJfdUxCUkFDRVJCUkFDRU5PX1BBUlRJQUxQQVJUSUFMX1NUUklOR1BBUlRJQUxfTlVNRVJBTFBBUlRJQUxfS0VZV09SRE1BU0tfUEFSVElBTE5VTV9TSUdOTlVNX1pFUk9OVU1fRElHSVROVU1fRE9UTlVNX0RPVF9ESUdJVE5VTV9FTlVNX0VfU0lHTk5VTV9FX0RJR0lUTlVNX1NVQ0NFU1NTVFJfUExBSU5TVFJfRVNDQVBFU1RSX1VTVFJfVV9DT1VOVF9TSElGVFNUUl9VX1ZBTFVFX1NISUZUS1dEX1RZUEVfTUFTS0tXRF9UWVBFX1NISUZUS1dEX05VTExLV0RfVFJVRUtXRF9GQUxTRUtXRF9CT01LV0RfQ09VTlRfU0hJRlRUV09fQklUX01BU0tzdGF0ZXNwYXJ0aWFsU3RhdGVzYXZlU3RhdGVyZXN0b3JlU3RhdGVwYXJ0aWFsVHlwZW51bVN0YXRlZmluaXNoQ2h1bmtOdW1iZXJmYWlsVW50ZXJtaW5hdGVkIHN0cmluZ2dldENoYXJjb3B5Q2hhcnNUb0xpc3RiZWdpblN0cmluZ2FkZENoYXJUb1N0cmluZ2NoYXJDb2RlYWRkU2xpY2VUb1N0cmluZ2VuZFN0cmluZ2JpdHNwYXJzZVBhcnRpYWxwb3NpdGlvbnBhcnNlUGFydGlhbFN0cmluZ3BhcnNlUGFydGlhbE51bWJlcnBhcnNlUGFydGlhbEtleXdvcmRjaGFyZGlnaXRjb250aW51ZUNodW5rTnVtYmVycGFyc2VTdHJpbmdUb0J1ZmZlcnBhcnNlU3RyaW5nRXNjYXBlY2h1bmtTdHJpbmdFc2NhcGVVcGFyc2VIZXhEaWdpdEludmFsaWQgaGV4IGRpZ2l0a2V5d29yZFR5cGVrZXl3b3JkVHlwZUluZGV4a2V5d29yZG51bGx0cnVlZmFsc2XDr8K7wr9leHBlY3RlZENoYXJjb2RlVW5pdEF0bGV0dGVycGFyc2VTdHJpbmdwYXJzZU51bGxwYXJzZUZhbHNlcGFyc2VUcnVlcGFyc2VOdW1iZXJwYXJzZUtleXdvcmRQcmVmaXhjaGFyc3R5cGVzbGljZUVuZENvbnRyb2wgY2hhcmFjdGVyIGluIHN0cmluZ2NodW5rU3RyaW5nc3RyaW5nU3RhdGVxdW90ZVBvc2l0aW9uaGV4U3RhcnRJbnZhbGlkIHVuaWNvZGUgZXNjYXBlVW5yZWNvZ25pemVkIHN0cmluZyBlc2NhcGViZWdpbkNodW5rTnVtYmVyYWRkTnVtYmVyQ2h1bmtvdmVyaGVhZG5ld0NvdW50VW50ZXJtaW5hdGVkIG51bWJlciBsaXRlcmFsaW50VmFsdWVkb3VibGVWYWx1ZXNpZ25pc0RvdWJsZU1pc3NpbmcgZXhwZWN0ZWQgZGlnaXRkaWdpdENvdW50aGlnaERpZ2l0OTIyMzM3MjAzNjg1NDc3NTgwdG9Eb3VibGVleHBTaWduZXhwb25lbnRleHBvbmVudE92ZXJmbG93LUluZmluaXR5SW5maW5pdHliaXRGbGFnOTAwNzE5OTI1NDc0MDk5Mi4wc2lnbmVkTWFudGlzc2EvMS4wMTAuMDEwMC4wMTAwMC4wMTAwMDAuMDEwMDAwMC4wMTAwMDAwMC4wMTAwMDAwMDAuMDEwMDAwMDAwMC4wMTAwMDAwMDAwMC4wMTAwMDAwMDAwMDAuMDEwMDAwMDAwMDAwMC4wMTAwMDAwMDAwMDAwMC4wMTAwMDAwMDAwMDAwMDAuMDEwMDAwMDAwMDAwMDAwMC4wMTAwMDAwMDAwMDAwMDAwMC4wMTAwMDAwMDAwMDAwMDAwMDAuMDEwMDAwMDAwMDAwMDAwMDAwMC4wMTAwMDAwMDAwMDAwMDAwMDAwMC4wMTAwMDAwMDAwMDAwMDAwMDAwMDAuMDEwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMWUrMjExZSsyMlVuZXhwZWN0ZWQgY2hhcmFjdGVyVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRfSnNvblN0cmluZ1BhcnNlcnN1YnN0cmluZ3dyaXRlQ2hhckNvZGVfSnNvblN0cmluZ0RlY29kZXJTaW5rX3BhcnNlcl9jcmVhdGVQYXJzZXJhZGRTbGljZWlzTGFzdGRlY29kZWRhc1V0ZjhTaW5rYWxsb3dNYWxmb3JtZWRfVXRmOFN0cmluZ0J1ZmZlcklOSVRJQUxfQ0FQQUNJVFlNQVNLX1RXT19CSVRNQVNLX1NJWkVTSElGVF9NSVNTSU5HU0hJRlRfVkFMVUVNQVhfQVNDSUlNQVhfVFdPX0JZVEVNQVhfVEhSRUVfQllURU1BWF9VTklDT0RFTUFTS19UV09fQllURU1BU0tfVEhSRUVfQllURU1BU0tfRk9VUl9CWVRFTUFTS19DT05USU5VRV9UQUdNQVNLX0NPTlRJTlVFX1ZBTFVFQ09OVElOVUVfVEFHTEVBRF9TVVJST0dBVEVUQUlMX1NVUlJPR0FURVNISUZUX0hJR0hfU1VSUk9HQVRFTUFTS19MT1dfU1VSUk9HQVRFaXNMYXRpbjFhZGRDb250aW51YXRpb251dGY4bWlzc2luZ2NvZGVFbmRhZGRDaGFyQ29kZUV4cGVjdGVkIFVURi04IGNvbnRpbnVhdGlvbiBieXRlLCBmb3VuZCBJbnZhbGlkIGVuY29kaW5nOiBVK3RvUmFkaXhTdHJpbmdwYWRMZWZ0MCBlbmNvZGVkIGluICBieXRlcy5JbmNvbXBsZXRlIFVURi04IHNlcXVlbmNlX3RvMTZCaXRuZXdCdWZmZXJjb250aW51ZUJ5dGVDb3VudFVuZXhwZWN0ZWQgVVRGLTggY29udGludWF0aW9uIGJ5dGVJbnZhbGlkIFVURi04IGJ5dGU6IHNlZW5CeXRlQ291bnRfSnNvblV0ZjhQYXJzZXJzdHJpbmdfSnNvblV0ZjhEZWNvZGVyU2lua19hZGRDaHVua0FzY2lpQ29kZWNfYWxsb3dJbnZhbGlkYWxsb3dJbnZhbGlkbmFtZXVzLWFzY2lpZW5jb2RlZW5jb2RlcmRlY29kZWJ5dGVzZGVjb2Rlcl9Vbmljb2RlU3Vic2V0RW5jb2Rlcl9zdWJzZXRNYXNrc3RyaW5nTGVuZ3RoY29kZVVuaXRDb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMuQXNjaWlFbmNvZGVyX1VuaWNvZGVTdWJzZXRFbmNvZGVyU2lua1NvdXJjZSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlciB3aXRoIGNvZGUgcG9pbnQ6IC5jb2RlVW5pdHNfVW5pY29kZVN1YnNldERlY29kZXJieXRlQ291bnRieXRlSW52YWxpZCB2YWx1ZSBpbiBpbnB1dDogX2NvbnZlcnRJbnZhbGlkQXNjaWlEZWNvZGVyc3RyaW5nU2lua19FcnJvckhhbmRsaW5nQXNjaWlEZWNvZGVyU2lua191dGY4U2lua19TaW1wbGVBc2NpaURlY29kZXJTaW5rU291cmNlIGNvbnRhaW5zIG5vbi1BU0NJSSBieXRlcy5CYXNlNjRDb2RlY19lbmNvZGVydXJsU2FmZWVuY29kZWRub3JtYWxpemVzbGljZVN0YXJ0YWxwaGFiZXRBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvaW52ZXJzZUFscGhhYmV0Zmlyc3RQYWRkaW5nZmlyc3RQYWRkaW5nU291cmNlSW5kZXhwYWRkaW5nQ291bnRvcmlnaW5hbENoYXJJbnZhbGlkIGJhc2U2NCBkYXRhZW5kTGVuZ3RoJUludmFsaWQgYmFzZTY0IGVuY29kaW5nIGxlbmd0aCA9X2NoZWNrUGFkZGluZ3NvdXJjZUluZGV4c291cmNlRW5kSW52YWxpZCBiYXNlNjQgcGFkZGluZywgcGFkZGVkIGxlbmd0aCBtdXN0IGJlIG11bHRpcGxlIG9mIGZvdXIsIGlzIEludmFsaWQgYmFzZTY0IHBhZGRpbmcsICc9JyBub3QgYXQgdGhlIGVuZEludmFsaWQgYmFzZTY0IHBhZGRpbmcsIG1vcmUgdGhhbiB0d28gJz0nIGNoYXJhY3RlcnNCYXNlNjRFbmNvZGVyX3VybFNhZmVfQmFzZTY0RW5jb2Rlcl9iYXNlNjRBbHBoYWJldF9iYXNlNjRVcmxBbHBoYWJldEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV9fdmFsdWVTaGlmdF9jb3VudE1hc2tfc2l4Qml0TWFza19hbHBoYWJldF9lbmNvZGVTdGF0ZV9zdGF0ZUJpdHNfc3RhdGVDb3VudGNyZWF0ZUJ1ZmZlcmJ1ZmZlckxlbmd0aGZ1bGxDaHVua3N+L3BhcnRpYWxDaHVua0xlbmd0aGVuY29kZUNodW5rb3V0cHV0SW5kZXhleHBlY3RlZENoYXJzYnl0ZU9yTm90IGEgYnl0ZSB2YWx1ZSBhdCBpbmRleCA6IDB4d3JpdGVGaW5hbENodW5rX0J1ZmZlckNhY2hpbmdCYXNlNjRFbmNvZGVyYnVmZmVyQ2FjaGVvZmZzZXRJbkJ5dGVzX0Jhc2U2NEVuY29kZXJTaW5rX0FzY2lpQmFzZTY0RW5jb2RlclNpbmtfVXRmOEJhc2U2NEVuY29kZXJTaW5rQmFzZTY0RGVjb2Rlcl9CYXNlNjREZWNvZGVyX2ludmFsaWRfcGFkZGluZ19fX3BfaW52ZXJzZUFscGhhYmV0X2NoYXJfcGVyY2VudF9jaGFyXzNfY2hhcl9kX2VuY29kZUNoYXJhY3RlclN0YXRlX2VuY29kZVBhZGRpbmdTdGF0ZWV4cGVjdGVkUGFkZGluZ19zdGF0ZVBhZGRpbmdfaGFzU2VlblBhZGRpbmdNaXNzaW5nIHBhZGRpbmcgY2hhcmFjdGVySW52YWxpZCBsZW5ndGgsIG11c3QgYmUgbXVsdGlwbGUgb2YgZm91cmRlY29kZUNodW5rb3V0SW5kZXhjaGFyT3Jjb2RlSW52YWxpZCBlbmNvZGluZyBiZWZvcmUgcGFkZGluZ0ludmFsaWQgY2hhcmFjdGVyX2FsbG9jYXRlQnVmZmVycGFkZGluZ1N0YXJ0cmVtYWluZGVyTGVuZ3RoX3RyaW1QYWRkaW5nQ2hhcnNwYWRkaW5nbmV3RW5kZXhwZWN0ZWRQYXJ0aWFsUGFkZGluZ0ludmFsaWQgcGFkZGluZyBjaGFyYWN0ZXJfQmFzZTY0RGVjb2RlclNpbmtfZGVjb2RlckJ5dGVDb252ZXJzaW9uU2lua3dpdGhDYWxsYmFja0J5dGVDb252ZXJzaW9uU2lua0Jhc2VfQnl0ZUFkYXB0ZXJTaW5rX0J5dGVDYWxsYmFja1NpbmtfSU5JVElBTF9CVUZGRVJfU0laRV9jYWxsYmFja19idWZmZXJfYnVmZmVySW5kZXhmcmVlQ291bnRncm93bl9yb3VuZFRvUG93ZXJPZjJDaHVua2VkQ29udmVyc2lvblNpbmtfU2ltcGxlQ2FsbGJhY2tTaW5rX2FjY3VtdWxhdGVkX0NvbnZlcnRlclN0cmVhbUV2ZW50U2lua19ldmVudFNpbmtfY2h1bmtlZFNpbmtjb252ZXJ0ZXJDb2RlY2Z1c2VpbnZlcnRlZF9GdXNlZENvZGVjTV9zZWNvbmRfSW52ZXJ0ZWRDb2RlY19jb2RlY2NvZGVjQ29udmVydGVyVGhpcyBjb252ZXJ0ZXIgZG9lcyBub3Qgc3VwcG9ydCBjaHVua2VkIGNvbnZlcnNpb25zOiBfRnVzZWRDb252ZXJ0ZXJFbmNvZGluZ19uYW1lVG9FbmNvZGluZ2lzb184ODU5LTE6MTk4N2lzby1pci0xMDBpc29fODg1OS0xaXNvLTg4NTktMWxhdGluMWwxaWJtODE5Y3A4MTljc2lzb2xhdGluMWlzby1pci02YW5zaV94My40LTE5NjhhbnNpX3gzLjQtMTk4Nmlzb182NDYuaXJ2OjE5OTFpc282NDYtdXN1c2libTM2N2NwMzY3Y3Nhc2NpaWFzY2lpY3N1dGY4dXRmLThkZWNvZGVTdHJlYW1ieXRlU3RyZWFtZ2V0QnlOYW1ldG9Mb3dlckNhc2VIdG1sRXNjYXBlTW9kZV9uYW1lZXNjYXBlTHRHdGVzY2FwZVF1b3Rlc2NhcGVBcG9zZXNjYXBlU2xhc2h1bmtub3duYXR0cmlidXRlc3FBdHRyaWJ1dGVjdXN0b21IdG1sRXNjYXBlbW9kZXRleHR2YWxfY29udmVydGNoJmFtcDsiJnF1b3Q7JiMzOTsmbHQ7Jmd0OyYjNDc7X0h0bWxFc2NhcGVTaW5rX2VzY2FwZUpzb25VbnN1cHBvcnRlZE9iamVjdEVycm9ydW5zdXBwb3J0ZWRPYmplY3RjYXVzZXBhcnRpYWxSZXN1bHRzYWZlU3RyaW5ncHJlZml4Q29udmVydGluZyBvYmplY3QgdG8gYW4gZW5jb2RhYmxlIG9iamVjdCBmYWlsZWQ6Q29udmVydGluZyBvYmplY3QgZGlkIG5vdCByZXR1cm4gYW4gZW5jb2RhYmxlIG9iamVjdDogSnNvbkN5Y2xpY0Vycm9yQ3ljbGljIGVycm9yIGluIEpTT04gc3RyaW5naWZ5SnNvbkNvZGVjX3RvRW5jb2RhYmxldG9FbmNvZGFibGV3aXRoUmV2aXZlckpzb25FbmNvZGVyaW5kZW50d2l0aEluZGVudEpzb25VdGY4RW5jb2Rlcl9kZWZhdWx0QnVmZmVyU2l6ZURFRkFVTFRfQlVGRkVSX1NJWkVuZXh0IHJlbGVhc2VfaW5kZW50X2J1ZmZlclNpemVidWZmZXJTaXplX3V0ZjhFbmNvZGVhZGRDaHVua2J5dGVMaXN0Ynl0ZVNpbmtfSnNvbkVuY29kZXJTaW5rX2lzRG9uZU9ubHkgb25lIGNhbGwgdG8gYWRkIGFsbG93ZWRhc1N0cmluZ1NpbmtfSnNvblV0ZjhFbmNvZGVyU2lua0pzb25EZWNvZGVyX0pzb25TdHJpbmdpZmllcmJhY2tzcGFjZXRhYm5ld2xpbmVjYXJyaWFnZVJldHVybmZvcm1GZWVkcXVvdGVjaGFyXzBiYWNrc2xhc2hjaGFyX2JjaGFyX2ZjaGFyX25jaGFyX3JjaGFyX3RjaGFyX3Vfc2Vlbl9wYXJ0aWFsUmVzdWx0d3JpdGVTdHJpbmdjaGFyYWN0ZXJzd3JpdGVTdHJpbmdTbGljZXdyaXRlTnVtYmVyaGV4RGlnaXR3cml0ZVN0cmluZ0NvbnRlbnRfY2hlY2tDeWNsZV9yZW1vdmVTZWVud3JpdGVPYmplY3R3cml0ZUpzb25WYWx1ZWN1c3RvbUpzb25pc0Zpbml0ZXdyaXRlTGlzdHN1Y2Nlc3N3cml0ZU1hcCx7fWtleVZhbHVlTGlzdGFsbFN0cmluZ0tleXMsIiI6X0pzb25QcmV0dHlQcmludE1peGluX2luZGVudExldmVsd3JpdGVJbmRlbnRhdGlvbmluZGVudExldmVsWwosCgp7CiI6IF9Kc29uU3RyaW5nU3RyaW5naWZpZXJzdHJpbmdpZnlwcmludE9uc3RyaW5naWZpZXJfX0pzb25TdHJpbmdTdHJpbmdpZmllclByZXR0eSZfSnNvblN0cmluZ1N0cmluZ2lmaWVyJl9Kc29uUHJldHR5UHJpbnRNaXhpbl9Kc29uU3RyaW5nU3RyaW5naWZpZXJQcmV0dHlfSnNvblV0ZjhTdHJpbmdpZmllcmZsdXNod3JpdGVBc2NpaVN0cmluZ3dyaXRlQnl0ZW5leHRDaGFyd3JpdGVGb3VyQnl0ZUNoYXJDb2Rld3JpdGVNdWx0aUJ5dGVDaGFyQ29kZV9fSnNvblV0ZjhTdHJpbmdpZmllclByZXR0eSZfSnNvblV0ZjhTdHJpbmdpZmllciZfSnNvblByZXR0eVByaW50TWl4aW5fSnNvblV0ZjhTdHJpbmdpZmllclByZXR0eWluZGVudExlbmd0aExhdGluMUNvZGVjTGF0aW4xRW5jb2RlckxhdGluMURlY29kZXJfTGF0aW4xRGVjb2RlclNpbmtfYWRkU2xpY2VUb1NpbmtfY2hlY2tWYWxpZExhdGluMV9yZXBvcnRJbnZhbGlkTGF0aW4xU291cmNlIGNvbnRhaW5zIG5vbi1MYXRpbi0xIGNoYXJhY3RlcnMuX0xhdGluMUFsbG93SW52YWxpZERlY29kZXJTaW5rTGluZVNwbGl0dGVybGluZXM6YXdhaXRfanVtcF92YXI6YXdhaXRfY3R4X3ZhcjpzeW5jX29wOml0ZXJhdG9ycHJldmlvdXNDaGFyX0xpbmVTcGxpdHRlclNpbmtfY2Fycnlfc2tpcExlYWRpbmdMRl9hZGRMaW5lc19MaW5lU3BsaXR0ZXJFdmVudFNpbmtTdHJpbmdDb252ZXJzaW9uU2lua2Zyb21TdHJpbmdTaW5rQ2xvc2FibGVTdHJpbmdTaW5rb25DbG9zZV9DbG9zYWJsZVN0cmluZ1Npbmt3cml0ZWxuX1N0cmluZ0NvbnZlcnNpb25TaW5rQXNTdHJpbmdTaW5rQWRhcHRlcl9NSU5fU1RSSU5HX1NJWkVfZmx1c2hhY2N1bXVsYXRlZFN0cmluZ0NvbnZlcnNpb25TaW5rQmFzZVN0cmluZ0NvbnZlcnNpb25TaW5rTWl4aW5zdHJfU3RyaW5nU2lua0NvbnZlcnNpb25TaW5rVFN0cmluZ1Npbmtfc3RyaW5nU2lua19TdHJpbmdDYWxsYmFja1NpbmtfU3RyaW5nQWRhcHRlclNpbmtfVXRmOFN0cmluZ1NpbmtBZGFwdGVyc3RhcnRJbmRleGVuZEluZGV4X1V0ZjhDb252ZXJzaW9uU2lua3N0cmluZ0J1ZmZlclV0ZjhDb2RlY1V0ZjhFbmNvZGVyZW5kUG9zaXRpb25fZmlsbEJ1ZmZlcmxhc3RDb2RlVW5pdHdhc0NvbWJpbmVkX3dyaXRlU3Vycm9nYXRlX1V0ZjhFbmNvZGVyX0RFRkFVTFRfQllURV9CVUZGRVJfU0laRXdpdGhCdWZmZXJTaXplX2NyZWF0ZUJ1ZmZlcmxlYWRpbmdTdXJyb2dhdGVuZXh0Q29kZVVuaXRydW5lc3RyaW5nSW5kZXhfX1V0ZjhFbmNvZGVyU2luayZfVXRmOEVuY29kZXImU3RyaW5nQ29udmVyc2lvblNpbmtNaXhpbl9VdGY4RW5jb2RlclNpbmtpc0xhc3RTbGljZWhhc0JlZW5Db21iaW5lZFV0ZjhEZWNvZGVyb25lQnl0ZXNpc0ZpcnN0Q2hhcmFjdGVyZmlyc3RQYXJ0X2lzRmlyc3RDaGFyYWN0ZXJfY29udmVydEludGVyY2VwdGVkX1V0ZjhEZWNvZGVyX2V4cGVjdGVkVW5pdHNfZXh0cmFVbml0c19MSU1JVFNoYXNQYXJ0aWFsSW5wdXRVbmZpbmlzaGVkIFVURi04IG9jdGV0IHNlcXVlbmNlZXhwZWN0ZWRVbml0c2V4dHJhVW5pdHN1bml0QmFkIFVURi04IGVuY29kaW5nIDB4T3ZlcmxvbmcgZW5jb2Rpbmcgb2YgMHhDaGFyYWN0ZXIgb3V0c2lkZSB2YWxpZCBVbmljb2RlIHJhbmdlOiAweE5lZ2F0aXZlIFVURi04IGNvZGUgdW5pdDogLTB4X2FzY2lpTWFza2Jhc2U2NGJhc2U2NFVybF9wYWRkaW5nQ2hhcmh0bWxFc2NhcGVqc29uX2xhdGluMU1hc2tfTEZfQ1J1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXJSdW5ldW5pY29kZUJvbUNoYXJhY3RlclJ1bmVfT05FX0JZVEVfTElNSVRfVFdPX0JZVEVfTElNSVRfVEhSRUVfQllURV9MSU1JVF9GT1VSX0JZVEVfTElNSVRfU1VSUk9HQVRFX1RBR19NQVNLX1NVUlJPR0FURV9WQUxVRV9NQVNLX0xFQURfU1VSUk9HQVRFX01JTl9UQUlMX1NVUlJPR0FURV9NSU5fcGFyc2VEb3VibGVEb3VibGVfcGFyc2ViYXNlNjRFbmNvZGViYXNlNjRVcmxFbmNvZGViYXNlNjREZWNvZGVqc29uRW5jb2RlanNvbkRlY29kZV9wYXJzZUpzb25fZGVmYXVsdFRvRW5jb2RhYmxldG9Kc29uX2lzTGVhZFN1cnJvZ2F0ZV9pc1RhaWxTdXJyb2dhdGVfY29tYmluZVN1cnJvZ2F0ZVBhaXJsZWFkdGFpbF9zY2FuT25lQnl0ZUNoYXJhY3RlcnN1bml0c3RvZGFydC5kZXZlbG9wZXJTZW5kUG9ydElzb2xhdGVSYXdSZWNlaXZlUG9ydGV4dGVuc2lvbi5kYXJ0cHJvZmlsZXIuZGFydHNlcnZpY2UuZGFydHRpbWVsaW5lLmRhcnRTZXJ2aWNlRXh0ZW5zaW9uSGFuZGxlcm1ldGhvZHBhcmFtZXRlcnNUaW1lbGluZVN5bmNGdW5jdGlvblRpbWVsaW5lQXN5bmNGdW5jdGlvbl9Vc2VyVGFnVXNlclRhZ19uZXdsYWJlbFVzZXJUYWdfbGFiZWxtYWtlQ3VycmVudFVzZXJUYWdfbWFrZUN1cnJlbnRTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2VlcnJvckNvZGVlcnJvckRldGFpbGtJbnZhbGlkUGFyYW1za0V4dGVuc2lvbkVycm9ya0V4dGVuc2lvbkVycm9yTWF4a0V4dGVuc2lvbkVycm9yTWluaW52YWxpZFBhcmFtc2V4dGVuc2lvbkVycm9yZXh0ZW5zaW9uRXJyb3JNYXhleHRlbnNpb25FcnJvck1pbl9lcnJvckNvZGVNZXNzYWdlSW52YWxpZCBwYXJhbXNTZXJ2ZXIgZXJyb3JfdmFsaWRhdGVFcnJvckNvZGVPdXQgb2YgcmFuZ2Vpc0Vycm9yX3RvU3RyaW5nZGV0YWlsc1VzZXJUYWdNQVhfVVNFUl9UQUdTZGVmYXVsdFRhZ01ldHJpY2Rlc2NyaXB0aW9udm1JbnZhbGlkIE1ldHJpYyBuYW1lLl90b0pTT05HYXVnZW1pbm1heG1pbiBtdXN0IGJlIGxlc3MgdGhhbiBtYXhtZXRyaWNzL0NvdW50ZXJNZXRyaWNzX21ldHJpY3NyZWdpc3Rlcm1ldHJpY1JlZ2lzdGVyZWQgbWV0cmljcyBoYXZlIHVuaXF1ZSBuYW1lc2RlcmVnaXN0ZXJfcHJpbnRNZXRyaWNfcHJpbnRNZXRyaWNzbWV0cmljc01ldHJpY0xpc3RTZXJ2aWNlUHJvdG9jb2xJbmZvbWFqb3JWZXJzaW9ubWlub3JWZXJzaW9uc2VydmVyVXJpRGFydCBWTSBTZXJ2aWNlIFByb3RvY29sIHZsaXN0ZW5pbmcgb24gU2VydmljZWdldEluZm86YXN5bmNfY29tcGxldGVyOnJldHVybl92YWx1ZTphc3luY19zdGFja190cmFjZTphc3luY19vcF90aGVuOmFzeW5jX29wX2Vycm9yOnNhdmVkX3RyeV9jb250ZXh0X3ZhcjA6YXN5bmNfb3A6cmVzdWx0OmV4Y2VwdGlvbjpzdGFja190cmFjZXJlY2VpdmVQb3J0dXJpQ29tcGxldGVyc2VuZFBvcnRjb250cm9sV2ViU2VydmVyZW5hYmxlZ2V0SXNvbGF0ZUlEaXNvbGF0ZWNvbnRyb2xQb3J0Rmxvd19iZWdpbl90eXBlYmVnaW5zdGVwVGltZWxpbmVfc3RhY2tzdGFydFN5bmNhcmd1bWVudHNmbG93YmxvY2tfYXJndW1lbnRzX3N0YXJ0U3luY2ZpbmlzaFN5bmNVbmV2ZW4gY2FsbHMgdG8gc3RhcnRTeW5jIGFuZCBmaW5pc2hTeW5jZmluaXNoaW5zdGFudFN5bmNpbnN0YW50QXJndW1lbnRzRGFydHRpbWVTeW5jbm93VGltZWxpbmVUYXNrX3BhcmVudF90YXNrSWR3aXRoVGFza0lkdGFza0lkX3N0YXJ0cGFyZW50SWRpbnN0YW50VW5ldmVuIGNhbGxzIHRvIHN0YXJ0IGFuZCBmaW5pc2hfZmluaXNocGFzc1lvdSBjYW5ub3QgcGFzcyBhIFRpbWVsaW5lVGFzayB3aXRob3V0IGZpbmlzaGluZyBhbGwgc3RhcnRlZCBvcGVyYXRpb25zcl9Bc3luY0Jsb2NrY2F0ZWdvcnlfU3luY0Jsb2NrX2Zsb3dCX25leHRTZXF1ZW5jZU51bWJlcl9oYXNUaW1lbGluZV9sb2dEZXZlbG9wZXJfbG9ndGltZXN0YW1wc2VxdWVuY2VOdW1iZXJsZXZlbF9ydW5FeHRlbnNpb25wYXJhbWV0ZXJLZXlzcGFyYW1ldGVyVmFsdWVzcmVwbHlQb3J0dHJhY2Vfc2VydmljZXJlc3BvbnNlZXJyb3JEZXRhaWxzRXh0ZW5zaW9uIGhhbmRsZXIgbXVzdCByZXR1cm4gYSBGdXR1cmVFeHRlbnNpb24gaGFuZGxlciBtdXN0IGNvbXBsZXRlIHRvIGEgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlX3Bvc3RSZXNwb25zZXZtLXNlcnZpY2U6IHBvc3Rpbmcgbm8gcmVzcG9uc2UgZm9yIHJlcXVlc3RzZW5kc2J7Impzb25ycGMiOiIyLjAiLHZtLXNlcnZpY2U6IHBvc3RpbmcgZXJyb3IgcmVzcG9uc2UgZm9yIHJlcXVlc3QgImVycm9yIjp2bS1zZXJ2aWNlOiBwb3N0aW5nIHJlc3BvbnNlIGZvciByZXF1ZXN0ICJyZXN1bHQiOiJpZCI6IiJ9ImlkIjpfZ2V0Q3VycmVudFRhZ1Byb2ZpbGVyX2dldEN1cnJlbnRUYWdfZ2V0RGVmYXVsdFRhZ1VzZXJUYWdfZGVmYXVsdFRhZ2RlYnVnZ2VyRGV2ZWxvcGVyX2RlYnVnZ2Vyd2hlbmluc3BlY3REZXZlbG9wZXJfaW5zcGVjdGxvZ3RpbWVNdXN0IGJlIGEgU3RyaW5nTXVzdCBiZSBhIERhdGVUaW1lbWlsbGlzZWNvbmRzU2luY2VFcG9jaHJlZ2lzdGVyRXh0ZW5zaW9uc3RhcnRzV2l0aGV4dC5NdXN0IGJlZ2luIHdpdGggZXh0LkV4dGVuc2lvbiBhbHJlYWR5IHJlZ2lzdGVyZWQ6IHBvc3RFdmVudGV2ZW50S2luZGV2ZW50RGF0YWV2ZW50RGF0YUFzU3RyaW5nX3Bvc3RFdmVudERldmVsb3Blcl9wb3N0RXZlbnRfbG9va3VwRXh0ZW5zaW9uRGV2ZWxvcGVyX2xvb2t1cEV4dGVuc2lvbl9yZWdpc3RlckV4dGVuc2lvbkRldmVsb3Blcl9yZWdpc3RlckV4dGVuc2lvbmdldEN1cnJlbnRUYWdfZ2V0U2VydmVySW5mb0RldmVsb3Blcl9nZXRTZXJ2ZXJJbmZvX3dlYlNlcnZlckNvbnRyb2xEZXZlbG9wZXJfd2ViU2VydmVyQ29udHJvbF9nZXRTZXJ2aWNlTWFqb3JWZXJzaW9uRGV2ZWxvcGVyX2dldFNlcnZpY2VNYWpvclZlcnNpb25fZ2V0U2VydmljZU1pbm9yVmVyc2lvbkRldmVsb3Blcl9nZXRTZXJ2aWNlTWlub3JWZXJzaW9uX2dldElzb2xhdGVJREZyb21TZW5kUG9ydERldmVsb3Blcl9nZXRJc29sYXRlSURGcm9tU2VuZFBvcnRfYXJndW1lbnRzQXNKc29uX2lzRGFydFN0cmVhbUVuYWJsZWRUaW1lbGluZV9pc0RhcnRTdHJlYW1FbmFibGVkX2dldE5leHRBc3luY0lkVGltZWxpbmVfZ2V0TmV4dEFzeW5jSWRfZ2V0VHJhY2VDbG9ja1RpbWVsaW5lX2dldFRyYWNlQ2xvY2tfcmVwb3J0VGFza0V2ZW50VGltZWxpbmVfcmVwb3J0VGFza0V2ZW50cGhhc2Vhcmd1bWVudHNBc0pzb25fcmVwb3J0Rmxvd0V2ZW50VGltZWxpbmVfcmVwb3J0Rmxvd0V2ZW50X3JlcG9ydEluc3RhbnRFdmVudFRpbWVsaW5lX3JlcG9ydEluc3RhbnRFdmVudGRhcnQuZmZpbmF0aXZlX3R5cGUuZGFydGFubm90YXRpb25zLmRhcnRkeW5hbWljX2xpYnJhcnkuZGFydHN0cnVjdC5kYXJ0UG9pbnRlcl9vZmZzZXRCeWFkZHJlc3Nmcm9tQWRkcmVzc3B0cmZyb21GdW5jdGlvbmV4Y2VwdGlvbmFsUmV0dXJuUG9pbnRlci5mcm9tRnVuY3Rpb24gY2Fubm90IGJlIGNhbGxlZCBkeW5hbWljYWxseS5GZmlfYWRkcmVzc1Vhc0Z1bmN0aW9uUG9pbnRlci5hc0Z1bmN0aW9uIGNhbm5vdCBiZSBjYWxsZWQgZHluYW1pY2FsbHkuTmF0aXZlVHlwZV9OYXRpdmVJbnRlZ2VyX05hdGl2ZURvdWJsZUludDhJbnQxNkludDMySW50NjRVaW50OFVpbnQxNlVpbnQzMlVpbnQ2NEludFB0ckZsb2F0RG91YmxlVm9pZE5hdGl2ZUZ1bmN0aW9uRGFydFJlcHJlc2VudGF0aW9uT2ZuYXRpdmVUeXBlVW5zaXplZER5bmFtaWNMaWJyYXJ5Z2V0SGFuZGxlRmZpX2RsX2dldEhhbmRsZXByb2Nlc3NleGVjdXRhYmxlb3BlbkZmaV9kbF9sb29rdXBzeW1ib2xOYW1lbG9va3VwRnVuY3Rpb25GRHluYW1pYyBpbnZvY2F0aW9uIG9mIGxvb2t1cEZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuaGFuZGxlU3RydWN0X2FkZHJlc3NPZl9mcm9tUG9pbnRlckludDhQb2ludGVyYXNUeXBlZExpc3RJbnQxNlBvaW50ZXJJbnQzMlBvaW50ZXJJbnQ2NFBvaW50ZXJVaW50OFBvaW50ZXJVaW50MTZQb2ludGVyVWludDMyUG9pbnRlclVpbnQ2NFBvaW50ZXJJbnRQdHJQb2ludGVyRmxvYXRQb2ludGVyRG91YmxlUG9pbnRlclBvaW50ZXJQb2ludGVyU3RydWN0UG9pbnRlcnJlZk5hdGl2ZVBvcnRuYXRpdmVQb3J0U3RydWN0QWRkcmVzc09mYWRkcmVzc09mX2tub3duU2l6ZXNfaW50UHRyU2l6ZW51bGxwdHJ1bnNpemVkX29wZW5GZmlfZGxfb3Blbl9wcm9jZXNzTGlicmFyeUZmaV9kbF9wcm9jZXNzTGlicmFyeV9leGVjdXRhYmxlTGlicmFyeUZmaV9kbF9leGVjdXRhYmxlTGlicmFyeV9zaXplT2ZGZmlfc2l6ZU9mX2Zyb21BZGRyZXNzRmZpX2Zyb21BZGRyZXNzX2FzRnVuY3Rpb25JbnRlcm5hbEZmaV9hc0Z1bmN0aW9uSW50ZXJuYWxEU05TX2FzRXh0ZXJuYWxUeXBlZERhdGFGZmlfYXNFeHRlcm5hbFR5cGVkRGF0YV9uYXRpdmVDYWxsYmFja0Z1bmN0aW9uRmZpX25hdGl2ZUNhbGxiYWNrRnVuY3Rpb25fcG9pbnRlckZyb21GdW5jdGlvbkZmaV9wb2ludGVyRnJvbUZ1bmN0aW9uX2FiaVJlY29nbml6ZWQgbWV0aG9kOiBtZXRob2QgaXMgZGlyZWN0bHkgaW50ZXJwcmV0ZWQgYnkgdGhlIGJ5dGVjb2RlIGludGVycHJldGVyIG9yIElSIGdyYXBoIGlzIGJ1aWx0IGluIHRoZSBmbG93IGdyYXBoIGJ1aWxkZXIuX2xvYWRJbnQ4RmZpX2xvYWRJbnQ4cG9pbnRlcl9sb2FkSW50MTZGZmlfbG9hZEludDE2X2xvYWRJbnQzMkZmaV9sb2FkSW50MzJfbG9hZEludDY0RmZpX2xvYWRJbnQ2NF9sb2FkVWludDhGZmlfbG9hZFVpbnQ4X2xvYWRVaW50MTZGZmlfbG9hZFVpbnQxNl9sb2FkVWludDMyRmZpX2xvYWRVaW50MzJfbG9hZFVpbnQ2NEZmaV9sb2FkVWludDY0X2xvYWRJbnRQdHJGZmlfbG9hZEludFB0cl9sb2FkRmxvYXRGZmlfbG9hZEZsb2F0X2xvYWREb3VibGVGZmlfbG9hZERvdWJsZV9sb2FkUG9pbnRlckZmaV9sb2FkUG9pbnRlcl9sb2FkU3RydWN0RmZpX2xvYWRTdHJ1Y3Rfc3RvcmVJbnQ4RmZpX3N0b3JlSW50OF9zdG9yZUludDE2RmZpX3N0b3JlSW50MTZfc3RvcmVJbnQzMkZmaV9zdG9yZUludDMyX3N0b3JlSW50NjRGZmlfc3RvcmVJbnQ2NF9zdG9yZVVpbnQ4RmZpX3N0b3JlVWludDhfc3RvcmVVaW50MTZGZmlfc3RvcmVVaW50MTZfc3RvcmVVaW50MzJGZmlfc3RvcmVVaW50MzJfc3RvcmVVaW50NjRGZmlfc3RvcmVVaW50NjRfc3RvcmVJbnRQdHJGZmlfc3RvcmVJbnRQdHJfc3RvcmVGbG9hdEZmaV9zdG9yZUZsb2F0X3N0b3JlRG91YmxlRmZpX3N0b3JlRG91YmxlX3N0b3JlUG9pbnRlckZmaV9zdG9yZVBvaW50ZXJfZWxlbWVudEF0SW50OF9lbGVtZW50QXRJbnQxNl9lbGVtZW50QXRJbnQzMl9lbGVtZW50QXRJbnQ2NF9lbGVtZW50QXRVaW50OF9lbGVtZW50QXRVaW50MTZfZWxlbWVudEF0VWludDMyX2VsZW1lbnRBdFVpbnQ2NF9lbGVtZW50QXRJbnRQdHJfZWxlbWVudEF0RmxvYXRfZWxlbWVudEF0RG91YmxlX2VsZW1lbnRBdFBvaW50ZXJzaXplT2Zrbm93blNpemVJbnQ4UG9pbnRlcnxnZXQjdmFsdWUjdGhpc0ludDhQb2ludGVyfHNldCN2YWx1ZUludDhQb2ludGVyfFtdSW50OFBvaW50ZXJ8W109SW50OFBvaW50ZXJ8YXNUeXBlZExpc3RJbnQ4UG9pbnRlcnxnZXQjYXNUeXBlZExpc3RJbnQxNlBvaW50ZXJ8Z2V0I3ZhbHVlSW50MTZQb2ludGVyfHNldCN2YWx1ZUludDE2UG9pbnRlcnxbXUludDE2UG9pbnRlcnxbXT1JbnQxNlBvaW50ZXJ8YXNUeXBlZExpc3RJbnQxNlBvaW50ZXJ8Z2V0I2FzVHlwZWRMaXN0SW50MzJQb2ludGVyfGdldCN2YWx1ZUludDMyUG9pbnRlcnxzZXQjdmFsdWVJbnQzMlBvaW50ZXJ8W11JbnQzMlBvaW50ZXJ8W109SW50MzJQb2ludGVyfGFzVHlwZWRMaXN0SW50MzJQb2ludGVyfGdldCNhc1R5cGVkTGlzdEludDY0UG9pbnRlcnxnZXQjdmFsdWVJbnQ2NFBvaW50ZXJ8c2V0I3ZhbHVlSW50NjRQb2ludGVyfFtdSW50NjRQb2ludGVyfFtdPUludDY0UG9pbnRlcnxhc1R5cGVkTGlzdEludDY0UG9pbnRlcnxnZXQjYXNUeXBlZExpc3RVaW50OFBvaW50ZXJ8Z2V0I3ZhbHVlVWludDhQb2ludGVyfHNldCN2YWx1ZVVpbnQ4UG9pbnRlcnxbXVVpbnQ4UG9pbnRlcnxbXT1VaW50OFBvaW50ZXJ8YXNUeXBlZExpc3RVaW50OFBvaW50ZXJ8Z2V0I2FzVHlwZWRMaXN0VWludDE2UG9pbnRlcnxnZXQjdmFsdWVVaW50MTZQb2ludGVyfHNldCN2YWx1ZVVpbnQxNlBvaW50ZXJ8W11VaW50MTZQb2ludGVyfFtdPVVpbnQxNlBvaW50ZXJ8Z2V0I2FzVHlwZWRMaXN0VWludDE2UG9pbnRlcnxhc1R5cGVkTGlzdFVpbnQzMlBvaW50ZXJ8Z2V0I3ZhbHVlVWludDMyUG9pbnRlcnxzZXQjdmFsdWVVaW50MzJQb2ludGVyfFtdVWludDMyUG9pbnRlcnxbXT1VaW50MzJQb2ludGVyfGFzVHlwZWRMaXN0VWludDMyUG9pbnRlcnxnZXQjYXNUeXBlZExpc3RVaW50NjRQb2ludGVyfGdldCN2YWx1ZVVpbnQ2NFBvaW50ZXJ8c2V0I3ZhbHVlVWludDY0UG9pbnRlcnxbXVVpbnQ2NFBvaW50ZXJ8W109VWludDY0UG9pbnRlcnxnZXQjYXNUeXBlZExpc3RVaW50NjRQb2ludGVyfGFzVHlwZWRMaXN0SW50UHRyUG9pbnRlcnxnZXQjdmFsdWVJbnRQdHJQb2ludGVyfHNldCN2YWx1ZUludFB0clBvaW50ZXJ8W11JbnRQdHJQb2ludGVyfFtdPUZsb2F0UG9pbnRlcnxnZXQjdmFsdWVGbG9hdFBvaW50ZXJ8c2V0I3ZhbHVlRmxvYXRQb2ludGVyfFtdRmxvYXRQb2ludGVyfFtdPUZsb2F0UG9pbnRlcnxhc1R5cGVkTGlzdEZsb2F0UG9pbnRlcnxnZXQjYXNUeXBlZExpc3REb3VibGVQb2ludGVyfGdldCN2YWx1ZURvdWJsZVBvaW50ZXJ8c2V0I3ZhbHVlRG91YmxlUG9pbnRlcnxbXURvdWJsZVBvaW50ZXJ8W109RG91YmxlUG9pbnRlcnxhc1R5cGVkTGlzdERvdWJsZVBvaW50ZXJ8Z2V0I2FzVHlwZWRMaXN0UG9pbnRlclBvaW50ZXJ8Z2V0I3ZhbHVlUG9pbnRlclBvaW50ZXJ8c2V0I3ZhbHVlUG9pbnRlclBvaW50ZXJ8W11Qb2ludGVyUG9pbnRlcnxbXT1TdHJ1Y3RQb2ludGVyfGdldCNyZWZTdHJ1Y3RQb2ludGVyfFtdTmF0aXZlUG9ydHxnZXQjbmF0aXZlUG9ydFNlbmRQb3J0SW1wbF9nZXRfaWRTdHJ1Y3RBZGRyZXNzT2Z8Z2V0I2FkZHJlc3NPZmRhcnQuX2ludGVybmFsSW50MzJMaXN0Y29yZWFzeW5jX2Nhc3QuZGFydGNhc3QuZGFydGVycm9ycy5kYXJ0cHJpbnQuZGFydHNvcnQuZGFydHN5bWJvbC5kYXJ0X1ByaW50Q2xvc3VyZV9FbGVtZW50UHJlZGljYXRlX0V4cGFuZEZ1bmN0aW9uc291cmNlRWxlbWVudHRpbWVyRmFjdG9yeWV2ZW50SGFuZGxlclNlbmREYXRhdGltZXJNaWxsaXNlY29uZENsb2NrcmVzb3VyY2VSZWFkQXNCeXRlc3BhY2thZ2VSb290U3RyaW5ncGFja2FnZUNvbmZpZ1N0cmluZ3BhY2thZ2VSb290VXJpRnV0dXJlcGFja2FnZUNvbmZpZ1VyaUZ1dHVyZXJlc29sdmVQYWNrYWdlVXJpRnV0dXJlX2NvbXB1dGVTY3JpcHRVcmlfY2FjaGVkU2NyaXB0cGxhdGZvcm1TY3JpcHRMaXN0c2NvcHlzcmNzcmNTdGFydGRzdGRzdFN0YXJ0amNpZEFycmF5Y2lkRXh0ZXJuYWxPbmVCeXRlU3RyaW5nY2lkR3Jvd2FibGVPYmplY3RBcnJheWNpZEltbXV0YWJsZUFycmF5Y2lkT25lQnl0ZVN0cmluZ2NpZFR3b0J5dGVTdHJpbmdjaWRVaW50OEFycmF5Vmlld2dldElEQ2xhc3NJRF9nZXRJRF9QYXRjaENvZGVVbml0c19zdHJpbmdzdHJpbmdPZnVFeHRlcm5hbE5hbWUyLjJ2ZXJzaW9uSHR0cFN0YXR1c2NvbnRpbnVlX3N3aXRjaGluZ1Byb3RvY29sc3Byb2Nlc3Npbmdva2NyZWF0ZWRhY2NlcHRlZG5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbm5vQ29udGVudHJlc2V0Q29udGVudHBhcnRpYWxDb250ZW50bXVsdGlTdGF0dXNhbHJlYWR5UmVwb3J0ZWRpbVVzZWRtdWx0aXBsZUNob2ljZXNtb3ZlZFBlcm1hbmVudGx5Zm91bmRtb3ZlZFRlbXBvcmFyaWx5c2VlT3RoZXJub3RNb2RpZmllZHVzZVByb3h5dGVtcG9yYXJ5UmVkaXJlY3RwZXJtYW5lbnRSZWRpcmVjdGJhZFJlcXVlc3R1bmF1dGhvcml6ZWRwYXltZW50UmVxdWlyZWRmb3JiaWRkZW5ub3RGb3VuZG1ldGhvZE5vdEFsbG93ZWRub3RBY2NlcHRhYmxlcHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkcmVxdWVzdFRpbWVvdXRjb25mbGljdGdvbmVsZW5ndGhSZXF1aXJlZHByZWNvbmRpdGlvbkZhaWxlZHJlcXVlc3RFbnRpdHlUb29MYXJnZXJlcXVlc3RVcmlUb29Mb25ndW5zdXBwb3J0ZWRNZWRpYVR5cGVyZXF1ZXN0ZWRSYW5nZU5vdFNhdGlzZmlhYmxlZXhwZWN0YXRpb25GYWlsZWRtaXNkaXJlY3RlZFJlcXVlc3R1bnByb2Nlc3NhYmxlRW50aXR5bG9ja2VkZmFpbGVkRGVwZW5kZW5jeXVwZ3JhZGVSZXF1aXJlZHByZWNvbmRpdGlvblJlcXVpcmVkdG9vTWFueVJlcXVlc3RzcmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlY29ubmVjdGlvbkNsb3NlZFdpdGhvdXRSZXNwb25zZXVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zY2xpZW50Q2xvc2VkUmVxdWVzdGludGVybmFsU2VydmVyRXJyb3Jub3RJbXBsZW1lbnRlZGJhZEdhdGV3YXlzZXJ2aWNlVW5hdmFpbGFibGVnYXRld2F5VGltZW91dGh0dHBWZXJzaW9uTm90U3VwcG9ydGVkdmFyaWFudEFsc29OZWdvdGlhdGVzaW5zdWZmaWNpZW50U3RvcmFnZWxvb3BEZXRlY3RlZG5vdEV4dGVuZGVkbmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWRuZXR3b3JrQ29ubmVjdFRpbWVvdXRFcnJvckNPTlRJTlVFVXNlIGNvbnRpbnVlXyBpbnN0ZWFkU1dJVENISU5HX1BST1RPQ09MU1VzZSBzd2l0Y2hpbmdQcm90b2NvbHMgaW5zdGVhZE9LVXNlIG9rIGluc3RlYWRDUkVBVEVEVXNlIGNyZWF0ZWQgaW5zdGVhZEFDQ0VQVEVEVXNlIGFjY2VwdGVkIGluc3RlYWROT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTlVzZSBub25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24gaW5zdGVhZE5PX0NPTlRFTlRVc2Ugbm9Db250ZW50IGluc3RlYWRSRVNFVF9DT05URU5UVXNlIHJlc2V0Q29udGVudCBpbnN0ZWFkUEFSVElBTF9DT05URU5UVXNlIHBhcnRpYWxDb250ZW50IGluc3RlYWRNVUxUSVBMRV9DSE9JQ0VTVXNlIG11bHRpcGxlQ2hvaWNlcyBpbnN0ZWFkTU9WRURfUEVSTUFORU5UTFlVc2UgbW92ZWRQZXJtYW5lbnRseSBpbnN0ZWFkRk9VTkRVc2UgZm91bmQgaW5zdGVhZE1PVkVEX1RFTVBPUkFSSUxZVXNlIG1vdmVkVGVtcG9yYXJpbHkgaW5zdGVhZFNFRV9PVEhFUlVzZSBzZWVPdGhlciBpbnN0ZWFkTk9UX01PRElGSUVEVXNlIG5vdE1vZGlmaWVkIGluc3RlYWRVU0VfUFJPWFlVc2UgdXNlUHJveHkgaW5zdGVhZFRFTVBPUkFSWV9SRURJUkVDVFVzZSB0ZW1wb3JhcnlSZWRpcmVjdCBpbnN0ZWFkQkFEX1JFUVVFU1RVc2UgYmFkUmVxdWVzdCBpbnN0ZWFkVU5BVVRIT1JJWkVEVXNlIHVuYXV0aG9yaXplZCBpbnN0ZWFkUEFZTUVOVF9SRVFVSVJFRFVzZSBwYXltZW50UmVxdWlyZWQgaW5zdGVhZEZPUkJJRERFTlVzZSBmb3JiaWRkZW4gaW5zdGVhZE5PVF9GT1VORFVzZSBub3RGb3VuZCBpbnN0ZWFkTUVUSE9EX05PVF9BTExPV0VEVXNlIG1ldGhvZE5vdEFsbG93ZWQgaW5zdGVhZE5PVF9BQ0NFUFRBQkxFVXNlIG5vdEFjY2VwdGFibGUgaW5zdGVhZFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEVXNlIHByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZCBpbnN0ZWFkUkVRVUVTVF9USU1FT1VUVXNlIHJlcXVlc3RUaW1lb3V0IGluc3RlYWRDT05GTElDVFVzZSBjb25mbGljdCBpbnN0ZWFkR09ORVVzZSBnb25lIGluc3RlYWRMRU5HVEhfUkVRVUlSRURVc2UgbGVuZ3RoUmVxdWlyZWQgaW5zdGVhZFBSRUNPTkRJVElPTl9GQUlMRURVc2UgcHJlY29uZGl0aW9uRmFpbGVkIGluc3RlYWRSRVFVRVNUX0VOVElUWV9UT09fTEFSR0VVc2UgcmVxdWVzdEVudGl0eVRvb0xhcmdlIGluc3RlYWRSRVFVRVNUX1VSSV9UT09fTE9OR1VzZSByZXF1ZXN0VXJpVG9vTG9uZyBpbnN0ZWFkVU5TVVBQT1JURURfTUVESUFfVFlQRVVzZSB1bnN1cHBvcnRlZE1lZGlhVHlwZSBpbnN0ZWFkUkVRVUVTVEVEX1JBTkdFX05PVF9TQVRJU0ZJQUJMRVVzZSByZXF1ZXN0ZWRSYW5nZU5vdFNhdGlzZmlhYmxlIGluc3RlYWRFWFBFQ1RBVElPTl9GQUlMRURVc2UgZXhwZWN0YXRpb25GYWlsZWQgaW5zdGVhZFVQR1JBREVfUkVRVUlSRURVc2UgdXBncmFkZVJlcXVpcmVkIGluc3RlYWRJTlRFUk5BTF9TRVJWRVJfRVJST1JVc2UgaW50ZXJuYWxTZXJ2ZXJFcnJvciBpbnN0ZWFkTk9UX0lNUExFTUVOVEVEVXNlIG5vdEltcGxlbWVudGVkIGluc3RlYWRCQURfR0FURVdBWVVzZSBiYWRHYXRld2F5IGluc3RlYWRTRVJWSUNFX1VOQVZBSUxBQkxFVXNlIHNlcnZpY2VVbmF2YWlsYWJsZSBpbnN0ZWFkR0FURVdBWV9USU1FT1VUVXNlIGdhdGV3YXlUaW1lb3V0IGluc3RlYWRIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRFVzZSBodHRwVmVyc2lvbk5vdFN1cHBvcnRlZCBpbnN0ZWFkTkVUV09SS19DT05ORUNUX1RJTUVPVVRfRVJST1JVc2UgbmV0d29ya0Nvbm5lY3RUaW1lb3V0RXJyb3IgaW5zdGVhZENhc3RTdHJlYW1TdWJzY3JpcHRpb250YXJnZXREYXRhX0Nhc3RJdGVyYWJsZUJhc2VDYXN0SXRlcmF0b3JDYXN0SXRlcmFibGVfRWZmaWNpZW50TGVuZ3RoQ2FzdEl0ZXJhYmxlX19DYXN0TGlzdEJhc2UmX0Nhc3RJdGVyYWJsZUJhc2UmTGlzdE1peGluX0Nhc3RMaXN0QmFzZXYxdjJmaWxsVmFsdWVDYXN0TGlzdENhc3RTZXRfZW1wdHlTZXRfZGVmYXVsdEVtcHR5U2V0X2NvbmRpdGlvbmFsQWRkb3RoZXJDb250YWluc2Nhc3RFbGVtZW50Q2FzdE1hcFNLU1ZDYXN0UXVldWVMYXRlSW5pdGlhbGl6YXRpb25FcnJvckltcGxfbWVzc2FnZUxhdGVJbml0aWFsaXphdGlvbkVycm9yOiBMYXRlSW5pdGlhbGl6YXRpb25FcnJvckVmZmljaWVudExlbmd0aEl0ZXJhYmxlTGlzdEl0ZXJhYmxlU3ViTGlzdEl0ZXJhYmxlX2l0ZXJhYmxlX2VuZE9yTGVuZ3RoX2VuZEluZGV4X3N0YXJ0SW5kZXhyZWFsSW5kZXhuZXdTdGFydExpc3RJdGVyYXRvck1hcHBlZEl0ZXJhYmxlX2ZFZmZpY2llbnRMZW5ndGhNYXBwZWRJdGVyYWJsZU1hcHBlZEl0ZXJhdG9yTWFwcGVkTGlzdEl0ZXJhYmxlV2hlcmVJdGVyYWJsZVdoZXJlSXRlcmF0b3JFeHBhbmRJdGVyYWJsZUV4cGFuZEl0ZXJhdG9yX2N1cnJlbnRFeHBhbnNpb25UYWtlSXRlcmFibGVfdGFrZUNvdW50dGFrZUNvdW50RWZmaWNpZW50TGVuZ3RoVGFrZUl0ZXJhYmxlaXRlcmFibGVMZW5ndGhUYWtlSXRlcmF0b3JfcmVtYWluaW5nVGFrZVdoaWxlSXRlcmFibGVUYWtlV2hpbGVJdGVyYXRvcl9pc0ZpbmlzaGVkU2tpcEl0ZXJhYmxlX3NraXBDb3VudEVmZmljaWVudExlbmd0aFNraXBJdGVyYWJsZVNraXBJdGVyYXRvclNraXBXaGlsZUl0ZXJhYmxlU2tpcFdoaWxlSXRlcmF0b3JfaGFzU2tpcHBlZEVtcHR5SXRlcmFibGVGb2xsb3dlZEJ5SXRlcmFibGVmaXJzdEVmZmljaWVudHNlY29uZEVmZmljaWVudExlbmd0aEZvbGxvd2VkQnlJdGVyYWJsZWZpcnN0TGVuZ3RoRm9sbG93ZWRCeUl0ZXJhdG9yX2N1cnJlbnRJdGVyYXRvcl9uZXh0SXRlcmFibGVXaGVyZVR5cGVJdGVyYWJsZVdoZXJlVHlwZUl0ZXJhdG9ybm9FbGVtZW50Tm8gZWxlbWVudHRvb01hbnl0b29GZXdUb28gZmV3IGVsZW1lbnRzRml4ZWRMZW5ndGhMaXN0TWl4aW5DYW5ub3QgY2hhbmdlIHRoZSBsZW5ndGggb2YgYSBmaXhlZC1sZW5ndGggbGlzdENhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdGF0Q2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3RDYW5ub3QgY2xlYXIgYSBmaXhlZC1sZW5ndGggbGlzdFVubW9kaWZpYWJsZUxpc3RNaXhpbkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIGxpc3RDYW5ub3QgY2hhbmdlIHRoZSBsZW5ndGggb2YgYW4gdW5tb2RpZmlhYmxlIGxpc3RDYW5ub3QgYWRkIHRvIGFuIHVubW9kaWZpYWJsZSBsaXN0Q2Fubm90IHJlbW92ZSBmcm9tIGFuIHVubW9kaWZpYWJsZSBsaXN0Q2Fubm90IGNsZWFyIGFuIHVubW9kaWZpYWJsZSBsaXN0Rml4ZWRMZW5ndGhMaXN0QmFzZVVubW9kaWZpYWJsZUxpc3RCYXNlX0xpc3RJbmRpY2VzSXRlcmFibGVfYmFja2VkTGlzdExpc3RNYXBWaWV3X3ZhbHVlc1JldmVyc2VkTGlzdEl0ZXJhYmxlVW5tb2RpZmlhYmxlTGlzdEVycm9yQ2Fubm90IGFkZCB0byB1bm1vZGlmaWFibGUgTGlzdGNoYW5nZUNhbm5vdCBjaGFuZ2UgdGhlIGNvbnRlbnQgb2YgYW4gdW5tb2RpZmlhYmxlIExpc3RDYW5ub3QgY2hhbmdlIGxlbmd0aCBvZiB1bm1vZGlmaWFibGUgTGlzdENhbm5vdCByZW1vdmUgZnJvbSB1bm1vZGlmaWFibGUgTGlzdE5vbkdyb3dhYmxlTGlzdEVycm9yQ2Fubm90IGFkZCB0byBub24tZ3Jvd2FibGUgTGlzdENhbm5vdCBjaGFuZ2UgbGVuZ3RoIG9mIG5vbi1ncm93YWJsZSBMaXN0Q2Fubm90IHJlbW92ZSBmcm9tIG5vbi1ncm93YWJsZSBMaXN0U29ydF9JTlNFUlRJT05fU09SVF9USFJFU0hPTERzb3J0UmFuZ2VPdXRPZlJhbmdlX2RvU29ydF9pbnNlcnRpb25Tb3J0ZWxfZHVhbFBpdm90UXVpY2tzb3J0c2l4dGhpbmRleDFpbmRleDVpbmRleDNpbmRleDJpbmRleDRlbDFlbDJlbDNlbDRlbDV0cGl2b3QxcGl2b3QybGVzc2dyZWF0cGl2b3RzX2FyZV9lcXVhbHBpdm90YWtjb21wX3Bpdm90MWNvbXBfcGl2b3QycmVzZXJ2ZWRXb3JkUkUoPzphc3NlcnR8YnJlYWt8Yyg/OmEoPzpzZXx0Y2gpfGxhc3N8b24oPzpzdHx0aW51ZSkpfGQoPzplZmF1bHR8byl8ZSg/OmxzZXxudW18eHRlbmRzKXxmKD86YWxzZXxpbmFsKD86bHkpP3xvcil8aVtmbnNdfG4oPzpld3x1bGwpfHJldCg/Omhyb3d8dXJuKXxzKD86dXBlcnx3aXRjaCl8dCg/OmgoPzppc3xyb3cpfHIoPzp1ZXx5KSl8dig/OmFyfG9pZCl8dyg/OmhpbGV8aXRoKSlwdWJsaWNJZGVudGlmaWVyUkUoPyEoPzphc3NlcnR8YnJlYWt8Yyg/OmEoPzpzZXx0Y2gpfGxhc3N8b24oPzpzdHx0aW51ZSkpfGQoPzplZmF1bHR8byl8ZSg/OmxzZXxudW18eHRlbmRzKXxmKD86YWxzZXxpbmFsKD86bHkpP3xvcil8aVtmbnNdfG4oPzpld3x1bGwpfHJldCg/Omhyb3d8dXJuKXxzKD86dXBlcnx3aXRjaCl8dCg/OmgoPzppc3xyb3cpfHIoPzp1ZXx5KSl8dig/OmFyfG9pZCl8dyg/OmhpbGV8aXRoKSlcYig/IVwkKSlbYS16QS1aJF1bXHckXSppZGVudGlmaWVyUkUoPyEoPzphc3NlcnR8YnJlYWt8Yyg/OmEoPzpzZXx0Y2gpfGxhc3N8b24oPzpzdHx0aW51ZSkpfGQoPzplZmF1bHR8byl8ZSg/OmxzZXxudW18eHRlbmRzKXxmKD86YWxzZXxpbmFsKD86bHkpP3xvcil8aVtmbnNdfG4oPzpld3x1bGwpfHJldCg/Omhyb3d8dXJuKXxzKD86dXBlcnx3aXRjaCl8dCg/OmgoPzppc3xyb3cpfHIoPzp1ZXx5KSl8dig/OmFyfG9pZCl8dyg/OmhpbGV8aXRoKSlcYig/IVwkKSlbYS16QS1aJF9dW1x3JF0qb3BlcmF0b3JSRSg/OltcLSsqLyUmfF5dfFxbXF09P3w9PXx+Lz98PFs8PV0/fD5bPj1dP3x1bmFyeS0pcHVibGljU3ltYm9sUGF0dGVybl4oPzokfCg/Oj0/JHxbLl0oPyEkKSkpKz8kc3ltYm9sUGF0dGVybnVudmFsaWRhdGVkdmFsaWRhdGVkU3ltYm9sKCIiKWdldE5hbWVzeW1ib2x2YWxpZGF0ZVB1YmxpY1N5bWJvbGhhc01hdGNoIiBpcyBhIHByaXZhdGUgaWRlbnRpZmllciIgaXMgbm90IGEgdmFsaWQgKHF1YWxpZmllZCkgc3ltYm9sIG5hbWVpc1ZhbGlkU3ltYm9sY29tcHV0ZVVubWFuZ2xlZE5hbWVhZGRfc2V0dGVyX3N1ZmZpeDpAbmV3TGFzdG5ld0ZpcnN0aXM2NEJpdF9wcmludENsb3N1cmVfaW5xdWlyZUlzNjRCaXRJbnRlcm5hbF9pbnF1aXJlSXM2NEJpdF9jbGFzc1JhbmdlQ2hlY2tjaWRsb3dlckxpbWl0dXBwZXJMaW1pdF9wcmVwZW5kVHlwZUFyZ3VtZW50c0ludGVybmFsX3ByZXBlbmRUeXBlQXJndW1lbnRzZnVuY3Rpb25UeXBlQXJndW1lbnRzcGFyZW50VHlwZUFyZ3VtZW50c3BhcmVudExlbnRvdGFsTGVuX2JvdW5kc0NoZWNrRm9yUGFydGlhbEluc3RhbnRpYXRpb25JbnRlcm5hbF9ib3VuZHNDaGVja0ZvclBhcnRpYWxJbnN0YW50aWF0aW9udHlwZUFyZ3NfZ3Jvd1JlZ0V4cFN0YWNrbmV3U3RhY2t1bnNhZmVDYXN0SW50ZXJuYWxfdW5zYWZlQ2FzdF91bnN1cHBvcnRlZFByaW50J3ByaW50JyBpcyBub3Qgc3VwcG9ydGVkaGV4RGlnaXRWYWx1ZWRpZ2l0MWRpZ2l0MmV4dHJhY3RUeXBlQXJndW1lbnRzSW50ZXJuYWxfZXh0cmFjdFR5cGVBcmd1bWVudHNpbnN0YW5jZWV4dHJhY3RfY2hlY2tDb3VudG1ha2VMaXN0Rml4ZWRMZW5ndGhJbnRlcm5hbF9tYWtlTGlzdEZpeGVkTGVuZ3RoZ3Jvd2FibGVMaXN0bWFrZUZpeGVkTGlzdFVubW9kaWZpYWJsZUludGVybmFsX21ha2VGaXhlZExpc3RVbm1vZGlmaWFibGVmaXhlZExlbmd0aExpc3RkYXJ0Lmlzb2xhdGVCeXRlQnVmZmVyVHlwZWREYXRhY2FwYWJpbGl0eS5kYXJ0X0ltbWVkaWF0ZUNhbGxiYWNrX051bGxhcnlGdW5jdGlvbl9VbmFyeUZ1bmN0aW9uYXJnc19CaW5hcnlGdW5jdGlvbl9DYXBhYmlsaXR5SW1wbENhcGFiaWxpdHlJbXBsX2ZhY3RvcnlfZ2V0X2hhc2hjb2RlQ2FwYWJpbGl0eUltcGxfZXF1YWxzQ2FwYWJpbGl0eUltcGxfZ2V0X2hhc2hjb2RlX1JlY2VpdmVQb3J0SW1wbF9yYXdQb3J0ZnJvbVJhd1JlY2VpdmVQb3J0X1Jhd1JlY2VpdmVQb3J0SW1wbF9oYW5kbGVyTWFwUmF3UmVjZWl2ZVBvcnRJbXBsX2ZhY3RvcnlfY2xvc2VJbnRlcm5hbF9nZXRfc2VuZHBvcnRfZ2V0X2lkUmF3UmVjZWl2ZVBvcnRJbXBsX2dldF9pZFJhd1JlY2VpdmVQb3J0SW1wbF9nZXRfc2VuZHBvcnRfbG9va3VwSGFuZGxlcl9oYW5kbGVNZXNzYWdlUmF3UmVjZWl2ZVBvcnRJbXBsX2Nsb3NlSW50ZXJuYWxfaW5pdEhhbmRsZXJNYXB0ZW1wTWFwX1NlbmRQb3J0SW1wbF91bmluc3RhbnRpYWJsZVVucmVhY2hhYmxlX3NlbmRJbnRlcm5hbFNlbmRQb3J0SW1wbF9nZXRfaGFzaGNvZGVTZW5kUG9ydEltcGxfc2VuZEludGVybmFsX19UcmFuc2ZlcmFibGVUeXBlZERhdGFJbXBsVHJhbnNmZXJhYmxlVHlwZWREYXRhX2ZhY3RvcnltYXRlcmlhbGl6ZV9tYXRlcmlhbGl6ZUludG9VaW50OExpc3RUcmFuc2ZlcmFibGVUeXBlZERhdGFfbWF0ZXJpYWxpemVfVGltZXJIZWFwX3VzZWRpbml0U2l6ZWlzRmlyc3RfaW5kZXhPck5leHRfYnViYmxlVXBfY29tcGFyZVRvX2J1YmJsZURvd25fc3dhcGxlZnRJbmRleHJpZ2h0SW5kZXhuZXdlc3RfcGFyZW50SW5kZXhfbGVmdENoaWxkSW5kZXhfcmlnaHRDaGlsZEluZGV4X1RpbWVyX05PX1RJTUVSX3NlbnRpbmVsVGltZXJfWkVST19FVkVOVF9USU1FT1VUX0VWRU5UX2hlYXBfZmlyc3RaZXJvVGltZXJfbGFzdFplcm9UaW1lcl9JRF9NQVNLX2lkQ291bnRfcmVjZWl2ZVBvcnRfc2VuZFBvcnRfc2NoZWR1bGVkV2FrZXVwVGltZV9oYW5kbGluZ0NhbGxiYWNrc193YWtldXBUaW1lX21pbGxpU2Vjb25kc19yZXBlYXRpbmdfdGlja19uZXh0SWRtaWxsaVNlY29uZHN3YWtldXBUaW1lX2VucXVldWVfaXNJbkhlYXBjX2FkdmFuY2VXYWtldXBUaW1lX25vdGlmeVplcm9IYW5kbGVycG9ydF9xdWV1ZUZyb21aZXJvRXZlbnRwZW5kaW5nVGltZXJzZnRpbWVyX25vdGlmeUV2ZW50SGFuZGxlcl9xdWV1ZUZyb21UaW1lb3V0RXZlbnRjdXJyZW50VGltZV9ydW5UaW1lcnNtc292ZXJkdWVtaXNzZWRUaWNrc19zY2hlZHVsZVdha2V1cF9jYW5jZWxXYWtldXBfY3JlYXRlVGltZXJIYW5kbGVyX3NodXRkb3duVGltZXJIYW5kbGVySXNvbGF0ZVNwYXduRXhjZXB0aW9uSXNvbGF0ZVNwYXduRXhjZXB0aW9uOiBfY3VycmVudElzb2xhdGVfcm9vdFVyaV9QQVVTRV9SRVNVTUVfUElOR19LSUxMX0FERF9FWElUX0RFTF9FWElUX0FERF9FUlJPUl9ERUxfRVJST1JfRVJST1JfRkFUQUxiZWZvcmVOZXh0RXZlbnRwYXVzZUNhcGFiaWxpdHl0ZXJtaW5hdGVDYXBhYmlsaXR5X3BhY2thZ2VTdXBwb3J0ZWRfc3Bhd25Db21tb25yZWFkeVBvcnRyZWFkeU1lc3NhZ2VjYXBhYmlsaXRpZXNVbmFibGUgdG8gc3Bhd24gaXNvbGF0ZTogSW50ZXJuYWwgZXJyb3I6IHVuZXhwZWN0ZWQgZm9ybWF0IGZvciByZWFkeSBtZXNzYWdlOiBfc3Bhd25GdW5jdGlvbklzb2xhdGVfc3Bhd25GdW5jdGlvbnRvcExldmVsRnVuY3Rpb25wYXVzZWRlcnJvcnNBcmVGYXRhbG9uRXhpdHBhY2thZ2VSb290cGFja2FnZUNvbmZpZ2RlYnVnTmFtZV9zcGF3blVyaUlzb2xhdGVfc3Bhd25VcmljaGVja2VkZW52aXJvbm1lbnRfc2VuZE9PQklzb2xhdGVfc2VuZE9PQl9nZXREZWJ1Z05hbWVJc29sYXRlX2dldERlYnVnTmFtZV9nZXRDdXJyZW50SXNvbGF0ZXBvcnRBbmRDYXBhYmlsaXRpZXNfZ2V0UG9ydEFuZENhcGFiaWxpdGllc09mQ3VycmVudElzb2xhdGVJc29sYXRlX2dldFBvcnRBbmRDYXBhYmlsaXRpZXNPZkN1cnJlbnRJc29sYXRlX2dldEN1cnJlbnRSb290VXJpX2dldEN1cnJlbnRSb290VXJpU3RySXNvbGF0ZV9nZXRDdXJyZW50Um9vdFVyaVN0cjIuM3BhY2thZ2VzLyBkaXJlY3RvcnkgcmVzb2x1dGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIERhcnQgMi5ob29rSXNvbGF0ZS5wYWNrYWdlQ29uZmlncmVzb2x2ZVBhY2thZ2VVcmlwYWNrYWdlVXJpSXNvbGF0ZS5yZXNvbHZlUGFja2FnZVVyaXNwYXduZW50cnlQb2ludDpzYXZlZF90cnlfY29udGV4dF92YXIxOmV4Y2VwdGlvbjA6c3RhY2tfdHJhY2Uwc2NyaXB0SXNvbGF0ZS5zcGF3bnNjaGVtZXBhY2thZ2VzcGF3blVyaWF1dG9tYXRpY1BhY2thZ2VSZXNvbHV0aW9uQ2Fubm90IHNpbXVsdGFuZW91c2x5IHJlcXVlc3QgYXV0b21hdGljUGFja2FnZVJlc29sdXRpb24gYW5kIHNwZWNpZnkgYXBhY2thZ2VSb290LnBhY2thZ2VDb25maWcuQ2Fubm90IHNpbXVsdGFuZW91c2x5IHNwZWNpZnkgYSBwYWNrYWdlUm9vdCBhbmQgYSBwYWNrYWdlQ29uZmlnLnNwYXduZWRVcmlyZXNvbHZlVXJpcmVzdW1lQ2FwYWJpbGl0eV9wYXVzZWFkZE9uRXhpdExpc3RlbmVycmVzcG9uc2VQb3J0cmVtb3ZlT25FeGl0TGlzdGVuZXJzZXRFcnJvcnNGYXRhbGtpbGxwcmlvcml0eXBpbmdhZGRFcnJvckxpc3RlbmVycmVtb3ZlRXJyb3JMaXN0ZW5lcmVycm9yc2xpc3RNZXNzYWdlZXJyb3JEZXNjcmlwdGlvbnN0YWNrRGVzY3JpcHRpb25SZWNlaXZlUG9ydHJhd1BvcnRuZXdIYW5kbGVyUmVtb3RlRXJyb3JfZGVzY3JpcHRpb25UcmFuc2ZlcmFibGVUeXBlZERhdGEyLjMuMmZyb21MaXN0Y2h1bmtzQ2FwYWJpbGl0eV9wZW5kaW5nSW1tZWRpYXRlQ2FsbGJhY2tfaXNvbGF0ZVNjaGVkdWxlSW1tZWRpYXRlX3J1blBlbmRpbmdJbW1lZGlhdGVDYWxsYmFja19nZXRJc29sYXRlU2NoZWR1bGVJbW1lZGlhdGVDbG9zdXJlX3N0YXJ0TWFpbklzb2xhdGVfZ2V0U3RhcnRNYWluSXNvbGF0ZUZ1bmN0aW9uX3N0YXJ0SXNvbGF0ZXBhcmVudFBvcnRpc1NwYXduVXJpX3NldHVwSG9va3NkYXJ0Lm1hdGhqZW5raW5zX3NtaV9oYXNoLmRhcnRwb2ludC5kYXJ0cmFuZG9tLmRhcnRyZWN0YW5nbGUuZGFydF9SYW5kb21fa1NUQVRFX0xPX2tTVEFURV9ISV9QT1cyXzMyNDI5NDk2NzI5Nl9QT1cyXzUzX0RfUE9XMl8yN19EMTM0MjE3NzI4LjBfcHJuZ193aXRoU3RhdGVfbmV4dFN0YXRlUmFuZG9tX25leHRTdGF0ZU11c3QgYmUgcG9zaXRpdmUgYW5kIDw9IDJeMzJybmQzMm5leHREb3VibGVuZXh0Qm9vbF9zZXR1cFNlZWRSYW5kb21fc2V0dXBTZWVkc2VlZF9pbml0aWFsU2VlZFJhbmRvbV9pbml0aWFsU2VlZF9uZXh0U2VlZF9TZWN1cmVSYW5kb21fZ2V0Qnl0ZXNTZWN1cmVSYW5kb21fZ2V0Qnl0ZXNybmRpc0V2ZW5fSmVua2luc1NtaUhhc2hoYXNoaGFzaDJoYXNoNFBvaW50eVBvaW50KGZhY3Rvcm1hZ25pdHVkZWRpc3RhbmNlVG9keGR5c3F1YXJlZERpc3RhbmNlVG9zZWN1cmVfUmVjdGFuZ2xlQmFzZXRvcHdpZHRoaGVpZ2h0Ym90dG9tUmVjdGFuZ2xlICgpICB4IHgweDF5MHkxaW50ZXJzZWN0c2JvdW5kaW5nQm94Y29udGFpbnNSZWN0YW5nbGVhbm90aGVyY29udGFpbnNQb2ludHRvcExlZnR0b3BSaWdodGJvdHRvbVJpZ2h0Ym90dG9tTGVmdFJlY3RhbmdsZWZyb21Qb2ludHNNdXRhYmxlUmVjdGFuZ2xlX3dpZHRoX2hlaWdodDIuNzE4MjgxODI4NDU5MDQ1bG4xMDIuMzAyNTg1MDkyOTk0MDQ2bG4yMC42OTMxNDcxODA1NTk5NDUzbG9nMmUxLjQ0MjY5NTA0MDg4ODk2MzRsb2cxMGUwLjQzNDI5NDQ4MTkwMzI1MThwaTMuMTQxNTkyNjUzNTg5Nzkzc3FydDFfMjAuNzA3MTA2NzgxMTg2NTQ3NnNxcnQyMS40MTQyMTM1NjIzNzMwOTUxX2RvdWJsZVBvd2RhcnQ6Y29yZSNfRG91YmxlYmFzZWlzTmFOTmFOX3Bvd01hdGhfZG91YmxlUG93X2ludFBvd19hdGFuMk1hdGhfYXRhbjJfc2luTWF0aF9zaW5fY29zTWF0aF9jb3NfdGFuTWF0aF90YW5fYWNvc01hdGhfYWNvc19hc2luTWF0aF9hc2luX2F0YW5NYXRoX2F0YW5fc3FydE1hdGhfc3FydF9leHBNYXRoX2V4cE1hdGhfbG9naXNOZWdhdGl2ZWF0YW4ydm06bmV2ZXItaW5saW5lcG93c2lucmFkaWFuc2Nvc3RhbmFjb3Nhc2luYXRhbnNxcnRleHBfY2xhbXBUb1plcm9kYXJ0Lm1pcnJvcnNfSW50ZXJuYWxNaXJyb3JFcnJvcl9tc2dfTWlycm9yU3lzdGVtZHluYW1pY1R5cGVkeW5hbWljdm9pZFR5cGV2b2lkbmV2ZXJUeXBlTmV2ZXJfbGlicmFyaWVzX2lzb2xhdGVsaWJyYXJpZXNsaWJfY29tcHV0ZUxpYnJhcmllc01pcnJvclN5c3RlbV9saWJyYXJpZXNfY29tcHV0ZUlzb2xhdGVNaXJyb3JTeXN0ZW1faXNvbGF0ZU1pcnJvclN5c3RlbSBmb3IgaXNvbGF0ZSAnX1NvdXJjZUxvY2F0aW9uY29sdW1uc291cmNlVXJpdXJpU3RyaW5nX0lzb2xhdGVNaXJyb3Jyb290TGlicmFyeWlzQ3VycmVudElzb2xhdGVNaXJyb3Igb24gJ2xvYWRVcmlDYW5ub3QgbG9hZCBfbG9hZFVyaUlzb2xhdGVNaXJyb3JfbG9hZFVyaV9TeW50aGV0aWNBY2Nlc3Nvcm93bmVyc2ltcGxlTmFtZWlzR2V0dGVyaXNTdGF0aWNpc1RvcExldmVsaXNTeW50aGV0aWNpc1JlZ3VsYXJNZXRob2Rpc09wZXJhdG9yaXNDb25zdHJ1Y3RvcmlzQ29uc3RDb25zdHJ1Y3RvcmlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yaXNGYWN0b3J5Q29uc3RydWN0b3Jpc0V4dGVybmFsaXNSZWRpcmVjdGluZ0NvbnN0cnVjdG9yaXNBYnN0cmFjdGlzRXh0ZW5zaW9uTWVtYmVyaXNTZXR0ZXJpc1ByaXZhdGVxdWFsaWZpZWROYW1lY29uc3RydWN0b3JOYW1lcmV0dXJuVHlwZWxvY2F0aW9ubWV0YWRhdGFfU3ludGhldGljU2V0dGVyUGFyYW1ldGVyaXNPcHRpb25hbGlzTmFtZWRpc0NvbnN0aXNGaW5hbGhhc0RlZmF1bHRWYWx1ZWRlZmF1bHRWYWx1ZV9PYmplY3RNaXJyb3JfcmVmbGVjdGVlX2ludm9rZXJlZmxlY3RlZWZ1bmN0aW9uTmFtZWFyZ3VtZW50TmFtZXNfaW52b2tlR2V0dGVyZ2V0dGVyTmFtZV9pbnZva2VTZXR0ZXJzZXR0ZXJOYW1laW52b2tlbWVtYmVyTmFtZXBvc2l0aW9uYWxBcmd1bWVudHNuYW1lZEFyZ3VtZW50c251bVBvc2l0aW9uYWxBcmd1bWVudHNudW1OYW1lZEFyZ3VtZW50c251bUFyZ3VtZW50c25hbWVzYXJndW1lbnRJbmRleG5hbWVJbmRleGdldEZpZWxkc2V0RmllbGRkZWxlZ2F0ZWludm9jYXRpb25pc01ldGhvZHVud3JhcHBlZHdpdGhvdXRFcXVhbFVOUkVBQ0hBQkxFX0luc3RhbmNlTWlycm9yaGFzUmVmbGVjdGVlSW5zdGFuY2VNaXJyb3Igb24gSW5zdGFuY2VNaXJyb3JfaW52b2tlSW5zdGFuY2VNaXJyb3JfaW52b2tlR2V0dGVySW5zdGFuY2VNaXJyb3JfaW52b2tlU2V0dGVyX2NvbXB1dGVUeXBlSW5zdGFuY2VNaXJyb3JfY29tcHV0ZVR5cGVfQ2xvc3VyZU1pcnJvcl9mdW5jdGlvbmFwcGx5Q2xvc3VyZU1pcnJvciBvbiAnX2NvbXB1dGVGdW5jdGlvbkNsb3N1cmVNaXJyb3JfZnVuY3Rpb25fVHlwZU1pcnJvcl9yZWZsZWN0ZWRUeXBlX0NsYXNzTWlycm9yX3NpbXBsZU5hbWVfb3duZXJfaXNHZW5lcmljX2lzVHJhbnNmb3JtZWRNaXhpbkFwcGxpY2F0aW9uX2lzR2VuZXJpY0RlY2xhcmF0aW9uaXNFbnVtX2luc3RhbnRpYXRvcl9xdWFsaWZpZWROYW1lX3RydWVTdXBlcmNsYXNzRmllbGRfc3VwZXJpbnRlcmZhY2VzX21peGluX2NhY2hlZFN0YXRpY01lbWJlcnNfY2FjaGVkSW5zdGFuY2VNZW1iZXJzX2RlY2xhcmF0aW9uc190eXBlVmFyaWFibGVzX3R5cGVBcmd1bWVudHNyZWZsZWN0ZWRUeXBlaGFzUmVmbGVjdGVkVHlwZURlY2xhcmF0aW9ucyBvZiBnZW5lcmljcyBoYXZlIG5vIHJlZmxlY3RlZCB0eXBlX21peGluQXBwbGljYXRpb25OYW1lX3RydWVTdXBlcmNsYXNzc3VwZXJ0eXBlaXNPcmlnaW5hbERlY2xhcmF0aW9uc3VwZXJ0eXBlTWlycm9yc3VwZXJjbGFzc3N1cGVyaW50ZXJmYWNlc2ludGVyZmFjZVR5cGVzaW50ZXJmYWNlTWlycm9yc2ludGVyZmFjZVR5cGVtaXhpbnNrbGFzc21peGluIHdpdGggbWl4aW5UeXBlc3RhdGljTWVtYmVyc2xpYnJhcnlkZWNsYXJhdGlvbnNkZWNsaW5zdGFuY2VNZW1iZXJzc3VwZGVjbHNtZW1iZXJzbWVtYmVyY29uc3RydWN0b3JzX2NvbXB1dGVDb25zdHJ1Y3RvcnNzdHJpbmdOYW1lY29uc3RydWN0b3JfcGF0Y2hDb25zdHJ1Y3Rvck5hbWV0eXBlVmFyaWFibGVzdHlwZVZhcmlhYmxlX2lzQW5vbnltb3VzTWl4aW5BcHBsaWNhdGlvbnBhcmFtc29yaWdpbmFsRGVjbGFyYXRpb25taXJyb3J0eXBlQXJndW1lbnRzQ2xhc3NNaXJyb3Igb24gJ25ld0luc3RhbmNlcnVudGltZVR5cGVpc1N1YnR5cGVPZmlzQXNzaWduYWJsZVRvb3RoZXJSZWZsZWN0ZWRUeXBlaXNTdWJjbGFzc09mb3RoZXJEZWNsYXJhdGlvbl9saWJyYXJ5VXJpQ2xhc3NNaXJyb3JfbGlicmFyeVVyaV9zdXBlcnR5cGVDbGFzc01pcnJvcl9zdXBlcnR5cGVfc3VwZXJ0eXBlSW5zdGFudGlhdGVkQ2xhc3NNaXJyb3Jfc3VwZXJ0eXBlX2luc3RhbnRpYXRlZF9uYXRpdmVJbnRlcmZhY2VzQ2xhc3NNaXJyb3JfaW50ZXJmYWNlc19uYXRpdmVJbnRlcmZhY2VzSW5zdGFudGlhdGVkQ2xhc3NNaXJyb3JfaW50ZXJmYWNlc19pbnN0YW50aWF0ZWRfbmF0aXZlTWl4aW5DbGFzc01pcnJvcl9taXhpbl9uYXRpdmVNaXhpbkluc3RhbnRpYXRlZENsYXNzTWlycm9yX21peGluX2luc3RhbnRpYXRlZGluc3RhbnRpYXRvcl9jb21wdXRlTWVtYmVyc0NsYXNzTWlycm9yX21lbWJlcnNDbGFzc01pcnJvcl9jb25zdHJ1Y3RvcnNDbGFzc01pcnJvcl9pbnZva2VDbGFzc01pcnJvcl9pbnZva2VHZXR0ZXJDbGFzc01pcnJvcl9pbnZva2VTZXR0ZXJfaW52b2tlQ29uc3RydWN0b3JDbGFzc01pcnJvcl9pbnZva2VDb25zdHJ1Y3Rvcl9DbGFzc01pcnJvcl90eXBlX3ZhcmlhYmxlc0NsYXNzTWlycm9yX3R5cGVfdmFyaWFibGVzX2NvbXB1dGVUeXBlQXJndW1lbnRzQ2xhc3NNaXJyb3JfdHlwZV9hcmd1bWVudHNfRnVuY3Rpb25UeXBlTWlycm9yX2Z1bmN0aW9uUmVmbGVjdGVlX2NhbGxNZXRob2RfcmV0dXJuVHlwZV9wYXJhbWV0ZXJzY2FsbE1ldGhvZF9GdW5jdGlvblR5cGVNaXJyb3JfY2FsbF9tZXRob2RwX0Z1bmN0aW9uVHlwZU1pcnJvcl9wYXJhbWV0ZXJzRnVuY3Rpb25UeXBlTWlycm9yIG9uICdGdW5jdGlvblR5cGVNaXJyb3JfY2FsbF9tZXRob2RmdW5jdGlvblJlZmxlY3RlZV9GdW5jdGlvblR5cGVNaXJyb3JfcmV0dXJuX3R5cGVGdW5jdGlvblR5cGVNaXJyb3JfcmV0dXJuX3R5cGVGdW5jdGlvblR5cGVNaXJyb3JfcGFyYW1ldGVyc19EZWNsYXJhdGlvbk1pcnJvcl9UeXBlVmFyaWFibGVNaXJyb3JfdXBwZXJCb3VuZHVwcGVyQm91bmRUeXBlIHZhcmlhYmxlcyBoYXZlIG5vIHJlZmxlY3RlZCB0eXBlVHlwZVZhcmlhYmxlTWlycm9yIG9uICdfVHlwZVZhcmlhYmxlTWlycm9yX293bmVyVHlwZVZhcmlhYmxlTWlycm9yX293bmVyX1R5cGVWYXJpYWJsZU1pcnJvcl91cHBlcl9ib3VuZFR5cGVWYXJpYWJsZU1pcnJvcl91cHBlcl9ib3VuZF9UeXBlZGVmTWlycm9yX3JlZmVyZW50cmVmZXJlbnRUeXBlZGVmTWlycm9yIG9uICdfbmF0aXZlUmVmZXJlbnRUeXBlZGVmTWlycm9yX3JlZmVyZW50X25hdGl2ZURlY2xhcmF0aW9uVHlwZWRlZk1pcnJvcl9kZWNsYXJhdGlvbl9MaWJyYXJ5TWlycm9yX2NhY2hlZExpYnJhcnlEZXBlbmRlbmNpZXN1cmxMaWJyYXJ5TWlycm9yIG9uICdsaWJyYXJ5RGVwZW5kZW5jaWVzX2xpYnJhcnlEZXBlbmRlbmNpZXNMaWJyYXJ5TWlycm9yX2xpYnJhcnlEZXBlbmRlbmNpZXNMaWJyYXJ5TWlycm9yX2ludm9rZUxpYnJhcnlNaXJyb3JfaW52b2tlR2V0dGVyTGlicmFyeU1pcnJvcl9pbnZva2VTZXR0ZXJMaWJyYXJ5TWlycm9yX21lbWJlcnNfTGlicmFyeURlcGVuZGVuY3lNaXJyb3Jzb3VyY2VMaWJyYXJ5X3RhcmdldE1pcnJvck9yUHJlZml4Y29tYmluYXRvcnNpc0ltcG9ydGlzRGVmZXJyZWRtdXRhYmxlQ29tYmluYXRvcnNwcmVmaXhTdHJpbmd1bndyYXBwZWRNZXRhZGF0YWlzRXhwb3J0dGFyZ2V0TGlicmFyeW1pcnJvck9yTnVsbGxvYWRMaWJyYXJ5c2F2ZWRQcmVmaXhfdHJ5VXBncmFkZVByZWZpeExpYnJhcnlNaXJyb3JfZnJvbVByZWZpeGxpYnJhcnlQcmVmaXhfQ29tYmluYXRvck1pcnJvcmlkZW50aWZpZXJzaXNTaG93aWRlbnRpZmllclN0cmluZ2lzSGlkZV9NZXRob2RNaXJyb3Jfa2luZEZsYWdza0Fic3RyYWN0a0dldHRlcmtTZXR0ZXJrQ29uc3RydWN0b3JrQ29uc3RDdG9ya0dlbmVyYXRpdmVDdG9ya1JlZGlyZWN0aW5nQ3RvcmtGYWN0b3J5Q3RvcmtFeHRlcm5hbGtTeW50aGV0aWNrRXh0ZW5zaW9uTWVtYmVyX29wZXJhdG9yc19jb25zdHJ1Y3Rvck5hbWVfTWV0aG9kTWlycm9yX3BhcmFtZXRlcnNJbnRlcm5hbCBlcnJvciBpbiBNZXRob2RNaXJyb3IuY29uc3RydWN0b3JOYW1lOiBtYWxmb3JtZWQgbmFtZSA8ZGVmaW5pbmdMaWJyYXJ5b3duZXJOYW1lY25NZXRob2RNaXJyb3Igb24gJ19NZXRob2RNaXJyb3Jfb3duZXJNZXRob2RNaXJyb3Jfb3duZXJfTWV0aG9kTWlycm9yX3JldHVybl90eXBlTWV0aG9kTWlycm9yX3JldHVybl90eXBlTWV0aG9kTWlycm9yX3BhcmFtZXRlcnNfTWV0aG9kTWlycm9yX3NvdXJjZU1ldGhvZE1pcnJvcl9zb3VyY2VfVmFyaWFibGVNaXJyb3J1bmV4cGVjdGVkIG93bmVyIFZhcmlhYmxlTWlycm9yIG9uICdfVmFyaWFibGVNaXJyb3JfdHlwZVZhcmlhYmxlTWlycm9yX3R5cGVfUGFyYW1ldGVyTWlycm9yX3VubWlycm9yZWRNZXRhZGF0YV9kZWZhdWx0VmFsdWVSZWZsZWN0ZWVfZGVmYXVsdFZhbHVlUGFyYW1ldGVyTWlycm9yLmxvY2F0aW9uIHVuaW1wbGVtZW50ZWRQYXJhbWV0ZXJNaXJyb3Igb24gJ19QYXJhbWV0ZXJNaXJyb3JfdHlwZVBhcmFtZXRlck1pcnJvcl90eXBlX1NwZWNpYWxUeXBlTWlycm9ydm9pZCBoYXMgbm8gcmVmbGVjdGVkIHR5cGVUeXBlTWlycm9yIG9uICdfTWlycm9yc19jdXJyZW50TWlycm9yU3lzdGVtX2RlY2xhcmF0aW9uQ2FjaGVDbGFzc01pcnJvcl9pbnN0YW50aWF0aW9uQ2FjaGVUeXBlTWlycm9yY3VycmVudE1pcnJvclN5c3RlbXJlZmxlY3RfbWFrZUxvY2FsQ2xhc3NNaXJyb3JNaXJyb3JzX21ha2VMb2NhbENsYXNzTWlycm9yX21ha2VMb2NhbFR5cGVNaXJyb3JNaXJyb3JzX21ha2VMb2NhbFR5cGVNaXJyb3JfaW5zdGFudGlhdGVHZW5lcmljVHlwZU1pcnJvcnNfaW5zdGFudGlhdGVHZW5lcmljVHlwZXJlZmxlY3RDbGFzc2NsYXNzTWlycm9ycmVmbGVjdFR5cGV0eXBlTWlycm9yX2luc3RhbnRpYXRlVHlwZVR5cGUgYXJndW1lbnRzIGxpc3QgY2Fubm90IGJlIGVtcHR5Ll9NaXJyb3JSZWZlcmVuY2VNaXJyb3JSZWZlcmVuY2VfZXF1YWxzTWlycm9yU3lzdGVtX21hbmdsZU5hbWVNaXJyb3JzX21hbmdsZU5hbWVmaW5kTGlicmFyeWNhbmRpZGF0ZXN1cmlzVGhlcmUgYXJlIG11bHRpcGxlIGxpYnJhcmllcyBuYW1lZCAnOiBUaGVyZSBpcyBubyBsaWJyYXJ5IG5hbWVkICcyLjhnZXRTeW1ib2xNaXJyb3JJc29sYXRlTWlycm9yRGVjbGFyYXRpb25NaXJyb3JPYmplY3RNaXJyb3JmaWVsZE5hbWVJbnN0YW5jZU1pcnJvckNsb3N1cmVNaXJyb3JMaWJyYXJ5TWlycm9yTGlicmFyeURlcGVuZGVuY3lNaXJyb3JDb21iaW5hdG9yTWlycm9yRnVuY3Rpb25UeXBlTWlycm9yVHlwZVZhcmlhYmxlTWlycm9yVHlwZWRlZk1pcnJvck1ldGhvZE1pcnJvclZhcmlhYmxlTWlycm9yUGFyYW1ldGVyTWlycm9yU291cmNlTG9jYXRpb25Db21tZW50dHJpbW1lZFRleHRpc0RvY0NvbW1lbnRNaXJyb3JzVXNlZE5vIGxvbmdlciBoYXMgYW55IGVmZmVjdC4gV2lsbCBiZSByZW1vdmVkIGluIGEgbGF0ZXIgcmVsZWFzZS5zeW1ib2xzdGFyZ2V0c21ldGFUYXJnZXRzb3ZlcnJpZGVfZGlydHlfbl9zT3B0X2NvbXB1dGVRdWFsaWZpZWROYW1lX21ha2VTaWduYXR1cmVTdHJpbmdidWZmb3VuZF9vcHRpb25hbF9wb3NpdGlvbmFsZm91bmRfb3B0aW9uYWxfbmFtZWRwYXJhbSkgLT4gX2xvY2F0aW9uRGVjbGFyYXRpb25NaXJyb3JfbG9jYXRpb25fbWV0YWRhdGFEZWNsYXJhdGlvbk1pcnJvcl9tZXRhZGF0YV93cmFwTWV0YWRhdGFyZWZsZWN0ZWVzbWlycm9yc19zdWJ0eXBlVGVzdFR5cGVNaXJyb3Jfc3VidHlwZVRlc3RfYXNTZXR0ZXJnZXR0ZXJkYXJ0LnR5cGVkX2RhdGF1bm1vZGlmaWFibGVfdHlwZWRfZGF0YS5kYXJ0X1R5cGVkTGlzdEJhc2VlbGVtZW50U2l6ZUluQnl0ZXNDYW5ub3QgcmVzaXplIGEgZml4ZWQtbGVuZ3RoIGxpc3Rfc2V0UmFuZ2VUeXBlZERhdGFfc2V0UmFuZ2VzdGFydEluQnl0ZXNsZW5ndGhJbkJ5dGVzc3RhcnRGcm9tSW5CeXRlc3RvQ2lkZnJvbUNpZF9JbnRMaXN0TWl4aW50b3RhbExlbmd0aGxlbkNhbm5vdCBpbnNlcnQgaW50byBhIGZpeGVkLWxlbmd0aCBsaXN0X1R5cGVkSW50TGlzdE1peGluU3Bhd25lZFR5cGVfY3JlYXRlTGlzdGZyb21Bc1R5cGVkTGlzdGZyb21Bc0xpc3R0ZW1wQnVmZmVyX0RvdWJsZUxpc3RNaXhpbl9UeXBlZERvdWJsZUxpc3RNaXhpbl9GbG9hdDMyeDRMaXN0TWl4aW5TSU1EIGRvbid0IGhhdmUgZGVmYXVsdCBjb21wYXJlLl9JbnQzMng0TGlzdE1peGluX0Zsb2F0NjR4Mkxpc3RNaXhpbl9CeXRlQnVmZmVyX05ld2FzQnl0ZURhdGFhc0ludDhMaXN0YXNVaW50OExpc3Rhc1VpbnQ4Q2xhbXBlZExpc3Rhc0ludDE2TGlzdGFzVWludDE2TGlzdGFzSW50MzJMaXN0YXNVaW50MzJMaXN0YXNJbnQ2NExpc3Rhc1VpbnQ2NExpc3Rhc0Zsb2F0MzJMaXN0YXNGbG9hdDY0TGlzdGFzRmxvYXQzMng0TGlzdGFzSW50MzJ4NExpc3Rhc0Zsb2F0NjR4Mkxpc3RfVHlwZWRMaXN0VHlwZWREYXRhX2xlbmd0aF9nZXRJbnQ4VHlwZWREYXRhX0dldEludDhfc2V0SW50OFR5cGVkRGF0YV9TZXRJbnQ4X2dldFVpbnQ4VHlwZWREYXRhX0dldFVpbnQ4X3NldFVpbnQ4VHlwZWREYXRhX1NldFVpbnQ4X2dldEludDE2VHlwZWREYXRhX0dldEludDE2X3NldEludDE2VHlwZWREYXRhX1NldEludDE2X2dldFVpbnQxNlR5cGVkRGF0YV9HZXRVaW50MTZfc2V0VWludDE2VHlwZWREYXRhX1NldFVpbnQxNl9nZXRJbnQzMlR5cGVkRGF0YV9HZXRJbnQzMl9zZXRJbnQzMlR5cGVkRGF0YV9TZXRJbnQzMl9nZXRVaW50MzJUeXBlZERhdGFfR2V0VWludDMyX3NldFVpbnQzMlR5cGVkRGF0YV9TZXRVaW50MzJfZ2V0SW50NjRUeXBlZERhdGFfR2V0SW50NjRfc2V0SW50NjRUeXBlZERhdGFfU2V0SW50NjRfZ2V0VWludDY0VHlwZWREYXRhX0dldFVpbnQ2NF9zZXRVaW50NjRUeXBlZERhdGFfU2V0VWludDY0X2dldEZsb2F0MzJUeXBlZERhdGFfR2V0RmxvYXQzMl9zZXRGbG9hdDMyVHlwZWREYXRhX1NldEZsb2F0MzJfZ2V0RmxvYXQ2NFR5cGVkRGF0YV9HZXRGbG9hdDY0X3NldEZsb2F0NjRUeXBlZERhdGFfU2V0RmxvYXQ2NF9nZXRGbG9hdDMyeDRUeXBlZERhdGFfR2V0RmxvYXQzMng0X3NldEZsb2F0MzJ4NFR5cGVkRGF0YV9TZXRGbG9hdDMyeDRfZ2V0SW50MzJ4NFR5cGVkRGF0YV9HZXRJbnQzMng0X3NldEludDMyeDRUeXBlZERhdGFfU2V0SW50MzJ4NF9nZXRGbG9hdDY0eDJUeXBlZERhdGFfR2V0RmxvYXQ2NHgyX3NldEZsb2F0NjR4MlR5cGVkRGF0YV9TZXRGbG9hdDY0eDJfc2V0Q29kZVVuaXRzYnl0ZVN0YXJ0c2tpcENvdW50ICsgbGVuZ3RoX19JbnQ4TGlzdCZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW5fX0ludDhMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fSW50OExpc3RfX1VpbnQ4TGlzdCZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW5fX1VpbnQ4TGlzdCZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX1VpbnQ4TGlzdF9fVWludDhDbGFtcGVkTGlzdCZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW5fX1VpbnQ4Q2xhbXBlZExpc3QmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9VaW50OENsYW1wZWRMaXN0X19JbnQxNkxpc3QmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluX19JbnQxNkxpc3QmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9JbnQxNkxpc3RfZ2V0SW5kZXhlZEludDE2X3NldEluZGV4ZWRJbnQxNl9fVWludDE2TGlzdCZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW5fX1VpbnQxNkxpc3QmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9VaW50MTZMaXN0X2dldEluZGV4ZWRVaW50MTZfc2V0SW5kZXhlZFVpbnQxNl9fSW50MzJMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fSW50MzJMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fSW50MzJMaXN0X2dldEluZGV4ZWRJbnQzMl9zZXRJbmRleGVkSW50MzJfX1VpbnQzMkxpc3QmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluX19VaW50MzJMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fVWludDMyTGlzdF9nZXRJbmRleGVkVWludDMyX3NldEluZGV4ZWRVaW50MzJfX0ludDY0TGlzdCZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW5fX0ludDY0TGlzdCZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX0ludDY0TGlzdF9nZXRJbmRleGVkSW50NjRfc2V0SW5kZXhlZEludDY0X19VaW50NjRMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fVWludDY0TGlzdCZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX1VpbnQ2NExpc3RfZ2V0SW5kZXhlZFVpbnQ2NF9zZXRJbmRleGVkVWludDY0X19GbG9hdDMyTGlzdCZfVHlwZWRMaXN0Jl9Eb3VibGVMaXN0TWl4aW5fX0Zsb2F0MzJMaXN0Jl9UeXBlZExpc3QmX0RvdWJsZUxpc3RNaXhpbiZfVHlwZWREb3VibGVMaXN0TWl4aW5fRmxvYXQzMkxpc3RfZ2V0SW5kZXhlZEZsb2F0MzJfc2V0SW5kZXhlZEZsb2F0MzJfX0Zsb2F0NjRMaXN0Jl9UeXBlZExpc3QmX0RvdWJsZUxpc3RNaXhpbl9fRmxvYXQ2NExpc3QmX1R5cGVkTGlzdCZfRG91YmxlTGlzdE1peGluJl9UeXBlZERvdWJsZUxpc3RNaXhpbl9GbG9hdDY0TGlzdF9nZXRJbmRleGVkRmxvYXQ2NF9zZXRJbmRleGVkRmxvYXQ2NF9fRmxvYXQzMng0TGlzdCZfVHlwZWRMaXN0Jl9GbG9hdDMyeDRMaXN0TWl4aW5fRmxvYXQzMng0TGlzdF9nZXRJbmRleGVkRmxvYXQzMng0X3NldEluZGV4ZWRGbG9hdDMyeDRfX0ludDMyeDRMaXN0Jl9UeXBlZExpc3QmX0ludDMyeDRMaXN0TWl4aW5fSW50MzJ4NExpc3RfZ2V0SW5kZXhlZEludDMyeDRfc2V0SW5kZXhlZEludDMyeDRfX0Zsb2F0NjR4Mkxpc3QmX1R5cGVkTGlzdCZfRmxvYXQ2NHgyTGlzdE1peGluX0Zsb2F0NjR4Mkxpc3RfZ2V0SW5kZXhlZEZsb2F0NjR4Ml9zZXRJbmRleGVkRmxvYXQ2NHgyX19FeHRlcm5hbEludDhBcnJheSZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW5fX0V4dGVybmFsSW50OEFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fRXh0ZXJuYWxJbnQ4QXJyYXlfX0V4dGVybmFsVWludDhBcnJheSZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW5fX0V4dGVybmFsVWludDhBcnJheSZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX0V4dGVybmFsVWludDhBcnJheV9fRXh0ZXJuYWxVaW50OENsYW1wZWRBcnJheSZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW5fX0V4dGVybmFsVWludDhDbGFtcGVkQXJyYXkmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9FeHRlcm5hbFVpbnQ4Q2xhbXBlZEFycmF5X19FeHRlcm5hbEludDE2QXJyYXkmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluX19FeHRlcm5hbEludDE2QXJyYXkmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9FeHRlcm5hbEludDE2QXJyYXlfX0V4dGVybmFsVWludDE2QXJyYXkmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluX19FeHRlcm5hbFVpbnQxNkFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fRXh0ZXJuYWxVaW50MTZBcnJheV9fRXh0ZXJuYWxJbnQzMkFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fRXh0ZXJuYWxJbnQzMkFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fRXh0ZXJuYWxJbnQzMkFycmF5X19FeHRlcm5hbFVpbnQzMkFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fRXh0ZXJuYWxVaW50MzJBcnJheSZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX0V4dGVybmFsVWludDMyQXJyYXlfX0V4dGVybmFsSW50NjRBcnJheSZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW5fX0V4dGVybmFsSW50NjRBcnJheSZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX0V4dGVybmFsSW50NjRBcnJheV9fRXh0ZXJuYWxVaW50NjRBcnJheSZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW5fX0V4dGVybmFsVWludDY0QXJyYXkmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9FeHRlcm5hbFVpbnQ2NEFycmF5X19FeHRlcm5hbEZsb2F0MzJBcnJheSZfVHlwZWRMaXN0Jl9Eb3VibGVMaXN0TWl4aW5fX0V4dGVybmFsRmxvYXQzMkFycmF5Jl9UeXBlZExpc3QmX0RvdWJsZUxpc3RNaXhpbiZfVHlwZWREb3VibGVMaXN0TWl4aW5fRXh0ZXJuYWxGbG9hdDMyQXJyYXlfX0V4dGVybmFsRmxvYXQ2NEFycmF5Jl9UeXBlZExpc3QmX0RvdWJsZUxpc3RNaXhpbl9fRXh0ZXJuYWxGbG9hdDY0QXJyYXkmX1R5cGVkTGlzdCZfRG91YmxlTGlzdE1peGluJl9UeXBlZERvdWJsZUxpc3RNaXhpbl9FeHRlcm5hbEZsb2F0NjRBcnJheV9fRXh0ZXJuYWxGbG9hdDMyeDRBcnJheSZfVHlwZWRMaXN0Jl9GbG9hdDMyeDRMaXN0TWl4aW5fRXh0ZXJuYWxGbG9hdDMyeDRBcnJheV9fRXh0ZXJuYWxJbnQzMng0QXJyYXkmX1R5cGVkTGlzdCZfSW50MzJ4NExpc3RNaXhpbl9FeHRlcm5hbEludDMyeDRBcnJheV9fRXh0ZXJuYWxGbG9hdDY0eDJBcnJheSZfVHlwZWRMaXN0Jl9GbG9hdDY0eDJMaXN0TWl4aW5fRXh0ZXJuYWxGbG9hdDY0eDJBcnJheV9GbG9hdDMyeDRGbG9hdDMyeDRfYWRkRmxvYXQzMng0X25lZ2F0ZUZsb2F0MzJ4NF9zdWJGbG9hdDMyeDRfbXVsRmxvYXQzMng0X2Rpdmxlc3NUaGFuRmxvYXQzMng0X2NtcGx0bGVzc1RoYW5PckVxdWFsRmxvYXQzMng0X2NtcGx0ZWdyZWF0ZXJUaGFuRmxvYXQzMng0X2NtcGd0Z3JlYXRlclRoYW5PckVxdWFsRmxvYXQzMng0X2NtcGd0ZWVxdWFsRmxvYXQzMng0X2NtcGVxdWFsbm90RXF1YWxGbG9hdDMyeDRfY21wbmVxdWFsc2NhbGVGbG9hdDMyeDRfc2NhbGVhYnNGbG9hdDMyeDRfYWJzY2xhbXBGbG9hdDMyeDRfY2xhbXBGbG9hdDMyeDRfZ2V0WEZsb2F0MzJ4NF9nZXRZekZsb2F0MzJ4NF9nZXRad0Zsb2F0MzJ4NF9nZXRXc2lnbk1hc2tGbG9hdDMyeDRfZ2V0U2lnbk1hc2tGbG9hdDMyeDRfc2h1ZmZsZXNodWZmbGVNaXhGbG9hdDMyeDRfc2h1ZmZsZU1peHp3d2l0aFhfd2l0aFhGbG9hdDMyeDRfc2V0WHdpdGhZX3dpdGhZRmxvYXQzMng0X3NldFl3aXRoWl93aXRoWkZsb2F0MzJ4NF9zZXRad2l0aFdfd2l0aFdGbG9hdDMyeDRfc2V0V0Zsb2F0MzJ4NF9taW5GbG9hdDMyeDRfbWF4RmxvYXQzMng0X3NxcnRyZWNpcHJvY2FsRmxvYXQzMng0X3JlY2lwcm9jYWxyZWNpcHJvY2FsU3FydEZsb2F0MzJ4NF9yZWNpcHJvY2FsU3FydF9JbnQzMng0SW50MzJ4NF9vckludDMyeDRfYW5kSW50MzJ4NF94b3JJbnQzMng0X2FkZEludDMyeDRfc3ViSW50MzJ4NF9nZXRYSW50MzJ4NF9nZXRZSW50MzJ4NF9nZXRaSW50MzJ4NF9nZXRXSW50MzJ4NF9nZXRTaWduTWFza0ludDMyeDRfc2h1ZmZsZUludDMyeDRfc2h1ZmZsZU1peEludDMyeDRfc2V0WEludDMyeDRfc2V0WUludDMyeDRfc2V0WkludDMyeDRfc2V0V2ZsYWdYSW50MzJ4NF9nZXRGbGFnWGZsYWdZSW50MzJ4NF9nZXRGbGFnWWZsYWdaSW50MzJ4NF9nZXRGbGFnWmZsYWdXSW50MzJ4NF9nZXRGbGFnV3dpdGhGbGFnWF93aXRoRmxhZ1hJbnQzMng0X3NldEZsYWdYd2l0aEZsYWdZX3dpdGhGbGFnWUludDMyeDRfc2V0RmxhZ1l3aXRoRmxhZ1pfd2l0aEZsYWdaSW50MzJ4NF9zZXRGbGFnWndpdGhGbGFnV193aXRoRmxhZ1dJbnQzMng0X3NldEZsYWdXc2VsZWN0SW50MzJ4NF9zZWxlY3R0cnVlVmFsdWVmYWxzZVZhbHVlX0Zsb2F0NjR4MkZsb2F0NjR4Ml9hZGRGbG9hdDY0eDJfbmVnYXRlRmxvYXQ2NHgyX3N1YkZsb2F0NjR4Ml9tdWxGbG9hdDY0eDJfZGl2RmxvYXQ2NHgyX3NjYWxlRmxvYXQ2NHgyX2Fic0Zsb2F0NjR4Ml9jbGFtcEZsb2F0NjR4Ml9nZXRYRmxvYXQ2NHgyX2dldFlGbG9hdDY0eDJfZ2V0U2lnbk1hc2tGbG9hdDY0eDJfc2V0WEZsb2F0NjR4Ml9zZXRZRmxvYXQ2NHgyX21pbkZsb2F0NjR4Ml9tYXhGbG9hdDY0eDJfc3FydF9UeXBlZExpc3RJdGVyYXRvcl9hcnJheWFycmF5bmV4dFBvc2l0aW9uX1R5cGVkTGlzdFZpZXdfdHlwZWREYXRhdm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlVHlwZWREYXRhVmlld190eXBlZERhdGFUeXBlZERhdGFWaWV3X29mZnNldEluQnl0ZXNUeXBlZERhdGFWaWV3X2xlbmd0aF9fSW50OEFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50TGlzdE1peGluX19JbnQ4QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX0ludDhBcnJheVZpZXdUeXBlZERhdGFWaWV3X0ludDhBcnJheVZpZXdfbmV3X19VaW50OEFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50TGlzdE1peGluX19VaW50OEFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9VaW50OEFycmF5Vmlld1R5cGVkRGF0YVZpZXdfVWludDhBcnJheVZpZXdfbmV3X19VaW50OENsYW1wZWRBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbl9fVWludDhDbGFtcGVkQXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX1VpbnQ4Q2xhbXBlZEFycmF5Vmlld1R5cGVkRGF0YVZpZXdfVWludDhDbGFtcGVkQXJyYXlWaWV3X25ld19fSW50MTZBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbl9fSW50MTZBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fSW50MTZBcnJheVZpZXdUeXBlZERhdGFWaWV3X0ludDE2QXJyYXlWaWV3X25ld19fVWludDE2QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW5fX1VpbnQxNkFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9VaW50MTZBcnJheVZpZXdUeXBlZERhdGFWaWV3X1VpbnQxNkFycmF5Vmlld19uZXdfX0ludDMyQXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW5fX0ludDMyQXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX0ludDMyQXJyYXlWaWV3VHlwZWREYXRhVmlld19JbnQzMkFycmF5Vmlld19uZXdfX1VpbnQzMkFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50TGlzdE1peGluX19VaW50MzJBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fVWludDMyQXJyYXlWaWV3VHlwZWREYXRhVmlld19VaW50MzJBcnJheVZpZXdfbmV3X19JbnQ2NEFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50TGlzdE1peGluX19JbnQ2NEFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9JbnQ2NEFycmF5Vmlld1R5cGVkRGF0YVZpZXdfSW50NjRBcnJheVZpZXdfbmV3X19VaW50NjRBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbl9fVWludDY0QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX1VpbnQ2NEFycmF5Vmlld1R5cGVkRGF0YVZpZXdfVWludDY0QXJyYXlWaWV3X25ld19fRmxvYXQzMkFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfRG91YmxlTGlzdE1peGluX19GbG9hdDMyQXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9Eb3VibGVMaXN0TWl4aW4mX1R5cGVkRG91YmxlTGlzdE1peGluX0Zsb2F0MzJBcnJheVZpZXdUeXBlZERhdGFWaWV3X0Zsb2F0MzJBcnJheVZpZXdfbmV3X19GbG9hdDY0QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9Eb3VibGVMaXN0TWl4aW5fX0Zsb2F0NjRBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0RvdWJsZUxpc3RNaXhpbiZfVHlwZWREb3VibGVMaXN0TWl4aW5fRmxvYXQ2NEFycmF5Vmlld1R5cGVkRGF0YVZpZXdfRmxvYXQ2NEFycmF5Vmlld19uZXdfX0Zsb2F0MzJ4NEFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfRmxvYXQzMng0TGlzdE1peGluX0Zsb2F0MzJ4NEFycmF5Vmlld1R5cGVkRGF0YVZpZXdfRmxvYXQzMng0QXJyYXlWaWV3X25ld19fSW50MzJ4NEFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50MzJ4NExpc3RNaXhpbl9JbnQzMng0QXJyYXlWaWV3VHlwZWREYXRhVmlld19JbnQzMng0QXJyYXlWaWV3X25ld19fRmxvYXQ2NHgyQXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9GbG9hdDY0eDJMaXN0TWl4aW5fRmxvYXQ2NHgyQXJyYXlWaWV3VHlwZWREYXRhVmlld19GbG9hdDY0eDJBcnJheVZpZXdfbmV3X0J5dGVEYXRhVmlld1R5cGVkRGF0YVZpZXdfQnl0ZURhdGFWaWV3X25ld2dldEludDhieXRlT2Zmc2V0c2V0SW50OGdldFVpbnQ4c2V0VWludDhnZXRJbnQxNmVuZGlhbnRvU2lnbmVkc2V0SW50MTZnZXRVaW50MTZzZXRVaW50MTZnZXRJbnQzMnNldEludDMyZ2V0VWludDMyc2V0VWludDMyZ2V0SW50NjRzZXRJbnQ2NGdldFVpbnQ2NHNldFVpbnQ2NGdldEZsb2F0MzJzZXRGbG9hdDMyZ2V0RmxvYXQ2NHNldEZsb2F0NjRnZXRGbG9hdDMyeDRzZXRGbG9hdDMyeDRfVHlwZWRJbnRMaXN0X1R5cGVkRmxvYXRMaXN0RW5kaWFuX2xpdHRsZUVuZGlhbmJpZ2xpdHRsZWhvc3RCeXRlRGF0YV92aWV3dHlwZWREYXRhdmlld3N1Ymxpc3RWaWV3ZWxlbWVudFNpemVJbnQ4TGlzdGJ5dGVzUGVyRWxlbWVudFR5cGVkRGF0YV9JbnQ4QXJyYXlfbmV3VHlwZWREYXRhX1VpbnQ4QXJyYXlfbmV3VWludDhDbGFtcGVkTGlzdFR5cGVkRGF0YV9VaW50OENsYW1wZWRBcnJheV9uZXdJbnQxNkxpc3RUeXBlZERhdGFfSW50MTZBcnJheV9uZXdieXRlTGVuZ3RoVGhlIG51bWJlciBvZiBieXRlcyB0byB2aWV3IG11c3QgYmUgYSBtdWx0aXBsZSBvZiBUeXBlZERhdGFfVWludDE2QXJyYXlfbmV3VHlwZWREYXRhX0ludDMyQXJyYXlfbmV3VHlwZWREYXRhX1VpbnQzMkFycmF5X25ld0ludDY0TGlzdFR5cGVkRGF0YV9JbnQ2NEFycmF5X25ld1VpbnQ2NExpc3RUeXBlZERhdGFfVWludDY0QXJyYXlfbmV3RmxvYXQzMkxpc3RUeXBlZERhdGFfRmxvYXQzMkFycmF5X25ld0Zsb2F0NjRMaXN0VHlwZWREYXRhX0Zsb2F0NjRBcnJheV9uZXdGbG9hdDMyeDRMaXN0VHlwZWREYXRhX0Zsb2F0MzJ4NEFycmF5X25ld0ludDMyeDRMaXN0VHlwZWREYXRhX0ludDMyeDRBcnJheV9uZXdGbG9hdDY0eDJMaXN0VHlwZWREYXRhX0Zsb2F0NjR4MkFycmF5X25ld0Zsb2F0MzJ4NHh4eHh4eHh5eHh4enh4eHd4eHl4eHh5eXh4eXp4eHl3eHh6eHh4enl4eHp6eHh6d3h4d3h4eHd5eHh3enh4d3d4eXh4eHl4eXh5eHp4eXh3eHl5eHh5eXl4eXl6eHl5d3h5enh4eXp5eHl6enh5end4eXd4eHl3eXh5d3p4eXd3eHp4eHh6eHl4enh6eHp4d3h6eXh4enl5eHp5enh6eXd4enp4eHp6eXh6enp4enp3eHp3eHh6d3l4end6eHp3d3h3eHh4d3h5eHd4enh3eHd4d3l4eHd5eXh3eXp4d3l3eHd6eHh3enl4d3p6eHd6d3h3d3h4d3d5eHd3enh3d3d5eHh4eXh4eXl4eHp5eHh3eXh5eHl4eXl5eHl6eXh5d3l4enh5eHp5eXh6enl4end5eHd4eXh3eXl4d3p5eHd3eXl4eHl5eHl5eXh6eXl4d3l5eXh5eXl5eXl5enl5eXd5eXp4eXl6eXl5enp5eXp3eXl3eHl5d3l5eXd6eXl3d3l6eHh5enh5eXp4enl6eHd5enl4eXp5eXl6eXp5enl3eXp6eHl6enl5enp6eXp6d3l6d3h5end5eXp3enl6d3d5d3h4eXd4eXl3eHp5d3h3eXd5eHl3eXl5d3l6eXd5d3l3enh5d3p5eXd6enl3end5d3d4eXd3eXl3d3p5d3d3enh4eHp4eHl6eHh6enh4d3p4eXh6eHl5enh5enp4eXd6eHp4enh6eXp4enp6eHp3enh3eHp4d3l6eHd6enh3d3p5eHh6eXh5enl4enp5eHd6eXl4enl5eXp5eXp6eXl3enl6eHp5enl6eXp6enl6d3p5d3h6eXd5enl3enp5d3d6enh4enp4eXp6eHp6enh3enp5eHp6eXl6enl6enp5d3p6enh6enp5enp6enp6end6end4enp3eXp6d3p6end3end4eHp3eHl6d3h6end4d3p3eXh6d3l5end5enp3eXd6d3p4end6eXp3enp6d3p3end3eHp3d3l6d3d6end3d3d4eHh3eHh5d3h4end4eHd3eHl4d3h5eXd4eXp3eHl3d3h6eHd4enl3eHp6d3h6d3d4d3h3eHd5d3h3end4d3d3eXh4d3l4eXd5eHp3eXh3d3l5eHd5eXl3eXl6d3l5d3d5enh3eXp5d3l6end5end3eXd4d3l3eXd5d3p3eXd3d3p4eHd6eHl3enh6d3p4d3d6eXh3enl5d3p5end6eXd3enp4d3p6eXd6enp3enp3d3p3eHd6d3l3end6d3p3d3d3eHh3d3h5d3d4end3eHd3d3l4d3d5eXd3eXp3d3l3d3d6eHd3enl3d3p6d3d6d3d3d3h3d3d5d3d3end3d3dfRmxvYXQzMng0RnJvbURvdWJsZXNGbG9hdDMyeDRfZnJvbURvdWJsZXNfRmxvYXQzMng0U3BsYXRGbG9hdDMyeDRfc3BsYXRzcGxhdHplcm9GbG9hdDMyeDRfemVyb2Zyb21JbnQzMng0Qml0c0Zsb2F0MzJ4NF9mcm9tSW50MzJ4NEJpdHNmcm9tRmxvYXQ2NHgyRmxvYXQzMng0X2Zyb21GbG9hdDY0eDJJbnQzMng0X0ludDMyeDRGcm9tSW50c0ludDMyeDRfZnJvbUludHNfSW50MzJ4NEZyb21Cb29sc0ludDMyeDRfZnJvbUJvb2xzYm9vbGZyb21GbG9hdDMyeDRCaXRzSW50MzJ4NF9mcm9tRmxvYXQzMng0Qml0c0Zsb2F0NjR4Ml9GbG9hdDY0eDJGcm9tRG91Ymxlc0Zsb2F0NjR4Ml9mcm9tRG91Ymxlc19GbG9hdDY0eDJTcGxhdEZsb2F0NjR4Ml9zcGxhdEZsb2F0NjR4Ml96ZXJvZnJvbUZsb2F0MzJ4NEZsb2F0NjR4Ml9mcm9tRmxvYXQzMng0VW5tb2RpZmlhYmxlQnl0ZUJ1ZmZlclZpZXdVbm1vZGlmaWFibGVCeXRlRGF0YVZpZXdfdW5zdXBwb3J0ZWRBbiBVbm1vZGlmaWFibGVCeXRlRGF0YVZpZXcgbWF5IG5vdCBiZSBtb2RpZmllZF9Vbm1vZGlmaWFibGVMaXN0TWl4aW5OTFREc3VibGlzdExlbmd0aF9Vbm1vZGlmaWFibGVVaW50OExpc3RWaWV3JlVubW9kaWZpYWJsZUxpc3RCYXNlJl9Vbm1vZGlmaWFibGVMaXN0TWl4aW5Vbm1vZGlmaWFibGVVaW50OExpc3RWaWV3X1VubW9kaWZpYWJsZUludDhMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlSW50OExpc3RWaWV3X1VubW9kaWZpYWJsZVVpbnQ4Q2xhbXBlZExpc3RWaWV3JlVubW9kaWZpYWJsZUxpc3RCYXNlJl9Vbm1vZGlmaWFibGVMaXN0TWl4aW5Vbm1vZGlmaWFibGVVaW50OENsYW1wZWRMaXN0Vmlld19Vbm1vZGlmaWFibGVVaW50MTZMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlVWludDE2TGlzdFZpZXdfVW5tb2RpZmlhYmxlSW50MTZMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlSW50MTZMaXN0Vmlld19Vbm1vZGlmaWFibGVVaW50MzJMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlVWludDMyTGlzdFZpZXdfVW5tb2RpZmlhYmxlSW50MzJMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlSW50MzJMaXN0Vmlld19Vbm1vZGlmaWFibGVVaW50NjRMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlVWludDY0TGlzdFZpZXdfVW5tb2RpZmlhYmxlSW50NjRMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlSW50NjRMaXN0Vmlld19Vbm1vZGlmaWFibGVJbnQzMng0TGlzdFZpZXcmVW5tb2RpZmlhYmxlTGlzdEJhc2UmX1VubW9kaWZpYWJsZUxpc3RNaXhpblVubW9kaWZpYWJsZUludDMyeDRMaXN0Vmlld19Vbm1vZGlmaWFibGVGbG9hdDMyeDRMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlRmxvYXQzMng0TGlzdFZpZXdfVW5tb2RpZmlhYmxlRmxvYXQ2NHgyTGlzdFZpZXcmVW5tb2RpZmlhYmxlTGlzdEJhc2UmX1VubW9kaWZpYWJsZUxpc3RNaXhpblVubW9kaWZpYWJsZUZsb2F0NjR4Mkxpc3RWaWV3X1VubW9kaWZpYWJsZUZsb2F0MzJMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlRmxvYXQzMkxpc3RWaWV3X1VubW9kaWZpYWJsZUZsb2F0NjRMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlRmxvYXQ2NExpc3RWaWV3X2NvbnZVMzJfY29udlU2NF9jb252RjMyX2NvbnZGNjRfYnl0ZVN3YXAxNl9ieXRlU3dhcDMyNDI3ODI1NTM2MDQyOTQ5MDE3NjBfYnl0ZVN3YXA2NF90b0ludF90b0ludDhfdG9VaW50OF90b0NsYW1wZWRVaW50OF90b0ludDE2X3RvVWludDE2X3RvSW50MzI0Mjk0OTY3Mjk1X3RvVWludDMyX3Rocm93SWZOdWxsX3JhbmdlQ2hlY2tfb2Zmc2V0QWxpZ25tZW50Q2hlY2thbGlnbm1lbnRPZmZzZXQgKCkgbXVzdCBiZSBhIG11bHRpcGxlIG9mIEJZVEVTX1BFUl9FTEVNRU5UIChuYXRpdmV3cmFwcGVyc05hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMU5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMk5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzM05hdGl2ZUZpZWxkV3JhcHBlckNsYXNzNGRhcnQuaW9IdHRwQ2xpZW50Ynl0ZXNfYnVpbGRlci5kYXJ0Y29tbW9uLmRhcnRkYXRhX3RyYW5zZm9ybWVyLmRhcnRkaXJlY3RvcnkuZGFydGRpcmVjdG9yeV9pbXBsLmRhcnRlbWJlZGRlcl9jb25maWcuZGFydGV2ZW50aGFuZGxlci5kYXJ0ZmlsZS5kYXJ0ZmlsZV9pbXBsLmRhcnRmaWxlX3N5c3RlbV9lbnRpdHkuZGFydGlvX3Jlc291cmNlX2luZm8uZGFydGlvX3NpbmsuZGFydGlvX3NlcnZpY2UuZGFydGxpbmsuZGFydG5hbWVzcGFjZV9pbXBsLmRhcnRuZXR3b3JrX3Byb2ZpbGluZy5kYXJ0b3ZlcnJpZGVzLmRhcnRwbGF0Zm9ybS5kYXJ0cGxhdGZvcm1faW1wbC5kYXJ0cHJvY2Vzcy5kYXJ0c2VjdXJlX3NlcnZlcl9zb2NrZXQuZGFydHNlY3VyZV9zb2NrZXQuZGFydHNlY3VyaXR5X2NvbnRleHQuZGFydHNlcnZpY2Vfb2JqZWN0LmRhcnRzb2NrZXQuZGFydHN0ZGlvLmRhcnRzdHJpbmdfdHJhbnNmb3JtZXIuZGFydHN5bmNfc29ja2V0LmRhcnRfQXN5bmNEaXJlY3RvcnlMaXN0ZXJPcHNJbXBsX3NldFBvaW50ZXJEaXJlY3RvcnlfU2V0QXN5bmNEaXJlY3RvcnlMaXN0ZXJQb2ludGVyZ2V0UG9pbnRlckRpcmVjdG9yeV9HZXRBc3luY0RpcmVjdG9yeUxpc3RlclBvaW50ZXJfUmFuZG9tQWNjZXNzRmlsZU9wc0ltcGxGaWxlX1NldFBvaW50ZXJGaWxlX0dldFBvaW50ZXJGaWxlX0Nsb3NlcmVhZEJ5dGVGaWxlX1JlYWRCeXRlcmVhZEZpbGVfUmVhZHJlYWRJbnRvRmlsZV9SZWFkSW50b0ZpbGVfV3JpdGVCeXRld3JpdGVGcm9tRmlsZV9Xcml0ZUZyb21GaWxlX1Bvc2l0aW9uc2V0UG9zaXRpb25GaWxlX1NldFBvc2l0aW9udHJ1bmNhdGVGaWxlX1RydW5jYXRlRmlsZV9MZW5ndGhGaWxlX0ZsdXNobG9ja0ZpbGVfTG9ja19XYXRjaGVyUGF0aHBhdGhJZHBhdGhldmVudHNfSW5vdGlmeUZpbGVTeXN0ZW1XYXRjaGVyX2lkTWFwcmVjdXJzaXZlX25ld1dhdGNoZXJfZG9uZVdhdGNoZXJfcGF0aFdhdGNoZWRfd2F0Y2hlclBhdGhfcGF0aFdhdGNoZWRFbmRfV2luMzJGaWxlU3lzdGVtV2F0Y2hlcl9GU0V2ZW50U3RyZWFtRmlsZVN5c3RlbVdhdGNoZXJzb2NrZXRJZF9GaWx0ZXJJbXBsRmlsdGVyX1Byb2Nlc3Nwcm9jZXNzZWRGaWx0ZXJfUHJvY2Vzc2VkX1pMaWJJbmZsYXRlRmlsdGVyd2luZG93Qml0c2RpY3Rpb25hcnlyYXdGaWx0ZXJfQ3JlYXRlWkxpYkluZmxhdGVfWkxpYkRlZmxhdGVGaWx0ZXJnemlwbWVtTGV2ZWxzdHJhdGVneUZpbHRlcl9DcmVhdGVaTGliRGVmbGF0ZV9JT1NlcnZpY2VQb3J0c21heFBvcnRzX3BvcnRzX2ZyZWVQb3J0c191c2VkUG9ydHNfZ2V0UG9ydGZvclJlcXVlc3RJZF9yZXR1cm5Qb3J0X25ld1NlcnZpY2VQb3J0SU9TZXJ2aWNlX05ld1NlcnZpY2VQb3J0X05hbWVzcGFjZUltcGxfY2FjaGVkTmFtZXNwYWNlX2NyZWF0ZU5hbWVzcGFjZV9DcmVhdGVuYW1lc3BhY2VfZ2V0UG9pbnRlck5hbWVzcGFjZV9HZXRQb2ludGVyX2dldERlZmF1bHROYW1lc3BhY2VfR2V0RGVmYXVsdF9zZXR1cE5hbWVzcGFjZV9uYW1lc3BhY2VfbmFtZXNwYWNlUG9pbnRlcl9TaWduYWxDb250cm9sbGVyc2lnbmFsX2xpc3Rlbl9zaWduYWxOdW1iZXJGYWlsZWQgdG8gbGlzdGVuIGZvciBzb2NrZXRfc2V0U2lnbmFsSGFuZGxlclByb2Nlc3NfU2V0U2lnbmFsSGFuZGxlcl9jbGVhclNpZ25hbEhhbmRsZXJQcm9jZXNzX0NsZWFyU2lnbmFsSGFuZGxlcl9Qcm9jZXNzU3RhcnRTdGF0dXNfZXJyb3JDb2RlX2Vycm9yTWVzc2FnZV9Qcm9jZXNzSW1wbE5hdGl2ZVdyYXBwZXJfUHJvY2Vzc0ltcGxfcmVzb3VyY2VJbmZvY29ubmVjdGVkUmVzb3VyY2VIYW5kbGVyX3BhdGhfd29ya2luZ0RpcmVjdG9yeV9lbnZpcm9ubWVudF9tb2RlX3N0ZGluX3N0ZG91dF9zdGRlcnJfZXhpdEhhbmRsZXJfZW5kZWRfc3RhcnRlZF9leGl0Q29kZWluY2x1ZGVQYXJlbnRFbnZpcm9ubWVudHJ1bkluU2hlbGxleHQuZGFydC5pby5nZXRQcm9jZXNzZXNleHQuZGFydC5pby5nZXRQcm9jZXNzQnlJZFBhdGggaXMgbm90IGEgU3RyaW5nOiBBcmd1bWVudHMgaXMgbm90IGEgTGlzdDogTm9uLXN0cmluZyBhcmd1bWVudDogX3dpbmRvd3NBcmd1bWVudEVzY2FwZVdvcmtpbmdEaXJlY3RvcnkgaXMgbm90IGEgU3RyaW5nOiBFbnZpcm9ubWVudCBpcyBub3QgYSBtYXA6IEVudmlyb25tZW50IGtleSBvciB2YWx1ZSBpcyBub3QgYSBzdHJpbmc6IChNb2RlIGlzIG5vdCBhIFByb2Nlc3NTdGFydE1vZGU6IF9zdGRpbk5hdGl2ZVNvY2tldF9uYXRpdmVTb2NrZXRfc3Rkb3V0TmF0aXZlU29ja2V0X3N0ZGVyck5hdGl2ZVNvY2tldF9tb2RlSXNBdHRhY2hlZF9tb2RlSGFzU3RkaW9fZ2V0U2hlbGxDb21tYW5kY21kLmV4ZS9iaW4vc2hfZ2V0U2hlbGxBcmd1bWVudHNzaGVsbEFyZ3VtZW50cy9jY29tbWFuZExpbmVyZXBsYWNlQWxsJyInIictYyAnCVxuZXh0UG9zcXVvdGVQb3NudW1CYWNrc2xhc2hcXFwiX2ludEZyb21CeXRlc3N0YXR1c19zdGFydE5hdGl2ZWV4aXREYXRhUmVhZEVYSVRfREFUQV9TSVpFZXhpdERhdGFCdWZmZXJleGl0Q29kZWludHNuZWdhdGl2ZWhhbmRsZUV4aXRkZXN0cm95c3RvcHBlZF9ydW5BbmRXYWl0c3Rkb3V0RW5jb2RpbmdzdGRlcnJFbmNvZGluZ193YWl0Z2V0T3V0cHV0ZW5jb2RpbmdQcm9jZXNzX1N0YXJ0d29ya2luZ0RpcmVjdG9yeXN0ZGluc3Rkb3V0c3RkZXJyZXhpdEhhbmRsZXJQcm9jZXNzX1dhaXRTSUdURVJNQXJndW1lbnQgJ3NpZ25hbCcgbXVzdCBiZSBhIFByb2Nlc3NTaWduYWxwaWRfSW50ZXJuZXRBZGRyZXNzX2FkZHJlc3NMb29wYmFja0lQdjRfYWRkcmVzc0xvb3BiYWNrSVB2Nl9hZGRyZXNzQW55SVB2NF9hZGRyZXNzQW55SVB2Nl9JUHY0QWRkckxlbmd0aF9JUHY2QWRkckxlbmd0aGxvb3BiYWNrSVB2NGxvb3BiYWNrSVB2NmFueUlQdjRhbnlJUHY2X2hvc3RfaW5fYWRkcl9zY29wZV9pZHJhd0FkZHJlc3Npc0xvb3BiYWNraXNMaW5rTG9jYWxpc011bHRpY2FzdHJldmVyc2VJbnZhbGlkIGludGVybmV0IGFkZHJlc3MgaW5fYWRkcmZpeGVkMTI3LjAuMC4xOjoxMC4wLjAuMDo6X2Nsb25lV2l0aE5ld0hvc3RJbnRlcm5ldEFkZHJlc3MoJycsIF9wYXJzZUludGVybmV0QWRkcmVzc19QYXJzZV9OZXR3b3JrSW50ZXJmYWNlYWRkcmVzc2VzTmV0d29ya0ludGVyZmFjZSgnX05hdGl2ZVNvY2tldE5hdGl2ZVdyYXBwZXJfX05hdGl2ZVNvY2tldCZfTmF0aXZlU29ja2V0TmF0aXZlV3JhcHBlciZfU2VydmljZU9iamVjdF9fc2VydmljZUlkX3NlcnZpY2VJZF9zZXJ2aWNlUGF0aF9zZXJ2aWNlVHlwZVBhdGhfc2VydmljZVR5cGVOYW1lX3NlcnZpY2VUeXBlX05hdGl2ZVNvY2tldHJlYWRFdmVudHdyaXRlRXZlbnRlcnJvckV2ZW50Y2xvc2VkRXZlbnRkZXN0cm95ZWRFdmVudGZpcnN0RXZlbnRsYXN0RXZlbnRldmVudENvdW50Y2xvc2VDb21tYW5kc2h1dGRvd25SZWFkQ29tbWFuZHNodXRkb3duV3JpdGVDb21tYW5kcmV0dXJuVG9rZW5Db21tYW5kc2V0RXZlbnRNYXNrQ29tbWFuZGZpcnN0Q29tbWFuZGxhc3RDb21tYW5kbGlzdGVuaW5nU29ja2V0cGlwZVNvY2tldHR5cGVOb3JtYWxTb2NrZXR0eXBlTGlzdGVuaW5nU29ja2V0dHlwZVBpcGV0eXBlVHlwZU1hc2t0Y3BTb2NrZXR1ZHBTb2NrZXRpbnRlcm5hbFNvY2tldGludGVybmFsU2lnbmFsU29ja2V0dHlwZVRjcFNvY2tldHR5cGVVZHBTb2NrZXR0eXBlSW50ZXJuYWxTb2NrZXR0eXBlSW50ZXJuYWxTaWduYWxTb2NrZXR0eXBlUHJvdG9jb2xNYXNraG9zdE5hbWVMb29rdXBNZXNzYWdlbGlzdEludGVyZmFjZXNNZXNzYWdlcmV2ZXJzZUxvb2t1cE1lc3NhZ2Vwcm90b2NvbElQdjRwcm90b2NvbElQdjZub3JtYWxUb2tlbkJhdGNoU2l6ZWxpc3RlbmluZ1Rva2VuQmF0Y2hTaXplX3JldHJ5RHVyYXRpb25fcmV0cnlEdXJhdGlvbkxvb3BiYWNraXNDbG9zaW5naXNDbG9zZWRSZWFkY2xvc2VkUmVhZEV2ZW50U2VudGlzQ2xvc2VkV3JpdGVjbG9zZUNvbXBsZXRlcmV2ZW50SGFuZGxlcnNldmVudFBvcnRmbGFnc1NlbnR0eXBlRmxhZ3Nsb2NhbFBvcnRsb2NhbEFkZHJlc3NhdmFpbGFibGV0b2tlbnNzZW5kUmVhZEV2ZW50c3JlYWRFdmVudElzc3VlZHNlbmRXcml0ZUV2ZW50c3dyaXRlRXZlbnRJc3N1ZWR3cml0ZUF2YWlsYWJsZXJlc291cmNlSW5mb2RhdGFncmFtbm9ybWFsX3dhdGNoQ29tbW9ubmF0aXZlU2V0U29ja2V0SWR3YXRjaFNpZ25hbEZhaWxlZCBob3N0IGxvb2t1cDogJ3JldmVyc2VMb29rdXBhZGRyRmFpbGVkIHJldmVyc2UgaG9zdCBsb29rdXBsaXN0SW50ZXJmYWNlc2luY2x1ZGVMb29wYmFja2luY2x1ZGVMaW5rTG9jYWxGYWlsZWQgbGlzdGluZyBpbnRlcmZhY2VzZXNjYXBlTGlua0xvY2FsQWRkcmVzcyBpcyBub3QgYSB2YWxpZCBsaW5rLWxvY2FsIGFkZHJlc3MgYnV0IGNvbnRhaW5zICUuIFNjb3BlIGlkIHNob3VsZCBiZSB1c2VkIGFzIHBhcnQgb2YgbGluay1sb2NhbCBhZGRyZXNzLjI1Y2hlY2tMaW5rTG9jYWxBZGRyZXNzZmU4OXN0YXJ0Q29ubmVjdHNvdXJjZUFkZHJlc3Njb25uZWN0aW5nY29ubmVjdE5leHRuYXRpdmVDcmVhdGVDb25uZWN0bmF0aXZlQ3JlYXRlQmluZENvbm5lY3Rpc0JpbmRFcnJvckJpbmQgZmFpbGVkQ29ubmVjdGlvbiBmYWlsZWRzZXRIYW5kbGVyc29zRXJyb3JuYXRpdmVHZXRFcnJvcnNldExpc3RlbmluZ0Nvbm5lY3Rpb24gYXR0ZW1wdCBjYW5jZWxsZWQsIGhvc3Q6ICwgcG9ydDogY29ubmVjdHRhc2tzb2NrZXRGdXR1cmVDb25uZWN0aW9uIHRpbWVkIG91dCwgaG9zdDogX3Jlc29sdmVIb3N0YmFja2xvZ3Y2T25seXNoYXJlZG5hdGl2ZUNyZWF0ZUJpbmRMaXN0ZW5GYWlsZWQgdG8gY3JlYXRlIHNlcnZlciBzb2NrZXRjb25uZWN0VG9FdmVudEhhbmRsZXJzZXR1cFJlc291cmNlSW5mb2JpbmREYXRhZ3JhbXJldXNlQWRkcmVzc3JldXNlUG9ydHR0bG5hdGl2ZUNyZWF0ZUJpbmREYXRhZ3JhbUZhaWxlZCB0byBjcmVhdGUgZGF0YWdyYW0gc29ja2V0aXNMaXN0ZW5pbmdpc1BpcGVpc0ludGVybmFsaXNJbnRlcm5hbFNpZ25hbGlzVGNwaXNVZHBJbGxlZ2FsIGxlbmd0aCBuYXRpdmVSZWFkcmVwb3J0RXJyb3JSZWFkIGZhaWxlZHRvdGFsUmVhZGRpZFJlYWRuYXRpdmVHZXRTb2NrZXRJZF9Tb2NrZXRQcm9maWxlVHlwZS5yZWFkQnl0ZXNyZWNlaXZlbmF0aXZlUmVjdkZyb21SZWNlaXZlIGZhaWxlZG5hdGl2ZUF2YWlsYWJsZUludmFsaWQgYXJndW1lbnRzIHRvIHdyaXRlIG9uIFNvY2tldGJ1ZmZlckFuZFN0YXJ0X1NvY2tldFByb2ZpbGVUeXBlLndyaXRlQnl0ZXNuYXRpdmVXcml0ZVdyaXRlIGZhaWxlZGFkZFdyaXRlbmF0aXZlU2VuZFRvU2VuZCBmYWlsZWRhY2NlcHRyZXR1cm5Ub2tlbnNuYXRpdmVBY2NlcHRhZGRSZWFkU29ja2V0IGhhcyBiZWVuIGNsb3NlZG5hdGl2ZUdldFBvcnRyZW1vdGVQb3J0bmF0aXZlR2V0UmVtb3RlUGVlcnJlbW90ZUFkZHJlc3Npc3N1ZVJlYWRFdmVudGlzc3VlaXNzdWVXcml0ZUV2ZW50bXVsdGlwbGV4ZXZlbnRzT2JqZGlzY29ubmVjdEZyb21FdmVudEhhbmRsZXJ0b2tlbkJhdGNoU2l6ZXNlbmRUb0V2ZW50SGFuZGxlcmNsb3NlZGRlc3Ryb3llZGZsYWdzZGlyZWN0aW9uc2h1dGRvd25SZWFkc2h1dGRvd25Xcml0ZWZ1bGxEYXRhZXh0LmRhcnQuaW8uZ2V0T3BlblNvY2tldHNleHQuZGFydC5pby5nZXRTb2NrZXRCeUlEaXNFcnJvclJlc3BvbnNlY3JlYXRlRXJyb3JVbmtub3duIGVycm9yZ2V0T3B0aW9ub3B0aW9ubmF0aXZlR2V0T3B0aW9uc2V0T3B0aW9ubmF0aXZlU2V0T3B0aW9uZ2V0UmF3T3B0aW9ub3B0aW9uLnZhbHVlbmF0aXZlR2V0UmF3T3B0aW9uc2V0UmF3T3B0aW9ubmF0aXZlU2V0UmF3T3B0aW9ubXVsdGljYXN0QWRkcmVzc2ludGVyZmFjZVRoZSBuZXR3b3JrIGludGVyZmFjZSBkb2VzIG5vdCBoYXZlIGFuIGFkZHJlc3Mgb2YgdGhlIHNhbWUgZmFtaWx5IGFzIHRoZSBtdWx0aWNhc3QgYWRkcmVzc2pvaW5NdWx0aWNhc3RpbnRlcmZhY2VBZGRyaW50ZXJmYWNlSW5kZXhuYXRpdmVKb2luTXVsdGljYXN0bGVhdmVNdWx0aWNhc3RuYXRpdmVMZWF2ZU11bHRpY2FzdFNvY2tldF9TZXRTb2NrZXRJZFNvY2tldF9BdmFpbGFibGVTb2NrZXRfUmVhZFNvY2tldF9SZWN2RnJvbVNvY2tldF9Xcml0ZUxpc3RTb2NrZXRfU2VuZFRvU29ja2V0X0NyZWF0ZUNvbm5lY3RzY29wZV9pZFNvY2tldF9DcmVhdGVCaW5kQ29ubmVjdHNvdXJjZUFkZHJTb2NrZXRCYXNlX0lzQmluZEVycm9yZXJyb3JOdW1iZXJTZXJ2ZXJTb2NrZXRfQ3JlYXRlQmluZExpc3RlblNvY2tldF9DcmVhdGVCaW5kRGF0YWdyYW1TZXJ2ZXJTb2NrZXRfQWNjZXB0U29ja2V0X0dldFBvcnRTb2NrZXRfR2V0UmVtb3RlUGVlclNvY2tldF9HZXRTb2NrZXRJZFNvY2tldF9HZXRFcnJvclNvY2tldF9HZXRPcHRpb25wcm90b2NvbFNvY2tldF9HZXRSYXdPcHRpb25Tb2NrZXRfU2V0T3B0aW9uU29ja2V0X1NldFJhd09wdGlvblNvY2tldF9Kb2luTXVsdGljYXN0U29ja2V0X0xlYXZlTXVsdGljYXN0X1Jhd1NlcnZlclNvY2tldF9zb2NrZXRfcmVmZXJlbmNlUG9ydF92Nk9ubHlJbnZhbGlkIGJhY2tsb2cgU3RyZWFtIHdhcyBhbHJlYWR5IGxpc3RlbmVkIHRvX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2Vfb25QYXVzZVN0YXRlQ2hhbmdldGNwX3Jlc3VtZV9SYXdTb2NrZXRfcmVhZEV2ZW50c0VuYWJsZWRfd3JpdGVFdmVudHNFbmFibGVkX2lzTWFjT1NUZXJtaW5hbElucHV0d3JpdGVFdmVudHNFbmFibGVkbmF0aXZlVGFza25hdGl2ZVNvY2tldF93cml0ZVBpcGVuYXRpdmVfcmVhZFBpcGVmZHNvY2tldFR5cGVfU29ja2V0UHJvZmlsZVR5cGUuZW5kVGltZXJlYWRFdmVudHNFbmFibGVkZW5hYmxlZF9TZXJ2ZXJTb2NrZXRyYXdTb2NrZXRfU29ja2V0U3RyZWFtQ29uc3VtZXJzdHJlYW1Db21wbGV0ZXJfZW5zdXJlUmF3U29ja2V0U3Vic2NyaXB0aW9uX3Jhd19jb25zdW1lckRvbmVfd3JpdGVfZW5hYmxlV3JpdGVFdmVudF9kaXNhYmxlV3JpdGVFdmVudF9Tb2NrZXRfY2xvc2VkX2NvbnRyb2xsZXJDbG9zZWRfY29uc3VtZXJfZGV0YWNoUmVhZHlvYmpzZXBDYW5ub3Qgc2VuZCBlcnJvcnMgb24gc29ja2V0c19jbG9zZVJhd1NvY2tldF9kZXRhY2hSYXdfUmF3RGF0YWdyYW1Tb2NrZXR1ZHBncm91cG11bHRpY2FzdExvb3BiYWNrbXVsdGljYXN0SG9wc211bHRpY2FzdEludGVyZmFjZU5vdCBpbXBsZW1lbnRlZGJyb2FkY2FzdEVuYWJsZWRfU2VjdXJlU29ja2V0cmVuZWdvdGlhdGV1c2VTZXNzaW9uQ2FjaGVyZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGVyZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGVwZWVyQ2VydGlmaWNhdGVwZWVyQ2VydGlmaWNhdGUgY2FsbGVkIG9uIGRlc3Ryb3llZCBTZWN1cmVTb2NrZXRzZWxlY3RlZFByb3RvY29sc2VsZWN0ZWRQcm90b2NvbCBjYWxsZWQgb24gZGVzdHJveWVkIFNlY3VyZVNvY2tldF9TZWN1cmVGaWx0ZXJJbXBsU0laRUVOQ1JZUFRFRF9TSVpFYnVmZmVyc2dldFNlY3VyZVNvY2tldF9Db25uZWN0aG9zdE5hbWVjb250ZXh0aXNfc2VydmVycHJvdG9jb2xzX2Rlc3Ryb3lTZWN1cmVTb2NrZXRfRGVzdHJveWhhbmRzaGFrZVNlY3VyZVNvY2tldF9IYW5kc2hha2VyZWhhbmRzaGFrZXByb2Nlc3NCdWZmZXJidWZmZXJJbmRleFNlY3VyZVNvY2tldF9HZXRTZWxlY3RlZFByb3RvY29sU2VjdXJlU29ja2V0X1JlbmVnb3RpYXRlaW5pdFNlY3VyZVNvY2tldF9Jbml0U2VjdXJlU29ja2V0X1BlZXJDZXJ0aWZpY2F0ZXJlZ2lzdGVyQmFkQ2VydGlmaWNhdGVDYWxsYmFja1NlY3VyZVNvY2tldF9SZWdpc3RlckJhZENlcnRpZmljYXRlQ2FsbGJhY2tyZWdpc3RlckhhbmRzaGFrZUNvbXBsZXRlQ2FsbGJhY2tTZWN1cmVTb2NrZXRfUmVnaXN0ZXJIYW5kc2hha2VDb21wbGV0ZUNhbGxiYWNraGFuZHNoYWtlQ29tcGxldGVIYW5kbGVyX3BvaW50ZXJTZWN1cmVTb2NrZXRfRmlsdGVyUG9pbnRlcl9TZWN1cml0eUNvbnRleHRkZWZhdWx0Q29udGV4dHdpdGhUcnVzdGVkUm9vdHNfY3JlYXRlTmF0aXZlQ29udGV4dF90cnVzdEJ1aWx0aW5Sb290c1NlY3VyaXR5Q29udGV4dF9BbGxvY2F0ZXVzZVByaXZhdGVLZXlmaWxlcGFzc3dvcmRyZWFkQXNCeXRlc1N5bmN1c2VQcml2YXRlS2V5Qnl0ZXNTZWN1cml0eUNvbnRleHRfVXNlUHJpdmF0ZUtleUJ5dGVza2V5Qnl0ZXNzZXRUcnVzdGVkQ2VydGlmaWNhdGVzc2V0VHJ1c3RlZENlcnRpZmljYXRlc0J5dGVzU2VjdXJpdHlDb250ZXh0X1NldFRydXN0ZWRDZXJ0aWZpY2F0ZXNCeXRlc2NlcnRCeXRlc3VzZUNlcnRpZmljYXRlQ2hhaW51c2VDZXJ0aWZpY2F0ZUNoYWluQnl0ZXNTZWN1cml0eUNvbnRleHRfVXNlQ2VydGlmaWNhdGVDaGFpbkJ5dGVzY2hhaW5CeXRlc3NldENsaWVudEF1dGhvcml0aWVzc2V0Q2xpZW50QXV0aG9yaXRpZXNCeXRlc1NlY3VyaXR5Q29udGV4dF9TZXRDbGllbnRBdXRob3JpdGllc0J5dGVzYXV0aENlcnRCeXRlc3NldEFscG5Qcm90b2NvbHNpc1NlcnZlcmVuY29kZWRQcm90b2NvbHNfc2V0QWxwblByb3RvY29sc1NlY3VyaXR5Q29udGV4dF9TZXRBbHBuUHJvdG9jb2xzU2VjdXJpdHlDb250ZXh0X1RydXN0QnVpbHRpblJvb3RzX1g1MDlDZXJ0aWZpY2F0ZUltcGxfY2FjaGVkRGVyX2NhY2hlZFBlbV9jYWNoZWRTaGExX2Rlclg1MDlfRGVyZGVyX3BlbVg1MDlfUGVtcGVtX3NoYTFYNTA5X1NoYTFzaGExc3ViamVjdFg1MDlfU3ViamVjdGlzc3Vlclg1MDlfSXNzdWVyc3RhcnRWYWxpZGl0eV9zdGFydFZhbGlkaXR5aXNVdGNlbmRWYWxpZGl0eV9lbmRWYWxpZGl0eVg1MDlfU3RhcnRWYWxpZGl0eVg1MDlfRW5kVmFsaWRpdHlfUmF3U3luY2hyb25vdXNTb2NrZXRjb25uZWN0U3luY2Nsb3NlU3luY3JlYWRJbnRvU3luY3JlYWRTeW5jd3JpdGVGcm9tU3luY19OYXRpdmVTeW5jaHJvbm91c1NvY2tldE5hdGl2ZVdyYXBwZXJfTmF0aXZlU3luY2hyb25vdXNTb2NrZXRQYXJhbWV0ZXIgaG9zdCBjYW5ub3QgYmUgbnVsbF9uYXRpdmVDcmVhdGVDb25uZWN0U3luY19uYXRpdmVBdmFpbGFibGVfbmF0aXZlR2V0UG9ydF9uYXRpdmVHZXRSZW1vdGVQZWVyX25hdGl2ZUNsb3NlU3luY19jaGVja0F2YWlsYWJsZVNvY2tldCBpcyBjbG9zZWQgZm9yIHJlYWRpbmdJbnZhbGlkIGFyZ3VtZW50cyB0byByZWFkSW50b1N5bmNzdGFydCBjYW5ub3QgYmUgbnVsbF9uYXRpdmVSZWFkSW50b3JlYWRJbnRvU3luYyBmYWlsZWRfbmF0aXZlUmVhZF9uYXRpdmVTaHV0ZG93blJlYWRfbmF0aXZlU2h1dGRvd25Xcml0ZVNvY2tldCBpcyBjbG9zZWQgZm9yIHdyaXRpbmdJbnZhbGlkIGFyZ3VtZW50cyB0byB3cml0ZUZyb21TeW5jc3RhcnQgY2Fubm90IGJlIGVxdWFsIHRvIG51bGxfbmF0aXZlV3JpdGV3cml0ZUZyb21TeW5jIGZhaWxlZF9uYXRpdmVMb29rdXBSZXF1ZXN0U3luY2hyb25vdXNTb2NrZXRfTG9va3VwUmVxdWVzdFN5bmNocm9ub3VzU29ja2V0X0NyZWF0ZUNvbm5lY3RTeW5jU3luY2hyb25vdXNTb2NrZXRfQXZhaWxhYmxlU3luY2hyb25vdXNTb2NrZXRfQ2xvc2VTeW5jU3luY2hyb25vdXNTb2NrZXRfR2V0UG9ydFN5bmNocm9ub3VzU29ja2V0X0dldFJlbW90ZVBlZXJTeW5jaHJvbm91c1NvY2tldF9SZWFkU3luY2hyb25vdXNTb2NrZXRfUmVhZExpc3RTeW5jaHJvbm91c1NvY2tldF9TaHV0ZG93blJlYWRTeW5jaHJvbm91c1NvY2tldF9TaHV0ZG93bldyaXRlU3luY2hyb25vdXNTb2NrZXRfV3JpdGVMaXN0Qnl0ZXNCdWlsZGVyYWRkQnl0ZXRha2VCeXRlc3RvQnl0ZXNfQ29weWluZ0J5dGVzQnVpbGRlcl9pbml0U2l6ZV9lbXB0eUxpc3RieXRlc0xlbmd0aHJlcXVpcmVkbmV3U2l6ZV9wb3cycm91bmR1cF9CeXRlc0J1aWxkZXJfY2h1bmtzdHlwZWRCeXRlc0lPRXhjZXB0aW9uT1NFcnJvcm5vRXJyb3JDb2RlT1MgRXJyb3IsIGVycm5vID0gOiBlcnJubyA9IF9CdWZmZXJBbmRTdGFydF9JT0NyeXB0b2dldFJhbmRvbUJ5dGVzQ3J5cHRvX0dldFJhbmRvbUJ5dGVzWkxpYk9wdGlvbm1pbldpbmRvd0JpdHNNSU5fV0lORE9XX0JJVFNVc2UgbWluV2luZG93Qml0cyBpbnN0ZWFkbWF4V2luZG93Qml0c01BWF9XSU5ET1dfQklUU1VzZSBtYXhXaW5kb3dCaXRzIGluc3RlYWRkZWZhdWx0V2luZG93Qml0c0RFRkFVTFRfV0lORE9XX0JJVFNVc2UgZGVmYXVsdFdpbmRvd0JpdHMgaW5zdGVhZG1pbkxldmVsTUlOX0xFVkVMVXNlIG1pbkxldmVsIGluc3RlYWRtYXhMZXZlbE1BWF9MRVZFTFVzZSBtYXhMZXZlbCBpbnN0ZWFkZGVmYXVsdExldmVsREVGQVVMVF9MRVZFTFVzZSBkZWZhdWx0TGV2ZWwgaW5zdGVhZG1pbk1lbUxldmVsTUlOX01FTV9MRVZFTFVzZSBtaW5NZW1MZXZlbCBpbnN0ZWFkbWF4TWVtTGV2ZWxNQVhfTUVNX0xFVkVMVXNlIG1heE1lbUxldmVsIGluc3RlYWRkZWZhdWx0TWVtTGV2ZWxERUZBVUxUX01FTV9MRVZFTFVzZSBkZWZhdWx0TWVtTGV2ZWwgaW5zdGVhZHN0cmF0ZWd5RmlsdGVyZWRTVFJBVEVHWV9GSUxURVJFRFVzZSBzdHJhdGVneUZpbHRlcmVkIGluc3RlYWRzdHJhdGVneUh1ZmZtYW5Pbmx5U1RSQVRFR1lfSFVGRk1BTl9PTkxZVXNlIHN0cmF0ZWd5SHVmZm1hbk9ubHkgaW5zdGVhZHN0cmF0ZWd5UmxlU1RSQVRFR1lfUkxFVXNlIHN0cmF0ZWd5UmxlIGluc3RlYWRzdHJhdGVneUZpeGVkU1RSQVRFR1lfRklYRURVc2Ugc3RyYXRlZ3lGaXhlZCBpbnN0ZWFkc3RyYXRlZ3lEZWZhdWx0U1RSQVRFR1lfREVGQVVMVFVzZSBzdHJhdGVneURlZmF1bHQgaW5zdGVhZFpMaWJDb2RlY19kZWZhdWx0R1ppcENvZGVjWkxpYkVuY29kZXJidWlsZGVyWkxpYkRlY29kZXJSYXdaTGliRmlsdGVyZGVmbGF0ZUZpbHRlcmluZmxhdGVGaWx0ZXJfbWFrZVpMaWJEZWZsYXRlRmlsdGVyX21ha2VaTGliSW5mbGF0ZUZpbHRlcl9CdWZmZXJTaW5rX1pMaWJFbmNvZGVyU2lua19aTGliRGVjb2RlclNpbmtfRmlsdGVyU2lua19lbXB0eW91dERpcmVjdG9yeW92ZXJyaWRlc2NyZWF0ZURpcmVjdG9yeWZyb21SYXdQYXRoZnJvbVVyaXRvRmlsZVBhdGhnZXRDdXJyZW50RGlyZWN0b3J5c2V0Q3VycmVudERpcmVjdG9yeWNyZWF0ZWNyZWF0ZVN5bmNzeXN0ZW1UZW1wZ2V0U3lzdGVtVGVtcERpcmVjdG9yeWNyZWF0ZVRlbXBjcmVhdGVUZW1wU3luY3Jlc29sdmVTeW1ib2xpY0xpbmtzcmVzb2x2ZVN5bWJvbGljTGlua3NTeW5jcmVuYW1lbmV3UGF0aHJlbmFtZVN5bmNhYnNvbHV0ZWZvbGxvd0xpbmtzbGlzdFN5bmNfRGlyZWN0b3J5X3Jhd1BhdGhyYXdQYXRocmF3UGF0aCBjYW5ub3QgYmUgbnVsbERpcmVjdG9yeV9DdXJyZW50X3NldEN1cnJlbnREaXJlY3RvcnlfU2V0Q3VycmVudF9jcmVhdGVUZW1wRGlyZWN0b3J5X0NyZWF0ZVRlbXBfc3lzdGVtVGVtcERpcmVjdG9yeV9TeXN0ZW1UZW1wX2V4aXN0c0RpcmVjdG9yeV9FeGlzdHNEaXJlY3RvcnlfQ3JlYXRlX2RlbGV0ZU5hdGl2ZURpcmVjdG9yeV9EZWxldGVfcmVuYW1lRGlyZWN0b3J5X1JlbmFtZV9maWxsV2l0aERpcmVjdG9yeUxpc3RpbmdEaXJlY3RvcnlfRmlsbFdpdGhEaXJlY3RvcnlMaXN0aW5nR2V0dGluZyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGZhaWxlZCBpcyBub3QgYSBTdHJpbmcgb3IgRGlyZWN0b3J5VGhpcyBlbWJlZGRlciBkaXNhbGxvd3Mgc2V0dGluZyBEaXJlY3RvcnkuY3VycmVudFNldHRpbmcgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBmYWlsZWRleGlzdHNfaXNFcnJvclJlc3BvbnNlX2V4Y2VwdGlvbk9yRXJyb3JGcm9tUmVzcG9uc2VFeGlzdHMgZmFpbGVkZXhpc3RzU3luY19hYnNvbHV0ZVBhdGhDcmVhdGlvbiBmYWlsZWREaXJlY3RvcnkuY3JlYXRlVGVtcCBjYWxsZWQgd2l0aCBhbiBlbXB0eSBwYXRoLiBUbyB1c2UgdGhlIHN5c3RlbSB0ZW1wIGRpcmVjdG9yeSwgdXNlIERpcmVjdG9yeS5zeXN0ZW1UZW1wZnVsbFByZWZpeGVuZHNXaXRoQ3JlYXRpb24gb2YgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmYWlsZWRfZGVsZXRlRGVsZXRpb24gZmFpbGVkX2RlbGV0ZVN5bmNSZW5hbWUgZmFpbGVkRGlyZWN0b3J5OiAnZXJyX0FzeW5jRGlyZWN0b3J5TGlzdGVyT3BzX0FzeW5jRGlyZWN0b3J5TGlzdGVybGlzdEZpbGVsaXN0RGlyZWN0b3J5bGlzdExpbmtsaXN0RXJyb3JsaXN0RG9uZXJlc3BvbnNlVHlwZXJlc3BvbnNlUGF0aHJlc3BvbnNlQ29tcGxldGVyZXNwb25zZUVycm9yY2FuY2VsZWRuZXh0UnVubmluZ19vcHNJbnRlcm5hbCBlcnJvcl9jbGVhbnVwZXJyb3JUeXBlcmVzcG9uc2VFcnJvckluZm9lcnJvclBhdGhEaXJlY3RvcnkgbGlzdGluZyBmYWlsZWRfRW1iZWRkZXJDb25maWdfbWF5Q2hkaXJfbWF5RXhpdF9tYXlTZXRFY2hvTW9kZV9tYXlTZXRMaW5lTW9kZV9tYXlTbGVlcF9FdmVudEhhbmRsZXJfdGltZXJNaWxsaXNlY29uZENsb2NrRXZlbnRIYW5kbGVyX1RpbWVyTWlsbGlzZWNvbmRDbG9ja0V2ZW50SGFuZGxlcl9TZW5kRGF0YXNlbmRlckZpbGVNb2RlUkVBRFVzZSByZWFkIGluc3RlYWRXUklURVVzZSB3cml0ZSBpbnN0ZWFkQVBQRU5EVXNlIGFwcGVuZCBpbnN0ZWFkd3JpdGVPbmx5V1JJVEVfT05MWVVzZSB3cml0ZU9ubHkgaW5zdGVhZHdyaXRlT25seUFwcGVuZFdSSVRFX09OTFlfQVBQRU5EVXNlIHdyaXRlT25seUFwcGVuZCBpbnN0ZWFkRmlsZUxvY2tTSEFSRURVc2Ugc2hhcmVkIGluc3RlYWRleGNsdXNpdmVFWENMVVNJVkVVc2UgZXhjbHVzaXZlIGluc3RlYWRibG9ja2luZ1NoYXJlZEJMT0NLSU5HX1NIQVJFRFVzZSBibG9ja2luZ1NoYXJlZCBpbnN0ZWFkYmxvY2tpbmdFeGNsdXNpdmVCTE9DS0lOR19FWENMVVNJVkVVc2UgYmxvY2tpbmdFeGNsdXNpdmUgaW5zdGVhZEZpbGVjcmVhdGVGaWxlY29weVN5bmNsZW5ndGhTeW5jbGFzdEFjY2Vzc2VkbGFzdEFjY2Vzc2VkU3luY3NldExhc3RBY2Nlc3NlZHNldExhc3RBY2Nlc3NlZFN5bmNsYXN0TW9kaWZpZWRsYXN0TW9kaWZpZWRTeW5jc2V0TGFzdE1vZGlmaWVkc2V0TGFzdE1vZGlmaWVkU3luY29wZW5TeW5jb3BlblJlYWRvcGVuV3JpdGVyZWFkQXNCeXRlc3JlYWRBc1N0cmluZ3JlYWRBc1N0cmluZ1N5bmNyZWFkQXNMaW5lc3JlYWRBc0xpbmVzU3luY3dyaXRlQXNCeXRlc3dyaXRlQXNCeXRlc1N5bmN3cml0ZUFzU3RyaW5nY29udGVudHN3cml0ZUFzU3RyaW5nU3luY1JhbmRvbUFjY2Vzc0ZpbGVyZWFkQnl0ZVN5bmN3cml0ZUJ5dGVTeW5jd3JpdGVTdHJpbmdTeW5jcG9zaXRpb25TeW5jc2V0UG9zaXRpb25TeW5jdHJ1bmNhdGVTeW5jZmx1c2hTeW5jbG9ja1N5bmN1bmxvY2t1bmxvY2tTeW5jRmlsZVN5c3RlbUV4Y2VwdGlvbiwgcGF0aCA9ICcgKF9GaWxlU3RyZWFtX29wZW5lZEZpbGVfY2xvc2VDb21wbGV0ZXJfdW5zdWJzY3JpYmVkX3JlYWRJblByb2dyZXNzX2F0RW5kZm9yU3RkaW5fc2V0dXBDb250cm9sbGVyX3JlYWRCbG9ja19jbG9zZUZpbGVyZWFkQnl0ZXNCYWQgZW5kIHBvc2l0aW9uOiBCYWQgc3RhcnQgcG9zaXRpb246IG9uUmVhZHlvbk9wZW5GaWxlb3BlbkZhaWxlZF9GaWxlU3RyZWFtQ29uc3VtZXJfZmlsZV9vcGVuRnV0dXJlZnJvbVN0ZGlvb3BlbmVkRmlsZV9GaWxlX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZXJlcXVlc3RDYW5ub3QgY2hlY2sgZXhpc3RlbmNlRmlsZV9FeGlzdHNDYW5ub3QgY2hlY2sgZXhpc3RlbmNlIG9mIGZpbGVDYW5ub3QgY3JlYXRlIGZpbGVGaWxlX0NyZWF0ZV9jcmVhdGVMaW5rRmlsZV9DcmVhdGVMaW5rX2xpbmtUYXJnZXRGaWxlX0xpbmtUYXJnZXRkZWxldGVDYW5ub3QgZGVsZXRlIGZpbGVGaWxlX0RlbGV0ZV9kZWxldGVMaW5rTmF0aXZlRmlsZV9EZWxldGVMaW5rZGVsZXRlU3luY0Nhbm5vdCByZW5hbWUgZmlsZSB0byAnRmlsZV9SZW5hbWVvbGRQYXRoX3JlbmFtZUxpbmtGaWxlX1JlbmFtZUxpbmtDYW5ub3QgY29weSBmaWxlIHRvICdfY29weUZpbGVfQ29weUludmFsaWQgZmlsZSBtb2RlIGZvciB0aGlzIG9wZXJhdGlvbkNhbm5vdCBvcGVuIGZpbGVDYW5ub3QgcmV0cmlldmUgbGVuZ3RoIG9mIGZpbGVfbGVuZ3RoRnJvbVBhdGhGaWxlX0xlbmd0aEZyb21QYXRoQ2Fubm90IHJldHJpZXZlIGFjY2VzcyB0aW1lX2xhc3RBY2Nlc3NlZEZpbGVfTGFzdEFjY2Vzc2VkbWlsbGlzQ2Fubm90IHNldCBhY2Nlc3MgdGltZV9zZXRMYXN0QWNjZXNzZWRGaWxlX1NldExhc3RBY2Nlc3NlZEZhaWxlZCB0byBzZXQgZmlsZSBhY2Nlc3MgdGltZUNhbm5vdCByZXRyaWV2ZSBtb2RpZmljYXRpb24gdGltZV9sYXN0TW9kaWZpZWRGaWxlX0xhc3RNb2RpZmllZENhbm5vdCBzZXQgbW9kaWZpY2F0aW9uIHRpbWVfc2V0TGFzdE1vZGlmaWVkRmlsZV9TZXRMYXN0TW9kaWZpZWRGYWlsZWQgdG8gc2V0IGZpbGUgbW9kaWZpY2F0aW9uIHRpbWVGaWxlX09wZW5fb3BlblN0ZGlvRmlsZV9PcGVuU3RkaW9fb3BlblN0ZGlvU3luY0Nhbm5vdCBvcGVuIHN0ZGlvIGZpbGUgZm9yOiBjb25zdW1lcnJlYWREYXRhQ2h1bmtlZG9wZW5lZF90cnlEZWNvZGVGYWlsZWQgdG8gZGVjb2RlIGRhdGEgdXNpbmcgZW5jb2RpbmcgJ0ZpbGU6ICd0aHJvd0lmRXJyb3JfUmFuZG9tQWNjZXNzRmlsZU9wc19SYW5kb21BY2Nlc3NGaWxlX2Nvbm5lY3RlZFJlc291cmNlSGFuZGxlcl9hc3luY0Rpc3BhdGNoZWRfZmlsZVNlcnZpY2Vsb2NrVW5sb2NrX21heWJlQ29ubmVjdEhhbmRsZXJfbWF5YmVQZXJmb3JtQ2xlYW51cGV4dC5kYXJ0LmlvLmdldE9wZW5GaWxlc2V4dC5kYXJ0LmlvLmdldEZpbGVCeUlEX2Rpc3BhdGNobWFya0Nsb3NlZENhbm5vdCBjbG9zZSBmaWxlcmVhZEJ5dGUgZmFpbGVkcmVhZCBmYWlsZWRyZWFkU3luYyBmYWlsZWRyZWFkSW50byBmYWlsZWR3cml0ZUJ5dGUgZmFpbGVkSW52YWxpZCBhcmd1bWVudHMgdG8gd3JpdGVGcm9td3JpdGVGcm9tIGZhaWxlZHBvc2l0aW9uIGZhaWxlZHNldFBvc2l0aW9uIGZhaWxlZHRydW5jYXRlIGZhaWxlZGxlbmd0aCBmYWlsZWRmbHVzaCBmYWlsZWRfZmlsZUxvY2tWYWx1ZWZsbG9jayBmYWlsZWR1bmxvY2sgZmFpbGVkRmlsZSBjbG9zZWRBbiBhc3luYyBvcGVyYXRpb24gaXMgY3VycmVudGx5IHBlbmRpbmdGaWxlU3lzdGVtRW50aXR5VHlwZUZJTEVVc2UgZmlsZSBpbnN0ZWFkZGlyZWN0b3J5RElSRUNUT1JZVXNlIGRpcmVjdG9yeSBpbnN0ZWFkbGlua0xJTktVc2UgbGluayBpbnN0ZWFkX3R5cGVMaXN0X2xvb2t1cEZpbGVTdGF0X2NoYW5nZWRUaW1lX21vZGlmaWVkVGltZV9hY2Nlc3NlZFRpbWVfc2l6ZV9ub3RGb3VuZGNoYW5nZWRtb2RpZmllZGFjY2Vzc2VkX2ludGVybmFsTm90Rm91bmRfc3RhdFN5bmNGaWxlX1N0YXRzdGF0U3luY19zdGF0U3luY0ludGVybmFsc3RhdF9zdGF0RmlsZVN0YXQ6IHR5cGUgCiAgICAgICAgICBjaGFuZ2VkIAogICAgICAgICAgbW9kaWZpZWQgCiAgICAgICAgICBhY2Nlc3NlZCAKICAgICAgICAgIG1vZGUgbW9kZVN0cmluZwogICAgICAgICAgc2l6ZSBwZXJtaXNzaW9uc2NvZGVzLS0tLS14LXctLXd4ci0tci14cnctcnd4KHN1aWQpIChndWlkKSAoc3RpY2t5KSBGaWxlU3lzdGVtRW50aXR5X2Fic29sdXRlV2luZG93c1BhdGhQYXR0ZXJuXihcXFxcfFthLXpBLVpdOlsvXFxdKV9wYXJlbnRSZWdFeHBbXi9cXF1bL1xcXStbXi9cXF1bXi9dLytbXi9dQ2Fubm90IHJlc29sdmUgc3ltYm9saWMgbGlua3N0cmltbWVkUGF0aGZzV2F0Y2hfaWRlbnRpY2FscGF0aDFwYXRoMkVycm9yIGluIEZpbGVTeXN0ZW1FbnRpdHkuaWRlbnRpY2FsKGlkZW50aWNhbGZzZUlkZW50aWNhbGlzQWJzb2x1dGVfcmF3QWJzb2x1dGVQYXRoX2lkZW50aWNhbFN5bmNFcnJvciBpbiBGaWxlU3lzdGVtRW50aXR5LmlkZW50aWNhbFN5bmNpZGVudGljYWxTeW5jZnNlSWRlbnRpY2FsU3luY2lzV2F0Y2hTdXBwb3J0ZWRmc1dhdGNoSXNTdXBwb3J0ZWRfdG9VdGY4QXJyYXlfdG9OdWxsVGVybWluYXRlZFV0ZjhBcnJheWxfdG9TdHJpbmdGcm9tVXRmOEFycmF5bm9uTnVsbFRlcm1pbmF0ZWR0eXBlU3luY2lzTGlua19pc0xpbmtSYXdpc0ZpbGVpc0RpcmVjdG9yeWlzTGlua1N5bmNfaXNMaW5rUmF3U3luY2lzRmlsZVN5bmNpc0RpcmVjdG9yeVN5bmNfZ2V0VHlwZU5hdGl2ZUZpbGVfR2V0VHlwZV9pZGVudGljYWxOYXRpdmVGaWxlX0FyZUlkZW50aWNhbF9yZXNvbHZlU3ltYm9saWNMaW5rc0ZpbGVfUmVzb2x2ZVN5bWJvbGljTGlua3NwYXJlbnRPZnJvb3RFbmRbL1xcXV9nZXRUeXBlU3luY0hlbHBlckVycm9yIGdldHRpbmcgdHlwZSBvZiBGaWxlU3lzdGVtRW50aXR5X2dldFR5cGVTeW5jZnNlR2V0VHlwZVN5bmNfZ2V0VHlwZVJlcXVlc3RFcnJvciBnZXR0aW5nIHR5cGVfZ2V0VHlwZWZzZUdldFR5cGVfdGhyb3dJZkVycm9yX3RyaW1UcmFpbGluZ1BhdGhTZXBhcmF0b3JzX2Vuc3VyZVRyYWlsaW5nUGF0aFNlcGFyYXRvcnNGaWxlU3lzdGVtRXZlbnRDUkVBVEVVc2UgY3JlYXRlIGluc3RlYWRtb2RpZnlNT0RJRllVc2UgbW9kaWZ5IGluc3RlYWRERUxFVEVVc2UgZGVsZXRlIGluc3RlYWRtb3ZlTU9WRVVzZSBtb3ZlIGluc3RlYWRhbGxBTExVc2UgYWxsIGluc3RlYWRfbW9kaWZ5QXR0cmlidXRlc19kZWxldGVTZWxmX2lzRGlyRmlsZVN5c3RlbUNyZWF0ZUV2ZW50RmlsZVN5c3RlbUNyZWF0ZUV2ZW50KCcnKUZpbGVTeXN0ZW1Nb2RpZnlFdmVudGNvbnRlbnRDaGFuZ2VkRmlsZVN5c3RlbU1vZGlmeUV2ZW50KCcnLCBjb250ZW50Q2hhbmdlZD1GaWxlU3lzdGVtRGVsZXRlRXZlbnRGaWxlU3lzdGVtRGVsZXRlRXZlbnQoJ0ZpbGVTeXN0ZW1Nb3ZlRXZlbnRkZXN0aW5hdGlvbkZpbGVTeXN0ZW1Nb3ZlRXZlbnQoJywgJ19GaWxlU3lzdGVtV2F0Y2hlcl9ldmVudHNfcmVjdXJzaXZlX2Jyb2FkY2FzdENvbnRyb2xsZXJGaWxlIHN5c3RlbSB3YXRjaGluZyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm1GYWlsZWQgdG8gaW5pdGlhbGl6ZSBmaWxlIHN5c3RlbSBlbnRpdHkgd2F0Y2hlckZhaWxlZCB0byB3YXRjaCBwYXRoX2RvbmVQYXRoV2F0Y2hlZF9wYXRoRnJvbVBhdGhJZF9saXN0ZW5PblNvY2tldHN0b3BzZ2V0UGF0aGdldElzRGlycmV3cml0ZU1vdmVpc0RpckRpcmVjdG9yeSB3YXRjaGVyIGNsb3NlZCB1bmV4cGVjdGVkbHlfaW5pdFdhdGNoZXJGaWxlU3lzdGVtV2F0Y2hlcl9Jbml0V2F0Y2hlcl9jbG9zZVdhdGNoZXJGaWxlU3lzdGVtV2F0Y2hlcl9DbG9zZVdhdGNoZXJfd2F0Y2hQYXRoRmlsZVN5c3RlbVdhdGNoZXJfV2F0Y2hQYXRoX3Vud2F0Y2hQYXRoRmlsZVN5c3RlbVdhdGNoZXJfVW53YXRjaFBhdGhwYXRoX2lkX3JlYWRFdmVudHNGaWxlU3lzdGVtV2F0Y2hlcl9SZWFkRXZlbnRzX2dldFNvY2tldElkRmlsZVN5c3RlbVdhdGNoZXJfR2V0U29ja2V0SWRfd2F0Y2hpc1N1cHBvcnRlZEZpbGVTeXN0ZW1XYXRjaGVyX0lzU3VwcG9ydGVkX0lPUmVzb3VyY2VJbmZvX3N3X3N0YXJ0VGltZWVsYXBzZWRNaWNyb3NlY29uZHNmdWxsVmFsdWVNYXByZWZlcmVuY2VWYWx1ZU1hcGdldE5leHRJRF9SZWFkV3JpdGVSZXNvdXJjZUluZm90b3RhbFdyaXR0ZW5yZWFkQ291bnR3cml0ZUNvdW50bGFzdFJlYWRsYXN0V3JpdGVfRmlsZVJlc291cmNlSW5mb29wZW5GaWxlc0ZpbGVPcGVuZWRpbmZvRmlsZUNsb3NlZGdldE9wZW5GaWxlc0xpc3RnZXRPcGVuRmlsZXNfb3BlbmZpbGVzanNvblZhbHVlZ2V0RmlsZUluZm9NYXBnZXRGaWxlSW5mb01hcEJ5SURfUHJvY2Vzc1Jlc291cmNlSW5mb19wcm9jZXNzc3RhcnRlZEF0c3RhcnRlZFByb2Nlc3Nlc1Byb2Nlc3NTdGFydGVkUHJvY2Vzc1N0b3BwZWRnZXRTdGFydGVkUHJvY2Vzc2VzTGlzdGdldFN0YXJ0ZWRQcm9jZXNzZXNfc3RhcnRlZHByb2Nlc3Nlc2dldFByb2Nlc3NJbmZvTWFwQnlJZF9Tb2NrZXRSZXNvdXJjZUluZm9fdGNwU3RyaW5nVENQX3VkcFN0cmluZ1VEUG9wZW5Tb2NrZXRzbGlzdGVuaW5nOnJlbW90ZXJlbW90ZUhvc3QgLT4gZ2V0T3BlblNvY2tldHNMaXN0Z2V0U29ja2V0SW5mb01hcGxpc3RlbmluZ05BYWRkcmVzc1R5cGVnZXRTb2NrZXRJbmZvTWFwQnlJRGdldE9wZW5Tb2NrZXRzX29wZW5zb2NrZXRzU29ja2V0T3BlbmVkU29ja2V0Q2xvc2VkSU9TaW5rX1N0cmVhbVNpbmtJbXBsX2RvbmVDb21wbGV0ZXJfY29udHJvbGxlckluc3RhbmNlX2NvbnRyb2xsZXJDb21wbGV0ZXJfaXNCb3VuZFN0cmVhbVNpbmsgaXMgY2xvc2VkU3RyZWFtU2luayBpcyBhbHJlYWR5IGJvdW5kIHRvIGEgc3RyZWFtU3RyZWFtU2luayBpcyBib3VuZCB0byBhIHN0cmVhbV9jbG9zZVRhcmdldF9jb21wbGV0ZURvbmVWYWx1ZV9jb21wbGV0ZURvbmVFcnJvcl9JT1NpbmtJbXBsX2VuY29kaW5nX2VuY29kaW5nTXV0YWJsZUlPU2luayBlbmNvZGluZyBpcyBub3QgbXV0YWJsZV9JT1NlcnZpY2Vfc2VydmljZVBvcnRzX3JlcGx5VG9Qb3J0X21lc3NhZ2VNYXBmaWxlRXhpc3RzZmlsZUNyZWF0ZWZpbGVEZWxldGVmaWxlUmVuYW1lZmlsZUNvcHlmaWxlT3BlbmZpbGVSZXNvbHZlU3ltYm9saWNMaW5rc2ZpbGVDbG9zZWZpbGVQb3NpdGlvbmZpbGVTZXRQb3NpdGlvbmZpbGVUcnVuY2F0ZWZpbGVMZW5ndGhmaWxlTGVuZ3RoRnJvbVBhdGhmaWxlTGFzdEFjY2Vzc2VkZmlsZVNldExhc3RBY2Nlc3NlZGZpbGVMYXN0TW9kaWZpZWRmaWxlU2V0TGFzdE1vZGlmaWVkZmlsZUZsdXNoZmlsZVJlYWRCeXRlZmlsZVdyaXRlQnl0ZWZpbGVSZWFkZmlsZVJlYWRJbnRvZmlsZVdyaXRlRnJvbWZpbGVDcmVhdGVMaW5rZmlsZURlbGV0ZUxpbmtmaWxlUmVuYW1lTGlua2ZpbGVMaW5rVGFyZ2V0ZmlsZVR5cGVmaWxlSWRlbnRpY2FsZmlsZVN0YXRmaWxlTG9ja3NvY2tldExvb2t1cHNvY2tldExpc3RJbnRlcmZhY2Vzc29ja2V0UmV2ZXJzZUxvb2t1cGRpcmVjdG9yeUNyZWF0ZWRpcmVjdG9yeURlbGV0ZWRpcmVjdG9yeUV4aXN0c2RpcmVjdG9yeUNyZWF0ZVRlbXBkaXJlY3RvcnlMaXN0U3RhcnRkaXJlY3RvcnlMaXN0TmV4dGRpcmVjdG9yeUxpc3RTdG9wZGlyZWN0b3J5UmVuYW1lc3NsUHJvY2Vzc0ZpbHRlcl9lbnN1cmVJbml0aWFsaXplX2ZpbmFsaXplX2dldE5leHRJZDIxNDc0ODM2NDdzZXJ2aWNlUG9ydGNyZWF0ZUxpbmt1cGRhdGVTeW5jdGFyZ2V0U3luY19MaW5rTGluazogJ19leGNlcHRpb25Gcm9tUmVzcG9uc2VDYW5ub3QgY3JlYXRlIGxpbmsgdG8gdGFyZ2V0ICdDYW5ub3QgY3JlYXRlIGxpbmtDYW5ub3QgZGVsZXRlIGxpbmtDYW5ub3QgcmVuYW1lIGxpbmsgdG8gJ0Nhbm5vdCByZW5hbWUgbGluayAnJyB0byAnQ2Fubm90IGdldCB0YXJnZXQgb2YgbGlua0Nhbm5vdCByZWFkIGxpbmtfTmFtZXNwYWNlX05ldHdvcmtQcm9maWxpbmdfa0dldEh0dHBFbmFibGVUaW1lbGluZUxvZ2dpbmdleHQuZGFydC5pby5nZXRIdHRwRW5hYmxlVGltZWxpbmVMb2dnaW5nX2tTZXRIdHRwRW5hYmxlVGltZWxpbmVMb2dnaW5nZXh0LmRhcnQuaW8uc2V0SHR0cEVuYWJsZVRpbWVsaW5lTG9nZ2luZ19rQ2xlYXJTb2NrZXRQcm9maWxlUlBDZXh0LmRhcnQuaW8uY2xlYXJTb2NrZXRQcm9maWxlX2tHZXRTb2NrZXRQcm9maWxlUlBDZXh0LmRhcnQuaW8uZ2V0U29ja2V0UHJvZmlsZV9rUGF1c2VTb2NrZXRQcm9maWxpbmdSUENleHQuZGFydC5pby5wYXVzZVNvY2tldFByb2ZpbGluZ19rU3RhcnRTb2NrZXRQcm9maWxpbmdSUENleHQuZGFydC5pby5zdGFydFNvY2tldFByb2ZpbGluZ19rR2V0VmVyc2lvblJQQ2V4dC5kYXJ0LmlvLmdldFZlcnNpb25fcmVnaXN0ZXJTZXJ2aWNlRXh0ZW5zaW9uX3NlcnZpY2VFeHRlbnNpb25IYW5kbGVycmVzcG9uc2VKc29uTWV0aG9kICBkb2VzIG5vdCBleGlzdGVycm9yTWVzc2FnZWdldFZlcnNpb25WZXJzaW9ubWFqb3JtaW5vcl9Tb2NrZXRQcm9maWxlX2tUeXBlU29ja2V0UHJvZmlsZV9lbmFibGVTb2NrZXRQcm9maWxpbmdfaWRUb1NvY2tldFN0YXRpc3RpY3NvY2tldHN0b01hcGNvbGxlY3ROZXdTb2NrZXRfU29ja2V0UHJvZmlsZVR5cGUuc3RhcnRUaW1lX1NvY2tldFByb2ZpbGVUeXBlLnNvY2tldFR5cGVfU29ja2V0UHJvZmlsZVR5cGUuYWRkcmVzc19Tb2NrZXRQcm9maWxlVHlwZS5wb3J0Y29sbGVjdFN0YXRpc3RpY3N0YXRzc3RhcnRUaW1lZW5kVGltZWxhc3RSZWFkVGltZXdyaXRlQnl0ZXNsYXN0V3JpdGVUaW1ldHlwZSBfU29ja2V0UHJvZmlsZVR5cGVfU29ja2V0U3RhdGlzdGljX3NldElmTm90TnVsbElPT3ZlcnJpZGVzX2dsb2JhbGdsb2JhbHNvY2tldENvbm5lY3Rzb2NrZXRTdGFydENvbm5lY3RzZXJ2ZXJTb2NrZXRCaW5kcnVuV2l0aElPT3ZlcnJpZGVzX0lPT3ZlcnJpZGVzU2NvcGVfY3JlYXRlRGlyZWN0b3J5X2dldEN1cnJlbnREaXJlY3Rvcnlfc2V0Q3VycmVudERpcmVjdG9yeV9nZXRTeXN0ZW1UZW1wRGlyZWN0b3J5X2NyZWF0ZUZpbGVfZnNlSWRlbnRpY2FsX2ZzZUlkZW50aWNhbFN5bmNfZnNlR2V0VHlwZV9mc2VHZXRUeXBlU3luY19mc1dhdGNoX2ZzV2F0Y2hJc1N1cHBvcnRlZF9zb2NrZXRDb25uZWN0X3NvY2tldFN0YXJ0Q29ubmVjdF9zZXJ2ZXJTb2NrZXRCaW5kUGxhdGZvcm1fbnVtYmVyT2ZQcm9jZXNzb3JzX3BhdGhTZXBhcmF0b3Jfb3BlcmF0aW5nU3lzdGVtX29wZXJhdGluZ1N5c3RlbVZlcnNpb25fbG9jYWxIb3N0bmFtZV92ZXJzaW9uaXNMaW51eGxpbnV4aXNNYWNPU21hY29zaXNXaW5kb3dzd2luZG93c2lzQW5kcm9pZGFuZHJvaWRpc0lPU2lvc2lzRnVjaHNpYWZ1Y2hzaWFudW1iZXJPZlByb2Nlc3NvcnNwYXRoU2VwYXJhdG9ybG9jYWxlTmFtZW9wZXJhdGluZ1N5c3RlbW9wZXJhdGluZ1N5c3RlbVZlcnNpb25sb2NhbEhvc3RuYW1lcmVzb2x2ZWRFeGVjdXRhYmxlZXhlY3V0YWJsZUFyZ3VtZW50c3BhY2thZ2VzLyBkaXJlY3RvcnkgcmVzb2x1dGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIERhcnQgMl9QbGF0Zm9ybV9sb2NhbGVDbG9zdXJlX2Vudmlyb25tZW50Q2FjaGVfY2FjaGVkT1NWZXJzaW9uX25hdGl2ZVNjcmlwdGh0dHA6aHR0cHM6cGFja2FnZTpkYXJ0OmRhdGE6ZmlsZTpQbGF0Zm9ybV9OdW1iZXJPZlByb2Nlc3NvcnNQbGF0Zm9ybV9QYXRoU2VwYXJhdG9yUGxhdGZvcm1fT3BlcmF0aW5nU3lzdGVtUGxhdGZvcm1fT3BlcmF0aW5nU3lzdGVtVmVyc2lvblBsYXRmb3JtX0xvY2FsSG9zdG5hbWVfZXhlY3V0YWJsZVBsYXRmb3JtX0V4ZWN1dGFibGVOYW1lX3Jlc29sdmVkRXhlY3V0YWJsZVBsYXRmb3JtX1Jlc29sdmVkRXhlY3V0YWJsZU5hbWVQbGF0Zm9ybV9FbnZpcm9ubWVudF9leGVjdXRhYmxlQXJndW1lbnRzUGxhdGZvcm1fRXhlY3V0YWJsZUFyZ3VtZW50c19wYWNrYWdlUm9vdF9wYWNrYWdlQ29uZmlnUGxhdGZvcm1fR2V0VmVyc2lvbl9sb2NhbGVOYW1lUGxhdGZvcm1fTG9jYWxlTmFtZV9zY3JpcHRlbnZlcXVhbHNJbmRleF9DYXNlSW5zZW5zaXRpdmVTdHJpbmdNYXB0b1VwcGVyQ2FzZV9Qcm9jZXNzVXRpbHNfa2lsbFBpZFByb2Nlc3NfS2lsbFBpZF93YXRjaFNpZ25hbEludGVybmFsX2V4aXRQcm9jZXNzX0V4aXRfc2V0RXhpdENvZGVQcm9jZXNzX1NldEV4aXRDb2RlX2dldEV4aXRDb2RlUHJvY2Vzc19HZXRFeGl0Q29kZV9zbGVlcFByb2Nlc3NfU2xlZXBfcGlkUHJvY2Vzc19QaWRfd2F0Y2hTaWduYWxTSUdIVVBTSUdJTlRTSUdVU1IxU0lHVVNSMlNJR1dJTkNITGlzdGVuaW5nIGZvciBzaWduYWwgIGlzIG5vdCBzdXBwb3J0ZWRQcm9jZXNzSW5mb19tYXhSc3NQcm9jZXNzSW5mb19NYXhSU1NfY3VycmVudFJzc1Byb2Nlc3NJbmZvX0N1cnJlbnRSU1NjdXJyZW50UnNzbWF4UnNzUHJvY2Vzc1N0YXJ0TW9kZU5PUk1BTFVzZSBub3JtYWwgaW5zdGVhZGluaGVyaXRTdGRpb0lOSEVSSVRfU1RESU9Vc2UgaW5oZXJpdFN0ZGlvIGluc3RlYWRkZXRhY2hlZERFVEFDSEVEVXNlIGRldGFjaGVkIGluc3RlYWRkZXRhY2hlZFdpdGhTdGRpb0RFVEFDSEVEX1dJVEhfU1RESU9Vc2UgZGV0YWNoZWRXaXRoU3RkaW8gaW5zdGVhZFByb2Nlc3NydW5TeW5ja2lsbFBpZFByb2Nlc3NSZXN1bHRQcm9jZXNzU2lnbmFsc2lnaHVwc2lnaW50c2lncXVpdFNJR1FVSVRzaWdpbGxTSUdJTExzaWd0cmFwU0lHVFJBUHNpZ2FicnRTSUdBQlJUc2lnYnVzU0lHQlVTc2lnZnBlU0lHRlBFc2lna2lsbFNJR0tJTExzaWd1c3Ixc2lnc2VndlNJR1NFR1ZzaWd1c3Iyc2lncGlwZVNJR1BJUEVzaWdhbHJtU0lHQUxSTXNpZ3Rlcm1zaWdjaGxkU0lHQ0hMRHNpZ2NvbnRTSUdDT05Uc2lnc3RvcFNJR1NUT1BzaWd0c3RwU0lHVFNUUHNpZ3R0aW5TSUdUVElOc2lndHRvdVNJR1RUT1VzaWd1cmdTSUdVUkdzaWd4Y3B1U0lHWENQVXNpZ3hmc3pTSUdYRlNac2lndnRhbHJtU0lHVlRBTFJNc2lncHJvZlNJR1BST0ZzaWd3aW5jaHNpZ3BvbGxTSUdQT0xMc2lnc3lzU0lHU1lTVXNlIHNpZ2h1cCBpbnN0ZWFkVXNlIHNpZ2ludCBpbnN0ZWFkVXNlIHNpZ3F1aXQgaW5zdGVhZFVzZSBzaWdpbGwgaW5zdGVhZFVzZSBzaWd0cmFwIGluc3RlYWRVc2Ugc2lnYWJydCBpbnN0ZWFkVXNlIHNpZ2J1cyBpbnN0ZWFkVXNlIHNpZ2ZwZSBpbnN0ZWFkVXNlIHNpZ2tpbGwgaW5zdGVhZFVzZSBzaWd1c3IxIGluc3RlYWRVc2Ugc2lnc2VndiBpbnN0ZWFkVXNlIHNpZ3VzcjIgaW5zdGVhZFVzZSBzaWdwaXBlIGluc3RlYWRVc2Ugc2lnYWxybSBpbnN0ZWFkVXNlIHNpZ3Rlcm0gaW5zdGVhZFVzZSBzaWdjaGxkIGluc3RlYWRVc2Ugc2lnY29udCBpbnN0ZWFkVXNlIHNpZ3N0b3AgaW5zdGVhZFVzZSBzaWd0c3RwIGluc3RlYWRVc2Ugc2lndHRpbiBpbnN0ZWFkVXNlIHNpZ3R0b3UgaW5zdGVhZFVzZSBzaWd1cmcgaW5zdGVhZFVzZSBzaWd4Y3B1IGluc3RlYWRVc2Ugc2lneGZzeiBpbnN0ZWFkVXNlIHNpZ3Z0YWxybSBpbnN0ZWFkVXNlIHNpZ3Byb2YgaW5zdGVhZFVzZSBzaWd3aW5jaCBpbnN0ZWFkVXNlIHNpZ3BvbGwgaW5zdGVhZFVzZSBzaWdzeXMgaW5zdGVhZFNpZ25hbEV4Y2VwdGlvbiwgb3NFcnJvcjogU2lnbmFsRXhjZXB0aW9uOiBQcm9jZXNzRXhjZXB0aW9uT1MgZXJyb3IgY29kZTogUHJvY2Vzc0V4Y2VwdGlvbjogCiAgQ29tbWFuZDogU2VjdXJlU2VydmVyU29ja2V0c3VwcG9ydGVkUHJvdG9jb2xzc2VydmVyU29ja2V0UmF3U2VjdXJlU2VydmVyU29ja2V0X2NvbnRleHRjb25uZWN0aW9uc2VjdXJlQ29ubmVjdGlvblNlY3VyZVNvY2tldG9uQmFkQ2VydGlmaWNhdGVyYXdTdGF0ZTIuNmRldGFjaGVkUmF3c2VjdXJlU2VydmVyYnVmZmVyZWREYXRhUmF3U2VjdXJlU29ja2V0WDUwOUNlcnRpZmljYXRlX0ZpbHRlclN0YXR1c3Byb2dyZXNzcmVhZEVtcHR5d3JpdGVFbXB0eXJlYWRQbGFpbnRleHROb0xvbmdlckVtcHR5d3JpdGVQbGFpbnRleHROb0xvbmdlckZ1bGxyZWFkRW5jcnlwdGVkTm9Mb25nZXJGdWxsd3JpdGVFbmNyeXB0ZWROb0xvbmdlckVtcHR5X1Jhd1NlY3VyZVNvY2tldGhhbmRzaGFrZVN0YXR1c2Nvbm5lY3RlZFN0YXR1c2Nsb3NlZFN0YXR1c3JlYWRQbGFpbnRleHRJZHdyaXRlUGxhaW50ZXh0SWRyZWFkRW5jcnlwdGVkSWR3cml0ZUVuY3J5cHRlZElkYnVmZmVyQ291bnRfaGFuZHNoYWtlQ29tcGxldGVfc29ja2V0U3Vic2NyaXB0aW9uX2J1ZmZlcmVkRGF0YV9idWZmZXJlZERhdGFJbmRleF9zdGF0dXNfcGF1c2VDb3VudF9wZW5kaW5nUmVhZEV2ZW50X3NvY2tldENsb3NlZFJlYWRfc29ja2V0Q2xvc2VkV3JpdGVfY2xvc2VkUmVhZF9jbG9zZWRXcml0ZV9maWx0ZXJTdGF0dXNfY29ubmVjdFBlbmRpbmdfZmlsdGVyUGVuZGluZ19maWx0ZXJBY3RpdmVfc2VjdXJlRmlsdGVyX3NlbGVjdGVkUHJvdG9jb2xyZXF1ZXN0ZWRQb3J0X3NlY3VyZUhhbmRzaGFrZUNvbXBsZXRlSGFuZGxlcl9vbkJhZENlcnRpZmljYXRlV3JhcHBlcl9ldmVudERpc3BhdGNoZXJfcmVwb3J0RXJyb3JfZG9uZUhhbmRsZXJTdWJzY3JpcHRpb24gcGFzc2VkIHRvIFRMUyB1cGdyYWRlIGlzIHBhdXNlZF9zZWN1cmVIYW5kc2hha2VfaXNCdWZmZXJFbmNyeXB0ZWRpZGVudGlmaWVyX3NlbmRXcml0ZUV2ZW50X3ZlcmlmeUZpZWxkc2hvc3QgaXMgbm90IGEgU3RyaW5nIG9yIGFuIEludGVybmV0QWRkcmVzc3JlcXVlc3RlZFBvcnQgaXMgbm90IGluIHRoZSByYW5nZSAwLi42NTUzNV9jb21wbGV0ZUNsb3NlQ29tcGxldGVyZHVtbXlfc2NoZWR1bGVSZWFkRXZlbnRJbnZhbGlkIGxlbmd0aCBwYXJhbWV0ZXIgaW4gU2VjdXJlU29ja2V0LnJlYWQgKGxlbmd0aDogUmVhZGluZyBmcm9tIGEgY2xvc2VkIHNvY2tldF9zY2hlZHVsZUZpbHRlckludmFsaWQgYnl0ZXMgcGFyYW1ldGVyIGluIFNlY3VyZVNvY2tldC5yZWFkIChieXRlczogSW52YWxpZCBvZmZzZXQgcGFyYW1ldGVyIGluIFNlY3VyZVNvY2tldC5yZWFkIChvZmZzZXQ6IFdyaXRpbmcgdG8gYSBjbG9zZWQgc29ja2V0d3JpdHRlbmNlcnRpZmljYXRlb25CYWRDZXJ0aWZpY2F0ZSBjYWxsYmFjayByZXR1cm5lZCBub24tYm9vbGVhbiBfcmVhZEhhbmRsZXJfd3JpdGVIYW5kbGVyX2Nsb3NlSGFuZGxlcl9yZWFkU29ja2V0X3dyaXRlU29ja2V0Q29ubmVjdGlvbiB0ZXJtaW5hdGVkIGR1cmluZyBoYW5kc2hha2VDYWxsZWQgcmVuZWdvdGlhdGUgb24gYSBub24tY29ubmVjdGVkIHNvY2tldF90cnlGaWx0ZXJfcHVzaEFsbEZpbHRlclN0YWdlc19yZWFkU29ja2V0T3JCdWZmZXJlZERhdGF3cml0ZUZyb21Tb3VyY2VyZWFkVG9Tb2NrZXRfc2VuZFJlYWRFdmVudGZyZWV3YXNJbkhhbmRzaGFrZWJ1ZnMgZXJyb3IgbmV3X3N0YXJ0bmV3X2VuZF9FeHRlcm5hbEJ1ZmZlcmFkdmFuY2VTdGFydGFkdmFuY2VFbmRsaW5lYXJMZW5ndGhsaW5lYXJGcmVlYnl0ZXNSZWFkdG9SZWFkaW5wdXREYXRhdG9Xcml0ZWdldERhdGFfU2VjdXJlRmlsdGVyVGxzRXhjZXB0aW9uSGFuZHNoYWtlRXhjZXB0aW9uQ2VydGlmaWNhdGVFeGNlcHRpb25TZWN1cml0eUNvbnRleHRhbHBuU3VwcG9ydGVkX3Byb3RvY29sc1RvTGVuZ3RoRW5jb2Rpbmdwcm90b2NvbHNMZW5ndGhleHBlY3RlZExlbmd0aExlbmd0aCBvZiBwcm90b2NvbCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU1ICh3YXM6ICkuVGhlIG1heGltdW0gbWVzc2FnZSBsZW5ndGggc3VwcG9ydGVkIGlzIDJeMTMtMS5ieXRlc09mZnNldHByb3RvX3Byb3RvY29sc1RvTGVuZ3RoRW5jb2RpbmdOb25Bc2NpaUJhaWxvdXRhZGRQcm90b2NvbG91dEJ5dGVzcHJvdG9jb2xCeXRlc19TZXJ2aWNlT2JqZWN0SW50ZXJuZXRBZGRyZXNzVHlwZUlQdjRJUHY2SVBfVjRVc2UgSVB2NCBpbnN0ZWFkSVBfVjZVc2UgSVB2NiBpbnN0ZWFkQU5ZVXNlIGFueSBpbnN0ZWFkX2Zyb21JbnZhbGlkIHR5cGU6IEludmFsaWQgSW50ZXJuZXRBZGRyZXNzSW50ZXJuZXRBZGRyZXNzVHlwZTogSW50ZXJuZXRBZGRyZXNzTE9PUEJBQ0tfSVBfVjRVc2UgbG9vcGJhY2tJUHY0IGluc3RlYWRMT09QQkFDS19JUF9WNlVzZSBsb29wYmFja0lQdjYgaW5zdGVhZEFOWV9JUF9WNFVzZSBhbnlJUHY0IGluc3RlYWRBTllfSVBfVjZVc2UgYW55SVB2NiBpbnN0ZWFkTmV0d29ya0ludGVyZmFjZV9saXN0U3VwcG9ydGVkTmV0d29ya0ludGVyZmFjZV9MaXN0U3VwcG9ydGVkbGlzdFN1cHBvcnRlZFJhd1NlcnZlclNvY2tldFNlcnZlclNvY2tldFNvY2tldERpcmVjdGlvbmJvdGhSRUNFSVZFVXNlIHJlY2VpdmUgaW5zdGVhZFNFTkRVc2Ugc2VuZCBpbnN0ZWFkQk9USFVzZSBib3RoIGluc3RlYWRTb2NrZXRPcHRpb250Y3BOb0RlbGF5VENQX05PREVMQVlVc2UgdGNwTm9EZWxheSBpbnN0ZWFkX2lwTXVsdGljYXN0TG9vcF9pcE11bHRpY2FzdEhvcHNfaXBNdWx0aWNhc3RJZl9pcEJyb2FkY2FzdF9SYXdTb2NrZXRPcHRpb25zX1Jhd1NvY2tldE9wdGlvbnMuU09MX1NPQ0tFVF9SYXdTb2NrZXRPcHRpb25zLklQUFJPVE9fSVBfUmF3U29ja2V0T3B0aW9ucy5JUF9NVUxUSUNBU1RfSUZfUmF3U29ja2V0T3B0aW9ucy5JUFBST1RPX0lQVjZfUmF3U29ja2V0T3B0aW9ucy5JUFY2X01VTFRJQ0FTVF9JRl9SYXdTb2NrZXRPcHRpb25zLklQUFJPVE9fVENQX1Jhd1NvY2tldE9wdGlvbnMuSVBQUk9UT19VRFBTT0xfU09DS0VUSVBQUk9UT19JUElQX01VTFRJQ0FTVF9JRklQUFJPVE9fSVBWNklQVjZfTVVMVElDQVNUX0lGSVBQUk9UT19UQ1BJUFBST1RPX1VEUFJhd1NvY2tldE9wdGlvbl9vcHRpb25zQ2FjaGVfZ2V0TmF0aXZlT3B0aW9uVmFsdWVSYXdTb2NrZXRPcHRpb25fR2V0T3B0aW9uVmFsdWVmcm9tSW50ZnJvbUJvb2xsZXZlbFNvY2tldGxldmVsSVB2NElQdjRNdWx0aWNhc3RJbnRlcmZhY2VsZXZlbElQdjZJUHY2TXVsdGljYXN0SW50ZXJmYWNlbGV2ZWxUY3BsZXZlbFVkcF9nZXRPcHRpb25WYWx1ZVJhd1NvY2tldEV2ZW50cmVhZENsb3NlZFJFQURfQ0xPU0VEVXNlIHJlYWRDbG9zZWQgaW5zdGVhZENMT1NFRFVzZSBjbG9zZWQgaW5zdGVhZFJhd1NvY2tldEV2ZW50LnJlYWRSYXdTb2NrZXRFdmVudC53cml0ZVJhd1NvY2tldEV2ZW50LnJlYWRDbG9zZWRSYXdTb2NrZXRFdmVudC5jbG9zZWRDb25uZWN0aW9uVGFza1Jhd1NvY2tldFNvY2tldF9jb25uZWN0X3N0YXJ0Q29ubmVjdHJhd1Rhc2tEYXRhZ3JhbVJhd0RhdGFncmFtU29ja2V0VGhpcyBwcm9wZXJ0eSBpcyBub3QgaW1wbGVtZW50ZWQuIFVzZSBnZXRSYXdPcHRpb24gYW5kIHNldFJhd09wdGlvbiBpbnN0ZWFkLlNvY2tldEV4Y2VwdGlvbiwgYWRkcmVzcyA9ICwgcG9ydCA9IF9TdGRTdHJlYW1TdGRpbl9mZF9lY2hvTW9kZVN0ZGluX0dldEVjaG9Nb2RlX3NldEVjaG9Nb2RlU3RkaW5fU2V0RWNob01vZGVfbGluZU1vZGVTdGRpbl9HZXRMaW5lTW9kZV9zZXRMaW5lTW9kZVN0ZGluX1NldExpbmVNb2RlX3JlYWRCeXRlU3RkaW5fUmVhZEJ5dGVfc3VwcG9ydHNBbnNpRXNjYXBlc1N0ZGluX0Fuc2lTdXBwb3J0ZWRyZWFkTGluZVN5bmNyZXRhaW5OZXdsaW5lc2NySXNOZXdsaW5ldGVybWluYWxsaW5lTW9kZWVjaG9Nb2RlRXJyb3IgZ2V0dGluZyB0ZXJtaW5hbCBlY2hvIG1vZGVUaGlzIGVtYmVkZGVyIGRpc2FsbG93cyBzZXR0aW5nIFN0ZGluLmVjaG9Nb2RlRXJyb3Igc2V0dGluZyB0ZXJtaW5hbCBlY2hvIG1vZGVFcnJvciBnZXR0aW5nIHRlcm1pbmFsIGxpbmUgbW9kZVRoaXMgZW1iZWRkZXIgZGlzYWxsb3dzIHNldHRpbmcgU3RkaW4ubGluZU1vZGVFcnJvciBzZXR0aW5nIHRlcm1pbmFsIGxpbmUgbW9kZXN1cHBvcnRzQW5zaUVzY2FwZXNFcnJvciBkZXRlcm1pbmluZyBBTlNJIHN1cHBvcnRFcnJvciByZWFkaW5nIGJ5dGUgZnJvbSBzdGRpbmhhc1Rlcm1pbmFsU3Rkb3V0X25vbkJsb2NraW5nX3Rlcm1pbmFsU2l6ZUNvdWxkIG5vdCBnZXQgdGVybWluYWwgc2l6ZV9nZXRUZXJtaW5hbFNpemVTdGRvdXRfR2V0VGVybWluYWxTaXplX2dldEFuc2lTdXBwb3J0ZWRTdGRvdXRfQW5zaVN1cHBvcnRlZF9oYXNUZXJtaW5hbHRlcm1pbmFsQ29sdW1uc190ZXJtaW5hbENvbHVtbnN0ZXJtaW5hbExpbmVzX3Rlcm1pbmFsTGluZXNub25CbG9ja2luZ1N0ZG91dEV4Y2VwdGlvblN0ZG91dEV4Y2VwdGlvbjogU3RkaW5FeGNlcHRpb25TdGRpbkV4Y2VwdGlvbjogX1N0ZENvbnN1bWVyX1N0ZFNpbmtTdGRpb1R5cGVURVJNSU5BTFVzZSB0ZXJtaW5hbCBpbnN0ZWFkUElQRVVzZSBwaXBlIGluc3RlYWRPVEhFUlVzZSBvdGhlciBpbnN0ZWFkU3RkaW9UeXBlOiBfU3RkSU9VdGlsc19uYXRpdmVTb2NrZXRUeXBlRXJyb3IgcmV0cmlldmluZyBzb2NrZXQgdHlwZV9nZXRTdGRpb091dHB1dFN0cmVhbUZhaWxlZCB0byBnZXQgdHlwZSBvZiBzdGRpbyBoYW5kbGUgKGZkIF9nZXRTdGRpb0lucHV0U3RyZWFtX3NvY2tldFR5cGVfZ2V0U3RkaW9IYW5kbGVUeXBlRmlsZV9HZXRTdGRpb0hhbmRsZVR5cGVTeXN0ZW1FbmNvZGluZ3N5c3RlbV9XaW5kb3dzQ29kZVBhZ2VFbmNvZGVySW52YWxpZCBjaGFyYWN0ZXIgZm9yIGVuY29kaW5nX2VuY29kZVN0cmluZ1N0cmluZ1RvU3lzdGVtRW5jb2RpbmdfV2luZG93c0NvZGVQYWdlRW5jb2RlclNpbmtfV2luZG93c0NvZGVQYWdlRGVjb2Rlcl9kZWNvZGVCeXRlc1N5c3RlbUVuY29kaW5nVG9TdHJpbmdfV2luZG93c0NvZGVQYWdlRGVjb2RlclNpbmtSYXdTeW5jaHJvbm91c1NvY2tldF9zaWduYWxDb250cm9sbGVyc19zdWNjZXNzUmVzcG9uc2VfaWxsZWdhbEFyZ3VtZW50UmVzcG9uc2Vfb3NFcnJvclJlc3BvbnNlX2ZpbGVDbG9zZWRSZXNwb25zZV9lcnJvclJlc3BvbnNlRXJyb3JUeXBlX29zRXJyb3JSZXNwb25zZUVycm9yQ29kZV9vc0Vycm9yUmVzcG9uc2VNZXNzYWdlemxpYlpMSUJVc2UgemxpYiBpbnN0ZWFkR1pJUFVzZSBnemlwIGluc3RlYWRVc2UgRmlsZU1vZGUucmVhZCBpbnN0ZWFkVXNlIEZpbGVNb2RlLndyaXRlIGluc3RlYWRVc2UgRmlsZU1vZGUuYXBwZW5kIGluc3RlYWRVc2UgRmlsZU1vZGUud3JpdGVPbmx5IGluc3RlYWRVc2UgRmlsZU1vZGUud3JpdGVPbmx5QXBwZW5kIGluc3RlYWRfYmxvY2tTaXplX3ZlcnNpb25NYWpvcl92ZXJzaW9uTWlub3JfdGNwU29ja2V0X3VkcFNvY2tldF9pb092ZXJyaWRlc1Rva2VuX2FzeW5jUnVuWm9uZWRfbmV4dFNlcnZpY2VJZF9zdGRpb0hhbmRsZVR5cGVUZXJtaW5hbF9zdGRpb0hhbmRsZVR5cGVQaXBlX3N0ZGlvSGFuZGxlVHlwZUZpbGVfc3RkaW9IYW5kbGVUeXBlU29ja2V0X3N0ZGlvSGFuZGxlVHlwZU90aGVyX3N0ZGlvSGFuZGxlVHlwZUVycm9yX3N0ZGluRkRfc3Rkb3V0RkRfc3RkZXJyRkRzeXN0ZW1FbmNvZGluZ1NZU1RFTV9FTkNPRElOR1VzZSBzeXN0ZW1FbmNvZGluZyBpbnN0ZWFkX3VyaUJhc2VDbG9zdXJlX2dldFVyaUJhc2VDbG9zdXJlX21ha2VVaW50OExpc3RWaWV3X2dldFdhdGNoU2lnbmFsSW50ZXJuYWxfcnVuTm9uSW50ZXJhY3RpdmVQcm9jZXNzZm9sZFN0cmVhbV9ydW5Ob25JbnRlcmFjdGl2ZVByb2Nlc3NTeW5jX3Rocm93T25CYWRQb3J0SW52YWxpZCBwb3J0IF90aHJvd09uQmFkVHRsSW52YWxpZCB0dGwgX21ha2VEYXRhZ3JhbV9nZXRTdGRpb0hhbmRsZVNvY2tldF9HZXRTdGRpb0hhbmRsZW51bV9nZXRTb2NrZXRUeXBlU29ja2V0X0dldFR5cGVfZW5zdXJlRmFzdEFuZFNlcmlhbGl6YWJsZUJ5dGVEYXRhX3ZhbGlkYXRlWkxpYldpbmRvd0JpdHNfdmFsaWRhdGVaTGliZUxldmVsX3ZhbGlkYXRlWkxpYk1lbUxldmVsX3ZhbGlkYXRlWkxpYlN0cmF0ZWd5VW5zdXBwb3J0ZWQgJ3N0cmF0ZWd5J19zdWNjZXNzU3VjY2Vzc19pbnZhbGlkQXJndW1lbnRWYWx1ZSBmb3IgcGFyYW1ldGVyICcnIGlzIG5vdCB2YWxpZDogX21pc3NpbmdBcmd1bWVudFBhcmFtZXRlciAnJyBpcyByZXF1aXJlZF9nZXRIdHRwRW5hYmxlVGltZWxpbmVMb2dnaW5nSHR0cFRpbWVsaW5lTG9nZ2luZ1N0YXRlX3NldEh0dHBFbmFibGVUaW1lbGluZUxvZ2dpbmdleGl0VGhpcyBlbWJlZGRlciBkaXNhbGxvd3MgY2FsbGluZyBkYXJ0OmlvJ3MgZXhpdCgpc2xlZXBzbGVlcDogZHVyYXRpb24gY2Fubm90IGJlIG5lZ2F0aXZlVGhpcyBlbWJlZGRlciBkaXNhbGxvd3MgY2FsbGluZyBkYXJ0OmlvJ3Mgc2xlZXAoKV9zZXRTdGRpb0ZEc3N0ZGlvVHlwZXN0ZGlvZmRkYXJ0Lndhc21fTmF0aXZlV2FzbU1vZHVsZWluc3RhbnRpYXRlaW1wb3J0c1dhc21faW5pdE1vZHVsZWRlc2NyaWJlV2FzbV9kZXNjcmliZU1vZHVsZV9OYXRpdmVXYXNtSW1wb3J0c19tZW1vcmllc19mbnNhZGRNZW1vcnltb2R1bGVOYW1lbWVtb3J5X2FkZE1lbW9yeWFkZEdsb2JhbG11dGFibGVfYWRkR2xvYmFsYWRkRnVuY3Rpb25mbl9hZGRGdW5jdGlvbmdldEZ1bmN0aW9uaW1wV2FzbV9pbml0SW1wb3J0c1dhc21fYWRkTWVtb3J5SW1wb3J0V2FzbV9hZGRHbG9iYWxJbXBvcnRXYXNtX2FkZEZ1bmN0aW9uSW1wb3J0X05hdGl2ZVdhc21NZW1vcnlfcGFnZXNpbml0aWFsUGFnZXNtYXhQYWdlc2Zyb21JbnN0YW5jZWluc3RfaW5pdEZyb21JbnN0YW5jZV9nZXRQYWdlc2xlbmd0aEluUGFnZXNncm93ZGVsdGFQYWdlc29sZFBhZ2VzV2FzbV9pbml0TWVtb3J5V2FzbV9ncm93TWVtb3J5V2FzbV9pbml0TWVtb3J5RnJvbUluc3RhbmNlV2FzbV9nZXRNZW1vcnlQYWdlc19OYXRpdmVXYXNtSW5zdGFuY2VfbW9kdWxlX2ltcG9ydHNtb2R1bGVXYXNtX2luaXRJbnN0YW5jZV9OYXRpdmVXYXNtRnVuY3Rpb25faW5zdGFyZ19jb3B5X2NhbGxXYXNtX2luaXRGdW5jdGlvbmZuVHlwZVdhc21fY2FsbEZ1bmN0aW9uV2FzbU1vZHVsZVdhc21JbXBvcnRzV2FzbU1lbW9yeWtQYWdlU2l6ZUluQnl0ZXNXYXNtSW5zdGFuY2VXYXNtRnVuY3Rpb25mdWNoc2lhX2J1aWx0aW5fTG9nZ2VyX3ByaW50U3RyaW5nTG9nZ2VyX1ByaW50U3RyaW5nX3Jhd1NjcmlwdF9zY3JpcHRVcmlTY2hlZHVsZU1pY3JvdGFza19nZXRTY2hlZHVsZU1pY3JvdGFza0Nsb3N1cmVfZ2V0UHJpbnRDbG9zdXJlemlyY29uc3JjL2hhbmRsZS5kYXJ0c3JjL2hhbmRsZV93YWl0ZXIuZGFydHNyYy9zeXN0ZW0uZGFydEFzeW5jV2FpdENhbGxiYWNrSGFuZGxlaW52YWxpZF9jcmVhdGVJbnZhbGlkSGFuZGxlX0NyZWF0ZUludmFsaWRfaGFuZGxlSGFuZGxlX2hhbmRsZUhhbmRsZShpc1ZhbGlkSGFuZGxlX2lzX3ZhbGlkSGFuZGxlX0Nsb3NlYXN5bmNXYWl0SGFuZGxlX0FzeW5jV2FpdHNpZ25hbHNkdXBsaWNhdGVIYW5kbGVfRHVwbGljYXRlcmlnaHRzX09uV2FpdENvbXBsZXRlQ2xvc3VyZV9hcmcxX2FyZzJIYW5kbGVXYWl0ZXJIYW5kbGVXYWl0ZXJfQ2FuY2VsWnhTdGF0dXNFeGNlcHRpb25aeFN0YXR1c0V4Y2VwdGlvbjogc3RhdHVzID0gLCAiX1Jlc3VsdEhhbmRsZVJlc3VsdEhhbmRsZVJlc3VsdChzdGF0dXM9LCBoYW5kbGU9SGFuZGxlUGFpclJlc3VsdEhhbmRsZVBhaXJSZXN1bHQoc3RhdHVzPSwgZmlyc3Q9LCBzZWNvbmQ9UmVhZFJlc3VsdG51bUJ5dGVzaGFuZGxlc2J5dGVzQXNVaW50OExpc3RieXRlc0FzVVRGOFN0cmluZ1JlYWRSZXN1bHQoc3RhdHVzPSwgYnl0ZXM9LCBudW1CeXRlcz0sIGhhbmRsZXM9V3JpdGVSZXN1bHRXcml0ZVJlc3VsdChzdGF0dXM9R2V0U2l6ZVJlc3VsdEdldFNpemVSZXN1bHQoc3RhdHVzPSwgc2l6ZT1Gcm9tRmlsZVJlc3VsdEZyb21GaWxlUmVzdWx0KHN0YXR1cz1NYXBSZXN1bHRNYXBSZXN1bHQoc3RhdHVzPSwgZGF0YT1TeXN0ZW1jaGFubmVsQ3JlYXRlU3lzdGVtX0NoYW5uZWxDcmVhdGVvcHRpb25zY2hhbm5lbEZyb21GaWxlU3lzdGVtX0NoYW5uZWxGcm9tRmlsZWNvbm5lY3RUb1NlcnZpY2VTeXN0ZW1fQ29ubmVjdFRvU2VydmljZWNoYW5uZWxjaGFubmVsV3JpdGVTeXN0ZW1fQ2hhbm5lbFdyaXRlY2hhbm5lbFF1ZXJ5QW5kUmVhZFN5c3RlbV9DaGFubmVsUXVlcnlBbmRSZWFkZXZlbnRwYWlyQ3JlYXRlU3lzdGVtX0V2ZW50cGFpckNyZWF0ZXNvY2tldENyZWF0ZVN5c3RlbV9Tb2NrZXRDcmVhdGVzb2NrZXRXcml0ZVN5c3RlbV9Tb2NrZXRXcml0ZXNvY2tldFJlYWRTeXN0ZW1fU29ja2V0UmVhZHZtb0NyZWF0ZVN5c3RlbV9WbW9DcmVhdGV2bW9Gcm9tRmlsZVN5c3RlbV9WbW9Gcm9tRmlsZXZtb0dldFNpemVTeXN0ZW1fVm1vR2V0U2l6ZXZtb3Ztb1NldFNpemVTeXN0ZW1fVm1vU2V0U2l6ZXZtb1dyaXRlU3lzdGVtX1Ztb1dyaXRldm1vUmVhZFN5c3RlbV9WbW9SZWFkdm1vTWFwU3lzdGVtX1Ztb01hcGNsb2NrR2V0U3lzdGVtX0Nsb2NrR2V0Y2xvY2tJZHJlYm9vdE14U3RhcnR1cEluZm90YWtlRW52aXJvbm1lbnRBdHRlbXB0aW5nIHRvIGNhbGwgdGFrZUVudmlyb25tZW50IG1vcmUgdGhhbiBvbmNlIHBlciBwcm9jZXNzdGFrZU91dGdvaW5nU2VydmljZXNBdHRlbXB0aW5nIHRvIGNhbGwgdGFrZU91dGdvaW5nU2VydmljZXMgbW9yZSB0aGFuIG9uY2UgcGVyIHByb2Nlc3N0YWtlVmlld1JlZkF0dGVtcHRpbmcgdG8gY2FsbCB0YWtlVmlld1JlZiBtb3JlIHRoYW4gb25jZSBwZXIgcHJvY2Vzc19vdXRnb2luZ1NlcnZpY2VzX3ZpZXdSZWZfc2V0UmV0dXJuQ29kZVNldFJldHVybkNvZGVyZXR1cm5Db2Rldm1zZXJ2aWNlX2lvdm1zZXJ2aWNlX3NlcnZlci5kYXJ0UGVuZGluZ1dyaXRlcGFyZW50X2RpcmVjdG9yeVdyaXRlTGltaXRlcnBlbmRpbmdXcml0ZXNrTWF4T3BlbldyaXRlc29wZW5Xcml0ZXNzY2hlZHVsZVdyaXRlcHdfbWF5YmVXcml0ZUZpbGVzX3dyaXRlQ29tcGxldGVkV2ViU29ja2V0Q2xpZW50UEFSU0VfRVJST1JfQ09ERUJJTkFSWV9NRVNTQUdFX0VSUk9SX0NPREVOT1RfTUFQX0VSUk9SX0NPREVJRF9FUlJPUl9DT0RFc2VydmljZW9uV2ViU29ja2V0TWVzc2FnZWRpc2Nvbm5lY3RNZXNzYWdlIHBhcnNlIGVycm9yOiBNZXNzYWdlIG11c3QgYmUgYSBKU09OIG1hcC5ycGNNZXNzYWdlVHlwZS5SZXF1ZXN0b25SZXF1ZXN0TWVzc2FnZVR5cGUuTm90aWZpY2F0aW9ub25Ob3RpZmljYXRpb25NZXNzYWdlVHlwZS5SZXNwb25zZW9uUmVzcG9uc2VNZXNzYWdlIG11c3QgYmUgYSBzdHJpbmcucG9zdGtpbmRSZXNwb25zZVBheWxvYWRLaW5kLlN0cmluZ1Jlc3BvbnNlUGF5bG9hZEtpbmQuQmluYXJ5cGF5bG9hZFJlc3BvbnNlUGF5bG9hZEtpbmQuVXRmOFN0cmluZ2FkZFV0ZjhUZXh0SHR0cFJlcXVlc3RDbGllbnRqc29uQ29udGVudFR5cGVhcHBsaWNhdGlvbmNoYXJzZXRzZW5kRXZlbnRzaGVhZGVyc0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbmNvbnRlbnRUeXBlQ2FuIG5vdCBoYW5kbGUgYmluYXJ5IHJlc3BvbnNlc1NlcnZlcldFQlNPQ0tFVF9QQVRIL3dzUk9PVF9SRURJUkVDVF9QQVRIL2luZGV4Lmh0bWxfc2VydmljZV9pcF9vcmlnaW5DaGVja0Rpc2FibGVkX2F1dGhDb2Rlc0Rpc2FibGVkX2VuYWJsZVNlcnZpY2VQb3J0RmFsbGJhY2tfc2VydmljZUluZm9GaWxlbmFtZV9zZXJ2ZXJfcG9ydGF1dGhDb2Rlc0Rpc2FibGVkcnVubmluZ3NlcnZlckFkZHJlc3NpcGh0dHBfaXNBbGxvd2VkT3JpZ2lub3JpZ2lubG9jYWxob3N0X29yaWdpbkNoZWNrb3JpZ2luc1NlYy1XZWJTb2NrZXQtT3JpZ2luT3JpZ2luX2NoZWNrQXV0aFRva2VuQW5kR2V0UGF0aHJlcXVlc3RVcmlyZXF1ZXN0UGF0aFNlZ21lbnRzcGF0aFNlZ21lbnRzYXV0aFRva2VucmVwbGFjZV9yZXF1ZXN0SGFuZGxlcnN0YXR1c0NvZGVmb3JiaWRkZW4gb3JpZ2luUFVUZnNOYW1lTGlzdGZzUGF0aExpc3Rmc1BhdGhCYXNlNjRMaXN0ZnNVcmlCYXNlNjRMaXN0ZnNOYW1lZnNQYXRoZnNVcmlkZXZfZnNfbmFtZWRldl9mc191cmlfYjY0ZGVjb2RlZEZzVXJpZGV2X2ZzX3BhdGhkZXZfZnNfcGF0aF9iNjRkZXZmc2hhbmRsZVB1dFN0cmVhbUdFVG1ldGhvZCBub3QgYWxsb3dlZG1pc3Npbmcgb3IgaW52YWxpZCBhdXRoZW50aWNhdGlvbiBjb2RlcmVkaXJlY3Rjb21wcmVzc2lvbndlYlNvY2tldFRoaXMgVk0gd2FzIGJ1aWx0IHdpdGhvdXQgdGhlIE9ic2VydmF0b3J5IFVJLmFzc2V0bWltZVR5cGVjbGllbnRxdWVyeVBhcmFtZXRlcnNfZHVtcFNlcnZpY2VJbmZvVG9GaWxlc2VydmljZUluZm9zdGFydHVwcG9sbEVycm9ycG9sbFN0YWNrcG9sbGF0dGVtcHRzbWF4QXR0ZW1wdHNPYnNlcnZhdG9yeSBzZXJ2ZXIgZmFpbGVkIHRvIHN0YXJ0IGFmdGVyICB0cmllc0NvdWxkIG5vdCBzdGFydCBPYnNlcnZhdG9yeSBIVFRQIHNlcnZlcjoKRmFsbGluZyBiYWNrIHRvIGF1dG9tYXRpYyBwb3J0IHNlbGVjdGlvbmlzRXhpdGluZ09ic2VydmF0b3J5IEhUVFAgc2VydmVyIGV4aXRpbmcgYmVmb3JlIGxpc3RlbmluZyBhcyB2bSBzZXJ2aWNlIGhhcyByZWNlaXZlZCBleGl0IHJlcXVlc3QKT2JzZXJ2YXRvcnkgbGlzdGVuaW5nIG9uIC9kYXJ0LnNlcnZpY2VzL0NyZWF0aW5nIGNsZWFudXBmb3JjZURlbGV0aW5nIGZvcmNlZG9sZFNlcnZlckFkZHJlc3NPYnNlcnZhdG9yeSBubyBsb25nZXIgbGlzdGVuaW5nIG9uIENvdWxkIG5vdCBzaHV0ZG93biBPYnNlcnZhdG9yeSBIVFRQIHNlcnZlcjoKX2F1dG9TdGFydF9pc1dpbmRvd3NfaXNGdWNoc2lhX3NpZ25hbFdhdGNoX3NpZ25hbFN1YnNjcmlwdGlvbnNlcnZlcnNlcnZlckZ1dHVyZV9yZWdpc3RlclNpZ25hbEhhbmRsZXJUaW1lcnNpbGVudE9ic2VydmF0b3J5U0lMRU5UX09CU0VSVkFUT1JZX2xhenlTZXJ2ZXJCb290Y2xlYW51cENhbGxiYWNrRXJyb3IgaW4gdm0tc2VydmljZSBzaHV0ZG93bjogY3JlYXRlVGVtcERpckNhbGxiYWNrdGVtcGRlbGV0ZURpckNhbGxiYWNrZGlyd3JpdGVGaWxlQ2FsbGJhY2t3cml0ZVN0cmVhbUZpbGVDYWxsYmFja3JlYWRGaWxlQ2FsbGJhY2tsaXN0RmlsZXNDYWxsYmFja2RpclBhdGhkaXJQYXRoU3RyOnN0cmVhbTpmb3ItaXRlcmF0b3JmaWxlRW50aXR5ZmlsZVBhdGhzZXJ2ZXJJbmZvcm1hdGlvbkNhbGxiYWNrd2ViU2VydmVyQ29udHJvbENhbGxiYWNrX2NsZWFyRnV0dXJlX29uU2lnbmFsX3JlZ2lzdGVyU2lnbmFsSGFuZGxlcm1haW5fc2h1dGRvd25WTVNlcnZpY2VJT19TaHV0ZG93bnNlcnZlclByaW50X25vdGlmeVNlcnZlclN0YXRlVk1TZXJ2aWNlSU9fTm90aWZ5U2VydmVyU3RhdGVkYXJ0LnVpY29sbGVjdGlvbmRldmVsb3Blcm1hdGhjaGFubmVsX2J1ZmZlcnMuZGFydGNvbXBvc2l0aW5nLmRhcnRnZW9tZXRyeS5kYXJ0aGFzaF9jb2Rlcy5kYXJ0aG9va3MuZGFydGlzb2xhdGVfbmFtZV9zZXJ2ZXIuZGFydGxlcnAuZGFydG5hdGl2ZXMuZGFydHBhaW50aW5nLmRhcnRwbHVnaW5zLmRhcnRwb2ludGVyLmRhcnRzZW1hbnRpY3MuZGFydHRleHQuZGFydHdpbmRvdy5kYXJ0RHJhaW5DaGFubmVsQ2FsbGJhY2tfTG9jYWxlQ2xvc3VyZUltYWdlRGVjb2RlckNhbGxiYWNrX0NhbGxiYWNrX0NhbGxiYWNrZXJWb2lkQ2FsbGJhY2tGcmFtZUNhbGxiYWNrVGltaW5nc0NhbGxiYWNrdGltaW5nc1BvaW50ZXJEYXRhUGFja2V0Q2FsbGJhY2twYWNrZXRTZW1hbnRpY3NBY3Rpb25DYWxsYmFja1BsYXRmb3JtTWVzc2FnZVJlc3BvbnNlQ2FsbGJhY2tQbGF0Zm9ybU1lc3NhZ2VDYWxsYmFja19TZXROZWVkc1JlcG9ydFRpbWluZ3NGdW5jX1N0b3JlZE1lc3NhZ2VfUmluZ0J1ZmZlcl9jYXBhY2l0eV9kcm9wSXRlbUNhbGxiYWNrZHJvcEl0ZW1DYWxsYmFja3B1c2hvdmVyZmxvd0NvdW50X2Ryb3BPdmVyZmxvd0l0ZW1zcG9wbGVuZ3RoTGltaXRpdGVtcmVzaXplQ2hhbm5lbEJ1ZmZlcnNrRGVmYXVsdEJ1ZmZlclNpemVrQ29udHJvbENoYW5uZWxOYW1lZGV2LmZsdXR0ZXIvY2hhbm5lbC1idWZmZXJzX21lc3NhZ2VzX21ha2VSaW5nQnVmZmVyX29uRHJvcEl0ZW1kaWRPdmVyZmxvd092ZXJmbG93IG9uIGNoYW5uZWw6IC4gTWVzc2FnZXMgb24gdGhpcyBjaGFubmVsIGFyZSBiZWluZyBkaXNjYXJkZWQgaW4gRklGTyBmYXNoaW9uLiBUaGUgZW5naW5lIG1heSBub3QgYmUgcnVubmluZyBvciB5b3UgbmVlZCB0byBhZGp1c3QgdGhlIGJ1ZmZlciBzaXplIG9mIHRoZSBjaGFubmVsLl9wb3BudW1iZXJPZkRyb3BwZWRNZXNzYWdlc0Ryb3BwaW5nIG1lc3NhZ2VzIG9uIGNoYW5uZWwgIiIgYXMgYSByZXN1bHQgb2Ygc2hyaW5raW5nIHRoZSBidWZmZXIgc2l6ZS5fZ2V0U3RyaW5naGFuZGxlTWVzc2FnZWNvbW1hbmQNVW5yZWNvZ25pemVkIGNvbW1hbmQgIHNlbnQgdG8gU2NlbmV0b0ltYWdlSW52YWxpZCBpbWFnZSBkaW1lbnNpb25zLl90b0ltYWdlU2NlbmVfdG9JbWFnZWRpc3Bvc2VTY2VuZV9kaXNwb3NlX0VuZ2luZUxheWVyV3JhcHBlcl9uYXRpdmVMYXllcl9kZWJ1Z0NoaWxkcmVuX2RlYnVnV2FzVXNlZEFzT2xkTGF5ZXJfZGVidWdDaGVja05vdFVzZWRBc09sZExheWVyTGF5ZXIgIHdhcyBwcmV2aW91c2x5IHVzZWQgYXMgb2xkTGF5ZXIuCk9uY2UgYSBsYXllciBpcyB1c2VkIGFzIG9sZExheWVyLCBpdCBtYXkgbm90IGJlIHVzZWQgYWdhaW4uIEluc3RlYWQsIGFmdGVyIGNhbGxpbmcgb25lIG9mIHRoZSBTY2VuZUJ1aWxkZXIucHVzaCogbWV0aG9kcyBhbmQgcGFzc2luZyBhbiBvbGRMYXllciB0byBpdCwgdXNlIHRoZSBsYXllciByZXR1cm5lZCBieSB0aGUgbWV0aG9kIGFzIG9sZExheWVyIGluIHN1YnNlcXVlbnQgZnJhbWVzLlRyYW5zZm9ybUVuZ2luZUxheWVybmF0aXZlTGF5ZXJPZmZzZXRFbmdpbmVMYXllckNsaXBSZWN0RW5naW5lTGF5ZXJDbGlwUlJlY3RFbmdpbmVMYXllckNsaXBQYXRoRW5naW5lTGF5ZXJPcGFjaXR5RW5naW5lTGF5ZXJDb2xvckZpbHRlckVuZ2luZUxheWVySW1hZ2VGaWx0ZXJFbmdpbmVMYXllckJhY2tkcm9wRmlsdGVyRW5naW5lTGF5ZXJTaGFkZXJNYXNrRW5naW5lTGF5ZXJQaHlzaWNhbFNoYXBlRW5naW5lTGF5ZXJTY2VuZUJ1aWxkZXJfdXNlZExheWVyc19sYXllclN0YWNrX2NvbnN0cnVjdG9yU2NlbmVCdWlsZGVyX2NvbnN0cnVjdG9yX2RlYnVnQ2hlY2tVc2VkT25jZWxheWVydXNhZ2UgYWxyZWFkeSB1c2VkLgpUaGUgbGF5ZXIgaXMgYWxyZWFkeSBiZWluZyB1c2VkIGFzICBpbiB0aGlzIHNjZW5lLgpBIGxheWVyIG1heSBvbmx5IGJlIHVzZWQgb25jZSBpbiBhIGdpdmVuIHNjZW5lLl9kZWJ1Z0NoZWNrQ2FuQmVVc2VkQXNPbGRMYXllcm1ldGhvZE5hbWVvbGRMYXllciBpbiBfZGVidWdQdXNoTGF5ZXJuZXdMYXllcmN1cnJlbnRMYXllcnB1c2hUcmFuc2Zvcm1tYXRyaXg0b2xkTGF5ZXJfcHVzaFRyYW5zZm9ybVNjZW5lQnVpbGRlcl9wdXNoVHJhbnNmb3JtcHVzaE9mZnNldF9wdXNoT2Zmc2V0U2NlbmVCdWlsZGVyX3B1c2hPZmZzZXRwdXNoQ2xpcFJlY3RyZWN0Y2xpcEJlaGF2aW9yQ2xpcC5hbnRpQWxpYXNDbGlwLm5vbmVfcHVzaENsaXBSZWN0U2NlbmVCdWlsZGVyX3B1c2hDbGlwUmVjdHB1c2hDbGlwUlJlY3RycmVjdF9wdXNoQ2xpcFJSZWN0X3ZhbHVlMzJTY2VuZUJ1aWxkZXJfcHVzaENsaXBSUmVjdHB1c2hDbGlwUGF0aF9wdXNoQ2xpcFBhdGhTY2VuZUJ1aWxkZXJfcHVzaENsaXBQYXRocHVzaE9wYWNpdHlhbHBoYTAuMF9wdXNoT3BhY2l0eVNjZW5lQnVpbGRlcl9wdXNoT3BhY2l0eXB1c2hDb2xvckZpbHRlcmZpbHRlcm5hdGl2ZUZpbHRlcl90b05hdGl2ZUNvbG9yRmlsdGVyX3B1c2hDb2xvckZpbHRlclNjZW5lQnVpbGRlcl9wdXNoQ29sb3JGaWx0ZXJwdXNoSW1hZ2VGaWx0ZXJfdG9OYXRpdmVJbWFnZUZpbHRlcl9wdXNoSW1hZ2VGaWx0ZXJTY2VuZUJ1aWxkZXJfcHVzaEltYWdlRmlsdGVycHVzaEJhY2tkcm9wRmlsdGVyX3B1c2hCYWNrZHJvcEZpbHRlclNjZW5lQnVpbGRlcl9wdXNoQmFja2Ryb3BGaWx0ZXJwdXNoU2hhZGVyTWFza3NoYWRlcm1hc2tSZWN0YmxlbmRNb2RlX3B1c2hTaGFkZXJNYXNrU2NlbmVCdWlsZGVyX3B1c2hTaGFkZXJNYXNrbWFza1JlY3RMZWZ0bWFza1JlY3RSaWdodG1hc2tSZWN0VG9wbWFza1JlY3RCb3R0b21wdXNoUGh5c2ljYWxTaGFwZWVsZXZhdGlvbmNvbG9yc2hhZG93Q29sb3JfcHVzaFBoeXNpY2FsU2hhcGU0Mjc4MTkwMDgwU2NlbmVCdWlsZGVyX3B1c2hQaHlzaWNhbFNoYXBlU2NlbmVCdWlsZGVyX3BvcGFkZFJldGFpbmVkcmV0YWluZWRMYXllcnJlY3Vyc2l2ZWx5Q2hlY2tDaGlsZHJlblVzZWRPbmNlcGFyZW50TGF5ZXJyZXRhaW5lZCBsYXllcl9hZGRSZXRhaW5lZFNjZW5lQnVpbGRlcl9hZGRSZXRhaW5lZGFkZFBlcmZvcm1hbmNlT3ZlcmxheWVuYWJsZWRPcHRpb25zYm91bmRzX2FkZFBlcmZvcm1hbmNlT3ZlcmxheVNjZW5lQnVpbGRlcl9hZGRQZXJmb3JtYW5jZU92ZXJsYXlhZGRQaWN0dXJlcGljdHVyZWlzQ29tcGxleEhpbnR3aWxsQ2hhbmdlSGludGhpbnRzX2FkZFBpY3R1cmVTY2VuZUJ1aWxkZXJfYWRkUGljdHVyZWFkZFRleHR1cmV0ZXh0dXJlSWRmcmVlemVPZmZzZXQgYXJndW1lbnQgd2FzIG51bGxfYWRkVGV4dHVyZVNjZW5lQnVpbGRlcl9hZGRUZXh0dXJlYWRkUGxhdGZvcm1WaWV3dmlld0lkX2FkZFBsYXRmb3JtVmlld1NjZW5lQnVpbGRlcl9hZGRQbGF0Zm9ybVZpZXdhZGRDaGlsZFNjZW5lc2NlbmVIb3N0aGl0VGVzdGFibGVfYWRkQ2hpbGRTY2VuZVNjZW5lQnVpbGRlcl9hZGRDaGlsZFNjZW5lc2V0UmFzdGVyaXplclRyYWNpbmdUaHJlc2hvbGRTY2VuZUJ1aWxkZXJfc2V0UmFzdGVyaXplclRyYWNpbmdUaHJlc2hvbGRmcmFtZUludGVydmFsc2V0Q2hlY2tlcmJvYXJkUmFzdGVyQ2FjaGVJbWFnZXNTY2VuZUJ1aWxkZXJfc2V0Q2hlY2tlcmJvYXJkUmFzdGVyQ2FjaGVJbWFnZXNjaGVja2VyYm9hcmRzZXRDaGVja2VyYm9hcmRPZmZzY3JlZW5MYXllcnNTY2VuZUJ1aWxkZXJfc2V0Q2hlY2tlcmJvYXJkT2Zmc2NyZWVuTGF5ZXJzYnVpbGRTY2VuZUJ1aWxkZXJfYnVpbGRTY2VuZUhvc3R2aWV3SG9sZGVyVG9rZW52aWV3Q29ubmVjdGVkQ2FsbGJhY2t2aWV3RGlzY29ubmVjdGVkQ2FsbGJhY2t2aWV3U3RhdGVDaGFuZ2VkQ2FsbGJhY2tTY2VuZUhvc3RfY29uc3RydWN0b3J2aWV3U3RhdGVDaGFuZ2VkQ2FsbGJhY1NjZW5lSG9zdF9kaXNwb3Nlc2V0UHJvcGVydGllc1NjZW5lSG9zdF9zZXRQcm9wZXJ0aWVzaW5zZXRUb3BpbnNldFJpZ2h0aW5zZXRCb3R0b21pbnNldExlZnRmb2N1c2FibGVPZmZzZXRCYXNlX2R4X2R5aXNJbmZpbml0ZU9mZnNldEJhc2UodG9TdHJpbmdBc0ZpeGVkT2Zmc2V0aW5maW5pdGVmcm9tRGlyZWN0aW9uZGlzdGFuY2VkaXN0YW5jZVNxdWFyZWRzY2FsZVhzY2FsZVl0cmFuc2xhdGV0cmFuc2xhdGVYdHJhbnNsYXRlWW9wZXJhbmRsZXJwT2Zmc2V0KFNpemVzcXVhcmVkaW1lbnNpb25mcm9tV2lkdGhmcm9tSGVpZ2h0ZnJvbVJhZGl1c3JhZGl1c2FzcGVjdFJhdGlvc2hvcnRlc3RTaWRlbG9uZ2VzdFNpZGV0b3BDZW50ZXJjZW50ZXJMZWZ0Y2VudGVyY2VudGVyUmlnaHRib3R0b21DZW50ZXJmbGlwcGVkU2l6ZShSZWN0X2dpYW50U2NhbGFybGFyZ2VzdC0xMDAwMDAwMDAwLjBmcm9tTFRSQmZyb21MVFdIZnJvbUNpcmNsZWZyb21DZW50ZXJoYXNOYU5zaGlmdGluZmxhdGVkZWZsYXRlaW50ZXJzZWN0ZXhwYW5kVG9JbmNsdWRlb3ZlcmxhcHNSZWN0LmZyb21MVFJCKFJhZGl1c2NpcmN1bGFyZWxsaXB0aWNhbFJhZGl1cy5jaXJjdWxhcihSYWRpdXMuZWxsaXB0aWNhbChSUmVjdHRsUmFkaXVzWHRsUmFkaXVzWXRyUmFkaXVzWHRyUmFkaXVzWWJyUmFkaXVzWGJyUmFkaXVzWWJsUmFkaXVzWGJsUmFkaXVzWWZyb21MVFJCWFlyYWRpdXNYcmFkaXVzWWZyb21MVFJCUmZyb21SZWN0WFlmcm9tUmVjdEFuZFJhZGl1c2Zyb21MVFJCQW5kQ29ybmVyc2Zyb21SZWN0QW5kQ29ybmVyc3RsUmFkaXVzdHJSYWRpdXNiclJhZGl1c2JsUmFkaXVzb3V0ZXJSZWN0c2FmZUlubmVyUmVjdGxlZnRSYWRpdXN0b3BSYWRpdXNyaWdodFJhZGl1c2JvdHRvbVJhZGl1czAuMjkyODkzMjE4ODFtaWRkbGVSZWN0d2lkZU1pZGRsZVJlY3R0YWxsTWlkZGxlUmVjdGlzUmVjdGlzU3RhZGl1bWlzRWxsaXBzZWlzQ2lyY2xlX2dldE1pbnJhZGl1czFyYWRpdXMybGltaXRzdW1zY2FsZVJhZGlpcG9pbnRzY2FsZWRSUmVjdC5mcm9tTFRSQlIoUlJlY3QuZnJvbUxUUkJYWShSUmVjdC5mcm9tTFRSQkFuZENvcm5lcnModG9wTGVmdDogdG9wUmlnaHQ6IGJvdHRvbVJpZ2h0OiBib3R0b21MZWZ0OiBSU1RyYW5zZm9ybXNjb3Nzc2ludHh0eWZyb21Db21wb25lbnRzcm90YXRpb25hbmNob3JYYW5jaG9yWV9IYXNoRW5kX0plbmtpbnNJc29sYXRlTmFtZVNlcnZlcmxvb2t1cFBvcnRCeU5hbWUnbmFtZScgY2Fubm90IGJlIG51bGwucmVnaXN0ZXJQb3J0V2l0aE5hbWUncG9ydCcgY2Fubm90IGJlIG51bGwucmVtb3ZlUG9ydE5hbWVNYXBwaW5nX2xvb2t1cFBvcnRCeU5hbWVJc29sYXRlTmFtZVNlcnZlck5hdGl2ZXNfTG9va3VwUG9ydEJ5TmFtZV9yZWdpc3RlclBvcnRXaXRoTmFtZUlzb2xhdGVOYW1lU2VydmVyTmF0aXZlc19SZWdpc3RlclBvcnRXaXRoTmFtZV9yZW1vdmVQb3J0TmFtZU1hcHBpbmdJc29sYXRlTmFtZVNlcnZlck5hdGl2ZXNfUmVtb3ZlUG9ydE5hbWVNYXBwaW5nX3ByaW50RGVidWdTdHJpbmdMb2dnZXJfUHJpbnREZWJ1Z1N0cmluZ0NvbG9yZnJvbUFSR0JnZnJvbVJHQk9vcGFjaXR5cmVkZ3JlZW5ibHVld2l0aEFscGhhd2l0aE9wYWNpdHlyb3VuZHdpdGhSZWR3aXRoR3JlZW53aXRoQmx1ZV9saW5lYXJpemVDb2xvckNvbXBvbmVudGNvbXBvbmVudGNvbXB1dGVMdW1pbmFuY2VHdG9JbnRhbHBoYUJsZW5kZm9yZWdyb3VuZGJhY2tncm91bmRpbnZBbHBoYWJhY2tBbHBoYW91dEFscGhhZ2V0QWxwaGFGcm9tT3BhY2l0eUNvbG9yKDB4QmxlbmRNb2RlQmxlbmRNb2RlLmNsZWFyQmxlbmRNb2RlLnNyY0JsZW5kTW9kZS5kc3RCbGVuZE1vZGUuc3JjT3ZlckJsZW5kTW9kZS5kc3RPdmVyQmxlbmRNb2RlLnNyY0luQmxlbmRNb2RlLmRzdEluQmxlbmRNb2RlLnNyY091dEJsZW5kTW9kZS5kc3RPdXRCbGVuZE1vZGUuc3JjQVRvcEJsZW5kTW9kZS5kc3RBVG9wQmxlbmRNb2RlLnhvckJsZW5kTW9kZS5wbHVzQmxlbmRNb2RlLm1vZHVsYXRlQmxlbmRNb2RlLnNjcmVlbkJsZW5kTW9kZS5vdmVybGF5QmxlbmRNb2RlLmRhcmtlbkJsZW5kTW9kZS5saWdodGVuQmxlbmRNb2RlLmNvbG9yRG9kZ2VCbGVuZE1vZGUuY29sb3JCdXJuQmxlbmRNb2RlLmhhcmRMaWdodEJsZW5kTW9kZS5zb2Z0TGlnaHRCbGVuZE1vZGUuZGlmZmVyZW5jZUJsZW5kTW9kZS5leGNsdXNpb25CbGVuZE1vZGUubXVsdGlwbHlCbGVuZE1vZGUuaHVlQmxlbmRNb2RlLnNhdHVyYXRpb25CbGVuZE1vZGUuY29sb3JCbGVuZE1vZGUubHVtaW5vc2l0eXNyY092ZXJkc3RPdmVyc3JjSW5kc3RJbnNyY091dGRzdE91dHNyY0FUb3Bkc3RBVG9weG9ycGx1c21vZHVsYXRlc2NyZWVub3ZlcmxheWRhcmtlbmxpZ2h0ZW5jb2xvckRvZGdlY29sb3JCdXJuaGFyZExpZ2h0c29mdExpZ2h0ZXhjbHVzaW9ubXVsdGlwbHlodWVzYXR1cmF0aW9ubHVtaW5vc2l0eUZpbHRlclF1YWxpdHlGaWx0ZXJRdWFsaXR5Lm5vbmVGaWx0ZXJRdWFsaXR5Lmxvd0ZpbHRlclF1YWxpdHkubWVkaXVtRmlsdGVyUXVhbGl0eS5oaWdobm9uZWxvd21lZGl1bWhpZ2hTdHJva2VDYXBTdHJva2VDYXAuYnV0dFN0cm9rZUNhcC5yb3VuZFN0cm9rZUNhcC5zcXVhcmVidXR0U3Ryb2tlSm9pblN0cm9rZUpvaW4ubWl0ZXJTdHJva2VKb2luLnJvdW5kU3Ryb2tlSm9pbi5iZXZlbG1pdGVyYmV2ZWxQYWludGluZ1N0eWxlUGFpbnRpbmdTdHlsZS5maWxsUGFpbnRpbmdTdHlsZS5zdHJva2VzdHJva2VDbGlwQ2xpcC5oYXJkRWRnZUNsaXAuYW50aUFsaWFzV2l0aFNhdmVMYXllcmhhcmRFZGdlYW50aUFsaWFzYW50aUFsaWFzV2l0aFNhdmVMYXllclBhaW50X2tJc0FudGlBbGlhc0luZGV4X2tDb2xvckluZGV4X2tCbGVuZE1vZGVJbmRleF9rU3R5bGVJbmRleF9rU3Ryb2tlV2lkdGhJbmRleF9rU3Ryb2tlQ2FwSW5kZXhfa1N0cm9rZUpvaW5JbmRleF9rU3Ryb2tlTWl0ZXJMaW1pdEluZGV4X2tGaWx0ZXJRdWFsaXR5SW5kZXhfa01hc2tGaWx0ZXJJbmRleF9rTWFza0ZpbHRlckJsdXJTdHlsZUluZGV4X2tNYXNrRmlsdGVyU2lnbWFJbmRleF9rSW52ZXJ0Q29sb3JJbmRleF9rRGl0aGVySW5kZXhfa0lzQW50aUFsaWFzT2Zmc2V0X2tDb2xvck9mZnNldF9rQmxlbmRNb2RlT2Zmc2V0X2tTdHlsZU9mZnNldF9rU3Ryb2tlV2lkdGhPZmZzZXRfa1N0cm9rZUNhcE9mZnNldF9rU3Ryb2tlSm9pbk9mZnNldF9rU3Ryb2tlTWl0ZXJMaW1pdE9mZnNldF9rRmlsdGVyUXVhbGl0eU9mZnNldF9rTWFza0ZpbHRlck9mZnNldF9rTWFza0ZpbHRlckJsdXJTdHlsZU9mZnNldF9rTWFza0ZpbHRlclNpZ21hT2Zmc2V0X2tJbnZlcnRDb2xvck9mZnNldF9rRGl0aGVyT2Zmc2V0X2tEYXRhQnl0ZUNvdW50X29iamVjdHNfa1NoYWRlckluZGV4X2tDb2xvckZpbHRlckluZGV4X2tJbWFnZUZpbHRlckluZGV4X2tPYmplY3RDb3VudF9rQ29sb3JEZWZhdWx0X2tCbGVuZE1vZGVEZWZhdWx0X2tTdHJva2VNaXRlckxpbWl0RGVmYXVsdDQuMGVuYWJsZURpdGhlcmluZ19kaXRoZXJpc0FudGlBbGlhc3N0eWxlc3Ryb2tlV2lkdGhzdHJva2VDYXBzdHJva2VKb2luc3Ryb2tlTWl0ZXJMaW1pdG1hc2tGaWx0ZXJCbHVyU3R5bGUubm9ybWFsQmx1clN0eWxlLnNvbGlkQmx1clN0eWxlLm91dGVyQmx1clN0eWxlLmlubmVyX3N0eWxlX3NpZ21hZmlsdGVyUXVhbGl0eWNvbG9yRmlsdGVyY3JlYXRvcmltYWdlRmlsdGVyaW52ZXJ0Q29sb3Jzc2VtaWNvbG9uUGFpbnQoIGhhaXJsaW5lIHVwIHRvIDsgYW50aWFsaWFzIG9mZm5vIGNvbG9yY29sb3JGaWx0ZXI6IG1hc2tGaWx0ZXI6IGZpbHRlclF1YWxpdHk6IHNoYWRlcjogaW1hZ2VGaWx0ZXI6IGludmVydDogZGl0aGVyOiBJbWFnZUJ5dGVGb3JtYXRJbWFnZUJ5dGVGb3JtYXQucmF3UmdiYUltYWdlQnl0ZUZvcm1hdC5yYXdVbm1vZGlmaWVkSW1hZ2VCeXRlRm9ybWF0LnBuZ3Jhd1JnYmFyYXdVbm1vZGlmaWVkcG5nUGl4ZWxGb3JtYXRQaXhlbEZvcm1hdC5yZ2JhODg4OFBpeGVsRm9ybWF0LmJncmE4ODg4cmdiYTg4ODhiZ3JhODg4OF9JbWFnZUluZm9mb3JtYXRyb3dCeXRlc0ltYWdlSW1hZ2Vfd2lkdGhJbWFnZV9oZWlnaHR0b0J5dGVEYXRhX3RvQnl0ZURhdGFJbWFnZV90b0J5dGVEYXRhSW1hZ2VfZGlzcG9zZcOXRnJhbWVJbmZvX2R1cmF0aW9uTWlsbGlzRnJhbWVJbmZvX2R1cmF0aW9uTWlsbGlzaW1hZ2VGcmFtZUluZm9faW1hZ2VmcmFtZUNvdW50Q29kZWNfZnJhbWVDb3VudHJlcGV0aXRpb25Db3VudENvZGVjX3JlcGV0aXRpb25Db3VudGdldE5leHRGcmFtZV9nZXROZXh0RnJhbWVDb2RlY19nZXROZXh0RnJhbWVDb2RlY19kaXNwb3NlUGF0aEZpbGxUeXBlUGF0aEZpbGxUeXBlLm5vblplcm9QYXRoRmlsbFR5cGUuZXZlbk9kZG5vblplcm9ldmVuT2RkUGF0aE9wZXJhdGlvblBhdGhPcGVyYXRpb24uZGlmZmVyZW5jZVBhdGhPcGVyYXRpb24uaW50ZXJzZWN0UGF0aE9wZXJhdGlvbi51bmlvblBhdGhPcGVyYXRpb24ueG9yUGF0aE9wZXJhdGlvbi5yZXZlcnNlRGlmZmVyZW5jZXJldmVyc2VEaWZmZXJlbmNlRW5naW5lTGF5ZXJQYXRoUGF0aF9jb25zdHJ1Y3RvclBhdGhfY2xvbmVmaWxsVHlwZV9nZXRGaWxsVHlwZV9zZXRGaWxsVHlwZVBhdGhfZ2V0RmlsbFR5cGVQYXRoX3NldEZpbGxUeXBlbW92ZVRvUGF0aF9tb3ZlVG9yZWxhdGl2ZU1vdmVUb1BhdGhfcmVsYXRpdmVNb3ZlVG9saW5lVG9QYXRoX2xpbmVUb3JlbGF0aXZlTGluZVRvUGF0aF9yZWxhdGl2ZUxpbmVUb3F1YWRyYXRpY0JlemllclRvUGF0aF9xdWFkcmF0aWNCZXppZXJUb3gyeTJyZWxhdGl2ZVF1YWRyYXRpY0JlemllclRvUGF0aF9yZWxhdGl2ZVF1YWRyYXRpY0JlemllclRvY3ViaWNUb1BhdGhfY3ViaWNUb3gzeTNyZWxhdGl2ZUN1YmljVG9QYXRoX3JlbGF0aXZlQ3ViaWNUb2NvbmljVG9QYXRoX2NvbmljVG9yZWxhdGl2ZUNvbmljVG9QYXRoX3JlbGF0aXZlQ29uaWNUb2FyY1Rvc3RhcnRBbmdsZXN3ZWVwQW5nbGVmb3JjZU1vdmVUb19hcmNUb1BhdGhfYXJjVG9hcmNUb1BvaW50YXJjRW5kbGFyZ2VBcmNjbG9ja3dpc2VfYXJjVG9Qb2ludFBhdGhfYXJjVG9Qb2ludGFyY0VuZFhhcmNFbmRZcmVsYXRpdmVBcmNUb1BvaW50YXJjRW5kRGVsdGFfcmVsYXRpdmVBcmNUb1BvaW50UGF0aF9yZWxhdGl2ZUFyY1RvUG9pbnRhZGRSZWN0X2FkZFJlY3RQYXRoX2FkZFJlY3RhZGRPdmFsb3ZhbF9hZGRPdmFsUGF0aF9hZGRPdmFsYWRkQXJjX2FkZEFyY1BhdGhfYWRkQXJjYWRkUG9seWdvbnBvaW50c19hZGRQb2x5Z29uUGF0aF9hZGRQb2x5Z29uYWRkUlJlY3RfYWRkUlJlY3RQYXRoX2FkZFJSZWN0YWRkUGF0aF9hZGRQYXRoV2l0aE1hdHJpeF9hZGRQYXRoUGF0aF9hZGRQYXRoUGF0aF9hZGRQYXRoV2l0aE1hdHJpeG1hdHJpeGV4dGVuZFdpdGhQYXRoX2V4dGVuZFdpdGhQYXRoQW5kTWF0cml4X2V4dGVuZFdpdGhQYXRoUGF0aF9leHRlbmRXaXRoUGF0aFBhdGhfZXh0ZW5kV2l0aFBhdGhBbmRNYXRyaXhQYXRoX2Nsb3NlUGF0aF9yZXNldF9jb250YWluc1BhdGhfY29udGFpbnNfc2hpZnRQYXRoX3NoaWZ0UGF0aF90cmFuc2Zvcm1nZXRCb3VuZHNfZ2V0Qm91bmRzUGF0aF9nZXRCb3VuZHNvcGVyYXRpb25fb3BQYXRoLmNvbWJpbmUoKSBmYWlsZWQuICBUaGlzIG1heSBiZSBkdWUgYW4gaW52YWxpZCBwYXRoOyBpbiBwYXJ0aWN1bGFyLCBjaGVjayBmb3IgTmFOIHZhbHVlcy5QYXRoX29wY29tcHV0ZU1ldHJpY3Nmb3JjZUNsb3NlZFRhbmdlbnR2ZWN0b3Jmcm9tQW5nbGVhbmdsZVBhdGhNZXRyaWNzUGF0aE1ldHJpY0l0ZXJhdG9yX3BhdGhNZXRyaWNfcGF0aE1lYXN1cmVfbmV4dENvbnRvdXJQYXRoTWV0cmljY29udG91ckluZGV4X21lYXN1cmVjdXJyZW50Q29udG91ckluZGV4Z2V0VGFuZ2VudEZvck9mZnNldGV4dHJhY3RQYXRoc3RhcnRXaXRoTW92ZVRve2xlbmd0aDogLCBpc0Nsb3NlZDogLCBjb250b3VySW5kZXg6X1BhdGhNZWFzdXJlUGF0aE1lYXN1cmVfY29uc3RydWN0b3JJdGVyYXRvciBtdXN0IGJlIGFkdmFuY2VkIGJlZm9yZSBpbmRleCAgY2FuIGJlIHVzZWQuUGF0aE1lYXN1cmVfZ2V0TGVuZ3RocG9zVGFuX2dldFBvc1RhblBhdGhNZWFzdXJlX2dldFBvc1Rhbl9leHRyYWN0UGF0aFBhdGhNZWFzdXJlX2dldFNlZ21lbnRQYXRoTWVhc3VyZV9pc0Nsb3NlZF9uYXRpdmVOZXh0Q29udG91clBhdGhNZWFzdXJlX25leHRDb250b3VyQmx1clN0eWxlc29saWRvdXRlcmlubmVyTWFza0ZpbHRlcl9UeXBlTm9uZV9UeXBlQmx1cmJsdXJNYXNrRmlsdGVyLmJsdXIoQ29sb3JGaWx0ZXJfY29sb3JfYmxlbmRNb2RlX21hdHJpeF9UeXBlTW9kZV9UeXBlTWF0cml4X1R5cGVMaW5lYXJUb1NyZ2JHYW1tYV9UeXBlU3JnYlRvTGluZWFyR2FtbWFsaW5lYXJUb1NyZ2JHYW1tYXNyZ2JUb0xpbmVhckdhbW1hQ29sb3IgTWF0cml4IG11c3QgaGF2ZSAyMCBlbnRyaWVzLlVua25vd24gbW9kZSAgZm9yIENvbG9yRmlsdGVyLkNvbG9yRmlsdGVyLm1vZGUoQ29sb3JGaWx0ZXIubWF0cml4KENvbG9yRmlsdGVyLmxpbmVhclRvU3JnYkdhbW1hKClDb2xvckZpbHRlci5zcmdiVG9MaW5lYXJHYW1tYSgpVW5rbm93biBDb2xvckZpbHRlciB0eXBlLiBUaGlzIGlzIGFuIGVycm9yLiBJZiB5b3UncmUgc2VlaW5nIHRoaXMsIHBsZWFzZSBmaWxlIGFuIGlzc3VlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9mbHV0dGVyL2ZsdXR0ZXIvaXNzdWVzL25ldy5fQ29sb3JGaWx0ZXJfaW5pdE1vZGVfaW5pdE1hdHJpeF9pbml0TGluZWFyVG9TcmdiR2FtbWFfaW5pdFNyZ2JUb0xpbmVhckdhbW1hQ29sb3JGaWx0ZXJfY29uc3RydWN0b3JDb2xvckZpbHRlcl9pbml0TW9kZUNvbG9yRmlsdGVyX2luaXRNYXRyaXhDb2xvckZpbHRlcl9pbml0TGluZWFyVG9TcmdiR2FtbWFDb2xvckZpbHRlcl9pbml0U3JnYlRvTGluZWFyR2FtbWFJbWFnZUZpbHRlcl9maWx0ZXJRdWFsaXR5X25hdGl2ZUZpbHRlcl9rVHlwZUJsdXJfa1R5cGVNYXRyaXhzaWdtYVhzaWdtYVkibWF0cml4NCIgbXVzdCBoYXZlIDE2IGVudHJpZXMuX21ha2VMaXN0X21ha2VOYXRpdmVJbWFnZUZpbHRlciBmb3IgSW1hZ2VGaWx0ZXIuSW1hZ2VGaWx0ZXIuYmx1cihJbWFnZUZpbHRlci5tYXRyaXgoVW5rbm93biBJbWFnZUZpbHRlciB0eXBlLiBUaGlzIGlzIGFuIGVycm9yLiBJZiB5b3UncmUgc2VlaW5nIHRoaXMsIHBsZWFzZSBmaWxlIGFuIGlzc3VlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9mbHV0dGVyL2ZsdXR0ZXIvaXNzdWVzL25ldy5fSW1hZ2VGaWx0ZXJfaW5pdEJsdXJJbWFnZUZpbHRlcl9jb25zdHJ1Y3RvckltYWdlRmlsdGVyX2luaXRCbHVySW1hZ2VGaWx0ZXJfaW5pdE1hdHJpeFNoYWRlclRpbGVNb2RlVGlsZU1vZGUuY2xhbXBUaWxlTW9kZS5yZXBlYXRlZFRpbGVNb2RlLm1pcnJvcnJlcGVhdGVkR3JhZGllbnRsaW5lYXJjb2xvcnNjb2xvclN0b3BzdGlsZU1vZGVlbmRQb2ludHNCdWZmZXJjb2xvcnNCdWZmZXJjb2xvclN0b3BzQnVmZmVyX2luaXRMaW5lYXJyYWRpYWxmb2NhbGZvY2FsUmFkaXVzX2luaXRSYWRpYWxfaW5pdENvbmljYWxzd2VlcGVuZEFuZ2xlNi4yODMxODUzMDcxNzk1ODZfaW5pdFN3ZWVwR3JhZGllbnRfY29uc3RydWN0b3JHcmFkaWVudF9pbml0TGluZWFyZW5kUG9pbnRzR3JhZGllbnRfaW5pdFJhZGlhbGNlbnRlclhjZW50ZXJZR3JhZGllbnRfaW5pdFR3b1BvaW50Q29uaWNhbHN0YXJ0WHN0YXJ0WXN0YXJ0UmFkaXVzZW5kWGVuZFllbmRSYWRpdXNHcmFkaWVudF9pbml0U3dlZXBfdmFsaWRhdGVDb2xvclN0b3BzImNvbG9ycyIgbXVzdCBoYXZlIGxlbmd0aCAyIGlmICJjb2xvclN0b3BzIiBpcyBvbWl0dGVkLiJjb2xvcnMiIGFuZCAiY29sb3JTdG9wcyIgYXJndW1lbnRzIG11c3QgaGF2ZSBlcXVhbCBsZW5ndGguSW1hZ2VTaGFkZXJ0bXh0bXlfaW5pdFdpdGhJbWFnZUltYWdlU2hhZGVyX2NvbnN0cnVjdG9ySW1hZ2VTaGFkZXJfaW5pdFdpdGhJbWFnZVZlcnRleE1vZGVWZXJ0ZXhNb2RlLnRyaWFuZ2xlc1ZlcnRleE1vZGUudHJpYW5nbGVTdHJpcFZlcnRleE1vZGUudHJpYW5nbGVGYW50cmlhbmdsZXN0cmlhbmdsZVN0cmlwdHJpYW5nbGVGYW5WZXJ0aWNlc3Bvc2l0aW9uc3RleHR1cmVDb29yZGluYXRlc2luZGljZXMicG9zaXRpb25zIiBhbmQgInRleHR1cmVDb29yZGluYXRlcyIgbGVuZ3RocyBtdXN0IG1hdGNoLiJwb3NpdGlvbnMiIGFuZCAiY29sb3JzIiBsZW5ndGhzIG11c3QgbWF0Y2guImluZGljZXMiIHZhbHVlcyBtdXN0IGJlIHZhbGlkIGluZGljZXMgaW4gdGhlIHBvc2l0aW9ucyBsaXN0LmVuY29kZWRQb3NpdGlvbnNlbmNvZGVkVGV4dHVyZUNvb3JkaW5hdGVzZW5jb2RlZENvbG9yc2VuY29kZWRJbmRpY2VzSW52YWxpZCBjb25maWd1cmF0aW9uIGZvciB2ZXJ0aWNlcy5WZXJ0aWNlc19jb25zdHJ1Y3RvclZlcnRpY2VzX2luaXRQb2ludE1vZGVQb2ludE1vZGUucG9pbnRzUG9pbnRNb2RlLmxpbmVzUG9pbnRNb2RlLnBvbHlnb25wb2x5Z29uQ2xpcE9wQ2xpcE9wLmRpZmZlcmVuY2VDbGlwT3AuaW50ZXJzZWN0Q2FudmFzcmVjb3JkZXJjdWxsUmVjdGlzUmVjb3JkaW5nInJlY29yZGVyIiBtdXN0IG5vdCBhbHJlYWR5IGJlIGFzc29jaWF0ZWQgd2l0aCBhbm90aGVyIENhbnZhcy5DYW52YXNfY29uc3RydWN0b3JzYXZlQ2FudmFzX3NhdmVzYXZlTGF5ZXJwYWludF9zYXZlTGF5ZXJXaXRob3V0Qm91bmRzX3NhdmVMYXllckNhbnZhc19zYXZlTGF5ZXJXaXRob3V0Qm91bmRzcGFpbnRPYmplY3RzcGFpbnREYXRhQ2FudmFzX3NhdmVMYXllcnJlc3RvcmVDYW52YXNfcmVzdG9yZWdldFNhdmVDb3VudENhbnZhc19nZXRTYXZlQ291bnRDYW52YXNfdHJhbnNsYXRlc3hzeV9zY2FsZUNhbnZhc19zY2FsZXJvdGF0ZUNhbnZhc19yb3RhdGVza2V3Q2FudmFzX3NrZXdDYW52YXNfdHJhbnNmb3JtY2xpcFJlY3RjbGlwT3Bkb0FudGlBbGlhc19jbGlwUmVjdENhbnZhc19jbGlwUmVjdGNsaXBSUmVjdF9jbGlwUlJlY3RDYW52YXNfY2xpcFJSZWN0Y2xpcFBhdGhfY2xpcFBhdGhDYW52YXNfY2xpcFBhdGhkcmF3Q29sb3JfZHJhd0NvbG9yQ2FudmFzX2RyYXdDb2xvcmRyYXdMaW5lcDFwMl9kcmF3TGluZUNhbnZhc19kcmF3TGluZWRyYXdQYWludF9kcmF3UGFpbnRDYW52YXNfZHJhd1BhaW50ZHJhd1JlY3RfZHJhd1JlY3RDYW52YXNfZHJhd1JlY3RkcmF3UlJlY3RfZHJhd1JSZWN0Q2FudmFzX2RyYXdSUmVjdGRyYXdEUlJlY3RfZHJhd0RSUmVjdENhbnZhc19kcmF3RFJSZWN0ZHJhd092YWxfZHJhd092YWxDYW52YXNfZHJhd092YWxkcmF3Q2lyY2xlX2RyYXdDaXJjbGVDYW52YXNfZHJhd0NpcmNsZWRyYXdBcmN1c2VDZW50ZXJfZHJhd0FyY0NhbnZhc19kcmF3QXJjZHJhd1BhdGhfZHJhd1BhdGhDYW52YXNfZHJhd1BhdGhkcmF3SW1hZ2VfZHJhd0ltYWdlQ2FudmFzX2RyYXdJbWFnZWRyYXdJbWFnZVJlY3RfZHJhd0ltYWdlUmVjdENhbnZhc19kcmF3SW1hZ2VSZWN0c3JjTGVmdHNyY1RvcHNyY1JpZ2h0c3JjQm90dG9tZHN0TGVmdGRzdFRvcGRzdFJpZ2h0ZHN0Qm90dG9tZHJhd0ltYWdlTmluZV9kcmF3SW1hZ2VOaW5lQ2FudmFzX2RyYXdJbWFnZU5pbmVjZW50ZXJUb3BjZW50ZXJCb3R0b21kcmF3UGljdHVyZV9kcmF3UGljdHVyZUNhbnZhc19kcmF3UGljdHVyZWRyYXdQYXJhZ3JhcGhwYXJhZ3JhcGhfcGFpbnRkcmF3UG9pbnRzcG9pbnRNb2RlX2RyYXdQb2ludHNkcmF3UmF3UG9pbnRzInBvaW50cyIgbXVzdCBoYXZlIGFuIGV2ZW4gbnVtYmVyIG9mIHZhbHVlcy5DYW52YXNfZHJhd1BvaW50c2RyYXdWZXJ0aWNlc3ZlcnRpY2VzX2RyYXdWZXJ0aWNlc0NhbnZhc19kcmF3VmVydGljZXNkcmF3QXRsYXNhdGxhc3RyYW5zZm9ybXNyZWN0c3JlY3RDb3VudCJ0cmFuc2Zvcm1zIiBhbmQgInJlY3RzIiBsZW5ndGhzIG11c3QgbWF0Y2guSWYgbm9uLW51bGwsICJjb2xvcnMiIGxlbmd0aCBtdXN0IG1hdGNoIHRoYXQgb2YgInRyYW5zZm9ybXMiIGFuZCAicmVjdHMiLnJzdFRyYW5zZm9ybUJ1ZmZlcnJlY3RCdWZmZXJpbmRleDByc3RUcmFuc2Zvcm1jb2xvckJ1ZmZlcmN1bGxSZWN0QnVmZmVyX2RyYXdBdGxhc2RyYXdSYXdBdGxhc3JzdFRyYW5zZm9ybXMicnN0VHJhbnNmb3JtcyIgYW5kICJyZWN0cyIgbGVuZ3RocyBtdXN0IG1hdGNoLiJyc3RUcmFuc2Zvcm1zIiBhbmQgInJlY3RzIiBsZW5ndGhzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBmb3VyLklmIG5vbi1udWxsLCAiY29sb3JzIiBsZW5ndGggbXVzdCBiZSBvbmUgZm91cnRoIHRoZSBsZW5ndGggb2YgInJzdFRyYW5zZm9ybXMiIGFuZCAicmVjdHMiLkNhbnZhc19kcmF3QXRsYXNkcmF3U2hhZG93dHJhbnNwYXJlbnRPY2NsdWRlcl9kcmF3U2hhZG93Q2FudmFzX2RyYXdTaGFkb3dQaWN0dXJlUGljdHVyZV90b0ltYWdlUGljdHVyZV9kaXNwb3NlYXBwcm94aW1hdGVCeXRlc1VzZWRQaWN0dXJlX0dldEFsbG9jYXRpb25TaXplUGljdHVyZVJlY29yZGVyUGljdHVyZVJlY29yZGVyX2NvbnN0cnVjdG9yUGljdHVyZVJlY29yZGVyX2lzUmVjb3JkaW5nZW5kUmVjb3JkaW5nUGljdHVyZVJlY29yZGVyX2VuZFJlY29yZGluZ1NoYWRvd19rQnl0ZXNQZXJTaGFkb3dfa1hPZmZzZXRfa1lPZmZzZXRfa0JsdXJPZmZzZXRibHVyUmFkaXVzVGV4dCBzaGFkb3cgY29sb3Igd2FzIG51bGwuVGV4dCBzaGFkb3cgb2Zmc2V0IHdhcyBudWxsLlRleHQgc2hhZG93IGJsdXIgcmFkaXVzIHNob3VsZCBiZSBub24tbmVnYXRpdmUuY29udmVydFJhZGl1c1RvU2lnbWFibHVyU2lnbWF0b1BhaW50bGVycExpc3Rjb21tb25MZW5ndGhfZW5jb2RlU2hhZG93c3NoYWRvd3NzaGFkb3dzRGF0YXNoYWRvd09mZnNldHNoYWRvd0luZGV4c2hhZG93VGV4dFNoYWRvdyhDYWxsYmFja0hhbmRsZWZyb21SYXdIYW5kbGUnX2hhbmRsZScgbXVzdCBub3QgYmUgbnVsbC50b1Jhd0hhbmRsZVBsdWdpblV0aWxpdGllc19mb3J3YXJkQ2FjaGVfYmFja3dhcmRDYWNoZWdldENhbGxiYWNrSGFuZGxlJ2NhbGxiYWNrJyBtdXN0IG5vdCBiZSBudWxsLmdldENhbGxiYWNrRnJvbUhhbmRsZSdoYW5kbGUnIG11c3Qgbm90IGJlIG51bGwuUG9pbnRlckNoYW5nZVBvaW50ZXJDaGFuZ2UuY2FuY2VsUG9pbnRlckNoYW5nZS5hZGRQb2ludGVyQ2hhbmdlLnJlbW92ZVBvaW50ZXJDaGFuZ2UuaG92ZXJQb2ludGVyQ2hhbmdlLmRvd25Qb2ludGVyQ2hhbmdlLm1vdmVQb2ludGVyQ2hhbmdlLnVwaG92ZXJkb3dudXBQb2ludGVyRGV2aWNlS2luZFBvaW50ZXJEZXZpY2VLaW5kLnRvdWNoUG9pbnRlckRldmljZUtpbmQubW91c2VQb2ludGVyRGV2aWNlS2luZC5zdHlsdXNQb2ludGVyRGV2aWNlS2luZC5pbnZlcnRlZFN0eWx1c1BvaW50ZXJEZXZpY2VLaW5kLnVua25vd250b3VjaG1vdXNlc3R5bHVzaW52ZXJ0ZWRTdHlsdXNQb2ludGVyU2lnbmFsS2luZFBvaW50ZXJTaWduYWxLaW5kLm5vbmVQb2ludGVyU2lnbmFsS2luZC5zY3JvbGxQb2ludGVyU2lnbmFsS2luZC51bmtub3duc2Nyb2xsUG9pbnRlckRhdGF0aW1lU3RhbXBzaWduYWxLaW5kZGV2aWNlcG9pbnRlcklkZW50aWZpZXJwaHlzaWNhbFhwaHlzaWNhbFlwaHlzaWNhbERlbHRhWHBoeXNpY2FsRGVsdGFZYnV0dG9uc29ic2N1cmVkc3ludGhlc2l6ZWRwcmVzc3VyZXByZXNzdXJlTWlucHJlc3N1cmVNYXhkaXN0YW5jZU1heHJhZGl1c01ham9ycmFkaXVzTWlub3JyYWRpdXNNaW5yYWRpdXNNYXhvcmllbnRhdGlvbnRpbHRwbGF0Zm9ybURhdGFzY3JvbGxEZWx0YVhzY3JvbGxEZWx0YVlQb2ludGVyRGF0YSh4OiAsIHk6IHRvU3RyaW5nRnVsbHRpbWVTdGFtcDogY2hhbmdlOiBraW5kOiBzaWduYWxLaW5kOiBkZXZpY2U6IHBvaW50ZXJJZGVudGlmaWVyOiBwaHlzaWNhbFg6IHBoeXNpY2FsWTogcGh5c2ljYWxEZWx0YVg6IHBoeXNpY2FsRGVsdGFZOiBidXR0b25zOiBzeW50aGVzaXplZDogcHJlc3N1cmU6IHByZXNzdXJlTWluOiBwcmVzc3VyZU1heDogZGlzdGFuY2U6IGRpc3RhbmNlTWF4OiBzaXplOiByYWRpdXNNYWpvcjogcmFkaXVzTWlub3I6IHJhZGl1c01pbjogcmFkaXVzTWF4OiBvcmllbnRhdGlvbjogdGlsdDogcGxhdGZvcm1EYXRhOiBzY3JvbGxEZWx0YVg6IHNjcm9sbERlbHRhWTogUG9pbnRlckRhdGFQYWNrZXRTZW1hbnRpY3NBY3Rpb25fa1RhcEluZGV4X2tMb25nUHJlc3NJbmRleF9rU2Nyb2xsTGVmdEluZGV4X2tTY3JvbGxSaWdodEluZGV4X2tTY3JvbGxVcEluZGV4X2tTY3JvbGxEb3duSW5kZXhfa0luY3JlYXNlSW5kZXhfa0RlY3JlYXNlSW5kZXhfa1Nob3dPblNjcmVlbkluZGV4X2tNb3ZlQ3Vyc29yRm9yd2FyZEJ5Q2hhcmFjdGVySW5kZXhfa01vdmVDdXJzb3JCYWNrd2FyZEJ5Q2hhcmFjdGVySW5kZXhfa1NldFNlbGVjdGlvbkluZGV4X2tDb3B5SW5kZXhfa0N1dEluZGV4X2tQYXN0ZUluZGV4X2tEaWRHYWluQWNjZXNzaWJpbGl0eUZvY3VzSW5kZXhfa0RpZExvc2VBY2Nlc3NpYmlsaXR5Rm9jdXNJbmRleF9rQ3VzdG9tQWN0aW9uX2tEaXNtaXNzSW5kZXhfa01vdmVDdXJzb3JGb3J3YXJkQnlXb3JkSW5kZXhfa01vdmVDdXJzb3JCYWNrd2FyZEJ5V29yZEluZGV4dGFwbG9uZ1ByZXNzc2Nyb2xsTGVmdHNjcm9sbFJpZ2h0c2Nyb2xsVXBzY3JvbGxEb3duaW5jcmVhc2VkZWNyZWFzZXNob3dPblNjcmVlbm1vdmVDdXJzb3JGb3J3YXJkQnlDaGFyYWN0ZXJtb3ZlQ3Vyc29yQmFja3dhcmRCeUNoYXJhY3RlcnNldFNlbGVjdGlvbmN1dHBhc3RlZGlkR2FpbkFjY2Vzc2liaWxpdHlGb2N1c2RpZExvc2VBY2Nlc3NpYmlsaXR5Rm9jdXNjdXN0b21BY3Rpb25kaXNtaXNzbW92ZUN1cnNvckZvcndhcmRCeVdvcmRtb3ZlQ3Vyc29yQmFja3dhcmRCeVdvcmRTZW1hbnRpY3NBY3Rpb24udGFwU2VtYW50aWNzQWN0aW9uLmxvbmdQcmVzc1NlbWFudGljc0FjdGlvbi5zY3JvbGxMZWZ0U2VtYW50aWNzQWN0aW9uLnNjcm9sbFJpZ2h0U2VtYW50aWNzQWN0aW9uLnNjcm9sbFVwU2VtYW50aWNzQWN0aW9uLnNjcm9sbERvd25TZW1hbnRpY3NBY3Rpb24uaW5jcmVhc2VTZW1hbnRpY3NBY3Rpb24uZGVjcmVhc2VTZW1hbnRpY3NBY3Rpb24uc2hvd09uU2NyZWVuU2VtYW50aWNzQWN0aW9uLm1vdmVDdXJzb3JGb3J3YXJkQnlDaGFyYWN0ZXJTZW1hbnRpY3NBY3Rpb24ubW92ZUN1cnNvckJhY2t3YXJkQnlDaGFyYWN0ZXJTZW1hbnRpY3NBY3Rpb24uc2V0U2VsZWN0aW9uU2VtYW50aWNzQWN0aW9uLmNvcHlTZW1hbnRpY3NBY3Rpb24uY3V0U2VtYW50aWNzQWN0aW9uLnBhc3RlU2VtYW50aWNzQWN0aW9uLmRpZEdhaW5BY2Nlc3NpYmlsaXR5Rm9jdXNTZW1hbnRpY3NBY3Rpb24uZGlkTG9zZUFjY2Vzc2liaWxpdHlGb2N1c1NlbWFudGljc0FjdGlvbi5jdXN0b21BY3Rpb25TZW1hbnRpY3NBY3Rpb24uZGlzbWlzc1NlbWFudGljc0FjdGlvbi5tb3ZlQ3Vyc29yRm9yd2FyZEJ5V29yZFNlbWFudGljc0FjdGlvbi5tb3ZlQ3Vyc29yQmFja3dhcmRCeVdvcmRTZW1hbnRpY3NGbGFnX2tIYXNDaGVja2VkU3RhdGVJbmRleF9rSXNDaGVja2VkSW5kZXhfa0lzU2VsZWN0ZWRJbmRleF9rSXNCdXR0b25JbmRleF9rSXNUZXh0RmllbGRJbmRleF9rSXNGb2N1c2VkSW5kZXhfa0hhc0VuYWJsZWRTdGF0ZUluZGV4X2tJc0VuYWJsZWRJbmRleF9rSXNJbk11dHVhbGx5RXhjbHVzaXZlR3JvdXBJbmRleF9rSXNIZWFkZXJJbmRleF9rSXNPYnNjdXJlZEluZGV4X2tTY29wZXNSb3V0ZUluZGV4X2tOYW1lc1JvdXRlSW5kZXhfa0lzSGlkZGVuSW5kZXhfa0lzSW1hZ2VJbmRleF9rSXNMaXZlUmVnaW9uSW5kZXhfa0hhc1RvZ2dsZWRTdGF0ZUluZGV4X2tJc1RvZ2dsZWRJbmRleF9rSGFzSW1wbGljaXRTY3JvbGxpbmdJbmRleF9rSXNNdWx0aWxpbmVJbmRleF9rSXNSZWFkT25seUluZGV4X2tJc0ZvY3VzYWJsZUluZGV4X2tJc0xpbmtJbmRleGhhc0NoZWNrZWRTdGF0ZWlzQ2hlY2tlZGlzU2VsZWN0ZWRpc0J1dHRvbmlzVGV4dEZpZWxkaXNSZWFkT25seWlzRm9jdXNhYmxlaXNGb2N1c2VkaGFzRW5hYmxlZFN0YXRlaXNFbmFibGVkaXNJbk11dHVhbGx5RXhjbHVzaXZlR3JvdXBpc0hlYWRlcmlzT2JzY3VyZWRpc011bHRpbGluZXNjb3Blc1JvdXRlbmFtZXNSb3V0ZWlzSGlkZGVuaXNJbWFnZWlzTGl2ZVJlZ2lvbmhhc1RvZ2dsZWRTdGF0ZWlzVG9nZ2xlZGhhc0ltcGxpY2l0U2Nyb2xsaW5nU2VtYW50aWNzRmxhZy5oYXNDaGVja2VkU3RhdGVTZW1hbnRpY3NGbGFnLmlzQ2hlY2tlZFNlbWFudGljc0ZsYWcuaXNTZWxlY3RlZFNlbWFudGljc0ZsYWcuaXNCdXR0b25TZW1hbnRpY3NGbGFnLmlzVGV4dEZpZWxkU2VtYW50aWNzRmxhZy5pc0ZvY3VzZWRTZW1hbnRpY3NGbGFnLmhhc0VuYWJsZWRTdGF0ZVNlbWFudGljc0ZsYWcuaXNFbmFibGVkU2VtYW50aWNzRmxhZy5pc0luTXV0dWFsbHlFeGNsdXNpdmVHcm91cFNlbWFudGljc0ZsYWcuaXNIZWFkZXJTZW1hbnRpY3NGbGFnLmlzT2JzY3VyZWRTZW1hbnRpY3NGbGFnLnNjb3Blc1JvdXRlU2VtYW50aWNzRmxhZy5uYW1lc1JvdXRlU2VtYW50aWNzRmxhZy5pc0hpZGRlblNlbWFudGljc0ZsYWcuaXNJbWFnZVNlbWFudGljc0ZsYWcuaXNMaXZlUmVnaW9uU2VtYW50aWNzRmxhZy5oYXNUb2dnbGVkU3RhdGVTZW1hbnRpY3NGbGFnLmlzVG9nZ2xlZFNlbWFudGljc0ZsYWcuaGFzSW1wbGljaXRTY3JvbGxpbmdTZW1hbnRpY3NGbGFnLmlzTXVsdGlsaW5lU2VtYW50aWNzRmxhZy5pc1JlYWRPbmx5U2VtYW50aWNzRmxhZy5pc0ZvY3VzYWJsZVNlbWFudGljc0ZsYWcuaXNMaW5rU2VtYW50aWNzVXBkYXRlQnVpbGRlclNlbWFudGljc1VwZGF0ZUJ1aWxkZXJfY29uc3RydWN0b3J1cGRhdGVOb2RlYWN0aW9uc21heFZhbHVlTGVuZ3RoY3VycmVudFZhbHVlTGVuZ3RodGV4dFNlbGVjdGlvbkJhc2V0ZXh0U2VsZWN0aW9uRXh0ZW50cGxhdGZvcm1WaWV3SWRzY3JvbGxDaGlsZHJlbnNjcm9sbEluZGV4c2Nyb2xsUG9zaXRpb25zY3JvbGxFeHRlbnRNYXhzY3JvbGxFeHRlbnRNaW50aGlja25lc3NoaW50aW5jcmVhc2VkVmFsdWVkZWNyZWFzZWRWYWx1ZXRleHREaXJlY3Rpb25jaGlsZHJlbkluVHJhdmVyc2FsT3JkZXJjaGlsZHJlbkluSGl0VGVzdE9yZGVyYWRkaXRpb25hbEFjdGlvbnNJZiBhIG5vZGUgaGFzIHNjcm9sbENoaWxkcmVuLCBpdCBtdXN0IGhhdmUgY2hpbGRyZW5JbkhpdFRlc3RPcmRlcl91cGRhdGVOb2RlU2VtYW50aWNzVXBkYXRlQnVpbGRlcl91cGRhdGVOb2RldXBkYXRlQ3VzdG9tQWN0aW9ub3ZlcnJpZGVJZF91cGRhdGVDdXN0b21BY3Rpb25TZW1hbnRpY3NVcGRhdGVCdWlsZGVyX3VwZGF0ZUN1c3RvbUFjdGlvblNlbWFudGljc1VwZGF0ZUJ1aWxkZXJfYnVpbGRTZW1hbnRpY3NVcGRhdGVTZW1hbnRpY3NVcGRhdGVfZGlzcG9zZUZvbnRTdHlsZUZvbnRTdHlsZS5ub3JtYWxGb250U3R5bGUuaXRhbGljaXRhbGljRm9udFdlaWdodHcxMDB3MjAwdzMwMHc0MDB3NTAwdzYwMHc3MDB3ODAwdzkwMGJvbGRGb250V2VpZ2h0LncxMDBGb250V2VpZ2h0LncyMDBGb250V2VpZ2h0LnczMDBGb250V2VpZ2h0Lnc0MDBGb250V2VpZ2h0Lnc1MDBGb250V2VpZ2h0Lnc2MDBGb250V2VpZ2h0Lnc3MDBGb250V2VpZ2h0Lnc4MDBGb250V2VpZ2h0Lnc5MDBGb250RmVhdHVyZWZlYXR1cmVfa0VuY29kZWRTaXplZGlzYWJsZXJhbmRvbWl6ZXJhbmRzbGFzaGVkWmVyb29sZHN0eWxlRmlndXJlc29udW1wcm9wb3J0aW9uYWxGaWd1cmVzcG51bXRhYnVsYXJGaWd1cmVzdG51bXN0eWxpc3RpY1NldHNzX2VuY29kZWJ5dGVEYXRhRm9udEZlYXR1cmUoVGV4dEFsaWduVGV4dEFsaWduLmxlZnRUZXh0QWxpZ24ucmlnaHRUZXh0QWxpZ24uY2VudGVyVGV4dEFsaWduLmp1c3RpZnlUZXh0QWxpZ24uc3RhcnRUZXh0QWxpZ24uZW5kanVzdGlmeVRleHRCYXNlbGluZVRleHRCYXNlbGluZS5hbHBoYWJldGljVGV4dEJhc2VsaW5lLmlkZW9ncmFwaGljYWxwaGFiZXRpY2lkZW9ncmFwaGljVGV4dERlY29yYXRpb25fbWFza3VuZGVybGluZW92ZXJsaW5lbGluZVRocm91Z2hkZWNvcmF0aW9uc2RlY29yYXRpb25UZXh0RGVjb3JhdGlvbi5ub25lVGV4dERlY29yYXRpb24uVGV4dERlY29yYXRpb24uY29tYmluZShbXSlUZXh0RGVjb3JhdGlvblN0eWxlVGV4dERlY29yYXRpb25TdHlsZS5zb2xpZFRleHREZWNvcmF0aW9uU3R5bGUuZG91YmxlVGV4dERlY29yYXRpb25TdHlsZS5kb3R0ZWRUZXh0RGVjb3JhdGlvblN0eWxlLmRhc2hlZFRleHREZWNvcmF0aW9uU3R5bGUud2F2eWRvdWJsZWRvdHRlZGRhc2hlZHdhdnlUZXh0SGVpZ2h0QmVoYXZpb3JhcHBseUhlaWdodFRvRmlyc3RBc2NlbnRhcHBseUhlaWdodFRvTGFzdERlc2NlbnRmcm9tRW5jb2RlZFRleHRIZWlnaHRCZWhhdmlvcihhcHBseUhlaWdodFRvRmlyc3RBc2NlbnQ6IGFwcGx5SGVpZ2h0VG9MYXN0RGVzY2VudDogVGV4dFN0eWxlX2VuY29kZWRfZm9udEZhbWlseV9mb250RmFtaWx5RmFsbGJhY2tfZm9udFNpemVfbGV0dGVyU3BhY2luZ193b3JkU3BhY2luZ19kZWNvcmF0aW9uVGhpY2tuZXNzX2xvY2FsZV9iYWNrZ3JvdW5kX2ZvcmVncm91bmRfc2hhZG93c19mb250RmVhdHVyZXNkZWNvcmF0aW9uQ29sb3JkZWNvcmF0aW9uU3R5bGVkZWNvcmF0aW9uVGhpY2tuZXNzZm9udFdlaWdodGZvbnRTdHlsZXRleHRCYXNlbGluZWZvbnRGYW1pbHlmb250RmFtaWx5RmFsbGJhY2tmb250U2l6ZWxldHRlclNwYWNpbmd3b3JkU3BhY2luZ2xvY2FsZWZvbnRGZWF0dXJlc0Nhbm5vdCBwcm92aWRlIGJvdGggYSBjb2xvciBhbmQgYSBmb3JlZ3JvdW5kClRoZSBjb2xvciBhcmd1bWVudCBpcyBqdXN0IGEgc2hvcnRoYW5kIGZvciAiZm9yZWdyb3VuZDogUGFpbnQoKS4uY29sb3IgPSBjb2xvciIuVGV4dFN0eWxlKGNvbG9yOiB1bnNwZWNpZmllZGRlY29yYXRpb246IGRlY29yYXRpb25Db2xvcjogZGVjb3JhdGlvblN0eWxlOiBkZWNvcmF0aW9uVGhpY2tuZXNzOiBmb250V2VpZ2h0OiBmb250U3R5bGU6IHRleHRCYXNlbGluZTogZm9udEZhbWlseTogZm9udEZhbWlseUZhbGxiYWNrOiBmb250U2l6ZTogbGV0dGVyU3BhY2luZzogd29yZFNwYWNpbmc6IGhlaWdodDogbG9jYWxlOiBiYWNrZ3JvdW5kOiBmb3JlZ3JvdW5kOiBzaGFkb3dzOiBmb250RmVhdHVyZXM6IFBhcmFncmFwaFN0eWxlX3N0cnV0U3R5bGVfZWxsaXBzaXN0ZXh0QWxpZ25tYXhMaW5lc3RleHRIZWlnaHRCZWhhdmlvcnN0cnV0U3R5bGVlbGxpcHNpc1BhcmFncmFwaFN0eWxlKHRleHRBbGlnbjogdGV4dERpcmVjdGlvbjogVGV4dERpcmVjdGlvbi5ydGxUZXh0RGlyZWN0aW9uLmx0cm1heExpbmVzOiB0ZXh0SGVpZ2h0QmVoYXZpb3I6IGVsbGlwc2lzOiBTdHJ1dFN0eWxlbGVhZGluZ2ZvcmNlU3RydXRIZWlnaHRUZXh0RGlyZWN0aW9ucnRsbHRyVGV4dEJveGZyb21MVFJCRGRpcmVjdGlvbkluZGV4dG9SZWN0VGV4dEJveC5mcm9tTFRSQkQoVGV4dEFmZmluaXR5VGV4dEFmZmluaXR5LnVwc3RyZWFtVGV4dEFmZmluaXR5LmRvd25zdHJlYW11cHN0cmVhbWRvd25zdHJlYW1UZXh0UG9zaXRpb25hZmZpbml0eVRleHRQb3NpdGlvbihvZmZzZXQ6ICwgYWZmaW5pdHk6IFRleHRSYW5nZWNvbGxhcHNlZGlzQ29sbGFwc2VkaXNOb3JtYWxpemVkdGV4dEJlZm9yZXRleHRBZnRlcnRleHRJbnNpZGVUZXh0UmFuZ2Uoc3RhcnQ6ICwgZW5kOiBQYXJhZ3JhcGhDb25zdHJhaW50c1BhcmFncmFwaENvbnN0cmFpbnRzKHdpZHRoOiBCb3hIZWlnaHRTdHlsZUJveEhlaWdodFN0eWxlLnRpZ2h0Qm94SGVpZ2h0U3R5bGUubWF4Qm94SGVpZ2h0U3R5bGUuaW5jbHVkZUxpbmVTcGFjaW5nTWlkZGxlQm94SGVpZ2h0U3R5bGUuaW5jbHVkZUxpbmVTcGFjaW5nVG9wQm94SGVpZ2h0U3R5bGUuaW5jbHVkZUxpbmVTcGFjaW5nQm90dG9tQm94SGVpZ2h0U3R5bGUuc3RydXR0aWdodGluY2x1ZGVMaW5lU3BhY2luZ01pZGRsZWluY2x1ZGVMaW5lU3BhY2luZ1RvcGluY2x1ZGVMaW5lU3BhY2luZ0JvdHRvbXN0cnV0Qm94V2lkdGhTdHlsZUJveFdpZHRoU3R5bGUudGlnaHRCb3hXaWR0aFN0eWxlLm1heFBsYWNlaG9sZGVyQWxpZ25tZW50UGxhY2Vob2xkZXJBbGlnbm1lbnQuYmFzZWxpbmVQbGFjZWhvbGRlckFsaWdubWVudC5hYm92ZUJhc2VsaW5lUGxhY2Vob2xkZXJBbGlnbm1lbnQuYmVsb3dCYXNlbGluZVBsYWNlaG9sZGVyQWxpZ25tZW50LnRvcFBsYWNlaG9sZGVyQWxpZ25tZW50LmJvdHRvbVBsYWNlaG9sZGVyQWxpZ25tZW50Lm1pZGRsZWJhc2VsaW5lYWJvdmVCYXNlbGluZWJlbG93QmFzZWxpbmVtaWRkbGVMaW5lTWV0cmljc2hhcmRCcmVha2FzY2VudGRlc2NlbnR1bnNjYWxlZEFzY2VudGxpbmVOdW1iZXJQYXJhZ3JhcGhQYXJhZ3JhcGhfd2lkdGhQYXJhZ3JhcGhfaGVpZ2h0bG9uZ2VzdExpbmVQYXJhZ3JhcGhfbG9uZ2VzdExpbmVtaW5JbnRyaW5zaWNXaWR0aFBhcmFncmFwaF9taW5JbnRyaW5zaWNXaWR0aG1heEludHJpbnNpY1dpZHRoUGFyYWdyYXBoX21heEludHJpbnNpY1dpZHRoYWxwaGFiZXRpY0Jhc2VsaW5lUGFyYWdyYXBoX2FscGhhYmV0aWNCYXNlbGluZWlkZW9ncmFwaGljQmFzZWxpbmVQYXJhZ3JhcGhfaWRlb2dyYXBoaWNCYXNlbGluZWRpZEV4Y2VlZE1heExpbmVzUGFyYWdyYXBoX2RpZEV4Y2VlZE1heExpbmVzbGF5b3V0Y29uc3RyYWludHNfbGF5b3V0UGFyYWdyYXBoX2xheW91dGdldEJveGVzRm9yUmFuZ2Vib3hIZWlnaHRTdHlsZWJveFdpZHRoU3R5bGVfZ2V0Qm94ZXNGb3JSYW5nZVBhcmFncmFwaF9nZXRSZWN0c0ZvclJhbmdlZ2V0Qm94ZXNGb3JQbGFjZWhvbGRlcnNQYXJhZ3JhcGhfZ2V0UmVjdHNGb3JQbGFjZWhvbGRlcnNnZXRQb3NpdGlvbkZvck9mZnNldF9nZXRQb3NpdGlvbkZvck9mZnNldFBhcmFncmFwaF9nZXRQb3NpdGlvbkZvck9mZnNldGdldFdvcmRCb3VuZGFyeWJvdW5kYXJ5X2dldFdvcmRCb3VuZGFyeVBhcmFncmFwaF9nZXRXb3JkQm91bmRhcnlnZXRMaW5lQm91bmRhcnlfZ2V0TGluZUJvdW5kYXJ5UGFyYWdyYXBoX2dldExpbmVCb3VuZGFyeVBhcmFncmFwaF9wYWludGNhbnZhc2NvbXB1dGVMaW5lTWV0cmljc1BhcmFncmFwaF9jb21wdXRlTGluZU1ldHJpY3NQYXJhZ3JhcGhCdWlsZGVyX3BsYWNlaG9sZGVyQ291bnRfcGxhY2Vob2xkZXJTY2FsZXNzdHJ1dEZvbnRGYW1pbGllc1BhcmFncmFwaEJ1aWxkZXJfY29uc3RydWN0b3JzdHJ1dERhdGFzdHJ1dEZvbnRGYW1pbHlwbGFjZWhvbGRlckNvdW50cGxhY2Vob2xkZXJTY2FsZXNwdXNoU3R5bGVmdWxsRm9udEZhbWlsaWVzZW5jb2RlZEZvbnRGZWF0dXJlc19wdXNoU3R5bGVQYXJhZ3JhcGhCdWlsZGVyX3B1c2hTdHlsZWZvbnRGYW1pbGllc2JhY2tncm91bmRPYmplY3RzYmFja2dyb3VuZERhdGFmb3JlZ3JvdW5kT2JqZWN0c2ZvcmVncm91bmREYXRhZm9udEZlYXR1cmVzRGF0YV9lbmNvZGVMb2NhbGVQYXJhZ3JhcGhCdWlsZGVyX3BvcGFkZFRleHRfYWRkVGV4dFBhcmFncmFwaEJ1aWxkZXJfYWRkVGV4dGFkZFBsYWNlaG9sZGVyYmFzZWxpbmVPZmZzZXRfYWRkUGxhY2Vob2xkZXJQYXJhZ3JhcGhCdWlsZGVyX2FkZFBsYWNlaG9sZGVyUGFyYWdyYXBoQnVpbGRlcl9idWlsZEZyYW1lUGhhc2VGcmFtZVBoYXNlLmJ1aWxkU3RhcnRGcmFtZVBoYXNlLmJ1aWxkRmluaXNoRnJhbWVQaGFzZS5yYXN0ZXJTdGFydEZyYW1lUGhhc2UucmFzdGVyRmluaXNoYnVpbGRTdGFydGJ1aWxkRmluaXNocmFzdGVyU3RhcnRyYXN0ZXJGaW5pc2hGcmFtZVRpbWluZ190aW1lc3RhbXBzdGltZXN0YW1wc3RpbWVzdGFtcEluTWljcm9zZWNvbmRzX3Jhd0R1cmF0aW9ubWljcm9zZWNvbmRzYnVpbGREdXJhdGlvbnJhc3RlckR1cmF0aW9udG90YWxTcGFuX2Zvcm1hdE1TaW5NaWNyb3NlY29uZHMoYnVpbGREdXJhdGlvbjogLCByYXN0ZXJEdXJhdGlvbjogLCB0b3RhbFNwYW46IEFwcExpZmVjeWNsZVN0YXRlQXBwTGlmZWN5Y2xlU3RhdGUucmVzdW1lZEFwcExpZmVjeWNsZVN0YXRlLmluYWN0aXZlQXBwTGlmZWN5Y2xlU3RhdGUucGF1c2VkQXBwTGlmZWN5Y2xlU3RhdGUuZGV0YWNoZWRyZXN1bWVkaW5hY3RpdmVXaW5kb3dQYWRkaW5nV2luZG93UGFkZGluZyhsZWZ0OiAsIHRvcDogLCByaWdodDogLCBib3R0b206IExvY2FsZV9sYW5ndWFnZUNvZGVfZGVwcmVjYXRlZExhbmd1YWdlU3VidGFnTWFwaW5pd2hlaml5aWp3anZtb3JvYWFtYWFzYWRwZHphdWVrdHpheXhudW5iZ21iY2diamRkcmxjY3Fya2ljanJtb21ja2FjbXJjbWt4Y2hjb3lwaWpjcXVxdWhkcmhraGtkcndwcnNnYXZkZXZnZnh2YWpnZ25ndnJndGlueWNndXZkdXpocnJqYWxpYmlvcGFpbHdnYWxqZWdveWJrZ2N0ZGZrZ2hrbWxrb2prd3Zrcm1ibWZrdHJkdHBrdnNnZGprd3F5YW1reGV0dmRremprenRsaWlyYXFsbW1ybXhtZWdjaXJtc3Rtcnltd2pteXRuYWR4bnluY3BrZHpubnhuZ3ZudHNvdW5wY3JhZHhwbWNodXdwbXVwaHJwcGFiZnlwcHJsY3FwcnlwcnRwdXpwdWJzY2FobGVza2t0ZHV0aGN0cG90aHh0aWVyYXN0a2t0d210bHd3ZW90eWp0bmVrYWt0bmZ0c2Z0YWp1b2tlbWF4YmFjYXh4aWFhY254a2h3YXd4c2pzdWp5YmR5bWFscnJ5bXRtdG15b3N6b215dXV5dWdzY3JpcHRDb2RlX2NvdW50cnlDb2RlX2RlcHJlY2F0ZWRSZWdpb25TdWJ0YWdNYXBCVU1NRERERUZYRlJUUFRMWURZRVpSQ0RfY2FjaGVkTG9jYWxlX2NhY2hlZExvY2FsZVN0cmluZ2Zyb21TdWJ0YWdzbGFuZ3VhZ2VDb2RldW5kY291bnRyeUNvZGVfcmF3VG9TdHJpbmd0b0xhbmd1YWdlVGFnV2luZG93X2RldmljZVBpeGVsUmF0aW9fcGh5c2ljYWxTaXplX3BoeXNpY2FsRGVwdGgxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOF92aWV3SW5zZXRzX3ZpZXdQYWRkaW5nX3N5c3RlbUdlc3R1cmVJbnNldHNfb25NZXRyaWNzQ2hhbmdlZF9vbk1ldHJpY3NDaGFuZ2VkWm9uZV9sb2NhbGVzX29uTG9jYWxlQ2hhbmdlZF9vbkxvY2FsZUNoYW5nZWRab25lX2luaXRpYWxMaWZlY3ljbGVTdGF0ZV9pbml0aWFsTGlmZWN5Y2xlU3RhdGVBY2Nlc3NlZF90ZXh0U2NhbGVGYWN0b3JfYWx3YXlzVXNlMjRIb3VyRm9ybWF0X29uVGV4dFNjYWxlRmFjdG9yQ2hhbmdlZF9vblRleHRTY2FsZUZhY3RvckNoYW5nZWRab25lX3BsYXRmb3JtQnJpZ2h0bmVzc0JyaWdodG5lc3MubGlnaHRfb25QbGF0Zm9ybUJyaWdodG5lc3NDaGFuZ2VkX29uUGxhdGZvcm1CcmlnaHRuZXNzQ2hhbmdlZFpvbmVfb25CZWdpbkZyYW1lX29uQmVnaW5GcmFtZVpvbmVfb25EcmF3RnJhbWVfb25EcmF3RnJhbWVab25lX29uUmVwb3J0VGltaW5nc19vblJlcG9ydFRpbWluZ3Nab25lX3NldE5lZWRzUmVwb3J0VGltaW5nc19vblBvaW50ZXJEYXRhUGFja2V0X29uUG9pbnRlckRhdGFQYWNrZXRab25lX3NlbWFudGljc0VuYWJsZWRfb25TZW1hbnRpY3NFbmFibGVkQ2hhbmdlZF9vblNlbWFudGljc0VuYWJsZWRDaGFuZ2VkWm9uZV9vblNlbWFudGljc0FjdGlvbl9vblNlbWFudGljc0FjdGlvblpvbmVfYWNjZXNzaWJpbGl0eUZlYXR1cmVzX29uQWNjZXNzaWJpbGl0eUZlYXR1cmVzQ2hhbmdlZF9vbkFjY2Vzc2liaWxpdHlGbGFnc0NoYW5nZWRab25lX29uUGxhdGZvcm1NZXNzYWdlX29uUGxhdGZvcm1NZXNzYWdlWm9uZV9uYXRpdmVTZXROZWVkc1JlcG9ydFRpbWluZ3NkZXZpY2VQaXhlbFJhdGlvcGh5c2ljYWxTaXplcGh5c2ljYWxEZXB0aHZpZXdJbnNldHN2aWV3UGFkZGluZ3N5c3RlbUdlc3R1cmVJbnNldHNvbk1ldHJpY3NDaGFuZ2VkbG9jYWxlc29uTG9jYWxlQ2hhbmdlZGluaXRpYWxMaWZlY3ljbGVTdGF0ZXRleHRTY2FsZUZhY3RvcmFsd2F5c1VzZTI0SG91ckZvcm1hdG9uVGV4dFNjYWxlRmFjdG9yQ2hhbmdlZHBsYXRmb3JtQnJpZ2h0bmVzc29uUGxhdGZvcm1CcmlnaHRuZXNzQ2hhbmdlZG9uQmVnaW5GcmFtZW9uRHJhd0ZyYW1lb25SZXBvcnRUaW1pbmdzV2luZG93X3NldE5lZWRzUmVwb3J0VGltaW5nc29uUG9pbnRlckRhdGFQYWNrZXRkZWZhdWx0Um91dGVOYW1lX2RlZmF1bHRSb3V0ZU5hbWVXaW5kb3dfZGVmYXVsdFJvdXRlTmFtZXNjaGVkdWxlRnJhbWVXaW5kb3dfc2NoZWR1bGVGcmFtZXJlbmRlcldpbmRvd19yZW5kZXJzY2VuZXNlbWFudGljc0VuYWJsZWRvblNlbWFudGljc0VuYWJsZWRDaGFuZ2Vkb25TZW1hbnRpY3NBY3Rpb25hY2Nlc3NpYmlsaXR5RmVhdHVyZXNvbkFjY2Vzc2liaWxpdHlGZWF0dXJlc0NoYW5nZWR1cGRhdGVTZW1hbnRpY3NXaW5kb3dfdXBkYXRlU2VtYW50aWNzc2V0SXNvbGF0ZURlYnVnTmFtZVdpbmRvd19zZXRJc29sYXRlRGVidWdOYW1lc2VuZFBsYXRmb3JtTWVzc2FnZV9zZW5kUGxhdGZvcm1NZXNzYWdlV2luZG93X3NlbmRQbGF0Zm9ybU1lc3NhZ2VvblBsYXRmb3JtTWVzc2FnZV9yZXNwb25kVG9QbGF0Zm9ybU1lc3NhZ2VXaW5kb3dfcmVzcG9uZFRvUGxhdGZvcm1NZXNzYWdlcmVzcG9uc2VJZF96b25lZFBsYXRmb3JtTWVzc2FnZVJlc3BvbnNlQ2FsbGJhY2tyZWdpc3RyYXRpb25ab25lZ2V0UGVyc2lzdGVudElzb2xhdGVEYXRhV2luZG93X2dldFBlcnNpc3RlbnRJc29sYXRlRGF0YUFjY2Vzc2liaWxpdHlGZWF0dXJlc19rQWNjZXNzaWJsZU5hdmlnYXRpb25fa0ludmVydENvbG9yc0luZGV4X2tEaXNhYmxlQW5pbWF0aW9uc0luZGV4X2tCb2xkVGV4dEluZGV4X2tSZWR1Y2VNb3Rpb25JbmRleGFjY2Vzc2libGVOYXZpZ2F0aW9uZGlzYWJsZUFuaW1hdGlvbnNib2xkVGV4dHJlZHVjZU1vdGlvbmZlYXR1cmVzQnJpZ2h0bmVzc0JyaWdodG5lc3MuZGFya2RhcmtsaWdodGNoYW5uZWxCdWZmZXJzX2hhc2hFbmRfa1BvaW50ZXJEYXRhRmllbGRDb3VudF9rRmFrZUhvc3RFbmRpYW5faXNvbGF0ZUlkX2tEb05vdFJlc2l6ZURpbWVuc2lvbl9mb250Q2hhbmdlTWVzc2FnZWZvbnRzQ2hhbmdld2luZG93aGFzaFZhbHVlc2FyZzAxYXJnMDJhcmcwM2FyZzA0YXJnMDVhcmcwNmFyZzA3YXJnMDhhcmcwOWFyZzEwYXJnMTFhcmcxMmFyZzEzYXJnMTRhcmcxNWFyZzE2YXJnMTdhcmcxOGFyZzE5YXJnMjBoYXNoTGlzdF9kZWNvZGVVVEY4X2RlY29kZUpTT05fdXBkYXRlV2luZG93TWV0cmljc2RlcHRodmlld1BhZGRpbmdUb3B2aWV3UGFkZGluZ1JpZ2h0dmlld1BhZGRpbmdCb3R0b212aWV3UGFkZGluZ0xlZnR2aWV3SW5zZXRUb3B2aWV3SW5zZXRSaWdodHZpZXdJbnNldEJvdHRvbXZpZXdJbnNldExlZnRzeXN0ZW1HZXN0dXJlSW5zZXRUb3BzeXN0ZW1HZXN0dXJlSW5zZXRSaWdodHN5c3RlbUdlc3R1cmVJbnNldEJvdHRvbXN5c3RlbUdlc3R1cmVJbnNldExlZnRfZ2V0TG9jYWxlQ2xvc3VyZV91cGRhdGVMb2NhbGVzbnVtTG9jYWxlc2xvY2FsZUluZGV4X3VwZGF0ZVVzZXJTZXR0aW5nc0RhdGFqc29uRGF0YV91cGRhdGVMaWZlY3ljbGVTdGF0ZV91cGRhdGVUZXh0U2NhbGVGYWN0b3JfdXBkYXRlQWx3YXlzVXNlMjRIb3VyRm9ybWF0X3VwZGF0ZVBsYXRmb3JtQnJpZ2h0bmVzc2JyaWdodG5lc3NOYW1lX3VwZGF0ZVNlbWFudGljc0VuYWJsZWRfdXBkYXRlQWNjZXNzaWJpbGl0eUZlYXR1cmVzbmV3RmVhdHVyZXNfZGlzcGF0Y2hQbGF0Zm9ybU1lc3NhZ2VleE1lc3NhZ2UgdG8gIiIgY2F1c2VkIGV4Y2VwdGlvbiByZXNwb25zZURhdGFfZGlzcGF0Y2hQb2ludGVyRGF0YVBhY2tldF9kaXNwYXRjaFNlbWFudGljc0FjdGlvbl9iZWdpbkZyYW1lX3JlcG9ydFRpbWluZ3NmcmFtZVRpbWluZ3NfZHJhd0ZyYW1lX3J1bk1haW5ab25lZHN0YXJ0TWFpbklzb2xhdGVGdW5jdGlvbnVzZXJNYWluRnVuY3Rpb25fcmVwb3J0VW5oYW5kbGVkRXhjZXB0aW9uV2luZG93X3JlcG9ydFVuaGFuZGxlZEV4Y2VwdGlvbl9pbnZva2UxQV9pbnZva2UyQTFBMl9pbnZva2UzQTNhcmczX3VucGFja1BvaW50ZXJEYXRhUGFja2V0bGVycERvdWJsZV9wcmludERlYnVnX3NjaGVkdWxlRnJhbWVleHQudWkud2luZG93LnNjaGVkdWxlRnJhbWVzYXZlQ29tcGlsYXRpb25UcmFjZV9zYXZlQ29tcGlsYXRpb25UcmFjZVNhdmVDb21waWxhdGlvblRyYWNlX2dldENhbGxiYWNrSGFuZGxlR2V0Q2FsbGJhY2tIYW5kbGVfZ2V0Q2FsbGJhY2tGcm9tSGFuZGxlR2V0Q2FsbGJhY2tGcm9tSGFuZGxlX3JlY3RJc1ZhbGlkUmVjdCBhcmd1bWVudCB3YXMgbnVsbC5SZWN0IGFyZ3VtZW50IGNvbnRhaW5lZCBhIE5hTiB2YWx1ZS5fcnJlY3RJc1ZhbGlkUlJlY3QgYXJndW1lbnQgd2FzIG51bGwuUlJlY3QgYXJndW1lbnQgY29udGFpbmVkIGEgTmFOIHZhbHVlLl9vZmZzZXRJc1ZhbGlkT2Zmc2V0IGFyZ3VtZW50IHdhcyBudWxsLk9mZnNldCBhcmd1bWVudCBjb250YWluZWQgYSBOYU4gdmFsdWUuX21hdHJpeDRJc1ZhbGlkTWF0cml4NCBhcmd1bWVudCB3YXMgbnVsbC5NYXRyaXg0IG11c3QgaGF2ZSAxNiBlbnRyaWVzLk1hdHJpeDQgZW50cmllcyBtdXN0IGJlIGZpbml0ZS5fcmFkaXVzSXNWYWxpZFJhZGl1cyBhcmd1bWVudCB3YXMgbnVsbC5SYWRpdXMgYXJndW1lbnQgY29udGFpbmVkIGEgTmFOIHZhbHVlLl9zY2FsZUFscGhhaW5zdGFudGlhdGVJbWFnZUNvZGVjdGFyZ2V0V2lkdGh0YXJnZXRIZWlnaHRfaW5zdGFudGlhdGVJbWFnZUNvZGVjaW1hZ2VJbmZvZGVjb2RlSW1hZ2VGcm9tTGlzdF9kZWNvZGVJbWFnZUZyb21MaXN0QXN5bmNmcmFtZUluZm9kZWNvZGVJbWFnZUZyb21QaXhlbHNwaXhlbHNjb2RlY0Z1dHVyZV9lbmNvZGVDb2xvckxpc3Rjb2xvckNvdW50X2VuY29kZVBvaW50TGlzdHBvaW50Q291bnR4SW5kZXh5SW5kZXhfZW5jb2RlVHdvUG9pbnRzcG9pbnRBcG9pbnRCX2Z1dHVyaXplY2FsbGJhY2tlcm9wZXJhdGlvbiBmYWlsZWRfbGlzdEVxdWFsc19lbmNvZGVUZXh0U3R5bGVfZW5jb2RlUGFyYWdyYXBoU3R5bGVfZW5jb2RlU3RydXRiaXRtYXNrbG9hZEZvbnRGcm9tTGlzdF9zZW5kRm9udENoYW5nZU1lc3NhZ2VmbHV0dGVyL3N5c3RlbV9sb2FkRm9udEZyb21MaXN0ZGFydC5jb3JlTWFwc2JpZ2ludC5kYXJ0Ym9vbC5kYXJ0Y29tcGFyYWJsZS5kYXJ0ZGF0ZV90aW1lLmRhcnRkb3VibGUuZGFydGR1cmF0aW9uLmRhcnRleGNlcHRpb25zLmRhcnRleHBhbmRvLmRhcnRmdW5jdGlvbi5kYXJ0aWRlbnRpY2FsLmRhcnRpbnQuZGFydGludm9jYXRpb24uZGFydG1hcC5kYXJ0bnVsbC5kYXJ0bnVtLmRhcnRvYmplY3QuZGFydHBhdHRlcm4uZGFydHJlZ2V4cC5kYXJ0c2luay5kYXJ0c3RhY2t0cmFjZS5kYXJ0c3RvcHdhdGNoLmRhcnRzdHJpbmcuZGFydHN0cmluZ19idWZmZXIuZGFydHN0cmluZ19zaW5rLmRhcnR0eXBlLmRhcnR1cmkuZGFydF9TeW5jR2VuZXJhdG9yQ2FsbGJhY2tfVXJpQmFzZUNsb3N1cmVDb21wYXJhdG9yX0dlbmVyYXRvcl9TeW5jSXRlcmFibGVfbW92ZU5leHRGbl9TeW5jSXRlcmF0b3JfeWllbGRFYWNoSXRlcmF0b3JfeWllbGRFYWNoSXRlcmFibGVfTGlzdHJlc3VsdC10eXBlLXVzZXMtcGFzc2VkLXR5cGUtYXJndW1lbnRzTGlzdF9hbGxvY2F0ZUxpc3RfZ2V0SW5kZXhlZF9zZXRJbmRleGVkTGlzdF9zZXRJbmRleGVkTGlzdF9nZXRMZW5ndGhfc2xpY2VuZWVkc1R5cGVBcmd1bWVudF9zbGljZUludGVybmFsTGlzdF9zbGljZWl0ZXJhYmxlQXNMaXN0X3NldExlbmd0aF9JbW11dGFibGVMaXN0SW1tdXRhYmxlQXJyYXkgY2FuIG9ubHkgYmUgYWxsb2NhdGVkIGJ5IHRoZSBWTUltbXV0YWJsZUxpc3RfZnJvbV9GaXhlZFNpemVBcnJheUl0ZXJhdG9yX0JpZ0ludEltcGxfZGlnaXRCaXRzX2RpZ2l0QmFzZV9kaWdpdE1hc2tfaGFsZkRpZ2l0Qml0c19oYWxmRGlnaXRNYXNrb25ldHdvX21pbnVzT25lX29uZURpZ2l0TWFza190d29EaWdpdE1hc2tfb25lQmlsbGlvbl9taW5JbnQtOTIyMzM3MjAzNjg1NDc3NTgwOF9tYXhJbnQ5MjIzMzcyMDM2ODU0Nzc1ODA3X2lzSW50cmluc2lmaWVkZGFydC52bS5ub3QuYS5jb21waWxlLnRpbWUuY29uc3RhbnRfbGFzdERpdmlkZW5kRGlnaXRzX2xhc3REaXZpZGVuZFVzZWRfbGFzdERpdmlzb3JEaWdpdHNfbGFzdERpdmlzb3JVc2VkX2xhc3RRdW9SZW1EaWdpdHNfbGFzdFF1b1JlbVVzZWRfbGFzdFJlbVVzZWRfbGFzdFJlbV9uc2hfaXNOZWdhdGl2ZV9kaWdpdHNfcGFyc2VSRV5ccyooWystXT8pKCgweFthLWYwLTldKyl8KFxkKyl8KFthLXowLTldKykpXHMqJGNhc2VTZW5zaXRpdmVfYml0c0ZvckZyb21Eb3VibGVfZGl2aXNvckxvd1RvcERpZ2l0X2Rpdmlzb3JUb3BEaWdpdF9xdW90aWVudERpZ2l0X3F1b3RpZW50SGlnaERpZ2l0dXNlZGRpZ2l0c19ub3JtYWxpemVkcmFkaXhDb3VsZCBub3QgcGFyc2UgQmlnSW50X3BhcnNlRGVjaW1hbHBhcnRkaWdpdEluUGFydENvdW50cmVtYWluZGVyX2NvZGVVbml0VG9SYWRpeFZhbHVlX3BhcnNlSGV4c3RhcnRQb3NoZXhDaGFyc1BlckRpZ2l0c291cmNlTGVuZ3RobGFzdERpZ2l0TGVuZ3RoZGlnaXRJbmRleF9wYXJzZVJhZGl4X3RyeVBhcnNlZmlyc3RNYXRjaHNpZ25JbmRleGhleEluZGV4ZGVjaW1hbEluZGV4bm9uRGVjaW1hbEhleEluZGV4ZGVjaW1hbE1hdGNoaGV4TWF0Y2hub25EZWNpbWFsTWF0Y2hfbm9ybWFsaXplX2lzWmVyb19jbG9uZURpZ2l0c3Jlc3VsdERpZ2l0c19mcm9tSW50MjE0NzQ4MzY0OF9mcm9tRG91YmxlVmFsdWUgbXVzdCBiZSBmaW5pdGU6IGZsb29yVG9Eb3VibGViaWFzZWRFeHBvbmVudHVuc2hpZnRlZERpZ2l0c3Vuc2hpZnRlZEJpZ2Fic1Jlc3VsdF9kbFNoaWZ0cmVzdWx0VXNlZF9kbFNoaWZ0RGlnaXRzeERpZ2l0c3hVc2VkaXNPZGRfZHJTaGlmdF9kclNoaWZ0RGlnaXRzX2xzaGRpZ2l0U2hpZnRiaXRTaGlmdGNhcnJ5Qml0U2hpZnRiaXRNYXNrY2FycnlzaGlmdEFtb3VudHNoaWZ0LWFtb3VudCBtdXN0IGJlIHBvc2l0aXZlIF9sU2hpZnREaWdpdHNkaWdpdHNTaGlmdF9yc2hfclNoaWZ0RGlnaXRzX2Fic0NvbXBhcmViaWdJbnRjb21wYXJlVG9fY29tcGFyZURpZ2l0c290aGVyRGlnaXRzb3RoZXJVc2VkX2Fic0FkZF9hYnNTdWJfYWJzQWRkU2V0U2lnbl9hYnNTdWJTZXRTaWduX2Fic0FuZFNldFNpZ25fYWJzQW5kTm90U2V0U2lnbl9hYnNPclNldFNpZ25sRGlnaXRzX2Fic1hvclNldFNpZ250aGlzMW90aGVyMW4xX211bEFkZG11bHRpcGxpY2FuZERpZ2l0c2FjY3VtdWxhdG9yRGlnaXRzeGx4aG1sbWhwaHBsX3NxckFkZGFjY3VsdW1hdG9yRGlnaXRzaF9tdWxEaWdpdHNfc3FyRGlnaXRzX2VzdGltYXRlUXVvdGllbnREaWdpdHF1b3RpZW50RGlnaXRfZGl2X2RpdlJlbWxhc3RRdW9fdXNlZHF1b19kaWdpdHNxdW9fcmVtcmVtRGlnaXRzcmVtbnNoeURpZ2l0c3lVc2VkbnVtRXh0cmFEaWdpdHN0bXBEaWdpdHNueURpZ2l0c2QwZDFfcmVtRGlnaXRzRXhwb25lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmU6IG1vZFBvd2JpZ0V4cG9uZW50YmlnTW9kdWx1c21vZHVsdXNleHBvbmVudCBtdXN0IGJlIHBvc2l0aXZlOiBtb2R1bHVzIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmU6IGV4cG9uZW50Qml0bGVuY2Fubm90VXNlTW9udGdvbWVyeV9ub3JtTW9kdWx1c1VzZWRyZXN1bHQyRGlnaXRzZ0RpZ2l0c2dVc2VkcmVzdWx0MlVzZWRfc3FyX211bF9yZXZlcnRrMWttZzJEaWdpdHNnMlVzZWRpc09uZWV4cG9uZW50RGlnaXRzZ3dEaWdpdHNyaXN3YXBEaWdpdHNzd2FwVXNlZF9iaW5hcnlHY2RpbnZtYXhVc2VkbWF4TGVuTm90IGNvcHJpbWV0aGlzbXVzdCBub3QgYmUgemVyb2RpZ2l0U2hpZnRBbW91bnR1RGlnaXRzdkRpZ2l0c2FjYWJjZFVzZWRhYmNkTGVuYURpZ2l0c2JEaWdpdHNjRGlnaXRzZERpZ2l0c2FJc05lZ2F0aXZlYklzTmVnYXRpdmVjSXNOZWdhdGl2ZWRJc05lZ2F0aXZlYV9jbXBfY2JfY21wX2RjX2NtcF9hZF9jbXBfYm1vZEludmVyc2VNb2R1bHVzIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmU6IGdjZHRvVW5zaWduZWRpc1ZhbGlkSW50cmVzdWx0Qml0c2NhY2hlZEJpdHNjYWNoZWRCaXRzTGVuZ3RocmVhZEJpdHNuZXh0RGlnaXRuZXh0RGlnaXRMZW5ndGhsZWFkaW5nQml0c3JvdW5kVXBkZWNpbWFsRGlnaXRDaHVua3NyZXN0ZGlnaXRzOXplcm9zMDAwMDAwMDAwMDAwMDBfdG9SYWRpeENvZGVVbml0ZGlnaXRTdHJpbmdfdG9IZXhTdHJpbmdyZXZlcnNlZERpZ2l0Q29kZVVuaXRzbXNiQ2h1bmtfQmlnSW50UmVkdWN0aW9uX0JpZ0ludE1vbnRnb21lcnlSZWR1Y3Rpb25fbW9kdWx1c19tb2R1bHVzRGlnaXRzX2FyZ3NfZGlnaXRzUGVyU3RlcF94RGlnaXRfeEhpZ2hEaWdpdF9yaG9EaWdpdF9yaG9IaWdoRGlnaXRfbXVEaWdpdF9tdUhpZ2hEaWdpdF9pbnZEaWdpdF9pbnZEaWdpdFBhaXJfbXVsTW9kcmhvbHJob2hkaGRsX3JlZHVjZV9CaWdJbnRDbGFzc2ljUmVkdWN0aW9uX25vcm1Nb2R1bHVzX25vcm1Nb2R1bHVzRGlnaXRzX25lZ05vcm1Nb2R1bHVzRGlnaXRzX21vZHVsdXNOc2hfdG1wRGlnaXRzbmVnTm9ybU1vZHVsdXNfRG91YmxlQ0FDSEVfU0laRV9MT0cyQ0FDSEVfTEVOR1RIQ0FDSEVfTUFTS19jYWNoZV9jYWNoZUV2aWN0SW5kZXhmcm9tSW50ZWdlckRvdWJsZV9kb3VibGVGcm9tSW50ZWdlckRvdWJsZV9oYXNoQ29kZV9pZGVudGl0eUhhc2hDb2RlRG91YmxlX2FkZF9zdWJEb3VibGVfc3ViRG91YmxlX211bF90cnVuY19kaXZEb3VibGVfdHJ1bmNfZGl2RG91YmxlX2Rpdl9tb2R1bG9Eb3VibGVfbW9kdWxvX3JlbWFpbmRlckRvdWJsZV9yZW1haW5kZXJEb3VibGVfZmxpcFNpZ25CaXRfZXF1YWxEb3VibGVfZXF1YWxfZXF1YWxUb0ludGVnZXJEb3VibGVfZXF1YWxUb0ludGVnZXJfZ3JlYXRlclRoYW5Eb3VibGVfZ3JlYXRlclRoYW5fYWRkRnJvbUludGVnZXJfc3ViRnJvbUludGVnZXJfbXVsRnJvbUludGVnZXJfdHJ1bmNEaXZGcm9tSW50ZWdlcl9tb2R1bG9Gcm9tSW50ZWdlcl9yZW1haW5kZXJGcm9tSW50ZWdlcl9ncmVhdGVyVGhhbkZyb21JbnRlZ2VyRG91YmxlX2dyZWF0ZXJUaGFuRnJvbUludGVnZXJEb3VibGVfZ2V0SXNOZWdhdGl2ZURvdWJsZV9nZXRJc0luZmluaXRlRG91YmxlX2dldElzTmFOcm91bmRUb0RvdWJsZWZsb29yY2VpbGNlaWxUb0RvdWJsZXRydW5jYXRlVG9Eb3VibGVEb3VibGVfcm91bmREb3VibGVfZmxvb3JEb3VibGVfY2VpbERvdWJsZV90cnVuY2F0ZURvdWJsZV90b0ludERvdWJsZV90b1N0cmluZ2ZyYWN0aW9uRGlnaXRzX3RvU3RyaW5nQXNGaXhlZERvdWJsZV90b1N0cmluZ0FzRml4ZWR0b1N0cmluZ0FzRXhwb25lbnRpYWxfdG9TdHJpbmdBc0V4cG9uZW50aWFsRG91YmxlX3RvU3RyaW5nQXNFeHBvbmVudGlhbHRvU3RyaW5nQXNQcmVjaXNpb25wcmVjaXNpb25fdG9TdHJpbmdBc1ByZWNpc2lvbkRvdWJsZV90b1N0cmluZ0FzUHJlY2lzaW9udGhpc0lzTmVnYXRpdmVvdGhlcklzTmVnYXRpdmUtOTAwNzE5OTI1NDc0MDk5MjkwMDcxOTkyNTQ3NDA5OTI5MjIzMzcyMDM2ODU0Nzc2MDAwLjBfQXNzZXJ0aW9uRXJyb3JfZmFpbGVkQXNzZXJ0aW9uX3VybF9saW5lX2NvbHVtbl90aHJvd05ld2Fzc2VydGlvblN0YXJ0YXNzZXJ0aW9uRW5kX2RvVGhyb3dOZXdBc3NlcnRpb25FcnJvcl90aHJvd05ld19ldmFsdWF0ZUFzc2VydGlvbmNvbmRpdGlvbl9tZXNzYWdlU3RyaW5naXMgbm90IHRydWUudHJpbWNvbHVtbkluZm8gcG9zICc6IEZhaWxlZCBhc3NlcnRpb246IGxpbmUgX1R5cGVFcnJvcmVycm9yTXNnaXMgYXNzaWduYWJsZVR5cGVFcnJvcl90aHJvd05ld3NyY192YWx1ZWRzdF90eXBlZHN0X25hbWVfQ2FzdEVycm9yX2Vycm9yTXNnX0ludGVybmFsRXJyb3JJbnRlcm5hbEVycm9yOiAnX0NvbXBpbGVUaW1lRXJyb3JfRHVwbGljYXRlZEZpZWxkSW5pdGlhbGl6ZXJFcnJvckVycm9yOiBmaWVsZCAnJyBpcyBhbHJlYWR5IGluaXRpYWxpemVkLl9MYXRlSW5pdGlhbGl6YXRpb25FcnJvcl9DbG9zdXJlX2luc3RhbnRpYXRvcl90eXBlX2FyZ3VtZW50c19mdW5jdGlvbl90eXBlX2FyZ3VtZW50c19kZWxheWVkX3R5cGVfYXJndW1lbnRzX2hhc2hDbG9zdXJlX2VxdWFsc19jb21wdXRlSGFzaENsb3N1cmVfY2xvbmVDbG9zdXJlX2NvbXB1dGVIYXNoX0dyb3dhYmxlTGlzdHdpdGhDYXBhY2l0eV93aXRoRGF0YUdyb3dhYmxlTGlzdF9hbGxvY2F0ZUdyb3dhYmxlTGlzdF9nZXRDYXBhY2l0eUdyb3dhYmxlTGlzdF9nZXRMZW5ndGhuZXdfbGVuZ3Rob2xkX2NhcGFjaXR5bmV3X2NhcGFjaXR5c2hvdWxkU2hyaW5rVG9GaXRfc2hyaW5rR3Jvd2FibGVMaXN0X3NldExlbmd0aF9zZXREYXRhR3Jvd2FibGVMaXN0X3NldERhdGFHcm93YWJsZUxpc3RfZ2V0SW5kZXhlZEdyb3dhYmxlTGlzdF9zZXRJbmRleGVkX25leHRDYXBhY2l0eWlzVk1MaXN0Y2FwaXRlckxlbm5ld0xlbmVsZW1fYWxsb2NhdGVEYXRhbmV3RGF0YWluaXRpYWxMZW5ndGhfam9pbldpdGhTZXBhcmF0b3Jjb2RlVW5pdENvdW50Zmlyc3ROb25PbmVCeXRlU3RyaW5nTGltaXRuZXh0RWxlbWVudGNvcHlJbmRleG9uZWJ5dGVDYW5hcnllbGVtZW50U3RyaW5nX0ltbXV0YWJsZU1hcF9rdlBhaXJza2V5VmFsdWVQYWlyc0Nhbm5vdCBzZXQgdmFsdWUgaW4gdW5tb2RpZmlhYmxlIE1hcENhbm5vdCBjbGVhciB1bm1vZGlmaWFibGUgTWFwQ2Fubm90IHJlbW92ZSBmcm9tIHVubW9kaWZpYWJsZSBNYXBDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBNYXBwcmVkaWNhdGVfSW1tdXRhYmxlTWFwS2V5SXRlcmFibGVfSW1tdXRhYmxlTWFwVmFsdWVJdGVyYWJsZV9JbW11dGFibGVNYXBFbnRyeUl0ZXJhYmxlX0ltbXV0YWJsZU1hcEtleUl0ZXJhdG9yX25leHRJbmRleF9JbW11dGFibGVNYXBWYWx1ZUl0ZXJhdG9yX0ltbXV0YWJsZU1hcEVudHJ5SXRlcmF0b3JfSW50ZWdlckltcGxlbWVudGF0aW9uMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6X2JpdEFuZEZyb21JbnRlZ2VyX2JpdE9yRnJvbUludGVnZXJfYml0WG9yRnJvbUludGVnZXJfYml0QW5kRnJvbVNtaUludGVnZXJfYml0QW5kRnJvbUludGVnZXJJbnRlZ2VyX2JpdE9yRnJvbUludGVnZXJJbnRlZ2VyX2JpdFhvckZyb21JbnRlZ2VyX3NockZyb21JbnRlZ2VySW50ZWdlcl9zaHJGcm9tSW50ZWdlcl9zaGxGcm9tSW50ZWdlckludGVnZXJfc2hsRnJvbUludGVnZXJJbnRlZ2VyX2FkZEZyb21JbnRlZ2VySW50ZWdlcl9zdWJGcm9tSW50ZWdlckludGVnZXJfbXVsRnJvbUludGVnZXJJbnRlZ2VyX3RydW5jRGl2RnJvbUludGVnZXJJbnRlZ2VyX21vZHVsb0Zyb21JbnRlZ2VySW50ZWdlcl9ncmVhdGVyVGhhbkZyb21JbnRlZ2VySW50ZWdlcl9lcXVhbFRvSW50ZWdlci05MjIzMzcyMDM2ODU0Nzc2MDAwLjBfdG9Qb3cyU3RyaW5nX21pbkludDY0VG9SYWRpeFN0cmluZ19zZXRBdGJpdHNQZXJEaWdpdDMwMzcwMDA0OTlfU21pX2RpZ2l0VGFibGVfc21hbGxMb29rdXBUYWJsZS05OS05OC05Ny05Ni05NS05NC05My05Mi05MS05MC04OS04OC04Ny04Ni04NS04NC04My04Mi04MS04MC03OS03OC03Ny03Ni03NS03NC03My03Mi03MS03MC02OS02OC02Ny02Ni02NS02NC02My02Mi02MS02MC01OS01OC01Ny01Ni01NS01NC01My01Mi01MS01MC00OS00OC00Ny00Ni00NS00NC00My00Mi00MS00MC0zOS0zOC0zNy0zNi0zNS0zNC0zMy0zMi0zMS0zMC0yOS0yOC0yNy0yNi0yNS0yNC0yMy0yMi0yMS0yMC0xOS0xOC0xNy0xNi0xNS0xNC0xMy0xMi0xMS0xMC05LTgtNy02LTUtNC0zLTItMTEyMzQ1NjcxMDExMTIxMzE0MTUxNjE3MTgxOTIwMjEyMjIzMjQyNjI3MjgyOTMwMzEzMjMzMzQzNTM2MzczODM5NDA0MTQyNDM0NDQ1NDY0NzQ4NDk1MDUxNTI1MzU0NTU1NjU3NTg1OTYwNjE2MjYzNjQ2NTY2Njc2ODY5NzA3MTcyNzM3NDc1NzY3Nzc4Nzk4MDgxODI4Mzg0ODU4Njg3ODg4OTkwOTE5MjkzOTQ5NTk2OTc5ODk5X1BPV18xMF83X1BPV18xMF84X1BPV18xMF85U21pX2JpdE5lZ2F0ZVNtaV9iaXRMZW5ndGhTbWlfYml0QW5kRnJvbVNtaV9wb3NpdGl2ZUJhc2UxMExlbmd0aHNtaXR3b0RpZ2l0c19uZWdhdGl2ZUJhc2UxMExlbmd0aG5lZ1NtaV9uZWdhdGl2ZVRvU3RyaW5nX01pbnRNaW50X2JpdE5lZ2F0ZU1pbnRfYml0TGVuZ3RoX0ludm9jYXRpb25NaXJyb3JfTUVUSE9EX0dFVFRFUl9TRVRURVJfRklFTERfTE9DQUxfVkFSX0tJTkRfU0hJRlRfS0lORF9CSVRTX0tJTkRfTUFTS19EWU5BTUlDX1NVUEVSX1NUQVRJQ19DT05TVFJVQ1RPUl9UT1BfTEVWRUxfTEVWRUxfU0hJRlRfTEVWRUxfQklUU19MRVZFTF9NQVNLX1RZUEVfQVJHU19MRU5fQ09VTlRfUE9TSVRJT05BTF9DT1VOVF9GSVJTVF9OQU1FRF9FTlRSWV9mdW5jdGlvbk5hbWVfYXJndW1lbnRzRGVzY3JpcHRvcl9pc1N1cGVySW52b2NhdGlvbl9kZWxheWVkVHlwZUFyZ3VtZW50c0xlbl9tZW1iZXJOYW1lX3Bvc2l0aW9uYWxBcmd1bWVudHNfbmFtZWRBcmd1bWVudHNfd2l0aFR5cGVfd2l0aG91dFR5cGVfc2V0TWVtYmVyTmFtZUFuZFR5cGVnZXQ6c2V0Ol90eXBlQXJnc0xlbnR5cGVBcmdzTGVuX3VucGFja1R5cGVBcmd1bWVudHNJbnZvY2F0aW9uTWlycm9yX3VucGFja1R5cGVBcmd1bWVudHNudW1UeXBlQXJndW1lbnRzcmVjZWl2ZXJJbmRleG5hbWVkRW50cnlJbmRleGFyZ19uYW1lYXJnX3ZhbHVlaXNBY2Nlc3Nvcl9hbGxvY2F0ZUludm9jYXRpb25NaXJyb3Jhcmd1bWVudHNEZXNjcmlwdG9yaXNTdXBlckludm9jYXRpb25fYWxsb2NhdGVJbnZvY2F0aW9uTWlycm9yRm9yQ2xvc3VyZWRlbGF5ZWRUeXBlQXJndW1lbnRzTGVuX0xpYnJhcnlQcmVmaXhpc0xvYWRlZF9SZWdFeHBIYXNoS2V5cGF0dGVybm11bHRpTGluZXVuaWNvZGVkb3RBbGx0aGF0X1JlZ0V4cEhhc2hWYWx1ZXJlZ2V4cF9SZWdFeHBNYXRjaF9yZWdleHBfbWF0Y2hfTUFUQ0hfUEFJUmdyb3VwSWR4X2dyb3VwQ291bnRfc3Vic3RyaW5nVW5jaGVja2VkZ3JvdXBzZ3JvdXBzU3BlY2dyb3Vwc0xpc3Rncm91cENvdW50bmFtZWRHcm91cGlkeF9ncm91cE5hbWVJbmRleE5vdCBhIGNhcHR1cmUgZ3JvdXAgbmFtZTogZ3JvdXBOYW1lc19ncm91cE5hbWVzX1JlZ0V4cF93b3JkQ2hhcmFjdGVyTWFwUmVnRXhwX2ZhY3RvcnlfRXhlY3V0ZU1hdGNoYWxsTWF0Y2hlc21hdGNoQXNQcmVmaXhfRXhlY3V0ZU1hdGNoU3RpY2t5c3RyaW5nTWF0Y2hSZWdFeHBfZ2V0UGF0dGVybmlzTXVsdGlMaW5lUmVnRXhwX2dldElzTXVsdGlMaW5laXNDYXNlU2Vuc2l0aXZlUmVnRXhwX2dldElzQ2FzZVNlbnNpdGl2ZWlzVW5pY29kZVJlZ0V4cF9nZXRJc1VuaWNvZGVpc0RvdEFsbFJlZ0V4cF9nZXRJc0RvdEFsbFJlZ0V4cF9nZXRHcm91cENvdW50X2dyb3VwTmFtZUxpc3RSZWdFeHBfZ2V0R3JvdXBOYW1lTWFwbmFtZUxpc3RSZWdFeHBfRXhlY3V0ZU1hdGNoc3RhcnRfaW5kZXhSZWdFeHBfRXhlY3V0ZU1hdGNoU3RpY2t5X0FsbE1hdGNoZXNJdGVyYWJsZV9yZV9zdHJfQWxsTWF0Y2hlc0l0ZXJhdG9yX2lzVHJhaWxTdXJyb2dhdGVfU3RhY2tUcmFjZV9TdHJpbmdCYXNlX2xlbmd0aEJpdHNfbWF4TGVuZ3RoVmFsdWVfbGVuZ3RoTWFza19zdGFydEJpdHNfbWF4U3RhcnRWYWx1ZV9tYXhVbnNpZ25lZFNtaUJpdHNfbWF4Sm9pblJlcGxhY2VPbmVCeXRlU3RyaW5nTGVuZ3RoX2lzV2hpdGVzcGFjZV9TdHJpbmdCYXNlIGNhbid0IGJlIGluc3RhbmlhdGVkU3RyaW5nX2dldEhhc2hDb2RlX2lzT25lQnl0ZWNyZWF0ZUZyb21DaGFyQ29kZXNjaGFyQ29kZXNjY2lkY29kZUNvdW50X3NjYW5Db2RlVW5pdHNfY3JlYXRlU3RyaW5nRnJvbUl0ZXJhYmxlY2hhckNvZGVMaXN0aXNPbmVCeXRlU3RyaW5nX2NyZWF0ZU9uZUJ5dGVTdHJpbmdfY3JlYXRlRnJvbUNvZGVQb2ludHNTdHJpbmdCYXNlX2NyZWF0ZUZyb21Db2RlUG9pbnRzY29kZVBvaW50c1N0cmluZ19jaGFyQXRTdHJpbmdfZ2V0TGVuZ3RoU3RyaW5nX2NvbmNhdHRoaXNMZW5ndGhvdGhlckxlbmd0aHRoaXNDb2RlVW5pdG90aGVyQ29kZVVuaXRfc3Vic3RyaW5nTWF0Y2hlc21heEluZGV4X3N1YnN0cmluZ1VuY2hlY2tlZE5hdGl2ZVN0cmluZ0Jhc2Vfc3Vic3RyaW5nVW5jaGVja2VkX2lzT25lQnl0ZVdoaXRlc3BhY2VfaXNUd29CeXRlV2hpdGVzcGFjZV9maXJzdE5vbldoaXRlc3BhY2VfbGFzdE5vbldoaXRlc3BhY2V0cmltTGVmdHRyaW1SaWdodHRpbWVzcGFkUmlnaHRyZXBsYWNlRmlyc3RyZXBsYWNlbWVudElzT25lQnl0ZXJlcGxhY2VtZW50TGVuZ3Roc2xpY2VzX2FkZFJlcGxhY2VTbGljZV9qb2luUmVwbGFjZUFsbE9uZUJ5dGVSZXN1bHR3cml0ZUluZGV4c2xpY2VMZW5ndGhfam9pblJlcGxhY2VBbGxSZXN1bHRTdHJpbmdCYXNlX2pvaW5SZXBsYWNlQWxsUmVzdWx0cmVwbGFjZW1lbnRTdHJpbmdzQXJlT25lQnl0ZXJlcGxhY2VBbGxNYXBwZWRyZXBsYWNlRmlyc3RNYXBwZWRfbWF0Y2hTdHJpbmdfc3RyaW5nSWRlbnRpdHlfc3BsaXRNYXBKb2luRW1wdHlTdHJpbmdvbk1hdGNob25Ob25NYXRjaHNwbGl0TWFwSm9pbnN0cmluZ1BhdHRlcm5faW50ZXJwb2xhdGVTaW5nbGVfaW50ZXJwb2xhdGVudW1WYWx1ZXNwcmV2aW91c0luZGV4cnVuZXNTdHJpbmdfdG9VcHBlckNhc2VTdHJpbmdfdG9Mb3dlckNhc2VfY29uY2F0UmFuZ2VzdHJpbmdzX2NvbmNhdFJhbmdlTmF0aXZlU3RyaW5nX2NvbmNhdFJhbmdlX09uZUJ5dGVTdHJpbmdfTENfVEFCTEUAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6W1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f8KAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMKhwqLCo8KkwqXCpsKnwqjCqcKqwqvCrMKtwq7Cr8KwwrHCssKzwrTCtcK2wrfCuMK5wrrCu8K8wr3CvsK/w6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsOXw7jDucO6w7vDvMO9w77Dn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDt8O4w7nDusO7w7zDvcO+w79fVUNfVEFCTEUAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xdXl9gQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVp7fH1+f8KAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMKhwqLCo8KkwqXCpsKnwqjCqcKqwqvCrMKtwq7Cr8KwwrHCssKzwrQAwrbCt8K4wrnCusK7wrzCvcK+wr/DgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8OQw5HDksOTw5TDlcOWw5fDmMOZw5rDm8Ocw53DngDDgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8OQw5HDksOTw5TDlcOWw7fDmMOZw5rDm8Ocw53DngBTdHJpbmdfY29kZVVuaXRBdE9uZUJ5dGVTdHJpbmdfc3Vic3RyaW5nVW5jaGVja2VkX3NwbGl0V2l0aENoYXJDb2RlT25lQnl0ZVN0cmluZ19zcGxpdFdpdGhDaGFyQ29kZXBhdHRlcm5Bc1N0cmluZ19jb25jYXRBbGxyZXNzdHJpbmdzTGVuZ3Rockl4ZUxlbmd0aHBDaWRwYXR0ZXJuQ3UwcGFkQ2lkcGFkTGVuZ3RocmVzdWx0TGVuZ3RocGFkQ2hhcl9hbGxvY2F0ZU9uZUJ5dGVTdHJpbmdfYWxsb2NhdGVfYWxsb2NhdGVGcm9tT25lQnl0ZUxpc3RPbmVCeXRlU3RyaW5nX2FsbG9jYXRlRnJvbU9uZUJ5dGVMaXN0T25lQnl0ZVN0cmluZ19zZXRBdGNvZGVQb2ludG9uZUJ5dGVTdHJpbmdfVHdvQnl0ZVN0cmluZ19hbGxvY2F0ZUZyb21Ud29CeXRlTGlzdFR3b0J5dGVTdHJpbmdfYWxsb2NhdGVGcm9tVHdvQnl0ZUxpc3RfRXh0ZXJuYWxPbmVCeXRlU3RyaW5nX0V4dGVybmFsVHdvQnl0ZVN0cmluZ19TdHJpbmdNYXRjaF9TdHJpbmdBbGxNYXRjaGVzSXRlcmFibGVfaW5wdXRfcGF0dGVybl9TdHJpbmdBbGxNYXRjaGVzSXRlcmF0b3JfQWJzdHJhY3RUeXBlQWJzdHJhY3RUeXBlX3RvU3RyaW5nX1R5cGVUeXBlX2dldEhhc2hDb2RlVHlwZV9lcXVhbGl0eV9UeXBlUmVmX1R5cGVQYXJhbWV0ZXJfV2Vha1Byb3BlcnR5X2dldEtleV9uZXdXZWFrUHJvcGVydHlfbmV3V2Vha1Byb3BlcnR5X2dldEtleVdlYWtQcm9wZXJ0eV9nZXRWYWx1ZVdlYWtQcm9wZXJ0eV9zZXRWYWx1ZURlcHJlY2F0ZWRleHBpcmVzVXNlIGBtZXNzYWdlYCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgaW4gRGFydCAzLjAuMERlcHJlY2F0ZWQgZmVhdHVyZTogX092ZXJyaWRlUHJvdmlzaW9uYWxfUHJveHlwcmFnbWFCaWdJbnR0cnlQYXJzZWZyb21FbnZpcm9ubWVudEJvb2xfZnJvbUVudmlyb25tZW50Q29tcGFyYWJsZURhdGVUaW1lX01JQ1JPU0VDT05EX0lOREVYX01JTExJU0VDT05EX0lOREVYX1NFQ09ORF9JTkRFWF9NSU5VVEVfSU5ERVhfSE9VUl9JTkRFWF9EQVlfSU5ERVhfV0VFS0RBWV9JTkRFWF9NT05USF9JTkRFWF9ZRUFSX0lOREVYX19wYXJ0c19EQVlTX1VOVElMX01PTlRIbW9uZGF5dHVlc2RheXdlZG5lc2RheXRodXJzZGF5ZnJpZGF5c2F0dXJkYXlzdW5kYXlkYXlzUGVyV2Vla2phbnVhcnlmZWJydWFyeW1hcmNoYXByaWxtYXlqdW5lanVseWF1Z3VzdHNlcHRlbWJlcm9jdG9iZXJub3ZlbWJlcmRlY2VtYmVybW9udGhzUGVyWWVhcl9tYXhNaWxsaXNlY29uZHNTaW5jZUVwb2NoODY0MDAwMDAwMDAwMDAwMF9wYXJzZUZvcm1hdF4oWystXT9cZHs0LDZ9KS0/KFxkXGQpLT8oXGRcZCkoPzpbIFRdKFxkXGQpKD86Oj8oXGRcZCkoPzo6PyhcZFxkKSg/OlsuLF0oXGQrKSk/KT8pPyggP1t6Wl18ID8oWy0rXSkoXGRcZCkoPzo6PyhcZFxkKSk/KT8pPyR5ZWFybW9udGhkYXlob3VybWludXRlbWlsbGlzZWNvbmRtaWNyb3NlY29uZHV0Y2Zyb21NaWxsaXNlY29uZHNTaW5jZUVwb2NoZnJvbU1pY3Jvc2Vjb25kc1NpbmNlRXBvY2htaWNyb3NlY29uZHNTaW5jZUVwb2NoX3dpdGhWYWx1ZURhdGVUaW1lIGlzIG91dHNpZGUgdmFsaWQgcmFuZ2U6ICdpc1V0YycgZmxhZyBtYXkgbm90IGJlICdudWxsJ19ub3dfZ2V0Q3VycmVudE1pY3Jvc0RhdGVUaW1lX2N1cnJlbnRUaW1lTWljcm9zX3RpbWVab25lTmFtZUZvckNsYW1wZWRTZWNvbmRzRGF0ZVRpbWVfdGltZVpvbmVOYW1lc2Vjb25kc1NpbmNlRXBvY2hfdGltZVpvbmVPZmZzZXRJblNlY29uZHNGb3JDbGFtcGVkU2Vjb25kc0RhdGVUaW1lX3RpbWVab25lT2Zmc2V0SW5TZWNvbmRzX2xvY2FsVGltZVpvbmVBZGp1c3RtZW50SW5TZWNvbmRzRGF0ZVRpbWVfbG9jYWxUaW1lWm9uZUFkanVzdG1lbnRJblNlY29uZHNfY29tcHV0ZVVwcGVyUGFydGxvY2FsTWljcm9zcmVzdWx0WWVhcnJlc3VsdE1vbnRocmVzdWx0RGF5ZGF5c1NpbmNlMTk3MDg2NDAwMDAwMDAwZGF5c3lkMXlkMnlkM2lzTGVhcGRheXNVbnRpbE1vbnRocmVzdWx0TWljcm9zZWNvbmRyZXN1bHRNaWxsaXNlY29uZHJlc3VsdFNlY29uZHJlc3VsdE1pbnV0ZXJlc3VsdEhvdXIzNjAwMDAwMDAwcmVzdWx0V2Vla2RheV9wYXJ0c19sb2NhbERhdGVJblV0Y01pY3Jvc21pY3Jvc19mbG9vcmVkRGl2aXNpb25fZGF5RnJvbVllYXJfaXNMZWFwWWVhcl93ZWVrRGF5X2VxdWl2YWxlbnRZZWFycmVjZW50WWVhcl95ZWFyc0Zyb21TZWNvbmRzU2luY2VFcG9jaF9lcXVpdmFsZW50U2Vjb25kc2VxdWl2YWxlbnRZZWFyZXF1aXZhbGVudERheXNkaWZmRGF5c190aW1lWm9uZU9mZnNldEluU2Vjb25kc2VxdWl2YWxlbnRTZWNvbmRzX3RpbWVab25lTmFtZWZvcm1hdHRlZFN0cmluZ3JlcGFyc2VJbnRPclplcm9tYXRjaGVkcGFyc2VNaWxsaUFuZE1pY3Jvc2Vjb25kc3llYXJzbWlsbGlBbmRNaWNyb3NlY29uZHNob3VyRGlmZmVyZW5jZW1pbnV0ZURpZmZlcmVuY2VUaW1lIG91dCBvZiByYW5nZUludmFsaWQgZGF0ZSBmb3JtYXRpc0JlZm9yZWlzQWZ0ZXJpc0F0U2FtZU1vbWVudEFzdG9Mb2NhbHRvVXRjX2ZvdXJEaWdpdHNhYnNOMDAwX3NpeERpZ2l0c190aHJlZURpZ2l0c190d29EaWdpdHNzZWNadG9Jc284NjAxU3RyaW5nc3VidHJhY3RfYnJva2VuRG93bkRhdGVUb1ZhbHVlcmVhbE1vbnRoYWRqdXN0bWVudHpvbmVPZmZzZXR0aW1lWm9uZU5hbWVVVEN0aW1lWm9uZU9mZnNldG9mZnNldEluU2Vjb25kc3NlY29uZHN3ZWVrZGF5bmFuaW5maW5pdHluZWdhdGl2ZUluZmluaXR5bWluUG9zaXRpdmU1ZS0zMjRtYXhGaW5pdGVfbmF0aXZlUGFyc2VfdHJ5UGFyc2VEb3VibGVkaWdpdHNTZWVuZXhwb25lbnREZWx0YWZpcnN0Q2hhcm5maW5pdHlmaXJzdERpZ2l0ZXhwUGFydG5lZ0V4cG9uZW50SW52YWxpZCBkb3VibGVEdXJhdGlvbm1pY3Jvc2Vjb25kc1Blck1pbGxpc2Vjb25kbWlsbGlzZWNvbmRzUGVyU2Vjb25kc2Vjb25kc1Blck1pbnV0ZW1pbnV0ZXNQZXJIb3VyaG91cnNQZXJEYXltaWNyb3NlY29uZHNQZXJTZWNvbmRtaWNyb3NlY29uZHNQZXJNaW51dGVtaWNyb3NlY29uZHNQZXJIb3VybWljcm9zZWNvbmRzUGVyRGF5bWlsbGlzZWNvbmRzUGVyTWludXRlbWlsbGlzZWNvbmRzUGVySG91cm1pbGxpc2Vjb25kc1BlckRheXNlY29uZHNQZXJIb3Vyc2Vjb25kc1BlckRheW1pbnV0ZXNQZXJEYXlfZHVyYXRpb25ob3Vyc21pbnV0ZXNfbWljcm9zZWNvbmRzcXVvdGllbnRpbkRheXNpbkhvdXJzaW5NaW51dGVzaW5TZWNvbmRzc2l4RGlnaXRzMDAwMDB0d29EaWdpdE1pbnV0ZXN0d29EaWdpdFNlY29uZHNzaXhEaWdpdFVzRXJyb3JzYWZlVG9TdHJpbmdfc3RyaW5nVG9TYWZlU3RyaW5nX29iamVjdFRvU3RyaW5nQXNzZXJ0aW9uRXJyb3JBc3NlcnRpb24gZmFpbGVkOiBBc3NlcnRpb24gZmFpbGVkVHlwZUVycm9yQ2FzdEVycm9yTnVsbFRocm93bkVycm9yVGhyb3cgb2YgbnVsbC5Bcmd1bWVudEVycm9yX2hhc1ZhbHVlaW52YWxpZFZhbHVlbm90TnVsbE11c3Qgbm90IGJlIG51bGxjaGVja05vdE51bGxfZXJyb3JOYW1lSW52YWxpZCBhcmd1bWVudChzKV9lcnJvckV4cGxhbmF0aW9ubmFtZVN0cmluZ2V4cGxhbmF0aW9uZXJyb3JWYWx1ZVJhbmdlRXJyb3JWYWx1ZSBub3QgaW4gcmFuZ2VyYW5nZW1pblZhbHVlbWF4VmFsdWVJbnZhbGlkIHZhbHVlaW5kZXhhYmxlY2hlY2tWYWx1ZUluSW50ZXJ2YWxjaGVja1ZhbGlkSW5kZXhjaGVja1ZhbGlkUmFuZ2VzdGFydE5hbWVlbmROYW1lY2hlY2tOb3ROZWdhdGl2ZTogTm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byA6IE5vdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gOiBOb3QgaW4gcmFuZ2UgLi4sIGluY2x1c2l2ZTogVmFsaWQgdmFsdWUgcmFuZ2UgaXMgZW1wdHk6IE9ubHkgdmFsaWQgdmFsdWUgaXMgSW5kZXhFcnJvckluZGV4IG91dCBvZiByYW5nZTogaW5kZXggbXVzdCBub3QgYmUgbmVnYXRpdmU6IG5vIGluZGljZXMgYXJlIHZhbGlkOiBpbmRleCBzaG91bGQgYmUgbGVzcyB0aGFuIEZhbGxUaHJvdWdoRXJyb3JGYWxsVGhyb3VnaEVycm9yX3Rocm93TmV3Y2FzZV9jbGF1c2VfcG9zJzogU3dpdGNoIGNhc2UgZmFsbC10aHJvdWdoIGF0IGxpbmUgQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvcl9jbGFzc05hbWVjbGFzc05hbWVBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yX3Rocm93TmV3Q2Fubm90IGluc3RhbnRpYXRlIGFic3RyYWN0IGNsYXNzIF91cmwgJycgbGluZSBOb1N1Y2hNZXRob2RFcnJvcl9leGlzdGluZ0FyZ3VtZW50TmFtZXNfcmVjZWl2ZXJfaW52b2NhdGlvbl9pbnZvY2F0aW9uX3R5cGVpbnZvY2F0aW9uX3R5cGV3aXRoSW52b2NhdGlvbnJlY2VpdmVyVXNlIE5vU3VjaE1ldGhvZC53aXRoSW52b2NhdGlvbiBpbnN0ZWFkZXhpc3RpbmdBcmd1bWVudE5hbWVzX3Rocm93TmV3SW52b2NhdGlvbl90aHJvd05ld0lmTm90TG9hZGVkX05hbWVkQXJndW1lbnRzTWFwX2V4aXN0aW5nTWV0aG9kU2lnbmF0dXJlTm9TdWNoTWV0aG9kRXJyb3JfZXhpc3RpbmdNZXRob2RTaWduYXR1cmVpbnZvY2F0aW9uVHlwZV90b1N0cmluZ0RlcHJlY2F0ZWROb1N1Y2hNZXRob2RFcnJvcjogQ2Fubm90IGFzc2lnbiB0byBmaW5hbCB2YXJpYWJsZSAnYXJndW1lbnRDb3VudGFyZ3NNaXNtYXRjaGFyZ3NNZXNzYWdlIHdpdGggbWF0Y2hpbmcgYXJndW1lbnRzdHlwZV9zdHJzZXR0ZXJnZXR0ZXIgb3Igc2V0dGVydmFyaWFibGVtc2dfYnVmTm9TdWNoTWV0aG9kRXJyb3I6IGlzX3R5cGVfY2FsbFRoZSBudWxsIG9iamVjdCBkb2VzIG5vdCBoYXZlIGEgVGhlICcgd2FzIGNhbGxlZCBvbiBudWxsLkNsb3N1cmUgY2FsbCB3aXRoIG1pc21hdGNoZWQgYXJndW1lbnRzOiBmdW5jdGlvbiAnQXR0ZW1wdGVkIHRvIHVzZSB0eXBlICcnIGFzIGEgZnVuY3Rpb24uIFNpbmNlIHR5cGVzIGRvIG5vdCBkZWZpbmUgYSBtZXRob2QgJ2NhbGwnLCB0aGlzIGlzIG5vdCBwb3NzaWJsZS4gRGlkIHlvdSBpbnRlbmQgdG8gY2FsbCB0aGUgIGNvbnN0cnVjdG9yIGFuZCBmb3JnZXQgdGhlICduZXcnIG9wZXJhdG9yP0NsYXNzICcnIGhhcyBubyBpbnN0YW5jZSBTdXBlciBjbGFzcyBvZiBjbGFzcyAnJyBoYXMgbm8gaW5zdGFuY2Ugc3VwZXIuTm8gc3RhdGljIGRlY2xhcmVkIGluIGNsYXNzICcnLk5vIGNvbnN0cnVjdG9yICcgZGVjbGFyZWQgaW4gY2xhc3MgJ25ldyBObyB0b3AtbGV2ZWwgZGVjbGFyZWQuUmVjZWl2ZXI6IHRvcC1sZXZlbFJlY2VpdmVyOiBUcmllZCBjYWxsaW5nOiAgPSBmb3JtYWxQYXJhbWV0ZXJzCkZvdW5kOiB0eXBlQXJndW1lbnRzQnVmYXJndW1lbnRzQnVmZXhpc3RpbmdTaWdhcmdzTXNna2luZEJ1Zm1zZ0J1ZlVuc3VwcG9ydGVkRXJyb3JVbnN1cHBvcnRlZCBvcGVyYXRpb246IFVuaW1wbGVtZW50ZWRFcnJvclVuaW1wbGVtZW50ZWRFcnJvcjogU3RhdGVFcnJvckJhZCBzdGF0ZTogQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9ybW9kaWZpZWRPYmplY3RDb25jdXJyZW50IG1vZGlmaWNhdGlvbiBkdXJpbmcgaXRlcmF0aW9uLkNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGR1cmluZyBpdGVyYXRpb246IE91dE9mTWVtb3J5RXJyb3JPdXQgb2YgTWVtb3J5U3RhY2tPdmVyZmxvd0Vycm9yU3RhY2sgT3ZlcmZsb3dDeWNsaWNJbml0aWFsaXphdGlvbkVycm9ydmFyaWFibGVOYW1lUmVhZGluZyBzdGF0aWMgdmFyaWFibGUgZHVyaW5nIGl0cyBpbml0aWFsaXphdGlvblJlYWRpbmcgc3RhdGljIHZhcmlhYmxlICcnIGR1cmluZyBpdHMgaW5pdGlhbGl6YXRpb25FeGNlcHRpb25fRXhjZXB0aW9uRXhjZXB0aW9uOiBGb3JtYXRFeGNlcHRpb25yZXBvcnRvYmplY3RTb3VyY2VsaW5lTnVtbGluZVN0YXJ0cHJldmlvdXNDaGFyV2FzQ1IgKGF0IGxpbmUgLCBjaGFyYWN0ZXIgKQogKGF0IGNoYXJhY3RlciBsaW5lRW5kcG9zdGZpeHNsaWNlbWFya09mZnNldF4KIChhdCBvZmZzZXQgSW50ZWdlckRpdmlzaW9uQnlaZXJvRXhjZXB0aW9uRXhwYW5kb19taW5TaXplX2RlbGV0ZWRFbnRyeW9sZF9kYXRhbmV3X3NpemVfY2hlY2tUeXBlRXhwYW5kb3MgYXJlIG5vdCBhbGxvd2VkIG9uIHN0cmluZ3MsIG51bWJlcnMsIGJvb2xlYW5zIG9yIG51bGxfbGltaXRFeHBhbmRvOndwZW1wdHlfaWR4RnVuY3Rpb25fYXBwbHlGdW5jdGlvbl9hcHBseWludF9QQVJTRV9MSU1JVFMxMDczNzQxODI0NDYxMTY4NjAxODQyNzM4NzkwNDQwNTI1NTUxNTMwMTg5NzYyNjcxMTUyOTIxNTA0NjA2ODQ2OTc2MTQ5MDExNjExOTM4NDc2NTYyNTc4OTczMDIyMzA1MzYwMjgxNjM5MDk4MjEwNDg1ODI5ODgwNDkxMzUwODUxNzE3NjcyOTkyMDg5MTAwMDAwMDAwMDAwMDAwMDAwMDUwNTQ0NzAyODQ5OTI5Mzc3MTIyMTg2MTExMDY3NDA0MzY5OTI2NjU0MTY2MDkxODMxNzk4NDEyMTc3OTUzMzM3ODA5MzcxMTM2NDM3ODkzODkwMzgwODU5Mzc1Mjg2MjQyMzA1MTUwOTgxNTc5MzM3NDgxMzM2NzU4MjA4MTAyNDc5OTAwNjY4NTc4Mjg4NDEyMTE2Mzg0MDAwMDAwMDAwMDAwMDAzMjQzOTE5OTMyNTIxNTA4NjgxMjgyODEwMDU3ODgzMDgyNzUyNTA0MDM2MzYxOTM2NDY3MzgzODc2NDg4MzM4NDY1MzU3ODI0MjQ4MTE1Mjg3MzIwMzczNjU3NjIzMjIxODI2NTA4OTIxMjQxNjM1MzgxNDc4MzIwNTQ2OTA0MTUzMTQ0MTAwMDAwMDAwMDAwMDc4NzY2Mjc4Mzc4ODU0OTc2MTE2Njc4ODk1MTQ5NTI5ODQ5NjEyMzg2NDIwNjgzNjkzMTAxMDU2MzM3OTIyMDUwODA1NjY0MDYyNTEzMTYyMTcwMzg0MjI2NzEzNl9tYXhJbnQ2NF9taW5JbnQ2NF9pbnQ2NFVuc2lnbmVkT3ZlcmZsb3dMaW1pdHM2ODcxOTQ3NjczNV9pbnQ2NFVuc2lnbmVkU21pT3ZlcmZsb3dMaW1pdHMxMTUyOTIxNTA0NjA2ODQ2OTc1X2ludDY0T3ZlcmZsb3dMaW1pdHNfdHJ5UGFyc2VTbWlpeHNtaUxpbWl0X2tOdWxsX3Rocm93Rm9ybWF0RXhjZXB0aW9uSW52YWxpZCBudW1iZXJJbnZhbGlkIHJhZGl4LSBudW1iZXJhbGxvd1U2NHRhYmxlSW5kZXhibG9ja1NpemVzbWFsbEJsb2NrU2l6ZWJsb2NrRW5kbXVsdGlwbGllcnBvc2l0aXZlT3ZlcmZsb3dMaW1pdG5lZ2F0aXZlT3ZlcmZsb3dMaW1pdFhQb3NpdGl2ZSBpbnB1dCBleGNlZWRzIHRoZSBsaW1pdCBvZiBpbnRlZ2VyTmVnYXRpdmUgaW5wdXQgZXhjZWVkcyB0aGUgbGltaXQgb2YgaW50ZWdlcl9wYXJzZUJsb2NrX2luaXRJbnQ2NE92ZXJmbG93TGltaXRzSW50ZWdlcl9mcm9tRW52aXJvbm1lbnRUaGUgc291cmNlIG11c3Qgbm90IGJlIG51bGxSYWRpeCAgbm90IGluIHJhbmdlIDIuLjM2SW52b2NhdGlvbmdlbmVyaWNNZXRob2RfSW52b2NhdGlvbl9wb3NpdGlvbmFsX25hbWVkdHlwZXNwb3NpdGlvbmFsbmFtZWRfZW5zdXJlTm9uTnVsbFR5cGVzVHlwZSBhcmd1bWVudHMgbXVzdCBiZSBub24tbnVsbCwgd2FzIG51bGwgYXQgaW5kZXggX21ha2VVbm1vZGlmaWFibGVJdGVyYWJsZWdlbmVyYXRlZ2VuZXJhdG9yX0dlbmVyYXRvckl0ZXJhYmxlQmlkaXJlY3Rpb25hbEl0ZXJhdG9ybW92ZVByZXZpb3VzSXRlcmF0b3JMaXN0X2Zyb21MaXRlcmFsTGlzdF9uZXdmaWxsZWR1bm1vZGlmaWFibGVjb3B5UmFuZ2VOb3QgYmlnIGVub3VnaCB0byBob2xkICBlbGVtZW50cyBhdCBwb3NpdGlvbiB3cml0ZUl0ZXJhYmxldGFyZ2V0TGVuZ3RoTWFwTWFwRW50cnlNYXBFbnRyeShOdWxsX0hBU0hfQ09ERWNsYXNzIE51bGwgY2Fubm90IGJlIGluc3RhbnRpYXRlZF9yZXR1cm5JbnROdWxsX3JldHVybkRvdWJsZU51bGxPYmplY3RfaGFzaENvZGVSbmRfb2JqZWN0SGFzaENvZGVPYmplY3RfdG9TdHJpbmdfaGF2ZVNhbWVSdW50aW1lVHlwZU9iamVjdF9oYXZlU2FtZVJ1bnRpbWVUeXBlX2luc3RhbmNlT2ZPYmplY3RfaW5zdGFuY2VPZmluc3RhbnRpYXRvclR5cGVBcmd1bWVudHNubmJkX21vZGVfc2ltcGxlSW5zdGFuY2VPZk9iamVjdF9zaW1wbGVJbnN0YW5jZU9mX3NpbXBsZUluc3RhbmNlT2ZUcnVlX3NpbXBsZUluc3RhbmNlT2ZGYWxzZU9iamVjdF9lcXVhbHNkYXJ0OmNvcmUjX1R5cGVPYmplY3RfcnVudGltZVR5cGVQYXR0ZXJuTWF0Y2hncm91cEluZGljZXNSZWdFeHBfTUFYX0NBQ0hFX1NJWkVfcmVjZW50bHlVc2VkX2ZpbmRFc2NhcGVDaGFyAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQAAAAABAQABAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQFlc2NhcGVlc2NhcGVDaGFySW5kZXhwcmV2aW91c1NsaWNlRW5kSW5kZXgyLjRSZWdFeHBNYXRjaFNldFNpbmtTdGFja1RyYWNlZnJvbVN0cmluZ3N0YWNrVHJhY2VTdHJpbmdTdGFja1RyYWNlX2N1cnJlbnRfU3RyaW5nU3RhY2tUcmFjZVN0b3B3YXRjaF9mcmVxdWVuY3lfc3RvcF9jb21wdXRlRnJlcXVlbmN5U3RvcHdhdGNoX2ZyZXF1ZW5jeWZyZXF1ZW5jeWVsYXBzZWRUaWNrc3RpY2tzdGlja3NQZXJTZWNvbmRyZW1haW5pbmdUaWNrc2VsYXBzZWRNaWxsaXNlY29uZHNpc1J1bm5pbmdfaW5pdFRpY2tlclN0b3B3YXRjaF9ub3dTdHJpbmdmcm9tQ2hhckNvZGVzZnJvbUNoYXJDb2RlU3RyaW5nX2Zyb21FbnZpcm9ubWVudFJ1bmVzTm8gZWxlbWVudHMucHJldmlvdXNDb2RlUnVuZUl0ZXJhdG9yX25leHRQb3NpdGlvbl9jdXJyZW50Q29kZVBvaW50X2NoZWNrU3BsaXRTdXJyb2dhdGVJbmRleCBpbnNpZGUgc3Vycm9nYXRlIHBhaXI6IHJhd0luZGV4Y3VycmVudFNpemVjdXJyZW50QXNTdHJpbmdwcmV2Q29kZVVuaXRTdHJpbmdCdWZmZXJfQlVGRkVSX1NJWkVfUEFSVFNfVE9fQ09NUEFDVF9QQVJUU19UT19DT01QQUNUX1NJWkVfTElNSVRfcGFydHNDb2RlVW5pdHNfcGFydHNDb21wYWN0aW9uSW5kZXhfcGFydHNDb2RlVW5pdHNTaW5jZUNvbXBhY3Rpb25fYnVmZmVyUG9zaXRpb25fYnVmZmVyQ29kZVVuaXRNYWduaXR1ZGVjb250ZW50X2Vuc3VyZUNhcGFjaXR5X2NvbnN1bWVCdWZmZXJfYWRkUGFydHBhcnRzU2luY2VDb21wYWN0aW9uX2NvbXBhY3Rjb21wYWN0ZWRTdHJpbmdCdWZmZXJfY3JlYXRlU3RyaW5nRnJvbVVpbnQxNkFycmF5U3RyaW5nU2lua3VuYXJ5TWludXNUeXBlVXJpdXNlckluZm9xdWVyeWZyYWdtZW50YXV0aG9yaXR5dW5lbmNvZGVkUGF0aGh0dHBzZGF0YUZyb21TdHJpbmdkYXRhRnJvbUJ5dGVzYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtcGVyY2VudEVuY29kZWRxdWVyeVBhcmFtZXRlcnNBbGxoYXNTY2hlbWVoYXNBdXRob3JpdHloYXNQb3J0aGFzUXVlcnloYXNGcmFnbWVudGhhc0VtcHR5UGF0aGhhc0Fic29sdXRlUGF0aGlzU2NoZW1lcmVtb3ZlRnJhZ21lbnRyZXNvbHZlcmVmZXJlbmNlbm9ybWFsaXplUGF0aGRhdGFEZWx0YXNjaGVtZUVuZGhvc3RTdGFydHBvcnRTdGFydHBhdGhTdGFydHF1ZXJ5U3RhcnRmcmFnbWVudFN0YXJ0aXNTaW1wbGUvLi5zY2hlbWVBdXRoZmlsZTovL2ZpbGU6Ly8vNDQzZW5jb2RlQ29tcG9uZW50ZW5jb2RlUXVlcnlDb21wb25lbnRkZWNvZGVDb21wb25lbnRlbmNvZGVkQ29tcG9uZW50ZGVjb2RlUXVlcnlDb21wb25lbnRlbmNvZGVGdWxsZGVjb2RlRnVsbHNwbGl0UXVlcnlTdHJpbmdwYXJzZUlQdjRBZGRyZXNzX3BhcnNlSVB2NEFkZHJlc3NJbGxlZ2FsIElQdjQgYWRkcmVzcywgcGFydEluZGV4cGFydFN0YXJ0aW52YWxpZCBjaGFyYWN0ZXJJUHY0IGFkZHJlc3Mgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSA0IHBhcnRzZWFjaCBwYXJ0IG11c3QgYmUgaW4gdGhlIHJhbmdlIDAuLjI1NXBhcnNlSVB2NkFkZHJlc3NJbGxlZ2FsIElQdjYgYWRkcmVzcywgcGFyc2VIZXhhbiBJUHY2IHBhcnQgY2FuIG9ubHkgY29udGFpbiBhIG1heGltdW0gb2YgNCBoZXggZGlnaXRzZWFjaCBwYXJ0IG11c3QgYmUgaW4gdGhlIHJhbmdlIG9mIGAweDAuLjB4RkZGRmBhZGRyZXNzIGlzIHRvbyBzaG9ydHdpbGRjYXJkU2VlbnNlZW5Eb3RpbnZhbGlkIHN0YXJ0IGNvbG9uLm9ubHkgb25lIHdpbGRjYXJkIGA6OmAgaXMgYWxsb3dlZHRvbyBmZXcgcGFydHNhdEVuZGlzTGFzdFdpbGRjYXJkZXhwZWN0ZWQgYSBwYXJ0IGFmdGVyIGxhc3QgYDpgYW4gYWRkcmVzcyB3aXRoIGEgd2lsZGNhcmQgbXVzdCBoYXZlIGxlc3MgdGhhbiA3IHBhcnRzYW4gYWRkcmVzcyB3aXRob3V0IGEgd2lsZGNhcmQgbXVzdCBjb250YWluIGV4YWN0bHkgOCBwYXJ0c3dpbGRDYXJkTGVuZ3RoX1VyaV9pc1dpbmRvd3NDYWNoZWRfdXNlckluZm9fcXVlcnlfZnJhZ21lbnRfcGF0aFNlZ21lbnRzX3RleHRfaGFzaENvZGVDYWNoZV9xdWVyeVBhcmFtZXRlcnNfcXVlcnlQYXJhbWV0ZXJMaXN0c191bnJlc2VydmVkVGFibGVfdW5yZXNlcnZlZDIzOTZUYWJsZV9lbmNvZGVGdWxsVGFibGVfc2NoZW1lVGFibGVfc2NoZW1lTG93ZXJUYWJsZV9zdWJEZWxpbWl0ZXJzVGFibGVfZ2VuRGVsaW1pdGVyc1RhYmxlX3VzZXJpbmZvVGFibGVfcmVnTmFtZVRhYmxlX3BhdGhDaGFyVGFibGVfcGF0aENoYXJPclNsYXNoVGFibGVfcXVlcnlDaGFyVGFibGVfem9uZUlEVGFibGVfaXNXaW5kb3dzUGxhdGZvcm1VcmlfaXNXaW5kb3dzUGxhdGZvcm1ub3RTaW1wbGVJbnZhbGlkIGVtcHR5IHNjaGVtZXVzZXJJbmZvU3RhcnRJbnZhbGlkIHBvcnRhbGxvd1NjaGVtZS8vX3dyaXRlQXV0aG9yaXR5X2RlZmF1bHRQb3J0dGhpc1NjaGVtZV9jb21wYXJlU2NoZW1lc2NoZW1lQ2hhcnVyaUNoYXJsb3dlckNoYXJfZmFpbF9tYWtlSHR0cFVyaWhhc1VzZXJJbmZvaG9zdEVuZGVzY2FwZUZvclpvbmVJREludmFsaWQgSVB2NiBob3N0IGVudHJ5LkludmFsaWQgZW5kIG9mIGF1dGhvcml0eXBvcnRTdHJpbmdfY2hlY2tOb25XaW5kb3dzUGF0aFJlc2VydmVkQ2hhcmFjdGVyc3NlZ21lbnRzYXJndW1lbnRFcnJvcnNlZ21lbnRJbGxlZ2FsIHBhdGggY2hhcmFjdGVyIF9jaGVja1dpbmRvd3NQYXRoUmVzZXJ2ZWRDaGFyYWN0ZXJzZmlyc3RTZWdtZW50WyIqLzo8Pj9cXHxdSWxsZWdhbCBjaGFyYWN0ZXIgaW4gcGF0aElsbGVnYWwgY2hhcmFjdGVyIGluIHBhdGg6IF9jaGVja1dpbmRvd3NEcml2ZUxldHRlcklsbGVnYWwgZHJpdmUgbGV0dGVyIF9tYWtlRmlsZVVyaXNsYXNoVGVybWluYXRlZF9tYWtlV2luZG93c0ZpbGVVcmxcXD9cVU5DXFdpbmRvd3MgcGF0aHMgd2l0aCBcXD9cIHByZWZpeCBtdXN0IGJlIGFic29sdXRlV2luZG93cyBwYXRocyB3aXRoIGRyaXZlIGxldHRlciBtdXN0IGJlIGFic29sdXRlaG9zdFBhcnRwYXRoUGFydHNjaGVtZUNoYW5nZWRwYXRoVG9TcGxpdHF1ZXJ5UGFyYW1ldGVyTGlzdHNfbWFrZVBvcnRfbWFrZUhvc3RzdHJpY3RJUHY2TWlzc2luZyBlbmQgYF1gIHRvIG1hdGNoIGBbYCBpbiBob3N0em9uZUlEem9uZUlEc3RhcnQlMjVfY2hlY2tab25lSURfaXNab25lSURDaGFyX25vcm1hbGl6ZVpvbmVJRHNlY3Rpb25TdGFydFpvbmVJRCBzaG91bGQgbm90IGNvbnRhaW4gJSBhbnltb3JlX2lzUmVnTmFtZUNoYXJfbm9ybWFsaXplUmVnTmFtZV9tYWtlU2NoZW1lZmlyc3RDb2RlVW5pdFNjaGVtZSBub3Qgc3RhcnRpbmcgd2l0aCBhbHBoYWJldGljIGNoYXJhY3RlcmNvbnRhaW5zVXBwZXJDYXNlSWxsZWdhbCBzY2hlbWUgY2hhcmFjdGVyX2Nhbm9uaWNhbGl6ZVNjaGVtZV9tYWtlVXNlckluZm9fbWFrZVBhdGhlbnN1cmVMZWFkaW5nU2xhc2hCb3RoIHBhdGggYW5kIHBhdGhTZWdtZW50cyBzcGVjaWZpZWRlc2NhcGVEZWxpbWl0ZXJzX25vcm1hbGl6ZVBhdGhfbWFrZVF1ZXJ5Qm90aCBxdWVyeSBhbmQgcXVlcnlQYXJhbWV0ZXJzIHNwZWNpZmllZHdyaXRlUGFyYW1ldGVyX21ha2VGcmFnbWVudF9ub3JtYWxpemVFc2NhcGVsb3dlckNhc2VzZWNvbmREaWdpdGZpcnN0RGlnaXRWYWx1ZXNlY29uZERpZ2l0VmFsdWVfZXNjYXBlQ2hhcjAxMjM0NTY3ODlBQkNERUZlbmNvZGVkQnl0ZXNfbm9ybWFsaXplT3JTdWJzdHJpbmdjaGFyVGFibGVfaXNTY2hlbWVDaGFyYWN0ZXJfaXNHZW5lcmFsRGVsaW1pdGVyX21lcmdlUGF0aHNiYWNrQ291bnRyZWZTdGFydC4uL2Jhc2VFbmRfbWF5Q29udGFpbkRvdFNlZ21lbnRzLy5fcmVtb3ZlRG90U2VnbWVudHNhcHBlbmRTbGFzaF9ub3JtYWxpemVSZWxhdGl2ZVBhdGguL19lc2NhcGVTY2hlbWUlM0F0YXJnZXRTY2hlbWV0YXJnZXRVc2VySW5mb3RhcmdldEhvc3R0YXJnZXRQb3J0dGFyZ2V0UGF0aHRhcmdldFF1ZXJ5bWVyZ2VkUGF0aENhbm5vdCB1c2Ugb3JpZ2luIHdpdGhvdXQgYSBzY2hlbWU6IE9yaWdpbiBpcyBvbmx5IGFwcGxpY2FibGUgc2NoZW1lcyBodHRwIGFuZCBodHRwczogQSA6IFVSSSBzaG91bGQgaGF2ZSBhIG5vbi1lbXB0eSBob3N0IG5hbWU6IDovL0Nhbm5vdCBleHRyYWN0IGEgZmlsZSBwYXRoIGZyb20gYSAgVVJJQ2Fubm90IGV4dHJhY3QgYSBmaWxlIHBhdGggZnJvbSBhIFVSSSB3aXRoIGEgcXVlcnkgY29tcG9uZW50Q2Fubm90IGV4dHJhY3QgYSBmaWxlIHBhdGggZnJvbSBhIFVSSSB3aXRoIGEgZnJhZ21lbnQgY29tcG9uZW50X3RvRmlsZVBhdGhDYW5ub3QgZXh0cmFjdCBhIG5vbi1XaW5kb3dzIGZpbGUgcGF0aCBmcm9tIGEgZmlsZSBVUkkgd2l0aCBhbiBhdXRob3JpdHlfdG9XaW5kb3dzRmlsZVBhdGhoYXNEcml2ZUxldHRlcl9pc1BhdGhBYnNvbHV0ZV9pbml0aWFsaXplVGV4dD8jX3NwbGl0UXVlcnlTdHJpbmdBbGxwYXJzZVBhaXJfdXJpRW5jb2RlY2Fub25pY2FsVGFibGVzcGFjZVRvUGx1c19oZXhDaGFyUGFpclRvQnl0ZUludmFsaWQgVVJMIGVuY29kaW5nX3VyaURlY29kZXBsdXNUb1NwYWNlc2ltcGxlSWxsZWdhbCBwZXJjZW50IGVuY29kaW5nIGluIFVSSVRydW5jYXRlZCBVUklfaXNBbHBoYWJldGljQ2hhcmFjdGVyX2lzVW5yZXNlcnZlZENoYXJVcmlEYXRhX25vU2NoZW1lX3NlcGFyYXRvckluZGljZXNfdXJpQ2FjaGVfYmFzZTY0X3Rva2VuQ2hhclRhYmxlX3VyaWNUYWJsZV9iYXNlNjRUYWJsZWNoYXJzZXROYW1lZW5jb2RpbmdOYW1lO2Jhc2U2NCxmcm9tQnl0ZXNTY2hlbWUgbXVzdCBiZSAnZGF0YSdEYXRhIHVyaSBtdXN0IG5vdCBoYXZlIGF1dGhvcml0eURhdGEgdXJpIG11c3Qgbm90IGhhdmUgYSBmcmFnbWVudCBwYXJ0X3dyaXRlVXJpdGV4dC9wbGFpbnNsYXNoSW5kZXhJbnZhbGlkIE1JTUUgdHlwZTtjaGFyc2V0PVBhcmFtZXRlciBuYW1lcyBtdXN0IG5vdCBiZSBlbXB0eVBhcmFtZXRlciB2YWx1ZXMgbXVzdCBub3QgYmUgZW1wdHlwYXJhbWV0ZXJzWyIiXTtfdmFsaWRhdGVNaW1lVHlwZURvZXMgbm90IHN0YXJ0IHdpdGggJ2RhdGE6J2NvbG9uSW5kZXhxdWVyeUluZGV4cGFyYW1ldGVyU3RhcnRwYXJhbWV0ZXJFbmRpc0Jhc2U2NGtleVN0YXJ0a2V5RW5kVVMtQVNDSUljb250ZW50VGV4dGNvbnRlbnRBc0J5dGVzSW52YWxpZCBwZXJjZW50IGVzY2FwZWNvbnRlbnRBc1N0cmluZ1Vua25vd24gY2hhcnNldDogbGFzdFNlcGFyYXRvckV4cGVjdGluZyAnPSdfdXJpRW5jb2RlQnl0ZXNub24tYnl0ZSB2YWx1ZV9TaW1wbGVVcmlfdXJpX3NjaGVtZUVuZF9ob3N0U3RhcnRfcG9ydFN0YXJ0X3BhdGhTdGFydF9xdWVyeVN0YXJ0X2ZyYWdtZW50U3RhcnRfc2NoZW1lQ2FjaGVfaXNGaWxlX2lzSHR0cF9pc0h0dHBzX2lzUGFja2FnZV9pc1NjaGVtZWlzSHR0cE9yaWdpbiBpcyBvbmx5IGFwcGxpY2FibGUgdG8gc2NoZW1lcyBodHRwIGFuZCBodHRwczogX2lzUG9ydHBvcnREaWdpdFN0YXJ0X3NpbXBsZU1lcmdlX3RvTm9uU2ltcGxlbmV3VXJpYmFzZVVyaXJlZlVyaWJhc2VTdGFydHJlZkVuZF9EYXRhVXJpX21heEFzY2lpX21heExhdGluMV9tYXhVdGYxNl9tYXhVbmljb2RlZGVwcmVjYXRlZHByb3Zpc2lvbmFscHJveHlfU1BBQ0VfUEVSQ0VOVF9BTVBFUlNBTkRfUExVU19ET1RfU0xBU0hfQ09MT05fRVFVQUxTX1VQUEVSX0NBU0VfQV9VUFBFUl9DQVNFX1pfTEVGVF9CUkFDS0VUX0JBQ0tTTEFTSF9SSUdIVF9CUkFDS0VUX0xPV0VSX0NBU0VfQV9MT1dFUl9DQVNFX0ZfTE9XRVJfQ0FTRV9aX2hleERpZ2l0c19zY2hlbWVFbmRJbmRleF9ob3N0U3RhcnRJbmRleF9wb3J0U3RhcnRJbmRleF9wYXRoU3RhcnRJbmRleF9xdWVyeVN0YXJ0SW5kZXhfZnJhZ21lbnRTdGFydEluZGV4X25vdFNpbXBsZUluZGV4X3VyaVN0YXJ0X25vblNpbXBsZUVuZFN0YXRlc19zY2hlbWVTdGFydF9zY2FubmVyVGFibGVzX21heF9taW5fbmV3RGlnaXRzX2dldEhhc2hPYmplY3RfZ2V0SGFzaF9zZXRIYXNoT2JqZWN0X3NldEhhc2hfdW5zdXBwb3J0ZWRVcmlCYXNlJ1VyaS5iYXNlJyBpcyBub3Qgc3VwcG9ydGVkSWRlbnRpY2FsX2NvbXBhcmlzb25pZGVudGl0eUhhc2hDb2RlX2NyZWF0ZVRhYmxlc3RhYmxlc2RlZmF1bHRUcmFuc2l0aW9uc2V0Q2hhcnN0cmFuc2l0aW9uMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXotLl9+ISQmJygpKissOz1BWjA5YXorLS5fc2Nhbl9zdGFydHNXaXRoRGF0YV9zdHJpbmdPck51bGxMZW5ndGhkYXJ0Ll9odHRwY3J5cHRvLmRhcnRodHRwX2RhdGUuZGFydGh0dHBfaGVhZGVycy5kYXJ0aHR0cF9pbXBsLmRhcnRodHRwX3BhcnNlci5kYXJ0aHR0cF9zZXNzaW9uLmRhcnR3ZWJzb2NrZXQuZGFydHdlYnNvY2tldF9pbXBsLmRhcnRfQnl0ZXNDb25zdW1lckJhZENlcnRpZmljYXRlQ2FsbGJhY2tjcl9Qcm90b2NvbFNlbGVjdG9ySHR0cFNlcnZlcnNlcnZlckhlYWRlcmF1dG9Db21wcmVzc2lkbGVUaW1lb3V0ZGVmYXVsdFJlc3BvbnNlSGVhZGVyc2JpbmRTZWN1cmVsaXN0ZW5PbnNlc3Npb25UaW1lb3V0Y29ubmVjdGlvbnNJbmZvSHR0cENvbm5lY3Rpb25zSW5mb3RvdGFsYWN0aXZlaWRsZWNsb3NpbmdIdHRwSGVhZGVyc2FjY2VwdEhlYWRlcmFjY2VwdENoYXJzZXRIZWFkZXJhY2NlcHQtY2hhcnNldGFjY2VwdEVuY29kaW5nSGVhZGVyYWNjZXB0LWVuY29kaW5nYWNjZXB0TGFuZ3VhZ2VIZWFkZXJhY2NlcHQtbGFuZ3VhZ2VhY2NlcHRSYW5nZXNIZWFkZXJhY2NlcHQtcmFuZ2VzYWdlSGVhZGVyYWdlYWxsb3dIZWFkZXJhbGxvd2F1dGhvcml6YXRpb25IZWFkZXJhdXRob3JpemF0aW9uY2FjaGVDb250cm9sSGVhZGVyY2FjaGUtY29udHJvbGNvbm5lY3Rpb25IZWFkZXJjb250ZW50RW5jb2RpbmdIZWFkZXJjb250ZW50LWVuY29kaW5nY29udGVudExhbmd1YWdlSGVhZGVyY29udGVudC1sYW5ndWFnZWNvbnRlbnRMZW5ndGhIZWFkZXJjb250ZW50LWxlbmd0aGNvbnRlbnRMb2NhdGlvbkhlYWRlcmNvbnRlbnQtbG9jYXRpb25jb250ZW50TUQ1SGVhZGVyY29udGVudC1tZDVjb250ZW50UmFuZ2VIZWFkZXJjb250ZW50LXJhbmdlY29udGVudFR5cGVIZWFkZXJjb250ZW50LXR5cGVkYXRlSGVhZGVyZGF0ZWV0YWdIZWFkZXJldGFnZXhwZWN0SGVhZGVyZXhwZWN0ZXhwaXJlc0hlYWRlcmZyb21IZWFkZXJob3N0SGVhZGVyaWZNYXRjaEhlYWRlcmlmLW1hdGNoaWZNb2RpZmllZFNpbmNlSGVhZGVyaWYtbW9kaWZpZWQtc2luY2VpZk5vbmVNYXRjaEhlYWRlcmlmLW5vbmUtbWF0Y2hpZlJhbmdlSGVhZGVyaWYtcmFuZ2VpZlVubW9kaWZpZWRTaW5jZUhlYWRlcmlmLXVubW9kaWZpZWQtc2luY2VsYXN0TW9kaWZpZWRIZWFkZXJsYXN0LW1vZGlmaWVkbG9jYXRpb25IZWFkZXJtYXhGb3J3YXJkc0hlYWRlcm1heC1mb3J3YXJkc3ByYWdtYUhlYWRlcnByb3h5QXV0aGVudGljYXRlSGVhZGVycHJveHktYXV0aGVudGljYXRlcHJveHlBdXRob3JpemF0aW9uSGVhZGVycHJveHktYXV0aG9yaXphdGlvbnJhbmdlSGVhZGVycmVmZXJlckhlYWRlcnJlZmVyZXJyZXRyeUFmdGVySGVhZGVycmV0cnktYWZ0ZXJ0ZUhlYWRlcnRldHJhaWxlckhlYWRlcnRyYWlsZXJ0cmFuc2ZlckVuY29kaW5nSGVhZGVydHJhbnNmZXItZW5jb2Rpbmd1cGdyYWRlSGVhZGVydXBncmFkZXVzZXJBZ2VudEhlYWRlcnVzZXItYWdlbnR2YXJ5SGVhZGVydmFyeXZpYUhlYWRlcnZpYXdhcm5pbmdIZWFkZXJ3YXJuaW5nd3d3QXV0aGVudGljYXRlSGVhZGVyd3d3LWF1dGhlbnRpY2F0ZUFDQ0VQVFVzZSBhY2NlcHRIZWFkZXIgaW5zdGVhZEFDQ0VQVF9DSEFSU0VUVXNlIGFjY2VwdENoYXJzZXRIZWFkZXIgaW5zdGVhZEFDQ0VQVF9FTkNPRElOR1VzZSBhY2NlcHRFbmNvZGluZ0hlYWRlciBpbnN0ZWFkQUNDRVBUX0xBTkdVQUdFVXNlIGFjY2VwdExhbmd1YWdlSGVhZGVyIGluc3RlYWRBQ0NFUFRfUkFOR0VTVXNlIGFjY2VwdFJhbmdlc0hlYWRlciBpbnN0ZWFkQUdFVXNlIGFnZUhlYWRlciBpbnN0ZWFkQUxMT1dVc2UgYWxsb3dIZWFkZXIgaW5zdGVhZEFVVEhPUklaQVRJT05Vc2UgYXV0aG9yaXphdGlvbkhlYWRlciBpbnN0ZWFkQ0FDSEVfQ09OVFJPTFVzZSBjYWNoZUNvbnRyb2xIZWFkZXIgaW5zdGVhZENPTk5FQ1RJT05Vc2UgY29ubmVjdGlvbkhlYWRlciBpbnN0ZWFkQ09OVEVOVF9FTkNPRElOR1VzZSBjb250ZW50RW5jb2RpbmdIZWFkZXIgaW5zdGVhZENPTlRFTlRfTEFOR1VBR0VVc2UgY29udGVudExhbmd1YWdlSGVhZGVyIGluc3RlYWRDT05URU5UX0xFTkdUSFVzZSBjb250ZW50TGVuZ3RoSGVhZGVyIGluc3RlYWRDT05URU5UX0xPQ0FUSU9OVXNlIGNvbnRlbnRMb2NhdGlvbkhlYWRlciBpbnN0ZWFkQ09OVEVOVF9NRDVVc2UgY29udGVudE1ENUhlYWRlciBpbnN0ZWFkQ09OVEVOVF9SQU5HRVVzZSBjb250ZW50UmFuZ2VIZWFkZXIgaW5zdGVhZENPTlRFTlRfVFlQRVVzZSBjb250ZW50VHlwZUhlYWRlciBpbnN0ZWFkREFURVVzZSBkYXRlSGVhZGVyIGluc3RlYWRFVEFHVXNlIGV0YWdIZWFkZXIgaW5zdGVhZEVYUEVDVFVzZSBleHBlY3RIZWFkZXIgaW5zdGVhZEVYUElSRVNVc2UgZXhwaXJlc0hlYWRlciBpbnN0ZWFkRlJPTVVzZSBmcm9tSGVhZGVyIGluc3RlYWRIT1NUVXNlIGhvc3RIZWFkZXIgaW5zdGVhZElGX01BVENIVXNlIGlmTWF0Y2hIZWFkZXIgaW5zdGVhZElGX01PRElGSUVEX1NJTkNFVXNlIGlmTW9kaWZpZWRTaW5jZUhlYWRlciBpbnN0ZWFkSUZfTk9ORV9NQVRDSFVzZSBpZk5vbmVNYXRjaEhlYWRlciBpbnN0ZWFkSUZfUkFOR0VVc2UgaWZSYW5nZUhlYWRlciBpbnN0ZWFkSUZfVU5NT0RJRklFRF9TSU5DRVVzZSBpZlVubW9kaWZpZWRTaW5jZUhlYWRlciBpbnN0ZWFkTEFTVF9NT0RJRklFRFVzZSBsYXN0TW9kaWZpZWRIZWFkZXIgaW5zdGVhZExPQ0FUSU9OVXNlIGxvY2F0aW9uSGVhZGVyIGluc3RlYWRNQVhfRk9SV0FSRFNVc2UgbWF4Rm9yd2FyZHNIZWFkZXIgaW5zdGVhZFBSQUdNQVVzZSBwcmFnbWFIZWFkZXIgaW5zdGVhZFBST1hZX0FVVEhFTlRJQ0FURVVzZSBwcm94eUF1dGhlbnRpY2F0ZUhlYWRlciBpbnN0ZWFkUFJPWFlfQVVUSE9SSVpBVElPTlVzZSBwcm94eUF1dGhvcml6YXRpb25IZWFkZXIgaW5zdGVhZFJBTkdFVXNlIHJhbmdlSGVhZGVyIGluc3RlYWRSRUZFUkVSVXNlIHJlZmVyZXJIZWFkZXIgaW5zdGVhZFJFVFJZX0FGVEVSVXNlIHJldHJ5QWZ0ZXJIZWFkZXIgaW5zdGVhZFNFUlZFUlVzZSBzZXJ2ZXJIZWFkZXIgaW5zdGVhZFRFVXNlIHRlSGVhZGVyIGluc3RlYWRUUkFJTEVSVXNlIHRyYWlsZXJIZWFkZXIgaW5zdGVhZFRSQU5TRkVSX0VOQ09ESU5HVXNlIHRyYW5zZmVyRW5jb2RpbmdIZWFkZXIgaW5zdGVhZFVQR1JBREVVc2UgdXBncmFkZUhlYWRlciBpbnN0ZWFkVVNFUl9BR0VOVFVzZSB1c2VyQWdlbnRIZWFkZXIgaW5zdGVhZFZBUllVc2UgdmFyeUhlYWRlciBpbnN0ZWFkVklBVXNlIHZpYUhlYWRlciBpbnN0ZWFkV0FSTklOR1VzZSB3YXJuaW5nSGVhZGVyIGluc3RlYWRXV1dfQVVUSEVOVElDQVRFVXNlIHd3d0F1dGhlbnRpY2F0ZUhlYWRlciBpbnN0ZWFkY29va2llSGVhZGVyY29va2llc2V0Q29va2llSGVhZGVyc2V0LWNvb2tpZUNPT0tJRVVzZSBjb29raWVIZWFkZXIgaW5zdGVhZFNFVF9DT09LSUVVc2Ugc2V0Q29va2llSGVhZGVyIGluc3RlYWRnZW5lcmFsSGVhZGVyc0dFTkVSQUxfSEVBREVSU1VzZSBnZW5lcmFsSGVhZGVycyBpbnN0ZWFkZW50aXR5SGVhZGVyc0VOVElUWV9IRUFERVJTVXNlIGVudGl0eUhlYWRlcnMgaW5zdGVhZHJlc3BvbnNlSGVhZGVyc1JFU1BPTlNFX0hFQURFUlNVc2UgcmVzcG9uc2VIZWFkZXJzIGluc3RlYWRyZXF1ZXN0SGVhZGVyc1JFUVVFU1RfSEVBREVSU1VzZSByZXF1ZXN0SGVhZGVycyBpbnN0ZWFkaWZNb2RpZmllZFNpbmNlY29udGVudExlbmd0aHBlcnNpc3RlbnRDb25uZWN0aW9uY2h1bmtlZFRyYW5zZmVyRW5jb2Rpbmdub0ZvbGRpbmdIZWFkZXJWYWx1ZXBhcmFtZXRlclNlcGFyYXRvcnZhbHVlU2VwYXJhdG9ycHJlc2VydmVCYWNrc2xhc2hIdHRwU2Vzc2lvbmlzTmV3Q29udGVudFR5cGVwbGFpblRFWFRVc2UgdGV4dCBpbnN0ZWFkaHRtbEhUTUxVc2UgaHRtbCBpbnN0ZWFkSlNPTlVzZSBqc29uIGluc3RlYWRiaW5hcnlvY3RldC1zdHJlYW1CSU5BUllVc2UgYmluYXJ5IGluc3RlYWRwcmltYXJ5VHlwZXN1YlR5cGVDb29raWVtYXhBZ2Vkb21haW5odHRwT25seWZyb21TZXRDb29raWVWYWx1ZUh0dHBSZXF1ZXN0cmVxdWVzdGVkVXJpY29va2llc3Nlc3Npb25wcm90b2NvbFZlcnNpb25jb25uZWN0aW9uSW5mb0h0dHBSZXNwb25zZXJlYXNvblBocmFzZWRlYWRsaW5lYnVmZmVyT3V0cHV0ZGV0YWNoU29ja2V0d3JpdGVIZWFkZXJzZGVmYXVsdEh0dHBQb3J0REVGQVVMVF9IVFRQX1BPUlRVc2UgZGVmYXVsdEh0dHBQb3J0IGluc3RlYWRkZWZhdWx0SHR0cHNQb3J0REVGQVVMVF9IVFRQU19QT1JUVXNlIGRlZmF1bHRIdHRwc1BvcnQgaW5zdGVhZF9lbmFibGVUaW1lbGluZUxvZ2dpbmdjb25uZWN0aW9uVGltZW91dG1heENvbm5lY3Rpb25zUGVySG9zdGF1dG9VbmNvbXByZXNzdXNlckFnZW50ZW5hYmxlVGltZWxpbmVMb2dnaW5nY3JlYXRlSHR0cENsaWVudG9wZW5VcmxnZXRVcmxwb3N0VXJscHV0cHV0VXJsZGVsZXRlVXJscGF0Y2hVcmxoZWFkaGVhZFVybGF1dGhlbnRpY2F0ZWFkZENyZWRlbnRpYWxzcmVhbG1jcmVkZW50aWFsc2ZpbmRQcm94eWZpbmRQcm94eUZyb21FbnZpcm9ubWVudGF1dGhlbnRpY2F0ZVByb3h5YWRkUHJveHlDcmVkZW50aWFsc2JhZENlcnRpZmljYXRlQ2FsbGJhY2tIdHRwQ2xpZW50UmVxdWVzdGZvbGxvd1JlZGlyZWN0c21heFJlZGlyZWN0c0h0dHBDbGllbnRSZXNwb25zZWNvbXByZXNzaW9uU3RhdGVpc1JlZGlyZWN0cmVkaXJlY3RzZm9sbG93TG9vcHNIdHRwQ2xpZW50UmVzcG9uc2VDb21wcmVzc2lvblN0YXRlSHR0cENsaWVudFJlc3BvbnNlQ29tcHJlc3Npb25TdGF0ZS5ub3RDb21wcmVzc2VkSHR0cENsaWVudFJlc3BvbnNlQ29tcHJlc3Npb25TdGF0ZS5kZWNvbXByZXNzZWRIdHRwQ2xpZW50UmVzcG9uc2VDb21wcmVzc2lvblN0YXRlLmNvbXByZXNzZWRub3RDb21wcmVzc2VkZGVjb21wcmVzc2VkY29tcHJlc3NlZEh0dHBDbGllbnRDcmVkZW50aWFsc0h0dHBDbGllbnRCYXNpY0NyZWRlbnRpYWxzdXNlcm5hbWVIdHRwQ2xpZW50RGlnZXN0Q3JlZGVudGlhbHNIdHRwQ29ubmVjdGlvbkluZm9SZWRpcmVjdEluZm9EZXRhY2hlZFNvY2tldHVucGFyc2VkRGF0YUh0dHBFeGNlcHRpb25IdHRwRXhjZXB0aW9uOiAsIHVyaSA9IFJlZGlyZWN0RXhjZXB0aW9uUmVkaXJlY3RFeGNlcHRpb246IF9DcnlwdG9VdGlsc1BBRENSTEZMSU5FX0xFTkdUSF9lbmNvZGVUYWJsZV9lbmNvZGVUYWJsZVVybFNhZmVfZGVjb2RlVGFibGVfcm5nYnl0ZXNUb0hleGJ5dGVzVG9CYXNlNjRhZGRMaW5lU2VwYXJhdG9yY2h1bmtMZW5ndGhvdXRwdXRMZW5iYXNlNjRTdHJpbmdUb0J5dGVzaWdub3JlSW52YWxpZENoYXJhY3RlcnNleHRyYXNMZW5JbnZhbGlkIGNoYXJhY3RlcjogU2l6ZSBvZiBCYXNlIDY0IGNoYXJhY3RlcnMgaW4gSW5wdXQKICAgICAgICAgIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0LiBJbnB1dDogY3VycmVudENvZGVVbml0X2NodW5rU2l6ZUluV29yZHNfZGlnZXN0U2l6ZUluV29yZHNfYmlnRW5kaWFuV29yZHNfbGVuZ3RoSW5CeXRlc19wZW5kaW5nRGF0YV9jdXJyZW50Q2h1bmtfaF9kaWdlc3RDYWxsZWRIYXNoIHVwZGF0ZSBtZXRob2QgY2FsbGVkIGFmdGVyIGRpZ2VzdCB3YXMgcmV0cmlldmVkX2l0ZXJhdGVfcmVzdWx0QXNCeXRlc19maW5hbGl6ZURhdGFfdXBkYXRlSGFzaF9hZGQzMl9yb3VuZFVwX3JvdGwzMm1vZF9zaGlmdF93b3JkVG9CeXRlc19ieXRlc1RvQ2h1bmtkYXRhSW5kZXh3b3JkSW5kZXh3M3cydzF3MHdvcmRjaHVua1NpemVJbkJ5dGVzY29udGVudHNMZW5ndGhmaW5hbGl6ZWRMZW5ndGh6ZXJvUGFkZGluZ2xlbmd0aEluQml0c19NRDVfazM2MTQwOTAzNjAzOTA1NDAyNzEwMzI1MDQ0MTk2NjQxMTg1NDgzOTkxMjAwMDgwNDI2MjgyMTczNTk1NTQyNDkyNjEzMTMxNzcwMDM1NDE2MjMzNjU1Mjg3OTQyOTQ5MjUyMzMyMzA0NTYzMTM0MTgwNDYwMzY4MjQyNTQ2MjYxOTUyNzkyOTY1MDA2MTIzNjUzNTMyOTQxMjkxNzA3ODYzMjI1NDY1NjY0MzkyMTA2OTk5NDM1OTM0MDg2MDUzNjM0NDg4OTYxMzg4OTQyOTQ0ODMyNzUxNjM2MDY0MTA3NjAzMzM1MTE2MzUzMTUwMTI4NTAyODU4Mjk0MjQzNTYzNTEyMTczNTMyODQ3MzIzNjgzNTk1NjI0Mjk0NTg4NzM4MjI3MjM5MjgzMzE4MzkwMzA1NjI0MjU5NjU3NzQwMjc2Mzk3NTIzNjEyNzI4OTMzNTM0MTM5NDY5NjY0MzIwMDIzNjY1NjM5MzY0MzAwNzQzNTcyNDQ1MzE3MzY1NDYwMjgwOTM4NzMxNTE0NjEzMjk5NjI4NjQ1NDA5NjMzNjQ1MjExMjY4OTE0MTUyODc4NjEyMzkxNDIzNzUzMzI0MTE3MDA0ODU1NzEyMzk5OTgwNjkwNDI5MzkxNTc3MzIyNDAwNDQ0OTcxODczMzEzMzU5NDI2NDM1NTU1MjI3MzQ3Njg5MTYxMzA5MTUxNjQ5NDE0OTQ0NDIyNjMxNzQ3NTY5MTczOTUxNDgxNzQ1X3IxNzMyNTg0MTkzNDAyMzIzMzQxNzI1NjIzODMxMDJ0MHQxX1NIQTFfdzMyODUzNzc1MjAxNTE4NTAwMjQ5MTg1OTc3NTM5MzI0MDA5NTk3MDgzMzk1NDY5NzgySHR0cERhdGVNb25UdWVXZWRUaHVGcmlTYXRTdW5KYW5GZWJNYXJBcHJNYXlKdW5KdWxBdWdTZXBPY3ROb3ZEZWMgMDowIEdNVFNQZm9ybWF0UmZjMTEyM2Zvcm1hdFJmYzg1MGZvcm1hdEFzY3RpbWVJbnZhbGlkIEhUVFAgZGF0ZSBleHBlY3RXZWVrZGF5TW9uZGF5VHVlc2RheVdlZG5lc2RheVRodXJzZGF5RnJpZGF5U2F0dXJkYXlTdW5kYXlleHBlY3RNb250aGV4cGVjdE51bWV4cGVjdEVuZEdNVF9wYXJzZUNvb2tpZURhdGVJbnZhbGlkIGNvb2tpZSBkYXRlIGlzRW5kaXNEZWxpbWl0ZXJpc05vbkRlbGltaXRlcmlzRGlnaXRnZXRNb250aGphbmZlYm1hcmFwcmp1bmp1bGF1Z29jdG5vdmRlY3RpbWVTdHJkYXlPZk1vbnRoU3RybW9udGhTdHJ5ZWFyU3RydG9rZW5kYXlPZk1vbnRodGltZUxpc3RfSHR0cEhlYWRlcnNfaGVhZGVyc19tdXRhYmxlX25vRm9sZGluZ0hlYWRlcnNfY29udGVudExlbmd0aF9wZXJzaXN0ZW50Q29ubmVjdGlvbl9jaHVua2VkVHJhbnNmZXJFbmNvZGluZ19kZWZhdWx0UG9ydEZvclNjaGVtZWRlZmF1bHRQb3J0Rm9yU2NoZW1laW5pdGlhbEhlYWRlcnNNb3JlIHRoYW4gb25lIHZhbHVlIGZvciBoZWFkZXIgX2NoZWNrTXV0YWJsZV9hZGRBbGxjaHVua2VkMS4xVHJ5aW5nIHRvIHNldCAnQ29ubmVjdGlvbjogS2VlcC1BbGl2ZScgb24gSFRUUCAxLjAgaGVhZGVycyB3aXRoIG5vIENvbnRlbnRMZW5ndGhrZWVwLWFsaXZlVHJ5aW5nIHRvIGNsZWFyIENvbnRlbnRMZW5ndGggb24gSFRUUCAxLjAgaGVhZGVycyB3aXRoICdDb25uZWN0aW9uOiBLZWVwLUFsaXZlJyBzZXRUcnlpbmcgdG8gc2V0ICdUcmFuc2Zlci1FbmNvZGluZzogQ2h1bmtlZCcgb24gSFRUUCAxLjAgaGVhZGVyc19hZGRWYWx1ZV91cGRhdGVIb3N0SGVhZGVyZm9ybWF0dGVkX2FkZERhdGVfYWRkSG9zdF9hZGRFeHBpcmVzX2FkZENvbm5lY3Rpb25fYWRkQ29udGVudFR5cGVfYWRkQ29udGVudExlbmd0aF9hZGRUcmFuc2ZlckVuY29kaW5nX2FkZElmTW9kaWZpZWRTaW5jZVVuZXhwZWN0ZWQgdHlwZSBmb3IgaGVhZGVyIG5hbWVkIGxvd2VyQ2FzZVZhbHVlSFRUUCBoZWFkZXJzIGFyZSBub3QgbXV0YWJsZWRlZmF1bHRQb3J0X2ZvbGRIZWFkZXJfYnVpbGRuYW1lRGF0YV9wYXJzZUNvb2tpZXNwYXJzZUNvb2tpZVN0cmluZ3NraXBXU3BhcnNlTmFtZXBhcnNlVmFsdWVleHBlY3RlZGhlYWRlclZhbHVlX3ZhbGlkYXRlRmllbGRmaWVsZEludmFsaWQgSFRUUCBoZWFkZXIgZmllbGQgbmFtZTogX3ZhbGlkYXRlVmFsdWVJbnZhbGlkIEhUVFAgaGVhZGVyIGZpZWxkIHZhbHVlOiBfSGVhZGVyVmFsdWVfdW5tb2RpZmlhYmxlUGFyYW1ldGVyc19lbnN1cmVQYXJhbWV0ZXJzRmFpbGVkIHRvIHBhcnNlIGhlYWRlciB2YWx1ZW1heWJlRXhwZWN0cGFyc2VQYXJhbWV0ZXJzcGFyc2VQYXJhbWV0ZXJOYW1lcGFyc2VQYXJhbWV0ZXJWYWx1ZV9Db250ZW50VHlwZV9wcmltYXJ5VHlwZV9zdWJUeXBlbG93ZXJDYXNlS2V5X0Nvb2tpZV9wYXJzZVNldENvb2tpZVZhbHVlbmV3TmFtZXBhcnNlQXR0cmlidXRlc3BhcnNlQXR0cmlidXRlTmFtZXBhcnNlQXR0cmlidXRlVmFsdWVtYXgtYWdlaHR0cG9ubHlGYWlsZWQgdG8gcGFyc2UgaGVhZGVyIHZhbHVlIFs7IEV4cGlyZXM9OyBNYXgtQWdlPTsgRG9tYWluPTsgUGF0aD07IFNlY3VyZTsgSHR0cE9ubHlfdmFsaWRhdGVOYW1lSW52YWxpZCBjaGFyYWN0ZXIgaW4gY29va2llIG5hbWUsIGNvZGUgdW5pdDogJ0ludmFsaWQgY2hhcmFjdGVyIGluIGNvb2tpZSB2YWx1ZSwgY29kZSB1bml0OiAnX0lOSVRfU0laRV9IdHRwSW5jb21pbmdfdHJhbnNmZXJMZW5ndGhfZGF0YUNvbXBsZXRlcmZ1bGxCb2R5UmVhZHVwZ3JhZGVkaGFzU3Vic2NyaWJlcnRyYW5zZmVyTGVuZ3RoZGF0YURvbmVfSHR0cEluYm91bmRNZXNzYWdlTGlzdEludF9pbmNvbWluZ19jb29raWVzX0h0dHBJbmJvdW5kTWVzc2FnZV9IdHRwUmVxdWVzdF9odHRwU2VydmVyX2h0dHBDb25uZWN0aW9uX3Nlc3Npb25fcmVxdWVzdGVkVXJpX3Nlc3Npb25NYW5hZ2VySW5zdGFuY2VzZXNzaW9uSWRzREFSVFNFU1NJRHNlc3Npb25JZF9zZXNzaW9uTWFuYWdlcmdldFNlc3Npb25fbWFya1NlZW54LWZvcndhcmRlZC1wcm90b2hvc3RMaXN0eC1mb3J3YXJkZWQtaG9zdF9kZXN0cm95ZWRjcmVhdGVTZXNzaW9uX0h0dHBDbGllbnRSZXNwb25zZV9odHRwQ2xpZW50X2h0dHBSZXF1ZXN0X3Jlc3BvbnNlUmVkaXJlY3RzX2dldENvbXByZXNzaW9uU3RhdGVodHRwQ2xpZW50X2h0dHBDbGllbnRDb25uZWN0aW9uSEVBRFBPU1RSZXNwb25zZSBoYXMgbm8gTG9jYXRpb24gaGVhZGVyIGZvciByZWRpcmVjdFJlZGlyZWN0IGxvb3AgZGV0ZWN0ZWRfb3BlblVybEZyb21SZXF1ZXN0X2Nvbm5lY3Rpb25DbG9zZWRfc2hvdWxkQXV0aGVudGljYXRlUHJveHljaGFsbGVuZ2Vfc2hvdWxkQXV0aGVudGljYXRlX2F1dGhlbnRpY2F0ZXByb3h5QXV0aF90aW1lbGluZUF1dGhlbnRpY2F0aW9ucmV0cnlSZXRyeWluZ2F1dGhDaGFsbGVuZ2VmaW5kQ3JlZGVudGlhbHNfZmluZFByb3h5Q3JlZGVudGlhbHNfcHJveHlfZmluZENyZWRlbnRpYWxzcmVtb3ZlQ3JlZGVudGlhbHNfcmVtb3ZlUHJveHlDcmVkZW50aWFsc19yZW1vdmVDcmVkZW50aWFsc3JlcXVlc3RBdXRoZW50aWNhdGlvbl9hdXRoZW50aWNhdGVQcm94eWhlYWRlcmFsZ29yaXRobW1kNW5vbmNlTUQ1cW9wbm9uY2VDb3VudHN0YWxlY3JlZHNBdmFpbGFibGVfVG9VaW50OExpc3RfVWludDhMaXN0Q29udmVyc2lvblNpbmt0YXJnZXRBZGRTdHJlYW1fSHR0cE91dGJvdW5kTWVzc2FnZV9lbmNvZGluZ1NldF9idWZmZXJPdXRwdXRfb3V0Z29pbmdvdXRnb2luZ291dGJvdW5kaGVhZGVyc1dyaXR0ZW5IZWFkZXIgYWxyZWFkeSBzZW50X3dyaXRlSGVhZGVyX2lzQ29ubmVjdGlvbkNsb3NlZF9IdHRwUmVzcG9uc2Vfc3RhdHVzQ29kZV9yZWFzb25QaHJhc2VfZGVhZGxpbmVfZGVhZGxpbmVUaW1lcmRlZmF1bHRIZWFkZXJzX2lzQ2xvc2luZ19maW5kUmVhc29uUGhyYXNlSGVhZGVycyBhbHJlYWR5IHNlbnRoZWFkZXJzRnV0dXJlZHJhaW5SZXF1ZXN0c2V0T3V0Z29pbmdfaXNOZXdoZWFkZXJCeXRlc3NldEhlYWRlckNvbnRpbnVlU3dpdGNoaW5nIFByb3RvY29sc0NyZWF0ZWRBY2NlcHRlZE5vbi1BdXRob3JpdGF0aXZlIEluZm9ybWF0aW9uTm8gQ29udGVudFJlc2V0IENvbnRlbnRQYXJ0aWFsIENvbnRlbnRNdWx0aXBsZSBDaG9pY2VzTW92ZWQgUGVybWFuZW50bHlGb3VuZFNlZSBPdGhlck5vdCBNb2RpZmllZFVzZSBQcm94eVRlbXBvcmFyeSBSZWRpcmVjdEJhZCBSZXF1ZXN0VW5hdXRob3JpemVkUGF5bWVudCBSZXF1aXJlZEZvcmJpZGRlbk5vdCBGb3VuZE1ldGhvZCBOb3QgQWxsb3dlZE5vdCBBY2NlcHRhYmxlUHJveHkgQXV0aGVudGljYXRpb24gUmVxdWlyZWRSZXF1ZXN0IFRpbWUtb3V0Q29uZmxpY3RHb25lTGVuZ3RoIFJlcXVpcmVkUHJlY29uZGl0aW9uIEZhaWxlZFJlcXVlc3QgRW50aXR5IFRvbyBMYXJnZVJlcXVlc3QtVVJJIFRvbyBMb25nVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZVJlcXVlc3RlZCByYW5nZSBub3Qgc2F0aXNmaWFibGVFeHBlY3RhdGlvbiBGYWlsZWRJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JOb3QgSW1wbGVtZW50ZWRCYWQgR2F0ZXdheVNlcnZpY2UgVW5hdmFpbGFibGVHYXRld2F5IFRpbWUtb3V0SHR0cCBWZXJzaW9uIG5vdCBzdXBwb3J0ZWRTdGF0dXMgX0h0dHBDbGllbnRSZXF1ZXN0X3Jlc3BvbnNlQ29tcGxldGVyX3Jlc3BvbnNlX2ZvbGxvd1JlZGlyZWN0c19tYXhSZWRpcmVjdHNSZXF1ZXN0IGluaXRpYXRlZFJlc3BvbnNlIHJlY2VpZXZlZGZvcm1hdENvbm5lY3Rpb25JbmZvZm9ybWF0SGVhZGVyc2Zvcm1hdFJlZGlyZWN0SW5mb1JlcXVlc3QgYWxyZWFkeSBzZW50X29uSW5jb21pbmdpbmNvbWluZ1JlZGlyZWN0IGxpbWl0IGV4Y2VlZGVkX3JlcXVlc3RVcml1cmlTdGFydGluZ0Zyb21QYXRoaXNEaXJlY3RDT05ORUNUX3Byb3h5VHVubmVsX0h0dHBHWmlwU2lua19jb25zdW1lX0h0dHBPdXRnb2luZ19mb290ZXJBbmRDaHVuazBMZW5ndGhfY2h1bmswTGVuZ3RoaWdub3JlQm9keV9jbG9zZUZ1dHVyZV9wZW5kaW5nQ2h1bmtlZEZvb3Rlcl9ieXRlc1dyaXR0ZW5fZ3ppcF9nemlwU2lua19nemlwQWRkX2d6aXBCdWZmZXJfZ3ppcEJ1ZmZlckxlbmd0aF9zb2NrZXRFcnJvcmRyYWluRnV0dXJlYWNjZXB0RW5jb2RpbmdzY29udGVudEVuY29kaW5nX2FkZEdaaXBDaHVua19jaHVua0hlYWRlckNvbnRlbnQgc2l6ZSBleGNlZWRzIHNwZWNpZmllZCBjb250ZW50TGVuZ3RoLiAgYnl0ZXMgd3JpdHRlbiB3aGlsZSBleHBlY3RlZCBfaWdub3JlRXJyb3JObyBjb250ZW50IGV2ZW4gdGhvdWdoIGNvbnRlbnRMZW5ndGggd2FzIHNwZWNpZmllZCB0byBiZSBncmVhdGVyIHRoYW4gMDogQ29udGVudCBzaXplIGJlbG93IHNwZWNpZmllZCBjb250ZW50TGVuZ3RoLiAgYnl0ZXMgd3JpdHRlbiBidXQgZXhwZWN0ZWQgZmluYWxpemVmb290ZXJBbmRIZWFkZXJfSHR0cENsaWVudENvbm5lY3Rpb25faHR0cFBhcnNlcl9kaXNwb3NlX2lkbGVUaW1lcl9jdXJyZW50VXJpX25leHRSZXNwb25zZUNvbXBsZXRlcl9zdHJlYW1GdXR1cmVsaXN0ZW5Ub1N0cmVhbVVuZXhwZWN0ZWQgcmVzcG9uc2UgKHVuc29saWNpdGVkIHJlc3BvbnNlIHdpdGhvdXQgcmVxdWVzdCkuQ29ubmVjdGlvbiBjbG9zZWQgYmVmb3JlIHJlc3BvbnNlIHdhcyByZWNlaXZlZHRpbWVsaW5lU29ja2V0IGNsb3NlZCBiZWZvcmUgcmVxdWVzdCB3YXMgc2VudHByb3h5Q3JlZHNjcmVkc2lzQXV0aGVudGljYXRlZGF1dGhCYXNpYyBfcHJveHlDcmVkZW50aWFsc2F1dGhvcml6ZWlzSGVhZHN0YXJ0VGltZXJfcmV0dXJuQ29ubmVjdGlvbmF1dGhJbmZvcHJveHktYXV0aGVudGljYXRpb24taW5mb25leHRub25jZWF1dGhlbnRpY2F0aW9uLWluZm9Db25uZWN0aW9uIGNsb3NlZCBiZWZvcmUgZGF0YSB3YXMgcmVjZWl2ZWRkZXRhY2hJbmNvbWluZ2NyZWF0ZVByb3h5VHVubmVsRXN0YWJsaXNoaW5nIHByb3h5IHR1bm5lbHByb3h5SW5mb1Byb3h5IGZhaWxlZCB0byBlc3RhYmxpc2ggdHVubmVsIHNlY3VyZVNvY2tldFByb3h5IHR1bm5lbCBlc3RhYmxpc2hlZG1ha2VLZXlpc1NlY3VyZXNzaDpzdG9wVGltZXJfQ29ubmVjdGlvbkluZm9fQ29ubmVjdGlvblRhcmdldF9pZGxlX2FjdGl2ZV9zb2NrZXRUYXNrc19jb25uZWN0aW5naGFzSWRsZWhhc0FjdGl2ZXRha2VJZGxlX2NoZWNrUGVuZGluZ2FkZE5ld0FjdGl2ZXJldHVybkNvbm5lY3Rpb25jb25uZWN0aW9uQ2xvc2VkdXJpSG9zdHVyaVBvcnRfY29ubmVjdGlvbnNDaGFuZ2VkY3VycmVudEJhZENlcnRpZmljYXRlQ2FsbGJhY2tfYmFkQ2VydGlmaWNhdGVDYWxsYmFja2Nvbm5lY3Rpb25UYXNrSFRUUCBjb25uZWN0aW9uIHRpbWVkIG91dCBhZnRlciBob3N0OiB0dW5uZWxfZ2V0Q29ubmVjdGlvblRhcmdldF9IdHRwQ2xpZW50X2Nsb3NpbmdfY2xvc2luZ0ZvcmNlZnVsbHlfY29ubmVjdGlvblRhcmdldHNfY3JlZGVudGlhbHNfZmluZFByb3h5X2lkbGVUaW1lb3V0X3BsYXRmb3JtRW52aXJvbm1lbnRDYWNoZV9vcGVuVXJsX2Nsb3NlQ29ubmVjdGlvbnNfc3RhcnRSZXF1ZXN0VGltZWxpbmVFdmVudEhUVFAgQ0xJRU5UIGZpbHRlcktleUhUVFAvY2xpZW50Q2xpZW50IGlzIGNsb3NlZE5vIGhvc3Qgc3BlY2lmaWVkIGluIFVSSSBVbnN1cHBvcnRlZCBzY2hlbWUgJycgaW4gVVJJIHByb3h5Q29uZl9nZXRDb25uZWN0aW9uQ29ubmVjdGlvbiBlc3RhYmxpc2hlZHJlc29sdmVkY29ubmVjdGlvblRhcmdldHByb3hpZXNObyBwcm94aWVzIGdpdmVuc2l0ZUNyZWRlbnRpYWxzYXBwbGllc19maW5kUHJveHlGcm9tRW52aXJvbm1lbnRjaGVja05vUHJveHlESVJFQ1RjaGVja1Byb3h5OjEwODBQUk9YWSBwcm94eUNmZ25vUHJveHlub19wcm94eU5PX1BST1hZaHR0cF9wcm94eUhUVFBfUFJPWFlodHRwc19wcm94eUhUVFBTX1BST1hZX19IdHRwQ29ubmVjdGlvbiZMaW5rZWRMaXN0RW50cnkmX1NlcnZpY2VPYmplY3RfSHR0cENvbm5lY3Rpb25fQUNUSVZFX0lETEVfQ0xPU0lOR19ERVRBQ0hFRF9jb25uZWN0aW9uc19pZGxlTWFya19tYXJrQWN0aXZlX21hcmtJZGxlX2hhbmRsZVJlcXVlc3RtYXJrSWRsZWlzTWFya2VkSWRsZWRldGFjaGVkSW5jb21pbmdfaXNBY3RpdmVfaXNJZGxlaW8vaHR0cC9zZXJ2ZXJjb25uZWN0aW9uc0h0dHBTZXJ2ZXJDb25uZWN0aW9uIDwtPiB1c2VyX25hbWVAU29ja2V0VXNlclNvY2tldEFjdGl2ZUlkbGVDbG9zaW5nRGV0YWNoZWRVbmtub3duX19IdHRwU2VydmVyJlN0cmVhbSZfU2VydmljZU9iamVjdF9IdHRwU2VydmVyX3NlcnZlcnNfc2VydmVyU29ja2V0X2Nsb3NlU2VydmVyX2FjdGl2ZUNvbm5lY3Rpb25zX2lkbGVDb25uZWN0aW9uc19pbml0RGVmYXVsdFJlc3BvbnNlSGVhZGVyc1gtRnJhbWUtT3B0aW9uc1NBTUVPUklHSU5YLUNvbnRlbnQtVHlwZS1PcHRpb25zbm9zbmlmZlgtWFNTLVByb3RlY3Rpb24xOyBtb2RlPWJsb2NrSHR0cFNlcnZlciBpcyBub3QgYm91bmQgdG8gYSBzb2NrZXRjb25uaW8vaHR0cC9zZXJ2ZXJzX1Byb3h5Q29uZmlndXJhdGlvblBST1hZX1BSRUZJWERJUkVDVF9QUkVGSVhjb25maWd1cmF0aW9uSW52YWxpZCBwcm94eSBjb25maWd1cmF0aW9uIHVzZXJpbmZvY29sb25pbnZhbGlkIHBvcnQgJ2RpcmVjdF9IdHRwQ29ubmVjdGlvbkluZm9fRGV0YWNoZWRTb2NrZXRfQXV0aGVudGljYXRpb25TY2hlbWVfc2NoZW1lVU5LTk9XTkJBU0lDRElHRVNUYmFzaWNkaWdlc3RCYXNpY0RpZ2VzdF9DcmVkZW50aWFsc2hhMWhhc2hlcl9TaXRlQ3JlZGVudGlhbHN0aGlzUG9ydG90aGVyUG9ydF9Qcm94eUNyZWRlbnRpYWxzYXV0aG9yaXplUHJveHlfSHR0cENsaWVudENyZWRlbnRpYWxzX0h0dHBDbGllbnRCYXNpY0NyZWRlbnRpYWxzX0h0dHBDbGllbnREaWdlc3RDcmVkZW50aWFsc2hhMmNub25jZW5jRGlnZXN0IHVzZXJuYW1lPSIsIHJlYWxtPSIsIG5vbmNlPSIsIHVyaT0iLCBhbGdvcml0aG09IiwgcW9wPSIsIGNub25jZT0iLCBuYz0iLCByZXNwb25zZT0iX1JlZGlyZWN0SW5mb19Db25zdEhUVFBIVFRQMURPVEhUVFAxMEhUVFAxMVNFUEFSQVRPUl9NQVBfQ2hhckNvZGVIVEFNUEVSU0FORERBU0haRVJPT05FU0VNSV9DT0xPTkVRVUFMX1N0YXRlU1RBUlRNRVRIT0RfT1JfUkVTUE9OU0VfSFRUUF9WRVJTSU9OUkVTUE9OU0VfSFRUUF9WRVJTSU9OUkVRVUVTVF9MSU5FX01FVEhPRFJFUVVFU1RfTElORV9VUklSRVFVRVNUX0xJTkVfSFRUUF9WRVJTSU9OUkVRVUVTVF9MSU5FX0VORElOR1JFU1BPTlNFX0xJTkVfU1RBVFVTX0NPREVSRVNQT05TRV9MSU5FX1JFQVNPTl9QSFJBU0VSRVNQT05TRV9MSU5FX0VORElOR0hFQURFUl9TVEFSVEhFQURFUl9GSUVMREhFQURFUl9WQUxVRV9TVEFSVEhFQURFUl9WQUxVRUhFQURFUl9WQUxVRV9GT0xESU5HX09SX0VORElOR0hFQURFUl9WQUxVRV9GT0xEX09SX0VOREhFQURFUl9FTkRJTkdDSFVOS19TSVpFX1NUQVJUSU5HX0NSQ0hVTktfU0laRV9TVEFSVElOR19MRkNIVU5LX1NJWkVDSFVOS19TSVpFX0VYVEVOU0lPTkNIVU5LX1NJWkVfRU5ESU5HQ0hVTktFRF9CT0RZX0RPTkVfQ1JDSFVOS0VEX0JPRFlfRE9ORV9MRkJPRFlVUEdSQURFREZBSUxVUkVGSVJTVF9CT0RZX1NUQVRFX0h0dHBWZXJzaW9uVU5ERVRFUk1JTkVEX01lc3NhZ2VUeXBlUkVRVUVTVFJFU1BPTlNFX0h0dHBEZXRhY2hlZFN0cmVhbVN1YnNjcmlwdGlvbl9pbmplY3REYXRhX3VzZXJPbkRhdGFfc2NoZWR1bGVkX21heWJlU2NoZWR1bGVEYXRhX0h0dHBEZXRhY2hlZEluY29taW5nX0h0dHBQYXJzZXJfcGFyc2VyQ2FsbGVkX3JlcXVlc3RQYXJzZXJfaHR0cFZlcnNpb25JbmRleF9tZXNzYWdlVHlwZV9zdGF0dXNDb2RlTGVuZ3RoX21ldGhvZF91cmlPclJlYXNvblBocmFzZV9oZWFkZXJGaWVsZF9oZWFkZXJWYWx1ZV9odHRwVmVyc2lvbl9jb25uZWN0aW9uVXBncmFkZV9jaHVua2VkX25vTWVzc2FnZUJvZHlfcmVtYWluaW5nQ29udGVudF9wYXVzZWRfYm9keVBhdXNlZF9ib2R5Q29udHJvbGxlcl9wYXVzZVN0YXRlQ2hhbmdlZF9yZXNldHJlcXVlc3RQYXJzZXJyZXNwb25zZVBhcnNlcl9kb1BhcnNlX3JlcG9ydEJvZHlFcnJvcl9yZXBvcnRIdHRwRXJyb3JfaGVhZGVyc0VuZF9jcmVhdGVJbmNvbWluZ19jbG9zZUluY29taW5nRGF0YSBvbiBjbG9zZWQgY29ubmVjdGlvbkRhdGEgb24gZmFpbGVkIGNvbm5lY3Rpb25JbnZhbGlkIHJlcXVlc3QgbWV0aG9kSW52YWxpZCByZXNwb25zZSBsaW5lSW52YWxpZCByZXF1ZXN0IGxpbmVfZXhwZWN0SW52YWxpZCByZXF1ZXN0IFVSSUludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIGNvZGVJbnZhbGlkIHJlc3BvbnNlIHJlYXNvbiBwaHJhc2VJbnZhbGlkIGhlYWRlciBmaWVsZCBuYW1laGVhZGVyRmllbGRpc1Jlc3BvbnNlaXNVcGdyYWRlQ29kZWlzVXBncmFkZV9leHBlY3RIZXhEaWdpdGRhdGFBdmFpbGFibGVfcmVsZWFzZUJ1ZmZlckNvbm5lY3Rpb24gY2xvc2VkIHdoaWxlIHJlY2VpdmluZyBkYXRhQ29ubmVjdGlvbiBjbG9zZWQgYmVmb3JlIGZ1bGwgaGVhZGVyIHdhcyByZWNlaXZlZENvbm5lY3Rpb24gY2xvc2VkIGJlZm9yZSBmdWxsIGJvZHkgd2FzIHJlY2VpdmVkbWVzc2FnZVR5cGVyZWFkVW5wYXJzZWREYXRhX2lzVG9rZW5DaGFyX2lzVmFsdWVDaGFyX3Rva2VuaXplRmllbGRWYWx1ZV90b0xvd2VyQ2FzZUJ5dGVfY2FzZUluc2Vuc2l0aXZlQ29tcGFyZXZhbDF2YWwyRmFpbGVkIHRvIHBhcnNlIEhUVFAsICBkb2VzIG5vdCBtYXRjaCAgc2hvdWxkIGJlIGEgSGV4IGRpZ2l0X0h0dHBTZXNzaW9uX2xhc3RTZWVuX3RpbWVvdXRDYWxsYmFja19wcmV2X3JlbW92ZUZyb21UaW1lb3V0UXVldWVfc2Vzc2lvbnNfYnVtcFRvRW5kbGFzdFNlZW5IdHRwU2Vzc2lvbiBpZDpfSHR0cFNlc3Npb25NYW5hZ2VyX3Nlc3Npb25UaW1lb3V0X3RpbWVyY3JlYXRlU2Vzc2lvbklkX2FkZFRvVGltZW91dFF1ZXVlX3N0b3BUaW1lcl9zdGFydFRpbWVyX3RpbWVyVGltZW91dEh0dHBPdmVycmlkZXNydW5XaXRoSHR0cE92ZXJyaWRlc19IdHRwT3ZlcnJpZGVzU2NvcGVfY3JlYXRlSHR0cENsaWVudFdlYlNvY2tldFN0YXR1c25vcm1hbENsb3N1cmVnb2luZ0F3YXlwcm90b2NvbEVycm9ydW5zdXBwb3J0ZWREYXRhcmVzZXJ2ZWQxMDA0bm9TdGF0dXNSZWNlaXZlZGFibm9ybWFsQ2xvc3VyZWludmFsaWRGcmFtZVBheWxvYWREYXRhcG9saWN5VmlvbGF0aW9ubWVzc2FnZVRvb0JpZ21pc3NpbmdNYW5kYXRvcnlFeHRlbnNpb25yZXNlcnZlZDEwMTVOT1JNQUxfQ0xPU1VSRVVzZSBub3JtYWxDbG9zdXJlIGluc3RlYWRHT0lOR19BV0FZVXNlIGdvaW5nQXdheSBpbnN0ZWFkUFJPVE9DT0xfRVJST1JVc2UgcHJvdG9jb2xFcnJvciBpbnN0ZWFkVU5TVVBQT1JURURfREFUQVVzZSB1bnN1cHBvcnRlZERhdGEgaW5zdGVhZFJFU0VSVkVEXzEwMDRVc2UgcmVzZXJ2ZWQxMDA0IGluc3RlYWROT19TVEFUVVNfUkVDRUlWRURVc2Ugbm9TdGF0dXNSZWNlaXZlZCBpbnN0ZWFkQUJOT1JNQUxfQ0xPU1VSRVVzZSBhYm5vcm1hbENsb3N1cmUgaW5zdGVhZElOVkFMSURfRlJBTUVfUEFZTE9BRF9EQVRBVXNlIGludmFsaWRGcmFtZVBheWxvYWREYXRhIGluc3RlYWRQT0xJQ1lfVklPTEFUSU9OVXNlIHBvbGljeVZpb2xhdGlvbiBpbnN0ZWFkTUVTU0FHRV9UT09fQklHVXNlIG1lc3NhZ2VUb29CaWcgaW5zdGVhZE1JU1NJTkdfTUFOREFUT1JZX0VYVEVOU0lPTlVzZSBtaXNzaW5nTWFuZGF0b3J5RXh0ZW5zaW9uIGluc3RlYWRSRVNFUlZFRF8xMDE1VXNlIHJlc2VydmVkMTAxNSBpbnN0ZWFkQ29tcHJlc3Npb25PcHRpb25zY29tcHJlc3Npb25EZWZhdWx0REVGQVVMVFVzZSBjb21wcmVzc2lvbkRlZmF1bHQgaW5zdGVhZGNvbXByZXNzaW9uT2ZmT0ZGVXNlIGNvbXByZXNzaW9uT2ZmIGluc3RlYWRjbGllbnROb0NvbnRleHRUYWtlb3ZlcnNlcnZlck5vQ29udGV4dFRha2VvdmVyY2xpZW50TWF4V2luZG93Qml0c3NlcnZlck1heFdpbmRvd0JpdHNfY3JlYXRlU2VydmVyUmVzcG9uc2VIZWFkZXJyZXF1ZXN0ZWRtd2JzZXJ2ZXJfbWF4X3dpbmRvd19iaXRzSWxsZWdhbCAwIHBhZGRpbmcgb24gdmFsdWUuOyBzZXJ2ZXJfbWF4X3dpbmRvd19iaXRzPV9jcmVhdGVDbGllbnRSZXF1ZXN0SGVhZGVyOyBjbGllbnRfbWF4X3dpbmRvd19iaXRzPTsgY2xpZW50X21heF93aW5kb3dfYml0c19jcmVhdGVIZWFkZXJwZXJtZXNzYWdlLWRlZmxhdGVjbGllbnRfbm9fY29udGV4dF90YWtlb3ZlcjsgY2xpZW50X25vX2NvbnRleHRfdGFrZW92ZXJzZXJ2ZXJfbm9fY29udGV4dF90YWtlb3Zlcjsgc2VydmVyX25vX2NvbnRleHRfdGFrZW92ZXJoZWFkZXJMaXN0V2ViU29ja2V0VHJhbnNmb3JtZXJwcm90b2NvbFNlbGVjdG9yaXNVcGdyYWRlUmVxdWVzdFdlYlNvY2tldENPTk5FQ1RJTkdVc2UgY29ubmVjdGluZyBpbnN0ZWFkT1BFTlVzZSBvcGVuIGluc3RlYWRDTE9TSU5HVXNlIGNsb3NpbmcgaW5zdGVhZHBpbmdJbnRlcnZhbFRoaXMgY29uc3RydWN0b3Igd2lsbCBiZSByZW1vdmVkIGluIERhcnQgMi4wLiBVc2UgYGltcGxlbWVudHNgIGluc3RlYWQgb2YgYGV4dGVuZHNgIGlmIGltcGxlbWVudGluZyB0aGlzIGFic3RyYWN0IGNsYXNzLmZyb21VcGdyYWRlZFNvY2tldHNlcnZlclNpZGVUaGUgc2VydmVyU2lkZSBhcmd1bWVudCBtdXN0IGJlIHBhc3NlZCBleHBsaWNpdGx5IHRvIFdlYlNvY2tldC5mcm9tVXBncmFkZWRTb2NrZXQucmVhZHlTdGF0ZWV4dGVuc2lvbnNjbG9zZUNvZGVjbG9zZVJlYXNvbnJlYXNvbldlYlNvY2tldEV4Y2VwdGlvbldlYlNvY2tldEV4Y2VwdGlvbjogX1dlYlNvY2tldE1lc3NhZ2VUeXBlTk9ORV9XZWJTb2NrZXRPcGNvZGVDT05USU5VQVRJT05SRVNFUlZFRF8zUkVTRVJWRURfNFJFU0VSVkVEXzVSRVNFUlZFRF82UkVTRVJWRURfN0NMT1NFUElOR1BPTkdSRVNFUlZFRF9CUkVTRVJWRURfQ1JFU0VSVkVEX0RSRVNFUlZFRF9FUkVTRVJWRURfRl9FbmNvZGVkU3RyaW5nX0NvbXByZXNzaW9uTWF4V2luZG93Qml0c19XZWJTb2NrZXRQcm90b2NvbFRyYW5zZm9ybWVyTEVOX0ZJUlNUTEVOX1JFU1RNQVNLUEFZTE9BREZJTlJTVjFSU1YyUlNWM09QQ09ERV9maW5fY29tcHJlc3NlZF9vcGNvZGVfbWFza2VkX3JlbWFpbmluZ0xlbkJ5dGVzX3JlbWFpbmluZ01hc2tpbmdLZXlCeXRlc19yZW1haW5pbmdQYXlsb2FkQnl0ZXNfdW5tYXNraW5nSW5kZXhfY3VycmVudE1lc3NhZ2VUeXBlX3NlcnZlclNpZGVfbWFza2luZ0J5dGVzX3BheWxvYWRfZGVmbGF0ZVdlYlNvY2tldCB0cmFuc2Zvcm1lciBhbHJlYWR5IHVzZWQubGFzdEluZGV4UHJvdG9jb2wgZXJyb3JfaXNDb250cm9sRnJhbWVfbGVuZ3RoRG9uZV9tYXNrRG9uZXBheWxvYWRMZW5ndGhfdW5tYXNrX2NvbnRyb2xGcmFtZUVuZF9tZXNzYWdlRnJhbWVFbmRzdGFydE9mZnNldGJsb2NrQ291bnRibG9ja01hc2tibG9ja0J1ZmZlclJlY2VpdmVkIG1hc2tlZCBmcmFtZSBmcm9tIHNlcnZlclJlY2VpdmVkIHVubWFza2VkIGZyYW1lIGZyb20gY2xpZW50X3N0YXJ0UGF5bG9hZF9wcmVwYXJlRm9yTmV4dEZyYW1lcHJvY2Vzc0luY29taW5nTWVzc2FnZV9XZWJTb2NrZXRQaW5nX1dlYlNvY2tldFBvbmdfV2ViU29ja2V0VHJhbnNmb3JtZXJJbXBsX3Byb3RvY29sU2VsZWN0b3JfY29tcHJlc3Npb25fdXBncmFkZUludmFsaWQgV2ViU29ja2V0IHVwZ3JhZGUgcmVxdWVzdFVwZ3JhZGV3ZWJzb2NrZXRTZWMtV2ViU29ja2V0LUtleTI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMVNlYy1XZWJTb2NrZXQtQWNjZXB0U2VjLVdlYlNvY2tldC1Qcm90b2NvbFNlbGVjdGVkIHByb3RvY29sIGlzIG5vdCBpbiB0aGUgbGlzdCBvZiBhdmFpbGFibGUgcHJvdG9jb2xzX25lZ290aWF0ZUNvbXByZXNzaW9uZXh0ZW5zaW9uSGVhZGVyU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zaHZfaXNVcGdyYWRlUmVxdWVzdFNlYy1XZWJTb2NrZXQtVmVyc2lvbl9XZWJTb2NrZXRQZXJNZXNzYWdlRGVmbGF0ZV9lbnN1cmVEZWNvZGVyX2Vuc3VyZUVuY29kZXJwcm9jZXNzT3V0Z29pbmdNZXNzYWdlTGlzdCBlbGVtZW50IGlzIG5vdCBhIGJ5dGUgdmFsdWUgKHZhbHVlICBhdCBpbmRleCBfV2ViU29ja2V0T3V0Z29pbmdUcmFuc2Zvcm1lcl9kZWZsYXRlSGVscGVyV2ViU29ja2V0IHRyYW5zZm9ybWVyIGFscmVhZHkgdXNlZGFkZEZyYW1lb3Bjb2RlX291dENsb3NlQ29kZV9vdXRDbG9zZVJlYXNvbmNyZWF0ZUZyYW1lZGF0YUxlbmd0aGhlYWRlclNpemVob2NsZW5ndGhCeXRlc21hc2tCeXRlc19XZWJTb2NrZXRDb25zdW1lcl9pc3N1ZWRQYXVzZV9jb21wbGV0ZXJfZW5zdXJlQ29udHJvbGxlcl9kb25lY2xvc2VTb2NrZXRfX1dlYlNvY2tldEltcGwmU3RyZWFtJl9TZXJ2aWNlT2JqZWN0X1dlYlNvY2tldEltcGxfd2ViU29ja2V0c1BFUl9NRVNTQUdFX0RFRkxBVEVfcmVhZHlTdGF0ZV93cml0ZUNsb3NlZF9jbG9zZUNvZGVfY2xvc2VSZWFzb25fcGluZ0ludGVydmFsX3BpbmdUaW1lcl9jbG9zZVRpbWVyX2Zyb21Tb2NrZXR0cmFuc2Zvcm1lcndzd3NzVW5zdXBwb3J0ZWQgVVJMIHNjaGVtZSAnbm9uY2VEYXRhQ2FjaGUtQ29udHJvbG5vLWNhY2hlQ29ubmVjdGlvbiB0byAnJyB3YXMgbm90IHVwZ3JhZGVkIHRvIHdlYnNvY2tldFJlc3BvbnNlIGRpZCBub3QgY29udGFpbiBhICdTZWMtV2ViU29ja2V0LUFjY2VwdCcgaGVhZGVyZXhwZWN0ZWRBY2NlcHRyZWNlaXZlZEFjY2VwdFJlc3BvbnNlIGhlYWRlciAnU2VjLVdlYlNvY2tldC1BY2NlcHQnIGlzIHRoZSB3cm9uZyBsZW5ndGhCYWQgcmVzcG9uc2UgJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JyBoZWFkZXJuZWdvdGlhdGVDbGllbnRDb21wcmVzc2lvbmdldFdpbmRvd0JpdHNjbGllbnRfbWF4X3dpbmRvd19iaXRzaW50ZXJ2YWxSZXNlcnZlZCBzdGF0dXMgY29kZSBpby93ZWJzb2NrZXRzX2lzUmVzZXJ2ZWRTdGF0dXNDb2RlX01BU0tfOF9NQVNLXzMyX0JJVFNfUEVSX0JZVEVfQllURVNfUEVSX1dPUkRfT1VUR09JTkdfQlVGRkVSX1NJWkVfREFSVF9TRVNTSU9OX0lEX2h0dHBPdmVycmlkZXNUb2tlbl93ZWJTb2NrZXRHVUlEX2NsaWVudE5vQ29udGV4dFRha2VvdmVyX3NlcnZlck5vQ29udGV4dFRha2VvdmVyX2NsaWVudE1heFdpbmRvd0JpdHNfc2VydmVyTWF4V2luZG93Qml0c19nZXRIdHRwVmVyc2lvbkRhcnQvIChkYXJ0OmlvKWRhcnQuX3Ztc2VydmljZWFzc2V0LmRhcnRjbGllbnQuZGFydGRldmZzLmRhcnRjb25zdGFudHMuZGFydHJ1bm5pbmdfaXNvbGF0ZS5kYXJ0cnVubmluZ19pc29sYXRlcy5kYXJ0bWVzc2FnZS5kYXJ0bWVzc2FnZV9yb3V0ZXIuZGFydG5hbWVkX2xvb2t1cC5kYXJ0U2VydmVyU3RhcnRDYWxsYmFja1NlcnZlclN0b3BDYWxsYmFja0NsZWFudXBDYWxsYmFja0NyZWF0ZVRlbXBEaXJDYWxsYmFja0RlbGV0ZURpckNhbGxiYWNrV3JpdGVGaWxlQ2FsbGJhY2tXcml0ZVN0cmVhbUZpbGVDYWxsYmFja1JlYWRGaWxlQ2FsbGJhY2tMaXN0RmlsZXNDYWxsYmFja1NlcnZlckluZm9ybWFtZXNzYWdlX3JvdXRlcnRpb25DYWxsYmFja1NlcnZlckluZm9ybWF0aW9uQ2FsbGJhY2tXZWJTZXJ2ZXJDb250cm9sQ2FsbGJhY2tDbGllbnRTZXJ2aWNlSGFuZGxlSXNvbGF0ZUVtYmVkZGVyRGF0YVZNU2VydmljZUVtYmVkZGVySG9va3NzZXJ2ZXJTdGFydHNlcnZlclN0b3BjcmVhdGVUZW1wRGlyZGVsZXRlRGlyd3JpdGVGaWxld3JpdGVTdHJlYW1GaWxlcmVhZEZpbGVsaXN0RmlsZXNzZXJ2ZXJJbmZvcm1hdGlvbndlYlNlcnZlckNvbnRyb2xfQ2xpZW50UmVzdW1lUGVybWlzc2lvbnNjbGllbnRzcGVybWlzc2lvbnNNYXNrVk1TZXJ2aWNlX2luc3RhbmNlc2VydmljZU5hbWVzcGFjZXByb2xvZ3VlX3NlcnZpY2VSZXF1ZXN0c3NyY2xpZW50UmVzdW1lUGVybWlzc2lvbnNydW5uaW5nSXNvbGF0ZXNrU2VydmljZVN0cmVhbXNlcnZpY2VTdHJlYW1zbWVzc2FnZUhhbmRsZXJfY2xlYXJDbGllbnROYW1lY2xpZW50c0Zvck5hbWVpc29sYXRlc21heWJlUmVzdW1lQWZ0ZXJDbGllbnRDaGFuZ2Vfc2V0Q2xpZW50TmFtZXNldENsaWVudE5hbWU6IG1pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVyICduYW1lJ3NldENsaWVudE5hbWU6IGludmFsaWQgJ25hbWUnIHBhcmFtZXRlcjogX3NldENsaWVudE5hbWVIZWxwZXJkZWZhdWx0Q2xpZW50TmFtZV9nZXRDbGllbnROYW1lQ2xpZW50TmFtZV9yZXF1aXJlUGVybWlzc2lvblRvUmVzdW1lcGFyc2VQZXJtaXNzaW9uYXJnTmFtZXJlcXVpcmVQZXJtaXNzaW9uVG9SZXN1bWU6IGludmFsaWQgJ3BhdXNlVHlwZU1hc2tvblBhdXNlU3RhcnRvblBhdXNlUmVsb2Fkb25QYXVzZUV4aXRycGNFcnJvcl9hZGRDbGllbnRzdHJlYW1zc2VydmljZXNfcmVtb3ZlQ2xpZW50a2V5T2ZzdHJlYW1JZF9pc0FueUNsaWVudFN1YnNjcmliZWRfZXZlbnRNZXNzYWdlSGFuZGxlcmpzb25ycGMyLjBzdHJlYW1Ob3RpZnlFdmVudFNlcnZpY2VVbnJlZ2lzdGVyZWRzZXJ2aWNlSGFuZGxlc19jb250cm9sTWVzc2FnZUhhbmRsZXJwb3J0SWRzcGlzb2xhdGVTdGFydHVwaXNvbGF0ZVNodXRkb3duaWVkX3NlcnZlck1lc3NhZ2VIYW5kbGVyX2hhbmRsZU5hdGl2ZVJwY0NhbGxUaGUgY2xpZW50IHNlbnQgYSBub24tcmVxdWVzdCBqc29uLXJwYyBtZXNzYWdlLnJvdXRlUmVxdWVzdGV4Y2VwdGlvblRoZSBycGMgY2FsbCByZXN1bHRlZCBpbiBleGNlcHRpb246IGNsaWVudHNMaXN0SW50ZXJuYWwgdm0tc2VydmljZSBlcnJvcjogaWdub3JpbmcgaWxsZWdhbCBtZXNzYWdlOiBfZmluZEZpcnN0Q2xpZW50VGhhdEhhbmRsZXNTZXJ2aWNlX3N0cmVhbUxpc3RlbnN0cmVhbUxpc3RlbjogaW52YWxpZCAnc3RyZWFtSWQnIHBhcmFtZXRlcjogX3NlbmRTZXJ2aWNlUmVnaXN0ZXJlZEV2ZW50X3N0cmVhbUNhbmNlbF9oYXNOYW1lc3BhY2VfZ2V0TmFtZXNwYWNlX2dldE1ldGhvZF9yZWdpc3RlclNlcnZpY2VhbGlhc3JlZ2lzdGVyU2VydmljZTogaW52YWxpZCAnc2VydmljZScgcGFyYW1ldGVyOiByZWdpc3RlclNlcnZpY2U6IGludmFsaWQgJ2FsaWFzJyBwYXJhbWV0ZXI6IHJlbW92ZWRTZXJ2aWNlUmVnaXN0ZXJlZF9oYW5kbGVTZXJ2aWNlbmV3SWRvbGRJZHNlcmlhbGZvcndhcmRUb0pzb25Vbmtub3duIHNlcnZpY2U6IGFyZ3NPZlN0cmluZ19yb3V0ZVJlcXVlc3RJbXBsY29tcGxldGVkc3RyZWFtTGlzdGVuc3RyZWFtQ2FuY2VscmVnaXN0ZXJTZXJ2aWNlc2V0Q2xpZW50TmFtZWdldENsaWVudE5hbWVyZXF1aXJlUGVybWlzc2lvblRvUmVzdW1lc2hvdWxkSGFuZGxlTWVzc2FnZWlzb2xhdGVJZHNlbmRUb1ZNc2V0RXJyb3JSZXNwb25zZVVuZXhwZWN0ZWQgZXhjZXB0aW9uOnJvdXRlUmVzcG9uc2VyZWxlYXNlQXNzZXRleHRlbnNpb25TdGFydGV4dGVuc2lvbnRleHQvaHRtbDsgY2hhcnNldD1VVEYtOGRhcnRhcHBsaWNhdGlvbi9kYXJ0OyBjaGFyc2V0PVVURi04anNhcHBsaWNhdGlvbi9qYXZhc2NyaXB0OyBjaGFyc2V0PVVURi04Y3NzdGV4dC9jc3M7IGNoYXJzZXQ9VVRGLThnaWZpbWFnZS9naWZpbWFnZS9wbmdqcGdpbWFnZS9qcGVnanBlZ3N2Z2ltYWdlL3N2Zyt4bWx0YXJCeXRlc2Fzc2V0TGlzdGFzc2V0c0NsaWVudF9pZENvdW50ZXJfRmlsZVN5c3RlbXJlc29sdmVQYXRocGF0aFVyaXJlc29sdmVkVXJpRmlsZVN5c3RlbURldkZTX2ZzTWFwX3JwY05hbWVzX2xpc3REZXZGU19jcmVhdGVEZXZGU19kZWxldGVEZXZGU19yZWFkRGV2RlNGaWxlX3dyaXRlRGV2RlNGaWxlX3dyaXRlRGV2RlNGaWxlc19saXN0RGV2RlNGaWxlc2RlbGV0aW9uc2ZzVW5leHBlY3RlZCBycGMgRmlsZVN5c3RlbUxpc3Rmc05hbWVzdGVtcERpcnVyaVBhcmFtcGFyc2VkVXJpRlNGaWxlZmlsZUNvbnRlbnRzX3JlYWREZXZGU0ZpbGU6IGRlY29kZWRGaWxlQ29udGVudHNmaWxlc2ZpbGVJbmZvOiBpbnZhbGlkICdmaWxlcycgcGFyYW1ldGVyIGF0IGluZGV4IGZpbGVMaXN0RlNGaWxlTGlzdENvbnN0YW50c1NFUlZJQ0VfRVhJVF9NRVNTQUdFX0lESVNPTEFURV9TVEFSVFVQX01FU1NBR0VfSURJU09MQVRFX1NIVVRET1dOX01FU1NBR0VfSURXRUJfU0VSVkVSX0NPTlRST0xfTUVTU0FHRV9JRFNFUlZFUl9JTkZPX01FU1NBR0VfSURNRVRIT0RfQ0FMTF9GUk9NX05BVElWRVJ1bm5pbmdJc29sYXRlX3Jlc3VtZUFwcHJvdmFsc0J5TmFtZWtJbnZhbGlkUGF1c2VFdmVudGtQYXVzZU9uU3RhcnRNYXNra1BhdXNlT25SZWxvYWRNYXNra1BhdXNlT25FeGl0TWFza2tEZWZhdWx0UmVzdW1lUGVybWlzc2lvbk1hc2tzZXJ2aWNlSWRpc29sYXRlcy9kaXNjb25uZWN0ZWRDbGllbnROYW1lX2lzb2xhdGVQYXVzZVR5cGVwYXVzZVR5cGVfc2hvdWxkUmVzdW1lc2VuZFRvSXNvbGF0ZXJlcXVpcmVkQ2xpZW50QXBwcm92YWxzY2xpZW50TmFtZVBlcm1pc3Npb25zZ2V0SXNvbGF0ZU1lc3NhZ2VnZXRJc29sYXRlZGVjb2RlSnNvbnBhdXNlRXZlbnRQYXVzZVN0YXJ0UGF1c2VQb3N0UmVxdWVzdFBhdXNlRXhpdF9yb3V0ZVJlc3VtZVJlcXVlc3RSdW5uaW5nSXNvbGF0ZXNfcm9vdFBvcnRJZGlzb2xhdGVQYXJhbWludmFsaWQgJ2lzb2xhdGVJZCcgcGFyYW1ldGVyOiBTZW50aW5lbENvbGxlY3RlZHZhbHVlQXNTdHJpbmc8Y29sbGVjdGVkPnNldFJlc3BvbnNlZXZhbHVhdGVJbkZyYW1lZXZhbHVhdGVfRXZhbHVhdG9yX2J1aWxkU2NvcGVidWlsZFNjb3BlUmVzcG9uc2VrZXJuZWxCYXNlNjRfY29tcGlsZUV4cHJlc3Npb25fZXZhbHVhdGVDb21waWxlZEV4cHJlc3Npb25fc2V0dXBQYXJhbXNidWlsZFNjb3BlUGFyYW1zX2J1aWxkRXhwcmVzc2lvbkV2YWx1YXRpb25TY29wZXNjb3BlYnVpbGRTY29wZWJ1aWxkU2NvcGVSZXNwb25zZVJlc3VsdGV4dGVybmFsQ2xpZW50Y29tcGlsZUV4cHJlc3Npb25jb21waWxlUGFyYW1zZXhwcmVzc2lvbmRlZmluaXRpb25zcGFyYW1fbmFtZXN0eXBlRGVmaW5pdGlvbnN0eXBlX3BhcmFtc19uYW1lc2xpYnJhcnlVcmlqc29uTWFwa2VybmVsQnl0ZXNjb21waWxlRXhwcmVzc2lvblBhcmFtc2Rpc2FibGVCcmVha3BvaW50c3J1blBhcmFtc3J1bkV4cHJlc3Npb25mcmFtZUluZGV4dGFyZ2V0SWRNZXNzYWdlVHlwZVJlcXVlc3ROb3RpZmljYXRpb25SZXNwb25zZU1lc3NhZ2VfZnJvbUpzb25ScGNSZXF1ZXN0X2Zyb21Kc29uUnBjTm90aWZpY2F0aW9uX2Zyb21Kc29uUnBjUmVzdWx0X2Zyb21Kc29uUnBjRXJyb3Jmb3JNZXRob2Rmb3JJc29sYXRlZnJvbUpzb25ScGMiaWQiIG11c3QgYmUgYSBudW1iZXIsIHN0cmluZywgb3IgbnVsbC5JbnZhbGlkIG1lc3NhZ2UgZm9ybWF0X21ldGhvZE5hbWVGcm9tVXJpdG9Vcml1bnN1cHBvcnRlZG92ZXJsb2Fkc19tYWtlQWxsU3RyaW5nbmV3X2xpc3Rfc2V0UmVzcG9uc2VGcm9tUG9ydGNvdWxkIG5vdCBzZW5kIG1lc3NhZ2UgW10gdG8gaXNvbGF0ZV9tZXRob2ROZWVkc09iamVjdFBhcmFtZXRlcnNNZXNzYWdlUm91dGVyUmVzcG9uc2VQYXlsb2FkS2luZEJpbmFyeVV0ZjhTdHJpbmdpbnRlcm5hbEVycm9yU2VydmljZUVycm9ySW50ZXJuYWxFcnJvclVucmVjb2duaXplZCByZXNwb25zZTogQmluYXJ5IHJlc3BvbnNlcyBjYW4gbm90IGJlIGRlY29kZWRfTmFtZWRMb29rdXAmT2JqZWN0Jkl0ZXJhYmxlTWl4aW5OYW1lZExvb2t1cF9lbGVtZW50c19pZHNJZEdlbmVyYXRvcl9mcmVlaXNvbGF0ZUNvbnRyb2xQb3J0c2NyaXB0TG9hZFBvcnRzZXJ2aWNlQXV0aFRva2VuaXNvbGF0ZUVtYmVkZGVyRGF0YWtQYXJzZUVycm9ya0ludmFsaWRSZXF1ZXN0a01ldGhvZE5vdEZvdW5ka0ludGVybmFsRXJyb3JrRmVhdHVyZURpc2FibGVka0Nhbm5vdEFkZEJyZWFrcG9pbnRrU3RyZWFtQWxyZWFkeVN1YnNjcmliZWRrU3RyZWFtTm90U3Vic2NyaWJlZGtJc29sYXRlTXVzdEJlUnVubmFibGVrSXNvbGF0ZU11c3RCZVBhdXNlZGtDYW5ub3RSZXN1bWVrSXNvbGF0ZUlzUmVsb2FkaW5na0lzb2xhdGVSZWxvYWRCYXJyZWRrSXNvbGF0ZU11c3RIYXZlUmVsb2FkZWRrU2VydmljZUFscmVhZHlSZWdpc3RlcmVka1NlcnZpY2VEaXNhcHBlYXJlZGtFeHByZXNzaW9uQ29tcGlsYXRpb25FcnJvcmtJbnZhbGlkVGltZWxpbmVSZXF1ZXN0a0ZpbGVTeXN0ZW1BbHJlYWR5RXhpc3Rza0ZpbGVTeXN0ZW1Eb2VzTm90RXhpc3RrRmlsZURvZXNOb3RFeGlzdF9lcnJvck1lc3NhZ2VzRmVhdHVyZSBpcyBkaXNhYmxlZFN0cmVhbSBhbHJlYWR5IHN1YnNjcmliZWRTdHJlYW0gbm90IHN1YnNjcmliZWRGaWxlIHN5c3RlbSBhbHJlYWR5IGV4aXN0c0ZpbGUgc3lzdGVtIGRvZXMgbm90IGV4aXN0RmlsZSBkb2VzIG5vdCBleGlzdFNlcnZpY2UgYWxyZWFkeSByZWdpc3RlcmVkU2VydmljZSBoYXMgZGlzYXBwZWFyZWRFeHByZXNzaW9uIGNvbXBpbGF0aW9uIGVycm9yVGhlIHRpbWVsaW5lIHJlbGF0ZWQgcmVxdWVzdCBjb3VsZCBub3QgYmUgY29tcGxldGVkZHVlIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb25zaG9ydERlbGF5X2Fzc2V0c19kZWNvZGVBc3NldHNWTVNlcnZpY2VfRGVjb2RlQXNzZXRzQ291bGQgbm90IGxvYWQgT2JzZXJ2YXRvcnkgYXNzZXRzOiBfZW5jb2RlRGV2RlNEaXNhYmxlZEVycm9yRGV2RlMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIERhcnQgaW1wbGVtZW50YXRpb25fZW5jb2RlRmlsZVN5c3RlbUFscmVhZHlFeGlzdHNFcnJvcjogZmlsZSBzeXN0ZW0gJycgYWxyZWFkeSBleGlzdHNfZW5jb2RlRmlsZVN5c3RlbURvZXNOb3RFeGlzdEVycm9yJyBkb2VzIG5vdCBleGlzdHNlbmRJc29sYXRlU2VydmljZU1lc3NhZ2VWTVNlcnZpY2VfU2VuZElzb2xhdGVTZXJ2aWNlTWVzc2FnZXNlbmRSb290U2VydmljZU1lc3NhZ2VWTVNlcnZpY2VfU2VuZFJvb3RTZXJ2aWNlTWVzc2FnZXNlbmRPYmplY3RSb290U2VydmljZU1lc3NhZ2VWTVNlcnZpY2VfU2VuZE9iamVjdFJvb3RTZXJ2aWNlTWVzc2FnZV9tYWtlQXV0aFRva2Vua1Rva2VuQnl0ZVNpemVlbmNvZGVScGNFcnJvcmVuY29kZU1pc3NpbmdQYXJhbUVycm9yIGV4cGVjdHMgdGhlICcnIHBhcmFtZXRlcmVuY29kZUludmFsaWRQYXJhbUVycm9yOiBpbnZhbGlkICcnIHBhcmFtZXRlcjogZW5jb2RlQ29tcGlsYXRpb25FcnJvcmRpYWdub3N0aWNlbmNvZGVSZXN1bHRlbmNvZGVTdWNjZXNzYm9vdF9yZWdpc3Rlcklzb2xhdGVwb3J0X2lkX29uU3RhcnRWTVNlcnZpY2VfT25TdGFydF9vbkV4aXRWTVNlcnZpY2VfT25FeGl0b25TZXJ2ZXJBZGRyZXNzQ2hhbmdlVk1TZXJ2aWNlX09uU2VydmVyQWRkcmVzc0NoYW5nZV92bUxpc3RlblN0cmVhbVZNU2VydmljZV9MaXN0ZW5TdHJlYW1fdm1DYW5jZWxTdHJlYW1WTVNlcnZpY2VfQ2FuY2VsU3RyZWFtX3JlcXVlc3RBc3NldHNWTVNlcnZpY2VfUmVxdWVzdEFzc2V0c19zcGF3blVyaU5vdGlmeVZNU2VydmljZV9zcGF3blVyaU5vdGlmeWRhcnQ6YXN5bmNAdHlwZWRlZnNAZmllbGRzQG1ldGhvZHNAZ2V0dGVyc0Bjb25zdHJ1Y3RvcnNAc2V0dGVyc0BmYWN0b3JpZXNkYXJ0OmNvcmVkYXJ0OmNvbGxlY3Rpb25kYXJ0OmNvbnZlcnRkYXJ0OmRldmVsb3BlcmRhcnQ6ZmZpZGFydDpfaW50ZXJuYWxkYXJ0Omlzb2xhdGVkYXJ0Om1hdGhkYXJ0Om1pcnJvcnNkYXJ0OnR5cGVkX2RhdGFkYXJ0Om5hdGl2ZXdyYXBwZXJzZGFydDppb2RhcnQ6d2FzbWRhcnQ6ZnVjaHNpYS5idWlsdGluZGFydDp6aXJjb25kYXJ0OmZ1Y2hzaWFkYXJ0OnZtc2VydmljZV9pb2RhcnQ6dWlkYXJ0Ol9odHRwZGFydDpfdm1zZXJ2aWNldm0uY2FsbC1zaXRlLWF0dHJpYnV0ZXMubWV0YWRhdGGQNARjAAjAAEqf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lAgAAZQKlRwEjk8IlAgAAZQKlSgEjlEIlAgAAZQKlTQEjlMIlAgAAZQKlUAEjlUIlAgAAZQKlUwEjlcIlAgAAZQKlVgEjlkIlAgAAZQKlWQEjlsIlAgAAZQKlXAEjl0IlAgAAZQKlXwEjl8IlAgAAZQKlYgEjmEIlAgAAZQKlZQEjmMIlAgAAZQKlaAEjmUIlAgAAZQKlawEjmcIlAgAAZQKlbgLYAOm2gjAAEqfAALAAEqhgz7AAEqilcQEjmkIlAgAAZQKldwEjmsIlAgAAZQKlegLYAOnAgjAAEqfAALAAEqhgz7AAEqilfQEjm0IlAgAAZQKlgwEjm8IlAgAAZQKlhgEjnEIlAgAAZQKliQEjnMIlAgAAZQKljALYAOnKQjAAEqfAALAAEqhgz7AAEqiljwEjtwIlAgAAZQKllQEjt0IlAgAAZQKlmAEjt4IlAgAAZQKlmwEjt8IlAgAAZQKlngEjuAIlAgAAZQKloQEjuIIlAgAAZQKlpAEjuQIlAgAAZQKlpwEjuYIlAgAAZQKlqgEjugIlAgAAZQKlrQEjuoIlAgAAZQKlsAEjuwIlAgAAZQKlswEju4IlAgAAZQKltgEjvAIlAgAAZQKluQEjvIIlAgAAZQKlvAEjvMIlAgAAZQKlvwEjvQIlAgAAZQKlwgEjvYIlAgAAZQKlxQEjvgIlAgAAZQKlyAEjvoIlAgAAZQKlywEjvsIlAgAAZQKlzgEjv0IlAgAAZQKl0QEjwEIlAgAAZQKl1AEjwQIlAgAAZQKl1wEjwcIlAgAAZQKl2gEjwoIlAgAAZQKl3QEjwsIlAgAAZQKl4AEjwwIlAgAAZQKl4wEjw0IlAgAAZQKl5gEjw8IlAgAAZQKl6QEjxEIlAgAAZQKl7AEjxMIlAgAAZQKl7wEjxQIlAgAAZQKl8gEjxUIlAgAAZQKl9QEjxYIlAgAAZQKl+AEjxcIlAgAAZQKl+wEjxgIlAgAAZQKl/gEjxkIlAgAAZQKmAQEjxoIlAgAAZQKmBAEjxsIlAgAAZQKmBwEjxwIlAgAAZQKmCgEjx0IlAgAAZQKmDQEjx4IlAgAAZQKmEAEjx8IlAgAAZQKmEwEjyAIlAgAAZQKmFgEjyEIlAgAAZQKmGQEjyIIlAgAAZQKmHAEjyQIlAgAAZQKmHwEjyYIlAgAAZQKmIgEjygIlAgAAZQKmJQEjyoI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AAI3wDwAAAI3wAPQkAjAAEt0AAHAAEuHozcCN8AAYagIwABLdAABwABLh6NKCLrTAAG63IZyBJKcCLhVAAK4V4QtuFmjZgSSowi4VQACuFdOuFmjdgSSrQi7xAAEu8ajhbvHArvIArvJAgi7HwABuygaCLsfAAG7KBQIux8AAbsoFgq3gQq3gASS2giUCAABlAqjuASS2wiUCAABlAqjxASS3AiUCAABlAqj0ASS3QiUCAABlAqj3ASS3giUCAABlAqj6ASS3wiUCAABlAqj9ASS4AiUCAABlAqkAASS4giUCAABlAqkDASS5AiUCAABlAqkGASS5giUCAABlAqkJASS5wiUCAABlAqkMASS6AiUCAABlAqkPASS6QiUCAABlAqkSASS6giUCAABlAqkVASS6wiUCAABlAqkYASS7AiUCAABlAqkbASS7QiUCAABlAqkeASS7wiUCAABlAqkhASS8AiUCAABlAqkkASS8QiUCAABlAqknASS8giUCAABlAqkqASS8wiUCAABlAqktASS/Ai7YgABu20UCLtiAAG7bRYIu2IAAbttTASTCgi4VQACuFcUuFmk2wSTIgi7LAABuzUUCLssAAG7NRYIuywAAbs1GASTNgjAAEqfAALAAEqhAMAASqKlBQSTNwiUCAABlAqlGgSTPQiUCAABlAqlJgSTPwiUCAABlAqlMgSTQwiUCAABlAqlPgSTRAiUCAABlAqlSgSTRgiUCAABlAqlVgSTRwiUCAABlAqlYgSTSQiUCAABlAqlbgSTSwiUCAABlAqlegSTTgiUCAABlAqlhgSTVAiUCAABlAqlkgSTWgiUCAABlAqlngSTXgiUCAABlAqlqgSTYgiUCAABlAqltgSTZgiUCAABlAqlwgSTbAiUCAABlAqlzgSTbQiUCAABlAql2gSTcwiUCAABlAql5gSTdgiUCAABlAql8gSTeQiUCAABlAql/gSTfAiUCAABlAqmCgSTfgiUCAABlAqmFgSThAiUCAABlAqmIgSThQiUCAABlAqmLgSTowiUCAABlAqmOgSTpAiUCAABlAqmRgSTpQiUCAABlAqmUgSTpgiUCAABlAqmXgSTpwiUCAABlAqmagSTqAiUCAABlAqmdgSTqQiUCAABlAqmggSTqgiUCAABlAqmjgSTqwiUCAABlAqmmgSTrAiUCAABlAqmpgSTrQiUCAABlAqmsgSTxQiUCAABlAqmvgSTyQjAAEqLAAHAAEqNpsoEk8wIwABKiwABwABKjabaBJPPCMAASosAAcAASo2m6gST0gjAAEqLAAHAAEqNpvoEk9UIwABKiwABwABKjacKBJPYCMAASosAAcAASo2nGgST2wjAAEqLAAHAAEqNpyoEk94IwABKiwABwABKjac6BJPhCMAASosAAcAASo2nSgST5AjAAEqLAAHAAEqNp1oEk+cIwABKiwABwABKjadqBJPqCMAASosAAcAASo2negST7QjAAEqLAAHAAEqNp4oEk/AIwABKiwABwABKjaeaB2ADwABMogAElBwIlAgAAZQKp7IElB4IlAgAAZQKp74ElCAIlAgAAZQKp8oElCIIlAgAAZQKp9YElCQIlAgAAZQKp+IElCUIlAgAAZQKp+4ElCcIlAgAAZQKp/oElCkIlAgAAZQKqAYElCsIlAgAAZQKqBIElF8IlAgAAZQKqB4ElGAIlAgAAZQKqCoItU4AAbVbGgSUZAjAAEqLAAHAAEqNqD4ItU4AAbVbFASUZgjAAEqLAAHAAEqNqFYItU4AAbVbFgSUaAjAAEqLAAHAAEqNqG4ItU4AAbVbTASUawjAAEqLAAHAAEqNqIYItU4AAbVbGASUbgjAAEqLAAHAAEqNqJ4ItV8AAbVqFASUcQjAAEqLAAHAAEqNqLYItV8AAbVqFgSUdAjAAEqLAAHAAEqNqM4ItV8AAbVqTASUdwjAAEqLAAHAAEqNqOYItV8AAbVqGASUegjAAEqLAAHAAEqNqP4ElLsIlAgAAZQKqQ4ElL4IlAgAAZQKqRoElMAIlAgAAZQKqSYElMIIlAgAAZQKqTIElMUIlAgAAZQKqT4ElMcIlAgAAZQKqUoElMoIlAgAAZQKqVYElM0IlAgAAZQKqWIElNAIlAgAAZQKqW4ElNUIlAgAAZQKqXoElNgIlAgAAZQKqYYElNwIlAgAAZQKqZIElOAIlAgAAZQKqZ4ElOMIlAgAAZQKqaoElOUIlAgAAZQKqbYElOcIlAgAAZQKqcIIkRIAAAq3WQq3Wwi2agABtnYaBJUSCMAASosAAcAASo2p4Qi2agABtnYUBJUVCMAASosAAcAASo2p+Qi2agABtnYWBJUYCMAASosAAcAASo2qEQi2agABtnZMB2ADtmoEqdmp8aoJqiEEk1YElRMElRYEifkHYAPAAE6JBKo3qjqqPapACLZ+AAa2iAK2iQK2igK2i6ohtowato2GcgSVJgiUCAABlAqqbASVNASVNQSVNgSVNwSVOASVOQSVOgSVOwdgA8AATokIqniqe6p+qoGqhKqHqoqqjQSVZQiUCAABlAqqqASVZwiUCAABlAqqtASVaQiUCAABlAqqwASVegjAAEqLAAHAAEqNqswElX0IwABKiwABwABKjarcBJV/CMAASosAAcAASo2q7ASVggjAAEqLAAHAAEqNqvwElYUIwABKiwABwABKjasMBbDLkXEElacIlAgAAZQKqyEElakIlAgAAZQKqy0ElasIlAgAAZQKqzkEla0IlAgAAZQKq0UElbAIlAgAAZQKq1EElbIIlAgAAZQKq10ElbUIlAgAAZQKq2kElLMElc8EldoEldwEkvUElkEElkMElkUElkcElkkElksElk0KuEIElloElmAIuFUAArhXGrhZq58ElmEIuFUAArhXGLhZq64ElmIIuFUAArhXFrhZq70ElmMIuFUAArhXTLhZq8wHYAO4VQeroqTeq8Crz6uxo2mjeQpnCMAASpQAAASWoAjAAEqLAAHAAEqNq/gElqwIlAgAAZQKrAgElq0IlAgAAZQKrBQElq4IlAgAAZQKrCAElq8IlAgAAZQKrCwElrAIlAgAAZQKrDgElrIIlAgAAZQKrEQElrQIlAgAAZQKrFAElrUIlAgAAZQKrFwElrcIlAgAAZQKrGgElroIlAgAAZQKrHQElrwIlAgAAZQKrIAElsQIlAgAAZQKrIwElscIlAgAAZQKrJgElskIlAgAAZQKrKQElssIlAgAAZQKrLAEls0IlAgAAZQKrLwEls8IlAgAAZQKrMgEltEIuWYAArmjFLmkrNQEltIIuWYAArmjFrmkrOMEltMIuWYAArmjhEu5pKzyBJbUCLlmAAK5o4QwuaStAgSW1Qi5ZgACuaOEM7mkrRIEltoIlAgAAZQKrSIEltwIlAgAAZQKrS4EluEIwABKiwABwABKja06BJbkCMAASosAAcAASo2tSgi5PAABuUcWBJbnCMAASosAAcAASo2tYgSW6gjAAEqLAAHAAEqNrXIHYAO5PASirKK0rVqivASSWwSW4gSW5QSW6AdgA8AATokErZCtk62WrZkIvE8AAASW8wi5ZgACuaNM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CAABlAq0vwSY6giUCAABlAq0ywSY6wiUCAABlAq01wSY7AiUCAABlAq04wSY8QiUCAABlAq07wSY9giUCAABlAq0+wSY+AiUCAABlAq1BwSZAgiUCAABlAq1EwSZBQiUCAABlAq1Hwq9Dgq9DQq9DASZEAiUCAABlAq1NASZEgiUCAABlAq1QASZFQiUCAABlAq1TASZFgiUCAABlAq1WASZGAiUCAABlAq1ZASZGwiUCAABlAq1cASZIQiUCAABlAq1fASZQgiUCAABlAq1iASZRQiUCAABlAq1lASZRwiUCAABlAq1oASZSgiUCAABlAq1rASZTAiUCAABlAq1uASZTgiUCAABlAq1xASZUAiUCAABlAq10ASZUgiUCAABlAq13ASZVAiUCAABlAq16ASZVgiUCAABlAq19ASZWAiUCAABlAq2AASZWgiUCAABlAq2DASZXQiUCAABlAq2GASZXwiUCAABlAq2JASZYQiUCAABlAq2MASZYwiUCAABlAq2PASZZQiUCAABlAq2SASZcgiUCAABlAq2VAI3j6ACN4+hAjePogI3j6MEmYsIwABYswACwABYtRrAAFi3tnAEmY0IwABYswACwABYtRTAAFi3toUEmY8IwABYswACwABYtRbAAFi3tpoEmZQIwABY7AACwABY7hrAAFjwtq8EmZUIwABY7AACwABY7hTAAFjwtsQEmZcIwABY7AACwABY7hbAAFjwttkEmaQEmaYIwABWbwAFwABWdT/AAFZ2P8AAVncCwABWeALAAFZ5PwI3wA9CQAjAAEt0AAHAAEuHtxQKvccKvcgKvcwKvc0Kvc4Kvc8KvdAKvdEKvdIKvdMKvdQCN6cQCMAAS3QAAcAAS4e3SAq9yQSaGQiUCAABlAq3XASaHAiUCAABlAq3aASaTQSaZQiUCAABlAq3dwSaZwiUCAABlAq3gwSagwiUCAABlAq3jwSalQiUCAABlAq3mwSamAiUCAABlAq3pwSanAjAAECkAALAAECmFsAAQKi3swSanQjAAECkAALAAECmGsAAQKi3yASanwiUCAABlAq33QSapAiUCAABlAq36QSapwiUCAABlAq39QMAAAAAAAAAAAi/PAACvy24Ab8uuAEEmqwIlAgAAZQKuBcEmrIIlAgAAZQKuCMEmrYIlAgAAZQKuC8EmrkIlAgAAZQKuDsE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AEhnwABJHsAASGvAAEktwABIccAASTyjB8AASUujDcAASVijGcAASWWjH8AASXKjJcAASX8IwABITgJgA8AATKJgA8AAQ24BwABIUcAASYwCN8BAAAAIwABDogABwABDvBQIwABDogABwABDvBYIwABDogABwABDvBgIwABDogABwABDvBwIwABDogABwABDvFQIwABDogABwABDvKMlCMAAQ6IAAcAAQ7zAAEosCMAAQ6IAAcAAQ7yjKwjAAEOiAAHAAEO8bwjAAEOiAAHAAEO8cgjAAEOiAAHAAEO8dQjAAEOiAAHAAEO8hy0IwABDogABwABDvMAASFsIwABDogABwABDvIaDCMAAQ6IAAcAAQ7yjHwjAAEOiAAHAAEO8wABIXwjAAEOiAAHAAEO8wABIYwjAAEOiAAHAAEO8wABIZwjAAEOiAAHAAEO8wABIawjAAEOiAAHAAEO8wABIcQjAAEOiAAHAAEO8owcIwABDogABwABDvKMNCMAAQ6IAAcAAQ7yjGQdbLhTAAEoyFsAASj4YwABKShzAAEpWVMAASmJvwABKl3LAAEqjdcAASq+HLcAASrvAAEhbwABKyIaDwABK18AASF/AAErxwABIY8AASwDAAEhnwABLD8AASGvAAEsewABIccAASy2jB8AASzyjDcAAS0mjGcAAS1ajH8AASuSjJcAASm6jK8AASorAAEoswABKewjAAEhOAmADwABMomADwABDogHAAEhRwABLYwSe/AiUCAABlArAAEwRBJ8TCJQIAAGUCsAATB8EnxcIlAgAAZQKwABMLQSfGAiUCAABlArAAEw7BJ8aCJQIAAGUCsAATEkEnxwIwABD6wACwABD7RrAAEPvwABMVwSfHQjAAEPrAALAAEPtFMAAQ+/AAExuB2ADwABD6wLAAExawABMcQjAAEP3AAHAAEP5GgjAAEP3AAHAAEP5FAjAAEP3AAHAAEP5FgjAAEP3AAHAAEP5TAjAAEP3AAHAAEP5GAjAAEP3AAHAAEP5hC0IwABD9wABwABD+U4IwABD9wABwABD+YXxCMAAQ/cAAcAAQ/kcB2ADwABD9wnAAEyVwABMocAATK3AAEy5wABMxcAATNHAAEzewABM6sAATPcEnyoEnysEnywEny0Eny4Eny8EnzAEnzEEnzIHWxIawABNLxTAAE0yFsAATTVMwABNOBjAAE07hC3AAE0+TsAATUGF8cAATUQcwABNRwjAAEhOAmADwABMomADwABOiQHAAEhRwABNSgSfRgjAAEQkAALAAEQmGsAARCjAAE2XBJ9HCMAARCQAAsAARCYUwABEKMAATa4En0gIwABEJAACwABEJhbAAEQowABNxQSfSQjAAEQkAALAAEQmTMAARCjAAE3cBJ9KCMAARCQAAsAARCYYwABEKMAATfMEn0sIwABEJAACwABEJoQtwABEKMAATgoHYAPAAEQkBsAATZrAAE2xwABNyMAATd/AAE32wABODQSfTgjAAEQ0AALAAEQ2GsAARDjAAE5CBJ9PCMAARDQAAsAARDYUwABEOMAATlkHYAPAAEQ0AsAATkXAAE5cCMAAREAAAcAAREMaCMAAREAAAcAAREMUCMAAREAAAcAAREMWCMAAREAAAcAAREMYBJ9eCMAARFMAAsAARFUawABEV8AATrAEn18IwABEUwACwABEVRTAAERXwABOxwSfYAjAAERTAALAAERVFsAARFfAAE7eBJ9hCMAARFMAAsAARFVMwABEV8AATvUEn2IIwABEUwACwABEVRjAAERXwABPDAdgA8AARFMFwABOs8AATsrAAE7hwABO+MAATw8En6oIwABEowACwABEpRrAAESnwABPPwSfqwjAAESjAALAAESlFMAARKfAAE9WB2ADwABEowLAAE9CwABPWQSfuwjAAETCAALAAETEGsAARMbAAE99BJ+8CMAARMIAAsAARMQUwABExsAAT5QHYAPAAETCAsAAT4DAAE+XCMAARNkAAsAARNyGcsAARN2GcgSfzwjAAET2AALAAET4GsAARPrAAE/OBJ/QCMAARPYAAsAARPgUwABE+sAAT+UEn9EIwABE9gACwABE+BbAAET6wABP/ASf0gjAAET2AALAAET4TMAARPrAAFATBJ/TCMAARPYAAsAARPgYwABE+sAAUCoEn9QIwABE9gACwABE+IQtwABE+sAAUEEHYAPAAET2BsAAT9HAAE/owABP/8AAUBbAAFAtwABQRASf2wjAAEUGAALAAEUIGsAARQrAAFB5BJ/cCMAARQYAAsAARQgUwABFCsAAUJAHYAPAAEUGAsAAUHzAAFCTBJ/eCMAARRIAAsAARRQawABFFsAAULcEn98IwABFEgACwABFFBTAAEUWwABQ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h/gEjhAEprMEprQEprUHYAPAAE6JBcAAaX/AAGmCwABphcAAaYjAAGmLBcAARjmCuAXAAEY5groEpxMIlAgAAZQKwABpuAI5pxYCOacXAjfXF5FJAjmnGAI5pxkCN86NSlECOacaAjfVn9gAAjmnGwI30NY68QI5pxwCOacdAjmnHgI3zMbbYQI5px8CN9mhAAACOacgAjfwnxAhAjmnIQI3xkh7gAI5pyICN8ovG28COacjAjfQAAAAAjfYdUVxAjmnJAI35H28gAI5pyUCN/VHZnsCOacmAjfD0JAAAjmnJwI3xRyv6QI5pygCN8bCCkACOacpAjfI0tkxAjmnKgI3y2QAAAI5pysCN9JprkACOacsAjfcuRAAAjmnLQI343RImQI5py4CN+tzqEACOacvAjf05jtBAjmnMAI3wlUooQI5pzECN8K1SiACOacyAjfDIWuTAjmnMwI3w5qkAAI5pzQHYAPAAEyigIyEPMAAacaf+MAAacqfYcAAac6gS8AAadRRwABpxoQ8wABp2IQwwABp3J+0wABp4ogRwABp5qA9wABp7IRLwABp8IRFwABp9oRLwABpxoScwABp2IRIwABpzoQ/wABp+oRIwABkZp9hwABp/hzAAGoChDnAAGoIHMAAagyEOcAAahIcwABqFlTAAGochfHAAGogVMAAaiaF8cAAaipRwABqMIXxwABqNFHAAGnYhfHAAGo6UcAAakCF8cAAakSf28AAakqF8cAAak6f28AAalROwABqWJ/bwABqXk7AAGpin9vAAGpoTsAAamyETsAAanJOwABqdoROwABqfE7AAGqAhE7AAGqGTsAAadyETsAAaeJOwABqioROwABqkE7AAGnOhE7AAGnUTsAAapSEMMAAappOwABqnoQwwABqpE7AAGqohDDAAGquTsAAarKEMMAAarhOwABpxoQwwABp2IQtwABqvIQwwABqwoQtwABqxoQwwABqzIQtwABq0IQwwABq1oQtwABq2ogRwABq4AI5pzgHYAPAAEyiAsAAbHtRAjfP////AjmnOgdgA8AATKICwABsjMAAbJIEp1EIlAgAAZQKwABspgrAAEy1B2ADwABN7wAIwABITgJgA8AATvtgA8AATe8BwABIUYCgCsAATTcEp2kIlAgAAZQKwABs3wI3h9sEp3wIlAgAAZQKwABs8QSnfgiU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Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8CN4PpAjeD6gI3g+sCN4PsAjeD7QI3g+4CN4PvAjeD8AI3g/ECN4PyAjeD8wI3g/cErZ0IwABKiwABwABKjcAAft8ErZ8IwABKiwABwABKjcAAfvEEraEIwABKiwABwABKjcAAfwMEraMIwABKiwABwABKjcAAfxUEraUIwABKiwABwABKjcAAfycEracIwABKiwABwABKjcAAfzkErakIwABKiwABwABKjcAAf0sErasIwABKiwABwABKjcAAf10Era0IwABKiwABwABKjcAAf28Era8IwABKiwABwABKjcAAf4EErbEIwABKiwABwABKjcAAf5MErbMIwABKiwABwABKjcAAf6UIwABWbwAFwABWdT/AAFZ2P8AAVncCwABWeALAAFZ5g/sErbcIwABKiwABwABKjcAAf9gErboIwABKiwABwABKjcAAf+oErcIErckErcoErcwErdQIwABKiwABwABKjcAAgAgErdYIwABKiwABwABKjcAAgBoErdgIwABKiwABwABKjcAAgCwErdoIwABKiwABwABKjcAAgD4Eri0HYAPAAEyiBBoahn+GfwSubQI3wExLQAjAAEt0AAHAAEuHwACAZASA+QSIMwdgA8AATokBwACAfAI4wAB/WQI4wAB/WwSqLASvCgSvDASvDgSvEAScSQSvEwSvFQSvFgSvJQSvJgSvJwSvKASvKQSvKgSvKwSvWQSvWgSvWwdbBsAAgMcUwACAyhbAAIDNGAjAAEhOAmADwABOiWADwABMogHAAEhRwACA0AdgA8AAWLMDtnO2iLadBIvBB2ADwABY7AO2srbHttwCOMAAf7wCOMAAf1gEr9QIlAgAAZQKwACBKASv3giUCAABlArAAIE2BK/gCJQIAAGUCsAAgUQEr+IIlAgAAZQKwACBUgSv9AiUCAABlArAAIFgBK/2CJQIAAGUCsAAgW4Er/gIlAgAAZQKwACBfASv+giUCAABlArAAIGKBK/8CJQIAAGUCsAAgZgEr/4IlAgAAZQKwACBpgSwAAiUCAABlArAAIG0AAAAJ/YJAGDeewBib7gAYw5cAGOG0ABm6g4AAAAAAAAACQACYS0ABeFSAAfWmwAIEtIACFgWAAmazgAJ/osACjlDAAsKXQAVGwgAFRxoABlGdQAZW8QAGV7sABl1LQAZeDUAGcwhAB0NsQAjOGQAJvIPACf2CQAAABUAZ2xQ