nextlove 3.0.0 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js
CHANGED
|
@@ -630,4 +630,4 @@ var createWithRouteSpec = (setupParams) => {
|
|
|
630
630
|
withExceptionHandling,
|
|
631
631
|
wrappers
|
|
632
632
|
});
|
|
633
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmUvaHR0cC1leGNlcHRpb25zLnRzIiwgIi4uL3NyYy9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmUvd2l0aC1leGNlcHRpb24taGFuZGxpbmcudHMiLCAiLi4vc3JjL25leHRqcy1leGNlcHRpb24tbWlkZGxld2FyZS93aXRoLW9rLXN0YXR1cy50cyIsICIuLi9zcmMvbmV4dGpzLWV4Y2VwdGlvbi1taWRkbGV3YXJlL2luZGV4LnRzIiwgIi4uL3NyYy93cmFwcGVycy9pbmRleC50cyIsICIuLi9zcmMvd2l0aC1yb3V0ZS1zcGVjL21pZGRsZXdhcmVzL3dpdGgtbWV0aG9kcy50cyIsICIuLi9zcmMvd2l0aC1yb3V0ZS1zcGVjL21pZGRsZXdhcmVzL3dpdGgtdmFsaWRhdGlvbi50cyIsICIuLi9zcmMvbGliL3pvZC1jb21wYXQudHMiLCAiLi4vc3JjL3dpdGgtcm91dGUtc3BlYy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0ICogZnJvbSBcIi4vbmV4dGpzLWV4Y2VwdGlvbi1taWRkbGV3YXJlXCJcbmV4cG9ydCAqIGZyb20gXCIuL3dpdGgtcm91dGUtc3BlY1wiXG5leHBvcnQgeyB3cmFwcGVycyB9IGZyb20gXCIuL3dyYXBwZXJzXCJcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCJcbiIsICJleHBvcnQgdHlwZSBIdHRwRXhjZXB0aW9uTWV0YWRhdGEgPSB7XG4gIHR5cGU6IHN0cmluZ1xuICBtZXNzYWdlOiBzdHJpbmdcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG59ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cblxuZXhwb3J0IGludGVyZmFjZSBUaHJvd2luZ09wdGlvbnMge1xuICBqc29uPzogYm9vbGVhblxufVxuXG4vKipcbiAqIFRocm93IEh0dHBFeGNlcHRpb25zIGluc2lkZSBBUEkgZW5kcG9pbnRzIHRvIGdlbmVyYXRlIG5pY2UgZXJyb3IgbWVzc2FnZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgXG4gKiBpZiAoYmFkX3NvdXBzLmluY2x1ZGVzKHNvdXBfcGFyYW0pKSB7XG4gKiAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKDQwMCwge1xuICogICAgICB0eXBlOiBcImNhbnRfbWFrZV9zb3VwXCIsXG4gKiAgICAgIG1lc3NhZ2U6IFwiU291cCB3YXMgdG9vIGRpZmZpY3VsdCwgcGxlYXNlIHNwZWNpZnkgYSBkaWZmZXJlbnQgc291cFwiXG4gKiAgICB9KVxuICogfVxuICogYGBgXG4gKlxuICoqL1xuZXhwb3J0IGNsYXNzIEh0dHBFeGNlcHRpb24gZXh0ZW5kcyBFcnJvciB7XG4gIG9wdGlvbnM6IFRocm93aW5nT3B0aW9uc1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzdGF0dXM6IG51bWJlcixcbiAgICBwdWJsaWMgbWV0YWRhdGE6IEh0dHBFeGNlcHRpb25NZXRhZGF0YSxcbiAgICBvcHRpb25zPzogVGhyb3dpbmdPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKG1ldGFkYXRhLm1lc3NhZ2UpXG5cbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpXG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyA/PyB7IGpzb246IHRydWUgfVxuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGBIdHRwRXhjZXB0aW9uOiAke3RoaXMuc3RhdHVzfSwgJHt0aGlzLm1ldGFkYXRhLm1lc3NhZ2V9ICgke3RoaXMubWV0YWRhdGEudHlwZX0pYFxuICB9XG59XG5cbi8qKlxuICogVGhyb3cgQmFkUmVxdWVzdEV4Y2VwdGlvbiBpbnNpZGUgQVBJIGVuZHBvaW50cyB0aGF0IHdlcmUgcHJvdmlkZWQgaW5jb3JyZWN0XG4gKiBwYXJhbWV0ZXJzIG9yIGJvZHlcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgXG4gKiBpZiAoYmFkX3NvdXBzLmluY2x1ZGVzKHNvdXBfcGFyYW0pKSB7XG4gKiAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAqICAgICB0eXBlOiBcImNhbnRfbWFrZV9zb3VwXCIsXG4gKiAgICAgbWVzc2FnZTogXCJTb3VwIHdhcyB0b28gZGlmZmljdWx0LCBwbGVhc2Ugc3BlY2lmeSBhIGRpZmZlcmVudCBzb3VwXCIsXG4gKiAgIH0pXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiovXG5leHBvcnQgY2xhc3MgQmFkUmVxdWVzdEV4Y2VwdGlvbiBleHRlbmRzIEh0dHBFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWV0YWRhdGE6IEh0dHBFeGNlcHRpb25NZXRhZGF0YSxcbiAgICBvcHRpb25zPzogVGhyb3dpbmdPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKDQwMCwgbWV0YWRhdGEsIG9wdGlvbnMpXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuYXV0aG9yaXplZEV4Y2VwdGlvbiBleHRlbmRzIEh0dHBFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWV0YWRhdGE6IEh0dHBFeGNlcHRpb25NZXRhZGF0YSxcbiAgICBvcHRpb25zPzogVGhyb3dpbmdPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKDQwMSwgbWV0YWRhdGEsIG9wdGlvbnMpXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhNZXRob2REb2VzTm90QXBwbHlFeGNlcHRpb24gZXh0ZW5kcyBIdHRwRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG1ldGFkYXRhOiBIdHRwRXhjZXB0aW9uTWV0YWRhdGEgPSB7XG4gICAgICB0eXBlOiBcImF1dGhfbWV0aG9kX2RvZXNfbm90X2FwcGx5XCIsXG4gICAgICBtZXNzYWdlOiBcIkF1dGggbWV0aG9kIGRvZXMgbm90IGFwcGx5XCIsXG4gICAgfSxcbiAgICBvcHRpb25zPzogVGhyb3dpbmdPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKDQwMSwgbWV0YWRhdGEsIG9wdGlvbnMpXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdEZvdW5kRXhjZXB0aW9uIGV4dGVuZHMgSHR0cEV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBtZXRhZGF0YTogSHR0cEV4Y2VwdGlvbk1ldGFkYXRhLFxuICAgIG9wdGlvbnM/OiBUaHJvd2luZ09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoNDA0LCBtZXRhZGF0YSwgb3B0aW9ucylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24gZXh0ZW5kcyBIdHRwRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG1ldGFkYXRhOiBIdHRwRXhjZXB0aW9uTWV0YWRhdGEgPSB7XG4gICAgICB0eXBlOiBcIm5vdF9pbXBsZW1lbnRlZFwiLFxuICAgICAgbWVzc2FnZTogXCJOb3QgaW1wbGVtZW50ZWRcIixcbiAgICB9LFxuICAgIG9wdGlvbnM/OiBUaHJvd2luZ09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoNTAxLCBtZXRhZGF0YSwgb3B0aW9ucylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTWV0aG9kTm90QWxsb3dlZEV4Y2VwdGlvbiBleHRlbmRzIEh0dHBFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWV0YWRhdGE6IEh0dHBFeGNlcHRpb25NZXRhZGF0YSxcbiAgICBvcHRpb25zPzogVGhyb3dpbmdPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKDQwNSwgbWV0YWRhdGEsIG9wdGlvbnMpXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludGVybmFsU2VydmVyRXJyb3JFeGNlcHRpb24gZXh0ZW5kcyBIdHRwRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG1ldGFkYXRhOiBIdHRwRXhjZXB0aW9uTWV0YWRhdGEsXG4gICAgb3B0aW9ucz86IFRocm93aW5nT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcig1MDAsIG1ldGFkYXRhLCBvcHRpb25zKVxuICB9XG59XG4iLCAiaW1wb3J0IHsgTmV4dEFwaVJlcXVlc3QsIE5leHRBcGlSZXNwb25zZSB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB7IEh0dHBFeGNlcHRpb24gfSBmcm9tIFwiLi9odHRwLWV4Y2VwdGlvbnNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhFeGNlcHRpb25IYW5kbGluZ09wdGlvbnMge1xuICBvbkVycm9yPzogKGVycm9yOiBFcnJvciwgcmVxOiBOZXh0QXBpUmVxdWVzdCkgPT4gdm9pZFxuICBnZXRFcnJvckNvbnRleHQ/OiAoXG4gICAgcmVxOiBOZXh0QXBpUmVxdWVzdCxcbiAgICBlcnJvcjogRXJyb3JcbiAgKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxufVxuXG5jb25zdCB3aXRoRXhjZXB0aW9uSGFuZGxpbmcgPVxuICAob3B0aW9uczogV2l0aEV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucyA9IHt9KSA9PlxuICAobmV4dDogKHJlcTogTmV4dEFwaVJlcXVlc3QsIHJlczogTmV4dEFwaVJlc3BvbnNlKSA9PiBQcm9taXNlPHZvaWQ+KSA9PlxuICBhc3luYyAocmVxOiBOZXh0QXBpUmVxdWVzdCwgcmVzOiBOZXh0QXBpUmVzcG9uc2UpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbmV4dChyZXEsIHJlcylcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgbGV0IGVycm9yQ29udGV4dDogYW55ID0ge31cblxuICAgICAgaWYgKG9wdGlvbnMub25FcnJvcikge1xuICAgICAgICBvcHRpb25zLm9uRXJyb3IoZXJyb3IgYXMgRXJyb3IsIHJlcSlcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgZXJyb3JDb250ZXh0LnN0YWNrID0gZXJyb3Iuc3RhY2tcbiAgICAgIH1cblxuICAgICAgZXJyb3JDb250ZXh0ID0gb3B0aW9ucy5nZXRFcnJvckNvbnRleHRcbiAgICAgICAgPyBvcHRpb25zLmdldEVycm9yQ29udGV4dChyZXEsIGVycm9yQ29udGV4dClcbiAgICAgICAgOiBlcnJvckNvbnRleHRcblxuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEV4Y2VwdGlvbikge1xuICAgICAgICBpZiAoZXJyb3Iub3B0aW9ucy5qc29uKSB7XG4gICAgICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpLmpzb24oe1xuICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgLi4uZXJyb3IubWV0YWRhdGEsXG4gICAgICAgICAgICAgIC4uLmVycm9yQ29udGV4dCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cykuZW5kKGVycm9yLm1ldGFkYXRhLm1lc3NhZ2UpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZEVycm9yID0gbmV3IEh0dHBFeGNlcHRpb24oNTAwLCB7XG4gICAgICAgICAgdHlwZTogXCJpbnRlcm5hbF9zZXJ2ZXJfZXJyb3JcIixcbiAgICAgICAgICBtZXNzYWdlOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiLFxuICAgICAgICB9KVxuXG4gICAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgLi4uZm9ybWF0dGVkRXJyb3IubWV0YWRhdGEsXG4gICAgICAgICAgICAuLi5lcnJvckNvbnRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhFeGNlcHRpb25IYW5kbGluZ1xuIiwgImltcG9ydCB7IE5leHRBcGlSZXF1ZXN0LCBOZXh0QXBpUmVzcG9uc2UgfSBmcm9tIFwibmV4dFwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgV2l0aE9rU3RhdHVzT3B0aW9ucyB7XG4gIGFkZElmPzogKHJlcTogTmV4dEFwaVJlcXVlc3QpID0+IGJvb2xlYW5cbn1cblxuY29uc3Qgd2l0aE9rU3RhdHVzID1cbiAgKG9wdGlvbnM6IFdpdGhPa1N0YXR1c09wdGlvbnMgPSB7fSkgPT5cbiAgKG5leHQ6IChyZXE6IE5leHRBcGlSZXF1ZXN0LCByZXM6IE5leHRBcGlSZXNwb25zZSkgPT4gUHJvbWlzZTx2b2lkPikgPT5cbiAgYXN5bmMgKHJlcTogTmV4dEFwaVJlcXVlc3QsIHJlczogTmV4dEFwaVJlc3BvbnNlKSA9PiB7XG4gICAgLy8gUGF0Y2ggLmpzb24oKVxuICAgIGNvbnN0IG9yaWdpbmFsSnNvbiA9IHJlcy5qc29uXG5cbiAgICByZXMuanNvbiA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICBjb25zdCBvayA9IHJlcy5zdGF0dXNDb2RlID49IDIwMCAmJiByZXMuc3RhdHVzQ29kZSA8IDMwMFxuICAgICAgY29uc3Qgc2hvdWxkSW5jbHVkZVN0YXR1cyA9IG9wdGlvbnMuYWRkSWYgPyBvcHRpb25zLmFkZElmKHJlcSkgOiB0cnVlXG5cbiAgICAgIGlmIChzaG91bGRJbmNsdWRlU3RhdHVzKSB7XG4gICAgICAgIG9yaWdpbmFsSnNvbi5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAuLi5kYXRhLFxuICAgICAgICAgIG9rLFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3JpZ2luYWxKc29uLmNhbGwodGhpcywgZGF0YSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBuZXh0KHJlcSwgcmVzKVxuICB9XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhPa1N0YXR1c1xuIiwgImltcG9ydCB7IE5leHRBcGlSZXF1ZXN0LCBOZXh0QXBpUmVzcG9uc2UgfSBmcm9tIFwibmV4dFwiXG5pbXBvcnQgdW53cmFwcGVkV2l0aEV4Y2VwdGlvbkhhbmRsaW5nLCB7XG4gIFdpdGhFeGNlcHRpb25IYW5kbGluZ09wdGlvbnMsXG59IGZyb20gXCIuL3dpdGgtZXhjZXB0aW9uLWhhbmRsaW5nXCJcbmltcG9ydCB3aXRoT2tTdGF0dXMsIHsgV2l0aE9rU3RhdHVzT3B0aW9ucyB9IGZyb20gXCIuL3dpdGgtb2stc3RhdHVzXCJcblxuZXhwb3J0IGludGVyZmFjZSBFeGNlcHRpb25IYW5kbGluZ09wdGlvbnMge1xuICBhZGRPa1N0YXR1cz86IGJvb2xlYW5cbiAgb2tTdGF0dXNPcHRpb25zPzogV2l0aE9rU3RhdHVzT3B0aW9uc1xuICBleGNlcHRpb25IYW5kbGluZ09wdGlvbnM/OiBXaXRoRXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zXG59XG5cbmV4cG9ydCBjb25zdCB3aXRoRXhjZXB0aW9uSGFuZGxpbmcgPVxuICAoe1xuICAgIGFkZE9rU3RhdHVzID0gZmFsc2UsXG4gICAgb2tTdGF0dXNPcHRpb25zLFxuICAgIGV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucyxcbiAgfTogRXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zID0ge30pID0+XG4gIChuZXh0OiAocmVxOiBOZXh0QXBpUmVxdWVzdCwgcmVzOiBOZXh0QXBpUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD4pID0+XG4gIChyZXE6IE5leHRBcGlSZXF1ZXN0LCByZXM6IE5leHRBcGlSZXNwb25zZSkgPT4ge1xuICAgIGlmIChhZGRPa1N0YXR1cykge1xuICAgICAgcmV0dXJuIHdpdGhPa1N0YXR1cyhva1N0YXR1c09wdGlvbnMpKFxuICAgICAgICB1bndyYXBwZWRXaXRoRXhjZXB0aW9uSGFuZGxpbmcoZXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zKShuZXh0KVxuICAgICAgKShyZXEsIHJlcylcbiAgICB9XG5cbiAgICByZXR1cm4gdW53cmFwcGVkV2l0aEV4Y2VwdGlvbkhhbmRsaW5nKGV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucykobmV4dCkoXG4gICAgICByZXEsXG4gICAgICByZXNcbiAgICApXG4gIH1cblxuZXhwb3J0ICogZnJvbSBcIi4vaHR0cC1leGNlcHRpb25zXCJcbiIsICJpbXBvcnQgdHlwZSB7IE5leHRBcGlSZXF1ZXN0IGFzIFJlcSwgTmV4dEFwaVJlc3BvbnNlIGFzIFJlcyB9IGZyb20gXCJuZXh0XCJcbi8qXG5cbldyYXBzIGEgZnVuY3Rpb24gaW4gbGF5ZXJzIG9mIG90aGVyIGZ1bmN0aW9ucywgd2hpbGUgcHJlc2VydmluZyB0aGUgaW5wdXQvb3V0cHV0XG50eXBlLiBUaGUgb3V0cHV0IG9mIHdyYXBwZXJzIHdpbGwgYWx3YXlzIGhhdmUgdGhlIHR5cGUgb2YgaXQncyBsYXN0IHBhcmFtZXRlclxuKHRoZSB3cmFwcGVkIGZ1bmN0aW9uKVxuXG5UaGlzIGZ1bmN0aW9uIHR1cm5zIHRoaXMgdHlwZSBvZiBjb21wb3NpdGlvbi4uLlxuXG5sb2dnZXIud2l0aENvbnRleHQoXCJzb21lY29udGV4dFwiKShcbiAgYXN5bmMgKGEsIGIpID0+IHtcbiAgICByZXR1cm4gYVxuICB9XG4pXG5cbkludG8uLi5cblxud3JhcHBlcnMoXG4gIGxvZ2dlci53aXRoQ29udGV4dChcInNvbWVjb250ZXh0XCIpLFxuICBhc3luYyAoYSwgYikgPT4ge1xuICAgIHJldHVybiBhXG4gIH1cbilcblxuSGF2aW5nIHRoaXMgYXMgYSB1dGlsaXR5IG1ldGhvZCBoZWxwcyBwcmVzZXJ2ZSB0eXBlcywgd2hpY2ggb3RoZXJ3aXNlIGNhbiBnZXRcbm1lc3NlZCB1cCBieSB0aGUgbWlkZGxld2FyZXMuIEl0IGFsc28gY2FuIG1ha2UgdGhlIGNvZGUgY2xlYW5lciB3aGVyZSB0aGVyZSBhcmVcbm11bHRpcGxlIHdyYXBwZXJzLlxuXG4jIyBFWEFNUExFU1xuXG5JbiB0aGUgY29udGV4dCBvZiByZXF1ZXN0IG1pZGRsZXdhcmUgeW91IG1pZ2h0IHdyaXRlIHNvbWV0aGluZyBsaWtlIHRoaXMuLi5cblxuY29uc3Qgd2l0aFJlcXVlc3RMb2dnaW5nTWlkZGxld2FyZSA9IChuZXh0KSA9PiBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgY29uc29sZS5sb2coYEdPVCBSRVFVRVNUICR7cmVxLm1ldGhvZH0gJHtyZXEucGF0aH1gKVxuICByZXR1cm4gbmV4dChyZXEsIHJlcylcbn1cblxuSGVyZSdzIGFuIGV4YW1wbGUgb2YgYSB3cmFwcGVyIHRoYXQgdGFrZXMgc29tZSBwYXJhbWV0ZXJzLi4uXG5cbmNvbnN0IHdpdGhMb2dnZWRBcmd1bWVudHMgPVxuICAgIChsb2dQcmVmaXg6IHN0cmluZykgPT5cbiAgICAobmV4dCkgPT5cbiAgICBhc3luYyAoLi4uZnVuY0FyZ3MpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGxvZ1ByZWZpeCwgLi4uZnVuY0FyZ3MpXG4gICAgICByZXR1cm4gbmV4dCguLi5mdW5jQXJncylcbiAgICB9XG5cbiovXG5cbmV4cG9ydCB0eXBlIE1pZGRsZXdhcmU8VCwgRGVwID0ge30+ID0gKFxuICBuZXh0OiAocmVxOiBSZXEgJiBEZXAgJiBULCByZXM6IFJlcykgPT4gYW55XG4pID0+IChyZXE6IFJlcSAmIERlcCAmIFQsIHJlczogUmVzKSA9PiBhbnlcblxuLy8gU2FmZXIgTWlkZGxld2FyZSByZXF1aXJlcyB0aGUgdXNlIG9mIGV4dGVuZFJlcXVlc3QgdG8gZW5zdXJlIHRoYXQgdGhlXG4vLyBuZXcgY29udGV4dCAoVCkgd2FzIGFjdHVhbGx5IGFkZGVkIHRvIHRoZSByZXF1ZXN0LiBJdCdzIGtpbmQgb2YgYW5ub3lpbmdcbi8vIHRvIHVzZSBpbiBwcmFjdGljZSwgc28gd2UgZG9uJ3QgdXNlIGl0IGZvciBvdXIgV3JhcHBlcnMgKHlldClcbmV4cG9ydCB0eXBlIFNhZmVyTWlkZGxld2FyZTxULCBEZXAgPSB7fT4gPSAoXG4gIG5leHQ6IChyZXE6IFJlcSAmIERlcCAmIFQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxICYgRGVwLCByZXM6IFJlcykgPT4gYW55XG5cbmV4cG9ydCBjb25zdCBleHRlbmRSZXF1ZXN0ID0gPFQgZXh0ZW5kcyBSZXEsIEsgZXh0ZW5kcyB7fT4oXG4gIHJlcTogVCxcbiAgbWVyZ2U6IEtcbik6IFQgJiBLID0+IHtcbiAgZm9yIChjb25zdCBba2V5LCB2XSBvZiBPYmplY3QuZW50cmllcyhtZXJnZSkpIHtcbiAgICA7KHJlcSBhcyBhbnkpW2tleV0gPSB2XG4gIH1cbiAgcmV0dXJuIHJlcSBhcyBhbnlcbn1cblxudHlwZSBXcmFwcGVyczEgPSA8TXcxUmVxdWVzdENvbnRleHQsIE13MURlcD4oXG4gIG13MTogTWlkZGxld2FyZTxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPixcbiAgZW5kcG9pbnQ6IChyZXE6IFJlcSAmIE13MVJlcXVlc3RDb250ZXh0LCByZXM6IFJlcykgPT4gYW55XG4pID0+IChyZXE6IFJlcSwgcmVzOiBSZXMpID0+IGFueVxuXG50eXBlIFdyYXBwZXJzMiA9IDxcbiAgTXcxUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzJEZXAsXG4gIE13MURlcCxcbiAgTXcyUmVxdWVzdENvbnRleHQsXG4gIE13MkRlcFxuPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBtdzI6IE1pZGRsZXdhcmU8TXcyUmVxdWVzdENvbnRleHQsIE13MkRlcD4sXG4gIGVuZHBvaW50OiAocmVxOiBSZXEgJiBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0LCByZXM6IFJlcykgPT4gYW55XG4pID0+IChyZXE6IFJlcSwgcmVzOiBSZXMpID0+IGFueVxuXG4vLyBUT0RPIGZpZ3VyZSBvdXQgaG93IHRvIGRvIGEgcmVjdXJzaXZlIGRlZmluaXRpb24sIG9yIG9uZSB0aGF0IHNpbXBsaWZpZXNcbi8vIHRoZXNlIHJlZHVuZGFudCB3cmFwcGVyc1xuXG50eXBlIFdyYXBwZXJzMyA9IDxcbiAgTXcxUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzJEZXAsXG4gIE13MURlcCxcbiAgTXcyUmVxdWVzdENvbnRleHQsXG4gIE13MkRlcCxcbiAgTXczUmVxdWVzdENvbnRleHQsXG4gIE13M0RlcFxuPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBtdzI6IE1pZGRsZXdhcmU8TXcyUmVxdWVzdENvbnRleHQsIE13MkRlcD4sXG4gIG13MzogTWlkZGxld2FyZTxcbiAgICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXczRGVwID8gTXczRGVwIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgJiBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVyczQgPSA8XG4gIE13MVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXcyRGVwLFxuICBNdzFEZXAsXG4gIE13MlJlcXVlc3RDb250ZXh0LFxuICBNdzJEZXAsXG4gIE13M1JlcXVlc3RDb250ZXh0LFxuICBNdzNEZXAsXG4gIE13NFJlcXVlc3RDb250ZXh0LFxuICBNdzREZXBcbj4oXG4gIG13MTogTWlkZGxld2FyZTxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPixcbiAgbXcyOiBNaWRkbGV3YXJlPE13MlJlcXVlc3RDb250ZXh0LCBNdzJEZXA+LFxuICBtdzM6IE1pZGRsZXdhcmU8XG4gICAgTXczUmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13M0RlcCA/IE13M0RlcCA6IG5ldmVyXG4gID4sXG4gIG13NDogTWlkZGxld2FyZTxcbiAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0ICYgTXczUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzREZXBcbiAgICAgID8gTXc0RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIGVuZHBvaW50OiAoXG4gICAgcmVxOiBSZXEgJlxuICAgICAgTXcxUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXcyUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXczUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc0UmVxdWVzdENvbnRleHQsXG4gICAgcmVzOiBSZXNcbiAgKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxLCByZXM6IFJlcykgPT4gYW55XG5cbnR5cGUgV3JhcHBlcnM1ID0gPFxuICBNdzFSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13MkRlcCxcbiAgTXcxRGVwLFxuICBNdzJSZXF1ZXN0Q29udGV4dCxcbiAgTXcyRGVwLFxuICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgTXczRGVwLFxuICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgTXc0RGVwLFxuICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgTXc1RGVwXG4+KFxuICBtdzE6IE1pZGRsZXdhcmU8TXcxUmVxdWVzdENvbnRleHQsIE13MURlcD4sXG4gIG13MjogTWlkZGxld2FyZTxNdzJSZXF1ZXN0Q29udGV4dCwgTXcyRGVwPixcbiAgbXczOiBNaWRkbGV3YXJlPFxuICAgIE13M1JlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzNEZXAgPyBNdzNEZXAgOiBuZXZlclxuICA+LFxuICBtdzQ6IE1pZGRsZXdhcmU8XG4gICAgTXc0UmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCAmIE13M1JlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXc0RGVwXG4gICAgICA/IE13NERlcFxuICAgICAgOiBuZXZlclxuICA+LFxuICBtdzU6IE1pZGRsZXdhcmU8XG4gICAgTXc1UmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXcyUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXczUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc0UmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzVEZXBcbiAgICAgID8gTXc1RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIGVuZHBvaW50OiAoXG4gICAgcmVxOiBSZXEgJlxuICAgICAgTXcxUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXcyUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXczUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc0UmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc1UmVxdWVzdENvbnRleHQsXG4gICAgcmVzOiBSZXNcbiAgKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxLCByZXM6IFJlcykgPT4gYW55XG5cbnR5cGUgV3JhcHBlcnM2ID0gPFxuICBNdzFSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13MkRlcCxcbiAgTXcxRGVwLFxuICBNdzJSZXF1ZXN0Q29udGV4dCxcbiAgTXcyRGVwLFxuICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgTXczRGVwLFxuICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgTXc0RGVwLFxuICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgTXc1RGVwLFxuICBNdzZSZXF1ZXN0Q29udGV4dCxcbiAgTXc2RGVwXG4+KFxuICBtdzE6IE1pZGRsZXdhcmU8TXcxUmVxdWVzdENvbnRleHQsIE13MURlcD4sXG4gIG13MjogTWlkZGxld2FyZTxNdzJSZXF1ZXN0Q29udGV4dCwgTXcyRGVwPixcbiAgbXczOiBNaWRkbGV3YXJlPFxuICAgIE13M1JlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzNEZXAgPyBNdzNEZXAgOiBuZXZlclxuICA+LFxuICBtdzQ6IE1pZGRsZXdhcmU8XG4gICAgTXc0UmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCAmIE13M1JlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXc0RGVwXG4gICAgICA/IE13NERlcFxuICAgICAgOiBuZXZlclxuICA+LFxuICBtdzU6IE1pZGRsZXdhcmU8XG4gICAgTXc1UmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXcyUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXczUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc0UmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzVEZXBcbiAgICAgID8gTXc1RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NjogTWlkZGxld2FyZTxcbiAgICBNdzZSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NkRlcFxuICAgICAgPyBNdzZEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzZSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVyczcgPSA8XG4gIE13MVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXcyRGVwLFxuICBNdzFEZXAsXG4gIE13MlJlcXVlc3RDb250ZXh0LFxuICBNdzJEZXAsXG4gIE13M1JlcXVlc3RDb250ZXh0LFxuICBNdzNEZXAsXG4gIE13NFJlcXVlc3RDb250ZXh0LFxuICBNdzREZXAsXG4gIE13NVJlcXVlc3RDb250ZXh0LFxuICBNdzVEZXAsXG4gIE13NlJlcXVlc3RDb250ZXh0LFxuICBNdzZEZXAsXG4gIE13N1JlcXVlc3RDb250ZXh0LFxuICBNdzdEZXBcbj4oXG4gIG13MTogTWlkZGxld2FyZTxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPixcbiAgbXcyOiBNaWRkbGV3YXJlPE13MlJlcXVlc3RDb250ZXh0LCBNdzJEZXA+LFxuICBtdzM6IE1pZGRsZXdhcmU8XG4gICAgTXczUmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13M0RlcCA/IE13M0RlcCA6IG5ldmVyXG4gID4sXG4gIG13NDogTWlkZGxld2FyZTxcbiAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0ICYgTXczUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzREZXBcbiAgICAgID8gTXc0RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NTogTWlkZGxld2FyZTxcbiAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NURlcFxuICAgICAgPyBNdzVEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgbXc2OiBNaWRkbGV3YXJlPFxuICAgIE13NlJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXc2RGVwXG4gICAgICA/IE13NkRlcFxuICAgICAgOiBuZXZlclxuICA+LFxuICBtdzc6IE1pZGRsZXdhcmU8XG4gICAgTXc3UmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXcyUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXczUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc0UmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc1UmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc2UmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzdEZXBcbiAgICAgID8gTXc3RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIGVuZHBvaW50OiAoXG4gICAgcmVxOiBSZXEgJlxuICAgICAgTXcxUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXcyUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXczUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc0UmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc1UmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc2UmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc3UmVxdWVzdENvbnRleHQsXG4gICAgcmVzOiBSZXNcbiAgKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxLCByZXM6IFJlcykgPT4gYW55XG5cbnR5cGUgV3JhcHBlcnMgPSBXcmFwcGVyczEgJlxuICBXcmFwcGVyczIgJlxuICBXcmFwcGVyczMgJlxuICBXcmFwcGVyczQgJlxuICBXcmFwcGVyczUgJlxuICBXcmFwcGVyczYgJlxuICBXcmFwcGVyczdcblxuZXhwb3J0IGNvbnN0IHdyYXBwZXJzOiBXcmFwcGVycyA9ICguLi53cmFwcGVyc0FyZ3M6IGFueVtdKSA9PiB7XG4gIGNvbnN0IHdyYXBwZWRGdW5jdGlvbiA9IHdyYXBwZXJzQXJnc1t3cmFwcGVyc0FyZ3MubGVuZ3RoIC0gMV1cbiAgY29uc3QgbXdzID0gd3JhcHBlcnNBcmdzLnNsaWNlKDAsIC0xKVxuXG4gIGxldCBsYXN0V3JhcHBlZEZ1bmN0aW9uID0gd3JhcHBlZEZ1bmN0aW9uXG4gIGZvciAobGV0IGkgPSBtd3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0V3JhcHBlZEZ1bmN0aW9uID0gKG13c1tpXSBhcyBhbnkpKGxhc3RXcmFwcGVkRnVuY3Rpb24pXG4gIH1cblxuICByZXR1cm4gbGFzdFdyYXBwZWRGdW5jdGlvblxufVxuXG5leHBvcnQgZGVmYXVsdCB3cmFwcGVyc1xuIiwgImltcG9ydCB7IE1ldGhvZE5vdEFsbG93ZWRFeGNlcHRpb24gfSBmcm9tIFwiLi4vLi4vbmV4dGpzLWV4Y2VwdGlvbi1taWRkbGV3YXJlXCJcblxuZXhwb3J0IHR5cGUgSFRUUE1ldGhvZHMgPVxuICB8IFwiR0VUXCJcbiAgfCBcIlBPU1RcIlxuICB8IFwiREVMRVRFXCJcbiAgfCBcIlBVVFwiXG4gIHwgXCJQQVRDSFwiXG4gIHwgXCJIRUFEXCJcbiAgfCBcIk9QVElPTlNcIlxuXG5leHBvcnQgY29uc3Qgd2l0aE1ldGhvZHMgPSAobWV0aG9kczogSFRUUE1ldGhvZHNbXSkgPT4gKG5leHQpID0+IChyZXEsIHJlcykgPT4ge1xuICBpZiAoIW1ldGhvZHMuaW5jbHVkZXMocmVxLm1ldGhvZCkpIHtcbiAgICB0aHJvdyBuZXcgTWV0aG9kTm90QWxsb3dlZEV4Y2VwdGlvbih7XG4gICAgICB0eXBlOiBcIm1ldGhvZF9ub3RfYWxsb3dlZFwiLFxuICAgICAgbWVzc2FnZTogYG9ubHkgJHttZXRob2RzLmpvaW4oXCIsXCIpfSBhY2NlcHRlZGAsXG4gICAgfSlcbiAgfVxuICByZXR1cm4gbmV4dChyZXEsIHJlcylcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aE1ldGhvZHNcbiIsICJpbXBvcnQgdHlwZSB7IE5leHRBcGlSZXF1ZXN0LCBOZXh0QXBpUmVzcG9uc2UgfSBmcm9tIFwibmV4dFwiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgXyBmcm9tIFwibG9kYXNoXCJcblxuaW1wb3J0IHtcbiAgQmFkUmVxdWVzdEV4Y2VwdGlvbixcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvckV4Y2VwdGlvbixcbn0gZnJvbSBcIi4uLy4uL25leHRqcy1leGNlcHRpb24tbWlkZGxld2FyZVwiXG5pbXBvcnQgeyBRdWVyeUFycmF5Rm9ybWF0cyB9IGZyb20gXCIuLi8uLi90eXBlc1wiXG5pbXBvcnQgeyBERUZBVUxUX0FSUkFZX0ZPUk1BVFMgfSBmcm9tIFwiLi5cIlxuaW1wb3J0IHtcbiAgZ2V0VHlwZU5hbWUsXG4gIGdldEVmZmVjdHNTY2hlbWEsXG4gIGdldElubmVyVHlwZSxcbn0gZnJvbSBcIi4uLy4uL2xpYi96b2QtY29tcGF0XCJcblxuY29uc3QgZ2V0Wm9kT2JqZWN0U2NoZW1hRnJvbVpvZEVmZmVjdFNjaGVtYSA9IChcbiAgaXNab2RFZmZlY3Q6IGJvb2xlYW4sXG4gIHNjaGVtYTogei5ab2RUeXBlQW55XG4pOiB6LlpvZFR5cGVBbnkgfCB6LlpvZE9iamVjdDxhbnk+ID0+IHtcbiAgaWYgKCFpc1pvZEVmZmVjdCkge1xuICAgIHJldHVybiBzY2hlbWEgYXMgei5ab2RPYmplY3Q8YW55PlxuICB9XG5cbiAgbGV0IGN1cnJlbnRTY2hlbWEgPSBzY2hlbWFcblxuICB3aGlsZSAoZ2V0VHlwZU5hbWUoY3VycmVudFNjaGVtYSkgPT09IFwiWm9kRWZmZWN0c1wiKSB7XG4gICAgY29uc3QgaW5uZXJTY2hlbWEgPSBnZXRFZmZlY3RzU2NoZW1hKGN1cnJlbnRTY2hlbWEpXG4gICAgaWYgKCFpbm5lclNjaGVtYSkgYnJlYWtcbiAgICBjdXJyZW50U2NoZW1hID0gaW5uZXJTY2hlbWFcbiAgfVxuXG4gIHJldHVybiBjdXJyZW50U2NoZW1hIGFzIHouWm9kT2JqZWN0PGFueT5cbn1cblxuY29uc3QgdHJ5R2V0Wm9kU2NoZW1hQXNPYmplY3QgPSAoXG4gIHNjaGVtYTogei5ab2RUeXBlQW55XG4pOiB6LlpvZE9iamVjdDxhbnk+IHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgaXNab2RFZmZlY3QgPSBnZXRUeXBlTmFtZShzY2hlbWEpID09PSBcIlpvZEVmZmVjdHNcIlxuICBjb25zdCBzYWZlX3NjaGVtYSA9IGdldFpvZE9iamVjdFNjaGVtYUZyb21ab2RFZmZlY3RTY2hlbWEoaXNab2RFZmZlY3QsIHNjaGVtYSlcbiAgY29uc3QgaXNab2RPYmplY3QgPSBnZXRUeXBlTmFtZShzYWZlX3NjaGVtYSkgPT09IFwiWm9kT2JqZWN0XCJcblxuICBpZiAoIWlzWm9kT2JqZWN0KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgcmV0dXJuIHNhZmVfc2NoZW1hIGFzIHouWm9kT2JqZWN0PGFueT5cbn1cblxuY29uc3QgdW53cmFwWm9kU2NoZW1hID0gKHNjaGVtYTogei5ab2RUeXBlQW55KTogei5ab2RUeXBlQW55ID0+IHtcbiAgY29uc3Qgc3BlY2lhbF96b2RfdHlwZXMgPSBbXCJab2RPcHRpb25hbFwiLCBcIlpvZERlZmF1bHRcIiwgXCJab2RFZmZlY3RzXCJdXG5cbiAgd2hpbGUgKHNwZWNpYWxfem9kX3R5cGVzLmluY2x1ZGVzKGdldFR5cGVOYW1lKHNjaGVtYSkpKSB7XG4gICAgY29uc3QgdHlwZU5hbWUgPSBnZXRUeXBlTmFtZShzY2hlbWEpXG4gICAgaWYgKHR5cGVOYW1lID09PSBcIlpvZE9wdGlvbmFsXCIgfHwgdHlwZU5hbWUgPT09IFwiWm9kRGVmYXVsdFwiKSB7XG4gICAgICBjb25zdCBpbm5lciA9IGdldElubmVyVHlwZShzY2hlbWEpXG4gICAgICBpZiAoIWlubmVyKSBicmVha1xuICAgICAgc2NoZW1hID0gaW5uZXJcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKHR5cGVOYW1lID09PSBcIlpvZEVmZmVjdHNcIikge1xuICAgICAgY29uc3QgaW5uZXIgPSBnZXRFZmZlY3RzU2NoZW1hKHNjaGVtYSlcbiAgICAgIGlmICghaW5uZXIpIGJyZWFrXG4gICAgICBzY2hlbWEgPSBpbm5lclxuICAgICAgY29udGludWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5jb25zdCBpc1pvZFNjaGVtYUFycmF5ID0gKHNjaGVtYTogei5ab2RUeXBlQW55KSA9PiB7XG4gIGNvbnN0IHVud3JhcHBlZCA9IHVud3JhcFpvZFNjaGVtYShzY2hlbWEpXG4gIHJldHVybiBnZXRUeXBlTmFtZSh1bndyYXBwZWQpID09PSBcIlpvZEFycmF5XCJcbn1cblxuY29uc3QgaXNab2RTY2hlbWFCb29sZWFuID0gKHNjaGVtYTogei5ab2RUeXBlQW55KSA9PiB7XG4gIGNvbnN0IHVud3JhcHBlZCA9IHVud3JhcFpvZFNjaGVtYShzY2hlbWEpXG4gIHJldHVybiBnZXRUeXBlTmFtZSh1bndyYXBwZWQpID09PSBcIlpvZEJvb2xlYW5cIlxufVxuXG5jb25zdCBwYXJzZVF1ZXJ5UGFyYW1zID0gKFxuICBzY2hlbWE6IHouWm9kVHlwZUFueSxcbiAgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzdXBwb3J0ZWRBcnJheUZvcm1hdHM6IFF1ZXJ5QXJyYXlGb3JtYXRzXG4pID0+IHtcbiAgY29uc3QgcGFyc2VkX2lucHV0ID0gT2JqZWN0LmFzc2lnbih7fSwgaW5wdXQpXG4gIGNvbnN0IG9ial9zY2hlbWEgPSB0cnlHZXRab2RTY2hlbWFBc09iamVjdChzY2hlbWEpXG5cbiAgaWYgKG9ial9zY2hlbWEpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmpfc2NoZW1hLnNoYXBlKSkge1xuICAgICAgaWYgKGlzWm9kU2NoZW1hQXJyYXkodmFsdWUgYXMgei5ab2RUeXBlQW55KSkge1xuICAgICAgICBjb25zdCBhcnJheV9pbnB1dCA9IGlucHV0W2tleV1cblxuICAgICAgICBpZiAodHlwZW9mIGFycmF5X2lucHV0ID09PSBcInN0cmluZ1wiICYmIGFycmF5X2lucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHBhcnNlZF9pbnB1dFtrZXldID0gW11cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgYXJyYXlfaW5wdXQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICBhcnJheV9pbnB1dC5sZW5ndGggPiAwICYmXG4gICAgICAgICAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzLmluY2x1ZGVzKFwiY29tbWFcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgcGFyc2VkX2lucHV0W2tleV0gPSBhcnJheV9pbnB1dC5zcGxpdChcIixcIilcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0ID0gaW5wdXRbYCR7a2V5fVtdYF1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiBicmFja2V0X3N5bnRheF9hcnJheV9pbnB1dCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgIHN1cHBvcnRlZEFycmF5Rm9ybWF0cy5pbmNsdWRlcyhcImJyYWNrZXRzXCIpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHByZV9zcGxpdF9hcnJheSA9IGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0XG4gICAgICAgICAgcGFyc2VkX2lucHV0W2tleV0gPSBwcmVfc3BsaXRfYXJyYXkuc3BsaXQoXCIsXCIpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgQXJyYXkuaXNBcnJheShicmFja2V0X3N5bnRheF9hcnJheV9pbnB1dCkgJiZcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHMuaW5jbHVkZXMoXCJicmFja2V0c1wiKVxuICAgICAgICApIHtcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0XG4gICAgICAgIH1cblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNab2RTY2hlbWFCb29sZWFuKHZhbHVlIGFzIHouWm9kVHlwZUFueSkpIHtcbiAgICAgICAgY29uc3QgYm9vbGVhbl9pbnB1dCA9IGlucHV0W2tleV1cblxuICAgICAgICBpZiAodHlwZW9mIGJvb2xlYW5faW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IGJvb2xlYW5faW5wdXQgPT09IFwidHJ1ZVwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2NoZW1hLnBhcnNlKHBhcnNlZF9pbnB1dClcbn1cblxuY29uc3QgdmFsaWRhdGVRdWVyeVBhcmFtcyA9IChcbiAgaW5wdXRVcmw6IHN0cmluZyxcbiAgc2NoZW1hOiB6LlpvZFR5cGVBbnksXG4gIHN1cHBvcnRlZEFycmF5Rm9ybWF0czogUXVlcnlBcnJheUZvcm1hdHNcbikgPT4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGlucHV0VXJsLCBcImh0dHA6Ly9kdW1teS5jb21cIilcblxuICBjb25zdCBzZWVuS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cbiAgY29uc3Qgb2JqX3NjaGVtYSA9IHRyeUdldFpvZFNjaGVtYUFzT2JqZWN0KHNjaGVtYSlcbiAgaWYgKCFvYmpfc2NoZW1hKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBvZiB1cmwuc2VhcmNoUGFyYW1zLmtleXMoKSkge1xuICAgIGZvciAoY29uc3QgW3NjaGVtYUtleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9ial9zY2hlbWEuc2hhcGUpKSB7XG4gICAgICBpZiAoaXNab2RTY2hlbWFBcnJheSh2YWx1ZSBhcyB6LlpvZFR5cGVBbnkpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBrZXkgPT09IGAke3NjaGVtYUtleX1bXWAgJiZcbiAgICAgICAgICAhc3VwcG9ydGVkQXJyYXlGb3JtYXRzLmluY2x1ZGVzKFwiYnJhY2tldHNcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oe1xuICAgICAgICAgICAgdHlwZTogXCJpbnZhbGlkX3F1ZXJ5X3BhcmFtc1wiLFxuICAgICAgICAgICAgbWVzc2FnZTogYEJyYWNrZXQgc3ludGF4IG5vdCBzdXBwb3J0ZWQgZm9yIHF1ZXJ5IHBhcmFtIFwiJHtzY2hlbWFLZXl9XCJgLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBrZXlfc2NoZW1hID0gb2JqX3NjaGVtYS5zaGFwZVtrZXldXG5cbiAgICBpZiAoa2V5X3NjaGVtYSkge1xuICAgICAgaWYgKGlzWm9kU2NoZW1hQXJyYXkoa2V5X3NjaGVtYSkpIHtcbiAgICAgICAgaWYgKHNlZW5LZXlzLmhhcyhrZXkpICYmICFzdXBwb3J0ZWRBcnJheUZvcm1hdHMuaW5jbHVkZXMoXCJyZXBlYXRcIikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgICAgICB0eXBlOiBcImludmFsaWRfcXVlcnlfcGFyYW1zXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBgUmVwZWF0ZWQgcGFyYW1ldGVycyBub3Qgc3VwcG9ydGVkIGZvciBkdXBsaWNhdGUgcXVlcnkgcGFyYW0gXCIke2tleX1cImAsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHNlZW5LZXlzLmFkZChrZXkpXG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0SW5wdXQ8XG4gIEpzb25Cb2R5IGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBRdWVyeVBhcmFtcyBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgQ29tbW9uUGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBGb3JtRGF0YSBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgSnNvblJlc3BvbnNlIGV4dGVuZHMgei5ab2RUeXBlQW55XG4+IHtcbiAganNvbkJvZHk/OiBKc29uQm9keVxuICBxdWVyeVBhcmFtcz86IFF1ZXJ5UGFyYW1zXG4gIGNvbW1vblBhcmFtcz86IENvbW1vblBhcmFtc1xuICBmb3JtRGF0YT86IEZvcm1EYXRhXG4gIGpzb25SZXNwb25zZT86IEpzb25SZXNwb25zZVxuICBzaG91bGRWYWxpZGF0ZVJlc3BvbnNlcz86IGJvb2xlYW5cbiAgc2hvdWxkVmFsaWRhdGVHZXRSZXF1ZXN0Qm9keT86IGJvb2xlYW5cbiAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzPzogUXVlcnlBcnJheUZvcm1hdHNcbn1cblxuY29uc3Qgem9kSXNzdWVUb1N0cmluZyA9IChpc3N1ZTogei5ab2RJc3N1ZSkgPT4ge1xuICBpZiAoaXNzdWUucGF0aC5qb2luKFwiLlwiKSA9PT0gXCJcIikge1xuICAgIHJldHVybiBpc3N1ZS5tZXNzYWdlXG4gIH1cbiAgaWYgKGlzc3VlLm1lc3NhZ2UgPT09IFwiUmVxdWlyZWRcIikge1xuICAgIHJldHVybiBgJHtpc3N1ZS5wYXRoLmpvaW4oXCIuXCIpfSBpcyByZXF1aXJlZGBcbiAgfVxuICByZXR1cm4gYCR7aXNzdWUubWVzc2FnZX0gZm9yIFwiJHtpc3N1ZS5wYXRoLmpvaW4oXCIuXCIpfVwiYFxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUpzb25SZXNwb25zZTxKc29uUmVzcG9uc2UgZXh0ZW5kcyB6LlpvZFR5cGVBbnk+KFxuICBqc29uUmVzcG9uc2U6IEpzb25SZXNwb25zZSB8IHVuZGVmaW5lZCxcbiAgcmVzOiBOZXh0QXBpUmVzcG9uc2Vcbikge1xuICBjb25zdCBvcmlnaW5hbF9yZXNfanNvbiA9IHJlcy5qc29uXG4gIGNvbnN0IG92ZXJyaWRlX3Jlc19qc29uID0gKGpzb246IGFueSkgPT4ge1xuICAgIGNvbnN0IGlzX3N1Y2Nlc3MgPSByZXMuc3RhdHVzQ29kZSA+PSAyMDAgJiYgcmVzLnN0YXR1c0NvZGUgPCAzMDBcbiAgICBpZiAoIWlzX3N1Y2Nlc3MpIHtcbiAgICAgIHJldHVybiBvcmlnaW5hbF9yZXNfanNvbihqc29uKVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBqc29uUmVzcG9uc2U/LnBhcnNlKGpzb24pXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxTZXJ2ZXJFcnJvckV4Y2VwdGlvbih7XG4gICAgICAgIHR5cGU6IFwiaW52YWxpZF9yZXNwb25zZVwiLFxuICAgICAgICBtZXNzYWdlOiBcInRoZSByZXNwb25zZSBkb2VzIG5vdCBtYXRjaCB3aXRoIGpzb25SZXNwb25zZVwiLFxuICAgICAgICB6b2RFcnJvcjogZXJyLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gb3JpZ2luYWxfcmVzX2pzb24oanNvbilcbiAgfVxuICByZXMuanNvbiA9IG92ZXJyaWRlX3Jlc19qc29uXG59XG5cbmV4cG9ydCBjb25zdCB3aXRoVmFsaWRhdGlvbiA9XG4gIDxcbiAgICBKc29uQm9keSBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBRdWVyeVBhcmFtcyBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBDb21tb25QYXJhbXMgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gICAgRm9ybURhdGEgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gICAgSnNvblJlc3BvbnNlIGV4dGVuZHMgei5ab2RUeXBlQW55XG4gID4oXG4gICAgaW5wdXQ6IFJlcXVlc3RJbnB1dDxcbiAgICAgIEpzb25Cb2R5LFxuICAgICAgUXVlcnlQYXJhbXMsXG4gICAgICBDb21tb25QYXJhbXMsXG4gICAgICBGb3JtRGF0YSxcbiAgICAgIEpzb25SZXNwb25zZVxuICAgID5cbiAgKSA9PlxuICAobmV4dCkgPT5cbiAgYXN5bmMgKHJlcTogTmV4dEFwaVJlcXVlc3QsIHJlczogTmV4dEFwaVJlc3BvbnNlKSA9PiB7XG4gICAgY29uc3QgeyBzdXBwb3J0ZWRBcnJheUZvcm1hdHMgPSBERUZBVUxUX0FSUkFZX0ZPUk1BVFMgfSA9IGlucHV0XG5cbiAgICBpZiAoXG4gICAgICAoaW5wdXQuZm9ybURhdGEgJiYgaW5wdXQuanNvbkJvZHkpIHx8XG4gICAgICAoaW5wdXQuZm9ybURhdGEgJiYgaW5wdXQuY29tbW9uUGFyYW1zKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHVzZSBmb3JtRGF0YSB3aXRoIGpzb25Cb2R5IG9yIGNvbW1vblBhcmFtc1wiKVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIChyZXEubWV0aG9kID09PSBcIlBPU1RcIiB8fCByZXEubWV0aG9kID09PSBcIlBBVENIXCIpICYmXG4gICAgICAoaW5wdXQuanNvbkJvZHkgfHwgaW5wdXQuY29tbW9uUGFyYW1zKSAmJlxuICAgICAgIXJlcS5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdPy5pbmNsdWRlcyhcImFwcGxpY2F0aW9uL2pzb25cIikgJiZcbiAgICAgICFfLmlzRW1wdHkocmVxLmJvZHkpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgIHR5cGU6IFwiaW52YWxpZF9jb250ZW50X3R5cGVcIixcbiAgICAgICAgbWVzc2FnZTogYCR7cmVxLm1ldGhvZH0gcmVxdWVzdHMgbXVzdCBoYXZlIENvbnRlbnQtVHlwZSBoZWFkZXIgd2l0aCBcImFwcGxpY2F0aW9uL2pzb25cImAsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGlucHV0LmZvcm1EYXRhICYmXG4gICAgICByZXEubWV0aG9kICE9PSBcIkdFVFwiICYmXG4gICAgICAhcmVxLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0/LmluY2x1ZGVzKFxuICAgICAgICBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiXG4gICAgICApXG4gICAgICAvLyBUT0RPIGV2ZW50dWFsbHkgd2Ugc2hvdWxkIHN1cHBvcnQgbXVsdGlwYXJ0L2Zvcm0tZGF0YVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oe1xuICAgICAgICB0eXBlOiBcImludmFsaWRfY29udGVudF90eXBlXCIsXG4gICAgICAgIG1lc3NhZ2U6IGBNdXN0IGhhdmUgQ29udGVudC1UeXBlIGhlYWRlciB3aXRoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCJgLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3JpZ2luYWxfY29tYmluZWRfcGFyYW1zID0geyAuLi5yZXEucXVlcnksIC4uLnJlcS5ib2R5IH1cblxuICAgICAgY29uc3Qgd2lsbFZhbGlkYXRlUmVxdWVzdEJvZHkgPSBpbnB1dC5zaG91bGRWYWxpZGF0ZUdldFJlcXVlc3RCb2R5XG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IHJlcS5tZXRob2QgIT09IFwiR0VUXCIgJiYgcmVxLm1ldGhvZCAhPT0gXCJERUxFVEVcIlxuXG4gICAgICBjb25zdCBpc0Zvcm1EYXRhID0gQm9vbGVhbihpbnB1dC5mb3JtRGF0YSlcblxuICAgICAgaWYgKGlzRm9ybURhdGEgJiYgd2lsbFZhbGlkYXRlUmVxdWVzdEJvZHkpIHtcbiAgICAgICAgcmVxLmJvZHkgPSBpbnB1dC5mb3JtRGF0YT8ucGFyc2UocmVxLmJvZHkpXG4gICAgICB9XG5cbiAgICAgIGlmICghaXNGb3JtRGF0YSAmJiB3aWxsVmFsaWRhdGVSZXF1ZXN0Qm9keSkge1xuICAgICAgICByZXEuYm9keSA9IGlucHV0Lmpzb25Cb2R5Py5wYXJzZShyZXEuYm9keSlcbiAgICAgIH1cblxuICAgICAgaWYgKGlucHV0LnF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIGlmICghcmVxLnVybCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInJlcS51cmwgaXMgdW5kZWZpbmVkXCIpXG4gICAgICAgIH1cblxuICAgICAgICB2YWxpZGF0ZVF1ZXJ5UGFyYW1zKHJlcS51cmwsIGlucHV0LnF1ZXJ5UGFyYW1zLCBzdXBwb3J0ZWRBcnJheUZvcm1hdHMpXG5cbiAgICAgICAgcmVxLnF1ZXJ5ID0gcGFyc2VRdWVyeVBhcmFtcyhcbiAgICAgICAgICBpbnB1dC5xdWVyeVBhcmFtcyxcbiAgICAgICAgICByZXEucXVlcnksXG4gICAgICAgICAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzXG4gICAgICAgICkgYXMgdHlwZW9mIHJlcS5xdWVyeVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQuY29tbW9uUGFyYW1zKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBhcyBjb21tb25QYXJhbXMgaW5jbHVkZXMgcXVlcnkgcGFyYW1zLCB3ZSBjYW4gdXNlIHRoZSBwYXJzZVF1ZXJ5UGFyYW1zIGZ1bmN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICA7KHJlcSBhcyBhbnkpLmNvbW1vblBhcmFtcyA9IHBhcnNlUXVlcnlQYXJhbXMoXG4gICAgICAgICAgaW5wdXQuY29tbW9uUGFyYW1zLFxuICAgICAgICAgIG9yaWdpbmFsX2NvbWJpbmVkX3BhcmFtcyxcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHNcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEJhZFJlcXVlc3RFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yLm5hbWUgPT09IFwiWm9kRXJyb3JcIikge1xuICAgICAgICBsZXQgbWVzc2FnZVxuICAgICAgICBpZiAoZXJyb3IuaXNzdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGNvbnN0IGlzc3VlID0gZXJyb3IuaXNzdWVzWzBdXG4gICAgICAgICAgbWVzc2FnZSA9IHpvZElzc3VlVG9TdHJpbmcoaXNzdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZV9jb21wb25lbnRzOiBzdHJpbmdbXSA9IFtdXG4gICAgICAgICAgZm9yIChjb25zdCBpc3N1ZSBvZiBlcnJvci5pc3N1ZXMpIHtcbiAgICAgICAgICAgIG1lc3NhZ2VfY29tcG9uZW50cy5wdXNoKHpvZElzc3VlVG9TdHJpbmcoaXNzdWUpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBtZXNzYWdlID1cbiAgICAgICAgICAgIGAke2Vycm9yLmlzc3Vlcy5sZW5ndGh9IElucHV0IEVycm9yczogYCArXG4gICAgICAgICAgICBtZXNzYWdlX2NvbXBvbmVudHMuam9pbihcIiwgXCIpXG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgICAgdHlwZTogXCJpbnZhbGlkX2lucHV0XCIsXG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICB2YWxpZGF0aW9uX2Vycm9yczogZXJyb3IuZm9ybWF0KCksXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX2lucHV0XCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiRXJyb3Igd2hpbGUgcGFyc2luZyBpbnB1dFwiLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aGlzIHdpbGwgb3ZlcnJpZGUgdGhlIHJlcy5qc29uIG1ldGhvZCB0byB2YWxpZGF0ZSB0aGUgcmVzcG9uc2VcbiAgICAgKi9cbiAgICBpZiAoaW5wdXQuc2hvdWxkVmFsaWRhdGVSZXNwb25zZXMpIHtcbiAgICAgIHZhbGlkYXRlSnNvblJlc3BvbnNlKGlucHV0Lmpzb25SZXNwb25zZSwgcmVzKVxuICAgIH1cblxuICAgIHJldHVybiBuZXh0KHJlcSwgcmVzKVxuICB9XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhWYWxpZGF0aW9uXG4iLCAiLyoqXG4gKiBab2QgQ29tcGF0aWJpbGl0eSBMYXllclxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGNvbXBhdGliaWxpdHkgYmV0d2VlbiBab2QgdjMgYW5kIFpvZCB2NC5cbiAqIEluIFpvZCB2NCwgdGhlIGludGVybmFsIHN0cnVjdHVyZSBjaGFuZ2VkOlxuICogLSBgLl9kZWZgIG1vdmVkIHRvIGAuX3pvZC5kZWZgXG4gKiAtIGAuX2RlZi50eXBlTmFtZWAgbW92ZWQgdG8gYC5fem9kLmRlZi50eXBlYFxuICpcbiAqIFRoaXMgbW9kdWxlIGFic3RyYWN0cyB0aGVzZSBkaWZmZXJlbmNlcyB0byBzdXBwb3J0IGJvdGggdmVyc2lvbnMuXG4gKi9cblxuaW1wb3J0IHsgWm9kVHlwZUFueSB9IGZyb20gXCJ6b2RcIlxuXG4vKipcbiAqIENoZWNrIGlmIHdlJ3JlIHVzaW5nIFpvZCB2NCtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzWm9kVjQoc2NoZW1hOiBab2RUeXBlQW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBcIl96b2RcIiBpbiBzY2hlbWFcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGludGVybmFsIGRlZmluaXRpb24gb2JqZWN0IGZyb20gYSBab2Qgc2NoZW1hLlxuICogV29ya3Mgd2l0aCBib3RoIFpvZCB2MyAoLl9kZWYpIGFuZCBab2QgdjQgKC5fem9kLmRlZilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZihzY2hlbWE6IFpvZFR5cGVBbnkpOiBhbnkge1xuICBpZiAoXCJfem9kXCIgaW4gc2NoZW1hKSB7XG4gICAgLy8gWm9kIHY0XG4gICAgcmV0dXJuIChzY2hlbWEgYXMgYW55KS5fem9kLmRlZlxuICB9XG4gIC8vIFpvZCB2M1xuICByZXR1cm4gKHNjaGVtYSBhcyBhbnkpLl9kZWZcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHR5cGUgbmFtZSBvZiBhIFpvZCBzY2hlbWEuXG4gKiBab2QgdjM6IHNjaGVtYS5fZGVmLnR5cGVOYW1lIChlLmcuLCBcIlpvZFN0cmluZ1wiKVxuICogWm9kIHY0OiBzY2hlbWEuX3pvZC5kZWYudHlwZSAoZS5nLiwgXCJzdHJpbmdcIikgLSBidXQgd2Ugbm9ybWFsaXplIHRvIHYzLXN0eWxlIG5hbWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlTmFtZShzY2hlbWE6IFpvZFR5cGVBbnkpOiBzdHJpbmcge1xuICBpZiAoXCJfem9kXCIgaW4gc2NoZW1hKSB7XG4gICAgLy8gWm9kIHY0IC0gdGhlIHR5cGUgaXMgc3RvcmVkIGRpZmZlcmVudGx5XG4gICAgY29uc3Qgem9kID0gKHNjaGVtYSBhcyBhbnkpLl96b2RcbiAgICAvLyBJbiBab2QgdjQsIHRoZSBjb25zdHJ1Y3RvciBuYW1lIGdpdmVzIHVzIHRoZSB0eXBlXG4gICAgY29uc3QgY29uc3RydWN0b3JOYW1lID0gc2NoZW1hLmNvbnN0cnVjdG9yLm5hbWVcbiAgICBpZiAoY29uc3RydWN0b3JOYW1lICYmIGNvbnN0cnVjdG9yTmFtZS5zdGFydHNXaXRoKFwiJFpvZFwiKSkge1xuICAgICAgLy8gWm9kIHY0IHVzZXMgJFpvZFN0cmluZywgJFpvZE51bWJlciwgZXRjIC0gY29udmVydCB0byBab2RTdHJpbmcsIFpvZE51bWJlclxuICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yTmFtZS5zbGljZSgxKVxuICAgIH1cbiAgICAvLyBGYWxsYmFjayB0byBkZWYudHlwZSBpZiBhdmFpbGFibGVcbiAgICBpZiAoem9kLmRlZiAmJiB6b2QuZGVmLnR5cGUpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVab2RWNFR5cGUoem9kLmRlZi50eXBlKVxuICAgIH1cbiAgICByZXR1cm4gY29uc3RydWN0b3JOYW1lIHx8IFwiVW5rbm93blwiXG4gIH1cbiAgLy8gWm9kIHYzXG4gIHJldHVybiAoc2NoZW1hIGFzIGFueSkuX2RlZj8udHlwZU5hbWUgfHwgXCJVbmtub3duXCJcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgWm9kIHY0IHR5cGUgbmFtZXMgdG8gdjMtc3R5bGUgbmFtZXMgZm9yIGNvbnNpc3RlbmN5XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVpvZFY0VHlwZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB0eXBlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIHN0cmluZzogXCJab2RTdHJpbmdcIixcbiAgICBudW1iZXI6IFwiWm9kTnVtYmVyXCIsXG4gICAgYmlnaW50OiBcIlpvZEJpZ0ludFwiLFxuICAgIGJvb2xlYW46IFwiWm9kQm9vbGVhblwiLFxuICAgIGRhdGU6IFwiWm9kRGF0ZVwiLFxuICAgIHVuZGVmaW5lZDogXCJab2RVbmRlZmluZWRcIixcbiAgICBudWxsOiBcIlpvZE51bGxcIixcbiAgICB2b2lkOiBcIlpvZFZvaWRcIixcbiAgICBhbnk6IFwiWm9kQW55XCIsXG4gICAgdW5rbm93bjogXCJab2RVbmtub3duXCIsXG4gICAgbmV2ZXI6IFwiWm9kTmV2ZXJcIixcbiAgICBsaXRlcmFsOiBcIlpvZExpdGVyYWxcIixcbiAgICBlbnVtOiBcIlpvZEVudW1cIixcbiAgICBuYXRpdmVFbnVtOiBcIlpvZE5hdGl2ZUVudW1cIixcbiAgICBvYmplY3Q6IFwiWm9kT2JqZWN0XCIsXG4gICAgYXJyYXk6IFwiWm9kQXJyYXlcIixcbiAgICB0dXBsZTogXCJab2RUdXBsZVwiLFxuICAgIHVuaW9uOiBcIlpvZFVuaW9uXCIsXG4gICAgZGlzY3JpbWluYXRlZFVuaW9uOiBcIlpvZERpc2NyaW1pbmF0ZWRVbmlvblwiLFxuICAgIGludGVyc2VjdGlvbjogXCJab2RJbnRlcnNlY3Rpb25cIixcbiAgICByZWNvcmQ6IFwiWm9kUmVjb3JkXCIsXG4gICAgbWFwOiBcIlpvZE1hcFwiLFxuICAgIHNldDogXCJab2RTZXRcIixcbiAgICBmdW5jdGlvbjogXCJab2RGdW5jdGlvblwiLFxuICAgIGxhenk6IFwiWm9kTGF6eVwiLFxuICAgIHByb21pc2U6IFwiWm9kUHJvbWlzZVwiLFxuICAgIG9wdGlvbmFsOiBcIlpvZE9wdGlvbmFsXCIsXG4gICAgbnVsbGFibGU6IFwiWm9kTnVsbGFibGVcIixcbiAgICBkZWZhdWx0OiBcIlpvZERlZmF1bHRcIixcbiAgICBlZmZlY3RzOiBcIlpvZEVmZmVjdHNcIixcbiAgICB0cmFuc2Zvcm1lcjogXCJab2RUcmFuc2Zvcm1lclwiLFxuICAgIGJyYW5kZWQ6IFwiWm9kQnJhbmRlZFwiLFxuICAgIHBpcGVsaW5lOiBcIlpvZFBpcGVsaW5lXCIsXG4gICAgcmVhZG9ubHk6IFwiWm9kUmVhZG9ubHlcIixcbiAgfVxuICByZXR1cm4gdHlwZU1hcFt0eXBlXSB8fCBgWm9kJHt0eXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zbGljZSgxKX1gXG59XG5cbi8qKlxuICogR2V0IHRoZSBpbm5lciBzY2hlbWEgZnJvbSBhIFpvZEVmZmVjdHMvWm9kVHJhbnNmb3JtZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVmZmVjdHNTY2hlbWEoc2NoZW1hOiBab2RUeXBlQW55KTogWm9kVHlwZUFueSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIHJldHVybiBkZWY/LnNjaGVtYVxufVxuXG4vKipcbiAqIEdldCB0aGUgaW5uZXIgdHlwZSBmcm9tIFpvZE9wdGlvbmFsLCBab2ROdWxsYWJsZSwgWm9kRGVmYXVsdCwgZXRjLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5uZXJUeXBlKHNjaGVtYTogWm9kVHlwZUFueSk6IFpvZFR5cGVBbnkgfCB1bmRlZmluZWQge1xuICBjb25zdCBkZWYgPSBnZXREZWYoc2NoZW1hKVxuICByZXR1cm4gZGVmPy5pbm5lclR5cGVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHNoYXBlIG9mIGEgWm9kT2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaGFwZShcbiAgc2NoZW1hOiBab2RUeXBlQW55XG4pOiBSZWNvcmQ8c3RyaW5nLCBab2RUeXBlQW55PiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIGlmICh0eXBlb2YgZGVmPy5zaGFwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIGRlZi5zaGFwZSgpXG4gIH1cbiAgcmV0dXJuIGRlZj8uc2hhcGVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGNoZWNrcyBhcnJheSBmcm9tIGEgc3RyaW5nL251bWJlciBzY2hlbWFcbiAqIEluIFpvZCA0LCBjaGVja3MgYXJlIG9iamVjdHMgd2l0aCBfem9kLmRlZiBjb250YWluaW5nIHRoZSBjaGVjayBkZXRhaWxzXG4gKiBXZSBub3JtYWxpemUgdGhlbSB0byBoYXZlIHRoZSBwcm9wZXJ0aWVzIGRpcmVjdGx5IGFjY2Vzc2libGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoZWNrcyhzY2hlbWE6IFpvZFR5cGVBbnkpOiBhbnlbXSB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIGNvbnN0IGNoZWNrcyA9IGRlZj8uY2hlY2tzIHx8IFtdXG5cbiAgLy8gTm9ybWFsaXplIFpvZCA0IGNoZWNrIG9iamVjdHNcbiAgcmV0dXJuIGNoZWNrcy5tYXAoKGNoZWNrOiBhbnkpID0+IHtcbiAgICBpZiAoY2hlY2suX3pvZD8uZGVmKSB7XG4gICAgICAvLyBab2QgNDogZmxhdHRlbiBfem9kLmRlZiBwcm9wZXJ0aWVzIG9udG8gdGhlIGNoZWNrIG9iamVjdFxuICAgICAgcmV0dXJuIHsgLi4uY2hlY2suX3pvZC5kZWYgfVxuICAgIH1cbiAgICAvLyBab2QgMzogYWxyZWFkeSBoYXMgcHJvcGVydGllcyBkaXJlY3RseVxuICAgIHJldHVybiBjaGVja1xuICB9KVxufVxuXG4vKipcbiAqIEdldCB2YWx1ZXMgZnJvbSBhIFpvZEVudW0gb3IgWm9kTmF0aXZlRW51bVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bVZhbHVlcyhcbiAgc2NoZW1hOiBab2RUeXBlQW55XG4pOiBhbnlbXSB8IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICAvLyBab2QgNDogdXNlIHNjaGVtYS5vcHRpb25zIChhcnJheSkgb3Igc2NoZW1hLmVudW0gKG9iamVjdClcbiAgaWYgKFwib3B0aW9uc1wiIGluIHNjaGVtYSAmJiBBcnJheS5pc0FycmF5KChzY2hlbWEgYXMgYW55KS5vcHRpb25zKSkge1xuICAgIHJldHVybiAoc2NoZW1hIGFzIGFueSkub3B0aW9uc1xuICB9XG4gIGlmIChcImVudW1cIiBpbiBzY2hlbWEgJiYgKHNjaGVtYSBhcyBhbnkpLmVudW0pIHtcbiAgICByZXR1cm4gKHNjaGVtYSBhcyBhbnkpLmVudW1cbiAgfVxuICAvLyBab2QgMyBmYWxsYmFja1xuICBjb25zdCBkZWYgPSBnZXREZWYoc2NoZW1hKVxuICAvLyBab2QgNCBhbHNvIGhhcyBlbnRyaWVzIGluIGRlZlxuICByZXR1cm4gZGVmPy52YWx1ZXMgfHwgZGVmPy5lbnRyaWVzXG59XG5cbi8qKlxuICogR2V0IHRoZSBsaXRlcmFsIHZhbHVlIGZyb20gYSBab2RMaXRlcmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXRlcmFsVmFsdWUoc2NoZW1hOiBab2RUeXBlQW55KTogYW55IHtcbiAgLy8gWm9kIDQ6IHRyeSBzY2hlbWEudmFsdWUgZmlyc3QgKHB1YmxpYyBBUEkpXG4gIGlmIChcInZhbHVlXCIgaW4gc2NoZW1hKSB7XG4gICAgcmV0dXJuIChzY2hlbWEgYXMgYW55KS52YWx1ZVxuICB9XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIC8vIFpvZCA0OiB2YWx1ZXMgaXMgYW4gYXJyYXlcbiAgaWYgKEFycmF5LmlzQXJyYXkoZGVmPy52YWx1ZXMpKSB7XG4gICAgcmV0dXJuIGRlZi52YWx1ZXNbMF1cbiAgfVxuICAvLyBab2QgMzogdmFsdWUgaXMgYSBzaW5nbGUgdmFsdWVcbiAgcmV0dXJuIGRlZj8udmFsdWVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgdmFsdWUgZnJvbSBhIFpvZERlZmF1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZShzY2hlbWE6IFpvZFR5cGVBbnkpOiBhbnkge1xuICBjb25zdCBkZWYgPSBnZXREZWYoc2NoZW1hKVxuICBpZiAodHlwZW9mIGRlZj8uZGVmYXVsdFZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gZGVmLmRlZmF1bHRWYWx1ZSgpXG4gIH1cbiAgcmV0dXJuIGRlZj8uZGVmYXVsdFZhbHVlXG59XG5cbi8qKlxuICogR2V0IGFycmF5IGNvbnN0cmFpbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcnJheUNvbnN0cmFpbnRzKHNjaGVtYTogWm9kVHlwZUFueSk6IHtcbiAgZXhhY3RMZW5ndGg/OiB7IHZhbHVlOiBudW1iZXIgfVxuICBtaW5MZW5ndGg/OiB7IHZhbHVlOiBudW1iZXIgfVxuICBtYXhMZW5ndGg/OiB7IHZhbHVlOiBudW1iZXIgfVxufSB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIHJldHVybiB7XG4gICAgZXhhY3RMZW5ndGg6IGRlZj8uZXhhY3RMZW5ndGgsXG4gICAgbWluTGVuZ3RoOiBkZWY/Lm1pbkxlbmd0aCxcbiAgICBtYXhMZW5ndGg6IGRlZj8ubWF4TGVuZ3RoLFxuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBlbGVtZW50IHR5cGUgZnJvbSBhIFpvZEFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcnJheVR5cGUoc2NoZW1hOiBab2RUeXBlQW55KTogWm9kVHlwZUFueSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIHJldHVybiBkZWY/LnR5cGVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIHR5cGUgZnJvbSBhIFpvZFJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVjb3JkVmFsdWVUeXBlKHNjaGVtYTogWm9kVHlwZUFueSk6IFpvZFR5cGVBbnkgfCB1bmRlZmluZWQge1xuICBjb25zdCBkZWYgPSBnZXREZWYoc2NoZW1hKVxuICByZXR1cm4gZGVmPy52YWx1ZVR5cGVcbn1cblxuLyoqXG4gKiBHZXQgY2F0Y2hhbGwgZnJvbSBab2RPYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhdGNoYWxsKHNjaGVtYTogWm9kVHlwZUFueSk6IFpvZFR5cGVBbnkgfCB1bmRlZmluZWQge1xuICBjb25zdCBkZWYgPSBnZXREZWYoc2NoZW1hKVxuICByZXR1cm4gZGVmPy5jYXRjaGFsbFxufVxuXG4vKipcbiAqIEdldCB1bmtub3duS2V5cyBmcm9tIFpvZE9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5rbm93bktleXMoXG4gIHNjaGVtYTogWm9kVHlwZUFueVxuKTogXCJwYXNzdGhyb3VnaFwiIHwgXCJzdHJpY3RcIiB8IFwic3RyaXBcIiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIHJldHVybiBkZWY/LnVua25vd25LZXlzXG59XG5cbi8qKlxuICogR2V0IGxlZnQvcmlnaHQgZnJvbSBab2RJbnRlcnNlY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEludGVyc2VjdGlvblBhcnRzKHNjaGVtYTogWm9kVHlwZUFueSk6IHtcbiAgbGVmdD86IFpvZFR5cGVBbnlcbiAgcmlnaHQ/OiBab2RUeXBlQW55XG59IHtcbiAgY29uc3QgZGVmID0gZ2V0RGVmKHNjaGVtYSlcbiAgcmV0dXJuIHtcbiAgICBsZWZ0OiBkZWY/LmxlZnQsXG4gICAgcmlnaHQ6IGRlZj8ucmlnaHQsXG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgb3B0aW9ucyBmcm9tIFpvZFVuaW9uIG9yIFpvZERpc2NyaW1pbmF0ZWRVbmlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5pb25PcHRpb25zKHNjaGVtYTogWm9kVHlwZUFueSk6IFpvZFR5cGVBbnlbXSB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIGNvbnN0IG9wdGlvbnMgPSBkZWY/Lm9wdGlvbnNcbiAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBNYXApIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShvcHRpb25zLnZhbHVlcygpKVxuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIG9wdGlvbnNcbiAgfVxuICByZXR1cm4gW11cbn1cblxuLyoqXG4gKiBHZXQgZGlzY3JpbWluYXRvciBmcm9tIFpvZERpc2NyaW1pbmF0ZWRVbmlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlzY3JpbWluYXRvcihzY2hlbWE6IFpvZFR5cGVBbnkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBkZWYgPSBnZXREZWYoc2NoZW1hKVxuICByZXR1cm4gZGVmPy5kaXNjcmltaW5hdG9yXG59XG5cbi8qKlxuICogR2V0IGVmZmVjdCBmcm9tIFpvZEVmZmVjdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVmZmVjdChzY2hlbWE6IFpvZFR5cGVBbnkpOiBhbnkge1xuICBjb25zdCBkZWYgPSBnZXREZWYoc2NoZW1hKVxuICByZXR1cm4gZGVmPy5lZmZlY3Rcbn1cblxuLyoqXG4gKiBHZXQgcGlwZWxpbmUgaW4vb3V0IGZyb20gWm9kUGlwZWxpbmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBpcGVsaW5lUGFydHMoc2NoZW1hOiBab2RUeXBlQW55KToge1xuICBpbj86IFpvZFR5cGVBbnlcbiAgb3V0PzogWm9kVHlwZUFueVxufSB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIHJldHVybiB7XG4gICAgaW46IGRlZj8uaW4sXG4gICAgb3V0OiBkZWY/Lm91dCxcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgYnJhbmRlZCB0eXBlIGZyb20gWm9kQnJhbmRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnJhbmRlZFR5cGUoc2NoZW1hOiBab2RUeXBlQW55KTogWm9kVHlwZUFueSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIHJldHVybiBkZWY/LnR5cGVcbn1cblxuLyoqXG4gKiBHZXQgdHVwbGUgaXRlbXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFR1cGxlSXRlbXMoc2NoZW1hOiBab2RUeXBlQW55KTogWm9kVHlwZUFueVtdIHtcbiAgY29uc3QgZGVmID0gZ2V0RGVmKHNjaGVtYSlcbiAgcmV0dXJuIGRlZj8uaXRlbXMgfHwgW11cbn1cblxuLyoqXG4gKiBHZXQgZnVuY3Rpb24gYXJncyBhbmQgcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVuY3Rpb25QYXJ0cyhzY2hlbWE6IFpvZFR5cGVBbnkpOiB7XG4gIGFyZ3M/OiBab2RUeXBlQW55XG4gIHJldHVybnM/OiBab2RUeXBlQW55XG59IHtcbiAgY29uc3QgZGVmID0gZ2V0RGVmKHNjaGVtYSlcbiAgcmV0dXJuIHtcbiAgICBhcmdzOiBkZWY/LmFyZ3MsXG4gICAgcmV0dXJuczogZGVmPy5yZXR1cm5zLFxuICB9XG59XG5cbi8qKlxuICogR2V0IG1hcCBrZXkgYW5kIHZhbHVlIHR5cGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXBUeXBlcyhzY2hlbWE6IFpvZFR5cGVBbnkpOiB7XG4gIGtleVR5cGU/OiBab2RUeXBlQW55XG4gIHZhbHVlVHlwZT86IFpvZFR5cGVBbnlcbn0ge1xuICBjb25zdCBkZWYgPSBnZXREZWYoc2NoZW1hKVxuICByZXR1cm4ge1xuICAgIGtleVR5cGU6IGRlZj8ua2V5VHlwZSxcbiAgICB2YWx1ZVR5cGU6IGRlZj8udmFsdWVUeXBlLFxuICB9XG59XG5cbi8qKlxuICogR2V0IHNldCB2YWx1ZSB0eXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXRWYWx1ZVR5cGUoc2NoZW1hOiBab2RUeXBlQW55KTogWm9kVHlwZUFueSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIHJldHVybiBkZWY/LnZhbHVlVHlwZVxufVxuXG4vKipcbiAqIEdldCBwcm9taXNlIHR5cGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFByb21pc2VUeXBlKHNjaGVtYTogWm9kVHlwZUFueSk6IFpvZFR5cGVBbnkgfCB1bmRlZmluZWQge1xuICBjb25zdCBkZWYgPSBnZXREZWYoc2NoZW1hKVxuICByZXR1cm4gZGVmPy50eXBlXG59XG5cbi8qKlxuICogR2V0IHRoZSBjdXN0b20gdHlwZSBnZXR0ZXIgaWYgYXZhaWxhYmxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXN0b21UeXBlR2V0dGVyKHNjaGVtYTogWm9kVHlwZUFueSk6IGFueSB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIHJldHVybiBkZWY/LmdldFR5cGVcbn1cbiIsICJpbXBvcnQgeyBOZXh0QXBpUmVzcG9uc2UsIE5leHRBcGlSZXF1ZXN0IH0gZnJvbSBcIm5leHRcIlxuaW1wb3J0IHsgd2l0aEV4Y2VwdGlvbkhhbmRsaW5nIH0gZnJvbSBcIi4uL25leHRqcy1leGNlcHRpb24tbWlkZGxld2FyZVwiXG5pbXBvcnQgd3JhcHBlcnMsIHsgTWlkZGxld2FyZSB9IGZyb20gXCIuLi93cmFwcGVyc1wiXG5pbXBvcnQge1xuICBDcmVhdGVXaXRoUm91dGVTcGVjRnVuY3Rpb24sXG4gIFF1ZXJ5QXJyYXlGb3JtYXRzLFxuICBSb3V0ZVNwZWMsXG59IGZyb20gXCIuLi90eXBlc1wiXG5pbXBvcnQgd2l0aE1ldGhvZHMsIHsgSFRUUE1ldGhvZHMgfSBmcm9tIFwiLi9taWRkbGV3YXJlcy93aXRoLW1ldGhvZHNcIlxuaW1wb3J0IHdpdGhWYWxpZGF0aW9uIGZyb20gXCIuL21pZGRsZXdhcmVzL3dpdGgtdmFsaWRhdGlvblwiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQge1xuICBBdXRoTWV0aG9kRG9lc05vdEFwcGx5RXhjZXB0aW9uLFxuICBVbmF1dGhvcml6ZWRFeGNlcHRpb24sXG59IGZyb20gXCIuLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuXG4vLyBQYXJhbURlZiB0eXBlIGNvbXBhdGlibGUgd2l0aCBib3RoIFpvZCAzIGFuZCBab2QgNFxudHlwZSBQYXJhbURlZiA9IHouWm9kVHlwZUFueVxuXG5leHBvcnQgY29uc3QgY2hlY2tSb3V0ZVNwZWMgPSA8XG4gIEF1dGhUeXBlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuICBNZXRob2RzIGV4dGVuZHMgSFRUUE1ldGhvZHNbXSA9IEhUVFBNZXRob2RzW10sXG4gIEpzb25Cb2R5IGV4dGVuZHMgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnksXG4gIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnksXG4gIENvbW1vblBhcmFtcyBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBNaWRkbGV3YXJlcyBleHRlbmRzIHJlYWRvbmx5IE1pZGRsZXdhcmU8YW55LCBhbnk+W10gPSByZWFkb25seSBNaWRkbGV3YXJlPFxuICAgIGFueSxcbiAgICBhbnlcbiAgPltdLFxuICBGb3JtRGF0YSBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBTcGVjIGV4dGVuZHMgUm91dGVTcGVjPFxuICAgIEF1dGhUeXBlLFxuICAgIE1ldGhvZHMsXG4gICAgSnNvbkJvZHksXG4gICAgUXVlcnlQYXJhbXMsXG4gICAgQ29tbW9uUGFyYW1zLFxuICAgIE1pZGRsZXdhcmVzLFxuICAgIEZvcm1EYXRhXG4gID4gPSBSb3V0ZVNwZWM8XG4gICAgQXV0aFR5cGUsXG4gICAgTWV0aG9kcyxcbiAgICBKc29uQm9keSxcbiAgICBRdWVyeVBhcmFtcyxcbiAgICBDb21tb25QYXJhbXMsXG4gICAgTWlkZGxld2FyZXMsXG4gICAgRm9ybURhdGFcbiAgPlxuPihcbiAgc3BlYzogU3BlY1xuKTogc3RyaW5nIGV4dGVuZHMgU3BlY1tcImF1dGhcIl1cbiAgPyBgeW91ciByb3V0ZSBzcGVjIGlzIHVuZGVyc3BlY2lmaWVkLCBhZGQgXCJhcyBjb25zdFwiYFxuICA6IFNwZWMgPT4gc3BlYyBhcyBhbnlcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQVJSQVlfRk9STUFUUzogUXVlcnlBcnJheUZvcm1hdHMgPSBbXG4gIFwiYnJhY2tldHNcIixcbiAgXCJjb21tYVwiLFxuICBcInJlcGVhdFwiLFxuXVxuXG5leHBvcnQgY29uc3QgY3JlYXRlV2l0aFJvdXRlU3BlYzogQ3JlYXRlV2l0aFJvdXRlU3BlY0Z1bmN0aW9uID0gKChcbiAgc2V0dXBQYXJhbXNcbikgPT4ge1xuICBjb25zdCB7XG4gICAgYXV0aE1pZGRsZXdhcmVNYXAgPSB7fSxcbiAgICBnbG9iYWxNaWRkbGV3YXJlcyA9IFtdLFxuICAgIGdsb2JhbE1pZGRsZXdhcmVzQWZ0ZXJBdXRoID0gW10sXG4gICAgc2hvdWxkVmFsaWRhdGVSZXNwb25zZXMsXG4gICAgc2hvdWxkVmFsaWRhdGVHZXRSZXF1ZXN0Qm9keSA9IHRydWUsXG4gICAgZXhjZXB0aW9uSGFuZGxpbmdNaWRkbGV3YXJlID0gd2l0aEV4Y2VwdGlvbkhhbmRsaW5nKHtcbiAgICAgIGFkZE9rU3RhdHVzOiBzZXR1cFBhcmFtcy5hZGRPa1N0YXR1cyxcbiAgICAgIGV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9uczoge1xuICAgICAgICBnZXRFcnJvckNvbnRleHQ6IChyZXEsIGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIHt9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGVycm9yXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pIGFzIGFueSxcbiAgICBnbG9iYWxTY2hlbWFzID0gc2V0dXBQYXJhbXMuYWRkT2tTdGF0dXNcbiAgICAgID8ge1xuICAgICAgICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgICAgICAgfVxuICAgICAgOiB7fSxcbiAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHMgPSBERUZBVUxUX0FSUkFZX0ZPUk1BVFMsXG4gICAgb25NdWx0aXBsZUF1dGhNaWRkbGV3YXJlRmFpbHVyZXMsXG4gICAgbWF4RHVyYXRpb246IGdsb2JhbE1heER1cmF0aW9uLFxuICB9ID0gc2V0dXBQYXJhbXNcblxuICBjb25zdCB3aXRoUm91dGVTcGVjID0gKHNwZWM6IFJvdXRlU3BlYykgPT4ge1xuICAgIGNvbnN0IGNyZWF0ZVJvdXRlRXhwb3J0ID0gKHVzZXJEZWZpbmVkUm91dGVGbikgPT4ge1xuICAgICAgY29uc3Qgcm9vdFJlcXVlc3RIYW5kbGVyID0gYXN5bmMgKFxuICAgICAgICByZXE6IE5leHRBcGlSZXF1ZXN0LFxuICAgICAgICByZXM6IE5leHRBcGlSZXNwb25zZVxuICAgICAgKSA9PiB7XG4gICAgICAgIGF1dGhNaWRkbGV3YXJlTWFwW1wibm9uZVwiXSA9IChuZXh0KSA9PiBuZXh0XG5cbiAgICAgICAgY29uc3QgYXV0aE1pZGRsZXdhcmVzID0gKFxuICAgICAgICAgIEFycmF5LmlzQXJyYXkoc3BlYy5hdXRoKSA/IHNwZWMuYXV0aCA6IFtzcGVjLmF1dGhdXG4gICAgICAgICkubWFwKChhdXRoVHlwZSkgPT4gW2F1dGhUeXBlLCBhdXRoTWlkZGxld2FyZU1hcFthdXRoVHlwZV1dIGFzIGNvbnN0KVxuICAgICAgICBjb25zdCB1bmRlZmluZWRBdXRoVHlwZSA9IGF1dGhNaWRkbGV3YXJlcy5maW5kKChbLCBtd10pID0+ICFtdylcbiAgICAgICAgaWYgKHVuZGVmaW5lZEF1dGhUeXBlKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhdXRoIHR5cGU6ICR7dW5kZWZpbmVkQXV0aFR5cGV9YClcblxuICAgICAgICBjb25zdCBmaXJzdEF1dGhNaWRkbGV3YXJlVGhhdFN1Y2NlZWRzID0gKG5leHQpID0+IGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgICAgICAgIGNvbnN0IGhhbmRsZU11bHRpcGxlQXV0aE1pZGRsZXdhcmVGYWlsdXJlcyA9XG4gICAgICAgICAgICBzcGVjLm9uTXVsdGlwbGVBdXRoTWlkZGxld2FyZUZhaWx1cmVzID8/XG4gICAgICAgICAgICBvbk11bHRpcGxlQXV0aE1pZGRsZXdhcmVGYWlsdXJlc1xuXG4gICAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgbWlkZGxld2FyZV0gb2YgYXV0aE1pZGRsZXdhcmVzKSB7XG4gICAgICAgICAgICBsZXQgZGlkQXV0aE1pZGRsZXdhcmVUaHJvdyA9IHRydWVcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCBtaWRkbGV3YXJlKCguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGVycm9ycyB1bnJlbGF0ZWQgdG8gYXV0aCB0aHJvd24gYnkgYnVpbHQtaW4gbWlkZGxld2FyZSAod2l0aE1ldGhvZHMsIHdpdGhWYWxpZGF0aW9uKSB3aWxsIGJlIGNhdWdodCBoZXJlXG4gICAgICAgICAgICAgICAgZGlkQXV0aE1pZGRsZXdhcmVUaHJvdyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQoLi4uYXJncylcbiAgICAgICAgICAgICAgfSkocmVxLCByZXMpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEF1dGhNZXRob2REb2VzTm90QXBwbHlFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVycm9yLnNvdXJjZV9taWRkbGV3YXJlID0gbmFtZVxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaGFuZGxlTXVsdGlwbGVBdXRoTWlkZGxld2FyZUZhaWx1cmVzICYmXG4gICAgICAgICAgICAgICAgZGlkQXV0aE1pZGRsZXdhcmVUaHJvd1xuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVNdWx0aXBsZUF1dGhNaWRkbGV3YXJlRmFpbHVyZXMoW2Vycm9yXSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBuZXcgVW5hdXRob3JpemVkRXhjZXB0aW9uKHtcbiAgICAgICAgICAgIHR5cGU6IFwidW5hdXRob3JpemVkXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBcIk5vIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgc3VjY2VlZGVkXCIsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB3cmFwcGVycyhcbiAgICAgICAgICAuLi4oKGV4Y2VwdGlvbkhhbmRsaW5nTWlkZGxld2FyZVxuICAgICAgICAgICAgPyBbZXhjZXB0aW9uSGFuZGxpbmdNaWRkbGV3YXJlXVxuICAgICAgICAgICAgOiBbXSkgYXMgW2FueV0pLFxuICAgICAgICAgIC4uLigoZ2xvYmFsTWlkZGxld2FyZXMgfHwgW10pIGFzIFtdKSxcbiAgICAgICAgICBmaXJzdEF1dGhNaWRkbGV3YXJlVGhhdFN1Y2NlZWRzLFxuICAgICAgICAgIC4uLigoZ2xvYmFsTWlkZGxld2FyZXNBZnRlckF1dGggfHwgW10pIGFzIFtdKSxcbiAgICAgICAgICAuLi4oKHNwZWMubWlkZGxld2FyZXMgfHwgW10pIGFzIFtdKSxcbiAgICAgICAgICB3aXRoTWV0aG9kcyhzcGVjLm1ldGhvZHMpLFxuICAgICAgICAgIHdpdGhWYWxpZGF0aW9uKHtcbiAgICAgICAgICAgIGpzb25Cb2R5OiBzcGVjLmpzb25Cb2R5LFxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHNwZWMucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICBjb21tb25QYXJhbXM6IHNwZWMuY29tbW9uUGFyYW1zLFxuICAgICAgICAgICAgZm9ybURhdGE6IHNwZWMuZm9ybURhdGEsXG4gICAgICAgICAgICBqc29uUmVzcG9uc2U6IHNwZWMuanNvblJlc3BvbnNlLFxuICAgICAgICAgICAgc2hvdWxkVmFsaWRhdGVSZXNwb25zZXMsXG4gICAgICAgICAgICBzaG91bGRWYWxpZGF0ZUdldFJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHVzZXJEZWZpbmVkUm91dGVGblxuICAgICAgICApKHJlcSBhcyBhbnksIHJlcylcbiAgICAgIH1cblxuICAgICAgcm9vdFJlcXVlc3RIYW5kbGVyLl9zZXR1cFBhcmFtcyA9IHNldHVwUGFyYW1zXG4gICAgICByb290UmVxdWVzdEhhbmRsZXIuX3JvdXRlU3BlYyA9IHNwZWNcblxuICAgICAgLy8gRXhwb3J0IG1heER1cmF0aW9uIGFzIGEgTmV4dC5qcyByb3V0ZSBzZWdtZW50IGNvbmZpZ1xuICAgICAgY29uc3QgbWF4RHVyYXRpb24gPSBzcGVjLm1heER1cmF0aW9uID8/IGdsb2JhbE1heER1cmF0aW9uXG4gICAgICBpZiAobWF4RHVyYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByb290UmVxdWVzdEhhbmRsZXIubWF4RHVyYXRpb24gPSBtYXhEdXJhdGlvblxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcm9vdFJlcXVlc3RIYW5kbGVyXG4gICAgfVxuXG4gICAgY3JlYXRlUm91dGVFeHBvcnQuX3NldHVwUGFyYW1zID0gc2V0dXBQYXJhbXNcbiAgICBjcmVhdGVSb3V0ZUV4cG9ydC5fcm91dGVTcGVjID0gc3BlY1xuXG4gICAgcmV0dXJuIGNyZWF0ZVJvdXRlRXhwb3J0XG4gIH1cblxuICB3aXRoUm91dGVTcGVjLl9zZXR1cFBhcmFtcyA9IHNldHVwUGFyYW1zXG5cbiAgcmV0dXJuIHdpdGhSb3V0ZVNwZWNcbn0pIGFzIGFueVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLCtCQUFBQTtBQUFBLEVBQUE7QUFBQTtBQUFBOzs7QUN3Qk8sSUFBTSxnQkFBTixjQUE0QixNQUFNO0FBQUEsRUFHdkMsWUFDUyxRQUNBLFVBQ1AsU0FDQTtBQUNBLFVBQU0sU0FBUyxPQUFPO0FBSmY7QUFDQTtBQUtQLFFBQUksTUFBTSxtQkFBbUI7QUFDM0IsWUFBTSxrQkFBa0IsTUFBTSxLQUFLLFdBQVc7QUFBQSxJQUNoRDtBQUVBLFNBQUssVUFBVSw0QkFBVyxFQUFFLE1BQU0sS0FBSztBQUFBLEVBQ3pDO0FBQUEsRUFFQSxXQUFXO0FBQ1QsV0FBTyxrQkFBa0IsS0FBSyxXQUFXLEtBQUssU0FBUyxZQUFZLEtBQUssU0FBUztBQUFBLEVBQ25GO0FBQ0Y7QUFpQk8sSUFBTSxzQkFBTixjQUFrQyxjQUFjO0FBQUEsRUFDckQsWUFDUyxVQUNQLFNBQ0E7QUFDQSxVQUFNLEtBQUssVUFBVSxPQUFPO0FBSHJCO0FBQUEsRUFJVDtBQUNGO0FBRU8s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
|
|
633
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmUvaHR0cC1leGNlcHRpb25zLnRzIiwgIi4uL3NyYy9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmUvd2l0aC1leGNlcHRpb24taGFuZGxpbmcudHMiLCAiLi4vc3JjL25leHRqcy1leGNlcHRpb24tbWlkZGxld2FyZS93aXRoLW9rLXN0YXR1cy50cyIsICIuLi9zcmMvbmV4dGpzLWV4Y2VwdGlvbi1taWRkbGV3YXJlL2luZGV4LnRzIiwgIi4uL3NyYy93cmFwcGVycy9pbmRleC50cyIsICIuLi9zcmMvd2l0aC1yb3V0ZS1zcGVjL21pZGRsZXdhcmVzL3dpdGgtbWV0aG9kcy50cyIsICIuLi9zcmMvd2l0aC1yb3V0ZS1zcGVjL21pZGRsZXdhcmVzL3dpdGgtdmFsaWRhdGlvbi50cyIsICIuLi9zcmMvbGliL3pvZC1jb21wYXQudHMiLCAiLi4vc3JjL3dpdGgtcm91dGUtc3BlYy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0ICogZnJvbSBcIi4vbmV4dGpzLWV4Y2VwdGlvbi1taWRkbGV3YXJlXCJcbmV4cG9ydCAqIGZyb20gXCIuL3dpdGgtcm91dGUtc3BlY1wiXG5leHBvcnQgeyB3cmFwcGVycyB9IGZyb20gXCIuL3dyYXBwZXJzXCJcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCJcbiIsICJleHBvcnQgdHlwZSBIdHRwRXhjZXB0aW9uTWV0YWRhdGEgPSB7XG4gIHR5cGU6IHN0cmluZ1xuICBtZXNzYWdlOiBzdHJpbmdcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG59ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cblxuZXhwb3J0IGludGVyZmFjZSBUaHJvd2luZ09wdGlvbnMge1xuICBqc29uPzogYm9vbGVhblxufVxuXG4vKipcbiAqIFRocm93IEh0dHBFeGNlcHRpb25zIGluc2lkZSBBUEkgZW5kcG9pbnRzIHRvIGdlbmVyYXRlIG5pY2UgZXJyb3IgbWVzc2FnZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgXG4gKiBpZiAoYmFkX3NvdXBzLmluY2x1ZGVzKHNvdXBfcGFyYW0pKSB7XG4gKiAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKDQwMCwge1xuICogICAgICB0eXBlOiBcImNhbnRfbWFrZV9zb3VwXCIsXG4gKiAgICAgIG1lc3NhZ2U6IFwiU291cCB3YXMgdG9vIGRpZmZpY3VsdCwgcGxlYXNlIHNwZWNpZnkgYSBkaWZmZXJlbnQgc291cFwiXG4gKiAgICB9KVxuICogfVxuICogYGBgXG4gKlxuICoqL1xuZXhwb3J0IGNsYXNzIEh0dHBFeGNlcHRpb24gZXh0ZW5kcyBFcnJvciB7XG4gIG9wdGlvbnM6IFRocm93aW5nT3B0aW9uc1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzdGF0dXM6IG51bWJlcixcbiAgICBwdWJsaWMgbWV0YWRhdGE6IEh0dHBFeGNlcHRpb25NZXRhZGF0YSxcbiAgICBvcHRpb25zPzogVGhyb3dpbmdPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKG1ldGFkYXRhLm1lc3NhZ2UpXG5cbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpXG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyA/PyB7IGpzb246IHRydWUgfVxuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGBIdHRwRXhjZXB0aW9uOiAke3RoaXMuc3RhdHVzfSwgJHt0aGlzLm1ldGFkYXRhLm1lc3NhZ2V9ICgke3RoaXMubWV0YWRhdGEudHlwZX0pYFxuICB9XG59XG5cbi8qKlxuICogVGhyb3cgQmFkUmVxdWVzdEV4Y2VwdGlvbiBpbnNpZGUgQVBJIGVuZHBvaW50cyB0aGF0IHdlcmUgcHJvdmlkZWQgaW5jb3JyZWN0XG4gKiBwYXJhbWV0ZXJzIG9yIGJvZHlcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgXG4gKiBpZiAoYmFkX3NvdXBzLmluY2x1ZGVzKHNvdXBfcGFyYW0pKSB7XG4gKiAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAqICAgICB0eXBlOiBcImNhbnRfbWFrZV9zb3VwXCIsXG4gKiAgICAgbWVzc2FnZTogXCJTb3VwIHdhcyB0b28gZGlmZmljdWx0LCBwbGVhc2Ugc3BlY2lmeSBhIGRpZmZlcmVudCBzb3VwXCIsXG4gKiAgIH0pXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiovXG5leHBvcnQgY2xhc3MgQmFkUmVxdWVzdEV4Y2VwdGlvbiBleHRlbmRzIEh0dHBFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWV0YWRhdGE6IEh0dHBFeGNlcHRpb25NZXRhZGF0YSxcbiAgICBvcHRpb25zPzogVGhyb3dpbmdPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKDQwMCwgbWV0YWRhdGEsIG9wdGlvbnMpXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuYXV0aG9yaXplZEV4Y2VwdGlvbiBleHRlbmRzIEh0dHBFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWV0YWRhdGE6IEh0dHBFeGNlcHRpb25NZXRhZGF0YSxcbiAgICBvcHRpb25zPzogVGhyb3dpbmdPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKDQwMSwgbWV0YWRhdGEsIG9wdGlvbnMpXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhNZXRob2REb2VzTm90QXBwbHlFeGNlcHRpb24gZXh0ZW5kcyBIdHRwRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG1ldGFkYXRhOiBIdHRwRXhjZXB0aW9uTWV0YWRhdGEgPSB7XG4gICAgICB0eXBlOiBcImF1dGhfbWV0aG9kX2RvZXNfbm90X2FwcGx5XCIsXG4gICAgICBtZXNzYWdlOiBcIkF1dGggbWV0aG9kIGRvZXMgbm90IGFwcGx5XCIsXG4gICAgfSxcbiAgICBvcHRpb25zPzogVGhyb3dpbmdPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKDQwMSwgbWV0YWRhdGEsIG9wdGlvbnMpXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdEZvdW5kRXhjZXB0aW9uIGV4dGVuZHMgSHR0cEV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBtZXRhZGF0YTogSHR0cEV4Y2VwdGlvbk1ldGFkYXRhLFxuICAgIG9wdGlvbnM/OiBUaHJvd2luZ09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoNDA0LCBtZXRhZGF0YSwgb3B0aW9ucylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24gZXh0ZW5kcyBIdHRwRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG1ldGFkYXRhOiBIdHRwRXhjZXB0aW9uTWV0YWRhdGEgPSB7XG4gICAgICB0eXBlOiBcIm5vdF9pbXBsZW1lbnRlZFwiLFxuICAgICAgbWVzc2FnZTogXCJOb3QgaW1wbGVtZW50ZWRcIixcbiAgICB9LFxuICAgIG9wdGlvbnM/OiBUaHJvd2luZ09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoNTAxLCBtZXRhZGF0YSwgb3B0aW9ucylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTWV0aG9kTm90QWxsb3dlZEV4Y2VwdGlvbiBleHRlbmRzIEh0dHBFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWV0YWRhdGE6IEh0dHBFeGNlcHRpb25NZXRhZGF0YSxcbiAgICBvcHRpb25zPzogVGhyb3dpbmdPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKDQwNSwgbWV0YWRhdGEsIG9wdGlvbnMpXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludGVybmFsU2VydmVyRXJyb3JFeGNlcHRpb24gZXh0ZW5kcyBIdHRwRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG1ldGFkYXRhOiBIdHRwRXhjZXB0aW9uTWV0YWRhdGEsXG4gICAgb3B0aW9ucz86IFRocm93aW5nT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcig1MDAsIG1ldGFkYXRhLCBvcHRpb25zKVxuICB9XG59XG4iLCAiaW1wb3J0IHsgTmV4dEFwaVJlcXVlc3QsIE5leHRBcGlSZXNwb25zZSB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB7IEh0dHBFeGNlcHRpb24gfSBmcm9tIFwiLi9odHRwLWV4Y2VwdGlvbnNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhFeGNlcHRpb25IYW5kbGluZ09wdGlvbnMge1xuICBvbkVycm9yPzogKGVycm9yOiBFcnJvciwgcmVxOiBOZXh0QXBpUmVxdWVzdCkgPT4gdm9pZFxuICBnZXRFcnJvckNvbnRleHQ/OiAoXG4gICAgcmVxOiBOZXh0QXBpUmVxdWVzdCxcbiAgICBlcnJvcjogRXJyb3JcbiAgKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxufVxuXG5jb25zdCB3aXRoRXhjZXB0aW9uSGFuZGxpbmcgPVxuICAob3B0aW9uczogV2l0aEV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucyA9IHt9KSA9PlxuICAobmV4dDogKHJlcTogTmV4dEFwaVJlcXVlc3QsIHJlczogTmV4dEFwaVJlc3BvbnNlKSA9PiBQcm9taXNlPHZvaWQ+KSA9PlxuICBhc3luYyAocmVxOiBOZXh0QXBpUmVxdWVzdCwgcmVzOiBOZXh0QXBpUmVzcG9uc2UpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbmV4dChyZXEsIHJlcylcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgbGV0IGVycm9yQ29udGV4dDogYW55ID0ge31cblxuICAgICAgaWYgKG9wdGlvbnMub25FcnJvcikge1xuICAgICAgICBvcHRpb25zLm9uRXJyb3IoZXJyb3IgYXMgRXJyb3IsIHJlcSlcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgZXJyb3JDb250ZXh0LnN0YWNrID0gZXJyb3Iuc3RhY2tcbiAgICAgIH1cblxuICAgICAgZXJyb3JDb250ZXh0ID0gb3B0aW9ucy5nZXRFcnJvckNvbnRleHRcbiAgICAgICAgPyBvcHRpb25zLmdldEVycm9yQ29udGV4dChyZXEsIGVycm9yQ29udGV4dClcbiAgICAgICAgOiBlcnJvckNvbnRleHRcblxuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEV4Y2VwdGlvbikge1xuICAgICAgICBpZiAoZXJyb3Iub3B0aW9ucy5qc29uKSB7XG4gICAgICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpLmpzb24oe1xuICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgLi4uZXJyb3IubWV0YWRhdGEsXG4gICAgICAgICAgICAgIC4uLmVycm9yQ29udGV4dCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cykuZW5kKGVycm9yLm1ldGFkYXRhLm1lc3NhZ2UpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZEVycm9yID0gbmV3IEh0dHBFeGNlcHRpb24oNTAwLCB7XG4gICAgICAgICAgdHlwZTogXCJpbnRlcm5hbF9zZXJ2ZXJfZXJyb3JcIixcbiAgICAgICAgICBtZXNzYWdlOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiLFxuICAgICAgICB9KVxuXG4gICAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgLi4uZm9ybWF0dGVkRXJyb3IubWV0YWRhdGEsXG4gICAgICAgICAgICAuLi5lcnJvckNvbnRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhFeGNlcHRpb25IYW5kbGluZ1xuIiwgImltcG9ydCB7IE5leHRBcGlSZXF1ZXN0LCBOZXh0QXBpUmVzcG9uc2UgfSBmcm9tIFwibmV4dFwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgV2l0aE9rU3RhdHVzT3B0aW9ucyB7XG4gIGFkZElmPzogKHJlcTogTmV4dEFwaVJlcXVlc3QpID0+IGJvb2xlYW5cbn1cblxuY29uc3Qgd2l0aE9rU3RhdHVzID1cbiAgKG9wdGlvbnM6IFdpdGhPa1N0YXR1c09wdGlvbnMgPSB7fSkgPT5cbiAgKG5leHQ6IChyZXE6IE5leHRBcGlSZXF1ZXN0LCByZXM6IE5leHRBcGlSZXNwb25zZSkgPT4gUHJvbWlzZTx2b2lkPikgPT5cbiAgYXN5bmMgKHJlcTogTmV4dEFwaVJlcXVlc3QsIHJlczogTmV4dEFwaVJlc3BvbnNlKSA9PiB7XG4gICAgLy8gUGF0Y2ggLmpzb24oKVxuICAgIGNvbnN0IG9yaWdpbmFsSnNvbiA9IHJlcy5qc29uXG5cbiAgICByZXMuanNvbiA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICBjb25zdCBvayA9IHJlcy5zdGF0dXNDb2RlID49IDIwMCAmJiByZXMuc3RhdHVzQ29kZSA8IDMwMFxuICAgICAgY29uc3Qgc2hvdWxkSW5jbHVkZVN0YXR1cyA9IG9wdGlvbnMuYWRkSWYgPyBvcHRpb25zLmFkZElmKHJlcSkgOiB0cnVlXG5cbiAgICAgIGlmIChzaG91bGRJbmNsdWRlU3RhdHVzKSB7XG4gICAgICAgIG9yaWdpbmFsSnNvbi5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAuLi5kYXRhLFxuICAgICAgICAgIG9rLFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3JpZ2luYWxKc29uLmNhbGwodGhpcywgZGF0YSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBuZXh0KHJlcSwgcmVzKVxuICB9XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhPa1N0YXR1c1xuIiwgImltcG9ydCB7IE5leHRBcGlSZXF1ZXN0LCBOZXh0QXBpUmVzcG9uc2UgfSBmcm9tIFwibmV4dFwiXG5pbXBvcnQgdW53cmFwcGVkV2l0aEV4Y2VwdGlvbkhhbmRsaW5nLCB7XG4gIFdpdGhFeGNlcHRpb25IYW5kbGluZ09wdGlvbnMsXG59IGZyb20gXCIuL3dpdGgtZXhjZXB0aW9uLWhhbmRsaW5nXCJcbmltcG9ydCB3aXRoT2tTdGF0dXMsIHsgV2l0aE9rU3RhdHVzT3B0aW9ucyB9IGZyb20gXCIuL3dpdGgtb2stc3RhdHVzXCJcblxuZXhwb3J0IGludGVyZmFjZSBFeGNlcHRpb25IYW5kbGluZ09wdGlvbnMge1xuICBhZGRPa1N0YXR1cz86IGJvb2xlYW5cbiAgb2tTdGF0dXNPcHRpb25zPzogV2l0aE9rU3RhdHVzT3B0aW9uc1xuICBleGNlcHRpb25IYW5kbGluZ09wdGlvbnM/OiBXaXRoRXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zXG59XG5cbmV4cG9ydCBjb25zdCB3aXRoRXhjZXB0aW9uSGFuZGxpbmcgPVxuICAoe1xuICAgIGFkZE9rU3RhdHVzID0gZmFsc2UsXG4gICAgb2tTdGF0dXNPcHRpb25zLFxuICAgIGV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucyxcbiAgfTogRXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zID0ge30pID0+XG4gIChuZXh0OiAocmVxOiBOZXh0QXBpUmVxdWVzdCwgcmVzOiBOZXh0QXBpUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD4pID0+XG4gIChyZXE6IE5leHRBcGlSZXF1ZXN0LCByZXM6IE5leHRBcGlSZXNwb25zZSkgPT4ge1xuICAgIGlmIChhZGRPa1N0YXR1cykge1xuICAgICAgcmV0dXJuIHdpdGhPa1N0YXR1cyhva1N0YXR1c09wdGlvbnMpKFxuICAgICAgICB1bndyYXBwZWRXaXRoRXhjZXB0aW9uSGFuZGxpbmcoZXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zKShuZXh0KVxuICAgICAgKShyZXEsIHJlcylcbiAgICB9XG5cbiAgICByZXR1cm4gdW53cmFwcGVkV2l0aEV4Y2VwdGlvbkhhbmRsaW5nKGV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucykobmV4dCkoXG4gICAgICByZXEsXG4gICAgICByZXNcbiAgICApXG4gIH1cblxuZXhwb3J0ICogZnJvbSBcIi4vaHR0cC1leGNlcHRpb25zXCJcbiIsICJpbXBvcnQgdHlwZSB7IE5leHRBcGlSZXF1ZXN0IGFzIFJlcSwgTmV4dEFwaVJlc3BvbnNlIGFzIFJlcyB9IGZyb20gXCJuZXh0XCJcbi8qXG5cbldyYXBzIGEgZnVuY3Rpb24gaW4gbGF5ZXJzIG9mIG90aGVyIGZ1bmN0aW9ucywgd2hpbGUgcHJlc2VydmluZyB0aGUgaW5wdXQvb3V0cHV0XG50eXBlLiBUaGUgb3V0cHV0IG9mIHdyYXBwZXJzIHdpbGwgYWx3YXlzIGhhdmUgdGhlIHR5cGUgb2YgaXQncyBsYXN0IHBhcmFtZXRlclxuKHRoZSB3cmFwcGVkIGZ1bmN0aW9uKVxuXG5UaGlzIGZ1bmN0aW9uIHR1cm5zIHRoaXMgdHlwZSBvZiBjb21wb3NpdGlvbi4uLlxuXG5sb2dnZXIud2l0aENvbnRleHQoXCJzb21lY29udGV4dFwiKShcbiAgYXN5bmMgKGEsIGIpID0+IHtcbiAgICByZXR1cm4gYVxuICB9XG4pXG5cbkludG8uLi5cblxud3JhcHBlcnMoXG4gIGxvZ2dlci53aXRoQ29udGV4dChcInNvbWVjb250ZXh0XCIpLFxuICBhc3luYyAoYSwgYikgPT4ge1xuICAgIHJldHVybiBhXG4gIH1cbilcblxuSGF2aW5nIHRoaXMgYXMgYSB1dGlsaXR5IG1ldGhvZCBoZWxwcyBwcmVzZXJ2ZSB0eXBlcywgd2hpY2ggb3RoZXJ3aXNlIGNhbiBnZXRcbm1lc3NlZCB1cCBieSB0aGUgbWlkZGxld2FyZXMuIEl0IGFsc28gY2FuIG1ha2UgdGhlIGNvZGUgY2xlYW5lciB3aGVyZSB0aGVyZSBhcmVcbm11bHRpcGxlIHdyYXBwZXJzLlxuXG4jIyBFWEFNUExFU1xuXG5JbiB0aGUgY29udGV4dCBvZiByZXF1ZXN0IG1pZGRsZXdhcmUgeW91IG1pZ2h0IHdyaXRlIHNvbWV0aGluZyBsaWtlIHRoaXMuLi5cblxuY29uc3Qgd2l0aFJlcXVlc3RMb2dnaW5nTWlkZGxld2FyZSA9IChuZXh0KSA9PiBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgY29uc29sZS5sb2coYEdPVCBSRVFVRVNUICR7cmVxLm1ldGhvZH0gJHtyZXEucGF0aH1gKVxuICByZXR1cm4gbmV4dChyZXEsIHJlcylcbn1cblxuSGVyZSdzIGFuIGV4YW1wbGUgb2YgYSB3cmFwcGVyIHRoYXQgdGFrZXMgc29tZSBwYXJhbWV0ZXJzLi4uXG5cbmNvbnN0IHdpdGhMb2dnZWRBcmd1bWVudHMgPVxuICAgIChsb2dQcmVmaXg6IHN0cmluZykgPT5cbiAgICAobmV4dCkgPT5cbiAgICBhc3luYyAoLi4uZnVuY0FyZ3MpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGxvZ1ByZWZpeCwgLi4uZnVuY0FyZ3MpXG4gICAgICByZXR1cm4gbmV4dCguLi5mdW5jQXJncylcbiAgICB9XG5cbiovXG5cbmV4cG9ydCB0eXBlIE1pZGRsZXdhcmU8VCwgRGVwID0ge30+ID0gKFxuICBuZXh0OiAocmVxOiBSZXEgJiBEZXAgJiBULCByZXM6IFJlcykgPT4gYW55XG4pID0+IChyZXE6IFJlcSAmIERlcCAmIFQsIHJlczogUmVzKSA9PiBhbnlcblxuLy8gU2FmZXIgTWlkZGxld2FyZSByZXF1aXJlcyB0aGUgdXNlIG9mIGV4dGVuZFJlcXVlc3QgdG8gZW5zdXJlIHRoYXQgdGhlXG4vLyBuZXcgY29udGV4dCAoVCkgd2FzIGFjdHVhbGx5IGFkZGVkIHRvIHRoZSByZXF1ZXN0LiBJdCdzIGtpbmQgb2YgYW5ub3lpbmdcbi8vIHRvIHVzZSBpbiBwcmFjdGljZSwgc28gd2UgZG9uJ3QgdXNlIGl0IGZvciBvdXIgV3JhcHBlcnMgKHlldClcbmV4cG9ydCB0eXBlIFNhZmVyTWlkZGxld2FyZTxULCBEZXAgPSB7fT4gPSAoXG4gIG5leHQ6IChyZXE6IFJlcSAmIERlcCAmIFQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxICYgRGVwLCByZXM6IFJlcykgPT4gYW55XG5cbmV4cG9ydCBjb25zdCBleHRlbmRSZXF1ZXN0ID0gPFQgZXh0ZW5kcyBSZXEsIEsgZXh0ZW5kcyB7fT4oXG4gIHJlcTogVCxcbiAgbWVyZ2U6IEtcbik6IFQgJiBLID0+IHtcbiAgZm9yIChjb25zdCBba2V5LCB2XSBvZiBPYmplY3QuZW50cmllcyhtZXJnZSkpIHtcbiAgICA7KHJlcSBhcyBhbnkpW2tleV0gPSB2XG4gIH1cbiAgcmV0dXJuIHJlcSBhcyBhbnlcbn1cblxudHlwZSBXcmFwcGVyczEgPSA8TXcxUmVxdWVzdENvbnRleHQsIE13MURlcD4oXG4gIG13MTogTWlkZGxld2FyZTxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPixcbiAgZW5kcG9pbnQ6IChyZXE6IFJlcSAmIE13MVJlcXVlc3RDb250ZXh0LCByZXM6IFJlcykgPT4gYW55XG4pID0+IChyZXE6IFJlcSwgcmVzOiBSZXMpID0+IGFueVxuXG50eXBlIFdyYXBwZXJzMiA9IDxcbiAgTXcxUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzJEZXAsXG4gIE13MURlcCxcbiAgTXcyUmVxdWVzdENvbnRleHQsXG4gIE13MkRlcFxuPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBtdzI6IE1pZGRsZXdhcmU8TXcyUmVxdWVzdENvbnRleHQsIE13MkRlcD4sXG4gIGVuZHBvaW50OiAocmVxOiBSZXEgJiBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0LCByZXM6IFJlcykgPT4gYW55XG4pID0+IChyZXE6IFJlcSwgcmVzOiBSZXMpID0+IGFueVxuXG4vLyBUT0RPIGZpZ3VyZSBvdXQgaG93IHRvIGRvIGEgcmVjdXJzaXZlIGRlZmluaXRpb24sIG9yIG9uZSB0aGF0IHNpbXBsaWZpZXNcbi8vIHRoZXNlIHJlZHVuZGFudCB3cmFwcGVyc1xuXG50eXBlIFdyYXBwZXJzMyA9IDxcbiAgTXcxUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzJEZXAsXG4gIE13MURlcCxcbiAgTXcyUmVxdWVzdENvbnRleHQsXG4gIE13MkRlcCxcbiAgTXczUmVxdWVzdENvbnRleHQsXG4gIE13M0RlcFxuPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBtdzI6IE1pZGRsZXdhcmU8TXcyUmVxdWVzdENvbnRleHQsIE13MkRlcD4sXG4gIG13MzogTWlkZGxld2FyZTxcbiAgICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXczRGVwID8gTXczRGVwIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgJiBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVyczQgPSA8XG4gIE13MVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXcyRGVwLFxuICBNdzFEZXAsXG4gIE13MlJlcXVlc3RDb250ZXh0LFxuICBNdzJEZXAsXG4gIE13M1JlcXVlc3RDb250ZXh0LFxuICBNdzNEZXAsXG4gIE13NFJlcXVlc3RDb250ZXh0LFxuICBNdzREZXBcbj4oXG4gIG13MTogTWlkZGxld2FyZTxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPixcbiAgbXcyOiBNaWRkbGV3YXJlPE13MlJlcXVlc3RDb250ZXh0LCBNdzJEZXA+LFxuICBtdzM6IE1pZGRsZXdhcmU8XG4gICAgTXczUmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13M0RlcCA/IE13M0RlcCA6IG5ldmVyXG4gID4sXG4gIG13NDogTWlkZGxld2FyZTxcbiAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0ICYgTXczUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzREZXBcbiAgICAgID8gTXc0RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIGVuZHBvaW50OiAoXG4gICAgcmVxOiBSZXEgJlxuICAgICAgTXcxUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXcyUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXczUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc0UmVxdWVzdENvbnRleHQsXG4gICAgcmVzOiBSZXNcbiAgKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxLCByZXM6IFJlcykgPT4gYW55XG5cbnR5cGUgV3JhcHBlcnM1ID0gPFxuICBNdzFSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13MkRlcCxcbiAgTXcxRGVwLFxuICBNdzJSZXF1ZXN0Q29udGV4dCxcbiAgTXcyRGVwLFxuICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgTXczRGVwLFxuICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgTXc0RGVwLFxuICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgTXc1RGVwXG4+KFxuICBtdzE6IE1pZGRsZXdhcmU8TXcxUmVxdWVzdENvbnRleHQsIE13MURlcD4sXG4gIG13MjogTWlkZGxld2FyZTxNdzJSZXF1ZXN0Q29udGV4dCwgTXcyRGVwPixcbiAgbXczOiBNaWRkbGV3YXJlPFxuICAgIE13M1JlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzNEZXAgPyBNdzNEZXAgOiBuZXZlclxuICA+LFxuICBtdzQ6IE1pZGRsZXdhcmU8XG4gICAgTXc0UmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCAmIE13M1JlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXc0RGVwXG4gICAgICA/IE13NERlcFxuICAgICAgOiBuZXZlclxuICA+LFxuICBtdzU6IE1pZGRsZXdhcmU8XG4gICAgTXc1UmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXcyUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXczUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc0UmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzVEZXBcbiAgICAgID8gTXc1RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIGVuZHBvaW50OiAoXG4gICAgcmVxOiBSZXEgJlxuICAgICAgTXcxUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXcyUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXczUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc0UmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc1UmVxdWVzdENvbnRleHQsXG4gICAgcmVzOiBSZXNcbiAgKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxLCByZXM6IFJlcykgPT4gYW55XG5cbnR5cGUgV3JhcHBlcnM2ID0gPFxuICBNdzFSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13MkRlcCxcbiAgTXcxRGVwLFxuICBNdzJSZXF1ZXN0Q29udGV4dCxcbiAgTXcyRGVwLFxuICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgTXczRGVwLFxuICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgTXc0RGVwLFxuICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgTXc1RGVwLFxuICBNdzZSZXF1ZXN0Q29udGV4dCxcbiAgTXc2RGVwXG4+KFxuICBtdzE6IE1pZGRsZXdhcmU8TXcxUmVxdWVzdENvbnRleHQsIE13MURlcD4sXG4gIG13MjogTWlkZGxld2FyZTxNdzJSZXF1ZXN0Q29udGV4dCwgTXcyRGVwPixcbiAgbXczOiBNaWRkbGV3YXJlPFxuICAgIE13M1JlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzNEZXAgPyBNdzNEZXAgOiBuZXZlclxuICA+LFxuICBtdzQ6IE1pZGRsZXdhcmU8XG4gICAgTXc0UmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCAmIE13M1JlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXc0RGVwXG4gICAgICA/IE13NERlcFxuICAgICAgOiBuZXZlclxuICA+LFxuICBtdzU6IE1pZGRsZXdhcmU8XG4gICAgTXc1UmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXcyUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXczUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc0UmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzVEZXBcbiAgICAgID8gTXc1RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NjogTWlkZGxld2FyZTxcbiAgICBNdzZSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NkRlcFxuICAgICAgPyBNdzZEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzZSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVyczcgPSA8XG4gIE13MVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXcyRGVwLFxuICBNdzFEZXAsXG4gIE13MlJlcXVlc3RDb250ZXh0LFxuICBNdzJEZXAsXG4gIE13M1JlcXVlc3RDb250ZXh0LFxuICBNdzNEZXAsXG4gIE13NFJlcXVlc3RDb250ZXh0LFxuICBNdzREZXAsXG4gIE13NVJlcXVlc3RDb250ZXh0LFxuICBNdzVEZXAsXG4gIE13NlJlcXVlc3RDb250ZXh0LFxuICBNdzZEZXAsXG4gIE13N1JlcXVlc3RDb250ZXh0LFxuICBNdzdEZXBcbj4oXG4gIG13MTogTWlkZGxld2FyZTxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPixcbiAgbXcyOiBNaWRkbGV3YXJlPE13MlJlcXVlc3RDb250ZXh0LCBNdzJEZXA+LFxuICBtdzM6IE1pZGRsZXdhcmU8XG4gICAgTXczUmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13M0RlcCA/IE13M0RlcCA6IG5ldmVyXG4gID4sXG4gIG13NDogTWlkZGxld2FyZTxcbiAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0ICYgTXczUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzREZXBcbiAgICAgID8gTXc0RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NTogTWlkZGxld2FyZTxcbiAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NURlcFxuICAgICAgPyBNdzVEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgbXc2OiBNaWRkbGV3YXJlPFxuICAgIE13NlJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXc2RGVwXG4gICAgICA/IE13NkRlcFxuICAgICAgOiBuZXZlclxuICA+LFxuICBtdzc6IE1pZGRsZXdhcmU8XG4gICAgTXc3UmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXcyUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXczUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc0UmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc1UmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc2UmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzdEZXBcbiAgICAgID8gTXc3RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIGVuZHBvaW50OiAoXG4gICAgcmVxOiBSZXEgJlxuICAgICAgTXcxUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXcyUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXczUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc0UmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc1UmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc2UmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc3UmVxdWVzdENvbnRleHQsXG4gICAgcmVzOiBSZXNcbiAgKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxLCByZXM6IFJlcykgPT4gYW55XG5cbnR5cGUgV3JhcHBlcnMgPSBXcmFwcGVyczEgJlxuICBXcmFwcGVyczIgJlxuICBXcmFwcGVyczMgJlxuICBXcmFwcGVyczQgJlxuICBXcmFwcGVyczUgJlxuICBXcmFwcGVyczYgJlxuICBXcmFwcGVyczdcblxuZXhwb3J0IGNvbnN0IHdyYXBwZXJzOiBXcmFwcGVycyA9ICguLi53cmFwcGVyc0FyZ3M6IGFueVtdKSA9PiB7XG4gIGNvbnN0IHdyYXBwZWRGdW5jdGlvbiA9IHdyYXBwZXJzQXJnc1t3cmFwcGVyc0FyZ3MubGVuZ3RoIC0gMV1cbiAgY29uc3QgbXdzID0gd3JhcHBlcnNBcmdzLnNsaWNlKDAsIC0xKVxuXG4gIGxldCBsYXN0V3JhcHBlZEZ1bmN0aW9uID0gd3JhcHBlZEZ1bmN0aW9uXG4gIGZvciAobGV0IGkgPSBtd3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0V3JhcHBlZEZ1bmN0aW9uID0gKG13c1tpXSBhcyBhbnkpKGxhc3RXcmFwcGVkRnVuY3Rpb24pXG4gIH1cblxuICByZXR1cm4gbGFzdFdyYXBwZWRGdW5jdGlvblxufVxuXG5leHBvcnQgZGVmYXVsdCB3cmFwcGVyc1xuIiwgImltcG9ydCB7IE1ldGhvZE5vdEFsbG93ZWRFeGNlcHRpb24gfSBmcm9tIFwiLi4vLi4vbmV4dGpzLWV4Y2VwdGlvbi1taWRkbGV3YXJlXCJcblxuZXhwb3J0IHR5cGUgSFRUUE1ldGhvZHMgPVxuICB8IFwiR0VUXCJcbiAgfCBcIlBPU1RcIlxuICB8IFwiREVMRVRFXCJcbiAgfCBcIlBVVFwiXG4gIHwgXCJQQVRDSFwiXG4gIHwgXCJIRUFEXCJcbiAgfCBcIk9QVElPTlNcIlxuXG5leHBvcnQgY29uc3Qgd2l0aE1ldGhvZHMgPSAobWV0aG9kczogSFRUUE1ldGhvZHNbXSkgPT4gKG5leHQpID0+IChyZXEsIHJlcykgPT4ge1xuICBpZiAoIW1ldGhvZHMuaW5jbHVkZXMocmVxLm1ldGhvZCkpIHtcbiAgICB0aHJvdyBuZXcgTWV0aG9kTm90QWxsb3dlZEV4Y2VwdGlvbih7XG4gICAgICB0eXBlOiBcIm1ldGhvZF9ub3RfYWxsb3dlZFwiLFxuICAgICAgbWVzc2FnZTogYG9ubHkgJHttZXRob2RzLmpvaW4oXCIsXCIpfSBhY2NlcHRlZGAsXG4gICAgfSlcbiAgfVxuICByZXR1cm4gbmV4dChyZXEsIHJlcylcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aE1ldGhvZHNcbiIsICJpbXBvcnQgdHlwZSB7IE5leHRBcGlSZXF1ZXN0LCBOZXh0QXBpUmVzcG9uc2UgfSBmcm9tIFwibmV4dFwiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgXyBmcm9tIFwibG9kYXNoXCJcblxuaW1wb3J0IHtcbiAgQmFkUmVxdWVzdEV4Y2VwdGlvbixcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvckV4Y2VwdGlvbixcbn0gZnJvbSBcIi4uLy4uL25leHRqcy1leGNlcHRpb24tbWlkZGxld2FyZVwiXG5pbXBvcnQgeyBRdWVyeUFycmF5Rm9ybWF0cyB9IGZyb20gXCIuLi8uLi90eXBlc1wiXG5pbXBvcnQgeyBERUZBVUxUX0FSUkFZX0ZPUk1BVFMgfSBmcm9tIFwiLi5cIlxuaW1wb3J0IHtcbiAgZ2V0VHlwZU5hbWUsXG4gIGdldEVmZmVjdHNTY2hlbWEsXG4gIGdldElubmVyVHlwZSxcbn0gZnJvbSBcIi4uLy4uL2xpYi96b2QtY29tcGF0XCJcblxuY29uc3QgZ2V0Wm9kT2JqZWN0U2NoZW1hRnJvbVpvZEVmZmVjdFNjaGVtYSA9IChcbiAgaXNab2RFZmZlY3Q6IGJvb2xlYW4sXG4gIHNjaGVtYTogei5ab2RUeXBlQW55XG4pOiB6LlpvZFR5cGVBbnkgfCB6LlpvZE9iamVjdDxhbnk+ID0+IHtcbiAgaWYgKCFpc1pvZEVmZmVjdCkge1xuICAgIHJldHVybiBzY2hlbWEgYXMgei5ab2RPYmplY3Q8YW55PlxuICB9XG5cbiAgbGV0IGN1cnJlbnRTY2hlbWEgPSBzY2hlbWFcblxuICB3aGlsZSAoZ2V0VHlwZU5hbWUoY3VycmVudFNjaGVtYSkgPT09IFwiWm9kRWZmZWN0c1wiKSB7XG4gICAgY29uc3QgaW5uZXJTY2hlbWEgPSBnZXRFZmZlY3RzU2NoZW1hKGN1cnJlbnRTY2hlbWEpXG4gICAgaWYgKCFpbm5lclNjaGVtYSkgYnJlYWtcbiAgICBjdXJyZW50U2NoZW1hID0gaW5uZXJTY2hlbWFcbiAgfVxuXG4gIHJldHVybiBjdXJyZW50U2NoZW1hIGFzIHouWm9kT2JqZWN0PGFueT5cbn1cblxuY29uc3QgdHJ5R2V0Wm9kU2NoZW1hQXNPYmplY3QgPSAoXG4gIHNjaGVtYTogei5ab2RUeXBlQW55XG4pOiB6LlpvZE9iamVjdDxhbnk+IHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgaXNab2RFZmZlY3QgPSBnZXRUeXBlTmFtZShzY2hlbWEpID09PSBcIlpvZEVmZmVjdHNcIlxuICBjb25zdCBzYWZlX3NjaGVtYSA9IGdldFpvZE9iamVjdFNjaGVtYUZyb21ab2RFZmZlY3RTY2hlbWEoaXNab2RFZmZlY3QsIHNjaGVtYSlcbiAgY29uc3QgaXNab2RPYmplY3QgPSBnZXRUeXBlTmFtZShzYWZlX3NjaGVtYSkgPT09IFwiWm9kT2JqZWN0XCJcblxuICBpZiAoIWlzWm9kT2JqZWN0KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgcmV0dXJuIHNhZmVfc2NoZW1hIGFzIHouWm9kT2JqZWN0PGFueT5cbn1cblxuY29uc3QgdW53cmFwWm9kU2NoZW1hID0gKHNjaGVtYTogei5ab2RUeXBlQW55KTogei5ab2RUeXBlQW55ID0+IHtcbiAgY29uc3Qgc3BlY2lhbF96b2RfdHlwZXMgPSBbXCJab2RPcHRpb25hbFwiLCBcIlpvZERlZmF1bHRcIiwgXCJab2RFZmZlY3RzXCJdXG5cbiAgd2hpbGUgKHNwZWNpYWxfem9kX3R5cGVzLmluY2x1ZGVzKGdldFR5cGVOYW1lKHNjaGVtYSkpKSB7XG4gICAgY29uc3QgdHlwZU5hbWUgPSBnZXRUeXBlTmFtZShzY2hlbWEpXG4gICAgaWYgKHR5cGVOYW1lID09PSBcIlpvZE9wdGlvbmFsXCIgfHwgdHlwZU5hbWUgPT09IFwiWm9kRGVmYXVsdFwiKSB7XG4gICAgICBjb25zdCBpbm5lciA9IGdldElubmVyVHlwZShzY2hlbWEpXG4gICAgICBpZiAoIWlubmVyKSBicmVha1xuICAgICAgc2NoZW1hID0gaW5uZXJcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKHR5cGVOYW1lID09PSBcIlpvZEVmZmVjdHNcIikge1xuICAgICAgY29uc3QgaW5uZXIgPSBnZXRFZmZlY3RzU2NoZW1hKHNjaGVtYSlcbiAgICAgIGlmICghaW5uZXIpIGJyZWFrXG4gICAgICBzY2hlbWEgPSBpbm5lclxuICAgICAgY29udGludWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5jb25zdCBpc1pvZFNjaGVtYUFycmF5ID0gKHNjaGVtYTogei5ab2RUeXBlQW55KSA9PiB7XG4gIGNvbnN0IHVud3JhcHBlZCA9IHVud3JhcFpvZFNjaGVtYShzY2hlbWEpXG4gIHJldHVybiBnZXRUeXBlTmFtZSh1bndyYXBwZWQpID09PSBcIlpvZEFycmF5XCJcbn1cblxuY29uc3QgaXNab2RTY2hlbWFCb29sZWFuID0gKHNjaGVtYTogei5ab2RUeXBlQW55KSA9PiB7XG4gIGNvbnN0IHVud3JhcHBlZCA9IHVud3JhcFpvZFNjaGVtYShzY2hlbWEpXG4gIHJldHVybiBnZXRUeXBlTmFtZSh1bndyYXBwZWQpID09PSBcIlpvZEJvb2xlYW5cIlxufVxuXG5jb25zdCBwYXJzZVF1ZXJ5UGFyYW1zID0gKFxuICBzY2hlbWE6IHouWm9kVHlwZUFueSxcbiAgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzdXBwb3J0ZWRBcnJheUZvcm1hdHM6IFF1ZXJ5QXJyYXlGb3JtYXRzXG4pID0+IHtcbiAgY29uc3QgcGFyc2VkX2lucHV0ID0gT2JqZWN0LmFzc2lnbih7fSwgaW5wdXQpXG4gIGNvbnN0IG9ial9zY2hlbWEgPSB0cnlHZXRab2RTY2hlbWFBc09iamVjdChzY2hlbWEpXG5cbiAgaWYgKG9ial9zY2hlbWEpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmpfc2NoZW1hLnNoYXBlKSkge1xuICAgICAgaWYgKGlzWm9kU2NoZW1hQXJyYXkodmFsdWUgYXMgei5ab2RUeXBlQW55KSkge1xuICAgICAgICBjb25zdCBhcnJheV9pbnB1dCA9IGlucHV0W2tleV1cblxuICAgICAgICBpZiAodHlwZW9mIGFycmF5X2lucHV0ID09PSBcInN0cmluZ1wiICYmIGFycmF5X2lucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHBhcnNlZF9pbnB1dFtrZXldID0gW11cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgYXJyYXlfaW5wdXQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICBhcnJheV9pbnB1dC5sZW5ndGggPiAwICYmXG4gICAgICAgICAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzLmluY2x1ZGVzKFwiY29tbWFcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgcGFyc2VkX2lucHV0W2tleV0gPSBhcnJheV9pbnB1dC5zcGxpdChcIixcIilcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0ID0gaW5wdXRbYCR7a2V5fVtdYF1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiBicmFja2V0X3N5bnRheF9hcnJheV9pbnB1dCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgIHN1cHBvcnRlZEFycmF5Rm9ybWF0cy5pbmNsdWRlcyhcImJyYWNrZXRzXCIpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHByZV9zcGxpdF9hcnJheSA9IGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0XG4gICAgICAgICAgcGFyc2VkX2lucHV0W2tleV0gPSBwcmVfc3BsaXRfYXJyYXkuc3BsaXQoXCIsXCIpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgQXJyYXkuaXNBcnJheShicmFja2V0X3N5bnRheF9hcnJheV9pbnB1dCkgJiZcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHMuaW5jbHVkZXMoXCJicmFja2V0c1wiKVxuICAgICAgICApIHtcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0XG4gICAgICAgIH1cblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNab2RTY2hlbWFCb29sZWFuKHZhbHVlIGFzIHouWm9kVHlwZUFueSkpIHtcbiAgICAgICAgY29uc3QgYm9vbGVhbl9pbnB1dCA9IGlucHV0W2tleV1cblxuICAgICAgICBpZiAodHlwZW9mIGJvb2xlYW5faW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IGJvb2xlYW5faW5wdXQgPT09IFwidHJ1ZVwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2NoZW1hLnBhcnNlKHBhcnNlZF9pbnB1dClcbn1cblxuY29uc3QgdmFsaWRhdGVRdWVyeVBhcmFtcyA9IChcbiAgaW5wdXRVcmw6IHN0cmluZyxcbiAgc2NoZW1hOiB6LlpvZFR5cGVBbnksXG4gIHN1cHBvcnRlZEFycmF5Rm9ybWF0czogUXVlcnlBcnJheUZvcm1hdHNcbikgPT4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGlucHV0VXJsLCBcImh0dHA6Ly9kdW1teS5jb21cIilcblxuICBjb25zdCBzZWVuS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cbiAgY29uc3Qgb2JqX3NjaGVtYSA9IHRyeUdldFpvZFNjaGVtYUFzT2JqZWN0KHNjaGVtYSlcbiAgaWYgKCFvYmpfc2NoZW1hKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBvZiB1cmwuc2VhcmNoUGFyYW1zLmtleXMoKSkge1xuICAgIGZvciAoY29uc3QgW3NjaGVtYUtleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9ial9zY2hlbWEuc2hhcGUpKSB7XG4gICAgICBpZiAoaXNab2RTY2hlbWFBcnJheSh2YWx1ZSBhcyB6LlpvZFR5cGVBbnkpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBrZXkgPT09IGAke3NjaGVtYUtleX1bXWAgJiZcbiAgICAgICAgICAhc3VwcG9ydGVkQXJyYXlGb3JtYXRzLmluY2x1ZGVzKFwiYnJhY2tldHNcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oe1xuICAgICAgICAgICAgdHlwZTogXCJpbnZhbGlkX3F1ZXJ5X3BhcmFtc1wiLFxuICAgICAgICAgICAgbWVzc2FnZTogYEJyYWNrZXQgc3ludGF4IG5vdCBzdXBwb3J0ZWQgZm9yIHF1ZXJ5IHBhcmFtIFwiJHtzY2hlbWFLZXl9XCJgLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBrZXlfc2NoZW1hID0gb2JqX3NjaGVtYS5zaGFwZVtrZXldXG5cbiAgICBpZiAoa2V5X3NjaGVtYSkge1xuICAgICAgaWYgKGlzWm9kU2NoZW1hQXJyYXkoa2V5X3NjaGVtYSkpIHtcbiAgICAgICAgaWYgKHNlZW5LZXlzLmhhcyhrZXkpICYmICFzdXBwb3J0ZWRBcnJheUZvcm1hdHMuaW5jbHVkZXMoXCJyZXBlYXRcIikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgICAgICB0eXBlOiBcImludmFsaWRfcXVlcnlfcGFyYW1zXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBgUmVwZWF0ZWQgcGFyYW1ldGVycyBub3Qgc3VwcG9ydGVkIGZvciBkdXBsaWNhdGUgcXVlcnkgcGFyYW0gXCIke2tleX1cImAsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHNlZW5LZXlzLmFkZChrZXkpXG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0SW5wdXQ8XG4gIEpzb25Cb2R5IGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBRdWVyeVBhcmFtcyBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgQ29tbW9uUGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBGb3JtRGF0YSBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgSnNvblJlc3BvbnNlIGV4dGVuZHMgei5ab2RUeXBlQW55XG4+IHtcbiAganNvbkJvZHk/OiBKc29uQm9keVxuICBxdWVyeVBhcmFtcz86IFF1ZXJ5UGFyYW1zXG4gIGNvbW1vblBhcmFtcz86IENvbW1vblBhcmFtc1xuICBmb3JtRGF0YT86IEZvcm1EYXRhXG4gIGpzb25SZXNwb25zZT86IEpzb25SZXNwb25zZVxuICBzaG91bGRWYWxpZGF0ZVJlc3BvbnNlcz86IGJvb2xlYW5cbiAgc2hvdWxkVmFsaWRhdGVHZXRSZXF1ZXN0Qm9keT86IGJvb2xlYW5cbiAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzPzogUXVlcnlBcnJheUZvcm1hdHNcbn1cblxuY29uc3Qgem9kSXNzdWVUb1N0cmluZyA9IChpc3N1ZTogei5ab2RJc3N1ZSkgPT4ge1xuICBpZiAoaXNzdWUucGF0aC5qb2luKFwiLlwiKSA9PT0gXCJcIikge1xuICAgIHJldHVybiBpc3N1ZS5tZXNzYWdlXG4gIH1cbiAgaWYgKGlzc3VlLm1lc3NhZ2UgPT09IFwiUmVxdWlyZWRcIikge1xuICAgIHJldHVybiBgJHtpc3N1ZS5wYXRoLmpvaW4oXCIuXCIpfSBpcyByZXF1aXJlZGBcbiAgfVxuICByZXR1cm4gYCR7aXNzdWUubWVzc2FnZX0gZm9yIFwiJHtpc3N1ZS5wYXRoLmpvaW4oXCIuXCIpfVwiYFxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUpzb25SZXNwb25zZTxKc29uUmVzcG9uc2UgZXh0ZW5kcyB6LlpvZFR5cGVBbnk+KFxuICBqc29uUmVzcG9uc2U6IEpzb25SZXNwb25zZSB8IHVuZGVmaW5lZCxcbiAgcmVzOiBOZXh0QXBpUmVzcG9uc2Vcbikge1xuICBjb25zdCBvcmlnaW5hbF9yZXNfanNvbiA9IHJlcy5qc29uXG4gIGNvbnN0IG92ZXJyaWRlX3Jlc19qc29uID0gKGpzb246IGFueSkgPT4ge1xuICAgIGNvbnN0IGlzX3N1Y2Nlc3MgPSByZXMuc3RhdHVzQ29kZSA+PSAyMDAgJiYgcmVzLnN0YXR1c0NvZGUgPCAzMDBcbiAgICBpZiAoIWlzX3N1Y2Nlc3MpIHtcbiAgICAgIHJldHVybiBvcmlnaW5hbF9yZXNfanNvbihqc29uKVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBqc29uUmVzcG9uc2U/LnBhcnNlKGpzb24pXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxTZXJ2ZXJFcnJvckV4Y2VwdGlvbih7XG4gICAgICAgIHR5cGU6IFwiaW52YWxpZF9yZXNwb25zZVwiLFxuICAgICAgICBtZXNzYWdlOiBcInRoZSByZXNwb25zZSBkb2VzIG5vdCBtYXRjaCB3aXRoIGpzb25SZXNwb25zZVwiLFxuICAgICAgICB6b2RFcnJvcjogZXJyLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gb3JpZ2luYWxfcmVzX2pzb24oanNvbilcbiAgfVxuICByZXMuanNvbiA9IG92ZXJyaWRlX3Jlc19qc29uXG59XG5cbmV4cG9ydCBjb25zdCB3aXRoVmFsaWRhdGlvbiA9XG4gIDxcbiAgICBKc29uQm9keSBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBRdWVyeVBhcmFtcyBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBDb21tb25QYXJhbXMgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gICAgRm9ybURhdGEgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gICAgSnNvblJlc3BvbnNlIGV4dGVuZHMgei5ab2RUeXBlQW55XG4gID4oXG4gICAgaW5wdXQ6IFJlcXVlc3RJbnB1dDxcbiAgICAgIEpzb25Cb2R5LFxuICAgICAgUXVlcnlQYXJhbXMsXG4gICAgICBDb21tb25QYXJhbXMsXG4gICAgICBGb3JtRGF0YSxcbiAgICAgIEpzb25SZXNwb25zZVxuICAgID5cbiAgKSA9PlxuICAobmV4dCkgPT5cbiAgYXN5bmMgKHJlcTogTmV4dEFwaVJlcXVlc3QsIHJlczogTmV4dEFwaVJlc3BvbnNlKSA9PiB7XG4gICAgY29uc3QgeyBzdXBwb3J0ZWRBcnJheUZvcm1hdHMgPSBERUZBVUxUX0FSUkFZX0ZPUk1BVFMgfSA9IGlucHV0XG5cbiAgICBpZiAoXG4gICAgICAoaW5wdXQuZm9ybURhdGEgJiYgaW5wdXQuanNvbkJvZHkpIHx8XG4gICAgICAoaW5wdXQuZm9ybURhdGEgJiYgaW5wdXQuY29tbW9uUGFyYW1zKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHVzZSBmb3JtRGF0YSB3aXRoIGpzb25Cb2R5IG9yIGNvbW1vblBhcmFtc1wiKVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIChyZXEubWV0aG9kID09PSBcIlBPU1RcIiB8fCByZXEubWV0aG9kID09PSBcIlBBVENIXCIpICYmXG4gICAgICAoaW5wdXQuanNvbkJvZHkgfHwgaW5wdXQuY29tbW9uUGFyYW1zKSAmJlxuICAgICAgIXJlcS5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdPy5pbmNsdWRlcyhcImFwcGxpY2F0aW9uL2pzb25cIikgJiZcbiAgICAgICFfLmlzRW1wdHkocmVxLmJvZHkpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgIHR5cGU6IFwiaW52YWxpZF9jb250ZW50X3R5cGVcIixcbiAgICAgICAgbWVzc2FnZTogYCR7cmVxLm1ldGhvZH0gcmVxdWVzdHMgbXVzdCBoYXZlIENvbnRlbnQtVHlwZSBoZWFkZXIgd2l0aCBcImFwcGxpY2F0aW9uL2pzb25cImAsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGlucHV0LmZvcm1EYXRhICYmXG4gICAgICByZXEubWV0aG9kICE9PSBcIkdFVFwiICYmXG4gICAgICAhcmVxLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0/LmluY2x1ZGVzKFxuICAgICAgICBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiXG4gICAgICApXG4gICAgICAvLyBUT0RPIGV2ZW50dWFsbHkgd2Ugc2hvdWxkIHN1cHBvcnQgbXVsdGlwYXJ0L2Zvcm0tZGF0YVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oe1xuICAgICAgICB0eXBlOiBcImludmFsaWRfY29udGVudF90eXBlXCIsXG4gICAgICAgIG1lc3NhZ2U6IGBNdXN0IGhhdmUgQ29udGVudC1UeXBlIGhlYWRlciB3aXRoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCJgLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3JpZ2luYWxfY29tYmluZWRfcGFyYW1zID0geyAuLi5yZXEucXVlcnksIC4uLnJlcS5ib2R5IH1cblxuICAgICAgY29uc3Qgd2lsbFZhbGlkYXRlUmVxdWVzdEJvZHkgPSBpbnB1dC5zaG91bGRWYWxpZGF0ZUdldFJlcXVlc3RCb2R5XG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IHJlcS5tZXRob2QgIT09IFwiR0VUXCIgJiYgcmVxLm1ldGhvZCAhPT0gXCJERUxFVEVcIlxuXG4gICAgICBjb25zdCBpc0Zvcm1EYXRhID0gQm9vbGVhbihpbnB1dC5mb3JtRGF0YSlcblxuICAgICAgaWYgKGlzRm9ybURhdGEgJiYgd2lsbFZhbGlkYXRlUmVxdWVzdEJvZHkpIHtcbiAgICAgICAgcmVxLmJvZHkgPSBpbnB1dC5mb3JtRGF0YT8ucGFyc2UocmVxLmJvZHkpXG4gICAgICB9XG5cbiAgICAgIGlmICghaXNGb3JtRGF0YSAmJiB3aWxsVmFsaWRhdGVSZXF1ZXN0Qm9keSkge1xuICAgICAgICByZXEuYm9keSA9IGlucHV0Lmpzb25Cb2R5Py5wYXJzZShyZXEuYm9keSlcbiAgICAgIH1cblxuICAgICAgaWYgKGlucHV0LnF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIGlmICghcmVxLnVybCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInJlcS51cmwgaXMgdW5kZWZpbmVkXCIpXG4gICAgICAgIH1cblxuICAgICAgICB2YWxpZGF0ZVF1ZXJ5UGFyYW1zKHJlcS51cmwsIGlucHV0LnF1ZXJ5UGFyYW1zLCBzdXBwb3J0ZWRBcnJheUZvcm1hdHMpXG5cbiAgICAgICAgcmVxLnF1ZXJ5ID0gcGFyc2VRdWVyeVBhcmFtcyhcbiAgICAgICAgICBpbnB1dC5xdWVyeVBhcmFtcyxcbiAgICAgICAgICByZXEucXVlcnksXG4gICAgICAgICAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzXG4gICAgICAgICkgYXMgdHlwZW9mIHJlcS5xdWVyeVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQuY29tbW9uUGFyYW1zKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBhcyBjb21tb25QYXJhbXMgaW5jbHVkZXMgcXVlcnkgcGFyYW1zLCB3ZSBjYW4gdXNlIHRoZSBwYXJzZVF1ZXJ5UGFyYW1zIGZ1bmN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICA7KHJlcSBhcyBhbnkpLmNvbW1vblBhcmFtcyA9IHBhcnNlUXVlcnlQYXJhbXMoXG4gICAgICAgICAgaW5wdXQuY29tbW9uUGFyYW1zLFxuICAgICAgICAgIG9yaWdpbmFsX2NvbWJpbmVkX3BhcmFtcyxcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHNcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEJhZFJlcXVlc3RFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yLm5hbWUgPT09IFwiWm9kRXJyb3JcIikge1xuICAgICAgICBsZXQgbWVzc2FnZVxuICAgICAgICBpZiAoZXJyb3IuaXNzdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGNvbnN0IGlzc3VlID0gZXJyb3IuaXNzdWVzWzBdXG4gICAgICAgICAgbWVzc2FnZSA9IHpvZElzc3VlVG9TdHJpbmcoaXNzdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZV9jb21wb25lbnRzOiBzdHJpbmdbXSA9IFtdXG4gICAgICAgICAgZm9yIChjb25zdCBpc3N1ZSBvZiBlcnJvci5pc3N1ZXMpIHtcbiAgICAgICAgICAgIG1lc3NhZ2VfY29tcG9uZW50cy5wdXNoKHpvZElzc3VlVG9TdHJpbmcoaXNzdWUpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBtZXNzYWdlID1cbiAgICAgICAgICAgIGAke2Vycm9yLmlzc3Vlcy5sZW5ndGh9IElucHV0IEVycm9yczogYCArXG4gICAgICAgICAgICBtZXNzYWdlX2NvbXBvbmVudHMuam9pbihcIiwgXCIpXG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgICAgdHlwZTogXCJpbnZhbGlkX2lucHV0XCIsXG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICB2YWxpZGF0aW9uX2Vycm9yczogZXJyb3IuZm9ybWF0KCksXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX2lucHV0XCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiRXJyb3Igd2hpbGUgcGFyc2luZyBpbnB1dFwiLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aGlzIHdpbGwgb3ZlcnJpZGUgdGhlIHJlcy5qc29uIG1ldGhvZCB0byB2YWxpZGF0ZSB0aGUgcmVzcG9uc2VcbiAgICAgKi9cbiAgICBpZiAoaW5wdXQuc2hvdWxkVmFsaWRhdGVSZXNwb25zZXMpIHtcbiAgICAgIHZhbGlkYXRlSnNvblJlc3BvbnNlKGlucHV0Lmpzb25SZXNwb25zZSwgcmVzKVxuICAgIH1cblxuICAgIHJldHVybiBuZXh0KHJlcSwgcmVzKVxuICB9XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhWYWxpZGF0aW9uXG4iLCAiLyoqXG4gKiBab2QgQ29tcGF0aWJpbGl0eSBMYXllclxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGNvbXBhdGliaWxpdHkgYmV0d2VlbiBab2QgdjMgYW5kIFpvZCB2NC5cbiAqIEluIFpvZCB2NCwgdGhlIGludGVybmFsIHN0cnVjdHVyZSBjaGFuZ2VkOlxuICogLSBgLl9kZWZgIG1vdmVkIHRvIGAuX3pvZC5kZWZgXG4gKiAtIGAuX2RlZi50eXBlTmFtZWAgbW92ZWQgdG8gYC5fem9kLmRlZi50eXBlYFxuICpcbiAqIFRoaXMgbW9kdWxlIGFic3RyYWN0cyB0aGVzZSBkaWZmZXJlbmNlcyB0byBzdXBwb3J0IGJvdGggdmVyc2lvbnMuXG4gKi9cblxuaW1wb3J0IHsgWm9kVHlwZUFueSB9IGZyb20gXCJ6b2RcIlxuXG4vKipcbiAqIENoZWNrIGlmIHdlJ3JlIHVzaW5nIFpvZCB2NCtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzWm9kVjQoc2NoZW1hOiBab2RUeXBlQW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBcIl96b2RcIiBpbiBzY2hlbWFcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGludGVybmFsIGRlZmluaXRpb24gb2JqZWN0IGZyb20gYSBab2Qgc2NoZW1hLlxuICogV29ya3Mgd2l0aCBib3RoIFpvZCB2MyAoLl9kZWYpIGFuZCBab2QgdjQgKC5fem9kLmRlZilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZihzY2hlbWE6IFpvZFR5cGVBbnkpOiBhbnkge1xuICBpZiAoXCJfem9kXCIgaW4gc2NoZW1hKSB7XG4gICAgLy8gWm9kIHY0XG4gICAgcmV0dXJuIChzY2hlbWEgYXMgYW55KS5fem9kLmRlZlxuICB9XG4gIC8vIFpvZCB2M1xuICByZXR1cm4gKHNjaGVtYSBhcyBhbnkpLl9kZWZcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHR5cGUgbmFtZSBvZiBhIFpvZCBzY2hlbWEuXG4gKiBab2QgdjM6IHNjaGVtYS5fZGVmLnR5cGVOYW1lIChlLmcuLCBcIlpvZFN0cmluZ1wiKVxuICogWm9kIHY0OiBzY2hlbWEuX3pvZC5kZWYudHlwZSAoZS5nLiwgXCJzdHJpbmdcIikgLSBidXQgd2Ugbm9ybWFsaXplIHRvIHYzLXN0eWxlIG5hbWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlTmFtZShzY2hlbWE6IFpvZFR5cGVBbnkpOiBzdHJpbmcge1xuICBpZiAoXCJfem9kXCIgaW4gc2NoZW1hKSB7XG4gICAgLy8gWm9kIHY0IC0gdGhlIHR5cGUgaXMgc3RvcmVkIGRpZmZlcmVudGx5XG4gICAgY29uc3Qgem9kID0gKHNjaGVtYSBhcyBhbnkpLl96b2RcbiAgICAvLyBJbiBab2QgdjQsIHRoZSBjb25zdHJ1Y3RvciBuYW1lIGdpdmVzIHVzIHRoZSB0eXBlXG4gICAgY29uc3QgY29uc3RydWN0b3JOYW1lID0gc2NoZW1hLmNvbnN0cnVjdG9yLm5hbWVcbiAgICBpZiAoY29uc3RydWN0b3JOYW1lICYmIGNvbnN0cnVjdG9yTmFtZS5zdGFydHNXaXRoKFwiJFpvZFwiKSkge1xuICAgICAgLy8gWm9kIHY0IHVzZXMgJFpvZFN0cmluZywgJFpvZE51bWJlciwgZXRjIC0gY29udmVydCB0byBab2RTdHJpbmcsIFpvZE51bWJlclxuICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yTmFtZS5zbGljZSgxKVxuICAgIH1cbiAgICAvLyBGYWxsYmFjayB0byBkZWYudHlwZSBpZiBhdmFpbGFibGVcbiAgICBpZiAoem9kLmRlZiAmJiB6b2QuZGVmLnR5cGUpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVab2RWNFR5cGUoem9kLmRlZi50eXBlKVxuICAgIH1cbiAgICByZXR1cm4gY29uc3RydWN0b3JOYW1lIHx8IFwiVW5rbm93blwiXG4gIH1cbiAgLy8gWm9kIHYzXG4gIHJldHVybiAoc2NoZW1hIGFzIGFueSkuX2RlZj8udHlwZU5hbWUgfHwgXCJVbmtub3duXCJcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgWm9kIHY0IHR5cGUgbmFtZXMgdG8gdjMtc3R5bGUgbmFtZXMgZm9yIGNvbnNpc3RlbmN5XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVpvZFY0VHlwZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB0eXBlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIHN0cmluZzogXCJab2RTdHJpbmdcIixcbiAgICBudW1iZXI6IFwiWm9kTnVtYmVyXCIsXG4gICAgYmlnaW50OiBcIlpvZEJpZ0ludFwiLFxuICAgIGJvb2xlYW46IFwiWm9kQm9vbGVhblwiLFxuICAgIGRhdGU6IFwiWm9kRGF0ZVwiLFxuICAgIHVuZGVmaW5lZDogXCJab2RVbmRlZmluZWRcIixcbiAgICBudWxsOiBcIlpvZE51bGxcIixcbiAgICB2b2lkOiBcIlpvZFZvaWRcIixcbiAgICBhbnk6IFwiWm9kQW55XCIsXG4gICAgdW5rbm93bjogXCJab2RVbmtub3duXCIsXG4gICAgbmV2ZXI6IFwiWm9kTmV2ZXJcIixcbiAgICBsaXRlcmFsOiBcIlpvZExpdGVyYWxcIixcbiAgICBlbnVtOiBcIlpvZEVudW1cIixcbiAgICBuYXRpdmVFbnVtOiBcIlpvZE5hdGl2ZUVudW1cIixcbiAgICBvYmplY3Q6IFwiWm9kT2JqZWN0XCIsXG4gICAgYXJyYXk6IFwiWm9kQXJyYXlcIixcbiAgICB0dXBsZTogXCJab2RUdXBsZVwiLFxuICAgIHVuaW9uOiBcIlpvZFVuaW9uXCIsXG4gICAgZGlzY3JpbWluYXRlZFVuaW9uOiBcIlpvZERpc2NyaW1pbmF0ZWRVbmlvblwiLFxuICAgIGludGVyc2VjdGlvbjogXCJab2RJbnRlcnNlY3Rpb25cIixcbiAgICByZWNvcmQ6IFwiWm9kUmVjb3JkXCIsXG4gICAgbWFwOiBcIlpvZE1hcFwiLFxuICAgIHNldDogXCJab2RTZXRcIixcbiAgICBmdW5jdGlvbjogXCJab2RGdW5jdGlvblwiLFxuICAgIGxhenk6IFwiWm9kTGF6eVwiLFxuICAgIHByb21pc2U6IFwiWm9kUHJvbWlzZVwiLFxuICAgIG9wdGlvbmFsOiBcIlpvZE9wdGlvbmFsXCIsXG4gICAgbnVsbGFibGU6IFwiWm9kTnVsbGFibGVcIixcbiAgICBkZWZhdWx0OiBcIlpvZERlZmF1bHRcIixcbiAgICBlZmZlY3RzOiBcIlpvZEVmZmVjdHNcIixcbiAgICB0cmFuc2Zvcm1lcjogXCJab2RUcmFuc2Zvcm1lclwiLFxuICAgIGJyYW5kZWQ6IFwiWm9kQnJhbmRlZFwiLFxuICAgIHBpcGVsaW5lOiBcIlpvZFBpcGVsaW5lXCIsXG4gICAgcmVhZG9ubHk6IFwiWm9kUmVhZG9ubHlcIixcbiAgfVxuICByZXR1cm4gdHlwZU1hcFt0eXBlXSB8fCBgWm9kJHt0eXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zbGljZSgxKX1gXG59XG5cbi8qKlxuICogR2V0IHRoZSBpbm5lciBzY2hlbWEgZnJvbSBhIFpvZEVmZmVjdHMvWm9kVHJhbnNmb3JtZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVmZmVjdHNTY2hlbWEoc2NoZW1hOiBab2RUeXBlQW55KTogWm9kVHlwZUFueSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIHJldHVybiBkZWY/LnNjaGVtYVxufVxuXG4vKipcbiAqIEdldCB0aGUgaW5uZXIgdHlwZSBmcm9tIFpvZE9wdGlvbmFsLCBab2ROdWxsYWJsZSwgWm9kRGVmYXVsdCwgZXRjLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5uZXJUeXBlKHNjaGVtYTogWm9kVHlwZUFueSk6IFpvZFR5cGVBbnkgfCB1bmRlZmluZWQge1xuICBjb25zdCBkZWYgPSBnZXREZWYoc2NoZW1hKVxuICByZXR1cm4gZGVmPy5pbm5lclR5cGVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHNoYXBlIG9mIGEgWm9kT2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaGFwZShcbiAgc2NoZW1hOiBab2RUeXBlQW55XG4pOiBSZWNvcmQ8c3RyaW5nLCBab2RUeXBlQW55PiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIGlmICh0eXBlb2YgZGVmPy5zaGFwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIGRlZi5zaGFwZSgpXG4gIH1cbiAgcmV0dXJuIGRlZj8uc2hhcGVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGNoZWNrcyBhcnJheSBmcm9tIGEgc3RyaW5nL251bWJlciBzY2hlbWFcbiAqIEluIFpvZCA0LCBjaGVja3MgYXJlIG9iamVjdHMgd2l0aCBfem9kLmRlZiBjb250YWluaW5nIHRoZSBjaGVjayBkZXRhaWxzXG4gKiBXZSBub3JtYWxpemUgdGhlbSB0byBoYXZlIHRoZSBwcm9wZXJ0aWVzIGRpcmVjdGx5IGFjY2Vzc2libGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoZWNrcyhzY2hlbWE6IFpvZFR5cGVBbnkpOiBhbnlbXSB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIGNvbnN0IGNoZWNrcyA9IGRlZj8uY2hlY2tzIHx8IFtdXG5cbiAgLy8gTm9ybWFsaXplIFpvZCA0IGNoZWNrIG9iamVjdHNcbiAgcmV0dXJuIGNoZWNrcy5tYXAoKGNoZWNrOiBhbnkpID0+IHtcbiAgICBpZiAoY2hlY2suX3pvZD8uZGVmKSB7XG4gICAgICAvLyBab2QgNDogZmxhdHRlbiBfem9kLmRlZiBwcm9wZXJ0aWVzIG9udG8gdGhlIGNoZWNrIG9iamVjdFxuICAgICAgcmV0dXJuIHsgLi4uY2hlY2suX3pvZC5kZWYgfVxuICAgIH1cbiAgICAvLyBab2QgMzogYWxyZWFkeSBoYXMgcHJvcGVydGllcyBkaXJlY3RseVxuICAgIHJldHVybiBjaGVja1xuICB9KVxufVxuXG4vKipcbiAqIEdldCB2YWx1ZXMgZnJvbSBhIFpvZEVudW0gb3IgWm9kTmF0aXZlRW51bVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bVZhbHVlcyhcbiAgc2NoZW1hOiBab2RUeXBlQW55XG4pOiBhbnlbXSB8IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICAvLyBab2QgNDogdXNlIHNjaGVtYS5vcHRpb25zIChhcnJheSkgb3Igc2NoZW1hLmVudW0gKG9iamVjdClcbiAgaWYgKFwib3B0aW9uc1wiIGluIHNjaGVtYSAmJiBBcnJheS5pc0FycmF5KChzY2hlbWEgYXMgYW55KS5vcHRpb25zKSkge1xuICAgIHJldHVybiAoc2NoZW1hIGFzIGFueSkub3B0aW9uc1xuICB9XG4gIGlmIChcImVudW1cIiBpbiBzY2hlbWEgJiYgKHNjaGVtYSBhcyBhbnkpLmVudW0pIHtcbiAgICByZXR1cm4gKHNjaGVtYSBhcyBhbnkpLmVudW1cbiAgfVxuICAvLyBab2QgMyBmYWxsYmFja1xuICBjb25zdCBkZWYgPSBnZXREZWYoc2NoZW1hKVxuICAvLyBab2QgNCBhbHNvIGhhcyBlbnRyaWVzIGluIGRlZlxuICByZXR1cm4gZGVmPy52YWx1ZXMgfHwgZGVmPy5lbnRyaWVzXG59XG5cbi8qKlxuICogR2V0IHRoZSBsaXRlcmFsIHZhbHVlIGZyb20gYSBab2RMaXRlcmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXRlcmFsVmFsdWUoc2NoZW1hOiBab2RUeXBlQW55KTogYW55IHtcbiAgLy8gWm9kIDQ6IHRyeSBzY2hlbWEudmFsdWUgZmlyc3QgKHB1YmxpYyBBUEkpXG4gIGlmIChcInZhbHVlXCIgaW4gc2NoZW1hKSB7XG4gICAgcmV0dXJuIChzY2hlbWEgYXMgYW55KS52YWx1ZVxuICB9XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIC8vIFpvZCA0OiB2YWx1ZXMgaXMgYW4gYXJyYXlcbiAgaWYgKEFycmF5LmlzQXJyYXkoZGVmPy52YWx1ZXMpKSB7XG4gICAgcmV0dXJuIGRlZi52YWx1ZXNbMF1cbiAgfVxuICAvLyBab2QgMzogdmFsdWUgaXMgYSBzaW5nbGUgdmFsdWVcbiAgcmV0dXJuIGRlZj8udmFsdWVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgdmFsdWUgZnJvbSBhIFpvZERlZmF1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZShzY2hlbWE6IFpvZFR5cGVBbnkpOiBhbnkge1xuICBjb25zdCBkZWYgPSBnZXREZWYoc2NoZW1hKVxuICBpZiAodHlwZW9mIGRlZj8uZGVmYXVsdFZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gZGVmLmRlZmF1bHRWYWx1ZSgpXG4gIH1cbiAgcmV0dXJuIGRlZj8uZGVmYXVsdFZhbHVlXG59XG5cbi8qKlxuICogR2V0IGFycmF5IGNvbnN0cmFpbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcnJheUNvbnN0cmFpbnRzKHNjaGVtYTogWm9kVHlwZUFueSk6IHtcbiAgZXhhY3RMZW5ndGg/OiB7IHZhbHVlOiBudW1iZXIgfVxuICBtaW5MZW5ndGg/OiB7IHZhbHVlOiBudW1iZXIgfVxuICBtYXhMZW5ndGg/OiB7IHZhbHVlOiBudW1iZXIgfVxufSB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIHJldHVybiB7XG4gICAgZXhhY3RMZW5ndGg6IGRlZj8uZXhhY3RMZW5ndGgsXG4gICAgbWluTGVuZ3RoOiBkZWY/Lm1pbkxlbmd0aCxcbiAgICBtYXhMZW5ndGg6IGRlZj8ubWF4TGVuZ3RoLFxuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBlbGVtZW50IHR5cGUgZnJvbSBhIFpvZEFycmF5XG4gKiBab2QgdjM6IGRlZi50eXBlIGNvbnRhaW5zIHRoZSBlbGVtZW50IHNjaGVtYVxuICogWm9kIHY0OiBkZWYuZWxlbWVudCBjb250YWlucyB0aGUgZWxlbWVudCBzY2hlbWEgKGRlZi50eXBlIGlzIHRoZSBzdHJpbmcgXCJhcnJheVwiKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXJyYXlUeXBlKHNjaGVtYTogWm9kVHlwZUFueSk6IFpvZFR5cGVBbnkgfCB1bmRlZmluZWQge1xuICBjb25zdCBkZWYgPSBnZXREZWYoc2NoZW1hKVxuICAvLyBab2QgdjQgdXNlcyBkZWYuZWxlbWVudCwgWm9kIHYzIHVzZXMgZGVmLnR5cGVcbiAgcmV0dXJuIGRlZj8uZWxlbWVudCA/PyBkZWY/LnR5cGVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIHR5cGUgZnJvbSBhIFpvZFJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVjb3JkVmFsdWVUeXBlKHNjaGVtYTogWm9kVHlwZUFueSk6IFpvZFR5cGVBbnkgfCB1bmRlZmluZWQge1xuICBjb25zdCBkZWYgPSBnZXREZWYoc2NoZW1hKVxuICByZXR1cm4gZGVmPy52YWx1ZVR5cGVcbn1cblxuLyoqXG4gKiBHZXQgY2F0Y2hhbGwgZnJvbSBab2RPYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhdGNoYWxsKHNjaGVtYTogWm9kVHlwZUFueSk6IFpvZFR5cGVBbnkgfCB1bmRlZmluZWQge1xuICBjb25zdCBkZWYgPSBnZXREZWYoc2NoZW1hKVxuICByZXR1cm4gZGVmPy5jYXRjaGFsbFxufVxuXG4vKipcbiAqIEdldCB1bmtub3duS2V5cyBmcm9tIFpvZE9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5rbm93bktleXMoXG4gIHNjaGVtYTogWm9kVHlwZUFueVxuKTogXCJwYXNzdGhyb3VnaFwiIHwgXCJzdHJpY3RcIiB8IFwic3RyaXBcIiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIHJldHVybiBkZWY/LnVua25vd25LZXlzXG59XG5cbi8qKlxuICogR2V0IGxlZnQvcmlnaHQgZnJvbSBab2RJbnRlcnNlY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEludGVyc2VjdGlvblBhcnRzKHNjaGVtYTogWm9kVHlwZUFueSk6IHtcbiAgbGVmdD86IFpvZFR5cGVBbnlcbiAgcmlnaHQ/OiBab2RUeXBlQW55XG59IHtcbiAgY29uc3QgZGVmID0gZ2V0RGVmKHNjaGVtYSlcbiAgcmV0dXJuIHtcbiAgICBsZWZ0OiBkZWY/LmxlZnQsXG4gICAgcmlnaHQ6IGRlZj8ucmlnaHQsXG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgb3B0aW9ucyBmcm9tIFpvZFVuaW9uIG9yIFpvZERpc2NyaW1pbmF0ZWRVbmlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5pb25PcHRpb25zKHNjaGVtYTogWm9kVHlwZUFueSk6IFpvZFR5cGVBbnlbXSB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIGNvbnN0IG9wdGlvbnMgPSBkZWY/Lm9wdGlvbnNcbiAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBNYXApIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShvcHRpb25zLnZhbHVlcygpKVxuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIG9wdGlvbnNcbiAgfVxuICByZXR1cm4gW11cbn1cblxuLyoqXG4gKiBHZXQgZGlzY3JpbWluYXRvciBmcm9tIFpvZERpc2NyaW1pbmF0ZWRVbmlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlzY3JpbWluYXRvcihzY2hlbWE6IFpvZFR5cGVBbnkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBkZWYgPSBnZXREZWYoc2NoZW1hKVxuICByZXR1cm4gZGVmPy5kaXNjcmltaW5hdG9yXG59XG5cbi8qKlxuICogR2V0IGVmZmVjdCBmcm9tIFpvZEVmZmVjdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVmZmVjdChzY2hlbWE6IFpvZFR5cGVBbnkpOiBhbnkge1xuICBjb25zdCBkZWYgPSBnZXREZWYoc2NoZW1hKVxuICByZXR1cm4gZGVmPy5lZmZlY3Rcbn1cblxuLyoqXG4gKiBHZXQgcGlwZWxpbmUgaW4vb3V0IGZyb20gWm9kUGlwZWxpbmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBpcGVsaW5lUGFydHMoc2NoZW1hOiBab2RUeXBlQW55KToge1xuICBpbj86IFpvZFR5cGVBbnlcbiAgb3V0PzogWm9kVHlwZUFueVxufSB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIHJldHVybiB7XG4gICAgaW46IGRlZj8uaW4sXG4gICAgb3V0OiBkZWY/Lm91dCxcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgYnJhbmRlZCB0eXBlIGZyb20gWm9kQnJhbmRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnJhbmRlZFR5cGUoc2NoZW1hOiBab2RUeXBlQW55KTogWm9kVHlwZUFueSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIHJldHVybiBkZWY/LnR5cGVcbn1cblxuLyoqXG4gKiBHZXQgdHVwbGUgaXRlbXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFR1cGxlSXRlbXMoc2NoZW1hOiBab2RUeXBlQW55KTogWm9kVHlwZUFueVtdIHtcbiAgY29uc3QgZGVmID0gZ2V0RGVmKHNjaGVtYSlcbiAgcmV0dXJuIGRlZj8uaXRlbXMgfHwgW11cbn1cblxuLyoqXG4gKiBHZXQgZnVuY3Rpb24gYXJncyBhbmQgcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVuY3Rpb25QYXJ0cyhzY2hlbWE6IFpvZFR5cGVBbnkpOiB7XG4gIGFyZ3M/OiBab2RUeXBlQW55XG4gIHJldHVybnM/OiBab2RUeXBlQW55XG59IHtcbiAgY29uc3QgZGVmID0gZ2V0RGVmKHNjaGVtYSlcbiAgcmV0dXJuIHtcbiAgICBhcmdzOiBkZWY/LmFyZ3MsXG4gICAgcmV0dXJuczogZGVmPy5yZXR1cm5zLFxuICB9XG59XG5cbi8qKlxuICogR2V0IG1hcCBrZXkgYW5kIHZhbHVlIHR5cGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXBUeXBlcyhzY2hlbWE6IFpvZFR5cGVBbnkpOiB7XG4gIGtleVR5cGU/OiBab2RUeXBlQW55XG4gIHZhbHVlVHlwZT86IFpvZFR5cGVBbnlcbn0ge1xuICBjb25zdCBkZWYgPSBnZXREZWYoc2NoZW1hKVxuICByZXR1cm4ge1xuICAgIGtleVR5cGU6IGRlZj8ua2V5VHlwZSxcbiAgICB2YWx1ZVR5cGU6IGRlZj8udmFsdWVUeXBlLFxuICB9XG59XG5cbi8qKlxuICogR2V0IHNldCB2YWx1ZSB0eXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXRWYWx1ZVR5cGUoc2NoZW1hOiBab2RUeXBlQW55KTogWm9kVHlwZUFueSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIHJldHVybiBkZWY/LnZhbHVlVHlwZVxufVxuXG4vKipcbiAqIEdldCBwcm9taXNlIHR5cGVcbiAqIFpvZCB2MzogZGVmLnR5cGUgY29udGFpbnMgdGhlIGlubmVyIHNjaGVtYVxuICogWm9kIHY0OiBkZWYuaW5uZXJUeXBlIGNvbnRhaW5zIHRoZSBpbm5lciBzY2hlbWEgKGRlZi50eXBlIGlzIHRoZSBzdHJpbmcgXCJwcm9taXNlXCIpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9taXNlVHlwZShzY2hlbWE6IFpvZFR5cGVBbnkpOiBab2RUeXBlQW55IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGVmID0gZ2V0RGVmKHNjaGVtYSlcbiAgLy8gWm9kIHY0IHVzZXMgZGVmLmlubmVyVHlwZSwgWm9kIHYzIHVzZXMgZGVmLnR5cGVcbiAgcmV0dXJuIGRlZj8uaW5uZXJUeXBlID8/IGRlZj8udHlwZVxufVxuXG4vKipcbiAqIEdldCB0aGUgY3VzdG9tIHR5cGUgZ2V0dGVyIGlmIGF2YWlsYWJsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VzdG9tVHlwZUdldHRlcihzY2hlbWE6IFpvZFR5cGVBbnkpOiBhbnkge1xuICBjb25zdCBkZWYgPSBnZXREZWYoc2NoZW1hKVxuICByZXR1cm4gZGVmPy5nZXRUeXBlXG59XG4iLCAiaW1wb3J0IHsgTmV4dEFwaVJlc3BvbnNlLCBOZXh0QXBpUmVxdWVzdCB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB7IHdpdGhFeGNlcHRpb25IYW5kbGluZyB9IGZyb20gXCIuLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuaW1wb3J0IHdyYXBwZXJzLCB7IE1pZGRsZXdhcmUgfSBmcm9tIFwiLi4vd3JhcHBlcnNcIlxuaW1wb3J0IHtcbiAgQ3JlYXRlV2l0aFJvdXRlU3BlY0Z1bmN0aW9uLFxuICBRdWVyeUFycmF5Rm9ybWF0cyxcbiAgUm91dGVTcGVjLFxufSBmcm9tIFwiLi4vdHlwZXNcIlxuaW1wb3J0IHdpdGhNZXRob2RzLCB7IEhUVFBNZXRob2RzIH0gZnJvbSBcIi4vbWlkZGxld2FyZXMvd2l0aC1tZXRob2RzXCJcbmltcG9ydCB3aXRoVmFsaWRhdGlvbiBmcm9tIFwiLi9taWRkbGV3YXJlcy93aXRoLXZhbGlkYXRpb25cIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHtcbiAgQXV0aE1ldGhvZERvZXNOb3RBcHBseUV4Y2VwdGlvbixcbiAgVW5hdXRob3JpemVkRXhjZXB0aW9uLFxufSBmcm9tIFwiLi4vbmV4dGpzLWV4Y2VwdGlvbi1taWRkbGV3YXJlXCJcblxuLy8gUGFyYW1EZWYgdHlwZSBjb21wYXRpYmxlIHdpdGggYm90aCBab2QgMyBhbmQgWm9kIDRcbnR5cGUgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnlcblxuZXhwb3J0IGNvbnN0IGNoZWNrUm91dGVTcGVjID0gPFxuICBBdXRoVHlwZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbiAgTWV0aG9kcyBleHRlbmRzIEhUVFBNZXRob2RzW10gPSBIVFRQTWV0aG9kc1tdLFxuICBKc29uQm9keSBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBRdWVyeVBhcmFtcyBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBDb21tb25QYXJhbXMgZXh0ZW5kcyBQYXJhbURlZiA9IHouWm9kVHlwZUFueSxcbiAgTWlkZGxld2FyZXMgZXh0ZW5kcyByZWFkb25seSBNaWRkbGV3YXJlPGFueSwgYW55PltdID0gcmVhZG9ubHkgTWlkZGxld2FyZTxcbiAgICBhbnksXG4gICAgYW55XG4gID5bXSxcbiAgRm9ybURhdGEgZXh0ZW5kcyBQYXJhbURlZiA9IHouWm9kVHlwZUFueSxcbiAgU3BlYyBleHRlbmRzIFJvdXRlU3BlYzxcbiAgICBBdXRoVHlwZSxcbiAgICBNZXRob2RzLFxuICAgIEpzb25Cb2R5LFxuICAgIFF1ZXJ5UGFyYW1zLFxuICAgIENvbW1vblBhcmFtcyxcbiAgICBNaWRkbGV3YXJlcyxcbiAgICBGb3JtRGF0YVxuICA+ID0gUm91dGVTcGVjPFxuICAgIEF1dGhUeXBlLFxuICAgIE1ldGhvZHMsXG4gICAgSnNvbkJvZHksXG4gICAgUXVlcnlQYXJhbXMsXG4gICAgQ29tbW9uUGFyYW1zLFxuICAgIE1pZGRsZXdhcmVzLFxuICAgIEZvcm1EYXRhXG4gID5cbj4oXG4gIHNwZWM6IFNwZWNcbik6IHN0cmluZyBleHRlbmRzIFNwZWNbXCJhdXRoXCJdXG4gID8gYHlvdXIgcm91dGUgc3BlYyBpcyB1bmRlcnNwZWNpZmllZCwgYWRkIFwiYXMgY29uc3RcImBcbiAgOiBTcGVjID0+IHNwZWMgYXMgYW55XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FSUkFZX0ZPUk1BVFM6IFF1ZXJ5QXJyYXlGb3JtYXRzID0gW1xuICBcImJyYWNrZXRzXCIsXG4gIFwiY29tbWFcIixcbiAgXCJyZXBlYXRcIixcbl1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVdpdGhSb3V0ZVNwZWM6IENyZWF0ZVdpdGhSb3V0ZVNwZWNGdW5jdGlvbiA9ICgoXG4gIHNldHVwUGFyYW1zXG4pID0+IHtcbiAgY29uc3Qge1xuICAgIGF1dGhNaWRkbGV3YXJlTWFwID0ge30sXG4gICAgZ2xvYmFsTWlkZGxld2FyZXMgPSBbXSxcbiAgICBnbG9iYWxNaWRkbGV3YXJlc0FmdGVyQXV0aCA9IFtdLFxuICAgIHNob3VsZFZhbGlkYXRlUmVzcG9uc2VzLFxuICAgIHNob3VsZFZhbGlkYXRlR2V0UmVxdWVzdEJvZHkgPSB0cnVlLFxuICAgIGV4Y2VwdGlvbkhhbmRsaW5nTWlkZGxld2FyZSA9IHdpdGhFeGNlcHRpb25IYW5kbGluZyh7XG4gICAgICBhZGRPa1N0YXR1czogc2V0dXBQYXJhbXMuYWRkT2tTdGF0dXMsXG4gICAgICBleGNlcHRpb25IYW5kbGluZ09wdGlvbnM6IHtcbiAgICAgICAgZ2V0RXJyb3JDb250ZXh0OiAocmVxLCBlcnJvcikgPT4ge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7fVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBlcnJvclxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KSBhcyBhbnksXG4gICAgZ2xvYmFsU2NoZW1hcyA9IHNldHVwUGFyYW1zLmFkZE9rU3RhdHVzXG4gICAgICA/IHtcbiAgICAgICAgICBvazogei5ib29sZWFuKCksXG4gICAgICAgIH1cbiAgICAgIDoge30sXG4gICAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzID0gREVGQVVMVF9BUlJBWV9GT1JNQVRTLFxuICAgIG9uTXVsdGlwbGVBdXRoTWlkZGxld2FyZUZhaWx1cmVzLFxuICAgIG1heER1cmF0aW9uOiBnbG9iYWxNYXhEdXJhdGlvbixcbiAgfSA9IHNldHVwUGFyYW1zXG5cbiAgY29uc3Qgd2l0aFJvdXRlU3BlYyA9IChzcGVjOiBSb3V0ZVNwZWMpID0+IHtcbiAgICBjb25zdCBjcmVhdGVSb3V0ZUV4cG9ydCA9ICh1c2VyRGVmaW5lZFJvdXRlRm4pID0+IHtcbiAgICAgIGNvbnN0IHJvb3RSZXF1ZXN0SGFuZGxlciA9IGFzeW5jIChcbiAgICAgICAgcmVxOiBOZXh0QXBpUmVxdWVzdCxcbiAgICAgICAgcmVzOiBOZXh0QXBpUmVzcG9uc2VcbiAgICAgICkgPT4ge1xuICAgICAgICBhdXRoTWlkZGxld2FyZU1hcFtcIm5vbmVcIl0gPSAobmV4dCkgPT4gbmV4dFxuXG4gICAgICAgIGNvbnN0IGF1dGhNaWRkbGV3YXJlcyA9IChcbiAgICAgICAgICBBcnJheS5pc0FycmF5KHNwZWMuYXV0aCkgPyBzcGVjLmF1dGggOiBbc3BlYy5hdXRoXVxuICAgICAgICApLm1hcCgoYXV0aFR5cGUpID0+IFthdXRoVHlwZSwgYXV0aE1pZGRsZXdhcmVNYXBbYXV0aFR5cGVdXSBhcyBjb25zdClcbiAgICAgICAgY29uc3QgdW5kZWZpbmVkQXV0aFR5cGUgPSBhdXRoTWlkZGxld2FyZXMuZmluZCgoWywgbXddKSA9PiAhbXcpXG4gICAgICAgIGlmICh1bmRlZmluZWRBdXRoVHlwZSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYXV0aCB0eXBlOiAke3VuZGVmaW5lZEF1dGhUeXBlfWApXG5cbiAgICAgICAgY29uc3QgZmlyc3RBdXRoTWlkZGxld2FyZVRoYXRTdWNjZWVkcyA9IChuZXh0KSA9PiBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICAgICAgICBjb25zdCBoYW5kbGVNdWx0aXBsZUF1dGhNaWRkbGV3YXJlRmFpbHVyZXMgPVxuICAgICAgICAgICAgc3BlYy5vbk11bHRpcGxlQXV0aE1pZGRsZXdhcmVGYWlsdXJlcyA/P1xuICAgICAgICAgICAgb25NdWx0aXBsZUF1dGhNaWRkbGV3YXJlRmFpbHVyZXNcblxuICAgICAgICAgIGZvciAoY29uc3QgW25hbWUsIG1pZGRsZXdhcmVdIG9mIGF1dGhNaWRkbGV3YXJlcykge1xuICAgICAgICAgICAgbGV0IGRpZEF1dGhNaWRkbGV3YXJlVGhyb3cgPSB0cnVlXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgbWlkZGxld2FyZSgoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSBlcnJvcnMgdW5yZWxhdGVkIHRvIGF1dGggdGhyb3duIGJ5IGJ1aWx0LWluIG1pZGRsZXdhcmUgKHdpdGhNZXRob2RzLCB3aXRoVmFsaWRhdGlvbikgd2lsbCBiZSBjYXVnaHQgaGVyZVxuICAgICAgICAgICAgICAgIGRpZEF1dGhNaWRkbGV3YXJlVGhyb3cgPSBmYWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KC4uLmFyZ3MpXG4gICAgICAgICAgICAgIH0pKHJlcSwgcmVzKVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBdXRoTWV0aG9kRG9lc05vdEFwcGx5RXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlcnJvci5zb3VyY2VfbWlkZGxld2FyZSA9IG5hbWVcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhbmRsZU11bHRpcGxlQXV0aE1pZGRsZXdhcmVGYWlsdXJlcyAmJlxuICAgICAgICAgICAgICAgIGRpZEF1dGhNaWRkbGV3YXJlVGhyb3dcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlTXVsdGlwbGVBdXRoTWlkZGxld2FyZUZhaWx1cmVzKFtlcnJvcl0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgbmV3IFVuYXV0aG9yaXplZEV4Y2VwdGlvbih7XG4gICAgICAgICAgICB0eXBlOiBcInVuYXV0aG9yaXplZFwiLFxuICAgICAgICAgICAgbWVzc2FnZTogXCJObyBhdXRoZW50aWNhdGlvbiBtZXRob2RzIHN1Y2NlZWRlZFwiLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd3JhcHBlcnMoXG4gICAgICAgICAgLi4uKChleGNlcHRpb25IYW5kbGluZ01pZGRsZXdhcmVcbiAgICAgICAgICAgID8gW2V4Y2VwdGlvbkhhbmRsaW5nTWlkZGxld2FyZV1cbiAgICAgICAgICAgIDogW10pIGFzIFthbnldKSxcbiAgICAgICAgICAuLi4oKGdsb2JhbE1pZGRsZXdhcmVzIHx8IFtdKSBhcyBbXSksXG4gICAgICAgICAgZmlyc3RBdXRoTWlkZGxld2FyZVRoYXRTdWNjZWVkcyxcbiAgICAgICAgICAuLi4oKGdsb2JhbE1pZGRsZXdhcmVzQWZ0ZXJBdXRoIHx8IFtdKSBhcyBbXSksXG4gICAgICAgICAgLi4uKChzcGVjLm1pZGRsZXdhcmVzIHx8IFtdKSBhcyBbXSksXG4gICAgICAgICAgd2l0aE1ldGhvZHMoc3BlYy5tZXRob2RzKSxcbiAgICAgICAgICB3aXRoVmFsaWRhdGlvbih7XG4gICAgICAgICAgICBqc29uQm9keTogc3BlYy5qc29uQm9keSxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBzcGVjLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgY29tbW9uUGFyYW1zOiBzcGVjLmNvbW1vblBhcmFtcyxcbiAgICAgICAgICAgIGZvcm1EYXRhOiBzcGVjLmZvcm1EYXRhLFxuICAgICAgICAgICAganNvblJlc3BvbnNlOiBzcGVjLmpzb25SZXNwb25zZSxcbiAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlUmVzcG9uc2VzLFxuICAgICAgICAgICAgc2hvdWxkVmFsaWRhdGVHZXRSZXF1ZXN0Qm9keSxcbiAgICAgICAgICAgIHN1cHBvcnRlZEFycmF5Rm9ybWF0cyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB1c2VyRGVmaW5lZFJvdXRlRm5cbiAgICAgICAgKShyZXEgYXMgYW55LCByZXMpXG4gICAgICB9XG5cbiAgICAgIHJvb3RSZXF1ZXN0SGFuZGxlci5fc2V0dXBQYXJhbXMgPSBzZXR1cFBhcmFtc1xuICAgICAgcm9vdFJlcXVlc3RIYW5kbGVyLl9yb3V0ZVNwZWMgPSBzcGVjXG5cbiAgICAgIC8vIEV4cG9ydCBtYXhEdXJhdGlvbiBhcyBhIE5leHQuanMgcm91dGUgc2VnbWVudCBjb25maWdcbiAgICAgIGNvbnN0IG1heER1cmF0aW9uID0gc3BlYy5tYXhEdXJhdGlvbiA/PyBnbG9iYWxNYXhEdXJhdGlvblxuICAgICAgaWYgKG1heER1cmF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcm9vdFJlcXVlc3RIYW5kbGVyLm1heER1cmF0aW9uID0gbWF4RHVyYXRpb25cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJvb3RSZXF1ZXN0SGFuZGxlclxuICAgIH1cblxuICAgIGNyZWF0ZVJvdXRlRXhwb3J0Ll9zZXR1cFBhcmFtcyA9IHNldHVwUGFyYW1zXG4gICAgY3JlYXRlUm91dGVFeHBvcnQuX3JvdXRlU3BlYyA9IHNwZWNcblxuICAgIHJldHVybiBjcmVhdGVSb3V0ZUV4cG9ydFxuICB9XG5cbiAgd2l0aFJvdXRlU3BlYy5fc2V0dXBQYXJhbXMgPSBzZXR1cFBhcmFtc1xuXG4gIHJldHVybiB3aXRoUm91dGVTcGVjXG59KSBhcyBhbnlcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSwrQkFBQUE7QUFBQSxFQUFBO0FBQUE7QUFBQTs7O0FDd0JPLElBQU0sZ0JBQU4sY0FBNEIsTUFBTTtBQUFBLEVBR3ZDLFlBQ1MsUUFDQSxVQUNQLFNBQ0E7QUFDQSxVQUFNLFNBQVMsT0FBTztBQUpmO0FBQ0E7QUFLUCxRQUFJLE1BQU0sbUJBQW1CO0FBQzNCLFlBQU0sa0JBQWtCLE1BQU0sS0FBSyxXQUFXO0FBQUEsSUFDaEQ7QUFFQSxTQUFLLFVBQVUsNEJBQVcsRUFBRSxNQUFNLEtBQUs7QUFBQSxFQUN6QztBQUFBLEVBRUEsV0FBVztBQUNULFdBQU8sa0JBQWtCLEtBQUssV0FBVyxLQUFLLFNBQVMsWUFBWSxLQUFLLFNBQVM7QUFBQSxFQUNuRjtBQUNGO0FBaUJPLElBQU0sc0JBQU4sY0FBa0MsY0FBYztBQUFBLEVBQ3JELFlBQ1MsVUFDUCxTQUNBO0FBQ0EsVUFBTSxLQUFLLFVBQVUsT0FBTztBQUhyQjtBQUFBLEVBSVQ7QUFDRjtBQUVPLElBQU0sd0JBQU4sY0FBb0MsY0FBYztBQUFBLEVBQ3ZELFlBQ1MsVUFDUCxTQUNBO0FBQ0EsVUFBTSxLQUFLLFVBQVUsT0FBTztBQUhyQjtBQUFBLEVBSVQ7QUFDRjtBQUVPLElBQU0sa0NBQU4sY0FBOEMsY0FBYztBQUFBLEVBQ2pFLFlBQ1MsV0FBa0M7QUFBQSxJQUN2QyxNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsRUFDWCxHQUNBLFNBQ0E7QUFDQSxVQUFNLEtBQUssVUFBVSxPQUFPO0FBTnJCO0FBQUEsRUFPVDtBQUNGO0FBRU8sSUFBTSxvQkFBTixjQUFnQyxjQUFjO0FBQUEsRUFDbkQsWUFDUyxVQUNQLFNBQ0E7QUFDQSxVQUFNLEtBQUssVUFBVSxPQUFPO0FBSHJCO0FBQUEsRUFJVDtBQUNGO0FBRU8sSUFBTSwwQkFBTixjQUFzQyxjQUFjO0FBQUEsRUFDekQsWUFDUyxXQUFrQztBQUFBLElBQ3ZDLE1BQU07QUFBQSxJQUNOLFNBQVM7QUFBQSxFQUNYLEdBQ0EsU0FDQTtBQUNBLFVBQU0sS0FBSyxVQUFVLE9BQU87QUFOckI7QUFBQSxFQU9UO0FBQ0Y7QUFFTyxJQUFNLDRCQUFOLGNBQXdDLGNBQWM7QUFBQSxFQUMzRCxZQUNTLFVBQ1AsU0FDQTtBQUNBLFVBQU0sS0FBSyxVQUFVLE9BQU87QUFIckI7QUFBQSxFQUlUO0FBQ0Y7QUFFTyxJQUFNLCtCQUFOLGNBQTJDLGNBQWM7QUFBQSxFQUM5RCxZQUNTLFVBQ1AsU0FDQTtBQUNBLFVBQU0sS0FBSyxVQUFVLE9BQU87QUFIckI7QUFBQSxFQUlUO0FBQ0Y7OztBQ3JIQSxJQUFNLHdCQUNKLENBQUMsVUFBd0MsQ0FBQyxNQUMxQyxDQUFDLFNBQ0QsT0FBTyxLQUFxQixRQUF5QjtBQUNuRCxNQUFJO0FBQ0YsVUFBTSxLQUFLLEtBQUssR0FBRztBQUFBLEVBQ3JCLFNBQVMsT0FBUDtBQUNBLFFBQUksZUFBb0IsQ0FBQztBQUV6QixRQUFJLFFBQVEsU0FBUztBQUNuQixjQUFRLFFBQVEsT0FBZ0IsR0FBRztBQUFBLElBQ3JDO0FBRUEsUUFBSSxpQkFBaUIsT0FBTztBQUMxQixtQkFBYSxRQUFRLE1BQU07QUFBQSxJQUM3QjtBQUVBLG1CQUFlLFFBQVEsa0JBQ25CLFFBQVEsZ0JBQWdCLEtBQUssWUFBWSxJQUN6QztBQUVKLFFBQUksaUJBQWlCLGVBQWU7QUFDbEMsVUFBSSxNQUFNLFFBQVEsTUFBTTtBQUN0QixZQUFJLE9BQU8sTUFBTSxNQUFNLEVBQUUsS0FBSztBQUFBLFVBQzVCLE9BQU87QUFBQSxZQUNMLEdBQUcsTUFBTTtBQUFBLFlBQ1QsR0FBRztBQUFBLFVBQ0w7QUFBQSxRQUNGLENBQUM7QUFDRDtBQUFBLE1BQ0YsT0FBTztBQUNMLFlBQUksT0FBTyxNQUFNLE1BQU0sRUFBRSxJQUFJLE1BQU0sU0FBUyxPQUFPO0FBQ25EO0FBQUEsTUFDRjtBQUFBLElBQ0YsT0FBTztBQUNMLFlBQU0saUJBQWlCLElBQUksY0FBYyxLQUFLO0FBQUEsUUFDNUMsTUFBTTtBQUFBLFFBQ04sU0FBUyxpQkFBaUIsUUFBUSxNQUFNLFVBQVU7QUFBQSxNQUNwRCxDQUFDO0FBRUQsVUFBSSxPQUFPLEdBQUcsRUFBRSxLQUFLO0FBQUEsUUFDbkIsT0FBTztBQUFBLFVBQ0wsR0FBRyxlQUFlO0FBQUEsVUFDbEIsR0FBRztBQUFBLFFBQ0w7QUFBQSxNQUNGLENBQUM7QUFDRDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7QUFFRixJQUFPLGtDQUFROzs7QUN4RGYsSUFBTSxlQUNKLENBQUMsVUFBK0IsQ0FBQyxNQUNqQyxDQUFDLFNBQ0QsT0FBTyxLQUFxQixRQUF5QjtBQUVuRCxRQUFNLGVBQWUsSUFBSTtBQUV6QixNQUFJLE9BQU8sU0FBVSxNQUFNO0FBQ3pCLFVBQU0sS0FBSyxJQUFJLGNBQWMsT0FBTyxJQUFJLGFBQWE7QUFDckQsVUFBTSxzQkFBc0IsUUFBUSxRQUFRLFFBQVEsTUFBTSxHQUFHLElBQUk7QUFFakUsUUFBSSxxQkFBcUI7QUFDdkIsbUJBQWEsS0FBSyxNQUFNO0FBQUEsUUFDdEIsR0FBRztBQUFBLFFBQ0g7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNILE9BQU87QUFDTCxtQkFBYSxLQUFLLE1BQU0sSUFBSTtBQUFBLElBQzlCO0FBQUEsRUFDRjtBQUVBLFFBQU0sS0FBSyxLQUFLLEdBQUc7QUFDckI7QUFFRixJQUFPLHlCQUFROzs7QUNsQlIsSUFBTUMseUJBQ1gsQ0FBQztBQUFBLEVBQ0MsY0FBYztBQUFBLEVBQ2Q7QUFBQSxFQUNBO0FBQ0YsSUFBOEIsQ0FBQyxNQUMvQixDQUFDLFNBQ0QsQ0FBQyxLQUFxQixRQUF5QjtBQUM3QyxNQUFJLGFBQWE7QUFDZixXQUFPLHVCQUFhLGVBQWU7QUFBQSxNQUNqQyxnQ0FBK0Isd0JBQXdCLEVBQUUsSUFBSTtBQUFBLElBQy9ELEVBQUUsS0FBSyxHQUFHO0FBQUEsRUFDWjtBQUVBLFNBQU8sZ0NBQStCLHdCQUF3QixFQUFFLElBQUk7QUFBQSxJQUNsRTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0Y7OztBQ21TSyxJQUFNLFdBQXFCLElBQUksaUJBQXdCO0FBQzVELFFBQU0sa0JBQWtCLGFBQWEsYUFBYSxTQUFTO0FBQzNELFFBQU0sTUFBTSxhQUFhLE1BQU0sR0FBRyxFQUFFO0FBRXBDLE1BQUksc0JBQXNCO0FBQzFCLFdBQVMsSUFBSSxJQUFJLFNBQVMsR0FBRyxLQUFLLEdBQUcsS0FBSztBQUN4QywwQkFBdUIsSUFBSSxHQUFXLG1CQUFtQjtBQUFBLEVBQzNEO0FBRUEsU0FBTztBQUNUO0FBRUEsSUFBTyxtQkFBUTs7O0FDbFVSLElBQU0sY0FBYyxDQUFDLFlBQTJCLENBQUMsU0FBUyxDQUFDLEtBQUssUUFBUTtBQUM3RSxNQUFJLENBQUMsUUFBUSxTQUFTLElBQUksTUFBTSxHQUFHO0FBQ2pDLFVBQU0sSUFBSSwwQkFBMEI7QUFBQSxNQUNsQyxNQUFNO0FBQUEsTUFDTixTQUFTLFFBQVEsUUFBUSxLQUFLLEdBQUc7QUFBQSxJQUNuQyxDQUFDO0FBQUEsRUFDSDtBQUNBLFNBQU8sS0FBSyxLQUFLLEdBQUc7QUFDdEI7QUFFQSxJQUFPLHVCQUFROzs7QUNuQmYsb0JBQWM7OztBQ3NCUCxTQUFTLE9BQU8sUUFBeUI7QUFDOUMsTUFBSSxVQUFVLFFBQVE7QUFFcEIsV0FBUSxPQUFlLEtBQUs7QUFBQSxFQUM5QjtBQUVBLFNBQVEsT0FBZTtBQUN6QjtBQU9PLFNBQVMsWUFBWSxRQUE0QjtBQXRDeEQ7QUF1Q0UsTUFBSSxVQUFVLFFBQVE7QUFFcEIsVUFBTSxNQUFPLE9BQWU7QUFFNUIsVUFBTSxrQkFBa0IsT0FBTyxZQUFZO0FBQzNDLFFBQUksbUJBQW1CLGdCQUFnQixXQUFXLE1BQU0sR0FBRztBQUV6RCxhQUFPLGdCQUFnQixNQUFNLENBQUM7QUFBQSxJQUNoQztBQUVBLFFBQUksSUFBSSxPQUFPLElBQUksSUFBSSxNQUFNO0FBQzNCLGFBQU8sbUJBQW1CLElBQUksSUFBSSxJQUFJO0FBQUEsSUFDeEM7QUFDQSxXQUFPLG1CQUFtQjtBQUFBLEVBQzVCO0FBRUEsV0FBUSxZQUFlLFNBQWYsbUJBQXFCLGFBQVk7QUFDM0M7QUFLQSxTQUFTLG1CQUFtQixNQUFzQjtBQUNoRCxRQUFNLFVBQWtDO0FBQUEsSUFDdEMsUUFBUTtBQUFBLElBQ1IsUUFBUTtBQUFBLElBQ1IsUUFBUTtBQUFBLElBQ1IsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLElBQ04sV0FBVztBQUFBLElBQ1gsTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLElBQ04sS0FBSztBQUFBLElBQ0wsU0FBUztBQUFBLElBQ1QsT0FBTztBQUFBLElBQ1AsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLElBQ04sWUFBWTtBQUFBLElBQ1osUUFBUTtBQUFBLElBQ1IsT0FBTztBQUFBLElBQ1AsT0FBTztBQUFBLElBQ1AsT0FBTztBQUFBLElBQ1Asb0JBQW9CO0FBQUEsSUFDcEIsY0FBYztBQUFBLElBQ2QsUUFBUTtBQUFBLElBQ1IsS0FBSztBQUFBLElBQ0wsS0FBSztBQUFBLElBQ0wsVUFBVTtBQUFBLElBQ1YsTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLElBQ1YsU0FBUztBQUFBLElBQ1QsU0FBUztBQUFBLElBQ1QsYUFBYTtBQUFBLElBQ2IsU0FBUztBQUFBLElBQ1QsVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLEVBQ1o7QUFDQSxTQUFPLFFBQVEsU0FBUyxNQUFNLEtBQUssT0FBTyxDQUFDLEVBQUUsWUFBWSxJQUFJLEtBQUssTUFBTSxDQUFDO0FBQzNFO0FBS08sU0FBUyxpQkFBaUIsUUFBNEM7QUFDM0UsUUFBTSxNQUFNLE9BQU8sTUFBTTtBQUN6QixTQUFPLDJCQUFLO0FBQ2Q7QUFLTyxTQUFTLGFBQWEsUUFBNEM7QUFDdkUsUUFBTSxNQUFNLE9BQU8sTUFBTTtBQUN6QixTQUFPLDJCQUFLO0FBQ2Q7OztBRG5HQSxJQUFNLHdDQUF3QyxDQUM1QyxhQUNBLFdBQ29DO0FBQ3BDLE1BQUksQ0FBQyxhQUFhO0FBQ2hCLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSSxnQkFBZ0I7QUFFcEIsU0FBTyxZQUFZLGFBQWEsTUFBTSxjQUFjO0FBQ2xELFVBQU0sY0FBYyxpQkFBaUIsYUFBYTtBQUNsRCxRQUFJLENBQUM7QUFBYTtBQUNsQixvQkFBZ0I7QUFBQSxFQUNsQjtBQUVBLFNBQU87QUFDVDtBQUVBLElBQU0sMEJBQTBCLENBQzlCLFdBQ2lDO0FBQ2pDLFFBQU0sY0FBYyxZQUFZLE1BQU0sTUFBTTtBQUM1QyxRQUFNLGNBQWMsc0NBQXNDLGFBQWEsTUFBTTtBQUM3RSxRQUFNLGNBQWMsWUFBWSxXQUFXLE1BQU07QUFFakQsTUFBSSxDQUFDLGFBQWE7QUFDaEIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPO0FBQ1Q7QUFFQSxJQUFNLGtCQUFrQixDQUFDLFdBQXVDO0FBQzlELFFBQU0sb0JBQW9CLENBQUMsZUFBZSxjQUFjLFlBQVk7QUFFcEUsU0FBTyxrQkFBa0IsU0FBUyxZQUFZLE1BQU0sQ0FBQyxHQUFHO0FBQ3RELFVBQU0sV0FBVyxZQUFZLE1BQU07QUFDbkMsUUFBSSxhQUFhLGlCQUFpQixhQUFhLGNBQWM7QUFDM0QsWUFBTSxRQUFRLGFBQWEsTUFBTTtBQUNqQyxVQUFJLENBQUM7QUFBTztBQUNaLGVBQVM7QUFDVDtBQUFBLElBQ0Y7QUFFQSxRQUFJLGFBQWEsY0FBYztBQUM3QixZQUFNLFFBQVEsaUJBQWlCLE1BQU07QUFDckMsVUFBSSxDQUFDO0FBQU87QUFDWixlQUFTO0FBQ1Q7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDtBQUVBLElBQU0sbUJBQW1CLENBQUMsV0FBeUI7QUFDakQsUUFBTSxZQUFZLGdCQUFnQixNQUFNO0FBQ3hDLFNBQU8sWUFBWSxTQUFTLE1BQU07QUFDcEM7QUFFQSxJQUFNLHFCQUFxQixDQUFDLFdBQXlCO0FBQ25ELFFBQU0sWUFBWSxnQkFBZ0IsTUFBTTtBQUN4QyxTQUFPLFlBQVksU0FBUyxNQUFNO0FBQ3BDO0FBRUEsSUFBTSxtQkFBbUIsQ0FDdkIsUUFDQSxPQUNBLDBCQUNHO0FBQ0gsUUFBTSxlQUFlLE9BQU8sT0FBTyxDQUFDLEdBQUcsS0FBSztBQUM1QyxRQUFNLGFBQWEsd0JBQXdCLE1BQU07QUFFakQsTUFBSSxZQUFZO0FBQ2QsZUFBVyxDQUFDLEtBQUssS0FBSyxLQUFLLE9BQU8sUUFBUSxXQUFXLEtBQUssR0FBRztBQUMzRCxVQUFJLGlCQUFpQixLQUFxQixHQUFHO0FBQzNDLGNBQU0sY0FBYyxNQUFNO0FBRTFCLFlBQUksT0FBTyxnQkFBZ0IsWUFBWSxZQUFZLFdBQVcsR0FBRztBQUMvRCx1QkFBYSxPQUFPLENBQUM7QUFBQSxRQUN2QjtBQUVBLFlBQ0UsT0FBTyxnQkFBZ0IsWUFDdkIsWUFBWSxTQUFTLEtBQ3JCLHNCQUFzQixTQUFTLE9BQU8sR0FDdEM7QUFDQSx1QkFBYSxPQUFPLFlBQVksTUFBTSxHQUFHO0FBQUEsUUFDM0M7QUFFQSxjQUFNLDZCQUE2QixNQUFNLEdBQUc7QUFDNUMsWUFDRSxPQUFPLCtCQUErQixZQUN0QyxzQkFBc0IsU0FBUyxVQUFVLEdBQ3pDO0FBQ0EsZ0JBQU0sa0JBQWtCO0FBQ3hCLHVCQUFhLE9BQU8sZ0JBQWdCLE1BQU0sR0FBRztBQUFBLFFBQy9DO0FBRUEsWUFDRSxNQUFNLFFBQVEsMEJBQTBCLEtBQ3hDLHNCQUFzQixTQUFTLFVBQVUsR0FDekM7QUFDQSx1QkFBYSxPQUFPO0FBQUEsUUFDdEI7QUFFQTtBQUFBLE1BQ0Y7QUFFQSxVQUFJLG1CQUFtQixLQUFxQixHQUFHO0FBQzdDLGNBQU0sZ0JBQWdCLE1BQU07QUFFNUIsWUFBSSxPQUFPLGtCQUFrQixVQUFVO0FBQ3JDLHVCQUFhLE9BQU8sa0JBQWtCO0FBQUEsUUFDeEM7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxTQUFPLE9BQU8sTUFBTSxZQUFZO0FBQ2xDO0FBRUEsSUFBTSxzQkFBc0IsQ0FDMUIsVUFDQSxRQUNBLDBCQUNHO0FBQ0gsUUFBTSxNQUFNLElBQUksSUFBSSxVQUFVLGtCQUFrQjtBQUVoRCxRQUFNLFdBQVcsb0JBQUksSUFBWTtBQUVqQyxRQUFNLGFBQWEsd0JBQXdCLE1BQU07QUFDakQsTUFBSSxDQUFDLFlBQVk7QUFDZjtBQUFBLEVBQ0Y7QUFFQSxhQUFXLE9BQU8sSUFBSSxhQUFhLEtBQUssR0FBRztBQUN6QyxlQUFXLENBQUMsV0FBVyxLQUFLLEtBQUssT0FBTyxRQUFRLFdBQVcsS0FBSyxHQUFHO0FBQ2pFLFVBQUksaUJBQWlCLEtBQXFCLEdBQUc7QUFDM0MsWUFDRSxRQUFRLEdBQUcsaUJBQ1gsQ0FBQyxzQkFBc0IsU0FBUyxVQUFVLEdBQzFDO0FBQ0EsZ0JBQU0sSUFBSSxvQkFBb0I7QUFBQSxZQUM1QixNQUFNO0FBQUEsWUFDTixTQUFTLGlEQUFpRDtBQUFBLFVBQzVELENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxVQUFNLGFBQWEsV0FBVyxNQUFNO0FBRXBDLFFBQUksWUFBWTtBQUNkLFVBQUksaUJBQWlCLFVBQVUsR0FBRztBQUNoQyxZQUFJLFNBQVMsSUFBSSxHQUFHLEtBQUssQ0FBQyxzQkFBc0IsU0FBUyxRQUFRLEdBQUc7QUFDbEUsZ0JBQU0sSUFBSSxvQkFBb0I7QUFBQSxZQUM1QixNQUFNO0FBQUEsWUFDTixTQUFTLGdFQUFnRTtBQUFBLFVBQzNFLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxhQUFTLElBQUksR0FBRztBQUFBLEVBQ2xCO0FBQ0Y7QUFtQkEsSUFBTSxtQkFBbUIsQ0FBQyxVQUFzQjtBQUM5QyxNQUFJLE1BQU0sS0FBSyxLQUFLLEdBQUcsTUFBTSxJQUFJO0FBQy9CLFdBQU8sTUFBTTtBQUFBLEVBQ2Y7QUFDQSxNQUFJLE1BQU0sWUFBWSxZQUFZO0FBQ2hDLFdBQU8sR0FBRyxNQUFNLEtBQUssS0FBSyxHQUFHO0FBQUEsRUFDL0I7QUFDQSxTQUFPLEdBQUcsTUFBTSxnQkFBZ0IsTUFBTSxLQUFLLEtBQUssR0FBRztBQUNyRDtBQUVBLFNBQVMscUJBQ1AsY0FDQSxLQUNBO0FBQ0EsUUFBTSxvQkFBb0IsSUFBSTtBQUM5QixRQUFNLG9CQUFvQixDQUFDLFNBQWM7QUFDdkMsVUFBTSxhQUFhLElBQUksY0FBYyxPQUFPLElBQUksYUFBYTtBQUM3RCxRQUFJLENBQUMsWUFBWTtBQUNmLGFBQU8sa0JBQWtCLElBQUk7QUFBQSxJQUMvQjtBQUVBLFFBQUk7QUFDRixtREFBYyxNQUFNO0FBQUEsSUFDdEIsU0FBUyxLQUFQO0FBQ0EsWUFBTSxJQUFJLDZCQUE2QjtBQUFBLFFBQ3JDLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxRQUNULFVBQVU7QUFBQSxNQUNaLENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTyxrQkFBa0IsSUFBSTtBQUFBLEVBQy9CO0FBQ0EsTUFBSSxPQUFPO0FBQ2I7QUFFTyxJQUFNLGlCQUNYLENBT0UsVUFRRixDQUFDLFNBQ0QsT0FBTyxLQUFxQixRQUF5QjtBQTlQdkQ7QUErUEksUUFBTSxFQUFFLHdCQUF3QixzQkFBc0IsSUFBSTtBQUUxRCxNQUNHLE1BQU0sWUFBWSxNQUFNLFlBQ3hCLE1BQU0sWUFBWSxNQUFNLGNBQ3pCO0FBQ0EsVUFBTSxJQUFJLE1BQU0sbURBQW1EO0FBQUEsRUFDckU7QUFFQSxPQUNHLElBQUksV0FBVyxVQUFVLElBQUksV0FBVyxhQUN4QyxNQUFNLFlBQVksTUFBTSxpQkFDekIsR0FBQyxTQUFJLFFBQVEsb0JBQVosbUJBQTZCLFNBQVMsd0JBQ3ZDLENBQUMsY0FBQUMsUUFBRSxRQUFRLElBQUksSUFBSSxHQUNuQjtBQUNBLFVBQU0sSUFBSSxvQkFBb0I7QUFBQSxNQUM1QixNQUFNO0FBQUEsTUFDTixTQUFTLEdBQUcsSUFBSTtBQUFBLElBQ2xCLENBQUM7QUFBQSxFQUNIO0FBRUEsTUFDRSxNQUFNLFlBQ04sSUFBSSxXQUFXLFNBQ2YsR0FBQyxTQUFJLFFBQVEsb0JBQVosbUJBQTZCO0FBQUEsSUFDNUI7QUFBQSxNQUdGO0FBQ0EsVUFBTSxJQUFJLG9CQUFvQjtBQUFBLE1BQzVCLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxJQUNYLENBQUM7QUFBQSxFQUNIO0FBRUEsTUFBSTtBQUNGLFVBQU0sMkJBQTJCLEVBQUUsR0FBRyxJQUFJLE9BQU8sR0FBRyxJQUFJLEtBQUs7QUFFN0QsVUFBTSwwQkFBMEIsTUFBTSwrQkFDbEMsT0FDQSxJQUFJLFdBQVcsU0FBUyxJQUFJLFdBQVc7QUFFM0MsVUFBTSxhQUFhLFFBQVEsTUFBTSxRQUFRO0FBRXpDLFFBQUksY0FBYyx5QkFBeUI7QUFDekMsVUFBSSxRQUFPLFdBQU0sYUFBTixtQkFBZ0IsTUFBTSxJQUFJO0FBQUEsSUFDdkM7QUFFQSxRQUFJLENBQUMsY0FBYyx5QkFBeUI7QUFDMUMsVUFBSSxRQUFPLFdBQU0sYUFBTixtQkFBZ0IsTUFBTSxJQUFJO0FBQUEsSUFDdkM7QUFFQSxRQUFJLE1BQU0sYUFBYTtBQUNyQixVQUFJLENBQUMsSUFBSSxLQUFLO0FBQ1osY0FBTSxJQUFJLE1BQU0sc0JBQXNCO0FBQUEsTUFDeEM7QUFFQSwwQkFBb0IsSUFBSSxLQUFLLE1BQU0sYUFBYSxxQkFBcUI7QUFFckUsVUFBSSxRQUFRO0FBQUEsUUFDVixNQUFNO0FBQUEsUUFDTixJQUFJO0FBQUEsUUFDSjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsUUFBSSxNQUFNLGNBQWM7QUFJdEI7QUFBQyxNQUFDLElBQVksZUFBZTtBQUFBLFFBQzNCLE1BQU07QUFBQSxRQUNOO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRixTQUFTLE9BQVA7QUFDQSxRQUFJLGlCQUFpQixxQkFBcUI7QUFDeEMsWUFBTTtBQUFBLElBQ1I7QUFFQSxRQUFJLE1BQU0sU0FBUyxZQUFZO0FBQzdCLFVBQUk7QUFDSixVQUFJLE1BQU0sT0FBTyxXQUFXLEdBQUc7QUFDN0IsY0FBTSxRQUFRLE1BQU0sT0FBTztBQUMzQixrQkFBVSxpQkFBaUIsS0FBSztBQUFBLE1BQ2xDLE9BQU87QUFDTCxjQUFNLHFCQUErQixDQUFDO0FBQ3RDLG1CQUFXLFNBQVMsTUFBTSxRQUFRO0FBQ2hDLDZCQUFtQixLQUFLLGlCQUFpQixLQUFLLENBQUM7QUFBQSxRQUNqRDtBQUNBLGtCQUNFLEdBQUcsTUFBTSxPQUFPLDBCQUNoQixtQkFBbUIsS0FBSyxJQUFJO0FBQUEsTUFDaEM7QUFFQSxZQUFNLElBQUksb0JBQW9CO0FBQUEsUUFDNUIsTUFBTTtBQUFBLFFBQ047QUFBQSxRQUNBLG1CQUFtQixNQUFNLE9BQU87QUFBQSxNQUNsQyxDQUFDO0FBQUEsSUFDSDtBQUVBLFVBQU0sSUFBSSxvQkFBb0I7QUFBQSxNQUM1QixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsSUFDWCxDQUFDO0FBQUEsRUFDSDtBQUtBLE1BQUksTUFBTSx5QkFBeUI7QUFDakMseUJBQXFCLE1BQU0sY0FBYyxHQUFHO0FBQUEsRUFDOUM7QUFFQSxTQUFPLEtBQUssS0FBSyxHQUFHO0FBQ3RCO0FBRUYsSUFBTywwQkFBUTs7O0FFNVdmLGlCQUFrQjtBQVNYLElBQU0saUJBQWlCLENBNkI1QixTQUdVO0FBRUwsSUFBTSx3QkFBMkM7QUFBQSxFQUN0RDtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Y7QUFFTyxJQUFNLHNCQUFvRCxDQUMvRCxnQkFDRztBQUNILFFBQU07QUFBQSxJQUNKLG9CQUFvQixDQUFDO0FBQUEsSUFDckIsb0JBQW9CLENBQUM7QUFBQSxJQUNyQiw2QkFBNkIsQ0FBQztBQUFBLElBQzlCO0FBQUEsSUFDQSwrQkFBK0I7QUFBQSxJQUMvQiw4QkFBOEJDLHVCQUFzQjtBQUFBLE1BQ2xELGFBQWEsWUFBWTtBQUFBLE1BQ3pCLDBCQUEwQjtBQUFBLFFBQ3hCLGlCQUFpQixDQUFDLEtBQUssVUFBVTtBQUMvQixjQUFJLFFBQVEsSUFBSSxhQUFhLGNBQWM7QUFDekMsbUJBQU8sQ0FBQztBQUFBLFVBQ1Y7QUFFQSxpQkFBTztBQUFBLFFBQ1Q7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDO0FBQUEsSUFDRCxnQkFBZ0IsWUFBWSxjQUN4QjtBQUFBLE1BQ0UsSUFBSSxhQUFFLFFBQVE7QUFBQSxJQUNoQixJQUNBLENBQUM7QUFBQSxJQUNMLHdCQUF3QjtBQUFBLElBQ3hCO0FBQUEsSUFDQSxhQUFhO0FBQUEsRUFDZixJQUFJO0FBRUosUUFBTSxnQkFBZ0IsQ0FBQyxTQUFvQjtBQUN6QyxVQUFNLG9CQUFvQixDQUFDLHVCQUF1QjtBQTNGdEQ7QUE0Rk0sWUFBTSxxQkFBcUIsT0FDekIsS0FDQSxRQUNHO0FBQ0gsMEJBQWtCLFVBQVUsQ0FBQyxTQUFTO0FBRXRDLGNBQU0sbUJBQ0osTUFBTSxRQUFRLEtBQUssSUFBSSxJQUFJLEtBQUssT0FBTyxDQUFDLEtBQUssSUFBSSxHQUNqRCxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsa0JBQWtCLFNBQVMsQ0FBVTtBQUNwRSxjQUFNLG9CQUFvQixnQkFBZ0IsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFO0FBQzlELFlBQUk7QUFDRixnQkFBTSxJQUFJLE1BQU0sc0JBQXNCLG1CQUFtQjtBQUUzRCxjQUFNLGtDQUFrQyxDQUFDLFNBQVMsT0FBT0MsTUFBS0MsU0FBUTtBQXpHOUUsY0FBQUM7QUEwR1UsZ0JBQU0sd0NBQ0pBLE1BQUEsS0FBSyxxQ0FBTCxPQUFBQSxNQUNBO0FBRUYscUJBQVcsQ0FBQyxNQUFNLFVBQVUsS0FBSyxpQkFBaUI7QUFDaEQsZ0JBQUkseUJBQXlCO0FBQzdCLGdCQUFJO0FBQ0YscUJBQU8sTUFBTSxXQUFXLElBQUksU0FBUztBQUVuQyx5Q0FBeUI7QUFDekIsdUJBQU8sS0FBSyxHQUFHLElBQUk7QUFBQSxjQUNyQixDQUFDLEVBQUVGLE1BQUtDLElBQUc7QUFBQSxZQUNiLFNBQVMsT0FBUDtBQUNBLGtCQUFJLGlCQUFpQixpQ0FBaUM7QUFDcEQ7QUFBQSxjQUNGO0FBQ0Esb0JBQU0sb0JBQW9CO0FBQzFCLGtCQUNFLHdDQUNBLHdCQUNBO0FBQ0EscURBQXFDLENBQUMsS0FBSyxDQUFDO0FBQUEsY0FDOUM7QUFDQSxvQkFBTTtBQUFBLFlBQ1I7QUFBQSxVQUNGO0FBQ0EsZ0JBQU0sSUFBSSxzQkFBc0I7QUFBQSxZQUM5QixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsVUFDWCxDQUFDO0FBQUEsUUFDSDtBQUVBLGVBQU87QUFBQSxVQUNMLEdBQUssOEJBQ0QsQ0FBQywyQkFBMkIsSUFDNUIsQ0FBQztBQUFBLFVBQ0wsR0FBSyxxQkFBcUIsQ0FBQztBQUFBLFVBQzNCO0FBQUEsVUFDQSxHQUFLLDhCQUE4QixDQUFDO0FBQUEsVUFDcEMsR0FBSyxLQUFLLGVBQWUsQ0FBQztBQUFBLFVBQzFCLHFCQUFZLEtBQUssT0FBTztBQUFBLFVBQ3hCLHdCQUFlO0FBQUEsWUFDYixVQUFVLEtBQUs7QUFBQSxZQUNmLGFBQWEsS0FBSztBQUFBLFlBQ2xCLGNBQWMsS0FBSztBQUFBLFlBQ25CLFVBQVUsS0FBSztBQUFBLFlBQ2YsY0FBYyxLQUFLO0FBQUEsWUFDbkI7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0YsQ0FBQztBQUFBLFVBQ0Q7QUFBQSxRQUNGLEVBQUUsS0FBWSxHQUFHO0FBQUEsTUFDbkI7QUFFQSx5QkFBbUIsZUFBZTtBQUNsQyx5QkFBbUIsYUFBYTtBQUdoQyxZQUFNLGVBQWMsVUFBSyxnQkFBTCxZQUFvQjtBQUN4QyxVQUFJLGdCQUFnQixRQUFXO0FBQzdCLDJCQUFtQixjQUFjO0FBQUEsTUFDbkM7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUVBLHNCQUFrQixlQUFlO0FBQ2pDLHNCQUFrQixhQUFhO0FBRS9CLFdBQU87QUFBQSxFQUNUO0FBRUEsZ0JBQWMsZUFBZTtBQUU3QixTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbIndpdGhFeGNlcHRpb25IYW5kbGluZyIsICJ3aXRoRXhjZXB0aW9uSGFuZGxpbmciLCAiXyIsICJ3aXRoRXhjZXB0aW9uSGFuZGxpbmciLCAicmVxIiwgInJlcyIsICJfYSJdCn0K
|
package/dist/index.mjs
CHANGED