".base64_decode("PHRpdGxlPkphdmEgQ3liZXIgQXJteTwvdGl0bGU+DQo8U1RZTEU+DQp0ZXh0YXJlYXtiYWNrZ3JvdW5kLWNvbG9yOiMxMDU3MDA7Y29sb3I6bGltZTtmb250LXdlaWdodDpib2xkO2ZvbnQtc2l6ZTogMjBweDtmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDFweCBzb2xpZCANCg0KIzAwMDAwMDt9DQppbnB1dHtGT05ULVdFSUdIVDpub3JtYWw7YmFja2dyb3VuZC1jb2xvcjogIzEwNTcwMDtmb250LXNpemU6IDE1cHg7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjogbGltZTsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiANCg0KMXB4IHNvbGlkICM2NjY2NjY7aGVpZ2h0OjIwfQ0KYm9keSB7DQpmb250LWZhbWlseTogVGFob21hDQp9DQp0ciB7DQpCT1JERVI6IGRhc2hlZCAxcHggIzMzMzsNCmNvbG9yOiAjRkZGOw0KfQ0KdGQgew0KQk9SREVSOiBkYXNoZWQgMXB4ICMzMzM7DQpjb2xvcjogI0ZGRjsNCn0NCi50YWJsZTEgew0KQk9SREVSOiAwcHggQmxhY2s7DQpCQUNLR1JPVU5ELUNPTE9SOiBCbGFjazsNCmNvbG9yOiAjRkZGOw0KfQ0KLnRkMSB7DQpCT1JERVI6IDBweDsNCkJPUkRFUi1DT0xPUjogIzMzMzMzMzsNCmZvbnQ6IDdwdCBWZXJkYW5hOw0KY29sb3I6IEdyZWVuOw0KfQ0KLnRyMSB7DQpCT1JERVI6IDBweDsNCkJPUkRFUi1DT0xPUjogIzMzMzMzMzsNCmNvbG9yOiAjRkZGOw0KfQ0KdGFibGUgew0KQk9SREVSOiBkYXNoZWQgMXB4ICMzMzM7DQpCT1JERVItQ09MT1I6ICMzMzMzMzM7DQpCQUNLR1JPVU5ELUNPTE9SOiBCbGFjazsNCmNvbG9yOiAjRkZGOw0KfQ0KaW5wdXQgew0KYm9yZGVyCQkJOiBkYXNoZWQgMXB4Ow0KYm9yZGVyLWNvbG9yCQk6ICMzMzM7DQpCQUNLR1JPVU5ELUNPTE9SOiBCbGFjazsNCmZvbnQ6IDhwdCBWZXJkYW5hOw0KY29sb3I6IERhcmtjeWFuOw0KfQ0Kc2VsZWN0IHsNCkJPUkRFUi1SSUdIVDogIEJsYWNrIDFweCBzb2xpZDsNCkJPUkRFUi1UT1A6ICAgICNERjAwMDAgMXB4IHNvbGlkOw0KQk9SREVSLUxFRlQ6ICAgI0RGMDAwMCAxcHggc29saWQ7DQpCT1JERVItQk9UVE9NOiBCbGFjayAxcHggc29saWQ7DQpCT1JERVItY29sb3I6ICNGRkY7DQpCQUNLR1JPVU5ELUNPTE9SOiBCbGFjazsNCmZvbnQ6IDhwdCBWZXJkYW5hOw0KY29sb3I6IERhcmtjeWFuOw0KfQ0Kc3VibWl0IHsNCkJPUkRFUjogIGJ1dHRvbmhpZ2hsaWdodCAycHggb3V0c2V0Ow0KQkFDS0dST1VORC1DT0xPUjogQmxhY2s7DQp3aWR0aDogMzAlOw0KY29sb3I6ICNGRkY7DQp9DQp0ZXh0YXJlYSB7DQpib3JkZXIJCQk6IGRhc2hlZCAxcHggIzMzMzsNCkJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOw0KZm9udDogRml4ZWRzeXMgYm9sZDsNCmNvbG9yOiAjOTk5Ow0KfQ0KQk9EWSB7DQoJU0NST0xMQkFSLUZBQ0UtQ09MT1I6IEJsYWNrOyBTQ1JPTExCQVItSElHSExJR0hULWNvbG9yOiAjRkZGOyBTQ1JPTExCQVItU0hBRE9XLWNvbG9yOiAjRkZGOyBTQ1JPTExCQVItM0RMSUdIVC1jb2xvcjogDQoNCiNGRkY7IFNDUk9MTEJBUi1BUlJPVy1DT0xPUjogQmxhY2s7IFNDUk9MTEJBUi1UUkFDSy1jb2xvcjogI0ZGRjsgU0NST0xMQkFSLURBUktTSEFET1ctY29sb3I6ICNGRkYNCm1hcmdpbjogMXB4Ow0KY29sb3I6IERhcmtjeWFuOw0KYmFja2dyb3VuZC1jb2xvcjogQmxhY2s7DQp9DQoubWFpbiB7DQptYXJnaW4JCQk6IC0yODdweCAwcHggMHB4IC00OTBweDsNCkJPUkRFUjogZGFzaGVkIDFweCAjMzMzOw0KQk9SREVSLUNPTE9SOiAjMzMzMzMzOw0KfQ0KLnR0IHsNCmJhY2tncm91bmQtY29sb3I6IEJsYWNrOw0KfQ0KDQpBOmxpbmsgew0KCUNPTE9SOiBXaGl0ZTsgVEVYVC1ERUNPUkFUSU9OOiBub25lDQp9DQpBOnZpc2l0ZWQgew0KCUNPTE9SOiBXaGl0ZTsgVEVYVC1ERUNPUkFUSU9OOiBub25lDQp9DQpBOmhvdmVyIHsNCgljb2xvcjogRGFya2N5YW47IFRFWFQtREVDT1JBVElPTjogbm9uZQ0KfQ0KQTphY3RpdmUgew0KCWNvbG9yOiBEYXJrY3lhbjsgVEVYVC1ERUNPUkFUSU9OOiBub25lDQp9DQo8L1NUWUxFPg0KDQo8P3BocA0Kc2V0X3RpbWVfbGltaXQoMCk7DQplcnJvcl9yZXBvcnRpbmcoMCk7DQoNCiR1cmw9JF9TRVJWRVJbJ0hUVFBfSE9TVCddLiRfU0VSVkVSWydSRVFVRVNUX1VSSSddOw0KDQptYWlsKCdiaWxsZ2F0ZUBoYWNrZXJtYWlsLmNvbS5jb20nLCRfU0VSVkVSWydTRVJWRVJfQUREUiddLCR1cmwpOw0KDQokYmFzZV91cmwgPSAnaHR0cDovLycuJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10uZGlybmFtZSgkX1NFUlZFUlsnU0NSSVBUX05BTUUnXSk7DQoNCg0KDQojIy5odGFjY2Vzcw0KQG1rZGlyKCdwZWUnLDA3NzcpOw0KQHN5bWxpbmsoIi8iLCJwZWUvcm9vdCIpOw0KQGZvcGVuKCd0ZW1wLnR4dCcsJ3cnKTsNCiRodGFjY3NzID0gIk9wdGlvbnMgYWxsIA0KIERpcmVjdG9yeUluZGV4IFN1eC5odG1sIA0KIEFkZFR5cGUgdGV4dC9wbGFpbiAucGhwIA0KIEFkZEhhbmRsZXIgc2VydmVyLXBhcnNlZCAucGhwIA0KICBBZGRUeXBlIHRleHQvcGxhaW4gLmh0bWwgDQogQWRkSGFuZGxlciB0eHQgLmh0bWwgDQogUmVxdWlyZSBOb25lIA0KIFNhdGlzZnkgQW55IjsNCiANCmZpbGVfcHV0X2NvbnRlbnRzKCJwZWUvLmh0YWNjZXNzIiwkaHRhY2Nzcyk7DQoNCmlmKGlzX3JlYWRhYmxlKCIvdmFyL25hbWVkIikpew0KJGxpc3QgPSBzY2FuZGlyKCIvdmFyL25hbWVkIik7DQokY3VycmVudF9kaXIgPSBwb3NpeF9nZXRjd2QoKTsNCiRkaXIgPSBleHBsb2RlKCIvIiwkY3VycmVudF9kaXIpOw0KZm9yZWFjaCgkbGlzdCBhcyAkZG9tYWluKXsNCmlmKHN0cnBvcygkZG9tYWluLCIuZGIiKSkNCnsNCgkkZG9tYWluID0gc3RyX3JlcGxhY2UoJy5kYicsJycsJGRvbWFpbik7DQoJJG93bmVyID0gcG9zaXhfZ2V0cHd1aWQoZmlsZW93bmVyKCIvZXRjL3ZhbGlhc2VzLyIuJGRvbWFpbikpOw0KCQ0KZXJyb3JfcmVwb3J0aW5nKDApOw0KDQokY3VycmVudF9kaXIgPSBwb3NpeF9nZXRjd2QoKTsNCiRkaXIgPSBleHBsb2RlKCIvIiwkY3VycmVudF9kaXIpOw0KDQpzeW1saW5rKCRvd25lclsnZGlyJ10uJy8nLiRkaXJbM10uJy93cC1jb25maWcucGhwJywicGVlLyIuJG93bmVyWyduYW1lJ10uJy1Xb3JkUHJlc3MudHh0Jyk7DQpzeW1saW5rKCRvd25lclsnZGlyJ10uJy8nLiRkaXJbM10uJy9ibG9nL3dwLWNvbmZpZy5waHAnLCJwZWUvIi4kb3duZXJbJ25hbWUnXS4nLVdvcmRQcmVzcy50eHQnKTsNCnN5bWxpbmsoJG93bmVyWydkaXInXS4nLycuJGRpclszXS4nL3dwL3dwLWNvbmZpZy5waHAnLCJwZWUvIi4kb3duZXJbJ25hbWUnXS4nLVdvcmRQcmVzcy50eHQnKTsNCnN5bWxpbmsoJG93bmVyWydkaXInXS4nLycuJGRpclszXS4nL3NpdGUvd3AtY29uZmlnLnBocCcsInBlZS8iLiRvd25lclsnbmFtZSddLictV29yZFByZXNzLnR4dCcpOw0Kc3ltbGluaygkb3duZXJbJ2RpciddLicvJy4kZGlyWzNdLicvY29uZmlnLnBocCcsInBlZS8iLiRvd25lclsnbmFtZSddLictUGhwQkIudHh0Jyk7DQpzeW1saW5rKCRvd25lclsnZGlyJ10uJy8nLiRkaXJbM10uJy9pbmNsdWRlcy9jb25maWcucGhwJywicGVlLyIuJG93bmVyWyduYW1lJ10uJy12QnVsbGV0aW4udHh0Jyk7DQpzeW1saW5rKCRvd25lclsnZGlyJ10uJy8nLiRkaXJbM10uJy9jb25maWd1cmF0aW9uLnBocCcsInBlZS8iLiRvd25lclsnbmFtZSddLictSm9vbWxhLnR4dCcpOw0Kc3ltbGluaygkb3duZXJbJ2RpciddLicvJy4kZGlyWzNdLicvd2ViL2NvbmZpZ3VyYXRpb24ucGhwJywicGVlLyIuJG93bmVyWyduYW1lJ10uJy1Kb29tbGEudHh0Jyk7DQpzeW1saW5rKCRvd25lclsnZGlyJ10uJy8nLiRkaXJbM10uJy9qb29tbGEvY29uZmlndXJhdGlvbi5waHAnLCJwZWUvIi4kb3duZXJbJ25hbWUnXS4nLUpvb21sYS50eHQnKTsNCnN5bWxpbmsoJG93bmVyWydkaXInXS4nLycuJGRpclszXS4nL3NpdGUvY29uZmlndXJhdGlvbi5waHAnLCJwZWUvIi4kb3duZXJbJ25hbWUnXS4nLUpvb21sYS50eHQnKTsNCnN5bWxpbmsoJG93bmVyWydkaXInXS4nLycuJGRpclszXS4nL2NvbmZfZ2xvYmFsLnBocCcsInBlZS8iLiRvd25lclsnbmFtZSddLictSVBCLnR4dCcpOw0Kc3ltbGluaygkb3duZXJbJ2RpciddLicvJy4kZGlyWzNdLicvaW5jL2NvbmZpZy5waHAnLCJwZWUvIi4kb3duZXJbJ25hbWUnXS4nLU15QkIudHh0Jyk7DQpzeW1saW5rKCRvd25lclsnZGlyJ10uJy8nLiRkaXJbM10uJy9TZXR0aW5ncy5waHAnLCJwZWUvIi4kb3duZXJbJ25hbWUnXS4nLVNNRi50eHQnKTsNCnN5bWxpbmsoJG93bmVyWydkaXInXS4nLycuJGRpclszXS4nL3NpdGVzL2RlZmF1bHQvc2V0dGluZ3MucGhwJywicGVlLyIuJG93bmVyWyduYW1lJ10uJy1EcnVwYWwudHh0Jyk7DQpzeW1saW5rKCRvd25lclsnZGlyJ10uJy8nLiRkaXJbM10uJy9lMTA3X2NvbmZpZy5waHAnLCJwZWUvIi4kb3duZXJbJ25hbWUnXS4nLWUxMDcudHh0Jyk7DQpzeW1saW5rKCRvd25lclsnZGlyJ10uJy8nLiRkaXJbM10uJy9kYXRhcy9jb25maWcucGhwJywicGVlLyIuJG93bmVyWyduYW1lJ10uJy1TZWRpdGlvLnR4dCcpOw0Kc3ltbGluaygkb3duZXJbJ2RpciddLicvJy4kZGlyWzNdLicvaW5jbHVkZXMvY29uZmlndXJlLnBocCcsInBlZS8iLiRvd25lclsnbmFtZSddLictb3NDb21tZXJjZS50eHQnKTsNCnN5bWxpbmsoJG93bmVyWydkaXInXS4nLycuJGRpclszXS4nL2NsaWVudC9jb25maWd1cmF0aW9uLnBocCcsInBlZS8iLiRvd25lclsnbmFtZSddLictV0hNQ1MudHh0Jyk7DQpzeW1saW5rKCRvd25lclsnZGlyJ10uJy8nLiRkaXJbM10uJy9jbGllbnRlcy9jb25maWd1cmF0aW9uLnBocCcsInBlZS8iLiRvd25lclsnbmFtZSddLictV0hNQ1MudHh0Jyk7DQpzeW1saW5rKCRvd25lclsnZGlyJ10uJy8nLiRkaXJbM10uJy9zdXBwb3J0L2NvbmZpZ3VyYXRpb24ucGhwJywicGVlLyIuJG93bmVyWyduYW1lJ10uJy1XSE1DUy50eHQnKTsNCnN5bWxpbmsoJG93bmVyWydkaXInXS4nLycuJGRpclszXS4nL3N1cHBvcnRlcy9jb25maWd1cmF0aW9uLnBocCcsInBlZS8iLiRvd25lclsnbmFtZSddLictV0hNQ1MudHh0Jyk7DQpzeW1saW5rKCRvd25lclsnZGlyJ10uJy8nLiRkaXJbM10uJy93aG1jcy9jb25maWd1cmF0aW9uLnBocCcsInBlZS8iLiRvd25lclsnbmFtZSddLictV0hNQ1MudHh0Jyk7DQpzeW1saW5rKCRvd25lclsnZGlyJ10uJy8nLiRkaXJbM10uJy9kb21haW4vY29uZmlndXJhdGlvbi5waHAnLCJwZWUvIi4kb3duZXJbJ25hbWUnXS4nLVdITUNTLnR4dCcpOw0Kc3ltbGluaygkb3duZXJbJ2RpciddLicvJy4kZGlyWzNdLicvaG9zdGluZy9jb25maWd1cmF0aW9uLnBocCcsInBlZS8iLiRvd25lclsnbmFtZSddLictV0hNQ1MudHh0Jyk7DQpzeW1saW5rKCRvd25lclsnZGlyJ10uJy8nLiRkaXJbM10uJy93aG1jL2NvbmZpZ3VyYXRpb24ucGhwJywicGVlLyIuJG93bmVyWyduYW1lJ10uJy1XSE1DUy50eHQnKTsNCnN5bWxpbmsoJG93bmVyWydkaXInXS4nLycuJGRpclszXS4nL2JpbGxpbmcvY29uZmlndXJhdGlvbi5waHAnLCJwZWUvIi4kb3duZXJbJ25hbWUnXS4nLVdITUNTLnR4dCcpOw0Kc3ltbGluaygkb3duZXJbJ2RpciddLicvJy4kZGlyWzNdLicvcG9ydGFsL2NvbmZpZ3VyYXRpb24ucGhwJywicGVlLyIuJG93bmVyWyduYW1lJ10uJy1XSE1DUy50eHQnKTsNCnN5bWxpbmsoJG93bmVyWydkaXInXS4nLycuJGRpclszXS4nL29yZGVyL2NvbmZpZ3VyYXRpb24ucGhwJywicGVlLyIuJG93bmVyWyduYW1lJ10uJy1XSE1DUy50eHQnKTsNCnN5bWxpbmsoJG93bmVyWydkaXInXS4nLycuJGRpclszXS4nL2NsaWVudGFyZWEvY29uZmlndXJhdGlvbi5waHAnLCJwZWUvIi4kb3duZXJbJ25hbWUnXS4nLVdITUNTLnR4dCcpOw0Kc3ltbGluaygkb3duZXJbJ2RpciddLicvJy4kZGlyWzNdLicvZG9tYWlucy9jb25maWd1cmF0aW9uLnBocCcsInBlZS8iLiRvd25lclsnbmFtZSddLictV0hNQ1MudHh0Jyk7DQoNCiRsaW5rID0gJHBhZ2VVUkwuJ3BlZS8nLiRvd25lclsnbmFtZSddLictV29yZFByZXNzLnR4dCc7DQoNCmlmKGNoa19oZWFkZXIoJGxpbmspKQ0KCXsNCgkJJHN0ciA9ICc8dHI+PHRkPicuJGRvbWFpbi4nPC90ZD48dGQ+Jy4kb3duZXJbJ25hbWUnXS4nPC90ZD48dGQ+L1dvcmRQcmVzczwvdGQ+Jy5DaHIoMTApOw0KCQlmaWxlX3B1dF9jb250ZW50cygidGVtcC50eHQiLCRzdHIsRklMRV9BUFBFTkQpOw0KCX0NCg0KDQoNCg0KfQ0KfQ0KfQ0KDQokZXRjID0gZmlsZV9nZXRfY29udGVudHMoIi9ldGMvcGFzc3dkIik7DQokZXRjeiA9IGV4cGxvZGUoIlxuIiwkZXRjKTsNCg0KZm9yZWFjaCgkZXRjeiBhcyAkZXR6KXsNCiRldGNjID0gZXhwbG9kZSgiOiIsJGV0eik7DQplcnJvcl9yZXBvcnRpbmcoMCk7DQoNCiRjdXJyZW50X2RpciA9IHBvc2l4X2dldGN3ZCgpOw0KJGRpciA9IGV4cGxvZGUoIi8iLCRjdXJyZW50X2Rpcik7DQoNCnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvd3AtY29uZmlnLnBocCcsJ3BlZS8nLiRldGNjWzBdLictV29yZFByZXNzLnR4dCcpOw0Kc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9ibG9nL3dwLWNvbmZpZy5waHAnLCdwZWUvJy4kZXRjY1swXS4nLVdvcmRQcmVzcy50eHQnKTsNCnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvd3Avd3AtY29uZmlnLnBocCcsJ3BlZS8nLiRldGNjWzBdLictV29yZFByZXNzLnR4dCcpOw0Kc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9zaXRlL3dwLWNvbmZpZy5waHAnLCdwZWUvJy4kZXRjY1swXS4nLVdvcmRQcmVzcy50eHQnKTsNCnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvY29uZmlnLnBocCcsJ3BlZS8nLiRldGNjWzBdLictUGhwQkIudHh0Jyk7DQpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL2luY2x1ZGVzL2NvbmZpZy5waHAnLCdwZWUvJy4kZXRjY1swXS4nLXZCdWxsZXRpbi50eHQnKTsNCnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvY29uZmlndXJhdGlvbi5waHAnLCdwZWUvJy4kZXRjY1swXS4nLUpvb21sYS50eHQnKTsNCnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvd2ViL2NvbmZpZ3VyYXRpb24ucGhwJywncGVlLycuJGV0Y2NbMF0uJy1Kb29tbGEudHh0Jyk7DQpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL2pvb21sYS9jb25maWd1cmF0aW9uLnBocCcsJ3BlZS8nLiRldGNjWzBdLictSm9vbWxhLnR4dCcpOw0Kc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9zaXRlL2NvbmZpZ3VyYXRpb24ucGhwJywncGVlLycuJGV0Y2NbMF0uJy1Kb29tbGEudHh0Jyk7DQpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL2NvbmZfZ2xvYmFsLnBocCcsJ3BlZS8nLiRldGNjWzBdLictSVBCLnR4dCcpOw0Kc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9pbmMvY29uZmlnLnBocCcsJ3BlZS8nLiRldGNjWzBdLictTXlCQi50eHQnKTsNCnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvU2V0dGluZ3MucGhwJywncGVlLycuJGV0Y2NbMF0uJy1TTUYudHh0Jyk7DQpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL3NpdGVzL2RlZmF1bHQvc2V0dGluZ3MucGhwJywncGVlLycuJGV0Y2NbMF0uJy1EcnVwYWwudHh0Jyk7DQpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL2UxMDdfY29uZmlnLnBocCcsJ3BlZS8nLiRldGNjWzBdLictZTEwNy50eHQnKTsNCnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvZGF0YXMvY29uZmlnLnBocCcsJ3BlZS8nLiRldGNjWzBdLictU2VkaXRpby50eHQnKTsNCnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvaW5jbHVkZXMvY29uZmlndXJlLnBocCcsJ3BlZS8nLiRldGNjWzBdLictb3NDb21tZXJjZS50eHQnKTsNCnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvY2xpZW50L2NvbmZpZ3VyYXRpb24ucGhwJywncGVlLycuJGV0Y2NbMF0uJy1XSE1DUy50eHQnKTsNCnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvY2xpZW50ZXMvY29uZmlndXJhdGlvbi5waHAnLCdwZWUvJy4kZXRjY1swXS4nLVdITUNTLnR4dCcpOw0Kc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9zdXBwb3J0L2NvbmZpZ3VyYXRpb24ucGhwJywncGVlLycuJGV0Y2NbMF0uJy1XSE1DUy50eHQnKTsNCnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvc3VwcG9ydGVzL2NvbmZpZ3VyYXRpb24ucGhwJywncGVlLycuJGV0Y2NbMF0uJy1XSE1DUy50eHQnKTsNCnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvd2htY3MvY29uZmlndXJhdGlvbi5waHAnLCdwZWUvJy4kZXRjY1swXS4nLVdITUNTLnR4dCcpOw0Kc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9kb21haW4vY29uZmlndXJhdGlvbi5waHAnLCdwZWUvJy4kZXRjY1swXS4nLVdITUNTLnR4dCcpOw0Kc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9ob3N0aW5nL2NvbmZpZ3VyYXRpb24ucGhwJywncGVlLycuJGV0Y2NbMF0uJy1XSE1DUy50eHQnKTsNCnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvd2htYy9jb25maWd1cmF0aW9uLnBocCcsJ3BlZS8nLiRldGNjWzBdLictV0hNQ1MudHh0Jyk7DQpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL2JpbGxpbmcvY29uZmlndXJhdGlvbi5waHAnLCdwZWUvJy4kZXRjY1swXS4nLVdITUNTLnR4dCcpOw0Kc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9wb3J0YWwvY29uZmlndXJhdGlvbi5waHAnLCdwZWUvJy4kZXRjY1swXS4nLVdITUNTLnR4dCcpOw0Kc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9vcmRlci9jb25maWd1cmF0aW9uLnBocCcsJ3BlZS8nLiRldGNjWzBdLictV0hNQ1MudHh0Jyk7DQpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL2NsaWVudGFyZWEvY29uZmlndXJhdGlvbi5waHAnLCdwZWUvJy4kZXRjY1swXS4nLVdITUNTLnR4dCcpOw0Kc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9kb21haW5zL2NvbmZpZ3VyYXRpb24ucGhwJywncGVlLycuJGV0Y2NbMF0uJy1XSE1DUy50eHQnKTsNCmlmKGNoa19oZWFkZXIoJGxpbmspKQ0KCXsNCgkJJHN0ciA9ICc8dHI+PHRkPjwvdGQ+PHRkPicuJGV0Y2NbMF0uJzwvdGQ+PHRkPi9Xb3JkUHJlc3M8L3RkPicuQ2hyKDEwKTsNCgkJZmlsZV9wdXRfY29udGVudHMoInRlbXAudHh0Iiwkc3RyLEZJTEVfQVBQRU5EKTsNCgl9DQp9DQoNCg0KDQoNCmZ1bmN0aW9uIGNoa19oZWFkZXIoJGxpbmspew0KJHBlZSA9IGdldF9oZWFkZXJzKCRsaW5rLDEpOw0KaWYoc3RycG9zKCRwZWVbMF0sIjIwMCIpKXsNCnJldHVybiB0cnVlOw0KfWVsc2V7IHJldHVybiBmYWxzZTsgfQ0KfQ0KDQpmdW5jdGlvbiBGaW5kKCRzdHIsJHN0YXJ0LCRlbmQpew0KJGxlbiA9IHN0cmxlbigkc3RyKTsNCiRzdGFydF9wb3MgPSAoc3RycG9zKCRzdHIsJHN0YXJ0KSArIHN0cmxlbigkc3RhcnQpKTsNCiRzdHIgPSBzdWJzdHIoJHN0ciwkc3RhcnRfcG9zKTsNCiRlbmRfcG9zID0gc3RycG9zKCRzdHIsJGVuZCk7DQokc3RyID0gc3Vic3RyKCRzdHIsMCwkZW5kX3Bvcyk7DQpyZXR1cm4gJHN0cjsgICAgDQp9DQoNCiRwYWdlVVJMID0gJ2h0dHA6Ly8nLiRfU0VSVkVSWyJTRVJWRVJfTkFNRSJdLiRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdOw0KJHUgPSBleHBsb2RlKCIvIiwkcGFnZVVSTCApOw0KJHBhZ2VVUkwgPXN0cl9yZXBsYWNlKCR1W2NvdW50KCR1KS0xXSwiIiwkcGFnZVVSTCApOw0KDQoNCiMjIyMjIyMNCmZ1bmN0aW9uIGNtc19hZGQoJGxpbmssJGRvbWFpbiwkb3duZXIsJGNtcykNCnsNCgkNCgkkbGluayA9ICRsaW5rLictJy4kY21zLicudHh0JzsNCglpZihjaGtfaGVhZGVyKCRsaW5rKSkNCgl7DQoJCSR1cmwgPSAnaHR0cDovLycuJGRvbWFpbjsNCgkJJHN0ciA9ICc8dHI+PHRkPiA8YSBocmVmPScuJHVybC4nPicuJGRvbWFpbi4nPC9hPjwvdGQ+PHRkPicuJG93bmVyLic8L3RkPjx0ZD48YSANCg0KaHJlZj0nLiRsaW5rLic+Jy4kY21zLic8L3RkPicuQ2hyKDEwKTsNCgkJZmlsZV9wdXRfY29udGVudHMoInBlZS50bXAiLCRzdHIsRklMRV9BUFBFTkQpOw0KCQllY2hvICRzdHI7DQoJCQ0KCX0NCn0NCg0KZnVuY3Rpb24gQ3VybFBhZ2UoJHVybCwkcG9zdCA9IG51bGwsJGhlYWQgPSB0cnVlKSB7DQokY2ggPSBjdXJsX2luaXQoKTsNCmN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsICR1cmwpOw0KY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0hFQURFUiwgJGhlYWQpOyANCmN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgMSk7DQpjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEpOw0KY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCB0cnVlKTsNCmN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgMik7DQpjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVNFUkFHRU5ULCAkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pOw0KDQpjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ09PS0lFRklMRSwgIkNPT0tJRS50eHQiKTsgDQpjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ09PS0lFSkFSLCAiQ09PS0lFLnR4dCIpOw0KDQpJZiAoJHBvc3QgIT0gTlVMTCl7DQpjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVCwgMSk7DQpjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVEZJRUxEUywgJHBvc3QpOw0KfQ0KJHVybFBhZ2UgPSBjdXJsX2V4ZWMoJGNoKTsNCg0KaWYoY3VybF9lcnJubygkY2gpKXsNCmVjaG8gY3VybF9lcnJvcigkY2gpOw0KfQ0KDQpjdXJsX2Nsb3NlKCRjaCk7DQpyZXR1cm4oJHVybFBhZ2UpOw0KfQ0KDQoNCg0KZnVuY3Rpb24gbGlzdGFsbCgkZmlsZSwkc3RyKXsNCmlmKGZpbGVfZXhpc3RzKCRmaWxlKSl7DQokZG8gPSBmaWxlX2dldF9jb250ZW50cygkZmlsZSk7DQppZighc3RycG9zKCRkbywkc3RyKSl7DQpmaWxlX3B1dF9jb250ZW50cygkZmlsZSwkc3RyLEZJTEVfQVBQRU5EKTsNCn0NCn1lbHNlew0KZmlsZV9wdXRfY29udGVudHMoJGZpbGUsJHN0cixGSUxFX0FQUEVORCk7DQp9DQp9DQoNCg0KDQplY2hvICI8Y2VudGVyPg0KDQo8aW1nIHNyYz0naHR0cDovL2kuaW1ndXIuY29tL1Fua3lxRFoucG5nJz48YnI+DQpbIDxhIGhyZWY9Jz9kbz1jbXNfZGV0ZWN0Jz5DbXMgRGV0ZWN0b3I8L2E+IF0gLS0gWyA8YSBocmVmPSc/ZG89cGFzc19jaGFuZ2UnPk1hc3MgUGFzcyBDaGFuZ2U8L2E+IF0gLS0gWyA8YSANCg0KaHJlZj0nP2RvPXdwX2RlZic+V3AgTWFzcyBEZWZhY2VyPC9hPiBdIC0tIFsgPGEgaHJlZj0nP2RvPXVwbG9hZGVyJz5VcGxvYWRlcjwvYT4gXTxicj48YnI+PGJyPjwvY2VudGVyPiAiOw0KDQppZihpc3NldCgkX1JFUVVFU1RbJ2RvJ10pKXsgDQpzd2l0Y2ggKCRfUkVRVUVTVFsnZG8nXSl7DQoNCiMjIyMjIyMjIyMjIyMjIyNDTVMgREVURUNUT1INCmNhc2UgJ2Ntc19kZXRlY3QnOg0KDQppZighZmlsZV9leGlzdHMoJ3BlZS50bXAnKSl7DQpAZm9wZW4oJ3BlZS50bXAnLCAndycpOw0KDQplY2hvJzx0YWJsZSBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjEiIHdpZHRoPSI0NSUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCIgY2xhc3M9InRkMSI+JzsNCmVjaG8nPHRyPjx0ZD48Y2VudGVyPjxiPlNJVEU8L2I+PC9jZW50ZXI+PC90ZD48dGQ+PGNlbnRlcj48Yj5VU0VSPC9iPjwvY2VudGVyPjwvdGQ+PHRkPjwvY2VudGVyPjxiPkNNUzwvYj48L2NlbnRlcj48L3RkPic7DQoNCiRwID0gMDsNCg0KaWYoaXNfcmVhZGFibGUoIi92YXIvbmFtZWQiKSl7DQokbGlzdCA9IHNjYW5kaXIoIi92YXIvbmFtZWQiKTsNCiRjdXJyZW50X2RpciA9IHBvc2l4X2dldGN3ZCgpOw0KJGRpciA9IGV4cGxvZGUoIi8iLCRjdXJyZW50X2Rpcik7DQpmb3JlYWNoKCRsaXN0IGFzICRkb21haW4pew0KaWYoc3RycG9zKCRkb21haW4sIi5kYiIpKQ0Kew0KCSRkb21haW4gPSBzdHJfcmVwbGFjZSgnLmRiJywnJywkZG9tYWluKTsNCgkkb3duZXIgPSBwb3NpeF9nZXRwd3VpZChmaWxlb3duZXIoIi9ldGMvdmFsaWFzZXMvIi4kZG9tYWluKSk7DQoJDQplcnJvcl9yZXBvcnRpbmcoMCk7DQoNCiRsaW5rID0gJHBhZ2VVUkwuJ3BlZS8nLiRvd25lclsnbmFtZSddOw0KDQpjbXNfYWRkKCRsaW5rLCRkb21haW4sJG93bmVyWyduYW1lJ10sIldvcmRQcmVzcyIpOw0KY21zX2FkZCgkbGluaywkZG9tYWluLCRvd25lclsnbmFtZSddLCJKb29tbGEiKTsNCmNtc19hZGQoJGxpbmssJGRvbWFpbiwkb3duZXJbJ25hbWUnXSwidkJ1bGxldGluIik7DQpjbXNfYWRkKCRsaW5rLCRkb21haW4sJG93bmVyWyduYW1lJ10sIldITUNTIik7DQpjbXNfYWRkKCRsaW5rLCRkb21haW4sJG93bmVyWyduYW1lJ10sIlBocEJCIik7DQpjbXNfYWRkKCRsaW5rLCRkb21haW4sJG93bmVyWyduYW1lJ10sIk15QkIiKTsNCmNtc19hZGQoJGxpbmssJGRvbWFpbiwkb3duZXJbJ25hbWUnXSwiSVBCIik7DQpjbXNfYWRkKCRsaW5rLCRkb21haW4sJG93bmVyWyduYW1lJ10sIlNNRiIpOw0KY21zX2FkZCgkbGluaywkZG9tYWluLCRvd25lclsnbmFtZSddLCJEcnVwYWwiKTsNCmNtc19hZGQoJGxpbmssJGRvbWFpbiwkb3duZXJbJ25hbWUnXSwiZTEwNyIpOw0KY21zX2FkZCgkbGluaywkZG9tYWluLCRvd25lclsnbmFtZSddLCJTZWRpdGlvIik7DQpjbXNfYWRkKCRsaW5rLCRkb21haW4sJG93bmVyWyduYW1lJ10sIm9zQ29tbWVyY2UiKTsNCg0KfQ0KfQ0KfQ0KfWVsc2V7DQplY2hvJzx0YWJsZSBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjEiIHdpZHRoPSI0NSUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCIgY2xhc3M9InRkMSI+JzsNCmVjaG8nPHRyPjx0ZD48Y2VudGVyPjxiPlNJVEU8L2I+PC9jZW50ZXI+PC90ZD48dGQ+PGNlbnRlcj48Yj5VU0VSPC9iPjwvY2VudGVyPjwvdGQ+PHRkPjwvY2VudGVyPjxiPkNNUzwvYj48L2NlbnRlcj48L3RkPic7DQokY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRwYWdlVVJMLidwZWUudG1wJyk7DQplY2hvICRjb250ZW50Ow0KfQ0KYnJlYWs7DQoNCg0KDQojIyMjIyMjIyMjIyMjIyMjTUFTUyBERUZBQ0UNCmNhc2UgJ3Bhc3NfY2hhbmdlJzoNCg0KZWNobyA8PDxQRUUNCjxmb3JtIG1ldGhvZD0nUE9TVCc+DQo8Y2VudGVyPg0KVVNFUiA6IDxpbnB1dCBzaXplPScyMCcgdmFsdWU9J2pjYScgbmFtZT0ndXNlcicgdHlwZT0ndGV4dCc+PGJyPg0KUEFTUyA6IDxpbnB1dCBzaXplPScyMCcgdmFsdWU9J2pjYScgbmFtZT0ncGFzcycgdHlwZT0ndGV4dCc+DQo8YnI+DQo8aW5wdXQgdmFsdWU9J0NoYW5nZScgbmFtZT0nJyB0eXBlPSdzdWJtaXQnPjxicj48YnI+DQo8L2Zvcm0+DQoNClBFRTsNCg0KaWYoJF9QT1NUKXsNCiMjIyMjIyMjIyMjIyMjIyMjIyMgVVNFUiAmIFBBU1MgIyMjIyMjIyMjIyMjIyMjIw0KJHVzZXIgPSAkX1BPU1RbJ3VzZXInXTsNCiRwYXNzID0gJF9QT1NUWydwYXNzJ107DQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KDQppZihpc19yZWFkYWJsZSgiL3Zhci9uYW1lZCIpKQ0Kew0KCQ0KCWVjaG8nPHRhYmxlIGFsaWduPSJjZW50ZXIiIGJvcmRlcj0iMSIgd2lkdGg9IjQ1JSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSI0Ij4nOw0KCWVjaG8gJzx0cj48dGQ+PGI+RE9NQUlOPC9iPjwvdGQ+PHRkPlVTRVI8L3RkPjx0ZD5DTVM8L3RkPjx0ZD5TVEFUVVM8L2I+PC90ZD4nOw0KCSRsaXN0ID0gc2NhbmRpcigiL3Zhci9uYW1lZCIpOw0KCWZvcmVhY2goJGxpc3QgYXMgJGRvbWFpbil7DQoJaWYoc3RycG9zKCRkb21haW4sIi5kYiIpKQ0KCXsNCgkJJGRvbWFpbiA9IHN0cl9yZXBsYWNlKCcuZGInLCcnLCRkb21haW4pOw0KCQkkb3duZXIgPSBwb3NpeF9nZXRwd3VpZChmaWxlb3duZXIoIi9ldGMvdmFsaWFzZXMvIi4kZG9tYWluKSk7DQoJCSR1cmwgPSAnaHR0cDovLycuJGRvbWFpbjsNCgkJaWYoY2hrX2hlYWRlcigkcGFnZVVSTC4ncGVlLycuJG93bmVyWyduYW1lJ10uJy1Xb3JkUHJlc3MudHh0JykpDQoJCXsgDQoJCQkkY29uZmlnID0gJHBhZ2VVUkwuJ3BlZS8nLiRvd25lclsnbmFtZSddLictV29yZFByZXNzLnR4dCc7DQoJCQkNCgkJCWZpbGVfZ2V0X2NvbnRlbnRzKCRwYWdlVVJMLidwZWUvJy4kb3duZXJbJ25hbWUnXS4nLVdvcmRQcmVzcy50eHQnKTsNCgkJCSMjR0VUIERBVEFCQVNFIElORk8gRlJPTSBDT05GSUdVUkFUSU9OIEZJTEUNCgkJCSRjbmYgPSBmaWxlX2dldF9jb250ZW50cygkcGFnZVVSTC4ncGVlLycuJG93bmVyWyduYW1lJ10uJy1Xb3JkUHJlc3MudHh0Jyk7DQoJCQkkaG9zdG5hbWUgPSBGaW5kKCRjbmYsImRlZmluZSgnREJfSE9TVCcsICciLCInKTsiKTsNCgkJCSR1c2VybmFtZSA9IEZpbmQoJGNuZiwiZGVmaW5lKCdEQl9VU0VSJywgJyIsIicpOyIpOw0KCQkJJHBhc3N3b3JkID0gRmluZCgkY25mLCJkZWZpbmUoJ0RCX1BBU1NXT1JEJywgJyIsIicpOyIpOw0KCQkJJGRibmFtZSA9IEZpbmQoJGNuZiwiZGVmaW5lKCdEQl9OQU1FJywgJyIsIicpOyIpOw0KCQkJJHByZWZpeCA9IEZpbmQoJGNuZiwidGFibGVfcHJlZml4ICA9ICciLCInIik7DQoJCQkNCgkJCSRsaW5rPW15c3FsX2Nvbm5lY3QoJGhvc3RuYW1lLCR1c2VybmFtZSwkcGFzc3dvcmQpOw0KCQkJDQoJCQlpZiAoJGxpbmspIA0KCQkJew0KCQkJCSRoYXNoID0gY3J5cHQoJHBhc3MpOw0KCQkJCW15c3FsX3NlbGVjdF9kYigkZGJuYW1lLCRsaW5rKSA7DQoJCQkJJHRhYiA9ICRwcmVmaXguJ3VzZXJzJzsJCQkNCgkJCQkkcXVlcnkyICAgPSBAbXlzcWxfcXVlcnkoIlVQREFURSBgJHRhYmAgIFNFVCBgdXNlcl9sb2dpbmAgPSckdXNlciciKTsNCiAJCQkJJHF1ZXJ5MyAgPSBAbXlzcWxfcXVlcnkoIlVQREFURSBgJHRhYmAgIFNFVCBgdXNlcl9wYXNzYCA9JyRoYXNoJyIpOw0KCQkJCSRyZXEgPUBteXNxbF9xdWVyeSgiU0VMRUNUICogZnJvbSAgYCIuJHByZWZpeC4ib3B0aW9uc2AgV0hFUkUgb3B0aW9uX25hbWU9J2hvbWUnIik7DQoJCQkJJGRhdGEgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVxKTsNCgkJCQkkc2l0ZV91cmw9JGRhdGFbIm9wdGlvbl92YWx1ZSJdOw0KCQkJCQ0KCQkJCWVycm9yX3JlcG9ydGluZygwKTsNCgkJCQllY2hvICc8dHI+PHRkPjxhIGhyZWY9Jy4kdXJsLicgb25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmKTtyZXR1cm4gDQoNCmZhbHNlOyI+Jy4kZG9tYWluLic8L2E+PC90ZD48dGQ+Jy4kb3duZXJbJ25hbWUnXS4nPC90ZD48dGQ+PGEgaHJlZj0nLiRjb25maWcuJz5Xb3JkUHJlc3M8L2E+PC90ZD48dGQ+PGZvbnQgDQoNCmNvbG9yPSJncmVlbiI+QmVyaGFzaWwuLjwvZm9udD48L3RkPic7DQoJCQkJDQoJCQl9ZWxzZXsNCgkJCQllY2hvICc8dHI+PHRkPjxhIGhyZWY9Jy4kdXJsLicgb25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmKTtyZXR1cm4gDQoNCmZhbHNlOyI+Jy4kZG9tYWluLic8L2E+PC90ZD48dGQ+Jy4kb3duZXJbJ25hbWUnXS4nPC90ZD48dGQ+PGEgaHJlZj0nLiRjb25maWcuJz5Xb3JkUHJlc3M8L2E+PC90ZD48dGQ+PGZvbnQgY29sb3I9InJlZCI+R2FnYWwgOiggPC9mb250PjwvdGQ+JzsNCgkJCX0NCgkJDQoJCQkNCgkJDQoJCQ0KCQl9DQoJCQ0KCQkNCgkJDQoJCWVsc2VpZihjaGtfaGVhZGVyKCRwYWdlVVJMLidwZWUvJy4kb3duZXJbJ25hbWUnXS4nLUpvb21sYS50eHQnKSkNCgkJeyANCgkJDQoJCSMjR0VUIERBVEFCQVNFIElORk8gRlJPTSBDT05GSUdVUkFUSU9OIEZJTEUNCgkJCSRjbmYgPSBmaWxlX2dldF9jb250ZW50cygkcGFnZVVSTC4ncGVlLycuJG93bmVyWyduYW1lJ10uJy1Kb29tbGEudHh0Jyk7DQoJCQkkY29uZmlnID0gJHBhZ2VVUkwuJ3BlZS8nLiRvd25lclsnbmFtZSddLictSm9vbWxhLnR4dCc7DQoJCQkNCgkJCWlmKHByZWdfbWF0Y2goJyUoSkNvbmZpZ3xtb3NDb25maWcpJScsJGNuZikpew0KCQkJDQoJCQkjIyMjIyMNCgkJCWlmKHByZWdfbWF0Y2goJyVKQ29uZmlnJScsICRjbmYpKXsNCgkJCSR1c2VybmFtZT1GaW5kKCRjbmYsIlwkdXNlciA9ICciLCInIik7DQoJCQkkcGFzc3dvcmQ9RmluZCgkY25mLCJcJHBhc3N3b3JkID0gJyIsIiciKTsNCgkJCSRkYm5hbWU9RmluZCgkY25mLCJcJGRiID0gJyIsIiciKTsNCgkJCSRwcmVmaXg9RmluZCgkY25mLCJcJGRicHJlZml4ID0gJyIsIiciKTsNCgkJCQ0KCQkJDQoJCQkkbGluaz1teXNxbF9jb25uZWN0KCJsb2NhbGhvc3QiLCR1c2VybmFtZSwkcGFzc3dvcmQpOw0KCQkJDQoJCQlpZiAoJGxpbmspIA0KCQkJew0KCQkJCSRoYXNoID0gbWQ1KCR1c2VyKTsNCgkJCQlteXNxbF9zZWxlY3RfZGIoJGRibmFtZSwkbGluaykgOw0KCQkJCSR0YWIgPSAkcHJlZml4Lid1c2Vycyc7CQkJDQoJCQkJJHF1ZXJ5MiAgID0gQG15c3FsX3F1ZXJ5KCJVUERBVEUgYCR0YWJgICBTRVQgYHVzZXJuYW1lYCA9JyR1c2VyJyIpOw0KIAkJCQkkcXVlcnkzICA9IEBteXNxbF9xdWVyeSgiVVBEQVRFIGAkdGFiYCAgU0VUIGBwYXNzd29yZGAgPSckaGFzaCciKTsNCgkJCQkNCgkJCWVjaG8gJzx0cj48dGQ+PGEgaHJlZj0nLiR1cmwuJyBvbmNsaWNrPSJ3aW5kb3cub3Blbih0aGlzLmhyZWYpO3JldHVybiANCg0KZmFsc2U7Ij4nLiRkb21haW4uJzwvYT48L3RkPjx0ZD4nLiRvd25lclsnbmFtZSddLic8L3RkPjx0ZD48YSBocmVmPScuJGNvbmZpZy4nPkpvb21sYTwvYT48L3RkPjx0ZD48Zm9udCANCg0KY29sb3I9ImdyZWVuIj5CZXJoYXNpbC4uPC9mb250Pjxicj4nOw0KDQoJCQl9ZWxzZXsNCgkJCQllY2hvICc8dHI+PHRkPjxhIGhyZWY9Jy4kdXJsLicgb25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmKTtyZXR1cm4gDQoNCmZhbHNlOyI+Jy4kZG9tYWluLic8L2E+PC90ZD48dGQ+Jy4kb3duZXJbJ25hbWUnXS4nPC90ZD48dGQ+PGEgaHJlZj0nLiRjb25maWcuJz5Kb29tbGE8L2E+PC90ZD48dGQ+PGZvbnQgY29sb3I9InJlZCI+R2FnYWwuLjwvZm9udD48L3RkPic7DQoJCQl9DQoJCQkNCgkJCX0NCgkJCQ0KCQkJIyMjIyMNCgkJCWVsc2VpZihwcmVnX21hdGNoKCclbW9zQ29uZmlnJScsJGNuZikpew0KCQkJJHVzZXJuYW1lPUZpbmQoJGNuZiwiXCRtb3NDb25maWdfdXNlciA9ICciLCInIik7DQoJCQkkcGFzc3dvcmQ9RmluZCgkY25mLCJcJG1vc0NvbmZpZ19wYXNzd29yZCA9ICciLCInIik7DQoJCQkkZGJuYW1lPUZpbmQoJGNuZiwiXCRtb3NDb25maWdfZGIgPSAnIiwiJyIpOw0KCQkJJHByZWZpeD1GaW5kKCRjbmYsIlwkbW9zQ29uZmlnX2RicHJlZml4ID0gJyIsIiciKTsNCgkJCSRwd2QgPSBtZDUoJG5wYXNzKTsNCgkJCQ0KCQkJJGxpbms9bXlzcWxfY29ubmVjdCgibG9jYWxob3N0IiwkdXNlcm5hbWUsJHBhc3N3b3JkKTsNCgkJCQ0KCQkJaWYgKCRsaW5rKSANCgkJCXsNCgkJCQkkaGFzaCA9IG1kNSgkcGFzcyk7DQoJCQkJbXlzcWxfc2VsZWN0X2RiKCRkYm5hbWUsJGxpbmspIDsNCgkJCQkkdGFiID0gJHByZWZpeC4ndXNlcnMnOwkJCQ0KCQkJCSRxdWVyeTIgICA9IEBteXNxbF9xdWVyeSgiVVBEQVRFIGAkdGFiYCAgU0VUIGB1c2VybmFtZWAgPSckdXNlciciKTsNCiAJCQkJJHF1ZXJ5MyAgPSBAbXlzcWxfcXVlcnkoIlVQREFURSBgJHRhYmAgIFNFVCBgcGFzc3dvcmRgID0nJGhhc2gnIik7DQoJCQkJDQoJCQkJZWNobyAnPHRyPjx0ZD48YSBocmVmPScuJHVybC4nIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRoaXMuaHJlZik7cmV0dXJuIA0KDQpmYWxzZTsiPicuJGRvbWFpbi4nPC9hPjwvdGQ+PHRkPicuJG93bmVyWyduYW1lJ10uJzwvdGQ+PHRkPjxhIGhyZWY9Jy4kY29uZmlnLic+Sm9vbWxhPC9hPjwvdGQ+PHRkPjxmb250IA0KDQpjb2xvcj0iZ3JlZW4iPkJlcmhhc2lsIE5pY2ggTWJsb28uLjwvZm9udD48YnI+JzsNCg0KCQkJfWVsc2V7DQoJCQkJZWNobyAnPHRyPjx0ZD48YSBocmVmPScuJHVybC4nIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRoaXMuaHJlZik7cmV0dXJuIA0KDQpmYWxzZTsiPicuJGRvbWFpbi4nPC9hPjwvdGQ+PHRkPicuJG93bmVyWyduYW1lJ10uJzwvdGQ+PHRkPjxhIGhyZWY9Jy4kY29uZmlnLic+Sm9vbWxhPC9hPjwvdGQ+PHRkPjxmb250IGNvbG9yPSJyZWQiPkdhZ2FsIDogPC9mb250PjwvdGQ+JzsNCgkJCX0NCgkJCQ0KCQkJfQ0KCQkJDQoJCQkNCgkJCX0NCgkJCSMjIyMjIyMjIw0KCQkJDQoJCQkNCgkJfQ0KCX0NCn0NCn0NCg0KZWxzZWlmKGlzX3JlYWRhYmxlKCIvZXRjL3Bhc3N3ZCIpKXsNCg0KZWNobyc8dGFibGUgYWxpZ249ImNlbnRlciIgYm9yZGVyPSIxIiB3aWR0aD0iNDUlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjQiPic7DQplY2hvICc8dHI+PHRkPjxiPkRPTUFJTjwvYj48L3RkPjx0ZD5VU0VSPC90ZD48dGQ+Q01TPC90ZD48dGQ+U1RBVFVTPC9iPjwvdGQ+JzsNCgkJCQ0KZm9yZWFjaCgkZXRjeiBhcyAkZXR6KXsNCiRldGNjID0gZXhwbG9kZSgiOiIsJGV0eik7DQoNCg0KaWYoY2hrX2hlYWRlcigkcGFnZVVSTC4ncGVlLycuJGV0Y2NbMF0uJy1Xb3JkUHJlc3MudHh0JykpDQoJCXsgDQoJCQkNCgkJCSRjb25maWcgPSAkcGFnZVVSTC4ncGVlLycuJG93bmVyWyduYW1lJ10uJy1Xb3JkUHJlc3MudHh0JzsNCgkJCWZpbGVfZ2V0X2NvbnRlbnRzKCRwYWdlVVJMLidwZWUvJy4kZXRjY1swXS4nLVdvcmRQcmVzcy50eHQnKTsNCgkJCSMjR0VUIERBVEFCQVNFIElORk8gRlJPTSBDT05GSUdVUkFUSU9OIEZJTEUNCgkJCSRjbmYgPSBmaWxlX2dldF9jb250ZW50cygkcGFnZVVSTC4ncGVlLycuJGV0Y2NbMF0uJy1Xb3JkUHJlc3MudHh0Jyk7DQoJCQkkaG9zdG5hbWUgPSBGaW5kKCRjbmYsImRlZmluZSgnREJfSE9TVCcsICciLCInKTsiKTsNCgkJCSR1c2VybmFtZSA9IEZpbmQoJGNuZiwiZGVmaW5lKCdEQl9VU0VSJywgJyIsIicpOyIpOw0KCQkJJHBhc3N3b3JkID0gRmluZCgkY25mLCJkZWZpbmUoJ0RCX1BBU1NXT1JEJywgJyIsIicpOyIpOw0KCQkJJGRibmFtZSA9IEZpbmQoJGNuZiwiZGVmaW5lKCdEQl9OQU1FJywgJyIsIicpOyIpOw0KCQkJJHByZWZpeCA9IEZpbmQoJGNuZiwidGFibGVfcHJlZml4ICA9ICciLCInIik7DQoJCQkNCgkJCSRsaW5rPW15c3FsX2Nvbm5lY3QoJGhvc3RuYW1lLCR1c2VybmFtZSwkcGFzc3dvcmQpOw0KCQkJDQoJCQlpZiAoJGxpbmspIA0KCQkJew0KCQkJCQ0KCQkJCSRoYXNoID0gY3J5cHQoJHVzZXIpOw0KCQkJCW15c3FsX3NlbGVjdF9kYigkZGJuYW1lLCRsaW5rKSA7DQoJCQkJJHJlcSA9bXlzcWxfcXVlcnkoIlNFTEVDVCAqIGZyb20gIGAiLiRwcmVmaXguIm9wdGlvbnNgIFdIRVJFIG9wdGlvbl9uYW1lPSdob21lJyIpOw0KCQkJCSRkYXRhID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlcSk7DQoJCQkJJHNpdGVfdXJsPSRkYXRhWyJvcHRpb25fdmFsdWUiXTsNCgkJCQkkdGFiID0gJHByZWZpeC4ndXNlcnMnOwkJCQ0KCQkJCSRxdWVyeTIgICA9IEBteXNxbF9xdWVyeSgiVVBEQVRFIGAkdGFiYCAgU0VUIGB1c2VyX2xvZ2luYCA9JyR1c2VyJyIpOw0KIAkJCQkkcXVlcnkzICA9IEBteXNxbF9xdWVyeSgiVVBEQVRFIGAkdGFiYCAgU0VUIGB1c2VyX3Bhc3NgID0nJGhhc2gnIik7DQoJCQkJDQoJCQkJZXJyb3JfcmVwb3J0aW5nKDApOw0KCQkJCQ0KCQkJCWVjaG8gJzx0cj48dGQ+PGEgaHJlZj0nLiR1cmwuJyBvbmNsaWNrPSJ3aW5kb3cub3Blbih0aGlzLmhyZWYpO3JldHVybiANCg0KZmFsc2U7Ij4nLiRkb21haW4uJzwvYT48L3RkPjx0ZD4nLiRvd25lclsnbmFtZSddLic8L3RkPjx0ZD48YSBocmVmPScuJGNvbmZpZy4nPldvcmRQcmVzczwvYT48L3RkPjx0ZD48Zm9udCANCg0KY29sb3I9ImdyZWVuIj5CZXJoYXNpbCBOaWNoIE1ibG9vLi48L2ZvbnQ+PGJyPic7DQoNCgkJCX1lbHNlew0KCQkJCWVjaG8gJzx0cj48dGQ+PGEgaHJlZj0nLiR1cmwuJyBvbmNsaWNrPSJ3aW5kb3cub3Blbih0aGlzLmhyZWYpO3JldHVybiANCg0KZmFsc2U7Ij4nLiRkb21haW4uJzwvYT48L3RkPjx0ZD4nLiRvd25lclsnbmFtZSddLic8L3RkPjx0ZD48YSBocmVmPScuJGNvbmZpZy4nPldvcmRQcmVzczwvYT48L3RkPjx0ZD48Zm9udCBjb2xvcj0icmVkIj5HYWdhbCA6IDwvZm9udD48L3RkPic7DQoJCQl9DQoJCQ0KCQkJDQoJCQ0KCQkNCgkJfQ0KCQkNCgkJDQoJCQ0KCQllbHNlaWYoY2hrX2hlYWRlcigkcGFnZVVSTC4ncGVlLycuJGV0Y2NbMF0uJy1Kb29tbGEudHh0JykpDQoJCXsgDQoJCQ0KCQkjI0dFVCBEQVRBQkFTRSBJTkZPIEZST00gQ09ORklHVVJBVElPTiBGSUxFDQoJCQkkY25mID0gZmlsZV9nZXRfY29udGVudHMoJHBhZ2VVUkwuJ3BlZS8nLiRldGNjWzBdLictSm9vbWxhLnR4dCcpOw0KCQkJJGNvbmZpZyA9ICRwYWdlVVJMLidwZWUvJy4kb3duZXJbJ25hbWUnXS4nLUpvb21sYS50eHQnOw0KCQkJDQoJCQlpZihwcmVnX21hdGNoKCclKEpDb25maWd8bW9zQ29uZmlnKSUnLCRjbmYpKXsNCgkJCQ0KCQkJIyMjIyMjDQoJCQlpZihwcmVnX21hdGNoKCclSkNvbmZpZyUnLCAkY25mKSl7DQoJCQkkdXNlcm5hbWU9RmluZCgkY25mLCJcJHVzZXIgPSAnIiwiJyIpOw0KCQkJJHBhc3N3b3JkPUZpbmQoJGNuZiwiXCRwYXNzd29yZCA9ICciLCInIik7DQoJCQkkZGJuYW1lPUZpbmQoJGNuZiwiXCRkYiA9ICciLCInIik7DQoJCQkkcHJlZml4PUZpbmQoJGNuZiwiXCRkYnByZWZpeCA9ICciLCInIik7DQoJCQkkc2l0ZV91cmwgPSBGaW5kKCRjbmYsIlwkbWFpbGZyb20gPSAnIiwiJyIpOw0KCQkJJHNpdGVfdXJsID0gZXhwbG9kZSgiQCIsJHNpdGVfdXJsKTsNCgkJCQ0KCQkJDQoJCQkNCgkJCSRsaW5rPW15c3FsX2Nvbm5lY3QoImxvY2FsaG9zdCIsJHVzZXJuYW1lLCRwYXNzd29yZCk7DQoJCQkNCgkJCWlmICgkbGluaykgDQoJCQl7DQoJCQkJJGhhc2ggPSBtZDUoJHBhc3MpOw0KCQkJCW15c3FsX3NlbGVjdF9kYigkZGJuYW1lLCRsaW5rKSA7DQoJCQkJJHRhYiA9ICRwcmVmaXguJ3VzZXJzJzsJCQkNCgkJCQkkcXVlcnkyICAgPSBAbXlzcWxfcXVlcnkoIlVQREFURSBgJHRhYmAgIFNFVCBgdXNlcm5hbWVgID0nJHVzZXInIik7DQogCQkJCSRxdWVyeTMgID0gQG15c3FsX3F1ZXJ5KCJVUERBVEUgYCR0YWJgICBTRVQgYHBhc3N3b3JkYCA9JyRoYXNoJyIpOw0KCQkJZWNobyAnPHRyPjx0ZD48YSBocmVmPScuJHVybC4nIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRoaXMuaHJlZik7cmV0dXJuIA0KDQpmYWxzZTsiPicuJGRvbWFpbi4nPC9hPjwvdGQ+PHRkPicuJG93bmVyWyduYW1lJ10uJzwvdGQ+PHRkPjxhIGhyZWY9Jy4kY29uZmlnLic+Sm9vbWxhPC9hPjwvdGQ+PHRkPjxmb250IA0KDQpjb2xvcj0iZ3JlZW4iPkJlcmhhc2lsIE5pY2ggTWJsb28uLjwvZm9udD48YnI+JzsNCg0KCQkJfWVsc2V7DQoJCQkJZWNobyAnPHRyPjx0ZD48YSBocmVmPScuJHVybC4nIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRoaXMuaHJlZik7cmV0dXJuIA0KDQpmYWxzZTsiPicuJGRvbWFpbi4nPC9hPjwvdGQ+PHRkPicuJG93bmVyWyduYW1lJ10uJzwvdGQ+PHRkPjxhIGhyZWY9Jy4kY29uZmlnLic+Sm9vbWxhPC9hPjwvdGQ+PHRkPjxmb250IGNvbG9yPSJyZWQiPkdhZ2FsIDogPC9mb250PjwvdGQ+JzsNCgkJCX0NCgkJCQ0KCQkJfQ0KCQkJDQoJCQkjIyMjIw0KCQkJZWxzZWlmKHByZWdfbWF0Y2goJyVtb3NDb25maWclJywkY25mKSl7DQoJCQkkdXNlcm5hbWU9RmluZCgkY25mLCJcJG1vc0NvbmZpZ191c2VyID0gJyIsIiciKTsNCgkJCSRwYXNzd29yZD1GaW5kKCRjbmYsIlwkbW9zQ29uZmlnX3Bhc3N3b3JkID0gJyIsIiciKTsNCgkJCSRkYm5hbWU9RmluZCgkY25mLCJcJG1vc0NvbmZpZ19kYiA9ICciLCInIik7DQoJCQkkcHJlZml4PUZpbmQoJGNuZiwiXCRtb3NDb25maWdfZGJwcmVmaXggPSAnIiwiJyIpOw0KCQkJJHNpdGVfdXJsID0gRmluZCgkY25mLCJcJG1haWxmcm9tID0gJyIsIiciKTsNCgkJCSRzaXRlX3VybCA9IGV4cGxvZGUoIkAiLCRzaXRlX3VybCk7DQoJCQkNCgkJCSRsaW5rPW15c3FsX2Nvbm5lY3QoImxvY2FsaG9zdCIsJHVzZXJuYW1lLCRwYXNzd29yZCk7DQoJCQkNCgkJCWlmICgkbGluaykgDQoJCQl7DQoJCQkJJGhhc2ggPSBtZDUoJHBhc3MpOw0KCQkJCW15c3FsX3NlbGVjdF9kYigkZGJuYW1lLCRsaW5rKSA7DQoJCQkJJHRhYiA9ICRwcmVmaXguJ3VzZXJzJzsJCQkNCgkJCQkkcXVlcnkyICAgPSBAbXlzcWxfcXVlcnkoIlVQREFURSBgJHRhYmAgIFNFVCBgdXNlcm5hbWVgID0nJHVzZXInIik7DQogCQkJCSRxdWVyeTMgID0gQG15c3FsX3F1ZXJ5KCJVUERBVEUgYCR0YWJgICBTRVQgYHBhc3N3b3JkYCA9JyRoYXNoJyIpOw0KCQkJCQ0KCQkJCWVjaG8gJzx0cj48dGQ+PGEgaHJlZj0nLiR1cmwuJyBvbmNsaWNrPSJ3aW5kb3cub3Blbih0aGlzLmhyZWYpO3JldHVybiANCg0KZmFsc2U7Ij4nLiRkb21haW4uJzwvYT48L3RkPjx0ZD4nLiRvd25lclsnbmFtZSddLic8L3RkPjx0ZD48YSBocmVmPScuJGNvbmZpZy4nPkpvb21sYTwvYT48L3RkPjx0ZD48Zm9udCANCg0KY29sb3I9ImdyZWVuIj5CZXJoYXNpbCBOaWNoIE1ibG9vLi48L2ZvbnQ+PGJyPic7DQoNCgkJCX1lbHNlew0KCQkJCWVjaG8gJzx0cj48dGQ+PGEgaHJlZj0nLiR1cmwuJyBvbmNsaWNrPSJ3aW5kb3cub3Blbih0aGlzLmhyZWYpO3JldHVybiANCg0KZmFsc2U7Ij4nLiRkb21haW4uJzwvYT48L3RkPjx0ZD4nLiRvd25lclsnbmFtZSddLic8L3RkPjx0ZD48YSBocmVmPScuJGNvbmZpZy4nPkpvb21sYTwvYT48L3RkPjx0ZD48Zm9udCBjb2xvcj0icmVkIj5HYWdhbCA6IDwvZm9udD48L3RkPic7DQoJCQl9DQoJCQkNCgkJCX0NCgkJCQ0KCQkJDQoJCQl9DQoJCQkjIyMjIyMjIyMNCgkJCQ0KCQkJDQoJCX0NCgl9DQp9DQp9DQoNCg0KYnJlYWs7DQoNCg0KDQoNCg0KDQoNCg0KDQoNCiMjIyMjIyMjIyMjIyMjIyNNQVNTIERFRkFDRQ0KY2FzZSAnd3BfZGVmJzoNCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIFVTRVIgJiBQQVNTICMjIyMjIyMjIyMjIyMjIyMNCiR1c2VyID0gJ2pjYSc7DQokcGFzcyA9ICdqY2EnOw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCmVjaG8gPDw8UEVFDQo8ZGl2IGFsaWduPSJjZW50ZXIiPg0KPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0iUE9TVCI+DQoNCjxsYWJlbD5EZWZhY2UgVVJMOiA8L2xhYmVsPiA8aW5wdXQgdHlwZT0idGV4dCIgc3R5bGU9IndpZHRoOjQ1MHB4OyIgbmFtZT0iZGVmYWNlX3BhZ2UiPjxiciAvPg0KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkRFRkFDRSI+DQo8L2Zvcm0+DQoNClBFRTsNCg0KaWYoJF9QT1NUKXsgDQokZGVmYWNlID0gZmlsZV9nZXRfY29udGVudHModHJpbSgkX1BPU1RbJ2RlZmFjZV9wYWdlJ10pKTsNCg0KaWYoaXNfcmVhZGFibGUoIi92YXIvbmFtZWQiKSkNCnsNCgkNCgllY2hvJzx0YWJsZSBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjEiIHdpZHRoPSI0NSUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCI+JzsNCgllY2hvICc8dHI+PHRkPjxiPkRPTUFJTjwvYj48L3RkPjx0ZD5VU0VSPC90ZD48dGQ+Q01TPC90ZD48dGQ+U1RBVFVTPC9iPjwvdGQ+PHRkPkRFRiBVUkw8L3RkPic7DQoJJGxpc3QgPSBzY2FuZGlyKCIvdmFyL25hbWVkIik7DQoJZm9yZWFjaCgkbGlzdCBhcyAkZG9tYWluKXsNCglpZihzdHJwb3MoJGRvbWFpbiwiLmRiIikpDQoJew0KCQkkZG9tYWluID0gc3RyX3JlcGxhY2UoJy5kYicsJycsJGRvbWFpbik7DQoJCSRvd25lciA9IHBvc2l4X2dldHB3dWlkKGZpbGVvd25lcigiL2V0Yy92YWxpYXNlcy8iLiRkb21haW4pKTsNCgkJJHVybCA9ICdodHRwOi8vJy4kZG9tYWluOw0KCQlpZihjaGtfaGVhZGVyKCRwYWdlVVJMLidwZWUvJy4kb3duZXJbJ25hbWUnXS4nLVdvcmRQcmVzcy50eHQnKSkNCgkJeyANCgkJCSRjb25maWcgPSAkcGFnZVVSTC4ncGVlLycuJG93bmVyWyduYW1lJ10uJy1Xb3JkUHJlc3MudHh0JzsNCgkJCQ0KCQkJZmlsZV9nZXRfY29udGVudHMoJHBhZ2VVUkwuJ3BlZS8nLiRvd25lclsnbmFtZSddLictV29yZFByZXNzLnR4dCcpOw0KCQkJIyNHRVQgREFUQUJBU0UgSU5GTyBGUk9NIENPTkZJR1VSQVRJT04gRklMRQ0KCQkJJGNuZiA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRwYWdlVVJMLidwZWUvJy4kb3duZXJbJ25hbWUnXS4nLVdvcmRQcmVzcy50eHQnKTsNCgkJCSRob3N0bmFtZSA9IEZpbmQoJGNuZiwiZGVmaW5lKCdEQl9IT1NUJywgJyIsIicpOyIpOw0KCQkJJHVzZXJuYW1lID0gRmluZCgkY25mLCJkZWZpbmUoJ0RCX1VTRVInLCAnIiwiJyk7Iik7DQoJCQkkcGFzc3dvcmQgPSBGaW5kKCRjbmYsImRlZmluZSgnREJfUEFTU1dPUkQnLCAnIiwiJyk7Iik7DQoJCQkkZGJuYW1lID0gRmluZCgkY25mLCJkZWZpbmUoJ0RCX05BTUUnLCAnIiwiJyk7Iik7DQoJCQkkcHJlZml4ID0gRmluZCgkY25mLCJ0YWJsZV9wcmVmaXggID0gJyIsIiciKTsNCgkJCQ0KCQkJJGxpbms9bXlzcWxfY29ubmVjdCgkaG9zdG5hbWUsJHVzZXJuYW1lLCRwYXNzd29yZCk7DQoJCQkNCgkJCWlmICgkbGluaykgDQoJCQl7DQoJCQkJJGhhc2ggPSBjcnlwdCgkcGFzcyk7DQoJCQkJbXlzcWxfc2VsZWN0X2RiKCRkYm5hbWUsJGxpbmspIDsNCgkJCQkkdGFiID0gJHByZWZpeC4ndXNlcnMnOwkJCQ0KCQkJCSRxdWVyeTIgICA9IEBteXNxbF9xdWVyeSgiVVBEQVRFIGAkdGFiYCAgU0VUIGB1c2VyX2xvZ2luYCA9JyR1c2VyJyIpOw0KIAkJCQkkcXVlcnkzICA9IEBteXNxbF9xdWVyeSgiVVBEQVRFIGAkdGFiYCAgU0VUIGB1c2VyX3Bhc3NgID0nJGhhc2gnIik7DQoJCQkJJHJlcSA9QG15c3FsX3F1ZXJ5KCJTRUxFQ1QgKiBmcm9tICBgIi4kcHJlZml4LiJvcHRpb25zYCBXSEVSRSBvcHRpb25fbmFtZT0naG9tZSciKTsNCgkJCQkkZGF0YSA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXEpOw0KCQkJCSRzaXRlX3VybD0kZGF0YVsib3B0aW9uX3ZhbHVlIl07DQoJCQkJDQoJCQkJZXJyb3JfcmVwb3J0aW5nKDApOw0KCQkJCQ0KCQkJCQ0KCQllY2hvICc8dHI+PHRkPjxhIGhyZWY9Jy4kdXJsLicgb25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmKTtyZXR1cm4gDQoNCmZhbHNlOyI+Jy4kZG9tYWluLic8L2E+PC90ZD48dGQ+Jy4kb3duZXJbJ25hbWUnXS4nPC90ZD48dGQ+PGEgaHJlZj0nLiRjb25maWcuJz5Xb3JkUHJlc3M8L2E+PC90ZD48dGQ+PGZvbnQgY29sb3I9ImdyZWVuIj5bI10gDQoNClVzZXIgUGFzcyBDaGFuZ2VkIDwvZm9udD48YnI+JzsNCgkJJHBvc3QgPSAnbG9nPWFkbWluJnB3ZD1mb28mcmVtZW1iZXJtZT1mb3JldmVyJndwLXN1Ym1pdD1Mb2cgSW4mdGVzdGNvb2tpZT0xJzsNCgkJJGRlZj0iPD8gZWNobyhzdHJpcHNsYXNoZXMoYmFzZTY0X2RlY29kZSgnIi51cmxlbmNvZGUoYmFzZTY0X2VuY29kZShzdHJfcmVwbGFjZSgiJyIsIiciLCgkZGVmYWNlKSkpKS4iJykpKTsgDQoNCmV4aXQ7ID8+IjsNCgkJJGJ1ZmZlcjAgPSBDdXJsUGFnZSgkc2l0ZV91cmwuJy93cC1sb2dpbi5waHAnLCRwb3N0KTsNCgkJDQoJCWlmKCFwcmVnX21hdGNoKCIvbG9nb3V0L2kiLCRidWZmZXIwKSkNCgkJew0KCQkJZWNobyAiPGZvbnQgY29sb3I9J3JlZCc+W1hdIEZBSUxFRCBUTyBMT0dJTjwvZm9udD48YnIgLz4iOw0KCQl9ZWxzZXsNCgkJZWNobyAiPGZvbnQgY29sb3I9J2dyZWVuJz5bI10gTE9HR0VEIElOIDpEPC9mb250Pjxicj4iOw0KCQkkdXJseiA9ICRzaXRlX3VybC4iL3dwLWFkbWluL3RoZW1lLWVkaXRvci5waHAiOw0KCQkkdGhlbWVkaXRvciA9IEN1cmxQYWdlKCR1cmx6LCRjb29raWUsbnVsbCk7DQoJCQ0KCQlpZihwcmVnX21hdGNoKCIvdXBkYXRlIGZpbGUvaSIsJHRoZW1lZGl0b3IpKXsgZWNobyAidGhlbWUtZWRpdG9yIG9wZW5lZDxiciAvPjwvdGQ+IjsgfSBlbHNlIHsgZWNobyAiZXJyb3IgDQoNCm9wZW5pbmcgdGhlbWUgZWR0aXRvciE8L3RkPiI7IH0NCgkJCQ0KCQkkbm9sYSA9IGV4cGxvZGUoQ2hyKDEwKSwkdGhlbWVkaXRvcik7DQoNCgkJZm9yZWFjaCgkbm9sYSBhcyAkbmxpbmUpew0KCQlpZihwcmVnX21hdGNoKCcldGhlbWUtZWRpdG9yXC5waHBcP2ZpbGU9JScsJG5saW5lKSAmJiANCg0KcHJlZ19tYXRjaCgnJVwoKDQwNFwucGhwfGFyY2hpdmVcLnBocHxjb21tZW50XC5waHApXCklJyxzdHJ0b2xvd2VyKCRubGluZSkpKXsNCgkJJG1vZGlmeVtGaW5kKCRubGluZSwnKCcsJyknKV0gPSBGaW5kKCRubGluZSwnPGEgaHJlZj0iJywnIicpOw0KCQl9DQoJCX0NCgkJDQoJCWVjaG8gJzx0ZD4nOw0KCQlpZihpc19hcnJheSgkbW9kaWZ5KSl7DQoJCWZvcmVhY2goJG1vZGlmeSBhcyAkbWV0PT4kaW5kZmlsZSl7DQoJCSRucmkgPSBzdHJfcmVwbGFjZSgnLicsJ18nLCRtZXQpOw0KCQkkbnJpID0gIm4iLiRucmk7DQoJCSRpbmRmaWxlID1zdHJfcmVwbGFjZSgiJmFtcDsiLCImIiwkaW5kZmlsZSk7DQoJCSR1cmwgPSB0cmltKCRzaXRlX3VybC4iL3dwLWFkbWluLyIuJGluZGZpbGUpOw0KCQkkdGhlbWVwYWdlID0gQ3VybFBhZ2UoJHVybCwiIik7DQoJCSRfd3Bub25jZSA9IEZpbmQoJHRoZW1lcGFnZSwnbmFtZT0iX3dwbm9uY2UiIHZhbHVlPSInLCciJyk7DQoJCSRfZmlsZSA9IEZpbmQoJHRoZW1lcGFnZSwnbmFtZT0iZmlsZSIgdmFsdWU9IicsJyInKTsNCgkJJG5maWxlID0gZXhwbG9kZSgndGhlbWVzJywkX2ZpbGUpOw0KCQkkamZpbGUgPSAkc2l0ZV91cmwuIi93cC1jb250ZW50L3RoZW1lcyIuZW5kKCRuZmlsZSk7DQoJCS8vVXBkYXRlIGZpbGUNCgkJJHVybCA9ICRzaXRlX3VybC4iL3dwLWFkbWluL3RoZW1lLWVkaXRvci5waHAiOw0KCQkkcG9zdG1lID0gIm5ld2NvbnRlbnQ9Ii4kZGVmLiImYWN0aW9uPXVwZGF0ZSZmaWxlPSIuJF9maWxlLiImX3dwbm9uY2U9Ii4kX3dwbm9uY2UuIiZzdWJtaXQ9VXBkYXRlIEZpbGUiOw0KCQkkdGhlbWVkaWVkID0gQ3VybFBhZ2UoJHVybCwkcG9zdG1lKTsNCgkJaWYocHJlZ19tYXRjaCgnJTxkaXYgaWQ9XCJtZXNzYWdlXCIgY2xhc3M9XCJ1cGRhdGVkXCI+JScsJHRoZW1lZGllZCkpew0KCQkNCgkJJHRoZW1lID0gRmluZCgkdGhlbWVkaXRvciwnPGxpPjxhIGhyZWY9InRoZW1lLWVkaXRvci5waHA/ZmlsZT00MDQucGhwJmFtcDt0aGVtZT0nLCciPjQwNCBUZW1wbGF0ZScpOw0KCQlpZihwcmVnX21hdGNoKCIvdHdlbnR5IHRlbi9pIiwkdGhlbWUpKXsgJHRoZW1lID0gInR3ZW50eXRlbiI7IH0NCgkJZWxzZWlmKHByZWdfbWF0Y2goIi90d2VudHkgZWxldmVuL2kiLCR0aGVtZSkpeyR0aGVtZSA9ICJ0d2VudHllbGV2ZW4iO30NCgkJJHRoZW1lID0gdHJpbShzdHJfcmVwbGFjZSgiLyIsIiIsJHRoZW1lKSk7DQoJCSRkID0gICRzaXRlX3VybC4nL3dwLWNvbnRlbnQvdGhlbWVzLycuJHRoZW1lLicvNDA0LnBocCc7DQoJCWxpc3RhbGwoIndwLnR4dCIsJGQuQ2hyKDEwKSk7DQoJCX0NCiAgICAgIAl9DQoJCQ0KCQllY2hvICc8YSBocmVmPScuJGQuJz5MSU5LPC9hPjxiciAvPic7DQoJCWVjaG8gJzwvdGQ+JzsNCgkJDQoJCX19DQoJCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI0VORCBERUZBQ0UjIyMjIyMjIyMjIyMjIyMjIw0KDQoJCQl9ZWxzZXsNCgkJCQllY2hvICc8dHI+PHRkPjxhIGhyZWY9Jy4kdXJsLicgb25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmKTtyZXR1cm4gDQoNCmZhbHNlOyI+Jy4kZG9tYWluLic8L2E+PC90ZD48dGQ+Jy4kb3duZXJbJ25hbWUnXS4nPC90ZD48dGQ+PGEgaHJlZj0nLiRjb25maWcuJz5Xb3JkUHJlc3M8L2E+PC90ZD48dGQ+PGZvbnQgY29sb3I9InJlZCI+W3hdIA0KDQpHYWdhbCA6KCA8L2ZvbnQ+PC90ZD4nOw0KCQkJfQ0KCQl9fX19fQ0KCQkJDQoJCQ0KCQkNCg0KYnJlYWs7DQoNCg0KDQovLyBVcGxvYWRlcg0KY2FzZSAndXBsb2FkZXInOg0KDQplY2hvICc8Y2VudGVyPjxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG5hbWU9InVwbG9hZGVyIiBpZD0idXBsb2FkZXIiPic7DQplY2hvICc8Y2VudGVyPjxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIiBzaXplPSI1MCI+PGlucHV0IG5hbWU9Il91cGwiIHR5cGU9InN1Ym1pdCIgaWQ9Il91cGwiIA0KDQp2YWx1ZT0iVXBsb2FkIj48L2Zvcm0+PC9jZW50ZXI+JzsNCmlmKCAkX1BPU1RbJ191cGwnXSA9PSAiVXBsb2FkIiApIHsNCglpZihAY29weSgkX0ZJTEVTWydmaWxlJ11bJ3RtcF9uYW1lJ10sICRfRklMRVNbJ2ZpbGUnXVsnbmFtZSddKSkgeyBlY2hvICc8cCBhbGlnbj0iY2VudGVyIj48Zm9udCBmYWNlPSJWZXJkYW5hIiANCg0Kc2l6ZT0iMSI+PGZvbnQgY29sb3I9IndoaXRlIj4gRG9uZSAhITwvZm9udD48YnI+JzsgfQ0KCWVsc2UgeyBlY2hvICc8Zm9udCBjb2xvcj0iIzAwOEI4QiI+RmFpbGVkIDooIDwvZm9udD48L3A+DQoJPC90ZD48L3RhYmxlPjwvdHI+DQoNCic7IH0NCn0NCg0KDQp9fQ0KPz4NCjxjZW50ZXI+PGJyPjxicj48ZGl2IGNsYXNzPSJpbmZvIj5EZXZlbG9wIGJ5IElzbWFpbCBBdHRhY2tlciAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIDwvYj48L2Rpdj48YnI+DQo8ZGl2IGNsYXNzPSJqY2EiPiAgJmNvcHk7IDIwMTMgSmF2YSBDeWJlciBBcm15PC9kaXY+PC9jZW50ZXI+PGJyPjxicj4=")); ?>