velocious 1.0.671 → 1.0.673
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/README.md +2 -2
- package/build/database/drivers/base.js +52 -18
- package/build/database/drivers/mssql/index.js +48 -3
- package/build/database/pool/async-tracked-multi-connection.js +36 -0
- package/build/src/database/drivers/base.d.ts +23 -0
- package/build/src/database/drivers/base.d.ts.map +1 -1
- package/build/src/database/drivers/base.js +51 -21
- package/build/src/database/drivers/mssql/index.d.ts +22 -0
- package/build/src/database/drivers/mssql/index.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/index.js +45 -4
- package/build/src/database/pool/async-tracked-multi-connection.d.ts +15 -0
- package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
- package/build/src/database/pool/async-tracked-multi-connection.js +32 -1
- package/build/src/sync/local-mutation-log.d.ts +12 -0
- package/build/src/sync/local-mutation-log.d.ts.map +1 -1
- package/build/src/sync/local-mutation-log.js +45 -1
- package/build/src/sync/sync-api-client.d.ts +6 -1
- package/build/src/sync/sync-api-client.d.ts.map +1 -1
- package/build/src/sync/sync-api-client.js +7 -2
- package/build/src/sync/sync-client.d.ts +60 -0
- package/build/src/sync/sync-client.d.ts.map +1 -1
- package/build/src/sync/sync-client.js +172 -3
- package/build/src/sync/sync-coordinator-types.d.ts +190 -0
- package/build/src/sync/sync-coordinator-types.d.ts.map +1 -0
- package/build/src/sync/sync-coordinator-types.js +65 -0
- package/build/src/sync/sync-coordinator.d.ts +246 -0
- package/build/src/sync/sync-coordinator.d.ts.map +1 -0
- package/build/src/sync/sync-coordinator.js +683 -0
- package/build/src/sync/sync-envelope-replay-service.d.ts +90 -2
- package/build/src/sync/sync-envelope-replay-service.d.ts.map +1 -1
- package/build/src/sync/sync-envelope-replay-service.js +101 -9
- package/build/src/sync/sync-realtime-bridge.d.ts.map +1 -1
- package/build/src/sync/sync-realtime-bridge.js +8 -1
- package/build/sync/local-mutation-log.js +53 -0
- package/build/sync/sync-api-client.js +7 -1
- package/build/sync/sync-client.js +190 -2
- package/build/sync/sync-coordinator-types.js +73 -0
- package/build/sync/sync-coordinator.js +738 -0
- package/build/sync/sync-envelope-replay-service.js +107 -8
- package/build/sync/sync-realtime-bridge.js +9 -0
- package/package.json +1 -1
- package/src/database/drivers/base.js +52 -18
- package/src/database/drivers/mssql/index.js +48 -3
- package/src/database/pool/async-tracked-multi-connection.js +36 -0
- package/src/sync/local-mutation-log.js +53 -0
- package/src/sync/sync-api-client.js +7 -1
- package/src/sync/sync-client.js +190 -2
- package/src/sync/sync-coordinator-types.js +73 -0
- package/src/sync/sync-coordinator.js +738 -0
- package/src/sync/sync-envelope-replay-service.js +107 -8
- package/src/sync/sync-realtime-bridge.js +9 -0
|
@@ -194,6 +194,18 @@ export default class LocalMutationLog {
|
|
|
194
194
|
id: string;
|
|
195
195
|
mutation: import("./device-identity.js").SyncMutation;
|
|
196
196
|
}): Promise<LocalMutationLogRecord>;
|
|
197
|
+
/**
|
|
198
|
+
* Resolves a durable conflict explicitly. Keeping the server acknowledges the
|
|
199
|
+
* preserved local intent without replaying it; retrying local intent rebases
|
|
200
|
+
* it onto the conflict's authoritative serverVersion and returns it to the
|
|
201
|
+
* pending queue. The prior conflict result stays attached as audit metadata.
|
|
202
|
+
* @param {{id: string, resolution: "keep-server" | "retry-local"}} args - Resolution.
|
|
203
|
+
* @returns {Promise<LocalMutationLogRecord>} Resolved record.
|
|
204
|
+
*/
|
|
205
|
+
resolveConflict({ id, resolution }: {
|
|
206
|
+
id: string;
|
|
207
|
+
resolution: "keep-server" | "retry-local";
|
|
208
|
+
}): Promise<LocalMutationLogRecord>;
|
|
197
209
|
/**
|
|
198
210
|
* Prunes terminal records that are no longer needed for replay dependencies.
|
|
199
211
|
* @param {object} [args] - Compaction options.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-mutation-log.d.ts","sourceRoot":"","sources":["../../../src/sync/local-mutation-log.js"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"local-mutation-log.d.ts","sourceRoot":"","sources":["../../../src/sync/local-mutation-log.js"],"names":[],"mappings":"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"}
|
|
@@ -175,6 +175,37 @@ export default class LocalMutationLog {
|
|
|
175
175
|
return restoreSyncResultTypes(cloneRecord(record));
|
|
176
176
|
});
|
|
177
177
|
}
|
|
178
|
+
/**
|
|
179
|
+
* Resolves a durable conflict explicitly. Keeping the server acknowledges the
|
|
180
|
+
* preserved local intent without replaying it; retrying local intent rebases
|
|
181
|
+
* it onto the conflict's authoritative serverVersion and returns it to the
|
|
182
|
+
* pending queue. The prior conflict result stays attached as audit metadata.
|
|
183
|
+
* @param {{id: string, resolution: "keep-server" | "retry-local"}} args - Resolution.
|
|
184
|
+
* @returns {Promise<LocalMutationLogRecord>} Resolved record.
|
|
185
|
+
*/
|
|
186
|
+
async resolveConflict({ id, resolution }) {
|
|
187
|
+
if (!["keep-server", "retry-local"].includes(resolution))
|
|
188
|
+
throw new Error(`Unknown local mutation conflict resolution '${resolution}'`);
|
|
189
|
+
return await withStorageKeyLock(this.storageKey, async () => {
|
|
190
|
+
const rawRecord = await this.storage.record(this.storageKey, id);
|
|
191
|
+
if (!rawRecord)
|
|
192
|
+
throw new Error(`No local mutation log record '${id}'`);
|
|
193
|
+
const record = normalizeRecord(rawRecord);
|
|
194
|
+
if (record.status !== "conflict")
|
|
195
|
+
throw new Error(`Cannot resolve ${record.status} local mutation '${id}' as a conflict`);
|
|
196
|
+
if (resolution === "keep-server") {
|
|
197
|
+
record.status = "synced";
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
const serverVersion = conflictServerVersion(record);
|
|
201
|
+
record.mutation = { ...record.mutation, baseVersion: serverVersion };
|
|
202
|
+
record.status = "pending";
|
|
203
|
+
}
|
|
204
|
+
record.updatedAt = this.currentTimestamp();
|
|
205
|
+
await this.storage.updateRecord(this.storageKey, cloneRecord(record));
|
|
206
|
+
return restoreSyncResultTypes(cloneRecord(record));
|
|
207
|
+
});
|
|
208
|
+
}
|
|
178
209
|
/**
|
|
179
210
|
* Prunes terminal records that are no longer needed for replay dependencies.
|
|
180
211
|
* @param {object} [args] - Compaction options.
|
|
@@ -237,6 +268,19 @@ function validStorage(storage) {
|
|
|
237
268
|
&& typeof storageObject.records === "function"
|
|
238
269
|
&& typeof storageObject.updateRecord === "function";
|
|
239
270
|
}
|
|
271
|
+
/**
|
|
272
|
+
* Reads the authoritative version from a conflicted mutation.
|
|
273
|
+
* @param {LocalMutationLogRecord} record - Conflicted record.
|
|
274
|
+
* @returns {string | number | null} - Authoritative version.
|
|
275
|
+
*/
|
|
276
|
+
function conflictServerVersion(record) {
|
|
277
|
+
const conflict = record.syncResult?.conflict;
|
|
278
|
+
if (!conflict || conflict instanceof Date || typeof conflict !== "object" || Array.isArray(conflict) || !Object.hasOwn(conflict, "serverVersion")) {
|
|
279
|
+
throw new Error(`Cannot retry local mutation '${record.id}' without a conflict serverVersion`);
|
|
280
|
+
}
|
|
281
|
+
const conflictMetadata = /** @type {Record<string, unknown>} */ (conflict);
|
|
282
|
+
return cloneBaseVersion(conflictMetadata.serverVersion);
|
|
283
|
+
}
|
|
240
284
|
/**
|
|
241
285
|
* Sorts records by newest update/sequence first.
|
|
242
286
|
* @param {LocalMutationLogRecord} left - Left record.
|
|
@@ -471,4 +515,4 @@ function randomRecordId() {
|
|
|
471
515
|
return cryptoProvider.randomUUID();
|
|
472
516
|
return `local-mutation-${Date.now()}-${Math.random().toString(16).slice(2)}`;
|
|
473
517
|
}
|
|
474
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbXV0YXRpb24tbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N5bmMvbG9jYWwtbXV0YXRpb24tbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0g7Ozs7O0dBS0c7QUFDSDs7O0tBR0s7QUFDTDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxZQUFZO0FBRVosT0FBTyxFQUFDLHNDQUFzQyxFQUFFLG9DQUFvQyxFQUFDLE1BQU0sK0NBQStDLENBQUE7QUFDMUksT0FBTyxtQkFBbUIsTUFBTSxrQkFBa0IsQ0FBQTtBQUVsRCxNQUFNLG1CQUFtQixHQUFHLGlDQUFpQyxDQUFBO0FBQzdELE1BQU0scUJBQXFCLEdBQUcsb0NBQW9DLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFBO0FBQ25ILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQTtBQUN2RCxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7QUFDMUYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO0FBQ3pELDRDQUE0QztBQUM1QyxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7QUFFbkMsbUZBQW1GO0FBQ25GLE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0JBQWdCO0lBQ25DOzs7Ozs7O09BT0c7SUFDSCxZQUFZLEVBQUMsV0FBVyxHQUFHLGNBQWMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxHQUFHLG1CQUFtQixFQUFD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QUMsQ0FBQTtBQUNuRixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxjQUFjO0lBQ3JCLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUE7SUFFeEMsSUFBSSxjQUFjLElBQUksT0FBTyxjQUFjLENBQUMsVUFBVSxLQUFLLFVBQVU7UUFBRSxPQUFPLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtJQUV6RyxPQUFPLGtCQUFrQixJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtBQUM5RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkIHF1ZXJ5IG9wdGlvbnMuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2NhbE11dGF0aW9uTG9nUmVjb3Jkc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7TG9jYWxNdXRhdGlvblN0YXR1c1tdfSBbc3RhdHVzZXNdIC0gT3B0aW9uYWwgc3RhdHVzIGZpbHRlci5cbiAqL1xuLyoqXG4gKiBMb2NhbCBtdXRhdGlvbiBsb2cgcm93LW9yaWVudGVkIHN0b3JhZ2UgYWRhcHRlci5cbiAqXG4gKiBJbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHN0b3JlIGVhY2ggbXV0YXRpb24gbG9nIHJlY29yZCBhcyBpdHMgb3duIHJvdy9lbnRyeS5cbiAqIE5hdGl2ZSBhcHBzIHNob3VsZCBiYWNrIHRoaXMgd2l0aCBTUUxpdGUgYW5kIGluZGV4ZXMgb24gc3RvcmFnZSBrZXksIHN0YXR1cyxcbiAqIGFuZCBzZXF1ZW5jZS4gQXZvaWQgc3RvcmluZyB0aGUgd2hvbGUgbG9nIGFzIG9uZSBKU09OIGJsb2IuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2NhbE11dGF0aW9uTG9nU3RvcmFnZVxuICogQHByb3BlcnR5IHsoc3RvcmFnZUtleTogc3RyaW5nLCByZWNvcmQ6IExvY2FsTXV0YXRpb25Mb2dSZWNvcmQpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkfSBhcHBlbmRSZWNvcmQgLSBBcHBlbmRzIG9uZSBsb2cgcmVjb3JkLlxuICogQHByb3BlcnR5IHsoc3RvcmFnZUtleTogc3RyaW5nLCBpZHM6IHN0cmluZ1tdKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gZGVsZXRlUmVjb3JkcyAtIERlbGV0ZXMgbG9nIHJlY29yZHMgYnkgaWQuXG4gKiBAcHJvcGVydHkgeyhzdG9yYWdlS2V5OiBzdHJpbmcpID0+IFByb21pc2U8bnVtYmVyPiB8IG51bWJlcn0gbmV4dFNlcXVlbmNlIC0gUmV0dXJucyB0aGUgbmV4dCBsb2NhbCBzZXF1ZW5jZSBudW1iZXIuXG4gKiBAcHJvcGVydHkgeyhzdG9yYWdlS2V5OiBzdHJpbmcsIGlkOiBzdHJpbmcpID0+IFByb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZCB8IG51bGwgfCB1bmRlZmluZWQ+IHwgTG9jYWxNdXRhdGlvbkxvZ1JlY29yZCB8IG51bGwgfCB1bmRlZmluZWR9IHJlY29yZCAtIFJlYWRzIG9uZSBsb2cgcmVjb3JkIGJ5IGlkLlxuICogQHByb3BlcnR5IHsoc3RvcmFnZUtleTogc3RyaW5nLCBvcHRpb25zPzogTG9jYWxNdXRhdGlvbkxvZ1JlY29yZHNPcHRpb25zKSA9PiBQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmRbXT4gfCBMb2NhbE11dGF0aW9uTG9nUmVjb3JkW119IHJlY29yZHMgLSBSZWFkcyBsb2cgcmVjb3Jkcy5cbiAqIEBwcm9wZXJ0eSB7KHN0b3JhZ2VLZXk6IHN0cmluZywgcmVjb3JkOiBMb2NhbE11dGF0aW9uTG9nUmVjb3JkKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gdXBkYXRlUmVjb3JkIC0gUmVwbGFjZXMgb25lIGxvZyByZWNvcmQuXG4gKi9cbi8qKlxuICogTG9jYWwgc3luYyBtdXRhdGlvbiBkZXBlbmRlbmN5IG1ldGFkYXRhLlxuICogQHR5cGVkZWYge29iamVjdH0gTG9jYWxNdXRhdGlvbkRlcGVuZGVuY3lcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGllbnRNdXRhdGlvbklkIC0gQ2xpZW50IG11dGF0aW9uIGlkIHRoaXMgbXV0YXRpb24gZGVwZW5kcyBvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtb2RlbCAtIERlcGVuZGVudCBtb2RlbC9yZXNvdXJjZSBuYW1lLlxuICovXG4vKipcbiAqIExvY2FsIG11dGF0aW9uIGxvZyBzdGF0dXMuXG4gKiBAdHlwZWRlZiB7XCJwZW5kaW5nXCIgfCBcImFwcGxpZWQtbG9jYWxseVwiIHwgXCJwZWVyLWFwcGxpZWRcIiB8IFwiY29uZmxpY3RcIiB8IFwicmVqZWN0ZWRcIiB8IFwic3luY2VkXCJ9IExvY2FsTXV0YXRpb25TdGF0dXNcbiAqICovXG4vKipcbiAqIExvY2FsIG11dGF0aW9uIGxvZyByZWNvcmQuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2NhbE11dGF0aW9uTG9nUmVjb3JkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY3JlYXRlZEF0IC0gSVNPIHRpbWVzdGFtcCB3aGVuIHRoZSByZWNvcmQgd2FzIGNyZWF0ZWQgbG9jYWxseS5cbiAqIEBwcm9wZXJ0eSB7TG9jYWxNdXRhdGlvbkRlcGVuZGVuY3lbXX0gZGVwZW5kZW5jaWVzIC0gT3RoZXIgbG9jYWwgbXV0YXRpb25zIHRoYXQgbXVzdCByZXBsYXkgZmlyc3QuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWQgLSBMb2NhbCBsb2cgcmVjb3JkIGlkLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TeW5jTXV0YXRpb259IG11dGF0aW9uIC0gRGV2aWNlIG11dGF0aW9uIHBheWxvYWQuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlNpZ25lZFN5bmNNdXRhdGlvbn0gW3NpZ25lZE11dGF0aW9uXSAtIE9yaWdpbmFsIHNpZ25lZCBtdXRhdGlvbiBlbnZlbG9wZSwgcmV0YWluZWQgZm9yIHBlZXItZm9yd2FyZGVkIG11dGF0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzZXF1ZW5jZSAtIE1vbm90b25pYyBsb2NhbCBzZXF1ZW5jZS5cbiAqIEBwcm9wZXJ0eSB7TG9jYWxNdXRhdGlvblN0YXR1c30gc3RhdHVzIC0gTG9jYWwgcmVwbGF5L2FwcGx5IHN0YXR1cy5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL2Jhc2UuanNcIikuRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlPn0gW3N5bmNSZXN1bHRdIC0gQmFja2VuZCByZXBsYXkvcmVzdWx0IG1ldGFkYXRhLiBTdG9yZWQgYXMgdHJhbnNwb3J0IG1hcmtlcnMgc28gRGF0ZSAoYW5kIG90aGVyIHR5cGVkKSB2YWx1ZXMgc3Vydml2ZSB0aGUgZHVyYWJsZSBKU09OIHJvdW5kIHRyaXAgYW5kIGFyZSByZXN0b3JlZCBvbiByZWFkYmFjay5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cGRhdGVkQXQgLSBJU08gdGltZXN0YW1wIHdoZW4gdGhlIHJlY29yZCB3YXMgbGFzdCBjaGFuZ2VkLlxuICovXG4vLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtkZXNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZSwgc2VyaWFsaXplRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlfSBmcm9tIFwiLi4vZnJvbnRlbmQtbW9kZWxzL3RyYW5zcG9ydC1zZXJpYWxpemF0aW9uLmpzXCJcbmltcG9ydCBzdGFibGVKc29uU3RyaW5naWZ5IGZyb20gXCIuL3N0YWJsZS1qc29uLmpzXCJcblxuY29uc3QgREVGQVVMVF9TVE9SQUdFX0tFWSA9IFwidmVsb2Npb3VzLnN5bmMubG9jYWxNdXRhdGlvbkxvZ1wiXG5jb25zdCBQRU5ESU5HX1NUQVRVU19WQUxVRVMgPSAvKiogQHR5cGUge0xvY2FsTXV0YXRpb25TdGF0dXNbXX0gKi8gKFtcInBlbmRpbmdcIiwgXCJhcHBsaWVkLWxvY2FsbHlcIiwgXCJwZWVyLWFwcGxpZWRcIl0pXG5jb25zdCBQRU5ESU5HX1NUQVRVU0VTID0gbmV3IFNldChQRU5ESU5HX1NUQVRVU19WQUxVRVMpXG5jb25zdCBNVVRBVElPTl9TVEFUVVNFUyA9IG5ldyBTZXQoWy4uLlBFTkRJTkdfU1RBVFVTRVMsIFwiY29uZmxpY3RcIiwgXCJyZWplY3RlZFwiLCBcInN5bmNlZFwiXSlcbmNvbnN0IFRFUk1JTkFMX1NUQVRVU0VTID0gbmV3IFNldChbXCJyZWplY3RlZFwiLCBcInN5bmNlZFwiXSlcbi8qKiBAdHlwZSB7TWFwPHN0cmluZywgUHJvbWlzZTx1bmtub3duPj59ICovXG5jb25zdCBTVE9SQUdFX0tFWV9MT0NLUyA9IG5ldyBNYXAoKVxuXG4vKiogQ2xpZW50LXNpZGUgYXBwZW5kLW9ubHkgc3luYyBtdXRhdGlvbiBsb2cgd2l0aCBwbHVnZ2FibGUgcGVyc2lzdGVudCBzdG9yYWdlLiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9jYWxNdXRhdGlvbkxvZyB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbG9jYWwgbXV0YXRpb24gbG9nLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHsoKSA9PiBzdHJpbmd9IFthcmdzLmlkR2VuZXJhdG9yXSAtIFJlY29yZCBpZCBnZW5lcmF0b3IuXG4gICAqIEBwYXJhbSB7KCkgPT4gRGF0ZX0gW2FyZ3Mubm93XSAtIENsb2NrIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge0xvY2FsTXV0YXRpb25Mb2dTdG9yYWdlfSBhcmdzLnN0b3JhZ2UgLSBQZXJzaXN0ZW50IHN0b3JhZ2UgYWRhcHRlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnN0b3JhZ2VLZXldIC0gU3RvcmFnZSBrZXkuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7aWRHZW5lcmF0b3IgPSByYW5kb21SZWNvcmRJZCwgbm93ID0gKCkgPT4gbmV3IERhdGUoKSwgc3RvcmFnZSwgc3RvcmFnZUtleSA9IERFRkFVTFRfU1RPUkFHRV9LRVl9KSB7XG4gICAgaWYgKCF2YWxpZFN0b3JhZ2Uoc3RvcmFnZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvY2FsTXV0YXRpb25Mb2cgcmVxdWlyZXMgcm93IHN0b3JhZ2Ugd2l0aCBhcHBlbmRSZWNvcmQvZGVsZXRlUmVjb3Jkcy9uZXh0U2VxdWVuY2UvcmVjb3JkL3JlY29yZHMvdXBkYXRlUmVjb3JkXCIpXG4gICAgfVxuXG4gICAgdGhpcy5pZEdlbmVyYXRvciA9IGlkR2VuZXJhdG9yXG4gICAgdGhpcy5ub3cgPSBub3dcbiAgICB0aGlzLnN0b3JhZ2UgPSBzdG9yYWdlXG4gICAgdGhpcy5zdG9yYWdlS2V5ID0gc3RvcmFnZUtleVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsb2cgdmlldyB3aXRoIHNlcXVlbmNlLCByZWNvcmRzLCBhbmQgbG9ja3MgcGFydGl0aW9uZWQgYnkgYW5cbiAgICogaW1tdXRhYmxlIHBoeXNpY2FsIHRlbmFudCBpZGVudGl0eSB3aGlsZSByZXVzaW5nIHRoZSBzYW1lIHJvdyBzdG9yZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcnRpdGlvbktleSAtIFN0YWJsZSBvcGFxdWUgcGFydGl0aW9uIGlkZW50aXR5LlxuICAgKiBAcmV0dXJucyB7TG9jYWxNdXRhdGlvbkxvZ30gUGFydGl0aW9uZWQgbG9nLlxuICAgKi9cbiAgcGFydGl0aW9uKHBhcnRpdGlvbktleSkge1xuICAgIGlmICghcGFydGl0aW9uS2V5KSB0aHJvdyBuZXcgRXJyb3IoXCJMb2NhbE11dGF0aW9uTG9nIHBhcnRpdGlvbiBrZXkgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmdcIilcblxuICAgIHJldHVybiBuZXcgTG9jYWxNdXRhdGlvbkxvZyh7XG4gICAgICBpZEdlbmVyYXRvcjogdGhpcy5pZEdlbmVyYXRvcixcbiAgICAgIG5vdzogdGhpcy5ub3csXG4gICAgICBzdG9yYWdlOiB0aGlzLnN0b3JhZ2UsXG4gICAgICBzdG9yYWdlS2V5OiBgJHt0aGlzLnN0b3JhZ2VLZXl9OiR7cGFydGl0aW9uS2V5Lmxlbmd0aH06JHtwYXJ0aXRpb25LZXl9YFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kcyBhIHBlbmRpbmcgbXV0YXRpb24gcmVjb3JkLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHtMb2NhbE11dGF0aW9uRGVwZW5kZW5jeVtdfSBbYXJncy5kZXBlbmRlbmNpZXNdIC0gTXV0YXRpb24gZGVwZW5kZW5jaWVzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbn0gYXJncy5tdXRhdGlvbiAtIE11dGF0aW9uIHBheWxvYWQuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU2lnbmVkU3luY011dGF0aW9ufSBbYXJncy5zaWduZWRNdXRhdGlvbl0gLSBPcmlnaW5hbCBzaWduZWQgbXV0YXRpb24gZW52ZWxvcGUsIHJldGFpbmVkIGZvciBwZWVyLWZvcndhcmRlZCBtdXRhdGlvbnMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmQ+fSAtIENyZWF0ZWQgbG9nIHJlY29yZC5cbiAgICovXG4gIGFzeW5jIGFwcGVuZCh7ZGVwZW5kZW5jaWVzID0gW10sIG11dGF0aW9uLCBzaWduZWRNdXRhdGlvbn0pIHtcbiAgICBpZiAoc2lnbmVkTXV0YXRpb24gIT09IHVuZGVmaW5lZCAmJiBzdGFibGVKc29uU3RyaW5naWZ5KHNpZ25lZE11dGF0aW9uLm11dGF0aW9uKSAhPT0gc3RhYmxlSnNvblN0cmluZ2lmeShtdXRhdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNpZ25lZCBtdXRhdGlvbiBwYXlsb2FkIGRvZXMgbm90IG1hdGNoIHRoZSBtdXRhdGlvblwiKVxuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmFnZUtleUxvY2sodGhpcy5zdG9yYWdlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0aW1lc3RhbXAgPSB0aGlzLmN1cnJlbnRUaW1lc3RhbXAoKVxuICAgICAgY29uc3QgcmVjb3JkID0gbm9ybWFsaXplUmVjb3JkKHtcbiAgICAgICAgY3JlYXRlZEF0OiB0aW1lc3RhbXAsXG4gICAgICAgIGRlcGVuZGVuY2llcyxcbiAgICAgICAgaWQ6IHRoaXMuaWRHZW5lcmF0b3IoKSxcbiAgICAgICAgbXV0YXRpb24sXG4gICAgICAgIHNlcXVlbmNlOiBhd2FpdCB0aGlzLnN0b3JhZ2UubmV4dFNlcXVlbmNlKHRoaXMuc3RvcmFnZUtleSksXG4gICAgICAgIHNpZ25lZE11dGF0aW9uLFxuICAgICAgICBzdGF0dXM6IFwicGVuZGluZ1wiLFxuICAgICAgICB1cGRhdGVkQXQ6IHRpbWVzdGFtcFxuICAgICAgfSlcblxuICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLmFwcGVuZFJlY29yZCh0aGlzLnN0b3JhZ2VLZXksIGNsb25lUmVjb3JkKHJlY29yZCkpXG5cbiAgICAgIHJldHVybiBjbG9uZVJlY29yZChyZWNvcmQpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCByZWNvcmRzIG9yZGVyZWQgYnkgbG9jYWwgc2VxdWVuY2UuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmRbXT59IC0gTG9nIHJlY29yZHMuXG4gICAqL1xuICBhc3luYyByZWNvcmRzKCkge1xuICAgIHJldHVybiBub3JtYWxpemVSZWNvcmRMaXN0KGF3YWl0IHRoaXMuc3RvcmFnZS5yZWNvcmRzKHRoaXMuc3RvcmFnZUtleSkpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyByZWNvcmRzIHRoYXQgc3RpbGwgbmVlZCBsb2NhbC9zZXJ2ZXIgcmVjb25jaWxpYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmRbXT59IC0gUGVuZGluZyByZWNvcmRzLlxuICAgKi9cbiAgYXN5bmMgcGVuZGluZ1JlY29yZHMoKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVJlY29yZExpc3QoYXdhaXQgdGhpcy5zdG9yYWdlLnJlY29yZHModGhpcy5zdG9yYWdlS2V5LCB7c3RhdHVzZXM6IFBFTkRJTkdfU1RBVFVTX1ZBTFVFU30pKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSByZWNvcmQgc3RhdHVzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuaWQgLSBSZWNvcmQgaWQuXG4gICAqIEBwYXJhbSB7TG9jYWxNdXRhdGlvblN0YXR1c30gYXJncy5zdGF0dXMgLSBOZXcgc3RhdHVzLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2Zyb250ZW5kLW1vZGVscy9iYXNlLmpzXCIpLkZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZT59IFthcmdzLnN5bmNSZXN1bHRdIC0gUmVzdWx0IG1ldGFkYXRhIChtYXkgY2FycnkgdHJhbnNwb3J0LXJlc3RvcmVkIHR5cGVkIHZhbHVlcykuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmQ+fSAtIFVwZGF0ZWQgcmVjb3JkLlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlU3RhdHVzKHtpZCwgc3RhdHVzLCBzeW5jUmVzdWx0fSkge1xuICAgIGlmICghTVVUQVRJT05fU1RBVFVTRVMuaGFzKHN0YXR1cykpIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBsb2NhbCBtdXRhdGlvbiBzdGF0dXMgJyR7c3RhdHVzfSdgKVxuXG4gICAgcmV0dXJuIGF3YWl0IHdpdGhTdG9yYWdlS2V5TG9jayh0aGlzLnN0b3JhZ2VLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJhd1JlY29yZCA9IGF3YWl0IHRoaXMuc3RvcmFnZS5yZWNvcmQodGhpcy5zdG9yYWdlS2V5LCBpZClcblxuICAgICAgaWYgKCFyYXdSZWNvcmQpIHRocm93IG5ldyBFcnJvcihgTm8gbG9jYWwgbXV0YXRpb24gbG9nIHJlY29yZCAnJHtpZH0nYClcblxuICAgICAgY29uc3QgcmVjb3JkID0gbm9ybWFsaXplUmVjb3JkKHJhd1JlY29yZClcblxuICAgICAgcmVjb3JkLnN0YXR1cyA9IC8qKiBAdHlwZSB7TG9jYWxNdXRhdGlvblN0YXR1c30gKi8gKHN0YXR1cylcbiAgICAgIGlmIChzeW5jUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gRW5jb2RlIHRyYW5zcG9ydC1yZXN0b3JlZCB0eXBlZCB2YWx1ZXMgKGUuZy4gRGF0ZSBhdHRyaWJ1dGVzIGluIGFcbiAgICAgICAgLy8gY29uZmxpY3Qgc2VydmVyTW9kZWwpIGFzIG1hcmtlcnMgYmVmb3JlIHRoZSBKU09OIGNsb25lIHNvIHRoZVxuICAgICAgICAvLyBkdXJhYmxlIHBlcnNpc3RlbmNlIHJvdW5kIHRyaXAgY2Fubm90IHN0cmluZ2lmeSB0aGVtLlxuICAgICAgICByZWNvcmQuc3luY1Jlc3VsdCA9IGNsb25lSnNvbk9iamVjdChzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWUoc3luY1Jlc3VsdCksIFwic3luY1Jlc3VsdFwiKVxuICAgICAgfVxuICAgICAgcmVjb3JkLnVwZGF0ZWRBdCA9IHRoaXMuY3VycmVudFRpbWVzdGFtcCgpXG4gICAgICBhd2FpdCB0aGlzLnN0b3JhZ2UudXBkYXRlUmVjb3JkKHRoaXMuc3RvcmFnZUtleSwgY2xvbmVSZWNvcmQocmVjb3JkKSlcblxuICAgICAgcmV0dXJuIHJlc3RvcmVTeW5jUmVzdWx0VHlwZXMoY2xvbmVSZWNvcmQocmVjb3JkKSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoZSBtdXRhdGlvbiBwYXlsb2FkIG9mIGEgc3RpbGwtcGVuZGluZyByZWNvcmQuIFVzZWQgd2hlbiBhblxuICAgKiBhY2tub3dsZWRnZWQgcHJlZGVjZXNzb3Igc3VwcGxpZXMgdGhlIGF1dGhvcml0YXRpdmUgYmFzZSBmb3IgaXRzIHN1Y2Nlc3Nvci5cbiAgICogQHBhcmFtIHt7aWQ6IHN0cmluZywgbXV0YXRpb246IGltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbn19IGFyZ3MgLSBSZWNvcmQgYW5kIHJlcGxhY2VtZW50IG11dGF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2NhbE11dGF0aW9uTG9nUmVjb3JkPn0gVXBkYXRlZCByZWNvcmQuXG4gICAqL1xuICBhc3luYyB1cGRhdGVNdXRhdGlvbih7aWQsIG11dGF0aW9ufSkge1xuICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmFnZUtleUxvY2sodGhpcy5zdG9yYWdlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByYXdSZWNvcmQgPSBhd2FpdCB0aGlzLnN0b3JhZ2UucmVjb3JkKHRoaXMuc3RvcmFnZUtleSwgaWQpXG5cbiAgICAgIGlmICghcmF3UmVjb3JkKSB0aHJvdyBuZXcgRXJyb3IoYE5vIGxvY2FsIG11dGF0aW9uIGxvZyByZWNvcmQgJyR7aWR9J2ApXG5cbiAgICAgIGNvbnN0IHJlY29yZCA9IG5vcm1hbGl6ZVJlY29yZChyYXdSZWNvcmQpXG5cbiAgICAgIGlmICghUEVORElOR19TVEFUVVNFUy5oYXMocmVjb3JkLnN0YXR1cykpIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHVwZGF0ZSBtdXRhdGlvbiBmb3IgJHtyZWNvcmQuc3RhdHVzfSBsb2NhbCBtdXRhdGlvbiAnJHtpZH0nYClcblxuICAgICAgcmVjb3JkLm11dGF0aW9uID0gbm9ybWFsaXplTXV0YXRpb24obXV0YXRpb24pXG4gICAgICByZWNvcmQudXBkYXRlZEF0ID0gdGhpcy5jdXJyZW50VGltZXN0YW1wKClcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS51cGRhdGVSZWNvcmQodGhpcy5zdG9yYWdlS2V5LCBjbG9uZVJlY29yZChyZWNvcmQpKVxuXG4gICAgICByZXR1cm4gcmVzdG9yZVN5bmNSZXN1bHRUeXBlcyhjbG9uZVJlY29yZChyZWNvcmQpKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUHJ1bmVzIHRlcm1pbmFsIHJlY29yZHMgdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZCBmb3IgcmVwbGF5IGRlcGVuZGVuY2llcy5cbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXSAtIENvbXBhY3Rpb24gb3B0aW9ucy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1heFRlcm1pbmFsUmVjb3Jkc10gLSBNYXhpbXVtIHRlcm1pbmFsIHJlY29yZHMgdG8gcmV0YWluLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MudGVybWluYWxSZXRlbnRpb25Nc10gLSBNaW5pbXVtIGFnZSBiZWZvcmUgcHJ1bmluZyB0ZXJtaW5hbCByZWNvcmRzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7ZGVsZXRlZFJlY29yZElkczogc3RyaW5nW119Pn0gLSBDb21wYWN0aW9uIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNvbXBhY3Qoe21heFRlcm1pbmFsUmVjb3JkcywgdGVybWluYWxSZXRlbnRpb25Nc30gPSB7fSkge1xuICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmFnZUtleUxvY2sodGhpcy5zdG9yYWdlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZWNvcmRzID0gYXdhaXQgdGhpcy5yZWNvcmRzKClcbiAgICAgIGNvbnN0IHByb3RlY3RlZENsaWVudE11dGF0aW9uSWRzID0gbmV3IFNldChcbiAgICAgICAgcmVjb3Jkc1xuICAgICAgICAgIC5maWx0ZXIoKHJlY29yZCkgPT4gUEVORElOR19TVEFUVVNFUy5oYXMocmVjb3JkLnN0YXR1cykgfHwgcmVjb3JkLnN0YXR1cyA9PT0gXCJjb25mbGljdFwiKVxuICAgICAgICAgIC5mbGF0TWFwKChyZWNvcmQpID0+IHJlY29yZC5kZXBlbmRlbmNpZXMubWFwKChkZXBlbmRlbmN5KSA9PiBkZXBlbmRlbmN5LmNsaWVudE11dGF0aW9uSWQpKVxuICAgICAgKVxuICAgICAgY29uc3QgdGVybWluYWxSZWNvcmRzID0gcmVjb3Jkc1xuICAgICAgICAuZmlsdGVyKChyZWNvcmQpID0+IFRFUk1JTkFMX1NUQVRVU0VTLmhhcyhyZWNvcmQuc3RhdHVzKSlcbiAgICAgICAgLmZpbHRlcigocmVjb3JkKSA9PiAhcHJvdGVjdGVkQ2xpZW50TXV0YXRpb25JZHMuaGFzKHJlY29yZC5tdXRhdGlvbi5jbGllbnRNdXRhdGlvbklkKSlcbiAgICAgICAgLnNvcnQoY29tcGFyZVJlY29yZHNOZXdlc3RGaXJzdClcbiAgICAgIGNvbnN0IGRlbGV0ZUlkcyA9IG5ldyBTZXQoKVxuXG4gICAgICBpZiAodHlwZW9mIG1heFRlcm1pbmFsUmVjb3JkcyA9PT0gXCJudW1iZXJcIiAmJiBtYXhUZXJtaW5hbFJlY29yZHMgPj0gMCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiB0ZXJtaW5hbFJlY29yZHMuc2xpY2UobWF4VGVybWluYWxSZWNvcmRzKSkgZGVsZXRlSWRzLmFkZChyZWNvcmQuaWQpXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGVybWluYWxSZXRlbnRpb25NcyA9PT0gXCJudW1iZXJcIiAmJiB0ZXJtaW5hbFJldGVudGlvbk1zID49IDApIHtcbiAgICAgICAgY29uc3QgY3V0b2ZmID0gdGhpcy5ub3coKS5nZXRUaW1lKCkgLSB0ZXJtaW5hbFJldGVudGlvbk1zXG5cbiAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgdGVybWluYWxSZWNvcmRzKSB7XG4gICAgICAgICAgaWYgKG5ldyBEYXRlKHJlY29yZC51cGRhdGVkQXQpLmdldFRpbWUoKSA8IGN1dG9mZikgZGVsZXRlSWRzLmFkZChyZWNvcmQuaWQpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVsZXRlZFJlY29yZElkcyA9IEFycmF5LmZyb20oZGVsZXRlSWRzKVxuXG4gICAgICBpZiAoZGVsZXRlZFJlY29yZElkcy5sZW5ndGggPiAwKSBhd2FpdCB0aGlzLnN0b3JhZ2UuZGVsZXRlUmVjb3Jkcyh0aGlzLnN0b3JhZ2VLZXksIGRlbGV0ZWRSZWNvcmRJZHMpXG5cbiAgICAgIHJldHVybiB7ZGVsZXRlZFJlY29yZElkc31cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgbG9nIHRpbWVzdGFtcC5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBDdXJyZW50IElTTyB0aW1lc3RhbXAuXG4gICAqL1xuICBjdXJyZW50VGltZXN0YW1wKCkge1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzLm5vdygpXG5cbiAgICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkgfHwgTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgdGhyb3cgbmV3IEVycm9yKFwiTG9jYWxNdXRhdGlvbkxvZyBub3coKSBtdXN0IHJldHVybiBhIHZhbGlkIERhdGVcIilcblxuICAgIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKClcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgc3RvcmFnZSBhZGFwdGVyIGhhcyBhbGwgcmVxdWlyZWQgcm93LXN0b3JlIG1ldGhvZHMuXG4gKiBAcGFyYW0ge3Vua25vd259IHN0b3JhZ2UgLSBTdG9yYWdlIGFkYXB0ZXIgY2FuZGlkYXRlLlxuICogQHJldHVybnMge3N0b3JhZ2UgaXMgTG9jYWxNdXRhdGlvbkxvZ1N0b3JhZ2V9IC0gV2hldGhlciBzdG9yYWdlIGlzIHZhbGlkLlxuICovXG5mdW5jdGlvbiB2YWxpZFN0b3JhZ2Uoc3RvcmFnZSkge1xuICBpZiAoIXN0b3JhZ2UgfHwgdHlwZW9mIHN0b3JhZ2UgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IHN0b3JhZ2VPYmplY3QgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAoc3RvcmFnZSlcblxuICByZXR1cm4gdHlwZW9mIHN0b3JhZ2VPYmplY3QuYXBwZW5kUmVjb3JkID09PSBcImZ1bmN0aW9uXCJcbiAgICAmJiB0eXBlb2Ygc3RvcmFnZU9iamVjdC5kZWxldGVSZWNvcmRzID09PSBcImZ1bmN0aW9uXCJcbiAgICAmJiB0eXBlb2Ygc3RvcmFnZU9iamVjdC5uZXh0U2VxdWVuY2UgPT09IFwiZnVuY3Rpb25cIlxuICAgICYmIHR5cGVvZiBzdG9yYWdlT2JqZWN0LnJlY29yZCA9PT0gXCJmdW5jdGlvblwiXG4gICAgJiYgdHlwZW9mIHN0b3JhZ2VPYmplY3QucmVjb3JkcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgJiYgdHlwZW9mIHN0b3JhZ2VPYmplY3QudXBkYXRlUmVjb3JkID09PSBcImZ1bmN0aW9uXCJcbn1cblxuLyoqXG4gKiBTb3J0cyByZWNvcmRzIGJ5IG5ld2VzdCB1cGRhdGUvc2VxdWVuY2UgZmlyc3QuXG4gKiBAcGFyYW0ge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9IGxlZnQgLSBMZWZ0IHJlY29yZC5cbiAqIEBwYXJhbSB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gcmlnaHQgLSBSaWdodCByZWNvcmQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIFNvcnQgcmVzdWx0LlxuICovXG5mdW5jdGlvbiBjb21wYXJlUmVjb3Jkc05ld2VzdEZpcnN0KGxlZnQsIHJpZ2h0KSB7XG4gIGNvbnN0IHVwZGF0ZWRBdENvbXBhcmlzb24gPSByaWdodC51cGRhdGVkQXQubG9jYWxlQ29tcGFyZShsZWZ0LnVwZGF0ZWRBdClcblxuICBpZiAodXBkYXRlZEF0Q29tcGFyaXNvbiAhPT0gMCkgcmV0dXJuIHVwZGF0ZWRBdENvbXBhcmlzb25cblxuICByZXR1cm4gcmlnaHQuc2VxdWVuY2UgLSBsZWZ0LnNlcXVlbmNlXG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhbmQgc29ydHMgYSBsaXN0IG9mIHJlY29yZHMuXG4gKiBAcGFyYW0ge3Vua25vd259IHJlY29yZHMgLSBSYXcgcmVjb3Jkcy5cbiAqIEByZXR1cm5zIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkW119IC0gTm9ybWFsaXplZCByZWNvcmRzLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVSZWNvcmRMaXN0KHJlY29yZHMpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlY29yZHMpKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiBsb2cgc3RvcmFnZSByZWNvcmRzIGFycmF5XCIpXG5cbiAgcmV0dXJuIHJlY29yZHNcbiAgICAubWFwKG5vcm1hbGl6ZVJlY29yZClcbiAgICAuc29ydCgobGVmdCwgcmlnaHQpID0+IGxlZnQuc2VxdWVuY2UgLSByaWdodC5zZXF1ZW5jZSlcbiAgICAubWFwKChyZWNvcmQpID0+IGNsb25lUmVjb3JkKHJlY29yZCkpXG4gICAgLm1hcChyZXN0b3JlU3luY1Jlc3VsdFR5cGVzKVxufVxuXG4vKipcbiAqIFJlc3RvcmVzIHRyYW5zcG9ydC1yZXN0b3JlZCB0eXBlZCB2YWx1ZXMgaW4gYSByZWNvcmQncyBzeW5jUmVzdWx0IGFmdGVyIHRoZVxuICogZmluYWwgSlNPTiBjbG9uZSwgc28gY2FsbGVycyBzZWUgRGF0ZSAoYW5kIG90aGVyIHR5cGVkKSB2YWx1ZXMgb24gZHVyYWJsZVxuICogcmVhZGJhY2sgaW5zdGVhZCBvZiBtYXJrZXItZW5jb2RlZCBJU08gc3RyaW5ncy5cbiAqIEBwYXJhbSB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gcmVjb3JkIC0gQ2xvbmVkIHJlY29yZC5cbiAqIEByZXR1cm5zIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSAtIFJlY29yZCB3aXRoIHJlc3RvcmVkIHN5bmNSZXN1bHQgdHlwZXMuXG4gKi9cbmZ1bmN0aW9uIHJlc3RvcmVTeW5jUmVzdWx0VHlwZXMocmVjb3JkKSB7XG4gIGlmIChyZWNvcmQuc3luY1Jlc3VsdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gcmVjb3JkXG5cbiAgcmV0dXJuIHtcbiAgICAuLi5yZWNvcmQsXG4gICAgc3luY1Jlc3VsdDogLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbHMvYmFzZS5qc1wiKS5Gcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWU+fSAqLyAoXG4gICAgICBkZXNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZShyZWNvcmQuc3luY1Jlc3VsdClcbiAgICApXG4gIH1cbn1cblxuLyoqXG4gKiBSdW5zIGEgY2FsbGJhY2sgYWZ0ZXIgZWFybGllciB3cml0ZXMgZm9yIHRoZSBzYW1lIHN0b3JhZ2Uga2V5IGhhdmUgY29tcGxldGVkLlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdG9yYWdlS2V5IC0gU3RvcmFnZSBrZXkgdG8gc2VyaWFsaXplLlxuICogQHBhcmFtIHsoKSA9PiBQcm9taXNlPFQ+fSBjYWxsYmFjayAtIENhbGxiYWNrIHRvIHJ1biB1bmRlciB0aGUgc3RvcmFnZS1rZXkgbG9jay5cbiAqIEByZXR1cm5zIHtQcm9taXNlPFQ+fSAtIENhbGxiYWNrIHJlc3VsdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gd2l0aFN0b3JhZ2VLZXlMb2NrKHN0b3JhZ2VLZXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHByZXZpb3VzID0gU1RPUkFHRV9LRVlfTE9DS1MuZ2V0KHN0b3JhZ2VLZXkpIHx8IFByb21pc2UucmVzb2x2ZSgpXG4gIGxldCByZWxlYXNlID0gKCkgPT4ge31cbiAgY29uc3QgY3VycmVudCA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7IHJlbGVhc2UgPSAoKSA9PiByZXNvbHZlKHVuZGVmaW5lZCkgfSlcbiAgY29uc3QgY2hhaW5lZCA9IHByZXZpb3VzLmNhdGNoKChfZXJyb3IpID0+IHt9KS50aGVuKCgpID0+IGN1cnJlbnQpXG5cbiAgU1RPUkFHRV9LRVlfTE9DS1Muc2V0KHN0b3JhZ2VLZXksIGNoYWluZWQpXG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBwcmV2aW91cy5jYXRjaCgoX2Vycm9yKSA9PiB7fSlcblxuICAgIHJldHVybiBhd2FpdCBjYWxsYmFjaygpXG4gIH0gZmluYWxseSB7XG4gICAgcmVsZWFzZSgpXG4gICAgaWYgKFNUT1JBR0VfS0VZX0xPQ0tTLmdldChzdG9yYWdlS2V5KSA9PT0gY2hhaW5lZCkgU1RPUkFHRV9LRVlfTE9DS1MuZGVsZXRlKHN0b3JhZ2VLZXkpXG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgcGVyc2lzdGVkIGxvZyByZWNvcmQuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IHJlY29yZC5cbiAqIEByZXR1cm5zIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSAtIE5vcm1hbGl6ZWQgcmVjb3JkLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVSZWNvcmQodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGxvY2FsIG11dGF0aW9uIGxvZyByZWNvcmQgb2JqZWN0XCIpXG5cbiAgY29uc3QgcmVjb3JkID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKHZhbHVlKVxuICBjb25zdCBzdGF0dXMgPSByZXF1aXJlZFN0cmluZyhyZWNvcmQuc3RhdHVzLCBcInN0YXR1c1wiKVxuXG4gIGlmICghTVVUQVRJT05fU1RBVFVTRVMuaGFzKHN0YXR1cykpIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBsb2NhbCBtdXRhdGlvbiBzdGF0dXMgJyR7c3RhdHVzfSdgKVxuXG4gIGNvbnN0IGJhc2VSZWNvcmQgPSB7XG4gICAgY3JlYXRlZEF0OiByZXF1aXJlZElzb1RpbWVzdGFtcChyZWNvcmQuY3JlYXRlZEF0LCBcImNyZWF0ZWRBdFwiKSxcbiAgICBkZXBlbmRlbmNpZXM6IG5vcm1hbGl6ZURlcGVuZGVuY2llcyhyZWNvcmQuZGVwZW5kZW5jaWVzKSxcbiAgICBpZDogcmVxdWlyZWRTdHJpbmcocmVjb3JkLmlkLCBcImlkXCIpLFxuICAgIG11dGF0aW9uOiBub3JtYWxpemVNdXRhdGlvbihyZWNvcmQubXV0YXRpb24pLFxuICAgIHNlcXVlbmNlOiByZXF1aXJlZFBvc2l0aXZlSW50ZWdlcihyZWNvcmQuc2VxdWVuY2UsIFwic2VxdWVuY2VcIiksXG4gICAgc3RhdHVzOiAvKiogQHR5cGUge0xvY2FsTXV0YXRpb25TdGF0dXN9ICovIChzdGF0dXMpLFxuICAgIHVwZGF0ZWRBdDogcmVxdWlyZWRJc29UaW1lc3RhbXAocmVjb3JkLnVwZGF0ZWRBdCwgXCJ1cGRhdGVkQXRcIilcbiAgfVxuXG4gIGlmIChyZWNvcmQuc2lnbmVkTXV0YXRpb24gPT09IHVuZGVmaW5lZCAmJiByZWNvcmQuc3luY1Jlc3VsdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gYmFzZVJlY29yZFxuXG4gIC8qKiBAdHlwZSB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gKi9cbiAgY29uc3Qgbm9ybWFsaXplZFJlY29yZCA9IHsuLi5iYXNlUmVjb3JkfVxuXG4gIGlmIChyZWNvcmQuc2lnbmVkTXV0YXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIG5vcm1hbGl6ZWRSZWNvcmQuc2lnbmVkTXV0YXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlNpZ25lZFN5bmNNdXRhdGlvbn0gKi8gKGNsb25lSnNvbk9iamVjdChyZWNvcmQuc2lnbmVkTXV0YXRpb24sIFwic2lnbmVkTXV0YXRpb25cIikpXG4gIH1cbiAgaWYgKHJlY29yZC5zeW5jUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBQZXJzaXN0ZWQgc3luY1Jlc3VsdCBpcyBtYXJrZXItZW5jb2RlZCBzbyBpdCBzdXJ2aXZlcyB0aGUgSlNPTiBjbG9uZTtcbiAgICAvLyB0eXBlZCB2YWx1ZXMgYXJlIHJlc3RvcmVkIGJ5IHJlc3RvcmVTeW5jUmVzdWx0VHlwZXMgYXQgdGhlIHJlYWQgYm91bmRhcnkuXG4gICAgbm9ybWFsaXplZFJlY29yZC5zeW5jUmVzdWx0ID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbHMvYmFzZS5qc1wiKS5Gcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWU+fSAqLyAoXG4gICAgICBjbG9uZUpzb25PYmplY3QocmVjb3JkLnN5bmNSZXN1bHQsIFwic3luY1Jlc3VsdFwiKVxuICAgIClcbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVkUmVjb3JkXG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBkZXBlbmRlbmN5IG1ldGFkYXRhIGVudHJpZXMuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IGRlcGVuZGVuY2llcy5cbiAqIEByZXR1cm5zIHtMb2NhbE11dGF0aW9uRGVwZW5kZW5jeVtdfSAtIE5vcm1hbGl6ZWQgZGVwZW5kZW5jaWVzLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVEZXBlbmRlbmNpZXModmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBbXVxuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiBkZXBlbmRlbmNpZXMgYXJyYXlcIilcblxuICByZXR1cm4gdmFsdWUubWFwKChkZXBlbmRlbmN5KSA9PiB7XG4gICAgaWYgKCFkZXBlbmRlbmN5IHx8IHR5cGVvZiBkZXBlbmRlbmN5ICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZGVwZW5kZW5jeSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGxvY2FsIG11dGF0aW9uIGRlcGVuZGVuY3kgb2JqZWN0XCIpXG4gICAgfVxuXG4gICAgY29uc3QgZGVwZW5kZW5jeU9iamVjdCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovIChkZXBlbmRlbmN5KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNsaWVudE11dGF0aW9uSWQ6IHJlcXVpcmVkU3RyaW5nKGRlcGVuZGVuY3lPYmplY3QuY2xpZW50TXV0YXRpb25JZCwgXCJkZXBlbmRlbmN5IGNsaWVudE11dGF0aW9uSWRcIiksXG4gICAgICBtb2RlbDogcmVxdWlyZWRTdHJpbmcoZGVwZW5kZW5jeU9iamVjdC5tb2RlbCwgXCJkZXBlbmRlbmN5IG1vZGVsXCIpXG4gICAgfVxuICB9KVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBzeW5jIG11dGF0aW9uIHBheWxvYWQuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IG11dGF0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbn0gLSBOb3JtYWxpemVkIG11dGF0aW9uLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVNdXRhdGlvbih2YWx1ZSkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbG9jYWwgc3luYyBtdXRhdGlvbiBvYmplY3RcIilcblxuICBjb25zdCBtdXRhdGlvbiA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovICh2YWx1ZSlcbiAgY29uc3Qgbm9ybWFsaXplZCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufSAqLyAoe1xuICAgIGFjdG9yRGV2aWNlSWQ6IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLmFjdG9yRGV2aWNlSWQsIFwiYWN0b3JEZXZpY2VJZFwiKSxcbiAgICBhY3RvclVzZXJJZDogcmVxdWlyZWRTdHJpbmcobXV0YXRpb24uYWN0b3JVc2VySWQsIFwiYWN0b3JVc2VySWRcIiksXG4gICAgY2xpZW50TXV0YXRpb25JZDogcmVxdWlyZWRTdHJpbmcobXV0YXRpb24uY2xpZW50TXV0YXRpb25JZCwgXCJjbGllbnRNdXRhdGlvbklkXCIpLFxuICAgIG1vZGVsOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5tb2RlbCwgXCJtb2RlbFwiKSxcbiAgICBvY2N1cnJlZEF0OiByZXF1aXJlZElzb1RpbWVzdGFtcChtdXRhdGlvbi5vY2N1cnJlZEF0LCBcIm9jY3VycmVkQXRcIiksXG4gICAgb2ZmbGluZUdyYW50SWQ6IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLm9mZmxpbmVHcmFudElkLCBcIm9mZmxpbmVHcmFudElkXCIpLFxuICAgIG9wZXJhdGlvbjogcmVxdWlyZWRTdHJpbmcobXV0YXRpb24ub3BlcmF0aW9uLCBcIm9wZXJhdGlvblwiKSxcbiAgICBwb2xpY3lIYXNoOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5wb2xpY3lIYXNoLCBcInBvbGljeUhhc2hcIilcbiAgfSlcblxuICBpZiAobXV0YXRpb24uYXR0cmlidXRlcyAhPT0gdW5kZWZpbmVkKSBub3JtYWxpemVkLmF0dHJpYnV0ZXMgPSBjbG9uZUpzb25PYmplY3QobXV0YXRpb24uYXR0cmlidXRlcywgXCJhdHRyaWJ1dGVzXCIpXG4gIGlmIChtdXRhdGlvbi5iYXNlVmVyc2lvbiAhPT0gdW5kZWZpbmVkKSBub3JtYWxpemVkLmJhc2VWZXJzaW9uID0gY2xvbmVCYXNlVmVyc2lvbihtdXRhdGlvbi5iYXNlVmVyc2lvbilcbiAgaWYgKG11dGF0aW9uLmNvbW1hbmQgIT09IHVuZGVmaW5lZCkgbm9ybWFsaXplZC5jb21tYW5kID0gcmVxdWlyZWRTdHJpbmcobXV0YXRpb24uY29tbWFuZCwgXCJjb21tYW5kXCIpXG4gIGlmIChtdXRhdGlvbi5wYXlsb2FkICE9PSB1bmRlZmluZWQpIG5vcm1hbGl6ZWQucGF5bG9hZCA9IGNsb25lSnNvbk9iamVjdChtdXRhdGlvbi5wYXlsb2FkLCBcInBheWxvYWRcIilcblxuICByZXR1cm4gbm9ybWFsaXplZFxufVxuXG4vKipcbiAqIFJlcXVpcmVzIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBGaWVsZCBsYWJlbC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gUmVxdWlyZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiByZXF1aXJlZFN0cmluZyh2YWx1ZSwgbGFiZWwpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5sZW5ndGggPCAxKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGxvY2FsIG11dGF0aW9uICR7bGFiZWx9YClcblxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhbiBJU08gdGltZXN0YW1wIHN0cmluZy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBGaWVsZCBsYWJlbC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gSVNPIHRpbWVzdGFtcC5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZWRJc29UaW1lc3RhbXAodmFsdWUsIGxhYmVsKSB7XG4gIGNvbnN0IHN0cmluZ1ZhbHVlID0gcmVxdWlyZWRTdHJpbmcodmFsdWUsIGxhYmVsKVxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoc3RyaW5nVmFsdWUpXG5cbiAgaWYgKE51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSkgfHwgZGF0ZS50b0lTT1N0cmluZygpICE9PSBzdHJpbmdWYWx1ZSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiAke2xhYmVsfSBJU08gdGltZXN0YW1wYClcblxuICByZXR1cm4gc3RyaW5nVmFsdWVcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhIHBvc2l0aXZlIGludGVnZXIgdmFsdWUuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIC0gRmllbGQgbGFiZWwuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIFBvc2l0aXZlIGludGVnZXIuXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVkUG9zaXRpdmVJbnRlZ2VyKHZhbHVlLCBsYWJlbCkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSB8fCB2YWx1ZSA8IDEpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gJHtsYWJlbH0gcG9zaXRpdmUgaW50ZWdlcmApXG5cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogQ2xvbmVzIGEgc3VwcG9ydGVkIGJhc2UtdmVyc2lvbiB2YWx1ZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgYmFzZSB2ZXJzaW9uLlxuICogQHJldHVybnMge3N0cmluZyB8IG51bWJlciB8IG51bGx9IC0gTm9ybWFsaXplZCBiYXNlIHZlcnNpb24uXG4gKi9cbmZ1bmN0aW9uIGNsb25lQmFzZVZlcnNpb24odmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHJldHVybiB2YWx1ZVxuXG4gIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGxvY2FsIG11dGF0aW9uIGJhc2VWZXJzaW9uIHN0cmluZywgbnVtYmVyLCBvciBudWxsXCIpXG59XG5cbi8qKlxuICogQ2xvbmVzIGEgSlNPTi1jb21wYXRpYmxlIHZhbHVlLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyBKU09OIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIC0gRmllbGQgbGFiZWwuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZX0gLSBDbG9uZWQgSlNPTiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gY2xvbmVKc29uVmFsdWUodmFsdWUsIGxhYmVsKSB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIEpTT04tY29tcGF0aWJsZSBsb2NhbCBtdXRhdGlvbiAke2xhYmVsfWApXG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZX0gKi8gKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKSlcbn1cblxuLyoqXG4gKiBDbG9uZXMgYSBKU09OLWNvbXBhdGlibGUgb2JqZWN0LlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyBKU09OIG9iamVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIEZpZWxkIGxhYmVsLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFN5bmNKc29uVmFsdWU+fSAtIENsb25lZCBKU09OIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gY2xvbmVKc29uT2JqZWN0KHZhbHVlLCBsYWJlbCkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiAke2xhYmVsfSBvYmplY3RgKVxuXG4gIHJldHVybiAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFN5bmNKc29uVmFsdWU+fSAqLyAoY2xvbmVKc29uVmFsdWUodmFsdWUsIGxhYmVsKSlcbn1cblxuLyoqXG4gKiBDbG9uZXMgYSBsb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkLlxuICogQHBhcmFtIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSByZWNvcmQgLSBSZWNvcmQgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gLSBDbG9uZWQgcmVjb3JkLlxuICovXG5mdW5jdGlvbiBjbG9uZVJlY29yZChyZWNvcmQpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gKi8gKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocmVjb3JkKSkpXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgcmFuZG9tIGxvY2FsIG11dGF0aW9uIHJlY29yZCBpZC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gUmFuZG9tIHJlY29yZCBpZC5cbiAqL1xuZnVuY3Rpb24gcmFuZG9tUmVjb3JkSWQoKSB7XG4gIGNvbnN0IGNyeXB0b1Byb3ZpZGVyID0gZ2xvYmFsVGhpcy5jcnlwdG9cblxuICBpZiAoY3J5cHRvUHJvdmlkZXIgJiYgdHlwZW9mIGNyeXB0b1Byb3ZpZGVyLnJhbmRvbVVVSUQgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGNyeXB0b1Byb3ZpZGVyLnJhbmRvbVVVSUQoKVxuXG4gIHJldHVybiBgbG9jYWwtbXV0YXRpb24tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMTYpLnNsaWNlKDIpfWBcbn1cbiJdfQ==
|
|
518
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbXV0YXRpb24tbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N5bmMvbG9jYWwtbXV0YXRpb24tbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0g7Ozs7O0dBS0c7QUFDSDs7O0tBR0s7QUFDTDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxZQUFZO0FBRVosT0FBTyxFQUFDLHNDQUFzQyxFQUFFLG9DQUFvQyxFQUFDLE1BQU0sK0NBQStDLENBQUE7QUFDMUksT0FBTyxtQkFBbUIsTUFBTSxrQkFBa0IsQ0FBQTtBQUVsRCxNQUFNLG1CQUFtQixHQUFHLGlDQUFpQyxDQUFBO0FBQzdELE1BQU0scUJBQXFCLEdBQUcsb0NBQW9DLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFBO0FBQ25ILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQTtBQUN2RCxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7QUFDMUYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO0FBQ3pELDRDQUE0QztBQUM1QyxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7QUFFbkMsbUZBQW1GO0FBQ25GLE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0JBQWdCO0lBQ25DOzs7Ozs7O09BT0c7SUFDSCxZQUFZLEVBQUMsV0FBVyxHQUFHLGNBQWMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxHQUFHLG1CQUFtQixFQUFD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RUFBRSxDQUFBO0FBQzlFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExvY2FsIG11dGF0aW9uIGxvZyByZWNvcmQgcXVlcnkgb3B0aW9ucy5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IExvY2FsTXV0YXRpb25Mb2dSZWNvcmRzT3B0aW9uc1xuICogQHByb3BlcnR5IHtMb2NhbE11dGF0aW9uU3RhdHVzW119IFtzdGF0dXNlc10gLSBPcHRpb25hbCBzdGF0dXMgZmlsdGVyLlxuICovXG4vKipcbiAqIExvY2FsIG11dGF0aW9uIGxvZyByb3ctb3JpZW50ZWQgc3RvcmFnZSBhZGFwdGVyLlxuICpcbiAqIEltcGxlbWVudGF0aW9ucyBzaG91bGQgc3RvcmUgZWFjaCBtdXRhdGlvbiBsb2cgcmVjb3JkIGFzIGl0cyBvd24gcm93L2VudHJ5LlxuICogTmF0aXZlIGFwcHMgc2hvdWxkIGJhY2sgdGhpcyB3aXRoIFNRTGl0ZSBhbmQgaW5kZXhlcyBvbiBzdG9yYWdlIGtleSwgc3RhdHVzLFxuICogYW5kIHNlcXVlbmNlLiBBdm9pZCBzdG9yaW5nIHRoZSB3aG9sZSBsb2cgYXMgb25lIEpTT04gYmxvYi5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IExvY2FsTXV0YXRpb25Mb2dTdG9yYWdlXG4gKiBAcHJvcGVydHkgeyhzdG9yYWdlS2V5OiBzdHJpbmcsIHJlY29yZDogTG9jYWxNdXRhdGlvbkxvZ1JlY29yZCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWR9IGFwcGVuZFJlY29yZCAtIEFwcGVuZHMgb25lIGxvZyByZWNvcmQuXG4gKiBAcHJvcGVydHkgeyhzdG9yYWdlS2V5OiBzdHJpbmcsIGlkczogc3RyaW5nW10pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkfSBkZWxldGVSZWNvcmRzIC0gRGVsZXRlcyBsb2cgcmVjb3JkcyBieSBpZC5cbiAqIEBwcm9wZXJ0eSB7KHN0b3JhZ2VLZXk6IHN0cmluZykgPT4gUHJvbWlzZTxudW1iZXI+IHwgbnVtYmVyfSBuZXh0U2VxdWVuY2UgLSBSZXR1cm5zIHRoZSBuZXh0IGxvY2FsIHNlcXVlbmNlIG51bWJlci5cbiAqIEBwcm9wZXJ0eSB7KHN0b3JhZ2VLZXk6IHN0cmluZywgaWQ6IHN0cmluZykgPT4gUHJvbWlzZTxMb2NhbE11dGF0aW9uTG9nUmVjb3JkIHwgbnVsbCB8IHVuZGVmaW5lZD4gfCBMb2NhbE11dGF0aW9uTG9nUmVjb3JkIHwgbnVsbCB8IHVuZGVmaW5lZH0gcmVjb3JkIC0gUmVhZHMgb25lIGxvZyByZWNvcmQgYnkgaWQuXG4gKiBAcHJvcGVydHkgeyhzdG9yYWdlS2V5OiBzdHJpbmcsIG9wdGlvbnM/OiBMb2NhbE11dGF0aW9uTG9nUmVjb3Jkc09wdGlvbnMpID0+IFByb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZFtdPiB8IExvY2FsTXV0YXRpb25Mb2dSZWNvcmRbXX0gcmVjb3JkcyAtIFJlYWRzIGxvZyByZWNvcmRzLlxuICogQHByb3BlcnR5IHsoc3RvcmFnZUtleTogc3RyaW5nLCByZWNvcmQ6IExvY2FsTXV0YXRpb25Mb2dSZWNvcmQpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkfSB1cGRhdGVSZWNvcmQgLSBSZXBsYWNlcyBvbmUgbG9nIHJlY29yZC5cbiAqL1xuLyoqXG4gKiBMb2NhbCBzeW5jIG11dGF0aW9uIGRlcGVuZGVuY3kgbWV0YWRhdGEuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2NhbE11dGF0aW9uRGVwZW5kZW5jeVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNsaWVudE11dGF0aW9uSWQgLSBDbGllbnQgbXV0YXRpb24gaWQgdGhpcyBtdXRhdGlvbiBkZXBlbmRzIG9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1vZGVsIC0gRGVwZW5kZW50IG1vZGVsL3Jlc291cmNlIG5hbWUuXG4gKi9cbi8qKlxuICogTG9jYWwgbXV0YXRpb24gbG9nIHN0YXR1cy5cbiAqIEB0eXBlZGVmIHtcInBlbmRpbmdcIiB8IFwiYXBwbGllZC1sb2NhbGx5XCIgfCBcInBlZXItYXBwbGllZFwiIHwgXCJjb25mbGljdFwiIHwgXCJyZWplY3RlZFwiIHwgXCJzeW5jZWRcIn0gTG9jYWxNdXRhdGlvblN0YXR1c1xuICogKi9cbi8qKlxuICogTG9jYWwgbXV0YXRpb24gbG9nIHJlY29yZC5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IExvY2FsTXV0YXRpb25Mb2dSZWNvcmRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjcmVhdGVkQXQgLSBJU08gdGltZXN0YW1wIHdoZW4gdGhlIHJlY29yZCB3YXMgY3JlYXRlZCBsb2NhbGx5LlxuICogQHByb3BlcnR5IHtMb2NhbE11dGF0aW9uRGVwZW5kZW5jeVtdfSBkZXBlbmRlbmNpZXMgLSBPdGhlciBsb2NhbCBtdXRhdGlvbnMgdGhhdCBtdXN0IHJlcGxheSBmaXJzdC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCAtIExvY2FsIGxvZyByZWNvcmQgaWQuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbn0gbXV0YXRpb24gLSBEZXZpY2UgbXV0YXRpb24gcGF5bG9hZC5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU2lnbmVkU3luY011dGF0aW9ufSBbc2lnbmVkTXV0YXRpb25dIC0gT3JpZ2luYWwgc2lnbmVkIG11dGF0aW9uIGVudmVsb3BlLCByZXRhaW5lZCBmb3IgcGVlci1mb3J3YXJkZWQgbXV0YXRpb25zLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHNlcXVlbmNlIC0gTW9ub3RvbmljIGxvY2FsIHNlcXVlbmNlLlxuICogQHByb3BlcnR5IHtMb2NhbE11dGF0aW9uU3RhdHVzfSBzdGF0dXMgLSBMb2NhbCByZXBsYXkvYXBwbHkgc3RhdHVzLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbHMvYmFzZS5qc1wiKS5Gcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWU+fSBbc3luY1Jlc3VsdF0gLSBCYWNrZW5kIHJlcGxheS9yZXN1bHQgbWV0YWRhdGEuIFN0b3JlZCBhcyB0cmFuc3BvcnQgbWFya2VycyBzbyBEYXRlIChhbmQgb3RoZXIgdHlwZWQpIHZhbHVlcyBzdXJ2aXZlIHRoZSBkdXJhYmxlIEpTT04gcm91bmQgdHJpcCBhbmQgYXJlIHJlc3RvcmVkIG9uIHJlYWRiYWNrLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHVwZGF0ZWRBdCAtIElTTyB0aW1lc3RhbXAgd2hlbiB0aGUgcmVjb3JkIHdhcyBsYXN0IGNoYW5nZWQuXG4gKi9cbi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2Rlc2VyaWFsaXplRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlLCBzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWV9IGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbHMvdHJhbnNwb3J0LXNlcmlhbGl6YXRpb24uanNcIlxuaW1wb3J0IHN0YWJsZUpzb25TdHJpbmdpZnkgZnJvbSBcIi4vc3RhYmxlLWpzb24uanNcIlxuXG5jb25zdCBERUZBVUxUX1NUT1JBR0VfS0VZID0gXCJ2ZWxvY2lvdXMuc3luYy5sb2NhbE11dGF0aW9uTG9nXCJcbmNvbnN0IFBFTkRJTkdfU1RBVFVTX1ZBTFVFUyA9IC8qKiBAdHlwZSB7TG9jYWxNdXRhdGlvblN0YXR1c1tdfSAqLyAoW1wicGVuZGluZ1wiLCBcImFwcGxpZWQtbG9jYWxseVwiLCBcInBlZXItYXBwbGllZFwiXSlcbmNvbnN0IFBFTkRJTkdfU1RBVFVTRVMgPSBuZXcgU2V0KFBFTkRJTkdfU1RBVFVTX1ZBTFVFUylcbmNvbnN0IE1VVEFUSU9OX1NUQVRVU0VTID0gbmV3IFNldChbLi4uUEVORElOR19TVEFUVVNFUywgXCJjb25mbGljdFwiLCBcInJlamVjdGVkXCIsIFwic3luY2VkXCJdKVxuY29uc3QgVEVSTUlOQUxfU1RBVFVTRVMgPSBuZXcgU2V0KFtcInJlamVjdGVkXCIsIFwic3luY2VkXCJdKVxuLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBQcm9taXNlPHVua25vd24+Pn0gKi9cbmNvbnN0IFNUT1JBR0VfS0VZX0xPQ0tTID0gbmV3IE1hcCgpXG5cbi8qKiBDbGllbnQtc2lkZSBhcHBlbmQtb25seSBzeW5jIG11dGF0aW9uIGxvZyB3aXRoIHBsdWdnYWJsZSBwZXJzaXN0ZW50IHN0b3JhZ2UuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2NhbE11dGF0aW9uTG9nIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBsb2NhbCBtdXRhdGlvbiBsb2cuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0geygpID0+IHN0cmluZ30gW2FyZ3MuaWRHZW5lcmF0b3JdIC0gUmVjb3JkIGlkIGdlbmVyYXRvci5cbiAgICogQHBhcmFtIHsoKSA9PiBEYXRlfSBbYXJncy5ub3ddIC0gQ2xvY2sgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7TG9jYWxNdXRhdGlvbkxvZ1N0b3JhZ2V9IGFyZ3Muc3RvcmFnZSAtIFBlcnNpc3RlbnQgc3RvcmFnZSBhZGFwdGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3RvcmFnZUtleV0gLSBTdG9yYWdlIGtleS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtpZEdlbmVyYXRvciA9IHJhbmRvbVJlY29yZElkLCBub3cgPSAoKSA9PiBuZXcgRGF0ZSgpLCBzdG9yYWdlLCBzdG9yYWdlS2V5ID0gREVGQVVMVF9TVE9SQUdFX0tFWX0pIHtcbiAgICBpZiAoIXZhbGlkU3RvcmFnZShzdG9yYWdlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9jYWxNdXRhdGlvbkxvZyByZXF1aXJlcyByb3cgc3RvcmFnZSB3aXRoIGFwcGVuZFJlY29yZC9kZWxldGVSZWNvcmRzL25leHRTZXF1ZW5jZS9yZWNvcmQvcmVjb3Jkcy91cGRhdGVSZWNvcmRcIilcbiAgICB9XG5cbiAgICB0aGlzLmlkR2VuZXJhdG9yID0gaWRHZW5lcmF0b3JcbiAgICB0aGlzLm5vdyA9IG5vd1xuICAgIHRoaXMuc3RvcmFnZSA9IHN0b3JhZ2VcbiAgICB0aGlzLnN0b3JhZ2VLZXkgPSBzdG9yYWdlS2V5XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxvZyB2aWV3IHdpdGggc2VxdWVuY2UsIHJlY29yZHMsIGFuZCBsb2NrcyBwYXJ0aXRpb25lZCBieSBhblxuICAgKiBpbW11dGFibGUgcGh5c2ljYWwgdGVuYW50IGlkZW50aXR5IHdoaWxlIHJldXNpbmcgdGhlIHNhbWUgcm93IHN0b3JlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFydGl0aW9uS2V5IC0gU3RhYmxlIG9wYXF1ZSBwYXJ0aXRpb24gaWRlbnRpdHkuXG4gICAqIEByZXR1cm5zIHtMb2NhbE11dGF0aW9uTG9nfSBQYXJ0aXRpb25lZCBsb2cuXG4gICAqL1xuICBwYXJ0aXRpb24ocGFydGl0aW9uS2V5KSB7XG4gICAgaWYgKCFwYXJ0aXRpb25LZXkpIHRocm93IG5ldyBFcnJvcihcIkxvY2FsTXV0YXRpb25Mb2cgcGFydGl0aW9uIGtleSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZ1wiKVxuXG4gICAgcmV0dXJuIG5ldyBMb2NhbE11dGF0aW9uTG9nKHtcbiAgICAgIGlkR2VuZXJhdG9yOiB0aGlzLmlkR2VuZXJhdG9yLFxuICAgICAgbm93OiB0aGlzLm5vdyxcbiAgICAgIHN0b3JhZ2U6IHRoaXMuc3RvcmFnZSxcbiAgICAgIHN0b3JhZ2VLZXk6IGAke3RoaXMuc3RvcmFnZUtleX06JHtwYXJ0aXRpb25LZXkubGVuZ3RofToke3BhcnRpdGlvbktleX1gXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBlbmRzIGEgcGVuZGluZyBtdXRhdGlvbiByZWNvcmQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge0xvY2FsTXV0YXRpb25EZXBlbmRlbmN5W119IFthcmdzLmRlcGVuZGVuY2llc10gLSBNdXRhdGlvbiBkZXBlbmRlbmNpZXMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufSBhcmdzLm11dGF0aW9uIC0gTXV0YXRpb24gcGF5bG9hZC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TaWduZWRTeW5jTXV0YXRpb259IFthcmdzLnNpZ25lZE11dGF0aW9uXSAtIE9yaWdpbmFsIHNpZ25lZCBtdXRhdGlvbiBlbnZlbG9wZSwgcmV0YWluZWQgZm9yIHBlZXItZm9yd2FyZGVkIG11dGF0aW9ucy5cbiAgICogQHJldHVybnMge1Byb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZD59IC0gQ3JlYXRlZCBsb2cgcmVjb3JkLlxuICAgKi9cbiAgYXN5bmMgYXBwZW5kKHtkZXBlbmRlbmNpZXMgPSBbXSwgbXV0YXRpb24sIHNpZ25lZE11dGF0aW9ufSkge1xuICAgIGlmIChzaWduZWRNdXRhdGlvbiAhPT0gdW5kZWZpbmVkICYmIHN0YWJsZUpzb25TdHJpbmdpZnkoc2lnbmVkTXV0YXRpb24ubXV0YXRpb24pICE9PSBzdGFibGVKc29uU3RyaW5naWZ5KG11dGF0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2lnbmVkIG11dGF0aW9uIHBheWxvYWQgZG9lcyBub3QgbWF0Y2ggdGhlIG11dGF0aW9uXCIpXG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHdpdGhTdG9yYWdlS2V5TG9jayh0aGlzLnN0b3JhZ2VLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IHRoaXMuY3VycmVudFRpbWVzdGFtcCgpXG4gICAgICBjb25zdCByZWNvcmQgPSBub3JtYWxpemVSZWNvcmQoe1xuICAgICAgICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCxcbiAgICAgICAgZGVwZW5kZW5jaWVzLFxuICAgICAgICBpZDogdGhpcy5pZEdlbmVyYXRvcigpLFxuICAgICAgICBtdXRhdGlvbixcbiAgICAgICAgc2VxdWVuY2U6IGF3YWl0IHRoaXMuc3RvcmFnZS5uZXh0U2VxdWVuY2UodGhpcy5zdG9yYWdlS2V5KSxcbiAgICAgICAgc2lnbmVkTXV0YXRpb24sXG4gICAgICAgIHN0YXR1czogXCJwZW5kaW5nXCIsXG4gICAgICAgIHVwZGF0ZWRBdDogdGltZXN0YW1wXG4gICAgICB9KVxuXG4gICAgICBhd2FpdCB0aGlzLnN0b3JhZ2UuYXBwZW5kUmVjb3JkKHRoaXMuc3RvcmFnZUtleSwgY2xvbmVSZWNvcmQocmVjb3JkKSlcblxuICAgICAgcmV0dXJuIGNsb25lUmVjb3JkKHJlY29yZClcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIHJlY29yZHMgb3JkZXJlZCBieSBsb2NhbCBzZXF1ZW5jZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZFtdPn0gLSBMb2cgcmVjb3Jkcy5cbiAgICovXG4gIGFzeW5jIHJlY29yZHMoKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVJlY29yZExpc3QoYXdhaXQgdGhpcy5zdG9yYWdlLnJlY29yZHModGhpcy5zdG9yYWdlS2V5KSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHJlY29yZHMgdGhhdCBzdGlsbCBuZWVkIGxvY2FsL3NlcnZlciByZWNvbmNpbGlhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZFtdPn0gLSBQZW5kaW5nIHJlY29yZHMuXG4gICAqL1xuICBhc3luYyBwZW5kaW5nUmVjb3JkcygpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplUmVjb3JkTGlzdChhd2FpdCB0aGlzLnN0b3JhZ2UucmVjb3Jkcyh0aGlzLnN0b3JhZ2VLZXksIHtzdGF0dXNlczogUEVORElOR19TVEFUVVNfVkFMVUVTfSkpXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhIHJlY29yZCBzdGF0dXMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5pZCAtIFJlY29yZCBpZC5cbiAgICogQHBhcmFtIHtMb2NhbE11dGF0aW9uU3RhdHVzfSBhcmdzLnN0YXR1cyAtIE5ldyBzdGF0dXMuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL2Jhc2UuanNcIikuRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlPn0gW2FyZ3Muc3luY1Jlc3VsdF0gLSBSZXN1bHQgbWV0YWRhdGEgKG1heSBjYXJyeSB0cmFuc3BvcnQtcmVzdG9yZWQgdHlwZWQgdmFsdWVzKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZD59IC0gVXBkYXRlZCByZWNvcmQuXG4gICAqL1xuICBhc3luYyB1cGRhdGVTdGF0dXMoe2lkLCBzdGF0dXMsIHN5bmNSZXN1bHR9KSB7XG4gICAgaWYgKCFNVVRBVElPTl9TVEFUVVNFUy5oYXMoc3RhdHVzKSkgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxvY2FsIG11dGF0aW9uIHN0YXR1cyAnJHtzdGF0dXN9J2ApXG5cbiAgICByZXR1cm4gYXdhaXQgd2l0aFN0b3JhZ2VLZXlMb2NrKHRoaXMuc3RvcmFnZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmF3UmVjb3JkID0gYXdhaXQgdGhpcy5zdG9yYWdlLnJlY29yZCh0aGlzLnN0b3JhZ2VLZXksIGlkKVxuXG4gICAgICBpZiAoIXJhd1JlY29yZCkgdGhyb3cgbmV3IEVycm9yKGBObyBsb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkICcke2lkfSdgKVxuXG4gICAgICBjb25zdCByZWNvcmQgPSBub3JtYWxpemVSZWNvcmQocmF3UmVjb3JkKVxuXG4gICAgICByZWNvcmQuc3RhdHVzID0gLyoqIEB0eXBlIHtMb2NhbE11dGF0aW9uU3RhdHVzfSAqLyAoc3RhdHVzKVxuICAgICAgaWYgKHN5bmNSZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBFbmNvZGUgdHJhbnNwb3J0LXJlc3RvcmVkIHR5cGVkIHZhbHVlcyAoZS5nLiBEYXRlIGF0dHJpYnV0ZXMgaW4gYVxuICAgICAgICAvLyBjb25mbGljdCBzZXJ2ZXJNb2RlbCkgYXMgbWFya2VycyBiZWZvcmUgdGhlIEpTT04gY2xvbmUgc28gdGhlXG4gICAgICAgIC8vIGR1cmFibGUgcGVyc2lzdGVuY2Ugcm91bmQgdHJpcCBjYW5ub3Qgc3RyaW5naWZ5IHRoZW0uXG4gICAgICAgIHJlY29yZC5zeW5jUmVzdWx0ID0gY2xvbmVKc29uT2JqZWN0KHNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZShzeW5jUmVzdWx0KSwgXCJzeW5jUmVzdWx0XCIpXG4gICAgICB9XG4gICAgICByZWNvcmQudXBkYXRlZEF0ID0gdGhpcy5jdXJyZW50VGltZXN0YW1wKClcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS51cGRhdGVSZWNvcmQodGhpcy5zdG9yYWdlS2V5LCBjbG9uZVJlY29yZChyZWNvcmQpKVxuXG4gICAgICByZXR1cm4gcmVzdG9yZVN5bmNSZXN1bHRUeXBlcyhjbG9uZVJlY29yZChyZWNvcmQpKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIG11dGF0aW9uIHBheWxvYWQgb2YgYSBzdGlsbC1wZW5kaW5nIHJlY29yZC4gVXNlZCB3aGVuIGFuXG4gICAqIGFja25vd2xlZGdlZCBwcmVkZWNlc3NvciBzdXBwbGllcyB0aGUgYXV0aG9yaXRhdGl2ZSBiYXNlIGZvciBpdHMgc3VjY2Vzc29yLlxuICAgKiBAcGFyYW0ge3tpZDogc3RyaW5nLCBtdXRhdGlvbjogaW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufX0gYXJncyAtIFJlY29yZCBhbmQgcmVwbGFjZW1lbnQgbXV0YXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmQ+fSBVcGRhdGVkIHJlY29yZC5cbiAgICovXG4gIGFzeW5jIHVwZGF0ZU11dGF0aW9uKHtpZCwgbXV0YXRpb259KSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpdGhTdG9yYWdlS2V5TG9jayh0aGlzLnN0b3JhZ2VLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJhd1JlY29yZCA9IGF3YWl0IHRoaXMuc3RvcmFnZS5yZWNvcmQodGhpcy5zdG9yYWdlS2V5LCBpZClcblxuICAgICAgaWYgKCFyYXdSZWNvcmQpIHRocm93IG5ldyBFcnJvcihgTm8gbG9jYWwgbXV0YXRpb24gbG9nIHJlY29yZCAnJHtpZH0nYClcblxuICAgICAgY29uc3QgcmVjb3JkID0gbm9ybWFsaXplUmVjb3JkKHJhd1JlY29yZClcblxuICAgICAgaWYgKCFQRU5ESU5HX1NUQVRVU0VTLmhhcyhyZWNvcmQuc3RhdHVzKSkgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgdXBkYXRlIG11dGF0aW9uIGZvciAke3JlY29yZC5zdGF0dXN9IGxvY2FsIG11dGF0aW9uICcke2lkfSdgKVxuXG4gICAgICByZWNvcmQubXV0YXRpb24gPSBub3JtYWxpemVNdXRhdGlvbihtdXRhdGlvbilcbiAgICAgIHJlY29yZC51cGRhdGVkQXQgPSB0aGlzLmN1cnJlbnRUaW1lc3RhbXAoKVxuICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnVwZGF0ZVJlY29yZCh0aGlzLnN0b3JhZ2VLZXksIGNsb25lUmVjb3JkKHJlY29yZCkpXG5cbiAgICAgIHJldHVybiByZXN0b3JlU3luY1Jlc3VsdFR5cGVzKGNsb25lUmVjb3JkKHJlY29yZCkpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhIGR1cmFibGUgY29uZmxpY3QgZXhwbGljaXRseS4gS2VlcGluZyB0aGUgc2VydmVyIGFja25vd2xlZGdlcyB0aGVcbiAgICogcHJlc2VydmVkIGxvY2FsIGludGVudCB3aXRob3V0IHJlcGxheWluZyBpdDsgcmV0cnlpbmcgbG9jYWwgaW50ZW50IHJlYmFzZXNcbiAgICogaXQgb250byB0aGUgY29uZmxpY3QncyBhdXRob3JpdGF0aXZlIHNlcnZlclZlcnNpb24gYW5kIHJldHVybnMgaXQgdG8gdGhlXG4gICAqIHBlbmRpbmcgcXVldWUuIFRoZSBwcmlvciBjb25mbGljdCByZXN1bHQgc3RheXMgYXR0YWNoZWQgYXMgYXVkaXQgbWV0YWRhdGEuXG4gICAqIEBwYXJhbSB7e2lkOiBzdHJpbmcsIHJlc29sdXRpb246IFwia2VlcC1zZXJ2ZXJcIiB8IFwicmV0cnktbG9jYWxcIn19IGFyZ3MgLSBSZXNvbHV0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2NhbE11dGF0aW9uTG9nUmVjb3JkPn0gUmVzb2x2ZWQgcmVjb3JkLlxuICAgKi9cbiAgYXN5bmMgcmVzb2x2ZUNvbmZsaWN0KHtpZCwgcmVzb2x1dGlvbn0pIHtcbiAgICBpZiAoIVtcImtlZXAtc2VydmVyXCIsIFwicmV0cnktbG9jYWxcIl0uaW5jbHVkZXMocmVzb2x1dGlvbikpIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBsb2NhbCBtdXRhdGlvbiBjb25mbGljdCByZXNvbHV0aW9uICcke3Jlc29sdXRpb259J2ApXG5cbiAgICByZXR1cm4gYXdhaXQgd2l0aFN0b3JhZ2VLZXlMb2NrKHRoaXMuc3RvcmFnZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmF3UmVjb3JkID0gYXdhaXQgdGhpcy5zdG9yYWdlLnJlY29yZCh0aGlzLnN0b3JhZ2VLZXksIGlkKVxuXG4gICAgICBpZiAoIXJhd1JlY29yZCkgdGhyb3cgbmV3IEVycm9yKGBObyBsb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkICcke2lkfSdgKVxuXG4gICAgICBjb25zdCByZWNvcmQgPSBub3JtYWxpemVSZWNvcmQocmF3UmVjb3JkKVxuXG4gICAgICBpZiAocmVjb3JkLnN0YXR1cyAhPT0gXCJjb25mbGljdFwiKSB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXNvbHZlICR7cmVjb3JkLnN0YXR1c30gbG9jYWwgbXV0YXRpb24gJyR7aWR9JyBhcyBhIGNvbmZsaWN0YClcblxuICAgICAgaWYgKHJlc29sdXRpb24gPT09IFwia2VlcC1zZXJ2ZXJcIikge1xuICAgICAgICByZWNvcmQuc3RhdHVzID0gXCJzeW5jZWRcIlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc2VydmVyVmVyc2lvbiA9IGNvbmZsaWN0U2VydmVyVmVyc2lvbihyZWNvcmQpXG5cbiAgICAgICAgcmVjb3JkLm11dGF0aW9uID0gey4uLnJlY29yZC5tdXRhdGlvbiwgYmFzZVZlcnNpb246IHNlcnZlclZlcnNpb259XG4gICAgICAgIHJlY29yZC5zdGF0dXMgPSBcInBlbmRpbmdcIlxuICAgICAgfVxuXG4gICAgICByZWNvcmQudXBkYXRlZEF0ID0gdGhpcy5jdXJyZW50VGltZXN0YW1wKClcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS51cGRhdGVSZWNvcmQodGhpcy5zdG9yYWdlS2V5LCBjbG9uZVJlY29yZChyZWNvcmQpKVxuXG4gICAgICByZXR1cm4gcmVzdG9yZVN5bmNSZXN1bHRUeXBlcyhjbG9uZVJlY29yZChyZWNvcmQpKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUHJ1bmVzIHRlcm1pbmFsIHJlY29yZHMgdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZCBmb3IgcmVwbGF5IGRlcGVuZGVuY2llcy5cbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXSAtIENvbXBhY3Rpb24gb3B0aW9ucy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1heFRlcm1pbmFsUmVjb3Jkc10gLSBNYXhpbXVtIHRlcm1pbmFsIHJlY29yZHMgdG8gcmV0YWluLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MudGVybWluYWxSZXRlbnRpb25Nc10gLSBNaW5pbXVtIGFnZSBiZWZvcmUgcHJ1bmluZyB0ZXJtaW5hbCByZWNvcmRzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7ZGVsZXRlZFJlY29yZElkczogc3RyaW5nW119Pn0gLSBDb21wYWN0aW9uIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNvbXBhY3Qoe21heFRlcm1pbmFsUmVjb3JkcywgdGVybWluYWxSZXRlbnRpb25Nc30gPSB7fSkge1xuICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmFnZUtleUxvY2sodGhpcy5zdG9yYWdlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZWNvcmRzID0gYXdhaXQgdGhpcy5yZWNvcmRzKClcbiAgICAgIGNvbnN0IHByb3RlY3RlZENsaWVudE11dGF0aW9uSWRzID0gbmV3IFNldChcbiAgICAgICAgcmVjb3Jkc1xuICAgICAgICAgIC5maWx0ZXIoKHJlY29yZCkgPT4gUEVORElOR19TVEFUVVNFUy5oYXMocmVjb3JkLnN0YXR1cykgfHwgcmVjb3JkLnN0YXR1cyA9PT0gXCJjb25mbGljdFwiKVxuICAgICAgICAgIC5mbGF0TWFwKChyZWNvcmQpID0+IHJlY29yZC5kZXBlbmRlbmNpZXMubWFwKChkZXBlbmRlbmN5KSA9PiBkZXBlbmRlbmN5LmNsaWVudE11dGF0aW9uSWQpKVxuICAgICAgKVxuICAgICAgY29uc3QgdGVybWluYWxSZWNvcmRzID0gcmVjb3Jkc1xuICAgICAgICAuZmlsdGVyKChyZWNvcmQpID0+IFRFUk1JTkFMX1NUQVRVU0VTLmhhcyhyZWNvcmQuc3RhdHVzKSlcbiAgICAgICAgLmZpbHRlcigocmVjb3JkKSA9PiAhcHJvdGVjdGVkQ2xpZW50TXV0YXRpb25JZHMuaGFzKHJlY29yZC5tdXRhdGlvbi5jbGllbnRNdXRhdGlvbklkKSlcbiAgICAgICAgLnNvcnQoY29tcGFyZVJlY29yZHNOZXdlc3RGaXJzdClcbiAgICAgIGNvbnN0IGRlbGV0ZUlkcyA9IG5ldyBTZXQoKVxuXG4gICAgICBpZiAodHlwZW9mIG1heFRlcm1pbmFsUmVjb3JkcyA9PT0gXCJudW1iZXJcIiAmJiBtYXhUZXJtaW5hbFJlY29yZHMgPj0gMCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiB0ZXJtaW5hbFJlY29yZHMuc2xpY2UobWF4VGVybWluYWxSZWNvcmRzKSkgZGVsZXRlSWRzLmFkZChyZWNvcmQuaWQpXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGVybWluYWxSZXRlbnRpb25NcyA9PT0gXCJudW1iZXJcIiAmJiB0ZXJtaW5hbFJldGVudGlvbk1zID49IDApIHtcbiAgICAgICAgY29uc3QgY3V0b2ZmID0gdGhpcy5ub3coKS5nZXRUaW1lKCkgLSB0ZXJtaW5hbFJldGVudGlvbk1zXG5cbiAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgdGVybWluYWxSZWNvcmRzKSB7XG4gICAgICAgICAgaWYgKG5ldyBEYXRlKHJlY29yZC51cGRhdGVkQXQpLmdldFRpbWUoKSA8IGN1dG9mZikgZGVsZXRlSWRzLmFkZChyZWNvcmQuaWQpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVsZXRlZFJlY29yZElkcyA9IEFycmF5LmZyb20oZGVsZXRlSWRzKVxuXG4gICAgICBpZiAoZGVsZXRlZFJlY29yZElkcy5sZW5ndGggPiAwKSBhd2FpdCB0aGlzLnN0b3JhZ2UuZGVsZXRlUmVjb3Jkcyh0aGlzLnN0b3JhZ2VLZXksIGRlbGV0ZWRSZWNvcmRJZHMpXG5cbiAgICAgIHJldHVybiB7ZGVsZXRlZFJlY29yZElkc31cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgbG9nIHRpbWVzdGFtcC5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBDdXJyZW50IElTTyB0aW1lc3RhbXAuXG4gICAqL1xuICBjdXJyZW50VGltZXN0YW1wKCkge1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzLm5vdygpXG5cbiAgICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkgfHwgTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgdGhyb3cgbmV3IEVycm9yKFwiTG9jYWxNdXRhdGlvbkxvZyBub3coKSBtdXN0IHJldHVybiBhIHZhbGlkIERhdGVcIilcblxuICAgIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKClcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgc3RvcmFnZSBhZGFwdGVyIGhhcyBhbGwgcmVxdWlyZWQgcm93LXN0b3JlIG1ldGhvZHMuXG4gKiBAcGFyYW0ge3Vua25vd259IHN0b3JhZ2UgLSBTdG9yYWdlIGFkYXB0ZXIgY2FuZGlkYXRlLlxuICogQHJldHVybnMge3N0b3JhZ2UgaXMgTG9jYWxNdXRhdGlvbkxvZ1N0b3JhZ2V9IC0gV2hldGhlciBzdG9yYWdlIGlzIHZhbGlkLlxuICovXG5mdW5jdGlvbiB2YWxpZFN0b3JhZ2Uoc3RvcmFnZSkge1xuICBpZiAoIXN0b3JhZ2UgfHwgdHlwZW9mIHN0b3JhZ2UgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IHN0b3JhZ2VPYmplY3QgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAoc3RvcmFnZSlcblxuICByZXR1cm4gdHlwZW9mIHN0b3JhZ2VPYmplY3QuYXBwZW5kUmVjb3JkID09PSBcImZ1bmN0aW9uXCJcbiAgICAmJiB0eXBlb2Ygc3RvcmFnZU9iamVjdC5kZWxldGVSZWNvcmRzID09PSBcImZ1bmN0aW9uXCJcbiAgICAmJiB0eXBlb2Ygc3RvcmFnZU9iamVjdC5uZXh0U2VxdWVuY2UgPT09IFwiZnVuY3Rpb25cIlxuICAgICYmIHR5cGVvZiBzdG9yYWdlT2JqZWN0LnJlY29yZCA9PT0gXCJmdW5jdGlvblwiXG4gICAgJiYgdHlwZW9mIHN0b3JhZ2VPYmplY3QucmVjb3JkcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgJiYgdHlwZW9mIHN0b3JhZ2VPYmplY3QudXBkYXRlUmVjb3JkID09PSBcImZ1bmN0aW9uXCJcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgYXV0aG9yaXRhdGl2ZSB2ZXJzaW9uIGZyb20gYSBjb25mbGljdGVkIG11dGF0aW9uLlxuICogQHBhcmFtIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSByZWNvcmQgLSBDb25mbGljdGVkIHJlY29yZC5cbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBudW1iZXIgfCBudWxsfSAtIEF1dGhvcml0YXRpdmUgdmVyc2lvbi5cbiAqL1xuZnVuY3Rpb24gY29uZmxpY3RTZXJ2ZXJWZXJzaW9uKHJlY29yZCkge1xuICBjb25zdCBjb25mbGljdCA9IHJlY29yZC5zeW5jUmVzdWx0Py5jb25mbGljdFxuXG4gIGlmICghY29uZmxpY3QgfHwgY29uZmxpY3QgaW5zdGFuY2VvZiBEYXRlIHx8IHR5cGVvZiBjb25mbGljdCAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGNvbmZsaWN0KSB8fCAhT2JqZWN0Lmhhc093bihjb25mbGljdCwgXCJzZXJ2ZXJWZXJzaW9uXCIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cnkgbG9jYWwgbXV0YXRpb24gJyR7cmVjb3JkLmlkfScgd2l0aG91dCBhIGNvbmZsaWN0IHNlcnZlclZlcnNpb25gKVxuICB9XG5cbiAgY29uc3QgY29uZmxpY3RNZXRhZGF0YSA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovIChjb25mbGljdClcblxuICByZXR1cm4gY2xvbmVCYXNlVmVyc2lvbihjb25mbGljdE1ldGFkYXRhLnNlcnZlclZlcnNpb24pXG59XG5cbi8qKlxuICogU29ydHMgcmVjb3JkcyBieSBuZXdlc3QgdXBkYXRlL3NlcXVlbmNlIGZpcnN0LlxuICogQHBhcmFtIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSBsZWZ0IC0gTGVmdCByZWNvcmQuXG4gKiBAcGFyYW0ge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9IHJpZ2h0IC0gUmlnaHQgcmVjb3JkLlxuICogQHJldHVybnMge251bWJlcn0gLSBTb3J0IHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZVJlY29yZHNOZXdlc3RGaXJzdChsZWZ0LCByaWdodCkge1xuICBjb25zdCB1cGRhdGVkQXRDb21wYXJpc29uID0gcmlnaHQudXBkYXRlZEF0LmxvY2FsZUNvbXBhcmUobGVmdC51cGRhdGVkQXQpXG5cbiAgaWYgKHVwZGF0ZWRBdENvbXBhcmlzb24gIT09IDApIHJldHVybiB1cGRhdGVkQXRDb21wYXJpc29uXG5cbiAgcmV0dXJuIHJpZ2h0LnNlcXVlbmNlIC0gbGVmdC5zZXF1ZW5jZVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYW5kIHNvcnRzIGEgbGlzdCBvZiByZWNvcmRzLlxuICogQHBhcmFtIHt1bmtub3dufSByZWNvcmRzIC0gUmF3IHJlY29yZHMuXG4gKiBAcmV0dXJucyB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZFtdfSAtIE5vcm1hbGl6ZWQgcmVjb3Jkcy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUmVjb3JkTGlzdChyZWNvcmRzKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyZWNvcmRzKSkgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gbG9nIHN0b3JhZ2UgcmVjb3JkcyBhcnJheVwiKVxuXG4gIHJldHVybiByZWNvcmRzXG4gICAgLm1hcChub3JtYWxpemVSZWNvcmQpXG4gICAgLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0LnNlcXVlbmNlIC0gcmlnaHQuc2VxdWVuY2UpXG4gICAgLm1hcCgocmVjb3JkKSA9PiBjbG9uZVJlY29yZChyZWNvcmQpKVxuICAgIC5tYXAocmVzdG9yZVN5bmNSZXN1bHRUeXBlcylcbn1cblxuLyoqXG4gKiBSZXN0b3JlcyB0cmFuc3BvcnQtcmVzdG9yZWQgdHlwZWQgdmFsdWVzIGluIGEgcmVjb3JkJ3Mgc3luY1Jlc3VsdCBhZnRlciB0aGVcbiAqIGZpbmFsIEpTT04gY2xvbmUsIHNvIGNhbGxlcnMgc2VlIERhdGUgKGFuZCBvdGhlciB0eXBlZCkgdmFsdWVzIG9uIGR1cmFibGVcbiAqIHJlYWRiYWNrIGluc3RlYWQgb2YgbWFya2VyLWVuY29kZWQgSVNPIHN0cmluZ3MuXG4gKiBAcGFyYW0ge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9IHJlY29yZCAtIENsb25lZCByZWNvcmQuXG4gKiBAcmV0dXJucyB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gLSBSZWNvcmQgd2l0aCByZXN0b3JlZCBzeW5jUmVzdWx0IHR5cGVzLlxuICovXG5mdW5jdGlvbiByZXN0b3JlU3luY1Jlc3VsdFR5cGVzKHJlY29yZCkge1xuICBpZiAocmVjb3JkLnN5bmNSZXN1bHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHJlY29yZFxuXG4gIHJldHVybiB7XG4gICAgLi4ucmVjb3JkLFxuICAgIHN5bmNSZXN1bHQ6IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL2Jhc2UuanNcIikuRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlPn0gKi8gKFxuICAgICAgZGVzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWUocmVjb3JkLnN5bmNSZXN1bHQpXG4gICAgKVxuICB9XG59XG5cbi8qKlxuICogUnVucyBhIGNhbGxiYWNrIGFmdGVyIGVhcmxpZXIgd3JpdGVzIGZvciB0aGUgc2FtZSBzdG9yYWdlIGtleSBoYXZlIGNvbXBsZXRlZC5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RvcmFnZUtleSAtIFN0b3JhZ2Uga2V5IHRvIHNlcmlhbGl6ZS5cbiAqIEBwYXJhbSB7KCkgPT4gUHJvbWlzZTxUPn0gY2FsbGJhY2sgLSBDYWxsYmFjayB0byBydW4gdW5kZXIgdGhlIHN0b3JhZ2Uta2V5IGxvY2suXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxUPn0gLSBDYWxsYmFjayByZXN1bHQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdpdGhTdG9yYWdlS2V5TG9jayhzdG9yYWdlS2V5LCBjYWxsYmFjaykge1xuICBjb25zdCBwcmV2aW91cyA9IFNUT1JBR0VfS0VZX0xPQ0tTLmdldChzdG9yYWdlS2V5KSB8fCBQcm9taXNlLnJlc29sdmUoKVxuICBsZXQgcmVsZWFzZSA9ICgpID0+IHt9XG4gIGNvbnN0IGN1cnJlbnQgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4geyByZWxlYXNlID0gKCkgPT4gcmVzb2x2ZSh1bmRlZmluZWQpIH0pXG4gIGNvbnN0IGNoYWluZWQgPSBwcmV2aW91cy5jYXRjaCgoX2Vycm9yKSA9PiB7fSkudGhlbigoKSA9PiBjdXJyZW50KVxuXG4gIFNUT1JBR0VfS0VZX0xPQ0tTLnNldChzdG9yYWdlS2V5LCBjaGFpbmVkKVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgcHJldmlvdXMuY2F0Y2goKF9lcnJvcikgPT4ge30pXG5cbiAgICByZXR1cm4gYXdhaXQgY2FsbGJhY2soKVxuICB9IGZpbmFsbHkge1xuICAgIHJlbGVhc2UoKVxuICAgIGlmIChTVE9SQUdFX0tFWV9MT0NLUy5nZXQoc3RvcmFnZUtleSkgPT09IGNoYWluZWQpIFNUT1JBR0VfS0VZX0xPQ0tTLmRlbGV0ZShzdG9yYWdlS2V5KVxuICB9XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBlcnNpc3RlZCBsb2cgcmVjb3JkLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyByZWNvcmQuXG4gKiBAcmV0dXJucyB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gLSBOb3JtYWxpemVkIHJlY29yZC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUmVjb3JkKHZhbHVlKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkIG9iamVjdFwiKVxuXG4gIGNvbnN0IHJlY29yZCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovICh2YWx1ZSlcbiAgY29uc3Qgc3RhdHVzID0gcmVxdWlyZWRTdHJpbmcocmVjb3JkLnN0YXR1cywgXCJzdGF0dXNcIilcblxuICBpZiAoIU1VVEFUSU9OX1NUQVRVU0VTLmhhcyhzdGF0dXMpKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbG9jYWwgbXV0YXRpb24gc3RhdHVzICcke3N0YXR1c30nYClcblxuICBjb25zdCBiYXNlUmVjb3JkID0ge1xuICAgIGNyZWF0ZWRBdDogcmVxdWlyZWRJc29UaW1lc3RhbXAocmVjb3JkLmNyZWF0ZWRBdCwgXCJjcmVhdGVkQXRcIiksXG4gICAgZGVwZW5kZW5jaWVzOiBub3JtYWxpemVEZXBlbmRlbmNpZXMocmVjb3JkLmRlcGVuZGVuY2llcyksXG4gICAgaWQ6IHJlcXVpcmVkU3RyaW5nKHJlY29yZC5pZCwgXCJpZFwiKSxcbiAgICBtdXRhdGlvbjogbm9ybWFsaXplTXV0YXRpb24ocmVjb3JkLm11dGF0aW9uKSxcbiAgICBzZXF1ZW5jZTogcmVxdWlyZWRQb3NpdGl2ZUludGVnZXIocmVjb3JkLnNlcXVlbmNlLCBcInNlcXVlbmNlXCIpLFxuICAgIHN0YXR1czogLyoqIEB0eXBlIHtMb2NhbE11dGF0aW9uU3RhdHVzfSAqLyAoc3RhdHVzKSxcbiAgICB1cGRhdGVkQXQ6IHJlcXVpcmVkSXNvVGltZXN0YW1wKHJlY29yZC51cGRhdGVkQXQsIFwidXBkYXRlZEF0XCIpXG4gIH1cblxuICBpZiAocmVjb3JkLnNpZ25lZE11dGF0aW9uID09PSB1bmRlZmluZWQgJiYgcmVjb3JkLnN5bmNSZXN1bHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGJhc2VSZWNvcmRcblxuICAvKiogQHR5cGUge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9ICovXG4gIGNvbnN0IG5vcm1hbGl6ZWRSZWNvcmQgPSB7Li4uYmFzZVJlY29yZH1cblxuICBpZiAocmVjb3JkLnNpZ25lZE11dGF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBub3JtYWxpemVkUmVjb3JkLnNpZ25lZE11dGF0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TaWduZWRTeW5jTXV0YXRpb259ICovIChjbG9uZUpzb25PYmplY3QocmVjb3JkLnNpZ25lZE11dGF0aW9uLCBcInNpZ25lZE11dGF0aW9uXCIpKVxuICB9XG4gIGlmIChyZWNvcmQuc3luY1Jlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gUGVyc2lzdGVkIHN5bmNSZXN1bHQgaXMgbWFya2VyLWVuY29kZWQgc28gaXQgc3Vydml2ZXMgdGhlIEpTT04gY2xvbmU7XG4gICAgLy8gdHlwZWQgdmFsdWVzIGFyZSByZXN0b3JlZCBieSByZXN0b3JlU3luY1Jlc3VsdFR5cGVzIGF0IHRoZSByZWFkIGJvdW5kYXJ5LlxuICAgIG5vcm1hbGl6ZWRSZWNvcmQuc3luY1Jlc3VsdCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL2Jhc2UuanNcIikuRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlPn0gKi8gKFxuICAgICAgY2xvbmVKc29uT2JqZWN0KHJlY29yZC5zeW5jUmVzdWx0LCBcInN5bmNSZXN1bHRcIilcbiAgICApXG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZFJlY29yZFxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgZGVwZW5kZW5jeSBtZXRhZGF0YSBlbnRyaWVzLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyBkZXBlbmRlbmNpZXMuXG4gKiBAcmV0dXJucyB7TG9jYWxNdXRhdGlvbkRlcGVuZGVuY3lbXX0gLSBOb3JtYWxpemVkIGRlcGVuZGVuY2llcy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRGVwZW5kZW5jaWVzKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gW11cbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gZGVwZW5kZW5jaWVzIGFycmF5XCIpXG5cbiAgcmV0dXJuIHZhbHVlLm1hcCgoZGVwZW5kZW5jeSkgPT4ge1xuICAgIGlmICghZGVwZW5kZW5jeSB8fCB0eXBlb2YgZGVwZW5kZW5jeSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGRlcGVuZGVuY3kpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiBkZXBlbmRlbmN5IG9iamVjdFwiKVxuICAgIH1cblxuICAgIGNvbnN0IGRlcGVuZGVuY3lPYmplY3QgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAoZGVwZW5kZW5jeSlcblxuICAgIHJldHVybiB7XG4gICAgICBjbGllbnRNdXRhdGlvbklkOiByZXF1aXJlZFN0cmluZyhkZXBlbmRlbmN5T2JqZWN0LmNsaWVudE11dGF0aW9uSWQsIFwiZGVwZW5kZW5jeSBjbGllbnRNdXRhdGlvbklkXCIpLFxuICAgICAgbW9kZWw6IHJlcXVpcmVkU3RyaW5nKGRlcGVuZGVuY3lPYmplY3QubW9kZWwsIFwiZGVwZW5kZW5jeSBtb2RlbFwiKVxuICAgIH1cbiAgfSlcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgc3luYyBtdXRhdGlvbiBwYXlsb2FkLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyBtdXRhdGlvbi5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TeW5jTXV0YXRpb259IC0gTm9ybWFsaXplZCBtdXRhdGlvbi5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTXV0YXRpb24odmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGxvY2FsIHN5bmMgbXV0YXRpb24gb2JqZWN0XCIpXG5cbiAgY29uc3QgbXV0YXRpb24gPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAodmFsdWUpXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSAvKiogQHR5cGUge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbn0gKi8gKHtcbiAgICBhY3RvckRldmljZUlkOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5hY3RvckRldmljZUlkLCBcImFjdG9yRGV2aWNlSWRcIiksXG4gICAgYWN0b3JVc2VySWQ6IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLmFjdG9yVXNlcklkLCBcImFjdG9yVXNlcklkXCIpLFxuICAgIGNsaWVudE11dGF0aW9uSWQ6IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLmNsaWVudE11dGF0aW9uSWQsIFwiY2xpZW50TXV0YXRpb25JZFwiKSxcbiAgICBtb2RlbDogcmVxdWlyZWRTdHJpbmcobXV0YXRpb24ubW9kZWwsIFwibW9kZWxcIiksXG4gICAgb2NjdXJyZWRBdDogcmVxdWlyZWRJc29UaW1lc3RhbXAobXV0YXRpb24ub2NjdXJyZWRBdCwgXCJvY2N1cnJlZEF0XCIpLFxuICAgIG9mZmxpbmVHcmFudElkOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5vZmZsaW5lR3JhbnRJZCwgXCJvZmZsaW5lR3JhbnRJZFwiKSxcbiAgICBvcGVyYXRpb246IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLm9wZXJhdGlvbiwgXCJvcGVyYXRpb25cIiksXG4gICAgcG9saWN5SGFzaDogcmVxdWlyZWRTdHJpbmcobXV0YXRpb24ucG9saWN5SGFzaCwgXCJwb2xpY3lIYXNoXCIpXG4gIH0pXG5cbiAgaWYgKG11dGF0aW9uLmF0dHJpYnV0ZXMgIT09IHVuZGVmaW5lZCkgbm9ybWFsaXplZC5hdHRyaWJ1dGVzID0gY2xvbmVKc29uT2JqZWN0KG11dGF0aW9uLmF0dHJpYnV0ZXMsIFwiYXR0cmlidXRlc1wiKVxuICBpZiAobXV0YXRpb24uYmFzZVZlcnNpb24gIT09IHVuZGVmaW5lZCkgbm9ybWFsaXplZC5iYXNlVmVyc2lvbiA9IGNsb25lQmFzZVZlcnNpb24obXV0YXRpb24uYmFzZVZlcnNpb24pXG4gIGlmIChtdXRhdGlvbi5jb21tYW5kICE9PSB1bmRlZmluZWQpIG5vcm1hbGl6ZWQuY29tbWFuZCA9IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLmNvbW1hbmQsIFwiY29tbWFuZFwiKVxuICBpZiAobXV0YXRpb24ucGF5bG9hZCAhPT0gdW5kZWZpbmVkKSBub3JtYWxpemVkLnBheWxvYWQgPSBjbG9uZUpzb25PYmplY3QobXV0YXRpb24ucGF5bG9hZCwgXCJwYXlsb2FkXCIpXG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhIG5vbi1lbXB0eSBzdHJpbmcgdmFsdWUuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIC0gRmllbGQgbGFiZWwuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFJlcXVpcmVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZWRTdHJpbmcodmFsdWUsIGxhYmVsKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgfHwgdmFsdWUubGVuZ3RoIDwgMSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiAke2xhYmVsfWApXG5cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogUmVxdWlyZXMgYW4gSVNPIHRpbWVzdGFtcCBzdHJpbmcuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIC0gRmllbGQgbGFiZWwuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIElTTyB0aW1lc3RhbXAuXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVkSXNvVGltZXN0YW1wKHZhbHVlLCBsYWJlbCkge1xuICBjb25zdCBzdHJpbmdWYWx1ZSA9IHJlcXVpcmVkU3RyaW5nKHZhbHVlLCBsYWJlbClcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHN0cmluZ1ZhbHVlKVxuXG4gIGlmIChOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpIHx8IGRhdGUudG9JU09TdHJpbmcoKSAhPT0gc3RyaW5nVmFsdWUpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gJHtsYWJlbH0gSVNPIHRpbWVzdGFtcGApXG5cbiAgcmV0dXJuIHN0cmluZ1ZhbHVlXG59XG5cbi8qKlxuICogUmVxdWlyZXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIEZpZWxkIGxhYmVsLlxuICogQHJldHVybnMge251bWJlcn0gLSBQb3NpdGl2ZSBpbnRlZ2VyLlxuICovXG5mdW5jdGlvbiByZXF1aXJlZFBvc2l0aXZlSW50ZWdlcih2YWx1ZSwgbGFiZWwpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJudW1iZXJcIiB8fCAhTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgfHwgdmFsdWUgPCAxKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGxvY2FsIG11dGF0aW9uICR7bGFiZWx9IHBvc2l0aXZlIGludGVnZXJgKVxuXG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIENsb25lcyBhIHN1cHBvcnRlZCBiYXNlLXZlcnNpb24gdmFsdWUuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IGJhc2UgdmVyc2lvbi5cbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBudW1iZXIgfCBudWxsfSAtIE5vcm1hbGl6ZWQgYmFzZSB2ZXJzaW9uLlxuICovXG5mdW5jdGlvbiBjbG9uZUJhc2VWZXJzaW9uKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSByZXR1cm4gdmFsdWVcblxuICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiBiYXNlVmVyc2lvbiBzdHJpbmcsIG51bWJlciwgb3IgbnVsbFwiKVxufVxuXG4vKipcbiAqIENsb25lcyBhIEpTT04tY29tcGF0aWJsZSB2YWx1ZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgSlNPTiB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIEZpZWxkIGxhYmVsLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFN5bmNKc29uVmFsdWV9IC0gQ2xvbmVkIEpTT04gdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGNsb25lSnNvblZhbHVlKHZhbHVlLCBsYWJlbCkge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBKU09OLWNvbXBhdGlibGUgbG9jYWwgbXV0YXRpb24gJHtsYWJlbH1gKVxuXG4gIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFN5bmNKc29uVmFsdWV9ICovIChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSkpXG59XG5cbi8qKlxuICogQ2xvbmVzIGEgSlNPTi1jb21wYXRpYmxlIG9iamVjdC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgSlNPTiBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBGaWVsZCBsYWJlbC5cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlPn0gLSBDbG9uZWQgSlNPTiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGNsb25lSnNvbk9iamVjdCh2YWx1ZSwgbGFiZWwpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gJHtsYWJlbH0gb2JqZWN0YClcblxuICByZXR1cm4gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlPn0gKi8gKGNsb25lSnNvblZhbHVlKHZhbHVlLCBsYWJlbCkpXG59XG5cbi8qKlxuICogQ2xvbmVzIGEgbG9jYWwgbXV0YXRpb24gbG9nIHJlY29yZC5cbiAqIEBwYXJhbSB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gcmVjb3JkIC0gUmVjb3JkIHRvIGNsb25lLlxuICogQHJldHVybnMge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9IC0gQ2xvbmVkIHJlY29yZC5cbiAqL1xuZnVuY3Rpb24gY2xvbmVSZWNvcmQocmVjb3JkKSB7XG4gIHJldHVybiAvKiogQHR5cGUge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9ICovIChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlY29yZCkpKVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSBsb2NhbCBtdXRhdGlvbiByZWNvcmQgaWQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFJhbmRvbSByZWNvcmQgaWQuXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbVJlY29yZElkKCkge1xuICBjb25zdCBjcnlwdG9Qcm92aWRlciA9IGdsb2JhbFRoaXMuY3J5cHRvXG5cbiAgaWYgKGNyeXB0b1Byb3ZpZGVyICYmIHR5cGVvZiBjcnlwdG9Qcm92aWRlci5yYW5kb21VVUlEID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBjcnlwdG9Qcm92aWRlci5yYW5kb21VVUlEKClcblxuICByZXR1cm4gYGxvY2FsLW11dGF0aW9uLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KS5zbGljZSgyKX1gXG59XG4iXX0=
|
|
@@ -42,12 +42,13 @@ export default class SyncApiClient {
|
|
|
42
42
|
* @param {number} [args.batchSize] - Batch size.
|
|
43
43
|
* @param {import("./sync-client-types.js").SyncClientConflictTrackingConfig} args.conflictTracking - Tracking configuration.
|
|
44
44
|
* @param {(payload: {authenticationToken: string, syncs: Array<Record<string, ReturnType<typeof JSON.parse>>>}, options?: {signal?: AbortSignal}) => Promise<SyncReplayResponse>} args.postReplay - Transport boundary.
|
|
45
|
+
* @param {(args: {record: import("./local-mutation-log.js").LocalMutationLogRecord, result: SyncReplayItem}) => Promise<void>} [args.applyConflict] - Applies authoritative conflict state to the local replica before preserving the rejected intent.
|
|
45
46
|
* @param {(identity: string) => number} args.remoteGeneration - Current remote generation.
|
|
46
47
|
* @param {string} args.resourceType - Resource whose log records should drain.
|
|
47
48
|
* @param {AbortSignal} [args.signal] - Lifecycle cancellation signal.
|
|
48
49
|
* @returns {Promise<void>} Resolves when no ready intent remains.
|
|
49
50
|
*/
|
|
50
|
-
static replayConflictTrackedSyncs({ authenticationToken, batchSize, conflictTracking, postReplay, remoteGeneration, resourceType, signal }: {
|
|
51
|
+
static replayConflictTrackedSyncs({ applyConflict, authenticationToken, batchSize, conflictTracking, postReplay, remoteGeneration, resourceType, signal }: {
|
|
51
52
|
authenticationToken: string;
|
|
52
53
|
batchSize?: number;
|
|
53
54
|
conflictTracking: import("./sync-client-types.js").SyncClientConflictTrackingConfig;
|
|
@@ -57,6 +58,10 @@ export default class SyncApiClient {
|
|
|
57
58
|
}, options?: {
|
|
58
59
|
signal?: AbortSignal;
|
|
59
60
|
}) => Promise<SyncReplayResponse>;
|
|
61
|
+
applyConflict?: (args: {
|
|
62
|
+
record: import("./local-mutation-log.js").LocalMutationLogRecord;
|
|
63
|
+
result: SyncReplayItem;
|
|
64
|
+
}) => Promise<void>;
|
|
60
65
|
remoteGeneration: (identity: string) => number;
|
|
61
66
|
resourceType: string;
|
|
62
67
|
signal?: AbortSignal;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-api-client.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-api-client.js"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sync-api-client.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-api-client.js"],"names":[],"mappings":"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"}
|