@media-quest/builder 0.0.11 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/public-api.d.mts +1 -2
- package/dist/public-api.d.ts +1 -2
- package/dist/public-api.js +5 -5
- package/dist/public-api.mjs +2 -2
- package/package.json +2 -2
- package/src/public-api.ts +2 -3
package/dist/public-api.mjs
CHANGED
|
@@ -2381,10 +2381,10 @@ export {
|
|
|
2381
2381
|
RuleInput,
|
|
2382
2382
|
RuleOptionSelectItem,
|
|
2383
2383
|
RuleVariableSelectItem,
|
|
2384
|
+
SchemaPrefix,
|
|
2384
2385
|
SingleSelectItem,
|
|
2385
2386
|
TagActionManager,
|
|
2386
2387
|
TagCollection,
|
|
2387
|
-
VarID
|
|
2388
|
-
createRandomPrefix
|
|
2388
|
+
VarID
|
|
2389
2389
|
};
|
|
2390
2390
|
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL0J1aWxkZXJPYmplY3QudHMiLCAiLi4vc3JjL3RoZW1lL2ljb24tdXJscy50cyIsICIuLi9zcmMvdGhlbWUvSURlZmF1bHRUaGVtZS50cyIsICIuLi9zcmMvQnVpbGRlci1vcHRpb24udHMiLCAiLi4vc3JjL0J1aWxkZXItcXVlc3Rpb24udHMiLCAiLi4vc3JjL0J1aWxkZXJNYWluVGV4dC50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvUnVsZVZhcmlhYmxlLnRzIiwgIi4uL3NyYy9CdWlsZGVyLXBhZ2UudHMiLCAiLi4vc3JjL3ByaW1pdGl2ZXMvc2NoZW1hLXByZWZpeC50cyIsICIuLi9zcmMvcHJpbWl0aXZlcy9wYWdlLXByZWZpeC50cyIsICIuLi9zcmMvcHJpbWl0aXZlcy92YXJJRC50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvU2luZ2xlU2VsZWN0SXRlbS50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvUnVsZUlucHV0LnRzIiwgIi4uL3NyYy9CdWlsZGVyVGFnLnRzIiwgIi4uL3NyYy9ydWxlYnVpbGRlci9jb25kaXRpb24vQnVpbGRlci1vcGVyYXRvci50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvY29uZGl0aW9uL0J1aWxkZXItY29uZGl0aW9uLnRzIiwgIi4uL3NyYy9ydWxlYnVpbGRlci9jb25kaXRpb24vQnVpbGRlci1jb25kaXRpb24tZ3JvdXAudHMiLCAiLi4vc3JjL3J1bGVidWlsZGVyL211bHRpLXNlbGVjdC1pdGVtLnRzIiwgIi4uL3NyYy9ydWxlYnVpbGRlci90YWctYWN0aW9uLW1hbmFnZXIudHMiLCAiLi4vc3JjL3J1bGVidWlsZGVyL3BhZ2UtYWN0aW9uLW1hbmFnZXIudHMiLCAiLi4vc3JjL3J1bGVidWlsZGVyL2p1bXAtdG8tYWN0aW9uLW1hbmFnZXIudHMiLCAiLi4vc3JjL3J1bGVidWlsZGVyL0J1aWxkZXItcnVsZS50cyIsICIuLi9zcmMvdGhlbWUvQWJzdHJhY3RUaGVtZUNvbXBpbGVyLnRzIiwgIi4uL3NyYy90aGVtZS9zdGFuZGFyZC1wcm9wcy50cyIsICIuLi9zcmMvdGhlbWUvdGhlbWUtdXRpbHMudHMiLCAiLi4vc3JjL3RoZW1lL2RlZmF1bHQtdGhlbWUtY29tcGlsZXIudHMiLCAiLi4vc3JjL0J1aWxkZXItc2NoZW1hLnRzIiwgIi4uL3NyYy9CdWlsZGVyLXRleHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IERVdGlsIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcblxuY29uc3QgVSA9IERVdGlsO1xuLyoqXG4gKiBCdWlsZGVyIG9iamVjdHMgYXJlIGNvbXBsZXggb2JqZWN0cyB0aGF0IGFyZSBlbWJlZGRlZCBpbnNpZGVcbiAqIGEgQnVpbGRlci1zY2hlbWEsIGFuZCBuZWVkcyB0byBiZSBzZXJpYWxpemVkIHRvIGpzb24uIE9mdGVuIHRoZXNlIG9iamVjdHNcbiAqIGFyZSB1c2VkIGluIGNvbGxlY3Rpb25zLCBhbmQgdGhhdCBpcyB3aHkgbW9zdCBvZiB0aGVtIG5lZWQgYW4gaWQuXG4gKi9cbnR5cGUgQnVpbGRlck9iamVjdFR5cGUgPVxuICB8IFwiYnVpbGRlci1wYWdlXCJcbiAgfCBcImJ1aWxkZXItcXVlc3Rpb24tb3B0aW9uXCJcbiAgfCBcImJ1aWxkZXItcXVlc3Rpb25cIlxuICB8IFwiYnVpbGRlci1tYWluLXRleHRcIlxuICB8IFwiYnVpbGRlci10ZXh0XCJcbiAgfCBcImJ1aWxkZXItcnVsZVwiXG4gIHwgXCJidWlsZGVyLXRhZ1wiXG4gIHwgXCJidWlsZGVyLWNvbmRpdGlvblwiXG4gIHwgXCJidWlsZGVyLXZhcmlhYmxlXCJcbiAgfCBcImJ1aWxkZXItY29uZGl0aW9uLWdyb3VwXCI7XG5cbmV4cG9ydCBuYW1lc3BhY2UgQnVpbGRlck9iamVjdElkIHtcbiAgZXhwb3J0IHR5cGUgUXVlc3Rpb25PcHRpb25JRCA9IHN0cmluZyAmIHsgX19PUFRJT05fX0lEX186IHRydWUgfTtcbiAgZXhwb3J0IHR5cGUgUXVlc3Rpb25JRCA9IHN0cmluZyAmIHsgX19RVUVTVElPTl9fSURfXzogdHJ1ZSB9O1xuICBleHBvcnQgdHlwZSBUZXh0SUQgPSBzdHJpbmcgJiB7IF9fVEVYVF9fSURfXzogdHJ1ZSB9O1xuICBleHBvcnQgdHlwZSBNYWluVGV4dElEID0gc3RyaW5nICYgeyBfX01BSU5fX1RFWFRfX0lEX186IHRydWUgfTtcbiAgZXhwb3J0IHR5cGUgVGFnSWQgPSBzdHJpbmcgJiB7IF9fVEFHX19JRF9fOiB0cnVlIH07XG4gIGV4cG9ydCBjb25zdCBjcmVhdGVUYWdJZCA9ICgpOiBUYWdJZCA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZUlkKFwiYnVpbGRlci10YWdcIikgYXMgVGFnSWQ7XG4gIH07XG5cbiAgZXhwb3J0IGNvbnN0IG1haW5UZXh0SWQgPSAoKTogTWFpblRleHRJRCA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZUlkKFwiYnVpbGRlci1tYWluLXRleHRcIikgYXMgTWFpblRleHRJRDtcbiAgfTtcbiAgZXhwb3J0IGNvbnN0IHRleHRJZCA9ICgpOiBUZXh0SUQgPT4ge1xuICAgIHJldHVybiBjcmVhdGVJZChcImJ1aWxkZXItdGV4dFwiKSBhcyBUZXh0SUQ7XG4gIH07XG5cbiAgZXhwb3J0IGNvbnN0IHF1ZXN0aW9uT3B0aW9uSWQgPSAoKTogUXVlc3Rpb25PcHRpb25JRCA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZUlkKFwiYnVpbGRlci1xdWVzdGlvbi1vcHRpb25cIikgYXMgUXVlc3Rpb25PcHRpb25JRDtcbiAgfTtcbiAgZXhwb3J0IGNvbnN0IHF1ZXN0aW9uSWQgPSAoKTogUXVlc3Rpb25JRCA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZUlkKFwiYnVpbGRlci1xdWVzdGlvblwiKSBhcyBRdWVzdGlvbklEO1xuICB9O1xuXG4gIGNvbnN0IGNyZWF0ZUlkID0gKHR5cGU6IEJ1aWxkZXJPYmplY3RUeXBlKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBpZCA9IFUucmFuZG9tU3RyaW5nKDI0KTtcbiAgICByZXR1cm4gdHlwZSArIFwiLVwiICsgaWQ7XG4gIH07XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCdWlsZGVyT2JqZWN0PFQgZXh0ZW5kcyBCdWlsZGVyT2JqZWN0VHlwZSwgRHRvIGV4dGVuZHMge30+IHtcbiAgLy8gYWJzdHJhY3QgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgYWJzdHJhY3QgcmVhZG9ubHkgb2JqZWN0VHlwZTogVDtcbiAgYWJzdHJhY3QgdG9Kc29uKCk6IER0bztcbiAgYWJzdHJhY3QgY2xvbmUoKTogRHRvO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3JpZ2luYWxEdG86IER0bztcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGR0bzogRHRvKSB7XG4gICAgdGhpcy5vcmlnaW5hbER0byA9IGR0bztcbiAgICAvLyB0aGlzLm9iamVjdElkID0gZHRvLm9iamVjdElkO1xuICB9XG59XG4iLCAiZXhwb3J0IGNvbnN0IEljb25VcmxzID0ge1xuICBpc3BlV2hpdGVQbmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZpc3BlLWh2aXQucG5nP2FsdD1tZWRpYSZ0b2tlbj1mNmZlNjI4Yi0yZDk5LTQ3MmQtYTJlYS1lMDYyODczZTJlMjInLFxuICBwYXVzZVN2ZzpcbiAgICAnaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi9pc3BlLWJhY2tlbmQtZGV2LmFwcHNwb3QuY29tL28vcHVibGljLWFzc2V0cyUyRnBhdXNlLTI0cHguc3ZnP2FsdD1tZWRpYSZ0b2tlbj00NzMzNzQ5MS1iYjBkLTRjNTYtOWM4OS1hMDczY2UxOWZhZDQnLFxuICBwYXVzZUNpcmNsZU91dGxpbmVTdmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZwYXVzZV9jaXJjbGVfb3V0bGluZS0yNHB4LnN2Zz9hbHQ9bWVkaWEmdG9rZW49MTMzYWFiYzgtYWI5YS00ZWFhLTk5MTQtNGYwZjgyYzIyZWUyJyxcblxuICBwYXVzZUNpcmNsZUZpbGxlZFN2ZzpcbiAgICAnaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi9pc3BlLWJhY2tlbmQtZGV2LmFwcHNwb3QuY29tL28vcHVibGljLWFzc2V0cyUyRnBhdXNlX2NpcmNsZV9maWxsZWQtMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPWFmM2YxMmMzLTMxOTktNDA5Ni04ZWQyLTc2MzQ3YjlhMGEwYScsXG4gIHBsYXlDaXJjbGVSZWd1bGFyOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGcGxheS1jaXJjbGUtcmVndWxhci5zdmc/YWx0PW1lZGlhJnRva2VuPTA4NjdiNjkwLWQ3ZmQtNDc1Yy04ZTkxLWIyZDdhZWNhNTRkMScsXG4gIHBsYXlBcnJvd1N2ZzpcbiAgICAnaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi9pc3BlLWJhY2tlbmQtZGV2LmFwcHNwb3QuY29tL28vcHVibGljLWFzc2V0cyUyRnBsYXlfYXJyb3ctMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPTJmYTk1ZTFmLTYxZjctNGExOC1hZmIzLTIxMGVhYmFlODIyNycsXG4gIHBsYXlDaXJjbGVPdXRsaW5lOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGcGxheV9jaXJjbGVfb3V0bGluZS0yNHB4LnN2Zz9hbHQ9bWVkaWEmdG9rZW49M2E5ZjYyYzUtZGZhMi00MGVmLWE1MGUtY2YxYmRkMmQ0N2YyJyxcblxuICBzdG9wQ2lyY2xlU3ZnOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGc3RvcF9jaXJjbGUtMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPThmYmM4Yjg5LTI5YmItNDlhZC1hZTExLWI4ODgyYmEzY2E3NycsXG4gIHN0b3BTdmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZzdG9wLTI0cHguc3ZnP2FsdD1tZWRpYSZ0b2tlbj1kMmNkNDFmMS0xMzMxLTQyNDMtOWI3YS1kYzBmMGNjZDI1NWQnLFxuICByZXBsYXlDaXJjbGVTdmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZyZXBsYXktMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPTNjMzVjY2Y0LWI0NjctNGU4MS04NWQ2LWIzNmFjNjQ3MzhhZCcsXG5cbiAgdm9sdW1lT2ZmU3ZnOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGdm9sdW1lX29mZi0yNHB4LnN2Zz9hbHQ9bWVkaWEmdG9rZW49NGU0MWNjMTAtOWY0Yi00OTY3LWI0ZGYtZWQwNjgyZTY1N2E5JyxcbiAgdm9sdW1lVXBTdmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZ2b2x1bWVfdXAtMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPTU1MWJkMGE2LWE1MTUtNGY4Ny1hMjQ1LWRhNDMzZjQ4MzNmOSdcbn07XG4iLCAiaW1wb3J0IHR5cGUgeyBDc3NUaGVtZSB9IGZyb20gXCIuL2Nzcy10aGVtZVwiO1xuaW1wb3J0IHsgRFN0eWxlLCBEQ3NzIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcbmltcG9ydCB7IEljb25VcmxzIH0gZnJvbSBcIi4vaWNvbi11cmxzXCI7XG5cbnR5cGUgUFN0eWxlID0gUGFydGlhbDxEU3R5bGU+O1xuZXhwb3J0IGludGVyZmFjZSBJRGVmYXVsdFRoZW1lIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpbWFnZTogeyBzdHlsZTogUFN0eWxlIH07XG4gIHZpZGVvUGxheWVyOiB7XG4gICAgcGxheUJ1dHRvbjoge1xuICAgICAgaWNvblVybDogc3RyaW5nO1xuICAgICAgY3NzOiBQU3R5bGU7XG4gICAgICBjc3NEaXNhYmxlZDogUFN0eWxlO1xuICAgICAgY3NzRW5hYmxlZDogUFN0eWxlO1xuICAgIH07XG4gICAgcGF1c2VCdXR0b246IHtcbiAgICAgIGljb25Vcmw6IHN0cmluZztcbiAgICAgIGNzczogUFN0eWxlO1xuICAgICAgY3NzRGlzYWJsZWQ6IFBTdHlsZTtcbiAgICAgIGNzc0VuYWJsZWQ6IFBTdHlsZTtcbiAgICB9O1xuICAgIHZpZGVvRWxlbWVudDoge1xuICAgICAgY3NzOiBQU3R5bGU7XG4gICAgfTtcbiAgfTtcbiAgbWFpblRleHQ6IHtcbiAgICBub01lZGlhOiB7XG4gICAgICB0ZXh0OiB7IGNzczogUFN0eWxlOyBjc3NEaXNhYmxlZDogUFN0eWxlOyBjc3NFbmFibGVkOiBQU3R5bGUgfTtcbiAgICAgIGF1ZGlvOiB7IGNzczogUFN0eWxlOyBjc3NEaXNhYmxlZDogUFN0eWxlOyBjc3NFbmFibGVkOiBQU3R5bGUgfTtcbiAgICB9O1xuICAgIHdpdGhNZWRpYToge1xuICAgICAgdGV4dDogeyBjc3M6IFBTdHlsZTsgY3NzRGlzYWJsZWQ6IFBTdHlsZTsgY3NzRW5hYmxlZDogUFN0eWxlIH07XG4gICAgICBhdWRpbzogeyBjc3M6IFBTdHlsZTsgY3NzRGlzYWJsZWQ6IFBTdHlsZTsgY3NzRW5hYmxlZDogUFN0eWxlIH07XG4gICAgfTtcbiAgfTtcbiAgLy8gbWFpblRleHRUaGVtZTogQnVpbGRlclRleHRUaGVtZTtcbiAgcmVzcG9uc2VCdXR0b25zOiBCdWlsZGVyT3B0aW9uVGhlbWU7XG4gIG5leHRCdXR0b25UaGVtZTogQnVpbGRlck9wdGlvblRoZW1lO1xuICAvLyBtYWluUXVlc3Rpb25UZXh0OiBCdWlsZGVyVGV4dFRoZW1lO1xuICBkb250S25vd0J1dHRvblRoZW1lPzogQnVpbGRlck9wdGlvblRoZW1lO1xuICBidXR0b25UaGVtZXM/OiBBcnJheTxCdWlsZGVyT3B0aW9uVGhlbWU+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJPcHRpb25UaGVtZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGl2OiBDc3NUaGVtZTtcbiAgdGV4dDE6IFBTdHlsZTtcbiAgdGV4dDI/OiBDc3NUaGVtZTtcbn1cblxubmFtZXNwYWNlIEJ1aWxkZXJPcHRpb25UaGVtZSB7XG4gIGNvbnN0IEdSRUVOID0gXCIjNzBBRDQ3XCI7XG4gIGNvbnN0IFlFTExPVyA9IFwiI0ZGQzAwMFwiO1xuICBjb25zdCBPUkFOR0UgPSBcIiNGNDkwMkNcIjtcbiAgY29uc3QgUkVEID0gXCIjRkYwMDAwXCI7XG4gIGNvbnN0IExJR0hUX0JMVUUgPSBcIiM0MjcxOUNcIjtcbiAgY29uc3QgV0hJVEUgPSBcIiNmZmZmZmZcIjtcbiAgY29uc3QgQkxVRSA9IFwiIzJGNTU5N1wiO1xuICBjb25zdCBCVE5fV0lEVEggPSAxOC41O1xuICBjb25zdCBCVE5fQk9SREVSX1dJRFRIID0gMztcbiAgY29uc3QgQlROX0JPUkRFUl9SQURJVVMgPSAxMDtcbiAgY29uc3QgQlROX0JPUkRFUl9TVFlMRTogRFN0eWxlW1wiYm9yZGVyU3R5bGVcIl0gPSBcInNvbGlkXCI7XG4gIGNvbnN0IEJUTl9IRUlHSFQgPSA5LjI7XG4gIGNvbnN0IEJUTl9TSE9SVF9XSURUSCA9IDEzLjc7XG4gIGNvbnN0IEZPTlRfV0VJR0hUOiBEU3R5bGVbXCJmb250V2VpZ2h0XCJdID0gNjAwO1xuICBjb25zdCBGT05UX1NJWkU6IERDc3MuUHhbXCJ2YWx1ZVwiXSA9IDM1O1xuXG4gIGV4cG9ydCBjb25zdCBibHVlQnV0dG9uID0gKCk6IEJ1aWxkZXJPcHRpb25UaGVtZSA9PiAoe1xuICAgIG5hbWU6IFwiYmx1ZS1idXR0b24tdGhlbWVcIixcbiAgICBkaXY6IHtcbiAgICAgIGNzczoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IEJMVUUsXG4gICAgICAgIGJvcmRlckNvbG9yOiBCTFVFLFxuICAgICAgICB0ZXh0Q29sb3I6IFdISVRFLFxuICAgICAgICBmb250U2l6ZTogeyBfdW5pdDogXCJweFwiLCB2YWx1ZTogRk9OVF9TSVpFIH0sXG4gICAgICAgIGJvcmRlcldpZHRoOiB7IF91bml0OiBcInB4XCIsIHZhbHVlOiBCVE5fQk9SREVSX1dJRFRIIH0sXG4gICAgICAgIGJvcmRlclN0eWxlOiBCVE5fQk9SREVSX1NUWUxFLFxuICAgICAgICBib3JkZXJSYWRpdXM6IHsgdmFsdWU6IEJUTl9CT1JERVJfUkFESVVTLCBfdW5pdDogXCJweFwiIH0sXG4gICAgICAgIHBhZGRpbmc6IHsgX3VuaXQ6IFwicHhcIiwgdmFsdWU6IDQwIH0sXG4gICAgICAgIGg6IEJUTl9IRUlHSFQsXG4gICAgICAgIHc6IEJUTl9XSURUSCxcbiAgICAgICAgeDogMTAsXG4gICAgICAgIHk6IDgsXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcbiAgICAgIH0sXG4gICAgICBjc3NEaXNhYmxlZDogeyBvcGFjaXR5OiAwLjMsIGN1cnNvcjogXCJub3QtYWxsb3dlZFwiIH0sXG4gICAgICBjc3NFbmFibGVkOiB7IG9wYWNpdHk6IDEsIGN1cnNvcjogXCJwb2ludGVyXCIgfSxcbiAgICB9LFxuICAgIHRleHQxOiB7XG4gICAgICB5OiA1MCxcbiAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCUsIDUwJSlcIixcbiAgICAgIHRleHRDb2xvcjogV0hJVEUsXG4gICAgICBmb250U2l6ZTogeyBfdW5pdDogXCJweFwiLCB2YWx1ZTogRk9OVF9TSVpFIH0sXG4gICAgICB3OiA4NCxcbiAgICAgIHg6IDgsXG4gICAgICBmb250V2VpZ2h0OiBGT05UX1dFSUdIVCxcbiAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcbiAgICB9LFxuICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IERlZmF1bHRUaGVtZTogSURlZmF1bHRUaGVtZSA9IHtcbiAgbmFtZTogXCJkZWZhdWx0LXRoZW1lXCIsXG4gIHZpZGVvUGxheWVyOiB7XG4gICAgcGxheUJ1dHRvbjoge1xuICAgICAgaWNvblVybDogSWNvblVybHMucGxheUNpcmNsZVJlZ3VsYXIsXG4gICAgICBjc3M6IHsgdzogNSwgaDogNSwgeTogNDgsIHg6IDQgfSxcbiAgICAgIGNzc0Rpc2FibGVkOiB7IG9wYWNpdHk6IDAuMywgY3Vyc29yOiBcIm5vdC1hbGxvd2VkXCIgfSxcbiAgICAgIGNzc0VuYWJsZWQ6IHsgb3BhY2l0eTogMC44LCBjdXJzb3I6IFwicG9pbnRlclwiIH0sXG4gICAgfSxcbiAgICBwYXVzZUJ1dHRvbjoge1xuICAgICAgaWNvblVybDogSWNvblVybHMucGF1c2VTdmcsXG4gICAgICBjc3M6IHsgdzogNSwgaDogNSwgeTogNDgsIHg6IDQgfSxcbiAgICAgIGNzc0Rpc2FibGVkOiB7IG9wYWNpdHk6IDAuMywgY3Vyc29yOiBcIm5vdC1hbGxvd2VkXCIgfSxcbiAgICAgIGNzc0VuYWJsZWQ6IHsgb3BhY2l0eTogMC44LCBjdXJzb3I6IFwicG9pbnRlclwiIH0sXG4gICAgfSxcbiAgICB2aWRlb0VsZW1lbnQ6IHsgY3NzOiB7IHc6IDEwMCwgaDogNDUsIHk6IDU1LCB4OiAwIH0gfSxcbiAgfSxcbiAgaW1hZ2U6IHsgc3R5bGU6IHsgaDogNTAsIHc6IDEwMCwgeDogMCB9IH0sXG4gIG1haW5UZXh0OiB7XG4gICAgbm9NZWRpYToge1xuICAgICAgdGV4dDoge1xuICAgICAgICBjc3M6IHtcbiAgICAgICAgICB3OiA4MCxcbiAgICAgICAgICB5OiA2NSxcbiAgICAgICAgICB4OiAxMCxcbiAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgICAgdGV4dENvbG9yOiBcImJsYWNrXCIsXG4gICAgICAgICAgZm9udFNpemU6IHsgX3VuaXQ6IFwicHhcIiwgdmFsdWU6IDQwIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNzc0Rpc2FibGVkOiB7fSxcbiAgICAgICAgY3NzRW5hYmxlZDoge30sXG4gICAgICB9LFxuICAgICAgYXVkaW86IHtcbiAgICAgICAgY3NzOiB7XG4gICAgICAgICAgaDogNixcbiAgICAgICAgICB3OiA2LFxuICAgICAgICAgIHg6IDQsXG4gICAgICAgICAgeTogMzIsXG4gICAgICAgICAgY3Vyc29yOiBcInBvaW50ZXJcIixcbiAgICAgICAgICBvcGFjaXR5OiAwLjgsXG4gICAgICAgICAgdmlzaWJpbGl0eTogXCJ2aXNpYmxlXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGNzc0Rpc2FibGVkOiB7IG9wYWNpdHk6IDAuMywgY3Vyc29yOiBcIm5vdC1hbGxvd2VkXCIgfSxcbiAgICAgICAgY3NzRW5hYmxlZDogeyBvcGFjaXR5OiAwLjgsIGN1cnNvcjogXCJwb2ludGVyXCIgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB3aXRoTWVkaWE6IHtcbiAgICAgIHRleHQ6IHtcbiAgICAgICAgY3NzOiB7XG4gICAgICAgICAgdzogODAsXG4gICAgICAgICAgeTogMjcsXG4gICAgICAgICAgeDogMTAsXG4gICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICAgIHRleHRDb2xvcjogXCJibGFja1wiLFxuICAgICAgICAgIGZvbnRTaXplOiB7IF91bml0OiBcInB4XCIsIHZhbHVlOiAzMCB9LFxuICAgICAgICB9LFxuICAgICAgICBjc3NEaXNhYmxlZDoge30sXG4gICAgICAgIGNzc0VuYWJsZWQ6IHt9LFxuICAgICAgfSxcbiAgICAgIGF1ZGlvOiB7XG4gICAgICAgIGNzczoge1xuICAgICAgICAgIGg6IDYsXG4gICAgICAgICAgdzogNixcbiAgICAgICAgICB4OiA0LFxuICAgICAgICAgIHk6IDMyLFxuICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCIsXG4gICAgICAgICAgb3BhY2l0eTogMC44LFxuICAgICAgICAgIHZpc2liaWxpdHk6IFwidmlzaWJsZVwiLFxuICAgICAgICB9LFxuICAgICAgICBjc3NEaXNhYmxlZDogeyBvcGFjaXR5OiAwLjMsIGN1cnNvcjogXCJub3QtYWxsb3dlZFwiIH0sXG4gICAgICAgIGNzc0VuYWJsZWQ6IHsgb3BhY2l0eTogMC44LCBjdXJzb3I6IFwicG9pbnRlclwiIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG4gIG5leHRCdXR0b25UaGVtZTogQnVpbGRlck9wdGlvblRoZW1lLmJsdWVCdXR0b24oKSxcbiAgcmVzcG9uc2VCdXR0b25zOiBCdWlsZGVyT3B0aW9uVGhlbWUuYmx1ZUJ1dHRvbigpLFxufTtcbiIsICJpbXBvcnQgeyBCdWlsZGVyT2JqZWN0SWQsIEJ1aWxkZXJPYmplY3QgfSBmcm9tIFwiLi9CdWlsZGVyT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJPcHRpb25UaGVtZSB9IGZyb20gXCIuL3RoZW1lL0lEZWZhdWx0VGhlbWVcIjtcbmltcG9ydCB7IERlZmF1bHRUaGVtZSB9IGZyb20gXCIuL3RoZW1lL0lEZWZhdWx0VGhlbWVcIjtcbmltcG9ydCB7IEF1ZGlvRmlsZSB9IGZyb20gXCIuL21lZGlhLWZpbGVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlck9wdGlvbkR0byB7XG4gIHJlYWRvbmx5IGlkOiBCdWlsZGVyT2JqZWN0SWQuUXVlc3Rpb25PcHRpb25JRDtcbiAgcmVhZG9ubHkgdmFsdWU6IG51bWJlcjtcbiAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZztcbiAgcmVhZG9ubHkgbGFiZWxBdWRpbz86IEF1ZGlvRmlsZTtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJPcHRpb24gZXh0ZW5kcyBCdWlsZGVyT2JqZWN0PFwiYnVpbGRlci1xdWVzdGlvbi1vcHRpb25cIiwgQnVpbGRlck9wdGlvbkR0bz4ge1xuICByZWFkb25seSBvYmplY3RUeXBlID0gXCJidWlsZGVyLXF1ZXN0aW9uLW9wdGlvblwiO1xuICB0aGVtZTogQnVpbGRlck9wdGlvblRoZW1lID0gRGVmYXVsdFRoZW1lLnJlc3BvbnNlQnV0dG9ucztcblxuICBpZDogQnVpbGRlck9iamVjdElkLlF1ZXN0aW9uT3B0aW9uSUQ7XG4gIHZhbHVlOiBudW1iZXI7XG4gIGxhYmVsID0gXCJcIjtcbiAgcHJpdmF0ZSBfbGFiZWxBdWRpb0ZpbGU6IEF1ZGlvRmlsZSB8IGZhbHNlID0gZmFsc2U7XG4gIGdldCBsYWJlbEF1ZGlvRmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbGFiZWxBdWRpb0ZpbGU7XG4gIH1cbiAgc2V0IGxhYmVsQXVkaW9GaWxlKGF1ZGlvRmlsZTogQXVkaW9GaWxlIHwgZmFsc2UpIHtcbiAgICB0aGlzLl9sYWJlbEF1ZGlvRmlsZSA9IGF1ZGlvRmlsZTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoZHRvOiBCdWlsZGVyT3B0aW9uRHRvKSB7XG4gICAgc3VwZXIoZHRvKTtcbiAgICB0aGlzLmlkID0gZHRvLmlkO1xuICAgIHRoaXMudmFsdWUgPSBkdG8udmFsdWU7XG4gICAgdGhpcy5sYWJlbCA9IGR0by5sYWJlbDtcbiAgICAvLyB0aGlzLnRoZW1lID0gZHRvLnRoZW1lO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlKHZhbHVlOiBudW1iZXIsIGxhYmVsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpZCA9IEJ1aWxkZXJPYmplY3RJZC5xdWVzdGlvbk9wdGlvbklkKCk7XG4gICAgY29uc3QgZHRvOiBCdWlsZGVyT3B0aW9uRHRvID0ge1xuICAgICAgaWQsXG4gICAgICB2YWx1ZSxcbiAgICAgIGxhYmVsLFxuICAgIH07XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQnVpbGRlck9wdGlvbihkdG8pO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUpzb24oZHRvOiBCdWlsZGVyT3B0aW9uRHRvKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQnVpbGRlck9wdGlvbihkdG8pO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIHRvSnNvbigpOiBCdWlsZGVyT3B0aW9uRHRvIHtcbiAgICBjb25zdCBkdG86IEJ1aWxkZXJPcHRpb25EdG8gPSB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgbGFiZWw6IHRoaXMubGFiZWwsXG4gICAgfTtcbiAgICByZXR1cm4gZHRvO1xuICB9XG5cbiAgY2xvbmUoKTogQnVpbGRlck9wdGlvbkR0byB7XG4gICAgY29uc3QgY2xvbmVJZCA9IEJ1aWxkZXJPYmplY3RJZC5xdWVzdGlvbk9wdGlvbklkKCk7XG4gICAgY29uc3QgZHRvID0gdGhpcy50b0pzb24oKTtcbiAgICBjb25zdCBjbG9uZUR0bzogQnVpbGRlck9wdGlvbkR0byA9IHsgLi4uZHRvLCBpZDogY2xvbmVJZCB9O1xuICAgIHJldHVybiBjbG9uZUR0bztcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQnVpbGRlck9wdGlvbkR0byB9IGZyb20gXCIuL0J1aWxkZXItb3B0aW9uXCI7XG5pbXBvcnQgeyBCdWlsZGVyT3B0aW9uIH0gZnJvbSBcIi4vQnVpbGRlci1vcHRpb25cIjtcbmltcG9ydCB7IEJ1aWxkZXJPYmplY3QsIEJ1aWxkZXJPYmplY3RJZCB9IGZyb20gXCIuL0J1aWxkZXJPYmplY3RcIjtcblxuZXhwb3J0IHR5cGUgQnVpbGRlclF1ZXN0aW9uVHlwZSA9XG4gICAgfCBcInNlbGVjdC1vbmVcIlxuICAgIHwgXCJzZWxlY3QtbWFueVwiXG4gICAgfCBcInRleHRcIlxuICAgIHwgXCJjb2xvclwiXG4gICAgfCBcInJhZGlvXCJcbiAgICB8IFwiZW1haWxcIlxuICAgIHwgXCJ0aW1lXCJcbiAgICB8IFwiY2hlY2tib3hcIlxuICAgIHwgXCJ0ZXh0YXJlYVwiXG4gICAgfCBcImRhdGVcIlxuICAgIHwgXCJudW1lcmljLXJhbmdlXCJcbiAgICB8IFwiZHVyYXRpb25cIjtcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZGVyUXVlc3Rpb25EdG8ge1xuICAgIHJlYWRvbmx5IGlkOiBCdWlsZGVyT2JqZWN0SWQuUXVlc3Rpb25JRDtcbiAgICBfdHlwZTogQnVpbGRlclF1ZXN0aW9uVHlwZTtcbiAgICB0ZXh0OiBzdHJpbmc7XG4gICAgb3B0aW9uczogUmVhZG9ubHlBcnJheTxCdWlsZGVyT3B0aW9uRHRvPjtcbiAgICBwcmVmaXg6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJRdWVzdGlvbiBleHRlbmRzIEJ1aWxkZXJPYmplY3Q8XCJidWlsZGVyLXF1ZXN0aW9uXCIsIEJ1aWxkZXJRdWVzdGlvbkR0bz4ge1xuICAgIHJlYWRvbmx5IG9iamVjdFR5cGUgPSBcImJ1aWxkZXItcXVlc3Rpb25cIjtcbiAgICBpZDogQnVpbGRlck9iamVjdElkLlF1ZXN0aW9uSUQ7XG4gICAgdHlwZTogQnVpbGRlclF1ZXN0aW9uVHlwZTtcbiAgICBxdWVzdGlvblRleHQgPSBcIlwiO1xuICAgIG9wdGlvbnM6IEJ1aWxkZXJPcHRpb25bXSA9IFtdO1xuICAgIHByZWZpeCA9IFwiXCI7XG5cbiAgICBzdGF0aWMgY3JlYXRlID0gKHR5cGU6IEJ1aWxkZXJRdWVzdGlvblR5cGUpID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSBCdWlsZGVyT2JqZWN0SWQucXVlc3Rpb25JZCgpO1xuXG4gICAgICAgIHJldHVybiBuZXcgQnVpbGRlclF1ZXN0aW9uKHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgX3R5cGU6IHR5cGUsXG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgICBwcmVmaXg6IFwiXCIsXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21Kc29uKGR0bzogQnVpbGRlclF1ZXN0aW9uRHRvKTogQnVpbGRlclF1ZXN0aW9uIHtcbiAgICAgICAgY29uc3QgcXVlc3Rpb24gPSBuZXcgQnVpbGRlclF1ZXN0aW9uKGR0byk7XG4gICAgICAgIHJldHVybiBxdWVzdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGR0bzogQnVpbGRlclF1ZXN0aW9uRHRvKSB7XG4gICAgICAgIHN1cGVyKGR0byk7XG4gICAgICAgIHRoaXMuaWQgPSBkdG8uaWQgYXMgQnVpbGRlck9iamVjdElkLlF1ZXN0aW9uSUQ7XG4gICAgICAgIHRoaXMudHlwZSA9IGR0by5fdHlwZTtcbiAgICAgICAgdGhpcy5xdWVzdGlvblRleHQgPSBkdG8udGV4dDtcbiAgICAgICAgdGhpcy5wcmVmaXggPSBkdG8ucHJlZml4O1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBkdG8ub3B0aW9ucy5tYXAoKG8pID0+IEJ1aWxkZXJPcHRpb24uZnJvbUpzb24obykpO1xuICAgIH1cblxuICAgIGFkZE9wdGlvbihsYWJlbDogc3RyaW5nLCB2YWx1ZTogbnVtYmVyLCBhdEluZGV4ID0gLTEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gQnVpbGRlck9wdGlvbi5jcmVhdGUodmFsdWUsIGxhYmVsKTtcbiAgICAgICAgaWYgKGF0SW5kZXggPj0gMCAmJiBhdEluZGV4IDwgdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNwbGljZShhdEluZGV4LCAwLCBvcHRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cblxuICAgIGRlbGV0ZU9wdGlvbihvcHRpb246IEJ1aWxkZXJPcHRpb24pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKChvKSA9PiBvLmlkICE9PSBvcHRpb24uaWQpO1xuICAgICAgICBjb25zdCBkaWREZWxldGUgPSBmaWx0ZXJlZC5sZW5ndGggPT09IHRoaXMub3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBmaWx0ZXJlZDtcbiAgICAgICAgcmV0dXJuIGRpZERlbGV0ZTtcbiAgICB9XG5cbiAgICB0b0pzb24oKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNKc29uID0gdGhpcy5vcHRpb25zLm1hcCgobykgPT4gby50b0pzb24oKSk7XG4gICAgICAgIGNvbnN0IGR0bzogQnVpbGRlclF1ZXN0aW9uRHRvID0ge1xuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICBwcmVmaXg6IHRoaXMucHJlZml4LFxuICAgICAgICAgICAgX3R5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHRleHQ6IHRoaXMucXVlc3Rpb25UZXh0LFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc0pzb24sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBkdG87XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQnVpbGRlclF1ZXN0aW9uRHRvIHtcbiAgICAgICAgY29uc3QgY2xvbmVJZCA9IEJ1aWxkZXJPYmplY3RJZC5xdWVzdGlvbklkKCk7XG4gICAgICAgIGNvbnN0IGR0byA9IHRoaXMudG9Kc29uKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNDbG9uZSA9IHRoaXMub3B0aW9ucy5tYXAoKG8pID0+IG8uY2xvbmUoKSk7XG4gICAgICAgIGNvbnN0IGNsb25lZER0bzogQnVpbGRlclF1ZXN0aW9uRHRvID0ge1xuICAgICAgICAgICAgLi4uZHRvLFxuICAgICAgICAgICAgaWQ6IGNsb25lSWQsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zQ2xvbmUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjbG9uZWREdG87XG4gICAgfVxufVxuIiwgImltcG9ydCB7IEJ1aWxkZXJPYmplY3QgfSBmcm9tIFwiLi9CdWlsZGVyT2JqZWN0XCI7XG5pbXBvcnQgeyBBdWRpb0ZpbGUgfSBmcm9tIFwiLi9tZWRpYS1maWxlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJNYWluVGV4dER0byB7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIGF1ZGlvRmlsZTogQXVkaW9GaWxlIHwgZmFsc2U7XG4gICAgYXV0b3BsYXk6IGJvb2xlYW47XG4gICAgYXV0b3BsYXlEZWxheTogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgQnVpbGRlck1haW5UZXh0IGV4dGVuZHMgQnVpbGRlck9iamVjdDxcImJ1aWxkZXItbWFpbi10ZXh0XCIsIEJ1aWxkZXJNYWluVGV4dER0bz4ge1xuICAgIHJlYWRvbmx5IG9iamVjdFR5cGU6IFwiYnVpbGRlci1tYWluLXRleHRcIiA9IFwiYnVpbGRlci1tYWluLXRleHRcIjtcbiAgICBhdXRvcGxheSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2F1ZGlvRmlsZTogQXVkaW9GaWxlIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBhdXRvcGxheURlbGF5ID0gMDtcblxuICAgIHRleHQgPSBcIlwiO1xuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihkdG86IEJ1aWxkZXJNYWluVGV4dER0bykge1xuICAgICAgICBzdXBlcihkdG8pO1xuICAgICAgICB0aGlzLl9hdWRpb0ZpbGUgPSBkdG8uYXVkaW9GaWxlID8/IGZhbHNlO1xuICAgICAgICB0aGlzLmF1dG9wbGF5ID0gZHRvLmF1dG9wbGF5ID8/IGZhbHNlO1xuICAgICAgICB0aGlzLmF1dG9wbGF5RGVsYXkgPSBkdG8uYXV0b3BsYXlEZWxheSA/PyAwO1xuICAgICAgICB0aGlzLnRleHQgPSBkdG8udGV4dCA/PyBcIlwiO1xuICAgIH1cblxuICAgIGdldCBhdXRvcGxheURlbGF5SW5TZWNvbmRzKCkge1xuICAgICAgICBjb25zdCBkZWxheSA9IHRoaXMuYXV0b3BsYXlEZWxheTtcbiAgICAgICAgY29uc3QgcyA9IGRlbGF5IC8gMTAwMDtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gcy50b0ZpeGVkKDEpO1xuICAgICAgICByZXR1cm4gZm9ybWF0dGVkO1xuICAgIH1cblxuICAgIGdldCBkdXJhdGlvblRhZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmF1ZGlvRmlsZSkgcmV0dXJuIFwiXCI7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuYXVkaW9GaWxlLmR1cmF0aW9uKTtcbiAgICAgICAgY29uc3QgZHVyID0gdGhpcy5hdWRpb0ZpbGUuZHVyYXRpb24udG9GaXhlZCgxKTtcbiAgICAgICAgcmV0dXJuIFwiZHVyIFwiICsgZHVyICsgXCIgc1wiO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSnNvbihkdG86IEJ1aWxkZXJNYWluVGV4dER0byk6IEJ1aWxkZXJNYWluVGV4dCB7XG4gICAgICAgIGNvbnN0IG1haW5UZXh0ID0gbmV3IEJ1aWxkZXJNYWluVGV4dChkdG8pO1xuICAgICAgICByZXR1cm4gbWFpblRleHQ7XG4gICAgfVxuXG4gICAgc3RhdGljIGNyZWF0ZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZHRvOiBCdWlsZGVyTWFpblRleHREdG8gPSB7XG4gICAgICAgICAgICBhdXRvcGxheTogZmFsc2UsXG4gICAgICAgICAgICBhdXRvcGxheURlbGF5OiAwLFxuICAgICAgICAgICAgYXVkaW9GaWxlOiBmYWxzZSxcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXcgQnVpbGRlck1haW5UZXh0KGR0byk7XG4gICAgfTtcblxuICAgIGNsb25lKCk6IEJ1aWxkZXJNYWluVGV4dER0byB7XG4gICAgICAgIGNvbnN0IGR0byA9IHRoaXMudG9Kc29uKCk7XG4gICAgICAgIGNvbnN0IGNsb25lID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkdG8pKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHRvSnNvbigpOiBCdWlsZGVyTWFpblRleHREdG8ge1xuICAgICAgICBjb25zdCBkdG86IEJ1aWxkZXJNYWluVGV4dER0byA9IHtcbiAgICAgICAgICAgIHRleHQ6IHRoaXMudGV4dCxcbiAgICAgICAgICAgIGF1ZGlvRmlsZTogdGhpcy5hdWRpb0ZpbGUsXG4gICAgICAgICAgICBhdXRvcGxheTogdGhpcy5hdXRvcGxheSxcbiAgICAgICAgICAgIGF1dG9wbGF5RGVsYXk6IHRoaXMuYXV0b3BsYXlEZWxheSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGR0bztcbiAgICB9XG4gICAgZ2V0IGF1ZGlvRmlsZSgpOiBBdWRpb0ZpbGUgfCBmYWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdWRpb0ZpbGU7XG4gICAgfVxuICAgIHNldCBhdWRpb0ZpbGUoYXVkaW9GaWxlOiBBdWRpb0ZpbGUgfCBmYWxzZSkge1xuICAgICAgICBpZiAoYXVkaW9GaWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5hdXRvcGxheURlbGF5ID0gMDtcbiAgICAgICAgICAgIHRoaXMuYXV0b3BsYXkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hdWRpb0ZpbGUgPSBhdWRpb0ZpbGU7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IFBhZ2VQcmVmaXggfSBmcm9tIFwiLi4vcHJpbWl0aXZlcy9wYWdlLXByZWZpeFwiO1xuaW1wb3J0IHsgVmFySUQgfSBmcm9tIFwiLi4vcHJpbWl0aXZlcy92YXJJRFwiO1xuaW1wb3J0IHsgU2NoZW1hUHJlZml4IH0gZnJvbSBcIi4uL3ByaW1pdGl2ZXMvc2NoZW1hLXByZWZpeFwiO1xuXG5jb25zdCBCdWlsZGVyVmFyaWFibGVUeXBlID0ge1xuICBudW1lcmljV2l0aE9wdGlvbnM6IHRydWUsXG4gIG51bWVyaWM6IHRydWUsXG4gIG51bWVyaWNSYW5nZTogdHJ1ZSxcbiAgdGV4dDogdHJ1ZSxcbiAgZGF0ZTogdHJ1ZSxcbiAgZGF0ZVJhbmdlOiB0cnVlLFxuICB0aW1lOiB0cnVlLFxuICBkdXJhdGlvbjogdHJ1ZSxcbiAgYm9vbGVhbjogdHJ1ZSxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEJ1aWxkZXJWYXJpYWJsZVR5cGUgPSBrZXlvZiB0eXBlb2YgQnVpbGRlclZhcmlhYmxlVHlwZTtcblxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJWYXJpYWJsZU9wdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IGxhYmVsOiBzdHJpbmcsXG4gICAgcmVhZG9ubHkgdmFsdWU6IG51bWJlcixcbiAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25WYXJpYWJsZSB7XG4gIHJlYWRvbmx5IGtpbmQ6IFwicXVlc3Rpb24tdmFyaWFibGVcIiA9IFwicXVlc3Rpb24tdmFyaWFibGVcIjtcbiAgcmVhZG9ubHkgZGF0YVR5cGU6IEJ1aWxkZXJWYXJpYWJsZVR5cGUgPSBcIm51bWVyaWNXaXRoT3B0aW9uc1wiO1xuICBjb25zdHJ1Y3RvcihcbiAgICAvLyBwcml2YXRlIHNjaGVtYVByZWZpeDogU2NoZW1hUHJlZml4LFxuICAgIC8vIHByaXZhdGUgcGFnZVByZWZpeDogUGFnZVByZWZpeCxcbiAgICByZWFkb25seSB2YXJJZDogVmFySUQsXG4gICAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZyxcbiAgICByZWFkb25seSBvcHRpb25zOiBSZWFkb25seUFycmF5PEJ1aWxkZXJWYXJpYWJsZU9wdGlvbj4sXG4gICAgcmVhZG9ubHkgcGFnZU51bWJlcjogbnVtYmVyLFxuICApIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBDdXN0b21WYXJpYWJsZSB7XG4gIHJlYWRvbmx5IGtpbmQ6IFwiY29uZmlndXJhdGlvbi12YXJpYWJsZVwiID0gXCJjb25maWd1cmF0aW9uLXZhcmlhYmxlXCI7XG4gIHJlYWRvbmx5IGRhdGFUeXBlOiBCdWlsZGVyVmFyaWFibGVUeXBlID0gXCJudW1lcmljV2l0aE9wdGlvbnNcIjtcbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgdmFySWQ6IFZhcklELFxuICAgIHJlYWRvbmx5IGxhYmVsOiBzdHJpbmcsXG4gICAgcmVhZG9ubHkgb3B0aW9uczogUmVhZG9ubHlBcnJheTxCdWlsZGVyVmFyaWFibGVPcHRpb24+LFxuICApIHt9XG59XG5cbmV4cG9ydCB0eXBlIEJ1aWxkZXJWYXJpYWJsZSA9IFF1ZXN0aW9uVmFyaWFibGUgfCBDdXN0b21WYXJpYWJsZTtcbiIsICJpbXBvcnQgdHlwZSB7IEJ1aWxkZXJRdWVzdGlvbkR0bywgQnVpbGRlclF1ZXN0aW9uVHlwZSB9IGZyb20gXCIuL0J1aWxkZXItcXVlc3Rpb25cIjtcbmltcG9ydCB7IEJ1aWxkZXJRdWVzdGlvbiB9IGZyb20gXCIuL0J1aWxkZXItcXVlc3Rpb25cIjtcbmltcG9ydCB7IEJ1aWxkZXJPYmplY3QgfSBmcm9tIFwiLi9CdWlsZGVyT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJPcHRpb25EdG8gfSBmcm9tIFwiLi9CdWlsZGVyLW9wdGlvblwiO1xuaW1wb3J0IHsgQnVpbGRlck9wdGlvbiB9IGZyb20gXCIuL0J1aWxkZXItb3B0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJNYWluVmlkZW9EdG8gfSBmcm9tIFwiLi9CdWlsZGVyTWFpblZpZGVvRHRvXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJNYWluSW1hZ2VEdG8gfSBmcm9tIFwiLi9CdWlsZGVyTWFpbkltYWdlRHRvXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJNYWluVGV4dER0byB9IGZyb20gXCIuL0J1aWxkZXJNYWluVGV4dFwiO1xuaW1wb3J0IHsgQnVpbGRlck1haW5UZXh0IH0gZnJvbSBcIi4vQnVpbGRlck1haW5UZXh0XCI7XG5pbXBvcnQgeyBCdWlsZGVyVmFyaWFibGVPcHRpb24sIFF1ZXN0aW9uVmFyaWFibGUgfSBmcm9tIFwiLi9ydWxlYnVpbGRlci9SdWxlVmFyaWFibGVcIjtcbmltcG9ydCB7IERVdGlsLCBQYWdlSUQgfSBmcm9tIFwiQG1lZGlhLXF1ZXN0L2VuZ2luZVwiO1xuaW1wb3J0IHsgUGFnZVByZWZpeCwgUGFnZVByZWZpeFZhbHVlIH0gZnJvbSBcIi4vcHJpbWl0aXZlcy9wYWdlLXByZWZpeFwiO1xuaW1wb3J0IHsgVmFySUQgfSBmcm9tIFwiLi9wcmltaXRpdmVzL3ZhcklEXCI7XG5pbXBvcnQgeyBTY2hlbWFQcmVmaXgsIFNjaGVtYVByZWZpeFZhbHVlIH0gZnJvbSBcIi4vcHJpbWl0aXZlcy9zY2hlbWEtcHJlZml4XCI7XG5cbmNvbnN0IFUgPSBEVXRpbDtcbmV4cG9ydCB0eXBlIEJ1aWxkZXJQYWdlVHlwZSA9IFwiaW5mby1wYWdlXCIgfCBcInF1ZXN0aW9uXCIgfCBcIm11bHRpLXNlbGVjdFwiIHwgXCJmb3JtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlclBhZ2VEdG8ge1xuICByZWFkb25seSBpZDogUGFnZUlEO1xuICByZWFkb25seSBwcmVmaXg6IFBhZ2VQcmVmaXhWYWx1ZTtcbiAgX3R5cGU6IEJ1aWxkZXJQYWdlVHlwZTtcbiAgbWFpblRleHQ6IEJ1aWxkZXJNYWluVGV4dER0bztcbiAgbmV4dEJ1dHRvbjogQnVpbGRlck9wdGlvbkR0bztcbiAgZGVmYXVsdFF1ZXN0aW9uOiBCdWlsZGVyUXVlc3Rpb25EdG87XG4gIHF1ZXN0aW9uczogQXJyYXk8QnVpbGRlclF1ZXN0aW9uRHRvPjtcbiAgbWFpbk1lZGlhPzogQnVpbGRlck1haW5JbWFnZUR0byB8IEJ1aWxkZXJNYWluVmlkZW9EdG87XG4gIGF1dG9wbGF5U2VxdWVuY2U6IEFycmF5PHN0cmluZz47XG4gIHRhZ3M6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPjtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJQYWdlIGV4dGVuZHMgQnVpbGRlck9iamVjdDxcImJ1aWxkZXItcGFnZVwiLCBCdWlsZGVyUGFnZUR0bz4ge1xuICByZWFkb25seSBvYmplY3RUeXBlOiBcImJ1aWxkZXItcGFnZVwiID0gXCJidWlsZGVyLXBhZ2VcIjtcbiAgcmVhZG9ubHkgaWQ6IFBhZ2VJRDtcbiAgcHJpdmF0ZSBfcGFnZVR5cGU6IEJ1aWxkZXJQYWdlVHlwZTtcbiAgcHJpdmF0ZSBfcHJlZml4OiBQYWdlUHJlZml4O1xuICBwcml2YXRlIF9xdWVzdGlvbnM6IEFycmF5PEJ1aWxkZXJRdWVzdGlvbj4gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGFnczogU2V0PHN0cmluZz47XG4gIHByaXZhdGUgX2JhY2tncm91bmRDb2xvciA9IFwiI0ZGRkZGRlwiO1xuICBtYWluTWVkaWE6IEJ1aWxkZXJNYWluVmlkZW9EdG8gfCBCdWlsZGVyTWFpbkltYWdlRHRvIHwgZmFsc2UgPSBmYWxzZTtcbiAgZGVmYXVsdFF1ZXN0aW9uOiBCdWlsZGVyUXVlc3Rpb247XG4gIG1haW5UZXh0OiBCdWlsZGVyTWFpblRleHQ7XG4gIG5leHRCdXR0b24gPSBCdWlsZGVyT3B0aW9uLmNyZWF0ZSgtMSwgXCJOZXN0ZVwiKTtcblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZSh0eXBlOiBCdWlsZGVyUGFnZVR5cGUsIF9wcmVmaXg6IFBhZ2VQcmVmaXhWYWx1ZSkge1xuICAgIGNvbnN0IGlkID0gUGFnZUlELmNyZWF0ZSgpO1xuICAgIGNvbnN0IG1haW5UZXh0RHRvOiBCdWlsZGVyTWFpblRleHREdG8gPSB7XG4gICAgICB0ZXh0OiBcIlwiLFxuICAgICAgYXVkaW9GaWxlOiBmYWxzZSxcbiAgICAgIGF1dG9wbGF5OiBmYWxzZSxcbiAgICAgIGF1dG9wbGF5RGVsYXk6IDAsXG4gICAgfTtcbiAgICBjb25zdCBuZXh0QnV0dG9uRHRvID0gQnVpbGRlck9wdGlvbi5jcmVhdGUoLTEsIFwicGFnZS1uZXh0LWJ1dHRvbi10ZXh0XCIpLnRvSnNvbigpO1xuICAgIGNvbnN0IGRlZmF1bHRRdWVzdGlvbkR0byA9IEJ1aWxkZXJRdWVzdGlvbi5jcmVhdGUoXCJzZWxlY3Qtb25lXCIpLnRvSnNvbigpO1xuXG4gICAgY29uc3QgZHRvOiBCdWlsZGVyUGFnZUR0byA9IHtcbiAgICAgIF90eXBlOiB0eXBlLFxuICAgICAgYXV0b3BsYXlTZXF1ZW5jZTogW10sXG4gICAgICBkZWZhdWx0UXVlc3Rpb246IGRlZmF1bHRRdWVzdGlvbkR0byxcbiAgICAgIGlkLFxuICAgICAgbmV4dEJ1dHRvbjogbmV4dEJ1dHRvbkR0byxcbiAgICAgIG1haW5UZXh0OiBtYWluVGV4dER0byxcbiAgICAgIHByZWZpeDogX3ByZWZpeCxcbiAgICAgIHF1ZXN0aW9uczogW10sXG4gICAgICB0YWdzOiBbXSxcbiAgICB9O1xuXG4gICAgY29uc3QgcGFnZSA9IG5ldyBCdWlsZGVyUGFnZShkdG8pO1xuICAgIHJldHVybiBwYWdlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZnJvbUpzb24oZHRvOiBCdWlsZGVyUGFnZUR0byk6IEJ1aWxkZXJQYWdlIHtcbiAgICBjb25zdCBwYWdlID0gbmV3IEJ1aWxkZXJQYWdlKGR0byk7XG4gICAgcmV0dXJuIHBhZ2U7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGR0bzogQnVpbGRlclBhZ2VEdG8pIHtcbiAgICBzdXBlcihkdG8pO1xuICAgIHRoaXMuaWQgPSBkdG8uaWQ7XG4gICAgdGhpcy5fcGFnZVR5cGUgPSBkdG8uX3R5cGU7XG4gICAgY29uc3QgcHJlZml4SW5zdGFuY2UgPSBQYWdlUHJlZml4LmNhc3RPckNyZWF0ZVJhbmRvbShkdG8ucHJlZml4KTtcbiAgICB0aGlzLl9wcmVmaXggPSBwcmVmaXhJbnN0YW5jZTtcbiAgICB0aGlzLm1haW5UZXh0ID0gQnVpbGRlck1haW5UZXh0LmZyb21Kc29uKGR0by5tYWluVGV4dCk7XG4gICAgdGhpcy5uZXh0QnV0dG9uID0gQnVpbGRlck9wdGlvbi5mcm9tSnNvbihkdG8ubmV4dEJ1dHRvbik7XG4gICAgdGhpcy5kZWZhdWx0UXVlc3Rpb24gPSBCdWlsZGVyUXVlc3Rpb24uZnJvbUpzb24oZHRvLmRlZmF1bHRRdWVzdGlvbik7XG4gICAgdGhpcy5fcXVlc3Rpb25zID0gZHRvLnF1ZXN0aW9ucy5tYXAoKHEpID0+IEJ1aWxkZXJRdWVzdGlvbi5mcm9tSnNvbihxKSk7XG4gICAgY29uc3QgdGFnTGlzdDogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KGR0by50YWdzKSA/IGR0by50YWdzIDogW107XG4gICAgdGhpcy5fdGFncyA9IG5ldyBTZXQodGFnTGlzdCk7XG4gICAgaWYgKGR0by5tYWluTWVkaWEpIHtcbiAgICAgIHRoaXMubWFpbk1lZGlhID0gZHRvLm1haW5NZWRpYTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVSb3dzKCk7XG4gIH1cblxuICBpbnNlcnRRdWVzdGlvbihxdWVzdGlvbjogQnVpbGRlclF1ZXN0aW9uLCBhdEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWxpZEluZGV4Rm4gPSBVLmlzSW5SYW5nZSgwLCB0aGlzLl9xdWVzdGlvbnMubGVuZ3RoKTtcbiAgICBpZiAoIXZhbGlkSW5kZXhGbihhdEluZGV4KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBoYXNRdWVzdGlvbiA9ICEhdGhpcy5fcXVlc3Rpb25zLmZpbmQoKHEpID0+IHEuaWQgPT09IHF1ZXN0aW9uLmlkKTtcbiAgICBpZiAoaGFzUXVlc3Rpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5fcXVlc3Rpb25zLnNwbGljZShhdEluZGV4LCAwLCBxdWVzdGlvbik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhZGRRdWVzdGlvbih0eXBlOiBCdWlsZGVyUXVlc3Rpb25UeXBlLCBhdEluZGV4ID0gLTEpOiBCdWlsZGVyUXVlc3Rpb24ge1xuICAgIGNvbnN0IHF1ZXN0aW9uID0gQnVpbGRlclF1ZXN0aW9uLmNyZWF0ZSh0eXBlKTtcbiAgICBpZiAoYXRJbmRleCA8IHRoaXMuX3F1ZXN0aW9ucy5sZW5ndGggJiYgYXRJbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLl9xdWVzdGlvbnMuc3BsaWNlKGF0SW5kZXgsIDAsIHF1ZXN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcXVlc3Rpb25zLnB1c2gocXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gcXVlc3Rpb247XG4gIH1cblxuICAvKipcbiAgICogTW92ZSBhIHF1ZXN0aW9uIGluIHF1ZXN0aW9ucy1hcnJheVxuICAgKiBAcGFyYW0gcXVlc3Rpb24gKHJlZmVyZW5jZSlcbiAgICogQHBhcmFtIHRvSW5kZXhcbiAgICovXG4gIG1vdmVRdWVzdGlvbihxdWVzdGlvbjogQnVpbGRlclF1ZXN0aW9uLCB0b0luZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWxpZFRvSW5kZXhGbiA9IFUuaXNJblJhbmdlKDAsIHRoaXMuX3F1ZXN0aW9ucy5sZW5ndGgpO1xuICAgIGlmICghdmFsaWRUb0luZGV4Rm4odG9JbmRleCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5fcXVlc3Rpb25zLmluZGV4T2YocXVlc3Rpb24pO1xuICAgIGlmIChjdXJyZW50SW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX3F1ZXN0aW9ucy5zcGxpY2UoY3VycmVudEluZGV4LCAxKTtcbiAgICB0aGlzLl9xdWVzdGlvbnMuc3BsaWNlKHRvSW5kZXgsIDAsIHF1ZXN0aW9uKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGRlbGV0ZVF1ZXN0aW9uKHF1ZXN0aW9uOiBCdWlsZGVyUXVlc3Rpb24pIHtcbiAgICB0aGlzLl9xdWVzdGlvbnMgPSB0aGlzLl9xdWVzdGlvbnMuZmlsdGVyKChxKSA9PiBxICE9PSBxdWVzdGlvbik7XG4gICAgLy8gVE9ETyBFTUlUIERFTEVURUQgUVVFU1RJT04uXG4gICAgdGhpcy51cGRhdGVSb3dzKCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVSb3dzKCkge1xuICAgIGlmICh0aGlzLl9wYWdlVHlwZSA9PT0gXCJxdWVzdGlvblwiIHx8IHRoaXMuX3BhZ2VUeXBlID09PSBcImluZm8tcGFnZVwiKSB7XG4gICAgICB0aGlzLl9xdWVzdGlvbnMgPSBbXTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3BhZ2VUeXBlID09PSBcImZvcm1cIiAmJiB0aGlzLl9xdWVzdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLl9xdWVzdGlvbnMgPSBbXTtcbiAgICAgIHRoaXMuYWRkUXVlc3Rpb24oXCJ0ZXh0XCIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fcGFnZVR5cGUgPT09IFwibXVsdGktc2VsZWN0XCIgJiYgdGhpcy5fcXVlc3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5fcXVlc3Rpb25zID0gW107XG4gICAgICB0aGlzLmFkZFF1ZXN0aW9uKFwidGV4dFwiKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkVGFnKHRhZzogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGFncy5hZGQodGFnKTtcbiAgfVxuICBwdWJsaWMgZGVsZXRlVGFnKHRhZzogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGFncy5kZWxldGUodGFnKTtcbiAgfVxuXG4gIHNldCBwYWdlVHlwZSh2YWx1ZTogQnVpbGRlclBhZ2VUeXBlKSB7XG4gICAgdGhpcy5fcGFnZVR5cGUgPSB2YWx1ZTtcbiAgICAvLyBUT0RPIEVtaXQgQWxsIHF1ZXN0aW9ucyB0aGF0IGFyZSBkZWxldGVkPyBMaXN0ZW4gZm9yIHJlbW92ZWQgdmFyaWFibGVzPz9cbiAgICB0aGlzLnVwZGF0ZVJvd3MoKTtcbiAgfVxuXG4gIGdldFF1ZXN0aW9uVmFyaWFibGVzKG1vZHVsZVByZWZpeDogU2NoZW1hUHJlZml4LCBwYWdlTnVtYmVyOiBudW1iZXIpOiBSZWFkb25seUFycmF5PFF1ZXN0aW9uVmFyaWFibGU+IHtcbiAgICBjb25zdCB2YXJpYWJsZXM6IFF1ZXN0aW9uVmFyaWFibGVbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMuX3BhZ2VUeXBlID09PSBcInF1ZXN0aW9uXCIpIHtcbiAgICAgIGNvbnN0IHBhZ2VQcmVmaXggPSB0aGlzLnByZWZpeDtcbiAgICAgIGNvbnN0IHZhcklkID0gVmFySUQuY3JlYXRlKG1vZHVsZVByZWZpeC52YWx1ZSwgcGFnZVByZWZpeCk7XG4gICAgICBjb25zdCBsYWJlbCA9IHRoaXMubWFpblRleHQudGV4dDtcbiAgICAgIGNvbnN0IG9wID0gdGhpcy5kZWZhdWx0UXVlc3Rpb24ub3B0aW9ucy5tYXAoKG8pID0+IHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBvLmxhYmVsO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG8udmFsdWU7XG4gICAgICAgIHJldHVybiBuZXcgQnVpbGRlclZhcmlhYmxlT3B0aW9uKGxhYmVsLCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNpbmdsZVZhciA9IG5ldyBRdWVzdGlvblZhcmlhYmxlKHZhcklkLCBsYWJlbCwgb3AsIHBhZ2VOdW1iZXIpO1xuICAgICAgdmFyaWFibGVzLnB1c2goc2luZ2xlVmFyKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhcmlhYmxlcztcbiAgfVxuXG4gIGdldCB0YWdzKCk6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl90YWdzXTtcbiAgfVxuICBnZXQgcGFnZVR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VUeXBlO1xuICB9XG5cbiAgZ2V0IHByZWZpeCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJlZml4LnZhbHVlO1xuICB9XG5cbiAgc2V0IHByZWZpeCh2YWx1ZTogUGFnZVByZWZpeFZhbHVlKSB7XG4gICAgdGhpcy5fcHJlZml4LnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICB0b0pzb24oKTogQnVpbGRlclBhZ2VEdG8ge1xuICAgIGNvbnN0IHF1ZXN0aW9ucyA9IHRoaXMuX3F1ZXN0aW9ucy5tYXAoKHEpID0+IHEudG9Kc29uKCkpO1xuICAgIGNvbnN0IG1haW5UZXh0ID0gdGhpcy5tYWluVGV4dC50b0pzb24oKTtcbiAgICBjb25zdCBuZXh0QnV0dG9uID0gdGhpcy5uZXh0QnV0dG9uLnRvSnNvbigpO1xuICAgIGNvbnN0IG1haW5NZWRpYSA9IHRoaXMubWFpbk1lZGlhO1xuICAgIGNvbnN0IGR0bzogQnVpbGRlclBhZ2VEdG8gPSB7XG4gICAgICBfdHlwZTogdGhpcy5wYWdlVHlwZSxcbiAgICAgIG1haW5UZXh0LFxuICAgICAgYXV0b3BsYXlTZXF1ZW5jZTogW10sXG4gICAgICBuZXh0QnV0dG9uLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICB0YWdzOiBbLi4udGhpcy50YWdzXSxcbiAgICAgIHByZWZpeDogdGhpcy5fcHJlZml4LnZhbHVlLFxuICAgICAgZGVmYXVsdFF1ZXN0aW9uOiB0aGlzLmRlZmF1bHRRdWVzdGlvbi50b0pzb24oKSxcbiAgICAgIHF1ZXN0aW9ucyxcbiAgICB9O1xuICAgIGlmIChtYWluTWVkaWEpIHtcbiAgICAgIGR0by5tYWluTWVkaWEgPSBtYWluTWVkaWE7XG4gICAgfVxuICAgIHJldHVybiBkdG87XG4gIH1cblxuICBjbG9uZSgpOiBCdWlsZGVyUGFnZUR0byB7XG4gICAgY29uc3QgZHRvID0gdGhpcy50b0pzb24oKTtcbiAgICBjb25zdCBkZWZhdWx0UXVlc3Rpb25DbG9uZSA9IHRoaXMuZGVmYXVsdFF1ZXN0aW9uLmNsb25lKCk7XG4gICAgY29uc3QgbWFpblRleHRDbG9uZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5tYWluVGV4dCkpO1xuICAgIC8vIGNvbnN0IHBhZ2VzQ2xvbmUgPSB0aGlzXG4gICAgY29uc3QgcXVlc3Rpb25zQ2xvbmUgPSB0aGlzLnF1ZXN0aW9ucy5tYXAoKHEpID0+IHEuY2xvbmUoKSk7XG4gICAgY29uc3QgbmV3SWQgPSBQYWdlSUQuY3JlYXRlKCk7XG4gICAgY29uc3QgY2xvbmU6IEJ1aWxkZXJQYWdlRHRvID0ge1xuICAgICAgLi4uZHRvLFxuICAgICAgaWQ6IG5ld0lkLFxuICAgICAgZGVmYXVsdFF1ZXN0aW9uOiBkZWZhdWx0UXVlc3Rpb25DbG9uZSxcbiAgICAgIG1haW5UZXh0OiBtYWluVGV4dENsb25lLFxuICAgICAgcXVlc3Rpb25zOiBxdWVzdGlvbnNDbG9uZSxcbiAgICB9O1xuICAgIC8vIGNvbnN0IGNsb25lRHRvXG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cbiAgZ2V0IGJhY2tncm91bmRDb2xvcigpIHtcbiAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICB9XG5cbiAgc2V0IGJhY2tncm91bmRDb2xvcihjb2xvcjogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gY29sb3I7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHF1ZXN0aW9ucygpOiBSZWFkb25seUFycmF5PEJ1aWxkZXJRdWVzdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9xdWVzdGlvbnM7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVSYW5kb21QcmVmaXggfSBmcm9tIFwiLi9wYWdlLXByZWZpeFwiO1xuXG5leHBvcnQgdHlwZSBTY2hlbWFQcmVmaXhWYWx1ZSA9IHN0cmluZyAmIHsgX19TQ0hFTUFfUFJFRklYX186IHRydWUgfTtcblxuZXhwb3J0IGNsYXNzIFNjaGVtYVByZWZpeCB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUlOX0xFTkdUSCA9IDE7XG4gIHByaXZhdGUgc3RhdGljIHJhbmRvbUxlbiA9IDU7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUFYX0xFTkdUSCA9IDE2O1xuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVZhbHVlID0gKHZhbHVlOiBTY2hlbWFQcmVmaXhWYWx1ZSk6IFNjaGVtYVByZWZpeCA9PiB7XG4gICAgcmV0dXJuIG5ldyBTY2hlbWFQcmVmaXgodmFsdWUpO1xuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVZhbHVlT3JUaHJvdyA9ICh2YWx1ZTogc3RyaW5nKTogU2NoZW1hUHJlZml4ID0+IHtcbiAgICBpZiAoIVNjaGVtYVByZWZpeC5pc1ZhbGlkKHZhbHVlKSkgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBwcmVmaXhcIik7XG4gICAgcmV0dXJuIG5ldyBTY2hlbWFQcmVmaXgodmFsdWUpO1xuICB9O1xuICBwdWJsaWMgc3RhdGljIGZyb21TdHJpbmcgPSAodmFsdWU6IHN0cmluZyk6IFNjaGVtYVByZWZpeCB8IGZhbHNlID0+IHtcbiAgICBpZiAoIVNjaGVtYVByZWZpeC5pc1ZhbGlkKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBuZXcgU2NoZW1hUHJlZml4KHZhbHVlKTtcbiAgfTtcbiAgcHVibGljIHN0YXRpYyBjYXN0T3JDcmVhdGVSYW5kb20gPSAodmFsdWU6IHN0cmluZyk6IFNjaGVtYVByZWZpeCA9PiB7XG4gICAgY29uc3QgdiA9IFNjaGVtYVByZWZpeC5pc1ZhbGlkKHZhbHVlKSA/IHZhbHVlIDogY3JlYXRlUmFuZG9tUHJlZml4PFNjaGVtYVByZWZpeFZhbHVlPihTY2hlbWFQcmVmaXgucmFuZG9tTGVuKTtcbiAgICByZXR1cm4gbmV3IFNjaGVtYVByZWZpeCh2KTtcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIGlzVmFsaWQgPSAocHJlZml4OiBzdHJpbmcgfCA5OTkpOiBwcmVmaXggaXMgU2NoZW1hUHJlZml4VmFsdWUgPT4ge1xuICAgIGlmICh0eXBlb2YgcHJlZml4ICE9PSBcInN0cmluZ1wiKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHByZWZpeC5sZW5ndGggPCBTY2hlbWFQcmVmaXguTUlOX0xFTkdUSCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChwcmVmaXgubGVuZ3RoID4gU2NoZW1hUHJlZml4Lk1BWF9MRU5HVEgpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICB0b0pTT04oKSB7fVxuXG4gIGdldCB2YWx1ZSgpOiBTY2hlbWFQcmVmaXhWYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgZ2V0IGlzVmFsaWQoKSB7XG4gICAgcmV0dXJuIFNjaGVtYVByZWZpeC5pc1ZhbGlkKHRoaXMuX3ZhbHVlKTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgY2FzdGVkID0gdmFsdWUgYXMgdW5rbm93bjtcbiAgICBpZiAodHlwZW9mIGNhc3RlZCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhpcy5fdmFsdWUgPSBjYXN0ZWQgYXMgU2NoZW1hUHJlZml4VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihwcml2YXRlIF92YWx1ZTogU2NoZW1hUHJlZml4VmFsdWUpIHt9XG59XG4iLCAiaW1wb3J0IHsgU2NoZW1hUHJlZml4IH0gZnJvbSBcIi4vc2NoZW1hLXByZWZpeFwiO1xuXG5leHBvcnQgdHlwZSBQYWdlUHJlZml4VmFsdWUgPSBzdHJpbmcgJiB7IF9fUEFHRV9QUkVGSVhfXzogdHJ1ZSB9O1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVJhbmRvbVByZWZpeCA9IDxjb25zdCBQIGV4dGVuZHMgc3RyaW5nPihsZW5ndGg6IG51bWJlcik6IFAgPT4ge1xuICBjb25zdCBsZXR0ZXJzID0gXCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2eXpcIjtcbiAgY29uc3QgYWxsID0gbGV0dGVycyArIGxldHRlcnMudG9VcHBlckNhc2UoKTtcbiAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGFyID0gYWxsLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhbGwubGVuZ3RoKSk7XG4gICAgcmVzdWx0ICs9IGNoYXI7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdCBhcyBQO1xufTtcblxuZXhwb3J0IGNsYXNzIFBhZ2VQcmVmaXgge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1JTl9MRU5HVEggPSAxO1xuICBwcml2YXRlIHN0YXRpYyByYW5kb21MZW4gPSA1O1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BWF9MRU5HVEggPSAxNjtcblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZSA9ICgpOiBQYWdlUHJlZml4ID0+IHtcbiAgICBjb25zdCB2ID0gY3JlYXRlUmFuZG9tUHJlZml4PFBhZ2VQcmVmaXhWYWx1ZT4oUGFnZVByZWZpeC5yYW5kb21MZW4pO1xuICAgIHJldHVybiBuZXcgUGFnZVByZWZpeCh2KTtcbiAgfTtcbiAgcHVibGljIHN0YXRpYyBmcm9tU3RyaW5nID0gKHZhbHVlOiBzdHJpbmcpOiBQYWdlUHJlZml4IHwgZmFsc2UgPT4ge1xuICAgIGlmICghUGFnZVByZWZpeC5pc1ZhbGlkKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBuZXcgUGFnZVByZWZpeCh2YWx1ZSk7XG4gIH07XG5cbiAgcHVibGljIHN0YXRpYyBmcm9tU3RyaW5nT3JUaHJvdyA9ICh2YWx1ZTogc3RyaW5nKTogUGFnZVByZWZpeFZhbHVlID0+IHtcbiAgICBpZiAoIVBhZ2VQcmVmaXguaXNWYWxpZCh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcHJlZml4XCIpO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbiAgcHVibGljIHN0YXRpYyBjYXN0T3JDcmVhdGVSYW5kb20gPSAodmFsdWU6IHN0cmluZyk6IFBhZ2VQcmVmaXggPT4ge1xuICAgIGNvbnN0IHYgPSBQYWdlUHJlZml4LmlzVmFsaWQodmFsdWUpID8gdmFsdWUgOiBjcmVhdGVSYW5kb21QcmVmaXg8UGFnZVByZWZpeFZhbHVlPihQYWdlUHJlZml4LnJhbmRvbUxlbik7XG4gICAgcmV0dXJuIG5ldyBQYWdlUHJlZml4KHYpO1xuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgaXNWYWxpZCA9IChwcmVmaXg6IHN0cmluZyB8IDk5OSk6IHByZWZpeCBpcyBQYWdlUHJlZml4VmFsdWUgPT4ge1xuICAgIGlmICh0eXBlb2YgcHJlZml4ICE9PSBcInN0cmluZ1wiKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHByZWZpeC5sZW5ndGggPCBTY2hlbWFQcmVmaXguTUlOX0xFTkdUSCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChwcmVmaXgubGVuZ3RoID4gU2NoZW1hUHJlZml4Lk1BWF9MRU5HVEgpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBnZXQgdmFsdWUoKTogUGFnZVByZWZpeFZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIGlmICghUGFnZVByZWZpeC5pc1ZhbGlkKHZhbHVlKSkge1xuICAgICAgY29uc29sZS5sb2coXCJJTlZBTElEIFBSRUZJWFwiLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihwcml2YXRlIF92YWx1ZTogUGFnZVByZWZpeFZhbHVlKSB7fVxufVxuIiwgImltcG9ydCB7IFBhZ2VQcmVmaXhWYWx1ZSB9IGZyb20gXCIuL3BhZ2UtcHJlZml4XCI7XG5cbmltcG9ydCB7IFNjaGVtYVByZWZpeFZhbHVlIH0gZnJvbSBcIi4vc2NoZW1hLXByZWZpeFwiO1xuXG5leHBvcnQgdHlwZSBWYXJJRCA9IGAke1NjaGVtYVByZWZpeFZhbHVlfV8ke1BhZ2VQcmVmaXhWYWx1ZX1gO1xuZXhwb3J0IGNvbnN0IFZhcklEID0ge1xuICBjcmVhdGU6IChzY2hlbWFQcmVmaXg6IFNjaGVtYVByZWZpeFZhbHVlLCBwYWdlUHJlZml4OiBQYWdlUHJlZml4VmFsdWUpOiBWYXJJRCA9PiB7XG4gICAgY29uc3QgdmFySWQgPSBzY2hlbWFQcmVmaXggKyBcIl9cIiArIHBhZ2VQcmVmaXg7XG4gICAgcmV0dXJuIHZhcklkIGFzIFZhcklEO1xuICB9LFxufTtcbiIsICJpbXBvcnQgeyBCdWlsZGVyVmFyaWFibGUsIEJ1aWxkZXJWYXJpYWJsZU9wdGlvbiB9IGZyb20gXCIuL1J1bGVWYXJpYWJsZVwiO1xuaW1wb3J0IHsgQnVpbGRlck9wZXJhdG9yIH0gZnJvbSBcIi4vY29uZGl0aW9uL0J1aWxkZXItb3BlcmF0b3JcIjtcbmltcG9ydCB7IEp1bXBUb1BhZ2VBY3Rpb24gfSBmcm9tIFwiLi9SdWxlQWN0aW9uXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTaW5nbGVTZWxlY3RJdGVtPFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VsZWN0TGFiZWw7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rvb2xUaXA7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlYXJjaFN0cmluZztcbiAgZ2V0IHNlbGVjdExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdExhYmVsO1xuICB9XG4gIGdldCB0b29sdGlwKCkge1xuICAgIHJldHVybiB0aGlzLl90b29sVGlwO1xuICB9XG5cbiAgZ2V0IHNlYXJjaFN0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoU3RyaW5nO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGRhdGE6IFQpIHtcbiAgICB0aGlzLl9zZWxlY3RMYWJlbCA9IHRoaXMuZ2V0U2VsZWN0TGFiZWwoKTtcbiAgICB0aGlzLl90b29sVGlwID0gdGhpcy5nZXRUb29sdGlwKCk7XG4gICAgdGhpcy5fc2VhcmNoU3RyaW5nID0gdGhpcy5nZXRTZWFyY2hTdHJpbmcoKTtcbiAgfVxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0U2VsZWN0TGFiZWwoKTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0VG9vbHRpcCgpOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRTZWFyY2hTdHJpbmcoKTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgUnVsZVZhcmlhYmxlU2VsZWN0SXRlbSBleHRlbmRzIFNpbmdsZVNlbGVjdEl0ZW08QnVpbGRlclZhcmlhYmxlPiB7XG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlID0gKGRhdGE6IEJ1aWxkZXJWYXJpYWJsZSkgPT4ge1xuICAgIHJldHVybiBuZXcgUnVsZVZhcmlhYmxlU2VsZWN0SXRlbShkYXRhKTtcbiAgfTtcbiAgcmVhZG9ubHkgb3B0aW9uczogUmVhZG9ubHlBcnJheTxSdWxlT3B0aW9uU2VsZWN0SXRlbT47XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGRhdGE6IEJ1aWxkZXJWYXJpYWJsZSkge1xuICAgIHN1cGVyKGRhdGEpO1xuICAgIHRoaXMub3B0aW9ucyA9IGRhdGEub3B0aW9ucy5tYXAoUnVsZU9wdGlvblNlbGVjdEl0ZW0uY3JlYXRlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTZWFyY2hTdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnZhcklkICsgdGhpcy5kYXRhLmxhYmVsO1xuICB9XG5cbiAgZ2V0U2VsZWN0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnZhcklkO1xuICB9XG5cbiAgZ2V0VG9vbHRpcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEubGFiZWw7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJ1bGVPcHRpb25TZWxlY3RJdGVtIGV4dGVuZHMgU2luZ2xlU2VsZWN0SXRlbTxCdWlsZGVyVmFyaWFibGVPcHRpb24+IHtcbiAgcHVibGljIHN0YXRpYyBjcmVhdGUgPSAob3B0aW9uOiBCdWlsZGVyVmFyaWFibGVPcHRpb24pID0+IHtcbiAgICByZXR1cm4gbmV3IFJ1bGVPcHRpb25TZWxlY3RJdGVtKG9wdGlvbik7XG4gIH07XG4gIHByaXZhdGUgY29uc3RydWN0b3Iob3B0aW9uOiBCdWlsZGVyVmFyaWFibGVPcHRpb24pIHtcbiAgICBzdXBlcihvcHRpb24pO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTZWFyY2hTdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTZWxlY3RMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEubGFiZWwgKyBcIihcIiArIHRoaXMuZGF0YS52YWx1ZSArIFwiKVwiO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT3BlcmF0b3JTZWxlY3RJdGVtIGV4dGVuZHMgU2luZ2xlU2VsZWN0SXRlbTxCdWlsZGVyT3BlcmF0b3IgfCBcIlwiPiB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRVEgPSBuZXcgT3BlcmF0b3JTZWxlY3RJdGVtKFwiZXF1YWxcIik7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9UX0VRID0gbmV3IE9wZXJhdG9yU2VsZWN0SXRlbShcIm5vdEVxdWFsXCIpO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGZyb21TeW1ib2wgPSAoXG4gICAgc3ltYm9sOiBCdWlsZGVyT3BlcmF0b3IgfCBPbWl0PHN0cmluZywgQnVpbGRlck9wZXJhdG9yPixcbiAgKTogT3BlcmF0b3JTZWxlY3RJdGVtIHwgZmFsc2UgPT4ge1xuICAgIGlmIChzeW1ib2wgPT09IFwiZXF1YWxcIikge1xuICAgICAgcmV0dXJuIE9wZXJhdG9yU2VsZWN0SXRlbS5FUTtcbiAgICB9XG4gICAgaWYgKHN5bWJvbCA9PT0gXCJub3RFcXVhbFwiKSB7XG4gICAgICByZXR1cm4gT3BlcmF0b3JTZWxlY3RJdGVtLk5PVF9FUTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKG9wZXJhdG9yOiBCdWlsZGVyT3BlcmF0b3IpIHtcbiAgICBzdXBlcihvcGVyYXRvcik7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U2VhcmNoU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U2VsZWN0TGFiZWwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBvcGVyYXRvciA9IHRoaXMuZGF0YTtcbiAgICBpZiAob3BlcmF0b3IgPT09IFwiZXF1YWxcIikge1xuICAgICAgcmV0dXJuIFwiRXF1YWxzXCI7XG4gICAgfVxuICAgIGlmIChvcGVyYXRvciA9PT0gXCJub3RFcXVhbFwiKSB7XG4gICAgICByZXR1cm4gXCJOb3QgZXF1YWxzXCI7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICBjb25zdCBvcGVyYXRvciA9IHRoaXMuZGF0YTtcbiAgICBpZiAob3BlcmF0b3IgPT09IFwiZXF1YWxcIikge1xuICAgICAgcmV0dXJuIFwiRXF1YWxzXCI7XG4gICAgfVxuICAgIGlmIChvcGVyYXRvciA9PT0gXCJub3RFcXVhbFwiKSB7XG4gICAgICByZXR1cm4gXCJOb3QgZXF1YWxzXCI7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBKdW1wVG9QYWdlU2VsZWN0SXRlbSBleHRlbmRzIFNpbmdsZVNlbGVjdEl0ZW08SnVtcFRvUGFnZUFjdGlvbj4ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGNyZWF0ZSA9IChwYWdlRGF0YTogSnVtcFRvUGFnZUFjdGlvbikgPT4gbmV3IEp1bXBUb1BhZ2VTZWxlY3RJdGVtKHBhZ2VEYXRhKTtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHBhZ2VEYXRhOiBKdW1wVG9QYWdlQWN0aW9uKSB7XG4gICAgc3VwZXIocGFnZURhdGEpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNlYXJjaFN0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEucGFnZVByZWZpeCArIHRoaXMuZGF0YS5tYWluVGV4dDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTZWxlY3RMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEucGFnZVByZWZpeCArIFwiIChcIiArIHRoaXMuZGF0YS5wYWdlTnVtYmVyICsgXCIpXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VG9vbHRpcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEubWFpblRleHQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IFF1ZXN0aW9uVmFyaWFibGUsIEN1c3RvbVZhcmlhYmxlLCBCdWlsZGVyVmFyaWFibGUgfSBmcm9tIFwiLi9SdWxlVmFyaWFibGVcIjtcbmltcG9ydCB0eXBlIHsgRXhjbHVkZUJ5UGFnZUFjdGlvbiwgRXhjbHVkZUJ5VGFnQWN0aW9uLCBKdW1wVG9QYWdlQWN0aW9uIH0gZnJvbSBcIi4vUnVsZUFjdGlvblwiO1xuaW1wb3J0IHsgSnVtcFRvUGFnZVNlbGVjdEl0ZW0gfSBmcm9tIFwiLi9TaW5nbGVTZWxlY3RJdGVtXCI7XG5cbi8qKlxuICogVE9ETyBDcmF0ZSBmaWx0ZXJzIGZvciBcImNhcmRpbmFsaXR5XCIgb3IgXCJvcmRlclwiIG9mIGEgdmFyaWFibGU7XG4gKiBSZXR1cm4gbGVnYWwgbGlzdHMgb2YgdmFyaWFibGVzLlxuICovXG5leHBvcnQgY2xhc3MgUnVsZUlucHV0IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfcXVlc3Rpb25WYXJpYWJsZXM6IFJlYWRvbmx5QXJyYXk8UXVlc3Rpb25WYXJpYWJsZT4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2N1c3RvbVZhcmlhYmxlczogUmVhZG9ubHlBcnJheTxDdXN0b21WYXJpYWJsZT4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VJZEFjdGlvbnM6IFJlYWRvbmx5QXJyYXk8RXhjbHVkZUJ5UGFnZUFjdGlvbj4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhZ0FjdGlvbnM6IFJlYWRvbmx5QXJyYXk8RXhjbHVkZUJ5VGFnQWN0aW9uPixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfanVtcEFjdGlvbnM6IFJlYWRvbmx5QXJyYXk8SnVtcFRvUGFnZUFjdGlvbj5cbiAgICApIHt9XG5cbiAgICBnZXQgcXVlc3Rpb25WYXJzKCk6IFJlYWRvbmx5QXJyYXk8UXVlc3Rpb25WYXJpYWJsZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcXVlc3Rpb25WYXJpYWJsZXM7XG4gICAgfVxuXG4gICAgZ2V0Q29uZGl0aW9uSW5wdXQoKTogUmVhZG9ubHlBcnJheTxCdWlsZGVyVmFyaWFibGU+IHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnF1ZXN0aW9uVmFycywgLi4udGhpcy5jdXN0b21WYXJzXTtcbiAgICB9XG5cbiAgICBnZXRKdW1wVG9QYWdlT3B0aW9ucygpOiBSZWFkb25seUFycmF5PEp1bXBUb1BhZ2VTZWxlY3RJdGVtPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9qdW1wQWN0aW9ucy5tYXAoSnVtcFRvUGFnZVNlbGVjdEl0ZW0uY3JlYXRlKTtcbiAgICB9XG5cbiAgICBnZXQgY3VzdG9tVmFycygpOiBSZWFkb25seUFycmF5PEN1c3RvbVZhcmlhYmxlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXN0b21WYXJpYWJsZXM7XG4gICAgfVxuXG4gICAgZ2V0IGV4Y2x1ZGVCeVBhZ2VJZEFjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYWdlSWRBY3Rpb25zO1xuICAgIH1cblxuICAgIGdldCBleGNsdWRlQnlUYWdBY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFnQWN0aW9ucztcbiAgICB9XG4gICAgZ2V0IGp1bXBUb1BhZ2VBY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fanVtcEFjdGlvbnM7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IEJ1aWxkZXJPYmplY3RJZCwgQnVpbGRlck9iamVjdCB9IGZyb20gJy4vQnVpbGRlck9iamVjdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlclRhZ0R0byB7XG4gIHJlYWRvbmx5IGlkOiBCdWlsZGVyT2JqZWN0SWQuVGFnSWQ7XG4gIHJlYWRvbmx5IHRhZzogc3RyaW5nO1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQnVpbGRlclRhZyBleHRlbmRzIEJ1aWxkZXJPYmplY3Q8J2J1aWxkZXItdGFnJywgQnVpbGRlclRhZ0R0bz4ge1xuICByZWFkb25seSBvYmplY3RUeXBlOiAnYnVpbGRlci10YWcnID0gJ2J1aWxkZXItdGFnJztcbiAgcmVhZG9ubHkgaWQ6IEJ1aWxkZXJPYmplY3RJZC5UYWdJZDtcbiAgdGFnVGV4dCA9ICcnO1xuICB0YWdEZXNjcmlwdGlvbiA9ICcnO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BWF9MRU5HVEggPSAyMDtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNSU5fTEVOR1RIID0gMTtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGNyZWF0ZSA9ICh0YWc6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyA9ICcnKSA9PiB7XG4gICAgY29uc3QgaWQgPSBCdWlsZGVyT2JqZWN0SWQuY3JlYXRlVGFnSWQoKTtcbiAgICBjb25zdCBkdG86IEJ1aWxkZXJUYWdEdG8gPSB7XG4gICAgICBpZCxcbiAgICAgIHRhZyxcbiAgICAgIGRlc2NyaXB0aW9uXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IEJ1aWxkZXJUYWcoZHRvKTtcbiAgfTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBmcm9tRHRvID0gKGR0bzogQnVpbGRlclRhZ0R0bykgPT4ge1xuICAgIHJldHVybiBuZXcgQnVpbGRlclRhZyhkdG8pO1xuICB9O1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZHRvOiBCdWlsZGVyVGFnRHRvKSB7XG4gICAgY29uc3QgaWQgPSBkdG8uaWQgPz8gQnVpbGRlck9iamVjdElkLmNyZWF0ZVRhZ0lkKCk7XG4gICAgY29uc3Qgd2l0aElkID0geyAuLi5kdG8sIGlkIH07XG4gICAgc3VwZXIod2l0aElkKTtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy50YWdUZXh0ID0gZHRvLnRhZyA/PyAnJztcbiAgICB0aGlzLnRhZ0Rlc2NyaXB0aW9uID0gZHRvLmRlc2NyaXB0aW9uID8/ICcnO1xuICB9XG4gIGNsb25lKCk6IEJ1aWxkZXJUYWdEdG8ge1xuICAgIHJldHVybiB0aGlzLnRvSnNvbigpO1xuICB9XG5cbiAgdG9Kc29uKCk6IEJ1aWxkZXJUYWdEdG8ge1xuICAgIHJldHVybiB7IHRhZzogdGhpcy50YWdUZXh0LCBkZXNjcmlwdGlvbjogdGhpcy50YWdEZXNjcmlwdGlvbiwgaWQ6IHRoaXMuaWQgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGFnQ29sbGVjdGlvbiBpbXBsZW1lbnRzIEl0ZXJhYmxlPEJ1aWxkZXJUYWc+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGFncyA9IG5ldyBTZXQ8QnVpbGRlclRhZz4oKTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBjcmVhdGUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBUYWdDb2xsZWN0aW9uKFtdKTtcbiAgfTtcblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICBjb25zdCBsaXN0ID0gWy4uLnRoaXMuX3RhZ3NdO1xuICAgIHJldHVybiBsaXN0W1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGluaXRpYWxUYWdzOiBSZWFkb25seUFycmF5PEJ1aWxkZXJUYWc+KSB7XG4gICAgaW5pdGlhbFRhZ3MuZm9yRWFjaCh0YWcgPT4ge1xuICAgICAgdGhpcy5fdGFncy5hZGQodGFnKTtcbiAgICB9KTtcbiAgfVxuXG4gIGluaXQodGFnczogUmVhZG9ubHlBcnJheTxCdWlsZGVyVGFnRHRvPikge1xuICAgIGNvbnN0IGR0b0xpc3Q6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclRhZ0R0bz4gPSBBcnJheS5pc0FycmF5KHRhZ3MpXG4gICAgICA/IHRhZ3NcbiAgICAgIDogW107XG4gICAgY29uc3QgYWxsID0gZHRvTGlzdC5tYXAoQnVpbGRlclRhZy5mcm9tRHRvKTtcbiAgICBhbGwuZm9yRWFjaCh0YWcgPT4ge1xuICAgICAgdGhpcy5fdGFncy5hZGQodGFnKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZCh0YWc6IEJ1aWxkZXJUYWcpIHtcbiAgICB0aGlzLl90YWdzLmFkZCh0YWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSB0aGlzIHRhZyBmcm9tIGNvbGxlY3Rpb247XG4gICAqIEBwYXJhbSB0YWdcbiAgICovXG4gIGRlbGV0ZSh0YWc6IEJ1aWxkZXJUYWcpIHtcbiAgICB0aGlzLl90YWdzLmRlbGV0ZSh0YWcpO1xuICB9XG5cbiAgdG9Kc29uKCk6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclRhZ0R0bz4ge1xuICAgIGNvbnN0IGxpc3QgPSBbLi4udGhpcy5fdGFnc107XG4gICAgY29uc3QgZHRvTGlzdCA9IGxpc3QubWFwKHQgPT4gdC50b0pzb24oKSk7XG4gICAgcmV0dXJuIGR0b0xpc3Q7XG4gIH1cblxuICBkZWxldGVBbGwodGFnczogSXRlcmFibGU8QnVpbGRlclRhZz4pIHtcbiAgICBjb25zdCBsID0gdGFnc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgY29uc3QgYXNMaXN0ID0gWy4uLnRhZ3NdO1xuICAgIGFzTGlzdC5mb3JFYWNoKHQgPT4ge1xuICAgICAgdGhpcy5kZWxldGUodCk7XG4gICAgfSk7XG4gIH1cbn1cbiIsICJjb25zdCBCdWlsZGVyT3BlcmF0b3JTeW1ib2xzID0ge1xuICBlcXVhbDogdHJ1ZSxcbiAgbm90RXF1YWw6IHRydWUsXG4gIGxlc3NUaGFuOiB0cnVlLFxuICBsZXNzVGhhbk9yRXF1YWw6IHRydWUsXG4gIGdyZWF0ZXJUaGFuOiB0cnVlLFxuICBncmVhdGVyVGhhbk9yRXF1YWw6IHRydWUsXG4gIGJldHdlZW46IHRydWUsXG4gIG5vdEJldHdlZW46IHRydWUsXG4gIGluOiB0cnVlLFxuICBub3RJbjogdHJ1ZSxcbiAgbWlzc2luZzogdHJ1ZSxcbiAgbm90TWlzc2luZzogdHJ1ZSxcbiAgY29udGFpbnM6IHRydWUsXG4gIG5vdENvbnRhaW5zOiB0cnVlLFxuICBlbXB0eTogdHJ1ZSxcbiAgbm90RW1wdHk6IHRydWUsXG4gIHN0YXJ0c1dpdGg6IHRydWUsXG4gIGVuZHNXaXRoOiB0cnVlLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgQnVpbGRlck9wZXJhdG9yID0ga2V5b2YgdHlwZW9mIEJ1aWxkZXJPcGVyYXRvclN5bWJvbHM7XG5cbmV4cG9ydCBuYW1lc3BhY2UgQnVpbGRlck9wZXJhdG9yIHtcbiAgZXhwb3J0IGNvbnN0IGlzID0gKHN5bWJvbD86IHN0cmluZyk6IHN5bWJvbCBpcyBCdWlsZGVyT3BlcmF0b3IgPT4ge1xuICAgIGlmICh0eXBlb2Ygc3ltYm9sICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qua2V5cyhCdWlsZGVyT3BlcmF0b3JTeW1ib2xzKS5pbmNsdWRlcyhzeW1ib2wpO1xuICB9O1xufVxuIiwgImltcG9ydCB7IEJ1aWxkZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vQnVpbGRlck9iamVjdFwiO1xuaW1wb3J0IHsgQnVpbGRlck9wZXJhdG9yIH0gZnJvbSBcIi4vQnVpbGRlci1vcGVyYXRvclwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyVmFyaWFibGUsIEJ1aWxkZXJWYXJpYWJsZU9wdGlvbiB9IGZyb20gXCIuLi9SdWxlVmFyaWFibGVcIjtcbmltcG9ydCB7IE9wZXJhdG9yU2VsZWN0SXRlbSwgUnVsZU9wdGlvblNlbGVjdEl0ZW0sIFJ1bGVWYXJpYWJsZVNlbGVjdEl0ZW0gfSBmcm9tIFwiLi4vU2luZ2xlU2VsZWN0SXRlbVwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlckNvbmRpdGlvbkR0byB7XG4gIHJlYWRvbmx5IGtpbmQ6IFwiY29uZGl0aW9uXCI7XG4gIHJlYWRvbmx5IG9wZXJhdG9yOiBCdWlsZGVyT3BlcmF0b3IgfCBcIlwiO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZhcmlhYmxlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgdmFsdWU6IG51bWJlciB8IHN0cmluZyB8IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGVyQ29uZGl0aW9uIGV4dGVuZHMgQnVpbGRlck9iamVjdDxcImJ1aWxkZXItY29uZGl0aW9uXCIsIEJ1aWxkZXJDb25kaXRpb25EdG8+IHtcbiAgcmVhZG9ubHkgb2JqZWN0VHlwZTogXCJidWlsZGVyLWNvbmRpdGlvblwiID0gXCJidWlsZGVyLWNvbmRpdGlvblwiO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5VTUJFUl9PUEVSQVRPUlM6IFJlYWRvbmx5QXJyYXk8T3BlcmF0b3JTZWxlY3RJdGVtPiA9IFtcbiAgICBPcGVyYXRvclNlbGVjdEl0ZW0uRVEsXG4gICAgT3BlcmF0b3JTZWxlY3RJdGVtLk5PVF9FUSxcbiAgXTtcblxuICBwcml2YXRlIGluaXRpYWxEdG86IEJ1aWxkZXJDb25kaXRpb25EdG87XG4gIG5hbWUgPSBcIlwiO1xuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlID0gKHZhcmlhYmxlTGlzdDogUmVhZG9ubHlBcnJheTxCdWlsZGVyVmFyaWFibGU+KSA9PiB7XG4gICAgY29uc3QgY29uZGl0aW9uID0gbmV3IEJ1aWxkZXJDb25kaXRpb24oXG4gICAgICB7XG4gICAgICAgIGtpbmQ6IFwiY29uZGl0aW9uXCIsXG4gICAgICAgIG5hbWU6IFwiXCIsXG4gICAgICAgIG9wZXJhdG9yOiBcIlwiLFxuICAgICAgICB2YXJpYWJsZUlkOiBcIlwiLFxuICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgIH0sXG4gICAgICB2YXJpYWJsZUxpc3QsXG4gICAgKTtcbiAgICByZXR1cm4gY29uZGl0aW9uO1xuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUR0byA9IChkdG86IEJ1aWxkZXJDb25kaXRpb25EdG8sIHZhcmlhYmxlczogUmVhZG9ubHlBcnJheTxCdWlsZGVyVmFyaWFibGU+KSA9PiB7XG4gICAgY29uc3QgX2R0bzogQnVpbGRlckNvbmRpdGlvbkR0byA9IHtcbiAgICAgIGtpbmQ6IFwiY29uZGl0aW9uXCIsXG4gICAgICBuYW1lOiBkdG8ubmFtZSA/PyBcIlwiLFxuICAgICAgdmFsdWU6IGR0by52YWx1ZSA/PyBcIlwiLFxuICAgICAgb3BlcmF0b3I6IGR0by5vcGVyYXRvciA/PyBcIlwiLFxuICAgICAgdmFyaWFibGVJZDogZHRvLnZhcmlhYmxlSWQgPz8gXCJcIixcbiAgICB9O1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEJ1aWxkZXJDb25kaXRpb24oX2R0bywgdmFyaWFibGVzKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG4gIHByaXZhdGUgX3ZhcmlhYmxlOiBCdWlsZGVyVmFyaWFibGUgfCBmYWxzZSA9IGZhbHNlO1xuICBwcml2YXRlIF9vcGVyYXRvcjogQnVpbGRlck9wZXJhdG9yIHwgXCJcIiA9IFwiXCI7XG4gIHByaXZhdGUgX3ZhbHVlOiBCdWlsZGVyVmFyaWFibGVPcHRpb24gfCBmYWxzZSA9IGZhbHNlO1xuICBwcml2YXRlIF92YXJpYWJsZUxpc3Q6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclZhcmlhYmxlPiA9IFtdO1xuXG4gIC8qKlxuICAgKiBDYW4gb25seSBzZXQgdmFyaWFibGVzIHRoYXQgZXhpc3QgaW4gdmFyaWFibGVMaXN0LlxuICAgKiBAcGFyYW0gdmFyaWFibGVcbiAgICovXG4gIHNldCB2YXJpYWJsZSh2YXJpYWJsZTogQnVpbGRlclZhcmlhYmxlIHwgZmFsc2UpIHtcbiAgICBpZiAodmFyaWFibGUgPT09IHRoaXMuX3ZhcmlhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3ZhcmlhYmxlID0gdmFyaWFibGU7XG4gICAgdGhpcy5fb3BlcmF0b3IgPSBcIlwiO1xuICAgIHRoaXMuX3ZhbHVlID0gZmFsc2U7XG4gIH1cblxuICBnZXQgdmFyaWFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhcmlhYmxlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhcmlhYmxlVmFsdWU6IEJ1aWxkZXJWYXJpYWJsZU9wdGlvbiB8IGZhbHNlKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YXJpYWJsZVZhbHVlO1xuICB9XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICB2YWxpZGF0ZSgpOiB7IGlzVmFsaWQ6IHRydWUgfSB8IHsgaXNWYWxpZDogZmFsc2U7IG1lc3NhZ2U6IHN0cmluZyB9IHtcbiAgICBpZiAodGhpcy5fdmFyaWFibGVMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IFwiSGFzIG5vIHZhcmlhYmxlTGlzdCB0byBjaGVjayBkdG8gYWdhaW5zdC5cIixcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghdGhpcy5fdmFyaWFibGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBcIlZhcmlhYmxlIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCBmcm9tIHZhcmlhYmxlTGlzdC5cIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9vcGVyYXRvcikge1xuICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIG1lc3NhZ2U6IFwiT3BlcmF0b3IgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkXCIgfTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3ZhbHVlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogXCJWYWx1ZSAoQnVpbGRlclZhcmlhYmxlT3B0aW9uKSBpcyBub3QgaW5pdGlhbGl6ZWRcIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSB9O1xuICB9XG5cbiAgdG9FbmdpbmVDb25kaXRpb24oKTogQ29uZGl0aW9uLlNpbXBsZSB8IGZhbHNlIHtcbiAgICBjb25zdCB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIGNvbnN0IG9wID0gdGhpcy5fb3BlcmF0b3I7XG4gICAgY29uc3QgdiA9IHRoaXMuX3ZhcmlhYmxlO1xuICAgIGlmICghdmFsKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFvcCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghdikgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChvcCA9PT0gXCJlcXVhbFwiKSB7XG4gICAgICBjb25zdCBlbmdpbmVDb25kaXRpb246IENvbmRpdGlvbi5TaW1wbGUgPSB7XG4gICAgICAgIGtpbmQ6IFwibnVtZXJpYy1jb25kaXRpb25cIixcbiAgICAgICAgdmFsdWU6IHZhbC52YWx1ZSxcbiAgICAgICAgdmFsdWVMYWJlbDogdmFsLmxhYmVsLFxuICAgICAgICByZWZlcmVuY2VJZDogdi52YXJJZCxcbiAgICAgICAgcmVmZXJlbmNlTGFiZWw6IHYubGFiZWwsXG4gICAgICAgIG9wZXJhdG9yOiBcImVxXCIsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGVuZ2luZUNvbmRpdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kVmFyaWFibGVJblVuaXZlcnNlKHZhcmlhYmxlSWQ6IHN0cmluZyk6IEJ1aWxkZXJWYXJpYWJsZSB8IGZhbHNlIHtcbiAgICBjb25zdCB2ID0gdGhpcy5fdmFyaWFibGVMaXN0LmZpbmQoKHYpID0+IHYudmFySWQgPT09IHZhcmlhYmxlSWQpO1xuICAgIHJldHVybiB2ID8/IGZhbHNlO1xuICB9XG5cbiAgc2V0IG9wZXJhdG9yKG9wZXJhdG9yOiBCdWlsZGVyT3BlcmF0b3IgfCBcIlwiKSB7XG4gICAgaWYgKEJ1aWxkZXJPcGVyYXRvci5pcyhvcGVyYXRvcikpIHtcbiAgICAgIHRoaXMuX29wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29wZXJhdG9yID0gXCJcIjtcbiAgICB9XG4gIH1cblxuICBnZXQgb3BlcmF0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wZXJhdG9yO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihkdG86IEJ1aWxkZXJDb25kaXRpb25EdG8sIHZhcmlhYmxlczogUmVhZG9ubHlBcnJheTxCdWlsZGVyVmFyaWFibGU+KSB7XG4gICAgc3VwZXIoZHRvKTtcbiAgICB0aGlzLmluaXRpYWxEdG8gPSBkdG87XG4gICAgdGhpcy5uYW1lID0gZHRvLm5hbWU7XG4gICAgdGhpcy5fc2V0VmFyaWFibGVMaXN0KHZhcmlhYmxlcyk7XG4gIH1cblxuICBnZXQgdmFyaWFibGVTZWxlY3RJdGVtc0luVW5pdmVyc2UoKTogUmVhZG9ubHlBcnJheTxSdWxlVmFyaWFibGVTZWxlY3RJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhcmlhYmxlTGlzdC5tYXAoUnVsZVZhcmlhYmxlU2VsZWN0SXRlbS5jcmVhdGUpO1xuICB9XG5cbiAgZ2V0IG9wZXJhdG9yc1NlbGVjdEl0ZW1zKCk6IFJlYWRvbmx5QXJyYXk8T3BlcmF0b3JTZWxlY3RJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhcmlhYmxlID8gQnVpbGRlckNvbmRpdGlvbi5OVU1CRVJfT1BFUkFUT1JTIDogW107XG4gIH1cblxuICBnZXQgc2VsZWN0VmFsdWVJdGVtcygpOiBSZWFkb25seUFycmF5PFJ1bGVPcHRpb25TZWxlY3RJdGVtPiB7XG4gICAgaWYgKCF0aGlzLl92YXJpYWJsZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBvcHQgPSB0aGlzLl92YXJpYWJsZS5vcHRpb25zLm1hcChSdWxlT3B0aW9uU2VsZWN0SXRlbS5jcmVhdGUpO1xuICAgIHJldHVybiBvcHQ7XG4gIH1cblxuICBjbG9uZSgpOiBCdWlsZGVyQ29uZGl0aW9uRHRvIHtcbiAgICByZXR1cm4gdGhpcy50b0pzb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldFZhcmlhYmxlTGlzdCh2YXJpYWJsZXM6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclZhcmlhYmxlPik6IGJvb2xlYW4ge1xuICAgIHRoaXMuX3ZhcmlhYmxlTGlzdCA9IHZhcmlhYmxlcztcbiAgICBjb25zdCB2ID0gdGhpcy5fdmFyaWFibGVMaXN0LmZpbmQoKHYpID0+IHYudmFySWQgPT09IHRoaXMub3JpZ2luYWxEdG8udmFyaWFibGVJZCk7XG4gICAgaWYgKCF2KSB7XG4gICAgICB0aGlzLl92YXJpYWJsZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fb3BlcmF0b3IgPSBcIlwiO1xuICAgICAgdGhpcy5fdmFsdWUgPSBmYWxzZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5fdmFyaWFibGUgPSB2O1xuICAgIGNvbnN0IG9wID0gdGhpcy5vcmlnaW5hbER0by5vcGVyYXRvcjtcblxuICAgIGlmICghQnVpbGRlck9wZXJhdG9yLmlzKG9wKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLl9vcGVyYXRvciA9IG9wO1xuICAgIGNvbnN0IG1heWJlT3B0aW9uID0gdi5vcHRpb25zLmZpbmQoKG9wKSA9PiBvcC52YWx1ZSA9PT0gdGhpcy5vcmlnaW5hbER0by52YWx1ZSk7XG4gICAgaWYgKCFtYXliZU9wdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLl92YWx1ZSA9IG1heWJlT3B0aW9uO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdG9Kc29uKCk6IEJ1aWxkZXJDb25kaXRpb25EdG8ge1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5hbWU7XG4gICAgY29uc3QgdmFyaWFibGVJZCA9IHRoaXMuX3ZhcmlhYmxlID8gdGhpcy5fdmFyaWFibGUudmFySWQgOiBcIlwiO1xuICAgIGNvbnN0IG9wZXJhdG9yID0gdGhpcy5fb3BlcmF0b3IgPyB0aGlzLl9vcGVyYXRvciA6IFwiXCI7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl92YWx1ZSA/IHRoaXMuX3ZhbHVlLnZhbHVlIDogXCJcIjtcbiAgICByZXR1cm4ge1xuICAgICAga2luZDogXCJjb25kaXRpb25cIixcbiAgICAgIG5hbWUsXG4gICAgICBvcGVyYXRvcixcbiAgICAgIHZhcmlhYmxlSWQsXG4gICAgICB2YWx1ZSxcbiAgICB9O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgQnVpbGRlckNvbmRpdGlvbiwgdHlwZSBCdWlsZGVyQ29uZGl0aW9uRHRvIH0gZnJvbSBcIi4vQnVpbGRlci1jb25kaXRpb25cIjtcbmltcG9ydCB7IEJ1aWxkZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vQnVpbGRlck9iamVjdFwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyVmFyaWFibGUgfSBmcm9tIFwiLi4vUnVsZVZhcmlhYmxlXCI7XG5pbXBvcnQgeyBDb25kaXRpb24gfSBmcm9tIFwiQG1lZGlhLXF1ZXN0L2VuZ2luZVwiO1xuXG5jb25zdCBDb25kaXRpb25Hcm91cFR5cGUgPSB7XG4gIGFsbDogdHJ1ZSxcbiAgYW55OiB0cnVlLFxuICBjb3VudDogdHJ1ZSxcbn07XG5cbmV4cG9ydCB0eXBlIENvbmRpdGlvbkdyb3VwVHlwZSA9IGtleW9mIHR5cGVvZiBDb25kaXRpb25Hcm91cFR5cGU7XG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJDb25kaXRpb25Hcm91cER0byB7XG4gIHJlYWRvbmx5IGtpbmQ6IFwiY29uZGl0aW9uLWdyb3VwXCI7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgY291bnQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHR5cGU6IENvbmRpdGlvbkdyb3VwVHlwZTtcbiAgcmVhZG9ubHkgY29uZGl0aW9uczogUmVhZG9ubHlBcnJheTxCdWlsZGVyQ29uZGl0aW9uRHRvPjtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJDb25kaXRpb25Hcm91cCBleHRlbmRzIEJ1aWxkZXJPYmplY3Q8XCJidWlsZGVyLWNvbmRpdGlvbi1ncm91cFwiLCBCdWlsZGVyQ29uZGl0aW9uR3JvdXBEdG8+IHtcbiAgc3RhdGljIHJlYWRvbmx5IGlzQ29uZGl0aW9uR3JvdXBUeXBlID0gKHZhbHVlOiBzdHJpbmcgfCBzeW1ib2wpOiB2YWx1ZSBpcyBDb25kaXRpb25Hcm91cFR5cGUgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdmFsaWRWYWx1ZXMgPSBPYmplY3Qua2V5cyhDb25kaXRpb25Hcm91cFR5cGUpO1xuICAgIHJldHVybiB2YWxpZFZhbHVlcy5pbmNsdWRlcyh2YWx1ZSk7XG4gIH07XG5cbiAgcmVhZG9ubHkgb2JqZWN0VHlwZTogXCJidWlsZGVyLWNvbmRpdGlvbi1ncm91cFwiID0gXCJidWlsZGVyLWNvbmRpdGlvbi1ncm91cFwiO1xuICBwcml2YXRlIF90eXBlOiBDb25kaXRpb25Hcm91cFR5cGU7XG4gIG5hbWUgPSBcIlwiO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb25kaXRpb25zOiBBcnJheTxCdWlsZGVyQ29uZGl0aW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmFyaWFibGVMaXN0OiBSZWFkb25seUFycmF5PEJ1aWxkZXJWYXJpYWJsZT47XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBmcm9tRHRvID0gKGR0bzogQnVpbGRlckNvbmRpdGlvbkdyb3VwRHRvLCB2YXJpYWJsZUxpc3Q6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclZhcmlhYmxlPikgPT4ge1xuICAgIHJldHVybiBuZXcgQnVpbGRlckNvbmRpdGlvbkdyb3VwKGR0bywgdmFyaWFibGVMaXN0KTtcbiAgfTtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGR0bzogQnVpbGRlckNvbmRpdGlvbkdyb3VwRHRvLCB2YXJpYWJsZUxpc3Q6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclZhcmlhYmxlPikge1xuICAgIHN1cGVyKGR0byk7XG4gICAgdGhpcy5uYW1lID0gZHRvLm5hbWU7XG4gICAgdGhpcy5fdHlwZSA9IGR0by50eXBlO1xuICAgIGNvbnN0IGNvbmRpdGlvbkxpc3QgPSBBcnJheS5pc0FycmF5KGR0by5jb25kaXRpb25zKSA/IGR0by5jb25kaXRpb25zIDogW107XG4gICAgdGhpcy5fY29uZGl0aW9ucyA9IGNvbmRpdGlvbkxpc3QubWFwKChkdG8pID0+IEJ1aWxkZXJDb25kaXRpb24uZnJvbUR0byhkdG8sIHZhcmlhYmxlTGlzdCkpO1xuICAgIHRoaXMuX3ZhcmlhYmxlTGlzdCA9IHZhcmlhYmxlTGlzdDtcbiAgfVxuICBnZXQgY29uZGl0aW9ucygpOiBSZWFkb25seUFycmF5PEJ1aWxkZXJDb25kaXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fY29uZGl0aW9ucztcbiAgfVxuXG4gIGdldCBjb25kaXRpb25Db3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZGl0aW9ucy5sZW5ndGg7XG4gIH1cblxuICBhZGRDb25kaXRpb24oKTogQnVpbGRlckNvbmRpdGlvbiB7XG4gICAgY29uc3QgbmV3Q29uZGl0aW9ucyA9IEJ1aWxkZXJDb25kaXRpb24uY3JlYXRlKHRoaXMuX3ZhcmlhYmxlTGlzdCk7XG4gICAgdGhpcy5fY29uZGl0aW9ucy5wdXNoKG5ld0NvbmRpdGlvbnMpO1xuICAgIHJldHVybiBuZXdDb25kaXRpb25zO1xuICB9XG5cbiAgcmVtb3ZlQ29uZGl0aW9uKGNvbmRpdGlvbjogQnVpbGRlckNvbmRpdGlvbik6IGJvb2xlYW4ge1xuICAgIC8vIHRoaXMuX2NvbmRpdGlvbnMuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9jb25kaXRpb25zLmluZGV4T2YoY29uZGl0aW9uKTtcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX2NvbmRpdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNsb25lKCk6IEJ1aWxkZXJDb25kaXRpb25Hcm91cER0byB7XG4gICAgcmV0dXJuIHRoaXMudG9Kc29uKCk7XG4gIH1cblxuICB0b0pzb24oKTogQnVpbGRlckNvbmRpdGlvbkdyb3VwRHRvIHtcbiAgICBjb25zdCBjb25kaXRpb25zOiBSZWFkb25seUFycmF5PEJ1aWxkZXJDb25kaXRpb25EdG8+ID0gWy4uLnRoaXMuX2NvbmRpdGlvbnMubWFwKChjKSA9PiBjLnRvSnNvbigpKV07XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIGNvbmRpdGlvbnMsXG4gICAgICB0eXBlOiB0aGlzLl90eXBlLFxuICAgICAga2luZDogXCJjb25kaXRpb24tZ3JvdXBcIixcbiAgICB9O1xuICB9XG5cbiAgdG9FbmdpbmVDb25kaXRpb25Db21wbGV4KCk6IENvbmRpdGlvbi5Db21wbGV4IHwgZmFsc2Uge1xuICAgIGNvbnN0IGNvbXA6IENvbmRpdGlvbi5Db21wbGV4ID0ge1xuICAgICAga2luZDogXCJjb21wbGV4LWNvbmRpdGlvblwiLFxuICAgICAgYWxsOiBbXSxcbiAgICAgIHNvbWU6IFtdLFxuICAgICAgbmFtZTogXCJcIixcbiAgICB9O1xuICAgIGNvbnN0IGNvbmRpdGlvbnM6IENvbmRpdGlvbi5TaW1wbGVbXSA9IFtdO1xuICAgIHRoaXMuY29uZGl0aW9ucy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICBjb25zdCBtYXliZVNpbXBsZSA9IGMudG9FbmdpbmVDb25kaXRpb24oKTtcbiAgICAgIGlmIChtYXliZVNpbXBsZSkge1xuICAgICAgICBjb25kaXRpb25zLnB1c2gobWF5YmVTaW1wbGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLl90eXBlID09PSBcImFsbFwiKSB7XG4gICAgICByZXR1cm4geyAuLi5jb21wLCBhbGw6IGNvbmRpdGlvbnMgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IFwiYW55XCIpIHtcbiAgICAgIHJldHVybiB7IC4uLmNvbXAsIHNvbWU6IGNvbmRpdGlvbnMgfTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhcIklOVkFMSUQgQ09NUExFWCBDT05ESVRJT04uIFRPRE8gSU1QTEVNRU5UIHJhbmdlLCBhbmQgY291bnQuXCIpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGdldCB0eXBlKCk6IENvbmRpdGlvbkdyb3VwVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gIH1cbiAgc2V0IHR5cGUoY29uZGl0aW9uR3JvdXBUeXBlOiBDb25kaXRpb25Hcm91cFR5cGUpIHtcbiAgICBpZiAoQnVpbGRlckNvbmRpdGlvbkdyb3VwLmlzQ29uZGl0aW9uR3JvdXBUeXBlKGNvbmRpdGlvbkdyb3VwVHlwZSkpIHtcbiAgICAgIHRoaXMuX3R5cGUgPSBjb25kaXRpb25Hcm91cFR5cGU7XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgRXhjbHVkZUJ5UGFnZUFjdGlvbiwgRXhjbHVkZUJ5VGFnQWN0aW9uIH0gZnJvbSBcIi4vUnVsZUFjdGlvblwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTXVsdGlTZWxlY3RJdGVtPFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNTZWxlY3RlZEluaXRpYWxseTogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VsZWN0TGFiZWw7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rvb2xUaXA7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlYXJjaFN0cmluZztcbiAgcHVibGljIGlzU2VsZWN0ZWQ6IGJvb2xlYW47XG4gIGdldCBzZWxlY3RMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RMYWJlbDtcbiAgfVxuICBnZXQgdG9vbHRpcCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdG9vbFRpcDtcbiAgfVxuXG4gIGdldCBzZWFyY2hTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaFN0cmluZztcbiAgfVxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgZGF0YTogVCxcbiAgICBpc1NlbGVjdGVkOiBib29sZWFuLFxuICApIHtcbiAgICB0aGlzLl9pc1NlbGVjdGVkSW5pdGlhbGx5ID0gaXNTZWxlY3RlZDtcbiAgICB0aGlzLmlzU2VsZWN0ZWQgPSBpc1NlbGVjdGVkO1xuICAgIHRoaXMuX3NlYXJjaFN0cmluZyA9IHRoaXMuZ2V0U2VhcmNoU3RyaW5nKCk7XG4gICAgdGhpcy5fdG9vbFRpcCA9IHRoaXMuZ2V0VG9vbHRpcCgpO1xuICAgIHRoaXMuX3NlbGVjdExhYmVsID0gdGhpcy5nZXRTZWxlY3RMYWJlbCgpO1xuICB9XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRTZWxlY3RMYWJlbCgpOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRUb29sdGlwKCk6IHN0cmluZztcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFNlYXJjaFN0cmluZygpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBFeGNsdWRlQnlUYWdTZWxlY3RJdGVtIGV4dGVuZHMgTXVsdGlTZWxlY3RJdGVtPEV4Y2x1ZGVCeVRhZ0FjdGlvbj4ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGNyZWF0ZSA9ICh0YWdEYXRhOiBFeGNsdWRlQnlUYWdBY3Rpb24sIGlzU2VsZWN0ZWQ6IGJvb2xlYW4pID0+IHtcbiAgICByZXR1cm4gbmV3IEV4Y2x1ZGVCeVRhZ1NlbGVjdEl0ZW0odGFnRGF0YSwgaXNTZWxlY3RlZCk7XG4gIH07XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihkYXRhOiBFeGNsdWRlQnlUYWdBY3Rpb24sIGlzU2VsZWN0ZWQ6IGJvb2xlYW4pIHtcbiAgICBzdXBlcihkYXRhLCBpc1NlbGVjdGVkKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U2VhcmNoU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS50YWc7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U2VsZWN0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnRhZyArIFwiIChcIiArIHRoaXMuZGF0YS5wYWdlQ291bnQgKyBcIilcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS50YWcgKyBcIiAgKHVzZWQgaW4gXCIgKyB0aGlzLmRhdGEucGFnZUNvdW50ICsgXCIgcGFnZXMpXCI7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEV4Y2x1ZGVCeVBhZ2VJZFNlbGVjdEl0ZW0gZXh0ZW5kcyBNdWx0aVNlbGVjdEl0ZW08RXhjbHVkZUJ5UGFnZUFjdGlvbj4ge1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZSA9IChydWxlQWN0aW9uUGFnZTogRXhjbHVkZUJ5UGFnZUFjdGlvbiwgaXNTZWxlY3RlZDogYm9vbGVhbikgPT4ge1xuICAgIHJldHVybiBuZXcgRXhjbHVkZUJ5UGFnZUlkU2VsZWN0SXRlbShydWxlQWN0aW9uUGFnZSwgaXNTZWxlY3RlZCk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGRhdGE6IEV4Y2x1ZGVCeVBhZ2VBY3Rpb24sIGlzU2VsZWN0ZWQ6IGJvb2xlYW4pIHtcbiAgICBzdXBlcihkYXRhLCBpc1NlbGVjdGVkKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U2VhcmNoU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5wYWdlUHJlZml4ICsgdGhpcy5kYXRhLm1haW5UZXh0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNlbGVjdExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5wYWdlUHJlZml4ICsgXCIgKFwiICsgdGhpcy5kYXRhLnBhZ2VOdW1iZXIgKyBcIilcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5tYWluVGV4dDtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgUnVsZUlucHV0IH0gZnJvbSBcIi4vUnVsZUlucHV0XCI7XG5pbXBvcnQgeyBFeGNsdWRlQnlUYWdTZWxlY3RJdGVtIH0gZnJvbSBcIi4vbXVsdGktc2VsZWN0LWl0ZW1cIjtcbmltcG9ydCB7IEV4Y2x1ZGVCeVRhZ0FjdGlvbiB9IGZyb20gXCIuL1J1bGVBY3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIFRhZ0FjdGlvbk1hbmFnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbml0aWFsU2VsZWN0aW9uOiBTZXQ8c3RyaW5nPjtcbiAgcmVhZG9ubHkgc2VsZWN0SXRlbXM6IFJlYWRvbmx5QXJyYXk8RXhjbHVkZUJ5VGFnU2VsZWN0SXRlbT47XG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IHZhbGlkT3B0aW9uczogUnVsZUlucHV0W1wiX3RhZ0FjdGlvbnNcIl0sXG4gICAgcmVhZG9ubHkgaW5pdGlhbFNlbGVjdGlvbjogUmVhZG9ubHlBcnJheTxzdHJpbmc+LFxuICApIHtcbiAgICB0aGlzLl9pbml0aWFsU2VsZWN0aW9uID0gbmV3IFNldChbLi4uaW5pdGlhbFNlbGVjdGlvbl0pO1xuICAgIHRoaXMuc2VsZWN0SXRlbXMgPSB2YWxpZE9wdGlvbnMubWFwKChvcHQpID0+IHtcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLl9pbml0aWFsU2VsZWN0aW9uLmhhcyhvcHQudGFnKTtcbiAgICAgIHJldHVybiBFeGNsdWRlQnlUYWdTZWxlY3RJdGVtLmNyZWF0ZShvcHQsIGlzU2VsZWN0ZWQpO1xuICAgIH0pO1xuICB9XG4gIGdldEN1cnJlbnRTZWxlY3Rpb24oKTogUmVhZG9ubHlBcnJheTxzdHJpbmc+IHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0SXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlzU2VsZWN0ZWQpLm1hcCgoaXRtKSA9PiBpdG0uZGF0YS50YWcpO1xuICAgIHJldHVybiBzZWxlY3RlZDtcbiAgfVxuXG4gIGdldEVuZ2luZUFjdGlvbnMoKTogUmVhZG9ubHlBcnJheTxFeGNsdWRlQnlUYWdBY3Rpb24+IHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0SXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlzU2VsZWN0ZWQpO1xuICAgIGNvbnN0IHRhZ0FjdGlvbnMgPSBzZWxlY3RlZC5tYXAoKHMpID0+IHMuZGF0YSk7XG4gICAgcmV0dXJuIFsuLi50YWdBY3Rpb25zXTtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgUnVsZUlucHV0IH0gZnJvbSBcIi4vUnVsZUlucHV0XCI7XG5pbXBvcnQgeyBFeGNsdWRlQnlQYWdlSWRTZWxlY3RJdGVtIH0gZnJvbSBcIi4vbXVsdGktc2VsZWN0LWl0ZW1cIjtcbmltcG9ydCB7IEV4Y2x1ZGVCeVBhZ2VBY3Rpb24gfSBmcm9tIFwiLi9SdWxlQWN0aW9uXCI7XG5pbXBvcnQgeyBQYWdlSUQgfSBmcm9tIFwiQG1lZGlhLXF1ZXN0L2VuZ2luZVwiO1xuXG5leHBvcnQgY2xhc3MgUGFnZUFjdGlvbk1hbmFnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbml0aWFsU2VsZWN0aW9uOiBTZXQ8c3RyaW5nPjtcbiAgcmVhZG9ubHkgc2VsZWN0SXRlbXM6IFJlYWRvbmx5QXJyYXk8RXhjbHVkZUJ5UGFnZUlkU2VsZWN0SXRlbT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgdmFsaWRPcHRpb25zOiBSdWxlSW5wdXRbXCJfcGFnZUlkQWN0aW9uc1wiXSxcbiAgICByZWFkb25seSBpbml0aWFsU2VsZWN0aW9uOiBSZWFkb25seUFycmF5PHN0cmluZz4sXG4gICkge1xuICAgIHRoaXMuX2luaXRpYWxTZWxlY3Rpb24gPSBuZXcgU2V0KFsuLi5pbml0aWFsU2VsZWN0aW9uXSk7XG4gICAgdGhpcy5zZWxlY3RJdGVtcyA9IHZhbGlkT3B0aW9ucy5tYXAoKG9wdCkgPT4ge1xuICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuX2luaXRpYWxTZWxlY3Rpb24uaGFzKG9wdC5wYWdlSWQpO1xuICAgICAgcmV0dXJuIEV4Y2x1ZGVCeVBhZ2VJZFNlbGVjdEl0ZW0uY3JlYXRlKG9wdCwgaXNTZWxlY3RlZCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDdXJyZW50U2VsZWN0aW9uKCk6IFJlYWRvbmx5QXJyYXk8UGFnZUlEPiB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdEl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pc1NlbGVjdGVkKS5tYXAoKGl0bSkgPT4gaXRtLmRhdGEucGFnZUlkKTtcbiAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gIH1cblxuICBnZXRFbmdpbmVBY3Rpb24oKTogUmVhZG9ubHlBcnJheTxFeGNsdWRlQnlQYWdlQWN0aW9uPiB7XG4gICAgY29uc3Qgc2VsZWN0SXRlbXMgPSB0aGlzLnNlbGVjdEl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pc1NlbGVjdGVkKTtcbiAgICBjb25zdCBhY3Rpb25zID0gc2VsZWN0SXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmRhdGEpO1xuICAgIHJldHVybiBbLi4uYWN0aW9uc107XG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IFJ1bGVJbnB1dCB9IGZyb20gXCIuL1J1bGVJbnB1dFwiO1xuaW1wb3J0IHsgSnVtcFRvUGFnZVNlbGVjdEl0ZW0gfSBmcm9tIFwiLi9TaW5nbGVTZWxlY3RJdGVtXCI7XG5cbmV4cG9ydCBjbGFzcyBKdW1wVG9BY3Rpb25NYW5hZ2VyIHtcbiAgcmVhZG9ubHkgb3B0aW9uczogUmVhZG9ubHlBcnJheTxKdW1wVG9QYWdlU2VsZWN0SXRlbT47XG4gIHByaXZhdGUgX3NlbGVjdGVkOiBKdW1wVG9QYWdlU2VsZWN0SXRlbSB8IGZhbHNlO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZhbGlkT3B0aW9uczogUnVsZUlucHV0W1wiX2p1bXBBY3Rpb25zXCJdLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5pdGlhbFNlbGVjdGlvbjogc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQsXG4gICkge1xuICAgIHRoaXMub3B0aW9ucyA9IHZhbGlkT3B0aW9ucy5tYXAoSnVtcFRvUGFnZVNlbGVjdEl0ZW0uY3JlYXRlKTtcbiAgICB0aGlzLl9zZWxlY3RlZCA9IHRoaXMuZmluZFNlbGVjdGVkKGluaXRpYWxTZWxlY3Rpb24pO1xuICB9XG4gIGdldCBzZWxlY3RlZCgpOiBKdW1wVG9QYWdlU2VsZWN0SXRlbSB8IGZhbHNlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHNlbGVjdGVkOiBKdW1wVG9QYWdlU2VsZWN0SXRlbSB8IGZhbHNlKSB7XG4gICAgdGhpcy5fc2VsZWN0ZWQgPSB0aGlzLmZpbmRTZWxlY3RlZChzZWxlY3RlZCk7XG4gIH1cbiAgZ2V0U2VsZWN0ZWRQYWdlSWQoKTogc3RyaW5nIHwgZmFsc2Uge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZCA/IHRoaXMuX3NlbGVjdGVkLmRhdGEucGFnZUlkIDogZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBmaW5kU2VsZWN0ZWQodmFsdWU6IHVua25vd24pOiBKdW1wVG9QYWdlU2VsZWN0SXRlbSB8IGZhbHNlIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgSnVtcFRvUGFnZVNlbGVjdEl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmluZCgodikgPT4gdiA9PT0gdmFsdWUpIHx8IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbmQoKHYpID0+IHYuZGF0YS5wYWdlSWQgPT09IHZhbHVlKSB8fCBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgQnVpbGRlckNvbmRpdGlvbiwgdHlwZSBCdWlsZGVyQ29uZGl0aW9uRHRvIH0gZnJvbSBcIi4vY29uZGl0aW9uL0J1aWxkZXItY29uZGl0aW9uXCI7XG5pbXBvcnQge1xuICBCdWlsZGVyQ29uZGl0aW9uR3JvdXAsXG4gIHR5cGUgQnVpbGRlckNvbmRpdGlvbkdyb3VwRHRvLFxuICB0eXBlIENvbmRpdGlvbkdyb3VwVHlwZSxcbn0gZnJvbSBcIi4vY29uZGl0aW9uL0J1aWxkZXItY29uZGl0aW9uLWdyb3VwXCI7XG5pbXBvcnQgdHlwZSB7IFJ1bGVJbnB1dCB9IGZyb20gXCIuL1J1bGVJbnB1dFwiO1xuaW1wb3J0IHsgQnVpbGRlck9iamVjdCB9IGZyb20gXCIuLi9CdWlsZGVyT2JqZWN0XCI7XG5pbXBvcnQgeyBUYWdBY3Rpb25NYW5hZ2VyIH0gZnJvbSBcIi4vdGFnLWFjdGlvbi1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBQYWdlQWN0aW9uTWFuYWdlciB9IGZyb20gXCIuL3BhZ2UtYWN0aW9uLW1hbmFnZXJcIjtcbmltcG9ydCB7IEp1bXBUb0FjdGlvbk1hbmFnZXIgfSBmcm9tIFwiLi9qdW1wLXRvLWFjdGlvbi1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBDb25kaXRpb24sIFBhZ2VJRCwgUGFnZVF1ZUNvbW1hbmQsIFBhZ2VRdWVSdWxlcyB9IGZyb20gXCJAbWVkaWEtcXVlc3QvZW5naW5lXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlclJ1bGVEdG8ge1xuICByZWFkb25seSB0eXBlOiBDb25kaXRpb25Hcm91cFR5cGU7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgY29uZGl0aW9uczogUmVhZG9ubHlBcnJheTxCdWlsZGVyQ29uZGl0aW9uRHRvIHwgQnVpbGRlckNvbmRpdGlvbkdyb3VwRHRvPjtcbiAgcmVhZG9ubHkgZXhjbHVkZVRhZ3M6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPjtcbiAgcmVhZG9ubHkgZXhjbHVkZVBhZ2VzOiBSZWFkb25seUFycmF5PFBhZ2VJRD47XG4gIHJlYWRvbmx5IGp1bXBUb1BhZ2U6IHN0cmluZyB8IGZhbHNlO1xufVxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJSdWxlIGV4dGVuZHMgQnVpbGRlck9iamVjdDxcImJ1aWxkZXItcnVsZVwiLCBCdWlsZGVyUnVsZUR0bz4ge1xuICByZWFkb25seSBvYmplY3RUeXBlOiBcImJ1aWxkZXItcnVsZVwiID0gXCJidWlsZGVyLXJ1bGVcIjtcbiAgcHJpdmF0ZSBfdHlwZTogQ29uZGl0aW9uR3JvdXBUeXBlID0gXCJhbGxcIjtcbiAgcHVibGljIG5hbWUgPSBcIlJ1bGUgbmFtZVwiO1xuICAvLyBwdWJsaWMgY291bnROdW1iZXIgPSAxO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb25kaXRpb25zOiBBcnJheTxCdWlsZGVyQ29uZGl0aW9uIHwgQnVpbGRlckNvbmRpdGlvbkdyb3VwPiA9IFtdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RhZ0FjdGlvbk1hbmFnZXI6IFRhZ0FjdGlvbk1hbmFnZXI7XG4gIHByaXZhdGUgX3BhZ2VBY3Rpb25NYW5hZ2VyOiBQYWdlQWN0aW9uTWFuYWdlcjtcbiAgcmVhZG9ubHkganVtcFRvQWN0aW9uTWFuYWdlcjogSnVtcFRvQWN0aW9uTWFuYWdlcjtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBmcm9tRHRvID0gKGR0bzogQnVpbGRlclJ1bGVEdG8sIGlucHV0OiBSdWxlSW5wdXQpOiBCdWlsZGVyUnVsZSA9PiB7XG4gICAgcmV0dXJuIG5ldyBCdWlsZGVyUnVsZShkdG8sIGlucHV0KTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkdG86IEJ1aWxkZXJSdWxlRHRvLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3J1bGVJbnB1dDogUnVsZUlucHV0LFxuICApIHtcbiAgICBzdXBlcihkdG8pO1xuICAgIGNvbnN0IGNvbmRpdGlvbklucHV0ID0gdGhpcy5fcnVsZUlucHV0LmdldENvbmRpdGlvbklucHV0KCk7XG4gICAgdGhpcy5uYW1lID0gZHRvLm5hbWUgPz8gXCJcIjtcbiAgICB0aGlzLl90eXBlID0gZHRvLnR5cGUgPz8gXCJhbnlcIjtcbiAgICB0aGlzLl9jb25kaXRpb25zID0gZHRvLmNvbmRpdGlvbnMucmVkdWNlPEFycmF5PEJ1aWxkZXJDb25kaXRpb24gfCBCdWlsZGVyQ29uZGl0aW9uR3JvdXA+PigoYWNjLCBjdXJyKSA9PiB7XG4gICAgICBpZiAoY3Vyci5raW5kID09PSBcImNvbmRpdGlvblwiKSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IEJ1aWxkZXJDb25kaXRpb24uZnJvbUR0byhjdXJyLCBjb25kaXRpb25JbnB1dCk7XG4gICAgICAgIGFjYy5wdXNoKGNvbmRpdGlvbik7XG4gICAgICB9XG4gICAgICBpZiAoY3Vyci5raW5kID09PSBcImNvbmRpdGlvbi1ncm91cFwiKSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbkdyb3VwID0gQnVpbGRlckNvbmRpdGlvbkdyb3VwLmZyb21EdG8oY3VyciwgY29uZGl0aW9uSW5wdXQpO1xuICAgICAgICBhY2MucHVzaChjb25kaXRpb25Hcm91cCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbiAgICAvLyBUT0RPIENIRUNLIFdJVEggQ1VSUkVOVCBPUFRJT05TLlxuICAgIHRoaXMuX3BhZ2VBY3Rpb25NYW5hZ2VyID0gbmV3IFBhZ2VBY3Rpb25NYW5hZ2VyKF9ydWxlSW5wdXQuZXhjbHVkZUJ5UGFnZUlkQWN0aW9ucywgZHRvLmV4Y2x1ZGVQYWdlcyk7XG4gICAgLy8gdGhpcy5leGNsdWRlQnlQYWdlSWREdG9MaXN0LnB1c2goLi4uZHRvLmV4Y2x1ZGVQYWdlcyk7XG4gICAgdGhpcy5fdGFnQWN0aW9uTWFuYWdlciA9IG5ldyBUYWdBY3Rpb25NYW5hZ2VyKF9ydWxlSW5wdXQuZXhjbHVkZUJ5VGFnQWN0aW9ucywgZHRvLmV4Y2x1ZGVUYWdzKTtcblxuICAgIHRoaXMuanVtcFRvQWN0aW9uTWFuYWdlciA9IG5ldyBKdW1wVG9BY3Rpb25NYW5hZ2VyKF9ydWxlSW5wdXQuanVtcFRvUGFnZUFjdGlvbnMsIGR0by5qdW1wVG9QYWdlKTtcbiAgfVxuXG4gIGdldCBjb25kaXRpb25zKCk6IFJlYWRvbmx5QXJyYXk8QnVpbGRlckNvbmRpdGlvbkdyb3VwIHwgQnVpbGRlckNvbmRpdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9jb25kaXRpb25zO1xuICB9XG5cbiAgZ2V0VGFnQWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFnQWN0aW9uTWFuYWdlci5zZWxlY3RJdGVtcztcbiAgfVxuXG4gIGdldFZhbGlkUGFnZUFjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VBY3Rpb25NYW5hZ2VyLnNlbGVjdEl0ZW1zO1xuICB9XG5cbiAgZ2V0IGNvbmRpdGlvbkNvdW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jb25kaXRpb25zLmxlbmd0aDtcbiAgfVxuXG4gIHNldCB0eXBlKHR5cGU6IENvbmRpdGlvbkdyb3VwVHlwZSkge1xuICAgIGlmIChCdWlsZGVyQ29uZGl0aW9uR3JvdXAuaXNDb25kaXRpb25Hcm91cFR5cGUodHlwZSkpIHtcbiAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiB0aGlzLl90eXBlO1xuICB9XG5cbiAgZGVsZXRlQ29uZGl0aW9uKGNvbmRpdGlvbjogQnVpbGRlckNvbmRpdGlvbiB8IEJ1aWxkZXJDb25kaXRpb25Hcm91cCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fY29uZGl0aW9ucy5pbmRleE9mKGNvbmRpdGlvbik7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLl9jb25kaXRpb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhZGRDb25kaXRpb24oKTogQnVpbGRlckNvbmRpdGlvbiB7XG4gICAgY29uc3QgY29uZGl0aW9uID0gQnVpbGRlckNvbmRpdGlvbi5jcmVhdGUodGhpcy5fcnVsZUlucHV0LmdldENvbmRpdGlvbklucHV0KCkpO1xuICAgIHRoaXMuX2NvbmRpdGlvbnMucHVzaChjb25kaXRpb24pO1xuICAgIHJldHVybiBjb25kaXRpb247XG4gIH1cblxuICBhZGRDb25kaXRpb25Hcm91cCgpOiBCdWlsZGVyQ29uZGl0aW9uR3JvdXAge1xuICAgIGNvbnN0IGR0bzogQnVpbGRlckNvbmRpdGlvbkdyb3VwRHRvID0ge1xuICAgICAga2luZDogXCJjb25kaXRpb24tZ3JvdXBcIixcbiAgICAgIG5hbWU6IFwiXCIsXG4gICAgICB0eXBlOiBcImFsbFwiLFxuICAgICAgY29uZGl0aW9uczogW10sXG4gICAgfTtcbiAgICBjb25zdCBuZXdHcm91cCA9IEJ1aWxkZXJDb25kaXRpb25Hcm91cC5mcm9tRHRvKGR0bywgdGhpcy5fcnVsZUlucHV0LnF1ZXN0aW9uVmFycyk7XG4gICAgdGhpcy5fY29uZGl0aW9ucy5wdXNoKG5ld0dyb3VwKTtcbiAgICByZXR1cm4gbmV3R3JvdXA7XG4gIH1cblxuICBjbG9uZSgpOiBCdWlsZGVyUnVsZUR0byB7XG4gICAgcmV0dXJuIHRoaXMudG9Kc29uKCk7XG4gIH1cblxuICB0b0pzb24oKTogQnVpbGRlclJ1bGVEdG8ge1xuICAgIGNvbnN0IGNvbmRpdGlvbnMgPSB0aGlzLl9jb25kaXRpb25zLm1hcCgoYykgPT4gYy50b0pzb24oKSk7XG4gICAgY29uc3QgZXhjbHVkZVBhZ2VzID0gdGhpcy5fcGFnZUFjdGlvbk1hbmFnZXIuZ2V0Q3VycmVudFNlbGVjdGlvbigpO1xuICAgIGNvbnN0IGV4Y2x1ZGVUYWdzID0gdGhpcy5fdGFnQWN0aW9uTWFuYWdlci5nZXRDdXJyZW50U2VsZWN0aW9uKCk7XG4gICAgY29uc3QganVtcFRvUGFnZSA9IHRoaXMuanVtcFRvQWN0aW9uTWFuYWdlci5nZXRTZWxlY3RlZFBhZ2VJZCgpO1xuICAgIGNvbnN0IGR0bzogQnVpbGRlclJ1bGVEdG8gPSB7XG4gICAgICB0eXBlOiB0aGlzLl90eXBlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgY29uZGl0aW9ucyxcbiAgICAgIGV4Y2x1ZGVQYWdlcyxcbiAgICAgIGp1bXBUb1BhZ2UsXG4gICAgICBleGNsdWRlVGFncyxcbiAgICB9O1xuICAgIHJldHVybiBkdG87XG4gIH1cbiAgdG9FbmdpbmVSdWxlKCk6IFBhZ2VRdWVSdWxlcyB7XG4gICAgY29uc3QgY29uZGl0aW9uczogQ29uZGl0aW9uW10gPSBbXTtcbiAgICB0aGlzLl9jb25kaXRpb25zLmZvckVhY2goKGMpID0+IHtcbiAgICAgIGlmIChjKSB7XG4gICAgICAgIGlmIChjIGluc3RhbmNlb2YgQnVpbGRlckNvbmRpdGlvbikge1xuICAgICAgICAgIGNvbnN0IHNpbXBsZUNvbmRpdGlvbiA9IGMudG9FbmdpbmVDb25kaXRpb24oKTtcbiAgICAgICAgICBpZiAoc2ltcGxlQ29uZGl0aW9uKSB7XG4gICAgICAgICAgICBjb25kaXRpb25zLnB1c2goc2ltcGxlQ29uZGl0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgaW5zdGFuY2VvZiBCdWlsZGVyQ29uZGl0aW9uR3JvdXApIHtcbiAgICAgICAgICBjb25zdCBjb21wbGV4Q29uZGl0aW9uID0gYy50b0VuZ2luZUNvbmRpdGlvbkNvbXBsZXgoKTtcbiAgICAgICAgICBpZiAoY29tcGxleENvbmRpdGlvbikgY29uZGl0aW9ucy5wdXNoKGNvbXBsZXhDb25kaXRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgbGV0IGFsbDogQ29uZGl0aW9uW10gPSBbXTtcbiAgICBsZXQgc29tZTogQ29uZGl0aW9uW10gPSBbXTtcblxuICAgIGlmICh0aGlzLnR5cGUgPT09IFwiYWxsXCIpIHtcbiAgICAgIGFsbCA9IFsuLi5jb25kaXRpb25zXTtcbiAgICB9XG4gICAgY29uc3QgcGFnZVF1ZUNvbW1hbmRzOiBBcnJheTxQYWdlUXVlQ29tbWFuZD4gPSBbXTtcbiAgICBjb25zdCBtYXliZUp1bXBUb1BhZ2UgPSB0aGlzLmp1bXBUb0FjdGlvbk1hbmFnZXIuc2VsZWN0ZWQ7XG4gICAgaWYgKG1heWJlSnVtcFRvUGFnZSkge1xuICAgICAgY29uc3QganVtcENvbW1hbmQ6IFBhZ2VRdWVDb21tYW5kID0ge1xuICAgICAgICBraW5kOiBcIlBBR0VfUVVFX0pVTVBfVE9fUEFHRV9DT01NQU5EXCIsXG4gICAgICAgIHRhcmdldDogXCJQQUdFX1FVRVwiLFxuICAgICAgICB0YXJnZXRJZDogXCJQQUdFX1FVRVwiLFxuICAgICAgICBwYXlsb2FkOiB7IHBhZ2VJZDogbWF5YmVKdW1wVG9QYWdlLmRhdGEucGFnZUlkIH0sXG4gICAgICB9O1xuICAgICAgcGFnZVF1ZUNvbW1hbmRzLnB1c2goanVtcENvbW1hbmQpO1xuICAgIH1cblxuICAgIGNvbnN0IGV4Y2x1ZGVQYWdlQnlJZExpc3QgPSB0aGlzLl9wYWdlQWN0aW9uTWFuYWdlci5nZXRFbmdpbmVBY3Rpb24oKS5tYXAoKGEpID0+IGEucGFnZUlkKTtcbiAgICBpZiAoZXhjbHVkZVBhZ2VCeUlkTGlzdC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNvbW1hbmQ6IFBhZ2VRdWVDb21tYW5kID0ge1xuICAgICAgICBraW5kOiBcIlBBR0VfUVVFX0VYQ0xVREVfQllfUEFHRV9JRF9DT01NQU5EXCIsXG4gICAgICAgIHRhcmdldDogXCJQQUdFX1FVRVwiLFxuICAgICAgICB0YXJnZXRJZDogXCJQQUdFX1FVRVwiLFxuICAgICAgICBwYXlsb2FkOiB7IHBhZ2VJZHM6IFsuLi5leGNsdWRlUGFnZUJ5SWRMaXN0XSB9LFxuICAgICAgfTtcbiAgICAgIHBhZ2VRdWVDb21tYW5kcy5wdXNoKGNvbW1hbmQpO1xuICAgIH1cbiAgICBjb25zdCBleGNsdWRlVGFncyA9IHRoaXMuX3RhZ0FjdGlvbk1hbmFnZXIuZ2V0RW5naW5lQWN0aW9ucygpLm1hcCgodGFnQSkgPT4gdGFnQS50YWcpO1xuICAgIGlmIChleGNsdWRlVGFncy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGV4Y2x1ZGVUYWdzQ29tbWFuZDogUGFnZVF1ZUNvbW1hbmQgPSB7XG4gICAgICAgIGtpbmQ6IFwiUEFHRV9RVUVfRVhDTFVERV9CWV9UQUdfQ09NTUFORFwiLFxuICAgICAgICB0YXJnZXQ6IFwiUEFHRV9RVUVcIixcbiAgICAgICAgdGFyZ2V0SWQ6IFwiUEFHRV9RVUVcIixcbiAgICAgICAgcGF5bG9hZDogeyB0YWdJZHM6IFsuLi5leGNsdWRlVGFnc10gfSxcbiAgICAgIH07XG4gICAgICBwYWdlUXVlQ29tbWFuZHMucHVzaChleGNsdWRlVGFnc0NvbW1hbmQpO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bGU6IFBhZ2VRdWVSdWxlcyA9IHtcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLm5hbWUsXG4gICAgICBhbGwsXG4gICAgICBzb21lLFxuICAgICAgb25GYWlsdXJlOiBbXSxcbiAgICAgIG9uU3VjY2VzczogcGFnZVF1ZUNvbW1hbmRzLFxuICAgIH07XG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IEJ1aWxkZXJTY2hlbWFEdG8gfSBmcm9tIFwiLi4vQnVpbGRlci1zY2hlbWFcIjtcbmltcG9ydCB7IFNjaGVtYUR0byB9IGZyb20gXCJAbWVkaWEtcXVlc3QvZW5naW5lXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFRoZW1lQ29tcGlsZXI8VGhlbWVTY2hlbWE+IHtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSB0aGVtZTogVGhlbWVTY2hlbWEpIHt9XG4gIGFic3RyYWN0IGNvbXBpbGUoc2NoZW1hOiBCdWlsZGVyU2NoZW1hRHRvKTogU2NoZW1hRHRvO1xufVxuIiwgImltcG9ydCB7IERTdGF0ZSwgQm9vbGVhblN0YXRlUHJvcGVydHkgfSBmcm9tIFwiQG1lZGlhLXF1ZXN0L2VuZ2luZVwiO1xuXG5leHBvcnQgbmFtZXNwYWNlIERTdGF0ZVByb3BzIHtcbiAgZXhwb3J0IGNvbnN0IG1lZGlhQmxvY2tlZEJ5U2VxdWVuY2UgPSBuZXcgQm9vbGVhblN0YXRlUHJvcGVydHkoXG4gICAgXCJtZWRpYS1ibG9ja2VkLWJ5LWF1dG9wbGF5LXNlcXVlbmNlXCIsXG4gICAgZmFsc2UsXG4gICAgXCJTaG91bGQgYmUgdHJ1ZSBpZiB0aGUgcGFnZSBpcyBpbiBhIGF1dG9wbGF5LXNlcXVlbmNlLiBUaGUgYXV0b3BsYXktc2VxdWVuY2Ugd2lsbCBhbHdheXMgYmxvY2sgb3RoZXIgbWVkaWEuXCIsXG4gICk7XG4gIGV4cG9ydCBjb25zdCBpbnB1dEJsb2NraW5nQnlTZXF1ZW5jZSA9IG5ldyBCb29sZWFuU3RhdGVQcm9wZXJ0eShcImlucHV0LWJsb2NrZWQtYnktYXV0b3BsYXktc2VxdWVuY2VcIiwgZmFsc2UsIFwiXCIpO1xuICBleHBvcnQgY29uc3QgbWVkaWFCbG9ja2VkQnlBdWRpbyA9IG5ldyBCb29sZWFuU3RhdGVQcm9wZXJ0eShcIm1lZGlhLWJsb2NrZWQtYnktYXVkaW9cIiwgZmFsc2UsIFwiXCIpO1xuICBleHBvcnQgY29uc3QgaW5wdXRCbG9ja2VkQnlBdWRpbyA9IG5ldyBCb29sZWFuU3RhdGVQcm9wZXJ0eShcImlucHV0LWJsb2NrZWQtYnktYXVkaW9cIiwgZmFsc2UsIFwiXCIpO1xuICBleHBvcnQgY29uc3QgbWVkaWFCbG9ja2VkQnlWaWRlbyA9IG5ldyBCb29sZWFuU3RhdGVQcm9wZXJ0eShcIm1lZGlhLWJsb2NrZWQtYnktdmlkZW9cIiwgZmFsc2UsIFwiXCIpO1xuICBleHBvcnQgY29uc3QgaW5wdXRCbG9ja2VkQnlWaWRlbyA9IG5ldyBCb29sZWFuU3RhdGVQcm9wZXJ0eShcbiAgICBcImlucHV0LWJsb2NrZWQtYnktdmlkZW9cIixcbiAgICBmYWxzZSxcbiAgICBcIlNob3VsZCBiZSB0cnVlIGlmIGEgdmlkZW8gaXMgcGxheWluZywgYW5kIHRoaXMgdmlkZW8gaXMgc3VwcG9zZSB0byBibG9jayB1c2VyLWlucHV0LlwiLFxuICApO1xuICBleHBvcnQgY29uc3QgdXNlclBhdXNlZFZpZGVvID0gbmV3IEJvb2xlYW5TdGF0ZVByb3BlcnR5KFxuICAgIFwidXNlci1wYXVzZWQtdmlkZW9cIixcbiAgICBmYWxzZSxcbiAgICBcIlNob3VsZCBiZSB0cnVlIGlmIHVzZXIgcGF1c2VkIHRoZSB2aWRlbyBieSBwcmVzc2luZyB0aGUgcGF1c2UtYnV0dG9uLlwiLFxuICApO1xuICBleHBvcnQgY29uc3QgdmlkZW9Jc1BsYXlpbmcgPSBuZXcgQm9vbGVhblN0YXRlUHJvcGVydHkoXG4gICAgXCJ2aWRlby1pcy1wbGF5aW5nXCIsXG4gICAgZmFsc2UsXG4gICAgXCJTaG91bGQgYmUgdHJ1ZSBpZiBhbnkgdmlkZW8gaXMgcGxheWluZyBvbiB0aGUgcGFnZS5cIixcbiAgKTtcbiAgZXhwb3J0IGNvbnN0IGF1ZGlvSXNQbGF5aW5nID0gbmV3IEJvb2xlYW5TdGF0ZVByb3BlcnR5KFxuICAgIFwiYXVkaW8taXMtcGxheWluZ1wiLFxuICAgIGZhbHNlLFxuICAgIFwiU2hvdWxkIGJlIHRydSBpZiBhbnkgYXVkaW8gaXMgcGxheWluZyBvbiBwYWdlXCIsXG4gICk7XG4gIGNvbnN0IF9wcm9wcyA9IHtcbiAgICBpbnB1dEJsb2NrZWRCeUF1ZGlvLFxuICAgIG1lZGlhQmxvY2tlZEJ5QXVkaW8sXG4gICAgaW5wdXRCbG9ja2luZ0J5U2VxdWVuY2UsXG4gICAgbWVkaWFCbG9ja2VkQnlTZXF1ZW5jZSxcbiAgICBpbnB1dEJsb2NrZWRCeVZpZGVvLFxuICAgIG1lZGlhQmxvY2tlZEJ5VmlkZW8sXG4gICAgdXNlclBhdXNlZFZpZGVvLFxuICAgIHZpZGVvSXNQbGF5aW5nLFxuICB9O1xuXG4gIGNvbnN0IGRpc2FibGVBdWRpb0ljb25RdWVyeTogRFN0YXRlLlN0YXRlUXVlcnkgPSB7XG4gICAgbmFtZTogXCJkaXNhYmxlLUF1ZGlvXCIsXG4gICAgY29uZGl0aW9uOiB7XG4gICAgICBraW5kOiBcImNvbXBsZXgtY29uZGl0aW9uXCIsXG4gICAgICBuYW1lOiBcImF1ZGlvLWNvbnRyb2xzLWFyZS1ibG9ja2VkXCIsXG4gICAgICBzb21lOiBbXG4gICAgICAgIG1lZGlhQmxvY2tlZEJ5U2VxdWVuY2UuZ2V0SXNUcnVlQ29uZGl0aW9uKCksXG4gICAgICAgIG1lZGlhQmxvY2tlZEJ5QXVkaW8uZ2V0SXNUcnVlQ29uZGl0aW9uKCksXG4gICAgICAgIG1lZGlhQmxvY2tlZEJ5VmlkZW8uZ2V0SXNUcnVlQ29uZGl0aW9uKCksXG4gICAgICBdLFxuICAgICAgYWxsOiBbXSxcbiAgICB9LFxuICB9O1xuICBjb25zdCBoaWRlVmlkZW9QbGF5UXVlcnk6IERTdGF0ZS5TdGF0ZVF1ZXJ5ID0ge1xuICAgIG5hbWU6IFwiaGlkZS12aWRlby1wbGF5LWJ1dHRvblwiLFxuICAgIGNvbmRpdGlvbjoge1xuICAgICAga2luZDogXCJjb21wbGV4LWNvbmRpdGlvblwiLFxuICAgICAgbmFtZTogXCJ2aWRlby1pcy1wbGF5aW5nLWNvbmRpdGlvblwiLFxuICAgICAgYWxsOiBbdmlkZW9Jc1BsYXlpbmcuZ2V0SXNUcnVlQ29uZGl0aW9uKCldLFxuICAgICAgc29tZTogW10sXG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBoaWRlVmlkZW9QYXVzZVF1ZXJ5OiBEU3RhdGUuU3RhdGVRdWVyeSA9IHtcbiAgICBuYW1lOiBcImhpZGUtdmlkZW8tcGF1c2UtYnV0dG9uXCIsXG4gICAgY29uZGl0aW9uOiB7XG4gICAgICBraW5kOiBcImNvbXBsZXgtY29uZGl0aW9uXCIsXG4gICAgICBuYW1lOiBcInZpZGVvLWlzLW5vdC1wbGF5aW5nLWNvbmRpdGlvblwiLFxuICAgICAgYWxsOiBbdmlkZW9Jc1BsYXlpbmcuZ2V0SXNGYWxzZUNvbmRpdGlvbigpXSxcbiAgICAgIHNvbWU6IFtdLFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgZGlzYWJsZVZpZGVvUGxheVF1ZXJ5OiBEU3RhdGUuU3RhdGVRdWVyeSA9IHtcbiAgICBuYW1lOiBcImRpc2FibGUtdmlkZW9cIixcbiAgICBjb25kaXRpb246IHtcbiAgICAgIGtpbmQ6IFwiY29tcGxleC1jb25kaXRpb25cIixcbiAgICAgIG5hbWU6IFwidmlkZW8tcGxheSBzaGFsbCBiZSBkaXNhYmxlZFwiLFxuICAgICAgYWxsOiBbdXNlclBhdXNlZFZpZGVvLmdldElzRmFsc2VDb25kaXRpb24oKV0sXG4gICAgICBzb21lOiBbXG4gICAgICAgIG1lZGlhQmxvY2tlZEJ5U2VxdWVuY2UuZ2V0SXNUcnVlQ29uZGl0aW9uKCksXG4gICAgICAgIG1lZGlhQmxvY2tlZEJ5QXVkaW8uZ2V0SXNUcnVlQ29uZGl0aW9uKCksXG4gICAgICAgIG1lZGlhQmxvY2tlZEJ5VmlkZW8uZ2V0SXNUcnVlQ29uZGl0aW9uKCksXG4gICAgICAgIGF1ZGlvSXNQbGF5aW5nLmdldElzVHJ1ZUNvbmRpdGlvbigpLFxuICAgICAgXSxcbiAgICB9LFxuICB9O1xuICBjb25zdCBkaXNhYmxlVXNlcklucHV0UXVlcnk6IERTdGF0ZS5TdGF0ZVF1ZXJ5ID0ge1xuICAgIG5hbWU6IFwiZGlzYWJsZS11c2VyLWlucHV0XCIsXG4gICAgY29uZGl0aW9uOiB7XG4gICAgICBraW5kOiBcImNvbXBsZXgtY29uZGl0aW9uXCIsXG4gICAgICBuYW1lOiBcIlVzZXIgaW5wdXQgc2hhbGwgYmUgZGlzYWJsZWQgKFJlc3BvbnNlLWJ1dHRvbnMsIEZvcm1Db250cm9scy4uLilcIixcbiAgICAgIGFsbDogW10sXG4gICAgICBzb21lOiBbXG4gICAgICAgIGlucHV0QmxvY2tlZEJ5QXVkaW8uZ2V0SXNUcnVlQ29uZGl0aW9uKCksXG4gICAgICAgIGlucHV0QmxvY2tlZEJ5VmlkZW8uZ2V0SXNUcnVlQ29uZGl0aW9uKCksXG4gICAgICAgIGlucHV0QmxvY2tpbmdCeVNlcXVlbmNlLmdldElzVHJ1ZUNvbmRpdGlvbigpLFxuICAgICAgXSxcbiAgICB9LFxuICB9O1xuICBleHBvcnQgY29uc3QgX1F1ZXJpZXMgPSB7XG4gICAgZGlzYWJsZUF1ZGlvSWNvblF1ZXJ5LFxuICAgIGRpc2FibGVWaWRlb1BsYXlRdWVyeSxcbiAgICBkaXNhYmxlVXNlcklucHV0UXVlcnksXG4gICAgaGlkZVZpZGVvUGF1c2VRdWVyeSxcbiAgICBoaWRlVmlkZW9QbGF5UXVlcnksXG4gIH07XG4gIGV4cG9ydCBjb25zdCBhbGxEZWZhdWx0UHJvcGVydGllcyA9IE9iamVjdC52YWx1ZXMoX3Byb3BzKTtcbiAgZXhwb3J0IGNvbnN0IGFsbERlZmF1bHRRdWVyaWVzID0gT2JqZWN0LnZhbHVlcyhfUXVlcmllcyk7XG59XG4iLCAiaW1wb3J0IHsgRENvbW1hbmQsIEVsZW1lbnRDb21tYW5kIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcbmltcG9ydCB7IERTdHlsZSB9IGZyb20gXCJAbWVkaWEtcXVlc3QvZW5naW5lXCI7XG5pbXBvcnQgeyBERWxlbWVudER0byB9IGZyb20gXCJAbWVkaWEtcXVlc3QvZW5naW5lXCI7XG5cbmV4cG9ydCBuYW1lc3BhY2UgVGhlbWVVdGlscyB7XG4gIGV4cG9ydCBjb25zdCBkaXNhYmxlQ2xpY2tDb21tYW5kcyA9IChlbGVtZW50SWQ6IHN0cmluZywgc3R5bGVDaGFuZ2VzOiBQYXJ0aWFsPERTdHlsZT4pOiBFbGVtZW50Q29tbWFuZFtdID0+IHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBraW5kOiBcIkVMRU1FTlRfRElTQUJMRV9DTElDS19DT01NQU5EXCIsXG4gICAgICAgIHRhcmdldDogXCJFTEVNRU5UXCIsXG4gICAgICAgIHRhcmdldElkOiBlbGVtZW50SWQsXG4gICAgICAgIHBheWxvYWQ6IHt9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2luZDogXCJFTEVNRU5UX1NUWUxFX0NPTU1BTkRcIixcbiAgICAgICAgdGFyZ2V0OiBcIkVMRU1FTlRcIixcbiAgICAgICAgdGFyZ2V0SWQ6IGVsZW1lbnRJZCxcbiAgICAgICAgcGF5bG9hZDogeyBjaGFuZ2VzOiBzdHlsZUNoYW5nZXMgfSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfTtcblxuICBleHBvcnQgY29uc3QgZW5hYmxlQ2xpY2tDb21tYW5kcyA9IChlbGVtZW50SWQ6IHN0cmluZywgc3R5bGVDaGFuZ2VzOiBQYXJ0aWFsPERTdHlsZT4pOiBFbGVtZW50Q29tbWFuZFtdID0+IHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBraW5kOiBcIkVMRU1FTlRfRU5BQkxFX0NMSUNLX0NPTU1BTkRcIixcbiAgICAgICAgdGFyZ2V0OiBcIkVMRU1FTlRcIixcbiAgICAgICAgdGFyZ2V0SWQ6IGVsZW1lbnRJZCxcbiAgICAgICAgcGF5bG9hZDoge30sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBraW5kOiBcIkVMRU1FTlRfU1RZTEVfQ09NTUFORFwiLFxuICAgICAgICB0YXJnZXQ6IFwiRUxFTUVOVFwiLFxuICAgICAgICB0YXJnZXRJZDogZWxlbWVudElkLFxuICAgICAgICBwYXlsb2FkOiB7IGNoYW5nZXM6IHN0eWxlQ2hhbmdlcyB9LFxuICAgICAgfSxcbiAgICBdO1xuICB9O1xuICBleHBvcnQgY29uc3QgaGlkZUNvbW1hbmQgPSAoZWxlbWVudElkOiBzdHJpbmcpOiBFbGVtZW50Q29tbWFuZCA9PiB7XG4gICAgY29uc3QgaGlkZUNvbW1hbmQ6IERDb21tYW5kID0ge1xuICAgICAga2luZDogXCJFTEVNRU5UX1NUWUxFX0NPTU1BTkRcIixcbiAgICAgIHRhcmdldDogXCJFTEVNRU5UXCIsXG4gICAgICB0YXJnZXRJZDogZWxlbWVudElkLFxuICAgICAgcGF5bG9hZDogeyBjaGFuZ2VzOiB7IHZpc2liaWxpdHk6IFwiaGlkZGVuXCIgfSB9LFxuICAgIH07XG4gICAgcmV0dXJuIGhpZGVDb21tYW5kO1xuICB9O1xuICBleHBvcnQgY29uc3Qgc2hvd0NvbW1hbmQgPSAoZWxlbWVudElkOiBzdHJpbmcpOiBFbGVtZW50Q29tbWFuZCA9PiB7XG4gICAgY29uc3Qgc2hvd0NvbW1hbmQ6IERDb21tYW5kID0ge1xuICAgICAga2luZDogXCJFTEVNRU5UX1NUWUxFX0NPTU1BTkRcIixcbiAgICAgIHRhcmdldDogXCJFTEVNRU5UXCIsXG4gICAgICB0YXJnZXRJZDogZWxlbWVudElkLFxuICAgICAgcGF5bG9hZDogeyBjaGFuZ2VzOiB7IHZpc2liaWxpdHk6IFwidmlzaWJsZVwiIH0gfSxcbiAgICB9O1xuICAgIHJldHVybiBzaG93Q29tbWFuZDtcbiAgfTtcblxuICBleHBvcnQgY29uc3Qgc3BhY2VFdmVubHlYID0gPFQgZXh0ZW5kcyBQaWNrPERFbGVtZW50RHRvLCBcInN0eWxlXCI+PihcbiAgICBpdGVtczogUmVhZG9ubHlBcnJheTxUPixcbiAgICBvcHRpb25zOiB7IHN0YXJ0QXQ6IG51bWJlcjsgZW5kQXQ6IG51bWJlcjsgZGVmYXVsdEl0ZW1XaWR0aDogbnVtYmVyIH0gPSB7XG4gICAgICBzdGFydEF0OiAwLFxuICAgICAgZW5kQXQ6IDEwMCxcbiAgICAgIGRlZmF1bHRJdGVtV2lkdGg6IDUsXG4gICAgfSxcbiAgKTogUmVhZG9ubHlBcnJheTxUPiA9PiB7XG4gICAgY29uc3Qgc3RhcnRBdCA9IG9wdGlvbnM/LnN0YXJ0QXQgPz8gMDtcbiAgICBjb25zdCBlbmRBdCA9IG9wdGlvbnM/LmVuZEF0ID8/IDEwMDtcbiAgICBjb25zdCByYW5nZSA9IE1hdGguYWJzKGVuZEF0IC0gc3RhcnRBdCk7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBtYXJnaW5Db3VudCA9IGl0ZW1zLmxlbmd0aCArIDE7XG4gICAgY29uc3QgZGVmYXVsdFdpZHRoID0gb3B0aW9ucy5kZWZhdWx0SXRlbVdpZHRoID8/IDE1MCAvIG1hcmdpbkNvdW50O1xuXG4gICAgbGV0IHRvdGFsV2lkdGhPZkVsZW1lbnRzID0gaXRlbXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICBjb25zdCB3ID0gY3Vyci5zdHlsZS53ID8/IGRlZmF1bHRXaWR0aDtcbiAgICAgIHJldHVybiBwcmV2ICsgdztcbiAgICB9LCAwKTtcblxuICAgIGxldCBjdXJzb3IgPSBzdGFydEF0O1xuICAgIGNvbnN0IHJlc3QgPSBNYXRoLm1heChyYW5nZSAtIHRvdGFsV2lkdGhPZkVsZW1lbnRzLCAwKTtcbiAgICBjb25zdCBtYXJnaW4gPSByZXN0IC8gbWFyZ2luQ291bnQ7XG5cbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBjdXJzb3IgPSBjdXJzb3IgKyBtYXJnaW47XG4gICAgICBjb25zdCB3ID0gaXRlbS5zdHlsZS53ID8/IGRlZmF1bHRXaWR0aDtcbiAgICAgIGNvbnN0IHggPSBjdXJzb3I7XG4gICAgICBjdXJzb3IgPSBjdXJzb3IgKyB3O1xuICAgICAgaXRlbS5zdHlsZS53ID0gdztcbiAgICAgIGl0ZW0uc3R5bGUueCA9IHg7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaXRlbXM7XG4gIH07XG5cbiAgZXhwb3J0IGNvbnN0IGNlbnRlclkgPSAoKTogUGljazxEU3R5bGUsIFwieVwiIHwgXCJ0cmFuc2Zvcm1cIj4gPT4gKHtcbiAgICB5OiA1MCxcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAlLCA1MCUpXCIsXG4gIH0pO1xuICBleHBvcnQgY29uc3QgY2VudGVyWCA9ICgpOiBQaWNrPERTdHlsZSwgXCJ4XCIgfCBcInRyYW5zZm9ybVwiPiA9PiAoe1xuICAgIHg6IDUwLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoLTUwJSwgMCUpXCIsXG4gIH0pO1xuXG4gIGV4cG9ydCBjb25zdCBjZW50ZXJYWSA9ICgpOiBQaWNrPERTdHlsZSwgXCJ4XCIgfCBcInlcIiB8IFwidHJhbnNmb3JtXCI+ID0+ICh7XG4gICAgeDogNTAsXG4gICAgeTogNTAsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgtNTAlLCA1MCUpXCIsXG4gIH0pO1xufVxuIiwgImltcG9ydCB7IEFic3RyYWN0VGhlbWVDb21waWxlciB9IGZyb20gXCIuL0Fic3RyYWN0VGhlbWVDb21waWxlclwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyU2NoZW1hRHRvIH0gZnJvbSBcIi4uL0J1aWxkZXItc2NoZW1hXCI7XG5pbXBvcnQgeyBCdWlsZGVyU2NoZW1hIH0gZnJvbSBcIi4uL0J1aWxkZXItc2NoZW1hXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJQYWdlRHRvIH0gZnJvbSBcIi4uL0J1aWxkZXItcGFnZVwiO1xuaW1wb3J0IHsgRFN0YXRlUHJvcHMgfSBmcm9tIFwiLi9zdGFuZGFyZC1wcm9wc1wiO1xuaW1wb3J0IHsgVGhlbWVVdGlscyB9IGZyb20gXCIuL3RoZW1lLXV0aWxzXCI7XG5pbXBvcnQgeyBEZWZhdWx0VGhlbWUsIHR5cGUgSURlZmF1bHRUaGVtZSB9IGZyb20gXCIuL0lEZWZhdWx0VGhlbWVcIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRlck1haW5JbWFnZUR0byB9IGZyb20gXCIuLi9CdWlsZGVyTWFpbkltYWdlRHRvXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJNYWluVmlkZW9EdG8gfSBmcm9tIFwiLi4vQnVpbGRlck1haW5WaWRlb0R0b1wiO1xuaW1wb3J0IHtcbiAgREF1ZGlvRHRvLFxuICBEQXV0b1BsYXlTZXF1ZW5jZSxcbiAgRENvbW1hbmQsXG4gIEREaXZEdG8sXG4gIERFbGVtZW50RHRvLFxuICBESW1nRHRvLFxuICBEVGV4dER0byxcbiAgRFV0aWwsXG4gIERWaWRlb0R0byxcbiAgRmFjdCxcbiAgUGFnZUR0byxcbiAgUGFnZVF1ZUNvbW1hbmQsXG4gIFJ1bGUsXG4gIFNjaGVtYUR0byxcbn0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcbmltcG9ydCB7IEF1ZGlvRmlsZSB9IGZyb20gXCIuLi9tZWRpYS1maWxlc1wiO1xuaW1wb3J0IHsgQnVpbGRlclJ1bGUgfSBmcm9tIFwiLi4vcnVsZWJ1aWxkZXJcIjtcblxuY29uc3QgVSA9IERVdGlsO1xuY29uc3QgZ2VuZXJhdGVFbGVtZW50SWQgPSAoKSA9PiBVLnJhbmRvbVN0cmluZygzMik7XG5leHBvcnQgY2xhc3MgRGVmYXVsdFRoZW1lQ29tcGlsZXIgZXh0ZW5kcyBBYnN0cmFjdFRoZW1lQ29tcGlsZXI8SURlZmF1bHRUaGVtZT4ge1xuICByZWFkb25seSBuYW1lID0gXCJJc3BlIGRlZmF1bHQgdGhlbWUuXCI7XG4gIHByaXZhdGUgcmVhZG9ubHkgVEFHID0gXCJbIERFRkFVTFRfVEhFTUVfQ09NUElMRVIgXTogXCI7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKERlZmF1bHRUaGVtZSk7XG4gIH1cblxuICBwcml2YXRlIGNvbXBpbGVSdWxlcyhzb3VyY2U6IEJ1aWxkZXJTY2hlbWFEdG8pOiBSdWxlPFBhZ2VRdWVDb21tYW5kLCBuZXZlcj5bXSB7XG4gICAgY29uc3QgYnVpbGRlclNjaGVtYSA9IEJ1aWxkZXJTY2hlbWEuZnJvbUpzb24oc291cmNlKTtcbiAgICBjb25zdCBydWxlSW5wdXQgPSBidWlsZGVyU2NoZW1hLmdldFJ1bGVJbnB1dCgpO1xuICAgIGNvbnN0IHBhZ2VRdWVSdWxlczogUnVsZTxQYWdlUXVlQ29tbWFuZCwgbmV2ZXI+W10gPSBbXTtcbiAgICBzb3VyY2UucnVsZXMuZm9yRWFjaCgocnVsZSkgPT4ge1xuICAgICAgY29uc3QgZW5naW5lUnVsZSA9IEJ1aWxkZXJSdWxlLmZyb21EdG8ocnVsZSwgcnVsZUlucHV0KS50b0VuZ2luZVJ1bGUoKTtcbiAgICAgIGlmICghUnVsZS5pc0VtcHR5KGVuZ2luZVJ1bGUpKSB7XG4gICAgICAgIHBhZ2VRdWVSdWxlcy5wdXNoKGVuZ2luZVJ1bGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5ncm91cENvbGxhcHNlZCh0aGlzLlRBRywgXCJUaHJvd3MgYXdheSBlbXB0eSBydWxlLlwiKTtcbiAgICAgICAgY29uc29sZS5sb2cocnVsZSk7XG4gICAgICAgIGNvbnNvbGUubG9nKHJ1bGVJbnB1dCk7XG4gICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcGFnZVF1ZVJ1bGVzO1xuICB9XG5cbiAgY29tcGlsZShzb3VyY2U6IEJ1aWxkZXJTY2hlbWFEdG8pOiBTY2hlbWFEdG8ge1xuICAgIGNvbnN0IHBhZ2VzID0gc291cmNlLnBhZ2VzLm1hcCgocCkgPT4gdGhpcy5jb21waWxlUGFnZShwLCBzb3VyY2UucHJlZml4KSk7XG4gICAgY29uc3QgcnVsZXMgPSB0aGlzLmNvbXBpbGVSdWxlcyhzb3VyY2UpO1xuICAgIC8vIGNvbnNvbGUubG9nKHBhZ2VzLm1hcCgocCkgPT4gcC50YWdzKSk7XG5cbiAgICBjb25zdCBkdG86IFNjaGVtYUR0byA9IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogc291cmNlLmJhY2tncm91bmRDb2xvcixcbiAgICAgIGJhc2VIZWlnaHQ6IHNvdXJjZS5iYXNlSGVpZ2h0LFxuICAgICAgYmFzZVdpZHRoOiBzb3VyY2UuYmFzZVdpZHRoLFxuICAgICAgaWQ6IHNvdXJjZS5pZCxcbiAgICAgIHBhZ2VTZXF1ZW5jZXM6IFtdLFxuICAgICAgcGFnZXMsXG4gICAgICBwcmVkZWZpbmVkRmFjdHM6IFtdLFxuICAgICAgcnVsZXMsXG4gICAgICBzdGF0ZUZyb21FdmVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgb25FdmVudDogXCJWSURFT19FTkRFRF9FVkVOVFwiLFxuICAgICAgICAgIHRoZW5FeGVjdXRlOiBbXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy51c2VyUGF1c2VkVmlkZW8uZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy5tZWRpYUJsb2NrZWRCeVZpZGVvLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgICAgICAgRFN0YXRlUHJvcHMudmlkZW9Jc1BsYXlpbmcuZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9uRXZlbnQ6IFwiVklERU9fUEFVU0VEX0VWRU5UXCIsXG4gICAgICAgICAgdGhlbkV4ZWN1dGU6IFtcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLnZpZGVvSXNQbGF5aW5nLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgICAgICAgRFN0YXRlUHJvcHMubWVkaWFCbG9ja2VkQnlWaWRlby5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25FdmVudDogXCJWSURFT19QTEFZX0VWRU5UXCIsXG4gICAgICAgICAgdGhlbkV4ZWN1dGU6IFtcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLnZpZGVvSXNQbGF5aW5nLmdldFNldFRydWVDb21tYW5kKCksXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy51c2VyUGF1c2VkVmlkZW8uZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9uRXZlbnQ6IFwiQVVESU9fUExBWV9FVkVOVFwiLFxuICAgICAgICAgIHRoZW5FeGVjdXRlOiBbXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy5hdWRpb0lzUGxheWluZy5nZXRTZXRUcnVlQ29tbWFuZCgpLFxuICAgICAgICAgICAgRFN0YXRlUHJvcHMubWVkaWFCbG9ja2VkQnlBdWRpby5nZXRTZXRUcnVlQ29tbWFuZCgpLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvbkV2ZW50OiBcIkFVRElPX0VOREVEX0VWRU5UXCIsXG4gICAgICAgICAgdGhlbkV4ZWN1dGU6IFtcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLmF1ZGlvSXNQbGF5aW5nLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgICAgICAgRFN0YXRlUHJvcHMubWVkaWFCbG9ja2VkQnlBdWRpby5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25FdmVudDogXCJBVURJT19QQVVTRURfRVZFTlRcIixcbiAgICAgICAgICB0aGVuRXhlY3V0ZTogW1xuICAgICAgICAgICAgRFN0YXRlUHJvcHMuYXVkaW9Jc1BsYXlpbmcuZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy5tZWRpYUJsb2NrZWRCeUF1ZGlvLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgc3RhdGVQcm9wczogRFN0YXRlUHJvcHMuYWxsRGVmYXVsdFByb3BlcnRpZXMubWFwKChkZWYpID0+IGRlZi5wcm9wRGVmaW5pdGlvbiksXG4gICAgICBzdGF0ZVF1ZXJpZXM6IERTdGF0ZVByb3BzLmFsbERlZmF1bHRRdWVyaWVzLFxuICAgIH07XG4gICAgcmV0dXJuIGR0bztcbiAgfVxuICBwcml2YXRlIGNvbXBpbGVQYWdlKHBhZ2U6IEJ1aWxkZXJQYWdlRHRvLCBtb2R1bGVQcmVmaXg6IHN0cmluZyk6IFBhZ2VEdG8ge1xuICAgIC8vIGNvbnNvbGUubG9nKF9tb2R1bGVJZCk7XG4gICAgLy8gY29uc3QgdGV4dEVsZW1lbnRcbiAgICBjb25zdCB0YWdzID0gcGFnZS50YWdzID8/IFtdO1xuICAgIGNvbnN0IHsgbmV4dEJ1dHRvbiwgbWFpblRleHQsIGlkLCBtYWluTWVkaWEsIF90eXBlIH0gPSBwYWdlO1xuICAgIGNvbnN0IGVsZW1lbnRzOiBERWxlbWVudER0b1tdID0gW107XG4gICAgY29uc3QgYXVkaW9SZXNvdXJjZXNEdG86IERBdWRpb0R0b1tdID0gW107XG4gICAgY29uc3QgdmlkZW9SZXNvdXJjZXM6IERWaWRlb0R0b1tdID0gW107XG4gICAgbGV0IG1haW5WaWRlbzogRFZpZGVvRHRvIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgbWFpblRleHRBdWRpbzogREF1ZGlvRHRvIHwgZmFsc2UgPSBmYWxzZTtcblxuICAgIGlmIChwYWdlLm1haW5UZXh0LmF1ZGlvRmlsZSkge1xuICAgICAgY29uc3QgcmVzID0gdGhpcy5jb21waWxlTWFpblRleHRBdWRpbyhwYWdlLm1haW5UZXh0LmF1ZGlvRmlsZSk7XG4gICAgICBlbGVtZW50cy5wdXNoKC4uLnJlcy5lbGVtZW50cyk7XG4gICAgICBhdWRpb1Jlc291cmNlc0R0by5wdXNoKHJlcy5hdWRpb0R0byk7XG4gICAgICBtYWluVGV4dEF1ZGlvID0gcmVzLmF1ZGlvRHRvO1xuICAgIH1cblxuICAgIGlmIChfdHlwZSA9PT0gXCJxdWVzdGlvblwiKSB7XG4gICAgICBjb25zdCB2YXJpYWJsZUlkID0gbW9kdWxlUHJlZml4ICsgXCJfXCIgKyBwYWdlLnByZWZpeDtcbiAgICAgIGNvbnN0IHsgYnV0dG9ucywgcXVlc3Rpb24gfSA9IHRoaXMuY29tcGlsZVF1ZXN0aW9uKGlkLCBwYWdlLCB2YXJpYWJsZUlkKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXN0aW9uKTtcbiAgICAgIGVsZW1lbnRzLnB1c2goLi4uYnV0dG9ucywgcXVlc3Rpb24pO1xuICAgIH1cblxuICAgIGlmIChfdHlwZSA9PT0gXCJpbmZvLXBhZ2VcIikge1xuICAgICAgY29uc3QgaW5mb1RleHQgPSBtYWluVGV4dC50ZXh0O1xuICAgICAgY29uc3QgbmV4dEJ0bkVsZW1lbnQ6IERFbGVtZW50RHRvID0gdGhpcy5jb21waWxlQnV0dG9uKGlkLCBuZXh0QnV0dG9uLCB7XG4gICAgICAgIGtpbmQ6IFwibmV4dC1idXR0b25cIixcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdGV4dFN0eWxlID0gbWFpbk1lZGlhID8gRGVmYXVsdFRoZW1lLm1haW5UZXh0LndpdGhNZWRpYS50ZXh0LmNzcyA6IERlZmF1bHRUaGVtZS5tYWluVGV4dC5ub01lZGlhLnRleHQuY3NzO1xuICAgICAgY29uc3QgZWxlbWVudDogREVsZW1lbnREdG8gPSB7XG4gICAgICAgIHRleHQ6IGluZm9UZXh0LFxuICAgICAgICBfdGFnOiBcInBcIixcbiAgICAgICAgaWQ6IGdlbmVyYXRlRWxlbWVudElkKCksXG4gICAgICAgIHN0eWxlOiB0ZXh0U3R5bGUsXG4gICAgICB9O1xuICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICAgIGVsZW1lbnRzLnB1c2gobmV4dEJ0bkVsZW1lbnQpO1xuICAgIH1cbiAgICBpZiAobWFpbk1lZGlhICYmIG1haW5NZWRpYS5raW5kID09PSBcIm1haW4taW1hZ2VcIikge1xuICAgICAgY29uc3QgbWFpbkltYWdlRWxlbWVudCA9IHRoaXMuY29tcGlsZUltYWdlKG1haW5NZWRpYSk7XG4gICAgICBlbGVtZW50cy5wdXNoKG1haW5JbWFnZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmIChtYWluTWVkaWEgJiYgbWFpbk1lZGlhLmtpbmQgPT09IFwibWFpbi12aWRlb1wiKSB7XG4gICAgICBjb25zdCB2aWRlb091dHB1dCA9IHRoaXMuY29tcGlsZVZpZGVvKG1haW5NZWRpYSk7XG4gICAgICBtYWluVmlkZW8gPSB2aWRlb091dHB1dC52aWRlb0R0bztcbiAgICAgIGVsZW1lbnRzLnB1c2goLi4udmlkZW9PdXRwdXQuZWxlbWVudHMpO1xuICAgICAgdmlkZW9SZXNvdXJjZXMucHVzaCh2aWRlb091dHB1dC52aWRlb0R0byk7XG4gICAgfVxuICAgIGNvbnN0IG1haW5WaWRlb0lkID0gbWFpblZpZGVvID8gbWFpblZpZGVvLmlkIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGF1dG9QbGF5U2VxdWVuY2U6IERBdXRvUGxheVNlcXVlbmNlID0ge1xuICAgICAgYmxvY2tVc2VySW5wdXQ6IHRydWUsXG4gICAgICBpZDogXCIxXCIsXG4gICAgICBpdGVtczogW10sXG4gICAgICBzdGFydENvbW1hbmRzOiBbXG4gICAgICAgIERTdGF0ZVByb3BzLm1lZGlhQmxvY2tlZEJ5U2VxdWVuY2UuZ2V0U2V0VHJ1ZUNvbW1hbmQoKSxcbiAgICAgICAgRFN0YXRlUHJvcHMuaW5wdXRCbG9ja2luZ0J5U2VxdWVuY2UuZ2V0U2V0VHJ1ZUNvbW1hbmQoKSxcbiAgICAgIF0sXG4gICAgICBlbmRDb21tYW5kczogW1xuICAgICAgICBEU3RhdGVQcm9wcy5tZWRpYUJsb2NrZWRCeVNlcXVlbmNlLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgICBEU3RhdGVQcm9wcy5pbnB1dEJsb2NraW5nQnlTZXF1ZW5jZS5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIGlmIChtYWluVmlkZW8gJiYgcGFnZS5tYWluTWVkaWEgJiYgcGFnZS5tYWluTWVkaWEua2luZCA9PT0gXCJtYWluLXZpZGVvXCIgJiYgcGFnZS5tYWluTWVkaWEubW9kZSA9PT0gXCJhdXRvcGxheVwiKSB7XG4gICAgICBhdXRvUGxheVNlcXVlbmNlLml0ZW1zLnB1c2goe1xuICAgICAgICBraW5kOiBcImF1dG9wbGF5LXZpZGVvXCIsXG4gICAgICAgIHZpZGVvSWQ6IG1haW5WaWRlby5pZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChtYWluVGV4dEF1ZGlvICYmIHBhZ2UubWFpblRleHQuYXV0b3BsYXkpIHtcbiAgICAgIGF1dG9QbGF5U2VxdWVuY2UuaXRlbXMucHVzaCh7XG4gICAgICAgIGtpbmQ6IFwiYXV0b3BsYXktYXVkaW9cIixcbiAgICAgICAgYXVkaW9JZDogbWFpblRleHRBdWRpby5pZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VEdG86IFBhZ2VEdG8gPSB7XG4gICAgICBhdWRpbzogYXVkaW9SZXNvdXJjZXNEdG8sXG4gICAgICBhdXRvUGxheVNlcXVlbmNlOiBhdXRvUGxheVNlcXVlbmNlLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBcInJlZFwiLFxuICAgICAgZWxlbWVudHMsXG4gICAgICBpZCxcbiAgICAgIG1haW5WaWRlb0lkLFxuICAgICAgdGFnczogWy4uLnRhZ3NdLFxuICAgICAgdmlkZW86IHZpZGVvUmVzb3VyY2VzLFxuICAgIH07XG4gICAgcmV0dXJuIHBhZ2VEdG87XG4gIH1cblxuICBwcml2YXRlIGNvbXBpbGVJbWFnZShpbWFnZTogQnVpbGRlck1haW5JbWFnZUR0bykge1xuICAgIGNvbnN0IGltZzogREltZ0R0byA9IHtcbiAgICAgIF90YWc6IFwiaW1nXCIsXG4gICAgICBpZDogaW1hZ2UuZmlsZS5pZCxcbiAgICAgIHN0eWxlOiB0aGlzLnRoZW1lLmltYWdlLnN0eWxlLFxuICAgICAgdXJsOiBpbWFnZS5maWxlLmRvd25sb2FkVXJsLFxuICAgIH07XG4gICAgcmV0dXJuIGltZztcbiAgfVxuXG4gIHByaXZhdGUgY29tcGlsZU1haW5UZXh0QXVkaW8oYXVkaW9GaWxlOiBBdWRpb0ZpbGUpOiB7XG4gICAgYXVkaW9EdG86IERBdWRpb0R0bztcbiAgICBlbGVtZW50czogREVsZW1lbnREdG9bXTtcbiAgfSB7XG4gICAgY29uc3QgdCA9IHRoaXMudGhlbWUubWFpblRleHQ7XG4gICAgY29uc3QgYXVkaW9JZCA9IGF1ZGlvRmlsZS5pZDtcbiAgICBjb25zdCBpY29uVXJsID1cbiAgICAgIFwiaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi9pc3BlLWJhY2tlbmQtZGV2LmFwcHNwb3QuY29tL28vcHVibGljLWFzc2V0cyUyRnZvbHVtZV91cC0yNHB4LnN2Zz9hbHQ9bWVkaWEmdG9rZW49NTUxYmQwYTYtYTUxNS00Zjg3LWEyNDUtZGE0MzNmNDgzM2Y5XCI7XG5cbiAgICBjb25zdCBidXR0b25JZCA9IFUucmFuZG9tU3RyaW5nKDMwKTtcbiAgICBjb25zdCBwbGF5TWFpblRleHRBdWRpbzogREltZ0R0byA9IHtcbiAgICAgIF90YWc6IFwiaW1nXCIsXG4gICAgICBpZDogYnV0dG9uSWQsXG4gICAgICB1cmw6IGljb25VcmwsXG4gICAgICBzdHlsZTogeyAuLi50LndpdGhNZWRpYS5hdWRpby5jc3MgfSxcbiAgICAgIG9uQ2xpY2s6IFtcbiAgICAgICAge1xuICAgICAgICAgIGtpbmQ6IFwiQVVESU9fUExBWV9DT01NQU5EXCIsXG4gICAgICAgICAgdGFyZ2V0OiBcIkFVRElPXCIsXG4gICAgICAgICAgdGFyZ2V0SWQ6IGF1ZGlvSWQsXG4gICAgICAgICAgcGF5bG9hZDogeyB2b2x1bWU6IDEgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBvblN0YXRlQ2hhbmdlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBxdWVyeU5hbWU6IERTdGF0ZVByb3BzLl9RdWVyaWVzLmRpc2FibGVBdWRpb0ljb25RdWVyeS5uYW1lLFxuICAgICAgICAgIHdoZW5UcnVlOiBbLi4uVGhlbWVVdGlscy5kaXNhYmxlQ2xpY2tDb21tYW5kcyhidXR0b25JZCwgdC53aXRoTWVkaWEuYXVkaW8uY3NzRGlzYWJsZWQpXSxcbiAgICAgICAgICB3aGVuRmFsc2U6IFsuLi5UaGVtZVV0aWxzLmVuYWJsZUNsaWNrQ29tbWFuZHMoYnV0dG9uSWQsIHQud2l0aE1lZGlhLmF1ZGlvLmNzc0VuYWJsZWQpXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgICBjb25zdCBhdWRpb0R0bzogREF1ZGlvRHRvID0ge1xuICAgICAgX3RhZzogXCJhdWRpb1wiLFxuICAgICAgLy8gZXZlbnRIYW5kbGVyczogW10sXG4gICAgICBpZDogYXVkaW9GaWxlLmlkLFxuICAgICAgdXJsOiBhdWRpb0ZpbGUuZG93bmxvYWRVcmwsXG4gICAgfTtcbiAgICByZXR1cm4geyBhdWRpb0R0bywgZWxlbWVudHM6IFtwbGF5TWFpblRleHRBdWRpb10gfTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcGlsZVZpZGVvKHZpZGVvOiBCdWlsZGVyTWFpblZpZGVvRHRvKSB7XG4gICAgY29uc3QgdCA9IHRoaXMudGhlbWUudmlkZW9QbGF5ZXI7XG4gICAgY29uc3QgdmlkZW9JZCA9IHZpZGVvLmZpbGUuaWQ7XG4gICAgY29uc3QgcGxheUJ1dHRvbklkID0gXCJwbGF5LWJ0bi1mb3JcIiArIHZpZGVvSWQ7XG4gICAgY29uc3QgcGF1c2VCdXR0b25JZCA9IFwicGF1c2UtYnRuLWZvclwiICsgdmlkZW9JZDtcbiAgICBjb25zdCBlbGVtZW50czogREVsZW1lbnREdG9bXSA9IFtdO1xuICAgIGNvbnN0IHZpZGVvRHRvOiBEVmlkZW9EdG8gPSB7XG4gICAgICBfdGFnOiBcInZpZGVvXCIsXG4gICAgICBpZDogdmlkZW8uZmlsZS5pZCxcbiAgICAgIHN0eWxlOiB0LnZpZGVvRWxlbWVudC5jc3MsXG4gICAgICB1cmw6IHZpZGVvLmZpbGUuZG93bmxvYWRVcmwsXG4gICAgfTtcbiAgICBjb25zdCBwbGF5QnRuOiBESW1nRHRvID0ge1xuICAgICAgaWQ6IHBsYXlCdXR0b25JZCxcbiAgICAgIF90YWc6IFwiaW1nXCIsXG4gICAgICB1cmw6IHQucGxheUJ1dHRvbi5pY29uVXJsLFxuICAgICAgc3R5bGU6IHsgLi4udC5wbGF5QnV0dG9uLmNzcywgLi4udC5wbGF5QnV0dG9uLmNzc0VuYWJsZWQgfSxcbiAgICAgIG9uQ2xpY2s6IFtcbiAgICAgICAge1xuICAgICAgICAgIGtpbmQ6IFwiVklERU9fUExBWV9DT01NQU5EXCIsXG4gICAgICAgICAgdGFyZ2V0OiBcIlZJREVPXCIsXG4gICAgICAgICAgdGFyZ2V0SWQ6IHZpZGVvSWQsXG4gICAgICAgICAgcGF5bG9hZDoge30sXG4gICAgICAgIH0sXG4gICAgICAgIC8vIFRPRE8gQ2hlY2sgaWYgdGhpcyB2aWRlbyBzaGFsbCBibG9jayBvdGhlciBtZWRpYSBmaXJzdD9cbiAgICAgICAgRFN0YXRlUHJvcHMubWVkaWFCbG9ja2VkQnlWaWRlby5nZXRTZXRUcnVlQ29tbWFuZCgpLFxuICAgICAgICBEU3RhdGVQcm9wcy51c2VyUGF1c2VkVmlkZW8uZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICBdLFxuICAgICAgb25TdGF0ZUNoYW5nZTogW1xuICAgICAgICB7XG4gICAgICAgICAgcXVlcnlOYW1lOiBEU3RhdGVQcm9wcy5fUXVlcmllcy5kaXNhYmxlVmlkZW9QbGF5UXVlcnkubmFtZSxcbiAgICAgICAgICB3aGVuVHJ1ZTogWy4uLlRoZW1lVXRpbHMuZGlzYWJsZUNsaWNrQ29tbWFuZHMocGxheUJ1dHRvbklkLCB0LnBsYXlCdXR0b24uY3NzRGlzYWJsZWQpXSxcbiAgICAgICAgICB3aGVuRmFsc2U6IFsuLi5UaGVtZVV0aWxzLmVuYWJsZUNsaWNrQ29tbWFuZHMocGxheUJ1dHRvbklkLCB0LnBsYXlCdXR0b24uY3NzRW5hYmxlZCldLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcXVlcnlOYW1lOiBEU3RhdGVQcm9wcy5fUXVlcmllcy5oaWRlVmlkZW9QbGF5UXVlcnkubmFtZSxcbiAgICAgICAgICB3aGVuVHJ1ZTogW1RoZW1lVXRpbHMuaGlkZUNvbW1hbmQocGxheUJ1dHRvbklkKV0sXG4gICAgICAgICAgd2hlbkZhbHNlOiBbVGhlbWVVdGlscy5zaG93Q29tbWFuZChwbGF5QnV0dG9uSWQpXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgICBjb25zdCBwYXVzZUJ0bjogREltZ0R0byA9IHtcbiAgICAgIGlkOiBwYXVzZUJ1dHRvbklkLFxuICAgICAgX3RhZzogXCJpbWdcIixcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIC4uLnQucGF1c2VCdXR0b24uY3NzLFxuICAgICAgICB2aXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgICAgICAuLi50LnBhdXNlQnV0dG9uLmNzc0VuYWJsZWQsXG4gICAgICB9LFxuICAgICAgdXJsOiB0LnBhdXNlQnV0dG9uLmljb25VcmwsXG4gICAgICBvbkNsaWNrOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBraW5kOiBcIlZJREVPX1BBVVNFX0NPTU1BTkRcIixcbiAgICAgICAgICB0YXJnZXQ6IFwiVklERU9cIixcbiAgICAgICAgICB0YXJnZXRJZDogdmlkZW9JZCxcbiAgICAgICAgICBwYXlsb2FkOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgRFN0YXRlUHJvcHMubWVkaWFCbG9ja2VkQnlWaWRlby5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgRFN0YXRlUHJvcHMudXNlclBhdXNlZFZpZGVvLmdldFNldFRydWVDb21tYW5kKCksXG4gICAgICBdLFxuICAgICAgb25TdGF0ZUNoYW5nZTogW1xuICAgICAgICB7XG4gICAgICAgICAgcXVlcnlOYW1lOiBEU3RhdGVQcm9wcy5fUXVlcmllcy5oaWRlVmlkZW9QYXVzZVF1ZXJ5Lm5hbWUsXG4gICAgICAgICAgd2hlblRydWU6IFtUaGVtZVV0aWxzLmhpZGVDb21tYW5kKHBhdXNlQnV0dG9uSWQpXSxcbiAgICAgICAgICB3aGVuRmFsc2U6IFtUaGVtZVV0aWxzLnNob3dDb21tYW5kKHBhdXNlQnV0dG9uSWQpXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgICBlbGVtZW50cy5wdXNoKHBsYXlCdG4pO1xuICAgIGVsZW1lbnRzLnB1c2gocGF1c2VCdG4pO1xuICAgIHJldHVybiB7IHZpZGVvRHRvLCBlbGVtZW50cyB9O1xuICB9XG4gIHByaXZhdGUgY29tcGlsZVF1ZXN0aW9uKFxuICAgIHBhZ2VJZDogc3RyaW5nLFxuICAgIHBhZ2U6IEJ1aWxkZXJQYWdlRHRvLFxuICAgIHZhcmlhYmxlSWQ6IHN0cmluZyxcbiAgKToge1xuICAgIHF1ZXN0aW9uOiBEVGV4dER0bztcbiAgICBidXR0b25zOiBERGl2RHRvW107XG4gIH0ge1xuICAgIC8vIFRPRE8gUkVGQUNUT1JFIERFRkFVTFQgUVVFU1RJT04gVE8gLSAoUkVNT1ZFIFVTRSBURVhUMSlcbiAgICAvLyBjb25zb2xlLmxvZyhwYWdlKTtcbiAgICBjb25zdCBxID0gcGFnZS5kZWZhdWx0UXVlc3Rpb247XG4gICAgY29uc3QgdGV4dCA9IHBhZ2UubWFpblRleHQudGV4dDtcbiAgICBjb25zdCBxdWVzdGlvblN0eWxlID0gcGFnZS5tYWluTWVkaWFcbiAgICAgID8gRGVmYXVsdFRoZW1lLm1haW5UZXh0LndpdGhNZWRpYS50ZXh0LmNzc1xuICAgICAgOiBEZWZhdWx0VGhlbWUubWFpblRleHQubm9NZWRpYS50ZXh0LmNzcztcbiAgICBjb25zdCBxdWVzdGlvbjogRFRleHREdG8gPSB7XG4gICAgICBfdGFnOiBcInBcIixcbiAgICAgIHRleHQsXG4gICAgICBldmVudEhhbmRsZXJzOiBbXSxcbiAgICAgIGlkOiBVLnJhbmRvbVN0cmluZygzMCksXG4gICAgICBvbkNsaWNrOiBbXSxcbiAgICAgIG9uU3RhdGVDaGFuZ2U6IFtdLFxuICAgICAgc3R5bGU6IHF1ZXN0aW9uU3R5bGUsXG4gICAgfTtcbiAgICBjb25zdCBidXR0b25zID0gcS5vcHRpb25zLm1hcCgobykgPT4ge1xuICAgICAgY29uc3QgYnRucyA9IHRoaXMuY29tcGlsZUJ1dHRvbihwYWdlSWQsIG8sIHtcbiAgICAgICAga2luZDogXCJyZXNwb25zZS1idXR0b25cIixcbiAgICAgICAgcXVlc3Rpb25JZDogdmFyaWFibGVJZCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGJ0bnM7XG4gICAgfSk7XG4gICAgVGhlbWVVdGlscy5zcGFjZUV2ZW5seVgoYnV0dG9ucyk7XG4gICAgcmV0dXJuIHsgcXVlc3Rpb24sIGJ1dHRvbnMgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcGlsZUJ1dHRvbihcbiAgICBwYWdlSWQ6IHN0cmluZyxcbiAgICBidXR0b25EdG86IEJ1aWxkZXJQYWdlRHRvW1wibmV4dEJ1dHRvblwiXSxcbiAgICBvcHRpb25zOiB7IGtpbmQ6IFwicmVzcG9uc2UtYnV0dG9uXCI7IHF1ZXN0aW9uSWQ6IHN0cmluZyB9IHwgeyBraW5kOiBcIm5leHQtYnV0dG9uXCIgfSxcbiAgKSB7XG4gICAgY29uc3QgZmFjdHNDb2xsZWN0ZWQ6IEZhY3RbXSA9IFtdO1xuICAgIGNvbnN0IHsgaWQsIHZhbHVlLCBsYWJlbCB9ID0gYnV0dG9uRHRvO1xuXG4gICAgY29uc3QgeyBkaXYsIHRleHQxIH0gPSBEZWZhdWx0VGhlbWUucmVzcG9uc2VCdXR0b25zO1xuICAgIGlmIChvcHRpb25zLmtpbmQgPT09IFwicmVzcG9uc2UtYnV0dG9uXCIpIHtcbiAgICAgIGNvbnN0IGZhY3Q6IEZhY3QgPSB7XG4gICAgICAgIGtpbmQ6IFwibnVtZXJpYy1mYWN0XCIsXG4gICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICByZWZlcmVuY2VJZDogb3B0aW9ucy5xdWVzdGlvbklkLFxuICAgICAgICByZWZlcmVuY2VMYWJlbDogXCJRdWVzdGlvbklkOiBcIiArIG9wdGlvbnMucXVlc3Rpb25JZCxcbiAgICAgIH07XG4gICAgICBmYWN0c0NvbGxlY3RlZC5wdXNoKGZhY3QpO1xuICAgIH1cblxuICAgIGNvbnN0IG9uQ2xpY2tIYW5kbGVyOiBEQ29tbWFuZCA9IHtcbiAgICAgIGtpbmQ6IFwiRU5HSU5FX0xFQVZFX1BBR0VfQ09NTUFORFwiLFxuICAgICAgdGFyZ2V0OiBcIkVOR0lORVwiLFxuICAgICAgdGFyZ2V0SWQ6IFwiRU5HSU5FXCIsXG4gICAgICBwYXlsb2FkOiB7XG4gICAgICAgIHBhZ2VJZCxcbiAgICAgICAgZmFjdHNDb2xsZWN0ZWQsXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgYnRuOiBERGl2RHRvID0ge1xuICAgICAgaWQsXG4gICAgICBfdGFnOiBcImRpdlwiLFxuICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAge1xuICAgICAgICAgIF90YWc6IFwicFwiLFxuICAgICAgICAgIGlkOiBVLnJhbmRvbVN0cmluZygzMCksXG4gICAgICAgICAgdGV4dDogbGFiZWwsXG4gICAgICAgICAgc3R5bGU6IHRleHQxLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIG9uU3RhdGVDaGFuZ2U6IFtcbiAgICAgICAge1xuICAgICAgICAgIHF1ZXJ5TmFtZTogRFN0YXRlUHJvcHMuX1F1ZXJpZXMuZGlzYWJsZVVzZXJJbnB1dFF1ZXJ5Lm5hbWUsXG4gICAgICAgICAgd2hlbkZhbHNlOiBbLi4uVGhlbWVVdGlscy5lbmFibGVDbGlja0NvbW1hbmRzKGlkLCBkaXYuY3NzRW5hYmxlZCldLFxuICAgICAgICAgIHdoZW5UcnVlOiBbLi4uVGhlbWVVdGlscy5kaXNhYmxlQ2xpY2tDb21tYW5kcyhpZCwgZGl2LmNzc0Rpc2FibGVkKV0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgc3R5bGU6IHsgLi4uZGl2LmNzcywgLi4uZGl2LmNzc0VuYWJsZWQgfSxcbiAgICAgIG9uQ2xpY2s6IFtvbkNsaWNrSGFuZGxlcl0sXG4gICAgfTtcbiAgICBpZiAob3B0aW9ucy5raW5kID09PSBcIm5leHQtYnV0dG9uXCIpIHtcbiAgICAgIGJ0bi5zdHlsZS54ID0gNTA7XG4gICAgICBidG4uc3R5bGUueSA9IDg7XG4gICAgICBidG4uc3R5bGUudHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUoLTUwJSwgMCUpXCI7XG4gICAgfVxuICAgIHJldHVybiBidG47XG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IEJ1aWxkZXJQYWdlRHRvLCBCdWlsZGVyUGFnZVR5cGUgfSBmcm9tIFwiLi9CdWlsZGVyLXBhZ2VcIjtcbmltcG9ydCB7IEJ1aWxkZXJQYWdlIH0gZnJvbSBcIi4vQnVpbGRlci1wYWdlXCI7XG5pbXBvcnQgeyBSdWxlSW5wdXQgfSBmcm9tIFwiLi9ydWxlYnVpbGRlci9SdWxlSW5wdXRcIjtcbmltcG9ydCB0eXBlIHsgUXVlc3Rpb25WYXJpYWJsZSB9IGZyb20gXCIuL3J1bGVidWlsZGVyL1J1bGVWYXJpYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21WYXJpYWJsZSB9IGZyb20gXCIuL3J1bGVidWlsZGVyXCI7XG5pbXBvcnQgdHlwZSB7IEV4Y2x1ZGVCeVBhZ2VBY3Rpb24sIEV4Y2x1ZGVCeVRhZ0FjdGlvbiwgSnVtcFRvUGFnZUFjdGlvbiB9IGZyb20gXCIuL3J1bGVidWlsZGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJUYWdEdG8gfSBmcm9tIFwiLi9CdWlsZGVyVGFnXCI7XG5pbXBvcnQgeyBCdWlsZGVyVGFnLCBUYWdDb2xsZWN0aW9uIH0gZnJvbSBcIi4vQnVpbGRlclRhZ1wiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyUnVsZUR0byB9IGZyb20gXCIuL3J1bGVidWlsZGVyXCI7XG5pbXBvcnQgeyBCdWlsZGVyUnVsZSB9IGZyb20gXCIuL3J1bGVidWlsZGVyXCI7XG5pbXBvcnQgeyBEZWZhdWx0VGhlbWVDb21waWxlciB9IGZyb20gXCIuL3RoZW1lL2RlZmF1bHQtdGhlbWUtY29tcGlsZXJcIjtcbmltcG9ydCB7IEltYWdlRmlsZSB9IGZyb20gXCIuL21lZGlhLWZpbGVzXCI7XG5pbXBvcnQgeyBTY2hlbWFEdG8sIERVdGlsLCBQYWdlSUQsIFNjaGVtYUlEIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcbmltcG9ydCB7IFBhZ2VQcmVmaXggfSBmcm9tIFwiLi9wcmltaXRpdmVzL3BhZ2UtcHJlZml4XCI7XG5pbXBvcnQgeyBTY2hlbWFQcmVmaXgsIFNjaGVtYVByZWZpeFZhbHVlIH0gZnJvbSBcIi4vcHJpbWl0aXZlcy9zY2hlbWEtcHJlZml4XCI7XG5jb25zdCBVID0gRFV0aWw7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlclNjaGVtYUR0byB7XG4gIHJlYWRvbmx5IGlkOiBTY2hlbWFJRDtcbiAgcmVhZG9ubHkgcHJlZml4OiBTY2hlbWFQcmVmaXhWYWx1ZTtcbiAgcmVhZG9ubHkgbWFpbkltYWdlOiBJbWFnZUZpbGUgfCBmYWxzZTtcbiAgcmVhZG9ubHkgYmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgcGFnZXM6IEJ1aWxkZXJQYWdlRHRvW107XG4gIHJlYWRvbmx5IGJhc2VIZWlnaHQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgYmFzZVdpZHRoOiBudW1iZXI7XG4gIHJlYWRvbmx5IHJ1bGVzOiBSZWFkb25seUFycmF5PEJ1aWxkZXJSdWxlRHRvPjtcbiAgcmVhZG9ubHkgdGFnczogUmVhZG9ubHlBcnJheTxCdWlsZGVyVGFnRHRvPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFCdWlsZE91dHB1dCB7XG4gIHNjaGVtYTogU2NoZW1hRHRvO1xuICBjb2RlYm9vazogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgc2NoZW1hQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG5leHBvcnQgY2xhc3MgQnVpbGRlclNjaGVtYSB7XG4gIHJlYWRvbmx5IHByZWZpeDogU2NoZW1hUHJlZml4O1xuICBiYXNlSGVpZ2h0ID0gMTMwMDtcbiAgYmFzZVdpZHRoID0gMTAyNDtcbiAgYmFja2dyb3VuZENvbG9yID0gXCIjMDAwMDAwXCI7XG4gIHBhZ2VzOiBCdWlsZGVyUGFnZVtdID0gW107XG4gIG1haW5JbWFnZTogSW1hZ2VGaWxlIHwgZmFsc2UgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfcnVsZXM6IEJ1aWxkZXJSdWxlW10gPSBbXTtcbiAgZ2V0IHJ1bGVzKCk6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclJ1bGU+IHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX3J1bGVzXTtcbiAgfVxuXG4gIC8vIGdldCBwcmVmaXgoKTogU2NoZW1hUHJlZml4VmFsdWUge1xuICAvLyAgIHJldHVybiB0aGlzLl9wcmVmaXgudmFsdWU7XG4gIC8vIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF90YWdDb2xsZWN0aW9uOiBUYWdDb2xsZWN0aW9uID0gVGFnQ29sbGVjdGlvbi5jcmVhdGUoKTtcbiAgZ2V0IHRhZ3MoKTogUmVhZG9ubHlBcnJheTxCdWlsZGVyVGFnPiB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl90YWdDb2xsZWN0aW9uXTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZShpZDogU2NoZW1hSUQsIG5hbWU6IHN0cmluZywgcHJlZml4OiBTY2hlbWFQcmVmaXhWYWx1ZSkge1xuICAgIGNvbnN0IHNjaGVtYVByZWZpeCA9IFNjaGVtYVByZWZpeC5jYXN0T3JDcmVhdGVSYW5kb20ocHJlZml4KTtcbiAgICByZXR1cm4gbmV3IEJ1aWxkZXJTY2hlbWEoaWQsIG5hbWUsIHNjaGVtYVByZWZpeCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGZyb21Kc29uKGR0bzogQnVpbGRlclNjaGVtYUR0byk6IEJ1aWxkZXJTY2hlbWEge1xuICAgIGNvbnN0IHNjaGVtYVByZWZpeCA9IFNjaGVtYVByZWZpeC5jYXN0T3JDcmVhdGVSYW5kb20oZHRvLnByZWZpeCk7XG4gICAgY29uc3Qgc2NoZW1hID0gbmV3IEJ1aWxkZXJTY2hlbWEoZHRvLmlkLCBkdG8ubmFtZSwgc2NoZW1hUHJlZml4KTtcbiAgICBjb25zdCBwYWdlcyA9IGR0by5wYWdlcy5tYXAoQnVpbGRlclBhZ2UuZnJvbUpzb24pO1xuICAgIHNjaGVtYS5fdGFnQ29sbGVjdGlvbi5pbml0KGR0by50YWdzKTtcbiAgICBzY2hlbWEuYmFja2dyb3VuZENvbG9yID0gZHRvLmJhY2tncm91bmRDb2xvcjtcbiAgICBzY2hlbWEuYmFzZUhlaWdodCA9IGR0by5iYXNlSGVpZ2h0O1xuICAgIHNjaGVtYS5iYXNlV2lkdGggPSBkdG8uYmFzZVdpZHRoO1xuICAgIHNjaGVtYS5wYWdlcyA9IHBhZ2VzO1xuICAgIHNjaGVtYS5iYWNrZ3JvdW5kQ29sb3IgPSBkdG8uYmFja2dyb3VuZENvbG9yO1xuICAgIHNjaGVtYS5tYWluSW1hZ2UgPSBkdG8ubWFpbkltYWdlID8/IGZhbHNlO1xuICAgIGNvbnN0IHJ1bGVzRHRvID0gZHRvLnJ1bGVzID8/IFtdO1xuICAgIGNvbnN0IHJ1bGVJbnB1dCA9IHNjaGVtYS5nZXRSdWxlSW5wdXQoKTtcbiAgICBzY2hlbWEuX3J1bGVzID0gcnVsZXNEdG8ubWFwKChyKSA9PiBCdWlsZGVyUnVsZS5mcm9tRHRvKHIsIHJ1bGVJbnB1dCkpO1xuICAgIHJldHVybiBzY2hlbWE7XG4gIH1cblxuICB0b0pzb24oKTogQnVpbGRlclNjaGVtYUR0byB7XG4gICAgY29uc3QgcGFnZXMgPSB0aGlzLnBhZ2VzLm1hcCgocCkgPT4gcC50b0pzb24oKSk7XG4gICAgY29uc3QgdGFncyA9IHRoaXMuX3RhZ0NvbGxlY3Rpb24udG9Kc29uKCk7XG4gICAgY29uc3QgcnVsZXMgPSB0aGlzLl9ydWxlcy5tYXAoKHJ1bGUpID0+IHJ1bGUudG9Kc29uKCkpO1xuXG4gICAgY29uc3QgZHRvOiBCdWlsZGVyU2NoZW1hRHRvID0ge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLmJhY2tncm91bmRDb2xvcixcbiAgICAgIGJhc2VIZWlnaHQ6IHRoaXMuYmFzZUhlaWdodCxcbiAgICAgIGJhc2VXaWR0aDogdGhpcy5iYXNlV2lkdGgsXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHBhZ2VzLFxuICAgICAgcnVsZXMsXG4gICAgICB0YWdzLFxuICAgICAgbWFpbkltYWdlOiB0aGlzLm1haW5JbWFnZSxcbiAgICAgIHByZWZpeDogdGhpcy5wcmVmaXgudmFsdWUsXG4gICAgfTtcbiAgICByZXR1cm4gZHRvO1xuICB9XG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGlkOiBTY2hlbWFJRCxcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nLFxuICAgIHByZWZpeDogU2NoZW1hUHJlZml4LFxuICApIHtcbiAgICB0aGlzLnByZWZpeCA9IHByZWZpeDtcbiAgfVxuXG4gIGFkZFBhZ2UodHlwZTogQnVpbGRlclBhZ2VUeXBlLCBhdEluZGV4ID0gLTEpOiBCdWlsZGVyUGFnZSB7XG4gICAgY29uc3QgcGFnZVByZWZpeCA9IFBhZ2VQcmVmaXguY3JlYXRlKCk7XG4gICAgY29uc3QgbmV3UGFnZSA9IEJ1aWxkZXJQYWdlLmNyZWF0ZSh0eXBlLCBwYWdlUHJlZml4LnZhbHVlKTtcbiAgICBpZiAoYXRJbmRleCA+PSAwICYmIGF0SW5kZXggPCB0aGlzLnBhZ2VzLmxlbmd0aCkge1xuICAgICAgdGhpcy5wYWdlcy5zcGxpY2UoYXRJbmRleCwgMCwgbmV3UGFnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFnZXMucHVzaChuZXdQYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1BhZ2U7XG4gIH1cblxuICBpbnNlcnRQYWdlKHBhZ2U6IEJ1aWxkZXJQYWdlLCBhdEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbnNlcnRQYWdlQXRJbmRleChwYWdlLCBhdEluZGV4KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5zZXJ0UGFnZUF0SW5kZXgocGFnZTogQnVpbGRlclBhZ2UsIGF0SW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGlzVmFsaWRJbmRleCA9IFUuaXNJblJhbmdlKDAsIHRoaXMucGFnZXMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKCFpc1ZhbGlkSW5kZXgoYXRJbmRleCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZXhpc3RzID0gISF0aGlzLnBhZ2VzLmZpbmQoKHApID0+IHAuaWQgPT09IHBhZ2UuaWQpO1xuICAgIGlmIChleGlzdHMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5wYWdlcy5zcGxpY2UoYXRJbmRleCwgMCwgcGFnZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhZGRSdWxlKCkge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5nZXRSdWxlSW5wdXQoKTtcbiAgICBjb25zdCBjb3VudCA9IHRoaXMuX3J1bGVzLmxlbmd0aCArIDE7XG4gICAgY29uc3QgbmFtZSA9IFwiUnVsZS1udW1iZXI6IFwiICsgY291bnQ7XG4gICAgY29uc3QgcnVsZSA9IEJ1aWxkZXJSdWxlLmZyb21EdG8oXG4gICAgICB7XG4gICAgICAgIGNvbmRpdGlvbnM6IFtdLFxuICAgICAgICB0eXBlOiBcImFsbFwiLFxuICAgICAgICBuYW1lLFxuICAgICAgICBleGNsdWRlVGFnczogW10sXG4gICAgICAgIGp1bXBUb1BhZ2U6IGZhbHNlLFxuICAgICAgICBleGNsdWRlUGFnZXM6IFtdLFxuICAgICAgfSxcbiAgICAgIGlucHV0LFxuICAgICk7XG4gICAgdGhpcy5fcnVsZXMucHVzaChydWxlKTtcbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuICBkZWxldGVSdWxlKHJ1bGU6IEJ1aWxkZXJSdWxlKSB7XG4gICAgdGhpcy5fcnVsZXMgPSB0aGlzLl9ydWxlcy5maWx0ZXIoKHIpID0+IHIgIT09IHJ1bGUpO1xuICB9XG5cbiAgbW92ZVBhZ2UocGFnZTogQnVpbGRlclBhZ2UsIHRvSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wYWdlcy5pbmRleE9mKHBhZ2UpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgaXNWYWxpZEluZGV4ID0gVS5pc0luUmFuZ2UoMCwgdGhpcy5wYWdlcy5sZW5ndGggLSAxKTtcbiAgICBpZiAoIWlzVmFsaWRJbmRleCh0b0luZGV4KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZygnTW92aW5nIGZyb20gOicgKyBpbmRleCArICcgdG86ICcgKyB0b0luZGV4KTtcbiAgICB0aGlzLnBhZ2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5wYWdlcy5zcGxpY2UodG9JbmRleCwgMCwgcGFnZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBkZWxldGVQYWdlKHBhZ2U6IEJ1aWxkZXJQYWdlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZmlsdGVyZWQgPSB0aGlzLnBhZ2VzLmZpbHRlcigocCkgPT4gcCAhPT0gcGFnZSk7XG4gICAgY29uc3QgZGlkRGVsZXRlID0gZmlsdGVyZWQubGVuZ3RoID09PSB0aGlzLnBhZ2VzLmxlbmd0aCAtIDE7XG4gICAgdGhpcy5wYWdlcyA9IGZpbHRlcmVkO1xuICAgIHJldHVybiBkaWREZWxldGU7XG4gIH1cblxuICByZWV2YWx1YXRlUnVsZXMoKSB7XG4gICAgY29uc29sZS5sb2coXCJSZWV2YWx1YXRpb25nIHJ1bGVzSW5wdXRcIik7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLmdldFJ1bGVJbnB1dCgpO1xuICAgIGNvbnN0IHJ1bGVzRHRvID0gdGhpcy5fcnVsZXMubWFwKChyKSA9PiByLnRvSnNvbigpKTtcbiAgICB0aGlzLl9ydWxlcyA9IHJ1bGVzRHRvLm1hcCgoZHRvKSA9PiBCdWlsZGVyUnVsZS5mcm9tRHRvKGR0bywgaW5wdXQpKTtcbiAgfVxuXG4gIGdldFJ1bGVJbnB1dCgpOiBSdWxlSW5wdXQge1xuICAgIGNvbnN0IHFWYXJzOiBRdWVzdGlvblZhcmlhYmxlW10gPSBbXTtcbiAgICBjb25zdCBjVmFyczogQ3VzdG9tVmFyaWFibGVbXSA9IFtdO1xuICAgIGNvbnN0IHBhZ2VJZEFjdGlvbnM6IEV4Y2x1ZGVCeVBhZ2VBY3Rpb25bXSA9IFtdO1xuICAgIGNvbnN0IHRhZ0FjdGlvbnM6IEV4Y2x1ZGVCeVRhZ0FjdGlvbltdID0gdGhpcy50YWdzLm1hcCgodCkgPT4ge1xuICAgICAgY29uc3QgdGFnID0gdC50YWdUZXh0O1xuICAgICAgY29uc3QgcGFnZUNvdW50ID0gdGhpcy5wYWdlcy5yZWR1Y2UoKGNvdW50LCBjdXJyKSA9PiB7XG4gICAgICAgIHJldHVybiBjdXJyLnRhZ3MuaW5jbHVkZXModGFnKSA/IGNvdW50ICsgMSA6IGNvdW50O1xuICAgICAgfSwgMCk7XG4gICAgICBjb25zdCBleGNsdWRlQnlUYWdEdG86IEV4Y2x1ZGVCeVRhZ0FjdGlvbiA9IHtcbiAgICAgICAga2luZDogXCJleGNsdWRlLWJ5LXRhZ1wiLFxuICAgICAgICBwYWdlQ291bnQsXG4gICAgICAgIHRhZyxcbiAgICAgICAgZGVzY3JpcHRpb246IHQudGFnRGVzY3JpcHRpb24sXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGV4Y2x1ZGVCeVRhZ0R0bztcbiAgICB9KTtcbiAgICBjb25zdCBqdW1wQWN0aW9uczogSnVtcFRvUGFnZUFjdGlvbltdID0gW107XG4gICAgdGhpcy5wYWdlcy5mb3JFYWNoKChwYWdlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgcGFnZVZhcmlhYmxlcyA9IHBhZ2UuZ2V0UXVlc3Rpb25WYXJpYWJsZXModGhpcy5wcmVmaXgsIGluZGV4KTtcbiAgICAgIHFWYXJzLnB1c2goLi4ucGFnZVZhcmlhYmxlcyk7XG4gICAgICBjb25zdCBtYWluVGV4dCA9IHBhZ2UubWFpblRleHQudGV4dDtcbiAgICAgIGNvbnN0IHBhZ2VQcmVmaXggPSBwYWdlLnByZWZpeDtcbiAgICAgIGNvbnN0IGp1bXBBY3Rpb246IEp1bXBUb1BhZ2VBY3Rpb24gPSB7XG4gICAgICAgIGtpbmQ6IFwianVtcC10by1wYWdlXCIsXG4gICAgICAgIHBhZ2VJZDogcGFnZS5pZCxcbiAgICAgICAgcGFnZVByZWZpeCxcbiAgICAgICAgcGFnZU51bWJlcjogaW5kZXgsXG4gICAgICAgIG1haW5UZXh0OiBwYWdlLm1haW5UZXh0LnRleHQsXG4gICAgICB9O1xuICAgICAgY29uc3QgZXhjbHVkZVBhZ2VBY3Rpb246IEV4Y2x1ZGVCeVBhZ2VBY3Rpb24gPSB7XG4gICAgICAgIGtpbmQ6IFwiZXhjbHVkZS1ieS1wYWdlSWRcIixcbiAgICAgICAgcGFnZUlkOiBwYWdlLmlkLFxuICAgICAgICBwYWdlUHJlZml4LFxuICAgICAgICBwYWdlTnVtYmVyOiBpbmRleCxcbiAgICAgICAgbWFpblRleHQsXG4gICAgICB9O1xuICAgICAganVtcEFjdGlvbnMucHVzaChqdW1wQWN0aW9uKTtcbiAgICAgIHBhZ2VJZEFjdGlvbnMucHVzaChleGNsdWRlUGFnZUFjdGlvbik7XG4gICAgfSk7XG4gICAgY29uc3QgcnVsZUlucHV0ID0gbmV3IFJ1bGVJbnB1dChxVmFycywgY1ZhcnMsIHBhZ2VJZEFjdGlvbnMsIHRhZ0FjdGlvbnMsIGp1bXBBY3Rpb25zKTtcblxuICAgIHJldHVybiBydWxlSW5wdXQ7XG4gIH1cblxuICBkZWxldGVUYWdzKHRhZ3M6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclRhZz4pIHtcbiAgICB0aGlzLl90YWdDb2xsZWN0aW9uLmRlbGV0ZUFsbCh0YWdzKTtcbiAgfVxuXG4gIGFkZFRhZyhidWlsZGVyVGFnOiBCdWlsZGVyVGFnKSB7XG4gICAgdGhpcy5fdGFnQ29sbGVjdGlvbi5hZGQoYnVpbGRlclRhZyk7XG4gIH1cblxuICBjb21waWxlKCk6IFNjaGVtYUJ1aWxkT3V0cHV0IHtcbiAgICBjb25zdCBtb2R1bGVEdG8gPSB0aGlzLnRvSnNvbigpO1xuICAgIGNvbnN0IGltcCA9IG5ldyBEZWZhdWx0VGhlbWVDb21waWxlcigpO1xuICAgIGNvbnN0IHNjaGVtYSA9IGltcC5jb21waWxlKG1vZHVsZUR0byk7XG5cbiAgICByZXR1cm4geyBjb2RlYm9vazoge30sIHNjaGVtYSwgc2NoZW1hQ29uZmlnOiB7fSB9O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgQnVpbGRlck9iamVjdElkLCBCdWlsZGVyT2JqZWN0IH0gZnJvbSAnLi9CdWlsZGVyT2JqZWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZGVyVGV4dER0byB7XG4gIHJlYWRvbmx5IGlkOiBCdWlsZGVyT2JqZWN0SWQuVGV4dElEO1xuICB0ZXh0OiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgdHJhbnNsYXRpb25SZXF1aXJlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJUZXh0IGV4dGVuZHMgQnVpbGRlck9iamVjdDwnYnVpbGRlci10ZXh0JywgQnVpbGRlclRleHREdG8+IHtcbiAgcmVhZG9ubHkgb2JqZWN0VHlwZSA9ICdidWlsZGVyLXRleHQnO1xuICBpZDogQnVpbGRlck9iamVjdElkLlRleHRJRDtcbiAgdGV4dCA9ICcnO1xuICBuYW1lID0gJyc7XG4gIHRyYW5zbGF0ZVJlcXVpcmVkID0gZmFsc2U7XG4gIC8vIGF1ZGlvOiB7aWQ6IEJ9XG4gIHByaXZhdGUgY29uc3RydWN0b3IoZHRvOiBCdWlsZGVyVGV4dER0bykge1xuICAgIHN1cGVyKGR0byk7XG4gICAgdGhpcy5pZCA9IGR0by5pZDtcbiAgICB0aGlzLnRyYW5zbGF0ZVJlcXVpcmVkID0gZHRvLnRyYW5zbGF0aW9uUmVxdWlyZWQ7XG4gICAgdGhpcy5uYW1lID0gZHRvLm5hbWU7XG4gICAgdGhpcy50ZXh0ID0gZHRvLnRleHQ7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpZCA9IEJ1aWxkZXJPYmplY3RJZC50ZXh0SWQoKTtcbiAgICBjb25zdCBkdG86IEJ1aWxkZXJUZXh0RHRvID0ge1xuICAgICAgaWQsXG4gICAgICBuYW1lLFxuICAgICAgdGV4dDogJycsXG4gICAgICB0cmFuc2xhdGlvblJlcXVpcmVkOiBmYWxzZVxuICAgIH07XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQnVpbGRlclRleHQoZHRvKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBmcm9tSnNvbihkdG86IEJ1aWxkZXJUZXh0RHRvKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQnVpbGRlclRleHQoZHRvKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICBjbG9uZSgpOiBCdWlsZGVyVGV4dER0byB7XG4gICAgY29uc3QgbmV3SWQgPSBCdWlsZGVyT2JqZWN0SWQudGV4dElkKCk7XG4gICAgY29uc3QgZHRvID0gdGhpcy50b0pzb24oKTtcbiAgICBjb25zdCB3aXRoTmV3SWQ6IEJ1aWxkZXJUZXh0RHRvID0geyAuLi5kdG8sIGlkOiBuZXdJZCB9O1xuICAgIHJldHVybiB3aXRoTmV3SWQ7XG4gIH1cblxuICB0b0pzb24oKTogQnVpbGRlclRleHREdG8ge1xuICAgIGNvbnN0IGR0bzogQnVpbGRlclRleHREdG8gPSB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHRleHQ6IHRoaXMudGV4dCxcbiAgICAgIHRyYW5zbGF0aW9uUmVxdWlyZWQ6IHRoaXMudHJhbnNsYXRlUmVxdWlyZWRcbiAgICB9O1xuICAgIHJldHVybiBkdG87XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxTQUFTLGFBQWE7QUFFdEIsSUFBTSxJQUFJO0FBa0JILElBQVU7QUFBQSxDQUFWLENBQVVBLHFCQUFWO0FBTUUsRUFBTUEsaUJBQUEsY0FBYyxNQUFhO0FBQ3RDLFdBQU8sU0FBUyxhQUFhO0FBQUEsRUFDL0I7QUFFTyxFQUFNQSxpQkFBQSxhQUFhLE1BQWtCO0FBQzFDLFdBQU8sU0FBUyxtQkFBbUI7QUFBQSxFQUNyQztBQUNPLEVBQU1BLGlCQUFBLFNBQVMsTUFBYztBQUNsQyxXQUFPLFNBQVMsY0FBYztBQUFBLEVBQ2hDO0FBRU8sRUFBTUEsaUJBQUEsbUJBQW1CLE1BQXdCO0FBQ3RELFdBQU8sU0FBUyx5QkFBeUI7QUFBQSxFQUMzQztBQUNPLEVBQU1BLGlCQUFBLGFBQWEsTUFBa0I7QUFDMUMsV0FBTyxTQUFTLGtCQUFrQjtBQUFBLEVBQ3BDO0FBRUEsUUFBTSxXQUFXLENBQUMsU0FBb0M7QUFDcEQsVUFBTSxLQUFLLEVBQUUsYUFBYSxFQUFFO0FBQzVCLFdBQU8sT0FBTyxNQUFNO0FBQUEsRUFDdEI7QUFBQSxHQTNCZTtBQThCVixJQUFlLGdCQUFmLE1BQTBFO0FBQUEsRUFLNUQ7QUFBQSxFQUNULFlBQVks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QVM7QUFFcEMsV0FBTyxFQUFFLFVBQVUsQ0FBQyxHQUFHLFFBQVEsY0FBYyxDQUFDLEVBQUU7QUFBQSxFQUNsRDtBQUNGOzs7QUMzT08sSUFBTSxjQUFOLE1BQU0scUJBQW9CLGNBQThDO0FBQUEsRUFDcEUsYUFBYTtBQUFBLEVBQ3RCO0FBQUEsRUFDQSxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxvQkFBb0I7QUFBQTtBQUFBLEVBRVosWUFBWSxLQUFxQjtBQUN2QyxVQUFNLEdBQUc7QUFDVCxTQUFLLEtBQUssSUFBSTtBQUNkLFNBQUssb0JBQW9CLElBQUk7QUFDN0IsU0FBSyxPQUFPLElBQUk7QUFDaEIsU0FBSyxPQUFPLElBQUk7QUFBQSxFQUNsQjtBQUFBLEVBRUEsT0FBYyxPQUFPLE1BQWM7QUFDakMsVUFBTSxLQUFLLGdCQUFnQixPQUFPO0FBQ2xDLFVBQU0sTUFBc0I7QUFBQSxNQUMxQjtBQUFBLE1BQ0E7QUFBQSxNQUNBLE1BQU07QUFBQSxNQUNOLHFCQUFxQjtBQUFBLElBQ3ZCO0FBQ0EsVUFBTSxXQUFXLElBQUksYUFBWSxHQUFHO0FBQ3BDLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxPQUFjLFNBQVMsS0FBcUI7QUFDMUMsVUFBTSxXQUFXLElBQUksYUFBWSxHQUFHO0FBQ3BDLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFFQSxRQUF3QjtBQUN0QixVQUFNLFFBQVEsZ0JBQWdCLE9BQU87QUFDckMsVUFBTSxNQUFNLEtBQUssT0FBTztBQUN4QixVQUFNLFlBQTRCLEVBQUUsR0FBRyxLQUFLLElBQUksTUFBTTtBQUN0RCxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsU0FBeUI7QUFDdkIsVUFBTSxNQUFzQjtBQUFBLE1BQzFCLElBQUksS0FBSztBQUFBLE1BQ1QsTUFBTSxLQUFLO0FBQUEsTUFDWCxNQUFNLEtBQUs7QUFBQSxNQUNYLHFCQUFxQixLQUFLO0FBQUEsSUFDNUI7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUNGOyIsCiAgIm5hbWVzIjogWyJCdWlsZGVyT2JqZWN0SWQiLCAiQnVpbGRlck9wdGlvblRoZW1lIiwgIkRVdGlsIiwgIlUiLCAiRFV0aWwiLCAibGFiZWwiLCAiQnVpbGRlck9wZXJhdG9yIiwgInYiLCAib3AiLCAiZHRvIiwgIkRTdGF0ZVByb3BzIiwgIlRoZW1lVXRpbHMiLCAiaGlkZUNvbW1hbmQiLCAic2hvd0NvbW1hbmQiLCAiRFV0aWwiLCAiVSIsICJEVXRpbCIsICJEVXRpbCIsICJVIiwgIkRVdGlsIl0KfQo=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@media-quest/builder",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.12",
|
|
4
4
|
"description": "Builder library for Media-quest schemas",
|
|
5
5
|
"main": "dist/public-api.js",
|
|
6
6
|
"module": "dist/public-api.mjs",
|
|
@@ -13,6 +13,6 @@
|
|
|
13
13
|
"prepublishOnly": "npm run build"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@media-quest/engine": "0.0.
|
|
16
|
+
"@media-quest/engine": "0.0.12"
|
|
17
17
|
}
|
|
18
18
|
}
|
package/src/public-api.ts
CHANGED
|
@@ -10,7 +10,6 @@ export { type BuilderTagDto, BuilderTag, TagCollection } from "./BuilderTag";
|
|
|
10
10
|
export { type AudioFile, type ImageFile, type VideoFile } from "./media-files";
|
|
11
11
|
// Public Api of rule-builder
|
|
12
12
|
export * from "./rulebuilder";
|
|
13
|
-
export { PagePrefix } from "./primitives/page-prefix";
|
|
14
|
-
export {
|
|
15
|
-
export { PagePrefixValue } from "./primitives/page-prefix";
|
|
13
|
+
export { PagePrefix, PagePrefixValue } from "./primitives/page-prefix";
|
|
14
|
+
export { SchemaPrefix, SchemaPrefixValue } from "./primitives/schema-prefix";
|
|
16
15
|
export { VarID } from "./primitives/varID";
|