@fireflysemantics/slice 17.0.13 → 17.0.16
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/README.md +7 -4
- package/esm2022/lib/AbstractStore.mjs +17 -14
- package/esm2022/lib/EStore.mjs +203 -139
- package/esm2022/lib/OStore.mjs +1 -1
- package/esm2022/lib/Slice.mjs +10 -10
- package/fesm2022/fireflysemantics-slice.mjs +227 -160
- package/fesm2022/fireflysemantics-slice.mjs.map +1 -1
- package/lib/AbstractStore.d.ts +16 -13
- package/lib/EStore.d.ts +182 -116
- package/lib/OStore.d.ts +1 -1
- package/lib/Slice.d.ts +9 -9
- package/package.json +1 -1
package/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# @fireflysemantics/slice
|
4
4
|
|
5
|
-
##
|
5
|
+
## Table of Contents
|
6
6
|
|
7
7
|
- [Overview](#overview)
|
8
8
|
- [Why Slice](#why-slice)
|
@@ -11,6 +11,7 @@
|
|
11
11
|
- [Entity Store Core Use Cases](#entity-store-core-use-cases)
|
12
12
|
- [Features](#features)
|
13
13
|
- [Documentatino and Media](#firefly-semantics-slice-development-center-media-and-documentation)
|
14
|
+
- [Getting Help](#getting-help)
|
14
15
|
|
15
16
|
## Overview
|
16
17
|
|
@@ -569,15 +570,17 @@ See [Typedoc API Documentation](https://fireflysemantics.github.io/slice/typedoc
|
|
569
570
|
|
570
571
|
The documentation for the API includes simple examples of how to apply the API to a use case.
|
571
572
|
|
573
|
+
## Getting Help
|
574
|
+
|
575
|
+
[Firefly Semantics Slice on Stackoverflow](https://stackoverflow.com/questions/tagged/fireflysemantics-slice)
|
576
|
+
|
572
577
|
## Build
|
573
578
|
|
574
579
|
Run `npm run c` to build the project. The build artifacts will be stored in the `dist/` directory.
|
575
580
|
|
576
581
|
## Running unit tests
|
577
582
|
|
578
|
-
Run `npm run test` to execute the unit tests
|
579
|
-
|
580
|
-
|
583
|
+
Run `npm run test` to execute the unit tests.
|
581
584
|
|
582
585
|
## Tests
|
583
586
|
|
@@ -242,10 +242,10 @@ export class AbstractStore {
|
|
242
242
|
* @param p The predicate used to query for the selection.
|
243
243
|
* @return A snapshot array containing the entities that match the predicate.
|
244
244
|
*
|
245
|
-
* @example Select all the
|
246
|
-
|
247
|
-
|
248
|
-
|
245
|
+
* @example Select all the Todo instances where the title length is greater than 100.
|
246
|
+
* ```
|
247
|
+
* let todos:Todo[]=store.select(todo=>todo.title.length>100);
|
248
|
+
* ```
|
249
249
|
*/
|
250
250
|
select(p) {
|
251
251
|
const selected = [];
|
@@ -261,10 +261,11 @@ export class AbstractStore {
|
|
261
261
|
* @param e1 The first entity
|
262
262
|
* @param e2 The second entity
|
263
263
|
* @return true if the two entities have equal GUID ids
|
264
|
-
*
|
265
|
-
|
266
|
-
|
267
|
-
|
264
|
+
*
|
265
|
+
* @example Compare todo1 with todo2 by gid.
|
266
|
+
* ```
|
267
|
+
* if (equalsByGUID(todo1, todo2)){...};
|
268
|
+
* ```
|
268
269
|
*/
|
269
270
|
equalsByGUID(e1, e2) {
|
270
271
|
return e1[this.GUID_KEY] == e2[this.GUID_KEY];
|
@@ -274,16 +275,18 @@ export class AbstractStore {
|
|
274
275
|
* @param e1 The first entity
|
275
276
|
* @param e2 The second entity
|
276
277
|
* @return true if the two entities have equal ID ids
|
277
|
-
*
|
278
|
-
|
279
|
-
|
280
|
-
|
278
|
+
*
|
279
|
+
* @example Compare todo1 with todo2 by id.
|
280
|
+
*
|
281
|
+
* ```
|
282
|
+
* if (equalsByID(todo1, todo2)){...};
|
283
|
+
* ```
|
281
284
|
*/
|
282
285
|
equalsByID(e1, e2) {
|
283
286
|
return e1[this.ID_KEY] == e2[this.ID_KEY];
|
284
287
|
}
|
285
288
|
/**
|
286
|
-
* Calls complete on all {@link
|
289
|
+
* Calls complete on all {@link ReplaySubject} instances.
|
287
290
|
*
|
288
291
|
* Call destroy when disposing of the store.
|
289
292
|
*/
|
@@ -293,4 +296,4 @@ export class AbstractStore {
|
|
293
296
|
this.notifyQuery.complete();
|
294
297
|
}
|
295
298
|
}
|
296
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RTdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NsaWNlL3NyYy9saWIvQWJzdHJhY3RTdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFjLE1BQU0sTUFBTSxDQUFBO0FBQ2hELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUlwQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFBO0FBRXpCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFBO0FBQ2xDLE1BQU0sc0JBQXNCLEdBQUcsS0FBSyxDQUFBO0FBRXBDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFnQixNQUFNLENBQUM7SUFDdkQsS0FBSyxFQUFFLHFCQUFxQjtJQUM1QixPQUFPLEVBQUUsc0JBQXNCO0NBQ2hDLENBQUMsQ0FBQztBQUVILE1BQU0sT0FBZ0IsYUFBYTtJQU9oQyxZQUFZLE1BQW9CO1FBTWpDOztXQUVHO1FBQ08sZ0JBQVcsR0FBRyxJQUFJLGFBQWEsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUVyRDs7V0FFRztRQUNPLFdBQU0sR0FBVyxFQUFFLENBQUM7UUE0QzlCOztXQUVHO1FBQ0ksWUFBTyxHQUFtQixJQUFJLEdBQUcsRUFBRSxDQUFBO1FBRTFDOzs7V0FHRztRQUNJLGNBQVMsR0FBbUIsSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUU1Qzs7O1dBR0c7UUFDTyxXQUFNLEdBQUcsSUFBSSxhQUFhLENBQU0sQ0FBQyxDQUFDLENBQUE7UUFFNUM7OztXQUdHO1FBQ08sZ0JBQVcsR0FBRyxJQUFJLGFBQWEsQ0FBVyxDQUFDLENBQUMsQ0FBQTtRQThCdEQ7Ozs7O1dBS0c7UUFDSyxRQUFHLEdBQW9CLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQWxIMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNO1lBQ2xCLENBQUMsQ0FBQyxNQUFNLENB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SUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7U0FDM0Q7UUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNsRCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsV0FBVztRQUNULE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsUUFBUSxDQUFDLE1BQWtCO1FBQ3pCLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQ2hEO1FBQ0QsTUFBTSxJQUFJLEdBQWlCLE1BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsWUFBWSxDQUFDLE1BQWtCO1FBQzdCLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQ2xEO1FBQ0QsTUFBTSxFQUFFLEdBQWlCLE1BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxPQUFPLENBQUMsSUFBWTtRQUNsQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxXQUFXLENBQUMsRUFBVTtRQUNwQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsTUFBTSxDQUFDLENBQWU7UUFDcEIsTUFBTSxRQUFRLEdBQVEsRUFBRSxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM1QyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDUixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsWUFBWSxDQUFDLEVBQU0sRUFBRSxFQUFNO1FBQ3pCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxVQUFVLENBQUMsRUFBTSxFQUFFLEVBQU07UUFDdkIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxPQUFPO1FBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDOUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVwbGF5U3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCJcbmltcG9ydCB7IG1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiXG5pbXBvcnQgeyBEZWx0YSwgUHJlZGljYXRlIH0gZnJvbSBcIi4vbW9kZWxzXCJcbmltcG9ydCB7IFN0b3JlQ29uZmlnIH0gZnJvbSBcIi4vbW9kZWxzL1N0b3JlQ29uZmlnXCJcblxuY29uc3QgeyBmcmVlemUgfSA9IE9iamVjdFxuXG5jb25zdCBFU1RPUkVfREVGQVVMVF9JRF9LRVkgPSBcImlkXCJcbmNvbnN0IEVTVE9SRV9ERUZBVUxUX0dJRF9LRVkgPSBcImdpZFwiXG5cbmV4cG9ydCBjb25zdCBFU1RPUkVfQ09ORklHX0RFRkFVTFQ6IFN0b3JlQ29uZmlnID0gZnJlZXplKHtcbiAgaWRLZXk6IEVTVE9SRV9ERUZBVUxUX0lEX0tFWSxcbiAgZ3VpZEtleTogRVNUT1JFX0RFRkFVTFRfR0lEX0tFWVxufSk7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFN0b3JlPEU+IHtcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzdG9yZS5cbiAgICovXG4gICBwdWJsaWMgY29uZmlnOiBTdG9yZUNvbmZpZztcblxuICAgY29uc3RydWN0b3IoY29uZmlnPzogU3RvcmVDb25maWcpIHtcbiAgICAgdGhpcy5jb25maWcgPSBjb25maWdcbiAgICAgICA/IGZyZWV6ZSh7IC4uLkVTVE9SRV9DT05GSUdfREVGQVVMVCwgLi4uY29uZmlnIH0pXG4gICAgICAgOiBFU1RPUkVfQ09ORklHX0RFRkFVTFQ7XG4gICB9XG4gXG4gIC8qKlxuICAgKiBOb3RpZmllcyBvYnNlcnZlcnMgb2YgdGhlIHN0b3JlIHF1ZXJ5LlxuICAgKi9cbiAgcHJvdGVjdGVkIG5vdGlmeVF1ZXJ5ID0gbmV3IFJlcGxheVN1YmplY3Q8c3RyaW5nPigxKTtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgcXVlcnkgc3RhdGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3F1ZXJ5OiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogU2V0cyB0aGUgY3VycmVudCBxdWVyeSBzdGF0ZSBhbmQgbm90aWZpZXMgb2JzZXJ2ZXJzLlxuICAgKi9cbiAgc2V0IHF1ZXJ5KHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9xdWVyeSA9IHF1ZXJ5O1xuICAgIHRoaXMubm90aWZ5UXVlcnkubmV4dCh0aGlzLl9xdWVyeSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiBBIHNuYXBzaG90IG9mIHRoZSBxdWVyeSBzdGF0ZS5cbiAgICovXG4gIGdldCBxdWVyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogT2JzZXJ2ZSB0aGUgcXVlcnkuXG4gICAqIEBleGFtcGxlXG4gICAgIDxwcmU+XG4gICAgbGV0IHF1ZXJ5JCA9IHNvdXJjZS5vYnNlcnZlUXVlcnkoKTtcbiAgICA8L3ByZT5cbiAgKi9cbiAgcHVibGljIG9ic2VydmVRdWVyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5ub3RpZnlRdWVyeS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IGlkIGtleSBmb3IgdGhlIEVTdG9yZSBpbnN0YW5jZS5cbiAgICogQHJldHVybiB0aGlzLmNvbmZpZy5pZEtleTtcbiAgICovXG4gIGdldCBJRF9LRVkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuaWRLZXlcbiAgfVxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgZ3VpZCBrZXkgZm9yIHRoZSBFU3RvcmUgaW5zdGFuY2UuXG4gICAqIEByZXR1cm4gdGhpcy5jb25maWcuZ3VpZEtleTtcbiAgICovXG4gIGdldCBHVUlEX0tFWSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5ndWlkS2V5XG4gIH1cblxuICAvKipcbiAgICogUHJpbWFyeSBpbmRleCBmb3IgdGhlIHN0b3JlcyBlbGVtZW50cy5cbiAgICovXG4gIHB1YmxpYyBlbnRyaWVzOiBNYXA8c3RyaW5nLCBFPiA9IG5ldyBNYXAoKVxuXG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCBlbnRyaWVzIHRoYXQgYXJlIGtleWVkIGJ5XG4gICAqIGFuIGlkIGdlbmVyYXRlZCBvbiB0aGUgc2VydmVyLlxuICAgKi9cbiAgcHVibGljIGlkRW50cmllczogTWFwPHN0cmluZywgRT4gPSBuZXcgTWFwKClcblxuICAvKipcbiAgICogQ3JlYXRlIG5vdGlmaWNhdGlvbnMgdGhhdCBicm9hY2FzdFxuICAgKiB0aGUgZW50aXJlIHNldCBvZiBlbnRyaWVzLlxuICAgKi9cbiAgcHJvdGVjdGVkIG5vdGlmeSA9IG5ldyBSZXBsYXlTdWJqZWN0PEVbXT4oMSlcblxuICAvKipcbiAgICogQ3JlYXRlIG5vdGlmaWNhdGlvbnMgdGhhdCBicm9hY2FzdFxuICAgKiBzdG9yZSBvciBzbGljZSBkZWx0YSBzdGF0ZSBjaGFuZ2VzLlxuICAgKi9cbiAgcHJvdGVjdGVkIG5vdGlmeURlbHRhID0gbmV3IFJlcGxheVN1YmplY3Q8RGVsdGE8RT4+KDEpXG5cbiAgLyoqXG4gICAqIENhbGwgYWxsIHRoZSBub3RpZmllcnMgYXQgb25jZS5cbiAgICpcbiAgICogQHBhcmFtIHZcbiAgICogQHBhcmFtIGRlbHRhXG4gICAqL1xuICBwcm90ZWN0ZWQgbm90aWZ5QWxsKHY6IEVbXSwgZGVsdGE6IERlbHRhPEU+KSB7XG4gICAgdGhpcy5ub3RpZnkubmV4dCh2KTtcbiAgICB0aGlzLm5vdGlmeURlbHRhLm5leHQoZGVsdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9ic2VydmUgc3RvcmUgc3RhdGUgY2hhbmdlcy5cbiAgICogQHBhcmFtIHNvcnQgT3B0aW9uYWwgc29ydGluZyBmdW5jdGlvbiB5aWVsZGluZyBhIHNvcnRlZCBvYnNlcnZhYmxlLlxuICAgKiBAZXhhbXBsZVxuYGBgXG5sZXQgdG9kb3MkID0gc291cmNlLm9ic2VydmUoKTtcbi8vb3Igd2l0aCBhIHNvcnQgYnkgdGl0bGUgZnVuY3Rpb25cbmxldCB0b2RvcyQgPSBzb3VyY2Uub2JzZXJ2ZSgoYSwgYik9PihhLnRpdGxlID4gYi50aXRsZSA/IC0xIDogMSkpO1xuYGBgXG4gICovXG4gIHB1YmxpYyBvYnNlcnZlKHNvcnQ/OiAoYTogYW55LCBiOiBhbnkpID0+IG51bWJlcik6IE9ic2VydmFibGU8RVtdPiB7XG4gICAgaWYgKHNvcnQpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vdGlmeS5waXBlKG1hcCgoZTogRVtdKSA9PiBlLnNvcnQoc29ydCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubm90aWZ5LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIE9ic2VydmFibGU8RVtdPiByZWZlcmVuY2VcbiAgICogdG8gdGhlIGVudGl0aWVzIGluIHRoZSBzdG9yZSBvclxuICAgKiBTbGljZSBpbnN0YW5jZS5cbiAgICogXG4gICAqL1xuICAgcHVibGljIG9iczogT2JzZXJ2YWJsZTxFW10+ID0gdGhpcy5vYnNlcnZlKClcblxuXG5cbiAgLyoqXG4gICAqIE9ic2VydmUgZGVsdGEgdXBkYXRlcy5cbiAgICogQGV4YW1wbGVcbiAgICAgPHByZT5cbiAgICAgbGV0IHRvZG9zJCA9IHNvdXJjZS5vYnNlcnZlRGVsdGEoKTtcbiAgICAgPC9wcmU+XG4gICAqL1xuICBwdWJsaWMgb2JzZXJ2ZURlbHRhKCk6IE9ic2VydmFibGU8RGVsdGE8RT4+IHtcbiAgICByZXR1cm4gdGhpcy5ub3RpZnlEZWx0YS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBzdG9yZSBpcyBlbXB0eS5cbiAgICogXG4gICAqIEByZXR1cm4gQSBob3Qge0BsaW5rIE9ic2VydmFibGV9IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0b3JlIGlzIGVtcHR5LlxuICAgKiBcbiAgICogQGV4YW1wbGVcbiAgICA8cHJlPlxuICAgIHNvdXJjZS5pc0VtcHR5KCk7XG4gICAgPC9wcmU+XG4gICovXG4gIGlzRW1wdHkoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMubm90aWZ5LnBpcGUoXG4gICAgICBtYXAoKGVudHJpZXM6IEVbXSkgPT4gZW50cmllcy5sZW5ndGggPT0gMClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHN0b3JlIGlzIGVtcHR5LlxuICAgKiBcbiAgICogQHJldHVybiBBIHNuYXBzaG90IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0b3JlIGlzIGVtcHR5LlxuICAgKiBcbiAgICogQGV4YW1wbGVcbiAgICAgPHByZT5cbiAgICBzb3VyY2UuaXNFbXB0eSgpO1xuICAgIDwvcHJlPlxuICAqL1xuICBpc0VtcHR5U25hcHNob3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLnZhbHVlcygpKS5sZW5ndGggPT0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZW50cmllcyBjb250YWluZWQuXG4gICAqIEBwYXJhbSBwIFRoZSBwcmVkaWNhdGUgdG8gYXBwbHkgaW4gb3JkZXIgdG8gZmlsdGVyIHRoZSBjb3VudFxuICAgKi9cbiAgY291bnQocD86IFByZWRpY2F0ZTxFPik6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgaWYgKHApIHtcbiAgICAgIHJldHVybiB0aGlzLm5vdGlmeS5waXBlKFxuICAgICAgICBtYXAoKGU6IEVbXSkgPT4gZS5yZWR1Y2UoKHRvdGFsLCBlKSA9PiB0b3RhbCArIChwKGUpID8gMSA6IDApLCAwKSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5vdGlmeS5waXBlKG1hcCgoZW50cmllczogRVtdKSA9PiBlbnRyaWVzLmxlbmd0aCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzbmFwc2hvdCBvZiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgY29udGFpbmVkIGluIHRoZSBzdG9yZS5cbiAgICogQHBhcmFtIHAgVGhlIHByZWRpY2F0ZSB0byBhcHBseSBpbiBvcmRlciB0byBmaWx0ZXIgdGhlIGNvdW50XG4gICAqL1xuICBjb3VudFNuYXBzaG90KHA/OiBQcmVkaWNhdGU8RT4pOiBudW1iZXIge1xuICAgIGlmIChwKSB7XG4gICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMudmFsdWVzKCkpLmZpbHRlcihwKS5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZW50cmllcy52YWx1ZXMoKSkubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFNuYXBzaG90IG9mIGFsbCBlbnRyaWVzLlxuICAgKiBcbiAgICogQHJldHVybiBTbmFwc2hvdCBhcnJheSBvZiBhbGwgdGhlIGVsZW1lbnRzIHRoZSBlbnRpdGllcyB0aGUgc3RvcmUgY29udGFpbnMuXG4gICAqIFxuICAgKiBAZXhhbXBsZSBPYnNlcnZlIGEgc25hcHNob3Qgb2YgYWxsIHRoZSBlbnRpdGllcyBpbiB0aGUgc3RvcmUuXG5gYGBcbmxldCBzZWxlY3RlZFRvZG9zOlRvZG9bXSA9IHNvdXJjZS5hbGxTbmFwc2hvdCgpO1xuYGBgXG4gICAqL1xuICBhbGxTbmFwc2hvdCgpOiBFW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZW50cmllcy52YWx1ZXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbnRyaWVzIGNvbnRhaW4gdGhlIGlkZW50aWZpZWQgaW5zdGFuY2UuXG4gICAqIFxuICAgKiBAcGFyYW0gdGFyZ2V0IEVpdGhlciBhbiBpbnN0YW5jZSBvZiB0eXBlIGBFYCBvciBhIGBndWlkYCBpZGVudGlmeWluZyB0aGUgaW5zdGFuY2UuIFxuICAgKiBAcGFyYW0gYnlJZCBXaGV0aGVyIHRoZSBsb29rdXAgc2hvdWxkIGJlIHBlcmZvcm1lZCB3aXRoIHRoZSBgaWRgIGtleSByYXRoZXIgdGhhbiB0aGUgYGd1aWRgLlxuICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBpbnN0YW5jZSBpZGVudGlmaWVkIGJ5IHRoZSBndWlkIGV4aXN0cywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKiBcbiAgICogQGV4YW1wbGVcbiAgICAgPHByZT5cbiAgICAgbGV0IGNvbnRhaW5zOmJvb2xlYW4gPSBzb3VyY2UuY29udGFpbnMoZ3VpZCk7XG4gICAgIDwvcHJlPlxuICAgKi9cbiAgY29udGFpbnModGFyZ2V0OiBFIHwgc3RyaW5nKTpib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHRoaXMuZW50cmllcy5nZXQodGFyZ2V0KSA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZ3VpZDogc3RyaW5nID0gKDxhbnk+dGFyZ2V0KVt0aGlzLmNvbmZpZy5ndWlkS2V5XTtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmdldChndWlkKSA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVudHJpZXMgY29udGFpbiB0aGUgaWRlbnRpZmllZCBpbnN0YW5jZS5cbiAgICogXG4gICAqIEBwYXJhbSB0YXJnZXQgRWl0aGVyIGFuIGluc3RhbmNlIG9mIHR5cGUgYEVgIG9yIGEgYGlkYCBpZGVudGlmeWluZyB0aGUgaW5zdGFuY2UuIFxuICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBpbnN0YW5jZSBpZGVudGlmaWVkIGJ5IHRoZSBgaWRgIGV4aXN0cywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKiBcbiAgICogQGV4YW1wbGVcbiAgICAgPHByZT5cbiAgICAgbGV0IGNvbnRhaW5zOmJvb2xlYW4gPSBzb3VyY2UuY29udGFpbnMoZ3VpZCk7XG4gICAgIDwvcHJlPlxuICAgKi9cbiAgY29udGFpbnNCeUlkKHRhcmdldDogRSB8IHN0cmluZyk6Ym9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmlkRW50cmllcy5nZXQodGFyZ2V0KSA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgaWQ6IHN0cmluZyA9ICg8YW55PnRhcmdldClbdGhpcy5jb25maWcuaWRLZXldO1xuICAgIHJldHVybiB0aGlzLmlkRW50cmllcy5nZXQoaWQpID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYW5kIHJldHVybiB0aGUgZW50aXR5IGlkZW50aWZpZWQgYnkgdGhlIEdVSUQgcGFyYW1ldGVyXG4gICAqIGlmIGl0IGV4aXN0cyBhbmQgcmV0dXJuIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpZFxuICAgKiBAcmV0dXJuIFRoZSBlbnRpdHkgaW5zdGFuY2UgaWYgaXQgZXhpc3RzLCBudWxsIG90aGVyd2lzZVxuICAgKi9cbiAgZmluZE9uZShndWlkOiBzdHJpbmcpOiBFIHwgdW5kZWZpbmVke1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMuZ2V0KGd1aWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYW5kIHJldHVybiB0aGUgZW50aXR5IGlkZW50aWZpZWQgYnkgdGhlIElEIHBhcmFtZXRlclxuICAgKiBpZiBpdCBleGlzdHMgYW5kIHJldHVybiBpdC5cbiAgICpcbiAgICogQHBhcmFtIGlkXG4gICAqIEByZXR1cm4gVGhlIGVudGl0eSBpbnN0YW5jZSBpZiBpdCBleGlzdHMsIG51bGwgb3RoZXJ3aXNlXG4gICAqL1xuICBmaW5kT25lQnlJRChpZDogc3RyaW5nKTogRSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaWRFbnRyaWVzLmdldChpZCk7XG4gIH1cblxuICAvKipcbiAgICogU25hcHNob3Qgb2YgdGhlIGVudHJpZXMgdGhhdCBtYXRjaCB0aGUgcHJlZGljYXRlLlxuICAgKlxuICAgKiBAcGFyYW0gcCBUaGUgcHJlZGljYXRlIHVzZWQgdG8gcXVlcnkgZm9yIHRoZSBzZWxlY3Rpb24uXG4gICAqIEByZXR1cm4gQSBzbmFwc2hvdCBhcnJheSBjb250YWluaW5nIHRoZSBlbnRpdGllcyB0aGF0IG1hdGNoIHRoZSBwcmVkaWNhdGUuXG4gICAqIFxuICAgKiBAZXhhbXBsZSBTZWxlY3QgYWxsIHRoZSBgVG9kb2AgaW5zdGFuY2Ugd2hlcmUgdGhlIGB0aXRsZWAgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiAxMDAuIFxuYGBgXG5sZXQgdG9kb3M6VG9kb1tdPXN0b3JlLnNlbGVjdCh0b2RvPT50b2RvLnRpdGxlLmxlbmd0aD4xMDApO1xuYGBgXG4gICAqL1xuICBzZWxlY3QocDogUHJlZGljYXRlPEU+KTogRVtdIHtcbiAgICBjb25zdCBzZWxlY3RlZDogRVtdID0gW107XG4gICAgQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMudmFsdWVzKCkpLmZvckVhY2goZSA9PiB7XG4gICAgICBpZiAocChlKSkge1xuICAgICAgICBzZWxlY3RlZC5wdXNoKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzZWxlY3RlZDtcbiAgfVxuXG4gIC8qKiBcbiAgICogQ29tcGFyZSBlbnRpdGllcyBieSBHVUlEIFxuICAgKiBAcGFyYW0gZTEgVGhlIGZpcnN0IGVudGl0eVxuICAgKiBAcGFyYW0gZTIgVGhlIHNlY29uZCBlbnRpdHlcbiAgICogQHJldHVybiB0cnVlIGlmIHRoZSB0d28gZW50aXRpZXMgaGF2ZSBlcXVhbCBHVUlEIGlkc1xuICAgKiBAZXhhbXBsZSBDb21wYXJlIGB0b2RvMWAgd2l0aCBgdG9kbzJgIGJ5IGBnaWRgLlxuYGBgXG5pZiAoZXF1YWxzQnlHVUlEKHRvZG8xLCB0b2RvMikpey4uLn07XG5gYGBcbiAgICovXG4gIGVxdWFsc0J5R1VJRChlMTphbnksIGUyOmFueSkge1xuICAgIHJldHVybiBlMVt0aGlzLkdVSURfS0VZXSA9PSBlMlt0aGlzLkdVSURfS0VZXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlIGVudGl0aWVzIGJ5IElEIFxuICAgKiBAcGFyYW0gZTEgVGhlIGZpcnN0IGVudGl0eVxuICAgKiBAcGFyYW0gZTIgVGhlIHNlY29uZCBlbnRpdHlcbiAgICogQHJldHVybiB0cnVlIGlmIHRoZSB0d28gZW50aXRpZXMgaGF2ZSBlcXVhbCBJRCBpZHNcbiAgICogQGV4YW1wbGUgQ29tcGFyZSBgdG9kbzFgIHdpdGggYHRvZG8yYCBieSBgaWRgLlxuYGBgXG5pZiAoZXF1YWxzQnlJRCh0b2RvMSwgdG9kbzIpKXsuLi59O1xuYGBgXG4gICAqL1xuICBlcXVhbHNCeUlEKGUxOmFueSwgZTI6YW55KSB7XG4gICAgcmV0dXJuIGUxW3RoaXMuSURfS0VZXSA9PSBlMlt0aGlzLklEX0tFWV07XG4gIH1cbiAgLyoqXG4gICAqIENhbGxzIGNvbXBsZXRlIG9uIGFsbCB7QGxpbmsgQmVoYXZpb3JTdWJqZWN0fSBpbnN0YW5jZXMuXG4gICAqIFxuICAgKiBDYWxsIGRlc3Ryb3kgd2hlbiBkaXNwb3Npbmcgb2YgdGhlIHN0b3JlLlxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLm5vdGlmeS5jb21wbGV0ZSgpO1xuICAgIHRoaXMubm90aWZ5RGVsdGEuY29tcGxldGUoKTtcbiAgICB0aGlzLm5vdGlmeVF1ZXJ5LmNvbXBsZXRlKCk7XG4gIH1cbn0iXX0=
|
299
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RTdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NsaWNlL3NyYy9saWIvQWJzdHJhY3RTdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFjLE1BQU0sTUFBTSxDQUFBO0FBQ2hELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUlwQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFBO0FBRXpCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFBO0FBQ2xDLE1BQU0sc0JBQXNCLEdBQUcsS0FBSyxDQUFBO0FBRXBDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFnQixNQUFNLENBQUM7SUFDdkQsS0FBSyxFQUFFLHFCQUFxQjtJQUM1QixPQUFPLEVBQUUsc0JBQXNCO0NBQ2hDLENBQUMsQ0FBQztBQUVILE1BQU0sT0FBZ0IsYUFBYTtJQU9oQyxZQUFZLE1BQW9CO1FBTWpDOztXQUVHO1FBQ08sZ0JBQVcsR0FBRyxJQUFJLGFBQWEsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUVyRDs7V0FFRztRQUNPLFdBQU0sR0FBVyxFQUFFLENBQUM7UUE0QzlCOztXQUVHO1FBQ0ksWUFBTyxHQUFtQixJQUFJLEdBQUcsRUFBRSxDQUFBO1FBRTFDOzs7V0FHRztRQUNJLGNBQVMsR0FBbUIsSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUU1Qzs7O1dBR0c7UUFDTyxXQUFNLEdBQUcsSUFBSSxhQUFhLENBQU0sQ0FBQyxDQUFDLENBQUE7UUFFNUM7OztXQUdHO1FBQ08sZ0JBQVcsR0FBRyxJQUFJLGFBQWEsQ0FBVyxDQUFDLENBQUMsQ0FBQTtRQThCdEQ7Ozs7O1dBS0c7UUFDSyxRQUFHLEdBQW9CLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQWxIMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNO1lBQ2xCLENBQUMsQ0FBQyxNQUFNLENB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SUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7U0FDM0Q7UUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNsRCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsV0FBVztRQUNULE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsUUFBUSxDQUFDLE1BQWtCO1FBQ3pCLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQ2hEO1FBQ0QsTUFBTSxJQUFJLEdBQWlCLE1BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsWUFBWSxDQUFDLE1BQWtCO1FBQzdCLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQ2xEO1FBQ0QsTUFBTSxFQUFFLEdBQWlCLE1BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxPQUFPLENBQUMsSUFBWTtRQUNsQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxXQUFXLENBQUMsRUFBVTtRQUNwQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsTUFBTSxDQUFDLENBQWU7UUFDcEIsTUFBTSxRQUFRLEdBQVEsRUFBRSxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM1QyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDUixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILFlBQVksQ0FBQyxFQUFNLEVBQUUsRUFBTTtRQUN6QixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxVQUFVLENBQUMsRUFBTSxFQUFFLEVBQU07UUFDdkIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxPQUFPO1FBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDOUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVwbGF5U3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCJcbmltcG9ydCB7IG1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiXG5pbXBvcnQgeyBEZWx0YSwgUHJlZGljYXRlIH0gZnJvbSBcIi4vbW9kZWxzXCJcbmltcG9ydCB7IFN0b3JlQ29uZmlnIH0gZnJvbSBcIi4vbW9kZWxzL1N0b3JlQ29uZmlnXCJcblxuY29uc3QgeyBmcmVlemUgfSA9IE9iamVjdFxuXG5jb25zdCBFU1RPUkVfREVGQVVMVF9JRF9LRVkgPSBcImlkXCJcbmNvbnN0IEVTVE9SRV9ERUZBVUxUX0dJRF9LRVkgPSBcImdpZFwiXG5cbmV4cG9ydCBjb25zdCBFU1RPUkVfQ09ORklHX0RFRkFVTFQ6IFN0b3JlQ29uZmlnID0gZnJlZXplKHtcbiAgaWRLZXk6IEVTVE9SRV9ERUZBVUxUX0lEX0tFWSxcbiAgZ3VpZEtleTogRVNUT1JFX0RFRkFVTFRfR0lEX0tFWVxufSk7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFN0b3JlPEU+IHtcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzdG9yZS5cbiAgICovXG4gICBwdWJsaWMgY29uZmlnOiBTdG9yZUNvbmZpZztcblxuICAgY29uc3RydWN0b3IoY29uZmlnPzogU3RvcmVDb25maWcpIHtcbiAgICAgdGhpcy5jb25maWcgPSBjb25maWdcbiAgICAgICA/IGZyZWV6ZSh7IC4uLkVTVE9SRV9DT05GSUdfREVGQVVMVCwgLi4uY29uZmlnIH0pXG4gICAgICAgOiBFU1RPUkVfQ09ORklHX0RFRkFVTFQ7XG4gICB9XG4gXG4gIC8qKlxuICAgKiBOb3RpZmllcyBvYnNlcnZlcnMgb2YgdGhlIHN0b3JlIHF1ZXJ5LlxuICAgKi9cbiAgcHJvdGVjdGVkIG5vdGlmeVF1ZXJ5ID0gbmV3IFJlcGxheVN1YmplY3Q8c3RyaW5nPigxKTtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgcXVlcnkgc3RhdGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3F1ZXJ5OiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogU2V0cyB0aGUgY3VycmVudCBxdWVyeSBzdGF0ZSBhbmQgbm90aWZpZXMgb2JzZXJ2ZXJzLlxuICAgKi9cbiAgc2V0IHF1ZXJ5KHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9xdWVyeSA9IHF1ZXJ5O1xuICAgIHRoaXMubm90aWZ5UXVlcnkubmV4dCh0aGlzLl9xdWVyeSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiBBIHNuYXBzaG90IG9mIHRoZSBxdWVyeSBzdGF0ZS5cbiAgICovXG4gIGdldCBxdWVyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogT2JzZXJ2ZSB0aGUgcXVlcnkuXG4gICAqIEBleGFtcGxlXG4gICAgIDxwcmU+XG4gICAgbGV0IHF1ZXJ5JCA9IHNvdXJjZS5vYnNlcnZlUXVlcnkoKTtcbiAgICA8L3ByZT5cbiAgKi9cbiAgcHVibGljIG9ic2VydmVRdWVyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5ub3RpZnlRdWVyeS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IGlkIGtleSBmb3IgdGhlIEVTdG9yZSBpbnN0YW5jZS5cbiAgICogQHJldHVybiB0aGlzLmNvbmZpZy5pZEtleTtcbiAgICovXG4gIGdldCBJRF9LRVkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuaWRLZXlcbiAgfVxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgZ3VpZCBrZXkgZm9yIHRoZSBFU3RvcmUgaW5zdGFuY2UuXG4gICAqIEByZXR1cm4gdGhpcy5jb25maWcuZ3VpZEtleTtcbiAgICovXG4gIGdldCBHVUlEX0tFWSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5ndWlkS2V5XG4gIH1cblxuICAvKipcbiAgICogUHJpbWFyeSBpbmRleCBmb3IgdGhlIHN0b3JlcyBlbGVtZW50cy5cbiAgICovXG4gIHB1YmxpYyBlbnRyaWVzOiBNYXA8c3RyaW5nLCBFPiA9IG5ldyBNYXAoKVxuXG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCBlbnRyaWVzIHRoYXQgYXJlIGtleWVkIGJ5XG4gICAqIGFuIGlkIGdlbmVyYXRlZCBvbiB0aGUgc2VydmVyLlxuICAgKi9cbiAgcHVibGljIGlkRW50cmllczogTWFwPHN0cmluZywgRT4gPSBuZXcgTWFwKClcblxuICAvKipcbiAgICogQ3JlYXRlIG5vdGlmaWNhdGlvbnMgdGhhdCBicm9hY2FzdFxuICAgKiB0aGUgZW50aXJlIHNldCBvZiBlbnRyaWVzLlxuICAgKi9cbiAgcHJvdGVjdGVkIG5vdGlmeSA9IG5ldyBSZXBsYXlTdWJqZWN0PEVbXT4oMSlcblxuICAvKipcbiAgICogQ3JlYXRlIG5vdGlmaWNhdGlvbnMgdGhhdCBicm9hY2FzdFxuICAgKiBzdG9yZSBvciBzbGljZSBkZWx0YSBzdGF0ZSBjaGFuZ2VzLlxuICAgKi9cbiAgcHJvdGVjdGVkIG5vdGlmeURlbHRhID0gbmV3IFJlcGxheVN1YmplY3Q8RGVsdGE8RT4+KDEpXG5cbiAgLyoqXG4gICAqIENhbGwgYWxsIHRoZSBub3RpZmllcnMgYXQgb25jZS5cbiAgICpcbiAgICogQHBhcmFtIHZcbiAgICogQHBhcmFtIGRlbHRhXG4gICAqL1xuICBwcm90ZWN0ZWQgbm90aWZ5QWxsKHY6IEVbXSwgZGVsdGE6IERlbHRhPEU+KSB7XG4gICAgdGhpcy5ub3RpZnkubmV4dCh2KTtcbiAgICB0aGlzLm5vdGlmeURlbHRhLm5leHQoZGVsdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9ic2VydmUgc3RvcmUgc3RhdGUgY2hhbmdlcy5cbiAgICogQHBhcmFtIHNvcnQgT3B0aW9uYWwgc29ydGluZyBmdW5jdGlvbiB5aWVsZGluZyBhIHNvcnRlZCBvYnNlcnZhYmxlLlxuICAgKiBAZXhhbXBsZVxuYGBgXG5sZXQgdG9kb3MkID0gc291cmNlLm9ic2VydmUoKTtcbi8vb3Igd2l0aCBhIHNvcnQgYnkgdGl0bGUgZnVuY3Rpb25cbmxldCB0b2RvcyQgPSBzb3VyY2Uub2JzZXJ2ZSgoYSwgYik9PihhLnRpdGxlID4gYi50aXRsZSA/IC0xIDogMSkpO1xuYGBgXG4gICovXG4gIHB1YmxpYyBvYnNlcnZlKHNvcnQ/OiAoYTogYW55LCBiOiBhbnkpID0+IG51bWJlcik6IE9ic2VydmFibGU8RVtdPiB7XG4gICAgaWYgKHNvcnQpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vdGlmeS5waXBlKG1hcCgoZTogRVtdKSA9PiBlLnNvcnQoc29ydCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubm90aWZ5LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIE9ic2VydmFibGU8RVtdPiByZWZlcmVuY2VcbiAgICogdG8gdGhlIGVudGl0aWVzIGluIHRoZSBzdG9yZSBvclxuICAgKiBTbGljZSBpbnN0YW5jZS5cbiAgICogXG4gICAqL1xuICAgcHVibGljIG9iczogT2JzZXJ2YWJsZTxFW10+ID0gdGhpcy5vYnNlcnZlKClcblxuXG5cbiAgLyoqXG4gICAqIE9ic2VydmUgZGVsdGEgdXBkYXRlcy5cbiAgICogQGV4YW1wbGVcbiAgICAgPHByZT5cbiAgICAgbGV0IHRvZG9zJCA9IHNvdXJjZS5vYnNlcnZlRGVsdGEoKTtcbiAgICAgPC9wcmU+XG4gICAqL1xuICBwdWJsaWMgb2JzZXJ2ZURlbHRhKCk6IE9ic2VydmFibGU8RGVsdGE8RT4+IHtcbiAgICByZXR1cm4gdGhpcy5ub3RpZnlEZWx0YS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBzdG9yZSBpcyBlbXB0eS5cbiAgICogXG4gICAqIEByZXR1cm4gQSBob3Qge0BsaW5rIE9ic2VydmFibGV9IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0b3JlIGlzIGVtcHR5LlxuICAgKiBcbiAgICogQGV4YW1wbGVcbiAgICA8cHJlPlxuICAgIHNvdXJjZS5pc0VtcHR5KCk7XG4gICAgPC9wcmU+XG4gICovXG4gIGlzRW1wdHkoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMubm90aWZ5LnBpcGUoXG4gICAgICBtYXAoKGVudHJpZXM6IEVbXSkgPT4gZW50cmllcy5sZW5ndGggPT0gMClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHN0b3JlIGlzIGVtcHR5LlxuICAgKiBcbiAgICogQHJldHVybiBBIHNuYXBzaG90IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0b3JlIGlzIGVtcHR5LlxuICAgKiBcbiAgICogQGV4YW1wbGVcbiAgICAgPHByZT5cbiAgICBzb3VyY2UuaXNFbXB0eSgpO1xuICAgIDwvcHJlPlxuICAqL1xuICBpc0VtcHR5U25hcHNob3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLnZhbHVlcygpKS5sZW5ndGggPT0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZW50cmllcyBjb250YWluZWQuXG4gICAqIEBwYXJhbSBwIFRoZSBwcmVkaWNhdGUgdG8gYXBwbHkgaW4gb3JkZXIgdG8gZmlsdGVyIHRoZSBjb3VudFxuICAgKi9cbiAgY291bnQocD86IFByZWRpY2F0ZTxFPik6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgaWYgKHApIHtcbiAgICAgIHJldHVybiB0aGlzLm5vdGlmeS5waXBlKFxuICAgICAgICBtYXAoKGU6IEVbXSkgPT4gZS5yZWR1Y2UoKHRvdGFsLCBlKSA9PiB0b3RhbCArIChwKGUpID8gMSA6IDApLCAwKSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5vdGlmeS5waXBlKG1hcCgoZW50cmllczogRVtdKSA9PiBlbnRyaWVzLmxlbmd0aCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzbmFwc2hvdCBvZiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgY29udGFpbmVkIGluIHRoZSBzdG9yZS5cbiAgICogQHBhcmFtIHAgVGhlIHByZWRpY2F0ZSB0byBhcHBseSBpbiBvcmRlciB0byBmaWx0ZXIgdGhlIGNvdW50XG4gICAqL1xuICBjb3VudFNuYXBzaG90KHA/OiBQcmVkaWNhdGU8RT4pOiBudW1iZXIge1xuICAgIGlmIChwKSB7XG4gICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMudmFsdWVzKCkpLmZpbHRlcihwKS5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZW50cmllcy52YWx1ZXMoKSkubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFNuYXBzaG90IG9mIGFsbCBlbnRyaWVzLlxuICAgKiBcbiAgICogQHJldHVybiBTbmFwc2hvdCBhcnJheSBvZiBhbGwgdGhlIGVsZW1lbnRzIHRoZSBlbnRpdGllcyB0aGUgc3RvcmUgY29udGFpbnMuXG4gICAqIFxuICAgKiBAZXhhbXBsZSBPYnNlcnZlIGEgc25hcHNob3Qgb2YgYWxsIHRoZSBlbnRpdGllcyBpbiB0aGUgc3RvcmUuXG5gYGBcbmxldCBzZWxlY3RlZFRvZG9zOlRvZG9bXSA9IHNvdXJjZS5hbGxTbmFwc2hvdCgpO1xuYGBgXG4gICAqL1xuICBhbGxTbmFwc2hvdCgpOiBFW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZW50cmllcy52YWx1ZXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbnRyaWVzIGNvbnRhaW4gdGhlIGlkZW50aWZpZWQgaW5zdGFuY2UuXG4gICAqIFxuICAgKiBAcGFyYW0gdGFyZ2V0IEVpdGhlciBhbiBpbnN0YW5jZSBvZiB0eXBlIGBFYCBvciBhIGBndWlkYCBpZGVudGlmeWluZyB0aGUgaW5zdGFuY2UuIFxuICAgKiBAcGFyYW0gYnlJZCBXaGV0aGVyIHRoZSBsb29rdXAgc2hvdWxkIGJlIHBlcmZvcm1lZCB3aXRoIHRoZSBgaWRgIGtleSByYXRoZXIgdGhhbiB0aGUgYGd1aWRgLlxuICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBpbnN0YW5jZSBpZGVudGlmaWVkIGJ5IHRoZSBndWlkIGV4aXN0cywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKiBcbiAgICogQGV4YW1wbGVcbiAgICAgPHByZT5cbiAgICAgbGV0IGNvbnRhaW5zOmJvb2xlYW4gPSBzb3VyY2UuY29udGFpbnMoZ3VpZCk7XG4gICAgIDwvcHJlPlxuICAgKi9cbiAgY29udGFpbnModGFyZ2V0OiBFIHwgc3RyaW5nKTpib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHRoaXMuZW50cmllcy5nZXQodGFyZ2V0KSA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZ3VpZDogc3RyaW5nID0gKDxhbnk+dGFyZ2V0KVt0aGlzLmNvbmZpZy5ndWlkS2V5XTtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmdldChndWlkKSA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVudHJpZXMgY29udGFpbiB0aGUgaWRlbnRpZmllZCBpbnN0YW5jZS5cbiAgICogXG4gICAqIEBwYXJhbSB0YXJnZXQgRWl0aGVyIGFuIGluc3RhbmNlIG9mIHR5cGUgYEVgIG9yIGEgYGlkYCBpZGVudGlmeWluZyB0aGUgaW5zdGFuY2UuIFxuICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBpbnN0YW5jZSBpZGVudGlmaWVkIGJ5IHRoZSBgaWRgIGV4aXN0cywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKiBcbiAgICogQGV4YW1wbGVcbiAgICAgPHByZT5cbiAgICAgbGV0IGNvbnRhaW5zOmJvb2xlYW4gPSBzb3VyY2UuY29udGFpbnMoZ3VpZCk7XG4gICAgIDwvcHJlPlxuICAgKi9cbiAgY29udGFpbnNCeUlkKHRhcmdldDogRSB8IHN0cmluZyk6Ym9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmlkRW50cmllcy5nZXQodGFyZ2V0KSA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgaWQ6IHN0cmluZyA9ICg8YW55PnRhcmdldClbdGhpcy5jb25maWcuaWRLZXldO1xuICAgIHJldHVybiB0aGlzLmlkRW50cmllcy5nZXQoaWQpID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYW5kIHJldHVybiB0aGUgZW50aXR5IGlkZW50aWZpZWQgYnkgdGhlIEdVSUQgcGFyYW1ldGVyXG4gICAqIGlmIGl0IGV4aXN0cyBhbmQgcmV0dXJuIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpZFxuICAgKiBAcmV0dXJuIFRoZSBlbnRpdHkgaW5zdGFuY2UgaWYgaXQgZXhpc3RzLCBudWxsIG90aGVyd2lzZVxuICAgKi9cbiAgZmluZE9uZShndWlkOiBzdHJpbmcpOiBFIHwgdW5kZWZpbmVke1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMuZ2V0KGd1aWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYW5kIHJldHVybiB0aGUgZW50aXR5IGlkZW50aWZpZWQgYnkgdGhlIElEIHBhcmFtZXRlclxuICAgKiBpZiBpdCBleGlzdHMgYW5kIHJldHVybiBpdC5cbiAgICpcbiAgICogQHBhcmFtIGlkXG4gICAqIEByZXR1cm4gVGhlIGVudGl0eSBpbnN0YW5jZSBpZiBpdCBleGlzdHMsIG51bGwgb3RoZXJ3aXNlXG4gICAqL1xuICBmaW5kT25lQnlJRChpZDogc3RyaW5nKTogRSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaWRFbnRyaWVzLmdldChpZCk7XG4gIH1cblxuICAvKipcbiAgICogU25hcHNob3Qgb2YgdGhlIGVudHJpZXMgdGhhdCBtYXRjaCB0aGUgcHJlZGljYXRlLlxuICAgKlxuICAgKiBAcGFyYW0gcCBUaGUgcHJlZGljYXRlIHVzZWQgdG8gcXVlcnkgZm9yIHRoZSBzZWxlY3Rpb24uXG4gICAqIEByZXR1cm4gQSBzbmFwc2hvdCBhcnJheSBjb250YWluaW5nIHRoZSBlbnRpdGllcyB0aGF0IG1hdGNoIHRoZSBwcmVkaWNhdGUuXG4gICAqIFxuICAgKiBAZXhhbXBsZSBTZWxlY3QgYWxsIHRoZSBUb2RvIGluc3RhbmNlcyB3aGVyZSB0aGUgdGl0bGUgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiAxMDAuXG4gICAqIGBgYFxuICAgKiBsZXQgdG9kb3M6VG9kb1tdPXN0b3JlLnNlbGVjdCh0b2RvPT50b2RvLnRpdGxlLmxlbmd0aD4xMDApO1xuICAgKiBgYGBcbiAgICovXG4gIHNlbGVjdChwOiBQcmVkaWNhdGU8RT4pOiBFW10ge1xuICAgIGNvbnN0IHNlbGVjdGVkOiBFW10gPSBbXTtcbiAgICBBcnJheS5mcm9tKHRoaXMuZW50cmllcy52YWx1ZXMoKSkuZm9yRWFjaChlID0+IHtcbiAgICAgIGlmIChwKGUpKSB7XG4gICAgICAgIHNlbGVjdGVkLnB1c2goZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlbGVjdGVkO1xuICB9XG5cbiAgLyoqIFxuICAgKiBDb21wYXJlIGVudGl0aWVzIGJ5IEdVSUQgXG4gICAqIEBwYXJhbSBlMSBUaGUgZmlyc3QgZW50aXR5XG4gICAqIEBwYXJhbSBlMiBUaGUgc2Vjb25kIGVudGl0eVxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHR3byBlbnRpdGllcyBoYXZlIGVxdWFsIEdVSUQgaWRzXG4gICAqIFxuICAgKiBAZXhhbXBsZSBDb21wYXJlIHRvZG8xIHdpdGggdG9kbzIgYnkgZ2lkLlxuICAgKiBgYGBcbiAgICogaWYgKGVxdWFsc0J5R1VJRCh0b2RvMSwgdG9kbzIpKXsuLi59O1xuICAgKiBgYGBcbiAgICovXG4gIGVxdWFsc0J5R1VJRChlMTphbnksIGUyOmFueSkge1xuICAgIHJldHVybiBlMVt0aGlzLkdVSURfS0VZXSA9PSBlMlt0aGlzLkdVSURfS0VZXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlIGVudGl0aWVzIGJ5IElEIFxuICAgKiBAcGFyYW0gZTEgVGhlIGZpcnN0IGVudGl0eVxuICAgKiBAcGFyYW0gZTIgVGhlIHNlY29uZCBlbnRpdHlcbiAgICogQHJldHVybiB0cnVlIGlmIHRoZSB0d28gZW50aXRpZXMgaGF2ZSBlcXVhbCBJRCBpZHNcbiAgICogXG4gICAqIEBleGFtcGxlIENvbXBhcmUgdG9kbzEgd2l0aCB0b2RvMiBieSBpZC5cbiAgICogXG4gICAqIGBgYFxuICAgKiBpZiAoZXF1YWxzQnlJRCh0b2RvMSwgdG9kbzIpKXsuLi59O1xuICAgKiBgYGBcbiAgICovXG4gIGVxdWFsc0J5SUQoZTE6YW55LCBlMjphbnkpIHtcbiAgICByZXR1cm4gZTFbdGhpcy5JRF9LRVldID09IGUyW3RoaXMuSURfS0VZXTtcbiAgfVxuICAvKipcbiAgICogQ2FsbHMgY29tcGxldGUgb24gYWxsIHtAbGluayBSZXBsYXlTdWJqZWN0fSBpbnN0YW5jZXMuXG4gICAqIFxuICAgKiBDYWxsIGRlc3Ryb3kgd2hlbiBkaXNwb3Npbmcgb2YgdGhlIHN0b3JlLlxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLm5vdGlmeS5jb21wbGV0ZSgpO1xuICAgIHRoaXMubm90aWZ5RGVsdGEuY29tcGxldGUoKTtcbiAgICB0aGlzLm5vdGlmeVF1ZXJ5LmNvbXBsZXRlKCk7XG4gIH1cbn0iXX0=
|