occam-nominal 1.0.430 → 1.0.431
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/lib/context/file/nominal.js +1 -5
- package/lib/context/mnemic.js +6 -44
- package/lib/context.js +1 -13
- package/lib/element/assertion/signature.js +10 -5
- package/lib/element/constructor/bracketed.js +1 -6
- package/lib/element/fact/step.js +2 -2
- package/lib/element/signature.js +33 -29
- package/lib/element/term.js +11 -11
- package/lib/process/unification.js +1 -2
- package/lib/process/unify.js +63 -60
- package/lib/utilities/string.js +7 -3
- package/package.json +5 -5
- package/src/context/file/nominal.js +0 -7
- package/src/context/mnemic.js +3 -69
- package/src/context.js +0 -21
- package/src/element/assertion/signature.js +11 -5
- package/src/element/constructor/bracketed.js +0 -8
- package/src/element/fact/step.js +1 -1
- package/src/element/signature.js +36 -35
- package/src/element/term.js +10 -12
- package/src/process/unification.js +0 -2
- package/src/process/unify.js +94 -83
- package/src/utilities/string.js +8 -2
|
@@ -93,7 +93,6 @@ function unifyStepWithSignatureAssertion(step, context, continuation) {
|
|
|
93
93
|
const stepString = step.getString(), factOrSubproofs = context.getFactOrSubproofs(), signatureAssertionString = signatureAssertion.getString();
|
|
94
94
|
context.trace(`Unifying the '${stepString}' step with the '${signatureAssertionString}' signature assertion...`);
|
|
95
95
|
return signatureAssertion.unifyStepAndFactOrSubproofs(step, factOrSubproofs, context, (stepAndFactOrSubproofsUnify)=>{
|
|
96
|
-
let stepUnifiesWithSignatureAssertion = false;
|
|
97
96
|
if (stepAndFactOrSubproofsUnify) {
|
|
98
97
|
stepUnifiesWithSignatureAssertion = true;
|
|
99
98
|
}
|
|
@@ -255,4 +254,4 @@ const unifySteps = [
|
|
|
255
254
|
compareStepToFactOrSubproofs
|
|
256
255
|
];
|
|
257
256
|
|
|
258
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3VuaWZpY2F0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5cbmltcG9ydCB7IGRlY2xhcmUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5cbmZ1bmN0aW9uIHVuaWZ5U3RlcFdpdGhSdWxlKHN0ZXAsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBsZXQgc3RlcFVuaWZpZXNXaXRoUnVsZSA9IGZhbHNlO1xuXG4gIGNvbnN0IHJlZmVyZW5jZSA9IHN0ZXAuZ2V0UmVmZXJlbmNlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNXaXRoUnVsZSk7XG4gIH1cblxuICBjb25zdCBydWxlID0gY29udGV4dC5maW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgaWYgKHJ1bGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzV2l0aFJ1bGUpO1xuICB9XG5cbiAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgIHJ1bGVTdHJpbmcgPSBydWxlLmdldFN0cmluZygpLFxuICAgICAgICBmYWN0T3JTdWJwcm9vZnMgPSBjb250ZXh0LmdldEZhY3RPclN1YnByb29mcygpO1xuXG4gIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB3aXRoIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZS4uLmApO1xuXG4gIHJldHVybiBydWxlLnVuaWZ5U3RlcEFuZEZhY3RPclN1YnByb29mcyhzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIChzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkpID0+IHtcbiAgICBsZXQgc3RlcFVuaWZpZXNXaXRoUnVsZSA9IGZhbHNlO1xuXG4gICAgaWYgKHN0ZXBBbmRGYWN0T3JTdWJwcm9vZnNVbmlmeSkge1xuICAgICAgc3RlcFVuaWZpZXNXaXRoUnVsZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0ZXBVbmlmaWVzV2l0aFJ1bGUpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3J1bGVTdHJpbmd9JyBydWxlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNXaXRoUnVsZSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0ZXBXaXRoQ2xhaW0oc3RlcCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCBzdGVwVW5pZmllc1dpdGhDbGFpbSA9IGZhbHNlO1xuXG4gIGNvbnN0IHJlZmVyZW5jZSA9IHN0ZXAuZ2V0UmVmZXJlbmNlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNXaXRoQ2xhaW0pO1xuICB9XG5cbiAgY29uc3QgY2xhaW0gPSBjb250ZXh0LmZpbmRDbGFpbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgaWYgKGNsYWltID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwVW5pZmllc1dpdGhDbGFpbSk7XG4gIH1cblxuICBjb25zdCBzYXRpc2ZpYWJsZSA9IGNsYWltLmlzU2F0aXNmaWFibGUoKTtcblxuICBpZiAoc2F0aXNmaWFibGUpIHtcbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzV2l0aENsYWltKTtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpLFxuICAgICAgICBjbGFpbVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgZmFjdE9yU3VicHJvb2ZzID0gY29udGV4dC5nZXRGYWN0T3JTdWJwcm9vZnMoKTtcblxuICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbS4uLmApO1xuXG4gIHJldHVybiBjbGFpbS51bmlmeVN0ZXBBbmRGYWN0T3JTdWJwcm9vZnMoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCAoc3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5KSA9PiB7XG4gICAgbGV0IHN0ZXBVbmlmaWVzV2l0aENsYWltID0gZmFsc2U7XG5cbiAgICBpZiAoc3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5KSB7XG4gICAgICBzdGVwVW5pZmllc1dpdGhDbGFpbSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0ZXBVbmlmaWVzV2l0aENsYWltKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB3aXRoIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNXaXRoQ2xhaW0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdW5pZnlTdGVwV2l0aFNjaGVtYUFzc2VydGlvbihzdGVwLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgbGV0IHN0ZXBVbmlmaWVzV2l0aFNjaGVtYUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHNjaGVtYUFzc2VydGlvbiA9IHN0ZXAuZ2V0U2NoZW1hQXNzZXJ0aW9uKCk7XG5cbiAgaWYgKHNjaGVtYUFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNXaXRoU2NoZW1hQXNzZXJ0aW9uKTtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpLFxuICAgICAgICBzY2hlbWFBc3NlcnRpb25TdHJpbmcgPSBzY2hlbWFBc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3NjaGVtYUFzc2VydGlvblN0cmluZ30nIHNjaGVtYSBhc3NlcnRpb24uLi5gKTtcblxuICByZXR1cm4gc2NoZW1hQXNzZXJ0aW9uLnVuaWZ5U3RlcChzdGVwLCBjb250ZXh0LCAoc3RlcFVuaWZpZXMpID0+IHtcbiAgICBsZXQgc3RlcFVuaWZpZXNXaXRoU2NoZW1hQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgICBpZiAoc3RlcFVuaWZpZXMpIHtcbiAgICAgIHN0ZXBVbmlmaWVzV2l0aFNjaGVtYUFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0ZXBVbmlmaWVzV2l0aFNjaGVtYUFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7c2NoZW1hQXNzZXJ0aW9uU3RyaW5nfScgc2NoZW1hIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzV2l0aFNjaGVtYUFzc2VydGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0ZXBXaXRoU2lnbmF0dXJlQXNzZXJ0aW9uKHN0ZXAsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBsZXQgc3RlcFVuaWZpZXNXaXRoU2lnbmF0dXJlQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3Qgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc3RlcC5nZXRTaWduYXR1cmVBc3NlcnRpb24oKTtcblxuICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwVW5pZmllc1dpdGhTaWduYXR1cmVBc3NlcnRpb24pO1xuICB9XG5cbiAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgIGZhY3RPclN1YnByb29mcyA9IGNvbnRleHQuZ2V0RmFjdE9yU3VicHJvb2ZzKCksXG4gICAgICAgIHNpZ25hdHVyZUFzc2VydGlvblN0cmluZyA9IHNpZ25hdHVyZUFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi4uLmApO1xuXG4gIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb24udW5pZnlTdGVwQW5kRmFjdE9yU3VicHJvb2ZzKHN0ZXAsIGZhY3RPclN1YnByb29mcywgY29udGV4dCwgKHN0ZXBBbmRGYWN0T3JTdWJwcm9vZnNVbmlmeSkgPT4ge1xuICAgIGxldCBzdGVwVW5pZmllc1dpdGhTaWduYXR1cmVBc3NlcnRpb24gPSBmYWxzZTtcblxuICAgIGlmIChzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkpIHtcbiAgICAgIHN0ZXBVbmlmaWVzV2l0aFNpZ25hdHVyZUFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0ZXBVbmlmaWVzV2l0aFNpZ25hdHVyZUFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzV2l0aFNpZ25hdHVyZUFzc2VydGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0ZXBBc1F1YWxpZmllZENvbnN0cmFpbnQoc3RlcCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCBzdGVwVW5pZmllc0FzUXVhbGlmaWVkQ29uc3RyYWludCA9IGZhbHNlO1xuXG4gIGNvbnN0IG1ldGFMZXZlbCA9IGNvbnRleHQuaXNNZXRhTGV2ZWwoKTtcblxuICBpZiAoIW1ldGFMZXZlbCkge1xuICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNBc1F1YWxpZmllZENvbnN0cmFpbnQpO1xuICB9XG5cbiAgY29uc3QgcmVmZXJlbmNlID0gc3RlcC5nZXRSZWZlcmVuY2UoKTtcblxuICBpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwVW5pZmllc0FzUXVhbGlmaWVkQ29uc3RyYWludCk7XG4gIH1cblxuICBjb25zdCB7IENvbnN0cmFpbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjb25zdHJhaW50ID0gQ29uc3RyYWludC5mcm9tU3RlcChzdGVwLCBjb250ZXh0KSxcbiAgICAgICAgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYSBjb25zdHJhaW50IHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS4uLmApO1xuXG4gIGRlY2xhcmUoKHN0YXRlKSA9PiB7XG4gICAgY29uc3RyYWludC52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKGNvbnN0cmFpbnQsIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgIHN0ZXBVbmlmaWVzQXNRdWFsaWZpZWRDb25zdHJhaW50ID0gdHJ1ZTtcblxuICAgICAgdmFsaWRhdGVzID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICB9KTtcbiAgfSk7XG5cbiAgaWYgKHN0ZXBVbmlmaWVzQXNRdWFsaWZpZWRDb25zdHJhaW50KSB7XG4gICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYSBjb25zdHJhaW50IHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS5gKTtcbiAgfVxuXG4gIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNBc1F1YWxpZmllZENvbnN0cmFpbnQpO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0ZXBBc1VucXVhbGlmaWVkRXF1YWxpdHkoc3RlcCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCBzdGVwVW5pZmllc0FVbnF1YWxpZmllZEVxdWFsaXR5ID0gZmFsc2U7XG5cbiAgY29uc3QgcXVhbGlmaWVkID0gc3RlcC5pc1F1YWxpZmllZCgpO1xuXG4gIGlmIChxdWFsaWZpZWQpIHtcbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzQVVucXVhbGlmaWVkRXF1YWxpdHkpO1xuICB9XG5cbiAgY29uc3QgeyBFcXVhbGl0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0ZXAuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgIGVxdWFsaXR5ID0gRXF1YWxpdHkuZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChlcXVhbGl0eSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNBVW5xdWFsaWZpZWRFcXVhbGl0eSk7XG4gIH1cblxuICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKTtcblxuICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYW4gdW5xdWFsaWZpZWQgZXF1YWxpdHkuLi5gKTtcblxuICBzdGVwVW5pZmllc0FVbnF1YWxpZmllZEVxdWFsaXR5ID0gdHJ1ZTtcblxuICBpZiAoc3RlcFVuaWZpZXNBVW5xdWFsaWZpZWRFcXVhbGl0eSkge1xuICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIGFzIGFuIHVucXVhbGlmaWVkIGVxdWFsaXR5LmApO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwVW5pZmllc0FVbnF1YWxpZmllZEVxdWFsaXR5KTtcbn1cblxuZnVuY3Rpb24gdW5pZnlTdGVwQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb24oc3RlcCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCBzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRUeXBlQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgcXVhbGlmaWVkID0gc3RlcC5pc1F1YWxpZmllZCgpO1xuXG4gIGlmIChxdWFsaWZpZWQpIHtcbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb24pO1xuICB9XG5cbiAgY29uc3QgeyBUeXBlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RlcC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgdHlwZUFzc2VydGlvbiA9IFR5cGVBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmICh0eXBlQXNzZXJ0aW9uID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRUeXBlQXNzZXJ0aW9uKTtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpO1xuXG4gIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhbiB1bnF1YWxpZmllZCB0eXBlIGFzc2VydGlvbi4uLmApO1xuXG4gIHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb24gPSB0cnVlO1xuXG4gIGlmIChzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRUeXBlQXNzZXJ0aW9uKSB7XG4gICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYW4gdW5xdWFsaWZpZWQgdHlwZSBhc3NlcnRpb24uYCk7XG4gIH1cblxuICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb24pO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0ZXBBc1VucXVhbGlmaWVkUHJvcGVydHlBc3NlcnRpb24oc3RlcCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCBzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHF1YWxpZmllZCA9IHN0ZXAuaXNRdWFsaWZpZWQoKTtcblxuICBpZiAocXVhbGlmaWVkKSB7XG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbik7XG4gIH1cblxuICBjb25zdCB7IFByb3BlcnR5QXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RlcC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgcHJvcGVydHlBc3NlcnRpb24gPSBQcm9wZXJ0eUFzc2VydGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbik7XG4gIH1cblxuICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKTtcblxuICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYW4gdW5xdWFsaWZpZWQgcHJvcGVydHkgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkUHJvcGVydHlBc3NlcnRpb24gPSB0cnVlO1xuXG4gIGlmIChzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbikge1xuICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIGFzIGFuIHVucXVhbGlmaWVkIHByb3BlcnR5IGFzc2VydGlvbi5gKTtcbiAgfVxuXG4gIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkUHJvcGVydHlBc3NlcnRpb24pO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0ZXBBc1VucXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uKHN0ZXAsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBsZXQgc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgcXVhbGlmaWVkID0gc3RlcC5pc1F1YWxpZmllZCgpO1xuXG4gIGlmIChxdWFsaWZpZWQpIHtcbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbik7XG4gIH1cblxuICBjb25zdCB7IFNpZ25hdHVyZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0ZXAuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IFNpZ25hdHVyZUFzc2VydGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHNpZ25hdHVyZUFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uKTtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpO1xuXG4gIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhIHNpZ25hdHVyZSBhc3NlcnRpb24uLi5gKTtcblxuICBzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24gPSB0cnVlO1xuXG4gIGlmIChzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24pIHtcbiAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhIHNpZ25hdHVyZSBhc3NlcnRpb24uYCk7XG4gIH1cblxuICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbik7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5U3RlcEFzUXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uKHN0ZXAsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBsZXQgc3RlcFVuaWZpZXNBc1F1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHJlZmVyZW5jZSA9IHN0ZXAuZ2V0UmVmZXJlbmNlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNBc1F1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbik7XG4gIH1cblxuICBjb25zdCBjbGFpbSA9IGNvbnRleHQuZmluZENsYWltQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICBpZiAoY2xhaW0gPT09IG51bGwpIHtcbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzQXNRdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24pO1xuICB9XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0ZXAuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzQXNRdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24pO1xuICB9XG5cbiAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gY29udGV4dC5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUpO1xuXG4gIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhIHNpZ25hdHVyZSBhc3NlcnRpb24gd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLi4uYCk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbi51bmlmeUNsYWltKGNsYWltLCBjb250ZXh0LCAoY2xhaW1VbmlmaWVzKSA9PiB7XG4gICAgbGV0IHN0ZXBVbmlmaWVzQXNRdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24gPSBmYWxzZTtcblxuICAgIGlmIChjbGFpbVVuaWZpZXMpIHtcbiAgICAgIHN0ZXBVbmlmaWVzQXNRdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGVwVW5pZmllc0FzUXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhIHNpZ25hdHVyZSBhc3NlcnRpb24gd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNBc1F1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlU3RlcFRvRmFjdE9yU3VicHJvb2ZzKHN0ZXAsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBsZXQgc3RlcENvbXBhcmVzVG9GYWN0T3JTdWJwcm9vZnMgPSBmYWxzZTtcblxuICBjb25zdCBxdWFsaWZpZWQgPSBzdGVwLmlzUXVhbGlmaWVkKCk7XG5cbiAgaWYgKHF1YWxpZmllZCkge1xuICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcENvbXBhcmVzVG9GYWN0T3JTdWJwcm9vZnMpO1xuICB9XG5cbiAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgIGZhY3RPclN1YnByb29mcyA9IGNvbnRleHQuZ2V0RmFjdE9yU3VicHJvb2ZzKCk7XG5cbiAgY29udGV4dC50cmFjZShgQ29tcGFyaW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB0byBmYWN0cyBvciBzdWJwcm9vZnMuLi5gKTtcblxuICBzdGVwQ29tcGFyZXNUb0ZhY3RPclN1YnByb29mcyA9IHN0ZXAuY29tcGFyZUZhY3RPclN1YnByb29mcyhmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQpO1xuXG4gIGlmIChzdGVwQ29tcGFyZXNUb0ZhY3RPclN1YnByb29mcykge1xuICAgIGNvbnRleHQuZGVidWcoYC4uLmNvbXBhcmVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB0byBmYWN0cyBvciBzdWJwcm9vZnMuYCk7XG4gIH1cblxuICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBDb21wYXJlc1RvRmFjdE9yU3VicHJvb2ZzKTtcbn1cblxuZXhwb3J0IGNvbnN0IHVuaWZ5U3RlcHMgPSBbXG4gIHVuaWZ5U3RlcFdpdGhSdWxlLFxuICB1bmlmeVN0ZXBXaXRoQ2xhaW0sXG4gIHVuaWZ5U3RlcFdpdGhTY2hlbWFBc3NlcnRpb24sXG4gIHVuaWZ5U3RlcFdpdGhTaWduYXR1cmVBc3NlcnRpb24sXG4gIHVuaWZ5U3RlcEFzUXVhbGlmaWVkQ29uc3RyYWludCxcbiAgdW5pZnlTdGVwQXNVbnF1YWxpZmllZEVxdWFsaXR5LFxuICB1bmlmeVN0ZXBBc1VucXVhbGlmaWVkVHlwZUFzc2VydGlvbixcbiAgdW5pZnlTdGVwQXNVbnF1YWxpZmllZFByb3BlcnR5QXNzZXJ0aW9uLFxuICB1bmlmeVN0ZXBBc1VucXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uLFxuICB1bmlmeVN0ZXBBc1F1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbixcbiAgY29tcGFyZVN0ZXBUb0ZhY3RPclN1YnByb29mc1xuXTtcbiJdLCJuYW1lcyI6WyJ1bmlmeVN0ZXBzIiwidW5pZnlTdGVwV2l0aFJ1bGUiLCJzdGVwIiwiY29udGV4dCIsImNvbnRpbnVhdGlvbiIsInN0ZXBVbmlmaWVzV2l0aFJ1bGUiLCJyZWZlcmVuY2UiLCJnZXRSZWZlcmVuY2UiLCJydWxlIiwiZmluZFJ1bGVCeVJlZmVyZW5jZSIsInN0ZXBTdHJpbmciLCJnZXRTdHJpbmciLCJydWxlU3RyaW5nIiwiZmFjdE9yU3VicHJvb2ZzIiwiZ2V0RmFjdE9yU3VicHJvb2ZzIiwidHJhY2UiLCJ1bmlmeVN0ZXBBbmRGYWN0T3JTdWJwcm9vZnMiLCJzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkiLCJkZWJ1ZyIsInVuaWZ5U3RlcFdpdGhDbGFpbSIsInN0ZXBVbmlmaWVzV2l0aENsYWltIiwiY2xhaW0iLCJmaW5kQ2xhaW1CeVJlZmVyZW5jZSIsInNhdGlzZmlhYmxlIiwiaXNTYXRpc2ZpYWJsZSIsImNsYWltU3RyaW5nIiwidW5pZnlTdGVwV2l0aFNjaGVtYUFzc2VydGlvbiIsInN0ZXBVbmlmaWVzV2l0aFNjaGVtYUFzc2VydGlvbiIsInNjaGVtYUFzc2VydGlvbiIsImdldFNjaGVtYUFzc2VydGlvbiIsInNjaGVtYUFzc2VydGlvblN0cmluZyIsInVuaWZ5U3RlcCIsInN0ZXBVbmlmaWVzIiwidW5pZnlTdGVwV2l0aFNpZ25hdHVyZUFzc2VydGlvbiIsInN0ZXBVbmlmaWVzV2l0aFNpZ25hdHVyZUFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvbiIsImdldFNpZ25hdHVyZUFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvblN0cmluZyIsInVuaWZ5U3RlcEFzUXVhbGlmaWVkQ29uc3RyYWludCIsInN0ZXBVbmlmaWVzQXNRdWFsaWZpZWRDb25zdHJhaW50IiwibWV0YUxldmVsIiwiaXNNZXRhTGV2ZWwiLCJDb25zdHJhaW50IiwiZWxlbWVudHMiLCJjb25zdHJhaW50IiwiZnJvbVN0ZXAiLCJyZWZlcmVuY2VTdHJpbmciLCJkZWNsYXJlIiwic3RhdGUiLCJ2YWxpZGF0ZSIsInZhbGlkYXRlcyIsInVuaWZ5U3RlcEFzVW5xdWFsaWZpZWRFcXVhbGl0eSIsInN0ZXBVbmlmaWVzQVVucXVhbGlmaWVkRXF1YWxpdHkiLCJxdWFsaWZpZWQiLCJpc1F1YWxpZmllZCIsIkVxdWFsaXR5Iiwic3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiZXF1YWxpdHkiLCJmcm9tU3RhdGVtZW50IiwidW5pZnlTdGVwQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb24iLCJzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRUeXBlQXNzZXJ0aW9uIiwiVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJ1bmlmeVN0ZXBBc1VucXVhbGlmaWVkUHJvcGVydHlBc3NlcnRpb24iLCJzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbiIsIlByb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb24iLCJ1bmlmeVN0ZXBBc1VucXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uIiwic3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uIiwiU2lnbmF0dXJlQXNzZXJ0aW9uIiwidW5pZnlTdGVwQXNRdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24iLCJzdGVwVW5pZmllc0FzUXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uIiwic3RhdGVtZW50Tm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJ1bmlmeUNsYWltIiwiY2xhaW1VbmlmaWVzIiwiY29tcGFyZVN0ZXBUb0ZhY3RPclN1YnByb29mcyIsInN0ZXBDb21wYXJlc1RvRmFjdE9yU3VicHJvb2ZzIiwiY29tcGFyZUZhY3RPclN1YnByb29mcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBa1hhQTs7O2VBQUFBOzs7aUVBaFhRO3VCQUVHOzs7Ozs7QUFFeEIsU0FBU0Msa0JBQWtCQyxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsWUFBWTtJQUNwRCxJQUFJQyxzQkFBc0I7SUFFMUIsTUFBTUMsWUFBWUosS0FBS0ssWUFBWTtJQUVuQyxJQUFJRCxjQUFjLE1BQU07UUFDdEIsT0FBT0YsYUFBYUM7SUFDdEI7SUFFQSxNQUFNRyxPQUFPTCxRQUFRTSxtQkFBbUIsQ0FBQ0g7SUFFekMsSUFBSUUsU0FBUyxNQUFNO1FBQ2pCLE9BQU9KLGFBQWFDO0lBQ3RCO0lBRUEsTUFBTUssYUFBYVIsS0FBS1MsU0FBUyxJQUMzQkMsYUFBYUosS0FBS0csU0FBUyxJQUMzQkUsa0JBQWtCVixRQUFRVyxrQkFBa0I7SUFFbERYLFFBQVFZLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRUwsV0FBVyxpQkFBaUIsRUFBRUUsV0FBVyxTQUFTLENBQUM7SUFFbEYsT0FBT0osS0FBS1EsMkJBQTJCLENBQUNkLE1BQU1XLGlCQUFpQlYsU0FBUyxDQUFDYztRQUN2RSxJQUFJWixzQkFBc0I7UUFFMUIsSUFBSVksNkJBQTZCO1lBQy9CWixzQkFBc0I7UUFDeEI7UUFFQSxJQUFJQSxxQkFBcUI7WUFDdkJGLFFBQVFlLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFUixXQUFXLGlCQUFpQixFQUFFRSxXQUFXLE9BQU8sQ0FBQztRQUNwRjtRQUVBLE9BQU9SLGFBQWFDO0lBQ3RCO0FBQ0Y7QUFFQSxTQUFTYyxtQkFBbUJqQixJQUFJLEVBQUVDLE9BQU8sRUFBRUMsWUFB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
|
|
257
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3VuaWZpY2F0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5cbmltcG9ydCB7IGRlY2xhcmUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5cbmZ1bmN0aW9uIHVuaWZ5U3RlcFdpdGhSdWxlKHN0ZXAsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBsZXQgc3RlcFVuaWZpZXNXaXRoUnVsZSA9IGZhbHNlO1xuXG4gIGNvbnN0IHJlZmVyZW5jZSA9IHN0ZXAuZ2V0UmVmZXJlbmNlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNXaXRoUnVsZSk7XG4gIH1cblxuICBjb25zdCBydWxlID0gY29udGV4dC5maW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgaWYgKHJ1bGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzV2l0aFJ1bGUpO1xuICB9XG5cbiAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgIHJ1bGVTdHJpbmcgPSBydWxlLmdldFN0cmluZygpLFxuICAgICAgICBmYWN0T3JTdWJwcm9vZnMgPSBjb250ZXh0LmdldEZhY3RPclN1YnByb29mcygpO1xuXG4gIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB3aXRoIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZS4uLmApO1xuXG4gIHJldHVybiBydWxlLnVuaWZ5U3RlcEFuZEZhY3RPclN1YnByb29mcyhzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIChzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkpID0+IHtcbiAgICBsZXQgc3RlcFVuaWZpZXNXaXRoUnVsZSA9IGZhbHNlO1xuXG4gICAgaWYgKHN0ZXBBbmRGYWN0T3JTdWJwcm9vZnNVbmlmeSkge1xuICAgICAgc3RlcFVuaWZpZXNXaXRoUnVsZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0ZXBVbmlmaWVzV2l0aFJ1bGUpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3J1bGVTdHJpbmd9JyBydWxlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNXaXRoUnVsZSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0ZXBXaXRoQ2xhaW0oc3RlcCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCBzdGVwVW5pZmllc1dpdGhDbGFpbSA9IGZhbHNlO1xuXG4gIGNvbnN0IHJlZmVyZW5jZSA9IHN0ZXAuZ2V0UmVmZXJlbmNlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNXaXRoQ2xhaW0pO1xuICB9XG5cbiAgY29uc3QgY2xhaW0gPSBjb250ZXh0LmZpbmRDbGFpbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgaWYgKGNsYWltID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwVW5pZmllc1dpdGhDbGFpbSk7XG4gIH1cblxuICBjb25zdCBzYXRpc2ZpYWJsZSA9IGNsYWltLmlzU2F0aXNmaWFibGUoKTtcblxuICBpZiAoc2F0aXNmaWFibGUpIHtcbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzV2l0aENsYWltKTtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpLFxuICAgICAgICBjbGFpbVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgZmFjdE9yU3VicHJvb2ZzID0gY29udGV4dC5nZXRGYWN0T3JTdWJwcm9vZnMoKTtcblxuICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbS4uLmApO1xuXG4gIHJldHVybiBjbGFpbS51bmlmeVN0ZXBBbmRGYWN0T3JTdWJwcm9vZnMoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCAoc3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5KSA9PiB7XG4gICAgbGV0IHN0ZXBVbmlmaWVzV2l0aENsYWltID0gZmFsc2U7XG5cbiAgICBpZiAoc3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5KSB7XG4gICAgICBzdGVwVW5pZmllc1dpdGhDbGFpbSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0ZXBVbmlmaWVzV2l0aENsYWltKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB3aXRoIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNXaXRoQ2xhaW0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdW5pZnlTdGVwV2l0aFNjaGVtYUFzc2VydGlvbihzdGVwLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgbGV0IHN0ZXBVbmlmaWVzV2l0aFNjaGVtYUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHNjaGVtYUFzc2VydGlvbiA9IHN0ZXAuZ2V0U2NoZW1hQXNzZXJ0aW9uKCk7XG5cbiAgaWYgKHNjaGVtYUFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNXaXRoU2NoZW1hQXNzZXJ0aW9uKTtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpLFxuICAgICAgICBzY2hlbWFBc3NlcnRpb25TdHJpbmcgPSBzY2hlbWFBc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3NjaGVtYUFzc2VydGlvblN0cmluZ30nIHNjaGVtYSBhc3NlcnRpb24uLi5gKTtcblxuICByZXR1cm4gc2NoZW1hQXNzZXJ0aW9uLnVuaWZ5U3RlcChzdGVwLCBjb250ZXh0LCAoc3RlcFVuaWZpZXMpID0+IHtcbiAgICBsZXQgc3RlcFVuaWZpZXNXaXRoU2NoZW1hQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgICBpZiAoc3RlcFVuaWZpZXMpIHtcbiAgICAgIHN0ZXBVbmlmaWVzV2l0aFNjaGVtYUFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0ZXBVbmlmaWVzV2l0aFNjaGVtYUFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7c2NoZW1hQXNzZXJ0aW9uU3RyaW5nfScgc2NoZW1hIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzV2l0aFNjaGVtYUFzc2VydGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0ZXBXaXRoU2lnbmF0dXJlQXNzZXJ0aW9uKHN0ZXAsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBsZXQgc3RlcFVuaWZpZXNXaXRoU2lnbmF0dXJlQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3Qgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc3RlcC5nZXRTaWduYXR1cmVBc3NlcnRpb24oKTtcblxuICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwVW5pZmllc1dpdGhTaWduYXR1cmVBc3NlcnRpb24pO1xuICB9XG5cbiAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgIGZhY3RPclN1YnByb29mcyA9IGNvbnRleHQuZ2V0RmFjdE9yU3VicHJvb2ZzKCksXG4gICAgICAgIHNpZ25hdHVyZUFzc2VydGlvblN0cmluZyA9IHNpZ25hdHVyZUFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi4uLmApO1xuXG4gIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb24udW5pZnlTdGVwQW5kRmFjdE9yU3VicHJvb2ZzKHN0ZXAsIGZhY3RPclN1YnByb29mcywgY29udGV4dCwgKHN0ZXBBbmRGYWN0T3JTdWJwcm9vZnNVbmlmeSkgPT4ge1xuICAgIGlmIChzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkpIHtcbiAgICAgIHN0ZXBVbmlmaWVzV2l0aFNpZ25hdHVyZUFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0ZXBVbmlmaWVzV2l0aFNpZ25hdHVyZUFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzV2l0aFNpZ25hdHVyZUFzc2VydGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0ZXBBc1F1YWxpZmllZENvbnN0cmFpbnQoc3RlcCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCBzdGVwVW5pZmllc0FzUXVhbGlmaWVkQ29uc3RyYWludCA9IGZhbHNlO1xuXG4gIGNvbnN0IG1ldGFMZXZlbCA9IGNvbnRleHQuaXNNZXRhTGV2ZWwoKTtcblxuICBpZiAoIW1ldGFMZXZlbCkge1xuICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNBc1F1YWxpZmllZENvbnN0cmFpbnQpO1xuICB9XG5cbiAgY29uc3QgcmVmZXJlbmNlID0gc3RlcC5nZXRSZWZlcmVuY2UoKTtcblxuICBpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwVW5pZmllc0FzUXVhbGlmaWVkQ29uc3RyYWludCk7XG4gIH1cblxuICBjb25zdCB7IENvbnN0cmFpbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjb25zdHJhaW50ID0gQ29uc3RyYWludC5mcm9tU3RlcChzdGVwLCBjb250ZXh0KSxcbiAgICAgICAgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYSBjb25zdHJhaW50IHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS4uLmApO1xuXG4gIGRlY2xhcmUoKHN0YXRlKSA9PiB7XG4gICAgY29uc3RyYWludC52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKGNvbnN0cmFpbnQsIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgIHN0ZXBVbmlmaWVzQXNRdWFsaWZpZWRDb25zdHJhaW50ID0gdHJ1ZTtcblxuICAgICAgdmFsaWRhdGVzID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICB9KTtcbiAgfSk7XG5cbiAgaWYgKHN0ZXBVbmlmaWVzQXNRdWFsaWZpZWRDb25zdHJhaW50KSB7XG4gICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYSBjb25zdHJhaW50IHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS5gKTtcbiAgfVxuXG4gIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNBc1F1YWxpZmllZENvbnN0cmFpbnQpO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0ZXBBc1VucXVhbGlmaWVkRXF1YWxpdHkoc3RlcCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCBzdGVwVW5pZmllc0FVbnF1YWxpZmllZEVxdWFsaXR5ID0gZmFsc2U7XG5cbiAgY29uc3QgcXVhbGlmaWVkID0gc3RlcC5pc1F1YWxpZmllZCgpO1xuXG4gIGlmIChxdWFsaWZpZWQpIHtcbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzQVVucXVhbGlmaWVkRXF1YWxpdHkpO1xuICB9XG5cbiAgY29uc3QgeyBFcXVhbGl0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0ZXAuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgIGVxdWFsaXR5ID0gRXF1YWxpdHkuZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChlcXVhbGl0eSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNBVW5xdWFsaWZpZWRFcXVhbGl0eSk7XG4gIH1cblxuICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKTtcblxuICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYW4gdW5xdWFsaWZpZWQgZXF1YWxpdHkuLi5gKTtcblxuICBzdGVwVW5pZmllc0FVbnF1YWxpZmllZEVxdWFsaXR5ID0gdHJ1ZTtcblxuICBpZiAoc3RlcFVuaWZpZXNBVW5xdWFsaWZpZWRFcXVhbGl0eSkge1xuICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIGFzIGFuIHVucXVhbGlmaWVkIGVxdWFsaXR5LmApO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwVW5pZmllc0FVbnF1YWxpZmllZEVxdWFsaXR5KTtcbn1cblxuZnVuY3Rpb24gdW5pZnlTdGVwQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb24oc3RlcCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCBzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRUeXBlQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgcXVhbGlmaWVkID0gc3RlcC5pc1F1YWxpZmllZCgpO1xuXG4gIGlmIChxdWFsaWZpZWQpIHtcbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb24pO1xuICB9XG5cbiAgY29uc3QgeyBUeXBlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RlcC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgdHlwZUFzc2VydGlvbiA9IFR5cGVBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmICh0eXBlQXNzZXJ0aW9uID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRUeXBlQXNzZXJ0aW9uKTtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpO1xuXG4gIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhbiB1bnF1YWxpZmllZCB0eXBlIGFzc2VydGlvbi4uLmApO1xuXG4gIHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb24gPSB0cnVlO1xuXG4gIGlmIChzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRUeXBlQXNzZXJ0aW9uKSB7XG4gICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYW4gdW5xdWFsaWZpZWQgdHlwZSBhc3NlcnRpb24uYCk7XG4gIH1cblxuICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb24pO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0ZXBBc1VucXVhbGlmaWVkUHJvcGVydHlBc3NlcnRpb24oc3RlcCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCBzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHF1YWxpZmllZCA9IHN0ZXAuaXNRdWFsaWZpZWQoKTtcblxuICBpZiAocXVhbGlmaWVkKSB7XG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbik7XG4gIH1cblxuICBjb25zdCB7IFByb3BlcnR5QXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RlcC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgcHJvcGVydHlBc3NlcnRpb24gPSBQcm9wZXJ0eUFzc2VydGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbik7XG4gIH1cblxuICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKTtcblxuICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYW4gdW5xdWFsaWZpZWQgcHJvcGVydHkgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkUHJvcGVydHlBc3NlcnRpb24gPSB0cnVlO1xuXG4gIGlmIChzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbikge1xuICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIGFzIGFuIHVucXVhbGlmaWVkIHByb3BlcnR5IGFzc2VydGlvbi5gKTtcbiAgfVxuXG4gIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkUHJvcGVydHlBc3NlcnRpb24pO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0ZXBBc1VucXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uKHN0ZXAsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBsZXQgc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgcXVhbGlmaWVkID0gc3RlcC5pc1F1YWxpZmllZCgpO1xuXG4gIGlmIChxdWFsaWZpZWQpIHtcbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbik7XG4gIH1cblxuICBjb25zdCB7IFNpZ25hdHVyZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0ZXAuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IFNpZ25hdHVyZUFzc2VydGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHNpZ25hdHVyZUFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uKTtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpO1xuXG4gIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhIHNpZ25hdHVyZSBhc3NlcnRpb24uLi5gKTtcblxuICBzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24gPSB0cnVlO1xuXG4gIGlmIChzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24pIHtcbiAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhIHNpZ25hdHVyZSBhc3NlcnRpb24uYCk7XG4gIH1cblxuICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbik7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5U3RlcEFzUXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uKHN0ZXAsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBsZXQgc3RlcFVuaWZpZXNBc1F1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHJlZmVyZW5jZSA9IHN0ZXAuZ2V0UmVmZXJlbmNlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNBc1F1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbik7XG4gIH1cblxuICBjb25zdCBjbGFpbSA9IGNvbnRleHQuZmluZENsYWltQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICBpZiAoY2xhaW0gPT09IG51bGwpIHtcbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzQXNRdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24pO1xuICB9XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0ZXAuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzQXNRdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24pO1xuICB9XG5cbiAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gY29udGV4dC5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUpO1xuXG4gIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhIHNpZ25hdHVyZSBhc3NlcnRpb24gd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLi4uYCk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbi51bmlmeUNsYWltKGNsYWltLCBjb250ZXh0LCAoY2xhaW1VbmlmaWVzKSA9PiB7XG4gICAgbGV0IHN0ZXBVbmlmaWVzQXNRdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24gPSBmYWxzZTtcblxuICAgIGlmIChjbGFpbVVuaWZpZXMpIHtcbiAgICAgIHN0ZXBVbmlmaWVzQXNRdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGVwVW5pZmllc0FzUXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhIHNpZ25hdHVyZSBhc3NlcnRpb24gd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNBc1F1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlU3RlcFRvRmFjdE9yU3VicHJvb2ZzKHN0ZXAsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBsZXQgc3RlcENvbXBhcmVzVG9GYWN0T3JTdWJwcm9vZnMgPSBmYWxzZTtcblxuICBjb25zdCBxdWFsaWZpZWQgPSBzdGVwLmlzUXVhbGlmaWVkKCk7XG5cbiAgaWYgKHF1YWxpZmllZCkge1xuICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcENvbXBhcmVzVG9GYWN0T3JTdWJwcm9vZnMpO1xuICB9XG5cbiAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgIGZhY3RPclN1YnByb29mcyA9IGNvbnRleHQuZ2V0RmFjdE9yU3VicHJvb2ZzKCk7XG5cbiAgY29udGV4dC50cmFjZShgQ29tcGFyaW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB0byBmYWN0cyBvciBzdWJwcm9vZnMuLi5gKTtcblxuICBzdGVwQ29tcGFyZXNUb0ZhY3RPclN1YnByb29mcyA9IHN0ZXAuY29tcGFyZUZhY3RPclN1YnByb29mcyhmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQpO1xuXG4gIGlmIChzdGVwQ29tcGFyZXNUb0ZhY3RPclN1YnByb29mcykge1xuICAgIGNvbnRleHQuZGVidWcoYC4uLmNvbXBhcmVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB0byBmYWN0cyBvciBzdWJwcm9vZnMuYCk7XG4gIH1cblxuICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBDb21wYXJlc1RvRmFjdE9yU3VicHJvb2ZzKTtcbn1cblxuZXhwb3J0IGNvbnN0IHVuaWZ5U3RlcHMgPSBbXG4gIHVuaWZ5U3RlcFdpdGhSdWxlLFxuICB1bmlmeVN0ZXBXaXRoQ2xhaW0sXG4gIHVuaWZ5U3RlcFdpdGhTY2hlbWFBc3NlcnRpb24sXG4gIHVuaWZ5U3RlcFdpdGhTaWduYXR1cmVBc3NlcnRpb24sXG4gIHVuaWZ5U3RlcEFzUXVhbGlmaWVkQ29uc3RyYWludCxcbiAgdW5pZnlTdGVwQXNVbnF1YWxpZmllZEVxdWFsaXR5LFxuICB1bmlmeVN0ZXBBc1VucXVhbGlmaWVkVHlwZUFzc2VydGlvbixcbiAgdW5pZnlTdGVwQXNVbnF1YWxpZmllZFByb3BlcnR5QXNzZXJ0aW9uLFxuICB1bmlmeVN0ZXBBc1VucXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uLFxuICB1bmlmeVN0ZXBBc1F1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbixcbiAgY29tcGFyZVN0ZXBUb0ZhY3RPclN1YnByb29mc1xuXTtcbiJdLCJuYW1lcyI6WyJ1bmlmeVN0ZXBzIiwidW5pZnlTdGVwV2l0aFJ1bGUiLCJzdGVwIiwiY29udGV4dCIsImNvbnRpbnVhdGlvbiIsInN0ZXBVbmlmaWVzV2l0aFJ1bGUiLCJyZWZlcmVuY2UiLCJnZXRSZWZlcmVuY2UiLCJydWxlIiwiZmluZFJ1bGVCeVJlZmVyZW5jZSIsInN0ZXBTdHJpbmciLCJnZXRTdHJpbmciLCJydWxlU3RyaW5nIiwiZmFjdE9yU3VicHJvb2ZzIiwiZ2V0RmFjdE9yU3VicHJvb2ZzIiwidHJhY2UiLCJ1bmlmeVN0ZXBBbmRGYWN0T3JTdWJwcm9vZnMiLCJzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkiLCJkZWJ1ZyIsInVuaWZ5U3RlcFdpdGhDbGFpbSIsInN0ZXBVbmlmaWVzV2l0aENsYWltIiwiY2xhaW0iLCJmaW5kQ2xhaW1CeVJlZmVyZW5jZSIsInNhdGlzZmlhYmxlIiwiaXNTYXRpc2ZpYWJsZSIsImNsYWltU3RyaW5nIiwidW5pZnlTdGVwV2l0aFNjaGVtYUFzc2VydGlvbiIsInN0ZXBVbmlmaWVzV2l0aFNjaGVtYUFzc2VydGlvbiIsInNjaGVtYUFzc2VydGlvbiIsImdldFNjaGVtYUFzc2VydGlvbiIsInNjaGVtYUFzc2VydGlvblN0cmluZyIsInVuaWZ5U3RlcCIsInN0ZXBVbmlmaWVzIiwidW5pZnlTdGVwV2l0aFNpZ25hdHVyZUFzc2VydGlvbiIsInN0ZXBVbmlmaWVzV2l0aFNpZ25hdHVyZUFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvbiIsImdldFNpZ25hdHVyZUFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvblN0cmluZyIsInVuaWZ5U3RlcEFzUXVhbGlmaWVkQ29uc3RyYWludCIsInN0ZXBVbmlmaWVzQXNRdWFsaWZpZWRDb25zdHJhaW50IiwibWV0YUxldmVsIiwiaXNNZXRhTGV2ZWwiLCJDb25zdHJhaW50IiwiZWxlbWVudHMiLCJjb25zdHJhaW50IiwiZnJvbVN0ZXAiLCJyZWZlcmVuY2VTdHJpbmciLCJkZWNsYXJlIiwic3RhdGUiLCJ2YWxpZGF0ZSIsInZhbGlkYXRlcyIsInVuaWZ5U3RlcEFzVW5xdWFsaWZpZWRFcXVhbGl0eSIsInN0ZXBVbmlmaWVzQVVucXVhbGlmaWVkRXF1YWxpdHkiLCJxdWFsaWZpZWQiLCJpc1F1YWxpZmllZCIsIkVxdWFsaXR5Iiwic3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiZXF1YWxpdHkiLCJmcm9tU3RhdGVtZW50IiwidW5pZnlTdGVwQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb24iLCJzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRUeXBlQXNzZXJ0aW9uIiwiVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJ1bmlmeVN0ZXBBc1VucXVhbGlmaWVkUHJvcGVydHlBc3NlcnRpb24iLCJzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbiIsIlByb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb24iLCJ1bmlmeVN0ZXBBc1VucXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uIiwic3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uIiwiU2lnbmF0dXJlQXNzZXJ0aW9uIiwidW5pZnlTdGVwQXNRdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24iLCJzdGVwVW5pZmllc0FzUXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uIiwic3RhdGVtZW50Tm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJ1bmlmeUNsYWltIiwiY2xhaW1VbmlmaWVzIiwiY29tcGFyZVN0ZXBUb0ZhY3RPclN1YnByb29mcyIsInN0ZXBDb21wYXJlc1RvRmFjdE9yU3VicHJvb2ZzIiwiY29tcGFyZUZhY3RPclN1YnByb29mcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBZ1hhQTs7O2VBQUFBOzs7aUVBOVdRO3VCQUVHOzs7Ozs7QUFFeEIsU0FBU0Msa0JBQWtCQyxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsWUFBWTtJQUNwRCxJQUFJQyxzQkFBc0I7SUFFMUIsTUFBTUMsWUFBWUosS0FBS0ssWUFBWTtJQUVuQyxJQUFJRCxjQUFjLE1BQU07UUFDdEIsT0FBT0YsYUFBYUM7SUFDdEI7SUFFQSxNQUFNRyxPQUFPTCxRQUFRTSxtQkFBbUIsQ0FBQ0g7SUFFekMsSUFBSUUsU0FBUyxNQUFNO1FBQ2pCLE9BQU9KLGFBQWFDO0lBQ3RCO0lBRUEsTUFBTUssYUFBYVIsS0FBS1MsU0FBUyxJQUMzQkMsYUFBYUosS0FBS0csU0FBUyxJQUMzQkUsa0JBQWtCVixRQUFRVyxrQkFBa0I7SUFFbERYLFFBQVFZLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRUwsV0FBVyxpQkFBaUIsRUFBRUUsV0FBVyxTQUFTLENBQUM7SUFFbEYsT0FBT0osS0FBS1EsMkJBQTJCLENBQUNkLE1BQU1XLGlCQUFpQlYsU0FBUyxDQUFDYztRQUN2RSxJQUFJWixzQkFBc0I7UUFFMUIsSUFBSVksNkJBQTZCO1lBQy9CWixzQkFBc0I7UUFDeEI7UUFFQSxJQUFJQSxxQkFBcUI7WUFDdkJGLFFBQVFlLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFUixXQUFXLGlCQUFpQixFQUFFRSxXQUFXLE9BQU8sQ0FBQztRQUNwRjtRQUVBLE9BQU9SLGFBQWFDO0lBQ3RCO0FBQ0Y7QUFFQSxTQUFTYyxtQkFBbUJqQixJQUFJLEVBQUVDLE9BQU8sRUFBRUMsWUFBWTtJQUNyRCxJQUFJZ0IsdUJBQXVCO0lBRTNCLE1BQU1kLFlBQVlKLEtBQUtLLFlBQVk7SUFF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
|
package/lib/process/unify.js
CHANGED
|
@@ -38,7 +38,6 @@ const _occamquery = require("occam-query");
|
|
|
38
38
|
const _occamlanguages = require("occam-languages");
|
|
39
39
|
const _continuationZip = /*#__PURE__*/ _interop_require_default(require("../pass/continuationZip"));
|
|
40
40
|
const _state = require("../utilities/state");
|
|
41
|
-
const _context = require("../utilities/context");
|
|
42
41
|
const _metaTypeNames = require("../metaTypeNames");
|
|
43
42
|
const _element = require("../utilities/element");
|
|
44
43
|
function _interop_require_default(obj) {
|
|
@@ -56,27 +55,39 @@ class ContinuationZipPass extends _continuationZip.default {
|
|
|
56
55
|
}
|
|
57
56
|
class UnifyStatementPass extends _occamlanguages.ContinuationZipPass {
|
|
58
57
|
static maps = [
|
|
59
|
-
{
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
58
|
+
// {
|
|
59
|
+
// generalNodeQuery: assumptionMetavariableNodeQuery,
|
|
60
|
+
// specificNodeQuery: assumptionMetavariableNodeQuery,
|
|
61
|
+
// run: (generalAssumptionMetavariableNode, specificAssumptionMetavariableNode, generalContext, specificContext, continuation) => {
|
|
62
|
+
// let context,
|
|
63
|
+
// reference,
|
|
64
|
+
// metavariableNode;
|
|
65
|
+
//
|
|
66
|
+
// context = generalContext; ///
|
|
67
|
+
//
|
|
68
|
+
// metavariableNode = generalAssumptionMetavariableNode; ///
|
|
69
|
+
//
|
|
70
|
+
// reference = context.findReferenceByMetavariableNode(metavariableNode);
|
|
71
|
+
//
|
|
72
|
+
// const metavariable = reference.getMetavariable();
|
|
73
|
+
//
|
|
74
|
+
// context = specificContext; ///
|
|
75
|
+
//
|
|
76
|
+
// metavariableNode = specificAssumptionMetavariableNode; ///
|
|
77
|
+
//
|
|
78
|
+
// reference = context.findReferenceByMetavariableNode(metavariableNode);
|
|
79
|
+
//
|
|
80
|
+
// return metavariable.unifyReference(reference, generalContext, specificContext, (referenceUnifies) => {
|
|
81
|
+
// let success = false;
|
|
82
|
+
//
|
|
83
|
+
// if (referenceUnifies) {
|
|
84
|
+
// success = true;
|
|
85
|
+
// }
|
|
86
|
+
//
|
|
87
|
+
// return continuation(success, generalContext, specificContext);
|
|
88
|
+
// });
|
|
89
|
+
// }
|
|
90
|
+
// },
|
|
80
91
|
{
|
|
81
92
|
generalNodeQuery: statementMetavariableNodeQuery,
|
|
82
93
|
specificNodeQuery: statementNodeQuery,
|
|
@@ -133,26 +144,6 @@ class UnifyStatementPass extends _occamlanguages.ContinuationZipPass {
|
|
|
133
144
|
return continuation(success, generalContext, specificContext);
|
|
134
145
|
});
|
|
135
146
|
}
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
generalNodeQuery: signatureNodeQuery,
|
|
139
|
-
specificNodeQuery: signatureNodeQuery,
|
|
140
|
-
run: (generalSignatureNode, specificSignatureNode, generalContext, specificContext, continuation)=>{
|
|
141
|
-
let context;
|
|
142
|
-
context = generalContext; ///
|
|
143
|
-
const generalSignature = context.findSignatureBySignatureNode(generalSignatureNode);
|
|
144
|
-
context = specificContext; ///
|
|
145
|
-
const specificSignature = context.findSignatureBySignatureNode(specificSignatureNode);
|
|
146
|
-
return (0, _context.reconcile)((context)=>{
|
|
147
|
-
return generalSignature.unifySignature(specificSignature, context, (signatureUnifies)=>{
|
|
148
|
-
let success = false;
|
|
149
|
-
if (signatureUnifies) {
|
|
150
|
-
success = true;
|
|
151
|
-
}
|
|
152
|
-
return continuation(success, generalContext, specificContext);
|
|
153
|
-
});
|
|
154
|
-
}, context);
|
|
155
|
-
}
|
|
156
147
|
}
|
|
157
148
|
];
|
|
158
149
|
}
|
|
@@ -180,27 +171,25 @@ class UnifyMetavariablePass extends ContinuationZipPass {
|
|
|
180
171
|
}
|
|
181
172
|
];
|
|
182
173
|
}
|
|
183
|
-
class UnifyTermIntrinsicallyPass extends
|
|
174
|
+
class UnifyTermIntrinsicallyPass extends _occamlanguages.ContinuationZipPass {
|
|
184
175
|
static maps = [
|
|
185
176
|
{
|
|
186
177
|
generalNodeQuery: termVariableNodeQuery,
|
|
187
178
|
specificNodeQuery: termNodeQuery,
|
|
188
179
|
run: (generalTermVariableNode, specificTermNode, generalContext, specificContext, continuation)=>{
|
|
189
|
-
let success = false;
|
|
190
180
|
const termNode = specificTermNode, variableNode = generalTermVariableNode; ///
|
|
191
181
|
let context;
|
|
192
182
|
context = generalContext; ///
|
|
193
183
|
const variableIdentifier = variableNode.getVariableIdentifier(), declaredVariable = context.findDeclaredVariableByVariableIdentifier(variableIdentifier), variable = declaredVariable; ///
|
|
194
184
|
context = specificContext; ///
|
|
195
|
-
const term = context.findTermByTermNode(termNode)
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
185
|
+
const term = context.findTermByTermNode(termNode);
|
|
186
|
+
return variable.unifyTerm(term, generalContext, specificContext, (termUnifies)=>{
|
|
187
|
+
let success = false;
|
|
188
|
+
if (termUnifies) {
|
|
189
|
+
success = true;
|
|
190
|
+
}
|
|
191
|
+
return continuation(success);
|
|
199
192
|
});
|
|
200
|
-
if (termUnifies) {
|
|
201
|
-
success = true;
|
|
202
|
-
}
|
|
203
|
-
return success;
|
|
204
193
|
}
|
|
205
194
|
}
|
|
206
195
|
];
|
|
@@ -398,8 +387,14 @@ class UnifyStatementWithCombinatorPass extends ContinuationZipPass {
|
|
|
398
387
|
}
|
|
399
388
|
const unifyStatementPass = new UnifyStatementPass(), unifyMetavariablePass = new UnifyMetavariablePass(), unifyTermInstrinsicallyPass = new UnifyTermIntrinsicallyPass(), unifyMetavariableIntrisicallyPass = new UnifyMetavariableIntrisicallyPass(), unifyTermWithPropertyPass = new UnifyTermWithPropertyPass(), unifyTermWithGeneratorPass = new UnifyTermWithGeneratorPass(), unifyTermWithConstructorPass = new UnifyTermWithConstructorPass(), unifyStatementWithCombinatorPass = new UnifyStatementWithCombinatorPass();
|
|
400
389
|
function unifyStatement(generalStatement, specificStatement, generalContext, specificContext, continuation) {
|
|
390
|
+
let statementUnifies = false;
|
|
401
391
|
const generalStatementNode = generalStatement.getNode(), specificStatementNode = specificStatement.getNode(), generalNode = generalStatementNode, specificNode = specificStatementNode; ///
|
|
402
|
-
return unifyStatementPass.run(generalNode, specificNode, generalContext, specificContext,
|
|
392
|
+
return unifyStatementPass.run(generalNode, specificNode, generalContext, specificContext, (success)=>{
|
|
393
|
+
if (success) {
|
|
394
|
+
statementUnifies = true;
|
|
395
|
+
}
|
|
396
|
+
return continuation(statementUnifies);
|
|
397
|
+
});
|
|
403
398
|
}
|
|
404
399
|
function unifyMetavariable(generalMetavariable, specificMetavariable, generalContext, specificContext, continuation) {
|
|
405
400
|
let metavaraibleUnifies = false;
|
|
@@ -411,15 +406,23 @@ function unifyMetavariable(generalMetavariable, specificMetavariable, generalCon
|
|
|
411
406
|
}
|
|
412
407
|
function unifyTermIntrinsically(generalTerm, specificTerm, generalContext, specificContext, continuation) {
|
|
413
408
|
let termUnifiesIntrinsically = false;
|
|
414
|
-
const generalTermNode = generalTerm.getNode(), specificTermNode = specificTerm.getNode(), generalNode = generalTermNode, specificNode = specificTermNode
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
409
|
+
const generalTermNode = generalTerm.getNode(), specificTermNode = specificTerm.getNode(), generalNode = generalTermNode, specificNode = specificTermNode; ///
|
|
410
|
+
return unifyTermInstrinsicallyPass.run(generalNode, specificNode, generalContext, specificContext, (success)=>{
|
|
411
|
+
if (success) {
|
|
412
|
+
termUnifiesIntrinsically = true;
|
|
413
|
+
}
|
|
414
|
+
return continuation(termUnifiesIntrinsically);
|
|
415
|
+
});
|
|
419
416
|
}
|
|
420
417
|
function unifyMetavariableIntrinsically(generalMetavariable, specificMetavariable, generalContext, specificContext, continuation) {
|
|
418
|
+
let metavaraibleUnifiesIntrinsically = false;
|
|
421
419
|
const generalMetavariableNode = generalMetavariable.getNode(), specificMetavariableNode = specificMetavariable.getNode(), generalNode = generalMetavariableNode, specificNode = specificMetavariableNode;
|
|
422
|
-
return unifyMetavariableIntrisicallyPass.run(generalNode, specificNode, generalContext, specificContext,
|
|
420
|
+
return unifyMetavariableIntrisicallyPass.run(generalNode, specificNode, generalContext, specificContext, (success)=>{
|
|
421
|
+
if (success) {
|
|
422
|
+
metavaraibleUnifiesIntrinsically = true;
|
|
423
|
+
return continuation(metavaraibleUnifiesIntrinsically);
|
|
424
|
+
}
|
|
425
|
+
});
|
|
423
426
|
}
|
|
424
427
|
function unifyTermWithProperty(term, property, generalContext, specificContext, continuation) {
|
|
425
428
|
let termUnifiesWithProperty = false;
|
|
@@ -454,4 +457,4 @@ function unifyStatementWithCombinator(statement, combinator, generalContext, spe
|
|
|
454
457
|
return statementUnifiesWithCombinator;
|
|
455
458
|
}
|
|
456
459
|
|
|
457
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3VuaWZ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1xdWVyeVwiO1xuXG5pbXBvcnQgeyBDb250aW51YXRpb25aaXBQYXNzIGFzIEFzeW5jaHJvbm91c0NvbnRpbnVhdGlvblppcFBhc3MgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBDb250aW51YXRpb25aaXBQYXNzQmFzZSBmcm9tIFwiLi4vcGFzcy9jb250aW51YXRpb25aaXBcIjsgIC8vL1xuXG5pbXBvcnQgeyBkZWNsYXJlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuaW1wb3J0IHsgcmVjb25jaWxlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBGUkFNRV9NRVRBX1RZUEVfTkFNRSwgU1RBVEVNRU5UX01FVEFfVFlQRV9OQU1FIH0gZnJvbSBcIi4uL21ldGFUeXBlTmFtZXNcIjtcbmltcG9ydCB7IHRlcm1Gcm9tVGVybU5vZGUsIGZyYW1lRnJvbUZyYW1lTm9kZSwgc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuY29uc3QgeyBub2RlUXVlcnkgfSA9IHF1ZXJ5VXRpbGl0aWVzO1xuXG5jb25zdCB0eXBlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3R5cGVcIiksXG4gICAgICB0ZXJtTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3Rlcm1cIiksXG4gICAgICBmcmFtZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9mcmFtZVwiKSxcbiAgICAgIG1ldGFUeXBlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL21ldGFUeXBlXCIpLFxuICAgICAgc2lnbmF0dXJlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3NpZ25hdHVyZVwiKSxcbiAgICAgIHN0YXRlbWVudE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnRcIiksXG4gICAgICB0ZXJtVmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdGVybS92YXJpYWJsZSFcIiksXG4gICAgICBmcmFtZU1ldGF2YXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9mcmFtZS9tZXRhdmFyaWFibGUhXCIpLFxuICAgICAgc3RhdGVtZW50TWV0YXZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC9tZXRhdmFyaWFibGUhXCIpLFxuICAgICAgYXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9hc3N1bXB0aW9uL21ldGF2YXJpYWJsZSFcIik7XG5cbmNsYXNzIENvbnRpbnVhdGlvblppcFBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzQmFzZSB7XG4gIHJ1bihnZW5lcmFsTm9uVGVybWluYWxOb2RlLCBzcGVjaWZpY05vblRlcm1pbmFsTm9kZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgY29udGludWF0aW9uID0gcmVtYWluaW5nQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICAgIGdlbmVyYWxDaGlsZE5vZGVzID0gZ2VuZXJhbE5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksIC8vL1xuICAgICAgICAgIHNwZWNpZmljQ2hpbGROb2RlcyA9IHNwZWNpZmljTm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTsgLy8vXG5cbiAgICByZXR1cm4gdGhpcy5kZXNjZW5kKGdlbmVyYWxDaGlsZE5vZGVzLCBzcGVjaWZpY0NoaWxkTm9kZXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgY29udGludWF0aW9uKTtcbiAgfVxufVxuXG5jbGFzcyBVbmlmeVN0YXRlbWVudFBhc3MgZXh0ZW5kcyBBc3luY2hyb25vdXNDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogYXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiBhc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbEFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlLCBzcGVjaWZpY0Fzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgbGV0IGNvbnRleHQsXG4gICAgICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlO1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZTsgIC8vL1xuXG4gICAgICAgIHJlZmVyZW5jZSA9IGNvbnRleHQuZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGUgPSByZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlKCk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBzcGVjaWZpY0Fzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlOyAvLy9cblxuICAgICAgICByZWZlcmVuY2UgPSBjb250ZXh0LmZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgcmV0dXJuIG1ldGF2YXJpYWJsZS51bmlmeVJlZmVyZW5jZShyZWZlcmVuY2UsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChyZWZlcmVuY2VVbmlmaWVzKSA9PiB7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChyZWZlcmVuY2VVbmlmaWVzKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiBzdGF0ZW1lbnROb2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsU3RhdGVtZW50TWV0YXZhcmlhYmxlTm9kZSwgc3BlY2lmaWNTdGF0ZW1lbnROb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHNwZWNpZmljU3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBnZW5lcmFsU3RhdGVtZW50TWV0YXZhcmlhYmxlTm9kZTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IGNvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3Qgc3RhdGVtZW50ID0gY29udGV4dC5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgICAgIHJldHVybiBtZXRhdmFyaWFibGUudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3RhdGVtZW50VW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBmcmFtZU1ldGF2YXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiBmcmFtZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxGcmFtZU1ldGF2YXJpYWJsZU5vZGUsIHNwZWNpZmljRnJhbWVOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgZnJhbWVOb2RlID0gc3BlY2lmaWNGcmFtZU5vZGUsIC8vL1xuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gZ2VuZXJhbEZyYW1lTWV0YXZhcmlhYmxlTm9kZTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IGNvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgZnJhbWUgPSBjb250ZXh0LmZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSk7XG5cbiAgICAgICAgcmV0dXJuIG1ldGF2YXJpYWJsZS51bmlmeUZyYW1lKGZyYW1lLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZnJhbWVVbmlmaWVzKSA9PiB7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChmcmFtZVVuaWZpZXMpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdGVybVZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsVGVybVZhcmlhYmxlTm9kZSwgc3BlY2lmaWNUZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlcm1Ob2RlID0gc3BlY2lmaWNUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHZhcmlhYmxlTm9kZSA9IGdlbmVyYWxUZXJtVmFyaWFibGVOb2RlOyAvLy9cblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZSA9IGNvbnRleHQuZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpLFxuICAgICAgICAgICAgICB2YXJpYWJsZSA9IGRlY2xhcmVkVmFyaWFibGU7ICAvLy9cblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgdGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgICByZXR1cm4gdmFyaWFibGUudW5pZnlUZXJtKHRlcm0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsICh0ZXJtVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAodGVybVVuaWZpZXMpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogc2lnbmF0dXJlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHNpZ25hdHVyZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxTaWduYXR1cmVOb2RlLCBzcGVjaWZpY1NpZ25hdHVyZU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IGdlbmVyYWxTaWduYXR1cmUgPSBjb250ZXh0LmZpbmRTaWduYXR1cmVCeVNpZ25hdHVyZU5vZGUoZ2VuZXJhbFNpZ25hdHVyZU5vZGUpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCBzcGVjaWZpY1NpZ25hdHVyZSA9IGNvbnRleHQuZmluZFNpZ25hdHVyZUJ5U2lnbmF0dXJlTm9kZShzcGVjaWZpY1NpZ25hdHVyZU5vZGUpO1xuXG4gICAgICAgIHJldHVybiByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgICByZXR1cm4gZ2VuZXJhbFNpZ25hdHVyZS51bmlmeVNpZ25hdHVyZShzcGVjaWZpY1NpZ25hdHVyZSwgY29udGV4dCwgKHNpZ25hdHVyZVVuaWZpZXMpID0+IHtcbiAgICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChzaWduYXR1cmVVbmlmaWVzKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIFVuaWZ5TWV0YXZhcmlhYmxlUGFzcyBleHRlbmRzIENvbnRpbnVhdGlvblppcFBhc3Mge1xuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiB0eXBlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsVHlwZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnN0IHR5cGVOb2RlID0gZ2VuZXJhbFR5cGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgdGVybU5vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCk7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB0eXBlID0gY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKSxcbiAgICAgICAgICAgICAgdGVybVR5cGUgPSB0ZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICAgICAgdGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZHaXZlblR5cGVUeXBlID0gdGVybVR5cGUuaXNFcXVhbFRvT3JTdWJUeXBlT2YodHlwZSk7XG5cbiAgICAgICAgaWYgKHRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mR2l2ZW5UeXBlVHlwZSkge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICBzdWNjZXNzID0gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBVbmlmeVRlcm1JbnRyaW5zaWNhbGx5UGFzcyBleHRlbmRzIENvbnRpbnVhdGlvblppcFBhc3NCYXNlIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdGVybVZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsVGVybVZhcmlhYmxlTm9kZSwgc3BlY2lmaWNUZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgdGVybU5vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgdmFyaWFibGVOb2RlID0gZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGU7IC8vL1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdmFyaWFibGVJZGVudGlmaWVyID0gdmFyaWFibGVOb2RlLmdldFZhcmlhYmxlSWRlbnRpZmllcigpLFxuICAgICAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlID0gY29udGV4dC5maW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllciksXG4gICAgICAgICAgICAgIHZhcmlhYmxlID0gZGVjbGFyZWRWYXJpYWJsZTsgIC8vL1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpLFxuICAgICAgICAgICAgICB0ZXJtVW5pZmllcyA9IHZhcmlhYmxlLnVuaWZ5VGVybSh0ZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCB0ZXJtVW5pZmllcztcblxuICAgICAgICAgICAgICAgIHRlcm1VbmlmaWVzID0gY29udGludWF0aW9uKGNvbnRleHQpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRlcm1VbmlmaWVzO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGVybVVuaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY2xhc3MgVW5pZnlNZXRhdmFyaWFibGVJbnRyaXNpY2FsbHlQYXNzIGV4dGVuZHMgQXN5bmNocm9ub3VzQ29udGludWF0aW9uWmlwUGFzcyB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1WYXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZU5vZGUgPSBnZW5lcmFsVGVybVZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB2YXJpYWJsZU5vZGUuZ2V0VmFyaWFibGVJZGVudGlmaWVyKCksXG4gICAgICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGUgPSBjb250ZXh0LmZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSxcbiAgICAgICAgICAgICAgdmFyaWFibGUgPSBkZWNsYXJlZFZhcmlhYmxlOyAgLy8vXG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlLnVuaWZ5VGVybSh0ZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAodGVybVVuaWZpZXMpID0+IHtcbiAgICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIFVuaWZ5VGVybVdpdGhQcm9wZXJ0eVBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCB0eXBlTm9kZSA9IGdlbmVyYWxUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHRlcm1Ob2RlID0gc3BlY2lmaWNUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IHR5cGVOb2RlLmdldE5vbWluYWxUeXBlTmFtZSgpO1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICAgIGlmICh0eXBlICE9PSBudWxsKSB7XG4gICAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICAgIHN0cmljdCA9IGZhbHNlO1xuXG4gICAgICAgICAgZGVjbGFyZSgoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlcm1WYWxpZGFldHNHaXZlblR5cGUgPSB0ZXJtLnZhbGlkYXRlR2l2ZW5UeXBlKHN0cmljdCwgdHlwZSwgc3RhdGUsIGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgIGxldCB2YWxpZGF0ZXNHaXZlblR5cGU7XG5cbiAgICAgICAgICAgICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgICAgIHZhbGlkYXRlc0dpdmVuVHlwZSA9IGNvbnRpbnVhdGlvbihnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzR2l2ZW5UeXBlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0ZXJtVmFsaWRhZXRzR2l2ZW5UeXBlKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBVbmlmeVRlcm1XaXRoR2VuZXJhdG9yUGFzcyBleHRlbmRzIENvbnRpbnVhdGlvblppcFBhc3Mge1xuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiB0eXBlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsVHlwZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHR5cGVOb2RlID0gZ2VuZXJhbFR5cGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgdGVybU5vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCk7XG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB0eXBlID0gY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICAgICAgaWYgKHR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBkZWNsYXJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVybVZhbGlkYXRlc0dpdmVuVHlwZSA9IHRlcm0udmFsaWRhdGVHaXZlblR5cGUodHlwZSwgc3RhdGUsIGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgIGxldCB2YWxpZGF0ZXNHaXZlblR5cGU7XG5cbiAgICAgICAgICAgICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgICAgIHZhbGlkYXRlc0dpdmVuVHlwZSA9IGNvbnRpbnVhdGlvbihnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzR2l2ZW5UeXBlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0ZXJtVmFsaWRhdGVzR2l2ZW5UeXBlKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBVbmlmeVRlcm1XaXRoQ29uc3RydWN0b3JQYXNzIGV4dGVuZHMgQ29udGludWF0aW9uWmlwUGFzcyB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHR5cGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogdGVybU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxUeXBlTm9kZSwgc3BlY2lmaWNUZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgaWYgKHR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBkZWNsYXJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVybVZhbGlkYXRlc0dpdmVuVHlwZSA9IHRlcm0udmFsaWRhdGVHaXZlblR5cGUodHlwZSwgc3RhdGUsIGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgIGxldCB2YWxpZGF0ZXNHaXZlblR5cGU7XG5cbiAgICAgICAgICAgICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgICAgIHZhbGlkYXRlc0dpdmVuVHlwZSA9IGNvbnRpbnVhdGlvbihnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzR2l2ZW5UeXBlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0ZXJtVmFsaWRhdGVzR2l2ZW5UeXBlKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBVbmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9yUGFzcyBleHRlbmRzIENvbnRpbnVhdGlvblppcFBhc3Mge1xuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBtZXRhVHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiBzdGF0ZW1lbnROb2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsTWV0YVR5cGVOb2RlLCBzcGVjaWZpY1N0YXRlbWVudE5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IG1ldGFUeXBlTm9kZSA9IGdlbmVyYWxNZXRhVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICBtZXRhVHlwZU5hbWUgPSBtZXRhVHlwZU5vZGUuZ2V0TWV0YVR5cGVOYW1lKCksXG4gICAgICAgICAgICAgIG1ldGFUeXBlTmFtZVN0YXRlbWVudE1ldGFUeXBlTmFtZSA9IChtZXRhVHlwZU5hbWUgPT09IFNUQVRFTUVOVF9NRVRBX1RZUEVfTkFNRSk7XG5cbiAgICAgICAgaWYgKG1ldGFUeXBlTmFtZVN0YXRlbWVudE1ldGFUeXBlTmFtZSkge1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gc3BlY2lmaWNTdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBkZWNsYXJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVtZW50VmFsaWRhdGVzID0gc3RhdGVtZW50LnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAoc3RhdGVtZW50LCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgICAgICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXMpIHtcbiAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IG1ldGFUeXBlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IGZyYW1lTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbE1ldGFUeXBlTm9kZSwgc3BlY2lmaWNGcmFtZU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IG1ldGFUeXBlTm9kZSA9IGdlbmVyYWxNZXRhVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICBtZXRhVHlwZU5hbWUgPSBtZXRhVHlwZU5vZGUuZ2V0TWV0YVR5cGVOYW1lKCksXG4gICAgICAgICAgICAgIG1ldGFUeXBlTmFtZUZyYW1lTWV0YVR5cGVOYW1lID0gKG1ldGFUeXBlTmFtZSA9PT0gRlJBTUVfTUVUQV9UWVBFX05BTUUpO1xuXG4gICAgICAgIGlmIChtZXRhVHlwZU5hbWVGcmFtZU1ldGFUeXBlTmFtZSkge1xuICAgICAgICAgIGNvbnN0IGZyYW1lTm9kZSA9IHNwZWNpZmljRnJhbWVOb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBkZWNsYXJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZnJhbWVWYWxpZGF0ZXMgPSBmcmFtZS52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKGZyYW1lLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgICAgICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChmcmFtZVZhbGlkYXRlcykge1xuICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCB0eXBlTm9kZSA9IGdlbmVyYWxUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHRlcm1Ob2RlID0gc3BlY2lmaWNUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IHR5cGVOb2RlLmdldE5vbWluYWxUeXBlTmFtZSgpO1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgZGVjbGFyZSgoc3RhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCB0ZXJtVmFsaWRhdGVzR2l2ZW5UeXBlID0gdGVybS52YWxpZGF0ZUdpdmVuVHlwZSh0eXBlLCBzdGF0ZSwgY29udGV4dCwgKHRlcm0sIGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIGxldCB2YWxpZGF0ZXNHaXZlblR5cGU7XG5cbiAgICAgICAgICAgIGNvbnN0IHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgICAgICAgdmFsaWRhdGVzR2l2ZW5UeXBlID0gY29udGludWF0aW9uKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzR2l2ZW5UeXBlO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHRlcm1WYWxpZGF0ZXNHaXZlblR5cGUpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jb25zdCB1bmlmeVN0YXRlbWVudFBhc3MgPSBuZXcgVW5pZnlTdGF0ZW1lbnRQYXNzKCksXG4gICAgICB1bmlmeU1ldGF2YXJpYWJsZVBhc3MgPSBuZXcgVW5pZnlNZXRhdmFyaWFibGVQYXNzKCksXG4gICAgICB1bmlmeVRlcm1JbnN0cmluc2ljYWxseVBhc3MgPSBuZXcgVW5pZnlUZXJtSW50cmluc2ljYWxseVBhc3MoKSxcbiAgICAgIHVuaWZ5TWV0YXZhcmlhYmxlSW50cmlzaWNhbGx5UGFzcyA9IG5ldyBVbmlmeU1ldGF2YXJpYWJsZUludHJpc2ljYWxseVBhc3MoKSxcbiAgICAgIHVuaWZ5VGVybVdpdGhQcm9wZXJ0eVBhc3MgPSBuZXcgVW5pZnlUZXJtV2l0aFByb3BlcnR5UGFzcygpLFxuICAgICAgdW5pZnlUZXJtV2l0aEdlbmVyYXRvclBhc3MgPSBuZXcgVW5pZnlUZXJtV2l0aEdlbmVyYXRvclBhc3MoKSxcbiAgICAgIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvclBhc3MgPSBuZXcgVW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yUGFzcygpLFxuICAgICAgdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvclBhc3MgPSBuZXcgVW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvclBhc3MoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50KGdlbmVyYWxTdGF0ZW1lbnQsIHNwZWNpZmljU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgZ2VuZXJhbFN0YXRlbWVudE5vZGUgPSBnZW5lcmFsU3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgc3BlY2lmaWNTdGF0ZW1lbnROb2RlID0gc3BlY2lmaWNTdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBnZW5lcmFsTm9kZSA9IGdlbmVyYWxTdGF0ZW1lbnROb2RlLCAvLy9cbiAgICAgICAgc3BlY2lmaWNOb2RlID0gc3BlY2lmaWNTdGF0ZW1lbnROb2RlOyAgLy8vXG5cbiAgcmV0dXJuIHVuaWZ5U3RhdGVtZW50UGFzcy5ydW4oZ2VuZXJhbE5vZGUsIHNwZWNpZmljTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5TWV0YXZhcmlhYmxlKGdlbmVyYWxNZXRhdmFyaWFibGUsIHNwZWNpZmljTWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgbGV0IG1ldGF2YXJhaWJsZVVuaWZpZXMgPSBmYWxzZTtcblxuICBjb25zdCBnZW5lcmFsTWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxNZXRhdmFyaWFibGUuZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGUgPSBzcGVjaWZpY01ldGF2YXJpYWJsZS5nZXROb2RlKCksXG4gICAgICAgIHN1Y2Nlc3MgPSB1bmlmeU1ldGF2YXJpYWJsZVBhc3MucnVuKGdlbmVyYWxNZXRhdmFyaWFibGVOb2RlLCBzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbik7XG5cbiAgaWYgKHN1Y2Nlc3MpIHtcbiAgICBtZXRhdmFyYWlibGVVbmlmaWVzID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyYWlibGVVbmlmaWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlUZXJtSW50cmluc2ljYWxseShnZW5lcmFsVGVybSwgc3BlY2lmaWNUZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgbGV0IHRlcm1VbmlmaWVzSW50cmluc2ljYWxseSA9IGZhbHNlO1xuXG4gIGNvbnN0IGdlbmVyYWxUZXJtTm9kZSA9IGdlbmVyYWxUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgc3BlY2lmaWNUZXJtTm9kZSA9IHNwZWNpZmljVGVybS5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gZ2VuZXJhbFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3BlY2lmaWNOb2RlID0gc3BlY2lmaWNUZXJtTm9kZSwgLy8vXG4gICAgICAgIHN1Y2Nlc3MgPSB1bmlmeVRlcm1JbnN0cmluc2ljYWxseVBhc3MucnVuKGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbik7XG5cbiAgaWYgKHN1Y2Nlc3MpIHtcbiAgICB0ZXJtVW5pZmllc0ludHJpbnNpY2FsbHkgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1VbmlmaWVzSW50cmluc2ljYWxseTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5TWV0YXZhcmlhYmxlSW50cmluc2ljYWxseShnZW5lcmFsTWV0YXZhcmlhYmxlLCBzcGVjaWZpY01ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IGdlbmVyYWxNZXRhdmFyaWFibGVOb2RlID0gZ2VuZXJhbE1ldGF2YXJpYWJsZS5nZXROb2RlKCksXG4gICAgICAgIHNwZWNpZmljTWV0YXZhcmlhYmxlTm9kZSA9IHNwZWNpZmljTWV0YXZhcmlhYmxlLmdldE5vZGUoKSxcbiAgICAgICAgZ2VuZXJhbE5vZGUgPSBnZW5lcmFsTWV0YXZhcmlhYmxlTm9kZSwgLy8vXG4gICAgICAgIHNwZWNpZmljTm9kZSA9IHNwZWNpZmljTWV0YXZhcmlhYmxlTm9kZTtcblxuICByZXR1cm4gdW5pZnlNZXRhdmFyaWFibGVJbnRyaXNpY2FsbHlQYXNzLnJ1bihnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlUZXJtV2l0aFByb3BlcnR5KHRlcm0sIHByb3BlcnR5LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgbGV0IHRlcm1VbmlmaWVzV2l0aFByb3BlcnR5ID0gZmFsc2U7XG5cbiAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgcHJvcGVydHlUZXJtID0gcHJvcGVydHkuZ2V0VGVybSgpLFxuICAgICAgICBwcm9wZXJ0eVRlcm1Ob2RlID0gcHJvcGVydHlUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgc3VjY2VzcyA9IHVuaWZ5VGVybVdpdGhQcm9wZXJ0eVBhc3MucnVuKHByb3BlcnR5VGVybU5vZGUsIHRlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xuXG4gIGlmIChzdWNjZXNzKSB7XG4gICAgdGVybVVuaWZpZXNXaXRoUHJvcGVydHkgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1VbmlmaWVzV2l0aFByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlUZXJtV2l0aEdlbmVyYXRvcih0ZXJtLCBnZW5lcmF0b3IsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBsZXQgdGVybVVOaWZpZXNXaXRoQ29tYmluYXRvciA9IGZhbHNlO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYXRvclRlcm0gPSBnZW5lcmF0b3IuZ2V0VGVybSgpLFxuICAgICAgICBnZW5lcmF0b3JUZXJtTm9kZSA9IGdlbmVyYXRvclRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICBzdWNjZXNzID0gdW5pZnlUZXJtV2l0aEdlbmVyYXRvclBhc3MucnVuKGdlbmVyYXRvclRlcm1Ob2RlLCB0ZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKTtcblxuICBpZiAoc3VjY2Vzcykge1xuICAgIHRlcm1VTmlmaWVzV2l0aENvbWJpbmF0b3IgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1VTmlmaWVzV2l0aENvbWJpbmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3IodGVybSwgY29uc3RydWN0b3IsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBsZXQgdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3IgPSBmYWxzZTtcblxuICBjb25zdCB0ZXJtTm9kZSA9IHRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICBjb25zdHJ1Y3RvclRlcm0gPSBjb25zdHJ1Y3Rvci5nZXRUZXJtKCksXG4gICAgICAgIGNvbnN0cnVjdG9yVGVybU5vZGUgPSBjb25zdHJ1Y3RvclRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICBzdWNjZXNzID0gdW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yUGFzcy5ydW4oY29uc3RydWN0b3JUZXJtTm9kZSwgdGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbik7XG5cbiAgaWYgKHN1Y2Nlc3MpIHtcbiAgICB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvciA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9yKHN0YXRlbWVudCwgY29tYmluYXRvciwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3IgPSBmYWxzZTtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgY29tYmluYXRvclN0YXRlbWVudCA9IGNvbWJpbmF0b3IuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgIGNvbWJpbmF0b3JTdGF0ZW1lbnROb2RlID0gY29tYmluYXRvclN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgIHN1Y2Nlc3MgPSB1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9yUGFzcy5ydW4oY29tYmluYXRvclN0YXRlbWVudE5vZGUsIHN0YXRlbWVudE5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbik7XG5cbiAgaWYgKHN1Y2Nlc3MpIHtcbiAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3IgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvcjtcbn1cbiJdLCJuYW1lcyI6WyJ1bmlmeU1ldGF2YXJpYWJsZSIsInVuaWZ5TWV0YXZhcmlhYmxlSW50cmluc2ljYWxseSIsInVuaWZ5U3RhdGVtZW50IiwidW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvciIsInVuaWZ5VGVybUludHJpbnNpY2FsbHkiLCJ1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3IiLCJ1bmlmeVRlcm1XaXRoR2VuZXJhdG9yIiwidW5pZnlUZXJtV2l0aFByb3BlcnR5Iiwibm9kZVF1ZXJ5IiwicXVlcnlVdGlsaXRpZXMiLCJ0eXBlTm9kZVF1ZXJ5IiwidGVybU5vZGVRdWVyeSIsImZyYW1lTm9kZVF1ZXJ5IiwibWV0YVR5cGVOb2RlUXVlcnkiLCJzaWduYXR1cmVOb2RlUXVlcnkiLCJzdGF0ZW1lbnROb2RlUXVlcnkiLCJ0ZXJtVmFyaWFibGVOb2RlUXVlcnkiLCJmcmFtZU1ldGF2YXJpYWJsZU5vZGVRdWVyeSIsInN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGVRdWVyeSIsImFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJDb250aW51YXRpb25aaXBQYXNzIiwiQ29udGludWF0aW9uWmlwUGFzc0Jhc2UiLCJydW4iLCJnZW5lcmFsTm9uVGVybWluYWxOb2RlIiwic3BlY2lmaWNOb25UZXJtaW5hbE5vZGUiLCJyZW1haW5pbmdBcmd1bWVudHMiLCJjb250aW51YXRpb24iLCJwb3AiLCJnZW5lcmFsQ2hpbGROb2RlcyIsImdldENoaWxkTm9kZXMiLCJzcGVjaWZpY0NoaWxkTm9kZXMiLCJkZXNjZW5kIiwiVW5pZnlTdGF0ZW1lbnRQYXNzIiwiQXN5bmNocm9ub3VzQ29udGludWF0aW9uWmlwUGFzcyIsIm1hcHMiLCJnZW5lcmFsTm9kZVF1ZXJ5Iiwic3BlY2lmaWNOb2RlUXVlcnkiLCJnZW5lcmFsQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGUiLCJzcGVjaWZpY0Fzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJjb250ZXh0IiwicmVmZXJlbmNlIiwibWV0YXZhcmlhYmxlTm9kZSIsImZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGUiLCJnZXRNZXRhdmFyaWFibGUiLCJ1bmlmeVJlZmVyZW5jZSIsInJlZmVyZW5jZVVuaWZpZXMiLCJzdWNjZXNzIiwiZ2VuZXJhbFN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGUiLCJzcGVjaWZpY1N0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZSIsInN0YXRlbWVudCIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRVbmlmaWVzIiwiZ2VuZXJhbEZyYW1lTWV0YXZhcmlhYmxlTm9kZSIsInNwZWNpZmljRnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZnJhbWUiLCJmaW5kRnJhbWVCeUZyYW1lTm9kZSIsInVuaWZ5RnJhbWUiLCJmcmFtZVVuaWZpZXMiLCJnZW5lcmFsVGVybVZhcmlhYmxlTm9kZSIsInNwZWNpZmljVGVybU5vZGUiLCJ0ZXJtTm9kZSIsInZhcmlhYmxlTm9kZSIsInZhcmlhYmxlSWRlbnRpZmllciIsImdldFZhcmlhYmxlSWRlbnRpZmllciIsImRlY2xhcmVkVmFyaWFibGUiLCJmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGUiLCJ0ZXJtIiwiZmluZFRlcm1CeVRlcm1Ob2RlIiwidW5pZnlUZXJtIiwidGVybVVuaWZpZXMiLCJnZW5lcmFsU2lnbmF0dXJlTm9kZSIsInNwZWNpZmljU2lnbmF0dXJlTm9kZSIsImdlbmVyYWxTaWduYXR1cmUiLCJmaW5kU2lnbmF0dXJlQnlTaWduYXR1cmVOb2RlIiwic3BlY2lmaWNTaWduYXR1cmUiLCJyZWNvbmNpbGUiLCJ1bmlmeVNpZ25hdHVyZSIsInNpZ25hdHVyZVVuaWZpZXMiLCJVbmlmeU1ldGF2YXJpYWJsZVBhc3MiLCJnZW5lcmFsVHlwZU5vZGUiLCJ0eXBlTm9kZSIsIm5vbWluYWxUeXBlTmFtZSIsImdldE5vbWluYWxUeXBlTmFtZSIsInR5cGUiLCJmaW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lIiwidGVybVR5cGUiLCJnZXRUeXBlIiwidGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZHaXZlblR5cGVUeXBlIiwiaXNFcXVhbFRvT3JTdWJUeXBlT2YiLCJVbmlmeVRlcm1JbnRyaW5zaWNhbGx5UGFzcyIsIlVuaWZ5TWV0YXZhcmlhYmxlSW50cmlzaWNhbGx5UGFzcyIsIlVuaWZ5VGVybVdpdGhQcm9wZXJ0eVBhc3MiLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwic3RyaWN0IiwiZGVjbGFyZSIsInN0YXRlIiwidGVybVZhbGlkYWV0c0dpdmVuVHlwZSIsInZhbGlkYXRlR2l2ZW5UeXBlIiwidmFsaWRhdGVzR2l2ZW5UeXBlIiwiVW5pZnlUZXJtV2l0aEdlbmVyYXRvclBhc3MiLCJ0ZXJtVmFsaWRhdGVzR2l2ZW5UeXBlIiwiVW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yUGFzcyIsIlVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JQYXNzIiwiZ2VuZXJhbE1ldGFUeXBlTm9kZSIsIm1ldGFUeXBlTm9kZSIsIm1ldGFUeXBlTmFtZSIsImdldE1ldGFUeXBlTmFtZSIsIm1ldGFUeXBlTmFtZVN0YXRlbWVudE1ldGFUeXBlTmFtZSIsIlNUQVRFTUVOVF9NRVRBX1RZUEVfTkFNRSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50VmFsaWRhdGVzIiwidmFsaWRhdGUiLCJ2YWxpZGF0ZXMiLCJtZXRhVHlwZU5hbWVGcmFtZU1ldGFUeXBlTmFtZSIsIkZSQU1FX01FVEFfVFlQRV9OQU1FIiwiZnJhbWVGcm9tRnJhbWVOb2RlIiwiZnJhbWVWYWxpZGF0ZXMiLCJ1bmlmeVN0YXRlbWVudFBhc3MiLCJ1bmlmeU1ldGF2YXJpYWJsZVBhc3MiLCJ1bmlmeVRlcm1JbnN0cmluc2ljYWxseVBhc3MiLCJ1bmlmeU1ldGF2YXJpYWJsZUludHJpc2ljYWxseVBhc3MiLCJ1bmlmeVRlcm1XaXRoUHJvcGVydHlQYXNzIiwidW5pZnlUZXJtV2l0aEdlbmVyYXRvclBhc3MiLCJ1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3JQYXNzIiwidW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvclBhc3MiLCJnZW5lcmFsU3RhdGVtZW50Iiwic3BlY2lmaWNTdGF0ZW1lbnQiLCJnZW5lcmFsU3RhdGVtZW50Tm9kZSIsImdldE5vZGUiLCJnZW5lcmFsTm9kZSIsInNwZWNpZmljTm9kZSIsImdlbmVyYWxNZXRhdmFyaWFibGUiLCJzcGVjaWZpY01ldGF2YXJpYWJsZSIsIm1ldGF2YXJhaWJsZVVuaWZpZXMiLCJnZW5lcmFsTWV0YXZhcmlhYmxlTm9kZSIsInNwZWNpZmljTWV0YXZhcmlhYmxlTm9kZSIsImdlbmVyYWxUZXJtIiwic3BlY2lmaWNUZXJtIiwidGVybVVuaWZpZXNJbnRyaW5zaWNhbGx5IiwiZ2VuZXJhbFRlcm1Ob2RlIiwicHJvcGVydHkiLCJ0ZXJtVW5pZmllc1dpdGhQcm9wZXJ0eSIsInByb3BlcnR5VGVybSIsImdldFRlcm0iLCJwcm9wZXJ0eVRlcm1Ob2RlIiwiZ2VuZXJhdG9yIiwidGVybVVOaWZpZXNXaXRoQ29tYmluYXRvciIsImdlbmVyYXRvclRlcm0iLCJnZW5lcmF0b3JUZXJtTm9kZSIsImNvbnN0cnVjdG9yIiwidGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvclRlcm0iLCJjb25zdHJ1Y3RvclRlcm1Ob2RlIiwiY29tYmluYXRvciIsInN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvciIsImNvbWJpbmF0b3JTdGF0ZW1lbnQiLCJnZXRTdGF0ZW1lbnQiLCJjb21iaW5hdG9yU3RhdGVtZW50Tm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBMmpCZ0JBO2VBQUFBOztRQThCQUM7ZUFBQUE7O1FBdkNBQztlQUFBQTs7UUE2RkFDO2VBQUFBOztRQXRFQUM7ZUFBQUE7O1FBdURBQztlQUFBQTs7UUFmQUM7ZUFBQUE7O1FBZkFDO2VBQUFBOzs7NEJBaG1CZTtnQ0FFd0M7d0VBRW5DO3VCQUVaO3lCQUNFOytCQUNxQzt5QkFDa0I7Ozs7OztBQUVqRixNQUFNLEVBQUVDLFNBQVMs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
|
|
460
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3VuaWZ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1xdWVyeVwiO1xuXG5pbXBvcnQgeyBDb250aW51YXRpb25aaXBQYXNzIGFzIEFzeW5jaHJvbm91c0NvbnRpbnVhdGlvblppcFBhc3MgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBDb250aW51YXRpb25aaXBQYXNzQmFzZSBmcm9tIFwiLi4vcGFzcy9jb250aW51YXRpb25aaXBcIjsgIC8vL1xuXG5pbXBvcnQgeyBkZWNsYXJlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuaW1wb3J0IHsgRlJBTUVfTUVUQV9UWVBFX05BTUUsIFNUQVRFTUVOVF9NRVRBX1RZUEVfTkFNRSB9IGZyb20gXCIuLi9tZXRhVHlwZU5hbWVzXCI7XG5pbXBvcnQgeyB0ZXJtRnJvbVRlcm1Ob2RlLCBmcmFtZUZyb21GcmFtZU5vZGUsIHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgbm9kZVF1ZXJ5IH0gPSBxdWVyeVV0aWxpdGllcztcblxuY29uc3QgdHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90eXBlXCIpLFxuICAgICAgdGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90ZXJtXCIpLFxuICAgICAgZnJhbWVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZnJhbWVcIiksXG4gICAgICBtZXRhVHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9tZXRhVHlwZVwiKSxcbiAgICAgIHNpZ25hdHVyZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zaWduYXR1cmVcIiksXG4gICAgICBzdGF0ZW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50XCIpLFxuICAgICAgdGVybVZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3Rlcm0vdmFyaWFibGUhXCIpLFxuICAgICAgZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZnJhbWUvbWV0YXZhcmlhYmxlIVwiKSxcbiAgICAgIHN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvbWV0YXZhcmlhYmxlIVwiKSxcbiAgICAgIGFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvYXNzdW1wdGlvbi9tZXRhdmFyaWFibGUhXCIpO1xuXG5jbGFzcyBDb250aW51YXRpb25aaXBQYXNzIGV4dGVuZHMgQ29udGludWF0aW9uWmlwUGFzc0Jhc2Uge1xuICBydW4oZ2VuZXJhbE5vblRlcm1pbmFsTm9kZSwgc3BlY2lmaWNOb25UZXJtaW5hbE5vZGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGNvbnN0IGNvbnRpbnVhdGlvbiA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgICBnZW5lcmFsQ2hpbGROb2RlcyA9IGdlbmVyYWxOb25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLCAvLy9cbiAgICAgICAgICBzcGVjaWZpY0NoaWxkTm9kZXMgPSBzcGVjaWZpY05vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7IC8vL1xuXG4gICAgcmV0dXJuIHRoaXMuZGVzY2VuZChnZW5lcmFsQ2hpbGROb2Rlcywgc3BlY2lmaWNDaGlsZE5vZGVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMsIGNvbnRpbnVhdGlvbik7XG4gIH1cbn1cblxuY2xhc3MgVW5pZnlTdGF0ZW1lbnRQYXNzIGV4dGVuZHMgQXN5bmNocm9ub3VzQ29udGludWF0aW9uWmlwUGFzcyB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIC8vIHtcbiAgICAvLyAgIGdlbmVyYWxOb2RlUXVlcnk6IGFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlUXVlcnksXG4gICAgLy8gICBzcGVjaWZpY05vZGVRdWVyeTogYXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGVRdWVyeSxcbiAgICAvLyAgIHJ1bjogKGdlbmVyYWxBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZSwgc3BlY2lmaWNBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgLy8gICAgIGxldCBjb250ZXh0LFxuICAgIC8vICAgICAgICAgcmVmZXJlbmNlLFxuICAgIC8vICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZTtcbiAgICAvL1xuICAgIC8vICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuICAgIC8vXG4gICAgLy8gICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBnZW5lcmFsQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGU7ICAvLy9cbiAgICAvL1xuICAgIC8vICAgICByZWZlcmVuY2UgPSBjb250ZXh0LmZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG4gICAgLy9cbiAgICAvLyAgICAgY29uc3QgbWV0YXZhcmlhYmxlID0gcmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZSgpO1xuICAgIC8vXG4gICAgLy8gICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cbiAgICAvL1xuICAgIC8vICAgICBtZXRhdmFyaWFibGVOb2RlID0gc3BlY2lmaWNBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZTsgLy8vXG4gICAgLy9cbiAgICAvLyAgICAgcmVmZXJlbmNlID0gY29udGV4dC5maW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuICAgIC8vXG4gICAgLy8gICAgIHJldHVybiBtZXRhdmFyaWFibGUudW5pZnlSZWZlcmVuY2UocmVmZXJlbmNlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAocmVmZXJlbmNlVW5pZmllcykgPT4ge1xuICAgIC8vICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG4gICAgLy9cbiAgICAvLyAgICAgICBpZiAocmVmZXJlbmNlVW5pZmllcykge1xuICAgIC8vICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgLy8gICAgICAgfVxuICAgIC8vXG4gICAgLy8gICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICAvLyAgICAgfSk7XG4gICAgLy8gICB9XG4gICAgLy8gfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogc3RhdGVtZW50Tm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGUsIHNwZWNpZmljU3RhdGVtZW50Tm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gZ2VuZXJhbFN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGU7XG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICAgICAgICByZXR1cm4gbWV0YXZhcmlhYmxlLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHN0YXRlbWVudFVuaWZpZXMpID0+IHtcbiAgICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogZnJhbWVOb2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsRnJhbWVNZXRhdmFyaWFibGVOb2RlLCBzcGVjaWZpY0ZyYW1lTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGZyYW1lTm9kZSA9IHNwZWNpZmljRnJhbWVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxGcmFtZU1ldGF2YXJpYWJsZU5vZGU7XG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGNvbnN0IGZyYW1lID0gY29udGV4dC5maW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgICAgIHJldHVybiBtZXRhdmFyaWFibGUudW5pZnlGcmFtZShmcmFtZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGZyYW1lVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoZnJhbWVVbmlmaWVzKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1WYXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZU5vZGUgPSBnZW5lcmFsVGVybVZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB2YXJpYWJsZU5vZGUuZ2V0VmFyaWFibGVJZGVudGlmaWVyKCksXG4gICAgICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGUgPSBjb250ZXh0LmZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSxcbiAgICAgICAgICAgICAgdmFyaWFibGUgPSBkZWNsYXJlZFZhcmlhYmxlOyAgLy8vXG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlLnVuaWZ5VGVybSh0ZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAodGVybVVuaWZpZXMpID0+IHtcbiAgICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIHtcbiAgICAvLyAgIGdlbmVyYWxOb2RlUXVlcnk6IHNpZ25hdHVyZU5vZGVRdWVyeSxcbiAgICAvLyAgIHNwZWNpZmljTm9kZVF1ZXJ5OiBzaWduYXR1cmVOb2RlUXVlcnksXG4gICAgLy8gICBydW46IChnZW5lcmFsU2lnbmF0dXJlTm9kZSwgc3BlY2lmaWNTaWduYXR1cmVOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAvLyAgICAgbGV0IGNvbnRleHQ7XG4gICAgLy9cbiAgICAvLyAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cbiAgICAvL1xuICAgIC8vICAgICBjb25zdCBnZW5lcmFsU2lnbmF0dXJlID0gY29udGV4dC5maW5kU2lnbmF0dXJlQnlTaWduYXR1cmVOb2RlKGdlbmVyYWxTaWduYXR1cmVOb2RlKTtcbiAgICAvL1xuICAgIC8vICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG4gICAgLy9cbiAgICAvLyAgICAgY29uc3Qgc3BlY2lmaWNTaWduYXR1cmUgPSBjb250ZXh0LmZpbmRTaWduYXR1cmVCeVNpZ25hdHVyZU5vZGUoc3BlY2lmaWNTaWduYXR1cmVOb2RlKTtcbiAgICAvL1xuICAgIC8vICAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgLy8gICAgICAgcmV0dXJuIGdlbmVyYWxTaWduYXR1cmUudW5pZnlTaWduYXR1cmUoc3BlY2lmaWNTaWduYXR1cmUsIGNvbnRleHQsIChzaWduYXR1cmVVbmlmaWVzKSA9PiB7XG4gICAgLy8gICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuICAgIC8vXG4gICAgLy8gICAgICAgICBpZiAoc2lnbmF0dXJlVW5pZmllcykge1xuICAgIC8vICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAvLyAgICAgICAgIH1cbiAgICAvL1xuICAgIC8vICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICAvLyAgICAgICB9KTtcbiAgICAvLyAgICAgfSwgY29udGV4dCk7XG4gICAgLy8gICB9XG4gICAgLy8gfVxuICBdO1xufVxuXG5jbGFzcyBVbmlmeU1ldGF2YXJpYWJsZVBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb25zdCB0eXBlTm9kZSA9IGdlbmVyYWxUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHRlcm1Ob2RlID0gc3BlY2lmaWNUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IHR5cGVOb2RlLmdldE5vbWluYWxUeXBlTmFtZSgpO1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSksXG4gICAgICAgICAgICAgIHRlcm1UeXBlID0gdGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgICAgIHRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mR2l2ZW5UeXBlVHlwZSA9IHRlcm1UeXBlLmlzRXF1YWxUb09yU3ViVHlwZU9mKHR5cGUpO1xuXG4gICAgICAgIGlmICh0ZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZkdpdmVuVHlwZVR5cGUpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY2xhc3MgVW5pZnlUZXJtSW50cmluc2ljYWxseVBhc3MgZXh0ZW5kcyBBc3luY2hyb25vdXNDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdGVybVZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsVGVybVZhcmlhYmxlTm9kZSwgc3BlY2lmaWNUZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlcm1Ob2RlID0gc3BlY2lmaWNUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHZhcmlhYmxlTm9kZSA9IGdlbmVyYWxUZXJtVmFyaWFibGVOb2RlOyAvLy9cblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZSA9IGNvbnRleHQuZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpLFxuICAgICAgICAgICAgICB2YXJpYWJsZSA9IGRlY2xhcmVkVmFyaWFibGU7ICAvLy9cblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgdGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgICByZXR1cm4gdmFyaWFibGUudW5pZnlUZXJtKHRlcm0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsICh0ZXJtVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAodGVybVVuaWZpZXMpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2Vzcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY2xhc3MgVW5pZnlNZXRhdmFyaWFibGVJbnRyaXNpY2FsbHlQYXNzIGV4dGVuZHMgQXN5bmNocm9ub3VzQ29udGludWF0aW9uWmlwUGFzcyB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1WYXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZU5vZGUgPSBnZW5lcmFsVGVybVZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB2YXJpYWJsZU5vZGUuZ2V0VmFyaWFibGVJZGVudGlmaWVyKCksXG4gICAgICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGUgPSBjb250ZXh0LmZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSxcbiAgICAgICAgICAgICAgdmFyaWFibGUgPSBkZWNsYXJlZFZhcmlhYmxlOyAgLy8vXG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlLnVuaWZ5VGVybSh0ZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAodGVybVVuaWZpZXMpID0+IHtcbiAgICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIFVuaWZ5VGVybVdpdGhQcm9wZXJ0eVBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCB0eXBlTm9kZSA9IGdlbmVyYWxUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHRlcm1Ob2RlID0gc3BlY2lmaWNUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IHR5cGVOb2RlLmdldE5vbWluYWxUeXBlTmFtZSgpO1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICAgIGlmICh0eXBlICE9PSBudWxsKSB7XG4gICAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICAgIHN0cmljdCA9IGZhbHNlO1xuXG4gICAgICAgICAgZGVjbGFyZSgoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlcm1WYWxpZGFldHNHaXZlblR5cGUgPSB0ZXJtLnZhbGlkYXRlR2l2ZW5UeXBlKHN0cmljdCwgdHlwZSwgc3RhdGUsIGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgIGxldCB2YWxpZGF0ZXNHaXZlblR5cGU7XG5cbiAgICAgICAgICAgICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgICAgIHZhbGlkYXRlc0dpdmVuVHlwZSA9IGNvbnRpbnVhdGlvbihnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzR2l2ZW5UeXBlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0ZXJtVmFsaWRhZXRzR2l2ZW5UeXBlKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBVbmlmeVRlcm1XaXRoR2VuZXJhdG9yUGFzcyBleHRlbmRzIENvbnRpbnVhdGlvblppcFBhc3Mge1xuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiB0eXBlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsVHlwZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHR5cGVOb2RlID0gZ2VuZXJhbFR5cGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgdGVybU5vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCk7XG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB0eXBlID0gY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICAgICAgaWYgKHR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBkZWNsYXJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVybVZhbGlkYXRlc0dpdmVuVHlwZSA9IHRlcm0udmFsaWRhdGVHaXZlblR5cGUodHlwZSwgc3RhdGUsIGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgIGxldCB2YWxpZGF0ZXNHaXZlblR5cGU7XG5cbiAgICAgICAgICAgICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgICAgIHZhbGlkYXRlc0dpdmVuVHlwZSA9IGNvbnRpbnVhdGlvbihnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzR2l2ZW5UeXBlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0ZXJtVmFsaWRhdGVzR2l2ZW5UeXBlKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBVbmlmeVRlcm1XaXRoQ29uc3RydWN0b3JQYXNzIGV4dGVuZHMgQ29udGludWF0aW9uWmlwUGFzcyB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHR5cGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogdGVybU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxUeXBlTm9kZSwgc3BlY2lmaWNUZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgaWYgKHR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBkZWNsYXJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVybVZhbGlkYXRlc0dpdmVuVHlwZSA9IHRlcm0udmFsaWRhdGVHaXZlblR5cGUodHlwZSwgc3RhdGUsIGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgIGxldCB2YWxpZGF0ZXNHaXZlblR5cGU7XG5cbiAgICAgICAgICAgICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgICAgIHZhbGlkYXRlc0dpdmVuVHlwZSA9IGNvbnRpbnVhdGlvbihnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzR2l2ZW5UeXBlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0ZXJtVmFsaWRhdGVzR2l2ZW5UeXBlKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBVbmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9yUGFzcyBleHRlbmRzIENvbnRpbnVhdGlvblppcFBhc3Mge1xuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBtZXRhVHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiBzdGF0ZW1lbnROb2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsTWV0YVR5cGVOb2RlLCBzcGVjaWZpY1N0YXRlbWVudE5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IG1ldGFUeXBlTm9kZSA9IGdlbmVyYWxNZXRhVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICBtZXRhVHlwZU5hbWUgPSBtZXRhVHlwZU5vZGUuZ2V0TWV0YVR5cGVOYW1lKCksXG4gICAgICAgICAgICAgIG1ldGFUeXBlTmFtZVN0YXRlbWVudE1ldGFUeXBlTmFtZSA9IChtZXRhVHlwZU5hbWUgPT09IFNUQVRFTUVOVF9NRVRBX1RZUEVfTkFNRSk7XG5cbiAgICAgICAgaWYgKG1ldGFUeXBlTmFtZVN0YXRlbWVudE1ldGFUeXBlTmFtZSkge1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gc3BlY2lmaWNTdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBkZWNsYXJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVtZW50VmFsaWRhdGVzID0gc3RhdGVtZW50LnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAoc3RhdGVtZW50LCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgICAgICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXMpIHtcbiAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IG1ldGFUeXBlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IGZyYW1lTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbE1ldGFUeXBlTm9kZSwgc3BlY2lmaWNGcmFtZU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IG1ldGFUeXBlTm9kZSA9IGdlbmVyYWxNZXRhVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICBtZXRhVHlwZU5hbWUgPSBtZXRhVHlwZU5vZGUuZ2V0TWV0YVR5cGVOYW1lKCksXG4gICAgICAgICAgICAgIG1ldGFUeXBlTmFtZUZyYW1lTWV0YVR5cGVOYW1lID0gKG1ldGFUeXBlTmFtZSA9PT0gRlJBTUVfTUVUQV9UWVBFX05BTUUpO1xuXG4gICAgICAgIGlmIChtZXRhVHlwZU5hbWVGcmFtZU1ldGFUeXBlTmFtZSkge1xuICAgICAgICAgIGNvbnN0IGZyYW1lTm9kZSA9IHNwZWNpZmljRnJhbWVOb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBkZWNsYXJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZnJhbWVWYWxpZGF0ZXMgPSBmcmFtZS52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKGZyYW1lLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgICAgICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChmcmFtZVZhbGlkYXRlcykge1xuICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCB0eXBlTm9kZSA9IGdlbmVyYWxUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHRlcm1Ob2RlID0gc3BlY2lmaWNUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IHR5cGVOb2RlLmdldE5vbWluYWxUeXBlTmFtZSgpO1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgZGVjbGFyZSgoc3RhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCB0ZXJtVmFsaWRhdGVzR2l2ZW5UeXBlID0gdGVybS52YWxpZGF0ZUdpdmVuVHlwZSh0eXBlLCBzdGF0ZSwgY29udGV4dCwgKHRlcm0sIGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIGxldCB2YWxpZGF0ZXNHaXZlblR5cGU7XG5cbiAgICAgICAgICAgIGNvbnN0IHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgICAgICAgdmFsaWRhdGVzR2l2ZW5UeXBlID0gY29udGludWF0aW9uKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzR2l2ZW5UeXBlO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHRlcm1WYWxpZGF0ZXNHaXZlblR5cGUpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jb25zdCB1bmlmeVN0YXRlbWVudFBhc3MgPSBuZXcgVW5pZnlTdGF0ZW1lbnRQYXNzKCksXG4gICAgICB1bmlmeU1ldGF2YXJpYWJsZVBhc3MgPSBuZXcgVW5pZnlNZXRhdmFyaWFibGVQYXNzKCksXG4gICAgICB1bmlmeVRlcm1JbnN0cmluc2ljYWxseVBhc3MgPSBuZXcgVW5pZnlUZXJtSW50cmluc2ljYWxseVBhc3MoKSxcbiAgICAgIHVuaWZ5TWV0YXZhcmlhYmxlSW50cmlzaWNhbGx5UGFzcyA9IG5ldyBVbmlmeU1ldGF2YXJpYWJsZUludHJpc2ljYWxseVBhc3MoKSxcbiAgICAgIHVuaWZ5VGVybVdpdGhQcm9wZXJ0eVBhc3MgPSBuZXcgVW5pZnlUZXJtV2l0aFByb3BlcnR5UGFzcygpLFxuICAgICAgdW5pZnlUZXJtV2l0aEdlbmVyYXRvclBhc3MgPSBuZXcgVW5pZnlUZXJtV2l0aEdlbmVyYXRvclBhc3MoKSxcbiAgICAgIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvclBhc3MgPSBuZXcgVW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yUGFzcygpLFxuICAgICAgdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvclBhc3MgPSBuZXcgVW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvclBhc3MoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50KGdlbmVyYWxTdGF0ZW1lbnQsIHNwZWNpZmljU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXMgPSBmYWxzZTtcblxuICBjb25zdCBnZW5lcmFsU3RhdGVtZW50Tm9kZSA9IGdlbmVyYWxTdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY1N0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gZ2VuZXJhbFN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGU7ICAvLy9cblxuICByZXR1cm4gdW5pZnlTdGF0ZW1lbnRQYXNzLnJ1bihnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3VjY2VzcykgPT4ge1xuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICBzdGF0ZW1lbnRVbmlmaWVzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFVuaWZpZXMpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5TWV0YXZhcmlhYmxlKGdlbmVyYWxNZXRhdmFyaWFibGUsIHNwZWNpZmljTWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgbGV0IG1ldGF2YXJhaWJsZVVuaWZpZXMgPSBmYWxzZTtcblxuICBjb25zdCBnZW5lcmFsTWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxNZXRhdmFyaWFibGUuZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGUgPSBzcGVjaWZpY01ldGF2YXJpYWJsZS5nZXROb2RlKCksXG4gICAgICAgIHN1Y2Nlc3MgPSB1bmlmeU1ldGF2YXJpYWJsZVBhc3MucnVuKGdlbmVyYWxNZXRhdmFyaWFibGVOb2RlLCBzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbik7XG5cbiAgaWYgKHN1Y2Nlc3MpIHtcbiAgICBtZXRhdmFyYWlibGVVbmlmaWVzID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyYWlibGVVbmlmaWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlUZXJtSW50cmluc2ljYWxseShnZW5lcmFsVGVybSwgc3BlY2lmaWNUZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgbGV0IHRlcm1VbmlmaWVzSW50cmluc2ljYWxseSA9IGZhbHNlO1xuXG4gIGNvbnN0IGdlbmVyYWxUZXJtTm9kZSA9IGdlbmVyYWxUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgc3BlY2lmaWNUZXJtTm9kZSA9IHNwZWNpZmljVGVybS5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gZ2VuZXJhbFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3BlY2lmaWNOb2RlID0gc3BlY2lmaWNUZXJtTm9kZTsgLy8vXG5cbiAgcmV0dXJuIHVuaWZ5VGVybUluc3RyaW5zaWNhbGx5UGFzcy5ydW4oZ2VuZXJhbE5vZGUsIHNwZWNpZmljTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHN1Y2Nlc3MpID0+IHtcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgdGVybVVuaWZpZXNJbnRyaW5zaWNhbGx5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1VbmlmaWVzSW50cmluc2ljYWxseSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlNZXRhdmFyaWFibGVJbnRyaW5zaWNhbGx5KGdlbmVyYWxNZXRhdmFyaWFibGUsIHNwZWNpZmljTWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgbGV0IG1ldGF2YXJhaWJsZVVuaWZpZXNJbnRyaW5zaWNhbGx5ID0gZmFsc2U7XG5cbiAgY29uc3QgZ2VuZXJhbE1ldGF2YXJpYWJsZU5vZGUgPSBnZW5lcmFsTWV0YXZhcmlhYmxlLmdldE5vZGUoKSxcbiAgICAgICAgc3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlID0gc3BlY2lmaWNNZXRhdmFyaWFibGUuZ2V0Tm9kZSgpLFxuICAgICAgICBnZW5lcmFsTm9kZSA9IGdlbmVyYWxNZXRhdmFyaWFibGVOb2RlLCAvLy9cbiAgICAgICAgc3BlY2lmaWNOb2RlID0gc3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlO1xuXG4gIHJldHVybiB1bmlmeU1ldGF2YXJpYWJsZUludHJpc2ljYWxseVBhc3MucnVuKGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdWNjZXNzKSA9PiB7XG4gICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgIG1ldGF2YXJhaWJsZVVuaWZpZXNJbnRyaW5zaWNhbGx5ID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihtZXRhdmFyYWlibGVVbmlmaWVzSW50cmluc2ljYWxseSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhQcm9wZXJ0eSh0ZXJtLCBwcm9wZXJ0eSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhQcm9wZXJ0eSA9IGZhbHNlO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIHByb3BlcnR5VGVybSA9IHByb3BlcnR5LmdldFRlcm0oKSxcbiAgICAgICAgcHJvcGVydHlUZXJtTm9kZSA9IHByb3BlcnR5VGVybS5nZXROb2RlKCksXG4gICAgICAgIHN1Y2Nlc3MgPSB1bmlmeVRlcm1XaXRoUHJvcGVydHlQYXNzLnJ1bihwcm9wZXJ0eVRlcm1Ob2RlLCB0ZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKTtcblxuICBpZiAoc3VjY2Vzcykge1xuICAgIHRlcm1VbmlmaWVzV2l0aFByb3BlcnR5ID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtVW5pZmllc1dpdGhQcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhHZW5lcmF0b3IodGVybSwgZ2VuZXJhdG9yLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgbGV0IHRlcm1VTmlmaWVzV2l0aENvbWJpbmF0b3IgPSBmYWxzZTtcblxuICBjb25zdCB0ZXJtTm9kZSA9IHRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICBnZW5lcmF0b3JUZXJtID0gZ2VuZXJhdG9yLmdldFRlcm0oKSxcbiAgICAgICAgZ2VuZXJhdG9yVGVybU5vZGUgPSBnZW5lcmF0b3JUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgc3VjY2VzcyA9IHVuaWZ5VGVybVdpdGhHZW5lcmF0b3JQYXNzLnJ1bihnZW5lcmF0b3JUZXJtTm9kZSwgdGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbik7XG5cbiAgaWYgKHN1Y2Nlc3MpIHtcbiAgICB0ZXJtVU5pZmllc1dpdGhDb21iaW5hdG9yID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtVU5pZmllc1dpdGhDb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yKHRlcm0sIGNvbnN0cnVjdG9yLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgbGV0IHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yID0gZmFsc2U7XG5cbiAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgY29uc3RydWN0b3JUZXJtID0gY29uc3RydWN0b3IuZ2V0VGVybSgpLFxuICAgICAgICBjb25zdHJ1Y3RvclRlcm1Ob2RlID0gY29uc3RydWN0b3JUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgc3VjY2VzcyA9IHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvclBhc3MucnVuKGNvbnN0cnVjdG9yVGVybU5vZGUsIHRlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xuXG4gIGlmIChzdWNjZXNzKSB7XG4gICAgdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3IgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcihzdGF0ZW1lbnQsIGNvbWJpbmF0b3IsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9yID0gZmFsc2U7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgIGNvbWJpbmF0b3JTdGF0ZW1lbnQgPSBjb21iaW5hdG9yLmdldFN0YXRlbWVudCgpLFxuICAgICAgICBjb21iaW5hdG9yU3RhdGVtZW50Tm9kZSA9IGNvbWJpbmF0b3JTdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBzdWNjZXNzID0gdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvclBhc3MucnVuKGNvbWJpbmF0b3JTdGF0ZW1lbnROb2RlLCBzdGF0ZW1lbnROb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xuXG4gIGlmIChzdWNjZXNzKSB7XG4gICAgc3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9yID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3I7XG59XG4iXSwibmFtZXMiOlsidW5pZnlNZXRhdmFyaWFibGUiLCJ1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkiLCJ1bmlmeVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3IiLCJ1bmlmeVRlcm1JbnRyaW5zaWNhbGx5IiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yIiwidW5pZnlUZXJtV2l0aEdlbmVyYXRvciIsInVuaWZ5VGVybVdpdGhQcm9wZXJ0eSIsIm5vZGVRdWVyeSIsInF1ZXJ5VXRpbGl0aWVzIiwidHlwZU5vZGVRdWVyeSIsInRlcm1Ob2RlUXVlcnkiLCJmcmFtZU5vZGVRdWVyeSIsIm1ldGFUeXBlTm9kZVF1ZXJ5Iiwic2lnbmF0dXJlTm9kZVF1ZXJ5Iiwic3RhdGVtZW50Tm9kZVF1ZXJ5IiwidGVybVZhcmlhYmxlTm9kZVF1ZXJ5IiwiZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJhc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5IiwiQ29udGludWF0aW9uWmlwUGFzcyIsIkNvbnRpbnVhdGlvblppcFBhc3NCYXNlIiwicnVuIiwiZ2VuZXJhbE5vblRlcm1pbmFsTm9kZSIsInNwZWNpZmljTm9uVGVybWluYWxOb2RlIiwicmVtYWluaW5nQXJndW1lbnRzIiwiY29udGludWF0aW9uIiwicG9wIiwiZ2VuZXJhbENoaWxkTm9kZXMiLCJnZXRDaGlsZE5vZGVzIiwic3BlY2lmaWNDaGlsZE5vZGVzIiwiZGVzY2VuZCIsIlVuaWZ5U3RhdGVtZW50UGFzcyIsIkFzeW5jaHJvbm91c0NvbnRpbnVhdGlvblppcFBhc3MiLCJtYXBzIiwiZ2VuZXJhbE5vZGVRdWVyeSIsInNwZWNpZmljTm9kZVF1ZXJ5IiwiZ2VuZXJhbFN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGUiLCJzcGVjaWZpY1N0YXRlbWVudE5vZGUiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInN0YXRlbWVudE5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwiY29udGV4dCIsIm1ldGF2YXJpYWJsZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiLCJzdGF0ZW1lbnQiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50VW5pZmllcyIsInN1Y2Nlc3MiLCJnZW5lcmFsRnJhbWVNZXRhdmFyaWFibGVOb2RlIiwic3BlY2lmaWNGcmFtZU5vZGUiLCJmcmFtZU5vZGUiLCJmcmFtZSIsImZpbmRGcmFtZUJ5RnJhbWVOb2RlIiwidW5pZnlGcmFtZSIsImZyYW1lVW5pZmllcyIsImdlbmVyYWxUZXJtVmFyaWFibGVOb2RlIiwic3BlY2lmaWNUZXJtTm9kZSIsInRlcm1Ob2RlIiwidmFyaWFibGVOb2RlIiwidmFyaWFibGVJZGVudGlmaWVyIiwiZ2V0VmFyaWFibGVJZGVudGlmaWVyIiwiZGVjbGFyZWRWYXJpYWJsZSIsImZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZSIsInRlcm0iLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ1bmlmeVRlcm0iLCJ0ZXJtVW5pZmllcyIsIlVuaWZ5TWV0YXZhcmlhYmxlUGFzcyIsImdlbmVyYWxUeXBlTm9kZSIsInR5cGVOb2RlIiwibm9taW5hbFR5cGVOYW1lIiwiZ2V0Tm9taW5hbFR5cGVOYW1lIiwidHlwZSIsImZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUiLCJ0ZXJtVHlwZSIsImdldFR5cGUiLCJ0ZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZkdpdmVuVHlwZVR5cGUiLCJpc0VxdWFsVG9PclN1YlR5cGVPZiIsIlVuaWZ5VGVybUludHJpbnNpY2FsbHlQYXNzIiwiVW5pZnlNZXRhdmFyaWFibGVJbnRyaXNpY2FsbHlQYXNzIiwiVW5pZnlUZXJtV2l0aFByb3BlcnR5UGFzcyIsInRlcm1Gcm9tVGVybU5vZGUiLCJzdHJpY3QiLCJkZWNsYXJlIiwic3RhdGUiLCJ0ZXJtVmFsaWRhZXRzR2l2ZW5UeXBlIiwidmFsaWRhdGVHaXZlblR5cGUiLCJ2YWxpZGF0ZXNHaXZlblR5cGUiLCJVbmlmeVRlcm1XaXRoR2VuZXJhdG9yUGFzcyIsInRlcm1WYWxpZGF0ZXNHaXZlblR5cGUiLCJVbmlmeVRlcm1XaXRoQ29uc3RydWN0b3JQYXNzIiwiVW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvclBhc3MiLCJnZW5lcmFsTWV0YVR5cGVOb2RlIiwibWV0YVR5cGVOb2RlIiwibWV0YVR5cGVOYW1lIiwiZ2V0TWV0YVR5cGVOYW1lIiwibWV0YVR5cGVOYW1lU3RhdGVtZW50TWV0YVR5cGVOYW1lIiwiU1RBVEVNRU5UX01FVEFfVFlQRV9OQU1FIiwic3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRWYWxpZGF0ZXMiLCJ2YWxpZGF0ZSIsInZhbGlkYXRlcyIsIm1ldGFUeXBlTmFtZUZyYW1lTWV0YVR5cGVOYW1lIiwiRlJBTUVfTUVUQV9UWVBFX05BTUUiLCJmcmFtZUZyb21GcmFtZU5vZGUiLCJmcmFtZVZhbGlkYXRlcyIsInVuaWZ5U3RhdGVtZW50UGFzcyIsInVuaWZ5TWV0YXZhcmlhYmxlUGFzcyIsInVuaWZ5VGVybUluc3RyaW5zaWNhbGx5UGFzcyIsInVuaWZ5TWV0YXZhcmlhYmxlSW50cmlzaWNhbGx5UGFzcyIsInVuaWZ5VGVybVdpdGhQcm9wZXJ0eVBhc3MiLCJ1bmlmeVRlcm1XaXRoR2VuZXJhdG9yUGFzcyIsInVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvclBhc3MiLCJ1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9yUGFzcyIsImdlbmVyYWxTdGF0ZW1lbnQiLCJzcGVjaWZpY1N0YXRlbWVudCIsImdlbmVyYWxTdGF0ZW1lbnROb2RlIiwiZ2V0Tm9kZSIsImdlbmVyYWxOb2RlIiwic3BlY2lmaWNOb2RlIiwiZ2VuZXJhbE1ldGF2YXJpYWJsZSIsInNwZWNpZmljTWV0YXZhcmlhYmxlIiwibWV0YXZhcmFpYmxlVW5pZmllcyIsImdlbmVyYWxNZXRhdmFyaWFibGVOb2RlIiwic3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlIiwiZ2VuZXJhbFRlcm0iLCJzcGVjaWZpY1Rlcm0iLCJ0ZXJtVW5pZmllc0ludHJpbnNpY2FsbHkiLCJnZW5lcmFsVGVybU5vZGUiLCJtZXRhdmFyYWlibGVVbmlmaWVzSW50cmluc2ljYWxseSIsInByb3BlcnR5IiwidGVybVVuaWZpZXNXaXRoUHJvcGVydHkiLCJwcm9wZXJ0eVRlcm0iLCJnZXRUZXJtIiwicHJvcGVydHlUZXJtTm9kZSIsImdlbmVyYXRvciIsInRlcm1VTmlmaWVzV2l0aENvbWJpbmF0b3IiLCJnZW5lcmF0b3JUZXJtIiwiZ2VuZXJhdG9yVGVybU5vZGUiLCJjb25zdHJ1Y3RvciIsInRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yIiwiY29uc3RydWN0b3JUZXJtIiwiY29uc3RydWN0b3JUZXJtTm9kZSIsImNvbWJpbmF0b3IiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3IiLCJjb21iaW5hdG9yU3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiY29tYmluYXRvclN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQTZqQmdCQTtlQUFBQTs7UUErQkFDO2VBQUFBOztRQWhEQUM7ZUFBQUE7O1FBOEdBQztlQUFBQTs7UUEv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
|