dmencu 1.0.1 → 1.0.3
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.
|
@@ -891,7 +891,7 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
|
|
|
891
891
|
for (let backup of likeAr(parameters.tem).array()) {
|
|
892
892
|
let area = backup.carga.carga;
|
|
893
893
|
let respuestasRaiz = backup.respuestasRaiz;
|
|
894
|
-
let idEncDM = backup.forPkRaiz[procesamiento_1.OperativoGenerator.
|
|
894
|
+
let idEncDM = backup.forPkRaiz[procesamiento_1.OperativoGenerator.mainTDPK].toString();
|
|
895
895
|
let recepcionista = backup.carga.recepcionista;
|
|
896
896
|
let asignado = backup.idper;
|
|
897
897
|
if (Number(idEncDM) < 0) {
|
|
@@ -1777,4 +1777,4 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
|
|
|
1777
1777
|
},
|
|
1778
1778
|
];
|
|
1779
1779
|
});
|
|
1780
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2VkdXJlcy1kbWVuY3UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL3Byb2NlZHVyZXMtZG1lbmN1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsWUFBWSxDQUFDOzs7SUFJYixrQ0FBa0M7SUFDbEMsaURBQStCO0lBRy9CLGlEQUFrRDtJQUVsRCx5REFBOEM7SUFFOUMsK0NBQXVEO0lBQ3ZELDJCQUFtQztJQUVuQyxnREFBZ0Q7SUFHaEQseURBQXdEO0lBQ3hELHFDQUFnQztJQUdoQyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0IsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRXBDLElBQUksWUFBWSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUUzQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUM7SUFFN0IsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7SUFDbkMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7SUFDdEMsTUFBTSx3QkFBd0IsR0FBRyxRQUFRLENBQUM7SUFDMUMsTUFBTSwyQkFBMkIsR0FBRyxXQUFXLENBQUM7SUFDaEQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBSTFCLElBQUksZUFBZ0MsQ0FBQztJQUVyQyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUE7SUFFcEIsSUFBSSxjQUFjLEdBQUcsR0FBRyxDQUFBO0lBRWpCLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxHQUFtQixFQUFDLEVBQUUsQ0FDckQsZUFBZSxHQUFHLEdBQUcsQ0FBQztJQURiLFFBQUEsa0JBQWtCLHNCQUNMO0lBRW5CLE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBVSxFQUFDLEVBQUUsQ0FDeEMsY0FBYyxHQUFHLEdBQUcsQ0FBQztJQURaLFFBQUEsY0FBYyxrQkFDRjtJQUVsQixNQUFN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QUFFLENBQUMsR0FBRyxDQUFDLENBQUM7eUJBQzFCLG1CQUFtQixFQUFFLENBQUM7b0JBQ3ZCLElBQUcsWUFBWSxDQUFDLFFBQVEsRUFBQzt3QkFDckIsRUFBRSxDQUFDLGVBQWUsSUFBRSx1Q0FBdUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQTt3QkFDdEcsSUFBSSxFQUFDLE1BQU0sRUFBQyxXQUFXLEVBQUMsT0FBTyxFQUFDLEdBQUcsK0NBQStDLENBQUM7NEJBQy9FLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSzs0QkFDZixxQkFBcUIsRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLGFBQWE7NEJBQ3JELE9BQU8sRUFBRSxFQUFFOzRCQUNYLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDO3lCQUMzQyxDQUFDLENBQUE7d0JBQ0YsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDdEI7a0NBQ1UsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7OzJDQUVSLEVBRW5CLFdBQVcsQ0FDZCxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUNuQixNQUFNLDJDQUEyQyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUE7cUJBQ3hKO2lCQUNKO2dCQUNELE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQztZQUNoQyxDQUFDO1NBQ0o7S0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBQcm9jZWR1cmVEZWYsIFRhYmxlRGVmaW5pdGlvbiwgQ2xpZW50LCBUYWJsZURlZmluaXRpb25zIH0gZnJvbSBcIi4vdHlwZXMtZG1lbmN1XCI7XHJcbmltcG9ydCB7IFByb2NlZHVyZUNvbnRleHQsIENvcmVGdW5jdGlvblBhcmFtZXRlcnMsIEZvcmVpZ25LZXkgfSBmcm9tIFwibWV0YS1lbmNcIjtcclxuaW1wb3J0ICogYXMgbGlrZUFyIGZyb20gXCJsaWtlLWFyXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzLWRtZW5jdVwiO1xyXG5pbXBvcnQgeyBJZFVuaWRhZEFuYWxpc2lzLCBVbmlkYWRBbmFsaXNpcywgRXN0YWRvQWNjaW9uLCBJZEVuYywgSWRUYXJlYSwgUmVzcHVlc3Rhc1JhaXosIElkT3BlcmF0aXZvLCBJZENhcmdhIH0gZnJvbSBcIi4uL3VubG9nZ2VkL3RpcG9zXCI7XHJcblxyXG5pbXBvcnQge09wZXJhdGl2b0dlbmVyYXRvciB9IGZyb20gXCJwcm9jZXNhbWllbnRvXCI7XHJcblxyXG5pbXBvcnQge2pzb24sIGpzb25vfSBmcm9tIFwicGctcHJvbWlzZS1zdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7Y2hhbmdpbmcsIGRhdGUsIGNvYWxlc2NlIH0gZnJvbSAnYmVzdC1nbG9iYWxzJztcclxuaW1wb3J0IHtwcm9taXNlcyBhcyAgZnN9IGZyb20gXCJmc1wiO1xyXG5cclxuaW1wb3J0ICogYXMgRXhwcmVzaW9uUGFyc2VyIGZyb20gJ2V4cHJlLXBhcnNlcic7XHJcbmltcG9ydCB7IHRhcmVhcyB9IGZyb20gXCIuL3RhYmxlLXRhcmVhc1wiO1xyXG5pbXBvcnQgeyBwcmVwZW5kTGlzdGVuZXIgfSBmcm9tIFwicHJvY2Vzc1wiO1xyXG5pbXBvcnQgeyBnZXREaWFzQVBhc2FyUXVlcnkgfSBmcm9tIFwiLi90YWJsZS10YXJlYXNfdGVtXCI7XHJcbmltcG9ydCB7IGVycm9yIH0gZnJvbSBcImNvbnNvbGVcIjtcclxuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCJ2bVwiO1xyXG5cclxudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XHJcbnZhciBzcWxUb29scyA9IHJlcXVpcmUoJ3NxbC10b29scycpO1xyXG5cclxudmFyIGRpc2NyZXBhbmNlcyA9IHJlcXVpcmUoJ2Rpc2NyZXBhbmNlcycpO1xyXG5cclxuY29uc3QgZm9ybVByaW5jaXBhbCA9ICdGOkYxJztcclxuXHJcbmNvbnN0IEVTVEFET19QT1NURVJJT1JfQ0FSR0EgPSAnQyc7XHJcbmNvbnN0IEVTVEFET19QT1NURVJJT1JfREVTQ0FSR0EgPSAnRCc7XHJcbmNvbnN0IE9QRVJBQ0lPTl9QUkVQQVJBUl9DQVJHQSA9ICdjYXJnYXInO1xyXG5jb25zdCBPUEVSQUNJT05fUFJFUEFSQVJfREVTQ0FSR0EgPSAnZGVzY2FyZ2FyJztcclxuY29uc3QgREVGQVVMVF9ET01JTklPID0gMztcclxuXHJcbmV4cG9ydCB0eXBlIGdlbmVyYXJJZEVuY0Z1biA9IChhcmVhOm51bWJlcixpbmRleDpudW1iZXIpPT5zdHJpbmdcclxuXHJcbnZhciBnZW5lcmFySWRFbmNGdW46IGdlbmVyYXJJZEVuY0Z1bjsgIFxyXG5cclxudmFyIG1heEFHZW5lcmFyID0gNTBcclxuXHJcbnZhciBtYXhBRW5jUG9yQXJlYSA9IDEwMFxyXG5cclxuZXhwb3J0IGNvbnN0IHNldEdlbmVyYXJJZEVuY0Z1biA9IChmdW46Z2VuZXJhcklkRW5jRnVuKT0+XHJcbiAgICBnZW5lcmFySWRFbmNGdW4gPSBmdW47XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0TWF4QWdlbmVyYXIgPSAobWF4Om51bWJlcik9PlxyXG4gICAgbWF4QUVuY1BvckFyZWEgPSBtYXg7XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0TWF4RW5jUG9yQXJlYSA9IChtYXg6bnVtYmVyKT0+XHJcbiAgICBtYXhBR2VuZXJhciA9IG1heDtcclxuXHJcbnNldEdlbmVyYXJJZEVuY0Z1bigoYXJlYTpudW1iZXIsaW5kZXg6bnVtYmVyKT0+YXJlYS50b1N0cmluZygpICsgKGluZGV4KzEwKS50b1N0cmluZygpKTtcclxuXHJcbnNldE1heEFnZW5lcmFyKDEwMCk7XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0T3BlcmF0aXZvQWN0dWFsID0gYXN5bmMgKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCk9PntcclxuICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICB2YXIgb3BlcmF0aXZvID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGBzZWxlY3Qgb3BlcmF0aXZvXHJcbiAgICAgICAgICAgIGZyb20gcGFyYW1ldHJvc1xyXG4gICAgICAgICAgICB3aGVyZSB1bmljb19yZWdpc3Ryb2BcclxuICAgICAgICAsW11cclxuICAgICkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZVxyXG4gICAgaWYob3BlcmF0aXZvKXtcclxuICAgICAgICByZXR1cm4gb3BlcmF0aXZvXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICB0aHJvdyBFcnJvciAoJ25vIHNlIGNvbmZpZ3Vyw7MgdW4gb3BlcmF0aXZvIGVuIGxhIHRhYmxhIHBhcsOhbWV0cm9zJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGdldERlZmF1bHRUYXJlYShjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0KSB7XHJcbiAgICByZXR1cm4gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICBzZWxlY3QgKiBcclxuICAgICAgICAgICAgZnJvbSB0YXJlYXMgXHJcbiAgICAgICAgICAgIHdoZXJlIGVzX2luaWNpYWxcclxuICAgIGApLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcGVyc2lzdGlyRW5jdWVzdGFBdXRvZ2VuZXJhZGFFbkRNKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIE9QRVJBVElWTzogSWRPcGVyYXRpdm8sIGFyZWE6IG51bWJlciwgZW5jQXV0b2dlbmVyYWRvRG06IHN0cmluZywgdG9rZW46IHN0cmluZywgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCByZWNlcGNpb25pc3RhOiBzdHJpbmcsIGFzaWduYWRvOiBzdHJpbmcpOlByb21pc2U8SWRFbmM+e1xyXG4gICAgbGV0IGlkRW5jID0gbnVsbDtcclxuICAgIHZhciBwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgc2VsZWN0IHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhIFxyXG4gICAgICAgICAgICBmcm9tIG9wZXJhdGl2b3MgXHJcbiAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxXHJcbiAgICBgLCBbT1BFUkFUSVZPXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgIGlmIChwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSkge1xyXG4gICAgICAgIGxldCBpID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICBgc2VsZWN0IGNvdW50KCopIGFzIHRvdGFsXHJcbiAgICAgICAgICAgICAgICBmcm9tIHRlbVxyXG4gICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgYXJlYSA9ICQyYCxcclxuICAgICAgICAgICAgW09QRVJBVElWTywgYXJlYV1cclxuICAgICAgICApLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgY29uc29sZS5sb2coaSk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFRhcmVhID0gYXdhaXQgZ2V0RGVmYXVsdFRhcmVhKGNvbnRleHQpO1xyXG4gICAgICAgIGxldCBlbmMgPSBnZW5lcmFySWRFbmNGdW4oYXJlYSwgaSk7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0SW5zZXJ0VGVtID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICBJTlNFUlQgaW50byB0ZW0gKFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgZW5jLFxyXG4gICAgICAgICAgICAgICAgYXJlYSxcclxuICAgICAgICAgICAgICAgIGRvbWluaW8sXHJcbiAgICAgICAgICAgICAgICBoYWJpbGl0YWRhLFxyXG4gICAgICAgICAgICAgICAgZW5jX2F1dG9nZW5lcmFkb19kbSxcclxuICAgICAgICAgICAgICAgIHRva2VuX2F1dG9nZW5lcmFkb19kbSxcclxuICAgICAgICAgICAgICAgIHRhcmVhX2FjdHVhbCxcclxuICAgICAgICAgICAgICAgIGpzb25fYmFja3VwLFxyXG4gICAgICAgICAgICAgICAganNvbl9lbmN1ZXN0YSwgXHJcbiAgICAgICAgICAgICAgICBmZWNoYV9iYWNrdXBcclxuICAgICAgICAgICAgKSBcclxuICAgICAgICAgICAgICAgIHZhbHVlcyAoJDEsICQyLCAkMywgJDQsICQ1LCAkNiwgJDcsICQ4LCAkOSwgJDEwLCBjdXJyZW50X3RpbWVzdGFtcClcclxuICAgICAgICAgICAgICAgIG9uIGNvbmZsaWN0IChlbmNfYXV0b2dlbmVyYWRvX2RtLCB0b2tlbl9hdXRvZ2VuZXJhZG9fZG0pIGRvIG5vdGhpbmdcclxuICAgICAgICAgICAgICAgIHJldHVybmluZyAqXHJcbiAgICAgICAgYCxbXHJcbiAgICAgICAgICAgIE9QRVJBVElWTyxcclxuICAgICAgICAgICAgZW5jLFxyXG4gICAgICAgICAgICBhcmVhLFxyXG4gICAgICAgICAgICBERUZBVUxUX0RPTUlOSU8sXHJcbiAgICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgICAgIGVuY0F1dG9nZW5lcmFkb0RtLFxyXG4gICAgICAgICAgICB0b2tlbixcclxuICAgICAgICAgICAgZGVmYXVsdFRhcmVhLnRhcmVhLFxyXG4gICAgICAgICAgICByZXNwdWVzdGFzUmFpeixcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1JhaXosXHJcbiAgICAgICAgXSkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgIGlmKHJlc3VsdEluc2VydFRlbS5yb3dDb3VudCA9PSAwKXtcclxuICAgICAgICAgICAgaWRFbmMgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgKGpzb25fYmFja3VwLCBqc29uX2VuY3Vlc3RhLCBmZWNoYV9iYWNrdXApID0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICgkNCwgJDUsIGN1cnJlbnRfdGltZXN0YW1wKVxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIChvcGVyYXRpdm8gPSAkMSBhbmQgZW5jX2F1dG9nZW5lcmFkb19kbSA9ICQyIGFuZCB0b2tlbl9hdXRvZ2VuZXJhZG9fZG0gPSAkMylcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgICAgICBgLFtPUEVSQVRJVk8sIGVuY0F1dG9nZW5lcmFkb0RtLCB0b2tlbiwgcmVzcHVlc3Rhc1JhaXosIHJlc3B1ZXN0YXNSYWl6XSkuZmV0Y2hVbmlxdWVSb3coKSkucm93LmVuYztcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgZ2VuZXJhclRhcmVhc1RlbUZhbHRhbnRlcyhjb250ZXh0LCBPUEVSQVRJVk8pO1xyXG4gICAgICAgIGlmIChyZXN1bHRJbnNlcnRUZW0ucm93Q291bnQgPT0gMSkge1xyXG4gICAgICAgICAgICBpZEVuYyA9IHJlc3VsdEluc2VydFRlbS5yb3cuZW5jO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCByZWNlcGNpb25pc3RhID0gJDQsIGFzaWduYWRvID0gJDVcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICAgICAgYCxbT1BFUkFUSVZPLCByZXN1bHRJbnNlcnRUZW0ucm93LmVuYywgZGVmYXVsdFRhcmVhLnRhcmVhLCByZWNlcGNpb25pc3RhLCBhc2lnbmFkb10pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGNhcmdhZG9fZG0gPSAkNCwgZXN0YWRvID0gJDUsIG9wZXJhY2lvbiA9ICQ2XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgIHJldHVybmluZyAqXHJcbiAgICAgICAgICAgIGAsW09QRVJBVElWTywgcmVzdWx0SW5zZXJ0VGVtLnJvdy5lbmMsIGRlZmF1bHRUYXJlYS50YXJlYSwgdG9rZW4sIEVTVEFET19QT1NURVJJT1JfQ0FSR0EsIE9QRVJBQ0lPTl9QUkVQQVJBUl9DQVJHQV1cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBpZEVuY1xyXG59XHJcblxyXG4vKmRlZmluaWNpw7NuIGRlIGVzdHJ1Y3R1cmEgY29tcGxldGEsIGN1YW5kbyBleGlzdGEgaW5nLWVuYyBoYXkgcXVlIHBvbmVybG8gYWjDrSovIFxyXG50eXBlIEVzdHJ1Y3R1cmFUYWJsYT17dGFibGVOYW1lOnN0cmluZywgcGtGaWVsZHM6e2ZpZWxkTmFtZTpzdHJpbmd9W10sIGNoaWxkVGFibGVzOkVzdHJ1Y3R1cmFUYWJsYVtdfTtcclxuZnVuY3Rpb24gY3JlYXRlU3RydWN0dXJlKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgdGFibGVOYW1lOnN0cmluZyl7XHJcbiAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgdmFyIG1haW5UYWJsZURlZjpUYWJsZURlZmluaXRpb24gPSBiZS50YWJsZVN0cnVjdHVyZXNbdGFibGVOYW1lXShjb250ZXh0KTtcclxuICAgIHZhciBnZXRQa0Zyb21UYWJsZURlZiA9IGZ1bmN0aW9uIGdldFBrRnJvbVRhYmxlRGVmKHRhYmxlRGVmOlRhYmxlRGVmaW5pdGlvbil7XHJcbiAgICAgICAgcmV0dXJuIHRhYmxlRGVmLnByaW1hcnlLZXkubWFwKGZ1bmN0aW9uKHBrKXtcclxuICAgICAgICAgICAgcmV0dXJuIHtmaWVsZE5hbWU6cGt9O1xyXG4gICAgICAgIH0pXHJcbiAgICB9O1xyXG4gICAgdmFyIGdldEZrRnJvbVRhYmxlRGVmID0gZnVuY3Rpb24gZ2V0RmtGcm9tVGFibGVEZWYodGFibGVEZWY6VGFibGVEZWZpbml0aW9uLCBwYXJlbnRUYWJsZU5hbWU6IHN0cmluZyl7XHJcbiAgICAgICAgLy8gcmV0dXJuIHRhYmxlRGVmLmZvcmVpZ25LZXlzPyB0YWJsZURlZi5mb3JlaWduS2V5cy5tYXAoZms9PmZrLmZpZWxkcyk6IFtdO1xyXG4gICAgICAgIGxldCBwYXJlbnRGayA9ICg8Rm9yZWlnbktleVtdPiB0YWJsZURlZi5mb3JlaWduS2V5cykuZmluZChmaz0+ZmsucmVmZXJlbmNlcyA9PSBwYXJlbnRUYWJsZU5hbWUpO1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRGaz8gcGFyZW50RmsuZmllbGRzOiBbXTtcclxuICAgIH1cclxuICAgIHZhciBzdHJ1Y3Q6RXN0cnVjdHVyYVRhYmxhPXtcclxuICAgICAgICB0YWJsZU5hbWU6bWFpblRhYmxlRGVmLm5hbWUsXHJcbiAgICAgICAgcGtGaWVsZHM6Z2V0UGtGcm9tVGFibGVEZWYobWFpblRhYmxlRGVmKSxcclxuICAgICAgICBjaGlsZFRhYmxlczpbXVxyXG4gICAgfTtcclxuICAgIGlmKG1haW5UYWJsZURlZi5kZXRhaWxUYWJsZXMgJiYgbWFpblRhYmxlRGVmLmRldGFpbFRhYmxlcy5sZW5ndGgpe1xyXG4gICAgICAgIG1haW5UYWJsZURlZi5kZXRhaWxUYWJsZXMuZm9yRWFjaChmdW5jdGlvbihkZXRhaWxUYWJsZSl7XHJcbiAgICAgICAgICAgIHN0cnVjdC5jaGlsZFRhYmxlcy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgY2hhbmdpbmcoXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlU3RydWN0dXJlKGNvbnRleHQsIGRldGFpbFRhYmxlLnRhYmxlKSxcclxuICAgICAgICAgICAgICAgICAgICB7ZmtGaWVsZHM6IGdldEZrRnJvbVRhYmxlRGVmKGJlLnRhYmxlU3RydWN0dXJlc1tkZXRhaWxUYWJsZS50YWJsZV0oY29udGV4dCksIHRhYmxlTmFtZSl9XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHJldHVybiBzdHJ1Y3Q7XHJcbn1cclxuLyogZmluIGRlZmluaWNpb24gZXN0cnVjdHVyYSBjb21wbGV0YSAqL1xyXG5cclxudHlwZSBBbnlPYmplY3QgPSB7W2s6c3RyaW5nXTphbnl9XHJcblxyXG52YXIgZ2V0U2V0dGVyc0FuZFBhcmFtZXRlcnNGb3JSZWFOb1JlYVJlc3VtZW5Fc3RhZG8gPSAoZnVuUGFyYW1zOnt0YXJlYTpJZFRhcmVhLCByZXNwdWVzdGFzVUFQcmluY2lwYWw6UmVzcHVlc3Rhc1JhaXosIHNldHRlcnM6c3RyaW5nW10sIHBhcmFtczphbnlbXX0pPT57XHJcbiAgICBsZXQge3RhcmVhLHJlc3B1ZXN0YXNVQVByaW5jaXBhbCxzZXR0ZXJzLHBhcmFtc30gPSBmdW5QYXJhbXM7XHJcbiAgICBsZXQge3Jlc3VtZW5Fc3RhZG9TdXAsIGNvZE5vUmVhU3VwLCBjb2RSZWFTdXAsIHJlc3VtZW5Fc3RhZG8sIGNvZE5vUmVhLCBjb2RSZWF9ID0gcmVzcHVlc3Rhc1VBUHJpbmNpcGFsO1xyXG4gICAgc2V0dGVycyA9IHNldHRlcnMuY29uY2F0KFtcclxuICAgICAgICBgcmVzdW1lbl9lc3RhZG8ke3RhcmVhPT0nc3VwZSc/J19zdXAnOicnfT0kJHtwYXJhbXMubGVuZ3RoKzF9YCxcclxuICAgICAgICBgbm9yZWEke3RhcmVhPT0nc3VwZSc/J19zdXAnOicnfT0kJHtwYXJhbXMubGVuZ3RoKzJ9YCxcclxuICAgICAgICBgcmVhJHt0YXJlYT09J3N1cGUnPydfc3VwJzonJ309JCR7cGFyYW1zLmxlbmd0aCszfWBcclxuICAgIF0pXHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuY29uY2F0KFtcclxuICAgICAgICB0YXJlYT09J3N1cGUnP3Jlc3VtZW5Fc3RhZG9TdXA6cmVzdW1lbkVzdGFkbyxcclxuICAgICAgICB0YXJlYT09J3N1cGUnP2NvZE5vUmVhU3VwOmNvZE5vUmVhLFxyXG4gICAgICAgIHRhcmVhPT0nc3VwZSc/Y29kUmVhU3VwOmNvZFJlYVxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4ge3NldHRlcnMscGFyYW1zfVxyXG59XHJcblxyXG52YXIgZ3VhcmRhckVuY3Vlc3RhRW5UZW0gPSBhc3luYyAoY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBvcGVyYXRpdm86SWRPcGVyYXRpdm8sIGlkRW5jOklkRW5jLCByZXNwdWVzdGFzVUFQcmluY2lwYWw6UmVzcHVlc3Rhc1JhaXosIHRhcmVhOklkVGFyZWEpPT57XHJcbiAgICB2YXIge3BhcmFtcyxzZXR0ZXJzfSA9IGdldFNldHRlcnNBbmRQYXJhbWV0ZXJzRm9yUmVhTm9SZWFSZXN1bWVuRXN0YWRvKHtcclxuICAgICAgICB0YXJlYSxcclxuICAgICAgICByZXNwdWVzdGFzVUFQcmluY2lwYWwsXHJcbiAgICAgICAgc2V0dGVyczogW2Bqc29uX2VuY3Vlc3RhID0gJDNgLCBgZmVjaGFfbW9kaWZfZW5jdWVzdGEgPSBjdXJyZW50X3RpbWVzdGFtcGBdLFxyXG4gICAgICAgIHBhcmFtczogW29wZXJhdGl2bywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbF1cclxuICAgIH0pXHJcbiAgICByZXR1cm4gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgYHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgc2V0ICR7c2V0dGVycy5qb2luKCcsJyl9XHJcbiAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICxcclxuICAgICAgICBwYXJhbXNcclxuICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxufVxyXG5cclxudmFyIHNpbXVsYXJHdWFyZGFkb0RlRW5jdWVzdGFEZXNkZUFwcEVzY3JpdG9yaW8gPSBhc3luYyAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCAsb3BlcmF0aXZvOiBzdHJpbmcsIGVuYzogSWRFbmMsIHRhcmVhOiBJZFRhcmVhLCBqc29uX2VuY3Vlc3RhOmFueSApPT57XHJcbiAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgY29uc3QgVUFfUFJJTkNJUEFMID0gYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIG9wZXJhdGl2byk7XHJcbiAgICByZXR1cm4gYXdhaXQgYmUucHJvY2VkdXJlLmRtX2ZvcnBrcmFpel9kZXNjYXJnYXIuY29yZUZ1bmN0aW9uKFxyXG4gICAgICAgIGNvbnRleHQsIFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3BlcmF0aXZvOm9wZXJhdGl2bywgXHJcbiAgICAgICAgICAgIHBlcnNpc3RlbnRlczp7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzOntcclxuICAgICAgICAgICAgICAgICAgICBbVUFfUFJJTkNJUEFMXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZW5jXToganNvbl9lbmN1ZXN0YVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBpbmZvcm1hY2lvbkhkcjp7XHJcbiAgICAgICAgICAgICAgICAgICAgW2VuY106IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICApXHJcbn1cclxuXHJcbnZhciBnZXRIZHJRdWVyeSA9ICBmdW5jdGlvbiBnZXRIZHJRdWVyeShxdW90ZWRDb25kVml2OnN0cmluZywgY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwZXJtaXRlR2VuZXJhck11ZXN0cmE6Ym9vbGVhbil7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgd2l0aCAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudChPcGVyYXRpdm9HZW5lcmF0b3IubWFpblREKX0gYXMgXHJcbiAgICAgICAgKHNlbGVjdCB0LmVuYywgdC5qc29uX2VuY3Vlc3RhIGFzIHJlc3B1ZXN0YXMsIHQucmVzdW1lbl9lc3RhZG8gYXMgXCJyZXN1bWVuRXN0YWRvXCIsIFxyXG4gICAgICAgICAgICBqc29uYl9idWlsZF9vYmplY3QoXHJcbiAgICAgICAgICAgICAgICAnZG9taW5pbycgICAgICAgLCBkb21pbmlvICAgICAgICxcclxuICAgICAgICAgICAgICAgICdub21jYWxsZScgICAgICAsIG5vbWNhbGxlICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ3NlY3RvcicgICAgICAgICwgc2VjdG9yICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnZWRpZmljaW8nICAgICAgLCBlZGlmaWNpbyAgICAgICxcclxuICAgICAgICAgICAgICAgICdlbnRyYWRhJyAgICAgICAsIGVudHJhZGEgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ25yb2NhdGFzdHJhbCcgICwgbnJvY2F0YXN0cmFsICAsXHJcbiAgICAgICAgICAgICAgICAncGlzbycgICAgICAgICAgLCBwaXNvICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgICdkZXBhcnRhbWVudG8nICAsIGRlcGFydGFtZW50byAgLFxyXG4gICAgICAgICAgICAgICAgJ2hhYml0YWNpb24nICAgICwgaGFiaXRhY2lvbiAgICAsXHJcbiAgICAgICAgICAgICAgICAnY2FzYScgICAgICAgICAgLCBjYXNhICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgICdwcmlvcmlkYWQnICAgICAsIHJlc2VydmErMSAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ29ic2VydmFjaW9uZXMnICwgdHQuY2FyZ2Ffb2JzZXJ2YWNpb25lcyAsXHJcbiAgICAgICAgICAgICAgICAnY2l0YScgICAgICAgICAgLCBjaXRhICxcclxuICAgICAgICAgICAgICAgICdjYXJnYScgICAgICAgICAsIHQuYXJlYSAgICAgICAgIFxyXG4gICAgICAgICAgICApIGFzIHRlbSwgdC5hcmVhLFxyXG4gICAgICAgICAgICAtLVRPRE86IEdFTkVSQUxJWkFSXHJcbiAgICAgICAgICAgIGpzb25iX2J1aWxkX29iamVjdChcclxuICAgICAgICAgICAgICAgICd0YXJlYScsIHR0LnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgJ2ZlY2hhX2FzaWduYWNpb24nLCBmZWNoYV9hc2lnbmFjaW9uLFxyXG4gICAgICAgICAgICAgICAgJ2FzaWduYWRvJywgYXNpZ25hZG8sXHJcbiAgICAgICAgICAgICAgICAnbWFpbl9mb3JtJywgbWFpbl9mb3JtXHJcbiAgICAgICAgICAgICkgYXMgdGFyZWEsXHJcbiAgICAgICAgICAgIG1pbihmZWNoYV9hc2lnbmFjaW9uKSBhcyBmZWNoYV9hc2lnbmFjaW9uXHJcbiAgICAgICAgICAgIGZyb20gdGVtIHQgbGVmdCBqb2luIHRhcmVhc190ZW0gdHQgb24gKHQub3BlcmF0aXZvID0gdHQub3BlcmF0aXZvIGFuZCB0LmVuYyA9IHR0LmVuYyBhbmQgdC50YXJlYV9hY3R1YWwgPSB0dC50YXJlYSlcclxuICAgICAgICAgICAgICAgICAgICAgICBsZWZ0IGpvaW4gdGFyZWFzIHRhIG9uIHQudGFyZWFfYWN0dWFsID0gdGEudGFyZWFcclxuICAgICAgICAgICAgd2hlcmUgdC5oYWJpbGl0YWRhIGFuZCAke3F1b3RlZENvbmRWaXZ9XHJcbiAgICAgICAgICAgIGdyb3VwIGJ5IHQuZW5jLCB0Lmpzb25fZW5jdWVzdGEsIHQucmVzdW1lbl9lc3RhZG8sIGRvbWluaW8sIG5vbWNhbGxlLHNlY3RvcixlZGlmaWNpbywgZW50cmFkYSwgbnJvY2F0YXN0cmFsLCBwaXNvLGRlcGFydGFtZW50byxoYWJpdGFjaW9uLGNhc2EscmVzZXJ2YSx0dC5jYXJnYV9vYnNlcnZhY2lvbmVzLCBjaXRhLCB0LmFyZWEsIHR0LnRhcmVhLCBmZWNoYV9hc2lnbmFjaW9uLCBhc2lnbmFkbywgbWFpbl9mb3JtXHJcbiAgICAgICAgKVxyXG4gICAgICAgIHNlbGVjdCBqc29uYl9idWlsZF9vYmplY3QoXHJcbiAgICAgICAgICAgICAgICAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKE9wZXJhdGl2b0dlbmVyYXRvci5tYWluVEQpfSwgJHtqc29ubyhcclxuICAgICAgICAgICAgICAgICAgICBgc2VsZWN0IGVuYywgcmVzcHVlc3RhcywganNvbmJfYnVpbGRfb2JqZWN0KCdyZXN1bWVuRXN0YWRvJyxcInJlc3VtZW5Fc3RhZG9cIikgYXMgb3RyYXMgZnJvbSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudChPcGVyYXRpdm9HZW5lcmF0b3IubWFpblREKX1gLFxyXG4gICAgICAgICAgICAgICAgICAgICdlbmMnLFxyXG4gICAgICAgICAgICAgICAgICAgIGBvdHJhcyB8fCBjb2FsZXNjZShyZXNwdWVzdGFzLCd7fSc6Ompzb25iKWBcclxuICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICkgYXMgcmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgJHtqc29uKGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBhLmFyZWEgYXMgY2FyZ2EsIG9ic2VydmFjaW9uZXNfaGRyIGFzIG9ic2VydmFjaW9uZXMsIG1pbihmZWNoYV9hc2lnbmFjaW9uKSBhcyBmZWNoYSwgdGEucmVjZXBjaW9uaXN0YVxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQoT3BlcmF0aXZvR2VuZXJhdG9yLm1haW5URCl9IGF1eCBpbm5lciBqb2luIGFyZWFzIGEgdXNpbmcgKGFyZWEpIGlubmVyIGpvaW4gdGFyZWFzX2FyZWFzIHRhIG9uIChhLmFyZWEgPSB0YS5hcmVhIGFuZCBhdXgudGFyZWEtPj4ndGFyZWEnID0gdGEudGFyZWEpXHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXAgYnkgYS5hcmVhLCBvYnNlcnZhY2lvbmVzX2hkciwgdGEucmVjZXBjaW9uaXN0YSBcclxuICAgICAgICAgICAgICAgICR7cGVybWl0ZUdlbmVyYXJNdWVzdHJhP2BcclxuICAgICAgICAgICAgICAgICAgICB1bmlvbiAtLSBlc3RlIHVuaW9uIHBlcm1pdGUgdmlzdWFsaXphciBhcmVhcyBhc2lnbmFkYXMgc2luIGVuY3Vlc3RhcyBnZW5lcmFkYXNcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3QgYXJlYSBhcyBjYXJnYSwgbnVsbCBhcyBvYnNlcnZhY2lvbmVzLCBudWxsIGFzIGZlY2hhLCByZWNlcGNpb25pc3RhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX2FyZWFzIHdoZXJlIGFzaWduYWRvID0gJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChjb250ZXh0LnVzZXIuaWRwZXIpfSBhbmQgdGFyZWEgPSAnZW5jdSdgOicnfVxyXG4gICAgICAgICAgICAgICAgYCwnZmVjaGEnKX0gYXMgY2FyZ2FzLFxyXG4gICAgICAgICAgICAke2pzb25vKFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBlbmMsIGpzb25iX2J1aWxkX29iamVjdCgndGVtJywgdGVtLCAndGFyZWEnLCB0YXJlYSkgYXMgb3RyYXMgZnJvbSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudChPcGVyYXRpdm9HZW5lcmF0b3IubWFpblREKX1gLFxyXG4gICAgICAgICAgICAgICAgICdlbmMnLFxyXG4gICAgICAgICAgICAgICAgIGBvdHJhcyB8fCd7fSc6Ompzb25iYFxyXG4gICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgYXMgXCJpbmZvcm1hY2lvbkhkclwiXHJcbmBcclxufVxyXG5cclxuZXhwb3J0IHZhciBzZXRIZHJRdWVyeSA9IChteUZ1bjoocXVvdGVkQ29uZFZpdjpzdHJpbmcsIGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGVybWl0ZUdlbmVyYXJNdWVzdHJhOmJvb2xlYW4pPT5zdHJpbmcpPT4gZ2V0SGRyUXVlcnk9bXlGdW5cclxuXHJcbmNvbnN0IGdldFVBUHJpbmNpcGFsID0gYXN5bmMgKGNsaWVudDpDbGllbnQsIG9wZXJhdGl2bzpzdHJpbmcpPT5cclxuICAgIChhd2FpdCBjbGllbnQucXVlcnkoXHJcbiAgICAgICAgYHNlbGVjdCB1bmlkYWRfYW5hbGlzaXNcclxuICAgICAgICAgICAgZnJvbSB1bmlkYWRfYW5hbGlzaXNcclxuICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgcHJpbmNpcGFsXHJcbiAgICAgICAgYFxyXG4gICAgICAgICxcclxuICAgICAgICBbb3BlcmF0aXZvXVxyXG4gICAgKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlXHJcblxyXG52YXIgZnVuY2lvbmVzQ29ub2NpZGFzOntbayBpbiBzdHJpbmddOmJvb2xlYW59ID0ge31cclxuXHJcbnZhciBjb21waWxlciA9IG5ldyBFeHByZXNpb25QYXJzZXIuQ29tcGlsZXIoe1xyXG4gICAgbGFuZ3VhZ2U6J2pzJyxcclxuICAgIHZhcldyYXBwZXI6KHZhcl9uYW1lOnN0cmluZyk9PmBoZWxwZXJzLm51bGwyemVybyh2YWxvcmVzLiR7dmFyX25hbWV9KWAsXHJcbiAgICBmdW5XcmFwcGVyOihmdW5jdGlvbk5hbWU6c3RyaW5nKT0+e1xyXG4gICAgICAgIGlmKCFmdW5jaW9uZXNDb25vY2lkYXNbZnVuY3Rpb25OYW1lXSl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGZ1bmN0aW9uTmFtZSlcclxuICAgICAgICAgICAgZnVuY2lvbmVzQ29ub2NpZGFzW2Z1bmN0aW9uTmFtZV0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYGhlbHBlcnMuZnVucy4ke2Z1bmN0aW9uTmFtZX1gXHJcbiAgICB9XHJcbn0pXHJcblxyXG50eXBlIENhc2lsbGVyb0RlQWNhPXtcclxuICAgIGNoaWxkczogQ2FzaWxsZXJvRGVBY2FbXSxcclxuICAgIGRhdGE6e1xyXG4gICAgICAgIGV4cHJlc2lvbl9oYWJpbGl0YXI6IHN0cmluZ1xyXG4gICAgICAgIGV4cHJlc2lvbl9oYWJpbGl0YXJfanM6IHN0cmluZ1xyXG4gICAgICAgIGVzcGVjaWFsOiBhbnlcclxuICAgICAgICBleHByZXNpb25fYXV0b2luZ3Jlc2FyX2pzOiBzdHJpbmdcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY29tcGlsYXJFeHByZXNpb24oZXhwcmVzaW9uOnN0cmluZyl7XHJcbiAgICByZXR1cm4gY29tcGlsZXIudG9Db2RlKEV4cHJlc2lvblBhcnNlci5wYXJzZShcclxuICAgICAgICBleHByZXNpb25cclxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcYmlzIGRpc3RpbmN0IGZyb21cXGIvZ2ksJyA8PiAnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvISEvZ2ksJyAnKVxyXG4gICAgKSkucmVwbGFjZSgvaGVscGVyc1xcLmZ1bnNcXC5ibGFuY29cXChoZWxwZXJzLm51bGwyemVyb1xcKC9nLCdoZWxwZXJzLmZ1bnMuYmxhbmNvKCgnKVxyXG4gICAgLnJlcGxhY2UoL2hlbHBlcnNcXC5mdW5zXFwuaW5mb3JtYWRvXFwoaGVscGVycy5udWxsMnplcm9cXCgvZywnaGVscGVycy5mdW5zLmluZm9ybWFkbygoJyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbXBpbGFyRXhwcmVzaW9uZXMoY2FzaWxsZXJvOkNhc2lsbGVyb0RlQWNhKXtcclxuICAgIGlmKCFjYXNpbGxlcm8peyByZXR1cm4gfVxyXG4gICAgaWYoY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2hhYmlsaXRhcil7XHJcbiAgICAgICAgY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA9IGNvbXBpbGFyRXhwcmVzaW9uKGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9oYWJpbGl0YXIpO1xyXG4gICAgfVxyXG4gICAgaWYoY2FzaWxsZXJvLmRhdGEuZXNwZWNpYWw/LmF1dG9pbmcpe1xyXG4gICAgICAgIHZhciBwYXJ0ZXMgPSBjYXNpbGxlcm8uZGF0YS5lc3BlY2lhbD8uYXV0b2luZy5zcGxpdCgnPT4nKTtcclxuICAgICAgICBpZihwYXJ0ZXMubGVuZ3RoPjEpe1xyXG4gICAgICAgICAgICB2YXIgcHJlY29uZGljaW9uID0gcGFydGVzWzBdO1xyXG4gICAgICAgICAgICB2YXIgdmFsb3IgPSBwYXJ0ZXMuc2xpY2UoMSkuam9pbignPT4nKTtcclxuICAgICAgICAgICAgY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2F1dG9pbmdyZXNhcl9qcyA9IGAoJHtjb21waWxhckV4cHJlc2lvbihwcmVjb25kaWNpb24pfSk/KCR7Y29tcGlsYXJFeHByZXNpb24odmFsb3IpfSk6bnVsbGA7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9hdXRvaW5ncmVzYXJfanMgPSBjb21waWxhckV4cHJlc2lvbihwYXJ0ZXNbMF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvcih2YXIgY2FzaWxsZXJvSW50ZXJubyBvZiBjYXNpbGxlcm8uY2hpbGRzKSBjb21waWxhckV4cHJlc2lvbmVzKGNhc2lsbGVyb0ludGVybm8pO1xyXG59XHJcblxyXG5jb25zdCBnZW5lcmFyRW5jdWVzdGFUZW0gPSBhc3luYyAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgaTogbnVtYmVyLCBhcmVhOiBudW1iZXIsIGRvbWluaW86IG51bWJlcikgPT4ge1xyXG4gICAgbGV0IGVuYyA9IGdlbmVyYXJJZEVuY0Z1bihhcmVhLCBpKTtcclxuICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICBJTlNFUlQgaW50byB0ZW0gKG9wZXJhdGl2bywgZW5jLCBhcmVhLCBkb21pbmlvLCBoYWJpbGl0YWRhKSB2YWx1ZXMgKCQxLCAkMiwgJDMsICQ0LCAkNSlcclxuICAgICAgICAgICAgb24gY29uZmxpY3QgKG9wZXJhdGl2bywgZW5jKSBkbyBub3RoaW5nYCxcclxuICAgIFtvcGVyYXRpdm8sIGVuYywgYXJlYSwgZG9taW5pbywgdHJ1ZV0pLmV4ZWN1dGUoKTtcclxufVxyXG5cclxuY29uc3QgZ2VuZXJhclRhcmVhc1RlbUZhbHRhbnRlcyA9IGFzeW5jIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvKSA9PiB7XHJcbiAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgaW5zZXJ0IGludG8gdGFyZWFzX3RlbSAob3BlcmF0aXZvLCBlbmMsIHRhcmVhKVxyXG4gICAgICAgICAgICBzZWxlY3QgdGEub3BlcmF0aXZvLCB0YS5lbmMsIHRhLnRhcmVhXHJcbiAgICAgICAgICAgIGZyb20gKHNlbGVjdCB0YS4qLCB0LmVuYyx0LmFyZWEgZnJvbSB0YXJlYXMgdGEsIHRlbSB0IHdoZXJlIHRhLm9wZXJhdGl2bz10Lm9wZXJhdGl2bykgdGEgXHJcbiAgICAgICAgICAgIHdoZXJlIHRhLm9wZXJhdGl2byA9ICQxIFxyXG4gICAgICAgICAgICAgICAgYW5kIG5vdCAodGEub3BlcmF0aXZvLCB0YS5lbmMsIHRhLnRhcmVhKSBpbiAoc2VsZWN0IG9wZXJhdGl2bywgZW5jLCB0YXJlYSBmcm9tIHRhcmVhc190ZW0pXHJcbiAgICAgICAgICAgIG9yZGVyIGJ5IDEsMywyO1xyXG4gICAgYCxbb3BlcmF0aXZvXSkuZXhlY3V0ZSgpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgQUNDSU9OX1BBU0FSX1BST0lFID0gJ2VuY3Vlc3Rhc19wcm9jZXNhbWllbnRvX3Bhc2FyJztcclxuZXhwb3J0IGNvbnN0IFByb2NlZHVyZXNEbUVuY3UgOiBQcm9jZWR1cmVEZWZbXSA9IFtcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246J29wZXJhdGl2b19lc3RydWN0dXJhX2NvbXBsZXRhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgICAgICAsdHlwZU5hbWU6J3RleHQnLCByZWZlcmVuY2VzOidvcGVyYXRpdm9zJ30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByZXN1bHRPazonZGVzcGxlZ2FyRm9ybXVsYXJpbycsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBjYXNpbGxlcm9zX2plcmFycXVpemFkb3MoJDEpIGFzIGZvcm11bGFyaW9zLCBcclxuICAgICAgICAgICAgICAgICAgICAke2pzb25vKGBzZWxlY3QgdW5pZGFkX2FuYWxpc2lzLCBwYWRyZSwgcGtfYWdyZWdhZGEsICd7fSc6Ompzb25iIGFzIGhpamFzIGZyb20gdW5pZGFkX2FuYWxpc2lzIHdoZXJlIG9wZXJhdGl2byA9ICQyYCwgJ3VuaWRhZF9hbmFsaXNpcycpfSBhcyB1bmlkYWRlc19hbmFsaXNpc1xyXG4gICAgICAgICAgICAgICAgYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbWV0ZXJzLm9wZXJhdGl2bywgcGFyYW1ldGVycy5vcGVyYXRpdm9dXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgbGlrZUFyKHJlc3VsdC5yb3cuZm9ybXVsYXJpb3MpLmZvckVhY2goZj0+Y29tcGlsYXJFeHByZXNpb25lcyhmKSk7XHJcbiAgICAgICAgICAgIC8vIEhlcm1hbm9zIHNvbiBsb3MgZm9ybXVsYXJpb3MgcXVlIGVzdMOhbiBpbXBsYW50YWRvcyBlbiBvdHJvIGZvcm11bGFyaW8gZGUgbGEgbWlzbWEgVUEuIFBvciBlamVtcGxvIGVsIEExIGVuIGVsIFMxXHJcbiAgICAgICAgICAgIHZhciByZXN1bHRIZXJtYW5vcyA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuc2VsZWN0IG8uaWRfY2FzaWxsZXJvIGFzIGlkX2Zvcm11bGFyaW8sIG8udW5pZGFkX2FuYWxpc2lzLCAnQkZfJ3x8by5jYXNpbGxlcm8gYm90b24sIGJmLmNhc2lsbGVybywgYmYucGFkcmUsIGZwLmNhc2lsbGVybywgZnAudW5pZGFkX2FuYWxpc2lzXHJcbiAgZnJvbSBjYXNpbGxlcm9zIG8gbGVmdCBqb2luIGNhc2lsbGVyb3MgYmZcclxuICAgIG9uIGJmLnRpcG9jPSdCRidcclxuXHRhbmQgYmYuY2FzaWxsZXJvID0gJ0JGXyd8fG8uY2FzaWxsZXJvXHJcblx0YW5kIGJmLm9wZXJhdGl2byA9IG8ub3BlcmF0aXZvXHJcblx0bGVmdCBqb2luIGNhc2lsbGVyb3MgZnBcclxuXHQgIG9uIGZwLmlkX2Nhc2lsbGVybyA9IGJmLnBhZHJlXHJcblx0ICBhbmQgZnAub3BlcmF0aXZvID0gYmYub3BlcmF0aXZvXHJcbiAgd2hlcmUgby50aXBvYyA9ICdGJ1xyXG4gICAgYW5kIG8udW5pZGFkX2FuYWxpc2lzID0gZnAudW5pZGFkX2FuYWxpc2lzXHJcblx0YW5kIG8ub3BlcmF0aXZvID0gJDFgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtZXRlcnMub3BlcmF0aXZvXVxyXG4gICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIHJlc3VsdEhlcm1hbm9zLnJvd3MuZm9yRWFjaChyb3c9PntcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5yb3cuZm9ybXVsYXJpb3Nbcm93LmlkX2Zvcm11bGFyaW9dLmRhdGEuaGVybWFubyA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRhclVBKHVhOlVuaWRhZEFuYWxpc2lzLCBpZFVhOklkVW5pZGFkQW5hbGlzaXMsIHVBczp7W2sgaW4gSWRVbmlkYWRBbmFsaXNpc106IFVuaWRhZEFuYWxpc2lzfSl7XHJcbiAgICAgICAgICAgICAgICBpZih1YS5wYWRyZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdUFzW3VhLnBhZHJlXS5oaWphc1tpZFVhXSA9IHVhO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgdWEucHJpbmNpcGFsPXRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGlrZUFyKHJlc3VsdC5yb3cudW5pZGFkZXNfYW5hbGlzaXMpLmZvckVhY2goKHVhLCBpZFVhKT0+XHJcbiAgICAgICAgICAgICAgICBjb21wbGV0YXJVQSh1YSwgaWRVYSBhcyBJZFVuaWRhZEFuYWxpc2lzLCByZXN1bHQucm93LnVuaWRhZGVzX2FuYWxpc2lzKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIHZhciB7XHJcbiAgICAgICAgICAgICAgICBjb25fcmVhX2hvZ2FyOiBjb25SZWFIb2dhciwgXHJcbiAgICAgICAgICAgICAgICBjb25maWdfc29ydGVvOiBjb25maWdTb3J0ZW8sIFxyXG4gICAgICAgICAgICAgICAgaGFiaWxpdGFjaW9uX2JvdG9uX2Zvcm11bGFyaW86aGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmE6IHBlcm1pdGVHZW5lcmFyTXVlc3RyYVxyXG4gICAgICAgICAgICB9ID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBjb25maWdfc29ydGVvLCBjb25fcmVhX2hvZ2FyLCBoYWJpbGl0YWNpb25fYm90b25fZm9ybXVsYXJpbywgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmEgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBvcGVyYXRpdm9zIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxXHJcbiAgICAgICAgICAgIGAsW3BhcmFtZXRlcnMub3BlcmF0aXZvXSkuZmV0Y2hVbmlxdWVSb3coKSkucm93O1xyXG4gICAgICAgICAgICBsZXQgY29tcGlsYXJFeHByZXNpb25lc0RvbWluaW9zID0gKGV4cHJlc2lvbmVzRG9taW5pbzphbnkpPT4gXHJcbiAgICAgICAgICAgICAgICBsaWtlQXIoZXhwcmVzaW9uZXNEb21pbmlvKVxyXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGV4cHIsZG9taW5pbyk9Pih7ZG9taW5pbywgZXhwcjpjb21waWxhckV4cHJlc2lvbihleHByLmV4cHIpfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgLnBsYWluKCk7XHJcbiAgICAgICAgICAgIGlmKGNvbmZpZ1NvcnRlbyl7XHJcbiAgICAgICAgICAgICAgICBsaWtlQXIoY29uZmlnU29ydGVvKS5mb3JFYWNoKChjb25maWdTb3J0ZW9Gb3JtdWxhcmlvKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZXhwcl9pbmNvbXBsZXRpdHVkX2pzPWNvbXBpbGFyRXhwcmVzaW9uZXNEb21pbmlvcyhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmV4cHJfaW5jb21wbGV0aXR1ZClcclxuICAgICAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmZpbHRyb19qcz1jb21waWxhckV4cHJlc2lvbmVzRG9taW5pb3MoY29uZmlnU29ydGVvRm9ybXVsYXJpby5maWx0cm8pXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyl7XHJcbiAgICAgICAgICAgICAgICBsaWtlQXIoaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvKS5mb3JFYWNoKChmb3JtKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm0uZXhwcl9oYWJpbGl0YXJfYm90b25fanM9Y29tcGlsYXJFeHByZXNpb24oZm9ybS5leHByX2hhYmlsaXRhcl9ib3RvbilcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGRlZmF1bHRUYXJlYSA9IGF3YWl0IGdldERlZmF1bHRUYXJlYShjb250ZXh0KTtcclxuICAgICAgICAgICAgdmFyIGRlZmF1bHRJbmZvcm1hY2lvbkhkciA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgIFxyXG4gICAgICAgICAgICAgICAgICAgIGpzb25iX2J1aWxkX29iamVjdChcclxuICAgICAgICAgICAgICAgICAgICAnZG9taW5pbycgICAgICAgLCAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKERFRkFVTFRfRE9NSU5JTyl9LFxyXG4gICAgICAgICAgICAgICAgICAgICdub21jYWxsZScgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdzZWN0b3InICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdlZGlmaWNpbycgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdlbnRyYWRhJyAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICducm9jYXRhc3RyYWwnICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdwaXNvJyAgICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdkZXBhcnRhbWVudG8nICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdoYWJpdGFjaW9uJyAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdjYXNhJyAgICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdwcmlvcmlkYWQnICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdvYnNlcnZhY2lvbmVzJyAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdjaXRhJyAgICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdjYXJnYScgICAgICAgICAsIG51bGwgICAgICAgICBcclxuICAgICAgICAgICAgICAgICkgYXMgdGVtLFxyXG4gICAgICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgICAgICd0YXJlYScsICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoZGVmYXVsdFRhcmVhLnRhcmVhKX0sXHJcbiAgICAgICAgICAgICAgICAgICAgJ2ZlY2hhX2FzaWduYWNpb24nLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICdhc2lnbmFkbycsICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoY29udGV4dC51c2VyLmlkcGVyKX0sXHJcbiAgICAgICAgICAgICAgICAgICAgJ21haW5fZm9ybScsICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoZGVmYXVsdFRhcmVhLm1haW5fZm9ybSl9XHJcbiAgICAgICAgICAgICAgICApIGFzIHRhcmVhXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW11cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3c7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiBiZS5jYWNoZXMudGltZXN0YW1wRXN0cnVjdHVyYSwgXHJcbiAgICAgICAgICAgICAgICAuLi5yZXN1bHQucm93LCBcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2bzpwYXJhbWV0ZXJzLm9wZXJhdGl2bywgXHJcbiAgICAgICAgICAgICAgICBjb25SZWFIb2dhciwgXHJcbiAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW8sIFxyXG4gICAgICAgICAgICAgICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLCBcclxuICAgICAgICAgICAgICAgIHBlcm1pdGVHZW5lcmFyTXVlc3RyYSwgXHJcbiAgICAgICAgICAgICAgICBub1JlYXM6YmUuY2FjaGVzLnRhYmxlQ29udGVudC5ub19yZWEsIFxyXG4gICAgICAgICAgICAgICAgbm9SZWFzU3VwOmJlLmNhY2hlcy50YWJsZUNvbnRlbnQubm9fcmVhX3N1cCwgXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0SW5mb3JtYWNpb25IZHIsXHJcbiAgICAgICAgICAgICAgICBtYWluVEQ6IE9wZXJhdGl2b0dlbmVyYXRvci5tYWluVEQsXHJcbiAgICAgICAgICAgICAgICBtYWluVERQSzogT3BlcmF0aXZvR2VuZXJhdG9yLm1haW5URFBLXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246J2dlbmVyYXJfZm9ybXVsYXJpb3MnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonYW5uaW8nLCB0eXBlTmFtZTonaW50ZWdlcicsIHJlZmVyZW5jZXM6J2FubmlvJ30sXHJcbiAgICAgICAgICAgIHtuYW1lOidtZXMnICAsIHR5cGVOYW1lOidpbnRlZ2VyJywgcmVmZXJlbmNlczonbWVzJyAgfSxcclxuICAgICAgICAgICAge25hbWU6J2xvdGUnICwgdHlwZU5hbWU6J2ludGVnZXInLCByZWZlcmVuY2VzOidsb3Rlcyd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlPWNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdFVBID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0ICpcclxuICAgICAgICAgICAgICAgICAgIGZyb20gdW5pZGFkX2FuYWxpc2lzXHJcbiAgICAgICAgICAgICAgICAgICB3aGVyZSBwcmluY2lwYWwgPSB0cnVlIGFuZCBvcGVyYXRpdm8gPSAkMVxyXG4gICAgICAgICAgICAgICAgYCxcclxuICAgICAgICAgICAgICAgIFtPUEVSQVRJVk9dXHJcbiAgICAgICAgICAgICkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0VUEucm93Q291bnQgPT09IDApe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBzZSBjb25maWd1csOzIHVuYSB1bmlkYWQgZGUgYW5hbGlzaXMgY29tbyBwcmluY2lwYWwnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgcm93ID0gcmVzdWx0VUEucm93O1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0UHJlZ3VudGFzID0gYXdhaXQgYmUucHJvY2VkdXJlLnByZWd1bnRhc191YV90cmFlci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcm93KVxyXG4gICAgICAgICAgICB2YXIgY29udGVuZWRvclZhY2lvOntba2V5OnN0cmluZ106YW55fSA9IHt9O1xyXG4gICAgICAgICAgICByZXN1bHRQcmVndW50YXMuZm9yRWFjaChmdW5jdGlvbihkZWZQcmVndW50YSl7XHJcbiAgICAgICAgICAgICAgICBjb250ZW5lZG9yVmFjaW9bZGVmUHJlZ3VudGEudmFyX25hbWVdID0gZGVmUHJlZ3VudGEudW5pZGFkX2FuYWxpc2lzP1tdOm51bGw7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb250ZW5lZG9yVmFjaW8uYW5uaW89IHBhcmFtZXRlcnMuYW5uaW87XHJcbiAgICAgICAgICAgIGNvbnRlbmVkb3JWYWNpby5tZXMgID0gcGFyYW1ldGVycy5tZXMgIDtcclxuICAgICAgICAgICAgY29udGVuZWRvclZhY2lvLmxvdGUgPSBwYXJhbWV0ZXJzLmxvdGUgO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBkZWJlX2hhYmVyLmlkX2Nhc28sIHMgYXMgaWRcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIChzZWxlY3QgbG90ZSwgYXJtYXJfaWQoYW5uaW8sIG1lcywgbG90ZSwgcykgYXMgaWRfY2Fzbywgc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIChzZWxlY3QgYW5uaW8sbWVzLGxvdGUsIGNhbnRfY3VlcyBmcm9tIGxvdGVzIHdoZXJlIChhbm5pbyxtZXMsbG90ZSk9KCQyLCQzLCQ0KSkgciwgbGF0ZXJhbCBnZW5lcmF0ZV9zZXJpZXMoMSxjYW50X2N1ZXMpIHNcclxuICAgICAgICAgICAgICAgICAgICApIGRlYmVfaGFiZXIgbGVmdCBqb2luIGRlZmdlbiBoYXkgb24gaGF5LmlkX2Nhc28gPSBkZWJlX2hhYmVyLmlkX2Nhc28gYW5kIGhheS5vcGVyYXRpdm89JDFcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBoYXkuaWRfY2FzbyBpcyBudWxsYCxcclxuICAgICAgICAgICAgICAgIFsgT1BFUkFUSVZPLCBwYXJhbWV0ZXJzLmFubmlvLCBwYXJhbWV0ZXJzLm1lcywgcGFyYW1ldGVycy5sb3RlXVxyXG4gICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIHZhciBwYXJhbXMgPSB7b3BlcmF0aXZvOiBPUEVSQVRJVk99O1xyXG4gICAgICAgICAgICBmb3IodmFyIGk9MDsgaSA8IHJlc3VsdC5yb3dDb3VudDsgaSsrKXtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5jYXNvX2d1YXJkYXIuY29yZUZ1bmN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQsIFxyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5naW5nKHBhcmFtcyx7aWRfY2FzbzpyZXN1bHQucm93c1tpXS5pZF9jYXNvLCBkYXRvc19jYXNvOmNoYW5naW5nKGNvbnRlbmVkb3JWYWNpbyx7aWQ6cmVzdWx0LnJvd3NbaV0uaWR9KX0pXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHthZ3JlZ2FkYXM6cmVzdWx0LnJvd0NvdW50fVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOid1cGxvYWRfZmlsZScsXHJcbiAgICAgICAgcHJvZ3Jlc3M6IHRydWUsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOiAnaWRfYWRqdW50bycsIHR5cGVOYW1lOiAnaW50ZWdlcid9LFxyXG4gICAgICAgICAgICB7bmFtZTogJ25vbWJyZScsIHR5cGVOYW1lOiAndGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgZmlsZXM6e2NvdW50OjF9LFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjpmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycywgZmlsZXMpe1xyXG4gICAgICAgICAgICBsZXQgYmU9Y29udGV4dC5iZTtcclxuICAgICAgICAgICAgbGV0IGNsaWVudD1jb250ZXh0LmNsaWVudDtcclxuICAgICAgICAgICAgY29udGV4dC5pbmZvcm1Qcm9ncmVzcyh7bWVzc2FnZTpiZS5tZXNzYWdlcy5maWxlVXBsb2FkZWR9KTtcclxuICAgICAgICAgICAgbGV0IGZpbGUgPSBmaWxlc1swXVxyXG4gICAgICAgICAgICBsZXQgZXh0ID0gcGF0aC5leHRuYW1lKGZpbGUucGF0aCkuc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICBsZXQgb3JpZ2luYWxGaWxlbmFtZSA9IGZpbGUub3JpZ2luYWxGaWxlbmFtZS5zbGljZSgwLC0oZXh0Lmxlbmd0aCsxKSk7XHJcbiAgICAgICAgICAgIGxldCBmaWxlbmFtZT0gcGFyYW1ldGVycy5ub21icmUgfHwgb3JpZ2luYWxGaWxlbmFtZTtcclxuICAgICAgICAgICAgbGV0IG5ld1BhdGggPSAnbG9jYWwtYXR0YWNobWVudHMvZmlsZS0nO1xyXG4gICAgICAgICAgICB2YXIgY3JlYXRlUmVzcG9uc2UgPSBmdW5jdGlvbiBjcmVhdGVSZXNwb25zZShhZGp1bnRvUm93KXtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0xhIHN1YmlkYSBzZSByZWFsaXrDsyBjb3JyZWN0YW1lbnRlICh1cGRhdGUpJyxcclxuICAgICAgICAgICAgICAgICAgICBub21icmU6IGFkanVudG9Sb3cubm9tYnJlLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vbWJyZV9vcmlnaW5hbDogYWRqdW50b1Jvdy5ub21icmVfb3JpZ2luYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgZXh0OiBhZGp1bnRvUm93LmV4dCxcclxuICAgICAgICAgICAgICAgICAgICBmZWNoYTogYWRqdW50b1Jvdy5mZWNoYSxcclxuICAgICAgICAgICAgICAgICAgICBob3JhOiBhZGp1bnRvUm93LmhvcmEsXHJcbiAgICAgICAgICAgICAgICAgICAgaWRfYWRqdW50bzogYWRqdW50b1Jvdy5pZF9hZGp1bnRvXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0YWRvXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIG1vdmVGaWxlID0gZnVuY3Rpb24gbW92ZUZpbGUoZmlsZSwgaWRfYWRqdW50bywgZXh0ZW5zaW9uKXtcclxuICAgICAgICAgICAgICAgIGZzLm1vdmUoZmlsZS5wYXRoLCBuZXdQYXRoICsgaWRfYWRqdW50byArICcuJyArIGV4dGVuc2lvbiwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgIGlmKHBhcmFtZXRlcnMuaWRfYWRqdW50byl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY2xpZW50LnF1ZXJ5KGB1cGRhdGUgYWRqdW50b3Mgc2V0IG5vbWJyZT0gJDEsbm9tYnJlX29yaWdpbmFsID0gJDIsIGV4dCA9ICQzLCBydXRhID0gY29uY2F0KCdsb2NhbC1hdHRhY2htZW50cy9maWxlLScsJDQ6OnRleHQsJy4nLCQzOjp0ZXh0KSwgZmVjaGEgPSBub3coKSwgaG9yYSA9IGRhdGVfdHJ1bmMoJ3NlY29uZHMnLGN1cnJlbnRfdGltZXN0YW1wLWN1cnJlbnRfZGF0ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgaWRfYWRqdW50byA9ICQ0IHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbGVuYW1lLCBvcmlnaW5hbEZpbGVuYW1lLCBleHQsIHBhcmFtZXRlcnMuaWRfYWRqdW50b11cclxuICAgICAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVzcG9uc2UocmVzdWx0LnJvdylcclxuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdGFkbyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVGaWxlKGZpbGUscmVzdWx0YWRvLmlkX2FkanVudG8scmVzdWx0YWRvLmV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRhZG9cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNsaWVudC5xdWVyeShgaW5zZXJ0IGludG8gYWRqdW50b3MgKG5vbWJyZSwgbm9tYnJlX29yaWdpbmFsLCBleHQsIGZlY2hhLCBob3JhKSB2YWx1ZXMgKCQxLCQyLCQzLG5vdygpLCBkYXRlX3RydW5jKCdzZWNvbmRzJyxjdXJyZW50X3RpbWVzdGFtcC1jdXJyZW50X2RhdGUpKSByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaWxlbmFtZSwgb3JpZ2luYWxGaWxlbmFtZSwgZXh0XVxyXG4gICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNsaWVudC5xdWVyeShgdXBkYXRlIGFkanVudG9zIHNldCBydXRhID0gY29uY2F0KCdsb2NhbC1hdHRhY2htZW50cy9maWxlLScsaWRfYWRqdW50bzo6dGV4dCwnLicsZXh0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgaWRfYWRqdW50byA9ICQxIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQucm93LmlkX2FkanVudG9dXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVzcG9uc2UocmVzdWx0LnJvdylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbihyZXN1bHRhZG8pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZUZpbGUoZmlsZSxyZXN1bHRhZG8uaWRfYWRqdW50byxyZXN1bHRhZG8uZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRhZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycil7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOidjYXNvX2d1YXJkYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICwgdHlwZU5hbWU6J3RleHQnLCByZWZlcmVuY2VzOidvcGVyYXRpdm9zJ30sXHJcbiAgICAgICAgICAgIHtuYW1lOidpZF9jYXNvJyAgICAgLCB0eXBlTmFtZTondGV4dCcgICAgICB9LFxyXG4gICAgICAgICAgICB7bmFtZTonZGF0b3NfY2FzbycgICwgdHlwZU5hbWU6J2pzb25iJyAgICAgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGRlZmluZWRJbjogJ2RtZW5jdScsXHJcbiAgICAgICAgLy9AdHMtaWdub3JlIGVzcGVjaWZpY28gZWwgdGlwbyBkZSBsb3MgcGFyw6FtZXRyb3NcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOntcclxuICAgICAgICAgICAgb3BlcmF0aXZvOnN0cmluZywgXHJcbiAgICAgICAgICAgIGlkX2Nhc286c3RyaW5nLFxyXG4gICAgICAgICAgICBkYXRvc19jYXNvOkFueU9iamVjdFxyXG4gICAgICAgIH0sbmV3Q2xpZW50OkNsaWVudCl7XHJcbiAgICAgICAgICAgIHZhciBjbGllbnQ9bmV3Q2xpZW50IHx8IGNvbnRleHQuY2xpZW50O1xyXG4gICAgICAgICAgICB2YXIgZGF0b3NfanNvbj1wYXJhbWV0ZXJzLmRhdG9zX2Nhc287XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciB0YWJsZVN0cnVjdHVyZXNfYXBwOlRhYmxlRGVmaW5pdGlvbnMgPSBiZS50YWJsZVN0cnVjdHVyZXM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBzdHJ1Y3RfZG1lbmN1ID0gY3JlYXRlU3RydWN0dXJlKGNvbnRleHQsIE9wZXJhdGl2b0dlbmVyYXRvci5tYWluVEQpO1xyXG4gICAgICAgICAgICBkYXRvc19qc29uWydvcGVyYXRpdm8nXSA9IHBhcmFtZXRlcnMub3BlcmF0aXZvO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZGF0b3NfanNvbltPcGVyYXRpdm9HZW5lcmF0b3IubWFpblREUEtdID0gcGFyYW1ldGVycy5pZF9jYXNvO1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBjb21wbGV0YXJfdWx0X3BrX2VuX2FyciggdWx0X3BrLCB1YV9hcnIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbl9wa19jb21wbGV0YT11YV9hcnI7IFxyXG4gICAgICAgICAgICAgICAgaWYgKHVhX2FyciAmJiB1YV9hcnIubGVuZ3RoPj0xKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25fcGtfY29tcGxldGE9IGNvbl9wa19jb21wbGV0YS5tYXAoKHVuYV91YSxpKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmFfdWFbdWx0X3BrXT1pKzEgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuYV91YTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb25fcGtfY29tcGxldGFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmdW5jdGlvbiByZWNvcnJlcl9kYXRvc19hZ3JlZ2FuZG9fcGtzKGRhdG9zaikge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5TmFtZSBpbiBkYXRvc2opIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0b0sgPSBkYXRvc2pba2V5TmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdG9LIGluc3RhbmNlb2YgQXJyYXkgJiYgZGF0b0subGVuZ3RoID49IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBrID0gdGFibGVTdHJ1Y3R1cmVzX2FwcFtrZXlOYW1lXShjb250ZXh0KS5wcmltYXJ5S2V5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWx0X3BrID0gcGtbcGsubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdG9LID0gY29tcGxldGFyX3VsdF9wa19lbl9hcnIodWx0X3BrLCBkYXRvSyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdG9LLmZvckVhY2goKGVsZW1JKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtST1yZWNvcnJlcl9kYXRvc19hZ3JlZ2FuZG9fcGtzKGVsZW1JKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5TmFtZS5zdGFydHNXaXRoKCckJyl8fGtleU5hbWUuc3RhcnRzV2l0aCgnXycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRvc2pba2V5TmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9zajtcclxuICAgICAgICAgICAgfSAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBkYXRvc19qc29uID0gcmVjb3JyZXJfZGF0b3NfYWdyZWdhbmRvX3BrcyhkYXRvc19qc29uKTtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24uY29kUmVhO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5jb2ROb1JlYTtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24ucmVzdW1lbkVzdGFkbztcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24uY29kUmVhU3VwO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5jb2ROb1JlYVN1cDtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24ucmVzdW1lbkVzdGFkb1N1cDtcclxuXHJcbiAgICAgICAgICAgIGlmKCBPYmplY3Qua2V5cyhkYXRvc19qc29uKS5sZW5ndGggPjIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHF1ZXJpZXMgPSBzcWxUb29scy5zdHJ1Y3R1cmVkRGF0YS5zcWxXcml0ZShkYXRvc19qc29uLCBzdHJ1Y3RfZG1lbmN1KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBxdWVyaWVzLnJlZHVjZShmdW5jdGlvbihwcm9taXNlLCBxdWVyeSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsaWVudC5xdWVyeShxdWVyeSkuZXhlY3V0ZSgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sUHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJva1wiO1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyOkVycm9yKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImNhc29fZ3VhcmRhciBFTlRSQSBFTiBFTCBDQVRDSDogXCIsZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3ZhY2lvJztcclxuICAgICAgICAgICAgfSAgICBcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2Nhc29fdHJhZXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgLy97bmFtZTonZm9ybXVsYXJpbycgICAgLCAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICxyZWZlcmVuY2VzOidvcGVyYXRpdm9zJywgIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidpZF9jYXNvJyAgICAgICAsdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJlc3VsdE9rOiAnZ29Ub0VuYycsXHJcbiAgICAgICAgZGVmaW5lZEluOiAnZG1lbmN1JyxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgY2xpZW50PWNvbnRleHQuY2xpZW50O1xyXG4gICAgICAgICAgICAgdmFyIHN0cnVjdF9kbWVuY3UgPSBjcmVhdGVTdHJ1Y3R1cmUoY29udGV4dCwgT3BlcmF0aXZvR2VuZXJhdG9yLm1haW5URCk7XHJcbiAgICAgICAgICAgIHZhciBzcWwgPSBzcWxUb29scy5zdHJ1Y3R1cmVkRGF0YS5zcWxSZWFkKHtvcGVyYXRpdm86IHBhcmFtZXRlcnMub3BlcmF0aXZvLCBbT3BlcmF0aXZvR2VuZXJhdG9yLm1haW5URFBLXTpwYXJhbWV0ZXJzLmlkX2Nhc299LCBzdHJ1Y3RfZG1lbmN1KTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNsaWVudC5xdWVyeShzcWwpLmZldGNoVW5pcXVlVmFsdWUoKTtcclxuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0ge1xyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBwYXJhbWV0ZXJzLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGlkX2Nhc286IHBhcmFtZXRlcnMuaWRfY2FzbyxcclxuICAgICAgICAgICAgICAgIGRhdG9zX2Nhc286IHJlc3VsdC52YWx1ZSxcclxuICAgICAgICAgICAgICAgIC8vZm9ybXVsYXJpbzogZm9ybVByaW5jaXBhbCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnY2Fzb190cmFlcl9vX2NyZWFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAscmVmZXJlbmNlczonb3BlcmF0aXZvcycsICB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonaWRfY2FzbycgICAgICAgLHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByZXN1bHRPazogJ2dvVG9FbmMnLFxyXG4gICAgICAgIC8vIGJpdGFjb3JhOnthbHdheXM6dHJ1ZX0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGJlLnByb2NlZHVyZVsnY2Fzb190cmFlciddLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICB2YXIganNvbiA9IGF3YWl0IGJlLnByb2NlZHVyZVsnY2Fzb19wcmVwYXJhciddLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZVsnY2Fzb19ndWFyZGFyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIGNoYW5naW5nKHBhcmFtZXRlcnMsIHtkYXRvc19jYXNvOmpzb259KSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgYmUucHJvY2VkdXJlWydjYXNvX3RyYWVyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246J3Bhc2FyX2pzb24ydWEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgX3BhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIC8qIEdFTkVSQUxJWkFSOiAqL1xyXG4gICAgICAgICAgICB2YXIgYmU9Y29udGV4dC5iZTtcclxuICAgICAgICAgICAgLyogRklOLUdFTkVSQUxJWkFSOiAqL1xyXG4gICAgICAgICAgICBjb25zdCBPUEVSQVRJVk8gPSBhd2FpdCBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dCk7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHRNYWluID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFNFTEVDVCAqIEZST00gJHtPcGVyYXRpdm9HZW5lcmF0b3IubWFpblREfSBMSU1JVCAxYCkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgaWYocmVzdWx0TWFpbi5yb3dDb3VudD4wKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdIQVkgREFUT1MnLHJlc3VsdE1haW4ucm93cylcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSEFZIERBVE9TLiBOTyBTRSBQVUVERSBJTklDSUFSIEVMIFBBU0FKRScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCByZXN1bHRKc29uID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgU0VMRUNUIG9wZXJhdGl2bywgZW5jIGlkX2Nhc28sIGpzb25fZW5jdWVzdGEgZGF0b3NfY2FzbyBmcm9tIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBXSEVSRSBvcGVyYXRpdm89JDEgYW5kIHJlc3VtZW5fZXN0YWRvIGlzIGRpc3RpbmN0IGZyb20gJ3ZhY2lvJyBhbmQganNvbl9lbmN1ZXN0YSBpcyBub3QgbnVsbCBcclxuICAgICAgICAgICAgICAgICAgICBvcmRlciBieSBlbmMgYCxcclxuICAgICAgICAgICAgICAgIFtPUEVSQVRJVk9dXHJcbiAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgdmFyIHByb2NlZHVyZUd1YXJkYXIgPSBiZS5wcm9jZWR1cmUuY2Fzb19ndWFyZGFyO1xyXG4gICAgICAgICAgICBpZihwcm9jZWR1cmVHdWFyZGFyLmRlZmluZWRJbiE9J2RtZW5jdScpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoYXkgcXVlIHNvYnJlZXNjcmliaXIgY2Fzb19ndWFyZGFyJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJlc3VsdEpzb24ucm93cy5tYXAoYXN5bmMgZnVuY3Rpb24ocm93KXtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSBgaWQgY2FzbyAke3Jvdy5pZF9jYXNvfTogYDtcclxuICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBiZS5pblRyYW5zYWN0aW9uKG51bGwsIGFzeW5jIGZ1bmN0aW9uKGNsaWVudCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbys9IGF3YWl0IHByb2NlZHVyZUd1YXJkYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHJvdywgY2xpZW50KTsgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBlcnJNZXNzYWdlID0gcmVzdWx0YWRvICsgXCJqc29uMnVhIGVycm9yLiBcIisgZXJyIDtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG8gPSBlcnJNZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyTWVzc2FnZSlcclxuICAgICAgICAgICAgICAgIH0gICAgIFxyXG4gICAgICAgICAgICAgICAgaWYocmVzdWx0YWRvLmluY2x1ZGVzKCdvaycpKXsgXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHtkYXRvc19jYXNvLCBpZF9jYXNvLCBvcGVyYXRpdm99ID0gYXdhaXQgYmUucHJvY2VkdXJlLmNhc29fdHJhZXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHtvcGVyYXRpdm86cm93Lm9wZXJhdGl2bywgaWRfY2Fzbzpyb3cuaWRfY2Fzb30pXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZlclF1ZUdyYWJvID0ge2RhdG9zX2Nhc28sIGlkX2Nhc28sIG9wZXJhdGl2b31cclxuICAgICAgICAgICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2NyZXBhbmNlcy5zaG93QW5kVGhyb3codmVyUXVlR3JhYm8scm93KVxyXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2ZXJRdWVHcmFibyxyb3cpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdGFkbztcclxuICAgICAgICAgICAgfSkpLmNhdGNoKGZ1bmN0aW9uKGVycil7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246J2RtX2ZvcnBrcmFpel9jYXJnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3BrX3JhaXpfdmFsdWUnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCcsIHJlZmVyZW5jZXM6XCJ0YXJlYXNcIn0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBiZT1jb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIge29wZXJhdGl2byxwa19yYWl6X3ZhbHVlLCB0YXJlYX0gPSBwYXJhbWV0ZXJzO1xyXG4gICAgICAgICAgICB2YXIgbWFpbl9mb3JtID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBtYWluX2Zvcm1cclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIHRhcmVhPSQyYFxyXG4gICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgdGFyZWFdXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgICAgICAgICAgdmFyIGNvbmR2aXY9IGAgdC5vcGVyYXRpdm89ICQxIGFuZCB0LmVuYyA9JDJgO1xyXG4gICAgICAgICAgICB2YXIgc29sb0xlY3R1cmEgPSAhIShhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgc2VsZWN0ICpcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW0gam9pbiBlc3RhZG9zIHVzaW5nIChvcGVyYXRpdm8sIGVzdGFkbykgLS1wayBlc3RhZG8gdmVyaWZpY2FkYVxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcmdhZG9fZG0gaXMgbm90IG51bGwgb3IgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBwZXJtaXRlX2VkaXRhcl9lbmN1ZXN0YSBhbmQgYXNpZ25hZG8gPD4gJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChjb250ZXh0LnVzZXIuaWRwZXIpfVxyXG4gICAgICAgICAgICAgICAgICAgIClgLCBbb3BlcmF0aXZvLCBwa19yYWl6X3ZhbHVlXSkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpKS5yb3dDb3VudDtcclxuICAgICAgICAgICAgdmFyIHBlcm1pdGVHZW5lcmFyTXVlc3RyYSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmEgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBvcGVyYXRpdm9zIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxXHJcbiAgICAgICAgICAgIGAsW29wZXJhdGl2b10pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgIHZhciB7cm93fSA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGdldEhkclF1ZXJ5KGNvbmR2aXYsIGNvbnRleHQsIHBlcm1pdGVHZW5lcmFyTXVlc3RyYSksW29wZXJhdGl2byxwa19yYWl6X3ZhbHVlXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcm93LmluZm9ybWFjaW9uSGRyW3BrX3JhaXpfdmFsdWVdLnRhcmVhPXtcclxuICAgICAgICAgICAgICAgIHRhcmVhLFxyXG4gICAgICAgICAgICAgICAgbWFpbl9mb3JtXHJcbiAgICAgICAgICAgIH0gO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4ucm93LFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgc29sb0xlY3R1cmEsXHJcbiAgICAgICAgICAgICAgICBpZHBlcjpjb250ZXh0LnVzZXIuaWRwZXIsXHJcbiAgICAgICAgICAgICAgICBjYXJnYXM6bGlrZUFyLmNyZWF0ZUluZGV4KHJvdy5jYXJnYXMubWFwKGNhcmdhPT4oey4uLmNhcmdhLCBmZWNoYTpjYXJnYS5mZWNoYT9kYXRlLmlzbyhjYXJnYS5mZWNoYSkudG9EbXkoKTpudWxsfSkpLCAnY2FyZ2EnKSxcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcEVzdHJ1Y3R1cmE6YmUuY2FjaGVzLnRpbWVzdGFtcEVzdHJ1Y3R1cmFcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjonZG1fZm9ycGtyYWl6X2Rlc2NhcmdhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZToncGVyc2lzdGVudGVzJyAgICAgICwgdHlwZU5hbWU6J2pzb25iJ30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBiZT1jb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIge29wZXJhdGl2bywgcGVyc2lzdGVudGVzfSA9IHBhcmFtZXRlcnM7XHJcbiAgICAgICAgICAgIGNvbnN0IFVBX1BSSU5DSVBBTCA9IGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBvcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChsaWtlQXIocGVyc2lzdGVudGVzLnJlc3B1ZXN0YXNbVUFfUFJJTkNJUEFMXSkubWFwKGFzeW5jIChyZXNwdWVzdGFzVUFQcmluY2lwYWwsaWRFbmMpPT57XHJcbiAgICAgICAgICAgICAgICBpZihyZXNwdWVzdGFzVUFQcmluY2lwYWwuczFhMV9vYnMgPT0gJyFwcnVlYmEgZGUgZXJyb3IgYWwgZ3JhYmFyIScpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRElPIFBSVUVCQSBERSBFUlJPUiBBTCBHUkFCQVInKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IGd1YXJkYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQsIG9wZXJhdGl2bywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCwgcGVyc2lzdGVudGVzLmluZm9ybWFjaW9uSGRyW2lkRW5jXS50YXJlYS50YXJlYSk7XHJcbiAgICAgICAgICAgICAgICAvL2d1YXJkYXIgcGFyYWxlbGFtZW50ZSBlbiB0YWJsYXMgdWFcclxuICAgICAgICAgICAgICAgIHZhciBwcm9jZWR1cmVHdWFyZGFyID0gYmUucHJvY2VkdXJlLmNhc29fZ3VhcmRhcjtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSBgaWQgZW5jICR7aWRFbmN9OiBgO1xyXG4gICAgICAgICAgICAgICAgbGV0IHBhcmFtX2d1YXJkYXI9e29wZXJhdGl2bzogb3BlcmF0aXZvLGlkX2Nhc286aWRFbmMsIGRhdG9zX2Nhc286cmVzcHVlc3Rhc1VBUHJpbmNpcGFsfVxyXG4gICAgICAgICAgICAgICAgbGV0IGVyck1lc3NhZ2U6IHN0cmluZ3xudWxsO1xyXG4gICAgICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJlLmluVHJhbnNhY3Rpb24obnVsbCwgYXN5bmMgZnVuY3Rpb24oY2xpZW50KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0YWRvKz0gYXdhaXQgcHJvY2VkdXJlR3VhcmRhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1fZ3VhcmRhciwgY2xpZW50KTsgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGVyck1lc3NhZ2UgPSByZXN1bHRhZG8gKyBcImRtX2ZvcnBrcmFpel9kZXNjYXJnYXIuIFwiKyBlcnIgO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbyA9IGVyck1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJNZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgIGB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBwYXNlX3RhYmxhPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2BcclxuICAgICAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgW29wZXJhdGl2bywgaWRFbmMsIHJlc3VsdGFkb11cclxuICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTsgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICB9KS5hcnJheSgpKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvaydcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjonZG1fc2luY3Jvbml6YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZToncGVyc2lzdGVudGVzJyAgICAgICAsIHR5cGVOYW1lOidqc29uYid9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBjb25zdCBPUEVSQVRJVk8gPSBhd2FpdCBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dCk7XHJcbiAgICAgICAgICAgIHZhciBiZT1jb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIge3BlcnNpc3RlbnRlc30gPSBwYXJhbWV0ZXJzO1xyXG4gICAgICAgICAgICB2YXIgbnVtX3NpbmNybzpudW1iZXI9MDtcclxuICAgICAgICAgICAgdmFyIHRva2VuOnN0cmluZz1wZXJzaXN0ZW50ZXM/LnRva2VuIHx8IChhd2FpdCBiZS5wcm9jZWR1cmUudG9rZW5fZ2V0LmNvcmVGdW5jdGlvbihjb250ZXh0LCB7XHJcbiAgICAgICAgICAgICAgICB1c2VyYWdlbnQ6IGNvbnRleHQuc2Vzc2lvbi5yZXEudXNlcmFnZW50LCBcclxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiBjb250ZXh0LnVzZXJuYW1lXHJcbiAgICAgICAgICAgIH0pKS50b2tlbjtcclxuICAgICAgICAgICAgdmFyIHt2YWx1ZX0gPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBJTlNFUlQgSU5UTyBzaW5jcm9uaXphY2lvbmVzICh0b2tlbiwgdXN1YXJpbywgZGF0b3MpXHJcbiAgICAgICAgICAgICAgICAgICAgVkFMVUVTICgkMSwkMiwkMykgXHJcbiAgICAgICAgICAgICAgICAgICAgUkVUVVJOSU5HIHNpbmNyb1xyXG4gICAgICAgICAgICAgICAgYCwgW3Rva2VuLCBjb250ZXh0LnVzZXJuYW1lLCBwZXJzaXN0ZW50ZXNdXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVWYWx1ZSgpO1xyXG4gICAgICAgICAgICBudW1fc2luY3JvPXZhbHVlO1xyXG4gICAgICAgICAgICB2YXIgY29uZHZpdj0gYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0dC5vcGVyYXRpdm89ICQxIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmQgYXNpZ25hZG8gPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmQgdHQub3BlcmFjaW9uPSdjYXJnYXInIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmQgKHR0LmNhcmdhZG9fZG0gaXMgbnVsbCBvciB0dC5jYXJnYWRvX2RtID0gJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbCh0b2tlbil9KVxyXG4gICAgICAgICAgICBgO1xyXG4gICAgICAgICAgICBjb25zdCBVQV9QUklOQ0lQQUwgPSBhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgT1BFUkFUSVZPKTtcclxuICAgICAgICAgICAgaWYgKHBlcnNpc3RlbnRlcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaWRFbmMgaW4gcGVyc2lzdGVudGVzLnJlc3B1ZXN0YXNbVUFfUFJJTkNJUEFMXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwdWVzdGFzVUFQcmluY2lwYWwgPSBwZXJzaXN0ZW50ZXMucmVzcHVlc3Rhc1tVQV9QUklOQ0lQQUxdW2lkRW5jXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2FyZ2EgPSBwZXJzaXN0ZW50ZXMuY2FyZ2FzW3BlcnNpc3RlbnRlcy5pbmZvcm1hY2lvbkhkcltpZEVuY10udGVtLmNhcmdhXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZWEgPSBwZXJzaXN0ZW50ZXMuaW5mb3JtYWNpb25IZHJbaWRFbmNdLnRhcmVhLnRhcmVhO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKE51bWJlcihpZEVuYyk8MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkRW5jID0gYXdhaXQgcGVyc2lzdGlyRW5jdWVzdGFBdXRvZ2VuZXJhZGFFbkRNKGNvbnRleHQsIE9QRVJBVElWTywgY2FyZ2EuY2FyZ2EsIGlkRW5jLCB0b2tlbiwgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsLCBjYXJnYS5yZWNlcGNpb25pc3RhLCBjb250ZXh0LnVzZXIuaWRwZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2YXIgcHVlZG9HdWFyZGFyRW5URU09dHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIge3BhcmFtcyxzZXR0ZXJzfSA9IGdldFNldHRlcnNBbmRQYXJhbWV0ZXJzRm9yUmVhTm9SZWFSZXN1bWVuRXN0YWRvKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYGVzdGFkbyA9ICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoRVNUQURPX1BPU1RFUklPUl9ERVNDQVJHQSl9YCwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgY2FyZ2Fkb19kbT1udWxsYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtPUEVSQVRJVk8sIGlkRW5jLCB0YXJlYSwgdG9rZW5dXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcXVlcnlUYXJlYXNUZW0gPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHVwZGF0ZSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgJHtzZXR0ZXJzLmpvaW4oJywnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzIGFuZCBjYXJnYWRvX2RtID0gJDRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1xyXG4gICAgICAgICAgICAgICAgICAgICkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHB1ZWRvR3VhcmRhckVuVEVNPXF1ZXJ5VGFyZWFzVGVtLnJvd0NvdW50PT0xO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHB1ZWRvR3VhcmRhckVuVEVNKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ3VhcmRhckVuY3Vlc3RhRW5UZW0oY29udGV4dCwgT1BFUkFUSVZPLCBpZEVuYywgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsLCB0YXJlYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vZ3VhcmRhciBwYXJhbGVsYW1lbnRlIGVuIHRhYmxhcyB1YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvY2VkdXJlR3VhcmRhciA9IGJlLnByb2NlZHVyZS5jYXNvX2d1YXJkYXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSBgaWQgZW5jICR7aWRFbmN9OiBgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1fZ3VhcmRhcj17b3BlcmF0aXZvOiBPUEVSQVRJVk8saWRfY2FzbzppZEVuYywgZGF0b3NfY2FzbzpyZXNwdWVzdGFzVUFQcmluY2lwYWx9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlcnJNZXNzYWdlOiBzdHJpbmd8bnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgYmUuaW5UcmFuc2FjdGlvbihudWxsLCBhc3luYyBmdW5jdGlvbihjbGllbnQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbys9IGF3YWl0IHByb2NlZHVyZUd1YXJkYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtX2d1YXJkYXIsIGNsaWVudCk7ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJNZXNzYWdlID0gcmVzdWx0YWRvICsgXCJkbV9mb3Jwa3JhaXpfZGVzY2FyZ2FyLiBcIisgZXJyIDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbyA9IGVyck1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVyck1lc3NhZ2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgcGFzZV90YWJsYT0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW09QRVJBVElWTywgaWRFbmMsIHJlc3VsdGFkb11cclxuICAgICAgICAgICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBmcy5hcHBlbmRGaWxlKCdsb2NhbC1yZWNpYmlkby1zaW4tdG9rZW4udHh0JywgSlNPTi5zdHJpbmdpZnkoe25vdzpuZXcgRGF0ZSgpLHVzZXI6Y29udGV4dC51c2VybmFtZSxpZENhc286IGlkRW5jLFtPcGVyYXRpdm9HZW5lcmF0b3IubWFpblREUEtdOiByZXNwdWVzdGFzVUFQcmluY2lwYWx9KSsnXFxuXFxuJywgJ3V0ZjgnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHBlcm1pdGVHZW5lcmFyTXVlc3RyYSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmEgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBvcGVyYXRpdm9zIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxXHJcbiAgICAgICAgICAgIGAsW09QRVJBVElWT10pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgIHZhciB7cm93fSA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGdldEhkclF1ZXJ5KGNvbmR2aXYsIGNvbnRleHQsIHBlcm1pdGVHZW5lcmFyTXVlc3RyYSksW09QRVJBVElWTyxjb250ZXh0LnVzZXIuaWRwZXJdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGB1cGRhdGUgdGFyZWFzX3RlbSB0dFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCAgZXN0YWRvID0gJDQsIGNhcmdhZG9fZG09JDM6OnRleHRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSAke2NvbmR2aXZ9IFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyBlbmNgXHJcbiAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICBbT1BFUkFUSVZPLCBwYXJhbWV0ZXJzLmVuYz9wYXJhbWV0ZXJzLmVuYzpjb250ZXh0LnVzZXIuaWRwZXIsIHRva2VuLCBFU1RBRE9fUE9TVEVSSU9SX0NBUkdBXVxyXG4gICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5yb3csXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm86IE9QRVJBVElWTywgXHJcbiAgICAgICAgICAgICAgICBzb2xvTGVjdHVyYTpmYWxzZSxcclxuICAgICAgICAgICAgICAgIHRva2VuLFxyXG4gICAgICAgICAgICAgICAgbnVtX3NpbmNybyxcclxuICAgICAgICAgICAgICAgIGlkcGVyOmNvbnRleHQudXNlci5pZHBlcixcclxuICAgICAgICAgICAgICAgIGNhcmdhczpsaWtlQXIuY3JlYXRlSW5kZXgocm93LmNhcmdhcy5tYXAoY2FyZ2E9Pih7Li4uY2FyZ2EsIGZlY2hhOmNhcmdhLmZlY2hhP2RhdGUuaXNvKGNhcmdhLmZlY2hhKS50b0RteSgpOm51bGwsIGVzdGFkb19jYXJnYToncmVsZXZhbWllbnRvJ30pKSwgJ2NhcmdhJylcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246J2RtX2JhY2t1cCcsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOid0b2tlbicgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGVtJyAgICAgICAgICwgdHlwZU5hbWU6J2pzb25iJ31cclxuICAgICAgICBdLFxyXG4gICAgICAgIHVubG9nZ2VkOnRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIge2JlLCBjbGllbnR9ID1jb250ZXh0O1xyXG4gICAgICAgICAgICBjb25zdCBPUEVSQVRJVk8gPSBhd2FpdCBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dCk7XHJcbiAgICAgICAgICAgIHZhciBudW1fc2luY3JvOm51bWJlcj0wO1xyXG4gICAgICAgICAgICB2YXIgdG9rZW46c3RyaW5nfG51bGw9cGFyYW1ldGVycy50b2tlbjtcclxuICAgICAgICAgICAgaWYodG9rZW4gPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge29rOidvazpOL1QnfTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB2YXIge3Jvd0NvdW50fSA9IGF3YWl0IGNsaWVudC5xdWVyeShgc2VsZWN0IDEgZnJvbSB0b2tlbnMgd2hlcmUgdG9rZW4gPSAkMWAsW3Rva2VuXSkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgICAgICAgICAgaWYoIXJvd0NvdW50KXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge29rOidvazpOL1QnfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihwYXJhbWV0ZXJzLnRlbSl7XHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IGJhY2t1cCBvZiBsaWtlQXIocGFyYW1ldGVycy50ZW0pLmFycmF5KCkpe1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhcmVhID0gYmFja3VwLmNhcmdhLmNhcmdhO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwdWVzdGFzUmFpeiA9IGJhY2t1cC5yZXNwdWVzdGFzUmFpejtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaWRFbmNETSA9IGJhY2t1cC5mb3JQa1JhaXpbT3BlcmF0aXZvR2VuZXJhdG9yLm1haW5URF0udG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVjZXBjaW9uaXN0YSA9IGJhY2t1cC5jYXJnYS5yZWNlcGNpb25pc3RhO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhc2lnbmFkbyA9IGJhY2t1cC5pZHBlcjtcclxuICAgICAgICAgICAgICAgICAgICBpZihOdW1iZXIoaWRFbmNETSk8MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHBlcnNpc3RpckVuY3Vlc3RhQXV0b2dlbmVyYWRhRW5ETShjb250ZXh0LCBPUEVSQVRJVk8sIGFyZWEsIGlkRW5jRE0sIHRva2VuLCByZXNwdWVzdGFzUmFpeiwgcmVjZXBjaW9uaXN0YSwgYXNpZ25hZG8pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCBqc29uX2JhY2t1cCA9ICQzLCBmZWNoYV9iYWNrdXAgPSBjdXJyZW50X3RpbWVzdGFtcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCBqc29uX2JhY2t1cCBpcyBkaXN0aW5jdCBmcm9tICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICdvaydgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbT1BFUkFUSVZPLCBpZEVuY0RNLCByZXNwdWVzdGFzUmFpeiwgcmVzcHVlc3Rhc1JhaXpdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIG9rOidvaydcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2NvbnNpc3Rpcl92aXZpZW5kYScsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgLHJlZmVyZW5jZXM6J29wZXJhdGl2b3MnLCAgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2Nhc28nICAgICAgICx0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIge2JlLCBjbGllbnR9ID1jb250ZXh0O1xyXG4gICAgICAgICAgICBsZXQgcGFyYW1fcHJvYz17XHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm86IHBhcmFtZXRlcnMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgaWRfY2FzbzogcGFyYW1ldGVycy5jYXNvXHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgIGxldCBlcnJNZXNzYWdlOiBzdHJpbmd8bnVsbDtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdGFkbzogc3RyaW5nfG51bGw7XHJcbiAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgIHJlc3VsdGFkbz0gYXdhaXQgYmUucHJvY2VkdXJlLmNvbnNpc3Rpcl9lbmN1ZXN0YS5jb3JlRnVuY3Rpb24oY29udGV4dCwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3Byb2MsIGNsaWVudFxyXG4gICAgICAgICAgICAgICAgKTsgICAgXHJcbiAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgZXJyTWVzc2FnZSA9IFwiIGNvbnNpc3Rpcl9jYXNvLiBcIisgZXJyIDtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVyck1lc3NhZ2UpXHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcqKioqKiogY29uc2lzdGlyX2Nhc28gcmVzdWx0YWRvOicscmVzdWx0YWRvKSAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgb2s6J29rJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2RtX3Jlc2NhdGFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J2xvY2FsU3RvcmFnZUl0ZW0nICAgICAgICwgdHlwZU5hbWU6J2pzb25iJ30sXHJcbiAgICAgICAgICAgIHtuYW1lOidsb2NhbFN0b3JhZ2VJdGVtS2V5JyAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICB1bmxvZ2dlZDp0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIHtsb2NhbFN0b3JhZ2VJdGVtS2V5LCBsb2NhbFN0b3JhZ2VJdGVtfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cobG9jYWxTdG9yYWdlSXRlbSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5hcHBlbmRGaWxlKCdsb2NhbC1yZXNjYXRlLnR4dCcsIEpTT04uc3RyaW5naWZ5KHtub3c6bmV3IERhdGUoKSx1c2VyOmNvbnRleHQudXNlcm5hbWUsIGl0ZW1LZXk6IGxvY2FsU3RvcmFnZUl0ZW1LZXksIGl0ZW1EYXRhOiBsb2NhbFN0b3JhZ2VJdGVtfSkrJ1xcblxcbicsICd1dGY4Jyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRVJST1InLGVycik7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ29wZXJhdGl2b19nZXQnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W10sXHJcbiAgICAgICAgdW5sb2dnZWQ6dHJ1ZSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBfcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgcmV0dXJuIGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZ2V0X3JhbmRvbV9mcmVlX2Nhc2UnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W3tuYW1lOidvcGVyYXRpdm8nICAgICwgdHlwZU5hbWU6J3RleHQnfV0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBjb25zdCBtaW5zVG9FeHBpcmUgPSAzMDtcclxuICAgICAgICAgICAgY29uc3QgbWluc1NpbmNlQmxvcXVlZCA9IGBkYXRlX3BhcnQoJ21pbicsIGFnZShjdXJyZW50X3RpbWVzdGFtcCwgZmVjaGFfYmxvcXVlbykpYDtcclxuICAgICAgICAgICAgY29uc3QgZW5jID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYHNlbGVjdCBlbmMgZnJvbSB0ZW0gd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAobGlicmUgb3IgJHttaW5zU2luY2VCbG9xdWVkfSA+ICR7bWluc1RvRXhwaXJlfSkgbGltaXQgMTtgLFtwYXJhbXMub3BlcmF0aXZvXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgVVBEQVRFIHRlbSBzZXQgbGlicmUgPSBmYWxzZSwgZmVjaGFfYmxvcXVlbz1jdXJyZW50X3RpbWVzdGFtcCB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMmAsW3BhcmFtcy5vcGVyYXRpdm8sIGVuYy52YWx1ZV0pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGVuYy52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ211ZXN0cmFfZ2VuZXJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnLCAgICByZWZlcmVuY2VzOiBcIm9wZXJhdGl2b3NcIn0sXHJcbiAgICAgICAgICAgIHtuYW1lOidhcmVhJyAgICAgICAgICAgICAgICwgdHlwZU5hbWU6J2ludGVnZXInLCByZWZlcmVuY2VzOiBcImFyZWFzXCJ9LFxyXG4gICAgICAgICAgICB7bmFtZTonZG9taW5pbycgICAgICAgICAgICAsIHR5cGVOYW1lOidpbnRlZ2VyJywgZGVmYXVsdFZhbHVlOiAzfSxcclxuICAgICAgICAgICAge25hbWU6J2NhbnRfZW5jdWVzdGFzJyAgICAgLCB0eXBlTmFtZTonaW50ZWdlcid9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBjb25zdCBiZSA9ICBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgcGVybWl0ZUdlbmVyYXJNdWVzdHJhID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIG9wZXJhdGl2b3MgXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDFcclxuICAgICAgICAgICAgYCxbcGFyYW1zLm9wZXJhdGl2b10pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgIGlmKHBlcm1pdGVHZW5lcmFyTXVlc3RyYSl7XHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgTWF0aC5taW4ocGFyYW1zLmNhbnRfZW5jdWVzdGFzLG1heEFHZW5lcmFyKTsgaSsrKXtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBnZW5lcmFyRW5jdWVzdGFUZW0oY29udGV4dCwgcGFyYW1zLm9wZXJhdGl2bywgaSwgcGFyYW1zLmFyZWEsIHBhcmFtcy5kb21pbmlvKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IGdlbmVyYXJUYXJlYXNUZW1GYWx0YW50ZXMoY29udGV4dCwgcGFyYW1zLm9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcImVsIG9wZXJhdGl2byBubyBwZXJtaXRlIGdlbmVyYXIgbXVlc3RyYVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnbXVlc3RyYV9hZ3JlZ2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCcsICAgIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wifSxcclxuICAgICAgICAgICAge25hbWU6J2FyZWEnICAgICAgICAgICAgICAgLCB0eXBlTmFtZTonaW50ZWdlcicsIHJlZmVyZW5jZXM6IFwiYXJlYXNcIn0sXHJcbiAgICAgICAgICAgIHtuYW1lOidkb21pbmlvJyAgICAgICAgICAgICwgdHlwZU5hbWU6J2ludGVnZXInLCBkZWZhdWx0VmFsdWU6IDN9LFxyXG4gICAgICAgICAgICB7bmFtZTonY2FudF9lbmN1ZXN0YXMnICAgICAsIHR5cGVOYW1lOidpbnRlZ2VyJ30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGNvbnN0IGJlID0gIGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciBwZXJtaXRlR2VuZXJhck11ZXN0cmEgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gb3BlcmF0aXZvcyBcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMVxyXG4gICAgICAgICAgICBgLFtwYXJhbXMub3BlcmF0aXZvXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgICAgICAgICAgaWYocGVybWl0ZUdlbmVyYXJNdWVzdHJhKXtcclxuICAgICAgICAgICAgICAgIGxldCB0b3RhbCA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICBgc2VsZWN0IGNvdW50KCopIGFzIHRvdGFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGFyZWEgPSAkMmAsXHJcbiAgICAgICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5hcmVhXVxyXG4gICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBpID0gdG90YWw7IGkgPCBNYXRoLm1pbih0b3RhbCArIHBhcmFtcy5jYW50X2VuY3Vlc3RhcyxtYXhBRW5jUG9yQXJlYSk7IGkrKyl7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ2VuZXJhckVuY3Vlc3RhVGVtKGNvbnRleHQsIHBhcmFtcy5vcGVyYXRpdm8sIGksIHBhcmFtcy5hcmVhLCBwYXJhbXMuZG9taW5pbyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBnZW5lcmFyVGFyZWFzVGVtRmFsdGFudGVzKGNvbnRleHQsIHBhcmFtcy5vcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJlbCBvcGVyYXRpdm8gbm8gcGVybWl0ZSBnZW5lcmFyIG11ZXN0cmFcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgeyAgICAgXHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfYmxhbnF1ZWFyX3ByZXZpc3VhbGl6YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0JywgcmVmZXJlbmNlczpcIm9wZXJhdGl2b3NcIn0sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczpbJ2Nvb3JfcHJvYycsJ2Nvb3JfY2FtcG8nLCdhZG1pbiddLFxyXG4gICAgICAgIHJlc3VsdE9rOidtb3N0cmFyX2VuY3Vlc3RhX2FfYmxhbnF1ZWFyX2NvbnRlbmlkbycsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdCAqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiAtLXBrIHZlcmlmaWNhZGFcclxuICAgICAgICAgICAgICAgIGAsW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yIChgTm8gc2UgZW5jb250csOzIGxhIGVuY3Vlc3RhICR7cGFyYW1zLmVuY30gcGFyYSBlbCBvcGVyYXRpdm8gJHtwYXJhbXMub3BlcmF0aXZvfS4gJHtlcnIubWVzc2FnZX1gIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4ge2Nhc29UZW06IHJlc3VsdC5yb3d9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfYmxhbnF1ZWFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCcsIHJlZmVyZW5jZXM6XCJvcGVyYXRpdm9zXCJ9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczpbJ2Nvb3JfcHJvYycsJ2Nvb3JfY2FtcG8nLCdhZG1pbiddLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gJHtiZS5kYi5xdW90ZUlkZW50KE9wZXJhdGl2b0dlbmVyYXRvci5tYWluVEQpfSBcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kICR7YmUuZGIucXVvdGVJZGVudChPcGVyYXRpdm9HZW5lcmF0b3IubWFpblREUEspfSA9ICQyXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAvL3Bhc28gYSBlbmN1IHBhcmEgZ3VhcmRhciBlbiBoaXN0b3JpYWxcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWFfYWN0dWFsID0gJ2VuY3UnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIC0tcGsgdmVyaWZpY2FkYVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqXHJcbiAgICAgICAgICAgIGAsW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICBgLFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICBhd2FpdCBnZW5lcmFyVGFyZWFzVGVtRmFsdGFudGVzKGNvbnRleHQsIHBhcmFtcy5vcGVyYXRpdm8pOyAgICAgICAgIFxyXG4gICAgICAgICAgICAvL3Jlc2V0ZW8gdGVtIChubyBzZSBndWFyZGEgaGlzdG9yaWFsIHBvcnF1ZSB0YXJlYV9hY3R1YWwgZXMgbnVsbClcclxuICAgICAgICAgICAgLy9ndWFyZG8gYmFja3VwIHBvciBsYXMgZHVkYXNcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBcclxuICAgICAgICAgICAgICAgICAgICAgICAganNvbl9iYWNrdXAgPSBqc29uX2VuY3Vlc3RhLCBqc29uX2VuY3Vlc3RhID0gbnVsbCwgdGFyZWFfYWN0dWFsID0gbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmVjaGFfbW9kaWZfZW5jdWVzdGEgPSBudWxsLCBmZWNoYV9iYWNrdXAgPSBjdXJyZW50X3RpbWVzdGFtcCwgbW9kaWZpY2FkbyA9IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZW5fZXN0YWRvID0gbnVsbCwgcmVzdW1lbl9lc3RhZG9fc3VwID0gbnVsbCwgc3VwZXJ2aXNpb25fZGlyaWdpZGEgPSBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNlX3RhYmxhID0gbnVsbCwgcmVhID0gbnVsbCwgbm9yZWEgPSBudWxsLCByZWFfc3VwID0gbnVsbCwgbm9yZWFfc3VwID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiAtLXBrIHZlcmlmaWNhZGFcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgICAgICBgLFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gaW5jb25zaXN0ZW5jaWFzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kICR7YmUuZGIucXVvdGVJZGVudChPcGVyYXRpdm9HZW5lcmF0b3IubWFpblREUEspfSA9ICQyXHJcbiAgICAgICAgICAgIGAsW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIGluX2Nvbl92YXJcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgcGtfaW50ZWdyYWRhLT4+JHtiZS5kYi5xdW90ZUxpdGVyYWwoT3BlcmF0aXZvR2VuZXJhdG9yLm1haW5URFBLKX0gPSAkMlxyXG4gICAgICAgICAgICBgLFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNvbnNpc3RlbmNpYXNfdWx0aW1hc1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBwa19pbnRlZ3JhZGEtPj4ke2JlLmRiLnF1b3RlTGl0ZXJhbChPcGVyYXRpdm9HZW5lcmF0b3IubWFpblREUEspfSA9ICQyXHJcbiAgICAgICAgICAgIGAsW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBgbGEgZW5jdWVzdGEgJHtwYXJhbXMuZW5jfSBzZSBibGFucXVlw7MgY29ycmVjdGFtZW50ZWA7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdhY2Npb25fdGFyZWFzX3RlbV9lamVjdXRhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidjb25kaWNpb24nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2FjY2lvbicgICAgICAgICAgLCB0eXBlTmFtZTonanNvbmInfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlID0gIGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciBhY2Npb24gPSBwYXJhbXMuYWNjaW9uIGFzIEVzdGFkb0FjY2lvbjtcclxuICAgICAgICAgICAgdmFyIGN1bXBsZTpib29sZWFuID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBhY2Npb25fY3VtcGxlX2NvbmRpY2lvbigkNSwgJDYsICQ3LCAkOCwgKFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdCBjb25kaWNpb24gXHJcbiAgICAgICAgICAgICAgICAgICAgICBmcm9tIGVzdGFkb3NfYWNjaW9uZXMgXHJcbiAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZXN0YWRvID0gJDIgYW5kIGVhY2Npb24gPSAkMyBhbmQgZXN0YWRvX2Rlc3Rpbm8gPSAkNFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApYCwgW1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2bywgXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvLCBcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lYWNjaW9uLCBcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG9fZGVzdGlubyxcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sIFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkbywgXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW5jLCBcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lYWNjaW9uLFxyXG4gICAgICAgICAgICBdKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgICAgICAgICBpZighY3VtcGxlKXtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBObyBzZSBwdWRvIGVqZWN1dGFyIGxhIGFjY2nDs24sIG5vIHNlIGN1bXBsZSBsYSBjb25kaWNpw7NuIFwiJHtwYXJhbXMuY29uZGljaW9ufVwiIG8gYmllbiBlbCBlc3RhZG8gZXN0w6EgZGVzYWN0dWFsaXphZG8sIHJlZnJlc3F1ZSBsYSBncmlsbGEuYClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGVuYz0kMiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2bywgXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmVuYywgXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRhcmVhLCBcclxuICAgICAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvX2Rlc3Rpbm9cclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBpZihhY2Npb24ubm9tYnJlX3Byb2NlZHVyZSl7XHJcbiAgICAgICAgICAgICAgICBpZihiZS5wcm9jZWR1cmVbYWNjaW9uLm5vbWJyZV9wcm9jZWR1cmVdKXtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmVbYWNjaW9uLm5vbWJyZV9wcm9jZWR1cmVdLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbXMpXHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgTm8gZXhpc3RlIGVsIHByb2NlZHVyZSBcIiR7YWNjaW9uLm5vbWJyZV9wcm9jZWR1cmV9XCIgZGVmaW5pZG8gZW4gbGEgdGFibGEgXCJlc3RhZG9zX2FjY2lvbmVzXCIgcGFyYSBlbFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogJHthY2Npb24ub3BlcmF0aXZvfSwgZXN0YWRvOiAke2FjY2lvbi5lc3RhZG99LCBlYWNjaW9uOiAke2FjY2lvbi5lYWNjaW9ufS5gKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEJVU0NPIFBBU0UgREUgVEFSRUFcclxuICAgICAgICAgICAgdmFyIHRhcmVhU2lndWllbnRlID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCAqXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfcHJveGltYXNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvID0gJDEgYW5kIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYSA9ICQyIGFuZCBlc3RhZG8gPSAkMyBhbmQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhX2N1bXBsZV9jb25kaWNpb24oJDQsICQ1LCAkNiwgJDcsIGNvbmRpY2lvbilcclxuICAgICAgICAgICAgICAgICAgICBvcmRlciBieSBvcmRlblxyXG4gICAgICAgICAgICAgICAgICAgIGxpbWl0IDFgXHJcbiAgICAgICAgICAgICxbXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMub3BlcmF0aXZvLCBcclxuICAgICAgICAgICAgICAgIHBhcmFtcy50YXJlYSxcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG9fZGVzdGlubyxcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sIFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkb19kZXN0aW5vLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmVuY1xyXG4gICAgICAgICAgICBdKS5mZXRjaE9uZVJvd0lmRXhpc3RzKCkpLnJvdztcclxuICAgICAgICAgICAgaWYodGFyZWFTaWd1aWVudGUpe1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmBcclxuICAgICAgICAgICAgICAgICAgICAsW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsIHRhcmVhU2lndWllbnRlLnRhcmVhX2Rlc3Rpbm9dXHJcbiAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgYXV0b0FzaWduYWRvID0gdGFyZWFTaWd1aWVudGUucmVnaXN0cmFfcmVjZXBjaW9uaXN0YT9jb250ZXh0LnVzZXIuaWRwZXI6bnVsbDtcclxuICAgICAgICAgICAgICAgIGxldCBxID0gY29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWw7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHRzX2VudHJhZGEgPSBjdXJyZW50X3RpbWVzdGFtcCwgYWRlbGFudGFyID0gbnVsbCwgZXN0YWRvID0gJDRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7YXV0b0FzaWduYWRvP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiLCByZWNlcGNpb25pc3RhPVwiK3EoYXV0b0FzaWduYWRvKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOlwiXCJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmBcclxuICAgICAgICAgICAgICAgICAgICAsW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsIHRhcmVhU2lndWllbnRlLnRhcmVhX2Rlc3Rpbm8sIHRhcmVhU2lndWllbnRlLmVzdGFkb19kZXN0aW5vXVxyXG4gICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgaWYodGFyZWFTaWd1aWVudGUubm9tYnJlX3Byb2NlZHVyZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlW3RhcmVhU2lndWllbnRlLm5vbWJyZV9wcm9jZWR1cmVdLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEZJTiBQQVNFIERFIFRBUkVBXHJcbiAgICAgICAgICAgIHJldHVybiBcIm9rXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9jYXJnYV9wcmVwYXJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IG9wZXJhY2lvbiA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmMsIE9QRVJBQ0lPTl9QUkVQQVJBUl9DQVJHQV0pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2Rpc3BvbmliaWxpemFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgYXNpZ25hZG8gPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19jYXJnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBvcGVyYWNpb24gPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9kZXNjYXJnYV9wcmVwYXJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IG9wZXJhY2lvbiA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmMsIE9QRVJBQ0lPTl9QUkVQQVJBUl9ERVNDQVJHQV0pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX2Rlc2NhcmdhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IG9wZXJhY2lvbiA9ICdjYXJnYXInXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9hbmFsaXphcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5jb25zaXN0aXJfZW5jdWVzdGEuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHtvcGVyYXRpdm86cGFyYW1zLm9wZXJhdGl2bywgaWRfY2FzbzpwYXJhbXMuZW5jfSlcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV92ZXJpZmljYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB2ZXJpZmljYWRvID0gJzEnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub192ZXJpZmljYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB2ZXJpZmljYWRvID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfY2VycmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdmVyaWZpY2FkbyA9ICcxJywgYXNpZ25hZG8gPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jLCBjb250ZXh0LnVzZXIuaWRwZXJdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19jZXJyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB2ZXJpZmljYWRvID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfc3VwZXJ2aXNhcl9wcmVzZW5jaWFsJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkMywgc3VwZXJ2aXNpb25fZGlyaWdpZGEgPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdzdXBlJywgMV0pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX3N1cGVydmlzYXJfdGVsZWZvbmljYScsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDMsIHN1cGVydmlzaW9uX2RpcmlnaWRhID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnc3VwZScsIDJdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19zdXBlcnZpc2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkMywgc3VwZXJ2aXNpb25fZGlyaWdpZGEgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ2ZpbmMnXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfcGFzYXJfYV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ0NDJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYSBpbiAoJDMsJDQpIC0tcXVpZXJvIHBhc2FyIGxhcyAyIHRhcmVhcyBhIENDXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdhbmFjJywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdhbmFjJ10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX3Bhc2FyX2FfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdBJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYT0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICcwRCdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMiBhbmQgdGFyZWE9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdhbmFjJ10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfZGV2b2x2ZXJfcHJvY19kZXNkZV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmVuY3Vlc3RhX3ZlcmlmaWNhci5jb3JlRnVuY3Rpb24oY29udGV4dCxwYXJhbXMpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQSdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMiBhbmQgdGFyZWE9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdwcm9jJ10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fZGV2b2x2ZXJfcHJvY19kZXNkZV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ0NDJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYSBpbiAoJDMsJDQpIC0tcXVpZXJvIHBhc2FyIGxhcyAyIHRhcmVhcyBhIENDXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdhbmFjJywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmVuY3Vlc3RhX25vX3ZlcmlmaWNhci5jb3JlRnVuY3Rpb24oY29udGV4dCxwYXJhbXMpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX3JlY3VwZXJhcl9kZXNkZV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHtvcGVyYXRpdm8sIGVuYywgdGFyZWF9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuZW5jdWVzdGFfdmVyaWZpY2FyLmNvcmVGdW5jdGlvbihjb250ZXh0LHBhcmFtcyk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgZW5jLCAncmVjdSddKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19yZWN1cGVyYXJfZGVzZGVfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciB7b3BlcmF0aXZvLCBlbmMsIHRhcmVhfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgZW5jLCAncmVjdScsICdhbmFjJ10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuZW5jdWVzdGFfbm9fdmVyaWZpY2FyLmNvcmVGdW5jdGlvbihjb250ZXh0LHBhcmFtcyk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfZm9yemFyX3RhcmVhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYV9hY3R1YWwnICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhX251ZXZhJyAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIge29wZXJhdGl2bywgZW5jLCB0YXJlYV9hY3R1YWwsIHRhcmVhX251ZXZhfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgZW5jLCB0YXJlYV9hY3R1YWwsIHRhcmVhX251ZXZhXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0YXJlYXNfdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnVicgXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgZW5jLCB0YXJlYV9hY3R1YWxdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICcwRCdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBlbmMsIHRhcmVhX251ZXZhXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfaGFiaWxpdGFyX2Rlc2hhYmlsaXRhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGhhYmlsaXRhZGEgPSBub3QgaGFiaWxpdGFkYVxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246IEFDQ0lPTl9QQVNBUl9QUk9JRSxcclxuICAgICAgICBwYXJhbWV0ZXJzOltdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIF9wYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGxldCBwYXJhbWV0cm9zID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCAqIGZyb20gcGFyYW1ldHJvcyB3aGVyZSB1bmljb19yZWdpc3Ryb2AsXHJcbiAgICAgICAgICAgIFtdKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3c7XHJcbiAgICAgICAgICAgIHZhciBzZWxlY3QgPSBgc2VsZWN0IHQub3BlcmF0aXZvLCB0LmVuYywgdC50YXJlYV9hY3R1YWwsIHR0LnRzX2VudHJhZGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX3RlbSB0dCBqb2luIHRlbSB0IHVzaW5nIChvcGVyYXRpdm8sZW5jKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdHQub3BlcmF0aXZvPSQxIGFuZCB0dC50YXJlYT0gJDIgYW5kICgke2dldERpYXNBUGFzYXJRdWVyeSgndHQnKX0gPD0gMCBvciBjb2FsZXNjZSh0dC5hZGVsYW50YXIsZmFsc2UpKSBhbmQgdHQudGFyZWEgPSB0LnRhcmVhX2FjdHVhbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW0gdHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdWJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tICgke3NlbGVjdH0pIGF1eFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSB0dC5vcGVyYXRpdm8gPSBhdXgub3BlcmF0aXZvIGFuZCB0dC5lbmMgPSBhdXguZW5jIGFuZCB0dC50YXJlYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbWV0cm9zLm9wZXJhdGl2bywgJ2ZpbmMnLCAnZmluYyddKVxyXG4gICAgICAgICAgICAuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgLy9UT0RPIGFzaWduYXIgZW4gcHJvY2VzYW1pZW50b1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW0gdHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdBJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tICgke3NlbGVjdH0pIGF1eFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSB0dC5vcGVyYXRpdm8gPSBhdXgub3BlcmF0aXZvIGFuZCB0dC5lbmMgPSBhdXguZW5jIGFuZCB0dC50YXJlYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbWV0cm9zLm9wZXJhdGl2bywgJ2ZpbmMnLCAncHJvYyddKVxyXG4gICAgICAgICAgICAuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRlbSB0XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICdwcm9jJ1xyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gKCR7c2VsZWN0fSkgYXV4XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgdC5vcGVyYXRpdm8gPSBhdXgub3BlcmF0aXZvIGFuZCB0LmVuYyA9IGF1eC5lbmNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAgLFxyXG4gICAgICAgICAgICBbcGFyYW1ldHJvcy5vcGVyYXRpdm8sICdmaW5jJ10pLmZldGNoQWxsKCk7XHJcbiAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246J2ludGVyY2FtYmlhcl9lbmN1ZXN0YXMnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonZW5jMScgICAgICAgICAgICAscmVmZXJlbmNlczondGVtJyAsIHR5cGVOYW1lOid0ZXh0JyAgICB9LFxyXG4gICAgICAgICAgICB7bmFtZTonY2FudEhvZzEnICAgICAgICAgICAgICAgICAgICAgICAgICAsIHR5cGVOYW1lOidpbnRlZ2VyJyB9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jMicgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0JyAgICB9LFxyXG4gICAgICAgICAgICB7bmFtZTonY2FudEhvZzInICAgICAgICAgICAgICAgICAgICAgICAgICAsIHR5cGVOYW1lOidpbnRlZ2VyJyB9LFxyXG4gICAgICAgICAgICB7bmFtZToncGFzbycgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHR5cGVOYW1lOidpbnRlZ2VyJyB9LFxyXG4gICAgICAgICAgICB7bmFtZTonY29uZmlybWEnICAgICAgICAgICAgICAgICAsIHR5cGVOYW1lOidib29sZWFuJywgZGVmYXVsdFZhbHVlOmZhbHNlLCBsYWJlbDonQ29uZmlybWEgaW50ZXJjYW1iaW8gZGUgbG9zIGRhdG9zIGVudHJlIGxhcyBlbmN1ZXN0YXM/ICcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOlsnY29vcl9wcm9jJywncHJvY2VzYW1pZW50bycsJ2FkbWluJ10sXHJcbiAgICAgICAgcHJvZ3Jlc3M6dHJ1ZSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogUGFyYSBjb250cm9sYXI6XHJcbiAgICAgICAgICAgICAqIC0gcXVlIGxhcyBob2dhcmVzLCBwZXJzb25hcywgZXRjIGVzdMOpbiBpbnRlcmNhbWJpYWRhcyBcclxuICAgICAgICAgICAgICogICogdGFudG8gZW4gZWwganNvblxyXG4gICAgICAgICAgICAgKiAgKiBjb21vIGVuIGxhcyBURHNcclxuICAgICAgICAgICAgICogLSBjb3NhcyBxdWUgc2UgY2FsY3VsYW4gcG9yIGxhIGFwcD8gY3VhbGVzPyAocmVzdW1lbl9lc3RhZG8sIHJlYSB5IG5vcmVhKVxyXG4gICAgICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgICAgIGlmICghcGFyYW1zLmNvbmZpcm1hKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gY29uZmlybcOzIGludGVyY2FtYmlvJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoICFwYXJhbXMuZW5jMSB8fCAhcGFyYW1zLmVuYzIpICB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCBGYWx0YSBpbmdyZXNhciB1biBudW1lcm8gZGUgZW5jdWVzdGEhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCBwYXJhbXMuZW5jMT09cGFyYW1zLmVuYzIpICB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCBlbmMxIHkgZW5jMiBkZWJlbiBzZXIgZGlzdGludG9zIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcGFyYW1zLmNhbnRIb2cxKSAge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciwgQ2FudGlkYWQgZGUgSG9nYXJlcyBkZSBlbmMxLCBubyBlc3RhIGluZ3Jlc2FkbyEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXBhcmFtcy5jYW50SG9nMikgIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIENhbnRpZGFkIGRlIEhvZ2FyZXMgZGUgZW5jMiwgbm8gZXN0YSBpbmdyZXNhZG8hJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQ09OVFJPTEFSIFFVRSBOSU5HVU5BIERFIExBUyAyIGVuY3Vlc3RhcyBFU1RFIENBUkdBREEsIEFCSUVSVEEgRkFMVEFcclxuICAgICAgICAgICAgY29uc3QgT1BFUkFUSVZPID0gYXdhaXQgZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpO1xyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCBjYW50X2hvZ3M9KGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCB2aXZpZW5kYSwgY291bnQoKiluaCBmcm9tIGhvZ2FyZXMgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAodml2aWVuZGE9JDIgb3Igdml2aWVuZGE9JDMpXHJcbiAgICAgICAgICAgICAgICBncm91cCBieSB2aXZpZW5kYSBvcmRlciBieSB2aXZpZW5kYVxyXG4gICAgICAgICAgICAgICAgYCxbT1BFUkFUSVZPLCBwYXJhbXMuZW5jMSwgcGFyYW1zLmVuYzJdKS5mZXRjaEFsbCgpKS5yb3dzO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBwYXJhbV9uaD1bcGFyYW1zLmNhbnRIb2cxLHBhcmFtcy5jYW50SG9nMl07XHJcbiAgICAgICAgICAgIGNhbnRfaG9ncy5mb3JFYWNoKCh4ZSxpKT0+e1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtX25oW2ldICE9PSB4ZS5uaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtZW5zPWBFcnJvciwgbm8gY29pbmNpZGUgbGEgY2FudGlkYWQgZGUgaG9nYXJlcyBkZSBlbmMke2krMX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih4bWVucyk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTsgICAgXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgcmVnRW5jPShhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgIHNlbGVjdCBlbmMsIHRhcmVhX2FjdHVhbCwganNvbl9lbmN1ZXN0YSBmcm9tIHRlbSB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIChlbmMgPSQyIG9yIGVuYz0kMykgb3JkZXIgYnkgZW5jXHJcbiAgICAgICAgICAgIGAsW09QRVJBVElWTywgcGFyYW1zLmVuYzEsIHBhcmFtcy5lbmMyXSkuZmV0Y2hBbGwoKSkucm93cztcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChyZWdFbmMubGVuZ3RoIT0yKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIE5vIHNlIGVuY29udHJhcm9uIDIgZW5jdWVzdGFzJykgICAgXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgLy8gbGltcGlhIGxhcyBURHMgIFxyXG4gICAgICAgICAgICAgICAgbGV0IFtlbmMxLGVuYzJdID0gW3JlZ0VuY1swXSwgcmVnRW5jWzFdXVxyXG4gICAgICAgICAgICAgICAgaWYocGFyYW1zLnBhc28gPT0gMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBkZWxldGUgZnJvbSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudChPcGVyYXRpdm9HZW5lcmF0b3IubWFpblREKX0gd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAodml2aWVuZGE9JDIgT1Igdml2aWVuZGE9JDMpYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAsIFtPUEVSQVRJVk8sIGVuYzEuZW5jLCBlbmMyLmVuY11cclxuICAgICAgICAgICAgICAgICAgICAgICAgKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmKHBhcmFtcy5wYXNvID09IDIpe1xyXG4gICAgICAgICAgICAgICAgICAgIC8vc2ltdWxhIGd1YXJkYWRvXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2ltdWxhckd1YXJkYWRvRGVFbmN1ZXN0YURlc2RlQXBwRXNjcml0b3Jpbyhjb250ZXh0LCBPUEVSQVRJVk8sIGVuYzEuZW5jLCBlbmMxLnRhcmVhX2FjdHVhbCAsIGVuYzIuanNvbl9lbmN1ZXN0YSlcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzaW11bGFyR3VhcmRhZG9EZUVuY3Vlc3RhRGVzZGVBcHBFc2NyaXRvcmlvKGNvbnRleHQsIE9QRVJBVElWTywgZW5jMi5lbmMsIGVuYzIudGFyZWFfYWN0dWFsICwgZW5jMS5qc29uX2VuY3Vlc3RhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAoYExpc3RvIHBhc28gJHtwYXJhbXMucGFzb30uIEludGVyY2FtYmlvIHJlYWxpemFkbyBlbnRyZSBsYXMgZW5jdWVzdGFzICAke3BhcmFtcy5lbmMxfSB5ICR7cGFyYW1zLmVuYzJ9LiBQb3IgZmF2b3IgY29uc2lzdGEgbGEgZW5jdWVzdGFgKVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7ICAgICBcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YWRvcl9kbXNfbW9zdHJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnLCByZWZlcmVuY2VzOlwib3BlcmF0aXZvc1wifSxcclxuICAgICAgICAgICAge25hbWU6J2VuY3Vlc3RhZG9yJyAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6Wydjb29yX3Byb2MnLCdjb29yX2NhbXBvJywnYWRtaW4nXSxcclxuICAgICAgICByZXN1bHRPazonbW9zdHJhcl9lbmN1ZXN0YXNfYV9ibGFucXVlYXInLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCAqXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBhc2lnbmFkbyA9ICQyIGFuZCBjYXJnYWRvX2RtIGlzIG5vdCBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXIgYnkgY2FyZ2Fkb19kbVxyXG4gICAgICAgICAgICAgICAgYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jdWVzdGFkb3JdKVxyXG4gICAgICAgICAgICAuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgaWYocmVzdWx0LnJvd0NvdW50ID09IDApe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IgKGBObyBzZSBlbmNvbnRyYXJvbiBlbmN1ZXN0YXMgY2FyZ2FkYXMgZW4gdW4gRE0gcGFyYSBlbCBvcGVyYXRpdm8gJHtwYXJhbXMub3BlcmF0aXZvfSwgZW5jdWVzdGFkb3IgJHtwYXJhbXMuZW5jdWVzdGFkb3J9YClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4ge3Jvd3M6IHJlc3VsdC5yb3dzLCBvcGVyYXRpdm86IHBhcmFtcy5vcGVyYXRpdm99O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fYmxhbnF1ZWFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCcsIHJlZmVyZW5jZXM6XCJvcGVyYXRpdm9zXCJ9LFxyXG4gICAgICAgICAgICB7bmFtZTondG9rZW4nICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6Wydjb29yX3Byb2MnLCdjb29yX2NhbXBvJywnYWRtaW4nXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGNvbnN0IFVBX1BSSU5DSVBBTCA9IGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBwYXJhbXMub3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgbGV0IHRhcmVhc1RlbVJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGNhcmdhZG9fZG0gPSBudWxsLCBvcGVyYWNpb24gPSAkMywgZXN0YWRvID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGNhcmdhZG9fZG0gPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudG9rZW4sIEVTVEFET19QT1NURVJJT1JfREVTQ0FSR0EsIE9QRVJBQ0lPTl9QUkVQQVJBUl9ERVNDQVJHQV0pXHJcbiAgICAgICAgICAgIC5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICBpZih0YXJlYXNUZW1SZXN1bHQucm93Q291bnQgPT0gMCl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcignTm8gc2UgYmxhbnF1ZcOzIG5pbmd1bmEgZW5jdWVzdGEnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvcihsZXQgdHQgb2YgdGFyZWFzVGVtUmVzdWx0LnJvd3Mpe1xyXG4gICAgICAgICAgICAgICAgdHQucmVzdWx0X2JsYW5xdWVvID0gYGVuYyAke3R0LmVuY30gc2UgYmxhbnF1ZcOzIGNvcnJlY3RhbWVudGUuYDtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRCYWNrdXAgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQganNvbl9lbmN1ZXN0YSA9IGpzb25fYmFja3VwLCBmZWNoYV9tb2RpZl9lbmN1ZXN0YSA9IGZlY2hhX2JhY2t1cFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMiBhbmQgZmVjaGFfYmFja3VwID4gY29hbGVzY2UoZmVjaGFfbW9kaWZfZW5jdWVzdGEsICcxOTAwLTAxLTAxJykgYW5kIGpzb25fYmFja3VwIGlzIG5vdCBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgICAgICBbdHQub3BlcmF0aXZvLCB0dC5lbmNdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuICAgICAgICAgICAgICAgIGlmKHJlc3VsdEJhY2t1cC5yb3dDb3VudCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdHQucmVzdWx0X2JsYW5xdWVvKz1gIFNlIHJlc3RhYmxlY2nDsyBlbCBiYWNrdXAgY29uIGZlY2hhICR7cmVzdWx0QmFja3VwLnJvdy5mZWNoYV9iYWNrdXAudG9ZbWRIbXMoKX0uYFxyXG4gICAgICAgICAgICAgICAgICAgIHZhciB7cGFyYW1zOnF1ZXJ5UGFyYW1zLHNldHRlcnN9ID0gZ2V0U2V0dGVyc0FuZFBhcmFtZXRlcnNGb3JSZWFOb1JlYVJlc3VtZW5Fc3RhZG8oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYTogdHQudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQVByaW5jaXBhbDogcmVzdWx0QmFja3VwLnJvdy5qc29uX2VuY3Vlc3RhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXJzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbdHQub3BlcmF0aXZvLCB0dC5lbmMsIHR0LnRhcmVhXVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0ICR7c2V0dGVycy5qb2luKCcsJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICdvaydgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNcclxuICAgICAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2ltdWxhckd1YXJkYWRvRGVFbmN1ZXN0YURlc2RlQXBwRXNjcml0b3Jpbyhjb250ZXh0LCByZXN1bHRCYWNrdXAucm93Lm9wZXJhdGl2bywgcmVzdWx0QmFja3VwLnJvdy5lbmMsIHR0LnRhcmVhLHJlc3VsdEJhY2t1cC5yb3cuanNvbl9lbmN1ZXN0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGFyZWFzVGVtUmVzdWx0LnJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXTtcclxuIl19
|
|
1780
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2VkdXJlcy1kbWVuY3UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL3Byb2NlZHVyZXMtZG1lbmN1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsWUFBWSxDQUFDOzs7SUFJYixrQ0FBa0M7SUFDbEMsaURBQStCO0lBRy9CLGlEQUFrRDtJQUVsRCx5REFBOEM7SUFFOUMsK0NBQXVEO0lBQ3ZELDJCQUFtQztJQUVuQyxnREFBZ0Q7SUFHaEQseURBQXdEO0lBQ3hELHFDQUFnQztJQUdoQyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0IsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRXBDLElBQUksWUFBWSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUUzQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUM7SUFFN0IsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7SUFDbkMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7SUFDdEMsTUFBTSx3QkFBd0IsR0FBRyxRQUFRLENBQUM7SUFDMUMsTUFBTSwyQkFBMkIsR0FBRyxXQUFXLENBQUM7SUFDaEQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBSTFCLElBQUksZUFBZ0MsQ0FBQztJQUVyQyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUE7SUFFcEIsSUFBSSxjQUFjLEdBQUcsR0FBRyxDQUFBO0lBRWpCLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxHQUFtQixFQUFDLEVBQUUsQ0FDckQsZUFBZSxHQUFHLEdBQUcsQ0FBQztJQURiLFFBQUEsa0JBQWtCLHNCQUNMO0lBRW5CLE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBVSxFQUFDLEVBQUUsQ0FDeEMsY0FBYyxHQUFHLEdBQUcsQ0FBQztJQURaLFFBQUEsY0FBYyxrQkFDRjtJQUVsQixNQUFN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QUFFLENBQUMsR0FBRyxDQUFDLENBQUM7eUJBQzFCLG1CQUFtQixFQUFFLENBQUM7b0JBQ3ZCLElBQUcsWUFBWSxDQUFDLFFBQVEsRUFBQzt3QkFDckIsRUFBRSxDQUFDLGVBQWUsSUFBRSx1Q0FBdUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQTt3QkFDdEcsSUFBSSxFQUFDLE1BQU0sRUFBQyxXQUFXLEVBQUMsT0FBTyxFQUFDLEdBQUcsK0NBQStDLENBQUM7NEJBQy9FLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSzs0QkFDZixxQkFBcUIsRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLGFBQWE7NEJBQ3JELE9BQU8sRUFBRSxFQUFFOzRCQUNYLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDO3lCQUMzQyxDQUFDLENBQUE7d0JBQ0YsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDdEI7a0NBQ1UsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7OzJDQUVSLEVBRW5CLFdBQVcsQ0FDZCxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUNuQixNQUFNLDJDQUEyQyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUE7cUJBQ3hKO2lCQUNKO2dCQUNELE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQztZQUNoQyxDQUFDO1NBQ0o7S0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBQcm9jZWR1cmVEZWYsIFRhYmxlRGVmaW5pdGlvbiwgQ2xpZW50LCBUYWJsZURlZmluaXRpb25zIH0gZnJvbSBcIi4vdHlwZXMtZG1lbmN1XCI7XHJcbmltcG9ydCB7IFByb2NlZHVyZUNvbnRleHQsIENvcmVGdW5jdGlvblBhcmFtZXRlcnMsIEZvcmVpZ25LZXkgfSBmcm9tIFwibWV0YS1lbmNcIjtcclxuaW1wb3J0ICogYXMgbGlrZUFyIGZyb20gXCJsaWtlLWFyXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzLWRtZW5jdVwiO1xyXG5pbXBvcnQgeyBJZFVuaWRhZEFuYWxpc2lzLCBVbmlkYWRBbmFsaXNpcywgRXN0YWRvQWNjaW9uLCBJZEVuYywgSWRUYXJlYSwgUmVzcHVlc3Rhc1JhaXosIElkT3BlcmF0aXZvLCBJZENhcmdhIH0gZnJvbSBcIi4uL3VubG9nZ2VkL3RpcG9zXCI7XHJcblxyXG5pbXBvcnQge09wZXJhdGl2b0dlbmVyYXRvciB9IGZyb20gXCJwcm9jZXNhbWllbnRvXCI7XHJcblxyXG5pbXBvcnQge2pzb24sIGpzb25vfSBmcm9tIFwicGctcHJvbWlzZS1zdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7Y2hhbmdpbmcsIGRhdGUsIGNvYWxlc2NlIH0gZnJvbSAnYmVzdC1nbG9iYWxzJztcclxuaW1wb3J0IHtwcm9taXNlcyBhcyAgZnN9IGZyb20gXCJmc1wiO1xyXG5cclxuaW1wb3J0ICogYXMgRXhwcmVzaW9uUGFyc2VyIGZyb20gJ2V4cHJlLXBhcnNlcic7XHJcbmltcG9ydCB7IHRhcmVhcyB9IGZyb20gXCIuL3RhYmxlLXRhcmVhc1wiO1xyXG5pbXBvcnQgeyBwcmVwZW5kTGlzdGVuZXIgfSBmcm9tIFwicHJvY2Vzc1wiO1xyXG5pbXBvcnQgeyBnZXREaWFzQVBhc2FyUXVlcnkgfSBmcm9tIFwiLi90YWJsZS10YXJlYXNfdGVtXCI7XHJcbmltcG9ydCB7IGVycm9yIH0gZnJvbSBcImNvbnNvbGVcIjtcclxuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCJ2bVwiO1xyXG5cclxudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XHJcbnZhciBzcWxUb29scyA9IHJlcXVpcmUoJ3NxbC10b29scycpO1xyXG5cclxudmFyIGRpc2NyZXBhbmNlcyA9IHJlcXVpcmUoJ2Rpc2NyZXBhbmNlcycpO1xyXG5cclxuY29uc3QgZm9ybVByaW5jaXBhbCA9ICdGOkYxJztcclxuXHJcbmNvbnN0IEVTVEFET19QT1NURVJJT1JfQ0FSR0EgPSAnQyc7XHJcbmNvbnN0IEVTVEFET19QT1NURVJJT1JfREVTQ0FSR0EgPSAnRCc7XHJcbmNvbnN0IE9QRVJBQ0lPTl9QUkVQQVJBUl9DQVJHQSA9ICdjYXJnYXInO1xyXG5jb25zdCBPUEVSQUNJT05fUFJFUEFSQVJfREVTQ0FSR0EgPSAnZGVzY2FyZ2FyJztcclxuY29uc3QgREVGQVVMVF9ET01JTklPID0gMztcclxuXHJcbmV4cG9ydCB0eXBlIGdlbmVyYXJJZEVuY0Z1biA9IChhcmVhOm51bWJlcixpbmRleDpudW1iZXIpPT5zdHJpbmdcclxuXHJcbnZhciBnZW5lcmFySWRFbmNGdW46IGdlbmVyYXJJZEVuY0Z1bjsgIFxyXG5cclxudmFyIG1heEFHZW5lcmFyID0gNTBcclxuXHJcbnZhciBtYXhBRW5jUG9yQXJlYSA9IDEwMFxyXG5cclxuZXhwb3J0IGNvbnN0IHNldEdlbmVyYXJJZEVuY0Z1biA9IChmdW46Z2VuZXJhcklkRW5jRnVuKT0+XHJcbiAgICBnZW5lcmFySWRFbmNGdW4gPSBmdW47XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0TWF4QWdlbmVyYXIgPSAobWF4Om51bWJlcik9PlxyXG4gICAgbWF4QUVuY1BvckFyZWEgPSBtYXg7XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0TWF4RW5jUG9yQXJlYSA9IChtYXg6bnVtYmVyKT0+XHJcbiAgICBtYXhBR2VuZXJhciA9IG1heDtcclxuXHJcbnNldEdlbmVyYXJJZEVuY0Z1bigoYXJlYTpudW1iZXIsaW5kZXg6bnVtYmVyKT0+YXJlYS50b1N0cmluZygpICsgKGluZGV4KzEwKS50b1N0cmluZygpKTtcclxuXHJcbnNldE1heEFnZW5lcmFyKDEwMCk7XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0T3BlcmF0aXZvQWN0dWFsID0gYXN5bmMgKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCk9PntcclxuICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICB2YXIgb3BlcmF0aXZvID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGBzZWxlY3Qgb3BlcmF0aXZvXHJcbiAgICAgICAgICAgIGZyb20gcGFyYW1ldHJvc1xyXG4gICAgICAgICAgICB3aGVyZSB1bmljb19yZWdpc3Ryb2BcclxuICAgICAgICAsW11cclxuICAgICkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZVxyXG4gICAgaWYob3BlcmF0aXZvKXtcclxuICAgICAgICByZXR1cm4gb3BlcmF0aXZvXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICB0aHJvdyBFcnJvciAoJ25vIHNlIGNvbmZpZ3Vyw7MgdW4gb3BlcmF0aXZvIGVuIGxhIHRhYmxhIHBhcsOhbWV0cm9zJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGdldERlZmF1bHRUYXJlYShjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0KSB7XHJcbiAgICByZXR1cm4gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICBzZWxlY3QgKiBcclxuICAgICAgICAgICAgZnJvbSB0YXJlYXMgXHJcbiAgICAgICAgICAgIHdoZXJlIGVzX2luaWNpYWxcclxuICAgIGApLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcGVyc2lzdGlyRW5jdWVzdGFBdXRvZ2VuZXJhZGFFbkRNKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIE9QRVJBVElWTzogSWRPcGVyYXRpdm8sIGFyZWE6IG51bWJlciwgZW5jQXV0b2dlbmVyYWRvRG06IHN0cmluZywgdG9rZW46IHN0cmluZywgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCByZWNlcGNpb25pc3RhOiBzdHJpbmcsIGFzaWduYWRvOiBzdHJpbmcpOlByb21pc2U8SWRFbmM+e1xyXG4gICAgbGV0IGlkRW5jID0gbnVsbDtcclxuICAgIHZhciBwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgc2VsZWN0IHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhIFxyXG4gICAgICAgICAgICBmcm9tIG9wZXJhdGl2b3MgXHJcbiAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxXHJcbiAgICBgLCBbT1BFUkFUSVZPXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgIGlmIChwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSkge1xyXG4gICAgICAgIGxldCBpID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICBgc2VsZWN0IGNvdW50KCopIGFzIHRvdGFsXHJcbiAgICAgICAgICAgICAgICBmcm9tIHRlbVxyXG4gICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgYXJlYSA9ICQyYCxcclxuICAgICAgICAgICAgW09QRVJBVElWTywgYXJlYV1cclxuICAgICAgICApLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgY29uc29sZS5sb2coaSk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFRhcmVhID0gYXdhaXQgZ2V0RGVmYXVsdFRhcmVhKGNvbnRleHQpO1xyXG4gICAgICAgIGxldCBlbmMgPSBnZW5lcmFySWRFbmNGdW4oYXJlYSwgaSk7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0SW5zZXJ0VGVtID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICBJTlNFUlQgaW50byB0ZW0gKFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgZW5jLFxyXG4gICAgICAgICAgICAgICAgYXJlYSxcclxuICAgICAgICAgICAgICAgIGRvbWluaW8sXHJcbiAgICAgICAgICAgICAgICBoYWJpbGl0YWRhLFxyXG4gICAgICAgICAgICAgICAgZW5jX2F1dG9nZW5lcmFkb19kbSxcclxuICAgICAgICAgICAgICAgIHRva2VuX2F1dG9nZW5lcmFkb19kbSxcclxuICAgICAgICAgICAgICAgIHRhcmVhX2FjdHVhbCxcclxuICAgICAgICAgICAgICAgIGpzb25fYmFja3VwLFxyXG4gICAgICAgICAgICAgICAganNvbl9lbmN1ZXN0YSwgXHJcbiAgICAgICAgICAgICAgICBmZWNoYV9iYWNrdXBcclxuICAgICAgICAgICAgKSBcclxuICAgICAgICAgICAgICAgIHZhbHVlcyAoJDEsICQyLCAkMywgJDQsICQ1LCAkNiwgJDcsICQ4LCAkOSwgJDEwLCBjdXJyZW50X3RpbWVzdGFtcClcclxuICAgICAgICAgICAgICAgIG9uIGNvbmZsaWN0IChlbmNfYXV0b2dlbmVyYWRvX2RtLCB0b2tlbl9hdXRvZ2VuZXJhZG9fZG0pIGRvIG5vdGhpbmdcclxuICAgICAgICAgICAgICAgIHJldHVybmluZyAqXHJcbiAgICAgICAgYCxbXHJcbiAgICAgICAgICAgIE9QRVJBVElWTyxcclxuICAgICAgICAgICAgZW5jLFxyXG4gICAgICAgICAgICBhcmVhLFxyXG4gICAgICAgICAgICBERUZBVUxUX0RPTUlOSU8sXHJcbiAgICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgICAgIGVuY0F1dG9nZW5lcmFkb0RtLFxyXG4gICAgICAgICAgICB0b2tlbixcclxuICAgICAgICAgICAgZGVmYXVsdFRhcmVhLnRhcmVhLFxyXG4gICAgICAgICAgICByZXNwdWVzdGFzUmFpeixcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1JhaXosXHJcbiAgICAgICAgXSkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgIGlmKHJlc3VsdEluc2VydFRlbS5yb3dDb3VudCA9PSAwKXtcclxuICAgICAgICAgICAgaWRFbmMgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgKGpzb25fYmFja3VwLCBqc29uX2VuY3Vlc3RhLCBmZWNoYV9iYWNrdXApID0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICgkNCwgJDUsIGN1cnJlbnRfdGltZXN0YW1wKVxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIChvcGVyYXRpdm8gPSAkMSBhbmQgZW5jX2F1dG9nZW5lcmFkb19kbSA9ICQyIGFuZCB0b2tlbl9hdXRvZ2VuZXJhZG9fZG0gPSAkMylcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgICAgICBgLFtPUEVSQVRJVk8sIGVuY0F1dG9nZW5lcmFkb0RtLCB0b2tlbiwgcmVzcHVlc3Rhc1JhaXosIHJlc3B1ZXN0YXNSYWl6XSkuZmV0Y2hVbmlxdWVSb3coKSkucm93LmVuYztcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgZ2VuZXJhclRhcmVhc1RlbUZhbHRhbnRlcyhjb250ZXh0LCBPUEVSQVRJVk8pO1xyXG4gICAgICAgIGlmIChyZXN1bHRJbnNlcnRUZW0ucm93Q291bnQgPT0gMSkge1xyXG4gICAgICAgICAgICBpZEVuYyA9IHJlc3VsdEluc2VydFRlbS5yb3cuZW5jO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCByZWNlcGNpb25pc3RhID0gJDQsIGFzaWduYWRvID0gJDVcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICAgICAgYCxbT1BFUkFUSVZPLCByZXN1bHRJbnNlcnRUZW0ucm93LmVuYywgZGVmYXVsdFRhcmVhLnRhcmVhLCByZWNlcGNpb25pc3RhLCBhc2lnbmFkb10pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGNhcmdhZG9fZG0gPSAkNCwgZXN0YWRvID0gJDUsIG9wZXJhY2lvbiA9ICQ2XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgIHJldHVybmluZyAqXHJcbiAgICAgICAgICAgIGAsW09QRVJBVElWTywgcmVzdWx0SW5zZXJ0VGVtLnJvdy5lbmMsIGRlZmF1bHRUYXJlYS50YXJlYSwgdG9rZW4sIEVTVEFET19QT1NURVJJT1JfQ0FSR0EsIE9QRVJBQ0lPTl9QUkVQQVJBUl9DQVJHQV1cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBpZEVuY1xyXG59XHJcblxyXG4vKmRlZmluaWNpw7NuIGRlIGVzdHJ1Y3R1cmEgY29tcGxldGEsIGN1YW5kbyBleGlzdGEgaW5nLWVuYyBoYXkgcXVlIHBvbmVybG8gYWjDrSovIFxyXG50eXBlIEVzdHJ1Y3R1cmFUYWJsYT17dGFibGVOYW1lOnN0cmluZywgcGtGaWVsZHM6e2ZpZWxkTmFtZTpzdHJpbmd9W10sIGNoaWxkVGFibGVzOkVzdHJ1Y3R1cmFUYWJsYVtdfTtcclxuZnVuY3Rpb24gY3JlYXRlU3RydWN0dXJlKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgdGFibGVOYW1lOnN0cmluZyl7XHJcbiAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgdmFyIG1haW5UYWJsZURlZjpUYWJsZURlZmluaXRpb24gPSBiZS50YWJsZVN0cnVjdHVyZXNbdGFibGVOYW1lXShjb250ZXh0KTtcclxuICAgIHZhciBnZXRQa0Zyb21UYWJsZURlZiA9IGZ1bmN0aW9uIGdldFBrRnJvbVRhYmxlRGVmKHRhYmxlRGVmOlRhYmxlRGVmaW5pdGlvbil7XHJcbiAgICAgICAgcmV0dXJuIHRhYmxlRGVmLnByaW1hcnlLZXkubWFwKGZ1bmN0aW9uKHBrKXtcclxuICAgICAgICAgICAgcmV0dXJuIHtmaWVsZE5hbWU6cGt9O1xyXG4gICAgICAgIH0pXHJcbiAgICB9O1xyXG4gICAgdmFyIGdldEZrRnJvbVRhYmxlRGVmID0gZnVuY3Rpb24gZ2V0RmtGcm9tVGFibGVEZWYodGFibGVEZWY6VGFibGVEZWZpbml0aW9uLCBwYXJlbnRUYWJsZU5hbWU6IHN0cmluZyl7XHJcbiAgICAgICAgLy8gcmV0dXJuIHRhYmxlRGVmLmZvcmVpZ25LZXlzPyB0YWJsZURlZi5mb3JlaWduS2V5cy5tYXAoZms9PmZrLmZpZWxkcyk6IFtdO1xyXG4gICAgICAgIGxldCBwYXJlbnRGayA9ICg8Rm9yZWlnbktleVtdPiB0YWJsZURlZi5mb3JlaWduS2V5cykuZmluZChmaz0+ZmsucmVmZXJlbmNlcyA9PSBwYXJlbnRUYWJsZU5hbWUpO1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRGaz8gcGFyZW50RmsuZmllbGRzOiBbXTtcclxuICAgIH1cclxuICAgIHZhciBzdHJ1Y3Q6RXN0cnVjdHVyYVRhYmxhPXtcclxuICAgICAgICB0YWJsZU5hbWU6bWFpblRhYmxlRGVmLm5hbWUsXHJcbiAgICAgICAgcGtGaWVsZHM6Z2V0UGtGcm9tVGFibGVEZWYobWFpblRhYmxlRGVmKSxcclxuICAgICAgICBjaGlsZFRhYmxlczpbXVxyXG4gICAgfTtcclxuICAgIGlmKG1haW5UYWJsZURlZi5kZXRhaWxUYWJsZXMgJiYgbWFpblRhYmxlRGVmLmRldGFpbFRhYmxlcy5sZW5ndGgpe1xyXG4gICAgICAgIG1haW5UYWJsZURlZi5kZXRhaWxUYWJsZXMuZm9yRWFjaChmdW5jdGlvbihkZXRhaWxUYWJsZSl7XHJcbiAgICAgICAgICAgIHN0cnVjdC5jaGlsZFRhYmxlcy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgY2hhbmdpbmcoXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlU3RydWN0dXJlKGNvbnRleHQsIGRldGFpbFRhYmxlLnRhYmxlKSxcclxuICAgICAgICAgICAgICAgICAgICB7ZmtGaWVsZHM6IGdldEZrRnJvbVRhYmxlRGVmKGJlLnRhYmxlU3RydWN0dXJlc1tkZXRhaWxUYWJsZS50YWJsZV0oY29udGV4dCksIHRhYmxlTmFtZSl9XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHJldHVybiBzdHJ1Y3Q7XHJcbn1cclxuLyogZmluIGRlZmluaWNpb24gZXN0cnVjdHVyYSBjb21wbGV0YSAqL1xyXG5cclxudHlwZSBBbnlPYmplY3QgPSB7W2s6c3RyaW5nXTphbnl9XHJcblxyXG52YXIgZ2V0U2V0dGVyc0FuZFBhcmFtZXRlcnNGb3JSZWFOb1JlYVJlc3VtZW5Fc3RhZG8gPSAoZnVuUGFyYW1zOnt0YXJlYTpJZFRhcmVhLCByZXNwdWVzdGFzVUFQcmluY2lwYWw6UmVzcHVlc3Rhc1JhaXosIHNldHRlcnM6c3RyaW5nW10sIHBhcmFtczphbnlbXX0pPT57XHJcbiAgICBsZXQge3RhcmVhLHJlc3B1ZXN0YXNVQVByaW5jaXBhbCxzZXR0ZXJzLHBhcmFtc30gPSBmdW5QYXJhbXM7XHJcbiAgICBsZXQge3Jlc3VtZW5Fc3RhZG9TdXAsIGNvZE5vUmVhU3VwLCBjb2RSZWFTdXAsIHJlc3VtZW5Fc3RhZG8sIGNvZE5vUmVhLCBjb2RSZWF9ID0gcmVzcHVlc3Rhc1VBUHJpbmNpcGFsO1xyXG4gICAgc2V0dGVycyA9IHNldHRlcnMuY29uY2F0KFtcclxuICAgICAgICBgcmVzdW1lbl9lc3RhZG8ke3RhcmVhPT0nc3VwZSc/J19zdXAnOicnfT0kJHtwYXJhbXMubGVuZ3RoKzF9YCxcclxuICAgICAgICBgbm9yZWEke3RhcmVhPT0nc3VwZSc/J19zdXAnOicnfT0kJHtwYXJhbXMubGVuZ3RoKzJ9YCxcclxuICAgICAgICBgcmVhJHt0YXJlYT09J3N1cGUnPydfc3VwJzonJ309JCR7cGFyYW1zLmxlbmd0aCszfWBcclxuICAgIF0pXHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuY29uY2F0KFtcclxuICAgICAgICB0YXJlYT09J3N1cGUnP3Jlc3VtZW5Fc3RhZG9TdXA6cmVzdW1lbkVzdGFkbyxcclxuICAgICAgICB0YXJlYT09J3N1cGUnP2NvZE5vUmVhU3VwOmNvZE5vUmVhLFxyXG4gICAgICAgIHRhcmVhPT0nc3VwZSc/Y29kUmVhU3VwOmNvZFJlYVxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4ge3NldHRlcnMscGFyYW1zfVxyXG59XHJcblxyXG52YXIgZ3VhcmRhckVuY3Vlc3RhRW5UZW0gPSBhc3luYyAoY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBvcGVyYXRpdm86SWRPcGVyYXRpdm8sIGlkRW5jOklkRW5jLCByZXNwdWVzdGFzVUFQcmluY2lwYWw6UmVzcHVlc3Rhc1JhaXosIHRhcmVhOklkVGFyZWEpPT57XHJcbiAgICB2YXIge3BhcmFtcyxzZXR0ZXJzfSA9IGdldFNldHRlcnNBbmRQYXJhbWV0ZXJzRm9yUmVhTm9SZWFSZXN1bWVuRXN0YWRvKHtcclxuICAgICAgICB0YXJlYSxcclxuICAgICAgICByZXNwdWVzdGFzVUFQcmluY2lwYWwsXHJcbiAgICAgICAgc2V0dGVyczogW2Bqc29uX2VuY3Vlc3RhID0gJDNgLCBgZmVjaGFfbW9kaWZfZW5jdWVzdGEgPSBjdXJyZW50X3RpbWVzdGFtcGBdLFxyXG4gICAgICAgIHBhcmFtczogW29wZXJhdGl2bywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbF1cclxuICAgIH0pXHJcbiAgICByZXR1cm4gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgYHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgc2V0ICR7c2V0dGVycy5qb2luKCcsJyl9XHJcbiAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICxcclxuICAgICAgICBwYXJhbXNcclxuICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxufVxyXG5cclxudmFyIHNpbXVsYXJHdWFyZGFkb0RlRW5jdWVzdGFEZXNkZUFwcEVzY3JpdG9yaW8gPSBhc3luYyAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCAsb3BlcmF0aXZvOiBzdHJpbmcsIGVuYzogSWRFbmMsIHRhcmVhOiBJZFRhcmVhLCBqc29uX2VuY3Vlc3RhOmFueSApPT57XHJcbiAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgY29uc3QgVUFfUFJJTkNJUEFMID0gYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIG9wZXJhdGl2byk7XHJcbiAgICByZXR1cm4gYXdhaXQgYmUucHJvY2VkdXJlLmRtX2ZvcnBrcmFpel9kZXNjYXJnYXIuY29yZUZ1bmN0aW9uKFxyXG4gICAgICAgIGNvbnRleHQsIFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3BlcmF0aXZvOm9wZXJhdGl2bywgXHJcbiAgICAgICAgICAgIHBlcnNpc3RlbnRlczp7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzOntcclxuICAgICAgICAgICAgICAgICAgICBbVUFfUFJJTkNJUEFMXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZW5jXToganNvbl9lbmN1ZXN0YVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBpbmZvcm1hY2lvbkhkcjp7XHJcbiAgICAgICAgICAgICAgICAgICAgW2VuY106IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICApXHJcbn1cclxuXHJcbnZhciBnZXRIZHJRdWVyeSA9ICBmdW5jdGlvbiBnZXRIZHJRdWVyeShxdW90ZWRDb25kVml2OnN0cmluZywgY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwZXJtaXRlR2VuZXJhck11ZXN0cmE6Ym9vbGVhbil7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgd2l0aCAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudChPcGVyYXRpdm9HZW5lcmF0b3IubWFpblREKX0gYXMgXHJcbiAgICAgICAgKHNlbGVjdCB0LmVuYywgdC5qc29uX2VuY3Vlc3RhIGFzIHJlc3B1ZXN0YXMsIHQucmVzdW1lbl9lc3RhZG8gYXMgXCJyZXN1bWVuRXN0YWRvXCIsIFxyXG4gICAgICAgICAgICBqc29uYl9idWlsZF9vYmplY3QoXHJcbiAgICAgICAgICAgICAgICAnZG9taW5pbycgICAgICAgLCBkb21pbmlvICAgICAgICxcclxuICAgICAgICAgICAgICAgICdub21jYWxsZScgICAgICAsIG5vbWNhbGxlICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ3NlY3RvcicgICAgICAgICwgc2VjdG9yICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnZWRpZmljaW8nICAgICAgLCBlZGlmaWNpbyAgICAgICxcclxuICAgICAgICAgICAgICAgICdlbnRyYWRhJyAgICAgICAsIGVudHJhZGEgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ25yb2NhdGFzdHJhbCcgICwgbnJvY2F0YXN0cmFsICAsXHJcbiAgICAgICAgICAgICAgICAncGlzbycgICAgICAgICAgLCBwaXNvICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgICdkZXBhcnRhbWVudG8nICAsIGRlcGFydGFtZW50byAgLFxyXG4gICAgICAgICAgICAgICAgJ2hhYml0YWNpb24nICAgICwgaGFiaXRhY2lvbiAgICAsXHJcbiAgICAgICAgICAgICAgICAnY2FzYScgICAgICAgICAgLCBjYXNhICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgICdwcmlvcmlkYWQnICAgICAsIHJlc2VydmErMSAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ29ic2VydmFjaW9uZXMnICwgdHQuY2FyZ2Ffb2JzZXJ2YWNpb25lcyAsXHJcbiAgICAgICAgICAgICAgICAnY2l0YScgICAgICAgICAgLCBjaXRhICxcclxuICAgICAgICAgICAgICAgICdjYXJnYScgICAgICAgICAsIHQuYXJlYSAgICAgICAgIFxyXG4gICAgICAgICAgICApIGFzIHRlbSwgdC5hcmVhLFxyXG4gICAgICAgICAgICAtLVRPRE86IEdFTkVSQUxJWkFSXHJcbiAgICAgICAgICAgIGpzb25iX2J1aWxkX29iamVjdChcclxuICAgICAgICAgICAgICAgICd0YXJlYScsIHR0LnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgJ2ZlY2hhX2FzaWduYWNpb24nLCBmZWNoYV9hc2lnbmFjaW9uLFxyXG4gICAgICAgICAgICAgICAgJ2FzaWduYWRvJywgYXNpZ25hZG8sXHJcbiAgICAgICAgICAgICAgICAnbWFpbl9mb3JtJywgbWFpbl9mb3JtXHJcbiAgICAgICAgICAgICkgYXMgdGFyZWEsXHJcbiAgICAgICAgICAgIG1pbihmZWNoYV9hc2lnbmFjaW9uKSBhcyBmZWNoYV9hc2lnbmFjaW9uXHJcbiAgICAgICAgICAgIGZyb20gdGVtIHQgbGVmdCBqb2luIHRhcmVhc190ZW0gdHQgb24gKHQub3BlcmF0aXZvID0gdHQub3BlcmF0aXZvIGFuZCB0LmVuYyA9IHR0LmVuYyBhbmQgdC50YXJlYV9hY3R1YWwgPSB0dC50YXJlYSlcclxuICAgICAgICAgICAgICAgICAgICAgICBsZWZ0IGpvaW4gdGFyZWFzIHRhIG9uIHQudGFyZWFfYWN0dWFsID0gdGEudGFyZWFcclxuICAgICAgICAgICAgd2hlcmUgdC5oYWJpbGl0YWRhIGFuZCAke3F1b3RlZENvbmRWaXZ9XHJcbiAgICAgICAgICAgIGdyb3VwIGJ5IHQuZW5jLCB0Lmpzb25fZW5jdWVzdGEsIHQucmVzdW1lbl9lc3RhZG8sIGRvbWluaW8sIG5vbWNhbGxlLHNlY3RvcixlZGlmaWNpbywgZW50cmFkYSwgbnJvY2F0YXN0cmFsLCBwaXNvLGRlcGFydGFtZW50byxoYWJpdGFjaW9uLGNhc2EscmVzZXJ2YSx0dC5jYXJnYV9vYnNlcnZhY2lvbmVzLCBjaXRhLCB0LmFyZWEsIHR0LnRhcmVhLCBmZWNoYV9hc2lnbmFjaW9uLCBhc2lnbmFkbywgbWFpbl9mb3JtXHJcbiAgICAgICAgKVxyXG4gICAgICAgIHNlbGVjdCBqc29uYl9idWlsZF9vYmplY3QoXHJcbiAgICAgICAgICAgICAgICAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKE9wZXJhdGl2b0dlbmVyYXRvci5tYWluVEQpfSwgJHtqc29ubyhcclxuICAgICAgICAgICAgICAgICAgICBgc2VsZWN0IGVuYywgcmVzcHVlc3RhcywganNvbmJfYnVpbGRfb2JqZWN0KCdyZXN1bWVuRXN0YWRvJyxcInJlc3VtZW5Fc3RhZG9cIikgYXMgb3RyYXMgZnJvbSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudChPcGVyYXRpdm9HZW5lcmF0b3IubWFpblREKX1gLFxyXG4gICAgICAgICAgICAgICAgICAgICdlbmMnLFxyXG4gICAgICAgICAgICAgICAgICAgIGBvdHJhcyB8fCBjb2FsZXNjZShyZXNwdWVzdGFzLCd7fSc6Ompzb25iKWBcclxuICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICkgYXMgcmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgJHtqc29uKGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBhLmFyZWEgYXMgY2FyZ2EsIG9ic2VydmFjaW9uZXNfaGRyIGFzIG9ic2VydmFjaW9uZXMsIG1pbihmZWNoYV9hc2lnbmFjaW9uKSBhcyBmZWNoYSwgdGEucmVjZXBjaW9uaXN0YVxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQoT3BlcmF0aXZvR2VuZXJhdG9yLm1haW5URCl9IGF1eCBpbm5lciBqb2luIGFyZWFzIGEgdXNpbmcgKGFyZWEpIGlubmVyIGpvaW4gdGFyZWFzX2FyZWFzIHRhIG9uIChhLmFyZWEgPSB0YS5hcmVhIGFuZCBhdXgudGFyZWEtPj4ndGFyZWEnID0gdGEudGFyZWEpXHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXAgYnkgYS5hcmVhLCBvYnNlcnZhY2lvbmVzX2hkciwgdGEucmVjZXBjaW9uaXN0YSBcclxuICAgICAgICAgICAgICAgICR7cGVybWl0ZUdlbmVyYXJNdWVzdHJhP2BcclxuICAgICAgICAgICAgICAgICAgICB1bmlvbiAtLSBlc3RlIHVuaW9uIHBlcm1pdGUgdmlzdWFsaXphciBhcmVhcyBhc2lnbmFkYXMgc2luIGVuY3Vlc3RhcyBnZW5lcmFkYXNcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3QgYXJlYSBhcyBjYXJnYSwgbnVsbCBhcyBvYnNlcnZhY2lvbmVzLCBudWxsIGFzIGZlY2hhLCByZWNlcGNpb25pc3RhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX2FyZWFzIHdoZXJlIGFzaWduYWRvID0gJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChjb250ZXh0LnVzZXIuaWRwZXIpfSBhbmQgdGFyZWEgPSAnZW5jdSdgOicnfVxyXG4gICAgICAgICAgICAgICAgYCwnZmVjaGEnKX0gYXMgY2FyZ2FzLFxyXG4gICAgICAgICAgICAke2pzb25vKFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBlbmMsIGpzb25iX2J1aWxkX29iamVjdCgndGVtJywgdGVtLCAndGFyZWEnLCB0YXJlYSkgYXMgb3RyYXMgZnJvbSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudChPcGVyYXRpdm9HZW5lcmF0b3IubWFpblREKX1gLFxyXG4gICAgICAgICAgICAgICAgICdlbmMnLFxyXG4gICAgICAgICAgICAgICAgIGBvdHJhcyB8fCd7fSc6Ompzb25iYFxyXG4gICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgYXMgXCJpbmZvcm1hY2lvbkhkclwiXHJcbmBcclxufVxyXG5cclxuZXhwb3J0IHZhciBzZXRIZHJRdWVyeSA9IChteUZ1bjoocXVvdGVkQ29uZFZpdjpzdHJpbmcsIGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGVybWl0ZUdlbmVyYXJNdWVzdHJhOmJvb2xlYW4pPT5zdHJpbmcpPT4gZ2V0SGRyUXVlcnk9bXlGdW5cclxuXHJcbmNvbnN0IGdldFVBUHJpbmNpcGFsID0gYXN5bmMgKGNsaWVudDpDbGllbnQsIG9wZXJhdGl2bzpzdHJpbmcpPT5cclxuICAgIChhd2FpdCBjbGllbnQucXVlcnkoXHJcbiAgICAgICAgYHNlbGVjdCB1bmlkYWRfYW5hbGlzaXNcclxuICAgICAgICAgICAgZnJvbSB1bmlkYWRfYW5hbGlzaXNcclxuICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgcHJpbmNpcGFsXHJcbiAgICAgICAgYFxyXG4gICAgICAgICxcclxuICAgICAgICBbb3BlcmF0aXZvXVxyXG4gICAgKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlXHJcblxyXG52YXIgZnVuY2lvbmVzQ29ub2NpZGFzOntbayBpbiBzdHJpbmddOmJvb2xlYW59ID0ge31cclxuXHJcbnZhciBjb21waWxlciA9IG5ldyBFeHByZXNpb25QYXJzZXIuQ29tcGlsZXIoe1xyXG4gICAgbGFuZ3VhZ2U6J2pzJyxcclxuICAgIHZhcldyYXBwZXI6KHZhcl9uYW1lOnN0cmluZyk9PmBoZWxwZXJzLm51bGwyemVybyh2YWxvcmVzLiR7dmFyX25hbWV9KWAsXHJcbiAgICBmdW5XcmFwcGVyOihmdW5jdGlvbk5hbWU6c3RyaW5nKT0+e1xyXG4gICAgICAgIGlmKCFmdW5jaW9uZXNDb25vY2lkYXNbZnVuY3Rpb25OYW1lXSl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGZ1bmN0aW9uTmFtZSlcclxuICAgICAgICAgICAgZnVuY2lvbmVzQ29ub2NpZGFzW2Z1bmN0aW9uTmFtZV0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYGhlbHBlcnMuZnVucy4ke2Z1bmN0aW9uTmFtZX1gXHJcbiAgICB9XHJcbn0pXHJcblxyXG50eXBlIENhc2lsbGVyb0RlQWNhPXtcclxuICAgIGNoaWxkczogQ2FzaWxsZXJvRGVBY2FbXSxcclxuICAgIGRhdGE6e1xyXG4gICAgICAgIGV4cHJlc2lvbl9oYWJpbGl0YXI6IHN0cmluZ1xyXG4gICAgICAgIGV4cHJlc2lvbl9oYWJpbGl0YXJfanM6IHN0cmluZ1xyXG4gICAgICAgIGVzcGVjaWFsOiBhbnlcclxuICAgICAgICBleHByZXNpb25fYXV0b2luZ3Jlc2FyX2pzOiBzdHJpbmdcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY29tcGlsYXJFeHByZXNpb24oZXhwcmVzaW9uOnN0cmluZyl7XHJcbiAgICByZXR1cm4gY29tcGlsZXIudG9Db2RlKEV4cHJlc2lvblBhcnNlci5wYXJzZShcclxuICAgICAgICBleHByZXNpb25cclxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcYmlzIGRpc3RpbmN0IGZyb21cXGIvZ2ksJyA8PiAnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvISEvZ2ksJyAnKVxyXG4gICAgKSkucmVwbGFjZSgvaGVscGVyc1xcLmZ1bnNcXC5ibGFuY29cXChoZWxwZXJzLm51bGwyemVyb1xcKC9nLCdoZWxwZXJzLmZ1bnMuYmxhbmNvKCgnKVxyXG4gICAgLnJlcGxhY2UoL2hlbHBlcnNcXC5mdW5zXFwuaW5mb3JtYWRvXFwoaGVscGVycy5udWxsMnplcm9cXCgvZywnaGVscGVycy5mdW5zLmluZm9ybWFkbygoJyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbXBpbGFyRXhwcmVzaW9uZXMoY2FzaWxsZXJvOkNhc2lsbGVyb0RlQWNhKXtcclxuICAgIGlmKCFjYXNpbGxlcm8peyByZXR1cm4gfVxyXG4gICAgaWYoY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2hhYmlsaXRhcil7XHJcbiAgICAgICAgY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA9IGNvbXBpbGFyRXhwcmVzaW9uKGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9oYWJpbGl0YXIpO1xyXG4gICAgfVxyXG4gICAgaWYoY2FzaWxsZXJvLmRhdGEuZXNwZWNpYWw/LmF1dG9pbmcpe1xyXG4gICAgICAgIHZhciBwYXJ0ZXMgPSBjYXNpbGxlcm8uZGF0YS5lc3BlY2lhbD8uYXV0b2luZy5zcGxpdCgnPT4nKTtcclxuICAgICAgICBpZihwYXJ0ZXMubGVuZ3RoPjEpe1xyXG4gICAgICAgICAgICB2YXIgcHJlY29uZGljaW9uID0gcGFydGVzWzBdO1xyXG4gICAgICAgICAgICB2YXIgdmFsb3IgPSBwYXJ0ZXMuc2xpY2UoMSkuam9pbignPT4nKTtcclxuICAgICAgICAgICAgY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2F1dG9pbmdyZXNhcl9qcyA9IGAoJHtjb21waWxhckV4cHJlc2lvbihwcmVjb25kaWNpb24pfSk/KCR7Y29tcGlsYXJFeHByZXNpb24odmFsb3IpfSk6bnVsbGA7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9hdXRvaW5ncmVzYXJfanMgPSBjb21waWxhckV4cHJlc2lvbihwYXJ0ZXNbMF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvcih2YXIgY2FzaWxsZXJvSW50ZXJubyBvZiBjYXNpbGxlcm8uY2hpbGRzKSBjb21waWxhckV4cHJlc2lvbmVzKGNhc2lsbGVyb0ludGVybm8pO1xyXG59XHJcblxyXG5jb25zdCBnZW5lcmFyRW5jdWVzdGFUZW0gPSBhc3luYyAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgaTogbnVtYmVyLCBhcmVhOiBudW1iZXIsIGRvbWluaW86IG51bWJlcikgPT4ge1xyXG4gICAgbGV0IGVuYyA9IGdlbmVyYXJJZEVuY0Z1bihhcmVhLCBpKTtcclxuICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICBJTlNFUlQgaW50byB0ZW0gKG9wZXJhdGl2bywgZW5jLCBhcmVhLCBkb21pbmlvLCBoYWJpbGl0YWRhKSB2YWx1ZXMgKCQxLCAkMiwgJDMsICQ0LCAkNSlcclxuICAgICAgICAgICAgb24gY29uZmxpY3QgKG9wZXJhdGl2bywgZW5jKSBkbyBub3RoaW5nYCxcclxuICAgIFtvcGVyYXRpdm8sIGVuYywgYXJlYSwgZG9taW5pbywgdHJ1ZV0pLmV4ZWN1dGUoKTtcclxufVxyXG5cclxuY29uc3QgZ2VuZXJhclRhcmVhc1RlbUZhbHRhbnRlcyA9IGFzeW5jIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvKSA9PiB7XHJcbiAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgaW5zZXJ0IGludG8gdGFyZWFzX3RlbSAob3BlcmF0aXZvLCBlbmMsIHRhcmVhKVxyXG4gICAgICAgICAgICBzZWxlY3QgdGEub3BlcmF0aXZvLCB0YS5lbmMsIHRhLnRhcmVhXHJcbiAgICAgICAgICAgIGZyb20gKHNlbGVjdCB0YS4qLCB0LmVuYyx0LmFyZWEgZnJvbSB0YXJlYXMgdGEsIHRlbSB0IHdoZXJlIHRhLm9wZXJhdGl2bz10Lm9wZXJhdGl2bykgdGEgXHJcbiAgICAgICAgICAgIHdoZXJlIHRhLm9wZXJhdGl2byA9ICQxIFxyXG4gICAgICAgICAgICAgICAgYW5kIG5vdCAodGEub3BlcmF0aXZvLCB0YS5lbmMsIHRhLnRhcmVhKSBpbiAoc2VsZWN0IG9wZXJhdGl2bywgZW5jLCB0YXJlYSBmcm9tIHRhcmVhc190ZW0pXHJcbiAgICAgICAgICAgIG9yZGVyIGJ5IDEsMywyO1xyXG4gICAgYCxbb3BlcmF0aXZvXSkuZXhlY3V0ZSgpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgQUNDSU9OX1BBU0FSX1BST0lFID0gJ2VuY3Vlc3Rhc19wcm9jZXNhbWllbnRvX3Bhc2FyJztcclxuZXhwb3J0IGNvbnN0IFByb2NlZHVyZXNEbUVuY3UgOiBQcm9jZWR1cmVEZWZbXSA9IFtcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246J29wZXJhdGl2b19lc3RydWN0dXJhX2NvbXBsZXRhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgICAgICAsdHlwZU5hbWU6J3RleHQnLCByZWZlcmVuY2VzOidvcGVyYXRpdm9zJ30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByZXN1bHRPazonZGVzcGxlZ2FyRm9ybXVsYXJpbycsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBjYXNpbGxlcm9zX2plcmFycXVpemFkb3MoJDEpIGFzIGZvcm11bGFyaW9zLCBcclxuICAgICAgICAgICAgICAgICAgICAke2pzb25vKGBzZWxlY3QgdW5pZGFkX2FuYWxpc2lzLCBwYWRyZSwgcGtfYWdyZWdhZGEsICd7fSc6Ompzb25iIGFzIGhpamFzIGZyb20gdW5pZGFkX2FuYWxpc2lzIHdoZXJlIG9wZXJhdGl2byA9ICQyYCwgJ3VuaWRhZF9hbmFsaXNpcycpfSBhcyB1bmlkYWRlc19hbmFsaXNpc1xyXG4gICAgICAgICAgICAgICAgYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbWV0ZXJzLm9wZXJhdGl2bywgcGFyYW1ldGVycy5vcGVyYXRpdm9dXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgbGlrZUFyKHJlc3VsdC5yb3cuZm9ybXVsYXJpb3MpLmZvckVhY2goZj0+Y29tcGlsYXJFeHByZXNpb25lcyhmKSk7XHJcbiAgICAgICAgICAgIC8vIEhlcm1hbm9zIHNvbiBsb3MgZm9ybXVsYXJpb3MgcXVlIGVzdMOhbiBpbXBsYW50YWRvcyBlbiBvdHJvIGZvcm11bGFyaW8gZGUgbGEgbWlzbWEgVUEuIFBvciBlamVtcGxvIGVsIEExIGVuIGVsIFMxXHJcbiAgICAgICAgICAgIHZhciByZXN1bHRIZXJtYW5vcyA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuc2VsZWN0IG8uaWRfY2FzaWxsZXJvIGFzIGlkX2Zvcm11bGFyaW8sIG8udW5pZGFkX2FuYWxpc2lzLCAnQkZfJ3x8by5jYXNpbGxlcm8gYm90b24sIGJmLmNhc2lsbGVybywgYmYucGFkcmUsIGZwLmNhc2lsbGVybywgZnAudW5pZGFkX2FuYWxpc2lzXHJcbiAgZnJvbSBjYXNpbGxlcm9zIG8gbGVmdCBqb2luIGNhc2lsbGVyb3MgYmZcclxuICAgIG9uIGJmLnRpcG9jPSdCRidcclxuXHRhbmQgYmYuY2FzaWxsZXJvID0gJ0JGXyd8fG8uY2FzaWxsZXJvXHJcblx0YW5kIGJmLm9wZXJhdGl2byA9IG8ub3BlcmF0aXZvXHJcblx0bGVmdCBqb2luIGNhc2lsbGVyb3MgZnBcclxuXHQgIG9uIGZwLmlkX2Nhc2lsbGVybyA9IGJmLnBhZHJlXHJcblx0ICBhbmQgZnAub3BlcmF0aXZvID0gYmYub3BlcmF0aXZvXHJcbiAgd2hlcmUgby50aXBvYyA9ICdGJ1xyXG4gICAgYW5kIG8udW5pZGFkX2FuYWxpc2lzID0gZnAudW5pZGFkX2FuYWxpc2lzXHJcblx0YW5kIG8ub3BlcmF0aXZvID0gJDFgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtZXRlcnMub3BlcmF0aXZvXVxyXG4gICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIHJlc3VsdEhlcm1hbm9zLnJvd3MuZm9yRWFjaChyb3c9PntcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5yb3cuZm9ybXVsYXJpb3Nbcm93LmlkX2Zvcm11bGFyaW9dLmRhdGEuaGVybWFubyA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRhclVBKHVhOlVuaWRhZEFuYWxpc2lzLCBpZFVhOklkVW5pZGFkQW5hbGlzaXMsIHVBczp7W2sgaW4gSWRVbmlkYWRBbmFsaXNpc106IFVuaWRhZEFuYWxpc2lzfSl7XHJcbiAgICAgICAgICAgICAgICBpZih1YS5wYWRyZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdUFzW3VhLnBhZHJlXS5oaWphc1tpZFVhXSA9IHVhO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgdWEucHJpbmNpcGFsPXRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGlrZUFyKHJlc3VsdC5yb3cudW5pZGFkZXNfYW5hbGlzaXMpLmZvckVhY2goKHVhLCBpZFVhKT0+XHJcbiAgICAgICAgICAgICAgICBjb21wbGV0YXJVQSh1YSwgaWRVYSBhcyBJZFVuaWRhZEFuYWxpc2lzLCByZXN1bHQucm93LnVuaWRhZGVzX2FuYWxpc2lzKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIHZhciB7XHJcbiAgICAgICAgICAgICAgICBjb25fcmVhX2hvZ2FyOiBjb25SZWFIb2dhciwgXHJcbiAgICAgICAgICAgICAgICBjb25maWdfc29ydGVvOiBjb25maWdTb3J0ZW8sIFxyXG4gICAgICAgICAgICAgICAgaGFiaWxpdGFjaW9uX2JvdG9uX2Zvcm11bGFyaW86aGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmE6IHBlcm1pdGVHZW5lcmFyTXVlc3RyYVxyXG4gICAgICAgICAgICB9ID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBjb25maWdfc29ydGVvLCBjb25fcmVhX2hvZ2FyLCBoYWJpbGl0YWNpb25fYm90b25fZm9ybXVsYXJpbywgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmEgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBvcGVyYXRpdm9zIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxXHJcbiAgICAgICAgICAgIGAsW3BhcmFtZXRlcnMub3BlcmF0aXZvXSkuZmV0Y2hVbmlxdWVSb3coKSkucm93O1xyXG4gICAgICAgICAgICBsZXQgY29tcGlsYXJFeHByZXNpb25lc0RvbWluaW9zID0gKGV4cHJlc2lvbmVzRG9taW5pbzphbnkpPT4gXHJcbiAgICAgICAgICAgICAgICBsaWtlQXIoZXhwcmVzaW9uZXNEb21pbmlvKVxyXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGV4cHIsZG9taW5pbyk9Pih7ZG9taW5pbywgZXhwcjpjb21waWxhckV4cHJlc2lvbihleHByLmV4cHIpfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgLnBsYWluKCk7XHJcbiAgICAgICAgICAgIGlmKGNvbmZpZ1NvcnRlbyl7XHJcbiAgICAgICAgICAgICAgICBsaWtlQXIoY29uZmlnU29ydGVvKS5mb3JFYWNoKChjb25maWdTb3J0ZW9Gb3JtdWxhcmlvKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZXhwcl9pbmNvbXBsZXRpdHVkX2pzPWNvbXBpbGFyRXhwcmVzaW9uZXNEb21pbmlvcyhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmV4cHJfaW5jb21wbGV0aXR1ZClcclxuICAgICAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmZpbHRyb19qcz1jb21waWxhckV4cHJlc2lvbmVzRG9taW5pb3MoY29uZmlnU29ydGVvRm9ybXVsYXJpby5maWx0cm8pXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyl7XHJcbiAgICAgICAgICAgICAgICBsaWtlQXIoaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvKS5mb3JFYWNoKChmb3JtKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm0uZXhwcl9oYWJpbGl0YXJfYm90b25fanM9Y29tcGlsYXJFeHByZXNpb24oZm9ybS5leHByX2hhYmlsaXRhcl9ib3RvbilcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGRlZmF1bHRUYXJlYSA9IGF3YWl0IGdldERlZmF1bHRUYXJlYShjb250ZXh0KTtcclxuICAgICAgICAgICAgdmFyIGRlZmF1bHRJbmZvcm1hY2lvbkhkciA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgIFxyXG4gICAgICAgICAgICAgICAgICAgIGpzb25iX2J1aWxkX29iamVjdChcclxuICAgICAgICAgICAgICAgICAgICAnZG9taW5pbycgICAgICAgLCAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKERFRkFVTFRfRE9NSU5JTyl9LFxyXG4gICAgICAgICAgICAgICAgICAgICdub21jYWxsZScgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdzZWN0b3InICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdlZGlmaWNpbycgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdlbnRyYWRhJyAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICducm9jYXRhc3RyYWwnICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdwaXNvJyAgICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdkZXBhcnRhbWVudG8nICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdoYWJpdGFjaW9uJyAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdjYXNhJyAgICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdwcmlvcmlkYWQnICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdvYnNlcnZhY2lvbmVzJyAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdjaXRhJyAgICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdjYXJnYScgICAgICAgICAsIG51bGwgICAgICAgICBcclxuICAgICAgICAgICAgICAgICkgYXMgdGVtLFxyXG4gICAgICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgICAgICd0YXJlYScsICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoZGVmYXVsdFRhcmVhLnRhcmVhKX0sXHJcbiAgICAgICAgICAgICAgICAgICAgJ2ZlY2hhX2FzaWduYWNpb24nLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICdhc2lnbmFkbycsICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoY29udGV4dC51c2VyLmlkcGVyKX0sXHJcbiAgICAgICAgICAgICAgICAgICAgJ21haW5fZm9ybScsICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoZGVmYXVsdFRhcmVhLm1haW5fZm9ybSl9XHJcbiAgICAgICAgICAgICAgICApIGFzIHRhcmVhXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW11cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3c7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiBiZS5jYWNoZXMudGltZXN0YW1wRXN0cnVjdHVyYSwgXHJcbiAgICAgICAgICAgICAgICAuLi5yZXN1bHQucm93LCBcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2bzpwYXJhbWV0ZXJzLm9wZXJhdGl2bywgXHJcbiAgICAgICAgICAgICAgICBjb25SZWFIb2dhciwgXHJcbiAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW8sIFxyXG4gICAgICAgICAgICAgICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLCBcclxuICAgICAgICAgICAgICAgIHBlcm1pdGVHZW5lcmFyTXVlc3RyYSwgXHJcbiAgICAgICAgICAgICAgICBub1JlYXM6YmUuY2FjaGVzLnRhYmxlQ29udGVudC5ub19yZWEsIFxyXG4gICAgICAgICAgICAgICAgbm9SZWFzU3VwOmJlLmNhY2hlcy50YWJsZUNvbnRlbnQubm9fcmVhX3N1cCwgXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0SW5mb3JtYWNpb25IZHIsXHJcbiAgICAgICAgICAgICAgICBtYWluVEQ6IE9wZXJhdGl2b0dlbmVyYXRvci5tYWluVEQsXHJcbiAgICAgICAgICAgICAgICBtYWluVERQSzogT3BlcmF0aXZvR2VuZXJhdG9yLm1haW5URFBLXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246J2dlbmVyYXJfZm9ybXVsYXJpb3MnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonYW5uaW8nLCB0eXBlTmFtZTonaW50ZWdlcicsIHJlZmVyZW5jZXM6J2FubmlvJ30sXHJcbiAgICAgICAgICAgIHtuYW1lOidtZXMnICAsIHR5cGVOYW1lOidpbnRlZ2VyJywgcmVmZXJlbmNlczonbWVzJyAgfSxcclxuICAgICAgICAgICAge25hbWU6J2xvdGUnICwgdHlwZU5hbWU6J2ludGVnZXInLCByZWZlcmVuY2VzOidsb3Rlcyd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlPWNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdFVBID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0ICpcclxuICAgICAgICAgICAgICAgICAgIGZyb20gdW5pZGFkX2FuYWxpc2lzXHJcbiAgICAgICAgICAgICAgICAgICB3aGVyZSBwcmluY2lwYWwgPSB0cnVlIGFuZCBvcGVyYXRpdm8gPSAkMVxyXG4gICAgICAgICAgICAgICAgYCxcclxuICAgICAgICAgICAgICAgIFtPUEVSQVRJVk9dXHJcbiAgICAgICAgICAgICkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0VUEucm93Q291bnQgPT09IDApe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBzZSBjb25maWd1csOzIHVuYSB1bmlkYWQgZGUgYW5hbGlzaXMgY29tbyBwcmluY2lwYWwnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgcm93ID0gcmVzdWx0VUEucm93O1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0UHJlZ3VudGFzID0gYXdhaXQgYmUucHJvY2VkdXJlLnByZWd1bnRhc191YV90cmFlci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcm93KVxyXG4gICAgICAgICAgICB2YXIgY29udGVuZWRvclZhY2lvOntba2V5OnN0cmluZ106YW55fSA9IHt9O1xyXG4gICAgICAgICAgICByZXN1bHRQcmVndW50YXMuZm9yRWFjaChmdW5jdGlvbihkZWZQcmVndW50YSl7XHJcbiAgICAgICAgICAgICAgICBjb250ZW5lZG9yVmFjaW9bZGVmUHJlZ3VudGEudmFyX25hbWVdID0gZGVmUHJlZ3VudGEudW5pZGFkX2FuYWxpc2lzP1tdOm51bGw7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb250ZW5lZG9yVmFjaW8uYW5uaW89IHBhcmFtZXRlcnMuYW5uaW87XHJcbiAgICAgICAgICAgIGNvbnRlbmVkb3JWYWNpby5tZXMgID0gcGFyYW1ldGVycy5tZXMgIDtcclxuICAgICAgICAgICAgY29udGVuZWRvclZhY2lvLmxvdGUgPSBwYXJhbWV0ZXJzLmxvdGUgO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBkZWJlX2hhYmVyLmlkX2Nhc28sIHMgYXMgaWRcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIChzZWxlY3QgbG90ZSwgYXJtYXJfaWQoYW5uaW8sIG1lcywgbG90ZSwgcykgYXMgaWRfY2Fzbywgc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIChzZWxlY3QgYW5uaW8sbWVzLGxvdGUsIGNhbnRfY3VlcyBmcm9tIGxvdGVzIHdoZXJlIChhbm5pbyxtZXMsbG90ZSk9KCQyLCQzLCQ0KSkgciwgbGF0ZXJhbCBnZW5lcmF0ZV9zZXJpZXMoMSxjYW50X2N1ZXMpIHNcclxuICAgICAgICAgICAgICAgICAgICApIGRlYmVfaGFiZXIgbGVmdCBqb2luIGRlZmdlbiBoYXkgb24gaGF5LmlkX2Nhc28gPSBkZWJlX2hhYmVyLmlkX2Nhc28gYW5kIGhheS5vcGVyYXRpdm89JDFcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBoYXkuaWRfY2FzbyBpcyBudWxsYCxcclxuICAgICAgICAgICAgICAgIFsgT1BFUkFUSVZPLCBwYXJhbWV0ZXJzLmFubmlvLCBwYXJhbWV0ZXJzLm1lcywgcGFyYW1ldGVycy5sb3RlXVxyXG4gICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIHZhciBwYXJhbXMgPSB7b3BlcmF0aXZvOiBPUEVSQVRJVk99O1xyXG4gICAgICAgICAgICBmb3IodmFyIGk9MDsgaSA8IHJlc3VsdC5yb3dDb3VudDsgaSsrKXtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5jYXNvX2d1YXJkYXIuY29yZUZ1bmN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQsIFxyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5naW5nKHBhcmFtcyx7aWRfY2FzbzpyZXN1bHQucm93c1tpXS5pZF9jYXNvLCBkYXRvc19jYXNvOmNoYW5naW5nKGNvbnRlbmVkb3JWYWNpbyx7aWQ6cmVzdWx0LnJvd3NbaV0uaWR9KX0pXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHthZ3JlZ2FkYXM6cmVzdWx0LnJvd0NvdW50fVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOid1cGxvYWRfZmlsZScsXHJcbiAgICAgICAgcHJvZ3Jlc3M6IHRydWUsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOiAnaWRfYWRqdW50bycsIHR5cGVOYW1lOiAnaW50ZWdlcid9LFxyXG4gICAgICAgICAgICB7bmFtZTogJ25vbWJyZScsIHR5cGVOYW1lOiAndGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgZmlsZXM6e2NvdW50OjF9LFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjpmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycywgZmlsZXMpe1xyXG4gICAgICAgICAgICBsZXQgYmU9Y29udGV4dC5iZTtcclxuICAgICAgICAgICAgbGV0IGNsaWVudD1jb250ZXh0LmNsaWVudDtcclxuICAgICAgICAgICAgY29udGV4dC5pbmZvcm1Qcm9ncmVzcyh7bWVzc2FnZTpiZS5tZXNzYWdlcy5maWxlVXBsb2FkZWR9KTtcclxuICAgICAgICAgICAgbGV0IGZpbGUgPSBmaWxlc1swXVxyXG4gICAgICAgICAgICBsZXQgZXh0ID0gcGF0aC5leHRuYW1lKGZpbGUucGF0aCkuc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICBsZXQgb3JpZ2luYWxGaWxlbmFtZSA9IGZpbGUub3JpZ2luYWxGaWxlbmFtZS5zbGljZSgwLC0oZXh0Lmxlbmd0aCsxKSk7XHJcbiAgICAgICAgICAgIGxldCBmaWxlbmFtZT0gcGFyYW1ldGVycy5ub21icmUgfHwgb3JpZ2luYWxGaWxlbmFtZTtcclxuICAgICAgICAgICAgbGV0IG5ld1BhdGggPSAnbG9jYWwtYXR0YWNobWVudHMvZmlsZS0nO1xyXG4gICAgICAgICAgICB2YXIgY3JlYXRlUmVzcG9uc2UgPSBmdW5jdGlvbiBjcmVhdGVSZXNwb25zZShhZGp1bnRvUm93KXtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0xhIHN1YmlkYSBzZSByZWFsaXrDsyBjb3JyZWN0YW1lbnRlICh1cGRhdGUpJyxcclxuICAgICAgICAgICAgICAgICAgICBub21icmU6IGFkanVudG9Sb3cubm9tYnJlLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vbWJyZV9vcmlnaW5hbDogYWRqdW50b1Jvdy5ub21icmVfb3JpZ2luYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgZXh0OiBhZGp1bnRvUm93LmV4dCxcclxuICAgICAgICAgICAgICAgICAgICBmZWNoYTogYWRqdW50b1Jvdy5mZWNoYSxcclxuICAgICAgICAgICAgICAgICAgICBob3JhOiBhZGp1bnRvUm93LmhvcmEsXHJcbiAgICAgICAgICAgICAgICAgICAgaWRfYWRqdW50bzogYWRqdW50b1Jvdy5pZF9hZGp1bnRvXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0YWRvXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIG1vdmVGaWxlID0gZnVuY3Rpb24gbW92ZUZpbGUoZmlsZSwgaWRfYWRqdW50bywgZXh0ZW5zaW9uKXtcclxuICAgICAgICAgICAgICAgIGZzLm1vdmUoZmlsZS5wYXRoLCBuZXdQYXRoICsgaWRfYWRqdW50byArICcuJyArIGV4dGVuc2lvbiwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgIGlmKHBhcmFtZXRlcnMuaWRfYWRqdW50byl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY2xpZW50LnF1ZXJ5KGB1cGRhdGUgYWRqdW50b3Mgc2V0IG5vbWJyZT0gJDEsbm9tYnJlX29yaWdpbmFsID0gJDIsIGV4dCA9ICQzLCBydXRhID0gY29uY2F0KCdsb2NhbC1hdHRhY2htZW50cy9maWxlLScsJDQ6OnRleHQsJy4nLCQzOjp0ZXh0KSwgZmVjaGEgPSBub3coKSwgaG9yYSA9IGRhdGVfdHJ1bmMoJ3NlY29uZHMnLGN1cnJlbnRfdGltZXN0YW1wLWN1cnJlbnRfZGF0ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgaWRfYWRqdW50byA9ICQ0IHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbGVuYW1lLCBvcmlnaW5hbEZpbGVuYW1lLCBleHQsIHBhcmFtZXRlcnMuaWRfYWRqdW50b11cclxuICAgICAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVzcG9uc2UocmVzdWx0LnJvdylcclxuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdGFkbyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVGaWxlKGZpbGUscmVzdWx0YWRvLmlkX2FkanVudG8scmVzdWx0YWRvLmV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRhZG9cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNsaWVudC5xdWVyeShgaW5zZXJ0IGludG8gYWRqdW50b3MgKG5vbWJyZSwgbm9tYnJlX29yaWdpbmFsLCBleHQsIGZlY2hhLCBob3JhKSB2YWx1ZXMgKCQxLCQyLCQzLG5vdygpLCBkYXRlX3RydW5jKCdzZWNvbmRzJyxjdXJyZW50X3RpbWVzdGFtcC1jdXJyZW50X2RhdGUpKSByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaWxlbmFtZSwgb3JpZ2luYWxGaWxlbmFtZSwgZXh0XVxyXG4gICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNsaWVudC5xdWVyeShgdXBkYXRlIGFkanVudG9zIHNldCBydXRhID0gY29uY2F0KCdsb2NhbC1hdHRhY2htZW50cy9maWxlLScsaWRfYWRqdW50bzo6dGV4dCwnLicsZXh0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgaWRfYWRqdW50byA9ICQxIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQucm93LmlkX2FkanVudG9dXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVzcG9uc2UocmVzdWx0LnJvdylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbihyZXN1bHRhZG8pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZUZpbGUoZmlsZSxyZXN1bHRhZG8uaWRfYWRqdW50byxyZXN1bHRhZG8uZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRhZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycil7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOidjYXNvX2d1YXJkYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICwgdHlwZU5hbWU6J3RleHQnLCByZWZlcmVuY2VzOidvcGVyYXRpdm9zJ30sXHJcbiAgICAgICAgICAgIHtuYW1lOidpZF9jYXNvJyAgICAgLCB0eXBlTmFtZTondGV4dCcgICAgICB9LFxyXG4gICAgICAgICAgICB7bmFtZTonZGF0b3NfY2FzbycgICwgdHlwZU5hbWU6J2pzb25iJyAgICAgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGRlZmluZWRJbjogJ2RtZW5jdScsXHJcbiAgICAgICAgLy9AdHMtaWdub3JlIGVzcGVjaWZpY28gZWwgdGlwbyBkZSBsb3MgcGFyw6FtZXRyb3NcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOntcclxuICAgICAgICAgICAgb3BlcmF0aXZvOnN0cmluZywgXHJcbiAgICAgICAgICAgIGlkX2Nhc286c3RyaW5nLFxyXG4gICAgICAgICAgICBkYXRvc19jYXNvOkFueU9iamVjdFxyXG4gICAgICAgIH0sbmV3Q2xpZW50OkNsaWVudCl7XHJcbiAgICAgICAgICAgIHZhciBjbGllbnQ9bmV3Q2xpZW50IHx8IGNvbnRleHQuY2xpZW50O1xyXG4gICAgICAgICAgICB2YXIgZGF0b3NfanNvbj1wYXJhbWV0ZXJzLmRhdG9zX2Nhc287XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciB0YWJsZVN0cnVjdHVyZXNfYXBwOlRhYmxlRGVmaW5pdGlvbnMgPSBiZS50YWJsZVN0cnVjdHVyZXM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBzdHJ1Y3RfZG1lbmN1ID0gY3JlYXRlU3RydWN0dXJlKGNvbnRleHQsIE9wZXJhdGl2b0dlbmVyYXRvci5tYWluVEQpO1xyXG4gICAgICAgICAgICBkYXRvc19qc29uWydvcGVyYXRpdm8nXSA9IHBhcmFtZXRlcnMub3BlcmF0aXZvO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZGF0b3NfanNvbltPcGVyYXRpdm9HZW5lcmF0b3IubWFpblREUEtdID0gcGFyYW1ldGVycy5pZF9jYXNvO1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBjb21wbGV0YXJfdWx0X3BrX2VuX2FyciggdWx0X3BrLCB1YV9hcnIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbl9wa19jb21wbGV0YT11YV9hcnI7IFxyXG4gICAgICAgICAgICAgICAgaWYgKHVhX2FyciAmJiB1YV9hcnIubGVuZ3RoPj0xKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25fcGtfY29tcGxldGE9IGNvbl9wa19jb21wbGV0YS5tYXAoKHVuYV91YSxpKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmFfdWFbdWx0X3BrXT1pKzEgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuYV91YTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb25fcGtfY29tcGxldGFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmdW5jdGlvbiByZWNvcnJlcl9kYXRvc19hZ3JlZ2FuZG9fcGtzKGRhdG9zaikge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5TmFtZSBpbiBkYXRvc2opIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0b0sgPSBkYXRvc2pba2V5TmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdG9LIGluc3RhbmNlb2YgQXJyYXkgJiYgZGF0b0subGVuZ3RoID49IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBrID0gdGFibGVTdHJ1Y3R1cmVzX2FwcFtrZXlOYW1lXShjb250ZXh0KS5wcmltYXJ5S2V5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWx0X3BrID0gcGtbcGsubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdG9LID0gY29tcGxldGFyX3VsdF9wa19lbl9hcnIodWx0X3BrLCBkYXRvSyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdG9LLmZvckVhY2goKGVsZW1JKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtST1yZWNvcnJlcl9kYXRvc19hZ3JlZ2FuZG9fcGtzKGVsZW1JKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5TmFtZS5zdGFydHNXaXRoKCckJyl8fGtleU5hbWUuc3RhcnRzV2l0aCgnXycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRvc2pba2V5TmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9zajtcclxuICAgICAgICAgICAgfSAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBkYXRvc19qc29uID0gcmVjb3JyZXJfZGF0b3NfYWdyZWdhbmRvX3BrcyhkYXRvc19qc29uKTtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24uY29kUmVhO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5jb2ROb1JlYTtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24ucmVzdW1lbkVzdGFkbztcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24uY29kUmVhU3VwO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5jb2ROb1JlYVN1cDtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24ucmVzdW1lbkVzdGFkb1N1cDtcclxuXHJcbiAgICAgICAgICAgIGlmKCBPYmplY3Qua2V5cyhkYXRvc19qc29uKS5sZW5ndGggPjIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHF1ZXJpZXMgPSBzcWxUb29scy5zdHJ1Y3R1cmVkRGF0YS5zcWxXcml0ZShkYXRvc19qc29uLCBzdHJ1Y3RfZG1lbmN1KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBxdWVyaWVzLnJlZHVjZShmdW5jdGlvbihwcm9taXNlLCBxdWVyeSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsaWVudC5xdWVyeShxdWVyeSkuZXhlY3V0ZSgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sUHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJva1wiO1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyOkVycm9yKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImNhc29fZ3VhcmRhciBFTlRSQSBFTiBFTCBDQVRDSDogXCIsZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3ZhY2lvJztcclxuICAgICAgICAgICAgfSAgICBcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2Nhc29fdHJhZXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgLy97bmFtZTonZm9ybXVsYXJpbycgICAgLCAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICxyZWZlcmVuY2VzOidvcGVyYXRpdm9zJywgIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidpZF9jYXNvJyAgICAgICAsdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJlc3VsdE9rOiAnZ29Ub0VuYycsXHJcbiAgICAgICAgZGVmaW5lZEluOiAnZG1lbmN1JyxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgY2xpZW50PWNvbnRleHQuY2xpZW50O1xyXG4gICAgICAgICAgICAgdmFyIHN0cnVjdF9kbWVuY3UgPSBjcmVhdGVTdHJ1Y3R1cmUoY29udGV4dCwgT3BlcmF0aXZvR2VuZXJhdG9yLm1haW5URCk7XHJcbiAgICAgICAgICAgIHZhciBzcWwgPSBzcWxUb29scy5zdHJ1Y3R1cmVkRGF0YS5zcWxSZWFkKHtvcGVyYXRpdm86IHBhcmFtZXRlcnMub3BlcmF0aXZvLCBbT3BlcmF0aXZvR2VuZXJhdG9yLm1haW5URFBLXTpwYXJhbWV0ZXJzLmlkX2Nhc299LCBzdHJ1Y3RfZG1lbmN1KTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNsaWVudC5xdWVyeShzcWwpLmZldGNoVW5pcXVlVmFsdWUoKTtcclxuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0ge1xyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBwYXJhbWV0ZXJzLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGlkX2Nhc286IHBhcmFtZXRlcnMuaWRfY2FzbyxcclxuICAgICAgICAgICAgICAgIGRhdG9zX2Nhc286IHJlc3VsdC52YWx1ZSxcclxuICAgICAgICAgICAgICAgIC8vZm9ybXVsYXJpbzogZm9ybVByaW5jaXBhbCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnY2Fzb190cmFlcl9vX2NyZWFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAscmVmZXJlbmNlczonb3BlcmF0aXZvcycsICB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonaWRfY2FzbycgICAgICAgLHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByZXN1bHRPazogJ2dvVG9FbmMnLFxyXG4gICAgICAgIC8vIGJpdGFjb3JhOnthbHdheXM6dHJ1ZX0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGJlLnByb2NlZHVyZVsnY2Fzb190cmFlciddLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICB2YXIganNvbiA9IGF3YWl0IGJlLnByb2NlZHVyZVsnY2Fzb19wcmVwYXJhciddLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZVsnY2Fzb19ndWFyZGFyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIGNoYW5naW5nKHBhcmFtZXRlcnMsIHtkYXRvc19jYXNvOmpzb259KSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgYmUucHJvY2VkdXJlWydjYXNvX3RyYWVyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246J3Bhc2FyX2pzb24ydWEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgX3BhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIC8qIEdFTkVSQUxJWkFSOiAqL1xyXG4gICAgICAgICAgICB2YXIgYmU9Y29udGV4dC5iZTtcclxuICAgICAgICAgICAgLyogRklOLUdFTkVSQUxJWkFSOiAqL1xyXG4gICAgICAgICAgICBjb25zdCBPUEVSQVRJVk8gPSBhd2FpdCBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dCk7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHRNYWluID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFNFTEVDVCAqIEZST00gJHtPcGVyYXRpdm9HZW5lcmF0b3IubWFpblREfSBMSU1JVCAxYCkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgaWYocmVzdWx0TWFpbi5yb3dDb3VudD4wKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdIQVkgREFUT1MnLHJlc3VsdE1haW4ucm93cylcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSEFZIERBVE9TLiBOTyBTRSBQVUVERSBJTklDSUFSIEVMIFBBU0FKRScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCByZXN1bHRKc29uID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgU0VMRUNUIG9wZXJhdGl2bywgZW5jIGlkX2Nhc28sIGpzb25fZW5jdWVzdGEgZGF0b3NfY2FzbyBmcm9tIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBXSEVSRSBvcGVyYXRpdm89JDEgYW5kIHJlc3VtZW5fZXN0YWRvIGlzIGRpc3RpbmN0IGZyb20gJ3ZhY2lvJyBhbmQganNvbl9lbmN1ZXN0YSBpcyBub3QgbnVsbCBcclxuICAgICAgICAgICAgICAgICAgICBvcmRlciBieSBlbmMgYCxcclxuICAgICAgICAgICAgICAgIFtPUEVSQVRJVk9dXHJcbiAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgdmFyIHByb2NlZHVyZUd1YXJkYXIgPSBiZS5wcm9jZWR1cmUuY2Fzb19ndWFyZGFyO1xyXG4gICAgICAgICAgICBpZihwcm9jZWR1cmVHdWFyZGFyLmRlZmluZWRJbiE9J2RtZW5jdScpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoYXkgcXVlIHNvYnJlZXNjcmliaXIgY2Fzb19ndWFyZGFyJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJlc3VsdEpzb24ucm93cy5tYXAoYXN5bmMgZnVuY3Rpb24ocm93KXtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSBgaWQgY2FzbyAke3Jvdy5pZF9jYXNvfTogYDtcclxuICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBiZS5pblRyYW5zYWN0aW9uKG51bGwsIGFzeW5jIGZ1bmN0aW9uKGNsaWVudCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbys9IGF3YWl0IHByb2NlZHVyZUd1YXJkYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHJvdywgY2xpZW50KTsgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBlcnJNZXNzYWdlID0gcmVzdWx0YWRvICsgXCJqc29uMnVhIGVycm9yLiBcIisgZXJyIDtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG8gPSBlcnJNZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyTWVzc2FnZSlcclxuICAgICAgICAgICAgICAgIH0gICAgIFxyXG4gICAgICAgICAgICAgICAgaWYocmVzdWx0YWRvLmluY2x1ZGVzKCdvaycpKXsgXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHtkYXRvc19jYXNvLCBpZF9jYXNvLCBvcGVyYXRpdm99ID0gYXdhaXQgYmUucHJvY2VkdXJlLmNhc29fdHJhZXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHtvcGVyYXRpdm86cm93Lm9wZXJhdGl2bywgaWRfY2Fzbzpyb3cuaWRfY2Fzb30pXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZlclF1ZUdyYWJvID0ge2RhdG9zX2Nhc28sIGlkX2Nhc28sIG9wZXJhdGl2b31cclxuICAgICAgICAgICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2NyZXBhbmNlcy5zaG93QW5kVGhyb3codmVyUXVlR3JhYm8scm93KVxyXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2ZXJRdWVHcmFibyxyb3cpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdGFkbztcclxuICAgICAgICAgICAgfSkpLmNhdGNoKGZ1bmN0aW9uKGVycil7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246J2RtX2ZvcnBrcmFpel9jYXJnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3BrX3JhaXpfdmFsdWUnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCcsIHJlZmVyZW5jZXM6XCJ0YXJlYXNcIn0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBiZT1jb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIge29wZXJhdGl2byxwa19yYWl6X3ZhbHVlLCB0YXJlYX0gPSBwYXJhbWV0ZXJzO1xyXG4gICAgICAgICAgICB2YXIgbWFpbl9mb3JtID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBtYWluX2Zvcm1cclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIHRhcmVhPSQyYFxyXG4gICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgdGFyZWFdXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgICAgICAgICAgdmFyIGNvbmR2aXY9IGAgdC5vcGVyYXRpdm89ICQxIGFuZCB0LmVuYyA9JDJgO1xyXG4gICAgICAgICAgICB2YXIgc29sb0xlY3R1cmEgPSAhIShhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgc2VsZWN0ICpcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW0gam9pbiBlc3RhZG9zIHVzaW5nIChvcGVyYXRpdm8sIGVzdGFkbykgLS1wayBlc3RhZG8gdmVyaWZpY2FkYVxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcmdhZG9fZG0gaXMgbm90IG51bGwgb3IgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBwZXJtaXRlX2VkaXRhcl9lbmN1ZXN0YSBhbmQgYXNpZ25hZG8gPD4gJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChjb250ZXh0LnVzZXIuaWRwZXIpfVxyXG4gICAgICAgICAgICAgICAgICAgIClgLCBbb3BlcmF0aXZvLCBwa19yYWl6X3ZhbHVlXSkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpKS5yb3dDb3VudDtcclxuICAgICAgICAgICAgdmFyIHBlcm1pdGVHZW5lcmFyTXVlc3RyYSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmEgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBvcGVyYXRpdm9zIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxXHJcbiAgICAgICAgICAgIGAsW29wZXJhdGl2b10pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgIHZhciB7cm93fSA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGdldEhkclF1ZXJ5KGNvbmR2aXYsIGNvbnRleHQsIHBlcm1pdGVHZW5lcmFyTXVlc3RyYSksW29wZXJhdGl2byxwa19yYWl6X3ZhbHVlXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcm93LmluZm9ybWFjaW9uSGRyW3BrX3JhaXpfdmFsdWVdLnRhcmVhPXtcclxuICAgICAgICAgICAgICAgIHRhcmVhLFxyXG4gICAgICAgICAgICAgICAgbWFpbl9mb3JtXHJcbiAgICAgICAgICAgIH0gO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4ucm93LFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgc29sb0xlY3R1cmEsXHJcbiAgICAgICAgICAgICAgICBpZHBlcjpjb250ZXh0LnVzZXIuaWRwZXIsXHJcbiAgICAgICAgICAgICAgICBjYXJnYXM6bGlrZUFyLmNyZWF0ZUluZGV4KHJvdy5jYXJnYXMubWFwKGNhcmdhPT4oey4uLmNhcmdhLCBmZWNoYTpjYXJnYS5mZWNoYT9kYXRlLmlzbyhjYXJnYS5mZWNoYSkudG9EbXkoKTpudWxsfSkpLCAnY2FyZ2EnKSxcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcEVzdHJ1Y3R1cmE6YmUuY2FjaGVzLnRpbWVzdGFtcEVzdHJ1Y3R1cmFcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjonZG1fZm9ycGtyYWl6X2Rlc2NhcmdhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZToncGVyc2lzdGVudGVzJyAgICAgICwgdHlwZU5hbWU6J2pzb25iJ30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBiZT1jb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIge29wZXJhdGl2bywgcGVyc2lzdGVudGVzfSA9IHBhcmFtZXRlcnM7XHJcbiAgICAgICAgICAgIGNvbnN0IFVBX1BSSU5DSVBBTCA9IGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBvcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChsaWtlQXIocGVyc2lzdGVudGVzLnJlc3B1ZXN0YXNbVUFfUFJJTkNJUEFMXSkubWFwKGFzeW5jIChyZXNwdWVzdGFzVUFQcmluY2lwYWwsaWRFbmMpPT57XHJcbiAgICAgICAgICAgICAgICBpZihyZXNwdWVzdGFzVUFQcmluY2lwYWwuczFhMV9vYnMgPT0gJyFwcnVlYmEgZGUgZXJyb3IgYWwgZ3JhYmFyIScpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRElPIFBSVUVCQSBERSBFUlJPUiBBTCBHUkFCQVInKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IGd1YXJkYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQsIG9wZXJhdGl2bywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCwgcGVyc2lzdGVudGVzLmluZm9ybWFjaW9uSGRyW2lkRW5jXS50YXJlYS50YXJlYSk7XHJcbiAgICAgICAgICAgICAgICAvL2d1YXJkYXIgcGFyYWxlbGFtZW50ZSBlbiB0YWJsYXMgdWFcclxuICAgICAgICAgICAgICAgIHZhciBwcm9jZWR1cmVHdWFyZGFyID0gYmUucHJvY2VkdXJlLmNhc29fZ3VhcmRhcjtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSBgaWQgZW5jICR7aWRFbmN9OiBgO1xyXG4gICAgICAgICAgICAgICAgbGV0IHBhcmFtX2d1YXJkYXI9e29wZXJhdGl2bzogb3BlcmF0aXZvLGlkX2Nhc286aWRFbmMsIGRhdG9zX2Nhc286cmVzcHVlc3Rhc1VBUHJpbmNpcGFsfVxyXG4gICAgICAgICAgICAgICAgbGV0IGVyck1lc3NhZ2U6IHN0cmluZ3xudWxsO1xyXG4gICAgICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJlLmluVHJhbnNhY3Rpb24obnVsbCwgYXN5bmMgZnVuY3Rpb24oY2xpZW50KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0YWRvKz0gYXdhaXQgcHJvY2VkdXJlR3VhcmRhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1fZ3VhcmRhciwgY2xpZW50KTsgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGVyck1lc3NhZ2UgPSByZXN1bHRhZG8gKyBcImRtX2ZvcnBrcmFpel9kZXNjYXJnYXIuIFwiKyBlcnIgO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbyA9IGVyck1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJNZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgIGB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBwYXNlX3RhYmxhPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2BcclxuICAgICAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgW29wZXJhdGl2bywgaWRFbmMsIHJlc3VsdGFkb11cclxuICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTsgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICB9KS5hcnJheSgpKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvaydcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjonZG1fc2luY3Jvbml6YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZToncGVyc2lzdGVudGVzJyAgICAgICAsIHR5cGVOYW1lOidqc29uYid9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBjb25zdCBPUEVSQVRJVk8gPSBhd2FpdCBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dCk7XHJcbiAgICAgICAgICAgIHZhciBiZT1jb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIge3BlcnNpc3RlbnRlc30gPSBwYXJhbWV0ZXJzO1xyXG4gICAgICAgICAgICB2YXIgbnVtX3NpbmNybzpudW1iZXI9MDtcclxuICAgICAgICAgICAgdmFyIHRva2VuOnN0cmluZz1wZXJzaXN0ZW50ZXM/LnRva2VuIHx8IChhd2FpdCBiZS5wcm9jZWR1cmUudG9rZW5fZ2V0LmNvcmVGdW5jdGlvbihjb250ZXh0LCB7XHJcbiAgICAgICAgICAgICAgICB1c2VyYWdlbnQ6IGNvbnRleHQuc2Vzc2lvbi5yZXEudXNlcmFnZW50LCBcclxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiBjb250ZXh0LnVzZXJuYW1lXHJcbiAgICAgICAgICAgIH0pKS50b2tlbjtcclxuICAgICAgICAgICAgdmFyIHt2YWx1ZX0gPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBJTlNFUlQgSU5UTyBzaW5jcm9uaXphY2lvbmVzICh0b2tlbiwgdXN1YXJpbywgZGF0b3MpXHJcbiAgICAgICAgICAgICAgICAgICAgVkFMVUVTICgkMSwkMiwkMykgXHJcbiAgICAgICAgICAgICAgICAgICAgUkVUVVJOSU5HIHNpbmNyb1xyXG4gICAgICAgICAgICAgICAgYCwgW3Rva2VuLCBjb250ZXh0LnVzZXJuYW1lLCBwZXJzaXN0ZW50ZXNdXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVWYWx1ZSgpO1xyXG4gICAgICAgICAgICBudW1fc2luY3JvPXZhbHVlO1xyXG4gICAgICAgICAgICB2YXIgY29uZHZpdj0gYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0dC5vcGVyYXRpdm89ICQxIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmQgYXNpZ25hZG8gPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmQgdHQub3BlcmFjaW9uPSdjYXJnYXInIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmQgKHR0LmNhcmdhZG9fZG0gaXMgbnVsbCBvciB0dC5jYXJnYWRvX2RtID0gJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbCh0b2tlbil9KVxyXG4gICAgICAgICAgICBgO1xyXG4gICAgICAgICAgICBjb25zdCBVQV9QUklOQ0lQQUwgPSBhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgT1BFUkFUSVZPKTtcclxuICAgICAgICAgICAgaWYgKHBlcnNpc3RlbnRlcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaWRFbmMgaW4gcGVyc2lzdGVudGVzLnJlc3B1ZXN0YXNbVUFfUFJJTkNJUEFMXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwdWVzdGFzVUFQcmluY2lwYWwgPSBwZXJzaXN0ZW50ZXMucmVzcHVlc3Rhc1tVQV9QUklOQ0lQQUxdW2lkRW5jXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2FyZ2EgPSBwZXJzaXN0ZW50ZXMuY2FyZ2FzW3BlcnNpc3RlbnRlcy5pbmZvcm1hY2lvbkhkcltpZEVuY10udGVtLmNhcmdhXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZWEgPSBwZXJzaXN0ZW50ZXMuaW5mb3JtYWNpb25IZHJbaWRFbmNdLnRhcmVhLnRhcmVhO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKE51bWJlcihpZEVuYyk8MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkRW5jID0gYXdhaXQgcGVyc2lzdGlyRW5jdWVzdGFBdXRvZ2VuZXJhZGFFbkRNKGNvbnRleHQsIE9QRVJBVElWTywgY2FyZ2EuY2FyZ2EsIGlkRW5jLCB0b2tlbiwgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsLCBjYXJnYS5yZWNlcGNpb25pc3RhLCBjb250ZXh0LnVzZXIuaWRwZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2YXIgcHVlZG9HdWFyZGFyRW5URU09dHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIge3BhcmFtcyxzZXR0ZXJzfSA9IGdldFNldHRlcnNBbmRQYXJhbWV0ZXJzRm9yUmVhTm9SZWFSZXN1bWVuRXN0YWRvKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYGVzdGFkbyA9ICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoRVNUQURPX1BPU1RFUklPUl9ERVNDQVJHQSl9YCwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgY2FyZ2Fkb19kbT1udWxsYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtPUEVSQVRJVk8sIGlkRW5jLCB0YXJlYSwgdG9rZW5dXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcXVlcnlUYXJlYXNUZW0gPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHVwZGF0ZSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgJHtzZXR0ZXJzLmpvaW4oJywnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzIGFuZCBjYXJnYWRvX2RtID0gJDRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1xyXG4gICAgICAgICAgICAgICAgICAgICkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHB1ZWRvR3VhcmRhckVuVEVNPXF1ZXJ5VGFyZWFzVGVtLnJvd0NvdW50PT0xO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHB1ZWRvR3VhcmRhckVuVEVNKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ3VhcmRhckVuY3Vlc3RhRW5UZW0oY29udGV4dCwgT1BFUkFUSVZPLCBpZEVuYywgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsLCB0YXJlYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vZ3VhcmRhciBwYXJhbGVsYW1lbnRlIGVuIHRhYmxhcyB1YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvY2VkdXJlR3VhcmRhciA9IGJlLnByb2NlZHVyZS5jYXNvX2d1YXJkYXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSBgaWQgZW5jICR7aWRFbmN9OiBgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1fZ3VhcmRhcj17b3BlcmF0aXZvOiBPUEVSQVRJVk8saWRfY2FzbzppZEVuYywgZGF0b3NfY2FzbzpyZXNwdWVzdGFzVUFQcmluY2lwYWx9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlcnJNZXNzYWdlOiBzdHJpbmd8bnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgYmUuaW5UcmFuc2FjdGlvbihudWxsLCBhc3luYyBmdW5jdGlvbihjbGllbnQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbys9IGF3YWl0IHByb2NlZHVyZUd1YXJkYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtX2d1YXJkYXIsIGNsaWVudCk7ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJNZXNzYWdlID0gcmVzdWx0YWRvICsgXCJkbV9mb3Jwa3JhaXpfZGVzY2FyZ2FyLiBcIisgZXJyIDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbyA9IGVyck1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVyck1lc3NhZ2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgcGFzZV90YWJsYT0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW09QRVJBVElWTywgaWRFbmMsIHJlc3VsdGFkb11cclxuICAgICAgICAgICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBmcy5hcHBlbmRGaWxlKCdsb2NhbC1yZWNpYmlkby1zaW4tdG9rZW4udHh0JywgSlNPTi5zdHJpbmdpZnkoe25vdzpuZXcgRGF0ZSgpLHVzZXI6Y29udGV4dC51c2VybmFtZSxpZENhc286IGlkRW5jLFtPcGVyYXRpdm9HZW5lcmF0b3IubWFpblREUEtdOiByZXNwdWVzdGFzVUFQcmluY2lwYWx9KSsnXFxuXFxuJywgJ3V0ZjgnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHBlcm1pdGVHZW5lcmFyTXVlc3RyYSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmEgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBvcGVyYXRpdm9zIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxXHJcbiAgICAgICAgICAgIGAsW09QRVJBVElWT10pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgIHZhciB7cm93fSA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGdldEhkclF1ZXJ5KGNvbmR2aXYsIGNvbnRleHQsIHBlcm1pdGVHZW5lcmFyTXVlc3RyYSksW09QRVJBVElWTyxjb250ZXh0LnVzZXIuaWRwZXJdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGB1cGRhdGUgdGFyZWFzX3RlbSB0dFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCAgZXN0YWRvID0gJDQsIGNhcmdhZG9fZG09JDM6OnRleHRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSAke2NvbmR2aXZ9IFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyBlbmNgXHJcbiAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICBbT1BFUkFUSVZPLCBwYXJhbWV0ZXJzLmVuYz9wYXJhbWV0ZXJzLmVuYzpjb250ZXh0LnVzZXIuaWRwZXIsIHRva2VuLCBFU1RBRE9fUE9TVEVSSU9SX0NBUkdBXVxyXG4gICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5yb3csXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm86IE9QRVJBVElWTywgXHJcbiAgICAgICAgICAgICAgICBzb2xvTGVjdHVyYTpmYWxzZSxcclxuICAgICAgICAgICAgICAgIHRva2VuLFxyXG4gICAgICAgICAgICAgICAgbnVtX3NpbmNybyxcclxuICAgICAgICAgICAgICAgIGlkcGVyOmNvbnRleHQudXNlci5pZHBlcixcclxuICAgICAgICAgICAgICAgIGNhcmdhczpsaWtlQXIuY3JlYXRlSW5kZXgocm93LmNhcmdhcy5tYXAoY2FyZ2E9Pih7Li4uY2FyZ2EsIGZlY2hhOmNhcmdhLmZlY2hhP2RhdGUuaXNvKGNhcmdhLmZlY2hhKS50b0RteSgpOm51bGwsIGVzdGFkb19jYXJnYToncmVsZXZhbWllbnRvJ30pKSwgJ2NhcmdhJylcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246J2RtX2JhY2t1cCcsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOid0b2tlbicgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGVtJyAgICAgICAgICwgdHlwZU5hbWU6J2pzb25iJ31cclxuICAgICAgICBdLFxyXG4gICAgICAgIHVubG9nZ2VkOnRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIge2JlLCBjbGllbnR9ID1jb250ZXh0O1xyXG4gICAgICAgICAgICBjb25zdCBPUEVSQVRJVk8gPSBhd2FpdCBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dCk7XHJcbiAgICAgICAgICAgIHZhciBudW1fc2luY3JvOm51bWJlcj0wO1xyXG4gICAgICAgICAgICB2YXIgdG9rZW46c3RyaW5nfG51bGw9cGFyYW1ldGVycy50b2tlbjtcclxuICAgICAgICAgICAgaWYodG9rZW4gPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge29rOidvazpOL1QnfTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB2YXIge3Jvd0NvdW50fSA9IGF3YWl0IGNsaWVudC5xdWVyeShgc2VsZWN0IDEgZnJvbSB0b2tlbnMgd2hlcmUgdG9rZW4gPSAkMWAsW3Rva2VuXSkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgICAgICAgICAgaWYoIXJvd0NvdW50KXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge29rOidvazpOL1QnfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihwYXJhbWV0ZXJzLnRlbSl7XHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IGJhY2t1cCBvZiBsaWtlQXIocGFyYW1ldGVycy50ZW0pLmFycmF5KCkpe1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhcmVhID0gYmFja3VwLmNhcmdhLmNhcmdhO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwdWVzdGFzUmFpeiA9IGJhY2t1cC5yZXNwdWVzdGFzUmFpejtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaWRFbmNETSA9IGJhY2t1cC5mb3JQa1JhaXpbT3BlcmF0aXZvR2VuZXJhdG9yLm1haW5URFBLXS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZWNlcGNpb25pc3RhID0gYmFja3VwLmNhcmdhLnJlY2VwY2lvbmlzdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFzaWduYWRvID0gYmFja3VwLmlkcGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKE51bWJlcihpZEVuY0RNKTwwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcGVyc2lzdGlyRW5jdWVzdGFBdXRvZ2VuZXJhZGFFbkRNKGNvbnRleHQsIE9QRVJBVElWTywgYXJlYSwgaWRFbmNETSwgdG9rZW4sIHJlc3B1ZXN0YXNSYWl6LCByZWNlcGNpb25pc3RhLCBhc2lnbmFkbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IGpzb25fYmFja3VwID0gJDMsIGZlY2hhX2JhY2t1cCA9IGN1cnJlbnRfdGltZXN0YW1wXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIGpzb25fYmFja3VwIGlzIGRpc3RpbmN0IGZyb20gJDRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2BcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtPUEVSQVRJVk8sIGlkRW5jRE0sIHJlc3B1ZXN0YXNSYWl6LCByZXNwdWVzdGFzUmFpel1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKS5mZXRjaE9uZVJvd0lmRXhpc3RzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgb2s6J29rJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnY29uc2lzdGlyX3ZpdmllbmRhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAscmVmZXJlbmNlczonb3BlcmF0aXZvcycsICB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonY2FzbycgICAgICAgLHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciB7YmUsIGNsaWVudH0gPWNvbnRleHQ7XHJcbiAgICAgICAgICAgIGxldCBwYXJhbV9wcm9jPXtcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogcGFyYW1ldGVycy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICBpZF9jYXNvOiBwYXJhbWV0ZXJzLmNhc29cclxuICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgbGV0IGVyck1lc3NhZ2U6IHN0cmluZ3xudWxsO1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0YWRvOiBzdHJpbmd8bnVsbDtcclxuICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0YWRvPSBhd2FpdCBiZS5wcm9jZWR1cmUuY29uc2lzdGlyX2VuY3Vlc3RhLmNvcmVGdW5jdGlvbihjb250ZXh0LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fcHJvYywgY2xpZW50XHJcbiAgICAgICAgICAgICAgICApOyAgICBcclxuICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICBlcnJNZXNzYWdlID0gXCIgY29uc2lzdGlyX2Nhc28uIFwiKyBlcnIgO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyTWVzc2FnZSlcclxuICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJyoqKioqKiBjb25zaXN0aXJfY2FzbyByZXN1bHRhZG86JyxyZXN1bHRhZG8pICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBvazonb2snXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fcmVzY2F0YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonbG9jYWxTdG9yYWdlSXRlbScgICAgICAgLCB0eXBlTmFtZTonanNvbmInfSxcclxuICAgICAgICAgICAge25hbWU6J2xvY2FsU3RvcmFnZUl0ZW1LZXknICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHVubG9nZ2VkOnRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIge2xvY2FsU3RvcmFnZUl0ZW1LZXksIGxvY2FsU3RvcmFnZUl0ZW19ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsb2NhbFN0b3JhZ2VJdGVtKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGZzLmFwcGVuZEZpbGUoJ2xvY2FsLXJlc2NhdGUudHh0JywgSlNPTi5zdHJpbmdpZnkoe25vdzpuZXcgRGF0ZSgpLHVzZXI6Y29udGV4dC51c2VybmFtZSwgaXRlbUtleTogbG9jYWxTdG9yYWdlSXRlbUtleSwgaXRlbURhdGE6IGxvY2FsU3RvcmFnZUl0ZW19KSsnXFxuXFxuJywgJ3V0ZjgnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFUlJPUicsZXJyKTtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnb3BlcmF0aXZvX2dldCcsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXSxcclxuICAgICAgICB1bmxvZ2dlZDp0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIF9wYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdnZXRfcmFuZG9tX2ZyZWVfY2FzZScsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbe25hbWU6J29wZXJhdGl2bycgICAgLCB0eXBlTmFtZTondGV4dCd9XSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pbnNUb0V4cGlyZSA9IDMwO1xyXG4gICAgICAgICAgICBjb25zdCBtaW5zU2luY2VCbG9xdWVkID0gYGRhdGVfcGFydCgnbWluJywgYWdlKGN1cnJlbnRfdGltZXN0YW1wLCBmZWNoYV9ibG9xdWVvKSlgO1xyXG4gICAgICAgICAgICBjb25zdCBlbmMgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgc2VsZWN0IGVuYyBmcm9tIHRlbSB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIChsaWJyZSBvciAke21pbnNTaW5jZUJsb3F1ZWR9ID4gJHttaW5zVG9FeHBpcmV9KSBsaW1pdCAxO2AsW3BhcmFtcy5vcGVyYXRpdm9dKS5mZXRjaFVuaXF1ZVZhbHVlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBVUERBVEUgdGVtIHNldCBsaWJyZSA9IGZhbHNlLCBmZWNoYV9ibG9xdWVvPWN1cnJlbnRfdGltZXN0YW1wIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyYCxbcGFyYW1zLm9wZXJhdGl2bywgZW5jLnZhbHVlXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gZW5jLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnbXVlc3RyYV9nZW5lcmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCcsICAgIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wifSxcclxuICAgICAgICAgICAge25hbWU6J2FyZWEnICAgICAgICAgICAgICAgLCB0eXBlTmFtZTonaW50ZWdlcicsIHJlZmVyZW5jZXM6IFwiYXJlYXNcIn0sXHJcbiAgICAgICAgICAgIHtuYW1lOidkb21pbmlvJyAgICAgICAgICAgICwgdHlwZU5hbWU6J2ludGVnZXInLCBkZWZhdWx0VmFsdWU6IDN9LFxyXG4gICAgICAgICAgICB7bmFtZTonY2FudF9lbmN1ZXN0YXMnICAgICAsIHR5cGVOYW1lOidpbnRlZ2VyJ30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGNvbnN0IGJlID0gIGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciBwZXJtaXRlR2VuZXJhck11ZXN0cmEgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gb3BlcmF0aXZvcyBcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMVxyXG4gICAgICAgICAgICBgLFtwYXJhbXMub3BlcmF0aXZvXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgICAgICAgICAgaWYocGVybWl0ZUdlbmVyYXJNdWVzdHJhKXtcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBNYXRoLm1pbihwYXJhbXMuY2FudF9lbmN1ZXN0YXMsbWF4QUdlbmVyYXIpOyBpKyspe1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGdlbmVyYXJFbmN1ZXN0YVRlbShjb250ZXh0LCBwYXJhbXMub3BlcmF0aXZvLCBpLCBwYXJhbXMuYXJlYSwgcGFyYW1zLmRvbWluaW8pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgZ2VuZXJhclRhcmVhc1RlbUZhbHRhbnRlcyhjb250ZXh0LCBwYXJhbXMub3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiZWwgb3BlcmF0aXZvIG5vIHBlcm1pdGUgZ2VuZXJhciBtdWVzdHJhXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdtdWVzdHJhX2FncmVnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0JywgICAgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCJ9LFxyXG4gICAgICAgICAgICB7bmFtZTonYXJlYScgICAgICAgICAgICAgICAsIHR5cGVOYW1lOidpbnRlZ2VyJywgcmVmZXJlbmNlczogXCJhcmVhc1wifSxcclxuICAgICAgICAgICAge25hbWU6J2RvbWluaW8nICAgICAgICAgICAgLCB0eXBlTmFtZTonaW50ZWdlcicsIGRlZmF1bHRWYWx1ZTogM30sXHJcbiAgICAgICAgICAgIHtuYW1lOidjYW50X2VuY3Vlc3RhcycgICAgICwgdHlwZU5hbWU6J2ludGVnZXInfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgY29uc3QgYmUgPSAgY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHBlcm1pdGVHZW5lcmFyTXVlc3RyYSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmEgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBvcGVyYXRpdm9zIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxXHJcbiAgICAgICAgICAgIGAsW3BhcmFtcy5vcGVyYXRpdm9dKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgICAgICAgICBpZihwZXJtaXRlR2VuZXJhck11ZXN0cmEpe1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvdGFsID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgIGBzZWxlY3QgY291bnQoKikgYXMgdG90YWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgYXJlYSA9ICQyYCxcclxuICAgICAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmFyZWFdXHJcbiAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSB0b3RhbDsgaSA8IE1hdGgubWluKHRvdGFsICsgcGFyYW1zLmNhbnRfZW5jdWVzdGFzLG1heEFFbmNQb3JBcmVhKTsgaSsrKXtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBnZW5lcmFyRW5jdWVzdGFUZW0oY29udGV4dCwgcGFyYW1zLm9wZXJhdGl2bywgaSwgcGFyYW1zLmFyZWEsIHBhcmFtcy5kb21pbmlvKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IGdlbmVyYXJUYXJlYXNUZW1GYWx0YW50ZXMoY29udGV4dCwgcGFyYW1zLm9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcImVsIG9wZXJhdGl2byBubyBwZXJtaXRlIGdlbmVyYXIgbXVlc3RyYVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7ICAgICBcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ibGFucXVlYXJfcHJldmlzdWFsaXphcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnLCByZWZlcmVuY2VzOlwib3BlcmF0aXZvc1wifSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOlsnY29vcl9wcm9jJywnY29vcl9jYW1wbycsJ2FkbWluJ10sXHJcbiAgICAgICAgcmVzdWx0T2s6J21vc3RyYXJfZW5jdWVzdGFfYV9ibGFucXVlYXJfY29udGVuaWRvJyxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ICpcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIC0tcGsgdmVyaWZpY2FkYVxyXG4gICAgICAgICAgICAgICAgYCxbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IgKGBObyBzZSBlbmNvbnRyw7MgbGEgZW5jdWVzdGEgJHtwYXJhbXMuZW5jfSBwYXJhIGVsIG9wZXJhdGl2byAke3BhcmFtcy5vcGVyYXRpdm99LiAke2Vyci5tZXNzYWdlfWAgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7Y2Fzb1RlbTogcmVzdWx0LnJvd307XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ibGFucXVlYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0JywgcmVmZXJlbmNlczpcIm9wZXJhdGl2b3NcIn0sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOlsnY29vcl9wcm9jJywnY29vcl9jYW1wbycsJ2FkbWluJ10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSAke2JlLmRiLnF1b3RlSWRlbnQoT3BlcmF0aXZvR2VuZXJhdG9yLm1haW5URCl9IFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgJHtiZS5kYi5xdW90ZUlkZW50KE9wZXJhdGl2b0dlbmVyYXRvci5tYWluVERQSyl9ID0gJDJcclxuICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIC8vcGFzbyBhIGVuY3UgcGFyYSBndWFyZGFyIGVuIGhpc3RvcmlhbFxyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYV9hY3R1YWwgPSAnZW5jdSdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgLS1wayB2ZXJpZmljYWRhXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICAgICAgYCxbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgIGAsW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGdlbmVyYXJUYXJlYXNUZW1GYWx0YW50ZXMoY29udGV4dCwgcGFyYW1zLm9wZXJhdGl2byk7ICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vcmVzZXRlbyB0ZW0gKG5vIHNlIGd1YXJkYSBoaXN0b3JpYWwgcG9ycXVlIHRhcmVhX2FjdHVhbCBlcyBudWxsKVxyXG4gICAgICAgICAgICAvL2d1YXJkbyBiYWNrdXAgcG9yIGxhcyBkdWRhc1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uX2JhY2t1cCA9IGpzb25fZW5jdWVzdGEsIGpzb25fZW5jdWVzdGEgPSBudWxsLCB0YXJlYV9hY3R1YWwgPSBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZWNoYV9tb2RpZl9lbmN1ZXN0YSA9IG51bGwsIGZlY2hhX2JhY2t1cCA9IGN1cnJlbnRfdGltZXN0YW1wLCBtb2RpZmljYWRvID0gbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdW1lbl9lc3RhZG8gPSBudWxsLCByZXN1bWVuX2VzdGFkb19zdXAgPSBudWxsLCBzdXBlcnZpc2lvbl9kaXJpZ2lkYSA9IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc2VfdGFibGEgPSBudWxsLCByZWEgPSBudWxsLCBub3JlYSA9IG51bGwsIHJlYV9zdXAgPSBudWxsLCBub3JlYV9zdXAgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIC0tcGsgdmVyaWZpY2FkYVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqXHJcbiAgICAgICAgICAgIGAsW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNvbnNpc3RlbmNpYXNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgJHtiZS5kYi5xdW90ZUlkZW50KE9wZXJhdGl2b0dlbmVyYXRvci5tYWluVERQSyl9ID0gJDJcclxuICAgICAgICAgICAgYCxbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gaW5fY29uX3ZhclxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBwa19pbnRlZ3JhZGEtPj4ke2JlLmRiLnF1b3RlTGl0ZXJhbChPcGVyYXRpdm9HZW5lcmF0b3IubWFpblREUEspfSA9ICQyXHJcbiAgICAgICAgICAgIGAsW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIGluY29uc2lzdGVuY2lhc191bHRpbWFzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIHBrX2ludGVncmFkYS0+PiR7YmUuZGIucXVvdGVMaXRlcmFsKE9wZXJhdGl2b0dlbmVyYXRvci5tYWluVERQSyl9ID0gJDJcclxuICAgICAgICAgICAgYCxbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGBsYSBlbmN1ZXN0YSAke3BhcmFtcy5lbmN9IHNlIGJsYW5xdWXDsyBjb3JyZWN0YW1lbnRlYDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2FjY2lvbl90YXJlYXNfdGVtX2VqZWN1dGFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2NvbmRpY2lvbicgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonYWNjaW9uJyAgICAgICAgICAsIHR5cGVOYW1lOidqc29uYid9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgYmUgPSAgY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIGFjY2lvbiA9IHBhcmFtcy5hY2Npb24gYXMgRXN0YWRvQWNjaW9uO1xyXG4gICAgICAgICAgICB2YXIgY3VtcGxlOmJvb2xlYW4gPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0IGFjY2lvbl9jdW1wbGVfY29uZGljaW9uKCQ1LCAkNiwgJDcsICQ4LCAoXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0IGNvbmRpY2lvbiBcclxuICAgICAgICAgICAgICAgICAgICAgIGZyb20gZXN0YWRvc19hY2Npb25lcyBcclxuICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlc3RhZG8gPSAkMiBhbmQgZWFjY2lvbiA9ICQzIGFuZCBlc3RhZG9fZGVzdGlubyA9ICQ0XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClgLCBbXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMub3BlcmF0aXZvLCBcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG8sIFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVhY2Npb24sIFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkb19kZXN0aW5vLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2bywgXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvLCBcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5lbmMsIFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVhY2Npb24sXHJcbiAgICAgICAgICAgIF0pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgIGlmKCFjdW1wbGUpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYE5vIHNlIHB1ZG8gZWplY3V0YXIgbGEgYWNjacOzbiwgbm8gc2UgY3VtcGxlIGxhIGNvbmRpY2nDs24gXCIke3BhcmFtcy5jb25kaWNpb259XCIgbyBiaWVuIGVsIGVzdGFkbyBlc3TDoSBkZXNhY3R1YWxpemFkbywgcmVmcmVzcXVlIGxhIGdyaWxsYS5gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmQgZW5jPSQyIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMub3BlcmF0aXZvLCBcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZW5jLCBcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMudGFyZWEsIFxyXG4gICAgICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG9fZGVzdGlub1xyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGlmKGFjY2lvbi5ub21icmVfcHJvY2VkdXJlKXtcclxuICAgICAgICAgICAgICAgIGlmKGJlLnByb2NlZHVyZVthY2Npb24ubm9tYnJlX3Byb2NlZHVyZV0pe1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZVthY2Npb24ubm9tYnJlX3Byb2NlZHVyZV0uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcylcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBObyBleGlzdGUgZWwgcHJvY2VkdXJlIFwiJHthY2Npb24ubm9tYnJlX3Byb2NlZHVyZX1cIiBkZWZpbmlkbyBlbiBsYSB0YWJsYSBcImVzdGFkb3NfYWNjaW9uZXNcIiBwYXJhIGVsXHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvOiAke2FjY2lvbi5vcGVyYXRpdm99LCBlc3RhZG86ICR7YWNjaW9uLmVzdGFkb30sIGVhY2Npb246ICR7YWNjaW9uLmVhY2Npb259LmApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQlVTQ08gUEFTRSBERSBUQVJFQVxyXG4gICAgICAgICAgICB2YXIgdGFyZWFTaWd1aWVudGUgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0ICpcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc19wcm94aW1hc1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm8gPSAkMSBhbmQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhID0gJDIgYW5kIGVzdGFkbyA9ICQzIGFuZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWFfY3VtcGxlX2NvbmRpY2lvbigkNCwgJDUsICQ2LCAkNywgY29uZGljaW9uKVxyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyIGJ5IG9yZGVuXHJcbiAgICAgICAgICAgICAgICAgICAgbGltaXQgMWBcclxuICAgICAgICAgICAgLFtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sIFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkb19kZXN0aW5vLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2bywgXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMudGFyZWEsXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvX2Rlc3Rpbm8sXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW5jXHJcbiAgICAgICAgICAgIF0pLmZldGNoT25lUm93SWZFeGlzdHMoKSkucm93O1xyXG4gICAgICAgICAgICBpZih0YXJlYVNpZ3VpZW50ZSl7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYFxyXG4gICAgICAgICAgICAgICAgICAgICxbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgdGFyZWFTaWd1aWVudGUudGFyZWFfZGVzdGlub11cclxuICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgICAgIGxldCBhdXRvQXNpZ25hZG8gPSB0YXJlYVNpZ3VpZW50ZS5yZWdpc3RyYV9yZWNlcGNpb25pc3RhP2NvbnRleHQudXNlci5pZHBlcjpudWxsO1xyXG4gICAgICAgICAgICAgICAgbGV0IHEgPSBjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbDtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgdHNfZW50cmFkYSA9IGN1cnJlbnRfdGltZXN0YW1wLCBhZGVsYW50YXIgPSBudWxsLCBlc3RhZG8gPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHthdXRvQXNpZ25hZG8/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIsIHJlY2VwY2lvbmlzdGE9XCIrcShhdXRvQXNpZ25hZG8pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XCJcIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYFxyXG4gICAgICAgICAgICAgICAgICAgICxbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgdGFyZWFTaWd1aWVudGUudGFyZWFfZGVzdGlubywgdGFyZWFTaWd1aWVudGUuZXN0YWRvX2Rlc3Rpbm9dXHJcbiAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgICAgICBpZih0YXJlYVNpZ3VpZW50ZS5ub21icmVfcHJvY2VkdXJlKXtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmVbdGFyZWFTaWd1aWVudGUubm9tYnJlX3Byb2NlZHVyZV0uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gRklOIFBBU0UgREUgVEFSRUFcclxuICAgICAgICAgICAgcmV0dXJuIFwib2tcIjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2NhcmdhX3ByZXBhcmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgb3BlcmFjaW9uID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuYywgT1BFUkFDSU9OX1BSRVBBUkFSX0NBUkdBXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfZGlzcG9uaWJpbGl6YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBhc2lnbmFkbyA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX2NhcmdhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IG9wZXJhY2lvbiA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2Rlc2NhcmdhX3ByZXBhcmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgb3BlcmFjaW9uID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuYywgT1BFUkFDSU9OX1BSRVBBUkFSX0RFU0NBUkdBXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fZGVzY2FyZ2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgb3BlcmFjaW9uID0gJ2NhcmdhcidcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2FuYWxpemFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmNvbnNpc3Rpcl9lbmN1ZXN0YS5jb3JlRnVuY3Rpb24oY29udGV4dCwge29wZXJhdGl2bzpwYXJhbXMub3BlcmF0aXZvLCBpZF9jYXNvOnBhcmFtcy5lbmN9KVxyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX3ZlcmlmaWNhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHZlcmlmaWNhZG8gPSAnMSdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX3ZlcmlmaWNhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHZlcmlmaWNhZG8gPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9jZXJyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB2ZXJpZmljYWRvID0gJzEnLCBhc2lnbmFkbyA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmMsIGNvbnRleHQudXNlci5pZHBlcl0pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX2NlcnJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHZlcmlmaWNhZG8gPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9zdXBlcnZpc2FyX3ByZXNlbmNpYWwnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzLCBzdXBlcnZpc2lvbl9kaXJpZ2lkYSA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3N1cGUnLCAxXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfc3VwZXJ2aXNhcl90ZWxlZm9uaWNhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkMywgc3VwZXJ2aXNpb25fZGlyaWdpZGEgPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdzdXBlJywgMl0pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX3N1cGVydmlzYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzLCBzdXBlcnZpc2lvbl9kaXJpZ2lkYSA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnZmluYyddKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9wYXNhcl9hX2FuYWMnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQ0MnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDIgYW5kIHRhcmVhIGluICgkMywkNCkgLS1xdWllcm8gcGFzYXIgbGFzIDIgdGFyZWFzIGEgQ0NcclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ2FuYWMnLCAncHJvYyddKVxyXG4gICAgICAgICAgICAuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ2FuYWMnXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fcGFzYXJfYV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ0EnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDIgYW5kIHRhcmVhPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAncHJvYyddKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJzBEJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYT0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ2FuYWMnXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAncHJvYyddKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9kZXZvbHZlcl9wcm9jX2Rlc2RlX2FuYWMnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuZW5jdWVzdGFfdmVyaWZpY2FyLmNvcmVGdW5jdGlvbihjb250ZXh0LHBhcmFtcyk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdBJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYT0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAncHJvYyddKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19kZXZvbHZlcl9wcm9jX2Rlc2RlX2FuYWMnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQ0MnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDIgYW5kIHRhcmVhIGluICgkMywkNCkgLS1xdWllcm8gcGFzYXIgbGFzIDIgdGFyZWFzIGEgQ0NcclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ2FuYWMnLCAncHJvYyddKVxyXG4gICAgICAgICAgICAuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuZW5jdWVzdGFfbm9fdmVyaWZpY2FyLmNvcmVGdW5jdGlvbihjb250ZXh0LHBhcmFtcyk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfcmVjdXBlcmFyX2Rlc2RlX2FuYWMnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIge29wZXJhdGl2bywgZW5jLCB0YXJlYX0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5lbmN1ZXN0YV92ZXJpZmljYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQscGFyYW1zKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBlbmMsICdyZWN1J10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX3JlY3VwZXJhcl9kZXNkZV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHtvcGVyYXRpdm8sIGVuYywgdGFyZWF9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBlbmMsICdyZWN1JywgJ2FuYWMnXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5lbmN1ZXN0YV9ub192ZXJpZmljYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQscGFyYW1zKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9mb3J6YXJfdGFyZWEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhX2FjdHVhbCcgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWFfbnVldmEnICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciB7b3BlcmF0aXZvLCBlbmMsIHRhcmVhX2FjdHVhbCwgdGFyZWFfbnVldmF9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBlbmMsIHRhcmVhX2FjdHVhbCwgdGFyZWFfbnVldmFdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdWJyBcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBlbmMsIHRhcmVhX2FjdHVhbF0pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJzBEJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIGVuYywgdGFyZWFfbnVldmFdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9oYWJpbGl0YXJfZGVzaGFiaWxpdGFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgaGFiaWxpdGFkYSA9IG5vdCBoYWJpbGl0YWRhXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogQUNDSU9OX1BBU0FSX1BST0lFLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgX3BhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgbGV0IHBhcmFtZXRyb3MgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ICogZnJvbSBwYXJhbWV0cm9zIHdoZXJlIHVuaWNvX3JlZ2lzdHJvYCxcclxuICAgICAgICAgICAgW10pLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxuICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGBzZWxlY3QgdC5vcGVyYXRpdm8sIHQuZW5jLCB0LnRhcmVhX2FjdHVhbCwgdHQudHNfZW50cmFkYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfdGVtIHR0IGpvaW4gdGVtIHQgdXNpbmcgKG9wZXJhdGl2byxlbmMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSB0dC5vcGVyYXRpdm89JDEgYW5kIHR0LnRhcmVhPSAkMiBhbmQgKCR7Z2V0RGlhc0FQYXNhclF1ZXJ5KCd0dCcpfSA8PSAwIG9yIGNvYWxlc2NlKHR0LmFkZWxhbnRhcixmYWxzZSkpIGFuZCB0dC50YXJlYSA9IHQudGFyZWFfYWN0dWFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGA7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbSB0dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ1YnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKCR7c2VsZWN0fSkgYXV4XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHR0Lm9wZXJhdGl2byA9IGF1eC5vcGVyYXRpdm8gYW5kIHR0LmVuYyA9IGF1eC5lbmMgYW5kIHR0LnRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtZXRyb3Mub3BlcmF0aXZvLCAnZmluYycsICdmaW5jJ10pXHJcbiAgICAgICAgICAgIC5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICAvL1RPRE8gYXNpZ25hciBlbiBwcm9jZXNhbWllbnRvXHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbSB0dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ0EnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKCR7c2VsZWN0fSkgYXV4XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHR0Lm9wZXJhdGl2byA9IGF1eC5vcGVyYXRpdm8gYW5kIHR0LmVuYyA9IGF1eC5lbmMgYW5kIHR0LnRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtZXRyb3Mub3BlcmF0aXZvLCAnZmluYycsICdwcm9jJ10pXHJcbiAgICAgICAgICAgIC5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGVtIHRcclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJ3Byb2MnXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSAoJHtzZWxlY3R9KSBhdXhcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSB0Lm9wZXJhdGl2byA9IGF1eC5vcGVyYXRpdm8gYW5kIHQuZW5jID0gYXV4LmVuY1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCAsXHJcbiAgICAgICAgICAgIFtwYXJhbWV0cm9zLm9wZXJhdGl2bywgJ2ZpbmMnXSkuZmV0Y2hBbGwoKTtcclxuICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjonaW50ZXJjYW1iaWFyX2VuY3Vlc3RhcycsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMxJyAgICAgICAgICAgICxyZWZlcmVuY2VzOid0ZW0nICwgdHlwZU5hbWU6J3RleHQnICAgIH0sXHJcbiAgICAgICAgICAgIHtuYW1lOidjYW50SG9nMScgICAgICAgICAgICAgICAgICAgICAgICAgICwgdHlwZU5hbWU6J2ludGVnZXInIH0sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMyJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnICAgIH0sXHJcbiAgICAgICAgICAgIHtuYW1lOidjYW50SG9nMicgICAgICAgICAgICAgICAgICAgICAgICAgICwgdHlwZU5hbWU6J2ludGVnZXInIH0sXHJcbiAgICAgICAgICAgIHtuYW1lOidwYXNvJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgdHlwZU5hbWU6J2ludGVnZXInIH0sXHJcbiAgICAgICAgICAgIHtuYW1lOidjb25maXJtYScgICAgICAgICAgICAgICAgICwgdHlwZU5hbWU6J2Jvb2xlYW4nLCBkZWZhdWx0VmFsdWU6ZmFsc2UsIGxhYmVsOidDb25maXJtYSBpbnRlcmNhbWJpbyBkZSBsb3MgZGF0b3MgZW50cmUgbGFzIGVuY3Vlc3Rhcz8gJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6Wydjb29yX3Byb2MnLCdwcm9jZXNhbWllbnRvJywnYWRtaW4nXSxcclxuICAgICAgICBwcm9ncmVzczp0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBQYXJhIGNvbnRyb2xhcjpcclxuICAgICAgICAgICAgICogLSBxdWUgbGFzIGhvZ2FyZXMsIHBlcnNvbmFzLCBldGMgZXN0w6luIGludGVyY2FtYmlhZGFzIFxyXG4gICAgICAgICAgICAgKiAgKiB0YW50byBlbiBlbCBqc29uXHJcbiAgICAgICAgICAgICAqICAqIGNvbW8gZW4gbGFzIFREc1xyXG4gICAgICAgICAgICAgKiAtIGNvc2FzIHF1ZSBzZSBjYWxjdWxhbiBwb3IgbGEgYXBwPyBjdWFsZXM/IChyZXN1bWVuX2VzdGFkbywgcmVhIHkgbm9yZWEpXHJcbiAgICAgICAgICAgICAqL1xyXG5cclxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuY29uZmlybWEpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBjb25maXJtw7MgaW50ZXJjYW1iaW8nKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICggIXBhcmFtcy5lbmMxIHx8ICFwYXJhbXMuZW5jMikgIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIEZhbHRhIGluZ3Jlc2FyIHVuIG51bWVybyBkZSBlbmN1ZXN0YSEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIHBhcmFtcy5lbmMxPT1wYXJhbXMuZW5jMikgIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIGVuYzEgeSBlbmMyIGRlYmVuIHNlciBkaXN0aW50b3MhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuY2FudEhvZzEpICB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCBDYW50aWRhZCBkZSBIb2dhcmVzIGRlIGVuYzEsIG5vIGVzdGEgaW5ncmVzYWRvIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcGFyYW1zLmNhbnRIb2cyKSAge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciwgQ2FudGlkYWQgZGUgSG9nYXJlcyBkZSBlbmMyLCBubyBlc3RhIGluZ3Jlc2FkbyEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBDT05UUk9MQVIgUVVFIE5JTkdVTkEgREUgTEFTIDIgZW5jdWVzdGFzIEVTVEUgQ0FSR0FEQSwgQUJJRVJUQSBGQUxUQVxyXG4gICAgICAgICAgICBjb25zdCBPUEVSQVRJVk8gPSBhd2FpdCBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dCk7XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGNhbnRfaG9ncz0oYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IHZpdmllbmRhLCBjb3VudCgqKW5oIGZyb20gaG9nYXJlcyB3aGVyZSBvcGVyYXRpdm89JDEgYW5kICh2aXZpZW5kYT0kMiBvciB2aXZpZW5kYT0kMylcclxuICAgICAgICAgICAgICAgIGdyb3VwIGJ5IHZpdmllbmRhIG9yZGVyIGJ5IHZpdmllbmRhXHJcbiAgICAgICAgICAgICAgICBgLFtPUEVSQVRJVk8sIHBhcmFtcy5lbmMxLCBwYXJhbXMuZW5jMl0pLmZldGNoQWxsKCkpLnJvd3M7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIHBhcmFtX25oPVtwYXJhbXMuY2FudEhvZzEscGFyYW1zLmNhbnRIb2cyXTtcclxuICAgICAgICAgICAgY2FudF9ob2dzLmZvckVhY2goKHhlLGkpPT57XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1fbmhbaV0gIT09IHhlLm5oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1lbnM9YEVycm9yLCBubyBjb2luY2lkZSBsYSBjYW50aWRhZCBkZSBob2dhcmVzIGRlIGVuYyR7aSsxfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHhtZW5zKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pOyAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciByZWdFbmM9KGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgc2VsZWN0IGVuYywgdGFyZWFfYWN0dWFsLCBqc29uX2VuY3Vlc3RhIGZyb20gdGVtIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgKGVuYyA9JDIgb3IgZW5jPSQzKSBvcmRlciBieSBlbmNcclxuICAgICAgICAgICAgYCxbT1BFUkFUSVZPLCBwYXJhbXMuZW5jMSwgcGFyYW1zLmVuYzJdKS5mZXRjaEFsbCgpKS5yb3dzO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHJlZ0VuYy5sZW5ndGghPTIpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciwgTm8gc2UgZW5jb250cmFyb24gMiBlbmN1ZXN0YXMnKSAgICBcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAvLyBsaW1waWEgbGFzIFREcyAgXHJcbiAgICAgICAgICAgICAgICBsZXQgW2VuYzEsZW5jMl0gPSBbcmVnRW5jWzBdLCByZWdFbmNbMV1dXHJcbiAgICAgICAgICAgICAgICBpZihwYXJhbXMucGFzbyA9PSAxKXtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgYGRlbGV0ZSBmcm9tICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KE9wZXJhdGl2b0dlbmVyYXRvci5tYWluVEQpfSB3aGVyZSBvcGVyYXRpdm89JDEgYW5kICh2aXZpZW5kYT0kMiBPUiB2aXZpZW5kYT0kMylgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICwgW09QRVJBVElWTywgZW5jMS5lbmMsIGVuYzIuZW5jXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYocGFyYW1zLnBhc28gPT0gMil7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9zaW11bGEgZ3VhcmRhZG9cclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzaW11bGFyR3VhcmRhZG9EZUVuY3Vlc3RhRGVzZGVBcHBFc2NyaXRvcmlvKGNvbnRleHQsIE9QRVJBVElWTywgZW5jMS5lbmMsIGVuYzEudGFyZWFfYWN0dWFsICwgZW5jMi5qc29uX2VuY3Vlc3RhKVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNpbXVsYXJHdWFyZGFkb0RlRW5jdWVzdGFEZXNkZUFwcEVzY3JpdG9yaW8oY29udGV4dCwgT1BFUkFUSVZPLCBlbmMyLmVuYywgZW5jMi50YXJlYV9hY3R1YWwgLCBlbmMxLmpzb25fZW5jdWVzdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIChgTGlzdG8gcGFzbyAke3BhcmFtcy5wYXNvfS4gSW50ZXJjYW1iaW8gcmVhbGl6YWRvIGVudHJlIGxhcyBlbmN1ZXN0YXMgICR7cGFyYW1zLmVuYzF9IHkgJHtwYXJhbXMuZW5jMn0uIFBvciBmYXZvciBjb25zaXN0YSBsYSBlbmN1ZXN0YWApXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHsgICAgIFxyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhZG9yX2Rtc19tb3N0cmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCcsIHJlZmVyZW5jZXM6XCJvcGVyYXRpdm9zXCJ9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jdWVzdGFkb3InICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczpbJ2Nvb3JfcHJvYycsJ2Nvb3JfY2FtcG8nLCdhZG1pbiddLFxyXG4gICAgICAgIHJlc3VsdE9rOidtb3N0cmFyX2VuY3Vlc3Rhc19hX2JsYW5xdWVhcicsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ICpcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGFzaWduYWRvID0gJDIgYW5kIGNhcmdhZG9fZG0gaXMgbm90IG51bGxcclxuICAgICAgICAgICAgICAgICAgICBvcmRlciBieSBjYXJnYWRvX2RtXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmN1ZXN0YWRvcl0pXHJcbiAgICAgICAgICAgIC5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICBpZihyZXN1bHQucm93Q291bnQgPT0gMCl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvciAoYE5vIHNlIGVuY29udHJhcm9uIGVuY3Vlc3RhcyBjYXJnYWRhcyBlbiB1biBETSBwYXJhIGVsIG9wZXJhdGl2byAke3BhcmFtcy5vcGVyYXRpdm99LCBlbmN1ZXN0YWRvciAke3BhcmFtcy5lbmN1ZXN0YWRvcn1gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7cm93czogcmVzdWx0LnJvd3MsIG9wZXJhdGl2bzogcGFyYW1zLm9wZXJhdGl2b307XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdkbV9ibGFucXVlYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0JywgcmVmZXJlbmNlczpcIm9wZXJhdGl2b3NcIn0sXHJcbiAgICAgICAgICAgIHtuYW1lOid0b2tlbicgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczpbJ2Nvb3JfcHJvYycsJ2Nvb3JfY2FtcG8nLCdhZG1pbiddLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgY29uc3QgVUFfUFJJTkNJUEFMID0gYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIHBhcmFtcy5vcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICBsZXQgdGFyZWFzVGVtUmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgY2FyZ2Fkb19kbSA9IG51bGwsIG9wZXJhY2lvbiA9ICQzLCBlc3RhZG8gPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgY2FyZ2Fkb19kbSA9ICQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50b2tlbiwgRVNUQURPX1BPU1RFUklPUl9ERVNDQVJHQSwgT1BFUkFDSU9OX1BSRVBBUkFSX0RFU0NBUkdBXSlcclxuICAgICAgICAgICAgLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIGlmKHRhcmVhc1RlbVJlc3VsdC5yb3dDb3VudCA9PSAwKXtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yKCdObyBzZSBibGFucXVlw7MgbmluZ3VuYSBlbmN1ZXN0YScpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yKGxldCB0dCBvZiB0YXJlYXNUZW1SZXN1bHQucm93cyl7XHJcbiAgICAgICAgICAgICAgICB0dC5yZXN1bHRfYmxhbnF1ZW8gPSBgZW5jICR7dHQuZW5jfSBzZSBibGFucXVlw7MgY29ycmVjdGFtZW50ZS5gO1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdEJhY2t1cCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBqc29uX2VuY3Vlc3RhID0ganNvbl9iYWNrdXAsIGZlY2hhX21vZGlmX2VuY3Vlc3RhID0gZmVjaGFfYmFja3VwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCBmZWNoYV9iYWNrdXAgPiBjb2FsZXNjZShmZWNoYV9tb2RpZl9lbmN1ZXN0YSwgJzE5MDAtMDEtMDEnKSBhbmQganNvbl9iYWNrdXAgaXMgbm90IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgICAgIFt0dC5vcGVyYXRpdm8sIHR0LmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgICAgICAgICAgaWYocmVzdWx0QmFja3VwLnJvd0NvdW50KXtcclxuICAgICAgICAgICAgICAgICAgICB0dC5yZXN1bHRfYmxhbnF1ZW8rPWAgU2UgcmVzdGFibGVjacOzIGVsIGJhY2t1cCBjb24gZmVjaGEgJHtyZXN1bHRCYWNrdXAucm93LmZlY2hhX2JhY2t1cC50b1ltZEhtcygpfS5gXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHtwYXJhbXM6cXVlcnlQYXJhbXMsc2V0dGVyc30gPSBnZXRTZXR0ZXJzQW5kUGFyYW1ldGVyc0ZvclJlYU5vUmVhUmVzdW1lbkVzdGFkbyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhOiB0dC50YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsOiByZXN1bHRCYWNrdXAucm93Lmpzb25fZW5jdWVzdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRlcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFt0dC5vcGVyYXRpdm8sIHR0LmVuYywgdHQudGFyZWFdXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHVwZGF0ZSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgJHtzZXR0ZXJzLmpvaW4oJywnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2BcclxuICAgICAgICAgICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc1xyXG4gICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzaW11bGFyR3VhcmRhZG9EZUVuY3Vlc3RhRGVzZGVBcHBFc2NyaXRvcmlvKGNvbnRleHQsIHJlc3VsdEJhY2t1cC5yb3cub3BlcmF0aXZvLCByZXN1bHRCYWNrdXAucm93LmVuYywgdHQudGFyZWEscmVzdWx0QmFja3VwLnJvdy5qc29uX2VuY3Vlc3RhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0YXJlYXNUZW1SZXN1bHQucm93cztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5dO1xyXG4iXX0=
|