sliftutils 1.7.84 → 1.7.85
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.
- package/index.d.ts +4 -1
- package/package.json +1 -1
- package/storage/IArchives.d.ts +1 -0
- package/storage/IArchives.ts +2 -0
- package/storage/dist/IArchives.ts.cache +2 -2
- package/storage/remoteStorage/blobStore.d.ts +3 -1
- package/storage/remoteStorage/blobStore.ts +52 -21
- package/storage/remoteStorage/dist/blobStore.ts.cache +48 -23
- package/storage/remoteStorage/dist/storageServerState.ts.cache +4 -2
- package/storage/remoteStorage/storageServerState.ts +2 -0
|
@@ -361,6 +361,7 @@ function buildStore(account, bucketName, planStore) {
|
|
|
361
361
|
route: spec.route,
|
|
362
362
|
noFullSync: spec.noFullSync,
|
|
363
363
|
intermediate: (_b = spec.sourceConfig) === null || _b === void 0 ? void 0 : _b.intermediate,
|
|
364
|
+
sourceConfig: spec.sourceConfig,
|
|
364
365
|
identity: sourceIdentity(spec.sourceConfig),
|
|
365
366
|
});
|
|
366
367
|
});
|
|
@@ -464,6 +465,7 @@ async function checkRoutingChanged(account, bucketName, config) {
|
|
|
464
465
|
route: spec.route,
|
|
465
466
|
noFullSync: spec.noFullSync,
|
|
466
467
|
intermediate: sourceConfig.intermediate,
|
|
468
|
+
sourceConfig,
|
|
467
469
|
create: () => (0, createArchives_1.createApiArchives)(sourceConfig),
|
|
468
470
|
};
|
|
469
471
|
}), planStore.entries);
|
|
@@ -942,5 +944,5 @@ function getLocalArchives(account, bucketName, sourceConfig) {
|
|
|
942
944
|
return archives;
|
|
943
945
|
}
|
|
944
946
|
exports.getLocalArchives = getLocalArchives;
|
|
945
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZVNlcnZlclN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RvcmFnZVNlcnZlclN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdEQUF3QjtBQUN4Qiw0Q0FBb0I7QUFDcEIseURBQW1EO0FBQ25ELG1EQUFnRDtBQUNoRCwyREFBK0Q7QUFDL0Qsa0RBQStDO0FBQy9DLDJDQUF1SDtBQUN2SCw0Q0FHc0I7QUFDdEIsaURBQWlNO0FBQ2pNLCtEQUFzTDtBQUN0TCxxREFBMkQ7QUFDM0QscURBQWlGO0FBQ2pGLDJEQUE4RDtBQUM5RCxpREFBNkU7QUFDN0UsNkNBQXdJO0FBQ3hJLDJDQUF3RztBQTBCeEcsbUxBQW1MO0FBQ25MLFNBQVMsZUFBZSxDQUFDLEtBQWM7SUFDbkMsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7SUFDL0QsQ0FBQztJQUNELElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBZ0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUMvRixJQUFBLFdBQUksRUFBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixPQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxF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YSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QyxJQUFJLFFBQVE7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUM5QixJQUFJLFFBQVEsR0FBRyxJQUFJLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDN0UsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakMsT0FBTyxRQUFRLENBQUM7QUFDcEIsQ0FBQztBQVBELDRDQU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IGxhenkgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9jYWNoaW5nXCI7XG5pbXBvcnQgeyBzb3J0IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvbWlzY1wiO1xuaW1wb3J0IHsgcnVuSW5maW5pdGVQb2xsIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvYmF0Y2hpbmdcIjtcbmltcG9ydCB7IEFyY2hpdmVzRGlzayB9IGZyb20gXCIuLi9BcmNoaXZlc0Rpc2tcIjtcbmltcG9ydCB7IEJsb2JTdG9yZSwgUmF3RGlza1N0b3JlLCBJQnVja2V0U3RvcmUsIERFRkFVTFRfRkFTVF9XUklURV9ERUxBWSwgV0lORE9XX0VORF9GTFVTSF9NQVJHSU4gfSBmcm9tIFwiLi9ibG9iU3RvcmVcIjtcbmltcG9ydCB7XG4gICAgUmVtb3RlQ29uZmlnLCBIb3N0ZWRDb25maWcsIFNvdXJjZUNvbmZpZywgSUFyY2hpdmVzLCBBcmNoaXZlc1NvdXJjZSwgQXJjaGl2ZXNDb25maWcsIEFyY2hpdmVzU3luY1N0YXR1cyxcbiAgICBBcmNoaXZlRmlsZUluZm8sIENoYW5nZXNBZnRlckNvbmZpZywgRGVsQ29uZmlnLCBGaW5kQ29uZmlnLCBHZXRDb25maWcsIEdldEluZm9Db25maWcsIFNldENvbmZpZywgU3luY0FjdGl2aXR5LCBGVUxMX1JPVVRFLFxufSBmcm9tIFwiLi4vSUFyY2hpdmVzXCI7XG5pbXBvcnQgeyBST1VUSU5HX0ZJTEUsIHBhcnNlUm91dGluZ0RhdGEsIHNlcmlhbGl6ZVJlbW90ZUNvbmZpZywgcGFyc2VIb3N0ZWRVcmwsIHJlcGxhY2VIb3N0ZWRVcmxQb3J0LCBidWlsZEZpbGVVcmwsIGdldENvbmZpZ1ZlcnNpb24sIHJvdXRlSW50ZXJzZWN0aW9uLCBub3JtYWxpemVTb3VyY2UgfSBmcm9tIFwiLi9yZW1vdGVDb25maWdcIjtcbmltcG9ydCB7IGluamVjdEludGVybWVkaWF0ZVNvdXJjZSwgZXhwaXJlSW50ZXJtZWRpYXRlU291cmNlcywgZ2V0SW50ZXJtZWRpYXRlU291cmNlcywgZmluZFNwbGl0VXJsLCBuZXh0SW50ZXJtZWRpYXRlVmVyc2lvbiwgSU5URVJNRURJQVRFX0VYUElSRV9HUkFDRSB9IGZyb20gXCIuL2ludGVybWVkaWF0ZVNvdXJjZXNcIjtcbmltcG9ydCB7IGdldFRha2VvdmVySW50ZXJtZWRpYXRlIH0gZnJvbSBcIi4vZGVwbG95VGFrZW92ZXJcIjtcbmltcG9ydCB7IGNyZWF0ZUFwaUFyY2hpdmVzLCBsaXN0U2VydmVyQWN0aXZlQnVja2V0S2V5cyB9IGZyb20gXCIuL2NyZWF0ZUFyY2hpdmVzXCI7XG5pbXBvcnQgeyBicm9hZGNhc3RSb3V0aW5nQ2hhbmdlZCB9IGZyb20gXCIuL3N0b3JhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgeyBnZXRTdG9yYWdlU2VydmVyQ29uZmlnLCBhc3NlcnRXcml0ZXNBbGxvd2VkIH0gZnJvbSBcIi4vc2VydmVyQ29uZmlnXCI7XG5pbXBvcnQgeyBnZXRCdWNrZXRGb2xkZXIsIHJlYWRSb3V0aW5nRmlsZSwgcmVhZFJvdXRpbmdGcm9tRGlzaywgZ2V0Um91dGluZ0ZpbGVSZXN1bHQsIGdldERpc2tJbmZvLCBCdWNrZXREaXNrSW5mbyB9IGZyb20gXCIuL2J1Y2tldERpc2tcIjtcbmltcG9ydCB7IGNvbXB1dGVTdG9yZVBsYW4sIGZpbmRTZWxmSW5kZXhlcywgU3RvcmVQbGFuLCBTdG9yZVBsYW5TdG9yZSwgU2VsZlN1bW1hcnkgfSBmcm9tIFwiLi9zdG9yZVBsYW5cIjtcblxuLy8gVGhlIHN0b3JhZ2Ugc2VydmVyJ3MgYnVja2V0IGxpZmVjeWNsZTogdGhlIG1hcCBvZiBsb2FkZWQgYnVja2V0cyAoZWFjaCA9IGl0cyByb3V0aW5nIGNvbmZpZyArIG9uZSBCbG9iU3RvcmUgcGVyIHJvdXRlKSwga2VlcGluZyB0aGVtIGN1cnJlbnQgKHJvdXRpbmcgcmVsb2Fkcywgd2luZG93LWJvdW5kYXJ5IHJlYnVpbGRzLCBib3VuZGFyeSBzY2FucyksIHdyaXRpbmcvcHJvcGFnYXRpbmcgcm91dGluZyBjb25maWdzLCBkZXBsb3ktc3dpdGNob3ZlciBtYWludGVuYW5jZSwgYW5kIHRoZSBzZXJ2ZXItbGV2ZWwgYnVja2V0IGxpc3RpbmdzLiBTdG9yZSBzZWxlY3Rpb24gKHNvdXJjZUNvbmZpZyAtPiBzdG9yZSkgbGl2ZXMgaGVyZSB0b28sIGFzIGZpbmRCdWNrZXRTdG9yZS5cblxuZXhwb3J0IHR5cGUgTG9hZGVkU3RvcmUgPSB7XG4gICAgLy8gSlNPTiBvZiB0aGUgcm91dGUgKEZVTExfUk9VVEUgd2hlbiBhYnNlbnQpIC0gdGhlIE9ORSByb3V0ZSB0aGlzIHN0b3JlIHNlcnZlc1xuICAgIHJvdXRlS2V5OiBzdHJpbmc7XG4gICAgcm91dGU/OiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIC8vIFRoZSBleGFjdCBzZWxmIGVudHJpZXMgdGhpcyBzdG9yZSBzZXJ2ZXMgKHNhbWUgcm91dGUsIGRpZmZlcmVudCB2YWxpZCB3aW5kb3dzKS4gRW1wdHkgd2hlbiB3ZSBhcmUgbm90IGluIHRoZSBjb25maWcgYnV0IHN0aWxsIHNlcnZlIG91ciBkaXNrIGRhdGEuXG4gICAgZW50cmllczogSG9zdGVkQ29uZmlnW107XG4gICAgZm9sZGVyOiBzdHJpbmc7XG4gICAgc3RvcmU6IElCdWNrZXRTdG9yZTtcbn07XG5cbi8vIEEgYnVja2V0IGxvYWRlZCBvbiB0aGlzIHNlcnZlcjogaXRzIHJvdXRpbmcgY29uZmlnIGFuZCBpdHMgcGVyLXJvdXRlIHN0b3Jlcy4gUHVyZSBkYXRhIC0gdGhlIHN0b3JlcyB0aGVtc2VsdmVzIGRvIHRoZSB3b3JrLlxuZXhwb3J0IHR5cGUgQnVja2V0U3RhdGUgPSB7XG4gICAgYWNjb3VudDogc3RyaW5nO1xuICAgIGJ1Y2tldE5hbWU6IHN0cmluZztcbiAgICByb3V0aW5nOiBSZW1vdGVDb25maWc7XG4gICAgcm91dGluZ0pTT046IHN0cmluZztcbiAgICBzZWxmRW50cmllczogSG9zdGVkQ29uZmlnW107XG4gICAgc2VsZjogU2VsZlN1bW1hcnkgfCB1bmRlZmluZWQ7XG4gICAgc3RvcmVzOiBMb2FkZWRTdG9yZVtdO1xuICAgIHN0cnVjdHVyZUtleTogc3RyaW5nO1xufTtcblxuLyoqIEpTT04gd2l0aCBzb3J0ZWQgb2JqZWN0IGtleXMgYW5kIHVuZGVmaW5lZC12YWx1ZWQga2V5cyBkcm9wcGVkLCBzbyB0d28gY29uZmlncyB0aGF0IG1lYW4gdGhlIHNhbWUgdGhpbmcgY29tcGFyZSBlcXVhbCByZWdhcmRsZXNzIG9mIGtleSBvcmRlciBvciB3aGljaCBzaWRlIHNlcmlhbGl6ZWQgdGhlbS4gKi9cbmZ1bmN0aW9uIHN0YWJsZVN0cmluZ2lmeSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBgWyR7dmFsdWUubWFwKHggPT4gc3RhYmxlU3RyaW5naWZ5KHgpKS5qb2luKFwiLFwiKX1dYDtcbiAgICB9XG4gICAgbGV0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuZmlsdGVyKHggPT4geFsxXSAhPT0gdW5kZWZpbmVkKTtcbiAgICBzb3J0KGVudHJpZXMsIHggPT4geFswXSk7XG4gICAgcmV0dXJuIGB7JHtlbnRyaWVzLm1hcCgoW2tleSwgY2hpbGRdKSA9PiBgJHtKU09OLnN0cmluZ2lmeShrZXkpfToke3N0YWJsZVN0cmluZ2lmeShjaGlsZCl9YCkuam9pbihcIixcIil9fWA7XG59XG5cbi8qKiBUaGUgbG9hZGVkIGJ1Y2tldCwgbG9hZGluZyBpdCAod2hpY2ggaW5zdGFudGlhdGVzIGl0cyBzdG9yZXMgYW5kIHN0YXJ0cyB0aGVpciBzeW5jaHJvbml6YXRpb24pIGlmIG5lZWRlZC4gQSBidWNrZXQgdGhhdCBkb2VzIG5vdCBleGlzdCBvbiB0aGlzIHNlcnZlciB0aHJvd3MgLSBjYWxsZXJzIG5ldmVyIHNlZSB1bmRlZmluZWQgYnVja2V0cy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXF1aXJlQnVja2V0KGFjY291bnQ6IHN0cmluZywgYnVja2V0TmFtZTogc3RyaW5nKTogUHJvbWlzZTxCdWNrZXRTdGF0ZT4ge1xuICAgIGxldCBidWNrZXQgPSBhd2FpdCBnZXRMb2FkZWRCdWNrZXQoYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgaWYgKCFidWNrZXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCdWNrZXQgJHthY2NvdW50fS8ke2J1Y2tldE5hbWV9IGRvZXMgbm90IGV4aXN0IG9uIHRoaXMgc2VydmVyLiBXcml0ZSBpdHMgcm91dGluZyBjb25maWcgdG8gJHtKU09OLnN0cmluZ2lmeShST1VUSU5HX0ZJTEUpfSB0byBjcmVhdGUgaXQuYCk7XG4gICAgfVxuICAgIHJldHVybiBidWNrZXQ7XG59XG5cbi8qKiBUaGUgc3RvcmUgc2VydmluZyBhIHJlcXVlc3Q6IHRoZSBleGFjdCBjb25maWcgZW50cnkgdGhlIENMSUVOVCBzZWxlY3RlZCwgbWF0Y2hlZCBieSBlcXVhbGl0eSAoa2V5IG9yZGVyIGlnbm9yZWQpIGFnYWluc3QgdGhlIGJ1Y2tldCdzIG93biBlbnRyaWVzLiBBIG1hdGNoIGlzIGhvbm9yZWQgZXZlbiB3aGVuIGl0cyB3aW5kb3cgaGFzIHBhc3NlZCAtIHRoZSBzZWxlY3Rpb24gbmV2ZXIgdmFsaWRhdGVzLCB0aGUgc3RvcmUncyBvd24gdmFsaWRhdGlvbiB0aHJvd3MgaW5zdGVhZC4gVGhyb3dzIHdoZW4gbm90aGluZyBtYXRjaGVzLCBsaXN0aW5nIHdoYXQgaXMgYXZhaWxhYmxlLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmRCdWNrZXRTdG9yZShhY2NvdW50OiBzdHJpbmcsIGJ1Y2tldE5hbWU6IHN0cmluZywgc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWcgfCB1bmRlZmluZWQpOiBQcm9taXNlPExvYWRlZFN0b3JlPiB7XG4gICAgbGV0IGJ1Y2tldCA9IGF3YWl0IHJlcXVpcmVCdWNrZXQoYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgaWYgKCFzb3VyY2VDb25maWcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyByZW1vdGUgc291cmNlIGNvbmZpZ3VyYXRpb24gd2FzIHByb3ZpZGVkIGZvciBidWNrZXQgJHthY2NvdW50fS8ke2J1Y2tldE5hbWV9OiBldmVyeSByZXF1ZXN0IG11c3Qgc2F5IHdoaWNoIGNvbmZpZ3VyZWQgc291cmNlIGl0IHNlbGVjdGVkLiBBdmFpbGFibGU6ICR7SlNPTi5zdHJpbmdpZnkoYnVja2V0LnNlbGZFbnRyaWVzKX1gKTtcbiAgICB9XG4gICAgbGV0IHdhbnRlZCA9IHN0YWJsZVN0cmluZ2lmeShzb3VyY2VDb25maWcpO1xuICAgIGZvciAobGV0IHMgb2YgYnVja2V0LnN0b3Jlcykge1xuICAgICAgICBpZiAocy5lbnRyaWVzLnNvbWUoZSA9PiBzdGFibGVTdHJpbmdpZnkoZSkgPT09IHdhbnRlZCkpIHJldHVybiBzO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHNvdXJjZSBvbiB0aGlzIHNlcnZlciBtYXRjaGVzIHRoZSByZXF1ZXN0ZWQgcmVtb3RlIGNvbmZpZ3VyYXRpb24gZm9yIGJ1Y2tldCAke2FjY291bnR9LyR7YnVja2V0TmFtZX0uIFJlcXVlc3RlZDogJHtKU09OLnN0cmluZ2lmeShzb3VyY2VDb25maWcpfS4gQXZhaWxhYmxlOiAke0pTT04uc3RyaW5naWZ5KGJ1Y2tldC5zZWxmRW50cmllcyl9YCk7XG59XG5cbi8qKiBJbnRlcm5hbCAoc3RvcmUtdG8tc3RvcmUpIHJlYWRzIHNraXAgc3RvcmUgc2VsZWN0aW9uIGVudGlyZWx5OiB0aGUgY2FsbGVyIGlzIGFub3RoZXIgc3RvcmUgd2hvc2UgaW5kZXggc2F5cyB0aGlzIE1BQ0hJTkUgaG9sZHMgdGhlIGJ5dGVzIC0gdGhlIHBlcnNpc3RlZCBob2xkZXIgaWRlbnRpdHkgaXMganVzdCBhIFVSTCwgd2hpY2ggY2Fubm90IG5hbWUgYSBzdG9yZS4gV2hpY2hldmVyIHN0b3JlJ3MgZm9sZGVyIGhhcyB0aGUgbmV3ZXN0IGNvcHkgYW5zd2Vycy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkQnVja2V0SW50ZXJuYWwoYWNjb3VudDogc3RyaW5nLCBidWNrZXROYW1lOiBzdHJpbmcsIGNvbmZpZzogeyBwYXRoOiBzdHJpbmc7IHJhbmdlPzogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9OyBpbmNsdWRlVG9tYnN0b25lcz86IGJvb2xlYW4gfSk6IFByb21pc2U8eyBkYXRhOiBCdWZmZXI7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCBidWNrZXQgPSBhd2FpdCByZXF1aXJlQnVja2V0KGFjY291bnQsIGJ1Y2tldE5hbWUpO1xuICAgIGxldCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoYnVja2V0LnN0b3Jlcy5tYXAocyA9PiBzLnN0b3JlLmdldDIoeyBwYXRoOiBjb25maWcucGF0aCwgcmFuZ2U6IGNvbmZpZy5yYW5nZSwgaW5jbHVkZVRvbWJzdG9uZXM6IGNvbmZpZy5pbmNsdWRlVG9tYnN0b25lcywgaW50ZXJuYWw6IHRydWUgfSkpKTtcbiAgICBsZXQgYmVzdDogeyBkYXRhOiBCdWZmZXI7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGxldCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICBpZiAocmVzdWx0ICYmICghYmVzdCB8fCByZXN1bHQud3JpdGVUaW1lID4gYmVzdC53cml0ZVRpbWUpKSB7XG4gICAgICAgICAgICBiZXN0ID0gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBiZXN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnVja2V0Q29uZmlnKGJ1Y2tldDogQnVja2V0U3RhdGUpOiBBcmNoaXZlc0NvbmZpZyB7XG4gICAgbGV0IGluZGV4ID0geyBmaWxlQ291bnQ6IDAsIGJ5dGVDb3VudDogMCB9O1xuICAgIGxldCBpbmRleFNvdXJjZXM6IHsgZGVidWdOYW1lOiBzdHJpbmc7IGZpbGVDb3VudDogbnVtYmVyOyBieXRlQ291bnQ6IG51bWJlciB9W10gPSBbXTtcbiAgICBsZXQgc3luY2luZzogU3luY0FjdGl2aXR5W10gPSBbXTtcbiAgICBsZXQgcmVhZGVyRGlza0xpbWl0OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgZm9yIChsZXQgcyBvZiBidWNrZXQuc3RvcmVzKSB7XG4gICAgICAgIGxldCBwcm9ncmVzcyA9IHMuc3RvcmUuZ2V0U3luY1Byb2dyZXNzPy4oKTtcbiAgICAgICAgaWYgKCFwcm9ncmVzcykgY29udGludWU7XG4gICAgICAgIGluZGV4LmZpbGVDb3VudCArPSBwcm9ncmVzcy5pbmRleC5maWxlQ291bnQ7XG4gICAgICAgIGluZGV4LmJ5dGVDb3VudCArPSBwcm9ncmVzcy5pbmRleC5ieXRlQ291bnQ7XG4gICAgICAgIGluZGV4U291cmNlcy5wdXNoKC4uLnByb2dyZXNzLnNvdXJjZXMpO1xuICAgICAgICBzeW5jaW5nLnB1c2goLi4ucHJvZ3Jlc3Muc3luY2luZyk7XG4gICAgICAgIHJlYWRlckRpc2tMaW1pdCA9IHJlYWRlckRpc2tMaW1pdCB8fCBwcm9ncmVzcy5yZWFkZXJEaXNrTGltaXQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIC8vIE5hdGl2ZSBjaGFuZ2UtZmVlZCBzdXBwb3J0ID0gdGhlIHN0b3JlcyBrZWVwIGFuIGluZGV4IChyYXdEaXNrIGJ1Y2tldHMgZW11bGF0ZSBnZXRDaGFuZ2VzQWZ0ZXIyIHdpdGggYSBmdWxsIGxpc3RpbmcpIC0gY2xpZW50cyB1c2UgdGhpcyB0byBwaWNrIHRoZWlyIHNjYW4gY2FkZW5jZVxuICAgICAgICBzdXBwb3J0c0NoYW5nZXNBZnRlcjogYnVja2V0LnN0b3Jlcy5zb21lKHMgPT4gcy5zdG9yZSBpbnN0YW5jZW9mIEJsb2JTdG9yZSksXG4gICAgICAgIHJlbW90ZUNvbmZpZzogYnVja2V0LnJvdXRpbmcsXG4gICAgICAgIGluZGV4LFxuICAgICAgICBpbmRleFNvdXJjZXMsXG4gICAgICAgIHJlYWRlckRpc2tMaW1pdCxcbiAgICAgICAgc3luY2luZyxcbiAgICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVja2V0U3luY1N0YXR1cyhidWNrZXQ6IEJ1Y2tldFN0YXRlKTogUHJvbWlzZTxBcmNoaXZlc1N5bmNTdGF0dXM+IHtcbiAgICBsZXQgc3VwcG9ydGVkID0gYnVja2V0LnN0b3Jlcy5maWx0ZXIocyA9PiBzLnN0b3JlLmdldFN5bmNTdGF0dXMpO1xuICAgIGlmICghc3VwcG9ydGVkLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJ1Y2tldCAke2J1Y2tldC5hY2NvdW50fS8ke2J1Y2tldC5idWNrZXROYW1lfSBkb2VzIG5vdCBzdXBwb3J0IGdldFN5bmNTdGF0dXMgKHJhd0Rpc2sgYnVja2V0cyBoYXZlIG5vIHN5bmNocm9uaXphdGlvbilgKTtcbiAgICB9XG4gICAgbGV0IHN0YXR1c2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoc3VwcG9ydGVkLm1hcChhc3luYyBzID0+IHtcbiAgICAgICAgbGV0IGdldFN5bmNTdGF0dXMgPSBzLnN0b3JlLmdldFN5bmNTdGF0dXM7XG4gICAgICAgIGlmICghZ2V0U3luY1N0YXR1cykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBnZXRTeW5jU3RhdHVzIGRpc2FwcGVhcmVkIGZyb20gYSBzdG9yZSBmb3IgJHtidWNrZXQuYWNjb3VudH0vJHtidWNrZXQuYnVja2V0TmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgZ2V0U3luY1N0YXR1cy5jYWxsKHMuc3RvcmUpO1xuICAgIH0pKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBhbGxTY2Fuc0NvbXBsZXRlOiBzdGF0dXNlcy5ldmVyeSh4ID0+IHguYWxsU2NhbnNDb21wbGV0ZSksXG4gICAgICAgIGluZGV4U2l6ZTogc3RhdHVzZXMucmVkdWNlKChzdW0sIHgpID0+IHN1bSArIHguaW5kZXhTaXplLCAwKSxcbiAgICAgICAgc291cmNlczogc3RhdHVzZXMuZmxhdE1hcCh4ID0+IHguc291cmNlcyksXG4gICAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1Y2tldEluZGV4VG90YWxzKGJ1Y2tldDogQnVja2V0U3RhdGUpOiBQcm9taXNlPHsgZmlsZUNvdW50OiBudW1iZXI7IGJ5dGVDb3VudDogbnVtYmVyOyBzb3VyY2VzOiB7IGRlYnVnTmFtZTogc3RyaW5nOyBmaWxlQ291bnQ6IG51bWJlcjsgYnl0ZUNvdW50OiBudW1iZXIgfVtdIH0gfCB1bmRlZmluZWQ+IHtcbiAgICBsZXQgc3VwcG9ydGVkID0gYnVja2V0LnN0b3Jlcy5maWx0ZXIocyA9PiBzLnN0b3JlLmNvbXB1dGVJbmRleFRvdGFscyk7XG4gICAgaWYgKCFzdXBwb3J0ZWQubGVuZ3RoKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGxldCB0b3RhbHMgPSBhd2FpdCBQcm9taXNlLmFsbChzdXBwb3J0ZWQubWFwKGFzeW5jIHMgPT4ge1xuICAgICAgICBsZXQgY29tcHV0ZUluZGV4VG90YWxzID0gcy5zdG9yZS5jb21wdXRlSW5kZXhUb3RhbHM7XG4gICAgICAgIGlmICghY29tcHV0ZUluZGV4VG90YWxzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbXB1dGVJbmRleFRvdGFscyBkaXNhcHBlYXJlZCBmcm9tIGEgc3RvcmUgZm9yICR7YnVja2V0LmFjY291bnR9LyR7YnVja2V0LmJ1Y2tldE5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IGNvbXB1dGVJbmRleFRvdGFscy5jYWxsKHMuc3RvcmUpO1xuICAgIH0pKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBmaWxlQ291bnQ6IHRvdGFscy5yZWR1Y2UoKHN1bSwgeCkgPT4gc3VtICsgeC5maWxlQ291bnQsIDApLFxuICAgICAgICBieXRlQ291bnQ6IHRvdGFscy5yZWR1Y2UoKHN1bSwgeCkgPT4gc3VtICsgeC5ieXRlQ291bnQsIDApLFxuICAgICAgICBzb3VyY2VzOiB0b3RhbHMuZmxhdE1hcCh4ID0+IHguc291cmNlcyksXG4gICAgfTtcbn1cblxuY29uc3QgYnVja2V0cyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPEJ1Y2tldFN0YXRlIHwgdW5kZWZpbmVkPj4oKTtcblxuY29uc3QgTUFYX1JFQlVJTERfVElNRVJfREVMQVkgPSAyICoqIDMxIC0gMTtcbmNvbnN0IFJFQlVJTERfQk9VTkRBUllfQlVGRkVSID0gMTAwMDtcblxuZnVuY3Rpb24gc2NoZWR1bGVXaW5kb3dCb3VuZGFyeVJlYnVpbGQobG9hZGVkOiBCdWNrZXRTdGF0ZSk6IHZvaWQge1xuICAgIGxldCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGxldCBib3VuZGFyaWVzID0gbG9hZGVkLnNlbGZFbnRyaWVzLmZsYXRNYXAoeCA9PiB4LnZhbGlkV2luZG93KS5maWx0ZXIodCA9PiB0ID4gbm93KTtcbiAgICBpZiAoIWJvdW5kYXJpZXMubGVuZ3RoKSByZXR1cm47XG4gICAgbGV0IG5leHRCb3VuZGFyeSA9IE1hdGgubWluKC4uLmJvdW5kYXJpZXMpO1xuICAgIGxldCBrZXkgPSBgJHtsb2FkZWQuYWNjb3VudH0vJHtsb2FkZWQuYnVja2V0TmFtZX1gO1xuICAgIGxldCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB2b2lkIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgY3VycmVudCA9IGF3YWl0IGJ1Y2tldHMuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAoY3VycmVudCAhPT0gbG9hZGVkKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoRGF0ZS5ub3coKSA8IG5leHRCb3VuZGFyeSkge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlV2luZG93Qm91bmRhcnlSZWJ1aWxkKGxvYWRlZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgc2NoZWR1bGVSb3V0aW5nUmVsb2FkKGxvYWRlZC5hY2NvdW50LCBsb2FkZWQuYnVja2V0TmFtZSwgeyBmb3JjZTogdHJ1ZSwgcmVhc29uOiBcImEgdmFsaWQgd2luZG93IGJvdW5kYXJ5IHBhc3NlZFwiIH0pO1xuICAgICAgICB9KSgpO1xuICAgIH0sIE1hdGgubWluKG5leHRCb3VuZGFyeSAtIG5vdyArIFJFQlVJTERfQk9VTkRBUllfQlVGRkVSLCBNQVhfUkVCVUlMRF9USU1FUl9ERUxBWSkpO1xuICAgICh0aW1lciBhcyB7IHVucmVmPzogKCkgPT4gdm9pZCB9KS51bnJlZj8uKCk7XG59XG5cbmNvbnN0IEJPVU5EQVJZX1NDQU5fT0ZGU0VUUyA9IFstMzAgKiAxMDAwLCAyICogMTAwMCwgMzAgKiAxMDAwXTtcbmNvbnN0IEJPVU5EQVJZX1NDQU5fTE9PS0JBQ0sgPSBERUZBVUxUX0ZBU1RfV1JJVEVfREVMQVkgKyBXSU5ET1dfRU5EX0ZMVVNIX01BUkdJTjtcbmNvbnN0IFNUQVJUVVBfQk9VTkRBUllfU0NBTl9ERUxBWSA9IDMwICogMTAwMDtcblxuY29uc3Qgc2NoZWR1bGVkQm91bmRhcnlTY2FucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuY29uc3QgYm91bmRhcnlTY2Fuc1J1bm5pbmcgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuZnVuY3Rpb24gc2NoZWR1bGVCb3VuZGFyeVNjYW5zKGxvYWRlZDogQnVja2V0U3RhdGUpOiB2b2lkIHtcbiAgICBsZXQga2V5ID0gYCR7bG9hZGVkLmFjY291bnR9LyR7bG9hZGVkLmJ1Y2tldE5hbWV9YDtcbiAgICBsZXQgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgc3RhcnRzID0gbmV3IFNldDxudW1iZXI+KCk7XG4gICAgZm9yIChsZXQgc2VsZiBvZiBsb2FkZWQuc2VsZkVudHJpZXMpIHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gc2VsZi52YWxpZFdpbmRvd1swXTtcbiAgICAgICAgaWYgKHN0YXJ0ID4gbm93ICYmIHN0YXJ0IDwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgICAgIHN0YXJ0cy5hZGQoc3RhcnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IHNlbGYgb2YgbG9hZGVkLnNlbGZFbnRyaWVzKSB7XG4gICAgICAgIGxldCBbc3RhcnQsIGVuZF0gPSBzZWxmLnZhbGlkV2luZG93O1xuICAgICAgICBpZiAoIShzdGFydCA8PSBub3cgJiYgbm93IDwgZW5kKSB8fCBzdGFydCA8PSAwKSBjb250aW51ZTtcbiAgICAgICAgaWYgKG5vdyAtIHN0YXJ0ID4gQk9VTkRBUllfU0NBTl9MT09LQkFDSykgY29udGludWU7XG4gICAgICAgIGxldCBzY2hlZHVsZUtleSA9IGAke2tleX18JHtzdGFydH18c3RhcnR1cGA7XG4gICAgICAgIGlmIChzY2hlZHVsZWRCb3VuZGFyeVNjYW5zLmhhcyhzY2hlZHVsZUtleSkpIGNvbnRpbnVlO1xuICAgICAgICBzY2hlZHVsZWRCb3VuZGFyeVNjYW5zLmFkZChzY2hlZHVsZUtleSk7XG4gICAgICAgIGxldCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdm9pZCBydW5Cb3VuZGFyeVNjYW4oa2V5LCBzdGFydCwgU1RBUlRVUF9CT1VOREFSWV9TQ0FOX0RFTEFZLCBcInN0YXJ0dXArMzBzXCIpLmNhdGNoKChlOiBFcnJvcikgPT4gY29uc29sZS5lcnJvcihgQm91bmRhcnkgc2NhbiBmb3IgYnVja2V0ICR7a2V5fSBmYWlsZWQ6ICR7ZS5zdGFjayA/PyBlfWApKTtcbiAgICAgICAgfSwgU1RBUlRVUF9CT1VOREFSWV9TQ0FOX0RFTEFZKTtcbiAgICAgICAgKHRpbWVyIGFzIHsgdW5yZWY/OiAoKSA9PiB2b2lkIH0pLnVucmVmPy4oKTtcbiAgICB9XG4gICAgZm9yIChsZXQgc3RhcnQgb2Ygc3RhcnRzKSB7XG4gICAgICAgIGZvciAobGV0IG9mZnNldCBvZiBCT1VOREFSWV9TQ0FOX09GRlNFVFMpIHtcbiAgICAgICAgICAgIGxldCBhdCA9IHN0YXJ0ICsgb2Zmc2V0O1xuICAgICAgICAgICAgaWYgKGF0IDw9IG5vdykgY29udGludWU7XG4gICAgICAgICAgICBsZXQgc2NoZWR1bGVLZXkgPSBgJHtrZXl9fCR7c3RhcnR9fCR7b2Zmc2V0fWA7XG4gICAgICAgICAgICBpZiAoc2NoZWR1bGVkQm91bmRhcnlTY2Fucy5oYXMoc2NoZWR1bGVLZXkpKSBjb250aW51ZTtcbiAgICAgICAgICAgIHNjaGVkdWxlZEJvdW5kYXJ5U2NhbnMuYWRkKHNjaGVkdWxlS2V5KTtcbiAgICAgICAgICAgIGxldCBhcm0gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChEYXRlLm5vdygpIDwgYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFybSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZvaWQgcnVuQm91bmRhcnlTY2FuKGtleSwgc3RhcnQsIG9mZnNldCkuY2F0Y2goKGU6IEVycm9yKSA9PiBjb25zb2xlLmVycm9yKGBCb3VuZGFyeSBzY2FuIGZvciBidWNrZXQgJHtrZXl9IGZhaWxlZDogJHtlLnN0YWNrID8/IGV9YCkpO1xuICAgICAgICAgICAgICAgIH0sIE1hdGgubWluKGF0IC0gRGF0ZS5ub3coKSwgTUFYX1JFQlVJTERfVElNRVJfREVMQVkpKTtcbiAgICAgICAgICAgICAgICAodGltZXIgYXMgeyB1bnJlZj86ICgpID0+IHZvaWQgfSkudW5yZWY/LigpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFybSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBydW5Cb3VuZGFyeVNjYW4oYnVja2V0S2V5OiBzdHJpbmcsIHdpbmRvd1N0YXJ0OiBudW1iZXIsIG9mZnNldDogbnVtYmVyLCBvZmZzZXRMYWJlbD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBsYWJlbCA9IGBidWNrZXQgJHtidWNrZXRLZXl9LCB3aW5kb3cgc3RhcnRpbmcgJHtuZXcgRGF0ZSh3aW5kb3dTdGFydCkudG9JU09TdHJpbmcoKX0sIG9mZnNldCAke29mZnNldExhYmVsIHx8IGAke29mZnNldCAvIDEwMDB9c2B9YDtcbiAgICBpZiAoYm91bmRhcnlTY2Fuc1J1bm5pbmcuaGFzKGJ1Y2tldEtleSkpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFNraXBwaW5nIGJvdW5kYXJ5IHNjYW4gKCR7bGFiZWx9KTogdGhlIHByZXZpb3VzIGJvdW5kYXJ5IHNjYW4gaXMgc3RpbGwgcnVubmluZ2ApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGJvdW5kYXJ5U2NhbnNSdW5uaW5nLmFkZChidWNrZXRLZXkpO1xuICAgIHRyeSB7XG4gICAgICAgIGxldCBsb2FkZWQgPSBhd2FpdCBidWNrZXRzLmdldChidWNrZXRLZXkpO1xuICAgICAgICBpZiAoIWxvYWRlZCkgcmV0dXJuO1xuICAgICAgICBsZXQgZWZmZWN0aXZlID0gbG9hZGVkLnJvdXRpbmc7XG4gICAgICAgIGxldCBzZWxmSW5kZXhlcyA9IGZpbmRTZWxmSW5kZXhlcyhlZmZlY3RpdmUsIGxvYWRlZC5hY2NvdW50LCBsb2FkZWQuYnVja2V0TmFtZSk7XG4gICAgICAgIGxldCBzZWxmSW5kZXhTZXQgPSBuZXcgU2V0KHNlbGZJbmRleGVzKTtcbiAgICAgICAgbGV0IHNlbHZlcyA9IHNlbGZJbmRleGVzLm1hcChpID0+IGVmZmVjdGl2ZS5zb3VyY2VzW2ldIGFzIEhvc3RlZENvbmZpZykuZmlsdGVyKHggPT4geC52YWxpZFdpbmRvd1swXSA9PT0gd2luZG93U3RhcnQpO1xuICAgICAgICBpZiAoIXNlbHZlcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgbGV0IHByZXZUaW1lID0gd2luZG93U3RhcnQgLSAxO1xuICAgICAgICAvLyBFdmVyeXRoaW5nIGlzIHBlci1zdG9yZTogZWFjaCBzZWxmIGVudHJ5J3Mgcm91dGUgaGFzIGl0cyBvd24gc3RvcmUsIGFuZCB0aGF0IHN0b3JlJ3MgZGlzay9yZW1vdGUgYm91bmRhcnkgcHVsbHMgb25seSBjb25jZXJuIGl0cyBvd24gcm91dGUgc2xpY2VcbiAgICAgICAgbGV0IG5lZWREaXNrU2NhbiA9IG5ldyBTZXQ8TG9hZGVkU3RvcmU+KCk7XG4gICAgICAgIGxldCByZW1vdGVPd25lcnMgPSBuZXcgTWFwPExvYWRlZFN0b3JlLCBNYXA8bnVtYmVyLCBbbnVtYmVyLCBudW1iZXJdPj4oKTtcbiAgICAgICAgZm9yIChsZXQgc2VsZiBvZiBzZWx2ZXMpIHtcbiAgICAgICAgICAgIGxldCBzZWxmUm91dGUgPSBzZWxmLnJvdXRlIHx8IEZVTExfUk9VVEU7XG4gICAgICAgICAgICBsZXQgc2VsZlN0b3JlID0gbG9hZGVkLnN0b3Jlcy5maW5kKHggPT4geC5yb3V0ZUtleSA9PT0gSlNPTi5zdHJpbmdpZnkoc2VsZlJvdXRlKSk7XG4gICAgICAgICAgICBpZiAoIXNlbGZTdG9yZSB8fCAhKHNlbGZTdG9yZS5zdG9yZSBpbnN0YW5jZW9mIEJsb2JTdG9yZSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGV0IGlkeCA9IGVmZmVjdGl2ZS5zb3VyY2VzLmluZGV4T2Yoc2VsZik7XG4gICAgICAgICAgICBsZXQgc2hhZG93ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaWR4OyBqKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3RoZXIgPSBlZmZlY3RpdmUuc291cmNlc1tqXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG90aGVyID09PSBcInN0cmluZ1wiKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBsZXQgW3dzLCB3ZV0gPSBvdGhlci52YWxpZFdpbmRvdztcbiAgICAgICAgICAgICAgICBpZiAoISh3cyA8PSB3aW5kb3dTdGFydCAmJiB3aW5kb3dTdGFydCA8IHdlKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgbGV0IHIgPSBvdGhlci5yb3V0ZSB8fCBGVUxMX1JPVVRFO1xuICAgICAgICAgICAgICAgIGlmIChyWzBdIDw9IHNlbGZSb3V0ZVswXSAmJiBzZWxmUm91dGVbMV0gPD0gclsxXSkge1xuICAgICAgICAgICAgICAgICAgICBzaGFkb3dlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaGFkb3dlZCkgY29udGludWU7XG4gICAgICAgICAgICBsZXQgdW5jb3ZlcmVkOiBbbnVtYmVyLCBudW1iZXJdW10gPSBbW3NlbGZSb3V0ZVswXSwgc2VsZlJvdXRlWzFdXV07XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVmZmVjdGl2ZS5zb3VyY2VzLmxlbmd0aCAmJiB1bmNvdmVyZWQubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3RoZXIgPSBlZmZlY3RpdmUuc291cmNlc1tqXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG90aGVyID09PSBcInN0cmluZ1wiKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBsZXQgW3dzLCB3ZV0gPSBvdGhlci52YWxpZFdpbmRvdztcbiAgICAgICAgICAgICAgICBpZiAoISh3cyA8PSBwcmV2VGltZSAmJiBwcmV2VGltZSA8IHdlKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgbGV0IHIgPSBvdGhlci5yb3V0ZSB8fCBGVUxMX1JPVVRFO1xuICAgICAgICAgICAgICAgIGxldCByZW1haW5pbmc6IFtudW1iZXIsIG51bWJlcl1bXSA9IFtdO1xuICAgICAgICAgICAgICAgIGxldCBjbGFpbWVkOiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHUgb2YgdW5jb3ZlcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbnRlciA9IHJvdXRlSW50ZXJzZWN0aW9uKHUsIHIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWludGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcucHVzaCh1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNsYWltZWQgPSBjbGFpbWVkICYmIFtNYXRoLm1pbihjbGFpbWVkWzBdLCBpbnRlclswXSksIE1hdGgubWF4KGNsYWltZWRbMV0sIGludGVyWzFdKV0gYXMgW251bWJlciwgbnVtYmVyXSB8fCBpbnRlcjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVbMF0gPCBpbnRlclswXSkgcmVtYWluaW5nLnB1c2goW3VbMF0sIGludGVyWzBdXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnRlclsxXSA8IHVbMV0pIHJlbWFpbmluZy5wdXNoKFtpbnRlclsxXSwgdVsxXV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB1bmNvdmVyZWQgPSByZW1haW5pbmc7XG4gICAgICAgICAgICAgICAgaWYgKCFjbGFpbWVkKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZkluZGV4U2V0LmhhcyhqKSkge1xuICAgICAgICAgICAgICAgICAgICBuZWVkRGlza1NjYW4uYWRkKHNlbGZTdG9yZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG93bmVycyA9IHJlbW90ZU93bmVycy5nZXQoc2VsZlN0b3JlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvd25lcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG93bmVycyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZU93bmVycy5zZXQoc2VsZlN0b3JlLCBvd25lcnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxldCBleGlzdGluZyA9IG93bmVycy5nZXQoaik7XG4gICAgICAgICAgICAgICAgICAgIG93bmVycy5zZXQoaiwgZXhpc3RpbmcgJiYgW01hdGgubWluKGV4aXN0aW5nWzBdLCBjbGFpbWVkWzBdKSwgTWF0aC5tYXgoZXhpc3RpbmdbMV0sIGNsYWltZWRbMV0pXSBhcyBbbnVtYmVyLCBudW1iZXJdIHx8IGNsYWltZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIW5lZWREaXNrU2Nhbi5zaXplICYmICFyZW1vdGVPd25lcnMuc2l6ZSkgcmV0dXJuO1xuICAgICAgICBjb25zb2xlLmxvZyhgQm91bmRhcnkgc2NhbiAoJHtsYWJlbH0pOiBkaXNrU2NhbnM9JHtuZWVkRGlza1NjYW4uc2l6ZX0sIHN0b3JlcyB3aXRoIHJlbW90ZSBwcmV2aW91cy13aW5kb3cgb3duZXJzOiAke3JlbW90ZU93bmVycy5zaXplfWApO1xuICAgICAgICBmb3IgKGxldCBzZWxmU3RvcmUgb2YgbmVlZERpc2tTY2FuKSB7XG4gICAgICAgICAgICBpZiAoc2VsZlN0b3JlLnN0b3JlIGluc3RhbmNlb2YgQmxvYlN0b3JlKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgc2VsZlN0b3JlLnN0b3JlLnJlc2NhbkJhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgc2luY2UgPSB3aW5kb3dTdGFydCAtIEJPVU5EQVJZX1NDQU5fTE9PS0JBQ0s7XG4gICAgICAgIGZvciAobGV0IFtzZWxmU3RvcmUsIG93bmVyc10gb2YgcmVtb3RlT3duZXJzKSB7XG4gICAgICAgICAgICBpZiAoIShzZWxmU3RvcmUuc3RvcmUgaW5zdGFuY2VvZiBCbG9iU3RvcmUpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGZvciAobGV0IFtzb3VyY2VJbmRleCwgcm91dGVdIG9mIG93bmVycykge1xuICAgICAgICAgICAgICAgIGxldCBvd25lclNvdXJjZSA9IGVmZmVjdGl2ZS5zb3VyY2VzW3NvdXJjZUluZGV4XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG93bmVyU291cmNlID09PSBcInN0cmluZ1wiKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzZWxmU3RvcmUuc3RvcmUuYm91bmRhcnlTY2FuUmVtb3RlKGNyZWF0ZUFwaUFyY2hpdmVzKG93bmVyU291cmNlKSwgeyBzaW5jZSwgcm91dGUgfSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBCb3VuZGFyeSBzY2FuICgke2xhYmVsfSkgb2YgcHJldmlvdXMtd2luZG93IG93bmVyIChzb3VyY2UgaW5kZXggJHtzb3VyY2VJbmRleH0pIGZhaWxlZDogJHsoZSBhcyBFcnJvcikuc3RhY2sgPz8gZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICBib3VuZGFyeVNjYW5zUnVubmluZy5kZWxldGUoYnVja2V0S2V5KTtcbiAgICB9XG59XG5cbmNvbnN0IHJlc29sdmVkU291cmNlQXJjaGl2ZXMgPSBuZXcgTWFwPHN0cmluZywgSUFyY2hpdmVzPigpO1xuLyoqIEEgY2FjaGVkIElBcmNoaXZlcyBmb3IgYSBwZXJzaXN0ZWQgc291cmNlIGlkZW50aXR5OiBhIHJvdXRpbmcgVVJMIChob3N0ZWQvYmFja2JsYXplKSBvciBhIGRpc2sgZm9sZGVyIHBhdGggLSB0aGUgZm9ybSBCbG9iU3RvcmUncyBzb3VyY2VzIGxpc3Qgc3RvcmVzLiBDb25maWd1cmF0aW9uICh2YWxpZCB3aW5kb3dzLCByb3V0ZXMpIGRlY2lkZXMgV0hFTiBhIHNvdXJjZSBzaG91bGQgYmUgdXNlZDsgZm9yIHJlYWRpbmcgYnl0ZXMgdGhlIGluZGV4IHNheXMgYSBzb3VyY2UgaG9sZHMsIHRoZSBVUkwgYWxvbmUgaXMgZW5vdWdoIC0gZXZlbiBmb3Igc291cmNlcyBubyBsb25nZXIgaW4gYW55IGNvbmZpZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU291cmNlQXJjaGl2ZXModXJsOiBzdHJpbmcpOiBJQXJjaGl2ZXMge1xuICAgIGxldCBleGlzdGluZyA9IHJlc29sdmVkU291cmNlQXJjaGl2ZXMuZ2V0KHVybCk7XG4gICAgaWYgKGV4aXN0aW5nKSByZXR1cm4gZXhpc3Rpbmc7XG4gICAgbGV0IGFyY2hpdmVzOiBJQXJjaGl2ZXM7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKFwiaHR0cHM6Ly9cIikpIHtcbiAgICAgICAgLy8gVGhlIGNvbmZpZyBpcyBmYWJyaWNhdGVkIGZyb20gdGhlIGJhcmUgVVJMIGFuZCBjYW4gbmV2ZXIgZXhhY3QtbWF0Y2ggYSBzZXJ2ZXIncyBlbnRyaWVzIC0gd2hpY2ggaXMgZmluZSwgYmVjYXVzZSBob2xkZXIgcmVhZHMgYXJlIGludGVybmFsIHJlYWRzLCBhbmQgaW50ZXJuYWwgcmVhZHMgbmV2ZXIgc2VsZWN0IGEgc3RvcmUgKHNlZSByZWFkQnVja2V0SW50ZXJuYWwpXG4gICAgICAgIGFyY2hpdmVzID0gY3JlYXRlQXBpQXJjaGl2ZXMobm9ybWFsaXplU291cmNlKHVybCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGFyY2hpdmVzID0gbmV3IEFyY2hpdmVzRGlzayh1cmwpO1xuICAgIH1cbiAgICByZXNvbHZlZFNvdXJjZUFyY2hpdmVzLnNldCh1cmwsIGFyY2hpdmVzKTtcbiAgICByZXR1cm4gYXJjaGl2ZXM7XG59XG5cbmZ1bmN0aW9uIHNvdXJjZUlkZW50aXR5KHNvdXJjZUNvbmZpZzogU291cmNlQ29uZmlnIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoIXNvdXJjZUNvbmZpZykgcmV0dXJuIFwiZGlza1wiO1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7IC4uLnNvdXJjZUNvbmZpZywgdmFsaWRXaW5kb3c6IHVuZGVmaW5lZCwgcm91dGU6IHVuZGVmaW5lZCB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRTdG9yZShhY2NvdW50OiBzdHJpbmcsIGJ1Y2tldE5hbWU6IHN0cmluZywgcGxhblN0b3JlOiBTdG9yZVBsYW5TdG9yZSk6IElCdWNrZXRTdG9yZSB7XG4gICAgbGV0IGZvbGRlciA9IGdldEJ1Y2tldEZvbGRlcihhY2NvdW50LCBidWNrZXROYW1lLCBwbGFuU3RvcmUucm91dGUpO1xuICAgIGlmIChwbGFuU3RvcmUucmF3RGlzaykge1xuICAgICAgICByZXR1cm4gbmV3IFJhd0Rpc2tTdG9yZShuZXcgQXJjaGl2ZXNEaXNrKGZvbGRlcikpO1xuICAgIH1cbiAgICBsZXQgc291cmNlczogQXJjaGl2ZXNTb3VyY2VbXSA9IHBsYW5TdG9yZS5zb3VyY2VTcGVjcy5tYXAoc3BlYyA9PiAoe1xuICAgICAgICBzb3VyY2U6IHNwZWMuc291cmNlQ29uZmlnICYmIGNyZWF0ZUFwaUFyY2hpdmVzKHNwZWMuc291cmNlQ29uZmlnKSB8fCBuZXcgQXJjaGl2ZXNEaXNrKGZvbGRlciksXG4gICAgICAgIHVybDogc3BlYy5zb3VyY2VDb25maWc/LnVybCB8fCBmb2xkZXIsXG4gICAgICAgIHZhbGlkV2luZG93OiBzcGVjLnZhbGlkV2luZG93LFxuICAgICAgICByb3V0ZTogc3BlYy5yb3V0ZSxcbiAgICAgICAgbm9GdWxsU3luYzogc3BlYy5ub0Z1bGxTeW5jLFxuICAgICAgICBpbnRlcm1lZGlhdGU6IHNwZWMuc291cmNlQ29uZmlnPy5pbnRlcm1lZGlhdGUsXG4gICAgICAgIGlkZW50aXR5OiBzb3VyY2VJZGVudGl0eShzcGVjLnNvdXJjZUNvbmZpZyksXG4gICAgfSkpO1xuICAgIHJldHVybiBuZXcgQmxvYlN0b3JlKGZvbGRlciwgc291cmNlcywge1xuICAgICAgICByZWFkZXJEaXNrTGltaXQ6IHBsYW5TdG9yZS5yZWFkZXJEaXNrTGltaXQsXG4gICAgICAgIG9uV3JpdGVDb3VudGVkOiAoa2luZCwgYnl0ZXMpID0+IGNvdW50QnVja2V0V3JpdGUoYCR7YWNjb3VudH0vJHtidWNrZXROYW1lfWAsIGtpbmQsIGJ5dGVzKSxcbiAgICAgICAgcmVzb2x2ZVNvdXJjZVVybDogcmVzb2x2ZVNvdXJjZUFyY2hpdmVzLFxuICAgICAgICBlbnRyaWVzOiBwbGFuU3RvcmUuZW50cmllcyxcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRCdWNrZXQoYWNjb3VudDogc3RyaW5nLCBidWNrZXROYW1lOiBzdHJpbmcsIHJvdXRpbmc6IFJlbW90ZUNvbmZpZywgcGxhbj86IFN0b3JlUGxhbik6IEJ1Y2tldFN0YXRlIHtcbiAgICBpZiAoIXBsYW4pIHtcbiAgICAgICAgcGxhbiA9IGNvbXB1dGVTdG9yZVBsYW4oYWNjb3VudCwgYnVja2V0TmFtZSwgcm91dGluZyk7XG4gICAgfVxuICAgIGxldCB7IHNlbGZFbnRyaWVzLCBzZWxmIH0gPSBwbGFuO1xuICAgIGlmICghc2VsZikge1xuICAgICAgICBjb25zb2xlLmxvZyhgVGhpcyBzZXJ2ZXIgaXMgbm90IGluIHRoZSByb3V0aW5nIGNvbmZpZyBmb3IgYnVja2V0ICR7YWNjb3VudH0vJHtidWNrZXROYW1lfTogbm8gbG9uZ2VyIHN5bmNocm9uaXppbmcsIHZhbGlkIHdpbmRvdyB0cmVhdGVkIGFzIFswLCAwXSAoZmFzdCB3cml0ZXMgZmx1c2ggaW1tZWRpYXRlbHkpLCBkaXNrIGRhdGEga2VwdCBhbmQgc2VydmVkYCk7XG4gICAgfVxuICAgIGxldCBzdG9yZXM6IExvYWRlZFN0b3JlW10gPSBwbGFuLnN0b3Jlcy5tYXAocGxhblN0b3JlID0+ICh7XG4gICAgICAgIHJvdXRlS2V5OiBwbGFuU3RvcmUucm91dGVLZXksXG4gICAgICAgIHJvdXRlOiBwbGFuU3RvcmUucm91dGUsXG4gICAgICAgIGVudHJpZXM6IHBsYW5TdG9yZS5lbnRyaWVzLFxuICAgICAgICBmb2xkZXI6IGdldEJ1Y2tldEZvbGRlcihhY2NvdW50LCBidWNrZXROYW1lLCBwbGFuU3RvcmUucm91dGUpLFxuICAgICAgICBzdG9yZTogYnVpbGRTdG9yZShhY2NvdW50LCBidWNrZXROYW1lLCBwbGFuU3RvcmUpLFxuICAgIH0pKTtcbiAgICBsZXQgbG9hZGVkOiBCdWNrZXRTdGF0ZSA9IHsgYWNjb3VudCwgYnVja2V0TmFtZSwgcm91dGluZywgcm91dGluZ0pTT046IEpTT04uc3RyaW5naWZ5KHJvdXRpbmcpLCBzZWxmRW50cmllcywgc2VsZiwgc3RvcmVzLCBzdHJ1Y3R1cmVLZXk6IHBsYW4uc3RydWN0dXJlS2V5IH07XG4gICAgc2NoZWR1bGVXaW5kb3dCb3VuZGFyeVJlYnVpbGQobG9hZGVkKTtcbiAgICBzY2hlZHVsZUJvdW5kYXJ5U2NhbnMobG9hZGVkKTtcbiAgICAvLyBBIGxvYWRlZCBidWNrZXQgbXVzdCBhY3R1YWxseSBiZSBydW5uaW5nOiBlYWNoIHN0b3JlJ3MgaW5pdCBsb2FkcyBpdHMgaW5kZXggYW5kIHN0YXJ0cyBpdHMgc291cmNlIHN5bmNocm9uaXphdGlvbiwgYW5kIGl0IGlzIGxhenksIHNvIHdpdGhvdXQgdGhpcyBhIGJ1Y2tldCBub3RoaW5nIGhhcyByZWFkIGZyb20gb3Igd3JpdHRlbiB0byBzaXRzIGluZXJ0IC0gcmVwb3J0aW5nIG5vIGRhdGEgYW5kIG5vIHN5bmNpbmcgd2hpbGUgaXRzIGRpc2sgaXMgZnVsbCBvZiBmaWxlcy5cbiAgICBmb3IgKGxldCBzIG9mIHN0b3Jlcykge1xuICAgICAgICBpZiAocy5zdG9yZSBpbnN0YW5jZW9mIEJsb2JTdG9yZSkge1xuICAgICAgICAgICAgbGV0IHN0b3JlID0gcy5zdG9yZTtcbiAgICAgICAgICAgIHZvaWQgc3RvcmUuaW5pdCgpLmNhdGNoKChlOiBFcnJvcikgPT4gY29uc29sZS5lcnJvcihgSW5pdGlhbGl6aW5nIHRoZSBzdG9yZSBmb3IgYnVja2V0ICR7YWNjb3VudH0vJHtidWNrZXROYW1lfSAocm91dGUgJHtzLnJvdXRlS2V5fSkgZmFpbGVkOiAke2Uuc3RhY2sgPz8gZX1gKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxvYWRlZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9hZEJ1Y2tldChhY2NvdW50OiBzdHJpbmcsIGJ1Y2tldE5hbWU6IHN0cmluZyk6IFByb21pc2U8QnVja2V0U3RhdGUgfCB1bmRlZmluZWQ+IHtcbiAgICBsZXQgcm91dGluZyA9IGF3YWl0IHJlYWRSb3V0aW5nRnJvbURpc2soYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgaWYgKCFyb3V0aW5nKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBidWlsZEJ1Y2tldChhY2NvdW50LCBidWNrZXROYW1lLCByb3V0aW5nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvYWRlZEJ1Y2tldChhY2NvdW50OiBzdHJpbmcsIGJ1Y2tldE5hbWU6IHN0cmluZyk6IFByb21pc2U8QnVja2V0U3RhdGUgfCB1bmRlZmluZWQ+IHtcbiAgICBsZXQga2V5ID0gYCR7YWNjb3VudH0vJHtidWNrZXROYW1lfWA7XG4gICAgbGV0IGxvYWRlZCA9IGJ1Y2tldHMuZ2V0KGtleSk7XG4gICAgaWYgKCFsb2FkZWQpIHtcbiAgICAgICAgbG9hZGVkID0gbG9hZEJ1Y2tldChhY2NvdW50LCBidWNrZXROYW1lKTtcbiAgICAgICAgYnVja2V0cy5zZXQoa2V5LCBsb2FkZWQpO1xuICAgICAgICB2b2lkIGxvYWRlZC50aGVuKGJ1Y2tldCA9PiB7XG4gICAgICAgICAgICBpZiAoIWJ1Y2tldCAmJiBidWNrZXRzLmdldChrZXkpID09PSBsb2FkZWQpIHtcbiAgICAgICAgICAgICAgICBidWNrZXRzLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoYnVja2V0cy5nZXQoa2V5KSA9PT0gbG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgYnVja2V0cy5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsb2FkZWQ7XG59XG5cbmNvbnN0IHJvdXRpbmdSZWxvYWRzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8dm9pZD4+KCk7XG5mdW5jdGlvbiBzY2hlZHVsZVJvdXRpbmdSZWxvYWQoYWNjb3VudDogc3RyaW5nLCBidWNrZXROYW1lOiBzdHJpbmcsIGNvbmZpZz86IHsgZm9yY2U/OiBib29sZWFuOyByZWFzb24/OiBzdHJpbmcgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBrZXkgPSBgJHthY2NvdW50fS8ke2J1Y2tldE5hbWV9YDtcbiAgICBsZXQgbmV4dCA9IChyb3V0aW5nUmVsb2Fkcy5nZXQoa2V5KSB8fCBQcm9taXNlLnJlc29sdmUoKSlcbiAgICAgICAgLnRoZW4oKCkgPT4gY2hlY2tSb3V0aW5nQ2hhbmdlZChhY2NvdW50LCBidWNrZXROYW1lLCBjb25maWcpKVxuICAgICAgICAuY2F0Y2goZSA9PiBjb25zb2xlLmVycm9yKGBSZWxvYWRpbmcgcm91dGluZyBjb25maWcgZm9yIGJ1Y2tldCAke2tleX0gZmFpbGVkOmAsIGUpKTtcbiAgICByb3V0aW5nUmVsb2Fkcy5zZXQoa2V5LCBuZXh0KTtcbiAgICByZXR1cm4gbmV4dDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2hlY2tSb3V0aW5nQ2hhbmdlZChhY2NvdW50OiBzdHJpbmcsIGJ1Y2tldE5hbWU6IHN0cmluZywgY29uZmlnPzogeyBmb3JjZT86IGJvb2xlYW47IHJlYXNvbj86IHN0cmluZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGtleSA9IGAke2FjY291bnR9LyR7YnVja2V0TmFtZX1gO1xuICAgIGxldCBsb2FkZWQgPSBhd2FpdCBidWNrZXRzLmdldChrZXkpO1xuICAgIGlmICghbG9hZGVkKSByZXR1cm47XG4gICAgbGV0IHJvdXRpbmcgPSBhd2FpdCByZWFkUm91dGluZ0Zyb21EaXNrKGFjY291bnQsIGJ1Y2tldE5hbWUpO1xuICAgIGlmICghcm91dGluZykgcmV0dXJuO1xuICAgIGlmICghY29uZmlnPy5mb3JjZSAmJiBKU09OLnN0cmluZ2lmeShyb3V0aW5nKSA9PT0gbG9hZGVkLnJvdXRpbmdKU09OKSByZXR1cm47XG4gICAgbGV0IHJlYXNvbiA9IGNvbmZpZz8uZm9yY2UgJiYgKGNvbmZpZy5yZWFzb24gfHwgXCJmb3JjZWRcIikgfHwgXCJyb3V0aW5nIGNvbmZpZyBjaGFuZ2VkXCI7XG4gICAgbGV0IHBsYW4gPSBjb21wdXRlU3RvcmVQbGFuKGFjY291bnQsIGJ1Y2tldE5hbWUsIHJvdXRpbmcpO1xuICAgIGlmIChwbGFuLnN0cnVjdHVyZUtleSA9PT0gbG9hZGVkLnN0cnVjdHVyZUtleSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgQXBwbHlpbmcgdGhlIHJvdXRpbmcgY29uZmlnIHRvIHRoZSBydW5uaW5nIHN0b3JlcyBmb3IgYnVja2V0ICR7a2V5fSAoJHtyZWFzb259KWApO1xuICAgICAgICBmb3IgKGxldCBwbGFuU3RvcmUgb2YgcGxhbi5zdG9yZXMpIHtcbiAgICAgICAgICAgIGxldCBsaXZlID0gbG9hZGVkLnN0b3Jlcy5maW5kKHggPT4geC5yb3V0ZUtleSA9PT0gcGxhblN0b3JlLnJvdXRlS2V5KTtcbiAgICAgICAgICAgIC8vIHN0cnVjdHVyZUtleSBlcXVhbGl0eSBtZWFucyB0aGUgc3RvcmUgc2V0IChyb3V0ZXMsIHJhd0Rpc2ssIGxpbWl0cykgaXMgdW5jaGFuZ2VkLCBzbyBldmVyeSBwbGFuIHN0b3JlIGhhcyBpdHMgbGl2ZSB0d2luXG4gICAgICAgICAgICBpZiAoIWxpdmUgfHwgIShsaXZlLnN0b3JlIGluc3RhbmNlb2YgQmxvYlN0b3JlKSkgY29udGludWU7XG4gICAgICAgICAgICBsZXQgc3RvcmVGb2xkZXIgPSBsaXZlLmZvbGRlcjtcbiAgICAgICAgICAgIGxpdmUuc3RvcmUudXBkYXRlU291cmNlcyhwbGFuU3RvcmUuc291cmNlU3BlY3MubWFwKHNwZWMgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNvbmZpZyA9IHNwZWMuc291cmNlQ29uZmlnO1xuICAgICAgICAgICAgICAgIGlmICghc291cmNlQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlkZW50aXR5OiBzb3VyY2VJZGVudGl0eSh1bmRlZmluZWQpLCB1cmw6IHN0b3JlRm9sZGVyLCB2YWxpZFdpbmRvdzogc3BlYy52YWxpZFdpbmRvdywgY3JlYXRlOiAoKTogSUFyY2hpdmVzID0+IG5ldyBBcmNoaXZlc0Rpc2soc3RvcmVGb2xkZXIpIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGlkZW50aXR5OiBzb3VyY2VJZGVudGl0eShzb3VyY2VDb25maWcpLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHNvdXJjZUNvbmZpZy51cmwsXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkV2luZG93OiBzcGVjLnZhbGlkV2luZG93LFxuICAgICAgICAgICAgICAgICAgICByb3V0ZTogc3BlYy5yb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgbm9GdWxsU3luYzogc3BlYy5ub0Z1bGxTeW5jLFxuICAgICAgICAgICAgICAgICAgICBpbnRlcm1lZGlhdGU6IHNvdXJjZUNvbmZpZy5pbnRlcm1lZGlhdGUsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZTogKCkgPT4gY3JlYXRlQXBpQXJjaGl2ZXMoc291cmNlQ29uZmlnKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSksIHBsYW5TdG9yZS5lbnRyaWVzKTtcbiAgICAgICAgICAgIGxpdmUuZW50cmllcyA9IHBsYW5TdG9yZS5lbnRyaWVzO1xuICAgICAgICB9XG4gICAgICAgIGxvYWRlZC5yb3V0aW5nID0gcm91dGluZztcbiAgICAgICAgbG9hZGVkLnJvdXRpbmdKU09OID0gSlNPTi5zdHJpbmdpZnkocm91dGluZyk7XG4gICAgICAgIGxvYWRlZC5zZWxmRW50cmllcyA9IHBsYW4uc2VsZkVudHJpZXM7XG4gICAgICAgIGxvYWRlZC5zZWxmID0gcGxhbi5zZWxmO1xuICAgICAgICBzY2hlZHVsZVdpbmRvd0JvdW5kYXJ5UmVidWlsZChsb2FkZWQpO1xuICAgICAgICBzY2hlZHVsZUJvdW5kYXJ5U2NhbnMobG9hZGVkKTtcbiAgICAgICAgYnJvYWRjYXN0Um91dGluZ0NoYW5nZWQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhgUmVidWlsZGluZyB0aGUgc3RvcmVzIGZvciBidWNrZXQgJHtrZXl9ICgke3JlYXNvbn0pOiBzdHJ1Y3R1cmUgY2hhbmdlZCBmcm9tICR7bG9hZGVkLnN0cnVjdHVyZUtleX0gdG8gJHtwbGFuLnN0cnVjdHVyZUtleX1gKTtcbiAgICBmb3IgKGxldCBzIG9mIGxvYWRlZC5zdG9yZXMpIHtcbiAgICAgICAgaWYgKHMuc3RvcmUgaW5zdGFuY2VvZiBCbG9iU3RvcmUpIHtcbiAgICAgICAgICAgIGF3YWl0IHMuc3RvcmUuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGJ1Y2tldHMuc2V0KGtleSwgUHJvbWlzZS5yZXNvbHZlKGJ1aWxkQnVja2V0KGFjY291bnQsIGJ1Y2tldE5hbWUsIHJvdXRpbmcsIHBsYW4pKSk7XG4gICAgYnJvYWRjYXN0Um91dGluZ0NoYW5nZWQoKTtcbn1cblxuY29uc3Qgcm91dGluZ1dyaXRlcyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHZvaWQ+PigpO1xuXG4vKiogVGhlIHJvdXRpbmctY29uZmlnIHdyaXRlIHBhdGggLSB0aGUgT05FIHdyaXRlIHRoYXQgY2Fubm90IGdvIHRocm91Z2ggYSBzdG9yZSAoaXQgaXMgd2hhdCBDUkVBVEVTIHRoZSBidWNrZXQgYW5kIGl0cyBzdG9yZXMpLiBTZXJpYWxpemVkIHBlciBidWNrZXQ6IGNvbmN1cnJlbnQgY29uZmlnIHdyaXRlcyB3b3VsZCByYWNlIHRoZSB2ZXJzaW9uIGNoZWNrLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHF1ZXVlUm91dGluZ0NvbmZpZ1dyaXRlKGFjY291bnQ6IHN0cmluZywgYnVja2V0TmFtZTogc3RyaW5nLCBkYXRhOiBCdWZmZXIsIGNvbmZpZz86IHsgbGFzdE1vZGlmaWVkPzogbnVtYmVyIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhc3NlcnRXcml0ZXNBbGxvd2VkKCk7XG4gICAgbGV0IGtleSA9IGAke2FjY291bnR9LyR7YnVja2V0TmFtZX1gO1xuICAgIGxldCBydW4gPSAocm91dGluZ1dyaXRlcy5nZXQoa2V5KSB8fCBQcm9taXNlLnJlc29sdmUoKSkudGhlbigoKSA9PiB3cml0ZVJvdXRpbmdDb25maWcoYWNjb3VudCwgYnVja2V0TmFtZSwgZGF0YSwgY29uZmlnKSk7XG4gICAgcm91dGluZ1dyaXRlcy5zZXQoa2V5LCBydW4udGhlbigoKSA9PiB7IH0sICgpID0+IHsgfSkpO1xuICAgIHJldHVybiBhd2FpdCBydW47XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlUm91dGluZ0NvbmZpZyhhY2NvdW50OiBzdHJpbmcsIGJ1Y2tldE5hbWU6IHN0cmluZywgZGF0YTogQnVmZmVyLCBjb25maWc/OiB7IGxhc3RNb2RpZmllZD86IG51bWJlciB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGtleSA9IGAke2FjY291bnR9LyR7YnVja2V0TmFtZX1gO1xuICAgIGxldCBpbmNvbWluZyA9IHBhcnNlUm91dGluZ0RhdGEoZGF0YSk7XG4gICAgbGV0IGxvYWRlZCA9IGF3YWl0IGdldExvYWRlZEJ1Y2tldChhY2NvdW50LCBidWNrZXROYW1lKTtcbiAgICBpZiAoIWxvYWRlZCkge1xuICAgICAgICBhd2FpdCByZXNvbHZlU291cmNlQXJjaGl2ZXMoZ2V0QnVja2V0Rm9sZGVyKGFjY291bnQsIGJ1Y2tldE5hbWUpKS5zZXQoUk9VVElOR19GSUxFLCBkYXRhLCB7IGxhc3RNb2RpZmllZDogY29uZmlnPy5sYXN0TW9kaWZpZWQgfSk7XG4gICAgICAgIGJ1Y2tldHMuc2V0KGtleSwgUHJvbWlzZS5yZXNvbHZlKGJ1aWxkQnVja2V0KGFjY291bnQsIGJ1Y2tldE5hbWUsIGluY29taW5nKSkpO1xuICAgICAgICBicm9hZGNhc3RSb3V0aW5nQ2hhbmdlZCgpO1xuICAgICAgICBjb25zb2xlLmxvZyhgQ3JlYXRlZCBidWNrZXQgJHtrZXl9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KGluY29taW5nKSAhPT0gbG9hZGVkLnJvdXRpbmdKU09OICYmIGdldENvbmZpZ1ZlcnNpb24oaW5jb21pbmcpIDw9IGdldENvbmZpZ1ZlcnNpb24obG9hZGVkLnJvdXRpbmcpKSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gYENhbm5vdCB1cGRhdGUgcm91dGluZyBjb25maWcgZm9yIGJ1Y2tldCAke2tleX06IHRoZSBuZXcgY29uZmlnIGRpZmZlcnMgZnJvbSB0aGUgY3VycmVudCBvbmUgYnV0IGl0cyB2ZXJzaW9uICgke2dldENvbmZpZ1ZlcnNpb24oaW5jb21pbmcpfSkgaXMgbm90IGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCB2ZXJzaW9uICgke2dldENvbmZpZ1ZlcnNpb24obG9hZGVkLnJvdXRpbmcpfSkuIEluY3JlbWVudCB0aGUgdmVyc2lvbiB0byB1cGRhdGUgaXQuIEN1cnJlbnQ6ICR7bG9hZGVkLnJvdXRpbmdKU09OfS4gQXR0ZW1wdGVkOiAke0pTT04uc3RyaW5naWZ5KGluY29taW5nKX1gO1xuICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIGxldCBzdG9yZWQgPSBpbmNvbWluZztcbiAgICBsZXQgcmVpbmplY3RlZCA9IDA7XG4gICAgZm9yIChsZXQgaW50ZXJtZWRpYXRlIG9mIGdldEludGVybWVkaWF0ZVNvdXJjZXMoZXhwaXJlSW50ZXJtZWRpYXRlU291cmNlcyhsb2FkZWQucm91dGluZywgRGF0ZS5ub3coKSkpKSB7XG4gICAgICAgIHN0b3JlZCA9IGluamVjdEludGVybWVkaWF0ZVNvdXJjZShzdG9yZWQsIHtcbiAgICAgICAgICAgIHNwbGl0VXJsOiBmaW5kU3BsaXRVcmwobG9hZGVkLnJvdXRpbmcsIGludGVybWVkaWF0ZSkgfHwgaW50ZXJtZWRpYXRlLnVybCxcbiAgICAgICAgICAgIGludGVybWVkaWF0ZVVybDogaW50ZXJtZWRpYXRlLnVybCxcbiAgICAgICAgICAgIHN0YXJ0OiBpbnRlcm1lZGlhdGUudmFsaWRXaW5kb3dbMF0sXG4gICAgICAgICAgICBlbmQ6IGludGVybWVkaWF0ZS52YWxpZFdpbmRvd1sxXSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlaW5qZWN0ZWQrKztcbiAgICB9XG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KHN0b3JlZCkgIT09IEpTT04uc3RyaW5naWZ5KGluY29taW5nKSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmUtaW5qZWN0ZWQgJHtyZWluamVjdGVkfSBpbi1mbGlnaHQgc3dpdGNob3ZlciB3aW5kb3dzIGludG8gdGhlIGluY29taW5nIHJvdXRpbmcgY29uZmlnIGZvciBidWNrZXQgJHtrZXl9ICh2ZXJzaW9uICR7Z2V0Q29uZmlnVmVyc2lvbihpbmNvbWluZyl9KWApO1xuICAgIH1cbiAgICAvLyBXcml0dGVuIHN0cmFpZ2h0IGludG8gdGhlIHBsYWluIGJ1Y2tldCBmb2xkZXI6IHRoZSByb3V0aW5nIGZpbGUgZGVmaW5lcyB0aGUgcGVyLXJvdXRlIHN0b3Jlcywgc28gaXQgbmV2ZXIgZmxvd3MgdGhyb3VnaCB0aGVtXG4gICAgYXdhaXQgcmVzb2x2ZVNvdXJjZUFyY2hpdmVzKGdldEJ1Y2tldEZvbGRlcihhY2NvdW50LCBidWNrZXROYW1lKSkuc2V0KFJPVVRJTkdfRklMRSwgQnVmZmVyLmZyb20oc2VyaWFsaXplUmVtb3RlQ29uZmlnKHN0b3JlZCkpLCB7IGxhc3RNb2RpZmllZDogY29uZmlnPy5sYXN0TW9kaWZpZWQgfSk7XG4gICAgYXdhaXQgc2NoZWR1bGVSb3V0aW5nUmVsb2FkKGFjY291bnQsIGJ1Y2tldE5hbWUpO1xufVxuXG4vKiogV2hpY2ggYnVja2V0cyB0aGlzIHByb2Nlc3MgY3VycmVudGx5IGhhcyBsb2FkZWQgLSB3aGF0IGEgZGVwbG95IHN1Y2Nlc3NvciBhc2tzIGl0cyBwcmVkZWNlc3NvciBmb3IsIHNvIGl0IGFjdGl2YXRlcyBleGFjdGx5IHRoZSBidWNrZXRzIHRoYXQgYXJlIGFjdHVhbGx5IGluIHVzZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3RpdmVCdWNrZXRLZXlzKCk6IHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmcgfVtdIHtcbiAgICByZXR1cm4gWy4uLmJ1Y2tldHMua2V5cygpXS5tYXAoa2V5ID0+IHtcbiAgICAgICAgbGV0IHNsYXNoID0ga2V5LmluZGV4T2YoXCIvXCIpO1xuICAgICAgICByZXR1cm4geyBhY2NvdW50OiBrZXkuc2xpY2UoMCwgc2xhc2gpLCBidWNrZXROYW1lOiBrZXkuc2xpY2Uoc2xhc2ggKyAxKSB9O1xuICAgIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVidWlsZEFsbExvYWRlZEJ1Y2tldHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChsZXQga2V5IG9mIFsuLi5idWNrZXRzLmtleXMoKV0pIHtcbiAgICAgICAgbGV0IHNsYXNoID0ga2V5LmluZGV4T2YoXCIvXCIpO1xuICAgICAgICBhd2FpdCBzY2hlZHVsZVJvdXRpbmdSZWxvYWQoa2V5LnNsaWNlKDAsIHNsYXNoKSwga2V5LnNsaWNlKHNsYXNoICsgMSksIHsgZm9yY2U6IHRydWUsIHJlYXNvbjogXCJhbGwgbG9hZGVkIGJ1Y2tldHMgd2VyZSBhc2tlZCB0byByZWJ1aWxkXCIgfSk7XG4gICAgfVxufVxuXG5jb25zdCBPV05fQ09ORklHX1dSSVRFX1RIUk9UVExFID0gMzAgKiAxMDAwO1xuY29uc3QgSU5URVJNRURJQVRFX01BSU5UQUlOX0lOVEVSVkFMID0gNjAgKiAxMDAwO1xuLy8gUGVyIGJ1Y2tldCwgbm90IGdsb2JhbDogYSBzd2l0Y2hvdmVyIGhhcyB0byB3cml0ZSBldmVyeSBidWNrZXQncyB3aW5kb3dzIGF0IG9uY2UsIGFuZCBhIHNoYXJlZCB0aHJvdHRsZSB3b3VsZCBsZXQgb25seSBvbmUgYnVja2V0IHRocm91Z2ggcGVyIGludGVydmFsXG5jb25zdCBsYXN0T3duQ29uZmlnV3JpdGUgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuXG5hc3luYyBmdW5jdGlvbiB3cml0ZU93blJvdXRpbmdDb25maWcobG9hZGVkOiBCdWNrZXRTdGF0ZSwgdXBkYXRlZDogUmVtb3RlQ29uZmlnLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBrZXkgPSBgJHtsb2FkZWQuYWNjb3VudH0vJHtsb2FkZWQuYnVja2V0TmFtZX1gO1xuICAgIGxldCBzaW5jZUxhc3QgPSBEYXRlLm5vdygpIC0gKGxhc3RPd25Db25maWdXcml0ZS5nZXQoa2V5KSB8fCAwKTtcbiAgICBpZiAoc2luY2VMYXN0IDwgT1dOX0NPTkZJR19XUklURV9USFJPVFRMRSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgTm90IHdyaXRpbmcgb3VyIG93biByb3V0aW5nIGNvbmZpZyB1cGRhdGUgZm9yIGJ1Y2tldCAke2tleX0gKCR7cmVhc29ufSk6IHRoZSBsYXN0IG9uZSB3YXMgJHtzaW5jZUxhc3R9bXMgYWdvLCB1bmRlciB0aGUgJHtPV05fQ09ORklHX1dSSVRFX1RIUk9UVExFfW1zIHRocm90dGxlLiBSZXRyeWluZyBvbiB0aGUgbmV4dCBtYWludGVuYW5jZSBwYXNzLiBXYW50ZWQ6ICR7SlNPTi5zdHJpbmdpZnkodXBkYXRlZCl9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGFzdE93bkNvbmZpZ1dyaXRlLnNldChrZXksIERhdGUubm93KCkpO1xuICAgIGxldCB2ZXJzaW9uID0gbmV4dEludGVybWVkaWF0ZVZlcnNpb24oZ2V0Q29uZmlnVmVyc2lvbihsb2FkZWQucm91dGluZykpO1xuICAgIGxldCBuZXh0OiBSZW1vdGVDb25maWcgPSB7IC4uLnVwZGF0ZWQsIHZlcnNpb24gfTtcbiAgICBjb25zb2xlLmxvZyhgV3JpdGluZyAke1JPVVRJTkdfRklMRX0gZm9yIGJ1Y2tldCAke2tleX0gKCR7cmVhc29ufSksIHZlcnNpb24gJHtnZXRDb25maWdWZXJzaW9uKGxvYWRlZC5yb3V0aW5nKX0gLT4gJHt2ZXJzaW9ufTogJHtKU09OLnN0cmluZ2lmeShuZXh0KX1gKTtcbiAgICBsZXQgZGF0YSA9IEJ1ZmZlci5mcm9tKHNlcmlhbGl6ZVJlbW90ZUNvbmZpZyhuZXh0KSk7XG4gICAgYXdhaXQgcXVldWVSb3V0aW5nQ29uZmlnV3JpdGUobG9hZGVkLmFjY291bnQsIGxvYWRlZC5idWNrZXROYW1lLCBkYXRhKTtcbiAgICBhd2FpdCBwcm9wYWdhdGVSb3V0aW5nQ29uZmlnKGxvYWRlZCwgbmV4dCwgZGF0YSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb3BhZ2F0ZVJvdXRpbmdDb25maWcobG9hZGVkOiBCdWNrZXRTdGF0ZSwgbmV4dDogUmVtb3RlQ29uZmlnLCBkYXRhOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgdGFyZ2V0cyA9IG5ldyBNYXA8c3RyaW5nLCBTb3VyY2VDb25maWc+KCk7XG4gICAgZm9yIChsZXQgc291cmNlIG9mIFsuLi5sb2FkZWQucm91dGluZy5zb3VyY2VzLCAuLi5uZXh0LnNvdXJjZXNdKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlID09PSBcInN0cmluZ1wiIHx8IHNvdXJjZS5pbnRlcm1lZGlhdGUpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoc291cmNlLnR5cGUgPT09IFwicmVtb3RlXCIpIHtcbiAgICAgICAgICAgIGxldCBwYXJzZWQgPSBwYXJzZUhvc3RlZFVybChzb3VyY2UudXJsKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWQuYWNjb3VudCAhPT0gbG9hZGVkLmFjY291bnQgfHwgcGFyc2VkLmJ1Y2tldE5hbWUgIT09IGxvYWRlZC5idWNrZXROYW1lKSBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFyZ2V0cy5oYXMoc291cmNlLnVybCkpIGNvbnRpbnVlO1xuICAgICAgICB0YXJnZXRzLnNldChzb3VyY2UudXJsLCBzb3VyY2UpO1xuICAgIH1cbiAgICBmb3IgKGxldCBbdXJsLCBzb3VyY2VdIG9mIHRhcmdldHMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGNyZWF0ZUFwaUFyY2hpdmVzKHNvdXJjZSkuc2V0KFJPVVRJTkdfRklMRSwgZGF0YSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgV3JvdGUgJHtST1VUSU5HX0ZJTEV9IGZvciBidWNrZXQgJHtsb2FkZWQuYWNjb3VudH0vJHtsb2FkZWQuYnVja2V0TmFtZX0gdG8gJHt1cmx9YCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFByb3BhZ2F0aW5nIG91ciByb3V0aW5nIGNvbmZpZyB1cGRhdGUgdG8gJHt1cmx9IGZhaWxlZDogJHsoZSBhcyBFcnJvcikuc3RhY2sgPz8gZX1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbWFpbnRhaW5JbnRlcm1lZGlhdGVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCB7IGRvbWFpbiwgcG9ydCB9ID0gZ2V0U3RvcmFnZVNlcnZlckNvbmZpZygpO1xuICAgIGxldCB0YWtlb3ZlciA9IGdldFRha2VvdmVySW50ZXJtZWRpYXRlKCk7XG4gICAgbGV0IHdyaXR0ZW46IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGFscmVhZHlDb3JyZWN0OiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBub3RPdXJzOiBzdHJpbmdbXSA9IFtdO1xuICAgIC8vIE9OTFkgYnVja2V0cyBhbHJlYWR5IGluIG1lbW9yeS4gQSBzd2l0Y2hvdmVyIG11c3QgbmV2ZXIgbG9hZCBhIGJ1Y2tldDogbG9hZGluZyBzdGFydHMgaXRzIHN5bmNocm9uaXphdGlvbiwgYW5kIGJ1Y2tldHMgbm90aGluZyBoYXMgdG91Y2hlZCAobGVnYWN5IG9uZXMgZXNwZWNpYWxseSkgaGF2ZSBubyB3cml0ZXMgdG8gaGFuZCBvZmYgaW4gdGhlIGZpcnN0IHBsYWNlLiBPbmUgdGhhdCBkb2VzIGdldCB1c2VkIG1pZC1zd2l0Y2hvdmVyIGxvYWRzIG9uIHRoYXQgYWNjZXNzLCBhbmQgdGhlIG5leHQgcGFzcyBnaXZlcyBpdCBpdHMgd2luZG93LlxuICAgIGxldCBrZXlzID0gWy4uLmJ1Y2tldHMua2V5cygpXTtcbiAgICBmb3IgKGxldCBrZXkgb2Yga2V5cykge1xuICAgICAgICBsZXQgbG9hZGVkUHJvbWlzZSA9IGJ1Y2tldHMuZ2V0KGtleSk7XG4gICAgICAgIGlmICghbG9hZGVkUHJvbWlzZSkgY29udGludWU7XG4gICAgICAgIGxldCBsb2FkZWQgPSBhd2FpdCBsb2FkZWRQcm9taXNlLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgICAgIGlmICghbG9hZGVkKSBjb250aW51ZTtcbiAgICAgICAgbGV0IGV4cGlyZWQgPSBleHBpcmVJbnRlcm1lZGlhdGVTb3VyY2VzKGxvYWRlZC5yb3V0aW5nLCBEYXRlLm5vdygpKTtcbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGV4cGlyZWQpICE9PSBKU09OLnN0cmluZ2lmeShsb2FkZWQucm91dGluZykpIHtcbiAgICAgICAgICAgIGF3YWl0IHdyaXRlT3duUm91dGluZ0NvbmZpZyhsb2FkZWQsIGV4cGlyZWQsIGBzd2l0Y2hvdmVyIHdpbmRvd3MgZXhwaXJlZCBtb3JlIHRoYW4gJHtJTlRFUk1FRElBVEVfRVhQSVJFX0dSQUNFIC8gMTAwMH1zIGFnb2ApO1xuICAgICAgICAgICAgd3JpdHRlbi5wdXNoKGtleSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRha2VvdmVyKSBjb250aW51ZTtcbiAgICAgICAgbGV0IG1haW5VcmwgPSBsb2FkZWQucm91dGluZy5zb3VyY2VzLmZpbmQoeCA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIgfHwgeC50eXBlICE9PSBcInJlbW90ZVwiIHx8IHguaW50ZXJtZWRpYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBsZXQgcGFyc2VkID0gcGFyc2VIb3N0ZWRVcmwoeC51cmwpO1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlZC5hZGRyZXNzID09PSBkb21haW4gJiYgcGFyc2VkLnBvcnQgPT09IHBvcnQ7XG4gICAgICAgIH0pIGFzIEhvc3RlZENvbmZpZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCFtYWluVXJsKSB7XG4gICAgICAgICAgICBub3RPdXJzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpbmplY3RlZCA9IGluamVjdEludGVybWVkaWF0ZVNvdXJjZShsb2FkZWQucm91dGluZywge1xuICAgICAgICAgICAgc3BsaXRVcmw6IG1haW5VcmwudXJsLFxuICAgICAgICAgICAgaW50ZXJtZWRpYXRlVXJsOiByZXBsYWNlSG9zdGVkVXJsUG9ydChtYWluVXJsLnVybCwgdGFrZW92ZXIuYWx0UG9ydCksXG4gICAgICAgICAgICBzdGFydDogdGFrZW92ZXIuc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IHRha2VvdmVyLmVuZCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShpbmplY3RlZCkgPT09IEpTT04uc3RyaW5naWZ5KGxvYWRlZC5yb3V0aW5nKSkge1xuICAgICAgICAgICAgYWxyZWFkeUNvcnJlY3QucHVzaChrZXkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgd3JpdGVPd25Sb3V0aW5nQ29uZmlnKGxvYWRlZCwgaW5qZWN0ZWQsIGB3ZSBhcmUgYSBkZXBsb3kgc3VjY2Vzc29yOiB3cml0ZXMgcm91dGUgdG8gb3VyIGFsdGVybmF0ZSBwb3J0ICR7dGFrZW92ZXIuYWx0UG9ydH0gZnJvbSAke25ldyBEYXRlKHRha2VvdmVyLnN0YXJ0KS50b0lTT1N0cmluZygpfSB1bnRpbCBvdXIgcHJlZGVjZXNzb3IgaXMga2lsbGVkIGF0ICR7bmV3IERhdGUodGFrZW92ZXIuZW5kKS50b0lTT1N0cmluZygpfWApO1xuICAgICAgICB3cml0dGVuLnB1c2goa2V5KTtcbiAgICB9XG4gICAgaWYgKCF0YWtlb3ZlcikgcmV0dXJuO1xuICAgIGlmICgha2V5cy5sZW5ndGgpIHtcbiAgICAgICAgY29uc29sZS5sb2coYE5vIGFjdGl2ZSBidWNrZXRzLCBzbyBubyBjb25maWcgZmlsZXMgdG8gd3JpdGUgdGhlIGludGVybWVkaWF0ZSBpbnRvIChhIGJ1Y2tldCBpcyBvbmx5IGFjdGl2ZSBvbmNlIHNvbWV0aGluZyB1c2VzIGl0KWApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghd3JpdHRlbi5sZW5ndGgpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFdyb3RlIG5vIGNvbmZpZyBmaWxlczogb2YgJHtrZXlzLmxlbmd0aH0gYWN0aXZlIGJ1Y2tldHMsICR7YWxyZWFkeUNvcnJlY3QubGVuZ3RofSBhbHJlYWR5IGNvbnRhaW4gdGhlIGludGVybWVkaWF0ZSBhbmQgJHtub3RPdXJzLmxlbmd0aH0gYXJlIG5vdCBob3N0ZWQgYnkgdXNgKTtcbiAgICB9XG59XG5cbi8qKiBPdXIgcHJlZGVjZXNzb3Igc3RpbGwgaG9sZHMgdGhlIG1haW4gcG9ydCBhbmQgaGFzIGJlZW4gc2VydmluZyBhbGwgYWxvbmcsIHNvIGl0IC0gbm90IHVzIC0ga25vd3Mgd2hpY2ggYnVja2V0cyBhcmUgaW4gdXNlLiBXZSBhY3RpdmF0ZSBleGFjdGx5IHRob3NlLCB3aGljaCBpcyB3aGF0IG1ha2VzIHRoZWlyIGNvbmZpZyBmaWxlcyBnZXQgdGhlIGludGVybWVkaWF0ZTsgbm90aGluZyBlbHNlIG9uIGRpc2sgaXMgdG91Y2hlZC4gKi9cbmFzeW5jIGZ1bmN0aW9uIGFjdGl2YXRlUHJlZGVjZXNzb3JCdWNrZXRzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCB7IGRvbWFpbiwgcG9ydCB9ID0gZ2V0U3RvcmFnZVNlcnZlckNvbmZpZygpO1xuICAgIGxldCB1cmwgPSBgaHR0cHM6Ly8ke2RvbWFpbn06JHtwb3J0fWA7XG4gICAgbGV0IGtleXM6IHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmcgfVtdO1xuICAgIHRyeSB7XG4gICAgICAgIGtleXMgPSBhd2FpdCBsaXN0U2VydmVyQWN0aXZlQnVja2V0S2V5cyh7IHVybCB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYENvdWxkIG5vdCBhc2sgb3VyIHByZWRlY2Vzc29yIG9uICR7dXJsfSB3aGljaCBidWNrZXRzIGFyZSBhY3RpdmUsIHNvIG9ubHkgYnVja2V0cyB1c2VkIG9uIHRoaXMgcHJvY2VzcyBnZXQgdGhlIGludGVybWVkaWF0ZTogJHsoZSBhcyBFcnJvcikuc3RhY2sgPz8gZX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWtleXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBPdXIgcHJlZGVjZXNzb3Igb24gJHt1cmx9IGhhcyBubyBhY3RpdmUgYnVja2V0cywgc28gdGhlcmUgYXJlIG5vIGNvbmZpZyBmaWxlcyB0byB3cml0ZSB0aGUgaW50ZXJtZWRpYXRlIGludG9gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhgT3VyIHByZWRlY2Vzc29yIG9uICR7dXJsfSBoYXMgJHtrZXlzLmxlbmd0aH0gYWN0aXZlIGJ1Y2tldHMsIGFjdGl2YXRpbmcgdGhlbSBoZXJlIHNvIHRoZWlyIGNvbmZpZyBmaWxlcyBnZXQgdGhlIGludGVybWVkaWF0ZTogJHtrZXlzLm1hcCh4ID0+IGAke3guYWNjb3VudH0vJHt4LmJ1Y2tldE5hbWV9YCkuam9pbihcIiwgXCIpfWApO1xuICAgIGZvciAobGV0IHsgYWNjb3VudCwgYnVja2V0TmFtZSB9IG9mIGtleXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGdldExvYWRlZEJ1Y2tldChhY2NvdW50LCBidWNrZXROYW1lKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQWN0aXZhdGluZyBidWNrZXQgJHthY2NvdW50fS8ke2J1Y2tldE5hbWV9IChhY3RpdmUgb24gb3VyIHByZWRlY2Vzc29yKSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLnN0YWNrID8/IGV9YCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKiBTdGFydGVkIGJ5IGRlcGxveVRha2VvdmVyIG9uY2Ugd2UgYXJlIGFjdHVhbGx5IGEgZGVwbG95IHN1Y2Nlc3NvciBsaXN0ZW5pbmcgb24gYW4gYWx0ZXJuYXRlIHBvcnQuIFVudGlsIHRoZW4gdGhlcmUgYXJlIG5vIHN3aXRjaG92ZXIgd2luZG93cyB0byB3cml0ZSBvciBleHBpcmUsIHNvIG5vdGhpbmcgcG9sbHMuICovXG5leHBvcnQgY29uc3Qgc3RhcnRJbnRlcm1lZGlhdGVNYWludGVuYW5jZSA9IGxhenkoKCkgPT4ge1xuICAgIHZvaWQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgYWN0aXZhdGVQcmVkZWNlc3NvckJ1Y2tldHMoKTtcbiAgICAgICAgYXdhaXQgbWFpbnRhaW5JbnRlcm1lZGlhdGVzKCk7XG4gICAgfSkoKS5jYXRjaCgoZTogRXJyb3IpID0+IGNvbnNvbGUuZXJyb3IoYFdyaXRpbmcgdGhlIGludGVybWVkaWF0ZSBpbnRvIHRoZSBjb25maWcgZmlsZXMgZmFpbGVkOiAke2Uuc3RhY2sgPz8gZX1gKSk7XG4gICAgcnVuSW5maW5pdGVQb2xsKElOVEVSTUVESUFURV9NQUlOVEFJTl9JTlRFUlZBTCwgbWFpbnRhaW5JbnRlcm1lZGlhdGVzKTtcbn0pO1xuXG5leHBvcnQgdHlwZSBTZXJ2ZXJCdWNrZXRJbmZvID0ge1xuICAgIGJ1Y2tldE5hbWU6IHN0cmluZztcbiAgICBhY3RpdmU6IGJvb2xlYW47XG4gICAgLyoqIFdoZXJlIHRoZSBidWNrZXQncyBkYXRhIGxpdmVzIG9uIHRoaXMgc2VydmVyICovXG4gICAgZm9sZGVyOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBkcml2ZSB0aGF0IGZvbGRlciBpcyBvbi4gQnVja2V0cyBzaGFyaW5nIGEgZHJpdmUgcmVwb3J0IHRoZSBzYW1lIG51bWJlcnMuICovXG4gICAgZGlzaz86IEJ1Y2tldERpc2tJbmZvO1xuICAgIGRpc2tFcnJvcj86IHN0cmluZztcbiAgICB3cml0ZVN0YXRzPzogQnVja2V0V3JpdGVTdGF0cztcbiAgICBjb25maWc/OiBBcmNoaXZlc0NvbmZpZztcbiAgICBlcnJvcj86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEFjdGl2ZUJ1Y2tldEluZm8gPSB7XG4gICAgZm9sZGVyOiBzdHJpbmc7XG4gICAgLyoqIFRoZSByb3V0aW5nIGNvbmZpZyB0aGUgYnVja2V0IGlzIFJVTk5JTkcgb24sIHN0cmFpZ2h0IGZyb20gbWVtb3J5IC0gaW5jbHVkaW5nIHN3aXRjaG92ZXIgd2luZG93cyB3cml0dGVuIHNpbmNlIGl0IGxvYWRlZCAqL1xuICAgIHJvdXRpbmc6IFJlbW90ZUNvbmZpZztcbiAgICAvKiogT3VyIG93biBlbnRyaWVzIGluIHRoYXQgY29uZmlnLCBhbmQgdGhlaXIgc3VtbWFyaXplZCBjdXJyZW50IHJvbGUgKHJvdXRlcyB1bmlvbiArIGZsYWdzKSAqL1xuICAgIHNlbGZFbnRyaWVzOiBIb3N0ZWRDb25maWdbXTtcbiAgICBzZWxmPzogU2VsZlN1bW1hcnk7XG4gICAgY29uZmlnOiBBcmNoaXZlc0NvbmZpZztcbn07XG5cbmZ1bmN0aW9uIHRvQWN0aXZlQnVja2V0SW5mbyhsb2FkZWQ6IEJ1Y2tldFN0YXRlKTogQWN0aXZlQnVja2V0SW5mbyB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZm9sZGVyOiBnZXRCdWNrZXRGb2xkZXIobG9hZGVkLmFjY291bnQsIGxvYWRlZC5idWNrZXROYW1lKSxcbiAgICAgICAgcm91dGluZzogbG9hZGVkLnJvdXRpbmcsXG4gICAgICAgIHNlbGZFbnRyaWVzOiBsb2FkZWQuc2VsZkVudHJpZXMsXG4gICAgICAgIHNlbGY6IGxvYWRlZC5zZWxmLFxuICAgICAgICBjb25maWc6IGdldEJ1Y2tldENvbmZpZyhsb2FkZWQpLFxuICAgIH07XG59XG5cbi8qKiBUaGUgbGl2ZSBpbi1tZW1vcnkgc3RhdGUgb2YgT05FIGJ1Y2tldCwgYW5zd2VyZWQgd2l0aG91dCB0b3VjaGluZyB0aGUgZGlzayAobm8gcm91dGluZyBmaWxlIHJlYWQsIG5vIHN0YXRmcywgbm8gc3RvcmVkIHdyaXRlIHN0YXRzKS4gUmV0dXJucyBhbiBlcnJvciBzdHJpbmcgd2hlbiB0aGUgYnVja2V0IGlzIG5vdCBsb2FkZWQgaGVyZSwgd2hpY2ggaXMgdGhlIG5vcm1hbCBzdGF0ZSBmb3IgYSBidWNrZXQgbm90aGluZyBoYXMgYWNjZXNzZWQgc2luY2Ugc3RhcnR1cC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBY3RpdmVCdWNrZXQoYWNjb3VudDogc3RyaW5nLCBidWNrZXROYW1lOiBzdHJpbmcpOiBQcm9taXNlPEFjdGl2ZUJ1Y2tldEluZm8gfCBzdHJpbmc+IHtcbiAgICBsZXQga2V5ID0gYCR7YWNjb3VudH0vJHtidWNrZXROYW1lfWA7XG4gICAgbGV0IGxvYWRlZFByb21pc2UgPSBidWNrZXRzLmdldChrZXkpO1xuICAgIGlmICghbG9hZGVkUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gYEJ1Y2tldCAke2tleX0gaXMgbm90IGxvYWRlZCBvbiB0aGlzIHNlcnZlciwgc28gaXQgaGFzIG5vIGxpdmUgc3RhdGUgKGl0IGxvYWRzIG9uIGZpcnN0IGFjY2VzcylgO1xuICAgIH1cbiAgICBsZXQgbG9hZGVkOiBCdWNrZXRTdGF0ZSB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgICBsb2FkZWQgPSBhd2FpdCBsb2FkZWRQcm9taXNlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGBCdWNrZXQgJHtrZXl9IGZhaWxlZCB0byBsb2FkIG9uIHRoaXMgc2VydmVyOiAke1N0cmluZygoZSBhcyBFcnJvcikuc3RhY2sgPz8gZSkuc2xpY2UoMCwgNTAwKX1gO1xuICAgIH1cbiAgICBpZiAoIWxvYWRlZCkge1xuICAgICAgICByZXR1cm4gYEJ1Y2tldCAke2tleX0gZG9lcyBub3QgZXhpc3Qgb24gdGhpcyBzZXJ2ZXJgO1xuICAgIH1cbiAgICByZXR1cm4gdG9BY3RpdmVCdWNrZXRJbmZvKGxvYWRlZCk7XG59XG5cbi8qKiBMb2FkcyBhIGJ1Y2tldCB0aGF0IGV4aXN0cyBvbiB0aGlzIHNlcnZlcidzIGRpc2sgaW50byBtZW1vcnksIHdoaWNoIHN0YXJ0cyBpdHMgc3luY2hyb25pemF0aW9uIGFuZCB3aW5kb3cgdGltZXJzLCBhbmQgcmV0dXJucyBpdHMgbGl2ZSBzdGF0ZS4gTm90aGluZyBpcyB3cml0dGVuIGFuZCBubyBvdGhlciBzZXJ2ZXIgaXMgY29udGFjdGVkIC0gdW5saWtlIGJ1aWxkaW5nIGFuIEFyY2hpdmVzQ2hhaW4gZm9yIGl0LCB3aGljaCB3b3VsZCBwcm9iZSBldmVyeSBzb3VyY2UgYW5kIGNvdWxkIHdyaXRlIHRoZSByb3V0aW5nIGNvbmZpZy4gQWxyZWFkeS1sb2FkZWQgYnVja2V0cyBqdXN0IHJldHVybiB0aGVpciBzdGF0ZS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3RpdmF0ZUJ1Y2tldChhY2NvdW50OiBzdHJpbmcsIGJ1Y2tldE5hbWU6IHN0cmluZyk6IFByb21pc2U8QWN0aXZlQnVja2V0SW5mbyB8IHN0cmluZz4ge1xuICAgIGxldCBrZXkgPSBgJHthY2NvdW50fS8ke2J1Y2tldE5hbWV9YDtcbiAgICBsZXQgd2FzTG9hZGVkID0gYnVja2V0cy5oYXMoa2V5KTtcbiAgICBsZXQgbG9hZGVkOiBCdWNrZXRTdGF0ZSB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgICBsb2FkZWQgPSBhd2FpdCBnZXRMb2FkZWRCdWNrZXQoYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gYEJ1Y2tldCAke2tleX0gZmFpbGVkIHRvIGxvYWQgb24gdGhpcyBzZXJ2ZXI6ICR7U3RyaW5nKChlIGFzIEVycm9yKS5zdGFjayA/PyBlKS5zbGljZSgwLCA1MDApfWA7XG4gICAgfVxuICAgIGlmICghbG9hZGVkKSB7XG4gICAgICAgIHJldHVybiBgQnVja2V0ICR7a2V5fSBkb2VzIG5vdCBleGlzdCBvbiB0aGlzIHNlcnZlciAobm8gcm91dGluZyBmaWxlIGluICR7Z2V0QnVja2V0Rm9sZGVyKGFjY291bnQsIGJ1Y2tldE5hbWUpfSlgO1xuICAgIH1cbiAgICAvLyBXYWl0IGZvciB0aGUgaW5kZXhlcyB0byBsb2FkLCBzbyB0aGUgdG90YWxzIHdlIHJldHVybiBhcmUgdGhlIHJlYWwgb25lcyByYXRoZXIgdGhhbiB6ZXJvZXMgZnJvbSBzdG9yZXMgdGhhdCBoYXZlIG5vdCByZWFkIHRoZWlyIGluZGV4IHlldC4gVGhlIHNvdXJjZSBzY2FucyBrZWVwIHJ1bm5pbmcgaW4gdGhlIGJhY2tncm91bmQuXG4gICAgZm9yIChsZXQgcyBvZiBsb2FkZWQuc3RvcmVzKSB7XG4gICAgICAgIGlmIChzLnN0b3JlIGluc3RhbmNlb2YgQmxvYlN0b3JlKSB7XG4gICAgICAgICAgICBhd2FpdCBzLnN0b3JlLmluaXQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXdhc0xvYWRlZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgQWN0aXZhdGVkIGJ1Y2tldCAke2tleX0gb24gcmVxdWVzdDogaXQgaXMgbm93IGxvYWRlZCBhbmQgc3luY2hyb25pemluZ2ApO1xuICAgIH1cbiAgICByZXR1cm4gdG9BY3RpdmVCdWNrZXRJbmZvKGxvYWRlZCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0QWNjb3VudEJ1Y2tldHMoYWNjb3VudDogc3RyaW5nKTogUHJvbWlzZTxTZXJ2ZXJCdWNrZXRJbmZvW10+IHtcbiAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCB0aW1pbmdzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICBhc3luYyBmdW5jdGlvbiB0aW1lZDxUPihuYW1lOiBzdHJpbmcsIHJ1bjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgICAgICBsZXQgYmVnYW4gPSBEYXRlLm5vdygpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJ1bigpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGltaW5ncy5zZXQobmFtZSwgKHRpbWluZ3MuZ2V0KG5hbWUpIHx8IDApICsgKERhdGUubm93KCkgLSBiZWdhbikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBhY2NvdW50Rm9sZGVyID0gcGF0aC5qb2luKGdldFN0b3JhZ2VTZXJ2ZXJDb25maWcoKS5mb2xkZXIsIFwiYnVja2V0czJcIiwgYWNjb3VudCk7XG4gICAgbGV0IG5hbWVzOiBzdHJpbmdbXTtcbiAgICB0cnkge1xuICAgICAgICBuYW1lcyA9IGF3YWl0IHRpbWVkKFwicmVhZGRpclwiLCAoKSA9PiBmcy5wcm9taXNlcy5yZWFkZGlyKGFjY291bnRGb2xkZXIpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICAvLyBQZXItcm91dGUgZm9sZGVycyAoYnVja2V0TmFtZS1yb3V0ZS08c3RhcnQ+LTxlbmQ+KSBiZWxvbmcgdG8gdGhlIHNhbWUgYnVja2V0IGFzIHRoZSBwbGFpbiBmb2xkZXIgLSBjb2xsYXBzZSB0aGVtIHNvIG9uZSBidWNrZXQgbGlzdHMgb25jZVxuICAgIG5hbWVzID0gWy4uLm5ldyBTZXQobmFtZXMubWFwKHggPT4geC5yZXBsYWNlKC8tcm91dGUtW1xcZC5dKy1bXFxkLl0rJC8sIFwiXCIpKSldO1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChuYW1lcy5tYXAoYXN5bmMgYnVja2V0TmFtZSA9PiB7XG4gICAgICAgICAgICBsZXQga2V5ID0gYCR7YWNjb3VudH0vJHtidWNrZXROYW1lfWA7XG4gICAgICAgICAgICBsZXQgZm9sZGVyID0gZ2V0QnVja2V0Rm9sZGVyKGFjY291bnQsIGJ1Y2tldE5hbWUpO1xuICAgICAgICAgICAgbGV0IGJhc2U6IFNlcnZlckJ1Y2tldEluZm8gPSB7IGJ1Y2tldE5hbWUsIGFjdGl2ZTogZmFsc2UsIGZvbGRlciB9O1xuICAgICAgICAgICAgYmFzZS5kaXNrID0gYXdhaXQgdGltZWQoXCJzdGF0ZnNcIiwgKCkgPT4gZ2V0RGlza0luZm8oZm9sZGVyKSkuY2F0Y2goKGU6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgYmFzZS5kaXNrRXJyb3IgPSBTdHJpbmcoZS5zdGFjayA/PyBlKS5zbGljZSgwLCA1MDApO1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJhc2Uud3JpdGVTdGF0cyA9IGdldEJ1Y2tldFdyaXRlU3RhdHMoa2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGxvYWRlZFByb21pc2UgPSBidWNrZXRzLmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKGxvYWRlZFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbG9hZGVkID0gYXdhaXQgdGltZWQoXCJhd2FpdExvYWRlZFwiLCAoKSA9PiBsb2FkZWRQcm9taXNlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgYWN0aXZlOiB0cnVlLCBjb25maWc6IGdldEJ1Y2tldENvbmZpZyhsb2FkZWQpIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmJhc2UsIGFjdGl2ZTogdHJ1ZSwgZXJyb3I6IFN0cmluZygoZSBhcyBFcnJvcikuc3RhY2sgPz8gZSkuc2xpY2UoMCwgNTAwKSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRpbWVkKFwicmVhZFJvdXRpbmdGaWxlXCIsICgpID0+IHJlYWRSb3V0aW5nRmlsZShmb2xkZXIpKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgZXJyb3I6IGBObyByb3V0aW5nIGZpbGUgKCR7Uk9VVElOR19GSUxFfSlgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBwYXJzZWQgPSBhd2FpdCB0aW1lZChcInBhcnNlUm91dGluZ1wiLCBhc3luYyAoKSA9PiBwYXJzZVJvdXRpbmdEYXRhKGRhdGEpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5iYXNlLCBjb25maWc6IHsgcmVtb3RlQ29uZmlnOiBwYXJzZWQgfSB9O1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmJhc2UsIGVycm9yOiBTdHJpbmcoKGUgYXMgRXJyb3IpLnN0YWNrID8/IGUpLnNsaWNlKDAsIDUwMCkgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgIC8vIFRoZSBwYXJ0cyBydW4gY29uY3VycmVudGx5LCBzbyB0aGVzZSBhcmUgc3VtbWVkIHdhbGwgdGltZXMgcGVyIHBhcnQsIG5vdCBhIGJyZWFrZG93biBvZiB0aGUgdG90YWxcbiAgICAgICAgbGV0IHBhcnRzID0gWy4uLnRpbWluZ3NdLm1hcCgoW25hbWUsIG1zXSkgPT4gYCR7bmFtZX0gJHttc31tc2ApLmpvaW4oXCIsIFwiKTtcbiAgICAgICAgY29uc29sZS5sb2coYGxpc3RBY2NvdW50QnVja2V0cygke2FjY291bnR9KSB0b29rICR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zIGZvciAke25hbWVzLmxlbmd0aH0gYnVja2V0czogJHtwYXJ0c31gKTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIEJ1Y2tldFdyaXRlU3RhdHMgPSB7XG4gICAgLyoqIEV2ZXJ5IHNldCBjYWxsIHRoZSBidWNrZXQgYWNjZXB0ZWQgKi9cbiAgICBvcmlnaW5hbFdyaXRlczogbnVtYmVyO1xuICAgIG9yaWdpbmFsQnl0ZXM6IG51bWJlcjtcbiAgICAvKiogV2hhdCBhY3R1YWxseSByZWFjaGVkIHRoZSBzb3VyY2VzLiBGYXN0IHdyaXRlcyBjb2FsZXNjZSByZXBlYXRlZCB3cml0ZXMgdG8gdGhlIHNhbWUga2V5LCBzbyB0aGlzIGlzIGxvd2VyIHRoYW4gdGhlIG9yaWdpbmFsIGNvdW50cyAoYW5kIGlzIHdoYXQgdGhlIGRpc2sgYWN0dWFsbHkgZGlkKS4gKi9cbiAgICBmbHVzaGVkV3JpdGVzOiBudW1iZXI7XG4gICAgZmx1c2hlZEJ5dGVzOiBudW1iZXI7XG59O1xuZnVuY3Rpb24gZW1wdHlXcml0ZVN0YXRzKCk6IEJ1Y2tldFdyaXRlU3RhdHMge1xuICAgIHJldHVybiB7IG9yaWdpbmFsV3JpdGVzOiAwLCBvcmlnaW5hbEJ5dGVzOiAwLCBmbHVzaGVkV3JpdGVzOiAwLCBmbHVzaGVkQnl0ZXM6IDAgfTtcbn1cblxuLy8gSW4gbWVtb3J5IG9ubHk6IHRvdGFscyBzaW5jZSB0aGlzIHByb2Nlc3Mgc3RhcnRlZCAob3IgdGhlIGxhc3QgY2xlYXJXcml0ZVN0YXRzKS4gUGVyc2lzdGluZyB0aGVtIHRvIGRpc2sgd2FzIG1vcmUgbWFjaGluZXJ5IHRoYW4gdGhlIG51bWJlcnMgd2VyZSB3b3J0aC5cbmNvbnN0IHdyaXRlU3RhdHMgPSBuZXcgTWFwPHN0cmluZywgQnVja2V0V3JpdGVTdGF0cz4oKTtcblxuZnVuY3Rpb24gY291bnRCdWNrZXRXcml0ZShrZXk6IHN0cmluZywga2luZDogXCJvcmlnaW5hbFwiIHwgXCJmbHVzaGVkXCIsIGJ5dGVzOiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgc3RhdHMgPSB3cml0ZVN0YXRzLmdldChrZXkpO1xuICAgIGlmICghc3RhdHMpIHtcbiAgICAgICAgc3RhdHMgPSBlbXB0eVdyaXRlU3RhdHMoKTtcbiAgICAgICAgd3JpdGVTdGF0cy5zZXQoa2V5LCBzdGF0cyk7XG4gICAgfVxuICAgIGlmIChraW5kID09PSBcIm9yaWdpbmFsXCIpIHtcbiAgICAgICAgc3RhdHMub3JpZ2luYWxXcml0ZXMrKztcbiAgICAgICAgc3RhdHMub3JpZ2luYWxCeXRlcyArPSBieXRlcztcbiAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0cy5mbHVzaGVkV3JpdGVzKys7XG4gICAgICAgIHN0YXRzLmZsdXNoZWRCeXRlcyArPSBieXRlcztcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldEJ1Y2tldFdyaXRlU3RhdHMoa2V5OiBzdHJpbmcpOiBCdWNrZXRXcml0ZVN0YXRzIHtcbiAgICByZXR1cm4gd3JpdGVTdGF0cy5nZXQoa2V5KSB8fCBlbXB0eVdyaXRlU3RhdHMoKTtcbn1cblxuLyoqIFplcm9lcyB0aGUgd3JpdGUgc3RhdGlzdGljcyBvZiBldmVyeSBidWNrZXQgaW4gdGhlIGFjY291bnQuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJBY2NvdW50V3JpdGVTdGF0cyhhY2NvdW50OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBwcmVmaXggPSBgJHthY2NvdW50fS9gO1xuICAgIGxldCBjbGVhcmVkID0gMDtcbiAgICBmb3IgKGxldCBrZXkgb2YgWy4uLndyaXRlU3RhdHMua2V5cygpXSkge1xuICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKHByZWZpeCkpIGNvbnRpbnVlO1xuICAgICAgICB3cml0ZVN0YXRzLmRlbGV0ZShrZXkpO1xuICAgICAgICBjbGVhcmVkKys7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKGBDbGVhcmVkIHRoZSB3cml0ZSBzdGF0aXN0aWNzIG9mICR7Y2xlYXJlZH0gYnVja2V0cyBpbiBhY2NvdW50ICR7YWNjb3VudH1gKTtcbiAgICByZXR1cm4gY2xlYXJlZDtcbn1cblxuY29uc3QgTEFSR0VfRklMRV9QQVJUX1NJWkUgPSA4ICogMTAyNCAqIDEwMjQ7XG5cbi8vIFdyYXBzIGEgbG9jYWxseSBob3N0ZWQgYnVja2V0IGluIHRoZSBJQXJjaGl2ZXMgaW50ZXJmYWNlLCBzbyBjb2RlIHdyaXR0ZW4gYWdhaW5zdCBJQXJjaGl2ZXMgKHRoZSBjaGFpbiwgc3luYyBzb3VyY2VzLCBob2xkZXIgcmVhZHMpIHRhbGtzIHRvIGl0IGRpcmVjdGx5IGluc3RlYWQgb2YgYmVjb21pbmcgYSBuZXR3b3JrIGNsaWVudCB0byBvdXJzZWx2ZXMuXG5jbGFzcyBCdWNrZXRJQXJjaGl2ZXNXcmFwcGVyIGltcGxlbWVudHMgSUFyY2hpdmVzIHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFjY291bnQ6IHN0cmluZywgcHJpdmF0ZSBidWNrZXROYW1lOiBzdHJpbmcsIHByaXZhdGUgc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWcpIHsgfVxuXG4gICAgcHJpdmF0ZSBmaW5kU3RvcmUoKTogUHJvbWlzZTxMb2FkZWRTdG9yZT4ge1xuICAgICAgICByZXR1cm4gZmluZEJ1Y2tldFN0b3JlKHRoaXMuYWNjb3VudCwgdGhpcy5idWNrZXROYW1lLCB0aGlzLnNvdXJjZUNvbmZpZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERlYnVnTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIGBsb2NhbEJ1Y2tldCBhY2NvdW50ICR7dGhpcy5hY2NvdW50fSBidWNrZXQgJHt0aGlzLmJ1Y2tldE5hbWV9IHJvdXRlICR7SlNPTi5zdHJpbmdpZnkodGhpcy5zb3VyY2VDb25maWcucm91dGUgfHwgRlVMTF9ST1VURSl9YDtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldChmaWxlTmFtZTogc3RyaW5nLCBjb25maWc/OiBHZXRDb25maWcpOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXQyKGZpbGVOYW1lLCBjb25maWcpO1xuICAgICAgICByZXR1cm4gcmVzdWx0ICYmIHJlc3VsdC5kYXRhIHx8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldDIoZmlsZU5hbWU6IHN0cmluZywgY29uZmlnPzogR2V0Q29uZmlnKTogUHJvbWlzZTx7IGRhdGE6IEJ1ZmZlcjsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGlmIChmaWxlTmFtZSA9PT0gUk9VVElOR19GSUxFKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZ2V0Um91dGluZ0ZpbGVSZXN1bHQodGhpcy5hY2NvdW50LCB0aGlzLmJ1Y2tldE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWc/LmludGVybmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVhZEJ1Y2tldEludGVybmFsKHRoaXMuYWNjb3VudCwgdGhpcy5idWNrZXROYW1lLCB7IHBhdGg6IGZpbGVOYW1lLCByYW5nZTogY29uZmlnLnJhbmdlLCBpbmNsdWRlVG9tYnN0b25lczogY29uZmlnLmluY2x1ZGVUb21ic3RvbmVzIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCAoYXdhaXQgdGhpcy5maW5kU3RvcmUoKSkuc3RvcmUuZ2V0Mih7IHBhdGg6IGZpbGVOYW1lLCAuLi5jb25maWcgfSk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBzZXQoZmlsZU5hbWU6IHN0cmluZywgZGF0YTogQnVmZmVyLCBjb25maWc/OiBTZXRDb25maWcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBhc3NlcnRXcml0ZXNBbGxvd2VkKCk7XG4gICAgICAgIGlmIChmaWxlTmFtZSA9PT0gUk9VVElOR19GSUxFKSB7XG4gICAgICAgICAgICBhd2FpdCBxdWV1ZVJvdXRpbmdDb25maWdXcml0ZSh0aGlzLmFjY291bnQsIHRoaXMuYnVja2V0TmFtZSwgZGF0YSwgY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybiBmaWxlTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCAoYXdhaXQgdGhpcy5maW5kU3RvcmUoKSkuc3RvcmUuc2V0KHsgLi4uY29uZmlnLCBwYXRoOiBmaWxlTmFtZSwgZGF0YSB9KTtcbiAgICAgICAgcmV0dXJuIGZpbGVOYW1lO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZGVsKGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IERlbENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhc3NlcnRXcml0ZXNBbGxvd2VkKCk7XG4gICAgICAgIGF3YWl0IChhd2FpdCB0aGlzLmZpbmRTdG9yZSgpKS5zdG9yZS5kZWwoeyBwYXRoOiBmaWxlTmFtZSwgLi4uY29uZmlnIH0pO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgc2V0TGFyZ2VGaWxlKGNvbmZpZzogeyBwYXRoOiBzdHJpbmc7IGxhc3RNb2RpZmllZD86IG51bWJlcjsgZ2V0TmV4dERhdGEoKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXNzZXJ0V3JpdGVzQWxsb3dlZCgpO1xuICAgICAgICBsZXQgc3RvcmUgPSAoYXdhaXQgdGhpcy5maW5kU3RvcmUoKSkuc3RvcmU7XG4gICAgICAgIGxldCBpZCA9IGF3YWl0IHN0b3JlLnN0YXJ0TGFyZ2VVcGxvYWQoeyBwYXRoOiBjb25maWcucGF0aCwgbGFzdE1vZGlmaWVkOiBjb25maWcubGFzdE1vZGlmaWVkIH0pO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IGNvbmZpZy5nZXROZXh0RGF0YSgpO1xuICAgICAgICAgICAgICAgIGlmICghZGF0YSkgYnJlYWs7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgZGF0YS5sZW5ndGg7IG9mZnNldCArPSBMQVJHRV9GSUxFX1BBUlRfU0laRSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzdG9yZS5hcHBlbmRMYXJnZVVwbG9hZCh7IGlkLCBkYXRhOiBkYXRhLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgTEFSR0VfRklMRV9QQVJUX1NJWkUpIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHN0b3JlLmZpbmlzaExhcmdlVXBsb2FkKHsgaWQsIHBhdGg6IGNvbmZpZy5wYXRoLCBsYXN0TW9kaWZpZWQ6IGNvbmZpZy5sYXN0TW9kaWZpZWQgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHN0b3JlLmNhbmNlbExhcmdlVXBsb2FkKHsgaWQgfSk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXRJbmZvKGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IEdldEluZm9Db25maWcpOiBQcm9taXNlPHsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGlmIChmaWxlTmFtZSA9PT0gUk9VVElOR19GSUxFKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgZ2V0Um91dGluZ0ZpbGVSZXN1bHQodGhpcy5hY2NvdW50LCB0aGlzLmJ1Y2tldE5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiB7IHdyaXRlVGltZTogcmVzdWx0LndyaXRlVGltZSwgc2l6ZTogcmVzdWx0LnNpemUgfSB8fCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IChhd2FpdCB0aGlzLmZpbmRTdG9yZSgpKS5zdG9yZS5nZXRJbmZvKHsgcGF0aDogZmlsZU5hbWUsIC4uLmNvbmZpZyB9KTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGZpbmRJbmZvKHByZWZpeDogc3RyaW5nLCBjb25maWc/OiBGaW5kQ29uZmlnKTogUHJvbWlzZTxBcmNoaXZlRmlsZUluZm9bXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgKGF3YWl0IHRoaXMuZmluZFN0b3JlKCkpLnN0b3JlLmZpbmRJbmZvKHsgcHJlZml4LCAuLi5jb25maWcgfSk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBmaW5kKHByZWZpeDogc3RyaW5nLCBjb25maWc/OiBGaW5kQ29uZmlnKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMuZmluZEluZm8ocHJlZml4LCBjb25maWcpKS5tYXAoeCA9PiB4LnBhdGgpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VVJMKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBsZXQgeyBkb21haW4sIHBvcnQgfSA9IGdldFN0b3JhZ2VTZXJ2ZXJDb25maWcoKTtcbiAgICAgICAgcmV0dXJuIGJ1aWxkRmlsZVVybChgaHR0cHM6Ly8ke2RvbWFpbn06JHtwb3J0fS9maWxlLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuYWNjb3VudCl9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuYnVja2V0TmFtZSl9YCwgZmlsZVBhdGgpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q29uZmlnKCk6IFByb21pc2U8QXJjaGl2ZXNDb25maWc+IHtcbiAgICAgICAgcmV0dXJuIGdldEJ1Y2tldENvbmZpZyhhd2FpdCByZXF1aXJlQnVja2V0KHRoaXMuYWNjb3VudCwgdGhpcy5idWNrZXROYW1lKSk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBoYXNXcml0ZUFjY2VzcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXRDaGFuZ2VzQWZ0ZXIyKGNvbmZpZzogQ2hhbmdlc0FmdGVyQ29uZmlnKTogUHJvbWlzZTxBcmNoaXZlRmlsZUluZm9bXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgKGF3YWl0IHRoaXMuZmluZFN0b3JlKCkpLnN0b3JlLmdldENoYW5nZXNBZnRlcjIoY29uZmlnKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldFN5bmNTdGF0dXMoKTogUHJvbWlzZTxBcmNoaXZlc1N5bmNTdGF0dXM+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGJ1Y2tldFN5bmNTdGF0dXMoYXdhaXQgcmVxdWlyZUJ1Y2tldCh0aGlzLmFjY291bnQsIHRoaXMuYnVja2V0TmFtZSkpO1xuICAgIH1cbn1cblxuY29uc3QgbG9jYWxBcmNoaXZlcyA9IG5ldyBNYXA8c3RyaW5nLCBJQXJjaGl2ZXM+KCk7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9jYWxBcmNoaXZlcyhhY2NvdW50OiBzdHJpbmcsIGJ1Y2tldE5hbWU6IHN0cmluZywgc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWcpOiBJQXJjaGl2ZXMge1xuICAgIGxldCBrZXkgPSBgJHthY2NvdW50fS8ke2J1Y2tldE5hbWV9fCR7c3RhYmxlU3RyaW5naWZ5KHNvdXJjZUNvbmZpZyl9YDtcbiAgICBsZXQgZXhpc3RpbmcgPSBsb2NhbEFyY2hpdmVzLmdldChrZXkpO1xuICAgIGlmIChleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nO1xuICAgIGxldCBhcmNoaXZlcyA9IG5ldyBCdWNrZXRJQXJjaGl2ZXNXcmFwcGVyKGFjY291bnQsIGJ1Y2tldE5hbWUsIHNvdXJjZUNvbmZpZyk7XG4gICAgbG9jYWxBcmNoaXZlcy5zZXQoa2V5LCBhcmNoaXZlcyk7XG4gICAgcmV0dXJuIGFyY2hpdmVzO1xufVxuIl19
|
|
946
|
-
/* _JS_SOURCE_HASH = "
|
|
947
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZVNlcnZlclN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RvcmFnZVNlcnZlclN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdEQUF3QjtBQUN4Qiw0Q0FBb0I7QUFDcEIseURBQW1EO0FBQ25ELG1EQUFnRDtBQUNoRCwyREFBK0Q7QUFDL0Qsa0RBQStDO0FBQy9DLDJDQUF1SDtBQUN2SCw0Q0FHc0I7QUFDdEIsaURBQWlNO0FBQ2pNLCtEQUFzTDtBQUN0TCxxREFBMkQ7QUFDM0QscURBQWlGO0FBQ2pGLDJEQUE4RDtBQUM5RCxpREFBNkU7QUFDN0UsNkNBQXdJO0FBQ3hJLDJDQUF3RztBQTBCeEcsbUxBQW1MO0FBQ25MLFNBQVMsZUFBZSxDQUFDLEtBQWM7SUFDbkMsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7SUFDL0QsQ0FBQztJQUNELElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBZ0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUMvRixJQUFBLFdBQUksRUFBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixPQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxF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QVksQ0FBQyxFQUFFLENBQUM7SUFDdEUsSUFBSSxRQUFRLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QyxJQUFJLFFBQVE7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUM5QixJQUFJLFFBQVEsR0FBRyxJQUFJLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDN0UsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakMsT0FBTyxRQUFRLENBQUM7QUFDcEIsQ0FBQztBQVBELDRDQU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IGxhenkgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9jYWNoaW5nXCI7XG5pbXBvcnQgeyBzb3J0IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvbWlzY1wiO1xuaW1wb3J0IHsgcnVuSW5maW5pdGVQb2xsIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvYmF0Y2hpbmdcIjtcbmltcG9ydCB7IEFyY2hpdmVzRGlzayB9IGZyb20gXCIuLi9BcmNoaXZlc0Rpc2tcIjtcbmltcG9ydCB7IEJsb2JTdG9yZSwgUmF3RGlza1N0b3JlLCBJQnVja2V0U3RvcmUsIERFRkFVTFRfRkFTVF9XUklURV9ERUxBWSwgV0lORE9XX0VORF9GTFVTSF9NQVJHSU4gfSBmcm9tIFwiLi9ibG9iU3RvcmVcIjtcbmltcG9ydCB7XG4gICAgUmVtb3RlQ29uZmlnLCBIb3N0ZWRDb25maWcsIFNvdXJjZUNvbmZpZywgSUFyY2hpdmVzLCBBcmNoaXZlc1NvdXJjZSwgQXJjaGl2ZXNDb25maWcsIEFyY2hpdmVzU3luY1N0YXR1cyxcbiAgICBBcmNoaXZlRmlsZUluZm8sIENoYW5nZXNBZnRlckNvbmZpZywgRGVsQ29uZmlnLCBGaW5kQ29uZmlnLCBHZXRDb25maWcsIEdldEluZm9Db25maWcsIFNldENvbmZpZywgU3luY0FjdGl2aXR5LCBGVUxMX1JPVVRFLFxufSBmcm9tIFwiLi4vSUFyY2hpdmVzXCI7XG5pbXBvcnQgeyBST1VUSU5HX0ZJTEUsIHBhcnNlUm91dGluZ0RhdGEsIHNlcmlhbGl6ZVJlbW90ZUNvbmZpZywgcGFyc2VIb3N0ZWRVcmwsIHJlcGxhY2VIb3N0ZWRVcmxQb3J0LCBidWlsZEZpbGVVcmwsIGdldENvbmZpZ1ZlcnNpb24sIHJvdXRlSW50ZXJzZWN0aW9uLCBub3JtYWxpemVTb3VyY2UgfSBmcm9tIFwiLi9yZW1vdGVDb25maWdcIjtcbmltcG9ydCB7IGluamVjdEludGVybWVkaWF0ZVNvdXJjZSwgZXhwaXJlSW50ZXJtZWRpYXRlU291cmNlcywgZ2V0SW50ZXJtZWRpYXRlU291cmNlcywgZmluZFNwbGl0VXJsLCBuZXh0SW50ZXJtZWRpYXRlVmVyc2lvbiwgSU5URVJNRURJQVRFX0VYUElSRV9HUkFDRSB9IGZyb20gXCIuL2ludGVybWVkaWF0ZVNvdXJjZXNcIjtcbmltcG9ydCB7IGdldFRha2VvdmVySW50ZXJtZWRpYXRlIH0gZnJvbSBcIi4vZGVwbG95VGFrZW92ZXJcIjtcbmltcG9ydCB7IGNyZWF0ZUFwaUFyY2hpdmVzLCBsaXN0U2VydmVyQWN0aXZlQnVja2V0S2V5cyB9IGZyb20gXCIuL2NyZWF0ZUFyY2hpdmVzXCI7XG5pbXBvcnQgeyBicm9hZGNhc3RSb3V0aW5nQ2hhbmdlZCB9IGZyb20gXCIuL3N0b3JhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgeyBnZXRTdG9yYWdlU2VydmVyQ29uZmlnLCBhc3NlcnRXcml0ZXNBbGxvd2VkIH0gZnJvbSBcIi4vc2VydmVyQ29uZmlnXCI7XG5pbXBvcnQgeyBnZXRCdWNrZXRGb2xkZXIsIHJlYWRSb3V0aW5nRmlsZSwgcmVhZFJvdXRpbmdGcm9tRGlzaywgZ2V0Um91dGluZ0ZpbGVSZXN1bHQsIGdldERpc2tJbmZvLCBCdWNrZXREaXNrSW5mbyB9IGZyb20gXCIuL2J1Y2tldERpc2tcIjtcbmltcG9ydCB7IGNvbXB1dGVTdG9yZVBsYW4sIGZpbmRTZWxmSW5kZXhlcywgU3RvcmVQbGFuLCBTdG9yZVBsYW5TdG9yZSwgU2VsZlN1bW1hcnkgfSBmcm9tIFwiLi9zdG9yZVBsYW5cIjtcblxuLy8gVGhlIHN0b3JhZ2Ugc2VydmVyJ3MgYnVja2V0IGxpZmVjeWNsZTogdGhlIG1hcCBvZiBsb2FkZWQgYnVja2V0cyAoZWFjaCA9IGl0cyByb3V0aW5nIGNvbmZpZyArIG9uZSBCbG9iU3RvcmUgcGVyIHJvdXRlKSwga2VlcGluZyB0aGVtIGN1cnJlbnQgKHJvdXRpbmcgcmVsb2Fkcywgd2luZG93LWJvdW5kYXJ5IHJlYnVpbGRzLCBib3VuZGFyeSBzY2FucyksIHdyaXRpbmcvcHJvcGFnYXRpbmcgcm91dGluZyBjb25maWdzLCBkZXBsb3ktc3dpdGNob3ZlciBtYWludGVuYW5jZSwgYW5kIHRoZSBzZXJ2ZXItbGV2ZWwgYnVja2V0IGxpc3RpbmdzLiBTdG9yZSBzZWxlY3Rpb24gKHNvdXJjZUNvbmZpZyAtPiBzdG9yZSkgbGl2ZXMgaGVyZSB0b28sIGFzIGZpbmRCdWNrZXRTdG9yZS5cblxuZXhwb3J0IHR5cGUgTG9hZGVkU3RvcmUgPSB7XG4gICAgLy8gSlNPTiBvZiB0aGUgcm91dGUgKEZVTExfUk9VVEUgd2hlbiBhYnNlbnQpIC0gdGhlIE9ORSByb3V0ZSB0aGlzIHN0b3JlIHNlcnZlc1xuICAgIHJvdXRlS2V5OiBzdHJpbmc7XG4gICAgcm91dGU/OiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIC8vIFRoZSBleGFjdCBzZWxmIGVudHJpZXMgdGhpcyBzdG9yZSBzZXJ2ZXMgKHNhbWUgcm91dGUsIGRpZmZlcmVudCB2YWxpZCB3aW5kb3dzKS4gRW1wdHkgd2hlbiB3ZSBhcmUgbm90IGluIHRoZSBjb25maWcgYnV0IHN0aWxsIHNlcnZlIG91ciBkaXNrIGRhdGEuXG4gICAgZW50cmllczogSG9zdGVkQ29uZmlnW107XG4gICAgZm9sZGVyOiBzdHJpbmc7XG4gICAgc3RvcmU6IElCdWNrZXRTdG9yZTtcbn07XG5cbi8vIEEgYnVja2V0IGxvYWRlZCBvbiB0aGlzIHNlcnZlcjogaXRzIHJvdXRpbmcgY29uZmlnIGFuZCBpdHMgcGVyLXJvdXRlIHN0b3Jlcy4gUHVyZSBkYXRhIC0gdGhlIHN0b3JlcyB0aGVtc2VsdmVzIGRvIHRoZSB3b3JrLlxuZXhwb3J0IHR5cGUgQnVja2V0U3RhdGUgPSB7XG4gICAgYWNjb3VudDogc3RyaW5nO1xuICAgIGJ1Y2tldE5hbWU6IHN0cmluZztcbiAgICByb3V0aW5nOiBSZW1vdGVDb25maWc7XG4gICAgcm91dGluZ0pTT046IHN0cmluZztcbiAgICBzZWxmRW50cmllczogSG9zdGVkQ29uZmlnW107XG4gICAgc2VsZjogU2VsZlN1bW1hcnkgfCB1bmRlZmluZWQ7XG4gICAgc3RvcmVzOiBMb2FkZWRTdG9yZVtdO1xuICAgIHN0cnVjdHVyZUtleTogc3RyaW5nO1xufTtcblxuLyoqIEpTT04gd2l0aCBzb3J0ZWQgb2JqZWN0IGtleXMgYW5kIHVuZGVmaW5lZC12YWx1ZWQga2V5cyBkcm9wcGVkLCBzbyB0d28gY29uZmlncyB0aGF0IG1lYW4gdGhlIHNhbWUgdGhpbmcgY29tcGFyZSBlcXVhbCByZWdhcmRsZXNzIG9mIGtleSBvcmRlciBvciB3aGljaCBzaWRlIHNlcmlhbGl6ZWQgdGhlbS4gKi9cbmZ1bmN0aW9uIHN0YWJsZVN0cmluZ2lmeSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBgWyR7dmFsdWUubWFwKHggPT4gc3RhYmxlU3RyaW5naWZ5KHgpKS5qb2luKFwiLFwiKX1dYDtcbiAgICB9XG4gICAgbGV0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuZmlsdGVyKHggPT4geFsxXSAhPT0gdW5kZWZpbmVkKTtcbiAgICBzb3J0KGVudHJpZXMsIHggPT4geFswXSk7XG4gICAgcmV0dXJuIGB7JHtlbnRyaWVzLm1hcCgoW2tleSwgY2hpbGRdKSA9PiBgJHtKU09OLnN0cmluZ2lmeShrZXkpfToke3N0YWJsZVN0cmluZ2lmeShjaGlsZCl9YCkuam9pbihcIixcIil9fWA7XG59XG5cbi8qKiBUaGUgbG9hZGVkIGJ1Y2tldCwgbG9hZGluZyBpdCAod2hpY2ggaW5zdGFudGlhdGVzIGl0cyBzdG9yZXMgYW5kIHN0YXJ0cyB0aGVpciBzeW5jaHJvbml6YXRpb24pIGlmIG5lZWRlZC4gQSBidWNrZXQgdGhhdCBkb2VzIG5vdCBleGlzdCBvbiB0aGlzIHNlcnZlciB0aHJvd3MgLSBjYWxsZXJzIG5ldmVyIHNlZSB1bmRlZmluZWQgYnVja2V0cy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXF1aXJlQnVja2V0KGFjY291bnQ6IHN0cmluZywgYnVja2V0TmFtZTogc3RyaW5nKTogUHJvbWlzZTxCdWNrZXRTdGF0ZT4ge1xuICAgIGxldCBidWNrZXQgPSBhd2FpdCBnZXRMb2FkZWRCdWNrZXQoYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgaWYgKCFidWNrZXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCdWNrZXQgJHthY2NvdW50fS8ke2J1Y2tldE5hbWV9IGRvZXMgbm90IGV4aXN0IG9uIHRoaXMgc2VydmVyLiBXcml0ZSBpdHMgcm91dGluZyBjb25maWcgdG8gJHtKU09OLnN0cmluZ2lmeShST1VUSU5HX0ZJTEUpfSB0byBjcmVhdGUgaXQuYCk7XG4gICAgfVxuICAgIHJldHVybiBidWNrZXQ7XG59XG5cbi8qKiBUaGUgc3RvcmUgc2VydmluZyBhIHJlcXVlc3Q6IHRoZSBleGFjdCBjb25maWcgZW50cnkgdGhlIENMSUVOVCBzZWxlY3RlZCwgbWF0Y2hlZCBieSBlcXVhbGl0eSAoa2V5IG9yZGVyIGlnbm9yZWQpIGFnYWluc3QgdGhlIGJ1Y2tldCdzIG93biBlbnRyaWVzLiBBIG1hdGNoIGlzIGhvbm9yZWQgZXZlbiB3aGVuIGl0cyB3aW5kb3cgaGFzIHBhc3NlZCAtIHRoZSBzZWxlY3Rpb24gbmV2ZXIgdmFsaWRhdGVzLCB0aGUgc3RvcmUncyBvd24gdmFsaWRhdGlvbiB0aHJvd3MgaW5zdGVhZC4gVGhyb3dzIHdoZW4gbm90aGluZyBtYXRjaGVzLCBsaXN0aW5nIHdoYXQgaXMgYXZhaWxhYmxlLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmRCdWNrZXRTdG9yZShhY2NvdW50OiBzdHJpbmcsIGJ1Y2tldE5hbWU6IHN0cmluZywgc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWcgfCB1bmRlZmluZWQpOiBQcm9taXNlPExvYWRlZFN0b3JlPiB7XG4gICAgbGV0IGJ1Y2tldCA9IGF3YWl0IHJlcXVpcmVCdWNrZXQoYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgaWYgKCFzb3VyY2VDb25maWcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyByZW1vdGUgc291cmNlIGNvbmZpZ3VyYXRpb24gd2FzIHByb3ZpZGVkIGZvciBidWNrZXQgJHthY2NvdW50fS8ke2J1Y2tldE5hbWV9OiBldmVyeSByZXF1ZXN0IG11c3Qgc2F5IHdoaWNoIGNvbmZpZ3VyZWQgc291cmNlIGl0IHNlbGVjdGVkLiBBdmFpbGFibGU6ICR7SlNPTi5zdHJpbmdpZnkoYnVja2V0LnNlbGZFbnRyaWVzKX1gKTtcbiAgICB9XG4gICAgbGV0IHdhbnRlZCA9IHN0YWJsZVN0cmluZ2lmeShzb3VyY2VDb25maWcpO1xuICAgIGZvciAobGV0IHMgb2YgYnVja2V0LnN0b3Jlcykge1xuICAgICAgICBpZiAocy5lbnRyaWVzLnNvbWUoZSA9PiBzdGFibGVTdHJpbmdpZnkoZSkgPT09IHdhbnRlZCkpIHJldHVybiBzO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHNvdXJjZSBvbiB0aGlzIHNlcnZlciBtYXRjaGVzIHRoZSByZXF1ZXN0ZWQgcmVtb3RlIGNvbmZpZ3VyYXRpb24gZm9yIGJ1Y2tldCAke2FjY291bnR9LyR7YnVja2V0TmFtZX0uIFJlcXVlc3RlZDogJHtKU09OLnN0cmluZ2lmeShzb3VyY2VDb25maWcpfS4gQXZhaWxhYmxlOiAke0pTT04uc3RyaW5naWZ5KGJ1Y2tldC5zZWxmRW50cmllcyl9YCk7XG59XG5cbi8qKiBJbnRlcm5hbCAoc3RvcmUtdG8tc3RvcmUpIHJlYWRzIHNraXAgc3RvcmUgc2VsZWN0aW9uIGVudGlyZWx5OiB0aGUgY2FsbGVyIGlzIGFub3RoZXIgc3RvcmUgd2hvc2UgaW5kZXggc2F5cyB0aGlzIE1BQ0hJTkUgaG9sZHMgdGhlIGJ5dGVzIC0gdGhlIHBlcnNpc3RlZCBob2xkZXIgaWRlbnRpdHkgaXMganVzdCBhIFVSTCwgd2hpY2ggY2Fubm90IG5hbWUgYSBzdG9yZS4gV2hpY2hldmVyIHN0b3JlJ3MgZm9sZGVyIGhhcyB0aGUgbmV3ZXN0IGNvcHkgYW5zd2Vycy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkQnVja2V0SW50ZXJuYWwoYWNjb3VudDogc3RyaW5nLCBidWNrZXROYW1lOiBzdHJpbmcsIGNvbmZpZzogeyBwYXRoOiBzdHJpbmc7IHJhbmdlPzogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9OyBpbmNsdWRlVG9tYnN0b25lcz86IGJvb2xlYW4gfSk6IFByb21pc2U8eyBkYXRhOiBCdWZmZXI7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCBidWNrZXQgPSBhd2FpdCByZXF1aXJlQnVja2V0KGFjY291bnQsIGJ1Y2tldE5hbWUpO1xuICAgIGxldCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoYnVja2V0LnN0b3Jlcy5tYXAocyA9PiBzLnN0b3JlLmdldDIoeyBwYXRoOiBjb25maWcucGF0aCwgcmFuZ2U6IGNvbmZpZy5yYW5nZSwgaW5jbHVkZVRvbWJzdG9uZXM6IGNvbmZpZy5pbmNsdWRlVG9tYnN0b25lcywgaW50ZXJuYWw6IHRydWUgfSkpKTtcbiAgICBsZXQgYmVzdDogeyBkYXRhOiBCdWZmZXI7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGxldCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICBpZiAocmVzdWx0ICYmICghYmVzdCB8fCByZXN1bHQud3JpdGVUaW1lID4gYmVzdC53cml0ZVRpbWUpKSB7XG4gICAgICAgICAgICBiZXN0ID0gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBiZXN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnVja2V0Q29uZmlnKGJ1Y2tldDogQnVja2V0U3RhdGUpOiBBcmNoaXZlc0NvbmZpZyB7XG4gICAgbGV0IGluZGV4ID0geyBmaWxlQ291bnQ6IDAsIGJ5dGVDb3VudDogMCB9O1xuICAgIGxldCBpbmRleFNvdXJjZXM6IHsgZGVidWdOYW1lOiBzdHJpbmc7IGZpbGVDb3VudDogbnVtYmVyOyBieXRlQ291bnQ6IG51bWJlciB9W10gPSBbXTtcbiAgICBsZXQgc3luY2luZzogU3luY0FjdGl2aXR5W10gPSBbXTtcbiAgICBsZXQgcmVhZGVyRGlza0xpbWl0OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgZm9yIChsZXQgcyBvZiBidWNrZXQuc3RvcmVzKSB7XG4gICAgICAgIGxldCBwcm9ncmVzcyA9IHMuc3RvcmUuZ2V0U3luY1Byb2dyZXNzPy4oKTtcbiAgICAgICAgaWYgKCFwcm9ncmVzcykgY29udGludWU7XG4gICAgICAgIGluZGV4LmZpbGVDb3VudCArPSBwcm9ncmVzcy5pbmRleC5maWxlQ291bnQ7XG4gICAgICAgIGluZGV4LmJ5dGVDb3VudCArPSBwcm9ncmVzcy5pbmRleC5ieXRlQ291bnQ7XG4gICAgICAgIGluZGV4U291cmNlcy5wdXNoKC4uLnByb2dyZXNzLnNvdXJjZXMpO1xuICAgICAgICBzeW5jaW5nLnB1c2goLi4ucHJvZ3Jlc3Muc3luY2luZyk7XG4gICAgICAgIHJlYWRlckRpc2tMaW1pdCA9IHJlYWRlckRpc2tMaW1pdCB8fCBwcm9ncmVzcy5yZWFkZXJEaXNrTGltaXQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIC8vIE5hdGl2ZSBjaGFuZ2UtZmVlZCBzdXBwb3J0ID0gdGhlIHN0b3JlcyBrZWVwIGFuIGluZGV4IChyYXdEaXNrIGJ1Y2tldHMgZW11bGF0ZSBnZXRDaGFuZ2VzQWZ0ZXIyIHdpdGggYSBmdWxsIGxpc3RpbmcpIC0gY2xpZW50cyB1c2UgdGhpcyB0byBwaWNrIHRoZWlyIHNjYW4gY2FkZW5jZVxuICAgICAgICBzdXBwb3J0c0NoYW5nZXNBZnRlcjogYnVja2V0LnN0b3Jlcy5zb21lKHMgPT4gcy5zdG9yZSBpbnN0YW5jZW9mIEJsb2JTdG9yZSksXG4gICAgICAgIHJlbW90ZUNvbmZpZzogYnVja2V0LnJvdXRpbmcsXG4gICAgICAgIGluZGV4LFxuICAgICAgICBpbmRleFNvdXJjZXMsXG4gICAgICAgIHJlYWRlckRpc2tMaW1pdCxcbiAgICAgICAgc3luY2luZyxcbiAgICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVja2V0U3luY1N0YXR1cyhidWNrZXQ6IEJ1Y2tldFN0YXRlKTogUHJvbWlzZTxBcmNoaXZlc1N5bmNTdGF0dXM+IHtcbiAgICBsZXQgc3VwcG9ydGVkID0gYnVja2V0LnN0b3Jlcy5maWx0ZXIocyA9PiBzLnN0b3JlLmdldFN5bmNTdGF0dXMpO1xuICAgIGlmICghc3VwcG9ydGVkLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJ1Y2tldCAke2J1Y2tldC5hY2NvdW50fS8ke2J1Y2tldC5idWNrZXROYW1lfSBkb2VzIG5vdCBzdXBwb3J0IGdldFN5bmNTdGF0dXMgKHJhd0Rpc2sgYnVja2V0cyBoYXZlIG5vIHN5bmNocm9uaXphdGlvbilgKTtcbiAgICB9XG4gICAgbGV0IHN0YXR1c2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoc3VwcG9ydGVkLm1hcChhc3luYyBzID0+IHtcbiAgICAgICAgbGV0IGdldFN5bmNTdGF0dXMgPSBzLnN0b3JlLmdldFN5bmNTdGF0dXM7XG4gICAgICAgIGlmICghZ2V0U3luY1N0YXR1cykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBnZXRTeW5jU3RhdHVzIGRpc2FwcGVhcmVkIGZyb20gYSBzdG9yZSBmb3IgJHtidWNrZXQuYWNjb3VudH0vJHtidWNrZXQuYnVja2V0TmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgZ2V0U3luY1N0YXR1cy5jYWxsKHMuc3RvcmUpO1xuICAgIH0pKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBhbGxTY2Fuc0NvbXBsZXRlOiBzdGF0dXNlcy5ldmVyeSh4ID0+IHguYWxsU2NhbnNDb21wbGV0ZSksXG4gICAgICAgIGluZGV4U2l6ZTogc3RhdHVzZXMucmVkdWNlKChzdW0sIHgpID0+IHN1bSArIHguaW5kZXhTaXplLCAwKSxcbiAgICAgICAgc291cmNlczogc3RhdHVzZXMuZmxhdE1hcCh4ID0+IHguc291cmNlcyksXG4gICAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1Y2tldEluZGV4VG90YWxzKGJ1Y2tldDogQnVja2V0U3RhdGUpOiBQcm9taXNlPHsgZmlsZUNvdW50OiBudW1iZXI7IGJ5dGVDb3VudDogbnVtYmVyOyBzb3VyY2VzOiB7IGRlYnVnTmFtZTogc3RyaW5nOyBmaWxlQ291bnQ6IG51bWJlcjsgYnl0ZUNvdW50OiBudW1iZXIgfVtdIH0gfCB1bmRlZmluZWQ+IHtcbiAgICBsZXQgc3VwcG9ydGVkID0gYnVja2V0LnN0b3Jlcy5maWx0ZXIocyA9PiBzLnN0b3JlLmNvbXB1dGVJbmRleFRvdGFscyk7XG4gICAgaWYgKCFzdXBwb3J0ZWQubGVuZ3RoKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGxldCB0b3RhbHMgPSBhd2FpdCBQcm9taXNlLmFsbChzdXBwb3J0ZWQubWFwKGFzeW5jIHMgPT4ge1xuICAgICAgICBsZXQgY29tcHV0ZUluZGV4VG90YWxzID0gcy5zdG9yZS5jb21wdXRlSW5kZXhUb3RhbHM7XG4gICAgICAgIGlmICghY29tcHV0ZUluZGV4VG90YWxzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbXB1dGVJbmRleFRvdGFscyBkaXNhcHBlYXJlZCBmcm9tIGEgc3RvcmUgZm9yICR7YnVja2V0LmFjY291bnR9LyR7YnVja2V0LmJ1Y2tldE5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IGNvbXB1dGVJbmRleFRvdGFscy5jYWxsKHMuc3RvcmUpO1xuICAgIH0pKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBmaWxlQ291bnQ6IHRvdGFscy5yZWR1Y2UoKHN1bSwgeCkgPT4gc3VtICsgeC5maWxlQ291bnQsIDApLFxuICAgICAgICBieXRlQ291bnQ6IHRvdGFscy5yZWR1Y2UoKHN1bSwgeCkgPT4gc3VtICsgeC5ieXRlQ291bnQsIDApLFxuICAgICAgICBzb3VyY2VzOiB0b3RhbHMuZmxhdE1hcCh4ID0+IHguc291cmNlcyksXG4gICAgfTtcbn1cblxuY29uc3QgYnVja2V0cyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPEJ1Y2tldFN0YXRlIHwgdW5kZWZpbmVkPj4oKTtcblxuY29uc3QgTUFYX1JFQlVJTERfVElNRVJfREVMQVkgPSAyICoqIDMxIC0gMTtcbmNvbnN0IFJFQlVJTERfQk9VTkRBUllfQlVGRkVSID0gMTAwMDtcblxuZnVuY3Rpb24gc2NoZWR1bGVXaW5kb3dCb3VuZGFyeVJlYnVpbGQobG9hZGVkOiBCdWNrZXRTdGF0ZSk6IHZvaWQge1xuICAgIGxldCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGxldCBib3VuZGFyaWVzID0gbG9hZGVkLnNlbGZFbnRyaWVzLmZsYXRNYXAoeCA9PiB4LnZhbGlkV2luZG93KS5maWx0ZXIodCA9PiB0ID4gbm93KTtcbiAgICBpZiAoIWJvdW5kYXJpZXMubGVuZ3RoKSByZXR1cm47XG4gICAgbGV0IG5leHRCb3VuZGFyeSA9IE1hdGgubWluKC4uLmJvdW5kYXJpZXMpO1xuICAgIGxldCBrZXkgPSBgJHtsb2FkZWQuYWNjb3VudH0vJHtsb2FkZWQuYnVja2V0TmFtZX1gO1xuICAgIGxldCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB2b2lkIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgY3VycmVudCA9IGF3YWl0IGJ1Y2tldHMuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAoY3VycmVudCAhPT0gbG9hZGVkKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoRGF0ZS5ub3coKSA8IG5leHRCb3VuZGFyeSkge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlV2luZG93Qm91bmRhcnlSZWJ1aWxkKGxvYWRlZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgc2NoZWR1bGVSb3V0aW5nUmVsb2FkKGxvYWRlZC5hY2NvdW50LCBsb2FkZWQuYnVja2V0TmFtZSwgeyBmb3JjZTogdHJ1ZSwgcmVhc29uOiBcImEgdmFsaWQgd2luZG93IGJvdW5kYXJ5IHBhc3NlZFwiIH0pO1xuICAgICAgICB9KSgpO1xuICAgIH0sIE1hdGgubWluKG5leHRCb3VuZGFyeSAtIG5vdyArIFJFQlVJTERfQk9VTkRBUllfQlVGRkVSLCBNQVhfUkVCVUlMRF9USU1FUl9ERUxBWSkpO1xuICAgICh0aW1lciBhcyB7IHVucmVmPzogKCkgPT4gdm9pZCB9KS51bnJlZj8uKCk7XG59XG5cbmNvbnN0IEJPVU5EQVJZX1NDQU5fT0ZGU0VUUyA9IFstMzAgKiAxMDAwLCAyICogMTAwMCwgMzAgKiAxMDAwXTtcbmNvbnN0IEJPVU5EQVJZX1NDQU5fTE9PS0JBQ0sgPSBERUZBVUxUX0ZBU1RfV1JJVEVfREVMQVkgKyBXSU5ET1dfRU5EX0ZMVVNIX01BUkdJTjtcbmNvbnN0IFNUQVJUVVBfQk9VTkRBUllfU0NBTl9ERUxBWSA9IDMwICogMTAwMDtcblxuY29uc3Qgc2NoZWR1bGVkQm91bmRhcnlTY2FucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuY29uc3QgYm91bmRhcnlTY2Fuc1J1bm5pbmcgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuZnVuY3Rpb24gc2NoZWR1bGVCb3VuZGFyeVNjYW5zKGxvYWRlZDogQnVja2V0U3RhdGUpOiB2b2lkIHtcbiAgICBsZXQga2V5ID0gYCR7bG9hZGVkLmFjY291bnR9LyR7bG9hZGVkLmJ1Y2tldE5hbWV9YDtcbiAgICBsZXQgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgc3RhcnRzID0gbmV3IFNldDxudW1iZXI+KCk7XG4gICAgZm9yIChsZXQgc2VsZiBvZiBsb2FkZWQuc2VsZkVudHJpZXMpIHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gc2VsZi52YWxpZFdpbmRvd1swXTtcbiAgICAgICAgaWYgKHN0YXJ0ID4gbm93ICYmIHN0YXJ0IDwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgICAgIHN0YXJ0cy5hZGQoc3RhcnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IHNlbGYgb2YgbG9hZGVkLnNlbGZFbnRyaWVzKSB7XG4gICAgICAgIGxldCBbc3RhcnQsIGVuZF0gPSBzZWxmLnZhbGlkV2luZG93O1xuICAgICAgICBpZiAoIShzdGFydCA8PSBub3cgJiYgbm93IDwgZW5kKSB8fCBzdGFydCA8PSAwKSBjb250aW51ZTtcbiAgICAgICAgaWYgKG5vdyAtIHN0YXJ0ID4gQk9VTkRBUllfU0NBTl9MT09LQkFDSykgY29udGludWU7XG4gICAgICAgIGxldCBzY2hlZHVsZUtleSA9IGAke2tleX18JHtzdGFydH18c3RhcnR1cGA7XG4gICAgICAgIGlmIChzY2hlZHVsZWRCb3VuZGFyeVNjYW5zLmhhcyhzY2hlZHVsZUtleSkpIGNvbnRpbnVlO1xuICAgICAgICBzY2hlZHVsZWRCb3VuZGFyeVNjYW5zLmFkZChzY2hlZHVsZUtleSk7XG4gICAgICAgIGxldCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdm9pZCBydW5Cb3VuZGFyeVNjYW4oa2V5LCBzdGFydCwgU1RBUlRVUF9CT1VOREFSWV9TQ0FOX0RFTEFZLCBcInN0YXJ0dXArMzBzXCIpLmNhdGNoKChlOiBFcnJvcikgPT4gY29uc29sZS5lcnJvcihgQm91bmRhcnkgc2NhbiBmb3IgYnVja2V0ICR7a2V5fSBmYWlsZWQ6ICR7ZS5zdGFjayA/PyBlfWApKTtcbiAgICAgICAgfSwgU1RBUlRVUF9CT1VOREFSWV9TQ0FOX0RFTEFZKTtcbiAgICAgICAgKHRpbWVyIGFzIHsgdW5yZWY/OiAoKSA9PiB2b2lkIH0pLnVucmVmPy4oKTtcbiAgICB9XG4gICAgZm9yIChsZXQgc3RhcnQgb2Ygc3RhcnRzKSB7XG4gICAgICAgIGZvciAobGV0IG9mZnNldCBvZiBCT1VOREFSWV9TQ0FOX09GRlNFVFMpIHtcbiAgICAgICAgICAgIGxldCBhdCA9IHN0YXJ0ICsgb2Zmc2V0O1xuICAgICAgICAgICAgaWYgKGF0IDw9IG5vdykgY29udGludWU7XG4gICAgICAgICAgICBsZXQgc2NoZWR1bGVLZXkgPSBgJHtrZXl9fCR7c3RhcnR9fCR7b2Zmc2V0fWA7XG4gICAgICAgICAgICBpZiAoc2NoZWR1bGVkQm91bmRhcnlTY2Fucy5oYXMoc2NoZWR1bGVLZXkpKSBjb250aW51ZTtcbiAgICAgICAgICAgIHNjaGVkdWxlZEJvdW5kYXJ5U2NhbnMuYWRkKHNjaGVkdWxlS2V5KTtcbiAgICAgICAgICAgIGxldCBhcm0gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChEYXRlLm5vdygpIDwgYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFybSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZvaWQgcnVuQm91bmRhcnlTY2FuKGtleSwgc3RhcnQsIG9mZnNldCkuY2F0Y2goKGU6IEVycm9yKSA9PiBjb25zb2xlLmVycm9yKGBCb3VuZGFyeSBzY2FuIGZvciBidWNrZXQgJHtrZXl9IGZhaWxlZDogJHtlLnN0YWNrID8/IGV9YCkpO1xuICAgICAgICAgICAgICAgIH0sIE1hdGgubWluKGF0IC0gRGF0ZS5ub3coKSwgTUFYX1JFQlVJTERfVElNRVJfREVMQVkpKTtcbiAgICAgICAgICAgICAgICAodGltZXIgYXMgeyB1bnJlZj86ICgpID0+IHZvaWQgfSkudW5yZWY/LigpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFybSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBydW5Cb3VuZGFyeVNjYW4oYnVja2V0S2V5OiBzdHJpbmcsIHdpbmRvd1N0YXJ0OiBudW1iZXIsIG9mZnNldDogbnVtYmVyLCBvZmZzZXRMYWJlbD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBsYWJlbCA9IGBidWNrZXQgJHtidWNrZXRLZXl9LCB3aW5kb3cgc3RhcnRpbmcgJHtuZXcgRGF0ZSh3aW5kb3dTdGFydCkudG9JU09TdHJpbmcoKX0sIG9mZnNldCAke29mZnNldExhYmVsIHx8IGAke29mZnNldCAvIDEwMDB9c2B9YDtcbiAgICBpZiAoYm91bmRhcnlTY2Fuc1J1bm5pbmcuaGFzKGJ1Y2tldEtleSkpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFNraXBwaW5nIGJvdW5kYXJ5IHNjYW4gKCR7bGFiZWx9KTogdGhlIHByZXZpb3VzIGJvdW5kYXJ5IHNjYW4gaXMgc3RpbGwgcnVubmluZ2ApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGJvdW5kYXJ5U2NhbnNSdW5uaW5nLmFkZChidWNrZXRLZXkpO1xuICAgIHRyeSB7XG4gICAgICAgIGxldCBsb2FkZWQgPSBhd2FpdCBidWNrZXRzLmdldChidWNrZXRLZXkpO1xuICAgICAgICBpZiAoIWxvYWRlZCkgcmV0dXJuO1xuICAgICAgICBsZXQgZWZmZWN0aXZlID0gbG9hZGVkLnJvdXRpbmc7XG4gICAgICAgIGxldCBzZWxmSW5kZXhlcyA9IGZpbmRTZWxmSW5kZXhlcyhlZmZlY3RpdmUsIGxvYWRlZC5hY2NvdW50LCBsb2FkZWQuYnVja2V0TmFtZSk7XG4gICAgICAgIGxldCBzZWxmSW5kZXhTZXQgPSBuZXcgU2V0KHNlbGZJbmRleGVzKTtcbiAgICAgICAgbGV0IHNlbHZlcyA9IHNlbGZJbmRleGVzLm1hcChpID0+IGVmZmVjdGl2ZS5zb3VyY2VzW2ldIGFzIEhvc3RlZENvbmZpZykuZmlsdGVyKHggPT4geC52YWxpZFdpbmRvd1swXSA9PT0gd2luZG93U3RhcnQpO1xuICAgICAgICBpZiAoIXNlbHZlcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgbGV0IHByZXZUaW1lID0gd2luZG93U3RhcnQgLSAxO1xuICAgICAgICAvLyBFdmVyeXRoaW5nIGlzIHBlci1zdG9yZTogZWFjaCBzZWxmIGVudHJ5J3Mgcm91dGUgaGFzIGl0cyBvd24gc3RvcmUsIGFuZCB0aGF0IHN0b3JlJ3MgZGlzay9yZW1vdGUgYm91bmRhcnkgcHVsbHMgb25seSBjb25jZXJuIGl0cyBvd24gcm91dGUgc2xpY2VcbiAgICAgICAgbGV0IG5lZWREaXNrU2NhbiA9IG5ldyBTZXQ8TG9hZGVkU3RvcmU+KCk7XG4gICAgICAgIGxldCByZW1vdGVPd25lcnMgPSBuZXcgTWFwPExvYWRlZFN0b3JlLCBNYXA8bnVtYmVyLCBbbnVtYmVyLCBudW1iZXJdPj4oKTtcbiAgICAgICAgZm9yIChsZXQgc2VsZiBvZiBzZWx2ZXMpIHtcbiAgICAgICAgICAgIGxldCBzZWxmUm91dGUgPSBzZWxmLnJvdXRlIHx8IEZVTExfUk9VVEU7XG4gICAgICAgICAgICBsZXQgc2VsZlN0b3JlID0gbG9hZGVkLnN0b3Jlcy5maW5kKHggPT4geC5yb3V0ZUtleSA9PT0gSlNPTi5zdHJpbmdpZnkoc2VsZlJvdXRlKSk7XG4gICAgICAgICAgICBpZiAoIXNlbGZTdG9yZSB8fCAhKHNlbGZTdG9yZS5zdG9yZSBpbnN0YW5jZW9mIEJsb2JTdG9yZSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGV0IGlkeCA9IGVmZmVjdGl2ZS5zb3VyY2VzLmluZGV4T2Yoc2VsZik7XG4gICAgICAgICAgICBsZXQgc2hhZG93ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaWR4OyBqKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3RoZXIgPSBlZmZlY3RpdmUuc291cmNlc1tqXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG90aGVyID09PSBcInN0cmluZ1wiKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBsZXQgW3dzLCB3ZV0gPSBvdGhlci52YWxpZFdpbmRvdztcbiAgICAgICAgICAgICAgICBpZiAoISh3cyA8PSB3aW5kb3dTdGFydCAmJiB3aW5kb3dTdGFydCA8IHdlKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgbGV0IHIgPSBvdGhlci5yb3V0ZSB8fCBGVUxMX1JPVVRFO1xuICAgICAgICAgICAgICAgIGlmIChyWzBdIDw9IHNlbGZSb3V0ZVswXSAmJiBzZWxmUm91dGVbMV0gPD0gclsxXSkge1xuICAgICAgICAgICAgICAgICAgICBzaGFkb3dlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaGFkb3dlZCkgY29udGludWU7XG4gICAgICAgICAgICBsZXQgdW5jb3ZlcmVkOiBbbnVtYmVyLCBudW1iZXJdW10gPSBbW3NlbGZSb3V0ZVswXSwgc2VsZlJvdXRlWzFdXV07XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVmZmVjdGl2ZS5zb3VyY2VzLmxlbmd0aCAmJiB1bmNvdmVyZWQubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3RoZXIgPSBlZmZlY3RpdmUuc291cmNlc1tqXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG90aGVyID09PSBcInN0cmluZ1wiKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBsZXQgW3dzLCB3ZV0gPSBvdGhlci52YWxpZFdpbmRvdztcbiAgICAgICAgICAgICAgICBpZiAoISh3cyA8PSBwcmV2VGltZSAmJiBwcmV2VGltZSA8IHdlKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgbGV0IHIgPSBvdGhlci5yb3V0ZSB8fCBGVUxMX1JPVVRFO1xuICAgICAgICAgICAgICAgIGxldCByZW1haW5pbmc6IFtudW1iZXIsIG51bWJlcl1bXSA9IFtdO1xuICAgICAgICAgICAgICAgIGxldCBjbGFpbWVkOiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHUgb2YgdW5jb3ZlcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbnRlciA9IHJvdXRlSW50ZXJzZWN0aW9uKHUsIHIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWludGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcucHVzaCh1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNsYWltZWQgPSBjbGFpbWVkICYmIFtNYXRoLm1pbihjbGFpbWVkWzBdLCBpbnRlclswXSksIE1hdGgubWF4KGNsYWltZWRbMV0sIGludGVyWzFdKV0gYXMgW251bWJlciwgbnVtYmVyXSB8fCBpbnRlcjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVbMF0gPCBpbnRlclswXSkgcmVtYWluaW5nLnB1c2goW3VbMF0sIGludGVyWzBdXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnRlclsxXSA8IHVbMV0pIHJlbWFpbmluZy5wdXNoKFtpbnRlclsxXSwgdVsxXV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB1bmNvdmVyZWQgPSByZW1haW5pbmc7XG4gICAgICAgICAgICAgICAgaWYgKCFjbGFpbWVkKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZkluZGV4U2V0LmhhcyhqKSkge1xuICAgICAgICAgICAgICAgICAgICBuZWVkRGlza1NjYW4uYWRkKHNlbGZTdG9yZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG93bmVycyA9IHJlbW90ZU93bmVycy5nZXQoc2VsZlN0b3JlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvd25lcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG93bmVycyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZU93bmVycy5zZXQoc2VsZlN0b3JlLCBvd25lcnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxldCBleGlzdGluZyA9IG93bmVycy5nZXQoaik7XG4gICAgICAgICAgICAgICAgICAgIG93bmVycy5zZXQoaiwgZXhpc3RpbmcgJiYgW01hdGgubWluKGV4aXN0aW5nWzBdLCBjbGFpbWVkWzBdKSwgTWF0aC5tYXgoZXhpc3RpbmdbMV0sIGNsYWltZWRbMV0pXSBhcyBbbnVtYmVyLCBudW1iZXJdIHx8IGNsYWltZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIW5lZWREaXNrU2Nhbi5zaXplICYmICFyZW1vdGVPd25lcnMuc2l6ZSkgcmV0dXJuO1xuICAgICAgICBjb25zb2xlLmxvZyhgQm91bmRhcnkgc2NhbiAoJHtsYWJlbH0pOiBkaXNrU2NhbnM9JHtuZWVkRGlza1NjYW4uc2l6ZX0sIHN0b3JlcyB3aXRoIHJlbW90ZSBwcmV2aW91cy13aW5kb3cgb3duZXJzOiAke3JlbW90ZU93bmVycy5zaXplfWApO1xuICAgICAgICBmb3IgKGxldCBzZWxmU3RvcmUgb2YgbmVlZERpc2tTY2FuKSB7XG4gICAgICAgICAgICBpZiAoc2VsZlN0b3JlLnN0b3JlIGluc3RhbmNlb2YgQmxvYlN0b3JlKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgc2VsZlN0b3JlLnN0b3JlLnJlc2NhbkJhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgc2luY2UgPSB3aW5kb3dTdGFydCAtIEJPVU5EQVJZX1NDQU5fTE9PS0JBQ0s7XG4gICAgICAgIGZvciAobGV0IFtzZWxmU3RvcmUsIG93bmVyc10gb2YgcmVtb3RlT3duZXJzKSB7XG4gICAgICAgICAgICBpZiAoIShzZWxmU3RvcmUuc3RvcmUgaW5zdGFuY2VvZiBCbG9iU3RvcmUpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGZvciAobGV0IFtzb3VyY2VJbmRleCwgcm91dGVdIG9mIG93bmVycykge1xuICAgICAgICAgICAgICAgIGxldCBvd25lclNvdXJjZSA9IGVmZmVjdGl2ZS5zb3VyY2VzW3NvdXJjZUluZGV4XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG93bmVyU291cmNlID09PSBcInN0cmluZ1wiKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzZWxmU3RvcmUuc3RvcmUuYm91bmRhcnlTY2FuUmVtb3RlKGNyZWF0ZUFwaUFyY2hpdmVzKG93bmVyU291cmNlKSwgeyBzaW5jZSwgcm91dGUgfSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBCb3VuZGFyeSBzY2FuICgke2xhYmVsfSkgb2YgcHJldmlvdXMtd2luZG93IG93bmVyIChzb3VyY2UgaW5kZXggJHtzb3VyY2VJbmRleH0pIGZhaWxlZDogJHsoZSBhcyBFcnJvcikuc3RhY2sgPz8gZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICBib3VuZGFyeVNjYW5zUnVubmluZy5kZWxldGUoYnVja2V0S2V5KTtcbiAgICB9XG59XG5cbmNvbnN0IHJlc29sdmVkU291cmNlQXJjaGl2ZXMgPSBuZXcgTWFwPHN0cmluZywgSUFyY2hpdmVzPigpO1xuLyoqIEEgY2FjaGVkIElBcmNoaXZlcyBmb3IgYSBwZXJzaXN0ZWQgc291cmNlIGlkZW50aXR5OiBhIHJvdXRpbmcgVVJMIChob3N0ZWQvYmFja2JsYXplKSBvciBhIGRpc2sgZm9sZGVyIHBhdGggLSB0aGUgZm9ybSBCbG9iU3RvcmUncyBzb3VyY2VzIGxpc3Qgc3RvcmVzLiBDb25maWd1cmF0aW9uICh2YWxpZCB3aW5kb3dzLCByb3V0ZXMpIGRlY2lkZXMgV0hFTiBhIHNvdXJjZSBzaG91bGQgYmUgdXNlZDsgZm9yIHJlYWRpbmcgYnl0ZXMgdGhlIGluZGV4IHNheXMgYSBzb3VyY2UgaG9sZHMsIHRoZSBVUkwgYWxvbmUgaXMgZW5vdWdoIC0gZXZlbiBmb3Igc291cmNlcyBubyBsb25nZXIgaW4gYW55IGNvbmZpZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU291cmNlQXJjaGl2ZXModXJsOiBzdHJpbmcpOiBJQXJjaGl2ZXMge1xuICAgIGxldCBleGlzdGluZyA9IHJlc29sdmVkU291cmNlQXJjaGl2ZXMuZ2V0KHVybCk7XG4gICAgaWYgKGV4aXN0aW5nKSByZXR1cm4gZXhpc3Rpbmc7XG4gICAgbGV0IGFyY2hpdmVzOiBJQXJjaGl2ZXM7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKFwiaHR0cHM6Ly9cIikpIHtcbiAgICAgICAgLy8gVGhlIGNvbmZpZyBpcyBmYWJyaWNhdGVkIGZyb20gdGhlIGJhcmUgVVJMIGFuZCBjYW4gbmV2ZXIgZXhhY3QtbWF0Y2ggYSBzZXJ2ZXIncyBlbnRyaWVzIC0gd2hpY2ggaXMgZmluZSwgYmVjYXVzZSBob2xkZXIgcmVhZHMgYXJlIGludGVybmFsIHJlYWRzLCBhbmQgaW50ZXJuYWwgcmVhZHMgbmV2ZXIgc2VsZWN0IGEgc3RvcmUgKHNlZSByZWFkQnVja2V0SW50ZXJuYWwpXG4gICAgICAgIGFyY2hpdmVzID0gY3JlYXRlQXBpQXJjaGl2ZXMobm9ybWFsaXplU291cmNlKHVybCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGFyY2hpdmVzID0gbmV3IEFyY2hpdmVzRGlzayh1cmwpO1xuICAgIH1cbiAgICByZXNvbHZlZFNvdXJjZUFyY2hpdmVzLnNldCh1cmwsIGFyY2hpdmVzKTtcbiAgICByZXR1cm4gYXJjaGl2ZXM7XG59XG5cbmZ1bmN0aW9uIHNvdXJjZUlkZW50aXR5KHNvdXJjZUNvbmZpZzogU291cmNlQ29uZmlnIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoIXNvdXJjZUNvbmZpZykgcmV0dXJuIFwiZGlza1wiO1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7IC4uLnNvdXJjZUNvbmZpZywgdmFsaWRXaW5kb3c6IHVuZGVmaW5lZCwgcm91dGU6IHVuZGVmaW5lZCB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRTdG9yZShhY2NvdW50OiBzdHJpbmcsIGJ1Y2tldE5hbWU6IHN0cmluZywgcGxhblN0b3JlOiBTdG9yZVBsYW5TdG9yZSk6IElCdWNrZXRTdG9yZSB7XG4gICAgbGV0IGZvbGRlciA9IGdldEJ1Y2tldEZvbGRlcihhY2NvdW50LCBidWNrZXROYW1lLCBwbGFuU3RvcmUucm91dGUpO1xuICAgIGlmIChwbGFuU3RvcmUucmF3RGlzaykge1xuICAgICAgICByZXR1cm4gbmV3IFJhd0Rpc2tTdG9yZShuZXcgQXJjaGl2ZXNEaXNrKGZvbGRlcikpO1xuICAgIH1cbiAgICBsZXQgc291cmNlczogQXJjaGl2ZXNTb3VyY2VbXSA9IHBsYW5TdG9yZS5zb3VyY2VTcGVjcy5tYXAoc3BlYyA9PiAoe1xuICAgICAgICBzb3VyY2U6IHNwZWMuc291cmNlQ29uZmlnICYmIGNyZWF0ZUFwaUFyY2hpdmVzKHNwZWMuc291cmNlQ29uZmlnKSB8fCBuZXcgQXJjaGl2ZXNEaXNrKGZvbGRlciksXG4gICAgICAgIHVybDogc3BlYy5zb3VyY2VDb25maWc/LnVybCB8fCBmb2xkZXIsXG4gICAgICAgIHZhbGlkV2luZG93OiBzcGVjLnZhbGlkV2luZG93LFxuICAgICAgICByb3V0ZTogc3BlYy5yb3V0ZSxcbiAgICAgICAgbm9GdWxsU3luYzogc3BlYy5ub0Z1bGxTeW5jLFxuICAgICAgICBpbnRlcm1lZGlhdGU6IHNwZWMuc291cmNlQ29uZmlnPy5pbnRlcm1lZGlhdGUsXG4gICAgICAgIHNvdXJjZUNvbmZpZzogc3BlYy5zb3VyY2VDb25maWcsXG4gICAgICAgIGlkZW50aXR5OiBzb3VyY2VJZGVudGl0eShzcGVjLnNvdXJjZUNvbmZpZyksXG4gICAgfSkpO1xuICAgIHJldHVybiBuZXcgQmxvYlN0b3JlKGZvbGRlciwgc291cmNlcywge1xuICAgICAgICByZWFkZXJEaXNrTGltaXQ6IHBsYW5TdG9yZS5yZWFkZXJEaXNrTGltaXQsXG4gICAgICAgIG9uV3JpdGVDb3VudGVkOiAoa2luZCwgYnl0ZXMpID0+IGNvdW50QnVja2V0V3JpdGUoYCR7YWNjb3VudH0vJHtidWNrZXROYW1lfWAsIGtpbmQsIGJ5dGVzKSxcbiAgICAgICAgcmVzb2x2ZVNvdXJjZVVybDogcmVzb2x2ZVNvdXJjZUFyY2hpdmVzLFxuICAgICAgICBlbnRyaWVzOiBwbGFuU3RvcmUuZW50cmllcyxcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRCdWNrZXQoYWNjb3VudDogc3RyaW5nLCBidWNrZXROYW1lOiBzdHJpbmcsIHJvdXRpbmc6IFJlbW90ZUNvbmZpZywgcGxhbj86IFN0b3JlUGxhbik6IEJ1Y2tldFN0YXRlIHtcbiAgICBpZiAoIXBsYW4pIHtcbiAgICAgICAgcGxhbiA9IGNvbXB1dGVTdG9yZVBsYW4oYWNjb3VudCwgYnVja2V0TmFtZSwgcm91dGluZyk7XG4gICAgfVxuICAgIGxldCB7IHNlbGZFbnRyaWVzLCBzZWxmIH0gPSBwbGFuO1xuICAgIGlmICghc2VsZikge1xuICAgICAgICBjb25zb2xlLmxvZyhgVGhpcyBzZXJ2ZXIgaXMgbm90IGluIHRoZSByb3V0aW5nIGNvbmZpZyBmb3IgYnVja2V0ICR7YWNjb3VudH0vJHtidWNrZXROYW1lfTogbm8gbG9uZ2VyIHN5bmNocm9uaXppbmcsIHZhbGlkIHdpbmRvdyB0cmVhdGVkIGFzIFswLCAwXSAoZmFzdCB3cml0ZXMgZmx1c2ggaW1tZWRpYXRlbHkpLCBkaXNrIGRhdGEga2VwdCBhbmQgc2VydmVkYCk7XG4gICAgfVxuICAgIGxldCBzdG9yZXM6IExvYWRlZFN0b3JlW10gPSBwbGFuLnN0b3Jlcy5tYXAocGxhblN0b3JlID0+ICh7XG4gICAgICAgIHJvdXRlS2V5OiBwbGFuU3RvcmUucm91dGVLZXksXG4gICAgICAgIHJvdXRlOiBwbGFuU3RvcmUucm91dGUsXG4gICAgICAgIGVudHJpZXM6IHBsYW5TdG9yZS5lbnRyaWVzLFxuICAgICAgICBmb2xkZXI6IGdldEJ1Y2tldEZvbGRlcihhY2NvdW50LCBidWNrZXROYW1lLCBwbGFuU3RvcmUucm91dGUpLFxuICAgICAgICBzdG9yZTogYnVpbGRTdG9yZShhY2NvdW50LCBidWNrZXROYW1lLCBwbGFuU3RvcmUpLFxuICAgIH0pKTtcbiAgICBsZXQgbG9hZGVkOiBCdWNrZXRTdGF0ZSA9IHsgYWNjb3VudCwgYnVja2V0TmFtZSwgcm91dGluZywgcm91dGluZ0pTT046IEpTT04uc3RyaW5naWZ5KHJvdXRpbmcpLCBzZWxmRW50cmllcywgc2VsZiwgc3RvcmVzLCBzdHJ1Y3R1cmVLZXk6IHBsYW4uc3RydWN0dXJlS2V5IH07XG4gICAgc2NoZWR1bGVXaW5kb3dCb3VuZGFyeVJlYnVpbGQobG9hZGVkKTtcbiAgICBzY2hlZHVsZUJvdW5kYXJ5U2NhbnMobG9hZGVkKTtcbiAgICAvLyBBIGxvYWRlZCBidWNrZXQgbXVzdCBhY3R1YWxseSBiZSBydW5uaW5nOiBlYWNoIHN0b3JlJ3MgaW5pdCBsb2FkcyBpdHMgaW5kZXggYW5kIHN0YXJ0cyBpdHMgc291cmNlIHN5bmNocm9uaXphdGlvbiwgYW5kIGl0IGlzIGxhenksIHNvIHdpdGhvdXQgdGhpcyBhIGJ1Y2tldCBub3RoaW5nIGhhcyByZWFkIGZyb20gb3Igd3JpdHRlbiB0byBzaXRzIGluZXJ0IC0gcmVwb3J0aW5nIG5vIGRhdGEgYW5kIG5vIHN5bmNpbmcgd2hpbGUgaXRzIGRpc2sgaXMgZnVsbCBvZiBmaWxlcy5cbiAgICBmb3IgKGxldCBzIG9mIHN0b3Jlcykge1xuICAgICAgICBpZiAocy5zdG9yZSBpbnN0YW5jZW9mIEJsb2JTdG9yZSkge1xuICAgICAgICAgICAgbGV0IHN0b3JlID0gcy5zdG9yZTtcbiAgICAgICAgICAgIHZvaWQgc3RvcmUuaW5pdCgpLmNhdGNoKChlOiBFcnJvcikgPT4gY29uc29sZS5lcnJvcihgSW5pdGlhbGl6aW5nIHRoZSBzdG9yZSBmb3IgYnVja2V0ICR7YWNjb3VudH0vJHtidWNrZXROYW1lfSAocm91dGUgJHtzLnJvdXRlS2V5fSkgZmFpbGVkOiAke2Uuc3RhY2sgPz8gZX1gKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxvYWRlZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9hZEJ1Y2tldChhY2NvdW50OiBzdHJpbmcsIGJ1Y2tldE5hbWU6IHN0cmluZyk6IFByb21pc2U8QnVja2V0U3RhdGUgfCB1bmRlZmluZWQ+IHtcbiAgICBsZXQgcm91dGluZyA9IGF3YWl0IHJlYWRSb3V0aW5nRnJvbURpc2soYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgaWYgKCFyb3V0aW5nKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBidWlsZEJ1Y2tldChhY2NvdW50LCBidWNrZXROYW1lLCByb3V0aW5nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvYWRlZEJ1Y2tldChhY2NvdW50OiBzdHJpbmcsIGJ1Y2tldE5hbWU6IHN0cmluZyk6IFByb21pc2U8QnVja2V0U3RhdGUgfCB1bmRlZmluZWQ+IHtcbiAgICBsZXQga2V5ID0gYCR7YWNjb3VudH0vJHtidWNrZXROYW1lfWA7XG4gICAgbGV0IGxvYWRlZCA9IGJ1Y2tldHMuZ2V0KGtleSk7XG4gICAgaWYgKCFsb2FkZWQpIHtcbiAgICAgICAgbG9hZGVkID0gbG9hZEJ1Y2tldChhY2NvdW50LCBidWNrZXROYW1lKTtcbiAgICAgICAgYnVja2V0cy5zZXQoa2V5LCBsb2FkZWQpO1xuICAgICAgICB2b2lkIGxvYWRlZC50aGVuKGJ1Y2tldCA9PiB7XG4gICAgICAgICAgICBpZiAoIWJ1Y2tldCAmJiBidWNrZXRzLmdldChrZXkpID09PSBsb2FkZWQpIHtcbiAgICAgICAgICAgICAgICBidWNrZXRzLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoYnVja2V0cy5nZXQoa2V5KSA9PT0gbG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgYnVja2V0cy5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsb2FkZWQ7XG59XG5cbmNvbnN0IHJvdXRpbmdSZWxvYWRzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8dm9pZD4+KCk7XG5mdW5jdGlvbiBzY2hlZHVsZVJvdXRpbmdSZWxvYWQoYWNjb3VudDogc3RyaW5nLCBidWNrZXROYW1lOiBzdHJpbmcsIGNvbmZpZz86IHsgZm9yY2U/OiBib29sZWFuOyByZWFzb24/OiBzdHJpbmcgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBrZXkgPSBgJHthY2NvdW50fS8ke2J1Y2tldE5hbWV9YDtcbiAgICBsZXQgbmV4dCA9IChyb3V0aW5nUmVsb2Fkcy5nZXQoa2V5KSB8fCBQcm9taXNlLnJlc29sdmUoKSlcbiAgICAgICAgLnRoZW4oKCkgPT4gY2hlY2tSb3V0aW5nQ2hhbmdlZChhY2NvdW50LCBidWNrZXROYW1lLCBjb25maWcpKVxuICAgICAgICAuY2F0Y2goZSA9PiBjb25zb2xlLmVycm9yKGBSZWxvYWRpbmcgcm91dGluZyBjb25maWcgZm9yIGJ1Y2tldCAke2tleX0gZmFpbGVkOmAsIGUpKTtcbiAgICByb3V0aW5nUmVsb2Fkcy5zZXQoa2V5LCBuZXh0KTtcbiAgICByZXR1cm4gbmV4dDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2hlY2tSb3V0aW5nQ2hhbmdlZChhY2NvdW50OiBzdHJpbmcsIGJ1Y2tldE5hbWU6IHN0cmluZywgY29uZmlnPzogeyBmb3JjZT86IGJvb2xlYW47IHJlYXNvbj86IHN0cmluZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGtleSA9IGAke2FjY291bnR9LyR7YnVja2V0TmFtZX1gO1xuICAgIGxldCBsb2FkZWQgPSBhd2FpdCBidWNrZXRzLmdldChrZXkpO1xuICAgIGlmICghbG9hZGVkKSByZXR1cm47XG4gICAgbGV0IHJvdXRpbmcgPSBhd2FpdCByZWFkUm91dGluZ0Zyb21EaXNrKGFjY291bnQsIGJ1Y2tldE5hbWUpO1xuICAgIGlmICghcm91dGluZykgcmV0dXJuO1xuICAgIGlmICghY29uZmlnPy5mb3JjZSAmJiBKU09OLnN0cmluZ2lmeShyb3V0aW5nKSA9PT0gbG9hZGVkLnJvdXRpbmdKU09OKSByZXR1cm47XG4gICAgbGV0IHJlYXNvbiA9IGNvbmZpZz8uZm9yY2UgJiYgKGNvbmZpZy5yZWFzb24gfHwgXCJmb3JjZWRcIikgfHwgXCJyb3V0aW5nIGNvbmZpZyBjaGFuZ2VkXCI7XG4gICAgbGV0IHBsYW4gPSBjb21wdXRlU3RvcmVQbGFuKGFjY291bnQsIGJ1Y2tldE5hbWUsIHJvdXRpbmcpO1xuICAgIGlmIChwbGFuLnN0cnVjdHVyZUtleSA9PT0gbG9hZGVkLnN0cnVjdHVyZUtleSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgQXBwbHlpbmcgdGhlIHJvdXRpbmcgY29uZmlnIHRvIHRoZSBydW5uaW5nIHN0b3JlcyBmb3IgYnVja2V0ICR7a2V5fSAoJHtyZWFzb259KWApO1xuICAgICAgICBmb3IgKGxldCBwbGFuU3RvcmUgb2YgcGxhbi5zdG9yZXMpIHtcbiAgICAgICAgICAgIGxldCBsaXZlID0gbG9hZGVkLnN0b3Jlcy5maW5kKHggPT4geC5yb3V0ZUtleSA9PT0gcGxhblN0b3JlLnJvdXRlS2V5KTtcbiAgICAgICAgICAgIC8vIHN0cnVjdHVyZUtleSBlcXVhbGl0eSBtZWFucyB0aGUgc3RvcmUgc2V0IChyb3V0ZXMsIHJhd0Rpc2ssIGxpbWl0cykgaXMgdW5jaGFuZ2VkLCBzbyBldmVyeSBwbGFuIHN0b3JlIGhhcyBpdHMgbGl2ZSB0d2luXG4gICAgICAgICAgICBpZiAoIWxpdmUgfHwgIShsaXZlLnN0b3JlIGluc3RhbmNlb2YgQmxvYlN0b3JlKSkgY29udGludWU7XG4gICAgICAgICAgICBsZXQgc3RvcmVGb2xkZXIgPSBsaXZlLmZvbGRlcjtcbiAgICAgICAgICAgIGxpdmUuc3RvcmUudXBkYXRlU291cmNlcyhwbGFuU3RvcmUuc291cmNlU3BlY3MubWFwKHNwZWMgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNvbmZpZyA9IHNwZWMuc291cmNlQ29uZmlnO1xuICAgICAgICAgICAgICAgIGlmICghc291cmNlQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlkZW50aXR5OiBzb3VyY2VJZGVudGl0eSh1bmRlZmluZWQpLCB1cmw6IHN0b3JlRm9sZGVyLCB2YWxpZFdpbmRvdzogc3BlYy52YWxpZFdpbmRvdywgY3JlYXRlOiAoKTogSUFyY2hpdmVzID0+IG5ldyBBcmNoaXZlc0Rpc2soc3RvcmVGb2xkZXIpIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGlkZW50aXR5OiBzb3VyY2VJZGVudGl0eShzb3VyY2VDb25maWcpLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHNvdXJjZUNvbmZpZy51cmwsXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkV2luZG93OiBzcGVjLnZhbGlkV2luZG93LFxuICAgICAgICAgICAgICAgICAgICByb3V0ZTogc3BlYy5yb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgbm9GdWxsU3luYzogc3BlYy5ub0Z1bGxTeW5jLFxuICAgICAgICAgICAgICAgICAgICBpbnRlcm1lZGlhdGU6IHNvdXJjZUNvbmZpZy5pbnRlcm1lZGlhdGUsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUNvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlOiAoKSA9PiBjcmVhdGVBcGlBcmNoaXZlcyhzb3VyY2VDb25maWcpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSwgcGxhblN0b3JlLmVudHJpZXMpO1xuICAgICAgICAgICAgbGl2ZS5lbnRyaWVzID0gcGxhblN0b3JlLmVudHJpZXM7XG4gICAgICAgIH1cbiAgICAgICAgbG9hZGVkLnJvdXRpbmcgPSByb3V0aW5nO1xuICAgICAgICBsb2FkZWQucm91dGluZ0pTT04gPSBKU09OLnN0cmluZ2lmeShyb3V0aW5nKTtcbiAgICAgICAgbG9hZGVkLnNlbGZFbnRyaWVzID0gcGxhbi5zZWxmRW50cmllcztcbiAgICAgICAgbG9hZGVkLnNlbGYgPSBwbGFuLnNlbGY7XG4gICAgICAgIHNjaGVkdWxlV2luZG93Qm91bmRhcnlSZWJ1aWxkKGxvYWRlZCk7XG4gICAgICAgIHNjaGVkdWxlQm91bmRhcnlTY2Fucyhsb2FkZWQpO1xuICAgICAgICBicm9hZGNhc3RSb3V0aW5nQ2hhbmdlZCgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKGBSZWJ1aWxkaW5nIHRoZSBzdG9yZXMgZm9yIGJ1Y2tldCAke2tleX0gKCR7cmVhc29ufSk6IHN0cnVjdHVyZSBjaGFuZ2VkIGZyb20gJHtsb2FkZWQuc3RydWN0dXJlS2V5fSB0byAke3BsYW4uc3RydWN0dXJlS2V5fWApO1xuICAgIGZvciAobGV0IHMgb2YgbG9hZGVkLnN0b3Jlcykge1xuICAgICAgICBpZiAocy5zdG9yZSBpbnN0YW5jZW9mIEJsb2JTdG9yZSkge1xuICAgICAgICAgICAgYXdhaXQgcy5zdG9yZS5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYnVja2V0cy5zZXQoa2V5LCBQcm9taXNlLnJlc29sdmUoYnVpbGRCdWNrZXQoYWNjb3VudCwgYnVja2V0TmFtZSwgcm91dGluZywgcGxhbikpKTtcbiAgICBicm9hZGNhc3RSb3V0aW5nQ2hhbmdlZCgpO1xufVxuXG5jb25zdCByb3V0aW5nV3JpdGVzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8dm9pZD4+KCk7XG5cbi8qKiBUaGUgcm91dGluZy1jb25maWcgd3JpdGUgcGF0aCAtIHRoZSBPTkUgd3JpdGUgdGhhdCBjYW5ub3QgZ28gdGhyb3VnaCBhIHN0b3JlIChpdCBpcyB3aGF0IENSRUFURVMgdGhlIGJ1Y2tldCBhbmQgaXRzIHN0b3JlcykuIFNlcmlhbGl6ZWQgcGVyIGJ1Y2tldDogY29uY3VycmVudCBjb25maWcgd3JpdGVzIHdvdWxkIHJhY2UgdGhlIHZlcnNpb24gY2hlY2suICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcXVldWVSb3V0aW5nQ29uZmlnV3JpdGUoYWNjb3VudDogc3RyaW5nLCBidWNrZXROYW1lOiBzdHJpbmcsIGRhdGE6IEJ1ZmZlciwgY29uZmlnPzogeyBsYXN0TW9kaWZpZWQ/OiBudW1iZXIgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGFzc2VydFdyaXRlc0FsbG93ZWQoKTtcbiAgICBsZXQga2V5ID0gYCR7YWNjb3VudH0vJHtidWNrZXROYW1lfWA7XG4gICAgbGV0IHJ1biA9IChyb3V0aW5nV3JpdGVzLmdldChrZXkpIHx8IFByb21pc2UucmVzb2x2ZSgpKS50aGVuKCgpID0+IHdyaXRlUm91dGluZ0NvbmZpZyhhY2NvdW50LCBidWNrZXROYW1lLCBkYXRhLCBjb25maWcpKTtcbiAgICByb3V0aW5nV3JpdGVzLnNldChrZXksIHJ1bi50aGVuKCgpID0+IHsgfSwgKCkgPT4geyB9KSk7XG4gICAgcmV0dXJuIGF3YWl0IHJ1bjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVSb3V0aW5nQ29uZmlnKGFjY291bnQ6IHN0cmluZywgYnVja2V0TmFtZTogc3RyaW5nLCBkYXRhOiBCdWZmZXIsIGNvbmZpZz86IHsgbGFzdE1vZGlmaWVkPzogbnVtYmVyIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQga2V5ID0gYCR7YWNjb3VudH0vJHtidWNrZXROYW1lfWA7XG4gICAgbGV0IGluY29taW5nID0gcGFyc2VSb3V0aW5nRGF0YShkYXRhKTtcbiAgICBsZXQgbG9hZGVkID0gYXdhaXQgZ2V0TG9hZGVkQnVja2V0KGFjY291bnQsIGJ1Y2tldE5hbWUpO1xuICAgIGlmICghbG9hZGVkKSB7XG4gICAgICAgIGF3YWl0IHJlc29sdmVTb3VyY2VBcmNoaXZlcyhnZXRCdWNrZXRGb2xkZXIoYWNjb3VudCwgYnVja2V0TmFtZSkpLnNldChST1VUSU5HX0ZJTEUsIGRhdGEsIHsgbGFzdE1vZGlmaWVkOiBjb25maWc/Lmxhc3RNb2RpZmllZCB9KTtcbiAgICAgICAgYnVja2V0cy5zZXQoa2V5LCBQcm9taXNlLnJlc29sdmUoYnVpbGRCdWNrZXQoYWNjb3VudCwgYnVja2V0TmFtZSwgaW5jb21pbmcpKSk7XG4gICAgICAgIGJyb2FkY2FzdFJvdXRpbmdDaGFuZ2VkKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBDcmVhdGVkIGJ1Y2tldCAke2tleX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkoaW5jb21pbmcpICE9PSBsb2FkZWQucm91dGluZ0pTT04gJiYgZ2V0Q29uZmlnVmVyc2lvbihpbmNvbWluZykgPD0gZ2V0Q29uZmlnVmVyc2lvbihsb2FkZWQucm91dGluZykpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSBgQ2Fubm90IHVwZGF0ZSByb3V0aW5nIGNvbmZpZyBmb3IgYnVja2V0ICR7a2V5fTogdGhlIG5ldyBjb25maWcgZGlmZmVycyBmcm9tIHRoZSBjdXJyZW50IG9uZSBidXQgaXRzIHZlcnNpb24gKCR7Z2V0Q29uZmlnVmVyc2lvbihpbmNvbWluZyl9KSBpcyBub3QgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IHZlcnNpb24gKCR7Z2V0Q29uZmlnVmVyc2lvbihsb2FkZWQucm91dGluZyl9KS4gSW5jcmVtZW50IHRoZSB2ZXJzaW9uIHRvIHVwZGF0ZSBpdC4gQ3VycmVudDogJHtsb2FkZWQucm91dGluZ0pTT059LiBBdHRlbXB0ZWQ6ICR7SlNPTi5zdHJpbmdpZnkoaW5jb21pbmcpfWA7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgbGV0IHN0b3JlZCA9IGluY29taW5nO1xuICAgIGxldCByZWluamVjdGVkID0gMDtcbiAgICBmb3IgKGxldCBpbnRlcm1lZGlhdGUgb2YgZ2V0SW50ZXJtZWRpYXRlU291cmNlcyhleHBpcmVJbnRlcm1lZGlhdGVTb3VyY2VzKGxvYWRlZC5yb3V0aW5nLCBEYXRlLm5vdygpKSkpIHtcbiAgICAgICAgc3RvcmVkID0gaW5qZWN0SW50ZXJtZWRpYXRlU291cmNlKHN0b3JlZCwge1xuICAgICAgICAgICAgc3BsaXRVcmw6IGZpbmRTcGxpdFVybChsb2FkZWQucm91dGluZywgaW50ZXJtZWRpYXRlKSB8fCBpbnRlcm1lZGlhdGUudXJsLFxuICAgICAgICAgICAgaW50ZXJtZWRpYXRlVXJsOiBpbnRlcm1lZGlhdGUudXJsLFxuICAgICAgICAgICAgc3RhcnQ6IGludGVybWVkaWF0ZS52YWxpZFdpbmRvd1swXSxcbiAgICAgICAgICAgIGVuZDogaW50ZXJtZWRpYXRlLnZhbGlkV2luZG93WzFdLFxuICAgICAgICB9KTtcbiAgICAgICAgcmVpbmplY3RlZCsrO1xuICAgIH1cbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkoc3RvcmVkKSAhPT0gSlNPTi5zdHJpbmdpZnkoaW5jb21pbmcpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZS1pbmplY3RlZCAke3JlaW5qZWN0ZWR9IGluLWZsaWdodCBzd2l0Y2hvdmVyIHdpbmRvd3MgaW50byB0aGUgaW5jb21pbmcgcm91dGluZyBjb25maWcgZm9yIGJ1Y2tldCAke2tleX0gKHZlcnNpb24gJHtnZXRDb25maWdWZXJzaW9uKGluY29taW5nKX0pYCk7XG4gICAgfVxuICAgIC8vIFdyaXR0ZW4gc3RyYWlnaHQgaW50byB0aGUgcGxhaW4gYnVja2V0IGZvbGRlcjogdGhlIHJvdXRpbmcgZmlsZSBkZWZpbmVzIHRoZSBwZXItcm91dGUgc3RvcmVzLCBzbyBpdCBuZXZlciBmbG93cyB0aHJvdWdoIHRoZW1cbiAgICBhd2FpdCByZXNvbHZlU291cmNlQXJjaGl2ZXMoZ2V0QnVja2V0Rm9sZGVyKGFjY291bnQsIGJ1Y2tldE5hbWUpKS5zZXQoUk9VVElOR19GSUxFLCBCdWZmZXIuZnJvbShzZXJpYWxpemVSZW1vdGVDb25maWcoc3RvcmVkKSksIHsgbGFzdE1vZGlmaWVkOiBjb25maWc/Lmxhc3RNb2RpZmllZCB9KTtcbiAgICBhd2FpdCBzY2hlZHVsZVJvdXRpbmdSZWxvYWQoYWNjb3VudCwgYnVja2V0TmFtZSk7XG59XG5cbi8qKiBXaGljaCBidWNrZXRzIHRoaXMgcHJvY2VzcyBjdXJyZW50bHkgaGFzIGxvYWRlZCAtIHdoYXQgYSBkZXBsb3kgc3VjY2Vzc29yIGFza3MgaXRzIHByZWRlY2Vzc29yIGZvciwgc28gaXQgYWN0aXZhdGVzIGV4YWN0bHkgdGhlIGJ1Y2tldHMgdGhhdCBhcmUgYWN0dWFsbHkgaW4gdXNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFjdGl2ZUJ1Y2tldEtleXMoKTogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZyB9W10ge1xuICAgIHJldHVybiBbLi4uYnVja2V0cy5rZXlzKCldLm1hcChrZXkgPT4ge1xuICAgICAgICBsZXQgc2xhc2ggPSBrZXkuaW5kZXhPZihcIi9cIik7XG4gICAgICAgIHJldHVybiB7IGFjY291bnQ6IGtleS5zbGljZSgwLCBzbGFzaCksIGJ1Y2tldE5hbWU6IGtleS5zbGljZShzbGFzaCArIDEpIH07XG4gICAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWJ1aWxkQWxsTG9hZGVkQnVja2V0cygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGxldCBrZXkgb2YgWy4uLmJ1Y2tldHMua2V5cygpXSkge1xuICAgICAgICBsZXQgc2xhc2ggPSBrZXkuaW5kZXhPZihcIi9cIik7XG4gICAgICAgIGF3YWl0IHNjaGVkdWxlUm91dGluZ1JlbG9hZChrZXkuc2xpY2UoMCwgc2xhc2gpLCBrZXkuc2xpY2Uoc2xhc2ggKyAxKSwgeyBmb3JjZTogdHJ1ZSwgcmVhc29uOiBcImFsbCBsb2FkZWQgYnVja2V0cyB3ZXJlIGFza2VkIHRvIHJlYnVpbGRcIiB9KTtcbiAgICB9XG59XG5cbmNvbnN0IE9XTl9DT05GSUdfV1JJVEVfVEhST1RUTEUgPSAzMCAqIDEwMDA7XG5jb25zdCBJTlRFUk1FRElBVEVfTUFJTlRBSU5fSU5URVJWQUwgPSA2MCAqIDEwMDA7XG4vLyBQZXIgYnVja2V0LCBub3QgZ2xvYmFsOiBhIHN3aXRjaG92ZXIgaGFzIHRvIHdyaXRlIGV2ZXJ5IGJ1Y2tldCdzIHdpbmRvd3MgYXQgb25jZSwgYW5kIGEgc2hhcmVkIHRocm90dGxlIHdvdWxkIGxldCBvbmx5IG9uZSBidWNrZXQgdGhyb3VnaCBwZXIgaW50ZXJ2YWxcbmNvbnN0IGxhc3RPd25Db25maWdXcml0ZSA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlT3duUm91dGluZ0NvbmZpZyhsb2FkZWQ6IEJ1Y2tldFN0YXRlLCB1cGRhdGVkOiBSZW1vdGVDb25maWcsIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGtleSA9IGAke2xvYWRlZC5hY2NvdW50fS8ke2xvYWRlZC5idWNrZXROYW1lfWA7XG4gICAgbGV0IHNpbmNlTGFzdCA9IERhdGUubm93KCkgLSAobGFzdE93bkNvbmZpZ1dyaXRlLmdldChrZXkpIHx8IDApO1xuICAgIGlmIChzaW5jZUxhc3QgPCBPV05fQ09ORklHX1dSSVRFX1RIUk9UVExFKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBOb3Qgd3JpdGluZyBvdXIgb3duIHJvdXRpbmcgY29uZmlnIHVwZGF0ZSBmb3IgYnVja2V0ICR7a2V5fSAoJHtyZWFzb259KTogdGhlIGxhc3Qgb25lIHdhcyAke3NpbmNlTGFzdH1tcyBhZ28sIHVuZGVyIHRoZSAke09XTl9DT05GSUdfV1JJVEVfVEhST1RUTEV9bXMgdGhyb3R0bGUuIFJldHJ5aW5nIG9uIHRoZSBuZXh0IG1haW50ZW5hbmNlIHBhc3MuIFdhbnRlZDogJHtKU09OLnN0cmluZ2lmeSh1cGRhdGVkKX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsYXN0T3duQ29uZmlnV3JpdGUuc2V0KGtleSwgRGF0ZS5ub3coKSk7XG4gICAgbGV0IHZlcnNpb24gPSBuZXh0SW50ZXJtZWRpYXRlVmVyc2lvbihnZXRDb25maWdWZXJzaW9uKGxvYWRlZC5yb3V0aW5nKSk7XG4gICAgbGV0IG5leHQ6IFJlbW90ZUNvbmZpZyA9IHsgLi4udXBkYXRlZCwgdmVyc2lvbiB9O1xuICAgIGNvbnNvbGUubG9nKGBXcml0aW5nICR7Uk9VVElOR19GSUxFfSBmb3IgYnVja2V0ICR7a2V5fSAoJHtyZWFzb259KSwgdmVyc2lvbiAke2dldENvbmZpZ1ZlcnNpb24obG9hZGVkLnJvdXRpbmcpfSAtPiAke3ZlcnNpb259OiAke0pTT04uc3RyaW5naWZ5KG5leHQpfWApO1xuICAgIGxldCBkYXRhID0gQnVmZmVyLmZyb20oc2VyaWFsaXplUmVtb3RlQ29uZmlnKG5leHQpKTtcbiAgICBhd2FpdCBxdWV1ZVJvdXRpbmdDb25maWdXcml0ZShsb2FkZWQuYWNjb3VudCwgbG9hZGVkLmJ1Y2tldE5hbWUsIGRhdGEpO1xuICAgIGF3YWl0IHByb3BhZ2F0ZVJvdXRpbmdDb25maWcobG9hZGVkLCBuZXh0LCBkYXRhKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJvcGFnYXRlUm91dGluZ0NvbmZpZyhsb2FkZWQ6IEJ1Y2tldFN0YXRlLCBuZXh0OiBSZW1vdGVDb25maWcsIGRhdGE6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCB0YXJnZXRzID0gbmV3IE1hcDxzdHJpbmcsIFNvdXJjZUNvbmZpZz4oKTtcbiAgICBmb3IgKGxldCBzb3VyY2Ugb2YgWy4uLmxvYWRlZC5yb3V0aW5nLnNvdXJjZXMsIC4uLm5leHQuc291cmNlc10pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09IFwic3RyaW5nXCIgfHwgc291cmNlLmludGVybWVkaWF0ZSkgY29udGludWU7XG4gICAgICAgIGlmIChzb3VyY2UudHlwZSA9PT0gXCJyZW1vdGVcIikge1xuICAgICAgICAgICAgbGV0IHBhcnNlZCA9IHBhcnNlSG9zdGVkVXJsKHNvdXJjZS51cmwpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZC5hY2NvdW50ICE9PSBsb2FkZWQuYWNjb3VudCB8fCBwYXJzZWQuYnVja2V0TmFtZSAhPT0gbG9hZGVkLmJ1Y2tldE5hbWUpIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXRzLmhhcyhzb3VyY2UudXJsKSkgY29udGludWU7XG4gICAgICAgIHRhcmdldHMuc2V0KHNvdXJjZS51cmwsIHNvdXJjZSk7XG4gICAgfVxuICAgIGZvciAobGV0IFt1cmwsIHNvdXJjZV0gb2YgdGFyZ2V0cykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgY3JlYXRlQXBpQXJjaGl2ZXMoc291cmNlKS5zZXQoUk9VVElOR19GSUxFLCBkYXRhKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBXcm90ZSAke1JPVVRJTkdfRklMRX0gZm9yIGJ1Y2tldCAke2xvYWRlZC5hY2NvdW50fS8ke2xvYWRlZC5idWNrZXROYW1lfSB0byAke3VybH1gKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgUHJvcGFnYXRpbmcgb3VyIHJvdXRpbmcgY29uZmlnIHVwZGF0ZSB0byAke3VybH0gZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5zdGFjayA/PyBlfWApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBtYWludGFpbkludGVybWVkaWF0ZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IHsgZG9tYWluLCBwb3J0IH0gPSBnZXRTdG9yYWdlU2VydmVyQ29uZmlnKCk7XG4gICAgbGV0IHRha2VvdmVyID0gZ2V0VGFrZW92ZXJJbnRlcm1lZGlhdGUoKTtcbiAgICBsZXQgd3JpdHRlbjogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgYWxyZWFkeUNvcnJlY3Q6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IG5vdE91cnM6IHN0cmluZ1tdID0gW107XG4gICAgLy8gT05MWSBidWNrZXRzIGFscmVhZHkgaW4gbWVtb3J5LiBBIHN3aXRjaG92ZXIgbXVzdCBuZXZlciBsb2FkIGEgYnVja2V0OiBsb2FkaW5nIHN0YXJ0cyBpdHMgc3luY2hyb25pemF0aW9uLCBhbmQgYnVja2V0cyBub3RoaW5nIGhhcyB0b3VjaGVkIChsZWdhY3kgb25lcyBlc3BlY2lhbGx5KSBoYXZlIG5vIHdyaXRlcyB0byBoYW5kIG9mZiBpbiB0aGUgZmlyc3QgcGxhY2UuIE9uZSB0aGF0IGRvZXMgZ2V0IHVzZWQgbWlkLXN3aXRjaG92ZXIgbG9hZHMgb24gdGhhdCBhY2Nlc3MsIGFuZCB0aGUgbmV4dCBwYXNzIGdpdmVzIGl0IGl0cyB3aW5kb3cuXG4gICAgbGV0IGtleXMgPSBbLi4uYnVja2V0cy5rZXlzKCldO1xuICAgIGZvciAobGV0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIGxldCBsb2FkZWRQcm9taXNlID0gYnVja2V0cy5nZXQoa2V5KTtcbiAgICAgICAgaWYgKCFsb2FkZWRQcm9taXNlKSBjb250aW51ZTtcbiAgICAgICAgbGV0IGxvYWRlZCA9IGF3YWl0IGxvYWRlZFByb21pc2UuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICAgICAgaWYgKCFsb2FkZWQpIGNvbnRpbnVlO1xuICAgICAgICBsZXQgZXhwaXJlZCA9IGV4cGlyZUludGVybWVkaWF0ZVNvdXJjZXMobG9hZGVkLnJvdXRpbmcsIERhdGUubm93KCkpO1xuICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoZXhwaXJlZCkgIT09IEpTT04uc3RyaW5naWZ5KGxvYWRlZC5yb3V0aW5nKSkge1xuICAgICAgICAgICAgYXdhaXQgd3JpdGVPd25Sb3V0aW5nQ29uZmlnKGxvYWRlZCwgZXhwaXJlZCwgYHN3aXRjaG92ZXIgd2luZG93cyBleHBpcmVkIG1vcmUgdGhhbiAke0lOVEVSTUVESUFURV9FWFBJUkVfR1JBQ0UgLyAxMDAwfXMgYWdvYCk7XG4gICAgICAgICAgICB3cml0dGVuLnB1c2goa2V5KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFrZW92ZXIpIGNvbnRpbnVlO1xuICAgICAgICBsZXQgbWFpblVybCA9IGxvYWRlZC5yb3V0aW5nLnNvdXJjZXMuZmluZCh4ID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIiB8fCB4LnR5cGUgIT09IFwicmVtb3RlXCIgfHwgeC5pbnRlcm1lZGlhdGUpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGxldCBwYXJzZWQgPSBwYXJzZUhvc3RlZFVybCh4LnVybCk7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VkLmFkZHJlc3MgPT09IGRvbWFpbiAmJiBwYXJzZWQucG9ydCA9PT0gcG9ydDtcbiAgICAgICAgfSkgYXMgSG9zdGVkQ29uZmlnIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoIW1haW5VcmwpIHtcbiAgICAgICAgICAgIG5vdE91cnMucHVzaChrZXkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGluamVjdGVkID0gaW5qZWN0SW50ZXJtZWRpYXRlU291cmNlKGxvYWRlZC5yb3V0aW5nLCB7XG4gICAgICAgICAgICBzcGxpdFVybDogbWFpblVybC51cmwsXG4gICAgICAgICAgICBpbnRlcm1lZGlhdGVVcmw6IHJlcGxhY2VIb3N0ZWRVcmxQb3J0KG1haW5VcmwudXJsLCB0YWtlb3Zlci5hbHRQb3J0KSxcbiAgICAgICAgICAgIHN0YXJ0OiB0YWtlb3Zlci5zdGFydCxcbiAgICAgICAgICAgIGVuZDogdGFrZW92ZXIuZW5kLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGluamVjdGVkKSA9PT0gSlNPTi5zdHJpbmdpZnkobG9hZGVkLnJvdXRpbmcpKSB7XG4gICAgICAgICAgICBhbHJlYWR5Q29ycmVjdC5wdXNoKGtleSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB3cml0ZU93blJvdXRpbmdDb25maWcobG9hZGVkLCBpbmplY3RlZCwgYHdlIGFyZSBhIGRlcGxveSBzdWNjZXNzb3I6IHdyaXRlcyByb3V0ZSB0byBvdXIgYWx0ZXJuYXRlIHBvcnQgJHt0YWtlb3Zlci5hbHRQb3J0fSBmcm9tICR7bmV3IERhdGUodGFrZW92ZXIuc3RhcnQpLnRvSVNPU3RyaW5nKCl9IHVudGlsIG91ciBwcmVkZWNlc3NvciBpcyBraWxsZWQgYXQgJHtuZXcgRGF0ZSh0YWtlb3Zlci5lbmQpLnRvSVNPU3RyaW5nKCl9YCk7XG4gICAgICAgIHdyaXR0ZW4ucHVzaChrZXkpO1xuICAgIH1cbiAgICBpZiAoIXRha2VvdmVyKSByZXR1cm47XG4gICAgaWYgKCFrZXlzLmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgTm8gYWN0aXZlIGJ1Y2tldHMsIHNvIG5vIGNvbmZpZyBmaWxlcyB0byB3cml0ZSB0aGUgaW50ZXJtZWRpYXRlIGludG8gKGEgYnVja2V0IGlzIG9ubHkgYWN0aXZlIG9uY2Ugc29tZXRoaW5nIHVzZXMgaXQpYCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF3cml0dGVuLmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgV3JvdGUgbm8gY29uZmlnIGZpbGVzOiBvZiAke2tleXMubGVuZ3RofSBhY3RpdmUgYnVja2V0cywgJHthbHJlYWR5Q29ycmVjdC5sZW5ndGh9IGFscmVhZHkgY29udGFpbiB0aGUgaW50ZXJtZWRpYXRlIGFuZCAke25vdE91cnMubGVuZ3RofSBhcmUgbm90IGhvc3RlZCBieSB1c2ApO1xuICAgIH1cbn1cblxuLyoqIE91ciBwcmVkZWNlc3NvciBzdGlsbCBob2xkcyB0aGUgbWFpbiBwb3J0IGFuZCBoYXMgYmVlbiBzZXJ2aW5nIGFsbCBhbG9uZywgc28gaXQgLSBub3QgdXMgLSBrbm93cyB3aGljaCBidWNrZXRzIGFyZSBpbiB1c2UuIFdlIGFjdGl2YXRlIGV4YWN0bHkgdGhvc2UsIHdoaWNoIGlzIHdoYXQgbWFrZXMgdGhlaXIgY29uZmlnIGZpbGVzIGdldCB0aGUgaW50ZXJtZWRpYXRlOyBub3RoaW5nIGVsc2Ugb24gZGlzayBpcyB0b3VjaGVkLiAqL1xuYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVQcmVkZWNlc3NvckJ1Y2tldHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IHsgZG9tYWluLCBwb3J0IH0gPSBnZXRTdG9yYWdlU2VydmVyQ29uZmlnKCk7XG4gICAgbGV0IHVybCA9IGBodHRwczovLyR7ZG9tYWlufToke3BvcnR9YDtcbiAgICBsZXQga2V5czogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZyB9W107XG4gICAgdHJ5IHtcbiAgICAgICAga2V5cyA9IGF3YWl0IGxpc3RTZXJ2ZXJBY3RpdmVCdWNrZXRLZXlzKHsgdXJsIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgQ291bGQgbm90IGFzayBvdXIgcHJlZGVjZXNzb3Igb24gJHt1cmx9IHdoaWNoIGJ1Y2tldHMgYXJlIGFjdGl2ZSwgc28gb25seSBidWNrZXRzIHVzZWQgb24gdGhpcyBwcm9jZXNzIGdldCB0aGUgaW50ZXJtZWRpYXRlOiAkeyhlIGFzIEVycm9yKS5zdGFjayA/PyBlfWApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgha2V5cy5sZW5ndGgpIHtcbiAgICAgICAgY29uc29sZS5sb2coYE91ciBwcmVkZWNlc3NvciBvbiAke3VybH0gaGFzIG5vIGFjdGl2ZSBidWNrZXRzLCBzbyB0aGVyZSBhcmUgbm8gY29uZmlnIGZpbGVzIHRvIHdyaXRlIHRoZSBpbnRlcm1lZGlhdGUgaW50b2ApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKGBPdXIgcHJlZGVjZXNzb3Igb24gJHt1cmx9IGhhcyAke2tleXMubGVuZ3RofSBhY3RpdmUgYnVja2V0cywgYWN0aXZhdGluZyB0aGVtIGhlcmUgc28gdGhlaXIgY29uZmlnIGZpbGVzIGdldCB0aGUgaW50ZXJtZWRpYXRlOiAke2tleXMubWFwKHggPT4gYCR7eC5hY2NvdW50fS8ke3guYnVja2V0TmFtZX1gKS5qb2luKFwiLCBcIil9YCk7XG4gICAgZm9yIChsZXQgeyBhY2NvdW50LCBidWNrZXROYW1lIH0gb2Yga2V5cykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZ2V0TG9hZGVkQnVja2V0KGFjY291bnQsIGJ1Y2tldE5hbWUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBBY3RpdmF0aW5nIGJ1Y2tldCAke2FjY291bnR9LyR7YnVja2V0TmFtZX0gKGFjdGl2ZSBvbiBvdXIgcHJlZGVjZXNzb3IpIGZhaWxlZDogJHsoZSBhcyBFcnJvcikuc3RhY2sgPz8gZX1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqIFN0YXJ0ZWQgYnkgZGVwbG95VGFrZW92ZXIgb25jZSB3ZSBhcmUgYWN0dWFsbHkgYSBkZXBsb3kgc3VjY2Vzc29yIGxpc3RlbmluZyBvbiBhbiBhbHRlcm5hdGUgcG9ydC4gVW50aWwgdGhlbiB0aGVyZSBhcmUgbm8gc3dpdGNob3ZlciB3aW5kb3dzIHRvIHdyaXRlIG9yIGV4cGlyZSwgc28gbm90aGluZyBwb2xscy4gKi9cbmV4cG9ydCBjb25zdCBzdGFydEludGVybWVkaWF0ZU1haW50ZW5hbmNlID0gbGF6eSgoKSA9PiB7XG4gICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBhY3RpdmF0ZVByZWRlY2Vzc29yQnVja2V0cygpO1xuICAgICAgICBhd2FpdCBtYWludGFpbkludGVybWVkaWF0ZXMoKTtcbiAgICB9KSgpLmNhdGNoKChlOiBFcnJvcikgPT4gY29uc29sZS5lcnJvcihgV3JpdGluZyB0aGUgaW50ZXJtZWRpYXRlIGludG8gdGhlIGNvbmZpZyBmaWxlcyBmYWlsZWQ6ICR7ZS5zdGFjayA/PyBlfWApKTtcbiAgICBydW5JbmZpbml0ZVBvbGwoSU5URVJNRURJQVRFX01BSU5UQUlOX0lOVEVSVkFMLCBtYWludGFpbkludGVybWVkaWF0ZXMpO1xufSk7XG5cbmV4cG9ydCB0eXBlIFNlcnZlckJ1Y2tldEluZm8gPSB7XG4gICAgYnVja2V0TmFtZTogc3RyaW5nO1xuICAgIGFjdGl2ZTogYm9vbGVhbjtcbiAgICAvKiogV2hlcmUgdGhlIGJ1Y2tldCdzIGRhdGEgbGl2ZXMgb24gdGhpcyBzZXJ2ZXIgKi9cbiAgICBmb2xkZXI6IHN0cmluZztcbiAgICAvKiogVGhlIGRyaXZlIHRoYXQgZm9sZGVyIGlzIG9uLiBCdWNrZXRzIHNoYXJpbmcgYSBkcml2ZSByZXBvcnQgdGhlIHNhbWUgbnVtYmVycy4gKi9cbiAgICBkaXNrPzogQnVja2V0RGlza0luZm87XG4gICAgZGlza0Vycm9yPzogc3RyaW5nO1xuICAgIHdyaXRlU3RhdHM/OiBCdWNrZXRXcml0ZVN0YXRzO1xuICAgIGNvbmZpZz86IEFyY2hpdmVzQ29uZmlnO1xuICAgIGVycm9yPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQWN0aXZlQnVja2V0SW5mbyA9IHtcbiAgICBmb2xkZXI6IHN0cmluZztcbiAgICAvKiogVGhlIHJvdXRpbmcgY29uZmlnIHRoZSBidWNrZXQgaXMgUlVOTklORyBvbiwgc3RyYWlnaHQgZnJvbSBtZW1vcnkgLSBpbmNsdWRpbmcgc3dpdGNob3ZlciB3aW5kb3dzIHdyaXR0ZW4gc2luY2UgaXQgbG9hZGVkICovXG4gICAgcm91dGluZzogUmVtb3RlQ29uZmlnO1xuICAgIC8qKiBPdXIgb3duIGVudHJpZXMgaW4gdGhhdCBjb25maWcsIGFuZCB0aGVpciBzdW1tYXJpemVkIGN1cnJlbnQgcm9sZSAocm91dGVzIHVuaW9uICsgZmxhZ3MpICovXG4gICAgc2VsZkVudHJpZXM6IEhvc3RlZENvbmZpZ1tdO1xuICAgIHNlbGY/OiBTZWxmU3VtbWFyeTtcbiAgICBjb25maWc6IEFyY2hpdmVzQ29uZmlnO1xufTtcblxuZnVuY3Rpb24gdG9BY3RpdmVCdWNrZXRJbmZvKGxvYWRlZDogQnVja2V0U3RhdGUpOiBBY3RpdmVCdWNrZXRJbmZvIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBmb2xkZXI6IGdldEJ1Y2tldEZvbGRlcihsb2FkZWQuYWNjb3VudCwgbG9hZGVkLmJ1Y2tldE5hbWUpLFxuICAgICAgICByb3V0aW5nOiBsb2FkZWQucm91dGluZyxcbiAgICAgICAgc2VsZkVudHJpZXM6IGxvYWRlZC5zZWxmRW50cmllcyxcbiAgICAgICAgc2VsZjogbG9hZGVkLnNlbGYsXG4gICAgICAgIGNvbmZpZzogZ2V0QnVja2V0Q29uZmlnKGxvYWRlZCksXG4gICAgfTtcbn1cblxuLyoqIFRoZSBsaXZlIGluLW1lbW9yeSBzdGF0ZSBvZiBPTkUgYnVja2V0LCBhbnN3ZXJlZCB3aXRob3V0IHRvdWNoaW5nIHRoZSBkaXNrIChubyByb3V0aW5nIGZpbGUgcmVhZCwgbm8gc3RhdGZzLCBubyBzdG9yZWQgd3JpdGUgc3RhdHMpLiBSZXR1cm5zIGFuIGVycm9yIHN0cmluZyB3aGVuIHRoZSBidWNrZXQgaXMgbm90IGxvYWRlZCBoZXJlLCB3aGljaCBpcyB0aGUgbm9ybWFsIHN0YXRlIGZvciBhIGJ1Y2tldCBub3RoaW5nIGhhcyBhY2Nlc3NlZCBzaW5jZSBzdGFydHVwLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEFjdGl2ZUJ1Y2tldChhY2NvdW50OiBzdHJpbmcsIGJ1Y2tldE5hbWU6IHN0cmluZyk6IFByb21pc2U8QWN0aXZlQnVja2V0SW5mbyB8IHN0cmluZz4ge1xuICAgIGxldCBrZXkgPSBgJHthY2NvdW50fS8ke2J1Y2tldE5hbWV9YDtcbiAgICBsZXQgbG9hZGVkUHJvbWlzZSA9IGJ1Y2tldHMuZ2V0KGtleSk7XG4gICAgaWYgKCFsb2FkZWRQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiBgQnVja2V0ICR7a2V5fSBpcyBub3QgbG9hZGVkIG9uIHRoaXMgc2VydmVyLCBzbyBpdCBoYXMgbm8gbGl2ZSBzdGF0ZSAoaXQgbG9hZHMgb24gZmlyc3QgYWNjZXNzKWA7XG4gICAgfVxuICAgIGxldCBsb2FkZWQ6IEJ1Y2tldFN0YXRlIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICAgIGxvYWRlZCA9IGF3YWl0IGxvYWRlZFByb21pc2U7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gYEJ1Y2tldCAke2tleX0gZmFpbGVkIHRvIGxvYWQgb24gdGhpcyBzZXJ2ZXI6ICR7U3RyaW5nKChlIGFzIEVycm9yKS5zdGFjayA/PyBlKS5zbGljZSgwLCA1MDApfWA7XG4gICAgfVxuICAgIGlmICghbG9hZGVkKSB7XG4gICAgICAgIHJldHVybiBgQnVja2V0ICR7a2V5fSBkb2VzIG5vdCBleGlzdCBvbiB0aGlzIHNlcnZlcmA7XG4gICAgfVxuICAgIHJldHVybiB0b0FjdGl2ZUJ1Y2tldEluZm8obG9hZGVkKTtcbn1cblxuLyoqIExvYWRzIGEgYnVja2V0IHRoYXQgZXhpc3RzIG9uIHRoaXMgc2VydmVyJ3MgZGlzayBpbnRvIG1lbW9yeSwgd2hpY2ggc3RhcnRzIGl0cyBzeW5jaHJvbml6YXRpb24gYW5kIHdpbmRvdyB0aW1lcnMsIGFuZCByZXR1cm5zIGl0cyBsaXZlIHN0YXRlLiBOb3RoaW5nIGlzIHdyaXR0ZW4gYW5kIG5vIG90aGVyIHNlcnZlciBpcyBjb250YWN0ZWQgLSB1bmxpa2UgYnVpbGRpbmcgYW4gQXJjaGl2ZXNDaGFpbiBmb3IgaXQsIHdoaWNoIHdvdWxkIHByb2JlIGV2ZXJ5IHNvdXJjZSBhbmQgY291bGQgd3JpdGUgdGhlIHJvdXRpbmcgY29uZmlnLiBBbHJlYWR5LWxvYWRlZCBidWNrZXRzIGp1c3QgcmV0dXJuIHRoZWlyIHN0YXRlLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGl2YXRlQnVja2V0KGFjY291bnQ6IHN0cmluZywgYnVja2V0TmFtZTogc3RyaW5nKTogUHJvbWlzZTxBY3RpdmVCdWNrZXRJbmZvIHwgc3RyaW5nPiB7XG4gICAgbGV0IGtleSA9IGAke2FjY291bnR9LyR7YnVja2V0TmFtZX1gO1xuICAgIGxldCB3YXNMb2FkZWQgPSBidWNrZXRzLmhhcyhrZXkpO1xuICAgIGxldCBsb2FkZWQ6IEJ1Y2tldFN0YXRlIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICAgIGxvYWRlZCA9IGF3YWl0IGdldExvYWRlZEJ1Y2tldChhY2NvdW50LCBidWNrZXROYW1lKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBgQnVja2V0ICR7a2V5fSBmYWlsZWQgdG8gbG9hZCBvbiB0aGlzIHNlcnZlcjogJHtTdHJpbmcoKGUgYXMgRXJyb3IpLnN0YWNrID8/IGUpLnNsaWNlKDAsIDUwMCl9YDtcbiAgICB9XG4gICAgaWYgKCFsb2FkZWQpIHtcbiAgICAgICAgcmV0dXJuIGBCdWNrZXQgJHtrZXl9IGRvZXMgbm90IGV4aXN0IG9uIHRoaXMgc2VydmVyIChubyByb3V0aW5nIGZpbGUgaW4gJHtnZXRCdWNrZXRGb2xkZXIoYWNjb3VudCwgYnVja2V0TmFtZSl9KWA7XG4gICAgfVxuICAgIC8vIFdhaXQgZm9yIHRoZSBpbmRleGVzIHRvIGxvYWQsIHNvIHRoZSB0b3RhbHMgd2UgcmV0dXJuIGFyZSB0aGUgcmVhbCBvbmVzIHJhdGhlciB0aGFuIHplcm9lcyBmcm9tIHN0b3JlcyB0aGF0IGhhdmUgbm90IHJlYWQgdGhlaXIgaW5kZXggeWV0LiBUaGUgc291cmNlIHNjYW5zIGtlZXAgcnVubmluZyBpbiB0aGUgYmFja2dyb3VuZC5cbiAgICBmb3IgKGxldCBzIG9mIGxvYWRlZC5zdG9yZXMpIHtcbiAgICAgICAgaWYgKHMuc3RvcmUgaW5zdGFuY2VvZiBCbG9iU3RvcmUpIHtcbiAgICAgICAgICAgIGF3YWl0IHMuc3RvcmUuaW5pdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghd2FzTG9hZGVkKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBBY3RpdmF0ZWQgYnVja2V0ICR7a2V5fSBvbiByZXF1ZXN0OiBpdCBpcyBub3cgbG9hZGVkIGFuZCBzeW5jaHJvbml6aW5nYCk7XG4gICAgfVxuICAgIHJldHVybiB0b0FjdGl2ZUJ1Y2tldEluZm8obG9hZGVkKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RBY2NvdW50QnVja2V0cyhhY2NvdW50OiBzdHJpbmcpOiBQcm9taXNlPFNlcnZlckJ1Y2tldEluZm9bXT4ge1xuICAgIGxldCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IHRpbWluZ3MgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGFzeW5jIGZ1bmN0aW9uIHRpbWVkPFQ+KG5hbWU6IHN0cmluZywgcnVuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGxldCBiZWdhbiA9IERhdGUubm93KCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcnVuKCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aW1pbmdzLnNldChuYW1lLCAodGltaW5ncy5nZXQobmFtZSkgfHwgMCkgKyAoRGF0ZS5ub3coKSAtIGJlZ2FuKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IGFjY291bnRGb2xkZXIgPSBwYXRoLmpvaW4oZ2V0U3RvcmFnZVNlcnZlckNvbmZpZygpLmZvbGRlciwgXCJidWNrZXRzMlwiLCBhY2NvdW50KTtcbiAgICBsZXQgbmFtZXM6IHN0cmluZ1tdO1xuICAgIHRyeSB7XG4gICAgICAgIG5hbWVzID0gYXdhaXQgdGltZWQoXCJyZWFkZGlyXCIsICgpID0+IGZzLnByb21pc2VzLnJlYWRkaXIoYWNjb3VudEZvbGRlcikpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIFBlci1yb3V0ZSBmb2xkZXJzIChidWNrZXROYW1lLXJvdXRlLTxzdGFydD4tPGVuZD4pIGJlbG9uZyB0byB0aGUgc2FtZSBidWNrZXQgYXMgdGhlIHBsYWluIGZvbGRlciAtIGNvbGxhcHNlIHRoZW0gc28gb25lIGJ1Y2tldCBsaXN0cyBvbmNlXG4gICAgbmFtZXMgPSBbLi4ubmV3IFNldChuYW1lcy5tYXAoeCA9PiB4LnJlcGxhY2UoLy1yb3V0ZS1bXFxkLl0rLVtcXGQuXSskLywgXCJcIikpKV07XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKG5hbWVzLm1hcChhc3luYyBidWNrZXROYW1lID0+IHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBgJHthY2NvdW50fS8ke2J1Y2tldE5hbWV9YDtcbiAgICAgICAgICAgIGxldCBmb2xkZXIgPSBnZXRCdWNrZXRGb2xkZXIoYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgICAgICAgICBsZXQgYmFzZTogU2VydmVyQnVja2V0SW5mbyA9IHsgYnVja2V0TmFtZSwgYWN0aXZlOiBmYWxzZSwgZm9sZGVyIH07XG4gICAgICAgICAgICBiYXNlLmRpc2sgPSBhd2FpdCB0aW1lZChcInN0YXRmc1wiLCAoKSA9PiBnZXREaXNrSW5mbyhmb2xkZXIpKS5jYXRjaCgoZTogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBiYXNlLmRpc2tFcnJvciA9IFN0cmluZyhlLnN0YWNrID8/IGUpLnNsaWNlKDAsIDUwMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYmFzZS53cml0ZVN0YXRzID0gZ2V0QnVja2V0V3JpdGVTdGF0cyhrZXkpO1xuICAgICAgICAgICAgY29uc3QgbG9hZGVkUHJvbWlzZSA9IGJ1Y2tldHMuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAobG9hZGVkUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBsb2FkZWQgPSBhd2FpdCB0aW1lZChcImF3YWl0TG9hZGVkXCIsICgpID0+IGxvYWRlZFByb21pc2UpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5iYXNlLCBhY3RpdmU6IHRydWUsIGNvbmZpZzogZ2V0QnVja2V0Q29uZmlnKGxvYWRlZCkgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgYWN0aXZlOiB0cnVlLCBlcnJvcjogU3RyaW5nKChlIGFzIEVycm9yKS5zdGFjayA/PyBlKS5zbGljZSgwLCA1MDApIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGltZWQoXCJyZWFkUm91dGluZ0ZpbGVcIiwgKCkgPT4gcmVhZFJvdXRpbmdGaWxlKGZvbGRlcikpO1xuICAgICAgICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5iYXNlLCBlcnJvcjogYE5vIHJvdXRpbmcgZmlsZSAoJHtST1VUSU5HX0ZJTEV9KWAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlZCA9IGF3YWl0IHRpbWVkKFwicGFyc2VSb3V0aW5nXCIsIGFzeW5jICgpID0+IHBhcnNlUm91dGluZ0RhdGEoZGF0YSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmJhc2UsIGNvbmZpZzogeyByZW1vdGVDb25maWc6IHBhcnNlZCB9IH07XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgZXJyb3I6IFN0cmluZygoZSBhcyBFcnJvcikuc3RhY2sgPz8gZSkuc2xpY2UoMCwgNTAwKSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgLy8gVGhlIHBhcnRzIHJ1biBjb25jdXJyZW50bHksIHNvIHRoZXNlIGFyZSBzdW1tZWQgd2FsbCB0aW1lcyBwZXIgcGFydCwgbm90IGEgYnJlYWtkb3duIG9mIHRoZSB0b3RhbFxuICAgICAgICBsZXQgcGFydHMgPSBbLi4udGltaW5nc10ubWFwKChbbmFtZSwgbXNdKSA9PiBgJHtuYW1lfSAke21zfW1zYCkuam9pbihcIiwgXCIpO1xuICAgICAgICBjb25zb2xlLmxvZyhgbGlzdEFjY291bnRCdWNrZXRzKCR7YWNjb3VudH0pIHRvb2sgJHtEYXRlLm5vdygpIC0gc3RhcnR9bXMgZm9yICR7bmFtZXMubGVuZ3RofSBidWNrZXRzOiAke3BhcnRzfWApO1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgQnVja2V0V3JpdGVTdGF0cyA9IHtcbiAgICAvKiogRXZlcnkgc2V0IGNhbGwgdGhlIGJ1Y2tldCBhY2NlcHRlZCAqL1xuICAgIG9yaWdpbmFsV3JpdGVzOiBudW1iZXI7XG4gICAgb3JpZ2luYWxCeXRlczogbnVtYmVyO1xuICAgIC8qKiBXaGF0IGFjdHVhbGx5IHJlYWNoZWQgdGhlIHNvdXJjZXMuIEZhc3Qgd3JpdGVzIGNvYWxlc2NlIHJlcGVhdGVkIHdyaXRlcyB0byB0aGUgc2FtZSBrZXksIHNvIHRoaXMgaXMgbG93ZXIgdGhhbiB0aGUgb3JpZ2luYWwgY291bnRzIChhbmQgaXMgd2hhdCB0aGUgZGlzayBhY3R1YWxseSBkaWQpLiAqL1xuICAgIGZsdXNoZWRXcml0ZXM6IG51bWJlcjtcbiAgICBmbHVzaGVkQnl0ZXM6IG51bWJlcjtcbn07XG5mdW5jdGlvbiBlbXB0eVdyaXRlU3RhdHMoKTogQnVja2V0V3JpdGVTdGF0cyB7XG4gICAgcmV0dXJuIHsgb3JpZ2luYWxXcml0ZXM6IDAsIG9yaWdpbmFsQnl0ZXM6IDAsIGZsdXNoZWRXcml0ZXM6IDAsIGZsdXNoZWRCeXRlczogMCB9O1xufVxuXG4vLyBJbiBtZW1vcnkgb25seTogdG90YWxzIHNpbmNlIHRoaXMgcHJvY2VzcyBzdGFydGVkIChvciB0aGUgbGFzdCBjbGVhcldyaXRlU3RhdHMpLiBQZXJzaXN0aW5nIHRoZW0gdG8gZGlzayB3YXMgbW9yZSBtYWNoaW5lcnkgdGhhbiB0aGUgbnVtYmVycyB3ZXJlIHdvcnRoLlxuY29uc3Qgd3JpdGVTdGF0cyA9IG5ldyBNYXA8c3RyaW5nLCBCdWNrZXRXcml0ZVN0YXRzPigpO1xuXG5mdW5jdGlvbiBjb3VudEJ1Y2tldFdyaXRlKGtleTogc3RyaW5nLCBraW5kOiBcIm9yaWdpbmFsXCIgfCBcImZsdXNoZWRcIiwgYnl0ZXM6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBzdGF0cyA9IHdyaXRlU3RhdHMuZ2V0KGtleSk7XG4gICAgaWYgKCFzdGF0cykge1xuICAgICAgICBzdGF0cyA9IGVtcHR5V3JpdGVTdGF0cygpO1xuICAgICAgICB3cml0ZVN0YXRzLnNldChrZXksIHN0YXRzKTtcbiAgICB9XG4gICAgaWYgKGtpbmQgPT09IFwib3JpZ2luYWxcIikge1xuICAgICAgICBzdGF0cy5vcmlnaW5hbFdyaXRlcysrO1xuICAgICAgICBzdGF0cy5vcmlnaW5hbEJ5dGVzICs9IGJ5dGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRzLmZsdXNoZWRXcml0ZXMrKztcbiAgICAgICAgc3RhdHMuZmx1c2hlZEJ5dGVzICs9IGJ5dGVzO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0QnVja2V0V3JpdGVTdGF0cyhrZXk6IHN0cmluZyk6IEJ1Y2tldFdyaXRlU3RhdHMge1xuICAgIHJldHVybiB3cml0ZVN0YXRzLmdldChrZXkpIHx8IGVtcHR5V3JpdGVTdGF0cygpO1xufVxuXG4vKiogWmVyb2VzIHRoZSB3cml0ZSBzdGF0aXN0aWNzIG9mIGV2ZXJ5IGJ1Y2tldCBpbiB0aGUgYWNjb3VudC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckFjY291bnRXcml0ZVN0YXRzKGFjY291bnQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IHByZWZpeCA9IGAke2FjY291bnR9L2A7XG4gICAgbGV0IGNsZWFyZWQgPSAwO1xuICAgIGZvciAobGV0IGtleSBvZiBbLi4ud3JpdGVTdGF0cy5rZXlzKCldKSB7XG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgocHJlZml4KSkgY29udGludWU7XG4gICAgICAgIHdyaXRlU3RhdHMuZGVsZXRlKGtleSk7XG4gICAgICAgIGNsZWFyZWQrKztcbiAgICB9XG4gICAgY29uc29sZS5sb2coYENsZWFyZWQgdGhlIHdyaXRlIHN0YXRpc3RpY3Mgb2YgJHtjbGVhcmVkfSBidWNrZXRzIGluIGFjY291bnQgJHthY2NvdW50fWApO1xuICAgIHJldHVybiBjbGVhcmVkO1xufVxuXG5jb25zdCBMQVJHRV9GSUxFX1BBUlRfU0laRSA9IDggKiAxMDI0ICogMTAyNDtcblxuLy8gV3JhcHMgYSBsb2NhbGx5IGhvc3RlZCBidWNrZXQgaW4gdGhlIElBcmNoaXZlcyBpbnRlcmZhY2UsIHNvIGNvZGUgd3JpdHRlbiBhZ2FpbnN0IElBcmNoaXZlcyAodGhlIGNoYWluLCBzeW5jIHNvdXJjZXMsIGhvbGRlciByZWFkcykgdGFsa3MgdG8gaXQgZGlyZWN0bHkgaW5zdGVhZCBvZiBiZWNvbWluZyBhIG5ldHdvcmsgY2xpZW50IHRvIG91cnNlbHZlcy5cbmNsYXNzIEJ1Y2tldElBcmNoaXZlc1dyYXBwZXIgaW1wbGVtZW50cyBJQXJjaGl2ZXMge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYWNjb3VudDogc3RyaW5nLCBwcml2YXRlIGJ1Y2tldE5hbWU6IHN0cmluZywgcHJpdmF0ZSBzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZykgeyB9XG5cbiAgICBwcml2YXRlIGZpbmRTdG9yZSgpOiBQcm9taXNlPExvYWRlZFN0b3JlPiB7XG4gICAgICAgIHJldHVybiBmaW5kQnVja2V0U3RvcmUodGhpcy5hY2NvdW50LCB0aGlzLmJ1Y2tldE5hbWUsIHRoaXMuc291cmNlQ29uZmlnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGVidWdOYW1lKCkge1xuICAgICAgICByZXR1cm4gYGxvY2FsQnVja2V0IGFjY291bnQgJHt0aGlzLmFjY291bnR9IGJ1Y2tldCAke3RoaXMuYnVja2V0TmFtZX0gcm91dGUgJHtKU09OLnN0cmluZ2lmeSh0aGlzLnNvdXJjZUNvbmZpZy5yb3V0ZSB8fCBGVUxMX1JPVVRFKX1gO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0KGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IEdldENvbmZpZyk6IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldDIoZmlsZU5hbWUsIGNvbmZpZyk7XG4gICAgICAgIHJldHVybiByZXN1bHQgJiYgcmVzdWx0LmRhdGEgfHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0MihmaWxlTmFtZTogc3RyaW5nLCBjb25maWc/OiBHZXRDb25maWcpOiBQcm9taXNlPHsgZGF0YTogQnVmZmVyOyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgaWYgKGZpbGVOYW1lID09PSBST1VUSU5HX0ZJTEUpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBnZXRSb3V0aW5nRmlsZVJlc3VsdCh0aGlzLmFjY291bnQsIHRoaXMuYnVja2V0TmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZz8uaW50ZXJuYWwpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCByZWFkQnVja2V0SW50ZXJuYWwodGhpcy5hY2NvdW50LCB0aGlzLmJ1Y2tldE5hbWUsIHsgcGF0aDogZmlsZU5hbWUsIHJhbmdlOiBjb25maWcucmFuZ2UsIGluY2x1ZGVUb21ic3RvbmVzOiBjb25maWcuaW5jbHVkZVRvbWJzdG9uZXMgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IChhd2FpdCB0aGlzLmZpbmRTdG9yZSgpKS5zdG9yZS5nZXQyKHsgcGF0aDogZmlsZU5hbWUsIC4uLmNvbmZpZyB9KTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIHNldChmaWxlTmFtZTogc3RyaW5nLCBkYXRhOiBCdWZmZXIsIGNvbmZpZz86IFNldENvbmZpZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGFzc2VydFdyaXRlc0FsbG93ZWQoKTtcbiAgICAgICAgaWYgKGZpbGVOYW1lID09PSBST1VUSU5HX0ZJTEUpIHtcbiAgICAgICAgICAgIGF3YWl0IHF1ZXVlUm91dGluZ0NvbmZpZ1dyaXRlKHRoaXMuYWNjb3VudCwgdGhpcy5idWNrZXROYW1lLCBkYXRhLCBjb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuIGZpbGVOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IChhd2FpdCB0aGlzLmZpbmRTdG9yZSgpKS5zdG9yZS5zZXQoeyAuLi5jb25maWcsIHBhdGg6IGZpbGVOYW1lLCBkYXRhIH0pO1xuICAgICAgICByZXR1cm4gZmlsZU5hbWU7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBkZWwoZmlsZU5hbWU6IHN0cmluZywgY29uZmlnPzogRGVsQ29uZmlnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGFzc2VydFdyaXRlc0FsbG93ZWQoKTtcbiAgICAgICAgYXdhaXQgKGF3YWl0IHRoaXMuZmluZFN0b3JlKCkpLnN0b3JlLmRlbCh7IHBhdGg6IGZpbGVOYW1lLCAuLi5jb25maWcgfSk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBzZXRMYXJnZUZpbGUoY29uZmlnOiB7IHBhdGg6IHN0cmluZzsgbGFzdE1vZGlmaWVkPzogbnVtYmVyOyBnZXROZXh0RGF0YSgpOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4gfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhc3NlcnRXcml0ZXNBbGxvd2VkKCk7XG4gICAgICAgIGxldCBzdG9yZSA9IChhd2FpdCB0aGlzLmZpbmRTdG9yZSgpKS5zdG9yZTtcbiAgICAgICAgbGV0IGlkID0gYXdhaXQgc3RvcmUuc3RhcnRMYXJnZVVwbG9hZCh7IHBhdGg6IGNvbmZpZy5wYXRoLCBsYXN0TW9kaWZpZWQ6IGNvbmZpZy5sYXN0TW9kaWZpZWQgfSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gYXdhaXQgY29uZmlnLmdldE5leHREYXRhKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhKSBicmVhaztcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBkYXRhLmxlbmd0aDsgb2Zmc2V0ICs9IExBUkdFX0ZJTEVfUEFSVF9TSVpFKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHN0b3JlLmFwcGVuZExhcmdlVXBsb2FkKHsgaWQsIGRhdGE6IGRhdGEuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBMQVJHRV9GSUxFX1BBUlRfU0laRSkgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgc3RvcmUuZmluaXNoTGFyZ2VVcGxvYWQoeyBpZCwgcGF0aDogY29uZmlnLnBhdGgsIGxhc3RNb2RpZmllZDogY29uZmlnLmxhc3RNb2RpZmllZCB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgc3RvcmUuY2FuY2VsTGFyZ2VVcGxvYWQoeyBpZCB9KTtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldEluZm8oZmlsZU5hbWU6IHN0cmluZywgY29uZmlnPzogR2V0SW5mb0NvbmZpZyk6IFByb21pc2U8eyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgaWYgKGZpbGVOYW1lID09PSBST1VUSU5HX0ZJTEUpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBnZXRSb3V0aW5nRmlsZVJlc3VsdCh0aGlzLmFjY291bnQsIHRoaXMuYnVja2V0TmFtZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ICYmIHsgd3JpdGVUaW1lOiByZXN1bHQud3JpdGVUaW1lLCBzaXplOiByZXN1bHQuc2l6ZSB9IHx8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgKGF3YWl0IHRoaXMuZmluZFN0b3JlKCkpLnN0b3JlLmdldEluZm8oeyBwYXRoOiBmaWxlTmFtZSwgLi4uY29uZmlnIH0pO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZmluZEluZm8ocHJlZml4OiBzdHJpbmcsIGNvbmZpZz86IEZpbmRDb25maWcpOiBQcm9taXNlPEFyY2hpdmVGaWxlSW5mb1tdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCAoYXdhaXQgdGhpcy5maW5kU3RvcmUoKSkuc3RvcmUuZmluZEluZm8oeyBwcmVmaXgsIC4uLmNvbmZpZyB9KTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGZpbmQocHJlZml4OiBzdHJpbmcsIGNvbmZpZz86IEZpbmRDb25maWcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5maW5kSW5mbyhwcmVmaXgsIGNvbmZpZykpLm1hcCh4ID0+IHgucGF0aCk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXRVUkwoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGxldCB7IGRvbWFpbiwgcG9ydCB9ID0gZ2V0U3RvcmFnZVNlcnZlckNvbmZpZygpO1xuICAgICAgICByZXR1cm4gYnVpbGRGaWxlVXJsKGBodHRwczovLyR7ZG9tYWlufToke3BvcnR9L2ZpbGUvJHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5hY2NvdW50KX0vJHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5idWNrZXROYW1lKX1gLCBmaWxlUGF0aCk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXRDb25maWcoKTogUHJvbWlzZTxBcmNoaXZlc0NvbmZpZz4ge1xuICAgICAgICByZXR1cm4gZ2V0QnVja2V0Q29uZmlnKGF3YWl0IHJlcXVpcmVCdWNrZXQodGhpcy5hY2NvdW50LCB0aGlzLmJ1Y2tldE5hbWUpKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGhhc1dyaXRlQWNjZXNzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldENoYW5nZXNBZnRlcjIoY29uZmlnOiBDaGFuZ2VzQWZ0ZXJDb25maWcpOiBQcm9taXNlPEFyY2hpdmVGaWxlSW5mb1tdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCAoYXdhaXQgdGhpcy5maW5kU3RvcmUoKSkuc3RvcmUuZ2V0Q2hhbmdlc0FmdGVyMihjb25maWcpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0U3luY1N0YXR1cygpOiBQcm9taXNlPEFyY2hpdmVzU3luY1N0YXR1cz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgYnVja2V0U3luY1N0YXR1cyhhd2FpdCByZXF1aXJlQnVja2V0KHRoaXMuYWNjb3VudCwgdGhpcy5idWNrZXROYW1lKSk7XG4gICAgfVxufVxuXG5jb25zdCBsb2NhbEFyY2hpdmVzID0gbmV3IE1hcDxzdHJpbmcsIElBcmNoaXZlcz4oKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbEFyY2hpdmVzKGFjY291bnQ6IHN0cmluZywgYnVja2V0TmFtZTogc3RyaW5nLCBzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZyk6IElBcmNoaXZlcyB7XG4gICAgbGV0IGtleSA9IGAke2FjY291bnR9LyR7YnVja2V0TmFtZX18JHtzdGFibGVTdHJpbmdpZnkoc291cmNlQ29uZmlnKX1gO1xuICAgIGxldCBleGlzdGluZyA9IGxvY2FsQXJjaGl2ZXMuZ2V0KGtleSk7XG4gICAgaWYgKGV4aXN0aW5nKSByZXR1cm4gZXhpc3Rpbmc7XG4gICAgbGV0IGFyY2hpdmVzID0gbmV3IEJ1Y2tldElBcmNoaXZlc1dyYXBwZXIoYWNjb3VudCwgYnVja2V0TmFtZSwgc291cmNlQ29uZmlnKTtcbiAgICBsb2NhbEFyY2hpdmVzLnNldChrZXksIGFyY2hpdmVzKTtcbiAgICByZXR1cm4gYXJjaGl2ZXM7XG59XG4iXX0=
|
|
948
|
+
/* _JS_SOURCE_HASH = "b5131c1dd6ca8eb364527efce131d6a7ad4954e088f05f1ce66ee810a031603d"; */
|
|
@@ -354,6 +354,7 @@ function buildStore(account: string, bucketName: string, planStore: StorePlanSto
|
|
|
354
354
|
route: spec.route,
|
|
355
355
|
noFullSync: spec.noFullSync,
|
|
356
356
|
intermediate: spec.sourceConfig?.intermediate,
|
|
357
|
+
sourceConfig: spec.sourceConfig,
|
|
357
358
|
identity: sourceIdentity(spec.sourceConfig),
|
|
358
359
|
}));
|
|
359
360
|
return new BlobStore(folder, sources, {
|
|
@@ -455,6 +456,7 @@ async function checkRoutingChanged(account: string, bucketName: string, config?:
|
|
|
455
456
|
route: spec.route,
|
|
456
457
|
noFullSync: spec.noFullSync,
|
|
457
458
|
intermediate: sourceConfig.intermediate,
|
|
459
|
+
sourceConfig,
|
|
458
460
|
create: () => createApiArchives(sourceConfig),
|
|
459
461
|
};
|
|
460
462
|
}), planStore.entries);
|