parse-server 9.10.2-alpha.1 → 9.10.2-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -738,6 +738,18 @@ class ParseLiveQueryServer {
|
|
|
738
738
|
if (!client.hasMasterKey) {
|
|
739
739
|
await this._loadRolesForProtectedFields(classLevelPermissions, clientAuth);
|
|
740
740
|
}
|
|
741
|
+
// `DatabaseController.filterSensitiveData` reads the class permissions through
|
|
742
|
+
// `schema.getClassLevelPermissions(className)` and falls back to `{}` when the
|
|
743
|
+
// argument does not expose that method. The LiveQuery server only ever holds
|
|
744
|
+
// the serialized CLP from the published message and has no `SchemaController`
|
|
745
|
+
// for the class, so passing the raw CLP silently skipped the entire
|
|
746
|
+
// `userField:` block: those groups intersect against the other groups, so
|
|
747
|
+
// skipping them left fields protected that the REST path returns. Wrap the CLP
|
|
748
|
+
// so the helper can reach it. (`addProtectedFields` above needs no wrapper --
|
|
749
|
+
// it already falls back to treating its argument as the permissions object.)
|
|
750
|
+
const schema = {
|
|
751
|
+
getClassLevelPermissions: () => classLevelPermissions
|
|
752
|
+
};
|
|
741
753
|
const filter = obj => {
|
|
742
754
|
if (!obj) {
|
|
743
755
|
return;
|
|
@@ -748,7 +760,7 @@ class ParseLiveQueryServer {
|
|
|
748
760
|
} else if (!Array.isArray(protectedFields)) {
|
|
749
761
|
protectedFields = (0, _Controllers.getDatabaseController)(this.config).addProtectedFields(classLevelPermissions, res.object.className, query, aclGroup, clientAuth);
|
|
750
762
|
}
|
|
751
|
-
return _DatabaseController.default.filterSensitiveData(client.hasMasterKey, false, aclGroup, clientAuth, op,
|
|
763
|
+
return _DatabaseController.default.filterSensitiveData(client.hasMasterKey, false, aclGroup, clientAuth, op, schema, res.object.className, protectedFields, obj, this.config.protectedFieldsOwnerExempt);
|
|
752
764
|
};
|
|
753
765
|
res.object = filter(res.object);
|
|
754
766
|
res.original = filter(res.original);
|
|
@@ -1211,4 +1223,4 @@ class ParseLiveQueryServer {
|
|
|
1211
1223
|
}
|
|
1212
1224
|
}
|
|
1213
1225
|
exports.ParseLiveQueryServer = ParseLiveQueryServer;
|
|
1214
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHYiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9ub2RlIiwiX1N1YnNjcmlwdGlvbiIsIl9DbGllbnQiLCJfUGFyc2VXZWJTb2NrZXRTZXJ2ZXIiLCJfbG9nZ2VyIiwiX1JlcXVlc3RTY2hlbWEiLCJfUXVlcnlUb29scyIsIl9QYXJzZVB1YlN1YiIsIl9TY2hlbWFDb250cm9sbGVyIiwiX2xvZGFzaCIsIl9jcnlwdG8iLCJfdHJpZ2dlcnMiLCJfQXV0aCIsIl9Db250cm9sbGVycyIsIl9Db25maWciLCJfbHJ1Q2FjaGUiLCJfVXNlcnNSb3V0ZXIiLCJfRGF0YWJhc2VDb250cm9sbGVyIiwiX3V0aWwiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJQYXJzZUxpdmVRdWVyeVNlcnZlciIsImNvbnN0cnVjdG9yIiwic2VydmVyIiwiY29uZmlnIiwicGFyc2VTZXJ2ZXJDb25maWciLCJjbGllbnRzIiwiTWFwIiwic3Vic2NyaXB0aW9ucyIsImFwcElkIiwiUGFyc2UiLCJhcHBsaWNhdGlvbklkIiwibWFzdGVyS2V5Iiwia2V5UGFpcnMiLCJrZXkiLCJPYmplY3QiLCJrZXlzIiwic2V0IiwibG9nZ2VyIiwidmVyYm9zZSIsImRpc2FibGVTaW5nbGVJbnN0YW5jZSIsInNlcnZlclVSTCIsImluaXRpYWxpemUiLCJqYXZhU2NyaXB0S2V5IiwiY2FjaGVDb250cm9sbGVyIiwiZ2V0Q2FjaGVDb250cm9sbGVyIiwiY2FjaGVUaW1lb3V0IiwiYXV0aENhY2hlIiwiTFJVIiwibWF4IiwidHRsIiwicGFyc2VXZWJTb2NrZXRTZXJ2ZXIiLCJQYXJzZVdlYlNvY2tldFNlcnZlciIsInBhcnNlV2Vic29ja2V0IiwiX29uQ29ubmVjdCIsInN1YnNjcmliZXIiLCJQYXJzZVB1YlN1YiIsImNyZWF0ZVN1YnNjcmliZXIiLCJjb25uZWN0IiwiaXNPcGVuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJfY3JlYXRlU3Vic2NyaWJlcnMiLCJzaHV0ZG93biIsImFsbCIsInZhbHVlcyIsIm1hcCIsImNsaWVudCIsInBhcnNlV2ViU29ja2V0Iiwid3MiLCJjbG9zZSIsIkFycmF5IiwiZnJvbSIsInVuc3Vic2NyaWJlIiwiZXJyIiwiZXJyb3IiLCJtZXNzYWdlUmVjaWV2ZWQiLCJjaGFubmVsIiwibWVzc2FnZVN0ciIsIm1lc3NhZ2UiLCJKU09OIiwicGFyc2UiLCJfY2xlYXJDYWNoZWRSb2xlcyIsInVzZXJJZCIsIl9pbmZsYXRlUGFyc2VPYmplY3QiLCJfb25BZnRlclNhdmUiLCJfb25BZnRlckRlbGV0ZSIsIm9uIiwiZmllbGQiLCJzdWJzY3JpYmUiLCJjdXJyZW50UGFyc2VPYmplY3QiLCJVc2VyUm91dGVyIiwicmVtb3ZlSGlkZGVuUHJvcGVydGllcyIsImNsYXNzTmFtZSIsInBhcnNlT2JqZWN0IiwiX2ZpbmlzaEZldGNoIiwib3JpZ2luYWxQYXJzZU9iamVjdCIsImRlbGV0ZWRQYXJzZU9iamVjdCIsInRvSlNPTiIsImNsYXNzTGV2ZWxQZXJtaXNzaW9ucyIsImlkIiwic2l6ZSIsImNsYXNzU3Vic2NyaXB0aW9ucyIsImdldCIsImRlYnVnIiwic3Vic2NyaXB0aW9uIiwiaXNTdWJzY3JpcHRpb25NYXRjaGVkIiwiX21hdGNoZXNTdWJzY3JpcHRpb24iLCJjbGllbnRJZCIsInJlcXVlc3RJZHMiLCJfIiwiZW50cmllcyIsImNsaWVudFJlcXVlc3RJZHMiLCJmb3JFYWNoIiwicmVxdWVzdElkIiwibG9jYWxEZWxldGVkUGFyc2VPYmplY3QiLCJzdHJpbmdpZnkiLCJhY2wiLCJnZXRBQ0wiLCJvcCIsIl9nZXRDTFBPcGVyYXRpb24iLCJxdWVyeSIsInJlcyIsIm1hdGNoZXNDTFAiLCJfbWF0Y2hlc0NMUCIsImlzTWF0Y2hlZCIsIl9tYXRjaGVzQUNMIiwiZXZlbnQiLCJzZXNzaW9uVG9rZW4iLCJvYmplY3QiLCJ1c2VNYXN0ZXJLZXkiLCJoYXNNYXN0ZXJLZXkiLCJpbnN0YWxsYXRpb25JZCIsInNlbmRFdmVudCIsInRyaWdnZXIiLCJnZXRUcmlnZ2VyIiwiYXV0aCIsImdldEF1dGhGcm9tQ2xpZW50IiwidXNlciIsImZyb21KU09OIiwicnVuVHJpZ2dlciIsInRvSlNPTndpdGhPYmplY3RzIiwiX2ZpbHRlclNlbnNpdGl2ZURhdGEiLCJwdXNoRGVsZXRlIiwicmVzb2x2ZUVycm9yIiwiQ2xpZW50IiwicHVzaEVycm9yIiwiY29kZSIsImlzT3JpZ2luYWxTdWJzY3JpcHRpb25NYXRjaGVkIiwiaXNDdXJyZW50U3Vic2NyaXB0aW9uTWF0Y2hlZCIsImxvY2FsQ3VycmVudFBhcnNlT2JqZWN0IiwibG9jYWxPcmlnaW5hbFBhcnNlT2JqZWN0Iiwib3JpZ2luYWxBQ0xDaGVja2luZ1Byb21pc2UiLCJvcmlnaW5hbEFDTCIsImN1cnJlbnRBQ0xDaGVja2luZ1Byb21pc2UiLCJjdXJyZW50QUNMIiwiaXNPcmlnaW5hbE1hdGNoZWQiLCJpc0N1cnJlbnRNYXRjaGVkIiwiaGFzaCIsInR5cGUiLCJ3YXRjaEZpZWxkc0NoYW5nZWQiLCJfY2hlY2tXYXRjaEZpZWxkcyIsImN1cnJlbnRSZWFkYWJsZSIsIm9yaWdpbmFsUmVhZGFibGUiLCJvcmlnaW5hbCIsImZ1bmN0aW9uTmFtZSIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJyZXF1ZXN0IiwidHY0IiwidmFsaWRhdGUiLCJSZXF1ZXN0U2NoZW1hIiwiX2hhbmRsZUNvbm5lY3QiLCJfaGFuZGxlU3Vic2NyaWJlIiwiX2hhbmRsZVVwZGF0ZVN1YnNjcmlwdGlvbiIsIl9oYW5kbGVVbnN1YnNjcmliZSIsImluZm8iLCJoYXMiLCJydW5MaXZlUXVlcnlFdmVudEhhbmRsZXJzIiwiZGVsZXRlIiwic3Vic2NyaXB0aW9uSW5mbyIsInN1YnNjcmlwdGlvbkluZm9zIiwiZGVsZXRlQ2xpZW50U3Vic2NyaXB0aW9uIiwiaGFzU3Vic2NyaWJpbmdDbGllbnQiLCJfdmFsaWRhdGVRdWVyeUNvbnN0cmFpbnRzIiwid2hlcmUiLCJ1bmRlZmluZWQiLCJpc0FycmF5IiwiRXJyb3IiLCJJTlZBTElEX1FVRVJZIiwic3ViUXVlcnkiLCJjb25zdHJhaW50IiwiJHJlZ2V4IiwicmVnZXgiLCJpc1JlZ0V4cExpa2UiLCJzb3VyY2UiLCJmbGFncyIsInBhdHRlcm4iLCIkb3B0aW9ucyIsIlJlZ0V4cCIsIm1hdGNoZXNRdWVyeSIsInN0cnVjdHVyZWRDbG9uZSIsInZhbGlkVG9rZW5zIiwiUXVlcnkiLCJTZXNzaW9uIiwiZXF1YWxUbyIsIlVzZXIiLCJjcmVhdGVXaXRob3V0RGF0YSIsImZpbmQiLCJ0b2tlbiIsImF1dGhQcm9taXNlIiwiYXV0aDEiLCJhdXRoMiIsImdldEF1dGhGb3JTZXNzaW9uVG9rZW4iLCJjbGVhclJvbGVDYWNoZSIsImZyb21DYWNoZSIsInRoZW4iLCJjYXRjaCIsInJlc3VsdCIsIklOVkFMSURfU0VTU0lPTl9UT0tFTiIsImdldFN1YnNjcmlwdGlvbkluZm8iLCJhY2xHcm91cCIsInB1c2giLCJhcHBDb25maWciLCJDb25maWciLCJfcm9sZXNGb3JDTFBPcGVyYXRpb24iLCJTY2hlbWFDb250cm9sbGVyIiwidmFsaWRhdGVQZXJtaXNzaW9uIiwicGVybWlzc2lvbkZpZWxkIiwiaW5kZXhPZiIsInBvaW50ZXJGaWVsZHMiLCJpbmNsdWRlcyIsImxlbmd0aCIsInRlc3RQZXJtaXNzaW9ucyIsImhhc0FjY2VzcyIsInNvbWUiLCJ2YWx1ZSIsIm9iamVjdElkIiwiaXRlbSIsIl9sb2FkUm9sZXNGb3JQcm90ZWN0ZWRGaWVsZHMiLCJjbGllbnRBdXRoIiwiZ2V0VXNlclJvbGVzIiwicHJvdGVjdGVkRmllbGRzIiwic3RhcnRzV2l0aCIsImVuYWJsZUxpdmVRdWVyeUNsYXNzTGV2ZWxQZXJtaXNzaW9uUm9sZXMiLCJvcFBlcm1pc3Npb25zIiwiZmlsdGVyIiwib2JqIiwiZ2V0RGF0YWJhc2VDb250cm9sbGVyIiwiYWRkUHJvdGVjdGVkRmllbGRzIiwiRGF0YWJhc2VDb250cm9sbGVyIiwiZmlsdGVyU2Vuc2l0aXZlRGF0YSIsInByb3RlY3RlZEZpZWxkc093bmVyRXhlbXB0IiwiX3ZlcmlmeUFDTCIsImlzU3Vic2NyaXB0aW9uU2Vzc2lvblRva2VuTWF0Y2hlZCIsImdldFJlYWRBY2Nlc3MiLCJhY2xfaGFzX3JvbGVzIiwicGVybWlzc2lvbnNCeUlkIiwicm9sZU5hbWVzIiwicm9sZSIsImdldFNlc3Npb25Gcm9tQ2xpZW50Iiwid2F0Y2giLCJpc0RlZXBTdHJpY3RFcXVhbCIsImdldFB1YmxpY1JlYWRBY2Nlc3MiLCJzdWJzY3JpcHRpb25Ub2tlbiIsImNsaWVudFNlc3Npb25Ub2tlbiIsIl92YWxpZGF0ZUtleXMiLCJfaGFzTWFzdGVyS2V5IiwicmFuZG9tVVVJRCIsInJlcSIsInB1c2hDb25uZWN0IiwidmFsaWRLZXlQYWlycyIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImlzVmFsaWQiLCJzZWNyZXQiLCJhdXRoQ2FsbGVkIiwicGFyc2VRdWVyeSIsIndpdGhKU09OIiwidG9Qb2ludGVyIiwibWFzdGVyIiwicmMiLCJyZXF1ZXN0Q29tcGxleGl0eSIsInF1ZXJ5RGVwdGgiLCJtYXhEZXB0aCIsImNoZWNrRGVwdGgiLCJub2RlIiwiZGVwdGgiLCJpc0xvZ2ljYWwiLCJhbGxvd1JlZ2V4IiwiY2hlY2tSZWdleCIsInNjaGVtYUNvbnRyb2xsZXIiLCJkYXRhYmFzZSIsImxvYWRTY2hlbWEiLCJnZXRDbGFzc0xldmVsUGVybWlzc2lvbnMiLCJ1c2VyUm9sZXMiLCJjaGVja1doZXJlIiwid2hlcmVLZXkiLCJyb290RmllbGQiLCJzcGxpdCIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJ3YXRjaEZpZWxkIiwicHJldmlvdXNTdWJzY3JpcHRpb25JbmZvIiwicHJldmlvdXNTdWJzY3JpcHRpb24iLCJwcmV2aW91c0NsYXNzU3Vic2NyaXB0aW9ucyIsInN1YnNjcmlwdGlvbkhhc2giLCJxdWVyeUhhc2giLCJTdWJzY3JpcHRpb24iLCJhZGRTdWJzY3JpcHRpb25JbmZvIiwiYWRkQ2xpZW50U3Vic2NyaXB0aW9uIiwicHVzaFN1YnNjcmliZSIsIm5vdGlmeUNsaWVudCIsImRlbGV0ZVN1YnNjcmlwdGlvbkluZm8iLCJwdXNoVW5zdWJzY3JpYmUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0xpdmVRdWVyeS9QYXJzZUxpdmVRdWVyeVNlcnZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHY0IGZyb20gJ3R2NCc7XG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICcuL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBDbGllbnQgfSBmcm9tICcuL0NsaWVudCc7XG5pbXBvcnQgeyBQYXJzZVdlYlNvY2tldFNlcnZlciB9IGZyb20gJy4vUGFyc2VXZWJTb2NrZXRTZXJ2ZXInO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IFJlcXVlc3RTY2hlbWEgZnJvbSAnLi9SZXF1ZXN0U2NoZW1hJztcbmltcG9ydCB7IG1hdGNoZXNRdWVyeSwgcXVlcnlIYXNoIH0gZnJvbSAnLi9RdWVyeVRvb2xzJztcbmltcG9ydCB7IFBhcnNlUHViU3ViIH0gZnJvbSAnLi9QYXJzZVB1YlN1Yic7XG5pbXBvcnQgU2NoZW1hQ29udHJvbGxlciBmcm9tICcuLi9Db250cm9sbGVycy9TY2hlbWFDb250cm9sbGVyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7XG4gIHJ1bkxpdmVRdWVyeUV2ZW50SGFuZGxlcnMsXG4gIGdldFRyaWdnZXIsXG4gIHJ1blRyaWdnZXIsXG4gIHJlc29sdmVFcnJvcixcbiAgdG9KU09Od2l0aE9iamVjdHMsXG59IGZyb20gJy4uL3RyaWdnZXJzJztcbmltcG9ydCB7IGdldEF1dGhGb3JTZXNzaW9uVG9rZW4sIEF1dGggfSBmcm9tICcuLi9BdXRoJztcbmltcG9ydCB7IGdldENhY2hlQ29udHJvbGxlciwgZ2V0RGF0YWJhc2VDb250cm9sbGVyIH0gZnJvbSAnLi4vQ29udHJvbGxlcnMnO1xuaW1wb3J0IENvbmZpZyBmcm9tICcuLi9Db25maWcnO1xuaW1wb3J0IHsgTFJVQ2FjaGUgYXMgTFJVIH0gZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCBVc2VyUm91dGVyIGZyb20gJy4uL1JvdXRlcnMvVXNlcnNSb3V0ZXInO1xuaW1wb3J0IERhdGFiYXNlQ29udHJvbGxlciBmcm9tICcuLi9Db250cm9sbGVycy9EYXRhYmFzZUNvbnRyb2xsZXInO1xuaW1wb3J0IHsgaXNEZWVwU3RyaWN0RXF1YWwgfSBmcm9tICd1dGlsJztcblxuXG5jbGFzcyBQYXJzZUxpdmVRdWVyeVNlcnZlciB7XG4gIHNlcnZlcjogYW55O1xuICBjb25maWc6IGFueTtcbiAgY2xpZW50czogTWFwPHN0cmluZywgYW55PjtcbiAgLy8gY2xhc3NOYW1lIC0+IChxdWVyeUhhc2ggLT4gc3Vic2NyaXB0aW9uKVxuICBzdWJzY3JpcHRpb25zOiBNYXA8c3RyaW5nLCBhbnk+O1xuICBwYXJzZVdlYlNvY2tldFNlcnZlcjogYW55O1xuICBrZXlQYWlyczogYW55O1xuICAvLyBUaGUgc3Vic2NyaWJlciB3ZSB1c2UgdG8gZ2V0IG9iamVjdCB1cGRhdGUgZnJvbSBwdWJsaXNoZXJcbiAgc3Vic2NyaWJlcjogYW55O1xuICBhdXRoQ2FjaGU6IGFueTtcbiAgY2FjaGVDb250cm9sbGVyOiBhbnk7XG5cbiAgY29uc3RydWN0b3Ioc2VydmVyOiBhbnksIGNvbmZpZzogYW55ID0ge30sIHBhcnNlU2VydmVyQ29uZmlnOiBhbnkgPSB7fSkge1xuICAgIHRoaXMuc2VydmVyID0gc2VydmVyO1xuICAgIHRoaXMuY2xpZW50cyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG5cbiAgICBjb25maWcuYXBwSWQgPSBjb25maWcuYXBwSWQgfHwgUGFyc2UuYXBwbGljYXRpb25JZDtcbiAgICBjb25maWcubWFzdGVyS2V5ID0gY29uZmlnLm1hc3RlcktleSB8fCBQYXJzZS5tYXN0ZXJLZXk7XG5cbiAgICAvLyBTdG9yZSBrZXlzLCBjb252ZXJ0IG9iaiB0byBtYXBcbiAgICBjb25zdCBrZXlQYWlycyA9IGNvbmZpZy5rZXlQYWlycyB8fCB7fTtcbiAgICB0aGlzLmtleVBhaXJzID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGtleVBhaXJzKSkge1xuICAgICAgdGhpcy5rZXlQYWlycy5zZXQoa2V5LCBrZXlQYWlyc1trZXldKTtcbiAgICB9XG4gICAgbG9nZ2VyLnZlcmJvc2UoJ1N1cHBvcnQga2V5IHBhaXJzJywgdGhpcy5rZXlQYWlycyk7XG5cbiAgICAvLyBJbml0aWFsaXplIFBhcnNlXG4gICAgUGFyc2UuT2JqZWN0LmRpc2FibGVTaW5nbGVJbnN0YW5jZSgpO1xuICAgIGNvbnN0IHNlcnZlclVSTCA9IGNvbmZpZy5zZXJ2ZXJVUkwgfHwgUGFyc2Uuc2VydmVyVVJMO1xuICAgIFBhcnNlLnNlcnZlclVSTCA9IHNlcnZlclVSTDtcbiAgICBQYXJzZS5pbml0aWFsaXplKGNvbmZpZy5hcHBJZCwgUGFyc2UuamF2YVNjcmlwdEtleSwgY29uZmlnLm1hc3RlcktleSk7XG5cbiAgICAvLyBUaGUgY2FjaGUgY29udHJvbGxlciBpcyBhIHByb3BlciBjYWNoZSBjb250cm9sbGVyXG4gICAgLy8gd2l0aCBhY2Nlc3MgdG8gVXNlciBhbmQgUm9sZXNcbiAgICB0aGlzLmNhY2hlQ29udHJvbGxlciA9IGdldENhY2hlQ29udHJvbGxlcihwYXJzZVNlcnZlckNvbmZpZyk7XG5cbiAgICBjb25maWcuY2FjaGVUaW1lb3V0ID0gY29uZmlnLmNhY2hlVGltZW91dCB8fCA1ICogMTAwMDsgLy8gNXNcblxuICAgIC8vIFRoaXMgYXV0aCBjYWNoZSBzdG9yZXMgdGhlIHByb21pc2VzIGZvciBlYWNoIGF1dGggcmVzb2x1dGlvbi5cbiAgICAvLyBUaGUgbWFpbiBiZW5lZml0IGlzIHRvIGJlIGFibGUgdG8gcmV1c2UgdGhlIHNhbWUgdXNlciAvIHNlc3Npb24gdG9rZW4gcmVzb2x1dGlvbi5cbiAgICB0aGlzLmF1dGhDYWNoZSA9IG5ldyBMUlUoe1xuICAgICAgbWF4OiA1MDAsIC8vIDUwMCBjb25jdXJyZW50XG4gICAgICB0dGw6IGNvbmZpZy5jYWNoZVRpbWVvdXQsXG4gICAgfSk7XG4gICAgLy8gSW5pdGlhbGl6ZSB3ZWJzb2NrZXQgc2VydmVyXG4gICAgdGhpcy5wYXJzZVdlYlNvY2tldFNlcnZlciA9IG5ldyBQYXJzZVdlYlNvY2tldFNlcnZlcihcbiAgICAgIHNlcnZlcixcbiAgICAgIHBhcnNlV2Vic29ja2V0ID0+IHRoaXMuX29uQ29ubmVjdChwYXJzZVdlYnNvY2tldCksXG4gICAgICBjb25maWdcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaWJlciA9IFBhcnNlUHViU3ViLmNyZWF0ZVN1YnNjcmliZXIoY29uZmlnKTtcbiAgICBpZiAoIXRoaXMuc3Vic2NyaWJlci5jb25uZWN0KSB7XG4gICAgICB0aGlzLmNvbm5lY3QoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjb25uZWN0KCkge1xuICAgIGlmICh0aGlzLnN1YnNjcmliZXIuaXNPcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGhpcy5zdWJzY3JpYmVyLmNvbm5lY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSh0aGlzLnN1YnNjcmliZXIuY29ubmVjdCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdWJzY3JpYmVyLmlzT3BlbiA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuX2NyZWF0ZVN1YnNjcmliZXJzKCk7XG4gIH1cblxuICBhc3luYyBzaHV0ZG93bigpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpYmVyLmlzT3Blbikge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAuLi5bLi4udGhpcy5jbGllbnRzLnZhbHVlcygpXS5tYXAoY2xpZW50ID0+IGNsaWVudC5wYXJzZVdlYlNvY2tldC53cy5jbG9zZSgpKSxcbiAgICAgICAgdGhpcy5wYXJzZVdlYlNvY2tldFNlcnZlci5jbG9zZT8uKCksXG4gICAgICAgIC4uLkFycmF5LmZyb20odGhpcy5zdWJzY3JpYmVyLnN1YnNjcmlwdGlvbnM/LmtleXMoKSB8fCBbXSkubWFwKGtleSA9PlxuICAgICAgICAgIHRoaXMuc3Vic2NyaWJlci51bnN1YnNjcmliZShrZXkpXG4gICAgICAgICksXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlci5jbG9zZT8uKCksXG4gICAgICBdKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0aGlzLnN1YnNjcmliZXIuY2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3Vic2NyaWJlci5jbG9zZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignUHViU3ViQWRhcHRlciBlcnJvciBvbiBzaHV0ZG93bicsIHsgZXJyb3I6IGVyciB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdWJzY3JpYmVyLmlzT3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIF9jcmVhdGVTdWJzY3JpYmVycygpIHtcbiAgICBjb25zdCBtZXNzYWdlUmVjaWV2ZWQgPSAoY2hhbm5lbCwgbWVzc2FnZVN0cikgPT4ge1xuICAgICAgbG9nZ2VyLnZlcmJvc2UoJ1N1YnNjcmliZSBtZXNzYWdlICVqJywgbWVzc2FnZVN0cik7XG4gICAgICBsZXQgbWVzc2FnZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1lc3NhZ2UgPSBKU09OLnBhcnNlKG1lc3NhZ2VTdHIpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ3VuYWJsZSB0byBwYXJzZSBtZXNzYWdlJywgbWVzc2FnZVN0ciwgZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFubmVsID09PSBQYXJzZS5hcHBsaWNhdGlvbklkICsgJ2NsZWFyQ2FjaGUnKSB7XG4gICAgICAgIHRoaXMuX2NsZWFyQ2FjaGVkUm9sZXMobWVzc2FnZS51c2VySWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9pbmZsYXRlUGFyc2VPYmplY3QobWVzc2FnZSk7XG4gICAgICBpZiAoY2hhbm5lbCA9PT0gUGFyc2UuYXBwbGljYXRpb25JZCArICdhZnRlclNhdmUnKSB7XG4gICAgICAgIHRoaXMuX29uQWZ0ZXJTYXZlKG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIGlmIChjaGFubmVsID09PSBQYXJzZS5hcHBsaWNhdGlvbklkICsgJ2FmdGVyRGVsZXRlJykge1xuICAgICAgICB0aGlzLl9vbkFmdGVyRGVsZXRlKG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdHZXQgbWVzc2FnZSAlcyBmcm9tIHVua25vd24gY2hhbm5lbCAlaicsIG1lc3NhZ2UsIGNoYW5uZWwpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5zdWJzY3JpYmVyLm9uKCdtZXNzYWdlJywgKGNoYW5uZWwsIG1lc3NhZ2VTdHIpID0+IG1lc3NhZ2VSZWNpZXZlZChjaGFubmVsLCBtZXNzYWdlU3RyKSk7XG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBbJ2FmdGVyU2F2ZScsICdhZnRlckRlbGV0ZScsICdjbGVhckNhY2hlJ10pIHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSBgJHtQYXJzZS5hcHBsaWNhdGlvbklkfSR7ZmllbGR9YDtcbiAgICAgIHRoaXMuc3Vic2NyaWJlci5zdWJzY3JpYmUoY2hhbm5lbCwgbWVzc2FnZVN0ciA9PiBtZXNzYWdlUmVjaWV2ZWQoY2hhbm5lbCwgbWVzc2FnZVN0cikpO1xuICAgIH1cbiAgfVxuXG4gIC8vIE1lc3NhZ2UgaXMgdGhlIEpTT04gb2JqZWN0IGZyb20gcHVibGlzaGVyLiBNZXNzYWdlLmN1cnJlbnRQYXJzZU9iamVjdCBpcyB0aGUgUGFyc2VPYmplY3QgSlNPTiBhZnRlciBjaGFuZ2VzLlxuICAvLyBNZXNzYWdlLm9yaWdpbmFsUGFyc2VPYmplY3QgaXMgdGhlIG9yaWdpbmFsIFBhcnNlT2JqZWN0IEpTT04uXG4gIF9pbmZsYXRlUGFyc2VPYmplY3QobWVzc2FnZTogYW55KTogdm9pZCB7XG4gICAgLy8gSW5mbGF0ZSBtZXJnZWQgb2JqZWN0XG4gICAgY29uc3QgY3VycmVudFBhcnNlT2JqZWN0ID0gbWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3Q7XG4gICAgVXNlclJvdXRlci5yZW1vdmVIaWRkZW5Qcm9wZXJ0aWVzKGN1cnJlbnRQYXJzZU9iamVjdCk7XG4gICAgbGV0IGNsYXNzTmFtZSA9IGN1cnJlbnRQYXJzZU9iamVjdC5jbGFzc05hbWU7XG4gICAgbGV0IHBhcnNlT2JqZWN0ID0gbmV3IFBhcnNlLk9iamVjdChjbGFzc05hbWUpO1xuICAgIHBhcnNlT2JqZWN0Ll9maW5pc2hGZXRjaChjdXJyZW50UGFyc2VPYmplY3QpO1xuICAgIG1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0ID0gcGFyc2VPYmplY3Q7XG4gICAgLy8gSW5mbGF0ZSBvcmlnaW5hbCBvYmplY3RcbiAgICBjb25zdCBvcmlnaW5hbFBhcnNlT2JqZWN0ID0gbWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0O1xuICAgIGlmIChvcmlnaW5hbFBhcnNlT2JqZWN0KSB7XG4gICAgICBVc2VyUm91dGVyLnJlbW92ZUhpZGRlblByb3BlcnRpZXMob3JpZ2luYWxQYXJzZU9iamVjdCk7XG4gICAgICBjbGFzc05hbWUgPSBvcmlnaW5hbFBhcnNlT2JqZWN0LmNsYXNzTmFtZTtcbiAgICAgIHBhcnNlT2JqZWN0ID0gbmV3IFBhcnNlLk9iamVjdChjbGFzc05hbWUpO1xuICAgICAgcGFyc2VPYmplY3QuX2ZpbmlzaEZldGNoKG9yaWdpbmFsUGFyc2VPYmplY3QpO1xuICAgICAgbWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0ID0gcGFyc2VPYmplY3Q7XG4gICAgfVxuICB9XG5cbiAgLy8gTWVzc2FnZSBpcyB0aGUgSlNPTiBvYmplY3QgZnJvbSBwdWJsaXNoZXIgYWZ0ZXIgaW5mbGF0ZWQuIE1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0IGlzIHRoZSBQYXJzZU9iamVjdCBhZnRlciBjaGFuZ2VzLlxuICAvLyBNZXNzYWdlLm9yaWdpbmFsUGFyc2VPYmplY3QgaXMgdGhlIG9yaWdpbmFsIFBhcnNlT2JqZWN0LlxuICBhc3luYyBfb25BZnRlckRlbGV0ZShtZXNzYWdlOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2dnZXIudmVyYm9zZShQYXJzZS5hcHBsaWNhdGlvbklkICsgJ2FmdGVyRGVsZXRlIGlzIHRyaWdnZXJlZCcpO1xuXG4gICAgbGV0IGRlbGV0ZWRQYXJzZU9iamVjdCA9IG1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0LnRvSlNPTigpO1xuICAgIGNvbnN0IGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyA9IG1lc3NhZ2UuY2xhc3NMZXZlbFBlcm1pc3Npb25zO1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IGRlbGV0ZWRQYXJzZU9iamVjdC5jbGFzc05hbWU7XG4gICAgbG9nZ2VyLnZlcmJvc2UoJ0NsYXNzTmFtZTogJWogfCBPYmplY3RJZDogJXMnLCBjbGFzc05hbWUsIGRlbGV0ZWRQYXJzZU9iamVjdC5pZCk7XG4gICAgbG9nZ2VyLnZlcmJvc2UoJ0N1cnJlbnQgY2xpZW50IG51bWJlciA6ICVkJywgdGhpcy5jbGllbnRzLnNpemUpO1xuXG4gICAgY29uc3QgY2xhc3NTdWJzY3JpcHRpb25zID0gdGhpcy5zdWJzY3JpcHRpb25zLmdldChjbGFzc05hbWUpO1xuICAgIGlmICh0eXBlb2YgY2xhc3NTdWJzY3JpcHRpb25zID09PSAndW5kZWZpbmVkJykge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdDYW4gbm90IGZpbmQgc3Vic2NyaXB0aW9ucyB1bmRlciB0aGlzIGNsYXNzICcgKyBjbGFzc05hbWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIGNsYXNzU3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkge1xuICAgICAgbGV0IGlzU3Vic2NyaXB0aW9uTWF0Y2hlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlzU3Vic2NyaXB0aW9uTWF0Y2hlZCA9IHRoaXMuX21hdGNoZXNTdWJzY3JpcHRpb24oZGVsZXRlZFBhcnNlT2JqZWN0LCBzdWJzY3JpcHRpb24pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCBtYXRjaGluZyBzdWJzY3JpcHRpb24gZm9yIGNsYXNzICR7Y2xhc3NOYW1lfTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1N1YnNjcmlwdGlvbk1hdGNoZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtjbGllbnRJZCwgcmVxdWVzdElkc10gb2YgXy5lbnRyaWVzKHN1YnNjcmlwdGlvbi5jbGllbnRSZXF1ZXN0SWRzKSkge1xuICAgICAgICBjb25zdCBjbGllbnQgPSB0aGlzLmNsaWVudHMuZ2V0KGNsaWVudElkKTtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGllbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdElkcy5mb3JFYWNoKGFzeW5jIHJlcXVlc3RJZCA9PiB7XG4gICAgICAgICAgLy8gRGVlcC1jbG9uZSBzaGFyZWQgb2JqZWN0IHNvIGVhY2ggY29uY3VycmVudCBjYWxsYmFjayB3b3JrcyBvbiBpdHMgb3duIGNvcHlcbiAgICAgICAgICBsZXQgbG9jYWxEZWxldGVkUGFyc2VPYmplY3QgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRlbGV0ZWRQYXJzZU9iamVjdCkpO1xuICAgICAgICAgIGNvbnN0IGFjbCA9IG1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0LmdldEFDTCgpO1xuICAgICAgICAgIC8vIENoZWNrIENMUFxuICAgICAgICAgIGNvbnN0IG9wID0gdGhpcy5fZ2V0Q0xQT3BlcmF0aW9uKHN1YnNjcmlwdGlvbi5xdWVyeSk7XG4gICAgICAgICAgbGV0IHJlczogYW55ID0ge307XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZXNDTFAgPSBhd2FpdCB0aGlzLl9tYXRjaGVzQ0xQKFxuICAgICAgICAgICAgICBjbGFzc0xldmVsUGVybWlzc2lvbnMsXG4gICAgICAgICAgICAgIG1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0LFxuICAgICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgb3BcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAobWF0Y2hlc0NMUCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpc01hdGNoZWQgPSBhd2FpdCB0aGlzLl9tYXRjaGVzQUNMKGFjbCwgY2xpZW50LCByZXF1ZXN0SWQpO1xuICAgICAgICAgICAgaWYgKCFpc01hdGNoZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXMgPSB7XG4gICAgICAgICAgICAgIGV2ZW50OiAnZGVsZXRlJyxcbiAgICAgICAgICAgICAgc2Vzc2lvblRva2VuOiBjbGllbnQuc2Vzc2lvblRva2VuLFxuICAgICAgICAgICAgICBvYmplY3Q6IGxvY2FsRGVsZXRlZFBhcnNlT2JqZWN0LFxuICAgICAgICAgICAgICBjbGllbnRzOiB0aGlzLmNsaWVudHMuc2l6ZSxcbiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uczogdGhpcy5zdWJzY3JpcHRpb25zLnNpemUsXG4gICAgICAgICAgICAgIHVzZU1hc3RlcktleTogY2xpZW50Lmhhc01hc3RlcktleSxcbiAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGNsaWVudC5pbnN0YWxsYXRpb25JZCxcbiAgICAgICAgICAgICAgc2VuZEV2ZW50OiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHRyaWdnZXIgPSBnZXRUcmlnZ2VyKGNsYXNzTmFtZSwgJ2FmdGVyRXZlbnQnLCBQYXJzZS5hcHBsaWNhdGlvbklkKTtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGF1dGggPSBhd2FpdCB0aGlzLmdldEF1dGhGcm9tQ2xpZW50KGNsaWVudCwgcmVxdWVzdElkKTtcbiAgICAgICAgICAgICAgaWYgKGF1dGggJiYgYXV0aC51c2VyKSB7XG4gICAgICAgICAgICAgICAgcmVzLnVzZXIgPSBhdXRoLnVzZXI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHJlcy5vYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXMub2JqZWN0ID0gUGFyc2UuT2JqZWN0LmZyb21KU09OKHJlcy5vYmplY3QpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGF3YWl0IHJ1blRyaWdnZXIodHJpZ2dlciwgYGFmdGVyRXZlbnQuJHtjbGFzc05hbWV9YCwgcmVzLCBhdXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzLnNlbmRFdmVudCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzLm9iamVjdCAmJiB0eXBlb2YgcmVzLm9iamVjdC50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgbG9jYWxEZWxldGVkUGFyc2VPYmplY3QgPSB0b0pTT053aXRoT2JqZWN0cyhyZXMub2JqZWN0LCByZXMub2JqZWN0LmNsYXNzTmFtZSB8fCBjbGFzc05hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzLm9iamVjdCA9IGxvY2FsRGVsZXRlZFBhcnNlT2JqZWN0O1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZmlsdGVyU2Vuc2l0aXZlRGF0YShcbiAgICAgICAgICAgICAgY2xhc3NMZXZlbFBlcm1pc3Npb25zLFxuICAgICAgICAgICAgICByZXMsXG4gICAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICAgICAgICBvcCxcbiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnF1ZXJ5XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY2xpZW50LnB1c2hEZWxldGUocmVxdWVzdElkLCByZXMub2JqZWN0KTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHJlc29sdmVFcnJvcihlKTtcbiAgICAgICAgICAgIENsaWVudC5wdXNoRXJyb3IoY2xpZW50LnBhcnNlV2ViU29ja2V0LCBlcnJvci5jb2RlLCBlcnJvci5tZXNzYWdlLCBmYWxzZSwgcmVxdWVzdElkKTtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgYEZhaWxlZCBydW5uaW5nIGFmdGVyTGl2ZVF1ZXJ5RXZlbnQgb24gY2xhc3MgJHtjbGFzc05hbWV9IGZvciBldmVudCAke3Jlcy5ldmVudH0gd2l0aCBzZXNzaW9uICR7cmVzLnNlc3Npb25Ub2tlbn0gd2l0aDpcXG4gRXJyb3I6IGAgK1xuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGVycm9yKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE1lc3NhZ2UgaXMgdGhlIEpTT04gb2JqZWN0IGZyb20gcHVibGlzaGVyIGFmdGVyIGluZmxhdGVkLiBNZXNzYWdlLmN1cnJlbnRQYXJzZU9iamVjdCBpcyB0aGUgUGFyc2VPYmplY3QgYWZ0ZXIgY2hhbmdlcy5cbiAgLy8gTWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0IGlzIHRoZSBvcmlnaW5hbCBQYXJzZU9iamVjdC5cbiAgYXN5bmMgX29uQWZ0ZXJTYXZlKG1lc3NhZ2U6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci52ZXJib3NlKFBhcnNlLmFwcGxpY2F0aW9uSWQgKyAnYWZ0ZXJTYXZlIGlzIHRyaWdnZXJlZCcpO1xuXG4gICAgbGV0IG9yaWdpbmFsUGFyc2VPYmplY3QgPSBudWxsO1xuICAgIGlmIChtZXNzYWdlLm9yaWdpbmFsUGFyc2VPYmplY3QpIHtcbiAgICAgIG9yaWdpbmFsUGFyc2VPYmplY3QgPSBtZXNzYWdlLm9yaWdpbmFsUGFyc2VPYmplY3QudG9KU09OKCk7XG4gICAgfVxuICAgIGNvbnN0IGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyA9IG1lc3NhZ2UuY2xhc3NMZXZlbFBlcm1pc3Npb25zO1xuICAgIGxldCBjdXJyZW50UGFyc2VPYmplY3QgPSBtZXNzYWdlLmN1cnJlbnRQYXJzZU9iamVjdC50b0pTT04oKTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBjdXJyZW50UGFyc2VPYmplY3QuY2xhc3NOYW1lO1xuICAgIGxvZ2dlci52ZXJib3NlKCdDbGFzc05hbWU6ICVzIHwgT2JqZWN0SWQ6ICVzJywgY2xhc3NOYW1lLCBjdXJyZW50UGFyc2VPYmplY3QuaWQpO1xuICAgIGxvZ2dlci52ZXJib3NlKCdDdXJyZW50IGNsaWVudCBudW1iZXIgOiAlZCcsIHRoaXMuY2xpZW50cy5zaXplKTtcblxuICAgIGNvbnN0IGNsYXNzU3Vic2NyaXB0aW9ucyA9IHRoaXMuc3Vic2NyaXB0aW9ucy5nZXQoY2xhc3NOYW1lKTtcbiAgICBpZiAodHlwZW9mIGNsYXNzU3Vic2NyaXB0aW9ucyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnQ2FuIG5vdCBmaW5kIHN1YnNjcmlwdGlvbnMgdW5kZXIgdGhpcyBjbGFzcyAnICsgY2xhc3NOYW1lKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2YgY2xhc3NTdWJzY3JpcHRpb25zLnZhbHVlcygpKSB7XG4gICAgICBsZXQgaXNPcmlnaW5hbFN1YnNjcmlwdGlvbk1hdGNoZWQ7XG4gICAgICBsZXQgaXNDdXJyZW50U3Vic2NyaXB0aW9uTWF0Y2hlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlzT3JpZ2luYWxTdWJzY3JpcHRpb25NYXRjaGVkID0gdGhpcy5fbWF0Y2hlc1N1YnNjcmlwdGlvbihcbiAgICAgICAgICBvcmlnaW5hbFBhcnNlT2JqZWN0LFxuICAgICAgICAgIHN1YnNjcmlwdGlvblxuICAgICAgICApO1xuICAgICAgICBpc0N1cnJlbnRTdWJzY3JpcHRpb25NYXRjaGVkID0gdGhpcy5fbWF0Y2hlc1N1YnNjcmlwdGlvbihcbiAgICAgICAgICBjdXJyZW50UGFyc2VPYmplY3QsXG4gICAgICAgICAgc3Vic2NyaXB0aW9uXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIG1hdGNoaW5nIHN1YnNjcmlwdGlvbiBmb3IgY2xhc3MgJHtjbGFzc05hbWV9OiAke2UubWVzc2FnZX1gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtjbGllbnRJZCwgcmVxdWVzdElkc10gb2YgXy5lbnRyaWVzKHN1YnNjcmlwdGlvbi5jbGllbnRSZXF1ZXN0SWRzKSkge1xuICAgICAgICBjb25zdCBjbGllbnQgPSB0aGlzLmNsaWVudHMuZ2V0KGNsaWVudElkKTtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGllbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdElkcy5mb3JFYWNoKGFzeW5jIHJlcXVlc3RJZCA9PiB7XG4gICAgICAgICAgLy8gRGVlcC1jbG9uZSBzaGFyZWQgb2JqZWN0cyBzbyBlYWNoIGNvbmN1cnJlbnQgY2FsbGJhY2sgd29ya3Mgb24gaXRzIG93biBjb3B5LlxuICAgICAgICAgIC8vIFdpdGhvdXQgY2xvbmluZywgX2ZpbHRlclNlbnNpdGl2ZURhdGEncyBpbi1wbGFjZSBmaWVsZCBkZWxldGlvbiBhbmQgYWZ0ZXJFdmVudFxuICAgICAgICAgIC8vIHRyaWdnZXIgbW9kaWZpY2F0aW9ucyBjb3JydXB0IHRoZSBzaGFyZWQgc3RhdGUgYWNyb3NzIGNvbmN1cnJlbnQgc3Vic2NyaWJlcnMuXG4gICAgICAgICAgbGV0IGxvY2FsQ3VycmVudFBhcnNlT2JqZWN0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjdXJyZW50UGFyc2VPYmplY3QpKTtcbiAgICAgICAgICBsZXQgbG9jYWxPcmlnaW5hbFBhcnNlT2JqZWN0ID0gb3JpZ2luYWxQYXJzZU9iamVjdFxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9yaWdpbmFsUGFyc2VPYmplY3QpKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgIC8vIFNldCBvcmlnbmFsIFBhcnNlT2JqZWN0IEFDTCBjaGVja2luZyBwcm9taXNlLCBpZiB0aGUgb2JqZWN0IGRvZXMgbm90IG1hdGNoXG4gICAgICAgICAgLy8gc3Vic2NyaXB0aW9uLCB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBBQ0xcbiAgICAgICAgICBsZXQgb3JpZ2luYWxBQ0xDaGVja2luZ1Byb21pc2U7XG4gICAgICAgICAgaWYgKCFpc09yaWdpbmFsU3Vic2NyaXB0aW9uTWF0Y2hlZCkge1xuICAgICAgICAgICAgb3JpZ2luYWxBQ0xDaGVja2luZ1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgb3JpZ2luYWxBQ0w7XG4gICAgICAgICAgICBpZiAobWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0KSB7XG4gICAgICAgICAgICAgIG9yaWdpbmFsQUNMID0gbWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0LmdldEFDTCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3JpZ2luYWxBQ0xDaGVja2luZ1Byb21pc2UgPSB0aGlzLl9tYXRjaGVzQUNMKG9yaWdpbmFsQUNMLCBjbGllbnQsIHJlcXVlc3RJZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFNldCBjdXJyZW50IFBhcnNlT2JqZWN0IEFDTCBjaGVja2luZyBwcm9taXNlLCBpZiB0aGUgb2JqZWN0IGRvZXMgbm90IG1hdGNoXG4gICAgICAgICAgLy8gc3Vic2NyaXB0aW9uLCB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBBQ0xcbiAgICAgICAgICBsZXQgY3VycmVudEFDTENoZWNraW5nUHJvbWlzZTtcbiAgICAgICAgICBsZXQgcmVzOiBhbnkgPSB7fTtcbiAgICAgICAgICBpZiAoIWlzQ3VycmVudFN1YnNjcmlwdGlvbk1hdGNoZWQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRBQ0xDaGVja2luZ1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50QUNMID0gbWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QuZ2V0QUNMKCk7XG4gICAgICAgICAgICBjdXJyZW50QUNMQ2hlY2tpbmdQcm9taXNlID0gdGhpcy5fbWF0Y2hlc0FDTChjdXJyZW50QUNMLCBjbGllbnQsIHJlcXVlc3RJZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBvcCA9IHRoaXMuX2dldENMUE9wZXJhdGlvbihzdWJzY3JpcHRpb24ucXVlcnkpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlc0NMUCA9IGF3YWl0IHRoaXMuX21hdGNoZXNDTFAoXG4gICAgICAgICAgICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgICAgbWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QsXG4gICAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICAgICAgICBvcFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVzQ0xQID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBbaXNPcmlnaW5hbE1hdGNoZWQsIGlzQ3VycmVudE1hdGNoZWRdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICBvcmlnaW5hbEFDTENoZWNraW5nUHJvbWlzZSxcbiAgICAgICAgICAgICAgY3VycmVudEFDTENoZWNraW5nUHJvbWlzZSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoXG4gICAgICAgICAgICAgICdPcmlnaW5hbCAlaiB8IEN1cnJlbnQgJWogfCBNYXRjaDogJXMsICVzLCAlcywgJXMgfCBRdWVyeTogJXMnLFxuICAgICAgICAgICAgICBsb2NhbE9yaWdpbmFsUGFyc2VPYmplY3QsXG4gICAgICAgICAgICAgIGxvY2FsQ3VycmVudFBhcnNlT2JqZWN0LFxuICAgICAgICAgICAgICBpc09yaWdpbmFsU3Vic2NyaXB0aW9uTWF0Y2hlZCxcbiAgICAgICAgICAgICAgaXNDdXJyZW50U3Vic2NyaXB0aW9uTWF0Y2hlZCxcbiAgICAgICAgICAgICAgaXNPcmlnaW5hbE1hdGNoZWQsXG4gICAgICAgICAgICAgIGlzQ3VycmVudE1hdGNoZWQsXG4gICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5oYXNoXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gRGVjaWRlIGV2ZW50IHR5cGVcbiAgICAgICAgICAgIGxldCB0eXBlO1xuICAgICAgICAgICAgaWYgKGlzT3JpZ2luYWxNYXRjaGVkICYmIGlzQ3VycmVudE1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgdHlwZSA9ICd1cGRhdGUnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc09yaWdpbmFsTWF0Y2hlZCAmJiAhaXNDdXJyZW50TWF0Y2hlZCkge1xuICAgICAgICAgICAgICB0eXBlID0gJ2xlYXZlJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzT3JpZ2luYWxNYXRjaGVkICYmIGlzQ3VycmVudE1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgaWYgKGxvY2FsT3JpZ2luYWxQYXJzZU9iamVjdCkge1xuICAgICAgICAgICAgICAgIHR5cGUgPSAnZW50ZXInO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHR5cGUgPSAnY3JlYXRlJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB3YXRjaEZpZWxkc0NoYW5nZWQgPSB0aGlzLl9jaGVja1dhdGNoRmllbGRzKGNsaWVudCwgcmVxdWVzdElkLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIGlmICghd2F0Y2hGaWVsZHNDaGFuZ2VkICYmICh0eXBlID09PSAndXBkYXRlJyB8fCB0eXBlID09PSAnY3JlYXRlJykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQSBgbGVhdmVgIG9yIGBlbnRlcmAgdHJhbnNpdGlvbiBjYW4gYmUgY2F1c2VkIGVpdGhlciBieSB0aGUgb2JqZWN0J3NcbiAgICAgICAgICAgIC8vIHF1ZXJ5IG1hdGNoIGNoYW5naW5nICh0aGUgc3Vic2NyaWJlciBrZWVwcyByZWFkIGFjY2Vzcykgb3IgYnkgdGhlXG4gICAgICAgICAgICAvLyBzdWJzY3JpYmVyJ3MgQUNMIHJlYWQgYWNjZXNzIGJlaW5nIHJldm9rZWQgb3IgZ3JhbnRlZCBpbiB0aGUgc2FtZSBzYXZlLlxuICAgICAgICAgICAgLy8gSW4gdGhlIGFjY2Vzcy1jaGFuZ2UgY2FzZSB0aGUgc3Vic2NyaWJlciBpcyBub3QgYXV0aG9yaXplZCB0byByZWFkIHRoZVxuICAgICAgICAgICAgLy8gb2JqZWN0IHN0YXRlIHRoYXQgdHJpZ2dlcmVkIHRoZSB0cmFuc2l0aW9uLCBzbyB0aGF0IHN0YXRlIG11c3Qgbm90IGJlXG4gICAgICAgICAgICAvLyBzZW50IG92ZXIgdGhlIGNoYW5uZWwuIChDTFAgcmVhZCBkZW5pYWwgaXMgaGFuZGxlZCBlYXJsaWVyIGJ5XG4gICAgICAgICAgICAvLyBgX21hdGNoZXNDTFBgLCB3aGljaCBza2lwcyB0aGUgZXZlbnQgZW50aXJlbHkuKVxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdsZWF2ZScpIHtcbiAgICAgICAgICAgICAgLy8gVGhlIHBvc3QtdXBkYXRlIG9iamVjdCBpcyByZWFkYWJsZSBvbiBhIHF1ZXJ5LW1pc21hdGNoIGxlYXZlIGJ1dCBub3RcbiAgICAgICAgICAgICAgLy8gb24gYW4gQUNMLWxvc3MgbGVhdmUuIE9ubHkgc2VuZCB0aGUgcG9zdC11cGRhdGUgYm9keSB3aGVuIHRoZVxuICAgICAgICAgICAgICAvLyBzdWJzY3JpYmVyIGNhbiBzdGlsbCByZWFkIHRoZSBjdXJyZW50IG9iamVjdDsgb3RoZXJ3aXNlIGZhbGwgYmFjayB0b1xuICAgICAgICAgICAgICAvLyB0aGUgbGFzdCBhdXRob3JpemVkIChvcmlnaW5hbCkgc3RhdGUsIHdoaWNoIHN0aWxsIGNhcnJpZXMgdGhlIG9iamVjdElkLlxuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UmVhZGFibGUgPSBpc0N1cnJlbnRTdWJzY3JpcHRpb25NYXRjaGVkXG4gICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgIDogYXdhaXQgdGhpcy5fbWF0Y2hlc0FDTChtZXNzYWdlLmN1cnJlbnRQYXJzZU9iamVjdC5nZXRBQ0woKSwgY2xpZW50LCByZXF1ZXN0SWQpO1xuICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRSZWFkYWJsZSkge1xuICAgICAgICAgICAgICAgIGxvY2FsQ3VycmVudFBhcnNlT2JqZWN0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShsb2NhbE9yaWdpbmFsUGFyc2VPYmplY3QpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnZW50ZXInKSB7XG4gICAgICAgICAgICAgIC8vIFRoZSBwcmUtdXBkYXRlIG9iamVjdCB3YXMgcmVhZGFibGUgb24gYSBxdWVyeS1tYXRjaC1nYWluIGVudGVyIGJ1dCBub3RcbiAgICAgICAgICAgICAgLy8gb24gYW4gQUNMLWdyYW50IGVudGVyLiBPbmx5IHNlbmQgdGhlIHByZS11cGRhdGUgYm9keSBhcyBgb3JpZ2luYWxgXG4gICAgICAgICAgICAgIC8vIHdoZW4gdGhlIHN1YnNjcmliZXIgY291bGQgcmVhZCB0aGUgb3JpZ2luYWwgb2JqZWN0LlxuICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbFJlYWRhYmxlID0gaXNPcmlnaW5hbFN1YnNjcmlwdGlvbk1hdGNoZWRcbiAgICAgICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICAgICAgOiBhd2FpdCB0aGlzLl9tYXRjaGVzQUNMKG1lc3NhZ2Uub3JpZ2luYWxQYXJzZU9iamVjdC5nZXRBQ0woKSwgY2xpZW50LCByZXF1ZXN0SWQpO1xuICAgICAgICAgICAgICBpZiAoIW9yaWdpbmFsUmVhZGFibGUpIHtcbiAgICAgICAgICAgICAgICBsb2NhbE9yaWdpbmFsUGFyc2VPYmplY3QgPSBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXMgPSB7XG4gICAgICAgICAgICAgIGV2ZW50OiB0eXBlLFxuICAgICAgICAgICAgICBzZXNzaW9uVG9rZW46IGNsaWVudC5zZXNzaW9uVG9rZW4sXG4gICAgICAgICAgICAgIG9iamVjdDogbG9jYWxDdXJyZW50UGFyc2VPYmplY3QsXG4gICAgICAgICAgICAgIG9yaWdpbmFsOiBsb2NhbE9yaWdpbmFsUGFyc2VPYmplY3QsXG4gICAgICAgICAgICAgIGNsaWVudHM6IHRoaXMuY2xpZW50cy5zaXplLFxuICAgICAgICAgICAgICBzdWJzY3JpcHRpb25zOiB0aGlzLnN1YnNjcmlwdGlvbnMuc2l6ZSxcbiAgICAgICAgICAgICAgdXNlTWFzdGVyS2V5OiBjbGllbnQuaGFzTWFzdGVyS2V5LFxuICAgICAgICAgICAgICBpbnN0YWxsYXRpb25JZDogY2xpZW50Lmluc3RhbGxhdGlvbklkLFxuICAgICAgICAgICAgICBzZW5kRXZlbnQ6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgdHJpZ2dlciA9IGdldFRyaWdnZXIoY2xhc3NOYW1lLCAnYWZ0ZXJFdmVudCcsIFBhcnNlLmFwcGxpY2F0aW9uSWQpO1xuICAgICAgICAgICAgaWYgKHRyaWdnZXIpIHtcbiAgICAgICAgICAgICAgaWYgKHJlcy5vYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXMub2JqZWN0ID0gUGFyc2UuT2JqZWN0LmZyb21KU09OKHJlcy5vYmplY3QpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyZXMub3JpZ2luYWwpIHtcbiAgICAgICAgICAgICAgICByZXMub3JpZ2luYWwgPSBQYXJzZS5PYmplY3QuZnJvbUpTT04ocmVzLm9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhdXRoID0gYXdhaXQgdGhpcy5nZXRBdXRoRnJvbUNsaWVudChjbGllbnQsIHJlcXVlc3RJZCk7XG4gICAgICAgICAgICAgIGlmIChhdXRoICYmIGF1dGgudXNlcikge1xuICAgICAgICAgICAgICAgIHJlcy51c2VyID0gYXV0aC51c2VyO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGF3YWl0IHJ1blRyaWdnZXIodHJpZ2dlciwgYGFmdGVyRXZlbnQuJHtjbGFzc05hbWV9YCwgcmVzLCBhdXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzLnNlbmRFdmVudCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzLm9iamVjdCAmJiB0eXBlb2YgcmVzLm9iamVjdC50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgbG9jYWxDdXJyZW50UGFyc2VPYmplY3QgPSB0b0pTT053aXRoT2JqZWN0cyhyZXMub2JqZWN0LCByZXMub2JqZWN0LmNsYXNzTmFtZSB8fCBjbGFzc05hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcy5vcmlnaW5hbCAmJiB0eXBlb2YgcmVzLm9yaWdpbmFsLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBsb2NhbE9yaWdpbmFsUGFyc2VPYmplY3QgPSB0b0pTT053aXRoT2JqZWN0cyhcbiAgICAgICAgICAgICAgICByZXMub3JpZ2luYWwsXG4gICAgICAgICAgICAgICAgcmVzLm9yaWdpbmFsLmNsYXNzTmFtZSB8fCBjbGFzc05hbWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcy5vYmplY3QgPSBsb2NhbEN1cnJlbnRQYXJzZU9iamVjdDtcbiAgICAgICAgICAgIHJlcy5vcmlnaW5hbCA9IGxvY2FsT3JpZ2luYWxQYXJzZU9iamVjdDtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2ZpbHRlclNlbnNpdGl2ZURhdGEoXG4gICAgICAgICAgICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgICAgcmVzLFxuICAgICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgb3AsXG4gICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5xdWVyeVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9ICdwdXNoJyArIHJlcy5ldmVudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHJlcy5ldmVudC5zbGljZSgxKTtcbiAgICAgICAgICAgIGlmIChjbGllbnRbZnVuY3Rpb25OYW1lXSkge1xuICAgICAgICAgICAgICBjbGllbnRbZnVuY3Rpb25OYW1lXShyZXF1ZXN0SWQsIHJlcy5vYmplY3QsIHJlcy5vcmlnaW5hbCA/PyBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHJlc29sdmVFcnJvcihlKTtcbiAgICAgICAgICAgIENsaWVudC5wdXNoRXJyb3IoY2xpZW50LnBhcnNlV2ViU29ja2V0LCBlcnJvci5jb2RlLCBlcnJvci5tZXNzYWdlLCBmYWxzZSwgcmVxdWVzdElkKTtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgYEZhaWxlZCBydW5uaW5nIGFmdGVyTGl2ZVF1ZXJ5RXZlbnQgb24gY2xhc3MgJHtjbGFzc05hbWV9IGZvciBldmVudCAke3Jlcy5ldmVudH0gd2l0aCBzZXNzaW9uICR7cmVzLnNlc3Npb25Ub2tlbn0gd2l0aDpcXG4gRXJyb3I6IGAgK1xuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGVycm9yKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9vbkNvbm5lY3QocGFyc2VXZWJzb2NrZXQ6IGFueSk6IHZvaWQge1xuICAgIHBhcnNlV2Vic29ja2V0Lm9uKCdtZXNzYWdlJywgcmVxdWVzdCA9PiB7XG4gICAgICBpZiAodHlwZW9mIHJlcXVlc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVxdWVzdCA9IEpTT04ucGFyc2UocmVxdWVzdCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ3VuYWJsZSB0byBwYXJzZSByZXF1ZXN0JywgcmVxdWVzdCwgZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsb2dnZXIudmVyYm9zZSgnUmVxdWVzdDogJWonLCByZXF1ZXN0KTtcblxuICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGlzIHJlcXVlc3QgaXMgYSB2YWxpZCByZXF1ZXN0LCByZXR1cm4gZXJyb3IgZGlyZWN0bHkgaWYgbm90XG4gICAgICBpZiAoXG4gICAgICAgICF0djQudmFsaWRhdGUocmVxdWVzdCwgUmVxdWVzdFNjaGVtYVsnZ2VuZXJhbCddKSB8fFxuICAgICAgICAhdHY0LnZhbGlkYXRlKHJlcXVlc3QsIFJlcXVlc3RTY2hlbWFbcmVxdWVzdC5vcF0pXG4gICAgICApIHtcbiAgICAgICAgQ2xpZW50LnB1c2hFcnJvcihwYXJzZVdlYnNvY2tldCwgMSwgdHY0LmVycm9yLm1lc3NhZ2UpO1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0Nvbm5lY3QgbWVzc2FnZSBlcnJvciAlcycsIHR2NC5lcnJvci5tZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHJlcXVlc3Qub3ApIHtcbiAgICAgICAgY2FzZSAnY29ubmVjdCc6XG4gICAgICAgICAgdGhpcy5faGFuZGxlQ29ubmVjdChwYXJzZVdlYnNvY2tldCwgcmVxdWVzdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3N1YnNjcmliZSc6XG4gICAgICAgICAgdGhpcy5faGFuZGxlU3Vic2NyaWJlKHBhcnNlV2Vic29ja2V0LCByZXF1ZXN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndXBkYXRlJzpcbiAgICAgICAgICB0aGlzLl9oYW5kbGVVcGRhdGVTdWJzY3JpcHRpb24ocGFyc2VXZWJzb2NrZXQsIHJlcXVlc3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd1bnN1YnNjcmliZSc6XG4gICAgICAgICAgdGhpcy5faGFuZGxlVW5zdWJzY3JpYmUocGFyc2VXZWJzb2NrZXQsIHJlcXVlc3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIENsaWVudC5wdXNoRXJyb3IocGFyc2VXZWJzb2NrZXQsIDMsICdHZXQgdW5rbm93biBvcGVyYXRpb24nKTtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0dldCB1bmtub3duIG9wZXJhdGlvbicsIHJlcXVlc3Qub3ApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcGFyc2VXZWJzb2NrZXQub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICBsb2dnZXIuaW5mbyhgQ2xpZW50IGRpc2Nvbm5lY3Q6ICR7cGFyc2VXZWJzb2NrZXQuY2xpZW50SWR9YCk7XG4gICAgICBjb25zdCBjbGllbnRJZCA9IHBhcnNlV2Vic29ja2V0LmNsaWVudElkO1xuICAgICAgaWYgKCF0aGlzLmNsaWVudHMuaGFzKGNsaWVudElkKSkge1xuICAgICAgICBydW5MaXZlUXVlcnlFdmVudEhhbmRsZXJzKHtcbiAgICAgICAgICBldmVudDogJ3dzX2Rpc2Nvbm5lY3RfZXJyb3InLFxuICAgICAgICAgIGNsaWVudHM6IHRoaXMuY2xpZW50cy5zaXplLFxuICAgICAgICAgIHN1YnNjcmlwdGlvbnM6IHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplLFxuICAgICAgICAgIGVycm9yOiBgVW5hYmxlIHRvIGZpbmQgY2xpZW50ICR7Y2xpZW50SWR9YCxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ2dlci5lcnJvcihgQ2FuIG5vdCBmaW5kIGNsaWVudCAke2NsaWVudElkfSBvbiBkaXNjb25uZWN0YCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRGVsZXRlIGNsaWVudFxuICAgICAgY29uc3QgY2xpZW50ID0gdGhpcy5jbGllbnRzLmdldChjbGllbnRJZCk7XG4gICAgICB0aGlzLmNsaWVudHMuZGVsZXRlKGNsaWVudElkKTtcblxuICAgICAgLy8gRGVsZXRlIGNsaWVudCBmcm9tIHN1YnNjcmlwdGlvbnNcbiAgICAgIGZvciAoY29uc3QgW3JlcXVlc3RJZCwgc3Vic2NyaXB0aW9uSW5mb10gb2YgXy5lbnRyaWVzKGNsaWVudC5zdWJzY3JpcHRpb25JbmZvcykpIHtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9uSW5mby5zdWJzY3JpcHRpb247XG4gICAgICAgIHN1YnNjcmlwdGlvbi5kZWxldGVDbGllbnRTdWJzY3JpcHRpb24oY2xpZW50SWQsIHJlcXVlc3RJZCk7XG5cbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gY2xpZW50IHdoaWNoIGlzIHN1YnNjcmliaW5nIHRoaXMgc3Vic2NyaXB0aW9uLCByZW1vdmUgaXQgZnJvbSBzdWJzY3JpcHRpb25zXG4gICAgICAgIGNvbnN0IGNsYXNzU3Vic2NyaXB0aW9ucyA9IHRoaXMuc3Vic2NyaXB0aW9ucy5nZXQoc3Vic2NyaXB0aW9uLmNsYXNzTmFtZSk7XG4gICAgICAgIGlmIChjbGFzc1N1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgICBpZiAoIXN1YnNjcmlwdGlvbi5oYXNTdWJzY3JpYmluZ0NsaWVudCgpKSB7XG4gICAgICAgICAgICBjbGFzc1N1YnNjcmlwdGlvbnMuZGVsZXRlKHN1YnNjcmlwdGlvbi5oYXNoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc3Vic2NyaXB0aW9ucyB1bmRlciB0aGlzIGNsYXNzLCByZW1vdmUgaXQgZnJvbSBzdWJzY3JpcHRpb25zXG4gICAgICAgICAgaWYgKGNsYXNzU3Vic2NyaXB0aW9ucy5zaXplID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZGVsZXRlKHN1YnNjcmlwdGlvbi5jbGFzc05hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsb2dnZXIudmVyYm9zZSgnQ3VycmVudCBjbGllbnRzICVkJywgdGhpcy5jbGllbnRzLnNpemUpO1xuICAgICAgbG9nZ2VyLnZlcmJvc2UoJ0N1cnJlbnQgc3Vic2NyaXB0aW9ucyAlZCcsIHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplKTtcbiAgICAgIHJ1bkxpdmVRdWVyeUV2ZW50SGFuZGxlcnMoe1xuICAgICAgICBldmVudDogJ3dzX2Rpc2Nvbm5lY3QnLFxuICAgICAgICBjbGllbnRzOiB0aGlzLmNsaWVudHMuc2l6ZSxcbiAgICAgICAgc3Vic2NyaXB0aW9uczogdGhpcy5zdWJzY3JpcHRpb25zLnNpemUsXG4gICAgICAgIHVzZU1hc3RlcktleTogY2xpZW50Lmhhc01hc3RlcktleSxcbiAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGNsaWVudC5pbnN0YWxsYXRpb25JZCxcbiAgICAgICAgc2Vzc2lvblRva2VuOiBjbGllbnQuc2Vzc2lvblRva2VuLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBydW5MaXZlUXVlcnlFdmVudEhhbmRsZXJzKHtcbiAgICAgIGV2ZW50OiAnd3NfY29ubmVjdCcsXG4gICAgICBjbGllbnRzOiB0aGlzLmNsaWVudHMuc2l6ZSxcbiAgICAgIHN1YnNjcmlwdGlvbnM6IHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplLFxuICAgIH0pO1xuICB9XG5cbiAgX3ZhbGlkYXRlUXVlcnlDb25zdHJhaW50cyh3aGVyZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiB3aGVyZSAhPT0gJ29iamVjdCcgfHwgd2hlcmUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBvcCBvZiBbJyRvcicsICckYW5kJywgJyRub3InXSkge1xuICAgICAgaWYgKHdoZXJlW29wXSAhPT0gdW5kZWZpbmVkICYmICFBcnJheS5pc0FycmF5KHdoZXJlW29wXSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksIGAke29wfSBtdXN0IGJlIGFuIGFycmF5YCk7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh3aGVyZVtvcF0pKSB7XG4gICAgICAgIHdoZXJlW29wXS5mb3JFYWNoKChzdWJRdWVyeTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5fdmFsaWRhdGVRdWVyeUNvbnN0cmFpbnRzKHN1YlF1ZXJ5KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHdoZXJlKSkge1xuICAgICAgY29uc3QgY29uc3RyYWludCA9IHdoZXJlW2tleV07XG4gICAgICBpZiAodHlwZW9mIGNvbnN0cmFpbnQgPT09ICdvYmplY3QnICYmIGNvbnN0cmFpbnQgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKGNvbnN0cmFpbnQuJHJlZ2V4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCByZWdleCA9IGNvbnN0cmFpbnQuJHJlZ2V4O1xuICAgICAgICAgIGNvbnN0IGlzUmVnRXhwTGlrZSA9XG4gICAgICAgICAgICByZWdleCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgdHlwZW9mIHJlZ2V4ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgdHlwZW9mIHJlZ2V4LnNvdXJjZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgIHR5cGVvZiByZWdleC5mbGFncyA9PT0gJ3N0cmluZyc7XG4gICAgICAgICAgaWYgKHR5cGVvZiByZWdleCAhPT0gJ3N0cmluZycgJiYgIWlzUmVnRXhwTGlrZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLFxuICAgICAgICAgICAgICAnSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246ICRyZWdleCBtdXN0IGJlIGEgc3RyaW5nIG9yIFJlZ0V4cCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHBhdHRlcm4gPSBpc1JlZ0V4cExpa2UgPyByZWdleC5zb3VyY2UgOiByZWdleDtcbiAgICAgICAgICBjb25zdCBmbGFncyA9IGlzUmVnRXhwTGlrZSA/IHJlZ2V4LmZsYWdzIDogY29uc3RyYWludC4kb3B0aW9ucyB8fCAnJztcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IFJlZ0V4cChwYXR0ZXJuLCBmbGFncyk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLFxuICAgICAgICAgICAgICBgSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246ICR7ZS5tZXNzYWdlfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX21hdGNoZXNTdWJzY3JpcHRpb24ocGFyc2VPYmplY3Q6IGFueSwgc3Vic2NyaXB0aW9uOiBhbnkpOiBib29sZWFuIHtcbiAgICAvLyBPYmplY3QgaXMgdW5kZWZpbmVkIG9yIG51bGwsIG5vdCBtYXRjaFxuICAgIGlmICghcGFyc2VPYmplY3QpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXNRdWVyeShzdHJ1Y3R1cmVkQ2xvbmUocGFyc2VPYmplY3QpLCBzdWJzY3JpcHRpb24ucXVlcnkpO1xuICB9XG5cbiAgYXN5bmMgX2NsZWFyQ2FjaGVkUm9sZXModXNlcklkOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdmFsaWRUb2tlbnMgPSBhd2FpdCBuZXcgUGFyc2UuUXVlcnkoUGFyc2UuU2Vzc2lvbilcbiAgICAgICAgLmVxdWFsVG8oJ3VzZXInLCBQYXJzZS5Vc2VyLmNyZWF0ZVdpdGhvdXREYXRhKHVzZXJJZCkpXG4gICAgICAgIC5maW5kKHsgdXNlTWFzdGVyS2V5OiB0cnVlIH0pO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHZhbGlkVG9rZW5zLm1hcChhc3luYyB0b2tlbiA9PiB7XG4gICAgICAgICAgY29uc3Qgc2Vzc2lvblRva2VuID0gdG9rZW4uZ2V0KCdzZXNzaW9uVG9rZW4nKTtcbiAgICAgICAgICBjb25zdCBhdXRoUHJvbWlzZSA9IHRoaXMuYXV0aENhY2hlLmdldChzZXNzaW9uVG9rZW4pO1xuICAgICAgICAgIGlmICghYXV0aFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgW2F1dGgxLCBhdXRoMl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICBhdXRoUHJvbWlzZSxcbiAgICAgICAgICAgIGdldEF1dGhGb3JTZXNzaW9uVG9rZW4oeyBjYWNoZUNvbnRyb2xsZXI6IHRoaXMuY2FjaGVDb250cm9sbGVyLCBzZXNzaW9uVG9rZW4gfSksXG4gICAgICAgICAgXSk7XG4gICAgICAgICAgYXV0aDEuYXV0aD8uY2xlYXJSb2xlQ2FjaGUoc2Vzc2lvblRva2VuKTtcbiAgICAgICAgICBhdXRoMi5hdXRoPy5jbGVhclJvbGVDYWNoZShzZXNzaW9uVG9rZW4pO1xuICAgICAgICAgIHRoaXMuYXV0aENhY2hlLmRlbGV0ZShzZXNzaW9uVG9rZW4pO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIudmVyYm9zZShgQ291bGQgbm90IGNsZWFyIHJvbGUgY2FjaGUuICR7ZX1gKTtcbiAgICB9XG4gIH1cblxuICBnZXRBdXRoRm9yU2Vzc2lvblRva2VuKHNlc3Npb25Ub2tlbj86IHN0cmluZyk6IFByb21pc2U8eyBhdXRoPzogQXV0aCwgdXNlcklkPzogc3RyaW5nIH0+IHtcbiAgICBpZiAoIXNlc3Npb25Ub2tlbikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgfVxuICAgIGNvbnN0IGZyb21DYWNoZSA9IHRoaXMuYXV0aENhY2hlLmdldChzZXNzaW9uVG9rZW4pO1xuICAgIGlmIChmcm9tQ2FjaGUpIHtcbiAgICAgIHJldHVybiBmcm9tQ2FjaGU7XG4gICAgfVxuICAgIGNvbnN0IGF1dGhQcm9taXNlID0gZ2V0QXV0aEZvclNlc3Npb25Ub2tlbih7XG4gICAgICBjYWNoZUNvbnRyb2xsZXI6IHRoaXMuY2FjaGVDb250cm9sbGVyLFxuICAgICAgc2Vzc2lvblRva2VuOiBzZXNzaW9uVG9rZW4sXG4gICAgfSlcbiAgICAgIC50aGVuKGF1dGggPT4ge1xuICAgICAgICByZXR1cm4geyBhdXRoLCB1c2VySWQ6IGF1dGggJiYgYXV0aC51c2VyICYmIGF1dGgudXNlci5pZCB9O1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIC8vIFRoZXJlIHdhcyBhbiBlcnJvciB3aXRoIHRoZSBzZXNzaW9uIHRva2VuXG4gICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5jb2RlID09PSBQYXJzZS5FcnJvci5JTlZBTElEX1NFU1NJT05fVE9LRU4pIHtcbiAgICAgICAgICByZXN1bHQuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICB0aGlzLmF1dGhDYWNoZS5zZXQoc2Vzc2lvblRva2VuLCBQcm9taXNlLnJlc29sdmUocmVzdWx0KSwge1xuICAgICAgICAgICAgdHRsOiB0aGlzLmNvbmZpZy5jYWNoZVRpbWVvdXQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hdXRoQ2FjaGUuZGVsZXRlKHNlc3Npb25Ub2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pO1xuICAgIHRoaXMuYXV0aENhY2hlLnNldChzZXNzaW9uVG9rZW4sIGF1dGhQcm9taXNlKTtcbiAgICByZXR1cm4gYXV0aFByb21pc2U7XG4gIH1cblxuICBhc3luYyBfbWF0Y2hlc0NMUChcbiAgICBjbGFzc0xldmVsUGVybWlzc2lvbnM/OiBhbnksXG4gICAgb2JqZWN0PzogYW55LFxuICAgIGNsaWVudD86IGFueSxcbiAgICByZXF1ZXN0SWQ/OiBudW1iZXIsXG4gICAgb3A/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBzdWJzY3JpcHRpb25JbmZvID0gY2xpZW50LmdldFN1YnNjcmlwdGlvbkluZm8ocmVxdWVzdElkKTtcbiAgICBjb25zdCBhY2xHcm91cCA9IFsnKiddO1xuICAgIGxldCB1c2VySWQ7XG4gICAgaWYgKHR5cGVvZiBzdWJzY3JpcHRpb25JbmZvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBjb25uZWN0LWZyYW1lIHRva2VuLCB0aGUgc2FtZSB3YXkgYF9tYXRjaGVzQUNMYCxcbiAgICAgIC8vIGBnZXRBdXRoRnJvbUNsaWVudGAgYW5kIGBfZmlsdGVyU2Vuc2l0aXZlRGF0YWAgYWxyZWFkeSBkby4gVGhlIHN1YnNjcmliZVxuICAgICAgLy8gZnJhbWUncyBzZXNzaW9uIHRva2VuIGlzIG9wdGlvbmFsLCBzbyByZXNvbHZpbmcgb25seSBpdCB3b3VsZCBldmFsdWF0ZSB0aGVcbiAgICAgIC8vIENMUCBhZ2FpbnN0IGFuIGFub255bW91cyBpZGVudGl0eSB3aGlsZSB0aGUgQUNMIGNoZWNrIGF1dGhvcml6ZWQgdGhlIHJlYWRcbiAgICAgIC8vIGFnYWluc3QgdGhlIGNvbm5lY3RlZCB1c2VyLlxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRBdXRoRm9yU2Vzc2lvblRva2VuKFxuICAgICAgICBzdWJzY3JpcHRpb25JbmZvLnNlc3Npb25Ub2tlbiB8fCBjbGllbnQuc2Vzc2lvblRva2VuXG4gICAgICApO1xuICAgICAgdXNlcklkID0gcmVzdWx0LnVzZXJJZDtcbiAgICAgIGlmICh1c2VySWQpIHtcbiAgICAgICAgYWNsR3JvdXAucHVzaCh1c2VySWQpO1xuICAgICAgICAvLyBSZWFkIHBlciBjYWxsIHJhdGhlciB0aGFuIGNhY2hpbmcgb24gdGhlIGluc3RhbmNlOiB0aGUgd2hvbGUgYXBwIGNvbmZpZ1xuICAgICAgICAvLyBjYW4gYmUgcmVwbGFjZWQgYXQgcnVudGltZSB0aHJvdWdoIHRoZSBgUGFyc2UuU2VydmVyYCBzZXR0ZXIuXG4gICAgICAgIGNvbnN0IGFwcENvbmZpZyA9IENvbmZpZy5nZXQodGhpcy5jb25maWcuYXBwSWQpO1xuICAgICAgICBhY2xHcm91cC5wdXNoKFxuICAgICAgICAgIC4uLihhd2FpdCB0aGlzLl9yb2xlc0ZvckNMUE9wZXJhdGlvbihcbiAgICAgICAgICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgIHJlc3VsdC5hdXRoLFxuICAgICAgICAgICAgb3AsXG4gICAgICAgICAgICBhcHBDb25maWdcbiAgICAgICAgICApKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCBTY2hlbWFDb250cm9sbGVyLnZhbGlkYXRlUGVybWlzc2lvbihcbiAgICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyxcbiAgICAgIG9iamVjdC5jbGFzc05hbWUsXG4gICAgICBhY2xHcm91cCxcbiAgICAgIG9wXG4gICAgKTtcbiAgICAvLyBFbmZvcmNlIHBvaW50ZXIgcGVybWlzc2lvbnMgdGhhdCB2YWxpZGF0ZVBlcm1pc3Npb24gZGVmZXJzLlxuICAgIC8vIFJldHVybnMgZmFsc2UgdG8gc2lsZW50bHkgc2tpcCB0aGUgZXZlbnQgKGxpa2UgQUNMKSwgcmF0aGVyIHRoYW5cbiAgICAvLyB0aHJvd2luZyB3aGljaCB3b3VsZCBwdXNoIGVycm9ycyB0byB0aGUgY2xpZW50IGFuZCBsb2cgbm9pc2UuXG4gICAgaWYgKCFjbGllbnQuaGFzTWFzdGVyS2V5ICYmIGNsYXNzTGV2ZWxQZXJtaXNzaW9ucykge1xuICAgICAgY29uc3QgcGVybWlzc2lvbkZpZWxkID1cbiAgICAgICAgWydnZXQnLCAnZmluZCcsICdjb3VudCddLmluZGV4T2Yob3ApID4gLTEgPyAncmVhZFVzZXJGaWVsZHMnIDogJ3dyaXRlVXNlckZpZWxkcyc7XG4gICAgICBjb25zdCBwb2ludGVyRmllbGRzID0gW107XG4gICAgICBpZiAoY2xhc3NMZXZlbFBlcm1pc3Npb25zW29wXT8ucG9pbnRlckZpZWxkcykge1xuICAgICAgICBwb2ludGVyRmllbGRzLnB1c2goLi4uY2xhc3NMZXZlbFBlcm1pc3Npb25zW29wXS5wb2ludGVyRmllbGRzKTtcbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNsYXNzTGV2ZWxQZXJtaXNzaW9uc1twZXJtaXNzaW9uRmllbGRdKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGNsYXNzTGV2ZWxQZXJtaXNzaW9uc1twZXJtaXNzaW9uRmllbGRdKSB7XG4gICAgICAgICAgaWYgKCFwb2ludGVyRmllbGRzLmluY2x1ZGVzKGZpZWxkKSkge1xuICAgICAgICAgICAgcG9pbnRlckZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwb2ludGVyRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gSWYgcHVibGljIG9yIHVzZXItc3BlY2lmaWMgcGVybWlzc2lvbiBhbHJlYWR5IGdyYW50cyBhY2Nlc3MsIHNraXAgcG9pbnRlciBjaGVja1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIVNjaGVtYUNvbnRyb2xsZXIudGVzdFBlcm1pc3Npb25zKGNsYXNzTGV2ZWxQZXJtaXNzaW9ucywgYWNsR3JvdXAsIG9wKVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoIXVzZXJJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBDaGVjayBpZiBhbnkgcG9pbnRlciBmaWVsZCBwb2ludHMgdG8gdGhlIGN1cnJlbnQgdXNlclxuICAgICAgICAgIGNvbnN0IGhhc0FjY2VzcyA9IHBvaW50ZXJGaWVsZHMuc29tZShmaWVsZCA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9XG4gICAgICAgICAgICAgIHR5cGVvZiBvYmplY3QuZ2V0ID09PSAnZnVuY3Rpb24nID8gb2JqZWN0LmdldChmaWVsZCkgOiBvYmplY3RbZmllbGRdO1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBIYW5kbGUgUGFyc2UuT2JqZWN0IHBvaW50ZXIgKGhhcyAuaWQpXG4gICAgICAgICAgICBpZiAodmFsdWUuaWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlkID09PSB1c2VySWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBIYW5kbGUgcmF3IHBvaW50ZXIgSlNPTiAoaGFzIC5vYmplY3RJZClcbiAgICAgICAgICAgIGlmICh2YWx1ZS5vYmplY3RJZCkge1xuICAgICAgICAgICAgICByZXR1cm4gdmFsdWUub2JqZWN0SWQgPT09IHVzZXJJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEhhbmRsZSBhcnJheSBvZiBwb2ludGVyc1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5zb21lKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5pZCA9PT0gdXNlcklkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5vYmplY3RJZCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ub2JqZWN0SWQgPT09IHVzZXJJZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoIWhhc0FjY2Vzcykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGBhZGRQcm90ZWN0ZWRGaWVsZHNgIHJlYWRzIHJvbGUtc2NvcGVkIGBwcm90ZWN0ZWRGaWVsZHNgIGdyb3VwcyBmcm9tXG4gIC8vIGBBdXRoLnVzZXJSb2xlc2AsIHdoaWNoIHN0YXlzIGVtcHR5IHVubGVzcyB0aGUgcm9sZXMgYXJlIGV4cGxpY2l0bHkgbG9hZGVkLlxuICAvLyBXaXRob3V0IHRoaXMsIGV2ZXJ5IGByb2xlOmAgZ3JvdXAgaXMgc2lsZW50bHkgc2tpcHBlZCBhbmQgTGl2ZVF1ZXJ5IHdvdWxkXG4gIC8vIGRpc2Nsb3NlIGZpZWxkcyB0aGF0IHRoZSBSRVNUIHBhdGggc3RyaXBzIGZvciB0aGUgc2FtZSBjYWxsZXIuIFRoZSByb2xlcyBhcmVcbiAgLy8gb25seSBmZXRjaGVkIHdoZW4gdGhlIGNsYXNzIGFjdHVhbGx5IGRlY2xhcmVzIGEgYHJvbGU6YCBncm91cCwgc28gY2xhc3Nlc1xuICAvLyB3aXRob3V0IG9uZSBrZWVwIHN1YnNjcmliaW5nIGFuZCByZWNlaXZpbmcgZXZlbnRzIHdpdGhvdXQgYSByb2xlIGxvb2t1cC5cbiAgYXN5bmMgX2xvYWRSb2xlc0ZvclByb3RlY3RlZEZpZWxkcyhjbGFzc0xldmVsUGVybWlzc2lvbnM/OiBhbnksIGNsaWVudEF1dGg/OiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIGNsaWVudEF1dGg/LmdldFVzZXJSb2xlcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcm90ZWN0ZWRGaWVsZHMgPSBjbGFzc0xldmVsUGVybWlzc2lvbnM/LnByb3RlY3RlZEZpZWxkcztcbiAgICBpZiAoIXByb3RlY3RlZEZpZWxkcyB8fCBBcnJheS5pc0FycmF5KHByb3RlY3RlZEZpZWxkcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFPYmplY3Qua2V5cyhwcm90ZWN0ZWRGaWVsZHMpLnNvbWUoa2V5ID0+IGtleS5zdGFydHNXaXRoKCdyb2xlOicpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCBjbGllbnRBdXRoLmdldFVzZXJSb2xlcygpO1xuICB9XG5cbiAgLy8gYFNjaGVtYUNvbnRyb2xsZXIudGVzdFBlcm1pc3Npb25zYCBtYXRjaGVzIENMUCBlbnRyaWVzIGFnYWluc3QgdGhlIGNhbGxlcidzXG4gIC8vIEFDTCBncm91cCwgc28gYSBgcm9sZTpgIGdyYW50IG9ubHkgYXBwbGllcyB3aGVuIHRoZSBjYWxsZXIncyByb2xlcyBhcmUgaW4gdGhhdFxuICAvLyBncm91cC4gVGhlIFJFU1QgcGF0aCBidWlsZHMgdGhlIHNhbWUgZ3JvdXAgaW4gYFJlc3RRdWVyeS5nZXRVc2VyQW5kUm9sZUFDTGA7XG4gIC8vIHdpdGhvdXQgdGhpcyBMaXZlUXVlcnkgZGVuaWVzIGBmaW5kYC9gZ2V0YCB0byBsZWdpdGltYXRlIHJvbGUgbWVtYmVycyB0aGF0IHRoZVxuICAvLyBlcXVpdmFsZW50IFJFU1QgcXVlcnkgc2VydmVzLlxuICAvL1xuICAvLyBIb25vdXJpbmcgdGhlIGdyYW50IHdpZGVucyB3aGF0IExpdmVRdWVyeSBkZWxpdmVycywgc28gaXQgaXMgb3B0LWluIHVudGlsIHRoZVxuICAvLyBuZXh0IG1ham9yIHZpYSBgZW5hYmxlTGl2ZVF1ZXJ5Q2xhc3NMZXZlbFBlcm1pc3Npb25Sb2xlc2AgKHNlZSBERVBQUzI1KS4gVGhlXG4gIC8vIG9wdGlvbiBsaXZlcyBvbiBgUGFyc2VTZXJ2ZXJPcHRpb25zYCwgd2hpY2ggaXMgTk9UIHdoYXQgYHRoaXMuY29uZmlnYCBob2xkcyAtLVxuICAvLyB0aGF0IGlzIGBsaXZlUXVlcnlTZXJ2ZXJPcHRpb25zYCAtLSBzbyBpdCBoYXMgdG8gYmUgcmVhZCB0aHJvdWdoIGBDb25maWcuZ2V0YC5cbiAgLy8gVGhlIG9wdGlvbmFsIGNoYWluaW5nIGlzIHJlcXVpcmVkOiBgQ29uZmlnLmdldGAgcmV0dXJucyBgdW5kZWZpbmVkYCBmb3IgYVxuICAvLyBzdGFuZGFsb25lIExpdmVRdWVyeSBzZXJ2ZXIsIHdob3NlIGBBcHBDYWNoZWAgaXMgZW1wdHkuXG4gIC8vXG4gIC8vIFRoZSByb2xlcyBhcmUgb25seSByZXNvbHZlZCB3aGVuIHRoZSBvcGVyYXRpb24ncyBDTFAgYWN0dWFsbHkgZGVjbGFyZXMgYVxuICAvLyBgcm9sZTpgIGVudHJ5LCBzbyBjbGFzc2VzIHRoYXQgZ3JhbnQgYnkgYCpgIG9yIGJ5IHVzZXIgaWQga2VlcCBtYXRjaGluZyBldmVudHNcbiAgLy8gd2l0aG91dCBhIHJvbGUgbG9va3VwLlxuICBhc3luYyBfcm9sZXNGb3JDTFBPcGVyYXRpb24oXG4gICAgY2xhc3NMZXZlbFBlcm1pc3Npb25zPzogYW55LFxuICAgIGNsaWVudEF1dGg/OiBhbnksXG4gICAgb3A/OiBzdHJpbmcsXG4gICAgYXBwQ29uZmlnPzogYW55XG4gICk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBpZiAoIWFwcENvbmZpZz8uZW5hYmxlTGl2ZVF1ZXJ5Q2xhc3NMZXZlbFBlcm1pc3Npb25Sb2xlcykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNsaWVudEF1dGg/LmdldFVzZXJSb2xlcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBvcFBlcm1pc3Npb25zID0gY2xhc3NMZXZlbFBlcm1pc3Npb25zPy5bb3BdO1xuICAgIGlmICghb3BQZXJtaXNzaW9ucyB8fCB0eXBlb2Ygb3BQZXJtaXNzaW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKCFPYmplY3Qua2V5cyhvcFBlcm1pc3Npb25zKS5zb21lKGtleSA9PiBrZXkuc3RhcnRzV2l0aCgncm9sZTonKSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudEF1dGguZ2V0VXNlclJvbGVzKCk7XG4gIH1cblxuICBhc3luYyBfZmlsdGVyU2Vuc2l0aXZlRGF0YShcbiAgICBjbGFzc0xldmVsUGVybWlzc2lvbnM/OiBhbnksXG4gICAgcmVzPzogYW55LFxuICAgIGNsaWVudD86IGFueSxcbiAgICByZXF1ZXN0SWQ/OiBudW1iZXIsXG4gICAgb3A/OiBzdHJpbmcsXG4gICAgcXVlcnk/OiBhbnlcbiAgKSB7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uSW5mbyA9IGNsaWVudC5nZXRTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3RJZCk7XG4gICAgY29uc3QgYWNsR3JvdXAgPSBbJyonXTtcbiAgICBsZXQgY2xpZW50QXV0aDtcbiAgICBpZiAodHlwZW9mIHN1YnNjcmlwdGlvbkluZm8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIGNvbm5lY3QtZnJhbWUgdG9rZW4sIHRoZSBzYW1lIHdheSBgX21hdGNoZXNBQ0xgIGFuZFxuICAgICAgLy8gYGdldEF1dGhGcm9tQ2xpZW50YCBhbHJlYWR5IGRvLiBUaGUgc3Vic2NyaWJlIGZyYW1lJ3Mgc2Vzc2lvbiB0b2tlbiBpc1xuICAgICAgLy8gb3B0aW9uYWwsIHNvIHJlc29sdmluZyBvbmx5IGl0IHdvdWxkIHJlZGFjdCBhZ2FpbnN0IGFuIGFub255bW91cyBpZGVudGl0eVxuICAgICAgLy8gd2hpbGUgdGhlIEFDTCBjaGVjayBhdXRob3JpemVkIHRoZSByZWFkIGFnYWluc3QgdGhlIGNvbm5lY3RlZCB1c2VyLiBUaGF0XG4gICAgICAvLyBtaXNtYXRjaCBza2lwcyBldmVyeSBpZGVudGl0eS1kZXJpdmVkIGBwcm90ZWN0ZWRGaWVsZHNgIGdyb3VwXG4gICAgICAvLyAoYHJvbGU6YCwgYGF1dGhlbnRpY2F0ZWRgIGFuZCBgPG9iamVjdElkPmApLlxuICAgICAgY29uc3QgeyB1c2VySWQsIGF1dGggfSA9IGF3YWl0IHRoaXMuZ2V0QXV0aEZvclNlc3Npb25Ub2tlbihcbiAgICAgICAgc3Vic2NyaXB0aW9uSW5mby5zZXNzaW9uVG9rZW4gfHwgY2xpZW50LnNlc3Npb25Ub2tlblxuICAgICAgKTtcbiAgICAgIGlmICh1c2VySWQpIHtcbiAgICAgICAgYWNsR3JvdXAucHVzaCh1c2VySWQpO1xuICAgICAgfVxuICAgICAgY2xpZW50QXV0aCA9IGF1dGg7XG4gICAgfVxuICAgIGlmICghY2xpZW50Lmhhc01hc3RlcktleSkge1xuICAgICAgYXdhaXQgdGhpcy5fbG9hZFJvbGVzRm9yUHJvdGVjdGVkRmllbGRzKGNsYXNzTGV2ZWxQZXJtaXNzaW9ucywgY2xpZW50QXV0aCk7XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IG9iaiA9PiB7XG4gICAgICBpZiAoIW9iaikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgcHJvdGVjdGVkRmllbGRzID0gY2xhc3NMZXZlbFBlcm1pc3Npb25zPy5wcm90ZWN0ZWRGaWVsZHMgfHwgW107XG4gICAgICBpZiAoY2xpZW50Lmhhc01hc3RlcktleSkge1xuICAgICAgICBwcm90ZWN0ZWRGaWVsZHMgPSBbXTtcbiAgICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkocHJvdGVjdGVkRmllbGRzKSkge1xuICAgICAgICBwcm90ZWN0ZWRGaWVsZHMgPSBnZXREYXRhYmFzZUNvbnRyb2xsZXIodGhpcy5jb25maWcpLmFkZFByb3RlY3RlZEZpZWxkcyhcbiAgICAgICAgICBjbGFzc0xldmVsUGVybWlzc2lvbnMsXG4gICAgICAgICAgcmVzLm9iamVjdC5jbGFzc05hbWUsXG4gICAgICAgICAgcXVlcnksXG4gICAgICAgICAgYWNsR3JvdXAsXG4gICAgICAgICAgY2xpZW50QXV0aFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIERhdGFiYXNlQ29udHJvbGxlci5maWx0ZXJTZW5zaXRpdmVEYXRhKFxuICAgICAgICBjbGllbnQuaGFzTWFzdGVyS2V5LFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgYWNsR3JvdXAsXG4gICAgICAgIGNsaWVudEF1dGgsXG4gICAgICAgIG9wLFxuICAgICAgICBjbGFzc0xldmVsUGVybWlzc2lvbnMsXG4gICAgICAgIHJlcy5vYmplY3QuY2xhc3NOYW1lLFxuICAgICAgICBwcm90ZWN0ZWRGaWVsZHMsXG4gICAgICAgIG9iaixcbiAgICAgICAgdGhpcy5jb25maWcucHJvdGVjdGVkRmllbGRzT3duZXJFeGVtcHRcbiAgICAgICk7XG4gICAgfTtcbiAgICByZXMub2JqZWN0ID0gZmlsdGVyKHJlcy5vYmplY3QpO1xuICAgIHJlcy5vcmlnaW5hbCA9IGZpbHRlcihyZXMub3JpZ2luYWwpO1xuICB9XG5cbiAgX2dldENMUE9wZXJhdGlvbihxdWVyeTogYW55KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBxdWVyeSA9PT0gJ29iamVjdCcgJiZcbiAgICAgIE9iamVjdC5rZXlzKHF1ZXJ5KS5sZW5ndGggPT0gMSAmJlxuICAgICAgdHlwZW9mIHF1ZXJ5Lm9iamVjdElkID09PSAnc3RyaW5nJ1xuICAgICAgPyAnZ2V0J1xuICAgICAgOiAnZmluZCc7XG4gIH1cblxuICBhc3luYyBfdmVyaWZ5QUNMKGFjbDogYW55LCB0b2tlbjogc3RyaW5nKSB7XG4gICAgaWYgKCF0b2tlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHsgYXV0aCwgdXNlcklkIH0gPSBhd2FpdCB0aGlzLmdldEF1dGhGb3JTZXNzaW9uVG9rZW4odG9rZW4pO1xuXG4gICAgLy8gR2V0dGluZyB0aGUgc2Vzc2lvbiB0b2tlbiBmYWlsZWRcbiAgICAvLyBUaGlzIG1lYW5zIHRoYXQgbm8gYWRkaXRpb25hbCBhdXRoIGlzIGF2YWlsYWJsZVxuICAgIC8vIEF0IHRoaXMgcG9pbnQsIGp1c3QgYmFpbCBvdXQgYXMgbm8gYWRkaXRpb25hbCB2aXNpYmlsaXR5IGNhbiBiZSBpbmZlcnJlZC5cbiAgICBpZiAoIWF1dGggfHwgIXVzZXJJZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBpc1N1YnNjcmlwdGlvblNlc3Npb25Ub2tlbk1hdGNoZWQgPSBhY2wuZ2V0UmVhZEFjY2Vzcyh1c2VySWQpO1xuICAgIGlmIChpc1N1YnNjcmlwdGlvblNlc3Npb25Ub2tlbk1hdGNoZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSB1c2VyIGhhcyBhbnkgcm9sZXMgdGhhdCBtYXRjaCB0aGUgQUNMXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIFJlc29sdmUgZmFsc2UgcmlnaHQgYXdheSBpZiB0aGUgYWNsIGRvZXNuJ3QgaGF2ZSBhbnkgcm9sZXNcbiAgICAgICAgY29uc3QgYWNsX2hhc19yb2xlcyA9IE9iamVjdC5rZXlzKGFjbC5wZXJtaXNzaW9uc0J5SWQpLnNvbWUoa2V5ID0+IGtleS5zdGFydHNXaXRoKCdyb2xlOicpKTtcbiAgICAgICAgaWYgKCFhY2xfaGFzX3JvbGVzKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvbGVOYW1lcyA9IGF3YWl0IGF1dGguZ2V0VXNlclJvbGVzKCk7XG4gICAgICAgIC8vIEZpbmFsbHksIHNlZSBpZiBhbnkgb2YgdGhlIHVzZXIncyByb2xlcyBhbGxvdyB0aGVtIHJlYWQgYWNjZXNzXG4gICAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlTmFtZXMpIHtcbiAgICAgICAgICAvLyBXZSB1c2UgZ2V0UmVhZEFjY2VzcyBhcyBgcm9sZWAgaXMgaW4gdGhlIGZvcm0gYHJvbGU6cm9sZU5hbWVgXG4gICAgICAgICAgaWYgKGFjbC5nZXRSZWFkQWNjZXNzKHJvbGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0QXV0aEZyb21DbGllbnQoY2xpZW50OiBhbnksIHJlcXVlc3RJZDogbnVtYmVyLCBzZXNzaW9uVG9rZW4/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBnZXRTZXNzaW9uRnJvbUNsaWVudCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbkluZm8gPSBjbGllbnQuZ2V0U3Vic2NyaXB0aW9uSW5mbyhyZXF1ZXN0SWQpO1xuICAgICAgaWYgKHR5cGVvZiBzdWJzY3JpcHRpb25JbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gY2xpZW50LnNlc3Npb25Ub2tlbjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWJzY3JpcHRpb25JbmZvLnNlc3Npb25Ub2tlbiB8fCBjbGllbnQuc2Vzc2lvblRva2VuO1xuICAgIH07XG4gICAgaWYgKCFzZXNzaW9uVG9rZW4pIHtcbiAgICAgIHNlc3Npb25Ub2tlbiA9IGdldFNlc3Npb25Gcm9tQ2xpZW50KCk7XG4gICAgfVxuICAgIGlmICghc2Vzc2lvblRva2VuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHsgYXV0aCB9ID0gYXdhaXQgdGhpcy5nZXRBdXRoRm9yU2Vzc2lvblRva2VuKHNlc3Npb25Ub2tlbik7XG4gICAgcmV0dXJuIGF1dGg7XG4gIH1cblxuICBfY2hlY2tXYXRjaEZpZWxkcyhjbGllbnQ6IGFueSwgcmVxdWVzdElkOiBhbnksIG1lc3NhZ2U6IGFueSkge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbkluZm8gPSBjbGllbnQuZ2V0U3Vic2NyaXB0aW9uSW5mbyhyZXF1ZXN0SWQpO1xuICAgIGNvbnN0IHdhdGNoID0gc3Vic2NyaXB0aW9uSW5mbz8ud2F0Y2g7XG4gICAgaWYgKCF3YXRjaCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IG9iamVjdCA9IG1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0O1xuICAgIGNvbnN0IG9yaWdpbmFsID0gbWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0O1xuICAgIHJldHVybiB3YXRjaC5zb21lKGZpZWxkID0+ICFpc0RlZXBTdHJpY3RFcXVhbChvYmplY3QuZ2V0KGZpZWxkKSwgb3JpZ2luYWw/LmdldChmaWVsZCkpKTtcbiAgfVxuXG4gIGFzeW5jIF9tYXRjaGVzQUNMKGFjbDogYW55LCBjbGllbnQ6IGFueSwgcmVxdWVzdElkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBSZXR1cm4gdHJ1ZSBkaXJlY3RseSBpZiBBQ0wgaXNuJ3QgcHJlc2VudCwgQUNMIGlzIHB1YmxpYyByZWFkLCBvciBjbGllbnQgaGFzIG1hc3RlciBrZXlcbiAgICBpZiAoIWFjbCB8fCBhY2wuZ2V0UHVibGljUmVhZEFjY2VzcygpIHx8IGNsaWVudC5oYXNNYXN0ZXJLZXkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBDaGVjayBzdWJzY3JpcHRpb24gc2Vzc2lvblRva2VuIG1hdGNoZXMgQUNMIGZpcnN0XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uSW5mbyA9IGNsaWVudC5nZXRTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3RJZCk7XG4gICAgaWYgKHR5cGVvZiBzdWJzY3JpcHRpb25JbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YnNjcmlwdGlvblRva2VuID0gc3Vic2NyaXB0aW9uSW5mby5zZXNzaW9uVG9rZW47XG4gICAgY29uc3QgY2xpZW50U2Vzc2lvblRva2VuID0gY2xpZW50LnNlc3Npb25Ub2tlbjtcblxuICAgIGlmIChhd2FpdCB0aGlzLl92ZXJpZnlBQ0woYWNsLCBzdWJzY3JpcHRpb25Ub2tlbikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChhd2FpdCB0aGlzLl92ZXJpZnlBQ0woYWNsLCBjbGllbnRTZXNzaW9uVG9rZW4pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyBfaGFuZGxlQ29ubmVjdChwYXJzZVdlYnNvY2tldDogYW55LCByZXF1ZXN0OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICghdGhpcy5fdmFsaWRhdGVLZXlzKHJlcXVlc3QsIHRoaXMua2V5UGFpcnMpKSB7XG4gICAgICBDbGllbnQucHVzaEVycm9yKHBhcnNlV2Vic29ja2V0LCA0LCAnS2V5IGluIHJlcXVlc3QgaXMgbm90IHZhbGlkJyk7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0tleSBpbiByZXF1ZXN0IGlzIG5vdCB2YWxpZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoYXNNYXN0ZXJLZXkgPSB0aGlzLl9oYXNNYXN0ZXJLZXkocmVxdWVzdCwgdGhpcy5rZXlQYWlycyk7XG4gICAgY29uc3QgY2xpZW50SWQgPSByYW5kb21VVUlEKCk7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IENsaWVudChcbiAgICAgIGNsaWVudElkLFxuICAgICAgcGFyc2VXZWJzb2NrZXQsXG4gICAgICBoYXNNYXN0ZXJLZXksXG4gICAgICByZXF1ZXN0LnNlc3Npb25Ub2tlbixcbiAgICAgIHJlcXVlc3QuaW5zdGFsbGF0aW9uSWRcbiAgICApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXEgPSB7XG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgZXZlbnQ6ICdjb25uZWN0JyxcbiAgICAgICAgY2xpZW50czogdGhpcy5jbGllbnRzLnNpemUsXG4gICAgICAgIHN1YnNjcmlwdGlvbnM6IHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplLFxuICAgICAgICBzZXNzaW9uVG9rZW46IHJlcXVlc3Quc2Vzc2lvblRva2VuLFxuICAgICAgICB1c2VNYXN0ZXJLZXk6IGNsaWVudC5oYXNNYXN0ZXJLZXksXG4gICAgICAgIGluc3RhbGxhdGlvbklkOiByZXF1ZXN0Lmluc3RhbGxhdGlvbklkLFxuICAgICAgICB1c2VyOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgICAgY29uc3QgdHJpZ2dlciA9IGdldFRyaWdnZXIoJ0BDb25uZWN0JywgJ2JlZm9yZUNvbm5lY3QnLCBQYXJzZS5hcHBsaWNhdGlvbklkKTtcbiAgICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICAgIGNvbnN0IGF1dGggPSBhd2FpdCB0aGlzLmdldEF1dGhGcm9tQ2xpZW50KGNsaWVudCwgcmVxdWVzdC5yZXF1ZXN0SWQsIHJlcS5zZXNzaW9uVG9rZW4pO1xuICAgICAgICBpZiAoYXV0aCAmJiBhdXRoLnVzZXIpIHtcbiAgICAgICAgICByZXEudXNlciA9IGF1dGgudXNlcjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBydW5UcmlnZ2VyKHRyaWdnZXIsIGBiZWZvcmVDb25uZWN0LkBDb25uZWN0YCwgcmVxLCBhdXRoKTtcbiAgICAgIH1cbiAgICAgIHBhcnNlV2Vic29ja2V0LmNsaWVudElkID0gY2xpZW50SWQ7XG4gICAgICB0aGlzLmNsaWVudHMuc2V0KHBhcnNlV2Vic29ja2V0LmNsaWVudElkLCBjbGllbnQpO1xuICAgICAgbG9nZ2VyLmluZm8oYENyZWF0ZSBuZXcgY2xpZW50OiAke3BhcnNlV2Vic29ja2V0LmNsaWVudElkfWApO1xuICAgICAgY2xpZW50LnB1c2hDb25uZWN0KCk7XG4gICAgICBydW5MaXZlUXVlcnlFdmVudEhhbmRsZXJzKHJlcSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyb3IgPSByZXNvbHZlRXJyb3IoZSk7XG4gICAgICBDbGllbnQucHVzaEVycm9yKHBhcnNlV2Vic29ja2V0LCBlcnJvci5jb2RlLCBlcnJvci5tZXNzYWdlLCBmYWxzZSk7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgIGBGYWlsZWQgcnVubmluZyBiZWZvcmVDb25uZWN0IGZvciBzZXNzaW9uICR7cmVxdWVzdC5zZXNzaW9uVG9rZW59IHdpdGg6XFxuIEVycm9yOiBgICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShlcnJvcilcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgX2hhc01hc3RlcktleShyZXF1ZXN0OiBhbnksIHZhbGlkS2V5UGFpcnM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsaWRLZXlQYWlycyB8fCB2YWxpZEtleVBhaXJzLnNpemUgPT0gMCB8fCAhdmFsaWRLZXlQYWlycy5oYXMoJ21hc3RlcktleScpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghcmVxdWVzdCB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcXVlc3QsICdtYXN0ZXJLZXknKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gcmVxdWVzdC5tYXN0ZXJLZXkgPT09IHZhbGlkS2V5UGFpcnMuZ2V0KCdtYXN0ZXJLZXknKTtcbiAgfVxuXG4gIF92YWxpZGF0ZUtleXMocmVxdWVzdDogYW55LCB2YWxpZEtleVBhaXJzOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXZhbGlkS2V5UGFpcnMgfHwgdmFsaWRLZXlQYWlycy5zaXplID09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBsZXQgaXNWYWxpZCA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgW2tleSwgc2VjcmV0XSBvZiB2YWxpZEtleVBhaXJzKSB7XG4gICAgICBpZiAoIXJlcXVlc3Rba2V5XSB8fCByZXF1ZXN0W2tleV0gIT09IHNlY3JldCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlzVmFsaWQgPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBpc1ZhbGlkO1xuICB9XG5cbiAgYXN5bmMgX2hhbmRsZVN1YnNjcmliZShwYXJzZVdlYnNvY2tldDogYW55LCByZXF1ZXN0OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIElmIHdlIGNhbiBub3QgZmluZCB0aGlzIGNsaWVudCwgcmV0dXJuIGVycm9yIHRvIGNsaWVudFxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcnNlV2Vic29ja2V0LCAnY2xpZW50SWQnKSkge1xuICAgICAgQ2xpZW50LnB1c2hFcnJvcihcbiAgICAgICAgcGFyc2VXZWJzb2NrZXQsXG4gICAgICAgIDIsXG4gICAgICAgICdDYW4gbm90IGZpbmQgdGhpcyBjbGllbnQsIG1ha2Ugc3VyZSB5b3UgY29ubmVjdCB0byBzZXJ2ZXIgYmVmb3JlIHN1YnNjcmliaW5nJ1xuICAgICAgKTtcbiAgICAgIGxvZ2dlci5lcnJvcignQ2FuIG5vdCBmaW5kIHRoaXMgY2xpZW50LCBtYWtlIHN1cmUgeW91IGNvbm5lY3QgdG8gc2VydmVyIGJlZm9yZSBzdWJzY3JpYmluZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmNsaWVudHMuZ2V0KHBhcnNlV2Vic29ja2V0LmNsaWVudElkKTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSByZXF1ZXN0LnF1ZXJ5LmNsYXNzTmFtZTtcbiAgICBsZXQgYXV0aENhbGxlZCA9IGZhbHNlO1xuICAgIGxldCBjbGllbnRBdXRoO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0cmlnZ2VyID0gZ2V0VHJpZ2dlcihjbGFzc05hbWUsICdiZWZvcmVTdWJzY3JpYmUnLCBQYXJzZS5hcHBsaWNhdGlvbklkKTtcbiAgICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICAgIGNvbnN0IGF1dGggPSBhd2FpdCB0aGlzLmdldEF1dGhGcm9tQ2xpZW50KGNsaWVudCwgcmVxdWVzdC5yZXF1ZXN0SWQsIHJlcXVlc3Quc2Vzc2lvblRva2VuKTtcbiAgICAgICAgYXV0aENhbGxlZCA9IHRydWU7XG4gICAgICAgIGNsaWVudEF1dGggPSBhdXRoO1xuICAgICAgICBpZiAoYXV0aCAmJiBhdXRoLnVzZXIpIHtcbiAgICAgICAgICByZXF1ZXN0LnVzZXIgPSBhdXRoLnVzZXI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJzZVF1ZXJ5ID0gbmV3IFBhcnNlLlF1ZXJ5KGNsYXNzTmFtZSk7XG4gICAgICAgIHBhcnNlUXVlcnkud2l0aEpTT04ocmVxdWVzdC5xdWVyeSk7XG4gICAgICAgIHJlcXVlc3QucXVlcnkgPSBwYXJzZVF1ZXJ5O1xuICAgICAgICBhd2FpdCBydW5UcmlnZ2VyKHRyaWdnZXIsIGBiZWZvcmVTdWJzY3JpYmUuJHtjbGFzc05hbWV9YCwgcmVxdWVzdCwgYXV0aCk7XG5cbiAgICAgICAgY29uc3QgcXVlcnkgPSByZXF1ZXN0LnF1ZXJ5LnRvSlNPTigpO1xuICAgICAgICByZXF1ZXN0LnF1ZXJ5ID0gcXVlcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjbGFzc05hbWUgPT09ICdfU2Vzc2lvbicpIHtcbiAgICAgICAgaWYgKCFhdXRoQ2FsbGVkKSB7XG4gICAgICAgICAgY29uc3QgYXV0aCA9IGF3YWl0IHRoaXMuZ2V0QXV0aEZyb21DbGllbnQoXG4gICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICByZXF1ZXN0LnJlcXVlc3RJZCxcbiAgICAgICAgICAgIHJlcXVlc3Quc2Vzc2lvblRva2VuXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjbGllbnRBdXRoID0gYXV0aDtcbiAgICAgICAgICBpZiAoYXV0aCAmJiBhdXRoLnVzZXIpIHtcbiAgICAgICAgICAgIHJlcXVlc3QudXNlciA9IGF1dGgudXNlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVlc3QudXNlcikge1xuICAgICAgICAgIHJlcXVlc3QucXVlcnkud2hlcmUudXNlciA9IHJlcXVlc3QudXNlci50b1BvaW50ZXIoKTtcbiAgICAgICAgfSBlbHNlIGlmICghcmVxdWVzdC5tYXN0ZXIpIHtcbiAgICAgICAgICBDbGllbnQucHVzaEVycm9yKFxuICAgICAgICAgICAgcGFyc2VXZWJzb2NrZXQsXG4gICAgICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX1NFU1NJT05fVE9LRU4sXG4gICAgICAgICAgICAnSW52YWxpZCBzZXNzaW9uIHRva2VuJyxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgcmVxdWVzdC5yZXF1ZXN0SWRcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gVmFsaWRhdGUgcXVlcnkgY29uZGl0aW9uIGRlcHRoXG4gICAgICBjb25zdCBhcHBDb25maWcgPSBDb25maWcuZ2V0KHRoaXMuY29uZmlnLmFwcElkKTtcbiAgICAgIGlmICghY2xpZW50Lmhhc01hc3RlcktleSkge1xuICAgICAgICBjb25zdCByYyA9IGFwcENvbmZpZy5yZXF1ZXN0Q29tcGxleGl0eTtcbiAgICAgICAgaWYgKHJjICYmIHJjLnF1ZXJ5RGVwdGggIT09IC0xKSB7XG4gICAgICAgICAgY29uc3QgbWF4RGVwdGggPSByYy5xdWVyeURlcHRoO1xuICAgICAgICAgIGNvbnN0IGNoZWNrRGVwdGggPSAobm9kZTogYW55LCBkZXB0aDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGVwdGggPiBtYXhEZXB0aCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSxcbiAgICAgICAgICAgICAgICBgUXVlcnkgY29uZGl0aW9uIG5lc3RpbmcgZGVwdGggZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgZGVwdGggb2YgJHttYXhEZXB0aH1gXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm9kZSA9PT0gbnVsbCB8fCB0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG5vZGUpIHtcbiAgICAgICAgICAgICAgICBjaGVja0RlcHRoKGl0ZW0sIGRlcHRoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBEZXNjZW5kIGludG8gZXZlcnkgdmFsdWUgc28gdGhhdCBsb2dpY2FsIG9wZXJhdG9ycyAoJG9yLyRhbmQvJG5vcilcbiAgICAgICAgICAgIC8vIG5lc3RlZCB1bmRlciBmaWVsZC1sZXZlbCBvcGVyYXRvcnMgKGUuZy4gJGVsZW1NYXRjaCwgJG5vdCkgb3IgcGxhaW5cbiAgICAgICAgICAgIC8vIGZpZWxkIG5hbWVzIGFyZSBzdGlsbCBjb3VudGVkLiBPbmx5IGxvZ2ljYWwgb3BlcmF0b3JzIGluY3JlYXNlIHRoZVxuICAgICAgICAgICAgLy8gZGVwdGgsIHdoaWNoIHByZXNlcnZlcyB0aGUgZG9jdW1lbnRlZCBtZWFuaW5nIG9mIGBxdWVyeURlcHRoYC5cbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG5vZGUpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGlzTG9naWNhbCA9IGtleSA9PT0gJyRvcicgfHwga2V5ID09PSAnJGFuZCcgfHwga2V5ID09PSAnJG5vcic7XG4gICAgICAgICAgICAgIGlmIChpc0xvZ2ljYWwgJiYgIUFycmF5LmlzQXJyYXkobm9kZVtrZXldKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCBgJHtrZXl9IG11c3QgYmUgYW4gYXJyYXlgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjaGVja0RlcHRoKG5vZGVba2V5XSwgaXNMb2dpY2FsID8gZGVwdGggKyAxIDogZGVwdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgY2hlY2tEZXB0aChyZXF1ZXN0LnF1ZXJ5LndoZXJlLCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBhbGxvd1JlZ2V4XG4gICAgICBpZiAoIWNsaWVudC5oYXNNYXN0ZXJLZXkpIHtcbiAgICAgICAgY29uc3QgcmMgPSBhcHBDb25maWcucmVxdWVzdENvbXBsZXhpdHk7XG4gICAgICAgIGlmIChyYyAmJiByYy5hbGxvd1JlZ2V4ID09PSBmYWxzZSkge1xuICAgICAgICAgIGNvbnN0IGNoZWNrUmVnZXggPSAod2hlcmU6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB3aGVyZSAhPT0gJ29iamVjdCcgfHwgd2hlcmUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMod2hlcmUpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnN0cmFpbnQgPSB3aGVyZVtrZXldO1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnN0cmFpbnQgPT09ICdvYmplY3QnICYmIGNvbnN0cmFpbnQgIT09IG51bGwgJiYgY29uc3RyYWludC4kcmVnZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCAnJHJlZ2V4IG9wZXJhdG9yIGlzIG5vdCBhbGxvd2VkJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3Agb2YgWyckb3InLCAnJGFuZCcsICckbm9yJ10pIHtcbiAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkod2hlcmVbb3BdKSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViUXVlcnkgb2Ygd2hlcmVbb3BdKSB7XG4gICAgICAgICAgICAgICAgICBjaGVja1JlZ2V4KHN1YlF1ZXJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGNoZWNrUmVnZXgocmVxdWVzdC5xdWVyeS53aGVyZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgQ0xQIGZvciBzdWJzY3JpYmUgb3BlcmF0aW9uXG4gICAgICBjb25zdCBzY2hlbWFDb250cm9sbGVyID0gYXdhaXQgYXBwQ29uZmlnLmRhdGFiYXNlLmxvYWRTY2hlbWEoKTtcbiAgICAgIGNvbnN0IGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyA9IHNjaGVtYUNvbnRyb2xsZXIuZ2V0Q2xhc3NMZXZlbFBlcm1pc3Npb25zKGNsYXNzTmFtZSk7XG4gICAgICBjb25zdCBvcCA9IHRoaXMuX2dldENMUE9wZXJhdGlvbihyZXF1ZXN0LnF1ZXJ5KTtcbiAgICAgIGNvbnN0IGFjbEdyb3VwID0gWycqJ107XG4gICAgICBpZiAoIWF1dGhDYWxsZWQpIHtcbiAgICAgICAgY29uc3QgYXV0aCA9IGF3YWl0IHRoaXMuZ2V0QXV0aEZyb21DbGllbnQoXG4gICAgICAgICAgY2xpZW50LFxuICAgICAgICAgIHJlcXVlc3QucmVxdWVzdElkLFxuICAgICAgICAgIHJlcXVlc3Quc2Vzc2lvblRva2VuXG4gICAgICAgICk7XG4gICAgICAgIGF1dGhDYWxsZWQgPSB0cnVlO1xuICAgICAgICBjbGllbnRBdXRoID0gYXV0aDtcbiAgICAgICAgaWYgKGF1dGggJiYgYXV0aC51c2VyKSB7XG4gICAgICAgICAgcmVxdWVzdC51c2VyID0gYXV0aC51c2VyO1xuICAgICAgICAgIGFjbEdyb3VwLnB1c2goYXV0aC51c2VyLmlkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0LnVzZXIpIHtcbiAgICAgICAgYWNsR3JvdXAucHVzaChyZXF1ZXN0LnVzZXIuaWQpO1xuICAgICAgfVxuICAgICAgaWYgKHJlcXVlc3QudXNlcikge1xuICAgICAgICBhY2xHcm91cC5wdXNoKFxuICAgICAgICAgIC4uLihhd2FpdCB0aGlzLl9yb2xlc0ZvckNMUE9wZXJhdGlvbihcbiAgICAgICAgICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgIGNsaWVudEF1dGgsXG4gICAgICAgICAgICBvcCxcbiAgICAgICAgICAgIGFwcENvbmZpZ1xuICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBhd2FpdCBTY2hlbWFDb250cm9sbGVyLnZhbGlkYXRlUGVybWlzc2lvbihcbiAgICAgICAgY2xhc3NMZXZlbFBlcm1pc3Npb25zLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGFjbEdyb3VwLFxuICAgICAgICBvcFxuICAgICAgKTtcblxuICAgICAgLy8gQ2hlY2sgcHJvdGVjdGVkIGZpZWxkcyBpbiBXSEVSRSBjbGF1c2UgYW5kIFdBVENIIHBhcmFtZXRlclxuICAgICAgaWYgKCFjbGllbnQuaGFzTWFzdGVyS2V5KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2xvYWRSb2xlc0ZvclByb3RlY3RlZEZpZWxkcyhjbGFzc0xldmVsUGVybWlzc2lvbnMsIGNsaWVudEF1dGgpO1xuICAgICAgICAvLyBgY2xpZW50QXV0aGAgaXMgdW5kZWZpbmVkIG9ubHkgd2hlbiBubyBzZXNzaW9uIHRva2VuIHdhcyBzdXBwbGllZCBvblxuICAgICAgICAvLyBlaXRoZXIgZnJhbWUsIGluIHdoaWNoIGNhc2UgYSBgYmVmb3JlU3Vic2NyaWJlYCB0cmlnZ2VyIGlzIHRoZSBvbmx5IHdheVxuICAgICAgICAvLyBgcmVxdWVzdC51c2VyYCBjYW4gYmUgc2V0LiBUaGVyZSBpcyBubyBzZXNzaW9uIHRvIHJlc29sdmUgcm9sZXMgZnJvbSBmb3JcbiAgICAgICAgLy8gc3VjaCBhIHRyaWdnZXItYXNzaWduZWQgdXNlciwgc28gYHJvbGU6YCBncm91cHMgY2Fubm90IGJlIGFwcGxpZWQgdG8gaXQuXG4gICAgICAgIGNvbnN0IGF1dGggPSByZXF1ZXN0LnVzZXIgPyBjbGllbnRBdXRoIHx8IHsgdXNlcjogcmVxdWVzdC51c2VyLCB1c2VyUm9sZXM6IFtdIH0gOiB7fTtcbiAgICAgICAgY29uc3QgcHJvdGVjdGVkRmllbGRzID1cbiAgICAgICAgICBhcHBDb25maWcuZGF0YWJhc2UuYWRkUHJvdGVjdGVkRmllbGRzKFxuICAgICAgICAgICAgY2xhc3NMZXZlbFBlcm1pc3Npb25zLFxuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICAgcmVxdWVzdC5xdWVyeS53aGVyZSxcbiAgICAgICAgICAgIGFjbEdyb3VwLFxuICAgICAgICAgICAgYXV0aFxuICAgICAgICAgICkgfHwgW107XG4gICAgICAgIGlmIChwcm90ZWN0ZWRGaWVsZHMubGVuZ3RoID4gMCAmJiByZXF1ZXN0LnF1ZXJ5LndoZXJlKSB7XG4gICAgICAgICAgY29uc3QgY2hlY2tXaGVyZSA9ICh3aGVyZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHdoZXJlICE9PSAnb2JqZWN0JyB8fCB3aGVyZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHdoZXJlS2V5IG9mIE9iamVjdC5rZXlzKHdoZXJlKSkge1xuICAgICAgICAgICAgICBjb25zdCByb290RmllbGQgPSB3aGVyZUtleS5zcGxpdCgnLicpWzBdO1xuICAgICAgICAgICAgICBpZiAocHJvdGVjdGVkRmllbGRzLmluY2x1ZGVzKHdoZXJlS2V5KSB8fCBwcm90ZWN0ZWRGaWVsZHMuaW5jbHVkZXMocm9vdEZpZWxkKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgICAgICAgICAgICAnUGVybWlzc2lvbiBkZW5pZWQnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBvcCBvZiBbJyRvcicsICckYW5kJywgJyRub3InXSkge1xuICAgICAgICAgICAgICBpZiAod2hlcmVbb3BdICE9PSB1bmRlZmluZWQgJiYgIUFycmF5LmlzQXJyYXkod2hlcmVbb3BdKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCBgJHtvcH0gbXVzdCBiZSBhbiBhcnJheWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHdoZXJlW29wXSkpIHtcbiAgICAgICAgICAgICAgICB3aGVyZVtvcF0uZm9yRWFjaCgoc3ViUXVlcnk6IGFueSkgPT4gY2hlY2tXaGVyZShzdWJRdWVyeSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjaGVja1doZXJlKHJlcXVlc3QucXVlcnkud2hlcmUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm90ZWN0ZWRGaWVsZHMubGVuZ3RoID4gMCAmJiBBcnJheS5pc0FycmF5KHJlcXVlc3QucXVlcnkud2F0Y2gpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCB3YXRjaEZpZWxkIG9mIHJlcXVlc3QucXVlcnkud2F0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvb3RGaWVsZCA9IHdhdGNoRmllbGQuc3BsaXQoJy4nKVswXTtcbiAgICAgICAgICAgIGlmIChwcm90ZWN0ZWRGaWVsZHMuaW5jbHVkZXMod2F0Y2hGaWVsZCkgfHwgcHJvdGVjdGVkRmllbGRzLmluY2x1ZGVzKHJvb3RGaWVsZCkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgICAgICAgICAgJ1Blcm1pc3Npb24gZGVuaWVkJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSByZWdleCBwYXR0ZXJucyBpbiB0aGUgc3Vic2NyaXB0aW9uIHF1ZXJ5XG4gICAgICB0aGlzLl92YWxpZGF0ZVF1ZXJ5Q29uc3RyYWludHMocmVxdWVzdC5xdWVyeS53aGVyZSk7XG5cbiAgICAgIC8vIElmIHRoaXMgY2xpZW50IGFscmVhZHkgaGFzIGEgc3Vic2NyaXB0aW9uIHJlZ2lzdGVyZWQgdW5kZXIgdGhpc1xuICAgICAgLy8gcmVxdWVzdElkLCByZXBsYWNlIGl0IGJ5IHRlYXJpbmcgZG93biB0aGUgcHJldmlvdXMgc3Vic2NyaXB0aW9uIGJlZm9yZVxuICAgICAgLy8gY3JlYXRpbmcgdGhlIG5ldyBvbmUuIFRoZSBjbGllbnQtc2lkZSBtZXRhZGF0YSBtYXAgaXMga2V5ZWQgb25seSBieVxuICAgICAgLy8gcmVxdWVzdElkLCBzbyBhIGR1cGxpY2F0ZSBgc3Vic2NyaWJlYCBmcmFtZSB3b3VsZCBvdGhlcndpc2Ugb3ZlcndyaXRlIGl0XG4gICAgICAvLyB3aGlsZSB0aGUgcHJldmlvdXMgU3Vic2NyaXB0aW9uIHN0YXlzIGluIHRoZSBzZXJ2ZXItd2lkZSBtYXAsIGxlYWtpbmcgaXRcbiAgICAgIC8vIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHByb2Nlc3MgKGRpc2Nvbm5lY3QgY2xlYW51cCBvbmx5IHdhbGtzIHRoZVxuICAgICAgLy8gc3Vydml2aW5nIGNsaWVudCBtZXRhZGF0YSBhbmQgbmV2ZXIgcmVhY2hlcyB0aGUgb3JwaGFuZWQgc3Vic2NyaXB0aW9uKS5cbiAgICAgIGNvbnN0IHByZXZpb3VzU3Vic2NyaXB0aW9uSW5mbyA9IGNsaWVudC5nZXRTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3QucmVxdWVzdElkKTtcbiAgICAgIGlmIChwcmV2aW91c1N1YnNjcmlwdGlvbkluZm8pIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNTdWJzY3JpcHRpb24gPSBwcmV2aW91c1N1YnNjcmlwdGlvbkluZm8uc3Vic2NyaXB0aW9uO1xuICAgICAgICBwcmV2aW91c1N1YnNjcmlwdGlvbi5kZWxldGVDbGllbnRTdWJzY3JpcHRpb24ocGFyc2VXZWJzb2NrZXQuY2xpZW50SWQsIHJlcXVlc3QucmVxdWVzdElkKTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNDbGFzc1N1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnMuZ2V0KHByZXZpb3VzU3Vic2NyaXB0aW9uLmNsYXNzTmFtZSk7XG4gICAgICAgIGlmIChwcmV2aW91c0NsYXNzU3Vic2NyaXB0aW9ucykge1xuICAgICAgICAgIGlmICghcHJldmlvdXNTdWJzY3JpcHRpb24uaGFzU3Vic2NyaWJpbmdDbGllbnQoKSkge1xuICAgICAgICAgICAgcHJldmlvdXNDbGFzc1N1YnNjcmlwdGlvbnMuZGVsZXRlKHByZXZpb3VzU3Vic2NyaXB0aW9uLmhhc2gpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocHJldmlvdXNDbGFzc1N1YnNjcmlwdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmRlbGV0ZShwcmV2aW91c1N1YnNjcmlwdGlvbi5jbGFzc05hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBHZXQgc3Vic2NyaXB0aW9uIGZyb20gc3Vic2NyaXB0aW9ucywgY3JlYXRlIG9uZSBpZiBuZWNlc3NhcnlcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbkhhc2ggPSBxdWVyeUhhc2gocmVxdWVzdC5xdWVyeSk7XG4gICAgICAvLyBBZGQgY2xhc3NOYW1lIHRvIHN1YnNjcmlwdGlvbnMgaWYgbmVjZXNzYXJ5XG5cbiAgICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zLmhhcyhjbGFzc05hbWUpKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5zZXQoY2xhc3NOYW1lLCBuZXcgTWFwKCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xhc3NTdWJzY3JpcHRpb25zID0gdGhpcy5zdWJzY3JpcHRpb25zLmdldChjbGFzc05hbWUpO1xuICAgICAgbGV0IHN1YnNjcmlwdGlvbjtcbiAgICAgIGlmIChjbGFzc1N1YnNjcmlwdGlvbnMuaGFzKHN1YnNjcmlwdGlvbkhhc2gpKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbiA9IGNsYXNzU3Vic2NyaXB0aW9ucy5nZXQoc3Vic2NyaXB0aW9uSGFzaCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKGNsYXNzTmFtZSwgcmVxdWVzdC5xdWVyeS53aGVyZSwgc3Vic2NyaXB0aW9uSGFzaCk7XG4gICAgICAgIGNsYXNzU3Vic2NyaXB0aW9ucy5zZXQoc3Vic2NyaXB0aW9uSGFzaCwgc3Vic2NyaXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHN1YnNjcmlwdGlvbkluZm8gdG8gY2xpZW50XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb25JbmZvOiBhbnkgPSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbjogc3Vic2NyaXB0aW9uLFxuICAgICAgfTtcbiAgICAgIC8vIEFkZCBzZWxlY3RlZCBmaWVsZHMsIHNlc3Npb25Ub2tlbiBhbmQgaW5zdGFsbGF0aW9uSWQgZm9yIHRoaXMgc3Vic2NyaXB0aW9uIGlmIG5lY2Vzc2FyeVxuICAgICAgaWYgKHJlcXVlc3QucXVlcnkua2V5cykge1xuICAgICAgICBzdWJzY3JpcHRpb25JbmZvLmtleXMgPSBBcnJheS5pc0FycmF5KHJlcXVlc3QucXVlcnkua2V5cylcbiAgICAgICAgICA/IHJlcXVlc3QucXVlcnkua2V5c1xuICAgICAgICAgIDogcmVxdWVzdC5xdWVyeS5rZXlzLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgICBpZiAocmVxdWVzdC5xdWVyeS53YXRjaCkge1xuICAgICAgICBzdWJzY3JpcHRpb25JbmZvLndhdGNoID0gcmVxdWVzdC5xdWVyeS53YXRjaDtcbiAgICAgIH1cbiAgICAgIGlmIChyZXF1ZXN0LnNlc3Npb25Ub2tlbikge1xuICAgICAgICBzdWJzY3JpcHRpb25JbmZvLnNlc3Npb25Ub2tlbiA9IHJlcXVlc3Quc2Vzc2lvblRva2VuO1xuICAgICAgfVxuICAgICAgY2xpZW50LmFkZFN1YnNjcmlwdGlvbkluZm8ocmVxdWVzdC5yZXF1ZXN0SWQsIHN1YnNjcmlwdGlvbkluZm8pO1xuXG4gICAgICAvLyBBZGQgY2xpZW50SWQgdG8gc3Vic2NyaXB0aW9uXG4gICAgICBzdWJzY3JpcHRpb24uYWRkQ2xpZW50U3Vic2NyaXB0aW9uKHBhcnNlV2Vic29ja2V0LmNsaWVudElkLCByZXF1ZXN0LnJlcXVlc3RJZCk7XG5cbiAgICAgIGNsaWVudC5wdXNoU3Vic2NyaWJlKHJlcXVlc3QucmVxdWVzdElkKTtcblxuICAgICAgbG9nZ2VyLnZlcmJvc2UoXG4gICAgICAgIGBDcmVhdGUgY2xpZW50ICR7cGFyc2VXZWJzb2NrZXQuY2xpZW50SWR9IG5ldyBzdWJzY3JpcHRpb246ICR7cmVxdWVzdC5yZXF1ZXN0SWR9YFxuICAgICAgKTtcbiAgICAgIGxvZ2dlci52ZXJib3NlKCdDdXJyZW50IGNsaWVudCBudW1iZXI6ICVkJywgdGhpcy5jbGllbnRzLnNpemUpO1xuICAgICAgcnVuTGl2ZVF1ZXJ5RXZlbnRIYW5kbGVycyh7XG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgZXZlbnQ6ICdzdWJzY3JpYmUnLFxuICAgICAgICBjbGllbnRzOiB0aGlzLmNsaWVudHMuc2l6ZSxcbiAgICAgICAgc3Vic2NyaXB0aW9uczogdGhpcy5zdWJzY3JpcHRpb25zLnNpemUsXG4gICAgICAgIHNlc3Npb25Ub2tlbjogcmVxdWVzdC5zZXNzaW9uVG9rZW4sXG4gICAgICAgIHVzZU1hc3RlcktleTogY2xpZW50Lmhhc01hc3RlcktleSxcbiAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGNsaWVudC5pbnN0YWxsYXRpb25JZCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gcmVzb2x2ZUVycm9yKGUpO1xuICAgICAgQ2xpZW50LnB1c2hFcnJvcihwYXJzZVdlYnNvY2tldCwgZXJyb3IuY29kZSwgZXJyb3IubWVzc2FnZSwgZmFsc2UsIHJlcXVlc3QucmVxdWVzdElkKTtcbiAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgYEZhaWxlZCBydW5uaW5nIGJlZm9yZVN1YnNjcmliZSBvbiAke2NsYXNzTmFtZX0gZm9yIHNlc3Npb24gJHtyZXF1ZXN0LnNlc3Npb25Ub2tlbn0gd2l0aDpcXG4gRXJyb3I6IGAgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGVycm9yKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBfaGFuZGxlVXBkYXRlU3Vic2NyaXB0aW9uKHBhcnNlV2Vic29ja2V0OiBhbnksIHJlcXVlc3Q6IGFueSk6IGFueSB7XG4gICAgdGhpcy5faGFuZGxlVW5zdWJzY3JpYmUocGFyc2VXZWJzb2NrZXQsIHJlcXVlc3QsIGZhbHNlKTtcbiAgICB0aGlzLl9oYW5kbGVTdWJzY3JpYmUocGFyc2VXZWJzb2NrZXQsIHJlcXVlc3QpO1xuICB9XG5cbiAgX2hhbmRsZVVuc3Vic2NyaWJlKHBhcnNlV2Vic29ja2V0OiBhbnksIHJlcXVlc3Q6IGFueSwgbm90aWZ5Q2xpZW50OiBib29sZWFuID0gdHJ1ZSk6IGFueSB7XG4gICAgLy8gSWYgd2UgY2FuIG5vdCBmaW5kIHRoaXMgY2xpZW50LCByZXR1cm4gZXJyb3IgdG8gY2xpZW50XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFyc2VXZWJzb2NrZXQsICdjbGllbnRJZCcpKSB7XG4gICAgICBDbGllbnQucHVzaEVycm9yKFxuICAgICAgICBwYXJzZVdlYnNvY2tldCxcbiAgICAgICAgMixcbiAgICAgICAgJ0NhbiBub3QgZmluZCB0aGlzIGNsaWVudCwgbWFrZSBzdXJlIHlvdSBjb25uZWN0IHRvIHNlcnZlciBiZWZvcmUgdW5zdWJzY3JpYmluZydcbiAgICAgICk7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICdDYW4gbm90IGZpbmQgdGhpcyBjbGllbnQsIG1ha2Ugc3VyZSB5b3UgY29ubmVjdCB0byBzZXJ2ZXIgYmVmb3JlIHVuc3Vic2NyaWJpbmcnXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0SWQgPSByZXF1ZXN0LnJlcXVlc3RJZDtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmNsaWVudHMuZ2V0KHBhcnNlV2Vic29ja2V0LmNsaWVudElkKTtcbiAgICBpZiAodHlwZW9mIGNsaWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIENsaWVudC5wdXNoRXJyb3IoXG4gICAgICAgIHBhcnNlV2Vic29ja2V0LFxuICAgICAgICAyLFxuICAgICAgICAnQ2Fubm90IGZpbmQgY2xpZW50IHdpdGggY2xpZW50SWQgJyArXG4gICAgICAgICAgcGFyc2VXZWJzb2NrZXQuY2xpZW50SWQgK1xuICAgICAgICAgICcuIE1ha2Ugc3VyZSB5b3UgY29ubmVjdCB0byBsaXZlIHF1ZXJ5IHNlcnZlciBiZWZvcmUgdW5zdWJzY3JpYmluZy4nXG4gICAgICApO1xuICAgICAgbG9nZ2VyLmVycm9yKCdDYW4gbm90IGZpbmQgdGhpcyBjbGllbnQgJyArIHBhcnNlV2Vic29ja2V0LmNsaWVudElkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJzY3JpcHRpb25JbmZvID0gY2xpZW50LmdldFN1YnNjcmlwdGlvbkluZm8ocmVxdWVzdElkKTtcbiAgICBpZiAodHlwZW9mIHN1YnNjcmlwdGlvbkluZm8gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBDbGllbnQucHVzaEVycm9yKFxuICAgICAgICBwYXJzZVdlYnNvY2tldCxcbiAgICAgICAgMixcbiAgICAgICAgJ0Nhbm5vdCBmaW5kIHN1YnNjcmlwdGlvbiB3aXRoIGNsaWVudElkICcgK1xuICAgICAgICAgIHBhcnNlV2Vic29ja2V0LmNsaWVudElkICtcbiAgICAgICAgICAnIHN1YnNjcmlwdGlvbklkICcgK1xuICAgICAgICAgIHJlcXVlc3RJZCArXG4gICAgICAgICAgJy4gTWFrZSBzdXJlIHlvdSBzdWJzY3JpYmUgdG8gbGl2ZSBxdWVyeSBzZXJ2ZXIgYmVmb3JlIHVuc3Vic2NyaWJpbmcuJ1xuICAgICAgKTtcbiAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgJ0NhbiBub3QgZmluZCBzdWJzY3JpcHRpb24gd2l0aCBjbGllbnRJZCAnICtcbiAgICAgICAgICBwYXJzZVdlYnNvY2tldC5jbGllbnRJZCArXG4gICAgICAgICAgJyBzdWJzY3JpcHRpb25JZCAnICtcbiAgICAgICAgICByZXF1ZXN0SWRcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIHN1YnNjcmlwdGlvbiBmcm9tIGNsaWVudFxuICAgIGNsaWVudC5kZWxldGVTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3RJZCk7XG4gICAgLy8gUmVtb3ZlIGNsaWVudCBmcm9tIHN1YnNjcmlwdGlvblxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbkluZm8uc3Vic2NyaXB0aW9uO1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHN1YnNjcmlwdGlvbi5jbGFzc05hbWU7XG4gICAgc3Vic2NyaXB0aW9uLmRlbGV0ZUNsaWVudFN1YnNjcmlwdGlvbihwYXJzZVdlYnNvY2tldC5jbGllbnRJZCwgcmVxdWVzdElkKTtcbiAgICAvLyBJZiB0aGVyZSBpcyBubyBjbGllbnQgd2hpY2ggaXMgc3Vic2NyaWJpbmcgdGhpcyBzdWJzY3JpcHRpb24sIHJlbW92ZSBpdCBmcm9tIHN1YnNjcmlwdGlvbnNcbiAgICBjb25zdCBjbGFzc1N1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnMuZ2V0KGNsYXNzTmFtZSk7XG4gICAgaWYgKGNsYXNzU3Vic2NyaXB0aW9ucykge1xuICAgICAgaWYgKCFzdWJzY3JpcHRpb24uaGFzU3Vic2NyaWJpbmdDbGllbnQoKSkge1xuICAgICAgICBjbGFzc1N1YnNjcmlwdGlvbnMuZGVsZXRlKHN1YnNjcmlwdGlvbi5oYXNoKTtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHN1YnNjcmlwdGlvbnMgdW5kZXIgdGhpcyBjbGFzcywgcmVtb3ZlIGl0IGZyb20gc3Vic2NyaXB0aW9uc1xuICAgICAgaWYgKGNsYXNzU3Vic2NyaXB0aW9ucy5zaXplID09PSAwKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5kZWxldGUoY2xhc3NOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcnVuTGl2ZVF1ZXJ5RXZlbnRIYW5kbGVycyh7XG4gICAgICBjbGllbnQsXG4gICAgICBldmVudDogJ3Vuc3Vic2NyaWJlJyxcbiAgICAgIGNsaWVudHM6IHRoaXMuY2xpZW50cy5zaXplLFxuICAgICAgc3Vic2NyaXB0aW9uczogdGhpcy5zdWJzY3JpcHRpb25zLnNpemUsXG4gICAgICBzZXNzaW9uVG9rZW46IHN1YnNjcmlwdGlvbkluZm8uc2Vzc2lvblRva2VuLFxuICAgICAgdXNlTWFzdGVyS2V5OiBjbGllbnQuaGFzTWFzdGVyS2V5LFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IGNsaWVudC5pbnN0YWxsYXRpb25JZCxcbiAgICB9KTtcblxuICAgIGlmICghbm90aWZ5Q2xpZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2xpZW50LnB1c2hVbnN1YnNjcmliZShyZXF1ZXN0LnJlcXVlc3RJZCk7XG5cbiAgICBsb2dnZXIudmVyYm9zZShcbiAgICAgIGBEZWxldGUgY2xpZW50OiAke3BhcnNlV2Vic29ja2V0LmNsaWVudElkfSB8IHN1YnNjcmlwdGlvbjogJHtyZXF1ZXN0LnJlcXVlc3RJZH1gXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgeyBQYXJzZUxpdmVRdWVyeVNlcnZlciB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxHQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxhQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxPQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxxQkFBQSxHQUFBSixPQUFBO0FBRUEsSUFBQUssT0FBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sY0FBQSxHQUFBUCxzQkFBQSxDQUFBQyxP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QztNQUNEO0lBQ0Y7O0lBRUE7SUFDQS9DLE1BQU0sQ0FBQ3VQLHNCQUFzQixDQUFDeE0sU0FBUyxDQUFDO0lBQ3hDO0lBQ0EsTUFBTVQsWUFBWSxHQUFHNEUsZ0JBQWdCLENBQUM1RSxZQUFZO0lBQ2xELE1BQU1aLFNBQVMsR0FBR1ksWUFBWSxDQUFDWixTQUFTO0lBQ3hDWSxZQUFZLENBQUM4RSx3QkFBd0IsQ0FBQ2xJLGNBQWMsQ0FBQ3VELFFBQVEsRUFBRU0sU0FBUyxDQUFDO0lBQ3pFO0lBQ0EsTUFBTVosa0JBQWtCLEdBQUcsSUFBSSxDQUFDMUUsYUFBYSxDQUFDMkUsR0FBRyxDQUFDVixTQUFTLENBQUM7SUFDNUQsSUFBSVMsa0JBQWtCLEVBQUU7TUFDdEIsSUFBSSxDQUFDRyxZQUFZLENBQUMrRSxvQkFBb0IsQ0FBQyxDQUFDLEVBQUU7UUFDeENsRixrQkFBa0IsQ0FBQzhFLE1BQU0sQ0FBQzNFLFlBQVksQ0FBQ3FELElBQUksQ0FBQztNQUM5QztNQUNBO01BQ0EsSUFBSXhELGtCQUFrQixDQUFDRCxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ2pDLElBQUksQ0FBQ3pFLGFBQWEsQ0FBQ3dKLE1BQU0sQ0FBQ3ZGLFNBQVMsQ0FBQztNQUN0QztJQUNGO0lBQ0EsSUFBQXNGLG1DQUF5QixFQUFDO01BQ3hCaEgsTUFBTTtNQUNONEQsS0FBSyxFQUFFLGFBQWE7TUFDcEJyRyxPQUFPLEVBQUUsSUFBSSxDQUFDQSxPQUFPLENBQUMyRSxJQUFJO01BQzFCekUsYUFBYSxFQUFFLElBQUksQ0FBQ0EsYUFBYSxDQUFDeUUsSUFBSTtNQUN0QzJCLFlBQVksRUFBRXFELGdCQUFnQixDQUFDckQsWUFBWTtNQUMzQ0UsWUFBWSxFQUFFL0QsTUFBTSxDQUFDZ0UsWUFBWTtNQUNqQ0MsY0FBYyxFQUFFakUsTUFBTSxDQUFDaUU7SUFDekIsQ0FBQyxDQUFDO0lBRUYsSUFBSSxDQUFDcUwsWUFBWSxFQUFFO01BQ2pCO0lBQ0Y7SUFFQXRQLE1BQU0sQ0FBQ3dQLGVBQWUsQ0FBQ2xKLE9BQU8sQ0FBQ3ZELFNBQVMsQ0FBQztJQUV6QzVFLGVBQU0sQ0FBQ0MsT0FBTyxDQUNaLGtCQUFrQmMsY0FBYyxDQUFDdUQsUUFBUSxvQkFBb0I2RCxPQUFPLENBQUN2RCxTQUFTLEVBQ2hGLENBQUM7RUFDSDtBQUNGO0FBQUMwTSxPQUFBLENBQUF2UyxvQkFBQSxHQUFBQSxvQkFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
1226
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHYiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9ub2RlIiwiX1N1YnNjcmlwdGlvbiIsIl9DbGllbnQiLCJfUGFyc2VXZWJTb2NrZXRTZXJ2ZXIiLCJfbG9nZ2VyIiwiX1JlcXVlc3RTY2hlbWEiLCJfUXVlcnlUb29scyIsIl9QYXJzZVB1YlN1YiIsIl9TY2hlbWFDb250cm9sbGVyIiwiX2xvZGFzaCIsIl9jcnlwdG8iLCJfdHJpZ2dlcnMiLCJfQXV0aCIsIl9Db250cm9sbGVycyIsIl9Db25maWciLCJfbHJ1Q2FjaGUiLCJfVXNlcnNSb3V0ZXIiLCJfRGF0YWJhc2VDb250cm9sbGVyIiwiX3V0aWwiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJQYXJzZUxpdmVRdWVyeVNlcnZlciIsImNvbnN0cnVjdG9yIiwic2VydmVyIiwiY29uZmlnIiwicGFyc2VTZXJ2ZXJDb25maWciLCJjbGllbnRzIiwiTWFwIiwic3Vic2NyaXB0aW9ucyIsImFwcElkIiwiUGFyc2UiLCJhcHBsaWNhdGlvbklkIiwibWFzdGVyS2V5Iiwia2V5UGFpcnMiLCJrZXkiLCJPYmplY3QiLCJrZXlzIiwic2V0IiwibG9nZ2VyIiwidmVyYm9zZSIsImRpc2FibGVTaW5nbGVJbnN0YW5jZSIsInNlcnZlclVSTCIsImluaXRpYWxpemUiLCJqYXZhU2NyaXB0S2V5IiwiY2FjaGVDb250cm9sbGVyIiwiZ2V0Q2FjaGVDb250cm9sbGVyIiwiY2FjaGVUaW1lb3V0IiwiYXV0aENhY2hlIiwiTFJVIiwibWF4IiwidHRsIiwicGFyc2VXZWJTb2NrZXRTZXJ2ZXIiLCJQYXJzZVdlYlNvY2tldFNlcnZlciIsInBhcnNlV2Vic29ja2V0IiwiX29uQ29ubmVjdCIsInN1YnNjcmliZXIiLCJQYXJzZVB1YlN1YiIsImNyZWF0ZVN1YnNjcmliZXIiLCJjb25uZWN0IiwiaXNPcGVuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJfY3JlYXRlU3Vic2NyaWJlcnMiLCJzaHV0ZG93biIsImFsbCIsInZhbHVlcyIsIm1hcCIsImNsaWVudCIsInBhcnNlV2ViU29ja2V0Iiwid3MiLCJjbG9zZSIsIkFycmF5IiwiZnJvbSIsInVuc3Vic2NyaWJlIiwiZXJyIiwiZXJyb3IiLCJtZXNzYWdlUmVjaWV2ZWQiLCJjaGFubmVsIiwibWVzc2FnZVN0ciIsIm1lc3NhZ2UiLCJKU09OIiwicGFyc2UiLCJfY2xlYXJDYWNoZWRSb2xlcyIsInVzZXJJZCIsIl9pbmZsYXRlUGFyc2VPYmplY3QiLCJfb25BZnRlclNhdmUiLCJfb25BZnRlckRlbGV0ZSIsIm9uIiwiZmllbGQiLCJzdWJzY3JpYmUiLCJjdXJyZW50UGFyc2VPYmplY3QiLCJVc2VyUm91dGVyIiwicmVtb3ZlSGlkZGVuUHJvcGVydGllcyIsImNsYXNzTmFtZSIsInBhcnNlT2JqZWN0IiwiX2ZpbmlzaEZldGNoIiwib3JpZ2luYWxQYXJzZU9iamVjdCIsImRlbGV0ZWRQYXJzZU9iamVjdCIsInRvSlNPTiIsImNsYXNzTGV2ZWxQZXJtaXNzaW9ucyIsImlkIiwic2l6ZSIsImNsYXNzU3Vic2NyaXB0aW9ucyIsImdldCIsImRlYnVnIiwic3Vic2NyaXB0aW9uIiwiaXNTdWJzY3JpcHRpb25NYXRjaGVkIiwiX21hdGNoZXNTdWJzY3JpcHRpb24iLCJjbGllbnRJZCIsInJlcXVlc3RJZHMiLCJfIiwiZW50cmllcyIsImNsaWVudFJlcXVlc3RJZHMiLCJmb3JFYWNoIiwicmVxdWVzdElkIiwibG9jYWxEZWxldGVkUGFyc2VPYmplY3QiLCJzdHJpbmdpZnkiLCJhY2wiLCJnZXRBQ0wiLCJvcCIsIl9nZXRDTFBPcGVyYXRpb24iLCJxdWVyeSIsInJlcyIsIm1hdGNoZXNDTFAiLCJfbWF0Y2hlc0NMUCIsImlzTWF0Y2hlZCIsIl9tYXRjaGVzQUNMIiwiZXZlbnQiLCJzZXNzaW9uVG9rZW4iLCJvYmplY3QiLCJ1c2VNYXN0ZXJLZXkiLCJoYXNNYXN0ZXJLZXkiLCJpbnN0YWxsYXRpb25JZCIsInNlbmRFdmVudCIsInRyaWdnZXIiLCJnZXRUcmlnZ2VyIiwiYXV0aCIsImdldEF1dGhGcm9tQ2xpZW50IiwidXNlciIsImZyb21KU09OIiwicnVuVHJpZ2dlciIsInRvSlNPTndpdGhPYmplY3RzIiwiX2ZpbHRlclNlbnNpdGl2ZURhdGEiLCJwdXNoRGVsZXRlIiwicmVzb2x2ZUVycm9yIiwiQ2xpZW50IiwicHVzaEVycm9yIiwiY29kZSIsImlzT3JpZ2luYWxTdWJzY3JpcHRpb25NYXRjaGVkIiwiaXNDdXJyZW50U3Vic2NyaXB0aW9uTWF0Y2hlZCIsImxvY2FsQ3VycmVudFBhcnNlT2JqZWN0IiwibG9jYWxPcmlnaW5hbFBhcnNlT2JqZWN0Iiwib3JpZ2luYWxBQ0xDaGVja2luZ1Byb21pc2UiLCJvcmlnaW5hbEFDTCIsImN1cnJlbnRBQ0xDaGVja2luZ1Byb21pc2UiLCJjdXJyZW50QUNMIiwiaXNPcmlnaW5hbE1hdGNoZWQiLCJpc0N1cnJlbnRNYXRjaGVkIiwiaGFzaCIsInR5cGUiLCJ3YXRjaEZpZWxkc0NoYW5nZWQiLCJfY2hlY2tXYXRjaEZpZWxkcyIsImN1cnJlbnRSZWFkYWJsZSIsIm9yaWdpbmFsUmVhZGFibGUiLCJvcmlnaW5hbCIsImZ1bmN0aW9uTmFtZSIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJyZXF1ZXN0IiwidHY0IiwidmFsaWRhdGUiLCJSZXF1ZXN0U2NoZW1hIiwiX2hhbmRsZUNvbm5lY3QiLCJfaGFuZGxlU3Vic2NyaWJlIiwiX2hhbmRsZVVwZGF0ZVN1YnNjcmlwdGlvbiIsIl9oYW5kbGVVbnN1YnNjcmliZSIsImluZm8iLCJoYXMiLCJydW5MaXZlUXVlcnlFdmVudEhhbmRsZXJzIiwiZGVsZXRlIiwic3Vic2NyaXB0aW9uSW5mbyIsInN1YnNjcmlwdGlvbkluZm9zIiwiZGVsZXRlQ2xpZW50U3Vic2NyaXB0aW9uIiwiaGFzU3Vic2NyaWJpbmdDbGllbnQiLCJfdmFsaWRhdGVRdWVyeUNvbnN0cmFpbnRzIiwid2hlcmUiLCJ1bmRlZmluZWQiLCJpc0FycmF5IiwiRXJyb3IiLCJJTlZBTElEX1FVRVJZIiwic3ViUXVlcnkiLCJjb25zdHJhaW50IiwiJHJlZ2V4IiwicmVnZXgiLCJpc1JlZ0V4cExpa2UiLCJzb3VyY2UiLCJmbGFncyIsInBhdHRlcm4iLCIkb3B0aW9ucyIsIlJlZ0V4cCIsIm1hdGNoZXNRdWVyeSIsInN0cnVjdHVyZWRDbG9uZSIsInZhbGlkVG9rZW5zIiwiUXVlcnkiLCJTZXNzaW9uIiwiZXF1YWxUbyIsIlVzZXIiLCJjcmVhdGVXaXRob3V0RGF0YSIsImZpbmQiLCJ0b2tlbiIsImF1dGhQcm9taXNlIiwiYXV0aDEiLCJhdXRoMiIsImdldEF1dGhGb3JTZXNzaW9uVG9rZW4iLCJjbGVhclJvbGVDYWNoZSIsImZyb21DYWNoZSIsInRoZW4iLCJjYXRjaCIsInJlc3VsdCIsIklOVkFMSURfU0VTU0lPTl9UT0tFTiIsImdldFN1YnNjcmlwdGlvbkluZm8iLCJhY2xHcm91cCIsInB1c2giLCJhcHBDb25maWciLCJDb25maWciLCJfcm9sZXNGb3JDTFBPcGVyYXRpb24iLCJTY2hlbWFDb250cm9sbGVyIiwidmFsaWRhdGVQZXJtaXNzaW9uIiwicGVybWlzc2lvbkZpZWxkIiwiaW5kZXhPZiIsInBvaW50ZXJGaWVsZHMiLCJpbmNsdWRlcyIsImxlbmd0aCIsInRlc3RQZXJtaXNzaW9ucyIsImhhc0FjY2VzcyIsInNvbWUiLCJ2YWx1ZSIsIm9iamVjdElkIiwiaXRlbSIsIl9sb2FkUm9sZXNGb3JQcm90ZWN0ZWRGaWVsZHMiLCJjbGllbnRBdXRoIiwiZ2V0VXNlclJvbGVzIiwicHJvdGVjdGVkRmllbGRzIiwic3RhcnRzV2l0aCIsImVuYWJsZUxpdmVRdWVyeUNsYXNzTGV2ZWxQZXJtaXNzaW9uUm9sZXMiLCJvcFBlcm1pc3Npb25zIiwic2NoZW1hIiwiZ2V0Q2xhc3NMZXZlbFBlcm1pc3Npb25zIiwiZmlsdGVyIiwib2JqIiwiZ2V0RGF0YWJhc2VDb250cm9sbGVyIiwiYWRkUHJvdGVjdGVkRmllbGRzIiwiRGF0YWJhc2VDb250cm9sbGVyIiwiZmlsdGVyU2Vuc2l0aXZlRGF0YSIsInByb3RlY3RlZEZpZWxkc093bmVyRXhlbXB0IiwiX3ZlcmlmeUFDTCIsImlzU3Vic2NyaXB0aW9uU2Vzc2lvblRva2VuTWF0Y2hlZCIsImdldFJlYWRBY2Nlc3MiLCJhY2xfaGFzX3JvbGVzIiwicGVybWlzc2lvbnNCeUlkIiwicm9sZU5hbWVzIiwicm9sZSIsImdldFNlc3Npb25Gcm9tQ2xpZW50Iiwid2F0Y2giLCJpc0RlZXBTdHJpY3RFcXVhbCIsImdldFB1YmxpY1JlYWRBY2Nlc3MiLCJzdWJzY3JpcHRpb25Ub2tlbiIsImNsaWVudFNlc3Npb25Ub2tlbiIsIl92YWxpZGF0ZUtleXMiLCJfaGFzTWFzdGVyS2V5IiwicmFuZG9tVVVJRCIsInJlcSIsInB1c2hDb25uZWN0IiwidmFsaWRLZXlQYWlycyIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImlzVmFsaWQiLCJzZWNyZXQiLCJhdXRoQ2FsbGVkIiwicGFyc2VRdWVyeSIsIndpdGhKU09OIiwidG9Qb2ludGVyIiwibWFzdGVyIiwicmMiLCJyZXF1ZXN0Q29tcGxleGl0eSIsInF1ZXJ5RGVwdGgiLCJtYXhEZXB0aCIsImNoZWNrRGVwdGgiLCJub2RlIiwiZGVwdGgiLCJpc0xvZ2ljYWwiLCJhbGxvd1JlZ2V4IiwiY2hlY2tSZWdleCIsInNjaGVtYUNvbnRyb2xsZXIiLCJkYXRhYmFzZSIsImxvYWRTY2hlbWEiLCJ1c2VyUm9sZXMiLCJjaGVja1doZXJlIiwid2hlcmVLZXkiLCJyb290RmllbGQiLCJzcGxpdCIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJ3YXRjaEZpZWxkIiwicHJldmlvdXNTdWJzY3JpcHRpb25JbmZvIiwicHJldmlvdXNTdWJzY3JpcHRpb24iLCJwcmV2aW91c0NsYXNzU3Vic2NyaXB0aW9ucyIsInN1YnNjcmlwdGlvbkhhc2giLCJxdWVyeUhhc2giLCJTdWJzY3JpcHRpb24iLCJhZGRTdWJzY3JpcHRpb25JbmZvIiwiYWRkQ2xpZW50U3Vic2NyaXB0aW9uIiwicHVzaFN1YnNjcmliZSIsIm5vdGlmeUNsaWVudCIsImRlbGV0ZVN1YnNjcmlwdGlvbkluZm8iLCJwdXNoVW5zdWJzY3JpYmUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0xpdmVRdWVyeS9QYXJzZUxpdmVRdWVyeVNlcnZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHY0IGZyb20gJ3R2NCc7XG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICcuL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBDbGllbnQgfSBmcm9tICcuL0NsaWVudCc7XG5pbXBvcnQgeyBQYXJzZVdlYlNvY2tldFNlcnZlciB9IGZyb20gJy4vUGFyc2VXZWJTb2NrZXRTZXJ2ZXInO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IFJlcXVlc3RTY2hlbWEgZnJvbSAnLi9SZXF1ZXN0U2NoZW1hJztcbmltcG9ydCB7IG1hdGNoZXNRdWVyeSwgcXVlcnlIYXNoIH0gZnJvbSAnLi9RdWVyeVRvb2xzJztcbmltcG9ydCB7IFBhcnNlUHViU3ViIH0gZnJvbSAnLi9QYXJzZVB1YlN1Yic7XG5pbXBvcnQgU2NoZW1hQ29udHJvbGxlciBmcm9tICcuLi9Db250cm9sbGVycy9TY2hlbWFDb250cm9sbGVyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7XG4gIHJ1bkxpdmVRdWVyeUV2ZW50SGFuZGxlcnMsXG4gIGdldFRyaWdnZXIsXG4gIHJ1blRyaWdnZXIsXG4gIHJlc29sdmVFcnJvcixcbiAgdG9KU09Od2l0aE9iamVjdHMsXG59IGZyb20gJy4uL3RyaWdnZXJzJztcbmltcG9ydCB7IGdldEF1dGhGb3JTZXNzaW9uVG9rZW4sIEF1dGggfSBmcm9tICcuLi9BdXRoJztcbmltcG9ydCB7IGdldENhY2hlQ29udHJvbGxlciwgZ2V0RGF0YWJhc2VDb250cm9sbGVyIH0gZnJvbSAnLi4vQ29udHJvbGxlcnMnO1xuaW1wb3J0IENvbmZpZyBmcm9tICcuLi9Db25maWcnO1xuaW1wb3J0IHsgTFJVQ2FjaGUgYXMgTFJVIH0gZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCBVc2VyUm91dGVyIGZyb20gJy4uL1JvdXRlcnMvVXNlcnNSb3V0ZXInO1xuaW1wb3J0IERhdGFiYXNlQ29udHJvbGxlciBmcm9tICcuLi9Db250cm9sbGVycy9EYXRhYmFzZUNvbnRyb2xsZXInO1xuaW1wb3J0IHsgaXNEZWVwU3RyaWN0RXF1YWwgfSBmcm9tICd1dGlsJztcblxuXG5jbGFzcyBQYXJzZUxpdmVRdWVyeVNlcnZlciB7XG4gIHNlcnZlcjogYW55O1xuICBjb25maWc6IGFueTtcbiAgY2xpZW50czogTWFwPHN0cmluZywgYW55PjtcbiAgLy8gY2xhc3NOYW1lIC0+IChxdWVyeUhhc2ggLT4gc3Vic2NyaXB0aW9uKVxuICBzdWJzY3JpcHRpb25zOiBNYXA8c3RyaW5nLCBhbnk+O1xuICBwYXJzZVdlYlNvY2tldFNlcnZlcjogYW55O1xuICBrZXlQYWlyczogYW55O1xuICAvLyBUaGUgc3Vic2NyaWJlciB3ZSB1c2UgdG8gZ2V0IG9iamVjdCB1cGRhdGUgZnJvbSBwdWJsaXNoZXJcbiAgc3Vic2NyaWJlcjogYW55O1xuICBhdXRoQ2FjaGU6IGFueTtcbiAgY2FjaGVDb250cm9sbGVyOiBhbnk7XG5cbiAgY29uc3RydWN0b3Ioc2VydmVyOiBhbnksIGNvbmZpZzogYW55ID0ge30sIHBhcnNlU2VydmVyQ29uZmlnOiBhbnkgPSB7fSkge1xuICAgIHRoaXMuc2VydmVyID0gc2VydmVyO1xuICAgIHRoaXMuY2xpZW50cyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG5cbiAgICBjb25maWcuYXBwSWQgPSBjb25maWcuYXBwSWQgfHwgUGFyc2UuYXBwbGljYXRpb25JZDtcbiAgICBjb25maWcubWFzdGVyS2V5ID0gY29uZmlnLm1hc3RlcktleSB8fCBQYXJzZS5tYXN0ZXJLZXk7XG5cbiAgICAvLyBTdG9yZSBrZXlzLCBjb252ZXJ0IG9iaiB0byBtYXBcbiAgICBjb25zdCBrZXlQYWlycyA9IGNvbmZpZy5rZXlQYWlycyB8fCB7fTtcbiAgICB0aGlzLmtleVBhaXJzID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGtleVBhaXJzKSkge1xuICAgICAgdGhpcy5rZXlQYWlycy5zZXQoa2V5LCBrZXlQYWlyc1trZXldKTtcbiAgICB9XG4gICAgbG9nZ2VyLnZlcmJvc2UoJ1N1cHBvcnQga2V5IHBhaXJzJywgdGhpcy5rZXlQYWlycyk7XG5cbiAgICAvLyBJbml0aWFsaXplIFBhcnNlXG4gICAgUGFyc2UuT2JqZWN0LmRpc2FibGVTaW5nbGVJbnN0YW5jZSgpO1xuICAgIGNvbnN0IHNlcnZlclVSTCA9IGNvbmZpZy5zZXJ2ZXJVUkwgfHwgUGFyc2Uuc2VydmVyVVJMO1xuICAgIFBhcnNlLnNlcnZlclVSTCA9IHNlcnZlclVSTDtcbiAgICBQYXJzZS5pbml0aWFsaXplKGNvbmZpZy5hcHBJZCwgUGFyc2UuamF2YVNjcmlwdEtleSwgY29uZmlnLm1hc3RlcktleSk7XG5cbiAgICAvLyBUaGUgY2FjaGUgY29udHJvbGxlciBpcyBhIHByb3BlciBjYWNoZSBjb250cm9sbGVyXG4gICAgLy8gd2l0aCBhY2Nlc3MgdG8gVXNlciBhbmQgUm9sZXNcbiAgICB0aGlzLmNhY2hlQ29udHJvbGxlciA9IGdldENhY2hlQ29udHJvbGxlcihwYXJzZVNlcnZlckNvbmZpZyk7XG5cbiAgICBjb25maWcuY2FjaGVUaW1lb3V0ID0gY29uZmlnLmNhY2hlVGltZW91dCB8fCA1ICogMTAwMDsgLy8gNXNcblxuICAgIC8vIFRoaXMgYXV0aCBjYWNoZSBzdG9yZXMgdGhlIHByb21pc2VzIGZvciBlYWNoIGF1dGggcmVzb2x1dGlvbi5cbiAgICAvLyBUaGUgbWFpbiBiZW5lZml0IGlzIHRvIGJlIGFibGUgdG8gcmV1c2UgdGhlIHNhbWUgdXNlciAvIHNlc3Npb24gdG9rZW4gcmVzb2x1dGlvbi5cbiAgICB0aGlzLmF1dGhDYWNoZSA9IG5ldyBMUlUoe1xuICAgICAgbWF4OiA1MDAsIC8vIDUwMCBjb25jdXJyZW50XG4gICAgICB0dGw6IGNvbmZpZy5jYWNoZVRpbWVvdXQsXG4gICAgfSk7XG4gICAgLy8gSW5pdGlhbGl6ZSB3ZWJzb2NrZXQgc2VydmVyXG4gICAgdGhpcy5wYXJzZVdlYlNvY2tldFNlcnZlciA9IG5ldyBQYXJzZVdlYlNvY2tldFNlcnZlcihcbiAgICAgIHNlcnZlcixcbiAgICAgIHBhcnNlV2Vic29ja2V0ID0+IHRoaXMuX29uQ29ubmVjdChwYXJzZVdlYnNvY2tldCksXG4gICAgICBjb25maWdcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaWJlciA9IFBhcnNlUHViU3ViLmNyZWF0ZVN1YnNjcmliZXIoY29uZmlnKTtcbiAgICBpZiAoIXRoaXMuc3Vic2NyaWJlci5jb25uZWN0KSB7XG4gICAgICB0aGlzLmNvbm5lY3QoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjb25uZWN0KCkge1xuICAgIGlmICh0aGlzLnN1YnNjcmliZXIuaXNPcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGhpcy5zdWJzY3JpYmVyLmNvbm5lY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSh0aGlzLnN1YnNjcmliZXIuY29ubmVjdCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdWJzY3JpYmVyLmlzT3BlbiA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuX2NyZWF0ZVN1YnNjcmliZXJzKCk7XG4gIH1cblxuICBhc3luYyBzaHV0ZG93bigpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpYmVyLmlzT3Blbikge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAuLi5bLi4udGhpcy5jbGllbnRzLnZhbHVlcygpXS5tYXAoY2xpZW50ID0+IGNsaWVudC5wYXJzZVdlYlNvY2tldC53cy5jbG9zZSgpKSxcbiAgICAgICAgdGhpcy5wYXJzZVdlYlNvY2tldFNlcnZlci5jbG9zZT8uKCksXG4gICAgICAgIC4uLkFycmF5LmZyb20odGhpcy5zdWJzY3JpYmVyLnN1YnNjcmlwdGlvbnM/LmtleXMoKSB8fCBbXSkubWFwKGtleSA9PlxuICAgICAgICAgIHRoaXMuc3Vic2NyaWJlci51bnN1YnNjcmliZShrZXkpXG4gICAgICAgICksXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlci5jbG9zZT8uKCksXG4gICAgICBdKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0aGlzLnN1YnNjcmliZXIuY2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3Vic2NyaWJlci5jbG9zZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignUHViU3ViQWRhcHRlciBlcnJvciBvbiBzaHV0ZG93bicsIHsgZXJyb3I6IGVyciB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdWJzY3JpYmVyLmlzT3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIF9jcmVhdGVTdWJzY3JpYmVycygpIHtcbiAgICBjb25zdCBtZXNzYWdlUmVjaWV2ZWQgPSAoY2hhbm5lbCwgbWVzc2FnZVN0cikgPT4ge1xuICAgICAgbG9nZ2VyLnZlcmJvc2UoJ1N1YnNjcmliZSBtZXNzYWdlICVqJywgbWVzc2FnZVN0cik7XG4gICAgICBsZXQgbWVzc2FnZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1lc3NhZ2UgPSBKU09OLnBhcnNlKG1lc3NhZ2VTdHIpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ3VuYWJsZSB0byBwYXJzZSBtZXNzYWdlJywgbWVzc2FnZVN0ciwgZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFubmVsID09PSBQYXJzZS5hcHBsaWNhdGlvbklkICsgJ2NsZWFyQ2FjaGUnKSB7XG4gICAgICAgIHRoaXMuX2NsZWFyQ2FjaGVkUm9sZXMobWVzc2FnZS51c2VySWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9pbmZsYXRlUGFyc2VPYmplY3QobWVzc2FnZSk7XG4gICAgICBpZiAoY2hhbm5lbCA9PT0gUGFyc2UuYXBwbGljYXRpb25JZCArICdhZnRlclNhdmUnKSB7XG4gICAgICAgIHRoaXMuX29uQWZ0ZXJTYXZlKG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIGlmIChjaGFubmVsID09PSBQYXJzZS5hcHBsaWNhdGlvbklkICsgJ2FmdGVyRGVsZXRlJykge1xuICAgICAgICB0aGlzLl9vbkFmdGVyRGVsZXRlKG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdHZXQgbWVzc2FnZSAlcyBmcm9tIHVua25vd24gY2hhbm5lbCAlaicsIG1lc3NhZ2UsIGNoYW5uZWwpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5zdWJzY3JpYmVyLm9uKCdtZXNzYWdlJywgKGNoYW5uZWwsIG1lc3NhZ2VTdHIpID0+IG1lc3NhZ2VSZWNpZXZlZChjaGFubmVsLCBtZXNzYWdlU3RyKSk7XG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBbJ2FmdGVyU2F2ZScsICdhZnRlckRlbGV0ZScsICdjbGVhckNhY2hlJ10pIHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSBgJHtQYXJzZS5hcHBsaWNhdGlvbklkfSR7ZmllbGR9YDtcbiAgICAgIHRoaXMuc3Vic2NyaWJlci5zdWJzY3JpYmUoY2hhbm5lbCwgbWVzc2FnZVN0ciA9PiBtZXNzYWdlUmVjaWV2ZWQoY2hhbm5lbCwgbWVzc2FnZVN0cikpO1xuICAgIH1cbiAgfVxuXG4gIC8vIE1lc3NhZ2UgaXMgdGhlIEpTT04gb2JqZWN0IGZyb20gcHVibGlzaGVyLiBNZXNzYWdlLmN1cnJlbnRQYXJzZU9iamVjdCBpcyB0aGUgUGFyc2VPYmplY3QgSlNPTiBhZnRlciBjaGFuZ2VzLlxuICAvLyBNZXNzYWdlLm9yaWdpbmFsUGFyc2VPYmplY3QgaXMgdGhlIG9yaWdpbmFsIFBhcnNlT2JqZWN0IEpTT04uXG4gIF9pbmZsYXRlUGFyc2VPYmplY3QobWVzc2FnZTogYW55KTogdm9pZCB7XG4gICAgLy8gSW5mbGF0ZSBtZXJnZWQgb2JqZWN0XG4gICAgY29uc3QgY3VycmVudFBhcnNlT2JqZWN0ID0gbWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3Q7XG4gICAgVXNlclJvdXRlci5yZW1vdmVIaWRkZW5Qcm9wZXJ0aWVzKGN1cnJlbnRQYXJzZU9iamVjdCk7XG4gICAgbGV0IGNsYXNzTmFtZSA9IGN1cnJlbnRQYXJzZU9iamVjdC5jbGFzc05hbWU7XG4gICAgbGV0IHBhcnNlT2JqZWN0ID0gbmV3IFBhcnNlLk9iamVjdChjbGFzc05hbWUpO1xuICAgIHBhcnNlT2JqZWN0Ll9maW5pc2hGZXRjaChjdXJyZW50UGFyc2VPYmplY3QpO1xuICAgIG1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0ID0gcGFyc2VPYmplY3Q7XG4gICAgLy8gSW5mbGF0ZSBvcmlnaW5hbCBvYmplY3RcbiAgICBjb25zdCBvcmlnaW5hbFBhcnNlT2JqZWN0ID0gbWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0O1xuICAgIGlmIChvcmlnaW5hbFBhcnNlT2JqZWN0KSB7XG4gICAgICBVc2VyUm91dGVyLnJlbW92ZUhpZGRlblByb3BlcnRpZXMob3JpZ2luYWxQYXJzZU9iamVjdCk7XG4gICAgICBjbGFzc05hbWUgPSBvcmlnaW5hbFBhcnNlT2JqZWN0LmNsYXNzTmFtZTtcbiAgICAgIHBhcnNlT2JqZWN0ID0gbmV3IFBhcnNlLk9iamVjdChjbGFzc05hbWUpO1xuICAgICAgcGFyc2VPYmplY3QuX2ZpbmlzaEZldGNoKG9yaWdpbmFsUGFyc2VPYmplY3QpO1xuICAgICAgbWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0ID0gcGFyc2VPYmplY3Q7XG4gICAgfVxuICB9XG5cbiAgLy8gTWVzc2FnZSBpcyB0aGUgSlNPTiBvYmplY3QgZnJvbSBwdWJsaXNoZXIgYWZ0ZXIgaW5mbGF0ZWQuIE1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0IGlzIHRoZSBQYXJzZU9iamVjdCBhZnRlciBjaGFuZ2VzLlxuICAvLyBNZXNzYWdlLm9yaWdpbmFsUGFyc2VPYmplY3QgaXMgdGhlIG9yaWdpbmFsIFBhcnNlT2JqZWN0LlxuICBhc3luYyBfb25BZnRlckRlbGV0ZShtZXNzYWdlOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2dnZXIudmVyYm9zZShQYXJzZS5hcHBsaWNhdGlvbklkICsgJ2FmdGVyRGVsZXRlIGlzIHRyaWdnZXJlZCcpO1xuXG4gICAgbGV0IGRlbGV0ZWRQYXJzZU9iamVjdCA9IG1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0LnRvSlNPTigpO1xuICAgIGNvbnN0IGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyA9IG1lc3NhZ2UuY2xhc3NMZXZlbFBlcm1pc3Npb25zO1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IGRlbGV0ZWRQYXJzZU9iamVjdC5jbGFzc05hbWU7XG4gICAgbG9nZ2VyLnZlcmJvc2UoJ0NsYXNzTmFtZTogJWogfCBPYmplY3RJZDogJXMnLCBjbGFzc05hbWUsIGRlbGV0ZWRQYXJzZU9iamVjdC5pZCk7XG4gICAgbG9nZ2VyLnZlcmJvc2UoJ0N1cnJlbnQgY2xpZW50IG51bWJlciA6ICVkJywgdGhpcy5jbGllbnRzLnNpemUpO1xuXG4gICAgY29uc3QgY2xhc3NTdWJzY3JpcHRpb25zID0gdGhpcy5zdWJzY3JpcHRpb25zLmdldChjbGFzc05hbWUpO1xuICAgIGlmICh0eXBlb2YgY2xhc3NTdWJzY3JpcHRpb25zID09PSAndW5kZWZpbmVkJykge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdDYW4gbm90IGZpbmQgc3Vic2NyaXB0aW9ucyB1bmRlciB0aGlzIGNsYXNzICcgKyBjbGFzc05hbWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIGNsYXNzU3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkge1xuICAgICAgbGV0IGlzU3Vic2NyaXB0aW9uTWF0Y2hlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlzU3Vic2NyaXB0aW9uTWF0Y2hlZCA9IHRoaXMuX21hdGNoZXNTdWJzY3JpcHRpb24oZGVsZXRlZFBhcnNlT2JqZWN0LCBzdWJzY3JpcHRpb24pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCBtYXRjaGluZyBzdWJzY3JpcHRpb24gZm9yIGNsYXNzICR7Y2xhc3NOYW1lfTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1N1YnNjcmlwdGlvbk1hdGNoZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtjbGllbnRJZCwgcmVxdWVzdElkc10gb2YgXy5lbnRyaWVzKHN1YnNjcmlwdGlvbi5jbGllbnRSZXF1ZXN0SWRzKSkge1xuICAgICAgICBjb25zdCBjbGllbnQgPSB0aGlzLmNsaWVudHMuZ2V0KGNsaWVudElkKTtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGllbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdElkcy5mb3JFYWNoKGFzeW5jIHJlcXVlc3RJZCA9PiB7XG4gICAgICAgICAgLy8gRGVlcC1jbG9uZSBzaGFyZWQgb2JqZWN0IHNvIGVhY2ggY29uY3VycmVudCBjYWxsYmFjayB3b3JrcyBvbiBpdHMgb3duIGNvcHlcbiAgICAgICAgICBsZXQgbG9jYWxEZWxldGVkUGFyc2VPYmplY3QgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRlbGV0ZWRQYXJzZU9iamVjdCkpO1xuICAgICAgICAgIGNvbnN0IGFjbCA9IG1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0LmdldEFDTCgpO1xuICAgICAgICAgIC8vIENoZWNrIENMUFxuICAgICAgICAgIGNvbnN0IG9wID0gdGhpcy5fZ2V0Q0xQT3BlcmF0aW9uKHN1YnNjcmlwdGlvbi5xdWVyeSk7XG4gICAgICAgICAgbGV0IHJlczogYW55ID0ge307XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZXNDTFAgPSBhd2FpdCB0aGlzLl9tYXRjaGVzQ0xQKFxuICAgICAgICAgICAgICBjbGFzc0xldmVsUGVybWlzc2lvbnMsXG4gICAgICAgICAgICAgIG1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0LFxuICAgICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgb3BcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAobWF0Y2hlc0NMUCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpc01hdGNoZWQgPSBhd2FpdCB0aGlzLl9tYXRjaGVzQUNMKGFjbCwgY2xpZW50LCByZXF1ZXN0SWQpO1xuICAgICAgICAgICAgaWYgKCFpc01hdGNoZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXMgPSB7XG4gICAgICAgICAgICAgIGV2ZW50OiAnZGVsZXRlJyxcbiAgICAgICAgICAgICAgc2Vzc2lvblRva2VuOiBjbGllbnQuc2Vzc2lvblRva2VuLFxuICAgICAgICAgICAgICBvYmplY3Q6IGxvY2FsRGVsZXRlZFBhcnNlT2JqZWN0LFxuICAgICAgICAgICAgICBjbGllbnRzOiB0aGlzLmNsaWVudHMuc2l6ZSxcbiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uczogdGhpcy5zdWJzY3JpcHRpb25zLnNpemUsXG4gICAgICAgICAgICAgIHVzZU1hc3RlcktleTogY2xpZW50Lmhhc01hc3RlcktleSxcbiAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGNsaWVudC5pbnN0YWxsYXRpb25JZCxcbiAgICAgICAgICAgICAgc2VuZEV2ZW50OiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHRyaWdnZXIgPSBnZXRUcmlnZ2VyKGNsYXNzTmFtZSwgJ2FmdGVyRXZlbnQnLCBQYXJzZS5hcHBsaWNhdGlvbklkKTtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGF1dGggPSBhd2FpdCB0aGlzLmdldEF1dGhGcm9tQ2xpZW50KGNsaWVudCwgcmVxdWVzdElkKTtcbiAgICAgICAgICAgICAgaWYgKGF1dGggJiYgYXV0aC51c2VyKSB7XG4gICAgICAgICAgICAgICAgcmVzLnVzZXIgPSBhdXRoLnVzZXI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHJlcy5vYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXMub2JqZWN0ID0gUGFyc2UuT2JqZWN0LmZyb21KU09OKHJlcy5vYmplY3QpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGF3YWl0IHJ1blRyaWdnZXIodHJpZ2dlciwgYGFmdGVyRXZlbnQuJHtjbGFzc05hbWV9YCwgcmVzLCBhdXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzLnNlbmRFdmVudCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzLm9iamVjdCAmJiB0eXBlb2YgcmVzLm9iamVjdC50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgbG9jYWxEZWxldGVkUGFyc2VPYmplY3QgPSB0b0pTT053aXRoT2JqZWN0cyhyZXMub2JqZWN0LCByZXMub2JqZWN0LmNsYXNzTmFtZSB8fCBjbGFzc05hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzLm9iamVjdCA9IGxvY2FsRGVsZXRlZFBhcnNlT2JqZWN0O1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZmlsdGVyU2Vuc2l0aXZlRGF0YShcbiAgICAgICAgICAgICAgY2xhc3NMZXZlbFBlcm1pc3Npb25zLFxuICAgICAgICAgICAgICByZXMsXG4gICAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICAgICAgICBvcCxcbiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnF1ZXJ5XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY2xpZW50LnB1c2hEZWxldGUocmVxdWVzdElkLCByZXMub2JqZWN0KTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHJlc29sdmVFcnJvcihlKTtcbiAgICAgICAgICAgIENsaWVudC5wdXNoRXJyb3IoY2xpZW50LnBhcnNlV2ViU29ja2V0LCBlcnJvci5jb2RlLCBlcnJvci5tZXNzYWdlLCBmYWxzZSwgcmVxdWVzdElkKTtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgYEZhaWxlZCBydW5uaW5nIGFmdGVyTGl2ZVF1ZXJ5RXZlbnQgb24gY2xhc3MgJHtjbGFzc05hbWV9IGZvciBldmVudCAke3Jlcy5ldmVudH0gd2l0aCBzZXNzaW9uICR7cmVzLnNlc3Npb25Ub2tlbn0gd2l0aDpcXG4gRXJyb3I6IGAgK1xuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGVycm9yKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE1lc3NhZ2UgaXMgdGhlIEpTT04gb2JqZWN0IGZyb20gcHVibGlzaGVyIGFmdGVyIGluZmxhdGVkLiBNZXNzYWdlLmN1cnJlbnRQYXJzZU9iamVjdCBpcyB0aGUgUGFyc2VPYmplY3QgYWZ0ZXIgY2hhbmdlcy5cbiAgLy8gTWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0IGlzIHRoZSBvcmlnaW5hbCBQYXJzZU9iamVjdC5cbiAgYXN5bmMgX29uQWZ0ZXJTYXZlKG1lc3NhZ2U6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci52ZXJib3NlKFBhcnNlLmFwcGxpY2F0aW9uSWQgKyAnYWZ0ZXJTYXZlIGlzIHRyaWdnZXJlZCcpO1xuXG4gICAgbGV0IG9yaWdpbmFsUGFyc2VPYmplY3QgPSBudWxsO1xuICAgIGlmIChtZXNzYWdlLm9yaWdpbmFsUGFyc2VPYmplY3QpIHtcbiAgICAgIG9yaWdpbmFsUGFyc2VPYmplY3QgPSBtZXNzYWdlLm9yaWdpbmFsUGFyc2VPYmplY3QudG9KU09OKCk7XG4gICAgfVxuICAgIGNvbnN0IGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyA9IG1lc3NhZ2UuY2xhc3NMZXZlbFBlcm1pc3Npb25zO1xuICAgIGxldCBjdXJyZW50UGFyc2VPYmplY3QgPSBtZXNzYWdlLmN1cnJlbnRQYXJzZU9iamVjdC50b0pTT04oKTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBjdXJyZW50UGFyc2VPYmplY3QuY2xhc3NOYW1lO1xuICAgIGxvZ2dlci52ZXJib3NlKCdDbGFzc05hbWU6ICVzIHwgT2JqZWN0SWQ6ICVzJywgY2xhc3NOYW1lLCBjdXJyZW50UGFyc2VPYmplY3QuaWQpO1xuICAgIGxvZ2dlci52ZXJib3NlKCdDdXJyZW50IGNsaWVudCBudW1iZXIgOiAlZCcsIHRoaXMuY2xpZW50cy5zaXplKTtcblxuICAgIGNvbnN0IGNsYXNzU3Vic2NyaXB0aW9ucyA9IHRoaXMuc3Vic2NyaXB0aW9ucy5nZXQoY2xhc3NOYW1lKTtcbiAgICBpZiAodHlwZW9mIGNsYXNzU3Vic2NyaXB0aW9ucyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnQ2FuIG5vdCBmaW5kIHN1YnNjcmlwdGlvbnMgdW5kZXIgdGhpcyBjbGFzcyAnICsgY2xhc3NOYW1lKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2YgY2xhc3NTdWJzY3JpcHRpb25zLnZhbHVlcygpKSB7XG4gICAgICBsZXQgaXNPcmlnaW5hbFN1YnNjcmlwdGlvbk1hdGNoZWQ7XG4gICAgICBsZXQgaXNDdXJyZW50U3Vic2NyaXB0aW9uTWF0Y2hlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlzT3JpZ2luYWxTdWJzY3JpcHRpb25NYXRjaGVkID0gdGhpcy5fbWF0Y2hlc1N1YnNjcmlwdGlvbihcbiAgICAgICAgICBvcmlnaW5hbFBhcnNlT2JqZWN0LFxuICAgICAgICAgIHN1YnNjcmlwdGlvblxuICAgICAgICApO1xuICAgICAgICBpc0N1cnJlbnRTdWJzY3JpcHRpb25NYXRjaGVkID0gdGhpcy5fbWF0Y2hlc1N1YnNjcmlwdGlvbihcbiAgICAgICAgICBjdXJyZW50UGFyc2VPYmplY3QsXG4gICAgICAgICAgc3Vic2NyaXB0aW9uXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIG1hdGNoaW5nIHN1YnNjcmlwdGlvbiBmb3IgY2xhc3MgJHtjbGFzc05hbWV9OiAke2UubWVzc2FnZX1gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtjbGllbnRJZCwgcmVxdWVzdElkc10gb2YgXy5lbnRyaWVzKHN1YnNjcmlwdGlvbi5jbGllbnRSZXF1ZXN0SWRzKSkge1xuICAgICAgICBjb25zdCBjbGllbnQgPSB0aGlzLmNsaWVudHMuZ2V0KGNsaWVudElkKTtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGllbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdElkcy5mb3JFYWNoKGFzeW5jIHJlcXVlc3RJZCA9PiB7XG4gICAgICAgICAgLy8gRGVlcC1jbG9uZSBzaGFyZWQgb2JqZWN0cyBzbyBlYWNoIGNvbmN1cnJlbnQgY2FsbGJhY2sgd29ya3Mgb24gaXRzIG93biBjb3B5LlxuICAgICAgICAgIC8vIFdpdGhvdXQgY2xvbmluZywgX2ZpbHRlclNlbnNpdGl2ZURhdGEncyBpbi1wbGFjZSBmaWVsZCBkZWxldGlvbiBhbmQgYWZ0ZXJFdmVudFxuICAgICAgICAgIC8vIHRyaWdnZXIgbW9kaWZpY2F0aW9ucyBjb3JydXB0IHRoZSBzaGFyZWQgc3RhdGUgYWNyb3NzIGNvbmN1cnJlbnQgc3Vic2NyaWJlcnMuXG4gICAgICAgICAgbGV0IGxvY2FsQ3VycmVudFBhcnNlT2JqZWN0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjdXJyZW50UGFyc2VPYmplY3QpKTtcbiAgICAgICAgICBsZXQgbG9jYWxPcmlnaW5hbFBhcnNlT2JqZWN0ID0gb3JpZ2luYWxQYXJzZU9iamVjdFxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9yaWdpbmFsUGFyc2VPYmplY3QpKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgIC8vIFNldCBvcmlnbmFsIFBhcnNlT2JqZWN0IEFDTCBjaGVja2luZyBwcm9taXNlLCBpZiB0aGUgb2JqZWN0IGRvZXMgbm90IG1hdGNoXG4gICAgICAgICAgLy8gc3Vic2NyaXB0aW9uLCB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBBQ0xcbiAgICAgICAgICBsZXQgb3JpZ2luYWxBQ0xDaGVja2luZ1Byb21pc2U7XG4gICAgICAgICAgaWYgKCFpc09yaWdpbmFsU3Vic2NyaXB0aW9uTWF0Y2hlZCkge1xuICAgICAgICAgICAgb3JpZ2luYWxBQ0xDaGVja2luZ1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgb3JpZ2luYWxBQ0w7XG4gICAgICAgICAgICBpZiAobWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0KSB7XG4gICAgICAgICAgICAgIG9yaWdpbmFsQUNMID0gbWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0LmdldEFDTCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3JpZ2luYWxBQ0xDaGVja2luZ1Byb21pc2UgPSB0aGlzLl9tYXRjaGVzQUNMKG9yaWdpbmFsQUNMLCBjbGllbnQsIHJlcXVlc3RJZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFNldCBjdXJyZW50IFBhcnNlT2JqZWN0IEFDTCBjaGVja2luZyBwcm9taXNlLCBpZiB0aGUgb2JqZWN0IGRvZXMgbm90IG1hdGNoXG4gICAgICAgICAgLy8gc3Vic2NyaXB0aW9uLCB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBBQ0xcbiAgICAgICAgICBsZXQgY3VycmVudEFDTENoZWNraW5nUHJvbWlzZTtcbiAgICAgICAgICBsZXQgcmVzOiBhbnkgPSB7fTtcbiAgICAgICAgICBpZiAoIWlzQ3VycmVudFN1YnNjcmlwdGlvbk1hdGNoZWQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRBQ0xDaGVja2luZ1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50QUNMID0gbWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QuZ2V0QUNMKCk7XG4gICAgICAgICAgICBjdXJyZW50QUNMQ2hlY2tpbmdQcm9taXNlID0gdGhpcy5fbWF0Y2hlc0FDTChjdXJyZW50QUNMLCBjbGllbnQsIHJlcXVlc3RJZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBvcCA9IHRoaXMuX2dldENMUE9wZXJhdGlvbihzdWJzY3JpcHRpb24ucXVlcnkpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlc0NMUCA9IGF3YWl0IHRoaXMuX21hdGNoZXNDTFAoXG4gICAgICAgICAgICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgICAgbWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QsXG4gICAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICAgICAgICBvcFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVzQ0xQID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBbaXNPcmlnaW5hbE1hdGNoZWQsIGlzQ3VycmVudE1hdGNoZWRdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICBvcmlnaW5hbEFDTENoZWNraW5nUHJvbWlzZSxcbiAgICAgICAgICAgICAgY3VycmVudEFDTENoZWNraW5nUHJvbWlzZSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoXG4gICAgICAgICAgICAgICdPcmlnaW5hbCAlaiB8IEN1cnJlbnQgJWogfCBNYXRjaDogJXMsICVzLCAlcywgJXMgfCBRdWVyeTogJXMnLFxuICAgICAgICAgICAgICBsb2NhbE9yaWdpbmFsUGFyc2VPYmplY3QsXG4gICAgICAgICAgICAgIGxvY2FsQ3VycmVudFBhcnNlT2JqZWN0LFxuICAgICAgICAgICAgICBpc09yaWdpbmFsU3Vic2NyaXB0aW9uTWF0Y2hlZCxcbiAgICAgICAgICAgICAgaXNDdXJyZW50U3Vic2NyaXB0aW9uTWF0Y2hlZCxcbiAgICAgICAgICAgICAgaXNPcmlnaW5hbE1hdGNoZWQsXG4gICAgICAgICAgICAgIGlzQ3VycmVudE1hdGNoZWQsXG4gICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5oYXNoXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gRGVjaWRlIGV2ZW50IHR5cGVcbiAgICAgICAgICAgIGxldCB0eXBlO1xuICAgICAgICAgICAgaWYgKGlzT3JpZ2luYWxNYXRjaGVkICYmIGlzQ3VycmVudE1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgdHlwZSA9ICd1cGRhdGUnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc09yaWdpbmFsTWF0Y2hlZCAmJiAhaXNDdXJyZW50TWF0Y2hlZCkge1xuICAgICAgICAgICAgICB0eXBlID0gJ2xlYXZlJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzT3JpZ2luYWxNYXRjaGVkICYmIGlzQ3VycmVudE1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgaWYgKGxvY2FsT3JpZ2luYWxQYXJzZU9iamVjdCkge1xuICAgICAgICAgICAgICAgIHR5cGUgPSAnZW50ZXInO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHR5cGUgPSAnY3JlYXRlJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB3YXRjaEZpZWxkc0NoYW5nZWQgPSB0aGlzLl9jaGVja1dhdGNoRmllbGRzKGNsaWVudCwgcmVxdWVzdElkLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIGlmICghd2F0Y2hGaWVsZHNDaGFuZ2VkICYmICh0eXBlID09PSAndXBkYXRlJyB8fCB0eXBlID09PSAnY3JlYXRlJykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQSBgbGVhdmVgIG9yIGBlbnRlcmAgdHJhbnNpdGlvbiBjYW4gYmUgY2F1c2VkIGVpdGhlciBieSB0aGUgb2JqZWN0J3NcbiAgICAgICAgICAgIC8vIHF1ZXJ5IG1hdGNoIGNoYW5naW5nICh0aGUgc3Vic2NyaWJlciBrZWVwcyByZWFkIGFjY2Vzcykgb3IgYnkgdGhlXG4gICAgICAgICAgICAvLyBzdWJzY3JpYmVyJ3MgQUNMIHJlYWQgYWNjZXNzIGJlaW5nIHJldm9rZWQgb3IgZ3JhbnRlZCBpbiB0aGUgc2FtZSBzYXZlLlxuICAgICAgICAgICAgLy8gSW4gdGhlIGFjY2Vzcy1jaGFuZ2UgY2FzZSB0aGUgc3Vic2NyaWJlciBpcyBub3QgYXV0aG9yaXplZCB0byByZWFkIHRoZVxuICAgICAgICAgICAgLy8gb2JqZWN0IHN0YXRlIHRoYXQgdHJpZ2dlcmVkIHRoZSB0cmFuc2l0aW9uLCBzbyB0aGF0IHN0YXRlIG11c3Qgbm90IGJlXG4gICAgICAgICAgICAvLyBzZW50IG92ZXIgdGhlIGNoYW5uZWwuIChDTFAgcmVhZCBkZW5pYWwgaXMgaGFuZGxlZCBlYXJsaWVyIGJ5XG4gICAgICAgICAgICAvLyBgX21hdGNoZXNDTFBgLCB3aGljaCBza2lwcyB0aGUgZXZlbnQgZW50aXJlbHkuKVxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdsZWF2ZScpIHtcbiAgICAgICAgICAgICAgLy8gVGhlIHBvc3QtdXBkYXRlIG9iamVjdCBpcyByZWFkYWJsZSBvbiBhIHF1ZXJ5LW1pc21hdGNoIGxlYXZlIGJ1dCBub3RcbiAgICAgICAgICAgICAgLy8gb24gYW4gQUNMLWxvc3MgbGVhdmUuIE9ubHkgc2VuZCB0aGUgcG9zdC11cGRhdGUgYm9keSB3aGVuIHRoZVxuICAgICAgICAgICAgICAvLyBzdWJzY3JpYmVyIGNhbiBzdGlsbCByZWFkIHRoZSBjdXJyZW50IG9iamVjdDsgb3RoZXJ3aXNlIGZhbGwgYmFjayB0b1xuICAgICAgICAgICAgICAvLyB0aGUgbGFzdCBhdXRob3JpemVkIChvcmlnaW5hbCkgc3RhdGUsIHdoaWNoIHN0aWxsIGNhcnJpZXMgdGhlIG9iamVjdElkLlxuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UmVhZGFibGUgPSBpc0N1cnJlbnRTdWJzY3JpcHRpb25NYXRjaGVkXG4gICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgIDogYXdhaXQgdGhpcy5fbWF0Y2hlc0FDTChtZXNzYWdlLmN1cnJlbnRQYXJzZU9iamVjdC5nZXRBQ0woKSwgY2xpZW50LCByZXF1ZXN0SWQpO1xuICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRSZWFkYWJsZSkge1xuICAgICAgICAgICAgICAgIGxvY2FsQ3VycmVudFBhcnNlT2JqZWN0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShsb2NhbE9yaWdpbmFsUGFyc2VPYmplY3QpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnZW50ZXInKSB7XG4gICAgICAgICAgICAgIC8vIFRoZSBwcmUtdXBkYXRlIG9iamVjdCB3YXMgcmVhZGFibGUgb24gYSBxdWVyeS1tYXRjaC1nYWluIGVudGVyIGJ1dCBub3RcbiAgICAgICAgICAgICAgLy8gb24gYW4gQUNMLWdyYW50IGVudGVyLiBPbmx5IHNlbmQgdGhlIHByZS11cGRhdGUgYm9keSBhcyBgb3JpZ2luYWxgXG4gICAgICAgICAgICAgIC8vIHdoZW4gdGhlIHN1YnNjcmliZXIgY291bGQgcmVhZCB0aGUgb3JpZ2luYWwgb2JqZWN0LlxuICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbFJlYWRhYmxlID0gaXNPcmlnaW5hbFN1YnNjcmlwdGlvbk1hdGNoZWRcbiAgICAgICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICAgICAgOiBhd2FpdCB0aGlzLl9tYXRjaGVzQUNMKG1lc3NhZ2Uub3JpZ2luYWxQYXJzZU9iamVjdC5nZXRBQ0woKSwgY2xpZW50LCByZXF1ZXN0SWQpO1xuICAgICAgICAgICAgICBpZiAoIW9yaWdpbmFsUmVhZGFibGUpIHtcbiAgICAgICAgICAgICAgICBsb2NhbE9yaWdpbmFsUGFyc2VPYmplY3QgPSBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXMgPSB7XG4gICAgICAgICAgICAgIGV2ZW50OiB0eXBlLFxuICAgICAgICAgICAgICBzZXNzaW9uVG9rZW46IGNsaWVudC5zZXNzaW9uVG9rZW4sXG4gICAgICAgICAgICAgIG9iamVjdDogbG9jYWxDdXJyZW50UGFyc2VPYmplY3QsXG4gICAgICAgICAgICAgIG9yaWdpbmFsOiBsb2NhbE9yaWdpbmFsUGFyc2VPYmplY3QsXG4gICAgICAgICAgICAgIGNsaWVudHM6IHRoaXMuY2xpZW50cy5zaXplLFxuICAgICAgICAgICAgICBzdWJzY3JpcHRpb25zOiB0aGlzLnN1YnNjcmlwdGlvbnMuc2l6ZSxcbiAgICAgICAgICAgICAgdXNlTWFzdGVyS2V5OiBjbGllbnQuaGFzTWFzdGVyS2V5LFxuICAgICAgICAgICAgICBpbnN0YWxsYXRpb25JZDogY2xpZW50Lmluc3RhbGxhdGlvbklkLFxuICAgICAgICAgICAgICBzZW5kRXZlbnQ6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgdHJpZ2dlciA9IGdldFRyaWdnZXIoY2xhc3NOYW1lLCAnYWZ0ZXJFdmVudCcsIFBhcnNlLmFwcGxpY2F0aW9uSWQpO1xuICAgICAgICAgICAgaWYgKHRyaWdnZXIpIHtcbiAgICAgICAgICAgICAgaWYgKHJlcy5vYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXMub2JqZWN0ID0gUGFyc2UuT2JqZWN0LmZyb21KU09OKHJlcy5vYmplY3QpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyZXMub3JpZ2luYWwpIHtcbiAgICAgICAgICAgICAgICByZXMub3JpZ2luYWwgPSBQYXJzZS5PYmplY3QuZnJvbUpTT04ocmVzLm9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhdXRoID0gYXdhaXQgdGhpcy5nZXRBdXRoRnJvbUNsaWVudChjbGllbnQsIHJlcXVlc3RJZCk7XG4gICAgICAgICAgICAgIGlmIChhdXRoICYmIGF1dGgudXNlcikge1xuICAgICAgICAgICAgICAgIHJlcy51c2VyID0gYXV0aC51c2VyO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGF3YWl0IHJ1blRyaWdnZXIodHJpZ2dlciwgYGFmdGVyRXZlbnQuJHtjbGFzc05hbWV9YCwgcmVzLCBhdXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzLnNlbmRFdmVudCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzLm9iamVjdCAmJiB0eXBlb2YgcmVzLm9iamVjdC50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgbG9jYWxDdXJyZW50UGFyc2VPYmplY3QgPSB0b0pTT053aXRoT2JqZWN0cyhyZXMub2JqZWN0LCByZXMub2JqZWN0LmNsYXNzTmFtZSB8fCBjbGFzc05hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcy5vcmlnaW5hbCAmJiB0eXBlb2YgcmVzLm9yaWdpbmFsLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBsb2NhbE9yaWdpbmFsUGFyc2VPYmplY3QgPSB0b0pTT053aXRoT2JqZWN0cyhcbiAgICAgICAgICAgICAgICByZXMub3JpZ2luYWwsXG4gICAgICAgICAgICAgICAgcmVzLm9yaWdpbmFsLmNsYXNzTmFtZSB8fCBjbGFzc05hbWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcy5vYmplY3QgPSBsb2NhbEN1cnJlbnRQYXJzZU9iamVjdDtcbiAgICAgICAgICAgIHJlcy5vcmlnaW5hbCA9IGxvY2FsT3JpZ2luYWxQYXJzZU9iamVjdDtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2ZpbHRlclNlbnNpdGl2ZURhdGEoXG4gICAgICAgICAgICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgICAgcmVzLFxuICAgICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgb3AsXG4gICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5xdWVyeVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9ICdwdXNoJyArIHJlcy5ldmVudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHJlcy5ldmVudC5zbGljZSgxKTtcbiAgICAgICAgICAgIGlmIChjbGllbnRbZnVuY3Rpb25OYW1lXSkge1xuICAgICAgICAgICAgICBjbGllbnRbZnVuY3Rpb25OYW1lXShyZXF1ZXN0SWQsIHJlcy5vYmplY3QsIHJlcy5vcmlnaW5hbCA/PyBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHJlc29sdmVFcnJvcihlKTtcbiAgICAgICAgICAgIENsaWVudC5wdXNoRXJyb3IoY2xpZW50LnBhcnNlV2ViU29ja2V0LCBlcnJvci5jb2RlLCBlcnJvci5tZXNzYWdlLCBmYWxzZSwgcmVxdWVzdElkKTtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgYEZhaWxlZCBydW5uaW5nIGFmdGVyTGl2ZVF1ZXJ5RXZlbnQgb24gY2xhc3MgJHtjbGFzc05hbWV9IGZvciBldmVudCAke3Jlcy5ldmVudH0gd2l0aCBzZXNzaW9uICR7cmVzLnNlc3Npb25Ub2tlbn0gd2l0aDpcXG4gRXJyb3I6IGAgK1xuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGVycm9yKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9vbkNvbm5lY3QocGFyc2VXZWJzb2NrZXQ6IGFueSk6IHZvaWQge1xuICAgIHBhcnNlV2Vic29ja2V0Lm9uKCdtZXNzYWdlJywgcmVxdWVzdCA9PiB7XG4gICAgICBpZiAodHlwZW9mIHJlcXVlc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVxdWVzdCA9IEpTT04ucGFyc2UocmVxdWVzdCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ3VuYWJsZSB0byBwYXJzZSByZXF1ZXN0JywgcmVxdWVzdCwgZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsb2dnZXIudmVyYm9zZSgnUmVxdWVzdDogJWonLCByZXF1ZXN0KTtcblxuICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGlzIHJlcXVlc3QgaXMgYSB2YWxpZCByZXF1ZXN0LCByZXR1cm4gZXJyb3IgZGlyZWN0bHkgaWYgbm90XG4gICAgICBpZiAoXG4gICAgICAgICF0djQudmFsaWRhdGUocmVxdWVzdCwgUmVxdWVzdFNjaGVtYVsnZ2VuZXJhbCddKSB8fFxuICAgICAgICAhdHY0LnZhbGlkYXRlKHJlcXVlc3QsIFJlcXVlc3RTY2hlbWFbcmVxdWVzdC5vcF0pXG4gICAgICApIHtcbiAgICAgICAgQ2xpZW50LnB1c2hFcnJvcihwYXJzZVdlYnNvY2tldCwgMSwgdHY0LmVycm9yLm1lc3NhZ2UpO1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0Nvbm5lY3QgbWVzc2FnZSBlcnJvciAlcycsIHR2NC5lcnJvci5tZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHJlcXVlc3Qub3ApIHtcbiAgICAgICAgY2FzZSAnY29ubmVjdCc6XG4gICAgICAgICAgdGhpcy5faGFuZGxlQ29ubmVjdChwYXJzZVdlYnNvY2tldCwgcmVxdWVzdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3N1YnNjcmliZSc6XG4gICAgICAgICAgdGhpcy5faGFuZGxlU3Vic2NyaWJlKHBhcnNlV2Vic29ja2V0LCByZXF1ZXN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndXBkYXRlJzpcbiAgICAgICAgICB0aGlzLl9oYW5kbGVVcGRhdGVTdWJzY3JpcHRpb24ocGFyc2VXZWJzb2NrZXQsIHJlcXVlc3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd1bnN1YnNjcmliZSc6XG4gICAgICAgICAgdGhpcy5faGFuZGxlVW5zdWJzY3JpYmUocGFyc2VXZWJzb2NrZXQsIHJlcXVlc3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIENsaWVudC5wdXNoRXJyb3IocGFyc2VXZWJzb2NrZXQsIDMsICdHZXQgdW5rbm93biBvcGVyYXRpb24nKTtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0dldCB1bmtub3duIG9wZXJhdGlvbicsIHJlcXVlc3Qub3ApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcGFyc2VXZWJzb2NrZXQub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICBsb2dnZXIuaW5mbyhgQ2xpZW50IGRpc2Nvbm5lY3Q6ICR7cGFyc2VXZWJzb2NrZXQuY2xpZW50SWR9YCk7XG4gICAgICBjb25zdCBjbGllbnRJZCA9IHBhcnNlV2Vic29ja2V0LmNsaWVudElkO1xuICAgICAgaWYgKCF0aGlzLmNsaWVudHMuaGFzKGNsaWVudElkKSkge1xuICAgICAgICBydW5MaXZlUXVlcnlFdmVudEhhbmRsZXJzKHtcbiAgICAgICAgICBldmVudDogJ3dzX2Rpc2Nvbm5lY3RfZXJyb3InLFxuICAgICAgICAgIGNsaWVudHM6IHRoaXMuY2xpZW50cy5zaXplLFxuICAgICAgICAgIHN1YnNjcmlwdGlvbnM6IHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplLFxuICAgICAgICAgIGVycm9yOiBgVW5hYmxlIHRvIGZpbmQgY2xpZW50ICR7Y2xpZW50SWR9YCxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ2dlci5lcnJvcihgQ2FuIG5vdCBmaW5kIGNsaWVudCAke2NsaWVudElkfSBvbiBkaXNjb25uZWN0YCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRGVsZXRlIGNsaWVudFxuICAgICAgY29uc3QgY2xpZW50ID0gdGhpcy5jbGllbnRzLmdldChjbGllbnRJZCk7XG4gICAgICB0aGlzLmNsaWVudHMuZGVsZXRlKGNsaWVudElkKTtcblxuICAgICAgLy8gRGVsZXRlIGNsaWVudCBmcm9tIHN1YnNjcmlwdGlvbnNcbiAgICAgIGZvciAoY29uc3QgW3JlcXVlc3RJZCwgc3Vic2NyaXB0aW9uSW5mb10gb2YgXy5lbnRyaWVzKGNsaWVudC5zdWJzY3JpcHRpb25JbmZvcykpIHtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9uSW5mby5zdWJzY3JpcHRpb247XG4gICAgICAgIHN1YnNjcmlwdGlvbi5kZWxldGVDbGllbnRTdWJzY3JpcHRpb24oY2xpZW50SWQsIHJlcXVlc3RJZCk7XG5cbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gY2xpZW50IHdoaWNoIGlzIHN1YnNjcmliaW5nIHRoaXMgc3Vic2NyaXB0aW9uLCByZW1vdmUgaXQgZnJvbSBzdWJzY3JpcHRpb25zXG4gICAgICAgIGNvbnN0IGNsYXNzU3Vic2NyaXB0aW9ucyA9IHRoaXMuc3Vic2NyaXB0aW9ucy5nZXQoc3Vic2NyaXB0aW9uLmNsYXNzTmFtZSk7XG4gICAgICAgIGlmIChjbGFzc1N1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgICBpZiAoIXN1YnNjcmlwdGlvbi5oYXNTdWJzY3JpYmluZ0NsaWVudCgpKSB7XG4gICAgICAgICAgICBjbGFzc1N1YnNjcmlwdGlvbnMuZGVsZXRlKHN1YnNjcmlwdGlvbi5oYXNoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc3Vic2NyaXB0aW9ucyB1bmRlciB0aGlzIGNsYXNzLCByZW1vdmUgaXQgZnJvbSBzdWJzY3JpcHRpb25zXG4gICAgICAgICAgaWYgKGNsYXNzU3Vic2NyaXB0aW9ucy5zaXplID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZGVsZXRlKHN1YnNjcmlwdGlvbi5jbGFzc05hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsb2dnZXIudmVyYm9zZSgnQ3VycmVudCBjbGllbnRzICVkJywgdGhpcy5jbGllbnRzLnNpemUpO1xuICAgICAgbG9nZ2VyLnZlcmJvc2UoJ0N1cnJlbnQgc3Vic2NyaXB0aW9ucyAlZCcsIHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplKTtcbiAgICAgIHJ1bkxpdmVRdWVyeUV2ZW50SGFuZGxlcnMoe1xuICAgICAgICBldmVudDogJ3dzX2Rpc2Nvbm5lY3QnLFxuICAgICAgICBjbGllbnRzOiB0aGlzLmNsaWVudHMuc2l6ZSxcbiAgICAgICAgc3Vic2NyaXB0aW9uczogdGhpcy5zdWJzY3JpcHRpb25zLnNpemUsXG4gICAgICAgIHVzZU1hc3RlcktleTogY2xpZW50Lmhhc01hc3RlcktleSxcbiAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGNsaWVudC5pbnN0YWxsYXRpb25JZCxcbiAgICAgICAgc2Vzc2lvblRva2VuOiBjbGllbnQuc2Vzc2lvblRva2VuLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBydW5MaXZlUXVlcnlFdmVudEhhbmRsZXJzKHtcbiAgICAgIGV2ZW50OiAnd3NfY29ubmVjdCcsXG4gICAgICBjbGllbnRzOiB0aGlzLmNsaWVudHMuc2l6ZSxcbiAgICAgIHN1YnNjcmlwdGlvbnM6IHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplLFxuICAgIH0pO1xuICB9XG5cbiAgX3ZhbGlkYXRlUXVlcnlDb25zdHJhaW50cyh3aGVyZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiB3aGVyZSAhPT0gJ29iamVjdCcgfHwgd2hlcmUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBvcCBvZiBbJyRvcicsICckYW5kJywgJyRub3InXSkge1xuICAgICAgaWYgKHdoZXJlW29wXSAhPT0gdW5kZWZpbmVkICYmICFBcnJheS5pc0FycmF5KHdoZXJlW29wXSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksIGAke29wfSBtdXN0IGJlIGFuIGFycmF5YCk7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh3aGVyZVtvcF0pKSB7XG4gICAgICAgIHdoZXJlW29wXS5mb3JFYWNoKChzdWJRdWVyeTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5fdmFsaWRhdGVRdWVyeUNvbnN0cmFpbnRzKHN1YlF1ZXJ5KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHdoZXJlKSkge1xuICAgICAgY29uc3QgY29uc3RyYWludCA9IHdoZXJlW2tleV07XG4gICAgICBpZiAodHlwZW9mIGNvbnN0cmFpbnQgPT09ICdvYmplY3QnICYmIGNvbnN0cmFpbnQgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKGNvbnN0cmFpbnQuJHJlZ2V4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCByZWdleCA9IGNvbnN0cmFpbnQuJHJlZ2V4O1xuICAgICAgICAgIGNvbnN0IGlzUmVnRXhwTGlrZSA9XG4gICAgICAgICAgICByZWdleCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgdHlwZW9mIHJlZ2V4ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgdHlwZW9mIHJlZ2V4LnNvdXJjZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgIHR5cGVvZiByZWdleC5mbGFncyA9PT0gJ3N0cmluZyc7XG4gICAgICAgICAgaWYgKHR5cGVvZiByZWdleCAhPT0gJ3N0cmluZycgJiYgIWlzUmVnRXhwTGlrZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLFxuICAgICAgICAgICAgICAnSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246ICRyZWdleCBtdXN0IGJlIGEgc3RyaW5nIG9yIFJlZ0V4cCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHBhdHRlcm4gPSBpc1JlZ0V4cExpa2UgPyByZWdleC5zb3VyY2UgOiByZWdleDtcbiAgICAgICAgICBjb25zdCBmbGFncyA9IGlzUmVnRXhwTGlrZSA/IHJlZ2V4LmZsYWdzIDogY29uc3RyYWludC4kb3B0aW9ucyB8fCAnJztcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IFJlZ0V4cChwYXR0ZXJuLCBmbGFncyk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLFxuICAgICAgICAgICAgICBgSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246ICR7ZS5tZXNzYWdlfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX21hdGNoZXNTdWJzY3JpcHRpb24ocGFyc2VPYmplY3Q6IGFueSwgc3Vic2NyaXB0aW9uOiBhbnkpOiBib29sZWFuIHtcbiAgICAvLyBPYmplY3QgaXMgdW5kZWZpbmVkIG9yIG51bGwsIG5vdCBtYXRjaFxuICAgIGlmICghcGFyc2VPYmplY3QpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXNRdWVyeShzdHJ1Y3R1cmVkQ2xvbmUocGFyc2VPYmplY3QpLCBzdWJzY3JpcHRpb24ucXVlcnkpO1xuICB9XG5cbiAgYXN5bmMgX2NsZWFyQ2FjaGVkUm9sZXModXNlcklkOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdmFsaWRUb2tlbnMgPSBhd2FpdCBuZXcgUGFyc2UuUXVlcnkoUGFyc2UuU2Vzc2lvbilcbiAgICAgICAgLmVxdWFsVG8oJ3VzZXInLCBQYXJzZS5Vc2VyLmNyZWF0ZVdpdGhvdXREYXRhKHVzZXJJZCkpXG4gICAgICAgIC5maW5kKHsgdXNlTWFzdGVyS2V5OiB0cnVlIH0pO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHZhbGlkVG9rZW5zLm1hcChhc3luYyB0b2tlbiA9PiB7XG4gICAgICAgICAgY29uc3Qgc2Vzc2lvblRva2VuID0gdG9rZW4uZ2V0KCdzZXNzaW9uVG9rZW4nKTtcbiAgICAgICAgICBjb25zdCBhdXRoUHJvbWlzZSA9IHRoaXMuYXV0aENhY2hlLmdldChzZXNzaW9uVG9rZW4pO1xuICAgICAgICAgIGlmICghYXV0aFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgW2F1dGgxLCBhdXRoMl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICBhdXRoUHJvbWlzZSxcbiAgICAgICAgICAgIGdldEF1dGhGb3JTZXNzaW9uVG9rZW4oeyBjYWNoZUNvbnRyb2xsZXI6IHRoaXMuY2FjaGVDb250cm9sbGVyLCBzZXNzaW9uVG9rZW4gfSksXG4gICAgICAgICAgXSk7XG4gICAgICAgICAgYXV0aDEuYXV0aD8uY2xlYXJSb2xlQ2FjaGUoc2Vzc2lvblRva2VuKTtcbiAgICAgICAgICBhdXRoMi5hdXRoPy5jbGVhclJvbGVDYWNoZShzZXNzaW9uVG9rZW4pO1xuICAgICAgICAgIHRoaXMuYXV0aENhY2hlLmRlbGV0ZShzZXNzaW9uVG9rZW4pO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIudmVyYm9zZShgQ291bGQgbm90IGNsZWFyIHJvbGUgY2FjaGUuICR7ZX1gKTtcbiAgICB9XG4gIH1cblxuICBnZXRBdXRoRm9yU2Vzc2lvblRva2VuKHNlc3Npb25Ub2tlbj86IHN0cmluZyk6IFByb21pc2U8eyBhdXRoPzogQXV0aCwgdXNlcklkPzogc3RyaW5nIH0+IHtcbiAgICBpZiAoIXNlc3Npb25Ub2tlbikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgfVxuICAgIGNvbnN0IGZyb21DYWNoZSA9IHRoaXMuYXV0aENhY2hlLmdldChzZXNzaW9uVG9rZW4pO1xuICAgIGlmIChmcm9tQ2FjaGUpIHtcbiAgICAgIHJldHVybiBmcm9tQ2FjaGU7XG4gICAgfVxuICAgIGNvbnN0IGF1dGhQcm9taXNlID0gZ2V0QXV0aEZvclNlc3Npb25Ub2tlbih7XG4gICAgICBjYWNoZUNvbnRyb2xsZXI6IHRoaXMuY2FjaGVDb250cm9sbGVyLFxuICAgICAgc2Vzc2lvblRva2VuOiBzZXNzaW9uVG9rZW4sXG4gICAgfSlcbiAgICAgIC50aGVuKGF1dGggPT4ge1xuICAgICAgICByZXR1cm4geyBhdXRoLCB1c2VySWQ6IGF1dGggJiYgYXV0aC51c2VyICYmIGF1dGgudXNlci5pZCB9O1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIC8vIFRoZXJlIHdhcyBhbiBlcnJvciB3aXRoIHRoZSBzZXNzaW9uIHRva2VuXG4gICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5jb2RlID09PSBQYXJzZS5FcnJvci5JTlZBTElEX1NFU1NJT05fVE9LRU4pIHtcbiAgICAgICAgICByZXN1bHQuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICB0aGlzLmF1dGhDYWNoZS5zZXQoc2Vzc2lvblRva2VuLCBQcm9taXNlLnJlc29sdmUocmVzdWx0KSwge1xuICAgICAgICAgICAgdHRsOiB0aGlzLmNvbmZpZy5jYWNoZVRpbWVvdXQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hdXRoQ2FjaGUuZGVsZXRlKHNlc3Npb25Ub2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pO1xuICAgIHRoaXMuYXV0aENhY2hlLnNldChzZXNzaW9uVG9rZW4sIGF1dGhQcm9taXNlKTtcbiAgICByZXR1cm4gYXV0aFByb21pc2U7XG4gIH1cblxuICBhc3luYyBfbWF0Y2hlc0NMUChcbiAgICBjbGFzc0xldmVsUGVybWlzc2lvbnM/OiBhbnksXG4gICAgb2JqZWN0PzogYW55LFxuICAgIGNsaWVudD86IGFueSxcbiAgICByZXF1ZXN0SWQ/OiBudW1iZXIsXG4gICAgb3A/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBzdWJzY3JpcHRpb25JbmZvID0gY2xpZW50LmdldFN1YnNjcmlwdGlvbkluZm8ocmVxdWVzdElkKTtcbiAgICBjb25zdCBhY2xHcm91cCA9IFsnKiddO1xuICAgIGxldCB1c2VySWQ7XG4gICAgaWYgKHR5cGVvZiBzdWJzY3JpcHRpb25JbmZvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBjb25uZWN0LWZyYW1lIHRva2VuLCB0aGUgc2FtZSB3YXkgYF9tYXRjaGVzQUNMYCxcbiAgICAgIC8vIGBnZXRBdXRoRnJvbUNsaWVudGAgYW5kIGBfZmlsdGVyU2Vuc2l0aXZlRGF0YWAgYWxyZWFkeSBkby4gVGhlIHN1YnNjcmliZVxuICAgICAgLy8gZnJhbWUncyBzZXNzaW9uIHRva2VuIGlzIG9wdGlvbmFsLCBzbyByZXNvbHZpbmcgb25seSBpdCB3b3VsZCBldmFsdWF0ZSB0aGVcbiAgICAgIC8vIENMUCBhZ2FpbnN0IGFuIGFub255bW91cyBpZGVudGl0eSB3aGlsZSB0aGUgQUNMIGNoZWNrIGF1dGhvcml6ZWQgdGhlIHJlYWRcbiAgICAgIC8vIGFnYWluc3QgdGhlIGNvbm5lY3RlZCB1c2VyLlxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRBdXRoRm9yU2Vzc2lvblRva2VuKFxuICAgICAgICBzdWJzY3JpcHRpb25JbmZvLnNlc3Npb25Ub2tlbiB8fCBjbGllbnQuc2Vzc2lvblRva2VuXG4gICAgICApO1xuICAgICAgdXNlcklkID0gcmVzdWx0LnVzZXJJZDtcbiAgICAgIGlmICh1c2VySWQpIHtcbiAgICAgICAgYWNsR3JvdXAucHVzaCh1c2VySWQpO1xuICAgICAgICAvLyBSZWFkIHBlciBjYWxsIHJhdGhlciB0aGFuIGNhY2hpbmcgb24gdGhlIGluc3RhbmNlOiB0aGUgd2hvbGUgYXBwIGNvbmZpZ1xuICAgICAgICAvLyBjYW4gYmUgcmVwbGFjZWQgYXQgcnVudGltZSB0aHJvdWdoIHRoZSBgUGFyc2UuU2VydmVyYCBzZXR0ZXIuXG4gICAgICAgIGNvbnN0IGFwcENvbmZpZyA9IENvbmZpZy5nZXQodGhpcy5jb25maWcuYXBwSWQpO1xuICAgICAgICBhY2xHcm91cC5wdXNoKFxuICAgICAgICAgIC4uLihhd2FpdCB0aGlzLl9yb2xlc0ZvckNMUE9wZXJhdGlvbihcbiAgICAgICAgICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgIHJlc3VsdC5hdXRoLFxuICAgICAgICAgICAgb3AsXG4gICAgICAgICAgICBhcHBDb25maWdcbiAgICAgICAgICApKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCBTY2hlbWFDb250cm9sbGVyLnZhbGlkYXRlUGVybWlzc2lvbihcbiAgICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyxcbiAgICAgIG9iamVjdC5jbGFzc05hbWUsXG4gICAgICBhY2xHcm91cCxcbiAgICAgIG9wXG4gICAgKTtcbiAgICAvLyBFbmZvcmNlIHBvaW50ZXIgcGVybWlzc2lvbnMgdGhhdCB2YWxpZGF0ZVBlcm1pc3Npb24gZGVmZXJzLlxuICAgIC8vIFJldHVybnMgZmFsc2UgdG8gc2lsZW50bHkgc2tpcCB0aGUgZXZlbnQgKGxpa2UgQUNMKSwgcmF0aGVyIHRoYW5cbiAgICAvLyB0aHJvd2luZyB3aGljaCB3b3VsZCBwdXNoIGVycm9ycyB0byB0aGUgY2xpZW50IGFuZCBsb2cgbm9pc2UuXG4gICAgaWYgKCFjbGllbnQuaGFzTWFzdGVyS2V5ICYmIGNsYXNzTGV2ZWxQZXJtaXNzaW9ucykge1xuICAgICAgY29uc3QgcGVybWlzc2lvbkZpZWxkID1cbiAgICAgICAgWydnZXQnLCAnZmluZCcsICdjb3VudCddLmluZGV4T2Yob3ApID4gLTEgPyAncmVhZFVzZXJGaWVsZHMnIDogJ3dyaXRlVXNlckZpZWxkcyc7XG4gICAgICBjb25zdCBwb2ludGVyRmllbGRzID0gW107XG4gICAgICBpZiAoY2xhc3NMZXZlbFBlcm1pc3Npb25zW29wXT8ucG9pbnRlckZpZWxkcykge1xuICAgICAgICBwb2ludGVyRmllbGRzLnB1c2goLi4uY2xhc3NMZXZlbFBlcm1pc3Npb25zW29wXS5wb2ludGVyRmllbGRzKTtcbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNsYXNzTGV2ZWxQZXJtaXNzaW9uc1twZXJtaXNzaW9uRmllbGRdKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGNsYXNzTGV2ZWxQZXJtaXNzaW9uc1twZXJtaXNzaW9uRmllbGRdKSB7XG4gICAgICAgICAgaWYgKCFwb2ludGVyRmllbGRzLmluY2x1ZGVzKGZpZWxkKSkge1xuICAgICAgICAgICAgcG9pbnRlckZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwb2ludGVyRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gSWYgcHVibGljIG9yIHVzZXItc3BlY2lmaWMgcGVybWlzc2lvbiBhbHJlYWR5IGdyYW50cyBhY2Nlc3MsIHNraXAgcG9pbnRlciBjaGVja1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIVNjaGVtYUNvbnRyb2xsZXIudGVzdFBlcm1pc3Npb25zKGNsYXNzTGV2ZWxQZXJtaXNzaW9ucywgYWNsR3JvdXAsIG9wKVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoIXVzZXJJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBDaGVjayBpZiBhbnkgcG9pbnRlciBmaWVsZCBwb2ludHMgdG8gdGhlIGN1cnJlbnQgdXNlclxuICAgICAgICAgIGNvbnN0IGhhc0FjY2VzcyA9IHBvaW50ZXJGaWVsZHMuc29tZShmaWVsZCA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9XG4gICAgICAgICAgICAgIHR5cGVvZiBvYmplY3QuZ2V0ID09PSAnZnVuY3Rpb24nID8gb2JqZWN0LmdldChmaWVsZCkgOiBvYmplY3RbZmllbGRdO1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBIYW5kbGUgUGFyc2UuT2JqZWN0IHBvaW50ZXIgKGhhcyAuaWQpXG4gICAgICAgICAgICBpZiAodmFsdWUuaWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlkID09PSB1c2VySWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBIYW5kbGUgcmF3IHBvaW50ZXIgSlNPTiAoaGFzIC5vYmplY3RJZClcbiAgICAgICAgICAgIGlmICh2YWx1ZS5vYmplY3RJZCkge1xuICAgICAgICAgICAgICByZXR1cm4gdmFsdWUub2JqZWN0SWQgPT09IHVzZXJJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEhhbmRsZSBhcnJheSBvZiBwb2ludGVyc1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5zb21lKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5pZCA9PT0gdXNlcklkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5vYmplY3RJZCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ub2JqZWN0SWQgPT09IHVzZXJJZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoIWhhc0FjY2Vzcykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGBhZGRQcm90ZWN0ZWRGaWVsZHNgIHJlYWRzIHJvbGUtc2NvcGVkIGBwcm90ZWN0ZWRGaWVsZHNgIGdyb3VwcyBmcm9tXG4gIC8vIGBBdXRoLnVzZXJSb2xlc2AsIHdoaWNoIHN0YXlzIGVtcHR5IHVubGVzcyB0aGUgcm9sZXMgYXJlIGV4cGxpY2l0bHkgbG9hZGVkLlxuICAvLyBXaXRob3V0IHRoaXMsIGV2ZXJ5IGByb2xlOmAgZ3JvdXAgaXMgc2lsZW50bHkgc2tpcHBlZCBhbmQgTGl2ZVF1ZXJ5IHdvdWxkXG4gIC8vIGRpc2Nsb3NlIGZpZWxkcyB0aGF0IHRoZSBSRVNUIHBhdGggc3RyaXBzIGZvciB0aGUgc2FtZSBjYWxsZXIuIFRoZSByb2xlcyBhcmVcbiAgLy8gb25seSBmZXRjaGVkIHdoZW4gdGhlIGNsYXNzIGFjdHVhbGx5IGRlY2xhcmVzIGEgYHJvbGU6YCBncm91cCwgc28gY2xhc3Nlc1xuICAvLyB3aXRob3V0IG9uZSBrZWVwIHN1YnNjcmliaW5nIGFuZCByZWNlaXZpbmcgZXZlbnRzIHdpdGhvdXQgYSByb2xlIGxvb2t1cC5cbiAgYXN5bmMgX2xvYWRSb2xlc0ZvclByb3RlY3RlZEZpZWxkcyhjbGFzc0xldmVsUGVybWlzc2lvbnM/OiBhbnksIGNsaWVudEF1dGg/OiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIGNsaWVudEF1dGg/LmdldFVzZXJSb2xlcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcm90ZWN0ZWRGaWVsZHMgPSBjbGFzc0xldmVsUGVybWlzc2lvbnM/LnByb3RlY3RlZEZpZWxkcztcbiAgICBpZiAoIXByb3RlY3RlZEZpZWxkcyB8fCBBcnJheS5pc0FycmF5KHByb3RlY3RlZEZpZWxkcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFPYmplY3Qua2V5cyhwcm90ZWN0ZWRGaWVsZHMpLnNvbWUoa2V5ID0+IGtleS5zdGFydHNXaXRoKCdyb2xlOicpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCBjbGllbnRBdXRoLmdldFVzZXJSb2xlcygpO1xuICB9XG5cbiAgLy8gYFNjaGVtYUNvbnRyb2xsZXIudGVzdFBlcm1pc3Npb25zYCBtYXRjaGVzIENMUCBlbnRyaWVzIGFnYWluc3QgdGhlIGNhbGxlcidzXG4gIC8vIEFDTCBncm91cCwgc28gYSBgcm9sZTpgIGdyYW50IG9ubHkgYXBwbGllcyB3aGVuIHRoZSBjYWxsZXIncyByb2xlcyBhcmUgaW4gdGhhdFxuICAvLyBncm91cC4gVGhlIFJFU1QgcGF0aCBidWlsZHMgdGhlIHNhbWUgZ3JvdXAgaW4gYFJlc3RRdWVyeS5nZXRVc2VyQW5kUm9sZUFDTGA7XG4gIC8vIHdpdGhvdXQgdGhpcyBMaXZlUXVlcnkgZGVuaWVzIGBmaW5kYC9gZ2V0YCB0byBsZWdpdGltYXRlIHJvbGUgbWVtYmVycyB0aGF0IHRoZVxuICAvLyBlcXVpdmFsZW50IFJFU1QgcXVlcnkgc2VydmVzLlxuICAvL1xuICAvLyBIb25vdXJpbmcgdGhlIGdyYW50IHdpZGVucyB3aGF0IExpdmVRdWVyeSBkZWxpdmVycywgc28gaXQgaXMgb3B0LWluIHVudGlsIHRoZVxuICAvLyBuZXh0IG1ham9yIHZpYSBgZW5hYmxlTGl2ZVF1ZXJ5Q2xhc3NMZXZlbFBlcm1pc3Npb25Sb2xlc2AgKHNlZSBERVBQUzI1KS4gVGhlXG4gIC8vIG9wdGlvbiBsaXZlcyBvbiBgUGFyc2VTZXJ2ZXJPcHRpb25zYCwgd2hpY2ggaXMgTk9UIHdoYXQgYHRoaXMuY29uZmlnYCBob2xkcyAtLVxuICAvLyB0aGF0IGlzIGBsaXZlUXVlcnlTZXJ2ZXJPcHRpb25zYCAtLSBzbyBpdCBoYXMgdG8gYmUgcmVhZCB0aHJvdWdoIGBDb25maWcuZ2V0YC5cbiAgLy8gVGhlIG9wdGlvbmFsIGNoYWluaW5nIGlzIHJlcXVpcmVkOiBgQ29uZmlnLmdldGAgcmV0dXJucyBgdW5kZWZpbmVkYCBmb3IgYVxuICAvLyBzdGFuZGFsb25lIExpdmVRdWVyeSBzZXJ2ZXIsIHdob3NlIGBBcHBDYWNoZWAgaXMgZW1wdHkuXG4gIC8vXG4gIC8vIFRoZSByb2xlcyBhcmUgb25seSByZXNvbHZlZCB3aGVuIHRoZSBvcGVyYXRpb24ncyBDTFAgYWN0dWFsbHkgZGVjbGFyZXMgYVxuICAvLyBgcm9sZTpgIGVudHJ5LCBzbyBjbGFzc2VzIHRoYXQgZ3JhbnQgYnkgYCpgIG9yIGJ5IHVzZXIgaWQga2VlcCBtYXRjaGluZyBldmVudHNcbiAgLy8gd2l0aG91dCBhIHJvbGUgbG9va3VwLlxuICBhc3luYyBfcm9sZXNGb3JDTFBPcGVyYXRpb24oXG4gICAgY2xhc3NMZXZlbFBlcm1pc3Npb25zPzogYW55LFxuICAgIGNsaWVudEF1dGg/OiBhbnksXG4gICAgb3A/OiBzdHJpbmcsXG4gICAgYXBwQ29uZmlnPzogYW55XG4gICk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBpZiAoIWFwcENvbmZpZz8uZW5hYmxlTGl2ZVF1ZXJ5Q2xhc3NMZXZlbFBlcm1pc3Npb25Sb2xlcykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNsaWVudEF1dGg/LmdldFVzZXJSb2xlcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBvcFBlcm1pc3Npb25zID0gY2xhc3NMZXZlbFBlcm1pc3Npb25zPy5bb3BdO1xuICAgIGlmICghb3BQZXJtaXNzaW9ucyB8fCB0eXBlb2Ygb3BQZXJtaXNzaW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKCFPYmplY3Qua2V5cyhvcFBlcm1pc3Npb25zKS5zb21lKGtleSA9PiBrZXkuc3RhcnRzV2l0aCgncm9sZTonKSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudEF1dGguZ2V0VXNlclJvbGVzKCk7XG4gIH1cblxuICBhc3luYyBfZmlsdGVyU2Vuc2l0aXZlRGF0YShcbiAgICBjbGFzc0xldmVsUGVybWlzc2lvbnM/OiBhbnksXG4gICAgcmVzPzogYW55LFxuICAgIGNsaWVudD86IGFueSxcbiAgICByZXF1ZXN0SWQ/OiBudW1iZXIsXG4gICAgb3A/OiBzdHJpbmcsXG4gICAgcXVlcnk/OiBhbnlcbiAgKSB7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uSW5mbyA9IGNsaWVudC5nZXRTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3RJZCk7XG4gICAgY29uc3QgYWNsR3JvdXAgPSBbJyonXTtcbiAgICBsZXQgY2xpZW50QXV0aDtcbiAgICBpZiAodHlwZW9mIHN1YnNjcmlwdGlvbkluZm8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIGNvbm5lY3QtZnJhbWUgdG9rZW4sIHRoZSBzYW1lIHdheSBgX21hdGNoZXNBQ0xgIGFuZFxuICAgICAgLy8gYGdldEF1dGhGcm9tQ2xpZW50YCBhbHJlYWR5IGRvLiBUaGUgc3Vic2NyaWJlIGZyYW1lJ3Mgc2Vzc2lvbiB0b2tlbiBpc1xuICAgICAgLy8gb3B0aW9uYWwsIHNvIHJlc29sdmluZyBvbmx5IGl0IHdvdWxkIHJlZGFjdCBhZ2FpbnN0IGFuIGFub255bW91cyBpZGVudGl0eVxuICAgICAgLy8gd2hpbGUgdGhlIEFDTCBjaGVjayBhdXRob3JpemVkIHRoZSByZWFkIGFnYWluc3QgdGhlIGNvbm5lY3RlZCB1c2VyLiBUaGF0XG4gICAgICAvLyBtaXNtYXRjaCBza2lwcyBldmVyeSBpZGVudGl0eS1kZXJpdmVkIGBwcm90ZWN0ZWRGaWVsZHNgIGdyb3VwXG4gICAgICAvLyAoYHJvbGU6YCwgYGF1dGhlbnRpY2F0ZWRgIGFuZCBgPG9iamVjdElkPmApLlxuICAgICAgY29uc3QgeyB1c2VySWQsIGF1dGggfSA9IGF3YWl0IHRoaXMuZ2V0QXV0aEZvclNlc3Npb25Ub2tlbihcbiAgICAgICAgc3Vic2NyaXB0aW9uSW5mby5zZXNzaW9uVG9rZW4gfHwgY2xpZW50LnNlc3Npb25Ub2tlblxuICAgICAgKTtcbiAgICAgIGlmICh1c2VySWQpIHtcbiAgICAgICAgYWNsR3JvdXAucHVzaCh1c2VySWQpO1xuICAgICAgfVxuICAgICAgY2xpZW50QXV0aCA9IGF1dGg7XG4gICAgfVxuICAgIGlmICghY2xpZW50Lmhhc01hc3RlcktleSkge1xuICAgICAgYXdhaXQgdGhpcy5fbG9hZFJvbGVzRm9yUHJvdGVjdGVkRmllbGRzKGNsYXNzTGV2ZWxQZXJtaXNzaW9ucywgY2xpZW50QXV0aCk7XG4gICAgfVxuICAgIC8vIGBEYXRhYmFzZUNvbnRyb2xsZXIuZmlsdGVyU2Vuc2l0aXZlRGF0YWAgcmVhZHMgdGhlIGNsYXNzIHBlcm1pc3Npb25zIHRocm91Z2hcbiAgICAvLyBgc2NoZW1hLmdldENsYXNzTGV2ZWxQZXJtaXNzaW9ucyhjbGFzc05hbWUpYCBhbmQgZmFsbHMgYmFjayB0byBge31gIHdoZW4gdGhlXG4gICAgLy8gYXJndW1lbnQgZG9lcyBub3QgZXhwb3NlIHRoYXQgbWV0aG9kLiBUaGUgTGl2ZVF1ZXJ5IHNlcnZlciBvbmx5IGV2ZXIgaG9sZHNcbiAgICAvLyB0aGUgc2VyaWFsaXplZCBDTFAgZnJvbSB0aGUgcHVibGlzaGVkIG1lc3NhZ2UgYW5kIGhhcyBubyBgU2NoZW1hQ29udHJvbGxlcmBcbiAgICAvLyBmb3IgdGhlIGNsYXNzLCBzbyBwYXNzaW5nIHRoZSByYXcgQ0xQIHNpbGVudGx5IHNraXBwZWQgdGhlIGVudGlyZVxuICAgIC8vIGB1c2VyRmllbGQ6YCBibG9jazogdGhvc2UgZ3JvdXBzIGludGVyc2VjdCBhZ2FpbnN0IHRoZSBvdGhlciBncm91cHMsIHNvXG4gICAgLy8gc2tpcHBpbmcgdGhlbSBsZWZ0IGZpZWxkcyBwcm90ZWN0ZWQgdGhhdCB0aGUgUkVTVCBwYXRoIHJldHVybnMuIFdyYXAgdGhlIENMUFxuICAgIC8vIHNvIHRoZSBoZWxwZXIgY2FuIHJlYWNoIGl0LiAoYGFkZFByb3RlY3RlZEZpZWxkc2AgYWJvdmUgbmVlZHMgbm8gd3JhcHBlciAtLVxuICAgIC8vIGl0IGFscmVhZHkgZmFsbHMgYmFjayB0byB0cmVhdGluZyBpdHMgYXJndW1lbnQgYXMgdGhlIHBlcm1pc3Npb25zIG9iamVjdC4pXG4gICAgY29uc3Qgc2NoZW1hID0geyBnZXRDbGFzc0xldmVsUGVybWlzc2lvbnM6ICgpID0+IGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyB9O1xuICAgIGNvbnN0IGZpbHRlciA9IG9iaiA9PiB7XG4gICAgICBpZiAoIW9iaikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgcHJvdGVjdGVkRmllbGRzID0gY2xhc3NMZXZlbFBlcm1pc3Npb25zPy5wcm90ZWN0ZWRGaWVsZHMgfHwgW107XG4gICAgICBpZiAoY2xpZW50Lmhhc01hc3RlcktleSkge1xuICAgICAgICBwcm90ZWN0ZWRGaWVsZHMgPSBbXTtcbiAgICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkocHJvdGVjdGVkRmllbGRzKSkge1xuICAgICAgICBwcm90ZWN0ZWRGaWVsZHMgPSBnZXREYXRhYmFzZUNvbnRyb2xsZXIodGhpcy5jb25maWcpLmFkZFByb3RlY3RlZEZpZWxkcyhcbiAgICAgICAgICBjbGFzc0xldmVsUGVybWlzc2lvbnMsXG4gICAgICAgICAgcmVzLm9iamVjdC5jbGFzc05hbWUsXG4gICAgICAgICAgcXVlcnksXG4gICAgICAgICAgYWNsR3JvdXAsXG4gICAgICAgICAgY2xpZW50QXV0aFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIERhdGFiYXNlQ29udHJvbGxlci5maWx0ZXJTZW5zaXRpdmVEYXRhKFxuICAgICAgICBjbGllbnQuaGFzTWFzdGVyS2V5LFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgYWNsR3JvdXAsXG4gICAgICAgIGNsaWVudEF1dGgsXG4gICAgICAgIG9wLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIHJlcy5vYmplY3QuY2xhc3NOYW1lLFxuICAgICAgICBwcm90ZWN0ZWRGaWVsZHMsXG4gICAgICAgIG9iaixcbiAgICAgICAgdGhpcy5jb25maWcucHJvdGVjdGVkRmllbGRzT3duZXJFeGVtcHRcbiAgICAgICk7XG4gICAgfTtcbiAgICByZXMub2JqZWN0ID0gZmlsdGVyKHJlcy5vYmplY3QpO1xuICAgIHJlcy5vcmlnaW5hbCA9IGZpbHRlcihyZXMub3JpZ2luYWwpO1xuICB9XG5cbiAgX2dldENMUE9wZXJhdGlvbihxdWVyeTogYW55KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBxdWVyeSA9PT0gJ29iamVjdCcgJiZcbiAgICAgIE9iamVjdC5rZXlzKHF1ZXJ5KS5sZW5ndGggPT0gMSAmJlxuICAgICAgdHlwZW9mIHF1ZXJ5Lm9iamVjdElkID09PSAnc3RyaW5nJ1xuICAgICAgPyAnZ2V0J1xuICAgICAgOiAnZmluZCc7XG4gIH1cblxuICBhc3luYyBfdmVyaWZ5QUNMKGFjbDogYW55LCB0b2tlbjogc3RyaW5nKSB7XG4gICAgaWYgKCF0b2tlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHsgYXV0aCwgdXNlcklkIH0gPSBhd2FpdCB0aGlzLmdldEF1dGhGb3JTZXNzaW9uVG9rZW4odG9rZW4pO1xuXG4gICAgLy8gR2V0dGluZyB0aGUgc2Vzc2lvbiB0b2tlbiBmYWlsZWRcbiAgICAvLyBUaGlzIG1lYW5zIHRoYXQgbm8gYWRkaXRpb25hbCBhdXRoIGlzIGF2YWlsYWJsZVxuICAgIC8vIEF0IHRoaXMgcG9pbnQsIGp1c3QgYmFpbCBvdXQgYXMgbm8gYWRkaXRpb25hbCB2aXNpYmlsaXR5IGNhbiBiZSBpbmZlcnJlZC5cbiAgICBpZiAoIWF1dGggfHwgIXVzZXJJZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBpc1N1YnNjcmlwdGlvblNlc3Npb25Ub2tlbk1hdGNoZWQgPSBhY2wuZ2V0UmVhZEFjY2Vzcyh1c2VySWQpO1xuICAgIGlmIChpc1N1YnNjcmlwdGlvblNlc3Npb25Ub2tlbk1hdGNoZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSB1c2VyIGhhcyBhbnkgcm9sZXMgdGhhdCBtYXRjaCB0aGUgQUNMXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIFJlc29sdmUgZmFsc2UgcmlnaHQgYXdheSBpZiB0aGUgYWNsIGRvZXNuJ3QgaGF2ZSBhbnkgcm9sZXNcbiAgICAgICAgY29uc3QgYWNsX2hhc19yb2xlcyA9IE9iamVjdC5rZXlzKGFjbC5wZXJtaXNzaW9uc0J5SWQpLnNvbWUoa2V5ID0+IGtleS5zdGFydHNXaXRoKCdyb2xlOicpKTtcbiAgICAgICAgaWYgKCFhY2xfaGFzX3JvbGVzKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvbGVOYW1lcyA9IGF3YWl0IGF1dGguZ2V0VXNlclJvbGVzKCk7XG4gICAgICAgIC8vIEZpbmFsbHksIHNlZSBpZiBhbnkgb2YgdGhlIHVzZXIncyByb2xlcyBhbGxvdyB0aGVtIHJlYWQgYWNjZXNzXG4gICAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlTmFtZXMpIHtcbiAgICAgICAgICAvLyBXZSB1c2UgZ2V0UmVhZEFjY2VzcyBhcyBgcm9sZWAgaXMgaW4gdGhlIGZvcm0gYHJvbGU6cm9sZU5hbWVgXG4gICAgICAgICAgaWYgKGFjbC5nZXRSZWFkQWNjZXNzKHJvbGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0QXV0aEZyb21DbGllbnQoY2xpZW50OiBhbnksIHJlcXVlc3RJZDogbnVtYmVyLCBzZXNzaW9uVG9rZW4/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBnZXRTZXNzaW9uRnJvbUNsaWVudCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbkluZm8gPSBjbGllbnQuZ2V0U3Vic2NyaXB0aW9uSW5mbyhyZXF1ZXN0SWQpO1xuICAgICAgaWYgKHR5cGVvZiBzdWJzY3JpcHRpb25JbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gY2xpZW50LnNlc3Npb25Ub2tlbjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWJzY3JpcHRpb25JbmZvLnNlc3Npb25Ub2tlbiB8fCBjbGllbnQuc2Vzc2lvblRva2VuO1xuICAgIH07XG4gICAgaWYgKCFzZXNzaW9uVG9rZW4pIHtcbiAgICAgIHNlc3Npb25Ub2tlbiA9IGdldFNlc3Npb25Gcm9tQ2xpZW50KCk7XG4gICAgfVxuICAgIGlmICghc2Vzc2lvblRva2VuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHsgYXV0aCB9ID0gYXdhaXQgdGhpcy5nZXRBdXRoRm9yU2Vzc2lvblRva2VuKHNlc3Npb25Ub2tlbik7XG4gICAgcmV0dXJuIGF1dGg7XG4gIH1cblxuICBfY2hlY2tXYXRjaEZpZWxkcyhjbGllbnQ6IGFueSwgcmVxdWVzdElkOiBhbnksIG1lc3NhZ2U6IGFueSkge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbkluZm8gPSBjbGllbnQuZ2V0U3Vic2NyaXB0aW9uSW5mbyhyZXF1ZXN0SWQpO1xuICAgIGNvbnN0IHdhdGNoID0gc3Vic2NyaXB0aW9uSW5mbz8ud2F0Y2g7XG4gICAgaWYgKCF3YXRjaCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IG9iamVjdCA9IG1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0O1xuICAgIGNvbnN0IG9yaWdpbmFsID0gbWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0O1xuICAgIHJldHVybiB3YXRjaC5zb21lKGZpZWxkID0+ICFpc0RlZXBTdHJpY3RFcXVhbChvYmplY3QuZ2V0KGZpZWxkKSwgb3JpZ2luYWw/LmdldChmaWVsZCkpKTtcbiAgfVxuXG4gIGFzeW5jIF9tYXRjaGVzQUNMKGFjbDogYW55LCBjbGllbnQ6IGFueSwgcmVxdWVzdElkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBSZXR1cm4gdHJ1ZSBkaXJlY3RseSBpZiBBQ0wgaXNuJ3QgcHJlc2VudCwgQUNMIGlzIHB1YmxpYyByZWFkLCBvciBjbGllbnQgaGFzIG1hc3RlciBrZXlcbiAgICBpZiAoIWFjbCB8fCBhY2wuZ2V0UHVibGljUmVhZEFjY2VzcygpIHx8IGNsaWVudC5oYXNNYXN0ZXJLZXkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBDaGVjayBzdWJzY3JpcHRpb24gc2Vzc2lvblRva2VuIG1hdGNoZXMgQUNMIGZpcnN0XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uSW5mbyA9IGNsaWVudC5nZXRTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3RJZCk7XG4gICAgaWYgKHR5cGVvZiBzdWJzY3JpcHRpb25JbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YnNjcmlwdGlvblRva2VuID0gc3Vic2NyaXB0aW9uSW5mby5zZXNzaW9uVG9rZW47XG4gICAgY29uc3QgY2xpZW50U2Vzc2lvblRva2VuID0gY2xpZW50LnNlc3Npb25Ub2tlbjtcblxuICAgIGlmIChhd2FpdCB0aGlzLl92ZXJpZnlBQ0woYWNsLCBzdWJzY3JpcHRpb25Ub2tlbikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChhd2FpdCB0aGlzLl92ZXJpZnlBQ0woYWNsLCBjbGllbnRTZXNzaW9uVG9rZW4pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyBfaGFuZGxlQ29ubmVjdChwYXJzZVdlYnNvY2tldDogYW55LCByZXF1ZXN0OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICghdGhpcy5fdmFsaWRhdGVLZXlzKHJlcXVlc3QsIHRoaXMua2V5UGFpcnMpKSB7XG4gICAgICBDbGllbnQucHVzaEVycm9yKHBhcnNlV2Vic29ja2V0LCA0LCAnS2V5IGluIHJlcXVlc3QgaXMgbm90IHZhbGlkJyk7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0tleSBpbiByZXF1ZXN0IGlzIG5vdCB2YWxpZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoYXNNYXN0ZXJLZXkgPSB0aGlzLl9oYXNNYXN0ZXJLZXkocmVxdWVzdCwgdGhpcy5rZXlQYWlycyk7XG4gICAgY29uc3QgY2xpZW50SWQgPSByYW5kb21VVUlEKCk7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IENsaWVudChcbiAgICAgIGNsaWVudElkLFxuICAgICAgcGFyc2VXZWJzb2NrZXQsXG4gICAgICBoYXNNYXN0ZXJLZXksXG4gICAgICByZXF1ZXN0LnNlc3Npb25Ub2tlbixcbiAgICAgIHJlcXVlc3QuaW5zdGFsbGF0aW9uSWRcbiAgICApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXEgPSB7XG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgZXZlbnQ6ICdjb25uZWN0JyxcbiAgICAgICAgY2xpZW50czogdGhpcy5jbGllbnRzLnNpemUsXG4gICAgICAgIHN1YnNjcmlwdGlvbnM6IHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplLFxuICAgICAgICBzZXNzaW9uVG9rZW46IHJlcXVlc3Quc2Vzc2lvblRva2VuLFxuICAgICAgICB1c2VNYXN0ZXJLZXk6IGNsaWVudC5oYXNNYXN0ZXJLZXksXG4gICAgICAgIGluc3RhbGxhdGlvbklkOiByZXF1ZXN0Lmluc3RhbGxhdGlvbklkLFxuICAgICAgICB1c2VyOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgICAgY29uc3QgdHJpZ2dlciA9IGdldFRyaWdnZXIoJ0BDb25uZWN0JywgJ2JlZm9yZUNvbm5lY3QnLCBQYXJzZS5hcHBsaWNhdGlvbklkKTtcbiAgICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICAgIGNvbnN0IGF1dGggPSBhd2FpdCB0aGlzLmdldEF1dGhGcm9tQ2xpZW50KGNsaWVudCwgcmVxdWVzdC5yZXF1ZXN0SWQsIHJlcS5zZXNzaW9uVG9rZW4pO1xuICAgICAgICBpZiAoYXV0aCAmJiBhdXRoLnVzZXIpIHtcbiAgICAgICAgICByZXEudXNlciA9IGF1dGgudXNlcjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBydW5UcmlnZ2VyKHRyaWdnZXIsIGBiZWZvcmVDb25uZWN0LkBDb25uZWN0YCwgcmVxLCBhdXRoKTtcbiAgICAgIH1cbiAgICAgIHBhcnNlV2Vic29ja2V0LmNsaWVudElkID0gY2xpZW50SWQ7XG4gICAgICB0aGlzLmNsaWVudHMuc2V0KHBhcnNlV2Vic29ja2V0LmNsaWVudElkLCBjbGllbnQpO1xuICAgICAgbG9nZ2VyLmluZm8oYENyZWF0ZSBuZXcgY2xpZW50OiAke3BhcnNlV2Vic29ja2V0LmNsaWVudElkfWApO1xuICAgICAgY2xpZW50LnB1c2hDb25uZWN0KCk7XG4gICAgICBydW5MaXZlUXVlcnlFdmVudEhhbmRsZXJzKHJlcSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyb3IgPSByZXNvbHZlRXJyb3IoZSk7XG4gICAgICBDbGllbnQucHVzaEVycm9yKHBhcnNlV2Vic29ja2V0LCBlcnJvci5jb2RlLCBlcnJvci5tZXNzYWdlLCBmYWxzZSk7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgIGBGYWlsZWQgcnVubmluZyBiZWZvcmVDb25uZWN0IGZvciBzZXNzaW9uICR7cmVxdWVzdC5zZXNzaW9uVG9rZW59IHdpdGg6XFxuIEVycm9yOiBgICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShlcnJvcilcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgX2hhc01hc3RlcktleShyZXF1ZXN0OiBhbnksIHZhbGlkS2V5UGFpcnM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsaWRLZXlQYWlycyB8fCB2YWxpZEtleVBhaXJzLnNpemUgPT0gMCB8fCAhdmFsaWRLZXlQYWlycy5oYXMoJ21hc3RlcktleScpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghcmVxdWVzdCB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcXVlc3QsICdtYXN0ZXJLZXknKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gcmVxdWVzdC5tYXN0ZXJLZXkgPT09IHZhbGlkS2V5UGFpcnMuZ2V0KCdtYXN0ZXJLZXknKTtcbiAgfVxuXG4gIF92YWxpZGF0ZUtleXMocmVxdWVzdDogYW55LCB2YWxpZEtleVBhaXJzOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXZhbGlkS2V5UGFpcnMgfHwgdmFsaWRLZXlQYWlycy5zaXplID09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBsZXQgaXNWYWxpZCA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgW2tleSwgc2VjcmV0XSBvZiB2YWxpZEtleVBhaXJzKSB7XG4gICAgICBpZiAoIXJlcXVlc3Rba2V5XSB8fCByZXF1ZXN0W2tleV0gIT09IHNlY3JldCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlzVmFsaWQgPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBpc1ZhbGlkO1xuICB9XG5cbiAgYXN5bmMgX2hhbmRsZVN1YnNjcmliZShwYXJzZVdlYnNvY2tldDogYW55LCByZXF1ZXN0OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIElmIHdlIGNhbiBub3QgZmluZCB0aGlzIGNsaWVudCwgcmV0dXJuIGVycm9yIHRvIGNsaWVudFxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcnNlV2Vic29ja2V0LCAnY2xpZW50SWQnKSkge1xuICAgICAgQ2xpZW50LnB1c2hFcnJvcihcbiAgICAgICAgcGFyc2VXZWJzb2NrZXQsXG4gICAgICAgIDIsXG4gICAgICAgICdDYW4gbm90IGZpbmQgdGhpcyBjbGllbnQsIG1ha2Ugc3VyZSB5b3UgY29ubmVjdCB0byBzZXJ2ZXIgYmVmb3JlIHN1YnNjcmliaW5nJ1xuICAgICAgKTtcbiAgICAgIGxvZ2dlci5lcnJvcignQ2FuIG5vdCBmaW5kIHRoaXMgY2xpZW50LCBtYWtlIHN1cmUgeW91IGNvbm5lY3QgdG8gc2VydmVyIGJlZm9yZSBzdWJzY3JpYmluZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmNsaWVudHMuZ2V0KHBhcnNlV2Vic29ja2V0LmNsaWVudElkKTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSByZXF1ZXN0LnF1ZXJ5LmNsYXNzTmFtZTtcbiAgICBsZXQgYXV0aENhbGxlZCA9IGZhbHNlO1xuICAgIGxldCBjbGllbnRBdXRoO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0cmlnZ2VyID0gZ2V0VHJpZ2dlcihjbGFzc05hbWUsICdiZWZvcmVTdWJzY3JpYmUnLCBQYXJzZS5hcHBsaWNhdGlvbklkKTtcbiAgICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICAgIGNvbnN0IGF1dGggPSBhd2FpdCB0aGlzLmdldEF1dGhGcm9tQ2xpZW50KGNsaWVudCwgcmVxdWVzdC5yZXF1ZXN0SWQsIHJlcXVlc3Quc2Vzc2lvblRva2VuKTtcbiAgICAgICAgYXV0aENhbGxlZCA9IHRydWU7XG4gICAgICAgIGNsaWVudEF1dGggPSBhdXRoO1xuICAgICAgICBpZiAoYXV0aCAmJiBhdXRoLnVzZXIpIHtcbiAgICAgICAgICByZXF1ZXN0LnVzZXIgPSBhdXRoLnVzZXI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJzZVF1ZXJ5ID0gbmV3IFBhcnNlLlF1ZXJ5KGNsYXNzTmFtZSk7XG4gICAgICAgIHBhcnNlUXVlcnkud2l0aEpTT04ocmVxdWVzdC5xdWVyeSk7XG4gICAgICAgIHJlcXVlc3QucXVlcnkgPSBwYXJzZVF1ZXJ5O1xuICAgICAgICBhd2FpdCBydW5UcmlnZ2VyKHRyaWdnZXIsIGBiZWZvcmVTdWJzY3JpYmUuJHtjbGFzc05hbWV9YCwgcmVxdWVzdCwgYXV0aCk7XG5cbiAgICAgICAgY29uc3QgcXVlcnkgPSByZXF1ZXN0LnF1ZXJ5LnRvSlNPTigpO1xuICAgICAgICByZXF1ZXN0LnF1ZXJ5ID0gcXVlcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjbGFzc05hbWUgPT09ICdfU2Vzc2lvbicpIHtcbiAgICAgICAgaWYgKCFhdXRoQ2FsbGVkKSB7XG4gICAgICAgICAgY29uc3QgYXV0aCA9IGF3YWl0IHRoaXMuZ2V0QXV0aEZyb21DbGllbnQoXG4gICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICByZXF1ZXN0LnJlcXVlc3RJZCxcbiAgICAgICAgICAgIHJlcXVlc3Quc2Vzc2lvblRva2VuXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjbGllbnRBdXRoID0gYXV0aDtcbiAgICAgICAgICBpZiAoYXV0aCAmJiBhdXRoLnVzZXIpIHtcbiAgICAgICAgICAgIHJlcXVlc3QudXNlciA9IGF1dGgudXNlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVlc3QudXNlcikge1xuICAgICAgICAgIHJlcXVlc3QucXVlcnkud2hlcmUudXNlciA9IHJlcXVlc3QudXNlci50b1BvaW50ZXIoKTtcbiAgICAgICAgfSBlbHNlIGlmICghcmVxdWVzdC5tYXN0ZXIpIHtcbiAgICAgICAgICBDbGllbnQucHVzaEVycm9yKFxuICAgICAgICAgICAgcGFyc2VXZWJzb2NrZXQsXG4gICAgICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX1NFU1NJT05fVE9LRU4sXG4gICAgICAgICAgICAnSW52YWxpZCBzZXNzaW9uIHRva2VuJyxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgcmVxdWVzdC5yZXF1ZXN0SWRcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gVmFsaWRhdGUgcXVlcnkgY29uZGl0aW9uIGRlcHRoXG4gICAgICBjb25zdCBhcHBDb25maWcgPSBDb25maWcuZ2V0KHRoaXMuY29uZmlnLmFwcElkKTtcbiAgICAgIGlmICghY2xpZW50Lmhhc01hc3RlcktleSkge1xuICAgICAgICBjb25zdCByYyA9IGFwcENvbmZpZy5yZXF1ZXN0Q29tcGxleGl0eTtcbiAgICAgICAgaWYgKHJjICYmIHJjLnF1ZXJ5RGVwdGggIT09IC0xKSB7XG4gICAgICAgICAgY29uc3QgbWF4RGVwdGggPSByYy5xdWVyeURlcHRoO1xuICAgICAgICAgIGNvbnN0IGNoZWNrRGVwdGggPSAobm9kZTogYW55LCBkZXB0aDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGVwdGggPiBtYXhEZXB0aCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSxcbiAgICAgICAgICAgICAgICBgUXVlcnkgY29uZGl0aW9uIG5lc3RpbmcgZGVwdGggZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgZGVwdGggb2YgJHttYXhEZXB0aH1gXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm9kZSA9PT0gbnVsbCB8fCB0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG5vZGUpIHtcbiAgICAgICAgICAgICAgICBjaGVja0RlcHRoKGl0ZW0sIGRlcHRoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBEZXNjZW5kIGludG8gZXZlcnkgdmFsdWUgc28gdGhhdCBsb2dpY2FsIG9wZXJhdG9ycyAoJG9yLyRhbmQvJG5vcilcbiAgICAgICAgICAgIC8vIG5lc3RlZCB1bmRlciBmaWVsZC1sZXZlbCBvcGVyYXRvcnMgKGUuZy4gJGVsZW1NYXRjaCwgJG5vdCkgb3IgcGxhaW5cbiAgICAgICAgICAgIC8vIGZpZWxkIG5hbWVzIGFyZSBzdGlsbCBjb3VudGVkLiBPbmx5IGxvZ2ljYWwgb3BlcmF0b3JzIGluY3JlYXNlIHRoZVxuICAgICAgICAgICAgLy8gZGVwdGgsIHdoaWNoIHByZXNlcnZlcyB0aGUgZG9jdW1lbnRlZCBtZWFuaW5nIG9mIGBxdWVyeURlcHRoYC5cbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG5vZGUpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGlzTG9naWNhbCA9IGtleSA9PT0gJyRvcicgfHwga2V5ID09PSAnJGFuZCcgfHwga2V5ID09PSAnJG5vcic7XG4gICAgICAgICAgICAgIGlmIChpc0xvZ2ljYWwgJiYgIUFycmF5LmlzQXJyYXkobm9kZVtrZXldKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCBgJHtrZXl9IG11c3QgYmUgYW4gYXJyYXlgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjaGVja0RlcHRoKG5vZGVba2V5XSwgaXNMb2dpY2FsID8gZGVwdGggKyAxIDogZGVwdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgY2hlY2tEZXB0aChyZXF1ZXN0LnF1ZXJ5LndoZXJlLCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBhbGxvd1JlZ2V4XG4gICAgICBpZiAoIWNsaWVudC5oYXNNYXN0ZXJLZXkpIHtcbiAgICAgICAgY29uc3QgcmMgPSBhcHBDb25maWcucmVxdWVzdENvbXBsZXhpdHk7XG4gICAgICAgIGlmIChyYyAmJiByYy5hbGxvd1JlZ2V4ID09PSBmYWxzZSkge1xuICAgICAgICAgIGNvbnN0IGNoZWNrUmVnZXggPSAod2hlcmU6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB3aGVyZSAhPT0gJ29iamVjdCcgfHwgd2hlcmUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMod2hlcmUpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnN0cmFpbnQgPSB3aGVyZVtrZXldO1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnN0cmFpbnQgPT09ICdvYmplY3QnICYmIGNvbnN0cmFpbnQgIT09IG51bGwgJiYgY29uc3RyYWludC4kcmVnZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCAnJHJlZ2V4IG9wZXJhdG9yIGlzIG5vdCBhbGxvd2VkJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3Agb2YgWyckb3InLCAnJGFuZCcsICckbm9yJ10pIHtcbiAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkod2hlcmVbb3BdKSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViUXVlcnkgb2Ygd2hlcmVbb3BdKSB7XG4gICAgICAgICAgICAgICAgICBjaGVja1JlZ2V4KHN1YlF1ZXJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGNoZWNrUmVnZXgocmVxdWVzdC5xdWVyeS53aGVyZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgQ0xQIGZvciBzdWJzY3JpYmUgb3BlcmF0aW9uXG4gICAgICBjb25zdCBzY2hlbWFDb250cm9sbGVyID0gYXdhaXQgYXBwQ29uZmlnLmRhdGFiYXNlLmxvYWRTY2hlbWEoKTtcbiAgICAgIGNvbnN0IGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyA9IHNjaGVtYUNvbnRyb2xsZXIuZ2V0Q2xhc3NMZXZlbFBlcm1pc3Npb25zKGNsYXNzTmFtZSk7XG4gICAgICBjb25zdCBvcCA9IHRoaXMuX2dldENMUE9wZXJhdGlvbihyZXF1ZXN0LnF1ZXJ5KTtcbiAgICAgIGNvbnN0IGFjbEdyb3VwID0gWycqJ107XG4gICAgICBpZiAoIWF1dGhDYWxsZWQpIHtcbiAgICAgICAgY29uc3QgYXV0aCA9IGF3YWl0IHRoaXMuZ2V0QXV0aEZyb21DbGllbnQoXG4gICAgICAgICAgY2xpZW50LFxuICAgICAgICAgIHJlcXVlc3QucmVxdWVzdElkLFxuICAgICAgICAgIHJlcXVlc3Quc2Vzc2lvblRva2VuXG4gICAgICAgICk7XG4gICAgICAgIGF1dGhDYWxsZWQgPSB0cnVlO1xuICAgICAgICBjbGllbnRBdXRoID0gYXV0aDtcbiAgICAgICAgaWYgKGF1dGggJiYgYXV0aC51c2VyKSB7XG4gICAgICAgICAgcmVxdWVzdC51c2VyID0gYXV0aC51c2VyO1xuICAgICAgICAgIGFjbEdyb3VwLnB1c2goYXV0aC51c2VyLmlkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0LnVzZXIpIHtcbiAgICAgICAgYWNsR3JvdXAucHVzaChyZXF1ZXN0LnVzZXIuaWQpO1xuICAgICAgfVxuICAgICAgaWYgKHJlcXVlc3QudXNlcikge1xuICAgICAgICBhY2xHcm91cC5wdXNoKFxuICAgICAgICAgIC4uLihhd2FpdCB0aGlzLl9yb2xlc0ZvckNMUE9wZXJhdGlvbihcbiAgICAgICAgICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgIGNsaWVudEF1dGgsXG4gICAgICAgICAgICBvcCxcbiAgICAgICAgICAgIGFwcENvbmZpZ1xuICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBhd2FpdCBTY2hlbWFDb250cm9sbGVyLnZhbGlkYXRlUGVybWlzc2lvbihcbiAgICAgICAgY2xhc3NMZXZlbFBlcm1pc3Npb25zLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGFjbEdyb3VwLFxuICAgICAgICBvcFxuICAgICAgKTtcblxuICAgICAgLy8gQ2hlY2sgcHJvdGVjdGVkIGZpZWxkcyBpbiBXSEVSRSBjbGF1c2UgYW5kIFdBVENIIHBhcmFtZXRlclxuICAgICAgaWYgKCFjbGllbnQuaGFzTWFzdGVyS2V5KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2xvYWRSb2xlc0ZvclByb3RlY3RlZEZpZWxkcyhjbGFzc0xldmVsUGVybWlzc2lvbnMsIGNsaWVudEF1dGgpO1xuICAgICAgICAvLyBgY2xpZW50QXV0aGAgaXMgdW5kZWZpbmVkIG9ubHkgd2hlbiBubyBzZXNzaW9uIHRva2VuIHdhcyBzdXBwbGllZCBvblxuICAgICAgICAvLyBlaXRoZXIgZnJhbWUsIGluIHdoaWNoIGNhc2UgYSBgYmVmb3JlU3Vic2NyaWJlYCB0cmlnZ2VyIGlzIHRoZSBvbmx5IHdheVxuICAgICAgICAvLyBgcmVxdWVzdC51c2VyYCBjYW4gYmUgc2V0LiBUaGVyZSBpcyBubyBzZXNzaW9uIHRvIHJlc29sdmUgcm9sZXMgZnJvbSBmb3JcbiAgICAgICAgLy8gc3VjaCBhIHRyaWdnZXItYXNzaWduZWQgdXNlciwgc28gYHJvbGU6YCBncm91cHMgY2Fubm90IGJlIGFwcGxpZWQgdG8gaXQuXG4gICAgICAgIGNvbnN0IGF1dGggPSByZXF1ZXN0LnVzZXIgPyBjbGllbnRBdXRoIHx8IHsgdXNlcjogcmVxdWVzdC51c2VyLCB1c2VyUm9sZXM6IFtdIH0gOiB7fTtcbiAgICAgICAgY29uc3QgcHJvdGVjdGVkRmllbGRzID1cbiAgICAgICAgICBhcHBDb25maWcuZGF0YWJhc2UuYWRkUHJvdGVjdGVkRmllbGRzKFxuICAgICAgICAgICAgY2xhc3NMZXZlbFBlcm1pc3Npb25zLFxuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICAgcmVxdWVzdC5xdWVyeS53aGVyZSxcbiAgICAgICAgICAgIGFjbEdyb3VwLFxuICAgICAgICAgICAgYXV0aFxuICAgICAgICAgICkgfHwgW107XG4gICAgICAgIGlmIChwcm90ZWN0ZWRGaWVsZHMubGVuZ3RoID4gMCAmJiByZXF1ZXN0LnF1ZXJ5LndoZXJlKSB7XG4gICAgICAgICAgY29uc3QgY2hlY2tXaGVyZSA9ICh3aGVyZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHdoZXJlICE9PSAnb2JqZWN0JyB8fCB3aGVyZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHdoZXJlS2V5IG9mIE9iamVjdC5rZXlzKHdoZXJlKSkge1xuICAgICAgICAgICAgICBjb25zdCByb290RmllbGQgPSB3aGVyZUtleS5zcGxpdCgnLicpWzBdO1xuICAgICAgICAgICAgICBpZiAocHJvdGVjdGVkRmllbGRzLmluY2x1ZGVzKHdoZXJlS2V5KSB8fCBwcm90ZWN0ZWRGaWVsZHMuaW5jbHVkZXMocm9vdEZpZWxkKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgICAgICAgICAgICAnUGVybWlzc2lvbiBkZW5pZWQnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBvcCBvZiBbJyRvcicsICckYW5kJywgJyRub3InXSkge1xuICAgICAgICAgICAgICBpZiAod2hlcmVbb3BdICE9PSB1bmRlZmluZWQgJiYgIUFycmF5LmlzQXJyYXkod2hlcmVbb3BdKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCBgJHtvcH0gbXVzdCBiZSBhbiBhcnJheWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHdoZXJlW29wXSkpIHtcbiAgICAgICAgICAgICAgICB3aGVyZVtvcF0uZm9yRWFjaCgoc3ViUXVlcnk6IGFueSkgPT4gY2hlY2tXaGVyZShzdWJRdWVyeSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjaGVja1doZXJlKHJlcXVlc3QucXVlcnkud2hlcmUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm90ZWN0ZWRGaWVsZHMubGVuZ3RoID4gMCAmJiBBcnJheS5pc0FycmF5KHJlcXVlc3QucXVlcnkud2F0Y2gpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCB3YXRjaEZpZWxkIG9mIHJlcXVlc3QucXVlcnkud2F0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvb3RGaWVsZCA9IHdhdGNoRmllbGQuc3BsaXQoJy4nKVswXTtcbiAgICAgICAgICAgIGlmIChwcm90ZWN0ZWRGaWVsZHMuaW5jbHVkZXMod2F0Y2hGaWVsZCkgfHwgcHJvdGVjdGVkRmllbGRzLmluY2x1ZGVzKHJvb3RGaWVsZCkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgICAgICAgICAgJ1Blcm1pc3Npb24gZGVuaWVkJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSByZWdleCBwYXR0ZXJucyBpbiB0aGUgc3Vic2NyaXB0aW9uIHF1ZXJ5XG4gICAgICB0aGlzLl92YWxpZGF0ZVF1ZXJ5Q29uc3RyYWludHMocmVxdWVzdC5xdWVyeS53aGVyZSk7XG5cbiAgICAgIC8vIElmIHRoaXMgY2xpZW50IGFscmVhZHkgaGFzIGEgc3Vic2NyaXB0aW9uIHJlZ2lzdGVyZWQgdW5kZXIgdGhpc1xuICAgICAgLy8gcmVxdWVzdElkLCByZXBsYWNlIGl0IGJ5IHRlYXJpbmcgZG93biB0aGUgcHJldmlvdXMgc3Vic2NyaXB0aW9uIGJlZm9yZVxuICAgICAgLy8gY3JlYXRpbmcgdGhlIG5ldyBvbmUuIFRoZSBjbGllbnQtc2lkZSBtZXRhZGF0YSBtYXAgaXMga2V5ZWQgb25seSBieVxuICAgICAgLy8gcmVxdWVzdElkLCBzbyBhIGR1cGxpY2F0ZSBgc3Vic2NyaWJlYCBmcmFtZSB3b3VsZCBvdGhlcndpc2Ugb3ZlcndyaXRlIGl0XG4gICAgICAvLyB3aGlsZSB0aGUgcHJldmlvdXMgU3Vic2NyaXB0aW9uIHN0YXlzIGluIHRoZSBzZXJ2ZXItd2lkZSBtYXAsIGxlYWtpbmcgaXRcbiAgICAgIC8vIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHByb2Nlc3MgKGRpc2Nvbm5lY3QgY2xlYW51cCBvbmx5IHdhbGtzIHRoZVxuICAgICAgLy8gc3Vydml2aW5nIGNsaWVudCBtZXRhZGF0YSBhbmQgbmV2ZXIgcmVhY2hlcyB0aGUgb3JwaGFuZWQgc3Vic2NyaXB0aW9uKS5cbiAgICAgIGNvbnN0IHByZXZpb3VzU3Vic2NyaXB0aW9uSW5mbyA9IGNsaWVudC5nZXRTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3QucmVxdWVzdElkKTtcbiAgICAgIGlmIChwcmV2aW91c1N1YnNjcmlwdGlvbkluZm8pIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNTdWJzY3JpcHRpb24gPSBwcmV2aW91c1N1YnNjcmlwdGlvbkluZm8uc3Vic2NyaXB0aW9uO1xuICAgICAgICBwcmV2aW91c1N1YnNjcmlwdGlvbi5kZWxldGVDbGllbnRTdWJzY3JpcHRpb24ocGFyc2VXZWJzb2NrZXQuY2xpZW50SWQsIHJlcXVlc3QucmVxdWVzdElkKTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNDbGFzc1N1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnMuZ2V0KHByZXZpb3VzU3Vic2NyaXB0aW9uLmNsYXNzTmFtZSk7XG4gICAgICAgIGlmIChwcmV2aW91c0NsYXNzU3Vic2NyaXB0aW9ucykge1xuICAgICAgICAgIGlmICghcHJldmlvdXNTdWJzY3JpcHRpb24uaGFzU3Vic2NyaWJpbmdDbGllbnQoKSkge1xuICAgICAgICAgICAgcHJldmlvdXNDbGFzc1N1YnNjcmlwdGlvbnMuZGVsZXRlKHByZXZpb3VzU3Vic2NyaXB0aW9uLmhhc2gpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocHJldmlvdXNDbGFzc1N1YnNjcmlwdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmRlbGV0ZShwcmV2aW91c1N1YnNjcmlwdGlvbi5jbGFzc05hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBHZXQgc3Vic2NyaXB0aW9uIGZyb20gc3Vic2NyaXB0aW9ucywgY3JlYXRlIG9uZSBpZiBuZWNlc3NhcnlcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbkhhc2ggPSBxdWVyeUhhc2gocmVxdWVzdC5xdWVyeSk7XG4gICAgICAvLyBBZGQgY2xhc3NOYW1lIHRvIHN1YnNjcmlwdGlvbnMgaWYgbmVjZXNzYXJ5XG5cbiAgICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zLmhhcyhjbGFzc05hbWUpKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5zZXQoY2xhc3NOYW1lLCBuZXcgTWFwKCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xhc3NTdWJzY3JpcHRpb25zID0gdGhpcy5zdWJzY3JpcHRpb25zLmdldChjbGFzc05hbWUpO1xuICAgICAgbGV0IHN1YnNjcmlwdGlvbjtcbiAgICAgIGlmIChjbGFzc1N1YnNjcmlwdGlvbnMuaGFzKHN1YnNjcmlwdGlvbkhhc2gpKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbiA9IGNsYXNzU3Vic2NyaXB0aW9ucy5nZXQoc3Vic2NyaXB0aW9uSGFzaCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKGNsYXNzTmFtZSwgcmVxdWVzdC5xdWVyeS53aGVyZSwgc3Vic2NyaXB0aW9uSGFzaCk7XG4gICAgICAgIGNsYXNzU3Vic2NyaXB0aW9ucy5zZXQoc3Vic2NyaXB0aW9uSGFzaCwgc3Vic2NyaXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHN1YnNjcmlwdGlvbkluZm8gdG8gY2xpZW50XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb25JbmZvOiBhbnkgPSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbjogc3Vic2NyaXB0aW9uLFxuICAgICAgfTtcbiAgICAgIC8vIEFkZCBzZWxlY3RlZCBmaWVsZHMsIHNlc3Npb25Ub2tlbiBhbmQgaW5zdGFsbGF0aW9uSWQgZm9yIHRoaXMgc3Vic2NyaXB0aW9uIGlmIG5lY2Vzc2FyeVxuICAgICAgaWYgKHJlcXVlc3QucXVlcnkua2V5cykge1xuICAgICAgICBzdWJzY3JpcHRpb25JbmZvLmtleXMgPSBBcnJheS5pc0FycmF5KHJlcXVlc3QucXVlcnkua2V5cylcbiAgICAgICAgICA/IHJlcXVlc3QucXVlcnkua2V5c1xuICAgICAgICAgIDogcmVxdWVzdC5xdWVyeS5rZXlzLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgICBpZiAocmVxdWVzdC5xdWVyeS53YXRjaCkge1xuICAgICAgICBzdWJzY3JpcHRpb25JbmZvLndhdGNoID0gcmVxdWVzdC5xdWVyeS53YXRjaDtcbiAgICAgIH1cbiAgICAgIGlmIChyZXF1ZXN0LnNlc3Npb25Ub2tlbikge1xuICAgICAgICBzdWJzY3JpcHRpb25JbmZvLnNlc3Npb25Ub2tlbiA9IHJlcXVlc3Quc2Vzc2lvblRva2VuO1xuICAgICAgfVxuICAgICAgY2xpZW50LmFkZFN1YnNjcmlwdGlvbkluZm8ocmVxdWVzdC5yZXF1ZXN0SWQsIHN1YnNjcmlwdGlvbkluZm8pO1xuXG4gICAgICAvLyBBZGQgY2xpZW50SWQgdG8gc3Vic2NyaXB0aW9uXG4gICAgICBzdWJzY3JpcHRpb24uYWRkQ2xpZW50U3Vic2NyaXB0aW9uKHBhcnNlV2Vic29ja2V0LmNsaWVudElkLCByZXF1ZXN0LnJlcXVlc3RJZCk7XG5cbiAgICAgIGNsaWVudC5wdXNoU3Vic2NyaWJlKHJlcXVlc3QucmVxdWVzdElkKTtcblxuICAgICAgbG9nZ2VyLnZlcmJvc2UoXG4gICAgICAgIGBDcmVhdGUgY2xpZW50ICR7cGFyc2VXZWJzb2NrZXQuY2xpZW50SWR9IG5ldyBzdWJzY3JpcHRpb246ICR7cmVxdWVzdC5yZXF1ZXN0SWR9YFxuICAgICAgKTtcbiAgICAgIGxvZ2dlci52ZXJib3NlKCdDdXJyZW50IGNsaWVudCBudW1iZXI6ICVkJywgdGhpcy5jbGllbnRzLnNpemUpO1xuICAgICAgcnVuTGl2ZVF1ZXJ5RXZlbnRIYW5kbGVycyh7XG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgZXZlbnQ6ICdzdWJzY3JpYmUnLFxuICAgICAgICBjbGllbnRzOiB0aGlzLmNsaWVudHMuc2l6ZSxcbiAgICAgICAgc3Vic2NyaXB0aW9uczogdGhpcy5zdWJzY3JpcHRpb25zLnNpemUsXG4gICAgICAgIHNlc3Npb25Ub2tlbjogcmVxdWVzdC5zZXNzaW9uVG9rZW4sXG4gICAgICAgIHVzZU1hc3RlcktleTogY2xpZW50Lmhhc01hc3RlcktleSxcbiAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGNsaWVudC5pbnN0YWxsYXRpb25JZCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gcmVzb2x2ZUVycm9yKGUpO1xuICAgICAgQ2xpZW50LnB1c2hFcnJvcihwYXJzZVdlYnNvY2tldCwgZXJyb3IuY29kZSwgZXJyb3IubWVzc2FnZSwgZmFsc2UsIHJlcXVlc3QucmVxdWVzdElkKTtcbiAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgYEZhaWxlZCBydW5uaW5nIGJlZm9yZVN1YnNjcmliZSBvbiAke2NsYXNzTmFtZX0gZm9yIHNlc3Npb24gJHtyZXF1ZXN0LnNlc3Npb25Ub2tlbn0gd2l0aDpcXG4gRXJyb3I6IGAgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGVycm9yKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBfaGFuZGxlVXBkYXRlU3Vic2NyaXB0aW9uKHBhcnNlV2Vic29ja2V0OiBhbnksIHJlcXVlc3Q6IGFueSk6IGFueSB7XG4gICAgdGhpcy5faGFuZGxlVW5zdWJzY3JpYmUocGFyc2VXZWJzb2NrZXQsIHJlcXVlc3QsIGZhbHNlKTtcbiAgICB0aGlzLl9oYW5kbGVTdWJzY3JpYmUocGFyc2VXZWJzb2NrZXQsIHJlcXVlc3QpO1xuICB9XG5cbiAgX2hhbmRsZVVuc3Vic2NyaWJlKHBhcnNlV2Vic29ja2V0OiBhbnksIHJlcXVlc3Q6IGFueSwgbm90aWZ5Q2xpZW50OiBib29sZWFuID0gdHJ1ZSk6IGFueSB7XG4gICAgLy8gSWYgd2UgY2FuIG5vdCBmaW5kIHRoaXMgY2xpZW50LCByZXR1cm4gZXJyb3IgdG8gY2xpZW50XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFyc2VXZWJzb2NrZXQsICdjbGllbnRJZCcpKSB7XG4gICAgICBDbGllbnQucHVzaEVycm9yKFxuICAgICAgICBwYXJzZVdlYnNvY2tldCxcbiAgICAgICAgMixcbiAgICAgICAgJ0NhbiBub3QgZmluZCB0aGlzIGNsaWVudCwgbWFrZSBzdXJlIHlvdSBjb25uZWN0IHRvIHNlcnZlciBiZWZvcmUgdW5zdWJzY3JpYmluZydcbiAgICAgICk7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICdDYW4gbm90IGZpbmQgdGhpcyBjbGllbnQsIG1ha2Ugc3VyZSB5b3UgY29ubmVjdCB0byBzZXJ2ZXIgYmVmb3JlIHVuc3Vic2NyaWJpbmcnXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0SWQgPSByZXF1ZXN0LnJlcXVlc3RJZDtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmNsaWVudHMuZ2V0KHBhcnNlV2Vic29ja2V0LmNsaWVudElkKTtcbiAgICBpZiAodHlwZW9mIGNsaWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIENsaWVudC5wdXNoRXJyb3IoXG4gICAgICAgIHBhcnNlV2Vic29ja2V0LFxuICAgICAgICAyLFxuICAgICAgICAnQ2Fubm90IGZpbmQgY2xpZW50IHdpdGggY2xpZW50SWQgJyArXG4gICAgICAgICAgcGFyc2VXZWJzb2NrZXQuY2xpZW50SWQgK1xuICAgICAgICAgICcuIE1ha2Ugc3VyZSB5b3UgY29ubmVjdCB0byBsaXZlIHF1ZXJ5IHNlcnZlciBiZWZvcmUgdW5zdWJzY3JpYmluZy4nXG4gICAgICApO1xuICAgICAgbG9nZ2VyLmVycm9yKCdDYW4gbm90IGZpbmQgdGhpcyBjbGllbnQgJyArIHBhcnNlV2Vic29ja2V0LmNsaWVudElkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJzY3JpcHRpb25JbmZvID0gY2xpZW50LmdldFN1YnNjcmlwdGlvbkluZm8ocmVxdWVzdElkKTtcbiAgICBpZiAodHlwZW9mIHN1YnNjcmlwdGlvbkluZm8gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBDbGllbnQucHVzaEVycm9yKFxuICAgICAgICBwYXJzZVdlYnNvY2tldCxcbiAgICAgICAgMixcbiAgICAgICAgJ0Nhbm5vdCBmaW5kIHN1YnNjcmlwdGlvbiB3aXRoIGNsaWVudElkICcgK1xuICAgICAgICAgIHBhcnNlV2Vic29ja2V0LmNsaWVudElkICtcbiAgICAgICAgICAnIHN1YnNjcmlwdGlvbklkICcgK1xuICAgICAgICAgIHJlcXVlc3RJZCArXG4gICAgICAgICAgJy4gTWFrZSBzdXJlIHlvdSBzdWJzY3JpYmUgdG8gbGl2ZSBxdWVyeSBzZXJ2ZXIgYmVmb3JlIHVuc3Vic2NyaWJpbmcuJ1xuICAgICAgKTtcbiAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgJ0NhbiBub3QgZmluZCBzdWJzY3JpcHRpb24gd2l0aCBjbGllbnRJZCAnICtcbiAgICAgICAgICBwYXJzZVdlYnNvY2tldC5jbGllbnRJZCArXG4gICAgICAgICAgJyBzdWJzY3JpcHRpb25JZCAnICtcbiAgICAgICAgICByZXF1ZXN0SWRcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIHN1YnNjcmlwdGlvbiBmcm9tIGNsaWVudFxuICAgIGNsaWVudC5kZWxldGVTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3RJZCk7XG4gICAgLy8gUmVtb3ZlIGNsaWVudCBmcm9tIHN1YnNjcmlwdGlvblxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbkluZm8uc3Vic2NyaXB0aW9uO1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHN1YnNjcmlwdGlvbi5jbGFzc05hbWU7XG4gICAgc3Vic2NyaXB0aW9uLmRlbGV0ZUNsaWVudFN1YnNjcmlwdGlvbihwYXJzZVdlYnNvY2tldC5jbGllbnRJZCwgcmVxdWVzdElkKTtcbiAgICAvLyBJZiB0aGVyZSBpcyBubyBjbGllbnQgd2hpY2ggaXMgc3Vic2NyaWJpbmcgdGhpcyBzdWJzY3JpcHRpb24sIHJlbW92ZSBpdCBmcm9tIHN1YnNjcmlwdGlvbnNcbiAgICBjb25zdCBjbGFzc1N1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnMuZ2V0KGNsYXNzTmFtZSk7XG4gICAgaWYgKGNsYXNzU3Vic2NyaXB0aW9ucykge1xuICAgICAgaWYgKCFzdWJzY3JpcHRpb24uaGFzU3Vic2NyaWJpbmdDbGllbnQoKSkge1xuICAgICAgICBjbGFzc1N1YnNjcmlwdGlvbnMuZGVsZXRlKHN1YnNjcmlwdGlvbi5oYXNoKTtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHN1YnNjcmlwdGlvbnMgdW5kZXIgdGhpcyBjbGFzcywgcmVtb3ZlIGl0IGZyb20gc3Vic2NyaXB0aW9uc1xuICAgICAgaWYgKGNsYXNzU3Vic2NyaXB0aW9ucy5zaXplID09PSAwKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5kZWxldGUoY2xhc3NOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcnVuTGl2ZVF1ZXJ5RXZlbnRIYW5kbGVycyh7XG4gICAgICBjbGllbnQsXG4gICAgICBldmVudDogJ3Vuc3Vic2NyaWJlJyxcbiAgICAgIGNsaWVudHM6IHRoaXMuY2xpZW50cy5zaXplLFxuICAgICAgc3Vic2NyaXB0aW9uczogdGhpcy5zdWJzY3JpcHRpb25zLnNpemUsXG4gICAgICBzZXNzaW9uVG9rZW46IHN1YnNjcmlwdGlvbkluZm8uc2Vzc2lvblRva2VuLFxuICAgICAgdXNlTWFzdGVyS2V5OiBjbGllbnQuaGFzTWFzdGVyS2V5LFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IGNsaWVudC5pbnN0YWxsYXRpb25JZCxcbiAgICB9KTtcblxuICAgIGlmICghbm90aWZ5Q2xpZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2xpZW50LnB1c2hVbnN1YnNjcmliZShyZXF1ZXN0LnJlcXVlc3RJZCk7XG5cbiAgICBsb2dnZXIudmVyYm9zZShcbiAgICAgIGBEZWxldGUgY2xpZW50OiAke3BhcnNlV2Vic29ja2V0LmNsaWVudElkfSB8IHN1YnNjcmlwdGlvbjogJHtyZXF1ZXN0LnJlcXVlc3RJZH1gXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgeyBQYXJzZUxpdmVRdWVyeVNlcnZlciB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxHQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxhQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxPQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxxQkFBQSxHQUFBSixPQUFBO0FBRUEsSUFBQUssT0FBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sY0FBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sV0FBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsWUFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsaUJBQUEsR0FBQVYsc0JB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QixrQkFBa0IsR0FDbEJNLFNBQ0osQ0FBQztNQUNEO0lBQ0Y7O0lBRUE7SUFDQS9DLE1BQU0sQ0FBQ3dQLHNCQUFzQixDQUFDek0sU0FBUyxDQUFDO0lBQ3hDO0lBQ0EsTUFBTVQsWUFBWSxHQUFHNEUsZ0JBQWdCLENBQUM1RSxZQUFZO0lBQ2xELE1BQU1aLFNBQVMsR0FBR1ksWUFBWSxDQUFDWixTQUFTO0lBQ3hDWSxZQUFZLENBQUM4RSx3QkFBd0IsQ0FBQ2xJLGNBQWMsQ0FBQ3VELFFBQVEsRUFBRU0sU0FBUyxDQUFDO0lBQ3pFO0lBQ0EsTUFBTVosa0JBQWtCLEdBQUcsSUFBSSxDQUFDMUUsYUFBYSxDQUFDMkUsR0FBRyxDQUFDVixTQUFTLENBQUM7SUFDNUQsSUFBSVMsa0JBQWtCLEVBQUU7TUFDdEIsSUFBSSxDQUFDRyxZQUFZLENBQUMrRSxvQkFBb0IsQ0FBQyxDQUFDLEVBQUU7UUFDeENsRixrQkFBa0IsQ0FBQzhFLE1BQU0sQ0FBQzNFLFlBQVksQ0FBQ3FELElBQUksQ0FBQztNQUM5QztNQUNBO01BQ0EsSUFBSXhELGtCQUFrQixDQUFDRCxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ2pDLElBQUksQ0FBQ3pFLGFBQWEsQ0FBQ3dKLE1BQU0sQ0FBQ3ZGLFNBQVMsQ0FBQztNQUN0QztJQUNGO0lBQ0EsSUFBQXNGLG1DQUF5QixFQUFDO01BQ3hCaEgsTUFBTTtNQUNONEQsS0FBSyxFQUFFLGFBQWE7TUFDcEJyRyxPQUFPLEVBQUUsSUFBSSxDQUFDQSxPQUFPLENBQUMyRSxJQUFJO01BQzFCekUsYUFBYSxFQUFFLElBQUksQ0FBQ0EsYUFBYSxDQUFDeUUsSUFBSTtNQUN0QzJCLFlBQVksRUFBRXFELGdCQUFnQixDQUFDckQsWUFBWTtNQUMzQ0UsWUFBWSxFQUFFL0QsTUFBTSxDQUFDZ0UsWUFBWTtNQUNqQ0MsY0FBYyxFQUFFakUsTUFBTSxDQUFDaUU7SUFDekIsQ0FBQyxDQUFDO0lBRUYsSUFBSSxDQUFDc0wsWUFBWSxFQUFFO01BQ2pCO0lBQ0Y7SUFFQXZQLE1BQU0sQ0FBQ3lQLGVBQWUsQ0FBQ25KLE9BQU8sQ0FBQ3ZELFNBQVMsQ0FBQztJQUV6QzVFLGVBQU0sQ0FBQ0MsT0FBTyxDQUNaLGtCQUFrQmMsY0FBYyxDQUFDdUQsUUFBUSxvQkFBb0I2RCxPQUFPLENBQUN2RCxTQUFTLEVBQ2hGLENBQUM7RUFDSDtBQUNGO0FBQUMyTSxPQUFBLENBQUF4UyxvQkFBQSxHQUFBQSxvQkFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|