@sapui5/sap.fe.core 1.130.5 → 1.130.8
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/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +5 -4
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +4 -3
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/TitleHelper.js +5 -4
- package/src/sap/fe/core/helpers/TitleHelper.ts +5 -5
- package/src/sap/fe/core/library.js +1 -1
package/package.json
CHANGED
package/src/sap/fe/core/.library
CHANGED
|
@@ -874,14 +874,15 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/UIProvi
|
|
|
874
874
|
}, resourceModel, null, null, null, messageHandler, strictHandlingUtilities));
|
|
875
875
|
const allPromise = [oActionPromise];
|
|
876
876
|
if (mParameters.additionalSideEffect) {
|
|
877
|
-
|
|
877
|
+
// We always need a context to trigger side-effects, so we create one with a dummy path and destroy it afterwards
|
|
878
|
+
const binding = oModel.bindContext("/unBoundAction");
|
|
878
879
|
const sideEffect = {
|
|
879
|
-
context:
|
|
880
|
+
context: binding.getBoundContext(),
|
|
880
881
|
pathExpressions: mParameters.additionalSideEffect.pathExpressions,
|
|
881
882
|
triggerActions: mParameters.additionalSideEffect.triggerActions
|
|
882
883
|
};
|
|
883
884
|
operations.fnRequestSideEffects(oAppComponent, sideEffect, mParameters, sGroupId, allPromise);
|
|
884
|
-
|
|
885
|
+
binding.destroy();
|
|
885
886
|
}
|
|
886
887
|
oModel.submitBatch(sGroupId);
|
|
887
888
|
// trigger onSubmitted "event"
|
|
@@ -1019,4 +1020,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/UIProvi
|
|
|
1019
1020
|
};
|
|
1020
1021
|
return operations;
|
|
1021
1022
|
}, false);
|
|
1022
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb25zdGFudHMiLCJGRUxpYnJhcnkiLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJBY3Rpb24iLCJNZXNzYWdlQm94IiwiY2FsbEJvdW5kQWN0aW9uIiwic0FjdGlvbk5hbWUiLCJjb250ZXh0cyIsIm9Nb2RlbCIsIm9BcHBDb21wb25lbnQiLCJtUGFyYW1ldGVycyIsImxlbmd0aCIsIkVycm9yIiwiaXNDYWxsZWRXaXRoQXJyYXkiLCJBcnJheSIsImlzQXJyYXkiLCJhQ29udGV4dHMiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwic0FjdGlvblBhdGgiLCJnZXRNZXRhUGF0aCIsImdldFBhdGgiLCJvQm91bmRBY3Rpb24iLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImlzQ3JpdGljYWxBY3Rpb24iLCJBY3Rpb25SdW50aW1lIiwiZ2V0SXNBY3Rpb25Dcml0aWNhbCIsImV4dHJhY3RTaW5nbGVSZXN1bHQiLCJyZXN1bHQiLCJzdGF0dXMiLCJ2YWx1ZSIsInJlYXNvbiIsImNvbnZlcnRlZFR5cGVzIiwiY29udmVydFR5cGVzIiwiY29udmVydGVkQWN0aW9uIiwicmVzb2x2ZVBhdGgiLCJ0YXJnZXQiLCJjYWxsQWN0aW9uIiwiZSIsImNhbGxBY3Rpb25JbXBvcnQiLCJhY3Rpb25OYW1lIiwibW9kZWwiLCJhcHBDb21wb25lbnQiLCJwYXJhbWV0ZXJzIiwibWV0YU1vZGVsIiwiYWN0aW9uUGF0aCIsImNvbnZlcnRlZEFjdGlvbkltcG9ydCIsImFjdGlvbiIsInVuYm91bmRBY3Rpb25JbmRleCIsImFjdGlvbnMiLCJmaWx0ZXIiLCJuYW1lIiwiZmluZEluZGV4IiwiaXNCb3VuZCIsImFjdGlvbk5hbWVGcm9tTW9kZWwiLCJhY3Rpb25JbXBvcnQiLCJjYWxsQm91bmRGdW5jdGlvbiIsInNGdW5jdGlvbk5hbWUiLCJjb250ZXh0IiwiUHJvbWlzZSIsInJlamVjdCIsInNGdW5jdGlvblBhdGgiLCJvQm91bmRGdW5jdGlvbiIsIl9leGVjdXRlRnVuY3Rpb24iLCJjYWxsRnVuY3Rpb25JbXBvcnQiLCJiaW5kQ29udGV4dCIsIm9GdW5jdGlvbkltcG9ydCIsImdldE9iamVjdCIsIm9GdW5jdGlvbiIsImZ1bmN0aW9uVG9DYWxsIiwiZ3JvdXBJZCIsImV4ZWN1dGlvblByb21pc2UiLCJleGVjdXRlIiwic3VibWl0QmF0Y2giLCJnZXRCb3VuZENvbnRleHQiLCJjaGVja1BhcmFtZXRlclR5cGVBbmRSZXR1cm5Db252ZXJ0ZWRWYWx1ZSIsInBhcmFtZXRlciIsInVuZGVmaW5lZCIsIkJhc2VUeXBlIiwiX191aTVfcmVxdWlyZV9hc3luYyIsImRlZmF1bHQiLCJUeXBlTWFwIiwicGFyYW1ldGVyVHlwZSIsInR5cGUiLCJnZXRCYXNlVHlwZSIsIlN0cmluZyIsInR5cGVJbnN0YW5jZSIsImdldERhdGFUeXBlSW5zdGFuY2UiLCJwYXJzZVZhbHVlIiwib0FjdGlvbiIsInN0cmljdEhhbmRsaW5nVXRpbGl0aWVzIiwiaXM0MTJFeGVjdXRlZCIsInN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzIiwic3RyaWN0SGFuZGxpbmdQcm9taXNlcyIsInN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzIiwiZGVsYXlTdWNjZXNzTWVzc2FnZXMiLCJwcm9jZXNzZWRNZXNzYWdlSWRzIiwiU2V0IiwiZnVsbHlRdWFsaWZpZWROYW1lIiwicmVwbGFjZSIsImJHcm91cGVkIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiQ2hhbmdlU2V0IiwicmVzb2x2ZSIsIl9jb252ZXJ0ZWRBY3Rpb24kcGFyYSIsInNBY3Rpb25MYWJlbCIsImxhYmVsIiwiYlNraXBQYXJhbWV0ZXJEaWFsb2ciLCJza2lwUGFyYW1ldGVyRGlhbG9nIiwiYklzQ3JlYXRlQWN0aW9uIiwiYklzQ3JpdGljYWxBY3Rpb24iLCJzTWVzc2FnZXNQYXRoIiwiaU1lc3NhZ2VTaWRlRWZmZWN0IiwiaXNTYW1lRW50aXR5IiwiYlZhbHVlc1Byb3ZpZGVkRm9yQWxsTWFuZGF0b3J5UGFyYW1ldGVycyIsImFjdGlvbkRlZmluaXRpb24iLCJhY3Rpb25QYXJhbWV0ZXJzIiwic2xpY2UiLCJiQWN0aW9uTmVlZHNQYXJhbWV0ZXJEaWFsb2ciLCJhUGFyYW1ldGVyVmFsdWVzIiwicGFyYW1ldGVyVmFsdWVzIiwib0NvbXBvbmVudERhdGEiLCJnZXRDb21wb25lbnREYXRhIiwib1N0YXJ0dXBQYXJhbWV0ZXJzIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJldmVyeSIsIl9wYXJhbWV0ZXIkYW5ub3RhdGlvbiIsIl9wYXJhbWV0ZXIkYW5ub3RhdGlvbjIiLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGlkZGVuIiwidmFsdWVPZiIsIl92YWx1ZXNQcm92aWRlZEZvckFsbE1hbmRhdG9yeVBhcmFtZXRlcnMiLCJtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycyIsImRlZmF1bHRQYXJhbWV0ZXJzVmFsdWVzIiwiZm5PblN1Ym1pdHRlZCIsIm9uU3VibWl0dGVkIiwiZm5PblJlc3BvbnNlIiwib25SZXNwb25zZSIsImFBY3Rpb25QYXJhbWV0ZXJzIiwiYkdldEJvdW5kQ29udGV4dCIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsInNlbGVjdGVkSXRlbXMiLCJfbVBhcmFtZXRlcnMkYWRkaXRpb24iLCJjb252ZXJ0ZWRNZXRhRGF0YSIsImZpbHRlcmVkRW50aXR5U2V0IiwiZW50aXR5U2V0cyIsInNpbmdsZUVudGl0eVNldCIsImVudGl0eVR5cGUiLCJyZXR1cm5FbnRpdHlUeXBlIiwiY3VycmVudEVudGl0eVNldCIsInJldHVybkNvbGxlY3Rpb24iLCJzb3VyY2VFbnRpdHlUeXBlIiwiTW9kZWxIZWxwZXIiLCJpc0RyYWZ0Um9vdCIsIm1CaW5kaW5nUGFyYW1ldGVycyIsIiRzZWxlY3QiLCJhZGRpdGlvbmFsU2lkZUVmZmVjdCIsInBhdGhFeHByZXNzaW9ucyIsImdldE1lc3NhZ2VzUGF0aCIsImV4cCIsIl9jb252ZXJ0ZWRBY3Rpb24kcmV0dSIsImVudGl0eVByb3BlcnRpZXMiLCJmaW5kIiwicHJvcGVydHkiLCJzcGxpdCIsImluY2x1ZGVzIiwiX21QYXJhbWV0ZXJzJGFkZGl0aW9uMiIsInB1c2giLCJ0cmlnZ2VyQWN0aW9ucyIsInNwbGljZSIsImludGVybmFsTW9kZWxDb250ZXh0Iiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiaXNDcmVhdGVBY3Rpb24iLCJiT2JqZWN0UGFnZSIsImRpc2FibGVTdHJpY3RIYW5kbGluZyIsImNvbnRyb2xJZCIsImNvbnRyb2wiLCJwYXJlbnRDb250cm9sIiwiYnlJZCIsImlzU3RhdGljIiwiaXNDb2xsZWN0aW9uIiwib3BlcmF0aW9uUmVzdWx0IiwiZXhlY3V0aW9uV2l0RGlhbG9nIiwicGFyYW1ldGVyRGlhbG9nIiwiZ2V0Q29yZVVJRmFjdG9yeSIsIm5ld1BhcmFtZXRlckRpYWxvZyIsImVudGl0eVNldE5hbWUiLCJ2aWV3IiwibWVzc2FnZUhhbmRsZXIiLCJhY3Rpb25Ub0JlRXhlY3V0ZWQiLCJfZXhlY3V0ZUFjdGlvbiIsImJlZm9yZVNob3dpbmdNZXNzYWdlIiwiYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayIsImlnbm9yZUVUYWciLCJjcmVhdGVEaWFsb2ciLCJvcGVuRGlhbG9nIiwiY29uZmlybUNyaXRpY2FsQWN0aW9uIiwiYWZ0ZXJBY3Rpb25SZXNvbHV0aW9uIiwiaSIsIl9hUGFyYW1ldGVyVmFsdWVzJGZpbiIsImVsZW1lbnQiLCJhY3Rpb25QYXJhbWV0ZXIiLCJwYXJhbWV0ZXJWYWx1ZU5vdENvbnZlcnRlZCIsIl9vU3RhcnR1cFBhcmFtZXRlcnMkYSIsIl9hY3Rpb25QYXJhbWV0ZXIkYW5ubyIsIl9hY3Rpb25QYXJhbWV0ZXIkYW5ubzIiLCJfYWN0aW9uUGFyYW1ldGVyJGFubm8zIiwiUGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwib09wZXJhdGlvblJlc3VsdCIsIm1lc3NhZ2VzIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsImNvbmNhdCIsIl9tUGFyYW1ldGVycyRtZXNzYWdlSCIsInN0cmljdEhhbmRsaW5nRmFpbHMiLCJhRmFpbGVkQ29udGV4dHMiLCJmb3JFYWNoIiwiZmFpbCIsImdldENvbnRleHQiLCJvRmFpbGVkT3BlcmF0aW9uUmVzdWx0IiwiYWRkTWVzc2FnZXMiLCJzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCIsIm1lc3NhZ2VIYW5kbGluZyIsImhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzIiwiaXNBY3Rpb25TdWNjZXNzZnVsIiwiX29PcGVyYXRpb25SZXN1bHQiLCJyZXMiLCJzaG93TWVzc2FnZURpYWxvZyIsIm9uQmVmb3JlU2hvd01lc3NhZ2UiLCJhTWVzc2FnZXMiLCJzaG93TWVzc2FnZVBhcmFtZXRlcnNJbiIsImFTZWxlY3RlZENvbnRleHRzIiwidGhlbiIsImNsZWFyU3RyaWN0V2FybmluZ01lc3NhZ2VzIiwib0FjdGlvbkNvbnRleHQiLCJvUGFyZW50Q29udHJvbCIsImJvdW5kQWN0aW9uTmFtZSIsInN1ZmZpeFJlc291cmNlS2V5IiwicmVzb3VyY2VNb2RlbCIsImdldFJlc291cmNlTW9kZWwiLCJzQ29uZmlybWF0aW9uVGV4dCIsImdldFRleHQiLCJjb25maXJtIiwib25DbG9zZSIsInNBY3Rpb24iLCJPSyIsIm9PcGVyYXRpb24iLCJvRXJyb3IiLCJDYW5jZWxBY3Rpb25EaWFsb2ciLCIkSXNCb3VuZCIsInNlbGVjdGVkQ29udGV4dHMiLCJnZXRQcm9wZXJ0eSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJKU09OIiwicGFyc2UiLCJpc0EiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwiRGVsZXRlSGVscGVyIiwidXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMiLCJmaWx0ZXJBUERhbmRDb250ZXh0TWVzc2FnZXMiLCJlcnJvclRhcmdldHNJbkFQRCIsInVuYm91bmRNZXNzYWdlcyIsImlzQVBET1BlbiIsInJlbW92ZUNvbnRleHRNZXNzYWdlc2Zyb21Nb2RlbCIsImNvbnRhaW5zQm91bmRUcmFuc2lzdGlvbiIsImdldE1vZGVsIiwicmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJtZXNzYWdlc1RvU2hvdyIsInNob3dNZXNzYWdlSW5EaWFsb2ciLCJvRGlhbG9nIiwic2hvd01lc3NhZ2VCb3giLCJvQ29udHJvbCIsIm9SZXNvdXJjZUJ1bmRsZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsIm1lc3NhZ2UiLCJfbWVzc2FnZSRnZXRUYXJnZXRzIiwiZ2V0VGFyZ2V0cyIsIkFQRG1lc3NhZ2VzIiwiX21lc3NhZ2UkZ2V0VGFyZ2V0czIiLCJfbVBhcmFtZXRlcnMkYUFjdGlvblAiLCJzb21lIiwiYWN0aW9uUGFyYW0iLCJfbWVzc2FnZSRnZXRUYXJnZXRzMyIsIkFQRE1lc3NhZ2UiLCJpc0FQRFRhcmdldCIsIm1lc3NhZ2VNb2RlbCIsIm1lc3NhZ2VzSW5Nb2RlbCIsImFCb3VuZE1lc3NhZ2VzIiwiZ2V0TWVzc2FnZXMiLCJnZW5lcmljTWVzc2FnZSIsImlzRWRpdGFibGUiLCJub25FcnJvck1lc3NhZ2VFeGlzdHNJbkRpYWxvZyIsImdldFR5cGUiLCJub25FcnJvck1lc3NhZ2VFeGlzdHNJbk1vZGVsIiwiZ2V0R2VuZXJpY01zZ0ZvclNpbmdsZUVycm9ySW5DaGFuZ2VTZXQiLCJ1bnNoaWZ0Iiwic01lc3NhZ2UiLCJzRGVzY3JpcHRpb25UZXh0IiwiTWVzc2FnZSIsIk1lc3NhZ2VUeXBlIiwicGVyc2lzdGVudCIsImRlc2NyaXB0aW9uIiwiY29kZSIsImlzT3BlbiIsImNsb3NlIiwiZGVzdHJveSIsImZpbHRlcmVkTWVzc2FnZXMiLCJiSXNBUERPcGVuIiwiZm5HZXRNZXNzYWdlU3VidGl0bGUiLCJzZXRNZXNzYWdlU3VidGl0bGUiLCJiaW5kIiwic2hvd0NoYW5nZVNldEVycm9yRGlhbG9nIiwicmVzb3VyY2VCdW5kbGUiLCJ0ZWNobmljYWxEZXRhaWxzIiwiZmUiLCJjaGFuZ2VTZXRQcmVUZXh0Rm9yU2luZ2xlRXJyb3IiLCJleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzIiwic0dyb3VwSWQiLCJpQ29udGV4dExlbmd0aCIsImN1cnJlbnRfY29udGV4dF9pbmRleCIsImludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlIiwiaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCIsIm9BY3Rpb25Qcm9taXNlIiwiYkVuYWJsZVN0cmljdEhhbmRsaW5nIiwiX29Qcm9wZXJ0eSQiLCJzUGF0aCIsInNNZXRhUGF0aCIsIm9Qcm9wZXJ0eSIsIiRraW5kIiwiZW5oYW5jZVNpZGVFZmZlY3RzIiwib3BlcmF0aW9uc0hlbHBlciIsImZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZCIsIm9wZXJhdGlvbnMiLCJ1cGRhdGU0MTJUcmFuc2l0aW9uTWVzc2FnZXMiLCJyZWFsUmVzdWx0IiwiY2F0Y2giLCJBY3Rpb25FeGVjdXRpb25GYWlsZWQiLCJvbmx5U3VjY2Vzc01lc3NhZ2VzIiwiYXJndW1lbnRzIiwidW5Qcm9jZXNzZWRNZXNzYWdlcyIsInJlZHVjZSIsImFjYyIsImhhcyIsImdldElkIiwibmV3VHJhbnNpdGlvbkVycm9yTWVzc2FnZXNJZCIsImdldFBlcnNpc3RlbnQiLCJTdWNjZXNzIiwibWFwIiwiZnJvbSIsIk9iamVjdCIsInZhbHVlcyIsImNyZWF0ZWludGVybmFsT3BlcmF0aW9uc1Byb21pc2VGb3JBY3Rpb25FeGVjdXRpb24iLCJvTG9jYWxBY3Rpb25Qcm9taXNlIiwiTG9nIiwiZXJyb3IiLCJzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJkZWZhdWx0VmFsdWVzIiwic2V0UGFyYW1ldGVyIiwiYUFjdGlvblByb21pc2VzIiwiaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZU9iamVjdENoYW5nZVNldCIsImZuRXhlY3V0ZUFjdGlvbiIsImFjdGlvbkNvbnRleHQiLCJvU2lkZUVmZmVjdCIsImluZGl2aWR1YWxBY3Rpb25Qcm9taXNlIiwiZ2V0VXBkYXRlR3JvdXBJZCIsInJlcXVlc3RTaWRlRWZmZWN0cyIsImZuUmVxdWVzdFNpZGVFZmZlY3RzIiwiYWxsU2V0dGxlZCIsImZuRXhlY3V0ZVNpbmdsZUFjdGlvbiIsImludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3RJc29sYXRlZCIsImZuRXhlY3V0ZUNoYW5nZXNldCIsImFDaGFuZ2VTZXRMb2NhbFByb21pc2VzIiwibm9vcCIsInJlbmRlck1lc3NhZ2VWaWV3Iiwic2hQcm9taXNlIiwic2V0RGF0YSIsImZuSGFuZGxlUmVzdWx0cyIsImZuRXhlY3V0ZVNlcXVlbnRpYWxseSIsImNvbnRleHRzVG9FeGVjdXRlIiwicHJvY2Vzc09uZUFjdGlvbiIsImFjdGlvbkluZGV4IiwiX21QYXJhbWV0ZXJzJGNvbnRyb2wiLCJfbVBhcmFtZXRlcnMkY29udHJvbCQiLCJfbVBhcmFtZXRlcnMkY29udHJvbCQyIiwiaW5pdGlhbFRhYmxlQ29udGV4dCIsImdldFJvd0JpbmRpbmciLCJjYWxsIiwiZ2V0SGVhZGVyQ29udGV4dCIsInByb21pc2UiLCJpZCIsImZpbmFsbHkiLCJhbGxQcm9taXNlIiwic2lkZUVmZmVjdCIsImFsbCIsImN1cnJlbnRQcm9taXNlVmFsdWVzIiwiY3VycmVudFByb21pc2VWYWx1ZSIsIl9vQWN0aW9uJGdldEJvdW5kQ29udCIsIl9vQWN0aW9uIiwiX29BY3Rpb24kZ2V0Qm91bmRDb250MiIsImhpZGRlbkFubm90YXRpb25TZXRPbkFsbEFjdGlvbnMiLCJfcGFyYW1ldGVyJGFubm90YXRpb24zIiwiX3BhcmFtZXRlciRhbm5vdGF0aW9uNCIsIl9wYXJhbWV0ZXIkYW5ub3RhdGlvbjUiLCJfcGFyYW1ldGVyJGFubm90YXRpb242IiwiX3BhcmFtZXRlciRhbm5vdGF0aW9uNyIsIl9wYXJhbWV0ZXIkYW5ub3RhdGlvbjgiLCJfcGFyYW1ldGVyJGFubm90YXRpb245IiwiX3BhcmFtZXRlciRhbm5vdGF0aW9uMTAiLCJmaWVsZENvbnRyb2wiLCJDb21tb24iLCJGaWVsZENvbnRyb2wiLCJpc01hbmRhdG9yeSIsInRvU3RyaW5nIiwicGFyYW1ldGVyVmFsdWUiLCJsb2NhbFByb21pc2UiLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJwcm9taXNlcyIsImV4ZWN1dGVBY3Rpb24iLCJvcGVyYXRpb25Db250ZXh0QmluZGluZyIsInJldHVybmVkQ29udGV4dCIsIm9yaWdpbiIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImdldEluc3RhbmNlZFZpZXdzIiwicGFnZVZpZXciLCJnZXRCaW5kaW5nQ29udGV4dCIsInZhbHVlc1Byb3ZpZGVkRm9yQWxsTWFuZGF0b3J5UGFyYW1ldGVycyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiZmFjYWRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcblx0QWN0aW9uSW1wb3J0LFxuXHRBY3Rpb25QYXJhbWV0ZXIsXG5cdEFjdGlvbiBhcyBFZG1BY3Rpb24sXG5cdEFjdGlvblBhcmFtZXRlciBhcyBFZG1BY3Rpb25QYXJhbWV0ZXIsXG5cdFByaW1pdGl2ZVR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgQWN0aW9uUnVudGltZSBmcm9tIFwic2FwL2ZlL2NvcmUvQWN0aW9uUnVudGltZVwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB7IGdldENvcmVVSUZhY3RvcnkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvVUlQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kQ29udGV4dFBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZVdpdGhIZWFkZXIsIFNob3dNZXNzYWdlUGFyYW1ldGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCBtZXNzYWdlSGFuZGxpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzLCB0eXBlIE1ldGFNb2RlbEFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IERlbGV0ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9EZWxldGVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25TaWRlRWZmZWN0c1R5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGRJdGVtIGZyb20gXCJzYXAvdWkvbWRjL2ZpZWxkL011bHRpVmFsdWVGaWVsZEl0ZW1cIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT0RhdGFWNENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCIuLi8uLi8uLi9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBvcGVyYXRpb25zSGVscGVyLCB7IHR5cGUgU3RyaWN0SGFuZGxpbmdQYXJhbWV0ZXJzLCB0eXBlIFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzIH0gZnJvbSBcIi4uLy4uLy4uL29wZXJhdGlvbnNIZWxwZXJcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VIYW5kbGVyIGZyb20gXCIuLi8uLi9NZXNzYWdlSGFuZGxlclwiO1xuY29uc3QgQ29uc3RhbnRzID0gRkVMaWJyYXJ5LkNvbnN0YW50cyxcblx0SW52b2NhdGlvbkdyb3VwaW5nID0gRkVMaWJyYXJ5Lkludm9jYXRpb25Hcm91cGluZztcbmNvbnN0IEFjdGlvbiA9IE1lc3NhZ2VCb3guQWN0aW9uO1xuXG5leHBvcnQgdHlwZSBBY3Rpb25SZXNwb25zZSA9IHVuZGVmaW5lZCB8IE9EYXRhVjRDb250ZXh0IHwgUHJvbWlzZVNldHRsZWRSZXN1bHQ8dW5kZWZpbmVkIHwgT0RhdGFWNENvbnRleHQ+W107XG5cbmV4cG9ydCB0eXBlIFNob3dBY3Rpb25EaWFsb2dQYXJhbWV0ZXJzID0ge1xuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDtcblx0Zm5PblN1Ym1pdHRlZDogRnVuY3Rpb247XG5cdGZuT25SZXNwb25zZTogRnVuY3Rpb247XG5cdGFjdGlvbk5hbWU6IHN0cmluZztcblx0bW9kZWw6IE9EYXRhTW9kZWw7XG5cdGFBY3Rpb25QYXJhbWV0ZXJzOiBFZG1BY3Rpb25QYXJhbWV0ZXJbXTtcblx0ZGVmYXVsdFBhcmFtZXRlcnNWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+O1xuXHRiR2V0Qm91bmRDb250ZXh0PzogYm9vbGVhbjtcblx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uPzogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0c2VsZWN0ZWRJdGVtczogT0RhdGFWNENvbnRleHRbXTtcblx0YUNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdO1xuXHRtQmluZGluZ1BhcmFtZXRlcnM/OiBCaW5kQ29udGV4dFBhcmFtZXRlcnM7XG5cdGFkZGl0aW9uYWxTaWRlRWZmZWN0PzogQWN0aW9uU2lkZUVmZmVjdHNUeXBlO1xuXHRiR3JvdXBlZD86IGJvb2xlYW47XG5cdGludGVybmFsTW9kZWxDb250ZXh0PzogSW50ZXJuYWxNb2RlbENvbnRleHQgfCBudWxsO1xuXHRvcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmc7XG5cdGlzQ3JlYXRlQWN0aW9uPzogYm9vbGVhbjtcblx0Yk9iamVjdFBhZ2U/OiBib29sZWFuO1xuXHRkaXNhYmxlU3RyaWN0SGFuZGxpbmc/OiBib29sZWFuO1xuXHRiSXNDcmVhdGVBY3Rpb24/OiBib29sZWFuO1xuXHRncm91cElkPzogc3RyaW5nO1xuXHRpc1N0YXRpYz86IGJvb2xlYW47XG5cdGNvbnRyb2w/OiBDb250cm9sO1xuXHRvRGlhbG9nPzogRGlhbG9nO1xuXHRyZXF1ZXN0U2lkZUVmZmVjdHM/OiBGdW5jdGlvbjtcblx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmU/OiBGdW5jdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIENhbGxBY3Rpb25QYXJhbWV0ZXJzID0ge1xuXHRwYXJhbWV0ZXJWYWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyIHwgTXVsdGlWYWx1ZUZpZWxkSXRlbVtdPltdO1xuXHRsYWJlbD86IHN0cmluZztcblx0aW52b2NhdGlvbkdyb3VwaW5nPzogc3RyaW5nO1xuXHRza2lwUGFyYW1ldGVyRGlhbG9nPzogYm9vbGVhbjtcblx0YmluZGluZ1BhcmFtZXRlcnM/OiBCaW5kQ29udGV4dFBhcmFtZXRlcnM7XG5cdGVudGl0eVNldE5hbWU/OiBzdHJpbmc7XG5cdG9uU3VibWl0dGVkOiBGdW5jdGlvbjtcblx0b25SZXNwb25zZTogRnVuY3Rpb247XG5cdHBhcmVudENvbnRyb2w6IFZpZXc7XG5cdGNvbnRyb2w/OiBDb250cm9sO1xuXHRiSXNDcmVhdGVBY3Rpb24/OiBib29sZWFuO1xuXHRpbnRlcm5hbE1vZGVsQ29udGV4dD86IEludGVybmFsTW9kZWxDb250ZXh0IHwgbnVsbDtcblx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwPzogc3RyaW5nO1xuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXI7XG5cdGJPYmplY3RQYWdlPzogYm9vbGVhbjtcblx0aXNDcml0aWNhbEFjdGlvbj86IGJvb2xlYW47XG5cdGNvbnRyb2xJZD86IHN0cmluZztcblx0aWdub3JlRVRhZz86IGJvb2xlYW47XG5cdHZpZXc6IFZpZXcgfCBudWxsO1xufSAmIHtcblx0YkdldEJvdW5kQ29udGV4dD86IGJvb2xlYW47XG5cdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZztcbn0gJiB7XG5cdGJHcm91cGVkPzogYm9vbGVhbjtcblx0YUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0c2VsZWN0ZWRJdGVtcz86IE9EYXRhVjRDb250ZXh0W107XG5cdGFkZGl0aW9uYWxTaWRlRWZmZWN0PzogQWN0aW9uU2lkZUVmZmVjdHNUeXBlO1xuXHRtQmluZGluZ1BhcmFtZXRlcnM/OiBCaW5kQ29udGV4dFBhcmFtZXRlcnM7XG5cdGRpc2FibGVTdHJpY3RIYW5kbGluZz86IGJvb2xlYW47XG5cdGdyb3VwSWQ/OiBzdHJpbmc7XG59O1xuXG50eXBlIEJhc2VUeXBlUGFyYW1ldGVyID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcblxuLyoqXG4gKiBDYWxscyBhIGJvdW5kIGFjdGlvbiBmb3Igb25lIG9yIG11bHRpcGxlIGNvbnRleHRzLlxuICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gdG8gYmUgY2FsbGVkXG4gKiBAcGFyYW0gY29udGV4dHMgRWl0aGVyIG9uZSBjb250ZXh0IG9yIGFuIGFycmF5IHdpdGggY29udGV4dHMgZm9yIHdoaWNoIHRoZSBhY3Rpb24gaXMgdG8gYmUgYmUgY2FsbGVkXG4gKiBAcGFyYW0gb01vZGVsIE9EYXRhIE1vZGVsXG4gKiBAcGFyYW0gb0FwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzXSBPcHRpb25hbCwgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICogQHBhcmFtIFttUGFyYW1ldGVycy5wYXJhbWV0ZXJWYWx1ZXNdIEEgbWFwIG9mIGFjdGlvbiBwYXJhbWV0ZXIgbmFtZXMgYW5kIHByb3ZpZGVkIHZhbHVlc1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnNdIEEgbWFwIG9mIGJpbmRpbmcgcGFyYW1ldGVycyB0aGF0IHdvdWxkIGJlIHBhcnQgb2YgJHNlbGVjdCBhbmQgJGV4cGFuZCBjb21pbmcgZnJvbSBzaWRlIGVmZmVjdHMgZm9yIGJvdW5kIGFjdGlvbnNcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3RdIEFycmF5IG9mIHByb3BlcnR5IHBhdGhzIHRvIGJlIHJlcXVlc3RlZCBpbiBhZGRpdGlvbiB0byBhY3R1YWwgdGFyZ2V0IHByb3BlcnRpZXMgb2YgdGhlIHNpZGUgZWZmZWN0XG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLnNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2ddIElmIHNldCBhbmQgaWYgcGFyYW1ldGVycyBleGlzdCB0aGUgdXNlciByZXRyaWV2ZXMgYSBkaWFsb2cgdG8gZmlsbCBpbiBwYXJhbWV0ZXJzLCBpZiBhY3Rpb25QYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdGhleSBhcmUgc2hvd24gdG8gdGhlIHVzZXJcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMubGFiZWxdIEEgaHVtYW4tcmVhZGFibGUgbGFiZWwgZm9yIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nXSBNb2RlIGhvdyBhY3Rpb25zIGFyZSB0byBiZSBjYWxsZWQ6IENoYW5nZXNldCB0byBwdXQgYWxsIGFjdGlvbiBjYWxscyBpbnRvIG9uZSBjaGFuZ2VzZXQsIElzb2xhdGVkIHRvIHB1dCB0aGVtIGludG8gc2VwYXJhdGUgY2hhbmdlc2V0cywgZGVmYXVsdHMgdG8gSXNvbGF0ZWRcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMub25TdWJtaXR0ZWRdIEZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBvbmNlIHRoZSBhY3Rpb25zIGFyZSBzdWJtaXR0ZWQgd2l0aCBhbiBhcnJheSBvZiBwcm9taXNlc1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5kZWZhdWx0UGFyYW1ldGVyc10gQ2FuIGNvbnRhaW4gZGVmYXVsdCBwYXJhbWV0ZXJzIGZyb20gRkxQIHVzZXIgZGVmYXVsdHNcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMucGFyZW50Q29udHJvbF0gSWYgc3BlY2lmaWVkLCB0aGUgZGlhbG9ncyBhcmUgYWRkZWQgYXMgZGVwZW5kZW50IG9mIHRoZSBwYXJlbnQgY29udHJvbFxuICogQHBhcmFtIFttUGFyYW1ldGVycy5iR2V0Qm91bmRDb250ZXh0XSBJZiBzcGVjaWZpZWQsIHRoZSBhY3Rpb24gcHJvbWlzZSByZXR1cm5zIHRoZSBib3VuZCBjb250ZXh0XG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmlnbm9yZUVUYWddIElmIHNwZWNpZmllZCwgdGhlIGFjdGlvbiBpcyBjYWxsZWQgd2l0aG91dCBFVGFnIGhhbmRsaW5nXG4gKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgcmVzcG9uc2Ugb2JqZWN0cyAoVE9ETzogdG8gYmUgY2hhbmdlZClcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2FsbEJvdW5kQWN0aW9uKFxuXHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRjb250ZXh0czogT0RhdGFWNENvbnRleHRbXSxcblx0b01vZGVsOiBPRGF0YU1vZGVsLFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdG1QYXJhbWV0ZXJzOiBDYWxsQWN0aW9uUGFyYW1ldGVyc1xuKTogUHJvbWlzZTxBY3Rpb25SZXNwb25zZT4ge1xuXHRpZiAoIWNvbnRleHRzIHx8IGNvbnRleHRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdC8vSW4gRnJlZXN0eWxlIGFwcHMgYm91bmQgYWN0aW9ucyBjYW4gaGF2ZSBubyBjb250ZXh0XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiQm91bmQgYWN0aW9ucyBhbHdheXMgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGNvbnRleHRcIik7XG5cdH1cblxuXHRjb25zdCBpc0NhbGxlZFdpdGhBcnJheSA9IEFycmF5LmlzQXJyYXkoY29udGV4dHMpO1xuXHQvLyB0aGlzIG1ldGhvZCBlaXRoZXIgYWNjZXB0cyBzaW5nbGUgY29udGV4dCBvciBhbiBhcnJheSBvZiBjb250ZXh0c1xuXHQvLyBUT0RPOiBSZWZhY3RvciB0byBhbiB1bmFtYmlndW9zIEFQSVxuXHQvLyBpbiBjYXNlIG9mIHNpbmdsZSBjb250ZXh0IHdyYXAgaW50byBhbiBhcnJheSBmb3IgY2FsbGVkIG1ldGhvZHMgKGVzcC4gY2FsbEFjdGlvbilcblx0bVBhcmFtZXRlcnMuYUNvbnRleHRzID0gQXJyYXkuaXNBcnJheShjb250ZXh0cykgPyBjb250ZXh0cyA6IFtjb250ZXh0c107XG5cblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHQvLyBBbmFseXppbmcgbWV0YU1vZGVsUGF0aCBmb3IgYWN0aW9uIG9ubHkgZnJvbSBmaXJzdCBjb250ZXh0IHNlZW1zIHdlaXJkLCBidXQgcHJvYmFibHkgd29ya3MgaW4gYWxsIGV4aXN0aW5nIHNjZW5hcmlvcyAtIGlmIHNldmVyYWwgY29udGV4dHMgYXJlIHBhc3NlZCwgdGhleSBwcm9iYWJseVxuXHRcdC8vIGJlbG9uZyB0byB0aGUgc2FtZSBtZXRhbW9kZWxwYXRoLiBUT0RPOiBDaGVjaywgd2hldGhlciB0aGlzIGNhbiBiZSBpbXByb3ZlZCAvIHNjZW5hcmlvcyB3aXRoIGRpZmZlcmVudCBtZXRhTW9kZWxQYXRocyBtaWdodCBleGlzdFxuXHRcdHNBY3Rpb25QYXRoID0gYCR7b01ldGFNb2RlbC5nZXRNZXRhUGF0aChtUGFyYW1ldGVycy5hQ29udGV4dHNbMF0uZ2V0UGF0aCgpKX0vJHtzQWN0aW9uTmFtZX1gLFxuXHRcdG9Cb3VuZEFjdGlvbiA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c0FjdGlvblBhdGh9L0AkdWk1Lm92ZXJsb2FkLzBgKSE7XG5cdG1QYXJhbWV0ZXJzLmlzQ3JpdGljYWxBY3Rpb24gPSBhd2FpdCBBY3Rpb25SdW50aW1lLmdldElzQWN0aW9uQ3JpdGljYWwob01ldGFNb2RlbCwgc0FjdGlvblBhdGgsIG1QYXJhbWV0ZXJzLmFDb250ZXh0cyk7XG5cblx0Ly8gUHJvbWlzZSByZXR1cm5lZCBieSBjYWxsQWN0aW9uIGN1cnJlbnRseSBpcyByZWplY3RlZCBpbiBjYXNlIG9mIGV4ZWN1dGlvbiBmb3IgbXVsdGlwbGUgY29udGV4dHMgcGFydGx5IGZhaWxpbmcuIFRoaXMgc2hvdWxkIGJlIGNoYW5nZWQgKHNvbWUgZmFpbGluZyBjb250ZXh0cyBkbyBub3QgbWVhblxuXHQvLyB0aGF0IGZ1bmN0aW9uIGRpZCBub3QgZnVsZmlsbCBpdHMgdGFzayksIGJ1dCBhcyB0aGlzIGlzIGEgYmlnZ2VyIHJlZmFjdG9yaW5nLCBmb3IgdGhlIHRpbWUgYmVpbmcgd2UgbmVlZCB0byBkZWFsIHdpdGggdGhhdCBhdCB0aGUgY2FsbGluZyBwbGFjZSAoaS5lLiBoZXJlKVxuXHQvLyA9PiBwcm92aWRlIHRoZSBzYW1lIGhhbmRsZXIgKG1hcHBpbmcgYmFjayBmcm9tIGFycmF5IHRvIHNpbmdsZSByZXN1bHQvZXJyb3IgaWYgbmVlZGVkKSBmb3IgcmVzb2x2ZWQvcmVqZWN0ZWQgY2FzZVxuXHRjb25zdCBleHRyYWN0U2luZ2xlUmVzdWx0ID0gZnVuY3Rpb24gKHJlc3VsdDogUHJvbWlzZVNldHRsZWRSZXN1bHQ8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+W10pOiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0Ly8gc2luZ2xlIGFjdGlvbiBjb3VsZCBiZSByZXNvbHZlZCBvciByZWplY3RlZFxuXHRcdGlmIChyZXN1bHRbMF0uc3RhdHVzID09PSBcImZ1bGZpbGxlZFwiKSB7XG5cdFx0XHRyZXR1cm4gcmVzdWx0WzBdLnZhbHVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBJbiBjYXNlIG9mIGRpYWxvZyBjYW5jZWxsYXRpb24sIG5vIGFycmF5IGlzIHJldHVybmVkID0+IHRocm93IHRoZSByZXN1bHQuXG5cdFx0XHQvLyBJZGVhbGx5LCBkaWZmZXJlbnRpYXRpbmcgc2hvdWxkIG5vdCBiZSBuZWVkZWQgaGVyZSA9PiBUT0RPOiBGaW5kIGJldHRlciBzb2x1dGlvbiB3aGVuIHNlcGFyYXRpbmcgZGlhbG9nIGhhbmRsaW5nIChzaW5nbGUgb2JqZWN0IHdpdGggc2luZ2xlIHJlc3VsdCkgZnJvbSBiYWNrZW5kXG5cdFx0XHQvLyBleGVjdXRpb24gKHBvdGVudGlhbGx5IG11bHRpcGxlIG9iamVjdHMpXG5cdFx0XHR0aHJvdyByZXN1bHRbMF0ucmVhc29uIHx8IHJlc3VsdDtcblx0XHR9XG5cdH07XG5cdGNvbnN0IGNvbnZlcnRlZFR5cGVzID0gY29udmVydFR5cGVzKG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSk7XG5cdGNvbnN0IGNvbnZlcnRlZEFjdGlvbiA9IGNvbnZlcnRlZFR5cGVzLnJlc29sdmVQYXRoPEVkbUFjdGlvbiB8IHVuZGVmaW5lZD4ob0JvdW5kQWN0aW9uLmdldFBhdGgoKSkudGFyZ2V0O1xuXHRpZiAoIWNvbnZlcnRlZEFjdGlvbikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlVua25vd24gYm91bmQgYWN0aW9uXCIpO1xuXHR9XG5cdHRyeSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgY2FsbEFjdGlvbihjb252ZXJ0ZWRBY3Rpb24sIG9Nb2RlbCwgb0JvdW5kQWN0aW9uLCBvQXBwQ29tcG9uZW50LCBtUGFyYW1ldGVycyk7XG5cdFx0aWYgKGlzQ2FsbGVkV2l0aEFycmF5KSB7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZXh0cmFjdFNpbmdsZVJlc3VsdChyZXN1bHQgYXMgUHJvbWlzZVNldHRsZWRSZXN1bHQ8T0RhdGFWNENvbnRleHQ+W10pO1xuXHRcdH1cblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmIChpc0NhbGxlZFdpdGhBcnJheSkge1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGV4dHJhY3RTaW5nbGVSZXN1bHQoZSBhcyBQcm9taXNlU2V0dGxlZFJlc3VsdDxPRGF0YVY0Q29udGV4dD5bXSk7XG5cdFx0fVxuXHR9XG59XG4vKipcbiAqIENhbGxzIGFuIGFjdGlvbiBpbXBvcnQuXG4gKiBAcGFyYW0gYWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIGltcG9ydCB0byBiZSBjYWxsZWRcbiAqIEBwYXJhbSBtb2RlbCBBbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSBWNCBtb2RlbFxuICogQHBhcmFtIGFwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gW3BhcmFtZXRlcnNdIE9wdGlvbmFsLCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiBAcGFyYW0gW3BhcmFtZXRlcnMucGFyYW1ldGVyVmFsdWVzXSBBIG1hcCBvZiBhY3Rpb24gcGFyYW1ldGVyIG5hbWVzIGFuZCBwcm92aWRlZCB2YWx1ZXNcbiAqIEBwYXJhbSBbcGFyYW1ldGVycy5sYWJlbF0gQSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIGFjdGlvblxuICogQHBhcmFtIFtwYXJhbWV0ZXJzLnNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2ddIElmIHNldCBhbmQgaWYgcGFyYW1ldGVycyBleGlzdCB0aGUgdXNlciByZXRyaWV2ZXMgYSBkaWFsb2cgdG8gZmlsbCBpbiBwYXJhbWV0ZXJzLCBpZiBhY3Rpb25QYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdGhleSBhcmUgc2hvd24gdG8gdGhlIHVzZXJcbiAqIEBwYXJhbSBbcGFyYW1ldGVycy5vblN1Ym1pdHRlZF0gRnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIG9uY2UgdGhlIGFjdGlvbnMgYXJlIHN1Ym1pdHRlZCB3aXRoIGFuIGFycmF5IG9mIHByb21pc2VzXG4gKiBAcGFyYW0gW3BhcmFtZXRlcnMuZGVmYXVsdFBhcmFtZXRlcnNdIENhbiBjb250YWluIGRlZmF1bHQgcGFyYW1ldGVycyBmcm9tIEZMUCB1c2VyIGRlZmF1bHRzXG4gKiBAcGFyYW0gW3BhcmFtZXRlcnMuaWdub3JlRVRhZ10gSWYgc3BlY2lmaWVkLCB0aGUgYWN0aW9uIGlzIGNhbGxlZCB3aXRob3V0IEVUYWcgaGFuZGxpbmdcbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiByZXNwb25zZSBvYmplY3RzIChUT0RPOiB0byBiZSBjaGFuZ2VkKVxuICovXG5hc3luYyBmdW5jdGlvbiBjYWxsQWN0aW9uSW1wb3J0KFxuXHRhY3Rpb25OYW1lOiBzdHJpbmcsXG5cdG1vZGVsOiBPRGF0YU1vZGVsLFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0cGFyYW1ldGVyczoge1xuXHRcdHBhcmFtZXRlclZhbHVlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIgfCBNdWx0aVZhbHVlRmllbGRJdGVtW10+W107XG5cdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0c2tpcFBhcmFtZXRlckRpYWxvZz86IGJvb2xlYW47XG5cdFx0YmluZGluZ1BhcmFtZXRlcnM/OiBCaW5kQ29udGV4dFBhcmFtZXRlcnM7XG5cdFx0ZW50aXR5U2V0TmFtZT86IHN0cmluZztcblx0XHRhZGRpdGlvbmFsU2lkZUVmZmVjdD86IEFjdGlvblNpZGVFZmZlY3RzVHlwZTtcblx0XHRvblN1Ym1pdHRlZDogRnVuY3Rpb247XG5cdFx0b25SZXNwb25zZTogRnVuY3Rpb247XG5cdFx0cGFyZW50Q29udHJvbDogVmlldztcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD86IEludGVybmFsTW9kZWxDb250ZXh0IHwgbnVsbDtcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmc7XG5cdFx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyO1xuXHRcdGJPYmplY3RQYWdlPzogYm9vbGVhbjtcblx0XHRzZWxlY3RlZEl0ZW1zPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRpZ25vcmVFVGFnPzogYm9vbGVhbjtcblx0XHR2aWV3OiBWaWV3IHwgbnVsbDtcblx0fSAmIHtcblx0XHRpc0NyaXRpY2FsQWN0aW9uPzogYm9vbGVhbjtcblx0fVxuKTogUHJvbWlzZTxBY3Rpb25SZXNwb25zZT4ge1xuXHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0Y29uc3QgYWN0aW9uUGF0aCA9IGAvJHthY3Rpb25OYW1lfWA7XG5cdGNvbnN0IGNvbnZlcnRlZFR5cGVzID0gY29udmVydFR5cGVzKG1ldGFNb2RlbCk7XG5cdGNvbnN0IGNvbnZlcnRlZEFjdGlvbkltcG9ydCA9IGNvbnZlcnRlZFR5cGVzLnJlc29sdmVQYXRoPEFjdGlvbkltcG9ydCB8IHVuZGVmaW5lZD4oYWN0aW9uUGF0aCkudGFyZ2V0LFxuXHRcdGNvbnZlcnRlZEFjdGlvbiA9IGNvbnZlcnRlZEFjdGlvbkltcG9ydD8uYWN0aW9uO1xuXHRpZiAoIWNvbnZlcnRlZEFjdGlvbikge1xuXHRcdHJldHVybjtcblx0fVxuXHRjb25zdCB1bmJvdW5kQWN0aW9uSW5kZXggPSBjb252ZXJ0ZWRUeXBlcy5hY3Rpb25zXG5cdFx0XHQuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbi5uYW1lID09PSBjb252ZXJ0ZWRBY3Rpb24ubmFtZSlcblx0XHRcdC5maW5kSW5kZXgoKGFjdGlvbikgPT4gIWFjdGlvbi5pc0JvdW5kKSxcblx0XHRhY3Rpb25OYW1lRnJvbU1vZGVsID0gY29udmVydGVkQWN0aW9uSW1wb3J0LmFjdGlvbk5hbWUsXG5cdFx0YWN0aW9uSW1wb3J0ID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAvJHthY3Rpb25OYW1lRnJvbU1vZGVsfS8ke3VuYm91bmRBY3Rpb25JbmRleH1gKTtcblx0cGFyYW1ldGVycy5pc0NyaXRpY2FsQWN0aW9uID0gYXdhaXQgQWN0aW9uUnVudGltZS5nZXRJc0FjdGlvbkNyaXRpY2FsKG1ldGFNb2RlbCwgYCR7YWN0aW9uUGF0aH0vQCR1aTUub3ZlcmxvYWRgKTtcblx0cmV0dXJuIGNhbGxBY3Rpb24oY29udmVydGVkQWN0aW9uSW1wb3J0LmFjdGlvbiwgbW9kZWwsIGFjdGlvbkltcG9ydCwgYXBwQ29tcG9uZW50LCBwYXJhbWV0ZXJzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGNhbGxCb3VuZEZ1bmN0aW9uKHNGdW5jdGlvbk5hbWU6IHN0cmluZywgY29udGV4dDogQ29udGV4dCwgb01vZGVsOiBPRGF0YU1vZGVsKTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dD4ge1xuXHRpZiAoIWNvbnRleHQpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJCb3VuZCBmdW5jdGlvbnMgYWx3YXlzIHJlcXVpcmVzIGEgY29udGV4dFwiKTtcblx0fVxuXHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdHNGdW5jdGlvblBhdGggPSBgJHtvTWV0YU1vZGVsLmdldE1ldGFQYXRoKGNvbnRleHQuZ2V0UGF0aCgpKX0vJHtzRnVuY3Rpb25OYW1lfWAsXG5cdFx0b0JvdW5kRnVuY3Rpb24gPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdW5jdGlvblBhdGgpO1xuXHRyZXR1cm4gX2V4ZWN1dGVGdW5jdGlvbihzRnVuY3Rpb25OYW1lLCBvTW9kZWwsIG9Cb3VuZEZ1bmN0aW9uLCBjb250ZXh0KTtcbn1cblxuLyoqXG4gKiBDYWxscyBhIGZ1bmN0aW9uIGltcG9ydC5cbiAqIEBwYXJhbSBzRnVuY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWRcbiAqIEBwYXJhbSBvTW9kZWwgQW4gaW5zdGFuY2Ugb2YgYW4gT0RhdGEgdjQgbW9kZWxcbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2FsbEZ1bmN0aW9uSW1wb3J0KHNGdW5jdGlvbk5hbWU6IHN0cmluZywgb01vZGVsOiBPRGF0YU1vZGVsKTogUHJvbWlzZTx2b2lkIHwgT0RhdGFWNENvbnRleHQ+IHtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRzRnVuY3Rpb25QYXRoID0gb01vZGVsLmJpbmRDb250ZXh0KGAvJHtzRnVuY3Rpb25OYW1lfWApLmdldFBhdGgoKSxcblx0XHRvRnVuY3Rpb25JbXBvcnQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAvJHtvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdW5jdGlvblBhdGgpIS5nZXRPYmplY3QoXCIkRnVuY3Rpb25cIil9LzBgKTtcblx0cmV0dXJuIF9leGVjdXRlRnVuY3Rpb24oc0Z1bmN0aW9uTmFtZSwgb01vZGVsLCBvRnVuY3Rpb25JbXBvcnQpO1xufVxuYXN5bmMgZnVuY3Rpb24gX2V4ZWN1dGVGdW5jdGlvbihcblx0c0Z1bmN0aW9uTmFtZTogc3RyaW5nLFxuXHRvTW9kZWw6IE9EYXRhTW9kZWwsXG5cdG9GdW5jdGlvbjogQ29udGV4dCB8IG51bGwsXG5cdGNvbnRleHQ/OiBDb250ZXh0XG4pOiBQcm9taXNlPE9EYXRhVjRDb250ZXh0PiB7XG5cdGlmICghb0Z1bmN0aW9uPy5nZXRPYmplY3QoKSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYEZ1bmN0aW9uICR7c0Z1bmN0aW9uTmFtZX0gbm90IGZvdW5kYCkpO1xuXHR9XG5cdGNvbnN0IGZ1bmN0aW9uVG9DYWxsOiBPRGF0YUNvbnRleHRCaW5kaW5nID0gb01vZGVsLmJpbmRDb250ZXh0KGAke2NvbnRleHQ/LmdldFBhdGgoKSA/PyBcIlwifS8ke3NGdW5jdGlvbk5hbWV9KC4uLilgKTtcblx0Y29uc3QgZ3JvdXBJZCA9IGNvbnRleHQgPyBcImZ1bmN0aW9uR3JvdXBcIiA6IFwiZnVuY3Rpb25JbXBvcnRcIjtcblx0Y29uc3QgZXhlY3V0aW9uUHJvbWlzZSA9IGZ1bmN0aW9uVG9DYWxsLmV4ZWN1dGUoZ3JvdXBJZCk7XG5cdG9Nb2RlbC5zdWJtaXRCYXRjaChncm91cElkKTtcblx0YXdhaXQgZXhlY3V0aW9uUHJvbWlzZTtcblx0cmV0dXJuIGZ1bmN0aW9uVG9DYWxsLmdldEJvdW5kQ29udGV4dCgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjaGVja1BhcmFtZXRlclR5cGVBbmRSZXR1cm5Db252ZXJ0ZWRWYWx1ZShcblx0cGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIsXG5cdHZhbHVlPzogQmFzZVR5cGVQYXJhbWV0ZXIgfCBudWxsXG4pOiBQcm9taXNlPEJhc2VUeXBlUGFyYW1ldGVyIHwgdW5kZWZpbmVkIHwgbnVsbD4ge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRjb25zdCBCYXNlVHlwZSA9IChhd2FpdCBpbXBvcnQoXCJzYXAvdWkvbWRjL2VudW1zL0Jhc2VUeXBlXCIpKS5kZWZhdWx0O1xuXHRjb25zdCBUeXBlTWFwID0gKGF3YWl0IGltcG9ydChcInNhcC91aS9tZGMvb2RhdGEvdjQvVHlwZU1hcFwiKSkuZGVmYXVsdDtcblx0Y29uc3QgcGFyYW1ldGVyVHlwZSA9IChcblx0XHRwYXJhbWV0ZXIgYXMge1xuXHRcdFx0bmFtZTogc3RyaW5nO1xuXHRcdFx0dHlwZT86IHN0cmluZztcblx0XHR9XG5cdCkudHlwZVxuXHRcdD8gVHlwZU1hcC5nZXRCYXNlVHlwZShcblx0XHRcdFx0KFxuXHRcdFx0XHRcdHBhcmFtZXRlciBhcyB7XG5cdFx0XHRcdFx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0XHRcdFx0XHR0eXBlOiBzdHJpbmc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpLnR5cGVcblx0XHQgIClcblx0XHQ6IEJhc2VUeXBlLlN0cmluZztcblx0Y29uc3QgdHlwZUluc3RhbmNlID0gVHlwZU1hcC5nZXREYXRhVHlwZUluc3RhbmNlKHBhcmFtZXRlclR5cGUpO1xuXHRyZXR1cm4gdHlwZUluc3RhbmNlLnBhcnNlVmFsdWUodmFsdWUsIFwic3RyaW5nXCIpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjYWxsQWN0aW9uKFxuXHRjb252ZXJ0ZWRBY3Rpb246IEVkbUFjdGlvbixcblx0b01vZGVsOiBPRGF0YU1vZGVsLFxuXHRvQWN0aW9uOiBDb250ZXh0LFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdG1QYXJhbWV0ZXJzOiBDYWxsQWN0aW9uUGFyYW1ldGVyc1xuKTogUHJvbWlzZTxBY3Rpb25SZXNwb25zZT4ge1xuXHRsZXQgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM6IFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzID0ge1xuXHRcdGlzNDEyRXhlY3V0ZWQ6IGZhbHNlLFxuXHRcdHN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzOiBbXSxcblx0XHRzdHJpY3RIYW5kbGluZ1Byb21pc2VzOiBbXSxcblx0XHRzdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlczogW10sXG5cdFx0ZGVsYXlTdWNjZXNzTWVzc2FnZXM6IFtdLFxuXHRcdHByb2Nlc3NlZE1lc3NhZ2VJZHM6IG5ldyBTZXQ8c3RyaW5nPigpXG5cdH07XG5cdGNvbnN0IHNBY3Rpb25OYW1lID0gY29udmVydGVkQWN0aW9uLmlzQm91bmRcblx0XHQ/IGNvbnZlcnRlZEFjdGlvbi5mdWxseVF1YWxpZmllZE5hbWUucmVwbGFjZSgvXFwoLipcXCkkL2csIFwiXCIpIC8vIHJlbW92ZSB0aGUgcGFydCByZWxhdGVkIHRvIHRoZSBvdmVybGF5XG5cdFx0OiBjb252ZXJ0ZWRBY3Rpb24ubmFtZTtcblx0bVBhcmFtZXRlcnMuYkdyb3VwZWQgPSBtUGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXQ7XG5cdHJldHVybiBuZXcgUHJvbWlzZTxBY3Rpb25SZXNwb25zZT4oYXN5bmMgZnVuY3Rpb24gKFxuXHRcdHJlc29sdmU6ICh2YWx1ZTogQWN0aW9uUmVzcG9uc2UpID0+IHZvaWQsXG5cdFx0cmVqZWN0OiAocmVhc29uPzogRXJyb3IgfCBBY3Rpb25SZXNwb25zZSkgPT4gdm9pZFxuXHQpIHtcblx0XHRjb25zdCBzQWN0aW9uTGFiZWwgPSBtUGFyYW1ldGVycy5sYWJlbDtcblx0XHRsZXQgYlNraXBQYXJhbWV0ZXJEaWFsb2cgPSBtUGFyYW1ldGVycy5za2lwUGFyYW1ldGVyRGlhbG9nO1xuXHRcdGNvbnN0IGFDb250ZXh0cyA9IG1QYXJhbWV0ZXJzLmFDb250ZXh0cztcblx0XHRjb25zdCBiSXNDcmVhdGVBY3Rpb24gPSBtUGFyYW1ldGVycy5iSXNDcmVhdGVBY3Rpb247XG5cdFx0Y29uc3QgYklzQ3JpdGljYWxBY3Rpb24gPSBtUGFyYW1ldGVycy5pc0NyaXRpY2FsQWN0aW9uO1xuXHRcdGxldCBvTWV0YU1vZGVsO1xuXHRcdGxldCBzTWVzc2FnZXNQYXRoOiBzdHJpbmc7XG5cdFx0bGV0IGlNZXNzYWdlU2lkZUVmZmVjdDtcblx0XHRsZXQgaXNTYW1lRW50aXR5O1xuXHRcdGxldCBiVmFsdWVzUHJvdmlkZWRGb3JBbGxNYW5kYXRvcnlQYXJhbWV0ZXJzO1xuXHRcdGNvbnN0IGFjdGlvbkRlZmluaXRpb24gPSBvQWN0aW9uLmdldE9iamVjdCgpIGFzIE1ldGFNb2RlbEFjdGlvbjtcblxuXHRcdC8vaW4gY2FzZSBvZiBib3VuZCBhY3Rpb25zLCBpZ25vcmUgdGhlIGZpcnN0IHBhcmFtZXRlciBhbmQgY29uc2lkZXIgdGhlIHJlc3Rcblx0XHRjb25zdCBhY3Rpb25QYXJhbWV0ZXJzID0gY29udmVydGVkQWN0aW9uLmlzQm91bmQgPyBjb252ZXJ0ZWRBY3Rpb24ucGFyYW1ldGVycy5zbGljZSgxKSA6IGNvbnZlcnRlZEFjdGlvbi5wYXJhbWV0ZXJzO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIGFjdGlvbiBoYXMgcGFyYW1ldGVycyBhbmQgd291bGQgbmVlZCBhIHBhcmFtZXRlciBkaWFsb2dcblx0XHQvLyBUaGUgcGFyYW1ldGVyIFJlc3VsdElzQWN0aXZlRW50aXR5IGlzIGFsd2F5cyBoaWRkZW4gaW4gdGhlIGRpYWxvZyEgSGVuY2UgaWZcblx0XHQvLyB0aGlzIGlzIHRoZSBvbmx5IHBhcmFtZXRlciwgdGhpcyBpcyB0cmVhdGVkIGFzIG5vIHBhcmFtZXRlciBoZXJlIGJlY2F1c2UgdGhlXG5cdFx0Ly8gZGlhbG9nIHdvdWxkIGJlIGVtcHR5IVxuXHRcdC8vIEZJWE1FOiBTaG91bGQgb25seSBpZ25vcmUgdGhpcyBpZiB0aGlzIGlzIGEgJ2NyZWF0ZScgYWN0aW9uLCBvdGhlcndpc2UgaXQgaXMganVzdCBzb21lIG5vcm1hbCBwYXJhbWV0ZXIgdGhhdCBoYXBwZW5zIHRvIGhhdmUgdGhpcyBuYW1lXG5cdFx0Y29uc3QgYkFjdGlvbk5lZWRzUGFyYW1ldGVyRGlhbG9nID1cblx0XHRcdGFjdGlvblBhcmFtZXRlcnMubGVuZ3RoID4gMCAmJiAhKGFjdGlvblBhcmFtZXRlcnMubGVuZ3RoID09PSAxICYmIGFjdGlvblBhcmFtZXRlcnNbMF0ubmFtZSA9PT0gXCJSZXN1bHRJc0FjdGl2ZUVudGl0eVwiKTtcblxuXHRcdC8vIFByb3ZpZGVkIHZhbHVlcyBmb3IgdGhlIGFjdGlvbiBwYXJhbWV0ZXJzIGZyb20gaW52b2tlQWN0aW9uIGNhbGxcblx0XHRjb25zdCBhUGFyYW1ldGVyVmFsdWVzID0gbVBhcmFtZXRlcnMucGFyYW1ldGVyVmFsdWVzO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIHN0YXJ0dXAgcGFyYW1ldGVycyBpZiBwcm92aWRlZFxuXHRcdGNvbnN0IG9Db21wb25lbnREYXRhID0gb0FwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCk7XG5cdFx0Y29uc3Qgb1N0YXJ0dXBQYXJhbWV0ZXJzID0gKG9Db21wb25lbnREYXRhICYmIG9Db21wb25lbnREYXRhLnN0YXJ0dXBQYXJhbWV0ZXJzKSB8fCB7fTtcblxuXHRcdC8vIElmIGFsbCBwYXJhbWV0ZXJzIGFyZSBoaWRkZW4gIGFuZCBhbGwgbWFuZGF0b3J5IHBhcmFtZXRlcnMgdmFsdWVzIGFyZSBhdmFpbGFibGUsIHRoZW4gd2Ugc2tpcCB0aGUgZGlhbG9nLlxuXHRcdGJTa2lwUGFyYW1ldGVyRGlhbG9nID1cblx0XHRcdGFjdGlvblBhcmFtZXRlcnMubGVuZ3RoICYmIGFjdGlvblBhcmFtZXRlcnMuZXZlcnkoKHBhcmFtZXRlcikgPT4gcGFyYW1ldGVyLmFubm90YXRpb25zLlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZSlcblx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdDogYlNraXBQYXJhbWV0ZXJEaWFsb2c7XG5cdFx0Ly8gSW4gY2FzZSBhbiBhY3Rpb24gcGFyYW1ldGVyIGlzIG5lZWRlZCwgYW5kIHdlIHNoYWxsIHNraXAgdGhlIGRpYWxvZywgY2hlY2sgaWYgdmFsdWVzIGFyZSBwcm92aWRlZCBmb3IgYWxsIHBhcmFtZXRlcnNcblx0XHRpZiAoYkFjdGlvbk5lZWRzUGFyYW1ldGVyRGlhbG9nICYmIGJTa2lwUGFyYW1ldGVyRGlhbG9nKSB7XG5cdFx0XHRiVmFsdWVzUHJvdmlkZWRGb3JBbGxNYW5kYXRvcnlQYXJhbWV0ZXJzID0gX3ZhbHVlc1Byb3ZpZGVkRm9yQWxsTWFuZGF0b3J5UGFyYW1ldGVycyhcblx0XHRcdFx0ISFiSXNDcmVhdGVBY3Rpb24sXG5cdFx0XHRcdGFjdGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdGFQYXJhbWV0ZXJWYWx1ZXMsXG5cdFx0XHRcdG9TdGFydHVwUGFyYW1ldGVyc1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHQvLyBEZXBlbmRpbmcgb24gdGhlIHByZXZpb3VzbHkgZGV0ZXJtaW5lZCBkYXRhLCBlaXRoZXIgc2V0IGEgZGlhbG9nIG9yIGxlYXZlIGl0IGVtcHR5IHdoaWNoXG5cdFx0Ly8gd2lsbCBsZWFkIHRvIGRpcmVjdCBleGVjdXRpb24gb2YgdGhlIGFjdGlvbiB3aXRob3V0IGEgZGlhbG9nXG5cblx0XHRjb25zdCBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVyczogU2hvd0FjdGlvbkRpYWxvZ1BhcmFtZXRlcnMgPSB7XG5cdFx0XHRkZWZhdWx0UGFyYW1ldGVyc1ZhbHVlczoge30sXG5cdFx0XHRhcHBDb21wb25lbnQ6IG9BcHBDb21wb25lbnQsXG5cdFx0XHRmbk9uU3VibWl0dGVkOiBtUGFyYW1ldGVycy5vblN1Ym1pdHRlZCxcblx0XHRcdGZuT25SZXNwb25zZTogbVBhcmFtZXRlcnMub25SZXNwb25zZSxcblx0XHRcdGFjdGlvbk5hbWU6IHNBY3Rpb25OYW1lLFxuXHRcdFx0YUNvbnRleHRzOiBbXSxcblx0XHRcdG1vZGVsOiBvTW9kZWwsXG5cdFx0XHRhQWN0aW9uUGFyYW1ldGVyczogYWN0aW9uUGFyYW1ldGVycyxcblx0XHRcdGJHZXRCb3VuZENvbnRleHQ6IG1QYXJhbWV0ZXJzLmJHZXRCb3VuZENvbnRleHQsXG5cdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbixcblx0XHRcdGxhYmVsOiBtUGFyYW1ldGVycy5sYWJlbCxcblx0XHRcdHNlbGVjdGVkSXRlbXM6IG1QYXJhbWV0ZXJzLnNlbGVjdGVkSXRlbXMhXG5cdFx0fTtcblx0XHRpZiAoY29udmVydGVkQWN0aW9uLmlzQm91bmQpIHtcblx0XHRcdG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cblx0XHRcdGNvbnN0IGNvbnZlcnRlZE1ldGFEYXRhID0gY29udmVydFR5cGVzKG9NZXRhTW9kZWwpO1xuXHRcdFx0Y29uc3QgZmlsdGVyZWRFbnRpdHlTZXQgPSBjb252ZXJ0ZWRNZXRhRGF0YS5lbnRpdHlTZXRzLmZpbHRlcihcblx0XHRcdFx0KHNpbmdsZUVudGl0eVNldCkgPT4gc2luZ2xlRW50aXR5U2V0LmVudGl0eVR5cGUgPT09IGNvbnZlcnRlZEFjdGlvbi5yZXR1cm5FbnRpdHlUeXBlXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGZpbHRlcmVkRW50aXR5U2V0Lmxlbmd0aCA+IDAgPyBmaWx0ZXJlZEVudGl0eVNldFswXSA6IHVuZGVmaW5lZDtcblxuXHRcdFx0aXNTYW1lRW50aXR5ID1cblx0XHRcdFx0IWNvbnZlcnRlZEFjdGlvbi5yZXR1cm5Db2xsZWN0aW9uICYmXG5cdFx0XHRcdGNvbnZlcnRlZEFjdGlvbi5yZXR1cm5FbnRpdHlUeXBlICYmXG5cdFx0XHRcdGNvbnZlcnRlZEFjdGlvbi5zb3VyY2VFbnRpdHlUeXBlID09PSBjb252ZXJ0ZWRBY3Rpb24ucmV0dXJuRW50aXR5VHlwZTtcblxuXHRcdFx0aWYgKGlzU2FtZUVudGl0eSAmJiBNb2RlbEhlbHBlci5pc0RyYWZ0Um9vdChjdXJyZW50RW50aXR5U2V0KSkge1xuXHRcdFx0XHRtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMgPz89IHt9O1xuXHRcdFx0XHRtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdCA9IG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0XG5cdFx0XHRcdFx0PyBgJHttUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdH0sSGFzQWN0aXZlRW50aXR5YFxuXHRcdFx0XHRcdDogXCJIYXNBY3RpdmVFbnRpdHlcIjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0Py5wYXRoRXhwcmVzc2lvbnMpIHtcblx0XHRcdFx0c01lc3NhZ2VzUGF0aCA9IE1vZGVsSGVscGVyLmdldE1lc3NhZ2VzUGF0aChvTWV0YU1vZGVsLCBhQ29udGV4dHMhWzBdLmdldFBhdGgoKSkhO1xuXG5cdFx0XHRcdGlmIChzTWVzc2FnZXNQYXRoKSB7XG5cdFx0XHRcdFx0Ly8gJyonIGVmZmVjdGl2ZWx5IGluY2x1ZGVzIHRoZSBtZXNzYWdlcyBwYXRoIGlmIHRoZXJlIGlzIG9uZVxuXHRcdFx0XHRcdGlNZXNzYWdlU2lkZUVmZmVjdCA9IG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucy5maW5kSW5kZXgoXG5cdFx0XHRcdFx0XHQoZXhwKSA9PiB0eXBlb2YgZXhwID09PSBcInN0cmluZ1wiICYmIChleHAgPT09IHNNZXNzYWdlc1BhdGggfHwgZXhwID09PSBcIipcIilcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0Ly8gQWRkIFNBUF9NZXNzYWdlcyBieSBkZWZhdWx0IGlmIG5vdCBhbm5vdGF0ZWQgYnkgc2lkZSBlZmZlY3RzLCBhY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgY29sbGVjdGlvbiBhbmRcblx0XHRcdFx0XHQvLyB0aGUgcmV0dXJuIHR5cGUgaXMgdGhlIHNhbWUgYXMgdGhlIGJvdW5kIHR5cGVcblx0XHRcdFx0XHRpZiAoaU1lc3NhZ2VTaWRlRWZmZWN0ID4gLTEgfHwgaXNTYW1lRW50aXR5KSB7XG5cdFx0XHRcdFx0XHQvLyB0aGUgbWVzc2FnZSBwYXRoIGlzIGFubm90YXRlZCBhcyBzaWRlIGVmZmVjdC4gQXMgdGhlcmUncyBubyBiaW5kaW5nIGZvciBpdCBhbmQgdGhlIG1vZGVsIGRvZXMgY3VycmVudGx5IG5vdCBhbGxvd1xuXHRcdFx0XHRcdFx0Ly8gdG8gYWRkIGl0IGF0IGEgbGF0ZXIgcG9pbnQgb2YgdGltZSB3ZSBoYXZlIHRvIHRha2UgY2FyZSBpdCdzIHBhcnQgb2YgdGhlICRzZWxlY3Qgb2YgdGhlIFBPU1QsIHRoZXJlZm9yZSBtb3ZpbmcgaXQuXG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMgPz89IHt9O1xuXG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlZEFjdGlvbi5yZXR1cm5FbnRpdHlUeXBlPy5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5uYW1lID09PSBzTWVzc2FnZXNQYXRoKSAmJlxuXHRcdFx0XHRcdFx0XHQhKG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0ID8/IFwiXCIpLnNwbGl0KFwiLFwiKS5pbmNsdWRlcyhzTWVzc2FnZXNQYXRoKVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0ID0gbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3Rcblx0XHRcdFx0XHRcdFx0XHQ/IGAke21QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0fSwke3NNZXNzYWdlc1BhdGh9YFxuXHRcdFx0XHRcdFx0XHRcdDogc01lc3NhZ2VzUGF0aDtcblx0XHRcdFx0XHRcdFx0Ly8gQWRkIHNpZGUgZWZmZWN0cyBhdCBlbnRpdHkgbGV2ZWwgYmVjYXVzZSAkc2VsZWN0IHN0b3BzIHRoZXNlIGJlaW5nIHJldHVybmVkIGJ5IHRoZSBhY3Rpb25cblx0XHRcdFx0XHRcdFx0Ly8gT25seSBpZiBubyBvdGhlciBzaWRlIGVmZmVjdHMgd2VyZSBhZGRlZCBmb3IgTWVzc2FnZXNcblx0XHRcdFx0XHRcdFx0aWYgKGlNZXNzYWdlU2lkZUVmZmVjdCA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMucHVzaChcIipcIik7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAobVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnM/Lmxlbmd0aCA9PT0gMCAmJiBpTWVzc2FnZVNpZGVFZmZlY3QgPiAtMSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIG5vIHRyaWdnZXIgYWN0aW9uIHRoZXJlZm9yZSBubyBuZWVkIHRvIHJlcXVlc3QgbWVzc2FnZXMgYWdhaW5cblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMuc3BsaWNlKGlNZXNzYWdlU2lkZUVmZmVjdCwgMSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUNvbnRleHRzID0gYUNvbnRleHRzID8/IFtdO1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzO1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QgPSBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdDtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmJHcm91cGVkID0gbVBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nID09PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0O1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQgPSBtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IG1QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcDtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmlzQ3JlYXRlQWN0aW9uID0gYklzQ3JlYXRlQWN0aW9uO1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYk9iamVjdFBhZ2UgPSBtUGFyYW1ldGVycy5iT2JqZWN0UGFnZTtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmRpc2FibGVTdHJpY3RIYW5kbGluZyA9IG1QYXJhbWV0ZXJzLmRpc2FibGVTdHJpY3RIYW5kbGluZztcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmdyb3VwSWQgPSBtUGFyYW1ldGVycy5ncm91cElkO1xuXHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmNvbnRyb2xJZCkge1xuXHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5jb250cm9sID0gbVBhcmFtZXRlcnMucGFyZW50Q29udHJvbC5ieUlkKG1QYXJhbWV0ZXJzLmNvbnRyb2xJZCkgYXMgQ29udHJvbDtcblx0XHRcdFx0bVBhcmFtZXRlcnMuY29udHJvbCA9IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmNvbnRyb2w7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5jb250cm9sID0gbVBhcmFtZXRlcnMucGFyZW50Q29udHJvbDtcblx0XHRcdFx0bVBhcmFtZXRlcnMuY29udHJvbCA9IG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2w7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ID0gbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3Q7XG5cdFx0aWYgKGJJc0NyZWF0ZUFjdGlvbikge1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYklzQ3JlYXRlQWN0aW9uID0gYklzQ3JlYXRlQWN0aW9uO1xuXHRcdH1cblx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pc1N0YXRpYyA9IGNvbnZlcnRlZEFjdGlvbi5pc0JvdW5kICYmICEhY29udmVydGVkQWN0aW9uLnBhcmFtZXRlcnNbMF0/LmlzQ29sbGVjdGlvbjtcblxuXHRcdGxldCBvcGVyYXRpb25SZXN1bHQ7XG5cdFx0bGV0IGV4ZWN1dGlvbldpdERpYWxvZyA9IGZhbHNlO1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAoYkFjdGlvbk5lZWRzUGFyYW1ldGVyRGlhbG9nKSB7XG5cdFx0XHRcdGlmICghKGJTa2lwUGFyYW1ldGVyRGlhbG9nICYmIGJWYWx1ZXNQcm92aWRlZEZvckFsbE1hbmRhdG9yeVBhcmFtZXRlcnMpKSB7XG5cdFx0XHRcdFx0ZXhlY3V0aW9uV2l0RGlhbG9nID0gdHJ1ZTtcblx0XHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJEaWFsb2cgPSBnZXRDb3JlVUlGYWN0b3J5KCkubmV3UGFyYW1ldGVyRGlhbG9nKFxuXHRcdFx0XHRcdFx0Y29udmVydGVkQWN0aW9uLFxuXHRcdFx0XHRcdFx0b0FjdGlvbiBhcyBPRGF0YVY0Q29udGV4dCxcblx0XHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0YVBhcmFtZXRlclZhbHVlcyxcblx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmVudGl0eVNldE5hbWUsXG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycy52aWV3IGFzIEZFVmlldyB8IG51bGwsXG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5tZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRhY3Rpb25Ub0JlRXhlY3V0ZWQ6IF9leGVjdXRlQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRiZWZvcmVTaG93aW5nTWVzc2FnZTogYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFja1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmlnbm9yZUVUYWdcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGF3YWl0IHBhcmFtZXRlckRpYWxvZy5jcmVhdGVEaWFsb2coKTtcblx0XHRcdFx0XHRvcGVyYXRpb25SZXN1bHQgPSBhd2FpdCBwYXJhbWV0ZXJEaWFsb2cub3BlbkRpYWxvZyhtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChiSXNDcml0aWNhbEFjdGlvbikge1xuXHRcdFx0XHRleGVjdXRpb25XaXREaWFsb2cgPSB0cnVlO1xuXHRcdFx0XHRvcGVyYXRpb25SZXN1bHQgPSBhd2FpdCBjb25maXJtQ3JpdGljYWxBY3Rpb24oXG5cdFx0XHRcdFx0c0FjdGlvbk5hbWUsXG5cdFx0XHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRzQWN0aW9uTGFiZWwsXG5cdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0XHRhUGFyYW1ldGVyVmFsdWVzLFxuXHRcdFx0XHRcdG9BY3Rpb24sXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMucGFyZW50Q29udHJvbCxcblx0XHRcdFx0XHRtUGFyYW1ldGVycy5lbnRpdHlTZXROYW1lLFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLnZpZXcsXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMuaWdub3JlRVRhZ1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHJlamVjdChlIGFzIEVycm9yIHwgQWN0aW9uUmVzcG9uc2UpO1xuXHRcdH1cblx0XHRpZiAoZXhlY3V0aW9uV2l0RGlhbG9nKSB7XG5cdFx0XHRhZnRlckFjdGlvblJlc29sdXRpb24obVBhcmFtZXRlcnMsIG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLCBhY3Rpb25EZWZpbml0aW9uKTtcblx0XHRcdHJlc29sdmUob3BlcmF0aW9uUmVzdWx0KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBUYWtlIG92ZXIgYWxsIHByb3ZpZGVkIHBhcmFtZXRlciB2YWx1ZXMgYW5kIGNhbGwgdGhlIGFjdGlvbi5cblx0XHQvLyBUaGlzIHNoYWxsIG9ubHkgaGFwcGVuIGlmIHZhbHVlcyBhcmUgcHJvdmlkZWQgZm9yIGFsbCB0aGUgcGFyYW1ldGVycywgb3RoZXJ3aXNlIHRoZSBwYXJhbWV0ZXIgZGlhbG9nIHNoYWxsIGJlIHNob3duIHdoaWNoIGlzIGVuc3VyZWQgZWFybGllclxuXG5cdFx0aWYgKGFQYXJhbWV0ZXJWYWx1ZXMpIHtcblx0XHRcdGZvciAoY29uc3QgaSBpbiBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5kZWZhdWx0UGFyYW1ldGVyc1ZhbHVlc1ttQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVyc1tpXS5uYW1lXSA9XG5cdFx0XHRcdFx0YVBhcmFtZXRlclZhbHVlcz8uZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5uYW1lID09PSBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVyc1tpXS5uYW1lKT8udmFsdWU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxldCBhY3Rpb25QYXJhbWV0ZXIsIHBhcmFtZXRlclZhbHVlTm90Q29udmVydGVkO1xuXHRcdFx0Zm9yIChjb25zdCBpIGluIG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdGFjdGlvblBhcmFtZXRlciA9IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFBY3Rpb25QYXJhbWV0ZXJzW2ldO1xuXHRcdFx0XHRwYXJhbWV0ZXJWYWx1ZU5vdENvbnZlcnRlZCA9XG5cdFx0XHRcdFx0KG9TdGFydHVwUGFyYW1ldGVyc1thY3Rpb25QYXJhbWV0ZXIubmFtZV0/LlswXSBhcyBCYXNlVHlwZVBhcmFtZXRlcikgfHxcblx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXIuYW5ub3RhdGlvbnM/LlVJPy5QYXJhbWV0ZXJEZWZhdWx0VmFsdWU/LnZhbHVlT2YoKTtcblx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuZGVmYXVsdFBhcmFtZXRlcnNWYWx1ZXNbYWN0aW9uUGFyYW1ldGVyLm5hbWVdID1cblx0XHRcdFx0XHRwYXJhbWV0ZXJWYWx1ZU5vdENvbnZlcnRlZCA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHQ/IHBhcmFtZXRlclZhbHVlTm90Q29udmVydGVkXG5cdFx0XHRcdFx0XHQ6IGF3YWl0IGNoZWNrUGFyYW1ldGVyVHlwZUFuZFJldHVybkNvbnZlcnRlZFZhbHVlKGFjdGlvblBhcmFtZXRlciwgcGFyYW1ldGVyVmFsdWVOb3RDb252ZXJ0ZWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRsZXQgb09wZXJhdGlvblJlc3VsdDogdW5kZWZpbmVkIHwgT0RhdGFWNENvbnRleHQgfCBQcm9taXNlU2V0dGxlZFJlc3VsdDxPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZD5bXTtcblx0XHR0cnkge1xuXHRcdFx0b09wZXJhdGlvblJlc3VsdCA9IGF3YWl0IF9leGVjdXRlQWN0aW9uKFxuXHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0bVBhcmFtZXRlcnMucGFyZW50Q29udHJvbCxcblx0XHRcdFx0bVBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRcdFx0XHRtUGFyYW1ldGVycy5pZ25vcmVFVGFnXG5cdFx0XHQpO1xuXG5cdFx0XHRjb25zdCBtZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmXG5cdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmlzNDEyRXhlY3V0ZWQgJiZcblx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMubGVuZ3RoXG5cdFx0XHQpIHtcblx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuZGVsYXlTdWNjZXNzTWVzc2FnZXMgPSBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5kZWxheVN1Y2Nlc3NNZXNzYWdlcy5jb25jYXQobWVzc2FnZXMpO1xuXHRcdFx0fVxuXHRcdFx0YWZ0ZXJBY3Rpb25SZXNvbHV0aW9uKG1QYXJhbWV0ZXJzLCBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycywgYWN0aW9uRGVmaW5pdGlvbik7XG5cdFx0XHRyZXNvbHZlKG9PcGVyYXRpb25SZXN1bHQpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmVqZWN0KG9PcGVyYXRpb25SZXN1bHQgYXMgRXJyb3IgfCBBY3Rpb25SZXNwb25zZSk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdGlmIChcblx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiZcblx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuaXM0MTJFeGVjdXRlZCAmJlxuXHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscy5sZW5ndGggJiZcblx0XHRcdFx0bVBhcmFtZXRlcnMuYUNvbnRleHRzIS5sZW5ndGggPiAxXG5cdFx0XHQpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCBzdHJpY3RIYW5kbGluZ0ZhaWxzID0gc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHM7XG5cdFx0XHRcdFx0Y29uc3QgYUZhaWxlZENvbnRleHRzID0gW10gYXMgT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ0ZhaWxzLmZvckVhY2goZnVuY3Rpb24gKGZhaWw6IHsgb0FjdGlvbjogT0RhdGFDb250ZXh0QmluZGluZzsgZ3JvdXBJZDogc3RyaW5nIH0pOiB2b2lkIHtcblx0XHRcdFx0XHRcdGFGYWlsZWRDb250ZXh0cy5wdXNoKGZhaWwub0FjdGlvbi5nZXRDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFDb250ZXh0cyA9IGFGYWlsZWRDb250ZXh0cztcblx0XHRcdFx0XHRjb25zdCBvRmFpbGVkT3BlcmF0aW9uUmVzdWx0ID0gYXdhaXQgX2V4ZWN1dGVBY3Rpb24oXG5cdFx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sLFxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmlnbm9yZUVUYWdcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzID0gW107XG5cdFx0XHRcdFx0TWVzc2FnaW5nLmFkZE1lc3NhZ2VzKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmRlbGF5U3VjY2Vzc01lc3NhZ2VzKTtcblx0XHRcdFx0XHRhZnRlckFjdGlvblJlc29sdXRpb24obVBhcmFtZXRlcnMsIG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLCBhY3Rpb25EZWZpbml0aW9uKTtcblx0XHRcdFx0XHRyZXNvbHZlKG9GYWlsZWRPcGVyYXRpb25SZXN1bHQpO1xuXHRcdFx0XHR9IGNhdGNoIChvRmFpbGVkT3BlcmF0aW9uUmVzdWx0KSB7XG5cdFx0XHRcdFx0cmVqZWN0KFxuXHRcdFx0XHRcdFx0b0ZhaWxlZE9wZXJhdGlvblJlc3VsdCBhcyBFcnJvciB8IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkIHwgUHJvbWlzZVNldHRsZWRSZXN1bHQ8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+W11cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRsZXQgc2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQgPSBmYWxzZTtcblx0XHRcdGlmIChcblx0XHRcdFx0KG1QYXJhbWV0ZXJzLmJHcm91cGVkICYmIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nUHJvbWlzZXMubGVuZ3RoKSB8fFxuXHRcdFx0XHQobVBhcmFtZXRlcnMuYkdyb3VwZWQgJiYgbWVzc2FnZUhhbmRsaW5nLmhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzKCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0bGV0IGlzQWN0aW9uU3VjY2Vzc2Z1bCA9IGZhbHNlO1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkob09wZXJhdGlvblJlc3VsdCkpIHtcblx0XHRcdFx0aXNBY3Rpb25TdWNjZXNzZnVsID0gb09wZXJhdGlvblJlc3VsdD8uZXZlcnkoKHJlcykgPT4gcmVzLnN0YXR1cyA9PT0gXCJmdWxmaWxsZWRcIik7XG5cdFx0XHR9XG5cdFx0XHRtUGFyYW1ldGVycz8ubWVzc2FnZUhhbmRsZXJcblx0XHRcdFx0Py5zaG93TWVzc2FnZURpYWxvZyh7XG5cdFx0XHRcdFx0Y29udHJvbDogbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnM/LmNvbnRyb2wsXG5cdFx0XHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZTogZnVuY3Rpb24gKGFNZXNzYWdlczogTWVzc2FnZVtdLCBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogU2hvd01lc3NhZ2VQYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayhcblx0XHRcdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdGFDb250ZXh0cyEsXG5cdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0YU1lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnNJbixcblx0XHRcdFx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQsXG5cdFx0XHRcdFx0XHRcdGlzQWN0aW9uU3VjY2Vzc2Z1bFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGFTZWxlY3RlZENvbnRleHRzOiBtUGFyYW1ldGVycy5hQ29udGV4dHMsXG5cdFx0XHRcdFx0c0FjdGlvbk5hbWU6IHNBY3Rpb25MYWJlbFxuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXIuY2xlYXJTdHJpY3RXYXJuaW5nTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pO1xuXHRcdFx0aWYgKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzKSB7XG5cdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzID0ge1xuXHRcdFx0XHRcdGlzNDEyRXhlY3V0ZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzOiBbXSxcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1Byb21pc2VzOiBbXSxcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlczogW10sXG5cdFx0XHRcdFx0ZGVsYXlTdWNjZXNzTWVzc2FnZXM6IFtdLFxuXHRcdFx0XHRcdHByb2Nlc3NlZE1lc3NhZ2VJZHM6IG5ldyBTZXQoKVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbmZpcm1Dcml0aWNhbEFjdGlvbihcblx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRzQWN0aW9uTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bVBhcmFtZXRlcnM6IFNob3dBY3Rpb25EaWFsb2dQYXJhbWV0ZXJzLFxuXHRhQWN0aW9uUGFyYW1ldGVyczogRWRtQWN0aW9uUGFyYW1ldGVyW10sXG5cdGFQYXJhbWV0ZXJWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gfCB1bmRlZmluZWQsXG5cdG9BY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRvUGFyZW50Q29udHJvbDogVmlldyxcblx0ZW50aXR5U2V0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzOiBTdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0dmlldzogVmlldyB8IG51bGwsXG5cdGlnbm9yZUVUYWc/OiBib29sZWFuXG4pOiBQcm9taXNlPEFjdGlvblJlc3BvbnNlPiB7XG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0bGV0IGJvdW5kQWN0aW9uTmFtZSA9IHNBY3Rpb25OYW1lO1xuXHRcdGJvdW5kQWN0aW9uTmFtZSA9IGJvdW5kQWN0aW9uTmFtZS5pbmNsdWRlcyhcIi5cIilcblx0XHRcdD8gYm91bmRBY3Rpb25OYW1lLnNwbGl0KFwiLlwiKVtib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpLmxlbmd0aCAtIDFdXG5cdFx0XHQ6IGJvdW5kQWN0aW9uTmFtZTtcblx0XHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGJvdW5kQWN0aW9uTmFtZSAmJiBlbnRpdHlTZXROYW1lID8gYCR7ZW50aXR5U2V0TmFtZX18JHtib3VuZEFjdGlvbk5hbWV9YCA6IFwiXCI7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwob1BhcmVudENvbnRyb2wpO1xuXHRcdGNvbnN0IHNDb25maXJtYXRpb25UZXh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19PUEVSQVRJT05TX0FDVElPTl9DT05GSVJNX01FU1NBR0VcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSk7XG5cblx0XHRNZXNzYWdlQm94LmNvbmZpcm0oc0NvbmZpcm1hdGlvblRleHQsIHtcblx0XHRcdG9uQ2xvc2U6IGFzeW5jIGZ1bmN0aW9uIChzQWN0aW9uOiBzdHJpbmcpIHtcblx0XHRcdFx0aWYgKHNBY3Rpb24gPT09IEFjdGlvbi5PSykge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvT3BlcmF0aW9uID0gYXdhaXQgX2V4ZWN1dGVBY3Rpb24oXG5cdFx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRvUGFyZW50Q29udHJvbCxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRcdFx0XHRcdFx0XHRpZ25vcmVFVGFnXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShvT3BlcmF0aW9uKTtcblx0XHRcdFx0XHR9IGNhdGNoIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKCk7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChvRXJyb3IpO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRyZWplY3Qob0Vycm9yKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShDb25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gYWZ0ZXJBY3Rpb25SZXNvbHV0aW9uKFxuXHRtUGFyYW1ldGVyczogQ2FsbEFjdGlvblBhcmFtZXRlcnMsXG5cdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzOiBTaG93QWN0aW9uRGlhbG9nUGFyYW1ldGVycyxcblx0YWN0aW9uRGVmaW5pdGlvbjogTWV0YU1vZGVsQWN0aW9uXG4pOiB2b2lkIHtcblx0aWYgKFxuXHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ICYmXG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwICYmXG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUNvbnRleHRzICYmXG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUNvbnRleHRzLmxlbmd0aCAmJlxuXHRcdGFjdGlvbkRlZmluaXRpb24uJElzQm91bmRcblx0KSB7XG5cdFx0bGV0IHNlbGVjdGVkQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10gPSBbXTtcblx0XHQvL2NoZWNrIGZvciBza2lwcGluZyBzdGF0aWMgYWN0aW9uc1xuXHRcdGNvbnN0IGlzU3RhdGljID0gbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaXNTdGF0aWM7XG5cdFx0aWYgKCFpc1N0YXRpYykge1xuXHRcdFx0c2VsZWN0ZWRDb250ZXh0cyA9IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKSB8fCBbXTtcblx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChcblx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdEpTT04ucGFyc2UobUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAobUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuY29udHJvbCkge1xuXHRcdFx0Y29uc3QgY29udHJvbCA9IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmNvbnRyb2w7XG5cdFx0XHRpZiAoY29udHJvbC5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRzZWxlY3RlZENvbnRleHRzID0gY29udHJvbC5nZXRTZWxlY3RlZENvbnRleHRzKCkgYXMgT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KFxuXHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdEpTT04ucGFyc2UobUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdFx0XHRzZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0XHRcdFwidGFibGVcIlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvL3VwZGF0ZSBkZWxldGUgYnV0dG9uXG5cdFx0RGVsZXRlSGVscGVyLnVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzKG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LCBzZWxlY3RlZENvbnRleHRzKTtcblx0fVxufVxuXG4vKipcbiAqIEZpbHRlcnMgYW4gYXJyYXkgb2YgbWVzc2FnZXMgYmFzZWQgb24gdmFyaW91cyBjb25kaXRpb25zIGFuZCByZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBmaWx0ZXJlZCBtZXNzYWdlcyBhbmQgb3RoZXIgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBtZXNzYWdlcyBUaGUgbWVzc2FnZXMgdG8gZmlsdGVyLlxuICogQHBhcmFtIGVycm9yVGFyZ2V0c0luQVBEIEluZGljYXRlcyB3aGV0aGVyIGVycm9yIHRhcmdldHMgYXJlIGluIEFQRC5cbiAqIEBwYXJhbSBjb250ZXh0cyBBbiBhcnJheSBvZiBjb250ZXh0cy5cbiAqIEBwYXJhbSB1bmJvdW5kTWVzc2FnZXMgQW4gYXJyYXkgb2YgdW5ib3VuZCBtZXNzYWdlcy5cbiAqIEBwYXJhbSBjb250cm9sIEEgY29udHJvbCBvYmplY3QuXG4gKiBAcGFyYW0gaXNBUERPUGVuIEluZGljYXRlcyB3aGV0aGVyIEFQRCBpcyBvcGVuLlxuICogQHBhcmFtIHNob3dNZXNzYWdlRGlhbG9nIEluZGljYXRlcyB3aGV0aGVyIHRvIHNob3cgdGhlIG1lc3NhZ2UgZGlhbG9nLlxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgcmVzdWx0IGNvbnRhaW5zIGEgYm91bmQgdHJhbnNpdGlvbiwgYW4gYXJyYXkgb2YgbWVzc2FnZXMgdG8gc2hvdywgYW5kIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gc2hvdyB0aGUgbWVzc2FnZSBpbiBhIGRpYWxvZy5cbiAqL1xuZnVuY3Rpb24gZmlsdGVyQVBEYW5kQ29udGV4dE1lc3NhZ2VzKFxuXHRtZXNzYWdlczogTWVzc2FnZVtdLFxuXHRlcnJvclRhcmdldHNJbkFQRD86IGJvb2xlYW4sXG5cdGNvbnRleHRzPzogQ29udGV4dFtdLFxuXHR1bmJvdW5kTWVzc2FnZXM/OiBNZXNzYWdlW10sXG5cdGNvbnRyb2w/OiBDb250cm9sLFxuXHRpc0FQRE9QZW4/OiBib29sZWFuLFxuXHRzaG93TWVzc2FnZURpYWxvZz86IGJvb2xlYW5cbik6IHsgY29udGFpbnNCb3VuZFRyYW5zaXN0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkOyBtZXNzYWdlc1RvU2hvdzogTWVzc2FnZVtdOyBzaG93TWVzc2FnZUluRGlhbG9nPzogYm9vbGVhbiB9IHtcblx0aWYgKGlzQVBET1BlbiAmJiBlcnJvclRhcmdldHNJbkFQRCkge1xuXHRcdC8qIFdoZW4gQVBEIGlzIG9wZW4sIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBtZXNzYWdlcyB3aGljaCBhcmUgcmVsYXRlZCB0byB0aGUgb2JqZWN0cGFnZSBjb250ZXh0ICovXG5cdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZUNvbnRleHRNZXNzYWdlc2Zyb21Nb2RlbChtZXNzYWdlcywgY29udGV4dHMpO1xuXHR9XG5cblx0Ly8gRmlsdGVyIG91dCBtZXNzYWdlcyB3aGljaCBhcmUgbm90IHJlbGF0ZWQgdG8gdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nIGluIHRoZSBlZGl0IG1vZGUgYW5kIGRpc3BsYXkgbW9kZVxuXHRsZXQgY29udGFpbnNCb3VuZFRyYW5zaXN0aW9uO1xuXHRpZiAoIWNvbnRyb2w/LmdldE1vZGVsKFwidWlcIikhLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikpIHtcblx0XHRpZiAoaXNBUERPUGVuICYmIGVycm9yVGFyZ2V0c0luQVBEKSB7XG5cdFx0XHRpZiAodW5ib3VuZE1lc3NhZ2VzPy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Y29udGFpbnNCb3VuZFRyYW5zaXN0aW9uID0gZmFsc2U7XG5cdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRtZXNzYWdlcyA9IG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtZXRlckRpYWxvZyhtZXNzYWdlcyk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmICh1bmJvdW5kTWVzc2FnZXM/Lmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0Y29udGFpbnNCb3VuZFRyYW5zaXN0aW9uID0gZmFsc2U7XG5cdFx0fVxuXHRcdG1lc3NhZ2VzID0gbWVzc2FnZUhhbmRsaW5nLnJlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW1ldGVyRGlhbG9nKG1lc3NhZ2VzKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdG1lc3NhZ2VzVG9TaG93OiBtZXNzYWdlcyxcblx0XHRjb250YWluc0JvdW5kVHJhbnNpc3Rpb246IGNvbnRhaW5zQm91bmRUcmFuc2lzdGlvbixcblx0XHRzaG93TWVzc2FnZUluRGlhbG9nOiBzaG93TWVzc2FnZURpYWxvZ1xuXHR9O1xufVxuXG5mdW5jdGlvbiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrKFxuXHRtUGFyYW1ldGVyczogU2hvd0FjdGlvbkRpYWxvZ1BhcmFtZXRlcnMsXG5cdGFDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSxcblx0b0RpYWxvZzogRGlhbG9nIHwgdW5kZWZpbmVkLFxuXHRtZXNzYWdlczogTWVzc2FnZVtdLFxuXHRzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogU2hvd01lc3NhZ2VQYXJhbWV0ZXJzLFxuXHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldDogYm9vbGVhbixcblx0aXNBY3Rpb25TdWNjZXNzZnVsPzogYm9vbGVhblxuKTogU2hvd01lc3NhZ2VQYXJhbWV0ZXJzIHtcblx0bGV0IHNob3dNZXNzYWdlQm94ID0gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4uc2hvd01lc3NhZ2VCb3gsXG5cdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbi5zaG93TWVzc2FnZURpYWxvZztcblx0Y29uc3Qgb0NvbnRyb2wgPSBtUGFyYW1ldGVycy5jb250cm9sO1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRjb25zdCB1bmJvdW5kTWVzc2FnZXMgPSBtZXNzYWdlcy5maWx0ZXIoZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKCk/LlswXSA9PT0gXCJcIjtcblx0fSk7XG5cdGNvbnN0IEFQRG1lc3NhZ2VzID0gbWVzc2FnZXMuZmlsdGVyKGZ1bmN0aW9uIChtZXNzYWdlKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cyAmJlxuXHRcdFx0bWVzc2FnZS5nZXRUYXJnZXRzKCk/LlswXS5pbmNsdWRlcyhtUGFyYW1ldGVycy5hY3Rpb25OYW1lKSAmJlxuXHRcdFx0bVBhcmFtZXRlcnM/LmFBY3Rpb25QYXJhbWV0ZXJzPy5zb21lKGZ1bmN0aW9uIChhY3Rpb25QYXJhbSkge1xuXHRcdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKCk/LlswXS5pbmNsdWRlcyhhY3Rpb25QYXJhbS5uYW1lKTtcblx0XHRcdH0pXG5cdFx0KTtcblx0fSk7XG5cdEFQRG1lc3NhZ2VzPy5mb3JFYWNoKGZ1bmN0aW9uIChBUERNZXNzYWdlKSB7XG5cdFx0KEFQRE1lc3NhZ2UgYXMgdW5rbm93biBhcyB7IGlzQVBEVGFyZ2V0OiBib29sZWFuIH0pLmlzQVBEVGFyZ2V0ID0gdHJ1ZTtcblx0fSk7XG5cblx0Y29uc3QgZXJyb3JUYXJnZXRzSW5BUEQgPSBBUERtZXNzYWdlcy5sZW5ndGggPyB0cnVlIDogZmFsc2U7XG5cdC8vSWYgQWN0aW9uIGlzIHN1Y2Nlc3NmdWwgd2l0aCB3YXJuaW5ncywgZG9udCBzaG93IHRoZSBnZW5lcmljIGVycm9yIG1lc3NhZ2UgZm9yIGNoYW5nZXNldCBpbiBkaWFsb2dcblx0aWYgKHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ICYmICFlcnJvclRhcmdldHNJbkFQRCAmJiAhaXNBY3Rpb25TdWNjZXNzZnVsKSB7XG5cdFx0Y29uc3QgbWVzc2FnZU1vZGVsID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpO1xuXHRcdGNvbnN0IG1lc3NhZ2VzSW5Nb2RlbCA9IG1lc3NhZ2VNb2RlbC5nZXREYXRhKCk7XG5cdFx0Y29uc3QgYUJvdW5kTWVzc2FnZXMgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TWVzc2FnZXModHJ1ZSk7XG5cdFx0bGV0IGdlbmVyaWNNZXNzYWdlO1xuXHRcdGNvbnN0IGlzRWRpdGFibGUgPSBvQ29udHJvbCAmJiBvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpIS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXG5cdFx0Y29uc3Qgbm9uRXJyb3JNZXNzYWdlRXhpc3RzSW5EaWFsb2cgPSBtZXNzYWdlcy5maW5kSW5kZXgoZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRcdHJldHVybiBtZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJFcnJvclwiIHx8IG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIldhcm5pbmdcIjtcblx0XHR9KTtcblx0XHRjb25zdCBub25FcnJvck1lc3NhZ2VFeGlzdHNJbk1vZGVsID0gbWVzc2FnZXNJbk1vZGVsLmZpbmRJbmRleChmdW5jdGlvbiAobWVzc2FnZTogTWVzc2FnZSkge1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIkVycm9yXCIgfHwgbWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiV2FybmluZ1wiO1xuXHRcdH0pO1xuXG5cdFx0aWYgKFxuXHRcdFx0bm9uRXJyb3JNZXNzYWdlRXhpc3RzSW5EaWFsb2cgIT09IDEgJiZcblx0XHRcdG5vbkVycm9yTWVzc2FnZUV4aXN0c0luTW9kZWwgIT09IC0xICYmXG5cdFx0XHRtUGFyYW1ldGVycy5hQ29udGV4dHMgJiZcblx0XHRcdG1QYXJhbWV0ZXJzLmFDb250ZXh0cy5sZW5ndGggPiAxXG5cdFx0KSB7XG5cdFx0XHRpZiAobWVzc2FnZXNJbk1vZGVsLmxlbmd0aCA9PT0gMSAmJiBhQm91bmRNZXNzYWdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0Z2VuZXJpY01lc3NhZ2UgPSBnZXRHZW5lcmljTXNnRm9yU2luZ2xlRXJyb3JJbkNoYW5nZVNldChpc0VkaXRhYmxlLCBvUmVzb3VyY2VCdW5kbGUpO1xuXHRcdFx0XHRtZXNzYWdlcy51bnNoaWZ0KGdlbmVyaWNNZXNzYWdlKTtcblx0XHRcdFx0c2hvd01lc3NhZ2VCb3ggPSB0cnVlO1xuXHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IGZhbHNlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgc01lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxfRVJST1JfTUVTU0FHRVNfVEVYVFwiKTtcblx0XHRcdFx0Y29uc3Qgc0Rlc2NyaXB0aW9uVGV4dCA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9FUlJPUl9NRVNTQUdFU19ERVRBSUxfVEVYVFwiKTtcblx0XHRcdFx0Z2VuZXJpY01lc3NhZ2UgPSBuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdFx0bWVzc2FnZTogc01lc3NhZ2UsXG5cdFx0XHRcdFx0dHlwZTogTWVzc2FnZVR5cGUuRXJyb3IsXG5cdFx0XHRcdFx0dGFyZ2V0OiBcIlwiLFxuXHRcdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWUsXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHNEZXNjcmlwdGlvblRleHQsXG5cdFx0XHRcdFx0Y29kZTogXCJGRV9DVVNUT01fTUVTU0FHRV9DSEFOR0VTRVRfQUxMX0ZBSUxFRFwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRtZXNzYWdlcy51bnNoaWZ0KGdlbmVyaWNNZXNzYWdlKTtcblx0XHRcdFx0aWYgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdHNob3dNZXNzYWdlQm94ID0gdHJ1ZTtcblx0XHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IGZhbHNlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gdHJ1ZTtcblx0XHRcdFx0XHRzaG93TWVzc2FnZUJveCA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKG9EaWFsb2cgJiYgb0RpYWxvZy5pc09wZW4oKSAmJiBhQ29udGV4dHMubGVuZ3RoICE9PSAwICYmICFtUGFyYW1ldGVycy5pc1N0YXRpYykge1xuXHRcdGlmICghbVBhcmFtZXRlcnMuYkdyb3VwZWQpIHtcblx0XHRcdC8vaXNvbGF0ZWRcblx0XHRcdGlmIChhQ29udGV4dHMubGVuZ3RoID4gMSB8fCAhZXJyb3JUYXJnZXRzSW5BUEQpIHtcblx0XHRcdFx0Ly8gZG9lcyBub3QgbWF0dGVyIGlmIGVycm9yIGlzIGluIEFQRCBvciBub3QsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBjb250ZXh0cyBzZWxlY3RlZCBvciBpZiB0aGUgZXJyb3IgaXMgbm90IHRoZSBBUEQsIHdlIGNsb3NlIGl0LlxuXHRcdFx0XHQvLyBUT0RPOiBEaWxhb2cgaGFuZGxpbmcgc2hvdWxkIG5vdCBiZSBwYXJ0IG9mIG1lc3NhZ2UgaGFuZGxpbmcuIFJlZmFjdG9yIGFjY29yZGluZ2x5IC0gZGlhbG9nIHNob3VsZCBub3QgYmUgbmVlZGVkIGluc2lkZSB0aGlzIG1ldGhvZCAtIG5laXRoZXJcblx0XHRcdFx0Ly8gdG8gYXNrIHdoZXRoZXIgaXQncyBvcGVuLCBub3IgdG8gY2xvc2UvZGVzdHJveSBpdCFcblx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRvRGlhbG9nLmRlc3Ryb3koKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKCFlcnJvclRhcmdldHNJbkFQRCkge1xuXHRcdFx0Ly9jaGFuZ2VzZXRcblx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdG9EaWFsb2cuZGVzdHJveSgpO1xuXHRcdH1cblx0fVxuXHRjb25zdCBmaWx0ZXJlZE1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblx0Y29uc3QgYklzQVBET3BlbiA9IG9EaWFsb2cgJiYgb0RpYWxvZy5pc09wZW4oKTtcblxuXHRjb25zdCB7IG1lc3NhZ2VzVG9TaG93LCBjb250YWluc0JvdW5kVHJhbnNpc3Rpb24sIHNob3dNZXNzYWdlSW5EaWFsb2cgfSA9IGZpbHRlckFQRGFuZENvbnRleHRNZXNzYWdlcyhcblx0XHRtZXNzYWdlcyxcblx0XHRlcnJvclRhcmdldHNJbkFQRCxcblx0XHRhQ29udGV4dHMsXG5cdFx0dW5ib3VuZE1lc3NhZ2VzLFxuXHRcdG9Db250cm9sLFxuXHRcdGJJc0FQRE9wZW5cblx0KTtcblx0bWVzc2FnZXMgPSBtZXNzYWdlc1RvU2hvdztcblx0c2hvd01lc3NhZ2VEaWFsb2cgPSBzaG93TWVzc2FnZUluRGlhbG9nID8/IHNob3dNZXNzYWdlRGlhbG9nO1xuXG5cdGlmICghYklzQVBET3BlbiAmJiBlcnJvclRhcmdldHNJbkFQRCAmJiAhbVBhcmFtZXRlcnMuYkdyb3VwZWQpIHtcblx0XHQvLyBJZiBBUEQgaXMgbm90IG9wZW4gYW5kIHRoZXJlIGFyZSBtZXNzYWdlcyByZWxhdGVkIHRvIEFQRCwgdGhlbiBzaG93IGluIHRoZSBtZXNzYWdlIGRpYWxvZy4gc2luY2Vcblx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdFx0bWVzc2FnZXMgPSBtZXNzYWdlcy5jb25jYXQoQVBEbWVzc2FnZXMpO1xuXHR9XG5cblx0bGV0IGZuR2V0TWVzc2FnZVN1YnRpdGxlO1xuXHRpZiAob0NvbnRyb2wgJiYgb0NvbnRyb2wuaXNBPFRhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRmbkdldE1lc3NhZ2VTdWJ0aXRsZSA9IG1lc3NhZ2VIYW5kbGluZy5zZXRNZXNzYWdlU3VidGl0bGUuYmluZCh7fSwgb0NvbnRyb2wsIGFDb250ZXh0cyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRzaG93TWVzc2FnZUJveDogc2hvd01lc3NhZ2VCb3gsXG5cdFx0c2hvd01lc3NhZ2VEaWFsb2c6IHNob3dNZXNzYWdlRGlhbG9nLFxuXHRcdGZpbHRlcmVkTWVzc2FnZXM6IGZpbHRlcmVkTWVzc2FnZXMubGVuZ3RoID8gZmlsdGVyZWRNZXNzYWdlcyA6IG1lc3NhZ2VzLFxuXHRcdGZuR2V0TWVzc2FnZVN1YnRpdGxlOiBmbkdldE1lc3NhZ2VTdWJ0aXRsZSxcblx0XHRzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2c6IG1QYXJhbWV0ZXJzLmJHcm91cGVkLFxuXHRcdGNvbnRhaW5zQm91bmRUcmFuc2lzdGlvbjogY29udGFpbnNCb3VuZFRyYW5zaXN0aW9uXG5cdH07XG59XG5cbmZ1bmN0aW9uIGdldEdlbmVyaWNNc2dGb3JTaW5nbGVFcnJvckluQ2hhbmdlU2V0KGlzRWRpdGFibGU6IGJvb2xlYW4sIHJlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSk6IE1lc3NhZ2VXaXRoSGVhZGVyIHtcblx0Y29uc3QgbWVzc2FnZSA9IGlzRWRpdGFibGVcblx0XHQ/IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMX1NJTkdMRV9FUlJPUl9NRVNTQUdFX1RFWFRfRURJVFwiKVxuXHRcdDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxfU0lOR0xFX0VSUk9SX01FU1NBR0VfVEVYVFwiKTtcblx0cmV0dXJuIG5ldyBNZXNzYWdlKHtcblx0XHRtZXNzYWdlLFxuXHRcdHR5cGU6IE1lc3NhZ2VUeXBlLkVycm9yLFxuXHRcdHRhcmdldDogXCJcIixcblx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdGNvZGU6IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIixcblx0XHR0ZWNobmljYWxEZXRhaWxzOiB7XG5cdFx0XHRmZToge1xuXHRcdFx0XHRjaGFuZ2VTZXRQcmVUZXh0Rm9yU2luZ2xlRXJyb3I6IG1lc3NhZ2Vcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzKFxuXHRvQWN0aW9uOiBPRGF0YUNvbnRleHRCaW5kaW5nLFxuXHRtUGFyYW1ldGVyczogU2hvd0FjdGlvbkRpYWxvZ1BhcmFtZXRlcnMsXG5cdGJHZXRCb3VuZENvbnRleHQ6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdHNHcm91cElkOiBzdHJpbmcsXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlciB8IHVuZGVmaW5lZCxcblx0aUNvbnRleHRMZW5ndGg6IG51bWJlciB8IG51bGwsXG5cdGN1cnJlbnRfY29udGV4dF9pbmRleDogbnVtYmVyIHwgbnVsbCxcblx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmU6IEZ1bmN0aW9uLFxuXHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVqZWN0OiBGdW5jdGlvbixcblx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM6IFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRpZ25vcmVFVGFnPzogYm9vbGVhblxuKTogUHJvbWlzZTx1bmRlZmluZWQgfCBPRGF0YVY0Q29udGV4dD4ge1xuXHRsZXQgb0FjdGlvblByb21pc2U6IFByb21pc2U8dW5kZWZpbmVkIHwgT0RhdGFWNENvbnRleHQ+LFxuXHRcdGJFbmFibGVTdHJpY3RIYW5kbGluZyA9IHRydWU7XG5cdGlmIChtUGFyYW1ldGVycykge1xuXHRcdG1QYXJhbWV0ZXJzLmludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlID0gaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmU7XG5cdH1cblx0aWYgKGJHZXRCb3VuZENvbnRleHQpIHtcblx0XHRjb25zdCBzUGF0aCA9IG9BY3Rpb24uZ2V0Qm91bmRDb250ZXh0KCkuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IHNNZXRhUGF0aCA9IG9BY3Rpb24uZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhUGF0aChzUGF0aCk7XG5cdFx0Y29uc3Qgb1Byb3BlcnR5ID0gb0FjdGlvbi5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChzTWV0YVBhdGgpO1xuXHRcdGlmIChvUHJvcGVydHkgJiYgb1Byb3BlcnR5WzBdPy4ka2luZCAhPT0gXCJBY3Rpb25cIikge1xuXHRcdFx0Ly9kbyBub3QgZW5hYmxlIHRoZSBzdHJpY3QgaGFuZGxpbmcgaWYgaXRzIG5vdCBhbiBhY3Rpb25cblx0XHRcdGJFbmFibGVTdHJpY3RIYW5kbGluZyA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAobVBhcmFtZXRlcnMuZGlzYWJsZVN0cmljdEhhbmRsaW5nKSB7XG5cdFx0XHRiRW5hYmxlU3RyaWN0SGFuZGxpbmcgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpZiAoIWJFbmFibGVTdHJpY3RIYW5kbGluZykge1xuXHRcdG9BY3Rpb25Qcm9taXNlID0gb0FjdGlvbi5leGVjdXRlKHNHcm91cElkLCBpZ25vcmVFVGFnKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRlbmhhbmNlU2lkZUVmZmVjdHMobVBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LCBvQWN0aW9uLCByZXN1bHQpO1xuXHRcdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUob0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKSk7XG5cdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvQWN0aW9uUHJvbWlzZSA9IG9BY3Rpb25cblx0XHRcdC5leGVjdXRlKFxuXHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0aWdub3JlRVRhZyxcblx0XHRcdFx0b3BlcmF0aW9uc0hlbHBlci5mbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQuYmluZChcblx0XHRcdFx0XHRvcGVyYXRpb25zLFxuXHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0Y3VycmVudF9jb250ZXh0X2luZGV4LFxuXHRcdFx0XHRcdG9BY3Rpb24uZ2V0Q29udGV4dCgpLFxuXHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoLFxuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChyZXN1bHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGVuaGFuY2VTaWRlRWZmZWN0cyhtUGFyYW1ldGVycy5hcHBDb21wb25lbnQsIG9BY3Rpb24sIHJlc3VsdCk7XG5cdFx0XHRcdGlmICghbVBhcmFtZXRlcnMuYkdyb3VwZWQpIHtcblx0XHRcdFx0XHR1cGRhdGU0MTJUcmFuc2l0aW9uTWVzc2FnZXMob0FjdGlvbiwgc0dyb3VwSWQsIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLCBtUGFyYW1ldGVycyBhcyBTdHJpY3RIYW5kbGluZ1BhcmFtZXRlcnMsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlYWxSZXN1bHQgPSBtUGFyYW1ldGVycy5iR2V0Qm91bmRDb250ZXh0IHx8IHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gb0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKSA6IHJlc3VsdDtcblx0XHRcdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUocmVhbFJlc3VsdCk7XG5cdFx0XHRcdHJldHVybiByZWFsUmVzdWx0O1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmICghbVBhcmFtZXRlcnMuYkdyb3VwZWQpIHtcblx0XHRcdFx0XHR1cGRhdGU0MTJUcmFuc2l0aW9uTWVzc2FnZXMob0FjdGlvbiwgc0dyb3VwSWQsIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLCBtUGFyYW1ldGVycyBhcyBTdHJpY3RIYW5kbGluZ1BhcmFtZXRlcnMpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3QoKTtcblx0XHRcdFx0dGhyb3cgQ29uc3RhbnRzLkFjdGlvbkV4ZWN1dGlvbkZhaWxlZDtcblx0XHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIG9BY3Rpb25Qcm9taXNlLmNhdGNoKCgpID0+IHtcblx0XHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVqZWN0KCk7XG5cdFx0dGhyb3cgQ29uc3RhbnRzLkFjdGlvbkV4ZWN1dGlvbkZhaWxlZDtcblx0fSk7XG59XG4vKipcbiAqIFVwZGF0ZXMgdGhlIHN0cmljdEhhbmRsaW5nIHV0aWxpdGllcyB3aXRoIHRoZSBmYWlsZWQgYW5kIHN1Y2Nlc3NmdWwgdHJhbnNpdGlvbiBtZXNzYWdlcy5cbiAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGV4ZWN1dGVkXG4gKiBAcGFyYW0gZ3JvdXBJZCBHcm91cElkIG9mIHRoZSBiYXRjaFxuICogQHBhcmFtIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzIFV0aWxpdHkgZmxhZ3MgYW5kIG1lc3NhZ2VzIGZvciBzdHJpY3RIYW5kbGluZ1xuICogQHBhcmFtIHBhcmFtZXRlcnMgU3RyaWN0IEhhbmRsaW5nIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBvbmx5U3VjY2Vzc01lc3NhZ2VzIFRvIHVwZGF0ZSBvbmx5IHN1Y2Nlc3NmdWwgdHJhbnNpdGlvbiBtZXNzYWdlc1xuICovXG5mdW5jdGlvbiB1cGRhdGU0MTJUcmFuc2l0aW9uTWVzc2FnZXMoXG5cdGFjdGlvbjogT0RhdGFDb250ZXh0QmluZGluZyxcblx0Z3JvdXBJZDogc3RyaW5nLFxuXHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllczogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdHBhcmFtZXRlcnM/OiBTdHJpY3RIYW5kbGluZ1BhcmFtZXRlcnMsXG5cdG9ubHlTdWNjZXNzTWVzc2FnZXMgPSBmYWxzZVxuKTogdm9pZCB7XG5cdGNvbnN0IG1lc3NhZ2VzOiBBcnJheTxNZXNzYWdlPiA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdGNvbnN0IHsgcHJvY2Vzc2VkTWVzc2FnZUlkcywgZGVsYXlTdWNjZXNzTWVzc2FnZXMsIHN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzIH0gPSBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcztcblx0Y29uc3QgdW5Qcm9jZXNzZWRNZXNzYWdlcyA9IG1lc3NhZ2VzLnJlZHVjZSgoYWNjOiBNZXNzYWdlW10sIG1lc3NhZ2UpID0+IHtcblx0XHRpZiAoIXByb2Nlc3NlZE1lc3NhZ2VJZHMuaGFzKG1lc3NhZ2UuZ2V0SWQoKSkpIHtcblx0XHRcdGFjYy5wdXNoKG1lc3NhZ2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gYWNjO1xuXHR9LCBbXSk7XG5cblx0Y29uc3QgbmV3VHJhbnNpdGlvbkVycm9yTWVzc2FnZXNJZCA9IHVuUHJvY2Vzc2VkTWVzc2FnZXNcblx0XHQuZmlsdGVyKFxuXHRcdFx0KG1lc3NhZ2UpID0+XG5cdFx0XHRcdG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpID09PSB0cnVlICYmIG1lc3NhZ2UuZ2V0VHlwZSgpICE9PSBNZXNzYWdlVHlwZS5TdWNjZXNzICYmICFwcm9jZXNzZWRNZXNzYWdlSWRzLmhhcyhtZXNzYWdlLmdldElkKCkpXG5cdFx0KVxuXHRcdC5tYXAoKG1lc3NhZ2UpID0+IG1lc3NhZ2UuZ2V0SWQoKSk7XG5cblx0aWYgKG5ld1RyYW5zaXRpb25FcnJvck1lc3NhZ2VzSWQubGVuZ3RoKSB7XG5cdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMucHJvY2Vzc2VkTWVzc2FnZUlkcyA9IG5ldyBTZXQoWy4uLkFycmF5LmZyb20ocHJvY2Vzc2VkTWVzc2FnZUlkcyksIC4uLm5ld1RyYW5zaXRpb25FcnJvck1lc3NhZ2VzSWRdKTtcblx0XHRkZWxheVN1Y2Nlc3NNZXNzYWdlcy5wdXNoKC4uLk9iamVjdC52YWx1ZXModW5Qcm9jZXNzZWRNZXNzYWdlcykuZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuU3VjY2VzcykpO1xuXHRcdGlmICghb25seVN1Y2Nlc3NNZXNzYWdlcyAmJiBwYXJhbWV0ZXJzPy5pbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0c3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMucHVzaCh7XG5cdFx0XHRcdG9BY3Rpb246IGFjdGlvbixcblx0XHRcdFx0Z3JvdXBJZFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZWludGVybmFsT3BlcmF0aW9uc1Byb21pc2VGb3JBY3Rpb25FeGVjdXRpb24oKToge1xuXHRvTG9jYWxBY3Rpb25Qcm9taXNlOiBQcm9taXNlPHVua25vd24+O1xuXHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZTogRnVuY3Rpb247XG5cdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3Q6IEZ1bmN0aW9uO1xufSB7XG5cdGxldCBpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZSE6IEZ1bmN0aW9uO1xuXHRsZXQgaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCE6IEZ1bmN0aW9uO1xuXHRjb25zdCBvTG9jYWxBY3Rpb25Qcm9taXNlID0gbmV3IFByb21pc2U8dW5rbm93bj4oZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVqZWN0ID0gcmVqZWN0O1xuXHR9KS5jYXRjaChmdW5jdGlvbiAob0Vycm9yKSB7XG5cdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGFjdGlvbiBcIiwgb0Vycm9yKTtcblx0fSk7XG5cblx0cmV0dXJuIHsgb0xvY2FsQWN0aW9uUHJvbWlzZSwgaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUsIGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3QgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gX2V4ZWN1dGVBY3Rpb24oXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0bVBhcmFtZXRlcnM6IFNob3dBY3Rpb25EaWFsb2dQYXJhbWV0ZXJzLFxuXHRvUGFyZW50Q29udHJvbDogQ29udHJvbCxcblx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyLFxuXHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllczogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdGlnbm9yZUVUYWc/OiBib29sZWFuXG4pOiBQcm9taXNlPE9EYXRhVjRDb250ZXh0IHwgUHJvbWlzZVNldHRsZWRSZXN1bHQ8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+W10+IHtcblx0Y29uc3QgYUNvbnRleHRzID0gbVBhcmFtZXRlcnMuYUNvbnRleHRzIHx8IFtdO1xuXHRjb25zdCBvTW9kZWwgPSBtUGFyYW1ldGVycy5tb2RlbDtcblx0Y29uc3QgYUFjdGlvblBhcmFtZXRlcnMgPSBtUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVycyB8fCBbXTtcblx0Y29uc3Qgc0FjdGlvbk5hbWUgPSBtUGFyYW1ldGVycy5hY3Rpb25OYW1lO1xuXHRjb25zdCBmbk9uU3VibWl0dGVkID0gbVBhcmFtZXRlcnMuZm5PblN1Ym1pdHRlZDtcblx0Y29uc3QgZm5PblJlc3BvbnNlID0gbVBhcmFtZXRlcnMuZm5PblJlc3BvbnNlO1xuXHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbChvUGFyZW50Q29udHJvbCk7XG5cdGxldCBvQWN0aW9uOiBPRGF0YUNvbnRleHRCaW5kaW5nO1xuXHRtUGFyYW1ldGVycy5hcHBDb21wb25lbnQgPSBvQXBwQ29tcG9uZW50O1xuXG5cdGZ1bmN0aW9uIHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpOiB2b2lkIHtcblx0XHRpZiAoYUFjdGlvblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBkZWZhdWx0VmFsdWVzID0gbVBhcmFtZXRlcnMuZGVmYXVsdFBhcmFtZXRlcnNWYWx1ZXMgPz8ge307XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiBhQWN0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0XHRjb25zdCBuYW1lID0gcGFyYW1ldGVyLm5hbWU7XG5cdFx0XHRcdGlmICghZGVmYXVsdFZhbHVlc1tuYW1lXSkge1xuXHRcdFx0XHRcdHN3aXRjaCAocGFyYW1ldGVyLnR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uU3RyaW5nXCI6XG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZXNbbmFtZV0gPSBcIlwiO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uQm9vbGVhblwiOlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzW25hbWVdID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5CeXRlXCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDE2XCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDMyXCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDY0XCI6XG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZXNbbmFtZV0gPSAwO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdC8vIHRiY1xuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdG9BY3Rpb24uc2V0UGFyYW1ldGVyKG5hbWUsIGRlZmF1bHRWYWx1ZXNbbmFtZV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRpZiAoYUNvbnRleHRzLmxlbmd0aCkge1xuXHRcdC8vIFRPRE86IHJlZmFjdG9yIHRvIGRpcmVjdCB1c2Ugb2YgUHJvbWlzZS5hbGxTZXR0bGVkXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPE9EYXRhVjRDb250ZXh0IHwgUHJvbWlzZVNldHRsZWRSZXN1bHQ8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+W10+KGZ1bmN0aW9uIChcblx0XHRcdHJlc29sdmU6ICh2YWx1ZTogT0RhdGFWNENvbnRleHQgfCBQcm9taXNlU2V0dGxlZFJlc3VsdDxPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZD5bXSkgPT4gdm9pZFxuXHRcdCkge1xuXHRcdFx0Y29uc3QgbUJpbmRpbmdQYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzO1xuXHRcdFx0Y29uc3QgYkdyb3VwZWQgPSBtUGFyYW1ldGVycy5iR3JvdXBlZDtcblx0XHRcdGNvbnN0IGJHZXRCb3VuZENvbnRleHQgPSBtUGFyYW1ldGVycy5iR2V0Qm91bmRDb250ZXh0O1xuXHRcdFx0Y29uc3QgYUFjdGlvblByb21pc2VzOiBQcm9taXNlPE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkPltdID0gW107XG5cdFx0XHRsZXQgb0FjdGlvblByb21pc2U7XG5cdFx0XHRsZXQgaTtcblx0XHRcdGxldCBzR3JvdXBJZDogc3RyaW5nO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZU9iamVjdENoYW5nZVNldCA9IGNyZWF0ZWludGVybmFsT3BlcmF0aW9uc1Byb21pc2VGb3JBY3Rpb25FeGVjdXRpb24oKTtcblx0XHRcdGNvbnN0IGZuRXhlY3V0ZUFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRcdFx0YWN0aW9uQ29udGV4dDogT0RhdGFDb250ZXh0QmluZGluZyxcblx0XHRcdFx0Y3VycmVudF9jb250ZXh0X2luZGV4OiBudW1iZXIgfCBudWxsLFxuXHRcdFx0XHRvU2lkZUVmZmVjdDogQWN0aW9uU2lkZUVmZmVjdHNUeXBlICYgeyBjb250ZXh0OiBPRGF0YVY0Q29udGV4dCB9LFxuXHRcdFx0XHRpQ29udGV4dExlbmd0aDogbnVtYmVyXG5cdFx0XHQpOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRcdFx0c2V0QWN0aW9uUGFyYW1ldGVyRGVmYXVsdFZhbHVlKCk7XG5cdFx0XHRcdGNvbnN0IGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcblx0XHRcdFx0Ly8gRm9yIGludm9jYXRpb24gZ3JvdXBpbmcgXCJpc29sYXRlZFwiIG5lZWQgYmF0Y2ggZ3JvdXAgcGVyIGFjdGlvbiBjYWxsXG5cdFx0XHRcdHNHcm91cElkID0gIWJHcm91cGVkID8gYCRhdXRvLiR7Y3VycmVudF9jb250ZXh0X2luZGV4fWAgOiBhY3Rpb25Db250ZXh0LmdldFVwZGF0ZUdyb3VwSWQoKTtcblx0XHRcdFx0bVBhcmFtZXRlcnMucmVxdWVzdFNpZGVFZmZlY3RzID0gZm5SZXF1ZXN0U2lkZUVmZmVjdHMuYmluZChcblx0XHRcdFx0XHRvcGVyYXRpb25zLFxuXHRcdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0b1NpZGVFZmZlY3QsXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0aW5kaXZpZHVhbEFjdGlvblByb21pc2Vcblx0XHRcdFx0KTtcblx0XHRcdFx0b0FjdGlvblByb21pc2UgPSBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzKFxuXHRcdFx0XHRcdGFjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0YkdldEJvdW5kQ29udGV4dCxcblx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoLFxuXHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCxcblx0XHRcdFx0XHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlT2JqZWN0Q2hhbmdlU2V0LmludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlLFxuXHRcdFx0XHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3RDaGFuZ2VTZXQuaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCxcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0XHRcdFx0XHRpZ25vcmVFVGFnXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFBY3Rpb25Qcm9taXNlcy5wdXNoKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0aW5kaXZpZHVhbEFjdGlvblByb21pc2UucHVzaChpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlT2JqZWN0Q2hhbmdlU2V0Lm9Mb2NhbEFjdGlvblByb21pc2UpO1xuXHRcdFx0XHRmblJlcXVlc3RTaWRlRWZmZWN0cyhvQXBwQ29tcG9uZW50LCBvU2lkZUVmZmVjdCwgbVBhcmFtZXRlcnMsIHNHcm91cElkLCBpbmRpdmlkdWFsQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoaW5kaXZpZHVhbEFjdGlvblByb21pc2UpO1xuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGZuRXhlY3V0ZVNpbmdsZUFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRcdFx0YWN0aW9uQ29udGV4dDogT0RhdGFDb250ZXh0QmluZGluZyxcblx0XHRcdFx0Y3VycmVudF9jb250ZXh0X2luZGV4OiBudW1iZXIgfCBudWxsLFxuXHRcdFx0XHRvU2lkZUVmZmVjdDogKEFjdGlvblNpZGVFZmZlY3RzVHlwZSAmIHsgY29udGV4dDogT0RhdGFWNENvbnRleHQgfSkgfCB1bmRlZmluZWQsXG5cdFx0XHRcdGlDb250ZXh0TGVuZ3RoOiBudW1iZXJcblx0XHRcdCk6IFByb21pc2U8UHJvbWlzZVNldHRsZWRSZXN1bHQ8dW5rbm93bj5bXT4ge1xuXHRcdFx0XHRjb25zdCBpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlT2JqZWN0SXNvbGF0ZWQgPSBjcmVhdGVpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlRm9yQWN0aW9uRXhlY3V0aW9uKCk7XG5cdFx0XHRcdGNvbnN0IGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcblx0XHRcdFx0c2V0QWN0aW9uUGFyYW1ldGVyRGVmYXVsdFZhbHVlKCk7XG5cdFx0XHRcdC8vIEZvciBpbnZvY2F0aW9uIGdyb3VwaW5nIFwiaXNvbGF0ZWRcIiBuZWVkIGJhdGNoIGdyb3VwIHBlciBhY3Rpb24gY2FsbFxuXHRcdFx0XHRzR3JvdXBJZCA9IG1QYXJhbWV0ZXJzLmdyb3VwSWQgfHwgYGFwaU1vZGUke2N1cnJlbnRfY29udGV4dF9pbmRleH1gO1xuXHRcdFx0XHRtUGFyYW1ldGVycy5yZXF1ZXN0U2lkZUVmZmVjdHMgPSBmblJlcXVlc3RTaWRlRWZmZWN0cy5iaW5kKFxuXHRcdFx0XHRcdG9wZXJhdGlvbnMsXG5cdFx0XHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRvU2lkZUVmZmVjdCxcblx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRpbmRpdmlkdWFsQWN0aW9uUHJvbWlzZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRvQWN0aW9uUHJvbWlzZSA9IGV4ZWN1dGVEZXBlbmRpbmdPblNlbGVjdGVkQ29udGV4dHMoXG5cdFx0XHRcdFx0YWN0aW9uQ29udGV4dCxcblx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRiR2V0Qm91bmRDb250ZXh0LFxuXHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0Y3VycmVudF9jb250ZXh0X2luZGV4LFxuXHRcdFx0XHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3RJc29sYXRlZC5pbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZSxcblx0XHRcdFx0XHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlT2JqZWN0SXNvbGF0ZWQuaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCxcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0XHRcdFx0XHRpZ25vcmVFVGFnXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFBY3Rpb25Qcm9taXNlcy5wdXNoKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0aW5kaXZpZHVhbEFjdGlvblByb21pc2UucHVzaChpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlT2JqZWN0SXNvbGF0ZWQub0xvY2FsQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHRcdGZuUmVxdWVzdFNpZGVFZmZlY3RzKG9BcHBDb21wb25lbnQsIG9TaWRlRWZmZWN0LCBtUGFyYW1ldGVycywgc0dyb3VwSWQsIGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0b01vZGVsLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChpbmRpdmlkdWFsQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHR9O1xuXG5cdFx0XHRhc3luYyBmdW5jdGlvbiBmbkV4ZWN1dGVDaGFuZ2VzZXQoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRcdGNvbnN0IGFDaGFuZ2VTZXRMb2NhbFByb21pc2VzOiB1bmtub3duW10gPSBbXTtcblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGFDb250ZXh0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdG9BY3Rpb24gPSBvTW9kZWwuYmluZENvbnRleHQoYCR7c0FjdGlvbk5hbWV9KC4uLilgLCBhQ29udGV4dHNbaV0sIG1CaW5kaW5nUGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0YUNoYW5nZVNldExvY2FsUHJvbWlzZXMucHVzaChcblx0XHRcdFx0XHRcdGZuRXhlY3V0ZUFjdGlvbihcblx0XHRcdFx0XHRcdFx0b0FjdGlvbixcblx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLmxlbmd0aCA8IDEgPyBudWxsIDogaSArIDEsXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0OiBhQ29udGV4dHNbaV0sXG5cdFx0XHRcdFx0XHRcdFx0cGF0aEV4cHJlc3Npb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMsXG5cdFx0XHRcdFx0XHRcdFx0dHJpZ2dlckFjdGlvbnM6IG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ICYmIG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGFDb250ZXh0cy5sZW5ndGhcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdChcblx0XHRcdFx0XHRmbk9uU3VibWl0dGVkIHx8XG5cdFx0XHRcdFx0ZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdC8qKi9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCkoYUFjdGlvblByb21pc2VzKTtcblxuXHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoYUNoYW5nZVNldExvY2FsUHJvbWlzZXMpO1xuXHRcdFx0XHRpZiAoc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdQcm9taXNlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0aWYgKCFtZXNzYWdlSGFuZGxpbmcuaGFzVHJhbnNpdGlvbkVycm9yc09yV2FybmluZ3MoKSkge1xuXHRcdFx0XHRcdFx0XHRhd2FpdCBvcGVyYXRpb25zSGVscGVyLnJlbmRlck1lc3NhZ2VWaWV3KFxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXMsXG5cdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLmxlbmd0aCA+IDFcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nUHJvbWlzZXMuZm9yRWFjaChmdW5jdGlvbiAoc2hQcm9taXNlKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2hQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZU1vZGVsID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBtZXNzYWdlc0luTW9kZWwgPSBtZXNzYWdlTW9kZWwuZ2V0RGF0YSgpO1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlTW9kZWwuc2V0RGF0YShtZXNzYWdlc0luTW9kZWwuY29uY2F0KHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJSZXRyaWdnZXJpbmcgb2Ygc3RyaWN0IGhhbmRsaW5nIGFjdGlvbnMgZmFpbGVkXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRmbkhhbmRsZVJlc3VsdHMoKTtcblx0XHRcdH1cblxuXHRcdFx0YXN5bmMgZnVuY3Rpb24gZm5FeGVjdXRlU2VxdWVudGlhbGx5KGNvbnRleHRzVG9FeGVjdXRlOiBPRGF0YVY0Q29udGV4dFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRcdC8vIE9uZSBhY3Rpb24gYW5kIGl0cyBzaWRlIGVmZmVjdHMgYXJlIGNvbXBsZXRlZCBiZWZvcmUgdGhlIG5leHQgYWN0aW9uIGlzIGV4ZWN1dGVkXG5cdFx0XHRcdChcblx0XHRcdFx0XHRmbk9uU3VibWl0dGVkIHx8XG5cdFx0XHRcdFx0ZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdC8qKi9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCkoYUFjdGlvblByb21pc2VzKTtcblx0XHRcdFx0YXN5bmMgZnVuY3Rpb24gcHJvY2Vzc09uZUFjdGlvbihcblx0XHRcdFx0XHRjb250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRcdFx0XHRhY3Rpb25JbmRleDogbnVtYmVyLFxuXHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoOiBudW1iZXJcblx0XHRcdFx0KTogUHJvbWlzZTxQcm9taXNlU2V0dGxlZFJlc3VsdDx1bmtub3duPltdPiB7XG5cdFx0XHRcdFx0b0FjdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtzQWN0aW9uTmFtZX0oLi4uKWAsIGNvbnRleHQsIG1CaW5kaW5nUGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0Ly8gQWN0aW9uIG9uIHRoZSB0YWJsZSBsZXZlbCBpcyBib3VuZCBvbiBhIGNvcHkgb2YgdGhlIG9EYXRhTGlzdEJpbmRpbmcsIHRvIGV4ZWN1dGUgdGhlIFNpZGVFZmZlY3RzIHdlIG5lZWRcblx0XHRcdFx0XHQvLyB0byBkbyBpdCBvbiB0aGUgb3JpZ2luYWwgb0RhdGFMaXN0QmluZGluZ1xuXHRcdFx0XHRcdGNvbnN0IGluaXRpYWxUYWJsZUNvbnRleHQgPSAobVBhcmFtZXRlcnMuY29udHJvbCBhcyBUYWJsZSk/LmdldFJvd0JpbmRpbmc/LigpPy5nZXRIZWFkZXJDb250ZXh0KCk7XG5cdFx0XHRcdFx0cmV0dXJuIGZuRXhlY3V0ZVNpbmdsZUFjdGlvbihcblx0XHRcdFx0XHRcdG9BY3Rpb24sXG5cdFx0XHRcdFx0XHRhY3Rpb25JbmRleCxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dDpcblx0XHRcdFx0XHRcdFx0XHRpbml0aWFsVGFibGVDb250ZXh0ICYmIGluaXRpYWxUYWJsZUNvbnRleHQuZ2V0UGF0aCgpID09PSBjb250ZXh0LmdldFBhdGgoKSA/IGluaXRpYWxUYWJsZUNvbnRleHQgOiBjb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRwYXRoRXhwcmVzc2lvbnM6IG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ICYmIG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucyxcblx0XHRcdFx0XHRcdFx0dHJpZ2dlckFjdGlvbnM6IG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ICYmIG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0aUNvbnRleHRMZW5ndGhcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gc2VyaWFsaXphdGlvbjogcHJvY2Vzc09uZUFjdGlvbiB0byBiZSBjYWxsZWQgZm9yIGVhY2ggZW50cnkgaW4gY29udGV4dHNUb0V4ZWN1dGUgb25seSBhZnRlciB0aGUgcHJvbWlzZSByZXR1cm5lZCBmcm9tIHRoZSBvbmUgYmVmb3JlIGhhcyBiZWVuIHJlc29sdmVkXG5cdFx0XHRcdGF3YWl0IGNvbnRleHRzVG9FeGVjdXRlLnJlZHVjZShhc3luYyAocHJvbWlzZTogUHJvbWlzZTx2b2lkPiwgY29udGV4dDogT0RhdGFWNENvbnRleHQsIGlkOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdFx0XHRhd2FpdCBwcm9taXNlO1xuXHRcdFx0XHRcdGF3YWl0IHByb2Nlc3NPbmVBY3Rpb24oY29udGV4dCwgaWQgKyAxLCBhQ29udGV4dHMubGVuZ3RoKTtcblx0XHRcdFx0fSwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuXG5cdFx0XHRcdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1Byb21pc2VzLmxlbmd0aCkge1xuXHRcdFx0XHRcdGF3YWl0IG9wZXJhdGlvbnNIZWxwZXIucmVuZGVyTWVzc2FnZVZpZXcoXG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdFx0XHRcdFx0XHRhQ29udGV4dHMubGVuZ3RoID4gMVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm5IYW5kbGVSZXN1bHRzKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghYkdyb3VwZWQpIHtcblx0XHRcdFx0Ly8gRm9yIGludm9jYXRpb24gZ3JvdXBpbmcgXCJpc29sYXRlZFwiLCBlbnN1cmUgdGhhdCBlYWNoIGFjdGlvbiBhbmQgbWF0Y2hpbmcgc2lkZSBlZmZlY3RzXG5cdFx0XHRcdC8vIGFyZSBwcm9jZXNzZWQgYmVmb3JlIHRoZSBuZXh0IHNldCBpcyBzdWJtaXR0ZWQuIFdvcmthcm91bmQgdW50aWwgSlNPTiBiYXRjaCBpcyBhdmFpbGFibGUuXG5cdFx0XHRcdC8vIEFsbG93IGFsc28gZm9yIExpc3QgUmVwb3J0LlxuXHRcdFx0XHRmbkV4ZWN1dGVTZXF1ZW50aWFsbHkoYUNvbnRleHRzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZuRXhlY3V0ZUNoYW5nZXNldCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRhc3luYyBmdW5jdGlvbiBmbkhhbmRsZVJlc3VsdHMoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRcdC8vIFByb21pc2UuYWxsU2V0dGxlZCB3aWxsIG5ldmVyIGJlIHJlamVjdGVkLiBIb3dldmVyLCBlc2xpbnQgcmVxdWlyZXMgZWl0aGVyIGNhdGNoIG9yIHJldHVybiAtIHRodXMgd2UgcmV0dXJuIHRoZSByZXN1bHRpbmcgUHJvbWlzZSBhbHRob3VnaCBubyBvbmUgd2lsbCB1c2UgaXQuXG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoYUFjdGlvblByb21pc2VzKS50aGVuKHJlc29sdmUpO1xuXHRcdFx0fVxuXHRcdH0pLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0KFxuXHRcdFx0XHRmbk9uUmVzcG9uc2UgfHxcblx0XHRcdFx0ZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcblx0XHRcdFx0XHQvKiovXG5cdFx0XHRcdH1cblx0XHRcdCkoKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvQWN0aW9uID0gb01vZGVsLmJpbmRDb250ZXh0KGAvJHtzQWN0aW9uTmFtZX0oLi4uKWApO1xuXHRcdHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpO1xuXHRcdGNvbnN0IHNHcm91cElkID0gXCJhY3Rpb25JbXBvcnRcIjtcblx0XHRjb25zdCBvQWN0aW9uUHJvbWlzZTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZD4gPSBvQWN0aW9uLmV4ZWN1dGUoXG5cdFx0XHRzR3JvdXBJZCxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdG9wZXJhdGlvbnNIZWxwZXIuZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkLmJpbmQoXG5cdFx0XHRcdG9wZXJhdGlvbnMsXG5cdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHR7IGxhYmVsOiBtUGFyYW1ldGVycy5sYWJlbCwgbW9kZWw6IG9Nb2RlbCB9LFxuXHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcblx0XHRcdClcblx0XHQpO1xuXHRcdGNvbnN0IGFsbFByb21pc2U6IFByb21pc2U8dW5rbm93bj5bXSA9IFtvQWN0aW9uUHJvbWlzZV07XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0KSB7XG5cdFx0XHRjb25zdCBjb250ZXh0ID0gb01vZGVsLmJpbmRDb250ZXh0KFwiL3VuQm91bmRBY3Rpb25cIikuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0ID0ge1xuXHRcdFx0XHRjb250ZXh0OiBjb250ZXh0LFxuXHRcdFx0XHRwYXRoRXhwcmVzc2lvbnM6IG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucyxcblx0XHRcdFx0dHJpZ2dlckFjdGlvbnM6IG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zXG5cdFx0XHR9O1xuXHRcdFx0b3BlcmF0aW9ucy5mblJlcXVlc3RTaWRlRWZmZWN0cyhvQXBwQ29tcG9uZW50LCBzaWRlRWZmZWN0LCBtUGFyYW1ldGVycywgc0dyb3VwSWQsIGFsbFByb21pc2UpO1xuXHRcdFx0Y29udGV4dC5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdG9Nb2RlbC5zdWJtaXRCYXRjaChzR3JvdXBJZCk7XG5cdFx0Ly8gdHJpZ2dlciBvblN1Ym1pdHRlZCBcImV2ZW50XCJcblx0XHQoXG5cdFx0XHRmbk9uU3VibWl0dGVkIHx8XG5cdFx0XHRmdW5jdGlvbiBub29wKCk6IHZvaWQge1xuXHRcdFx0XHQvKiovXG5cdFx0XHR9XG5cdFx0KShvQWN0aW9uUHJvbWlzZSk7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKGFsbFByb21pc2UpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoY3VycmVudFByb21pc2VWYWx1ZXM6IHVua25vd25bXSkge1xuXHRcdFx0XHQvLyBIZXJlIHdlIGVuc3VyZSB0aGF0IHdlIHJldHVybiB0aGUgcmVzcG9uc2Ugd2UgZ290IGZyb20gYW4gdW5ib3VuZCBhY3Rpb24gdG8gdGhlXG5cdFx0XHRcdC8vIGNhbGxlciBCQ1AgOiAyMjcwMTM5Mjc5XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRQcm9taXNlVmFsdWUgPSBjdXJyZW50UHJvbWlzZVZhbHVlc1swXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRQcm9taXNlVmFsdWUpIHtcblx0XHRcdFx0XHRyZXR1cm4gY3VycmVudFByb21pc2VWYWx1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRCb3VuZENvbnRleHQ/LigpPy5nZXRPYmplY3QoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBhY3Rpb24gXCIgKyBzQWN0aW9uTmFtZSwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdHRocm93IG9FcnJvcjtcblx0XHRcdH0pXG5cdFx0XHQuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdChcblx0XHRcdFx0XHRmbk9uUmVzcG9uc2UgfHxcblx0XHRcdFx0XHRmdW5jdGlvbiBub29wKCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0LyoqL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KSgpO1xuXHRcdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gX3ZhbHVlc1Byb3ZpZGVkRm9yQWxsTWFuZGF0b3J5UGFyYW1ldGVycyhcblx0aXNDcmVhdGVBY3Rpb246IGJvb2xlYW4sXG5cdGFjdGlvblBhcmFtZXRlcnM6IEVkbUFjdGlvblBhcmFtZXRlcltdLFxuXHRwYXJhbWV0ZXJWYWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuXHRzdGFydHVwUGFyYW1ldGVycz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBib29sZWFuIHtcblx0Y29uc3QgaGlkZGVuQW5ub3RhdGlvblNldE9uQWxsQWN0aW9ucyA9IGFjdGlvblBhcmFtZXRlcnMuZXZlcnkoKHBhcmFtZXRlcikgPT4gcGFyYW1ldGVyPy5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlKTtcblxuXHRpZiAocGFyYW1ldGVyVmFsdWVzPy5sZW5ndGggJiYgIWhpZGRlbkFubm90YXRpb25TZXRPbkFsbEFjdGlvbnMpIHtcblx0XHQvLyBJZiBzaG93RGlhbG9nIGlzIGZhbHNlIGJ1dCB0aGVyZSBhcmUgcGFyYW1ldGVycyBmcm9tIHRoZSBpbnZva2VBY3Rpb24gY2FsbCB3aGljaCBuZWVkIHRvIGJlIGNoZWNrZWQgb24gZXhpc3RhbmNlXG5cdFx0Zm9yIChjb25zdCBhY3Rpb25QYXJhbWV0ZXIgb2YgYWN0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXIubmFtZSAhPT0gXCJSZXN1bHRJc0FjdGl2ZUVudGl0eVwiICYmXG5cdFx0XHRcdCFwYXJhbWV0ZXJWYWx1ZXM/LmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQubmFtZSA9PT0gYWN0aW9uUGFyYW1ldGVyLm5hbWUpXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gQXQgbGVhc3QgZm9yIG9uZSBwYXJhbWV0ZXIgbm8gdmFsdWUgaGFzIGJlZW4gcHJvdmlkZWQsIHNvIHdlIGNhbid0IHNraXAgdGhlIGRpYWxvZ1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKGlzQ3JlYXRlQWN0aW9uICYmIHN0YXJ0dXBQYXJhbWV0ZXJzPy5sZW5ndGggJiYgIWhpZGRlbkFubm90YXRpb25TZXRPbkFsbEFjdGlvbnMpIHtcblx0XHQvLyBJZiBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBwcm92aWRlZCBkdXJpbmcgYXBwbGljYXRpb24gbGF1bmNoLCB3ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBzZXQgaXMgY29tcGxldGVcblx0XHQvLyBJZiBub3QsIHRoZSBwYXJhbWV0ZXIgZGlhbG9nIHN0aWxsIG5lZWRzIHRvIGJlIHNob3duLlxuXHRcdGZvciAoY29uc3QgYWN0aW9uUGFyYW1ldGVyIG9mIGFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdGlmIChzdGFydHVwUGFyYW1ldGVycyAmJiAhc3RhcnR1cFBhcmFtZXRlcnNbYWN0aW9uUGFyYW1ldGVyLm5hbWVdKSB7XG5cdFx0XHRcdC8vIEF0IGxlYXN0IGZvciBvbmUgcGFyYW1ldGVyIG5vIHZhbHVlIGhhcyBiZWVuIHByb3ZpZGVkLCBzbyB3ZSBjYW4ndCBza2lwIHRoZSBkaWFsb2dcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChhY3Rpb25QYXJhbWV0ZXJzLmxlbmd0aCAmJiBoaWRkZW5Bbm5vdGF0aW9uU2V0T25BbGxBY3Rpb25zKSB7XG5cdFx0cmV0dXJuIGFjdGlvblBhcmFtZXRlcnMuZXZlcnkoZnVuY3Rpb24gKHBhcmFtZXRlcikge1xuXHRcdFx0Y29uc3QgZmllbGRDb250cm9sID0gcGFyYW1ldGVyLmFubm90YXRpb25zPy5Db21tb24/LkZpZWxkQ29udHJvbDtcblx0XHRcdGNvbnN0IGlzTWFuZGF0b3J5ID0gZmllbGRDb250cm9sPy50b1N0cmluZygpID09PSBcIkNvbW1vbi5GaWVsZENvbnRyb2xUeXBlL01hbmRhdG9yeVwiO1xuXG5cdFx0XHQvLyBQb3NzaWJsZSBzb3VyY2VzIG1heSBiZSBzdGFydHVwUGFyYW1ldGVycywgcGFyYW1ldGVyVmFsdWVzLCBkZWZhdWx0VmFsdWVzIHBlciBhbm5vdGF0aW9uIChQYXJhbWV0ZXJEZWZhdWx0VmFsdWUpXG5cdFx0XHQvLyBJZiBub25lIGlzIGZvdW5kLCByZXR1cm4gZmFsc2Vcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdCFpc01hbmRhdG9yeSB8fFxuXHRcdFx0XHQoc3RhcnR1cFBhcmFtZXRlcnMgJiYgc3RhcnR1cFBhcmFtZXRlcnNbcGFyYW1ldGVyLm5hbWVdKSB8fFxuXHRcdFx0XHRwYXJhbWV0ZXJWYWx1ZXM/LmZpbmQoKHBhcmFtZXRlclZhbHVlKSA9PiBwYXJhbWV0ZXJWYWx1ZS5uYW1lID09PSBwYXJhbWV0ZXIubmFtZSkgfHxcblx0XHRcdFx0cGFyYW1ldGVyPy5hbm5vdGF0aW9ucz8uVUk/LlBhcmFtZXRlckRlZmF1bHRWYWx1ZT8udmFsdWVPZigpXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHRydWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZuUmVxdWVzdFNpZGVFZmZlY3RzKFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0c2lkZUVmZmVjdDogKEFjdGlvblNpZGVFZmZlY3RzVHlwZSAmIHsgY29udGV4dDogT0RhdGFWNENvbnRleHQgfSkgfCB1bmRlZmluZWQsXG5cdHBhcmFtZXRlcnM6IHtcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmc7XG5cdFx0c2VsZWN0ZWRJdGVtczogT0RhdGFWNENvbnRleHRbXTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD86IEludGVybmFsTW9kZWxDb250ZXh0IHwgbnVsbDtcblx0fSxcblx0Z3JvdXBJZDogc3RyaW5nLFxuXHRsb2NhbFByb21pc2U/OiBQcm9taXNlPHVua25vd24+W11cbik6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdGxldCBwcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdID0gbG9jYWxQcm9taXNlID8/IFtdO1xuXHQvLyB0cmlnZ2VyIGFjdGlvbnMgZnJvbSBzaWRlIGVmZmVjdHNcblx0aWYgKHNpZGVFZmZlY3QpIHtcblx0XHRwcm9taXNlcyA9IHByb21pc2VzLmNvbmNhdChcblx0XHRcdChzaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zID8/IFtdKS5tYXAoYXN5bmMgKGFjdGlvbikgPT4gc2lkZUVmZmVjdHNTZXJ2aWNlLmV4ZWN1dGVBY3Rpb24oYWN0aW9uLCBzaWRlRWZmZWN0LmNvbnRleHQsIGdyb3VwSWQpKSxcblx0XHRcdHNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zID8gc2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhzaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucywgc2lkZUVmZmVjdC5jb250ZXh0LCBncm91cElkKSA6IFtdXG5cdFx0KTtcblxuXHRcdGlmIChzaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXHRcdFx0XHRpZiAocGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXAgJiYgcGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChcblx0XHRcdFx0XHRcdHBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdFx0XHRKU09OLnBhcnNlKHBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdFx0XHRcdHBhcmFtZXRlcnMuc2VsZWN0ZWRJdGVtcyxcblx0XHRcdFx0XHRcdFwidGFibGVcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVxdWVzdGluZyBzaWRlIGVmZmVjdHNcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBFbmhhbmNlcyB0aGUgc2lkZSBlZmZlY3RzIG9mIHRoZSBvcGVyYXRpb25cbiAqXG4gKiBXaGVuIGEgbmV3IGVudGl0eSBpcyBjcmVhdGVkIHVzaW5nIGEgRGF0YUZpZWxkRm9yQWN0aW9uLCBhIG5ld1xuICogb0RhdGFDb250ZXh0QmluZGluZyBpcyBjcmVhdGVkIHRvIGV4ZWN1dGUgdGhlIGFjdGlvbi4gQnkgZGVmYXVsdCwgdGhpc1xuICogb0RhdGFDb250ZXh0QmluZGluZyBpcyByZWxhdGl2ZSB0byB0aGUgT2RhdGFMaXN0QmluZGluZyBvZiB0aGUgdGFibGUuXG4gKlxuICogQmVjYXVzZSBvZiB0aGlzIGRlcGVuZGVuY3ksIHdoZW4gYSBTaWRlRWZmZWN0cyBpcyBleGVjdXRlZCBvbiB0aGVcbiAqIGNvbnRleHQgaW50byB0aGUgT2RhdGFMaXN0QmluZGluZyB3aGVyZSB0aGUgb0RhdGFDb250ZXh0QmluZGluZyB3YXMgYm91bmQsIHRoaXMgU2lkZUVmZmVjdHMgaXMgYWxzbyB0cmlnZ2VyZWQgb24gdGhpc1xuICogb0RhdGFDb250ZXh0QmluZGluZy4gV2UgZG9uJ3QgbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2YgdGhlXG4gKiBvRGF0YUNvbnRleHRCaW5kaW5nLiBJdCBtZWFucyBldmVuIGlmIHRoZSBkcmFmdCByZWxhdGVkIHRvIHRoZSBhY3Rpb25cbiAqIGlzIHJlbW92ZWQsIHRoZSBvZGF0YUNvbnRleHRCaW5kaW5nIGlzIHN0aWxsIHRoZXJlLCBzbyBpZiBhIFNpZGVFZmZlY3RzXG4gKiBpcyBleGVjdXRlZCBvbiB0aGUgc291cmNlIHRhcmdldCBpbnRvIG9EYXRhQ29udGV4dEJpbmRpbmcsIGFuIGVycm9yIGZyb20gdGhlIGJhY2sgZW5kIHdpbGwgYmVcbiAqIHJlY2VpdmVkIGJlY2F1c2Ugd2UgYXNrIHRvIHJlZnJlc2ggYSBwcm9wZXJ0eSBvbiBhbiB1bmtub3duIGVudGl0eS5cbiAqXG4gKiBUaGUgU2lkZUVmZmVjdHMgYXJlIHJlcXVlc3RlZCBvbmx5IGlmIHRoZSBwYWdlIGlzIHN0aWxsIG9wZW4uXG4gKiBUaGlzIGF2b2lkcyBnZW5lcmF0aW5nIGlzc3VlcyB3aXRoIGdob3N0IG9EYXRhQ29udGV4dEJpbmRpbmcgbGlua2VkIHRvIGRlc3Ryb3llZCBjb250ZXh0LlxuICogQHBhcmFtIGFwcENvbXBvbmVudCBUaGUgYXBwbGljYXRpb24gY29tcG9uZW50XG4gKiBAcGFyYW0gb3BlcmF0aW9uQ29udGV4dEJpbmRpbmcgVGhlIG9wZXJhdGlvblxuICogQHBhcmFtIHJldHVybmVkQ29udGV4dCBUaGUgcmV0dXJuZWQgY29udGV4dCBvZiB0aGlzIG9wZXJhdGlvblxuICovXG5mdW5jdGlvbiBlbmhhbmNlU2lkZUVmZmVjdHMoXG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50IHwgdW5kZWZpbmVkLFxuXHRvcGVyYXRpb25Db250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZyxcblx0cmV0dXJuZWRDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZFxuKTogdm9pZCB7XG5cdGlmIChyZXR1cm5lZENvbnRleHQpIHtcblx0XHRjb25zdCBvcmlnaW4gPSBvcGVyYXRpb25Db250ZXh0QmluZGluZy5yZXF1ZXN0U2lkZUVmZmVjdHMuYmluZChvcGVyYXRpb25Db250ZXh0QmluZGluZyk7XG5cdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcucmVxdWVzdFNpZGVFZmZlY3RzID0gYXN5bmMgKC4uLmFyZ3M6IHVua25vd25bXSk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRhcHBDb21wb25lbnRcblx0XHRcdFx0XHQ/LmdldFJvb3RWaWV3Q29udHJvbGxlcigpXG5cdFx0XHRcdFx0LmdldEluc3RhbmNlZFZpZXdzKClcblx0XHRcdFx0XHQuZmluZCgocGFnZVZpZXc6IFZpZXcpID0+IHBhZ2VWaWV3LmdldEJpbmRpbmdDb250ZXh0KCkgPT09IHJldHVybmVkQ29udGV4dClcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gb3JpZ2luKC4uLmFyZ3MpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH07XG5cdH1cbn1cblxuLyoqXG4gKiBTdGF0aWMgZnVuY3Rpb25zIHRvIGNhbGwgT0RhdGEgYWN0aW9ucyAoYm91bmQvaW1wb3J0KSBhbmQgZnVuY3Rpb25zIChib3VuZC9pbXBvcnQpXG4gKiBAbmFtZXNwYWNlXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbW9kdWxlIGlzIG9ubHkgZm9yIGV4cGVyaW1lbnRhbCB1c2UhIDxici8+PGI+VGhpcyBpcyBvbmx5IGEgUE9DIGFuZCBtYXliZSBkZWxldGVkPC9iPlxuICogQHNpbmNlIDEuNTYuMFxuICovXG5jb25zdCBvcGVyYXRpb25zID0ge1xuXHRjYWxsQm91bmRBY3Rpb246IGNhbGxCb3VuZEFjdGlvbixcblx0Y2FsbEFjdGlvbkltcG9ydDogY2FsbEFjdGlvbkltcG9ydCxcblx0Y2FsbEJvdW5kRnVuY3Rpb246IGNhbGxCb3VuZEZ1bmN0aW9uLFxuXHRjYWxsRnVuY3Rpb25JbXBvcnQ6IGNhbGxGdW5jdGlvbkltcG9ydCxcblx0ZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0czogZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyxcblx0Y3JlYXRlaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZUZvckFjdGlvbkV4ZWN1dGlvbjogY3JlYXRlaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZUZvckFjdGlvbkV4ZWN1dGlvbixcblx0dmFsdWVzUHJvdmlkZWRGb3JBbGxNYW5kYXRvcnlQYXJhbWV0ZXJzOiBfdmFsdWVzUHJvdmlkZWRGb3JBbGxNYW5kYXRvcnlQYXJhbWV0ZXJzLFxuXHRhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrOiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrLFxuXHRhZnRlckFjdGlvblJlc29sdXRpb246IGFmdGVyQWN0aW9uUmVzb2x1dGlvbixcblx0Zm5SZXF1ZXN0U2lkZUVmZmVjdHM6IGZuUmVxdWVzdFNpZGVFZmZlY3RzLFxuXHRjaGVja1BhcmFtZXRlclR5cGVBbmRSZXR1cm5Db252ZXJ0ZWRWYWx1ZTogY2hlY2tQYXJhbWV0ZXJUeXBlQW5kUmV0dXJuQ29udmVydGVkVmFsdWVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG9wZXJhdGlvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXdDQSxNQUFNQSxTQUFTLEdBQUdDLFNBQVMsQ0FBQ0QsU0FBUztJQUNwQ0Usa0JBQWtCLEdBQUdELFNBQVMsQ0FBQ0Msa0JBQWtCO0VBQ2xELE1BQU1DLE1BQU0sR0FBR0MsVUFBVSxDQUFDRCxNQUFNO0VBcUVoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsZUFBZUUsZUFBZUEsQ0FDN0JDLFdBQW1CLEVBQ25CQyxRQUEwQixFQUMxQkMsTUFBa0IsRUFDbEJDLGFBQTJCLEVBQzNCQyxXQUFpQyxFQUNQO0lBQzFCLElBQUksQ0FBQ0gsUUFBUSxJQUFJQSxRQUFRLENBQUNJLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDdkM7TUFDQSxNQUFNLElBQUlDLEtBQUssQ0FBQyxvREFBb0QsQ0FBQztJQUN0RTtJQUVBLE1BQU1DLGlCQUFpQixHQUFHQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ1IsUUFBUSxDQUFDO0lBQ2pEO0lBQ0E7SUFDQTtJQUNBRyxXQUFXLENBQUNNLFNBQVMsR0FBR0YsS0FBSyxDQUFDQyxPQUFPLENBQUNSLFFBQVEsQ0FBQyxHQUFHQSxRQUFRLEdBQUcsQ0FBQ0EsUUFBUSxDQUFDO0lBRXZFLE1BQU1VLFVBQVUsR0FBR1QsTUFBTSxDQUFDVSxZQUFZLENBQUMsQ0FBQztNQUN2QztNQUNBO01BQ0FDLFdBQVcsR0FB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
|
|
1023
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb25zdGFudHMiLCJGRUxpYnJhcnkiLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJBY3Rpb24iLCJNZXNzYWdlQm94IiwiY2FsbEJvdW5kQWN0aW9uIiwic0FjdGlvbk5hbWUiLCJjb250ZXh0cyIsIm9Nb2RlbCIsIm9BcHBDb21wb25lbnQiLCJtUGFyYW1ldGVycyIsImxlbmd0aCIsIkVycm9yIiwiaXNDYWxsZWRXaXRoQXJyYXkiLCJBcnJheSIsImlzQXJyYXkiLCJhQ29udGV4dHMiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwic0FjdGlvblBhdGgiLCJnZXRNZXRhUGF0aCIsImdldFBhdGgiLCJvQm91bmRBY3Rpb24iLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImlzQ3JpdGljYWxBY3Rpb24iLCJBY3Rpb25SdW50aW1lIiwiZ2V0SXNBY3Rpb25Dcml0aWNhbCIsImV4dHJhY3RTaW5nbGVSZXN1bHQiLCJyZXN1bHQiLCJzdGF0dXMiLCJ2YWx1ZSIsInJlYXNvbiIsImNvbnZlcnRlZFR5cGVzIiwiY29udmVydFR5cGVzIiwiY29udmVydGVkQWN0aW9uIiwicmVzb2x2ZVBhdGgiLCJ0YXJnZXQiLCJjYWxsQWN0aW9uIiwiZSIsImNhbGxBY3Rpb25JbXBvcnQiLCJhY3Rpb25OYW1lIiwibW9kZWwiLCJhcHBDb21wb25lbnQiLCJwYXJhbWV0ZXJzIiwibWV0YU1vZGVsIiwiYWN0aW9uUGF0aCIsImNvbnZlcnRlZEFjdGlvbkltcG9ydCIsImFjdGlvbiIsInVuYm91bmRBY3Rpb25JbmRleCIsImFjdGlvbnMiLCJmaWx0ZXIiLCJuYW1lIiwiZmluZEluZGV4IiwiaXNCb3VuZCIsImFjdGlvbk5hbWVGcm9tTW9kZWwiLCJhY3Rpb25JbXBvcnQiLCJjYWxsQm91bmRGdW5jdGlvbiIsInNGdW5jdGlvbk5hbWUiLCJjb250ZXh0IiwiUHJvbWlzZSIsInJlamVjdCIsInNGdW5jdGlvblBhdGgiLCJvQm91bmRGdW5jdGlvbiIsIl9leGVjdXRlRnVuY3Rpb24iLCJjYWxsRnVuY3Rpb25JbXBvcnQiLCJiaW5kQ29udGV4dCIsIm9GdW5jdGlvbkltcG9ydCIsImdldE9iamVjdCIsIm9GdW5jdGlvbiIsImZ1bmN0aW9uVG9DYWxsIiwiZ3JvdXBJZCIsImV4ZWN1dGlvblByb21pc2UiLCJleGVjdXRlIiwic3VibWl0QmF0Y2giLCJnZXRCb3VuZENvbnRleHQiLCJjaGVja1BhcmFtZXRlclR5cGVBbmRSZXR1cm5Db252ZXJ0ZWRWYWx1ZSIsInBhcmFtZXRlciIsInVuZGVmaW5lZCIsIkJhc2VUeXBlIiwiX191aTVfcmVxdWlyZV9hc3luYyIsImRlZmF1bHQiLCJUeXBlTWFwIiwicGFyYW1ldGVyVHlwZSIsInR5cGUiLCJnZXRCYXNlVHlwZSIsIlN0cmluZyIsInR5cGVJbnN0YW5jZSIsImdldERhdGFUeXBlSW5zdGFuY2UiLCJwYXJzZVZhbHVlIiwib0FjdGlvbiIsInN0cmljdEhhbmRsaW5nVXRpbGl0aWVzIiwiaXM0MTJFeGVjdXRlZCIsInN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzIiwic3RyaWN0SGFuZGxpbmdQcm9taXNlcyIsInN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzIiwiZGVsYXlTdWNjZXNzTWVzc2FnZXMiLCJwcm9jZXNzZWRNZXNzYWdlSWRzIiwiU2V0IiwiZnVsbHlRdWFsaWZpZWROYW1lIiwicmVwbGFjZSIsImJHcm91cGVkIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiQ2hhbmdlU2V0IiwicmVzb2x2ZSIsIl9jb252ZXJ0ZWRBY3Rpb24kcGFyYSIsInNBY3Rpb25MYWJlbCIsImxhYmVsIiwiYlNraXBQYXJhbWV0ZXJEaWFsb2ciLCJza2lwUGFyYW1ldGVyRGlhbG9nIiwiYklzQ3JlYXRlQWN0aW9uIiwiYklzQ3JpdGljYWxBY3Rpb24iLCJzTWVzc2FnZXNQYXRoIiwiaU1lc3NhZ2VTaWRlRWZmZWN0IiwiaXNTYW1lRW50aXR5IiwiYlZhbHVlc1Byb3ZpZGVkRm9yQWxsTWFuZGF0b3J5UGFyYW1ldGVycyIsImFjdGlvbkRlZmluaXRpb24iLCJhY3Rpb25QYXJhbWV0ZXJzIiwic2xpY2UiLCJiQWN0aW9uTmVlZHNQYXJhbWV0ZXJEaWFsb2ciLCJhUGFyYW1ldGVyVmFsdWVzIiwicGFyYW1ldGVyVmFsdWVzIiwib0NvbXBvbmVudERhdGEiLCJnZXRDb21wb25lbnREYXRhIiwib1N0YXJ0dXBQYXJhbWV0ZXJzIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJldmVyeSIsIl9wYXJhbWV0ZXIkYW5ub3RhdGlvbiIsIl9wYXJhbWV0ZXIkYW5ub3RhdGlvbjIiLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGlkZGVuIiwidmFsdWVPZiIsIl92YWx1ZXNQcm92aWRlZEZvckFsbE1hbmRhdG9yeVBhcmFtZXRlcnMiLCJtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycyIsImRlZmF1bHRQYXJhbWV0ZXJzVmFsdWVzIiwiZm5PblN1Ym1pdHRlZCIsIm9uU3VibWl0dGVkIiwiZm5PblJlc3BvbnNlIiwib25SZXNwb25zZSIsImFBY3Rpb25QYXJhbWV0ZXJzIiwiYkdldEJvdW5kQ29udGV4dCIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsInNlbGVjdGVkSXRlbXMiLCJfbVBhcmFtZXRlcnMkYWRkaXRpb24iLCJjb252ZXJ0ZWRNZXRhRGF0YSIsImZpbHRlcmVkRW50aXR5U2V0IiwiZW50aXR5U2V0cyIsInNpbmdsZUVudGl0eVNldCIsImVudGl0eVR5cGUiLCJyZXR1cm5FbnRpdHlUeXBlIiwiY3VycmVudEVudGl0eVNldCIsInJldHVybkNvbGxlY3Rpb24iLCJzb3VyY2VFbnRpdHlUeXBlIiwiTW9kZWxIZWxwZXIiLCJpc0RyYWZ0Um9vdCIsIm1CaW5kaW5nUGFyYW1ldGVycyIsIiRzZWxlY3QiLCJhZGRpdGlvbmFsU2lkZUVmZmVjdCIsInBhdGhFeHByZXNzaW9ucyIsImdldE1lc3NhZ2VzUGF0aCIsImV4cCIsIl9jb252ZXJ0ZWRBY3Rpb24kcmV0dSIsImVudGl0eVByb3BlcnRpZXMiLCJmaW5kIiwicHJvcGVydHkiLCJzcGxpdCIsImluY2x1ZGVzIiwiX21QYXJhbWV0ZXJzJGFkZGl0aW9uMiIsInB1c2giLCJ0cmlnZ2VyQWN0aW9ucyIsInNwbGljZSIsImludGVybmFsTW9kZWxDb250ZXh0Iiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiaXNDcmVhdGVBY3Rpb24iLCJiT2JqZWN0UGFnZSIsImRpc2FibGVTdHJpY3RIYW5kbGluZyIsImNvbnRyb2xJZCIsImNvbnRyb2wiLCJwYXJlbnRDb250cm9sIiwiYnlJZCIsImlzU3RhdGljIiwiaXNDb2xsZWN0aW9uIiwib3BlcmF0aW9uUmVzdWx0IiwiZXhlY3V0aW9uV2l0RGlhbG9nIiwicGFyYW1ldGVyRGlhbG9nIiwiZ2V0Q29yZVVJRmFjdG9yeSIsIm5ld1BhcmFtZXRlckRpYWxvZyIsImVudGl0eVNldE5hbWUiLCJ2aWV3IiwibWVzc2FnZUhhbmRsZXIiLCJhY3Rpb25Ub0JlRXhlY3V0ZWQiLCJfZXhlY3V0ZUFjdGlvbiIsImJlZm9yZVNob3dpbmdNZXNzYWdlIiwiYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayIsImlnbm9yZUVUYWciLCJjcmVhdGVEaWFsb2ciLCJvcGVuRGlhbG9nIiwiY29uZmlybUNyaXRpY2FsQWN0aW9uIiwiYWZ0ZXJBY3Rpb25SZXNvbHV0aW9uIiwiaSIsIl9hUGFyYW1ldGVyVmFsdWVzJGZpbiIsImVsZW1lbnQiLCJhY3Rpb25QYXJhbWV0ZXIiLCJwYXJhbWV0ZXJWYWx1ZU5vdENvbnZlcnRlZCIsIl9vU3RhcnR1cFBhcmFtZXRlcnMkYSIsIl9hY3Rpb25QYXJhbWV0ZXIkYW5ubyIsIl9hY3Rpb25QYXJhbWV0ZXIkYW5ubzIiLCJfYWN0aW9uUGFyYW1ldGVyJGFubm8zIiwiUGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwib09wZXJhdGlvblJlc3VsdCIsIm1lc3NhZ2VzIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsImNvbmNhdCIsIl9tUGFyYW1ldGVycyRtZXNzYWdlSCIsInN0cmljdEhhbmRsaW5nRmFpbHMiLCJhRmFpbGVkQ29udGV4dHMiLCJmb3JFYWNoIiwiZmFpbCIsImdldENvbnRleHQiLCJvRmFpbGVkT3BlcmF0aW9uUmVzdWx0IiwiYWRkTWVzc2FnZXMiLCJzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCIsIm1lc3NhZ2VIYW5kbGluZyIsImhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzIiwiaXNBY3Rpb25TdWNjZXNzZnVsIiwiX29PcGVyYXRpb25SZXN1bHQiLCJyZXMiLCJzaG93TWVzc2FnZURpYWxvZyIsIm9uQmVmb3JlU2hvd01lc3NhZ2UiLCJhTWVzc2FnZXMiLCJzaG93TWVzc2FnZVBhcmFtZXRlcnNJbiIsImFTZWxlY3RlZENvbnRleHRzIiwidGhlbiIsImNsZWFyU3RyaWN0V2FybmluZ01lc3NhZ2VzIiwib0FjdGlvbkNvbnRleHQiLCJvUGFyZW50Q29udHJvbCIsImJvdW5kQWN0aW9uTmFtZSIsInN1ZmZpeFJlc291cmNlS2V5IiwicmVzb3VyY2VNb2RlbCIsImdldFJlc291cmNlTW9kZWwiLCJzQ29uZmlybWF0aW9uVGV4dCIsImdldFRleHQiLCJjb25maXJtIiwib25DbG9zZSIsInNBY3Rpb24iLCJPSyIsIm9PcGVyYXRpb24iLCJvRXJyb3IiLCJDYW5jZWxBY3Rpb25EaWFsb2ciLCIkSXNCb3VuZCIsInNlbGVjdGVkQ29udGV4dHMiLCJnZXRQcm9wZXJ0eSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJKU09OIiwicGFyc2UiLCJpc0EiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwiRGVsZXRlSGVscGVyIiwidXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMiLCJmaWx0ZXJBUERhbmRDb250ZXh0TWVzc2FnZXMiLCJlcnJvclRhcmdldHNJbkFQRCIsInVuYm91bmRNZXNzYWdlcyIsImlzQVBET1BlbiIsInJlbW92ZUNvbnRleHRNZXNzYWdlc2Zyb21Nb2RlbCIsImNvbnRhaW5zQm91bmRUcmFuc2lzdGlvbiIsImdldE1vZGVsIiwicmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJtZXNzYWdlc1RvU2hvdyIsInNob3dNZXNzYWdlSW5EaWFsb2ciLCJvRGlhbG9nIiwic2hvd01lc3NhZ2VCb3giLCJvQ29udHJvbCIsIm9SZXNvdXJjZUJ1bmRsZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsIm1lc3NhZ2UiLCJfbWVzc2FnZSRnZXRUYXJnZXRzIiwiZ2V0VGFyZ2V0cyIsIkFQRG1lc3NhZ2VzIiwiX21lc3NhZ2UkZ2V0VGFyZ2V0czIiLCJfbVBhcmFtZXRlcnMkYUFjdGlvblAiLCJzb21lIiwiYWN0aW9uUGFyYW0iLCJfbWVzc2FnZSRnZXRUYXJnZXRzMyIsIkFQRE1lc3NhZ2UiLCJpc0FQRFRhcmdldCIsIm1lc3NhZ2VNb2RlbCIsIm1lc3NhZ2VzSW5Nb2RlbCIsImFCb3VuZE1lc3NhZ2VzIiwiZ2V0TWVzc2FnZXMiLCJnZW5lcmljTWVzc2FnZSIsImlzRWRpdGFibGUiLCJub25FcnJvck1lc3NhZ2VFeGlzdHNJbkRpYWxvZyIsImdldFR5cGUiLCJub25FcnJvck1lc3NhZ2VFeGlzdHNJbk1vZGVsIiwiZ2V0R2VuZXJpY01zZ0ZvclNpbmdsZUVycm9ySW5DaGFuZ2VTZXQiLCJ1bnNoaWZ0Iiwic01lc3NhZ2UiLCJzRGVzY3JpcHRpb25UZXh0IiwiTWVzc2FnZSIsIk1lc3NhZ2VUeXBlIiwicGVyc2lzdGVudCIsImRlc2NyaXB0aW9uIiwiY29kZSIsImlzT3BlbiIsImNsb3NlIiwiZGVzdHJveSIsImZpbHRlcmVkTWVzc2FnZXMiLCJiSXNBUERPcGVuIiwiZm5HZXRNZXNzYWdlU3VidGl0bGUiLCJzZXRNZXNzYWdlU3VidGl0bGUiLCJiaW5kIiwic2hvd0NoYW5nZVNldEVycm9yRGlhbG9nIiwicmVzb3VyY2VCdW5kbGUiLCJ0ZWNobmljYWxEZXRhaWxzIiwiZmUiLCJjaGFuZ2VTZXRQcmVUZXh0Rm9yU2luZ2xlRXJyb3IiLCJleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzIiwic0dyb3VwSWQiLCJpQ29udGV4dExlbmd0aCIsImN1cnJlbnRfY29udGV4dF9pbmRleCIsImludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlIiwiaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCIsIm9BY3Rpb25Qcm9taXNlIiwiYkVuYWJsZVN0cmljdEhhbmRsaW5nIiwiX29Qcm9wZXJ0eSQiLCJzUGF0aCIsInNNZXRhUGF0aCIsIm9Qcm9wZXJ0eSIsIiRraW5kIiwiZW5oYW5jZVNpZGVFZmZlY3RzIiwib3BlcmF0aW9uc0hlbHBlciIsImZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZCIsIm9wZXJhdGlvbnMiLCJ1cGRhdGU0MTJUcmFuc2l0aW9uTWVzc2FnZXMiLCJyZWFsUmVzdWx0IiwiY2F0Y2giLCJBY3Rpb25FeGVjdXRpb25GYWlsZWQiLCJvbmx5U3VjY2Vzc01lc3NhZ2VzIiwiYXJndW1lbnRzIiwidW5Qcm9jZXNzZWRNZXNzYWdlcyIsInJlZHVjZSIsImFjYyIsImhhcyIsImdldElkIiwibmV3VHJhbnNpdGlvbkVycm9yTWVzc2FnZXNJZCIsImdldFBlcnNpc3RlbnQiLCJTdWNjZXNzIiwibWFwIiwiZnJvbSIsIk9iamVjdCIsInZhbHVlcyIsImNyZWF0ZWludGVybmFsT3BlcmF0aW9uc1Byb21pc2VGb3JBY3Rpb25FeGVjdXRpb24iLCJvTG9jYWxBY3Rpb25Qcm9taXNlIiwiTG9nIiwiZXJyb3IiLCJzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJkZWZhdWx0VmFsdWVzIiwic2V0UGFyYW1ldGVyIiwiYUFjdGlvblByb21pc2VzIiwiaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZU9iamVjdENoYW5nZVNldCIsImZuRXhlY3V0ZUFjdGlvbiIsImFjdGlvbkNvbnRleHQiLCJvU2lkZUVmZmVjdCIsImluZGl2aWR1YWxBY3Rpb25Qcm9taXNlIiwiZ2V0VXBkYXRlR3JvdXBJZCIsInJlcXVlc3RTaWRlRWZmZWN0cyIsImZuUmVxdWVzdFNpZGVFZmZlY3RzIiwiYWxsU2V0dGxlZCIsImZuRXhlY3V0ZVNpbmdsZUFjdGlvbiIsImludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3RJc29sYXRlZCIsImZuRXhlY3V0ZUNoYW5nZXNldCIsImFDaGFuZ2VTZXRMb2NhbFByb21pc2VzIiwibm9vcCIsInJlbmRlck1lc3NhZ2VWaWV3Iiwic2hQcm9taXNlIiwic2V0RGF0YSIsImZuSGFuZGxlUmVzdWx0cyIsImZuRXhlY3V0ZVNlcXVlbnRpYWxseSIsImNvbnRleHRzVG9FeGVjdXRlIiwicHJvY2Vzc09uZUFjdGlvbiIsImFjdGlvbkluZGV4IiwiX21QYXJhbWV0ZXJzJGNvbnRyb2wiLCJfbVBhcmFtZXRlcnMkY29udHJvbCQiLCJfbVBhcmFtZXRlcnMkY29udHJvbCQyIiwiaW5pdGlhbFRhYmxlQ29udGV4dCIsImdldFJvd0JpbmRpbmciLCJjYWxsIiwiZ2V0SGVhZGVyQ29udGV4dCIsInByb21pc2UiLCJpZCIsImZpbmFsbHkiLCJhbGxQcm9taXNlIiwiYmluZGluZyIsInNpZGVFZmZlY3QiLCJhbGwiLCJjdXJyZW50UHJvbWlzZVZhbHVlcyIsImN1cnJlbnRQcm9taXNlVmFsdWUiLCJfb0FjdGlvbiRnZXRCb3VuZENvbnQiLCJfb0FjdGlvbiIsIl9vQWN0aW9uJGdldEJvdW5kQ29udDIiLCJoaWRkZW5Bbm5vdGF0aW9uU2V0T25BbGxBY3Rpb25zIiwiX3BhcmFtZXRlciRhbm5vdGF0aW9uMyIsIl9wYXJhbWV0ZXIkYW5ub3RhdGlvbjQiLCJfcGFyYW1ldGVyJGFubm90YXRpb241IiwiX3BhcmFtZXRlciRhbm5vdGF0aW9uNiIsIl9wYXJhbWV0ZXIkYW5ub3RhdGlvbjciLCJfcGFyYW1ldGVyJGFubm90YXRpb244IiwiX3BhcmFtZXRlciRhbm5vdGF0aW9uOSIsIl9wYXJhbWV0ZXIkYW5ub3RhdGlvbjEwIiwiZmllbGRDb250cm9sIiwiQ29tbW9uIiwiRmllbGRDb250cm9sIiwiaXNNYW5kYXRvcnkiLCJ0b1N0cmluZyIsInBhcmFtZXRlclZhbHVlIiwibG9jYWxQcm9taXNlIiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwicHJvbWlzZXMiLCJleGVjdXRlQWN0aW9uIiwib3BlcmF0aW9uQ29udGV4dEJpbmRpbmciLCJyZXR1cm5lZENvbnRleHQiLCJvcmlnaW4iLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRJbnN0YW5jZWRWaWV3cyIsInBhZ2VWaWV3IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJ2YWx1ZXNQcm92aWRlZEZvckFsbE1hbmRhdG9yeVBhcmFtZXRlcnMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbImZhY2FkZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdEFjdGlvbkltcG9ydCxcblx0QWN0aW9uUGFyYW1ldGVyLFxuXHRBY3Rpb24gYXMgRWRtQWN0aW9uLFxuXHRBY3Rpb25QYXJhbWV0ZXIgYXMgRWRtQWN0aW9uUGFyYW1ldGVyLFxuXHRQcmltaXRpdmVUeXBlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgeyBnZXRDb3JlVUlGYWN0b3J5IH0gZnJvbSBcInNhcC9mZS9jb3JlL1VJUHJvdmlkZXJcIjtcbmltcG9ydCB0eXBlIHsgQmluZENvbnRleHRQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2VXaXRoSGVhZGVyLCBTaG93TWVzc2FnZVBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcywgdHlwZSBNZXRhTW9kZWxBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCBEZWxldGVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRGVsZXRlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIHsgQWN0aW9uU2lkZUVmZmVjdHNUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgTXVsdGlWYWx1ZUZpZWxkSXRlbSBmcm9tIFwic2FwL3VpL21kYy9maWVsZC9NdWx0aVZhbHVlRmllbGRJdGVtXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwiLi4vLi4vLi4vQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgb3BlcmF0aW9uc0hlbHBlciwgeyB0eXBlIFN0cmljdEhhbmRsaW5nUGFyYW1ldGVycywgdHlwZSBTdHJpY3RIYW5kbGluZ1V0aWxpdGllcyB9IGZyb20gXCIuLi8uLi8uLi9vcGVyYXRpb25zSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlSGFuZGxlciBmcm9tIFwiLi4vLi4vTWVzc2FnZUhhbmRsZXJcIjtcbmNvbnN0IENvbnN0YW50cyA9IEZFTGlicmFyeS5Db25zdGFudHMsXG5cdEludm9jYXRpb25Hcm91cGluZyA9IEZFTGlicmFyeS5JbnZvY2F0aW9uR3JvdXBpbmc7XG5jb25zdCBBY3Rpb24gPSBNZXNzYWdlQm94LkFjdGlvbjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uUmVzcG9uc2UgPSB1bmRlZmluZWQgfCBPRGF0YVY0Q29udGV4dCB8IFByb21pc2VTZXR0bGVkUmVzdWx0PHVuZGVmaW5lZCB8IE9EYXRhVjRDb250ZXh0PltdO1xuXG5leHBvcnQgdHlwZSBTaG93QWN0aW9uRGlhbG9nUGFyYW1ldGVycyA9IHtcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdGZuT25TdWJtaXR0ZWQ6IEZ1bmN0aW9uO1xuXHRmbk9uUmVzcG9uc2U6IEZ1bmN0aW9uO1xuXHRhY3Rpb25OYW1lOiBzdHJpbmc7XG5cdG1vZGVsOiBPRGF0YU1vZGVsO1xuXHRhQWN0aW9uUGFyYW1ldGVyczogRWRtQWN0aW9uUGFyYW1ldGVyW107XG5cdGRlZmF1bHRQYXJhbWV0ZXJzVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPjtcblx0YkdldEJvdW5kQ29udGV4dD86IGJvb2xlYW47XG5cdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHNlbGVjdGVkSXRlbXM6IE9EYXRhVjRDb250ZXh0W107XG5cdGFDb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblx0bUJpbmRpbmdQYXJhbWV0ZXJzPzogQmluZENvbnRleHRQYXJhbWV0ZXJzO1xuXHRhZGRpdGlvbmFsU2lkZUVmZmVjdD86IEFjdGlvblNpZGVFZmZlY3RzVHlwZTtcblx0Ykdyb3VwZWQ/OiBib29sZWFuO1xuXHRpbnRlcm5hbE1vZGVsQ29udGV4dD86IEludGVybmFsTW9kZWxDb250ZXh0IHwgbnVsbDtcblx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwPzogc3RyaW5nO1xuXHRpc0NyZWF0ZUFjdGlvbj86IGJvb2xlYW47XG5cdGJPYmplY3RQYWdlPzogYm9vbGVhbjtcblx0ZGlzYWJsZVN0cmljdEhhbmRsaW5nPzogYm9vbGVhbjtcblx0YklzQ3JlYXRlQWN0aW9uPzogYm9vbGVhbjtcblx0Z3JvdXBJZD86IHN0cmluZztcblx0aXNTdGF0aWM/OiBib29sZWFuO1xuXHRjb250cm9sPzogQ29udHJvbDtcblx0b0RpYWxvZz86IERpYWxvZztcblx0cmVxdWVzdFNpZGVFZmZlY3RzPzogRnVuY3Rpb247XG5cdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlPzogRnVuY3Rpb247XG59O1xuXG5leHBvcnQgdHlwZSBDYWxsQWN0aW9uUGFyYW1ldGVycyA9IHtcblx0cGFyYW1ldGVyVmFsdWVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlciB8IE11bHRpVmFsdWVGaWVsZEl0ZW1bXT5bXTtcblx0bGFiZWw/OiBzdHJpbmc7XG5cdGludm9jYXRpb25Hcm91cGluZz86IHN0cmluZztcblx0c2tpcFBhcmFtZXRlckRpYWxvZz86IGJvb2xlYW47XG5cdGJpbmRpbmdQYXJhbWV0ZXJzPzogQmluZENvbnRleHRQYXJhbWV0ZXJzO1xuXHRlbnRpdHlTZXROYW1lPzogc3RyaW5nO1xuXHRvblN1Ym1pdHRlZDogRnVuY3Rpb247XG5cdG9uUmVzcG9uc2U6IEZ1bmN0aW9uO1xuXHRwYXJlbnRDb250cm9sOiBWaWV3O1xuXHRjb250cm9sPzogQ29udHJvbDtcblx0YklzQ3JlYXRlQWN0aW9uPzogYm9vbGVhbjtcblx0aW50ZXJuYWxNb2RlbENvbnRleHQ/OiBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IG51bGw7XG5cdG9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcblx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyO1xuXHRiT2JqZWN0UGFnZT86IGJvb2xlYW47XG5cdGlzQ3JpdGljYWxBY3Rpb24/OiBib29sZWFuO1xuXHRjb250cm9sSWQ/OiBzdHJpbmc7XG5cdGlnbm9yZUVUYWc/OiBib29sZWFuO1xuXHR2aWV3OiBWaWV3IHwgbnVsbDtcbn0gJiB7XG5cdGJHZXRCb3VuZENvbnRleHQ/OiBib29sZWFuO1xuXHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG59ICYge1xuXHRiR3JvdXBlZD86IGJvb2xlYW47XG5cdGFDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdHNlbGVjdGVkSXRlbXM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXHRhZGRpdGlvbmFsU2lkZUVmZmVjdD86IEFjdGlvblNpZGVFZmZlY3RzVHlwZTtcblx0bUJpbmRpbmdQYXJhbWV0ZXJzPzogQmluZENvbnRleHRQYXJhbWV0ZXJzO1xuXHRkaXNhYmxlU3RyaWN0SGFuZGxpbmc/OiBib29sZWFuO1xuXHRncm91cElkPzogc3RyaW5nO1xufTtcblxudHlwZSBCYXNlVHlwZVBhcmFtZXRlciA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW47XG5cbi8qKlxuICogQ2FsbHMgYSBib3VuZCBhY3Rpb24gZm9yIG9uZSBvciBtdWx0aXBsZSBjb250ZXh0cy5cbiAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIGJlIGNhbGxlZFxuICogQHBhcmFtIGNvbnRleHRzIEVpdGhlciBvbmUgY29udGV4dCBvciBhbiBhcnJheSB3aXRoIGNvbnRleHRzIGZvciB3aGljaCB0aGUgYWN0aW9uIGlzIHRvIGJlIGJlIGNhbGxlZFxuICogQHBhcmFtIG9Nb2RlbCBPRGF0YSBNb2RlbFxuICogQHBhcmFtIG9BcHBDb21wb25lbnQgVGhlIEFwcENvbXBvbmVudFxuICogQHBhcmFtIFttUGFyYW1ldGVyc10gT3B0aW9uYWwsIGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMucGFyYW1ldGVyVmFsdWVzXSBBIG1hcCBvZiBhY3Rpb24gcGFyYW1ldGVyIG5hbWVzIGFuZCBwcm92aWRlZCB2YWx1ZXNcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzXSBBIG1hcCBvZiBiaW5kaW5nIHBhcmFtZXRlcnMgdGhhdCB3b3VsZCBiZSBwYXJ0IG9mICRzZWxlY3QgYW5kICRleHBhbmQgY29taW5nIGZyb20gc2lkZSBlZmZlY3RzIGZvciBib3VuZCBhY3Rpb25zXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0XSBBcnJheSBvZiBwcm9wZXJ0eSBwYXRocyB0byBiZSByZXF1ZXN0ZWQgaW4gYWRkaXRpb24gdG8gYWN0dWFsIHRhcmdldCBwcm9wZXJ0aWVzIG9mIHRoZSBzaWRlIGVmZmVjdFxuICogQHBhcmFtIFttUGFyYW1ldGVycy5zaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nXSBJZiBzZXQgYW5kIGlmIHBhcmFtZXRlcnMgZXhpc3QgdGhlIHVzZXIgcmV0cmlldmVzIGEgZGlhbG9nIHRvIGZpbGwgaW4gcGFyYW1ldGVycywgaWYgYWN0aW9uUGFyYW1ldGVycyBhcmUgcGFzc2VkIHRoZXkgYXJlIHNob3duIHRvIHRoZSB1c2VyXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmxhYmVsXSBBIGh1bWFuLXJlYWRhYmxlIGxhYmVsIGZvciB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZ10gTW9kZSBob3cgYWN0aW9ucyBhcmUgdG8gYmUgY2FsbGVkOiBDaGFuZ2VzZXQgdG8gcHV0IGFsbCBhY3Rpb24gY2FsbHMgaW50byBvbmUgY2hhbmdlc2V0LCBJc29sYXRlZCB0byBwdXQgdGhlbSBpbnRvIHNlcGFyYXRlIGNoYW5nZXNldHMsIGRlZmF1bHRzIHRvIElzb2xhdGVkXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm9uU3VibWl0dGVkXSBGdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgb25jZSB0aGUgYWN0aW9ucyBhcmUgc3VibWl0dGVkIHdpdGggYW4gYXJyYXkgb2YgcHJvbWlzZXNcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuZGVmYXVsdFBhcmFtZXRlcnNdIENhbiBjb250YWluIGRlZmF1bHQgcGFyYW1ldGVycyBmcm9tIEZMUCB1c2VyIGRlZmF1bHRzXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2xdIElmIHNwZWNpZmllZCwgdGhlIGRpYWxvZ3MgYXJlIGFkZGVkIGFzIGRlcGVuZGVudCBvZiB0aGUgcGFyZW50IGNvbnRyb2xcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuYkdldEJvdW5kQ29udGV4dF0gSWYgc3BlY2lmaWVkLCB0aGUgYWN0aW9uIHByb21pc2UgcmV0dXJucyB0aGUgYm91bmQgY29udGV4dFxuICogQHBhcmFtIFttUGFyYW1ldGVycy5pZ25vcmVFVGFnXSBJZiBzcGVjaWZpZWQsIHRoZSBhY3Rpb24gaXMgY2FsbGVkIHdpdGhvdXQgRVRhZyBoYW5kbGluZ1xuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIHJlc3BvbnNlIG9iamVjdHMgKFRPRE86IHRvIGJlIGNoYW5nZWQpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhbGxCb3VuZEFjdGlvbihcblx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0Y29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sXG5cdG9Nb2RlbDogT0RhdGFNb2RlbCxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRtUGFyYW1ldGVyczogQ2FsbEFjdGlvblBhcmFtZXRlcnNcbik6IFByb21pc2U8QWN0aW9uUmVzcG9uc2U+IHtcblx0aWYgKCFjb250ZXh0cyB8fCBjb250ZXh0cy5sZW5ndGggPT09IDApIHtcblx0XHQvL0luIEZyZWVzdHlsZSBhcHBzIGJvdW5kIGFjdGlvbnMgY2FuIGhhdmUgbm8gY29udGV4dFxuXHRcdHRocm93IG5ldyBFcnJvcihcIkJvdW5kIGFjdGlvbnMgYWx3YXlzIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBjb250ZXh0XCIpO1xuXHR9XG5cblx0Y29uc3QgaXNDYWxsZWRXaXRoQXJyYXkgPSBBcnJheS5pc0FycmF5KGNvbnRleHRzKTtcblx0Ly8gdGhpcyBtZXRob2QgZWl0aGVyIGFjY2VwdHMgc2luZ2xlIGNvbnRleHQgb3IgYW4gYXJyYXkgb2YgY29udGV4dHNcblx0Ly8gVE9ETzogUmVmYWN0b3IgdG8gYW4gdW5hbWJpZ3VvcyBBUElcblx0Ly8gaW4gY2FzZSBvZiBzaW5nbGUgY29udGV4dCB3cmFwIGludG8gYW4gYXJyYXkgZm9yIGNhbGxlZCBtZXRob2RzIChlc3AuIGNhbGxBY3Rpb24pXG5cdG1QYXJhbWV0ZXJzLmFDb250ZXh0cyA9IEFycmF5LmlzQXJyYXkoY29udGV4dHMpID8gY29udGV4dHMgOiBbY29udGV4dHNdO1xuXG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0Ly8gQW5hbHl6aW5nIG1ldGFNb2RlbFBhdGggZm9yIGFjdGlvbiBvbmx5IGZyb20gZmlyc3QgY29udGV4dCBzZWVtcyB3ZWlyZCwgYnV0IHByb2JhYmx5IHdvcmtzIGluIGFsbCBleGlzdGluZyBzY2VuYXJpb3MgLSBpZiBzZXZlcmFsIGNvbnRleHRzIGFyZSBwYXNzZWQsIHRoZXkgcHJvYmFibHlcblx0XHQvLyBiZWxvbmcgdG8gdGhlIHNhbWUgbWV0YW1vZGVscGF0aC4gVE9ETzogQ2hlY2ssIHdoZXRoZXIgdGhpcyBjYW4gYmUgaW1wcm92ZWQgLyBzY2VuYXJpb3Mgd2l0aCBkaWZmZXJlbnQgbWV0YU1vZGVsUGF0aHMgbWlnaHQgZXhpc3Rcblx0XHRzQWN0aW9uUGF0aCA9IGAke29NZXRhTW9kZWwuZ2V0TWV0YVBhdGgobVBhcmFtZXRlcnMuYUNvbnRleHRzWzBdLmdldFBhdGgoKSl9LyR7c0FjdGlvbk5hbWV9YCxcblx0XHRvQm91bmRBY3Rpb24gPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke3NBY3Rpb25QYXRofS9AJHVpNS5vdmVybG9hZC8wYCkhO1xuXHRtUGFyYW1ldGVycy5pc0NyaXRpY2FsQWN0aW9uID0gYXdhaXQgQWN0aW9uUnVudGltZS5nZXRJc0FjdGlvbkNyaXRpY2FsKG9NZXRhTW9kZWwsIHNBY3Rpb25QYXRoLCBtUGFyYW1ldGVycy5hQ29udGV4dHMpO1xuXG5cdC8vIFByb21pc2UgcmV0dXJuZWQgYnkgY2FsbEFjdGlvbiBjdXJyZW50bHkgaXMgcmVqZWN0ZWQgaW4gY2FzZSBvZiBleGVjdXRpb24gZm9yIG11bHRpcGxlIGNvbnRleHRzIHBhcnRseSBmYWlsaW5nLiBUaGlzIHNob3VsZCBiZSBjaGFuZ2VkIChzb21lIGZhaWxpbmcgY29udGV4dHMgZG8gbm90IG1lYW5cblx0Ly8gdGhhdCBmdW5jdGlvbiBkaWQgbm90IGZ1bGZpbGwgaXRzIHRhc2spLCBidXQgYXMgdGhpcyBpcyBhIGJpZ2dlciByZWZhY3RvcmluZywgZm9yIHRoZSB0aW1lIGJlaW5nIHdlIG5lZWQgdG8gZGVhbCB3aXRoIHRoYXQgYXQgdGhlIGNhbGxpbmcgcGxhY2UgKGkuZS4gaGVyZSlcblx0Ly8gPT4gcHJvdmlkZSB0aGUgc2FtZSBoYW5kbGVyIChtYXBwaW5nIGJhY2sgZnJvbSBhcnJheSB0byBzaW5nbGUgcmVzdWx0L2Vycm9yIGlmIG5lZWRlZCkgZm9yIHJlc29sdmVkL3JlamVjdGVkIGNhc2Vcblx0Y29uc3QgZXh0cmFjdFNpbmdsZVJlc3VsdCA9IGZ1bmN0aW9uIChyZXN1bHQ6IFByb21pc2VTZXR0bGVkUmVzdWx0PE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkPltdKTogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQge1xuXHRcdC8vIHNpbmdsZSBhY3Rpb24gY291bGQgYmUgcmVzb2x2ZWQgb3IgcmVqZWN0ZWRcblx0XHRpZiAocmVzdWx0WzBdLnN0YXR1cyA9PT0gXCJmdWxmaWxsZWRcIikge1xuXHRcdFx0cmV0dXJuIHJlc3VsdFswXS52YWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBkaWFsb2cgY2FuY2VsbGF0aW9uLCBubyBhcnJheSBpcyByZXR1cm5lZCA9PiB0aHJvdyB0aGUgcmVzdWx0LlxuXHRcdFx0Ly8gSWRlYWxseSwgZGlmZmVyZW50aWF0aW5nIHNob3VsZCBub3QgYmUgbmVlZGVkIGhlcmUgPT4gVE9ETzogRmluZCBiZXR0ZXIgc29sdXRpb24gd2hlbiBzZXBhcmF0aW5nIGRpYWxvZyBoYW5kbGluZyAoc2luZ2xlIG9iamVjdCB3aXRoIHNpbmdsZSByZXN1bHQpIGZyb20gYmFja2VuZFxuXHRcdFx0Ly8gZXhlY3V0aW9uIChwb3RlbnRpYWxseSBtdWx0aXBsZSBvYmplY3RzKVxuXHRcdFx0dGhyb3cgcmVzdWx0WzBdLnJlYXNvbiB8fCByZXN1bHQ7XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBjb252ZXJ0ZWRUeXBlcyA9IGNvbnZlcnRUeXBlcyhvTW9kZWwuZ2V0TWV0YU1vZGVsKCkpO1xuXHRjb25zdCBjb252ZXJ0ZWRBY3Rpb24gPSBjb252ZXJ0ZWRUeXBlcy5yZXNvbHZlUGF0aDxFZG1BY3Rpb24gfCB1bmRlZmluZWQ+KG9Cb3VuZEFjdGlvbi5nZXRQYXRoKCkpLnRhcmdldDtcblx0aWYgKCFjb252ZXJ0ZWRBY3Rpb24pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGJvdW5kIGFjdGlvblwiKTtcblx0fVxuXHR0cnkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNhbGxBY3Rpb24oY29udmVydGVkQWN0aW9uLCBvTW9kZWwsIG9Cb3VuZEFjdGlvbiwgb0FwcENvbXBvbmVudCwgbVBhcmFtZXRlcnMpO1xuXHRcdGlmIChpc0NhbGxlZFdpdGhBcnJheSkge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGV4dHJhY3RTaW5nbGVSZXN1bHQocmVzdWx0IGFzIFByb21pc2VTZXR0bGVkUmVzdWx0PE9EYXRhVjRDb250ZXh0PltdKTtcblx0XHR9XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAoaXNDYWxsZWRXaXRoQXJyYXkpIHtcblx0XHRcdHRocm93IGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBleHRyYWN0U2luZ2xlUmVzdWx0KGUgYXMgUHJvbWlzZVNldHRsZWRSZXN1bHQ8T0RhdGFWNENvbnRleHQ+W10pO1xuXHRcdH1cblx0fVxufVxuLyoqXG4gKiBDYWxscyBhbiBhY3Rpb24gaW1wb3J0LlxuICogQHBhcmFtIGFjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiBpbXBvcnQgdG8gYmUgY2FsbGVkXG4gKiBAcGFyYW0gbW9kZWwgQW4gaW5zdGFuY2Ugb2YgYW4gT0RhdGEgVjQgbW9kZWxcbiAqIEBwYXJhbSBhcHBDb21wb25lbnQgVGhlIEFwcENvbXBvbmVudFxuICogQHBhcmFtIFtwYXJhbWV0ZXJzXSBPcHRpb25hbCwgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICogQHBhcmFtIFtwYXJhbWV0ZXJzLnBhcmFtZXRlclZhbHVlc10gQSBtYXAgb2YgYWN0aW9uIHBhcmFtZXRlciBuYW1lcyBhbmQgcHJvdmlkZWQgdmFsdWVzXG4gKiBAcGFyYW0gW3BhcmFtZXRlcnMubGFiZWxdIEEgaHVtYW4tcmVhZGFibGUgbGFiZWwgZm9yIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSBbcGFyYW1ldGVycy5zaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nXSBJZiBzZXQgYW5kIGlmIHBhcmFtZXRlcnMgZXhpc3QgdGhlIHVzZXIgcmV0cmlldmVzIGEgZGlhbG9nIHRvIGZpbGwgaW4gcGFyYW1ldGVycywgaWYgYWN0aW9uUGFyYW1ldGVycyBhcmUgcGFzc2VkIHRoZXkgYXJlIHNob3duIHRvIHRoZSB1c2VyXG4gKiBAcGFyYW0gW3BhcmFtZXRlcnMub25TdWJtaXR0ZWRdIEZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBvbmNlIHRoZSBhY3Rpb25zIGFyZSBzdWJtaXR0ZWQgd2l0aCBhbiBhcnJheSBvZiBwcm9taXNlc1xuICogQHBhcmFtIFtwYXJhbWV0ZXJzLmRlZmF1bHRQYXJhbWV0ZXJzXSBDYW4gY29udGFpbiBkZWZhdWx0IHBhcmFtZXRlcnMgZnJvbSBGTFAgdXNlciBkZWZhdWx0c1xuICogQHBhcmFtIFtwYXJhbWV0ZXJzLmlnbm9yZUVUYWddIElmIHNwZWNpZmllZCwgdGhlIGFjdGlvbiBpcyBjYWxsZWQgd2l0aG91dCBFVGFnIGhhbmRsaW5nXG4gKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgcmVzcG9uc2Ugb2JqZWN0cyAoVE9ETzogdG8gYmUgY2hhbmdlZClcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2FsbEFjdGlvbkltcG9ydChcblx0YWN0aW9uTmFtZTogc3RyaW5nLFxuXHRtb2RlbDogT0RhdGFNb2RlbCxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdHBhcmFtZXRlcnM6IHtcblx0XHRwYXJhbWV0ZXJWYWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyIHwgTXVsdGlWYWx1ZUZpZWxkSXRlbVtdPltdO1xuXHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdHNraXBQYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRcdGJpbmRpbmdQYXJhbWV0ZXJzPzogQmluZENvbnRleHRQYXJhbWV0ZXJzO1xuXHRcdGVudGl0eVNldE5hbWU/OiBzdHJpbmc7XG5cdFx0YWRkaXRpb25hbFNpZGVFZmZlY3Q/OiBBY3Rpb25TaWRlRWZmZWN0c1R5cGU7XG5cdFx0b25TdWJtaXR0ZWQ6IEZ1bmN0aW9uO1xuXHRcdG9uUmVzcG9uc2U6IEZ1bmN0aW9uO1xuXHRcdHBhcmVudENvbnRyb2w6IFZpZXc7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/OiBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IG51bGw7XG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwPzogc3RyaW5nO1xuXHRcdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcjtcblx0XHRiT2JqZWN0UGFnZT86IGJvb2xlYW47XG5cdFx0c2VsZWN0ZWRJdGVtcz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0aWdub3JlRVRhZz86IGJvb2xlYW47XG5cdFx0dmlldzogVmlldyB8IG51bGw7XG5cdH0gJiB7XG5cdFx0aXNDcml0aWNhbEFjdGlvbj86IGJvb2xlYW47XG5cdH1cbik6IFByb21pc2U8QWN0aW9uUmVzcG9uc2U+IHtcblx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IGFjdGlvblBhdGggPSBgLyR7YWN0aW9uTmFtZX1gO1xuXHRjb25zdCBjb252ZXJ0ZWRUeXBlcyA9IGNvbnZlcnRUeXBlcyhtZXRhTW9kZWwpO1xuXHRjb25zdCBjb252ZXJ0ZWRBY3Rpb25JbXBvcnQgPSBjb252ZXJ0ZWRUeXBlcy5yZXNvbHZlUGF0aDxBY3Rpb25JbXBvcnQgfCB1bmRlZmluZWQ+KGFjdGlvblBhdGgpLnRhcmdldCxcblx0XHRjb252ZXJ0ZWRBY3Rpb24gPSBjb252ZXJ0ZWRBY3Rpb25JbXBvcnQ/LmFjdGlvbjtcblx0aWYgKCFjb252ZXJ0ZWRBY3Rpb24pIHtcblx0XHRyZXR1cm47XG5cdH1cblx0Y29uc3QgdW5ib3VuZEFjdGlvbkluZGV4ID0gY29udmVydGVkVHlwZXMuYWN0aW9uc1xuXHRcdFx0LmZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb24ubmFtZSA9PT0gY29udmVydGVkQWN0aW9uLm5hbWUpXG5cdFx0XHQuZmluZEluZGV4KChhY3Rpb24pID0+ICFhY3Rpb24uaXNCb3VuZCksXG5cdFx0YWN0aW9uTmFtZUZyb21Nb2RlbCA9IGNvbnZlcnRlZEFjdGlvbkltcG9ydC5hY3Rpb25OYW1lLFxuXHRcdGFjdGlvbkltcG9ydCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgLyR7YWN0aW9uTmFtZUZyb21Nb2RlbH0vJHt1bmJvdW5kQWN0aW9uSW5kZXh9YCk7XG5cdHBhcmFtZXRlcnMuaXNDcml0aWNhbEFjdGlvbiA9IGF3YWl0IEFjdGlvblJ1bnRpbWUuZ2V0SXNBY3Rpb25Dcml0aWNhbChtZXRhTW9kZWwsIGAke2FjdGlvblBhdGh9L0AkdWk1Lm92ZXJsb2FkYCk7XG5cdHJldHVybiBjYWxsQWN0aW9uKGNvbnZlcnRlZEFjdGlvbkltcG9ydC5hY3Rpb24sIG1vZGVsLCBhY3Rpb25JbXBvcnQsIGFwcENvbXBvbmVudCwgcGFyYW1ldGVycyk7XG59XG5hc3luYyBmdW5jdGlvbiBjYWxsQm91bmRGdW5jdGlvbihzRnVuY3Rpb25OYW1lOiBzdHJpbmcsIGNvbnRleHQ6IENvbnRleHQsIG9Nb2RlbDogT0RhdGFNb2RlbCk6IFByb21pc2U8T0RhdGFWNENvbnRleHQ+IHtcblx0aWYgKCFjb250ZXh0KSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwiQm91bmQgZnVuY3Rpb25zIGFsd2F5cyByZXF1aXJlcyBhIGNvbnRleHRcIik7XG5cdH1cblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRzRnVuY3Rpb25QYXRoID0gYCR7b01ldGFNb2RlbC5nZXRNZXRhUGF0aChjb250ZXh0LmdldFBhdGgoKSl9LyR7c0Z1bmN0aW9uTmFtZX1gLFxuXHRcdG9Cb3VuZEZ1bmN0aW9uID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRnVuY3Rpb25QYXRoKTtcblx0cmV0dXJuIF9leGVjdXRlRnVuY3Rpb24oc0Z1bmN0aW9uTmFtZSwgb01vZGVsLCBvQm91bmRGdW5jdGlvbiwgY29udGV4dCk7XG59XG5cbi8qKlxuICogQ2FsbHMgYSBmdW5jdGlvbiBpbXBvcnQuXG4gKiBAcGFyYW0gc0Z1bmN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkXG4gKiBAcGFyYW0gb01vZGVsIEFuIGluc3RhbmNlIG9mIGFuIE9EYXRhIHY0IG1vZGVsXG4gKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhbGxGdW5jdGlvbkltcG9ydChzRnVuY3Rpb25OYW1lOiBzdHJpbmcsIG9Nb2RlbDogT0RhdGFNb2RlbCk6IFByb21pc2U8dm9pZCB8IE9EYXRhVjRDb250ZXh0PiB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0c0Z1bmN0aW9uUGF0aCA9IG9Nb2RlbC5iaW5kQ29udGV4dChgLyR7c0Z1bmN0aW9uTmFtZX1gKS5nZXRQYXRoKCksXG5cdFx0b0Z1bmN0aW9uSW1wb3J0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgLyR7b01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRnVuY3Rpb25QYXRoKSEuZ2V0T2JqZWN0KFwiJEZ1bmN0aW9uXCIpfS8wYCk7XG5cdHJldHVybiBfZXhlY3V0ZUZ1bmN0aW9uKHNGdW5jdGlvbk5hbWUsIG9Nb2RlbCwgb0Z1bmN0aW9uSW1wb3J0KTtcbn1cbmFzeW5jIGZ1bmN0aW9uIF9leGVjdXRlRnVuY3Rpb24oXG5cdHNGdW5jdGlvbk5hbWU6IHN0cmluZyxcblx0b01vZGVsOiBPRGF0YU1vZGVsLFxuXHRvRnVuY3Rpb246IENvbnRleHQgfCBudWxsLFxuXHRjb250ZXh0PzogQ29udGV4dFxuKTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dD4ge1xuXHRpZiAoIW9GdW5jdGlvbj8uZ2V0T2JqZWN0KCkpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBGdW5jdGlvbiAke3NGdW5jdGlvbk5hbWV9IG5vdCBmb3VuZGApKTtcblx0fVxuXHRjb25zdCBmdW5jdGlvblRvQ2FsbDogT0RhdGFDb250ZXh0QmluZGluZyA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtjb250ZXh0Py5nZXRQYXRoKCkgPz8gXCJcIn0vJHtzRnVuY3Rpb25OYW1lfSguLi4pYCk7XG5cdGNvbnN0IGdyb3VwSWQgPSBjb250ZXh0ID8gXCJmdW5jdGlvbkdyb3VwXCIgOiBcImZ1bmN0aW9uSW1wb3J0XCI7XG5cdGNvbnN0IGV4ZWN1dGlvblByb21pc2UgPSBmdW5jdGlvblRvQ2FsbC5leGVjdXRlKGdyb3VwSWQpO1xuXHRvTW9kZWwuc3VibWl0QmF0Y2goZ3JvdXBJZCk7XG5cdGF3YWl0IGV4ZWN1dGlvblByb21pc2U7XG5cdHJldHVybiBmdW5jdGlvblRvQ2FsbC5nZXRCb3VuZENvbnRleHQoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2hlY2tQYXJhbWV0ZXJUeXBlQW5kUmV0dXJuQ29udmVydGVkVmFsdWUoXG5cdHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyLFxuXHR2YWx1ZT86IEJhc2VUeXBlUGFyYW1ldGVyIHwgbnVsbFxuKTogUHJvbWlzZTxCYXNlVHlwZVBhcmFtZXRlciB8IHVuZGVmaW5lZCB8IG51bGw+IHtcblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0Y29uc3QgQmFzZVR5cGUgPSAoYXdhaXQgaW1wb3J0KFwic2FwL3VpL21kYy9lbnVtcy9CYXNlVHlwZVwiKSkuZGVmYXVsdDtcblx0Y29uc3QgVHlwZU1hcCA9IChhd2FpdCBpbXBvcnQoXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIikpLmRlZmF1bHQ7XG5cdGNvbnN0IHBhcmFtZXRlclR5cGUgPSAoXG5cdFx0cGFyYW1ldGVyIGFzIHtcblx0XHRcdG5hbWU6IHN0cmluZztcblx0XHRcdHR5cGU/OiBzdHJpbmc7XG5cdFx0fVxuXHQpLnR5cGVcblx0XHQ/IFR5cGVNYXAuZ2V0QmFzZVR5cGUoXG5cdFx0XHRcdChcblx0XHRcdFx0XHRwYXJhbWV0ZXIgYXMge1xuXHRcdFx0XHRcdFx0bmFtZTogc3RyaW5nO1xuXHRcdFx0XHRcdFx0dHlwZTogc3RyaW5nO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KS50eXBlXG5cdFx0ICApXG5cdFx0OiBCYXNlVHlwZS5TdHJpbmc7XG5cdGNvbnN0IHR5cGVJbnN0YW5jZSA9IFR5cGVNYXAuZ2V0RGF0YVR5cGVJbnN0YW5jZShwYXJhbWV0ZXJUeXBlKTtcblx0cmV0dXJuIHR5cGVJbnN0YW5jZS5wYXJzZVZhbHVlKHZhbHVlLCBcInN0cmluZ1wiKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2FsbEFjdGlvbihcblx0Y29udmVydGVkQWN0aW9uOiBFZG1BY3Rpb24sXG5cdG9Nb2RlbDogT0RhdGFNb2RlbCxcblx0b0FjdGlvbjogQ29udGV4dCxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRtUGFyYW1ldGVyczogQ2FsbEFjdGlvblBhcmFtZXRlcnNcbik6IFByb21pc2U8QWN0aW9uUmVzcG9uc2U+IHtcblx0bGV0IHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzOiBTdHJpY3RIYW5kbGluZ1V0aWxpdGllcyA9IHtcblx0XHRpczQxMkV4ZWN1dGVkOiBmYWxzZSxcblx0XHRzdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlsczogW10sXG5cdFx0c3RyaWN0SGFuZGxpbmdQcm9taXNlczogW10sXG5cdFx0c3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXM6IFtdLFxuXHRcdGRlbGF5U3VjY2Vzc01lc3NhZ2VzOiBbXSxcblx0XHRwcm9jZXNzZWRNZXNzYWdlSWRzOiBuZXcgU2V0PHN0cmluZz4oKVxuXHR9O1xuXHRjb25zdCBzQWN0aW9uTmFtZSA9IGNvbnZlcnRlZEFjdGlvbi5pc0JvdW5kXG5cdFx0PyBjb252ZXJ0ZWRBY3Rpb24uZnVsbHlRdWFsaWZpZWROYW1lLnJlcGxhY2UoL1xcKC4qXFwpJC9nLCBcIlwiKSAvLyByZW1vdmUgdGhlIHBhcnQgcmVsYXRlZCB0byB0aGUgb3ZlcmxheVxuXHRcdDogY29udmVydGVkQWN0aW9uLm5hbWU7XG5cdG1QYXJhbWV0ZXJzLmJHcm91cGVkID0gbVBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nID09PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0O1xuXHRyZXR1cm4gbmV3IFByb21pc2U8QWN0aW9uUmVzcG9uc2U+KGFzeW5jIGZ1bmN0aW9uIChcblx0XHRyZXNvbHZlOiAodmFsdWU6IEFjdGlvblJlc3BvbnNlKSA9PiB2b2lkLFxuXHRcdHJlamVjdDogKHJlYXNvbj86IEVycm9yIHwgQWN0aW9uUmVzcG9uc2UpID0+IHZvaWRcblx0KSB7XG5cdFx0Y29uc3Qgc0FjdGlvbkxhYmVsID0gbVBhcmFtZXRlcnMubGFiZWw7XG5cdFx0bGV0IGJTa2lwUGFyYW1ldGVyRGlhbG9nID0gbVBhcmFtZXRlcnMuc2tpcFBhcmFtZXRlckRpYWxvZztcblx0XHRjb25zdCBhQ29udGV4dHMgPSBtUGFyYW1ldGVycy5hQ29udGV4dHM7XG5cdFx0Y29uc3QgYklzQ3JlYXRlQWN0aW9uID0gbVBhcmFtZXRlcnMuYklzQ3JlYXRlQWN0aW9uO1xuXHRcdGNvbnN0IGJJc0NyaXRpY2FsQWN0aW9uID0gbVBhcmFtZXRlcnMuaXNDcml0aWNhbEFjdGlvbjtcblx0XHRsZXQgb01ldGFNb2RlbDtcblx0XHRsZXQgc01lc3NhZ2VzUGF0aDogc3RyaW5nO1xuXHRcdGxldCBpTWVzc2FnZVNpZGVFZmZlY3Q7XG5cdFx0bGV0IGlzU2FtZUVudGl0eTtcblx0XHRsZXQgYlZhbHVlc1Byb3ZpZGVkRm9yQWxsTWFuZGF0b3J5UGFyYW1ldGVycztcblx0XHRjb25zdCBhY3Rpb25EZWZpbml0aW9uID0gb0FjdGlvbi5nZXRPYmplY3QoKSBhcyBNZXRhTW9kZWxBY3Rpb247XG5cblx0XHQvL2luIGNhc2Ugb2YgYm91bmQgYWN0aW9ucywgaWdub3JlIHRoZSBmaXJzdCBwYXJhbWV0ZXIgYW5kIGNvbnNpZGVyIHRoZSByZXN0XG5cdFx0Y29uc3QgYWN0aW9uUGFyYW1ldGVycyA9IGNvbnZlcnRlZEFjdGlvbi5pc0JvdW5kID8gY29udmVydGVkQWN0aW9uLnBhcmFtZXRlcnMuc2xpY2UoMSkgOiBjb252ZXJ0ZWRBY3Rpb24ucGFyYW1ldGVycztcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBhY3Rpb24gaGFzIHBhcmFtZXRlcnMgYW5kIHdvdWxkIG5lZWQgYSBwYXJhbWV0ZXIgZGlhbG9nXG5cdFx0Ly8gVGhlIHBhcmFtZXRlciBSZXN1bHRJc0FjdGl2ZUVudGl0eSBpcyBhbHdheXMgaGlkZGVuIGluIHRoZSBkaWFsb2chIEhlbmNlIGlmXG5cdFx0Ly8gdGhpcyBpcyB0aGUgb25seSBwYXJhbWV0ZXIsIHRoaXMgaXMgdHJlYXRlZCBhcyBubyBwYXJhbWV0ZXIgaGVyZSBiZWNhdXNlIHRoZVxuXHRcdC8vIGRpYWxvZyB3b3VsZCBiZSBlbXB0eSFcblx0XHQvLyBGSVhNRTogU2hvdWxkIG9ubHkgaWdub3JlIHRoaXMgaWYgdGhpcyBpcyBhICdjcmVhdGUnIGFjdGlvbiwgb3RoZXJ3aXNlIGl0IGlzIGp1c3Qgc29tZSBub3JtYWwgcGFyYW1ldGVyIHRoYXQgaGFwcGVucyB0byBoYXZlIHRoaXMgbmFtZVxuXHRcdGNvbnN0IGJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZyA9XG5cdFx0XHRhY3Rpb25QYXJhbWV0ZXJzLmxlbmd0aCA+IDAgJiYgIShhY3Rpb25QYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMSAmJiBhY3Rpb25QYXJhbWV0ZXJzWzBdLm5hbWUgPT09IFwiUmVzdWx0SXNBY3RpdmVFbnRpdHlcIik7XG5cblx0XHQvLyBQcm92aWRlZCB2YWx1ZXMgZm9yIHRoZSBhY3Rpb24gcGFyYW1ldGVycyBmcm9tIGludm9rZUFjdGlvbiBjYWxsXG5cdFx0Y29uc3QgYVBhcmFtZXRlclZhbHVlcyA9IG1QYXJhbWV0ZXJzLnBhcmFtZXRlclZhbHVlcztcblxuXHRcdC8vIERldGVybWluZSBzdGFydHVwIHBhcmFtZXRlcnMgaWYgcHJvdmlkZWRcblx0XHRjb25zdCBvQ29tcG9uZW50RGF0YSA9IG9BcHBDb21wb25lbnQuZ2V0Q29tcG9uZW50RGF0YSgpO1xuXHRcdGNvbnN0IG9TdGFydHVwUGFyYW1ldGVycyA9IChvQ29tcG9uZW50RGF0YSAmJiBvQ29tcG9uZW50RGF0YS5zdGFydHVwUGFyYW1ldGVycykgfHwge307XG5cblx0XHQvLyBJZiBhbGwgcGFyYW1ldGVycyBhcmUgaGlkZGVuICBhbmQgYWxsIG1hbmRhdG9yeSBwYXJhbWV0ZXJzIHZhbHVlcyBhcmUgYXZhaWxhYmxlLCB0aGVuIHdlIHNraXAgdGhlIGRpYWxvZy5cblx0XHRiU2tpcFBhcmFtZXRlckRpYWxvZyA9XG5cdFx0XHRhY3Rpb25QYXJhbWV0ZXJzLmxlbmd0aCAmJiBhY3Rpb25QYXJhbWV0ZXJzLmV2ZXJ5KChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci5hbm5vdGF0aW9ucy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWUpXG5cdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHQ6IGJTa2lwUGFyYW1ldGVyRGlhbG9nO1xuXHRcdC8vIEluIGNhc2UgYW4gYWN0aW9uIHBhcmFtZXRlciBpcyBuZWVkZWQsIGFuZCB3ZSBzaGFsbCBza2lwIHRoZSBkaWFsb2csIGNoZWNrIGlmIHZhbHVlcyBhcmUgcHJvdmlkZWQgZm9yIGFsbCBwYXJhbWV0ZXJzXG5cdFx0aWYgKGJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZyAmJiBiU2tpcFBhcmFtZXRlckRpYWxvZykge1xuXHRcdFx0YlZhbHVlc1Byb3ZpZGVkRm9yQWxsTWFuZGF0b3J5UGFyYW1ldGVycyA9IF92YWx1ZXNQcm92aWRlZEZvckFsbE1hbmRhdG9yeVBhcmFtZXRlcnMoXG5cdFx0XHRcdCEhYklzQ3JlYXRlQWN0aW9uLFxuXHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRhUGFyYW1ldGVyVmFsdWVzLFxuXHRcdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnNcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Ly8gRGVwZW5kaW5nIG9uIHRoZSBwcmV2aW91c2x5IGRldGVybWluZWQgZGF0YSwgZWl0aGVyIHNldCBhIGRpYWxvZyBvciBsZWF2ZSBpdCBlbXB0eSB3aGljaFxuXHRcdC8vIHdpbGwgbGVhZCB0byBkaXJlY3QgZXhlY3V0aW9uIG9mIHRoZSBhY3Rpb24gd2l0aG91dCBhIGRpYWxvZ1xuXG5cdFx0Y29uc3QgbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnM6IFNob3dBY3Rpb25EaWFsb2dQYXJhbWV0ZXJzID0ge1xuXHRcdFx0ZGVmYXVsdFBhcmFtZXRlcnNWYWx1ZXM6IHt9LFxuXHRcdFx0YXBwQ29tcG9uZW50OiBvQXBwQ29tcG9uZW50LFxuXHRcdFx0Zm5PblN1Ym1pdHRlZDogbVBhcmFtZXRlcnMub25TdWJtaXR0ZWQsXG5cdFx0XHRmbk9uUmVzcG9uc2U6IG1QYXJhbWV0ZXJzLm9uUmVzcG9uc2UsXG5cdFx0XHRhY3Rpb25OYW1lOiBzQWN0aW9uTmFtZSxcblx0XHRcdGFDb250ZXh0czogW10sXG5cdFx0XHRtb2RlbDogb01vZGVsLFxuXHRcdFx0YUFjdGlvblBhcmFtZXRlcnM6IGFjdGlvblBhcmFtZXRlcnMsXG5cdFx0XHRiR2V0Qm91bmRDb250ZXh0OiBtUGFyYW1ldGVycy5iR2V0Qm91bmRDb250ZXh0LFxuXHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24sXG5cdFx0XHRsYWJlbDogbVBhcmFtZXRlcnMubGFiZWwsXG5cdFx0XHRzZWxlY3RlZEl0ZW1zOiBtUGFyYW1ldGVycy5zZWxlY3RlZEl0ZW1zIVxuXHRcdH07XG5cdFx0aWYgKGNvbnZlcnRlZEFjdGlvbi5pc0JvdW5kKSB7XG5cdFx0XHRvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpO1xuXG5cdFx0XHRjb25zdCBjb252ZXJ0ZWRNZXRhRGF0YSA9IGNvbnZlcnRUeXBlcyhvTWV0YU1vZGVsKTtcblx0XHRcdGNvbnN0IGZpbHRlcmVkRW50aXR5U2V0ID0gY29udmVydGVkTWV0YURhdGEuZW50aXR5U2V0cy5maWx0ZXIoXG5cdFx0XHRcdChzaW5nbGVFbnRpdHlTZXQpID0+IHNpbmdsZUVudGl0eVNldC5lbnRpdHlUeXBlID09PSBjb252ZXJ0ZWRBY3Rpb24ucmV0dXJuRW50aXR5VHlwZVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IGN1cnJlbnRFbnRpdHlTZXQgPSBmaWx0ZXJlZEVudGl0eVNldC5sZW5ndGggPiAwID8gZmlsdGVyZWRFbnRpdHlTZXRbMF0gOiB1bmRlZmluZWQ7XG5cblx0XHRcdGlzU2FtZUVudGl0eSA9XG5cdFx0XHRcdCFjb252ZXJ0ZWRBY3Rpb24ucmV0dXJuQ29sbGVjdGlvbiAmJlxuXHRcdFx0XHRjb252ZXJ0ZWRBY3Rpb24ucmV0dXJuRW50aXR5VHlwZSAmJlxuXHRcdFx0XHRjb252ZXJ0ZWRBY3Rpb24uc291cmNlRW50aXR5VHlwZSA9PT0gY29udmVydGVkQWN0aW9uLnJldHVybkVudGl0eVR5cGU7XG5cblx0XHRcdGlmIChpc1NhbWVFbnRpdHkgJiYgTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoY3VycmVudEVudGl0eVNldCkpIHtcblx0XHRcdFx0bVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzID8/PSB7fTtcblx0XHRcdFx0bVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3QgPSBtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdFxuXHRcdFx0XHRcdD8gYCR7bVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3R9LEhhc0FjdGl2ZUVudGl0eWBcblx0XHRcdFx0XHQ6IFwiSGFzQWN0aXZlRW50aXR5XCI7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdD8ucGF0aEV4cHJlc3Npb25zKSB7XG5cdFx0XHRcdHNNZXNzYWdlc1BhdGggPSBNb2RlbEhlbHBlci5nZXRNZXNzYWdlc1BhdGgob01ldGFNb2RlbCwgYUNvbnRleHRzIVswXS5nZXRQYXRoKCkpITtcblxuXHRcdFx0XHRpZiAoc01lc3NhZ2VzUGF0aCkge1xuXHRcdFx0XHRcdC8vICcqJyBlZmZlY3RpdmVseSBpbmNsdWRlcyB0aGUgbWVzc2FnZXMgcGF0aCBpZiB0aGVyZSBpcyBvbmVcblx0XHRcdFx0XHRpTWVzc2FnZVNpZGVFZmZlY3QgPSBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMuZmluZEluZGV4KFxuXHRcdFx0XHRcdFx0KGV4cCkgPT4gdHlwZW9mIGV4cCA9PT0gXCJzdHJpbmdcIiAmJiAoZXhwID09PSBzTWVzc2FnZXNQYXRoIHx8IGV4cCA9PT0gXCIqXCIpXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdC8vIEFkZCBTQVBfTWVzc2FnZXMgYnkgZGVmYXVsdCBpZiBub3QgYW5ub3RhdGVkIGJ5IHNpZGUgZWZmZWN0cywgYWN0aW9uIGRvZXMgbm90IHJldHVybiBhIGNvbGxlY3Rpb24gYW5kXG5cdFx0XHRcdFx0Ly8gdGhlIHJldHVybiB0eXBlIGlzIHRoZSBzYW1lIGFzIHRoZSBib3VuZCB0eXBlXG5cdFx0XHRcdFx0aWYgKGlNZXNzYWdlU2lkZUVmZmVjdCA+IC0xIHx8IGlzU2FtZUVudGl0eSkge1xuXHRcdFx0XHRcdFx0Ly8gdGhlIG1lc3NhZ2UgcGF0aCBpcyBhbm5vdGF0ZWQgYXMgc2lkZSBlZmZlY3QuIEFzIHRoZXJlJ3Mgbm8gYmluZGluZyBmb3IgaXQgYW5kIHRoZSBtb2RlbCBkb2VzIGN1cnJlbnRseSBub3QgYWxsb3dcblx0XHRcdFx0XHRcdC8vIHRvIGFkZCBpdCBhdCBhIGxhdGVyIHBvaW50IG9mIHRpbWUgd2UgaGF2ZSB0byB0YWtlIGNhcmUgaXQncyBwYXJ0IG9mIHRoZSAkc2VsZWN0IG9mIHRoZSBQT1NULCB0aGVyZWZvcmUgbW92aW5nIGl0LlxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzID8/PSB7fTtcblxuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZWRBY3Rpb24ucmV0dXJuRW50aXR5VHlwZT8uZW50aXR5UHJvcGVydGllcy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkubmFtZSA9PT0gc01lc3NhZ2VzUGF0aCkgJiZcblx0XHRcdFx0XHRcdFx0IShtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdCA/PyBcIlwiKS5zcGxpdChcIixcIikuaW5jbHVkZXMoc01lc3NhZ2VzUGF0aClcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdCA9IG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0XG5cdFx0XHRcdFx0XHRcdFx0PyBgJHttUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdH0sJHtzTWVzc2FnZXNQYXRofWBcblx0XHRcdFx0XHRcdFx0XHQ6IHNNZXNzYWdlc1BhdGg7XG5cdFx0XHRcdFx0XHRcdC8vIEFkZCBzaWRlIGVmZmVjdHMgYXQgZW50aXR5IGxldmVsIGJlY2F1c2UgJHNlbGVjdCBzdG9wcyB0aGVzZSBiZWluZyByZXR1cm5lZCBieSB0aGUgYWN0aW9uXG5cdFx0XHRcdFx0XHRcdC8vIE9ubHkgaWYgbm8gb3RoZXIgc2lkZSBlZmZlY3RzIHdlcmUgYWRkZWQgZm9yIE1lc3NhZ2VzXG5cdFx0XHRcdFx0XHRcdGlmIChpTWVzc2FnZVNpZGVFZmZlY3QgPT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLnB1c2goXCIqXCIpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zPy5sZW5ndGggPT09IDAgJiYgaU1lc3NhZ2VTaWRlRWZmZWN0ID4gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBubyB0cmlnZ2VyIGFjdGlvbiB0aGVyZWZvcmUgbm8gbmVlZCB0byByZXF1ZXN0IG1lc3NhZ2VzIGFnYWluXG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLnNwbGljZShpTWVzc2FnZVNpZGVFZmZlY3QsIDEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFDb250ZXh0cyA9IGFDb250ZXh0cyA/PyBbXTtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycyA9IG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycztcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ID0gbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3Q7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5iR3JvdXBlZCA9IG1QYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldDtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ID0gbVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXAgPSBtUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXA7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pc0NyZWF0ZUFjdGlvbiA9IGJJc0NyZWF0ZUFjdGlvbjtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmJPYmplY3RQYWdlID0gbVBhcmFtZXRlcnMuYk9iamVjdFBhZ2U7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5kaXNhYmxlU3RyaWN0SGFuZGxpbmcgPSBtUGFyYW1ldGVycy5kaXNhYmxlU3RyaWN0SGFuZGxpbmc7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5ncm91cElkID0gbVBhcmFtZXRlcnMuZ3JvdXBJZDtcblx0XHRcdGlmIChtUGFyYW1ldGVycy5jb250cm9sSWQpIHtcblx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuY29udHJvbCA9IG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wuYnlJZChtUGFyYW1ldGVycy5jb250cm9sSWQpIGFzIENvbnRyb2w7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmNvbnRyb2wgPSBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5jb250cm9sO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuY29udHJvbCA9IG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2w7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmNvbnRyb2wgPSBtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCA9IG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0O1xuXHRcdGlmIChiSXNDcmVhdGVBY3Rpb24pIHtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmJJc0NyZWF0ZUFjdGlvbiA9IGJJc0NyZWF0ZUFjdGlvbjtcblx0XHR9XG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaXNTdGF0aWMgPSBjb252ZXJ0ZWRBY3Rpb24uaXNCb3VuZCAmJiAhIWNvbnZlcnRlZEFjdGlvbi5wYXJhbWV0ZXJzWzBdPy5pc0NvbGxlY3Rpb247XG5cblx0XHRsZXQgb3BlcmF0aW9uUmVzdWx0O1xuXHRcdGxldCBleGVjdXRpb25XaXREaWFsb2cgPSBmYWxzZTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKGJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZykge1xuXHRcdFx0XHRpZiAoIShiU2tpcFBhcmFtZXRlckRpYWxvZyAmJiBiVmFsdWVzUHJvdmlkZWRGb3JBbGxNYW5kYXRvcnlQYXJhbWV0ZXJzKSkge1xuXHRcdFx0XHRcdGV4ZWN1dGlvbldpdERpYWxvZyA9IHRydWU7XG5cdFx0XHRcdFx0Y29uc3QgcGFyYW1ldGVyRGlhbG9nID0gZ2V0Q29yZVVJRmFjdG9yeSgpLm5ld1BhcmFtZXRlckRpYWxvZyhcblx0XHRcdFx0XHRcdGNvbnZlcnRlZEFjdGlvbixcblx0XHRcdFx0XHRcdG9BY3Rpb24gYXMgT0RhdGFWNENvbnRleHQsXG5cdFx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdGFQYXJhbWV0ZXJWYWx1ZXMsXG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5lbnRpdHlTZXROYW1lLFxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMudmlldyBhcyBGRVZpZXcgfCBudWxsLFxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0YWN0aW9uVG9CZUV4ZWN1dGVkOiBfZXhlY3V0ZUFjdGlvbixcblx0XHRcdFx0XHRcdFx0YmVmb3JlU2hvd2luZ01lc3NhZ2U6IGFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2tcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pZ25vcmVFVGFnXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRhd2FpdCBwYXJhbWV0ZXJEaWFsb2cuY3JlYXRlRGlhbG9nKCk7XG5cdFx0XHRcdFx0b3BlcmF0aW9uUmVzdWx0ID0gYXdhaXQgcGFyYW1ldGVyRGlhbG9nLm9wZW5EaWFsb2cobVBhcmFtZXRlcnMucGFyZW50Q29udHJvbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYklzQ3JpdGljYWxBY3Rpb24pIHtcblx0XHRcdFx0ZXhlY3V0aW9uV2l0RGlhbG9nID0gdHJ1ZTtcblx0XHRcdFx0b3BlcmF0aW9uUmVzdWx0ID0gYXdhaXQgY29uZmlybUNyaXRpY2FsQWN0aW9uKFxuXHRcdFx0XHRcdHNBY3Rpb25OYW1lLFxuXHRcdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0c0FjdGlvbkxhYmVsLFxuXHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0YVBhcmFtZXRlclZhbHVlcyxcblx0XHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wsXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMuZW50aXR5U2V0TmFtZSxcblx0XHRcdFx0XHRtUGFyYW1ldGVycy5tZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0XHRcdFx0XHRtUGFyYW1ldGVycy52aWV3LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmlnbm9yZUVUYWdcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZWplY3QoZSBhcyBFcnJvciB8IEFjdGlvblJlc3BvbnNlKTtcblx0XHR9XG5cdFx0aWYgKGV4ZWN1dGlvbldpdERpYWxvZykge1xuXHRcdFx0YWZ0ZXJBY3Rpb25SZXNvbHV0aW9uKG1QYXJhbWV0ZXJzLCBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycywgYWN0aW9uRGVmaW5pdGlvbik7XG5cdFx0XHRyZXNvbHZlKG9wZXJhdGlvblJlc3VsdCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gVGFrZSBvdmVyIGFsbCBwcm92aWRlZCBwYXJhbWV0ZXIgdmFsdWVzIGFuZCBjYWxsIHRoZSBhY3Rpb24uXG5cdFx0Ly8gVGhpcyBzaGFsbCBvbmx5IGhhcHBlbiBpZiB2YWx1ZXMgYXJlIHByb3ZpZGVkIGZvciBhbGwgdGhlIHBhcmFtZXRlcnMsIG90aGVyd2lzZSB0aGUgcGFyYW1ldGVyIGRpYWxvZyBzaGFsbCBiZSBzaG93biB3aGljaCBpcyBlbnN1cmVkIGVhcmxpZXJcblxuXHRcdGlmIChhUGFyYW1ldGVyVmFsdWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGkgaW4gbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuZGVmYXVsdFBhcmFtZXRlcnNWYWx1ZXNbbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnNbaV0ubmFtZV0gPVxuXHRcdFx0XHRcdGFQYXJhbWV0ZXJWYWx1ZXM/LmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQubmFtZSA9PT0gbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnNbaV0ubmFtZSk/LnZhbHVlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgYWN0aW9uUGFyYW1ldGVyLCBwYXJhbWV0ZXJWYWx1ZU5vdENvbnZlcnRlZDtcblx0XHRcdGZvciAoY29uc3QgaSBpbiBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXIgPSBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVyc1tpXTtcblx0XHRcdFx0cGFyYW1ldGVyVmFsdWVOb3RDb252ZXJ0ZWQgPVxuXHRcdFx0XHRcdChvU3RhcnR1cFBhcmFtZXRlcnNbYWN0aW9uUGFyYW1ldGVyLm5hbWVdPy5bMF0gYXMgQmFzZVR5cGVQYXJhbWV0ZXIpIHx8XG5cdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVyLmFubm90YXRpb25zPy5VST8uUGFyYW1ldGVyRGVmYXVsdFZhbHVlPy52YWx1ZU9mKCk7XG5cdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmRlZmF1bHRQYXJhbWV0ZXJzVmFsdWVzW2FjdGlvblBhcmFtZXRlci5uYW1lXSA9XG5cdFx0XHRcdFx0cGFyYW1ldGVyVmFsdWVOb3RDb252ZXJ0ZWQgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHRcdFx0PyBwYXJhbWV0ZXJWYWx1ZU5vdENvbnZlcnRlZFxuXHRcdFx0XHRcdFx0OiBhd2FpdCBjaGVja1BhcmFtZXRlclR5cGVBbmRSZXR1cm5Db252ZXJ0ZWRWYWx1ZShhY3Rpb25QYXJhbWV0ZXIsIHBhcmFtZXRlclZhbHVlTm90Q29udmVydGVkKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0bGV0IG9PcGVyYXRpb25SZXN1bHQ6IHVuZGVmaW5lZCB8IE9EYXRhVjRDb250ZXh0IHwgUHJvbWlzZVNldHRsZWRSZXN1bHQ8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+W107XG5cdFx0dHJ5IHtcblx0XHRcdG9PcGVyYXRpb25SZXN1bHQgPSBhd2FpdCBfZXhlY3V0ZUFjdGlvbihcblx0XHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wsXG5cdFx0XHRcdG1QYXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0XHRcdFx0bVBhcmFtZXRlcnMuaWdub3JlRVRhZ1xuXHRcdFx0KTtcblxuXHRcdFx0Y29uc3QgbWVzc2FnZXMgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJlxuXHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5pczQxMkV4ZWN1dGVkICYmXG5cdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzLmxlbmd0aFxuXHRcdFx0KSB7XG5cdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmRlbGF5U3VjY2Vzc01lc3NhZ2VzID0gc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuZGVsYXlTdWNjZXNzTWVzc2FnZXMuY29uY2F0KG1lc3NhZ2VzKTtcblx0XHRcdH1cblx0XHRcdGFmdGVyQWN0aW9uUmVzb2x1dGlvbihtUGFyYW1ldGVycywgbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMsIGFjdGlvbkRlZmluaXRpb24pO1xuXHRcdFx0cmVzb2x2ZShvT3BlcmF0aW9uUmVzdWx0KTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdHJlamVjdChvT3BlcmF0aW9uUmVzdWx0IGFzIEVycm9yIHwgQWN0aW9uUmVzcG9uc2UpO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmXG5cdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmlzNDEyRXhlY3V0ZWQgJiZcblx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMubGVuZ3RoICYmXG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmFDb250ZXh0cyEubGVuZ3RoID4gMVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3RyaWN0SGFuZGxpbmdGYWlscyA9IHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzO1xuXHRcdFx0XHRcdGNvbnN0IGFGYWlsZWRDb250ZXh0cyA9IFtdIGFzIE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdGYWlscy5mb3JFYWNoKGZ1bmN0aW9uIChmYWlsOiB7IG9BY3Rpb246IE9EYXRhQ29udGV4dEJpbmRpbmc7IGdyb3VwSWQ6IHN0cmluZyB9KTogdm9pZCB7XG5cdFx0XHRcdFx0XHRhRmFpbGVkQ29udGV4dHMucHVzaChmYWlsLm9BY3Rpb24uZ2V0Q29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQ29udGV4dHMgPSBhRmFpbGVkQ29udGV4dHM7XG5cdFx0XHRcdFx0Y29uc3Qgb0ZhaWxlZE9wZXJhdGlvblJlc3VsdCA9IGF3YWl0IF9leGVjdXRlQWN0aW9uKFxuXHRcdFx0XHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMucGFyZW50Q29udHJvbCxcblx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pZ25vcmVFVGFnXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscyA9IFtdO1xuXHRcdFx0XHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5kZWxheVN1Y2Nlc3NNZXNzYWdlcyk7XG5cdFx0XHRcdFx0YWZ0ZXJBY3Rpb25SZXNvbHV0aW9uKG1QYXJhbWV0ZXJzLCBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycywgYWN0aW9uRGVmaW5pdGlvbik7XG5cdFx0XHRcdFx0cmVzb2x2ZShvRmFpbGVkT3BlcmF0aW9uUmVzdWx0KTtcblx0XHRcdFx0fSBjYXRjaCAob0ZhaWxlZE9wZXJhdGlvblJlc3VsdCkge1xuXHRcdFx0XHRcdHJlamVjdChcblx0XHRcdFx0XHRcdG9GYWlsZWRPcGVyYXRpb25SZXN1bHQgYXMgRXJyb3IgfCBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCB8IFByb21pc2VTZXR0bGVkUmVzdWx0PE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkPltdXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bGV0IHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gZmFsc2U7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChtUGFyYW1ldGVycy5iR3JvdXBlZCAmJiBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJiBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1Byb21pc2VzLmxlbmd0aCkgfHxcblx0XHRcdFx0KG1QYXJhbWV0ZXJzLmJHcm91cGVkICYmIG1lc3NhZ2VIYW5kbGluZy5oYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncygpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGxldCBpc0FjdGlvblN1Y2Nlc3NmdWwgPSBmYWxzZTtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KG9PcGVyYXRpb25SZXN1bHQpKSB7XG5cdFx0XHRcdGlzQWN0aW9uU3VjY2Vzc2Z1bCA9IG9PcGVyYXRpb25SZXN1bHQ/LmV2ZXJ5KChyZXMpID0+IHJlcy5zdGF0dXMgPT09IFwiZnVsZmlsbGVkXCIpO1xuXHRcdFx0fVxuXHRcdFx0bVBhcmFtZXRlcnM/Lm1lc3NhZ2VIYW5kbGVyXG5cdFx0XHRcdD8uc2hvd01lc3NhZ2VEaWFsb2coe1xuXHRcdFx0XHRcdGNvbnRyb2w6IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzPy5jb250cm9sLFxuXHRcdFx0XHRcdG9uQmVmb3JlU2hvd01lc3NhZ2U6IGZ1bmN0aW9uIChhTWVzc2FnZXM6IE1lc3NhZ2VbXSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW46IFNob3dNZXNzYWdlUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2soXG5cdFx0XHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRhQ29udGV4dHMhLFxuXHRcdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdGFNZXNzYWdlcyxcblx0XHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4sXG5cdFx0XHRcdFx0XHRcdHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0LFxuXHRcdFx0XHRcdFx0XHRpc0FjdGlvblN1Y2Nlc3NmdWxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0czogbVBhcmFtZXRlcnMuYUNvbnRleHRzLFxuXHRcdFx0XHRcdHNBY3Rpb25OYW1lOiBzQWN0aW9uTGFiZWxcblx0XHRcdFx0fSlcblx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVyLmNsZWFyU3RyaWN0V2FybmluZ01lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9KTtcblx0XHRcdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcykge1xuXHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyA9IHtcblx0XHRcdFx0XHRpczQxMkV4ZWN1dGVkOiBmYWxzZSxcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlsczogW10sXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdQcm9taXNlczogW10sXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXM6IFtdLFxuXHRcdFx0XHRcdGRlbGF5U3VjY2Vzc01lc3NhZ2VzOiBbXSxcblx0XHRcdFx0XHRwcm9jZXNzZWRNZXNzYWdlSWRzOiBuZXcgU2V0KClcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb25maXJtQ3JpdGljYWxBY3Rpb24oXG5cdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0c0FjdGlvbkxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1QYXJhbWV0ZXJzOiBTaG93QWN0aW9uRGlhbG9nUGFyYW1ldGVycyxcblx0YUFjdGlvblBhcmFtZXRlcnM6IEVkbUFjdGlvblBhcmFtZXRlcltdLFxuXHRhUGFyYW1ldGVyVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdIHwgdW5kZWZpbmVkLFxuXHRvQWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0b1BhcmVudENvbnRyb2w6IFZpZXcsXG5cdGVudGl0eVNldE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyLFxuXHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllczogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdHZpZXc6IFZpZXcgfCBudWxsLFxuXHRpZ25vcmVFVGFnPzogYm9vbGVhblxuKTogUHJvbWlzZTxBY3Rpb25SZXNwb25zZT4ge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdGxldCBib3VuZEFjdGlvbk5hbWUgPSBzQWN0aW9uTmFtZTtcblx0XHRib3VuZEFjdGlvbk5hbWUgPSBib3VuZEFjdGlvbk5hbWUuaW5jbHVkZXMoXCIuXCIpXG5cdFx0XHQ/IGJvdW5kQWN0aW9uTmFtZS5zcGxpdChcIi5cIilbYm91bmRBY3Rpb25OYW1lLnNwbGl0KFwiLlwiKS5sZW5ndGggLSAxXVxuXHRcdFx0OiBib3VuZEFjdGlvbk5hbWU7XG5cdFx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBib3VuZEFjdGlvbk5hbWUgJiYgZW50aXR5U2V0TmFtZSA/IGAke2VudGl0eVNldE5hbWV9fCR7Ym91bmRBY3Rpb25OYW1lfWAgOiBcIlwiO1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKG9QYXJlbnRDb250cm9sKTtcblx0XHRjb25zdCBzQ29uZmlybWF0aW9uVGV4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfT1BFUkFUSU9OU19BQ1RJT05fQ09ORklSTV9NRVNTQUdFXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpO1xuXG5cdFx0TWVzc2FnZUJveC5jb25maXJtKHNDb25maXJtYXRpb25UZXh0LCB7XG5cdFx0XHRvbkNsb3NlOiBhc3luYyBmdW5jdGlvbiAoc0FjdGlvbjogc3RyaW5nKSB7XG5cdFx0XHRcdGlmIChzQWN0aW9uID09PSBBY3Rpb24uT0spIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb09wZXJhdGlvbiA9IGF3YWl0IF9leGVjdXRlQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0b1BhcmVudENvbnRyb2wsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0XHRcdFx0XHRcdFx0aWdub3JlRVRhZ1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJlc29sdmUob09wZXJhdGlvbik7XG5cdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZygpO1xuXHRcdFx0XHRcdFx0XHRyZWplY3Qob0Vycm9yKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KG9FcnJvcik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlc29sdmUoQ29uc3RhbnRzLkNhbmNlbEFjdGlvbkRpYWxvZyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGFmdGVyQWN0aW9uUmVzb2x1dGlvbihcblx0bVBhcmFtZXRlcnM6IENhbGxBY3Rpb25QYXJhbWV0ZXJzLFxuXHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVyczogU2hvd0FjdGlvbkRpYWxvZ1BhcmFtZXRlcnMsXG5cdGFjdGlvbkRlZmluaXRpb246IE1ldGFNb2RlbEFjdGlvblxuKTogdm9pZCB7XG5cdGlmIChcblx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCAmJlxuXHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCAmJlxuXHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFDb250ZXh0cyAmJlxuXHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFDb250ZXh0cy5sZW5ndGggJiZcblx0XHRhY3Rpb25EZWZpbml0aW9uLiRJc0JvdW5kXG5cdCkge1xuXHRcdGxldCBzZWxlY3RlZENvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdID0gW107XG5cdFx0Ly9jaGVjayBmb3Igc2tpcHBpbmcgc3RhdGljIGFjdGlvbnNcblx0XHRjb25zdCBpc1N0YXRpYyA9IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmlzU3RhdGljO1xuXHRcdGlmICghaXNTdGF0aWMpIHtcblx0XHRcdHNlbGVjdGVkQ29udGV4dHMgPSBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIikgfHwgW107XG5cdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRKU09OLnBhcnNlKG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0XHRcdHNlbGVjdGVkQ29udGV4dHMsXG5cdFx0XHRcdFwidGFibGVcIlxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmNvbnRyb2wpIHtcblx0XHRcdGNvbnN0IGNvbnRyb2wgPSBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5jb250cm9sO1xuXHRcdFx0aWYgKGNvbnRyb2wuaXNBPFRhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyA9IGNvbnRyb2wuZ2V0U2VsZWN0ZWRDb250ZXh0cygpIGFzIE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRKU09OLnBhcnNlKG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdFx0XHRcInRhYmxlXCJcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly91cGRhdGUgZGVsZXRlIGJ1dHRvblxuXHRcdERlbGV0ZUhlbHBlci51cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyhtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCwgc2VsZWN0ZWRDb250ZXh0cyk7XG5cdH1cbn1cblxuLyoqXG4gKiBGaWx0ZXJzIGFuIGFycmF5IG9mIG1lc3NhZ2VzIGJhc2VkIG9uIHZhcmlvdXMgY29uZGl0aW9ucyBhbmQgcmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgZmlsdGVyZWQgbWVzc2FnZXMgYW5kIG90aGVyIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gbWVzc2FnZXMgVGhlIG1lc3NhZ2VzIHRvIGZpbHRlci5cbiAqIEBwYXJhbSBlcnJvclRhcmdldHNJbkFQRCBJbmRpY2F0ZXMgd2hldGhlciBlcnJvciB0YXJnZXRzIGFyZSBpbiBBUEQuXG4gKiBAcGFyYW0gY29udGV4dHMgQW4gYXJyYXkgb2YgY29udGV4dHMuXG4gKiBAcGFyYW0gdW5ib3VuZE1lc3NhZ2VzIEFuIGFycmF5IG9mIHVuYm91bmQgbWVzc2FnZXMuXG4gKiBAcGFyYW0gY29udHJvbCBBIGNvbnRyb2wgb2JqZWN0LlxuICogQHBhcmFtIGlzQVBET1BlbiBJbmRpY2F0ZXMgd2hldGhlciBBUEQgaXMgb3Blbi5cbiAqIEBwYXJhbSBzaG93TWVzc2FnZURpYWxvZyBJbmRpY2F0ZXMgd2hldGhlciB0byBzaG93IHRoZSBtZXNzYWdlIGRpYWxvZy5cbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHJlc3VsdCBjb250YWlucyBhIGJvdW5kIHRyYW5zaXRpb24sIGFuIGFycmF5IG9mIG1lc3NhZ2VzIHRvIHNob3csIGFuZCBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIHNob3cgdGhlIG1lc3NhZ2UgaW4gYSBkaWFsb2cuXG4gKi9cbmZ1bmN0aW9uIGZpbHRlckFQRGFuZENvbnRleHRNZXNzYWdlcyhcblx0bWVzc2FnZXM6IE1lc3NhZ2VbXSxcblx0ZXJyb3JUYXJnZXRzSW5BUEQ/OiBib29sZWFuLFxuXHRjb250ZXh0cz86IENvbnRleHRbXSxcblx0dW5ib3VuZE1lc3NhZ2VzPzogTWVzc2FnZVtdLFxuXHRjb250cm9sPzogQ29udHJvbCxcblx0aXNBUERPUGVuPzogYm9vbGVhbixcblx0c2hvd01lc3NhZ2VEaWFsb2c/OiBib29sZWFuXG4pOiB7IGNvbnRhaW5zQm91bmRUcmFuc2lzdGlvbjogYm9vbGVhbiB8IHVuZGVmaW5lZDsgbWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VbXTsgc2hvd01lc3NhZ2VJbkRpYWxvZz86IGJvb2xlYW4gfSB7XG5cdGlmIChpc0FQRE9QZW4gJiYgZXJyb3JUYXJnZXRzSW5BUEQpIHtcblx0XHQvKiBXaGVuIEFQRCBpcyBvcGVuLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbWVzc2FnZXMgd2hpY2ggYXJlIHJlbGF0ZWQgdG8gdGhlIG9iamVjdHBhZ2UgY29udGV4dCAqL1xuXHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVDb250ZXh0TWVzc2FnZXNmcm9tTW9kZWwobWVzc2FnZXMsIGNvbnRleHRzKTtcblx0fVxuXG5cdC8vIEZpbHRlciBvdXQgbWVzc2FnZXMgd2hpY2ggYXJlIG5vdCByZWxhdGVkIHRvIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZyBpbiB0aGUgZWRpdCBtb2RlIGFuZCBkaXNwbGF5IG1vZGVcblx0bGV0IGNvbnRhaW5zQm91bmRUcmFuc2lzdGlvbjtcblx0aWYgKCFjb250cm9sPy5nZXRNb2RlbChcInVpXCIpIS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0aWYgKGlzQVBET1BlbiAmJiBlcnJvclRhcmdldHNJbkFQRCkge1xuXHRcdFx0aWYgKHVuYm91bmRNZXNzYWdlcz8ubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdGNvbnRhaW5zQm91bmRUcmFuc2lzdGlvbiA9IGZhbHNlO1xuXHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0bWVzc2FnZXMgPSBtZXNzYWdlSGFuZGxpbmcucmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbWV0ZXJEaWFsb2cobWVzc2FnZXMpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRpZiAodW5ib3VuZE1lc3NhZ2VzPy5sZW5ndGggPT09IDApIHtcblx0XHRcdGNvbnRhaW5zQm91bmRUcmFuc2lzdGlvbiA9IGZhbHNlO1xuXHRcdH1cblx0XHRtZXNzYWdlcyA9IG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtZXRlckRpYWxvZyhtZXNzYWdlcyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRtZXNzYWdlc1RvU2hvdzogbWVzc2FnZXMsXG5cdFx0Y29udGFpbnNCb3VuZFRyYW5zaXN0aW9uOiBjb250YWluc0JvdW5kVHJhbnNpc3Rpb24sXG5cdFx0c2hvd01lc3NhZ2VJbkRpYWxvZzogc2hvd01lc3NhZ2VEaWFsb2dcblx0fTtcbn1cblxuZnVuY3Rpb24gYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayhcblx0bVBhcmFtZXRlcnM6IFNob3dBY3Rpb25EaWFsb2dQYXJhbWV0ZXJzLFxuXHRhQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sXG5cdG9EaWFsb2c6IERpYWxvZyB8IHVuZGVmaW5lZCxcblx0bWVzc2FnZXM6IE1lc3NhZ2VbXSxcblx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW46IFNob3dNZXNzYWdlUGFyYW1ldGVycyxcblx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQ6IGJvb2xlYW4sXG5cdGlzQWN0aW9uU3VjY2Vzc2Z1bD86IGJvb2xlYW5cbik6IFNob3dNZXNzYWdlUGFyYW1ldGVycyB7XG5cdGxldCBzaG93TWVzc2FnZUJveCA9IHNob3dNZXNzYWdlUGFyYW1ldGVyc0luLnNob3dNZXNzYWdlQm94LFxuXHRcdHNob3dNZXNzYWdlRGlhbG9nID0gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4uc2hvd01lc3NhZ2VEaWFsb2c7XG5cdGNvbnN0IG9Db250cm9sID0gbVBhcmFtZXRlcnMuY29udHJvbDtcblx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0Y29uc3QgdW5ib3VuZE1lc3NhZ2VzID0gbWVzc2FnZXMuZmlsdGVyKGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpPy5bMF0gPT09IFwiXCI7XG5cdH0pO1xuXHRjb25zdCBBUERtZXNzYWdlcyA9IG1lc3NhZ2VzLmZpbHRlcihmdW5jdGlvbiAobWVzc2FnZSkge1xuXHRcdHJldHVybiAoXG5cdFx0XHRtZXNzYWdlLmdldFRhcmdldHMgJiZcblx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cygpPy5bMF0uaW5jbHVkZXMobVBhcmFtZXRlcnMuYWN0aW9uTmFtZSkgJiZcblx0XHRcdG1QYXJhbWV0ZXJzPy5hQWN0aW9uUGFyYW1ldGVycz8uc29tZShmdW5jdGlvbiAoYWN0aW9uUGFyYW0pIHtcblx0XHRcdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpPy5bMF0uaW5jbHVkZXMoYWN0aW9uUGFyYW0ubmFtZSk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH0pO1xuXHRBUERtZXNzYWdlcz8uZm9yRWFjaChmdW5jdGlvbiAoQVBETWVzc2FnZSkge1xuXHRcdChBUERNZXNzYWdlIGFzIHVua25vd24gYXMgeyBpc0FQRFRhcmdldDogYm9vbGVhbiB9KS5pc0FQRFRhcmdldCA9IHRydWU7XG5cdH0pO1xuXG5cdGNvbnN0IGVycm9yVGFyZ2V0c0luQVBEID0gQVBEbWVzc2FnZXMubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xuXHQvL0lmIEFjdGlvbiBpcyBzdWNjZXNzZnVsIHdpdGggd2FybmluZ3MsIGRvbnQgc2hvdyB0aGUgZ2VuZXJpYyBlcnJvciBtZXNzYWdlIGZvciBjaGFuZ2VzZXQgaW4gZGlhbG9nXG5cdGlmIChzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCAmJiAhZXJyb3JUYXJnZXRzSW5BUEQgJiYgIWlzQWN0aW9uU3VjY2Vzc2Z1bCkge1xuXHRcdGNvbnN0IG1lc3NhZ2VNb2RlbCA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKTtcblx0XHRjb25zdCBtZXNzYWdlc0luTW9kZWwgPSBtZXNzYWdlTW9kZWwuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IGFCb3VuZE1lc3NhZ2VzID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VzKHRydWUpO1xuXHRcdGxldCBnZW5lcmljTWVzc2FnZTtcblx0XHRjb25zdCBpc0VkaXRhYmxlID0gb0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0TW9kZWwoXCJ1aVwiKSEuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblxuXHRcdGNvbnN0IG5vbkVycm9yTWVzc2FnZUV4aXN0c0luRGlhbG9nID0gbWVzc2FnZXMuZmluZEluZGV4KGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiRXJyb3JcIiB8fCBtZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJXYXJuaW5nXCI7XG5cdFx0fSk7XG5cdFx0Y29uc3Qgbm9uRXJyb3JNZXNzYWdlRXhpc3RzSW5Nb2RlbCA9IG1lc3NhZ2VzSW5Nb2RlbC5maW5kSW5kZXgoZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRcdHJldHVybiBtZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJFcnJvclwiIHx8IG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIldhcm5pbmdcIjtcblx0XHR9KTtcblxuXHRcdGlmIChcblx0XHRcdG5vbkVycm9yTWVzc2FnZUV4aXN0c0luRGlhbG9nICE9PSAxICYmXG5cdFx0XHRub25FcnJvck1lc3NhZ2VFeGlzdHNJbk1vZGVsICE9PSAtMSAmJlxuXHRcdFx0bVBhcmFtZXRlcnMuYUNvbnRleHRzICYmXG5cdFx0XHRtUGFyYW1ldGVycy5hQ29udGV4dHMubGVuZ3RoID4gMVxuXHRcdCkge1xuXHRcdFx0aWYgKG1lc3NhZ2VzSW5Nb2RlbC5sZW5ndGggPT09IDEgJiYgYUJvdW5kTWVzc2FnZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdGdlbmVyaWNNZXNzYWdlID0gZ2V0R2VuZXJpY01zZ0ZvclNpbmdsZUVycm9ySW5DaGFuZ2VTZXQoaXNFZGl0YWJsZSwgb1Jlc291cmNlQnVuZGxlKTtcblx0XHRcdFx0bWVzc2FnZXMudW5zaGlmdChnZW5lcmljTWVzc2FnZSk7XG5cdFx0XHRcdHNob3dNZXNzYWdlQm94ID0gdHJ1ZTtcblx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBmYWxzZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHNNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMX0VSUk9SX01FU1NBR0VTX1RFWFRcIik7XG5cdFx0XHRcdGNvbnN0IHNEZXNjcmlwdGlvblRleHQgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxfRVJST1JfTUVTU0FHRVNfREVUQUlMX1RFWFRcIik7XG5cdFx0XHRcdGdlbmVyaWNNZXNzYWdlID0gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdG1lc3NhZ2U6IHNNZXNzYWdlLFxuXHRcdFx0XHRcdHR5cGU6IE1lc3NhZ2VUeXBlLkVycm9yLFxuXHRcdFx0XHRcdHRhcmdldDogXCJcIixcblx0XHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBzRGVzY3JpcHRpb25UZXh0LFxuXHRcdFx0XHRcdGNvZGU6IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIlxuXHRcdFx0XHR9KTtcblx0XHRcdFx0bWVzc2FnZXMudW5zaGlmdChnZW5lcmljTWVzc2FnZSk7XG5cdFx0XHRcdGlmIChtZXNzYWdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRzaG93TWVzc2FnZUJveCA9IHRydWU7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBmYWxzZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VCb3ggPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChvRGlhbG9nICYmIG9EaWFsb2cuaXNPcGVuKCkgJiYgYUNvbnRleHRzLmxlbmd0aCAhPT0gMCAmJiAhbVBhcmFtZXRlcnMuaXNTdGF0aWMpIHtcblx0XHRpZiAoIW1QYXJhbWV0ZXJzLmJHcm91cGVkKSB7XG5cdFx0XHQvL2lzb2xhdGVkXG5cdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDEgfHwgIWVycm9yVGFyZ2V0c0luQVBEKSB7XG5cdFx0XHRcdC8vIGRvZXMgbm90IG1hdHRlciBpZiBlcnJvciBpcyBpbiBBUEQgb3Igbm90LCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgY29udGV4dHMgc2VsZWN0ZWQgb3IgaWYgdGhlIGVycm9yIGlzIG5vdCB0aGUgQVBELCB3ZSBjbG9zZSBpdC5cblx0XHRcdFx0Ly8gVE9ETzogRGlsYW9nIGhhbmRsaW5nIHNob3VsZCBub3QgYmUgcGFydCBvZiBtZXNzYWdlIGhhbmRsaW5nLiBSZWZhY3RvciBhY2NvcmRpbmdseSAtIGRpYWxvZyBzaG91bGQgbm90IGJlIG5lZWRlZCBpbnNpZGUgdGhpcyBtZXRob2QgLSBuZWl0aGVyXG5cdFx0XHRcdC8vIHRvIGFzayB3aGV0aGVyIGl0J3Mgb3Blbiwgbm9yIHRvIGNsb3NlL2Rlc3Ryb3kgaXQhXG5cdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0b0RpYWxvZy5kZXN0cm95KCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICghZXJyb3JUYXJnZXRzSW5BUEQpIHtcblx0XHRcdC8vY2hhbmdlc2V0XG5cdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRvRGlhbG9nLmRlc3Ryb3koKTtcblx0XHR9XG5cdH1cblx0Y29uc3QgZmlsdGVyZWRNZXNzYWdlczogTWVzc2FnZVtdID0gW107XG5cdGNvbnN0IGJJc0FQRE9wZW4gPSBvRGlhbG9nICYmIG9EaWFsb2cuaXNPcGVuKCk7XG5cblx0Y29uc3QgeyBtZXNzYWdlc1RvU2hvdywgY29udGFpbnNCb3VuZFRyYW5zaXN0aW9uLCBzaG93TWVzc2FnZUluRGlhbG9nIH0gPSBmaWx0ZXJBUERhbmRDb250ZXh0TWVzc2FnZXMoXG5cdFx0bWVzc2FnZXMsXG5cdFx0ZXJyb3JUYXJnZXRzSW5BUEQsXG5cdFx0YUNvbnRleHRzLFxuXHRcdHVuYm91bmRNZXNzYWdlcyxcblx0XHRvQ29udHJvbCxcblx0XHRiSXNBUERPcGVuXG5cdCk7XG5cdG1lc3NhZ2VzID0gbWVzc2FnZXNUb1Nob3c7XG5cdHNob3dNZXNzYWdlRGlhbG9nID0gc2hvd01lc3NhZ2VJbkRpYWxvZyA/PyBzaG93TWVzc2FnZURpYWxvZztcblxuXHRpZiAoIWJJc0FQRE9wZW4gJiYgZXJyb3JUYXJnZXRzSW5BUEQgJiYgIW1QYXJhbWV0ZXJzLmJHcm91cGVkKSB7XG5cdFx0Ly8gSWYgQVBEIGlzIG5vdCBvcGVuIGFuZCB0aGVyZSBhcmUgbWVzc2FnZXMgcmVsYXRlZCB0byBBUEQsIHRoZW4gc2hvdyBpbiB0aGUgbWVzc2FnZSBkaWFsb2cuIHNpbmNlXG5cdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSB0cnVlO1xuXHRcdG1lc3NhZ2VzID0gbWVzc2FnZXMuY29uY2F0KEFQRG1lc3NhZ2VzKTtcblx0fVxuXG5cdGxldCBmbkdldE1lc3NhZ2VTdWJ0aXRsZTtcblx0aWYgKG9Db250cm9sICYmIG9Db250cm9sLmlzQTxUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0Zm5HZXRNZXNzYWdlU3VidGl0bGUgPSBtZXNzYWdlSGFuZGxpbmcuc2V0TWVzc2FnZVN1YnRpdGxlLmJpbmQoe30sIG9Db250cm9sLCBhQ29udGV4dHMpO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0c2hvd01lc3NhZ2VCb3g6IHNob3dNZXNzYWdlQm94LFxuXHRcdHNob3dNZXNzYWdlRGlhbG9nOiBzaG93TWVzc2FnZURpYWxvZyxcblx0XHRmaWx0ZXJlZE1lc3NhZ2VzOiBmaWx0ZXJlZE1lc3NhZ2VzLmxlbmd0aCA/IGZpbHRlcmVkTWVzc2FnZXMgOiBtZXNzYWdlcyxcblx0XHRmbkdldE1lc3NhZ2VTdWJ0aXRsZTogZm5HZXRNZXNzYWdlU3VidGl0bGUsXG5cdFx0c2hvd0NoYW5nZVNldEVycm9yRGlhbG9nOiBtUGFyYW1ldGVycy5iR3JvdXBlZCxcblx0XHRjb250YWluc0JvdW5kVHJhbnNpc3Rpb246IGNvbnRhaW5zQm91bmRUcmFuc2lzdGlvblxuXHR9O1xufVxuXG5mdW5jdGlvbiBnZXRHZW5lcmljTXNnRm9yU2luZ2xlRXJyb3JJbkNoYW5nZVNldChpc0VkaXRhYmxlOiBib29sZWFuLCByZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUpOiBNZXNzYWdlV2l0aEhlYWRlciB7XG5cdGNvbnN0IG1lc3NhZ2UgPSBpc0VkaXRhYmxlXG5cdFx0PyByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9TSU5HTEVfRVJST1JfTUVTU0FHRV9URVhUX0VESVRcIilcblx0XHQ6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMX1NJTkdMRV9FUlJPUl9NRVNTQUdFX1RFWFRcIik7XG5cdHJldHVybiBuZXcgTWVzc2FnZSh7XG5cdFx0bWVzc2FnZSxcblx0XHR0eXBlOiBNZXNzYWdlVHlwZS5FcnJvcixcblx0XHR0YXJnZXQ6IFwiXCIsXG5cdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRjb2RlOiBcIkZFX0NVU1RPTV9NRVNTQUdFX0NIQU5HRVNFVF9BTExfRkFJTEVEXCIsXG5cdFx0dGVjaG5pY2FsRGV0YWlsczoge1xuXHRcdFx0ZmU6IHtcblx0XHRcdFx0Y2hhbmdlU2V0UHJlVGV4dEZvclNpbmdsZUVycm9yOiBtZXNzYWdlXG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyhcblx0b0FjdGlvbjogT0RhdGFDb250ZXh0QmluZGluZyxcblx0bVBhcmFtZXRlcnM6IFNob3dBY3Rpb25EaWFsb2dQYXJhbWV0ZXJzLFxuXHRiR2V0Qm91bmRDb250ZXh0OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHRzR3JvdXBJZDogc3RyaW5nLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIgfCB1bmRlZmluZWQsXG5cdGlDb250ZXh0TGVuZ3RoOiBudW1iZXIgfCBudWxsLFxuXHRjdXJyZW50X2NvbnRleHRfaW5kZXg6IG51bWJlciB8IG51bGwsXG5cdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlOiBGdW5jdGlvbixcblx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdDogRnVuY3Rpb24sXG5cdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzOiBTdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0aWdub3JlRVRhZz86IGJvb2xlYW5cbik6IFByb21pc2U8dW5kZWZpbmVkIHwgT0RhdGFWNENvbnRleHQ+IHtcblx0bGV0IG9BY3Rpb25Qcm9taXNlOiBQcm9taXNlPHVuZGVmaW5lZCB8IE9EYXRhVjRDb250ZXh0Pixcblx0XHRiRW5hYmxlU3RyaWN0SGFuZGxpbmcgPSB0cnVlO1xuXHRpZiAobVBhcmFtZXRlcnMpIHtcblx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZSA9IGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlO1xuXHR9XG5cdGlmIChiR2V0Qm91bmRDb250ZXh0KSB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQWN0aW9uLmdldEJvdW5kQ29udGV4dCgpLmdldFBhdGgoKTtcblx0XHRjb25zdCBzTWV0YVBhdGggPSBvQWN0aW9uLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0TWV0YVBhdGgoc1BhdGgpO1xuXHRcdGNvbnN0IG9Qcm9wZXJ0eSA9IG9BY3Rpb24uZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKS5nZXRPYmplY3Qoc01ldGFQYXRoKTtcblx0XHRpZiAob1Byb3BlcnR5ICYmIG9Qcm9wZXJ0eVswXT8uJGtpbmQgIT09IFwiQWN0aW9uXCIpIHtcblx0XHRcdC8vZG8gbm90IGVuYWJsZSB0aGUgc3RyaWN0IGhhbmRsaW5nIGlmIGl0cyBub3QgYW4gYWN0aW9uXG5cdFx0XHRiRW5hYmxlU3RyaWN0SGFuZGxpbmcgPSBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLmRpc2FibGVTdHJpY3RIYW5kbGluZykge1xuXHRcdFx0YkVuYWJsZVN0cmljdEhhbmRsaW5nID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCFiRW5hYmxlU3RyaWN0SGFuZGxpbmcpIHtcblx0XHRvQWN0aW9uUHJvbWlzZSA9IG9BY3Rpb24uZXhlY3V0ZShzR3JvdXBJZCwgaWdub3JlRVRhZykudGhlbihmdW5jdGlvbiAocmVzdWx0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCkge1xuXHRcdFx0ZW5oYW5jZVNpZGVFZmZlY3RzKG1QYXJhbWV0ZXJzLmFwcENvbXBvbmVudCwgb0FjdGlvbiwgcmVzdWx0KTtcblx0XHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlKG9BY3Rpb24uZ2V0Qm91bmRDb250ZXh0KCkpO1xuXHRcdFx0cmV0dXJuIG9BY3Rpb24uZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b0FjdGlvblByb21pc2UgPSBvQWN0aW9uXG5cdFx0XHQuZXhlY3V0ZShcblx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdGlnbm9yZUVUYWcsXG5cdFx0XHRcdG9wZXJhdGlvbnNIZWxwZXIuZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkLmJpbmQoXG5cdFx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCxcblx0XHRcdFx0XHRvQWN0aW9uLmdldENvbnRleHQoKSxcblx0XHRcdFx0XHRpQ29udGV4dExlbmd0aCxcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuXHRcdFx0XHQpXG5cdFx0XHQpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAocmVzdWx0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRlbmhhbmNlU2lkZUVmZmVjdHMobVBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LCBvQWN0aW9uLCByZXN1bHQpO1xuXHRcdFx0XHRpZiAoIW1QYXJhbWV0ZXJzLmJHcm91cGVkKSB7XG5cdFx0XHRcdFx0dXBkYXRlNDEyVHJhbnNpdGlvbk1lc3NhZ2VzKG9BY3Rpb24sIHNHcm91cElkLCBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcywgbVBhcmFtZXRlcnMgYXMgU3RyaWN0SGFuZGxpbmdQYXJhbWV0ZXJzLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZWFsUmVzdWx0ID0gbVBhcmFtZXRlcnMuYkdldEJvdW5kQ29udGV4dCB8fCByZXN1bHQgPT09IHVuZGVmaW5lZCA/IG9BY3Rpb24uZ2V0Qm91bmRDb250ZXh0KCkgOiByZXN1bHQ7XG5cdFx0XHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlKHJlYWxSZXN1bHQpO1xuXHRcdFx0XHRyZXR1cm4gcmVhbFJlc3VsdDtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRpZiAoIW1QYXJhbWV0ZXJzLmJHcm91cGVkKSB7XG5cdFx0XHRcdFx0dXBkYXRlNDEyVHJhbnNpdGlvbk1lc3NhZ2VzKG9BY3Rpb24sIHNHcm91cElkLCBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcywgbVBhcmFtZXRlcnMgYXMgU3RyaWN0SGFuZGxpbmdQYXJhbWV0ZXJzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVqZWN0KCk7XG5cdFx0XHRcdHRocm93IENvbnN0YW50cy5BY3Rpb25FeGVjdXRpb25GYWlsZWQ7XG5cdFx0XHR9KTtcblx0fVxuXG5cdHJldHVybiBvQWN0aW9uUHJvbWlzZS5jYXRjaCgoKSA9PiB7XG5cdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCgpO1xuXHRcdHRocm93IENvbnN0YW50cy5BY3Rpb25FeGVjdXRpb25GYWlsZWQ7XG5cdH0pO1xufVxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdHJpY3RIYW5kbGluZyB1dGlsaXRpZXMgd2l0aCB0aGUgZmFpbGVkIGFuZCBzdWNjZXNzZnVsIHRyYW5zaXRpb24gbWVzc2FnZXMuXG4gKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBleGVjdXRlZFxuICogQHBhcmFtIGdyb3VwSWQgR3JvdXBJZCBvZiB0aGUgYmF0Y2hcbiAqIEBwYXJhbSBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyBVdGlsaXR5IGZsYWdzIGFuZCBtZXNzYWdlcyBmb3Igc3RyaWN0SGFuZGxpbmdcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIFN0cmljdCBIYW5kbGluZyBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gb25seVN1Y2Nlc3NNZXNzYWdlcyBUbyB1cGRhdGUgb25seSBzdWNjZXNzZnVsIHRyYW5zaXRpb24gbWVzc2FnZXNcbiAqL1xuZnVuY3Rpb24gdXBkYXRlNDEyVHJhbnNpdGlvbk1lc3NhZ2VzKFxuXHRhY3Rpb246IE9EYXRhQ29udGV4dEJpbmRpbmcsXG5cdGdyb3VwSWQ6IHN0cmluZyxcblx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM6IFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRwYXJhbWV0ZXJzPzogU3RyaWN0SGFuZGxpbmdQYXJhbWV0ZXJzLFxuXHRvbmx5U3VjY2Vzc01lc3NhZ2VzID0gZmFsc2Vcbik6IHZvaWQge1xuXHRjb25zdCBtZXNzYWdlczogQXJyYXk8TWVzc2FnZT4gPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRjb25zdCB7IHByb2Nlc3NlZE1lc3NhZ2VJZHMsIGRlbGF5U3VjY2Vzc01lc3NhZ2VzLCBzdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscyB9ID0gc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM7XG5cdGNvbnN0IHVuUHJvY2Vzc2VkTWVzc2FnZXMgPSBtZXNzYWdlcy5yZWR1Y2UoKGFjYzogTWVzc2FnZVtdLCBtZXNzYWdlKSA9PiB7XG5cdFx0aWYgKCFwcm9jZXNzZWRNZXNzYWdlSWRzLmhhcyhtZXNzYWdlLmdldElkKCkpKSB7XG5cdFx0XHRhY2MucHVzaChtZXNzYWdlKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFjYztcblx0fSwgW10pO1xuXG5cdGNvbnN0IG5ld1RyYW5zaXRpb25FcnJvck1lc3NhZ2VzSWQgPSB1blByb2Nlc3NlZE1lc3NhZ2VzXG5cdFx0LmZpbHRlcihcblx0XHRcdChtZXNzYWdlKSA9PlxuXHRcdFx0XHRtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gdHJ1ZSAmJiBtZXNzYWdlLmdldFR5cGUoKSAhPT0gTWVzc2FnZVR5cGUuU3VjY2VzcyAmJiAhcHJvY2Vzc2VkTWVzc2FnZUlkcy5oYXMobWVzc2FnZS5nZXRJZCgpKVxuXHRcdClcblx0XHQubWFwKChtZXNzYWdlKSA9PiBtZXNzYWdlLmdldElkKCkpO1xuXG5cdGlmIChuZXdUcmFuc2l0aW9uRXJyb3JNZXNzYWdlc0lkLmxlbmd0aCkge1xuXHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnByb2Nlc3NlZE1lc3NhZ2VJZHMgPSBuZXcgU2V0KFsuLi5BcnJheS5mcm9tKHByb2Nlc3NlZE1lc3NhZ2VJZHMpLCAuLi5uZXdUcmFuc2l0aW9uRXJyb3JNZXNzYWdlc0lkXSk7XG5cdFx0ZGVsYXlTdWNjZXNzTWVzc2FnZXMucHVzaCguLi5PYmplY3QudmFsdWVzKHVuUHJvY2Vzc2VkTWVzc2FnZXMpLmZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZS5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MpKTtcblx0XHRpZiAoIW9ubHlTdWNjZXNzTWVzc2FnZXMgJiYgcGFyYW1ldGVycz8uaW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdHN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzLnB1c2goe1xuXHRcdFx0XHRvQWN0aW9uOiBhY3Rpb24sXG5cdFx0XHRcdGdyb3VwSWRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBjcmVhdGVpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlRm9yQWN0aW9uRXhlY3V0aW9uKCk6IHtcblx0b0xvY2FsQWN0aW9uUHJvbWlzZTogUHJvbWlzZTx1bmtub3duPjtcblx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmU6IEZ1bmN0aW9uO1xuXHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVqZWN0OiBGdW5jdGlvbjtcbn0ge1xuXHRsZXQgaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUhOiBGdW5jdGlvbjtcblx0bGV0IGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3QhOiBGdW5jdGlvbjtcblx0Y29uc3Qgb0xvY2FsQWN0aW9uUHJvbWlzZSA9IG5ldyBQcm9taXNlPHVua25vd24+KGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCA9IHJlamVjdDtcblx0fSkuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcikge1xuXHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBhY3Rpb24gXCIsIG9FcnJvcik7XG5cdH0pO1xuXG5cdHJldHVybiB7IG9Mb2NhbEFjdGlvblByb21pc2UsIGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlLCBpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVqZWN0IH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9leGVjdXRlQWN0aW9uKFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdG1QYXJhbWV0ZXJzOiBTaG93QWN0aW9uRGlhbG9nUGFyYW1ldGVycyxcblx0b1BhcmVudENvbnRyb2w6IENvbnRyb2wsXG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM6IFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRpZ25vcmVFVGFnPzogYm9vbGVhblxuKTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dCB8IFByb21pc2VTZXR0bGVkUmVzdWx0PE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkPltdPiB7XG5cdGNvbnN0IGFDb250ZXh0cyA9IG1QYXJhbWV0ZXJzLmFDb250ZXh0cyB8fCBbXTtcblx0Y29uc3Qgb01vZGVsID0gbVBhcmFtZXRlcnMubW9kZWw7XG5cdGNvbnN0IGFBY3Rpb25QYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnMgfHwgW107XG5cdGNvbnN0IHNBY3Rpb25OYW1lID0gbVBhcmFtZXRlcnMuYWN0aW9uTmFtZTtcblx0Y29uc3QgZm5PblN1Ym1pdHRlZCA9IG1QYXJhbWV0ZXJzLmZuT25TdWJtaXR0ZWQ7XG5cdGNvbnN0IGZuT25SZXNwb25zZSA9IG1QYXJhbWV0ZXJzLmZuT25SZXNwb25zZTtcblx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwob1BhcmVudENvbnRyb2wpO1xuXHRsZXQgb0FjdGlvbjogT0RhdGFDb250ZXh0QmluZGluZztcblx0bVBhcmFtZXRlcnMuYXBwQ29tcG9uZW50ID0gb0FwcENvbXBvbmVudDtcblxuXHRmdW5jdGlvbiBzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUoKTogdm9pZCB7XG5cdFx0aWYgKGFBY3Rpb25QYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgZGVmYXVsdFZhbHVlcyA9IG1QYXJhbWV0ZXJzLmRlZmF1bHRQYXJhbWV0ZXJzVmFsdWVzID8/IHt9O1xuXHRcdFx0Zm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgYUFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3QgbmFtZSA9IHBhcmFtZXRlci5uYW1lO1xuXHRcdFx0XHRpZiAoIWRlZmF1bHRWYWx1ZXNbbmFtZV0pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKHBhcmFtZXRlci50eXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLlN0cmluZ1wiOlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzW25hbWVdID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkJvb2xlYW5cIjpcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlc1tuYW1lXSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uQnl0ZVwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQxNlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQzMlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQ2NFwiOlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzW25hbWVdID0gMDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHQvLyB0YmNcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRvQWN0aW9uLnNldFBhcmFtZXRlcihuYW1lLCBkZWZhdWx0VmFsdWVzW25hbWVdKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKGFDb250ZXh0cy5sZW5ndGgpIHtcblx0XHQvLyBUT0RPOiByZWZhY3RvciB0byBkaXJlY3QgdXNlIG9mIFByb21pc2UuYWxsU2V0dGxlZFxuXHRcdHJldHVybiBuZXcgUHJvbWlzZTxPRGF0YVY0Q29udGV4dCB8IFByb21pc2VTZXR0bGVkUmVzdWx0PE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkPltdPihmdW5jdGlvbiAoXG5cdFx0XHRyZXNvbHZlOiAodmFsdWU6IE9EYXRhVjRDb250ZXh0IHwgUHJvbWlzZVNldHRsZWRSZXN1bHQ8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+W10pID0+IHZvaWRcblx0XHQpIHtcblx0XHRcdGNvbnN0IG1CaW5kaW5nUGFyYW1ldGVycyA9IG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycztcblx0XHRcdGNvbnN0IGJHcm91cGVkID0gbVBhcmFtZXRlcnMuYkdyb3VwZWQ7XG5cdFx0XHRjb25zdCBiR2V0Qm91bmRDb250ZXh0ID0gbVBhcmFtZXRlcnMuYkdldEJvdW5kQ29udGV4dDtcblx0XHRcdGNvbnN0IGFBY3Rpb25Qcm9taXNlczogUHJvbWlzZTxPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZD5bXSA9IFtdO1xuXHRcdFx0bGV0IG9BY3Rpb25Qcm9taXNlO1xuXHRcdFx0bGV0IGk7XG5cdFx0XHRsZXQgc0dyb3VwSWQ6IHN0cmluZztcblx0XHRcdGNvbnN0IGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3RDaGFuZ2VTZXQgPSBjcmVhdGVpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlRm9yQWN0aW9uRXhlY3V0aW9uKCk7XG5cdFx0XHRjb25zdCBmbkV4ZWN1dGVBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiAoXG5cdFx0XHRcdGFjdGlvbkNvbnRleHQ6IE9EYXRhQ29udGV4dEJpbmRpbmcsXG5cdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleDogbnVtYmVyIHwgbnVsbCxcblx0XHRcdFx0b1NpZGVFZmZlY3Q6IEFjdGlvblNpZGVFZmZlY3RzVHlwZSAmIHsgY29udGV4dDogT0RhdGFWNENvbnRleHQgfSxcblx0XHRcdFx0aUNvbnRleHRMZW5ndGg6IG51bWJlclxuXHRcdFx0KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0XHRcdHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpO1xuXHRcdFx0XHRjb25zdCBpbmRpdmlkdWFsQWN0aW9uUHJvbWlzZTogUHJvbWlzZTx1bmtub3duPltdID0gW107XG5cdFx0XHRcdC8vIEZvciBpbnZvY2F0aW9uIGdyb3VwaW5nIFwiaXNvbGF0ZWRcIiBuZWVkIGJhdGNoIGdyb3VwIHBlciBhY3Rpb24gY2FsbFxuXHRcdFx0XHRzR3JvdXBJZCA9ICFiR3JvdXBlZCA/IGAkYXV0by4ke2N1cnJlbnRfY29udGV4dF9pbmRleH1gIDogYWN0aW9uQ29udGV4dC5nZXRVcGRhdGVHcm91cElkKCk7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLnJlcXVlc3RTaWRlRWZmZWN0cyA9IGZuUmVxdWVzdFNpZGVFZmZlY3RzLmJpbmQoXG5cdFx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdG9TaWRlRWZmZWN0LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdG9BY3Rpb25Qcm9taXNlID0gZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyhcblx0XHRcdFx0XHRhY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJHZXRCb3VuZENvbnRleHQsXG5cdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRpQ29udGV4dExlbmd0aCxcblx0XHRcdFx0XHRjdXJyZW50X2NvbnRleHRfaW5kZXgsXG5cdFx0XHRcdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZU9iamVjdENoYW5nZVNldC5pbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZSxcblx0XHRcdFx0XHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlT2JqZWN0Q2hhbmdlU2V0LmludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3QsXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdFx0XHRcdFx0aWdub3JlRVRhZ1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRhQWN0aW9uUHJvbWlzZXMucHVzaChvQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHRcdGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlLnB1c2goaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZU9iamVjdENoYW5nZVNldC5vTG9jYWxBY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0Zm5SZXF1ZXN0U2lkZUVmZmVjdHMob0FwcENvbXBvbmVudCwgb1NpZGVFZmZlY3QsIG1QYXJhbWV0ZXJzLCBzR3JvdXBJZCwgaW5kaXZpZHVhbEFjdGlvblByb21pc2UpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlKTtcblx0XHRcdH07XG5cdFx0XHRjb25zdCBmbkV4ZWN1dGVTaW5nbGVBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiAoXG5cdFx0XHRcdGFjdGlvbkNvbnRleHQ6IE9EYXRhQ29udGV4dEJpbmRpbmcsXG5cdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleDogbnVtYmVyIHwgbnVsbCxcblx0XHRcdFx0b1NpZGVFZmZlY3Q6IChBY3Rpb25TaWRlRWZmZWN0c1R5cGUgJiB7IGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0IH0pIHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRpQ29udGV4dExlbmd0aDogbnVtYmVyXG5cdFx0XHQpOiBQcm9taXNlPFByb21pc2VTZXR0bGVkUmVzdWx0PHVua25vd24+W10+IHtcblx0XHRcdFx0Y29uc3QgaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZU9iamVjdElzb2xhdGVkID0gY3JlYXRlaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZUZvckFjdGlvbkV4ZWN1dGlvbigpO1xuXHRcdFx0XHRjb25zdCBpbmRpdmlkdWFsQWN0aW9uUHJvbWlzZTogUHJvbWlzZTx1bmtub3duPltdID0gW107XG5cdFx0XHRcdHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpO1xuXHRcdFx0XHQvLyBGb3IgaW52b2NhdGlvbiBncm91cGluZyBcImlzb2xhdGVkXCIgbmVlZCBiYXRjaCBncm91cCBwZXIgYWN0aW9uIGNhbGxcblx0XHRcdFx0c0dyb3VwSWQgPSBtUGFyYW1ldGVycy5ncm91cElkIHx8IGBhcGlNb2RlJHtjdXJyZW50X2NvbnRleHRfaW5kZXh9YDtcblx0XHRcdFx0bVBhcmFtZXRlcnMucmVxdWVzdFNpZGVFZmZlY3RzID0gZm5SZXF1ZXN0U2lkZUVmZmVjdHMuYmluZChcblx0XHRcdFx0XHRvcGVyYXRpb25zLFxuXHRcdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0b1NpZGVFZmZlY3QsXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0aW5kaXZpZHVhbEFjdGlvblByb21pc2Vcblx0XHRcdFx0KTtcblx0XHRcdFx0b0FjdGlvblByb21pc2UgPSBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzKFxuXHRcdFx0XHRcdGFjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0YkdldEJvdW5kQ29udGV4dCxcblx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoLFxuXHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCxcblx0XHRcdFx0XHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlT2JqZWN0SXNvbGF0ZWQuaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUsXG5cdFx0XHRcdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZU9iamVjdElzb2xhdGVkLmludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3QsXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdFx0XHRcdFx0aWdub3JlRVRhZ1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRhQWN0aW9uUHJvbWlzZXMucHVzaChvQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHRcdGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlLnB1c2goaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZU9iamVjdElzb2xhdGVkLm9Mb2NhbEFjdGlvblByb21pc2UpO1xuXHRcdFx0XHRmblJlcXVlc3RTaWRlRWZmZWN0cyhvQXBwQ29tcG9uZW50LCBvU2lkZUVmZmVjdCwgbVBhcmFtZXRlcnMsIHNHcm91cElkLCBpbmRpdmlkdWFsQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHRcdG9Nb2RlbC5zdWJtaXRCYXRjaChzR3JvdXBJZCk7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoaW5kaXZpZHVhbEFjdGlvblByb21pc2UpO1xuXHRcdFx0fTtcblxuXHRcdFx0YXN5bmMgZnVuY3Rpb24gZm5FeGVjdXRlQ2hhbmdlc2V0KCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0XHRjb25zdCBhQ2hhbmdlU2V0TG9jYWxQcm9taXNlczogdW5rbm93bltdID0gW107XG5cdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBhQ29udGV4dHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRvQWN0aW9uID0gb01vZGVsLmJpbmRDb250ZXh0KGAke3NBY3Rpb25OYW1lfSguLi4pYCwgYUNvbnRleHRzW2ldLCBtQmluZGluZ1BhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdGFDaGFuZ2VTZXRMb2NhbFByb21pc2VzLnB1c2goXG5cdFx0XHRcdFx0XHRmbkV4ZWN1dGVBY3Rpb24oXG5cdFx0XHRcdFx0XHRcdG9BY3Rpb24sXG5cdFx0XHRcdFx0XHRcdGFDb250ZXh0cy5sZW5ndGggPCAxID8gbnVsbCA6IGkgKyAxLFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dDogYUNvbnRleHRzW2ldLFxuXHRcdFx0XHRcdFx0XHRcdHBhdGhFeHByZXNzaW9uczogbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QgJiYgbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLFxuXHRcdFx0XHRcdFx0XHRcdHRyaWdnZXJBY3Rpb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9uc1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRhQ29udGV4dHMubGVuZ3RoXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHQoXG5cdFx0XHRcdFx0Zm5PblN1Ym1pdHRlZCB8fFxuXHRcdFx0XHRcdGZ1bmN0aW9uIG5vb3AoKTogdm9pZCB7XG5cdFx0XHRcdFx0XHQvKiovXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpKGFBY3Rpb25Qcm9taXNlcyk7XG5cblx0XHRcdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGFDaGFuZ2VTZXRMb2NhbFByb21pc2VzKTtcblx0XHRcdFx0aWYgKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nUHJvbWlzZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGlmICghbWVzc2FnZUhhbmRsaW5nLmhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzKCkpIHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgb3BlcmF0aW9uc0hlbHBlci5yZW5kZXJNZXNzYWdlVmlldyhcblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRcdFx0XHRcdFx0XHRcdGFDb250ZXh0cy5sZW5ndGggPiAxXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1Byb21pc2VzLmZvckVhY2goZnVuY3Rpb24gKHNoUHJvbWlzZSkge1xuXHRcdFx0XHRcdFx0XHRcdHNoUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2VNb2RlbCA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZXNJbk1vZGVsID0gbWVzc2FnZU1vZGVsLmdldERhdGEoKTtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZU1vZGVsLnNldERhdGEobWVzc2FnZXNJbk1vZGVsLmNvbmNhdChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcykpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiUmV0cmlnZ2VyaW5nIG9mIHN0cmljdCBoYW5kbGluZyBhY3Rpb25zIGZhaWxlZFwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm5IYW5kbGVSZXN1bHRzKCk7XG5cdFx0XHR9XG5cblx0XHRcdGFzeW5jIGZ1bmN0aW9uIGZuRXhlY3V0ZVNlcXVlbnRpYWxseShjb250ZXh0c1RvRXhlY3V0ZTogT0RhdGFWNENvbnRleHRbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0XHQvLyBPbmUgYWN0aW9uIGFuZCBpdHMgc2lkZSBlZmZlY3RzIGFyZSBjb21wbGV0ZWQgYmVmb3JlIHRoZSBuZXh0IGFjdGlvbiBpcyBleGVjdXRlZFxuXHRcdFx0XHQoXG5cdFx0XHRcdFx0Zm5PblN1Ym1pdHRlZCB8fFxuXHRcdFx0XHRcdGZ1bmN0aW9uIG5vb3AoKTogdm9pZCB7XG5cdFx0XHRcdFx0XHQvKiovXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpKGFBY3Rpb25Qcm9taXNlcyk7XG5cdFx0XHRcdGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NPbmVBY3Rpb24oXG5cdFx0XHRcdFx0Y29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0XHRcdFx0YWN0aW9uSW5kZXg6IG51bWJlcixcblx0XHRcdFx0XHRpQ29udGV4dExlbmd0aDogbnVtYmVyXG5cdFx0XHRcdCk6IFByb21pc2U8UHJvbWlzZVNldHRsZWRSZXN1bHQ8dW5rbm93bj5bXT4ge1xuXHRcdFx0XHRcdG9BY3Rpb24gPSBvTW9kZWwuYmluZENvbnRleHQoYCR7c0FjdGlvbk5hbWV9KC4uLilgLCBjb250ZXh0LCBtQmluZGluZ1BhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdC8vIEFjdGlvbiBvbiB0aGUgdGFibGUgbGV2ZWwgaXMgYm91bmQgb24gYSBjb3B5IG9mIHRoZSBvRGF0YUxpc3RCaW5kaW5nLCB0byBleGVjdXRlIHRoZSBTaWRlRWZmZWN0cyB3ZSBuZWVkXG5cdFx0XHRcdFx0Ly8gdG8gZG8gaXQgb24gdGhlIG9yaWdpbmFsIG9EYXRhTGlzdEJpbmRpbmdcblx0XHRcdFx0XHRjb25zdCBpbml0aWFsVGFibGVDb250ZXh0ID0gKG1QYXJhbWV0ZXJzLmNvbnRyb2wgYXMgVGFibGUpPy5nZXRSb3dCaW5kaW5nPy4oKT8uZ2V0SGVhZGVyQ29udGV4dCgpO1xuXHRcdFx0XHRcdHJldHVybiBmbkV4ZWN1dGVTaW5nbGVBY3Rpb24oXG5cdFx0XHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRcdFx0YWN0aW9uSW5kZXgsXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHQ6XG5cdFx0XHRcdFx0XHRcdFx0aW5pdGlhbFRhYmxlQ29udGV4dCAmJiBpbml0aWFsVGFibGVDb250ZXh0LmdldFBhdGgoKSA9PT0gY29udGV4dC5nZXRQYXRoKCkgPyBpbml0aWFsVGFibGVDb250ZXh0IDogY29udGV4dCxcblx0XHRcdFx0XHRcdFx0cGF0aEV4cHJlc3Npb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMsXG5cdFx0XHRcdFx0XHRcdHRyaWdnZXJBY3Rpb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9uc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIHNlcmlhbGl6YXRpb246IHByb2Nlc3NPbmVBY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBlYWNoIGVudHJ5IGluIGNvbnRleHRzVG9FeGVjdXRlIG9ubHkgYWZ0ZXIgdGhlIHByb21pc2UgcmV0dXJuZWQgZnJvbSB0aGUgb25lIGJlZm9yZSBoYXMgYmVlbiByZXNvbHZlZFxuXHRcdFx0XHRhd2FpdCBjb250ZXh0c1RvRXhlY3V0ZS5yZWR1Y2UoYXN5bmMgKHByb21pc2U6IFByb21pc2U8dm9pZD4sIGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBpZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRcdFx0YXdhaXQgcHJvbWlzZTtcblx0XHRcdFx0XHRhd2FpdCBwcm9jZXNzT25lQWN0aW9uKGNvbnRleHQsIGlkICsgMSwgYUNvbnRleHRzLmxlbmd0aCk7XG5cdFx0XHRcdH0sIFByb21pc2UucmVzb2x2ZSgpKTtcblxuXHRcdFx0XHRpZiAoc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdQcm9taXNlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRhd2FpdCBvcGVyYXRpb25zSGVscGVyLnJlbmRlck1lc3NhZ2VWaWV3KFxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcyxcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRcdFx0XHRcdFx0YUNvbnRleHRzLmxlbmd0aCA+IDFcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZuSGFuZGxlUmVzdWx0cygpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWJHcm91cGVkKSB7XG5cdFx0XHRcdC8vIEZvciBpbnZvY2F0aW9uIGdyb3VwaW5nIFwiaXNvbGF0ZWRcIiwgZW5zdXJlIHRoYXQgZWFjaCBhY3Rpb24gYW5kIG1hdGNoaW5nIHNpZGUgZWZmZWN0c1xuXHRcdFx0XHQvLyBhcmUgcHJvY2Vzc2VkIGJlZm9yZSB0aGUgbmV4dCBzZXQgaXMgc3VibWl0dGVkLiBXb3JrYXJvdW5kIHVudGlsIEpTT04gYmF0Y2ggaXMgYXZhaWxhYmxlLlxuXHRcdFx0XHQvLyBBbGxvdyBhbHNvIGZvciBMaXN0IFJlcG9ydC5cblx0XHRcdFx0Zm5FeGVjdXRlU2VxdWVudGlhbGx5KGFDb250ZXh0cyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmbkV4ZWN1dGVDaGFuZ2VzZXQoKTtcblx0XHRcdH1cblxuXHRcdFx0YXN5bmMgZnVuY3Rpb24gZm5IYW5kbGVSZXN1bHRzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0XHQvLyBQcm9taXNlLmFsbFNldHRsZWQgd2lsbCBuZXZlciBiZSByZWplY3RlZC4gSG93ZXZlciwgZXNsaW50IHJlcXVpcmVzIGVpdGhlciBjYXRjaCBvciByZXR1cm4gLSB0aHVzIHdlIHJldHVybiB0aGUgcmVzdWx0aW5nIFByb21pc2UgYWx0aG91Z2ggbm8gb25lIHdpbGwgdXNlIGl0LlxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKGFBY3Rpb25Qcm9taXNlcykudGhlbihyZXNvbHZlKTtcblx0XHRcdH1cblx0XHR9KS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRcdChcblx0XHRcdFx0Zm5PblJlc3BvbnNlIHx8XG5cdFx0XHRcdGZ1bmN0aW9uIG5vb3AoKTogdm9pZCB7XG5cdFx0XHRcdFx0LyoqL1xuXHRcdFx0XHR9XG5cdFx0XHQpKCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b0FjdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChgLyR7c0FjdGlvbk5hbWV9KC4uLilgKTtcblx0XHRzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUoKTtcblx0XHRjb25zdCBzR3JvdXBJZCA9IFwiYWN0aW9uSW1wb3J0XCI7XG5cdFx0Y29uc3Qgb0FjdGlvblByb21pc2U6IFByb21pc2U8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+ID0gb0FjdGlvbi5leGVjdXRlKFxuXHRcdFx0c0dyb3VwSWQsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRvcGVyYXRpb25zSGVscGVyLmZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZC5iaW5kKFxuXHRcdFx0XHRvcGVyYXRpb25zLFxuXHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0eyBsYWJlbDogbVBhcmFtZXRlcnMubGFiZWwsIG1vZGVsOiBvTW9kZWwgfSxcblx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG5cdFx0XHQpXG5cdFx0KTtcblx0XHRjb25zdCBhbGxQcm9taXNlOiBQcm9taXNlPHVua25vd24+W10gPSBbb0FjdGlvblByb21pc2VdO1xuXHRcdGlmIChtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCkge1xuXHRcdFx0Ly8gV2UgYWx3YXlzIG5lZWQgYSBjb250ZXh0IHRvIHRyaWdnZXIgc2lkZS1lZmZlY3RzLCBzbyB3ZSBjcmVhdGUgb25lIHdpdGggYSBkdW1teSBwYXRoIGFuZCBkZXN0cm95IGl0IGFmdGVyd2FyZHNcblx0XHRcdGNvbnN0IGJpbmRpbmcgPSBvTW9kZWwuYmluZENvbnRleHQoXCIvdW5Cb3VuZEFjdGlvblwiKTtcblx0XHRcdGNvbnN0IHNpZGVFZmZlY3QgPSB7XG5cdFx0XHRcdGNvbnRleHQ6IGJpbmRpbmcuZ2V0Qm91bmRDb250ZXh0KCksXG5cdFx0XHRcdHBhdGhFeHByZXNzaW9uczogbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLFxuXHRcdFx0XHR0cmlnZ2VyQWN0aW9uczogbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnNcblx0XHRcdH07XG5cdFx0XHRvcGVyYXRpb25zLmZuUmVxdWVzdFNpZGVFZmZlY3RzKG9BcHBDb21wb25lbnQsIHNpZGVFZmZlY3QsIG1QYXJhbWV0ZXJzLCBzR3JvdXBJZCwgYWxsUHJvbWlzZSk7XG5cdFx0XHRiaW5kaW5nLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0b01vZGVsLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0XHQvLyB0cmlnZ2VyIG9uU3VibWl0dGVkIFwiZXZlbnRcIlxuXHRcdChcblx0XHRcdGZuT25TdWJtaXR0ZWQgfHxcblx0XHRcdGZ1bmN0aW9uIG5vb3AoKTogdm9pZCB7XG5cdFx0XHRcdC8qKi9cblx0XHRcdH1cblx0XHQpKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYWxsUHJvbWlzZSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChjdXJyZW50UHJvbWlzZVZhbHVlczogdW5rbm93bltdKSB7XG5cdFx0XHRcdC8vIEhlcmUgd2UgZW5zdXJlIHRoYXQgd2UgcmV0dXJuIHRoZSByZXNwb25zZSB3ZSBnb3QgZnJvbSBhbiB1bmJvdW5kIGFjdGlvbiB0byB0aGVcblx0XHRcdFx0Ly8gY2FsbGVyIEJDUCA6IDIyNzAxMzkyNzlcblx0XHRcdFx0Y29uc3QgY3VycmVudFByb21pc2VWYWx1ZSA9IGN1cnJlbnRQcm9taXNlVmFsdWVzWzBdO1xuXHRcdFx0XHRpZiAoY3VycmVudFByb21pc2VWYWx1ZSkge1xuXHRcdFx0XHRcdHJldHVybiBjdXJyZW50UHJvbWlzZVZhbHVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBvQWN0aW9uLmdldEJvdW5kQ29udGV4dD8uKCk/LmdldE9iamVjdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGFjdGlvbiBcIiArIHNBY3Rpb25OYW1lLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0dGhyb3cgb0Vycm9yO1xuXHRcdFx0fSlcblx0XHRcdC5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0KFxuXHRcdFx0XHRcdGZuT25SZXNwb25zZSB8fFxuXHRcdFx0XHRcdGZ1bmN0aW9uIG5vb3AoKTogdm9pZCB7XG5cdFx0XHRcdFx0XHQvKiovXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpKCk7XG5cdFx0XHR9KTtcblx0fVxufVxuXG5mdW5jdGlvbiBfdmFsdWVzUHJvdmlkZWRGb3JBbGxNYW5kYXRvcnlQYXJhbWV0ZXJzKFxuXHRpc0NyZWF0ZUFjdGlvbjogYm9vbGVhbixcblx0YWN0aW9uUGFyYW1ldGVyczogRWRtQWN0aW9uUGFyYW1ldGVyW10sXG5cdHBhcmFtZXRlclZhbHVlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sXG5cdHN0YXJ0dXBQYXJhbWV0ZXJzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IGJvb2xlYW4ge1xuXHRjb25zdCBoaWRkZW5Bbm5vdGF0aW9uU2V0T25BbGxBY3Rpb25zID0gYWN0aW9uUGFyYW1ldGVycy5ldmVyeSgocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXI/LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWUpO1xuXG5cdGlmIChwYXJhbWV0ZXJWYWx1ZXM/Lmxlbmd0aCAmJiAhaGlkZGVuQW5ub3RhdGlvblNldE9uQWxsQWN0aW9ucykge1xuXHRcdC8vIElmIHNob3dEaWFsb2cgaXMgZmFsc2UgYnV0IHRoZXJlIGFyZSBwYXJhbWV0ZXJzIGZyb20gdGhlIGludm9rZUFjdGlvbiBjYWxsIHdoaWNoIG5lZWQgdG8gYmUgY2hlY2tlZCBvbiBleGlzdGFuY2Vcblx0XHRmb3IgKGNvbnN0IGFjdGlvblBhcmFtZXRlciBvZiBhY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGFjdGlvblBhcmFtZXRlci5uYW1lICE9PSBcIlJlc3VsdElzQWN0aXZlRW50aXR5XCIgJiZcblx0XHRcdFx0IXBhcmFtZXRlclZhbHVlcz8uZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5uYW1lID09PSBhY3Rpb25QYXJhbWV0ZXIubmFtZSlcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBBdCBsZWFzdCBmb3Igb25lIHBhcmFtZXRlciBubyB2YWx1ZSBoYXMgYmVlbiBwcm92aWRlZCwgc28gd2UgY2FuJ3Qgc2tpcCB0aGUgZGlhbG9nXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoaXNDcmVhdGVBY3Rpb24gJiYgc3RhcnR1cFBhcmFtZXRlcnM/Lmxlbmd0aCAmJiAhaGlkZGVuQW5ub3RhdGlvblNldE9uQWxsQWN0aW9ucykge1xuXHRcdC8vIElmIHBhcmFtZXRlcnMgaGF2ZSBiZWVuIHByb3ZpZGVkIGR1cmluZyBhcHBsaWNhdGlvbiBsYXVuY2gsIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHNldCBpcyBjb21wbGV0ZVxuXHRcdC8vIElmIG5vdCwgdGhlIHBhcmFtZXRlciBkaWFsb2cgc3RpbGwgbmVlZHMgdG8gYmUgc2hvd24uXG5cdFx0Zm9yIChjb25zdCBhY3Rpb25QYXJhbWV0ZXIgb2YgYWN0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0aWYgKHN0YXJ0dXBQYXJhbWV0ZXJzICYmICFzdGFydHVwUGFyYW1ldGVyc1thY3Rpb25QYXJhbWV0ZXIubmFtZV0pIHtcblx0XHRcdFx0Ly8gQXQgbGVhc3QgZm9yIG9uZSBwYXJhbWV0ZXIgbm8gdmFsdWUgaGFzIGJlZW4gcHJvdmlkZWQsIHNvIHdlIGNhbid0IHNraXAgdGhlIGRpYWxvZ1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKGFjdGlvblBhcmFtZXRlcnMubGVuZ3RoICYmIGhpZGRlbkFubm90YXRpb25TZXRPbkFsbEFjdGlvbnMpIHtcblx0XHRyZXR1cm4gYWN0aW9uUGFyYW1ldGVycy5ldmVyeShmdW5jdGlvbiAocGFyYW1ldGVyKSB7XG5cdFx0XHRjb25zdCBmaWVsZENvbnRyb2wgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnM/LkNvbW1vbj8uRmllbGRDb250cm9sO1xuXHRcdFx0Y29uc3QgaXNNYW5kYXRvcnkgPSBmaWVsZENvbnRyb2w/LnRvU3RyaW5nKCkgPT09IFwiQ29tbW9uLkZpZWxkQ29udHJvbFR5cGUvTWFuZGF0b3J5XCI7XG5cblx0XHRcdC8vIFBvc3NpYmxlIHNvdXJjZXMgbWF5IGJlIHN0YXJ0dXBQYXJhbWV0ZXJzLCBwYXJhbWV0ZXJWYWx1ZXMsIGRlZmF1bHRWYWx1ZXMgcGVyIGFubm90YXRpb24gKFBhcmFtZXRlckRlZmF1bHRWYWx1ZSlcblx0XHRcdC8vIElmIG5vbmUgaXMgZm91bmQsIHJldHVybiBmYWxzZVxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0IWlzTWFuZGF0b3J5IHx8XG5cdFx0XHRcdChzdGFydHVwUGFyYW1ldGVycyAmJiBzdGFydHVwUGFyYW1ldGVyc1twYXJhbWV0ZXIubmFtZV0pIHx8XG5cdFx0XHRcdHBhcmFtZXRlclZhbHVlcz8uZmluZCgocGFyYW1ldGVyVmFsdWUpID0+IHBhcmFtZXRlclZhbHVlLm5hbWUgPT09IHBhcmFtZXRlci5uYW1lKSB8fFxuXHRcdFx0XHRwYXJhbWV0ZXI/LmFubm90YXRpb25zPy5VST8uUGFyYW1ldGVyRGVmYXVsdFZhbHVlPy52YWx1ZU9mKClcblx0XHRcdCk7XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZm5SZXF1ZXN0U2lkZUVmZmVjdHMoXG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRzaWRlRWZmZWN0OiAoQWN0aW9uU2lkZUVmZmVjdHNUeXBlICYgeyBjb250ZXh0OiBPRGF0YVY0Q29udGV4dCB9KSB8IHVuZGVmaW5lZCxcblx0cGFyYW1ldGVyczoge1xuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcblx0XHRzZWxlY3RlZEl0ZW1zOiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0PzogSW50ZXJuYWxNb2RlbENvbnRleHQgfCBudWxsO1xuXHR9LFxuXHRncm91cElkOiBzdHJpbmcsXG5cdGxvY2FsUHJvbWlzZT86IFByb21pc2U8dW5rbm93bj5bXVxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IHNpZGVFZmZlY3RzU2VydmljZSA9IGFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0bGV0IHByb21pc2VzOiBQcm9taXNlPHVua25vd24+W10gPSBsb2NhbFByb21pc2UgPz8gW107XG5cdC8vIHRyaWdnZXIgYWN0aW9ucyBmcm9tIHNpZGUgZWZmZWN0c1xuXHRpZiAoc2lkZUVmZmVjdCkge1xuXHRcdHByb21pc2VzID0gcHJvbWlzZXMuY29uY2F0KFxuXHRcdFx0KHNpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnMgPz8gW10pLm1hcChhc3luYyAoYWN0aW9uKSA9PiBzaWRlRWZmZWN0c1NlcnZpY2UuZXhlY3V0ZUFjdGlvbihhY3Rpb24sIHNpZGVFZmZlY3QuY29udGV4dCwgZ3JvdXBJZCkpLFxuXHRcdFx0c2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMgPyBzaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLCBzaWRlRWZmZWN0LmNvbnRleHQsIGdyb3VwSWQpIDogW11cblx0XHQpO1xuXG5cdFx0aWYgKHNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cdFx0XHRcdGlmIChwYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCAmJiBwYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRcdEpTT04ucGFyc2UocGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVycy5zZWxlY3RlZEl0ZW1zLFxuXHRcdFx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXF1ZXN0aW5nIHNpZGUgZWZmZWN0c1wiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEVuaGFuY2VzIHRoZSBzaWRlIGVmZmVjdHMgb2YgdGhlIG9wZXJhdGlvblxuICpcbiAqIFdoZW4gYSBuZXcgZW50aXR5IGlzIGNyZWF0ZWQgdXNpbmcgYSBEYXRhRmllbGRGb3JBY3Rpb24sIGEgbmV3XG4gKiBvRGF0YUNvbnRleHRCaW5kaW5nIGlzIGNyZWF0ZWQgdG8gZXhlY3V0ZSB0aGUgYWN0aW9uLiBCeSBkZWZhdWx0LCB0aGlzXG4gKiBvRGF0YUNvbnRleHRCaW5kaW5nIGlzIHJlbGF0aXZlIHRvIHRoZSBPZGF0YUxpc3RCaW5kaW5nIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiBCZWNhdXNlIG9mIHRoaXMgZGVwZW5kZW5jeSwgd2hlbiBhIFNpZGVFZmZlY3RzIGlzIGV4ZWN1dGVkIG9uIHRoZVxuICogY29udGV4dCBpbnRvIHRoZSBPZGF0YUxpc3RCaW5kaW5nIHdoZXJlIHRoZSBvRGF0YUNvbnRleHRCaW5kaW5nIHdhcyBib3VuZCwgdGhpcyBTaWRlRWZmZWN0cyBpcyBhbHNvIHRyaWdnZXJlZCBvbiB0aGlzXG4gKiBvRGF0YUNvbnRleHRCaW5kaW5nLiBXZSBkb24ndCBtYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiB0aGVcbiAqIG9EYXRhQ29udGV4dEJpbmRpbmcuIEl0IG1lYW5zIGV2ZW4gaWYgdGhlIGRyYWZ0IHJlbGF0ZWQgdG8gdGhlIGFjdGlvblxuICogaXMgcmVtb3ZlZCwgdGhlIG9kYXRhQ29udGV4dEJpbmRpbmcgaXMgc3RpbGwgdGhlcmUsIHNvIGlmIGEgU2lkZUVmZmVjdHNcbiAqIGlzIGV4ZWN1dGVkIG9uIHRoZSBzb3VyY2UgdGFyZ2V0IGludG8gb0RhdGFDb250ZXh0QmluZGluZywgYW4gZXJyb3IgZnJvbSB0aGUgYmFjayBlbmQgd2lsbCBiZVxuICogcmVjZWl2ZWQgYmVjYXVzZSB3ZSBhc2sgdG8gcmVmcmVzaCBhIHByb3BlcnR5IG9uIGFuIHVua25vd24gZW50aXR5LlxuICpcbiAqIFRoZSBTaWRlRWZmZWN0cyBhcmUgcmVxdWVzdGVkIG9ubHkgaWYgdGhlIHBhZ2UgaXMgc3RpbGwgb3Blbi5cbiAqIFRoaXMgYXZvaWRzIGdlbmVyYXRpbmcgaXNzdWVzIHdpdGggZ2hvc3Qgb0RhdGFDb250ZXh0QmluZGluZyBsaW5rZWQgdG8gZGVzdHJveWVkIGNvbnRleHQuXG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50IFRoZSBhcHBsaWNhdGlvbiBjb21wb25lbnRcbiAqIEBwYXJhbSBvcGVyYXRpb25Db250ZXh0QmluZGluZyBUaGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0gcmV0dXJuZWRDb250ZXh0IFRoZSByZXR1cm5lZCBjb250ZXh0IG9mIHRoaXMgb3BlcmF0aW9uXG4gKi9cbmZ1bmN0aW9uIGVuaGFuY2VTaWRlRWZmZWN0cyhcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfCB1bmRlZmluZWQsXG5cdG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nOiBPRGF0YUNvbnRleHRCaW5kaW5nLFxuXHRyZXR1cm5lZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkXG4pOiB2b2lkIHtcblx0aWYgKHJldHVybmVkQ29udGV4dCkge1xuXHRcdGNvbnN0IG9yaWdpbiA9IG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLnJlcXVlc3RTaWRlRWZmZWN0cy5iaW5kKG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nKTtcblx0XHRvcGVyYXRpb25Db250ZXh0QmluZGluZy5yZXF1ZXN0U2lkZUVmZmVjdHMgPSBhc3luYyAoLi4uYXJnczogdW5rbm93bltdKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHRcdD8uZ2V0Um9vdFZpZXdDb250cm9sbGVyKClcblx0XHRcdFx0XHQuZ2V0SW5zdGFuY2VkVmlld3MoKVxuXHRcdFx0XHRcdC5maW5kKChwYWdlVmlldzogVmlldykgPT4gcGFnZVZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSA9PT0gcmV0dXJuZWRDb250ZXh0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBvcmlnaW4oLi4uYXJncyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fTtcblx0fVxufVxuXG4vKipcbiAqIFN0YXRpYyBmdW5jdGlvbnMgdG8gY2FsbCBPRGF0YSBhY3Rpb25zIChib3VuZC9pbXBvcnQpIGFuZCBmdW5jdGlvbnMgKGJvdW5kL2ltcG9ydClcbiAqIEBuYW1lc3BhY2VcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtb2R1bGUgaXMgb25seSBmb3IgZXhwZXJpbWVudGFsIHVzZSEgPGJyLz48Yj5UaGlzIGlzIG9ubHkgYSBQT0MgYW5kIG1heWJlIGRlbGV0ZWQ8L2I+XG4gKiBAc2luY2UgMS41Ni4wXG4gKi9cbmNvbnN0IG9wZXJhdGlvbnMgPSB7XG5cdGNhbGxCb3VuZEFjdGlvbjogY2FsbEJvdW5kQWN0aW9uLFxuXHRjYWxsQWN0aW9uSW1wb3J0OiBjYWxsQWN0aW9uSW1wb3J0LFxuXHRjYWxsQm91bmRGdW5jdGlvbjogY2FsbEJvdW5kRnVuY3Rpb24sXG5cdGNhbGxGdW5jdGlvbkltcG9ydDogY2FsbEZ1bmN0aW9uSW1wb3J0LFxuXHRleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzOiBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzLFxuXHRjcmVhdGVpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlRm9yQWN0aW9uRXhlY3V0aW9uOiBjcmVhdGVpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlRm9yQWN0aW9uRXhlY3V0aW9uLFxuXHR2YWx1ZXNQcm92aWRlZEZvckFsbE1hbmRhdG9yeVBhcmFtZXRlcnM6IF92YWx1ZXNQcm92aWRlZEZvckFsbE1hbmRhdG9yeVBhcmFtZXRlcnMsXG5cdGFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2s6IGFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2ssXG5cdGFmdGVyQWN0aW9uUmVzb2x1dGlvbjogYWZ0ZXJBY3Rpb25SZXNvbHV0aW9uLFxuXHRmblJlcXVlc3RTaWRlRWZmZWN0czogZm5SZXF1ZXN0U2lkZUVmZmVjdHMsXG5cdGNoZWNrUGFyYW1ldGVyVHlwZUFuZFJldHVybkNvbnZlcnRlZFZhbHVlOiBjaGVja1BhcmFtZXRlclR5cGVBbmRSZXR1cm5Db252ZXJ0ZWRWYWx1ZVxufTtcblxuZXhwb3J0IGRlZmF1bHQgb3BlcmF0aW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBd0NBLE1BQU1BLFNBQVMsR0FBR0MsU0FBUyxDQUFDRCxTQUFTO0lBQ3BDRSxrQkFBa0IsR0FBR0QsU0FBUyxDQUFDQyxrQkFBa0I7RUFDbEQsTUFBTUMsTUFBTSxHQUFHQyxVQUFVLENBQUNELE1BQU07RUFxRWhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxlQUFlRSxlQUFlQSxDQUM3QkMsV0FBbUIsRUFDbkJDLFFBQTBCLEVBQzFCQyxNQUFrQixFQUNsQkMsYUFBMkIsRUFDM0JDLFdBQWlDLEVBQ1A7SUFDMUIsSUFBSSxDQUFDSCxRQUFRLElBQUlBLFFBQVEsQ0FBQ0ksTUFBTSxLQUFLLENBQUMsRUFBRTtNQUN2QztNQUNBLE1BQU0sSUFBSUMsS0FBSyxDQUFDLG9EQUFvRCxDQUFDO0lBQ3RFO0lBRUEsTUFBTUMsaUJBQWlCLEdBQUdDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDUixRQUFRLENBQUM7SUFDakQ7SUFDQTtJQUNBO0lBQ0FHLFdBQVcsQ0FBQ00sU0FBUyxHQUFHRixLQUFLLENB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
|
|
@@ -1355,14 +1355,15 @@ async function _executeAction(
|
|
|
1355
1355
|
);
|
|
1356
1356
|
const allPromise: Promise<unknown>[] = [oActionPromise];
|
|
1357
1357
|
if (mParameters.additionalSideEffect) {
|
|
1358
|
-
|
|
1358
|
+
// We always need a context to trigger side-effects, so we create one with a dummy path and destroy it afterwards
|
|
1359
|
+
const binding = oModel.bindContext("/unBoundAction");
|
|
1359
1360
|
const sideEffect = {
|
|
1360
|
-
context:
|
|
1361
|
+
context: binding.getBoundContext(),
|
|
1361
1362
|
pathExpressions: mParameters.additionalSideEffect.pathExpressions,
|
|
1362
1363
|
triggerActions: mParameters.additionalSideEffect.triggerActions
|
|
1363
1364
|
};
|
|
1364
1365
|
operations.fnRequestSideEffects(oAppComponent, sideEffect, mParameters, sGroupId, allPromise);
|
|
1365
|
-
|
|
1366
|
+
binding.destroy();
|
|
1366
1367
|
}
|
|
1367
1368
|
oModel.submitBatch(sGroupId);
|
|
1368
1369
|
// trigger onSubmitted "event"
|
|
@@ -12,6 +12,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/formatters/ValueFormat
|
|
|
12
12
|
var enhanceDataModelPath = DataModelPathHelper.enhanceDataModelPath;
|
|
13
13
|
var getLabelForConnectedFields = DataFieldFormatters.getLabelForConnectedFields;
|
|
14
14
|
var isPropertyPathExpression = TypeGuards.isPropertyPathExpression;
|
|
15
|
+
var isProperty = TypeGuards.isProperty;
|
|
15
16
|
var isPathAnnotationExpression = TypeGuards.isPathAnnotationExpression;
|
|
16
17
|
var UI = BindingHelper.UI;
|
|
17
18
|
var Draft = BindingHelper.Draft;
|
|
@@ -257,16 +258,16 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/formatters/ValueFormat
|
|
|
257
258
|
let params;
|
|
258
259
|
if (titleValueExpression) {
|
|
259
260
|
params = Array.isArray(titleValueExpression) ? titleValueExpression : [titleValueExpression];
|
|
260
|
-
} else {
|
|
261
|
+
} else if (path.targetObject && isProperty(path.targetObject)) {
|
|
261
262
|
params = getTitleBindingWithTextArrangement(path, propertyBindingExpression, formatOptions);
|
|
262
263
|
}
|
|
263
|
-
const isTitleEmpty = isTitleEmptyBooleanExpression(params[0]);
|
|
264
|
+
const isTitleEmpty = params === undefined || isTitleEmptyBooleanExpression(params[0]);
|
|
264
265
|
const forceEmptyString = shouldForceEmptyString(path);
|
|
265
|
-
const formattedExpression = formatResult(params, formatter);
|
|
266
|
+
const formattedExpression = params != undefined && formatResult(params, formatter);
|
|
266
267
|
titleValueExpression = ifElse(isTitleEmpty, ifElse(or(isHeaderInfoTitleEmpty && isOrHasActiveEntity(path), forceEmptyString), "", ifElse(isUndefinedExpression(constant(customFormatter)), ifElse(or(UI.IsCreateMode, not(isOrHasActiveEntity(path))), createModeTitle, pathInModel("T_ANNOTATION_HELPER_DEFAULT_HEADER_TITLE_NO_HEADER_INFO", "sap.fe.i18n")), ifElse(not(isOrHasActiveEntity(path)), viewData === null || viewData === void 0 ? void 0 : viewData.resourceModel.getText("T_NEW_OBJECT"), viewData === null || viewData === void 0 ? void 0 : viewData.resourceModel.getText("T_ANNOTATION_HELPER_DEFAULT_HEADER_TITLE_NO_HEADER_INFO")))), formattedExpression);
|
|
267
268
|
return compileExpression(titleValueExpression);
|
|
268
269
|
};
|
|
269
270
|
_exports.getTitleBindingExpression = getTitleBindingExpression;
|
|
270
271
|
return _exports;
|
|
271
272
|
}, false);
|
|
272
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5IiwiYmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2UiLCJmdWxsQ29udGV4dFBhdGgiLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsImV4cHJlc3Npb24iLCJvdXRFeHByZXNzaW9uIiwibW9kZWxOYW1lIiwidW5kZWZpbmVkIiwib1Byb3BlcnR5RGF0YU1vZGVsUGF0aCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwicGF0aCIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJ0YXJnZXRPYmplY3QiLCJfZXhwb3J0cyIsImdldFByb3BlcnR5RGVmaW5pdGlvbiIsInByb3BlcnR5RGF0YU1vZGVsT2JqZWN0IiwicHJvcGVydHlQYXRoT3JQcm9wZXJ0eSIsImlzUHJvcGVydHlQYXRoRXhwcmVzc2lvbiIsIiR0YXJnZXQiLCJpc09ySGFzQWN0aXZlRW50aXR5IiwiX2Z1bGxDb250ZXh0UGF0aCR0YXJnIiwiX2Z1bGxDb250ZXh0UGF0aCR0YXJnMiIsIl9mdWxsQ29udGV4dFBhdGgkdGFyZzMiLCJfZnVsbENvbnRleHRQYXRoJHRhcmc0IiwiX2Z1bGxDb250ZXh0UGF0aCR0YXJnNSIsIl9mdWxsQ29udGV4dFBhdGgkdGFyZzYiLCJkcmFmdFJvb3QiLCJ0YXJnZXRFbnRpdHlTZXQiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIkRyYWZ0Um9vdCIsImRyYWZ0Tm9kZSIsIkRyYWZ0Tm9kZSIsIm5vdCIsIkRyYWZ0IiwiSXNOZXdPYmplY3QiLCJpc1RpdGxlRW1wdHlCb29sZWFuRXhwcmVzc2lvbiIsInRpdGxlVmFsdWVFeHByZXNzaW9uIiwiX3R5cGUiLCJjb25zdGFudCIsInZhbHVlIiwiaXNFbXB0eSIsImdldFRpdGxlQmluZGluZ1dpdGhUZXh0QXJyYW5nZW1lbnQiLCJwcm9wZXJ0eURhdGFNb2RlbFBhdGgiLCJwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIiwiZm9ybWF0T3B0aW9ucyIsIl9wcm9wZXJ0eURlZmluaXRpb24kYSIsIl9wcm9wZXJ0eURlZmluaXRpb24kYTIiLCJfY29tbW9uVGV4dCRhbm5vdGF0aW8iLCJfY29tbW9uVGV4dCRhbm5vdGF0aW8yIiwidGFyZ2V0RGlzcGxheU1vZGVPdmVycmlkZSIsImRpc3BsYXlNb2RlIiwicHJvcGVydHlEZWZpbml0aW9uIiwidGFyZ2V0RGlzcGxheU1vZGUiLCJVSUZvcm1hdHRlcnMiLCJnZXREaXNwbGF5TW9kZSIsImNvbW1vblRleHQiLCJUZXh0IiwicmVsYXRpdmVMb2NhdGlvbiIsImdldFJlbGF0aXZlUGF0aHMiLCJwYXJhbXMiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJ0YXJnZXRFeHByZXNzaW9uIiwic3BsaXRUaXRsZU9uVHdvTGluZXMiLCJpZkVsc2UiLCJVSSIsIlRleHRBcnJhbmdlbWVudCIsImFkZFRleHRBcnJhbmdlbWVudFRvVGl0bGVCaW5kaW5nRXhwcmVzc2lvbiIsImdldENyZWF0ZU1vZGVUaXRsZSIsInZpZXdEYXRhIiwiX3JlZiIsIlR5cGVOYW1lIiwidHlwZU5hbWUiLCJ0aXRsZU5vSGVhZGVySW5mbyIsInBhdGhJbk1vZGVsIiwiY3JlYXRlTW9kZVRpdGxlIiwicmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJlbnRpdHlTZXQiLCJ0aXRsZVdpdGhIZWFkZXJJbmZvIiwiY29uY2F0IiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJ0b1N0cmluZyIsImZvcm1hdFJlc3VsdCIsInZhbHVlRm9ybWF0dGVycyIsImZvcm1hdFRpdGxlIiwic2hvdWxkRm9yY2VFbXB0eVN0cmluZyIsIl9wcm9wZXJ0eURlZmluaXRpb24kYTMiLCJfcHJvcGVydHlEZWZpbml0aW9uJGE0IiwiQ29yZSIsIkNvbXB1dGVkIiwiSXNJbmFjdGl2ZSIsImdldFRpdGxlVmFsdWVFeHByZXNzaW9uRnJvbUhlYWRlckluZm8iLCJoZWFkZXJJbmZvVGl0bGUiLCJnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24iLCJfaGVhZGVySW5mb1RpdGxlJFRhcmciLCIkVHlwZSIsIl9WYWx1ZSIsIl9WYWx1ZSQkdGFyZ2V0IiwiX1ZhbHVlJCR0YXJnZXQkYW5ub3RhIiwiX1ZhbHVlJCR0YXJnZXQkYW5ub3RhMiIsIl9WYWx1ZSQkdGFyZ2V0JGFubm90YTMiLCJfVmFsdWUkJHRhcmdldCRhbm5vdGE0IiwiVmFsdWUiLCJUYXJnZXQiLCJjb25uZWN0ZWRGaWVsZHNQYXRoIiwiZ2V0TGFiZWxGb3JDb25uZWN0ZWRGaWVsZHMiLCJnZXRUaXRsZUJpbmRpbmdFeHByZXNzaW9uIiwiaGVhZGVySW5mbyIsImN1c3RvbUZvcm1hdHRlciIsIl9oZWFkZXJJbmZvJFRpdGxlJFZhbCIsIl9oZWFkZXJJbmZvJFRpdGxlJFZhbDIiLCJfaGVhZGVySW5mbyRUaXRsZSRWYWwzIiwiX2hlYWRlckluZm8kVGl0bGUkVmFsNCIsIl9oZWFkZXJJbmZvJFRpdGxlIiwiZm9ybWF0dGVyIiwiaXNIZWFkZXJJbmZvVGl0bGVFbXB0eSIsImV4dElkSGVhZGVySW5mb1RpdGxlIiwiaXNEYXRhRmllbGQiLCJUaXRsZSIsIkV4dGVybmFsSUQiLCJfaGVhZGVySW5mbyRUaXRsZSRWYWw1IiwiX2hlYWRlckluZm8kVGl0bGUkVmFsNiIsIl9oZWFkZXJJbmZvJFRpdGxlJFZhbDciLCJfaGVhZGVySW5mbyRUaXRsZSRWYWw4IiwiX2hlYWRlckluZm8kVGl0bGUkVmFsOSIsIl9oZWFkZXJJbmZvJFRpdGxlJFZhbDEwIiwiaXNDb25zdGFudCIsImNvbXBpbGVFeHByZXNzaW9uIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiQXJyYXkiLCJpc0FycmF5IiwiaXNUaXRsZUVtcHR5IiwiZm9yY2VFbXB0eVN0cmluZyIsImZvcm1hdHRlZEV4cHJlc3Npb24iLCJvciIsImlzVW5kZWZpbmVkRXhwcmVzc2lvbiIsIklzQ3JlYXRlTW9kZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGl0bGVIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQsIFByb3BlcnR5LCBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IENvbm5lY3RlZEZpZWxkcywgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgRGF0YUZpZWxkVHlwZXMsIEhlYWRlckluZm9UeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgUGF0aEluTW9kZWxFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uY2F0LFxuXHRjb25zdGFudCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0aXNFbXB0eSxcblx0aXNVbmRlZmluZWRFeHByZXNzaW9uLFxuXHRub3QsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVzb2x2ZUJpbmRpbmdTdHJpbmcsXG5cdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5XG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHZhbHVlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgRHJhZnQsIFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHsgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sIGlzUHJvcGVydHlQYXRoRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgVmlld0RhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgeyBnZXRMYWJlbEZvckNvbm5lY3RlZEZpZWxkcyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFGaWVsZEZvcm1hdHRlcnNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGVuaGFuY2VEYXRhTW9kZWxQYXRoLCBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLCBnZXRSZWxhdGl2ZVBhdGhzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0ICogYXMgVUlGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgaXNEYXRhRmllbGQgfSBmcm9tIFwiLi4vY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcblxudHlwZSBCaW5kaW5nRXhwcmVzc2lvblR1cGxlID0gW0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPl0gfCBbQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5dO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0VmFsdWVSZWN1cnNpdmVseSA9IGZ1bmN0aW9uIChcblx0YmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2U6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRmdWxsQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHkgfCBQcm9wZXJ0eVBhdGg+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdHJldHVybiB0cmFuc2Zvcm1SZWN1cnNpdmVseShiaW5kaW5nRXhwcmVzc2lvblRvRW5oYW5jZSwgXCJQYXRoSW5Nb2RlbFwiLCAoZXhwcmVzc2lvbikgPT4ge1xuXHRcdGxldCBvdXRFeHByZXNzaW9uID0gZXhwcmVzc2lvbjtcblx0XHRpZiAoZXhwcmVzc2lvbi5tb2RlbE5hbWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBkZWZhdWx0IG1vZGVsIHdlIHRoZW4gbmVlZCB0byByZXNvbHZlIHRoZSB0ZXh0IGFycmFuZ2VtZW50IHByb3BlcnR5XG5cdFx0XHRjb25zdCBvUHJvcGVydHlEYXRhTW9kZWxQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8UHJvcGVydHk+KGZ1bGxDb250ZXh0UGF0aCwgZXhwcmVzc2lvbi5wYXRoKTtcblx0XHRcdG91dEV4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0ISwgZXhwcmVzc2lvbik7XG5cdFx0fVxuXHRcdHJldHVybiBvdXRFeHByZXNzaW9uO1xuXHR9KTtcbn07XG5cbi8qKlxuICogR2V0IHByb3BlcnR5IGRlZmluaXRpb24gZnJvbSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoLlxuICogQHBhcmFtIHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0IFRoZSBwcm9wZXJ0eSBkYXRhIG1vZGVsIG9iamVjdFxuICogQHJldHVybnMgVGhlIHByb3BlcnR5XG4gKi9cbmNvbnN0IGdldFByb3BlcnR5RGVmaW5pdGlvbiA9IChwcm9wZXJ0eURhdGFNb2RlbE9iamVjdDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IFByb3BlcnR5UGF0aD4pOiBQcm9wZXJ0eSB8IHVuZGVmaW5lZCA9PiB7XG5cdGNvbnN0IHByb3BlcnR5UGF0aE9yUHJvcGVydHkgPSBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdC50YXJnZXRPYmplY3Q7XG5cdHJldHVybiBpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24ocHJvcGVydHlQYXRoT3JQcm9wZXJ0eSkgPyBwcm9wZXJ0eVBhdGhPclByb3BlcnR5LiR0YXJnZXQgOiBwcm9wZXJ0eVBhdGhPclByb3BlcnR5O1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiBhc3NvY2lhdGVkIGFjdGl2ZSBlbnRpdHkgZXhpc3RzLlxuICogQHBhcmFtIGZ1bGxDb250ZXh0UGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgZXhwcmVzc2lvbi1iaW5kaW5nIHN0cmluZ1xuICovXG5jb25zdCBpc09ySGFzQWN0aXZlRW50aXR5ID0gKGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPik6IGJvb2xlYW4gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPT4ge1xuXHRjb25zdCBkcmFmdFJvb3QgPSAoZnVsbENvbnRleHRQYXRoLnRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXQgfCB1bmRlZmluZWQpPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3Q7XG5cdGNvbnN0IGRyYWZ0Tm9kZSA9IChmdWxsQ29udGV4dFBhdGgudGFyZ2V0RW50aXR5U2V0IGFzIEVudGl0eVNldCB8IHVuZGVmaW5lZCk/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Tm9kZTtcblx0aWYgKCEhZHJhZnRSb290IHx8ICEhZHJhZnROb2RlKSB7XG5cdFx0cmV0dXJuIG5vdChEcmFmdC5Jc05ld09iamVjdCk7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGl0bGUgdmFsdWUgZXhwcmVzc2lvbiBpcyBlbXB0eS5cbiAqIEBwYXJhbSB0aXRsZVZhbHVlRXhwcmVzc2lvbiBUaGUgdGl0bGUgdmFsdWUgZXhwcmVzc2lvblxuICogQHJldHVybnMgVGhlIGV4cHJlc3Npb24tYmluZGluZyBzdHJpbmdcbiAqL1xuY29uc3QgaXNUaXRsZUVtcHR5Qm9vbGVhbkV4cHJlc3Npb24gPSAodGl0bGVWYWx1ZUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0+XG5cdHRpdGxlVmFsdWVFeHByZXNzaW9uLl90eXBlID09PSBcIkNvbnN0YW50XCIgPyBjb25zdGFudCghdGl0bGVWYWx1ZUV4cHJlc3Npb24udmFsdWUpIDogaXNFbXB0eSh0aXRsZVZhbHVlRXhwcmVzc2lvbik7XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB0aXRsZSBleHByZXNzaW9uIGJpbmRpbmcuXG4gKiBAcGFyYW0gcHJvcGVydHlEYXRhTW9kZWxQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHByb3BlcnR5IGNvbnRleHRcbiAqIEBwYXJhbSBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gb2YgdGhlIHByb3BlcnR5IGFib3ZlXG4gKiBAcGFyYW0gW2Zvcm1hdE9wdGlvbnNdIFRoZSBmb3JtYXQgb3B0aW9ucyBvZiB0aGUgZmllbGRcbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlXG4gKiBAcmV0dXJucyBUaGUgZXhwcmVzc2lvbi1iaW5kaW5nIHBhcmFtZXRlcnNcbiAqL1xuY29uc3QgZ2V0VGl0bGVCaW5kaW5nV2l0aFRleHRBcnJhbmdlbWVudCA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlEYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdGZvcm1hdE9wdGlvbnM/OiBQYXJ0aWFsPHsgZGlzcGxheU1vZGU/OiBEaXNwbGF5TW9kZTsgc3BsaXRUaXRsZU9uVHdvTGluZXM/OiBib29sZWFuIH0+XG4pOiBCaW5kaW5nRXhwcmVzc2lvblR1cGxlIHtcblx0Y29uc3QgdGFyZ2V0RGlzcGxheU1vZGVPdmVycmlkZSA9IGZvcm1hdE9wdGlvbnM/LmRpc3BsYXlNb2RlO1xuXHRjb25zdCBwcm9wZXJ0eURlZmluaXRpb24gPSBnZXRQcm9wZXJ0eURlZmluaXRpb24ocHJvcGVydHlEYXRhTW9kZWxQYXRoKTtcblx0Y29uc3QgdGFyZ2V0RGlzcGxheU1vZGUgPSB0YXJnZXREaXNwbGF5TW9kZU92ZXJyaWRlIHx8IFVJRm9ybWF0dGVycy5nZXREaXNwbGF5TW9kZShwcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXHRjb25zdCBjb21tb25UZXh0ID0gcHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0O1xuXHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UmVsYXRpdmVQYXRocyhwcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXG5cdGlmIChwcm9wZXJ0eURlZmluaXRpb24pIHtcblx0XHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihwcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHR9XG5cblx0bGV0IHBhcmFtczogQmluZGluZ0V4cHJlc3Npb25UdXBsZSA9IFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uXTtcblx0aWYgKHRhcmdldERpc3BsYXlNb2RlICE9PSBcIlZhbHVlXCIgJiYgY29tbW9uVGV4dCkge1xuXHRcdHN3aXRjaCAodGFyZ2V0RGlzcGxheU1vZGUpIHtcblx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRwYXJhbXMgPSBbZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGNvbW1vblRleHQsIHJlbGF0aXZlTG9jYXRpb24pXTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25WYWx1ZVwiOlxuXHRcdFx0XHRjb25zdCB0YXJnZXRFeHByZXNzaW9uID1cblx0XHRcdFx0XHRmb3JtYXRPcHRpb25zPy5zcGxpdFRpdGxlT25Ud29MaW5lcyA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHQ/IGlmRWxzZSghIWNvbW1vblRleHQuYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQsIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIGNvbnN0YW50KFwiXCIpKVxuXHRcdFx0XHRcdFx0OiBpZkVsc2UoISFmb3JtYXRPcHRpb25zPy5zcGxpdFRpdGxlT25Ud29MaW5lcywgY29uc3RhbnQoXCJcIiksIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRcdFx0XHRwYXJhbXMgPSBbZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGNvbW1vblRleHQsIHJlbGF0aXZlTG9jYXRpb24pLCB0YXJnZXRFeHByZXNzaW9uXTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRwYXJhbXMgPSBbXG5cdFx0XHRcdFx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbixcblx0XHRcdFx0XHRpZkVsc2UoISFmb3JtYXRPcHRpb25zPy5zcGxpdFRpdGxlT25Ud29MaW5lcywgY29uc3RhbnQoXCJcIiksIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjb21tb25UZXh0LCByZWxhdGl2ZUxvY2F0aW9uKSlcblx0XHRcdFx0XTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwYXJhbXM7XG59O1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGFkZCB0aGUgdGV4dCBhcnJhbmdlbWVudCB0byBhIHRpdGxlIGJpbmRpbmcgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBiaW5kaW5nRXhwcmVzc2lvblRvRW5oYW5jZSBUaGUgYmluZGluZyBleHByZXNzaW9uIHRvIGJlIGVuaGFuY2VkXG4gKiBAcGFyYW0gcGF0aCBUaGUgZGF0YSBmaWVsZCBkYXRhIG1vZGVsIG9iamVjdCBwYXRoXG4gKiBAcmV0dXJucyBBbiB1cGRhdGVkIGV4cHJlc3Npb24gY29udGFpbmluZyB0aGUgdGV4dCBhcnJhbmdlbWVudCBiaW5kaW5nIHBhcmFtZXRlcnNcbiAqL1xuY29uc3QgYWRkVGV4dEFycmFuZ2VtZW50VG9UaXRsZUJpbmRpbmdFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRiaW5kaW5nRXhwcmVzc2lvblRvRW5oYW5jZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdHBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdHJldHVybiB0cmFuc2Zvcm1SZWN1cnNpdmVseShiaW5kaW5nRXhwcmVzc2lvblRvRW5oYW5jZSwgXCJQYXRoSW5Nb2RlbFwiLCAoZXhwcmVzc2lvbjogUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+KSA9PiB7XG5cdFx0aWYgKGV4cHJlc3Npb24ubW9kZWxOYW1lICE9PSB1bmRlZmluZWQpIHJldHVybiBleHByZXNzaW9uO1xuXHRcdC8vIEluIGNhc2Ugb2YgZGVmYXVsdCBtb2RlbCB3ZSB0aGVuIG5lZWQgdG8gcmVzb2x2ZSB0aGUgdGV4dCBhcnJhbmdlbWVudCBwcm9wZXJ0eVxuXHRcdGNvbnN0IHByb3BlcnR5RGF0YU1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5PihwYXRoLCBleHByZXNzaW9uLnBhdGgpO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdFx0cmV0dXJuIGdldFRpdGxlQmluZGluZ1dpdGhUZXh0QXJyYW5nZW1lbnQocHJvcGVydHlEYXRhTW9kZWxQYXRoLCBleHByZXNzaW9uKSBhcyB1bmtub3duIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxhbnk+O1xuXHR9KTtcbn07XG5cbi8qKlxuICogR2V0cyBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIGNyZWF0ZSBtb2RlIHRpdGxlLlxuICogQHBhcmFtIHZpZXdEYXRhIFRoZSBhc3NvY2lhdGVkIHZpZXcgZGF0YVxuICogQHBhcmFtIFt0eXBlTmFtZV0gVGhlIHR5cGUgbmFtZSBmcm9tIHRoZSBvYmplY3QgcGFnZSBoZWFkZXIgaW5mb1xuICogQHBhcmFtIHR5cGVOYW1lLlR5cGVOYW1lXG4gKiBAcmV0dXJucyBUaGUgZXhwcmVzc2lvbi1iaW5kaW5nIHN0cmluZ1xuICovXG5jb25zdCBnZXRDcmVhdGVNb2RlVGl0bGUgPSBmdW5jdGlvbiAodmlld0RhdGE6IFZpZXdEYXRhLCB7IFR5cGVOYW1lOiB0eXBlTmFtZSB9OiBIZWFkZXJJbmZvVHlwZSk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3QgdGl0bGVOb0hlYWRlckluZm8gPSBwYXRoSW5Nb2RlbChcIlRfTkVXX09CSkVDVFwiLCBcInNhcC5mZS5pMThuXCIpO1xuXHRsZXQgY3JlYXRlTW9kZVRpdGxlOiBzdHJpbmcgfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiA9IHRpdGxlTm9IZWFkZXJJbmZvO1xuXHRpZiAoXG5cdFx0dmlld0RhdGEucmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9ORVdfT0JKRUNUXCIsIHVuZGVmaW5lZCwgdmlld0RhdGEuZW50aXR5U2V0KSA9PT1cblx0XHR2aWV3RGF0YS5yZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX05FV19PQkpFQ1RfREVGQVVMVFwiLCB1bmRlZmluZWQsIHZpZXdEYXRhLmVudGl0eVNldClcblx0KSB7XG5cdFx0Ly9UX05FV19PQkpFQ1QgaGFzIG5vdCBiZWVuIGN1c3RvbWl6ZWRcblx0XHRjb25zdCB0aXRsZVdpdGhIZWFkZXJJbmZvID0gdmlld0RhdGEucmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XCJUX0FOTk9UQVRJT05fSEVMUEVSX0RFRkFVTFRfT0JKRUNUX1BBR0VfSEVBREVSX1RJVExFXCIsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHR2aWV3RGF0YS5lbnRpdHlTZXRcblx0XHQpO1xuXHRcdGNyZWF0ZU1vZGVUaXRsZSA9ICh0eXBlTmFtZSBhcyBzdHJpbmcgfCBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxzdHJpbmc+KVxuXHRcdFx0PyBjb25jYXQodGl0bGVXaXRoSGVhZGVySW5mbywgXCI6IFwiLCByZXNvbHZlQmluZGluZ1N0cmluZyh0eXBlTmFtZS50b1N0cmluZygpKSlcblx0XHRcdDogdGl0bGVOb0hlYWRlckluZm87XG5cdH1cblx0cmV0dXJuIGZvcm1hdFJlc3VsdChbY3JlYXRlTW9kZVRpdGxlXSwgdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFRpdGxlKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4gZW1wdHkgc3RyaW5nIHNob3VsZCBiZSB1c2VkLlxuICogQHBhcmFtIHBhdGggVGhlIG1ldGEgcGF0aCBwb2ludGluZyB0byB0aGUgcHJvcGVydHkgdXNlZCBmb3IgdGhlIHRpdGxlXG4gKiBAcmV0dXJucyBUaGUgZXhwcmVzc2lvbi1iaW5kaW5nIHN0cmluZ1xuICovXG5jb25zdCBzaG91bGRGb3JjZUVtcHR5U3RyaW5nID0gKHBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHkgfCBQcm9wZXJ0eVBhdGg+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0+IHtcblx0Y29uc3QgcHJvcGVydHlEZWZpbml0aW9uID0gZ2V0UHJvcGVydHlEZWZpbml0aW9uKHBhdGgpO1xuXHRpZiAocHJvcGVydHlEZWZpbml0aW9uICYmIHByb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uQ29yZT8uQ29tcHV0ZWQpIHtcblx0XHRyZXR1cm4gVUkuSXNJbmFjdGl2ZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHR9XG59O1xuXG4vKipcbiAqIEdldHMgdGl0bGUgdmFsdWUgZXhwcmVzc2lvbiBmcm9tIG9iamVjdCBwYWdlIGhlYWRlciBpbmZvLlxuICogQHBhcmFtIGZ1bGxDb250ZXh0UGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0gaGVhZGVySW5mb1RpdGxlIFRoZSB0aXRsZSB2YWx1ZSBmcm9tIHRoZSBvYmplY3QgcGFnZSBoZWFkZXIgaW5mb1xuICogQHBhcmFtIGdldFRleHRCaW5kaW5nRXhwcmVzc2lvbiBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSB0ZXh0IGJpbmRpbmcgZXhwcmVzc2lvblxuICogQHJldHVybnMgVGhlIGV4cHJlc3Npb24tYmluZGluZyBzdHJpbmdcbiAqL1xuY29uc3QgZ2V0VGl0bGVWYWx1ZUV4cHJlc3Npb25Gcm9tSGVhZGVySW5mbyA9IGZ1bmN0aW9uIChcblx0ZnVsbENvbnRleHRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0aGVhZGVySW5mb1RpdGxlOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRnZXRUZXh0QmluZGluZ0V4cHJlc3Npb246IEZ1bmN0aW9uXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB8IHVuZGVmaW5lZCB7XG5cdGxldCB0aXRsZVZhbHVlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCB1bmRlZmluZWQ7XG5cdGlmIChoZWFkZXJJbmZvVGl0bGUuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCkge1xuXHRcdHRpdGxlVmFsdWVFeHByZXNzaW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGhlYWRlckluZm9UaXRsZS5WYWx1ZSk7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuXHRcdGlmICgoaGVhZGVySW5mb1RpdGxlIGFzIERhdGFGaWVsZFR5cGVzKS5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0Py5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkge1xuXHRcdFx0Ly8gSW4gY2FzZSBhbiBleHBsaWNpdCB0ZXh0IGFycmFuZ2VtZW50IHdhcyBzZXQgd2UgbWFrZSB1c2Ugb2YgaXQgaW4gdGhlIGRlc2NyaXB0aW9uIGFzIHdlbGxcblx0XHRcdHRpdGxlVmFsdWVFeHByZXNzaW9uID0gYWRkVGV4dEFycmFuZ2VtZW50VG9UaXRsZUJpbmRpbmdFeHByZXNzaW9uKHRpdGxlVmFsdWVFeHByZXNzaW9uLCBmdWxsQ29udGV4dFBhdGgpO1xuXHRcdH1cblx0XHR0aXRsZVZhbHVlRXhwcmVzc2lvbiA9IGZvcm1hdFZhbHVlUmVjdXJzaXZlbHkodGl0bGVWYWx1ZUV4cHJlc3Npb24sIGZ1bGxDb250ZXh0UGF0aCk7XG5cdH1cblx0aWYgKFxuXHRcdGhlYWRlckluZm9UaXRsZS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdGhlYWRlckluZm9UaXRsZS5UYXJnZXQuJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkNvbm5lY3RlZEZpZWxkc1R5cGVcblx0KSB7XG5cdFx0Y29uc3QgY29ubmVjdGVkRmllbGRzUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPENvbm5lY3RlZEZpZWxkcz4oXG5cdFx0XHRmdWxsQ29udGV4dFBhdGgsXG5cdFx0XHRcIiRUeXBlL0BVSS5IZWFkZXJJbmZvL1RpdGxlL1RhcmdldC8kQW5ub3RhdGlvblBhdGhcIlxuXHRcdCk7XG5cdFx0dGl0bGVWYWx1ZUV4cHJlc3Npb24gPSBnZXRMYWJlbEZvckNvbm5lY3RlZEZpZWxkcyhcblx0XHRcdGNvbm5lY3RlZEZpZWxkc1BhdGgsXG5cdFx0XHRnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24sXG5cdFx0XHRmYWxzZVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz47XG5cdH1cblx0cmV0dXJuIHRpdGxlVmFsdWVFeHByZXNzaW9uO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgT2JqZWN0IFBhZ2UsIFF1aWNrIFZpZXcsIGFuZCBvdGhlciB0aXRsZXMuXG4gKiBAcGFyYW0gcGF0aCBUaGUgZGF0YSBtb2RlbCBvYmplY3QgcGF0aFxuICogQHBhcmFtIGdldFRleHRCaW5kaW5nRXhwcmVzc2lvbiBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSB0ZXh0IGJpbmRpbmcgZXhwcmVzc2lvblxuICogQHBhcmFtIFtmb3JtYXRPcHRpb25zXSBUaGUgZm9ybWF0IG9wdGlvbnMgb2YgdGhlIGZpZWxkXG4gKiBAcGFyYW0gZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZVxuICogQHBhcmFtIFtoZWFkZXJJbmZvXSBUaGUgb2JqZWN0IHBhZ2UgaGVhZGVyIGluZm9cbiAqIEBwYXJhbSBbdmlld0RhdGFdIFRoZSBhc3NvY2lhdGVkIHZpZXcgZGF0YVxuICogQHBhcmFtIGN1c3RvbUZvcm1hdHRlclxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIGV4cHJlc3Npb24tYmluZGluZyBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRpdGxlQmluZGluZ0V4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdHBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRnZXRUZXh0QmluZGluZ0V4cHJlc3Npb246IEZ1bmN0aW9uLFxuXHRmb3JtYXRPcHRpb25zPzogUGFydGlhbDx7IGRpc3BsYXlNb2RlPzogRGlzcGxheU1vZGU7IHNwbGl0VGl0bGVPblR3b0xpbmVzPzogYm9vbGVhbiB9Pixcblx0aGVhZGVySW5mbz86IEhlYWRlckluZm9UeXBlLFxuXHR2aWV3RGF0YT86IFZpZXdEYXRhLFxuXHRjdXN0b21Gb3JtYXR0ZXI/OiBzdHJpbmdcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGZvcm1hdHRlciA9IGN1c3RvbUZvcm1hdHRlciB8fCB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0VGl0bGU7XG5cdGxldCBjcmVhdGVNb2RlVGl0bGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgc3RyaW5nID0gcGF0aEluTW9kZWwoXCJUX05FV19PQkpFQ1RcIiwgXCJzYXAuZmUuaTE4blwiKTtcblx0bGV0IHRpdGxlVmFsdWVFeHByZXNzaW9uO1xuXHRsZXQgaXNIZWFkZXJJbmZvVGl0bGVFbXB0eSA9IGZhbHNlO1xuXG5cdC8vSWYgdGhlIHRpdGxlIGNvbnRhaW5zIGEgZ3VpZCB3aXRoIGFuIGV4dGVybmFsIElEIHdlIHdhbnQgdG8gYmVoYXZlIGFzIGlmIHRoZSB0aXRsZSBhbm5vdGF0aW9uIHdvdWxkIHBvaW50IHRvIHRoZSB0YXJnZXRcblx0Ly9vZiB0aGUgZXh0ZXJuYWxJRCBhbm5vdGF0aW9uXG5cdGxldCBleHRJZEhlYWRlckluZm9UaXRsZTtcblx0aWYgKGlzRGF0YUZpZWxkKGhlYWRlckluZm8/LlRpdGxlKSAmJiBoZWFkZXJJbmZvPy5UaXRsZS5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRXh0ZXJuYWxJRCkge1xuXHRcdGV4dElkSGVhZGVySW5mb1RpdGxlID0ge1xuXHRcdFx0Li4uaGVhZGVySW5mby5UaXRsZSxcblx0XHRcdFZhbHVlOiB7IC4uLmhlYWRlckluZm8uVGl0bGUuVmFsdWUsICR0YXJnZXQ6IHsgLi4uaGVhZGVySW5mby5UaXRsZS5WYWx1ZS4kdGFyZ2V0IH0gfVxuXHRcdH07XG5cdFx0ZXh0SWRIZWFkZXJJbmZvVGl0bGUuVmFsdWUucGF0aCA9IGhlYWRlckluZm8uVGl0bGUuVmFsdWUuJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRXh0ZXJuYWxJRC5wYXRoO1xuXHRcdGV4dElkSGVhZGVySW5mb1RpdGxlLlZhbHVlLiR0YXJnZXQgPSBoZWFkZXJJbmZvLlRpdGxlLlZhbHVlLiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkV4dGVybmFsSUQuJHRhcmdldDtcblx0fVxuXG5cdC8vIElmIHdlIGhhdmUgYSBoZWFkZXJJbmZvIGJ1dCBubyB0aXRsZSwgb3IgZW1wdHkgdGl0bGUgd2UgbmVlZCB0byBkaXNwbGF5IGFuIGVtcHR5IHN0cmluZyB3aGVuIHdlIGFyZSBvbiBhbiBhY3RpdmUgb2JqZWN0XG5cdC8vIHJlY2VpdmVkIGhlYWRlciBpbmZvIGZvciBvYmplY3QgcGFnZVxuXHRpZiAoaGVhZGVySW5mbz8uVGl0bGU/LiRUeXBlICYmIHZpZXdEYXRhKSB7XG5cdFx0aWYgKGV4dElkSGVhZGVySW5mb1RpdGxlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRpdGxlVmFsdWVFeHByZXNzaW9uID0gZ2V0VGl0bGVWYWx1ZUV4cHJlc3Npb25Gcm9tSGVhZGVySW5mbyhwYXRoLCBoZWFkZXJJbmZvLlRpdGxlLCBnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aXRsZVZhbHVlRXhwcmVzc2lvbiA9IGdldFRpdGxlVmFsdWVFeHByZXNzaW9uRnJvbUhlYWRlckluZm8ocGF0aCwgZXh0SWRIZWFkZXJJbmZvVGl0bGUsIGdldFRleHRCaW5kaW5nRXhwcmVzc2lvbik7XG5cdFx0fVxuXHRcdGNyZWF0ZU1vZGVUaXRsZSA9IGdldENyZWF0ZU1vZGVUaXRsZSh2aWV3RGF0YSwgaGVhZGVySW5mbyk7XG5cdFx0aWYgKGlzQ29uc3RhbnQodGl0bGVWYWx1ZUV4cHJlc3Npb24pICYmIHRpdGxlVmFsdWVFeHByZXNzaW9uLnZhbHVlID09PSBcIlwiKSB7XG5cdFx0XHRpc0hlYWRlckluZm9UaXRsZUVtcHR5ID0gdHJ1ZTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoaGVhZGVySW5mbyAmJiAoaGVhZGVySW5mby5UaXRsZSA9PT0gdW5kZWZpbmVkIHx8IGhlYWRlckluZm8uVGl0bGUudG9TdHJpbmcoKSA9PT0gXCJcIikpIHtcblx0XHRpc0hlYWRlckluZm9UaXRsZUVtcHR5ID0gdHJ1ZTtcblx0XHQvLyByZWNlaXZlZCBoZWFkZXIgaW5mbyBmb3Igb2JqZWN0UGFnZVxuXHRcdGlmICghdmlld0RhdGEpIHtcblx0XHRcdHRpdGxlVmFsdWVFeHByZXNzaW9uID0gY29uc3RhbnQoXCJcIik7XG5cdFx0fVxuXHR9XG5cdGlmICh0aXRsZVZhbHVlRXhwcmVzc2lvbiAmJiBpc0NvbnN0YW50KHRpdGxlVmFsdWVFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbih0aXRsZVZhbHVlRXhwcmVzc2lvbik7XG5cdH1cblxuXHQvLyBuZWVkZWQgZm9yIHF1aWNrdmlld1xuXHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ocGF0aC50YXJnZXRPYmplY3QpKSB7XG5cdFx0cGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKHBhdGgsIHBhdGgudGFyZ2V0T2JqZWN0LnBhdGgpO1xuXHR9XG5cblx0Y29uc3QgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+ID0gcGF0aEluTW9kZWwoZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChwYXRoKSk7XG5cdGxldCBwYXJhbXM6IEJpbmRpbmdFeHByZXNzaW9uVHVwbGU7XG5cdGlmICh0aXRsZVZhbHVlRXhwcmVzc2lvbikge1xuXHRcdHBhcmFtcyA9IEFycmF5LmlzQXJyYXkodGl0bGVWYWx1ZUV4cHJlc3Npb24pID8gKHRpdGxlVmFsdWVFeHByZXNzaW9uIGFzIHVua25vd24gYXMgQmluZGluZ0V4cHJlc3Npb25UdXBsZSkgOiBbdGl0bGVWYWx1ZUV4cHJlc3Npb25dO1xuXHR9IGVsc2Uge1xuXHRcdHBhcmFtcyA9IGdldFRpdGxlQmluZGluZ1dpdGhUZXh0QXJyYW5nZW1lbnQocGF0aCwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgZm9ybWF0T3B0aW9ucyk7XG5cdH1cblx0Y29uc3QgaXNUaXRsZUVtcHR5ID0gaXNUaXRsZUVtcHR5Qm9vbGVhbkV4cHJlc3Npb24ocGFyYW1zWzBdKTtcblx0Y29uc3QgZm9yY2VFbXB0eVN0cmluZyA9IHNob3VsZEZvcmNlRW1wdHlTdHJpbmcocGF0aCk7XG5cdGNvbnN0IGZvcm1hdHRlZEV4cHJlc3Npb24gPSBmb3JtYXRSZXN1bHQocGFyYW1zLCBmb3JtYXR0ZXIpO1xuXHR0aXRsZVZhbHVlRXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRpc1RpdGxlRW1wdHksXG5cdFx0aWZFbHNlKFxuXHRcdFx0b3IoaXNIZWFkZXJJbmZvVGl0bGVFbXB0eSAmJiBpc09ySGFzQWN0aXZlRW50aXR5KHBhdGgpLCBmb3JjZUVtcHR5U3RyaW5nKSxcblx0XHRcdFwiXCIsXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGlzVW5kZWZpbmVkRXhwcmVzc2lvbihjb25zdGFudChjdXN0b21Gb3JtYXR0ZXIpKSxcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdG9yKFVJLklzQ3JlYXRlTW9kZSwgbm90KGlzT3JIYXNBY3RpdmVFbnRpdHkocGF0aCkpKSxcblx0XHRcdFx0XHRjcmVhdGVNb2RlVGl0bGUsXG5cdFx0XHRcdFx0cGF0aEluTW9kZWwoXCJUX0FOTk9UQVRJT05fSEVMUEVSX0RFRkFVTFRfSEVBREVSX1RJVExFX05PX0hFQURFUl9JTkZPXCIsIFwic2FwLmZlLmkxOG5cIilcblx0XHRcdFx0KSxcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdG5vdChpc09ySGFzQWN0aXZlRW50aXR5KHBhdGgpKSxcblx0XHRcdFx0XHR2aWV3RGF0YT8ucmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9ORVdfT0JKRUNUXCIpLFxuXHRcdFx0XHRcdHZpZXdEYXRhPy5yZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0FOTk9UQVRJT05fSEVMUEVSX0RFRkFVTFRfSEVBREVSX1RJVExFX05PX0hFQURFUl9JTkZPXCIpXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHQpLFxuXHRcdGZvcm1hdHRlZEV4cHJlc3Npb25cblx0KTtcblxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24odGl0bGVWYWx1ZUV4cHJlc3Npb24pO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFrQ08sTUFBTUEsc0JBQXNCLEdBQUcsU0FBQUEsQ0FDckNDLDBCQUE0RCxFQUM1REMsZUFBNkQsRUFDMUI7SUFDbkMsT0FBT0Msb0JBQW9CLENBQUNGLDBCQUEwQixFQUFFLGFBQWEsRUFBR0csVUFBVSxJQUFLO01BQ3RGLElBQUlDLGFBQWEsR0FBR0QsVUFBVTtNQUM5QixJQUFJQSxVQUFVLENBQUNFLFNBQVMsS0FBS0MsU0FBUyxFQUFFO1FBQ3ZDO1FBQ0EsTUFBTUMsc0JBQXNCLEdBQUdDLG9CQUFvQixDQUFXUCxlQUFlLEVBQUVFLFVBQVUsQ0FBQ00sSUFBSSxDQUFDO1FBQy9GTCxhQUFhLEdBQUdNLHlCQUF5QixDQUFDSCxzQkFBc0IsQ0FBQ0ksWUFBWSxFQUFHUixVQUFVLENBQUM7TUFDNUY7TUFDQSxPQUFPQyxhQUFhO0lBQ3JCLENBQUMsQ0FBQztFQUNILENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUpBUSxRQUFBLENBQUFiLHNCQUFBLEdBQUFBLHNCQUFBO0VBS0EsTUFBTWMscUJBQXFCLEdBQUlDLHVCQUFxRSxJQUEyQjtJQUM5SCxNQUFNQyxzQkFBc0IsR0FBR0QsdUJBQXVCLENBQUNILFlBQVk7SUFDbkUsT0FBT0ssd0JBQXdCLENBQUNELHNCQUFzQixDQUFDLEdBQUdBLHNCQUFzQixDQUFDRSxPQUFPLEdBQUdGLHNCQUFzQjtFQUNsSCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNRyxtQkFBbUIsR0FBSWpCLGVBQTZDLElBQWtEO0lBQUEsSUFBQWtCLHFCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBO0lBQzNILE1B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
|
|
273
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5IiwiYmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2UiLCJmdWxsQ29udGV4dFBhdGgiLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsImV4cHJlc3Npb24iLCJvdXRFeHByZXNzaW9uIiwibW9kZWxOYW1lIiwidW5kZWZpbmVkIiwib1Byb3BlcnR5RGF0YU1vZGVsUGF0aCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwicGF0aCIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJ0YXJnZXRPYmplY3QiLCJfZXhwb3J0cyIsImdldFByb3BlcnR5RGVmaW5pdGlvbiIsInByb3BlcnR5RGF0YU1vZGVsT2JqZWN0IiwicHJvcGVydHlQYXRoT3JQcm9wZXJ0eSIsImlzUHJvcGVydHlQYXRoRXhwcmVzc2lvbiIsIiR0YXJnZXQiLCJpc09ySGFzQWN0aXZlRW50aXR5IiwiX2Z1bGxDb250ZXh0UGF0aCR0YXJnIiwiX2Z1bGxDb250ZXh0UGF0aCR0YXJnMiIsIl9mdWxsQ29udGV4dFBhdGgkdGFyZzMiLCJfZnVsbENvbnRleHRQYXRoJHRhcmc0IiwiX2Z1bGxDb250ZXh0UGF0aCR0YXJnNSIsIl9mdWxsQ29udGV4dFBhdGgkdGFyZzYiLCJkcmFmdFJvb3QiLCJ0YXJnZXRFbnRpdHlTZXQiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIkRyYWZ0Um9vdCIsImRyYWZ0Tm9kZSIsIkRyYWZ0Tm9kZSIsIm5vdCIsIkRyYWZ0IiwiSXNOZXdPYmplY3QiLCJpc1RpdGxlRW1wdHlCb29sZWFuRXhwcmVzc2lvbiIsInRpdGxlVmFsdWVFeHByZXNzaW9uIiwiX3R5cGUiLCJjb25zdGFudCIsInZhbHVlIiwiaXNFbXB0eSIsImdldFRpdGxlQmluZGluZ1dpdGhUZXh0QXJyYW5nZW1lbnQiLCJwcm9wZXJ0eURhdGFNb2RlbFBhdGgiLCJwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIiwiZm9ybWF0T3B0aW9ucyIsIl9wcm9wZXJ0eURlZmluaXRpb24kYSIsIl9wcm9wZXJ0eURlZmluaXRpb24kYTIiLCJfY29tbW9uVGV4dCRhbm5vdGF0aW8iLCJfY29tbW9uVGV4dCRhbm5vdGF0aW8yIiwidGFyZ2V0RGlzcGxheU1vZGVPdmVycmlkZSIsImRpc3BsYXlNb2RlIiwicHJvcGVydHlEZWZpbml0aW9uIiwidGFyZ2V0RGlzcGxheU1vZGUiLCJVSUZvcm1hdHRlcnMiLCJnZXREaXNwbGF5TW9kZSIsImNvbW1vblRleHQiLCJUZXh0IiwicmVsYXRpdmVMb2NhdGlvbiIsImdldFJlbGF0aXZlUGF0aHMiLCJwYXJhbXMiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJ0YXJnZXRFeHByZXNzaW9uIiwic3BsaXRUaXRsZU9uVHdvTGluZXMiLCJpZkVsc2UiLCJVSSIsIlRleHRBcnJhbmdlbWVudCIsImFkZFRleHRBcnJhbmdlbWVudFRvVGl0bGVCaW5kaW5nRXhwcmVzc2lvbiIsImdldENyZWF0ZU1vZGVUaXRsZSIsInZpZXdEYXRhIiwiX3JlZiIsIlR5cGVOYW1lIiwidHlwZU5hbWUiLCJ0aXRsZU5vSGVhZGVySW5mbyIsInBhdGhJbk1vZGVsIiwiY3JlYXRlTW9kZVRpdGxlIiwicmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJlbnRpdHlTZXQiLCJ0aXRsZVdpdGhIZWFkZXJJbmZvIiwiY29uY2F0IiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJ0b1N0cmluZyIsImZvcm1hdFJlc3VsdCIsInZhbHVlRm9ybWF0dGVycyIsImZvcm1hdFRpdGxlIiwic2hvdWxkRm9yY2VFbXB0eVN0cmluZyIsIl9wcm9wZXJ0eURlZmluaXRpb24kYTMiLCJfcHJvcGVydHlEZWZpbml0aW9uJGE0IiwiQ29yZSIsIkNvbXB1dGVkIiwiSXNJbmFjdGl2ZSIsImdldFRpdGxlVmFsdWVFeHByZXNzaW9uRnJvbUhlYWRlckluZm8iLCJoZWFkZXJJbmZvVGl0bGUiLCJnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24iLCJfaGVhZGVySW5mb1RpdGxlJFRhcmciLCIkVHlwZSIsIl9WYWx1ZSIsIl9WYWx1ZSQkdGFyZ2V0IiwiX1ZhbHVlJCR0YXJnZXQkYW5ub3RhIiwiX1ZhbHVlJCR0YXJnZXQkYW5ub3RhMiIsIl9WYWx1ZSQkdGFyZ2V0JGFubm90YTMiLCJfVmFsdWUkJHRhcmdldCRhbm5vdGE0IiwiVmFsdWUiLCJUYXJnZXQiLCJjb25uZWN0ZWRGaWVsZHNQYXRoIiwiZ2V0TGFiZWxGb3JDb25uZWN0ZWRGaWVsZHMiLCJnZXRUaXRsZUJpbmRpbmdFeHByZXNzaW9uIiwiaGVhZGVySW5mbyIsImN1c3RvbUZvcm1hdHRlciIsIl9oZWFkZXJJbmZvJFRpdGxlJFZhbCIsIl9oZWFkZXJJbmZvJFRpdGxlJFZhbDIiLCJfaGVhZGVySW5mbyRUaXRsZSRWYWwzIiwiX2hlYWRlckluZm8kVGl0bGUkVmFsNCIsIl9oZWFkZXJJbmZvJFRpdGxlIiwiZm9ybWF0dGVyIiwiaXNIZWFkZXJJbmZvVGl0bGVFbXB0eSIsImV4dElkSGVhZGVySW5mb1RpdGxlIiwiaXNEYXRhRmllbGQiLCJUaXRsZSIsIkV4dGVybmFsSUQiLCJfaGVhZGVySW5mbyRUaXRsZSRWYWw1IiwiX2hlYWRlckluZm8kVGl0bGUkVmFsNiIsIl9oZWFkZXJJbmZvJFRpdGxlJFZhbDciLCJfaGVhZGVySW5mbyRUaXRsZSRWYWw4IiwiX2hlYWRlckluZm8kVGl0bGUkVmFsOSIsIl9oZWFkZXJJbmZvJFRpdGxlJFZhbDEwIiwiaXNDb25zdGFudCIsImNvbXBpbGVFeHByZXNzaW9uIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiQXJyYXkiLCJpc0FycmF5IiwiaXNQcm9wZXJ0eSIsImlzVGl0bGVFbXB0eSIsImZvcmNlRW1wdHlTdHJpbmciLCJmb3JtYXR0ZWRFeHByZXNzaW9uIiwib3IiLCJpc1VuZGVmaW5lZEV4cHJlc3Npb24iLCJJc0NyZWF0ZU1vZGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRpdGxlSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBQcm9wZXJ0eSwgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWUsIFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBDb25uZWN0ZWRGaWVsZHMsIERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIERhdGFGaWVsZFR5cGVzLCBIZWFkZXJJbmZvVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIFBhdGhJbk1vZGVsRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbmNhdCxcblx0Y29uc3RhbnQsXG5cdGZvcm1hdFJlc3VsdCxcblx0Zm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbixcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpZkVsc2UsXG5cdGlzQ29uc3RhbnQsXG5cdGlzRW1wdHksXG5cdGlzVW5kZWZpbmVkRXhwcmVzc2lvbixcblx0bm90LFxuXHRvcixcblx0cGF0aEluTW9kZWwsXG5cdHJlc29sdmVCaW5kaW5nU3RyaW5nLFxuXHR0cmFuc2Zvcm1SZWN1cnNpdmVseVxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB2YWx1ZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7IERyYWZ0LCBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBpc1Byb3BlcnR5LCBpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IFZpZXdEYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1RlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHsgZ2V0TGFiZWxGb3JDb25uZWN0ZWRGaWVsZHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhRmllbGRGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCwgZ2V0UmVsYXRpdmVQYXRocyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGlzcGxheU1vZGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCAqIGFzIFVJRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7IGlzRGF0YUZpZWxkIH0gZnJvbSBcIi4uL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5cbnR5cGUgQmluZGluZ0V4cHJlc3Npb25UdXBsZSA9IFtCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5dIHwgW0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdFZhbHVlUmVjdXJzaXZlbHkgPSBmdW5jdGlvbiAoXG5cdGJpbmRpbmdFeHByZXNzaW9uVG9FbmhhbmNlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0ZnVsbENvbnRleHRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5IHwgUHJvcGVydHlQYXRoPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRyZXR1cm4gdHJhbnNmb3JtUmVjdXJzaXZlbHkoYmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2UsIFwiUGF0aEluTW9kZWxcIiwgKGV4cHJlc3Npb24pID0+IHtcblx0XHRsZXQgb3V0RXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG5cdFx0aWYgKGV4cHJlc3Npb24ubW9kZWxOYW1lID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIEluIGNhc2Ugb2YgZGVmYXVsdCBtb2RlbCB3ZSB0aGVuIG5lZWQgdG8gcmVzb2x2ZSB0aGUgdGV4dCBhcnJhbmdlbWVudCBwcm9wZXJ0eVxuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5RGF0YU1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5PihmdWxsQ29udGV4dFBhdGgsIGV4cHJlc3Npb24ucGF0aCk7XG5cdFx0XHRvdXRFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCEsIGV4cHJlc3Npb24pO1xuXHRcdH1cblx0XHRyZXR1cm4gb3V0RXhwcmVzc2lvbjtcblx0fSk7XG59O1xuXG4vKipcbiAqIEdldCBwcm9wZXJ0eSBkZWZpbml0aW9uIGZyb20gZGF0YSBtb2RlbCBvYmplY3QgcGF0aC5cbiAqIEBwYXJhbSBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdCBUaGUgcHJvcGVydHkgZGF0YSBtb2RlbCBvYmplY3RcbiAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eVxuICovXG5jb25zdCBnZXRQcm9wZXJ0eURlZmluaXRpb24gPSAocHJvcGVydHlEYXRhTW9kZWxPYmplY3Q6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHkgfCBQcm9wZXJ0eVBhdGg+KTogUHJvcGVydHkgfCB1bmRlZmluZWQgPT4ge1xuXHRjb25zdCBwcm9wZXJ0eVBhdGhPclByb3BlcnR5ID0gcHJvcGVydHlEYXRhTW9kZWxPYmplY3QudGFyZ2V0T2JqZWN0O1xuXHRyZXR1cm4gaXNQcm9wZXJ0eVBhdGhFeHByZXNzaW9uKHByb3BlcnR5UGF0aE9yUHJvcGVydHkpID8gcHJvcGVydHlQYXRoT3JQcm9wZXJ0eS4kdGFyZ2V0IDogcHJvcGVydHlQYXRoT3JQcm9wZXJ0eTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4gYXNzb2NpYXRlZCBhY3RpdmUgZW50aXR5IGV4aXN0cy5cbiAqIEBwYXJhbSBmdWxsQ29udGV4dFBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgY29udGV4dFxuICogQHJldHVybnMgVGhlIGV4cHJlc3Npb24tYmluZGluZyBzdHJpbmdcbiAqL1xuY29uc3QgaXNPckhhc0FjdGl2ZUVudGl0eSA9IChmdWxsQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4pOiBib29sZWFuIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0+IHtcblx0Y29uc3QgZHJhZnRSb290ID0gKGZ1bGxDb250ZXh0UGF0aC50YXJnZXRFbnRpdHlTZXQgYXMgRW50aXR5U2V0IHwgdW5kZWZpbmVkKT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnRSb290O1xuXHRjb25zdCBkcmFmdE5vZGUgPSAoZnVsbENvbnRleHRQYXRoLnRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXQgfCB1bmRlZmluZWQpPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdE5vZGU7XG5cdGlmICghIWRyYWZ0Um9vdCB8fCAhIWRyYWZ0Tm9kZSkge1xuXHRcdHJldHVybiBub3QoRHJhZnQuSXNOZXdPYmplY3QpO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRpdGxlIHZhbHVlIGV4cHJlc3Npb24gaXMgZW1wdHkuXG4gKiBAcGFyYW0gdGl0bGVWYWx1ZUV4cHJlc3Npb24gVGhlIHRpdGxlIHZhbHVlIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIFRoZSBleHByZXNzaW9uLWJpbmRpbmcgc3RyaW5nXG4gKi9cbmNvbnN0IGlzVGl0bGVFbXB0eUJvb2xlYW5FeHByZXNzaW9uID0gKHRpdGxlVmFsdWVFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9PlxuXHR0aXRsZVZhbHVlRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJDb25zdGFudFwiID8gY29uc3RhbnQoIXRpdGxlVmFsdWVFeHByZXNzaW9uLnZhbHVlKSA6IGlzRW1wdHkodGl0bGVWYWx1ZUV4cHJlc3Npb24pO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgdGl0bGUgZXhwcmVzc2lvbiBiaW5kaW5nLlxuICogQHBhcmFtIHByb3BlcnR5RGF0YU1vZGVsUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBjb250ZXh0XG4gKiBAcGFyYW0gcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiBUaGUgYmluZGluZyBleHByZXNzaW9uIG9mIHRoZSBwcm9wZXJ0eSBhYm92ZVxuICogQHBhcmFtIFtmb3JtYXRPcHRpb25zXSBUaGUgZm9ybWF0IG9wdGlvbnMgb2YgdGhlIGZpZWxkXG4gKiBAcGFyYW0gZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZVxuICogQHJldHVybnMgVGhlIGV4cHJlc3Npb24tYmluZGluZyBwYXJhbWV0ZXJzXG4gKi9cbmNvbnN0IGdldFRpdGxlQmluZGluZ1dpdGhUZXh0QXJyYW5nZW1lbnQgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRmb3JtYXRPcHRpb25zPzogUGFydGlhbDx7IGRpc3BsYXlNb2RlPzogRGlzcGxheU1vZGU7IHNwbGl0VGl0bGVPblR3b0xpbmVzPzogYm9vbGVhbiB9PlxuKTogQmluZGluZ0V4cHJlc3Npb25UdXBsZSB7XG5cdGNvbnN0IHRhcmdldERpc3BsYXlNb2RlT3ZlcnJpZGUgPSBmb3JtYXRPcHRpb25zPy5kaXNwbGF5TW9kZTtcblx0Y29uc3QgcHJvcGVydHlEZWZpbml0aW9uID0gZ2V0UHJvcGVydHlEZWZpbml0aW9uKHByb3BlcnR5RGF0YU1vZGVsUGF0aCk7XG5cdGNvbnN0IHRhcmdldERpc3BsYXlNb2RlID0gdGFyZ2V0RGlzcGxheU1vZGVPdmVycmlkZSB8fCBVSUZvcm1hdHRlcnMuZ2V0RGlzcGxheU1vZGUocHJvcGVydHlEYXRhTW9kZWxQYXRoKTtcblx0Y29uc3QgY29tbW9uVGV4dCA9IHByb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dDtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMocHJvcGVydHlEYXRhTW9kZWxQYXRoKTtcblxuXHRpZiAocHJvcGVydHlEZWZpbml0aW9uKSB7XG5cdFx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ocHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblx0fVxuXG5cdGxldCBwYXJhbXM6IEJpbmRpbmdFeHByZXNzaW9uVHVwbGUgPSBbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbl07XG5cdGlmICh0YXJnZXREaXNwbGF5TW9kZSAhPT0gXCJWYWx1ZVwiICYmIGNvbW1vblRleHQpIHtcblx0XHRzd2l0Y2ggKHRhcmdldERpc3BsYXlNb2RlKSB7XG5cdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0cGFyYW1zID0gW2dldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjb21tb25UZXh0LCByZWxhdGl2ZUxvY2F0aW9uKV07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdFx0Y29uc3QgdGFyZ2V0RXhwcmVzc2lvbiA9XG5cdFx0XHRcdFx0Zm9ybWF0T3B0aW9ucz8uc3BsaXRUaXRsZU9uVHdvTGluZXMgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHRcdFx0PyBpZkVsc2UoISFjb21tb25UZXh0LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50LCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCBjb25zdGFudChcIlwiKSlcblx0XHRcdFx0XHRcdDogaWZFbHNlKCEhZm9ybWF0T3B0aW9ucz8uc3BsaXRUaXRsZU9uVHdvTGluZXMsIGNvbnN0YW50KFwiXCIpLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblx0XHRcdFx0cGFyYW1zID0gW2dldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjb21tb25UZXh0LCByZWxhdGl2ZUxvY2F0aW9uKSwgdGFyZ2V0RXhwcmVzc2lvbl07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0cGFyYW1zID0gW1xuXHRcdFx0XHRcdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sXG5cdFx0XHRcdFx0aWZFbHNlKCEhZm9ybWF0T3B0aW9ucz8uc3BsaXRUaXRsZU9uVHdvTGluZXMsIGNvbnN0YW50KFwiXCIpLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oY29tbW9uVGV4dCwgcmVsYXRpdmVMb2NhdGlvbikpXG5cdFx0XHRcdF07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcGFyYW1zO1xufTtcblxuLyoqXG4gKiBSZWN1cnNpdmVseSBhZGQgdGhlIHRleHQgYXJyYW5nZW1lbnQgdG8gYSB0aXRsZSBiaW5kaW5nIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gYmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2UgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBiZSBlbmhhbmNlZFxuICogQHBhcmFtIHBhdGggVGhlIGRhdGEgZmllbGQgZGF0YSBtb2RlbCBvYmplY3QgcGF0aFxuICogQHJldHVybnMgQW4gdXBkYXRlZCBleHByZXNzaW9uIGNvbnRhaW5pbmcgdGhlIHRleHQgYXJyYW5nZW1lbnQgYmluZGluZyBwYXJhbWV0ZXJzXG4gKi9cbmNvbnN0IGFkZFRleHRBcnJhbmdlbWVudFRvVGl0bGVCaW5kaW5nRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0YmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2U6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRwYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRyZXR1cm4gdHJhbnNmb3JtUmVjdXJzaXZlbHkoYmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2UsIFwiUGF0aEluTW9kZWxcIiwgKGV4cHJlc3Npb246IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjx1bmtub3duPikgPT4ge1xuXHRcdGlmIChleHByZXNzaW9uLm1vZGVsTmFtZSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gZXhwcmVzc2lvbjtcblx0XHQvLyBJbiBjYXNlIG9mIGRlZmF1bHQgbW9kZWwgd2UgdGhlbiBuZWVkIHRvIHJlc29sdmUgdGhlIHRleHQgYXJyYW5nZW1lbnQgcHJvcGVydHlcblx0XHRjb25zdCBwcm9wZXJ0eURhdGFNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4ocGF0aCwgZXhwcmVzc2lvbi5wYXRoKTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRcdHJldHVybiBnZXRUaXRsZUJpbmRpbmdXaXRoVGV4dEFycmFuZ2VtZW50KHByb3BlcnR5RGF0YU1vZGVsUGF0aCwgZXhwcmVzc2lvbikgYXMgdW5rbm93biBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248YW55Pjtcblx0fSk7XG59O1xuXG4vKipcbiAqIEdldHMgYmluZGluZyBleHByZXNzaW9uIGZvciBjcmVhdGUgbW9kZSB0aXRsZS5cbiAqIEBwYXJhbSB2aWV3RGF0YSBUaGUgYXNzb2NpYXRlZCB2aWV3IGRhdGFcbiAqIEBwYXJhbSBbdHlwZU5hbWVdIFRoZSB0eXBlIG5hbWUgZnJvbSB0aGUgb2JqZWN0IHBhZ2UgaGVhZGVyIGluZm9cbiAqIEBwYXJhbSB0eXBlTmFtZS5UeXBlTmFtZVxuICogQHJldHVybnMgVGhlIGV4cHJlc3Npb24tYmluZGluZyBzdHJpbmdcbiAqL1xuY29uc3QgZ2V0Q3JlYXRlTW9kZVRpdGxlID0gZnVuY3Rpb24gKHZpZXdEYXRhOiBWaWV3RGF0YSwgeyBUeXBlTmFtZTogdHlwZU5hbWUgfTogSGVhZGVySW5mb1R5cGUpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IHRpdGxlTm9IZWFkZXJJbmZvID0gcGF0aEluTW9kZWwoXCJUX05FV19PQkpFQ1RcIiwgXCJzYXAuZmUuaTE4blwiKTtcblx0bGV0IGNyZWF0ZU1vZGVUaXRsZTogc3RyaW5nIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gPSB0aXRsZU5vSGVhZGVySW5mbztcblx0aWYgKFxuXHRcdHZpZXdEYXRhLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTkVXX09CSkVDVFwiLCB1bmRlZmluZWQsIHZpZXdEYXRhLmVudGl0eVNldCkgPT09XG5cdFx0dmlld0RhdGEucmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9ORVdfT0JKRUNUX0RFRkFVTFRcIiwgdW5kZWZpbmVkLCB2aWV3RGF0YS5lbnRpdHlTZXQpXG5cdCkge1xuXHRcdC8vVF9ORVdfT0JKRUNUIGhhcyBub3QgYmVlbiBjdXN0b21pemVkXG5cdFx0Y29uc3QgdGl0bGVXaXRoSGVhZGVySW5mbyA9IHZpZXdEYXRhLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFwiVF9BTk5PVEFUSU9OX0hFTFBFUl9ERUZBVUxUX09CSkVDVF9QQUdFX0hFQURFUl9USVRMRVwiLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0dmlld0RhdGEuZW50aXR5U2V0XG5cdFx0KTtcblx0XHRjcmVhdGVNb2RlVGl0bGUgPSAodHlwZU5hbWUgYXMgc3RyaW5nIHwgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8c3RyaW5nPilcblx0XHRcdD8gY29uY2F0KHRpdGxlV2l0aEhlYWRlckluZm8sIFwiOiBcIiwgcmVzb2x2ZUJpbmRpbmdTdHJpbmcodHlwZU5hbWUudG9TdHJpbmcoKSkpXG5cdFx0XHQ6IHRpdGxlTm9IZWFkZXJJbmZvO1xuXHR9XG5cdHJldHVybiBmb3JtYXRSZXN1bHQoW2NyZWF0ZU1vZGVUaXRsZV0sIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRUaXRsZSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGFuIGVtcHR5IHN0cmluZyBzaG91bGQgYmUgdXNlZC5cbiAqIEBwYXJhbSBwYXRoIFRoZSBtZXRhIHBhdGggcG9pbnRpbmcgdG8gdGhlIHByb3BlcnR5IHVzZWQgZm9yIHRoZSB0aXRsZVxuICogQHJldHVybnMgVGhlIGV4cHJlc3Npb24tYmluZGluZyBzdHJpbmdcbiAqL1xuY29uc3Qgc2hvdWxkRm9yY2VFbXB0eVN0cmluZyA9IChwYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5IHwgUHJvcGVydHlQYXRoPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9PiB7XG5cdGNvbnN0IHByb3BlcnR5RGVmaW5pdGlvbiA9IGdldFByb3BlcnR5RGVmaW5pdGlvbihwYXRoKTtcblx0aWYgKHByb3BlcnR5RGVmaW5pdGlvbiAmJiBwcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/LkNvcmU/LkNvbXB1dGVkKSB7XG5cdFx0cmV0dXJuIFVJLklzSW5hY3RpdmU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0fVxufTtcblxuLyoqXG4gKiBHZXRzIHRpdGxlIHZhbHVlIGV4cHJlc3Npb24gZnJvbSBvYmplY3QgcGFnZSBoZWFkZXIgaW5mby5cbiAqIEBwYXJhbSBmdWxsQ29udGV4dFBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgY29udGV4dFxuICogQHBhcmFtIGhlYWRlckluZm9UaXRsZSBUaGUgdGl0bGUgdmFsdWUgZnJvbSB0aGUgb2JqZWN0IHBhZ2UgaGVhZGVyIGluZm9cbiAqIEBwYXJhbSBnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24gVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgdGV4dCBiaW5kaW5nIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIFRoZSBleHByZXNzaW9uLWJpbmRpbmcgc3RyaW5nXG4gKi9cbmNvbnN0IGdldFRpdGxlVmFsdWVFeHByZXNzaW9uRnJvbUhlYWRlckluZm8gPSBmdW5jdGlvbiAoXG5cdGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdGhlYWRlckluZm9UaXRsZTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Z2V0VGV4dEJpbmRpbmdFeHByZXNzaW9uOiBGdW5jdGlvblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCB1bmRlZmluZWQge1xuXHRsZXQgdGl0bGVWYWx1ZUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgdW5kZWZpbmVkO1xuXHRpZiAoaGVhZGVySW5mb1RpdGxlLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQpIHtcblx0XHR0aXRsZVZhbHVlRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihoZWFkZXJJbmZvVGl0bGUuVmFsdWUpO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3Ncblx0XHRpZiAoKGhlYWRlckluZm9UaXRsZSBhcyBEYXRhRmllbGRUeXBlcykuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zLkNvbW1vbj8uVGV4dD8uYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpIHtcblx0XHRcdC8vIEluIGNhc2UgYW4gZXhwbGljaXQgdGV4dCBhcnJhbmdlbWVudCB3YXMgc2V0IHdlIG1ha2UgdXNlIG9mIGl0IGluIHRoZSBkZXNjcmlwdGlvbiBhcyB3ZWxsXG5cdFx0XHR0aXRsZVZhbHVlRXhwcmVzc2lvbiA9IGFkZFRleHRBcnJhbmdlbWVudFRvVGl0bGVCaW5kaW5nRXhwcmVzc2lvbih0aXRsZVZhbHVlRXhwcmVzc2lvbiwgZnVsbENvbnRleHRQYXRoKTtcblx0XHR9XG5cdFx0dGl0bGVWYWx1ZUV4cHJlc3Npb24gPSBmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5KHRpdGxlVmFsdWVFeHByZXNzaW9uLCBmdWxsQ29udGV4dFBhdGgpO1xuXHR9XG5cdGlmIChcblx0XHRoZWFkZXJJbmZvVGl0bGUuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRoZWFkZXJJbmZvVGl0bGUuVGFyZ2V0LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db25uZWN0ZWRGaWVsZHNUeXBlXG5cdCkge1xuXHRcdGNvbnN0IGNvbm5lY3RlZEZpZWxkc1BhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxDb25uZWN0ZWRGaWVsZHM+KFxuXHRcdFx0ZnVsbENvbnRleHRQYXRoLFxuXHRcdFx0XCIkVHlwZS9AVUkuSGVhZGVySW5mby9UaXRsZS9UYXJnZXQvJEFubm90YXRpb25QYXRoXCJcblx0XHQpO1xuXHRcdHRpdGxlVmFsdWVFeHByZXNzaW9uID0gZ2V0TGFiZWxGb3JDb25uZWN0ZWRGaWVsZHMoXG5cdFx0XHRjb25uZWN0ZWRGaWVsZHNQYXRoLFxuXHRcdFx0Z2V0VGV4dEJpbmRpbmdFeHByZXNzaW9uLFxuXHRcdFx0ZmFsc2Vcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+O1xuXHR9XG5cdHJldHVybiB0aXRsZVZhbHVlRXhwcmVzc2lvbjtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIE9iamVjdCBQYWdlLCBRdWljayBWaWV3LCBhbmQgb3RoZXIgdGl0bGVzLlxuICogQHBhcmFtIHBhdGggVGhlIGRhdGEgbW9kZWwgb2JqZWN0IHBhdGhcbiAqIEBwYXJhbSBnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24gVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgdGV4dCBiaW5kaW5nIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBbZm9ybWF0T3B0aW9uc10gVGhlIGZvcm1hdCBvcHRpb25zIG9mIHRoZSBmaWVsZFxuICogQHBhcmFtIGZvcm1hdE9wdGlvbnMuZGlzcGxheU1vZGVcbiAqIEBwYXJhbSBbaGVhZGVySW5mb10gVGhlIG9iamVjdCBwYWdlIGhlYWRlciBpbmZvXG4gKiBAcGFyYW0gW3ZpZXdEYXRhXSBUaGUgYXNzb2NpYXRlZCB2aWV3IGRhdGFcbiAqIEBwYXJhbSBjdXN0b21Gb3JtYXR0ZXJcbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBleHByZXNzaW9uLWJpbmRpbmcgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRUaXRsZUJpbmRpbmdFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRwYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0Z2V0VGV4dEJpbmRpbmdFeHByZXNzaW9uOiBGdW5jdGlvbixcblx0Zm9ybWF0T3B0aW9ucz86IFBhcnRpYWw8eyBkaXNwbGF5TW9kZT86IERpc3BsYXlNb2RlOyBzcGxpdFRpdGxlT25Ud29MaW5lcz86IGJvb2xlYW4gfT4sXG5cdGhlYWRlckluZm8/OiBIZWFkZXJJbmZvVHlwZSxcblx0dmlld0RhdGE/OiBWaWV3RGF0YSxcblx0Y3VzdG9tRm9ybWF0dGVyPzogc3RyaW5nXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBmb3JtYXR0ZXIgPSBjdXN0b21Gb3JtYXR0ZXIgfHwgdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFRpdGxlO1xuXHRsZXQgY3JlYXRlTW9kZVRpdGxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB8IHN0cmluZyA9IHBhdGhJbk1vZGVsKFwiVF9ORVdfT0JKRUNUXCIsIFwic2FwLmZlLmkxOG5cIik7XG5cdGxldCB0aXRsZVZhbHVlRXhwcmVzc2lvbjtcblx0bGV0IGlzSGVhZGVySW5mb1RpdGxlRW1wdHkgPSBmYWxzZTtcblxuXHQvL0lmIHRoZSB0aXRsZSBjb250YWlucyBhIGd1aWQgd2l0aCBhbiBleHRlcm5hbCBJRCB3ZSB3YW50IHRvIGJlaGF2ZSBhcyBpZiB0aGUgdGl0bGUgYW5ub3RhdGlvbiB3b3VsZCBwb2ludCB0byB0aGUgdGFyZ2V0XG5cdC8vb2YgdGhlIGV4dGVybmFsSUQgYW5ub3RhdGlvblxuXHRsZXQgZXh0SWRIZWFkZXJJbmZvVGl0bGU7XG5cdGlmIChpc0RhdGFGaWVsZChoZWFkZXJJbmZvPy5UaXRsZSkgJiYgaGVhZGVySW5mbz8uVGl0bGUuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkV4dGVybmFsSUQpIHtcblx0XHRleHRJZEhlYWRlckluZm9UaXRsZSA9IHtcblx0XHRcdC4uLmhlYWRlckluZm8uVGl0bGUsXG5cdFx0XHRWYWx1ZTogeyAuLi5oZWFkZXJJbmZvLlRpdGxlLlZhbHVlLCAkdGFyZ2V0OiB7IC4uLmhlYWRlckluZm8uVGl0bGUuVmFsdWUuJHRhcmdldCB9IH1cblx0XHR9O1xuXHRcdGV4dElkSGVhZGVySW5mb1RpdGxlLlZhbHVlLnBhdGggPSBoZWFkZXJJbmZvLlRpdGxlLlZhbHVlLiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkV4dGVybmFsSUQucGF0aDtcblx0XHRleHRJZEhlYWRlckluZm9UaXRsZS5WYWx1ZS4kdGFyZ2V0ID0gaGVhZGVySW5mby5UaXRsZS5WYWx1ZS4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5FeHRlcm5hbElELiR0YXJnZXQ7XG5cdH1cblxuXHQvLyBJZiB3ZSBoYXZlIGEgaGVhZGVySW5mbyBidXQgbm8gdGl0bGUsIG9yIGVtcHR5IHRpdGxlIHdlIG5lZWQgdG8gZGlzcGxheSBhbiBlbXB0eSBzdHJpbmcgd2hlbiB3ZSBhcmUgb24gYW4gYWN0aXZlIG9iamVjdFxuXHQvLyByZWNlaXZlZCBoZWFkZXIgaW5mbyBmb3Igb2JqZWN0IHBhZ2Vcblx0aWYgKGhlYWRlckluZm8/LlRpdGxlPy4kVHlwZSAmJiB2aWV3RGF0YSkge1xuXHRcdGlmIChleHRJZEhlYWRlckluZm9UaXRsZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aXRsZVZhbHVlRXhwcmVzc2lvbiA9IGdldFRpdGxlVmFsdWVFeHByZXNzaW9uRnJvbUhlYWRlckluZm8ocGF0aCwgaGVhZGVySW5mby5UaXRsZSwgZ2V0VGV4dEJpbmRpbmdFeHByZXNzaW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGl0bGVWYWx1ZUV4cHJlc3Npb24gPSBnZXRUaXRsZVZhbHVlRXhwcmVzc2lvbkZyb21IZWFkZXJJbmZvKHBhdGgsIGV4dElkSGVhZGVySW5mb1RpdGxlLCBnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24pO1xuXHRcdH1cblx0XHRjcmVhdGVNb2RlVGl0bGUgPSBnZXRDcmVhdGVNb2RlVGl0bGUodmlld0RhdGEsIGhlYWRlckluZm8pO1xuXHRcdGlmIChpc0NvbnN0YW50KHRpdGxlVmFsdWVFeHByZXNzaW9uKSAmJiB0aXRsZVZhbHVlRXhwcmVzc2lvbi52YWx1ZSA9PT0gXCJcIikge1xuXHRcdFx0aXNIZWFkZXJJbmZvVGl0bGVFbXB0eSA9IHRydWU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGhlYWRlckluZm8gJiYgKGhlYWRlckluZm8uVGl0bGUgPT09IHVuZGVmaW5lZCB8fCBoZWFkZXJJbmZvLlRpdGxlLnRvU3RyaW5nKCkgPT09IFwiXCIpKSB7XG5cdFx0aXNIZWFkZXJJbmZvVGl0bGVFbXB0eSA9IHRydWU7XG5cdFx0Ly8gcmVjZWl2ZWQgaGVhZGVyIGluZm8gZm9yIG9iamVjdFBhZ2Vcblx0XHRpZiAoIXZpZXdEYXRhKSB7XG5cdFx0XHR0aXRsZVZhbHVlRXhwcmVzc2lvbiA9IGNvbnN0YW50KFwiXCIpO1xuXHRcdH1cblx0fVxuXHRpZiAodGl0bGVWYWx1ZUV4cHJlc3Npb24gJiYgaXNDb25zdGFudCh0aXRsZVZhbHVlRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24odGl0bGVWYWx1ZUV4cHJlc3Npb24pO1xuXHR9XG5cblx0Ly8gbmVlZGVkIGZvciBxdWlja3ZpZXdcblx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHBhdGgudGFyZ2V0T2JqZWN0KSkge1xuXHRcdHBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChwYXRoLCBwYXRoLnRhcmdldE9iamVjdC5wYXRoKTtcblx0fVxuXG5cdGNvbnN0IHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiA9IHBhdGhJbk1vZGVsKGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgocGF0aCkpO1xuXHRsZXQgcGFyYW1zOiBCaW5kaW5nRXhwcmVzc2lvblR1cGxlIHwgdW5kZWZpbmVkO1xuXHRpZiAodGl0bGVWYWx1ZUV4cHJlc3Npb24pIHtcblx0XHRwYXJhbXMgPSBBcnJheS5pc0FycmF5KHRpdGxlVmFsdWVFeHByZXNzaW9uKSA/ICh0aXRsZVZhbHVlRXhwcmVzc2lvbiBhcyB1bmtub3duIGFzIEJpbmRpbmdFeHByZXNzaW9uVHVwbGUpIDogW3RpdGxlVmFsdWVFeHByZXNzaW9uXTtcblx0fSBlbHNlIGlmIChwYXRoLnRhcmdldE9iamVjdCAmJiBpc1Byb3BlcnR5KHBhdGgudGFyZ2V0T2JqZWN0KSkge1xuXHRcdHBhcmFtcyA9IGdldFRpdGxlQmluZGluZ1dpdGhUZXh0QXJyYW5nZW1lbnQocGF0aCwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgZm9ybWF0T3B0aW9ucyk7XG5cdH1cblx0Y29uc3QgaXNUaXRsZUVtcHR5ID0gcGFyYW1zID09PSB1bmRlZmluZWQgfHwgaXNUaXRsZUVtcHR5Qm9vbGVhbkV4cHJlc3Npb24ocGFyYW1zWzBdKTtcblx0Y29uc3QgZm9yY2VFbXB0eVN0cmluZyA9IHNob3VsZEZvcmNlRW1wdHlTdHJpbmcocGF0aCk7XG5cdGNvbnN0IGZvcm1hdHRlZEV4cHJlc3Npb24gPSBwYXJhbXMgIT0gdW5kZWZpbmVkICYmIGZvcm1hdFJlc3VsdChwYXJhbXMsIGZvcm1hdHRlcik7XG5cdHRpdGxlVmFsdWVFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdGlzVGl0bGVFbXB0eSxcblx0XHRpZkVsc2UoXG5cdFx0XHRvcihpc0hlYWRlckluZm9UaXRsZUVtcHR5ICYmIGlzT3JIYXNBY3RpdmVFbnRpdHkocGF0aCksIGZvcmNlRW1wdHlTdHJpbmcpLFxuXHRcdFx0XCJcIixcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0aXNVbmRlZmluZWRFeHByZXNzaW9uKGNvbnN0YW50KGN1c3RvbUZvcm1hdHRlcikpLFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0b3IoVUkuSXNDcmVhdGVNb2RlLCBub3QoaXNPckhhc0FjdGl2ZUVudGl0eShwYXRoKSkpLFxuXHRcdFx0XHRcdGNyZWF0ZU1vZGVUaXRsZSxcblx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcIlRfQU5OT1RBVElPTl9IRUxQRVJfREVGQVVMVF9IRUFERVJfVElUTEVfTk9fSEVBREVSX0lORk9cIiwgXCJzYXAuZmUuaTE4blwiKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0bm90KGlzT3JIYXNBY3RpdmVFbnRpdHkocGF0aCkpLFxuXHRcdFx0XHRcdHZpZXdEYXRhPy5yZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX05FV19PQkpFQ1RcIiksXG5cdFx0XHRcdFx0dmlld0RhdGE/LnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfQU5OT1RBVElPTl9IRUxQRVJfREVGQVVMVF9IRUFERVJfVElUTEVfTk9fSEVBREVSX0lORk9cIilcblx0XHRcdFx0KVxuXHRcdFx0KVxuXHRcdCksXG5cdFx0Zm9ybWF0dGVkRXhwcmVzc2lvblxuXHQpO1xuXG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbih0aXRsZVZhbHVlRXhwcmVzc2lvbik7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFrQ08sTUFBTUEsc0JBQXNCLEdBQUcsU0FBQUEsQ0FDckNDLDBCQUE0RCxFQUM1REMsZUFBNkQsRUFDMUI7SUFDbkMsT0FBT0Msb0JBQW9CLENBQUNGLDBCQUEwQixFQUFFLGFBQWEsRUFBR0csVUFBVSxJQUFLO01BQ3RGLElBQUlDLGFBQWEsR0FBR0QsVUFBVTtNQUM5QixJQUFJQSxVQUFVLENBQUNFLFNBQVMsS0FBS0MsU0FBUyxFQUFFO1FBQ3ZDO1FBQ0EsTUFBTUMsc0JBQXNCLEdBQUdDLG9CQUFvQixDQUFXUCxlQUFlLEVBQUVFLFVBQVUsQ0FBQ00sSUFBSSxDQUFDO1FBQy9GTCxhQUFhLEdBQUdNLHlCQUF5QixDQUFDSCxzQkFBc0IsQ0FBQ0ksWUFBWSxFQUFHUixVQUFVLENBQUM7TUFDNUY7TUFDQSxPQUFPQyxhQUFhO0lBQ3JCLENBQUMsQ0FBQztFQUNILENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUpBUSxRQUFBLENBQUFiLHNCQUFBLEdBQUFBLHNCQUFBO0VBS0EsTUFBTWMscUJBQXFCLEdBQUlDLHVCQUFxRSxJQUEyQjtJQUM5SCxNQUFNQyxzQkFBc0IsR0FBR0QsdUJBQXVCLENBQUNILFlBQVk7SUFDbkUsT0FBT0ssd0JBQXdCLENBQUNELHNCQUFzQixDQUFDLEdBQUdBLHNCQUFzQixDQUFDRSxPQUFPLEdBQUdGLHNCQUFzQjtFQUNsSCxDQUFDOztFQUVEO0FB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
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
} from "sap/fe/base/BindingToolkit";
|
|
22
22
|
import valueFormatters from "sap/fe/core/formatters/ValueFormatter";
|
|
23
23
|
import { Draft, UI } from "sap/fe/core/helpers/BindingHelper";
|
|
24
|
-
import { isPathAnnotationExpression, isPropertyPathExpression } from "sap/fe/core/helpers/TypeGuards";
|
|
24
|
+
import { isPathAnnotationExpression, isProperty, isPropertyPathExpression } from "sap/fe/core/helpers/TypeGuards";
|
|
25
25
|
import type { ViewData } from "sap/fe/core/services/TemplatedViewServiceFactory";
|
|
26
26
|
import { getLabelForConnectedFields } from "sap/fe/core/templating/DataFieldFormatters";
|
|
27
27
|
import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
@@ -290,15 +290,15 @@ export const getTitleBindingExpression = function (
|
|
|
290
290
|
}
|
|
291
291
|
|
|
292
292
|
const propertyBindingExpression: BindingToolkitExpression<unknown> = pathInModel(getContextRelativeTargetObjectPath(path));
|
|
293
|
-
let params: BindingExpressionTuple;
|
|
293
|
+
let params: BindingExpressionTuple | undefined;
|
|
294
294
|
if (titleValueExpression) {
|
|
295
295
|
params = Array.isArray(titleValueExpression) ? (titleValueExpression as unknown as BindingExpressionTuple) : [titleValueExpression];
|
|
296
|
-
} else {
|
|
296
|
+
} else if (path.targetObject && isProperty(path.targetObject)) {
|
|
297
297
|
params = getTitleBindingWithTextArrangement(path, propertyBindingExpression, formatOptions);
|
|
298
298
|
}
|
|
299
|
-
const isTitleEmpty = isTitleEmptyBooleanExpression(params[0]);
|
|
299
|
+
const isTitleEmpty = params === undefined || isTitleEmptyBooleanExpression(params[0]);
|
|
300
300
|
const forceEmptyString = shouldForceEmptyString(path);
|
|
301
|
-
const formattedExpression = formatResult(params, formatter);
|
|
301
|
+
const formattedExpression = params != undefined && formatResult(params, formatter);
|
|
302
302
|
titleValueExpression = ifElse(
|
|
303
303
|
isTitleEmpty,
|
|
304
304
|
ifElse(
|
|
@@ -44,7 +44,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/formatters/CriticalityFormatter", "s
|
|
|
44
44
|
controls: [],
|
|
45
45
|
elements: [],
|
|
46
46
|
// eslint-disable-next-line no-template-curly-in-string
|
|
47
|
-
version: "1.130.
|
|
47
|
+
version: "1.130.8",
|
|
48
48
|
noLibraryCSS: true,
|
|
49
49
|
extensions: {
|
|
50
50
|
//Configuration used for rule loading of Support Assistant
|