@bitgo-beta/bitgo 14.2.1-beta.2208 → 14.2.1-beta.2209
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/dist/browser/BitGoJS.min.js +2 -2
- package/dist/package.json +94 -94
- package/dist/test/v2/unit/internal/tssUtils/ecdsaVrfMPCv2/createKeychains.js +75 -39
- package/dist/test/v2/unit/internal/tssUtils/ecdsaVrfMPCv2/createSafeChildKeychains.js +75 -25
- package/dist/test/v2/unit/internal/tssUtils/eddsa.js +39 -1
- package/dist/test/v2/unit/wallet.js +42 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +94 -94
|
@@ -898,6 +898,44 @@ describe('TSS Utils:', async function () {
|
|
|
898
898
|
});
|
|
899
899
|
nockedCreateTx.isDone().should.be.true();
|
|
900
900
|
});
|
|
901
|
+
it('should send videoApprovers as a top-level field, outside the intent', async function () {
|
|
902
|
+
const videoApprovers = ['5cae3130f8f4561d51dfcbfdaafba9b9'];
|
|
903
|
+
const nockedCreateTx = await (0, common_1.nockCreateTxRequest)({
|
|
904
|
+
walletId: wallet.id(),
|
|
905
|
+
requestBody: {
|
|
906
|
+
apiVersion: 'lite',
|
|
907
|
+
intent: {
|
|
908
|
+
intentType: 'payment',
|
|
909
|
+
recipients: [
|
|
910
|
+
{
|
|
911
|
+
address: {
|
|
912
|
+
address: 'recipient',
|
|
913
|
+
},
|
|
914
|
+
amount: {
|
|
915
|
+
value: '10000',
|
|
916
|
+
symbol: 'tsol',
|
|
917
|
+
},
|
|
918
|
+
},
|
|
919
|
+
],
|
|
920
|
+
},
|
|
921
|
+
videoApprovers,
|
|
922
|
+
},
|
|
923
|
+
// don't care about the actual response - just need to make sure request body matches
|
|
924
|
+
response: {},
|
|
925
|
+
});
|
|
926
|
+
await tssUtils.prebuildTxWithIntent({
|
|
927
|
+
reqId,
|
|
928
|
+
recipients: [
|
|
929
|
+
{
|
|
930
|
+
address: 'recipient',
|
|
931
|
+
amount: '10000',
|
|
932
|
+
},
|
|
933
|
+
],
|
|
934
|
+
intentType: 'payment',
|
|
935
|
+
videoApprovers,
|
|
936
|
+
});
|
|
937
|
+
nockedCreateTx.isDone().should.be.true();
|
|
938
|
+
});
|
|
901
939
|
it('should build multiple recipients with memo tx', async function () {
|
|
902
940
|
const nockedCreateTx = await (0, common_1.nockCreateTxRequest)({
|
|
903
941
|
walletId: wallet.id(),
|
|
@@ -1247,4 +1285,4 @@ describe('TSS Utils:', async function () {
|
|
|
1247
1285
|
});
|
|
1248
1286
|
// #endregion Nock helpers
|
|
1249
1287
|
});
|
|
1250
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3YyL3VuaXQvaW50ZXJuYWwvdHNzVXRpbHMvZWRkc2EudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpQ0FBaUM7QUFDakMsa0RBQWtEO0FBQ2xELDRCQUE0QjtBQUM1Qiw2QkFBOEI7QUFDOUIsbUNBQW1DO0FBQ25DLGlDQUFrQztBQUNsQywrQkFBK0I7QUFFL0IsbURBQTZEO0FBQzdELDRDQUEyQztBQUMzQyxtREFzQjhCO0FBQzlCLCtDQUEyRDtBQUMzRCxxQ0FPa0I7QUFFbEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUV4QyxRQUFRLENBQUMsWUFBWSxFQUFFLEtBQUs7SUFDMUIsSUFBSSxPQUEyQixDQUFDO0lBQ2hDLElBQUksR0FBVSxDQUFDO0lBQ2YsSUFBSSxLQUFhLENBQUM7SUFDbEIsSUFBSSxRQUFrQixDQUFDO0lBQ3ZCLElBQUksVUFBVSxDQUFDO0lBQ2YsSUFBSSxZQUFZLENBQUM7SUFDakIsSUFBSSxXQUFXLENBQUM7SUFDaEIsSUFBSSxLQUF5QixDQUFDO0lBQzlCLElBQUksUUFBa0IsQ0FBQztJQUN2QixJQUFJLE1BQWMsQ0FBQztJQUNuQixJQUFJLGFBQWEsQ0FBQztJQUNsQixNQUFNLEtBQUssR0FBRyxJQUFJLHdCQUFhLEVBQUUsQ0FBQztJQUNsQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUM7SUFDeEIsTUFBTSx3QkFBd0IsR0FBRztRQUMvQixNQUFNLEVBQUU7WUFDTixDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxDQUFDO1lBQ0osQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsa0VBQWtFO1lBQ3JFLElBQUksRUFBRSxrRUFBa0U7WUFDeEUsU0FBUyxFQUFFLGtFQUFrRTtTQUM5RTtRQUNELGVBQWUsRUFBRSxrRUFBa0U7UUFDbkYsV0FBVyxFQUFFO1lBQ1gsQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxrRUFBa0U7WUFDckUsQ0FBQyxFQUFFLGtFQUFrRTtZQUNyRSxDQUFDLEVBQUUsa0VBQWtFO1lBQ3JFLFNBQVMsRUFBRSxrRUFBa0U7U0FDOUU7UUFDRCxZQUFZLEVBQUU7WUFDWixDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxDQUFDO1lBQ0osQ0FBQyxFQUFFLGtFQUFrRTtZQUNyRSxDQUFDLEVBQUUsa0VBQWtFO1lBQ3JFLENBQUMsRUFBRSxrRUFBa0U7WUFDckUsU0FBUyxFQUFFLGtFQUFrRTtTQUM5RTtLQUNGLENBQUM7SUFFRixNQUFNLGtCQUFrQixHQUFHO1FBQ3pCLE1BQU0sRUFBRTtZQUNOLENBQUMsRUFBRSxDQUFDO1lBQ0osQ0FBQyxFQUFFLGtFQUFrRTtZQUNyRSxDQUFDLEVBQUUsa0VBQWtFO1lBQ3JFLENBQUMsRUFBRSxrRUFBa0U7WUFDckUsQ0FBQyxFQUFFLGtFQUFrRTtTQUN0RTtRQUNELE9BQU8sRUFBRTtZQUNQLENBQUMsRUFBRTtnQkFDRCxDQUFDLEVBQUUsQ0FBQztnQkFDSixDQUFDLEVBQUUsQ0FBQztnQkFDSixDQUFDLEVBQUUsa0VBQWtFO2dCQUNyRSxDQUFDLEVBQUUsa0VBQWtFO2dCQUNyRSxDQUFDLEVBQUUsa0VBQWtFO2dCQUNyRSxDQUFDLEVBQUUsa0VBQWtFO2dCQUNyRSxVQUFVLEVBQUUsa0VBQWtFO2FBQy9FO1NBQ0Y7S0FDRixDQUFDO0lBRUYsTUFBTSx5QkFBeUIsR0FBRztRQUNoQyxNQUFNLEVBQUU7WUFDTixDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxrRUFBa0U7WUFDckUsQ0FBQyxFQUFFLGtFQUFrRTtZQUNyRSxDQUFDLEVBQUUsa0VBQWtFO1lBQ3JFLENBQUMsRUFBRSxrRUFBa0U7U0FDdEU7UUFDRCxPQUFPLEVBQUU7WUFDUCxDQUFDLEVBQUU7Z0JBQ0QsQ0FBQyxFQUFFLENBQUM7Z0JBQ0osQ0FBQyxFQUFFLENBQUM7Z0JBQ0osQ0FBQyxFQUFFLGtFQUFrRTtnQkFDckUsQ0FBQyxFQUFFLGtFQUFrRTtnQkFDckUsQ0FBQyxFQUFFLGtFQUFrRTtnQkFDckUsQ0FBQyxFQUFFLGtFQUFrRTtnQkFDckUsVUFBVSxFQUFFLGtFQUFrRTthQUMvRTtTQUNGO0tBQ0YsQ0FBQztJQUVGLE1BQU0sU0FBUyxHQUFHO1FBQ2hCLFdBQVcsRUFBRSxVQUFVO1FBQ3ZCLFdBQVcsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxDQUFDO1FBQ2pHLGVBQWUsRUFBRTtZQUNmO2dCQUNFLElBQUksRUFBRSxPQUFPO2dCQUNiLEVBQUUsRUFBRSxNQUFNO2dCQUNWLEtBQUssRUFBRSx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZGO1NBQ0Y7S0FDRixDQUFDO0lBRUYsVUFBVSxDQUFDO1FBQ1QsT0FBTyxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNsQyxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQztRQUNSLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNwQixDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxLQUFLO1FBQzdCLE1BQU0sTUFBTSxHQUFHLE1BQU0sdUJBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQyxHQUFHLEdBQUcsTUFBTSxnQkFBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxLQUFLO1FBQ1YsYUFBYSxHQUFHLE1BQU0sR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTVDLFVBQVUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDckMsT0FBTyxFQUFFO2dCQUNQO29CQUNFLElBQUksRUFBRSxNQUFNO29CQUNaLEtBQUssRUFBRSxlQUFlO2lCQUN2QjthQUNGO1lBQ0QsS0FBSyxFQUFFLFdBQVc7U0FDbkIsQ0FBQyxDQUFDO1FBRUgsWUFBWSxHQUFHLE1BQU0sT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUN2QyxPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsSUFBSSxFQUFFLFlBQVk7b0JBQ2xCLEtBQUssRUFBRSxxQkFBcUI7aUJBQzdCO2FBQ0Y7WUFDRCxLQUFLLEVBQUUsV0FBVztTQUNuQixDQUFDLENBQUM7UUFFSCxXQUFXLEdBQUcsTUFBTSxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQ3RDLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxJQUFJLEVBQUUsT0FBTztvQkFDYixLQUFLLEVBQUUsZ0JBQWdCO2lCQUN4QjthQUNGO1lBQ0QsS0FBSyxFQUFFLFdBQVc7U0FDbkIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxTQUFTLEdBQUc7WUFDaEIsR0FBRyxFQUFFO2dCQUNILGNBQWMsRUFBRSxXQUFXLENBQUMsU0FBUzthQUN0QztTQUNGLENBQUM7UUFFRixLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsV0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbkQsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFM0IsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFaEMsS0FBSyxHQUFHLGlCQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUVoRCxnRUFBZ0U7UUFDaEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRTNGLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLEVBQUUsRUFBRSxrQ0FBa0M7WUFDdEMsSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJLEVBQUU7Z0JBQ0osa0NBQWtDO2dCQUNsQyxrQ0FBa0M7Z0JBQ2xDLGtDQUFrQzthQUNuQztZQUNELFlBQVksRUFBRSxFQUFFO1lBQ2hCLFlBQVksRUFBRSxLQUFLO1NBQ3BCLENBQUM7UUFDRixNQUFNLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDakQsUUFBUSxHQUFHLElBQUksbUJBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELENBQUMsQ0FBQyxDQUFDO0lBRUgsS0FBSyxDQUFDO1FBQ0osSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEtBQUs7UUFDL0IsRUFBRSxDQUFDLGdDQUFnQyxFQUFFLEtBQUs7WUFDeEMsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUU3QyxNQUFNLG1CQUFtQixHQUFHLE1BQU0saUJBQWlCLENBQUM7Z0JBQ2xELElBQUksRUFBRSxRQUFRO2dCQUNkLFlBQVk7Z0JBQ1osY0FBYztnQkFDZCxhQUFhO2dCQUNiLFVBQVU7Z0JBQ1YsWUFBWTtnQkFDWixXQUFXO2FBQ1osQ0FBQyxDQUFDO1lBQ0gsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDdEUsTUFBTSxrQkFBa0IsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBRTdDLE1BQU0sYUFBYSxHQUFHLE1BQU0sUUFBUSxDQUFDLG1CQUFtQixDQUFDO2dCQUN2RCxVQUFVO2dCQUNWLFlBQVk7Z0JBQ1osWUFBWTtnQkFDWixjQUFjO2FBQ2YsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxZQUFZLEdBQUcsTUFBTSxRQUFRLENBQUMsa0JBQWtCLENBQUM7Z0JBQ3JELFVBQVU7Z0JBQ1YsWUFBWTtnQkFDWixZQUFZO2dCQUNaLGNBQWM7Z0JBQ2QsYUFBYTtnQkFDYixVQUFVLEVBQUUsWUFBWTthQUN6QixDQUFDLENBQUM7WUFDSCxNQUFNLGNBQWMsR0FBRyxNQUFNLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztnQkFDekQsVUFBVTtnQkFDVixZQUFZO2dCQUNaLFlBQVk7Z0JBQ1osY0FBYztnQkFDZCxhQUFhO2dCQUNiLFVBQVUsRUFBRSxZQUFZO2FBQ3pCLENBQUMsQ0FBQztZQUVILGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDcEQsWUFBWSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUVsRCw2REFBNkQ7WUFDN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDYixNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU07Z0JBQzdCLFdBQVcsRUFBRSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDckMsVUFBVSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQ3BDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpR0FBaUcsRUFBRSxLQUFLO1lBQ3pHLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzQyxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFN0MsNkZBQTZGO1lBQzdGLGdGQUFnRjtZQUNoRixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDUixHQUFHLENBQUMsMEJBQTBCLENBQUM7aUJBQy9CLEtBQUssQ0FBQyxFQUFFLENBQUM7aUJBQ1QsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsY0FBYyxFQUFFLFdBQVcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM1RixNQUFNLGlCQUFpQixDQUFDO2dCQUN0QixJQUFJLEVBQUUsUUFBUTtnQkFDZCxZQUFZO2dCQUNaLGNBQWM7Z0JBQ2QsYUFBYTtnQkFDYixVQUFVO2dCQUNWLFlBQVk7Z0JBQ1osV0FBVzthQUNaLENBQUMsQ0FBQztZQUNILE1BQU0sYUFBYSxHQUFHLE1BQU0sUUFBUSxDQUFDLG1CQUFtQixDQUFDO2dCQUN2RCxVQUFVO2dCQUNWLFlBQVk7Z0JBQ1osWUFBWTtnQkFDWixjQUFjO2FBQ2YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUMzRSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFrRCxDQUFDLENBQUM7WUFFOUcsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDO1lBQ3JDLE1BQU0sWUFBWSxHQUFHLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSx3QkFBd0IsRUFBRSxDQUFDO1lBQzlHLE1BQU0sUUFBUSxDQUFDLGtCQUFrQixDQUFDO2dCQUNoQyxVQUFVO2dCQUNWLFlBQVk7Z0JBQ1osWUFBWTtnQkFDWixjQUFjO2dCQUNkLGFBQWE7Z0JBQ2IsVUFBVSxFQUFFLFlBQVk7Z0JBQ3hCLFlBQVk7Z0JBQ1osVUFBVSxFQUFFLFlBQVk7YUFDekIsQ0FBQyxDQUFDO1lBRUgsOEZBQThGO1lBQzlGLHVFQUF1RTtZQUN2RSxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsK0RBQStELENBQUMsQ0FBQztZQUMvRixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQXVCLENBQUM7WUFDN0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLGdEQUFnRCxDQUFDLENBQUM7WUFDL0UsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdEUsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztZQUMzRCxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLDRCQUE0QixDQUFDLENBQUM7WUFDeEUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0csTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLFNBQVMsRUFBRSwrQ0FBK0MsQ0FBQyxDQUFDO1FBQ3ZHLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1EQUFtRCxFQUFFLEtBQUs7WUFDM0QsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUU3QyxNQUFNLG1CQUFtQixHQUFHLE1BQU0saUJBQWlCLENBQUM7Z0JBQ2xELElBQUksRUFBRSxRQUFRO2dCQUNkLFlBQVk7Z0JBQ1osY0FBYztnQkFDZCxhQUFhO2dCQUNiLFVBQVU7Z0JBQ1YsaUdBQWlHO2dCQUNqRyxZQUFZO2dCQUNaLFdBQVc7YUFDWixDQUFDLENBQUM7WUFDSCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN0RSxNQUFNLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFFN0MsTUFBTSxhQUFhLEdBQUcsTUFBTSxRQUFRLENBQUMsbUJBQW1CLENBQUM7Z0JBQ3ZELFVBQVU7Z0JBQ1YsWUFBWTtnQkFDWixZQUFZO2dCQUNaLGNBQWM7YUFDZixDQUFDLENBQUM7WUFDSCxNQUFNLFlBQVksR0FBRyxNQUFNLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDckQsVUFBVTtnQkFDVixZQUFZO2dCQUNaLFlBQVk7Z0JBQ1osY0FBYztnQkFDZCxhQUFhO2FBQ2QsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxjQUFjLEdBQUcsTUFBTSxRQUFRLENBQUMsb0JBQW9CLENBQUM7Z0JBQ3pELFVBQVU7Z0JBQ1YsWUFBWTtnQkFDWixZQUFZO2dCQUNaLGNBQWM7Z0JBQ2QsYUFBYTthQUNkLENBQUMsQ0FBQztZQUVILGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDcEQsWUFBWSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUVsRCw2REFBNkQ7WUFDN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDYixNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU07Z0JBQzdCLFdBQVcsRUFBRSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDckMsVUFBVSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQ3BDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxREFBcUQsRUFBRSxLQUFLO1lBQzdELE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQztZQUVoQyxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0MsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRTdDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQztnQkFDbEQsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsWUFBWTtnQkFDWixjQUFjO2dCQUNkLGFBQWE7Z0JBQ2IsVUFBVTtnQkFDVixZQUFZO2dCQUNaLFdBQVc7YUFDWixDQUFDLENBQUM7WUFDSCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN0RSxNQUFNLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFFN0MsTUFBTSxhQUFhLEdBQUcsTUFBTSxRQUFRLENBQUMsbUJBQW1CLENBQUM7Z0JBQ3ZELFVBQVU7Z0JBQ1YsWUFBWTtnQkFDWixZQUFZO2dCQUNaLGNBQWM7Z0JBQ2QsVUFBVTthQUNYLENBQUMsQ0FBQztZQUNILE1BQU0sWUFBWSxHQUFHLE1BQU0sUUFBUSxDQUFDLGtCQUFrQixDQUFDO2dCQUNyRCxVQUFVO2dCQUNWLFlBQVk7Z0JBQ1osWUFBWTtnQkFDWixjQUFjO2dCQUNkLGFBQWE7Z0JBQ2IsVUFBVSxFQUFFLFlBQVk7Z0JBQ3hCLDhCQUE4QixFQUFFLGdDQUFnQzthQUNqRSxDQUFDLENBQUM7WUFDSCxNQUFNLGNBQWMsR0FBRyxNQUFNLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztnQkFDekQsVUFBVTtnQkFDVixZQUFZO2dCQUNaLFlBQVk7Z0JBQ1osY0FBYztnQkFDZCxhQUFhO2dCQUNiLFVBQVUsRUFBRSxZQUFZO2FBQ3pCLENBQUMsQ0FBQztZQUVILGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDcEQsWUFBWSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUVsRCw2REFBNkQ7WUFDN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDYixNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU07Z0JBQzdCLFdBQVcsRUFBRSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDckMsVUFBVSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQ3BDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5RkFBeUYsRUFBRSxLQUFLO1lBQ2pHLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzQyxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFN0MsTUFBTSxhQUFhLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQztnQkFDaEQsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsWUFBWTtnQkFDWixjQUFjO2dCQUNkLGFBQWE7Z0JBQ2IsVUFBVTtnQkFDVixZQUFZO2dCQUNaLFdBQVc7YUFDWixDQUFDLENBQUM7WUFFSCxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUEsZ0NBQXFCLEVBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xHLE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLE1BQU0sUUFBUSxHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNuRSwrR0FBK0c7WUFDL0cseUNBQXlDO1lBQ3pDLHNGQUFzRjtZQUN0RixtREFBbUQ7WUFDbkQsNkRBQTZEO1lBQzdELGFBQWE7WUFDYixhQUFhLENBQUMseUJBQXlCLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFFekcsTUFBTSxRQUFRO2lCQUNYLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztpQkFDMUYsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx1SEFBdUgsRUFBRSxLQUFLO1lBQy9ILE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzQyxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFN0MsTUFBTSxhQUFhLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQztnQkFDaEQsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsWUFBWTtnQkFDWixjQUFjO2dCQUNkLGFBQWE7Z0JBQ2IsVUFBVTtnQkFDVixZQUFZO2dCQUNaLFdBQVc7YUFDWixDQUFDLENBQUM7WUFFSCw2R0FBNkc7WUFDN0csK0NBQStDO1lBQy9DLE1BQU0sUUFBUTtpQkFDWCxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7aUJBQzVGLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUNyQix1RkFBdUYsQ0FDeEYsQ0FBQztZQUVKLDhHQUE4RztZQUM5RyxnREFBZ0Q7WUFDaEQsTUFBTSxRQUFRO2lCQUNYLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztpQkFDeEYsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQ3JCLDBGQUEwRixDQUMzRixDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsd0ZBQXdGLEVBQUUsS0FBSztZQUNoRyxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0MsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRWxELE1BQU0sY0FBYyxHQUFHLE1BQU0scUJBQXFCLENBQUM7Z0JBQ2pELElBQUksRUFBRSxRQUFRO2dCQUNkLFlBQVk7Z0JBQ1osY0FBYztnQkFDZCxhQUFhO2dCQUNiLFVBQVU7Z0JBQ1YsWUFBWTtnQkFDWixXQUFXO2FBQ1osQ0FBQyxDQUFDO1lBQ0gsTUFBTSxjQUFjLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQztnQkFDakQsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsWUFBWTtnQkFDWixjQUFjO2dCQUNkLGFBQWEsRUFBRSxtQkFBbUI7Z0JBQ2xDLFVBQVU7Z0JBQ1YsWUFBWTtnQkFDWixXQUFXO2FBQ1osQ0FBQyxDQUFDO1lBRUgsZ0hBQWdIO1lBQ2hILHlFQUF5RTtZQUN6RSxjQUFjLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQyxjQUFjLENBQUM7WUFDOUQsY0FBYyxDQUFDLHlCQUF5QixHQUFHLGNBQWMsQ0FBQyx5QkFBeUIsQ0FBQztZQUVwRixNQUFNLFFBQVE7aUJBQ1gsa0JBQWtCLENBQUM7Z0JBQ2xCLFVBQVU7Z0JBQ1YsWUFBWTtnQkFDWixZQUFZO2dCQUNaLGNBQWM7Z0JBQ2QsYUFBYSxFQUFFLGNBQWM7YUFDOUIsQ0FBQztpQkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBRWxELE1BQU0sUUFBUTtpQkFDWCxvQkFBb0IsQ0FBQztnQkFDcEIsVUFBVTtnQkFDVixZQUFZO2dCQUNaLFlBQVk7Z0JBQ1osY0FBYztnQkFDZCxhQUFhLEVBQUUsY0FBYzthQUM5QixDQUFDO2lCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMkVBQTJFLEVBQUUsS0FBSztZQUNuRixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0MsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRTdDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQztnQkFDbEQsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsWUFBWTtnQkFDWixjQUFjO2dCQUNkLGFBQWE7Z0JBQ2IsVUFBVTtnQkFDVixZQUFZO2dCQUNaLFdBQVc7YUFDWixDQUFDLENBQUM7WUFDSCxNQUFNLGFBQWEsR0FBRyxNQUFNLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDdkQsVUFBVTtnQkFDVixZQUFZO2dCQUNaLFlBQVk7Z0JBQ1osY0FBYzthQUNmLENBQUMsQ0FBQztZQUNILGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFFcEQsTUFBTSxRQUFRO2lCQUNYLGtCQUFrQixDQUFDO2dCQUNsQixVQUFVO2dCQUNWLFlBQVk7Z0JBQ1osWUFBWTtnQkFDWixjQUFjLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDckMsYUFBYTtnQkFDYixVQUFVLEVBQUUsWUFBWTthQUN6QixDQUFDO2lCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGdFQUFnRSxDQUFDLENBQUM7WUFDNUYsTUFBTSxRQUFRO2lCQUNYLGtCQUFrQixDQUFDO2dCQUNsQixVQUFVO2dCQUNWLFlBQVk7Z0JBQ1osWUFBWSxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ25DLGNBQWM7Z0JBQ2QsYUFBYTtnQkFDYixVQUFVLEVBQUUsWUFBWTthQUN6QixDQUFDO2lCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGdFQUFnRSxDQUFDLENBQUM7WUFFNUYsTUFBTSxRQUFRO2lCQUNYLG9CQUFvQixDQUFDO2dCQUNwQixVQUFVO2dCQUNWLFlBQVk7Z0JBQ1osWUFBWSxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ25DLGNBQWM7Z0JBQ2QsYUFBYTtnQkFDYixVQUFVLEVBQUUsWUFBWTthQUN6QixDQUFDO2lCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGtFQUFrRSxDQUFDLENBQUM7WUFDOUYsTUFBTSxRQUFRO2lCQUNYLG9CQUFvQixDQUFDO2dCQUNwQixVQUFVO2dCQUNWLFlBQVk7Z0JBQ1osWUFBWTtnQkFDWixjQUFjLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDckMsYUFBYTtnQkFDYixVQUFVLEVBQUUsWUFBWTthQUN6QixDQUFDO2lCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGtFQUFrRSxDQUFDLENBQUM7UUFDaEcsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNkRBQTZELEVBQUUsS0FBSztZQUNyRSxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUM7WUFDaEMsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUU3QyxNQUFNLGlCQUFpQixDQUFDO2dCQUN0QixJQUFJLEVBQUUsUUFBUTtnQkFDZCxZQUFZO2dCQUNaLGNBQWM7Z0JBQ2QsYUFBYTtnQkFDYixVQUFVO2dCQUNWLFlBQVk7Z0JBQ1osV0FBVzthQUNaLENBQUMsQ0FBQztZQUNILE1BQU0sZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUMzQyxNQUFNLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFFN0MsTUFBTSxhQUFhLEdBQUcsTUFBTSxRQUFRLENBQUMsbUJBQW1CLENBQUM7Z0JBQ3ZELFVBQVU7Z0JBQ1YsWUFBWTtnQkFDWixZQUFZO2dCQUNaLGNBQWM7YUFDZixDQUFDLENBQUM7WUFDSCxNQUFNLFlBQVksR0FBRyxNQUFNLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDckQsVUFBVTtnQkFDVixZQUFZO2dCQUNaLFlBQVk7Z0JBQ1osY0FBYztnQkFDZCxhQUFhO2dCQUNiLFVBQVU7Z0JBQ1YsaUJBQWlCLEVBQUUsQ0FBQzthQUNyQixDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxZQUFhLENBQUMsQ0FBQztZQUN4RCxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFM0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxZQUFhLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDbkcsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN4QixNQUFNLE1BQU0sR0FBNEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM5RCxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHdDQUF3QyxFQUFFO1FBQ2pELE1BQU0sZ0JBQWdCLEdBQWM7WUFDbEMsV0FBVyxFQUFFLGlCQUFpQjtZQUM5QixXQUFXLEVBQUU7Z0JBQ1g7b0JBQ0UsZUFBZSxFQUFFLGNBQWM7b0JBQy9CLFdBQVcsRUFBRSxVQUFVO29CQUN2QixjQUFjLEVBQUUsS0FBSztpQkFDdEI7YUFDRjtZQUNELElBQUksRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtZQUM5QixNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFO1lBQ2pDLE1BQU0sRUFBRSxJQUFJO1lBQ1osS0FBSyxFQUFFLHNCQUFzQjtZQUM3QixVQUFVLEVBQUUsS0FBSztZQUNqQixRQUFRLEVBQUUsVUFBVTtZQUNwQixlQUFlLEVBQUUsSUFBSTtZQUNyQixPQUFPLEVBQUUsQ0FBQztZQUNWLE1BQU0sRUFBRSxRQUFRO1NBQ2pCLENBQUM7UUFFRixFQUFFLENBQUMsMEZBQTBGLEVBQUUsS0FBSztZQUNsRyxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQztZQUNyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFFckQseUJBQXlCO1lBQ3pCLE1BQU0sWUFBWSxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFDdkMsS0FBSyxFQUFFLEdBQUc7Z0JBQ1YsUUFBUSxFQUFFLFVBQVU7Z0JBQ3BCLGlCQUFpQixFQUFFLENBQUM7YUFDckIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUzQywwREFBMEQ7WUFDMUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxRQUFRLENBQUMsa0NBQWtDLENBQUM7Z0JBQ3JFLFNBQVMsRUFBRSxnQkFBZ0I7Z0JBQzNCLEdBQUc7Z0JBQ0gsZ0JBQWdCLEVBQUUsVUFBVTtnQkFDNUIsY0FBYyxFQUFFLFdBQVcsQ0FBQyxTQUFTO2dCQUNyQyxZQUFZO2FBQ2IsQ0FBQyxDQUFDO1lBRUgsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakYsY0FBYyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUVoRCx3Q0FBd0M7WUFDeEMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sUUFBUSxDQUFDLHlCQUF5QixDQUFDO2dCQUMxRCxTQUFTLEVBQUUsZ0JBQWdCO2dCQUMzQixnQkFBZ0IsRUFBRSxVQUFVO2dCQUM1QiwwQkFBMEIsRUFBRSxZQUFZLENBQUMsMEJBQTBCO2FBQ3BFLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsZ0JBQWdCLEVBQUU7UUFDekIsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQy9CLE1BQU0sU0FBUyxHQUFjO1lBQzNCLFdBQVc7WUFDWCxZQUFZLEVBQUUsRUFBRTtZQUNoQixXQUFXLEVBQUU7Z0JBQ1g7b0JBQ0UsZUFBZSxFQUFFLHVCQUF1QjtvQkFDeEMsV0FBVyxFQUFFLHVCQUF1QjtvQkFDcEMsY0FBYyxFQUFFLEtBQUs7aUJBQ3RCO2FBQ0Y7WUFDRCxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDOUIsTUFBTSxFQUFFO2dCQUNOLFVBQVUsRUFBRSxTQUFTO2FBQ3RCO1lBQ0QsTUFBTSxFQUFFLElBQUk7WUFDWixLQUFLLEVBQUUsc0JBQXNCO1lBQzdCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLE9BQU8sRUFBRSxDQUFDO1lBQ1YsTUFBTSxFQUFFLFFBQVE7U0FDakIsQ0FBQztRQUVGLFVBQVUsQ0FBQyxLQUFLO1lBQ2QsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQUM7WUFDekMsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QyxNQUFNLGNBQWMsR0FBeUI7Z0JBQzNDLElBQUksRUFBRSw2QkFBa0IsQ0FBQyxJQUFJO2dCQUM3QixFQUFFLEVBQUUsNkJBQWtCLENBQUMsS0FBSztnQkFDNUIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7YUFDM0IsQ0FBQztZQUVGLE1BQU0sSUFBQSwrQkFBc0IsRUFBQztnQkFDM0IsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JCLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVztnQkFDbEMsY0FBYzthQUNmLENBQUMsQ0FBQztZQUVILE1BQU0sZUFBZSxHQUF5QjtnQkFDNUMsSUFBSSxFQUFFLDZCQUFrQixDQUFDLEtBQUs7Z0JBQzlCLEVBQUUsRUFBRSw2QkFBa0IsQ0FBQyxJQUFJO2dCQUMzQixLQUFLLEVBQUUseUJBQXlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2RixDQUFDO1lBQ0YsTUFBTSxRQUFRLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLEdBQUcsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3hGLE1BQU0sSUFBQSx5QkFBZ0IsRUFBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUVoRyxNQUFNLDBCQUEwQixHQUEwQjtnQkFDeEQsSUFBSSxFQUFFLDZCQUFrQixDQUFDLEtBQUs7Z0JBQzlCLEVBQUUsRUFBRSw2QkFBa0IsQ0FBQyxJQUFJO2dCQUMzQixJQUFJLEVBQUUseUJBQWMsQ0FBQyxVQUFVO2dCQUMvQixLQUFLLEVBQUUseUJBQXlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVU7YUFDdkQsQ0FBQztZQUNGLE1BQU0sc0JBQXNCLEdBQStCLEVBQUUsZUFBZSxFQUFFLDBCQUEwQixFQUFFLENBQUM7WUFDM0csTUFBTSxJQUFBLGdDQUF1QixFQUFDO2dCQUM1QixRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtnQkFDckIsV0FBVyxFQUFFLFNBQVMsQ0FBQyxXQUFXO2dCQUNsQyxRQUFRLEVBQUUsc0JBQXNCO2FBQ2pDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZEQUE2RCxFQUFFLEtBQUs7WUFDckUsTUFBTSxlQUFlLEdBQUcsTUFBTSxRQUFRLENBQUMsYUFBYSxDQUFDO2dCQUNuRCxTQUFTO2dCQUNULEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDO2dCQUM3QyxLQUFLO2FBQ04sQ0FBQyxDQUFDO1lBQ0gsZUFBZSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUVwRSxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5REFBeUQsRUFBRSxLQUFLO1lBQ2pFLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQzVELFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDakMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUVyQyxNQUFNLGVBQWUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxhQUFhLENBQUM7Z0JBQ25ELFNBQVMsRUFBRSxXQUFXO2dCQUN0QixHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDN0MsS0FBSzthQUNOLENBQUMsQ0FBQztZQUNILGVBQWUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFcEUsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxnQ0FBZ0MsRUFBRTtRQUN6QyxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDL0IsTUFBTSxTQUFTLEdBQWM7WUFDM0IsV0FBVztZQUNYLFlBQVksRUFBRSxFQUFFO1lBQ2hCLFdBQVcsRUFBRTtnQkFDWDtvQkFDRSxlQUFlLEVBQUUsdUJBQXVCO29CQUN4QyxXQUFXLEVBQUUsdUJBQXVCO29CQUNwQyxjQUFjLEVBQUUsS0FBSztpQkFDdEI7YUFDRjtZQUNELElBQUksRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtZQUM5QixNQUFNLEVBQUU7Z0JBQ04sVUFBVSxFQUFFLFNBQVM7YUFDdEI7WUFDRCxNQUFNLEVBQUUsSUFBSTtZQUNaLEtBQUssRUFBRSxzQkFBc0I7WUFDN0IsVUFBVSxFQUFFLEtBQUs7WUFDakIsUUFBUSxFQUFFLFVBQVU7WUFDcEIsZUFBZSxFQUFFLElBQUk7WUFDckIsT0FBTyxFQUFFLENBQUM7WUFDVixNQUFNLEVBQUUsUUFBUTtTQUNqQixDQUFDO1FBRUYsVUFBVSxDQUFDLEtBQUs7WUFDZCxNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQztZQUN6QyxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sY0FBYyxHQUF5QjtnQkFDM0MsSUFBSSxFQUFFLDZCQUFrQixDQUFDLElBQUk7Z0JBQzdCLEVBQUUsRUFBRSw2QkFBa0IsQ0FBQyxLQUFLO2dCQUM1QixLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQzthQUMzQixDQUFDO1lBRUYsTUFBTSxJQUFBLCtCQUFzQixFQUFDO2dCQUMzQixRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtnQkFDckIsV0FBVyxFQUFFLFNBQVMsQ0FBQyxXQUFXO2dCQUNsQyxjQUFjO2FBQ2YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxlQUFlLEdBQXlCO2dCQUM1QyxJQUFJLEVBQUUsNkJBQWtCLENBQUMsS0FBSztnQkFDOUIsRUFBRSxFQUFFLDZCQUFrQixDQUFDLElBQUk7Z0JBQzNCLEtBQUssRUFBRSx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZGLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsR0FBRyxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDeEYsTUFBTSxJQUFBLHlCQUFnQixFQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ2hHLE1BQU0sMEJBQTBCLEdBQTBCO2dCQUN4RCxJQUFJLEVBQUUsNkJBQWtCLENBQUMsS0FBSztnQkFDOUIsRUFBRSxFQUFFLDZCQUFrQixDQUFDLElBQUk7Z0JBQzNCLElBQUksRUFBRSx5QkFBYyxDQUFDLFVBQVU7Z0JBQy9CLEtBQUssRUFBRSx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVTthQUN2RCxDQUFDO1lBQ0YsTUFBTSxzQkFBc0IsR0FBK0IsRUFBRSxlQUFlLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQztZQUMzRyxNQUFNLElBQUEsZ0NBQXVCLEVBQUM7Z0JBQzVCLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO2dCQUNyQixXQUFXLEVBQUUsU0FBUyxDQUFDLFdBQVc7Z0JBQ2xDLFFBQVEsRUFBRSxzQkFBc0I7YUFDakMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNkRBQTZELEVBQUUsS0FBSztZQUNyRSxNQUFNLGVBQWUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxhQUFhLENBQUM7Z0JBQ25ELFNBQVM7Z0JBQ1QsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUM7Z0JBQzdDLEtBQUs7YUFDTixDQUFDLENBQUM7WUFDSCxlQUFlLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRXBFLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlEQUF5RCxFQUFFLEtBQUs7WUFDakUsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDNUQsWUFBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNqQyxZQUFZLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRXJDLE1BQU0sZUFBZSxHQUFHLE1BQU0sUUFBUSxDQUFDLGFBQWEsQ0FBQztnQkFDbkQsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDO2dCQUM3QyxLQUFLO2FBQ04sQ0FBQyxDQUFDO1lBQ0gsZUFBZSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUVwRSxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLDBCQUEwQixFQUFFO1FBQ25DLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQztRQUNuQyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUM7UUFDakMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hELE1BQU0sU0FBUyxHQUFjO1lBQzNCLFdBQVc7WUFDWCxZQUFZLEVBQUUsRUFBRTtZQUNoQixRQUFRLEVBQUU7Z0JBQ1I7b0JBQ0UsS0FBSyxFQUFFLGtCQUFrQjtvQkFDekIsZUFBZSxFQUFFLEVBQUU7b0JBQ25CLFVBQVU7b0JBQ1YsY0FBYztvQkFDZCxjQUFjLEVBQUUsS0FBSztpQkFDdEI7YUFDRjtZQUNELFdBQVcsRUFBRSxFQUFFO1lBQ2YsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQzlCLE1BQU0sRUFBRTtnQkFDTixVQUFVLEVBQUUsU0FBUzthQUN0QjtZQUNELE1BQU0sRUFBRSxJQUFJO1lBQ1osS0FBSyxFQUFFLHNCQUFzQjtZQUM3QixVQUFVLEVBQUUsS0FBSztZQUNqQixRQUFRLEVBQUUsVUFBVTtZQUNwQixlQUFlLEVBQUUsSUFBSTtZQUNyQixPQUFPLEVBQUUsQ0FBQztZQUNWLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLFVBQVUsRUFBRSxNQUFNO1NBQ25CLENBQUM7UUFFRixVQUFVLENBQUMsS0FBSztZQUNkLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QyxNQUFNLGNBQWMsR0FBeUI7Z0JBQzNDLElBQUksRUFBRSw2QkFBa0IsQ0FBQyxJQUFJO2dCQUM3QixFQUFFLEVBQUUsNkJBQWtCLENBQUMsS0FBSztnQkFDNUIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7YUFDM0IsQ0FBQztZQUVGLE1BQU0sSUFBQSwrQkFBc0IsRUFBQztnQkFDM0IsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JCLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVztnQkFDbEMsY0FBYztnQkFDZCxXQUFXLEVBQUUsc0JBQVcsQ0FBQyxPQUFPO2dCQUNoQyxPQUFPLEVBQUUsTUFBTTthQUNoQixDQUFDLENBQUM7WUFFSCxNQUFNLGVBQWUsR0FBeUI7Z0JBQzVDLElBQUksRUFBRSw2QkFBa0IsQ0FBQyxLQUFLO2dCQUM5QixFQUFFLEVBQUUsNkJBQWtCLENBQUMsSUFBSTtnQkFDM0IsS0FBSyxFQUFFLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcseUJBQXlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdkYsQ0FBQztZQUNGLFNBQVMsQ0FBQyxRQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUM3RCxNQUFNLFFBQVEsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsR0FBRyxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN4RSxNQUFNLElBQUEseUJBQWdCLEVBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFFaEcsTUFBTSwwQkFBMEIsR0FBMEI7Z0JBQ3hELElBQUksRUFBRSw2QkFBa0IsQ0FBQyxLQUFLO2dCQUM5QixFQUFFLEVBQUUsNkJBQWtCLENBQUMsSUFBSTtnQkFDM0IsSUFBSSxFQUFFLHlCQUFjLENBQUMsVUFBVTtnQkFDL0IsS0FBSyxFQUFFLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVO2FBQ3ZELENBQUM7WUFDRixNQUFNLHNCQUFzQixHQUErQixFQUFFLGVBQWUsRUFBRSwwQkFBMEIsRUFBRSxDQUFDO1lBQzNHLE1BQU0sSUFBQSxnQ0FBdUIsRUFBQztnQkFDNUIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JCLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVztnQkFDbEMsUUFBUSxFQUFFLHNCQUFzQjtnQkFDaEMsT0FBTyxFQUFFLE1BQU07YUFDaEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsS0FBSztZQUNiLFNBQVMsQ0FBQyxRQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw2REFBNkQsRUFBRSxLQUFLO1lBQ3JFLE1BQU0sZUFBZSxHQUFHLE1BQU0sUUFBUSxDQUFDLHVCQUF1QixDQUFDO2dCQUM3RCxVQUFVO2dCQUNWLFlBQVk7Z0JBQ1osU0FBUztnQkFDVCxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDN0MsS0FBSzthQUNOLENBQUMsQ0FBQztZQUNILGVBQWUsQ0FBQyxRQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFL0QsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseURBQXlELEVBQUUsS0FBSztZQUNqRSxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUM1RCxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pDLFlBQVksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFckMsTUFBTSxlQUFlLEdBQUcsTUFBTSxRQUFRLENBQUMsdUJBQXVCLENBQUM7Z0JBQzdELFNBQVMsRUFBRSxXQUFXO2dCQUN0QixHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDN0MsS0FBSztnQkFDTCxVQUFVO2dCQUNWLFlBQVk7YUFDYixDQUFDLENBQUM7WUFDSCxlQUFlLENBQUMsUUFBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRS9ELE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsdUJBQXVCLEVBQUUsS0FBSztRQUNyQyxFQUFFLENBQUMsa0NBQWtDLEVBQUUsS0FBSztZQUMxQyxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUEsNEJBQW1CLEVBQUM7Z0JBQy9DLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO2dCQUNyQixXQUFXLEVBQUU7b0JBQ1gsVUFBVSxFQUFFLE1BQU07b0JBQ2xCLE1BQU0sRUFBRTt3QkFDTixVQUFVLEVBQUUsU0FBUzt3QkFDckIsVUFBVSxFQUFFOzRCQUNWO2dDQUNFLE9BQU8sRUFBRTtvQ0FDUCxPQUFPLEVBQUUsV0FBVztpQ0FDckI7Z0NBQ0QsTUFBTSxFQUFFO29DQUNOLEtBQUssRUFBRSxPQUFPO29DQUNkLE1BQU0sRUFBRSxNQUFNO2lDQUNmOzZCQUNGO3lCQUNGO3FCQUNGO2lCQUNGO2dCQUNELHFGQUFxRjtnQkFDckYsUUFBUSxFQUFFLEVBQUU7YUFDYixDQUFDLENBQUM7WUFFSCxNQUFNLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztnQkFDbEMsS0FBSztnQkFDTCxVQUFVLEVBQUU7b0JBQ1Y7d0JBQ0UsT0FBTyxFQUFFLFdBQVc7d0JBQ3BCLE1BQU0sRUFBRSxPQUFPO3FCQUNoQjtpQkFDRjtnQkFDRCxVQUFVLEVBQUUsU0FBUzthQUN0QixDQUFDLENBQUM7WUFFSCxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxLQUFLO1lBQ3ZELE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBQSw0QkFBbUIsRUFBQztnQkFDL0MsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JCLFdBQVcsRUFBRTtvQkFDWCxVQUFVLEVBQUUsTUFBTTtvQkFDbEIsTUFBTSxFQUFFO3dCQUNOLFVBQVUsRUFBRSxTQUFTO3dCQUNyQixVQUFVLEVBQUU7NEJBQ1Y7Z0NBQ0UsT0FBTyxFQUFFO29DQUNQLE9BQU8sRUFBRSxZQUFZO2lDQUN0QjtnQ0FDRCxNQUFNLEVBQUU7b0NBQ04sS0FBSyxFQUFFLE9BQU87b0NBQ2QsTUFBTSxFQUFFLE1BQU07aUNBQ2Y7NkJBQ0Y7NEJBQ0Q7Z0NBQ0UsT0FBTyxFQUFFO29DQUNQLE9BQU8sRUFBRSxZQUFZO2lDQUN0QjtnQ0FDRCxNQUFNLEVBQUU7b0NBQ04sS0FBSyxFQUFFLE9BQU87b0NBQ2QsTUFBTSxFQUFFLE1BQU07aUNBQ2Y7NkJBQ0Y7eUJBQ0Y7d0JBQ0QsSUFBSSxFQUFFLE1BQU07cUJBQ2I7aUJBQ0Y7Z0JBQ0QscUZBQXFGO2dCQUNyRixRQUFRLEVBQUUsRUFBRTthQUNiLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxDQUFDLG9CQUFvQixDQUFDO2dCQUNsQyxLQUFLO2dCQUNMLFVBQVUsRUFBRTtvQkFDVjt3QkFDRSxPQUFPLEVBQUUsWUFBWTt3QkFDckIsTUFBTSxFQUFFLE9BQU87cUJBQ2hCO29CQUNEO3dCQUNFLE9BQU8sRUFBRSxZQUFZO3dCQUNyQixNQUFNLEVBQUUsT0FBTztxQkFDaEI7aUJBQ0Y7Z0JBQ0QsSUFBSSxFQUFFO29CQUNKLEtBQUssRUFBRSxNQUFNO29CQUNiLElBQUksRUFBRSxNQUFNO2lCQUNiO2dCQUNELFVBQVUsRUFBRSxTQUFTO2FBQ3RCLENBQUMsQ0FBQztZQUVILGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsd0JBQXdCLEVBQUUsS0FBSztRQUN0QyxFQUFFLENBQUMsMENBQTBDLEVBQUUsS0FBSztZQUNsRCxNQUFNLGNBQWMsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUEwQixDQUFDO1lBQ3JHLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSxpQ0FBd0IsRUFBQztnQkFDMUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JCLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVztnQkFDbEMsY0FBYzthQUNmLENBQUMsQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sUUFBUSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM3RSxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOEJBQThCLEVBQUUsS0FBSztZQUN0QyxNQUFNLGNBQWMsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUEwQixDQUFDO1lBQ3JHLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSxpQ0FBd0IsRUFBQztnQkFDMUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JCLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVztnQkFDbEMsY0FBYzthQUNmLENBQUMsQ0FBQztZQUNILE1BQU0sS0FBSyxHQUFHLElBQUksd0JBQWEsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUNqRSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxRQUFRLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwRixRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUM3QyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEtBQUs7UUFDOUIsRUFBRSxDQUFDLG1DQUFtQyxFQUFFLEtBQUs7WUFDM0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFBLDBCQUFpQixFQUFDO2dCQUNuQyxJQUFJLEVBQUUsUUFBUTtnQkFDZCxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtnQkFDckIsV0FBVyxFQUFFLFNBQVMsQ0FBQyxXQUFXO2FBQ25DLENBQUMsQ0FBQztZQUNILE1BQU0sUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMxRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4QkFBOEIsRUFBRSxLQUFLO1lBQ3RDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSwwQkFBaUIsRUFBQztnQkFDbkMsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JCLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVzthQUNuQyxDQUFDLENBQUM7WUFDSCxNQUFNLEtBQUssR0FBRyxJQUFJLHdCQUFhLEVBQUUsQ0FBQztZQUNsQyxNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFDakUsbUJBQW1CLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakYsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUM3QyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGtDQUFrQyxFQUFFO1FBQzNDLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxLQUFLO1lBQy9DLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQztZQUM3QixNQUFNLCtCQUErQixHQUFHO2dCQUN0QyxJQUFJLEVBQUUsNkJBQWtCLENBQUMsSUFBSTtnQkFDN0IsRUFBRSxFQUFFLDZCQUFrQixDQUFDLEtBQUs7Z0JBQzVCLElBQUksRUFBRSx5QkFBYyxDQUFDLFVBQVU7Z0JBQy9CLEtBQUssRUFBRSxLQUFLO2FBQ2IsQ0FBQztZQUNGLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxnQ0FBZ0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6RSxlQUFlLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsdUNBQXVDLEVBQUU7UUFDaEQsRUFBRSxDQUFDLDRDQUE0QyxFQUFFLEtBQUs7WUFDcEQsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDO1lBQzdCLE1BQU0sb0NBQW9DLEdBQUc7Z0JBQzNDLElBQUksRUFBRSw2QkFBa0IsQ0FBQyxJQUFJO2dCQUM3QixFQUFFLEVBQUUsNkJBQWtCLENBQUMsS0FBSztnQkFDNUIsSUFBSSxFQUFFLG1DQUF3QixDQUFDLHNCQUFzQjtnQkFDckQsS0FBSyxFQUFFLEtBQUs7YUFDYixDQUFDO1lBQ0YsTUFBTSxvQkFBb0IsR0FBRyxRQUFRLENBQUMscUNBQXFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkYsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQzlFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsNEJBQTRCLEVBQUU7UUFDckMsRUFBRSxDQUFDLDBDQUEwQyxFQUFFLEtBQUs7WUFDbEQsTUFBTSxlQUFlLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ2hHLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxtQkFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDekUsaUJBQWlCLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM1RSxDQUFDLENBQUMsQ0FBQztRQUNILEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxLQUFLO1lBQzdDLE1BQU0sVUFBVSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUN0RixNQUFNLGtCQUFrQixHQUFHLElBQUksbUJBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3JFLGtCQUFrQixDQUFDLDBCQUEwQixFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDN0UsQ0FBQyxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsNkNBQTZDLEVBQUUsS0FBSztZQUNyRCxNQUFNLFNBQVMsR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtnQkFDNUMsWUFBWSxFQUFFLEtBQUs7Z0JBQ25CLG1CQUFtQixFQUFFLFNBQVM7Z0JBQzlCLElBQUksRUFBRSxLQUFLO2FBQ1osQ0FBQyxDQUFDO1lBQ0gsTUFBTSxXQUFXLEdBQUcsSUFBSSxtQkFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDN0QsTUFBTSwwQkFBMEIsR0FBRyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUM1RSwwQkFBMEIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsK0NBQStDLEVBQUU7WUFDbEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUU7Z0JBQ2pELFlBQVksRUFBRSxLQUFLO2dCQUNuQixtQkFBbUIsRUFBRSxPQUFPO2dCQUM1QixJQUFJLEVBQUUsS0FBSzthQUNaLENBQUMsQ0FBQztZQUNILE1BQU0sYUFBYSxHQUFHLElBQUkscUJBQVUsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUN0RixhQUFhLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDLENBQUMsQ0FBQztRQUNILEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRTtZQUM1QyxNQUFNLGNBQWMsR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDN0YsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLG1CQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUM1RSxNQUFNLDBCQUEwQixHQUFHLHFCQUFxQixDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDdEYsMEJBQTBCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztRQUNILEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRTtZQUM1QyxNQUFNLGdCQUFnQixHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDbEUsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuQyxNQUFNLFlBQVksR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxtQkFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDeEUsb0JBQW9CLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsZ0NBQWdDLEVBQUUsR0FBRyxFQUFFO1FBQzlDLEVBQUUsQ0FBQyxrRUFBa0UsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNoRixNQUFNLFNBQVMsR0FBRztnQkFDaEIsVUFBVSxFQUFFLE1BQU07Z0JBQ2xCLEtBQUssRUFBRSxpQkFBaUI7YUFDWixDQUFDO1lBQ2YsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsOEJBQThCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNkNBQTZDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDM0QsTUFBTSxTQUFTLEdBQUc7Z0JBQ2hCLFVBQVUsRUFBRSxNQUFNO2dCQUNsQixLQUFLLEVBQUUsaUJBQWlCO2FBQ1osQ0FBQztZQUNmLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLDhCQUE4QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1EQUFtRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2pFLE1BQU0sU0FBUyxHQUFHO2dCQUNoQixVQUFVLEVBQUUsTUFBTTtnQkFDbEIsS0FBSyxFQUFFLGlCQUFpQjthQUNaLENBQUM7WUFDZixNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyw4QkFBOEIsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN4RSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsdUJBQXVCO0lBQ3ZCLEtBQUssVUFBVSxxQkFBcUIsQ0FBQyxNQVFwQztRQUNDLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUU7WUFDaEUsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNqQyxDQUFDLENBQUM7UUFDSCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDNUYsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRWhHLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQ3JELElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7Z0JBQ3JELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQzthQUM5RCxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztTQUNuQixDQUFDLENBQUM7UUFDSCxNQUFNLDJCQUEyQixHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUN4RCxPQUFPLEVBQUUsa0JBQWtCO1lBQzNCLGNBQWMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdDLE1BQU0sRUFBRSxTQUFTO1NBQ2xCLENBQUMsQ0FBQztRQUVILE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQ3ZELElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7Z0JBQ3JELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQzthQUM5RCxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztTQUNuQixDQUFDLENBQUM7UUFDSCxNQUFNLDZCQUE2QixHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUMxRCxPQUFPLEVBQUUsb0JBQW9CO1lBQzdCLGNBQWMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQy9DLE1BQU0sRUFBRSxTQUFTO1NBQ2xCLENBQUMsQ0FBQztRQUVILE1BQU0sYUFBYSxHQUFhO1lBQzlCLEVBQUUsRUFBRSxHQUFHO1lBQ1AsR0FBRyxFQUFFLEVBQUU7WUFDUCxjQUFjLEVBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxTQUFTO1lBQ3ZFLFNBQVMsRUFBRTtnQkFDVDtvQkFDRSxJQUFJLEVBQUUsT0FBTztvQkFDYixFQUFFLEVBQUUsTUFBTTtvQkFDVixXQUFXLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7b0JBQzFGLFlBQVksRUFBRSwyQkFBMkIsQ0FBQyxRQUFRLEVBQUU7b0JBQ3BELFFBQVEsRUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUM1QztnQkFDRDtvQkFDRSxJQUFJLEVBQUUsT0FBTztvQkFDYixFQUFFLEVBQUUsUUFBUTtvQkFDWixXQUFXLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7b0JBQzFGLFlBQVksRUFBRSw2QkFBNkIsQ0FBQyxRQUFRLEVBQUU7b0JBQ3RELFFBQVEsRUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUM1QzthQUNGO1lBQ0QsSUFBSSxFQUFFLEtBQUs7U0FDWixDQUFDO1FBRUYsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzlELE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNsRSxNQUFNLHNCQUFzQixHQUMxQixNQUFNLENBQUMsSUFBSSxDQUNULE1BQU0sTUFBTSxDQUFDLHNDQUFzQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQzNHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNoRSxNQUFNLHdCQUF3QixHQUM1QixNQUFNLENBQUMsSUFBSSxDQUNULE1BQU0sTUFBTSxDQUFDLHNDQUFzQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQzNHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVoRSxhQUFhLENBQUMseUJBQXlCLEdBQUcsTUFBTSxJQUFBLGdDQUFzQixFQUNwRSxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFDN0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQzNCLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUM3QjtZQUNFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUMxRixFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtZQUN2QyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRTtZQUMzQyxFQUFFLElBQUksRUFBRSx3QkFBd0IsRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUU7WUFDakUsRUFBRSxJQUFJLEVBQUUsMEJBQTBCLEVBQUUsS0FBSyxFQUFFLHdCQUF3QixFQUFFO1NBQ3RFLENBQ0YsQ0FBQztRQUVGLE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxLQUFLLFVBQVUsaUJBQWlCLENBQUMsTUFRaEM7UUFDQyxNQUFNLGFBQWEsR0FBRyxNQUFNLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyxLQUFLLENBQUM7YUFDUixJQUFJLENBQUMsV0FBVyxNQUFNLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDbEYsS0FBSyxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUU3QixPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSyxVQUFVLGdCQUFnQixDQUFDLE1BQXdCO1FBQ3RELE1BQU0sWUFBWSxHQUFhO1lBQzdCLEVBQUUsRUFBRSxHQUFHO1lBQ1AsR0FBRyxFQUFFLEVBQUU7WUFDUCxJQUFJLEVBQUUsS0FBSztTQUNaLENBQUM7UUFFRixJQUFJLENBQUMsdUJBQXVCLENBQUM7YUFDMUIsSUFBSSxDQUFDLFdBQVcsTUFBTSxDQUFDLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO2FBQ2pGLEtBQUssQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFNUIsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVELEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxNQUF3QjtRQUN4RCxNQUFNLGNBQWMsR0FBYTtZQUMvQixFQUFFLEVBQUUsR0FBRztZQUNQLEdBQUcsRUFBRSxFQUFFO1lBQ1AsSUFBSSxFQUFFLEtBQUs7U0FDWixDQUFDO1FBRUYsSUFBSSxDQUFDLHVCQUF1QixDQUFDO2FBQzFCLElBQUksQ0FBQyxXQUFXLE1BQU0sQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQzthQUNuRixLQUFLLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRTlCLE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxRQUFRLENBQUMsZ0NBQWdDLEVBQUU7UUFDekMsMEZBQTBGO1FBQzFGLE1BQU0sTUFBTSxHQUFHLGtFQUFrRSxDQUFDO1FBQ2xGLE1BQU0sU0FBUyxHQUFHLGtFQUFrRSxDQUFDO1FBQ3JGLE1BQU0sY0FBYyxHQUFHLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFFMUMsRUFBRSxDQUFDLHFFQUFxRSxFQUFFO1lBQ3hFLGNBQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QyxNQUFNLE1BQU0sR0FBRyxtQkFBUSxDQUFDLDhCQUE4QixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3ZFLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7UUFDdEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbURBQW1ELEVBQUU7WUFDdEQsTUFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUUsQ0FBQyxtQkFBUSxDQUFDLDhCQUE4QixDQUFDLE1BQU0sQ0FBQyxFQUNyRCxvREFBb0QsQ0FDckQsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsc0NBQXNDLEVBQUU7UUFDL0MsRUFBRSxDQUFDLDBFQUEwRSxFQUFFLEtBQUs7WUFDbEYsTUFBTSxjQUFjLEdBQUcsTUFBTSxPQUFPLENBQUMsV0FBVyxDQUFDO2dCQUMvQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLENBQUM7Z0JBQzNELEtBQUssRUFBRSxTQUFTO2FBQ2pCLENBQUMsQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFzQjtnQkFDbEMsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLFNBQVMsRUFBRSxjQUFjLENBQUMsU0FBUztnQkFDbkMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxTQUFTO2dCQUN4QyxtQkFBbUIsRUFBRSxjQUFjLENBQUMsU0FBUztnQkFDN0MsWUFBWSxFQUFFLGVBQWU7YUFDOUIsQ0FBQztZQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxRQUFRLGFBQWEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDaEgsTUFBTSxFQUFFLG1CQUFtQixFQUFFLEdBQUcsTUFBTSxRQUFRLENBQUMsb0NBQW9DLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDckcsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxtQkFBb0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHFGQUFxRixFQUFFLEtBQUs7WUFDN0YsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsV0FBVyxDQUFDO2dCQUN4QyxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLENBQUM7YUFDdEQsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQXNCO2dCQUNsQyxJQUFJLEVBQUUsWUFBWTtnQkFDbEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO2dCQUM1QixjQUFjLEVBQUUsT0FBTyxDQUFDLFNBQVM7Z0JBQ2pDLFlBQVksRUFBRSxlQUFlO2FBQzlCLENBQUM7WUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsUUFBUSxhQUFhLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ2hILE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxHQUFHLE1BQU0sUUFBUSxDQUFDLG9DQUFvQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3JHLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILDBCQUEwQjtBQUM1QixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgc29kaXVtIGZyb20gJ2xpYnNvZGl1bS13cmFwcGVycy1zdW1vJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBub2NrID0gcmVxdWlyZSgnbm9jaycpO1xuaW1wb3J0ICogYXMgb3BlbnBncCBmcm9tICdvcGVucGdwJztcbmltcG9ydCBzaG91bGQgPSByZXF1aXJlKCdzaG91bGQnKTtcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcblxuaW1wb3J0IHsgVGVzdGFibGVCRywgVGVzdEJpdEdvIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLXRlc3QnO1xuaW1wb3J0IHsgQml0R28gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHtcbiAgQWRkS2V5Y2hhaW5PcHRpb25zLFxuICBCYXNlQ29pbixcbiAgQml0Z29HUEdQdWJsaWNLZXksXG4gIENvbW1pdG1lbnRTaGFyZVJlY29yZCxcbiAgQ29tbWl0bWVudFR5cGUsXG4gIGNvbW1vbixcbiAgY3JlYXRlU2hhcmVkRGF0YVByb29mLFxuICBFZDI1NTE5QklQMzIsXG4gIEVERFNBVXRpbHMsXG4gIEVkZHNhLFxuICBFbmNyeXB0ZWRTaWduZXJTaGFyZVR5cGUsXG4gIEV4Y2hhbmdlQ29tbWl0bWVudFJlc3BvbnNlLFxuICBLZXljaGFpbixcbiAgS2V5U2hhcmUsXG4gIFJlcXVlc3RUcmFjZXIsXG4gIFJlcXVlc3RUeXBlLFxuICBTaWduYXR1cmVTaGFyZVJlY29yZCxcbiAgU2lnbmF0dXJlU2hhcmVUeXBlLFxuICBUc3NVdGlscyxcbiAgVHhSZXF1ZXN0LFxuICBXYWxsZXQsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGNyZWF0ZVdhbGxldFNpZ25hdHVyZXMgfSBmcm9tICcuLi8uLi90c3MvaGVscGVycyc7XG5pbXBvcnQge1xuICBub2NrQ3JlYXRlVHhSZXF1ZXN0LFxuICBub2NrRGVsZXRlU2lnbmF0dXJlU2hhcmUsXG4gIG5vY2tFeGNoYW5nZUNvbW1pdG1lbnRzLFxuICBub2NrR2V0VHhSZXF1ZXN0LFxuICBub2NrU2VuZFNpZ25hdHVyZVNoYXJlLFxuICBub2NrU2VuZFR4UmVxdWVzdCxcbn0gZnJvbSAnLi9jb21tb24nO1xuXG5vcGVucGdwLmNvbmZpZy5yZWplY3RDdXJ2ZXMgPSBuZXcgU2V0KCk7XG5cbmRlc2NyaWJlKCdUU1MgVXRpbHM6JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICBsZXQgc2FuZGJveDogc2lub24uU2lub25TYW5kYm94O1xuICBsZXQgTVBDOiBFZGRzYTtcbiAgbGV0IGJnVXJsOiBzdHJpbmc7XG4gIGxldCB0c3NVdGlsczogVHNzVXRpbHM7XG4gIGxldCB1c2VyR3BnS2V5O1xuICBsZXQgYmFja3VwR3BnS2V5O1xuICBsZXQgYml0Z29HcGdLZXk7XG4gIGxldCBiaXRnbzogVGVzdGFibGVCRyAmIEJpdEdvO1xuICBsZXQgYmFzZUNvaW46IEJhc2VDb2luO1xuICBsZXQgd2FsbGV0OiBXYWxsZXQ7XG4gIGxldCBiaXRnb0tleVNoYXJlO1xuICBjb25zdCByZXFJZCA9IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gIGNvbnN0IGNvaW5OYW1lID0gJ3Rzb2wnO1xuICBjb25zdCB2YWxpZFVzZXJTaWduaW5nTWF0ZXJpYWwgPSB7XG4gICAgdVNoYXJlOiB7XG4gICAgICBpOiAxLFxuICAgICAgdDogMixcbiAgICAgIG46IDMsXG4gICAgICB5OiAnMDkzYzg2MDNhZDg2YzQxZDVlZTI1YTgxNGI4ODE4NWI0MzVkZDNhOWNlY2NmOWM5ZmQ2OTFhNDY1YWM0YThiMCcsXG4gICAgICBzZWVkOiAnY2E0MGM3ODk4MTMyNTBjMzM0ZGRkMmJhMTkwNTBmNmVkMjBiNWEwODg1M2NlY2E0OTIzNThmMjcxMWFkNGIxNScsXG4gICAgICBjaGFpbmNvZGU6ICc1OTZkNTQwNGE3ZWI5MThlZTc4MjQ3Yjk1MmQwNjUzOTYxOTg4NDA5MWZkZDllMGZmNWE2NjVmMzQ5ZTMyZmNhJyxcbiAgICB9LFxuICAgIGNvbW1vbkNoYWluY29kZTogJzU5NmQ1NDA0YTdlYjkxOGVlNzgyNDdiOTUyZDA2NTM5NjE5ODg0MDkxZmRkOWUwZmY1YTY2NWYzNDllMzJmY2EnLFxuICAgIGJpdGdvWVNoYXJlOiB7XG4gICAgICBpOiAxLFxuICAgICAgajogMyxcbiAgICAgIHk6ICc1OWQ4MDAwYmE1ZTg1ZmE0MDJmMzkzODI5NjBlN2Q1ZWRlODJiMWI2ZTIyYjE0NmExOGI3ZGYyMzhjM2EzMjI1JyxcbiAgICAgIHY6ICcwMWVhM2Y0MjViMWFkZjhhZWM2Y2ZlNGZjOGY5Yjk0NzU1YzM0NjU3OTY1ZjMyMzk3NjU1ZGNkNzg0ZjFiNTE3JyxcbiAgICAgIHU6ICc5Y2UzMjA0YThjOTc1NzczODk2N2YzZjgxYjQ2M2Q4NzI2N2JmNmYyYzBlNWVhZjI4NDMxNjc1MzdiODcyYjBiJyxcbiAgICAgIGNoYWluY29kZTogJ2QyMWRiZDhlYWU1ZDQ3ODkyOTJlY2VhMmVmYTUzZTAxNjViMjQzOWQ1N2Y1MTU4ZWI0ZGQ1N2RjMjZiNTkyMzYnLFxuICAgIH0sXG4gICAgYmFja3VwWVNoYXJlOiB7XG4gICAgICBpOiAxLFxuICAgICAgajogMixcbiAgICAgIHk6ICdlMGFlNzUwNzc3MTU2ODZhMTIxYWNiNDFiMjlhNTViZGU0MjY5NzExNTRmNDBhNDFmYzMxN2Y3Zjc3NGE5NDI0JyxcbiAgICAgIHY6ICdmNzZlZjYyOWRmYzE1YWI1ZTQ1MzFlNTMyYjVkNjdmMjE3NjYzN2NhNzUyYjE5NTg3NmI3ZTMxNzI0NTljOTY5JyxcbiAgICAgIHU6ICdmZTZiODlmYjZhY2ZjZDczOTJjMzVjMDg0ZjU4YmRlMDg0NmI4ODhjNGRmNTdlNDY2Y2FmMGEzMjcxYjA2YTA1JyxcbiAgICAgIGNoYWluY29kZTogJzFjMzRlNWRmYmJkNGE4NzBmNDQ3OWNhYWE1ZTZhNDZlMzQzOGY5NzZhZDVhZWZkNDkwNWI4ZmU4YmNhMTEwMWUnLFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgdmFsaWRVc2VyU2lnblNoYXJlID0ge1xuICAgIHhTaGFyZToge1xuICAgICAgaTogMSxcbiAgICAgIHk6ICc0ZDkzNDM5ODhlNjgxOTFhYWM5NDVhNjk2MzAzMWRkZGRlMzQ5MGY5MDIwZDA1NzFhNmU2YzZlMTVjY2EwMjk2JyxcbiAgICAgIHU6ICcxZTE1OWQ2YTBhZTNhOGRjY2M3NDYxNTExM2U3YzNlMjVkMzA4MGU1ZTBmZmViMGFlMDRkZDZhOTY3MjY4MTAyJyxcbiAgICAgIHI6ICdjOGY2NGNjNDg5MjYyMTZjM2Y2MGUxZDhmZjFlMjRlYmEwNjBkN2MxZmYwMjBkMGZjMWQ3MzVkNDU2NGVmZDAzJyxcbiAgICAgIFI6ICc5YmUyMjA4ZWUyOGNkNGIyNTc3YTlhNjZmNmFhYjFlZDhiMDhhMzAwOTY5ZWViOWIyMDNhNTJhYTU0ZDJjMjNjJyxcbiAgICB9LFxuICAgIHJTaGFyZXM6IHtcbiAgICAgIDM6IHtcbiAgICAgICAgaTogMyxcbiAgICAgICAgajogMSxcbiAgICAgICAgdTogJ2Q2NzVmOTA5OWZiZWYwM2FhOWZjZGNhNDAwOTI4NmY0MzVlNTYzNjljMzc0ZDAwNDJmMDNjYzYwYjQ5ZTY5MGEnLFxuICAgICAgICB2OiAnM2MwOTBlODhlZDQyZGEwZGQwYmFkZTM1YzhkNmI4OGJjMDUwMjg0NTM2Yjk4ZTViMjdkMzNmZjQ1ZGE5NzU1YicsXG4gICAgICAgIHI6ICc3ZjE2MjI0ZGJmNWIwMmFkYjZjMjEzODBmY2IyYThlZTAwMzIzZGFhZTYyY2FjMzU3NWE0ZDMyOGZkMjNhOTA1JyxcbiAgICAgICAgUjogJzliZTIyMDhlZTI4Y2Q0YjI1NzdhOWE2NmY2YWFiMWVkOGIwOGEzMDA5NjllZWI5YjIwM2E1MmFhNTRkMmMyM2MnLFxuICAgICAgICBjb21taXRtZW50OiAnNDQ1YzhjYjFkZWUwMTY2YjZiZGQ1YWQxZDBhNTNmYmZlODZjNGQzYTQ3MGYxODQ3NDU1MzBhODYzZWVkZmYyOCcsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgdmFsaWRCaXRnb1RvVXNlclNpZ25TaGFyZSA9IHtcbiAgICB4U2hhcmU6IHtcbiAgICAgIGk6IDMsXG4gICAgICB5OiAnNGQ5MzQzOTg4ZTY4MTkxYWFjOTQ1YTY5NjMwMzFkZGRkZTM0OTBmOTAyMGQwNTcxYTZlNmM2ZTE1Y2NhMDI5NicsXG4gICAgICB1OiAnMTMxNWRiZTE4MDY5ODI1YjRhMjcxODhiODEzZWFlN2ZmMjkxN2E2MTQ0OTllZDU1M2U3MGQ2NWQ0ZmE0ODIwYicsXG4gICAgICByOiAnZDA1MzkzNzVlNjU2NmYyZmU1NDBjYmE0OGM1ZTU2YmQxY2RmNjhjZmUxZjBkNTI3ZDJiNzMwZmU0ZTg3OTgwOScsXG4gICAgICBSOiAnYzg4M2ZlMmFlOWI4ZGExNzY0Y2MzNmE1MjZjZmExYTIxZjgxZDYwNDMyMGIyMDk4NjdmOGRlOTIyM2YxZGUzMicsXG4gICAgfSxcbiAgICByU2hhcmVzOiB7XG4gICAgICAxOiB7XG4gICAgICAgIGk6IDEsXG4gICAgICAgIGo6IDMsXG4gICAgICAgIHU6ICc5Y2UzMjA0YThjOTc1NzczODk2N2YzZjgxYjQ2M2Q4NzI2N2JmNmYyYzBlNWVhZjI4NDMxNjc1MzdiODcyYjBiJyxcbiAgICAgICAgdjogJzAxZWEzZjQyNWIxYWRmOGFlYzZjZmU0ZmM4ZjliOTQ3NTVjMzQ2NTc5NjVmMzIzOTc2NTVkY2Q3ODRmMWI1MTcnLFxuICAgICAgICByOiAnMDM3NWU4YzVhNTY5MWE3M2MyMWRmMDBkNDlkNDIzZTNmODNmZTA4ZDdiNWQ1YWYzM2M1YzZhYTljYWU1OWQwYScsXG4gICAgICAgIFI6ICdjODgzZmUyYWU5YjhkYTE3NjRjYzM2YTUyNmNmYTFhMjFmODFkNjA0MzIwYjIwOTg2N2Y4ZGU5MjIzZjFkZTMyJyxcbiAgICAgICAgY29tbWl0bWVudDogJzYyYjIxZjk4YmY4ODU4NDFhZDQ2OTE0NTE5MmQ0ZGYwNjk3YjNmNDJjNTgxZTNlOTI2Mzk0ZWFlMGIxMDFlY2InLFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IHR4UmVxdWVzdCA9IHtcbiAgICB0eFJlcXVlc3RJZDogJ3JhbmRvbUlkJyxcbiAgICB1bnNpZ25lZFR4czogW3sgc2lnbmFibGVIZXg6ICdNUEMgb24gYSBGcmlkYXkgbmlnaHQnLCBzZXJpYWxpemVkVHhIZXg6ICdNUEMgb24gYSBGcmlkYXkgbmlnaHQnIH1dLFxuICAgIHNpZ25hdHVyZVNoYXJlczogW1xuICAgICAge1xuICAgICAgICBmcm9tOiAnYml0Z28nLFxuICAgICAgICB0bzogJ3VzZXInLFxuICAgICAgICBzaGFyZTogdmFsaWRCaXRnb1RvVXNlclNpZ25TaGFyZS5yU2hhcmVzWzFdLnIgKyB2YWxpZEJpdGdvVG9Vc2VyU2lnblNoYXJlLnJTaGFyZXNbMV0uUixcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNhbmRib3gucmVzdG9yZSgpO1xuICB9KTtcblxuICBiZWZvcmUoJ2luaXRpYWxpemVzIG1wYycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBoZFRyZWUgPSBhd2FpdCBFZDI1NTE5QklQMzIuaW5pdGlhbGl6ZSgpO1xuICAgIE1QQyA9IGF3YWl0IEVkZHNhLmluaXRpYWxpemUoaGRUcmVlKTtcbiAgfSk7XG5cbiAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnb0tleVNoYXJlID0gYXdhaXQgTVBDLmtleVNoYXJlKDMsIDIsIDMpO1xuXG4gICAgdXNlckdwZ0tleSA9IGF3YWl0IG9wZW5wZ3AuZ2VuZXJhdGVLZXkoe1xuICAgICAgdXNlcklEczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3Rlc3QnLFxuICAgICAgICAgIGVtYWlsOiAndGVzdEB0ZXN0LmNvbScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY3VydmU6ICdzZWNwMjU2azEnLFxuICAgIH0pO1xuXG4gICAgYmFja3VwR3BnS2V5ID0gYXdhaXQgb3BlbnBncC5nZW5lcmF0ZUtleSh7XG4gICAgICB1c2VySURzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAndGVzdEJhY2t1cCcsXG4gICAgICAgICAgZW1haWw6ICd0ZXN0QmFja3VwQHRlc3QuY29tJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBjdXJ2ZTogJ3NlY3AyNTZrMScsXG4gICAgfSk7XG5cbiAgICBiaXRnb0dwZ0tleSA9IGF3YWl0IG9wZW5wZ3AuZ2VuZXJhdGVLZXkoe1xuICAgICAgdXNlcklEczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2JpdGdvJyxcbiAgICAgICAgICBlbWFpbDogJ2JpdGdvQHRlc3QuY29tJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBjdXJ2ZTogJ3NlY3AyNTZrMScsXG4gICAgfSk7XG4gICAgY29uc3QgY29uc3RhbnRzID0ge1xuICAgICAgbXBjOiB7XG4gICAgICAgIGJpdGdvUHVibGljS2V5OiBiaXRnb0dwZ0tleS5wdWJsaWNLZXksXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICdtb2NrJyB9KTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcblxuICAgIGJhc2VDb2luID0gYml0Z28uY29pbihjb2luTmFtZSk7XG5cbiAgICBiZ1VybCA9IGNvbW1vbi5FbnZpcm9ubWVudHNbYml0Z28uZ2V0RW52KCldLnVyaTtcblxuICAgIC8vIFRPRE8oV1AtMzQ2KTogc2RrLXRlc3QgbW9ja3MgY29uZmxpY3Qgc28gd2UgY2FuJ3QgdXNlIHBlcnNpc3RcbiAgICBub2NrKGJnVXJsKS5nZXQoJy9hcGkvdjEvY2xpZW50L2NvbnN0YW50cycpLnRpbWVzKDIzKS5yZXBseSgyMDAsIHsgdHRsOiAzNjAwLCBjb25zdGFudHMgfSk7XG5cbiAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwMCcsXG4gICAgICBjb2luOiAndHNvbCcsXG4gICAgICBrZXlzOiBbXG4gICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUwMDAwMDAwMCcsXG4gICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzYwMDAwMDAwMCcsXG4gICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzcwMDAwMDAwMCcsXG4gICAgICBdLFxuICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgfTtcbiAgICB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlQ29pbiwgd2FsbGV0RGF0YSk7XG4gICAgdHNzVXRpbHMgPSBuZXcgVHNzVXRpbHMoYml0Z28sIGJhc2VDb2luLCB3YWxsZXQpO1xuICB9KTtcblxuICBhZnRlcihmdW5jdGlvbiAoKSB7XG4gICAgbm9jay5jbGVhbkFsbCgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnVFNTIGtleSBjaGFpbnM6JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgVFNTIGtleSBjaGFpbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VyS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMSwgMiwgMyk7XG4gICAgICBjb25zdCBiYWNrdXBLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgyLCAyLCAzKTtcblxuICAgICAgY29uc3Qgbm9ja2VkQml0R29LZXljaGFpbiA9IGF3YWl0IG5vY2tCaXRnb0tleWNoYWluKHtcbiAgICAgICAgY29pbjogY29pbk5hbWUsXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5U2hhcmUsXG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgYml0Z29HcGdLZXksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5vY2tlZFVzZXJLZXljaGFpbiA9IGF3YWl0IG5vY2tVc2VyS2V5Y2hhaW4oeyBjb2luOiBjb2luTmFtZSB9KTtcbiAgICAgIGF3YWl0IG5vY2tCYWNrdXBLZXljaGFpbih7IGNvaW46IGNvaW5OYW1lIH0pO1xuXG4gICAgICBjb25zdCBiaXRnb0tleWNoYWluID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlQml0Z29LZXljaGFpbih7XG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdXNlcktleWNoYWluID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlVXNlcktleWNoYWluKHtcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgICBwYXNzcGhyYXNlOiAncGFzc3BocmFzZScsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGJhY2t1cEtleWNoYWluID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlQmFja3VwS2V5Y2hhaW4oe1xuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICAgIHBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlJyxcbiAgICAgIH0pO1xuXG4gICAgICBiaXRnb0tleWNoYWluLnNob3VsZC5kZWVwRXF1YWwobm9ja2VkQml0R29LZXljaGFpbik7XG4gICAgICB1c2VyS2V5Y2hhaW4uc2hvdWxkLmRlZXBFcXVhbChub2NrZWRVc2VyS2V5Y2hhaW4pO1xuXG4gICAgICAvLyB1bmVuY3J5cHRlZCBgcHJ2YCBwcm9wZXJ0eSBzaG91bGQgZXhpc3Qgb24gYmFja3VwIGtleWNoYWluXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHVTaGFyZTogYmFja3VwS2V5U2hhcmUudVNoYXJlLFxuICAgICAgICBiaXRnb1lTaGFyZTogYml0Z29LZXlTaGFyZS55U2hhcmVzWzJdLFxuICAgICAgICB1c2VyWVNoYXJlOiB1c2VyS2V5U2hhcmUueVNoYXJlc1syXSxcbiAgICAgIH0pLnNob3VsZC5lcXVhbChiYWNrdXBLZXljaGFpbi5wcnYpO1xuICAgICAgc2hvdWxkLmV4aXN0KGJhY2t1cEtleWNoYWluLmVuY3J5cHRlZFBydik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNlbmQgd2ViYXV0aG5JbmZvICh3aXRoIGVudGVycHJpc2VJZCkgb24gdGhlIHVzZXIga2V5Y2hhaW4gd2hlbiB3ZWJhdXRobkluZm8gaXMgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VyS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMSwgMiwgMyk7XG4gICAgICBjb25zdCBiYWNrdXBLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgyLCAyLCAzKTtcblxuICAgICAgLy8gUmVhbCBjcnlwdG8gZGVwcyAoY29uc3RhbnRzIHcvIGJpdGdvIGdwZyBrZXkgZm9yIHZlcmlmeVdhbGxldFNpZ25hdHVyZXMgKyBiaXRnbyBrZXljaGFpbiksXG4gICAgICAvLyB0aGVuIGNhcHR1cmUgdGhlIHVzZXIga2V5Y2hhaW4gYWRkKCkgcGFyYW1zIGJ5IHN0dWJiaW5nIGJhc2VDb2luLmtleWNoYWlucygpLlxuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgLmdldCgnL2FwaS92MS9jbGllbnQvY29uc3RhbnRzJylcbiAgICAgICAgLnRpbWVzKDIzKVxuICAgICAgICAucmVwbHkoMjAwLCB7IHR0bDogMzYwMCwgY29uc3RhbnRzOiB7IG1wYzogeyBiaXRnb1B1YmxpY0tleTogYml0Z29HcGdLZXkucHVibGljS2V5IH0gfSB9KTtcbiAgICAgIGF3YWl0IG5vY2tCaXRnb0tleWNoYWluKHtcbiAgICAgICAgY29pbjogY29pbk5hbWUsXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5U2hhcmUsXG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgYml0Z29HcGdLZXksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW4gPSBhd2FpdCB0c3NVdGlscy5jcmVhdGVCaXRnb0tleWNoYWluKHtcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGFkZFN0dWIgPSBzYW5kYm94LnN0dWIoKS5yZXNvbHZlcyh7IGlkOiAnMScsIHB1YjogJycsIHR5cGU6ICd0c3MnIH0pO1xuICAgICAgc2FuZGJveC5zdHViKGJhc2VDb2luLCAna2V5Y2hhaW5zJykucmV0dXJucyh7IGFkZDogYWRkU3R1YiB9IGFzIHVua25vd24gYXMgUmV0dXJuVHlwZTxCYXNlQ29pblsna2V5Y2hhaW5zJ10+KTtcblxuICAgICAgY29uc3QgZW50ZXJwcmlzZUlkID0gJ2VudGVycHJpc2VfaWQnO1xuICAgICAgY29uc3Qgd2ViYXV0aG5JbmZvID0geyBvdHBEZXZpY2VJZDogJ2RldmljZS0xMjMnLCBwcmZTYWx0OiAnc2FsdC1hYmMnLCBwYXNzcGhyYXNlOiAncHJmLWRlcml2ZWQtcGFzc3BocmFzZScgfTtcbiAgICAgIGF3YWl0IHRzc1V0aWxzLmNyZWF0ZVVzZXJLZXljaGFpbih7XG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgICAgcGFzc3BocmFzZTogJ3Bhc3NwaHJhc2UnLFxuICAgICAgICB3ZWJhdXRobkluZm8sXG4gICAgICAgIGVudGVycHJpc2U6IGVudGVycHJpc2VJZCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBVc2VyIGtleWNoYWluIG11c3QgY2Fycnkgd2ViYXV0aG5JbmZvICh0aGUgZmllbGQgdGhlIGJhY2tlbmQgUE9TVCAva2V5IGNvbnN1bWVzKSwgaW5jbHVkaW5nXG4gICAgICAvLyBlbnRlcnByaXNlSWQsIGFuZCBtdXN0IE5PVCB1c2UgdGhlIGRlcHJlY2F0ZWQgd2ViYXV0aG5EZXZpY2VzIGFycmF5LlxuICAgICAgYXNzZXJ0Lm9rKGFkZFN0dWIuY2FsbGVkT25jZSwgJ2tleWNoYWlucygpLmFkZCBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBmb3IgdGhlIHVzZXIga2V5Y2hhaW4nKTtcbiAgICAgIGNvbnN0IGJvZHkgPSBhZGRTdHViLmZpcnN0Q2FsbC5hcmdzWzBdIGFzIEFkZEtleWNoYWluT3B0aW9ucztcbiAgICAgIGFzc2VydC5vayhib2R5LndlYmF1dGhuSW5mbywgJ3VzZXIga2V5Y2hhaW4gYm9keSBzaG91bGQgaW5jbHVkZSB3ZWJhdXRobkluZm8nKTtcbiAgICAgIGFzc2VydC5lcXVhbChib2R5LndlYmF1dGhuSW5mby5vdHBEZXZpY2VJZCwgd2ViYXV0aG5JbmZvLm90cERldmljZUlkKTtcbiAgICAgIGFzc2VydC5lcXVhbChib2R5LndlYmF1dGhuSW5mby5wcmZTYWx0LCB3ZWJhdXRobkluZm8ucHJmU2FsdCk7XG4gICAgICBhc3NlcnQuZXF1YWwoYm9keS53ZWJhdXRobkluZm8uZW50ZXJwcmlzZUlkLCBlbnRlcnByaXNlSWQpO1xuICAgICAgYXNzZXJ0Lm9rKGJvZHkud2ViYXV0aG5JbmZvLmVuY3J5cHRlZFBydiwgJ2VuY3J5cHRlZFBydiBzaG91bGQgYmUgc2V0Jyk7XG4gICAgICBhc3NlcnQub2soYXdhaXQgYml0Z28uZGVjcnlwdCh7IGlucHV0OiBib2R5LndlYmF1dGhuSW5mby5lbmNyeXB0ZWRQcnYsIHBhc3N3b3JkOiB3ZWJhdXRobkluZm8ucGFzc3BocmFzZSB9KSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYm9keS53ZWJhdXRobkRldmljZXMsIHVuZGVmaW5lZCwgJ2RlcHJlY2F0ZWQgd2ViYXV0aG5EZXZpY2VzIHNob3VsZCBub3QgYmUgc2VudCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBUU1Mga2V5IGNoYWlucyB3aXRob3V0IHBhc3NwaHJhc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VyS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMSwgMiwgMyk7XG4gICAgICBjb25zdCBiYWNrdXBLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgyLCAyLCAzKTtcblxuICAgICAgY29uc3Qgbm9ja2VkQml0R29LZXljaGFpbiA9IGF3YWl0IG5vY2tCaXRnb0tleWNoYWluKHtcbiAgICAgICAgY29pbjogY29pbk5hbWUsXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5U2hhcmUsXG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIC8vIHJldXNpbmcgdGhlIHVzZXIgZ3BnIGtleSBhcyB0aGUgYmFja3VwIGdwZyBrZXksIGkuZS4gdGhlIHVzZXIgaXMgdGhlaXIgb3duIHRoZSBiYWNrdXAgcHJvdmlkZXJcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICBiaXRnb0dwZ0tleSxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgbm9ja2VkVXNlcktleWNoYWluID0gYXdhaXQgbm9ja1VzZXJLZXljaGFpbih7IGNvaW46IGNvaW5OYW1lIH0pO1xuICAgICAgYXdhaXQgbm9ja0JhY2t1cEtleWNoYWluKHsgY29pbjogY29pbk5hbWUgfSk7XG5cbiAgICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW4gPSBhd2FpdCB0c3NVdGlscy5jcmVhdGVCaXRnb0tleWNoYWluKHtcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB1c2VyS2V5Y2hhaW4gPSBhd2FpdCB0c3NVdGlscy5jcmVhdGVVc2VyS2V5Y2hhaW4oe1xuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGJhY2t1cEtleWNoYWluID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlQmFja3VwS2V5Y2hhaW4oe1xuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICB9KTtcblxuICAgICAgYml0Z29LZXljaGFpbi5zaG91bGQuZGVlcEVxdWFsKG5vY2tlZEJpdEdvS2V5Y2hhaW4pO1xuICAgICAgdXNlcktleWNoYWluLnNob3VsZC5kZWVwRXF1YWwobm9ja2VkVXNlcktleWNoYWluKTtcblxuICAgICAgLy8gdW5lbmNyeXB0ZWQgYHBydmAgcHJvcGVydHkgc2hvdWxkIGV4aXN0IG9uIGJhY2t1cCBrZXljaGFpblxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB1U2hhcmU6IGJhY2t1cEtleVNoYXJlLnVTaGFyZSxcbiAgICAgICAgYml0Z29ZU2hhcmU6IGJpdGdvS2V5U2hhcmUueVNoYXJlc1syXSxcbiAgICAgICAgdXNlcllTaGFyZTogdXNlcktleVNoYXJlLnlTaGFyZXNbMl0sXG4gICAgICB9KS5zaG91bGQuZXF1YWwoYmFja3VwS2V5Y2hhaW4ucHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgVFNTIGtleSBjaGFpbnMgd2l0aCBvcHRpb25hbCBwYXJhbXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBlbnRlcnByaXNlID0gJ2VudGVycHJpc2UnO1xuXG4gICAgICBjb25zdCB1c2VyS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMSwgMiwgMyk7XG4gICAgICBjb25zdCBiYWNrdXBLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgyLCAyLCAzKTtcblxuICAgICAgY29uc3Qgbm9ja2VkQml0R29LZXljaGFpbiA9IGF3YWl0IG5vY2tCaXRnb0tleWNoYWluKHtcbiAgICAgICAgY29pbjogY29pbk5hbWUsXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5U2hhcmUsXG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgYml0Z29HcGdLZXksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5vY2tlZFVzZXJLZXljaGFpbiA9IGF3YWl0IG5vY2tVc2VyS2V5Y2hhaW4oeyBjb2luOiBjb2luTmFtZSB9KTtcbiAgICAgIGF3YWl0IG5vY2tCYWNrdXBLZXljaGFpbih7IGNvaW46IGNvaW5OYW1lIH0pO1xuXG4gICAgICBjb25zdCBiaXRnb0tleWNoYWluID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlQml0Z29LZXljaGFpbih7XG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgZW50ZXJwcmlzZSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdXNlcktleWNoYWluID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlVXNlcktleWNoYWluKHtcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgICBwYXNzcGhyYXNlOiAncGFzc3BocmFzZScsXG4gICAgICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogJ29yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZScsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGJhY2t1cEtleWNoYWluID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlQmFja3VwS2V5Y2hhaW4oe1xuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICAgIHBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlJyxcbiAgICAgIH0pO1xuXG4gICAgICBiaXRnb0tleWNoYWluLnNob3VsZC5kZWVwRXF1YWwobm9ja2VkQml0R29LZXljaGFpbik7XG4gICAgICB1c2VyS2V5Y2hhaW4uc2hvdWxkLmRlZXBFcXVhbChub2NrZWRVc2VyS2V5Y2hhaW4pO1xuXG4gICAgICAvLyB1bmVuY3J5cHRlZCBgcHJ2YCBwcm9wZXJ0eSBzaG91bGQgZXhpc3Qgb24gYmFja3VwIGtleWNoYWluXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHVTaGFyZTogYmFja3VwS2V5U2hhcmUudVNoYXJlLFxuICAgICAgICBiaXRnb1lTaGFyZTogYml0Z29LZXlTaGFyZS55U2hhcmVzWzJdLFxuICAgICAgICB1c2VyWVNoYXJlOiB1c2VyS2V5U2hhcmUueVNoYXJlc1syXSxcbiAgICAgIH0pLnNob3VsZC5lcXVhbChiYWNrdXBLZXljaGFpbi5wcnYpO1xuICAgICAgc2hvdWxkLmV4aXN0KGJhY2t1cEtleWNoYWluLmVuY3J5cHRlZFBydik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gZ2VuZXJhdGUgVFNTIGtleWNoYWlucyB3aGVuIHJlY2VpdmVkIGludmFsaWQgbnVtYmVyIG9mIHdhbGxldCBzaWduYXR1cmVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlcktleVNoYXJlID0gTVBDLmtleVNoYXJlKDEsIDIsIDMpO1xuICAgICAgY29uc3QgYmFja3VwS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMiwgMiwgMyk7XG5cbiAgICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW4gPSBhd2FpdCBnZW5lcmF0ZUJpdGdvS2V5Y2hhaW4oe1xuICAgICAgICBjb2luOiBjb2luTmFtZSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgYml0Z29LZXlTaGFyZSxcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICBiaXRnb0dwZ0tleSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjZXJ0c1N0cmluZyA9IGF3YWl0IGNyZWF0ZVNoYXJlZERhdGFQcm9vZihiaXRnb0dwZ0tleS5wcml2YXRlS2V5LCB1c2VyR3BnS2V5LnB1YmxpY0tleSwgW10pO1xuICAgICAgY29uc3QgY2VydHNLZXkgPSBhd2FpdCBvcGVucGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBjZXJ0c1N0cmluZyB9KTtcbiAgICAgIGNvbnN0IGZpbmFsS2V5ID0gbmV3IG9wZW5wZ3AuUGFja2V0TGlzdCgpO1xuICAgICAgY2VydHNLZXkudG9QYWNrZXRMaXN0KCkuZm9yRWFjaCgocGFja2V0KSA9PiBmaW5hbEtleS5wdXNoKHBhY2tldCkpO1xuICAgICAgLy8gdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gb25seSByZXF1aXJlcyB0d28gYXJndW1lbnRzIGJ1dCB0aGUgYWNjb3JkaW5nIC5kLnRzIGZpbGUgZm9yIG9wZW5wZ3AgaGFzIHRoZSBmdXJ0aGVyXG4gICAgICAvLyBhcmd1bWVudHMgbWFya2VkIGFzIG1hbmRhdG9yeSBhcyB3ZWxsLlxuICAgICAgLy8gT25jZSB0aGUgZm9sbG93aW5nIFBSIGhhcyBiZWVuIG1lcmdlZCBhbmQgcmVsZWFzZWQgd2Ugbm8gbG9uZ2VyIG5lZWQgdGhlIHRzLWlnbm9yZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVucGdwanMvb3BlbnBncGpzL3B1bGwvMTU3NlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgYml0Z29LZXljaGFpbi53YWxsZXRIU01HUEdQdWJsaWNLZXlTaWdzID0gb3BlbnBncC5hcm1vcihvcGVucGdwLmVudW1zLmFybW9yLnB1YmxpY0tleSwgZmluYWxLZXkud3JpdGUoKSk7XG5cbiAgICAgIGF3YWl0IHRzc1V0aWxzXG4gICAgICAgIC52ZXJpZnlXYWxsZXRTaWduYXR1cmVzKHVzZXJHcGdLZXkucHVibGljS2V5LCBiYWNrdXBHcGdLZXkucHVibGljS2V5LCBiaXRnb0tleWNoYWluLCAnJywgMSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ludmFsaWQgd2FsbGV0IHNpZ25hdHVyZXMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byBnZW5lcmF0ZSBUU1Mga2V5Y2hhaW5zIHdoZW4gd2FsbGV0IHNpZ25hdHVyZSBmaW5nZXJwcmludHMgZG8gbm90IG1hdGNoIHBhc3NlZCB1c2VyL2JhY2t1cCBmaW5nZXJwcmludHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VyS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMSwgMiwgMyk7XG4gICAgICBjb25zdCBiYWNrdXBLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgyLCAyLCAzKTtcblxuICAgICAgY29uc3QgYml0Z29LZXljaGFpbiA9IGF3YWl0IGdlbmVyYXRlQml0Z29LZXljaGFpbih7XG4gICAgICAgIGNvaW46IGNvaW5OYW1lLFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleVNoYXJlLFxuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIGJpdGdvR3BnS2V5LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIHVzaW5nIHRoZSBiYWNrdXAgZ3BnIGhlcmUgaW5zdGVhZCBvZiB0aGUgdXNlciBncGcga2V5IHRvIHNpbXVsYXRlIHRoYXQgdGhlIGZpcnN0IHNpZ25hdHVyZSBoYXMgYSBkaWZmZXJlbnRcbiAgICAgIC8vIGZpbmdlcnByaW50IGZyb20gdGhlIHBhc3NlZCBpbiBmaXJzdCBncGcga2V5XG4gICAgICBhd2FpdCB0c3NVdGlsc1xuICAgICAgICAudmVyaWZ5V2FsbGV0U2lnbmF0dXJlcyhiYWNrdXBHcGdLZXkucHVibGljS2V5LCBiYWNrdXBHcGdLZXkucHVibGljS2V5LCBiaXRnb0tleWNoYWluLCAnJywgMSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgYGZpcnN0IHdhbGxldCBzaWduYXR1cmUncyBmaW5nZXJwcmludCBkb2VzIG5vdCBtYXRjaCBwYXNzZWQgdXNlciBncGcga2V5J3MgZmluZ2VycHJpbnRgXG4gICAgICAgICk7XG5cbiAgICAgIC8vIHVzaW5nIHRoZSB1c2VyIGdwZyBoZXJlIGluc3RlYWQgb2YgdGhlIGJhY2t1cCBncGcga2V5IHRvIHNpbXVsYXRlIHRoYXQgdGhlIHNlY29uZCBzaWduYXR1cmUgaGFzIGEgZGlmZmVyZW50XG4gICAgICAvLyBmaW5nZXJwcmludCBmcm9tIHRoZSBwYXNzZWQgaW4gc2Vjb25kIGdwZyBrZXlcbiAgICAgIGF3YWl0IHRzc1V0aWxzXG4gICAgICAgIC52ZXJpZnlXYWxsZXRTaWduYXR1cmVzKHVzZXJHcGdLZXkucHVibGljS2V5LCB1c2VyR3BnS2V5LnB1YmxpY0tleSwgYml0Z29LZXljaGFpbiwgJycsIDEpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgIGBzZWNvbmQgd2FsbGV0IHNpZ25hdHVyZSdzIGZpbmdlcnByaW50IGRvZXMgbm90IG1hdGNoIHBhc3NlZCBiYWNrdXAgZ3BnIGtleSdzIGZpbmdlcnByaW50YFxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGdlbmVyYXRlIFRTUyBrZXljaGFpbnMgd2hlbiB3YWxsZXQgc2lnbmF0dXJlIGlzIGZvciBkaWZmZXJlbnQga2V5IHNoYXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlcktleVNoYXJlID0gTVBDLmtleVNoYXJlKDEsIDIsIDMpO1xuICAgICAgY29uc3QgYmFja3VwS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMiwgMiwgMyk7XG4gICAgICBjb25zdCBjdXN0b21CaXRnb0tleVNoYXJlID0gTVBDLmtleVNoYXJlKDMsIDIsIDMpO1xuXG4gICAgICBjb25zdCBiaXRnb0tleWNoYWluMSA9IGF3YWl0IGdlbmVyYXRlQml0Z29LZXljaGFpbih7XG4gICAgICAgIGNvaW46IGNvaW5OYW1lLFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleVNoYXJlLFxuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIGJpdGdvR3BnS2V5LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBiaXRnb0tleWNoYWluMiA9IGF3YWl0IGdlbmVyYXRlQml0Z29LZXljaGFpbih7XG4gICAgICAgIGNvaW46IGNvaW5OYW1lLFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleVNoYXJlOiBjdXN0b21CaXRnb0tleVNoYXJlLFxuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIGJpdGdvR3BnS2V5LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIHVzaW5nIHRoZSBvdGhlciBiaXRnbyBrZXljaGFpbnMgY29tbW9uIGtleWNoYWluIGFuZCB3YWxsZXRIU01HUEdQdWJsaWNLZXlTaWdzIHNvIHRoYXQgdGhlIHZlcmlmaWNhdGlvbiBvZiB0aGVcbiAgICAgIC8vIGNvbW1tb24ga2V5Y2hhaW4gcGFzc2VzIGJ1dCBmYWlscyBmb3IgdGhlIGJpdGdvIHRvIHVzZXIvIGJhY2t1cCBzaGFyZXNcbiAgICAgIGJpdGdvS2V5Y2hhaW4xLmNvbW1vbktleWNoYWluID0gYml0Z29LZXljaGFpbjIuY29tbW9uS2V5Y2hhaW47XG4gICAgICBiaXRnb0tleWNoYWluMS53YWxsZXRIU01HUEdQdWJsaWNLZXlTaWdzID0gYml0Z29LZXljaGFpbjIud2FsbGV0SFNNR1BHUHVibGljS2V5U2lncztcblxuICAgICAgYXdhaXQgdHNzVXRpbHNcbiAgICAgICAgLmNyZWF0ZVVzZXJLZXljaGFpbih7XG4gICAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICAgIGJpdGdvS2V5Y2hhaW46IGJpdGdvS2V5Y2hhaW4xLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnYml0Z28gc2hhcmUgbWlzbWF0Y2gnKTtcblxuICAgICAgYXdhaXQgdHNzVXRpbHNcbiAgICAgICAgLmNyZWF0ZUJhY2t1cEtleWNoYWluKHtcbiAgICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgICAgYml0Z29LZXljaGFpbjogYml0Z29LZXljaGFpbjEsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdiaXRnbyBzaGFyZSBtaXNtYXRjaCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGdlbmVyYXRlIFRTUyBrZXkgY2hhaW5zIHdoZW4gY29tbW9uIGtleWNoYWlucyBkbyBub3QgbWF0Y2gnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VyS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMSwgMiwgMyk7XG4gICAgICBjb25zdCBiYWNrdXBLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgyLCAyLCAzKTtcblxuICAgICAgY29uc3Qgbm9ja2VkQml0R29LZXljaGFpbiA9IGF3YWl0IG5vY2tCaXRnb0tleWNoYWluKHtcbiAgICAgICAgY29pbjogY29pbk5hbWUsXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5U2hhcmUsXG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgYml0Z29HcGdLZXksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW4gPSBhd2FpdCB0c3NVdGlscy5jcmVhdGVCaXRnb0tleWNoYWluKHtcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgfSk7XG4gICAgICBiaXRnb0tleWNoYWluLnNob3VsZC5kZWVwRXF1YWwobm9ja2VkQml0R29LZXljaGFpbik7XG5cbiAgICAgIGF3YWl0IHRzc1V0aWxzXG4gICAgICAgIC5jcmVhdGVVc2VyS2V5Y2hhaW4oe1xuICAgICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgICBiYWNrdXBLZXlTaGFyZTogTVBDLmtleVNoYXJlKDIsIDIsIDMpLFxuICAgICAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICAgICAgcGFzc3BocmFzZTogJ3Bhc3NwaHJhc2UnLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnRmFpbGVkIHRvIGNyZWF0ZSB1c2VyIGtleWNoYWluIC0gY29tbW9uS2V5Y2hhaW5zIGRvIG5vdCBtYXRjaC4nKTtcbiAgICAgIGF3YWl0IHRzc1V0aWxzXG4gICAgICAgIC5jcmVhdGVVc2VyS2V5Y2hhaW4oe1xuICAgICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICAgIHVzZXJLZXlTaGFyZTogTVBDLmtleVNoYXJlKDEsIDIsIDMpLFxuICAgICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICAgICAgcGFzc3BocmFzZTogJ3Bhc3NwaHJhc2UnLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnRmFpbGVkIHRvIGNyZWF0ZSB1c2VyIGtleWNoYWluIC0gY29tbW9uS2V5Y2hhaW5zIGRvIG5vdCBtYXRjaC4nKTtcblxuICAgICAgYXdhaXQgdHNzVXRpbHNcbiAgICAgICAgLmNyZWF0ZUJhY2t1cEtleWNoYWluKHtcbiAgICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgICB1c2VyS2V5U2hhcmU6IE1QQy5rZXlTaGFyZSgxLCAyLCAzKSxcbiAgICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgICAgIHBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlJyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ZhaWxlZCB0byBjcmVhdGUgYmFja3VwIGtleWNoYWluIC0gY29tbW9uS2V5Y2hhaW5zIGRvIG5vdCBtYXRjaC4nKTtcbiAgICAgIGF3YWl0IHRzc1V0aWxzXG4gICAgICAgIC5jcmVhdGVCYWNrdXBLZXljaGFpbih7XG4gICAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICAgIGJhY2t1cEtleVNoYXJlOiBNUEMua2V5U2hhcmUoMiwgMiwgMyksXG4gICAgICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgICAgICBwYXNzcGhyYXNlOiAncGFzc3BocmFzZScsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdGYWlsZWQgdG8gY3JlYXRlIGJhY2t1cCBrZXljaGFpbiAtIGNvbW1vbktleWNoYWlucyBkbyBub3QgbWF0Y2guJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIFRTUyBrZXkgY2hhaW5zIHdpdGggdjIgZW5jcnlwdGlvbiBlbnZlbG9wZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXNzcGhyYXNlID0gJ3Bhc3NwaHJhc2UnO1xuICAgICAgY29uc3QgdXNlcktleVNoYXJlID0gTVBDLmtleVNoYXJlKDEsIDIsIDMpO1xuICAgICAgY29uc3QgYmFja3VwS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMiwgMiwgMyk7XG5cbiAgICAgIGF3YWl0IG5vY2tCaXRnb0tleWNoYWluKHtcbiAgICAgICAgY29pbjogY29pbk5hbWUsXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5U2hhcmUsXG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgYml0Z29HcGdLZXksXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IG5vY2tVc2VyS2V5Y2hhaW4oeyBjb2luOiBjb2luTmFtZSB9KTtcbiAgICAgIGF3YWl0IG5vY2tCYWNrdXBLZXljaGFpbih7IGNvaW46IGNvaW5OYW1lIH0pO1xuXG4gICAgICBjb25zdCBiaXRnb0tleWNoYWluID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlQml0Z29LZXljaGFpbih7XG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdXNlcktleWNoYWluID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlVXNlcktleWNoYWluKHtcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgICBwYXNzcGhyYXNlLFxuICAgICAgICBlbmNyeXB0aW9uVmVyc2lvbjogMixcbiAgICAgIH0pO1xuXG4gICAgICBzaG91bGQuZXhpc3QodXNlcktleWNoYWluLmVuY3J5cHRlZFBydik7XG4gICAgICBjb25zdCBlbnZlbG9wZSA9IEpTT04ucGFyc2UodXNlcktleWNoYWluLmVuY3J5cHRlZFBydiEpO1xuICAgICAgZW52ZWxvcGUudi5zaG91bGQuZXF1YWwoMik7XG5cbiAgICAgIGNvbnN0IGRlY3J5cHRlZCA9IGF3YWl0IGJpdGdvLmRlY3J5cHQoeyBpbnB1dDogdXNlcktleWNoYWluLmVuY3J5cHRlZFBydiEsIHBhc3N3b3JkOiBwYXNzcGhyYXNlIH0pO1xuICAgICAgc2hvdWxkLmV4aXN0KGRlY3J5cHRlZCk7XG4gICAgICBjb25zdCBwYXJzZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gSlNPTi5wYXJzZShkZWNyeXB0ZWQpO1xuICAgICAgc2hvdWxkLmV4aXN0KHBhcnNlZC51U2hhcmUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndjIgZW5jcnlwdGlvbiAoRWREU0Egc2lnbmluZyBkaXNwYXRjaCknLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2lnbmluZ1R4UmVxdWVzdDogVHhSZXF1ZXN0ID0ge1xuICAgICAgdHhSZXF1ZXN0SWQ6ICd2Mi1zaWduaW5nLXRlc3QnLFxuICAgICAgdW5zaWduZWRUeHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHNlcmlhbGl6ZWRUeEhleDogJ3Rlc3QtcGF5bG9hZCcsXG4gICAgICAgICAgc2lnbmFibGVIZXg6ICdkZWFkYmVlZicsXG4gICAgICAgICAgZGVyaXZhdGlvblBhdGg6ICdtLzAnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGludGVudDogeyBpbnRlbnRUeXBlOiAncGF5bWVudCcgfSxcbiAgICAgIGxhdGVzdDogdHJ1ZSxcbiAgICAgIHN0YXRlOiAncGVuZGluZ1VzZXJTaWduYXR1cmUnLFxuICAgICAgd2FsbGV0VHlwZTogJ2hvdCcsXG4gICAgICB3YWxsZXRJZDogJ3dhbGxldElkJyxcbiAgICAgIHBvbGljaWVzQ2hlY2tlZDogdHJ1ZSxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICB1c2VySWQ6ICd1c2VySWQnLFxuICAgIH07XG5cbiAgICBpdCgndjIgUi1zaGFyZSByb3VuZC10cmlwOiBlbmNyeXB0IHZpYSBjb21taXRtZW50LCB2ZXJpZnkgZW52ZWxvcGUsIGRlY3J5cHQgdmlhIGNyZWF0ZVJTaGFyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhc3NwaHJhc2UgPSAndGVzdC1wYXNzcGhyYXNlJztcbiAgICAgIGNvbnN0IHBydiA9IEpTT04uc3RyaW5naWZ5KHZhbGlkVXNlclNpZ25pbmdNYXRlcmlhbCk7XG5cbiAgICAgIC8vIDEuIEVuY3J5cHQgcHJ2IHdpdGggdjJcbiAgICAgIGNvbnN0IGVuY3J5cHRlZFBydiA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoe1xuICAgICAgICBpbnB1dDogcHJ2LFxuICAgICAgICBwYXNzd29yZDogcGFzc3BocmFzZSxcbiAgICAgICAgZW5jcnlwdGlvblZlcnNpb246IDIsXG4gICAgICB9KTtcbiAgICAgIEpTT04ucGFyc2UoZW5jcnlwdGVkUHJ2KS52LnNob3VsZC5lcXVhbCgyKTtcblxuICAgICAgLy8gMi4gQ3JlYXRlIGNvbW1pdG1lbnQgLS0gUi1zaGFyZSBzaG91bGQgYmUgYSB2MiBlbnZlbG9wZVxuICAgICAgY29uc3QgY29tbWl0UmVzdWx0ID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlQ29tbWl0bWVudFNoYXJlRnJvbVR4UmVxdWVzdCh7XG4gICAgICAgIHR4UmVxdWVzdDogc2lnbmluZ1R4UmVxdWVzdCxcbiAgICAgICAgcHJ2LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICBiaXRnb0dwZ1B1YktleTogYml0Z29HcGdLZXkucHVibGljS2V5LFxuICAgICAgICBlbmNyeXB0ZWRQcnYsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgclNoYXJlRW52ZWxvcGUgPSBKU09OLnBhcnNlKGNvbW1pdFJlc3VsdC5lbmNyeXB0ZWRVc2VyVG9CaXRnb1JTaGFyZS5zaGFyZSk7XG4gICAgICByU2hhcmVFbnZlbG9wZS52LnNob3VsZC5lcXVhbCgyKTtcbiAgICAgIHJTaGFyZUVudmVsb3BlLnNob3VsZC5oYXZlLnByb3BlcnR5KCdoa2RmU2FsdCcpO1xuXG4gICAgICAvLyAzLiBSb3VuZC10cmlwOiBkZWNyeXB0IHRoZSB2MiBSLXNoYXJlXG4gICAgICBjb25zdCB7IHJTaGFyZSB9ID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlUlNoYXJlRnJvbVR4UmVxdWVzdCh7XG4gICAgICAgIHR4UmVxdWVzdDogc2lnbmluZ1R4UmVxdWVzdCxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgZW5jcnlwdGVkVXNlclRvQml0Z29SU2hhcmU6IGNvbW1pdFJlc3VsdC5lbmNyeXB0ZWRVc2VyVG9CaXRnb1JTaGFyZSxcbiAgICAgIH0pO1xuXG4gICAgICBzaG91bGQuZXhpc3QoclNoYXJlLnhTaGFyZSk7XG4gICAgICBzaG91bGQuZXhpc3QoclNoYXJlLnJTaGFyZXMpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2lnblR4UmVxdWVzdDonLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhSZXF1ZXN0SWQgPSAncmFuZG9taWQnO1xuICAgIGNvbnN0IHR4UmVxdWVzdDogVHhSZXF1ZXN0ID0ge1xuICAgICAgdHhSZXF1ZXN0SWQsXG4gICAgICB0cmFuc2FjdGlvbnM6IFtdLFxuICAgICAgdW5zaWduZWRUeHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHNlcmlhbGl6ZWRUeEhleDogJ01QQyBvbiBhIEZyaWRheSBuaWdodCcsXG4gICAgICAgICAgc2lnbmFibGVIZXg6ICdNUEMgb24gYSBGcmlkYXkgbmlnaHQnLFxuICAgICAgICAgIGRlcml2YXRpb25QYXRoOiAnbS8wJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBpbnRlbnQ6IHtcbiAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgfSxcbiAgICAgIGxhdGVzdDogdHJ1ZSxcbiAgICAgIHN0YXRlOiAncGVuZGluZ1VzZXJTaWduYXR1cmUnLFxuICAgICAgd2FsbGV0VHlwZTogJ2hvdCcsXG4gICAgICB3YWxsZXRJZDogJ3dhbGxldElkJyxcbiAgICAgIHBvbGljaWVzQ2hlY2tlZDogdHJ1ZSxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICB1c2VySWQ6ICd1c2VySWQnLFxuICAgIH07XG5cbiAgICBiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJTaWduU2hhcmUgPSB2YWxpZFVzZXJTaWduU2hhcmU7XG4gICAgICBjb25zdCByU2hhcmUgPSB1c2VyU2lnblNoYXJlLnJTaGFyZXNbM107XG4gICAgICBjb25zdCBzaWduYXR1cmVTaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSB7XG4gICAgICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgICAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgICAgICBzaGFyZTogclNoYXJlLnIgKyByU2hhcmUuUixcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IG5vY2tTZW5kU2lnbmF0dXJlU2hhcmUoe1xuICAgICAgICB3YWxsZXRJZDogd2FsbGV0LmlkKCksXG4gICAgICAgIHR4UmVxdWVzdElkOiB0eFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICAgIHNpZ25hdHVyZVNoYXJlLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHNpZ25hdHVyZVNoYXJlMjogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSB7XG4gICAgICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgICAgICBzaGFyZTogdmFsaWRCaXRnb1RvVXNlclNpZ25TaGFyZS5yU2hhcmVzWzFdLnIgKyB2YWxpZEJpdGdvVG9Vc2VyU2lnblNoYXJlLnJTaGFyZXNbMV0uUixcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNwb25zZSA9IHsgdHhSZXF1ZXN0czogW3sgLi4udHhSZXF1ZXN0LCBzaWduYXR1cmVTaGFyZXM6IFtzaWduYXR1cmVTaGFyZTJdIH1dIH07XG4gICAgICBhd2FpdCBub2NrR2V0VHhSZXF1ZXN0KHsgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLCB0eFJlcXVlc3RJZDogdHhSZXF1ZXN0LnR4UmVxdWVzdElkLCByZXNwb25zZSB9KTtcblxuICAgICAgY29uc3QgYml0Z29Ub1VzZXJDb21taXRtZW50U2hhcmU6IENvbW1pdG1lbnRTaGFyZVJlY29yZCA9IHtcbiAgICAgICAgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgICAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsXG4gICAgICAgIHR5cGU6IENvbW1pdG1lbnRUeXBlLkNPTU1JVE1FTlQsXG4gICAgICAgIHNoYXJlOiB2YWxpZEJpdGdvVG9Vc2VyU2lnblNoYXJlLnJTaGFyZXNbMV0uY29tbWl0bWVudCxcbiAgICAgIH07XG4gICAgICBjb25zdCBleGNoYW5nZUNvbW1pdFJlc3BvbnNlOiBFeGNoYW5nZUNvbW1pdG1lbnRSZXNwb25zZSA9IHsgY29tbWl0bWVudFNoYXJlOiBiaXRnb1RvVXNlckNvbW1pdG1lbnRTaGFyZSB9O1xuICAgICAgYXdhaXQgbm9ja0V4Y2hhbmdlQ29tbWl0bWVudHMoe1xuICAgICAgICB3YWxsZXRJZDogd2FsbGV0LmlkKCksXG4gICAgICAgIHR4UmVxdWVzdElkOiB0eFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICAgIHJlc3BvbnNlOiBleGNoYW5nZUNvbW1pdFJlc3BvbnNlLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2lnblR4UmVxdWVzdCBzaG91bGQgc3VjY2VlZCB3aXRoIHR4UmVxdWVzdCBvYmplY3QgYXMgaW5wdXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzaWduZWRUeFJlcXVlc3QgPSBhd2FpdCB0c3NVdGlscy5zaWduVHhSZXF1ZXN0KHtcbiAgICAgICAgdHhSZXF1ZXN0LFxuICAgICAgICBwcnY6IEpTT04uc3RyaW5naWZ5KHZhbGlkVXNlclNpZ25pbmdNYXRlcmlhbCksXG4gICAgICAgIHJlcUlkLFxuICAgICAgfSk7XG4gICAgICBzaWduZWRUeFJlcXVlc3QudW5zaWduZWRUeHMuc2hvdWxkLmRlZXBFcXVhbCh0eFJlcXVlc3QudW5zaWduZWRUeHMpO1xuXG4gICAgICBzYW5kYm94LnZlcmlmeUFuZFJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaWduVHhSZXF1ZXN0IHNob3VsZCBzdWNjZWVkIHdpdGggdHhSZXF1ZXN0IGlkIGFzIGlucHV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZ2V0VHhSZXF1ZXN0ID0gc2FuZGJveC5zdHViKHRzc1V0aWxzLCAnZ2V0VHhSZXF1ZXN0Jyk7XG4gICAgICBnZXRUeFJlcXVlc3QucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgIGdldFR4UmVxdWVzdC5jYWxsZWRXaXRoKHR4UmVxdWVzdElkKTtcblxuICAgICAgY29uc3Qgc2lnbmVkVHhSZXF1ZXN0ID0gYXdhaXQgdHNzVXRpbHMuc2lnblR4UmVxdWVzdCh7XG4gICAgICAgIHR4UmVxdWVzdDogdHhSZXF1ZXN0SWQsXG4gICAgICAgIHBydjogSlNPTi5zdHJpbmdpZnkodmFsaWRVc2VyU2lnbmluZ01hdGVyaWFsKSxcbiAgICAgICAgcmVxSWQsXG4gICAgICB9KTtcbiAgICAgIHNpZ25lZFR4UmVxdWVzdC51bnNpZ25lZFR4cy5zaG91bGQuZGVlcEVxdWFsKHR4UmVxdWVzdC51bnNpZ25lZFR4cyk7XG5cbiAgICAgIHNhbmRib3gudmVyaWZ5QW5kUmVzdG9yZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2lnblR4UmVxdWVzdCBXaXRoIENvbW1pdG1lbnQ6JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4UmVxdWVzdElkID0gJ3JhbmRvbWlkJztcbiAgICBjb25zdCB0eFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICAgIHVuc2lnbmVkVHhzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6ICdNUEMgb24gYSBGcmlkYXkgbmlnaHQnLFxuICAgICAgICAgIHNpZ25hYmxlSGV4OiAnTVBDIG9uIGEgRnJpZGF5IG5pZ2h0JyxcbiAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgaW50ZW50OiB7XG4gICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgIH0sXG4gICAgICBsYXRlc3Q6IHRydWUsXG4gICAgICBzdGF0ZTogJ3BlbmRpbmdVc2VyU2lnbmF0dXJlJyxcbiAgICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgICAgd2FsbGV0SWQ6ICd3YWxsZXRJZCcsXG4gICAgICBwb2xpY2llc0NoZWNrZWQ6IHRydWUsXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgdXNlcklkOiAndXNlcklkJyxcbiAgICB9O1xuXG4gICAgYmVmb3JlRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VyU2lnblNoYXJlID0gdmFsaWRVc2VyU2lnblNoYXJlO1xuICAgICAgY29uc3QgclNoYXJlID0gdXNlclNpZ25TaGFyZS5yU2hhcmVzWzNdO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlU2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0ge1xuICAgICAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgc2hhcmU6IHJTaGFyZS5yICsgclNoYXJlLlIsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBub2NrU2VuZFNpZ25hdHVyZVNoYXJlKHtcbiAgICAgICAgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLFxuICAgICAgICB0eFJlcXVlc3RJZDogdHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgICBzaWduYXR1cmVTaGFyZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzaWduYXR1cmVTaGFyZTI6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0ge1xuICAgICAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgc2hhcmU6IHZhbGlkQml0Z29Ub1VzZXJTaWduU2hhcmUuclNoYXJlc1sxXS5yICsgdmFsaWRCaXRnb1RvVXNlclNpZ25TaGFyZS5yU2hhcmVzWzFdLlIsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7IHR4UmVxdWVzdHM6IFt7IC4uLnR4UmVxdWVzdCwgc2lnbmF0dXJlU2hhcmVzOiBbc2lnbmF0dXJlU2hhcmUyXSB9XSB9O1xuICAgICAgYXdhaXQgbm9ja0dldFR4UmVxdWVzdCh7IHdhbGxldElkOiB3YWxsZXQuaWQoKSwgdHhSZXF1ZXN0SWQ6IHR4UmVxdWVzdC50eFJlcXVlc3RJZCwgcmVzcG9uc2UgfSk7XG4gICAgICBjb25zdCBiaXRnb1RvVXNlckNvbW1pdG1lbnRTaGFyZTogQ29tbWl0bWVudFNoYXJlUmVjb3JkID0ge1xuICAgICAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgdHlwZTogQ29tbWl0bWVudFR5cGUuQ09NTUlUTUVOVCxcbiAgICAgICAgc2hhcmU6IHZhbGlkQml0Z29Ub1VzZXJTaWduU2hhcmUuclNoYXJlc1sxXS5jb21taXRtZW50LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4Y2hhbmdlQ29tbWl0UmVzcG9uc2U6IEV4Y2hhbmdlQ29tbWl0bWVudFJlc3BvbnNlID0geyBjb21taXRtZW50U2hhcmU6IGJpdGdvVG9Vc2VyQ29tbWl0bWVudFNoYXJlIH07XG4gICAgICBhd2FpdCBub2NrRXhjaGFuZ2VDb21taXRtZW50cyh7XG4gICAgICAgIHdhbGxldElkOiB3YWxsZXQuaWQoKSxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IHR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgICAgcmVzcG9uc2U6IGV4Y2hhbmdlQ29tbWl0UmVzcG9uc2UsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaWduVHhSZXF1ZXN0IHNob3VsZCBzdWNjZWVkIHdpdGggdHhSZXF1ZXN0IG9iamVjdCBhcyBpbnB1dCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNpZ25lZFR4UmVxdWVzdCA9IGF3YWl0IHRzc1V0aWxzLnNpZ25UeFJlcXVlc3Qoe1xuICAgICAgICB0eFJlcXVlc3QsXG4gICAgICAgIHBydjogSlNPTi5zdHJpbmdpZnkodmFsaWRVc2VyU2lnbmluZ01hdGVyaWFsKSxcbiAgICAgICAgcmVxSWQsXG4gICAgICB9KTtcbiAgICAgIHNpZ25lZFR4UmVxdWVzdC51bnNpZ25lZFR4cy5zaG91bGQuZGVlcEVxdWFsKHR4UmVxdWVzdC51bnNpZ25lZFR4cyk7XG5cbiAgICAgIHNhbmRib3gudmVyaWZ5QW5kUmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NpZ25UeFJlcXVlc3Qgc2hvdWxkIHN1Y2NlZWQgd2l0aCB0eFJlcXVlc3QgaWQgYXMgaW5wdXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBnZXRUeFJlcXVlc3QgPSBzYW5kYm94LnN0dWIodHNzVXRpbHMsICdnZXRUeFJlcXVlc3QnKTtcbiAgICAgIGdldFR4UmVxdWVzdC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgZ2V0VHhSZXF1ZXN0LmNhbGxlZFdpdGgodHhSZXF1ZXN0SWQpO1xuXG4gICAgICBjb25zdCBzaWduZWRUeFJlcXVlc3QgPSBhd2FpdCB0c3NVdGlscy5zaWduVHhSZXF1ZXN0KHtcbiAgICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RJZCxcbiAgICAgICAgcHJ2OiBKU09OLnN0cmluZ2lmeSh2YWxpZFVzZXJTaWduaW5nTWF0ZXJpYWwpLFxuICAgICAgICByZXFJZCxcbiAgICAgIH0pO1xuICAgICAgc2lnbmVkVHhSZXF1ZXN0LnVuc2lnbmVkVHhzLnNob3VsZC5kZWVwRXF1YWwodHhSZXF1ZXN0LnVuc2lnbmVkVHhzKTtcblxuICAgICAgc2FuZGJveC52ZXJpZnlBbmRSZXN0b3JlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZTonLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhSZXF1ZXN0SWQgPSAncmFuZG9taWQtYWJjJztcbiAgICBjb25zdCBtZXNzYWdlUmF3ID0gJ2hlbGxvIHdvcmxkJztcbiAgICBjb25zdCBtZXNzYWdlRW5jb2RlZCA9IEJ1ZmZlci5mcm9tKGAke21lc3NhZ2VSYXd9YCkudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IGJ1ZmZlclRvU2lnbiA9IEJ1ZmZlci5mcm9tKG1lc3NhZ2VFbmNvZGVkLCAnaGV4Jyk7XG4gICAgY29uc3QgdHhSZXF1ZXN0OiBUeFJlcXVlc3QgPSB7XG4gICAgICB0eFJlcXVlc3RJZCxcbiAgICAgIHRyYW5zYWN0aW9uczogW10sXG4gICAgICBtZXNzYWdlczogW1xuICAgICAgICB7XG4gICAgICAgICAgc3RhdGU6ICdwZW5kaW5nU2lnbmF0dXJlJyxcbiAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFtdLFxuICAgICAgICAgIG1lc3NhZ2VSYXcsXG4gICAgICAgICAgbWVzc2FnZUVuY29kZWQsXG4gICAgICAgICAgZGVyaXZhdGlvblBhdGg6ICdtLzAnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHVuc2lnbmVkVHhzOiBbXSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGludGVudDoge1xuICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICB9LFxuICAgICAgbGF0ZXN0OiB0cnVlLFxuICAgICAgc3RhdGU6ICdwZW5kaW5nVXNlclNpZ25hdHVyZScsXG4gICAgICB3YWxsZXRUeXBlOiAnaG90JyxcbiAgICAgIHdhbGxldElkOiAnd2FsbGV0SWQnLFxuICAgICAgcG9saWNpZXNDaGVja2VkOiB0cnVlLFxuICAgICAgdmVyc2lvbjogMSxcbiAgICAgIHVzZXJJZDogJ3VzZXJJZCcsXG4gICAgICBhcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgfTtcblxuICAgIGJlZm9yZUVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgclNoYXJlID0gdmFsaWRVc2VyU2lnblNoYXJlLnJTaGFyZXNbM107XG4gICAgICBjb25zdCBzaWduYXR1cmVTaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSB7XG4gICAgICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgICAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgICAgICBzaGFyZTogclNoYXJlLnIgKyByU2hhcmUuUixcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IG5vY2tTZW5kU2lnbmF0dXJlU2hhcmUoe1xuICAgICAgICB3YWxsZXRJZDogd2FsbGV0LmlkKCksXG4gICAgICAgIHR4UmVxdWVzdElkOiB0eFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICAgIHNpZ25hdHVyZVNoYXJlLFxuICAgICAgICByZXF1ZXN0VHlwZTogUmVxdWVzdFR5cGUubWVzc2FnZSxcbiAgICAgICAgYXBpTW9kZTogJ2Z1bGwnLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHNpZ25hdHVyZVNoYXJlMjogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSB7XG4gICAgICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgICAgICBzaGFyZTogdmFsaWRCaXRnb1RvVXNlclNpZ25TaGFyZS5yU2hhcmVzWzFdLnIgKyB2YWxpZEJpdGdvVG9Vc2VyU2lnblNoYXJlLnJTaGFyZXNbMV0uUixcbiAgICAgIH07XG4gICAgICB0eFJlcXVlc3QubWVzc2FnZXMhWzBdLnNpZ25hdHVyZVNoYXJlcy5wdXNoKHNpZ25hdHVyZVNoYXJlMik7XG4gICAgICBjb25zdCByZXNwb25zZSA9IHsgdHhSZXF1ZXN0czogW3sgLi4udHhSZXF1ZXN0LCBhcGlWZXJzaW9uOiAnZnVsbCcgfV0gfTtcbiAgICAgIGF3YWl0IG5vY2tHZXRUeFJlcXVlc3QoeyB3YWxsZXRJZDogd2FsbGV0LmlkKCksIHR4UmVxdWVzdElkOiB0eFJlcXVlc3QudHhSZXF1ZXN0SWQsIHJlc3BvbnNlIH0pO1xuXG4gICAgICBjb25zdCBiaXRnb1RvVXNlckNvbW1pdG1lbnRTaGFyZTogQ29tbWl0bWVudFNoYXJlUmVjb3JkID0ge1xuICAgICAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgdHlwZTogQ29tbWl0bWVudFR5cGUuQ09NTUlUTUVOVCxcbiAgICAgICAgc2hhcmU6IHZhbGlkQml0Z29Ub1VzZXJTaWduU2hhcmUuclNoYXJlc1sxXS5jb21taXRtZW50LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4Y2hhbmdlQ29tbWl0UmVzcG9uc2U6IEV4Y2hhbmdlQ29tbWl0bWVudFJlc3BvbnNlID0geyBjb21taXRtZW50U2hhcmU6IGJpdGdvVG9Vc2VyQ29tbWl0bWVudFNoYXJlIH07XG4gICAgICBhd2FpdCBub2NrRXhjaGFuZ2VDb21taXRtZW50cyh7XG4gICAgICAgIHdhbGxldElkOiB3YWxsZXQuaWQoKSxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IHR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgICAgcmVzcG9uc2U6IGV4Y2hhbmdlQ29tbWl0UmVzcG9uc2UsXG4gICAgICAgIGFwaU1vZGU6ICdmdWxsJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHR4UmVxdWVzdC5tZXNzYWdlcyFbMF0uc2lnbmF0dXJlU2hhcmVzID0gW107XG4gICAgfSk7XG5cbiAgICBpdCgnc2lnblR4UmVxdWVzdCBzaG91bGQgc3VjY2VlZCB3aXRoIHR4UmVxdWVzdCBvYmplY3QgYXMgaW5wdXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzaWduZWRUeFJlcXVlc3QgPSBhd2FpdCB0c3NVdGlscy5zaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZSh7XG4gICAgICAgIG1lc3NhZ2VSYXcsXG4gICAgICAgIGJ1ZmZlclRvU2lnbixcbiAgICAgICAgdHhSZXF1ZXN0LFxuICAgICAgICBwcnY6IEpTT04uc3RyaW5naWZ5KHZhbGlkVXNlclNpZ25pbmdNYXRlcmlhbCksXG4gICAgICAgIHJlcUlkLFxuICAgICAgfSk7XG4gICAgICBzaWduZWRUeFJlcXVlc3QubWVzc2FnZXMhLnNob3VsZC5kZWVwRXF1YWwodHhSZXF1ZXN0Lm1lc3NhZ2VzKTtcblxuICAgICAgc2FuZGJveC52ZXJpZnlBbmRSZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2lnblR4UmVxdWVzdCBzaG91bGQgc3VjY2VlZCB3aXRoIHR4UmVxdWVzdCBpZCBhcyBpbnB1dCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGdldFR4UmVxdWVzdCA9IHNhbmRib3guc3R1Yih0c3NVdGlscywgJ2dldFR4UmVxdWVzdCcpO1xuICAgICAgZ2V0VHhSZXF1ZXN0LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICBnZXRUeFJlcXVlc3QuY2FsbGVkV2l0aCh0eFJlcXVlc3RJZCk7XG5cbiAgICAgIGNvbnN0IHNpZ25lZFR4UmVxdWVzdCA9IGF3YWl0IHRzc1V0aWxzLnNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlKHtcbiAgICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RJZCxcbiAgICAgICAgcHJ2OiBKU09OLnN0cmluZ2lmeSh2YWxpZFVzZXJTaWduaW5nTWF0ZXJpYWwpLFxuICAgICAgICByZXFJZCxcbiAgICAgICAgbWVzc2FnZVJhdyxcbiAgICAgICAgYnVmZmVyVG9TaWduLFxuICAgICAgfSk7XG4gICAgICBzaWduZWRUeFJlcXVlc3QubWVzc2FnZXMhLnNob3VsZC5kZWVwRXF1YWwodHhSZXF1ZXN0Lm1lc3NhZ2VzKTtcblxuICAgICAgc2FuZGJveC52ZXJpZnlBbmRSZXN0b3JlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwcmVidWlsZFR4V2l0aEludGVudDonLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBidWlsZCBzaW5nbGUgcmVjaXBpZW50IHR4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgbm9ja2VkQ3JlYXRlVHggPSBhd2FpdCBub2NrQ3JlYXRlVHhSZXF1ZXN0KHtcbiAgICAgICAgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLFxuICAgICAgICByZXF1ZXN0Qm9keToge1xuICAgICAgICAgIGFwaVZlcnNpb246ICdsaXRlJyxcbiAgICAgICAgICBpbnRlbnQ6IHtcbiAgICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgICAgICAgIGFkZHJlc3M6ICdyZWNpcGllbnQnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYW1vdW50OiB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZTogJzEwMDAwJyxcbiAgICAgICAgICAgICAgICAgIHN5bWJvbDogJ3Rzb2wnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIC8vIGRvbid0IGNhcmUgYWJvdXQgdGhlIGFjdHVhbCByZXNwb25zZSAtIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgcmVxdWVzdCBib2R5IG1hdGNoZXNcbiAgICAgICAgcmVzcG9uc2U6IHt9LFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHRzc1V0aWxzLnByZWJ1aWxkVHhXaXRoSW50ZW50KHtcbiAgICAgICAgcmVxSWQsXG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAncmVjaXBpZW50JyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICB9KTtcblxuICAgICAgbm9ja2VkQ3JlYXRlVHguaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgbXVsdGlwbGUgcmVjaXBpZW50cyB3aXRoIG1lbW8gdHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBub2NrZWRDcmVhdGVUeCA9IGF3YWl0IG5vY2tDcmVhdGVUeFJlcXVlc3Qoe1xuICAgICAgICB3YWxsZXRJZDogd2FsbGV0LmlkKCksXG4gICAgICAgIHJlcXVlc3RCb2R5OiB7XG4gICAgICAgICAgYXBpVmVyc2lvbjogJ2xpdGUnLFxuICAgICAgICAgIGludGVudDoge1xuICAgICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgICAgICAgICAgYWRkcmVzczogJ3JlY2lwaWVudDEnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYW1vdW50OiB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZTogJzEwMDAwJyxcbiAgICAgICAgICAgICAgICAgIHN5bWJvbDogJ3Rzb2wnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgICAgICAgICBhZGRyZXNzOiAncmVjaXBpZW50MicsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhbW91bnQ6IHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiAnMjAwMDAnLFxuICAgICAgICAgICAgICAgICAgc3ltYm9sOiAndHNvbCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtZW1vOiAnbWVtbycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gZG9uJ3QgY2FyZSBhYm91dCB0aGUgYWN0dWFsIHJlc3BvbnNlIC0ganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSByZXF1ZXN0IGJvZHkgbWF0Y2hlc1xuICAgICAgICByZXNwb25zZToge30sXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgdHNzVXRpbHMucHJlYnVpbGRUeFdpdGhJbnRlbnQoe1xuICAgICAgICByZXFJZCxcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICdyZWNpcGllbnQxJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICdyZWNpcGllbnQyJyxcbiAgICAgICAgICAgIGFtb3VudDogJzIwMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgdmFsdWU6ICdtZW1vJyxcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIH0sXG4gICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgIH0pO1xuXG4gICAgICBub2NrZWRDcmVhdGVUeC5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZGVsZXRlIFNpZ25hdHVyZVNoYXJlOicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gZGVsZXRlIFNpZ25hdHVyZSBTaGFyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZVNoYXJlID0geyBmcm9tOiAndXNlcicsIHRvOiAnYml0Z28nLCBzaGFyZTogJzEyOGJ5dGVzdHJpbmcnIH0gYXMgU2lnbmF0dXJlU2hhcmVSZWNvcmQ7XG4gICAgICBjb25zdCBub2NrID0gYXdhaXQgbm9ja0RlbGV0ZVNpZ25hdHVyZVNoYXJlKHtcbiAgICAgICAgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLFxuICAgICAgICB0eFJlcXVlc3RJZDogdHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgICBzaWduYXR1cmVTaGFyZSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0c3NVdGlscy5kZWxldGVTaWduYXR1cmVTaGFyZXModHhSZXF1ZXN0LnR4UmVxdWVzdElkKTtcbiAgICAgIHJlc3BvbnNlLnNob3VsZC5kZWVwRXF1YWwoW3NpZ25hdHVyZVNoYXJlXSk7XG4gICAgICByZXNwb25zZS5zaG91bGQubGVuZ3RoKDEpO1xuICAgICAgbm9jay5pc0RvbmUoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNhbGwgc2V0UmVxdWVzdFRyYWNlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZVNoYXJlID0geyBmcm9tOiAndXNlcicsIHRvOiAnYml0Z28nLCBzaGFyZTogJzEyOGJ5dGVzdHJpbmcnIH0gYXMgU2lnbmF0dXJlU2hhcmVSZWNvcmQ7XG4gICAgICBjb25zdCBub2NrID0gYXdhaXQgbm9ja0RlbGV0ZVNpZ25hdHVyZVNoYXJlKHtcbiAgICAgICAgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLFxuICAgICAgICB0eFJlcXVlc3RJZDogdHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgICBzaWduYXR1cmVTaGFyZSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVxSWQgPSBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICAgICAgY29uc3Qgc2V0UmVxdWVzdFRyYWNlclNweSA9IHNpbm9uLnNweShiaXRnbywgJ3NldFJlcXVlc3RUcmFjZXInKTtcbiAgICAgIHNldFJlcXVlc3RUcmFjZXJTcHkud2l0aEFyZ3MocmVxSWQpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0c3NVdGlscy5kZWxldGVTaWduYXR1cmVTaGFyZXModHhSZXF1ZXN0LnR4UmVxdWVzdElkLCByZXFJZCk7XG4gICAgICByZXNwb25zZS5zaG91bGQuZGVlcEVxdWFsKFtzaWduYXR1cmVTaGFyZV0pO1xuICAgICAgcmVzcG9uc2Uuc2hvdWxkLmxlbmd0aCgxKTtcbiAgICAgIG5vY2suaXNEb25lKCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2Uoc2V0UmVxdWVzdFRyYWNlclNweSk7XG4gICAgICBzZXRSZXF1ZXN0VHJhY2VyU3B5LnJlc3RvcmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NlbmRUeFJlcXVlc3Q6JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byBzZW5kIHR4IHJlcXVlc3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBub2NrID0gYXdhaXQgbm9ja1NlbmRUeFJlcXVlc3Qoe1xuICAgICAgICBjb2luOiBjb2luTmFtZSxcbiAgICAgICAgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLFxuICAgICAgICB0eFJlcXVlc3RJZDogdHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCB0c3NVdGlscy5zZW5kVHhSZXF1ZXN0KHR4UmVxdWVzdC50eFJlcXVlc3RJZCkuc2hvdWxkLmJlLmZ1bGZpbGxlZCgpO1xuICAgICAgbm9jay5pc0RvbmUoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNhbGwgc2V0UmVxdWVzdFRyYWNlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG5vY2sgPSBhd2FpdCBub2NrU2VuZFR4UmVxdWVzdCh7XG4gICAgICAgIGNvaW46IGNvaW5OYW1lLFxuICAgICAgICB3YWxsZXRJZDogd2FsbGV0LmlkKCksXG4gICAgICAgIHR4UmVxdWVzdElkOiB0eFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlcUlkID0gbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgICAgIGNvbnN0IHNldFJlcXVlc3RUcmFjZXJTcHkgPSBzaW5vbi5zcHkoYml0Z28sICdzZXRSZXF1ZXN0VHJhY2VyJyk7XG4gICAgICBzZXRSZXF1ZXN0VHJhY2VyU3B5LndpdGhBcmdzKHJlcUlkKTtcbiAgICAgIGF3YWl0IHRzc1V0aWxzLnNlbmRUeFJlcXVlc3QodHhSZXF1ZXN0LnR4UmVxdWVzdElkLCByZXFJZCkuc2hvdWxkLmJlLmZ1bGZpbGxlZCgpO1xuICAgICAgbm9jay5pc0RvbmUoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShzZXRSZXF1ZXN0VHJhY2VyU3B5KTtcbiAgICAgIHNldFJlcXVlc3RUcmFjZXJTcHkucmVzdG9yZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY3JlYXRlVXNlclRvQml0Z29Db21taXRtZW50U2hhcmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBjcmVhdGUgYSB2YWxpZCBjb21taXRtZW50U2hhcmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9ICdyYW5kb21zdHJpbmcnO1xuICAgICAgY29uc3QgdmFsaWRVc2VyVG9CaXRnb0NvbW1pdG1lbnRTaGFyZSA9IHtcbiAgICAgICAgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsXG4gICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICAgIHR5cGU6IENvbW1pdG1lbnRUeXBlLkNPTU1JVE1FTlQsXG4gICAgICAgIHNoYXJlOiB2YWx1ZSxcbiAgICAgIH07XG4gICAgICBjb25zdCBjb21taXRtZW50U2hhcmUgPSB0c3NVdGlscy5jcmVhdGVVc2VyVG9CaXRnb0NvbW1pdG1lbnRTaGFyZSh2YWx1ZSk7XG4gICAgICBjb21taXRtZW50U2hhcmUuc2hvdWxkLmRlZXBFcXVhbCh2YWxpZFVzZXJUb0JpdGdvQ29tbWl0bWVudFNoYXJlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NyZWF0ZVVzZXJUb0JpdGdvRW5jcnlwdGVkU2lnbmVyU2hhcmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBjcmVhdGUgYSB2YWxpZCBlbmNyeXB0ZWRTaWduZXJTaGFyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gJ3JhbmRvbXN0cmluZyc7XG4gICAgICBjb25zdCB2YWxpZFVzZXJUb0JpdGdvRW5jcnlwdGVkU2lnbmVyU2hhcmUgPSB7XG4gICAgICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgICAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgICAgICB0eXBlOiBFbmNyeXB0ZWRTaWduZXJTaGFyZVR5cGUuRU5DUllQVEVEX1NJR05FUl9TSEFSRSxcbiAgICAgICAgc2hhcmU6IHZhbHVlLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGVuY3J5cHRlZFNpZ25lclNoYXJlID0gdHNzVXRpbHMuY3JlYXRlVXNlclRvQml0Z29FbmNyeXB0ZWRTaWduZXJTaGFyZSh2YWx1ZSk7XG4gICAgICBlbmNyeXB0ZWRTaWduZXJTaGFyZS5zaG91bGQuZGVlcEVxdWFsKHZhbGlkVXNlclRvQml0Z29FbmNyeXB0ZWRTaWduZXJTaGFyZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzdXBwb3J0ZWRUeFJlcXVlc3RWZXJzaW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmdWxsIGZvciBjdXN0b2RpYWwgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGN1c3RvZGlhbFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2VDb2luLCB7IG11bHRpc2lnVHlwZTogJ3RzcycsIHR5cGU6ICdjdXN0b2RpYWwnIH0pO1xuICAgICAgY29uc3QgY3VzdG9kaWFsVHNzVXRpbHMgPSBuZXcgVHNzVXRpbHMoYml0Z28sIGJhc2VDb2luLCBjdXN0b2RpYWxXYWxsZXQpO1xuICAgICAgY3VzdG9kaWFsVHNzVXRpbHMuc3VwcG9ydGVkVHhSZXF1ZXN0VmVyc2lvbnMoKS5zaG91bGQuZGVlcEVxdWFsKFsnZnVsbCddKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmdWxsIGZvciBjb2xkIHdhbGxldHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjb2xkV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZUNvaW4sIHsgbXVsdGlzaWdUeXBlOiAndHNzJywgdHlwZTogJ2NvbGQnIH0pO1xuICAgICAgY29uc3QgY29sZFdhbGxldFRzc1V0aWxzID0gbmV3IFRzc1V0aWxzKGJpdGdvLCBiYXNlQ29pbiwgY29sZFdhbGxldCk7XG4gICAgICBjb2xkV2FsbGV0VHNzVXRpbHMuc3VwcG9ydGVkVHhSZXF1ZXN0VmVyc2lvbnMoKS5zaG91bGQuZGVlcEVxdWFsKFsnZnVsbCddKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmdWxsIGFuZCBsaXRlIGZvciBob3Qgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGhvdFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2VDb2luLCB7XG4gICAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgICAgIG11bHRpc2lnVHlwZVZlcnNpb246IHVuZGVmaW5lZCxcbiAgICAgICAgdHlwZTogJ2hvdCcsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGhvdFRzc1V0aWxzID0gbmV3IFRzc1V0aWxzKGJpdGdvLCBiYXNlQ29pbiwgaG90V2FsbGV0KTtcbiAgICAgIGNvbnN0IHN1cHBvcnRlZFR4UmVxdWVzdFZlcnNpb25zID0gaG90VHNzVXRpbHMuc3VwcG9ydGVkVHhSZXF1ZXN0VmVyc2lvbnMoKTtcbiAgICAgIHN1cHBvcnRlZFR4UmVxdWVzdFZlcnNpb25zLnNob3VsZC5kZWVwRXF1YWwoWydsaXRlJywgJ2Z1bGwnXSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gb25seSBmdWxsIGZvciBob3QgTVBDdjIgd2FsbGV0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGhvdE1QQ3YyV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZUNvaW4sIHtcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICAgICAgbXVsdGlzaWdUeXBlVmVyc2lvbjogJ01QQ3YyJyxcbiAgICAgICAgdHlwZTogJ2hvdCcsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG1wY3YyVHNzVXRpbHMgPSBuZXcgRUREU0FVdGlscy5FZGRzYU1QQ3YyVXRpbHMoYml0Z28sIGJhc2VDb2luLCBob3RNUEN2MldhbGxldCk7XG4gICAgICBtcGN2MlRzc1V0aWxzLnN1cHBvcnRlZFR4UmVxdWVzdFZlcnNpb25zKCkuc2hvdWxkLmRlZXBFcXVhbChbJ2Z1bGwnXSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZW1wdHkgZm9yIHRyYWRpbmcgd2FsbGV0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHRyYWRpbmdXYWxsZXRzID0gbmV3IFdhbGxldChiaXRnbywgYmFzZUNvaW4sIHsgbXVsdGlzaWdUeXBlOiAndHNzJywgdHlwZTogJ3RyYWRpbmcnIH0pO1xuICAgICAgY29uc3QgdHJhZGluZ1dhbGxldFRzc1V0aWxzID0gbmV3IFRzc1V0aWxzKGJpdGdvLCBiYXNlQ29pbiwgdHJhZGluZ1dhbGxldHMpO1xuICAgICAgY29uc3Qgc3VwcG9ydGVkVHhSZXF1ZXN0VmVyc2lvbnMgPSB0cmFkaW5nV2FsbGV0VHNzVXRpbHMuc3VwcG9ydGVkVHhSZXF1ZXN0VmVyc2lvbnMoKTtcbiAgICAgIHN1cHBvcnRlZFR4UmVxdWVzdFZlcnNpb25zLnNob3VsZC5kZWVwRXF1YWwoW10pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGVtcHR5IGZvciBub24tdHNzIHdhbGxldHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBub25Uc3NXYWxsZXREYXRhID0geyBjb2luOiAnYnRjJywgbXVsdGlzaWdUeXBlOiAnb25jaGFpbicgfTtcbiAgICAgIGNvbnN0IGJ0Y0NvaW4gPSBiaXRnby5jb2luKCd0YnRjJyk7XG4gICAgICBjb25zdCBub25Uc3NXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBidGNDb2luLCBub25Uc3NXYWxsZXREYXRhKTtcbiAgICAgIGNvbnN0IG5vblRzc1dhbGxldFRzc1V0aWxzID0gbmV3IFRzc1V0aWxzKGJpdGdvLCBidGNDb2luLCBub25Uc3NXYWxsZXQpO1xuICAgICAgbm9uVHNzV2FsbGV0VHNzVXRpbHMuc3VwcG9ydGVkVHhSZXF1ZXN0VmVyc2lvbnMoKS5zaG91bGQuZGVlcEVxdWFsKFtdKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzUGVuZGluZ0FwcHJvdmFsVHhSZXF1ZXN0RnVsbCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciBmdWxsIGFwaVZlcnNpb24gYW5kIHBlbmRpbmdBcHByb3ZhbCBzdGF0ZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICBzdGF0ZTogJ3BlbmRpbmdBcHByb3ZhbCcsXG4gICAgICB9IGFzIFR4UmVxdWVzdDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRzc1V0aWxzLmlzUGVuZGluZ0FwcHJvdmFsVHhSZXF1ZXN0RnVsbCh0eFJlcXVlc3QpO1xuICAgICAgcmVzdWx0LnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3Igbm9uLWZ1bGwgYXBpVmVyc2lvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbjogJ2xpdGUnLFxuICAgICAgICBzdGF0ZTogJ3BlbmRpbmdBcHByb3ZhbCcsXG4gICAgICB9IGFzIFR4UmVxdWVzdDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRzc1V0aWxzLmlzUGVuZGluZ0FwcHJvdmFsVHhSZXF1ZXN0RnVsbCh0eFJlcXVlc3QpO1xuICAgICAgcmVzdWx0LnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UgZm9yIG5vbi1wZW5kaW5nQXBwcm92YWwgc3RhdGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb246ICdmdWxsJyxcbiAgICAgICAgc3RhdGU6ICdwZW5kaW5nRGVsaXZlcnknLFxuICAgICAgfSBhcyBUeFJlcXVlc3Q7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0c3NVdGlscy5pc1BlbmRpbmdBcHByb3ZhbFR4UmVxdWVzdEZ1bGwodHhSZXF1ZXN0KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gI3JlZ2lvbiBOb2NrIGhlbHBlcnNcbiAgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVCaXRnb0tleWNoYWluKHBhcmFtczoge1xuICAgIGNvaW46IHN0cmluZztcbiAgICB1c2VyS2V5U2hhcmU6IEtleVNoYXJlO1xuICAgIGJhY2t1cEtleVNoYXJlOiBLZXlTaGFyZTtcbiAgICBiaXRnb0tleVNoYXJlOiBLZXlTaGFyZTtcbiAgICB1c2VyR3BnS2V5OiBvcGVucGdwLlNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz47XG4gICAgYmFja3VwR3BnS2V5OiBvcGVucGdwLlNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz47XG4gICAgYml0Z29HcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPjtcbiAgfSk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb25zdCBiaXRnb0NvbWJpbmVkID0gTVBDLmtleUNvbWJpbmUocGFyYW1zLmJpdGdvS2V5U2hhcmUudVNoYXJlLCBbXG4gICAgICBwYXJhbXMudXNlcktleVNoYXJlLnlTaGFyZXNbM10sXG4gICAgICBwYXJhbXMuYmFja3VwS2V5U2hhcmUueVNoYXJlc1szXSxcbiAgICBdKTtcbiAgICBjb25zdCB1c2VyR3BnS2V5QWN0dWFsID0gYXdhaXQgb3BlbnBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogcGFyYW1zLnVzZXJHcGdLZXkucHVibGljS2V5IH0pO1xuICAgIGNvbnN0IGJhY2t1cEdwZ0tleUFjdHVhbCA9IGF3YWl0IG9wZW5wZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IHBhcmFtcy5iYWNrdXBHcGdLZXkucHVibGljS2V5IH0pO1xuXG4gICAgY29uc3QgYml0Z29Ub1VzZXJNZXNzYWdlID0gYXdhaXQgb3BlbnBncC5jcmVhdGVNZXNzYWdlKHtcbiAgICAgIHRleHQ6IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgICBCdWZmZXIuZnJvbShwYXJhbXMuYml0Z29LZXlTaGFyZS55U2hhcmVzWzFdLnUsICdoZXgnKSxcbiAgICAgICAgQnVmZmVyLmZyb20ocGFyYW1zLmJpdGdvS2V5U2hhcmUueVNoYXJlc1sxXS5jaGFpbmNvZGUsICdoZXgnKSxcbiAgICAgIF0pLnRvU3RyaW5nKCdoZXgnKSxcbiAgICB9KTtcbiAgICBjb25zdCBlbmNyeXB0ZWRCaXRnb1RvVXNlck1lc3NhZ2UgPSBhd2FpdCBvcGVucGdwLmVuY3J5cHQoe1xuICAgICAgbWVzc2FnZTogYml0Z29Ub1VzZXJNZXNzYWdlLFxuICAgICAgZW5jcnlwdGlvbktleXM6IFt1c2VyR3BnS2V5QWN0dWFsLnRvUHVibGljKCldLFxuICAgICAgZm9ybWF0OiAnYXJtb3JlZCcsXG4gICAgfSk7XG5cbiAgICBjb25zdCBiaXRnb1RvQmFja3VwTWVzc2FnZSA9IGF3YWl0IG9wZW5wZ3AuY3JlYXRlTWVzc2FnZSh7XG4gICAgICB0ZXh0OiBCdWZmZXIuY29uY2F0KFtcbiAgICAgICAgQnVmZmVyLmZyb20ocGFyYW1zLmJpdGdvS2V5U2hhcmUueVNoYXJlc1syXS51LCAnaGV4JyksXG4gICAgICAgIEJ1ZmZlci5mcm9tKHBhcmFtcy5iaXRnb0tleVNoYXJlLnlTaGFyZXNbMl0uY2hhaW5jb2RlLCAnaGV4JyksXG4gICAgICBdKS50b1N0cmluZygnaGV4JyksXG4gICAgfSk7XG4gICAgY29uc3QgZW5jcnlwdGVkQml0Z29Ub0JhY2t1cE1lc3NhZ2UgPSBhd2FpdCBvcGVucGdwLmVuY3J5cHQoe1xuICAgICAgbWVzc2FnZTogYml0Z29Ub0JhY2t1cE1lc3NhZ2UsXG4gICAgICBlbmNyeXB0aW9uS2V5czogW2JhY2t1cEdwZ0tleUFjdHVhbC50b1B1YmxpYygpXSxcbiAgICAgIGZvcm1hdDogJ2FybW9yZWQnLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYml0Z29LZXljaGFpbjogS2V5Y2hhaW4gPSB7XG4gICAgICBpZDogJzMnLFxuICAgICAgcHViOiAnJyxcbiAgICAgIGNvbW1vbktleWNoYWluOiBiaXRnb0NvbWJpbmVkLnBTaGFyZS55ICsgYml0Z29Db21iaW5lZC5wU2hhcmUuY2hhaW5jb2RlLFxuICAgICAga2V5U2hhcmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmcm9tOiAnYml0Z28nLFxuICAgICAgICAgIHRvOiAndXNlcicsXG4gICAgICAgICAgcHVibGljU2hhcmU6IHBhcmFtcy5iaXRnb0tleVNoYXJlLnlTaGFyZXNbMV0ueSArIHBhcmFtcy5iaXRnb0tleVNoYXJlLnlTaGFyZXNbMV0uY2hhaW5jb2RlLFxuICAgICAgICAgIHByaXZhdGVTaGFyZTogZW5jcnlwdGVkQml0Z29Ub1VzZXJNZXNzYWdlLnRvU3RyaW5nKCksXG4gICAgICAgICAgdnNzUHJvb2Y6IHBhcmFtcy5iaXRnb0tleVNoYXJlLnlTaGFyZXNbMV0udixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZyb206ICdiaXRnbycsXG4gICAgICAgICAgdG86ICdiYWNrdXAnLFxuICAgICAgICAgIHB1YmxpY1NoYXJlOiBwYXJhbXMuYml0Z29LZXlTaGFyZS55U2hhcmVzWzJdLnkgKyBwYXJhbXMuYml0Z29LZXlTaGFyZS55U2hhcmVzWzJdLmNoYWluY29kZSxcbiAgICAgICAgICBwcml2YXRlU2hhcmU6IGVuY3J5cHRlZEJpdGdvVG9CYWNrdXBNZXNzYWdlLnRvU3RyaW5nKCksXG4gICAgICAgICAgdnNzUHJvb2Y6IHBhcmFtcy5iaXRnb0tleVNoYXJlLnlTaGFyZXNbMl0udixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB0eXBlOiAndHNzJyxcbiAgICB9O1xuXG4gICAgY29uc3QgdXNlcktleUlkID0gdXNlckdwZ0tleUFjdHVhbC5rZXlQYWNrZXQuZ2V0RmluZ2VycHJpbnQoKTtcbiAgICBjb25zdCBiYWNrdXBLZXlJZCA9IGJhY2t1cEdwZ0tleUFjdHVhbC5rZXlQYWNrZXQuZ2V0RmluZ2VycHJpbnQoKTtcbiAgICBjb25zdCBiaXRnb1RvVXNlclB1YmxpY1NoYXJlID1cbiAgICAgIEJ1ZmZlci5mcm9tKFxuICAgICAgICBhd2FpdCBzb2RpdW0uY3J5cHRvX3NjYWxhcm11bHRfZWQyNTUxOV9iYXNlX25vY2xhbXAoQnVmZmVyLmZyb20ocGFyYW1zLmJpdGdvS2V5U2hhcmUueVNoYXJlc1sxXS51LCAnaGV4JykpXG4gICAgICApLnRvU3RyaW5nKCdoZXgnKSArIHBhcmFtcy5iaXRnb0tleVNoYXJlLnlTaGFyZXNbMV0uY2hhaW5jb2RlO1xuICAgIGNvbnN0IGJpdGdvVG9CYWNrdXBQdWJsaWNTaGFyZSA9XG4gICAgICBCdWZmZXIuZnJvbShcbiAgICAgICAgYXdhaXQgc29kaXVtLmNyeXB0b19zY2FsYXJtdWx0X2VkMjU1MTlfYmFzZV9ub2NsYW1wKEJ1ZmZlci5mcm9tKHBhcmFtcy5iaXRnb0tleVNoYXJlLnlTaGFyZXNbMl0udSwgJ2hleCcpKVxuICAgICAgKS50b1N0cmluZygnaGV4JykgKyBwYXJhbXMuYml0Z29LZXlTaGFyZS55U2hhcmVzWzJdLmNoYWluY29kZTtcblxuICAgIGJpdGdvS2V5Y2hhaW4ud2FsbGV0SFNNR1BHUHVibGljS2V5U2lncyA9IGF3YWl0IGNyZWF0ZVdhbGxldFNpZ25hdHVyZXMoXG4gICAgICBwYXJhbXMuYml0Z29HcGdLZXkucHJpdmF0ZUtleSxcbiAgICAgIHBhcmFtcy51c2VyR3BnS2V5LnB1YmxpY0tleSxcbiAgICAgIHBhcmFtcy5iYWNrdXBHcGdLZXkucHVibGljS2V5LFxuICAgICAgW1xuICAgICAgICB7IG5hbWU6ICdjb21tb25LZXljaGFpbicsIHZhbHVlOiBiaXRnb0NvbWJpbmVkLnBTaGFyZS55ICsgYml0Z29Db21iaW5lZC5wU2hhcmUuY2hhaW5jb2RlIH0sXG4gICAgICAgIHsgbmFtZTogJ3VzZXJLZXlJZCcsIHZhbHVlOiB1c2VyS2V5SWQgfSxcbiAgICAgICAgeyBuYW1lOiAnYmFja3VwS2V5SWQnLCB2YWx1ZTogYmFja3VwS2V5SWQgfSxcbiAgICAgICAgeyBuYW1lOiAnYml0Z29Ub1VzZXJQdWJsaWNTaGFyZScsIHZhbHVlOiBiaXRnb1RvVXNlclB1YmxpY1NoYXJlIH0sXG4gICAgICAgIHsgbmFtZTogJ2JpdGdvVG9CYWNrdXBQdWJsaWNTaGFyZScsIHZhbHVlOiBiaXRnb1RvQmFja3VwUHVibGljU2hhcmUgfSxcbiAgICAgIF1cbiAgICApO1xuXG4gICAgcmV0dXJuIGJpdGdvS2V5Y2hhaW47XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBub2NrQml0Z29LZXljaGFpbihwYXJhbXM6IHtcbiAgICBjb2luOiBzdHJpbmc7XG4gICAgdXNlcktleVNoYXJlOiBLZXlTaGFyZTtcbiAgICBiYWNrdXBLZXlTaGFyZTogS2V5U2hhcmU7XG4gICAgYml0Z29LZXlTaGFyZTogS2V5U2hhcmU7XG4gICAgdXNlckdwZ0tleTogb3BlbnBncC5TZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+O1xuICAgIGJhY2t1cEdwZ0tleTogb3BlbnBncC5TZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+O1xuICAgIGJpdGdvR3BnS2V5OiBvcGVucGdwLlNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz47XG4gIH0pOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgY29uc3QgYml0Z29LZXljaGFpbiA9IGF3YWl0IGdlbmVyYXRlQml0Z29LZXljaGFpbihwYXJhbXMpO1xuXG4gICAgbm9jayhiZ1VybClcbiAgICAgIC5wb3N0KGAvYXBpL3YyLyR7cGFyYW1zLmNvaW59L2tleWAsIF8ubWF0Y2hlcyh7IGtleVR5cGU6ICd0c3MnLCBzb3VyY2U6ICdiaXRnbycgfSkpXG4gICAgICAucmVwbHkoMjAwLCBiaXRnb0tleWNoYWluKTtcblxuICAgIHJldHVybiBiaXRnb0tleWNoYWluO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gbm9ja1VzZXJLZXljaGFpbihwYXJhbXM6IHsgY29pbjogc3RyaW5nIH0pOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgY29uc3QgdXNlcktleWNoYWluOiBLZXljaGFpbiA9IHtcbiAgICAgIGlkOiAnMScsXG4gICAgICBwdWI6ICcnLFxuICAgICAgdHlwZTogJ3RzcycsXG4gICAgfTtcblxuICAgIG5vY2soJ2h0dHBzOi8vYml0Z28uZmFrZXVybCcpXG4gICAgICAucG9zdChgL2FwaS92Mi8ke3BhcmFtcy5jb2lufS9rZXlgLCBfLm1hdGNoZXMoeyBrZXlUeXBlOiAndHNzJywgc291cmNlOiAndXNlcicgfSkpXG4gICAgICAucmVwbHkoMjAwLCB1c2VyS2V5Y2hhaW4pO1xuXG4gICAgcmV0dXJuIHVzZXJLZXljaGFpbjtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIG5vY2tCYWNrdXBLZXljaGFpbihwYXJhbXM6IHsgY29pbjogc3RyaW5nIH0pOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgY29uc3QgYmFja3VwS2V5Y2hhaW46IEtleWNoYWluID0ge1xuICAgICAgaWQ6ICcyJyxcbiAgICAgIHB1YjogJycsXG4gICAgICB0eXBlOiAndHNzJyxcbiAgICB9O1xuXG4gICAgbm9jaygnaHR0cHM6Ly9iaXRnby5mYWtldXJsJylcbiAgICAgIC5wb3N0KGAvYXBpL3YyLyR7cGFyYW1zLmNvaW59L2tleWAsIF8ubWF0Y2hlcyh7IGtleVR5cGU6ICd0c3MnLCBzb3VyY2U6ICdiYWNrdXAnIH0pKVxuICAgICAgLnJlcGx5KDIwMCwgYmFja3VwS2V5Y2hhaW4pO1xuXG4gICAgcmV0dXJuIGJhY2t1cEtleWNoYWluO1xuICB9XG5cbiAgZGVzY3JpYmUoJ2dldFB1YmxpY0tleUZyb21Db21tb25LZXljaGFpbicsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyAzMi1ieXRlIGVkMjU1MTkgcHVibGljIGtleSBhcyBoZXggKDY0IGNoYXJzKSArIDMyLWJ5dGUgY2hhaW5jb2RlICg2NCBjaGFycykgPSAxMjggY2hhcnNcbiAgICBjb25zdCBwdWJIZXggPSAnYTMwNDczM2MxNmNjODIxZmUxNzFkNWM3ZGJkNzI3NmZkOTBkZWFlODA4Yjc1NTNkMTdhMWU1NWU0YTc2YjI3MCc7XG4gICAgY29uc3QgY2hhaW5jb2RlID0gJzlkOTFjMmU2MzUzMjAyY2Y2MWY4ZjI3NTE1OGIzNDY4ZTlhMDBmNzg3MmZjMmZkMzEwYjcyY2QwMjZlMmUyZjknO1xuICAgIGNvbnN0IGNvbW1vbktleWNoYWluID0gcHViSGV4ICsgY2hhaW5jb2RlO1xuXG4gICAgaXQoJ3Nob3VsZCBkZWNvZGUgdGhlIDMyLWJ5dGUgcHVibGljIGtleSBmcm9tIGEgMTI4LWNoYXIgY29tbW9uS2V5Y2hhaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb21tb25LZXljaGFpbi5sZW5ndGguc2hvdWxkLmVxdWFsKDEyOCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBUc3NVdGlscy5nZXRQdWJsaWNLZXlGcm9tQ29tbW9uS2V5Y2hhaW4oY29tbW9uS2V5Y2hhaW4pO1xuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbCgnQnlNUGVWeHM3ZTh6R2VjdThuMU00M01xOXFreEJTeXBOTndIZUV1Mk42dmInKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIGFuIGludmFsaWQgY29tbW9uS2V5Y2hhaW4gbGVuZ3RoJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2hvdWxkLnRocm93cyhcbiAgICAgICAgKCkgPT4gVHNzVXRpbHMuZ2V0UHVibGljS2V5RnJvbUNvbW1vbktleWNoYWluKCdhYmNkJyksXG4gICAgICAgIC9JbnZhbGlkIGNvbW1vbktleWNoYWluIGxlbmd0aCwgZXhwZWN0ZWQgMTI4LCBnb3QgNC9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRCaXRnb0dwZ1B1YmtleUJhc2VkT25GZWF0dXJlRmxhZ3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZWRkc2FNcGN2MlB1YmxpY0tleSB3aGVuIHByZXNlbnQgaW4gZmVhdHVyZSBmbGFncyByZXNwb25zZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGVkMjU1MTlLZXlQYWlyID0gYXdhaXQgb3BlbnBncC5nZW5lcmF0ZUtleSh7XG4gICAgICAgIHVzZXJJRHM6IFt7IG5hbWU6ICdiaXRnbyBlZGRzYScsIGVtYWlsOiAnYml0Z29AdGVzdC5jb20nIH1dLFxuICAgICAgICBjdXJ2ZTogJ2VkMjU1MTknLFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZXNwb25zZTogQml0Z29HUEdQdWJsaWNLZXkgPSB7XG4gICAgICAgIG5hbWU6ICdpcnJlbGV2YW50JyxcbiAgICAgICAgcHVibGljS2V5OiBlZDI1NTE5S2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgIG1wY3YyUHVibGljS2V5OiBlZDI1NTE5S2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgIGVkZHNhTXBjdjJQdWJsaWNLZXk6IGVkMjU1MTlLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgZW50ZXJwcmlzZUlkOiAnZW50ZXJwcmlzZV9pZCcsXG4gICAgICB9O1xuICAgICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7Y29pbk5hbWV9L3Rzcy9wdWJrZXlgKS5xdWVyeSh7IGVudGVycHJpc2VJZDogJ2VudGVycHJpc2VfaWQnIH0pLnJlcGx5KDIwMCwgcmVzcG9uc2UpO1xuICAgICAgY29uc3QgeyBlZGRzYU1wY3YyUHVibGljS2V5IH0gPSBhd2FpdCB0c3NVdGlscy5nZXRCaXRnb0dwZ1B1YmtleUJhc2VkT25GZWF0dXJlRmxhZ3MoJ2VudGVycHJpc2VfaWQnKTtcbiAgICAgIHNob3VsZC5leGlzdChlZGRzYU1wY3YyUHVibGljS2V5KTtcbiAgICAgIHNob3VsZC5lcXVhbChlZDI1NTE5S2V5UGFpci5wdWJsaWNLZXksIGVkZHNhTXBjdjJQdWJsaWNLZXkhLmFybW9yKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdW5kZWZpbmVkIGVkZHNhTXBjdjJQdWJsaWNLZXkgd2hlbiBhYnNlbnQgZnJvbSBmZWF0dXJlIGZsYWdzIHJlc3BvbnNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5UGFpciA9IGF3YWl0IG9wZW5wZ3AuZ2VuZXJhdGVLZXkoe1xuICAgICAgICB1c2VySURzOiBbeyBuYW1lOiAnYml0Z28nLCBlbWFpbDogJ2JpdGdvQHRlc3QuY29tJyB9XSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVzcG9uc2U6IEJpdGdvR1BHUHVibGljS2V5ID0ge1xuICAgICAgICBuYW1lOiAnaXJyZWxldmFudCcsXG4gICAgICAgIHB1YmxpY0tleToga2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgIG1wY3YyUHVibGljS2V5OiBrZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgZW50ZXJwcmlzZUlkOiAnZW50ZXJwcmlzZV9pZCcsXG4gICAgICB9O1xuICAgICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7Y29pbk5hbWV9L3Rzcy9wdWJrZXlgKS5xdWVyeSh7IGVudGVycHJpc2VJZDogJ2VudGVycHJpc2VfaWQnIH0pLnJlcGx5KDIwMCwgcmVzcG9uc2UpO1xuICAgICAgY29uc3QgeyBlZGRzYU1wY3YyUHVibGljS2V5IH0gPSBhd2FpdCB0c3NVdGlscy5nZXRCaXRnb0dwZ1B1YmtleUJhc2VkT25GZWF0dXJlRmxhZ3MoJ2VudGVycHJpc2VfaWQnKTtcbiAgICAgIHNob3VsZC5ub3QuZXhpc3QoZWRkc2FNcGN2MlB1YmxpY0tleSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vICNlbmRyZWdpb24gTm9jayBoZWxwZXJzXG59KTtcbiJdfQ==
|
|
1288
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3YyL3VuaXQvaW50ZXJuYWwvdHNzVXRpbHMvZWRkc2EudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpQ0FBaUM7QUFDakMsa0RBQWtEO0FBQ2xELDRCQUE0QjtBQUM1Qiw2QkFBOEI7QUFDOUIsbUNBQW1DO0FBQ25DLGlDQUFrQztBQUNsQywrQkFBK0I7QUFFL0IsbURBQTZEO0FBQzdELDRDQUEyQztBQUMzQyxtREFzQjhCO0FBQzlCLCtDQUEyRDtBQUMzRCxxQ0FPa0I7QUFFbEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUV4QyxRQUFRLENBQUMsWUFBWSxFQUFFLEtBQUs7SUFDMUIsSUFBSSxPQUEyQixDQUFDO0lBQ2hDLElBQUksR0FBVSxDQUFDO0lBQ2YsSUFBSSxLQUFhLENBQUM7SUFDbEIsSUFBSSxRQUFrQixDQUFDO0lBQ3ZCLElBQUksVUFBVSxDQUFDO0lBQ2YsSUFBSSxZQUFZLENBQUM7SUFDakIsSUFBSSxXQUFXLENBQUM7SUFDaEIsSUFBSSxLQUF5QixDQUFDO0lBQzlCLElBQUksUUFBa0IsQ0FBQztJQUN2QixJQUFJLE1BQWMsQ0FBQztJQUNuQixJQUFJLGFBQWEsQ0FBQztJQUNsQixNQUFNLEtBQUssR0FBRyxJQUFJLHdCQUFhLEVBQUUsQ0FBQztJQUNsQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUM7SUFDeEIsTUFBTSx3QkFBd0IsR0FBRztRQUMvQixNQUFNLEVBQUU7WUFDTixDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxDQUFDO1lBQ0osQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsa0VBQWtFO1lBQ3JFLElBQUksRUFBRSxrRUFBa0U7WUFDeEUsU0FBUyxFQUFFLGtFQUFrRTtTQUM5RTtRQUNELGVBQWUsRUFBRSxrRUFBa0U7UUFDbkYsV0FBVyxF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Q0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLFFBQVEsYUFBYSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNoSCxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxvQ0FBb0MsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNyRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCwwQkFBMEI7QUFDNUIsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHNvZGl1bSBmcm9tICdsaWJzb2RpdW0td3JhcHBlcnMtc3Vtbyc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbm9jayA9IHJlcXVpcmUoJ25vY2snKTtcbmltcG9ydCAqIGFzIG9wZW5wZ3AgZnJvbSAnb3BlbnBncCc7XG5pbXBvcnQgc2hvdWxkID0gcmVxdWlyZSgnc2hvdWxkJyk7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5cbmltcG9ydCB7IFRlc3RhYmxlQkcsIFRlc3RCaXRHbyB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay10ZXN0JztcbmltcG9ydCB7IEJpdEdvIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7XG4gIEFkZEtleWNoYWluT3B0aW9ucyxcbiAgQmFzZUNvaW4sXG4gIEJpdGdvR1BHUHVibGljS2V5LFxuICBDb21taXRtZW50U2hhcmVSZWNvcmQsXG4gIENvbW1pdG1lbnRUeXBlLFxuICBjb21tb24sXG4gIGNyZWF0ZVNoYXJlZERhdGFQcm9vZixcbiAgRWQyNTUxOUJJUDMyLFxuICBFRERTQVV0aWxzLFxuICBFZGRzYSxcbiAgRW5jcnlwdGVkU2lnbmVyU2hhcmVUeXBlLFxuICBFeGNoYW5nZUNvbW1pdG1lbnRSZXNwb25zZSxcbiAgS2V5Y2hhaW4sXG4gIEtleVNoYXJlLFxuICBSZXF1ZXN0VHJhY2VyLFxuICBSZXF1ZXN0VHlwZSxcbiAgU2lnbmF0dXJlU2hhcmVSZWNvcmQsXG4gIFNpZ25hdHVyZVNoYXJlVHlwZSxcbiAgVHNzVXRpbHMsXG4gIFR4UmVxdWVzdCxcbiAgV2FsbGV0LFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBjcmVhdGVXYWxsZXRTaWduYXR1cmVzIH0gZnJvbSAnLi4vLi4vdHNzL2hlbHBlcnMnO1xuaW1wb3J0IHtcbiAgbm9ja0NyZWF0ZVR4UmVxdWVzdCxcbiAgbm9ja0RlbGV0ZVNpZ25hdHVyZVNoYXJlLFxuICBub2NrRXhjaGFuZ2VDb21taXRtZW50cyxcbiAgbm9ja0dldFR4UmVxdWVzdCxcbiAgbm9ja1NlbmRTaWduYXR1cmVTaGFyZSxcbiAgbm9ja1NlbmRUeFJlcXVlc3QsXG59IGZyb20gJy4vY29tbW9uJztcblxub3BlbnBncC5jb25maWcucmVqZWN0Q3VydmVzID0gbmV3IFNldCgpO1xuXG5kZXNjcmliZSgnVFNTIFV0aWxzOicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgbGV0IHNhbmRib3g6IHNpbm9uLlNpbm9uU2FuZGJveDtcbiAgbGV0IE1QQzogRWRkc2E7XG4gIGxldCBiZ1VybDogc3RyaW5nO1xuICBsZXQgdHNzVXRpbHM6IFRzc1V0aWxzO1xuICBsZXQgdXNlckdwZ0tleTtcbiAgbGV0IGJhY2t1cEdwZ0tleTtcbiAgbGV0IGJpdGdvR3BnS2V5O1xuICBsZXQgYml0Z286IFRlc3RhYmxlQkcgJiBCaXRHbztcbiAgbGV0IGJhc2VDb2luOiBCYXNlQ29pbjtcbiAgbGV0IHdhbGxldDogV2FsbGV0O1xuICBsZXQgYml0Z29LZXlTaGFyZTtcbiAgY29uc3QgcmVxSWQgPSBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICBjb25zdCBjb2luTmFtZSA9ICd0c29sJztcbiAgY29uc3QgdmFsaWRVc2VyU2lnbmluZ01hdGVyaWFsID0ge1xuICAgIHVTaGFyZToge1xuICAgICAgaTogMSxcbiAgICAgIHQ6IDIsXG4gICAgICBuOiAzLFxuICAgICAgeTogJzA5M2M4NjAzYWQ4NmM0MWQ1ZWUyNWE4MTRiODgxODViNDM1ZGQzYTljZWNjZjljOWZkNjkxYTQ2NWFjNGE4YjAnLFxuICAgICAgc2VlZDogJ2NhNDBjNzg5ODEzMjUwYzMzNGRkZDJiYTE5MDUwZjZlZDIwYjVhMDg4NTNjZWNhNDkyMzU4ZjI3MTFhZDRiMTUnLFxuICAgICAgY2hhaW5jb2RlOiAnNTk2ZDU0MDRhN2ViOTE4ZWU3ODI0N2I5NTJkMDY1Mzk2MTk4ODQwOTFmZGQ5ZTBmZjVhNjY1ZjM0OWUzMmZjYScsXG4gICAgfSxcbiAgICBjb21tb25DaGFpbmNvZGU6ICc1OTZkNTQwNGE3ZWI5MThlZTc4MjQ3Yjk1MmQwNjUzOTYxOTg4NDA5MWZkZDllMGZmNWE2NjVmMzQ5ZTMyZmNhJyxcbiAgICBiaXRnb1lTaGFyZToge1xuICAgICAgaTogMSxcbiAgICAgIGo6IDMsXG4gICAgICB5OiAnNTlkODAwMGJhNWU4NWZhNDAyZjM5MzgyOTYwZTdkNWVkZTgyYjFiNmUyMmIxNDZhMThiN2RmMjM4YzNhMzIyNScsXG4gICAgICB2OiAnMDFlYTNmNDI1YjFhZGY4YWVjNmNmZTRmYzhmOWI5NDc1NWMzNDY1Nzk2NWYzMjM5NzY1NWRjZDc4NGYxYjUxNycsXG4gICAgICB1OiAnOWNlMzIwNGE4Yzk3NTc3Mzg5NjdmM2Y4MWI0NjNkODcyNjdiZjZmMmMwZTVlYWYyODQzMTY3NTM3Yjg3MmIwYicsXG4gICAgICBjaGFpbmNvZGU6ICdkMjFkYmQ4ZWFlNWQ0Nzg5MjkyZWNlYTJlZmE1M2UwMTY1YjI0MzlkNTdmNTE1OGViNGRkNTdkYzI2YjU5MjM2JyxcbiAgICB9LFxuICAgIGJhY2t1cFlTaGFyZToge1xuICAgICAgaTogMSxcbiAgICAgIGo6IDIsXG4gICAgICB5OiAnZTBhZTc1MDc3NzE1Njg2YTEyMWFjYjQxYjI5YTU1YmRlNDI2OTcxMTU0ZjQwYTQxZmMzMTdmN2Y3NzRhOTQyNCcsXG4gICAgICB2OiAnZjc2ZWY2MjlkZmMxNWFiNWU0NTMxZTUzMmI1ZDY3ZjIxNzY2MzdjYTc1MmIxOTU4NzZiN2UzMTcyNDU5Yzk2OScsXG4gICAgICB1OiAnZmU2Yjg5ZmI2YWNmY2Q3MzkyYzM1YzA4NGY1OGJkZTA4NDZiODg4YzRkZjU3ZTQ2NmNhZjBhMzI3MWIwNmEwNScsXG4gICAgICBjaGFpbmNvZGU6ICcxYzM0ZTVkZmJiZDRhODcwZjQ0NzljYWFhNWU2YTQ2ZTM0MzhmOTc2YWQ1YWVmZDQ5MDViOGZlOGJjYTExMDFlJyxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IHZhbGlkVXNlclNpZ25TaGFyZSA9IHtcbiAgICB4U2hhcmU6IHtcbiAgICAgIGk6IDEsXG4gICAgICB5OiAnNGQ5MzQzOTg4ZTY4MTkxYWFjOTQ1YTY5NjMwMzFkZGRkZTM0OTBmOTAyMGQwNTcxYTZlNmM2ZTE1Y2NhMDI5NicsXG4gICAgICB1OiAnMWUxNTlkNmEwYWUzYThkY2NjNzQ2MTUxMTNlN2MzZTI1ZDMwODBlNWUwZmZlYjBhZTA0ZGQ2YTk2NzI2ODEwMicsXG4gICAgICByOiAnYzhmNjRjYzQ4OTI2MjE2YzNmNjBlMWQ4ZmYxZTI0ZWJhMDYwZDdjMWZmMDIwZDBmYzFkNzM1ZDQ1NjRlZmQwMycsXG4gICAgICBSOiAnOWJlMjIwOGVlMjhjZDRiMjU3N2E5YTY2ZjZhYWIxZWQ4YjA4YTMwMDk2OWVlYjliMjAzYTUyYWE1NGQyYzIzYycsXG4gICAgfSxcbiAgICByU2hhcmVzOiB7XG4gICAgICAzOiB7XG4gICAgICAgIGk6IDMsXG4gICAgICAgIGo6IDEsXG4gICAgICAgIHU6ICdkNjc1ZjkwOTlmYmVmMDNhYTlmY2RjYTQwMDkyODZmNDM1ZTU2MzY5YzM3NGQwMDQyZjAzY2M2MGI0OWU2OTBhJyxcbiAgICAgICAgdjogJzNjMDkwZTg4ZWQ0MmRhMGRkMGJhZGUzNWM4ZDZiODhiYzA1MDI4NDUzNmI5OGU1YjI3ZDMzZmY0NWRhOTc1NWInLFxuICAgICAgICByOiAnN2YxNjIyNGRiZjViMDJhZGI2YzIxMzgwZmNiMmE4ZWUwMDMyM2RhYWU2MmNhYzM1NzVhNGQzMjhmZDIzYTkwNScsXG4gICAgICAgIFI6ICc5YmUyMjA4ZWUyOGNkNGIyNTc3YTlhNjZmNmFhYjFlZDhiMDhhMzAwOTY5ZWViOWIyMDNhNTJhYTU0ZDJjMjNjJyxcbiAgICAgICAgY29tbWl0bWVudDogJzQ0NWM4Y2IxZGVlMDE2NmI2YmRkNWFkMWQwYTUzZmJmZTg2YzRkM2E0NzBmMTg0NzQ1NTMwYTg2M2VlZGZmMjgnLFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IHZhbGlkQml0Z29Ub1VzZXJTaWduU2hhcmUgPSB7XG4gICAgeFNoYXJlOiB7XG4gICAgICBpOiAzLFxuICAgICAgeTogJzRkOTM0Mzk4OGU2ODE5MWFhYzk0NWE2OTYzMDMxZGRkZGUzNDkwZjkwMjBkMDU3MWE2ZTZjNmUxNWNjYTAyOTYnLFxuICAgICAgdTogJzEzMTVkYmUxODA2OTgyNWI0YTI3MTg4YjgxM2VhZTdmZjI5MTdhNjE0NDk5ZWQ1NTNlNzBkNjVkNGZhNDgyMGInLFxuICAgICAgcjogJ2QwNTM5Mzc1ZTY1NjZmMmZlNTQwY2JhNDhjNWU1NmJkMWNkZjY4Y2ZlMWYwZDUyN2QyYjczMGZlNGU4Nzk4MDknLFxuICAgICAgUjogJ2M4ODNmZTJhZTliOGRhMTc2NGNjMzZhNTI2Y2ZhMWEyMWY4MWQ2MDQzMjBiMjA5ODY3ZjhkZTkyMjNmMWRlMzInLFxuICAgIH0sXG4gICAgclNoYXJlczoge1xuICAgICAgMToge1xuICAgICAgICBpOiAxLFxuICAgICAgICBqOiAzLFxuICAgICAgICB1OiAnOWNlMzIwNGE4Yzk3NTc3Mzg5NjdmM2Y4MWI0NjNkODcyNjdiZjZmMmMwZTVlYWYyODQzMTY3NTM3Yjg3MmIwYicsXG4gICAgICAgIHY6ICcwMWVhM2Y0MjViMWFkZjhhZWM2Y2ZlNGZjOGY5Yjk0NzU1YzM0NjU3OTY1ZjMyMzk3NjU1ZGNkNzg0ZjFiNTE3JyxcbiAgICAgICAgcjogJzAzNzVlOGM1YTU2OTFhNzNjMjFkZjAwZDQ5ZDQyM2UzZjgzZmUwOGQ3YjVkNWFmMzNjNWM2YWE5Y2FlNTlkMGEnLFxuICAgICAgICBSOiAnYzg4M2ZlMmFlOWI4ZGExNzY0Y2MzNmE1MjZjZmExYTIxZjgxZDYwNDMyMGIyMDk4NjdmOGRlOTIyM2YxZGUzMicsXG4gICAgICAgIGNvbW1pdG1lbnQ6ICc2MmIyMWY5OGJmODg1ODQxYWQ0NjkxNDUxOTJkNGRmMDY5N2IzZjQyYzU4MWUzZTkyNjM5NGVhZTBiMTAxZWNiJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICBjb25zdCB0eFJlcXVlc3QgPSB7XG4gICAgdHhSZXF1ZXN0SWQ6ICdyYW5kb21JZCcsXG4gICAgdW5zaWduZWRUeHM6IFt7IHNpZ25hYmxlSGV4OiAnTVBDIG9uIGEgRnJpZGF5IG5pZ2h0Jywgc2VyaWFsaXplZFR4SGV4OiAnTVBDIG9uIGEgRnJpZGF5IG5pZ2h0JyB9XSxcbiAgICBzaWduYXR1cmVTaGFyZXM6IFtcbiAgICAgIHtcbiAgICAgICAgZnJvbTogJ2JpdGdvJyxcbiAgICAgICAgdG86ICd1c2VyJyxcbiAgICAgICAgc2hhcmU6IHZhbGlkQml0Z29Ub1VzZXJTaWduU2hhcmUuclNoYXJlc1sxXS5yICsgdmFsaWRCaXRnb1RvVXNlclNpZ25TaGFyZS5yU2hhcmVzWzFdLlIsXG4gICAgICB9LFxuICAgIF0sXG4gIH07XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2FuZGJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgYmVmb3JlKCdpbml0aWFsaXplcyBtcGMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaGRUcmVlID0gYXdhaXQgRWQyNTUxOUJJUDMyLmluaXRpYWxpemUoKTtcbiAgICBNUEMgPSBhd2FpdCBFZGRzYS5pbml0aWFsaXplKGhkVHJlZSk7XG4gIH0pO1xuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYml0Z29LZXlTaGFyZSA9IGF3YWl0IE1QQy5rZXlTaGFyZSgzLCAyLCAzKTtcblxuICAgIHVzZXJHcGdLZXkgPSBhd2FpdCBvcGVucGdwLmdlbmVyYXRlS2V5KHtcbiAgICAgIHVzZXJJRHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICd0ZXN0JyxcbiAgICAgICAgICBlbWFpbDogJ3Rlc3RAdGVzdC5jb20nLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGN1cnZlOiAnc2VjcDI1NmsxJyxcbiAgICB9KTtcblxuICAgIGJhY2t1cEdwZ0tleSA9IGF3YWl0IG9wZW5wZ3AuZ2VuZXJhdGVLZXkoe1xuICAgICAgdXNlcklEczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3Rlc3RCYWNrdXAnLFxuICAgICAgICAgIGVtYWlsOiAndGVzdEJhY2t1cEB0ZXN0LmNvbScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY3VydmU6ICdzZWNwMjU2azEnLFxuICAgIH0pO1xuXG4gICAgYml0Z29HcGdLZXkgPSBhd2FpdCBvcGVucGdwLmdlbmVyYXRlS2V5KHtcbiAgICAgIHVzZXJJRHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdiaXRnbycsXG4gICAgICAgICAgZW1haWw6ICdiaXRnb0B0ZXN0LmNvbScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY3VydmU6ICdzZWNwMjU2azEnLFxuICAgIH0pO1xuICAgIGNvbnN0IGNvbnN0YW50cyA9IHtcbiAgICAgIG1wYzoge1xuICAgICAgICBiaXRnb1B1YmxpY0tleTogYml0Z29HcGdLZXkucHVibGljS2V5LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R28sIHsgZW52OiAnbW9jaycgfSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG5cbiAgICBiYXNlQ29pbiA9IGJpdGdvLmNvaW4oY29pbk5hbWUpO1xuXG4gICAgYmdVcmwgPSBjb21tb24uRW52aXJvbm1lbnRzW2JpdGdvLmdldEVudigpXS51cmk7XG5cbiAgICAvLyBUT0RPKFdQLTM0Nik6IHNkay10ZXN0IG1vY2tzIGNvbmZsaWN0IHNvIHdlIGNhbid0IHVzZSBwZXJzaXN0XG4gICAgbm9jayhiZ1VybCkuZ2V0KCcvYXBpL3YxL2NsaWVudC9jb25zdGFudHMnKS50aW1lcygyMykucmVwbHkoMjAwLCB7IHR0bDogMzYwMCwgY29uc3RhbnRzIH0pO1xuXG4gICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDAnLFxuICAgICAgY29pbjogJ3Rzb2wnLFxuICAgICAga2V5czogW1xuICAgICAgICAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1MDAwMDAwMDAnLFxuICAgICAgICAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc2MDAwMDAwMDAnLFxuICAgICAgICAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc3MDAwMDAwMDAnLFxuICAgICAgXSxcbiAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgIH07XG4gICAgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZUNvaW4sIHdhbGxldERhdGEpO1xuICAgIHRzc1V0aWxzID0gbmV3IFRzc1V0aWxzKGJpdGdvLCBiYXNlQ29pbiwgd2FsbGV0KTtcbiAgfSk7XG5cbiAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RTUyBrZXkgY2hhaW5zOicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIFRTUyBrZXkgY2hhaW5zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlcktleVNoYXJlID0gTVBDLmtleVNoYXJlKDEsIDIsIDMpO1xuICAgICAgY29uc3QgYmFja3VwS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMiwgMiwgMyk7XG5cbiAgICAgIGNvbnN0IG5vY2tlZEJpdEdvS2V5Y2hhaW4gPSBhd2FpdCBub2NrQml0Z29LZXljaGFpbih7XG4gICAgICAgIGNvaW46IGNvaW5OYW1lLFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleVNoYXJlLFxuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIGJpdGdvR3BnS2V5LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBub2NrZWRVc2VyS2V5Y2hhaW4gPSBhd2FpdCBub2NrVXNlcktleWNoYWluKHsgY29pbjogY29pbk5hbWUgfSk7XG4gICAgICBhd2FpdCBub2NrQmFja3VwS2V5Y2hhaW4oeyBjb2luOiBjb2luTmFtZSB9KTtcblxuICAgICAgY29uc3QgYml0Z29LZXljaGFpbiA9IGF3YWl0IHRzc1V0aWxzLmNyZWF0ZUJpdGdvS2V5Y2hhaW4oe1xuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHVzZXJLZXljaGFpbiA9IGF3YWl0IHRzc1V0aWxzLmNyZWF0ZVVzZXJLZXljaGFpbih7XG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgICAgcGFzc3BocmFzZTogJ3Bhc3NwaHJhc2UnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBiYWNrdXBLZXljaGFpbiA9IGF3YWl0IHRzc1V0aWxzLmNyZWF0ZUJhY2t1cEtleWNoYWluKHtcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgICBwYXNzcGhyYXNlOiAncGFzc3BocmFzZScsXG4gICAgICB9KTtcblxuICAgICAgYml0Z29LZXljaGFpbi5zaG91bGQuZGVlcEVxdWFsKG5vY2tlZEJpdEdvS2V5Y2hhaW4pO1xuICAgICAgdXNlcktleWNoYWluLnNob3VsZC5kZWVwRXF1YWwobm9ja2VkVXNlcktleWNoYWluKTtcblxuICAgICAgLy8gdW5lbmNyeXB0ZWQgYHBydmAgcHJvcGVydHkgc2hvdWxkIGV4aXN0IG9uIGJhY2t1cCBrZXljaGFpblxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB1U2hhcmU6IGJhY2t1cEtleVNoYXJlLnVTaGFyZSxcbiAgICAgICAgYml0Z29ZU2hhcmU6IGJpdGdvS2V5U2hhcmUueVNoYXJlc1syXSxcbiAgICAgICAgdXNlcllTaGFyZTogdXNlcktleVNoYXJlLnlTaGFyZXNbMl0sXG4gICAgICB9KS5zaG91bGQuZXF1YWwoYmFja3VwS2V5Y2hhaW4ucHJ2KTtcbiAgICAgIHNob3VsZC5leGlzdChiYWNrdXBLZXljaGFpbi5lbmNyeXB0ZWRQcnYpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzZW5kIHdlYmF1dGhuSW5mbyAod2l0aCBlbnRlcnByaXNlSWQpIG9uIHRoZSB1c2VyIGtleWNoYWluIHdoZW4gd2ViYXV0aG5JbmZvIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlcktleVNoYXJlID0gTVBDLmtleVNoYXJlKDEsIDIsIDMpO1xuICAgICAgY29uc3QgYmFja3VwS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMiwgMiwgMyk7XG5cbiAgICAgIC8vIFJlYWwgY3J5cHRvIGRlcHMgKGNvbnN0YW50cyB3LyBiaXRnbyBncGcga2V5IGZvciB2ZXJpZnlXYWxsZXRTaWduYXR1cmVzICsgYml0Z28ga2V5Y2hhaW4pLFxuICAgICAgLy8gdGhlbiBjYXB0dXJlIHRoZSB1c2VyIGtleWNoYWluIGFkZCgpIHBhcmFtcyBieSBzdHViYmluZyBiYXNlQ29pbi5rZXljaGFpbnMoKS5cbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQoJy9hcGkvdjEvY2xpZW50L2NvbnN0YW50cycpXG4gICAgICAgIC50aW1lcygyMylcbiAgICAgICAgLnJlcGx5KDIwMCwgeyB0dGw6IDM2MDAsIGNvbnN0YW50czogeyBtcGM6IHsgYml0Z29QdWJsaWNLZXk6IGJpdGdvR3BnS2V5LnB1YmxpY0tleSB9IH0gfSk7XG4gICAgICBhd2FpdCBub2NrQml0Z29LZXljaGFpbih7XG4gICAgICAgIGNvaW46IGNvaW5OYW1lLFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleVNoYXJlLFxuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIGJpdGdvR3BnS2V5LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBiaXRnb0tleWNoYWluID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlQml0Z29LZXljaGFpbih7XG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBhZGRTdHViID0gc2FuZGJveC5zdHViKCkucmVzb2x2ZXMoeyBpZDogJzEnLCBwdWI6ICcnLCB0eXBlOiAndHNzJyB9KTtcbiAgICAgIHNhbmRib3guc3R1YihiYXNlQ29pbiwgJ2tleWNoYWlucycpLnJldHVybnMoeyBhZGQ6IGFkZFN0dWIgfSBhcyB1bmtub3duIGFzIFJldHVyblR5cGU8QmFzZUNvaW5bJ2tleWNoYWlucyddPik7XG5cbiAgICAgIGNvbnN0IGVudGVycHJpc2VJZCA9ICdlbnRlcnByaXNlX2lkJztcbiAgICAgIGNvbnN0IHdlYmF1dGhuSW5mbyA9IHsgb3RwRGV2aWNlSWQ6ICdkZXZpY2UtMTIzJywgcHJmU2FsdDogJ3NhbHQtYWJjJywgcGFzc3BocmFzZTogJ3ByZi1kZXJpdmVkLXBhc3NwaHJhc2UnIH07XG4gICAgICBhd2FpdCB0c3NVdGlscy5jcmVhdGVVc2VyS2V5Y2hhaW4oe1xuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICAgIHBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlJyxcbiAgICAgICAgd2ViYXV0aG5JbmZvLFxuICAgICAgICBlbnRlcnByaXNlOiBlbnRlcnByaXNlSWQsXG4gICAgICB9KTtcblxuICAgICAgLy8gVXNlciBrZXljaGFpbiBtdXN0IGNhcnJ5IHdlYmF1dGhuSW5mbyAodGhlIGZpZWxkIHRoZSBiYWNrZW5kIFBPU1QgL2tleSBjb25zdW1lcyksIGluY2x1ZGluZ1xuICAgICAgLy8gZW50ZXJwcmlzZUlkLCBhbmQgbXVzdCBOT1QgdXNlIHRoZSBkZXByZWNhdGVkIHdlYmF1dGhuRGV2aWNlcyBhcnJheS5cbiAgICAgIGFzc2VydC5vayhhZGRTdHViLmNhbGxlZE9uY2UsICdrZXljaGFpbnMoKS5hZGQgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgZm9yIHRoZSB1c2VyIGtleWNoYWluJyk7XG4gICAgICBjb25zdCBib2R5ID0gYWRkU3R1Yi5maXJzdENhbGwuYXJnc1swXSBhcyBBZGRLZXljaGFpbk9wdGlvbnM7XG4gICAgICBhc3NlcnQub2soYm9keS53ZWJhdXRobkluZm8sICd1c2VyIGtleWNoYWluIGJvZHkgc2hvdWxkIGluY2x1ZGUgd2ViYXV0aG5JbmZvJyk7XG4gICAgICBhc3NlcnQuZXF1YWwoYm9keS53ZWJhdXRobkluZm8ub3RwRGV2aWNlSWQsIHdlYmF1dGhuSW5mby5vdHBEZXZpY2VJZCk7XG4gICAgICBhc3NlcnQuZXF1YWwoYm9keS53ZWJhdXRobkluZm8ucHJmU2FsdCwgd2ViYXV0aG5JbmZvLnByZlNhbHQpO1xuICAgICAgYXNzZXJ0LmVxdWFsKGJvZHkud2ViYXV0aG5JbmZvLmVudGVycHJpc2VJZCwgZW50ZXJwcmlzZUlkKTtcbiAgICAgIGFzc2VydC5vayhib2R5LndlYmF1dGhuSW5mby5lbmNyeXB0ZWRQcnYsICdlbmNyeXB0ZWRQcnYgc2hvdWxkIGJlIHNldCcpO1xuICAgICAgYXNzZXJ0Lm9rKGF3YWl0IGJpdGdvLmRlY3J5cHQoeyBpbnB1dDogYm9keS53ZWJhdXRobkluZm8uZW5jcnlwdGVkUHJ2LCBwYXNzd29yZDogd2ViYXV0aG5JbmZvLnBhc3NwaHJhc2UgfSkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJvZHkud2ViYXV0aG5EZXZpY2VzLCB1bmRlZmluZWQsICdkZXByZWNhdGVkIHdlYmF1dGhuRGV2aWNlcyBzaG91bGQgbm90IGJlIHNlbnQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgVFNTIGtleSBjaGFpbnMgd2l0aG91dCBwYXNzcGhyYXNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlcktleVNoYXJlID0gTVBDLmtleVNoYXJlKDEsIDIsIDMpO1xuICAgICAgY29uc3QgYmFja3VwS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMiwgMiwgMyk7XG5cbiAgICAgIGNvbnN0IG5vY2tlZEJpdEdvS2V5Y2hhaW4gPSBhd2FpdCBub2NrQml0Z29LZXljaGFpbih7XG4gICAgICAgIGNvaW46IGNvaW5OYW1lLFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleVNoYXJlLFxuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICAvLyByZXVzaW5nIHRoZSB1c2VyIGdwZyBrZXkgYXMgdGhlIGJhY2t1cCBncGcga2V5LCBpLmUuIHRoZSB1c2VyIGlzIHRoZWlyIG93biB0aGUgYmFja3VwIHByb3ZpZGVyXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgYml0Z29HcGdLZXksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5vY2tlZFVzZXJLZXljaGFpbiA9IGF3YWl0IG5vY2tVc2VyS2V5Y2hhaW4oeyBjb2luOiBjb2luTmFtZSB9KTtcbiAgICAgIGF3YWl0IG5vY2tCYWNrdXBLZXljaGFpbih7IGNvaW46IGNvaW5OYW1lIH0pO1xuXG4gICAgICBjb25zdCBiaXRnb0tleWNoYWluID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlQml0Z29LZXljaGFpbih7XG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdXNlcktleWNoYWluID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlVXNlcktleWNoYWluKHtcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBiYWNrdXBLZXljaGFpbiA9IGF3YWl0IHRzc1V0aWxzLmNyZWF0ZUJhY2t1cEtleWNoYWluKHtcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgfSk7XG5cbiAgICAgIGJpdGdvS2V5Y2hhaW4uc2hvdWxkLmRlZXBFcXVhbChub2NrZWRCaXRHb0tleWNoYWluKTtcbiAgICAgIHVzZXJLZXljaGFpbi5zaG91bGQuZGVlcEVxdWFsKG5vY2tlZFVzZXJLZXljaGFpbik7XG5cbiAgICAgIC8vIHVuZW5jcnlwdGVkIGBwcnZgIHByb3BlcnR5IHNob3VsZCBleGlzdCBvbiBiYWNrdXAga2V5Y2hhaW5cbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgdVNoYXJlOiBiYWNrdXBLZXlTaGFyZS51U2hhcmUsXG4gICAgICAgIGJpdGdvWVNoYXJlOiBiaXRnb0tleVNoYXJlLnlTaGFyZXNbMl0sXG4gICAgICAgIHVzZXJZU2hhcmU6IHVzZXJLZXlTaGFyZS55U2hhcmVzWzJdLFxuICAgICAgfSkuc2hvdWxkLmVxdWFsKGJhY2t1cEtleWNoYWluLnBydik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIFRTUyBrZXkgY2hhaW5zIHdpdGggb3B0aW9uYWwgcGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZW50ZXJwcmlzZSA9ICdlbnRlcnByaXNlJztcblxuICAgICAgY29uc3QgdXNlcktleVNoYXJlID0gTVBDLmtleVNoYXJlKDEsIDIsIDMpO1xuICAgICAgY29uc3QgYmFja3VwS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMiwgMiwgMyk7XG5cbiAgICAgIGNvbnN0IG5vY2tlZEJpdEdvS2V5Y2hhaW4gPSBhd2FpdCBub2NrQml0Z29LZXljaGFpbih7XG4gICAgICAgIGNvaW46IGNvaW5OYW1lLFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleVNoYXJlLFxuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIGJpdGdvR3BnS2V5LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBub2NrZWRVc2VyS2V5Y2hhaW4gPSBhd2FpdCBub2NrVXNlcktleWNoYWluKHsgY29pbjogY29pbk5hbWUgfSk7XG4gICAgICBhd2FpdCBub2NrQmFja3VwS2V5Y2hhaW4oeyBjb2luOiBjb2luTmFtZSB9KTtcblxuICAgICAgY29uc3QgYml0Z29LZXljaGFpbiA9IGF3YWl0IHRzc1V0aWxzLmNyZWF0ZUJpdGdvS2V5Y2hhaW4oe1xuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGVudGVycHJpc2UsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHVzZXJLZXljaGFpbiA9IGF3YWl0IHRzc1V0aWxzLmNyZWF0ZVVzZXJLZXljaGFpbih7XG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgICAgcGFzc3BocmFzZTogJ3Bhc3NwaHJhc2UnLFxuICAgICAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBiYWNrdXBLZXljaGFpbiA9IGF3YWl0IHRzc1V0aWxzLmNyZWF0ZUJhY2t1cEtleWNoYWluKHtcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgICBwYXNzcGhyYXNlOiAncGFzc3BocmFzZScsXG4gICAgICB9KTtcblxuICAgICAgYml0Z29LZXljaGFpbi5zaG91bGQuZGVlcEVxdWFsKG5vY2tlZEJpdEdvS2V5Y2hhaW4pO1xuICAgICAgdXNlcktleWNoYWluLnNob3VsZC5kZWVwRXF1YWwobm9ja2VkVXNlcktleWNoYWluKTtcblxuICAgICAgLy8gdW5lbmNyeXB0ZWQgYHBydmAgcHJvcGVydHkgc2hvdWxkIGV4aXN0IG9uIGJhY2t1cCBrZXljaGFpblxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB1U2hhcmU6IGJhY2t1cEtleVNoYXJlLnVTaGFyZSxcbiAgICAgICAgYml0Z29ZU2hhcmU6IGJpdGdvS2V5U2hhcmUueVNoYXJlc1syXSxcbiAgICAgICAgdXNlcllTaGFyZTogdXNlcktleVNoYXJlLnlTaGFyZXNbMl0sXG4gICAgICB9KS5zaG91bGQuZXF1YWwoYmFja3VwS2V5Y2hhaW4ucHJ2KTtcbiAgICAgIHNob3VsZC5leGlzdChiYWNrdXBLZXljaGFpbi5lbmNyeXB0ZWRQcnYpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGdlbmVyYXRlIFRTUyBrZXljaGFpbnMgd2hlbiByZWNlaXZlZCBpbnZhbGlkIG51bWJlciBvZiB3YWxsZXQgc2lnbmF0dXJlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgxLCAyLCAzKTtcbiAgICAgIGNvbnN0IGJhY2t1cEtleVNoYXJlID0gTVBDLmtleVNoYXJlKDIsIDIsIDMpO1xuXG4gICAgICBjb25zdCBiaXRnb0tleWNoYWluID0gYXdhaXQgZ2VuZXJhdGVCaXRnb0tleWNoYWluKHtcbiAgICAgICAgY29pbjogY29pbk5hbWUsXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGJpdGdvS2V5U2hhcmUsXG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgYml0Z29HcGdLZXksXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY2VydHNTdHJpbmcgPSBhd2FpdCBjcmVhdGVTaGFyZWREYXRhUHJvb2YoYml0Z29HcGdLZXkucHJpdmF0ZUtleSwgdXNlckdwZ0tleS5wdWJsaWNLZXksIFtdKTtcbiAgICAgIGNvbnN0IGNlcnRzS2V5ID0gYXdhaXQgb3BlbnBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogY2VydHNTdHJpbmcgfSk7XG4gICAgICBjb25zdCBmaW5hbEtleSA9IG5ldyBvcGVucGdwLlBhY2tldExpc3QoKTtcbiAgICAgIGNlcnRzS2V5LnRvUGFja2V0TGlzdCgpLmZvckVhY2goKHBhY2tldCkgPT4gZmluYWxLZXkucHVzaChwYWNrZXQpKTtcbiAgICAgIC8vIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIG9ubHkgcmVxdWlyZXMgdHdvIGFyZ3VtZW50cyBidXQgdGhlIGFjY29yZGluZyAuZC50cyBmaWxlIGZvciBvcGVucGdwIGhhcyB0aGUgZnVydGhlclxuICAgICAgLy8gYXJndW1lbnRzIG1hcmtlZCBhcyBtYW5kYXRvcnkgYXMgd2VsbC5cbiAgICAgIC8vIE9uY2UgdGhlIGZvbGxvd2luZyBQUiBoYXMgYmVlbiBtZXJnZWQgYW5kIHJlbGVhc2VkIHdlIG5vIGxvbmdlciBuZWVkIHRoZSB0cy1pZ25vcmU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vb3BlbnBncGpzL29wZW5wZ3Bqcy9wdWxsLzE1NzZcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGJpdGdvS2V5Y2hhaW4ud2FsbGV0SFNNR1BHUHVibGljS2V5U2lncyA9IG9wZW5wZ3AuYXJtb3Iob3BlbnBncC5lbnVtcy5hcm1vci5wdWJsaWNLZXksIGZpbmFsS2V5LndyaXRlKCkpO1xuXG4gICAgICBhd2FpdCB0c3NVdGlsc1xuICAgICAgICAudmVyaWZ5V2FsbGV0U2lnbmF0dXJlcyh1c2VyR3BnS2V5LnB1YmxpY0tleSwgYmFja3VwR3BnS2V5LnB1YmxpY0tleSwgYml0Z29LZXljaGFpbiwgJycsIDEpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIHdhbGxldCBzaWduYXR1cmVzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gZ2VuZXJhdGUgVFNTIGtleWNoYWlucyB3aGVuIHdhbGxldCBzaWduYXR1cmUgZmluZ2VycHJpbnRzIGRvIG5vdCBtYXRjaCBwYXNzZWQgdXNlci9iYWNrdXAgZmluZ2VycHJpbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlcktleVNoYXJlID0gTVBDLmtleVNoYXJlKDEsIDIsIDMpO1xuICAgICAgY29uc3QgYmFja3VwS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMiwgMiwgMyk7XG5cbiAgICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW4gPSBhd2FpdCBnZW5lcmF0ZUJpdGdvS2V5Y2hhaW4oe1xuICAgICAgICBjb2luOiBjb2luTmFtZSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgYml0Z29LZXlTaGFyZSxcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICBiaXRnb0dwZ0tleSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyB1c2luZyB0aGUgYmFja3VwIGdwZyBoZXJlIGluc3RlYWQgb2YgdGhlIHVzZXIgZ3BnIGtleSB0byBzaW11bGF0ZSB0aGF0IHRoZSBmaXJzdCBzaWduYXR1cmUgaGFzIGEgZGlmZmVyZW50XG4gICAgICAvLyBmaW5nZXJwcmludCBmcm9tIHRoZSBwYXNzZWQgaW4gZmlyc3QgZ3BnIGtleVxuICAgICAgYXdhaXQgdHNzVXRpbHNcbiAgICAgICAgLnZlcmlmeVdhbGxldFNpZ25hdHVyZXMoYmFja3VwR3BnS2V5LnB1YmxpY0tleSwgYmFja3VwR3BnS2V5LnB1YmxpY0tleSwgYml0Z29LZXljaGFpbiwgJycsIDEpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgIGBmaXJzdCB3YWxsZXQgc2lnbmF0dXJlJ3MgZmluZ2VycHJpbnQgZG9lcyBub3QgbWF0Y2ggcGFzc2VkIHVzZXIgZ3BnIGtleSdzIGZpbmdlcnByaW50YFxuICAgICAgICApO1xuXG4gICAgICAvLyB1c2luZyB0aGUgdXNlciBncGcgaGVyZSBpbnN0ZWFkIG9mIHRoZSBiYWNrdXAgZ3BnIGtleSB0byBzaW11bGF0ZSB0aGF0IHRoZSBzZWNvbmQgc2lnbmF0dXJlIGhhcyBhIGRpZmZlcmVudFxuICAgICAgLy8gZmluZ2VycHJpbnQgZnJvbSB0aGUgcGFzc2VkIGluIHNlY29uZCBncGcga2V5XG4gICAgICBhd2FpdCB0c3NVdGlsc1xuICAgICAgICAudmVyaWZ5V2FsbGV0U2lnbmF0dXJlcyh1c2VyR3BnS2V5LnB1YmxpY0tleSwgdXNlckdwZ0tleS5wdWJsaWNLZXksIGJpdGdvS2V5Y2hhaW4sICcnLCAxKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICBgc2Vjb25kIHdhbGxldCBzaWduYXR1cmUncyBmaW5nZXJwcmludCBkb2VzIG5vdCBtYXRjaCBwYXNzZWQgYmFja3VwIGdwZyBrZXkncyBmaW5nZXJwcmludGBcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byBnZW5lcmF0ZSBUU1Mga2V5Y2hhaW5zIHdoZW4gd2FsbGV0IHNpZ25hdHVyZSBpcyBmb3IgZGlmZmVyZW50IGtleSBzaGFyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgxLCAyLCAzKTtcbiAgICAgIGNvbnN0IGJhY2t1cEtleVNoYXJlID0gTVBDLmtleVNoYXJlKDIsIDIsIDMpO1xuICAgICAgY29uc3QgY3VzdG9tQml0Z29LZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgzLCAyLCAzKTtcblxuICAgICAgY29uc3QgYml0Z29LZXljaGFpbjEgPSBhd2FpdCBnZW5lcmF0ZUJpdGdvS2V5Y2hhaW4oe1xuICAgICAgICBjb2luOiBjb2luTmFtZSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgYml0Z29LZXlTaGFyZSxcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICBiaXRnb0dwZ0tleSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYml0Z29LZXljaGFpbjIgPSBhd2FpdCBnZW5lcmF0ZUJpdGdvS2V5Y2hhaW4oe1xuICAgICAgICBjb2luOiBjb2luTmFtZSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgYml0Z29LZXlTaGFyZTogY3VzdG9tQml0Z29LZXlTaGFyZSxcbiAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICBiaXRnb0dwZ0tleSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyB1c2luZyB0aGUgb3RoZXIgYml0Z28ga2V5Y2hhaW5zIGNvbW1vbiBrZXljaGFpbiBhbmQgd2FsbGV0SFNNR1BHUHVibGljS2V5U2lncyBzbyB0aGF0IHRoZSB2ZXJpZmljYXRpb24gb2YgdGhlXG4gICAgICAvLyBjb21tbW9uIGtleWNoYWluIHBhc3NlcyBidXQgZmFpbHMgZm9yIHRoZSBiaXRnbyB0byB1c2VyLyBiYWNrdXAgc2hhcmVzXG4gICAgICBiaXRnb0tleWNoYWluMS5jb21tb25LZXljaGFpbiA9IGJpdGdvS2V5Y2hhaW4yLmNvbW1vbktleWNoYWluO1xuICAgICAgYml0Z29LZXljaGFpbjEud2FsbGV0SFNNR1BHUHVibGljS2V5U2lncyA9IGJpdGdvS2V5Y2hhaW4yLndhbGxldEhTTUdQR1B1YmxpY0tleVNpZ3M7XG5cbiAgICAgIGF3YWl0IHRzc1V0aWxzXG4gICAgICAgIC5jcmVhdGVVc2VyS2V5Y2hhaW4oe1xuICAgICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgICBiaXRnb0tleWNoYWluOiBiaXRnb0tleWNoYWluMSxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2JpdGdvIHNoYXJlIG1pc21hdGNoJyk7XG5cbiAgICAgIGF3YWl0IHRzc1V0aWxzXG4gICAgICAgIC5jcmVhdGVCYWNrdXBLZXljaGFpbih7XG4gICAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICAgIGJpdGdvS2V5Y2hhaW46IGJpdGdvS2V5Y2hhaW4xLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnYml0Z28gc2hhcmUgbWlzbWF0Y2gnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byBnZW5lcmF0ZSBUU1Mga2V5IGNoYWlucyB3aGVuIGNvbW1vbiBrZXljaGFpbnMgZG8gbm90IG1hdGNoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlcktleVNoYXJlID0gTVBDLmtleVNoYXJlKDEsIDIsIDMpO1xuICAgICAgY29uc3QgYmFja3VwS2V5U2hhcmUgPSBNUEMua2V5U2hhcmUoMiwgMiwgMyk7XG5cbiAgICAgIGNvbnN0IG5vY2tlZEJpdEdvS2V5Y2hhaW4gPSBhd2FpdCBub2NrQml0Z29LZXljaGFpbih7XG4gICAgICAgIGNvaW46IGNvaW5OYW1lLFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleVNoYXJlLFxuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIGJpdGdvR3BnS2V5LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBiaXRnb0tleWNoYWluID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlQml0Z29LZXljaGFpbih7XG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgIH0pO1xuICAgICAgYml0Z29LZXljaGFpbi5zaG91bGQuZGVlcEVxdWFsKG5vY2tlZEJpdEdvS2V5Y2hhaW4pO1xuXG4gICAgICBhd2FpdCB0c3NVdGlsc1xuICAgICAgICAuY3JlYXRlVXNlcktleWNoYWluKHtcbiAgICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgICAgYmFja3VwS2V5U2hhcmU6IE1QQy5rZXlTaGFyZSgyLCAyLCAzKSxcbiAgICAgICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgICAgIHBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlJyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ZhaWxlZCB0byBjcmVhdGUgdXNlciBrZXljaGFpbiAtIGNvbW1vbktleWNoYWlucyBkbyBub3QgbWF0Y2guJyk7XG4gICAgICBhd2FpdCB0c3NVdGlsc1xuICAgICAgICAuY3JlYXRlVXNlcktleWNoYWluKHtcbiAgICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgICB1c2VyS2V5U2hhcmU6IE1QQy5rZXlTaGFyZSgxLCAyLCAzKSxcbiAgICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgICAgIHBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlJyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ZhaWxlZCB0byBjcmVhdGUgdXNlciBrZXljaGFpbiAtIGNvbW1vbktleWNoYWlucyBkbyBub3QgbWF0Y2guJyk7XG5cbiAgICAgIGF3YWl0IHRzc1V0aWxzXG4gICAgICAgIC5jcmVhdGVCYWNrdXBLZXljaGFpbih7XG4gICAgICAgICAgdXNlckdwZ0tleSxcbiAgICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgICAgdXNlcktleVNoYXJlOiBNUEMua2V5U2hhcmUoMSwgMiwgMyksXG4gICAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgICAgICBwYXNzcGhyYXNlOiAncGFzc3BocmFzZScsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdGYWlsZWQgdG8gY3JlYXRlIGJhY2t1cCBrZXljaGFpbiAtIGNvbW1vbktleWNoYWlucyBkbyBub3QgbWF0Y2guJyk7XG4gICAgICBhd2FpdCB0c3NVdGlsc1xuICAgICAgICAuY3JlYXRlQmFja3VwS2V5Y2hhaW4oe1xuICAgICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgICBiYWNrdXBLZXlTaGFyZTogTVBDLmtleVNoYXJlKDIsIDIsIDMpLFxuICAgICAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICAgICAgcGFzc3BocmFzZTogJ3Bhc3NwaHJhc2UnLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnRmFpbGVkIHRvIGNyZWF0ZSBiYWNrdXAga2V5Y2hhaW4gLSBjb21tb25LZXljaGFpbnMgZG8gbm90IG1hdGNoLicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBUU1Mga2V5IGNoYWlucyB3aXRoIHYyIGVuY3J5cHRpb24gZW52ZWxvcGVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFzc3BocmFzZSA9ICdwYXNzcGhyYXNlJztcbiAgICAgIGNvbnN0IHVzZXJLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgxLCAyLCAzKTtcbiAgICAgIGNvbnN0IGJhY2t1cEtleVNoYXJlID0gTVBDLmtleVNoYXJlKDIsIDIsIDMpO1xuXG4gICAgICBhd2FpdCBub2NrQml0Z29LZXljaGFpbih7XG4gICAgICAgIGNvaW46IGNvaW5OYW1lLFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBiaXRnb0tleVNoYXJlLFxuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIGJpdGdvR3BnS2V5LFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBub2NrVXNlcktleWNoYWluKHsgY29pbjogY29pbk5hbWUgfSk7XG4gICAgICBhd2FpdCBub2NrQmFja3VwS2V5Y2hhaW4oeyBjb2luOiBjb2luTmFtZSB9KTtcblxuICAgICAgY29uc3QgYml0Z29LZXljaGFpbiA9IGF3YWl0IHRzc1V0aWxzLmNyZWF0ZUJpdGdvS2V5Y2hhaW4oe1xuICAgICAgICB1c2VyR3BnS2V5LFxuICAgICAgICBiYWNrdXBHcGdLZXksXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHVzZXJLZXljaGFpbiA9IGF3YWl0IHRzc1V0aWxzLmNyZWF0ZVVzZXJLZXljaGFpbih7XG4gICAgICAgIHVzZXJHcGdLZXksXG4gICAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgICAgcGFzc3BocmFzZSxcbiAgICAgICAgZW5jcnlwdGlvblZlcnNpb246IDIsXG4gICAgICB9KTtcblxuICAgICAgc2hvdWxkLmV4aXN0KHVzZXJLZXljaGFpbi5lbmNyeXB0ZWRQcnYpO1xuICAgICAgY29uc3QgZW52ZWxvcGUgPSBKU09OLnBhcnNlKHVzZXJLZXljaGFpbi5lbmNyeXB0ZWRQcnYhKTtcbiAgICAgIGVudmVsb3BlLnYuc2hvdWxkLmVxdWFsKDIpO1xuXG4gICAgICBjb25zdCBkZWNyeXB0ZWQgPSBhd2FpdCBiaXRnby5kZWNyeXB0KHsgaW5wdXQ6IHVzZXJLZXljaGFpbi5lbmNyeXB0ZWRQcnYhLCBwYXNzd29yZDogcGFzc3BocmFzZSB9KTtcbiAgICAgIHNob3VsZC5leGlzdChkZWNyeXB0ZWQpO1xuICAgICAgY29uc3QgcGFyc2VkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IEpTT04ucGFyc2UoZGVjcnlwdGVkKTtcbiAgICAgIHNob3VsZC5leGlzdChwYXJzZWQudVNoYXJlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3YyIGVuY3J5cHRpb24gKEVkRFNBIHNpZ25pbmcgZGlzcGF0Y2gpJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNpZ25pbmdUeFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgIHR4UmVxdWVzdElkOiAndjItc2lnbmluZy10ZXN0JyxcbiAgICAgIHVuc2lnbmVkVHhzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6ICd0ZXN0LXBheWxvYWQnLFxuICAgICAgICAgIHNpZ25hYmxlSGV4OiAnZGVhZGJlZWYnLFxuICAgICAgICAgIGRlcml2YXRpb25QYXRoOiAnbS8wJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ3BheW1lbnQnIH0sXG4gICAgICBsYXRlc3Q6IHRydWUsXG4gICAgICBzdGF0ZTogJ3BlbmRpbmdVc2VyU2lnbmF0dXJlJyxcbiAgICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgICAgd2FsbGV0SWQ6ICd3YWxsZXRJZCcsXG4gICAgICBwb2xpY2llc0NoZWNrZWQ6IHRydWUsXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgdXNlcklkOiAndXNlcklkJyxcbiAgICB9O1xuXG4gICAgaXQoJ3YyIFItc2hhcmUgcm91bmQtdHJpcDogZW5jcnlwdCB2aWEgY29tbWl0bWVudCwgdmVyaWZ5IGVudmVsb3BlLCBkZWNyeXB0IHZpYSBjcmVhdGVSU2hhcmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXNzcGhyYXNlID0gJ3Rlc3QtcGFzc3BocmFzZSc7XG4gICAgICBjb25zdCBwcnYgPSBKU09OLnN0cmluZ2lmeSh2YWxpZFVzZXJTaWduaW5nTWF0ZXJpYWwpO1xuXG4gICAgICAvLyAxLiBFbmNyeXB0IHBydiB3aXRoIHYyXG4gICAgICBjb25zdCBlbmNyeXB0ZWRQcnYgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHtcbiAgICAgICAgaW5wdXQ6IHBydixcbiAgICAgICAgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsXG4gICAgICAgIGVuY3J5cHRpb25WZXJzaW9uOiAyLFxuICAgICAgfSk7XG4gICAgICBKU09OLnBhcnNlKGVuY3J5cHRlZFBydikudi5zaG91bGQuZXF1YWwoMik7XG5cbiAgICAgIC8vIDIuIENyZWF0ZSBjb21taXRtZW50IC0tIFItc2hhcmUgc2hvdWxkIGJlIGEgdjIgZW52ZWxvcGVcbiAgICAgIGNvbnN0IGNvbW1pdFJlc3VsdCA9IGF3YWl0IHRzc1V0aWxzLmNyZWF0ZUNvbW1pdG1lbnRTaGFyZUZyb21UeFJlcXVlc3Qoe1xuICAgICAgICB0eFJlcXVlc3Q6IHNpZ25pbmdUeFJlcXVlc3QsXG4gICAgICAgIHBydixcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgYml0Z29HcGdQdWJLZXk6IGJpdGdvR3BnS2V5LnB1YmxpY0tleSxcbiAgICAgICAgZW5jcnlwdGVkUHJ2LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJTaGFyZUVudmVsb3BlID0gSlNPTi5wYXJzZShjb21taXRSZXN1bHQuZW5jcnlwdGVkVXNlclRvQml0Z29SU2hhcmUuc2hhcmUpO1xuICAgICAgclNoYXJlRW52ZWxvcGUudi5zaG91bGQuZXF1YWwoMik7XG4gICAgICByU2hhcmVFbnZlbG9wZS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaGtkZlNhbHQnKTtcblxuICAgICAgLy8gMy4gUm91bmQtdHJpcDogZGVjcnlwdCB0aGUgdjIgUi1zaGFyZVxuICAgICAgY29uc3QgeyByU2hhcmUgfSA9IGF3YWl0IHRzc1V0aWxzLmNyZWF0ZVJTaGFyZUZyb21UeFJlcXVlc3Qoe1xuICAgICAgICB0eFJlcXVlc3Q6IHNpZ25pbmdUeFJlcXVlc3QsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIGVuY3J5cHRlZFVzZXJUb0JpdGdvUlNoYXJlOiBjb21taXRSZXN1bHQuZW5jcnlwdGVkVXNlclRvQml0Z29SU2hhcmUsXG4gICAgICB9KTtcblxuICAgICAgc2hvdWxkLmV4aXN0KHJTaGFyZS54U2hhcmUpO1xuICAgICAgc2hvdWxkLmV4aXN0KHJTaGFyZS5yU2hhcmVzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NpZ25UeFJlcXVlc3Q6JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4UmVxdWVzdElkID0gJ3JhbmRvbWlkJztcbiAgICBjb25zdCB0eFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICAgIHVuc2lnbmVkVHhzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6ICdNUEMgb24gYSBGcmlkYXkgbmlnaHQnLFxuICAgICAgICAgIHNpZ25hYmxlSGV4OiAnTVBDIG9uIGEgRnJpZGF5IG5pZ2h0JyxcbiAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgaW50ZW50OiB7XG4gICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgIH0sXG4gICAgICBsYXRlc3Q6IHRydWUsXG4gICAgICBzdGF0ZTogJ3BlbmRpbmdVc2VyU2lnbmF0dXJlJyxcbiAgICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgICAgd2FsbGV0SWQ6ICd3YWxsZXRJZCcsXG4gICAgICBwb2xpY2llc0NoZWNrZWQ6IHRydWUsXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgdXNlcklkOiAndXNlcklkJyxcbiAgICB9O1xuXG4gICAgYmVmb3JlRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VyU2lnblNoYXJlID0gdmFsaWRVc2VyU2lnblNoYXJlO1xuICAgICAgY29uc3QgclNoYXJlID0gdXNlclNpZ25TaGFyZS5yU2hhcmVzWzNdO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlU2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0ge1xuICAgICAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgc2hhcmU6IHJTaGFyZS5yICsgclNoYXJlLlIsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBub2NrU2VuZFNpZ25hdHVyZVNoYXJlKHtcbiAgICAgICAgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLFxuICAgICAgICB0eFJlcXVlc3RJZDogdHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgICBzaWduYXR1cmVTaGFyZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzaWduYXR1cmVTaGFyZTI6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0ge1xuICAgICAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgc2hhcmU6IHZhbGlkQml0Z29Ub1VzZXJTaWduU2hhcmUuclNoYXJlc1sxXS5yICsgdmFsaWRCaXRnb1RvVXNlclNpZ25TaGFyZS5yU2hhcmVzWzFdLlIsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7IHR4UmVxdWVzdHM6IFt7IC4uLnR4UmVxdWVzdCwgc2lnbmF0dXJlU2hhcmVzOiBbc2lnbmF0dXJlU2hhcmUyXSB9XSB9O1xuICAgICAgYXdhaXQgbm9ja0dldFR4UmVxdWVzdCh7IHdhbGxldElkOiB3YWxsZXQuaWQoKSwgdHhSZXF1ZXN0SWQ6IHR4UmVxdWVzdC50eFJlcXVlc3RJZCwgcmVzcG9uc2UgfSk7XG5cbiAgICAgIGNvbnN0IGJpdGdvVG9Vc2VyQ29tbWl0bWVudFNoYXJlOiBDb21taXRtZW50U2hhcmVSZWNvcmQgPSB7XG4gICAgICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgICAgICB0eXBlOiBDb21taXRtZW50VHlwZS5DT01NSVRNRU5ULFxuICAgICAgICBzaGFyZTogdmFsaWRCaXRnb1RvVXNlclNpZ25TaGFyZS5yU2hhcmVzWzFdLmNvbW1pdG1lbnQsXG4gICAgICB9O1xuICAgICAgY29uc3QgZXhjaGFuZ2VDb21taXRSZXNwb25zZTogRXhjaGFuZ2VDb21taXRtZW50UmVzcG9uc2UgPSB7IGNvbW1pdG1lbnRTaGFyZTogYml0Z29Ub1VzZXJDb21taXRtZW50U2hhcmUgfTtcbiAgICAgIGF3YWl0IG5vY2tFeGNoYW5nZUNvbW1pdG1lbnRzKHtcbiAgICAgICAgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLFxuICAgICAgICB0eFJlcXVlc3RJZDogdHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgICByZXNwb25zZTogZXhjaGFuZ2VDb21taXRSZXNwb25zZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NpZ25UeFJlcXVlc3Qgc2hvdWxkIHN1Y2NlZWQgd2l0aCB0eFJlcXVlc3Qgb2JqZWN0IGFzIGlucHV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmVkVHhSZXF1ZXN0ID0gYXdhaXQgdHNzVXRpbHMuc2lnblR4UmVxdWVzdCh7XG4gICAgICAgIHR4UmVxdWVzdCxcbiAgICAgICAgcHJ2OiBKU09OLnN0cmluZ2lmeSh2YWxpZFVzZXJTaWduaW5nTWF0ZXJpYWwpLFxuICAgICAgICByZXFJZCxcbiAgICAgIH0pO1xuICAgICAgc2lnbmVkVHhSZXF1ZXN0LnVuc2lnbmVkVHhzLnNob3VsZC5kZWVwRXF1YWwodHhSZXF1ZXN0LnVuc2lnbmVkVHhzKTtcblxuICAgICAgc2FuZGJveC52ZXJpZnlBbmRSZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2lnblR4UmVxdWVzdCBzaG91bGQgc3VjY2VlZCB3aXRoIHR4UmVxdWVzdCBpZCBhcyBpbnB1dCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGdldFR4UmVxdWVzdCA9IHNhbmRib3guc3R1Yih0c3NVdGlscywgJ2dldFR4UmVxdWVzdCcpO1xuICAgICAgZ2V0VHhSZXF1ZXN0LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICBnZXRUeFJlcXVlc3QuY2FsbGVkV2l0aCh0eFJlcXVlc3RJZCk7XG5cbiAgICAgIGNvbnN0IHNpZ25lZFR4UmVxdWVzdCA9IGF3YWl0IHRzc1V0aWxzLnNpZ25UeFJlcXVlc3Qoe1xuICAgICAgICB0eFJlcXVlc3Q6IHR4UmVxdWVzdElkLFxuICAgICAgICBwcnY6IEpTT04uc3RyaW5naWZ5KHZhbGlkVXNlclNpZ25pbmdNYXRlcmlhbCksXG4gICAgICAgIHJlcUlkLFxuICAgICAgfSk7XG4gICAgICBzaWduZWRUeFJlcXVlc3QudW5zaWduZWRUeHMuc2hvdWxkLmRlZXBFcXVhbCh0eFJlcXVlc3QudW5zaWduZWRUeHMpO1xuXG4gICAgICBzYW5kYm94LnZlcmlmeUFuZFJlc3RvcmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NpZ25UeFJlcXVlc3QgV2l0aCBDb21taXRtZW50OicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eFJlcXVlc3RJZCA9ICdyYW5kb21pZCc7XG4gICAgY29uc3QgdHhSZXF1ZXN0OiBUeFJlcXVlc3QgPSB7XG4gICAgICB0eFJlcXVlc3RJZCxcbiAgICAgIHRyYW5zYWN0aW9uczogW10sXG4gICAgICB1bnNpZ25lZFR4czogW1xuICAgICAgICB7XG4gICAgICAgICAgc2VyaWFsaXplZFR4SGV4OiAnTVBDIG9uIGEgRnJpZGF5IG5pZ2h0JyxcbiAgICAgICAgICBzaWduYWJsZUhleDogJ01QQyBvbiBhIEZyaWRheSBuaWdodCcsXG4gICAgICAgICAgZGVyaXZhdGlvblBhdGg6ICdtLzAnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGludGVudDoge1xuICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICB9LFxuICAgICAgbGF0ZXN0OiB0cnVlLFxuICAgICAgc3RhdGU6ICdwZW5kaW5nVXNlclNpZ25hdHVyZScsXG4gICAgICB3YWxsZXRUeXBlOiAnaG90JyxcbiAgICAgIHdhbGxldElkOiAnd2FsbGV0SWQnLFxuICAgICAgcG9saWNpZXNDaGVja2VkOiB0cnVlLFxuICAgICAgdmVyc2lvbjogMSxcbiAgICAgIHVzZXJJZDogJ3VzZXJJZCcsXG4gICAgfTtcblxuICAgIGJlZm9yZUVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlclNpZ25TaGFyZSA9IHZhbGlkVXNlclNpZ25TaGFyZTtcbiAgICAgIGNvbnN0IHJTaGFyZSA9IHVzZXJTaWduU2hhcmUuclNoYXJlc1szXTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZVNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IHtcbiAgICAgICAgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsXG4gICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICAgIHNoYXJlOiByU2hhcmUuciArIHJTaGFyZS5SLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgbm9ja1NlbmRTaWduYXR1cmVTaGFyZSh7XG4gICAgICAgIHdhbGxldElkOiB3YWxsZXQuaWQoKSxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IHR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgICAgc2lnbmF0dXJlU2hhcmUsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc2lnbmF0dXJlU2hhcmUyOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IHtcbiAgICAgICAgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgICAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsXG4gICAgICAgIHNoYXJlOiB2YWxpZEJpdGdvVG9Vc2VyU2lnblNoYXJlLnJTaGFyZXNbMV0uciArIHZhbGlkQml0Z29Ub1VzZXJTaWduU2hhcmUuclNoYXJlc1sxXS5SLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0geyB0eFJlcXVlc3RzOiBbeyAuLi50eFJlcXVlc3QsIHNpZ25hdHVyZVNoYXJlczogW3NpZ25hdHVyZVNoYXJlMl0gfV0gfTtcbiAgICAgIGF3YWl0IG5vY2tHZXRUeFJlcXVlc3QoeyB3YWxsZXRJZDogd2FsbGV0LmlkKCksIHR4UmVxdWVzdElkOiB0eFJlcXVlc3QudHhSZXF1ZXN0SWQsIHJlc3BvbnNlIH0pO1xuICAgICAgY29uc3QgYml0Z29Ub1VzZXJDb21taXRtZW50U2hhcmU6IENvbW1pdG1lbnRTaGFyZVJlY29yZCA9IHtcbiAgICAgICAgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgICAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsXG4gICAgICAgIHR5cGU6IENvbW1pdG1lbnRUeXBlLkNPTU1JVE1FTlQsXG4gICAgICAgIHNoYXJlOiB2YWxpZEJpdGdvVG9Vc2VyU2lnblNoYXJlLnJTaGFyZXNbMV0uY29tbWl0bWVudCxcbiAgICAgIH07XG4gICAgICBjb25zdCBleGNoYW5nZUNvbW1pdFJlc3BvbnNlOiBFeGNoYW5nZUNvbW1pdG1lbnRSZXNwb25zZSA9IHsgY29tbWl0bWVudFNoYXJlOiBiaXRnb1RvVXNlckNvbW1pdG1lbnRTaGFyZSB9O1xuICAgICAgYXdhaXQgbm9ja0V4Y2hhbmdlQ29tbWl0bWVudHMoe1xuICAgICAgICB3YWxsZXRJZDogd2FsbGV0LmlkKCksXG4gICAgICAgIHR4UmVxdWVzdElkOiB0eFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICAgIHJlc3BvbnNlOiBleGNoYW5nZUNvbW1pdFJlc3BvbnNlLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2lnblR4UmVxdWVzdCBzaG91bGQgc3VjY2VlZCB3aXRoIHR4UmVxdWVzdCBvYmplY3QgYXMgaW5wdXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzaWduZWRUeFJlcXVlc3QgPSBhd2FpdCB0c3NVdGlscy5zaWduVHhSZXF1ZXN0KHtcbiAgICAgICAgdHhSZXF1ZXN0LFxuICAgICAgICBwcnY6IEpTT04uc3RyaW5naWZ5KHZhbGlkVXNlclNpZ25pbmdNYXRlcmlhbCksXG4gICAgICAgIHJlcUlkLFxuICAgICAgfSk7XG4gICAgICBzaWduZWRUeFJlcXVlc3QudW5zaWduZWRUeHMuc2hvdWxkLmRlZXBFcXVhbCh0eFJlcXVlc3QudW5zaWduZWRUeHMpO1xuXG4gICAgICBzYW5kYm94LnZlcmlmeUFuZFJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaWduVHhSZXF1ZXN0IHNob3VsZCBzdWNjZWVkIHdpdGggdHhSZXF1ZXN0IGlkIGFzIGlucHV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZ2V0VHhSZXF1ZXN0ID0gc2FuZGJveC5zdHViKHRzc1V0aWxzLCAnZ2V0VHhSZXF1ZXN0Jyk7XG4gICAgICBnZXRUeFJlcXVlc3QucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgIGdldFR4UmVxdWVzdC5jYWxsZWRXaXRoKHR4UmVxdWVzdElkKTtcblxuICAgICAgY29uc3Qgc2lnbmVkVHhSZXF1ZXN0ID0gYXdhaXQgdHNzVXRpbHMuc2lnblR4UmVxdWVzdCh7XG4gICAgICAgIHR4UmVxdWVzdDogdHhSZXF1ZXN0SWQsXG4gICAgICAgIHBydjogSlNPTi5zdHJpbmdpZnkodmFsaWRVc2VyU2lnbmluZ01hdGVyaWFsKSxcbiAgICAgICAgcmVxSWQsXG4gICAgICB9KTtcbiAgICAgIHNpZ25lZFR4UmVxdWVzdC51bnNpZ25lZFR4cy5zaG91bGQuZGVlcEVxdWFsKHR4UmVxdWVzdC51bnNpZ25lZFR4cyk7XG5cbiAgICAgIHNhbmRib3gudmVyaWZ5QW5kUmVzdG9yZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2lnblR4UmVxdWVzdEZvck1lc3NhZ2U6JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4UmVxdWVzdElkID0gJ3JhbmRvbWlkLWFiYyc7XG4gICAgY29uc3QgbWVzc2FnZVJhdyA9ICdoZWxsbyB3b3JsZCc7XG4gICAgY29uc3QgbWVzc2FnZUVuY29kZWQgPSBCdWZmZXIuZnJvbShgJHttZXNzYWdlUmF3fWApLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCBidWZmZXJUb1NpZ24gPSBCdWZmZXIuZnJvbShtZXNzYWdlRW5jb2RlZCwgJ2hleCcpO1xuICAgIGNvbnN0IHR4UmVxdWVzdDogVHhSZXF1ZXN0ID0ge1xuICAgICAgdHhSZXF1ZXN0SWQsXG4gICAgICB0cmFuc2FjdGlvbnM6IFtdLFxuICAgICAgbWVzc2FnZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHN0YXRlOiAncGVuZGluZ1NpZ25hdHVyZScsXG4gICAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbXSxcbiAgICAgICAgICBtZXNzYWdlUmF3LFxuICAgICAgICAgIG1lc3NhZ2VFbmNvZGVkLFxuICAgICAgICAgIGRlcml2YXRpb25QYXRoOiAnbS8wJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB1bnNpZ25lZFR4czogW10sXG4gICAgICBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBpbnRlbnQ6IHtcbiAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgfSxcbiAgICAgIGxhdGVzdDogdHJ1ZSxcbiAgICAgIHN0YXRlOiAncGVuZGluZ1VzZXJTaWduYXR1cmUnLFxuICAgICAgd2FsbGV0VHlwZTogJ2hvdCcsXG4gICAgICB3YWxsZXRJZDogJ3dhbGxldElkJyxcbiAgICAgIHBvbGljaWVzQ2hlY2tlZDogdHJ1ZSxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICB1c2VySWQ6ICd1c2VySWQnLFxuICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgIH07XG5cbiAgICBiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJTaGFyZSA9IHZhbGlkVXNlclNpZ25TaGFyZS5yU2hhcmVzWzNdO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlU2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0ge1xuICAgICAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgc2hhcmU6IHJTaGFyZS5yICsgclNoYXJlLlIsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBub2NrU2VuZFNpZ25hdHVyZVNoYXJlKHtcbiAgICAgICAgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLFxuICAgICAgICB0eFJlcXVlc3RJZDogdHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgICBzaWduYXR1cmVTaGFyZSxcbiAgICAgICAgcmVxdWVzdFR5cGU6IFJlcXVlc3RUeXBlLm1lc3NhZ2UsXG4gICAgICAgIGFwaU1vZGU6ICdmdWxsJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzaWduYXR1cmVTaGFyZTI6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0ge1xuICAgICAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgc2hhcmU6IHZhbGlkQml0Z29Ub1VzZXJTaWduU2hhcmUuclNoYXJlc1sxXS5yICsgdmFsaWRCaXRnb1RvVXNlclNpZ25TaGFyZS5yU2hhcmVzWzFdLlIsXG4gICAgICB9O1xuICAgICAgdHhSZXF1ZXN0Lm1lc3NhZ2VzIVswXS5zaWduYXR1cmVTaGFyZXMucHVzaChzaWduYXR1cmVTaGFyZTIpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7IHR4UmVxdWVzdHM6IFt7IC4uLnR4UmVxdWVzdCwgYXBpVmVyc2lvbjogJ2Z1bGwnIH1dIH07XG4gICAgICBhd2FpdCBub2NrR2V0VHhSZXF1ZXN0KHsgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLCB0eFJlcXVlc3RJZDogdHhSZXF1ZXN0LnR4UmVxdWVzdElkLCByZXNwb25zZSB9KTtcblxuICAgICAgY29uc3QgYml0Z29Ub1VzZXJDb21taXRtZW50U2hhcmU6IENvbW1pdG1lbnRTaGFyZVJlY29yZCA9IHtcbiAgICAgICAgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgICAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsXG4gICAgICAgIHR5cGU6IENvbW1pdG1lbnRUeXBlLkNPTU1JVE1FTlQsXG4gICAgICAgIHNoYXJlOiB2YWxpZEJpdGdvVG9Vc2VyU2lnblNoYXJlLnJTaGFyZXNbMV0uY29tbWl0bWVudCxcbiAgICAgIH07XG4gICAgICBjb25zdCBleGNoYW5nZUNvbW1pdFJlc3BvbnNlOiBFeGNoYW5nZUNvbW1pdG1lbnRSZXNwb25zZSA9IHsgY29tbWl0bWVudFNoYXJlOiBiaXRnb1RvVXNlckNvbW1pdG1lbnRTaGFyZSB9O1xuICAgICAgYXdhaXQgbm9ja0V4Y2hhbmdlQ29tbWl0bWVudHMoe1xuICAgICAgICB3YWxsZXRJZDogd2FsbGV0LmlkKCksXG4gICAgICAgIHR4UmVxdWVzdElkOiB0eFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICAgIHJlc3BvbnNlOiBleGNoYW5nZUNvbW1pdFJlc3BvbnNlLFxuICAgICAgICBhcGlNb2RlOiAnZnVsbCcsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICB0eFJlcXVlc3QubWVzc2FnZXMhWzBdLnNpZ25hdHVyZVNoYXJlcyA9IFtdO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NpZ25UeFJlcXVlc3Qgc2hvdWxkIHN1Y2NlZWQgd2l0aCB0eFJlcXVlc3Qgb2JqZWN0IGFzIGlucHV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmVkVHhSZXF1ZXN0ID0gYXdhaXQgdHNzVXRpbHMuc2lnblR4UmVxdWVzdEZvck1lc3NhZ2Uoe1xuICAgICAgICBtZXNzYWdlUmF3LFxuICAgICAgICBidWZmZXJUb1NpZ24sXG4gICAgICAgIHR4UmVxdWVzdCxcbiAgICAgICAgcHJ2OiBKU09OLnN0cmluZ2lmeSh2YWxpZFVzZXJTaWduaW5nTWF0ZXJpYWwpLFxuICAgICAgICByZXFJZCxcbiAgICAgIH0pO1xuICAgICAgc2lnbmVkVHhSZXF1ZXN0Lm1lc3NhZ2VzIS5zaG91bGQuZGVlcEVxdWFsKHR4UmVxdWVzdC5tZXNzYWdlcyk7XG5cbiAgICAgIHNhbmRib3gudmVyaWZ5QW5kUmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NpZ25UeFJlcXVlc3Qgc2hvdWxkIHN1Y2NlZWQgd2l0aCB0eFJlcXVlc3QgaWQgYXMgaW5wdXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBnZXRUeFJlcXVlc3QgPSBzYW5kYm94LnN0dWIodHNzVXRpbHMsICdnZXRUeFJlcXVlc3QnKTtcbiAgICAgIGdldFR4UmVxdWVzdC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgZ2V0VHhSZXF1ZXN0LmNhbGxlZFdpdGgodHhSZXF1ZXN0SWQpO1xuXG4gICAgICBjb25zdCBzaWduZWRUeFJlcXVlc3QgPSBhd2FpdCB0c3NVdGlscy5zaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZSh7XG4gICAgICAgIHR4UmVxdWVzdDogdHhSZXF1ZXN0SWQsXG4gICAgICAgIHBydjogSlNPTi5zdHJpbmdpZnkodmFsaWRVc2VyU2lnbmluZ01hdGVyaWFsKSxcbiAgICAgICAgcmVxSWQsXG4gICAgICAgIG1lc3NhZ2VSYXcsXG4gICAgICAgIGJ1ZmZlclRvU2lnbixcbiAgICAgIH0pO1xuICAgICAgc2lnbmVkVHhSZXF1ZXN0Lm1lc3NhZ2VzIS5zaG91bGQuZGVlcEVxdWFsKHR4UmVxdWVzdC5tZXNzYWdlcyk7XG5cbiAgICAgIHNhbmRib3gudmVyaWZ5QW5kUmVzdG9yZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncHJlYnVpbGRUeFdpdGhJbnRlbnQ6JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgc2luZ2xlIHJlY2lwaWVudCB0eCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG5vY2tlZENyZWF0ZVR4ID0gYXdhaXQgbm9ja0NyZWF0ZVR4UmVxdWVzdCh7XG4gICAgICAgIHdhbGxldElkOiB3YWxsZXQuaWQoKSxcbiAgICAgICAgcmVxdWVzdEJvZHk6IHtcbiAgICAgICAgICBhcGlWZXJzaW9uOiAnbGl0ZScsXG4gICAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgICAgICAgICBhZGRyZXNzOiAncmVjaXBpZW50JyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFtb3VudDoge1xuICAgICAgICAgICAgICAgICAgdmFsdWU6ICcxMDAwMCcsXG4gICAgICAgICAgICAgICAgICBzeW1ib2w6ICd0c29sJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICAvLyBkb24ndCBjYXJlIGFib3V0IHRoZSBhY3R1YWwgcmVzcG9uc2UgLSBqdXN0IG5lZWQgdG8gbWFrZSBzdXJlIHJlcXVlc3QgYm9keSBtYXRjaGVzXG4gICAgICAgIHJlc3BvbnNlOiB7fSxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB0c3NVdGlscy5wcmVidWlsZFR4V2l0aEludGVudCh7XG4gICAgICAgIHJlcUlkLFxuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ3JlY2lwaWVudCcsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgfSk7XG5cbiAgICAgIG5vY2tlZENyZWF0ZVR4LmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNlbmQgdmlkZW9BcHByb3ZlcnMgYXMgYSB0b3AtbGV2ZWwgZmllbGQsIG91dHNpZGUgdGhlIGludGVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZpZGVvQXBwcm92ZXJzID0gWyc1Y2FlMzEzMGY4ZjQ1NjFkNTFkZmNiZmRhYWZiYTliOSddO1xuICAgICAgY29uc3Qgbm9ja2VkQ3JlYXRlVHggPSBhd2FpdCBub2NrQ3JlYXRlVHhSZXF1ZXN0KHtcbiAgICAgICAgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLFxuICAgICAgICByZXF1ZXN0Qm9keToge1xuICAgICAgICAgIGFwaVZlcnNpb246ICdsaXRlJyxcbiAgICAgICAgICBpbnRlbnQ6IHtcbiAgICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgICAgICAgIGFkZHJlc3M6ICdyZWNpcGllbnQnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYW1vdW50OiB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZTogJzEwMDAwJyxcbiAgICAgICAgICAgICAgICAgIHN5bWJvbDogJ3Rzb2wnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdmlkZW9BcHByb3ZlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIGRvbid0IGNhcmUgYWJvdXQgdGhlIGFjdHVhbCByZXNwb25zZSAtIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgcmVxdWVzdCBib2R5IG1hdGNoZXNcbiAgICAgICAgcmVzcG9uc2U6IHt9LFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHRzc1V0aWxzLnByZWJ1aWxkVHhXaXRoSW50ZW50KHtcbiAgICAgICAgcmVxSWQsXG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAncmVjaXBpZW50JyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgIHZpZGVvQXBwcm92ZXJzLFxuICAgICAgfSk7XG5cbiAgICAgIG5vY2tlZENyZWF0ZVR4LmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIG11bHRpcGxlIHJlY2lwaWVudHMgd2l0aCBtZW1vIHR4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgbm9ja2VkQ3JlYXRlVHggPSBhd2FpdCBub2NrQ3JlYXRlVHhSZXF1ZXN0KHtcbiAgICAgICAgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLFxuICAgICAgICByZXF1ZXN0Qm9keToge1xuICAgICAgICAgIGFwaVZlcnNpb246ICdsaXRlJyxcbiAgICAgICAgICBpbnRlbnQ6IHtcbiAgICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgICAgICAgIGFkZHJlc3M6ICdyZWNpcGllbnQxJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFtb3VudDoge1xuICAgICAgICAgICAgICAgICAgdmFsdWU6ICcxMDAwMCcsXG4gICAgICAgICAgICAgICAgICBzeW1ib2w6ICd0c29sJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgICAgICAgICAgYWRkcmVzczogJ3JlY2lwaWVudDInLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYW1vdW50OiB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZTogJzIwMDAwJyxcbiAgICAgICAgICAgICAgICAgIHN5bWJvbDogJ3Rzb2wnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbWVtbzogJ21lbW8nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIC8vIGRvbid0IGNhcmUgYWJvdXQgdGhlIGFjdHVhbCByZXNwb25zZSAtIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgcmVxdWVzdCBib2R5IG1hdGNoZXNcbiAgICAgICAgcmVzcG9uc2U6IHt9LFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHRzc1V0aWxzLnByZWJ1aWxkVHhXaXRoSW50ZW50KHtcbiAgICAgICAgcmVxSWQsXG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAncmVjaXBpZW50MScsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAncmVjaXBpZW50MicsXG4gICAgICAgICAgICBhbW91bnQ6ICcyMDAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgbWVtbzoge1xuICAgICAgICAgIHZhbHVlOiAnbWVtbycsXG4gICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB9LFxuICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICB9KTtcblxuICAgICAgbm9ja2VkQ3JlYXRlVHguaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2RlbGV0ZSBTaWduYXR1cmVTaGFyZTonLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIGRlbGV0ZSBTaWduYXR1cmUgU2hhcmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzaWduYXR1cmVTaGFyZSA9IHsgZnJvbTogJ3VzZXInLCB0bzogJ2JpdGdvJywgc2hhcmU6ICcxMjhieXRlc3RyaW5nJyB9IGFzIFNpZ25hdHVyZVNoYXJlUmVjb3JkO1xuICAgICAgY29uc3Qgbm9jayA9IGF3YWl0IG5vY2tEZWxldGVTaWduYXR1cmVTaGFyZSh7XG4gICAgICAgIHdhbGxldElkOiB3YWxsZXQuaWQoKSxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IHR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgICAgc2lnbmF0dXJlU2hhcmUsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdHNzVXRpbHMuZGVsZXRlU2lnbmF0dXJlU2hhcmVzKHR4UmVxdWVzdC50eFJlcXVlc3RJZCk7XG4gICAgICByZXNwb25zZS5zaG91bGQuZGVlcEVxdWFsKFtzaWduYXR1cmVTaGFyZV0pO1xuICAgICAgcmVzcG9uc2Uuc2hvdWxkLmxlbmd0aCgxKTtcbiAgICAgIG5vY2suaXNEb25lKCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjYWxsIHNldFJlcXVlc3RUcmFjZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzaWduYXR1cmVTaGFyZSA9IHsgZnJvbTogJ3VzZXInLCB0bzogJ2JpdGdvJywgc2hhcmU6ICcxMjhieXRlc3RyaW5nJyB9IGFzIFNpZ25hdHVyZVNoYXJlUmVjb3JkO1xuICAgICAgY29uc3Qgbm9jayA9IGF3YWl0IG5vY2tEZWxldGVTaWduYXR1cmVTaGFyZSh7XG4gICAgICAgIHdhbGxldElkOiB3YWxsZXQuaWQoKSxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IHR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgICAgc2lnbmF0dXJlU2hhcmUsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlcUlkID0gbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgICAgIGNvbnN0IHNldFJlcXVlc3RUcmFjZXJTcHkgPSBzaW5vbi5zcHkoYml0Z28sICdzZXRSZXF1ZXN0VHJhY2VyJyk7XG4gICAgICBzZXRSZXF1ZXN0VHJhY2VyU3B5LndpdGhBcmdzKHJlcUlkKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdHNzVXRpbHMuZGVsZXRlU2lnbmF0dXJlU2hhcmVzKHR4UmVxdWVzdC50eFJlcXVlc3RJZCwgcmVxSWQpO1xuICAgICAgcmVzcG9uc2Uuc2hvdWxkLmRlZXBFcXVhbChbc2lnbmF0dXJlU2hhcmVdKTtcbiAgICAgIHJlc3BvbnNlLnNob3VsZC5sZW5ndGgoMSk7XG4gICAgICBub2NrLmlzRG9uZSgpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHNldFJlcXVlc3RUcmFjZXJTcHkpO1xuICAgICAgc2V0UmVxdWVzdFRyYWNlclNweS5yZXN0b3JlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzZW5kVHhSZXF1ZXN0OicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gc2VuZCB0eCByZXF1ZXN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgbm9jayA9IGF3YWl0IG5vY2tTZW5kVHhSZXF1ZXN0KHtcbiAgICAgICAgY29pbjogY29pbk5hbWUsXG4gICAgICAgIHdhbGxldElkOiB3YWxsZXQuaWQoKSxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IHR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgdHNzVXRpbHMuc2VuZFR4UmVxdWVzdCh0eFJlcXVlc3QudHhSZXF1ZXN0SWQpLnNob3VsZC5iZS5mdWxmaWxsZWQoKTtcbiAgICAgIG5vY2suaXNEb25lKCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjYWxsIHNldFJlcXVlc3RUcmFjZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBub2NrID0gYXdhaXQgbm9ja1NlbmRUeFJlcXVlc3Qoe1xuICAgICAgICBjb2luOiBjb2luTmFtZSxcbiAgICAgICAgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLFxuICAgICAgICB0eFJlcXVlc3RJZDogdHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZXFJZCA9IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgICBjb25zdCBzZXRSZXF1ZXN0VHJhY2VyU3B5ID0gc2lub24uc3B5KGJpdGdvLCAnc2V0UmVxdWVzdFRyYWNlcicpO1xuICAgICAgc2V0UmVxdWVzdFRyYWNlclNweS53aXRoQXJncyhyZXFJZCk7XG4gICAgICBhd2FpdCB0c3NVdGlscy5zZW5kVHhSZXF1ZXN0KHR4UmVxdWVzdC50eFJlcXVlc3RJZCwgcmVxSWQpLnNob3VsZC5iZS5mdWxmaWxsZWQoKTtcbiAgICAgIG5vY2suaXNEb25lKCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2Uoc2V0UmVxdWVzdFRyYWNlclNweSk7XG4gICAgICBzZXRSZXF1ZXN0VHJhY2VyU3B5LnJlc3RvcmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NyZWF0ZVVzZXJUb0JpdGdvQ29tbWl0bWVudFNoYXJlJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgY3JlYXRlIGEgdmFsaWQgY29tbWl0bWVudFNoYXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsdWUgPSAncmFuZG9tc3RyaW5nJztcbiAgICAgIGNvbnN0IHZhbGlkVXNlclRvQml0Z29Db21taXRtZW50U2hhcmUgPSB7XG4gICAgICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgICAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgICAgICB0eXBlOiBDb21taXRtZW50VHlwZS5DT01NSVRNRU5ULFxuICAgICAgICBzaGFyZTogdmFsdWUsXG4gICAgICB9O1xuICAgICAgY29uc3QgY29tbWl0bWVudFNoYXJlID0gdHNzVXRpbHMuY3JlYXRlVXNlclRvQml0Z29Db21taXRtZW50U2hhcmUodmFsdWUpO1xuICAgICAgY29tbWl0bWVudFNoYXJlLnNob3VsZC5kZWVwRXF1YWwodmFsaWRVc2VyVG9CaXRnb0NvbW1pdG1lbnRTaGFyZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjcmVhdGVVc2VyVG9CaXRnb0VuY3J5cHRlZFNpZ25lclNoYXJlJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgY3JlYXRlIGEgdmFsaWQgZW5jcnlwdGVkU2lnbmVyU2hhcmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9ICdyYW5kb21zdHJpbmcnO1xuICAgICAgY29uc3QgdmFsaWRVc2VyVG9CaXRnb0VuY3J5cHRlZFNpZ25lclNoYXJlID0ge1xuICAgICAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgdHlwZTogRW5jcnlwdGVkU2lnbmVyU2hhcmVUeXBlLkVOQ1JZUFRFRF9TSUdORVJfU0hBUkUsXG4gICAgICAgIHNoYXJlOiB2YWx1ZSxcbiAgICAgIH07XG4gICAgICBjb25zdCBlbmNyeXB0ZWRTaWduZXJTaGFyZSA9IHRzc1V0aWxzLmNyZWF0ZVVzZXJUb0JpdGdvRW5jcnlwdGVkU2lnbmVyU2hhcmUodmFsdWUpO1xuICAgICAgZW5jcnlwdGVkU2lnbmVyU2hhcmUuc2hvdWxkLmRlZXBFcXVhbCh2YWxpZFVzZXJUb0JpdGdvRW5jcnlwdGVkU2lnbmVyU2hhcmUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3VwcG9ydGVkVHhSZXF1ZXN0VmVyc2lvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZnVsbCBmb3IgY3VzdG9kaWFsIHdhbGxldHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjdXN0b2RpYWxXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlQ29pbiwgeyBtdWx0aXNpZ1R5cGU6ICd0c3MnLCB0eXBlOiAnY3VzdG9kaWFsJyB9KTtcbiAgICAgIGNvbnN0IGN1c3RvZGlhbFRzc1V0aWxzID0gbmV3IFRzc1V0aWxzKGJpdGdvLCBiYXNlQ29pbiwgY3VzdG9kaWFsV2FsbGV0KTtcbiAgICAgIGN1c3RvZGlhbFRzc1V0aWxzLnN1cHBvcnRlZFR4UmVxdWVzdFZlcnNpb25zKCkuc2hvdWxkLmRlZXBFcXVhbChbJ2Z1bGwnXSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZnVsbCBmb3IgY29sZCB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY29sZFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2VDb2luLCB7IG11bHRpc2lnVHlwZTogJ3RzcycsIHR5cGU6ICdjb2xkJyB9KTtcbiAgICAgIGNvbnN0IGNvbGRXYWxsZXRUc3NVdGlscyA9IG5ldyBUc3NVdGlscyhiaXRnbywgYmFzZUNvaW4sIGNvbGRXYWxsZXQpO1xuICAgICAgY29sZFdhbGxldFRzc1V0aWxzLnN1cHBvcnRlZFR4UmVxdWVzdFZlcnNpb25zKCkuc2hvdWxkLmRlZXBFcXVhbChbJ2Z1bGwnXSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZnVsbCBhbmQgbGl0ZSBmb3IgaG90IHdhbGxldHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBob3RXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlQ29pbiwge1xuICAgICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgICAgICBtdWx0aXNpZ1R5cGVWZXJzaW9uOiB1bmRlZmluZWQsXG4gICAgICAgIHR5cGU6ICdob3QnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBob3RUc3NVdGlscyA9IG5ldyBUc3NVdGlscyhiaXRnbywgYmFzZUNvaW4sIGhvdFdhbGxldCk7XG4gICAgICBjb25zdCBzdXBwb3J0ZWRUeFJlcXVlc3RWZXJzaW9ucyA9IGhvdFRzc1V0aWxzLnN1cHBvcnRlZFR4UmVxdWVzdFZlcnNpb25zKCk7XG4gICAgICBzdXBwb3J0ZWRUeFJlcXVlc3RWZXJzaW9ucy5zaG91bGQuZGVlcEVxdWFsKFsnbGl0ZScsICdmdWxsJ10pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIG9ubHkgZnVsbCBmb3IgaG90IE1QQ3YyIHdhbGxldHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBob3RNUEN2MldhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2VDb2luLCB7XG4gICAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgICAgIG11bHRpc2lnVHlwZVZlcnNpb246ICdNUEN2MicsXG4gICAgICAgIHR5cGU6ICdob3QnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBtcGN2MlRzc1V0aWxzID0gbmV3IEVERFNBVXRpbHMuRWRkc2FNUEN2MlV0aWxzKGJpdGdvLCBiYXNlQ29pbiwgaG90TVBDdjJXYWxsZXQpO1xuICAgICAgbXBjdjJUc3NVdGlscy5zdXBwb3J0ZWRUeFJlcXVlc3RWZXJzaW9ucygpLnNob3VsZC5kZWVwRXF1YWwoWydmdWxsJ10pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGVtcHR5IGZvciB0cmFkaW5nIHdhbGxldHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0cmFkaW5nV2FsbGV0cyA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2VDb2luLCB7IG11bHRpc2lnVHlwZTogJ3RzcycsIHR5cGU6ICd0cmFkaW5nJyB9KTtcbiAgICAgIGNvbnN0IHRyYWRpbmdXYWxsZXRUc3NVdGlscyA9IG5ldyBUc3NVdGlscyhiaXRnbywgYmFzZUNvaW4sIHRyYWRpbmdXYWxsZXRzKTtcbiAgICAgIGNvbnN0IHN1cHBvcnRlZFR4UmVxdWVzdFZlcnNpb25zID0gdHJhZGluZ1dhbGxldFRzc1V0aWxzLnN1cHBvcnRlZFR4UmVxdWVzdFZlcnNpb25zKCk7XG4gICAgICBzdXBwb3J0ZWRUeFJlcXVlc3RWZXJzaW9ucy5zaG91bGQuZGVlcEVxdWFsKFtdKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBlbXB0eSBmb3Igbm9uLXRzcyB3YWxsZXRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgbm9uVHNzV2FsbGV0RGF0YSA9IHsgY29pbjogJ2J0YycsIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nIH07XG4gICAgICBjb25zdCBidGNDb2luID0gYml0Z28uY29pbigndGJ0YycpO1xuICAgICAgY29uc3Qgbm9uVHNzV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYnRjQ29pbiwgbm9uVHNzV2FsbGV0RGF0YSk7XG4gICAgICBjb25zdCBub25Uc3NXYWxsZXRUc3NVdGlscyA9IG5ldyBUc3NVdGlscyhiaXRnbywgYnRjQ29pbiwgbm9uVHNzV2FsbGV0KTtcbiAgICAgIG5vblRzc1dhbGxldFRzc1V0aWxzLnN1cHBvcnRlZFR4UmVxdWVzdFZlcnNpb25zKCkuc2hvdWxkLmRlZXBFcXVhbChbXSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1BlbmRpbmdBcHByb3ZhbFR4UmVxdWVzdEZ1bGwnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgZnVsbCBhcGlWZXJzaW9uIGFuZCBwZW5kaW5nQXBwcm92YWwgc3RhdGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb246ICdmdWxsJyxcbiAgICAgICAgc3RhdGU6ICdwZW5kaW5nQXBwcm92YWwnLFxuICAgICAgfSBhcyBUeFJlcXVlc3Q7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0c3NVdGlscy5pc1BlbmRpbmdBcHByb3ZhbFR4UmVxdWVzdEZ1bGwodHhSZXF1ZXN0KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UgZm9yIG5vbi1mdWxsIGFwaVZlcnNpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb246ICdsaXRlJyxcbiAgICAgICAgc3RhdGU6ICdwZW5kaW5nQXBwcm92YWwnLFxuICAgICAgfSBhcyBUeFJlcXVlc3Q7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0c3NVdGlscy5pc1BlbmRpbmdBcHByb3ZhbFR4UmVxdWVzdEZ1bGwodHhSZXF1ZXN0KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBub24tcGVuZGluZ0FwcHJvdmFsIHN0YXRlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgIHN0YXRlOiAncGVuZGluZ0RlbGl2ZXJ5JyxcbiAgICAgIH0gYXMgVHhSZXF1ZXN0O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHNzVXRpbHMuaXNQZW5kaW5nQXBwcm92YWxUeFJlcXVlc3RGdWxsKHR4UmVxdWVzdCk7XG4gICAgICByZXN1bHQuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vICNyZWdpb24gTm9jayBoZWxwZXJzXG4gIGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlQml0Z29LZXljaGFpbihwYXJhbXM6IHtcbiAgICBjb2luOiBzdHJpbmc7XG4gICAgdXNlcktleVNoYXJlOiBLZXlTaGFyZTtcbiAgICBiYWNrdXBLZXlTaGFyZTogS2V5U2hhcmU7XG4gICAgYml0Z29LZXlTaGFyZTogS2V5U2hhcmU7XG4gICAgdXNlckdwZ0tleTogb3BlbnBncC5TZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+O1xuICAgIGJhY2t1cEdwZ0tleTogb3BlbnBncC5TZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+O1xuICAgIGJpdGdvR3BnS2V5OiBvcGVucGdwLlNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz47XG4gIH0pOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgY29uc3QgYml0Z29Db21iaW5lZCA9IE1QQy5rZXlDb21iaW5lKHBhcmFtcy5iaXRnb0tleVNoYXJlLnVTaGFyZSwgW1xuICAgICAgcGFyYW1zLnVzZXJLZXlTaGFyZS55U2hhcmVzWzNdLFxuICAgICAgcGFyYW1zLmJhY2t1cEtleVNoYXJlLnlTaGFyZXNbM10sXG4gICAgXSk7XG4gICAgY29uc3QgdXNlckdwZ0tleUFjdHVhbCA9IGF3YWl0IG9wZW5wZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IHBhcmFtcy51c2VyR3BnS2V5LnB1YmxpY0tleSB9KTtcbiAgICBjb25zdCBiYWNrdXBHcGdLZXlBY3R1YWwgPSBhd2FpdCBvcGVucGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBwYXJhbXMuYmFja3VwR3BnS2V5LnB1YmxpY0tleSB9KTtcblxuICAgIGNvbnN0IGJpdGdvVG9Vc2VyTWVzc2FnZSA9IGF3YWl0IG9wZW5wZ3AuY3JlYXRlTWVzc2FnZSh7XG4gICAgICB0ZXh0OiBCdWZmZXIuY29uY2F0KFtcbiAgICAgICAgQnVmZmVyLmZyb20ocGFyYW1zLmJpdGdvS2V5U2hhcmUueVNoYXJlc1sxXS51LCAnaGV4JyksXG4gICAgICAgIEJ1ZmZlci5mcm9tKHBhcmFtcy5iaXRnb0tleVNoYXJlLnlTaGFyZXNbMV0uY2hhaW5jb2RlLCAnaGV4JyksXG4gICAgICBdKS50b1N0cmluZygnaGV4JyksXG4gICAgfSk7XG4gICAgY29uc3QgZW5jcnlwdGVkQml0Z29Ub1VzZXJNZXNzYWdlID0gYXdhaXQgb3BlbnBncC5lbmNyeXB0KHtcbiAgICAgIG1lc3NhZ2U6IGJpdGdvVG9Vc2VyTWVzc2FnZSxcbiAgICAgIGVuY3J5cHRpb25LZXlzOiBbdXNlckdwZ0tleUFjdHVhbC50b1B1YmxpYygpXSxcbiAgICAgIGZvcm1hdDogJ2FybW9yZWQnLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYml0Z29Ub0JhY2t1cE1lc3NhZ2UgPSBhd2FpdCBvcGVucGdwLmNyZWF0ZU1lc3NhZ2Uoe1xuICAgICAgdGV4dDogQnVmZmVyLmNvbmNhdChbXG4gICAgICAgIEJ1ZmZlci5mcm9tKHBhcmFtcy5iaXRnb0tleVNoYXJlLnlTaGFyZXNbMl0udSwgJ2hleCcpLFxuICAgICAgICBCdWZmZXIuZnJvbShwYXJhbXMuYml0Z29LZXlTaGFyZS55U2hhcmVzWzJdLmNoYWluY29kZSwgJ2hleCcpLFxuICAgICAgXSkudG9TdHJpbmcoJ2hleCcpLFxuICAgIH0pO1xuICAgIGNvbnN0IGVuY3J5cHRlZEJpdGdvVG9CYWNrdXBNZXNzYWdlID0gYXdhaXQgb3BlbnBncC5lbmNyeXB0KHtcbiAgICAgIG1lc3NhZ2U6IGJpdGdvVG9CYWNrdXBNZXNzYWdlLFxuICAgICAgZW5jcnlwdGlvbktleXM6IFtiYWNrdXBHcGdLZXlBY3R1YWwudG9QdWJsaWMoKV0sXG4gICAgICBmb3JtYXQ6ICdhcm1vcmVkJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW46IEtleWNoYWluID0ge1xuICAgICAgaWQ6ICczJyxcbiAgICAgIHB1YjogJycsXG4gICAgICBjb21tb25LZXljaGFpbjogYml0Z29Db21iaW5lZC5wU2hhcmUueSArIGJpdGdvQ29tYmluZWQucFNoYXJlLmNoYWluY29kZSxcbiAgICAgIGtleVNoYXJlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZnJvbTogJ2JpdGdvJyxcbiAgICAgICAgICB0bzogJ3VzZXInLFxuICAgICAgICAgIHB1YmxpY1NoYXJlOiBwYXJhbXMuYml0Z29LZXlTaGFyZS55U2hhcmVzWzFdLnkgKyBwYXJhbXMuYml0Z29LZXlTaGFyZS55U2hhcmVzWzFdLmNoYWluY29kZSxcbiAgICAgICAgICBwcml2YXRlU2hhcmU6IGVuY3J5cHRlZEJpdGdvVG9Vc2VyTWVzc2FnZS50b1N0cmluZygpLFxuICAgICAgICAgIHZzc1Byb29mOiBwYXJhbXMuYml0Z29LZXlTaGFyZS55U2hhcmVzWzFdLnYsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmcm9tOiAnYml0Z28nLFxuICAgICAgICAgIHRvOiAnYmFja3VwJyxcbiAgICAgICAgICBwdWJsaWNTaGFyZTogcGFyYW1zLmJpdGdvS2V5U2hhcmUueVNoYXJlc1syXS55ICsgcGFyYW1zLmJpdGdvS2V5U2hhcmUueVNoYXJlc1syXS5jaGFpbmNvZGUsXG4gICAgICAgICAgcHJpdmF0ZVNoYXJlOiBlbmNyeXB0ZWRCaXRnb1RvQmFja3VwTWVzc2FnZS50b1N0cmluZygpLFxuICAgICAgICAgIHZzc1Byb29mOiBwYXJhbXMuYml0Z29LZXlTaGFyZS55U2hhcmVzWzJdLnYsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdHlwZTogJ3RzcycsXG4gICAgfTtcblxuICAgIGNvbnN0IHVzZXJLZXlJZCA9IHVzZXJHcGdLZXlBY3R1YWwua2V5UGFja2V0LmdldEZpbmdlcnByaW50KCk7XG4gICAgY29uc3QgYmFja3VwS2V5SWQgPSBiYWNrdXBHcGdLZXlBY3R1YWwua2V5UGFja2V0LmdldEZpbmdlcnByaW50KCk7XG4gICAgY29uc3QgYml0Z29Ub1VzZXJQdWJsaWNTaGFyZSA9XG4gICAgICBCdWZmZXIuZnJvbShcbiAgICAgICAgYXdhaXQgc29kaXVtLmNyeXB0b19zY2FsYXJtdWx0X2VkMjU1MTlfYmFzZV9ub2NsYW1wKEJ1ZmZlci5mcm9tKHBhcmFtcy5iaXRnb0tleVNoYXJlLnlTaGFyZXNbMV0udSwgJ2hleCcpKVxuICAgICAgKS50b1N0cmluZygnaGV4JykgKyBwYXJhbXMuYml0Z29LZXlTaGFyZS55U2hhcmVzWzFdLmNoYWluY29kZTtcbiAgICBjb25zdCBiaXRnb1RvQmFja3VwUHVibGljU2hhcmUgPVxuICAgICAgQnVmZmVyLmZyb20oXG4gICAgICAgIGF3YWl0IHNvZGl1bS5jcnlwdG9fc2NhbGFybXVsdF9lZDI1NTE5X2Jhc2Vfbm9jbGFtcChCdWZmZXIuZnJvbShwYXJhbXMuYml0Z29LZXlTaGFyZS55U2hhcmVzWzJdLnUsICdoZXgnKSlcbiAgICAgICkudG9TdHJpbmcoJ2hleCcpICsgcGFyYW1zLmJpdGdvS2V5U2hhcmUueVNoYXJlc1syXS5jaGFpbmNvZGU7XG5cbiAgICBiaXRnb0tleWNoYWluLndhbGxldEhTTUdQR1B1YmxpY0tleVNpZ3MgPSBhd2FpdCBjcmVhdGVXYWxsZXRTaWduYXR1cmVzKFxuICAgICAgcGFyYW1zLmJpdGdvR3BnS2V5LnByaXZhdGVLZXksXG4gICAgICBwYXJhbXMudXNlckdwZ0tleS5wdWJsaWNLZXksXG4gICAgICBwYXJhbXMuYmFja3VwR3BnS2V5LnB1YmxpY0tleSxcbiAgICAgIFtcbiAgICAgICAgeyBuYW1lOiAnY29tbW9uS2V5Y2hhaW4nLCB2YWx1ZTogYml0Z29Db21iaW5lZC5wU2hhcmUueSArIGJpdGdvQ29tYmluZWQucFNoYXJlLmNoYWluY29kZSB9LFxuICAgICAgICB7IG5hbWU6ICd1c2VyS2V5SWQnLCB2YWx1ZTogdXNlcktleUlkIH0sXG4gICAgICAgIHsgbmFtZTogJ2JhY2t1cEtleUlkJywgdmFsdWU6IGJhY2t1cEtleUlkIH0sXG4gICAgICAgIHsgbmFtZTogJ2JpdGdvVG9Vc2VyUHVibGljU2hhcmUnLCB2YWx1ZTogYml0Z29Ub1VzZXJQdWJsaWNTaGFyZSB9LFxuICAgICAgICB7IG5hbWU6ICdiaXRnb1RvQmFja3VwUHVibGljU2hhcmUnLCB2YWx1ZTogYml0Z29Ub0JhY2t1cFB1YmxpY1NoYXJlIH0sXG4gICAgICBdXG4gICAgKTtcblxuICAgIHJldHVybiBiaXRnb0tleWNoYWluO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gbm9ja0JpdGdvS2V5Y2hhaW4ocGFyYW1zOiB7XG4gICAgY29pbjogc3RyaW5nO1xuICAgIHVzZXJLZXlTaGFyZTogS2V5U2hhcmU7XG4gICAgYmFja3VwS2V5U2hhcmU6IEtleVNoYXJlO1xuICAgIGJpdGdvS2V5U2hhcmU6IEtleVNoYXJlO1xuICAgIHVzZXJHcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPjtcbiAgICBiYWNrdXBHcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPjtcbiAgICBiaXRnb0dwZ0tleTogb3BlbnBncC5TZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+O1xuICB9KTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW4gPSBhd2FpdCBnZW5lcmF0ZUJpdGdvS2V5Y2hhaW4ocGFyYW1zKTtcblxuICAgIG5vY2soYmdVcmwpXG4gICAgICAucG9zdChgL2FwaS92Mi8ke3BhcmFtcy5jb2lufS9rZXlgLCBfLm1hdGNoZXMoeyBrZXlUeXBlOiAndHNzJywgc291cmNlOiAnYml0Z28nIH0pKVxuICAgICAgLnJlcGx5KDIwMCwgYml0Z29LZXljaGFpbik7XG5cbiAgICByZXR1cm4gYml0Z29LZXljaGFpbjtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIG5vY2tVc2VyS2V5Y2hhaW4ocGFyYW1zOiB7IGNvaW46IHN0cmluZyB9KTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIGNvbnN0IHVzZXJLZXljaGFpbjogS2V5Y2hhaW4gPSB7XG4gICAgICBpZDogJzEnLFxuICAgICAgcHViOiAnJyxcbiAgICAgIHR5cGU6ICd0c3MnLFxuICAgIH07XG5cbiAgICBub2NrKCdodHRwczovL2JpdGdvLmZha2V1cmwnKVxuICAgICAgLnBvc3QoYC9hcGkvdjIvJHtwYXJhbXMuY29pbn0va2V5YCwgXy5tYXRjaGVzKHsga2V5VHlwZTogJ3RzcycsIHNvdXJjZTogJ3VzZXInIH0pKVxuICAgICAgLnJlcGx5KDIwMCwgdXNlcktleWNoYWluKTtcblxuICAgIHJldHVybiB1c2VyS2V5Y2hhaW47XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBub2NrQmFja3VwS2V5Y2hhaW4ocGFyYW1zOiB7IGNvaW46IHN0cmluZyB9KTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIGNvbnN0IGJhY2t1cEtleWNoYWluOiBLZXljaGFpbiA9IHtcbiAgICAgIGlkOiAnMicsXG4gICAgICBwdWI6ICcnLFxuICAgICAgdHlwZTogJ3RzcycsXG4gICAgfTtcblxuICAgIG5vY2soJ2h0dHBzOi8vYml0Z28uZmFrZXVybCcpXG4gICAgICAucG9zdChgL2FwaS92Mi8ke3BhcmFtcy5jb2lufS9rZXlgLCBfLm1hdGNoZXMoeyBrZXlUeXBlOiAndHNzJywgc291cmNlOiAnYmFja3VwJyB9KSlcbiAgICAgIC5yZXBseSgyMDAsIGJhY2t1cEtleWNoYWluKTtcblxuICAgIHJldHVybiBiYWNrdXBLZXljaGFpbjtcbiAgfVxuXG4gIGRlc2NyaWJlKCdnZXRQdWJsaWNLZXlGcm9tQ29tbW9uS2V5Y2hhaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgLy8gMzItYnl0ZSBlZDI1NTE5IHB1YmxpYyBrZXkgYXMgaGV4ICg2NCBjaGFycykgKyAzMi1ieXRlIGNoYWluY29kZSAoNjQgY2hhcnMpID0gMTI4IGNoYXJzXG4gICAgY29uc3QgcHViSGV4ID0gJ2EzMDQ3MzNjMTZjYzgyMWZlMTcxZDVjN2RiZDcyNzZmZDkwZGVhZTgwOGI3NTUzZDE3YTFlNTVlNGE3NmIyNzAnO1xuICAgIGNvbnN0IGNoYWluY29kZSA9ICc5ZDkxYzJlNjM1MzIwMmNmNjFmOGYyNzUxNThiMzQ2OGU5YTAwZjc4NzJmYzJmZDMxMGI3MmNkMDI2ZTJlMmY5JztcbiAgICBjb25zdCBjb21tb25LZXljaGFpbiA9IHB1YkhleCArIGNoYWluY29kZTtcblxuICAgIGl0KCdzaG91bGQgZGVjb2RlIHRoZSAzMi1ieXRlIHB1YmxpYyBrZXkgZnJvbSBhIDEyOC1jaGFyIGNvbW1vbktleWNoYWluJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29tbW9uS2V5Y2hhaW4ubGVuZ3RoLnNob3VsZC5lcXVhbCgxMjgpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gVHNzVXRpbHMuZ2V0UHVibGljS2V5RnJvbUNvbW1vbktleWNoYWluKGNvbW1vbktleWNoYWluKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwoJ0J5TVBlVnhzN2U4ekdlY3U4bjFNNDNNcTlxa3hCU3lwTk53SGVFdTJONnZiJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBhbiBpbnZhbGlkIGNvbW1vbktleWNoYWluIGxlbmd0aCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNob3VsZC50aHJvd3MoXG4gICAgICAgICgpID0+IFRzc1V0aWxzLmdldFB1YmxpY0tleUZyb21Db21tb25LZXljaGFpbignYWJjZCcpLFxuICAgICAgICAvSW52YWxpZCBjb21tb25LZXljaGFpbiBsZW5ndGgsIGV4cGVjdGVkIDEyOCwgZ290IDQvXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0Qml0Z29HcGdQdWJrZXlCYXNlZE9uRmVhdHVyZUZsYWdzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGVkZHNhTXBjdjJQdWJsaWNLZXkgd2hlbiBwcmVzZW50IGluIGZlYXR1cmUgZmxhZ3MgcmVzcG9uc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBlZDI1NTE5S2V5UGFpciA9IGF3YWl0IG9wZW5wZ3AuZ2VuZXJhdGVLZXkoe1xuICAgICAgICB1c2VySURzOiBbeyBuYW1lOiAnYml0Z28gZWRkc2EnLCBlbWFpbDogJ2JpdGdvQHRlc3QuY29tJyB9XSxcbiAgICAgICAgY3VydmU6ICdlZDI1NTE5JyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVzcG9uc2U6IEJpdGdvR1BHUHVibGljS2V5ID0ge1xuICAgICAgICBuYW1lOiAnaXJyZWxldmFudCcsXG4gICAgICAgIHB1YmxpY0tleTogZWQyNTUxOUtleVBhaXIucHVibGljS2V5LFxuICAgICAgICBtcGN2MlB1YmxpY0tleTogZWQyNTUxOUtleVBhaXIucHVibGljS2V5LFxuICAgICAgICBlZGRzYU1wY3YyUHVibGljS2V5OiBlZDI1NTE5S2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgIGVudGVycHJpc2VJZDogJ2VudGVycHJpc2VfaWQnLFxuICAgICAgfTtcbiAgICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke2NvaW5OYW1lfS90c3MvcHVia2V5YCkucXVlcnkoeyBlbnRlcnByaXNlSWQ6ICdlbnRlcnByaXNlX2lkJyB9KS5yZXBseSgyMDAsIHJlc3BvbnNlKTtcbiAgICAgIGNvbnN0IHsgZWRkc2FNcGN2MlB1YmxpY0tleSB9ID0gYXdhaXQgdHNzVXRpbHMuZ2V0Qml0Z29HcGdQdWJrZXlCYXNlZE9uRmVhdHVyZUZsYWdzKCdlbnRlcnByaXNlX2lkJyk7XG4gICAgICBzaG91bGQuZXhpc3QoZWRkc2FNcGN2MlB1YmxpY0tleSk7XG4gICAgICBzaG91bGQuZXF1YWwoZWQyNTUxOUtleVBhaXIucHVibGljS2V5LCBlZGRzYU1wY3YyUHVibGljS2V5IS5hcm1vcigpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCBlZGRzYU1wY3YyUHVibGljS2V5IHdoZW4gYWJzZW50IGZyb20gZmVhdHVyZSBmbGFncyByZXNwb25zZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBhd2FpdCBvcGVucGdwLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgdXNlcklEczogW3sgbmFtZTogJ2JpdGdvJywgZW1haWw6ICdiaXRnb0B0ZXN0LmNvbScgfV0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBCaXRnb0dQR1B1YmxpY0tleSA9IHtcbiAgICAgICAgbmFtZTogJ2lycmVsZXZhbnQnLFxuICAgICAgICBwdWJsaWNLZXk6IGtleVBhaXIucHVibGljS2V5LFxuICAgICAgICBtcGN2MlB1YmxpY0tleToga2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgIGVudGVycHJpc2VJZDogJ2VudGVycHJpc2VfaWQnLFxuICAgICAgfTtcbiAgICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke2NvaW5OYW1lfS90c3MvcHVia2V5YCkucXVlcnkoeyBlbnRlcnByaXNlSWQ6ICdlbnRlcnByaXNlX2lkJyB9KS5yZXBseSgyMDAsIHJlc3BvbnNlKTtcbiAgICAgIGNvbnN0IHsgZWRkc2FNcGN2MlB1YmxpY0tleSB9ID0gYXdhaXQgdHNzVXRpbHMuZ2V0Qml0Z29HcGdQdWJrZXlCYXNlZE9uRmVhdHVyZUZsYWdzKCdlbnRlcnByaXNlX2lkJyk7XG4gICAgICBzaG91bGQubm90LmV4aXN0KGVkZHNhTXBjdjJQdWJsaWNLZXkpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyAjZW5kcmVnaW9uIE5vY2sgaGVscGVyc1xufSk7XG4iXX0=
|