@galacean/engine-physics-lite 0.0.0-experimental-animator-additive.2 → 0.0.0-experimental-animator-additive.4
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/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/miniprogram.js +1324 -1259
- package/dist/module.js +1 -1
- package/dist/module.js.map +1 -1
- package/package.json +4 -4
package/dist/main.js
CHANGED
|
@@ -1265,4 +1265,4 @@ exports.LitePhysics = /*#__PURE__*/ function() {
|
|
|
1265
1265
|
exports.LitePhysics = __decorate([
|
|
1266
1266
|
StaticInterfaceImplement()
|
|
1267
1267
|
], exports.LitePhysics);
|
|
1268
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3RzbGliQDIuNS4wL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHN3YytoZWxwZXJzQDAuNS4wL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19zZXRfcHJvdG90eXBlX29mLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bzd2MraGVscGVyc0AwLjUuMC9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9faW5oZXJpdHMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHN3YytoZWxwZXJzQDAuNS4wL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19jcmVhdGVfY2xhc3MuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHN3YytoZWxwZXJzQDAuNS4wL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19pbnN0YW5jZW9mLmpzIiwiLi4vc3JjL0xpdGVVcGRhdGVGbGFnLnRzIiwiLi4vc3JjL0xpdGVVcGRhdGVGbGFnTWFuYWdlci50cyIsIi4uL3NyYy9zaGFwZS9MaXRlQ29sbGlkZXJTaGFwZS50cyIsIi4uL3NyYy9MaXRlVHJhbnNmb3JtLnRzIiwiLi4vc3JjL0xpdGVDb2xsaWRlci50cyIsIi4uL3NyYy9MaXRlRHluYW1pY0NvbGxpZGVyLnRzIiwiLi4vc3JjL0Rpc29yZGVyZWRBcnJheS50cyIsIi4uL3NyYy9MaXRlSGl0UmVzdWx0LnRzIiwiLi4vc3JjL3NoYXBlL0xpdGVCb3hDb2xsaWRlclNoYXBlLnRzIiwiLi4vc3JjL3NoYXBlL0xpdGVTcGhlcmVDb2xsaWRlclNoYXBlLnRzIiwiLi4vc3JjL0xpdGVQaHlzaWNzTWFuYWdlci50cyIsIi4uL3NyYy9MaXRlUGh5c2ljc01hdGVyaWFsLnRzIiwiLi4vc3JjL0xpdGVTdGF0aWNDb2xsaWRlci50cyIsIi4uL3NyYy9TdGF0aWNJbnRlcmZhY2VJbXBsZW1lbnQudHMiLCIuLi9zcmMvTGl0ZVBoeXNpY3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcclxuICAgIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxyXG4gICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcclxuICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xyXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XHJcbiAgICB2YXIgXywgZG9uZSA9IGZhbHNlO1xyXG4gICAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgY29udGV4dCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xyXG4gICAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnB1c2goXyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xyXG4gICAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMucHVzaChfKTtcclxuICAgICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcclxuICAgIGRvbmUgPSB0cnVlO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcclxuICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xyXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xyXG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcclxuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgIHJldHVybiByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xyXG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XHJcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcclxuICAgIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xyXG4gICAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcclxufVxyXG4iLCJleHBvcnQgZnVuY3Rpb24gX3NldF9wcm90b3R5cGVfb2YobywgcCkge1xuICAgIF9zZXRfcHJvdG90eXBlX29mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgICAgby5fX3Byb3RvX18gPSBwO1xuXG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gX3NldF9wcm90b3R5cGVfb2YobywgcCk7XG59XG5leHBvcnQgeyBfc2V0X3Byb3RvdHlwZV9vZiBhcyBfIH07XG4iLCJpbXBvcnQgeyBfc2V0X3Byb3RvdHlwZV9vZiB9IGZyb20gXCIuL19zZXRfcHJvdG90eXBlX29mLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICB9XG5cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7XG5cbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldF9wcm90b3R5cGVfb2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuZXhwb3J0IHsgX2luaGVyaXRzIGFzIF8gfTtcbiIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuXG4gICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBfY3JlYXRlX2NsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcblxuICAgIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmV4cG9ydCB7IF9jcmVhdGVfY2xhc3MgYXMgXyB9O1xuIiwiZXhwb3J0IGZ1bmN0aW9uIF9pbnN0YW5jZW9mKGxlZnQsIHJpZ2h0KSB7XG4gICAgaWYgKHJpZ2h0ICE9IG51bGwgJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiByaWdodFtTeW1ib2wuaGFzSW5zdGFuY2VdKSB7XG4gICAgICAgIHJldHVybiAhIXJpZ2h0W1N5bWJvbC5oYXNJbnN0YW5jZV0obGVmdCk7XG4gICAgfSBlbHNlIHJldHVybiBsZWZ0IGluc3RhbmNlb2YgcmlnaHQ7XG59XG5leHBvcnQgeyBfaW5zdGFuY2VvZiBhcyBfIH07XG4iLCIvKipcbiAqIEZhc3RseSByZW1vdmUgYW4gZWxlbWVudCBmcm9tIGFycmF5LlxuICogQHBhcmFtIGFycmF5IC0gQXJyYXlcbiAqIEBwYXJhbSBpdGVtIC0gRWxlbWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRnJvbUFycmF5KGFycmF5OiBhbnlbXSwgaXRlbTogYW55KTogYm9vbGVhbiB7XG4gIGNvbnN0IGluZGV4ID0gYXJyYXkuaW5kZXhPZihpdGVtKTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBsYXN0ID0gYXJyYXkubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ICE9PSBsYXN0KSB7XG4gICAgYXJyYXlbaW5kZXhdID0gYXJyYXlbbGFzdF07XG4gIH1cbiAgYXJyYXkubGVuZ3RoLS07XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFVzZWQgdG8gdXBkYXRlIHRhZ3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBMaXRlVXBkYXRlRmxhZyB7XG4gIC8qKiBGbGFnLiAqL1xuICBmbGFnID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9mbGFnczogTGl0ZVVwZGF0ZUZsYWdbXSA9IFtdKSB7XG4gICAgdGhpcy5fZmxhZ3MucHVzaCh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95LlxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICByZW1vdmVGcm9tQXJyYXkodGhpcy5fZmxhZ3MsIHRoaXMpO1xuICAgIHRoaXMuX2ZsYWdzID0gbnVsbDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgTGl0ZVVwZGF0ZUZsYWcgfSBmcm9tIFwiLi9MaXRlVXBkYXRlRmxhZ1wiO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY2xhc3MgTGl0ZVVwZGF0ZUZsYWdNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBfdXBkYXRlRmxhZ3M6IExpdGVVcGRhdGVGbGFnW10gPSBbXTtcblxuICByZWdpc3RlcigpOiBMaXRlVXBkYXRlRmxhZyB7XG4gICAgcmV0dXJuIG5ldyBMaXRlVXBkYXRlRmxhZyh0aGlzLl91cGRhdGVGbGFncyk7XG4gIH1cblxuICBkaXN0cmlidXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHVwZGF0ZUZsYWdzID0gdGhpcy5fdXBkYXRlRmxhZ3M7XG4gICAgZm9yIChsZXQgaSA9IHVwZGF0ZUZsYWdzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB1cGRhdGVGbGFnc1tpXS5mbGFnID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IElDb2xsaWRlclNoYXBlLCBJUGh5c2ljc01hdGVyaWFsIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtZGVzaWduXCI7XG5pbXBvcnQgeyBNYXRyaXgsIFJheSwgVmVjdG9yMyB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lXCI7XG5pbXBvcnQgeyBMaXRlQ29sbGlkZXIgfSBmcm9tIFwiLi4vTGl0ZUNvbGxpZGVyXCI7XG5pbXBvcnQgeyBMaXRlSGl0UmVzdWx0IH0gZnJvbSBcIi4uL0xpdGVIaXRSZXN1bHRcIjtcbmltcG9ydCB7IExpdGVUcmFuc2Zvcm0gfSBmcm9tIFwiLi4vTGl0ZVRyYW5zZm9ybVwiO1xuaW1wb3J0IHsgTGl0ZVVwZGF0ZUZsYWcgfSBmcm9tIFwiLi4vTGl0ZVVwZGF0ZUZsYWdcIjtcblxuLyoqXG4gKiBBYnN0cmFjdCBjbGFzcyBmb3IgY29sbGlkZXIgc2hhcGVzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTGl0ZUNvbGxpZGVyU2hhcGUgaW1wbGVtZW50cyBJQ29sbGlkZXJTaGFwZSB7XG4gIHByaXZhdGUgc3RhdGljIF9yYXkgPSBuZXcgUmF5KCk7XG4gIHByaXZhdGUgc3RhdGljIF90ZW1wUG9pbnQgPSBuZXcgVmVjdG9yMygpO1xuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX2lkOiBudW1iZXI7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX2NvbGxpZGVyOiBMaXRlQ29sbGlkZXI7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX3RyYW5zZm9ybTogTGl0ZVRyYW5zZm9ybSA9IG5ldyBMaXRlVHJhbnNmb3JtKCk7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX2ludk1vZGVsTWF0cml4OiBNYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX2ludmVyc2VXb3JsZE1hdEZsYWc6IExpdGVVcGRhdGVGbGFnO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl90cmFuc2Zvcm0ub3duZXIgPSB0aGlzO1xuICAgIHRoaXMuX2ludmVyc2VXb3JsZE1hdEZsYWcgPSB0aGlzLl90cmFuc2Zvcm0ucmVnaXN0ZXJXb3JsZENoYW5nZUZsYWcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyU2hhcGUuc2V0Um90YXRpb24gfVxuICAgKi9cbiAgc2V0Um90YXRpb24ocm90YXRpb246IFZlY3RvcjMpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldFJvdGF0aW9uLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyU2hhcGUuc2V0UG9zaXRpb24gfVxuICAgKi9cbiAgc2V0UG9zaXRpb24ocG9zaXRpb246IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aGlzLl90cmFuc2Zvcm0uc2V0UG9zaXRpb24ocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueik7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlclNoYXBlLnNldFdvcmxkU2NhbGUgfVxuICAgKi9cbiAgYWJzdHJhY3Qgc2V0V29ybGRTY2FsZShzY2FsZTogVmVjdG9yMyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRDb250YWN0T2Zmc2V0IH1cbiAgICovXG4gIHNldENvbnRhY3RPZmZzZXQob2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldENvbnRhY3RPZmZzZXQuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRNYXRlcmlhbCB9XG4gICAqL1xuICBzZXRNYXRlcmlhbChtYXRlcmlhbDogSVBoeXNpY3NNYXRlcmlhbCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0TWF0ZXJpYWwuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRVbmlxdWVJRCB9XG4gICAqL1xuICBzZXRVbmlxdWVJRChpZDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5faWQgPSBpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyU2hhcGUuc2V0SXNUcmlnZ2VyIH1cbiAgICovXG4gIHNldElzVHJpZ2dlcih2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0SXNUcmlnZ2VyLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyU2hhcGUuZGVzdHJveSB9XG4gICAqL1xuICBkZXN0cm95KCk6IHZvaWQge31cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBhYnN0cmFjdCBfcmF5Y2FzdChyYXk6IFJheSwgaGl0OiBMaXRlSGl0UmVzdWx0KTogYm9vbGVhbjtcblxuICBwcm90ZWN0ZWQgX3VwZGF0ZUhpdFJlc3VsdChcbiAgICByYXk6IFJheSxcbiAgICByYXlEaXN0YW5jZTogbnVtYmVyLFxuICAgIG91dEhpdDogTGl0ZUhpdFJlc3VsdCxcbiAgICBvcmlnaW46IFZlY3RvcjMsXG4gICAgaXNXb3JsZFJheTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGhpdFBvaW50ID0gTGl0ZUNvbGxpZGVyU2hhcGUuX3RlbXBQb2ludDtcbiAgICByYXkuZ2V0UG9pbnQocmF5RGlzdGFuY2UsIGhpdFBvaW50KTtcbiAgICBpZiAoIWlzV29ybGRSYXkpIHtcbiAgICAgIFZlY3RvcjMudHJhbnNmb3JtQ29vcmRpbmF0ZShoaXRQb2ludCwgdGhpcy5fdHJhbnNmb3JtLndvcmxkTWF0cml4LCBoaXRQb2ludCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGlzdGFuY2UgPSBWZWN0b3IzLmRpc3RhbmNlKG9yaWdpbiwgaGl0UG9pbnQpO1xuXG4gICAgaWYgKGRpc3RhbmNlIDwgb3V0SGl0LmRpc3RhbmNlKSB7XG4gICAgICBvdXRIaXQucG9pbnQuY29weUZyb20oaGl0UG9pbnQpO1xuICAgICAgb3V0SGl0LmRpc3RhbmNlID0gZGlzdGFuY2U7XG4gICAgICBvdXRIaXQuc2hhcGVJRCA9IHRoaXMuX2lkO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfZ2V0TG9jYWxSYXkocmF5OiBSYXkpOiBSYXkge1xuICAgIGNvbnN0IHdvcmxkVG9Mb2NhbCA9IHRoaXMuX2dldEludk1vZGVsTWF0cml4KCk7XG4gICAgY29uc3Qgb3V0UmF5ID0gTGl0ZUNvbGxpZGVyU2hhcGUuX3JheTtcblxuICAgIFZlY3RvcjMudHJhbnNmb3JtQ29vcmRpbmF0ZShyYXkub3JpZ2luLCB3b3JsZFRvTG9jYWwsIG91dFJheS5vcmlnaW4pO1xuICAgIFZlY3RvcjMudHJhbnNmb3JtTm9ybWFsKHJheS5kaXJlY3Rpb24sIHdvcmxkVG9Mb2NhbCwgb3V0UmF5LmRpcmVjdGlvbik7XG4gICAgb3V0UmF5LmRpcmVjdGlvbi5ub3JtYWxpemUoKTtcblxuICAgIHJldHVybiBvdXRSYXk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRJbnZNb2RlbE1hdHJpeCgpOiBNYXRyaXgge1xuICAgIGlmICh0aGlzLl9pbnZlcnNlV29ybGRNYXRGbGFnLmZsYWcpIHtcbiAgICAgIE1hdHJpeC5pbnZlcnQodGhpcy5fdHJhbnNmb3JtLndvcmxkTWF0cml4LCB0aGlzLl9pbnZNb2RlbE1hdHJpeCk7XG4gICAgICB0aGlzLl9pbnZlcnNlV29ybGRNYXRGbGFnLmZsYWcgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2ludk1vZGVsTWF0cml4O1xuICB9XG59XG4iLCJpbXBvcnQgeyBNYXRoVXRpbCwgTWF0cml4LCBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmVcIjtcbmltcG9ydCB7IExpdGVDb2xsaWRlciB9IGZyb20gXCIuL0xpdGVDb2xsaWRlclwiO1xuaW1wb3J0IHsgTGl0ZVVwZGF0ZUZsYWcgfSBmcm9tIFwiLi9MaXRlVXBkYXRlRmxhZ1wiO1xuaW1wb3J0IHsgTGl0ZVVwZGF0ZUZsYWdNYW5hZ2VyIH0gZnJvbSBcIi4vTGl0ZVVwZGF0ZUZsYWdNYW5hZ2VyXCI7XG5pbXBvcnQgeyBMaXRlQ29sbGlkZXJTaGFwZSB9IGZyb20gXCIuL3NoYXBlL0xpdGVDb2xsaWRlclNoYXBlXCI7XG5cbi8qKlxuICogVXNlZCB0byBpbXBsZW1lbnQgdHJhbnNmb3JtYXRpb24gcmVsYXRlZCBmdW5jdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBMaXRlVHJhbnNmb3JtIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbXBRdWF0MDogUXVhdGVybmlvbiA9IG5ldyBRdWF0ZXJuaW9uKCk7XG4gIHByaXZhdGUgc3RhdGljIF90ZW1wTWF0NDI6IE1hdHJpeCA9IG5ldyBNYXRyaXgoKTtcblxuICBwcml2YXRlIF9wb3NpdGlvbjogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCk7XG4gIHByaXZhdGUgX3JvdGF0aW9uOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKTtcbiAgcHJpdmF0ZSBfcm90YXRpb25RdWF0ZXJuaW9uOiBRdWF0ZXJuaW9uID0gbmV3IFF1YXRlcm5pb24oKTtcbiAgcHJpdmF0ZSBfc2NhbGU6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygxLCAxLCAxKTtcbiAgcHJpdmF0ZSBfd29ybGRSb3RhdGlvblF1YXRlcm5pb246IFF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpO1xuICBwcml2YXRlIF9sb2NhbE1hdHJpeDogTWF0cml4ID0gbmV3IE1hdHJpeCgpO1xuICBwcml2YXRlIF93b3JsZE1hdHJpeDogTWF0cml4ID0gbmV3IE1hdHJpeCgpO1xuICBwcml2YXRlIF91cGRhdGVGbGFnTWFuYWdlcjogTGl0ZVVwZGF0ZUZsYWdNYW5hZ2VyID0gbmV3IExpdGVVcGRhdGVGbGFnTWFuYWdlcigpO1xuICBwcml2YXRlIF9pc1BhcmVudERpcnR5OiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfcGFyZW50VHJhbnNmb3JtQ2FjaGU6IExpdGVUcmFuc2Zvcm0gPSBudWxsO1xuICBwcml2YXRlIF9kaXJ0eUZsYWc6IG51bWJlciA9IFRyYW5zZm9ybUZsYWcuV21XcFdlV3FXcztcblxuICBwcml2YXRlIF9vd25lcjogTGl0ZUNvbGxpZGVyU2hhcGUgfCBMaXRlQ29sbGlkZXI7XG5cbiAgc2V0IG93bmVyKHZhbHVlOiBMaXRlQ29sbGlkZXJTaGFwZSB8IExpdGVDb2xsaWRlcikge1xuICAgIHRoaXMuX293bmVyID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogTG9jYWwgcG9zaXRpb24uXG4gICAqIEByZW1hcmtzIE5lZWQgdG8gcmUtYXNzaWduIGFmdGVyIG1vZGlmaWNhdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIHRha2VzIGVmZmVjdC5cbiAgICovXG4gIGdldCBwb3NpdGlvbigpOiBWZWN0b3IzIHtcbiAgICByZXR1cm4gdGhpcy5fcG9zaXRpb247XG4gIH1cblxuICBzZXQgcG9zaXRpb24odmFsdWU6IFZlY3RvcjMpIHtcbiAgICBpZiAodGhpcy5fcG9zaXRpb24gIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl9wb3NpdGlvbi5jb3B5RnJvbSh2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuX3NldERpcnR5RmxhZ1RydWUoVHJhbnNmb3JtRmxhZy5Mb2NhbE1hdHJpeCk7XG4gICAgdGhpcy5fdXBkYXRlV29ybGRQb3NpdGlvbkZsYWcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2NhbCByb3RhdGlvbiwgZGVmaW5pbmcgdGhlIHJvdGF0aW9uIGJ5IHVzaW5nIGEgdW5pdCBxdWF0ZXJuaW9uLlxuICAgKiBAcmVtYXJrcyBOZWVkIHRvIHJlLWFzc2lnbiBhZnRlciBtb2RpZmljYXRpb24gdG8gZW5zdXJlIHRoYXQgdGhlIG1vZGlmaWNhdGlvbiB0YWtlcyBlZmZlY3QuXG4gICAqL1xuICBnZXQgcm90YXRpb25RdWF0ZXJuaW9uKCk6IFF1YXRlcm5pb24ge1xuICAgIGlmICh0aGlzLl9pc0NvbnRhaW5EaXJ0eUZsYWcoVHJhbnNmb3JtRmxhZy5Mb2NhbFF1YXQpKSB7XG4gICAgICBRdWF0ZXJuaW9uLnJvdGF0aW9uRXVsZXIoXG4gICAgICAgIE1hdGhVdGlsLmRlZ3JlZVRvUmFkaWFuKHRoaXMuX3JvdGF0aW9uLngpLFxuICAgICAgICBNYXRoVXRpbC5kZWdyZWVUb1JhZGlhbih0aGlzLl9yb3RhdGlvbi55KSxcbiAgICAgICAgTWF0aFV0aWwuZGVncmVlVG9SYWRpYW4odGhpcy5fcm90YXRpb24ueiksXG4gICAgICAgIHRoaXMuX3JvdGF0aW9uUXVhdGVybmlvblxuICAgICAgKTtcbiAgICAgIHRoaXMuX3NldERpcnR5RmxhZ0ZhbHNlKFRyYW5zZm9ybUZsYWcuTG9jYWxRdWF0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3JvdGF0aW9uUXVhdGVybmlvbjtcbiAgfVxuXG4gIHNldCByb3RhdGlvblF1YXRlcm5pb24odmFsdWU6IFF1YXRlcm5pb24pIHtcbiAgICBpZiAodGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uLmNvcHlGcm9tKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5fc2V0RGlydHlGbGFnVHJ1ZShUcmFuc2Zvcm1GbGFnLkxvY2FsTWF0cml4IHwgVHJhbnNmb3JtRmxhZy5Mb2NhbEV1bGVyKTtcbiAgICB0aGlzLl9zZXREaXJ0eUZsYWdGYWxzZShUcmFuc2Zvcm1GbGFnLkxvY2FsUXVhdCk7XG4gICAgdGhpcy5fdXBkYXRlV29ybGRSb3RhdGlvbkZsYWcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXb3JsZCByb3RhdGlvbiwgZGVmaW5pbmcgdGhlIHJvdGF0aW9uIGJ5IHVzaW5nIGEgdW5pdCBxdWF0ZXJuaW9uLlxuICAgKiBAcmVtYXJrcyBOZWVkIHRvIHJlLWFzc2lnbiBhZnRlciBtb2RpZmljYXRpb24gdG8gZW5zdXJlIHRoYXQgdGhlIG1vZGlmaWNhdGlvbiB0YWtlcyBlZmZlY3QuXG4gICAqL1xuICBnZXQgd29ybGRSb3RhdGlvblF1YXRlcm5pb24oKTogUXVhdGVybmlvbiB7XG4gICAgaWYgKHRoaXMuX2lzQ29udGFpbkRpcnR5RmxhZyhUcmFuc2Zvcm1GbGFnLldvcmxkUXVhdCkpIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2dldFBhcmVudFRyYW5zZm9ybSgpO1xuICAgICAgaWYgKHBhcmVudCAhPSBudWxsKSB7XG4gICAgICAgIFF1YXRlcm5pb24ubXVsdGlwbHkocGFyZW50LndvcmxkUm90YXRpb25RdWF0ZXJuaW9uLCB0aGlzLnJvdGF0aW9uUXVhdGVybmlvbiwgdGhpcy5fd29ybGRSb3RhdGlvblF1YXRlcm5pb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fd29ybGRSb3RhdGlvblF1YXRlcm5pb24uY29weUZyb20odGhpcy5yb3RhdGlvblF1YXRlcm5pb24pO1xuICAgICAgfVxuICAgICAgdGhpcy5fc2V0RGlydHlGbGFnRmFsc2UoVHJhbnNmb3JtRmxhZy5Xb3JsZFF1YXQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fd29ybGRSb3RhdGlvblF1YXRlcm5pb247XG4gIH1cblxuICBzZXQgd29ybGRSb3RhdGlvblF1YXRlcm5pb24odmFsdWU6IFF1YXRlcm5pb24pIHtcbiAgICBpZiAodGhpcy5fd29ybGRSb3RhdGlvblF1YXRlcm5pb24gIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl93b3JsZFJvdGF0aW9uUXVhdGVybmlvbi5jb3B5RnJvbSh2YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2dldFBhcmVudFRyYW5zZm9ybSgpO1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIFF1YXRlcm5pb24uaW52ZXJ0KHBhcmVudC53b3JsZFJvdGF0aW9uUXVhdGVybmlvbiwgTGl0ZVRyYW5zZm9ybS5fdGVtcFF1YXQwKTtcbiAgICAgIFF1YXRlcm5pb24ubXVsdGlwbHkodmFsdWUsIExpdGVUcmFuc2Zvcm0uX3RlbXBRdWF0MCwgdGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uLmNvcHlGcm9tKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5yb3RhdGlvblF1YXRlcm5pb24gPSB0aGlzLl9yb3RhdGlvblF1YXRlcm5pb247XG4gICAgdGhpcy5fc2V0RGlydHlGbGFnRmFsc2UoVHJhbnNmb3JtRmxhZy5Xb3JsZFF1YXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvY2FsIHNjYWxpbmcuXG4gICAqIEByZW1hcmtzIE5lZWQgdG8gcmUtYXNzaWduIGFmdGVyIG1vZGlmaWNhdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIHRha2VzIGVmZmVjdC5cbiAgICovXG4gIGdldCBzY2FsZSgpOiBWZWN0b3IzIHtcbiAgICByZXR1cm4gdGhpcy5fc2NhbGU7XG4gIH1cblxuICBzZXQgc2NhbGUodmFsdWU6IFZlY3RvcjMpIHtcbiAgICBpZiAodGhpcy5fc2NhbGUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl9zY2FsZS5jb3B5RnJvbSh2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuX3NldERpcnR5RmxhZ1RydWUoVHJhbnNmb3JtRmxhZy5Mb2NhbE1hdHJpeCk7XG4gICAgdGhpcy5fdXBkYXRlV29ybGRTY2FsZUZsYWcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2NhbCBtYXRyaXguXG4gICAqIEByZW1hcmtzIE5lZWQgdG8gcmUtYXNzaWduIGFmdGVyIG1vZGlmaWNhdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIHRha2VzIGVmZmVjdC5cbiAgICovXG4gIGdldCBsb2NhbE1hdHJpeCgpOiBNYXRyaXgge1xuICAgIGlmICh0aGlzLl9pc0NvbnRhaW5EaXJ0eUZsYWcoVHJhbnNmb3JtRmxhZy5Mb2NhbE1hdHJpeCkpIHtcbiAgICAgIE1hdHJpeC5hZmZpbmVUcmFuc2Zvcm1hdGlvbih0aGlzLl9zY2FsZSwgdGhpcy5yb3RhdGlvblF1YXRlcm5pb24sIHRoaXMuX3Bvc2l0aW9uLCB0aGlzLl9sb2NhbE1hdHJpeCk7XG4gICAgICB0aGlzLl9zZXREaXJ0eUZsYWdGYWxzZShUcmFuc2Zvcm1GbGFnLkxvY2FsTWF0cml4KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2xvY2FsTWF0cml4O1xuICB9XG5cbiAgc2V0IGxvY2FsTWF0cml4KHZhbHVlOiBNYXRyaXgpIHtcbiAgICBpZiAodGhpcy5fbG9jYWxNYXRyaXggIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2NhbE1hdHJpeC5jb3B5RnJvbSh2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuX2xvY2FsTWF0cml4LmRlY29tcG9zZSh0aGlzLl9wb3NpdGlvbiwgdGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uLCB0aGlzLl9zY2FsZSk7XG4gICAgdGhpcy5fc2V0RGlydHlGbGFnVHJ1ZShUcmFuc2Zvcm1GbGFnLkxvY2FsRXVsZXIpO1xuICAgIHRoaXMuX3NldERpcnR5RmxhZ0ZhbHNlKFRyYW5zZm9ybUZsYWcuTG9jYWxNYXRyaXgpO1xuICAgIHRoaXMuX3VwZGF0ZUFsbFdvcmxkRmxhZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdvcmxkIG1hdHJpeC5cbiAgICogQHJlbWFya3MgTmVlZCB0byByZS1hc3NpZ24gYWZ0ZXIgbW9kaWZpY2F0aW9uIHRvIGVuc3VyZSB0aGF0IHRoZSBtb2RpZmljYXRpb24gdGFrZXMgZWZmZWN0LlxuICAgKi9cbiAgZ2V0IHdvcmxkTWF0cml4KCk6IE1hdHJpeCB7XG4gICAgaWYgKHRoaXMuX2lzQ29udGFpbkRpcnR5RmxhZyhUcmFuc2Zvcm1GbGFnLldvcmxkTWF0cml4KSkge1xuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5fZ2V0UGFyZW50VHJhbnNmb3JtKCk7XG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIE1hdHJpeC5tdWx0aXBseShwYXJlbnQud29ybGRNYXRyaXgsIHRoaXMubG9jYWxNYXRyaXgsIHRoaXMuX3dvcmxkTWF0cml4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3dvcmxkTWF0cml4LmNvcHlGcm9tKHRoaXMubG9jYWxNYXRyaXgpO1xuICAgICAgfVxuICAgICAgdGhpcy5fc2V0RGlydHlGbGFnRmFsc2UoVHJhbnNmb3JtRmxhZy5Xb3JsZE1hdHJpeCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl93b3JsZE1hdHJpeDtcbiAgfVxuXG4gIHNldCB3b3JsZE1hdHJpeCh2YWx1ZTogTWF0cml4KSB7XG4gICAgaWYgKHRoaXMuX3dvcmxkTWF0cml4ICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fd29ybGRNYXRyaXguY29weUZyb20odmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9nZXRQYXJlbnRUcmFuc2Zvcm0oKTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBNYXRyaXguaW52ZXJ0KHBhcmVudC53b3JsZE1hdHJpeCwgTGl0ZVRyYW5zZm9ybS5fdGVtcE1hdDQyKTtcbiAgICAgIE1hdHJpeC5tdWx0aXBseShMaXRlVHJhbnNmb3JtLl90ZW1wTWF0NDIsIHZhbHVlLCB0aGlzLl9sb2NhbE1hdHJpeCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvY2FsTWF0cml4LmNvcHlGcm9tKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5sb2NhbE1hdHJpeCA9IHRoaXMuX2xvY2FsTWF0cml4O1xuICAgIHRoaXMuX3NldERpcnR5RmxhZ0ZhbHNlKFRyYW5zZm9ybUZsYWcuV29ybGRNYXRyaXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBsb2NhbCBwb3NpdGlvbiBieSBYLCBZLCBaIHZhbHVlLlxuICAgKiBAcGFyYW0geCAtIFggY29vcmRpbmF0ZVxuICAgKiBAcGFyYW0geSAtIFkgY29vcmRpbmF0ZVxuICAgKiBAcGFyYW0geiAtIFogY29vcmRpbmF0ZVxuICAgKi9cbiAgc2V0UG9zaXRpb24oeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3Bvc2l0aW9uLnNldCh4LCB5LCB6KTtcbiAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy5fcG9zaXRpb247XG4gIH1cblxuICAvKipcbiAgICogU2V0IGxvY2FsIHJvdGF0aW9uIGJ5IHRoZSBYLCBZLCBaLCBhbmQgVyBjb21wb25lbnRzIG9mIHRoZSBxdWF0ZXJuaW9uLlxuICAgKiBAcGFyYW0geCAtIFggY29tcG9uZW50IG9mIHF1YXRlcm5pb25cbiAgICogQHBhcmFtIHkgLSBZIGNvbXBvbmVudCBvZiBxdWF0ZXJuaW9uXG4gICAqIEBwYXJhbSB6IC0gWiBjb21wb25lbnQgb2YgcXVhdGVybmlvblxuICAgKiBAcGFyYW0gdyAtIFcgY29tcG9uZW50IG9mIHF1YXRlcm5pb25cbiAgICovXG4gIHNldFJvdGF0aW9uUXVhdGVybmlvbih4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyLCB3OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9yb3RhdGlvblF1YXRlcm5pb24uc2V0KHgsIHksIHosIHcpO1xuICAgIHRoaXMucm90YXRpb25RdWF0ZXJuaW9uID0gdGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBsb2NhbCBzY2FsaW5nIGJ5IHNjYWxpbmcgdmFsdWVzIGFsb25nIFgsIFksIFogYXhpcy5cbiAgICogQHBhcmFtIHggLSBTY2FsaW5nIGFsb25nIFggYXhpc1xuICAgKiBAcGFyYW0geSAtIFNjYWxpbmcgYWxvbmcgWSBheGlzXG4gICAqIEBwYXJhbSB6IC0gU2NhbGluZyBhbG9uZyBaIGF4aXNcbiAgICovXG4gIHNldFNjYWxlKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zY2FsZS5zZXQoeCwgeSwgeik7XG4gICAgdGhpcy5zY2FsZSA9IHRoaXMuX3NjYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIHdvcmxkIHRyYW5zZm9ybSBjaGFuZ2UgZmxhZy5cbiAgICogQHJldHVybnMgQ2hhbmdlIGZsYWdcbiAgICovXG4gIHJlZ2lzdGVyV29ybGRDaGFuZ2VGbGFnKCk6IExpdGVVcGRhdGVGbGFnIHtcbiAgICByZXR1cm4gdGhpcy5fdXBkYXRlRmxhZ01hbmFnZXIucmVnaXN0ZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgd29ybGRNYXRyaXg6IFdpbGwgdHJpZ2dlciB0aGUgd29ybGRNYXRyaXggdXBkYXRlIG9mIGl0c2VsZiBhbmQgYWxsIHBhcmVudCBlbnRpdGllcy5cbiAgICogR2V0IHdvcmxkUG9zaXRpb246IFdpbGwgdHJpZ2dlciB0aGUgd29ybGRNYXRyaXgsIGxvY2FsIHBvc2l0aW9uIHVwZGF0ZSBvZiBpdHNlbGYgYW5kIHRoZSB3b3JsZE1hdHJpeCB1cGRhdGUgb2YgYWxsIHBhcmVudCBlbnRpdGllcy5cbiAgICogSW4gc3VtbWFyeSwgYW55IHVwZGF0ZSBvZiByZWxhdGVkIHZhcmlhYmxlcyB3aWxsIGNhdXNlIHRoZSBkaXJ0eSBtYXJrIG9mIG9uZSBvZiB0aGUgZnVsbCBwcm9jZXNzICh3b3JsZE1hdHJpeCBvciB3b3JsZFJvdGF0aW9uUXVhdGVybmlvbikgdG8gYmUgZmFsc2UuXG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVXb3JsZFBvc2l0aW9uRmxhZygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lzQ29udGFpbkRpcnR5RmxhZ3MoVHJhbnNmb3JtRmxhZy5XbVdwKSkge1xuICAgICAgdGhpcy5fd29ybGRBc3NvY2lhdGVkQ2hhbmdlKFRyYW5zZm9ybUZsYWcuV21XcCk7XG4gICAgICBpZiAodGhpcy5fb3duZXIgaW5zdGFuY2VvZiBMaXRlQ29sbGlkZXIpIHtcbiAgICAgICAgY29uc3Qgc2hhcGVzID0gdGhpcy5fb3duZXIuX3NoYXBlcztcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMCwgbjogbnVtYmVyID0gc2hhcGVzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIHNoYXBlc1tpXS5fdHJhbnNmb3JtLl91cGRhdGVXb3JsZFBvc2l0aW9uRmxhZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3b3JsZE1hdHJpeDogV2lsbCB0cmlnZ2VyIHRoZSB3b3JsZE1hdHJpeCB1cGRhdGUgb2YgaXRzZWxmIGFuZCBhbGwgcGFyZW50IGVudGl0aWVzLlxuICAgKiBHZXQgd29ybGRQb3NpdGlvbjogV2lsbCB0cmlnZ2VyIHRoZSB3b3JsZE1hdHJpeCwgbG9jYWwgcG9zaXRpb24gdXBkYXRlIG9mIGl0c2VsZiBhbmQgdGhlIHdvcmxkTWF0cml4IHVwZGF0ZSBvZiBhbGwgcGFyZW50IGVudGl0aWVzLlxuICAgKiBHZXQgd29ybGRSb3RhdGlvblF1YXRlcm5pb246IFdpbGwgdHJpZ2dlciB0aGUgd29ybGQgcm90YXRpb24gKGluIHF1YXRlcm5pb24pIHVwZGF0ZSBvZiBpdHNlbGYgYW5kIGFsbCBwYXJlbnQgZW50aXRpZXMuXG4gICAqIEdldCB3b3JsZFJvdGF0aW9uOiBXaWxsIHRyaWdnZXIgdGhlIHdvcmxkIHJvdGF0aW9uKGluIGV1bGVyIGFuZCBxdWF0ZXJuaW9uKSB1cGRhdGUgb2YgaXRzZWxmIGFuZCB3b3JsZCByb3RhdGlvbihpbiBxdWF0ZXJuaW9uKSB1cGRhdGUgb2YgYWxsIHBhcmVudCBlbnRpdGllcy5cbiAgICogSW4gc3VtbWFyeSwgYW55IHVwZGF0ZSBvZiByZWxhdGVkIHZhcmlhYmxlcyB3aWxsIGNhdXNlIHRoZSBkaXJ0eSBtYXJrIG9mIG9uZSBvZiB0aGUgZnVsbCBwcm9jZXNzICh3b3JsZE1hdHJpeCBvciB3b3JsZFJvdGF0aW9uUXVhdGVybmlvbikgdG8gYmUgZmFsc2UuXG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVXb3JsZFJvdGF0aW9uRmxhZygpIHtcbiAgICBpZiAoIXRoaXMuX2lzQ29udGFpbkRpcnR5RmxhZ3MoVHJhbnNmb3JtRmxhZy5XbVdlV3EpKSB7XG4gICAgICB0aGlzLl93b3JsZEFzc29jaWF0ZWRDaGFuZ2UoVHJhbnNmb3JtRmxhZy5XbVdlV3EpO1xuICAgICAgaWYgKHRoaXMuX293bmVyIGluc3RhbmNlb2YgTGl0ZUNvbGxpZGVyKSB7XG4gICAgICAgIGNvbnN0IHNoYXBlcyA9IHRoaXMuX293bmVyLl9zaGFwZXM7XG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDAsIG46IG51bWJlciA9IHNoYXBlcy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBzaGFwZXNbaV0uX3RyYW5zZm9ybS5fdXBkYXRlV29ybGRSb3RhdGlvbkZsYWcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgd29ybGRNYXRyaXg6IFdpbGwgdHJpZ2dlciB0aGUgd29ybGRNYXRyaXggdXBkYXRlIG9mIGl0c2VsZiBhbmQgYWxsIHBhcmVudCBlbnRpdGllcy5cbiAgICogR2V0IHdvcmxkUG9zaXRpb246IFdpbGwgdHJpZ2dlciB0aGUgd29ybGRNYXRyaXgsIGxvY2FsIHBvc2l0aW9uIHVwZGF0ZSBvZiBpdHNlbGYgYW5kIHRoZSB3b3JsZE1hdHJpeCB1cGRhdGUgb2YgYWxsIHBhcmVudCBlbnRpdGllcy5cbiAgICogR2V0IHdvcmxkU2NhbGU6IFdpbGwgdHJpZ2dlciB0aGUgc2NhbGluZyB1cGRhdGUgb2YgaXRzZWxmIGFuZCBhbGwgcGFyZW50IGVudGl0aWVzLlxuICAgKiBJbiBzdW1tYXJ5LCBhbnkgdXBkYXRlIG9mIHJlbGF0ZWQgdmFyaWFibGVzIHdpbGwgY2F1c2UgdGhlIGRpcnR5IG1hcmsgb2Ygb25lIG9mIHRoZSBmdWxsIHByb2Nlc3MgKHdvcmxkTWF0cml4KSB0byBiZSBmYWxzZS5cbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZVdvcmxkU2NhbGVGbGFnKCkge1xuICAgIGlmICghdGhpcy5faXNDb250YWluRGlydHlGbGFncyhUcmFuc2Zvcm1GbGFnLldtV3MpKSB7XG4gICAgICB0aGlzLl93b3JsZEFzc29jaWF0ZWRDaGFuZ2UoVHJhbnNmb3JtRmxhZy5XbVdzKTtcbiAgICAgIGlmICh0aGlzLl9vd25lciBpbnN0YW5jZW9mIExpdGVDb2xsaWRlcikge1xuICAgICAgICBjb25zdCBzaGFwZXMgPSB0aGlzLl9vd25lci5fc2hhcGVzO1xuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwLCBuOiBudW1iZXIgPSBzaGFwZXMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgc2hhcGVzW2ldLl90cmFuc2Zvcm0uX3VwZGF0ZVdvcmxkU2NhbGVGbGFnKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGFsbCB3b3JsZCB0cmFuc2Zvcm0gcHJvcGVydHkgZGlydHkgZmxhZywgdGhlIHByaW5jaXBsZSBpcyB0aGUgc2FtZSBhcyBhYm92ZS5cbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZUFsbFdvcmxkRmxhZygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lzQ29udGFpbkRpcnR5RmxhZ3MoVHJhbnNmb3JtRmxhZy5XbVdwV2VXcVdzKSkge1xuICAgICAgdGhpcy5fd29ybGRBc3NvY2lhdGVkQ2hhbmdlKFRyYW5zZm9ybUZsYWcuV21XcFdlV3FXcyk7XG4gICAgICBpZiAodGhpcy5fb3duZXIgaW5zdGFuY2VvZiBMaXRlQ29sbGlkZXIpIHtcbiAgICAgICAgY29uc3Qgc2hhcGVzID0gdGhpcy5fb3duZXIuX3NoYXBlcztcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMCwgbjogbnVtYmVyID0gc2hhcGVzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIHNoYXBlc1tpXS5fdHJhbnNmb3JtLl91cGRhdGVBbGxXb3JsZEZsYWcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldFBhcmVudFRyYW5zZm9ybSgpOiBMaXRlVHJhbnNmb3JtIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLl9pc1BhcmVudERpcnR5KSB7XG4gICAgICByZXR1cm4gdGhpcy5fcGFyZW50VHJhbnNmb3JtQ2FjaGU7XG4gICAgfVxuICAgIGxldCBwYXJlbnRDYWNoZTogTGl0ZVRyYW5zZm9ybSA9IG51bGw7XG4gICAgaWYgKHRoaXMuX293bmVyIGluc3RhbmNlb2YgTGl0ZUNvbGxpZGVyU2hhcGUpIHtcbiAgICAgIGxldCBwYXJlbnQgPSB0aGlzLl9vd25lci5fY29sbGlkZXI7XG4gICAgICBwYXJlbnRDYWNoZSA9IHBhcmVudC5fdHJhbnNmb3JtO1xuICAgIH1cblxuICAgIHRoaXMuX3BhcmVudFRyYW5zZm9ybUNhY2hlID0gcGFyZW50Q2FjaGU7XG4gICAgdGhpcy5faXNQYXJlbnREaXJ0eSA9IGZhbHNlO1xuICAgIHJldHVybiBwYXJlbnRDYWNoZTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzQ29udGFpbkRpcnR5RmxhZ3ModGFyZ2V0RGlydHlGbGFnczogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLl9kaXJ0eUZsYWcgJiB0YXJnZXREaXJ0eUZsYWdzKSA9PT0gdGFyZ2V0RGlydHlGbGFncztcbiAgfVxuXG4gIHByaXZhdGUgX2lzQ29udGFpbkRpcnR5RmxhZyh0eXBlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuX2RpcnR5RmxhZyAmIHR5cGUpICE9IDA7XG4gIH1cblxuICBwcml2YXRlIF9zZXREaXJ0eUZsYWdUcnVlKHR5cGU6IG51bWJlcikge1xuICAgIHRoaXMuX2RpcnR5RmxhZyB8PSB0eXBlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0RGlydHlGbGFnRmFsc2UodHlwZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZGlydHlGbGFnICY9IH50eXBlO1xuICB9XG5cbiAgcHJpdmF0ZSBfd29ybGRBc3NvY2lhdGVkQ2hhbmdlKHR5cGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2RpcnR5RmxhZyB8PSB0eXBlO1xuICAgIHRoaXMuX3VwZGF0ZUZsYWdNYW5hZ2VyLmRpc3RyaWJ1dGUoKTtcbiAgfVxufVxuXG4vKipcbiAqIERpcnR5IGZsYWcgb2YgdHJhbnNmb3JtLlxuICovXG5lbnVtIFRyYW5zZm9ybUZsYWcge1xuICBMb2NhbEV1bGVyID0gMHgxLFxuICBMb2NhbFF1YXQgPSAweDIsXG4gIFdvcmxkUG9zaXRpb24gPSAweDQsXG4gIFdvcmxkRXVsZXIgPSAweDgsXG4gIFdvcmxkUXVhdCA9IDB4MTAsXG4gIFdvcmxkU2NhbGUgPSAweDIwLFxuICBMb2NhbE1hdHJpeCA9IDB4NDAsXG4gIFdvcmxkTWF0cml4ID0gMHg4MCxcblxuICAvKiogV29ybGRNYXRyaXggfCBXb3JsZFBvc2l0aW9uICovXG4gIFdtV3AgPSAweDg0LFxuICAvKiogV29ybGRNYXRyaXggfCBXb3JsZEV1bGVyIHwgV29ybGRRdWF0ICovXG4gIFdtV2VXcSA9IDB4OTgsXG4gIC8qKiBXb3JsZE1hdHJpeCB8IFdvcmxkUG9zaXRpb24gfCBXb3JsZEV1bGVyIHwgV29ybGRRdWF0ICovXG4gIFdtV3BXZVdxID0gMHg5YyxcbiAgLyoqIFdvcmxkTWF0cml4IHwgV29ybGRTY2FsZSAqL1xuICBXbVdzID0gMHhhMCxcbiAgLyoqIFdvcmxkTWF0cml4IHwgV29ybGRQb3NpdGlvbiB8IFdvcmxkU2NhbGUgKi9cbiAgV21XcFdzID0gMHhhNCxcbiAgLyoqIFdvcmxkTWF0cml4IHwgV29ybGRQb3NpdGlvbiB8IFdvcmxkRXVsZXIgfCBXb3JsZFF1YXQgfCBXb3JsZFNjYWxlICovXG4gIFdtV3BXZVdxV3MgPSAweGJjXG59XG4iLCJpbXBvcnQgeyBJQ29sbGlkZXIgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1kZXNpZ25cIjtcbmltcG9ydCB7IFF1YXRlcm5pb24sIFJheSwgVmVjdG9yMyB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lXCI7XG5pbXBvcnQgeyBMaXRlSGl0UmVzdWx0IH0gZnJvbSBcIi4vTGl0ZUhpdFJlc3VsdFwiO1xuaW1wb3J0IHsgTGl0ZUNvbGxpZGVyU2hhcGUgfSBmcm9tIFwiLi9zaGFwZS9MaXRlQ29sbGlkZXJTaGFwZVwiO1xuaW1wb3J0IHsgTGl0ZVRyYW5zZm9ybSB9IGZyb20gXCIuL0xpdGVUcmFuc2Zvcm1cIjtcblxuLyoqXG4gKiBBYnN0cmFjdCBjbGFzcyBvZiBwaHlzaWNhbCBjb2xsaWRlci5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIExpdGVDb2xsaWRlciBpbXBsZW1lbnRzIElDb2xsaWRlciB7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX3NoYXBlczogTGl0ZUNvbGxpZGVyU2hhcGVbXSA9IFtdO1xuICAvKiogQGludGVybmFsICovXG4gIF90cmFuc2Zvcm06IExpdGVUcmFuc2Zvcm0gPSBuZXcgTGl0ZVRyYW5zZm9ybSgpO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl90cmFuc2Zvcm0ub3duZXIgPSB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXIuYWRkU2hhcGUgfVxuICAgKi9cbiAgYWRkU2hhcGUoc2hhcGU6IExpdGVDb2xsaWRlclNoYXBlKTogdm9pZCB7XG4gICAgY29uc3Qgb2xkQ29sbGlkZXIgPSBzaGFwZS5fY29sbGlkZXI7XG4gICAgaWYgKG9sZENvbGxpZGVyICE9PSB0aGlzKSB7XG4gICAgICBpZiAob2xkQ29sbGlkZXIpIHtcbiAgICAgICAgb2xkQ29sbGlkZXIucmVtb3ZlU2hhcGUoc2hhcGUpO1xuICAgICAgfVxuICAgICAgdGhpcy5fc2hhcGVzLnB1c2goc2hhcGUpO1xuICAgICAgc2hhcGUuX2NvbGxpZGVyID0gdGhpcztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlci5yZW1vdmVTaGFwZSB9XG4gICAqL1xuICByZW1vdmVTaGFwZShzaGFwZTogTGl0ZUNvbGxpZGVyU2hhcGUpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX3NoYXBlcy5pbmRleE9mKHNoYXBlKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9zaGFwZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHNoYXBlLl9jb2xsaWRlciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXIuc2V0V29ybGRUcmFuc2Zvcm0gfVxuICAgKi9cbiAgc2V0V29ybGRUcmFuc2Zvcm0ocG9zaXRpb246IFZlY3RvcjMsIHJvdGF0aW9uOiBRdWF0ZXJuaW9uKTogdm9pZCB7XG4gICAgdGhpcy5fdHJhbnNmb3JtLnNldFBvc2l0aW9uKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopO1xuICAgIHRoaXMuX3RyYW5zZm9ybS5zZXRSb3RhdGlvblF1YXRlcm5pb24ocm90YXRpb24ueCwgcm90YXRpb24ueSwgcm90YXRpb24ueiwgcm90YXRpb24udyk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlci5nZXRXb3JsZFRyYW5zZm9ybSB9XG4gICAqL1xuICBnZXRXb3JsZFRyYW5zZm9ybShvdXRQb3NpdGlvbjogVmVjdG9yMywgb3V0Um90YXRpb246IFF1YXRlcm5pb24pOiB2b2lkIHtcbiAgICBjb25zdCB7IHBvc2l0aW9uLCByb3RhdGlvblF1YXRlcm5pb24gfSA9IHRoaXMuX3RyYW5zZm9ybTtcbiAgICBvdXRQb3NpdGlvbi5zZXQocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueik7XG4gICAgb3V0Um90YXRpb24uc2V0KHJvdGF0aW9uUXVhdGVybmlvbi54LCByb3RhdGlvblF1YXRlcm5pb24ueSwgcm90YXRpb25RdWF0ZXJuaW9uLnosIHJvdGF0aW9uUXVhdGVybmlvbi53KTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyLmRlc3Ryb3kgfVxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX3JheWNhc3QocmF5OiBSYXksIG9uUmF5Y2FzdDogKG9iajogbnVtYmVyKSA9PiBib29sZWFuLCBoaXQ6IExpdGVIaXRSZXN1bHQpOiBib29sZWFuIHtcbiAgICBoaXQuZGlzdGFuY2UgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgIGNvbnN0IHNoYXBlcyA9IHRoaXMuX3NoYXBlcztcbiAgICBmb3IgKGxldCBpID0gMCwgbiA9IHNoYXBlcy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgIGNvbnN0IHNoYXBlID0gc2hhcGVzW2ldO1xuICAgICAgb25SYXljYXN0KHNoYXBlLl9pZCkgJiYgc2hhcGUuX3JheWNhc3QocmF5LCBoaXQpO1xuICAgIH1cblxuICAgIHJldHVybiBoaXQuZGlzdGFuY2UgIT0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgTGl0ZUNvbGxpZGVyIH0gZnJvbSBcIi4vTGl0ZUNvbGxpZGVyXCI7XG5pbXBvcnQgeyBJRHluYW1pY0NvbGxpZGVyIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtZGVzaWduXCI7XG5pbXBvcnQgeyBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmVcIjtcblxuLyoqXG4gKiBBIGR5bmFtaWMgY29sbGlkZXIgY2FuIGFjdCB3aXRoIHNlbGYtZGVmaW5lZCBtb3ZlbWVudCBvciBwaHlzaWNhbCBmb3JjZVxuICovXG5leHBvcnQgY2xhc3MgTGl0ZUR5bmFtaWNDb2xsaWRlciBleHRlbmRzIExpdGVDb2xsaWRlciBpbXBsZW1lbnRzIElEeW5hbWljQ29sbGlkZXIge1xuICAvKipcbiAgICogSW5pdGlhbGl6ZSBkeW5hbWljIGFjdG9yLlxuICAgKiBAcGFyYW0gcG9zaXRpb24gLSBUaGUgZ2xvYmFsIHBvc2l0aW9uXG4gICAqIEBwYXJhbSByb3RhdGlvbiAtIFRoZSBnbG9iYWwgcm90YXRpb25cbiAgICovXG4gIGNvbnN0cnVjdG9yKHBvc2l0aW9uOiBWZWN0b3IzLCByb3RhdGlvbjogUXVhdGVybmlvbikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fdHJhbnNmb3JtLnNldFBvc2l0aW9uKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopO1xuICAgIHRoaXMuX3RyYW5zZm9ybS5zZXRSb3RhdGlvblF1YXRlcm5pb24ocm90YXRpb24ueCwgcm90YXRpb24ueSwgcm90YXRpb24ueiwgcm90YXRpb24udyk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuYWRkRm9yY2UgfVxuICAgKi9cbiAgYWRkRm9yY2UoZm9yY2U6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IGFkZEZvcmNlLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLmFkZFRvcnF1ZSB9XG4gICAqL1xuICBhZGRUb3JxdWUodG9ycXVlOiBWZWN0b3IzKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBhZGRUb3JxdWUuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIubW92ZSB9XG4gICAqL1xuICBtb3ZlKHBvc2l0aW9uT3JSb3RhdGlvbjogVmVjdG9yMyB8IFF1YXRlcm5pb24sIHJvdGF0aW9uPzogUXVhdGVybmlvbik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgbW92ZS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zbGVlcCB9XG4gICAqL1xuICBzbGVlcCgpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHB1dFRvU2xlZXAuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuc2V0QW5ndWxhckRhbXBpbmcgfVxuICAgKi9cbiAgc2V0QW5ndWxhckRhbXBpbmcodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0QW5ndWxhckRhbXBpbmcuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuc2V0QW5ndWxhclZlbG9jaXR5IH1cbiAgICovXG4gIHNldEFuZ3VsYXJWZWxvY2l0eSh2YWx1ZTogVmVjdG9yMyk6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0QW5ndWxhclZlbG9jaXR5LiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldENlbnRlck9mTWFzcyB9XG4gICAqL1xuICBzZXRDZW50ZXJPZk1hc3ModmFsdWU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldENlbnRlck9mTWFzcy4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRDb2xsaXNpb25EZXRlY3Rpb25Nb2RlIH1cbiAgICovXG4gIHNldENvbGxpc2lvbkRldGVjdGlvbk1vZGUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0Q29sbGlzaW9uRGV0ZWN0aW9uTW9kZS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRDb25zdHJhaW50cyB9XG4gICAqL1xuICBzZXRDb25zdHJhaW50cyhmbGFnczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRDb25zdHJhaW50cy4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRJbmVydGlhVGVuc29yIH1cbiAgICovXG4gIHNldEluZXJ0aWFUZW5zb3IodmFsdWU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldEluZXJ0aWFUZW5zb3IuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuc2V0SXNLaW5lbWF0aWMgfVxuICAgKi9cbiAgc2V0SXNLaW5lbWF0aWModmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldElzS2luZW1hdGljLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldExpbmVhckRhbXBpbmcgfVxuICAgKi9cbiAgc2V0TGluZWFyRGFtcGluZyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRMaW5lYXJEYW1waW5nLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldExpbmVhclZlbG9jaXR5IH1cbiAgICovXG4gIHNldExpbmVhclZlbG9jaXR5KHZhbHVlOiBWZWN0b3IzKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRMaW5lYXJWZWxvY2l0eS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRNYXNzIH1cbiAgICovXG4gIHNldE1hc3ModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0TWFzcy4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRNYXhBbmd1bGFyVmVsb2NpdHkgfVxuICAgKi9cbiAgc2V0TWF4QW5ndWxhclZlbG9jaXR5KHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldE1heEFuZ3VsYXJWZWxvY2l0eS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRNYXhEZXBlbmV0cmF0aW9uVmVsb2NpdHkgfVxuICAgKi9cbiAgc2V0TWF4RGVwZW5ldHJhdGlvblZlbG9jaXR5KHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldE1heERlcGVuZXRyYXRpb25WZWxvY2l0eS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRTbGVlcFRocmVzaG9sZCB9XG4gICAqL1xuICBzZXRTbGVlcFRocmVzaG9sZCh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRTbGVlcFRocmVzaG9sZC4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRTb2x2ZXJJdGVyYXRpb25zIH1cbiAgICovXG4gIHNldFNvbHZlckl0ZXJhdGlvbnModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0U29sdmVySXRlcmF0aW9ucy4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci53YWtlVXAgfVxuICAgKi9cbiAgd2FrZVVwKCk6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgd2FrZVVwLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG59XG4iLCIvKipcbiAqIEhpZ2gtcGVyZm9ybWFuY2UgdW5vcmRlcmVkIGFycmF5LCBkZWxldGUgdXNlcyBleGNoYW5nZSBtZXRob2QgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSwgaW50ZXJuYWwgY2FwYWNpdHkgb25seSBpbmNyZWFzZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBEaXNvcmRlcmVkQXJyYXk8VD4ge1xuICBfZWxlbWVudHM6IFRbXTtcblxuICBsZW5ndGg6IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IoY291bnQ6IG51bWJlciA9IDApIHtcbiAgICB0aGlzLl9lbGVtZW50cyA9IG5ldyBBcnJheTxUPihjb3VudCk7XG4gIH1cblxuICBhZGQoZWxlbWVudDogVCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gdGhpcy5fZWxlbWVudHMubGVuZ3RoKSB0aGlzLl9lbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIGVsc2UgdGhpcy5fZWxlbWVudHNbdGhpcy5sZW5ndGhdID0gZWxlbWVudDtcbiAgICB0aGlzLmxlbmd0aCsrO1xuICB9XG5cbiAgZGVsZXRlKGVsZW1lbnQ6IFQpOiB2b2lkIHtcbiAgICAvL1RPRE86IEl0IGNhbiBiZSBvcHRpbWl6ZWQgZm9yIGN1c3RvbSBiaW5hcnkgc2VhcmNoIGFuZCBvdGhlciBhbGdvcml0aG1zLCBjdXJyZW50bHkgdGhpcy5fZWxlbWVudHM+PXRoaXMubGVuZ3RoIHdhc3RlcyBwZXJmb3JtYW5jZS5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2VsZW1lbnRzLmluZGV4T2YoZWxlbWVudCk7XG4gICAgdGhpcy5kZWxldGVCeUluZGV4KGluZGV4KTtcbiAgfVxuXG4gIGdldChpbmRleDogbnVtYmVyKTogVCB7XG4gICAgaWYgKGluZGV4ID49IHRoaXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBcIkluZGV4IGlzIG91dCBvZiByYW5nZS5cIjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRzW2luZGV4XTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gaW5kZXhcbiAgICogQHJldHVybnMgVGhlIHJlcGxhY2VkIGl0ZW0gaXMgdXNlZCB0byByZXNldCBpdHMgaW5kZXguXG4gICAqL1xuICBkZWxldGVCeUluZGV4KGluZGV4OiBudW1iZXIpOiBUIHtcbiAgICB2YXIgZWxlbWVudHM6IFRbXSA9IHRoaXMuX2VsZW1lbnRzO1xuICAgIGxldCBlbmQ6IFQgPSBudWxsO1xuICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMubGVuZ3RoIC0gMTtcbiAgICBpZiAoaW5kZXggIT09IGxhc3RJbmRleCkge1xuICAgICAgZW5kID0gZWxlbWVudHNbbGFzdEluZGV4XTtcbiAgICAgIGVsZW1lbnRzW2luZGV4XSA9IGVuZDtcbiAgICB9XG4gICAgdGhpcy5sZW5ndGgtLTtcbiAgICByZXR1cm4gZW5kO1xuICB9XG5cbiAgZ2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fZWxlbWVudHMubGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gIH1cbn1cbiIsImltcG9ydCB7IFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuXG4vKipcbiAqIFN0cnVjdHVyZSB1c2VkIHRvIGdldCBpbmZvcm1hdGlvbiBiYWNrIGZyb20gYSByYXljYXN0IG9yIGEgc3dlZXAuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIExpdGVIaXRSZXN1bHQge1xuICAvKiogVGhlIGNvbGxpZGVyIHRoYXQgd2FzIGhpdC4gKi9cbiAgc2hhcGVJRDogbnVtYmVyID0gLTE7XG4gIC8qKiBUaGUgZGlzdGFuY2UgZnJvbSB0aGUgb3JpZ2luIHRvIHRoZSBoaXQgcG9pbnQuICovXG4gIGRpc3RhbmNlOiBudW1iZXIgPSAwO1xuICAvKiogVGhlIGhpdCBwb2ludCBvZiB0aGUgY29sbGlkZXIgdGhhdCB3YXMgaGl0IGluIHdvcmxkIHNwYWNlLiAqL1xuICBwb2ludDogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCk7XG4gIC8qKiBUaGUgaGl0IG5vcm1hbCBvZiB0aGUgY29sbGlkZXIgdGhhdCB3YXMgaGl0IGluIHdvcmxkIHNwYWNlLiAqL1xuICBub3JtYWw6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpO1xufVxuIiwiaW1wb3J0IHsgSUJveENvbGxpZGVyU2hhcGUgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1kZXNpZ25cIjtcbmltcG9ydCB7IEJvdW5kaW5nQm94LCBSYXksIFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuaW1wb3J0IHsgTGl0ZUNvbGxpZGVyU2hhcGUgfSBmcm9tIFwiLi9MaXRlQ29sbGlkZXJTaGFwZVwiO1xuaW1wb3J0IHsgTGl0ZUhpdFJlc3VsdCB9IGZyb20gXCIuLi9MaXRlSGl0UmVzdWx0XCI7XG5pbXBvcnQgeyBMaXRlUGh5c2ljc01hdGVyaWFsIH0gZnJvbSBcIi4uL0xpdGVQaHlzaWNzTWF0ZXJpYWxcIjtcblxuLyoqXG4gKiBCb3ggY29sbGlkZXIgc2hhcGUgaW4gTGl0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIExpdGVCb3hDb2xsaWRlclNoYXBlIGV4dGVuZHMgTGl0ZUNvbGxpZGVyU2hhcGUgaW1wbGVtZW50cyBJQm94Q29sbGlkZXJTaGFwZSB7XG4gIHByaXZhdGUgc3RhdGljIF90ZW1wQm94OiBCb3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xuICBwcml2YXRlIF9oYWxmU2l6ZTogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCk7XG4gIHByaXZhdGUgX3NjYWxlOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoMSwgMSwgMSk7XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfYm94TWluOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoLTAuNSwgLTAuNSwgLTAuNSk7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX2JveE1heDogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKDAuNSwgMC41LCAwLjUpO1xuXG4gIC8qKlxuICAgKiBJbml0IEJveCBTaGFwZS5cbiAgICogQHBhcmFtIHVuaXF1ZUlEIC0gVW5pcXVlSUQgbWFyayBTaGFwZS5cbiAgICogQHBhcmFtIHNpemUgLSBTaXplIG9mIFNoYXBlLlxuICAgKiBAcGFyYW0gbWF0ZXJpYWwgLSBNYXRlcmlhbCBvZiBQaHlzWENvbGxpZGVyLlxuICAgKi9cbiAgY29uc3RydWN0b3IodW5pcXVlSUQ6IG51bWJlciwgc2l6ZTogVmVjdG9yMywgbWF0ZXJpYWw6IExpdGVQaHlzaWNzTWF0ZXJpYWwpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2lkID0gdW5pcXVlSUQ7XG4gICAgdGhpcy5faGFsZlNpemUuc2V0KHNpemUueCAqIDAuNSwgc2l6ZS55ICogMC41LCBzaXplLnogKiAwLjUpO1xuICAgIHRoaXMuX3NldEJvbmRpbmdCb3goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyU2hhcGUuc2V0UG9zaXRpb24gfVxuICAgKi9cbiAgc2V0UG9zaXRpb24ocG9zaXRpb246IFZlY3RvcjMpOiB2b2lkIHtcbiAgICBzdXBlci5zZXRQb3NpdGlvbihwb3NpdGlvbik7XG4gICAgdGhpcy5fc2V0Qm9uZGluZ0JveCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRXb3JsZFNjYWxlIH1cbiAgICovXG4gIHNldFdvcmxkU2NhbGUoc2NhbGU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aGlzLl90cmFuc2Zvcm0ucG9zaXRpb24gPSB0aGlzLl90cmFuc2Zvcm0ucG9zaXRpb24ubXVsdGlwbHkoc2NhbGUpO1xuICAgIHRoaXMuX3NjYWxlLmNvcHlGcm9tKHNjYWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUJveENvbGxpZGVyU2hhcGUuc2V0U2l6ZSB9XG4gICAqL1xuICBzZXRTaXplKHZhbHVlOiBWZWN0b3IzKTogdm9pZCB7XG4gICAgdGhpcy5faGFsZlNpemUuc2V0KHZhbHVlLnggKiAwLjUsIHZhbHVlLnkgKiAwLjUsIHZhbHVlLnogKiAwLjUpO1xuICAgIHRoaXMuX3NldEJvbmRpbmdCb3goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9yYXljYXN0KHJheTogUmF5LCBoaXQ6IExpdGVIaXRSZXN1bHQpOiBib29sZWFuIHtcbiAgICBjb25zdCBsb2NhbFJheSA9IHRoaXMuX2dldExvY2FsUmF5KHJheSk7XG5cbiAgICBjb25zdCBib3VuZGluZ0JveCA9IExpdGVCb3hDb2xsaWRlclNoYXBlLl90ZW1wQm94O1xuICAgIGJvdW5kaW5nQm94Lm1pbi5zZXQoXG4gICAgICAtdGhpcy5faGFsZlNpemUueCAqIHRoaXMuX3NjYWxlLngsXG4gICAgICAtdGhpcy5faGFsZlNpemUueSAqIHRoaXMuX3NjYWxlLnksXG4gICAgICAtdGhpcy5faGFsZlNpemUueiAqIHRoaXMuX3NjYWxlLnpcbiAgICApO1xuICAgIGJvdW5kaW5nQm94Lm1heC5zZXQoXG4gICAgICB0aGlzLl9oYWxmU2l6ZS54ICogdGhpcy5fc2NhbGUueCxcbiAgICAgIHRoaXMuX2hhbGZTaXplLnkgKiB0aGlzLl9zY2FsZS55LFxuICAgICAgdGhpcy5faGFsZlNpemUueiAqIHRoaXMuX3NjYWxlLnpcbiAgICApO1xuICAgIGNvbnN0IHJheURpc3RhbmNlID0gbG9jYWxSYXkuaW50ZXJzZWN0Qm94KGJvdW5kaW5nQm94KTtcbiAgICBpZiAocmF5RGlzdGFuY2UgIT09IC0xKSB7XG4gICAgICB0aGlzLl91cGRhdGVIaXRSZXN1bHQobG9jYWxSYXksIHJheURpc3RhbmNlLCBoaXQsIHJheS5vcmlnaW4pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRCb25kaW5nQm94KCk6IHZvaWQge1xuICAgIGNvbnN0IHsgcG9zaXRpb246IGNlbnRlciB9ID0gdGhpcy5fdHJhbnNmb3JtO1xuICAgIGNvbnN0IGhhbGZTaXplID0gdGhpcy5faGFsZlNpemU7XG5cbiAgICBWZWN0b3IzLmFkZChjZW50ZXIsIGhhbGZTaXplLCB0aGlzLl9ib3hNYXgpO1xuICAgIFZlY3RvcjMuc3VidHJhY3QoY2VudGVyLCBoYWxmU2l6ZSwgdGhpcy5fYm94TWluKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNwaGVyZUNvbGxpZGVyU2hhcGUgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1kZXNpZ25cIjtcbmltcG9ydCB7IExpdGVDb2xsaWRlclNoYXBlIH0gZnJvbSBcIi4vTGl0ZUNvbGxpZGVyU2hhcGVcIjtcbmltcG9ydCB7IEJvdW5kaW5nU3BoZXJlLCBRdWF0ZXJuaW9uLCBSYXksIFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuaW1wb3J0IHsgTGl0ZUhpdFJlc3VsdCB9IGZyb20gXCIuLi9MaXRlSGl0UmVzdWx0XCI7XG5pbXBvcnQgeyBMaXRlUGh5c2ljc01hdGVyaWFsIH0gZnJvbSBcIi4uL0xpdGVQaHlzaWNzTWF0ZXJpYWxcIjtcblxuLyoqXG4gKiBTcGhlcmUgY29sbGlkZXIgc2hhcGUgaW4gTGl0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIExpdGVTcGhlcmVDb2xsaWRlclNoYXBlIGV4dGVuZHMgTGl0ZUNvbGxpZGVyU2hhcGUgaW1wbGVtZW50cyBJU3BoZXJlQ29sbGlkZXJTaGFwZSB7XG4gIHByaXZhdGUgc3RhdGljIF90ZW1wU3BoZXJlOiBCb3VuZGluZ1NwaGVyZSA9IG5ldyBCb3VuZGluZ1NwaGVyZSgpO1xuXG4gIHByaXZhdGUgX3JhZGl1czogbnVtYmVyID0gMTtcbiAgcHJpdmF0ZSBfbWF4U2NhbGU6IG51bWJlciA9IDE7XG5cbiAgZ2V0IHdvcmxkUmFkaXVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JhZGl1cyAqIHRoaXMuX21heFNjYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXQgc3BoZXJlIHNoYXBlLlxuICAgKiBAcGFyYW0gdW5pcXVlSUQgLSBVbmlxdWVJRCBtYXJrIGNvbGxpZGVyXG4gICAqIEBwYXJhbSByYWRpdXMgLSBTaXplIG9mIFNwaGVyZUNvbGxpZGVyXG4gICAqIEBwYXJhbSBtYXRlcmlhbCAtIE1hdGVyaWFsIG9mIFBoeXNYQ29sbGlkZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKHVuaXF1ZUlEOiBudW1iZXIsIHJhZGl1czogbnVtYmVyLCBtYXRlcmlhbDogTGl0ZVBoeXNpY3NNYXRlcmlhbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fcmFkaXVzID0gcmFkaXVzO1xuICAgIHRoaXMuX2lkID0gdW5pcXVlSUQ7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElTcGhlcmVDb2xsaWRlclNoYXBlLnNldFJhZGl1cyB9XG4gICAqL1xuICBzZXRSYWRpdXModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3JhZGl1cyA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRXb3JsZFNjYWxlIH1cbiAgICovXG4gIHNldFdvcmxkU2NhbGUoc2NhbGU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aGlzLl9tYXhTY2FsZSA9IE1hdGgubWF4KHNjYWxlLngsIE1hdGgubWF4KHNjYWxlLngsIHNjYWxlLnkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9yYXljYXN0KHJheTogUmF5LCBoaXQ6IExpdGVIaXRSZXN1bHQpOiBib29sZWFuIHtcbiAgICBjb25zdCBib3VuZGluZ1NwaGVyZSA9IExpdGVTcGhlcmVDb2xsaWRlclNoYXBlLl90ZW1wU3BoZXJlO1xuICAgIFZlY3RvcjMudHJhbnNmb3JtQ29vcmRpbmF0ZSh0aGlzLl90cmFuc2Zvcm0ucG9zaXRpb24sIHRoaXMuX2NvbGxpZGVyLl90cmFuc2Zvcm0ud29ybGRNYXRyaXgsIGJvdW5kaW5nU3BoZXJlLmNlbnRlcik7XG4gICAgYm91bmRpbmdTcGhlcmUucmFkaXVzID0gdGhpcy53b3JsZFJhZGl1cztcblxuICAgIGNvbnN0IHJheURpc3RhbmNlID0gcmF5LmludGVyc2VjdFNwaGVyZShib3VuZGluZ1NwaGVyZSk7XG4gICAgaWYgKHJheURpc3RhbmNlICE9PSAtMSkge1xuICAgICAgdGhpcy5fdXBkYXRlSGl0UmVzdWx0KHJheSwgcmF5RGlzdGFuY2UsIGhpdCwgcmF5Lm9yaWdpbiwgdHJ1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgSUNoYXJhY3RlckNvbnRyb2xsZXIsIElQaHlzaWNzTWFuYWdlciB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWRlc2lnblwiO1xuaW1wb3J0IHsgQm91bmRpbmdCb3gsIEJvdW5kaW5nU3BoZXJlLCBDb2xsaXNpb25VdGlsLCBSYXksIFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuaW1wb3J0IHsgRGlzb3JkZXJlZEFycmF5IH0gZnJvbSBcIi4vRGlzb3JkZXJlZEFycmF5XCI7XG5pbXBvcnQgeyBMaXRlQ29sbGlkZXIgfSBmcm9tIFwiLi9MaXRlQ29sbGlkZXJcIjtcbmltcG9ydCB7IExpdGVIaXRSZXN1bHQgfSBmcm9tIFwiLi9MaXRlSGl0UmVzdWx0XCI7XG5pbXBvcnQgeyBMaXRlQm94Q29sbGlkZXJTaGFwZSB9IGZyb20gXCIuL3NoYXBlL0xpdGVCb3hDb2xsaWRlclNoYXBlXCI7XG5pbXBvcnQgeyBMaXRlQ29sbGlkZXJTaGFwZSB9IGZyb20gXCIuL3NoYXBlL0xpdGVDb2xsaWRlclNoYXBlXCI7XG5pbXBvcnQgeyBMaXRlU3BoZXJlQ29sbGlkZXJTaGFwZSB9IGZyb20gXCIuL3NoYXBlL0xpdGVTcGhlcmVDb2xsaWRlclNoYXBlXCI7XG5cbi8qKlxuICogQSBtYW5hZ2VyIGlzIGEgY29sbGVjdGlvbiBvZiBjb2xsaWRlcnMgYW5kIGNvbnN0cmFpbnRzIHdoaWNoIGNhbiBpbnRlcmFjdC5cbiAqL1xuZXhwb3J0IGNsYXNzIExpdGVQaHlzaWNzTWFuYWdlciBpbXBsZW1lbnRzIElQaHlzaWNzTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIF90ZW1wU3BoZXJlOiBCb3VuZGluZ1NwaGVyZSA9IG5ldyBCb3VuZGluZ1NwaGVyZSgpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVtcEJveDogQm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2N1cnJlbnRIaXQ6IExpdGVIaXRSZXN1bHQgPSBuZXcgTGl0ZUhpdFJlc3VsdCgpO1xuICBwcml2YXRlIHN0YXRpYyBfaGl0UmVzdWx0OiBMaXRlSGl0UmVzdWx0ID0gbmV3IExpdGVIaXRSZXN1bHQoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vbkNvbnRhY3RFbnRlcj86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfb25Db250YWN0RXhpdD86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfb25Db250YWN0U3RheT86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfb25UcmlnZ2VyRW50ZXI/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29uVHJpZ2dlckV4aXQ/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29uVHJpZ2dlclN0YXk/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBfY29sbGlkZXJzOiBMaXRlQ29sbGlkZXJbXSA9IFtdO1xuICBwcml2YXRlIF9zcGhlcmU6IEJvdW5kaW5nU3BoZXJlID0gbmV3IEJvdW5kaW5nU3BoZXJlKCk7XG4gIHByaXZhdGUgX2JveDogQm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcblxuICBwcml2YXRlIF9jdXJyZW50RXZlbnRzOiBEaXNvcmRlcmVkQXJyYXk8VHJpZ2dlckV2ZW50PiA9IG5ldyBEaXNvcmRlcmVkQXJyYXk8VHJpZ2dlckV2ZW50PigpO1xuICBwcml2YXRlIF9ldmVudE1hcDogUmVjb3JkPG51bWJlciwgUmVjb3JkPG51bWJlciwgVHJpZ2dlckV2ZW50Pj4gPSB7fTtcbiAgcHJpdmF0ZSBfZXZlbnRQb29sOiBUcmlnZ2VyRXZlbnRbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG9uQ29udGFjdEVudGVyPzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkLFxuICAgIG9uQ29udGFjdEV4aXQ/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25Db250YWN0U3RheT86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZCxcbiAgICBvblRyaWdnZXJFbnRlcj86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZCxcbiAgICBvblRyaWdnZXJFeGl0PzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkLFxuICAgIG9uVHJpZ2dlclN0YXk/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWRcbiAgKSB7XG4gICAgdGhpcy5fb25Db250YWN0RW50ZXIgPSBvbkNvbnRhY3RFbnRlcjtcbiAgICB0aGlzLl9vbkNvbnRhY3RFeGl0ID0gb25Db250YWN0RXhpdDtcbiAgICB0aGlzLl9vbkNvbnRhY3RTdGF5ID0gb25Db250YWN0U3RheTtcbiAgICB0aGlzLl9vblRyaWdnZXJFbnRlciA9IG9uVHJpZ2dlckVudGVyO1xuICAgIHRoaXMuX29uVHJpZ2dlckV4aXQgPSBvblRyaWdnZXJFeGl0O1xuICAgIHRoaXMuX29uVHJpZ2dlclN0YXkgPSBvblRyaWdnZXJTdGF5O1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIuc2V0R3Jhdml0eSB9XG4gICAqL1xuICBzZXRHcmF2aXR5KHZhbHVlOiBWZWN0b3IzKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBncmF2aXR5LiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3NNYW5hZ2VyLmFkZENvbGxpZGVyU2hhcGUgfVxuICAgKi9cbiAgYWRkQ29sbGlkZXJTaGFwZShjb2xsaWRlclNoYXBlOiBMaXRlQ29sbGlkZXJTaGFwZSk6IHZvaWQge1xuICAgIHRoaXMuX2V2ZW50TWFwW2NvbGxpZGVyU2hhcGUuX2lkXSA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIucmVtb3ZlQ29sbGlkZXJTaGFwZSB9XG4gICAqL1xuICByZW1vdmVDb2xsaWRlclNoYXBlKGNvbGxpZGVyU2hhcGU6IExpdGVDb2xsaWRlclNoYXBlKTogdm9pZCB7XG4gICAgY29uc3QgeyBfZXZlbnRQb29sOiBldmVudFBvb2wsIF9jdXJyZW50RXZlbnRzOiBjdXJyZW50RXZlbnRzIH0gPSB0aGlzO1xuICAgIGNvbnN0IHsgX2lkOiBzaGFwZUlEIH0gPSBjb2xsaWRlclNoYXBlO1xuICAgIGZvciAobGV0IGkgPSBjdXJyZW50RXZlbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBldmVudCA9IGN1cnJlbnRFdmVudHMuZ2V0KGkpO1xuICAgICAgaWYgKGV2ZW50LmluZGV4MSA9PSBzaGFwZUlEIHx8IGV2ZW50LmluZGV4MiA9PSBzaGFwZUlEKSB7XG4gICAgICAgIGN1cnJlbnRFdmVudHMuZGVsZXRlQnlJbmRleChpKTtcbiAgICAgICAgZXZlbnRQb29sLnB1c2goZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICBkZWxldGUgdGhpcy5fZXZlbnRNYXBbc2hhcGVJRF07XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWFuYWdlci5hZGRDb2xsaWRlciB9XG4gICAqL1xuICBhZGRDb2xsaWRlcihhY3RvcjogTGl0ZUNvbGxpZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fY29sbGlkZXJzLnB1c2goYWN0b3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIucmVtb3ZlQ29sbGlkZXIgfVxuICAgKi9cbiAgcmVtb3ZlQ29sbGlkZXIoY29sbGlkZXI6IExpdGVDb2xsaWRlcik6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fY29sbGlkZXJzLmluZGV4T2YoY29sbGlkZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2NvbGxpZGVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3NNYW5hZ2VyLnVwZGF0ZSB9XG4gICAqL1xuICB1cGRhdGUoZGVsdGFUaW1lOiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgY29sbGlkZXJzID0gdGhpcy5fY29sbGlkZXJzO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjb2xsaWRlcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHRoaXMuX2NvbGxpc2lvbkRldGVjdGlvbihkZWx0YVRpbWUsIGNvbGxpZGVyc1tpXSk7XG4gICAgfVxuICAgIHRoaXMuX2ZpcmVFdmVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIucmF5Y2FzdCB9XG4gICAqL1xuICByYXljYXN0KFxuICAgIHJheTogUmF5LFxuICAgIGRpc3RhbmNlOiBudW1iZXIsXG4gICAgb25SYXljYXN0OiAob2JqOiBudW1iZXIpID0+IGJvb2xlYW4sXG4gICAgaGl0PzogKHNoYXBlVW5pcXVlSUQ6IG51bWJlciwgZGlzdGFuY2U6IG51bWJlciwgcG9zaXRpb246IFZlY3RvcjMsIG5vcm1hbDogVmVjdG9yMykgPT4gdm9pZFxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCBjb2xsaWRlcnMgPSB0aGlzLl9jb2xsaWRlcnM7XG5cbiAgICBsZXQgaGl0UmVzdWx0OiBMaXRlSGl0UmVzdWx0O1xuICAgIGlmIChoaXQpIHtcbiAgICAgIGhpdFJlc3VsdCA9IExpdGVQaHlzaWNzTWFuYWdlci5faGl0UmVzdWx0O1xuICAgIH1cblxuICAgIGxldCBpc0hpdCA9IGZhbHNlO1xuICAgIGNvbnN0IGN1ckhpdCA9IExpdGVQaHlzaWNzTWFuYWdlci5fY3VycmVudEhpdDtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY29sbGlkZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBjb2xsaWRlciA9IGNvbGxpZGVyc1tpXTtcblxuICAgICAgaWYgKGNvbGxpZGVyLl9yYXljYXN0KHJheSwgb25SYXljYXN0LCBjdXJIaXQpKSB7XG4gICAgICAgIGlzSGl0ID0gdHJ1ZTtcbiAgICAgICAgaWYgKGN1ckhpdC5kaXN0YW5jZSA8IGRpc3RhbmNlKSB7XG4gICAgICAgICAgaWYgKGhpdFJlc3VsdCkge1xuICAgICAgICAgICAgaGl0UmVzdWx0Lm5vcm1hbC5jb3B5RnJvbShjdXJIaXQubm9ybWFsKTtcbiAgICAgICAgICAgIGhpdFJlc3VsdC5wb2ludC5jb3B5RnJvbShjdXJIaXQucG9pbnQpO1xuICAgICAgICAgICAgaGl0UmVzdWx0LmRpc3RhbmNlID0gY3VySGl0LmRpc3RhbmNlO1xuICAgICAgICAgICAgaGl0UmVzdWx0LnNoYXBlSUQgPSBjdXJIaXQuc2hhcGVJRDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRpc3RhbmNlID0gY3VySGl0LmRpc3RhbmNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpc0hpdCAmJiBoaXRSZXN1bHQpIHtcbiAgICAgIGhpdFJlc3VsdC5zaGFwZUlEID0gLTE7XG4gICAgICBoaXRSZXN1bHQuZGlzdGFuY2UgPSAwO1xuICAgICAgaGl0UmVzdWx0LnBvaW50LnNldCgwLCAwLCAwKTtcbiAgICAgIGhpdFJlc3VsdC5ub3JtYWwuc2V0KDAsIDAsIDApO1xuICAgIH0gZWxzZSBpZiAoaXNIaXQgJiYgaGl0UmVzdWx0KSB7XG4gICAgICBoaXQoaGl0UmVzdWx0LnNoYXBlSUQsIGhpdFJlc3VsdC5kaXN0YW5jZSwgaGl0UmVzdWx0LnBvaW50LCBoaXRSZXN1bHQubm9ybWFsKTtcbiAgICB9XG4gICAgcmV0dXJuIGlzSGl0O1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIuYWRkQ2hhcmFjdGVyQ29udHJvbGxlciB9XG4gICAqL1xuICBhZGRDaGFyYWN0ZXJDb250cm9sbGVyKGNoYXJhY3RlckNvbnRyb2xsZXI6IElDaGFyYWN0ZXJDb250cm9sbGVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBhZGRDaGFyYWN0ZXJDb250cm9sbGVyLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIucmVtb3ZlQ2hhcmFjdGVyQ29udHJvbGxlciB9XG4gICAqL1xuICByZW1vdmVDaGFyYWN0ZXJDb250cm9sbGVyKGNoYXJhY3RlckNvbnRyb2xsZXI6IElDaGFyYWN0ZXJDb250cm9sbGVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCByZW1vdmVDaGFyYWN0ZXJDb250cm9sbGVyLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgYm91bmRpbmcgYm94IGluIHdvcmxkIHNwYWNlIGZyb20gYm94Q29sbGlkZXIuXG4gICAqIEBwYXJhbSBib3hDb2xsaWRlciAtIFRoZSBib3hDb2xsaWRlciB0byBjYWxjdWxhdGVcbiAgICogQHBhcmFtIG91dCAtIFRoZSBjYWxjdWxhdGVkIGJvdW5kaW5nQm94XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBfdXBkYXRlV29ybGRCb3goYm94Q29sbGlkZXI6IExpdGVCb3hDb2xsaWRlclNoYXBlLCBvdXQ6IEJvdW5kaW5nQm94KTogdm9pZCB7XG4gICAgY29uc3QgbWF0ID0gYm94Q29sbGlkZXIuX3RyYW5zZm9ybS53b3JsZE1hdHJpeDtcbiAgICBvdXQubWluLmNvcHlGcm9tKGJveENvbGxpZGVyLl9ib3hNaW4pO1xuICAgIG91dC5tYXguY29weUZyb20oYm94Q29sbGlkZXIuX2JveE1heCk7XG4gICAgQm91bmRpbmdCb3gudHJhbnNmb3JtKG91dCwgbWF0LCBvdXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3BoZXJlIGluZm8gb2YgdGhlIGdpdmVuIHNwaGVyZSBjb2xsaWRlciBpbiB3b3JsZCBzcGFjZS5cbiAgICogQHBhcmFtIHNwaGVyZUNvbGxpZGVyIC0gVGhlIGdpdmVuIHNwaGVyZSBjb2xsaWRlclxuICAgKiBAcGFyYW0gb3V0IC0gVGhlIGNhbGN1bGF0ZWQgYm91bmRpbmdTcGhlcmVcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIF91cFdvcmxkU3BoZXJlKHNwaGVyZUNvbGxpZGVyOiBMaXRlU3BoZXJlQ29sbGlkZXJTaGFwZSwgb3V0OiBCb3VuZGluZ1NwaGVyZSk6IHZvaWQge1xuICAgIFZlY3RvcjMudHJhbnNmb3JtQ29vcmRpbmF0ZShzcGhlcmVDb2xsaWRlci5fdHJhbnNmb3JtLnBvc2l0aW9uLCBzcGhlcmVDb2xsaWRlci5fdHJhbnNmb3JtLndvcmxkTWF0cml4LCBvdXQuY2VudGVyKTtcbiAgICBvdXQucmFkaXVzID0gc3BoZXJlQ29sbGlkZXIud29ybGRSYWRpdXM7XG4gIH1cblxuICBwcml2YXRlIF9nZXRUcmlnZ2VyKGluZGV4MTogbnVtYmVyLCBpbmRleDI6IG51bWJlcik6IFRyaWdnZXJFdmVudCB7XG4gICAgbGV0IGV2ZW50OiBUcmlnZ2VyRXZlbnQ7XG4gICAgaWYgKHRoaXMuX2V2ZW50UG9vbC5sZW5ndGgpIHtcbiAgICAgIGV2ZW50ID0gdGhpcy5fZXZlbnRQb29sLnBvcCgpO1xuICAgICAgZXZlbnQuaW5kZXgxID0gaW5kZXgxO1xuICAgICAgZXZlbnQuaW5kZXgyID0gaW5kZXgyO1xuICAgIH0gZWxzZSB7XG4gICAgICBldmVudCA9IG5ldyBUcmlnZ2VyRXZlbnQoaW5kZXgxLCBpbmRleDIpO1xuICAgIH1cbiAgICB0aGlzLl9ldmVudE1hcFtpbmRleDFdW2luZGV4Ml0gPSBldmVudDtcbiAgICByZXR1cm4gZXZlbnQ7XG4gIH1cblxuICBwcml2YXRlIF9jb2xsaXNpb25EZXRlY3Rpb24oZGVsdGFUaW1lOiBudW1iZXIsIG15Q29sbGlkZXI6IExpdGVDb2xsaWRlcik6IHZvaWQge1xuICAgIGNvbnN0IGNvbGxpZGVycyA9IHRoaXMuX2NvbGxpZGVycztcblxuICAgIGNvbnN0IG15Q29sbGlkZXJTaGFwZXMgPSBteUNvbGxpZGVyLl9zaGFwZXM7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG15Q29sbGlkZXJTaGFwZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IG15U2hhcGUgPSBteUNvbGxpZGVyU2hhcGVzW2ldO1xuICAgICAgaWYgKG15U2hhcGUgaW5zdGFuY2VvZiBMaXRlQm94Q29sbGlkZXJTaGFwZSkge1xuICAgICAgICBMaXRlUGh5c2ljc01hbmFnZXIuX3VwZGF0ZVdvcmxkQm94KG15U2hhcGUsIHRoaXMuX2JveCk7XG4gICAgICAgIGZvciAobGV0IGogPSAwLCBsZW4gPSBjb2xsaWRlcnMubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICBjb25zdCBjb2xsaWRlclNoYXBlID0gY29sbGlkZXJzW2pdLl9zaGFwZXM7XG4gICAgICAgICAgZm9yIChsZXQgayA9IDAsIGxlbiA9IGNvbGxpZGVyU2hhcGUubGVuZ3RoOyBrIDwgbGVuOyBrKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNoYXBlID0gY29sbGlkZXJTaGFwZVtrXTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4MSA9IHNoYXBlLl9pZDtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4MiA9IG15U2hhcGUuX2lkO1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBpbmRleDEgPCBpbmRleDIgPyB0aGlzLl9ldmVudE1hcFtpbmRleDFdW2luZGV4Ml0gOiB0aGlzLl9ldmVudE1hcFtpbmRleDJdW2luZGV4MV07XG4gICAgICAgICAgICBpZiAoZXZlbnQgIT09IHVuZGVmaW5lZCAmJiAhZXZlbnQuYWxyZWFkeUludm9rZWQpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2hhcGUgIT0gbXlTaGFwZSAmJiB0aGlzLl9ib3hDb2xsaXNpb24oc2hhcGUpKSB7XG4gICAgICAgICAgICAgIGlmIChldmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBpbmRleDEgPCBpbmRleDIgPyB0aGlzLl9nZXRUcmlnZ2VyKGluZGV4MSwgaW5kZXgyKSA6IHRoaXMuX2dldFRyaWdnZXIoaW5kZXgyLCBpbmRleDEpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0YXRlID0gVHJpZ2dlckV2ZW50U3RhdGUuRW50ZXI7XG4gICAgICAgICAgICAgICAgZXZlbnQuYWxyZWFkeUludm9rZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50RXZlbnRzLmFkZChldmVudCk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhdGUgPT09IFRyaWdnZXJFdmVudFN0YXRlLkVudGVyKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RhdGUgPSBUcmlnZ2VyRXZlbnRTdGF0ZS5TdGF5O1xuICAgICAgICAgICAgICAgIGV2ZW50LmFscmVhZHlJbnZva2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhdGUgPT09IFRyaWdnZXJFdmVudFN0YXRlLlN0YXkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5hbHJlYWR5SW52b2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG15U2hhcGUgaW5zdGFuY2VvZiBMaXRlU3BoZXJlQ29sbGlkZXJTaGFwZSkge1xuICAgICAgICBMaXRlUGh5c2ljc01hbmFnZXIuX3VwV29ybGRTcGhlcmUobXlTaGFwZSwgdGhpcy5fc3BoZXJlKTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDAsIGxlbiA9IGNvbGxpZGVycy5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICAgIGNvbnN0IGNvbGxpZGVyU2hhcGUgPSBjb2xsaWRlcnNbal0uX3NoYXBlcztcbiAgICAgICAgICBmb3IgKGxldCBrID0gMCwgbGVuID0gY29sbGlkZXJTaGFwZS5sZW5ndGg7IGsgPCBsZW47IGsrKykge1xuICAgICAgICAgICAgY29uc3Qgc2hhcGUgPSBjb2xsaWRlclNoYXBlW2tdO1xuICAgICAgICAgICAgY29uc3QgaW5kZXgxID0gc2hhcGUuX2lkO1xuICAgICAgICAgICAgY29uc3QgaW5kZXgyID0gbXlTaGFwZS5faWQ7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IGluZGV4MSA8IGluZGV4MiA/IHRoaXMuX2V2ZW50TWFwW2luZGV4MV1baW5kZXgyXSA6IHRoaXMuX2V2ZW50TWFwW2luZGV4Ml1baW5kZXgxXTtcbiAgICAgICAgICAgIGlmIChldmVudCAhPT0gdW5kZWZpbmVkICYmICFldmVudC5hbHJlYWR5SW52b2tlZCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaGFwZSAhPSBteVNoYXBlICYmIHRoaXMuX3NwaGVyZUNvbGxpc2lvbihzaGFwZSkpIHtcbiAgICAgICAgICAgICAgaWYgKGV2ZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudCA9IGluZGV4MSA8IGluZGV4MiA/IHRoaXMuX2dldFRyaWdnZXIoaW5kZXgxLCBpbmRleDIpIDogdGhpcy5fZ2V0VHJpZ2dlcihpbmRleDIsIGluZGV4MSk7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RhdGUgPSBUcmlnZ2VyRXZlbnRTdGF0ZS5FbnRlcjtcbiAgICAgICAgICAgICAgICBldmVudC5hbHJlYWR5SW52b2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRFdmVudHMuYWRkKGV2ZW50KTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGF0ZSA9PT0gVHJpZ2dlckV2ZW50U3RhdGUuRW50ZXIpIHtcbiAgICAgICAgICAgICAgICBldmVudC5zdGF0ZSA9IFRyaWdnZXJFdmVudFN0YXRlLlN0YXk7XG4gICAgICAgICAgICAgICAgZXZlbnQuYWxyZWFkeUludm9rZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGF0ZSA9PT0gVHJpZ2dlckV2ZW50U3RhdGUuU3RheSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LmFscmVhZHlJbnZva2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9maXJlRXZlbnQoKTogdm9pZCB7XG4gICAgY29uc3QgeyBfZXZlbnRQb29sOiBldmVudFBvb2wsIF9jdXJyZW50RXZlbnRzOiBjdXJyZW50RXZlbnRzIH0gPSB0aGlzO1xuICAgIGZvciAobGV0IGkgPSBjdXJyZW50RXZlbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBldmVudCA9IGN1cnJlbnRFdmVudHMuZ2V0KGkpO1xuICAgICAgaWYgKCFldmVudC5hbHJlYWR5SW52b2tlZCkge1xuICAgICAgICBpZiAoZXZlbnQuc3RhdGUgPT0gVHJpZ2dlckV2ZW50U3RhdGUuRW50ZXIpIHtcbiAgICAgICAgICB0aGlzLl9vblRyaWdnZXJFbnRlcihldmVudC5pbmRleDEsIGV2ZW50LmluZGV4Mik7XG4gICAgICAgICAgZXZlbnQuYWxyZWFkeUludm9rZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXRlID09IFRyaWdnZXJFdmVudFN0YXRlLlN0YXkpIHtcbiAgICAgICAgICB0aGlzLl9vblRyaWdnZXJTdGF5KGV2ZW50LmluZGV4MSwgZXZlbnQuaW5kZXgyKTtcbiAgICAgICAgICBldmVudC5hbHJlYWR5SW52b2tlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50LnN0YXRlID0gVHJpZ2dlckV2ZW50U3RhdGUuRXhpdDtcbiAgICAgICAgdGhpcy5fZXZlbnRNYXBbZXZlbnQuaW5kZXgxXVtldmVudC5pbmRleDJdID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMuX29uVHJpZ2dlckV4aXQoZXZlbnQuaW5kZXgxLCBldmVudC5pbmRleDIpO1xuXG4gICAgICAgIGN1cnJlbnRFdmVudHMuZGVsZXRlQnlJbmRleChpKTtcbiAgICAgICAgZXZlbnRQb29sLnB1c2goZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2JveENvbGxpc2lvbihvdGhlcjogTGl0ZUNvbGxpZGVyU2hhcGUpOiBib29sZWFuIHtcbiAgICBpZiAob3RoZXIgaW5zdGFuY2VvZiBMaXRlQm94Q29sbGlkZXJTaGFwZSkge1xuICAgICAgY29uc3QgYm94ID0gTGl0ZVBoeXNpY3NNYW5hZ2VyLl90ZW1wQm94O1xuICAgICAgTGl0ZVBoeXNpY3NNYW5hZ2VyLl91cGRhdGVXb3JsZEJveChvdGhlciwgYm94KTtcbiAgICAgIHJldHVybiBDb2xsaXNpb25VdGlsLmludGVyc2VjdHNCb3hBbmRCb3goYm94LCB0aGlzLl9ib3gpO1xuICAgIH0gZWxzZSBpZiAob3RoZXIgaW5zdGFuY2VvZiBMaXRlU3BoZXJlQ29sbGlkZXJTaGFwZSkge1xuICAgICAgY29uc3Qgc3BoZXJlID0gTGl0ZVBoeXNpY3NNYW5hZ2VyLl90ZW1wU3BoZXJlO1xuICAgICAgTGl0ZVBoeXNpY3NNYW5hZ2VyLl91cFdvcmxkU3BoZXJlKG90aGVyLCBzcGhlcmUpO1xuICAgICAgcmV0dXJuIENvbGxpc2lvblV0aWwuaW50ZXJzZWN0c1NwaGVyZUFuZEJveChzcGhlcmUsIHRoaXMuX2JveCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgX3NwaGVyZUNvbGxpc2lvbihvdGhlcjogTGl0ZUNvbGxpZGVyU2hhcGUpOiBib29sZWFuIHtcbiAgICBpZiAob3RoZXIgaW5zdGFuY2VvZiBMaXRlQm94Q29sbGlkZXJTaGFwZSkge1xuICAgICAgY29uc3QgYm94ID0gTGl0ZVBoeXNpY3NNYW5hZ2VyLl90ZW1wQm94O1xuICAgICAgTGl0ZVBoeXNpY3NNYW5hZ2VyLl91cGRhdGVXb3JsZEJveChvdGhlciwgYm94KTtcbiAgICAgIHJldHVybiBDb2xsaXNpb25VdGlsLmludGVyc2VjdHNTcGhlcmVBbmRCb3godGhpcy5fc3BoZXJlLCBib3gpO1xuICAgIH0gZWxzZSBpZiAob3RoZXIgaW5zdGFuY2VvZiBMaXRlU3BoZXJlQ29sbGlkZXJTaGFwZSkge1xuICAgICAgY29uc3Qgc3BoZXJlID0gTGl0ZVBoeXNpY3NNYW5hZ2VyLl90ZW1wU3BoZXJlO1xuICAgICAgTGl0ZVBoeXNpY3NNYW5hZ2VyLl91cFdvcmxkU3BoZXJlKG90aGVyLCBzcGhlcmUpO1xuICAgICAgcmV0dXJuIENvbGxpc2lvblV0aWwuaW50ZXJzZWN0c1NwaGVyZUFuZFNwaGVyZShzcGhlcmUsIHRoaXMuX3NwaGVyZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFBoeXNpY3Mgc3RhdGVcbiAqL1xuZW51bSBUcmlnZ2VyRXZlbnRTdGF0ZSB7XG4gIEVudGVyLFxuICBTdGF5LFxuICBFeGl0XG59XG5cbi8qKlxuICogVHJpZ2dlciBldmVudCB0byBzdG9yZSBpbnRlcmFjdGl2ZSBvYmplY3QgaWRzIGFuZCBzdGF0ZS5cbiAqL1xuY2xhc3MgVHJpZ2dlckV2ZW50IHtcbiAgc3RhdGU6IFRyaWdnZXJFdmVudFN0YXRlO1xuICBpbmRleDE6IG51bWJlcjtcbiAgaW5kZXgyOiBudW1iZXI7XG4gIGFscmVhZHlJbnZva2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoaW5kZXgxOiBudW1iZXIsIGluZGV4MjogbnVtYmVyKSB7XG4gICAgdGhpcy5pbmRleDEgPSBpbmRleDE7XG4gICAgdGhpcy5pbmRleDIgPSBpbmRleDI7XG4gIH1cbn1cbiIsImltcG9ydCB7IElQaHlzaWNzTWF0ZXJpYWwgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1kZXNpZ25cIjtcblxuLyoqXG4gKiBQaHlzaWNzIG1hdGVyaWFsIGRlc2NyaWJlcyBob3cgdG8gaGFuZGxlIGNvbGxpZGluZyBvYmplY3RzIChmcmljdGlvbiwgYm91bmNpbmVzcykuXG4gKi9cbmV4cG9ydCBjbGFzcyBMaXRlUGh5c2ljc01hdGVyaWFsIGltcGxlbWVudHMgSVBoeXNpY3NNYXRlcmlhbCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHN0YXRpY0ZyaWN0aW9uOiBudW1iZXIsXG4gICAgZHluYW1pY0ZyaWN0aW9uOiBudW1iZXIsXG4gICAgYm91bmNpbmVzczogbnVtYmVyLFxuICAgIGZyaWN0aW9uQ29tYmluZTogbnVtYmVyLFxuICAgIGJvdW5jZUNvbWJpbmU6IG51bWJlclxuICApIHt9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hdGVyaWFsLnNldEJvdW5jaW5lc3MgfVxuICAgKi9cbiAgc2V0Qm91bmNpbmVzcyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBwaHlzaWNzIG1hdGVyaWFsLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hdGVyaWFsLnNldER5bmFtaWNGcmljdGlvbiB9XG4gICAqL1xuICBzZXREeW5hbWljRnJpY3Rpb24odmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgcGh5c2ljcyBtYXRlcmlhbC4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3NNYXRlcmlhbC5zZXRTdGF0aWNGcmljdGlvbiB9XG4gICAqL1xuICBzZXRTdGF0aWNGcmljdGlvbih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBwaHlzaWNzIG1hdGVyaWFsLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hdGVyaWFsLnNldEJvdW5jZUNvbWJpbmUgfVxuICAgKi9cbiAgc2V0Qm91bmNlQ29tYmluZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBwaHlzaWNzIG1hdGVyaWFsLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hdGVyaWFsLnNldEZyaWN0aW9uQ29tYmluZSB9XG4gICAqL1xuICBzZXRGcmljdGlvbkNvbWJpbmUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgcGh5c2ljcyBtYXRlcmlhbC4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3NNYXRlcmlhbC5kZXN0cm95IH1cbiAgICovXG4gIGRlc3Ryb3koKTogdm9pZCB7fVxufVxuIiwiaW1wb3J0IHsgSVN0YXRpY0NvbGxpZGVyIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtZGVzaWduXCI7XG5pbXBvcnQgeyBMaXRlQ29sbGlkZXIgfSBmcm9tIFwiLi9MaXRlQ29sbGlkZXJcIjtcbmltcG9ydCB7IFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuXG4vKipcbiAqIEEgc3RhdGljIGNvbGxpZGVyIGNvbXBvbmVudCB0aGF0IHdpbGwgbm90IG1vdmUuXG4gKiBAcmVtYXJrcyBNb3N0bHkgdXNlZCBmb3Igb2JqZWN0IHdoaWNoIGFsd2F5cyBzdGF5cyBhdCB0aGUgc2FtZSBwbGFjZSBhbmQgbmV2ZXIgbW92ZXMgYXJvdW5kLlxuICovXG5leHBvcnQgY2xhc3MgTGl0ZVN0YXRpY0NvbGxpZGVyIGV4dGVuZHMgTGl0ZUNvbGxpZGVyIGltcGxlbWVudHMgSVN0YXRpY0NvbGxpZGVyIHtcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgc3RhdGljIGFjdG9yLlxuICAgKiBAcGFyYW0gcG9zaXRpb24gLSBUaGUgZ2xvYmFsIHBvc2l0aW9uXG4gICAqIEBwYXJhbSByb3RhdGlvbiAtIFRoZSBnbG9iYWwgcm90YXRpb25cbiAgICovXG4gIGNvbnN0cnVjdG9yKHBvc2l0aW9uOiBWZWN0b3IzLCByb3RhdGlvbjogUXVhdGVybmlvbikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fdHJhbnNmb3JtLnNldFBvc2l0aW9uKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopO1xuICAgIHRoaXMuX3RyYW5zZm9ybS5zZXRSb3RhdGlvblF1YXRlcm5pb24ocm90YXRpb24ueCwgcm90YXRpb24ueSwgcm90YXRpb24ueiwgcm90YXRpb24udyk7XG4gIH1cbn1cbiIsIi8qKlxuICogIFN0YXRpYyBpbnRlcmZhY2UgaW1wbGVtZW50IGRlY29yYXRvci5cbiAqICBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMzk1NTE1Ny9ob3ctdG8tZGVmaW5lLXN0YXRpYy1wcm9wZXJ0eS1pbi10eXBlc2NyaXB0LWludGVyZmFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gU3RhdGljSW50ZXJmYWNlSW1wbGVtZW50PFQ+KCkge1xuICByZXR1cm4gPFUgZXh0ZW5kcyBUPihjb25zdHJ1Y3RvcjogVSkgPT4ge1xuICAgIGNvbnN0cnVjdG9yO1xuICB9O1xufVxuIiwiaW1wb3J0IHtcbiAgSUJveENvbGxpZGVyU2hhcGUsXG4gIElDYXBzdWxlQ29sbGlkZXJTaGFwZSxcbiAgSUNoYXJhY3RlckNvbnRyb2xsZXIsXG4gIElEeW5hbWljQ29sbGlkZXIsXG4gIElQaHlzaWNzLFxuICBJUGh5c2ljc01hbmFnZXIsXG4gIElQaHlzaWNzTWF0ZXJpYWwsXG4gIElQbGFuZUNvbGxpZGVyU2hhcGUsXG4gIElTcGhlcmVDb2xsaWRlclNoYXBlLFxuICBJU3RhdGljQ29sbGlkZXIsXG4gIElGaXhlZEpvaW50LFxuICBJSGluZ2VKb2ludCxcbiAgSVNwcmluZ0pvaW50LFxufSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1kZXNpZ25cIjtcbmltcG9ydCB7IFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuaW1wb3J0IHsgTGl0ZUR5bmFtaWNDb2xsaWRlciB9IGZyb20gXCIuL0xpdGVEeW5hbWljQ29sbGlkZXJcIjtcbmltcG9ydCB7IExpdGVQaHlzaWNzTWFuYWdlciB9IGZyb20gXCIuL0xpdGVQaHlzaWNzTWFuYWdlclwiO1xuaW1wb3J0IHsgTGl0ZVBoeXNpY3NNYXRlcmlhbCB9IGZyb20gXCIuL0xpdGVQaHlzaWNzTWF0ZXJpYWxcIjtcbmltcG9ydCB7IExpdGVTdGF0aWNDb2xsaWRlciB9IGZyb20gXCIuL0xpdGVTdGF0aWNDb2xsaWRlclwiO1xuaW1wb3J0IHsgTGl0ZUJveENvbGxpZGVyU2hhcGUgfSBmcm9tIFwiLi9zaGFwZS9MaXRlQm94Q29sbGlkZXJTaGFwZVwiO1xuaW1wb3J0IHsgTGl0ZVNwaGVyZUNvbGxpZGVyU2hhcGUgfSBmcm9tIFwiLi9zaGFwZS9MaXRlU3BoZXJlQ29sbGlkZXJTaGFwZVwiO1xuaW1wb3J0IHsgTGl0ZUNvbGxpZGVyIH0gZnJvbSBcIi4vTGl0ZUNvbGxpZGVyXCI7XG5pbXBvcnQgeyBTdGF0aWNJbnRlcmZhY2VJbXBsZW1lbnQgfSBmcm9tIFwiLi9TdGF0aWNJbnRlcmZhY2VJbXBsZW1lbnRcIjtcblxuQFN0YXRpY0ludGVyZmFjZUltcGxlbWVudDxJUGh5c2ljcz4oKVxuZXhwb3J0IGNsYXNzIExpdGVQaHlzaWNzIHtcbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljcy5jcmVhdGVQaHlzaWNzTWFuYWdlciB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlUGh5c2ljc01hbmFnZXIoXG4gICAgb25Db250YWN0QmVnaW4/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25Db250YWN0RW5kPzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkLFxuICAgIG9uQ29udGFjdFBlcnNpc3Q/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25UcmlnZ2VyQmVnaW4/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25UcmlnZ2VyRW5kPzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkLFxuICAgIG9uVHJpZ2dlclBlcnNpc3Q/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWRcbiAgKTogSVBoeXNpY3NNYW5hZ2VyIHtcbiAgICByZXR1cm4gbmV3IExpdGVQaHlzaWNzTWFuYWdlcihcbiAgICAgIG9uQ29udGFjdEJlZ2luLFxuICAgICAgb25Db250YWN0RW5kLFxuICAgICAgb25Db250YWN0UGVyc2lzdCxcbiAgICAgIG9uVHJpZ2dlckJlZ2luLFxuICAgICAgb25UcmlnZ2VyRW5kLFxuICAgICAgb25UcmlnZ2VyUGVyc2lzdFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZVN0YXRpY0NvbGxpZGVyIH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVTdGF0aWNDb2xsaWRlcihwb3NpdGlvbjogVmVjdG9yMywgcm90YXRpb246IFF1YXRlcm5pb24pOiBJU3RhdGljQ29sbGlkZXIge1xuICAgIHJldHVybiBuZXcgTGl0ZVN0YXRpY0NvbGxpZGVyKHBvc2l0aW9uLCByb3RhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZUR5bmFtaWNDb2xsaWRlciB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlRHluYW1pY0NvbGxpZGVyKHBvc2l0aW9uOiBWZWN0b3IzLCByb3RhdGlvbjogUXVhdGVybmlvbik6IElEeW5hbWljQ29sbGlkZXIge1xuICAgIHJldHVybiBuZXcgTGl0ZUR5bmFtaWNDb2xsaWRlcihwb3NpdGlvbiwgcm90YXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljcy5jcmVhdGVDaGFyYWN0ZXJDb250cm9sbGVyIH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVDaGFyYWN0ZXJDb250cm9sbGVyKCk6IElDaGFyYWN0ZXJDb250cm9sbGVyIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IGNyZWF0ZUNoYXJhY3RlckNvbnRyb2xsZXIuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZVBoeXNpY3NNYXRlcmlhbCB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlUGh5c2ljc01hdGVyaWFsKFxuICAgIHN0YXRpY0ZyaWN0aW9uOiBudW1iZXIsXG4gICAgZHluYW1pY0ZyaWN0aW9uOiBudW1iZXIsXG4gICAgYm91bmNpbmVzczogbnVtYmVyLFxuICAgIGZyaWN0aW9uQ29tYmluZTogbnVtYmVyLFxuICAgIGJvdW5jZUNvbWJpbmU6IG51bWJlclxuICApOiBJUGh5c2ljc01hdGVyaWFsIHtcbiAgICByZXR1cm4gbmV3IExpdGVQaHlzaWNzTWF0ZXJpYWwoc3RhdGljRnJpY3Rpb24sIGR5bmFtaWNGcmljdGlvbiwgYm91bmNpbmVzcywgZnJpY3Rpb25Db21iaW5lLCBib3VuY2VDb21iaW5lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3MuY3JlYXRlQm94Q29sbGlkZXJTaGFwZSB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlQm94Q29sbGlkZXJTaGFwZSh1bmlxdWVJRDogbnVtYmVyLCBzaXplOiBWZWN0b3IzLCBtYXRlcmlhbDogTGl0ZVBoeXNpY3NNYXRlcmlhbCk6IElCb3hDb2xsaWRlclNoYXBlIHtcbiAgICByZXR1cm4gbmV3IExpdGVCb3hDb2xsaWRlclNoYXBlKHVuaXF1ZUlELCBzaXplLCBtYXRlcmlhbCk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZVNwaGVyZUNvbGxpZGVyU2hhcGUgfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVNwaGVyZUNvbGxpZGVyU2hhcGUoXG4gICAgdW5pcXVlSUQ6IG51bWJlcixcbiAgICByYWRpdXM6IG51bWJlcixcbiAgICBtYXRlcmlhbDogTGl0ZVBoeXNpY3NNYXRlcmlhbFxuICApOiBJU3BoZXJlQ29sbGlkZXJTaGFwZSB7XG4gICAgcmV0dXJuIG5ldyBMaXRlU3BoZXJlQ29sbGlkZXJTaGFwZSh1bmlxdWVJRCwgcmFkaXVzLCBtYXRlcmlhbCk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZVBsYW5lQ29sbGlkZXJTaGFwZSB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlUGxhbmVDb2xsaWRlclNoYXBlKHVuaXF1ZUlEOiBudW1iZXIsIG1hdGVyaWFsOiBMaXRlUGh5c2ljc01hdGVyaWFsKTogSVBsYW5lQ29sbGlkZXJTaGFwZSB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBQbGFuZUNvbGxpZGVyU2hhcGUuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZUNhcHN1bGVDb2xsaWRlclNoYXBlIH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVDYXBzdWxlQ29sbGlkZXJTaGFwZShcbiAgICB1bmlxdWVJRDogbnVtYmVyLFxuICAgIHJhZGl1czogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIG1hdGVyaWFsOiBMaXRlUGh5c2ljc01hdGVyaWFsXG4gICk6IElDYXBzdWxlQ29sbGlkZXJTaGFwZSB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBDYXBzdWxlQ29sbGlkZXJTaGFwZS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3MuY3JlYXRlRml4ZWRKb2ludCB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlRml4ZWRKb2ludChjb2xsaWRlcjogTGl0ZUNvbGxpZGVyKTogSUZpeGVkSm9pbnQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgQ2Fwc3VsZUNvbGxpZGVyU2hhcGUuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZUhpbmdlSm9pbnQgfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUhpbmdlSm9pbnQoY29sbGlkZXI6IExpdGVDb2xsaWRlcik6IElIaW5nZUpvaW50IHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IENhcHN1bGVDb2xsaWRlclNoYXBlLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljcy5jcmVhdGVTcHJpbmdKb2ludCB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlU3ByaW5nSm9pbnQoY29sbGlkZXI6IExpdGVDb2xsaWRlcik6IElTcHJpbmdKb2ludCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBDYXBzdWxlQ29sbGlkZXJTaGFwZS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxufVxuIl0sIm5hbWVzIjpbInJlbW92ZUZyb21BcnJheSIsImFycmF5IiwiaXRlbSIsImluZGV4IiwiaW5kZXhPZiIsImxhc3QiLCJsZW5ndGgiLCJMaXRlVXBkYXRlRmxhZyIsIl9mbGFncyIsImZsYWciLCJwdXNoIiwiZGVzdHJveSIsIkxpdGVVcGRhdGVGbGFnTWFuYWdlciIsIl91cGRhdGVGbGFncyIsInJlZ2lzdGVyIiwiZGlzdHJpYnV0ZSIsInVwZGF0ZUZsYWdzIiwiaSIsIkxpdGVDb2xsaWRlclNoYXBlIiwiX3RyYW5zZm9ybSIsIkxpdGVUcmFuc2Zvcm0iLCJfaW52TW9kZWxNYXRyaXgiLCJNYXRyaXgiLCJvd25lciIsIl9pbnZlcnNlV29ybGRNYXRGbGFnIiwicmVnaXN0ZXJXb3JsZENoYW5nZUZsYWciLCJzZXRSb3RhdGlvbiIsInJvdGF0aW9uIiwiY29uc29sZSIsImxvZyIsInNldFBvc2l0aW9uIiwicG9zaXRpb24iLCJ4IiwieSIsInoiLCJzZXRDb250YWN0T2Zmc2V0Iiwib2Zmc2V0Iiwic2V0TWF0ZXJpYWwiLCJtYXRlcmlhbCIsInNldFVuaXF1ZUlEIiwiaWQiLCJfaWQiLCJzZXRJc1RyaWdnZXIiLCJ2YWx1ZSIsIl91cGRhdGVIaXRSZXN1bHQiLCJyYXkiLCJyYXlEaXN0YW5jZSIsIm91dEhpdCIsIm9yaWdpbiIsImlzV29ybGRSYXkiLCJoaXRQb2ludCIsIl90ZW1wUG9pbnQiLCJnZXRQb2ludCIsIlZlY3RvcjMiLCJ0cmFuc2Zvcm1Db29yZGluYXRlIiwid29ybGRNYXRyaXgiLCJkaXN0YW5jZSIsInBvaW50IiwiY29weUZyb20iLCJzaGFwZUlEIiwiX2dldExvY2FsUmF5Iiwid29ybGRUb0xvY2FsIiwiX2dldEludk1vZGVsTWF0cml4Iiwib3V0UmF5IiwiX3JheSIsInRyYW5zZm9ybU5vcm1hbCIsImRpcmVjdGlvbiIsIm5vcm1hbGl6ZSIsImludmVydCIsIlJheSIsIl9wb3NpdGlvbiIsIl9yb3RhdGlvbiIsIl9yb3RhdGlvblF1YXRlcm5pb24iLCJRdWF0ZXJuaW9uIiwiX3NjYWxlIiwiX3dvcmxkUm90YXRpb25RdWF0ZXJuaW9uIiwiX2xvY2FsTWF0cml4IiwiX3dvcmxkTWF0cml4IiwiX3VwZGF0ZUZsYWdNYW5hZ2VyIiwiX2lzUGFyZW50RGlydHkiLCJfcGFyZW50VHJhbnNmb3JtQ2FjaGUiLCJfZGlydHlGbGFnIiwic2V0Iiwic2V0Um90YXRpb25RdWF0ZXJuaW9uIiwidyIsInJvdGF0aW9uUXVhdGVybmlvbiIsInNldFNjYWxlIiwic2NhbGUiLCJfdXBkYXRlV29ybGRQb3NpdGlvbkZsYWciLCJfaXNDb250YWluRGlydHlGbGFncyIsIl93b3JsZEFzc29jaWF0ZWRDaGFuZ2UiLCJfb3duZXIiLCJMaXRlQ29sbGlkZXIiLCJzaGFwZXMiLCJfc2hhcGVzIiwibiIsIl91cGRhdGVXb3JsZFJvdGF0aW9uRmxhZyIsIl91cGRhdGVXb3JsZFNjYWxlRmxhZyIsIl91cGRhdGVBbGxXb3JsZEZsYWciLCJfZ2V0UGFyZW50VHJhbnNmb3JtIiwicGFyZW50Q2FjaGUiLCJwYXJlbnQiLCJfY29sbGlkZXIiLCJ0YXJnZXREaXJ0eUZsYWdzIiwiX2lzQ29udGFpbkRpcnR5RmxhZyIsInR5cGUiLCJfc2V0RGlydHlGbGFnVHJ1ZSIsIl9zZXREaXJ0eUZsYWdGYWxzZSIsInJvdGF0aW9uRXVsZXIiLCJNYXRoVXRpbCIsImRlZ3JlZVRvUmFkaWFuIiwid29ybGRSb3RhdGlvblF1YXRlcm5pb24iLCJtdWx0aXBseSIsIl90ZW1wUXVhdDAiLCJsb2NhbE1hdHJpeCIsImFmZmluZVRyYW5zZm9ybWF0aW9uIiwiZGVjb21wb3NlIiwiX3RlbXBNYXQ0MiIsIlRyYW5zZm9ybUZsYWciLCJMb2NhbEV1bGVyIiwiTG9jYWxRdWF0IiwiV29ybGRQb3NpdGlvbiIsIldvcmxkRXVsZXIiLCJXb3JsZFF1YXQiLCJXb3JsZFNjYWxlIiwiTG9jYWxNYXRyaXgiLCJXb3JsZE1hdHJpeCIsIldtV3AiLCJXbVdlV3EiLCJXbVdwV2VXcSIsIldtV3MiLCJXbVdwV3MiLCJXbVdwV2VXcVdzIiwiYWRkU2hhcGUiLCJzaGFwZSIsIm9sZENvbGxpZGVyIiwicmVtb3ZlU2hhcGUiLCJzcGxpY2UiLCJzZXRXb3JsZFRyYW5zZm9ybSIsImdldFdvcmxkVHJhbnNmb3JtIiwib3V0UG9zaXRpb24iLCJvdXRSb3RhdGlvbiIsIl9yYXljYXN0Iiwib25SYXljYXN0IiwiaGl0IiwiTnVtYmVyIiwiTUFYX1ZBTFVFIiwiTGl0ZUR5bmFtaWNDb2xsaWRlciIsImFkZEZvcmNlIiwiZm9yY2UiLCJhZGRUb3JxdWUiLCJ0b3JxdWUiLCJtb3ZlIiwicG9zaXRpb25PclJvdGF0aW9uIiwic2xlZXAiLCJzZXRBbmd1bGFyRGFtcGluZyIsInNldEFuZ3VsYXJWZWxvY2l0eSIsInNldENlbnRlck9mTWFzcyIsInNldENvbGxpc2lvbkRldGVjdGlvbk1vZGUiLCJzZXRDb25zdHJhaW50cyIsImZsYWdzIiwic2V0SW5lcnRpYVRlbnNvciIsInNldElzS2luZW1hdGljIiwic2V0TGluZWFyRGFtcGluZyIsInNldExpbmVhclZlbG9jaXR5Iiwic2V0TWFzcyIsInNldE1heEFuZ3VsYXJWZWxvY2l0eSIsInNldE1heERlcGVuZXRyYXRpb25WZWxvY2l0eSIsInNldFNsZWVwVGhyZXNob2xkIiwic2V0U29sdmVySXRlcmF0aW9ucyIsIndha2VVcCIsIkRpc29yZGVyZWRBcnJheSIsImNvdW50IiwiX2VsZW1lbnRzIiwiQXJyYXkiLCJhZGQiLCJlbGVtZW50IiwiZGVsZXRlIiwiZGVsZXRlQnlJbmRleCIsImdldCIsImVsZW1lbnRzIiwiZW5kIiwibGFzdEluZGV4IiwiZ2FyYmFnZUNvbGxlY3Rpb24iLCJMaXRlSGl0UmVzdWx0Iiwibm9ybWFsIiwiTGl0ZUJveENvbGxpZGVyU2hhcGUiLCJ1bmlxdWVJRCIsInNpemUiLCJfaGFsZlNpemUiLCJfYm94TWluIiwiX2JveE1heCIsIl9zZXRCb25kaW5nQm94Iiwic2V0V29ybGRTY2FsZSIsInNldFNpemUiLCJsb2NhbFJheSIsImJvdW5kaW5nQm94IiwiX3RlbXBCb3giLCJtaW4iLCJtYXgiLCJpbnRlcnNlY3RCb3giLCJjZW50ZXIiLCJoYWxmU2l6ZSIsInN1YnRyYWN0IiwiQm91bmRpbmdCb3giLCJMaXRlU3BoZXJlQ29sbGlkZXJTaGFwZSIsInJhZGl1cyIsIl9yYWRpdXMiLCJfbWF4U2NhbGUiLCJzZXRSYWRpdXMiLCJNYXRoIiwiYm91bmRpbmdTcGhlcmUiLCJfdGVtcFNwaGVyZSIsIndvcmxkUmFkaXVzIiwiaW50ZXJzZWN0U3BoZXJlIiwiQm91bmRpbmdTcGhlcmUiLCJMaXRlUGh5c2ljc01hbmFnZXIiLCJvbkNvbnRhY3RFbnRlciIsIm9uQ29udGFjdEV4aXQiLCJvbkNvbnRhY3RTdGF5Iiwib25UcmlnZ2VyRW50ZXIiLCJvblRyaWdnZXJFeGl0Iiwib25UcmlnZ2VyU3RheSIsIl9jb2xsaWRlcnMiLCJfc3BoZXJlIiwiX2JveCIsIl9jdXJyZW50RXZlbnRzIiwiX2V2ZW50TWFwIiwiX2V2ZW50UG9vbCIsIl9vbkNvbnRhY3RFbnRlciIsIl9vbkNvbnRhY3RFeGl0IiwiX29uQ29udGFjdFN0YXkiLCJfb25UcmlnZ2VyRW50ZXIiLCJfb25UcmlnZ2VyRXhpdCIsIl9vblRyaWdnZXJTdGF5Iiwic2V0R3Jhdml0eSIsImFkZENvbGxpZGVyU2hhcGUiLCJjb2xsaWRlclNoYXBlIiwicmVtb3ZlQ29sbGlkZXJTaGFwZSIsImV2ZW50UG9vbCIsImN1cnJlbnRFdmVudHMiLCJldmVudCIsImluZGV4MSIsImluZGV4MiIsImFkZENvbGxpZGVyIiwiYWN0b3IiLCJyZW1vdmVDb2xsaWRlciIsImNvbGxpZGVyIiwidXBkYXRlIiwiZGVsdGFUaW1lIiwiY29sbGlkZXJzIiwibGVuIiwiX2NvbGxpc2lvbkRldGVjdGlvbiIsIl9maXJlRXZlbnQiLCJyYXljYXN0IiwiaGl0UmVzdWx0IiwiX2hpdFJlc3VsdCIsImlzSGl0IiwiY3VySGl0IiwiX2N1cnJlbnRIaXQiLCJhZGRDaGFyYWN0ZXJDb250cm9sbGVyIiwiY2hhcmFjdGVyQ29udHJvbGxlciIsInJlbW92ZUNoYXJhY3RlckNvbnRyb2xsZXIiLCJfZ2V0VHJpZ2dlciIsInBvcCIsIlRyaWdnZXJFdmVudCIsIm15Q29sbGlkZXIiLCJteUNvbGxpZGVyU2hhcGVzIiwibXlTaGFwZSIsIl91cGRhdGVXb3JsZEJveCIsImoiLCJrIiwidW5kZWZpbmVkIiwiYWxyZWFkeUludm9rZWQiLCJfYm94Q29sbGlzaW9uIiwic3RhdGUiLCJFbnRlciIsIlN0YXkiLCJfdXBXb3JsZFNwaGVyZSIsIl9zcGhlcmVDb2xsaXNpb24iLCJFeGl0Iiwib3RoZXIiLCJib3giLCJDb2xsaXNpb25VdGlsIiwiaW50ZXJzZWN0c0JveEFuZEJveCIsInNwaGVyZSIsImludGVyc2VjdHNTcGhlcmVBbmRCb3giLCJpbnRlcnNlY3RzU3BoZXJlQW5kU3BoZXJlIiwiYm94Q29sbGlkZXIiLCJvdXQiLCJtYXQiLCJ0cmFuc2Zvcm0iLCJzcGhlcmVDb2xsaWRlciIsIlRyaWdnZXJFdmVudFN0YXRlIiwiTGl0ZVBoeXNpY3NNYXRlcmlhbCIsInN0YXRpY0ZyaWN0aW9uIiwiZHluYW1pY0ZyaWN0aW9uIiwiYm91bmNpbmVzcyIsImZyaWN0aW9uQ29tYmluZSIsImJvdW5jZUNvbWJpbmUiLCJzZXRCb3VuY2luZXNzIiwic2V0RHluYW1pY0ZyaWN0aW9uIiwic2V0U3RhdGljRnJpY3Rpb24iLCJzZXRCb3VuY2VDb21iaW5lIiwic2V0RnJpY3Rpb25Db21iaW5lIiwiTGl0ZVN0YXRpY0NvbGxpZGVyIiwiU3RhdGljSW50ZXJmYWNlSW1wbGVtZW50IiwiY29uc3RydWN0b3IiLCJMaXRlUGh5c2ljcyIsImNyZWF0ZVBoeXNpY3NNYW5hZ2VyIiwib25Db250YWN0QmVnaW4iLCJvbkNvbnRhY3RFbmQiLCJvbkNvbnRhY3RQZXJzaXN0Iiwib25UcmlnZ2VyQmVnaW4iLCJvblRyaWdnZXJFbmQiLCJvblRyaWdnZXJQZXJzaXN0IiwiY3JlYXRlU3RhdGljQ29sbGlkZXIiLCJjcmVhdGVEeW5hbWljQ29sbGlkZXIiLCJjcmVhdGVDaGFyYWN0ZXJDb250cm9sbGVyIiwiY3JlYXRlUGh5c2ljc01hdGVyaWFsIiwiY3JlYXRlQm94Q29sbGlkZXJTaGFwZSIsImNyZWF0ZVNwaGVyZUNvbGxpZGVyU2hhcGUiLCJjcmVhdGVQbGFuZUNvbGxpZGVyU2hhcGUiLCJjcmVhdGVDYXBzdWxlQ29sbGlkZXJTaGFwZSIsImhlaWdodCIsImNyZWF0ZUZpeGVkSm9pbnQiLCJjcmVhdGVIaW5nZUpvaW50IiwiY3JlYXRlU3ByaW5nSm9pbnQiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF3Q0E7QUFDTyxTQUFTLFVBQVUsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFDMUQsSUFBSSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUks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
|
|
1268
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3RzbGliQDIuNS4wL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHN3YytoZWxwZXJzQDAuNS4wL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19zZXRfcHJvdG90eXBlX29mLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bzd2MraGVscGVyc0AwLjUuMC9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9faW5oZXJpdHMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHN3YytoZWxwZXJzQDAuNS4wL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19jcmVhdGVfY2xhc3MuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHN3YytoZWxwZXJzQDAuNS4wL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19pbnN0YW5jZW9mLmpzIiwiLi4vc3JjL0xpdGVVcGRhdGVGbGFnLnRzIiwiLi4vc3JjL0xpdGVVcGRhdGVGbGFnTWFuYWdlci50cyIsIi4uL3NyYy9zaGFwZS9MaXRlQ29sbGlkZXJTaGFwZS50cyIsIi4uL3NyYy9MaXRlVHJhbnNmb3JtLnRzIiwiLi4vc3JjL0xpdGVDb2xsaWRlci50cyIsIi4uL3NyYy9MaXRlRHluYW1pY0NvbGxpZGVyLnRzIiwiLi4vc3JjL0Rpc29yZGVyZWRBcnJheS50cyIsIi4uL3NyYy9MaXRlSGl0UmVzdWx0LnRzIiwiLi4vc3JjL3NoYXBlL0xpdGVCb3hDb2xsaWRlclNoYXBlLnRzIiwiLi4vc3JjL3NoYXBlL0xpdGVTcGhlcmVDb2xsaWRlclNoYXBlLnRzIiwiLi4vc3JjL0xpdGVQaHlzaWNzTWFuYWdlci50cyIsIi4uL3NyYy9MaXRlUGh5c2ljc01hdGVyaWFsLnRzIiwiLi4vc3JjL0xpdGVTdGF0aWNDb2xsaWRlci50cyIsIi4uL3NyYy9TdGF0aWNJbnRlcmZhY2VJbXBsZW1lbnQudHMiLCIuLi9zcmMvTGl0ZVBoeXNpY3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcclxuICAgIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxyXG4gICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcclxuICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xyXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XHJcbiAgICB2YXIgXywgZG9uZSA9IGZhbHNlO1xyXG4gICAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgY29udGV4dCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xyXG4gICAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnB1c2goXyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xyXG4gICAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMucHVzaChfKTtcclxuICAgICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcclxuICAgIGRvbmUgPSB0cnVlO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcclxuICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xyXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xyXG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcclxuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgIHJldHVybiByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xyXG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XHJcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcclxuICAgIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xyXG4gICAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcclxufVxyXG4iLCJleHBvcnQgZnVuY3Rpb24gX3NldF9wcm90b3R5cGVfb2YobywgcCkge1xuICAgIF9zZXRfcHJvdG90eXBlX29mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgICAgby5fX3Byb3RvX18gPSBwO1xuXG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gX3NldF9wcm90b3R5cGVfb2YobywgcCk7XG59XG5leHBvcnQgeyBfc2V0X3Byb3RvdHlwZV9vZiBhcyBfIH07XG4iLCJpbXBvcnQgeyBfc2V0X3Byb3RvdHlwZV9vZiB9IGZyb20gXCIuL19zZXRfcHJvdG90eXBlX29mLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICB9XG5cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7XG5cbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldF9wcm90b3R5cGVfb2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuZXhwb3J0IHsgX2luaGVyaXRzIGFzIF8gfTtcbiIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuXG4gICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBfY3JlYXRlX2NsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcblxuICAgIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmV4cG9ydCB7IF9jcmVhdGVfY2xhc3MgYXMgXyB9O1xuIiwiZXhwb3J0IGZ1bmN0aW9uIF9pbnN0YW5jZW9mKGxlZnQsIHJpZ2h0KSB7XG4gICAgaWYgKHJpZ2h0ICE9IG51bGwgJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiByaWdodFtTeW1ib2wuaGFzSW5zdGFuY2VdKSB7XG4gICAgICAgIHJldHVybiAhIXJpZ2h0W1N5bWJvbC5oYXNJbnN0YW5jZV0obGVmdCk7XG4gICAgfSBlbHNlIHJldHVybiBsZWZ0IGluc3RhbmNlb2YgcmlnaHQ7XG59XG5leHBvcnQgeyBfaW5zdGFuY2VvZiBhcyBfIH07XG4iLCIvKipcbiAqIEZhc3RseSByZW1vdmUgYW4gZWxlbWVudCBmcm9tIGFycmF5LlxuICogQHBhcmFtIGFycmF5IC0gQXJyYXlcbiAqIEBwYXJhbSBpdGVtIC0gRWxlbWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRnJvbUFycmF5KGFycmF5OiBhbnlbXSwgaXRlbTogYW55KTogYm9vbGVhbiB7XG4gIGNvbnN0IGluZGV4ID0gYXJyYXkuaW5kZXhPZihpdGVtKTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBsYXN0ID0gYXJyYXkubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ICE9PSBsYXN0KSB7XG4gICAgYXJyYXlbaW5kZXhdID0gYXJyYXlbbGFzdF07XG4gIH1cbiAgYXJyYXkubGVuZ3RoLS07XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFVzZWQgdG8gdXBkYXRlIHRhZ3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBMaXRlVXBkYXRlRmxhZyB7XG4gIC8qKiBGbGFnLiAqL1xuICBmbGFnID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9mbGFnczogTGl0ZVVwZGF0ZUZsYWdbXSA9IFtdKSB7XG4gICAgdGhpcy5fZmxhZ3MucHVzaCh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95LlxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICByZW1vdmVGcm9tQXJyYXkodGhpcy5fZmxhZ3MsIHRoaXMpO1xuICAgIHRoaXMuX2ZsYWdzID0gbnVsbDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgTGl0ZVVwZGF0ZUZsYWcgfSBmcm9tIFwiLi9MaXRlVXBkYXRlRmxhZ1wiO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY2xhc3MgTGl0ZVVwZGF0ZUZsYWdNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBfdXBkYXRlRmxhZ3M6IExpdGVVcGRhdGVGbGFnW10gPSBbXTtcblxuICByZWdpc3RlcigpOiBMaXRlVXBkYXRlRmxhZyB7XG4gICAgcmV0dXJuIG5ldyBMaXRlVXBkYXRlRmxhZyh0aGlzLl91cGRhdGVGbGFncyk7XG4gIH1cblxuICBkaXN0cmlidXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHVwZGF0ZUZsYWdzID0gdGhpcy5fdXBkYXRlRmxhZ3M7XG4gICAgZm9yIChsZXQgaSA9IHVwZGF0ZUZsYWdzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB1cGRhdGVGbGFnc1tpXS5mbGFnID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IElDb2xsaWRlclNoYXBlLCBJUGh5c2ljc01hdGVyaWFsIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtZGVzaWduXCI7XG5pbXBvcnQgeyBNYXRyaXgsIFJheSwgVmVjdG9yMyB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lXCI7XG5pbXBvcnQgeyBMaXRlQ29sbGlkZXIgfSBmcm9tIFwiLi4vTGl0ZUNvbGxpZGVyXCI7XG5pbXBvcnQgeyBMaXRlSGl0UmVzdWx0IH0gZnJvbSBcIi4uL0xpdGVIaXRSZXN1bHRcIjtcbmltcG9ydCB7IExpdGVUcmFuc2Zvcm0gfSBmcm9tIFwiLi4vTGl0ZVRyYW5zZm9ybVwiO1xuaW1wb3J0IHsgTGl0ZVVwZGF0ZUZsYWcgfSBmcm9tIFwiLi4vTGl0ZVVwZGF0ZUZsYWdcIjtcblxuLyoqXG4gKiBBYnN0cmFjdCBjbGFzcyBmb3IgY29sbGlkZXIgc2hhcGVzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTGl0ZUNvbGxpZGVyU2hhcGUgaW1wbGVtZW50cyBJQ29sbGlkZXJTaGFwZSB7XG4gIHByaXZhdGUgc3RhdGljIF9yYXkgPSBuZXcgUmF5KCk7XG4gIHByaXZhdGUgc3RhdGljIF90ZW1wUG9pbnQgPSBuZXcgVmVjdG9yMygpO1xuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX2lkOiBudW1iZXI7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX2NvbGxpZGVyOiBMaXRlQ29sbGlkZXI7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX3RyYW5zZm9ybTogTGl0ZVRyYW5zZm9ybSA9IG5ldyBMaXRlVHJhbnNmb3JtKCk7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX2ludk1vZGVsTWF0cml4OiBNYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX2ludmVyc2VXb3JsZE1hdEZsYWc6IExpdGVVcGRhdGVGbGFnO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl90cmFuc2Zvcm0ub3duZXIgPSB0aGlzO1xuICAgIHRoaXMuX2ludmVyc2VXb3JsZE1hdEZsYWcgPSB0aGlzLl90cmFuc2Zvcm0ucmVnaXN0ZXJXb3JsZENoYW5nZUZsYWcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyU2hhcGUuc2V0Um90YXRpb24gfVxuICAgKi9cbiAgc2V0Um90YXRpb24ocm90YXRpb246IFZlY3RvcjMpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldFJvdGF0aW9uLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyU2hhcGUuc2V0UG9zaXRpb24gfVxuICAgKi9cbiAgc2V0UG9zaXRpb24ocG9zaXRpb246IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aGlzLl90cmFuc2Zvcm0uc2V0UG9zaXRpb24ocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueik7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlclNoYXBlLnNldFdvcmxkU2NhbGUgfVxuICAgKi9cbiAgYWJzdHJhY3Qgc2V0V29ybGRTY2FsZShzY2FsZTogVmVjdG9yMyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRDb250YWN0T2Zmc2V0IH1cbiAgICovXG4gIHNldENvbnRhY3RPZmZzZXQob2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldENvbnRhY3RPZmZzZXQuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRNYXRlcmlhbCB9XG4gICAqL1xuICBzZXRNYXRlcmlhbChtYXRlcmlhbDogSVBoeXNpY3NNYXRlcmlhbCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0TWF0ZXJpYWwuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRVbmlxdWVJRCB9XG4gICAqL1xuICBzZXRVbmlxdWVJRChpZDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5faWQgPSBpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyU2hhcGUuc2V0SXNUcmlnZ2VyIH1cbiAgICovXG4gIHNldElzVHJpZ2dlcih2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0SXNUcmlnZ2VyLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyU2hhcGUuZGVzdHJveSB9XG4gICAqL1xuICBkZXN0cm95KCk6IHZvaWQge31cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBhYnN0cmFjdCBfcmF5Y2FzdChyYXk6IFJheSwgaGl0OiBMaXRlSGl0UmVzdWx0KTogYm9vbGVhbjtcblxuICBwcm90ZWN0ZWQgX3VwZGF0ZUhpdFJlc3VsdChcbiAgICByYXk6IFJheSxcbiAgICByYXlEaXN0YW5jZTogbnVtYmVyLFxuICAgIG91dEhpdDogTGl0ZUhpdFJlc3VsdCxcbiAgICBvcmlnaW46IFZlY3RvcjMsXG4gICAgaXNXb3JsZFJheTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGhpdFBvaW50ID0gTGl0ZUNvbGxpZGVyU2hhcGUuX3RlbXBQb2ludDtcbiAgICByYXkuZ2V0UG9pbnQocmF5RGlzdGFuY2UsIGhpdFBvaW50KTtcbiAgICBpZiAoIWlzV29ybGRSYXkpIHtcbiAgICAgIFZlY3RvcjMudHJhbnNmb3JtQ29vcmRpbmF0ZShoaXRQb2ludCwgdGhpcy5fdHJhbnNmb3JtLndvcmxkTWF0cml4LCBoaXRQb2ludCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGlzdGFuY2UgPSBWZWN0b3IzLmRpc3RhbmNlKG9yaWdpbiwgaGl0UG9pbnQpO1xuXG4gICAgaWYgKGRpc3RhbmNlIDwgb3V0SGl0LmRpc3RhbmNlKSB7XG4gICAgICBvdXRIaXQucG9pbnQuY29weUZyb20oaGl0UG9pbnQpO1xuICAgICAgb3V0SGl0LmRpc3RhbmNlID0gZGlzdGFuY2U7XG4gICAgICBvdXRIaXQuc2hhcGVJRCA9IHRoaXMuX2lkO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfZ2V0TG9jYWxSYXkocmF5OiBSYXkpOiBSYXkge1xuICAgIGNvbnN0IHdvcmxkVG9Mb2NhbCA9IHRoaXMuX2dldEludk1vZGVsTWF0cml4KCk7XG4gICAgY29uc3Qgb3V0UmF5ID0gTGl0ZUNvbGxpZGVyU2hhcGUuX3JheTtcblxuICAgIFZlY3RvcjMudHJhbnNmb3JtQ29vcmRpbmF0ZShyYXkub3JpZ2luLCB3b3JsZFRvTG9jYWwsIG91dFJheS5vcmlnaW4pO1xuICAgIFZlY3RvcjMudHJhbnNmb3JtTm9ybWFsKHJheS5kaXJlY3Rpb24sIHdvcmxkVG9Mb2NhbCwgb3V0UmF5LmRpcmVjdGlvbik7XG4gICAgb3V0UmF5LmRpcmVjdGlvbi5ub3JtYWxpemUoKTtcblxuICAgIHJldHVybiBvdXRSYXk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRJbnZNb2RlbE1hdHJpeCgpOiBNYXRyaXgge1xuICAgIGlmICh0aGlzLl9pbnZlcnNlV29ybGRNYXRGbGFnLmZsYWcpIHtcbiAgICAgIE1hdHJpeC5pbnZlcnQodGhpcy5fdHJhbnNmb3JtLndvcmxkTWF0cml4LCB0aGlzLl9pbnZNb2RlbE1hdHJpeCk7XG4gICAgICB0aGlzLl9pbnZlcnNlV29ybGRNYXRGbGFnLmZsYWcgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2ludk1vZGVsTWF0cml4O1xuICB9XG59XG4iLCJpbXBvcnQgeyBNYXRoVXRpbCwgTWF0cml4LCBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmVcIjtcbmltcG9ydCB7IExpdGVDb2xsaWRlciB9IGZyb20gXCIuL0xpdGVDb2xsaWRlclwiO1xuaW1wb3J0IHsgTGl0ZVVwZGF0ZUZsYWcgfSBmcm9tIFwiLi9MaXRlVXBkYXRlRmxhZ1wiO1xuaW1wb3J0IHsgTGl0ZVVwZGF0ZUZsYWdNYW5hZ2VyIH0gZnJvbSBcIi4vTGl0ZVVwZGF0ZUZsYWdNYW5hZ2VyXCI7XG5pbXBvcnQgeyBMaXRlQ29sbGlkZXJTaGFwZSB9IGZyb20gXCIuL3NoYXBlL0xpdGVDb2xsaWRlclNoYXBlXCI7XG5cbi8qKlxuICogVXNlZCB0byBpbXBsZW1lbnQgdHJhbnNmb3JtYXRpb24gcmVsYXRlZCBmdW5jdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBMaXRlVHJhbnNmb3JtIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbXBRdWF0MDogUXVhdGVybmlvbiA9IG5ldyBRdWF0ZXJuaW9uKCk7XG4gIHByaXZhdGUgc3RhdGljIF90ZW1wTWF0NDI6IE1hdHJpeCA9IG5ldyBNYXRyaXgoKTtcblxuICBwcml2YXRlIF9wb3NpdGlvbjogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCk7XG4gIHByaXZhdGUgX3JvdGF0aW9uOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKTtcbiAgcHJpdmF0ZSBfcm90YXRpb25RdWF0ZXJuaW9uOiBRdWF0ZXJuaW9uID0gbmV3IFF1YXRlcm5pb24oKTtcbiAgcHJpdmF0ZSBfc2NhbGU6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygxLCAxLCAxKTtcbiAgcHJpdmF0ZSBfd29ybGRSb3RhdGlvblF1YXRlcm5pb246IFF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpO1xuICBwcml2YXRlIF9sb2NhbE1hdHJpeDogTWF0cml4ID0gbmV3IE1hdHJpeCgpO1xuICBwcml2YXRlIF93b3JsZE1hdHJpeDogTWF0cml4ID0gbmV3IE1hdHJpeCgpO1xuICBwcml2YXRlIF91cGRhdGVGbGFnTWFuYWdlcjogTGl0ZVVwZGF0ZUZsYWdNYW5hZ2VyID0gbmV3IExpdGVVcGRhdGVGbGFnTWFuYWdlcigpO1xuICBwcml2YXRlIF9pc1BhcmVudERpcnR5OiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfcGFyZW50VHJhbnNmb3JtQ2FjaGU6IExpdGVUcmFuc2Zvcm0gPSBudWxsO1xuICBwcml2YXRlIF9kaXJ0eUZsYWc6IG51bWJlciA9IFRyYW5zZm9ybUZsYWcuV21XcFdlV3FXcztcblxuICBwcml2YXRlIF9vd25lcjogTGl0ZUNvbGxpZGVyU2hhcGUgfCBMaXRlQ29sbGlkZXI7XG5cbiAgc2V0IG93bmVyKHZhbHVlOiBMaXRlQ29sbGlkZXJTaGFwZSB8IExpdGVDb2xsaWRlcikge1xuICAgIHRoaXMuX293bmVyID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogTG9jYWwgcG9zaXRpb24uXG4gICAqIEByZW1hcmtzIE5lZWQgdG8gcmUtYXNzaWduIGFmdGVyIG1vZGlmaWNhdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIHRha2VzIGVmZmVjdC5cbiAgICovXG4gIGdldCBwb3NpdGlvbigpOiBWZWN0b3IzIHtcbiAgICByZXR1cm4gdGhpcy5fcG9zaXRpb247XG4gIH1cblxuICBzZXQgcG9zaXRpb24odmFsdWU6IFZlY3RvcjMpIHtcbiAgICBpZiAodGhpcy5fcG9zaXRpb24gIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl9wb3NpdGlvbi5jb3B5RnJvbSh2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuX3NldERpcnR5RmxhZ1RydWUoVHJhbnNmb3JtRmxhZy5Mb2NhbE1hdHJpeCk7XG4gICAgdGhpcy5fdXBkYXRlV29ybGRQb3NpdGlvbkZsYWcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2NhbCByb3RhdGlvbiwgZGVmaW5pbmcgdGhlIHJvdGF0aW9uIGJ5IHVzaW5nIGEgdW5pdCBxdWF0ZXJuaW9uLlxuICAgKiBAcmVtYXJrcyBOZWVkIHRvIHJlLWFzc2lnbiBhZnRlciBtb2RpZmljYXRpb24gdG8gZW5zdXJlIHRoYXQgdGhlIG1vZGlmaWNhdGlvbiB0YWtlcyBlZmZlY3QuXG4gICAqL1xuICBnZXQgcm90YXRpb25RdWF0ZXJuaW9uKCk6IFF1YXRlcm5pb24ge1xuICAgIGlmICh0aGlzLl9pc0NvbnRhaW5EaXJ0eUZsYWcoVHJhbnNmb3JtRmxhZy5Mb2NhbFF1YXQpKSB7XG4gICAgICBRdWF0ZXJuaW9uLnJvdGF0aW9uRXVsZXIoXG4gICAgICAgIE1hdGhVdGlsLmRlZ3JlZVRvUmFkaWFuKHRoaXMuX3JvdGF0aW9uLngpLFxuICAgICAgICBNYXRoVXRpbC5kZWdyZWVUb1JhZGlhbih0aGlzLl9yb3RhdGlvbi55KSxcbiAgICAgICAgTWF0aFV0aWwuZGVncmVlVG9SYWRpYW4odGhpcy5fcm90YXRpb24ueiksXG4gICAgICAgIHRoaXMuX3JvdGF0aW9uUXVhdGVybmlvblxuICAgICAgKTtcbiAgICAgIHRoaXMuX3NldERpcnR5RmxhZ0ZhbHNlKFRyYW5zZm9ybUZsYWcuTG9jYWxRdWF0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3JvdGF0aW9uUXVhdGVybmlvbjtcbiAgfVxuXG4gIHNldCByb3RhdGlvblF1YXRlcm5pb24odmFsdWU6IFF1YXRlcm5pb24pIHtcbiAgICBpZiAodGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uLmNvcHlGcm9tKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5fc2V0RGlydHlGbGFnVHJ1ZShUcmFuc2Zvcm1GbGFnLkxvY2FsTWF0cml4IHwgVHJhbnNmb3JtRmxhZy5Mb2NhbEV1bGVyKTtcbiAgICB0aGlzLl9zZXREaXJ0eUZsYWdGYWxzZShUcmFuc2Zvcm1GbGFnLkxvY2FsUXVhdCk7XG4gICAgdGhpcy5fdXBkYXRlV29ybGRSb3RhdGlvbkZsYWcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXb3JsZCByb3RhdGlvbiwgZGVmaW5pbmcgdGhlIHJvdGF0aW9uIGJ5IHVzaW5nIGEgdW5pdCBxdWF0ZXJuaW9uLlxuICAgKiBAcmVtYXJrcyBOZWVkIHRvIHJlLWFzc2lnbiBhZnRlciBtb2RpZmljYXRpb24gdG8gZW5zdXJlIHRoYXQgdGhlIG1vZGlmaWNhdGlvbiB0YWtlcyBlZmZlY3QuXG4gICAqL1xuICBnZXQgd29ybGRSb3RhdGlvblF1YXRlcm5pb24oKTogUXVhdGVybmlvbiB7XG4gICAgaWYgKHRoaXMuX2lzQ29udGFpbkRpcnR5RmxhZyhUcmFuc2Zvcm1GbGFnLldvcmxkUXVhdCkpIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2dldFBhcmVudFRyYW5zZm9ybSgpO1xuICAgICAgaWYgKHBhcmVudCAhPSBudWxsKSB7XG4gICAgICAgIFF1YXRlcm5pb24ubXVsdGlwbHkocGFyZW50LndvcmxkUm90YXRpb25RdWF0ZXJuaW9uLCB0aGlzLnJvdGF0aW9uUXVhdGVybmlvbiwgdGhpcy5fd29ybGRSb3RhdGlvblF1YXRlcm5pb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fd29ybGRSb3RhdGlvblF1YXRlcm5pb24uY29weUZyb20odGhpcy5yb3RhdGlvblF1YXRlcm5pb24pO1xuICAgICAgfVxuICAgICAgdGhpcy5fc2V0RGlydHlGbGFnRmFsc2UoVHJhbnNmb3JtRmxhZy5Xb3JsZFF1YXQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fd29ybGRSb3RhdGlvblF1YXRlcm5pb247XG4gIH1cblxuICBzZXQgd29ybGRSb3RhdGlvblF1YXRlcm5pb24odmFsdWU6IFF1YXRlcm5pb24pIHtcbiAgICBpZiAodGhpcy5fd29ybGRSb3RhdGlvblF1YXRlcm5pb24gIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl93b3JsZFJvdGF0aW9uUXVhdGVybmlvbi5jb3B5RnJvbSh2YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2dldFBhcmVudFRyYW5zZm9ybSgpO1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIFF1YXRlcm5pb24uaW52ZXJ0KHBhcmVudC53b3JsZFJvdGF0aW9uUXVhdGVybmlvbiwgTGl0ZVRyYW5zZm9ybS5fdGVtcFF1YXQwKTtcbiAgICAgIFF1YXRlcm5pb24ubXVsdGlwbHkodmFsdWUsIExpdGVUcmFuc2Zvcm0uX3RlbXBRdWF0MCwgdGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uLmNvcHlGcm9tKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5yb3RhdGlvblF1YXRlcm5pb24gPSB0aGlzLl9yb3RhdGlvblF1YXRlcm5pb247XG4gICAgdGhpcy5fc2V0RGlydHlGbGFnRmFsc2UoVHJhbnNmb3JtRmxhZy5Xb3JsZFF1YXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvY2FsIHNjYWxpbmcuXG4gICAqIEByZW1hcmtzIE5lZWQgdG8gcmUtYXNzaWduIGFmdGVyIG1vZGlmaWNhdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIHRha2VzIGVmZmVjdC5cbiAgICovXG4gIGdldCBzY2FsZSgpOiBWZWN0b3IzIHtcbiAgICByZXR1cm4gdGhpcy5fc2NhbGU7XG4gIH1cblxuICBzZXQgc2NhbGUodmFsdWU6IFZlY3RvcjMpIHtcbiAgICBpZiAodGhpcy5fc2NhbGUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl9zY2FsZS5jb3B5RnJvbSh2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuX3NldERpcnR5RmxhZ1RydWUoVHJhbnNmb3JtRmxhZy5Mb2NhbE1hdHJpeCk7XG4gICAgdGhpcy5fdXBkYXRlV29ybGRTY2FsZUZsYWcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2NhbCBtYXRyaXguXG4gICAqIEByZW1hcmtzIE5lZWQgdG8gcmUtYXNzaWduIGFmdGVyIG1vZGlmaWNhdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIHRha2VzIGVmZmVjdC5cbiAgICovXG4gIGdldCBsb2NhbE1hdHJpeCgpOiBNYXRyaXgge1xuICAgIGlmICh0aGlzLl9pc0NvbnRhaW5EaXJ0eUZsYWcoVHJhbnNmb3JtRmxhZy5Mb2NhbE1hdHJpeCkpIHtcbiAgICAgIE1hdHJpeC5hZmZpbmVUcmFuc2Zvcm1hdGlvbih0aGlzLl9zY2FsZSwgdGhpcy5yb3RhdGlvblF1YXRlcm5pb24sIHRoaXMuX3Bvc2l0aW9uLCB0aGlzLl9sb2NhbE1hdHJpeCk7XG4gICAgICB0aGlzLl9zZXREaXJ0eUZsYWdGYWxzZShUcmFuc2Zvcm1GbGFnLkxvY2FsTWF0cml4KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2xvY2FsTWF0cml4O1xuICB9XG5cbiAgc2V0IGxvY2FsTWF0cml4KHZhbHVlOiBNYXRyaXgpIHtcbiAgICBpZiAodGhpcy5fbG9jYWxNYXRyaXggIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2NhbE1hdHJpeC5jb3B5RnJvbSh2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuX2xvY2FsTWF0cml4LmRlY29tcG9zZSh0aGlzLl9wb3NpdGlvbiwgdGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uLCB0aGlzLl9zY2FsZSk7XG4gICAgdGhpcy5fc2V0RGlydHlGbGFnVHJ1ZShUcmFuc2Zvcm1GbGFnLkxvY2FsRXVsZXIpO1xuICAgIHRoaXMuX3NldERpcnR5RmxhZ0ZhbHNlKFRyYW5zZm9ybUZsYWcuTG9jYWxNYXRyaXgpO1xuICAgIHRoaXMuX3VwZGF0ZUFsbFdvcmxkRmxhZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdvcmxkIG1hdHJpeC5cbiAgICogQHJlbWFya3MgTmVlZCB0byByZS1hc3NpZ24gYWZ0ZXIgbW9kaWZpY2F0aW9uIHRvIGVuc3VyZSB0aGF0IHRoZSBtb2RpZmljYXRpb24gdGFrZXMgZWZmZWN0LlxuICAgKi9cbiAgZ2V0IHdvcmxkTWF0cml4KCk6IE1hdHJpeCB7XG4gICAgaWYgKHRoaXMuX2lzQ29udGFpbkRpcnR5RmxhZyhUcmFuc2Zvcm1GbGFnLldvcmxkTWF0cml4KSkge1xuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5fZ2V0UGFyZW50VHJhbnNmb3JtKCk7XG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIE1hdHJpeC5tdWx0aXBseShwYXJlbnQud29ybGRNYXRyaXgsIHRoaXMubG9jYWxNYXRyaXgsIHRoaXMuX3dvcmxkTWF0cml4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3dvcmxkTWF0cml4LmNvcHlGcm9tKHRoaXMubG9jYWxNYXRyaXgpO1xuICAgICAgfVxuICAgICAgdGhpcy5fc2V0RGlydHlGbGFnRmFsc2UoVHJhbnNmb3JtRmxhZy5Xb3JsZE1hdHJpeCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl93b3JsZE1hdHJpeDtcbiAgfVxuXG4gIHNldCB3b3JsZE1hdHJpeCh2YWx1ZTogTWF0cml4KSB7XG4gICAgaWYgKHRoaXMuX3dvcmxkTWF0cml4ICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fd29ybGRNYXRyaXguY29weUZyb20odmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9nZXRQYXJlbnRUcmFuc2Zvcm0oKTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBNYXRyaXguaW52ZXJ0KHBhcmVudC53b3JsZE1hdHJpeCwgTGl0ZVRyYW5zZm9ybS5fdGVtcE1hdDQyKTtcbiAgICAgIE1hdHJpeC5tdWx0aXBseShMaXRlVHJhbnNmb3JtLl90ZW1wTWF0NDIsIHZhbHVlLCB0aGlzLl9sb2NhbE1hdHJpeCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvY2FsTWF0cml4LmNvcHlGcm9tKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5sb2NhbE1hdHJpeCA9IHRoaXMuX2xvY2FsTWF0cml4O1xuICAgIHRoaXMuX3NldERpcnR5RmxhZ0ZhbHNlKFRyYW5zZm9ybUZsYWcuV29ybGRNYXRyaXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBsb2NhbCBwb3NpdGlvbiBieSBYLCBZLCBaIHZhbHVlLlxuICAgKiBAcGFyYW0geCAtIFggY29vcmRpbmF0ZVxuICAgKiBAcGFyYW0geSAtIFkgY29vcmRpbmF0ZVxuICAgKiBAcGFyYW0geiAtIFogY29vcmRpbmF0ZVxuICAgKi9cbiAgc2V0UG9zaXRpb24oeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3Bvc2l0aW9uLnNldCh4LCB5LCB6KTtcbiAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy5fcG9zaXRpb247XG4gIH1cblxuICAvKipcbiAgICogU2V0IGxvY2FsIHJvdGF0aW9uIGJ5IHRoZSBYLCBZLCBaLCBhbmQgVyBjb21wb25lbnRzIG9mIHRoZSBxdWF0ZXJuaW9uLlxuICAgKiBAcGFyYW0geCAtIFggY29tcG9uZW50IG9mIHF1YXRlcm5pb25cbiAgICogQHBhcmFtIHkgLSBZIGNvbXBvbmVudCBvZiBxdWF0ZXJuaW9uXG4gICAqIEBwYXJhbSB6IC0gWiBjb21wb25lbnQgb2YgcXVhdGVybmlvblxuICAgKiBAcGFyYW0gdyAtIFcgY29tcG9uZW50IG9mIHF1YXRlcm5pb25cbiAgICovXG4gIHNldFJvdGF0aW9uUXVhdGVybmlvbih4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyLCB3OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9yb3RhdGlvblF1YXRlcm5pb24uc2V0KHgsIHksIHosIHcpO1xuICAgIHRoaXMucm90YXRpb25RdWF0ZXJuaW9uID0gdGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBsb2NhbCBzY2FsaW5nIGJ5IHNjYWxpbmcgdmFsdWVzIGFsb25nIFgsIFksIFogYXhpcy5cbiAgICogQHBhcmFtIHggLSBTY2FsaW5nIGFsb25nIFggYXhpc1xuICAgKiBAcGFyYW0geSAtIFNjYWxpbmcgYWxvbmcgWSBheGlzXG4gICAqIEBwYXJhbSB6IC0gU2NhbGluZyBhbG9uZyBaIGF4aXNcbiAgICovXG4gIHNldFNjYWxlKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zY2FsZS5zZXQoeCwgeSwgeik7XG4gICAgdGhpcy5zY2FsZSA9IHRoaXMuX3NjYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIHdvcmxkIHRyYW5zZm9ybSBjaGFuZ2UgZmxhZy5cbiAgICogQHJldHVybnMgQ2hhbmdlIGZsYWdcbiAgICovXG4gIHJlZ2lzdGVyV29ybGRDaGFuZ2VGbGFnKCk6IExpdGVVcGRhdGVGbGFnIHtcbiAgICByZXR1cm4gdGhpcy5fdXBkYXRlRmxhZ01hbmFnZXIucmVnaXN0ZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgd29ybGRNYXRyaXg6IFdpbGwgdHJpZ2dlciB0aGUgd29ybGRNYXRyaXggdXBkYXRlIG9mIGl0c2VsZiBhbmQgYWxsIHBhcmVudCBlbnRpdGllcy5cbiAgICogR2V0IHdvcmxkUG9zaXRpb246IFdpbGwgdHJpZ2dlciB0aGUgd29ybGRNYXRyaXgsIGxvY2FsIHBvc2l0aW9uIHVwZGF0ZSBvZiBpdHNlbGYgYW5kIHRoZSB3b3JsZE1hdHJpeCB1cGRhdGUgb2YgYWxsIHBhcmVudCBlbnRpdGllcy5cbiAgICogSW4gc3VtbWFyeSwgYW55IHVwZGF0ZSBvZiByZWxhdGVkIHZhcmlhYmxlcyB3aWxsIGNhdXNlIHRoZSBkaXJ0eSBtYXJrIG9mIG9uZSBvZiB0aGUgZnVsbCBwcm9jZXNzICh3b3JsZE1hdHJpeCBvciB3b3JsZFJvdGF0aW9uUXVhdGVybmlvbikgdG8gYmUgZmFsc2UuXG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVXb3JsZFBvc2l0aW9uRmxhZygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lzQ29udGFpbkRpcnR5RmxhZ3MoVHJhbnNmb3JtRmxhZy5XbVdwKSkge1xuICAgICAgdGhpcy5fd29ybGRBc3NvY2lhdGVkQ2hhbmdlKFRyYW5zZm9ybUZsYWcuV21XcCk7XG4gICAgICBpZiAodGhpcy5fb3duZXIgaW5zdGFuY2VvZiBMaXRlQ29sbGlkZXIpIHtcbiAgICAgICAgY29uc3Qgc2hhcGVzID0gdGhpcy5fb3duZXIuX3NoYXBlcztcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMCwgbjogbnVtYmVyID0gc2hhcGVzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIHNoYXBlc1tpXS5fdHJhbnNmb3JtLl91cGRhdGVXb3JsZFBvc2l0aW9uRmxhZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3b3JsZE1hdHJpeDogV2lsbCB0cmlnZ2VyIHRoZSB3b3JsZE1hdHJpeCB1cGRhdGUgb2YgaXRzZWxmIGFuZCBhbGwgcGFyZW50IGVudGl0aWVzLlxuICAgKiBHZXQgd29ybGRQb3NpdGlvbjogV2lsbCB0cmlnZ2VyIHRoZSB3b3JsZE1hdHJpeCwgbG9jYWwgcG9zaXRpb24gdXBkYXRlIG9mIGl0c2VsZiBhbmQgdGhlIHdvcmxkTWF0cml4IHVwZGF0ZSBvZiBhbGwgcGFyZW50IGVudGl0aWVzLlxuICAgKiBHZXQgd29ybGRSb3RhdGlvblF1YXRlcm5pb246IFdpbGwgdHJpZ2dlciB0aGUgd29ybGQgcm90YXRpb24gKGluIHF1YXRlcm5pb24pIHVwZGF0ZSBvZiBpdHNlbGYgYW5kIGFsbCBwYXJlbnQgZW50aXRpZXMuXG4gICAqIEdldCB3b3JsZFJvdGF0aW9uOiBXaWxsIHRyaWdnZXIgdGhlIHdvcmxkIHJvdGF0aW9uKGluIGV1bGVyIGFuZCBxdWF0ZXJuaW9uKSB1cGRhdGUgb2YgaXRzZWxmIGFuZCB3b3JsZCByb3RhdGlvbihpbiBxdWF0ZXJuaW9uKSB1cGRhdGUgb2YgYWxsIHBhcmVudCBlbnRpdGllcy5cbiAgICogSW4gc3VtbWFyeSwgYW55IHVwZGF0ZSBvZiByZWxhdGVkIHZhcmlhYmxlcyB3aWxsIGNhdXNlIHRoZSBkaXJ0eSBtYXJrIG9mIG9uZSBvZiB0aGUgZnVsbCBwcm9jZXNzICh3b3JsZE1hdHJpeCBvciB3b3JsZFJvdGF0aW9uUXVhdGVybmlvbikgdG8gYmUgZmFsc2UuXG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVXb3JsZFJvdGF0aW9uRmxhZygpIHtcbiAgICBpZiAoIXRoaXMuX2lzQ29udGFpbkRpcnR5RmxhZ3MoVHJhbnNmb3JtRmxhZy5XbVdlV3EpKSB7XG4gICAgICB0aGlzLl93b3JsZEFzc29jaWF0ZWRDaGFuZ2UoVHJhbnNmb3JtRmxhZy5XbVdlV3EpO1xuICAgICAgaWYgKHRoaXMuX293bmVyIGluc3RhbmNlb2YgTGl0ZUNvbGxpZGVyKSB7XG4gICAgICAgIGNvbnN0IHNoYXBlcyA9IHRoaXMuX293bmVyLl9zaGFwZXM7XG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDAsIG46IG51bWJlciA9IHNoYXBlcy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBzaGFwZXNbaV0uX3RyYW5zZm9ybS5fdXBkYXRlV29ybGRSb3RhdGlvbkZsYWcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgd29ybGRNYXRyaXg6IFdpbGwgdHJpZ2dlciB0aGUgd29ybGRNYXRyaXggdXBkYXRlIG9mIGl0c2VsZiBhbmQgYWxsIHBhcmVudCBlbnRpdGllcy5cbiAgICogR2V0IHdvcmxkUG9zaXRpb246IFdpbGwgdHJpZ2dlciB0aGUgd29ybGRNYXRyaXgsIGxvY2FsIHBvc2l0aW9uIHVwZGF0ZSBvZiBpdHNlbGYgYW5kIHRoZSB3b3JsZE1hdHJpeCB1cGRhdGUgb2YgYWxsIHBhcmVudCBlbnRpdGllcy5cbiAgICogR2V0IHdvcmxkU2NhbGU6IFdpbGwgdHJpZ2dlciB0aGUgc2NhbGluZyB1cGRhdGUgb2YgaXRzZWxmIGFuZCBhbGwgcGFyZW50IGVudGl0aWVzLlxuICAgKiBJbiBzdW1tYXJ5LCBhbnkgdXBkYXRlIG9mIHJlbGF0ZWQgdmFyaWFibGVzIHdpbGwgY2F1c2UgdGhlIGRpcnR5IG1hcmsgb2Ygb25lIG9mIHRoZSBmdWxsIHByb2Nlc3MgKHdvcmxkTWF0cml4KSB0byBiZSBmYWxzZS5cbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZVdvcmxkU2NhbGVGbGFnKCkge1xuICAgIGlmICghdGhpcy5faXNDb250YWluRGlydHlGbGFncyhUcmFuc2Zvcm1GbGFnLldtV3MpKSB7XG4gICAgICB0aGlzLl93b3JsZEFzc29jaWF0ZWRDaGFuZ2UoVHJhbnNmb3JtRmxhZy5XbVdzKTtcbiAgICAgIGlmICh0aGlzLl9vd25lciBpbnN0YW5jZW9mIExpdGVDb2xsaWRlcikge1xuICAgICAgICBjb25zdCBzaGFwZXMgPSB0aGlzLl9vd25lci5fc2hhcGVzO1xuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwLCBuOiBudW1iZXIgPSBzaGFwZXMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgc2hhcGVzW2ldLl90cmFuc2Zvcm0uX3VwZGF0ZVdvcmxkU2NhbGVGbGFnKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGFsbCB3b3JsZCB0cmFuc2Zvcm0gcHJvcGVydHkgZGlydHkgZmxhZywgdGhlIHByaW5jaXBsZSBpcyB0aGUgc2FtZSBhcyBhYm92ZS5cbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZUFsbFdvcmxkRmxhZygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lzQ29udGFpbkRpcnR5RmxhZ3MoVHJhbnNmb3JtRmxhZy5XbVdwV2VXcVdzKSkge1xuICAgICAgdGhpcy5fd29ybGRBc3NvY2lhdGVkQ2hhbmdlKFRyYW5zZm9ybUZsYWcuV21XcFdlV3FXcyk7XG4gICAgICBpZiAodGhpcy5fb3duZXIgaW5zdGFuY2VvZiBMaXRlQ29sbGlkZXIpIHtcbiAgICAgICAgY29uc3Qgc2hhcGVzID0gdGhpcy5fb3duZXIuX3NoYXBlcztcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMCwgbjogbnVtYmVyID0gc2hhcGVzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIHNoYXBlc1tpXS5fdHJhbnNmb3JtLl91cGRhdGVBbGxXb3JsZEZsYWcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldFBhcmVudFRyYW5zZm9ybSgpOiBMaXRlVHJhbnNmb3JtIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLl9pc1BhcmVudERpcnR5KSB7XG4gICAgICByZXR1cm4gdGhpcy5fcGFyZW50VHJhbnNmb3JtQ2FjaGU7XG4gICAgfVxuICAgIGxldCBwYXJlbnRDYWNoZTogTGl0ZVRyYW5zZm9ybSA9IG51bGw7XG4gICAgaWYgKHRoaXMuX293bmVyIGluc3RhbmNlb2YgTGl0ZUNvbGxpZGVyU2hhcGUpIHtcbiAgICAgIGxldCBwYXJlbnQgPSB0aGlzLl9vd25lci5fY29sbGlkZXI7XG4gICAgICBwYXJlbnRDYWNoZSA9IHBhcmVudC5fdHJhbnNmb3JtO1xuICAgIH1cblxuICAgIHRoaXMuX3BhcmVudFRyYW5zZm9ybUNhY2hlID0gcGFyZW50Q2FjaGU7XG4gICAgdGhpcy5faXNQYXJlbnREaXJ0eSA9IGZhbHNlO1xuICAgIHJldHVybiBwYXJlbnRDYWNoZTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzQ29udGFpbkRpcnR5RmxhZ3ModGFyZ2V0RGlydHlGbGFnczogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLl9kaXJ0eUZsYWcgJiB0YXJnZXREaXJ0eUZsYWdzKSA9PT0gdGFyZ2V0RGlydHlGbGFncztcbiAgfVxuXG4gIHByaXZhdGUgX2lzQ29udGFpbkRpcnR5RmxhZyh0eXBlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuX2RpcnR5RmxhZyAmIHR5cGUpICE9IDA7XG4gIH1cblxuICBwcml2YXRlIF9zZXREaXJ0eUZsYWdUcnVlKHR5cGU6IG51bWJlcikge1xuICAgIHRoaXMuX2RpcnR5RmxhZyB8PSB0eXBlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0RGlydHlGbGFnRmFsc2UodHlwZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZGlydHlGbGFnICY9IH50eXBlO1xuICB9XG5cbiAgcHJpdmF0ZSBfd29ybGRBc3NvY2lhdGVkQ2hhbmdlKHR5cGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2RpcnR5RmxhZyB8PSB0eXBlO1xuICAgIHRoaXMuX3VwZGF0ZUZsYWdNYW5hZ2VyLmRpc3RyaWJ1dGUoKTtcbiAgfVxufVxuXG4vKipcbiAqIERpcnR5IGZsYWcgb2YgdHJhbnNmb3JtLlxuICovXG5lbnVtIFRyYW5zZm9ybUZsYWcge1xuICBMb2NhbEV1bGVyID0gMHgxLFxuICBMb2NhbFF1YXQgPSAweDIsXG4gIFdvcmxkUG9zaXRpb24gPSAweDQsXG4gIFdvcmxkRXVsZXIgPSAweDgsXG4gIFdvcmxkUXVhdCA9IDB4MTAsXG4gIFdvcmxkU2NhbGUgPSAweDIwLFxuICBMb2NhbE1hdHJpeCA9IDB4NDAsXG4gIFdvcmxkTWF0cml4ID0gMHg4MCxcblxuICAvKiogV29ybGRNYXRyaXggfCBXb3JsZFBvc2l0aW9uICovXG4gIFdtV3AgPSAweDg0LFxuICAvKiogV29ybGRNYXRyaXggfCBXb3JsZEV1bGVyIHwgV29ybGRRdWF0ICovXG4gIFdtV2VXcSA9IDB4OTgsXG4gIC8qKiBXb3JsZE1hdHJpeCB8IFdvcmxkUG9zaXRpb24gfCBXb3JsZEV1bGVyIHwgV29ybGRRdWF0ICovXG4gIFdtV3BXZVdxID0gMHg5YyxcbiAgLyoqIFdvcmxkTWF0cml4IHwgV29ybGRTY2FsZSAqL1xuICBXbVdzID0gMHhhMCxcbiAgLyoqIFdvcmxkTWF0cml4IHwgV29ybGRQb3NpdGlvbiB8IFdvcmxkU2NhbGUgKi9cbiAgV21XcFdzID0gMHhhNCxcbiAgLyoqIFdvcmxkTWF0cml4IHwgV29ybGRQb3NpdGlvbiB8IFdvcmxkRXVsZXIgfCBXb3JsZFF1YXQgfCBXb3JsZFNjYWxlICovXG4gIFdtV3BXZVdxV3MgPSAweGJjXG59XG4iLCJpbXBvcnQgeyBJQ29sbGlkZXIgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1kZXNpZ25cIjtcbmltcG9ydCB7IFF1YXRlcm5pb24sIFJheSwgVmVjdG9yMyB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lXCI7XG5pbXBvcnQgeyBMaXRlSGl0UmVzdWx0IH0gZnJvbSBcIi4vTGl0ZUhpdFJlc3VsdFwiO1xuaW1wb3J0IHsgTGl0ZUNvbGxpZGVyU2hhcGUgfSBmcm9tIFwiLi9zaGFwZS9MaXRlQ29sbGlkZXJTaGFwZVwiO1xuaW1wb3J0IHsgTGl0ZVRyYW5zZm9ybSB9IGZyb20gXCIuL0xpdGVUcmFuc2Zvcm1cIjtcblxuLyoqXG4gKiBBYnN0cmFjdCBjbGFzcyBvZiBwaHlzaWNhbCBjb2xsaWRlci5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIExpdGVDb2xsaWRlciBpbXBsZW1lbnRzIElDb2xsaWRlciB7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX3NoYXBlczogTGl0ZUNvbGxpZGVyU2hhcGVbXSA9IFtdO1xuICAvKiogQGludGVybmFsICovXG4gIF90cmFuc2Zvcm06IExpdGVUcmFuc2Zvcm0gPSBuZXcgTGl0ZVRyYW5zZm9ybSgpO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl90cmFuc2Zvcm0ub3duZXIgPSB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXIuYWRkU2hhcGUgfVxuICAgKi9cbiAgYWRkU2hhcGUoc2hhcGU6IExpdGVDb2xsaWRlclNoYXBlKTogdm9pZCB7XG4gICAgY29uc3Qgb2xkQ29sbGlkZXIgPSBzaGFwZS5fY29sbGlkZXI7XG4gICAgaWYgKG9sZENvbGxpZGVyICE9PSB0aGlzKSB7XG4gICAgICBpZiAob2xkQ29sbGlkZXIpIHtcbiAgICAgICAgb2xkQ29sbGlkZXIucmVtb3ZlU2hhcGUoc2hhcGUpO1xuICAgICAgfVxuICAgICAgdGhpcy5fc2hhcGVzLnB1c2goc2hhcGUpO1xuICAgICAgc2hhcGUuX2NvbGxpZGVyID0gdGhpcztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlci5yZW1vdmVTaGFwZSB9XG4gICAqL1xuICByZW1vdmVTaGFwZShzaGFwZTogTGl0ZUNvbGxpZGVyU2hhcGUpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX3NoYXBlcy5pbmRleE9mKHNoYXBlKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9zaGFwZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHNoYXBlLl9jb2xsaWRlciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXIuc2V0V29ybGRUcmFuc2Zvcm0gfVxuICAgKi9cbiAgc2V0V29ybGRUcmFuc2Zvcm0ocG9zaXRpb246IFZlY3RvcjMsIHJvdGF0aW9uOiBRdWF0ZXJuaW9uKTogdm9pZCB7XG4gICAgdGhpcy5fdHJhbnNmb3JtLnNldFBvc2l0aW9uKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopO1xuICAgIHRoaXMuX3RyYW5zZm9ybS5zZXRSb3RhdGlvblF1YXRlcm5pb24ocm90YXRpb24ueCwgcm90YXRpb24ueSwgcm90YXRpb24ueiwgcm90YXRpb24udyk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlci5nZXRXb3JsZFRyYW5zZm9ybSB9XG4gICAqL1xuICBnZXRXb3JsZFRyYW5zZm9ybShvdXRQb3NpdGlvbjogVmVjdG9yMywgb3V0Um90YXRpb246IFF1YXRlcm5pb24pOiB2b2lkIHtcbiAgICBjb25zdCB7IHBvc2l0aW9uLCByb3RhdGlvblF1YXRlcm5pb24gfSA9IHRoaXMuX3RyYW5zZm9ybTtcbiAgICBvdXRQb3NpdGlvbi5zZXQocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueik7XG4gICAgb3V0Um90YXRpb24uc2V0KHJvdGF0aW9uUXVhdGVybmlvbi54LCByb3RhdGlvblF1YXRlcm5pb24ueSwgcm90YXRpb25RdWF0ZXJuaW9uLnosIHJvdGF0aW9uUXVhdGVybmlvbi53KTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyLmRlc3Ryb3kgfVxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX3JheWNhc3QocmF5OiBSYXksIG9uUmF5Y2FzdDogKG9iajogbnVtYmVyKSA9PiBib29sZWFuLCBoaXQ6IExpdGVIaXRSZXN1bHQpOiBib29sZWFuIHtcbiAgICBoaXQuZGlzdGFuY2UgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgIGNvbnN0IHNoYXBlcyA9IHRoaXMuX3NoYXBlcztcbiAgICBmb3IgKGxldCBpID0gMCwgbiA9IHNoYXBlcy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgIGNvbnN0IHNoYXBlID0gc2hhcGVzW2ldO1xuICAgICAgb25SYXljYXN0KHNoYXBlLl9pZCkgJiYgc2hhcGUuX3JheWNhc3QocmF5LCBoaXQpO1xuICAgIH1cblxuICAgIHJldHVybiBoaXQuZGlzdGFuY2UgIT0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgTGl0ZUNvbGxpZGVyIH0gZnJvbSBcIi4vTGl0ZUNvbGxpZGVyXCI7XG5pbXBvcnQgeyBJRHluYW1pY0NvbGxpZGVyIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtZGVzaWduXCI7XG5pbXBvcnQgeyBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmVcIjtcblxuLyoqXG4gKiBBIGR5bmFtaWMgY29sbGlkZXIgY2FuIGFjdCB3aXRoIHNlbGYtZGVmaW5lZCBtb3ZlbWVudCBvciBwaHlzaWNhbCBmb3JjZVxuICovXG5leHBvcnQgY2xhc3MgTGl0ZUR5bmFtaWNDb2xsaWRlciBleHRlbmRzIExpdGVDb2xsaWRlciBpbXBsZW1lbnRzIElEeW5hbWljQ29sbGlkZXIge1xuICAvKipcbiAgICogSW5pdGlhbGl6ZSBkeW5hbWljIGFjdG9yLlxuICAgKiBAcGFyYW0gcG9zaXRpb24gLSBUaGUgZ2xvYmFsIHBvc2l0aW9uXG4gICAqIEBwYXJhbSByb3RhdGlvbiAtIFRoZSBnbG9iYWwgcm90YXRpb25cbiAgICovXG4gIGNvbnN0cnVjdG9yKHBvc2l0aW9uOiBWZWN0b3IzLCByb3RhdGlvbjogUXVhdGVybmlvbikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fdHJhbnNmb3JtLnNldFBvc2l0aW9uKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopO1xuICAgIHRoaXMuX3RyYW5zZm9ybS5zZXRSb3RhdGlvblF1YXRlcm5pb24ocm90YXRpb24ueCwgcm90YXRpb24ueSwgcm90YXRpb24ueiwgcm90YXRpb24udyk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuYWRkRm9yY2UgfVxuICAgKi9cbiAgYWRkRm9yY2UoZm9yY2U6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IGFkZEZvcmNlLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLmFkZFRvcnF1ZSB9XG4gICAqL1xuICBhZGRUb3JxdWUodG9ycXVlOiBWZWN0b3IzKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBhZGRUb3JxdWUuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIubW92ZSB9XG4gICAqL1xuICBtb3ZlKHBvc2l0aW9uT3JSb3RhdGlvbjogVmVjdG9yMyB8IFF1YXRlcm5pb24sIHJvdGF0aW9uPzogUXVhdGVybmlvbik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgbW92ZS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zbGVlcCB9XG4gICAqL1xuICBzbGVlcCgpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHB1dFRvU2xlZXAuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuc2V0QW5ndWxhckRhbXBpbmcgfVxuICAgKi9cbiAgc2V0QW5ndWxhckRhbXBpbmcodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0QW5ndWxhckRhbXBpbmcuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuc2V0QW5ndWxhclZlbG9jaXR5IH1cbiAgICovXG4gIHNldEFuZ3VsYXJWZWxvY2l0eSh2YWx1ZTogVmVjdG9yMyk6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0QW5ndWxhclZlbG9jaXR5LiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldENlbnRlck9mTWFzcyB9XG4gICAqL1xuICBzZXRDZW50ZXJPZk1hc3ModmFsdWU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldENlbnRlck9mTWFzcy4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRDb2xsaXNpb25EZXRlY3Rpb25Nb2RlIH1cbiAgICovXG4gIHNldENvbGxpc2lvbkRldGVjdGlvbk1vZGUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0Q29sbGlzaW9uRGV0ZWN0aW9uTW9kZS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRDb25zdHJhaW50cyB9XG4gICAqL1xuICBzZXRDb25zdHJhaW50cyhmbGFnczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRDb25zdHJhaW50cy4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRJbmVydGlhVGVuc29yIH1cbiAgICovXG4gIHNldEluZXJ0aWFUZW5zb3IodmFsdWU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldEluZXJ0aWFUZW5zb3IuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuc2V0SXNLaW5lbWF0aWMgfVxuICAgKi9cbiAgc2V0SXNLaW5lbWF0aWModmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldElzS2luZW1hdGljLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldExpbmVhckRhbXBpbmcgfVxuICAgKi9cbiAgc2V0TGluZWFyRGFtcGluZyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRMaW5lYXJEYW1waW5nLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldExpbmVhclZlbG9jaXR5IH1cbiAgICovXG4gIHNldExpbmVhclZlbG9jaXR5KHZhbHVlOiBWZWN0b3IzKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRMaW5lYXJWZWxvY2l0eS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRNYXNzIH1cbiAgICovXG4gIHNldE1hc3ModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0TWFzcy4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRNYXhBbmd1bGFyVmVsb2NpdHkgfVxuICAgKi9cbiAgc2V0TWF4QW5ndWxhclZlbG9jaXR5KHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldE1heEFuZ3VsYXJWZWxvY2l0eS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRNYXhEZXBlbmV0cmF0aW9uVmVsb2NpdHkgfVxuICAgKi9cbiAgc2V0TWF4RGVwZW5ldHJhdGlvblZlbG9jaXR5KHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldE1heERlcGVuZXRyYXRpb25WZWxvY2l0eS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRTbGVlcFRocmVzaG9sZCB9XG4gICAqL1xuICBzZXRTbGVlcFRocmVzaG9sZCh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRTbGVlcFRocmVzaG9sZC4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRTb2x2ZXJJdGVyYXRpb25zIH1cbiAgICovXG4gIHNldFNvbHZlckl0ZXJhdGlvbnModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0U29sdmVySXRlcmF0aW9ucy4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci53YWtlVXAgfVxuICAgKi9cbiAgd2FrZVVwKCk6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgd2FrZVVwLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG59XG4iLCIvKipcbiAqIEhpZ2gtcGVyZm9ybWFuY2UgdW5vcmRlcmVkIGFycmF5LCBkZWxldGUgdXNlcyBleGNoYW5nZSBtZXRob2QgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSwgaW50ZXJuYWwgY2FwYWNpdHkgb25seSBpbmNyZWFzZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBEaXNvcmRlcmVkQXJyYXk8VD4ge1xuICBfZWxlbWVudHM6IFRbXTtcblxuICBsZW5ndGg6IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IoY291bnQ6IG51bWJlciA9IDApIHtcbiAgICB0aGlzLl9lbGVtZW50cyA9IG5ldyBBcnJheTxUPihjb3VudCk7XG4gIH1cblxuICBhZGQoZWxlbWVudDogVCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gdGhpcy5fZWxlbWVudHMubGVuZ3RoKSB0aGlzLl9lbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIGVsc2UgdGhpcy5fZWxlbWVudHNbdGhpcy5sZW5ndGhdID0gZWxlbWVudDtcbiAgICB0aGlzLmxlbmd0aCsrO1xuICB9XG5cbiAgZGVsZXRlKGVsZW1lbnQ6IFQpOiB2b2lkIHtcbiAgICAvL1RPRE86IEl0IGNhbiBiZSBvcHRpbWl6ZWQgZm9yIGN1c3RvbSBiaW5hcnkgc2VhcmNoIGFuZCBvdGhlciBhbGdvcml0aG1zLCBjdXJyZW50bHkgdGhpcy5fZWxlbWVudHM+PXRoaXMubGVuZ3RoIHdhc3RlcyBwZXJmb3JtYW5jZS5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2VsZW1lbnRzLmluZGV4T2YoZWxlbWVudCk7XG4gICAgdGhpcy5kZWxldGVCeUluZGV4KGluZGV4KTtcbiAgfVxuXG4gIGdldChpbmRleDogbnVtYmVyKTogVCB7XG4gICAgaWYgKGluZGV4ID49IHRoaXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBcIkluZGV4IGlzIG91dCBvZiByYW5nZS5cIjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRzW2luZGV4XTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gaW5kZXhcbiAgICogQHJldHVybnMgVGhlIHJlcGxhY2VkIGl0ZW0gaXMgdXNlZCB0byByZXNldCBpdHMgaW5kZXguXG4gICAqL1xuICBkZWxldGVCeUluZGV4KGluZGV4OiBudW1iZXIpOiBUIHtcbiAgICB2YXIgZWxlbWVudHM6IFRbXSA9IHRoaXMuX2VsZW1lbnRzO1xuICAgIGxldCBlbmQ6IFQgPSBudWxsO1xuICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMubGVuZ3RoIC0gMTtcbiAgICBpZiAoaW5kZXggIT09IGxhc3RJbmRleCkge1xuICAgICAgZW5kID0gZWxlbWVudHNbbGFzdEluZGV4XTtcbiAgICAgIGVsZW1lbnRzW2luZGV4XSA9IGVuZDtcbiAgICB9XG4gICAgdGhpcy5sZW5ndGgtLTtcbiAgICByZXR1cm4gZW5kO1xuICB9XG5cbiAgZ2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fZWxlbWVudHMubGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gIH1cbn1cbiIsImltcG9ydCB7IFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuXG4vKipcbiAqIFN0cnVjdHVyZSB1c2VkIHRvIGdldCBpbmZvcm1hdGlvbiBiYWNrIGZyb20gYSByYXljYXN0IG9yIGEgc3dlZXAuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIExpdGVIaXRSZXN1bHQge1xuICAvKiogVGhlIGNvbGxpZGVyIHRoYXQgd2FzIGhpdC4gKi9cbiAgc2hhcGVJRDogbnVtYmVyID0gLTE7XG4gIC8qKiBUaGUgZGlzdGFuY2UgZnJvbSB0aGUgb3JpZ2luIHRvIHRoZSBoaXQgcG9pbnQuICovXG4gIGRpc3RhbmNlOiBudW1iZXIgPSAwO1xuICAvKiogVGhlIGhpdCBwb2ludCBvZiB0aGUgY29sbGlkZXIgdGhhdCB3YXMgaGl0IGluIHdvcmxkIHNwYWNlLiAqL1xuICBwb2ludDogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCk7XG4gIC8qKiBUaGUgaGl0IG5vcm1hbCBvZiB0aGUgY29sbGlkZXIgdGhhdCB3YXMgaGl0IGluIHdvcmxkIHNwYWNlLiAqL1xuICBub3JtYWw6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpO1xufVxuIiwiaW1wb3J0IHsgSUJveENvbGxpZGVyU2hhcGUgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1kZXNpZ25cIjtcbmltcG9ydCB7IEJvdW5kaW5nQm94LCBSYXksIFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuaW1wb3J0IHsgTGl0ZUNvbGxpZGVyU2hhcGUgfSBmcm9tIFwiLi9MaXRlQ29sbGlkZXJTaGFwZVwiO1xuaW1wb3J0IHsgTGl0ZUhpdFJlc3VsdCB9IGZyb20gXCIuLi9MaXRlSGl0UmVzdWx0XCI7XG5pbXBvcnQgeyBMaXRlUGh5c2ljc01hdGVyaWFsIH0gZnJvbSBcIi4uL0xpdGVQaHlzaWNzTWF0ZXJpYWxcIjtcblxuLyoqXG4gKiBCb3ggY29sbGlkZXIgc2hhcGUgaW4gTGl0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIExpdGVCb3hDb2xsaWRlclNoYXBlIGV4dGVuZHMgTGl0ZUNvbGxpZGVyU2hhcGUgaW1wbGVtZW50cyBJQm94Q29sbGlkZXJTaGFwZSB7XG4gIHByaXZhdGUgc3RhdGljIF90ZW1wQm94OiBCb3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xuICBwcml2YXRlIF9oYWxmU2l6ZTogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCk7XG4gIHByaXZhdGUgX3NjYWxlOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoMSwgMSwgMSk7XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfYm94TWluOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoLTAuNSwgLTAuNSwgLTAuNSk7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX2JveE1heDogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKDAuNSwgMC41LCAwLjUpO1xuXG4gIC8qKlxuICAgKiBJbml0IEJveCBTaGFwZS5cbiAgICogQHBhcmFtIHVuaXF1ZUlEIC0gVW5pcXVlSUQgbWFyayBTaGFwZS5cbiAgICogQHBhcmFtIHNpemUgLSBTaXplIG9mIFNoYXBlLlxuICAgKiBAcGFyYW0gbWF0ZXJpYWwgLSBNYXRlcmlhbCBvZiBQaHlzWENvbGxpZGVyLlxuICAgKi9cbiAgY29uc3RydWN0b3IodW5pcXVlSUQ6IG51bWJlciwgc2l6ZTogVmVjdG9yMywgbWF0ZXJpYWw6IExpdGVQaHlzaWNzTWF0ZXJpYWwpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2lkID0gdW5pcXVlSUQ7XG4gICAgdGhpcy5faGFsZlNpemUuc2V0KHNpemUueCAqIDAuNSwgc2l6ZS55ICogMC41LCBzaXplLnogKiAwLjUpO1xuICAgIHRoaXMuX3NldEJvbmRpbmdCb3goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyU2hhcGUuc2V0UG9zaXRpb24gfVxuICAgKi9cbiAgc2V0UG9zaXRpb24ocG9zaXRpb246IFZlY3RvcjMpOiB2b2lkIHtcbiAgICBzdXBlci5zZXRQb3NpdGlvbihwb3NpdGlvbik7XG4gICAgdGhpcy5fc2V0Qm9uZGluZ0JveCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRXb3JsZFNjYWxlIH1cbiAgICovXG4gIHNldFdvcmxkU2NhbGUoc2NhbGU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aGlzLl90cmFuc2Zvcm0ucG9zaXRpb24gPSB0aGlzLl90cmFuc2Zvcm0ucG9zaXRpb24ubXVsdGlwbHkoc2NhbGUpO1xuICAgIHRoaXMuX3NjYWxlLmNvcHlGcm9tKHNjYWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUJveENvbGxpZGVyU2hhcGUuc2V0U2l6ZSB9XG4gICAqL1xuICBzZXRTaXplKHZhbHVlOiBWZWN0b3IzKTogdm9pZCB7XG4gICAgdGhpcy5faGFsZlNpemUuc2V0KHZhbHVlLnggKiAwLjUsIHZhbHVlLnkgKiAwLjUsIHZhbHVlLnogKiAwLjUpO1xuICAgIHRoaXMuX3NldEJvbmRpbmdCb3goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9yYXljYXN0KHJheTogUmF5LCBoaXQ6IExpdGVIaXRSZXN1bHQpOiBib29sZWFuIHtcbiAgICBjb25zdCBsb2NhbFJheSA9IHRoaXMuX2dldExvY2FsUmF5KHJheSk7XG5cbiAgICBjb25zdCBib3VuZGluZ0JveCA9IExpdGVCb3hDb2xsaWRlclNoYXBlLl90ZW1wQm94O1xuICAgIGJvdW5kaW5nQm94Lm1pbi5zZXQoXG4gICAgICAtdGhpcy5faGFsZlNpemUueCAqIHRoaXMuX3NjYWxlLngsXG4gICAgICAtdGhpcy5faGFsZlNpemUueSAqIHRoaXMuX3NjYWxlLnksXG4gICAgICAtdGhpcy5faGFsZlNpemUueiAqIHRoaXMuX3NjYWxlLnpcbiAgICApO1xuICAgIGJvdW5kaW5nQm94Lm1heC5zZXQoXG4gICAgICB0aGlzLl9oYWxmU2l6ZS54ICogdGhpcy5fc2NhbGUueCxcbiAgICAgIHRoaXMuX2hhbGZTaXplLnkgKiB0aGlzLl9zY2FsZS55LFxuICAgICAgdGhpcy5faGFsZlNpemUueiAqIHRoaXMuX3NjYWxlLnpcbiAgICApO1xuICAgIGNvbnN0IHJheURpc3RhbmNlID0gbG9jYWxSYXkuaW50ZXJzZWN0Qm94KGJvdW5kaW5nQm94KTtcbiAgICBpZiAocmF5RGlzdGFuY2UgIT09IC0xKSB7XG4gICAgICB0aGlzLl91cGRhdGVIaXRSZXN1bHQobG9jYWxSYXksIHJheURpc3RhbmNlLCBoaXQsIHJheS5vcmlnaW4pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRCb25kaW5nQm94KCk6IHZvaWQge1xuICAgIGNvbnN0IHsgcG9zaXRpb246IGNlbnRlciB9ID0gdGhpcy5fdHJhbnNmb3JtO1xuICAgIGNvbnN0IGhhbGZTaXplID0gdGhpcy5faGFsZlNpemU7XG5cbiAgICBWZWN0b3IzLmFkZChjZW50ZXIsIGhhbGZTaXplLCB0aGlzLl9ib3hNYXgpO1xuICAgIFZlY3RvcjMuc3VidHJhY3QoY2VudGVyLCBoYWxmU2l6ZSwgdGhpcy5fYm94TWluKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNwaGVyZUNvbGxpZGVyU2hhcGUgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1kZXNpZ25cIjtcbmltcG9ydCB7IExpdGVDb2xsaWRlclNoYXBlIH0gZnJvbSBcIi4vTGl0ZUNvbGxpZGVyU2hhcGVcIjtcbmltcG9ydCB7IEJvdW5kaW5nU3BoZXJlLCBRdWF0ZXJuaW9uLCBSYXksIFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuaW1wb3J0IHsgTGl0ZUhpdFJlc3VsdCB9IGZyb20gXCIuLi9MaXRlSGl0UmVzdWx0XCI7XG5pbXBvcnQgeyBMaXRlUGh5c2ljc01hdGVyaWFsIH0gZnJvbSBcIi4uL0xpdGVQaHlzaWNzTWF0ZXJpYWxcIjtcblxuLyoqXG4gKiBTcGhlcmUgY29sbGlkZXIgc2hhcGUgaW4gTGl0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIExpdGVTcGhlcmVDb2xsaWRlclNoYXBlIGV4dGVuZHMgTGl0ZUNvbGxpZGVyU2hhcGUgaW1wbGVtZW50cyBJU3BoZXJlQ29sbGlkZXJTaGFwZSB7XG4gIHByaXZhdGUgc3RhdGljIF90ZW1wU3BoZXJlOiBCb3VuZGluZ1NwaGVyZSA9IG5ldyBCb3VuZGluZ1NwaGVyZSgpO1xuXG4gIHByaXZhdGUgX3JhZGl1czogbnVtYmVyID0gMTtcbiAgcHJpdmF0ZSBfbWF4U2NhbGU6IG51bWJlciA9IDE7XG5cbiAgZ2V0IHdvcmxkUmFkaXVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JhZGl1cyAqIHRoaXMuX21heFNjYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXQgc3BoZXJlIHNoYXBlLlxuICAgKiBAcGFyYW0gdW5pcXVlSUQgLSBVbmlxdWVJRCBtYXJrIGNvbGxpZGVyXG4gICAqIEBwYXJhbSByYWRpdXMgLSBTaXplIG9mIFNwaGVyZUNvbGxpZGVyXG4gICAqIEBwYXJhbSBtYXRlcmlhbCAtIE1hdGVyaWFsIG9mIFBoeXNYQ29sbGlkZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKHVuaXF1ZUlEOiBudW1iZXIsIHJhZGl1czogbnVtYmVyLCBtYXRlcmlhbDogTGl0ZVBoeXNpY3NNYXRlcmlhbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fcmFkaXVzID0gcmFkaXVzO1xuICAgIHRoaXMuX2lkID0gdW5pcXVlSUQ7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElTcGhlcmVDb2xsaWRlclNoYXBlLnNldFJhZGl1cyB9XG4gICAqL1xuICBzZXRSYWRpdXModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3JhZGl1cyA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRXb3JsZFNjYWxlIH1cbiAgICovXG4gIHNldFdvcmxkU2NhbGUoc2NhbGU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aGlzLl9tYXhTY2FsZSA9IE1hdGgubWF4KHNjYWxlLngsIE1hdGgubWF4KHNjYWxlLngsIHNjYWxlLnkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9yYXljYXN0KHJheTogUmF5LCBoaXQ6IExpdGVIaXRSZXN1bHQpOiBib29sZWFuIHtcbiAgICBjb25zdCBib3VuZGluZ1NwaGVyZSA9IExpdGVTcGhlcmVDb2xsaWRlclNoYXBlLl90ZW1wU3BoZXJlO1xuICAgIFZlY3RvcjMudHJhbnNmb3JtQ29vcmRpbmF0ZSh0aGlzLl90cmFuc2Zvcm0ucG9zaXRpb24sIHRoaXMuX2NvbGxpZGVyLl90cmFuc2Zvcm0ud29ybGRNYXRyaXgsIGJvdW5kaW5nU3BoZXJlLmNlbnRlcik7XG4gICAgYm91bmRpbmdTcGhlcmUucmFkaXVzID0gdGhpcy53b3JsZFJhZGl1cztcblxuICAgIGNvbnN0IHJheURpc3RhbmNlID0gcmF5LmludGVyc2VjdFNwaGVyZShib3VuZGluZ1NwaGVyZSk7XG4gICAgaWYgKHJheURpc3RhbmNlICE9PSAtMSkge1xuICAgICAgdGhpcy5fdXBkYXRlSGl0UmVzdWx0KHJheSwgcmF5RGlzdGFuY2UsIGhpdCwgcmF5Lm9yaWdpbiwgdHJ1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgSUNoYXJhY3RlckNvbnRyb2xsZXIsIElQaHlzaWNzTWFuYWdlciB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWRlc2lnblwiO1xuaW1wb3J0IHsgQm91bmRpbmdCb3gsIEJvdW5kaW5nU3BoZXJlLCBDb2xsaXNpb25VdGlsLCBSYXksIFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuaW1wb3J0IHsgRGlzb3JkZXJlZEFycmF5IH0gZnJvbSBcIi4vRGlzb3JkZXJlZEFycmF5XCI7XG5pbXBvcnQgeyBMaXRlQ29sbGlkZXIgfSBmcm9tIFwiLi9MaXRlQ29sbGlkZXJcIjtcbmltcG9ydCB7IExpdGVIaXRSZXN1bHQgfSBmcm9tIFwiLi9MaXRlSGl0UmVzdWx0XCI7XG5pbXBvcnQgeyBMaXRlQm94Q29sbGlkZXJTaGFwZSB9IGZyb20gXCIuL3NoYXBlL0xpdGVCb3hDb2xsaWRlclNoYXBlXCI7XG5pbXBvcnQgeyBMaXRlQ29sbGlkZXJTaGFwZSB9IGZyb20gXCIuL3NoYXBlL0xpdGVDb2xsaWRlclNoYXBlXCI7XG5pbXBvcnQgeyBMaXRlU3BoZXJlQ29sbGlkZXJTaGFwZSB9IGZyb20gXCIuL3NoYXBlL0xpdGVTcGhlcmVDb2xsaWRlclNoYXBlXCI7XG5cbi8qKlxuICogQSBtYW5hZ2VyIGlzIGEgY29sbGVjdGlvbiBvZiBjb2xsaWRlcnMgYW5kIGNvbnN0cmFpbnRzIHdoaWNoIGNhbiBpbnRlcmFjdC5cbiAqL1xuZXhwb3J0IGNsYXNzIExpdGVQaHlzaWNzTWFuYWdlciBpbXBsZW1lbnRzIElQaHlzaWNzTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIF90ZW1wU3BoZXJlOiBCb3VuZGluZ1NwaGVyZSA9IG5ldyBCb3VuZGluZ1NwaGVyZSgpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVtcEJveDogQm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2N1cnJlbnRIaXQ6IExpdGVIaXRSZXN1bHQgPSBuZXcgTGl0ZUhpdFJlc3VsdCgpO1xuICBwcml2YXRlIHN0YXRpYyBfaGl0UmVzdWx0OiBMaXRlSGl0UmVzdWx0ID0gbmV3IExpdGVIaXRSZXN1bHQoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vbkNvbnRhY3RFbnRlcj86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfb25Db250YWN0RXhpdD86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfb25Db250YWN0U3RheT86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfb25UcmlnZ2VyRW50ZXI/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29uVHJpZ2dlckV4aXQ/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29uVHJpZ2dlclN0YXk/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBfY29sbGlkZXJzOiBMaXRlQ29sbGlkZXJbXSA9IFtdO1xuICBwcml2YXRlIF9zcGhlcmU6IEJvdW5kaW5nU3BoZXJlID0gbmV3IEJvdW5kaW5nU3BoZXJlKCk7XG4gIHByaXZhdGUgX2JveDogQm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcblxuICBwcml2YXRlIF9jdXJyZW50RXZlbnRzOiBEaXNvcmRlcmVkQXJyYXk8VHJpZ2dlckV2ZW50PiA9IG5ldyBEaXNvcmRlcmVkQXJyYXk8VHJpZ2dlckV2ZW50PigpO1xuICBwcml2YXRlIF9ldmVudE1hcDogUmVjb3JkPG51bWJlciwgUmVjb3JkPG51bWJlciwgVHJpZ2dlckV2ZW50Pj4gPSB7fTtcbiAgcHJpdmF0ZSBfZXZlbnRQb29sOiBUcmlnZ2VyRXZlbnRbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG9uQ29udGFjdEVudGVyPzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkLFxuICAgIG9uQ29udGFjdEV4aXQ/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25Db250YWN0U3RheT86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZCxcbiAgICBvblRyaWdnZXJFbnRlcj86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZCxcbiAgICBvblRyaWdnZXJFeGl0PzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkLFxuICAgIG9uVHJpZ2dlclN0YXk/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWRcbiAgKSB7XG4gICAgdGhpcy5fb25Db250YWN0RW50ZXIgPSBvbkNvbnRhY3RFbnRlcjtcbiAgICB0aGlzLl9vbkNvbnRhY3RFeGl0ID0gb25Db250YWN0RXhpdDtcbiAgICB0aGlzLl9vbkNvbnRhY3RTdGF5ID0gb25Db250YWN0U3RheTtcbiAgICB0aGlzLl9vblRyaWdnZXJFbnRlciA9IG9uVHJpZ2dlckVudGVyO1xuICAgIHRoaXMuX29uVHJpZ2dlckV4aXQgPSBvblRyaWdnZXJFeGl0O1xuICAgIHRoaXMuX29uVHJpZ2dlclN0YXkgPSBvblRyaWdnZXJTdGF5O1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIuc2V0R3Jhdml0eSB9XG4gICAqL1xuICBzZXRHcmF2aXR5KHZhbHVlOiBWZWN0b3IzKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBncmF2aXR5LiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3NNYW5hZ2VyLmFkZENvbGxpZGVyU2hhcGUgfVxuICAgKi9cbiAgYWRkQ29sbGlkZXJTaGFwZShjb2xsaWRlclNoYXBlOiBMaXRlQ29sbGlkZXJTaGFwZSk6IHZvaWQge1xuICAgIHRoaXMuX2V2ZW50TWFwW2NvbGxpZGVyU2hhcGUuX2lkXSA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIucmVtb3ZlQ29sbGlkZXJTaGFwZSB9XG4gICAqL1xuICByZW1vdmVDb2xsaWRlclNoYXBlKGNvbGxpZGVyU2hhcGU6IExpdGVDb2xsaWRlclNoYXBlKTogdm9pZCB7XG4gICAgY29uc3QgeyBfZXZlbnRQb29sOiBldmVudFBvb2wsIF9jdXJyZW50RXZlbnRzOiBjdXJyZW50RXZlbnRzIH0gPSB0aGlzO1xuICAgIGNvbnN0IHsgX2lkOiBzaGFwZUlEIH0gPSBjb2xsaWRlclNoYXBlO1xuICAgIGZvciAobGV0IGkgPSBjdXJyZW50RXZlbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBldmVudCA9IGN1cnJlbnRFdmVudHMuZ2V0KGkpO1xuICAgICAgaWYgKGV2ZW50LmluZGV4MSA9PSBzaGFwZUlEIHx8IGV2ZW50LmluZGV4MiA9PSBzaGFwZUlEKSB7XG4gICAgICAgIGN1cnJlbnRFdmVudHMuZGVsZXRlQnlJbmRleChpKTtcbiAgICAgICAgZXZlbnRQb29sLnB1c2goZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICBkZWxldGUgdGhpcy5fZXZlbnRNYXBbc2hhcGVJRF07XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWFuYWdlci5hZGRDb2xsaWRlciB9XG4gICAqL1xuICBhZGRDb2xsaWRlcihhY3RvcjogTGl0ZUNvbGxpZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fY29sbGlkZXJzLnB1c2goYWN0b3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIucmVtb3ZlQ29sbGlkZXIgfVxuICAgKi9cbiAgcmVtb3ZlQ29sbGlkZXIoY29sbGlkZXI6IExpdGVDb2xsaWRlcik6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fY29sbGlkZXJzLmluZGV4T2YoY29sbGlkZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2NvbGxpZGVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3NNYW5hZ2VyLnVwZGF0ZSB9XG4gICAqL1xuICB1cGRhdGUoZGVsdGFUaW1lOiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgY29sbGlkZXJzID0gdGhpcy5fY29sbGlkZXJzO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjb2xsaWRlcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHRoaXMuX2NvbGxpc2lvbkRldGVjdGlvbihkZWx0YVRpbWUsIGNvbGxpZGVyc1tpXSk7XG4gICAgfVxuICAgIHRoaXMuX2ZpcmVFdmVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIucmF5Y2FzdCB9XG4gICAqL1xuICByYXljYXN0KFxuICAgIHJheTogUmF5LFxuICAgIGRpc3RhbmNlOiBudW1iZXIsXG4gICAgb25SYXljYXN0OiAob2JqOiBudW1iZXIpID0+IGJvb2xlYW4sXG4gICAgaGl0PzogKHNoYXBlVW5pcXVlSUQ6IG51bWJlciwgZGlzdGFuY2U6IG51bWJlciwgcG9zaXRpb246IFZlY3RvcjMsIG5vcm1hbDogVmVjdG9yMykgPT4gdm9pZFxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCBjb2xsaWRlcnMgPSB0aGlzLl9jb2xsaWRlcnM7XG5cbiAgICBsZXQgaGl0UmVzdWx0OiBMaXRlSGl0UmVzdWx0O1xuICAgIGlmIChoaXQpIHtcbiAgICAgIGhpdFJlc3VsdCA9IExpdGVQaHlzaWNzTWFuYWdlci5faGl0UmVzdWx0O1xuICAgIH1cblxuICAgIGxldCBpc0hpdCA9IGZhbHNlO1xuICAgIGNvbnN0IGN1ckhpdCA9IExpdGVQaHlzaWNzTWFuYWdlci5fY3VycmVudEhpdDtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY29sbGlkZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBjb2xsaWRlciA9IGNvbGxpZGVyc1tpXTtcblxuICAgICAgaWYgKGNvbGxpZGVyLl9yYXljYXN0KHJheSwgb25SYXljYXN0LCBjdXJIaXQpKSB7XG4gICAgICAgIGlzSGl0ID0gdHJ1ZTtcbiAgICAgICAgaWYgKGN1ckhpdC5kaXN0YW5jZSA8IGRpc3RhbmNlKSB7XG4gICAgICAgICAgaWYgKGhpdFJlc3VsdCkge1xuICAgICAgICAgICAgaGl0UmVzdWx0Lm5vcm1hbC5jb3B5RnJvbShjdXJIaXQubm9ybWFsKTtcbiAgICAgICAgICAgIGhpdFJlc3VsdC5wb2ludC5jb3B5RnJvbShjdXJIaXQucG9pbnQpO1xuICAgICAgICAgICAgaGl0UmVzdWx0LmRpc3RhbmNlID0gY3VySGl0LmRpc3RhbmNlO1xuICAgICAgICAgICAgaGl0UmVzdWx0LnNoYXBlSUQgPSBjdXJIaXQuc2hhcGVJRDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRpc3RhbmNlID0gY3VySGl0LmRpc3RhbmNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpc0hpdCAmJiBoaXRSZXN1bHQpIHtcbiAgICAgIGhpdFJlc3VsdC5zaGFwZUlEID0gLTE7XG4gICAgICBoaXRSZXN1bHQuZGlzdGFuY2UgPSAwO1xuICAgICAgaGl0UmVzdWx0LnBvaW50LnNldCgwLCAwLCAwKTtcbiAgICAgIGhpdFJlc3VsdC5ub3JtYWwuc2V0KDAsIDAsIDApO1xuICAgIH0gZWxzZSBpZiAoaXNIaXQgJiYgaGl0UmVzdWx0KSB7XG4gICAgICBoaXQoaGl0UmVzdWx0LnNoYXBlSUQsIGhpdFJlc3VsdC5kaXN0YW5jZSwgaGl0UmVzdWx0LnBvaW50LCBoaXRSZXN1bHQubm9ybWFsKTtcbiAgICB9XG4gICAgcmV0dXJuIGlzSGl0O1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIuYWRkQ2hhcmFjdGVyQ29udHJvbGxlciB9XG4gICAqL1xuICBhZGRDaGFyYWN0ZXJDb250cm9sbGVyKGNoYXJhY3RlckNvbnRyb2xsZXI6IElDaGFyYWN0ZXJDb250cm9sbGVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBhZGRDaGFyYWN0ZXJDb250cm9sbGVyLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIucmVtb3ZlQ2hhcmFjdGVyQ29udHJvbGxlciB9XG4gICAqL1xuICByZW1vdmVDaGFyYWN0ZXJDb250cm9sbGVyKGNoYXJhY3RlckNvbnRyb2xsZXI6IElDaGFyYWN0ZXJDb250cm9sbGVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCByZW1vdmVDaGFyYWN0ZXJDb250cm9sbGVyLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgYm91bmRpbmcgYm94IGluIHdvcmxkIHNwYWNlIGZyb20gYm94Q29sbGlkZXIuXG4gICAqIEBwYXJhbSBib3hDb2xsaWRlciAtIFRoZSBib3hDb2xsaWRlciB0byBjYWxjdWxhdGVcbiAgICogQHBhcmFtIG91dCAtIFRoZSBjYWxjdWxhdGVkIGJvdW5kaW5nQm94XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBfdXBkYXRlV29ybGRCb3goYm94Q29sbGlkZXI6IExpdGVCb3hDb2xsaWRlclNoYXBlLCBvdXQ6IEJvdW5kaW5nQm94KTogdm9pZCB7XG4gICAgY29uc3QgbWF0ID0gYm94Q29sbGlkZXIuX3RyYW5zZm9ybS53b3JsZE1hdHJpeDtcbiAgICBvdXQubWluLmNvcHlGcm9tKGJveENvbGxpZGVyLl9ib3hNaW4pO1xuICAgIG91dC5tYXguY29weUZyb20oYm94Q29sbGlkZXIuX2JveE1heCk7XG4gICAgQm91bmRpbmdCb3gudHJhbnNmb3JtKG91dCwgbWF0LCBvdXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3BoZXJlIGluZm8gb2YgdGhlIGdpdmVuIHNwaGVyZSBjb2xsaWRlciBpbiB3b3JsZCBzcGFjZS5cbiAgICogQHBhcmFtIHNwaGVyZUNvbGxpZGVyIC0gVGhlIGdpdmVuIHNwaGVyZSBjb2xsaWRlclxuICAgKiBAcGFyYW0gb3V0IC0gVGhlIGNhbGN1bGF0ZWQgYm91bmRpbmdTcGhlcmVcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIF91cFdvcmxkU3BoZXJlKHNwaGVyZUNvbGxpZGVyOiBMaXRlU3BoZXJlQ29sbGlkZXJTaGFwZSwgb3V0OiBCb3VuZGluZ1NwaGVyZSk6IHZvaWQge1xuICAgIFZlY3RvcjMudHJhbnNmb3JtQ29vcmRpbmF0ZShzcGhlcmVDb2xsaWRlci5fdHJhbnNmb3JtLnBvc2l0aW9uLCBzcGhlcmVDb2xsaWRlci5fdHJhbnNmb3JtLndvcmxkTWF0cml4LCBvdXQuY2VudGVyKTtcbiAgICBvdXQucmFkaXVzID0gc3BoZXJlQ29sbGlkZXIud29ybGRSYWRpdXM7XG4gIH1cblxuICBwcml2YXRlIF9nZXRUcmlnZ2VyKGluZGV4MTogbnVtYmVyLCBpbmRleDI6IG51bWJlcik6IFRyaWdnZXJFdmVudCB7XG4gICAgbGV0IGV2ZW50OiBUcmlnZ2VyRXZlbnQ7XG4gICAgaWYgKHRoaXMuX2V2ZW50UG9vbC5sZW5ndGgpIHtcbiAgICAgIGV2ZW50ID0gdGhpcy5fZXZlbnRQb29sLnBvcCgpO1xuICAgICAgZXZlbnQuaW5kZXgxID0gaW5kZXgxO1xuICAgICAgZXZlbnQuaW5kZXgyID0gaW5kZXgyO1xuICAgIH0gZWxzZSB7XG4gICAgICBldmVudCA9IG5ldyBUcmlnZ2VyRXZlbnQoaW5kZXgxLCBpbmRleDIpO1xuICAgIH1cbiAgICB0aGlzLl9ldmVudE1hcFtpbmRleDFdW2luZGV4Ml0gPSBldmVudDtcbiAgICByZXR1cm4gZXZlbnQ7XG4gIH1cblxuICBwcml2YXRlIF9jb2xsaXNpb25EZXRlY3Rpb24oZGVsdGFUaW1lOiBudW1iZXIsIG15Q29sbGlkZXI6IExpdGVDb2xsaWRlcik6IHZvaWQge1xuICAgIGNvbnN0IGNvbGxpZGVycyA9IHRoaXMuX2NvbGxpZGVycztcblxuICAgIGNvbnN0IG15Q29sbGlkZXJTaGFwZXMgPSBteUNvbGxpZGVyLl9zaGFwZXM7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG15Q29sbGlkZXJTaGFwZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IG15U2hhcGUgPSBteUNvbGxpZGVyU2hhcGVzW2ldO1xuICAgICAgaWYgKG15U2hhcGUgaW5zdGFuY2VvZiBMaXRlQm94Q29sbGlkZXJTaGFwZSkge1xuICAgICAgICBMaXRlUGh5c2ljc01hbmFnZXIuX3VwZGF0ZVdvcmxkQm94KG15U2hhcGUsIHRoaXMuX2JveCk7XG4gICAgICAgIGZvciAobGV0IGogPSAwLCBsZW4gPSBjb2xsaWRlcnMubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICBjb25zdCBjb2xsaWRlclNoYXBlID0gY29sbGlkZXJzW2pdLl9zaGFwZXM7XG4gICAgICAgICAgZm9yIChsZXQgayA9IDAsIGxlbiA9IGNvbGxpZGVyU2hhcGUubGVuZ3RoOyBrIDwgbGVuOyBrKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNoYXBlID0gY29sbGlkZXJTaGFwZVtrXTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4MSA9IHNoYXBlLl9pZDtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4MiA9IG15U2hhcGUuX2lkO1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBpbmRleDEgPCBpbmRleDIgPyB0aGlzLl9ldmVudE1hcFtpbmRleDFdW2luZGV4Ml0gOiB0aGlzLl9ldmVudE1hcFtpbmRleDJdW2luZGV4MV07XG4gICAgICAgICAgICBpZiAoZXZlbnQgIT09IHVuZGVmaW5lZCAmJiAhZXZlbnQuYWxyZWFkeUludm9rZWQpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2hhcGUgIT0gbXlTaGFwZSAmJiB0aGlzLl9ib3hDb2xsaXNpb24oc2hhcGUpKSB7XG4gICAgICAgICAgICAgIGlmIChldmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBpbmRleDEgPCBpbmRleDIgPyB0aGlzLl9nZXRUcmlnZ2VyKGluZGV4MSwgaW5kZXgyKSA6IHRoaXMuX2dldFRyaWdnZXIoaW5kZXgyLCBpbmRleDEpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0YXRlID0gVHJpZ2dlckV2ZW50U3RhdGUuRW50ZXI7XG4gICAgICAgICAgICAgICAgZXZlbnQuYWxyZWFkeUludm9rZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50RXZlbnRzLmFkZChldmVudCk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhdGUgPT09IFRyaWdnZXJFdmVudFN0YXRlLkVudGVyKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RhdGUgPSBUcmlnZ2VyRXZlbnRTdGF0ZS5TdGF5O1xuICAgICAgICAgICAgICAgIGV2ZW50LmFscmVhZHlJbnZva2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhdGUgPT09IFRyaWdnZXJFdmVudFN0YXRlLlN0YXkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5hbHJlYWR5SW52b2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG15U2hhcGUgaW5zdGFuY2VvZiBMaXRlU3BoZXJlQ29sbGlkZXJTaGFwZSkge1xuICAgICAgICBMaXRlUGh5c2ljc01hbmFnZXIuX3VwV29ybGRTcGhlcmUobXlTaGFwZSwgdGhpcy5fc3BoZXJlKTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDAsIGxlbiA9IGNvbGxpZGVycy5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICAgIGNvbnN0IGNvbGxpZGVyU2hhcGUgPSBjb2xsaWRlcnNbal0uX3NoYXBlcztcbiAgICAgICAgICBmb3IgKGxldCBrID0gMCwgbGVuID0gY29sbGlkZXJTaGFwZS5sZW5ndGg7IGsgPCBsZW47IGsrKykge1xuICAgICAgICAgICAgY29uc3Qgc2hhcGUgPSBjb2xsaWRlclNoYXBlW2tdO1xuICAgICAgICAgICAgY29uc3QgaW5kZXgxID0gc2hhcGUuX2lkO1xuICAgICAgICAgICAgY29uc3QgaW5kZXgyID0gbXlTaGFwZS5faWQ7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IGluZGV4MSA8IGluZGV4MiA/IHRoaXMuX2V2ZW50TWFwW2luZGV4MV1baW5kZXgyXSA6IHRoaXMuX2V2ZW50TWFwW2luZGV4Ml1baW5kZXgxXTtcbiAgICAgICAgICAgIGlmIChldmVudCAhPT0gdW5kZWZpbmVkICYmICFldmVudC5hbHJlYWR5SW52b2tlZCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaGFwZSAhPSBteVNoYXBlICYmIHRoaXMuX3NwaGVyZUNvbGxpc2lvbihzaGFwZSkpIHtcbiAgICAgICAgICAgICAgaWYgKGV2ZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudCA9IGluZGV4MSA8IGluZGV4MiA/IHRoaXMuX2dldFRyaWdnZXIoaW5kZXgxLCBpbmRleDIpIDogdGhpcy5fZ2V0VHJpZ2dlcihpbmRleDIsIGluZGV4MSk7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RhdGUgPSBUcmlnZ2VyRXZlbnRTdGF0ZS5FbnRlcjtcbiAgICAgICAgICAgICAgICBldmVudC5hbHJlYWR5SW52b2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRFdmVudHMuYWRkKGV2ZW50KTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGF0ZSA9PT0gVHJpZ2dlckV2ZW50U3RhdGUuRW50ZXIpIHtcbiAgICAgICAgICAgICAgICBldmVudC5zdGF0ZSA9IFRyaWdnZXJFdmVudFN0YXRlLlN0YXk7XG4gICAgICAgICAgICAgICAgZXZlbnQuYWxyZWFkeUludm9rZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGF0ZSA9PT0gVHJpZ2dlckV2ZW50U3RhdGUuU3RheSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LmFscmVhZHlJbnZva2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9maXJlRXZlbnQoKTogdm9pZCB7XG4gICAgY29uc3QgeyBfZXZlbnRQb29sOiBldmVudFBvb2wsIF9jdXJyZW50RXZlbnRzOiBjdXJyZW50RXZlbnRzIH0gPSB0aGlzO1xuICAgIGZvciAobGV0IGkgPSBjdXJyZW50RXZlbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBldmVudCA9IGN1cnJlbnRFdmVudHMuZ2V0KGkpO1xuICAgICAgaWYgKCFldmVudC5hbHJlYWR5SW52b2tlZCkge1xuICAgICAgICBpZiAoZXZlbnQuc3RhdGUgPT0gVHJpZ2dlckV2ZW50U3RhdGUuRW50ZXIpIHtcbiAgICAgICAgICB0aGlzLl9vblRyaWdnZXJFbnRlcihldmVudC5pbmRleDEsIGV2ZW50LmluZGV4Mik7XG4gICAgICAgICAgZXZlbnQuYWxyZWFkeUludm9rZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXRlID09IFRyaWdnZXJFdmVudFN0YXRlLlN0YXkpIHtcbiAgICAgICAgICB0aGlzLl9vblRyaWdnZXJTdGF5KGV2ZW50LmluZGV4MSwgZXZlbnQuaW5kZXgyKTtcbiAgICAgICAgICBldmVudC5hbHJlYWR5SW52b2tlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50LnN0YXRlID0gVHJpZ2dlckV2ZW50U3RhdGUuRXhpdDtcbiAgICAgICAgdGhpcy5fZXZlbnRNYXBbZXZlbnQuaW5kZXgxXVtldmVudC5pbmRleDJdID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMuX29uVHJpZ2dlckV4aXQoZXZlbnQuaW5kZXgxLCBldmVudC5pbmRleDIpO1xuXG4gICAgICAgIGN1cnJlbnRFdmVudHMuZGVsZXRlQnlJbmRleChpKTtcbiAgICAgICAgZXZlbnRQb29sLnB1c2goZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2JveENvbGxpc2lvbihvdGhlcjogTGl0ZUNvbGxpZGVyU2hhcGUpOiBib29sZWFuIHtcbiAgICBpZiAob3RoZXIgaW5zdGFuY2VvZiBMaXRlQm94Q29sbGlkZXJTaGFwZSkge1xuICAgICAgY29uc3QgYm94ID0gTGl0ZVBoeXNpY3NNYW5hZ2VyLl90ZW1wQm94O1xuICAgICAgTGl0ZVBoeXNpY3NNYW5hZ2VyLl91cGRhdGVXb3JsZEJveChvdGhlciwgYm94KTtcbiAgICAgIHJldHVybiBDb2xsaXNpb25VdGlsLmludGVyc2VjdHNCb3hBbmRCb3goYm94LCB0aGlzLl9ib3gpO1xuICAgIH0gZWxzZSBpZiAob3RoZXIgaW5zdGFuY2VvZiBMaXRlU3BoZXJlQ29sbGlkZXJTaGFwZSkge1xuICAgICAgY29uc3Qgc3BoZXJlID0gTGl0ZVBoeXNpY3NNYW5hZ2VyLl90ZW1wU3BoZXJlO1xuICAgICAgTGl0ZVBoeXNpY3NNYW5hZ2VyLl91cFdvcmxkU3BoZXJlKG90aGVyLCBzcGhlcmUpO1xuICAgICAgcmV0dXJuIENvbGxpc2lvblV0aWwuaW50ZXJzZWN0c1NwaGVyZUFuZEJveChzcGhlcmUsIHRoaXMuX2JveCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgX3NwaGVyZUNvbGxpc2lvbihvdGhlcjogTGl0ZUNvbGxpZGVyU2hhcGUpOiBib29sZWFuIHtcbiAgICBpZiAob3RoZXIgaW5zdGFuY2VvZiBMaXRlQm94Q29sbGlkZXJTaGFwZSkge1xuICAgICAgY29uc3QgYm94ID0gTGl0ZVBoeXNpY3NNYW5hZ2VyLl90ZW1wQm94O1xuICAgICAgTGl0ZVBoeXNpY3NNYW5hZ2VyLl91cGRhdGVXb3JsZEJveChvdGhlciwgYm94KTtcbiAgICAgIHJldHVybiBDb2xsaXNpb25VdGlsLmludGVyc2VjdHNTcGhlcmVBbmRCb3godGhpcy5fc3BoZXJlLCBib3gpO1xuICAgIH0gZWxzZSBpZiAob3RoZXIgaW5zdGFuY2VvZiBMaXRlU3BoZXJlQ29sbGlkZXJTaGFwZSkge1xuICAgICAgY29uc3Qgc3BoZXJlID0gTGl0ZVBoeXNpY3NNYW5hZ2VyLl90ZW1wU3BoZXJlO1xuICAgICAgTGl0ZVBoeXNpY3NNYW5hZ2VyLl91cFdvcmxkU3BoZXJlKG90aGVyLCBzcGhlcmUpO1xuICAgICAgcmV0dXJuIENvbGxpc2lvblV0aWwuaW50ZXJzZWN0c1NwaGVyZUFuZFNwaGVyZShzcGhlcmUsIHRoaXMuX3NwaGVyZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFBoeXNpY3Mgc3RhdGVcbiAqL1xuZW51bSBUcmlnZ2VyRXZlbnRTdGF0ZSB7XG4gIEVudGVyLFxuICBTdGF5LFxuICBFeGl0XG59XG5cbi8qKlxuICogVHJpZ2dlciBldmVudCB0byBzdG9yZSBpbnRlcmFjdGl2ZSBvYmplY3QgaWRzIGFuZCBzdGF0ZS5cbiAqL1xuY2xhc3MgVHJpZ2dlckV2ZW50IHtcbiAgc3RhdGU6IFRyaWdnZXJFdmVudFN0YXRlO1xuICBpbmRleDE6IG51bWJlcjtcbiAgaW5kZXgyOiBudW1iZXI7XG4gIGFscmVhZHlJbnZva2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoaW5kZXgxOiBudW1iZXIsIGluZGV4MjogbnVtYmVyKSB7XG4gICAgdGhpcy5pbmRleDEgPSBpbmRleDE7XG4gICAgdGhpcy5pbmRleDIgPSBpbmRleDI7XG4gIH1cbn1cbiIsImltcG9ydCB7IElQaHlzaWNzTWF0ZXJpYWwgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1kZXNpZ25cIjtcblxuLyoqXG4gKiBQaHlzaWNzIG1hdGVyaWFsIGRlc2NyaWJlcyBob3cgdG8gaGFuZGxlIGNvbGxpZGluZyBvYmplY3RzIChmcmljdGlvbiwgYm91bmNpbmVzcykuXG4gKi9cbmV4cG9ydCBjbGFzcyBMaXRlUGh5c2ljc01hdGVyaWFsIGltcGxlbWVudHMgSVBoeXNpY3NNYXRlcmlhbCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHN0YXRpY0ZyaWN0aW9uOiBudW1iZXIsXG4gICAgZHluYW1pY0ZyaWN0aW9uOiBudW1iZXIsXG4gICAgYm91bmNpbmVzczogbnVtYmVyLFxuICAgIGZyaWN0aW9uQ29tYmluZTogbnVtYmVyLFxuICAgIGJvdW5jZUNvbWJpbmU6IG51bWJlclxuICApIHt9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hdGVyaWFsLnNldEJvdW5jaW5lc3MgfVxuICAgKi9cbiAgc2V0Qm91bmNpbmVzcyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBwaHlzaWNzIG1hdGVyaWFsLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hdGVyaWFsLnNldER5bmFtaWNGcmljdGlvbiB9XG4gICAqL1xuICBzZXREeW5hbWljRnJpY3Rpb24odmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgcGh5c2ljcyBtYXRlcmlhbC4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3NNYXRlcmlhbC5zZXRTdGF0aWNGcmljdGlvbiB9XG4gICAqL1xuICBzZXRTdGF0aWNGcmljdGlvbih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBwaHlzaWNzIG1hdGVyaWFsLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hdGVyaWFsLnNldEJvdW5jZUNvbWJpbmUgfVxuICAgKi9cbiAgc2V0Qm91bmNlQ29tYmluZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBwaHlzaWNzIG1hdGVyaWFsLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hdGVyaWFsLnNldEZyaWN0aW9uQ29tYmluZSB9XG4gICAqL1xuICBzZXRGcmljdGlvbkNvbWJpbmUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgcGh5c2ljcyBtYXRlcmlhbC4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3NNYXRlcmlhbC5kZXN0cm95IH1cbiAgICovXG4gIGRlc3Ryb3koKTogdm9pZCB7fVxufVxuIiwiaW1wb3J0IHsgSVN0YXRpY0NvbGxpZGVyIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtZGVzaWduXCI7XG5pbXBvcnQgeyBMaXRlQ29sbGlkZXIgfSBmcm9tIFwiLi9MaXRlQ29sbGlkZXJcIjtcbmltcG9ydCB7IFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuXG4vKipcbiAqIEEgc3RhdGljIGNvbGxpZGVyIGNvbXBvbmVudCB0aGF0IHdpbGwgbm90IG1vdmUuXG4gKiBAcmVtYXJrcyBNb3N0bHkgdXNlZCBmb3Igb2JqZWN0IHdoaWNoIGFsd2F5cyBzdGF5cyBhdCB0aGUgc2FtZSBwbGFjZSBhbmQgbmV2ZXIgbW92ZXMgYXJvdW5kLlxuICovXG5leHBvcnQgY2xhc3MgTGl0ZVN0YXRpY0NvbGxpZGVyIGV4dGVuZHMgTGl0ZUNvbGxpZGVyIGltcGxlbWVudHMgSVN0YXRpY0NvbGxpZGVyIHtcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgc3RhdGljIGFjdG9yLlxuICAgKiBAcGFyYW0gcG9zaXRpb24gLSBUaGUgZ2xvYmFsIHBvc2l0aW9uXG4gICAqIEBwYXJhbSByb3RhdGlvbiAtIFRoZSBnbG9iYWwgcm90YXRpb25cbiAgICovXG4gIGNvbnN0cnVjdG9yKHBvc2l0aW9uOiBWZWN0b3IzLCByb3RhdGlvbjogUXVhdGVybmlvbikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fdHJhbnNmb3JtLnNldFBvc2l0aW9uKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopO1xuICAgIHRoaXMuX3RyYW5zZm9ybS5zZXRSb3RhdGlvblF1YXRlcm5pb24ocm90YXRpb24ueCwgcm90YXRpb24ueSwgcm90YXRpb24ueiwgcm90YXRpb24udyk7XG4gIH1cbn1cbiIsIi8qKlxuICogIFN0YXRpYyBpbnRlcmZhY2UgaW1wbGVtZW50IGRlY29yYXRvci5cbiAqICBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMzk1NTE1Ny9ob3ctdG8tZGVmaW5lLXN0YXRpYy1wcm9wZXJ0eS1pbi10eXBlc2NyaXB0LWludGVyZmFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gU3RhdGljSW50ZXJmYWNlSW1wbGVtZW50PFQ+KCkge1xuICByZXR1cm4gPFUgZXh0ZW5kcyBUPihjb25zdHJ1Y3RvcjogVSkgPT4ge1xuICAgIGNvbnN0cnVjdG9yO1xuICB9O1xufVxuIiwiaW1wb3J0IHtcbiAgSUJveENvbGxpZGVyU2hhcGUsXG4gIElDYXBzdWxlQ29sbGlkZXJTaGFwZSxcbiAgSUNoYXJhY3RlckNvbnRyb2xsZXIsXG4gIElEeW5hbWljQ29sbGlkZXIsXG4gIElQaHlzaWNzLFxuICBJUGh5c2ljc01hbmFnZXIsXG4gIElQaHlzaWNzTWF0ZXJpYWwsXG4gIElQbGFuZUNvbGxpZGVyU2hhcGUsXG4gIElTcGhlcmVDb2xsaWRlclNoYXBlLFxuICBJU3RhdGljQ29sbGlkZXIsXG4gIElGaXhlZEpvaW50LFxuICBJSGluZ2VKb2ludCxcbiAgSVNwcmluZ0pvaW50LFxufSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1kZXNpZ25cIjtcbmltcG9ydCB7IFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuaW1wb3J0IHsgTGl0ZUR5bmFtaWNDb2xsaWRlciB9IGZyb20gXCIuL0xpdGVEeW5hbWljQ29sbGlkZXJcIjtcbmltcG9ydCB7IExpdGVQaHlzaWNzTWFuYWdlciB9IGZyb20gXCIuL0xpdGVQaHlzaWNzTWFuYWdlclwiO1xuaW1wb3J0IHsgTGl0ZVBoeXNpY3NNYXRlcmlhbCB9IGZyb20gXCIuL0xpdGVQaHlzaWNzTWF0ZXJpYWxcIjtcbmltcG9ydCB7IExpdGVTdGF0aWNDb2xsaWRlciB9IGZyb20gXCIuL0xpdGVTdGF0aWNDb2xsaWRlclwiO1xuaW1wb3J0IHsgTGl0ZUJveENvbGxpZGVyU2hhcGUgfSBmcm9tIFwiLi9zaGFwZS9MaXRlQm94Q29sbGlkZXJTaGFwZVwiO1xuaW1wb3J0IHsgTGl0ZVNwaGVyZUNvbGxpZGVyU2hhcGUgfSBmcm9tIFwiLi9zaGFwZS9MaXRlU3BoZXJlQ29sbGlkZXJTaGFwZVwiO1xuaW1wb3J0IHsgTGl0ZUNvbGxpZGVyIH0gZnJvbSBcIi4vTGl0ZUNvbGxpZGVyXCI7XG5pbXBvcnQgeyBTdGF0aWNJbnRlcmZhY2VJbXBsZW1lbnQgfSBmcm9tIFwiLi9TdGF0aWNJbnRlcmZhY2VJbXBsZW1lbnRcIjtcblxuQFN0YXRpY0ludGVyZmFjZUltcGxlbWVudDxJUGh5c2ljcz4oKVxuZXhwb3J0IGNsYXNzIExpdGVQaHlzaWNzIHtcbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljcy5jcmVhdGVQaHlzaWNzTWFuYWdlciB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlUGh5c2ljc01hbmFnZXIoXG4gICAgb25Db250YWN0QmVnaW4/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25Db250YWN0RW5kPzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkLFxuICAgIG9uQ29udGFjdFBlcnNpc3Q/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25UcmlnZ2VyQmVnaW4/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25UcmlnZ2VyRW5kPzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkLFxuICAgIG9uVHJpZ2dlclBlcnNpc3Q/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWRcbiAgKTogSVBoeXNpY3NNYW5hZ2VyIHtcbiAgICByZXR1cm4gbmV3IExpdGVQaHlzaWNzTWFuYWdlcihcbiAgICAgIG9uQ29udGFjdEJlZ2luLFxuICAgICAgb25Db250YWN0RW5kLFxuICAgICAgb25Db250YWN0UGVyc2lzdCxcbiAgICAgIG9uVHJpZ2dlckJlZ2luLFxuICAgICAgb25UcmlnZ2VyRW5kLFxuICAgICAgb25UcmlnZ2VyUGVyc2lzdFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZVN0YXRpY0NvbGxpZGVyIH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVTdGF0aWNDb2xsaWRlcihwb3NpdGlvbjogVmVjdG9yMywgcm90YXRpb246IFF1YXRlcm5pb24pOiBJU3RhdGljQ29sbGlkZXIge1xuICAgIHJldHVybiBuZXcgTGl0ZVN0YXRpY0NvbGxpZGVyKHBvc2l0aW9uLCByb3RhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZUR5bmFtaWNDb2xsaWRlciB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlRHluYW1pY0NvbGxpZGVyKHBvc2l0aW9uOiBWZWN0b3IzLCByb3RhdGlvbjogUXVhdGVybmlvbik6IElEeW5hbWljQ29sbGlkZXIge1xuICAgIHJldHVybiBuZXcgTGl0ZUR5bmFtaWNDb2xsaWRlcihwb3NpdGlvbiwgcm90YXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljcy5jcmVhdGVDaGFyYWN0ZXJDb250cm9sbGVyIH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVDaGFyYWN0ZXJDb250cm9sbGVyKCk6IElDaGFyYWN0ZXJDb250cm9sbGVyIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IGNyZWF0ZUNoYXJhY3RlckNvbnRyb2xsZXIuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZVBoeXNpY3NNYXRlcmlhbCB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlUGh5c2ljc01hdGVyaWFsKFxuICAgIHN0YXRpY0ZyaWN0aW9uOiBudW1iZXIsXG4gICAgZHluYW1pY0ZyaWN0aW9uOiBudW1iZXIsXG4gICAgYm91bmNpbmVzczogbnVtYmVyLFxuICAgIGZyaWN0aW9uQ29tYmluZTogbnVtYmVyLFxuICAgIGJvdW5jZUNvbWJpbmU6IG51bWJlclxuICApOiBJUGh5c2ljc01hdGVyaWFsIHtcbiAgICByZXR1cm4gbmV3IExpdGVQaHlzaWNzTWF0ZXJpYWwoc3RhdGljRnJpY3Rpb24sIGR5bmFtaWNGcmljdGlvbiwgYm91bmNpbmVzcywgZnJpY3Rpb25Db21iaW5lLCBib3VuY2VDb21iaW5lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3MuY3JlYXRlQm94Q29sbGlkZXJTaGFwZSB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlQm94Q29sbGlkZXJTaGFwZSh1bmlxdWVJRDogbnVtYmVyLCBzaXplOiBWZWN0b3IzLCBtYXRlcmlhbDogTGl0ZVBoeXNpY3NNYXRlcmlhbCk6IElCb3hDb2xsaWRlclNoYXBlIHtcbiAgICByZXR1cm4gbmV3IExpdGVCb3hDb2xsaWRlclNoYXBlKHVuaXF1ZUlELCBzaXplLCBtYXRlcmlhbCk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZVNwaGVyZUNvbGxpZGVyU2hhcGUgfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVNwaGVyZUNvbGxpZGVyU2hhcGUoXG4gICAgdW5pcXVlSUQ6IG51bWJlcixcbiAgICByYWRpdXM6IG51bWJlcixcbiAgICBtYXRlcmlhbDogTGl0ZVBoeXNpY3NNYXRlcmlhbFxuICApOiBJU3BoZXJlQ29sbGlkZXJTaGFwZSB7XG4gICAgcmV0dXJuIG5ldyBMaXRlU3BoZXJlQ29sbGlkZXJTaGFwZSh1bmlxdWVJRCwgcmFkaXVzLCBtYXRlcmlhbCk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZVBsYW5lQ29sbGlkZXJTaGFwZSB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlUGxhbmVDb2xsaWRlclNoYXBlKHVuaXF1ZUlEOiBudW1iZXIsIG1hdGVyaWFsOiBMaXRlUGh5c2ljc01hdGVyaWFsKTogSVBsYW5lQ29sbGlkZXJTaGFwZSB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBQbGFuZUNvbGxpZGVyU2hhcGUuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZUNhcHN1bGVDb2xsaWRlclNoYXBlIH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVDYXBzdWxlQ29sbGlkZXJTaGFwZShcbiAgICB1bmlxdWVJRDogbnVtYmVyLFxuICAgIHJhZGl1czogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIG1hdGVyaWFsOiBMaXRlUGh5c2ljc01hdGVyaWFsXG4gICk6IElDYXBzdWxlQ29sbGlkZXJTaGFwZSB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBDYXBzdWxlQ29sbGlkZXJTaGFwZS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3MuY3JlYXRlRml4ZWRKb2ludCB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlRml4ZWRKb2ludChjb2xsaWRlcjogTGl0ZUNvbGxpZGVyKTogSUZpeGVkSm9pbnQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgQ2Fwc3VsZUNvbGxpZGVyU2hhcGUuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZUhpbmdlSm9pbnQgfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUhpbmdlSm9pbnQoY29sbGlkZXI6IExpdGVDb2xsaWRlcik6IElIaW5nZUpvaW50IHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IENhcHN1bGVDb2xsaWRlclNoYXBlLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljcy5jcmVhdGVTcHJpbmdKb2ludCB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlU3ByaW5nSm9pbnQoY29sbGlkZXI6IExpdGVDb2xsaWRlcik6IElTcHJpbmdKb2ludCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBDYXBzdWxlQ29sbGlkZXJTaGFwZS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxufVxuIl0sIm5hbWVzIjpbInJlbW92ZUZyb21BcnJheSIsImFycmF5IiwiaXRlbSIsImluZGV4IiwiaW5kZXhPZiIsImxhc3QiLCJsZW5ndGgiLCJMaXRlVXBkYXRlRmxhZyIsIl9mbGFncyIsImZsYWciLCJwdXNoIiwiZGVzdHJveSIsIkxpdGVVcGRhdGVGbGFnTWFuYWdlciIsIl91cGRhdGVGbGFncyIsInJlZ2lzdGVyIiwiZGlzdHJpYnV0ZSIsInVwZGF0ZUZsYWdzIiwiaSIsIkxpdGVDb2xsaWRlclNoYXBlIiwiX3RyYW5zZm9ybSIsIkxpdGVUcmFuc2Zvcm0iLCJfaW52TW9kZWxNYXRyaXgiLCJNYXRyaXgiLCJvd25lciIsIl9pbnZlcnNlV29ybGRNYXRGbGFnIiwicmVnaXN0ZXJXb3JsZENoYW5nZUZsYWciLCJzZXRSb3RhdGlvbiIsInJvdGF0aW9uIiwiY29uc29sZSIsImxvZyIsInNldFBvc2l0aW9uIiwicG9zaXRpb24iLCJ4IiwieSIsInoiLCJzZXRDb250YWN0T2Zmc2V0Iiwib2Zmc2V0Iiwic2V0TWF0ZXJpYWwiLCJtYXRlcmlhbCIsInNldFVuaXF1ZUlEIiwiaWQiLCJfaWQiLCJzZXRJc1RyaWdnZXIiLCJ2YWx1ZSIsIl91cGRhdGVIaXRSZXN1bHQiLCJyYXkiLCJyYXlEaXN0YW5jZSIsIm91dEhpdCIsIm9yaWdpbiIsImlzV29ybGRSYXkiLCJoaXRQb2ludCIsIl90ZW1wUG9pbnQiLCJnZXRQb2ludCIsIlZlY3RvcjMiLCJ0cmFuc2Zvcm1Db29yZGluYXRlIiwid29ybGRNYXRyaXgiLCJkaXN0YW5jZSIsInBvaW50IiwiY29weUZyb20iLCJzaGFwZUlEIiwiX2dldExvY2FsUmF5Iiwid29ybGRUb0xvY2FsIiwiX2dldEludk1vZGVsTWF0cml4Iiwib3V0UmF5IiwiX3JheSIsInRyYW5zZm9ybU5vcm1hbCIsImRpcmVjdGlvbiIsIm5vcm1hbGl6ZSIsImludmVydCIsIlJheSIsIl9wb3NpdGlvbiIsIl9yb3RhdGlvbiIsIl9yb3RhdGlvblF1YXRlcm5pb24iLCJRdWF0ZXJuaW9uIiwiX3NjYWxlIiwiX3dvcmxkUm90YXRpb25RdWF0ZXJuaW9uIiwiX2xvY2FsTWF0cml4IiwiX3dvcmxkTWF0cml4IiwiX3VwZGF0ZUZsYWdNYW5hZ2VyIiwiX2lzUGFyZW50RGlydHkiLCJfcGFyZW50VHJhbnNmb3JtQ2FjaGUiLCJfZGlydHlGbGFnIiwic2V0Iiwic2V0Um90YXRpb25RdWF0ZXJuaW9uIiwidyIsInJvdGF0aW9uUXVhdGVybmlvbiIsInNldFNjYWxlIiwic2NhbGUiLCJfdXBkYXRlV29ybGRQb3NpdGlvbkZsYWciLCJfaXNDb250YWluRGlydHlGbGFncyIsIl93b3JsZEFzc29jaWF0ZWRDaGFuZ2UiLCJfb3duZXIiLCJMaXRlQ29sbGlkZXIiLCJzaGFwZXMiLCJfc2hhcGVzIiwibiIsIl91cGRhdGVXb3JsZFJvdGF0aW9uRmxhZyIsIl91cGRhdGVXb3JsZFNjYWxlRmxhZyIsIl91cGRhdGVBbGxXb3JsZEZsYWciLCJfZ2V0UGFyZW50VHJhbnNmb3JtIiwicGFyZW50Q2FjaGUiLCJwYXJlbnQiLCJfY29sbGlkZXIiLCJ0YXJnZXREaXJ0eUZsYWdzIiwiX2lzQ29udGFpbkRpcnR5RmxhZyIsInR5cGUiLCJfc2V0RGlydHlGbGFnVHJ1ZSIsIl9zZXREaXJ0eUZsYWdGYWxzZSIsInJvdGF0aW9uRXVsZXIiLCJNYXRoVXRpbCIsImRlZ3JlZVRvUmFkaWFuIiwid29ybGRSb3RhdGlvblF1YXRlcm5pb24iLCJtdWx0aXBseSIsIl90ZW1wUXVhdDAiLCJsb2NhbE1hdHJpeCIsImFmZmluZVRyYW5zZm9ybWF0aW9uIiwiZGVjb21wb3NlIiwiX3RlbXBNYXQ0MiIsIlRyYW5zZm9ybUZsYWciLCJMb2NhbEV1bGVyIiwiTG9jYWxRdWF0IiwiV29ybGRQb3NpdGlvbiIsIldvcmxkRXVsZXIiLCJXb3JsZFF1YXQiLCJXb3JsZFNjYWxlIiwiTG9jYWxNYXRyaXgiLCJXb3JsZE1hdHJpeCIsIldtV3AiLCJXbVdlV3EiLCJXbVdwV2VXcSIsIldtV3MiLCJXbVdwV3MiLCJXbVdwV2VXcVdzIiwiYWRkU2hhcGUiLCJzaGFwZSIsIm9sZENvbGxpZGVyIiwicmVtb3ZlU2hhcGUiLCJzcGxpY2UiLCJzZXRXb3JsZFRyYW5zZm9ybSIsImdldFdvcmxkVHJhbnNmb3JtIiwib3V0UG9zaXRpb24iLCJvdXRSb3RhdGlvbiIsIl9yYXljYXN0Iiwib25SYXljYXN0IiwiaGl0IiwiTnVtYmVyIiwiTUFYX1ZBTFVFIiwiTGl0ZUR5bmFtaWNDb2xsaWRlciIsImFkZEZvcmNlIiwiZm9yY2UiLCJhZGRUb3JxdWUiLCJ0b3JxdWUiLCJtb3ZlIiwicG9zaXRpb25PclJvdGF0aW9uIiwic2xlZXAiLCJzZXRBbmd1bGFyRGFtcGluZyIsInNldEFuZ3VsYXJWZWxvY2l0eSIsInNldENlbnRlck9mTWFzcyIsInNldENvbGxpc2lvbkRldGVjdGlvbk1vZGUiLCJzZXRDb25zdHJhaW50cyIsImZsYWdzIiwic2V0SW5lcnRpYVRlbnNvciIsInNldElzS2luZW1hdGljIiwic2V0TGluZWFyRGFtcGluZyIsInNldExpbmVhclZlbG9jaXR5Iiwic2V0TWFzcyIsInNldE1heEFuZ3VsYXJWZWxvY2l0eSIsInNldE1heERlcGVuZXRyYXRpb25WZWxvY2l0eSIsInNldFNsZWVwVGhyZXNob2xkIiwic2V0U29sdmVySXRlcmF0aW9ucyIsIndha2VVcCIsIkRpc29yZGVyZWRBcnJheSIsImNvdW50IiwiX2VsZW1lbnRzIiwiQXJyYXkiLCJhZGQiLCJlbGVtZW50IiwiZGVsZXRlIiwiZGVsZXRlQnlJbmRleCIsImdldCIsImVsZW1lbnRzIiwiZW5kIiwibGFzdEluZGV4IiwiZ2FyYmFnZUNvbGxlY3Rpb24iLCJMaXRlSGl0UmVzdWx0Iiwibm9ybWFsIiwiTGl0ZUJveENvbGxpZGVyU2hhcGUiLCJ1bmlxdWVJRCIsInNpemUiLCJfaGFsZlNpemUiLCJfYm94TWluIiwiX2JveE1heCIsIl9zZXRCb25kaW5nQm94Iiwic2V0V29ybGRTY2FsZSIsInNldFNpemUiLCJsb2NhbFJheSIsImJvdW5kaW5nQm94IiwiX3RlbXBCb3giLCJtaW4iLCJtYXgiLCJpbnRlcnNlY3RCb3giLCJjZW50ZXIiLCJoYWxmU2l6ZSIsInN1YnRyYWN0IiwiQm91bmRpbmdCb3giLCJMaXRlU3BoZXJlQ29sbGlkZXJTaGFwZSIsInJhZGl1cyIsIl9yYWRpdXMiLCJfbWF4U2NhbGUiLCJzZXRSYWRpdXMiLCJNYXRoIiwiYm91bmRpbmdTcGhlcmUiLCJfdGVtcFNwaGVyZSIsIndvcmxkUmFkaXVzIiwiaW50ZXJzZWN0U3BoZXJlIiwiQm91bmRpbmdTcGhlcmUiLCJMaXRlUGh5c2ljc01hbmFnZXIiLCJvbkNvbnRhY3RFbnRlciIsIm9uQ29udGFjdEV4aXQiLCJvbkNvbnRhY3RTdGF5Iiwib25UcmlnZ2VyRW50ZXIiLCJvblRyaWdnZXJFeGl0Iiwib25UcmlnZ2VyU3RheSIsIl9jb2xsaWRlcnMiLCJfc3BoZXJlIiwiX2JveCIsIl9jdXJyZW50RXZlbnRzIiwiX2V2ZW50TWFwIiwiX2V2ZW50UG9vbCIsIl9vbkNvbnRhY3RFbnRlciIsIl9vbkNvbnRhY3RFeGl0IiwiX29uQ29udGFjdFN0YXkiLCJfb25UcmlnZ2VyRW50ZXIiLCJfb25UcmlnZ2VyRXhpdCIsIl9vblRyaWdnZXJTdGF5Iiwic2V0R3Jhdml0eSIsImFkZENvbGxpZGVyU2hhcGUiLCJjb2xsaWRlclNoYXBlIiwicmVtb3ZlQ29sbGlkZXJTaGFwZSIsImV2ZW50UG9vbCIsImN1cnJlbnRFdmVudHMiLCJldmVudCIsImluZGV4MSIsImluZGV4MiIsImFkZENvbGxpZGVyIiwiYWN0b3IiLCJyZW1vdmVDb2xsaWRlciIsImNvbGxpZGVyIiwidXBkYXRlIiwiZGVsdGFUaW1lIiwiY29sbGlkZXJzIiwibGVuIiwiX2NvbGxpc2lvbkRldGVjdGlvbiIsIl9maXJlRXZlbnQiLCJyYXljYXN0IiwiaGl0UmVzdWx0IiwiX2hpdFJlc3VsdCIsImlzSGl0IiwiY3VySGl0IiwiX2N1cnJlbnRIaXQiLCJhZGRDaGFyYWN0ZXJDb250cm9sbGVyIiwiY2hhcmFjdGVyQ29udHJvbGxlciIsInJlbW92ZUNoYXJhY3RlckNvbnRyb2xsZXIiLCJfZ2V0VHJpZ2dlciIsInBvcCIsIlRyaWdnZXJFdmVudCIsIm15Q29sbGlkZXIiLCJteUNvbGxpZGVyU2hhcGVzIiwibXlTaGFwZSIsIl91cGRhdGVXb3JsZEJveCIsImoiLCJrIiwidW5kZWZpbmVkIiwiYWxyZWFkeUludm9rZWQiLCJfYm94Q29sbGlzaW9uIiwic3RhdGUiLCJFbnRlciIsIlN0YXkiLCJfdXBXb3JsZFNwaGVyZSIsIl9zcGhlcmVDb2xsaXNpb24iLCJFeGl0Iiwib3RoZXIiLCJib3giLCJDb2xsaXNpb25VdGlsIiwiaW50ZXJzZWN0c0JveEFuZEJveCIsInNwaGVyZSIsImludGVyc2VjdHNTcGhlcmVBbmRCb3giLCJpbnRlcnNlY3RzU3BoZXJlQW5kU3BoZXJlIiwiYm94Q29sbGlkZXIiLCJvdXQiLCJtYXQiLCJ0cmFuc2Zvcm0iLCJzcGhlcmVDb2xsaWRlciIsIlRyaWdnZXJFdmVudFN0YXRlIiwiTGl0ZVBoeXNpY3NNYXRlcmlhbCIsInN0YXRpY0ZyaWN0aW9uIiwiZHluYW1pY0ZyaWN0aW9uIiwiYm91bmNpbmVzcyIsImZyaWN0aW9uQ29tYmluZSIsImJvdW5jZUNvbWJpbmUiLCJzZXRCb3VuY2luZXNzIiwic2V0RHluYW1pY0ZyaWN0aW9uIiwic2V0U3RhdGljRnJpY3Rpb24iLCJzZXRCb3VuY2VDb21iaW5lIiwic2V0RnJpY3Rpb25Db21iaW5lIiwiTGl0ZVN0YXRpY0NvbGxpZGVyIiwiU3RhdGljSW50ZXJmYWNlSW1wbGVtZW50IiwiY29uc3RydWN0b3IiLCJMaXRlUGh5c2ljcyIsImNyZWF0ZVBoeXNpY3NNYW5hZ2VyIiwib25Db250YWN0QmVnaW4iLCJvbkNvbnRhY3RFbmQiLCJvbkNvbnRhY3RQZXJzaXN0Iiwib25UcmlnZ2VyQmVnaW4iLCJvblRyaWdnZXJFbmQiLCJvblRyaWdnZXJQZXJzaXN0IiwiY3JlYXRlU3RhdGljQ29sbGlkZXIiLCJjcmVhdGVEeW5hbWljQ29sbGlkZXIiLCJjcmVhdGVDaGFyYWN0ZXJDb250cm9sbGVyIiwiY3JlYXRlUGh5c2ljc01hdGVyaWFsIiwiY3JlYXRlQm94Q29sbGlkZXJTaGFwZSIsImNyZWF0ZVNwaGVyZUNvbGxpZGVyU2hhcGUiLCJjcmVhdGVQbGFuZUNvbGxpZGVyU2hhcGUiLCJjcmVhdGVDYXBzdWxlQ29sbGlkZXJTaGFwZSIsImhlaWdodCIsImNyZWF0ZUZpeGVkSm9pbnQiLCJjcmVhdGVIaW5nZUpvaW50IiwiY3JlYXRlU3ByaW5nSm9pbnQiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF3Q0E7QUFDTyxTQUFTLFVBQVUsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFDMUQsSUFBSSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUM7QUFDakksSUFBSSxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLE9BQU8sQ0FBQyxRQUFRLEtBQUssVUFBVSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ25JLFNBQVMsS0FBSyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RKLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFOztBQzNETyxTQUFTLGlCQUFpQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDeEMsSUFBSSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsY0FBYyxJQUFJLFNBQVMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDL0UsUUFBUSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUN4QjtBQUNBLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakIsS0FBSyxDQUFDO0FBQ047QUFDQSxJQUFJLE9BQU8saUJBQWlCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25DOztBQ05PLFNBQVMsU0FBUyxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUU7QUFDaEQsSUFBSSxJQUFJLE9BQU8sVUFBVSxLQUFLLFVBQVUsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFO0FBQ2pFLFFBQVEsTUFBTSxJQUFJLFNBQVMsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO0FBQ2xGLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDcko7QUFDQSxJQUFJLElBQUksVUFBVSxFQUFFLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM1RDs7QUNWQSxTQUFTLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDMUMsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQyxRQUFRLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFRLFVBQVUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUM7QUFDL0QsUUFBUSxVQUFVLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUN2QztBQUNBLFFBQVEsSUFBSSxPQUFPLElBQUksVUFBVSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzlEO0FBQ0EsUUFBUSxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2xFLEtBQUs7QUFDTCxDQUFDO0FBQ00sU0FBUyxhQUFhLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUU7QUFDcEUsSUFBSSxJQUFJLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3pFLElBQUksSUFBSSxXQUFXLEVBQUUsaUJBQWlCLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ2pFO0FBQ0EsSUFBSSxPQUFPLFdBQVcsQ0FBQztBQUN2Qjs7QUNoQk8sU0FBUyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUN6QyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRTtBQUNyRixRQUFRLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakQsS0FBSyxNQUFNLE9BQU8sSUFBSSxZQUFZLEtBQUssQ0FBQztBQUN4Qzs7QUNKQTs7OztBQUlDLElBQ00sU0FBU0EsZUFBQUEsQ0FBZ0JDLEtBQVksRUFBRUMsSUFBUyxFQUFXO0lBQ2hFLElBQU1DLEtBQUFBLEdBQVFGLEtBQU1HLENBQUFBLE9BQU8sQ0FBQ0YsSUFBQUEsQ0FBQUEsQ0FBQUE7QUFDNUIsSUFBQSxJQUFJQyxRQUFRLENBQUcsRUFBQTtBQUNiLFFBQUEsT0FBTyxLQUFLLENBQUE7S0FDYjtJQUNELElBQU1FLElBQUFBLEdBQU9KLEtBQU1LLENBQUFBLE1BQU0sR0FBRyxDQUFBLENBQUE7QUFDNUIsSUFBQSxJQUFJSCxVQUFVRSxJQUFNLEVBQUE7QUFDbEJKLFFBQUFBLEtBQUssQ0FBQ0UsS0FBQUEsQ0FBTSxHQUFHRixLQUFLLENBQUNJLElBQUssQ0FBQSxDQUFBO0tBQzNCO0FBQ0RKLElBQUFBLEtBQUFBLENBQU1LLE1BQU0sRUFBQSxDQUFBO0FBQ1osSUFBQSxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFFRDs7QUFFQyxJQUNNLElBQUEsY0FBTUMsNEJBQU47YUFBTUEsY0FJU0MsQ0FBQUEsTUFBQUEsRUFBQUE7QUFBQUEsUUFBQUEsSUFBQUEsTUFBQUEsS0FBQUEsS0FBQUEsQ0FBQUEsRUFBQUEsU0FBMkIsRUFBRSxDQUFBO0FBQTdCQSxRQUFBQSxJQUFBQSxDQUFBQSxNQUFBQSxHQUFBQSxNQUFBQSxDQUFBQTswQkFGcEJDLE9BQU8sSUFBSSxDQUFBO0FBR1QsUUFBQSxJQUFJLENBQUNELE1BQU0sQ0FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQSxDQUFBOztBQUxaSCxJQUFBQSxJQUFBQSxNQUFBQSxHQUFBQSxjQUFBQSxDQUFBQSxTQUFBQSxDQUFBQTtBQVFYOztBQUVDLE1BQ0RJLE1BQUFBLENBQUFBLE9BR0MsR0FIREEsU0FBQUEsT0FBZ0IsR0FBQTtBQUNkWCxRQUFBQSxlQUFBQSxDQUFnQixJQUFJLENBQUNRLE1BQU0sRUFBRSxJQUFJLENBQUEsQ0FBQTtRQUNqQyxJQUFJLENBQUNBLE1BQU0sR0FBRyxJQUFJLENBQUE7QUFDcEIsS0FBQSxDQUFBO0FBZFdELElBQUFBLE9BQUFBLGNBQUFBLENBQUFBO0FBZVosQ0FBQSxFQUFBOztBQ2xDRDs7SUFHTyxJQUFNSyxxQkFBTixpQkFBQSxXQUFBO0FBQU1BLElBQUFBLFNBQUFBLHFCQUFBQSxHQUFBQTtBQUNIQyxRQUFBQSxJQUFBQSxDQUFBQSxZQUFBQSxHQUFpQyxFQUFFLENBQUE7O0FBRGhDRCxJQUFBQSxJQUFBQSxNQUFBQSxHQUFBQSxxQkFBQUEsQ0FBQUEsU0FBQUEsQ0FBQUE7SUFHWEUsTUFBQUEsQ0FBQUEsUUFFQyxHQUZEQSxTQUFBQSxRQUEyQixHQUFBO0FBQ3pCLFFBQUEsT0FBTyxJQUFJUCxjQUFBQSxDQUFlLElBQUksQ0FBQ00sWUFBWSxDQUFBLENBQUE7QUFDN0MsS0FBQSxDQUFBO0lBRUFFLE1BQUFBLENBQUFBLFVBS0MsR0FMREEsU0FBQUEsVUFBbUIsR0FBQTtRQUNqQixJQUFNQyxXQUFBQSxHQUFjLElBQUksQ0FBQ0gsWUFBWSxDQUFBO1FBQ3JDLElBQUssSUFBSUksSUFBSUQsV0FBWVYsQ0FBQUEsTUFBTSxHQUFHLENBQUdXLEVBQUFBLENBQUFBLElBQUssR0FBR0EsQ0FBSyxFQUFBLENBQUE7QUFDaERELFlBQUFBLFdBQVcsQ0FBQ0MsQ0FBQUEsQ0FBRSxDQUFDUixJQUFJLEdBQUcsSUFBSSxDQUFBO0FBQzVCLFNBQUE7QUFDRixLQUFBLENBQUE7QUFaV0csSUFBQUEsT0FBQUEscUJBQUFBLENBQUFBO0FBYVosQ0FBQSxFQUFBOztBQ1hEOztJQUdPLElBQWVNLGlCQUFmLGlCQUFBLFdBQUE7QUFBZUEsSUFBQUEsU0FBQUEsaUJBQUFBLEdBQUFBO3lCQVFOLElBQUEsQ0FDZEMsYUFBNEIsSUFBSUMsYUFBQUEsRUFBQUEsQ0FBQUE7eUJBQ2xCLElBQUEsQ0FDZEMsa0JBQTBCLElBQUlDLGFBQUFBLEVBQUFBLENBQUFBO0FBSzVCLFFBQUEsSUFBSSxDQUFDSCxVQUFVLENBQUNJLEtBQUssR0FBRyxJQUFJLENBQUE7QUFDNUIsUUFBQSxJQUFJLENBQUNDLG9CQUFvQixHQUFHLElBQUksQ0FBQ0wsVUFBVSxDQUFDTSx1QkFBdUIsRUFBQSxDQUFBOztBQWpCakRQLElBQUFBLElBQUFBLE1BQUFBLEdBQUFBLGlCQUFBQSxDQUFBQSxTQUFBQSxDQUFBQTtBQW9CcEI7O0FBRUMsTUFDRFEsT0FBQUEsV0FFQyxHQUZEQSxTQUFBQSxXQUFBQSxDQUFZQyxRQUFpQixFQUFRO0FBQ25DQyxRQUFBQSxPQUFBQSxDQUFRQyxHQUFHLENBQUMsb0VBQUEsQ0FBQSxDQUFBO0FBQ2QsS0FBQSxDQUFBO0FBRUE7O0FBRUMsTUFDREMsT0FBQUEsV0FFQyxHQUZEQSxTQUFBQSxXQUFBQSxDQUFZQyxRQUFpQixFQUFRO0FBQ25DLFFBQUEsSUFBSSxDQUFDWixVQUFVLENBQUNXLFdBQVcsQ0FBQ0MsUUFBQUEsQ0FBU0MsQ0FBQyxFQUFFRCxRQUFTRSxDQUFBQSxDQUFDLEVBQUVGLFFBQUFBLENBQVNHLENBQUMsQ0FBQSxDQUFBO0FBQ2hFLEtBQUEsQ0FBQTtBQU9BOztBQUVDLE1BQ0RDLE9BQUFBLGdCQUVDLEdBRkRBLFNBQUFBLGdCQUFBQSxDQUFpQkMsTUFBYyxFQUFRO0FBQ3JDUixRQUFBQSxPQUFBQSxDQUFRQyxHQUFHLENBQUMseUVBQUEsQ0FBQSxDQUFBO0FBQ2QsS0FBQSxDQUFBO0FBRUE7O0FBRUMsTUFDRFEsT0FBQUEsV0FFQyxHQUZEQSxTQUFBQSxXQUFBQSxDQUFZQyxRQUEwQixFQUFRO0FBQzVDVixRQUFBQSxPQUFBQSxDQUFRQyxHQUFHLENBQUMsb0VBQUEsQ0FBQSxDQUFBO0FBQ2QsS0FBQSxDQUFBO0FBRUE7O0FBRUMsTUFDRFUsT0FBQUEsV0FFQyxHQUZEQSxTQUFBQSxXQUFBQSxDQUFZQyxFQUFVLEVBQVE7UUFDNUIsSUFBSSxDQUFDQyxHQUFHLEdBQUdELEVBQUFBLENBQUFBO0FBQ2IsS0FBQSxDQUFBO0FBRUE7O0FBRUMsTUFDREUsT0FBQUEsWUFFQyxHQUZEQSxTQUFBQSxZQUFBQSxDQUFhQyxLQUFjLEVBQVE7QUFDakNmLFFBQUFBLE9BQUFBLENBQVFDLEdBQUcsQ0FBQyxxRUFBQSxDQUFBLENBQUE7QUFDZCxLQUFBLENBQUE7QUFFQTs7QUFFQyxNQUNEbEIsTUFBQUEsQ0FBQUEsT0FBa0IsR0FBbEJBLFNBQUFBLFVBQWdCLEVBQUMsQ0FBQTtBQU9qQixJQUFBLE1BQUEsQ0FBVWlDLGdCQW9CVCxHQXBCRCxTQUFVQSxnQkFBQUEsQ0FDUkMsR0FBUSxFQUNSQyxXQUFtQixFQUNuQkMsTUFBcUIsRUFDckJDLE1BQWUsRUFDZkMsVUFBMkIsRUFDckI7UUFETkEsSUFBQUEsVUFBQUEsS0FBQUEsS0FBQUEsQ0FBQUEsRUFBQUEsYUFBc0IsS0FBSyxDQUFBO1FBRTNCLElBQU1DLFFBQUFBLEdBQVdoQyxpQkFwRkNBLENBb0ZpQmlDLFVBQVUsQ0FBQTtRQUM3Q04sR0FBSU8sQ0FBQUEsUUFBUSxDQUFDTixXQUFhSSxFQUFBQSxRQUFBQSxDQUFBQSxDQUFBQTtBQUMxQixRQUFBLElBQUksQ0FBQ0QsVUFBWSxFQUFBO1lBQ2ZJLGNBQVFDLENBQUFBLG1CQUFtQixDQUFDSixRQUFVLEVBQUEsSUFBSSxDQUFDL0IsVUFBVSxDQUFDb0MsV0FBVyxFQUFFTCxRQUFBQSxDQUFBQSxDQUFBQTtTQUNwRTtBQUVELFFBQUEsSUFBTU0sUUFBV0gsR0FBQUEsY0FBQUEsQ0FBUUcsUUFBUSxDQUFDUixNQUFRRSxFQUFBQSxRQUFBQSxDQUFBQSxDQUFBQTtRQUUxQyxJQUFJTSxRQUFBQSxHQUFXVCxNQUFPUyxDQUFBQSxRQUFRLEVBQUU7WUFDOUJULE1BQU9VLENBQUFBLEtBQUssQ0FBQ0MsUUFBUSxDQUFDUixRQUFBQSxDQUFBQSxDQUFBQTtBQUN0QkgsWUFBQUEsTUFBQUEsQ0FBT1MsUUFBUSxHQUFHQSxRQUFBQSxDQUFBQTtBQUNsQlQsWUFBQUEsTUFBQUEsQ0FBT1ksT0FBTyxHQUFHLElBQUksQ0FBQ2xCLEdBQUcsQ0FBQTtTQUMxQjtBQUNILEtBQUEsQ0FBQTtBQUVBLElBQUEsTUFBQSxDQUFVbUIsWUFTVCxHQVRELFNBQVVBLFlBQUFBLENBQWFmLEdBQVEsRUFBTztRQUNwQyxJQUFNZ0IsWUFBQUEsR0FBZSxJQUFJLENBQUNDLGtCQUFrQixFQUFBLENBQUE7UUFDNUMsSUFBTUMsTUFBQUEsR0FBUzdDLGlCQXJHR0EsQ0FxR2U4QyxJQUFJLENBQUE7QUFFckNYLFFBQUFBLGNBQUFBLENBQVFDLG1CQUFtQixDQUFDVCxHQUFBQSxDQUFJRyxNQUFNLEVBQUVhLFlBQUFBLEVBQWNFLE9BQU9mLE1BQU0sQ0FBQSxDQUFBO0FBQ25FSyxRQUFBQSxjQUFBQSxDQUFRWSxlQUFlLENBQUNwQixHQUFBQSxDQUFJcUIsU0FBUyxFQUFFTCxZQUFBQSxFQUFjRSxPQUFPRyxTQUFTLENBQUEsQ0FBQTtRQUNyRUgsTUFBT0csQ0FBQUEsU0FBUyxDQUFDQyxTQUFTLEVBQUEsQ0FBQTtRQUUxQixPQUFPSixNQUFBQSxDQUFBQTtBQUNULEtBQUEsQ0FBQTtJQUVBLE1BQVFELENBQUFBLGtCQU1QLEdBTkQsU0FBUUEsa0JBQTZCLEdBQUE7QUFDbkMsUUFBQSxJQUFJLElBQUksQ0FBQ3RDLG9CQUFvQixDQUFDZixJQUFJLEVBQUU7WUFDbENhLGFBQU84QyxDQUFBQSxNQUFNLENBQUMsSUFBSSxDQUFDakQsVUFBVSxDQUFDb0MsV0FBVyxFQUFFLElBQUksQ0FBQ2xDLGVBQWUsQ0FBQSxDQUFBO0FBQy9ELFlBQUEsSUFBSSxDQUFDRyxvQkFBb0IsQ0FBQ2YsSUFBSSxHQUFHLEtBQUssQ0FBQTtTQUN2QztRQUNELE9BQU8sSUFBSSxDQUFDWSxlQUFlLENBQUE7QUFDN0IsS0FBQSxDQUFBO0FBcEhvQkgsSUFBQUEsT0FBQUEsaUJBQUFBLENBQUFBO0FBcUhyQixDQUFBLEVBQUEsQ0FBQTs7QUFySHFCQSxJQUFBQSxpQkFBQUEsQ0FDTDhDLE9BQU8sSUFBSUssVUFBQUEsRUFBQUEsQ0FBQUE7OztBQURObkQsSUFBQUEsaUJBQUFBLENBRUxpQyxhQUFhLElBQUlFLGNBQUFBLEVBQUFBLENBQUFBOzs7QUNObEM7O0FBRUMsSUFDTSxJQUFBLGFBQU1qQyxpQkEwVFYsV0ExVEk7QUFBTUEsSUFBQUEsU0FBQUEsYUFBQUEsR0FBQUE7QUFJSGtELFFBQUFBLElBQUFBLENBQUFBLFNBQUFBLEdBQXFCLElBQUlqQixjQUFBQSxFQUFBQSxDQUFBQTtBQUN6QmtCLFFBQUFBLElBQUFBLENBQUFBLFNBQUFBLEdBQXFCLElBQUlsQixjQUFBQSxFQUFBQSxDQUFBQTtBQUN6Qm1CLFFBQUFBLElBQUFBLENBQUFBLG1CQUFBQSxHQUFrQyxJQUFJQyxpQkFBQUEsRUFBQUEsQ0FBQUE7YUFDdENDLE1BQWtCLEdBQUEsSUFBSXJCLGNBQVEsQ0FBQSxDQUFBLEVBQUcsQ0FBRyxFQUFBLENBQUEsQ0FBQSxDQUFBO0FBQ3BDc0IsUUFBQUEsSUFBQUEsQ0FBQUEsd0JBQUFBLEdBQXVDLElBQUlGLGlCQUFBQSxFQUFBQSxDQUFBQTtBQUMzQ0csUUFBQUEsSUFBQUEsQ0FBQUEsWUFBQUEsR0FBdUIsSUFBSXRELGFBQUFBLEVBQUFBLENBQUFBO0FBQzNCdUQsUUFBQUEsSUFBQUEsQ0FBQUEsWUFBQUEsR0FBdUIsSUFBSXZELGFBQUFBLEVBQUFBLENBQUFBO0FBQzNCd0QsUUFBQUEsSUFBQUEsQ0FBQUEsa0JBQUFBLEdBQTRDLElBQUlsRSxxQkFBQUEsRUFBQUEsQ0FBQUE7QUFDaERtRSxRQUFBQSxJQUFBQSxDQUFBQSxjQUFBQSxHQUEwQixJQUFJLENBQUE7QUFDOUJDLFFBQUFBLElBQUFBLENBQUFBLHFCQUFBQSxHQUF1QyxJQUFJLENBQUE7YUFDM0NDLFVBb1VLLEdBQUEsSUFBQSxDQUFBOztBQWxWRjdELElBQUFBLElBQUFBLE1BQUFBLEdBQUFBLGFBQUFBLENBQUFBLFNBQUFBLENBQUFBO0FBc0tYOzs7OztNQU1BVSxNQUFBQSxDQUFBQSxXQUdDLEdBSERBLFNBQUFBLFdBQUFBLENBQVlFLENBQVMsRUFBRUMsQ0FBUyxFQUFFQyxDQUFTLEVBQVE7QUFDakQsUUFBQSxJQUFJLENBQUNvQyxTQUFTLENBQUNZLEdBQUcsQ0FBQ2xELEdBQUdDLENBQUdDLEVBQUFBLENBQUFBLENBQUFBLENBQUFBO0FBQ3pCLFFBQUEsSUFBSSxDQUFDSCxRQUFRLEdBQUcsSUFBSSxDQUFDdUMsU0FBUyxDQUFBO0FBQ2hDLEtBQUEsQ0FBQTtBQUVBOzs7Ozs7QUFNQyxNQUNEYSxNQUFBQSxDQUFBQSxxQkFHQyxHQUhEQSxTQUFBQSxxQkFBc0JuRCxDQUFBQSxDQUFTLEVBQUVDLENBQVMsRUFBRUMsQ0FBUyxFQUFFa0QsQ0FBUyxFQUFRO0FBQ3RFLFFBQUEsSUFBSSxDQUFDWixtQkFBbUIsQ0FBQ1UsR0FBRyxDQUFDbEQsQ0FBQUEsRUFBR0MsR0FBR0MsQ0FBR2tELEVBQUFBLENBQUFBLENBQUFBLENBQUFBO0FBQ3RDLFFBQUEsSUFBSSxDQUFDQyxrQkFBa0IsR0FBRyxJQUFJLENBQUNiLG1CQUFtQixDQUFBO0FBQ3BELEtBQUEsQ0FBQTtBQUVBOzs7OztNQU1BYyxNQUFBQSxDQUFBQSxRQUdDLEdBSERBLFNBQUFBLFFBQUFBLENBQVN0RCxDQUFTLEVBQUVDLENBQVMsRUFBRUMsQ0FBUyxFQUFRO0FBQzlDLFFBQUEsSUFBSSxDQUFDd0MsTUFBTSxDQUFDUSxHQUFHLENBQUNsRCxHQUFHQyxDQUFHQyxFQUFBQSxDQUFBQSxDQUFBQSxDQUFBQTtBQUN0QixRQUFBLElBQUksQ0FBQ3FELEtBQUssR0FBRyxJQUFJLENBQUNiLE1BQU0sQ0FBQTtBQUMxQixLQUFBLENBQUE7QUFFQTs7O0FBR0MsTUFDRGpELE1BQUFBLENBQUFBLHVCQUVDLEdBRkRBLFNBQUFBLHVCQUEwQyxHQUFBO0FBQ3hDLFFBQUEsT0FBTyxJQUFJLENBQUNxRCxrQkFBa0IsQ0FBQ2hFLFFBQVEsRUFBQSxDQUFBO0FBQ3pDLEtBQUEsQ0FBQTtBQUVBOzs7O0FBSUMsTUFDRCxNQUFRMEUsQ0FBQUEsd0JBVVAsR0FWRCxTQUFRQSx3QkFBaUMsR0FBQTtBQUN2QyxRQUFBLElBQUksQ0FBQyxJQUFJLENBQUNDLG9CQUFvQixDQWtIekIsSUFsSCtDLENBQUEsRUFBQTtZQUNsRCxJQUFJLENBQUNDLHNCQUFzQixDQWlIeEIsSUFBQSxDQUFBLENBQUE7QUFoSEgsWUFBQSxJQUFJLFdBQUEsQ0FBQSxJQUFJLENBQUNDLE1BQU0sRUFBWUMsWUFBYyxDQUFBLEVBQUE7QUFDdkMsZ0JBQUEsSUFBTUMsTUFBUyxHQUFBLElBQUksQ0FBQ0YsTUFBTSxDQUFDRyxPQUFPLENBQUE7Z0JBQ2xDLElBQUssSUFBSTdFLElBQVksQ0FBRzhFLEVBQUFBLENBQUFBLEdBQVlGLE9BQU92RixNQUFNLEVBQUVXLENBQUk4RSxHQUFBQSxDQUFBQSxFQUFHOUUsQ0FBSyxFQUFBLENBQUE7QUFDN0Q0RSxvQkFBQUEsTUFBTSxDQUFDNUUsQ0FBQUEsQ0FBRSxDQUFDRSxVQUFVLENBQUNxRSx3QkFBd0IsRUFBQSxDQUFBO0FBQy9DLGlCQUFBO2FBQ0Q7U0FDRjtBQUNILEtBQUEsQ0FBQTtBQUVBOzs7Ozs7QUFNQyxNQUNELE1BQVFRLENBQUFBLHdCQVVQLEdBVkQsU0FBUUEsd0JBQTJCLEdBQUE7QUFDakMsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDUCxvQkFBb0IsQ0FpR3ZCLElBakcrQyxDQUFBLEVBQUE7WUFDcEQsSUFBSSxDQUFDQyxzQkFBc0IsQ0FnR3RCLElBQUEsQ0FBQSxDQUFBO0FBL0ZMLFlBQUEsSUFBSSxXQUFBLENBQUEsSUFBSSxDQUFDQyxNQUFNLEVBQVlDLFlBQWMsQ0FBQSxFQUFBO0FBQ3ZDLGdCQUFBLElBQU1DLE1BQVMsR0FBQSxJQUFJLENBQUNGLE1BQU0sQ0FBQ0csT0FBTyxDQUFBO2dCQUNsQyxJQUFLLElBQUk3RSxJQUFZLENBQUc4RSxFQUFBQSxDQUFBQSxHQUFZRixPQUFPdkYsTUFBTSxFQUFFVyxDQUFJOEUsR0FBQUEsQ0FBQUEsRUFBRzlFLENBQUssRUFBQSxDQUFBO0FBQzdENEUsb0JBQUFBLE1BQU0sQ0FBQzVFLENBQUFBLENBQUUsQ0FBQ0UsVUFBVSxDQUFDNkUsd0JBQXdCLEVBQUEsQ0FBQTtBQUMvQyxpQkFBQTthQUNEO1NBQ0Y7QUFDSCxLQUFBLENBQUE7QUFFQTs7Ozs7QUFLQyxNQUNELE1BQVFDLENBQUFBLHFCQVVQLEdBVkQsU0FBUUEscUJBQXdCLEdBQUE7QUFDOUIsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDUixvQkFBb0IsQ0FtRnpCLElBbkYrQyxDQUFBLEVBQUE7WUFDbEQsSUFBSSxDQUFDQyxzQkFBc0IsQ0FrRnhCLElBQUEsQ0FBQSxDQUFBO0FBakZILFlBQUEsSUFBSSxXQUFBLENBQUEsSUFBSSxDQUFDQyxNQUFNLEVBQVlDLFlBQWMsQ0FBQSxFQUFBO0FBQ3ZDLGdCQUFBLElBQU1DLE1BQVMsR0FBQSxJQUFJLENBQUNGLE1BQU0sQ0FBQ0csT0FBTyxDQUFBO2dCQUNsQyxJQUFLLElBQUk3RSxJQUFZLENBQUc4RSxFQUFBQSxDQUFBQSxHQUFZRixPQUFPdkYsTUFBTSxFQUFFVyxDQUFJOEUsR0FBQUEsQ0FBQUEsRUFBRzlFLENBQUssRUFBQSxDQUFBO0FBQzdENEUsb0JBQUFBLE1BQU0sQ0FBQzVFLENBQUFBLENBQUUsQ0FBQ0UsVUFBVSxDQUFDOEUscUJBQXFCLEVBQUEsQ0FBQTtBQUM1QyxpQkFBQTthQUNEO1NBQ0Y7QUFDSCxLQUFBLENBQUE7QUFFQTs7QUFFQyxNQUNELE1BQVFDLENBQUFBLG1CQVVQLEdBVkQsU0FBUUEsbUJBQTRCLEdBQUE7QUFDbEMsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDVCxvQkFBb0IsQ0F3RW5CLElBeEUrQyxDQUFBLEVBQUE7WUFDeEQsSUFBSSxDQUFDQyxzQkFBc0IsQ0F1RWxCLElBQUEsQ0FBQSxDQUFBO0FBdEVULFlBQUEsSUFBSSxXQUFBLENBQUEsSUFBSSxDQUFDQyxNQUFNLEVBQVlDLFlBQWMsQ0FBQSxFQUFBO0FBQ3ZDLGdCQUFBLElBQU1DLE1BQVMsR0FBQSxJQUFJLENBQUNGLE1BQU0sQ0FBQ0csT0FBTyxDQUFBO2dCQUNsQyxJQUFLLElBQUk3RSxJQUFZLENBQUc4RSxFQUFBQSxDQUFBQSxHQUFZRixPQUFPdkYsTUFBTSxFQUFFVyxDQUFJOEUsR0FBQUEsQ0FBQUEsRUFBRzlFLENBQUssRUFBQSxDQUFBO0FBQzdENEUsb0JBQUFBLE1BQU0sQ0FBQzVFLENBQUFBLENBQUUsQ0FBQ0UsVUFBVSxDQUFDK0UsbUJBQW1CLEVBQUEsQ0FBQTtBQUMxQyxpQkFBQTthQUNEO1NBQ0Y7QUFDSCxLQUFBLENBQUE7SUFFQSxNQUFRQyxDQUFBQSxtQkFhUCxHQWJELFNBQVFBLG1CQUE0QyxHQUFBO0FBQ2xELFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQ3BCLGNBQWMsRUFBRTtZQUN4QixPQUFPLElBQUksQ0FBQ0MscUJBQXFCLENBQUE7U0FDbEM7QUFDRCxRQUFBLElBQUlvQixjQUE2QixJQUFJLENBQUE7QUFDckMsUUFBQSxJQUFJLFdBQUEsQ0FBQSxJQUFJLENBQUNULE1BQU0sRUFBWXpFLGlCQUFtQixDQUFBLEVBQUE7QUFDNUMsWUFBQSxJQUFJbUYsTUFBUyxHQUFBLElBQUksQ0FBQ1YsTUFBTSxDQUFDVyxTQUFTLENBQUE7QUFDbENGLFlBQUFBLFdBQUFBLEdBQWNDLE9BQU9sRixVQUFVLENBQUE7U0FDaEM7UUFFRCxJQUFJLENBQUM2RCxxQkFBcUIsR0FBR29CLFdBQUFBLENBQUFBO1FBQzdCLElBQUksQ0FBQ3JCLGNBQWMsR0FBRyxLQUFLLENBQUE7UUFDM0IsT0FBT3FCLFdBQUFBLENBQUFBO0FBQ1QsS0FBQSxDQUFBO0FBRUEsSUFBQSxNQUFBLENBQVFYLG9CQUVQLEdBRkQsU0FBUUEsb0JBQUFBLENBQXFCYyxnQkFBd0IsRUFBVztBQUM5RCxRQUFBLE9BQU8sQ0FBQyxJQUFJLENBQUN0QixVQUFVLEdBQUdzQixnQkFBZSxNQUFPQSxnQkFBQUEsQ0FBQUE7QUFDbEQsS0FBQSxDQUFBO0FBRUEsSUFBQSxNQUFBLENBQVFDLG1CQUVQLEdBRkQsU0FBUUEsbUJBQUFBLENBQW9CQyxJQUFZLEVBQVc7QUFDakQsUUFBQSxPQUFPLENBQUMsSUFBSSxDQUFDeEIsVUFBVSxHQUFHd0IsSUFBRyxLQUFNLENBQUEsQ0FBQTtBQUNyQyxLQUFBLENBQUE7QUFFQSxJQUFBLE1BQUEsQ0FBUUMsaUJBRVAsR0FGRCxTQUFRQSxpQkFBQUEsQ0FBa0JELElBQVksRUFBRTtRQUN0QyxJQUFJLENBQUN4QixVQUFVLElBQUl3QixJQUFBQSxDQUFBQTtBQUNyQixLQUFBLENBQUE7QUFFQSxJQUFBLE1BQUEsQ0FBUUUsa0JBRVAsR0FGRCxTQUFRQSxrQkFBQUEsQ0FBbUJGLElBQVksRUFBRTtRQUN2QyxJQUFJLENBQUN4QixVQUFVLElBQUksQ0FBQ3dCLElBQUFBLENBQUFBO0FBQ3RCLEtBQUEsQ0FBQTtBQUVBLElBQUEsTUFBQSxDQUFRZixzQkFHUCxHQUhELFNBQVFBLHNCQUFBQSxDQUF1QmUsSUFBWSxFQUFRO1FBQ2pELElBQUksQ0FBQ3hCLFVBQVUsSUFBSXdCLElBQUFBLENBQUFBO1FBQ25CLElBQUksQ0FBQzNCLGtCQUFrQixDQUFDL0QsVUFBVSxFQUFBLENBQUE7QUFDcEMsS0FBQSxDQUFBO0FBdlRXSyxJQUFBQSxhQUFBQSxDQUFBQSxhQUFBQSxFQUFBQTs7WUFrQlBHLEdBQUFBLEVBQUFBLE9BQUFBO0FBQUosWUFBQSxHQUFBLEVBQUEsU0FBQSxHQUFBLENBQVVvQixLQUF1QyxFQUFFO2dCQUNqRCxJQUFJLENBQUNnRCxNQUFNLEdBQUdoRCxLQUFBQSxDQUFBQTtBQUNoQixhQUFBOzs7WUFNSVosR0FBQUEsRUFBQUEsVUFBQUE7Ozs7QUFESCxNQUNELFNBQXdCLEdBQUEsR0FBQTtnQkFDdEIsT0FBTyxJQUFJLENBQUN1QyxTQUFTLENBQUE7QUFDdkIsYUFBQTtBQUVBLFlBQUEsR0FBQSxFQUFBLFNBQUEsR0FBQSxDQUFhM0IsS0FBYyxFQUFFO0FBQzNCLGdCQUFBLElBQUksSUFBSSxDQUFDMkIsU0FBUyxLQUFLM0IsS0FBTyxFQUFBO0FBQzVCLG9CQUFBLElBQUksQ0FBQzJCLFNBQVMsQ0FBQ1osUUFBUSxDQUFDZixLQUFBQSxDQUFBQSxDQUFBQTtpQkFDekI7Z0JBQ0QsSUFBSSxDQUFDK0QsaUJBQWlCLENBa1NWLElBQUEsQ0FBQSxDQUFBO0FBalNaLGdCQUFBLElBQUksQ0FBQ2xCLHdCQUF3QixFQUFBLENBQUE7QUFDL0IsYUFBQTs7O1lBTUlILEdBQUFBLEVBQUFBLG9CQUFBQTs7OztBQURILE1BQ0QsU0FBcUMsR0FBQSxHQUFBO0FBQ25DLGdCQUFBLElBQUksSUFBSSxDQUFDbUIsbUJBQW1CLENBb1JsQixHQXBSNkMsQ0FBQSxFQUFBO0FBQ3JEL0Isb0JBQUFBLGlCQUFBQSxDQUFXbUMsYUFBYSxDQUN0QkMsZUFBU0MsQ0FBQUEsY0FBYyxDQUFDLElBQUksQ0FBQ3ZDLFNBQVMsQ0FBQ3ZDLENBQUMsQ0FDeEM2RSxFQUFBQSxlQUFBQSxDQUFTQyxjQUFjLENBQUMsSUFBSSxDQUFDdkMsU0FBUyxDQUFDdEMsQ0FBQyxDQUN4QzRFLEVBQUFBLGVBQUFBLENBQVNDLGNBQWMsQ0FBQyxJQUFJLENBQUN2QyxTQUFTLENBQUNyQyxDQUFDLENBQ3hDLEVBQUEsSUFBSSxDQUFDc0MsbUJBQW1CLENBQUEsQ0FBQTtvQkFFMUIsSUFBSSxDQUFDbUMsa0JBQWtCLENBNlFmLEdBQUEsQ0FBQSxDQUFBO2lCQTVRVDtnQkFDRCxPQUFPLElBQUksQ0FBQ25DLG1CQUFtQixDQUFBO0FBQ2pDLGFBQUE7QUFFQSxZQUFBLEdBQUEsRUFBQSxTQUFBLEdBQUEsQ0FBdUI3QixLQUFpQixFQUFFO0FBQ3hDLGdCQUFBLElBQUksSUFBSSxDQUFDNkIsbUJBQW1CLEtBQUs3QixLQUFPLEVBQUE7QUFDdEMsb0JBQUEsSUFBSSxDQUFDNkIsbUJBQW1CLENBQUNkLFFBQVEsQ0FBQ2YsS0FBQUEsQ0FBQUEsQ0FBQUE7aUJBQ25DO0FBQ0QsZ0JBQUEsSUFBSSxDQUFDK0QsaUJBQWlCLENBeVFWLElBTkQsR0FBQSxHQUFBLENBQUEsQ0FBQTtnQkFsUVgsSUFBSSxDQUFDQyxrQkFBa0IsQ0FtUWIsR0FBQSxDQUFBLENBQUE7QUFsUVYsZ0JBQUEsSUFBSSxDQUFDWCx3QkFBd0IsRUFBQSxDQUFBO0FBQy9CLGFBQUE7OztZQU1JZSxHQUFBQSxFQUFBQSx5QkFBQUE7Ozs7QUFESCxNQUNELFNBQTBDLEdBQUEsR0FBQTtBQUN4QyxnQkFBQSxJQUFJLElBQUksQ0FBQ1AsbUJBQW1CLENBNlBsQixJQTdQNkMsQ0FBQSxFQUFBO29CQUNyRCxJQUFNSCxNQUFBQSxHQUFTLElBQUksQ0FBQ0YsbUJBQW1CLEVBQUEsQ0FBQTtvQkFDdkMsSUFBSUUsTUFBQUEsSUFBVSxJQUFJLEVBQUU7d0JBQ2xCNUIsaUJBQVd1QyxDQUFBQSxRQUFRLENBQUNYLE1BQUFBLENBQU9VLHVCQUF1QixFQUFFLElBQUksQ0FBQzFCLGtCQUFrQixFQUFFLElBQUksQ0FBQ1Ysd0JBQXdCLENBQUEsQ0FBQTtxQkFDckcsTUFBQTtBQUNMLHdCQUFBLElBQUksQ0FBQ0Esd0JBQXdCLENBQUNqQixRQUFRLENBQUMsSUFBSSxDQUFDMkIsa0JBQWtCLENBQUEsQ0FBQTtxQkFDL0Q7b0JBQ0QsSUFBSSxDQUFDc0Isa0JBQWtCLENBc1BmLElBQUEsQ0FBQSxDQUFBO2lCQXJQVDtnQkFDRCxPQUFPLElBQUksQ0FBQ2hDLHdCQUF3QixDQUFBO0FBQ3RDLGFBQUE7QUFFQSxZQUFBLEdBQUEsRUFBQSxTQUFBLEdBQUEsQ0FBNEJoQyxLQUFpQixFQUFFO0FBQzdDLGdCQUFBLElBQUksSUFBSSxDQUFDZ0Msd0JBQXdCLEtBQUtoQyxLQUFPLEVBQUE7QUFDM0Msb0JBQUEsSUFBSSxDQUFDZ0Msd0JBQXdCLENBQUNqQixRQUFRLENBQUNmLEtBQUFBLENBQUFBLENBQUFBO2lCQUN4QztnQkFDRCxJQUFNMEQsTUFBQUEsR0FBUyxJQUFJLENBQUNGLG1CQUFtQixFQUFBLENBQUE7QUFDdkMsZ0JBQUEsSUFBSUUsTUFBUSxFQUFBO0FBQ1Y1QixvQkFBQUEsaUJBQUFBLENBQVdMLE1BQU0sQ0FBQ2lDLE1BQUFBLENBQU9VLHVCQUF1QixFQXZGekMzRixjQXVGeUQ2RixVQUFVLENBQUEsQ0FBQTtvQkFDMUV4QyxpQkFBV3VDLENBQUFBLFFBQVEsQ0FBQ3JFLEtBQU92QixFQXhGcEJBLGNBd0ZrQzZGLFVBQVUsRUFBRSxJQUFJLENBQUN6QyxtQkFBbUIsQ0FBQSxDQUFBO2lCQUN4RSxNQUFBO0FBQ0wsb0JBQUEsSUFBSSxDQUFDQSxtQkFBbUIsQ0FBQ2QsUUFBUSxDQUFDZixLQUFBQSxDQUFBQSxDQUFBQTtpQkFDbkM7QUFDRCxnQkFBQSxJQUFJLENBQUMwQyxrQkFBa0IsR0FBRyxJQUFJLENBQUNiLG1CQUFtQixDQUFBO2dCQUNsRCxJQUFJLENBQUNtQyxrQkFBa0IsQ0FxT2IsSUFBQSxDQUFBLENBQUE7QUFwT1osYUFBQTs7O1lBTUlwQixHQUFBQSxFQUFBQSxPQUFBQTs7OztBQURILE1BQ0QsU0FBcUIsR0FBQSxHQUFBO2dCQUNuQixPQUFPLElBQUksQ0FBQ2IsTUFBTSxDQUFBO0FBQ3BCLGFBQUE7QUFFQSxZQUFBLEdBQUEsRUFBQSxTQUFBLEdBQUEsQ0FBVS9CLEtBQWMsRUFBRTtBQUN4QixnQkFBQSxJQUFJLElBQUksQ0FBQytCLE1BQU0sS0FBSy9CLEtBQU8sRUFBQTtBQUN6QixvQkFBQSxJQUFJLENBQUMrQixNQUFNLENBQUNoQixRQUFRLENBQUNmLEtBQUFBLENBQUFBLENBQUFBO2lCQUN0QjtnQkFDRCxJQUFJLENBQUMrRCxpQkFBaUIsQ0F3TlYsSUFBQSxDQUFBLENBQUE7QUF2TlosZ0JBQUEsSUFBSSxDQUFDVCxxQkFBcUIsRUFBQSxDQUFBO0FBQzVCLGFBQUE7OztZQU1JaUIsR0FBQUEsRUFBQUEsYUFBQUE7Ozs7QUFESCxNQUNELFNBQTBCLEdBQUEsR0FBQTtBQUN4QixnQkFBQSxJQUFJLElBQUksQ0FBQ1YsbUJBQW1CLENBK01oQixJQS9NNkMsQ0FBQSxFQUFBO0FBQ3ZEbEYsb0JBQUFBLGFBQUFBLENBQU82RixvQkFBb0IsQ0FBQyxJQUFJLENBQUN6QyxNQUFNLEVBQUUsSUFBSSxDQUFDVyxrQkFBa0IsRUFBRSxJQUFJLENBQUNmLFNBQVMsRUFBRSxJQUFJLENBQUNNLFlBQVksQ0FBQSxDQUFBO29CQUNuRyxJQUFJLENBQUMrQixrQkFBa0IsQ0E2TWIsSUFBQSxDQUFBLENBQUE7aUJBNU1YO2dCQUNELE9BQU8sSUFBSSxDQUFDL0IsWUFBWSxDQUFBO0FBQzFCLGFBQUE7QUFFQSxZQUFBLEdBQUEsRUFBQSxTQUFBLEdBQUEsQ0FBZ0JqQyxLQUFhLEVBQUU7QUFDN0IsZ0JBQUEsSUFBSSxJQUFJLENBQUNpQyxZQUFZLEtBQUtqQyxLQUFPLEVBQUE7QUFDL0Isb0JBQUEsSUFBSSxDQUFDaUMsWUFBWSxDQUFDbEIsUUFBUSxDQUFDZixLQUFBQSxDQUFBQSxDQUFBQTtpQkFDNUI7QUFDRCxnQkFBQSxJQUFJLENBQUNpQyxZQUFZLENBQUN3QyxTQUFTLENBQUMsSUFBSSxDQUFDOUMsU0FBUyxFQUFFLElBQUksQ0FBQ0UsbUJBQW1CLEVBQUUsSUFBSSxDQUFDRSxNQUFNLENBQUEsQ0FBQTtnQkFDakYsSUFBSSxDQUFDZ0MsaUJBQWlCLENBNkxYLEdBQUEsQ0FBQSxDQUFBO2dCQTVMWCxJQUFJLENBQUNDLGtCQUFrQixDQWtNWCxJQUFBLENBQUEsQ0FBQTtBQWpNWixnQkFBQSxJQUFJLENBQUNULG1CQUFtQixFQUFBLENBQUE7QUFDMUIsYUFBQTs7O1lBTUkzQyxHQUFBQSxFQUFBQSxhQUFBQTs7OztBQURILE1BQ0QsU0FBMEIsR0FBQSxHQUFBO0FBQ3hCLGdCQUFBLElBQUksSUFBSSxDQUFDaUQsbUJBQW1CLENBMExoQixJQTFMNkMsQ0FBQSxFQUFBO29CQUN2RCxJQUFNSCxNQUFBQSxHQUFTLElBQUksQ0FBQ0YsbUJBQW1CLEVBQUEsQ0FBQTtBQUN2QyxvQkFBQSxJQUFJRSxNQUFRLEVBQUE7d0JBQ1YvRSxhQUFPMEYsQ0FBQUEsUUFBUSxDQUFDWCxNQUFBQSxDQUFPOUMsV0FBVyxFQUFFLElBQUksQ0FBQzJELFdBQVcsRUFBRSxJQUFJLENBQUNyQyxZQUFZLENBQUEsQ0FBQTtxQkFDbEUsTUFBQTtBQUNMLHdCQUFBLElBQUksQ0FBQ0EsWUFBWSxDQUFDbkIsUUFBUSxDQUFDLElBQUksQ0FBQ3dELFdBQVcsQ0FBQSxDQUFBO3FCQUM1QztvQkFDRCxJQUFJLENBQUNQLGtCQUFrQixDQW1MYixJQUFBLENBQUEsQ0FBQTtpQkFsTFg7Z0JBQ0QsT0FBTyxJQUFJLENBQUM5QixZQUFZLENBQUE7QUFDMUIsYUFBQTtBQUVBLFlBQUEsR0FBQSxFQUFBLFNBQUEsR0FBQSxDQUFnQmxDLEtBQWEsRUFBRTtBQUM3QixnQkFBQSxJQUFJLElBQUksQ0FBQ2tDLFlBQVksS0FBS2xDLEtBQU8sRUFBQTtBQUMvQixvQkFBQSxJQUFJLENBQUNrQyxZQUFZLENBQUNuQixRQUFRLENBQUNmLEtBQUFBLENBQUFBLENBQUFBO2lCQUM1QjtnQkFDRCxJQUFNMEQsTUFBQUEsR0FBUyxJQUFJLENBQUNGLG1CQUFtQixFQUFBLENBQUE7QUFDdkMsZ0JBQUEsSUFBSUUsTUFBUSxFQUFBO0FBQ1YvRSxvQkFBQUEsYUFBQUEsQ0FBTzhDLE1BQU0sQ0FBQ2lDLE1BQUFBLENBQU85QyxXQUFXLEVBN0p6Qm5DLGNBNkp5Q2lHLFVBQVUsQ0FBQSxDQUFBO29CQUMxRC9GLGFBQU8wRixDQUFBQSxRQUFRLENBQUM1RixhQTlKVEEsQ0E4SnVCaUcsVUFBVSxFQUFFMUUsS0FBQUEsRUFBTyxJQUFJLENBQUNpQyxZQUFZLENBQUEsQ0FBQTtpQkFDN0QsTUFBQTtBQUNMLG9CQUFBLElBQUksQ0FBQ0EsWUFBWSxDQUFDbEIsUUFBUSxDQUFDZixLQUFBQSxDQUFBQSxDQUFBQTtpQkFDNUI7QUFDRCxnQkFBQSxJQUFJLENBQUN1RSxXQUFXLEdBQUcsSUFBSSxDQUFDdEMsWUFBWSxDQUFBO2dCQUNwQyxJQUFJLENBQUMrQixrQkFBa0IsQ0FrS1gsSUFBQSxDQUFBLENBQUE7QUFqS2QsYUFBQTs7O0FBcEtXdkYsSUFBQUEsT0FBQUEsYUFBQUEsQ0FBQUE7QUF3VFosQ0FBQSxFQUFBLENBQUE7O0FBeFRZQSxJQUFBQSxhQUFBQSxDQUNJNkYsYUFBeUIsSUFBSXhDLGlCQUFBQSxFQUFBQSxDQUFBQTs7O0FBRGpDckQsSUFBQUEsYUFBQUEsQ0FFSWlHLGFBQXFCLElBQUkvRixhQUFBQSxFQUFBQSxDQUFBQTs7QUF3VDFDOztJQUdBLGFBQUEsQ0FBQTtVQUFLZ0csYUFBYSxFQUFBO0lBQWJBLGFBQUFBLENBQUFBLGFBQUFBLENBQ0hDLGdCQUFhLEdBQWJBLENBQUFBLEdBQUFBLFlBQUFBLENBQUFBO0lBREdELGFBQUFBLENBQUFBLGFBQUFBLENBRUhFLGVBQVksR0FBWkEsQ0FBQUEsR0FBQUEsV0FBQUEsQ0FBQUE7SUFGR0YsYUFBQUEsQ0FBQUEsYUFBQUEsQ0FHSEcsbUJBQWdCLEdBQWhCQSxDQUFBQSxHQUFBQSxlQUFBQSxDQUFBQTtJQUhHSCxhQUFBQSxDQUFBQSxhQUFBQSxDQUlISSxnQkFBYSxHQUFiQSxDQUFBQSxHQUFBQSxZQUFBQSxDQUFBQTtJQUpHSixhQUFBQSxDQUFBQSxhQUFBQSxDQUtISyxlQUFZLElBQVpBLENBQUFBLEdBQUFBLFdBQUFBLENBQUFBO0lBTEdMLGFBQUFBLENBQUFBLGFBQUFBLENBTUhNLGdCQUFhLElBQWJBLENBQUFBLEdBQUFBLFlBQUFBLENBQUFBO0lBTkdOLGFBQUFBLENBQUFBLGFBQUFBLENBT0hPLGlCQUFjLElBQWRBLENBQUFBLEdBQUFBLGFBQUFBLENBQUFBO0lBUEdQLGFBQUFBLENBQUFBLGFBQUFBLENBUUhRLGlCQUFjLElBQWRBLENBQUFBLEdBQUFBLGFBQUFBLENBQUFBO0FBUkdSLElBQUFBLGFBQUFBLENBQUFBLGFBVUgsb0NBQ0FTLE1BQUFBLENBQUFBLEdBQU8sSUFBUEEsQ0FBQUEsR0FBQUEsTUFBQUEsQ0FBQUE7QUFYR1QsSUFBQUEsYUFBQUEsQ0FBQUEsYUFZSCw2Q0FDQVUsUUFBQUEsQ0FBQUEsR0FBUyxJQUFUQSxDQUFBQSxHQUFBQSxRQUFBQSxDQUFBQTtBQWJHVixJQUFBQSxhQUFBQSxDQUFBQSxhQWNILDZEQUNBVyxVQUFBQSxDQUFBQSxHQUFXLElBQVhBLENBQUFBLEdBQUFBLFVBQUFBLENBQUFBO0FBZkdYLElBQUFBLGFBQUFBLENBQUFBLGFBZ0JILGlDQUNBWSxNQUFBQSxDQUFBQSxHQUFPLElBQVBBLENBQUFBLEdBQUFBLE1BQUFBLENBQUFBO0FBakJHWixJQUFBQSxhQUFBQSxDQUFBQSxhQWtCSCxpREFDQWEsUUFBQUEsQ0FBQUEsR0FBUyxJQUFUQSxDQUFBQSxHQUFBQSxRQUFBQSxDQUFBQTtBQW5CR2IsSUFBQUEsYUFBQUEsQ0FBQUEsYUFvQkgsMEVBQ0FjLFlBQUFBLENBQUFBLEdBQWEsSUFBYkEsQ0FBQUEsR0FBQUEsWUFBQUEsQ0FBQUE7R0FyQkdkLGFBQUFBLEtBQUFBLGFBQUFBLEdBQUFBLEVBQUFBLENBQUFBLENBQUFBOztBQ2hVTDs7QUFFQyxJQUNNLElBQUEsWUFBZTFCLDRCQUFmO0FBQWVBLElBQUFBLFNBQUFBLFlBQUFBLEdBQUFBO3lCQUNOLElBQUEsQ0FDZEUsVUFBK0IsRUFBRSxDQUFBO3lCQUNuQixJQUFBLENBQ2QzRSxhQUE0QixJQUFJQyxhQUFBQSxFQUFBQSxDQUFBQTtBQUc5QixRQUFBLElBQUksQ0FBQ0QsVUFBVSxDQUFDSSxLQUFLLEdBQUcsSUFBSSxDQUFBOztBQVBWcUUsSUFBQUEsSUFBQUEsTUFBQUEsR0FBQUEsWUFBQUEsQ0FBQUEsU0FBQUEsQ0FBQUE7QUFVcEI7O0FBRUMsTUFDRHlDLE9BQUFBLFFBU0MsR0FUREEsU0FBQUEsUUFBQUEsQ0FBU0MsS0FBd0IsRUFBUTtRQUN2QyxJQUFNQyxXQUFBQSxHQUFjRCxNQUFNaEMsU0FBUyxDQUFBO1FBQ25DLElBQUlpQyxXQUFBQSxLQUFnQixJQUFJLEVBQUU7QUFDeEIsWUFBQSxJQUFJQSxXQUFhLEVBQUE7QUFDZkEsZ0JBQUFBLFdBQUFBLENBQVlDLFdBQVcsQ0FBQ0YsS0FBQUEsQ0FBQUEsQ0FBQUE7YUFDekI7QUFDRCxZQUFBLElBQUksQ0FBQ3hDLE9BQU8sQ0FBQ3BGLElBQUksQ0FBQzRILEtBQUFBLENBQUFBLENBQUFBO1lBQ2xCQSxLQUFNaEMsQ0FBQUEsU0FBUyxHQUFHLElBQUksQ0FBQTtTQUN2QjtBQUNILEtBQUEsQ0FBQTtBQUVBOztBQUVDLE1BQ0RrQyxPQUFBQSxXQU1DLEdBTkRBLFNBQUFBLFdBQUFBLENBQVlGLEtBQXdCLEVBQVE7QUFDMUMsUUFBQSxJQUFNbkksUUFBUSxJQUFJLENBQUMyRixPQUFPLENBQUMxRixPQUFPLENBQUNrSSxLQUFBQSxDQUFBQSxDQUFBQTtRQUNuQyxJQUFJbkksS0FBQUEsS0FBVSxDQUFDLENBQUcsRUFBQTtBQUNoQixZQUFBLElBQUksQ0FBQzJGLE9BQU8sQ0FBQzJDLE1BQU0sQ0FBQ3RJLEtBQU8sRUFBQSxDQUFBLENBQUEsQ0FBQTtZQUMzQm1JLEtBQU1oQyxDQUFBQSxTQUFTLEdBQUcsSUFBSSxDQUFBO1NBQ3ZCO0FBQ0gsS0FBQSxDQUFBO0FBRUE7O01BR0FvQyxNQUFBQSxDQUFBQSxpQkFHQyxHQUhEQSxTQUFBQSxrQkFBa0IzRyxRQUFpQixFQUFFSixRQUFvQixFQUFRO0FBQy9ELFFBQUEsSUFBSSxDQUFDUixVQUFVLENBQUNXLFdBQVcsQ0FBQ0MsUUFBQUEsQ0FBU0MsQ0FBQyxFQUFFRCxRQUFTRSxDQUFBQSxDQUFDLEVBQUVGLFFBQUFBLENBQVNHLENBQUMsQ0FBQSxDQUFBO0FBQzlELFFBQUEsSUFBSSxDQUFDZixVQUFVLENBQUNnRSxxQkFBcUIsQ0FBQ3hELFFBQVNLLENBQUFBLENBQUMsRUFBRUwsUUFBQUEsQ0FBU00sQ0FBQyxFQUFFTixRQUFBQSxDQUFTTyxDQUFDLEVBQUVQLFNBQVN5RCxDQUFDLENBQUEsQ0FBQTtBQUN0RixLQUFBLENBQUE7QUFFQTs7TUFHQXVELE1BQUFBLENBQUFBLGlCQUlDLEdBSkRBLFNBQUFBLGtCQUFrQkMsV0FBb0IsRUFBRUMsV0FBdUIsRUFBUTtRQUNyRSxJQUF5QyxnQkFBQSxHQUFBLElBQUksQ0FBQzFILFVBQVUsRUFBaERZLFFBQWlDLEdBQUEsZ0JBQUEsQ0FBakNBLFFBQVVzRCxFQUFBQSxrQkFBQUEsR0FBdUIsZ0JBQXZCQSxDQUFBQSxrQkFBQUEsQ0FBQUE7UUFDbEJ1RCxXQUFZMUQsQ0FBQUEsR0FBRyxDQUFDbkQsUUFBU0MsQ0FBQUEsQ0FBQyxFQUFFRCxRQUFTRSxDQUFBQSxDQUFDLEVBQUVGLFFBQUFBLENBQVNHLENBQUMsQ0FBQSxDQUFBO0FBQ2xEMkcsUUFBQUEsV0FBQUEsQ0FBWTNELEdBQUcsQ0FBQ0csa0JBQW1CckQsQ0FBQUEsQ0FBQyxFQUFFcUQsa0JBQUFBLENBQW1CcEQsQ0FBQyxFQUFFb0Qsa0JBQW1CbkQsQ0FBQUEsQ0FBQyxFQUFFbUQsa0JBQUFBLENBQW1CRCxDQUFDLENBQUEsQ0FBQTtBQUN4RyxLQUFBLENBQUE7QUFFQTs7QUFFQyxNQUNEekUsTUFBQUEsQ0FBQUEsT0FBa0IsR0FBbEJBLFNBQUFBLFVBQWdCLEVBQUMsQ0FBQTtBQUVqQjs7TUFHQW1JLE1BQUFBLENBQUFBLFFBU0MsR0FUREEsU0FBQUEsUUFBQUEsQ0FBU2pHLEdBQVEsRUFBRWtHLFNBQW1DLEVBQUVDLEdBQWtCLEVBQVc7UUFDbkZBLEdBQUl4RixDQUFBQSxRQUFRLEdBQUd5RixNQUFBQSxDQUFPQyxTQUFTLENBQUE7UUFDL0IsSUFBTXJELE1BQUFBLEdBQVMsSUFBSSxDQUFDQyxPQUFPLENBQUE7UUFDM0IsSUFBSyxJQUFJN0UsSUFBSSxDQUFHOEUsRUFBQUEsQ0FBQUEsR0FBSUYsT0FBT3ZGLE1BQU0sRUFBRVcsQ0FBSThFLEdBQUFBLENBQUFBLEVBQUc5RSxDQUFLLEVBQUEsQ0FBQTtZQUM3QyxJQUFNcUgsS0FBQUEsR0FBUXpDLE1BQU0sQ0FBQzVFLENBQUUsQ0FBQSxDQUFBO0FBQ3ZCOEgsWUFBQUEsU0FBQUEsQ0FBVVQsTUFBTTdGLEdBQUcsQ0FBQSxJQUFLNkYsS0FBTVEsQ0FBQUEsUUFBUSxDQUFDakcsR0FBS21HLEVBQUFBLEdBQUFBLENBQUFBLENBQUFBO0FBQzlDLFNBQUE7QUFFQSxRQUFBLE9BQU9BLEdBQUl4RixDQUFBQSxRQUFRLElBQUl5RixNQUFBQSxDQUFPQyxTQUFTLENBQUE7QUFDekMsS0FBQSxDQUFBO0FBckVvQnRELElBQUFBLE9BQUFBLFlBQUFBLENBQUFBO0FBc0VyQixDQUFBLEVBQUE7O0FDM0VEOztJQUdPLElBQU11RCxtQkFBTixpQkFBQSxTQUFBLFlBQUEsRUFBQTtBQUFNQSxJQUFBQSxTQUFBQSxDQUFBQSxtQkFBQUEsRUFBQUEsWUFBQUEsQ0FBQUEsQ0FBQUE7YUFBQUEsbUJBTUNwSCxDQUFBQSxRQUFpQixFQUFFSixRQUFvQixFQUFBOzs7UUFFakQsS0FBS1IsQ0FBQUEsVUFBVSxDQUFDVyxXQUFXLENBQUNDLFFBQUFBLENBQVNDLENBQUMsRUFBRUQsUUFBU0UsQ0FBQUEsQ0FBQyxFQUFFRixRQUFBQSxDQUFTRyxDQUFDLENBQUEsQ0FBQTtBQUM5RCxRQUFBLEtBQUEsQ0FBS2YsVUFBVSxDQUFDZ0UscUJBQXFCLENBQUN4RCxTQUFTSyxDQUFDLEVBQUVMLFFBQVNNLENBQUFBLENBQUMsRUFBRU4sUUFBQUEsQ0FBU08sQ0FBQyxFQUFFUCxTQUFTeUQsQ0FBQyxDQUFBLENBQUE7OztBQVQzRStELElBQUFBLElBQUFBLE1BQUFBLEdBQUFBLG1CQUFBQSxDQUFBQSxTQUFBQSxDQUFBQTtBQVlYOztBQUVDLE1BQ0RDLE9BQUFBLFFBRUMsR0FGREEsU0FBQUEsUUFBQUEsQ0FBU0MsS0FBYyxFQUFRO0FBQzdCLFFBQUEsTUFBTSxpRUFBa0UsQ0FBQTtBQUMxRSxLQUFBLENBQUE7QUFFQTs7QUFFQyxNQUNEQyxPQUFBQSxTQUVDLEdBRkRBLFNBQUFBLFNBQUFBLENBQVVDLE1BQWUsRUFBUTtBQUMvQixRQUFBLE1BQU0sa0VBQW1FLENBQUE7QUFDM0UsS0FBQSxDQUFBO0FBRUE7O01BR0FDLE1BQUFBLENBQUFBLElBRUMsR0FGREEsU0FBQUEsS0FBS0Msa0JBQXdDLEVBQUU5SCxRQUFxQixFQUFRO0FBQzFFLFFBQUEsTUFBTSw2REFBOEQsQ0FBQTtBQUN0RSxLQUFBLENBQUE7QUFFQTs7QUFFQyxNQUNEK0gsTUFBQUEsQ0FBQUEsS0FFQyxHQUZEQSxTQUFBQSxLQUFjLEdBQUE7QUFDWixRQUFBLE1BQU0sbUVBQW9FLENBQUE7QUFDNUUsS0FBQSxDQUFBO0FBRUE7O0FBRUMsTUFDREMsT0FBQUEsaUJBRUMsR0FGREEsU0FBQUEsaUJBQUFBLENBQWtCaEgsS0FBYSxFQUFRO0FBQ3JDLFFBQUEsTUFBTSwwRUFBMkUsQ0FBQTtBQUNuRixLQUFBLENBQUE7QUFFQTs7QUFFQyxNQUNEaUgsT0FBQUEsa0JBRUMsR0FGREEsU0FBQUEsa0JBQUFBLENBQW1CakgsS0FBYyxFQUFRO0FBQ3ZDLFFBQUEsTUFBTSwyRUFBNEUsQ0FBQTtBQUNwRixLQUFBLENBQUE7QUFFQTs7QUFFQyxNQUNEa0gsT0FBQUEsZUFFQyxHQUZEQSxTQUFBQSxlQUFBQSxDQUFnQmxILEtBQWMsRUFBUTtBQUNwQyxRQUFBLE1BQU0sd0VBQXlFLENBQUE7QUFDakYsS0FBQSxDQUFBO0FBRUE7O0FBRUMsTUFDRG1ILE9BQUFBLHlCQUVDLEdBRkRBLFNBQUFBLHlCQUFBQSxDQUEwQm5ILEtBQWEsRUFBUTtBQUM3QyxRQUFBLE1BQU0sa0ZBQW1GLENBQUE7QUFDM0YsS0FBQSxDQUFBO0FBRUE7O0FBRUMsTUFDRG9ILE9BQUFBLGNBRUMsR0FGREEsU0FBQUEsY0FBQUEsQ0FBZUMsS0FBYSxFQUFRO0FBQ2xDLFFBQUEsTUFBTSx1RUFBd0UsQ0FBQTtBQUNoRixLQUFBLENBQUE7QUFFQTs7QUFFQyxNQUNEQyxPQUFBQSxnQkFFQyxHQUZEQSxTQUFBQSxnQkFBQUEsQ0FBaUJ0SCxLQUFjLEVBQVE7QUFDckMsUUFBQSxNQUFNLHlFQUEwRSxDQUFBO0FBQ2xGLEtBQUEsQ0FBQTtBQUVBOztBQUVDLE1BQ0R1SCxPQUFBQSxjQUVDLEdBRkRBLFNBQUFBLGNBQUFBLENBQWV2SCxLQUFjLEVBQVE7QUFDbkMsUUFBQSxNQUFNLHVFQUF3RSxDQUFBO0FBQ2hGLEtBQUEsQ0FBQTtBQUVBOztBQUVDLE1BQ0R3SCxPQUFBQSxnQkFFQyxHQUZEQSxTQUFBQSxnQkFBQUEsQ0FBaUJ4SCxLQUFhLEVBQVE7QUFDcEMsUUFBQSxNQUFNLHlFQUEwRSxDQUFBO0FBQ2xGLEtBQUEsQ0FBQTtBQUVBOztBQUVDLE1BQ0R5SCxPQUFBQSxpQkFFQyxHQUZEQSxTQUFBQSxpQkFBQUEsQ0FBa0J6SCxLQUFjLEVBQVE7QUFDdEMsUUFBQSxNQUFNLDBFQUEyRSxDQUFBO0FBQ25GLEtBQUEsQ0FBQTtBQUVBOztBQUVDLE1BQ0QwSCxPQUFBQSxPQUVDLEdBRkRBLFNBQUFBLE9BQUFBLENBQVExSCxLQUFhLEVBQVE7QUFDM0IsUUFBQSxNQUFNLGdFQUFpRSxDQUFBO0FBQ3pFLEtBQUEsQ0FBQTtBQUVBOztBQUVDLE1BQ0QySCxPQUFBQSxxQkFFQyxHQUZEQSxTQUFBQSxxQkFBQUEsQ0FBc0IzSCxLQUFhLEVBQVE7QUFDekMsUUFBQSxNQUFNLDhFQUErRSxDQUFBO0FBQ3ZGLEtBQUEsQ0FBQTtBQUVBOztBQUVDLE1BQ0Q0SCxPQUFBQSwyQkFFQyxHQUZEQSxTQUFBQSwyQkFBQUEsQ0FBNEI1SCxLQUFhLEVBQVE7QUFDL0MsUUFBQSxNQUFNLG9GQUFxRixDQUFBO0FBQzdGLEtBQUEsQ0FBQTtBQUVBOztBQUVDLE1BQ0Q2SCxPQUFBQSxpQkFFQyxHQUZEQSxTQUFBQSxpQkFBQUEsQ0FBa0I3SCxLQUFhLEVBQVE7QUFDckMsUUFBQSxNQUFNLDBFQUEyRSxDQUFBO0FBQ25GLEtBQUEsQ0FBQTtBQUVBOztBQUVDLE1BQ0Q4SCxPQUFBQSxtQkFFQyxHQUZEQSxTQUFBQSxtQkFBQUEsQ0FBb0I5SCxLQUFhLEVBQVE7QUFDdkMsUUFBQSxNQUFNLDRFQUE2RSxDQUFBO0FBQ3JGLEtBQUEsQ0FBQTtBQUVBOztBQUVDLE1BQ0QrSCxNQUFBQSxDQUFBQSxNQUVDLEdBRkRBLFNBQUFBLE1BQWUsR0FBQTtBQUNiLFFBQUEsTUFBTSwrREFBZ0UsQ0FBQTtBQUN4RSxLQUFBLENBQUE7QUEvSVd2QixJQUFBQSxPQUFBQSxtQkFBQUEsQ0FBQUE7RUFBNEJ2RCxZQWdKeEMsQ0FBQTs7QUN2SkQ7O0lBR08sSUFBTStFLGVBQU4saUJBQUEsV0FBQTtBQUFNQSxJQUFBQSxTQUFBQSxlQUFBQSxDQUtDQyxLQUFpQixFQUFBO0FBQWpCQSxRQUFBQSxJQUFBQSxrQkFBQUEsS0FBZ0IsR0FBQSxDQUFBLENBQUE7YUFGNUJ0SyxNQUFpQixHQUFBLENBQUEsQ0FBQTtBQUdmLFFBQUEsSUFBSSxDQUFDdUssU0FBUyxHQUFHLElBQUlDLEtBQVNGLENBQUFBLEtBQUFBLENBQUFBLENBQUFBOztBQU5yQkQsSUFBQUEsSUFBQUEsTUFBQUEsR0FBQUEsZUFBQUEsQ0FBQUEsU0FBQUEsQ0FBQUE7QUFTWEksSUFBQUEsTUFBQUEsQ0FBQUEsR0FJQyxHQUpEQSxTQUFBQSxHQUFBQSxDQUFJQyxPQUFVLEVBQVE7QUFDcEIsUUFBQSxJQUFJLElBQUksQ0FBQzFLLE1BQU0sS0FBSyxJQUFJLENBQUN1SyxTQUFTLENBQUN2SyxNQUFNLEVBQUUsSUFBSSxDQUFDdUssU0FBUyxDQUFDbkssSUFBSSxDQUFDc0ssT0FBQUEsQ0FBQUEsQ0FBQUE7QUFDMUQsYUFBQSxJQUFJLENBQUNILFNBQVMsQ0FBQyxJQUFJLENBQUN2SyxNQUFNLENBQUMsR0FBRzBLLE9BQUFBLENBQUFBO0FBQ25DLFFBQUEsSUFBSSxDQUFDMUssTUFBTSxFQUFBLENBQUE7QUFDYixLQUFBLENBQUE7QUFFQTJLLElBQUFBLE1BQUFBLENBQUFBLE1BSUMsR0FKREEsU0FBQUEsT0FBQUEsQ0FBT0QsT0FBVSxFQUFROztBQUV2QixRQUFBLElBQU03SyxRQUFRLElBQUksQ0FBQzBLLFNBQVMsQ0FBQ3pLLE9BQU8sQ0FBQzRLLE9BQUFBLENBQUFBLENBQUFBO1FBQ3JDLElBQUksQ0FBQ0UsYUFBYSxDQUFDL0ssS0FBQUEsQ0FBQUEsQ0FBQUE7QUFDckIsS0FBQSxDQUFBO0FBRUFnTCxJQUFBQSxNQUFBQSxDQUFBQSxHQUtDLEdBTERBLFNBQUFBLEdBQUFBLENBQUloTCxLQUFhLEVBQUs7QUFDcEIsUUFBQSxJQUFJQSxLQUFTLElBQUEsSUFBSSxDQUFDRyxNQUFNLEVBQUU7QUFDeEIsWUFBQSxNQUFNLHdCQUF5QixDQUFBO1NBQ2hDO0FBQ0QsUUFBQSxPQUFPLElBQUksQ0FBQ3VLLFNBQVMsQ0FBQzFLLEtBQU0sQ0FBQSxDQUFBO0FBQzlCLEtBQUEsQ0FBQTtBQUVBOzs7O0FBSUMsTUFDRCtLLE9BQUFBLGFBVUMsR0FWREEsU0FBQUEsYUFBQUEsQ0FBYy9LLEtBQWEsRUFBSztRQUM5QixJQUFJaUwsUUFBQUEsR0FBZ0IsSUFBSSxDQUFDUCxTQUFTLENBQUE7QUFDbEMsUUFBQSxJQUFJUSxNQUFTLElBQUksQ0FBQTtBQUNqQixRQUFBLElBQU1DLFNBQVksR0FBQSxJQUFJLENBQUNoTCxNQUFNLEdBQUcsQ0FBQSxDQUFBO0FBQ2hDLFFBQUEsSUFBSUgsVUFBVW1MLFNBQVcsRUFBQTtZQUN2QkQsR0FBTUQsR0FBQUEsUUFBUSxDQUFDRSxTQUFVLENBQUEsQ0FBQTtZQUN6QkYsUUFBUSxDQUFDakwsTUFBTSxHQUFHa0wsR0FBQUEsQ0FBQUE7U0FDbkI7QUFDRCxRQUFBLElBQUksQ0FBQy9LLE1BQU0sRUFBQSxDQUFBO1FBQ1gsT0FBTytLLEdBQUFBLENBQUFBO0FBQ1QsS0FBQSxDQUFBO0lBRUFFLE1BQUFBLENBQUFBLGlCQUVDLEdBRkRBLFNBQUFBLGlCQUEwQixHQUFBO0FBQ3hCLFFBQUEsSUFBSSxDQUFDVixTQUFTLENBQUN2SyxNQUFNLEdBQUcsSUFBSSxDQUFDQSxNQUFNLENBQUE7QUFDckMsS0FBQSxDQUFBO0FBL0NXcUssSUFBQUEsT0FBQUEsZUFBQUEsQ0FBQUE7QUFnRFosQ0FBQSxFQUFBOztBQ2pERDs7O0FBR0MsSUFDTSxJQUFBLGFBQU1hLEdBQU4sU0FBTUEsYUFBQUEsR0FBQUE7c0NBQ29CLElBQUEsQ0FDL0I3SCxVQUFrQixDQUFDLENBQUEsQ0FBQTtBQUNuQiwrREFDQUgsUUFBbUIsR0FBQSxDQUFBLENBQUE7c0VBQzRDLElBQUEsQ0FDL0RDLFFBQWlCLElBQUlKLGNBQUFBLEVBQUFBLENBQUFBO3VFQUMyQyxJQUFBLENBQ2hFb0ksU0FBa0IsSUFBSXBJLGNBQUFBLEVBQUFBLENBQUFBO0FBQ3ZCLENBQUE7O0FDVEQ7O0lBR08sSUFBTXFJLG9CQUFOLGlCQUFBLFNBQUEsaUJBQUEsRUFBQTtBQUFNQSxJQUFBQSxTQUFBQSxDQUFBQSxvQkFBQUEsRUFBQUEsaUJBQUFBLENBQUFBLENBQUFBO0FBQUFBLElBQUFBLFNBQUFBLG9CQUFBQSxDQWdCQ0MsUUFBZ0IsRUFBRUMsSUFBYSxFQUFFdEosUUFBNkIsRUFBQTs7O0FBZGxFdUosUUFBQUEsS0FBQUEsQ0FBQUEsU0FBQUEsR0FBcUIsSUFBSXhJLGNBQUFBLEVBQUFBLENBQUFBO2NBQ3pCcUIsTUFBa0IsR0FBQSxJQUFJckIsY0FBUSxDQUFBLENBQUEsRUFBRyxDQUFHLEVBQUEsQ0FBQSxDQUFBLENBQUE7eUJBRTlCLEtBQUEsQ0FDZHlJLFVBQW1CLElBQUl6SSxjQUFBQSxDQUFRLENBQUMsR0FBSyxFQUFBLENBQUMsS0FBSyxDQUFDLEdBQUEsQ0FBQSxDQUFBO0FBQzVDLHlCQUNBMEksS0FBQUEsQ0FBQUEsT0FBQUEsR0FBbUIsSUFBSTFJLGNBQUFBLENBQVEsS0FBSyxHQUFLLEVBQUEsR0FBQSxDQUFBLENBQUE7QUFVdkMsUUFBQSxLQUFBLENBQUtaLEdBQUcsR0FBR2tKLFFBQUFBLENBQUFBO0FBQ1gsUUFBQSxLQUFBLENBQUtFLFNBQVMsQ0FBQzNHLEdBQUcsQ0FBQzBHLEtBQUs1SixDQUFDLEdBQUcsR0FBSzRKLEVBQUFBLElBQUFBLENBQUszSixDQUFDLEdBQUcsR0FBSzJKLEVBQUFBLElBQUFBLENBQUsxSixDQUFDLEdBQUcsR0FBQSxDQUFBLENBQUE7QUFDeEQsUUFBQSxLQUFBLENBQUs4SixjQUFjLEVBQUEsQ0FBQTs7O0FBcEJWTixJQUFBQSxJQUFBQSxNQUFBQSxHQUFBQSxvQkFBQUEsQ0FBQUEsU0FBQUEsQ0FBQUE7QUF1Qlg7O0FBRUMsTUFDRDVKLE9BQUFBLFdBR0MsR0FIREEsU0FBQUEsV0FBQUEsQ0FBWUMsUUFBaUIsRUFBUTtBQUNuQyxRQUFBLGlCQUFBLENBQUEsU0FBQSxDQUFNRCxXQUFELENBQWFDLElBQUFBLENBQUFBLElBQUFBLEVBQUFBLFFBQUFBLENBQUFBLENBQUFBO0FBQ2xCLFFBQUEsSUFBSSxDQUFDaUssY0FBYyxFQUFBLENBQUE7QUFDckIsS0FBQSxDQUFBO0FBRUE7O0FBRUMsTUFDREMsT0FBQUEsYUFHQyxHQUhEQSxTQUFBQSxhQUFBQSxDQUFjMUcsS0FBYyxFQUFRO0FBQ2xDLFFBQUEsSUFBSSxDQUFDcEUsVUFBVSxDQUFDWSxRQUFRLEdBQUcsSUFBSSxDQUFDWixVQUFVLENBQUNZLFFBQVEsQ0FBQ2lGLFFBQVEsQ0FBQ3pCLEtBQUFBLENBQUFBLENBQUFBO0FBQzdELFFBQUEsSUFBSSxDQUFDYixNQUFNLENBQUNoQixRQUFRLENBQUM2QixLQUFBQSxDQUFBQSxDQUFBQTtBQUN2QixLQUFBLENBQUE7QUFFQTs7QUFFQyxNQUNEMkcsT0FBQUEsT0FHQyxHQUhEQSxTQUFBQSxPQUFBQSxDQUFRdkosS0FBYyxFQUFRO0FBQzVCLFFBQUEsSUFBSSxDQUFDa0osU0FBUyxDQUFDM0csR0FBRyxDQUFDdkMsS0FBTVgsQ0FBQUEsQ0FBQyxHQUFHLEdBQUEsRUFBS1csTUFBTVYsQ0FBQyxHQUFHLEdBQUtVLEVBQUFBLEtBQUFBLENBQU1ULENBQUMsR0FBRyxHQUFBLENBQUEsQ0FBQTtBQUMzRCxRQUFBLElBQUksQ0FBQzhKLGNBQWMsRUFBQSxDQUFBO0FBQ3JCLEtBQUEsQ0FBQTtBQUVBOztNQUdBbEQsTUFBQUEsQ0FBQUEsUUFxQkMsR0FyQkRBLFNBQUFBLFNBQVNqRyxHQUFRLEVBQUVtRyxHQUFrQixFQUFXO0FBQzlDLFFBQUEsSUFBTW1ELFFBQVcsR0FBQSxJQUFJLENBQUN2SSxZQUFZLENBQUNmLEdBQUFBLENBQUFBLENBQUFBO1FBRW5DLElBQU11SixXQUFBQSxHQUFjVixvQkFyRFhBLENBcURnQ1csUUFBUSxDQUFBO0FBQ2pERCxRQUFBQSxXQUFBQSxDQUFZRSxHQUFHLENBQUNwSCxHQUFHLENBQ2pCLENBQUMsSUFBSSxDQUFDMkcsU0FBUyxDQUFDN0osQ0FBQyxHQUFHLElBQUksQ0FBQzBDLE1BQU0sQ0FBQzFDLENBQUMsRUFDakMsQ0FBQyxJQUFJLENBQUM2SixTQUFTLENBQUM1SixDQUFDLEdBQUcsSUFBSSxDQUFDeUMsTUFBTSxDQUFDekMsQ0FBQyxFQUNqQyxDQUFDLElBQUksQ0FBQzRKLFNBQVMsQ0FBQzNKLENBQUMsR0FBRyxJQUFJLENBQUN3QyxNQUFNLENBQUN4QyxDQUFDLENBQUEsQ0FBQTtBQUVuQ2tLLFFBQUFBLFdBQUFBLENBQVlHLEdBQUcsQ0FBQ3JILEdBQUcsQ0FDakIsSUFBSSxDQUFDMkcsU0FBUyxDQUFDN0osQ0FBQyxHQUFHLElBQUksQ0FBQzBDLE1BQU0sQ0FBQzFDLENBQUMsRUFDaEMsSUFBSSxDQUFDNkosU0FBUyxDQUFDNUosQ0FBQyxHQUFHLElBQUksQ0FBQ3lDLE1BQU0sQ0FBQ3pDLENBQUMsRUFDaEMsSUFBSSxDQUFDNEosU0FBUyxDQUFDM0osQ0FBQyxHQUFHLElBQUksQ0FBQ3dDLE1BQU0sQ0FBQ3hDLENBQUMsQ0FBQSxDQUFBO1FBRWxDLElBQU1ZLFdBQUFBLEdBQWNxSixRQUFTSyxDQUFBQSxZQUFZLENBQUNKLFdBQUFBLENBQUFBLENBQUFBO1FBQzFDLElBQUl0SixXQUFBQSxLQUFnQixDQUFDLENBQUcsRUFBQTtBQUN0QixZQUFBLElBQUksQ0FBQ0YsZ0JBQWdCLENBQUN1SixVQUFVckosV0FBYWtHLEVBQUFBLEdBQUFBLEVBQUtuRyxJQUFJRyxNQUFNLENBQUEsQ0FBQTtBQUM1RCxZQUFBLE9BQU8sSUFBSSxDQUFBO1NBQ04sTUFBQTtBQUNMLFlBQUEsT0FBTyxLQUFLLENBQUE7U0FDYjtBQUNILEtBQUEsQ0FBQTtJQUVBLE1BQVFnSixDQUFBQSxjQU1QLEdBTkQsU0FBUUEsY0FBdUIsR0FBQTtBQUM3QixRQUFBLElBQTZCLG1CQUFBLElBQUksQ0FBQzdLLFVBQVUsRUFBMUJzTCxTQUFXLGdCQUFyQjFLLENBQUFBLFFBQUFBLENBQUFBO1FBQ1IsSUFBTTJLLFFBQUFBLEdBQVcsSUFBSSxDQUFDYixTQUFTLENBQUE7QUFFL0J4SSxRQUFBQSxjQUFBQSxDQUFRMEgsR0FBRyxDQUFDMEIsTUFBQUEsRUFBUUMsUUFBVSxFQUFBLElBQUksQ0FBQ1gsT0FBTyxDQUFBLENBQUE7QUFDMUMxSSxRQUFBQSxjQUFBQSxDQUFRc0osUUFBUSxDQUFDRixNQUFBQSxFQUFRQyxRQUFVLEVBQUEsSUFBSSxDQUFDWixPQUFPLENBQUEsQ0FBQTtBQUNqRCxLQUFBLENBQUE7QUEvRVdKLElBQUFBLE9BQUFBLG9CQUFBQSxDQUFBQTtFQUE2QnhLLGlCQWdGekMsQ0FBQSxDQUFBOztBQWhGWXdLLElBQUFBLG9CQUFBQSxDQUNJVyxXQUF3QixJQUFJTyxrQkFBQUEsRUFBQUEsQ0FBQUE7OztBQ0o3Qzs7QUFFQyxJQUNNLElBQUEsdUJBQU1DLDBCQUFOLGlCQUFBLEVBQUE7QUFBTUEsSUFBQUEsU0FBQUEsQ0FBQUEsdUJBQUFBLEVBQUFBLGlCQUFBQSxDQUFBQSxDQUFBQTtBQUFBQSxJQUFBQSxTQUFBQSx1QkFBQUEsQ0FnQkNsQixRQUFnQixFQUFFbUIsTUFBYyxFQUFFeEssUUFBNkIsRUFBQTs7O2NBYm5FeUssT0FBa0IsR0FBQSxDQUFBLENBQUE7Y0FDbEJDLFNBQW9CLEdBQUEsQ0FBQSxDQUFBO0FBYzFCLFFBQUEsS0FBQSxDQUFLRCxPQUFPLEdBQUdELE1BQUFBLENBQUFBO0FBQ2YsUUFBQSxLQUFBLENBQUtySyxHQUFHLEdBQUdrSixRQUFBQSxDQUFBQTs7O0FBbkJGa0IsSUFBQUEsSUFBQUEsTUFBQUEsR0FBQUEsdUJBQUFBLENBQUFBLFNBQUFBLENBQUFBO0FBc0JYOztBQUVDLE1BQ0RJLE9BQUFBLFNBRUMsR0FGREEsU0FBQUEsU0FBQUEsQ0FBVXRLLEtBQWEsRUFBUTtRQUM3QixJQUFJLENBQUNvSyxPQUFPLEdBQUdwSyxLQUFBQSxDQUFBQTtBQUNqQixLQUFBLENBQUE7QUFFQTs7QUFFQyxNQUNEc0osT0FBQUEsYUFFQyxHQUZEQSxTQUFBQSxhQUFBQSxDQUFjMUcsS0FBYyxFQUFRO0FBQ2xDLFFBQUEsSUFBSSxDQUFDeUgsU0FBUyxHQUFHRSxJQUFLWCxDQUFBQSxHQUFHLENBQUNoSCxLQUFNdkQsQ0FBQUEsQ0FBQyxFQUFFa0wsSUFBQUEsQ0FBS1gsR0FBRyxDQUFDaEgsS0FBQUEsQ0FBTXZELENBQUMsRUFBRXVELE1BQU10RCxDQUFDLENBQUEsQ0FBQSxDQUFBO0FBQzlELEtBQUEsQ0FBQTtBQUVBOztNQUdBNkcsTUFBQUEsQ0FBQUEsUUFZQyxHQVpEQSxTQUFBQSxTQUFTakcsR0FBUSxFQUFFbUcsR0FBa0IsRUFBVztRQUM5QyxJQUFNbUUsY0FBQUEsR0FBaUJOLHVCQXhDZEEsQ0F3Q3NDTyxXQUFXLENBQUE7QUFDMUQvSixRQUFBQSxjQUFBQSxDQUFRQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUNuQyxVQUFVLENBQUNZLFFBQVEsRUFBRSxJQUFJLENBQUN1RSxTQUFTLENBQUNuRixVQUFVLENBQUNvQyxXQUFXLEVBQUU0SixlQUFlVixNQUFNLENBQUEsQ0FBQTtBQUNsSFUsUUFBQUEsY0FBQUEsQ0FBZUwsTUFBTSxHQUFHLElBQUksQ0FBQ08sV0FBVyxDQUFBO1FBRXhDLElBQU12SyxXQUFBQSxHQUFjRCxHQUFJeUssQ0FBQUEsZUFBZSxDQUFDSCxjQUFBQSxDQUFBQSxDQUFBQTtRQUN4QyxJQUFJckssV0FBQUEsS0FBZ0IsQ0FBQyxDQUFHLEVBQUE7WUFDdEIsSUFBSSxDQUFDRixnQkFBZ0IsQ0FBQ0MsR0FBQUEsRUFBS0MsYUFBYWtHLEdBQUtuRyxFQUFBQSxHQUFBQSxDQUFJRyxNQUFNLEVBQUUsSUFBSSxDQUFBLENBQUE7QUFDN0QsWUFBQSxPQUFPLElBQUksQ0FBQTtTQUNOLE1BQUE7QUFDTCxZQUFBLE9BQU8sS0FBSyxDQUFBO1NBQ2I7QUFDSCxLQUFBLENBQUE7QUFuRFc2SixJQUFBQSxhQUFBQSxDQUFBQSx1QkFBQUEsRUFBQUE7O1lBTVBRLEdBQUFBLEVBQUFBLGFBQUFBO2lCQUFKLFNBQTBCLEdBQUEsR0FBQTtBQUN4QixnQkFBQSxPQUFPLElBQUksQ0FBQ04sT0FBTyxHQUFHLElBQUksQ0FBQ0MsU0FBUyxDQUFBO0FBQ3RDLGFBQUE7OztBQVJXSCxJQUFBQSxPQUFBQSx1QkFBQUEsQ0FBQUE7RUFBZ0MzTCxpQkFvRDVDLENBQUEsQ0FBQTs7QUFwRFkyTCxJQUFBQSx1QkFBQUEsQ0FDSU8sY0FBOEIsSUFBSUcscUJBQUFBLEVBQUFBLENBQUFBOzs7QUNEbkQ7O0FBRUMsSUFDTSxJQUFBLGtCQUFNQyxpQkFtVFYsV0FuVEk7YUFBTUEsa0JBc0JUQyxDQUFBQSxjQUFxRCxFQUNyREMsYUFBb0QsRUFDcERDLGFBQW9ELEVBQ3BEQyxjQUFxRCxFQUNyREMsYUFBb0QsRUFDcERDLGFBQW9ELEVBQUE7QUFkOUNDLFFBQUFBLElBQUFBLENBQUFBLFVBQUFBLEdBQTZCLEVBQUUsQ0FBQTtBQUMvQkMsUUFBQUEsSUFBQUEsQ0FBQUEsT0FBQUEsR0FBMEIsSUFBSVQscUJBQUFBLEVBQUFBLENBQUFBO0FBQzlCVSxRQUFBQSxJQUFBQSxDQUFBQSxJQUFBQSxHQUFvQixJQUFJckIsa0JBQUFBLEVBQUFBLENBQUFBO0FBRXhCc0IsUUFBQUEsSUFBQUEsQ0FBQUEsY0FBQUEsR0FBZ0QsSUFBSXZELGVBQUFBLEVBQUFBLENBQUFBO0FBQ3BEd0QsUUFBQUEsSUFBQUEsQ0FBQUEsU0FBQUEsR0FBMEQsRUFBQyxDQUFBO0FBQzNEQyxRQUFBQSxJQUFBQSxDQUFBQSxVQUFBQSxHQUE2QixFQUFFLENBQUE7UUFVckMsSUFBSSxDQUFDQyxlQUFlLEdBQUdaLGNBQUFBLENBQUFBO1FBQ3ZCLElBQUksQ0FBQ2EsY0FBYyxHQUFHWixhQUFBQSxDQUFBQTtRQUN0QixJQUFJLENBQUNhLGNBQWMsR0FBR1osYUFBQUEsQ0FBQUE7UUFDdEIsSUFBSSxDQUFDYSxlQUFlLEdBQUdaLGNBQUFBLENBQUFBO1FBQ3ZCLElBQUksQ0FBQ2EsY0FBYyxHQUFHWixhQUFBQSxDQUFBQTtRQUN0QixJQUFJLENBQUNhLGNBQWMsR0FBR1osYUFBQUEsQ0FBQUE7O0FBbENiTixJQUFBQSxJQUFBQSxNQUFBQSxHQUFBQSxrQkFBQUEsQ0FBQUEsU0FBQUEsQ0FBQUE7QUFxQ1g7O0FBRUMsTUFDRG1CLE9BQUFBLFVBRUMsR0FGREEsU0FBQUEsVUFBQUEsQ0FBV2hNLEtBQWMsRUFBUTtBQUMvQmYsUUFBQUEsT0FBQUEsQ0FBUUMsR0FBRyxDQUFDLGdFQUFBLENBQUEsQ0FBQTtBQUNkLEtBQUEsQ0FBQTtBQUVBOztBQUVDLE1BQ0QrTSxPQUFBQSxnQkFFQyxHQUZEQSxTQUFBQSxnQkFBQUEsQ0FBaUJDLGFBQWdDLEVBQVE7QUFDdkQsUUFBQSxJQUFJLENBQUNWLFNBQVMsQ0FBQ1UsY0FBY3BNLEdBQUcsQ0FBQyxHQUFHLEVBQUMsQ0FBQTtBQUN2QyxLQUFBLENBQUE7QUFFQTs7QUFFQyxNQUNEcU0sT0FBQUEsbUJBV0MsR0FYREEsU0FBQUEsbUJBQUFBLENBQW9CRCxhQUFnQyxFQUFRO1FBQzFELElBQWlFLEtBQUEsR0FBQSxJQUFJLEVBQWpERSxZQUE2QyxLQUF6RFgsQ0FBQUEsVUFBQUEsRUFBdUJGLGFBQWdCYyxHQUFrQixLQUFsQ2QsQ0FBQUEsY0FBQUEsQ0FBQUE7UUFDL0IsSUFBYXZLLFVBQVlrTCxhQUFqQnBNLENBQUFBLEdBQUFBLENBQUFBO1FBQ1IsSUFBSyxJQUFJeEIsSUFBSStOLGFBQWMxTyxDQUFBQSxNQUFNLEdBQUcsQ0FBR1csRUFBQUEsQ0FBQUEsSUFBSyxHQUFHQSxDQUFLLEVBQUEsQ0FBQTtZQUNsRCxJQUFNZ08sS0FBQUEsR0FBUUQsYUFBYzdELENBQUFBLEdBQUcsQ0FBQ2xLLENBQUFBLENBQUFBLENBQUFBO0FBQ2hDLFlBQUEsSUFBSWdPLE1BQU1DLE1BQU0sSUFBSXZMLFdBQVdzTCxLQUFNRSxDQUFBQSxNQUFNLElBQUl4TCxPQUFTLEVBQUE7QUFDdERxTCxnQkFBQUEsYUFBQUEsQ0FBYzlELGFBQWEsQ0FBQ2pLLENBQUFBLENBQUFBLENBQUFBO0FBQzVCOE4sZ0JBQUFBLFNBQUFBLENBQVVyTyxJQUFJLENBQUN1TyxLQUFBQSxDQUFBQSxDQUFBQTthQUNoQjtBQUNILFNBQUE7QUFDQSxRQUFBLE9BQU8sSUFBSSxDQUFDZCxTQUFTLENBQUN4SyxPQUFRLENBQUEsQ0FBQTtBQUNoQyxLQUFBLENBQUE7QUFFQTs7QUFFQyxNQUNEeUwsT0FBQUEsV0FFQyxHQUZEQSxTQUFBQSxXQUFBQSxDQUFZQyxLQUFtQixFQUFRO0FBQ3JDLFFBQUEsSUFBSSxDQUFDdEIsVUFBVSxDQUFDck4sSUFBSSxDQUFDMk8sS0FBQUEsQ0FBQUEsQ0FBQUE7QUFDdkIsS0FBQSxDQUFBO0FBRUE7O0FBRUMsTUFDREMsT0FBQUEsY0FLQyxHQUxEQSxTQUFBQSxjQUFBQSxDQUFlQyxRQUFzQixFQUFRO0FBQzNDLFFBQUEsSUFBTXBQLFFBQVEsSUFBSSxDQUFDNE4sVUFBVSxDQUFDM04sT0FBTyxDQUFDbVAsUUFBQUEsQ0FBQUEsQ0FBQUE7UUFDdEMsSUFBSXBQLEtBQUFBLEtBQVUsQ0FBQyxDQUFHLEVBQUE7QUFDaEIsWUFBQSxJQUFJLENBQUM0TixVQUFVLENBQUN0RixNQUFNLENBQUN0SSxLQUFPLEVBQUEsQ0FBQSxDQUFBLENBQUE7U0FDL0I7QUFDSCxLQUFBLENBQUE7QUFFQTs7QUFFQyxNQUNEcVAsT0FBQUEsTUFNQyxHQU5EQSxTQUFBQSxNQUFBQSxDQUFPQyxTQUFpQixFQUFRO1FBQzlCLElBQUlDLFNBQUFBLEdBQVksSUFBSSxDQUFDM0IsVUFBVSxDQUFBO1FBQy9CLElBQUssSUFBSTlNLElBQUksQ0FBRzBPLEVBQUFBLEdBQUFBLEdBQU1ELFVBQVVwUCxNQUFNLEVBQUVXLENBQUkwTyxHQUFBQSxHQUFBQSxFQUFLMU8sQ0FBSyxFQUFBLENBQUE7QUFDcEQsWUFBQSxJQUFJLENBQUMyTyxtQkFBbUIsQ0FBQ0gsU0FBV0MsRUFBQUEsU0FBUyxDQUFDek8sQ0FBRSxDQUFBLENBQUEsQ0FBQTtBQUNsRCxTQUFBO0FBQ0EsUUFBQSxJQUFJLENBQUM0TyxVQUFVLEVBQUEsQ0FBQTtBQUNqQixLQUFBLENBQUE7QUFFQTs7QUFFQyxNQUNEQyxNQUFBQSxDQUFBQSxPQTJDQyxHQTNDREEsU0FBQUEsT0FDRWpOLENBQUFBLEdBQVEsRUFDUlcsUUFBZ0IsRUFDaEJ1RixTQUFtQyxFQUNuQ0MsR0FBMkYsRUFDbEY7UUFDVCxJQUFNMEcsU0FBQUEsR0FBWSxJQUFJLENBQUMzQixVQUFVLENBQUE7UUFFakMsSUFBSWdDLFNBQUFBLENBQUFBO0FBQ0osUUFBQSxJQUFJL0csR0FBSyxFQUFBO1lBQ1ArRyxTQUFZdkMsR0E1R0xBLG1CQTRHd0J3QyxVQUFVLENBQUE7U0FDMUM7QUFFRCxRQUFBLElBQUlDLFFBQVEsS0FBSyxDQUFBO1FBQ2pCLElBQU1DLE1BQUFBLEdBQVMxQyxrQkFoSE5BLENBZ0h5QjJDLFdBQVcsQ0FBQTtRQUM3QyxJQUFLLElBQUlsUCxJQUFJLENBQUcwTyxFQUFBQSxHQUFBQSxHQUFNRCxVQUFVcFAsTUFBTSxFQUFFVyxDQUFJME8sR0FBQUEsR0FBQUEsRUFBSzFPLENBQUssRUFBQSxDQUFBO1lBQ3BELElBQU1zTyxRQUFBQSxHQUFXRyxTQUFTLENBQUN6TyxDQUFFLENBQUEsQ0FBQTtBQUU3QixZQUFBLElBQUlzTyxRQUFTekcsQ0FBQUEsUUFBUSxDQUFDakcsR0FBQUEsRUFBS2tHLFdBQVdtSCxNQUFTLENBQUEsRUFBQTtBQUM3Q0QsZ0JBQUFBLEtBQUFBLEdBQVEsSUFBSSxDQUFBO2dCQUNaLElBQUlDLE1BQUFBLENBQU8xTSxRQUFRLEdBQUdBLFFBQVUsRUFBQTtBQUM5QixvQkFBQSxJQUFJdU0sU0FBVyxFQUFBO0FBQ2JBLHdCQUFBQSxTQUFBQSxDQUFVdEUsTUFBTSxDQUFDL0gsUUFBUSxDQUFDd00sT0FBT3pFLE1BQU0sQ0FBQSxDQUFBO0FBQ3ZDc0Usd0JBQUFBLFNBQUFBLENBQVV0TSxLQUFLLENBQUNDLFFBQVEsQ0FBQ3dNLE9BQU96TSxLQUFLLENBQUEsQ0FBQTt3QkFDckNzTSxTQUFVdk0sQ0FBQUEsUUFBUSxHQUFHME0sTUFBQUEsQ0FBTzFNLFFBQVEsQ0FBQTt3QkFDcEN1TSxTQUFVcE0sQ0FBQUEsT0FBTyxHQUFHdU0sTUFBQUEsQ0FBT3ZNLE9BQU8sQ0FBQTtxQkFDN0IsTUFBQTtBQUNMLHdCQUFBLE9BQU8sSUFBSSxDQUFBO3FCQUNaO0FBQ0RILG9CQUFBQSxRQUFBQSxHQUFXME0sT0FBTzFNLFFBQVEsQ0FBQTtpQkFDM0I7YUFDRjtBQUNILFNBQUE7UUFFQSxJQUFJLENBQUN5TSxTQUFTRixTQUFXLEVBQUE7WUFDdkJBLFNBQVVwTSxDQUFBQSxPQUFPLEdBQUcsQ0FBQyxDQUFBLENBQUE7QUFDckJvTSxZQUFBQSxTQUFBQSxDQUFVdk0sUUFBUSxHQUFHLENBQUEsQ0FBQTtBQUNyQnVNLFlBQUFBLFNBQUFBLENBQVV0TSxLQUFLLENBQUN5QixHQUFHLENBQUMsR0FBRyxDQUFHLEVBQUEsQ0FBQSxDQUFBLENBQUE7QUFDMUI2SyxZQUFBQSxTQUFBQSxDQUFVdEUsTUFBTSxDQUFDdkcsR0FBRyxDQUFDLEdBQUcsQ0FBRyxFQUFBLENBQUEsQ0FBQSxDQUFBO1NBQ3RCLE1BQUEsSUFBSStLLFNBQVNGLFNBQVcsRUFBQTtZQUM3Qi9HLEdBQUkrRyxDQUFBQSxTQUFBQSxDQUFVcE0sT0FBTyxFQUFFb00sU0FBVXZNLENBQUFBLFFBQVEsRUFBRXVNLFNBQVV0TSxDQUFBQSxLQUFLLEVBQUVzTSxTQUFBQSxDQUFVdEUsTUFBTSxDQUFBLENBQUE7U0FDN0U7UUFDRCxPQUFPd0UsS0FBQUEsQ0FBQUE7QUFDVCxLQUFBLENBQUE7QUFFQTs7QUFFQyxNQUNERyxPQUFBQSxzQkFFQyxHQUZEQSxTQUFBQSxzQkFBQUEsQ0FBdUJDLG1CQUF5QyxFQUFRO0FBQ3RFLFFBQUEsTUFBTSwrRUFBZ0YsQ0FBQTtBQUN4RixLQUFBLENBQUE7QUFFQTs7QUFFQyxNQUNEQyxPQUFBQSx5QkFFQyxHQUZEQSxTQUFBQSx5QkFBQUEsQ0FBMEJELG1CQUF5QyxFQUFRO0FBQ3pFLFFBQUEsTUFBTSxrRkFBbUYsQ0FBQTtBQUMzRixLQUFBLENBQUE7QUF3QkEsSUFBQSxNQUFBLENBQVFFLFdBV1AsR0FYRCxTQUFRQSxZQUFZckIsTUFBYyxFQUFFQyxNQUFjLEVBQWdCO1FBQ2hFLElBQUlGLEtBQUFBLENBQUFBO0FBQ0osUUFBQSxJQUFJLElBQUksQ0FBQ2IsVUFBVSxDQUFDOU4sTUFBTSxFQUFFO0FBQzFCMk8sWUFBQUEsS0FBQUEsR0FBUSxJQUFJLENBQUNiLFVBQVUsQ0FBQ29DLEdBQUcsRUFBQSxDQUFBO0FBQzNCdkIsWUFBQUEsS0FBQUEsQ0FBTUMsTUFBTSxHQUFHQSxNQUFBQSxDQUFBQTtBQUNmRCxZQUFBQSxLQUFBQSxDQUFNRSxNQUFNLEdBQUdBLE1BQUFBLENBQUFBO1NBQ1YsTUFBQTtZQUNMRixLQUFRLEdBQUEsSUFBSXdCLGFBQWF2QixNQUFRQyxFQUFBQSxNQUFBQSxDQUFBQSxDQUFBQTtTQUNsQztBQUNELFFBQUEsSUFBSSxDQUFDaEIsU0FBUyxDQUFDZSxNQUFPLENBQUEsQ0FBQ0MsT0FBTyxHQUFHRixLQUFBQSxDQUFBQTtRQUNqQyxPQUFPQSxLQUFBQSxDQUFBQTtBQUNULEtBQUEsQ0FBQTtBQUVBLElBQUEsTUFBQSxDQUFRVyxtQkE4RFAsR0E5REQsU0FBUUEsb0JBQW9CSCxTQUFpQixFQUFFaUIsVUFBd0IsRUFBUTtRQUM3RSxJQUFNaEIsU0FBQUEsR0FBWSxJQUFJLENBQUMzQixVQUFVLENBQUE7UUFFakMsSUFBTTRDLGdCQUFBQSxHQUFtQkQsV0FBVzVLLE9BQU8sQ0FBQTtRQUMzQyxJQUFLLElBQUk3RSxJQUFJLENBQUcwTyxFQUFBQSxHQUFBQSxHQUFNZ0IsaUJBQWlCclEsTUFBTSxFQUFFVyxDQUFJME8sR0FBQUEsR0FBQUEsRUFBSzFPLENBQUssRUFBQSxDQUFBO1lBQzNELElBQU0yUCxPQUFBQSxHQUFVRCxnQkFBZ0IsQ0FBQzFQLENBQUUsQ0FBQSxDQUFBO1lBQ25DLElBQVcsV0FBUDJQLENBQUFBLE9BQUFBLEVBQW1CbEYsb0JBQXNCLENBQUEsRUFBQTtBQXRNdEM4QixnQkFBQUEsa0JBQUFBLENBdU1jcUQsZUFBZSxDQUFDRCxPQUFTLEVBQUEsSUFBSSxDQUFDM0MsSUFBSSxDQUFBLENBQUE7Z0JBQ3JELElBQUssSUFBSTZDLElBQUksQ0FBR25CLEVBQUFBLElBQUFBLEdBQU1ELFVBQVVwUCxNQUFNLEVBQUV3USxDQUFJbkIsR0FBQUEsSUFBQUEsRUFBS21CLENBQUssRUFBQSxDQUFBO0FBQ3BELG9CQUFBLElBQU1qQyxhQUFnQmEsR0FBQUEsU0FBUyxDQUFDb0IsQ0FBQUEsQ0FBRSxDQUFDaEwsT0FBTyxDQUFBO29CQUMxQyxJQUFLLElBQUlpTCxJQUFJLENBQUdwQixFQUFBQSxJQUFBQSxHQUFNZCxjQUFjdk8sTUFBTSxFQUFFeVEsQ0FBSXBCLEdBQUFBLElBQUFBLEVBQUtvQixDQUFLLEVBQUEsQ0FBQTt3QkFDeEQsSUFBTXpJLEtBQUFBLEdBQVF1RyxhQUFhLENBQUNrQyxDQUFFLENBQUEsQ0FBQTt3QkFDOUIsSUFBTTdCLE1BQUFBLEdBQVM1RyxNQUFNN0YsR0FBRyxDQUFBO3dCQUN4QixJQUFNME0sTUFBQUEsR0FBU3lCLFFBQVFuTyxHQUFHLENBQUE7QUFDMUIsd0JBQUEsSUFBTXdNLFFBQVFDLE1BQVNDLEdBQUFBLE1BQUFBLEdBQVMsSUFBSSxDQUFDaEIsU0FBUyxDQUFDZSxNQUFBQSxDQUFPLENBQUNDLE1BQUFBLENBQU8sR0FBRyxJQUFJLENBQUNoQixTQUFTLENBQUNnQixNQUFBQSxDQUFPLENBQUNELE1BQU8sQ0FBQSxDQUFBO0FBQy9GLHdCQUFBLElBQUlELEtBQVUrQixLQUFBQSxTQUFBQSxJQUFhLENBQUMvQixLQUFBQSxDQUFNZ0MsY0FBYyxFQUFFOzRCQUNoRCxTQUFTO3lCQUNWO0FBQ0Qsd0JBQUEsSUFBSTNJLFNBQVNzSSxPQUFXLElBQUEsSUFBSSxDQUFDTSxhQUFhLENBQUM1SSxLQUFRLENBQUEsRUFBQTtBQUNqRCw0QkFBQSxJQUFJMkcsVUFBVStCLFNBQVcsRUFBQTtBQUN2QixnQ0FBQSxJQUFNL0IsTUFBUUMsR0FBQUEsTUFBQUEsR0FBU0MsTUFBUyxHQUFBLElBQUksQ0FBQ29CLFdBQVcsQ0FBQ3JCLE1BQVFDLEVBQUFBLE1BQUFBLENBQUFBLEdBQVUsSUFBSSxDQUFDb0IsV0FBVyxDQUFDcEIsUUFBUUQsTUFBTyxDQUFBLENBQUE7QUFDbkdELGdDQUFBQSxNQUFBQSxDQUFNa0MsS0FBSyxHQWtHekJDLENBQUFBLENBQUFBO2dDQWpHY25DLE1BQU1nQyxDQUFBQSxjQUFjLEdBQUcsS0FBSyxDQUFBO0FBQzVCLGdDQUFBLElBQUksQ0FBQy9DLGNBQWMsQ0FBQ25ELEdBQUcsQ0FBQ2tFLE1BQUFBLENBQUFBLENBQUFBO0FBQzFCLDZCQUFBLE1BQU8sSUFBSUEsS0FBQUEsQ0FBTWtDLEtBQUssS0ErRmxDQyxDQS9GZ0UsRUFBQTtBQUNsRG5DLGdDQUFBQSxLQUFBQSxDQUFNa0MsS0FBSyxHQStGekJFLENBQUFBLENBQUFBO2dDQTlGY3BDLEtBQU1nQyxDQUFBQSxjQUFjLEdBQUcsS0FBSyxDQUFBO0FBQzlCLDZCQUFBLE1BQU8sSUFBSWhDLEtBQUFBLENBQU1rQyxLQUFLLEtBNkZsQ0UsQ0E3RitELEVBQUE7Z0NBQ2pEcEMsS0FBTWdDLENBQUFBLGNBQWMsR0FBRyxLQUFLLENBQUE7NkJBQzdCO3lCQUNGO0FBQ0gscUJBQUE7QUFDRixpQkFBQTtBQUNGLGFBQUEsTUFBTyxJQUFXLFdBQVBMLENBQUFBLE9BQUFBLEVBQW1CL0QsdUJBQXlCLENBQUEsRUFBQTtBQWpPaERXLGdCQUFBQSxrQkFBQUEsQ0FrT2M4RCxjQUFjLENBQUNWLE9BQVMsRUFBQSxJQUFJLENBQUM1QyxPQUFPLENBQUEsQ0FBQTtnQkFDdkQsSUFBSyxJQUFJOEMsS0FBSSxDQUFHbkIsRUFBQUEsSUFBQUEsR0FBTUQsVUFBVXBQLE1BQU0sRUFBRXdRLEVBQUluQixHQUFBQSxJQUFBQSxFQUFLbUIsRUFBSyxFQUFBLENBQUE7QUFDcEQsb0JBQUEsSUFBTWpDLGNBQWdCYSxHQUFBQSxTQUFTLENBQUNvQixFQUFBQSxDQUFFLENBQUNoTCxPQUFPLENBQUE7b0JBQzFDLElBQUssSUFBSWlMLEtBQUksQ0FBR3BCLEVBQUFBLElBQUFBLEdBQU1kLGVBQWN2TyxNQUFNLEVBQUV5USxFQUFJcEIsR0FBQUEsSUFBQUEsRUFBS29CLEVBQUssRUFBQSxDQUFBO3dCQUN4RCxJQUFNekksTUFBQUEsR0FBUXVHLGNBQWEsQ0FBQ2tDLEVBQUUsQ0FBQSxDQUFBO3dCQUM5QixJQUFNN0IsT0FBQUEsR0FBUzVHLE9BQU03RixHQUFHLENBQUE7d0JBQ3hCLElBQU0wTSxPQUFBQSxHQUFTeUIsUUFBUW5PLEdBQUcsQ0FBQTtBQUMxQix3QkFBQSxJQUFNd00sU0FBUUMsT0FBU0MsR0FBQUEsT0FBQUEsR0FBUyxJQUFJLENBQUNoQixTQUFTLENBQUNlLE9BQUFBLENBQU8sQ0FBQ0MsT0FBQUEsQ0FBTyxHQUFHLElBQUksQ0FBQ2hCLFNBQVMsQ0FBQ2dCLE9BQUFBLENBQU8sQ0FBQ0QsT0FBTyxDQUFBLENBQUE7QUFDL0Ysd0JBQUEsSUFBSUQsTUFBVStCLEtBQUFBLFNBQUFBLElBQWEsQ0FBQy9CLE1BQUFBLENBQU1nQyxjQUFjLEVBQUU7NEJBQ2hELFNBQVM7eUJBQ1Y7QUFDRCx3QkFBQSxJQUFJM0ksVUFBU3NJLE9BQVcsSUFBQSxJQUFJLENBQUNXLGdCQUFnQixDQUFDakosTUFBUSxDQUFBLEVBQUE7QUFDcEQsNEJBQUEsSUFBSTJHLFdBQVUrQixTQUFXLEVBQUE7QUFDdkIsZ0NBQUEsSUFBTS9CLE1BQVFDLEdBQUFBLE9BQUFBLEdBQVNDLE9BQVMsR0FBQSxJQUFJLENBQUNvQixXQUFXLENBQUNyQixPQUFRQyxFQUFBQSxPQUFBQSxDQUFBQSxHQUFVLElBQUksQ0FBQ29CLFdBQVcsQ0FBQ3BCLFNBQVFELE9BQU8sQ0FBQSxDQUFBO0FBQ25HRCxnQ0FBQUEsTUFBQUEsQ0FBTWtDLEtBQUssR0F1RXpCQyxDQUFBQSxDQUFBQTtnQ0F0RWNuQyxNQUFNZ0MsQ0FBQUEsY0FBYyxHQUFHLEtBQUssQ0FBQTtBQUM1QixnQ0FBQSxJQUFJLENBQUMvQyxjQUFjLENBQUNuRCxHQUFHLENBQUNrRSxNQUFBQSxDQUFBQSxDQUFBQTtBQUMxQiw2QkFBQSxNQUFPLElBQUlBLE1BQUFBLENBQU1rQyxLQUFLLEtBb0VsQ0MsQ0FwRWdFLEVBQUE7QUFDbERuQyxnQ0FBQUEsTUFBQUEsQ0FBTWtDLEtBQUssR0FvRXpCRSxDQUFBQSxDQUFBQTtnQ0FuRWNwQyxNQUFNZ0MsQ0FBQUEsY0FBYyxHQUFHLEtBQUssQ0FBQTtBQUM5Qiw2QkFBQSxNQUFPLElBQUloQyxNQUFBQSxDQUFNa0MsS0FBSyxLQWtFbENFLENBbEUrRCxFQUFBO2dDQUNqRHBDLE1BQU1nQyxDQUFBQSxjQUFjLEdBQUcsS0FBSyxDQUFBOzZCQUM3Qjt5QkFDRjtBQUNILHFCQUFBO0FBQ0YsaUJBQUE7YUFDRDtBQUNILFNBQUE7QUFDRixLQUFBLENBQUE7SUFFQSxNQUFRcEIsQ0FBQUEsVUFzQlAsR0F0QkQsU0FBUUEsVUFBbUIsR0FBQTtRQUN6QixJQUFpRSxLQUFBLEdBQUEsSUFBSSxFQUFqRGQsWUFBNkMsS0FBekRYLENBQUFBLFVBQUFBLEVBQXVCRixhQUFnQmMsR0FBa0IsS0FBbENkLENBQUFBLGNBQUFBLENBQUFBO1FBQy9CLElBQUssSUFBSWpOLElBQUkrTixhQUFjMU8sQ0FBQUEsTUFBTSxHQUFHLENBQUdXLEVBQUFBLENBQUFBLElBQUssR0FBR0EsQ0FBSyxFQUFBLENBQUE7WUFDbEQsSUFBTWdPLEtBQUFBLEdBQVFELGFBQWM3RCxDQUFBQSxHQUFHLENBQUNsSyxDQUFBQSxDQUFBQSxDQUFBQTtZQUNoQyxJQUFJLENBQUNnTyxLQUFNZ0MsQ0FBQUEsY0FBYyxFQUFFO2dCQUN6QixJQUFJaEMsS0FBQUEsQ0FBTWtDLEtBQUssSUFrRHJCQyxDQWxEa0QsRUFBQTtBQUMxQyxvQkFBQSxJQUFJLENBQUM1QyxlQUFlLENBQUNTLE1BQU1DLE1BQU0sRUFBRUQsTUFBTUUsTUFBTSxDQUFBLENBQUE7b0JBQy9DRixLQUFNZ0MsQ0FBQUEsY0FBYyxHQUFHLElBQUksQ0FBQTtBQUM3QixpQkFBQSxNQUFPLElBQUloQyxLQUFBQSxDQUFNa0MsS0FBSyxJQWdENUJFLENBaER3RCxFQUFBO0FBQ2hELG9CQUFBLElBQUksQ0FBQzNDLGNBQWMsQ0FBQ08sTUFBTUMsTUFBTSxFQUFFRCxNQUFNRSxNQUFNLENBQUEsQ0FBQTtvQkFDOUNGLEtBQU1nQyxDQUFBQSxjQUFjLEdBQUcsSUFBSSxDQUFBO2lCQUM1QjthQUNJLE1BQUE7QUFDTGhDLGdCQUFBQSxLQUFBQSxDQUFNa0MsS0FBSyxHQTRDakJLLENBQUFBLENBQUFBO2dCQTNDTSxJQUFJLENBQUNyRCxTQUFTLENBQUNjLEtBQU1DLENBQUFBLE1BQU0sQ0FBQyxDQUFDRCxLQUFBQSxDQUFNRSxNQUFNLENBQUMsR0FBRzZCLFNBQUFBLENBQUFBO0FBRTdDLGdCQUFBLElBQUksQ0FBQ3ZDLGNBQWMsQ0FBQ1EsTUFBTUMsTUFBTSxFQUFFRCxNQUFNRSxNQUFNLENBQUEsQ0FBQTtBQUU5Q0gsZ0JBQUFBLGFBQUFBLENBQWM5RCxhQUFhLENBQUNqSyxDQUFBQSxDQUFBQSxDQUFBQTtBQUM1QjhOLGdCQUFBQSxTQUFBQSxDQUFVck8sSUFBSSxDQUFDdU8sS0FBQUEsQ0FBQUEsQ0FBQUE7YUFDaEI7QUFDSCxTQUFBO0FBQ0YsS0FBQSxDQUFBO0FBRUEsSUFBQSxNQUFBLENBQVFpQyxhQVdQLEdBWEQsU0FBUUEsYUFBQUEsQ0FBY08sS0FBd0IsRUFBVztRQUN2RCxJQUFTLFdBQUxBLENBQUFBLEtBQUFBLEVBQWlCL0Ysb0JBQXNCLENBQUEsRUFBQTtZQUN6QyxJQUFNZ0csR0FBQUEsR0FBTWxFLGtCQTFSTEEsQ0EwUndCbkIsUUFBUSxDQUFBO1lBMVJoQ21CLGtCQTJSWXFELENBQUFBLGVBQWUsQ0FBQ1ksS0FBT0MsRUFBQUEsR0FBQUEsQ0FBQUEsQ0FBQUE7QUFDMUMsWUFBQSxPQUFPQyxxQkFBY0MsbUJBQW1CLENBQUNGLEdBQUssRUFBQSxJQUFJLENBQUN6RCxJQUFJLENBQUEsQ0FBQTtBQUN6RCxTQUFBLE1BQU8sSUFBUyxXQUFMd0QsQ0FBQUEsS0FBQUEsRUFBaUI1RSx1QkFBeUIsQ0FBQSxFQUFBO1lBQ25ELElBQU1nRixNQUFBQSxHQUFTckUsa0JBOVJSQSxDQThSMkJKLFdBQVcsQ0FBQTtZQTlSdENJLGtCQStSWThELENBQUFBLGNBQWMsQ0FBQ0csS0FBT0ksRUFBQUEsTUFBQUEsQ0FBQUEsQ0FBQUE7QUFDekMsWUFBQSxPQUFPRixxQkFBY0csc0JBQXNCLENBQUNELE1BQVEsRUFBQSxJQUFJLENBQUM1RCxJQUFJLENBQUEsQ0FBQTtTQUM5RDtBQUNELFFBQUEsT0FBTyxLQUFLLENBQUE7QUFDZCxLQUFBLENBQUE7QUFFQSxJQUFBLE1BQUEsQ0FBUXNELGdCQVdQLEdBWEQsU0FBUUEsZ0JBQUFBLENBQWlCRSxLQUF3QixFQUFXO1FBQzFELElBQVMsV0FBTEEsQ0FBQUEsS0FBQUEsRUFBaUIvRixvQkFBc0IsQ0FBQSxFQUFBO1lBQ3pDLElBQU1nRyxHQUFBQSxHQUFNbEUsa0JBdlNMQSxDQXVTd0JuQixRQUFRLENBQUE7WUF2U2hDbUIsa0JBd1NZcUQsQ0FBQUEsZUFBZSxDQUFDWSxLQUFPQyxFQUFBQSxHQUFBQSxDQUFBQSxDQUFBQTtBQUMxQyxZQUFBLE9BQU9DLHFCQUFjRyxzQkFBc0IsQ0FBQyxJQUFJLENBQUM5RCxPQUFPLEVBQUUwRCxHQUFBQSxDQUFBQSxDQUFBQTtBQUM1RCxTQUFBLE1BQU8sSUFBUyxXQUFMRCxDQUFBQSxLQUFBQSxFQUFpQjVFLHVCQUF5QixDQUFBLEVBQUE7WUFDbkQsSUFBTWdGLE1BQUFBLEdBQVNyRSxrQkEzU1JBLENBMlMyQkosV0FBVyxDQUFBO1lBM1N0Q0ksa0JBNFNZOEQsQ0FBQUEsY0FBYyxDQUFDRyxLQUFPSSxFQUFBQSxNQUFBQSxDQUFBQSxDQUFBQTtBQUN6QyxZQUFBLE9BQU9GLHFCQUFjSSx5QkFBeUIsQ0FBQ0YsTUFBUSxFQUFBLElBQUksQ0FBQzdELE9BQU8sQ0FBQSxDQUFBO1NBQ3BFO0FBQ0QsUUFBQSxPQUFPLEtBQUssQ0FBQTtBQUNkLEtBQUEsQ0FBQTtBQW5KQTs7OztNQTdKV1IsbUJBa0tJcUQsZUFLZCxHQUxELFNBQWVBLGVBQWdCbUIsQ0FBQUEsV0FBaUMsRUFBRUMsR0FBZ0IsRUFBUTtBQUN4RixRQUFBLElBQU1DLEdBQU1GLEdBQUFBLFdBQUFBLENBQVk3USxVQUFVLENBQUNvQyxXQUFXLENBQUE7QUFDOUMwTyxRQUFBQSxHQUFBQSxDQUFJM0YsR0FBRyxDQUFDNUksUUFBUSxDQUFDc08sWUFBWWxHLE9BQU8sQ0FBQSxDQUFBO0FBQ3BDbUcsUUFBQUEsR0FBQUEsQ0FBSTFGLEdBQUcsQ0FBQzdJLFFBQVEsQ0FBQ3NPLFlBQVlqRyxPQUFPLENBQUEsQ0FBQTtRQUNwQ2Esa0JBQVl1RixDQUFBQSxTQUFTLENBQUNGLEdBQUFBLEVBQUtDLEdBQUtELEVBQUFBLEdBQUFBLENBQUFBLENBQUFBO0FBQ2xDLEtBQUEsQ0FBQTtBQUVBOzs7O01BektXekUsbUJBOEtJOEQsY0FHZCxHQUhELFNBQWVBLGNBQWVjLENBQUFBLGNBQXVDLEVBQUVILEdBQW1CLEVBQVE7QUFDaEc1TyxRQUFBQSxjQUFBQSxDQUFRQyxtQkFBbUIsQ0FBQzhPLGNBQWVqUixDQUFBQSxVQUFVLENBQUNZLFFBQVEsRUFBRXFRLGNBQUFBLENBQWVqUixVQUFVLENBQUNvQyxXQUFXLEVBQUUwTyxJQUFJeEYsTUFBTSxDQUFBLENBQUE7UUFDakh3RixHQUFJbkYsQ0FBQUEsTUFBTSxHQUFHc0YsY0FBQUEsQ0FBZS9FLFdBQVcsQ0FBQTtBQUN6QyxLQUFBLENBQUE7QUFqTFdHLElBQUFBLE9BQUFBLGtCQUFBQSxDQUFBQTtBQWlUWixDQUFBLEVBQUEsQ0FBQTs7QUFqVFlBLElBQUFBLGtCQUFBQSxDQUNJSixjQUE4QixJQUFJRyxxQkFBQUEsRUFBQUEsQ0FBQUE7OztBQUR0Q0MsSUFBQUEsa0JBQUFBLENBRUluQixXQUF3QixJQUFJTyxrQkFBQUEsRUFBQUEsQ0FBQUE7OztBQUZoQ1ksSUFBQUEsa0JBQUFBLENBR0kyQyxjQUE2QixJQUFJM0UsYUFBQUEsRUFBQUEsQ0FBQUE7OztBQUhyQ2dDLElBQUFBLGtCQUFBQSxDQUlJd0MsYUFBNEIsSUFBSXhFLGFBQUFBLEVBQUFBLENBQUFBOztBQStTakQ7O0lBR0EsaUJBQUEsQ0FBQTtVQUFLNkcsaUJBQWlCLEVBQUE7SUFBakJBLGlCQUFBQSxDQUFBQSxpQkFBQUEsQ0FDSGpCLFdBQUFBLENBQUFBLENBQUFBLEdBQUFBLE9BQUFBLENBQUFBO0lBREdpQixpQkFBQUEsQ0FBQUEsaUJBQUFBLENBRUhoQixVQUFBQSxDQUFBQSxDQUFBQSxHQUFBQSxNQUFBQSxDQUFBQTtJQUZHZ0IsaUJBQUFBLENBQUFBLGlCQUFBQSxDQUdIYixVQUFBQSxDQUFBQSxDQUFBQSxHQUFBQSxNQUFBQSxDQUFBQTtHQUhHYSxpQkFBQUEsS0FBQUEsaUJBQUFBLEdBQUFBLEVBQUFBLENBQUFBLENBQUFBLENBQUFBO0FBTUw7O0FBRUMsSUFDRCxJQUFBLFlBQU01QixHQUFOLFNBQU1BLFlBTVF2QixDQUFBQSxNQUFjLEVBQUVDLE1BQWMsRUFBQTtBQUYxQzhCLElBQUFBLElBQUFBLENBQUFBLGNBQUFBLEdBQTBCLEtBQUssQ0FBQTtJQUc3QixJQUFJLENBQUMvQixNQUFNLEdBQUdBLE1BQUFBLENBQUFBO0lBQ2QsSUFBSSxDQUFDQyxNQUFNLEdBQUdBLE1BQUFBLENBQUFBOzs7QUNqVmxCOztJQUdPLElBQU1tRCxtQkFBTixpQkFBQSxXQUFBO2FBQU1BLG1CQUVUQyxDQUFBQSxjQUFzQixFQUN0QkMsZUFBdUIsRUFDdkJDLFVBQWtCLEVBQ2xCQyxlQUF1QixFQUN2QkMsYUFBcUIsRUFBQSxFQUFBO0FBTlpMLElBQUFBLElBQUFBLE1BQUFBLEdBQUFBLG1CQUFBQSxDQUFBQSxTQUFBQSxDQUFBQTtBQVNYOztBQUVDLE1BQ0RNLE9BQUFBLGFBRUMsR0FGREEsU0FBQUEsYUFBQUEsQ0FBY2pRLEtBQWEsRUFBUTtBQUNqQyxRQUFBLE1BQU0seUVBQTBFLENBQUE7QUFDbEYsS0FBQSxDQUFBO0FBRUE7O0FBRUMsTUFDRGtRLE9BQUFBLGtCQUVDLEdBRkRBLFNBQUFBLGtCQUFBQSxDQUFtQmxRLEtBQWEsRUFBUTtBQUN0QyxRQUFBLE1BQU0seUVBQTBFLENBQUE7QUFDbEYsS0FBQSxDQUFBO0FBRUE7O0FBRUMsTUFDRG1RLE9BQUFBLGlCQUVDLEdBRkRBLFNBQUFBLGlCQUFBQSxDQUFrQm5RLEtBQWEsRUFBUTtBQUNyQyxRQUFBLE1BQU0seUVBQTBFLENBQUE7QUFDbEYsS0FBQSxDQUFBO0FBRUE7O0FBRUMsTUFDRG9RLE9BQUFBLGdCQUVDLEdBRkRBLFNBQUFBLGdCQUFBQSxDQUFpQnBRLEtBQWEsRUFBUTtBQUNwQyxRQUFBLE1BQU0seUVBQTBFLENBQUE7QUFDbEYsS0FBQSxDQUFBO0FBRUE7O0FBRUMsTUFDRHFRLE9BQUFBLGtCQUVDLEdBRkRBLFNBQUFBLGtCQUFBQSxDQUFtQnJRLEtBQWEsRUFBUTtBQUN0QyxRQUFBLE1BQU0seUVBQTBFLENBQUE7QUFDbEYsS0FBQSxDQUFBO0FBRUE7O0FBRUMsTUFDRGhDLE1BQUFBLENBQUFBLE9BQWtCLEdBQWxCQSxTQUFBQSxVQUFnQixFQUFDLENBQUE7QUEvQ04yUixJQUFBQSxPQUFBQSxtQkFBQUEsQ0FBQUE7QUFnRFosQ0FBQSxFQUFBOztBQ2pERDs7O0FBR0MsSUFDTSxJQUFBLGtCQUFNVywwQkFBTixZQUFBLEVBQUE7QUFBTUEsSUFBQUEsU0FBQUEsQ0FBQUEsa0JBQUFBLEVBQUFBLFlBQUFBLENBQUFBLENBQUFBO2FBQUFBLGtCQU1DbFIsQ0FBQUEsUUFBaUIsRUFBRUosUUFBb0IsRUFBQTs7O1FBRWpELEtBQUtSLENBQUFBLFVBQVUsQ0FBQ1csV0FBVyxDQUFDQyxRQUFBQSxDQUFTQyxDQUFDLEVBQUVELFFBQVNFLENBQUFBLENBQUMsRUFBRUYsUUFBQUEsQ0FBU0csQ0FBQyxDQUFBLENBQUE7QUFDOUQsUUFBQSxLQUFBLENBQUtmLFVBQVUsQ0FBQ2dFLHFCQUFxQixDQUFDeEQsU0FBU0ssQ0FBQyxFQUFFTCxRQUFTTSxDQUFBQSxDQUFDLEVBQUVOLFFBQUFBLENBQVNPLENBQUMsRUFBRVAsU0FBU3lELENBQUMsQ0FBQSxDQUFBOzs7QUFUM0U2TixJQUFBQSxPQUFBQSxrQkFBQUEsQ0FBQUE7RUFBMkJyTixZQVd2QyxDQUFBOztBQ25CRDs7O0lBSU8sU0FBU3NOLHdCQUE4QixHQUFBO0FBQzVDLElBQUEsT0FBTyxTQUFjQyxXQUFtQixFQUFBO0FBRXhDLEtBQUEsQ0FBQTtBQUNGOztBQ2tCYUMsbUJBQU4saUJBQUEsV0FBQTs7QUFDTDs7QUFFQyxNQUNELFlBQU9DLG9CQWdCTixHQWhCRCxTQUFPQSxvQkFBQUEsQ0FDTEMsY0FBcUQsRUFDckRDLFlBQW1ELEVBQ25EQyxnQkFBdUQsRUFDdkRDLGNBQXFELEVBQ3JEQyxZQUFtRCxFQUNuREMsZ0JBQXVELEVBQ3RDO0FBQ2pCLFFBQUEsT0FBTyxJQUFJbkcsa0JBQ1Q4RixDQUFBQSxjQUFBQSxFQUNBQyxZQUNBQyxFQUFBQSxnQkFBQUEsRUFDQUMsZ0JBQ0FDLFlBQ0FDLEVBQUFBLGdCQUFBQSxDQUFBQSxDQUFBQTtBQUVKLEtBQUEsQ0FBQTtBQUVBOztNQUdBLFdBQUEsQ0FBT0Msb0JBRU4sR0FGRCxTQUFPQSxxQkFBcUI3UixRQUFpQixFQUFFSixRQUFvQixFQUFtQjtRQUNwRixPQUFPLElBQUlzUixtQkFBbUJsUixRQUFVSixFQUFBQSxRQUFBQSxDQUFBQSxDQUFBQTtBQUMxQyxLQUFBLENBQUE7QUFFQTs7TUFHQSxXQUFBLENBQU9rUyxxQkFFTixHQUZELFNBQU9BLHNCQUFzQjlSLFFBQWlCLEVBQUVKLFFBQW9CLEVBQW9CO1FBQ3RGLE9BQU8sSUFBSXdILG9CQUFvQnBILFFBQVVKLEVBQUFBLFFBQUFBLENBQUFBLENBQUFBO0FBQzNDLEtBQUEsQ0FBQTtBQUVBOztBQUVDLE1BQ0QsV0FBT21TLENBQUFBLHlCQUVOLEdBRkQsU0FBT0EseUJBQWtELEdBQUE7QUFDdkQsUUFBQSxNQUFNLGtGQUFtRixDQUFBO0FBQzNGLEtBQUEsQ0FBQTtBQUVBOztBQUVDLE1BQ0QsV0FBT0MsQ0FBQUEscUJBUU4sR0FSRCxTQUFPQSxzQkFDTHhCLGNBQXNCLEVBQ3RCQyxlQUF1QixFQUN2QkMsVUFBa0IsRUFDbEJDLGVBQXVCLEVBQ3ZCQyxhQUFxQixFQUNIO0FBQ2xCLFFBQUEsT0FBTyxJQUFJTCxtQkFBQUEsQ0FBb0JDLGNBQWdCQyxFQUFBQSxlQUFBQSxFQUFpQkMsWUFBWUMsZUFBaUJDLEVBQUFBLGFBQUFBLENBQUFBLENBQUFBO0FBQy9GLEtBQUEsQ0FBQTtBQUVBOztNQUdBLFdBQUEsQ0FBT3FCLHNCQUVOLEdBRkQsU0FBT0Esc0JBQUFBLENBQXVCckksUUFBZ0IsRUFBRUMsSUFBYSxFQUFFdEosUUFBNkIsRUFBcUI7UUFDL0csT0FBTyxJQUFJb0osb0JBQXFCQyxDQUFBQSxRQUFBQSxFQUFVQyxJQUFNdEosRUFBQUEsUUFBQUEsQ0FBQUEsQ0FBQUE7QUFDbEQsS0FBQSxDQUFBO0FBRUE7O01BR0EsV0FBQSxDQUFPMlIseUJBTU4sR0FORCxTQUFPQSx5QkFBQUEsQ0FDTHRJLFFBQWdCLEVBQ2hCbUIsTUFBYyxFQUNkeEssUUFBNkIsRUFDUDtRQUN0QixPQUFPLElBQUl1Syx1QkFBd0JsQixDQUFBQSxRQUFBQSxFQUFVbUIsTUFBUXhLLEVBQUFBLFFBQUFBLENBQUFBLENBQUFBO0FBQ3ZELEtBQUEsQ0FBQTtBQUVBOztNQUdBLFdBQUEsQ0FBTzRSLHdCQUVOLEdBRkQsU0FBT0EseUJBQXlCdkksUUFBZ0IsRUFBRXJKLFFBQTZCLEVBQXVCO0FBQ3BHLFFBQUEsTUFBTSwyRUFBNEUsQ0FBQTtBQUNwRixLQUFBLENBQUE7QUFFQTs7QUFFQyxNQUNELFdBQU82UixDQUFBQSwwQkFPTixHQVBELFNBQU9BLDBCQUNMeEksQ0FBQUEsUUFBZ0IsRUFDaEJtQixNQUFjLEVBQ2RzSCxNQUFjLEVBQ2Q5UixRQUE2QixFQUNOO0FBQ3ZCLFFBQUEsTUFBTSw2RUFBOEUsQ0FBQTtBQUN0RixLQUFBLENBQUE7QUFFQTs7QUFFQyxNQUNELFlBQU8rUixnQkFFTixHQUZELFNBQU9BLGdCQUFBQSxDQUFpQjlFLFFBQXNCLEVBQWU7QUFDM0QsUUFBQSxNQUFNLDZFQUE4RSxDQUFBO0FBQ3RGLEtBQUEsQ0FBQTtBQUVBOztBQUVDLE1BQ0QsWUFBTytFLGdCQUVOLEdBRkQsU0FBT0EsZ0JBQUFBLENBQWlCL0UsUUFBc0IsRUFBZTtBQUMzRCxRQUFBLE1BQU0sNkVBQThFLENBQUE7QUFDdEYsS0FBQSxDQUFBO0FBRUE7O0FBRUMsTUFDRCxZQUFPZ0YsaUJBRU4sR0FGRCxTQUFPQSxpQkFBQUEsQ0FBa0JoRixRQUFzQixFQUFnQjtBQUM3RCxRQUFBLE1BQU0sNkVBQThFLENBQUE7QUFDdEYsS0FBQSxDQUFBOztBQUNELENBQUEsR0FBQTtBQWpIWTZELG1CQUFBQSxHQUFBQSxVQUFBQSxDQUFBQTtBQURaRixJQUFBQSx3QkFBQUEsRUFBQUE7QUFDWUUsQ0FBQUEsRUFBQUEsbUJBQUFBLENBQUFBOzsifQ==
|