@bitgo-beta/sdk-coin-sol 7.6.4-beta.312 → 7.6.4-beta.314
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.
|
@@ -143,7 +143,7 @@ function tokenTransferInstruction(data) {
|
|
|
143
143
|
let tokenAddress;
|
|
144
144
|
let programId;
|
|
145
145
|
let decimalPlaces;
|
|
146
|
-
if (data.params.tokenAddress && data.params.decimalPlaces) {
|
|
146
|
+
if (data.params.tokenAddress && data.params.decimalPlaces != null) {
|
|
147
147
|
tokenAddress = data.params.tokenAddress;
|
|
148
148
|
decimalPlaces = data.params.decimalPlaces;
|
|
149
149
|
programId = data.params.programId;
|
|
@@ -592,4 +592,4 @@ function addTransferHookAccounts(instruction, transferHook) {
|
|
|
592
592
|
upsertAccountMeta(instruction.keys, meta);
|
|
593
593
|
}
|
|
594
594
|
}
|
|
595
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sSW5zdHJ1Y3Rpb25GYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zb2xJbnN0cnVjdGlvbkZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUEyREEsc0RBMkNDO0FBdEdELHNEQUF5RDtBQUN6RCxpREFBOEM7QUFDOUMsaURBUzJCO0FBQzNCLDZDQVd5QjtBQUN6QixvREFBNEI7QUFDNUIsZ0VBQXFDO0FBQ3JDLDJDQUF1RTtBQXVCdkUsbUNBQThFO0FBQzlFLHVFQUE4RjtBQUM5Rix1REFBMkU7QUFFM0U7Ozs7O0dBS0c7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxrQkFBcUM7SUFDekUsUUFBUSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQyxLQUFLLG1DQUF1QixDQUFDLFlBQVk7WUFDdkMsT0FBTyx1QkFBdUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3JELEtBQUssbUNBQXVCLENBQUMsSUFBSTtZQUMvQixPQUFPLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzdDLEtBQUssbUNBQXVCLENBQUMsUUFBUTtZQUNuQyxPQUFPLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDakQsS0FBSyxtQ0FBdUIsQ0FBQyxhQUFhO1lBQ3hDLE9BQU8sd0JBQXdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN0RCxLQUFLLG1DQUF1QixDQUFDLE9BQU87WUFDbEMsT0FBTyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2hELEtBQUssbUNBQXVCLENBQUMsa0JBQWtCO1lBQzdDLE9BQU8sNkJBQTZCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMzRCxLQUFLLG1DQUF1QixDQUFDLGVBQWU7WUFDMUMsT0FBTyw0QkFBNEIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFELEtBQUssbUNBQXVCLENBQUMsaUJBQWlCO1lBQzVDLE9BQU8sNEJBQTRC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LFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pELENBQUM7U0FBTSxDQUFDO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsK0JBQStCLENBQUMsWUFBZ0M7SUFDdkUsTUFBTSxLQUFLLEdBQWtCLEVBQUUsQ0FBQztJQUNoQyxJQUFJLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUMzQyxLQUFLLE1BQU0sSUFBSSxJQUFJLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2xELEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ1QsTUFBTSxFQUFFLElBQUksbUJBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUNsQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTthQUM1QixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQUMsV0FBbUMsRUFBRSxZQUFnQztJQUNwRyxNQUFNLFVBQVUsR0FBRywrQkFBK0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqRSxLQUFLLE1BQU0sSUFBSSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzlCLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTb2xTdGFraW5nVHlwZUVudW0gfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7IFNvbENvaW4gfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7XG4gIGNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnRJbnN0cnVjdGlvbixcbiAgY3JlYXRlQ2xvc2VBY2NvdW50SW5zdHJ1Y3Rpb24sXG4gIGNyZWF0ZU1pbnRUb0luc3RydWN0aW9uLFxuICBjcmVhdGVCdXJuSW5zdHJ1Y3Rpb24sXG4gIGNyZWF0ZVJlY292ZXJOZXN0ZWRJbnN0cnVjdGlvbixcbiAgY3JlYXRlVHJhbnNmZXJDaGVja2VkSW5zdHJ1Y3Rpb24sXG4gIFRPS0VOXzIwMjJfUFJPR1JBTV9JRCxcbiAgY3JlYXRlQXBwcm92ZUluc3RydWN0aW9uLFxufSBmcm9tICdAc29sYW5hL3NwbC10b2tlbic7XG5pbXBvcnQge1xuICBBY2NvdW50TWV0YSxcbiAgQXV0aG9yaXplZCxcbiAgTG9ja3VwLFxuICBQdWJsaWNLZXksXG4gIFN0YWtlQXV0aG9yaXphdGlvbkxheW91dCxcbiAgU3Rha2VQcm9ncmFtLFxuICBTeXN0ZW1Qcm9ncmFtLFxuICBUcmFuc2FjdGlvbixcbiAgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbixcbiAgQ29tcHV0ZUJ1ZGdldFByb2dyYW0sXG59IGZyb20gJ0Bzb2xhbmEvd2ViMy5qcyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcywgTUVNT19QUk9HUkFNX1BLIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgQXRhQ2xvc2UsXG4gIEF0YUluaXQsXG4gIEF0YVJlY292ZXJOZXN0ZWQsXG4gIEluc3RydWN0aW9uUGFyYW1zLFxuICBNZW1vLFxuICBNaW50VG8sXG4gIEJ1cm4sXG4gIE5vbmNlLFxuICBTdGFraW5nQWN0aXZhdGUsXG4gIFN0YWtpbmdBdXRob3JpemUsXG4gIFN0YWtpbmdEZWFjdGl2YXRlLFxuICBTdGFraW5nRGVsZWdhdGUsXG4gIFN0YWtpbmdXaXRoZHJhdyxcbiAgVG9rZW5UcmFuc2ZlcixcbiAgVHJhbnNmZXIsXG4gIFdhbGxldEluaXQsXG4gIFNldENvbXB1dGVVbml0TGltaXQsXG4gIFNldFByaW9yaXR5RmVlLFxuICBDdXN0b21JbnN0cnVjdGlvbixcbiAgQXBwcm92ZSxcbn0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBnZXRTb2xUb2tlbkZyb21Ub2tlbk5hbWUsIGlzVmFsaWRCYXNlNjQsIGlzVmFsaWRIZXggfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGRlcG9zaXRTb2xJbnN0cnVjdGlvbnMsIHdpdGhkcmF3U3Rha2VJbnN0cnVjdGlvbnMgfSBmcm9tICcuL2ppdG9TdGFrZVBvb2xPcGVyYXRpb25zJztcbmltcG9ydCB7IGdldFRva2VuMjAyMkNvbmZpZywgVHJhbnNmZXJIb29rQ29uZmlnIH0gZnJvbSAnLi90b2tlbjIwMjJDb25maWcnO1xuXG4vKipcbiAqIENvbnN0cnVjdCBTb2xhbmEgaW5zdHJ1Y3Rpb25zIGZyb20gaW5zdHJ1Y3Rpb25zIHBhcmFtc1xuICpcbiAqIEBwYXJhbSB7SW5zdHJ1Y3Rpb25QYXJhbXN9IGluc3RydWN0aW9uVG9CdWlsZCAtIHRoZSBkYXRhIGNvbnRhaW5pbmcgdGhlIGluc3RydWN0aW9uIHBhcmFtc1xuICogQHJldHVybnMge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gQW4gYXJyYXkgY29udGFpbmluZyBzdXBwb3J0ZWQgU29sYW5hIGluc3RydWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc29sSW5zdHJ1Y3Rpb25GYWN0b3J5KGluc3RydWN0aW9uVG9CdWlsZDogSW5zdHJ1Y3Rpb25QYXJhbXMpOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBzd2l0Y2ggKGluc3RydWN0aW9uVG9CdWlsZC50eXBlKSB7XG4gICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5Ob25jZUFkdmFuY2U6XG4gICAgICByZXR1cm4gYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk1lbW86XG4gICAgICByZXR1cm4gbWVtb0luc3RydWN0aW9uKGluc3RydWN0aW9uVG9CdWlsZCk7XG4gICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5UcmFuc2ZlcjpcbiAgICAgIHJldHVybiB0cmFuc2Zlckluc3RydWN0aW9uKGluc3RydWN0aW9uVG9CdWlsZCk7XG4gICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5Ub2tlblRyYW5zZmVyOlxuICAgICAgcmV0dXJuIHRva2VuVHJhbnNmZXJJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQXBwcm92ZTpcbiAgICAgIHJldHVybiBhcHByb3ZlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNyZWF0ZU5vbmNlQWNjb3VudDpcbiAgICAgIHJldHVybiBjcmVhdGVOb25jZUFjY291bnRJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ0FjdGl2YXRlOlxuICAgICAgcmV0dXJuIHN0YWtpbmdJbml0aWFsaXplSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlN0YWtpbmdEZWFjdGl2YXRlOlxuICAgICAgcmV0dXJuIHN0YWtpbmdEZWFjdGl2YXRlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlN0YWtpbmdXaXRoZHJhdzpcbiAgICAgIHJldHVybiBzdGFraW5nV2l0aGRyYXdJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudDpcbiAgICAgIHJldHVybiBjcmVhdGVBVEFJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50OlxuICAgICAgcmV0dXJuIGNsb3NlQVRBSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlJlY292ZXJOZXN0ZWRBc3NvY2lhdGVkVG9rZW5BY2NvdW50OlxuICAgICAgcmV0dXJuIHJlY292ZXJOZXN0ZWRBVEFJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ0F1dGhvcml6ZTpcbiAgICAgIHJldHVybiBzdGFraW5nQXV0aG9yaXplSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlN0YWtpbmdEZWxlZ2F0ZTpcbiAgICAgIHJldHVybiBzdGFraW5nRGVsZWdhdGVJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU2V0Q29tcHV0ZVVuaXRMaW1pdDpcbiAgICAgIHJldHVybiBzZXRDb21wdXRlVW5pdExpbWl0SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlNldFByaW9yaXR5RmVlOlxuICAgICAgcmV0dXJuIGZldGNoUHJpb3JpdHlGZWVJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuTWludFRvOlxuICAgICAgcmV0dXJuIG1pbnRUb0luc3RydWN0aW9uKGluc3RydWN0aW9uVG9CdWlsZCk7XG4gICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5CdXJuOlxuICAgICAgcmV0dXJuIGJ1cm5JbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ3VzdG9tSW5zdHJ1Y3Rpb246XG4gICAgICByZXR1cm4gY3VzdG9tSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGluc3RydWN0aW9uIHR5cGUgb3Igbm90IHN1cHBvcnRlZGApO1xuICB9XG59XG5cbi8qKlxuICogQ29uc3RydWN0IEFkdmFuY2UgTm9uY2UgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7Tm9uY2V9IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgQWR2YW5jZSBOb25jZSBTb2xhbmEgaW5zdHJ1Y3Rpb25cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24oZGF0YTogTm9uY2UpOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBjb25zdCB7XG4gICAgcGFyYW1zOiB7IGF1dGhXYWxsZXRBZGRyZXNzLCB3YWxsZXROb25jZUFkZHJlc3MgfSxcbiAgfSA9IGRhdGE7XG4gIGFzc2VydChhdXRoV2FsbGV0QWRkcmVzcywgJ01pc3NpbmcgYXV0aFdhbGxldEFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KHdhbGxldE5vbmNlQWRkcmVzcywgJ01pc3Npbmcgd2FsbGV0Tm9uY2VBZGRyZXNzIHBhcmFtJyk7XG4gIGNvbnN0IG5vbmNlSW5zdHJ1Y3Rpb24gPSBTeXN0ZW1Qcm9ncmFtLm5vbmNlQWR2YW5jZSh7XG4gICAgbm9uY2VQdWJrZXk6IG5ldyBQdWJsaWNLZXkod2FsbGV0Tm9uY2VBZGRyZXNzKSxcbiAgICBhdXRob3JpemVkUHVia2V5OiBuZXcgUHVibGljS2V5KGF1dGhXYWxsZXRBZGRyZXNzKSxcbiAgfSk7XG4gIHJldHVybiBbbm9uY2VJbnN0cnVjdGlvbl07XG59XG5cbmZ1bmN0aW9uIHNldENvbXB1dGVVbml0TGltaXRJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQ6IFNldENvbXB1dGVVbml0TGltaXQpOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBjb25zdCBzZXRDb21wdXRlVW5pdExpbWl0ID0gQ29tcHV0ZUJ1ZGdldFByb2dyYW0uc2V0Q29tcHV0ZVVuaXRMaW1pdCh7XG4gICAgdW5pdHM6IGluc3RydWN0aW9uVG9CdWlsZC5wYXJhbXMudW5pdHMsXG4gIH0pO1xuXG4gIHJldHVybiBbc2V0Q29tcHV0ZVVuaXRMaW1pdF07XG59XG5cbmZ1bmN0aW9uIGZldGNoUHJpb3JpdHlGZWVJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQ6IFNldFByaW9yaXR5RmVlKTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdIHtcbiAgY29uc3QgYWRkUHJpb3JpdHlGZWUgPSBDb21wdXRlQnVkZ2V0UHJvZ3JhbS5zZXRDb21wdXRlVW5pdFByaWNlKHtcbiAgICBtaWNyb0xhbXBvcnRzOiBpbnN0cnVjdGlvblRvQnVpbGQucGFyYW1zLmZlZSxcbiAgfSk7XG5cbiAgcmV0dXJuIFthZGRQcmlvcml0eUZlZV07XG59XG5cbi8qKlxuICogQ29uc3RydWN0IE1lbW8gU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7TWVtb30gZGF0YSAtIHRoZSBkYXRhIHRvIGJ1aWxkIHRoZSBpbnN0cnVjdGlvblxuICogQHJldHVybnMge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gQW4gYXJyYXkgY29udGFpbmluZyBNZW1vIFNvbGFuYSBpbnN0cnVjdGlvblxuICovXG5mdW5jdGlvbiBtZW1vSW5zdHJ1Y3Rpb24oZGF0YTogTWVtbyk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHsgbWVtbyB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KG1lbW8sICdNaXNzaW5nIG1lbW8gcGFyYW0nKTtcbiAgY29uc3QgbWVtb0luc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24oe1xuICAgIGtleXM6IFtdLFxuICAgIHByb2dyYW1JZDogbmV3IFB1YmxpY0tleShNRU1PX1BST0dSQU1fUEspLFxuICAgIGRhdGE6IEJ1ZmZlci5mcm9tKG1lbW8pLFxuICB9KTtcbiAgcmV0dXJuIFttZW1vSW5zdHJ1Y3Rpb25dO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBUcmFuc2ZlciBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKlxuICogQHBhcmFtIHtUcmFuc2Zlcn0gZGF0YSAtIHRoZSBkYXRhIHRvIGJ1aWxkIHRoZSBpbnN0cnVjdGlvblxuICogQHJldHVybnMge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gQW4gYXJyYXkgY29udGFpbmluZyBUcmFuc2ZlciBTb2xhbmEgaW5zdHJ1Y3Rpb25cbiAqL1xuZnVuY3Rpb24gdHJhbnNmZXJJbnN0cnVjdGlvbihkYXRhOiBUcmFuc2Zlcik6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHsgZnJvbUFkZHJlc3MsIHRvQWRkcmVzcywgYW1vdW50IH0sXG4gIH0gPSBkYXRhO1xuICBhc3NlcnQoZnJvbUFkZHJlc3MsICdNaXNzaW5nIGZyb21BZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydCh0b0FkZHJlc3MsICdNaXNzaW5nIHRvQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoYW1vdW50LCAnTWlzc2luZyB0b0FkZHJlc3MgcGFyYW0nKTtcbiAgY29uc3QgdHJhbnNmZXJJbnN0cnVjdGlvbiA9IFN5c3RlbVByb2dyYW0udHJhbnNmZXIoe1xuICAgIGZyb21QdWJrZXk6IG5ldyBQdWJsaWNLZXkoZnJvbUFkZHJlc3MpLFxuICAgIHRvUHVia2V5OiBuZXcgUHVibGljS2V5KHRvQWRkcmVzcyksXG4gICAgbGFtcG9ydHM6IHBhcnNlSW50KGFtb3VudCwgMTApLFxuICB9KTtcbiAgcmV0dXJuIFt0cmFuc2Zlckluc3RydWN0aW9uXTtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgVHJhbnNmZXIgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7VHJhbnNmZXJ9IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgVHJhbnNmZXIgU29sYW5hIGluc3RydWN0aW9uXG4gKi9cbmZ1bmN0aW9uIHRva2VuVHJhbnNmZXJJbnN0cnVjdGlvbihkYXRhOiBUb2tlblRyYW5zZmVyKTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdIHtcbiAgY29uc3Qge1xuICAgIHBhcmFtczogeyBmcm9tQWRkcmVzcywgdG9BZGRyZXNzLCBhbW91bnQsIHRva2VuTmFtZSwgc291cmNlQWRkcmVzcyB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KGZyb21BZGRyZXNzLCAnTWlzc2luZyBmcm9tQWRkcmVzcyAob3duZXIpIHBhcmFtJyk7XG4gIGFzc2VydCh0b0FkZHJlc3MsICdNaXNzaW5nIHRvQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoYW1vdW50LCAnTWlzc2luZyBhbW91bnQgcGFyYW0nKTtcbiAgYXNzZXJ0KHRva2VuTmFtZSwgJ01pc3NpbmcgdG9rZW4gbmFtZScpO1xuICBhc3NlcnQoc291cmNlQWRkcmVzcywgJ01pc3NpbmcgYXRhIGFkZHJlc3MnKTtcbiAgY29uc3QgdG9rZW4gPSBnZXRTb2xUb2tlbkZyb21Ub2tlbk5hbWUoZGF0YS5wYXJhbXMudG9rZW5OYW1lKTtcbiAgbGV0IHRva2VuQWRkcmVzczogc3RyaW5nO1xuICBsZXQgcHJvZ3JhbUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGxldCBkZWNpbWFsUGxhY2VzOiBudW1iZXI7XG4gIGlmIChkYXRhLnBhcmFtcy50b2tlbkFkZHJlc3MgJiYgZGF0YS5wYXJhbXMuZGVjaW1hbFBsYWNlcykge1xuICAgIHRva2VuQWRkcmVzcyA9IGRhdGEucGFyYW1zLnRva2VuQWRkcmVzcztcbiAgICBkZWNpbWFsUGxhY2VzID0gZGF0YS5wYXJhbXMuZGVjaW1hbFBsYWNlcztcbiAgICBwcm9ncmFtSWQgPSBkYXRhLnBhcmFtcy5wcm9ncmFtSWQ7XG4gIH0gZWxzZSBpZiAodG9rZW4pIHtcbiAgICBhc3NlcnQodG9rZW4gaW5zdGFuY2VvZiBTb2xDb2luKTtcbiAgICB0b2tlbkFkZHJlc3MgPSB0b2tlbi50b2tlbkFkZHJlc3M7XG4gICAgZGVjaW1hbFBsYWNlcyA9IHRva2VuLmRlY2ltYWxQbGFjZXM7XG4gICAgcHJvZ3JhbUlkID0gdG9rZW4ucHJvZ3JhbUlkO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0b2tlbiBuYW1lLCBnb3Q6JyArIGRhdGEucGFyYW1zLnRva2VuTmFtZSk7XG4gIH1cblxuICBsZXQgdHJhbnNmZXJJbnN0cnVjdGlvbjogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbjtcbiAgY29uc3QgaW5zdHJ1Y3Rpb25zOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10gPSBbXTtcblxuICBpZiAocHJvZ3JhbUlkID09PSBUT0tFTl8yMDIyX1BST0dSQU1fSUQudG9TdHJpbmcoKSkge1xuICAgIC8vIENyZWF0ZSB0aGUgYmFzZSB0cmFuc2ZlciBpbnN0cnVjdGlvblxuICAgIHRyYW5zZmVySW5zdHJ1Y3Rpb24gPSBjcmVhdGVUcmFuc2ZlckNoZWNrZWRJbnN0cnVjdGlvbihcbiAgICAgIG5ldyBQdWJsaWNLZXkoc291cmNlQWRkcmVzcyksXG4gICAgICBuZXcgUHVibGljS2V5KHRva2VuQWRkcmVzcyksXG4gICAgICBuZXcgUHVibGljS2V5KHRvQWRkcmVzcyksXG4gICAgICBuZXcgUHVibGljS2V5KGZyb21BZGRyZXNzKSxcbiAgICAgIEJpZ0ludChhbW91bnQpLFxuICAgICAgZGVjaW1hbFBsYWNlcyxcbiAgICAgIFtdLFxuICAgICAgVE9LRU5fMjAyMl9QUk9HUkFNX0lEXG4gICAgKTtcbiAgICAvLyBDaGVjayBpZiB0aGlzIHRva2VuIGhhcyBhIHRyYW5zZmVyIGhvb2sgY29uZmlndXJhdGlvblxuICAgIGNvbnN0IHRva2VuQ29uZmlnID0gZ2V0VG9rZW4yMDIyQ29uZmlnKHRva2VuQWRkcmVzcyk7XG4gICAgaWYgKHRva2VuQ29uZmlnPy50cmFuc2Zlckhvb2spIHtcbiAgICAgIGFkZFRyYW5zZmVySG9va0FjY291bnRzKHRyYW5zZmVySW5zdHJ1Y3Rpb24sIHRva2VuQ29uZmlnLnRyYW5zZmVySG9vayk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRyYW5zZmVySW5zdHJ1Y3Rpb24gPSBjcmVhdGVUcmFuc2ZlckNoZWNrZWRJbnN0cnVjdGlvbihcbiAgICAgIG5ldyBQdWJsaWNLZXkoc291cmNlQWRkcmVzcyksXG4gICAgICBuZXcgUHVibGljS2V5KHRva2VuQWRkcmVzcyksXG4gICAgICBuZXcgUHVibGljS2V5KHRvQWRkcmVzcyksXG4gICAgICBuZXcgUHVibGljS2V5KGZyb21BZGRyZXNzKSxcbiAgICAgIEJpZ0ludChhbW91bnQpLFxuICAgICAgZGVjaW1hbFBsYWNlc1xuICAgICk7XG4gIH1cbiAgaW5zdHJ1Y3Rpb25zLnB1c2godHJhbnNmZXJJbnN0cnVjdGlvbik7XG4gIHJldHVybiBpbnN0cnVjdGlvbnM7XG59XG5cbi8qKlxuICogQ29uc3RydWN0IFRyYW5zZmVyIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1RyYW5zZmVyfSBkYXRhIC0gdGhlIGRhdGEgdG8gYnVpbGQgdGhlIGluc3RydWN0aW9uXG4gKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBBbiBhcnJheSBjb250YWluaW5nIFRyYW5zZmVyIFNvbGFuYSBpbnN0cnVjdGlvblxuICovXG5mdW5jdGlvbiBhcHByb3ZlSW5zdHJ1Y3Rpb24oZGF0YTogQXBwcm92ZSk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHsgYWNjb3VudEFkZHJlc3MsIGRlbGVnYXRlQWRkcmVzcywgb3duZXJBZGRyZXNzLCBhbW91bnQsIHByb2dyYW1JZCB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KGFjY291bnRBZGRyZXNzLCAnTWlzc2luZyBmcm9tQWRkcmVzcyAob3duZXIpIHBhcmFtJyk7XG4gIGFzc2VydChkZWxlZ2F0ZUFkZHJlc3MsICdNaXNzaW5nIHRvQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQob3duZXJBZGRyZXNzLCAnTWlzc2luZyBvd25lckFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KHByb2dyYW1JZCwgJ01pc3NpbmcgcHJvZ3JhbUlkIHBhcmFtJyk7XG4gIGFzc2VydChhbW91bnQsICdNaXNzaW5nIGFtb3VudCBwYXJhbScpO1xuICByZXR1cm4gW1xuICAgIGNyZWF0ZUFwcHJvdmVJbnN0cnVjdGlvbihcbiAgICAgIG5ldyBQdWJsaWNLZXkoYWNjb3VudEFkZHJlc3MpLFxuICAgICAgbmV3IFB1YmxpY0tleShkZWxlZ2F0ZUFkZHJlc3MpLFxuICAgICAgbmV3IFB1YmxpY0tleShvd25lckFkZHJlc3MpLFxuICAgICAgQmlnSW50KGFtb3VudCksXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBwcm9ncmFtSWQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG5ldyBQdWJsaWNLZXkocHJvZ3JhbUlkKVxuICAgICksXG4gIF07XG59XG5cbi8qKlxuICogQ29uc3RydWN0IENyZWF0ZSBhbmQgSW5pdGlhbGl6ZSBOb25jZSBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKlxuICogQHBhcmFtIHtXYWxsZXRJbml0fSBkYXRhIC0gdGhlIGRhdGEgdG8gYnVpbGQgdGhlIGluc3RydWN0aW9uXG4gKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBBbiBhcnJheSBjb250YWluaW5nIENyZWF0ZSBhbmQgSW5pdGlhbGl6ZSBOb25jZSBTb2xhbmEgaW5zdHJ1Y3Rpb25cbiAqL1xuZnVuY3Rpb24gY3JlYXRlTm9uY2VBY2NvdW50SW5zdHJ1Y3Rpb24oZGF0YTogV2FsbGV0SW5pdCk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHsgZnJvbUFkZHJlc3MsIG5vbmNlQWRkcmVzcywgYXV0aEFkZHJlc3MsIGFtb3VudCB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KGZyb21BZGRyZXNzLCAnTWlzc2luZyBmcm9tQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQobm9uY2VBZGRyZXNzLCAnTWlzc2luZyBub25jZUFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGF1dGhBZGRyZXNzLCAnTWlzc2luZyBhdXRoQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoYW1vdW50LCAnTWlzc2luZyBhbW91bnQgcGFyYW0nKTtcbiAgY29uc3Qgbm9uY2VBY2NvdW50SW5zdHJ1Y3Rpb24gPSBTeXN0ZW1Qcm9ncmFtLmNyZWF0ZU5vbmNlQWNjb3VudCh7XG4gICAgZnJvbVB1YmtleTogbmV3IFB1YmxpY0tleShmcm9tQWRkcmVzcyksXG4gICAgbm9uY2VQdWJrZXk6IG5ldyBQdWJsaWNLZXkobm9uY2VBZGRyZXNzKSxcbiAgICBhdXRob3JpemVkUHVia2V5OiBuZXcgUHVibGljS2V5KGF1dGhBZGRyZXNzKSxcbiAgICBsYW1wb3J0czogbmV3IEJpZ051bWJlcihhbW91bnQpLnRvTnVtYmVyKCksXG4gIH0pO1xuICByZXR1cm4gbm9uY2VBY2NvdW50SW5zdHJ1Y3Rpb24uaW5zdHJ1Y3Rpb25zO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBDcmVhdGUgU3Rha2luZyBBY2NvdW50IGFuZCBEZWxlZ2F0ZSBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKlxuICogQHBhcmFtIHtTdGFraW5nQWN0aXZhdGV9IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgQ3JlYXRlIFN0YWtpbmcgQWNjb3VudCBhbmQgRGVsZWdhdGUgU29sYW5hIGluc3RydWN0aW9uc1xuICovXG5mdW5jdGlvbiBzdGFraW5nSW5pdGlhbGl6ZUluc3RydWN0aW9uKGRhdGE6IFN0YWtpbmdBY3RpdmF0ZSk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHsgZnJvbUFkZHJlc3MsIHN0YWtpbmdBZGRyZXNzLCBhbW91bnQsIHZhbGlkYXRvciwgc3Rha2luZ1R5cGUsIGV4dHJhUGFyYW1zIH0sXG4gIH0gPSBkYXRhO1xuICBhc3NlcnQoZnJvbUFkZHJlc3MsICdNaXNzaW5nIGZyb21BZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydChzdGFraW5nQWRkcmVzcywgJ01pc3Npbmcgc3Rha2luZ0FkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGFtb3VudCwgJ01pc3NpbmcgYW1vdW50IHBhcmFtJyk7XG4gIGFzc2VydCh2YWxpZGF0b3IsICdNaXNzaW5nIHZhbGlkYXRvciBwYXJhbScpO1xuXG4gIGNvbnN0IGZyb21QdWJrZXkgPSBuZXcgUHVibGljS2V5KGZyb21BZGRyZXNzKTtcbiAgY29uc3Qgc3Rha2VQdWJrZXkgPSBuZXcgUHVibGljS2V5KHN0YWtpbmdBZGRyZXNzKTtcbiAgY29uc3QgdmFsaWRhdG9yUHVia2V5ID0gbmV3IFB1YmxpY0tleSh2YWxpZGF0b3IpO1xuICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbigpO1xuXG4gIHN3aXRjaCAoc3Rha2luZ1R5cGUpIHtcbiAgICBjYXNlIFNvbFN0YWtpbmdUeXBlRW51bS5KSVRPOiB7XG4gICAgICBhc3NlcnQoZXh0cmFQYXJhbXMgIT09IHVuZGVmaW5lZCwgJ01pc3NpbmcgZXh0cmFQYXJhbXMgcGFyYW0nKTtcbiAgICAgIGNvbnN0IGluc3RydWN0aW9ucyA9IGRlcG9zaXRTb2xJbnN0cnVjdGlvbnMoXG4gICAgICAgIHtcbiAgICAgICAgICBzdGFrZVBvb2xBZGRyZXNzOiBzdGFrZVB1YmtleSxcbiAgICAgICAgICBmcm9tOiBmcm9tUHVia2V5LFxuICAgICAgICAgIGxhbXBvcnRzOiBCaWdJbnQoYW1vdW50KSxcbiAgICAgICAgfSxcbiAgICAgICAgZXh0cmFQYXJhbXMuc3Rha2VQb29sRGF0YSxcbiAgICAgICAgISFleHRyYVBhcmFtcy5jcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50XG4gICAgICApO1xuICAgICAgdHguYWRkKC4uLmluc3RydWN0aW9ucyk7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIFNvbFN0YWtpbmdUeXBlRW51bS5NQVJJTkFERToge1xuICAgICAgY29uc3Qgd2FsbGV0SW5pdFN0YWtpbmcgPSBTdGFrZVByb2dyYW0uY3JlYXRlQWNjb3VudCh7XG4gICAgICAgIGZyb21QdWJrZXksXG4gICAgICAgIHN0YWtlUHVia2V5LFxuICAgICAgICBhdXRob3JpemVkOiBuZXcgQXV0aG9yaXplZCh2YWxpZGF0b3JQdWJrZXksIGZyb21QdWJrZXkpLCAvLyBzdGFrZXIgYW5kIHdpdGhkcmF3ZXJcbiAgICAgICAgbG9ja3VwOiBuZXcgTG9ja3VwKDAsIDAsIGZyb21QdWJrZXkpLCAvLyBObyBtaW5pbXVtIGVwb2NoIHRvIHdpdGhkcmF3XG4gICAgICAgIGxhbXBvcnRzOiBuZXcgQmlnTnVtYmVyKGFtb3VudCkudG9OdW1iZXIoKSxcbiAgICAgIH0pO1xuICAgICAgdHguYWRkKHdhbGxldEluaXRTdGFraW5nKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgU29sU3Rha2luZ1R5cGVFbnVtLk5BVElWRToge1xuICAgICAgY29uc3Qgd2FsbGV0SW5pdFN0YWtpbmcgPSBTdGFrZVByb2dyYW0uY3JlYXRlQWNjb3VudCh7XG4gICAgICAgIGZyb21QdWJrZXksXG4gICAgICAgIHN0YWtlUHVia2V5LFxuICAgICAgICBhdXRob3JpemVkOiBuZXcgQXV0aG9yaXplZChmcm9tUHVia2V5LCBmcm9tUHVia2V5KSwgLy8gc3Rha2VyIGFuZCB3aXRoZHJhd2VyXG4gICAgICAgIGxvY2t1cDogbmV3IExvY2t1cCgwLCAwLCBmcm9tUHVia2V5KSwgLy8gTm8gbWluaW11bSBlcG9jaCB0byB3aXRoZHJhd1xuICAgICAgICBsYW1wb3J0czogbmV3IEJpZ051bWJlcihhbW91bnQpLnRvTnVtYmVyKCksXG4gICAgICB9KTtcbiAgICAgIHR4LmFkZCh3YWxsZXRJbml0U3Rha2luZyk7XG5cbiAgICAgIGNvbnN0IGRlbGVnYXRlU3Rha2luZyA9IFN0YWtlUHJvZ3JhbS5kZWxlZ2F0ZSh7XG4gICAgICAgIHN0YWtlUHVia2V5OiBuZXcgUHVibGljS2V5KHN0YWtpbmdBZGRyZXNzKSxcbiAgICAgICAgYXV0aG9yaXplZFB1YmtleTogbmV3IFB1YmxpY0tleShmcm9tQWRkcmVzcyksXG4gICAgICAgIHZvdGVQdWJrZXk6IG5ldyBQdWJsaWNLZXkodmFsaWRhdG9yKSxcbiAgICAgIH0pO1xuICAgICAgdHguYWRkKGRlbGVnYXRlU3Rha2luZyk7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBkZWZhdWx0OiB7XG4gICAgICBjb25zdCB1bnJlYWNoYWJsZTogbmV2ZXIgPSBzdGFraW5nVHlwZTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBzdGFraW5nIHR5cGUgJHt1bnJlYWNoYWJsZX1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHguaW5zdHJ1Y3Rpb25zO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBzdGFraW5nIGRlYWN0aXZhdGUgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7U3Rha2luZ0RlYWN0aXZhdGV9IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgc3Rha2luZyBkZWFjdGl2YXRlIGluc3RydWN0aW9uXG4gKi9cbmZ1bmN0aW9uIHN0YWtpbmdEZWFjdGl2YXRlSW5zdHJ1Y3Rpb24oZGF0YTogU3Rha2luZ0RlYWN0aXZhdGUpOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBjb25zdCB7XG4gICAgcGFyYW1zOiB7IGZyb21BZGRyZXNzLCBzdGFraW5nQWRkcmVzcywgYW1vdW50LCB1bnN0YWtpbmdBZGRyZXNzLCByZWNpcGllbnRzLCBzdGFraW5nVHlwZSwgZXh0cmFQYXJhbXMgfSxcbiAgfSA9IGRhdGE7XG4gIGFzc2VydChmcm9tQWRkcmVzcywgJ01pc3NpbmcgZnJvbUFkZHJlc3MgcGFyYW0nKTtcblxuICBzd2l0Y2ggKHN0YWtpbmdUeXBlKSB7XG4gICAgY2FzZSBTb2xTdGFraW5nVHlwZUVudW0uSklUTzoge1xuICAgICAgYXNzZXJ0KHN0YWtpbmdBZGRyZXNzLCAnTWlzc2luZyBzdGFraW5nQWRkcmVzcyBwYXJhbScpO1xuICAgICAgYXNzZXJ0KHVuc3Rha2luZ0FkZHJlc3MsICdNaXNzaW5nIHVuc3Rha2luZ0FkZHJlc3MgcGFyYW0nKTtcbiAgICAgIGFzc2VydChhbW91bnQsICdNaXNzaW5nIGFtb3VudCBwYXJhbScpO1xuICAgICAgYXNzZXJ0KGV4dHJhUGFyYW1zLCAnTWlzc2luZyBleHRyYVBhcmFtcyBwYXJhbScpO1xuXG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbigpO1xuICAgICAgdHguYWRkKFxuICAgICAgICAuLi53aXRoZHJhd1N0YWtlSW5zdHJ1Y3Rpb25zKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YWtlUG9vbEFkZHJlc3M6IG5ldyBQdWJsaWNLZXkoc3Rha2luZ0FkZHJlc3MpLFxuICAgICAgICAgICAgdG9rZW5Pd25lcjogbmV3IFB1YmxpY0tleShmcm9tQWRkcmVzcyksXG4gICAgICAgICAgICBkZXN0aW5hdGlvblN0YWtlQWNjb3VudDogbmV3IFB1YmxpY0tleSh1bnN0YWtpbmdBZGRyZXNzKSxcbiAgICAgICAgICAgIHZhbGlkYXRvckFkZHJlc3M6IG5ldyBQdWJsaWNLZXkoZXh0cmFQYXJhbXMudmFsaWRhdG9yQWRkcmVzcyksXG4gICAgICAgICAgICB0cmFuc2ZlckF1dGhvcml0eTogbmV3IFB1YmxpY0tleShleHRyYVBhcmFtcy50cmFuc2ZlckF1dGhvcml0eUFkZHJlc3MpLFxuICAgICAgICAgICAgcG9vbEFtb3VudDogYW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXh0cmFQYXJhbXMuc3Rha2VQb29sRGF0YVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgcmV0dXJuIHR4Lmluc3RydWN0aW9ucztcbiAgICB9XG5cbiAgICBjYXNlIFNvbFN0YWtpbmdUeXBlRW51bS5NQVJJTkFERToge1xuICAgICAgYXNzZXJ0KHJlY2lwaWVudHMsICdNaXNzaW5nIHJlY2lwaWVudHMgcGFyYW0nKTtcblxuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oKTtcbiAgICAgIGNvbnN0IHRvUHVia2V5QWRkcmVzcyA9IG5ldyBQdWJsaWNLZXkocmVjaXBpZW50c1swXS5hZGRyZXNzIHx8ICcnKTtcbiAgICAgIGNvbnN0IHRyYW5zZmVySW5zdHJ1Y3Rpb24gPSBTeXN0ZW1Qcm9ncmFtLnRyYW5zZmVyKHtcbiAgICAgICAgZnJvbVB1YmtleTogbmV3IFB1YmxpY0tleShmcm9tQWRkcmVzcyksXG4gICAgICAgIHRvUHVia2V5OiB0b1B1YmtleUFkZHJlc3MsXG4gICAgICAgIGxhbXBvcnRzOiBwYXJzZUludChyZWNpcGllbnRzWzBdLmFtb3VudCwgMTApLFxuICAgICAgfSk7XG5cbiAgICAgIHR4LmFkZCh0cmFuc2Zlckluc3RydWN0aW9uKTtcbiAgICAgIHJldHVybiB0eC5pbnN0cnVjdGlvbnM7XG4gICAgfVxuXG4gICAgY2FzZSBTb2xTdGFraW5nVHlwZUVudW0uTkFUSVZFOiB7XG4gICAgICBhc3NlcnQoc3Rha2luZ0FkZHJlc3MsICdNaXNzaW5nIHN0YWtpbmdBZGRyZXNzIHBhcmFtJyk7XG5cbiAgICAgIGlmIChkYXRhLnBhcmFtcy5hbW91bnQgJiYgZGF0YS5wYXJhbXMudW5zdGFraW5nQWRkcmVzcykge1xuICAgICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbigpO1xuICAgICAgICBjb25zdCB1bnN0YWtpbmdBZGRyZXNzID0gbmV3IFB1YmxpY0tleShkYXRhLnBhcmFtcy51bnN0YWtpbmdBZGRyZXNzKTtcblxuICAgICAgICBjb25zdCBhbGxvY2F0ZUFjY291bnQgPSBTeXN0ZW1Qcm9ncmFtLmFsbG9jYXRlKHtcbiAgICAgICAgICBhY2NvdW50UHVia2V5OiB1bnN0YWtpbmdBZGRyZXNzLFxuICAgICAgICAgIHNwYWNlOiBTdGFrZVByb2dyYW0uc3BhY2UsXG4gICAgICAgIH0pO1xuICAgICAgICB0eC5hZGQoYWxsb2NhdGVBY2NvdW50KTtcblxuICAgICAgICBjb25zdCBhc3NpZ25BY2NvdW50ID0gU3lzdGVtUHJvZ3JhbS5hc3NpZ24oe1xuICAgICAgICAgIGFjY291bnRQdWJrZXk6IHVuc3Rha2luZ0FkZHJlc3MsXG4gICAgICAgICAgcHJvZ3JhbUlkOiBTdGFrZVByb2dyYW0ucHJvZ3JhbUlkLFxuICAgICAgICB9KTtcbiAgICAgICAgdHguYWRkKGFzc2lnbkFjY291bnQpO1xuXG4gICAgICAgIGNvbnN0IHNwbGl0U3Rha2UgPSBTdGFrZVByb2dyYW0uc3BsaXQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3Rha2VQdWJrZXk6IG5ldyBQdWJsaWNLZXkoc3Rha2luZ0FkZHJlc3MpLFxuICAgICAgICAgICAgYXV0aG9yaXplZFB1YmtleTogbmV3IFB1YmxpY0tleShmcm9tQWRkcmVzcyksXG4gICAgICAgICAgICBzcGxpdFN0YWtlUHVia2V5OiB1bnN0YWtpbmdBZGRyZXNzLFxuICAgICAgICAgICAgbGFtcG9ydHM6IG5ldyBCaWdOdW1iZXIoZGF0YS5wYXJhbXMuYW1vdW50KS50b051bWJlcigpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgMFxuICAgICAgICApO1xuICAgICAgICB0eC5hZGQoc3BsaXRTdGFrZS5pbnN0cnVjdGlvbnNbMV0pO1xuXG4gICAgICAgIGNvbnN0IGRlYWN0aXZhdGVTdGFraW5nID0gU3Rha2VQcm9ncmFtLmRlYWN0aXZhdGUoe1xuICAgICAgICAgIHN0YWtlUHVia2V5OiB1bnN0YWtpbmdBZGRyZXNzLFxuICAgICAgICAgIGF1dGhvcml6ZWRQdWJrZXk6IG5ldyBQdWJsaWNLZXkoZnJvbUFkZHJlc3MpLFxuICAgICAgICB9KTtcbiAgICAgICAgdHguYWRkKGRlYWN0aXZhdGVTdGFraW5nKTtcblxuICAgICAgICByZXR1cm4gdHguaW5zdHJ1Y3Rpb25zO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZGVhY3RpdmF0ZVN0YWtpbmcgPSBTdGFrZVByb2dyYW0uZGVhY3RpdmF0ZSh7XG4gICAgICAgICAgc3Rha2VQdWJrZXk6IG5ldyBQdWJsaWNLZXkoc3Rha2luZ0FkZHJlc3MpLFxuICAgICAgICAgIGF1dGhvcml6ZWRQdWJrZXk6IG5ldyBQdWJsaWNLZXkoZnJvbUFkZHJlc3MpLFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZGVhY3RpdmF0ZVN0YWtpbmcuaW5zdHJ1Y3Rpb25zO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGNvbnN0IHVucmVhY2hhYmxlOiBuZXZlciA9IHN0YWtpbmdUeXBlO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHN0YWtpbmcgdHlwZSAke3VucmVhY2hhYmxlfWApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENvbnN0cnVjdCBTdGFraW5nIFdpdGhkcmF3IFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1N0YWtpbmdXaXRoZHJhd30gZGF0YSAtIHRoZSBkYXRhIHRvIGJ1aWxkIHRoZSBpbnN0cnVjdGlvblxuICogQHJldHVybnMge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gQW4gYXJyYXkgY29udGFpbmluZyBTdGFraW5nIFdpdGhkcmF3ICBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKi9cbmZ1bmN0aW9uIHN0YWtpbmdXaXRoZHJhd0luc3RydWN0aW9uKGRhdGE6IFN0YWtpbmdXaXRoZHJhdyk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHsgZnJvbUFkZHJlc3MsIHN0YWtpbmdBZGRyZXNzLCBhbW91bnQgfSxcbiAgfSA9IGRhdGE7XG4gIGFzc2VydChmcm9tQWRkcmVzcywgJ01pc3NpbmcgZnJvbUFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KHN0YWtpbmdBZGRyZXNzLCAnTWlzc2luZyBzdGFraW5nQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoYW1vdW50LCAnTWlzc2luZyBhbW91bnQgcGFyYW0nKTtcblxuICBjb25zdCB3aXRoZHJhd1N0YWtpbmcgPSBTdGFrZVByb2dyYW0ud2l0aGRyYXcoe1xuICAgIHN0YWtlUHVia2V5OiBuZXcgUHVibGljS2V5KHN0YWtpbmdBZGRyZXNzKSxcbiAgICBhdXRob3JpemVkUHVia2V5OiBuZXcgUHVibGljS2V5KGZyb21BZGRyZXNzKSxcbiAgICB0b1B1YmtleTogbmV3IFB1YmxpY0tleShmcm9tQWRkcmVzcyksXG4gICAgbGFtcG9ydHM6IG5ldyBCaWdOdW1iZXIoYW1vdW50KS50b051bWJlcigpLFxuICB9KTtcblxuICByZXR1cm4gd2l0aGRyYXdTdGFraW5nLmluc3RydWN0aW9ucztcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgQ3JlYXRlIGFuZCBJbml0aWFsaXplIE5vbmNlIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1dhbGxldEluaXR9IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgQ3JlYXRlIGFuZCBJbml0aWFsaXplIE5vbmNlIFNvbGFuYSBpbnN0cnVjdGlvblxuICovXG5mdW5jdGlvbiBjcmVhdGVBVEFJbnN0cnVjdGlvbihkYXRhOiBBdGFJbml0KTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdIHtcbiAgY29uc3Qge1xuICAgIHBhcmFtczogeyBtaW50QWRkcmVzcywgYXRhQWRkcmVzcywgb3duZXJBZGRyZXNzLCBwYXllckFkZHJlc3MsIHByb2dyYW1JZCB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KG1pbnRBZGRyZXNzLCAnTWlzc2luZyBtaW50QWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoYXRhQWRkcmVzcywgJ01pc3NpbmcgYXRhQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQob3duZXJBZGRyZXNzLCAnTWlzc2luZyBvd25lckFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KHBheWVyQWRkcmVzcywgJ01pc3NpbmcgcGF5ZXJBZGRyZXNzIHBhcmFtJyk7XG5cbiAgbGV0IGFzc29jaWF0ZWRUb2tlbkFjY291bnRJbnN0cnVjdGlvbjogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbjtcbiAgaWYgKHByb2dyYW1JZCAmJiBwcm9ncmFtSWQgPT09IFRPS0VOXzIwMjJfUFJPR1JBTV9JRC50b1N0cmluZygpKSB7XG4gICAgYXNzb2NpYXRlZFRva2VuQWNjb3VudEluc3RydWN0aW9uID0gY3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudEluc3RydWN0aW9uKFxuICAgICAgbmV3IFB1YmxpY0tleShwYXllckFkZHJlc3MpLFxuICAgICAgbmV3IFB1YmxpY0tleShhdGFBZGRyZXNzKSxcbiAgICAgIG5ldyBQdWJsaWNLZXkob3duZXJBZGRyZXNzKSxcbiAgICAgIG5ldyBQdWJsaWNLZXkobWludEFkZHJlc3MpLFxuICAgICAgVE9LRU5fMjAyMl9QUk9HUkFNX0lEXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBhc3NvY2lhdGVkVG9rZW5BY2NvdW50SW5zdHJ1Y3Rpb24gPSBjcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50SW5zdHJ1Y3Rpb24oXG4gICAgICBuZXcgUHVibGljS2V5KHBheWVyQWRkcmVzcyksXG4gICAgICBuZXcgUHVibGljS2V5KGF0YUFkZHJlc3MpLFxuICAgICAgbmV3IFB1YmxpY0tleShvd25lckFkZHJlc3MpLFxuICAgICAgbmV3IFB1YmxpY0tleShtaW50QWRkcmVzcylcbiAgICApO1xuICB9XG4gIHJldHVybiBbYXNzb2NpYXRlZFRva2VuQWNjb3VudEluc3RydWN0aW9uXTtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgQ2xvc2UgQVRBIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1dhbGxldEluaXR9IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgQ2xvc2UgQVRBIFNvbGFuYSBpbnN0cnVjdGlvblxuICovXG5mdW5jdGlvbiBjbG9zZUFUQUluc3RydWN0aW9uKGRhdGE6IEF0YUNsb3NlKTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdIHtcbiAgY29uc3Qge1xuICAgIHBhcmFtczogeyBhY2NvdW50QWRkcmVzcywgZGVzdGluYXRpb25BZGRyZXNzLCBhdXRob3JpdHlBZGRyZXNzIH0sXG4gIH0gPSBkYXRhO1xuICBhc3NlcnQoYWNjb3VudEFkZHJlc3MsICdNaXNzaW5nIGFjY291bnRBZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydChkZXN0aW5hdGlvbkFkZHJlc3MsICdNaXNzaW5nIGRlc3RpbmF0aW9uQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoYXV0aG9yaXR5QWRkcmVzcywgJ01pc3NpbmcgYXV0aG9yaXR5QWRkcmVzcyBwYXJhbScpO1xuXG4gIGNvbnN0IGNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudEluc3RydWN0aW9uID0gY3JlYXRlQ2xvc2VBY2NvdW50SW5zdHJ1Y3Rpb24oXG4gICAgbmV3IFB1YmxpY0tleShhY2NvdW50QWRkcmVzcyksXG4gICAgbmV3IFB1YmxpY0tleShkZXN0aW5hdGlvbkFkZHJlc3MpLFxuICAgIG5ldyBQdWJsaWNLZXkoYXV0aG9yaXR5QWRkcmVzcylcbiAgKTtcbiAgcmV0dXJuIFtjbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnRJbnN0cnVjdGlvbl07XG59XG5cbi8qKlxuICogQ29uc3RydWN0IFJlY292ZXJOZXN0ZWQgQVRBIFNvbGFuYSBpbnN0cnVjdGlvblxuICpcbiAqIFJlY292ZXJzIHRva2VucyBmcm9tIGEgbmVzdGVkIEFUQSAoYW4gQVRBIHdob3NlIG93bmVyIGlzIGFub3RoZXIgQVRBIHJhdGhlciB0aGFuIGEgd2FsbGV0IGFkZHJlc3MpLlxuICogVGhpcyB1c2VzIHRoZSBBc3NvY2lhdGVkIFRva2VuIEFjY291bnQgcHJvZ3JhbSdzIFJlY292ZXJOZXN0ZWQgaW5zdHJ1Y3Rpb24sIHdoaWNoIGFsbG93cyB0aGUgcm9vdFxuICogd2FsbGV0IG93bmVyIHRvIHNpZ24gYW5kIHJlY292ZXIgdG9rZW5zIHdpdGhvdXQgbmVlZGluZyB0aGUgaW50ZXJtZWRpYXRlIEFUQSB0byBzaWduLlxuICpcbiAqIEBwYXJhbSB7QXRhUmVjb3Zlck5lc3RlZH0gZGF0YSAtIHRoZSBkYXRhIHRvIGJ1aWxkIHRoZSBpbnN0cnVjdGlvblxuICogQHJldHVybnMge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgUmVjb3Zlck5lc3RlZCBpbnN0cnVjdGlvblxuICovXG5mdW5jdGlvbiByZWNvdmVyTmVzdGVkQVRBSW5zdHJ1Y3Rpb24oZGF0YTogQXRhUmVjb3Zlck5lc3RlZCk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHtcbiAgICAgIG5lc3RlZEFjY291bnRBZGRyZXNzLFxuICAgICAgbmVzdGVkTWludEFkZHJlc3MsXG4gICAgICBkZXN0aW5hdGlvbkFjY291bnRBZGRyZXNzLFxuICAgICAgb3duZXJBY2NvdW50QWRkcmVzcyxcbiAgICAgIG93bmVyTWludEFkZHJlc3MsXG4gICAgICB3YWxsZXRBZGRyZXNzLFxuICAgIH0sXG4gIH0gPSBkYXRhO1xuICBhc3NlcnQobmVzdGVkQWNjb3VudEFkZHJlc3MsICdNaXNzaW5nIG5lc3RlZEFjY291bnRBZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydChuZXN0ZWRNaW50QWRkcmVzcywgJ01pc3NpbmcgbmVzdGVkTWludEFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGRlc3RpbmF0aW9uQWNjb3VudEFkZHJlc3MsICdNaXNzaW5nIGRlc3RpbmF0aW9uQWNjb3VudEFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KG93bmVyQWNjb3VudEFkZHJlc3MsICdNaXNzaW5nIG93bmVyQWNjb3VudEFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KG93bmVyTWludEFkZHJlc3MsICdNaXNzaW5nIG93bmVyTWludEFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KHdhbGxldEFkZHJlc3MsICdNaXNzaW5nIHdhbGxldEFkZHJlc3MgcGFyYW0nKTtcblxuICBjb25zdCByZWNvdmVyTmVzdGVkSW5zdHJ1Y3Rpb24gPSBjcmVhdGVSZWNvdmVyTmVzdGVkSW5zdHJ1Y3Rpb24oXG4gICAgbmV3IFB1YmxpY0tleShuZXN0ZWRBY2NvdW50QWRkcmVzcyksXG4gICAgbmV3IFB1YmxpY0tleShuZXN0ZWRNaW50QWRkcmVzcyksXG4gICAgbmV3IFB1YmxpY0tleShkZXN0aW5hdGlvbkFjY291bnRBZGRyZXNzKSxcbiAgICBuZXcgUHVibGljS2V5KG93bmVyQWNjb3VudEFkZHJlc3MpLFxuICAgIG5ldyBQdWJsaWNLZXkob3duZXJNaW50QWRkcmVzcyksXG4gICAgbmV3IFB1YmxpY0tleSh3YWxsZXRBZGRyZXNzKVxuICApO1xuICByZXR1cm4gW3JlY292ZXJOZXN0ZWRJbnN0cnVjdGlvbl07XG59XG5cbi8qKlxuICogQ29uc3RydWN0IFN0YWtpbmcgQWNjb3VudCBBdXRob3JpemUgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7U3Rha2luZ0F1dGhvcml6ZX0gZGF0YSAtIHRoZSBkYXRhIHRvIGJ1aWxkIHRoZSBpbnN0cnVjdGlvblxuICogQHJldHVybnMge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gQW4gYXJyYXkgY29udGFpbmluZyBTdGFraW5nIEFjY291bnQgQXV0aG9yaXplIGluc3RydWN0aW9uc1xuICovXG5mdW5jdGlvbiBzdGFraW5nQXV0aG9yaXplSW5zdHJ1Y3Rpb24oZGF0YTogU3Rha2luZ0F1dGhvcml6ZSk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHsgc3Rha2luZ0FkZHJlc3MsIG9sZEF1dGhvcml6ZUFkZHJlc3MsIG5ld0F1dGhvcml6ZUFkZHJlc3MsIG5ld1dpdGhkcmF3QWRkcmVzcyB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KHN0YWtpbmdBZGRyZXNzLCAnTWlzc2luZyBzdGFraW5nQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQob2xkQXV0aG9yaXplQWRkcmVzcywgJ01pc3Npbmcgb2xkQXV0aG9yaXplQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQobmV3QXV0aG9yaXplQWRkcmVzcywgJ01pc3NpbmcgbmV3QXV0aG9yaXplQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQobmV3V2l0aGRyYXdBZGRyZXNzLCAnTWlzc2luZyBuZXdXaXRoZHJhd0FkZHJlc3MgcGFyYW0nKTtcblxuICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbigpO1xuXG4gIGNvbnN0IGF1dGhvcml6ZVN0YWtpbmcgPSBTdGFrZVByb2dyYW0uYXV0aG9yaXplKHtcbiAgICBzdGFrZVB1YmtleTogbmV3IFB1YmxpY0tleShzdGFraW5nQWRkcmVzcyksXG4gICAgYXV0aG9yaXplZFB1YmtleTogbmV3IFB1YmxpY0tleShvbGRBdXRob3JpemVBZGRyZXNzKSxcbiAgICBuZXdBdXRob3JpemVkUHVia2V5OiBuZXcgUHVibGljS2V5KG5ld0F1dGhvcml6ZUFkZHJlc3MpLFxuICAgIHN0YWtlQXV0aG9yaXphdGlvblR5cGU6IFN0YWtlQXV0aG9yaXphdGlvbkxheW91dC5TdGFrZXIsXG4gIH0pO1xuXG4gIGNvbnN0IGF1dGhvcml6ZVdpdGhkcmF3ID0gU3Rha2VQcm9ncmFtLmF1dGhvcml6ZSh7XG4gICAgc3Rha2VQdWJrZXk6IG5ldyBQdWJsaWNLZXkoc3Rha2luZ0FkZHJlc3MpLFxuICAgIGF1dGhvcml6ZWRQdWJrZXk6IG5ldyBQdWJsaWNLZXkob2xkQXV0aG9yaXplQWRkcmVzcyksXG4gICAgbmV3QXV0aG9yaXplZFB1YmtleTogbmV3IFB1YmxpY0tleShuZXdBdXRob3JpemVBZGRyZXNzKSxcbiAgICBzdGFrZUF1dGhvcml6YXRpb25UeXBlOiBTdGFrZUF1dGhvcml6YXRpb25MYXlvdXQuV2l0aGRyYXdlcixcbiAgICBjdXN0b2RpYW5QdWJrZXk6IG5ldyBQdWJsaWNLZXkobmV3V2l0aGRyYXdBZGRyZXNzKSxcbiAgfSk7XG4gIHR4LmFkZChhdXRob3JpemVTdGFraW5nKTtcbiAgdHguYWRkKGF1dGhvcml6ZVdpdGhkcmF3KTtcblxuICByZXR1cm4gdHguaW5zdHJ1Y3Rpb25zO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBEZWxlZ2F0ZSBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKlxuICogQHBhcmFtIHtTdGFraW5nQWN0aXZhdGV9IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgRGVsZWdhdGUgU29sYW5hIGluc3RydWN0aW9uc1xuICovXG5mdW5jdGlvbiBzdGFraW5nRGVsZWdhdGVJbnN0cnVjdGlvbihkYXRhOiBTdGFraW5nRGVsZWdhdGUpOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBjb25zdCB7XG4gICAgcGFyYW1zOiB7IGZyb21BZGRyZXNzLCBzdGFraW5nQWRkcmVzcywgdmFsaWRhdG9yIH0sXG4gIH0gPSBkYXRhO1xuICBhc3NlcnQoZnJvbUFkZHJlc3MsICdNaXNzaW5nIGZyb21BZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydChzdGFraW5nQWRkcmVzcywgJ01pc3Npbmcgc3Rha2luZ0FkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KHZhbGlkYXRvciwgJ01pc3NpbmcgdmFsaWRhdG9yIHBhcmFtJyk7XG4gIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKCk7XG4gIGNvbnN0IGRlbGVnYXRlU3Rha2luZyA9IFN0YWtlUHJvZ3JhbS5kZWxlZ2F0ZSh7XG4gICAgc3Rha2VQdWJrZXk6IG5ldyBQdWJsaWNLZXkoc3Rha2luZ0FkZHJlc3MpLFxuICAgIGF1dGhvcml6ZWRQdWJrZXk6IG5ldyBQdWJsaWNLZXkoZnJvbUFkZHJlc3MpLFxuICAgIHZvdGVQdWJrZXk6IG5ldyBQdWJsaWNLZXkodmFsaWRhdG9yKSxcbiAgfSk7XG4gIHR4LmFkZChkZWxlZ2F0ZVN0YWtpbmcpO1xuXG4gIHJldHVybiB0eC5pbnN0cnVjdGlvbnM7XG59XG5cbi8qKlxuICogQ29uc3RydWN0IE1pbnRUbyBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKlxuICogQHBhcmFtIHtNaW50VG99IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgTWludFRvIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqL1xuZnVuY3Rpb24gbWludFRvSW5zdHJ1Y3Rpb24oZGF0YTogTWludFRvKTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdIHtcbiAgY29uc3Qge1xuICAgIHBhcmFtczogeyBtaW50QWRkcmVzcywgZGVzdGluYXRpb25BZGRyZXNzLCBhdXRob3JpdHlBZGRyZXNzLCBhbW91bnQsIHByb2dyYW1JZCB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KG1pbnRBZGRyZXNzLCAnTWlzc2luZyBtaW50QWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoZGVzdGluYXRpb25BZGRyZXNzLCAnTWlzc2luZyBkZXN0aW5hdGlvbkFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGF1dGhvcml0eUFkZHJlc3MsICdNaXNzaW5nIGF1dGhvcml0eUFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGFtb3VudCwgJ01pc3NpbmcgYW1vdW50IHBhcmFtJyk7XG5cbiAgY29uc3QgbWludCA9IG5ldyBQdWJsaWNLZXkobWludEFkZHJlc3MpO1xuICBjb25zdCBkZXN0aW5hdGlvbiA9IG5ldyBQdWJsaWNLZXkoZGVzdGluYXRpb25BZGRyZXNzKTtcbiAgY29uc3QgYXV0aG9yaXR5ID0gbmV3IFB1YmxpY0tleShhdXRob3JpdHlBZGRyZXNzKTtcblxuICBsZXQgbWludFRvSW5zdHI6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb247XG4gIGlmIChwcm9ncmFtSWQgJiYgcHJvZ3JhbUlkID09PSBUT0tFTl8yMDIyX1BST0dSQU1fSUQudG9TdHJpbmcoKSkge1xuICAgIG1pbnRUb0luc3RyID0gY3JlYXRlTWludFRvSW5zdHJ1Y3Rpb24obWludCwgZGVzdGluYXRpb24sIGF1dGhvcml0eSwgQmlnSW50KGFtb3VudCksIFtdLCBUT0tFTl8yMDIyX1BST0dSQU1fSUQpO1xuICB9IGVsc2Uge1xuICAgIG1pbnRUb0luc3RyID0gY3JlYXRlTWludFRvSW5zdHJ1Y3Rpb24obWludCwgZGVzdGluYXRpb24sIGF1dGhvcml0eSwgQmlnSW50KGFtb3VudCkpO1xuICB9XG5cbiAgcmV0dXJuIFttaW50VG9JbnN0cl07XG59XG5cbi8qKlxuICogQ29uc3RydWN0IEJ1cm4gU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7QnVybn0gZGF0YSAtIHRoZSBkYXRhIHRvIGJ1aWxkIHRoZSBpbnN0cnVjdGlvblxuICogQHJldHVybnMge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gQW4gYXJyYXkgY29udGFpbmluZyBCdXJuIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqL1xuZnVuY3Rpb24gYnVybkluc3RydWN0aW9uKGRhdGE6IEJ1cm4pOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBjb25zdCB7XG4gICAgcGFyYW1zOiB7IG1pbnRBZGRyZXNzLCBhY2NvdW50QWRkcmVzcywgYXV0aG9yaXR5QWRkcmVzcywgYW1vdW50LCBwcm9ncmFtSWQgfSxcbiAgfSA9IGRhdGE7XG4gIGFzc2VydChtaW50QWRkcmVzcywgJ01pc3NpbmcgbWludEFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGFjY291bnRBZGRyZXNzLCAnTWlzc2luZyBhY2NvdW50QWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoYXV0aG9yaXR5QWRkcmVzcywgJ01pc3NpbmcgYXV0aG9yaXR5QWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoYW1vdW50LCAnTWlzc2luZyBhbW91bnQgcGFyYW0nKTtcblxuICBjb25zdCBtaW50ID0gbmV3IFB1YmxpY0tleShtaW50QWRkcmVzcyk7XG4gIGNvbnN0IGFjY291bnQgPSBuZXcgUHVibGljS2V5KGFjY291bnRBZGRyZXNzKTtcbiAgY29uc3QgYXV0aG9yaXR5ID0gbmV3IFB1YmxpY0tleShhdXRob3JpdHlBZGRyZXNzKTtcblxuICBsZXQgYnVybkluc3RyOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uO1xuICBpZiAocHJvZ3JhbUlkICYmIHByb2dyYW1JZCA9PT0gVE9LRU5fMjAyMl9QUk9HUkFNX0lELnRvU3RyaW5nKCkpIHtcbiAgICBidXJuSW5zdHIgPSBjcmVhdGVCdXJuSW5zdHJ1Y3Rpb24oYWNjb3VudCwgbWludCwgYXV0aG9yaXR5LCBCaWdJbnQoYW1vdW50KSwgW10sIFRPS0VOXzIwMjJfUFJPR1JBTV9JRCk7XG4gIH0gZWxzZSB7XG4gICAgYnVybkluc3RyID0gY3JlYXRlQnVybkluc3RydWN0aW9uKGFjY291bnQsIG1pbnQsIGF1dGhvcml0eSwgQmlnSW50KGFtb3VudCkpO1xuICB9XG5cbiAgcmV0dXJuIFtidXJuSW5zdHJdO1xufVxuXG4vKipcbiAqIFByb2Nlc3MgY3VzdG9tIGluc3RydWN0aW9uIC0gY29udmVydHMgdG8gVHJhbnNhY3Rpb25JbnN0cnVjdGlvblxuICogSGFuZGxlcyBjb252ZXJzaW9uIGZyb20gc3RyaW5nLWJhc2VkIGZvcm1hdCB0byBUcmFuc2FjdGlvbkluc3RydWN0aW9uIGZvcm1hdFxuICpcbiAqIEBwYXJhbSB7Q3VzdG9tSW5zdHJ1Y3Rpb259IGRhdGEgLSB0aGUgZGF0YSBjb250YWluaW5nIHRoZSBjdXN0b20gaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGN1c3RvbSBpbnN0cnVjdGlvblxuICovXG5mdW5jdGlvbiBjdXN0b21JbnN0cnVjdGlvbihkYXRhOiBJbnN0cnVjdGlvblBhcmFtcyk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHsgcGFyYW1zIH0gPSBkYXRhIGFzIEN1c3RvbUluc3RydWN0aW9uO1xuICBhc3NlcnQocGFyYW1zLnByb2dyYW1JZCwgJ01pc3NpbmcgcHJvZ3JhbUlkIGluIGN1c3RvbSBpbnN0cnVjdGlvbicpO1xuICBhc3NlcnQocGFyYW1zLmtleXMgJiYgQXJyYXkuaXNBcnJheShwYXJhbXMua2V5cyksICdNaXNzaW5nIG9yIGludmFsaWQga2V5cyBpbiBjdXN0b20gaW5zdHJ1Y3Rpb24nKTtcbiAgYXNzZXJ0KHBhcmFtcy5kYXRhICE9PSB1bmRlZmluZWQsICdNaXNzaW5nIGRhdGEgaW4gY3VzdG9tIGluc3RydWN0aW9uJyk7XG5cbiAgLy8gQ29udmVydCBzdHJpbmcgZGF0YSB0byBCdWZmZXJcbiAgbGV0IGRhdGFCdWZmZXI6IEJ1ZmZlcjtcblxuICBpZiAoaXNWYWxpZEJhc2U2NChwYXJhbXMuZGF0YSkpIHtcbiAgICBkYXRhQnVmZmVyID0gQnVmZmVyLmZyb20ocGFyYW1zLmRhdGEsICdiYXNlNjQnKTtcbiAgfSBlbHNlIGlmIChpc1ZhbGlkSGV4KHBhcmFtcy5kYXRhKSkge1xuICAgIGRhdGFCdWZmZXIgPSBCdWZmZXIuZnJvbShwYXJhbXMuZGF0YSwgJ2hleCcpO1xuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrIHRvIFVURi04XG4gICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHBhcmFtcy5kYXRhLCAndXRmOCcpO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGEgbmV3IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24gd2l0aCB0aGUgY29udmVydGVkIGRhdGFcbiAgY29uc3QgY29udmVydGVkSW5zdHJ1Y3Rpb24gPSBuZXcgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbih7XG4gICAgcHJvZ3JhbUlkOiBuZXcgUHVibGljS2V5KHBhcmFtcy5wcm9ncmFtSWQpLFxuICAgIGtleXM6IHBhcmFtcy5rZXlzLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgcHVia2V5OiBuZXcgUHVibGljS2V5KGtleS5wdWJrZXkpLFxuICAgICAgaXNTaWduZXI6IGtleS5pc1NpZ25lcixcbiAgICAgIGlzV3JpdGFibGU6IGtleS5pc1dyaXRhYmxlLFxuICAgIH0pKSxcbiAgICBkYXRhOiBkYXRhQnVmZmVyLFxuICB9KTtcblxuICByZXR1cm4gW2NvbnZlcnRlZEluc3RydWN0aW9uXTtcbn1cblxuZnVuY3Rpb24gdXBzZXJ0QWNjb3VudE1ldGEoa2V5czogQWNjb3VudE1ldGFbXSwgbWV0YTogQWNjb3VudE1ldGEpOiB2b2lkIHtcbiAgY29uc3QgZXhpc3RpbmcgPSBrZXlzLmZpbmQoKGFjY291bnQpID0+IGFjY291bnQucHVia2V5LmVxdWFscyhtZXRhLnB1YmtleSkpO1xuICBpZiAoZXhpc3RpbmcpIHtcbiAgICBleGlzdGluZy5pc1dyaXRhYmxlID0gZXhpc3RpbmcuaXNXcml0YWJsZSB8fCBtZXRhLmlzV3JpdGFibGU7XG4gICAgZXhpc3RpbmcuaXNTaWduZXIgPSBleGlzdGluZy5pc1NpZ25lciB8fCBtZXRhLmlzU2lnbmVyO1xuICB9IGVsc2Uge1xuICAgIGtleXMucHVzaChtZXRhKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZFN0YXRpY1RyYW5zZmVySG9va0FjY291bnRzKHRyYW5zZmVySG9vazogVHJhbnNmZXJIb29rQ29uZmlnKTogQWNjb3VudE1ldGFbXSB7XG4gIGNvbnN0IG1ldGFzOiBBY2NvdW50TWV0YVtdID0gW107XG4gIGlmICh0cmFuc2Zlckhvb2suZXh0cmFBY2NvdW50TWV0YXM/Lmxlbmd0aCkge1xuICAgIGZvciAoY29uc3QgbWV0YSBvZiB0cmFuc2Zlckhvb2suZXh0cmFBY2NvdW50TWV0YXMpIHtcbiAgICAgIG1ldGFzLnB1c2goe1xuICAgICAgICBwdWJrZXk6IG5ldyBQdWJsaWNLZXkobWV0YS5wdWJrZXkpLFxuICAgICAgICBpc1NpZ25lcjogbWV0YS5pc1NpZ25lcixcbiAgICAgICAgaXNXcml0YWJsZTogbWV0YS5pc1dyaXRhYmxlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBtZXRhcztcbn1cblxuZnVuY3Rpb24gYWRkVHJhbnNmZXJIb29rQWNjb3VudHMoaW5zdHJ1Y3Rpb246IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24sIHRyYW5zZmVySG9vazogVHJhbnNmZXJIb29rQ29uZmlnKTogdm9pZCB7XG4gIGNvbnN0IGV4dHJhTWV0YXMgPSBidWlsZFN0YXRpY1RyYW5zZmVySG9va0FjY291bnRzKHRyYW5zZmVySG9vayk7XG4gIGZvciAoY29uc3QgbWV0YSBvZiBleHRyYU1ldGFzKSB7XG4gICAgdXBzZXJ0QWNjb3VudE1ldGEoaW5zdHJ1Y3Rpb24ua2V5cywgbWV0YSk7XG4gIH1cbn1cbiJdfQ==
|
|
595
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sSW5zdHJ1Y3Rpb25GYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zb2xJbnN0cnVjdGlvbkZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUEyREEsc0RBMkNDO0FBdEdELHNEQUF5RDtBQUN6RCxpREFBOEM7QUFDOUMsaURBUzJCO0FBQzNCLDZDQVd5QjtBQUN6QixvREFBNEI7QUFDNUIsZ0VBQXFDO0FBQ3JDLDJDQUF1RTtBQXVCdkUsbUNBQThFO0FBQzlFLHVFQUE4RjtBQUM5Rix1REFBMkU7QUFFM0U7Ozs7O0dBS0c7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxrQkFBcUM7SUFDekUsUUFBUSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQyxLQUFLLG1DQUF1QixDQUFDLFlBQVk7WUFDdkMsT0FBTyx1QkFBdUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3JELEtBQUssbUNBQXVCLENBQUMsSUFBSTtZQUMvQixPQUFPLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzdDLEtBQUssbUNBQXVCLENBQUMsUUFBUTtZQUNuQyxPQUFPLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDakQsS0FBSyxtQ0FBdUIsQ0FBQyxhQUFhO1lBQ3hDLE9BQU8sd0JBQXdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN0RCxLQUFLLG1DQUF1QixDQUFDLE9BQU87WUFDbEMsT0FBTyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2hELEtBQUssbUNBQXVCLENBQUMsa0JBQWtCO1lBQzdDLE9BQU8sNkJBQTZCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMzRCxLQUFLLG1DQUF1QixDQUFDLGVBQWU7WUFDMUMsT0FBTyw0QkFBNEIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFELEtBQUssbUNBQXVCLENBQUMsaUJBQWlCO1lBQzVDLE9BQU8sNEJBQTRC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LFFBQVEsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6RCxDQUFDO1NBQU0sQ0FBQztRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLCtCQUErQixDQUFDLFlBQWdDO0lBQ3ZFLE1BQU0sS0FBSyxHQUFrQixFQUFFLENBQUM7SUFDaEMsSUFBSSxZQUFZLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDM0MsS0FBSyxNQUFNLElBQUksSUFBSSxZQUFZLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNsRCxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUNULE1BQU0sRUFBRSxJQUFJLG1CQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDbEMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7YUFDNUIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFTLHVCQUF1QixDQUFDLFdBQW1DLEVBQUUsWUFBZ0M7SUFDcEcsTUFBTSxVQUFVLEdBQUcsK0JBQStCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDakUsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUM5QixpQkFBaUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU29sU3Rha2luZ1R5cGVFbnVtIH0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5pbXBvcnQgeyBTb2xDb2luIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBjcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50SW5zdHJ1Y3Rpb24sXG4gIGNyZWF0ZUNsb3NlQWNjb3VudEluc3RydWN0aW9uLFxuICBjcmVhdGVNaW50VG9JbnN0cnVjdGlvbixcbiAgY3JlYXRlQnVybkluc3RydWN0aW9uLFxuICBjcmVhdGVSZWNvdmVyTmVzdGVkSW5zdHJ1Y3Rpb24sXG4gIGNyZWF0ZVRyYW5zZmVyQ2hlY2tlZEluc3RydWN0aW9uLFxuICBUT0tFTl8yMDIyX1BST0dSQU1fSUQsXG4gIGNyZWF0ZUFwcHJvdmVJbnN0cnVjdGlvbixcbn0gZnJvbSAnQHNvbGFuYS9zcGwtdG9rZW4nO1xuaW1wb3J0IHtcbiAgQWNjb3VudE1ldGEsXG4gIEF1dGhvcml6ZWQsXG4gIExvY2t1cCxcbiAgUHVibGljS2V5LFxuICBTdGFrZUF1dGhvcml6YXRpb25MYXlvdXQsXG4gIFN0YWtlUHJvZ3JhbSxcbiAgU3lzdGVtUHJvZ3JhbSxcbiAgVHJhbnNhY3Rpb24sXG4gIFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24sXG4gIENvbXB1dGVCdWRnZXRQcm9ncmFtLFxufSBmcm9tICdAc29sYW5hL3dlYjMuanMnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMsIE1FTU9fUFJPR1JBTV9QSyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIEF0YUNsb3NlLFxuICBBdGFJbml0LFxuICBBdGFSZWNvdmVyTmVzdGVkLFxuICBJbnN0cnVjdGlvblBhcmFtcyxcbiAgTWVtbyxcbiAgTWludFRvLFxuICBCdXJuLFxuICBOb25jZSxcbiAgU3Rha2luZ0FjdGl2YXRlLFxuICBTdGFraW5nQXV0aG9yaXplLFxuICBTdGFraW5nRGVhY3RpdmF0ZSxcbiAgU3Rha2luZ0RlbGVnYXRlLFxuICBTdGFraW5nV2l0aGRyYXcsXG4gIFRva2VuVHJhbnNmZXIsXG4gIFRyYW5zZmVyLFxuICBXYWxsZXRJbml0LFxuICBTZXRDb21wdXRlVW5pdExpbWl0LFxuICBTZXRQcmlvcml0eUZlZSxcbiAgQ3VzdG9tSW5zdHJ1Y3Rpb24sXG4gIEFwcHJvdmUsXG59IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgZ2V0U29sVG9rZW5Gcm9tVG9rZW5OYW1lLCBpc1ZhbGlkQmFzZTY0LCBpc1ZhbGlkSGV4IH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBkZXBvc2l0U29sSW5zdHJ1Y3Rpb25zLCB3aXRoZHJhd1N0YWtlSW5zdHJ1Y3Rpb25zIH0gZnJvbSAnLi9qaXRvU3Rha2VQb29sT3BlcmF0aW9ucyc7XG5pbXBvcnQgeyBnZXRUb2tlbjIwMjJDb25maWcsIFRyYW5zZmVySG9va0NvbmZpZyB9IGZyb20gJy4vdG9rZW4yMDIyQ29uZmlnJztcblxuLyoqXG4gKiBDb25zdHJ1Y3QgU29sYW5hIGluc3RydWN0aW9ucyBmcm9tIGluc3RydWN0aW9ucyBwYXJhbXNcbiAqXG4gKiBAcGFyYW0ge0luc3RydWN0aW9uUGFyYW1zfSBpbnN0cnVjdGlvblRvQnVpbGQgLSB0aGUgZGF0YSBjb250YWluaW5nIHRoZSBpbnN0cnVjdGlvbiBwYXJhbXNcbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgc3VwcG9ydGVkIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvbEluc3RydWN0aW9uRmFjdG9yeShpbnN0cnVjdGlvblRvQnVpbGQ6IEluc3RydWN0aW9uUGFyYW1zKTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdIHtcbiAgc3dpdGNoIChpbnN0cnVjdGlvblRvQnVpbGQudHlwZSkge1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuTm9uY2VBZHZhbmNlOlxuICAgICAgcmV0dXJuIGFkdmFuY2VOb25jZUluc3RydWN0aW9uKGluc3RydWN0aW9uVG9CdWlsZCk7XG4gICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5NZW1vOlxuICAgICAgcmV0dXJuIG1lbW9JbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVHJhbnNmZXI6XG4gICAgICByZXR1cm4gdHJhbnNmZXJJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVG9rZW5UcmFuc2ZlcjpcbiAgICAgIHJldHVybiB0b2tlblRyYW5zZmVySW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkFwcHJvdmU6XG4gICAgICByZXR1cm4gYXBwcm92ZUluc3RydWN0aW9uKGluc3RydWN0aW9uVG9CdWlsZCk7XG4gICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5DcmVhdGVOb25jZUFjY291bnQ6XG4gICAgICByZXR1cm4gY3JlYXRlTm9uY2VBY2NvdW50SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlN0YWtpbmdBY3RpdmF0ZTpcbiAgICAgIHJldHVybiBzdGFraW5nSW5pdGlhbGl6ZUluc3RydWN0aW9uKGluc3RydWN0aW9uVG9CdWlsZCk7XG4gICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TdGFraW5nRGVhY3RpdmF0ZTpcbiAgICAgIHJldHVybiBzdGFraW5nRGVhY3RpdmF0ZUluc3RydWN0aW9uKGluc3RydWN0aW9uVG9CdWlsZCk7XG4gICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TdGFraW5nV2l0aGRyYXc6XG4gICAgICByZXR1cm4gc3Rha2luZ1dpdGhkcmF3SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQ6XG4gICAgICByZXR1cm4gY3JlYXRlQVRBSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudDpcbiAgICAgIHJldHVybiBjbG9zZUFUQUluc3RydWN0aW9uKGluc3RydWN0aW9uVG9CdWlsZCk7XG4gICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5SZWNvdmVyTmVzdGVkQXNzb2NpYXRlZFRva2VuQWNjb3VudDpcbiAgICAgIHJldHVybiByZWNvdmVyTmVzdGVkQVRBSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlN0YWtpbmdBdXRob3JpemU6XG4gICAgICByZXR1cm4gc3Rha2luZ0F1dGhvcml6ZUluc3RydWN0aW9uKGluc3RydWN0aW9uVG9CdWlsZCk7XG4gICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TdGFraW5nRGVsZWdhdGU6XG4gICAgICByZXR1cm4gc3Rha2luZ0RlbGVnYXRlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlNldENvbXB1dGVVbml0TGltaXQ6XG4gICAgICByZXR1cm4gc2V0Q29tcHV0ZVVuaXRMaW1pdEluc3RydWN0aW9uKGluc3RydWN0aW9uVG9CdWlsZCk7XG4gICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TZXRQcmlvcml0eUZlZTpcbiAgICAgIHJldHVybiBmZXRjaFByaW9yaXR5RmVlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk1pbnRUbzpcbiAgICAgIHJldHVybiBtaW50VG9JbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQnVybjpcbiAgICAgIHJldHVybiBidXJuSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkN1c3RvbUluc3RydWN0aW9uOlxuICAgICAgcmV0dXJuIGN1c3RvbUluc3RydWN0aW9uKGluc3RydWN0aW9uVG9CdWlsZCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBpbnN0cnVjdGlvbiB0eXBlIG9yIG5vdCBzdXBwb3J0ZWRgKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnN0cnVjdCBBZHZhbmNlIE5vbmNlIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge05vbmNlfSBkYXRhIC0gdGhlIGRhdGEgdG8gYnVpbGQgdGhlIGluc3RydWN0aW9uXG4gKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBBbiBhcnJheSBjb250YWluaW5nIEFkdmFuY2UgTm9uY2UgU29sYW5hIGluc3RydWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGFkdmFuY2VOb25jZUluc3RydWN0aW9uKGRhdGE6IE5vbmNlKTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdIHtcbiAgY29uc3Qge1xuICAgIHBhcmFtczogeyBhdXRoV2FsbGV0QWRkcmVzcywgd2FsbGV0Tm9uY2VBZGRyZXNzIH0sXG4gIH0gPSBkYXRhO1xuICBhc3NlcnQoYXV0aFdhbGxldEFkZHJlc3MsICdNaXNzaW5nIGF1dGhXYWxsZXRBZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydCh3YWxsZXROb25jZUFkZHJlc3MsICdNaXNzaW5nIHdhbGxldE5vbmNlQWRkcmVzcyBwYXJhbScpO1xuICBjb25zdCBub25jZUluc3RydWN0aW9uID0gU3lzdGVtUHJvZ3JhbS5ub25jZUFkdmFuY2Uoe1xuICAgIG5vbmNlUHVia2V5OiBuZXcgUHVibGljS2V5KHdhbGxldE5vbmNlQWRkcmVzcyksXG4gICAgYXV0aG9yaXplZFB1YmtleTogbmV3IFB1YmxpY0tleShhdXRoV2FsbGV0QWRkcmVzcyksXG4gIH0pO1xuICByZXR1cm4gW25vbmNlSW5zdHJ1Y3Rpb25dO1xufVxuXG5mdW5jdGlvbiBzZXRDb21wdXRlVW5pdExpbWl0SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkOiBTZXRDb21wdXRlVW5pdExpbWl0KTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdIHtcbiAgY29uc3Qgc2V0Q29tcHV0ZVVuaXRMaW1pdCA9IENvbXB1dGVCdWRnZXRQcm9ncmFtLnNldENvbXB1dGVVbml0TGltaXQoe1xuICAgIHVuaXRzOiBpbnN0cnVjdGlvblRvQnVpbGQucGFyYW1zLnVuaXRzLFxuICB9KTtcblxuICByZXR1cm4gW3NldENvbXB1dGVVbml0TGltaXRdO1xufVxuXG5mdW5jdGlvbiBmZXRjaFByaW9yaXR5RmVlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkOiBTZXRQcmlvcml0eUZlZSk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IGFkZFByaW9yaXR5RmVlID0gQ29tcHV0ZUJ1ZGdldFByb2dyYW0uc2V0Q29tcHV0ZVVuaXRQcmljZSh7XG4gICAgbWljcm9MYW1wb3J0czogaW5zdHJ1Y3Rpb25Ub0J1aWxkLnBhcmFtcy5mZWUsXG4gIH0pO1xuXG4gIHJldHVybiBbYWRkUHJpb3JpdHlGZWVdO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBNZW1vIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge01lbW99IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgTWVtbyBTb2xhbmEgaW5zdHJ1Y3Rpb25cbiAqL1xuZnVuY3Rpb24gbWVtb0luc3RydWN0aW9uKGRhdGE6IE1lbW8pOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBjb25zdCB7XG4gICAgcGFyYW1zOiB7IG1lbW8gfSxcbiAgfSA9IGRhdGE7XG4gIGFzc2VydChtZW1vLCAnTWlzc2luZyBtZW1vIHBhcmFtJyk7XG4gIGNvbnN0IG1lbW9JbnN0cnVjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbkluc3RydWN0aW9uKHtcbiAgICBrZXlzOiBbXSxcbiAgICBwcm9ncmFtSWQ6IG5ldyBQdWJsaWNLZXkoTUVNT19QUk9HUkFNX1BLKSxcbiAgICBkYXRhOiBCdWZmZXIuZnJvbShtZW1vKSxcbiAgfSk7XG4gIHJldHVybiBbbWVtb0luc3RydWN0aW9uXTtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgVHJhbnNmZXIgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7VHJhbnNmZXJ9IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgVHJhbnNmZXIgU29sYW5hIGluc3RydWN0aW9uXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZmVySW5zdHJ1Y3Rpb24oZGF0YTogVHJhbnNmZXIpOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBjb25zdCB7XG4gICAgcGFyYW1zOiB7IGZyb21BZGRyZXNzLCB0b0FkZHJlc3MsIGFtb3VudCB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KGZyb21BZGRyZXNzLCAnTWlzc2luZyBmcm9tQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQodG9BZGRyZXNzLCAnTWlzc2luZyB0b0FkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGFtb3VudCwgJ01pc3NpbmcgdG9BZGRyZXNzIHBhcmFtJyk7XG4gIGNvbnN0IHRyYW5zZmVySW5zdHJ1Y3Rpb24gPSBTeXN0ZW1Qcm9ncmFtLnRyYW5zZmVyKHtcbiAgICBmcm9tUHVia2V5OiBuZXcgUHVibGljS2V5KGZyb21BZGRyZXNzKSxcbiAgICB0b1B1YmtleTogbmV3IFB1YmxpY0tleSh0b0FkZHJlc3MpLFxuICAgIGxhbXBvcnRzOiBwYXJzZUludChhbW91bnQsIDEwKSxcbiAgfSk7XG4gIHJldHVybiBbdHJhbnNmZXJJbnN0cnVjdGlvbl07XG59XG5cbi8qKlxuICogQ29uc3RydWN0IFRyYW5zZmVyIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1RyYW5zZmVyfSBkYXRhIC0gdGhlIGRhdGEgdG8gYnVpbGQgdGhlIGluc3RydWN0aW9uXG4gKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBBbiBhcnJheSBjb250YWluaW5nIFRyYW5zZmVyIFNvbGFuYSBpbnN0cnVjdGlvblxuICovXG5mdW5jdGlvbiB0b2tlblRyYW5zZmVySW5zdHJ1Y3Rpb24oZGF0YTogVG9rZW5UcmFuc2Zlcik6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHsgZnJvbUFkZHJlc3MsIHRvQWRkcmVzcywgYW1vdW50LCB0b2tlbk5hbWUsIHNvdXJjZUFkZHJlc3MgfSxcbiAgfSA9IGRhdGE7XG4gIGFzc2VydChmcm9tQWRkcmVzcywgJ01pc3NpbmcgZnJvbUFkZHJlc3MgKG93bmVyKSBwYXJhbScpO1xuICBhc3NlcnQodG9BZGRyZXNzLCAnTWlzc2luZyB0b0FkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGFtb3VudCwgJ01pc3NpbmcgYW1vdW50IHBhcmFtJyk7XG4gIGFzc2VydCh0b2tlbk5hbWUsICdNaXNzaW5nIHRva2VuIG5hbWUnKTtcbiAgYXNzZXJ0KHNvdXJjZUFkZHJlc3MsICdNaXNzaW5nIGF0YSBhZGRyZXNzJyk7XG4gIGNvbnN0IHRva2VuID0gZ2V0U29sVG9rZW5Gcm9tVG9rZW5OYW1lKGRhdGEucGFyYW1zLnRva2VuTmFtZSk7XG4gIGxldCB0b2tlbkFkZHJlc3M6IHN0cmluZztcbiAgbGV0IHByb2dyYW1JZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBsZXQgZGVjaW1hbFBsYWNlczogbnVtYmVyO1xuICBpZiAoZGF0YS5wYXJhbXMudG9rZW5BZGRyZXNzICYmIGRhdGEucGFyYW1zLmRlY2ltYWxQbGFjZXMgIT0gbnVsbCkge1xuICAgIHRva2VuQWRkcmVzcyA9IGRhdGEucGFyYW1zLnRva2VuQWRkcmVzcztcbiAgICBkZWNpbWFsUGxhY2VzID0gZGF0YS5wYXJhbXMuZGVjaW1hbFBsYWNlcztcbiAgICBwcm9ncmFtSWQgPSBkYXRhLnBhcmFtcy5wcm9ncmFtSWQ7XG4gIH0gZWxzZSBpZiAodG9rZW4pIHtcbiAgICBhc3NlcnQodG9rZW4gaW5zdGFuY2VvZiBTb2xDb2luKTtcbiAgICB0b2tlbkFkZHJlc3MgPSB0b2tlbi50b2tlbkFkZHJlc3M7XG4gICAgZGVjaW1hbFBsYWNlcyA9IHRva2VuLmRlY2ltYWxQbGFjZXM7XG4gICAgcHJvZ3JhbUlkID0gdG9rZW4ucHJvZ3JhbUlkO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0b2tlbiBuYW1lLCBnb3Q6JyArIGRhdGEucGFyYW1zLnRva2VuTmFtZSk7XG4gIH1cblxuICBsZXQgdHJhbnNmZXJJbnN0cnVjdGlvbjogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbjtcbiAgY29uc3QgaW5zdHJ1Y3Rpb25zOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10gPSBbXTtcblxuICBpZiAocHJvZ3JhbUlkID09PSBUT0tFTl8yMDIyX1BST0dSQU1fSUQudG9TdHJpbmcoKSkge1xuICAgIC8vIENyZWF0ZSB0aGUgYmFzZSB0cmFuc2ZlciBpbnN0cnVjdGlvblxuICAgIHRyYW5zZmVySW5zdHJ1Y3Rpb24gPSBjcmVhdGVUcmFuc2ZlckNoZWNrZWRJbnN0cnVjdGlvbihcbiAgICAgIG5ldyBQdWJsaWNLZXkoc291cmNlQWRkcmVzcyksXG4gICAgICBuZXcgUHVibGljS2V5KHRva2VuQWRkcmVzcyksXG4gICAgICBuZXcgUHVibGljS2V5KHRvQWRkcmVzcyksXG4gICAgICBuZXcgUHVibGljS2V5KGZyb21BZGRyZXNzKSxcbiAgICAgIEJpZ0ludChhbW91bnQpLFxuICAgICAgZGVjaW1hbFBsYWNlcyxcbiAgICAgIFtdLFxuICAgICAgVE9LRU5fMjAyMl9QUk9HUkFNX0lEXG4gICAgKTtcbiAgICAvLyBDaGVjayBpZiB0aGlzIHRva2VuIGhhcyBhIHRyYW5zZmVyIGhvb2sgY29uZmlndXJhdGlvblxuICAgIGNvbnN0IHRva2VuQ29uZmlnID0gZ2V0VG9rZW4yMDIyQ29uZmlnKHRva2VuQWRkcmVzcyk7XG4gICAgaWYgKHRva2VuQ29uZmlnPy50cmFuc2Zlckhvb2spIHtcbiAgICAgIGFkZFRyYW5zZmVySG9va0FjY291bnRzKHRyYW5zZmVySW5zdHJ1Y3Rpb24sIHRva2VuQ29uZmlnLnRyYW5zZmVySG9vayk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRyYW5zZmVySW5zdHJ1Y3Rpb24gPSBjcmVhdGVUcmFuc2ZlckNoZWNrZWRJbnN0cnVjdGlvbihcbiAgICAgIG5ldyBQdWJsaWNLZXkoc291cmNlQWRkcmVzcyksXG4gICAgICBuZXcgUHVibGljS2V5KHRva2VuQWRkcmVzcyksXG4gICAgICBuZXcgUHVibGljS2V5KHRvQWRkcmVzcyksXG4gICAgICBuZXcgUHVibGljS2V5KGZyb21BZGRyZXNzKSxcbiAgICAgIEJpZ0ludChhbW91bnQpLFxuICAgICAgZGVjaW1hbFBsYWNlc1xuICAgICk7XG4gIH1cbiAgaW5zdHJ1Y3Rpb25zLnB1c2godHJhbnNmZXJJbnN0cnVjdGlvbik7XG4gIHJldHVybiBpbnN0cnVjdGlvbnM7XG59XG5cbi8qKlxuICogQ29uc3RydWN0IFRyYW5zZmVyIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1RyYW5zZmVyfSBkYXRhIC0gdGhlIGRhdGEgdG8gYnVpbGQgdGhlIGluc3RydWN0aW9uXG4gKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBBbiBhcnJheSBjb250YWluaW5nIFRyYW5zZmVyIFNvbGFuYSBpbnN0cnVjdGlvblxuICovXG5mdW5jdGlvbiBhcHByb3ZlSW5zdHJ1Y3Rpb24oZGF0YTogQXBwcm92ZSk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHsgYWNjb3VudEFkZHJlc3MsIGRlbGVnYXRlQWRkcmVzcywgb3duZXJBZGRyZXNzLCBhbW91bnQsIHByb2dyYW1JZCB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KGFjY291bnRBZGRyZXNzLCAnTWlzc2luZyBmcm9tQWRkcmVzcyAob3duZXIpIHBhcmFtJyk7XG4gIGFzc2VydChkZWxlZ2F0ZUFkZHJlc3MsICdNaXNzaW5nIHRvQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQob3duZXJBZGRyZXNzLCAnTWlzc2luZyBvd25lckFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KHByb2dyYW1JZCwgJ01pc3NpbmcgcHJvZ3JhbUlkIHBhcmFtJyk7XG4gIGFzc2VydChhbW91bnQsICdNaXNzaW5nIGFtb3VudCBwYXJhbScpO1xuICByZXR1cm4gW1xuICAgIGNyZWF0ZUFwcHJvdmVJbnN0cnVjdGlvbihcbiAgICAgIG5ldyBQdWJsaWNLZXkoYWNjb3VudEFkZHJlc3MpLFxuICAgICAgbmV3IFB1YmxpY0tleShkZWxlZ2F0ZUFkZHJlc3MpLFxuICAgICAgbmV3IFB1YmxpY0tleShvd25lckFkZHJlc3MpLFxuICAgICAgQmlnSW50KGFtb3VudCksXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBwcm9ncmFtSWQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG5ldyBQdWJsaWNLZXkocHJvZ3JhbUlkKVxuICAgICksXG4gIF07XG59XG5cbi8qKlxuICogQ29uc3RydWN0IENyZWF0ZSBhbmQgSW5pdGlhbGl6ZSBOb25jZSBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKlxuICogQHBhcmFtIHtXYWxsZXRJbml0fSBkYXRhIC0gdGhlIGRhdGEgdG8gYnVpbGQgdGhlIGluc3RydWN0aW9uXG4gKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBBbiBhcnJheSBjb250YWluaW5nIENyZWF0ZSBhbmQgSW5pdGlhbGl6ZSBOb25jZSBTb2xhbmEgaW5zdHJ1Y3Rpb25cbiAqL1xuZnVuY3Rpb24gY3JlYXRlTm9uY2VBY2NvdW50SW5zdHJ1Y3Rpb24oZGF0YTogV2FsbGV0SW5pdCk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHsgZnJvbUFkZHJlc3MsIG5vbmNlQWRkcmVzcywgYXV0aEFkZHJlc3MsIGFtb3VudCB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KGZyb21BZGRyZXNzLCAnTWlzc2luZyBmcm9tQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQobm9uY2VBZGRyZXNzLCAnTWlzc2luZyBub25jZUFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGF1dGhBZGRyZXNzLCAnTWlzc2luZyBhdXRoQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoYW1vdW50LCAnTWlzc2luZyBhbW91bnQgcGFyYW0nKTtcbiAgY29uc3Qgbm9uY2VBY2NvdW50SW5zdHJ1Y3Rpb24gPSBTeXN0ZW1Qcm9ncmFtLmNyZWF0ZU5vbmNlQWNjb3VudCh7XG4gICAgZnJvbVB1YmtleTogbmV3IFB1YmxpY0tleShmcm9tQWRkcmVzcyksXG4gICAgbm9uY2VQdWJrZXk6IG5ldyBQdWJsaWNLZXkobm9uY2VBZGRyZXNzKSxcbiAgICBhdXRob3JpemVkUHVia2V5OiBuZXcgUHVibGljS2V5KGF1dGhBZGRyZXNzKSxcbiAgICBsYW1wb3J0czogbmV3IEJpZ051bWJlcihhbW91bnQpLnRvTnVtYmVyKCksXG4gIH0pO1xuICByZXR1cm4gbm9uY2VBY2NvdW50SW5zdHJ1Y3Rpb24uaW5zdHJ1Y3Rpb25zO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBDcmVhdGUgU3Rha2luZyBBY2NvdW50IGFuZCBEZWxlZ2F0ZSBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKlxuICogQHBhcmFtIHtTdGFraW5nQWN0aXZhdGV9IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgQ3JlYXRlIFN0YWtpbmcgQWNjb3VudCBhbmQgRGVsZWdhdGUgU29sYW5hIGluc3RydWN0aW9uc1xuICovXG5mdW5jdGlvbiBzdGFraW5nSW5pdGlhbGl6ZUluc3RydWN0aW9uKGRhdGE6IFN0YWtpbmdBY3RpdmF0ZSk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHsgZnJvbUFkZHJlc3MsIHN0YWtpbmdBZGRyZXNzLCBhbW91bnQsIHZhbGlkYXRvciwgc3Rha2luZ1R5cGUsIGV4dHJhUGFyYW1zIH0sXG4gIH0gPSBkYXRhO1xuICBhc3NlcnQoZnJvbUFkZHJlc3MsICdNaXNzaW5nIGZyb21BZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydChzdGFraW5nQWRkcmVzcywgJ01pc3Npbmcgc3Rha2luZ0FkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGFtb3VudCwgJ01pc3NpbmcgYW1vdW50IHBhcmFtJyk7XG4gIGFzc2VydCh2YWxpZGF0b3IsICdNaXNzaW5nIHZhbGlkYXRvciBwYXJhbScpO1xuXG4gIGNvbnN0IGZyb21QdWJrZXkgPSBuZXcgUHVibGljS2V5KGZyb21BZGRyZXNzKTtcbiAgY29uc3Qgc3Rha2VQdWJrZXkgPSBuZXcgUHVibGljS2V5KHN0YWtpbmdBZGRyZXNzKTtcbiAgY29uc3QgdmFsaWRhdG9yUHVia2V5ID0gbmV3IFB1YmxpY0tleSh2YWxpZGF0b3IpO1xuICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbigpO1xuXG4gIHN3aXRjaCAoc3Rha2luZ1R5cGUpIHtcbiAgICBjYXNlIFNvbFN0YWtpbmdUeXBlRW51bS5KSVRPOiB7XG4gICAgICBhc3NlcnQoZXh0cmFQYXJhbXMgIT09IHVuZGVmaW5lZCwgJ01pc3NpbmcgZXh0cmFQYXJhbXMgcGFyYW0nKTtcbiAgICAgIGNvbnN0IGluc3RydWN0aW9ucyA9IGRlcG9zaXRTb2xJbnN0cnVjdGlvbnMoXG4gICAgICAgIHtcbiAgICAgICAgICBzdGFrZVBvb2xBZGRyZXNzOiBzdGFrZVB1YmtleSxcbiAgICAgICAgICBmcm9tOiBmcm9tUHVia2V5LFxuICAgICAgICAgIGxhbXBvcnRzOiBCaWdJbnQoYW1vdW50KSxcbiAgICAgICAgfSxcbiAgICAgICAgZXh0cmFQYXJhbXMuc3Rha2VQb29sRGF0YSxcbiAgICAgICAgISFleHRyYVBhcmFtcy5jcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50XG4gICAgICApO1xuICAgICAgdHguYWRkKC4uLmluc3RydWN0aW9ucyk7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIFNvbFN0YWtpbmdUeXBlRW51bS5NQVJJTkFERToge1xuICAgICAgY29uc3Qgd2FsbGV0SW5pdFN0YWtpbmcgPSBTdGFrZVByb2dyYW0uY3JlYXRlQWNjb3VudCh7XG4gICAgICAgIGZyb21QdWJrZXksXG4gICAgICAgIHN0YWtlUHVia2V5LFxuICAgICAgICBhdXRob3JpemVkOiBuZXcgQXV0aG9yaXplZCh2YWxpZGF0b3JQdWJrZXksIGZyb21QdWJrZXkpLCAvLyBzdGFrZXIgYW5kIHdpdGhkcmF3ZXJcbiAgICAgICAgbG9ja3VwOiBuZXcgTG9ja3VwKDAsIDAsIGZyb21QdWJrZXkpLCAvLyBObyBtaW5pbXVtIGVwb2NoIHRvIHdpdGhkcmF3XG4gICAgICAgIGxhbXBvcnRzOiBuZXcgQmlnTnVtYmVyKGFtb3VudCkudG9OdW1iZXIoKSxcbiAgICAgIH0pO1xuICAgICAgdHguYWRkKHdhbGxldEluaXRTdGFraW5nKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgU29sU3Rha2luZ1R5cGVFbnVtLk5BVElWRToge1xuICAgICAgY29uc3Qgd2FsbGV0SW5pdFN0YWtpbmcgPSBTdGFrZVByb2dyYW0uY3JlYXRlQWNjb3VudCh7XG4gICAgICAgIGZyb21QdWJrZXksXG4gICAgICAgIHN0YWtlUHVia2V5LFxuICAgICAgICBhdXRob3JpemVkOiBuZXcgQXV0aG9yaXplZChmcm9tUHVia2V5LCBmcm9tUHVia2V5KSwgLy8gc3Rha2VyIGFuZCB3aXRoZHJhd2VyXG4gICAgICAgIGxvY2t1cDogbmV3IExvY2t1cCgwLCAwLCBmcm9tUHVia2V5KSwgLy8gTm8gbWluaW11bSBlcG9jaCB0byB3aXRoZHJhd1xuICAgICAgICBsYW1wb3J0czogbmV3IEJpZ051bWJlcihhbW91bnQpLnRvTnVtYmVyKCksXG4gICAgICB9KTtcbiAgICAgIHR4LmFkZCh3YWxsZXRJbml0U3Rha2luZyk7XG5cbiAgICAgIGNvbnN0IGRlbGVnYXRlU3Rha2luZyA9IFN0YWtlUHJvZ3JhbS5kZWxlZ2F0ZSh7XG4gICAgICAgIHN0YWtlUHVia2V5OiBuZXcgUHVibGljS2V5KHN0YWtpbmdBZGRyZXNzKSxcbiAgICAgICAgYXV0aG9yaXplZFB1YmtleTogbmV3IFB1YmxpY0tleShmcm9tQWRkcmVzcyksXG4gICAgICAgIHZvdGVQdWJrZXk6IG5ldyBQdWJsaWNLZXkodmFsaWRhdG9yKSxcbiAgICAgIH0pO1xuICAgICAgdHguYWRkKGRlbGVnYXRlU3Rha2luZyk7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBkZWZhdWx0OiB7XG4gICAgICBjb25zdCB1bnJlYWNoYWJsZTogbmV2ZXIgPSBzdGFraW5nVHlwZTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBzdGFraW5nIHR5cGUgJHt1bnJlYWNoYWJsZX1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHguaW5zdHJ1Y3Rpb25zO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBzdGFraW5nIGRlYWN0aXZhdGUgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7U3Rha2luZ0RlYWN0aXZhdGV9IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgc3Rha2luZyBkZWFjdGl2YXRlIGluc3RydWN0aW9uXG4gKi9cbmZ1bmN0aW9uIHN0YWtpbmdEZWFjdGl2YXRlSW5zdHJ1Y3Rpb24oZGF0YTogU3Rha2luZ0RlYWN0aXZhdGUpOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBjb25zdCB7XG4gICAgcGFyYW1zOiB7IGZyb21BZGRyZXNzLCBzdGFraW5nQWRkcmVzcywgYW1vdW50LCB1bnN0YWtpbmdBZGRyZXNzLCByZWNpcGllbnRzLCBzdGFraW5nVHlwZSwgZXh0cmFQYXJhbXMgfSxcbiAgfSA9IGRhdGE7XG4gIGFzc2VydChmcm9tQWRkcmVzcywgJ01pc3NpbmcgZnJvbUFkZHJlc3MgcGFyYW0nKTtcblxuICBzd2l0Y2ggKHN0YWtpbmdUeXBlKSB7XG4gICAgY2FzZSBTb2xTdGFraW5nVHlwZUVudW0uSklUTzoge1xuICAgICAgYXNzZXJ0KHN0YWtpbmdBZGRyZXNzLCAnTWlzc2luZyBzdGFraW5nQWRkcmVzcyBwYXJhbScpO1xuICAgICAgYXNzZXJ0KHVuc3Rha2luZ0FkZHJlc3MsICdNaXNzaW5nIHVuc3Rha2luZ0FkZHJlc3MgcGFyYW0nKTtcbiAgICAgIGFzc2VydChhbW91bnQsICdNaXNzaW5nIGFtb3VudCBwYXJhbScpO1xuICAgICAgYXNzZXJ0KGV4dHJhUGFyYW1zLCAnTWlzc2luZyBleHRyYVBhcmFtcyBwYXJhbScpO1xuXG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbigpO1xuICAgICAgdHguYWRkKFxuICAgICAgICAuLi53aXRoZHJhd1N0YWtlSW5zdHJ1Y3Rpb25zKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YWtlUG9vbEFkZHJlc3M6IG5ldyBQdWJsaWNLZXkoc3Rha2luZ0FkZHJlc3MpLFxuICAgICAgICAgICAgdG9rZW5Pd25lcjogbmV3IFB1YmxpY0tleShmcm9tQWRkcmVzcyksXG4gICAgICAgICAgICBkZXN0aW5hdGlvblN0YWtlQWNjb3VudDogbmV3IFB1YmxpY0tleSh1bnN0YWtpbmdBZGRyZXNzKSxcbiAgICAgICAgICAgIHZhbGlkYXRvckFkZHJlc3M6IG5ldyBQdWJsaWNLZXkoZXh0cmFQYXJhbXMudmFsaWRhdG9yQWRkcmVzcyksXG4gICAgICAgICAgICB0cmFuc2ZlckF1dGhvcml0eTogbmV3IFB1YmxpY0tleShleHRyYVBhcmFtcy50cmFuc2ZlckF1dGhvcml0eUFkZHJlc3MpLFxuICAgICAgICAgICAgcG9vbEFtb3VudDogYW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXh0cmFQYXJhbXMuc3Rha2VQb29sRGF0YVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgcmV0dXJuIHR4Lmluc3RydWN0aW9ucztcbiAgICB9XG5cbiAgICBjYXNlIFNvbFN0YWtpbmdUeXBlRW51bS5NQVJJTkFERToge1xuICAgICAgYXNzZXJ0KHJlY2lwaWVudHMsICdNaXNzaW5nIHJlY2lwaWVudHMgcGFyYW0nKTtcblxuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oKTtcbiAgICAgIGNvbnN0IHRvUHVia2V5QWRkcmVzcyA9IG5ldyBQdWJsaWNLZXkocmVjaXBpZW50c1swXS5hZGRyZXNzIHx8ICcnKTtcbiAgICAgIGNvbnN0IHRyYW5zZmVySW5zdHJ1Y3Rpb24gPSBTeXN0ZW1Qcm9ncmFtLnRyYW5zZmVyKHtcbiAgICAgICAgZnJvbVB1YmtleTogbmV3IFB1YmxpY0tleShmcm9tQWRkcmVzcyksXG4gICAgICAgIHRvUHVia2V5OiB0b1B1YmtleUFkZHJlc3MsXG4gICAgICAgIGxhbXBvcnRzOiBwYXJzZUludChyZWNpcGllbnRzWzBdLmFtb3VudCwgMTApLFxuICAgICAgfSk7XG5cbiAgICAgIHR4LmFkZCh0cmFuc2Zlckluc3RydWN0aW9uKTtcbiAgICAgIHJldHVybiB0eC5pbnN0cnVjdGlvbnM7XG4gICAgfVxuXG4gICAgY2FzZSBTb2xTdGFraW5nVHlwZUVudW0uTkFUSVZFOiB7XG4gICAgICBhc3NlcnQoc3Rha2luZ0FkZHJlc3MsICdNaXNzaW5nIHN0YWtpbmdBZGRyZXNzIHBhcmFtJyk7XG5cbiAgICAgIGlmIChkYXRhLnBhcmFtcy5hbW91bnQgJiYgZGF0YS5wYXJhbXMudW5zdGFraW5nQWRkcmVzcykge1xuICAgICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbigpO1xuICAgICAgICBjb25zdCB1bnN0YWtpbmdBZGRyZXNzID0gbmV3IFB1YmxpY0tleShkYXRhLnBhcmFtcy51bnN0YWtpbmdBZGRyZXNzKTtcblxuICAgICAgICBjb25zdCBhbGxvY2F0ZUFjY291bnQgPSBTeXN0ZW1Qcm9ncmFtLmFsbG9jYXRlKHtcbiAgICAgICAgICBhY2NvdW50UHVia2V5OiB1bnN0YWtpbmdBZGRyZXNzLFxuICAgICAgICAgIHNwYWNlOiBTdGFrZVByb2dyYW0uc3BhY2UsXG4gICAgICAgIH0pO1xuICAgICAgICB0eC5hZGQoYWxsb2NhdGVBY2NvdW50KTtcblxuICAgICAgICBjb25zdCBhc3NpZ25BY2NvdW50ID0gU3lzdGVtUHJvZ3JhbS5hc3NpZ24oe1xuICAgICAgICAgIGFjY291bnRQdWJrZXk6IHVuc3Rha2luZ0FkZHJlc3MsXG4gICAgICAgICAgcHJvZ3JhbUlkOiBTdGFrZVByb2dyYW0ucHJvZ3JhbUlkLFxuICAgICAgICB9KTtcbiAgICAgICAgdHguYWRkKGFzc2lnbkFjY291bnQpO1xuXG4gICAgICAgIGNvbnN0IHNwbGl0U3Rha2UgPSBTdGFrZVByb2dyYW0uc3BsaXQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3Rha2VQdWJrZXk6IG5ldyBQdWJsaWNLZXkoc3Rha2luZ0FkZHJlc3MpLFxuICAgICAgICAgICAgYXV0aG9yaXplZFB1YmtleTogbmV3IFB1YmxpY0tleShmcm9tQWRkcmVzcyksXG4gICAgICAgICAgICBzcGxpdFN0YWtlUHVia2V5OiB1bnN0YWtpbmdBZGRyZXNzLFxuICAgICAgICAgICAgbGFtcG9ydHM6IG5ldyBCaWdOdW1iZXIoZGF0YS5wYXJhbXMuYW1vdW50KS50b051bWJlcigpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgMFxuICAgICAgICApO1xuICAgICAgICB0eC5hZGQoc3BsaXRTdGFrZS5pbnN0cnVjdGlvbnNbMV0pO1xuXG4gICAgICAgIGNvbnN0IGRlYWN0aXZhdGVTdGFraW5nID0gU3Rha2VQcm9ncmFtLmRlYWN0aXZhdGUoe1xuICAgICAgICAgIHN0YWtlUHVia2V5OiB1bnN0YWtpbmdBZGRyZXNzLFxuICAgICAgICAgIGF1dGhvcml6ZWRQdWJrZXk6IG5ldyBQdWJsaWNLZXkoZnJvbUFkZHJlc3MpLFxuICAgICAgICB9KTtcbiAgICAgICAgdHguYWRkKGRlYWN0aXZhdGVTdGFraW5nKTtcblxuICAgICAgICByZXR1cm4gdHguaW5zdHJ1Y3Rpb25zO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZGVhY3RpdmF0ZVN0YWtpbmcgPSBTdGFrZVByb2dyYW0uZGVhY3RpdmF0ZSh7XG4gICAgICAgICAgc3Rha2VQdWJrZXk6IG5ldyBQdWJsaWNLZXkoc3Rha2luZ0FkZHJlc3MpLFxuICAgICAgICAgIGF1dGhvcml6ZWRQdWJrZXk6IG5ldyBQdWJsaWNLZXkoZnJvbUFkZHJlc3MpLFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZGVhY3RpdmF0ZVN0YWtpbmcuaW5zdHJ1Y3Rpb25zO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGNvbnN0IHVucmVhY2hhYmxlOiBuZXZlciA9IHN0YWtpbmdUeXBlO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHN0YWtpbmcgdHlwZSAke3VucmVhY2hhYmxlfWApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENvbnN0cnVjdCBTdGFraW5nIFdpdGhkcmF3IFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1N0YWtpbmdXaXRoZHJhd30gZGF0YSAtIHRoZSBkYXRhIHRvIGJ1aWxkIHRoZSBpbnN0cnVjdGlvblxuICogQHJldHVybnMge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gQW4gYXJyYXkgY29udGFpbmluZyBTdGFraW5nIFdpdGhkcmF3ICBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKi9cbmZ1bmN0aW9uIHN0YWtpbmdXaXRoZHJhd0luc3RydWN0aW9uKGRhdGE6IFN0YWtpbmdXaXRoZHJhdyk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHsgZnJvbUFkZHJlc3MsIHN0YWtpbmdBZGRyZXNzLCBhbW91bnQgfSxcbiAgfSA9IGRhdGE7XG4gIGFzc2VydChmcm9tQWRkcmVzcywgJ01pc3NpbmcgZnJvbUFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KHN0YWtpbmdBZGRyZXNzLCAnTWlzc2luZyBzdGFraW5nQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoYW1vdW50LCAnTWlzc2luZyBhbW91bnQgcGFyYW0nKTtcblxuICBjb25zdCB3aXRoZHJhd1N0YWtpbmcgPSBTdGFrZVByb2dyYW0ud2l0aGRyYXcoe1xuICAgIHN0YWtlUHVia2V5OiBuZXcgUHVibGljS2V5KHN0YWtpbmdBZGRyZXNzKSxcbiAgICBhdXRob3JpemVkUHVia2V5OiBuZXcgUHVibGljS2V5KGZyb21BZGRyZXNzKSxcbiAgICB0b1B1YmtleTogbmV3IFB1YmxpY0tleShmcm9tQWRkcmVzcyksXG4gICAgbGFtcG9ydHM6IG5ldyBCaWdOdW1iZXIoYW1vdW50KS50b051bWJlcigpLFxuICB9KTtcblxuICByZXR1cm4gd2l0aGRyYXdTdGFraW5nLmluc3RydWN0aW9ucztcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgQ3JlYXRlIGFuZCBJbml0aWFsaXplIE5vbmNlIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1dhbGxldEluaXR9IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgQ3JlYXRlIGFuZCBJbml0aWFsaXplIE5vbmNlIFNvbGFuYSBpbnN0cnVjdGlvblxuICovXG5mdW5jdGlvbiBjcmVhdGVBVEFJbnN0cnVjdGlvbihkYXRhOiBBdGFJbml0KTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdIHtcbiAgY29uc3Qge1xuICAgIHBhcmFtczogeyBtaW50QWRkcmVzcywgYXRhQWRkcmVzcywgb3duZXJBZGRyZXNzLCBwYXllckFkZHJlc3MsIHByb2dyYW1JZCB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KG1pbnRBZGRyZXNzLCAnTWlzc2luZyBtaW50QWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoYXRhQWRkcmVzcywgJ01pc3NpbmcgYXRhQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQob3duZXJBZGRyZXNzLCAnTWlzc2luZyBvd25lckFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KHBheWVyQWRkcmVzcywgJ01pc3NpbmcgcGF5ZXJBZGRyZXNzIHBhcmFtJyk7XG5cbiAgbGV0IGFzc29jaWF0ZWRUb2tlbkFjY291bnRJbnN0cnVjdGlvbjogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbjtcbiAgaWYgKHByb2dyYW1JZCAmJiBwcm9ncmFtSWQgPT09IFRPS0VOXzIwMjJfUFJPR1JBTV9JRC50b1N0cmluZygpKSB7XG4gICAgYXNzb2NpYXRlZFRva2VuQWNjb3VudEluc3RydWN0aW9uID0gY3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudEluc3RydWN0aW9uKFxuICAgICAgbmV3IFB1YmxpY0tleShwYXllckFkZHJlc3MpLFxuICAgICAgbmV3IFB1YmxpY0tleShhdGFBZGRyZXNzKSxcbiAgICAgIG5ldyBQdWJsaWNLZXkob3duZXJBZGRyZXNzKSxcbiAgICAgIG5ldyBQdWJsaWNLZXkobWludEFkZHJlc3MpLFxuICAgICAgVE9LRU5fMjAyMl9QUk9HUkFNX0lEXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBhc3NvY2lhdGVkVG9rZW5BY2NvdW50SW5zdHJ1Y3Rpb24gPSBjcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50SW5zdHJ1Y3Rpb24oXG4gICAgICBuZXcgUHVibGljS2V5KHBheWVyQWRkcmVzcyksXG4gICAgICBuZXcgUHVibGljS2V5KGF0YUFkZHJlc3MpLFxuICAgICAgbmV3IFB1YmxpY0tleShvd25lckFkZHJlc3MpLFxuICAgICAgbmV3IFB1YmxpY0tleShtaW50QWRkcmVzcylcbiAgICApO1xuICB9XG4gIHJldHVybiBbYXNzb2NpYXRlZFRva2VuQWNjb3VudEluc3RydWN0aW9uXTtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgQ2xvc2UgQVRBIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1dhbGxldEluaXR9IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgQ2xvc2UgQVRBIFNvbGFuYSBpbnN0cnVjdGlvblxuICovXG5mdW5jdGlvbiBjbG9zZUFUQUluc3RydWN0aW9uKGRhdGE6IEF0YUNsb3NlKTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdIHtcbiAgY29uc3Qge1xuICAgIHBhcmFtczogeyBhY2NvdW50QWRkcmVzcywgZGVzdGluYXRpb25BZGRyZXNzLCBhdXRob3JpdHlBZGRyZXNzIH0sXG4gIH0gPSBkYXRhO1xuICBhc3NlcnQoYWNjb3VudEFkZHJlc3MsICdNaXNzaW5nIGFjY291bnRBZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydChkZXN0aW5hdGlvbkFkZHJlc3MsICdNaXNzaW5nIGRlc3RpbmF0aW9uQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoYXV0aG9yaXR5QWRkcmVzcywgJ01pc3NpbmcgYXV0aG9yaXR5QWRkcmVzcyBwYXJhbScpO1xuXG4gIGNvbnN0IGNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudEluc3RydWN0aW9uID0gY3JlYXRlQ2xvc2VBY2NvdW50SW5zdHJ1Y3Rpb24oXG4gICAgbmV3IFB1YmxpY0tleShhY2NvdW50QWRkcmVzcyksXG4gICAgbmV3IFB1YmxpY0tleShkZXN0aW5hdGlvbkFkZHJlc3MpLFxuICAgIG5ldyBQdWJsaWNLZXkoYXV0aG9yaXR5QWRkcmVzcylcbiAgKTtcbiAgcmV0dXJuIFtjbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnRJbnN0cnVjdGlvbl07XG59XG5cbi8qKlxuICogQ29uc3RydWN0IFJlY292ZXJOZXN0ZWQgQVRBIFNvbGFuYSBpbnN0cnVjdGlvblxuICpcbiAqIFJlY292ZXJzIHRva2VucyBmcm9tIGEgbmVzdGVkIEFUQSAoYW4gQVRBIHdob3NlIG93bmVyIGlzIGFub3RoZXIgQVRBIHJhdGhlciB0aGFuIGEgd2FsbGV0IGFkZHJlc3MpLlxuICogVGhpcyB1c2VzIHRoZSBBc3NvY2lhdGVkIFRva2VuIEFjY291bnQgcHJvZ3JhbSdzIFJlY292ZXJOZXN0ZWQgaW5zdHJ1Y3Rpb24sIHdoaWNoIGFsbG93cyB0aGUgcm9vdFxuICogd2FsbGV0IG93bmVyIHRvIHNpZ24gYW5kIHJlY292ZXIgdG9rZW5zIHdpdGhvdXQgbmVlZGluZyB0aGUgaW50ZXJtZWRpYXRlIEFUQSB0byBzaWduLlxuICpcbiAqIEBwYXJhbSB7QXRhUmVjb3Zlck5lc3RlZH0gZGF0YSAtIHRoZSBkYXRhIHRvIGJ1aWxkIHRoZSBpbnN0cnVjdGlvblxuICogQHJldHVybnMge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgUmVjb3Zlck5lc3RlZCBpbnN0cnVjdGlvblxuICovXG5mdW5jdGlvbiByZWNvdmVyTmVzdGVkQVRBSW5zdHJ1Y3Rpb24oZGF0YTogQXRhUmVjb3Zlck5lc3RlZCk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHtcbiAgICAgIG5lc3RlZEFjY291bnRBZGRyZXNzLFxuICAgICAgbmVzdGVkTWludEFkZHJlc3MsXG4gICAgICBkZXN0aW5hdGlvbkFjY291bnRBZGRyZXNzLFxuICAgICAgb3duZXJBY2NvdW50QWRkcmVzcyxcbiAgICAgIG93bmVyTWludEFkZHJlc3MsXG4gICAgICB3YWxsZXRBZGRyZXNzLFxuICAgIH0sXG4gIH0gPSBkYXRhO1xuICBhc3NlcnQobmVzdGVkQWNjb3VudEFkZHJlc3MsICdNaXNzaW5nIG5lc3RlZEFjY291bnRBZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydChuZXN0ZWRNaW50QWRkcmVzcywgJ01pc3NpbmcgbmVzdGVkTWludEFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGRlc3RpbmF0aW9uQWNjb3VudEFkZHJlc3MsICdNaXNzaW5nIGRlc3RpbmF0aW9uQWNjb3VudEFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KG93bmVyQWNjb3VudEFkZHJlc3MsICdNaXNzaW5nIG93bmVyQWNjb3VudEFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KG93bmVyTWludEFkZHJlc3MsICdNaXNzaW5nIG93bmVyTWludEFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KHdhbGxldEFkZHJlc3MsICdNaXNzaW5nIHdhbGxldEFkZHJlc3MgcGFyYW0nKTtcblxuICBjb25zdCByZWNvdmVyTmVzdGVkSW5zdHJ1Y3Rpb24gPSBjcmVhdGVSZWNvdmVyTmVzdGVkSW5zdHJ1Y3Rpb24oXG4gICAgbmV3IFB1YmxpY0tleShuZXN0ZWRBY2NvdW50QWRkcmVzcyksXG4gICAgbmV3IFB1YmxpY0tleShuZXN0ZWRNaW50QWRkcmVzcyksXG4gICAgbmV3IFB1YmxpY0tleShkZXN0aW5hdGlvbkFjY291bnRBZGRyZXNzKSxcbiAgICBuZXcgUHVibGljS2V5KG93bmVyQWNjb3VudEFkZHJlc3MpLFxuICAgIG5ldyBQdWJsaWNLZXkob3duZXJNaW50QWRkcmVzcyksXG4gICAgbmV3IFB1YmxpY0tleSh3YWxsZXRBZGRyZXNzKVxuICApO1xuICByZXR1cm4gW3JlY292ZXJOZXN0ZWRJbnN0cnVjdGlvbl07XG59XG5cbi8qKlxuICogQ29uc3RydWN0IFN0YWtpbmcgQWNjb3VudCBBdXRob3JpemUgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7U3Rha2luZ0F1dGhvcml6ZX0gZGF0YSAtIHRoZSBkYXRhIHRvIGJ1aWxkIHRoZSBpbnN0cnVjdGlvblxuICogQHJldHVybnMge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gQW4gYXJyYXkgY29udGFpbmluZyBTdGFraW5nIEFjY291bnQgQXV0aG9yaXplIGluc3RydWN0aW9uc1xuICovXG5mdW5jdGlvbiBzdGFraW5nQXV0aG9yaXplSW5zdHJ1Y3Rpb24oZGF0YTogU3Rha2luZ0F1dGhvcml6ZSk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHsgc3Rha2luZ0FkZHJlc3MsIG9sZEF1dGhvcml6ZUFkZHJlc3MsIG5ld0F1dGhvcml6ZUFkZHJlc3MsIG5ld1dpdGhkcmF3QWRkcmVzcyB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KHN0YWtpbmdBZGRyZXNzLCAnTWlzc2luZyBzdGFraW5nQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQob2xkQXV0aG9yaXplQWRkcmVzcywgJ01pc3Npbmcgb2xkQXV0aG9yaXplQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQobmV3QXV0aG9yaXplQWRkcmVzcywgJ01pc3NpbmcgbmV3QXV0aG9yaXplQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQobmV3V2l0aGRyYXdBZGRyZXNzLCAnTWlzc2luZyBuZXdXaXRoZHJhd0FkZHJlc3MgcGFyYW0nKTtcblxuICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbigpO1xuXG4gIGNvbnN0IGF1dGhvcml6ZVN0YWtpbmcgPSBTdGFrZVByb2dyYW0uYXV0aG9yaXplKHtcbiAgICBzdGFrZVB1YmtleTogbmV3IFB1YmxpY0tleShzdGFraW5nQWRkcmVzcyksXG4gICAgYXV0aG9yaXplZFB1YmtleTogbmV3IFB1YmxpY0tleShvbGRBdXRob3JpemVBZGRyZXNzKSxcbiAgICBuZXdBdXRob3JpemVkUHVia2V5OiBuZXcgUHVibGljS2V5KG5ld0F1dGhvcml6ZUFkZHJlc3MpLFxuICAgIHN0YWtlQXV0aG9yaXphdGlvblR5cGU6IFN0YWtlQXV0aG9yaXphdGlvbkxheW91dC5TdGFrZXIsXG4gIH0pO1xuXG4gIGNvbnN0IGF1dGhvcml6ZVdpdGhkcmF3ID0gU3Rha2VQcm9ncmFtLmF1dGhvcml6ZSh7XG4gICAgc3Rha2VQdWJrZXk6IG5ldyBQdWJsaWNLZXkoc3Rha2luZ0FkZHJlc3MpLFxuICAgIGF1dGhvcml6ZWRQdWJrZXk6IG5ldyBQdWJsaWNLZXkob2xkQXV0aG9yaXplQWRkcmVzcyksXG4gICAgbmV3QXV0aG9yaXplZFB1YmtleTogbmV3IFB1YmxpY0tleShuZXdBdXRob3JpemVBZGRyZXNzKSxcbiAgICBzdGFrZUF1dGhvcml6YXRpb25UeXBlOiBTdGFrZUF1dGhvcml6YXRpb25MYXlvdXQuV2l0aGRyYXdlcixcbiAgICBjdXN0b2RpYW5QdWJrZXk6IG5ldyBQdWJsaWNLZXkobmV3V2l0aGRyYXdBZGRyZXNzKSxcbiAgfSk7XG4gIHR4LmFkZChhdXRob3JpemVTdGFraW5nKTtcbiAgdHguYWRkKGF1dGhvcml6ZVdpdGhkcmF3KTtcblxuICByZXR1cm4gdHguaW5zdHJ1Y3Rpb25zO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBEZWxlZ2F0ZSBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKlxuICogQHBhcmFtIHtTdGFraW5nQWN0aXZhdGV9IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgRGVsZWdhdGUgU29sYW5hIGluc3RydWN0aW9uc1xuICovXG5mdW5jdGlvbiBzdGFraW5nRGVsZWdhdGVJbnN0cnVjdGlvbihkYXRhOiBTdGFraW5nRGVsZWdhdGUpOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBjb25zdCB7XG4gICAgcGFyYW1zOiB7IGZyb21BZGRyZXNzLCBzdGFraW5nQWRkcmVzcywgdmFsaWRhdG9yIH0sXG4gIH0gPSBkYXRhO1xuICBhc3NlcnQoZnJvbUFkZHJlc3MsICdNaXNzaW5nIGZyb21BZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydChzdGFraW5nQWRkcmVzcywgJ01pc3Npbmcgc3Rha2luZ0FkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KHZhbGlkYXRvciwgJ01pc3NpbmcgdmFsaWRhdG9yIHBhcmFtJyk7XG4gIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKCk7XG4gIGNvbnN0IGRlbGVnYXRlU3Rha2luZyA9IFN0YWtlUHJvZ3JhbS5kZWxlZ2F0ZSh7XG4gICAgc3Rha2VQdWJrZXk6IG5ldyBQdWJsaWNLZXkoc3Rha2luZ0FkZHJlc3MpLFxuICAgIGF1dGhvcml6ZWRQdWJrZXk6IG5ldyBQdWJsaWNLZXkoZnJvbUFkZHJlc3MpLFxuICAgIHZvdGVQdWJrZXk6IG5ldyBQdWJsaWNLZXkodmFsaWRhdG9yKSxcbiAgfSk7XG4gIHR4LmFkZChkZWxlZ2F0ZVN0YWtpbmcpO1xuXG4gIHJldHVybiB0eC5pbnN0cnVjdGlvbnM7XG59XG5cbi8qKlxuICogQ29uc3RydWN0IE1pbnRUbyBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKlxuICogQHBhcmFtIHtNaW50VG99IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgTWludFRvIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqL1xuZnVuY3Rpb24gbWludFRvSW5zdHJ1Y3Rpb24oZGF0YTogTWludFRvKTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdIHtcbiAgY29uc3Qge1xuICAgIHBhcmFtczogeyBtaW50QWRkcmVzcywgZGVzdGluYXRpb25BZGRyZXNzLCBhdXRob3JpdHlBZGRyZXNzLCBhbW91bnQsIHByb2dyYW1JZCB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KG1pbnRBZGRyZXNzLCAnTWlzc2luZyBtaW50QWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoZGVzdGluYXRpb25BZGRyZXNzLCAnTWlzc2luZyBkZXN0aW5hdGlvbkFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGF1dGhvcml0eUFkZHJlc3MsICdNaXNzaW5nIGF1dGhvcml0eUFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGFtb3VudCwgJ01pc3NpbmcgYW1vdW50IHBhcmFtJyk7XG5cbiAgY29uc3QgbWludCA9IG5ldyBQdWJsaWNLZXkobWludEFkZHJlc3MpO1xuICBjb25zdCBkZXN0aW5hdGlvbiA9IG5ldyBQdWJsaWNLZXkoZGVzdGluYXRpb25BZGRyZXNzKTtcbiAgY29uc3QgYXV0aG9yaXR5ID0gbmV3IFB1YmxpY0tleShhdXRob3JpdHlBZGRyZXNzKTtcblxuICBsZXQgbWludFRvSW5zdHI6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb247XG4gIGlmIChwcm9ncmFtSWQgJiYgcHJvZ3JhbUlkID09PSBUT0tFTl8yMDIyX1BST0dSQU1fSUQudG9TdHJpbmcoKSkge1xuICAgIG1pbnRUb0luc3RyID0gY3JlYXRlTWludFRvSW5zdHJ1Y3Rpb24obWludCwgZGVzdGluYXRpb24sIGF1dGhvcml0eSwgQmlnSW50KGFtb3VudCksIFtdLCBUT0tFTl8yMDIyX1BST0dSQU1fSUQpO1xuICB9IGVsc2Uge1xuICAgIG1pbnRUb0luc3RyID0gY3JlYXRlTWludFRvSW5zdHJ1Y3Rpb24obWludCwgZGVzdGluYXRpb24sIGF1dGhvcml0eSwgQmlnSW50KGFtb3VudCkpO1xuICB9XG5cbiAgcmV0dXJuIFttaW50VG9JbnN0cl07XG59XG5cbi8qKlxuICogQ29uc3RydWN0IEJ1cm4gU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7QnVybn0gZGF0YSAtIHRoZSBkYXRhIHRvIGJ1aWxkIHRoZSBpbnN0cnVjdGlvblxuICogQHJldHVybnMge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gQW4gYXJyYXkgY29udGFpbmluZyBCdXJuIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqL1xuZnVuY3Rpb24gYnVybkluc3RydWN0aW9uKGRhdGE6IEJ1cm4pOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBjb25zdCB7XG4gICAgcGFyYW1zOiB7IG1pbnRBZGRyZXNzLCBhY2NvdW50QWRkcmVzcywgYXV0aG9yaXR5QWRkcmVzcywgYW1vdW50LCBwcm9ncmFtSWQgfSxcbiAgfSA9IGRhdGE7XG4gIGFzc2VydChtaW50QWRkcmVzcywgJ01pc3NpbmcgbWludEFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGFjY291bnRBZGRyZXNzLCAnTWlzc2luZyBhY2NvdW50QWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoYXV0aG9yaXR5QWRkcmVzcywgJ01pc3NpbmcgYXV0aG9yaXR5QWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoYW1vdW50LCAnTWlzc2luZyBhbW91bnQgcGFyYW0nKTtcblxuICBjb25zdCBtaW50ID0gbmV3IFB1YmxpY0tleShtaW50QWRkcmVzcyk7XG4gIGNvbnN0IGFjY291bnQgPSBuZXcgUHVibGljS2V5KGFjY291bnRBZGRyZXNzKTtcbiAgY29uc3QgYXV0aG9yaXR5ID0gbmV3IFB1YmxpY0tleShhdXRob3JpdHlBZGRyZXNzKTtcblxuICBsZXQgYnVybkluc3RyOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uO1xuICBpZiAocHJvZ3JhbUlkICYmIHByb2dyYW1JZCA9PT0gVE9LRU5fMjAyMl9QUk9HUkFNX0lELnRvU3RyaW5nKCkpIHtcbiAgICBidXJuSW5zdHIgPSBjcmVhdGVCdXJuSW5zdHJ1Y3Rpb24oYWNjb3VudCwgbWludCwgYXV0aG9yaXR5LCBCaWdJbnQoYW1vdW50KSwgW10sIFRPS0VOXzIwMjJfUFJPR1JBTV9JRCk7XG4gIH0gZWxzZSB7XG4gICAgYnVybkluc3RyID0gY3JlYXRlQnVybkluc3RydWN0aW9uKGFjY291bnQsIG1pbnQsIGF1dGhvcml0eSwgQmlnSW50KGFtb3VudCkpO1xuICB9XG5cbiAgcmV0dXJuIFtidXJuSW5zdHJdO1xufVxuXG4vKipcbiAqIFByb2Nlc3MgY3VzdG9tIGluc3RydWN0aW9uIC0gY29udmVydHMgdG8gVHJhbnNhY3Rpb25JbnN0cnVjdGlvblxuICogSGFuZGxlcyBjb252ZXJzaW9uIGZyb20gc3RyaW5nLWJhc2VkIGZvcm1hdCB0byBUcmFuc2FjdGlvbkluc3RydWN0aW9uIGZvcm1hdFxuICpcbiAqIEBwYXJhbSB7Q3VzdG9tSW5zdHJ1Y3Rpb259IGRhdGEgLSB0aGUgZGF0YSBjb250YWluaW5nIHRoZSBjdXN0b20gaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGN1c3RvbSBpbnN0cnVjdGlvblxuICovXG5mdW5jdGlvbiBjdXN0b21JbnN0cnVjdGlvbihkYXRhOiBJbnN0cnVjdGlvblBhcmFtcyk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHsgcGFyYW1zIH0gPSBkYXRhIGFzIEN1c3RvbUluc3RydWN0aW9uO1xuICBhc3NlcnQocGFyYW1zLnByb2dyYW1JZCwgJ01pc3NpbmcgcHJvZ3JhbUlkIGluIGN1c3RvbSBpbnN0cnVjdGlvbicpO1xuICBhc3NlcnQocGFyYW1zLmtleXMgJiYgQXJyYXkuaXNBcnJheShwYXJhbXMua2V5cyksICdNaXNzaW5nIG9yIGludmFsaWQga2V5cyBpbiBjdXN0b20gaW5zdHJ1Y3Rpb24nKTtcbiAgYXNzZXJ0KHBhcmFtcy5kYXRhICE9PSB1bmRlZmluZWQsICdNaXNzaW5nIGRhdGEgaW4gY3VzdG9tIGluc3RydWN0aW9uJyk7XG5cbiAgLy8gQ29udmVydCBzdHJpbmcgZGF0YSB0byBCdWZmZXJcbiAgbGV0IGRhdGFCdWZmZXI6IEJ1ZmZlcjtcblxuICBpZiAoaXNWYWxpZEJhc2U2NChwYXJhbXMuZGF0YSkpIHtcbiAgICBkYXRhQnVmZmVyID0gQnVmZmVyLmZyb20ocGFyYW1zLmRhdGEsICdiYXNlNjQnKTtcbiAgfSBlbHNlIGlmIChpc1ZhbGlkSGV4KHBhcmFtcy5kYXRhKSkge1xuICAgIGRhdGFCdWZmZXIgPSBCdWZmZXIuZnJvbShwYXJhbXMuZGF0YSwgJ2hleCcpO1xuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrIHRvIFVURi04XG4gICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHBhcmFtcy5kYXRhLCAndXRmOCcpO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGEgbmV3IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24gd2l0aCB0aGUgY29udmVydGVkIGRhdGFcbiAgY29uc3QgY29udmVydGVkSW5zdHJ1Y3Rpb24gPSBuZXcgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbih7XG4gICAgcHJvZ3JhbUlkOiBuZXcgUHVibGljS2V5KHBhcmFtcy5wcm9ncmFtSWQpLFxuICAgIGtleXM6IHBhcmFtcy5rZXlzLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgcHVia2V5OiBuZXcgUHVibGljS2V5KGtleS5wdWJrZXkpLFxuICAgICAgaXNTaWduZXI6IGtleS5pc1NpZ25lcixcbiAgICAgIGlzV3JpdGFibGU6IGtleS5pc1dyaXRhYmxlLFxuICAgIH0pKSxcbiAgICBkYXRhOiBkYXRhQnVmZmVyLFxuICB9KTtcblxuICByZXR1cm4gW2NvbnZlcnRlZEluc3RydWN0aW9uXTtcbn1cblxuZnVuY3Rpb24gdXBzZXJ0QWNjb3VudE1ldGEoa2V5czogQWNjb3VudE1ldGFbXSwgbWV0YTogQWNjb3VudE1ldGEpOiB2b2lkIHtcbiAgY29uc3QgZXhpc3RpbmcgPSBrZXlzLmZpbmQoKGFjY291bnQpID0+IGFjY291bnQucHVia2V5LmVxdWFscyhtZXRhLnB1YmtleSkpO1xuICBpZiAoZXhpc3RpbmcpIHtcbiAgICBleGlzdGluZy5pc1dyaXRhYmxlID0gZXhpc3RpbmcuaXNXcml0YWJsZSB8fCBtZXRhLmlzV3JpdGFibGU7XG4gICAgZXhpc3RpbmcuaXNTaWduZXIgPSBleGlzdGluZy5pc1NpZ25lciB8fCBtZXRhLmlzU2lnbmVyO1xuICB9IGVsc2Uge1xuICAgIGtleXMucHVzaChtZXRhKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZFN0YXRpY1RyYW5zZmVySG9va0FjY291bnRzKHRyYW5zZmVySG9vazogVHJhbnNmZXJIb29rQ29uZmlnKTogQWNjb3VudE1ldGFbXSB7XG4gIGNvbnN0IG1ldGFzOiBBY2NvdW50TWV0YVtdID0gW107XG4gIGlmICh0cmFuc2Zlckhvb2suZXh0cmFBY2NvdW50TWV0YXM/Lmxlbmd0aCkge1xuICAgIGZvciAoY29uc3QgbWV0YSBvZiB0cmFuc2Zlckhvb2suZXh0cmFBY2NvdW50TWV0YXMpIHtcbiAgICAgIG1ldGFzLnB1c2goe1xuICAgICAgICBwdWJrZXk6IG5ldyBQdWJsaWNLZXkobWV0YS5wdWJrZXkpLFxuICAgICAgICBpc1NpZ25lcjogbWV0YS5pc1NpZ25lcixcbiAgICAgICAgaXNXcml0YWJsZTogbWV0YS5pc1dyaXRhYmxlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBtZXRhcztcbn1cblxuZnVuY3Rpb24gYWRkVHJhbnNmZXJIb29rQWNjb3VudHMoaW5zdHJ1Y3Rpb246IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24sIHRyYW5zZmVySG9vazogVHJhbnNmZXJIb29rQ29uZmlnKTogdm9pZCB7XG4gIGNvbnN0IGV4dHJhTWV0YXMgPSBidWlsZFN0YXRpY1RyYW5zZmVySG9va0FjY291bnRzKHRyYW5zZmVySG9vayk7XG4gIGZvciAoY29uc3QgbWV0YSBvZiBleHRyYU1ldGFzKSB7XG4gICAgdXBzZXJ0QWNjb3VudE1ldGEoaW5zdHJ1Y3Rpb24ua2V5cywgbWV0YSk7XG4gIH1cbn1cbiJdfQ==
|