@kepler.gl/reducers 3.3.0-alpha.10 → 3.3.0-alpha.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/combined-updaters.js +1 -1
- package/dist/cjs/layer-utils.js +15 -7
- package/dist/cjs/map-state-updaters.js +1 -1
- package/dist/cjs/map-style-updaters.js +4 -5
- package/dist/cjs/merger-handler.js +2 -2
- package/dist/cjs/middleware.js +4 -6
- package/dist/cjs/provider-state-updaters.js +15 -16
- package/dist/cjs/root.js +2 -2
- package/dist/cjs/vis-state-merger.js +68 -26
- package/dist/cjs/vis-state-selectors.js +26 -8
- package/dist/cjs/vis-state-updaters.js +233 -167
- package/dist/esm/combined-updaters.js +1 -1
- package/dist/esm/layer-utils.js +15 -7
- package/dist/esm/map-state-updaters.js +1 -1
- package/dist/esm/map-style-updaters.js +2 -2
- package/dist/esm/merger-handler.js +2 -2
- package/dist/esm/middleware.js +4 -6
- package/dist/esm/provider-state-updaters.js +4 -4
- package/dist/esm/root.js +2 -2
- package/dist/esm/vis-state-merger.js +64 -23
- package/dist/esm/vis-state-selectors.js +25 -7
- package/dist/esm/vis-state-updaters.js +229 -162
- package/dist/layer-utils.d.ts +1 -0
- package/dist/middleware.d.ts +2 -2
- package/dist/root.d.ts +1 -1
- package/dist/vis-state-selectors.d.ts +53 -6
- package/dist/vis-state-updaters.d.ts +4 -3
- package/package.json +16 -17
|
@@ -481,4 +481,4 @@ export var replaceDataInMapUpdater = function replaceDataInMapUpdater(state, _re
|
|
|
481
481
|
}));
|
|
482
482
|
return nextState;
|
|
483
483
|
};
|
|
484
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0b2dnbGVNb2RhbFVwZGF0ZXIiLCJsb2FkRmlsZXNTdWNjZXNzVXBkYXRlciIsInVpU3RhdGVMb2FkRmlsZXNTdWNjZXNzVXBkYXRlciIsInRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyIiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwidWlTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsInJlY2VpdmVNYXBDb25maWdVcGRhdGVyIiwidWlTdGF0ZVJlY2VpdmVNYXBDb25maWdVcGRhdGVyIiwidXBkYXRlVmlzRGF0YVVwZGF0ZXIiLCJ2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwic2V0TWFwSW5mb1VwZGF0ZXIiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwidmlzU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZSIsInN0YXRlTWFwQ29uZmlnVXBkYXRlciIsIm1hcFN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwic2V0TWFwU3BsaXRNb2RlVXBkYXRlciIsIm1hcFN0YXRlU2V0TWFwU3BsaXRNb2RlVXBkYXRlciIsInNldE1hcFZpZXdNb2RlVXBkYXRlciIsIm1hcFN0eWxlQ2hhbmdlVXBkYXRlciIsInN0eWxlTWFwQ29uZmlnVXBkYXRlciIsImZpbGVzVG9EYXRhUGF5bG9hZCIsInBheWxvYWRfIiwiYXBwbHlfIiwid2l0aF8iLCJpZl8iLCJjb21wb3NlXyIsIm1lcmdlXyIsInBpY2tfIiwiaXNQbGFpbk9iamVjdCIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImZpbmRNYXBCb3VuZHMiLCJCQVNFX01BUF9DT0xPUl9NT0RFUyIsIk9WRVJMQVlfQkxFTkRJTkdTIiwiTk9fTUFQX0lEIiwiTWFwU3BsaXRNb2RlIiwiZ2V0QmFzZW1hcENvbG9yc0ZvclN0eWxlIiwiREVGQVVMVF9CQVNFTUFQX0NPTE9SIiwiY29tYmluZWRVcGRhdGVycyIsImlzVmFsaWRDb25maWciLCJjb25maWciLCJ2ZXJzaW9uIiwiZGVmYXVsdEFkZERhdGFUb01hcE9wdGlvbnMiLCJjZW50ZXJNYXAiLCJrZWVwRXhpc3RpbmdDb25maWciLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiYXV0b0NyZWF0ZVRvb2x0aXBzIiwiYWRkRGF0YVRvTWFwVXBkYXRlciIsInN0YXRlIiwiX3JlZiIsIl9kYXRhc2V0cyQiLCJfZGF0YXNldHMkMiIsIl9kYXRhc2V0cyQzIiwicGF5bG9hZCIsImRhdGFzZXRzIiwiaW5mbyIsIm9wdGlvbnMiLCJfb2JqZWN0U3ByZWFkIiwiaXNQcm9ncmVzc2l2ZUxvYWRpbmciLCJBcnJheSIsImlzQXJyYXkiLCJmb3JtYXQiLCJpZCIsInZpc1N0YXRlIiwicGFyc2VkQ29uZmlnIiwic2NoZW1hIiwicGFyc2VTYXZlZENvbmZpZyIsIm9sZExheWVycyIsImxheWVycyIsImZpbHRlck5ld2x5QWRkZWRMYXllcnMiLCJmaWx0ZXIiLCJubCIsImZpbmQiLCJvbCIsImZpbmRNYXBCb3VuZHNJZkNlbnRlcmVkIiwiYm91bmRzIiwidW5kZWZpbmVkIiwiQm9vbGVhbiIsIl9yZWYyIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwicmVhZE9ubHkiLCJhY3Rpb24iLCJwYXlsb2FkcyIsInJlc3VsdCIsIm5leHRTdGF0ZSIsImZpbGVMb2FkaW5nIiwiZmlsZUxvYWRpbmdQcm9ncmVzcyIsInN0YXRlV2l0aERhdGEiLCJtYXAiLCJwIiwiYWRkRGF0YVRvTWFwQ29tcG9zZWQiLCJ1cGRhdGVPdmVybGF5QmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJub3JtYWwiLCJ2YWx1ZSIsInVwZGF0ZURhcmtCYXNlTWFwTGF5ZXJzIiwiZGFya0Jhc2VNYXBFbmFibGVkIiwibGF5ZXJJZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImxheWVyIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJ2aXNDb25maWciLCJ1cGRhdGVMYXllckNvbmZpZyIsImNvbWJpbmVkTWFwU3R5bGVDaGFuZ2VVcGRhdGVyIiwiX21hcFN0YXRlJGdsb2JlIiwibWFwU3R5bGUiLCJnZXRDb2xvck1vZGUiLCJrZXkiLCJfbWFwU3R5bGUkbWFwU3R5bGVzJGsiLCJtYXBTdHlsZXMiLCJjb2xvck1vZGUiLCJwcmV2Q29sb3JNb2RlIiwic3R5bGVUeXBlIiwibmV4dENvbG9yTW9kZSIsIm1hcFN0YXRlIiwiREFSSyIsInNjcmVlbiIsIkxJR0hUIiwiZGFya2VuIiwiZ2xvYmUiLCJlbmFibGVkIiwiYmFzZW1hcCIsImxhYmVscyIsImFkbWluTGluZXMiLCJ3YXRlciIsInN5bmNHbG9iZUNvbmZpZ0NvbG9yc1RvU3R5bGUiLCJfbWFwU3RhdGUkZ2xvYmUyIiwibmV4dFN0eWxlT2JqIiwibmV4dEdsb2JlQ29uZmlnIiwic3VyZmFjZUNvbG9yIiwiYmFja2dyb3VuZEZpbGxDb2xvciIsIndhdGVyQ29sb3IiLCJiYXNlbWFwV2F0ZXJGaWxsQ29sb3IiLCJhZG1pbkxpbmVzQ29sb3IiLCJiYXNlbWFwQWRtaW5MaW5lQ29sb3IiLCJiYXNlbWFwQ29sb3JzIiwic3R5bGUiLCJsYXllckdyb3VwcyIsImNvbWJpbmVkU2V0TWFwVmlld01vZGVVcGRhdGVyIiwiX21hcFN0YXRlJGdsb2JlMyIsImNvbWJpbmVkTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJvbGRMYXllciIsIm5ld0xheWVyIiwiX25ld1N0YXRlJHVpU3RhdGUkbWFwIiwibmV3U3RhdGUiLCJ1aVN0YXRlIiwiaXNTcGxpdCIsInNwbGl0TWFwcyIsImlzTGVnZW5kQWN0aXZlIiwibWFwQ29udHJvbHMiLCJtYXBMZWdlbmQiLCJhY3RpdmUiLCJwYW5lbElkIiwiaW5kZXgiLCJfbmV3VWlTdGF0ZSRtYXBDb250cm8iLCJtYXBTcGxpdE1vZGUiLCJwcmV2TW9kZSIsIm5ld01hcFN0YXRlIiwibmV3VmlzU3RhdGUiLCJTSU5HTEVfTUFQIiwiRFVBTF9NQVAiLCJTV0lQRV9DT01QQVJFIiwiZHVwbGljYXRlIiwibmV3VWlTdGF0ZSIsImRlZmF1bHRSZXBsYWNlRGF0YVRvTWFwT3B0aW9ucyIsInJlcGxhY2VEYXRhSW5NYXBVcGRhdGVyIiwiX3JlZjMiLCJkYXRhc2V0VG9SZXBsYWNlSWQiLCJkYXRhc2V0VG9Vc2UiLCJfcGF5bG9hZCRvcHRpb25zIiwiYWRkRGF0YVRvTWFwT3B0aW9ucyIsImRhdGFJZFRvVXNlIiwicHJlcGFyZWRTdGF0ZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21iaW5lZC11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge1xuICB0b2dnbGVNb2RhbFVwZGF0ZXIsXG4gIGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyIGFzIHVpU3RhdGVMb2FkRmlsZXNTdWNjZXNzVXBkYXRlcixcbiAgdG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIsXG4gIHRvZ2dsZVNwbGl0TWFwVXBkYXRlciBhcyB1aVN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyLFxuICByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciBhcyB1aVN0YXRlUmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXJcbn0gZnJvbSAnLi91aS1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge1xuICB1cGRhdGVWaXNEYXRhVXBkYXRlciBhcyB2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyLFxuICBzZXRNYXBJbmZvVXBkYXRlcixcbiAgbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcixcbiAgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyIGFzIHZpc1N0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyLFxuICBwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZVxufSBmcm9tICcuL3Zpcy1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge1xuICByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciBhcyBzdGF0ZU1hcENvbmZpZ1VwZGF0ZXIsXG4gIHRvZ2dsZVNwbGl0TWFwVXBkYXRlciBhcyBtYXBTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlcixcbiAgc2V0TWFwU3BsaXRNb2RlVXBkYXRlciBhcyBtYXBTdGF0ZVNldE1hcFNwbGl0TW9kZVVwZGF0ZXIsXG4gIHNldE1hcFZpZXdNb2RlVXBkYXRlclxufSBmcm9tICcuL21hcC1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge1xuICBtYXBTdHlsZUNoYW5nZVVwZGF0ZXIsXG4gIHJlY2VpdmVNYXBDb25maWdVcGRhdGVyIGFzIHN0eWxlTWFwQ29uZmlnVXBkYXRlclxufSBmcm9tICcuL21hcC1zdHlsZS11cGRhdGVycyc7XG5pbXBvcnQge2ZpbGVzVG9EYXRhUGF5bG9hZH0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcbmltcG9ydCB7cGF5bG9hZF8sIGFwcGx5Xywgd2l0aF8sIGlmXywgY29tcG9zZV8sIG1lcmdlXywgcGlja199IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge01hcFN0YXRlLCBVaVN0YXRlLCBBZGREYXRhVG9NYXBQYXlsb2FkLCBQYXJzZWRDb25maWd9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtNYXBTdHlsZX0gZnJvbSAnLi9tYXAtc3R5bGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtQcm92aWRlclN0YXRlfSBmcm9tICcuL3Byb3ZpZGVyLXN0YXRlLXVwZGF0ZXJzJztcbmltcG9ydCB7XG4gIGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyQWN0aW9uLFxuICBNYXBTdHlsZUNoYW5nZVVwZGF0ZXJBY3Rpb24sXG4gIExheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb24sXG4gIFRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvbixcbiAgUmVwbGFjZURhdGFJbk1hcFBheWxvYWQsXG4gIE1hcFN0YXRlQWN0aW9uc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7TGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7aXNQbGFpbk9iamVjdCwgY29tcHV0ZVNwbGl0TWFwTGF5ZXJzfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7ZmluZE1hcEJvdW5kc30gZnJvbSAnLi9kYXRhLXV0aWxzJztcbmltcG9ydCB7QkFTRV9NQVBfQ09MT1JfTU9ERVMsIE9WRVJMQVlfQkxFTkRJTkdTLCBOT19NQVBfSUQsIE1hcFNwbGl0TW9kZX0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtnZXRCYXNlbWFwQ29sb3JzRm9yU3R5bGUsIERFRkFVTFRfQkFTRU1BUF9DT0xPUn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcblxuZXhwb3J0IHR5cGUgS2VwbGVyR2xTdGF0ZSA9IHtcbiAgdmlzU3RhdGU6IFZpc1N0YXRlO1xuICBtYXBTdGF0ZTogTWFwU3RhdGU7XG4gIG1hcFN0eWxlOiBNYXBTdHlsZTtcbiAgdWlTdGF0ZTogVWlTdGF0ZTtcbiAgcHJvdmlkZXJTdGF0ZTogUHJvdmlkZXJTdGF0ZTtcbn07XG5cbi8vIGNvbXBvc2UgYWN0aW9uIHRvIGFwcGx5IHJlc3VsdCBtdWx0aXBsZSByZWR1Y2Vycywgd2l0aCB0aGUgb3V0cHV0IG9mIG9uZVxuXG4vKipcbiAqIFNvbWUgYWN0aW9ucyB3aWxsIGFmZmVjdCB0aGUgZW50aXJlIGtlcGxlci5sZyBpbnN0YW5jZSBzdGF0ZS5cbiAqIFRoZSB1cGRhdGVycyBmb3IgdGhlc2UgYWN0aW9ucyBpcyBleHBvcnRlZCBhcyBgY29tYmluZWRVcGRhdGVyc2AuIFRoZXNlIHVwZGF0ZXIgdGFrZSB0aGUgZW50aXJlIGluc3RhbmNlIHN0YXRlXG4gKiBhcyB0aGUgZmlyc3QgYXJndW1lbnQuIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyLCB7Y29tYmluZWRVcGRhdGVyc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiAvLyBSb290IFJlZHVjZXJcbiAqIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAqICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICogIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogY29uc3QgY29tcG9zZWRSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAqICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gKiAgICAvLyBhZGQgZGF0YSB0byBtYXAgYWZ0ZXIgcmVjZWl2aW5nIGRhdGEgZnJvbSByZW1vdGUgc291cmNlc1xuICogICAgY2FzZSAnTE9BRF9SRU1PVEVfUkVTT1VSQ0VfU1VDQ0VTUyc6XG4gKiAgICAgIHJldHVybiB7XG4gKiAgICAgICAgLi4uc3RhdGUsXG4gKiAgICAgICAga2VwbGVyR2w6IHtcbiAqICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLFxuICogICAgICAgICAgLy8gcGFzcyBpbiBrZXBsZXIuZ2wgaW5zdGFuY2Ugc3RhdGUgdG8gY29tYmluZWRVcGRhdGVyc1xuICogICAgICAgICAgbWFwOiAgY29tYmluZWRVcGRhdGVycy5hZGREYXRhVG9NYXBVcGRhdGVyKFxuICogICAgICAgICAgIHN0YXRlLmtlcGxlckdsLm1hcCxcbiAqICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICBwYXlsb2FkOiB7XG4gKiAgICAgICAgICAgICAgIGRhdGFzZXRzOiBhY3Rpb24uZGF0YXNldHMsXG4gKiAgICAgICAgICAgICAgIG9wdGlvbnM6IHtyZWFkT25seTogdHJ1ZX0sXG4gKiAgICAgICAgICAgICAgIGNvbmZpZzogYWN0aW9uLmNvbmZpZ1xuICogICAgICAgICAgICAgIH1cbiAqICAgICAgICAgICAgfVxuICogICAgICAgICAgKVxuICogICAgICAgIH1cbiAqICAgICAgfTtcbiAqICB9XG4gKiAgcmV0dXJuIHJlZHVjZXJzKHN0YXRlLCBhY3Rpb24pO1xuICogfTtcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBjb21wb3NlZFJlZHVjZXI7XG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCBjb21iaW5lZFVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBpc1ZhbGlkQ29uZmlnID0gY29uZmlnID0+XG4gIGlzUGxhaW5PYmplY3QoY29uZmlnKSAmJiBpc1BsYWluT2JqZWN0KGNvbmZpZy5jb25maWcpICYmIGNvbmZpZy52ZXJzaW9uO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEFkZERhdGFUb01hcE9wdGlvbnMgPSB7XG4gIGNlbnRlck1hcDogdHJ1ZSxcbiAga2VlcEV4aXN0aW5nQ29uZmlnOiBmYWxzZSxcbiAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZSxcbiAgYXV0b0NyZWF0ZVRvb2x0aXBzOiB0cnVlXG59O1xuXG4vKipcbiAqIENvbWJpbmUgZGF0YSBhbmQgZnVsbCBjb25maWd1cmF0aW9uIHVwZGF0ZSBpbiBhIHNpbmdsZSBhY3Rpb25cbiAqXG4gKiBAbWVtYmVyb2YgY29tYmluZWRVcGRhdGVyc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIGtlcGxlci5nbCBpbnN0YW5jZSBzdGF0ZSwgY29udGFpbmluZyBhbGwgc3VicmVkdWNlciBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbi5wYXlsb2FkIGB7ZGF0YXNldHMsIG9wdGlvbnMsIGNvbmZpZ31gXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQuZGF0YXNldHMgLSAqKipyZXF1aXJlZCoqIGRhdGFzZXRzIGNhbiBiZSBhIGRhdGFzZXQgb3IgYW4gYXJyYXkgb2YgZGF0YXNldHNcbiAqIEVhY2ggZGF0YXNldCBvYmplY3QgbmVlZHMgdG8gaGF2ZSBgaW5mb2AgYW5kIGBkYXRhYCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBbYWN0aW9uLnBheWxvYWQub3B0aW9uc10gb3B0aW9uIG9iamVjdCBge2NlbnRlck1hcDogdHJ1ZSwgcGFkZGluZzoge2xlZnQ6IDMwMH19YFxuICogQHBhcmFtIFthY3Rpb24ucGF5bG9hZC5jb25maWddIG1hcCBjb25maWdcbiAqIEBwYXJhbSBbYWN0aW9uLnBheWxvYWQuaW5mb10gbWFwIGluZm8gY29udGFpbnMgdGl0bGUgYW5kIGRlc2NyaXB0aW9uXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEYXRhc2V0XG4gKiBAcHJvcGVydHkgaW5mbyAtaW5mbyBvZiBhIGRhdGFzZXRcbiAqIEBwcm9wZXJ0eSBpbmZvLmlkIC0gaWQgb2YgdGhpcyBkYXRhc2V0LiBJZiBjb25maWcgaXMgZGVmaW5lZCwgYGlkYCBzaG91bGQgbWF0Y2hlcyB0aGUgYGRhdGFJZGAgaW4gY29uZmlnLlxuICogQHByb3BlcnR5IGluZm8ubGFiZWwgLSBBIGRpc3BsYXkgbmFtZSBvZiB0aGlzIGRhdGFzZXRcbiAqIEBwcm9wZXJ0eSBkYXRhIC0gKioqcmVxdWlyZWQqKiBUaGUgZGF0YSBvYmplY3QsIGluIGEgdGFidWxhciBmb3JtYXQgd2l0aCAyIHByb3BlcnRpZXMgYGZpZWxkc2AgYW5kIGByb3dzYFxuICogQHByb3BlcnR5IGRhdGEuZmllbGRzIC0gKioqcmVxdWlyZWQqKiBBcnJheSBvZiBmaWVsZHMsXG4gKiBAcHJvcGVydHkgZGF0YS5maWVsZHMubmFtZSAtICoqKnJlcXVpcmVkKiogTmFtZSBvZiB0aGUgZmllbGQsXG4gKiBAcHJvcGVydHkgZGF0YS5yb3dzIC0gKioqcmVxdWlyZWQqKiBBcnJheSBvZiByb3dzLCBpbiBhIHRhYnVsYXIgZm9ybWF0IHdpdGggYGZpZWxkc2AgYW5kIGByb3dzYFxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZERhdGFUb01hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICB7cGF5bG9hZH06IHtwYXlsb2FkOiBBZGREYXRhVG9NYXBQYXlsb2FkfVxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGNvbnN0IHtkYXRhc2V0cywgY29uZmlnLCBpbmZvfSA9IHBheWxvYWQ7XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAuLi5kZWZhdWx0QWRkRGF0YVRvTWFwT3B0aW9ucyxcbiAgICAuLi5wYXlsb2FkLm9wdGlvbnNcbiAgfTtcblxuICAvLyBjaGVjayBpZiBwcm9ncmVzc2l2ZSBsb2FkaW5nIGRhdGFzZXQgYnkgYmF0Y2hlcywgYW5kIHVwZGF0ZSB2aXNTdGF0ZSBkaXJlY3RseVxuICBjb25zdCBpc1Byb2dyZXNzaXZlTG9hZGluZyA9XG4gICAgQXJyYXkuaXNBcnJheShkYXRhc2V0cykgJiZcbiAgICBkYXRhc2V0c1swXT8uaW5mby5mb3JtYXQgPT09ICdhcnJvdycgJiZcbiAgICBkYXRhc2V0c1swXT8uaW5mby5pZCAmJlxuICAgIGRhdGFzZXRzWzBdPy5pbmZvLmlkIGluIHN0YXRlLnZpc1N0YXRlLmRhdGFzZXRzO1xuICBpZiAoaXNQcm9ncmVzc2l2ZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gY29tcG9zZV88S2VwbGVyR2xTdGF0ZT4oW1xuICAgICAgcGlja18oJ3Zpc1N0YXRlJykoXG4gICAgICAgIGFwcGx5XzxWaXNTdGF0ZSwgYW55Pih2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyLCB7XG4gICAgICAgICAgZGF0YXNldHMsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICBjb25maWdcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICBdKShzdGF0ZSk7XG4gIH1cblxuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIGxldCBwYXJzZWRDb25maWc6IFBhcnNlZENvbmZpZyA9IGNvbmZpZztcblxuICBpZiAoaXNWYWxpZENvbmZpZyhjb25maWcpKSB7XG4gICAgLy8gaWYgcGFzc2VkIGluIHNhdmVkIGNvbmZpZ1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBwYXJzZWRDb25maWcgPSBzdGF0ZS52aXNTdGF0ZS5zY2hlbWEucGFyc2VTYXZlZENvbmZpZyhjb25maWcpO1xuICB9XG4gIGNvbnN0IG9sZExheWVycyA9IHN0YXRlLnZpc1N0YXRlLmxheWVycztcbiAgY29uc3QgZmlsdGVyTmV3bHlBZGRlZExheWVycyA9IChsYXllcnM6IExheWVyW10pID0+XG4gICAgbGF5ZXJzLmZpbHRlcihubCA9PiAhb2xkTGF5ZXJzLmZpbmQob2wgPT4gb2wgPT09IG5sKSk7XG5cbiAgLy8gUmV0dXJucyB1bmRlZmluZWQgaWYgbm90IGZvdW5kLCB0byBtYWtlIHR5cGVzY3JpcHQgaGFwcHlcbiAgY29uc3QgZmluZE1hcEJvdW5kc0lmQ2VudGVyZWQgPSAobGF5ZXJzOiBMYXllcltdKSA9PiB7XG4gICAgY29uc3QgYm91bmRzID0gb3B0aW9ucy5jZW50ZXJNYXAgJiYgZmluZE1hcEJvdW5kcyhsYXllcnMpO1xuICAgIHJldHVybiBib3VuZHMgPyBib3VuZHMgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgcmV0dXJuIGNvbXBvc2VfPEtlcGxlckdsU3RhdGU+KFtcbiAgICBwaWNrXygndmlzU3RhdGUnKShcbiAgICAgIC8vIHRoaXMgcGFydCBjYW4gYmUgYXN5bmNcbiAgICAgIGFwcGx5XzxWaXNTdGF0ZSwgYW55Pih2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyLCB7XG4gICAgICAgIGRhdGFzZXRzLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBjb25maWc6IHBhcnNlZENvbmZpZ1xuICAgICAgfSlcbiAgICApLFxuXG4gICAgaWZfKEJvb2xlYW4oaW5mbyksIHBpY2tfKCd2aXNTdGF0ZScpKGFwcGx5XzxWaXNTdGF0ZSwgYW55PihzZXRNYXBJbmZvVXBkYXRlciwge2luZm99KSkpLFxuICAgIC8vIE5vdGUgdGhhdCBmaXQgYm91bmRzIGhlcmUgd29uJ3QgYmUgY2FsbGVkIGluIGNhc2UgZGF0YXNldHMgYXJlIGNyZWF0ZWQgaW4gVGFza3MuXG4gICAgLy8gQSBzZXBhcmF0ZSBUYXNrIHRvIHVwZGF0ZSBib3VuZHMgaXMgY3JlYXRlZCBvbmNlIHRoZSBkYXRhc2V0cyBhcmUgcmVhZHkuXG4gICAgd2l0aF8oKHt2aXNTdGF0ZX0pID0+XG4gICAgICBwaWNrXygnbWFwU3RhdGUnKShcbiAgICAgICAgYXBwbHlfKFxuICAgICAgICAgIHN0YXRlTWFwQ29uZmlnVXBkYXRlcixcbiAgICAgICAgICBwYXlsb2FkXyh7XG4gICAgICAgICAgICBjb25maWc6IHBhcnNlZENvbmZpZyxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBib3VuZHM6IGZpbmRNYXBCb3VuZHNJZkNlbnRlcmVkKGZpbHRlck5ld2x5QWRkZWRMYXllcnModmlzU3RhdGUubGF5ZXJzKSlcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKSxcbiAgICBwaWNrXygnbWFwU3R5bGUnKShhcHBseV8oc3R5bGVNYXBDb25maWdVcGRhdGVyLCBwYXlsb2FkXyh7Y29uZmlnOiBwYXJzZWRDb25maWcsIG9wdGlvbnN9KSkpLFxuICAgIHBpY2tfKCd1aVN0YXRlJykoXG4gICAgICBhcHBseV8odWlTdGF0ZVJlY2VpdmVNYXBDb25maWdVcGRhdGVyLCBwYXlsb2FkXyh7Y29uZmlnOiBwYXJzZWRDb25maWcsIG9wdGlvbnN9KSlcbiAgICApLFxuICAgIHBpY2tfKCd1aVN0YXRlJykoYXBwbHlfKHVpU3RhdGVMb2FkRmlsZXNTdWNjZXNzVXBkYXRlciwgcGF5bG9hZF8obnVsbCkpKSxcblxuICAgIHBpY2tfKCd1aVN0YXRlJykoYXBwbHlfKHRvZ2dsZU1vZGFsVXBkYXRlciwgcGF5bG9hZF8obnVsbCkpKSxcbiAgICBwaWNrXygndWlTdGF0ZScpKFxuICAgICAgbWVyZ2VfKFxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3JlYWRPbmx5JylcbiAgICAgICAgICA/IHtyZWFkT25seTogb3B0aW9ucy5yZWFkT25seX1cbiAgICAgICAgICA6IHt9XG4gICAgICApXG4gICAgKVxuICBdKShzdGF0ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICBhY3Rpb246IGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgLy8gc3RpbGwgbW9yZSB0byBsb2FkXG4gIGNvbnN0IHBheWxvYWRzID0gZmlsZXNUb0RhdGFQYXlsb2FkKGFjdGlvbi5yZXN1bHQpO1xuICBjb25zdCBuZXh0U3RhdGUgPSBjb21wb3NlXyhbXG4gICAgcGlja18oJ3Zpc1N0YXRlJykoXG4gICAgICBtZXJnZV8oe1xuICAgICAgICBmaWxlTG9hZGluZzogZmFsc2UsXG4gICAgICAgIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IHt9XG4gICAgICB9KVxuICAgIClcbiAgXSkoc3RhdGUpO1xuICAvLyBtYWtlIG11bHRpcGxlIGFkZCBkYXRhIHRvIG1hcCBjYWxsc1xuICBjb25zdCBzdGF0ZVdpdGhEYXRhID0gY29tcG9zZV8ocGF5bG9hZHMubWFwKHAgPT4gYXBwbHlfKGFkZERhdGFUb01hcFVwZGF0ZXIsIHBheWxvYWRfKHApKSkpKFxuICAgIG5leHRTdGF0ZVxuICApO1xuICByZXR1cm4gc3RhdGVXaXRoRGF0YSBhcyBLZXBsZXJHbFN0YXRlO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZERhdGFUb01hcENvbXBvc2VkID0gYWRkRGF0YVRvTWFwVXBkYXRlcjtcblxuLyoqXG4gKiBIZWxwZXIgd2hpY2ggdXBkYXRlcyBtYXAgb3ZlcmxheSBibGVuZGluZyBtb2RlIGluIHZpc1N0YXRlLFxuICogYnV0IG9ubHkgaWYgaXQncyBub3QgY3VycmVudGx5IGluIHRoZSBgbm9ybWFsYCBtb2RlLlxuICovXG5jb25zdCB1cGRhdGVPdmVybGF5QmxlbmRpbmcgPSBvdmVybGF5QmxlbmRpbmcgPT4gdmlzU3RhdGUgPT4ge1xuICBpZiAodmlzU3RhdGUub3ZlcmxheUJsZW5kaW5nICE9PSBPVkVSTEFZX0JMRU5ESU5HUy5ub3JtYWwudmFsdWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmlzU3RhdGUsXG4gICAgICBvdmVybGF5QmxlbmRpbmdcbiAgICB9O1xuICB9XG4gIHJldHVybiB2aXNTdGF0ZTtcbn07XG5cbi8qKlxuICogSGVscGVyIHdoaWNoIHVwZGF0ZXMgYGRhcmtCYXNlTWFwRW5hYmxlZGAgaW4gYWxsIHRoZSBsYXllcnMgaW4gdmlzU3RhdGUgd2hpY2hcbiAqIGhhdmUgdGhpcyBjb25maWcgc2V0dGluZyAob3IgaW4gb25lIHNwZWNpZmljIGxheWVyIGlmIHRoZSBgbGF5ZXJJZGAgcGFyYW0gaXMgcHJvdmlkZWQpLlxuICovXG5jb25zdCB1cGRhdGVEYXJrQmFzZU1hcExheWVycyA9XG4gIChkYXJrQmFzZU1hcEVuYWJsZWQ6IGJvb2xlYW4sIGxheWVySWQ6IHN0cmluZyB8IG51bGwgPSBudWxsKSA9PlxuICB2aXNTdGF0ZSA9PiAoe1xuICAgIC4uLnZpc1N0YXRlLFxuICAgIGxheWVyczogdmlzU3RhdGUubGF5ZXJzLm1hcChsYXllciA9PiB7XG4gICAgICBpZiAoIWxheWVySWQgfHwgbGF5ZXIuaWQgPT09IGxheWVySWQpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsYXllci52aXNDb25maWdTZXR0aW5ncywgJ2RhcmtCYXNlTWFwRW5hYmxlZCcpKSB7XG4gICAgICAgICAgY29uc3Qge3Zpc0NvbmZpZ30gPSBsYXllci5jb25maWc7XG4gICAgICAgICAgcmV0dXJuIGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIHZpc0NvbmZpZzogey4uLnZpc0NvbmZpZywgZGFya0Jhc2VNYXBFbmFibGVkfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGF5ZXI7XG4gICAgfSlcbiAgfSk7XG5cbi8qKlxuICogVXBkYXRlciB0aGF0IGNoYW5nZXMgdGhlIG1hcCBzdHlsZSBieSBjYWxsaW5nIG1hcFN0eWxlQ2hhbmdlVXBkYXRlciBvbiB2aXNTdGF0ZS5cbiAqIEluIGFkZGl0aW9uIHRvIHRoYXQsIGl0IGRvZXMgdGhlIGZvbGxvd2luZzpcbiAqXG4gKiAgIDEuIFVwZGF0ZSBtYXAgb3ZlcmxheSBibGVuZGluZyBtb2RlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgY29sb3JNb2RlIG9mIHRoZVxuICogICAgICBiYXNlIG1hcCwgYnV0IG9ubHkgaWYgaXQncyBub3QgaW4gdGhlIGBub3JtYWxgIG1vZGUuXG4gKlxuICogICAyLiBVcGRhdGUgYWxsIHRoZSBsYXllcnMgd2hpY2ggaGF2ZSB0aGUgYGRhcmtCYXNlTWFwRW5hYmxlZGAgY29uZmlnIHNldHRpbmdcbiAqICAgICAgYWRqdXN0aW5nIGl0IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgY29sb3JNb2RlIG9mIHRoZSBiYXNlIG1hcC5cbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBjb21iaW5lZE1hcFN0eWxlQ2hhbmdlVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogTWFwU3R5bGVDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgY29uc3Qge3BheWxvYWR9ID0gYWN0aW9uO1xuICBjb25zdCB7bWFwU3R5bGV9ID0gc3RhdGU7XG4gIGNvbnN0IGdldENvbG9yTW9kZSA9IGtleSA9PiBtYXBTdHlsZS5tYXBTdHlsZXNba2V5XT8uY29sb3JNb2RlO1xuICBjb25zdCBwcmV2Q29sb3JNb2RlID0gZ2V0Q29sb3JNb2RlKG1hcFN0eWxlLnN0eWxlVHlwZSk7XG4gIGNvbnN0IG5leHRDb2xvck1vZGUgPSBnZXRDb2xvck1vZGUocGF5bG9hZC5zdHlsZVR5cGUpO1xuICBsZXQge3Zpc1N0YXRlLCBtYXBTdGF0ZX0gPSBzdGF0ZTtcbiAgaWYgKG5leHRDb2xvck1vZGUgIT09IHByZXZDb2xvck1vZGUpIHtcbiAgICBzd2l0Y2ggKG5leHRDb2xvck1vZGUpIHtcbiAgICAgIGNhc2UgQkFTRV9NQVBfQ09MT1JfTU9ERVMuREFSSzpcbiAgICAgICAgdmlzU3RhdGUgPSBjb21wb3NlXyhbXG4gICAgICAgICAgdXBkYXRlT3ZlcmxheUJsZW5kaW5nKE9WRVJMQVlfQkxFTkRJTkdTLnNjcmVlbi52YWx1ZSksXG4gICAgICAgICAgdXBkYXRlRGFya0Jhc2VNYXBMYXllcnModHJ1ZSlcbiAgICAgICAgXSkodmlzU3RhdGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQkFTRV9NQVBfQ09MT1JfTU9ERVMuTElHSFQ6XG4gICAgICAgIHZpc1N0YXRlID0gY29tcG9zZV8oW1xuICAgICAgICAgIHVwZGF0ZU92ZXJsYXlCbGVuZGluZyhPVkVSTEFZX0JMRU5ESU5HUy5kYXJrZW4udmFsdWUpLFxuICAgICAgICAgIHVwZGF0ZURhcmtCYXNlTWFwTGF5ZXJzKGZhbHNlKVxuICAgICAgICBdKSh2aXNTdGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gIH1cblxuICAvLyBVcGRhdGUgZ2xvYmUgY29uZmlnIGNvbG9ycyB3aGVuIHN0eWxlIGNoYW5nZXMgYW5kIGdsb2JlIGlzIGVuYWJsZWRcbiAgaWYgKG1hcFN0YXRlLmdsb2JlPy5lbmFibGVkKSB7XG4gICAgLy8gU3dpdGNoaW5nIGZyb20gXCJObyBCYXNlbWFwXCIgdG8gYSBiYXNlbWFwIC0gcmVzdG9yZSBiYXNlbWFwIHN1Yi10b2dnbGVzXG4gICAgaWYgKHBheWxvYWQuc3R5bGVUeXBlICE9PSBOT19NQVBfSUQgJiYgbWFwU3R5bGUuc3R5bGVUeXBlID09PSBOT19NQVBfSUQpIHtcbiAgICAgIG1hcFN0YXRlID0ge1xuICAgICAgICAuLi5tYXBTdGF0ZSxcbiAgICAgICAgZ2xvYmU6IHtcbiAgICAgICAgICAuLi5tYXBTdGF0ZS5nbG9iZSxcbiAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgIC4uLm1hcFN0YXRlLmdsb2JlLmNvbmZpZyxcbiAgICAgICAgICAgIGJhc2VtYXA6IHRydWUsXG4gICAgICAgICAgICBsYWJlbHM6IHRydWUsXG4gICAgICAgICAgICBhZG1pbkxpbmVzOiB0cnVlLFxuICAgICAgICAgICAgd2F0ZXI6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIG1hcFN0YXRlID0gc3luY0dsb2JlQ29uZmlnQ29sb3JzVG9TdHlsZShtYXBTdGF0ZSwgbWFwU3R5bGUsIHBheWxvYWQuc3R5bGVUeXBlKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgdmlzU3RhdGUsXG4gICAgbWFwU3RhdGUsXG4gICAgbWFwU3R5bGU6IG1hcFN0eWxlQ2hhbmdlVXBkYXRlcihtYXBTdHlsZSwge3BheWxvYWQ6IHsuLi5wYXlsb2FkfX0pXG4gIH07XG59O1xuXG4vKipcbiAqIERlcml2ZSBnbG9iZSBiYXNlbWFwIGNvbG9ycyAoc3VyZmFjZSAvIHdhdGVyIC8gYWRtaW4gbGluZXMpIGZyb20gYSBtYXAgc3R5bGUgYW5kXG4gKiByZXR1cm4gYW4gdXBkYXRlZCBtYXBTdGF0ZSB3aXRoIHRob3NlIGNvbG9ycyB3cml0dGVuIGludG8gYGdsb2JlLmNvbmZpZ2AuIFVzZWQgYm90aFxuICogd2hlbiB0aGUgYmFzZSBtYXAgc3R5bGUgY2hhbmdlcyBhbmQgd2hlbiBlbnRlcmluZyBnbG9iZSBtb2RlLCBzbyB0aGUgZ2xvYmUgYWx3YXlzXG4gKiByZWZsZWN0cyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGJhc2VtYXAgaW5zdGVhZCBvZiB0aGUgc3RhdGljIERFRkFVTFRfR0xPQkVfQ09ORklHLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3luY0dsb2JlQ29uZmlnQ29sb3JzVG9TdHlsZShcbiAgbWFwU3RhdGU6IE1hcFN0YXRlLFxuICBtYXBTdHlsZTogTWFwU3R5bGUsXG4gIHN0eWxlVHlwZTogc3RyaW5nXG4pOiBNYXBTdGF0ZSB7XG4gIGlmICghbWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWQpIHtcbiAgICByZXR1cm4gbWFwU3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0U3R5bGVPYmogPSBtYXBTdHlsZS5tYXBTdHlsZXNbc3R5bGVUeXBlXTtcbiAgY29uc3QgbmV4dEdsb2JlQ29uZmlnID0gey4uLm1hcFN0YXRlLmdsb2JlLmNvbmZpZ307XG5cbiAgaWYgKHN0eWxlVHlwZSA9PT0gTk9fTUFQX0lEKSB7XG4gICAgbmV4dEdsb2JlQ29uZmlnLmJhc2VtYXAgPSBmYWxzZTtcbiAgICBuZXh0R2xvYmVDb25maWcubGFiZWxzID0gZmFsc2U7XG4gICAgbmV4dEdsb2JlQ29uZmlnLmFkbWluTGluZXMgPSBmYWxzZTtcbiAgICBuZXh0R2xvYmVDb25maWcud2F0ZXIgPSBmYWxzZTtcbiAgICBuZXh0R2xvYmVDb25maWcuc3VyZmFjZUNvbG9yID0gREVGQVVMVF9CQVNFTUFQX0NPTE9SLmJhY2tncm91bmRGaWxsQ29sb3I7XG4gICAgbmV4dEdsb2JlQ29uZmlnLndhdGVyQ29sb3IgPSBERUZBVUxUX0JBU0VNQVBfQ09MT1IuYmFzZW1hcFdhdGVyRmlsbENvbG9yO1xuICAgIG5leHRHbG9iZUNvbmZpZy5hZG1pbkxpbmVzQ29sb3IgPSBERUZBVUxUX0JBU0VNQVBfQ09MT1IuYmFzZW1hcEFkbWluTGluZUNvbG9yO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJhc2VtYXBDb2xvcnMgPSBuZXh0U3R5bGVPYmpcbiAgICAgID8gZ2V0QmFzZW1hcENvbG9yc0ZvclN0eWxlKHN0eWxlVHlwZSwge1xuICAgICAgICAgIHN0eWxlOiBuZXh0U3R5bGVPYmouc3R5bGUsXG4gICAgICAgICAgbGF5ZXJHcm91cHM6IG5leHRTdHlsZU9iai5sYXllckdyb3Vwc1xuICAgICAgICB9KVxuICAgICAgOiAvLyBTdHlsZSBvYmplY3Qgbm90IHlldCBsb2FkZWQgLSB1c2Uga25vd24gcHJlc2V0cyBieSBzdHlsZSB0eXBlXG4gICAgICAgIGdldEJhc2VtYXBDb2xvcnNGb3JTdHlsZShzdHlsZVR5cGUpO1xuICAgIG5leHRHbG9iZUNvbmZpZy5zdXJmYWNlQ29sb3IgPSBiYXNlbWFwQ29sb3JzLmJhY2tncm91bmRGaWxsQ29sb3I7XG4gICAgbmV4dEdsb2JlQ29uZmlnLndhdGVyQ29sb3IgPSBiYXNlbWFwQ29sb3JzLmJhc2VtYXBXYXRlckZpbGxDb2xvcjtcbiAgICBuZXh0R2xvYmVDb25maWcuYWRtaW5MaW5lc0NvbG9yID0gYmFzZW1hcENvbG9ycy5iYXNlbWFwQWRtaW5MaW5lQ29sb3I7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLm1hcFN0YXRlLFxuICAgIGdsb2JlOiB7XG4gICAgICAuLi5tYXBTdGF0ZS5nbG9iZSxcbiAgICAgIGNvbmZpZzogbmV4dEdsb2JlQ29uZmlnXG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFVwZGF0ZXIgdGhhdCBzd2l0Y2hlcyB0aGUgbWFwIHZpZXcgbW9kZSAoMkQgLyAzRCAvIEdsb2JlKS4gUnVucyB0aGUgYmFzZSBtYXAtc3RhdGVcbiAqIHVwZGF0ZXIgYW5kLCB3aGVuIGVudGVyaW5nIGdsb2JlIG1vZGUsIHN5bmNzIHRoZSBnbG9iZSBiYXNlbWFwIGNvbG9ycyB0byB0aGVcbiAqIGN1cnJlbnRseSBzZWxlY3RlZCBtYXAgc3R5bGUgc28gdGhlIGdsb2JlIGRvZXNuJ3Qgc2hvdyBzdGFsZSBkZWZhdWx0IGNvbG9ycy5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbWJpbmVkU2V0TWFwVmlld01vZGVVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuU2V0TWFwVmlld01vZGVVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgbGV0IG1hcFN0YXRlID0gc2V0TWFwVmlld01vZGVVcGRhdGVyKHN0YXRlLm1hcFN0YXRlLCBhY3Rpb24pO1xuXG4gIGlmIChtYXBTdGF0ZS5nbG9iZT8uZW5hYmxlZCkge1xuICAgIG1hcFN0YXRlID0gc3luY0dsb2JlQ29uZmlnQ29sb3JzVG9TdHlsZShtYXBTdGF0ZSwgc3RhdGUubWFwU3R5bGUsIHN0YXRlLm1hcFN0eWxlLnN0eWxlVHlwZSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIG1hcFN0YXRlXG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZXIgdGhhdCBjaGFuZ2VzIHRoZSBsYXllciB0eXBlIGJ5IGNhbGxpbmcgYGxheWVyVHlwZUNoYW5nZVVwZGF0ZXJgIG9uIHZpc1N0YXRlLlxuICogSW4gYWRkaXRpb24gdG8gdGhhdCwgaWYgdGhlIG5ldyBsYXllciB0eXBlIGhhcyB0aGUgYGRhcmtCYXNlTWFwRW5hYmxlZGAgY29uZmlnXG4gKiBzZXR0aW5nLCB3ZSBhZGp1c3QgaXQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBjb2xvck1vZGUgb2YgdGhlIGJhc2UgbWFwLnNcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbWJpbmVkTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGxldCB7dmlzU3RhdGV9ID0gc3RhdGU7XG4gIGNvbnN0IG9sZExheWVySW5kZXggPSB2aXNTdGF0ZS5sYXllcnMuZmluZEluZGV4KGxheWVyID0+IGxheWVyID09PSBhY3Rpb24ub2xkTGF5ZXIpO1xuICB2aXNTdGF0ZSA9IGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIodmlzU3RhdGUsIGFjdGlvbik7XG4gIGNvbnN0IG5ld0xheWVyID0gdmlzU3RhdGUubGF5ZXJzW29sZExheWVySW5kZXhdO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5ld0xheWVyPy52aXNDb25maWdTZXR0aW5ncywgJ2RhcmtCYXNlTWFwRW5hYmxlZCcpKSB7XG4gICAgY29uc3Qge21hcFN0eWxlfSA9IHN0YXRlO1xuICAgIGNvbnN0IHtjb2xvck1vZGV9ID0gbWFwU3R5bGUubWFwU3R5bGVzW21hcFN0eWxlLnN0eWxlVHlwZV07XG4gICAgY29uc3Qge2RhcmtCYXNlTWFwRW5hYmxlZH0gPSBuZXdMYXllci5jb25maWcudmlzQ29uZmlnO1xuICAgIHN3aXRjaCAoY29sb3JNb2RlKSB7XG4gICAgICBjYXNlIEJBU0VfTUFQX0NPTE9SX01PREVTLkRBUks6XG4gICAgICAgIGlmICghZGFya0Jhc2VNYXBFbmFibGVkKSB7XG4gICAgICAgICAgdmlzU3RhdGUgPSB1cGRhdGVEYXJrQmFzZU1hcExheWVycyh0cnVlLCBuZXdMYXllci5pZCkodmlzU3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBCQVNFX01BUF9DT0xPUl9NT0RFUy5MSUdIVDpcbiAgICAgICAgaWYgKGRhcmtCYXNlTWFwRW5hYmxlZCkge1xuICAgICAgICAgIHZpc1N0YXRlID0gdXBkYXRlRGFya0Jhc2VNYXBMYXllcnMoZmFsc2UsIG5ld0xheWVyLmlkKSh2aXNTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHZpc1N0YXRlXG4gIH07XG59O1xuXG4vKipcbiAqIE1ha2UgbWFwTGVnZW5kIGFjdGl2ZSB3aGVuIHRvZ2dsZVNwbGl0TWFwIGFjdGlvbiBpcyBjYWxsZWRcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgdmlzU3RhdGU6IHZpc1N0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyKHN0YXRlLnZpc1N0YXRlLCBhY3Rpb24pLFxuICAgIHVpU3RhdGU6IHVpU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIoc3RhdGUudWlTdGF0ZSksXG4gICAgbWFwU3RhdGU6IG1hcFN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyKHN0YXRlLm1hcFN0YXRlKVxuICB9O1xuXG4gIGNvbnN0IGlzU3BsaXQgPSBuZXdTdGF0ZS52aXNTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoICE9PSAwO1xuICBjb25zdCBpc0xlZ2VuZEFjdGl2ZSA9IG5ld1N0YXRlLnVpU3RhdGUubWFwQ29udHJvbHM/Lm1hcExlZ2VuZD8uYWN0aXZlO1xuICBpZiAoaXNTcGxpdCAmJiAhaXNMZWdlbmRBY3RpdmUpIHtcbiAgICBuZXdTdGF0ZS51aVN0YXRlID0gdG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIobmV3U3RhdGUudWlTdGF0ZSwge1xuICAgICAgcGF5bG9hZDoge3BhbmVsSWQ6ICdtYXBMZWdlbmQnLCBpbmRleDogYWN0aW9uLnBheWxvYWR9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFNldCBtYXAgc3BsaXQgbW9kZSB1cGRhdGVyIC0gY29vcmRpbmF0ZXMgc3RhdGUgY2hhbmdlcyBhY3Jvc3MgdmlzU3RhdGUsIG1hcFN0YXRlLCBhbmQgdWlTdGF0ZVxuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwU3BsaXRNb2RlVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlNldE1hcFNwbGl0TW9kZVVwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBjb25zdCB7bWFwU3BsaXRNb2RlfSA9IGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBwcmV2TW9kZSA9IHN0YXRlLm1hcFN0YXRlLm1hcFNwbGl0TW9kZTtcblxuICBpZiAobWFwU3BsaXRNb2RlID09PSBwcmV2TW9kZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld01hcFN0YXRlID0gbWFwU3RhdGVTZXRNYXBTcGxpdE1vZGVVcGRhdGVyKHN0YXRlLm1hcFN0YXRlLCBhY3Rpb24pO1xuXG4gIGxldCBuZXdWaXNTdGF0ZSA9IHsuLi5zdGF0ZS52aXNTdGF0ZX07XG5cbiAgc3dpdGNoIChtYXBTcGxpdE1vZGUpIHtcbiAgICBjYXNlIE1hcFNwbGl0TW9kZS5TSU5HTEVfTUFQOlxuICAgICAgbmV3VmlzU3RhdGUgPSB7XG4gICAgICAgIC4uLm5ld1Zpc1N0YXRlLFxuICAgICAgICBzcGxpdE1hcHM6IFtdXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNYXBTcGxpdE1vZGUuRFVBTF9NQVA6XG4gICAgY2FzZSBNYXBTcGxpdE1vZGUuU1dJUEVfQ09NUEFSRTpcbiAgICAgIGlmIChwcmV2TW9kZSA9PT0gTWFwU3BsaXRNb2RlLlNJTkdMRV9NQVApIHtcbiAgICAgICAgbmV3VmlzU3RhdGUgPSB7XG4gICAgICAgICAgLi4ubmV3VmlzU3RhdGUsXG4gICAgICAgICAgc3BsaXRNYXBzOiBjb21wdXRlU3BsaXRNYXBMYXllcnMobmV3VmlzU3RhdGUubGF5ZXJzLCB7XG4gICAgICAgICAgICBkdXBsaWNhdGU6IG1hcFNwbGl0TW9kZSA9PT0gTWFwU3BsaXRNb2RlLlNXSVBFX0NPTVBBUkVcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgbGV0IG5ld1VpU3RhdGUgPSB1aVN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyKHN0YXRlLnVpU3RhdGUpO1xuXG4gIGNvbnN0IGlzU3BsaXQgPSBuZXdWaXNTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoICE9PSAwO1xuICBjb25zdCBpc0xlZ2VuZEFjdGl2ZSA9IG5ld1VpU3RhdGUubWFwQ29udHJvbHM/Lm1hcExlZ2VuZD8uYWN0aXZlO1xuICBpZiAoaXNTcGxpdCAmJiAhaXNMZWdlbmRBY3RpdmUpIHtcbiAgICBuZXdVaVN0YXRlID0gdG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIobmV3VWlTdGF0ZSwge1xuICAgICAgcGF5bG9hZDoge3BhbmVsSWQ6ICdtYXBMZWdlbmQnLCBpbmRleDogMH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbWFwU3RhdGU6IG5ld01hcFN0YXRlLFxuICAgIHZpc1N0YXRlOiBuZXdWaXNTdGF0ZSxcbiAgICB1aVN0YXRlOiBuZXdVaVN0YXRlXG4gIH07XG59O1xuXG5jb25zdCBkZWZhdWx0UmVwbGFjZURhdGFUb01hcE9wdGlvbnMgPSB7XG4gIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZSxcbiAgY2VudGVyTWFwOiB0cnVlLFxuICBhdXRvQ3JlYXRlTGF5ZXJzOiBmYWxzZVxufTtcblxuLyoqXG4gKiBVcGRhdGVyIHJlcGxhY2UgYSBkYXRhc2V0IGluIHN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCByZXBsYWNlRGF0YUluTWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIHtwYXlsb2FkfToge3BheWxvYWQ6IFJlcGxhY2VEYXRhSW5NYXBQYXlsb2FkfVxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGNvbnN0IHtkYXRhc2V0VG9SZXBsYWNlSWQsIGRhdGFzZXRUb1VzZSwgb3B0aW9ucyA9IHt9fSA9IHBheWxvYWQ7XG4gIGNvbnN0IGFkZERhdGFUb01hcE9wdGlvbnMgPSB7Li4uZGVmYXVsdFJlcGxhY2VEYXRhVG9NYXBPcHRpb25zLCAuLi5vcHRpb25zfTtcblxuICAvLyBjaGVjayBpZiBkYXRhc2V0IGlzIHRoZXJlXG4gIGlmICghc3RhdGUudmlzU3RhdGUuZGF0YXNldHNbZGF0YXNldFRvUmVwbGFjZUlkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBkYXRhc2V0VG9Vc2UgaXMgUHJvdG9EYXRhc2V0XG4gIGNvbnN0IGRhdGFJZFRvVXNlID0gZGF0YXNldFRvVXNlLmluZm8uaWQ7XG4gIGlmICghZGF0YUlkVG9Vc2UpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gcmVtb3ZlIGRhdGFzZXQgYW5kIHB1dCBkZXBlbmRlbmNpZXMgaW4gdG9CZU1lcmdlZFxuICBjb25zdCBwcmVwYXJlZFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIHZpc1N0YXRlOiBwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZShzdGF0ZS52aXNTdGF0ZSwgZGF0YXNldFRvUmVwbGFjZUlkLCBkYXRhSWRUb1VzZSlcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBhZGREYXRhVG9NYXBVcGRhdGVyKFxuICAgIHByZXBhcmVkU3RhdGUsXG4gICAgcGF5bG9hZF8oe1xuICAgICAgZGF0YXNldHM6IGRhdGFzZXRUb1VzZSxcbiAgICAgIC8vIHNob3VsZCB6b29tIHRvIG5ldyBkYXRhc2V0XG4gICAgICBvcHRpb25zOiBhZGREYXRhVG9NYXBPcHRpb25zXG4gICAgfSlcbiAgKTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFDQTs7QUFFQSxTQUNFQSxrQkFBa0IsRUFDbEJDLHVCQUF1QixJQUFJQyw4QkFBOEIsRUFDekRDLHVCQUF1QixFQUN2QkMscUJBQXFCLElBQUlDLDRCQUE0QixFQUNyREMsdUJBQXVCLElBQUlDLDhCQUE4QixRQUNwRCxxQkFBcUI7QUFDNUIsU0FDRUMsb0JBQW9CLElBQUlDLDRCQUE0QixFQUNwREMsaUJBQWlCLEVBQ2pCQyxzQkFBc0IsRUFDdEJQLHFCQUFxQixJQUFJUSw2QkFBNkIsRUFDdERDLDZCQUE2QixRQUN4QixzQkFBc0I7QUFDN0IsU0FDRVAsdUJBQXVCLElBQUlRLHFCQUFxQixFQUNoRFYscUJBQXFCLElBQUlXLDZCQUE2QixFQUN0REMsc0JBQXNCLElBQUlDLDhCQUE4QixFQUN4REMscUJBQXFCLFFBQ2hCLHNCQUFzQjtB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
|
|
484
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0b2dnbGVNb2RhbFVwZGF0ZXIiLCJsb2FkRmlsZXNTdWNjZXNzVXBkYXRlciIsInVpU3RhdGVMb2FkRmlsZXNTdWNjZXNzVXBkYXRlciIsInRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyIiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwidWlTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsInJlY2VpdmVNYXBDb25maWdVcGRhdGVyIiwidWlTdGF0ZVJlY2VpdmVNYXBDb25maWdVcGRhdGVyIiwidXBkYXRlVmlzRGF0YVVwZGF0ZXIiLCJ2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwic2V0TWFwSW5mb1VwZGF0ZXIiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwidmlzU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZSIsInN0YXRlTWFwQ29uZmlnVXBkYXRlciIsIm1hcFN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwic2V0TWFwU3BsaXRNb2RlVXBkYXRlciIsIm1hcFN0YXRlU2V0TWFwU3BsaXRNb2RlVXBkYXRlciIsInNldE1hcFZpZXdNb2RlVXBkYXRlciIsIm1hcFN0eWxlQ2hhbmdlVXBkYXRlciIsInN0eWxlTWFwQ29uZmlnVXBkYXRlciIsImZpbGVzVG9EYXRhUGF5bG9hZCIsInBheWxvYWRfIiwiYXBwbHlfIiwid2l0aF8iLCJpZl8iLCJjb21wb3NlXyIsIm1lcmdlXyIsInBpY2tfIiwiaXNQbGFpbk9iamVjdCIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImZpbmRNYXBCb3VuZHMiLCJCQVNFX01BUF9DT0xPUl9NT0RFUyIsIk9WRVJMQVlfQkxFTkRJTkdTIiwiTk9fTUFQX0lEIiwiTWFwU3BsaXRNb2RlIiwiZ2V0QmFzZW1hcENvbG9yc0ZvclN0eWxlIiwiREVGQVVMVF9CQVNFTUFQX0NPTE9SIiwiY29tYmluZWRVcGRhdGVycyIsImlzVmFsaWRDb25maWciLCJjb25maWciLCJ2ZXJzaW9uIiwiZGVmYXVsdEFkZERhdGFUb01hcE9wdGlvbnMiLCJjZW50ZXJNYXAiLCJrZWVwRXhpc3RpbmdDb25maWciLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiYXV0b0NyZWF0ZVRvb2x0aXBzIiwiYWRkRGF0YVRvTWFwVXBkYXRlciIsInN0YXRlIiwiX3JlZiIsIl9kYXRhc2V0cyQiLCJfZGF0YXNldHMkMiIsIl9kYXRhc2V0cyQzIiwicGF5bG9hZCIsImRhdGFzZXRzIiwiaW5mbyIsIm9wdGlvbnMiLCJfb2JqZWN0U3ByZWFkIiwiaXNQcm9ncmVzc2l2ZUxvYWRpbmciLCJBcnJheSIsImlzQXJyYXkiLCJmb3JtYXQiLCJpZCIsInZpc1N0YXRlIiwicGFyc2VkQ29uZmlnIiwic2NoZW1hIiwicGFyc2VTYXZlZENvbmZpZyIsIm9sZExheWVycyIsImxheWVycyIsImZpbHRlck5ld2x5QWRkZWRMYXllcnMiLCJmaWx0ZXIiLCJubCIsImZpbmQiLCJvbCIsImZpbmRNYXBCb3VuZHNJZkNlbnRlcmVkIiwiYm91bmRzIiwidW5kZWZpbmVkIiwiQm9vbGVhbiIsIl9yZWYyIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwicmVhZE9ubHkiLCJhY3Rpb24iLCJwYXlsb2FkcyIsInJlc3VsdCIsIm5leHRTdGF0ZSIsImZpbGVMb2FkaW5nIiwiZmlsZUxvYWRpbmdQcm9ncmVzcyIsInN0YXRlV2l0aERhdGEiLCJtYXAiLCJwIiwiYWRkRGF0YVRvTWFwQ29tcG9zZWQiLCJ1cGRhdGVPdmVybGF5QmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJub3JtYWwiLCJ2YWx1ZSIsInVwZGF0ZURhcmtCYXNlTWFwTGF5ZXJzIiwiZGFya0Jhc2VNYXBFbmFibGVkIiwibGF5ZXJJZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImxheWVyIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJ2aXNDb25maWciLCJ1cGRhdGVMYXllckNvbmZpZyIsImNvbWJpbmVkTWFwU3R5bGVDaGFuZ2VVcGRhdGVyIiwiX21hcFN0YXRlJGdsb2JlIiwibWFwU3R5bGUiLCJnZXRDb2xvck1vZGUiLCJrZXkiLCJfbWFwU3R5bGUkbWFwU3R5bGVzJGsiLCJtYXBTdHlsZXMiLCJjb2xvck1vZGUiLCJwcmV2Q29sb3JNb2RlIiwic3R5bGVUeXBlIiwibmV4dENvbG9yTW9kZSIsIm1hcFN0YXRlIiwiREFSSyIsInNjcmVlbiIsIkxJR0hUIiwiZGFya2VuIiwiZ2xvYmUiLCJlbmFibGVkIiwiYmFzZW1hcCIsImxhYmVscyIsImFkbWluTGluZXMiLCJ3YXRlciIsInN5bmNHbG9iZUNvbmZpZ0NvbG9yc1RvU3R5bGUiLCJfbWFwU3RhdGUkZ2xvYmUyIiwibmV4dFN0eWxlT2JqIiwibmV4dEdsb2JlQ29uZmlnIiwic3VyZmFjZUNvbG9yIiwiYmFja2dyb3VuZEZpbGxDb2xvciIsIndhdGVyQ29sb3IiLCJiYXNlbWFwV2F0ZXJGaWxsQ29sb3IiLCJhZG1pbkxpbmVzQ29sb3IiLCJiYXNlbWFwQWRtaW5MaW5lQ29sb3IiLCJiYXNlbWFwQ29sb3JzIiwic3R5bGUiLCJsYXllckdyb3VwcyIsImNvbWJpbmVkU2V0TWFwVmlld01vZGVVcGRhdGVyIiwiX21hcFN0YXRlJGdsb2JlMyIsImNvbWJpbmVkTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJvbGRMYXllciIsIm5ld0xheWVyIiwiX25ld1N0YXRlJHVpU3RhdGUkbWFwIiwibmV3U3RhdGUiLCJ1aVN0YXRlIiwiaXNTcGxpdCIsInNwbGl0TWFwcyIsImlzTGVnZW5kQWN0aXZlIiwibWFwQ29udHJvbHMiLCJtYXBMZWdlbmQiLCJhY3RpdmUiLCJwYW5lbElkIiwiaW5kZXgiLCJfbmV3VWlTdGF0ZSRtYXBDb250cm8iLCJtYXBTcGxpdE1vZGUiLCJwcmV2TW9kZSIsIm5ld01hcFN0YXRlIiwibmV3VmlzU3RhdGUiLCJTSU5HTEVfTUFQIiwiRFVBTF9NQVAiLCJTV0lQRV9DT01QQVJFIiwiZHVwbGljYXRlIiwibmV3VWlTdGF0ZSIsImRlZmF1bHRSZXBsYWNlRGF0YVRvTWFwT3B0aW9ucyIsInJlcGxhY2VEYXRhSW5NYXBVcGRhdGVyIiwiX3JlZjMiLCJkYXRhc2V0VG9SZXBsYWNlSWQiLCJkYXRhc2V0VG9Vc2UiLCJfcGF5bG9hZCRvcHRpb25zIiwiYWRkRGF0YVRvTWFwT3B0aW9ucyIsImRhdGFJZFRvVXNlIiwicHJlcGFyZWRTdGF0ZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21iaW5lZC11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge1xuICB0b2dnbGVNb2RhbFVwZGF0ZXIsXG4gIGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyIGFzIHVpU3RhdGVMb2FkRmlsZXNTdWNjZXNzVXBkYXRlcixcbiAgdG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIsXG4gIHRvZ2dsZVNwbGl0TWFwVXBkYXRlciBhcyB1aVN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyLFxuICByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciBhcyB1aVN0YXRlUmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXJcbn0gZnJvbSAnLi91aS1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge1xuICB1cGRhdGVWaXNEYXRhVXBkYXRlciBhcyB2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyLFxuICBzZXRNYXBJbmZvVXBkYXRlcixcbiAgbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcixcbiAgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyIGFzIHZpc1N0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyLFxuICBwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZVxufSBmcm9tICcuL3Zpcy1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge1xuICByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciBhcyBzdGF0ZU1hcENvbmZpZ1VwZGF0ZXIsXG4gIHRvZ2dsZVNwbGl0TWFwVXBkYXRlciBhcyBtYXBTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlcixcbiAgc2V0TWFwU3BsaXRNb2RlVXBkYXRlciBhcyBtYXBTdGF0ZVNldE1hcFNwbGl0TW9kZVVwZGF0ZXIsXG4gIHNldE1hcFZpZXdNb2RlVXBkYXRlclxufSBmcm9tICcuL21hcC1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge1xuICBtYXBTdHlsZUNoYW5nZVVwZGF0ZXIsXG4gIHJlY2VpdmVNYXBDb25maWdVcGRhdGVyIGFzIHN0eWxlTWFwQ29uZmlnVXBkYXRlclxufSBmcm9tICcuL21hcC1zdHlsZS11cGRhdGVycyc7XG5pbXBvcnQge2ZpbGVzVG9EYXRhUGF5bG9hZH0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcbmltcG9ydCB7cGF5bG9hZF8sIGFwcGx5Xywgd2l0aF8sIGlmXywgY29tcG9zZV8sIG1lcmdlXywgcGlja199IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge01hcFN0YXRlLCBVaVN0YXRlLCBBZGREYXRhVG9NYXBQYXlsb2FkLCBQYXJzZWRDb25maWd9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtNYXBTdHlsZX0gZnJvbSAnLi9tYXAtc3R5bGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtQcm92aWRlclN0YXRlfSBmcm9tICcuL3Byb3ZpZGVyLXN0YXRlLXVwZGF0ZXJzJztcbmltcG9ydCB7XG4gIGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyQWN0aW9uLFxuICBNYXBTdHlsZUNoYW5nZVVwZGF0ZXJBY3Rpb24sXG4gIExheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb24sXG4gIFRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvbixcbiAgUmVwbGFjZURhdGFJbk1hcFBheWxvYWQsXG4gIE1hcFN0YXRlQWN0aW9uc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7TGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7aXNQbGFpbk9iamVjdCwgY29tcHV0ZVNwbGl0TWFwTGF5ZXJzfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7ZmluZE1hcEJvdW5kc30gZnJvbSAnLi9kYXRhLXV0aWxzJztcbmltcG9ydCB7XG4gIEJBU0VfTUFQX0NPTE9SX01PREVTLFxuICBPVkVSTEFZX0JMRU5ESU5HUyxcbiAgTk9fTUFQX0lELFxuICBNYXBTcGxpdE1vZGVcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtnZXRCYXNlbWFwQ29sb3JzRm9yU3R5bGUsIERFRkFVTFRfQkFTRU1BUF9DT0xPUn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcblxuZXhwb3J0IHR5cGUgS2VwbGVyR2xTdGF0ZSA9IHtcbiAgdmlzU3RhdGU6IFZpc1N0YXRlO1xuICBtYXBTdGF0ZTogTWFwU3RhdGU7XG4gIG1hcFN0eWxlOiBNYXBTdHlsZTtcbiAgdWlTdGF0ZTogVWlTdGF0ZTtcbiAgcHJvdmlkZXJTdGF0ZTogUHJvdmlkZXJTdGF0ZTtcbn07XG5cbi8vIGNvbXBvc2UgYWN0aW9uIHRvIGFwcGx5IHJlc3VsdCBtdWx0aXBsZSByZWR1Y2Vycywgd2l0aCB0aGUgb3V0cHV0IG9mIG9uZVxuXG4vKipcbiAqIFNvbWUgYWN0aW9ucyB3aWxsIGFmZmVjdCB0aGUgZW50aXJlIGtlcGxlci5sZyBpbnN0YW5jZSBzdGF0ZS5cbiAqIFRoZSB1cGRhdGVycyBmb3IgdGhlc2UgYWN0aW9ucyBpcyBleHBvcnRlZCBhcyBgY29tYmluZWRVcGRhdGVyc2AuIFRoZXNlIHVwZGF0ZXIgdGFrZSB0aGUgZW50aXJlIGluc3RhbmNlIHN0YXRlXG4gKiBhcyB0aGUgZmlyc3QgYXJndW1lbnQuIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyLCB7Y29tYmluZWRVcGRhdGVyc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiAvLyBSb290IFJlZHVjZXJcbiAqIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAqICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICogIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogY29uc3QgY29tcG9zZWRSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAqICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gKiAgICAvLyBhZGQgZGF0YSB0byBtYXAgYWZ0ZXIgcmVjZWl2aW5nIGRhdGEgZnJvbSByZW1vdGUgc291cmNlc1xuICogICAgY2FzZSAnTE9BRF9SRU1PVEVfUkVTT1VSQ0VfU1VDQ0VTUyc6XG4gKiAgICAgIHJldHVybiB7XG4gKiAgICAgICAgLi4uc3RhdGUsXG4gKiAgICAgICAga2VwbGVyR2w6IHtcbiAqICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLFxuICogICAgICAgICAgLy8gcGFzcyBpbiBrZXBsZXIuZ2wgaW5zdGFuY2Ugc3RhdGUgdG8gY29tYmluZWRVcGRhdGVyc1xuICogICAgICAgICAgbWFwOiAgY29tYmluZWRVcGRhdGVycy5hZGREYXRhVG9NYXBVcGRhdGVyKFxuICogICAgICAgICAgIHN0YXRlLmtlcGxlckdsLm1hcCxcbiAqICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICBwYXlsb2FkOiB7XG4gKiAgICAgICAgICAgICAgIGRhdGFzZXRzOiBhY3Rpb24uZGF0YXNldHMsXG4gKiAgICAgICAgICAgICAgIG9wdGlvbnM6IHtyZWFkT25seTogdHJ1ZX0sXG4gKiAgICAgICAgICAgICAgIGNvbmZpZzogYWN0aW9uLmNvbmZpZ1xuICogICAgICAgICAgICAgIH1cbiAqICAgICAgICAgICAgfVxuICogICAgICAgICAgKVxuICogICAgICAgIH1cbiAqICAgICAgfTtcbiAqICB9XG4gKiAgcmV0dXJuIHJlZHVjZXJzKHN0YXRlLCBhY3Rpb24pO1xuICogfTtcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBjb21wb3NlZFJlZHVjZXI7XG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCBjb21iaW5lZFVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBpc1ZhbGlkQ29uZmlnID0gY29uZmlnID0+XG4gIGlzUGxhaW5PYmplY3QoY29uZmlnKSAmJiBpc1BsYWluT2JqZWN0KGNvbmZpZy5jb25maWcpICYmIGNvbmZpZy52ZXJzaW9uO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEFkZERhdGFUb01hcE9wdGlvbnMgPSB7XG4gIGNlbnRlck1hcDogdHJ1ZSxcbiAga2VlcEV4aXN0aW5nQ29uZmlnOiBmYWxzZSxcbiAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZSxcbiAgYXV0b0NyZWF0ZVRvb2x0aXBzOiB0cnVlXG59O1xuXG4vKipcbiAqIENvbWJpbmUgZGF0YSBhbmQgZnVsbCBjb25maWd1cmF0aW9uIHVwZGF0ZSBpbiBhIHNpbmdsZSBhY3Rpb25cbiAqXG4gKiBAbWVtYmVyb2YgY29tYmluZWRVcGRhdGVyc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIGtlcGxlci5nbCBpbnN0YW5jZSBzdGF0ZSwgY29udGFpbmluZyBhbGwgc3VicmVkdWNlciBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbi5wYXlsb2FkIGB7ZGF0YXNldHMsIG9wdGlvbnMsIGNvbmZpZ31gXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQuZGF0YXNldHMgLSAqKipyZXF1aXJlZCoqIGRhdGFzZXRzIGNhbiBiZSBhIGRhdGFzZXQgb3IgYW4gYXJyYXkgb2YgZGF0YXNldHNcbiAqIEVhY2ggZGF0YXNldCBvYmplY3QgbmVlZHMgdG8gaGF2ZSBgaW5mb2AgYW5kIGBkYXRhYCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBbYWN0aW9uLnBheWxvYWQub3B0aW9uc10gb3B0aW9uIG9iamVjdCBge2NlbnRlck1hcDogdHJ1ZSwgcGFkZGluZzoge2xlZnQ6IDMwMH19YFxuICogQHBhcmFtIFthY3Rpb24ucGF5bG9hZC5jb25maWddIG1hcCBjb25maWdcbiAqIEBwYXJhbSBbYWN0aW9uLnBheWxvYWQuaW5mb10gbWFwIGluZm8gY29udGFpbnMgdGl0bGUgYW5kIGRlc2NyaXB0aW9uXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEYXRhc2V0XG4gKiBAcHJvcGVydHkgaW5mbyAtaW5mbyBvZiBhIGRhdGFzZXRcbiAqIEBwcm9wZXJ0eSBpbmZvLmlkIC0gaWQgb2YgdGhpcyBkYXRhc2V0LiBJZiBjb25maWcgaXMgZGVmaW5lZCwgYGlkYCBzaG91bGQgbWF0Y2hlcyB0aGUgYGRhdGFJZGAgaW4gY29uZmlnLlxuICogQHByb3BlcnR5IGluZm8ubGFiZWwgLSBBIGRpc3BsYXkgbmFtZSBvZiB0aGlzIGRhdGFzZXRcbiAqIEBwcm9wZXJ0eSBkYXRhIC0gKioqcmVxdWlyZWQqKiBUaGUgZGF0YSBvYmplY3QsIGluIGEgdGFidWxhciBmb3JtYXQgd2l0aCAyIHByb3BlcnRpZXMgYGZpZWxkc2AgYW5kIGByb3dzYFxuICogQHByb3BlcnR5IGRhdGEuZmllbGRzIC0gKioqcmVxdWlyZWQqKiBBcnJheSBvZiBmaWVsZHMsXG4gKiBAcHJvcGVydHkgZGF0YS5maWVsZHMubmFtZSAtICoqKnJlcXVpcmVkKiogTmFtZSBvZiB0aGUgZmllbGQsXG4gKiBAcHJvcGVydHkgZGF0YS5yb3dzIC0gKioqcmVxdWlyZWQqKiBBcnJheSBvZiByb3dzLCBpbiBhIHRhYnVsYXIgZm9ybWF0IHdpdGggYGZpZWxkc2AgYW5kIGByb3dzYFxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZERhdGFUb01hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICB7cGF5bG9hZH06IHtwYXlsb2FkOiBBZGREYXRhVG9NYXBQYXlsb2FkfVxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGNvbnN0IHtkYXRhc2V0cywgY29uZmlnLCBpbmZvfSA9IHBheWxvYWQ7XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAuLi5kZWZhdWx0QWRkRGF0YVRvTWFwT3B0aW9ucyxcbiAgICAuLi5wYXlsb2FkLm9wdGlvbnNcbiAgfTtcblxuICAvLyBjaGVjayBpZiBwcm9ncmVzc2l2ZSBsb2FkaW5nIGRhdGFzZXQgYnkgYmF0Y2hlcywgYW5kIHVwZGF0ZSB2aXNTdGF0ZSBkaXJlY3RseVxuICBjb25zdCBpc1Byb2dyZXNzaXZlTG9hZGluZyA9XG4gICAgQXJyYXkuaXNBcnJheShkYXRhc2V0cykgJiZcbiAgICBkYXRhc2V0c1swXT8uaW5mby5mb3JtYXQgPT09ICdhcnJvdycgJiZcbiAgICBkYXRhc2V0c1swXT8uaW5mby5pZCAmJlxuICAgIGRhdGFzZXRzWzBdPy5pbmZvLmlkIGluIHN0YXRlLnZpc1N0YXRlLmRhdGFzZXRzO1xuICBpZiAoaXNQcm9ncmVzc2l2ZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gY29tcG9zZV88S2VwbGVyR2xTdGF0ZT4oW1xuICAgICAgcGlja18oJ3Zpc1N0YXRlJykoXG4gICAgICAgIGFwcGx5XzxWaXNTdGF0ZSwgYW55Pih2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyLCB7XG4gICAgICAgICAgZGF0YXNldHMsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICBjb25maWdcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICBdKShzdGF0ZSk7XG4gIH1cblxuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIGxldCBwYXJzZWRDb25maWc6IFBhcnNlZENvbmZpZyA9IGNvbmZpZztcblxuICBpZiAoaXNWYWxpZENvbmZpZyhjb25maWcpKSB7XG4gICAgLy8gaWYgcGFzc2VkIGluIHNhdmVkIGNvbmZpZ1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBwYXJzZWRDb25maWcgPSBzdGF0ZS52aXNTdGF0ZS5zY2hlbWEucGFyc2VTYXZlZENvbmZpZyhjb25maWcpO1xuICB9XG4gIGNvbnN0IG9sZExheWVycyA9IHN0YXRlLnZpc1N0YXRlLmxheWVycztcbiAgY29uc3QgZmlsdGVyTmV3bHlBZGRlZExheWVycyA9IChsYXllcnM6IExheWVyW10pID0+XG4gICAgbGF5ZXJzLmZpbHRlcihubCA9PiAhb2xkTGF5ZXJzLmZpbmQob2wgPT4gb2wgPT09IG5sKSk7XG5cbiAgLy8gUmV0dXJucyB1bmRlZmluZWQgaWYgbm90IGZvdW5kLCB0byBtYWtlIHR5cGVzY3JpcHQgaGFwcHlcbiAgY29uc3QgZmluZE1hcEJvdW5kc0lmQ2VudGVyZWQgPSAobGF5ZXJzOiBMYXllcltdKSA9PiB7XG4gICAgY29uc3QgYm91bmRzID0gb3B0aW9ucy5jZW50ZXJNYXAgJiYgZmluZE1hcEJvdW5kcyhsYXllcnMpO1xuICAgIHJldHVybiBib3VuZHMgPyBib3VuZHMgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgcmV0dXJuIGNvbXBvc2VfPEtlcGxlckdsU3RhdGU+KFtcbiAgICBwaWNrXygndmlzU3RhdGUnKShcbiAgICAgIC8vIHRoaXMgcGFydCBjYW4gYmUgYXN5bmNcbiAgICAgIGFwcGx5XzxWaXNTdGF0ZSwgYW55Pih2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyLCB7XG4gICAgICAgIGRhdGFzZXRzLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBjb25maWc6IHBhcnNlZENvbmZpZ1xuICAgICAgfSlcbiAgICApLFxuXG4gICAgaWZfKEJvb2xlYW4oaW5mbyksIHBpY2tfKCd2aXNTdGF0ZScpKGFwcGx5XzxWaXNTdGF0ZSwgYW55PihzZXRNYXBJbmZvVXBkYXRlciwge2luZm99KSkpLFxuICAgIC8vIE5vdGUgdGhhdCBmaXQgYm91bmRzIGhlcmUgd29uJ3QgYmUgY2FsbGVkIGluIGNhc2UgZGF0YXNldHMgYXJlIGNyZWF0ZWQgaW4gVGFza3MuXG4gICAgLy8gQSBzZXBhcmF0ZSBUYXNrIHRvIHVwZGF0ZSBib3VuZHMgaXMgY3JlYXRlZCBvbmNlIHRoZSBkYXRhc2V0cyBhcmUgcmVhZHkuXG4gICAgd2l0aF8oKHt2aXNTdGF0ZX0pID0+XG4gICAgICBwaWNrXygnbWFwU3RhdGUnKShcbiAgICAgICAgYXBwbHlfKFxuICAgICAgICAgIHN0YXRlTWFwQ29uZmlnVXBkYXRlcixcbiAgICAgICAgICBwYXlsb2FkXyh7XG4gICAgICAgICAgICBjb25maWc6IHBhcnNlZENvbmZpZyxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBib3VuZHM6IGZpbmRNYXBCb3VuZHNJZkNlbnRlcmVkKGZpbHRlck5ld2x5QWRkZWRMYXllcnModmlzU3RhdGUubGF5ZXJzKSlcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKSxcbiAgICBwaWNrXygnbWFwU3R5bGUnKShhcHBseV8oc3R5bGVNYXBDb25maWdVcGRhdGVyLCBwYXlsb2FkXyh7Y29uZmlnOiBwYXJzZWRDb25maWcsIG9wdGlvbnN9KSkpLFxuICAgIHBpY2tfKCd1aVN0YXRlJykoXG4gICAgICBhcHBseV8odWlTdGF0ZVJlY2VpdmVNYXBDb25maWdVcGRhdGVyLCBwYXlsb2FkXyh7Y29uZmlnOiBwYXJzZWRDb25maWcsIG9wdGlvbnN9KSlcbiAgICApLFxuICAgIHBpY2tfKCd1aVN0YXRlJykoYXBwbHlfKHVpU3RhdGVMb2FkRmlsZXNTdWNjZXNzVXBkYXRlciwgcGF5bG9hZF8obnVsbCkpKSxcblxuICAgIHBpY2tfKCd1aVN0YXRlJykoYXBwbHlfKHRvZ2dsZU1vZGFsVXBkYXRlciwgcGF5bG9hZF8obnVsbCkpKSxcbiAgICBwaWNrXygndWlTdGF0ZScpKFxuICAgICAgbWVyZ2VfKFxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3JlYWRPbmx5JylcbiAgICAgICAgICA/IHtyZWFkT25seTogb3B0aW9ucy5yZWFkT25seX1cbiAgICAgICAgICA6IHt9XG4gICAgICApXG4gICAgKVxuICBdKShzdGF0ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICBhY3Rpb246IGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgLy8gc3RpbGwgbW9yZSB0byBsb2FkXG4gIGNvbnN0IHBheWxvYWRzID0gZmlsZXNUb0RhdGFQYXlsb2FkKGFjdGlvbi5yZXN1bHQpO1xuICBjb25zdCBuZXh0U3RhdGUgPSBjb21wb3NlXyhbXG4gICAgcGlja18oJ3Zpc1N0YXRlJykoXG4gICAgICBtZXJnZV8oe1xuICAgICAgICBmaWxlTG9hZGluZzogZmFsc2UsXG4gICAgICAgIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IHt9XG4gICAgICB9KVxuICAgIClcbiAgXSkoc3RhdGUpO1xuICAvLyBtYWtlIG11bHRpcGxlIGFkZCBkYXRhIHRvIG1hcCBjYWxsc1xuICBjb25zdCBzdGF0ZVdpdGhEYXRhID0gY29tcG9zZV8ocGF5bG9hZHMubWFwKHAgPT4gYXBwbHlfKGFkZERhdGFUb01hcFVwZGF0ZXIsIHBheWxvYWRfKHApKSkpKFxuICAgIG5leHRTdGF0ZVxuICApO1xuICByZXR1cm4gc3RhdGVXaXRoRGF0YSBhcyBLZXBsZXJHbFN0YXRlO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZERhdGFUb01hcENvbXBvc2VkID0gYWRkRGF0YVRvTWFwVXBkYXRlcjtcblxuLyoqXG4gKiBIZWxwZXIgd2hpY2ggdXBkYXRlcyBtYXAgb3ZlcmxheSBibGVuZGluZyBtb2RlIGluIHZpc1N0YXRlLFxuICogYnV0IG9ubHkgaWYgaXQncyBub3QgY3VycmVudGx5IGluIHRoZSBgbm9ybWFsYCBtb2RlLlxuICovXG5jb25zdCB1cGRhdGVPdmVybGF5QmxlbmRpbmcgPSBvdmVybGF5QmxlbmRpbmcgPT4gdmlzU3RhdGUgPT4ge1xuICBpZiAodmlzU3RhdGUub3ZlcmxheUJsZW5kaW5nICE9PSBPVkVSTEFZX0JMRU5ESU5HUy5ub3JtYWwudmFsdWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmlzU3RhdGUsXG4gICAgICBvdmVybGF5QmxlbmRpbmdcbiAgICB9O1xuICB9XG4gIHJldHVybiB2aXNTdGF0ZTtcbn07XG5cbi8qKlxuICogSGVscGVyIHdoaWNoIHVwZGF0ZXMgYGRhcmtCYXNlTWFwRW5hYmxlZGAgaW4gYWxsIHRoZSBsYXllcnMgaW4gdmlzU3RhdGUgd2hpY2hcbiAqIGhhdmUgdGhpcyBjb25maWcgc2V0dGluZyAob3IgaW4gb25lIHNwZWNpZmljIGxheWVyIGlmIHRoZSBgbGF5ZXJJZGAgcGFyYW0gaXMgcHJvdmlkZWQpLlxuICovXG5jb25zdCB1cGRhdGVEYXJrQmFzZU1hcExheWVycyA9XG4gIChkYXJrQmFzZU1hcEVuYWJsZWQ6IGJvb2xlYW4sIGxheWVySWQ6IHN0cmluZyB8IG51bGwgPSBudWxsKSA9PlxuICB2aXNTdGF0ZSA9PiAoe1xuICAgIC4uLnZpc1N0YXRlLFxuICAgIGxheWVyczogdmlzU3RhdGUubGF5ZXJzLm1hcChsYXllciA9PiB7XG4gICAgICBpZiAoIWxheWVySWQgfHwgbGF5ZXIuaWQgPT09IGxheWVySWQpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsYXllci52aXNDb25maWdTZXR0aW5ncywgJ2RhcmtCYXNlTWFwRW5hYmxlZCcpKSB7XG4gICAgICAgICAgY29uc3Qge3Zpc0NvbmZpZ30gPSBsYXllci5jb25maWc7XG4gICAgICAgICAgcmV0dXJuIGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIHZpc0NvbmZpZzogey4uLnZpc0NvbmZpZywgZGFya0Jhc2VNYXBFbmFibGVkfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGF5ZXI7XG4gICAgfSlcbiAgfSk7XG5cbi8qKlxuICogVXBkYXRlciB0aGF0IGNoYW5nZXMgdGhlIG1hcCBzdHlsZSBieSBjYWxsaW5nIG1hcFN0eWxlQ2hhbmdlVXBkYXRlciBvbiB2aXNTdGF0ZS5cbiAqIEluIGFkZGl0aW9uIHRvIHRoYXQsIGl0IGRvZXMgdGhlIGZvbGxvd2luZzpcbiAqXG4gKiAgIDEuIFVwZGF0ZSBtYXAgb3ZlcmxheSBibGVuZGluZyBtb2RlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgY29sb3JNb2RlIG9mIHRoZVxuICogICAgICBiYXNlIG1hcCwgYnV0IG9ubHkgaWYgaXQncyBub3QgaW4gdGhlIGBub3JtYWxgIG1vZGUuXG4gKlxuICogICAyLiBVcGRhdGUgYWxsIHRoZSBsYXllcnMgd2hpY2ggaGF2ZSB0aGUgYGRhcmtCYXNlTWFwRW5hYmxlZGAgY29uZmlnIHNldHRpbmdcbiAqICAgICAgYWRqdXN0aW5nIGl0IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgY29sb3JNb2RlIG9mIHRoZSBiYXNlIG1hcC5cbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBjb21iaW5lZE1hcFN0eWxlQ2hhbmdlVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogTWFwU3R5bGVDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgY29uc3Qge3BheWxvYWR9ID0gYWN0aW9uO1xuICBjb25zdCB7bWFwU3R5bGV9ID0gc3RhdGU7XG4gIGNvbnN0IGdldENvbG9yTW9kZSA9IGtleSA9PiBtYXBTdHlsZS5tYXBTdHlsZXNba2V5XT8uY29sb3JNb2RlO1xuICBjb25zdCBwcmV2Q29sb3JNb2RlID0gZ2V0Q29sb3JNb2RlKG1hcFN0eWxlLnN0eWxlVHlwZSk7XG4gIGNvbnN0IG5leHRDb2xvck1vZGUgPSBnZXRDb2xvck1vZGUocGF5bG9hZC5zdHlsZVR5cGUpO1xuICBsZXQge3Zpc1N0YXRlLCBtYXBTdGF0ZX0gPSBzdGF0ZTtcbiAgaWYgKG5leHRDb2xvck1vZGUgIT09IHByZXZDb2xvck1vZGUpIHtcbiAgICBzd2l0Y2ggKG5leHRDb2xvck1vZGUpIHtcbiAgICAgIGNhc2UgQkFTRV9NQVBfQ09MT1JfTU9ERVMuREFSSzpcbiAgICAgICAgdmlzU3RhdGUgPSBjb21wb3NlXyhbXG4gICAgICAgICAgdXBkYXRlT3ZlcmxheUJsZW5kaW5nKE9WRVJMQVlfQkxFTkRJTkdTLnNjcmVlbi52YWx1ZSksXG4gICAgICAgICAgdXBkYXRlRGFya0Jhc2VNYXBMYXllcnModHJ1ZSlcbiAgICAgICAgXSkodmlzU3RhdGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQkFTRV9NQVBfQ09MT1JfTU9ERVMuTElHSFQ6XG4gICAgICAgIHZpc1N0YXRlID0gY29tcG9zZV8oW1xuICAgICAgICAgIHVwZGF0ZU92ZXJsYXlCbGVuZGluZyhPVkVSTEFZX0JMRU5ESU5HUy5kYXJrZW4udmFsdWUpLFxuICAgICAgICAgIHVwZGF0ZURhcmtCYXNlTWFwTGF5ZXJzKGZhbHNlKVxuICAgICAgICBdKSh2aXNTdGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gIH1cblxuICAvLyBVcGRhdGUgZ2xvYmUgY29uZmlnIGNvbG9ycyB3aGVuIHN0eWxlIGNoYW5nZXMgYW5kIGdsb2JlIGlzIGVuYWJsZWRcbiAgaWYgKG1hcFN0YXRlLmdsb2JlPy5lbmFibGVkKSB7XG4gICAgLy8gU3dpdGNoaW5nIGZyb20gXCJObyBCYXNlbWFwXCIgdG8gYSBiYXNlbWFwIC0gcmVzdG9yZSBiYXNlbWFwIHN1Yi10b2dnbGVzXG4gICAgaWYgKHBheWxvYWQuc3R5bGVUeXBlICE9PSBOT19NQVBfSUQgJiYgbWFwU3R5bGUuc3R5bGVUeXBlID09PSBOT19NQVBfSUQpIHtcbiAgICAgIG1hcFN0YXRlID0ge1xuICAgICAgICAuLi5tYXBTdGF0ZSxcbiAgICAgICAgZ2xvYmU6IHtcbiAgICAgICAgICAuLi5tYXBTdGF0ZS5nbG9iZSxcbiAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgIC4uLm1hcFN0YXRlLmdsb2JlLmNvbmZpZyxcbiAgICAgICAgICAgIGJhc2VtYXA6IHRydWUsXG4gICAgICAgICAgICBsYWJlbHM6IHRydWUsXG4gICAgICAgICAgICBhZG1pbkxpbmVzOiB0cnVlLFxuICAgICAgICAgICAgd2F0ZXI6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIG1hcFN0YXRlID0gc3luY0dsb2JlQ29uZmlnQ29sb3JzVG9TdHlsZShtYXBTdGF0ZSwgbWFwU3R5bGUsIHBheWxvYWQuc3R5bGVUeXBlKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgdmlzU3RhdGUsXG4gICAgbWFwU3RhdGUsXG4gICAgbWFwU3R5bGU6IG1hcFN0eWxlQ2hhbmdlVXBkYXRlcihtYXBTdHlsZSwge3BheWxvYWQ6IHsuLi5wYXlsb2FkfX0pXG4gIH07XG59O1xuXG4vKipcbiAqIERlcml2ZSBnbG9iZSBiYXNlbWFwIGNvbG9ycyAoc3VyZmFjZSAvIHdhdGVyIC8gYWRtaW4gbGluZXMpIGZyb20gYSBtYXAgc3R5bGUgYW5kXG4gKiByZXR1cm4gYW4gdXBkYXRlZCBtYXBTdGF0ZSB3aXRoIHRob3NlIGNvbG9ycyB3cml0dGVuIGludG8gYGdsb2JlLmNvbmZpZ2AuIFVzZWQgYm90aFxuICogd2hlbiB0aGUgYmFzZSBtYXAgc3R5bGUgY2hhbmdlcyBhbmQgd2hlbiBlbnRlcmluZyBnbG9iZSBtb2RlLCBzbyB0aGUgZ2xvYmUgYWx3YXlzXG4gKiByZWZsZWN0cyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGJhc2VtYXAgaW5zdGVhZCBvZiB0aGUgc3RhdGljIERFRkFVTFRfR0xPQkVfQ09ORklHLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3luY0dsb2JlQ29uZmlnQ29sb3JzVG9TdHlsZShcbiAgbWFwU3RhdGU6IE1hcFN0YXRlLFxuICBtYXBTdHlsZTogTWFwU3R5bGUsXG4gIHN0eWxlVHlwZTogc3RyaW5nXG4pOiBNYXBTdGF0ZSB7XG4gIGlmICghbWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWQpIHtcbiAgICByZXR1cm4gbWFwU3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0U3R5bGVPYmogPSBtYXBTdHlsZS5tYXBTdHlsZXNbc3R5bGVUeXBlXTtcbiAgY29uc3QgbmV4dEdsb2JlQ29uZmlnID0gey4uLm1hcFN0YXRlLmdsb2JlLmNvbmZpZ307XG5cbiAgaWYgKHN0eWxlVHlwZSA9PT0gTk9fTUFQX0lEKSB7XG4gICAgbmV4dEdsb2JlQ29uZmlnLmJhc2VtYXAgPSBmYWxzZTtcbiAgICBuZXh0R2xvYmVDb25maWcubGFiZWxzID0gZmFsc2U7XG4gICAgbmV4dEdsb2JlQ29uZmlnLmFkbWluTGluZXMgPSBmYWxzZTtcbiAgICBuZXh0R2xvYmVDb25maWcud2F0ZXIgPSBmYWxzZTtcbiAgICBuZXh0R2xvYmVDb25maWcuc3VyZmFjZUNvbG9yID0gREVGQVVMVF9CQVNFTUFQX0NPTE9SLmJhY2tncm91bmRGaWxsQ29sb3I7XG4gICAgbmV4dEdsb2JlQ29uZmlnLndhdGVyQ29sb3IgPSBERUZBVUxUX0JBU0VNQVBfQ09MT1IuYmFzZW1hcFdhdGVyRmlsbENvbG9yO1xuICAgIG5leHRHbG9iZUNvbmZpZy5hZG1pbkxpbmVzQ29sb3IgPSBERUZBVUxUX0JBU0VNQVBfQ09MT1IuYmFzZW1hcEFkbWluTGluZUNvbG9yO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJhc2VtYXBDb2xvcnMgPSBuZXh0U3R5bGVPYmpcbiAgICAgID8gZ2V0QmFzZW1hcENvbG9yc0ZvclN0eWxlKHN0eWxlVHlwZSwge1xuICAgICAgICAgIHN0eWxlOiBuZXh0U3R5bGVPYmouc3R5bGUsXG4gICAgICAgICAgbGF5ZXJHcm91cHM6IG5leHRTdHlsZU9iai5sYXllckdyb3Vwc1xuICAgICAgICB9KVxuICAgICAgOiAvLyBTdHlsZSBvYmplY3Qgbm90IHlldCBsb2FkZWQgLSB1c2Uga25vd24gcHJlc2V0cyBieSBzdHlsZSB0eXBlXG4gICAgICAgIGdldEJhc2VtYXBDb2xvcnNGb3JTdHlsZShzdHlsZVR5cGUpO1xuICAgIG5leHRHbG9iZUNvbmZpZy5zdXJmYWNlQ29sb3IgPSBiYXNlbWFwQ29sb3JzLmJhY2tncm91bmRGaWxsQ29sb3I7XG4gICAgbmV4dEdsb2JlQ29uZmlnLndhdGVyQ29sb3IgPSBiYXNlbWFwQ29sb3JzLmJhc2VtYXBXYXRlckZpbGxDb2xvcjtcbiAgICBuZXh0R2xvYmVDb25maWcuYWRtaW5MaW5lc0NvbG9yID0gYmFzZW1hcENvbG9ycy5iYXNlbWFwQWRtaW5MaW5lQ29sb3I7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLm1hcFN0YXRlLFxuICAgIGdsb2JlOiB7XG4gICAgICAuLi5tYXBTdGF0ZS5nbG9iZSxcbiAgICAgIGNvbmZpZzogbmV4dEdsb2JlQ29uZmlnXG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFVwZGF0ZXIgdGhhdCBzd2l0Y2hlcyB0aGUgbWFwIHZpZXcgbW9kZSAoMkQgLyAzRCAvIEdsb2JlKS4gUnVucyB0aGUgYmFzZSBtYXAtc3RhdGVcbiAqIHVwZGF0ZXIgYW5kLCB3aGVuIGVudGVyaW5nIGdsb2JlIG1vZGUsIHN5bmNzIHRoZSBnbG9iZSBiYXNlbWFwIGNvbG9ycyB0byB0aGVcbiAqIGN1cnJlbnRseSBzZWxlY3RlZCBtYXAgc3R5bGUgc28gdGhlIGdsb2JlIGRvZXNuJ3Qgc2hvdyBzdGFsZSBkZWZhdWx0IGNvbG9ycy5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbWJpbmVkU2V0TWFwVmlld01vZGVVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuU2V0TWFwVmlld01vZGVVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgbGV0IG1hcFN0YXRlID0gc2V0TWFwVmlld01vZGVVcGRhdGVyKHN0YXRlLm1hcFN0YXRlLCBhY3Rpb24pO1xuXG4gIGlmIChtYXBTdGF0ZS5nbG9iZT8uZW5hYmxlZCkge1xuICAgIG1hcFN0YXRlID0gc3luY0dsb2JlQ29uZmlnQ29sb3JzVG9TdHlsZShtYXBTdGF0ZSwgc3RhdGUubWFwU3R5bGUsIHN0YXRlLm1hcFN0eWxlLnN0eWxlVHlwZSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIG1hcFN0YXRlXG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZXIgdGhhdCBjaGFuZ2VzIHRoZSBsYXllciB0eXBlIGJ5IGNhbGxpbmcgYGxheWVyVHlwZUNoYW5nZVVwZGF0ZXJgIG9uIHZpc1N0YXRlLlxuICogSW4gYWRkaXRpb24gdG8gdGhhdCwgaWYgdGhlIG5ldyBsYXllciB0eXBlIGhhcyB0aGUgYGRhcmtCYXNlTWFwRW5hYmxlZGAgY29uZmlnXG4gKiBzZXR0aW5nLCB3ZSBhZGp1c3QgaXQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBjb2xvck1vZGUgb2YgdGhlIGJhc2UgbWFwLnNcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbWJpbmVkTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGxldCB7dmlzU3RhdGV9ID0gc3RhdGU7XG4gIGNvbnN0IG9sZExheWVySW5kZXggPSB2aXNTdGF0ZS5sYXllcnMuZmluZEluZGV4KGxheWVyID0+IGxheWVyID09PSBhY3Rpb24ub2xkTGF5ZXIpO1xuICB2aXNTdGF0ZSA9IGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIodmlzU3RhdGUsIGFjdGlvbik7XG4gIGNvbnN0IG5ld0xheWVyID0gdmlzU3RhdGUubGF5ZXJzW29sZExheWVySW5kZXhdO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5ld0xheWVyPy52aXNDb25maWdTZXR0aW5ncywgJ2RhcmtCYXNlTWFwRW5hYmxlZCcpKSB7XG4gICAgY29uc3Qge21hcFN0eWxlfSA9IHN0YXRlO1xuICAgIGNvbnN0IHtjb2xvck1vZGV9ID0gbWFwU3R5bGUubWFwU3R5bGVzW21hcFN0eWxlLnN0eWxlVHlwZV07XG4gICAgY29uc3Qge2RhcmtCYXNlTWFwRW5hYmxlZH0gPSBuZXdMYXllci5jb25maWcudmlzQ29uZmlnO1xuICAgIHN3aXRjaCAoY29sb3JNb2RlKSB7XG4gICAgICBjYXNlIEJBU0VfTUFQX0NPTE9SX01PREVTLkRBUks6XG4gICAgICAgIGlmICghZGFya0Jhc2VNYXBFbmFibGVkKSB7XG4gICAgICAgICAgdmlzU3RhdGUgPSB1cGRhdGVEYXJrQmFzZU1hcExheWVycyh0cnVlLCBuZXdMYXllci5pZCkodmlzU3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBCQVNFX01BUF9DT0xPUl9NT0RFUy5MSUdIVDpcbiAgICAgICAgaWYgKGRhcmtCYXNlTWFwRW5hYmxlZCkge1xuICAgICAgICAgIHZpc1N0YXRlID0gdXBkYXRlRGFya0Jhc2VNYXBMYXllcnMoZmFsc2UsIG5ld0xheWVyLmlkKSh2aXNTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHZpc1N0YXRlXG4gIH07XG59O1xuXG4vKipcbiAqIE1ha2UgbWFwTGVnZW5kIGFjdGl2ZSB3aGVuIHRvZ2dsZVNwbGl0TWFwIGFjdGlvbiBpcyBjYWxsZWRcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgdmlzU3RhdGU6IHZpc1N0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyKHN0YXRlLnZpc1N0YXRlLCBhY3Rpb24pLFxuICAgIHVpU3RhdGU6IHVpU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIoc3RhdGUudWlTdGF0ZSksXG4gICAgbWFwU3RhdGU6IG1hcFN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyKHN0YXRlLm1hcFN0YXRlKVxuICB9O1xuXG4gIGNvbnN0IGlzU3BsaXQgPSBuZXdTdGF0ZS52aXNTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoICE9PSAwO1xuICBjb25zdCBpc0xlZ2VuZEFjdGl2ZSA9IG5ld1N0YXRlLnVpU3RhdGUubWFwQ29udHJvbHM/Lm1hcExlZ2VuZD8uYWN0aXZlO1xuICBpZiAoaXNTcGxpdCAmJiAhaXNMZWdlbmRBY3RpdmUpIHtcbiAgICBuZXdTdGF0ZS51aVN0YXRlID0gdG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIobmV3U3RhdGUudWlTdGF0ZSwge1xuICAgICAgcGF5bG9hZDoge3BhbmVsSWQ6ICdtYXBMZWdlbmQnLCBpbmRleDogYWN0aW9uLnBheWxvYWR9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFNldCBtYXAgc3BsaXQgbW9kZSB1cGRhdGVyIC0gY29vcmRpbmF0ZXMgc3RhdGUgY2hhbmdlcyBhY3Jvc3MgdmlzU3RhdGUsIG1hcFN0YXRlLCBhbmQgdWlTdGF0ZVxuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwU3BsaXRNb2RlVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlNldE1hcFNwbGl0TW9kZVVwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBjb25zdCB7bWFwU3BsaXRNb2RlfSA9IGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBwcmV2TW9kZSA9IHN0YXRlLm1hcFN0YXRlLm1hcFNwbGl0TW9kZTtcblxuICBpZiAobWFwU3BsaXRNb2RlID09PSBwcmV2TW9kZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld01hcFN0YXRlID0gbWFwU3RhdGVTZXRNYXBTcGxpdE1vZGVVcGRhdGVyKHN0YXRlLm1hcFN0YXRlLCBhY3Rpb24pO1xuXG4gIGxldCBuZXdWaXNTdGF0ZSA9IHsuLi5zdGF0ZS52aXNTdGF0ZX07XG5cbiAgc3dpdGNoIChtYXBTcGxpdE1vZGUpIHtcbiAgICBjYXNlIE1hcFNwbGl0TW9kZS5TSU5HTEVfTUFQOlxuICAgICAgbmV3VmlzU3RhdGUgPSB7XG4gICAgICAgIC4uLm5ld1Zpc1N0YXRlLFxuICAgICAgICBzcGxpdE1hcHM6IFtdXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNYXBTcGxpdE1vZGUuRFVBTF9NQVA6XG4gICAgY2FzZSBNYXBTcGxpdE1vZGUuU1dJUEVfQ09NUEFSRTpcbiAgICAgIGlmIChwcmV2TW9kZSA9PT0gTWFwU3BsaXRNb2RlLlNJTkdMRV9NQVApIHtcbiAgICAgICAgbmV3VmlzU3RhdGUgPSB7XG4gICAgICAgICAgLi4ubmV3VmlzU3RhdGUsXG4gICAgICAgICAgc3BsaXRNYXBzOiBjb21wdXRlU3BsaXRNYXBMYXllcnMobmV3VmlzU3RhdGUubGF5ZXJzLCB7XG4gICAgICAgICAgICBkdXBsaWNhdGU6IG1hcFNwbGl0TW9kZSA9PT0gTWFwU3BsaXRNb2RlLlNXSVBFX0NPTVBBUkVcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgbGV0IG5ld1VpU3RhdGUgPSB1aVN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyKHN0YXRlLnVpU3RhdGUpO1xuXG4gIGNvbnN0IGlzU3BsaXQgPSBuZXdWaXNTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoICE9PSAwO1xuICBjb25zdCBpc0xlZ2VuZEFjdGl2ZSA9IG5ld1VpU3RhdGUubWFwQ29udHJvbHM/Lm1hcExlZ2VuZD8uYWN0aXZlO1xuICBpZiAoaXNTcGxpdCAmJiAhaXNMZWdlbmRBY3RpdmUpIHtcbiAgICBuZXdVaVN0YXRlID0gdG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIobmV3VWlTdGF0ZSwge1xuICAgICAgcGF5bG9hZDoge3BhbmVsSWQ6ICdtYXBMZWdlbmQnLCBpbmRleDogMH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbWFwU3RhdGU6IG5ld01hcFN0YXRlLFxuICAgIHZpc1N0YXRlOiBuZXdWaXNTdGF0ZSxcbiAgICB1aVN0YXRlOiBuZXdVaVN0YXRlXG4gIH07XG59O1xuXG5jb25zdCBkZWZhdWx0UmVwbGFjZURhdGFUb01hcE9wdGlvbnMgPSB7XG4gIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZSxcbiAgY2VudGVyTWFwOiB0cnVlLFxuICBhdXRvQ3JlYXRlTGF5ZXJzOiBmYWxzZVxufTtcblxuLyoqXG4gKiBVcGRhdGVyIHJlcGxhY2UgYSBkYXRhc2V0IGluIHN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCByZXBsYWNlRGF0YUluTWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIHtwYXlsb2FkfToge3BheWxvYWQ6IFJlcGxhY2VEYXRhSW5NYXBQYXlsb2FkfVxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGNvbnN0IHtkYXRhc2V0VG9SZXBsYWNlSWQsIGRhdGFzZXRUb1VzZSwgb3B0aW9ucyA9IHt9fSA9IHBheWxvYWQ7XG4gIGNvbnN0IGFkZERhdGFUb01hcE9wdGlvbnMgPSB7Li4uZGVmYXVsdFJlcGxhY2VEYXRhVG9NYXBPcHRpb25zLCAuLi5vcHRpb25zfTtcblxuICAvLyBjaGVjayBpZiBkYXRhc2V0IGlzIHRoZXJlXG4gIGlmICghc3RhdGUudmlzU3RhdGUuZGF0YXNldHNbZGF0YXNldFRvUmVwbGFjZUlkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBkYXRhc2V0VG9Vc2UgaXMgUHJvdG9EYXRhc2V0XG4gIGNvbnN0IGRhdGFJZFRvVXNlID0gZGF0YXNldFRvVXNlLmluZm8uaWQ7XG4gIGlmICghZGF0YUlkVG9Vc2UpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gcmVtb3ZlIGRhdGFzZXQgYW5kIHB1dCBkZXBlbmRlbmNpZXMgaW4gdG9CZU1lcmdlZFxuICBjb25zdCBwcmVwYXJlZFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIHZpc1N0YXRlOiBwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZShzdGF0ZS52aXNTdGF0ZSwgZGF0YXNldFRvUmVwbGFjZUlkLCBkYXRhSWRUb1VzZSlcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBhZGREYXRhVG9NYXBVcGRhdGVyKFxuICAgIHByZXBhcmVkU3RhdGUsXG4gICAgcGF5bG9hZF8oe1xuICAgICAgZGF0YXNldHM6IGRhdGFzZXRUb1VzZSxcbiAgICAgIC8vIHNob3VsZCB6b29tIHRvIG5ldyBkYXRhc2V0XG4gICAgICBvcHRpb25zOiBhZGREYXRhVG9NYXBPcHRpb25zXG4gICAgfSlcbiAgKTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFDQTs7QUFFQSxTQUNFQSxrQkFBa0IsRUFDbEJDLHVCQUF1QixJQUFJQyw4QkFBOEIsRUFDekRDLHVCQUF1QixFQUN2QkMscUJBQXFCLElBQUlDLDRCQUE0QixFQUNyREMsdUJBQXVCLElBQUlDLDhCQUE4QixRQUNwRCxxQkFBcUI7QUFDNUIsU0FDRUMsb0JBQW9CLElBQUlDLDRCQUE0QixFQUNwREMsaUJBQWlCLEVBQ2pCQyxzQkFBc0IsRUFDdEJQLHFCQUFxQixJQUFJUSw2QkFBNkIsRUFDdERDLDZCQUE2QixRQUN4QixzQkFBc0I7QUFDN0IsU0FDRVAsdUJBQXVCLElBQUlRLHFCQUFxQixFQUNoRFYscUJBQXFCLElBQUlXLDZCQUE2QixFQUN0REMsc0JBQXNCLElBQUlDLDhCQUE4QixFQUN4REMscUJBQXFCLFFBQ2hCLHNCQUFzQjtBQUM3QixTQUNFQyxxQkFBcUIsRUFDckJiLHVCQUF1QixJQUFJYyxxQkFBcUIsUUFDM0Msc0JBQXNCO0FBQzdCLFNBQVFDLGtCQUFrQixRQUFPLHVCQUF1QjtBQUN4RCxTQUFRQyxRQUFRLEVBQUVDLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxHQUFHLEVBQUVDLFFBQVEsRUFBRUMsTUFBTSxFQUFFQyxLQUFLLFFBQU8sb0JBQW9CO0FBY3hGLFNBQVFDLGFBQWEsRUFBRUMscUJBQXFCLFFBQU8sa0JBQWtCO0FBQ3JFLFNBQVFDLGFBQWEsUUFBTyxjQUFjO0FBQzFDLFNBQ0VDLG9CQUFvQixFQUNwQkMsaUJBQWlCLEVBQ2pCQyxTQUFTLEVBQ1RDLFlBQVksUUFDUCxzQkFBc0I7QUFDN0IsU0FBUUMsd0JBQXdCLEVBQUVDLHFCQUFxQixRQUFPLDBCQUEwQjtBQVV4Rjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFNQyxnQkFBZ0IsR0FBRyxJQUFJO0FBQzdCOztBQUVBLE9BQU8sSUFBTUMsYUFBYSxHQUFHLFNBQWhCQSxhQUFhQSxDQUFHQyxNQUFNO0VBQUEsT0FDakNYLGFBQWEsQ0FBQ1csTUFBTSxDQUFDLElBQUlYLGFBQWEsQ0FBQ1csTUFBTSxDQUFDQSxNQUFNLENBQUMsSUFBSUEsTUFBTSxDQUFDQyxPQUFPO0FBQUE7QUFFekUsT0FBTyxJQUFNQywwQkFBMEIsR0FBRztFQUN4Q0MsU0FBUyxFQUFFLElBQUk7RUFDZkMsa0JBQWtCLEVBQUUsS0FBSztFQUN6QkMsZ0JBQWdCLEVBQUUsSUFBSTtFQUN0QkMsa0JBQWtCLEVBQUU7QUFDdEIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUMsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FDOUJDLEtBQW9CLEVBQUFDLElBQUEsRUFFRjtFQUFBLElBQUFDLFVBQUEsRUFBQUMsV0FBQSxFQUFBQyxXQUFBO0VBQUEsSUFEakJDLE9BQU8sR0FBQUosSUFBQSxDQUFQSSxPQUFPO0VBRVIsSUFBT0MsUUFBUSxHQUFrQkQsT0FBTyxDQUFqQ0MsUUFBUTtJQUFFZCxNQUFNLEdBQVVhLE9BQU8sQ0FBdkJiLE1BQU07SUFBRWUsSUFBSSxHQUFJRixPQUFPLENBQWZFLElBQUk7RUFFN0IsSUFBTUMsT0FBTyxHQUFBQyxhQUFBLENBQUFBLGFBQUEsS0FDUmYsMEJBQTBCLEdBQzFCVyxPQUFPLENBQUNHLE9BQU8sQ0FDbkI7O0VBRUQ7RUFDQSxJQUFNRSxvQkFBb0IsR0FDeEJDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDTixRQUFRLENBQUMsSUFDdkIsRUFBQUosVUFBQSxHQUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLGNBQUFKLFVBQUEsdUJBQVhBLFVBQUEsQ0FBYUssSUFBSSxDQUFDTSxNQUFNLE1BQUssT0FBTyxNQUFBVixXQUFBLEdBQ3BDRyxRQUFRLENBQUMsQ0FBQyxDQUFDLGNBQUFILFdBQUEsdUJBQVhBLFdBQUEsQ0FBYUksSUFBSSxDQUFDTyxFQUFFLEtBQ3BCLEVBQUFWLFdBQUEsR0FBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxjQUFBRixXQUFBLHVCQUFYQSxXQUFBLENBQWFHLElBQUksQ0FBQ08sRUFBRSxLQUFJZCxLQUFLLENBQUNlLFFBQVEsQ0FBQ1QsUUFBUTtFQUNqRCxJQUFJSSxvQkFBb0IsRUFBRTtJQUN4QixPQUFPaEMsUUFBUSxDQUFnQixDQUM3QkUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUNmTCxNQUFNLENBQWdCZCw0QkFBNEIsRUFBRTtNQUNsRDZDLFFBQVEsRUFBUkEsUUFBUTtNQUNSRSxPQUFPLEVBQVBBLE9BQU87TUFDUGhCLE1BQU0sRUFBTkE7SUFDRixDQUFDLENBQ0gsQ0FBQyxDQUNGLENBQUMsQ0FBQ1EsS0FBSyxDQUFDO0VBQ1g7O0VBRUE7RUFDQSxJQUFJZ0IsWUFBMEIsR0FBR3hCLE1BQU07RUFFdkMsSUFBSUQsYUFBYSxDQUFDQyxNQUFNLENBQUMsRUFBRTtJQUN6QjtJQUNBO0lBQ0F3QixZQUFZLEdBQUdoQixLQUFLLENBQUNlLFFBQVEsQ0FBQ0UsTUFBTSxDQUFDQyxnQkFBZ0IsQ0FBQzFCLE1BQU0sQ0FBQztFQUMvRDtFQUNBLElBQU0yQixTQUFTLEdBQUduQixLQUFLLENBQUNlLFFBQVEsQ0FBQ0ssTUFBTTtFQUN2QyxJQUFNQyxzQkFBc0IsR0FBRyxTQUF6QkEsc0JBQXNCQSxDQUFJRCxNQUFlO0lBQUEsT0FDN0NBLE1BQU0sQ0FBQ0UsTUFBTSxDQUFDLFVBQUFDLEVBQUU7TUFBQSxPQUFJLENBQUNKLFNBQVMsQ0FBQ0ssSUFBSSxDQUFDLFVBQUFDLEVBQUU7UUFBQSxPQUFJQSxFQUFFLEtBQUtGLEVBQUU7TUFBQSxFQUFDO0lBQUEsRUFBQztFQUFBOztFQUV2RDtFQUNBLElBQU1HLHVCQUF1QixHQUFHLFNBQTFCQSx1QkFBdUJBLENBQUlOLE1BQWUsRUFBSztJQUNuRCxJQUFNTyxNQUFNLEdBQUduQixPQUFPLENBQUNiLFNBQVMsSUFBSVosYUFBYSxDQUFDcUMsTUFBTSxDQUFDO0lBQ3pELE9BQU9PLE1BQU0sR0FBR0EsTUFBTSxHQUFHQyxTQUFTO0VBQ3BDLENBQUM7RUFFRCxPQUFPbEQsUUFBUSxDQUFnQixDQUM3QkUsS0FBSyxDQUFDLFVBQVUsQ0FBQztFQUNmO0VBQ0FMLE1BQU0sQ0FBZ0JkLDRCQUE0QixFQUFFO0lBQ2xENkMsUUFBUSxFQUFSQSxRQUFRO0lBQ1JFLE9BQU8sRUFBUEEsT0FBTztJQUNQaEIsTUFBTSxFQUFFd0I7RUFDVixDQUFDLENBQ0gsQ0FBQyxFQUVEdkMsR0FBRyxDQUFDb0QsT0FBTyxDQUFDdEIsSUFBSSxDQUFDLEVBQUUzQixLQUFLLENBQUMsVUFBVSxDQUFDLENBQUNMLE1BQU0sQ0FBZ0JiLGlCQUFpQixFQUFFO0lBQUM2QyxJQUFJLEVBQUpBO0VBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN2RjtFQUNBO0VBQ0EvQixLQUFLLENBQUMsVUFBQXNELEtBQUE7SUFBQSxJQUFFZixRQUFRLEdBQUFlLEtBQUEsQ0FBUmYsUUFBUTtJQUFBLE9BQ2RuQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQ2ZMLE1BQU0sQ0FDSlQscUJBQXFCLEVBQ3JCUSxRQUFRLENBQUM7TUFDUGtCLE1BQU0sRUFBRXdCLFlBQVk7TUFDcEJSLE9BQU8sRUFBUEEsT0FBTztNQUNQbUIsTUFBTSxFQUFFRCx1QkFBdUIsQ0FBQ0wsc0JBQXNCLENBQUNOLFFBQVEsQ0FBQ0ssTUFBTSxDQUFDO0lBQ3pFLENBQUMsQ0FDSCxDQUNGLENBQUM7RUFBQSxDQUNILENBQUMsRUFDRHhDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQ0wsTUFBTSxDQUFDSCxxQkFBcUIsRUFBRUUsUUFBUSxDQUFDO0lBQUNrQixNQUFNLEVBQUV3QixZQUFZO0lBQUVSLE9BQU8sRUFBUEE7RUFBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzNGNUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUNkTCxNQUFNLENBQUNoQiw4QkFBOEIsRUFBRWUsUUFBUSxDQUFDO0lBQUNrQixNQUFNLEVBQUV3QixZQUFZO0lBQUVSLE9BQU8sRUFBUEE7RUFBTyxDQUFDLENBQUMsQ0FDbEYsQ0FBQyxFQUNENUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDTCxNQUFNLENBQUNyQiw4QkFBOEIsRUFBRW9CLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBRXhFTSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUNMLE1BQU0sQ0FBQ3ZCLGtCQUFrQixFQUFFc0IsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDNURNLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FDZEQsTUFBTSxDQUNKb0QsTUFBTSxDQUFDQyxTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDMUIsT0FBTyxFQUFFLFVBQVUsQ0FBQyxHQUNyRDtJQUFDMkIsUUFBUSxFQUFFM0IsT0FBTyxDQUFDMkI7RUFBUSxDQUFDLEdBQzVCLENBQUMsQ0FDUCxDQUNGLENBQUMsQ0FDRixDQUFDLENBQUNuQyxLQUFLLENBQUM7QUFDWCxDQUFDO0FBRUQsT0FBTyxJQUFNL0MsdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FDbEMrQyxLQUFvQixFQUNwQm9DLE1BQXFDLEVBQ25CO0VBQ2xCO0VBQ0EsSUFBTUMsUUFBUSxHQUFHaEUsa0JBQWtCLENBQUMrRCxNQUFNLENBQUNFLE1BQU0sQ0FBQztFQUNsRCxJQUFNQyxTQUFTLEdBQUc3RCxRQUFRLENBQUMsQ0FDekJFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FDZkQsTUFBTSxDQUFDO0lBQ0w2RCxXQUFXLEVBQUUsS0FBSztJQUNsQkMsbUJBQW1CLEVBQUUsQ0FBQztFQUN4QixDQUFDLENBQ0gsQ0FBQyxDQUNGLENBQUMsQ0FBQ3pDLEtBQUssQ0FBQztFQUNUO0VBQ0EsSUFBTTBDLGFBQWEsR0FBR2hFLFFBQVEsQ0FBQzJELFFBQVEsQ0FBQ00sR0FBRyxDQUFDLFVBQUFDLENBQUM7SUFBQSxPQUFJckUsTUFBTSxDQUFDd0IsbUJBQW1CLEVBQUV6QixRQUFRLENBQUNzRSxDQUFDLENBQUMsQ0FBQztFQUFBLEVBQUMsQ0FBQyxDQUN6RkwsU0FDRixDQUFDO0VBQ0QsT0FBT0csYUFBYTtBQUN0QixDQUFDO0FBRUQsT0FBTyxJQUFNRyxvQkFBb0IsR0FBRzlDLG1CQUFtQjs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFNK0MscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBR0MsZUFBZTtFQUFBLE9BQUksVUFBQWhDLFFBQVEsRUFBSTtJQUMzRCxJQUFJQSxRQUFRLENBQUNnQyxlQUFlLEtBQUs5RCxpQkFBaUIsQ0FBQytELE1BQU0sQ0FBQ0MsS0FBSyxFQUFFO01BQy9ELE9BQUF4QyxhQUFBLENBQUFBLGFBQUEsS0FDS00sUUFBUTtRQUNYZ0MsZUFBZSxFQUFmQTtNQUFlO0lBRW5CO0lBQ0EsT0FBT2hDLFFBQVE7RUFDakIsQ0FBQztBQUFBOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTW1DLHVCQUF1QixHQUMzQixTQURJQSx1QkFBdUJBLENBQzFCQyxrQkFBMkI7RUFBQSxJQUFFQyxPQUFzQixHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBekIsU0FBQSxHQUFBeUIsU0FBQSxNQUFHLElBQUk7RUFBQSxPQUMzRCxVQUFBdEMsUUFBUTtJQUFBLE9BQUFOLGFBQUEsQ0FBQUEsYUFBQSxLQUNITSxRQUFRO01BQ1hLLE1BQU0sRUFBRUwsUUFBUSxDQUFDSyxNQUFNLENBQUN1QixHQUFHLENBQUMsVUFBQVksS0FBSyxFQUFJO1FBQ25DLElBQUksQ0FBQ0gsT0FBTyxJQUFJRyxLQUFLLENBQUN6QyxFQUFFLEtBQUtzQyxPQUFPLEVBQUU7VUFDcEMsSUFBSXJCLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDQyxjQUFjLENBQUNDLElBQUksQ0FBQ3FCLEtBQUssQ0FBQ0MsaUJBQWlCLEVBQUUsb0JBQW9CLENBQUMsRUFBRTtZQUN2RixJQUFPQyxTQUFTLEdBQUlGLEtBQUssQ0FBQy9ELE1BQU0sQ0FBekJpRSxTQUFTO1lBQ2hCLE9BQU9GLEtBQUssQ0FBQ0csaUJBQWlCLENBQUM7Y0FDN0JELFNBQVMsRUFBQWhELGFBQUEsQ0FBQUEsYUFBQSxLQUFNZ0QsU0FBUztnQkFBRU4sa0JBQWtCLEVBQWxCQTtjQUFrQjtZQUM5QyxDQUFDLENBQUM7VUFDSjtRQUNGO1FBQ0EsT0FBT0ksS0FBSztNQUNkLENBQUM7SUFBQztFQUFBLENBQ0Y7QUFBQTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNSSw2QkFBNkIsR0FBRyxTQUFoQ0EsNkJBQTZCQSxDQUN4QzNELEtBQW9CLEVBQ3BCb0MsTUFBbUMsRUFDakI7RUFBQSxJQUFBd0IsZUFBQTtFQUNsQixJQUFPdkQsT0FBTyxHQUFJK0IsTUFBTSxDQUFqQi9CLE9BQU87RUFDZCxJQUFPd0QsUUFBUSxHQUFJN0QsS0FBSyxDQUFqQjZELFFBQVE7RUFDZixJQUFNQyxZQUFZLEdBQUcsU0FBZkEsWUFBWUEsQ0FBR0MsR0FBRztJQUFBLElBQUFDLHFCQUFBO0lBQUEsUUFBQUEscUJBQUEsR0FBSUgsUUFBUSxDQUFDSSxTQUFTLENBQUNGLEdBQUcsQ0FBQyxjQUFBQyxxQkFBQSx1QkFBdkJBLHFCQUFBLENBQXlCRSxTQUFTO0VBQUE7RUFDOUQsSUFBTUMsYUFBYSxHQUFHTCxZQUFZLENBQUNELFFBQVEsQ0FBQ08sU0FBUyxDQUFDO0VBQ3RELElBQU1DLGFBQWEsR0FBR1AsWUFBWSxDQUFDekQsT0FBTyxDQUFDK0QsU0FBUyxDQUFDO0VBQ3JELElBQUtyRCxRQUFRLEdBQWNmLEtBQUssQ0FBM0JlLFFBQVE7SUFBRXVELFFBQVEsR0FBSXRFLEtBQUssQ0FBakJzRSxRQUFRO0VBQ3ZCLElBQUlELGFBQWEsS0FBS0YsYUFBYSxFQUFFO0lBQ25DLFFBQVFFLGFBQWE7TUFDbkIsS0FBS3JGLG9CQUFvQixDQUFDdUYsSUFBSTtRQUM1QnhELFFBQVEsR0FBR3JDLFFBQVEsQ0FBQyxDQUNsQm9FLHFCQUFxQixDQUFDN0QsaUJBQWlCLENBQUN1RixNQUFNLENBQUN2QixLQUFLLENBQUMsRUFDckRDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUM5QixDQUFDLENBQUNuQyxRQUFRLENBQUM7UUFDWjtNQUNGLEtBQUsvQixvQkFBb0IsQ0FBQ3lGLEtBQUs7UUFDN0IxRCxRQUFRLEdBQUdyQyxRQUFRLENBQUMsQ0FDbEJvRSxxQkFBcUIsQ0FBQzdELGlCQUFpQixDQUFDeUYsTUFBTSxDQUFDekIsS0FBSyxDQUFDLEVBQ3JEQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FDL0IsQ0FBQyxDQUFDbkMsUUFBUSxDQUFDO1FBQ1o7TUFDRjtNQUNBO0lBQ0Y7RUFDRjs7RUFFQTtFQUNBLEtBQUE2QyxlQUFBLEdBQUlVLFFBQVEsQ0FBQ0ssS0FBSyxjQUFBZixlQUFBLGVBQWRBLGVBQUEsQ0FBZ0JnQixPQUFPLEVBQUU7SUFDM0I7SUFDQSxJQUFJdkUsT0FBTyxDQUFDK0QsU0FBUyxLQUFLbEYsU0FBUyxJQUFJMkUsUUFBUSxDQUFDTyxTQUFTLEtBQUtsRixTQUFTLEVBQUU7TUFDdkVvRixRQUFRLEdBQUE3RCxhQUFBLENBQUFBLGFBQUEsS0FDSDZELFFBQVE7UUFDWEssS0FBSyxFQUFBbEUsYUFBQSxDQUFBQSxhQUFBLEtBQ0E2RCxRQUFRLENBQUNLLEtBQUs7VUFDakJuRixNQUFNLEVBQUFpQixhQUFBLENBQUFBLGFBQUEsS0FDRDZELFFBQVEsQ0FBQ0ssS0FBSyxDQUFDbkYsTUFBTTtZQUN4QnFGLE9BQU8sRUFBRSxJQUFJO1lBQ2JDLE1BQU0sRUFBRSxJQUFJO1lBQ1pDLFVBQVUsRUFBRSxJQUFJO1lBQ2hCQyxLQUFLLEVBQUU7VUFBSTtRQUNaO01BQ0YsRUFDRjtJQUNIO0lBQ0FWLFFBQVEsR0FBR1csNEJBQTRCLENBQUNYLFFBQVEsRUFBRVQsUUFBUSxFQUFFeEQsT0FBTyxDQUFDK0QsU0FBUyxDQUFDO0VBQ2hGO0VBRUEsT0FBQTNELGFBQUEsQ0FBQUEsYUFBQSxLQUNLVCxLQUFLO0lBQ1JlLFFBQVEsRUFBUkEsUUFBUTtJQUNSdUQsUUFBUSxFQUFSQSxRQUFRO0lBQ1JULFFBQVEsRUFBRTFGLHFCQUFxQixDQUFDMEYsUUFBUSxFQUFFO01BQUN4RCxPQUFPLEVBQUFJLGFBQUEsS0FBTUosT0FBTztJQUFDLENBQUM7RUFBQztBQUV0RSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBUzRFLDRCQUE0QkEsQ0FDMUNYLFFBQWtCLEVBQ2xCVCxRQUFrQixFQUNsQk8sU0FBaUIsRUFDUDtFQUFBLElBQUFjLGdCQUFBO0VBQ1YsSUFBSSxHQUFBQSxnQkFBQSxHQUFDWixRQUFRLENBQUNLLEtBQUssY0FBQU8sZ0JBQUEsZUFBZEEsZ0JBQUEsQ0FBZ0JOLE9BQU8sR0FBRTtJQUM1QixPQUFPTixRQUFRO0VBQ2pCO0VBRUEsSUFBTWEsWUFBWSxHQUFHdEIsUUFBUSxDQUFDSSxTQUFTLENBQUNHLFNBQVMsQ0FBQztFQUNsRCxJQUFNZ0IsZUFBZSxHQUFBM0UsYUFBQSxLQUFPNkQsUUFBUSxDQUFDSyxLQUFLLENBQUNuRixNQUFNLENBQUM7RUFFbEQsSUFBSTRFLFNBQVMsS0FBS2xGLFNBQVMsRUFBRTtJQUMzQmtHLGVBQWUsQ0FBQ1AsT0FBTyxHQUFHLEtBQUs7SUFDL0JPLGVBQWUsQ0FBQ04sTUFBTSxHQUFHLEtBQUs7SUFDOUJNLGVBQWUsQ0FBQ0wsVUFBVSxHQUFHLEtBQUs7SUFDbENLLGVBQWUsQ0FBQ0osS0FBSyxHQUFHLEtBQUs7SUFDN0JJLGVBQWUsQ0FBQ0MsWUFBWSxHQUFHaEcscUJBQXFCLENBQUNpRyxtQkFBbUI7SUFDeEVGLGVBQWUsQ0FBQ0csVUFBVSxHQUFHbEcscUJBQXFCLENBQUNtRyxxQkFBcUI7SUFDeEVKLGVBQWUsQ0FBQ0ssZUFBZSxHQUFHcEcscUJBQXFCLENBQUNxRyxxQkFBcUI7RUFDL0UsQ0FBQyxNQUFNO0lBQ0wsSUFBTUMsYUFBYSxHQUFHUixZQUFZLEdBQzlCL0Ysd0JBQXdCLENBQUNnRixTQUFTLEVBQUU7TUFDbEN3QixLQUFLLEVBQUVULFlBQVksQ0FBQ1MsS0FBSztNQUN6QkMsV0FBVyxFQUFFVixZQUFZLENBQUNVO0lBQzVCLENBQUMsQ0FBQztJQUNGO0lBQ0F6Ryx3QkFBd0IsQ0FBQ2dGLFNBQVMsQ0FBQztJQUN2Q2dCLGVBQWUsQ0FBQ0MsWUFBWSxHQUFHTSxhQUFhLENBQUNMLG1CQUFtQjtJQUNoRUYsZUFBZSxDQUFDRyxVQUFVLEdBQUdJLGFBQWEsQ0FBQ0gscUJBQXFCO0lBQ2hFSixlQUFlLENBQUNLLGVBQWUsR0FBR0UsYUFBYSxDQUFDRCxxQkFBcUI7RUFDdkU7RUFFQSxPQUFBakYsYUFBQSxDQUFBQSxhQUFBLEtBQ0s2RCxRQUFRO0lBQ1hLLEtBQUssRUFBQWxFLGFBQUEsQ0FBQUEsYUFBQSxLQUNBNkQsUUFBUSxDQUFDSyxLQUFLO01BQ2pCbkYsTUFBTSxFQUFFNEY7SUFBZTtFQUN4QjtBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1VLDZCQUE2QixHQUFHLFNBQWhDQSw2QkFBNkJBLENBQ3hDOUYsS0FBb0IsRUFDcEJvQyxNQUFtRCxFQUNqQztFQUFBLElBQUEyRCxnQkFBQTtFQUNsQixJQUFJekIsUUFBUSxHQUFHcEcscUJBQXFCLENBQUM4QixLQUFLLENBQUNzRSxRQUFRLEVBQUVsQyxNQUFNLENBQUM7RUFFNUQsS0FBQTJELGdCQUFBLEdBQUl6QixRQUFRLENBQUNLLEtBQUssY0FBQW9CLGdCQUFBLGVBQWRBLGdCQUFBLENBQWdCbkIsT0FBTyxFQUFFO0lBQzNCTixRQUFRLEdBQUdXLDRCQUE0QixDQUFDWCxRQUFRLEVBQUV0RSxLQUFLLENBQUM2RCxRQUFRLEVBQUU3RCxLQUFLLENBQUM2RCxRQUFRLENBQUNPLFNBQVMsQ0FBQztFQUM3RjtFQUVBLE9BQUEzRCxhQUFBLENBQUFBLGFBQUEsS0FDS1QsS0FBSztJQUNSc0UsUUFBUSxFQUFSQTtFQUFRO0FBRVosQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNMEIsOEJBQThCLEdBQUcsU0FBakNBLDhCQUE4QkEsQ0FDekNoRyxLQUFvQixFQUNwQm9DLE1BQW9DLEVBQ2xCO0VBQ2xCLElBQUtyQixRQUFRLEdBQUlmLEtBQUssQ0FBakJlLFFBQVE7RUFDYixJQUFNa0YsYUFBYSxHQUFHbEYsUUFBUSxDQUFDSyxNQUFNLENBQUM4RSxTQUFTLENBQUMsVUFBQTNDLEtBQUs7SUFBQSxPQUFJQSxLQUFLLEtBQUtuQixNQUFNLENBQUMrRCxRQUFRO0VBQUEsRUFBQztFQUNuRnBGLFFBQVEsR0FBR3BELHNCQUFzQixDQUFDb0QsUUFBUSxFQUFFcUIsTUFBTSxDQUFDO0VBQ25ELElBQU1nRSxRQUFRLEdBQUdyRixRQUFRLENBQUNLLE1BQU0sQ0FBQzZFLGFBQWEsQ0FBQztFQUMvQyxJQUFJbEUsTUFBTSxDQUFDQyxTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDa0UsUUFBUSxhQUFSQSxRQUFRLHVCQUFSQSxRQUFRLENBQUU1QyxpQkFBaUIsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFO0lBQzNGLElBQU9LLFFBQVEsR0FBSTdELEtBQUssQ0FBakI2RCxRQUFRO0lBQ2YsSUFBT0ssU0FBUyxHQUFJTCxRQUFRLENBQUNJLFNBQVMsQ0FBQ0osUUFBUSxDQUFDTyxTQUFTLENBQUMsQ0FBbkRGLFNBQVM7SUFDaEIsSUFBT2Ysa0JBQWtCLEdBQUlpRCxRQUFRLENBQUM1RyxNQUFNLENBQUNpRSxTQUFTLENBQS9DTixrQkFBa0I7SUFDekIsUUFBUWUsU0FBUztNQUNmLEtBQUtsRixvQkFBb0IsQ0FBQ3VGLElBQUk7UUFDNUIsSUFBSSxDQUFDcEIsa0JBQWtCLEVBQUU7VUFDdkJwQyxRQUFRLEdBQUdtQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUVrRCxRQUFRLENBQUN0RixFQUFFLENBQUMsQ0FBQ0MsUUFBUSxDQUFDO1FBQ2pFO1FBQ0E7TUFDRixLQUFLL0Isb0JBQW9CLENBQUN5RixLQUFLO1FBQzdCLElBQUl0QixrQkFBa0IsRUFBRTtVQUN0QnBDLFFBQVEsR0FBR21DLHVCQUF1QixDQUFDLEtBQUssRUFBRWtELFFBQVEsQ0FBQ3RGLEVBQUUsQ0FBQyxDQUFDQyxRQUFRLENBQUM7UUFDbEU7UUFDQTtNQUNGO01BQ0E7SUFDRjtFQUNGO0VBQ0EsT0FBQU4sYUFBQSxDQUFBQSxhQUFBLEtBQ0tULEtBQUs7SUFDUmUsUUFBUSxFQUFSQTtFQUFRO0FBRVosQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU0zRCxxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXFCQSxDQUNoQzRDLEtBQW9CLEVBQ3BCb0MsTUFBbUMsRUFDakI7RUFBQSxJQUFBaUUscUJBQUE7RUFDbEIsSUFBTUMsUUFBUSxHQUFBN0YsYUFBQSxDQUFBQSxhQUFBLEtBQ1RULEtBQUs7SUFDUmUsUUFBUSxFQUFFbkQsNkJBQTZCLENBQUNvQyxLQUFLLENBQUNlLFFBQVEsRUFBRXFCLE1BQU0sQ0FBQztJQUMvRG1FLE9BQU8sRUFBRWxKLDRCQUE0QixDQUFDMkMsS0FBSyxDQUFDdUcsT0FBTyxDQUFDO0lBQ3BEakMsUUFBUSxFQUFFdkcsNkJBQTZCLENBQUNpQyxLQUFLLENBQUNzRSxRQUFRO0VBQUMsRUFDeEQ7RUFFRCxJQUFNa0MsT0FBTyxHQUFHRixRQUFRLENBQUN2RixRQUFRLENBQUMwRixTQUFTLENBQUNuRCxNQUFNLEtBQUssQ0FBQztFQUN4RCxJQUFNb0QsY0FBYyxJQUFBTCxxQkFBQSxHQUFHQyxRQUFRLENBQUNDLE9BQU8sQ0FBQ0ksV0FBVyxjQUFBTixxQkFBQSxnQkFBQUEscUJBQUEsR0FBNUJBLHFCQUFBLENBQThCTyxTQUFTLGNBQUFQLHFCQUFBLHVCQUF2Q0EscUJBQUEsQ0FBeUNRLE1BQU07RUFDdEUsSUFBSUwsT0FBTyxJQUFJLENBQUNFLGNBQWMsRUFBRTtJQUM5QkosUUFBUSxDQUFDQyxPQUFPLEdBQUdwSix1QkFBdUIsQ0FBQ21KLFFBQVEsQ0FBQ0MsT0FBTyxFQUFFO01BQzNEbEcsT0FBTyxFQUFFO1FBQUN5RyxPQUFPLEVBQUUsV0FBVztRQUFFQyxLQUFLLEVBQUUzRSxNQUFNLENBQUMvQjtNQUFPO0lBQ3ZELENBQUMsQ0FBQztFQUNKO0VBRUEsT0FBT2lHLFFBQVE7QUFDakIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU10SSxzQkFBc0IsR0FBRyxTQUF6QkEsc0JBQXNCQSxDQUNqQ2dDLEtBQW9CLEVBQ3BCb0MsTUFBb0QsRUFDbEM7RUFBQSxJQUFBNEUscUJBQUE7RUFDbEIsSUFBT0MsWUFBWSxHQUFJN0UsTUFBTSxDQUFDL0IsT0FBTyxDQUE5QjRHLFlBQVk7RUFDbkIsSUFBTUMsUUFBUSxHQUFHbEgsS0FBSyxDQUFDc0UsUUFBUSxDQUFDMkMsWUFBWTtFQUU1QyxJQUFJQSxZQUFZLEtBQUtDLFFBQVEsRUFBRTtJQUM3QixPQUFPbEgsS0FBSztFQUNkO0VBRUEsSUFBTW1ILFdBQVcsR0FBR2xKLDhCQUE4QixDQUFDK0IsS0FBSyxDQUFDc0UsUUFBUSxFQUFFbEMsTUFBTSxDQUFDO0VBRTFFLElBQUlnRixXQUFXLEdBQUEzRyxhQUFBLEtBQU9ULEtBQUssQ0FBQ2UsUUFBUSxDQUFDO0VBRXJDLFFBQVFrRyxZQUFZO0lBQ2xCLEtBQUs5SCxZQUFZLENBQUNrSSxVQUFVO01BQzFCRCxXQUFXLEdBQUEzRyxhQUFBLENBQUFBLGFBQUEsS0FDTjJHLFdBQVc7UUFDZFgsU0FBUyxFQUFFO01BQUUsRUFDZDtNQUNEO0lBQ0YsS0FBS3RILFlBQVksQ0FBQ21JLFFBQVE7SUFDMUIsS0FBS25JLFlBQVksQ0FBQ29JLGFBQWE7TUFDN0IsSUFBSUwsUUFBUSxLQUFLL0gsWUFBWSxDQUFDa0ksVUFBVSxFQUFFO1FBQ3hDRCxXQUFXLEdBQUEzRyxhQUFBLENBQUFBLGFBQUEsS0FDTjJHLFdBQVc7VUFDZFgsU0FBUyxFQUFFM0gscUJBQXFCLENBQUNzSSxXQUFXLENBQUNoRyxNQUFNLEVBQUU7WUFDbkRvRyxTQUFTLEVBQUVQLFlBQVksS0FBSzlILFlBQVksQ0FBQ29JO1VBQzNDLENBQUM7UUFBQyxFQUNIO01BQ0g7TUFDQTtJQUNGO01BQ0U7RUFDSjtFQUVBLElBQUlFLFVBQVUsR0FBR3BLLDRCQUE0QixDQUFDMkMsS0FBSyxDQUFDdUcsT0FBTyxDQUFDO0VBRTVELElBQU1DLE9BQU8sR0FBR1ksV0FBVyxDQUFDWCxTQUFTLENBQUNuRCxNQUFNLEtBQUssQ0FBQztFQUNsRCxJQUFNb0QsY0FBYyxJQUFBTSxxQkFBQSxHQUFHUyxVQUFVLENBQUNkLFdBQVcsY0FBQUsscUJBQUEsZ0JBQUFBLHFCQUFBLEdBQXRCQSxxQkFBQSxDQUF3QkosU0FBUyxjQUFBSSxxQkFBQSx1QkFBakNBLHFCQUFBLENBQW1DSCxNQUFNO0VBQ2hFLElBQUlMLE9BQU8sSUFBSSxDQUFDRSxjQUFjLEVBQUU7SUFDOUJlLFVBQVUsR0FBR3RLLHVCQUF1QixDQUFDc0ssVUFBVSxFQUFFO01BQy9DcEgsT0FBTyxFQUFFO1FBQUN5RyxPQUFPLEVBQUUsV0FBVztRQUFFQyxLQUFLLEVBQUU7TUFBQztJQUMxQyxDQUFDLENBQUM7RUFDSjtFQUVBLE9BQUF0RyxhQUFBLENBQUFBLGFBQUEsS0FDS1QsS0FBSztJQUNSc0UsUUFBUSxFQUFFNkMsV0FBVztJQUNyQnBHLFFBQVEsRUFBRXFHLFdBQVc7SUFDckJiLE9BQU8sRUFBRWtCO0VBQVU7QUFFdkIsQ0FBQztBQUVELElBQU1DLDhCQUE4QixHQUFHO0VBQ3JDOUgsa0JBQWtCLEVBQUUsSUFBSTtFQUN4QkQsU0FBUyxFQUFFLElBQUk7RUFDZkUsZ0JBQWdCLEVBQUU7QUFDcEIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU04SCx1QkFBdUIsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUNsQzNILEtBQW9CLEVBQUE0SCxLQUFBLEVBRUY7RUFBQSxJQURqQnZILE9BQU8sR0FBQXVILEtBQUEsQ0FBUHZILE9BQU87RUFFUixJQUFPd0gsa0JBQWtCLEdBQWdDeEgsT0FBTyxDQUF6RHdILGtCQUFrQjtJQUFFQyxZQUFZLEdBQWtCekgsT0FBTyxDQUFyQ3lILFlBQVk7SUFBQUMsZ0JBQUEsR0FBa0IxSCxPQUFPLENBQXZCRyxPQUFPO0lBQVBBLE9BQU8sR0FBQXVILGdCQUFBLGNBQUcsQ0FBQyxDQUFDLEdBQUFBLGdCQUFBO0VBQ3JELElBQU1DLG1CQUFtQixHQUFBdkgsYUFBQSxDQUFBQSxhQUFBLEtBQU9pSCw4QkFBOEIsR0FBS2xILE9BQU8sQ0FBQzs7RUFFM0U7RUFDQSxJQUFJLENBQUNSLEtBQUssQ0FBQ2UsUUFBUSxDQUFDVCxRQUFRLENBQUN1SCxrQkFBa0IsQ0FBQyxFQUFFO0lBQ2hELE9BQU83SCxLQUFLO0VBQ2Q7RUFDQTtFQUNBLElBQU1pSSxXQUFXLEdBQUdILFlBQVksQ0FBQ3ZILElBQUksQ0FBQ08sRUFBRTtFQUN4QyxJQUFJLENBQUNtSCxXQUFXLEVBQUU7SUFDaEIsT0FBT2pJLEtBQUs7RUFDZDtFQUNBO0VBQ0EsSUFBTWtJLGFBQWEsR0FBQXpILGFBQUEsQ0FBQUEsYUFBQSxLQUNkVCxLQUFLO0lBQ1JlLFFBQVEsRUFBRWxELDZCQUE2QixDQUFDbUMsS0FBSyxDQUFDZSxRQUFRLEVBQUU4RyxrQkFBa0IsRUFBRUksV0FBVztFQUFDLEVBQ3pGO0VBRUQsSUFBTTFGLFNBQVMsR0FBR3hDLG1CQUFtQixDQUNuQ21JLGFBQWEsRUFDYjVKLFFBQVEsQ0FBQztJQUNQZ0MsUUFBUSxFQUFFd0gsWUFBWTtJQUN0QjtJQUNBdEgsT0FBTyxFQUFFd0g7RUFDWCxDQUFDLENBQ0gsQ0FBQztFQUVELE9BQU96RixTQUFTO0FBQ2xCLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
package/dist/esm/layer-utils.js
CHANGED
|
@@ -189,7 +189,9 @@ export function renderDeckGlLayer(props, layerCallbacks) {
|
|
|
189
189
|
var _ref2 = dataset || {},
|
|
190
190
|
gpuFilter = _ref2.gpuFilter;
|
|
191
191
|
var objectHovered = clicked || hoverInfo;
|
|
192
|
-
|
|
192
|
+
// in split mode a layer missing from mapLayers is hidden, so coerce to a boolean
|
|
193
|
+
// instead of leaking undefined into deck.gl's visible prop
|
|
194
|
+
var visible = !mapLayers || Boolean(mapLayers[layer.id]);
|
|
193
195
|
// Layer is Layer class
|
|
194
196
|
return layer.renderLayer({
|
|
195
197
|
data: data,
|
|
@@ -253,7 +255,8 @@ function computeDeckLayersFromLayerOrder(layerOrder, layers, layerData, currentL
|
|
|
253
255
|
interactionConfig = renderProps.interactionConfig,
|
|
254
256
|
animationConfig = renderProps.animationConfig,
|
|
255
257
|
mapLayers = renderProps.mapLayers,
|
|
256
|
-
hasShadowEffect = renderProps.hasShadowEffect
|
|
258
|
+
hasShadowEffect = renderProps.hasShadowEffect,
|
|
259
|
+
isAnnotationMode = renderProps.isAnnotationMode;
|
|
257
260
|
return layerOrder.slice().reverse().reduce(function (overlays, element) {
|
|
258
261
|
if (isPlainObject(element)) {
|
|
259
262
|
var layerGroup = element;
|
|
@@ -288,7 +291,8 @@ function computeDeckLayersFromLayerOrder(layerOrder, layers, layerData, currentL
|
|
|
288
291
|
animationConfig: animationConfig,
|
|
289
292
|
mapLayers: mapLayers,
|
|
290
293
|
experimentalContext: {
|
|
291
|
-
hasShadowEffect: hasShadowEffect
|
|
294
|
+
hasShadowEffect: hasShadowEffect,
|
|
295
|
+
isAnnotationMode: isAnnotationMode
|
|
292
296
|
}
|
|
293
297
|
}, bindedLayerCallbacks);
|
|
294
298
|
return overlays.concat(layerOverlay || []);
|
|
@@ -316,7 +320,8 @@ export function computeDeckLayers(_ref4, options, layerCallbacks, deckGlProps) {
|
|
|
316
320
|
mapboxApiUrl = _ref5.mapboxApiUrl,
|
|
317
321
|
primaryMap = _ref5.primaryMap,
|
|
318
322
|
layersForDeck = _ref5.layersForDeck,
|
|
319
|
-
editorInfo = _ref5.editorInfo
|
|
323
|
+
editorInfo = _ref5.editorInfo,
|
|
324
|
+
isAnnotationMode = _ref5.isAnnotationMode;
|
|
320
325
|
var dataLayers = [];
|
|
321
326
|
var hasShadowEffect = effects.some(function (effect) {
|
|
322
327
|
return effect.type === LIGHT_AND_SHADOW_EFFECT.type;
|
|
@@ -338,7 +343,8 @@ export function computeDeckLayers(_ref4, options, layerCallbacks, deckGlProps) {
|
|
|
338
343
|
interactionConfig: interactionConfig,
|
|
339
344
|
animationConfig: animationConfig,
|
|
340
345
|
mapLayers: mapLayers,
|
|
341
|
-
hasShadowEffect: hasShadowEffect
|
|
346
|
+
hasShadowEffect: hasShadowEffect,
|
|
347
|
+
isAnnotationMode: isAnnotationMode
|
|
342
348
|
}, layerCallbacks));
|
|
343
349
|
}
|
|
344
350
|
var layerId = element;
|
|
@@ -367,7 +373,8 @@ export function computeDeckLayers(_ref4, options, layerCallbacks, deckGlProps) {
|
|
|
367
373
|
animationConfig: animationConfig,
|
|
368
374
|
mapLayers: mapLayers,
|
|
369
375
|
experimentalContext: {
|
|
370
|
-
hasShadowEffect: hasShadowEffect
|
|
376
|
+
hasShadowEffect: hasShadowEffect,
|
|
377
|
+
isAnnotationMode: isAnnotationMode
|
|
371
378
|
}
|
|
372
379
|
}, bindedLayerCallbacks);
|
|
373
380
|
return overlays.concat(layerOverlay || []);
|
|
@@ -382,6 +389,7 @@ export function computeDeckLayers(_ref4, options, layerCallbacks, deckGlProps) {
|
|
|
382
389
|
mapboxApiAccessToken: mapboxApiAccessToken,
|
|
383
390
|
mapboxApiUrl: mapboxApiUrl,
|
|
384
391
|
threeDBuildingColor: mapStyle.threeDBuildingColor,
|
|
392
|
+
pickable: Boolean(isAnnotationMode),
|
|
385
393
|
updateTriggers: {
|
|
386
394
|
getFillColor: mapStyle.threeDBuildingColor
|
|
387
395
|
}
|
|
@@ -599,4 +607,4 @@ export function areAnyDeckLayersLoading(layers) {
|
|
|
599
607
|
return layer.internalState && !layer.isLoaded;
|
|
600
608
|
});
|
|
601
609
|
}
|
|
602
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb25zb2xlIiwiR0VPQ09ERVJfTEFZRVJfSUQiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsIk9WRVJMQVlfVFlQRV9DT05TVCIsImdldEVkaXRvckxheWVyIiwiaXNGdW5jdGlvbiIsImdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMiLCJEYXRhUm93IiwiaXNQbGFpbk9iamVjdCIsImFycmF5TW92ZSIsImdlbmVyYXRlSGFzaElkIiwiVGhyZWVEQnVpbGRpbmdMYXllciIsImZpbmREZWZhdWx0TGF5ZXIiLCJkYXRhc2V0IiwibGF5ZXJDbGFzc2VzIiwibGF5ZXJQcm9wcyIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJwcmV2aW91cyIsImxjIiwicmVzdWx0IiwiZmluZERlZmF1bHRMYXllclByb3BzIiwicHJvcHMiLCJBcnJheSIsImlzQXJyYXkiLCJmb3VuZExheWVycyIsImNvbmNhdCIsIm1hcCIsInAiLCJfb2JqZWN0U3ByZWFkIiwidHlwZSIsImRhdGFJZCIsImlkIiwiaXNWaXNpYmxlIiwibGF5ZXIiLCJzZXRJbml0aWFsTGF5ZXJDb25maWciLCJkYXRhQ29udGFpbmVyIiwibWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzIiwic3RhdGUiLCJwYXRjaCIsImRhdGFzZXRJZHNUb1BhdGNoIiwibGVuZ3RoIiwiaGFzRGVmaW5lZFBhdGNoVmFsdWUiLCJzb21lIiwia2V5IiwidW5kZWZpbmVkIiwiZGF0YXNldElkU2V0IiwiU2V0IiwibGF5ZXJzIiwiY29uZmlnIiwiaGFzIiwic2V0dGluZ3MiLCJ2aXNDb25maWdTZXR0aW5ncyIsImFsbG93ZWRLZXlzIiwiZmlsdGVyIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwicGFydGlhbCIsImFjYyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwibGF5ZXJEYXRhIiwiaXNWYWxpZCIsIl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMiLCJoYXNBbGxDb2x1bW5zIiwiZm9ybWF0TGF5ZXJEYXRhIiwiZGF0YXNldHMiLCJ1cGRhdGVMYXllckNvbmZpZyIsImVycm9yTWVzc2FnZSIsImVyciIsImVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwic3Vic3RyaW5nIiwiZ2V0TGF5ZXJIb3ZlclByb3AiLCJfcmVmIiwiYW5pbWF0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Db25maWciLCJob3ZlckluZm8iLCJsYXllcnNUb1JlbmRlciIsInRvb2x0aXAiLCJlbmFibGVkIiwicGlja2VkIiwib2JqZWN0Iiwib3ZlcmxheSIsImlkeCIsImluZGV4IiwiZ2V0SG92ZXJEYXRhIiwiX2RhdGFzZXRzJGRhdGFJZCIsImZpZWxkcyIsImRhdGEiLCJmaWVsZHNUb1Nob3ciLCJjdXJyZW50VGltZSIsInJlbmRlckRlY2tHbExheWVyIiwibGF5ZXJDYWxsYmFja3MiLCJsYXllckluZGV4IiwiY2xpY2tlZCIsIm1hcFN0YXRlIiwibWFwTGF5ZXJzIiwiZXhwZXJpbWVudGFsQ29udGV4dCIsIl9yZWYyIiwiZ3B1RmlsdGVyIiwib2JqZWN0SG92ZXJlZCIsInZpc2libGUiLCJyZW5kZXJMYXllciIsImlzTGF5ZXJSZW5kZXJhYmxlIiwic2hvdWxkUmVuZGVyTGF5ZXIiLCJpc0xheWVyVmlzaWJsZSIsInByZXBhcmVMYXllcnNGb3JEZWNrIiwiYWNjdSIsIl9kZWZpbmVQcm9wZXJ0eSIsIm92ZXJsYXlUeXBlIiwiZGVja2dsIiwicHJlcGFyZUxheWVyc1RvUmVuZGVyIiwiZ2V0Q3VzdG9tRGVja0xheWVycyIsImRlY2tHbFByb3BzIiwiYm90dG9tRGVja0xheWVycyIsInRvcERlY2tMYXllcnMiLCJ0b3BMYXllcnMiLCJiaW5kTGF5ZXJDYWxsYmFja3MiLCJhcmd1bWVudHMiLCJ2YWwiLCJjb21wdXRlRGVja0xheWVyc0Zyb21MYXllck9yZGVyIiwibGF5ZXJPcmRlciIsImN1cnJlbnRMYXllcnNGb3JEZWNrIiwicmVuZGVyUHJvcHMiLCJoYXNTaGFkb3dFZmZlY3QiLCJzbGljZSIsInJldmVyc2UiLCJvdmVybGF5cyIsImVsZW1lbnQiLCJsYXllckdyb3VwIiwibGF5ZXJJZCIsImZpbmRJbmRleCIsIl9yZWYzIiwiYmluZGVkTGF5ZXJDYWxsYmFja3MiLCJsYXllck92ZXJsYXkiLCJjb21wdXRlRGVja0xheWVycyIsIl9yZWY0Iiwib3B0aW9ucyIsInZpc1N0YXRlIiwibWFwU3R5bGUiLCJlZmZlY3RzIiwic3BsaXRNYXBzIiwiX3JlZjUiLCJtYXBJbmRleCIsIm1hcGJveEFwaUFjY2Vzc1Rva2VuIiwibWFwYm94QXBpVXJsIiwicHJpbWFyeU1hcCIsImxheWVyc0ZvckRlY2siLCJlZGl0b3JJbmZvIiwiZGF0YUxheWVycyIsImVmZmVjdCIsIl9yZWY2IiwidmlzaWJsZUxheWVyR3JvdXBzIiwicHVzaCIsInRocmVlREJ1aWxkaW5nQ29sb3IiLCJ1cGRhdGVUcmlnZ2VycyIsImdldEZpbGxDb2xvciIsIl9nZXRDdXN0b21EZWNrTGF5ZXJzIiwiX2dldEN1c3RvbURlY2tMYXllcnMyIiwiX3NsaWNlZFRvQXJyYXkiLCJjdXN0b21Cb3R0b21EZWNrTGF5ZXJzIiwiY3VzdG9tVG9wRGVja0xheWVycyIsImVkaXRvckxheWVyIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJfcmVmNyIsImdldE5ld0xheWVyR3JvdXAiLCJfcHJvcHMkaWQiLCJfcHJvcHMkbGFiZWwiLCJfcHJvcHMkaXNWaXNpYmxlIiwiX3Byb3BzJGxheWVyT3JkZXIiLCJfcHJvcHMkaXNJbmNsdWRlZEluTGUiLCJsYWJlbCIsImlzSW5jbHVkZWRJbkxlZ2VuZCIsImFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlciIsImF0SW5kZXgiLCJzcGxpY2UiLCJyZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIiLCJlbGVtZW50SWQiLCJuZXdMYXllck9yZGVyIiwiZW50cnkiLCJncm91cCIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImxheWVyR3JvdXBJZCIsImkiLCJncnAiLCJmaW5kUGFyZW50R3JvdXBGb3JMYXllciIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImUiLCJuZXN0ZWQiLCJmIiwiZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkIiwibGF5ZXJFbnRyeUlkIiwiaXNMYXllclByZXNlbnRJbkxheWVyT3JkZXIiLCJmb3VuZCIsInJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyIiwib2xkRW50cnkiLCJuZXdFbnRyeSIsIm9sZEVudHJ5SWQiLCJ1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyIiwibmV3TGF5ZXJHcm91cCIsImdldEZsYXRMYXllck9yZGVyIiwib3JkZXJFbnRyeSIsImJ1aWxkTGF5ZXJPcmRlckhpZXJhcmNoeSIsInZhbGlkTGF5ZXJzIiwiQm9vbGVhbiIsImZpbmQiLCJsIiwiaGlkZGVuIiwicmVtb3ZlR2hvc3RMYXllckZyb21MYXllck9yZGVyIiwicmVvcmRlckxheWVyT3JkZXIiLCJvcmlnaW5MYXllcklkIiwiZGVzdGluYXRpb25MYXllcklkIiwiYWN0aXZlSW5kZXgiLCJvdmVySW5kZXgiLCJhZGRMYXllclRvTGF5ZXJPcmRlciIsImdldExheWVySG92ZXJQcm9wVmFsdWUiLCJmaWVsZEluZGV4IiwidmFsdWVBdCIsImFyZUFueURlY2tMYXllcnNMb2FkaW5nIiwiaW50ZXJuYWxTdGF0ZSIsImlzTG9hZGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xheWVyLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBDb25zb2xlIGZyb20gJ2dsb2JhbC9jb25zb2xlJztcblxuaW1wb3J0IHtHRU9DT0RFUl9MQVlFUl9JRCwgTElHSFRfQU5EX1NIQURPV19FRkZFQ1R9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TGF5ZXIgYXMgRGVja0xheWVyfSBmcm9tICdAZGVjay5nbC9jb3JlJztcbnR5cGUgRGVja0xheWVyUHJvcHMgPSBhbnk7XG5pbXBvcnQge1xuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFRvb2x0aXBGaWVsZCxcbiAgQ29tcGFyZVR5cGUsXG4gIFNwbGl0TWFwTGF5ZXJzLFxuICBFZGl0b3IsXG4gIEZlYXR1cmUsXG4gIEZlYXR1cmVTZWxlY3Rpb25Db250ZXh0LFxuICBCaW5kZWRMYXllckNhbGxiYWNrcyxcbiAgTGF5ZXJDYWxsYmFja3MsXG4gIFZpZXdwb3J0LFxuICBMYXllck9yZGVyR3JvdXAsXG4gIExheWVyT3JkZXIsXG4gIExheWVyT3JkZXJFbnRyeSxcbiAgRmxhdExheWVyT3JkZXIsXG4gIExheWVyT3JkZXJIaWVyYXJjaHlcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge1xuICBGaW5kRGVmYXVsdExheWVyUHJvcHNSZXR1cm5WYWx1ZSxcbiAgRmluZERlZmF1bHRMYXllclByb3BzLFxuICBMYXllcixcbiAgTGF5ZXJDbGFzc2VzVHlwZSxcbiAgT1ZFUkxBWV9UWVBFX0NPTlNULFxuICBnZXRFZGl0b3JMYXllclxufSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5cbmltcG9ydCBLZXBsZXJUYWJsZSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7VmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5pbXBvcnQge2lzRnVuY3Rpb24sIGdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMsIERhdGFSb3csIGlzUGxhaW5PYmplY3R9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHthcnJheU1vdmUsIGdlbmVyYXRlSGFzaElkfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5cbmltcG9ydCB7VGhyZWVEQnVpbGRpbmdMYXllcn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcblxuZXhwb3J0IHR5cGUgTGF5ZXJzVG9SZW5kZXIgPSB7XG4gIFtsYXllcklkOiBzdHJpbmddOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQWdncmVnYXRpb25MYXllckhvdmVyRGF0YSA9IHtcbiAgcG9pbnRzOiBhbnlbXTtcbiAgY29sb3JWYWx1ZT86IGFueTtcbiAgZWxldmF0aW9uVmFsdWU/OiBhbnk7XG4gIGFnZ3JlZ2F0ZWREYXRhPzogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICBtZWFzdXJlOiBzdHJpbmc7XG4gICAgICB2YWx1ZT86IGFueTtcbiAgICB9XG4gID47XG59O1xuXG5leHBvcnQgdHlwZSBMYXllckhvdmVyUHJvcCA9IHtcbiAgZGF0YTogRGF0YVJvdyB8IEFnZ3JlZ2F0aW9uTGF5ZXJIb3ZlckRhdGEgfCBhbnlbXSB8IG51bGw7XG4gIGZpZWxkczogRmllbGRbXTtcbiAgZmllbGRzVG9TaG93OiBUb29sdGlwRmllbGRbXTtcbiAgbGF5ZXI6IExheWVyO1xuICBwcmltYXJ5RGF0YT86IERhdGFSb3cgfCBBZ2dyZWdhdGlvbkxheWVySG92ZXJEYXRhIHwgYW55W10gfCBudWxsO1xuICBjb21wYXJlVHlwZT86IENvbXBhcmVUeXBlO1xuICBjdXJyZW50VGltZT86IFZpc1N0YXRlWydhbmltYXRpb25Db25maWcnXVsnY3VycmVudFRpbWUnXTtcbn07XG5cbi8qKlxuICogRmluZCBkZWZhdWx0IGxheWVycyBmcm9tIGZpZWxkc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZERlZmF1bHRMYXllcihkYXRhc2V0OiBLZXBsZXJUYWJsZSwgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXNUeXBlKTogTGF5ZXJbXSB7XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyUHJvcHMgPSAoT2JqZWN0LmtleXMobGF5ZXJDbGFzc2VzKSBhcyBBcnJheTxrZXlvZiBMYXllckNsYXNzZXNUeXBlPikucmVkdWNlKFxuICAgIChwcmV2aW91cywgbGMpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdDogRmluZERlZmF1bHRMYXllclByb3BzUmV0dXJuVmFsdWUgPVxuICAgICAgICB0eXBlb2YgbGF5ZXJDbGFzc2VzW2xjXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IGxheWVyQ2xhc3Nlc1tsY10uZmluZERlZmF1bHRMYXllclByb3BzKGRhdGFzZXQsIHByZXZpb3VzKVxuICAgICAgICAgIDoge3Byb3BzOiBbXX07XG5cbiAgICAgIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuICAgICAgY29uc3QgZm91bmRMYXllcnMgPSByZXN1bHQuZm91bmRMYXllcnMgfHwgcHJldmlvdXM7XG5cbiAgICAgIHJldHVybiBmb3VuZExheWVycy5jb25jYXQoXG4gICAgICAgIHByb3BzLm1hcChwID0+ICh7XG4gICAgICAgICAgLi4ucCxcbiAgICAgICAgICB0eXBlOiBsYyxcbiAgICAgICAgICBkYXRhSWQ6IGRhdGFzZXQuaWQsXG4gICAgICAgICAgLy8gc2V0IGFyYyBsYXllciBpbml0aWFsIHZpc2libGl0eSB0byBmYWxzZSwgYmVjYXVzZSBhcmNzIHRlbmQgdG8gYmUgdG9vIG11c3lcbiAgICAgICAgICAuLi4obGMgPT09ICdhcmMnIHx8IGxjID09PSAnbGluZScgPyB7aXNWaXNpYmxlOiBmYWxzZX0gOiB7fSlcbiAgICAgICAgfSkpXG4gICAgICApO1xuICAgIH0sXG4gICAgW10gYXMgKEZpbmREZWZhdWx0TGF5ZXJQcm9wcyAmIHt0eXBlOiBzdHJpbmd9KVtdXG4gICk7XG5cbiAgLy8gZ28gdGhyb3VnaCBhbGwgbGF5ZXJQcm9wcyB0byBjcmVhdGUgbGF5ZXJcbiAgcmV0dXJuIGxheWVyUHJvcHMubWFwKHByb3BzID0+IHtcbiAgICBjb25zdCBsYXllciA9IG5ldyBsYXllckNsYXNzZXNbcHJvcHMudHlwZV0ocHJvcHMpO1xuICAgIHJldHVybiB0eXBlb2YgbGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nICYmIGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgICAgPyBsYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICAgIDogbGF5ZXI7XG4gIH0pO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYHBhdGNoYCB0byBgY29uZmlnLnZpc0NvbmZpZ2Agb25seSBmb3IgbGF5ZXJzIHdob3NlIGBkYXRhSWRgIGlzIGluIGBkYXRhc2V0SWRzVG9QYXRjaGAuXG4gKiBMYXllcnMgZm9yIGRhdGFzZXRzIHRoYXQgd2VyZSBhbHJlYWR5IG9uIHRoZSBtYXAgYXJlIGxlZnQgdW5jaGFuZ2VkIOKAlCBgYWRkRGF0YVRvTWFwYFxuICogS2V5cyB3aG9zZSBwYXRjaCB2YWx1ZSBpcyBgdW5kZWZpbmVkYCBhcmUgc2tpcHBlZCBzbyBleGlzdGluZyB2aXNDb25maWcgaXMgbm90IGNsZWFyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF0Y2g6IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+IHwgdW5kZWZpbmVkLFxuICBkYXRhc2V0SWRzVG9QYXRjaDogc3RyaW5nW11cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFwYXRjaCB8fCAhT2JqZWN0LmtleXMocGF0Y2gpLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGhhc0RlZmluZWRQYXRjaFZhbHVlID0gKE9iamVjdC5rZXlzKHBhdGNoKSBhcyBBcnJheTxrZXlvZiBMYXllclZpc0NvbmZpZz4pLnNvbWUoXG4gICAga2V5ID0+IHBhdGNoW2tleV0gIT09IHVuZGVmaW5lZFxuICApO1xuICBpZiAoIWhhc0RlZmluZWRQYXRjaFZhbHVlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldElkU2V0ID0gbmV3IFNldChkYXRhc2V0SWRzVG9QYXRjaCk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgICAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkIHx8ICFkYXRhc2V0SWRTZXQuaGFzKGxheWVyLmNvbmZpZy5kYXRhSWQpKSB7XG4gICAgICAgIHJldHVybiBsYXllcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gbGF5ZXIudmlzQ29uZmlnU2V0dGluZ3M7XG4gICAgICBpZiAoIXNldHRpbmdzKSB7XG4gICAgICAgIHJldHVybiBsYXllcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFsbG93ZWRLZXlzID0gKE9iamVjdC5rZXlzKHBhdGNoKSBhcyBBcnJheTxrZXlvZiBMYXllclZpc0NvbmZpZz4pLmZpbHRlcihcbiAgICAgICAga2V5ID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZXR0aW5ncywga2V5KSAmJiBwYXRjaFtrZXldICE9PSB1bmRlZmluZWRcbiAgICAgICk7XG4gICAgICBpZiAoIWFsbG93ZWRLZXlzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbGF5ZXI7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJ0aWFsID0gYWxsb3dlZEtleXMucmVkdWNlPFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+PigoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgYWNjW2tleV0gPSBwYXRjaFtrZXldO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pO1xuICAgICAgcmV0dXJuIGxheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHBhcnRpYWwpO1xuICAgIH0pXG4gIH07XG59XG5cbnR5cGUgTWluVmlzU3RhdGVGb3JMYXllckRhdGEgPSB7XG4gIGRhdGFzZXRzOiBWaXNTdGF0ZVsnZGF0YXNldHMnXTtcbiAgYW5pbWF0aW9uQ29uZmlnOiBWaXNTdGF0ZVsnYW5pbWF0aW9uQ29uZmlnJ107XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSBsYXllciBkYXRhIGJhc2VkIG9uIGxheWVyIHR5cGUsIGNvbCBDb25maWcsXG4gKiByZXR1cm4gdXBkYXRlZCBsYXllciBpZiBjb2xvckRvbWFpbiwgZGF0YU1hcCBoYXMgY2hhbmdlZC5cbiAqIEFsc28sIHJldHVybnMgdXBkYXRlZCBsYXllciBpbiBjYXNlIHRoZSBpbnB1dCBsYXllciB3YXMgaW4gaW52YWxpZCBzdGF0ZS5cbiAqIEFkZHMgYW4gZXJyb3IgbWVzc2FnZSB0byB0aGUgbGF5ZXIgaW4gY2FzZSBvZiBhbiBleGNlcHRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVMYXllckRhdGE8UyBleHRlbmRzIE1pblZpc1N0YXRlRm9yTGF5ZXJEYXRhPihcbiAgbGF5ZXI6IExheWVyLFxuICBzdGF0ZTogUyxcbiAgb2xkTGF5ZXJEYXRhPzogYW55XG4pOiB7XG4gIGxheWVyRGF0YTogYW55O1xuICBsYXllcjogTGF5ZXI7XG59IHtcbiAgbGV0IGxheWVyRGF0YTtcbiAgdHJ5IHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIHVwZGF0ZXMgZGF0YSBhZnRlciBhbiBlcnJvclxuICAgIGlmICghbGF5ZXIuaXNWYWxpZCkge1xuICAgICAgbGF5ZXIuX29sZERhdGFVcGRhdGVUcmlnZ2VycyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoIWxheWVyLnR5cGUgfHwgIWxheWVyLmhhc0FsbENvbHVtbnMoKSB8fCAhbGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgICAgcmV0dXJuIHtsYXllciwgbGF5ZXJEYXRhOiB7fX07XG4gICAgfVxuXG4gICAgbGF5ZXJEYXRhID0gbGF5ZXIuZm9ybWF0TGF5ZXJEYXRhKHN0YXRlLmRhdGFzZXRzLCBvbGRMYXllckRhdGEpO1xuXG4gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgZGF0YSBmb3IgdGhlIGxheWVyIGlzIHVwZGF0ZWQgd2l0aG91dCBlcnJvcnNcbiAgICBpZiAoIWxheWVyLmlzVmFsaWQpIHtcbiAgICAgIC8vIFN3aXRjaCB0byB2aXNpYmxlIGFmdGVyIGFuIGVycm9yXG4gICAgICBsYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgbGF5ZXIuaXNWYWxpZCA9IHRydWU7XG4gICAgbGF5ZXIuZXJyb3JNZXNzYWdlID0gbnVsbDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgQ29uc29sZS5lcnJvcihlcnIpO1xuICAgIGxheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgIH0pO1xuICAgIGxheWVyLmlzVmFsaWQgPSBmYWxzZTtcblxuICAgIGxheWVyLmVycm9yTWVzc2FnZSA9XG4gICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnIubWVzc2FnZSA/IGVyci5tZXNzYWdlLnN1YnN0cmluZygwLCAxMDApIDogJ1Vua25vd24gZXJyb3InO1xuXG4gICAgbGF5ZXJEYXRhID0ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxheWVyLFxuICAgIGxheWVyRGF0YVxuICB9O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBwcm9wcyBwYXNzZWQgdG8gTGF5ZXJIb3ZlckluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExheWVySG92ZXJQcm9wKHtcbiAgYW5pbWF0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgaG92ZXJJbmZvLFxuICBsYXllcnMsXG4gIGxheWVyc1RvUmVuZGVyLFxuICBkYXRhc2V0c1xufToge1xuICBpbnRlcmFjdGlvbkNvbmZpZzogVmlzU3RhdGVbJ2ludGVyYWN0aW9uQ29uZmlnJ107XG4gIGFuaW1hdGlvbkNvbmZpZzogVmlzU3RhdGVbJ2FuaW1hdGlvbkNvbmZpZyddO1xuICBob3ZlckluZm86IFZpc1N0YXRlWydob3ZlckluZm8nXTtcbiAgbGF5ZXJzOiBWaXNTdGF0ZVsnbGF5ZXJzJ107XG4gIGxheWVyc1RvUmVuZGVyOiBMYXllcnNUb1JlbmRlcjtcbiAgZGF0YXNldHM6IFZpc1N0YXRlWydkYXRhc2V0cyddO1xufSk6IExheWVySG92ZXJQcm9wIHwgbnVsbCB7XG4gIGlmIChpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmVuYWJsZWQgJiYgaG92ZXJJbmZvICYmIGhvdmVySW5mby5waWNrZWQpIHtcbiAgICAvLyBpZiBhbnl0aGluZyBob3ZlcmVkXG4gICAgY29uc3Qge29iamVjdCwgbGF5ZXI6IG92ZXJsYXl9ID0gaG92ZXJJbmZvO1xuXG4gICAgLy8gZGVja2dsIGxheWVyIHRvIGtlcGxlci1nbCBsYXllclxuICAgIGNvbnN0IGxheWVyID0gbGF5ZXJzW292ZXJsYXkucHJvcHMuaWR4XTtcblxuICAgIC8vIE5PVEU6IGZvciBiaW5hcnkgZm9ybWF0IEdlb2pzb25MYXllciwgZGVjayB3aWxsIHJldHVybiBvYmplY3Q9bnVsbCBidXQgaG92ZXJJbmZvLmluZGV4ID49IDBcbiAgICBpZiAoXG4gICAgICAob2JqZWN0IHx8IGhvdmVySW5mby5pbmRleCA+PSAwKSAmJlxuICAgICAgbGF5ZXIgJiZcbiAgICAgIGxheWVyLmdldEhvdmVyRGF0YSAmJlxuICAgICAgbGF5ZXJzVG9SZW5kZXJbbGF5ZXIuaWRdXG4gICAgKSB7XG4gICAgICAvLyBpZiBsYXllciBpcyB2aXNpYmxlIGFuZCBoYXZlIGhvdmVyZWQgZGF0YVxuICAgICAgY29uc3Qge1xuICAgICAgICBjb25maWc6IHtkYXRhSWR9XG4gICAgICB9ID0gbGF5ZXI7XG4gICAgICBpZiAoIWRhdGFJZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtkYXRhQ29udGFpbmVyLCBmaWVsZHN9ID0gZGF0YXNldHNbZGF0YUlkXTtcbiAgICAgIGNvbnN0IGRhdGE6IERhdGFSb3cgfCBudWxsID0gbGF5ZXIuZ2V0SG92ZXJEYXRhKFxuICAgICAgICBvYmplY3QgfHwgaG92ZXJJbmZvLmluZGV4LFxuICAgICAgICBkYXRhQ29udGFpbmVyLFxuICAgICAgICBmaWVsZHMsXG4gICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgaG92ZXJJbmZvXG4gICAgICApO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZmllbGRzVG9TaG93ID0gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGEsXG4gICAgICAgIGZpZWxkcyxcbiAgICAgICAgZmllbGRzVG9TaG93LFxuICAgICAgICBsYXllcixcbiAgICAgICAgY3VycmVudFRpbWU6IGFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckRlY2tHbExheWVyKHByb3BzOiBhbnksIGxheWVyQ2FsbGJhY2tzOiB7W2tleTogc3RyaW5nXTogYW55fSkge1xuICBjb25zdCB7XG4gICAgZGF0YXNldHMsXG4gICAgbGF5ZXIsXG4gICAgbGF5ZXJJbmRleCxcbiAgICBkYXRhLFxuICAgIGhvdmVySW5mbyxcbiAgICBjbGlja2VkLFxuICAgIG1hcFN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBtYXBMYXllcnMsXG4gICAgZXhwZXJpbWVudGFsQ29udGV4dFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXTtcbiAgY29uc3Qge2dwdUZpbHRlcn0gPSBkYXRhc2V0IHx8IHt9O1xuICBjb25zdCBvYmplY3RIb3ZlcmVkID0gY2xpY2tlZCB8fCBob3ZlckluZm87XG4gIGNvbnN0IHZpc2libGUgPSAhbWFwTGF5ZXJzIHx8IChtYXBMYXllcnMgJiYgbWFwTGF5ZXJzW2xheWVyLmlkXSk7XG4gIC8vIExheWVyIGlzIExheWVyIGNsYXNzXG4gIHJldHVybiBsYXllci5yZW5kZXJMYXllcih7XG4gICAgZGF0YSxcbiAgICBncHVGaWx0ZXIsXG4gICAgaWR4OiBsYXllckluZGV4LFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGxheWVyQ2FsbGJhY2tzLFxuICAgIG1hcFN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBvYmplY3RIb3ZlcmVkLFxuICAgIHZpc2libGUsXG4gICAgZGF0YXNldCxcbiAgICBleHBlcmltZW50YWxDb250ZXh0XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMYXllclJlbmRlcmFibGUobGF5ZXI6IExheWVyLCBsYXllckRhdGEpIHtcbiAgcmV0dXJuIGxheWVyLmlkICE9PSBHRU9DT0RFUl9MQVlFUl9JRCAmJiBsYXllci5zaG91bGRSZW5kZXJMYXllcihsYXllckRhdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMYXllclZpc2libGUobGF5ZXIsIG1hcExheWVycykge1xuICByZXR1cm4gKFxuICAgIGxheWVyLmNvbmZpZy5pc1Zpc2libGUgJiZcbiAgICAvLyBpZiBsYXllci5pZCBpcyBub3QgaW4gbWFwTGF5ZXJzLCBkb24ndCByZW5kZXIgaXRcbiAgICAoIW1hcExheWVycyB8fCAobWFwTGF5ZXJzICYmIG1hcExheWVyc1tsYXllci5pZF0pKVxuICApO1xufVxuXG4vLyBQcmVwYXJlIGEgZGljdCBvZiBsYXllcnMgcmVuZGVyZWQgYnkgdGhlIGRlY2suZ2xcbi8vIE5vdGUsIGlzVmlzaWJsZTogZmFsc2UgbGF5ZXIgaXMgcGFzc2VkIHRvIGRlY2suZ2wgaGVyZVxuLy8gcmV0dXJuIHtbaWRdOiB0cnVlIFxcIGZhbHNlfVxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVMYXllcnNGb3JEZWNrKFxuICBsYXllcnM6IExheWVyW10sXG4gIGxheWVyRGF0YTogVmlzU3RhdGVbJ2xheWVyRGF0YSddXG4pOiB7XG4gIFtrZXk6IHN0cmluZ106IGJvb2xlYW47XG59IHtcbiAgcmV0dXJuIGxheWVycy5yZWR1Y2UoXG4gICAgKGFjY3UsIGxheWVyLCBpZHgpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2xheWVyLmlkXTpcbiAgICAgICAgaXNMYXllclJlbmRlcmFibGUobGF5ZXIsIGxheWVyRGF0YVtpZHhdKSAmJiBsYXllci5vdmVybGF5VHlwZSA9PT0gT1ZFUkxBWV9UWVBFX0NPTlNULmRlY2tnbFxuICAgIH0pLFxuICAgIHt9XG4gICk7XG59XG5cbi8vIFByZXBhcmUgYSBkaWN0IG9mIHJlbmRlcmVkIGxheWVycyByZW5kZXJlZCBpbiB0aGUgbWFwXG4vLyBUaGlzIGluY2x1ZGVzIG9ubHkgdGhlIHZpc2liaWxlIGxheWVycyBmb3Igc2luZ2xlIG1hcCB2aWV3IGFuZCBzcGxpdCBtYXAgdmlld1xuLy8gcmV0dXJuIHtbaWRdOiB0cnVlIFxcIGZhbHNlfVxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVMYXllcnNUb1JlbmRlcihcbiAgbGF5ZXJzOiBMYXllcltdLFxuICBsYXllckRhdGE6IFZpc1N0YXRlWydsYXllckRhdGEnXSxcbiAgbWFwTGF5ZXJzPzogU3BsaXRNYXBMYXllcnMgfCB1bmRlZmluZWQgfCBudWxsXG4pOiBMYXllcnNUb1JlbmRlciB7XG4gIHJldHVybiBsYXllcnMucmVkdWNlKFxuICAgIChhY2N1LCBsYXllciwgaWR4KSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtsYXllci5pZF06IGlzTGF5ZXJSZW5kZXJhYmxlKGxheWVyLCBsYXllckRhdGFbaWR4XSkgJiYgaXNMYXllclZpc2libGUobGF5ZXIsIG1hcExheWVycylcbiAgICB9KSxcbiAgICB7fVxuICApO1xufVxuXG50eXBlIEN1c3RvbURlY2tMYXllciA9IERlY2tMYXllcjxEZWNrTGF5ZXJQcm9wcz47XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXN0b21EZWNrTGF5ZXJzKGRlY2tHbFByb3BzPzogYW55KTogW0N1c3RvbURlY2tMYXllcltdLCBDdXN0b21EZWNrTGF5ZXJbXV0ge1xuICBjb25zdCBib3R0b21EZWNrTGF5ZXJzID0gQXJyYXkuaXNBcnJheShkZWNrR2xQcm9wcz8ubGF5ZXJzKVxuICAgID8gZGVja0dsUHJvcHM/LmxheWVyc1xuICAgIDogaXNGdW5jdGlvbihkZWNrR2xQcm9wcz8ubGF5ZXJzKVxuICAgID8gZGVja0dsUHJvcHM/LmxheWVycygpXG4gICAgOiBbXTtcbiAgY29uc3QgdG9wRGVja0xheWVycyA9IEFycmF5LmlzQXJyYXkoZGVja0dsUHJvcHM/LnRvcExheWVycylcbiAgICA/IGRlY2tHbFByb3BzPy50b3BMYXllcnNcbiAgICA6IGlzRnVuY3Rpb24oZGVja0dsUHJvcHM/LnRvcExheWVycylcbiAgICA/IGRlY2tHbFByb3BzPy50b3BMYXllcnMoKVxuICAgIDogW107XG5cbiAgcmV0dXJuIFtib3R0b21EZWNrTGF5ZXJzLCB0b3BEZWNrTGF5ZXJzXTtcbn1cblxuZXhwb3J0IHR5cGUgQ29tcHV0ZURlY2tMYXllcnNQcm9wcyA9IHtcbiAgbWFwSW5kZXg/OiBudW1iZXI7XG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICBtYXBib3hBcGlVcmw/OiBzdHJpbmc7XG4gIHByaW1hcnlNYXA/OiBib29sZWFuO1xuICBsYXllcnNGb3JEZWNrPzoge1trZXk6IHN0cmluZ106IGJvb2xlYW59O1xuICBlZGl0b3JJbmZvPzoge1xuICAgIGVkaXRvcjogRWRpdG9yO1xuICAgIGVkaXRvck1lbnVBY3RpdmU6IGJvb2xlYW47XG4gICAgb25TZXRGZWF0dXJlczogKGZlYXR1cmVzOiBGZWF0dXJlW10pID0+IGFueTtcbiAgICBzZXRTZWxlY3RlZEZlYXR1cmU6IChcbiAgICAgIGZlYXR1cmU6IEZlYXR1cmUgfCBudWxsLFxuICAgICAgc2VsZWN0aW9uQ29udGV4dD86IEZlYXR1cmVTZWxlY3Rpb25Db250ZXh0XG4gICAgKSA9PiBhbnk7XG4gICAgb25BcHBseVBvbHlnb25GaWx0ZXJBbGw/OiAoZmVhdHVyZTogRmVhdHVyZSkgPT4gYW55O1xuICAgIGZlYXR1cmVDb2xsZWN0aW9uOiB7XG4gICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICBmZWF0dXJlczogRmVhdHVyZVtdO1xuICAgIH07XG4gICAgc2VsZWN0ZWRGZWF0dXJlSW5kZXhlczogbnVtYmVyW107XG4gICAgdmlld3BvcnQ6IFZpZXdwb3J0O1xuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRMYXllckNhbGxiYWNrcyhcbiAgbGF5ZXJDYWxsYmFja3M6IExheWVyQ2FsbGJhY2tzID0ge30sXG4gIGlkeDogbnVtYmVyXG4pOiBCaW5kZWRMYXllckNhbGxiYWNrcyB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhsYXllckNhbGxiYWNrcykucmVkdWNlKFxuICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2tleV06IHZhbCA9PiBsYXllckNhbGxiYWNrc1trZXldKGlkeCwgdmFsKVxuICAgIH0pLFxuICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsICh2YWw6IHVua25vd24pID0+IHZvaWQ+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVEZWNrTGF5ZXJzRnJvbUxheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IExheWVyT3JkZXIsXG4gIGxheWVyczogTGF5ZXJbXSxcbiAgbGF5ZXJEYXRhOiBhbnlbXSxcbiAgY3VycmVudExheWVyc0ZvckRlY2s6IHtba2V5OiBzdHJpbmddOiBib29sZWFufSxcbiAgcmVuZGVyUHJvcHM6IHtcbiAgICBkYXRhc2V0czogYW55O1xuICAgIGhvdmVySW5mbzogYW55O1xuICAgIGNsaWNrZWQ6IGFueTtcbiAgICBtYXBTdGF0ZTogYW55O1xuICAgIGludGVyYWN0aW9uQ29uZmlnOiBhbnk7XG4gICAgYW5pbWF0aW9uQ29uZmlnOiBhbnk7XG4gICAgbWFwTGF5ZXJzOiBhbnk7XG4gICAgaGFzU2hhZG93RWZmZWN0OiBib29sZWFuO1xuICB9LFxuICBsYXllckNhbGxiYWNrcz86IGFueVxuKTogYW55W10ge1xuICBjb25zdCB7ZGF0YXNldHMsIGhvdmVySW5mbywgY2xpY2tlZCwgbWFwU3RhdGUsIGludGVyYWN0aW9uQ29uZmlnLCBhbmltYXRpb25Db25maWcsIG1hcExheWVycywgaGFzU2hhZG93RWZmZWN0fSA9IHJlbmRlclByb3BzO1xuICByZXR1cm4gbGF5ZXJPcmRlclxuICAgIC5zbGljZSgpXG4gICAgLnJldmVyc2UoKVxuICAgIC5yZWR1Y2UoKG92ZXJsYXlzLCBlbGVtZW50KSA9PiB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBsYXllckdyb3VwID0gZWxlbWVudCBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICAgIGlmICghbGF5ZXJHcm91cC5pc1Zpc2libGUpIHtcbiAgICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG92ZXJsYXlzLmNvbmNhdChcbiAgICAgICAgICBjb21wdXRlRGVja0xheWVyc0Zyb21MYXllck9yZGVyKFxuICAgICAgICAgICAgbGF5ZXJHcm91cC5sYXllck9yZGVyLFxuICAgICAgICAgICAgbGF5ZXJzLFxuICAgICAgICAgICAgbGF5ZXJEYXRhLFxuICAgICAgICAgICAgY3VycmVudExheWVyc0ZvckRlY2ssXG4gICAgICAgICAgICByZW5kZXJQcm9wcyxcbiAgICAgICAgICAgIGxheWVyQ2FsbGJhY2tzXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgbGF5ZXJJZCA9IGVsZW1lbnQgYXMgc3RyaW5nO1xuICAgICAgaWYgKCFjdXJyZW50TGF5ZXJzRm9yRGVja1tsYXllcklkXSkge1xuICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXllckluZGV4ID0gbGF5ZXJzLmZpbmRJbmRleCgoe2lkfSkgPT4gaWQgPT09IGxheWVySWQpO1xuICAgICAgaWYgKGxheWVySW5kZXggPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBvdmVybGF5cztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJpbmRlZExheWVyQ2FsbGJhY2tzID0gbGF5ZXJDYWxsYmFja3NcbiAgICAgICAgPyBiaW5kTGF5ZXJDYWxsYmFja3MobGF5ZXJDYWxsYmFja3MsIGxheWVySW5kZXgpXG4gICAgICAgIDoge307XG4gICAgICBjb25zdCBsYXllciA9IGxheWVyc1tsYXllckluZGV4XTtcbiAgICAgIGNvbnN0IGRhdGEgPSBsYXllckRhdGFbbGF5ZXJJbmRleF07XG4gICAgICBjb25zdCBsYXllck92ZXJsYXkgPSByZW5kZXJEZWNrR2xMYXllcihcbiAgICAgICAge1xuICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgIGxheWVyLFxuICAgICAgICAgIGxheWVySW5kZXgsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBob3ZlckluZm8sXG4gICAgICAgICAgY2xpY2tlZCxcbiAgICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgbWFwTGF5ZXJzLFxuICAgICAgICAgIGV4cGVyaW1lbnRhbENvbnRleHQ6IHtcbiAgICAgICAgICAgIGhhc1NoYWRvd0VmZmVjdFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYmluZGVkTGF5ZXJDYWxsYmFja3NcbiAgICAgICk7XG4gICAgICByZXR1cm4gb3ZlcmxheXMuY29uY2F0KGxheWVyT3ZlcmxheSB8fCBbXSk7XG4gICAgfSwgW10gYXMgYW55W10pO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVEZWNrTGF5ZXJzKFxuICB7dmlzU3RhdGUsIG1hcFN0YXRlLCBtYXBTdHlsZX06IGFueSxcbiAgb3B0aW9ucz86IENvbXB1dGVEZWNrTGF5ZXJzUHJvcHMsXG4gIGxheWVyQ2FsbGJhY2tzPzogTGF5ZXJDYWxsYmFja3MsXG4gIGRlY2tHbFByb3BzPzogYW55XG4pOiBMYXllcltdIHtcbiAgY29uc3Qge1xuICAgIGRhdGFzZXRzLFxuICAgIGVmZmVjdHMsXG4gICAgbGF5ZXJzLFxuICAgIGxheWVyT3JkZXIsXG4gICAgbGF5ZXJEYXRhLFxuICAgIGhvdmVySW5mbyxcbiAgICBjbGlja2VkLFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBzcGxpdE1hcHNcbiAgfSA9IHZpc1N0YXRlO1xuXG4gIGNvbnN0IHttYXBJbmRleCwgbWFwYm94QXBpQWNjZXNzVG9rZW4sIG1hcGJveEFwaVVybCwgcHJpbWFyeU1hcCwgbGF5ZXJzRm9yRGVjaywgZWRpdG9ySW5mb30gPVxuICAgIG9wdGlvbnMgfHwge307XG5cbiAgbGV0IGRhdGFMYXllcnM6IGFueVtdID0gW107XG5cbiAgY29uc3QgaGFzU2hhZG93RWZmZWN0ID0gZWZmZWN0cy5zb21lKGVmZmVjdCA9PiB7XG4gICAgcmV0dXJuIGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlO1xuICB9KTtcblxuICBpZiAobGF5ZXJEYXRhICYmIGxheWVyRGF0YS5sZW5ndGgpIHtcbiAgICBjb25zdCBtYXBMYXllcnMgPSBnZXRNYXBMYXllcnNGcm9tU3BsaXRNYXBzKHNwbGl0TWFwcywgbWFwSW5kZXggfHwgMCk7XG5cbiAgICBjb25zdCBjdXJyZW50TGF5ZXJzRm9yRGVjayA9IGxheWVyc0ZvckRlY2sgfHwgcHJlcGFyZUxheWVyc0ZvckRlY2sobGF5ZXJzLCBsYXllckRhdGEpO1xuXG4gICAgZGF0YUxheWVycyA9IGxheWVyT3JkZXJcbiAgICAgIC5zbGljZSgpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAucmVkdWNlKChvdmVybGF5cywgZWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoaXNQbGFpbk9iamVjdChlbGVtZW50KSkge1xuICAgICAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBlbGVtZW50IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgICAgICBpZiAoIWxheWVyR3JvdXAuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvdmVybGF5cy5jb25jYXQoXG4gICAgICAgICAgICBjb21wdXRlRGVja0xheWVyc0Zyb21MYXllck9yZGVyKFxuICAgICAgICAgICAgICBsYXllckdyb3VwLmxheWVyT3JkZXIsXG4gICAgICAgICAgICAgIGxheWVycyxcbiAgICAgICAgICAgICAgbGF5ZXJEYXRhLFxuICAgICAgICAgICAgICBjdXJyZW50TGF5ZXJzRm9yRGVjayxcbiAgICAgICAgICAgICAge2RhdGFzZXRzLCBob3ZlckluZm8sIGNsaWNrZWQsIG1hcFN0YXRlLCBpbnRlcmFjdGlvbkNvbmZpZywgYW5pbWF0aW9uQ29uZmlnLCBtYXBMYXllcnMsIGhhc1NoYWRvd0VmZmVjdH0sXG4gICAgICAgICAgICAgIGxheWVyQ2FsbGJhY2tzXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXllcklkID0gZWxlbWVudCBhcyBzdHJpbmc7XG4gICAgICAgIGlmICghY3VycmVudExheWVyc0ZvckRlY2tbbGF5ZXJJZF0pIHtcbiAgICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGF5ZXJJbmRleCA9IGxheWVycy5maW5kSW5kZXgoKHtpZH0pID0+IGlkID09PSBsYXllcklkKTtcbiAgICAgICAgaWYgKGxheWVySW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIG92ZXJsYXlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJpbmRlZExheWVyQ2FsbGJhY2tzID0gbGF5ZXJDYWxsYmFja3NcbiAgICAgICAgICA/IGJpbmRMYXllckNhbGxiYWNrcyhsYXllckNhbGxiYWNrcywgbGF5ZXJJbmRleClcbiAgICAgICAgICA6IHt9O1xuICAgICAgICBjb25zdCBsYXllciA9IGxheWVyc1tsYXllckluZGV4XTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGxheWVyRGF0YVtsYXllckluZGV4XTtcbiAgICAgICAgY29uc3QgbGF5ZXJPdmVybGF5ID0gcmVuZGVyRGVja0dsTGF5ZXIoXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGF0YXNldHMsXG4gICAgICAgICAgICBsYXllcixcbiAgICAgICAgICAgIGxheWVySW5kZXgsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgaG92ZXJJbmZvLFxuICAgICAgICAgICAgY2xpY2tlZCxcbiAgICAgICAgICAgIG1hcFN0YXRlLFxuICAgICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgICBtYXBMYXllcnMsXG4gICAgICAgICAgICBleHBlcmltZW50YWxDb250ZXh0OiB7XG4gICAgICAgICAgICAgIGhhc1NoYWRvd0VmZmVjdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYmluZGVkTGF5ZXJDYWxsYmFja3NcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG92ZXJsYXlzLmNvbmNhdChsYXllck92ZXJsYXkgfHwgW10pO1xuICAgICAgfSwgW10pO1xuICB9XG5cbiAgaWYgKCFwcmltYXJ5TWFwKSB7XG4gICAgcmV0dXJuIGRhdGFMYXllcnM7XG4gIH1cblxuICBpZiAoXG4gICAgbWFwU3R5bGU/LnZpc2libGVMYXllckdyb3Vwc1snM2QgYnVpbGRpbmcnXSAmJlxuICAgIHByaW1hcnlNYXAgJiZcbiAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbiAmJlxuICAgIG1hcGJveEFwaVVybFxuICApIHtcbiAgICBkYXRhTGF5ZXJzLnB1c2goXG4gICAgICBuZXcgVGhyZWVEQnVpbGRpbmdMYXllcih7XG4gICAgICAgIGlkOiAnX2tlcGxlcmdsXzNkLWJ1aWxkaW5nJyxcbiAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgIG1hcGJveEFwaVVybCxcbiAgICAgICAgdGhyZWVEQnVpbGRpbmdDb2xvcjogbWFwU3R5bGUudGhyZWVEQnVpbGRpbmdDb2xvcixcbiAgICAgICAgdXBkYXRlVHJpZ2dlcnM6IHtcbiAgICAgICAgICBnZXRGaWxsQ29sb3I6IG1hcFN0eWxlLnRocmVlREJ1aWxkaW5nQ29sb3JcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgY29uc3QgW2N1c3RvbUJvdHRvbURlY2tMYXllcnMsIGN1c3RvbVRvcERlY2tMYXllcnNdID0gZ2V0Q3VzdG9tRGVja0xheWVycyhkZWNrR2xQcm9wcyk7XG5cbiAgY29uc3QgZWRpdG9yTGF5ZXI6IGFueVtdID0gW107XG4gIGlmIChlZGl0b3JJbmZvKSB7XG4gICAgZWRpdG9yTGF5ZXIucHVzaChcbiAgICAgIGdldEVkaXRvckxheWVyKHtcbiAgICAgICAgLi4uZWRpdG9ySW5mbyxcbiAgICAgICAgbWFwU3RhdGVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBbLi4uY3VzdG9tQm90dG9tRGVja0xheWVycywgLi4uZGF0YUxheWVycywgLi4uY3VzdG9tVG9wRGVja0xheWVycywgLi4uZWRpdG9yTGF5ZXJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJPcmRlckZyb21MYXllcnM8VCBleHRlbmRzIHtpZDogc3RyaW5nfT4obGF5ZXJzOiBUW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBsYXllcnMubWFwKCh7aWR9KSA9PiBpZCk7XG59XG5cbi8vIC0tLSBMYXllciBHcm91cCBVdGlsaXRpZXMgLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdMYXllckdyb3VwKHByb3BzPzogUGFydGlhbDxMYXllck9yZGVyR3JvdXA+KTogTGF5ZXJPcmRlckdyb3VwIHtcbiAgcmV0dXJuIHtcbiAgICBpZDogcHJvcHM/LmlkID8/IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGxhYmVsOiBwcm9wcz8ubGFiZWwgPz8gJ05ldyBncm91cCcsXG4gICAgaXNWaXNpYmxlOiBwcm9wcz8uaXNWaXNpYmxlID8/IHRydWUsXG4gICAgbGF5ZXJPcmRlcjogcHJvcHM/LmxheWVyT3JkZXIgPz8gW10sXG4gICAgaXNJbmNsdWRlZEluTGVnZW5kOiBwcm9wcz8uaXNJbmNsdWRlZEluTGVnZW5kID8/IHRydWVcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgZWxlbWVudDogTGF5ZXJPcmRlckVudHJ5LFxuICBhdEluZGV4PzogbnVtYmVyXG4pOiBMYXllck9yZGVyIHtcbiAgY29uc3QgaWR4ID0gYXRJbmRleCA/PyAwO1xuICBjb25zdCByZXN1bHQgPSBbLi4ubGF5ZXJPcmRlcl07XG4gIHJlc3VsdC5zcGxpY2UoaWR4LCAwLCBlbGVtZW50KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgZWxlbWVudDogTGF5ZXJPcmRlckVudHJ5XG4pOiBMYXllck9yZGVyIHtcbiAgaWYgKCFsYXllck9yZGVyKSByZXR1cm4gW107XG4gIGNvbnN0IGVsZW1lbnRJZCA9IHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJyA/IGVsZW1lbnQgOiBlbGVtZW50LmlkO1xuICBsZXQgbmV3TGF5ZXJPcmRlciA9IGxheWVyT3JkZXIuZmlsdGVyKGVudHJ5ID0+IHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIHJldHVybiAoZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKS5pZCAhPT0gZWxlbWVudElkO1xuICAgIH1cbiAgICByZXR1cm4gZW50cnkgIT09IGVsZW1lbnRJZDtcbiAgfSk7XG5cbiAgbmV3TGF5ZXJPcmRlciA9IG5ld0xheWVyT3JkZXIubWFwKGVudHJ5ID0+IHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgIGxheWVyT3JkZXI6IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihncm91cC5sYXllck9yZGVyLCBlbGVtZW50SWQpXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZW50cnk7XG4gIH0pO1xuXG4gIHJldHVybiBuZXdMYXllck9yZGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBsYXllckdyb3VwSWQ6IHN0cmluZ1xuKTogTGF5ZXJPcmRlckdyb3VwIHwgdW5kZWZpbmVkIHtcbiAgbGV0IGdyb3VwOiBMYXllck9yZGVyR3JvdXAgfCB1bmRlZmluZWQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5ZXJPcmRlci5sZW5ndGggJiYgIWdyb3VwOyBpKyspIHtcbiAgICBjb25zdCBlbnRyeSA9IGxheWVyT3JkZXJbaV07XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBjb25zdCBncnAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBncm91cCA9XG4gICAgICAgIGdycC5pZCA9PT0gbGF5ZXJHcm91cElkID8gZ3JwIDogZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKGdycC5sYXllck9yZGVyLCBsYXllckdyb3VwSWQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZ3JvdXA7XG59XG5cbi8qKlxuICogRmluZCB0aGUgcGFyZW50IGdyb3VwIHRoYXQgY29udGFpbnMgYSBnaXZlbiBsYXllciBJRC5cbiAqIFJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBsYXllciBpcyBhdCB0aGUgcm9vdCBsZXZlbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRQYXJlbnRHcm91cEZvckxheWVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBsYXllcklkOiBzdHJpbmdcbik6IExheWVyT3JkZXJHcm91cCB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgZW50cnkgb2YgbGF5ZXJPcmRlcikge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgY29uc3QgZ3JvdXAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBpZiAoZ3JvdXAubGF5ZXJPcmRlci5zb21lKGUgPT4gdHlwZW9mIGUgPT09ICdzdHJpbmcnICYmIGUgPT09IGxheWVySWQpKSB7XG4gICAgICAgIHJldHVybiBncm91cDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5lc3RlZCA9IGZpbmRQYXJlbnRHcm91cEZvckxheWVyKGdyb3VwLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICAgICAgaWYgKG5lc3RlZCkgcmV0dXJuIG5lc3RlZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEluZGV4RnJvbUxheWVyRW50cnlJZChsYXllck9yZGVyOiBMYXllck9yZGVyLCBsYXllckVudHJ5SWQ6IHN0cmluZyk6IG51bWJlciB7XG4gIHJldHVybiBsYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgIGlzUGxhaW5PYmplY3QoZW50cnkpID8gKGVudHJ5IGFzIExheWVyT3JkZXJHcm91cCkuaWQgPT09IGxheWVyRW50cnlJZCA6IGVudHJ5ID09PSBsYXllckVudHJ5SWRcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGF5ZXJQcmVzZW50SW5MYXllck9yZGVyKGxheWVyT3JkZXI6IExheWVyT3JkZXIsIGxheWVySWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXllck9yZGVyLmxlbmd0aCAmJiAhZm91bmQ7IGkrKykge1xuICAgIGNvbnN0IGVudHJ5ID0gbGF5ZXJPcmRlcltpXTtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIGZvdW5kID0gaXNMYXllclByZXNlbnRJbkxheWVyT3JkZXIoKGVudHJ5IGFzIExheWVyT3JkZXJHcm91cCkubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvdW5kID0gbGF5ZXJJZCA9PT0gZW50cnk7XG4gICAgfVxuICB9XG4gIHJldHVybiBmb3VuZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBvbGRFbnRyeTogTGF5ZXJPcmRlckVudHJ5LFxuICBuZXdFbnRyeTogTGF5ZXJPcmRlckVudHJ5XG4pOiBMYXllck9yZGVyIHtcbiAgY29uc3Qgb2xkRW50cnlJZCA9IHR5cGVvZiBvbGRFbnRyeSA9PT0gJ3N0cmluZycgPyBvbGRFbnRyeSA6IG9sZEVudHJ5LmlkO1xuICByZXR1cm4gbGF5ZXJPcmRlci5tYXAoZW50cnkgPT4ge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZW50cnkgPT09IG9sZEVudHJ5SWQgPyBuZXdFbnRyeSA6IGVudHJ5O1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIGNvbnN0IGdycCA9IGVudHJ5IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgIGlmIChncnAuaWQgPT09IG9sZEVudHJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIG5ld0VudHJ5O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZ3JwLFxuICAgICAgICBsYXllck9yZGVyOiByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlcihncnAubGF5ZXJPcmRlciwgb2xkRW50cnksIG5ld0VudHJ5KVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJ5O1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IExheWVyT3JkZXIsXG4gIG5ld0xheWVyR3JvdXA6IExheWVyT3JkZXJHcm91cFxuKTogTGF5ZXJPcmRlciB7XG4gIHJldHVybiBsYXllck9yZGVyLm1hcChlbnRyeSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBjb25zdCBncnAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBpZiAoZ3JwLmlkID09PSBuZXdMYXllckdyb3VwLmlkKSB7XG4gICAgICAgIHJldHVybiBuZXdMYXllckdyb3VwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZ3JwLFxuICAgICAgICBsYXllck9yZGVyOiB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKGdycC5sYXllck9yZGVyLCBuZXdMYXllckdyb3VwKVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJ5O1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZsYXRMYXllck9yZGVyKGxheWVyT3JkZXI6IExheWVyT3JkZXIpOiBGbGF0TGF5ZXJPcmRlciB7XG4gIHJldHVybiBsYXllck9yZGVyLnJlZHVjZSgoYWNjLCBvcmRlckVudHJ5KSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3Qob3JkZXJFbnRyeSkpIHtcbiAgICAgIHJldHVybiBbLi4uYWNjLCAuLi5nZXRGbGF0TGF5ZXJPcmRlcigob3JkZXJFbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmxheWVyT3JkZXIpXTtcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5hY2MsIG9yZGVyRW50cnkgYXMgc3RyaW5nXTtcbiAgfSwgW10gYXMgRmxhdExheWVyT3JkZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMYXllck9yZGVySGllcmFyY2h5KFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBsYXllcnM/OiBMYXllcltdIHwgcmVhZG9ubHkgTGF5ZXJbXVxuKTogTGF5ZXJPcmRlckhpZXJhcmNoeSB7XG4gIGNvbnN0IHZhbGlkTGF5ZXJzID0gbGF5ZXJzPy5maWx0ZXIoQm9vbGVhbik7XG4gIHJldHVybiBsYXllck9yZGVyLnJlZHVjZSgoYWNjLCBlbGVtZW50KSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBbLi4uYWNjLCBbJ2xheWVyR3JvdXAnLCBlbGVtZW50IGFzIExheWVyT3JkZXJHcm91cF0gYXMgY29uc3RdO1xuICAgIH1cbiAgICBjb25zdCBsYXllciA9IHZhbGlkTGF5ZXJzPy5maW5kKGwgPT4gbC5pZCA9PT0gZWxlbWVudCk7XG4gICAgaWYgKCFsYXllciB8fCBsYXllci5jb25maWcuaGlkZGVuKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cbiAgICByZXR1cm4gWy4uLmFjYywgWydsYXllcicsIGxheWVyXSBhcyBjb25zdF07XG4gIH0sIFtdIGFzIExheWVyT3JkZXJIaWVyYXJjaHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlR2hvc3RMYXllckZyb21MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBsYXllcnM6IHtpZDogc3RyaW5nfVtdXG4pOiBMYXllck9yZGVyIHtcbiAgcmV0dXJuIGxheWVyT3JkZXIucmVkdWNlKChhY2MsIGVudHJ5KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChsYXllcnMuZmluZChsID0+IGwuaWQgPT09IGVudHJ5KSkge1xuICAgICAgICBhY2MucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGdycCA9IGVudHJ5IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgIGlmIChncnAubGF5ZXJPcmRlcikge1xuICAgICAgICBhY2MucHVzaCh7XG4gICAgICAgICAgLi4uZ3JwLFxuICAgICAgICAgIGxheWVyT3JkZXI6IHJlbW92ZUdob3N0TGF5ZXJGcm9tTGF5ZXJPcmRlcihncnAubGF5ZXJPcmRlciwgbGF5ZXJzKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10gYXMgTGF5ZXJPcmRlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW9yZGVyTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogVmlzU3RhdGVbJ2xheWVyT3JkZXInXSxcbiAgb3JpZ2luTGF5ZXJJZDogc3RyaW5nLFxuICBkZXN0aW5hdGlvbkxheWVySWQ6IHN0cmluZ1xuKTogVmlzU3RhdGVbJ2xheWVyT3JkZXInXSB7XG4gIGNvbnN0IGFjdGl2ZUluZGV4ID0gZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkKGxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICBjb25zdCBvdmVySW5kZXggPSBnZXRJbmRleEZyb21MYXllckVudHJ5SWQobGF5ZXJPcmRlciwgZGVzdGluYXRpb25MYXllcklkKTtcblxuICBpZiAoYWN0aXZlSW5kZXggPT09IC0xIHx8IG92ZXJJbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gbGF5ZXJPcmRlcjtcbiAgfVxuICByZXR1cm4gYXJyYXlNb3ZlKGxheWVyT3JkZXIsIGFjdGl2ZUluZGV4LCBvdmVySW5kZXgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkTGF5ZXJUb0xheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IFZpc1N0YXRlWydsYXllck9yZGVyJ10sXG4gIGxheWVySWQ6IHN0cmluZ1xuKTogTGF5ZXJPcmRlciB7XG4gIHJldHVybiBbbGF5ZXJJZCwgLi4ubGF5ZXJPcmRlcl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXllckhvdmVyUHJvcFZhbHVlKFxuICBkYXRhOiBEYXRhUm93IHwgQWdncmVnYXRpb25MYXllckhvdmVyRGF0YSB8IGFueVtdIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgZmllbGRJbmRleDogbnVtYmVyXG4pIHtcbiAgaWYgKCFkYXRhKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIERhdGFSb3cpIHJldHVybiBkYXRhLnZhbHVlQXQoZmllbGRJbmRleCk7XG4gIHJldHVybiBkYXRhW2ZpZWxkSW5kZXhdO1xufVxuXG4vKiogQ2hlY2tzIGlmIGFueSBEZWNrIGxheWVycyBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgbG9hZGluZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcmVBbnlEZWNrTGF5ZXJzTG9hZGluZyhsYXllcnM6IERlY2tMYXllcltdKTogYm9vbGVhbiB7XG4gIHJldHVybiBsYXllcnMuc29tZShcbiAgICAvLyBsYXllci5pc0xvYWRlZCBjaGFuZ2VzIGZyZXF1ZW50bHkgaW4gRGVjayAoZXZlbiBvbiBob3Zlcikgc28gd2UgY2hlY2sgYWRkaXRpb25hbCBwcm9wZXJ0aWVzXG4gICAgbGF5ZXIgPT4gbGF5ZXIuaW50ZXJuYWxTdGF0ZSAmJiAhbGF5ZXIuaXNMb2FkZWRcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBLE9BQU9BLE9BQU8sTUFBTSxnQkFBZ0I7QUFFcEMsU0FBUUMsaUJBQWlCLEVBQUVDLHVCQUF1QixRQUFPLHNCQUFzQjtBQXFCL0UsU0FLRUMsa0JBQWtCLEVBQ2xCQyxjQUFjLFFBQ1QsbUJBQW1CO0FBSTFCLFNBQVFDLFVBQVUsRUFBRUMseUJBQXlCLEVBQUVDLE9BQU8sRUFBRUMsYUFBYSxRQUFPLGtCQUFrQjtBQUM5RixTQUFRQyxTQUFTLEVBQUVDLGNBQWMsUUFBTyx5QkFBeUI7QUFFakUsU0FBUUMsbUJBQW1CLFFBQU8sMEJBQTBCO0FBNkI1RDtBQUNBO0FBQ0E7QUFD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QUFDa0csSUFBSSxDQUFDMkIsS0FBSyxDQUFDO01BQ2pCO0lBQ0YsQ0FBQyxNQUFNO01BQ0wsSUFBTUssR0FBRyxHQUFHTCxLQUF3QjtNQUNwQyxJQUFJSyxHQUFHLENBQUNoRSxVQUFVLEVBQUU7UUFDbEJsRSxHQUFHLENBQUNrRyxJQUFJLENBQUFoSSxhQUFBLENBQUFBLGFBQUEsS0FDSGdLLEdBQUc7VUFDTmhFLFVBQVUsRUFBRThGLDhCQUE4QixDQUFDOUIsR0FBRyxDQUFDaEUsVUFBVSxFQUFFN0UsTUFBTTtRQUFDLEVBQ25FLENBQUM7TUFDSjtJQUNGO0lBQ0EsT0FBT1csR0FBRztFQUNaLENBQUMsRUFBRSxFQUFnQixDQUFDO0FBQ3RCO0FBRUEsT0FBTyxTQUFTaUssaUJBQWlCQSxDQUMvQi9GLFVBQWtDLEVBQ2xDZ0csYUFBcUIsRUFDckJDLGtCQUEwQixFQUNGO0VBQ3hCLElBQU1DLFdBQVcsR0FBR3RCLHdCQUF3QixDQUFDNUUsVUFBVSxFQUFFZ0csYUFBYSxDQUFDO0VBQ3ZFLElBQU1HLFNBQVMsR0FBR3ZCLHdCQUF3QixDQUFDNUUsVUFBVSxFQUFFaUcsa0JBQWtCLENBQUM7RUFFMUUsSUFBSUMsV0FBVyxLQUFLLENBQUMsQ0FBQyxJQUFJQyxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7SUFDMUMsT0FBT25HLFVBQVU7RUFDbkI7RUFDQSxPQUFPckgsU0FBUyxDQUFDcUgsVUFBVSxFQUFFa0csV0FBVyxFQUFFQyxTQUFTLENBQUM7QUFDdEQ7QUFFQSxPQUFPLFNBQVNDLG9CQUFvQkEsQ0FDbENwRyxVQUFrQyxFQUNsQ1MsT0FBZSxFQUNIO0VBQ1osUUFBUUEsT0FBTyxFQUFBNUcsTUFBQSxDQUFBNkksa0JBQUEsQ0FBSzFDLFVBQVU7QUFDaEM7QUFFQSxPQUFPLFNBQVNxRyxzQkFBc0JBLENBQ3BDdEksSUFBb0UsRUFDcEV1SSxVQUFrQixFQUNsQjtFQUNBLElBQUksQ0FBQ3ZJLElBQUksRUFBRSxPQUFPL0MsU0FBUztFQUMzQixJQUFJK0MsSUFBSSxZQUFZdEYsT0FBTyxFQUFFLE9BQU9zRixJQUFJLENBQUN3SSxPQUFPLENBQUNELFVBQVUsQ0FBQztFQUM1RCxPQUFPdkksSUFBSSxDQUFDdUksVUFBVSxDQUFDO0FBQ3pCOztBQUVBO0FBQ0EsT0FBTyxTQUFTRSx1QkFBdUJBLENBQUNyTCxNQUFtQixFQUFXO0VBQ3BFLE9BQU9BLE1BQU0sQ0FBQ0wsSUFBSTtFQUNoQjtFQUNBLFVBQUFULEtBQUs7SUFBQSxPQUFJQSxLQUFLLENBQUNvTSxhQUFhLElBQUksQ0FBQ3BNLEtBQUssQ0FBQ3FNLFFBQVE7RUFBQSxDQUNqRCxDQUFDO0FBQ0giLCJpZ25vcmVMaXN0IjpbXX0=
|
|
610
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb25zb2xlIiwiR0VPQ09ERVJfTEFZRVJfSUQiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsIk9WRVJMQVlfVFlQRV9DT05TVCIsImdldEVkaXRvckxheWVyIiwiaXNGdW5jdGlvbiIsImdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMiLCJEYXRhUm93IiwiaXNQbGFpbk9iamVjdCIsImFycmF5TW92ZSIsImdlbmVyYXRlSGFzaElkIiwiVGhyZWVEQnVpbGRpbmdMYXllciIsImZpbmREZWZhdWx0TGF5ZXIiLCJkYXRhc2V0IiwibGF5ZXJDbGFzc2VzIiwibGF5ZXJQcm9wcyIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJwcmV2aW91cyIsImxjIiwicmVzdWx0IiwiZmluZERlZmF1bHRMYXllclByb3BzIiwicHJvcHMiLCJBcnJheSIsImlzQXJyYXkiLCJmb3VuZExheWVycyIsImNvbmNhdCIsIm1hcCIsInAiLCJfb2JqZWN0U3ByZWFkIiwidHlwZSIsImRhdGFJZCIsImlkIiwiaXNWaXNpYmxlIiwibGF5ZXIiLCJzZXRJbml0aWFsTGF5ZXJDb25maWciLCJkYXRhQ29udGFpbmVyIiwibWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzIiwic3RhdGUiLCJwYXRjaCIsImRhdGFzZXRJZHNUb1BhdGNoIiwibGVuZ3RoIiwiaGFzRGVmaW5lZFBhdGNoVmFsdWUiLCJzb21lIiwia2V5IiwidW5kZWZpbmVkIiwiZGF0YXNldElkU2V0IiwiU2V0IiwibGF5ZXJzIiwiY29uZmlnIiwiaGFzIiwic2V0dGluZ3MiLCJ2aXNDb25maWdTZXR0aW5ncyIsImFsbG93ZWRLZXlzIiwiZmlsdGVyIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwicGFydGlhbCIsImFjYyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwibGF5ZXJEYXRhIiwiaXNWYWxpZCIsIl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMiLCJoYXNBbGxDb2x1bW5zIiwiZm9ybWF0TGF5ZXJEYXRhIiwiZGF0YXNldHMiLCJ1cGRhdGVMYXllckNvbmZpZyIsImVycm9yTWVzc2FnZSIsImVyciIsImVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwic3Vic3RyaW5nIiwiZ2V0TGF5ZXJIb3ZlclByb3AiLCJfcmVmIiwiYW5pbWF0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Db25maWciLCJob3ZlckluZm8iLCJsYXllcnNUb1JlbmRlciIsInRvb2x0aXAiLCJlbmFibGVkIiwicGlja2VkIiwib2JqZWN0Iiwib3ZlcmxheSIsImlkeCIsImluZGV4IiwiZ2V0SG92ZXJEYXRhIiwiX2RhdGFzZXRzJGRhdGFJZCIsImZpZWxkcyIsImRhdGEiLCJmaWVsZHNUb1Nob3ciLCJjdXJyZW50VGltZSIsInJlbmRlckRlY2tHbExheWVyIiwibGF5ZXJDYWxsYmFja3MiLCJsYXllckluZGV4IiwiY2xpY2tlZCIsIm1hcFN0YXRlIiwibWFwTGF5ZXJzIiwiZXhwZXJpbWVudGFsQ29udGV4dCIsIl9yZWYyIiwiZ3B1RmlsdGVyIiwib2JqZWN0SG92ZXJlZCIsInZpc2libGUiLCJCb29sZWFuIiwicmVuZGVyTGF5ZXIiLCJpc0xheWVyUmVuZGVyYWJsZSIsInNob3VsZFJlbmRlckxheWVyIiwiaXNMYXllclZpc2libGUiLCJwcmVwYXJlTGF5ZXJzRm9yRGVjayIsImFjY3UiLCJfZGVmaW5lUHJvcGVydHkiLCJvdmVybGF5VHlwZSIsImRlY2tnbCIsInByZXBhcmVMYXllcnNUb1JlbmRlciIsImdldEN1c3RvbURlY2tMYXllcnMiLCJkZWNrR2xQcm9wcyIsImJvdHRvbURlY2tMYXllcnMiLCJ0b3BEZWNrTGF5ZXJzIiwidG9wTGF5ZXJzIiwiYmluZExheWVyQ2FsbGJhY2tzIiwiYXJndW1lbnRzIiwidmFsIiwiY29tcHV0ZURlY2tMYXllcnNGcm9tTGF5ZXJPcmRlciIsImxheWVyT3JkZXIiLCJjdXJyZW50TGF5ZXJzRm9yRGVjayIsInJlbmRlclByb3BzIiwiaGFzU2hhZG93RWZmZWN0IiwiaXNBbm5vdGF0aW9uTW9kZSIsInNsaWNlIiwicmV2ZXJzZSIsIm92ZXJsYXlzIiwiZWxlbWVudCIsImxheWVyR3JvdXAiLCJsYXllcklkIiwiZmluZEluZGV4IiwiX3JlZjMiLCJiaW5kZWRMYXllckNhbGxiYWNrcyIsImxheWVyT3ZlcmxheSIsImNvbXB1dGVEZWNrTGF5ZXJzIiwiX3JlZjQiLCJvcHRpb25zIiwidmlzU3RhdGUiLCJtYXBTdHlsZSIsImVmZmVjdHMiLCJzcGxpdE1hcHMiLCJfcmVmNSIsIm1hcEluZGV4IiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJtYXBib3hBcGlVcmwiLCJwcmltYXJ5TWFwIiwibGF5ZXJzRm9yRGVjayIsImVkaXRvckluZm8iLCJkYXRhTGF5ZXJzIiwiZWZmZWN0IiwiX3JlZjYiLCJ2aXNpYmxlTGF5ZXJHcm91cHMiLCJwdXNoIiwidGhyZWVEQnVpbGRpbmdDb2xvciIsInBpY2thYmxlIiwidXBkYXRlVHJpZ2dlcnMiLCJnZXRGaWxsQ29sb3IiLCJfZ2V0Q3VzdG9tRGVja0xheWVycyIsIl9nZXRDdXN0b21EZWNrTGF5ZXJzMiIsIl9zbGljZWRUb0FycmF5IiwiY3VzdG9tQm90dG9tRGVja0xheWVycyIsImN1c3RvbVRvcERlY2tMYXllcnMiLCJlZGl0b3JMYXllciIsIl90b0NvbnN1bWFibGVBcnJheSIsImdldExheWVyT3JkZXJGcm9tTGF5ZXJzIiwiX3JlZjciLCJnZXROZXdMYXllckdyb3VwIiwiX3Byb3BzJGlkIiwiX3Byb3BzJGxhYmVsIiwiX3Byb3BzJGlzVmlzaWJsZSIsIl9wcm9wcyRsYXllck9yZGVyIiwiX3Byb3BzJGlzSW5jbHVkZWRJbkxlIiwibGFiZWwiLCJpc0luY2x1ZGVkSW5MZWdlbmQiLCJhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIiLCJhdEluZGV4Iiwic3BsaWNlIiwicmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyIiwiZWxlbWVudElkIiwibmV3TGF5ZXJPcmRlciIsImVudHJ5IiwiZ3JvdXAiLCJnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIiLCJsYXllckdyb3VwSWQiLCJpIiwiZ3JwIiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9zdGVwIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJlIiwibmVzdGVkIiwiZiIsImdldEluZGV4RnJvbUxheWVyRW50cnlJZCIsImxheWVyRW50cnlJZCIsImlzTGF5ZXJQcmVzZW50SW5MYXllck9yZGVyIiwiZm91bmQiLCJyZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlciIsIm9sZEVudHJ5IiwibmV3RW50cnkiLCJvbGRFbnRyeUlkIiwidXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlciIsIm5ld0xheWVyR3JvdXAiLCJnZXRGbGF0TGF5ZXJPcmRlciIsIm9yZGVyRW50cnkiLCJidWlsZExheWVyT3JkZXJIaWVyYXJjaHkiLCJ2YWxpZExheWVycyIsImZpbmQiLCJsIiwiaGlkZGVuIiwicmVtb3ZlR2hvc3RMYXllckZyb21MYXllck9yZGVyIiwicmVvcmRlckxheWVyT3JkZXIiLCJvcmlnaW5MYXllcklkIiwiZGVzdGluYXRpb25MYXllcklkIiwiYWN0aXZlSW5kZXgiLCJvdmVySW5kZXgiLCJhZGRMYXllclRvTGF5ZXJPcmRlciIsImdldExheWVySG92ZXJQcm9wVmFsdWUiLCJmaWVsZEluZGV4IiwidmFsdWVBdCIsImFyZUFueURlY2tMYXllcnNMb2FkaW5nIiwiaW50ZXJuYWxTdGF0ZSIsImlzTG9hZGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xheWVyLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBDb25zb2xlIGZyb20gJ2dsb2JhbC9jb25zb2xlJztcblxuaW1wb3J0IHtHRU9DT0RFUl9MQVlFUl9JRCwgTElHSFRfQU5EX1NIQURPV19FRkZFQ1R9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TGF5ZXIgYXMgRGVja0xheWVyfSBmcm9tICdAZGVjay5nbC9jb3JlJztcbnR5cGUgRGVja0xheWVyUHJvcHMgPSBhbnk7XG5pbXBvcnQge1xuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFRvb2x0aXBGaWVsZCxcbiAgQ29tcGFyZVR5cGUsXG4gIFNwbGl0TWFwTGF5ZXJzLFxuICBFZGl0b3IsXG4gIEZlYXR1cmUsXG4gIEZlYXR1cmVTZWxlY3Rpb25Db250ZXh0LFxuICBCaW5kZWRMYXllckNhbGxiYWNrcyxcbiAgTGF5ZXJDYWxsYmFja3MsXG4gIFZpZXdwb3J0LFxuICBMYXllck9yZGVyR3JvdXAsXG4gIExheWVyT3JkZXIsXG4gIExheWVyT3JkZXJFbnRyeSxcbiAgRmxhdExheWVyT3JkZXIsXG4gIExheWVyT3JkZXJIaWVyYXJjaHlcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge1xuICBGaW5kRGVmYXVsdExheWVyUHJvcHNSZXR1cm5WYWx1ZSxcbiAgRmluZERlZmF1bHRMYXllclByb3BzLFxuICBMYXllcixcbiAgTGF5ZXJDbGFzc2VzVHlwZSxcbiAgT1ZFUkxBWV9UWVBFX0NPTlNULFxuICBnZXRFZGl0b3JMYXllclxufSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5cbmltcG9ydCBLZXBsZXJUYWJsZSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7VmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5pbXBvcnQge2lzRnVuY3Rpb24sIGdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMsIERhdGFSb3csIGlzUGxhaW5PYmplY3R9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHthcnJheU1vdmUsIGdlbmVyYXRlSGFzaElkfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5cbmltcG9ydCB7VGhyZWVEQnVpbGRpbmdMYXllcn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcblxuZXhwb3J0IHR5cGUgTGF5ZXJzVG9SZW5kZXIgPSB7XG4gIFtsYXllcklkOiBzdHJpbmddOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQWdncmVnYXRpb25MYXllckhvdmVyRGF0YSA9IHtcbiAgcG9pbnRzOiBhbnlbXTtcbiAgY29sb3JWYWx1ZT86IGFueTtcbiAgZWxldmF0aW9uVmFsdWU/OiBhbnk7XG4gIGFnZ3JlZ2F0ZWREYXRhPzogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICBtZWFzdXJlOiBzdHJpbmc7XG4gICAgICB2YWx1ZT86IGFueTtcbiAgICB9XG4gID47XG59O1xuXG5leHBvcnQgdHlwZSBMYXllckhvdmVyUHJvcCA9IHtcbiAgZGF0YTogRGF0YVJvdyB8IEFnZ3JlZ2F0aW9uTGF5ZXJIb3ZlckRhdGEgfCBhbnlbXSB8IG51bGw7XG4gIGZpZWxkczogRmllbGRbXTtcbiAgZmllbGRzVG9TaG93OiBUb29sdGlwRmllbGRbXTtcbiAgbGF5ZXI6IExheWVyO1xuICBwcmltYXJ5RGF0YT86IERhdGFSb3cgfCBBZ2dyZWdhdGlvbkxheWVySG92ZXJEYXRhIHwgYW55W10gfCBudWxsO1xuICBjb21wYXJlVHlwZT86IENvbXBhcmVUeXBlO1xuICBjdXJyZW50VGltZT86IFZpc1N0YXRlWydhbmltYXRpb25Db25maWcnXVsnY3VycmVudFRpbWUnXTtcbn07XG5cbi8qKlxuICogRmluZCBkZWZhdWx0IGxheWVycyBmcm9tIGZpZWxkc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZERlZmF1bHRMYXllcihkYXRhc2V0OiBLZXBsZXJUYWJsZSwgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXNUeXBlKTogTGF5ZXJbXSB7XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyUHJvcHMgPSAoT2JqZWN0LmtleXMobGF5ZXJDbGFzc2VzKSBhcyBBcnJheTxrZXlvZiBMYXllckNsYXNzZXNUeXBlPikucmVkdWNlKFxuICAgIChwcmV2aW91cywgbGMpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdDogRmluZERlZmF1bHRMYXllclByb3BzUmV0dXJuVmFsdWUgPVxuICAgICAgICB0eXBlb2YgbGF5ZXJDbGFzc2VzW2xjXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IGxheWVyQ2xhc3Nlc1tsY10uZmluZERlZmF1bHRMYXllclByb3BzKGRhdGFzZXQsIHByZXZpb3VzKVxuICAgICAgICAgIDoge3Byb3BzOiBbXX07XG5cbiAgICAgIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuICAgICAgY29uc3QgZm91bmRMYXllcnMgPSByZXN1bHQuZm91bmRMYXllcnMgfHwgcHJldmlvdXM7XG5cbiAgICAgIHJldHVybiBmb3VuZExheWVycy5jb25jYXQoXG4gICAgICAgIHByb3BzLm1hcChwID0+ICh7XG4gICAgICAgICAgLi4ucCxcbiAgICAgICAgICB0eXBlOiBsYyxcbiAgICAgICAgICBkYXRhSWQ6IGRhdGFzZXQuaWQsXG4gICAgICAgICAgLy8gc2V0IGFyYyBsYXllciBpbml0aWFsIHZpc2libGl0eSB0byBmYWxzZSwgYmVjYXVzZSBhcmNzIHRlbmQgdG8gYmUgdG9vIG11c3lcbiAgICAgICAgICAuLi4obGMgPT09ICdhcmMnIHx8IGxjID09PSAnbGluZScgPyB7aXNWaXNpYmxlOiBmYWxzZX0gOiB7fSlcbiAgICAgICAgfSkpXG4gICAgICApO1xuICAgIH0sXG4gICAgW10gYXMgKEZpbmREZWZhdWx0TGF5ZXJQcm9wcyAmIHt0eXBlOiBzdHJpbmd9KVtdXG4gICk7XG5cbiAgLy8gZ28gdGhyb3VnaCBhbGwgbGF5ZXJQcm9wcyB0byBjcmVhdGUgbGF5ZXJcbiAgcmV0dXJuIGxheWVyUHJvcHMubWFwKHByb3BzID0+IHtcbiAgICBjb25zdCBsYXllciA9IG5ldyBsYXllckNsYXNzZXNbcHJvcHMudHlwZV0ocHJvcHMpO1xuICAgIHJldHVybiB0eXBlb2YgbGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nICYmIGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgICAgPyBsYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICAgIDogbGF5ZXI7XG4gIH0pO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYHBhdGNoYCB0byBgY29uZmlnLnZpc0NvbmZpZ2Agb25seSBmb3IgbGF5ZXJzIHdob3NlIGBkYXRhSWRgIGlzIGluIGBkYXRhc2V0SWRzVG9QYXRjaGAuXG4gKiBMYXllcnMgZm9yIGRhdGFzZXRzIHRoYXQgd2VyZSBhbHJlYWR5IG9uIHRoZSBtYXAgYXJlIGxlZnQgdW5jaGFuZ2VkIOKAlCBgYWRkRGF0YVRvTWFwYFxuICogS2V5cyB3aG9zZSBwYXRjaCB2YWx1ZSBpcyBgdW5kZWZpbmVkYCBhcmUgc2tpcHBlZCBzbyBleGlzdGluZyB2aXNDb25maWcgaXMgbm90IGNsZWFyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF0Y2g6IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+IHwgdW5kZWZpbmVkLFxuICBkYXRhc2V0SWRzVG9QYXRjaDogc3RyaW5nW11cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFwYXRjaCB8fCAhT2JqZWN0LmtleXMocGF0Y2gpLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGhhc0RlZmluZWRQYXRjaFZhbHVlID0gKE9iamVjdC5rZXlzKHBhdGNoKSBhcyBBcnJheTxrZXlvZiBMYXllclZpc0NvbmZpZz4pLnNvbWUoXG4gICAga2V5ID0+IHBhdGNoW2tleV0gIT09IHVuZGVmaW5lZFxuICApO1xuICBpZiAoIWhhc0RlZmluZWRQYXRjaFZhbHVlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldElkU2V0ID0gbmV3IFNldChkYXRhc2V0SWRzVG9QYXRjaCk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgICAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkIHx8ICFkYXRhc2V0SWRTZXQuaGFzKGxheWVyLmNvbmZpZy5kYXRhSWQpKSB7XG4gICAgICAgIHJldHVybiBsYXllcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gbGF5ZXIudmlzQ29uZmlnU2V0dGluZ3M7XG4gICAgICBpZiAoIXNldHRpbmdzKSB7XG4gICAgICAgIHJldHVybiBsYXllcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFsbG93ZWRLZXlzID0gKE9iamVjdC5rZXlzKHBhdGNoKSBhcyBBcnJheTxrZXlvZiBMYXllclZpc0NvbmZpZz4pLmZpbHRlcihcbiAgICAgICAga2V5ID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZXR0aW5ncywga2V5KSAmJiBwYXRjaFtrZXldICE9PSB1bmRlZmluZWRcbiAgICAgICk7XG4gICAgICBpZiAoIWFsbG93ZWRLZXlzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbGF5ZXI7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJ0aWFsID0gYWxsb3dlZEtleXMucmVkdWNlPFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+PigoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgYWNjW2tleV0gPSBwYXRjaFtrZXldO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pO1xuICAgICAgcmV0dXJuIGxheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHBhcnRpYWwpO1xuICAgIH0pXG4gIH07XG59XG5cbnR5cGUgTWluVmlzU3RhdGVGb3JMYXllckRhdGEgPSB7XG4gIGRhdGFzZXRzOiBWaXNTdGF0ZVsnZGF0YXNldHMnXTtcbiAgYW5pbWF0aW9uQ29uZmlnOiBWaXNTdGF0ZVsnYW5pbWF0aW9uQ29uZmlnJ107XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSBsYXllciBkYXRhIGJhc2VkIG9uIGxheWVyIHR5cGUsIGNvbCBDb25maWcsXG4gKiByZXR1cm4gdXBkYXRlZCBsYXllciBpZiBjb2xvckRvbWFpbiwgZGF0YU1hcCBoYXMgY2hhbmdlZC5cbiAqIEFsc28sIHJldHVybnMgdXBkYXRlZCBsYXllciBpbiBjYXNlIHRoZSBpbnB1dCBsYXllciB3YXMgaW4gaW52YWxpZCBzdGF0ZS5cbiAqIEFkZHMgYW4gZXJyb3IgbWVzc2FnZSB0byB0aGUgbGF5ZXIgaW4gY2FzZSBvZiBhbiBleGNlcHRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVMYXllckRhdGE8UyBleHRlbmRzIE1pblZpc1N0YXRlRm9yTGF5ZXJEYXRhPihcbiAgbGF5ZXI6IExheWVyLFxuICBzdGF0ZTogUyxcbiAgb2xkTGF5ZXJEYXRhPzogYW55XG4pOiB7XG4gIGxheWVyRGF0YTogYW55O1xuICBsYXllcjogTGF5ZXI7XG59IHtcbiAgbGV0IGxheWVyRGF0YTtcbiAgdHJ5IHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIHVwZGF0ZXMgZGF0YSBhZnRlciBhbiBlcnJvclxuICAgIGlmICghbGF5ZXIuaXNWYWxpZCkge1xuICAgICAgbGF5ZXIuX29sZERhdGFVcGRhdGVUcmlnZ2VycyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoIWxheWVyLnR5cGUgfHwgIWxheWVyLmhhc0FsbENvbHVtbnMoKSB8fCAhbGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgICAgcmV0dXJuIHtsYXllciwgbGF5ZXJEYXRhOiB7fX07XG4gICAgfVxuXG4gICAgbGF5ZXJEYXRhID0gbGF5ZXIuZm9ybWF0TGF5ZXJEYXRhKHN0YXRlLmRhdGFzZXRzLCBvbGRMYXllckRhdGEpO1xuXG4gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgZGF0YSBmb3IgdGhlIGxheWVyIGlzIHVwZGF0ZWQgd2l0aG91dCBlcnJvcnNcbiAgICBpZiAoIWxheWVyLmlzVmFsaWQpIHtcbiAgICAgIC8vIFN3aXRjaCB0byB2aXNpYmxlIGFmdGVyIGFuIGVycm9yXG4gICAgICBsYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgbGF5ZXIuaXNWYWxpZCA9IHRydWU7XG4gICAgbGF5ZXIuZXJyb3JNZXNzYWdlID0gbnVsbDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgQ29uc29sZS5lcnJvcihlcnIpO1xuICAgIGxheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgIH0pO1xuICAgIGxheWVyLmlzVmFsaWQgPSBmYWxzZTtcblxuICAgIGxheWVyLmVycm9yTWVzc2FnZSA9XG4gICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnIubWVzc2FnZSA/IGVyci5tZXNzYWdlLnN1YnN0cmluZygwLCAxMDApIDogJ1Vua25vd24gZXJyb3InO1xuXG4gICAgbGF5ZXJEYXRhID0ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxheWVyLFxuICAgIGxheWVyRGF0YVxuICB9O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBwcm9wcyBwYXNzZWQgdG8gTGF5ZXJIb3ZlckluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExheWVySG92ZXJQcm9wKHtcbiAgYW5pbWF0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgaG92ZXJJbmZvLFxuICBsYXllcnMsXG4gIGxheWVyc1RvUmVuZGVyLFxuICBkYXRhc2V0c1xufToge1xuICBpbnRlcmFjdGlvbkNvbmZpZzogVmlzU3RhdGVbJ2ludGVyYWN0aW9uQ29uZmlnJ107XG4gIGFuaW1hdGlvbkNvbmZpZzogVmlzU3RhdGVbJ2FuaW1hdGlvbkNvbmZpZyddO1xuICBob3ZlckluZm86IFZpc1N0YXRlWydob3ZlckluZm8nXTtcbiAgbGF5ZXJzOiBWaXNTdGF0ZVsnbGF5ZXJzJ107XG4gIGxheWVyc1RvUmVuZGVyOiBMYXllcnNUb1JlbmRlcjtcbiAgZGF0YXNldHM6IFZpc1N0YXRlWydkYXRhc2V0cyddO1xufSk6IExheWVySG92ZXJQcm9wIHwgbnVsbCB7XG4gIGlmIChpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmVuYWJsZWQgJiYgaG92ZXJJbmZvICYmIGhvdmVySW5mby5waWNrZWQpIHtcbiAgICAvLyBpZiBhbnl0aGluZyBob3ZlcmVkXG4gICAgY29uc3Qge29iamVjdCwgbGF5ZXI6IG92ZXJsYXl9ID0gaG92ZXJJbmZvO1xuXG4gICAgLy8gZGVja2dsIGxheWVyIHRvIGtlcGxlci1nbCBsYXllclxuICAgIGNvbnN0IGxheWVyID0gbGF5ZXJzW292ZXJsYXkucHJvcHMuaWR4XTtcblxuICAgIC8vIE5PVEU6IGZvciBiaW5hcnkgZm9ybWF0IEdlb2pzb25MYXllciwgZGVjayB3aWxsIHJldHVybiBvYmplY3Q9bnVsbCBidXQgaG92ZXJJbmZvLmluZGV4ID49IDBcbiAgICBpZiAoXG4gICAgICAob2JqZWN0IHx8IGhvdmVySW5mby5pbmRleCA+PSAwKSAmJlxuICAgICAgbGF5ZXIgJiZcbiAgICAgIGxheWVyLmdldEhvdmVyRGF0YSAmJlxuICAgICAgbGF5ZXJzVG9SZW5kZXJbbGF5ZXIuaWRdXG4gICAgKSB7XG4gICAgICAvLyBpZiBsYXllciBpcyB2aXNpYmxlIGFuZCBoYXZlIGhvdmVyZWQgZGF0YVxuICAgICAgY29uc3Qge1xuICAgICAgICBjb25maWc6IHtkYXRhSWR9XG4gICAgICB9ID0gbGF5ZXI7XG4gICAgICBpZiAoIWRhdGFJZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtkYXRhQ29udGFpbmVyLCBmaWVsZHN9ID0gZGF0YXNldHNbZGF0YUlkXTtcbiAgICAgIGNvbnN0IGRhdGE6IERhdGFSb3cgfCBudWxsID0gbGF5ZXIuZ2V0SG92ZXJEYXRhKFxuICAgICAgICBvYmplY3QgfHwgaG92ZXJJbmZvLmluZGV4LFxuICAgICAgICBkYXRhQ29udGFpbmVyLFxuICAgICAgICBmaWVsZHMsXG4gICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgaG92ZXJJbmZvXG4gICAgICApO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZmllbGRzVG9TaG93ID0gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGEsXG4gICAgICAgIGZpZWxkcyxcbiAgICAgICAgZmllbGRzVG9TaG93LFxuICAgICAgICBsYXllcixcbiAgICAgICAgY3VycmVudFRpbWU6IGFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckRlY2tHbExheWVyKHByb3BzOiBhbnksIGxheWVyQ2FsbGJhY2tzOiB7W2tleTogc3RyaW5nXTogYW55fSkge1xuICBjb25zdCB7XG4gICAgZGF0YXNldHMsXG4gICAgbGF5ZXIsXG4gICAgbGF5ZXJJbmRleCxcbiAgICBkYXRhLFxuICAgIGhvdmVySW5mbyxcbiAgICBjbGlja2VkLFxuICAgIG1hcFN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBtYXBMYXllcnMsXG4gICAgZXhwZXJpbWVudGFsQ29udGV4dFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXTtcbiAgY29uc3Qge2dwdUZpbHRlcn0gPSBkYXRhc2V0IHx8IHt9O1xuICBjb25zdCBvYmplY3RIb3ZlcmVkID0gY2xpY2tlZCB8fCBob3ZlckluZm87XG4gIC8vIGluIHNwbGl0IG1vZGUgYSBsYXllciBtaXNzaW5nIGZyb20gbWFwTGF5ZXJzIGlzIGhpZGRlbiwgc28gY29lcmNlIHRvIGEgYm9vbGVhblxuICAvLyBpbnN0ZWFkIG9mIGxlYWtpbmcgdW5kZWZpbmVkIGludG8gZGVjay5nbCdzIHZpc2libGUgcHJvcFxuICBjb25zdCB2aXNpYmxlID0gIW1hcExheWVycyB8fCBCb29sZWFuKG1hcExheWVyc1tsYXllci5pZF0pO1xuICAvLyBMYXllciBpcyBMYXllciBjbGFzc1xuICByZXR1cm4gbGF5ZXIucmVuZGVyTGF5ZXIoe1xuICAgIGRhdGEsXG4gICAgZ3B1RmlsdGVyLFxuICAgIGlkeDogbGF5ZXJJbmRleCxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICBsYXllckNhbGxiYWNrcyxcbiAgICBtYXBTdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWcsXG4gICAgb2JqZWN0SG92ZXJlZCxcbiAgICB2aXNpYmxlLFxuICAgIGRhdGFzZXQsXG4gICAgZXhwZXJpbWVudGFsQ29udGV4dFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGF5ZXJSZW5kZXJhYmxlKGxheWVyOiBMYXllciwgbGF5ZXJEYXRhKSB7XG4gIHJldHVybiBsYXllci5pZCAhPT0gR0VPQ09ERVJfTEFZRVJfSUQgJiYgbGF5ZXIuc2hvdWxkUmVuZGVyTGF5ZXIobGF5ZXJEYXRhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGF5ZXJWaXNpYmxlKGxheWVyLCBtYXBMYXllcnMpIHtcbiAgcmV0dXJuIChcbiAgICBsYXllci5jb25maWcuaXNWaXNpYmxlICYmXG4gICAgLy8gaWYgbGF5ZXIuaWQgaXMgbm90IGluIG1hcExheWVycywgZG9uJ3QgcmVuZGVyIGl0XG4gICAgKCFtYXBMYXllcnMgfHwgKG1hcExheWVycyAmJiBtYXBMYXllcnNbbGF5ZXIuaWRdKSlcbiAgKTtcbn1cblxuLy8gUHJlcGFyZSBhIGRpY3Qgb2YgbGF5ZXJzIHJlbmRlcmVkIGJ5IHRoZSBkZWNrLmdsXG4vLyBOb3RlLCBpc1Zpc2libGU6IGZhbHNlIGxheWVyIGlzIHBhc3NlZCB0byBkZWNrLmdsIGhlcmVcbi8vIHJldHVybiB7W2lkXTogdHJ1ZSBcXCBmYWxzZX1cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlTGF5ZXJzRm9yRGVjayhcbiAgbGF5ZXJzOiBMYXllcltdLFxuICBsYXllckRhdGE6IFZpc1N0YXRlWydsYXllckRhdGEnXVxuKToge1xuICBba2V5OiBzdHJpbmddOiBib29sZWFuO1xufSB7XG4gIHJldHVybiBsYXllcnMucmVkdWNlKFxuICAgIChhY2N1LCBsYXllciwgaWR4KSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtsYXllci5pZF06XG4gICAgICAgIGlzTGF5ZXJSZW5kZXJhYmxlKGxheWVyLCBsYXllckRhdGFbaWR4XSkgJiYgbGF5ZXIub3ZlcmxheVR5cGUgPT09IE9WRVJMQVlfVFlQRV9DT05TVC5kZWNrZ2xcbiAgICB9KSxcbiAgICB7fVxuICApO1xufVxuXG4vLyBQcmVwYXJlIGEgZGljdCBvZiByZW5kZXJlZCBsYXllcnMgcmVuZGVyZWQgaW4gdGhlIG1hcFxuLy8gVGhpcyBpbmNsdWRlcyBvbmx5IHRoZSB2aXNpYmlsZSBsYXllcnMgZm9yIHNpbmdsZSBtYXAgdmlldyBhbmQgc3BsaXQgbWFwIHZpZXdcbi8vIHJldHVybiB7W2lkXTogdHJ1ZSBcXCBmYWxzZX1cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlTGF5ZXJzVG9SZW5kZXIoXG4gIGxheWVyczogTGF5ZXJbXSxcbiAgbGF5ZXJEYXRhOiBWaXNTdGF0ZVsnbGF5ZXJEYXRhJ10sXG4gIG1hcExheWVycz86IFNwbGl0TWFwTGF5ZXJzIHwgdW5kZWZpbmVkIHwgbnVsbFxuKTogTGF5ZXJzVG9SZW5kZXIge1xuICByZXR1cm4gbGF5ZXJzLnJlZHVjZShcbiAgICAoYWNjdSwgbGF5ZXIsIGlkeCkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBbbGF5ZXIuaWRdOiBpc0xheWVyUmVuZGVyYWJsZShsYXllciwgbGF5ZXJEYXRhW2lkeF0pICYmIGlzTGF5ZXJWaXNpYmxlKGxheWVyLCBtYXBMYXllcnMpXG4gICAgfSksXG4gICAge31cbiAgKTtcbn1cblxudHlwZSBDdXN0b21EZWNrTGF5ZXIgPSBEZWNrTGF5ZXI8RGVja0xheWVyUHJvcHM+O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VzdG9tRGVja0xheWVycyhkZWNrR2xQcm9wcz86IGFueSk6IFtDdXN0b21EZWNrTGF5ZXJbXSwgQ3VzdG9tRGVja0xheWVyW11dIHtcbiAgY29uc3QgYm90dG9tRGVja0xheWVycyA9IEFycmF5LmlzQXJyYXkoZGVja0dsUHJvcHM/LmxheWVycylcbiAgICA/IGRlY2tHbFByb3BzPy5sYXllcnNcbiAgICA6IGlzRnVuY3Rpb24oZGVja0dsUHJvcHM/LmxheWVycylcbiAgICA/IGRlY2tHbFByb3BzPy5sYXllcnMoKVxuICAgIDogW107XG4gIGNvbnN0IHRvcERlY2tMYXllcnMgPSBBcnJheS5pc0FycmF5KGRlY2tHbFByb3BzPy50b3BMYXllcnMpXG4gICAgPyBkZWNrR2xQcm9wcz8udG9wTGF5ZXJzXG4gICAgOiBpc0Z1bmN0aW9uKGRlY2tHbFByb3BzPy50b3BMYXllcnMpXG4gICAgPyBkZWNrR2xQcm9wcz8udG9wTGF5ZXJzKClcbiAgICA6IFtdO1xuXG4gIHJldHVybiBbYm90dG9tRGVja0xheWVycywgdG9wRGVja0xheWVyc107XG59XG5cbmV4cG9ydCB0eXBlIENvbXB1dGVEZWNrTGF5ZXJzUHJvcHMgPSB7XG4gIG1hcEluZGV4PzogbnVtYmVyO1xuICBtYXBib3hBcGlBY2Nlc3NUb2tlbj86IHN0cmluZztcbiAgbWFwYm94QXBpVXJsPzogc3RyaW5nO1xuICBwcmltYXJ5TWFwPzogYm9vbGVhbjtcbiAgaXNBbm5vdGF0aW9uTW9kZT86IGJvb2xlYW47XG4gIGxheWVyc0ZvckRlY2s/OiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn07XG4gIGVkaXRvckluZm8/OiB7XG4gICAgZWRpdG9yOiBFZGl0b3I7XG4gICAgZWRpdG9yTWVudUFjdGl2ZTogYm9vbGVhbjtcbiAgICBvblNldEZlYXR1cmVzOiAoZmVhdHVyZXM6IEZlYXR1cmVbXSkgPT4gYW55O1xuICAgIHNldFNlbGVjdGVkRmVhdHVyZTogKFxuICAgICAgZmVhdHVyZTogRmVhdHVyZSB8IG51bGwsXG4gICAgICBzZWxlY3Rpb25Db250ZXh0PzogRmVhdHVyZVNlbGVjdGlvbkNvbnRleHRcbiAgICApID0+IGFueTtcbiAgICBvbkFwcGx5UG9seWdvbkZpbHRlckFsbD86IChmZWF0dXJlOiBGZWF0dXJlKSA9PiBhbnk7XG4gICAgZmVhdHVyZUNvbGxlY3Rpb246IHtcbiAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgIGZlYXR1cmVzOiBGZWF0dXJlW107XG4gICAgfTtcbiAgICBzZWxlY3RlZEZlYXR1cmVJbmRleGVzOiBudW1iZXJbXTtcbiAgICB2aWV3cG9ydDogVmlld3BvcnQ7XG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYmluZExheWVyQ2FsbGJhY2tzKFxuICBsYXllckNhbGxiYWNrczogTGF5ZXJDYWxsYmFja3MgPSB7fSxcbiAgaWR4OiBudW1iZXJcbik6IEJpbmRlZExheWVyQ2FsbGJhY2tzIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGxheWVyQ2FsbGJhY2tzKS5yZWR1Y2UoXG4gICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBba2V5XTogdmFsID0+IGxheWVyQ2FsbGJhY2tzW2tleV0oaWR4LCB2YWwpXG4gICAgfSksXG4gICAge30gYXMgUmVjb3JkPHN0cmluZywgKHZhbDogdW5rbm93bikgPT4gdm9pZD5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZURlY2tMYXllcnNGcm9tTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJzOiBMYXllcltdLFxuICBsYXllckRhdGE6IGFueVtdLFxuICBjdXJyZW50TGF5ZXJzRm9yRGVjazoge1trZXk6IHN0cmluZ106IGJvb2xlYW59LFxuICByZW5kZXJQcm9wczoge1xuICAgIGRhdGFzZXRzOiBhbnk7XG4gICAgaG92ZXJJbmZvOiBhbnk7XG4gICAgY2xpY2tlZDogYW55O1xuICAgIG1hcFN0YXRlOiBhbnk7XG4gICAgaW50ZXJhY3Rpb25Db25maWc6IGFueTtcbiAgICBhbmltYXRpb25Db25maWc6IGFueTtcbiAgICBtYXBMYXllcnM6IGFueTtcbiAgICBoYXNTaGFkb3dFZmZlY3Q6IGJvb2xlYW47XG4gICAgaXNBbm5vdGF0aW9uTW9kZT86IGJvb2xlYW47XG4gIH0sXG4gIGxheWVyQ2FsbGJhY2tzPzogYW55XG4pOiBhbnlbXSB7XG4gIGNvbnN0IHtcbiAgICBkYXRhc2V0cyxcbiAgICBob3ZlckluZm8sXG4gICAgY2xpY2tlZCxcbiAgICBtYXBTdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICBhbmltYXRpb25Db25maWcsXG4gICAgbWFwTGF5ZXJzLFxuICAgIGhhc1NoYWRvd0VmZmVjdCxcbiAgICBpc0Fubm90YXRpb25Nb2RlXG4gIH0gPSByZW5kZXJQcm9wcztcbiAgcmV0dXJuIGxheWVyT3JkZXJcbiAgICAuc2xpY2UoKVxuICAgIC5yZXZlcnNlKClcbiAgICAucmVkdWNlKChvdmVybGF5cywgZWxlbWVudCkgPT4ge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgbGF5ZXJHcm91cCA9IGVsZW1lbnQgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgICBpZiAoIWxheWVyR3JvdXAuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgcmV0dXJuIG92ZXJsYXlzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdmVybGF5cy5jb25jYXQoXG4gICAgICAgICAgY29tcHV0ZURlY2tMYXllcnNGcm9tTGF5ZXJPcmRlcihcbiAgICAgICAgICAgIGxheWVyR3JvdXAubGF5ZXJPcmRlcixcbiAgICAgICAgICAgIGxheWVycyxcbiAgICAgICAgICAgIGxheWVyRGF0YSxcbiAgICAgICAgICAgIGN1cnJlbnRMYXllcnNGb3JEZWNrLFxuICAgICAgICAgICAgcmVuZGVyUHJvcHMsXG4gICAgICAgICAgICBsYXllckNhbGxiYWNrc1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxheWVySWQgPSBlbGVtZW50IGFzIHN0cmluZztcbiAgICAgIGlmICghY3VycmVudExheWVyc0ZvckRlY2tbbGF5ZXJJZF0pIHtcbiAgICAgICAgcmV0dXJuIG92ZXJsYXlzO1xuICAgICAgfVxuICAgICAgY29uc3QgbGF5ZXJJbmRleCA9IGxheWVycy5maW5kSW5kZXgoKHtpZH0pID0+IGlkID09PSBsYXllcklkKTtcbiAgICAgIGlmIChsYXllckluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICB9XG4gICAgICBjb25zdCBiaW5kZWRMYXllckNhbGxiYWNrcyA9IGxheWVyQ2FsbGJhY2tzXG4gICAgICAgID8gYmluZExheWVyQ2FsbGJhY2tzKGxheWVyQ2FsbGJhY2tzLCBsYXllckluZGV4KVxuICAgICAgICA6IHt9O1xuICAgICAgY29uc3QgbGF5ZXIgPSBsYXllcnNbbGF5ZXJJbmRleF07XG4gICAgICBjb25zdCBkYXRhID0gbGF5ZXJEYXRhW2xheWVySW5kZXhdO1xuICAgICAgY29uc3QgbGF5ZXJPdmVybGF5ID0gcmVuZGVyRGVja0dsTGF5ZXIoXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgICBsYXllcixcbiAgICAgICAgICBsYXllckluZGV4LFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgaG92ZXJJbmZvLFxuICAgICAgICAgIGNsaWNrZWQsXG4gICAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAgIG1hcExheWVycyxcbiAgICAgICAgICBleHBlcmltZW50YWxDb250ZXh0OiB7XG4gICAgICAgICAgICBoYXNTaGFkb3dFZmZlY3QsXG4gICAgICAgICAgICBpc0Fubm90YXRpb25Nb2RlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBiaW5kZWRMYXllckNhbGxiYWNrc1xuICAgICAgKTtcbiAgICAgIHJldHVybiBvdmVybGF5cy5jb25jYXQobGF5ZXJPdmVybGF5IHx8IFtdKTtcbiAgICB9LCBbXSBhcyBhbnlbXSk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZURlY2tMYXllcnMoXG4gIHt2aXNTdGF0ZSwgbWFwU3RhdGUsIG1hcFN0eWxlfTogYW55LFxuICBvcHRpb25zPzogQ29tcHV0ZURlY2tMYXllcnNQcm9wcyxcbiAgbGF5ZXJDYWxsYmFja3M/OiBMYXllckNhbGxiYWNrcyxcbiAgZGVja0dsUHJvcHM/OiBhbnlcbik6IExheWVyW10ge1xuICBjb25zdCB7XG4gICAgZGF0YXNldHMsXG4gICAgZWZmZWN0cyxcbiAgICBsYXllcnMsXG4gICAgbGF5ZXJPcmRlcixcbiAgICBsYXllckRhdGEsXG4gICAgaG92ZXJJbmZvLFxuICAgIGNsaWNrZWQsXG4gICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgIHNwbGl0TWFwc1xuICB9ID0gdmlzU3RhdGU7XG5cbiAgY29uc3Qge1xuICAgIG1hcEluZGV4LFxuICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgIG1hcGJveEFwaVVybCxcbiAgICBwcmltYXJ5TWFwLFxuICAgIGxheWVyc0ZvckRlY2ssXG4gICAgZWRpdG9ySW5mbyxcbiAgICBpc0Fubm90YXRpb25Nb2RlXG4gIH0gPSBvcHRpb25zIHx8IHt9O1xuXG4gIGxldCBkYXRhTGF5ZXJzOiBhbnlbXSA9IFtdO1xuXG4gIGNvbnN0IGhhc1NoYWRvd0VmZmVjdCA9IGVmZmVjdHMuc29tZShlZmZlY3QgPT4ge1xuICAgIHJldHVybiBlZmZlY3QudHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZTtcbiAgfSk7XG5cbiAgaWYgKGxheWVyRGF0YSAmJiBsYXllckRhdGEubGVuZ3RoKSB7XG4gICAgY29uc3QgbWFwTGF5ZXJzID0gZ2V0TWFwTGF5ZXJzRnJvbVNwbGl0TWFwcyhzcGxpdE1hcHMsIG1hcEluZGV4IHx8IDApO1xuXG4gICAgY29uc3QgY3VycmVudExheWVyc0ZvckRlY2sgPSBsYXllcnNGb3JEZWNrIHx8IHByZXBhcmVMYXllcnNGb3JEZWNrKGxheWVycywgbGF5ZXJEYXRhKTtcblxuICAgIGRhdGFMYXllcnMgPSBsYXllck9yZGVyXG4gICAgICAuc2xpY2UoKVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLnJlZHVjZSgob3ZlcmxheXMsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZWxlbWVudCkpIHtcbiAgICAgICAgICBjb25zdCBsYXllckdyb3VwID0gZWxlbWVudCBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICAgICAgaWYgKCFsYXllckdyb3VwLmlzVmlzaWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIG92ZXJsYXlzO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gb3ZlcmxheXMuY29uY2F0KFxuICAgICAgICAgICAgY29tcHV0ZURlY2tMYXllcnNGcm9tTGF5ZXJPcmRlcihcbiAgICAgICAgICAgICAgbGF5ZXJHcm91cC5sYXllck9yZGVyLFxuICAgICAgICAgICAgICBsYXllcnMsXG4gICAgICAgICAgICAgIGxheWVyRGF0YSxcbiAgICAgICAgICAgICAgY3VycmVudExheWVyc0ZvckRlY2ssXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgICAgICAgICBob3ZlckluZm8sXG4gICAgICAgICAgICAgICAgY2xpY2tlZCxcbiAgICAgICAgICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgICAgICAgbWFwTGF5ZXJzLFxuICAgICAgICAgICAgICAgIGhhc1NoYWRvd0VmZmVjdCxcbiAgICAgICAgICAgICAgICBpc0Fubm90YXRpb25Nb2RlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGxheWVyQ2FsbGJhY2tzXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXllcklkID0gZWxlbWVudCBhcyBzdHJpbmc7XG4gICAgICAgIGlmICghY3VycmVudExheWVyc0ZvckRlY2tbbGF5ZXJJZF0pIHtcbiAgICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGF5ZXJJbmRleCA9IGxheWVycy5maW5kSW5kZXgoKHtpZH0pID0+IGlkID09PSBsYXllcklkKTtcbiAgICAgICAgaWYgKGxheWVySW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIG92ZXJsYXlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJpbmRlZExheWVyQ2FsbGJhY2tzID0gbGF5ZXJDYWxsYmFja3NcbiAgICAgICAgICA/IGJpbmRMYXllckNhbGxiYWNrcyhsYXllckNhbGxiYWNrcywgbGF5ZXJJbmRleClcbiAgICAgICAgICA6IHt9O1xuICAgICAgICBjb25zdCBsYXllciA9IGxheWVyc1tsYXllckluZGV4XTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGxheWVyRGF0YVtsYXllckluZGV4XTtcbiAgICAgICAgY29uc3QgbGF5ZXJPdmVybGF5ID0gcmVuZGVyRGVja0dsTGF5ZXIoXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGF0YXNldHMsXG4gICAgICAgICAgICBsYXllcixcbiAgICAgICAgICAgIGxheWVySW5kZXgsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgaG92ZXJJbmZvLFxuICAgICAgICAgICAgY2xpY2tlZCxcbiAgICAgICAgICAgIG1hcFN0YXRlLFxuICAgICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgICBtYXBMYXllcnMsXG4gICAgICAgICAgICBleHBlcmltZW50YWxDb250ZXh0OiB7XG4gICAgICAgICAgICAgIGhhc1NoYWRvd0VmZmVjdCxcbiAgICAgICAgICAgICAgaXNBbm5vdGF0aW9uTW9kZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYmluZGVkTGF5ZXJDYWxsYmFja3NcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG92ZXJsYXlzLmNvbmNhdChsYXllck92ZXJsYXkgfHwgW10pO1xuICAgICAgfSwgW10pO1xuICB9XG5cbiAgaWYgKCFwcmltYXJ5TWFwKSB7XG4gICAgcmV0dXJuIGRhdGFMYXllcnM7XG4gIH1cblxuICBpZiAoXG4gICAgbWFwU3R5bGU/LnZpc2libGVMYXllckdyb3Vwc1snM2QgYnVpbGRpbmcnXSAmJlxuICAgIHByaW1hcnlNYXAgJiZcbiAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbiAmJlxuICAgIG1hcGJveEFwaVVybFxuICApIHtcbiAgICBkYXRhTGF5ZXJzLnB1c2goXG4gICAgICBuZXcgVGhyZWVEQnVpbGRpbmdMYXllcih7XG4gICAgICAgIGlkOiAnX2tlcGxlcmdsXzNkLWJ1aWxkaW5nJyxcbiAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgIG1hcGJveEFwaVVybCxcbiAgICAgICAgdGhyZWVEQnVpbGRpbmdDb2xvcjogbWFwU3R5bGUudGhyZWVEQnVpbGRpbmdDb2xvcixcbiAgICAgICAgcGlja2FibGU6IEJvb2xlYW4oaXNBbm5vdGF0aW9uTW9kZSksXG4gICAgICAgIHVwZGF0ZVRyaWdnZXJzOiB7XG4gICAgICAgICAgZ2V0RmlsbENvbG9yOiBtYXBTdHlsZS50aHJlZURCdWlsZGluZ0NvbG9yXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IFtjdXN0b21Cb3R0b21EZWNrTGF5ZXJzLCBjdXN0b21Ub3BEZWNrTGF5ZXJzXSA9IGdldEN1c3RvbURlY2tMYXllcnMoZGVja0dsUHJvcHMpO1xuXG4gIGNvbnN0IGVkaXRvckxheWVyOiBhbnlbXSA9IFtdO1xuICBpZiAoZWRpdG9ySW5mbykge1xuICAgIGVkaXRvckxheWVyLnB1c2goXG4gICAgICBnZXRFZGl0b3JMYXllcih7XG4gICAgICAgIC4uLmVkaXRvckluZm8sXG4gICAgICAgIG1hcFN0YXRlXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gWy4uLmN1c3RvbUJvdHRvbURlY2tMYXllcnMsIC4uLmRhdGFMYXllcnMsIC4uLmN1c3RvbVRvcERlY2tMYXllcnMsIC4uLmVkaXRvckxheWVyXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzPFQgZXh0ZW5kcyB7aWQ6IHN0cmluZ30+KGxheWVyczogVFtdKTogc3RyaW5nW10ge1xuICByZXR1cm4gbGF5ZXJzLm1hcCgoe2lkfSkgPT4gaWQpO1xufVxuXG4vLyAtLS0gTGF5ZXIgR3JvdXAgVXRpbGl0aWVzIC0tLVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV3TGF5ZXJHcm91cChwcm9wcz86IFBhcnRpYWw8TGF5ZXJPcmRlckdyb3VwPik6IExheWVyT3JkZXJHcm91cCB7XG4gIHJldHVybiB7XG4gICAgaWQ6IHByb3BzPy5pZCA/PyBnZW5lcmF0ZUhhc2hJZCg2KSxcbiAgICBsYWJlbDogcHJvcHM/LmxhYmVsID8/ICdOZXcgZ3JvdXAnLFxuICAgIGlzVmlzaWJsZTogcHJvcHM/LmlzVmlzaWJsZSA/PyB0cnVlLFxuICAgIGxheWVyT3JkZXI6IHByb3BzPy5sYXllck9yZGVyID8/IFtdLFxuICAgIGlzSW5jbHVkZWRJbkxlZ2VuZDogcHJvcHM/LmlzSW5jbHVkZWRJbkxlZ2VuZCA/PyB0cnVlXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IExheWVyT3JkZXIsXG4gIGVsZW1lbnQ6IExheWVyT3JkZXJFbnRyeSxcbiAgYXRJbmRleD86IG51bWJlclxuKTogTGF5ZXJPcmRlciB7XG4gIGNvbnN0IGlkeCA9IGF0SW5kZXggPz8gMDtcbiAgY29uc3QgcmVzdWx0ID0gWy4uLmxheWVyT3JkZXJdO1xuICByZXN1bHQuc3BsaWNlKGlkeCwgMCwgZWxlbWVudCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IExheWVyT3JkZXIsXG4gIGVsZW1lbnQ6IExheWVyT3JkZXJFbnRyeVxuKTogTGF5ZXJPcmRlciB7XG4gIGlmICghbGF5ZXJPcmRlcikgcmV0dXJuIFtdO1xuICBjb25zdCBlbGVtZW50SWQgPSB0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycgPyBlbGVtZW50IDogZWxlbWVudC5pZDtcbiAgbGV0IG5ld0xheWVyT3JkZXIgPSBsYXllck9yZGVyLmZpbHRlcihlbnRyeSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICByZXR1cm4gKGVudHJ5IGFzIExheWVyT3JkZXJHcm91cCkuaWQgIT09IGVsZW1lbnRJZDtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJ5ICE9PSBlbGVtZW50SWQ7XG4gIH0pO1xuXG4gIG5ld0xheWVyT3JkZXIgPSBuZXdMYXllck9yZGVyLm1hcChlbnRyeSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBjb25zdCBncm91cCA9IGVudHJ5IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdyb3VwLFxuICAgICAgICBsYXllck9yZGVyOiByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoZ3JvdXAubGF5ZXJPcmRlciwgZWxlbWVudElkKVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJ5O1xuICB9KTtcblxuICByZXR1cm4gbmV3TGF5ZXJPcmRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJHcm91cElkOiBzdHJpbmdcbik6IExheWVyT3JkZXJHcm91cCB8IHVuZGVmaW5lZCB7XG4gIGxldCBncm91cDogTGF5ZXJPcmRlckdyb3VwIHwgdW5kZWZpbmVkO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxheWVyT3JkZXIubGVuZ3RoICYmICFncm91cDsgaSsrKSB7XG4gICAgY29uc3QgZW50cnkgPSBsYXllck9yZGVyW2ldO1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgY29uc3QgZ3JwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgZ3JvdXAgPVxuICAgICAgICBncnAuaWQgPT09IGxheWVyR3JvdXBJZCA/IGdycCA6IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihncnAubGF5ZXJPcmRlciwgbGF5ZXJHcm91cElkKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIHBhcmVudCBncm91cCB0aGF0IGNvbnRhaW5zIGEgZ2l2ZW4gbGF5ZXIgSUQuXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgbGF5ZXIgaXMgYXQgdGhlIHJvb3QgbGV2ZWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJJZDogc3RyaW5nXG4pOiBMYXllck9yZGVyR3JvdXAgfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGxheWVyT3JkZXIpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgaWYgKGdyb3VwLmxheWVyT3JkZXIuc29tZShlID0+IHR5cGVvZiBlID09PSAnc3RyaW5nJyAmJiBlID09PSBsYXllcklkKSkge1xuICAgICAgICByZXR1cm4gZ3JvdXA7XG4gICAgICB9XG4gICAgICBjb25zdCBuZXN0ZWQgPSBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihncm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgICAgIGlmIChuZXN0ZWQpIHJldHVybiBuZXN0ZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbmRleEZyb21MYXllckVudHJ5SWQobGF5ZXJPcmRlcjogTGF5ZXJPcmRlciwgbGF5ZXJFbnRyeUlkOiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICBpc1BsYWluT2JqZWN0KGVudHJ5KSA/IChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmlkID09PSBsYXllckVudHJ5SWQgOiBlbnRyeSA9PT0gbGF5ZXJFbnRyeUlkXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xheWVyUHJlc2VudEluTGF5ZXJPcmRlcihsYXllck9yZGVyOiBMYXllck9yZGVyLCBsYXllcklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgbGV0IGZvdW5kID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5ZXJPcmRlci5sZW5ndGggJiYgIWZvdW5kOyBpKyspIHtcbiAgICBjb25zdCBlbnRyeSA9IGxheWVyT3JkZXJbaV07XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBmb3VuZCA9IGlzTGF5ZXJQcmVzZW50SW5MYXllck9yZGVyKChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3VuZCA9IGxheWVySWQgPT09IGVudHJ5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgb2xkRW50cnk6IExheWVyT3JkZXJFbnRyeSxcbiAgbmV3RW50cnk6IExheWVyT3JkZXJFbnRyeVxuKTogTGF5ZXJPcmRlciB7XG4gIGNvbnN0IG9sZEVudHJ5SWQgPSB0eXBlb2Ygb2xkRW50cnkgPT09ICdzdHJpbmcnID8gb2xkRW50cnkgOiBvbGRFbnRyeS5pZDtcbiAgcmV0dXJuIGxheWVyT3JkZXIubWFwKGVudHJ5ID0+IHtcbiAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGVudHJ5ID09PSBvbGRFbnRyeUlkID8gbmV3RW50cnkgOiBlbnRyeTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBjb25zdCBncnAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBpZiAoZ3JwLmlkID09PSBvbGRFbnRyeUlkKSB7XG4gICAgICAgIHJldHVybiBuZXdFbnRyeTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdycCxcbiAgICAgICAgbGF5ZXJPcmRlcjogcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIoZ3JwLmxheWVyT3JkZXIsIG9sZEVudHJ5LCBuZXdFbnRyeSlcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBuZXdMYXllckdyb3VwOiBMYXllck9yZGVyR3JvdXBcbik6IExheWVyT3JkZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5tYXAoZW50cnkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgY29uc3QgZ3JwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgaWYgKGdycC5pZCA9PT0gbmV3TGF5ZXJHcm91cC5pZCkge1xuICAgICAgICByZXR1cm4gbmV3TGF5ZXJHcm91cDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdycCxcbiAgICAgICAgbGF5ZXJPcmRlcjogdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihncnAubGF5ZXJPcmRlciwgbmV3TGF5ZXJHcm91cClcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGbGF0TGF5ZXJPcmRlcihsYXllck9yZGVyOiBMYXllck9yZGVyKTogRmxhdExheWVyT3JkZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5yZWR1Y2UoKGFjYywgb3JkZXJFbnRyeSkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG9yZGVyRW50cnkpKSB7XG4gICAgICByZXR1cm4gWy4uLmFjYywgLi4uZ2V0RmxhdExheWVyT3JkZXIoKG9yZGVyRW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKS5sYXllck9yZGVyKV07XG4gICAgfVxuICAgIHJldHVybiBbLi4uYWNjLCBvcmRlckVudHJ5IGFzIHN0cmluZ107XG4gIH0sIFtdIGFzIEZsYXRMYXllck9yZGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTGF5ZXJPcmRlckhpZXJhcmNoeShcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJzPzogTGF5ZXJbXSB8IHJlYWRvbmx5IExheWVyW11cbik6IExheWVyT3JkZXJIaWVyYXJjaHkge1xuICBjb25zdCB2YWxpZExheWVycyA9IGxheWVycz8uZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gbGF5ZXJPcmRlci5yZWR1Y2UoKGFjYywgZWxlbWVudCkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gWy4uLmFjYywgWydsYXllckdyb3VwJywgZWxlbWVudCBhcyBMYXllck9yZGVyR3JvdXBdIGFzIGNvbnN0XTtcbiAgICB9XG4gICAgY29uc3QgbGF5ZXIgPSB2YWxpZExheWVycz8uZmluZChsID0+IGwuaWQgPT09IGVsZW1lbnQpO1xuICAgIGlmICghbGF5ZXIgfHwgbGF5ZXIuY29uZmlnLmhpZGRlbikge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5hY2MsIFsnbGF5ZXInLCBsYXllcl0gYXMgY29uc3RdO1xuICB9LCBbXSBhcyBMYXllck9yZGVySGllcmFyY2h5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUdob3N0TGF5ZXJGcm9tTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJzOiB7aWQ6IHN0cmluZ31bXVxuKTogTGF5ZXJPcmRlciB7XG4gIHJldHVybiBsYXllck9yZGVyLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAobGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBlbnRyeSkpIHtcbiAgICAgICAgYWNjLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBncnAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBpZiAoZ3JwLmxheWVyT3JkZXIpIHtcbiAgICAgICAgYWNjLnB1c2goe1xuICAgICAgICAgIC4uLmdycCxcbiAgICAgICAgICBsYXllck9yZGVyOiByZW1vdmVHaG9zdExheWVyRnJvbUxheWVyT3JkZXIoZ3JwLmxheWVyT3JkZXIsIGxheWVycylcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdIGFzIExheWVyT3JkZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVvcmRlckxheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IFZpc1N0YXRlWydsYXllck9yZGVyJ10sXG4gIG9yaWdpbkxheWVySWQ6IHN0cmluZyxcbiAgZGVzdGluYXRpb25MYXllcklkOiBzdHJpbmdcbik6IFZpc1N0YXRlWydsYXllck9yZGVyJ10ge1xuICBjb25zdCBhY3RpdmVJbmRleCA9IGdldEluZGV4RnJvbUxheWVyRW50cnlJZChsYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgY29uc3Qgb3ZlckluZGV4ID0gZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkKGxheWVyT3JkZXIsIGRlc3RpbmF0aW9uTGF5ZXJJZCk7XG5cbiAgaWYgKGFjdGl2ZUluZGV4ID09PSAtMSB8fCBvdmVySW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIGxheWVyT3JkZXI7XG4gIH1cbiAgcmV0dXJuIGFycmF5TW92ZShsYXllck9yZGVyLCBhY3RpdmVJbmRleCwgb3ZlckluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZExheWVyVG9MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBWaXNTdGF0ZVsnbGF5ZXJPcmRlciddLFxuICBsYXllcklkOiBzdHJpbmdcbik6IExheWVyT3JkZXIge1xuICByZXR1cm4gW2xheWVySWQsIC4uLmxheWVyT3JkZXJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJIb3ZlclByb3BWYWx1ZShcbiAgZGF0YTogRGF0YVJvdyB8IEFnZ3JlZ2F0aW9uTGF5ZXJIb3ZlckRhdGEgfCBhbnlbXSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGZpZWxkSW5kZXg6IG51bWJlclxuKSB7XG4gIGlmICghZGF0YSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBEYXRhUm93KSByZXR1cm4gZGF0YS52YWx1ZUF0KGZpZWxkSW5kZXgpO1xuICByZXR1cm4gZGF0YVtmaWVsZEluZGV4XTtcbn1cblxuLyoqIENoZWNrcyBpZiBhbnkgRGVjayBsYXllcnMgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGxvYWRpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gYXJlQW55RGVja0xheWVyc0xvYWRpbmcobGF5ZXJzOiBEZWNrTGF5ZXJbXSk6IGJvb2xlYW4ge1xuICByZXR1cm4gbGF5ZXJzLnNvbWUoXG4gICAgLy8gbGF5ZXIuaXNMb2FkZWQgY2hhbmdlcyBmcmVxdWVudGx5IGluIERlY2sgKGV2ZW4gb24gaG92ZXIpIHNvIHdlIGNoZWNrIGFkZGl0aW9uYWwgcHJvcGVydGllc1xuICAgIGxheWVyID0+IGxheWVyLmludGVybmFsU3RhdGUgJiYgIWxheWVyLmlzTG9hZGVkXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQSxPQUFPQSxPQUFPLE1BQU0sZ0JBQWdCO0FBRXBDLFNBQVFDLGlCQUFpQixFQUFFQyx1QkFBdUIsUUFBTyxzQkFBc0I7QUFxQi9FLFNBS0VDLGtCQUFrQixFQUNsQkMsY0FBYyxRQUNULG1CQUFtQjtBQUkxQixTQUFRQyxVQUFVLEVBQUVDLHlCQUF5QixFQUFFQyxPQUFPLEVBQUVDLGFBQWEsUUFBTyxrQkFBa0I7QUFDOUYsU0FBUUMsU0FBUyxFQUFFQyxjQUFjLFFBQU8seUJBQXlCO0FBRWpFLFNBQVFDLG1CQUFtQixRQUFPLDBCQUEwQjtBQTZCNUQ7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTQyxnQkFBZ0JBLENBQUNDLE9BQW9CLEVBQUVDLFlBQThCLEVBQVc7RUFDOUYsSUFBSSxDQUFDRCxPQUFPLEVBQUU7SUFDWixPQUFPLEVBQUU7RUFDWDtFQUVBLElBQU1FLFVBQVUsR0FBSUMsTUFBTSxDQUFDQyxJQUFJLENBQUNILFlBQVksQ0FBQyxDQUFtQ0ksTUFBTSxDQUNwRixVQUFDQyxRQUFRLEVBQUVDLEVBQUUsRUFBSztJQUNoQixJQUFNQyxNQUF3QyxHQUM1QyxPQUFPUCxZQUFZLENBQUNNLEVBQUUsQ0FB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QUFNO01BQ0wsSUFBTUssR0FBRyxHQUFHTCxLQUF3QjtNQUNwQyxJQUFJSyxHQUFHLENBQUNsRSxVQUFVLEVBQUU7UUFDbEJuRSxHQUFHLENBQUNvRyxJQUFJLENBQUFsSSxhQUFBLENBQUFBLGFBQUEsS0FDSG1LLEdBQUc7VUFDTmxFLFVBQVUsRUFBRStGLDhCQUE4QixDQUFDN0IsR0FBRyxDQUFDbEUsVUFBVSxFQUFFOUUsTUFBTTtRQUFDLEVBQ25FLENBQUM7TUFDSjtJQUNGO0lBQ0EsT0FBT1csR0FBRztFQUNaLENBQUMsRUFBRSxFQUFnQixDQUFDO0FBQ3RCO0FBRUEsT0FBTyxTQUFTbUssaUJBQWlCQSxDQUMvQmhHLFVBQWtDLEVBQ2xDaUcsYUFBcUIsRUFDckJDLGtCQUEwQixFQUNGO0VBQ3hCLElBQU1DLFdBQVcsR0FBR3JCLHdCQUF3QixDQUFDOUUsVUFBVSxFQUFFaUcsYUFBYSxDQUFDO0VBQ3ZFLElBQU1HLFNBQVMsR0FBR3RCLHdCQUF3QixDQUFDOUUsVUFBVSxFQUFFa0csa0JBQWtCLENBQUM7RUFFMUUsSUFBSUMsV0FBVyxLQUFLLENBQUMsQ0FBQyxJQUFJQyxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7SUFDMUMsT0FBT3BHLFVBQVU7RUFDbkI7RUFDQSxPQUFPdEgsU0FBUyxDQUFDc0gsVUFBVSxFQUFFbUcsV0FBVyxFQUFFQyxTQUFTLENBQUM7QUFDdEQ7QUFFQSxPQUFPLFNBQVNDLG9CQUFvQkEsQ0FDbENyRyxVQUFrQyxFQUNsQ1UsT0FBZSxFQUNIO0VBQ1osUUFBUUEsT0FBTyxFQUFBOUcsTUFBQSxDQUFBZ0osa0JBQUEsQ0FBSzVDLFVBQVU7QUFDaEM7QUFFQSxPQUFPLFNBQVNzRyxzQkFBc0JBLENBQ3BDeEksSUFBb0UsRUFDcEV5SSxVQUFrQixFQUNsQjtFQUNBLElBQUksQ0FBQ3pJLElBQUksRUFBRSxPQUFPL0MsU0FBUztFQUMzQixJQUFJK0MsSUFBSSxZQUFZdEYsT0FBTyxFQUFFLE9BQU9zRixJQUFJLENBQUMwSSxPQUFPLENBQUNELFVBQVUsQ0FBQztFQUM1RCxPQUFPekksSUFBSSxDQUFDeUksVUFBVSxDQUFDO0FBQ3pCOztBQUVBO0FBQ0EsT0FBTyxTQUFTRSx1QkFBdUJBLENBQUN2TCxNQUFtQixFQUFXO0VBQ3BFLE9BQU9BLE1BQU0sQ0FBQ0wsSUFBSTtFQUNoQjtFQUNBLFVBQUFULEtBQUs7SUFBQSxPQUFJQSxLQUFLLENBQUNzTSxhQUFhLElBQUksQ0FBQ3RNLEtBQUssQ0FBQ3VNLFFBQVE7RUFBQSxDQUNqRCxDQUFDO0FBQ0giLCJpZ25vcmVMaXN0IjpbXX0=
|