ets-fe-ng-sdk 17.0.229 → 17.0.230

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.
@@ -229,3 +229,28 @@ router-outlet + * {
229
229
  .iti__flag-container {
230
230
  right: 15px;
231
231
  }
232
+
233
+
234
+ @keyframes animateBorderPrimary {
235
+ 0% {
236
+ border-color: var(--primary);
237
+ }
238
+
239
+ 50% {
240
+ border-color: var(--primary);
241
+ }
242
+ }
243
+ .animate-border-primary {
244
+ animation-name: animateBorderPrimary;
245
+ animation-duration: 1s;
246
+ animation-iteration-count: infinite;
247
+ border: 1px solid #dcdcdc33;
248
+ }
249
+ .text-ellipsis {
250
+ text-overflow: ellipsis;
251
+ /* word-wrap: normal; */
252
+ /* height: 20px; */
253
+ /* width: 100%; */
254
+ overflow: hidden;
255
+ white-space: nowrap;
256
+ }
@@ -25,6 +25,13 @@ export class ETSReactiveFormInputService {
25
25
  // controls['__rowID']=new FormControl('id'+Math.round(Math.random()*10000000))
26
26
  return controls;
27
27
  }
28
+ addFormSchemaToForm(formFields, form) {
29
+ formFields?.forEach((inp) => {
30
+ form.addControl(inp.field?.toString(), new FormControl(inp.value, inp.validators?.map((v) => v.bind(this)), inp.asyncValidators?.map((v) => v.bind(this))));
31
+ });
32
+ // controls['__rowID']=new FormControl('id'+Math.round(Math.random()*10000000))
33
+ return form;
34
+ }
28
35
  formFieldsFromObj(obj) {
29
36
  const controls = {};
30
37
  for (const inp in obj) {
@@ -41,4 +48,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
41
48
  providedIn: 'root',
42
49
  }]
43
50
  }], ctorParameters: () => [] });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TZXJ2aWNlcy9pbnB1dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFtQixXQUFXLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFPekUsTUFBTSxPQUFPLDJCQUEyQjtJQUl0QztRQXNDQSw0QkFBdUIsR0FBRyxDQUFXLE1BQWtCLEVBQUUsSUFBZSxFQUFFLEVBQUU7WUFDOUQsTUFBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNoQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDZCxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO0lBM0NhLENBQUM7SUFDaEIseUJBQXlCLENBQVcsTUFBa0I7UUFDcEQsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBQ1AsS0FBSyxNQUFNLEdBQUcsSUFBZSxNQUFNLEVBQUU7WUFDbkMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDO1NBQ3RDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUNELHdCQUF3QixDQUFlLFVBQTBCO1FBQy9ELE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUNTLFVBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMzQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksV0FBVyxDQUMvQyxHQUFHLENBQUMsS0FBSyxFQUNULEdBQUcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ3hDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQzlDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUNILCtFQUErRTtRQUUvRSxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsR0FBUTtRQUN4QixNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFDUCxLQUFLLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRTtZQUNyQixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDM0M7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOzhHQXhDVSwyQkFBMkI7a0hBQTNCLDJCQUEyQixjQUYxQixNQUFNOzsyRkFFUCwyQkFBMkI7a0JBSHZDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSUZvcm1TY2hlbWEgfSBmcm9tICcuLi9TaGFyZWQvbW9kZWxzL2Zvcm0tc2NoZW1hLm1vZGVsJztcbmltcG9ydCB7IEZDSW5wdXQgfSBmcm9tICcuLi9TaGFyZWQvbW9kZWxzL2luZGV4Lm1vZGVsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEVUU1JlYWN0aXZlRm9ybUlucHV0U2VydmljZTxcbiAgVElGb3JtU2NoZW1hID0gSUZvcm1TY2hlbWEsXG4gIFRGQ0lucHV0ID0gRkNJbnB1dFxuPiB7XG4gIGNvbnN0cnVjdG9yKCkge31cbiAgZm9ybUZpZWxkc0Zyb21GQ0lucHV0c0FycjxURkNJbnB1dD4oaW5wdXRzOiBURkNJbnB1dFtdKSB7XG4gICAgY29uc3QgY29udHJvbHM6IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbDtcbiAgICB9ID0ge307XG4gICAgZm9yIChjb25zdCBpbnAgb2YgPEZDSW5wdXRbXT5pbnB1dHMpIHtcbiAgICAgIGNvbnRyb2xzW2lucC5uYW1lXSA9IGlucC5mb3JtQ29udHJvbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udHJvbHM7XG4gIH1cbiAgZm9ybVNjaGVtYVRvRm9ybUNvbnRyb2xzPFRJRm9ybVNjaGVtYT4oZm9ybUZpZWxkczogVElGb3JtU2NoZW1hW10pIHtcbiAgICBjb25zdCBjb250cm9sczoge1xuICAgICAgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sO1xuICAgIH0gPSB7fTtcbiAgICAoPElGb3JtU2NoZW1hW10+Zm9ybUZpZWxkcyk/LmZvckVhY2goKGlucCkgPT4ge1xuICAgICAgY29udHJvbHNbaW5wLmZpZWxkPy50b1N0cmluZygpXSA9IG5ldyBGb3JtQ29udHJvbChcbiAgICAgICAgaW5wLnZhbHVlLFxuICAgICAgICBpbnAudmFsaWRhdG9ycz8ubWFwKCh2KSA9PiB2LmJpbmQodGhpcykpLFxuICAgICAgICBpbnAuYXN5bmNWYWxpZGF0b3JzPy5tYXAoKHYpID0+IHYuYmluZCh0aGlzKSlcbiAgICAgICk7XG4gICAgfSk7XG4gICAgLy8gY29udHJvbHNbJ19fcm93SUQnXT1uZXcgRm9ybUNvbnRyb2woJ2lkJytNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqMTAwMDAwMDApKVxuXG4gICAgcmV0dXJuIGNvbnRyb2xzO1xuICB9XG4gIFxuICBmb3JtRmllbGRzRnJvbU9iaihvYmo6IGFueSkge1xuICAgIGNvbnN0IGNvbnRyb2xzOiB7XG4gICAgICBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2w7XG4gICAgfSA9IHt9O1xuICAgIGZvciAoY29uc3QgaW5wIGluIG9iaikge1xuICAgICAgY29udHJvbHNbaW5wXSA9IG5ldyBGb3JtQ29udHJvbChvYmpbaW5wXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRyb2xzO1xuICB9XG5cbiAgYmluZEZvcm1Db250cm9sVG9JbnB1dHMgPSA8VEZDSW5wdXQ+KGlucHV0czogVEZDSW5wdXRbXSwgZm9ybTogRm9ybUdyb3VwKSA9PiB7XG4gICAgKDxGQ0lucHV0W10+aW5wdXRzKS5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICB4LmZvcm0gPSBmb3JtO1xuICAgICAgeC5mb3JtQ29udHJvbCA9IGZvcm0uY29udHJvbHNbeC5uYW1lXTtcbiAgICB9KTtcbiAgfTtcbn1cbiJdfQ==
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TZXJ2aWNlcy9pbnB1dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFtQixXQUFXLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFPekUsTUFBTSxPQUFPLDJCQUEyQjtJQUN0QztRQWlEQSw0QkFBdUIsR0FBRyxDQUFXLE1BQWtCLEVBQUUsSUFBZSxFQUFFLEVBQUU7WUFDOUQsTUFBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNoQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDZCxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO0lBdERhLENBQUM7SUFDaEIseUJBQXlCLENBQVcsTUFBa0I7UUFDcEQsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBQ1AsS0FBSyxNQUFNLEdBQUcsSUFBZSxNQUFNLEVBQUU7WUFDbkMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDO1NBQ3RDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUNELHdCQUF3QixDQUFlLFVBQTBCO1FBQy9ELE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUNTLFVBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMzQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksV0FBVyxDQUMvQyxHQUFHLENBQUMsS0FBSyxFQUNULEdBQUcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ3hDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQzlDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUNILCtFQUErRTtRQUUvRSxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsbUJBQW1CLENBQWUsVUFBMEIsRUFBRSxJQUFlO1FBQzNELFVBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMzQyxJQUFJLENBQUMsVUFBVSxDQUNiLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQ3JCLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ3BILENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUNILCtFQUErRTtRQUUvRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFRO1FBQ3hCLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUNQLEtBQUssTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFO1lBQ3JCLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMzQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7OEdBaERVLDJCQUEyQjtrSEFBM0IsMkJBQTJCLGNBRjFCLE1BQU07OzJGQUVQLDJCQUEyQjtrQkFIdkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJRm9ybVNjaGVtYSB9IGZyb20gJy4uL1NoYXJlZC9tb2RlbHMvZm9ybS1zY2hlbWEubW9kZWwnO1xuaW1wb3J0IHsgRkNJbnB1dCB9IGZyb20gJy4uL1NoYXJlZC9tb2RlbHMvaW5kZXgubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRVRTUmVhY3RpdmVGb3JtSW5wdXRTZXJ2aWNlPFRJRm9ybVNjaGVtYSA9IElGb3JtU2NoZW1hLCBURkNJbnB1dCA9IEZDSW5wdXQ+IHtcbiAgY29uc3RydWN0b3IoKSB7fVxuICBmb3JtRmllbGRzRnJvbUZDSW5wdXRzQXJyPFRGQ0lucHV0PihpbnB1dHM6IFRGQ0lucHV0W10pIHtcbiAgICBjb25zdCBjb250cm9sczoge1xuICAgICAgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sO1xuICAgIH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGlucCBvZiA8RkNJbnB1dFtdPmlucHV0cykge1xuICAgICAgY29udHJvbHNbaW5wLm5hbWVdID0gaW5wLmZvcm1Db250cm9sO1xuICAgIH1cblxuICAgIHJldHVybiBjb250cm9scztcbiAgfVxuICBmb3JtU2NoZW1hVG9Gb3JtQ29udHJvbHM8VElGb3JtU2NoZW1hPihmb3JtRmllbGRzOiBUSUZvcm1TY2hlbWFbXSkge1xuICAgIGNvbnN0IGNvbnRyb2xzOiB7XG4gICAgICBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2w7XG4gICAgfSA9IHt9O1xuICAgICg8SUZvcm1TY2hlbWFbXT5mb3JtRmllbGRzKT8uZm9yRWFjaCgoaW5wKSA9PiB7XG4gICAgICBjb250cm9sc1tpbnAuZmllbGQ/LnRvU3RyaW5nKCldID0gbmV3IEZvcm1Db250cm9sKFxuICAgICAgICBpbnAudmFsdWUsXG4gICAgICAgIGlucC52YWxpZGF0b3JzPy5tYXAoKHYpID0+IHYuYmluZCh0aGlzKSksXG4gICAgICAgIGlucC5hc3luY1ZhbGlkYXRvcnM/Lm1hcCgodikgPT4gdi5iaW5kKHRoaXMpKSxcbiAgICAgICk7XG4gICAgfSk7XG4gICAgLy8gY29udHJvbHNbJ19fcm93SUQnXT1uZXcgRm9ybUNvbnRyb2woJ2lkJytNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqMTAwMDAwMDApKVxuXG4gICAgcmV0dXJuIGNvbnRyb2xzO1xuICB9XG4gIGFkZEZvcm1TY2hlbWFUb0Zvcm08VElGb3JtU2NoZW1hPihmb3JtRmllbGRzOiBUSUZvcm1TY2hlbWFbXSwgZm9ybTogRm9ybUdyb3VwKSB7XG4gICAgKDxJRm9ybVNjaGVtYVtdPmZvcm1GaWVsZHMpPy5mb3JFYWNoKChpbnApID0+IHtcbiAgICAgIGZvcm0uYWRkQ29udHJvbChcbiAgICAgICAgaW5wLmZpZWxkPy50b1N0cmluZygpLFxuICAgICAgICBuZXcgRm9ybUNvbnRyb2woaW5wLnZhbHVlLCBpbnAudmFsaWRhdG9ycz8ubWFwKCh2KSA9PiB2LmJpbmQodGhpcykpLCBpbnAuYXN5bmNWYWxpZGF0b3JzPy5tYXAoKHYpID0+IHYuYmluZCh0aGlzKSkpLFxuICAgICAgKTtcbiAgICB9KTtcbiAgICAvLyBjb250cm9sc1snX19yb3dJRCddPW5ldyBGb3JtQ29udHJvbCgnaWQnK01hdGgucm91bmQoTWF0aC5yYW5kb20oKSoxMDAwMDAwMCkpXG5cbiAgICByZXR1cm4gZm9ybTtcbiAgfVxuXG4gIGZvcm1GaWVsZHNGcm9tT2JqKG9iajogYW55KSB7XG4gICAgY29uc3QgY29udHJvbHM6IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbDtcbiAgICB9ID0ge307XG4gICAgZm9yIChjb25zdCBpbnAgaW4gb2JqKSB7XG4gICAgICBjb250cm9sc1tpbnBdID0gbmV3IEZvcm1Db250cm9sKG9ialtpbnBdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udHJvbHM7XG4gIH1cblxuICBiaW5kRm9ybUNvbnRyb2xUb0lucHV0cyA9IDxURkNJbnB1dD4oaW5wdXRzOiBURkNJbnB1dFtdLCBmb3JtOiBGb3JtR3JvdXApID0+IHtcbiAgICAoPEZDSW5wdXRbXT5pbnB1dHMpLmZvckVhY2goKHgpID0+IHtcbiAgICAgIHguZm9ybSA9IGZvcm07XG4gICAgICB4LmZvcm1Db250cm9sID0gZm9ybS5jb250cm9sc1t4Lm5hbWVdO1xuICAgIH0pO1xuICB9O1xufVxuIl19
@@ -261,6 +261,7 @@ export class UtilityService {
261
261
  this.formFieldsFromArr = this.inputService.formFieldsFromFCInputsArr;
262
262
  this.objToFormControls = this.inputService.formFieldsFromObj;
263
263
  this.formSchemaToFormControls = this.inputService.formSchemaToFormControls;
264
+ this.addFormSchemaToForm = this.inputService.addFormSchemaToForm;
264
265
  this.bindFormControlToInputs = this.inputService.bindFormControlToInputs;
265
266
  this.go = (value, extra) => {
266
267
  this.router.navigate([value], extra);
@@ -837,4 +838,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
837
838
  type: Injectable,
838
839
  args: [{ providedIn: 'root' }]
839
840
  }], ctorParameters: () => [] });
840
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NlcnZpY2VzL3V0aWxpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9GLE9BQU8sRUFBVSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxJQUFJLFNBQVMsRUFBc0MsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RyxPQUFPLEVBQUUsV0FBVyxJQUFJLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFvQixjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsMkJBQTJCLElBQUksR0FBRyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckUsT0FBTyxHQUFHLE1BQU0sa0JBQWtCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFzQyxNQUFNLDhCQUE4QixDQUFDO0FBQ25HLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUlMLFdB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QUksV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDBEQUEwRDtRQUM3SixPQUFPLHNDQUFzQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNuRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsZ0NBQWdDO1lBQzVELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDVCw4QkFBOEI7Z0JBQzlCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQixDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7YUFDeEI7aUJBQU07Z0JBQ0wsK0NBQStDO2dCQUMvQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDdEIsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2FBQzFCO1lBQ0QsT0FBTyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0EzdkJVLGNBQWM7a0hBQWQsY0FBYyxjQURELE1BQU07OzJGQUNuQixjQUFjO2tCQUQxQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1cnJlbmN5UGlwZSwgRGF0ZVBpcGUsIERlY2ltYWxQaXBlLCBMb2NhdGlvbiwgVGl0bGVDYXNlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2cgYXMgTWF0RGlhbG9nLCBNYXREaWFsb2dDb25maWcgYXMgTWF0RGlhbG9nQ29uZmlnIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIGFzIE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBSb3V0ZXIsIE5hdmlnYXRpb25FeHRyYXMsIEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEVUU1JlYWN0aXZlRm9ybUlucHV0U2VydmljZSBhcyBJUzEgfSBmcm9tICcuL2lucHV0LnNlcnZpY2UnO1xuaW1wb3J0IGpmZCBmcm9tICdqcy1maWxlLWRvd25sb2FkJztcbmltcG9ydCB7IFBhZ2VMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi9wYWdlLWxvYWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZywgQ29uZmlnIGFzIGNvbmZpZyB9IGZyb20gJy4uL2NvbmZpZ3MvaW5kZXguY29uZmlnJztcbmltcG9ydCB7IEFwcFJvdXRlQmFzZSB9IGZyb20gJy4uL1NoYXJlZC9tb2RlbHMvUm91dGVJdGVtLmNsYXNzJztcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xuaW1wb3J0IHsgRVZhbGlkYXRpb25UeXBlLCBJU3RyaWN0Rm9ybUdyb3VwLCBTdGF0dXMsIFRhYmxlQ29sIH0gZnJvbSAnLi4vU2hhcmVkL21vZGVscy9pbmRleC5tb2RlbCc7XG5pbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBQYWdlU2VydmljZSB9IGZyb20gJy4vcGFnZS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgQXN5bmNWYWxpZGF0b3JGbixcbiAgRm9ybUFycmF5LFxuICBGb3JtQnVpbGRlcixcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Db250cm9sT3B0aW9ucyxcbiAgRm9ybUdyb3VwLFxuICBVbnR5cGVkRm9ybUFycmF5LFxuICBWYWxpZGF0b3JGbixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uL1JldXNhYmxlcy9yZXVzYWJsZS1wYWdlcy9sb2dnZXIvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBpc09ic2VydmFibGUsIGxhc3RWYWx1ZUZyb20sIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFRVRTUGFnZUJ0bklEIH0gZnJvbSAnLi4vU2hhcmVkL21vZGVscy9JTWVudUl0ZW0nO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTREtFbnZpcm9ubWVudCB9IGZyb20gJy4uL1NoYXJlZC9tb2RlbHMvZW52aXJvbm1lbnQubW9kZWwnO1xuaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyLCBCcmVha3BvaW50cyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHsgRGVib3VuY2VyU2VydmljZSB9IGZyb20gJy4vZGVib3VuY2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUZvcm1TY2hlbWEgfSBmcm9tICcuLi9TaGFyZWQvY29tcG9uZW50cy9mb3JtLWdlbmVyYXRvci9mb3JtLWdlbmVyYXRvci5jb21wb25lbnQnO1xuaW1wb3J0IFBhcGEgZnJvbSAncGFwYXBhcnNlJztcbmltcG9ydCB7IElJbmZvRGlhbG9nQnRuIH0gZnJvbSAnLi4vU2hhcmVkL2NvbXBvbmVudHMvaW5mby1kaWFsb2cvaW5mby1kaWFsb2cuY29tcG9uZW50JztcbmRlY2xhcmUgY29uc3QgJDogYW55O1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFV0aWxpdHlTZXJ2aWNlPFRFbnZpcm9ubWVudCBleHRlbmRzIFNES0Vudmlyb25tZW50ID0gU0RLRW52aXJvbm1lbnQ+IHtcbiAgcjogQXBwUm91dGVCYXNlO1xuICBkb3dubG9hZGVyID0gamZkO1xuICBlVmFsaWRhdGlvblR5cGUgPSBFVmFsaWRhdGlvblR5cGU7XG4gIGNvbmZpZyA9IENvbmZpZztcbiAgZW52aXJvbm1lbnQ6IFRFbnZpcm9ubWVudCA9IGVudmlyb25tZW50IGFzIGFueTtcbiAgcGJpZCA9IEVFVFNQYWdlQnRuSUQ7XG4gICQ6IGFueTtcbiAgaXNNb2JpbGU6IGJvb2xlYW47XG4gIGlzTW9iaWxlU2lnbmFsID0gc2lnbmFsPGJvb2xlYW4+KHVuZGVmaW5lZCk7XG4gIHBhZ2VTaXplT3B0aW9ucyA9IFs1LCAxMCwgMTUsIDIwLCA1MCwgMTAwLCAyMDAsIDUwMCwgMTAwMF07XG4gIGRhdGVQaXBlRGF0ZSA9ICdFRSwgTU1NTSBkLCB5JztcbiAgZGF0ZVBpcGVEYXRlTGVhbiA9ICdFRSwgTU1NIGQsIHknO1xuICBkYXRlUGlwZURhdGVUaW1lTGVhbiA9ICdFRSwgTU1NIGQsIHkgaGg6bW0gYSc7XG4gIHJlYWRvbmx5IGN1c3RvbUlERmllbGQgPSAnX19pZCc7XG4gIHJlYWRvbmx5IGRlbGltaXRlciA9IGB+fn4vL35+fmA7XG4gIGZvcm1CdWlsZGVyID0gbmV3IEZvcm1CdWlsZGVyKCkubm9uTnVsbGFibGU7XG4gIC8qKlxuICAgKiBFbWl0cyB0cnVlIGlmIG1vYmlsZVxuICAgKi9cbiAgbW9iaWxlUXVlcnlDaGFuZ2VkID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHVibGljIGRpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xuICBwdWJsaWMgc25hY2tCYXIgPSBpbmplY3QoTWF0U25hY2tCYXIpO1xuICBwdWJsaWMgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHB1YmxpYyB0aXRsZVMgPSBpbmplY3QoVGl0bGUpO1xuICBwdWJsaWMgbG9jYXRpb24gPSBpbmplY3QoTG9jYXRpb24pO1xuICBwdWJsaWMgaW5wdXRTZXJ2aWNlID0gaW5qZWN0KElTMSk7XG4gIHB1YmxpYyBwUyA9IGluamVjdChQYWdlTG9hZGVyU2VydmljZSk7XG4gIHB1YmxpYyBjdXJyZW5jeVBpcGUgPSBpbmplY3QoQ3VycmVuY3lQaXBlKTtcbiAgcHVibGljIHRpdGxlQ2FzZVBpcGUgPSBpbmplY3QoVGl0bGVDYXNlUGlwZSk7XG4gIHB1YmxpYyBsb2dnZXJTZXJ2aWNlID0gaW5qZWN0KExvZ2dlclNlcnZpY2UpO1xuICBwdWJsaWMgcGFnZVMgPSBpbmplY3QoUGFnZVNlcnZpY2UpO1xuICBwdWJsaWMgcmVzcG9uc2l2ZSA9IGluamVjdChCcmVha3BvaW50T2JzZXJ2ZXIpO1xuICBwdWJsaWMgZGF0ZVBpcGUgPSBpbmplY3QoRGF0ZVBpcGUpO1xuICBwdWJsaWMgZGVib3VuY2VyU2VydmljZSA9IGluamVjdChEZWJvdW5jZXJTZXJ2aWNlKTtcbiAgcHVibGljIG51bWJlclBpcGUgPSBpbmplY3QoRGVjaW1hbFBpcGUpO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnJlc3BvbnNpdmUub2JzZXJ2ZShbQnJlYWtwb2ludHMuSGFuZHNldFBvcnRyYWl0XSkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGNvbnN0IGJyZWFrcG9pbnRzID0gcmVzdWx0LmJyZWFrcG9pbnRzO1xuXG4gICAgICBpZiAoYnJlYWtwb2ludHNbQnJlYWtwb2ludHMuSGFuZHNldFBvcnRyYWl0XSkge1xuICAgICAgICB0aGlzLmlzTW9iaWxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc01vYmlsZVNpZ25hbC5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMubW9iaWxlUXVlcnlDaGFuZ2VkLm5leHQodHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzTW9iaWxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNNb2JpbGVTaWduYWwuc2V0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5tb2JpbGVRdWVyeUNoYW5nZWQubmV4dChmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8gaWYgKCQpIHRoaXMuJCA9ICQ7XG4gIH1cbiAgZm9ybUNvbnRyb2wgPSA8VD4oXG4gICAgdmFsdWU/OiBUIHwgbnVsbCxcbiAgICB2YWxpZGF0b3JPck9wdHM/OiBWYWxpZGF0b3JGbiB8IFZhbGlkYXRvckZuW10gfCBGb3JtQ29udHJvbE9wdGlvbnMsXG4gICAgYXN5bmNWYWxpZGF0b3I/OiBBc3luY1ZhbGlkYXRvckZuIHwgQXN5bmNWYWxpZGF0b3JGbltdLFxuICApID0+IFt2YWx1ZSBhcyBhbnkgYXMgVCwgdmFsaWRhdG9yT3JPcHRzISwgYXN5bmNWYWxpZGF0b3IhXTtcblxuICBiYWNrID0gKCkgPT4gdGhpcy5sb2NhdGlvbi5iYWNrKCk7XG5cbiAgb25seU9uZUlucHV0KGlucHV0czogRm9ybUNvbnRyb2xbXSkge1xuICAgIGNvbnN0IG5JbnB1dHMgPSBpbnB1dHM/Lm1hcCgoaW5wKSA9PiAoeyBpZDogdGhpcy5nZW5SYW5kb21JRCwgaW5wIH0pKSB8fCBbXTtcbiAgICByZXR1cm4gbWVyZ2UoLi4ubklucHV0cy5tYXAoKGkpID0+IGkuaW5wLnZhbHVlQ2hhbmdlcy5waXBlKG1hcCgodmFsKSA9PiAoeyBpZDogaS5pZCwgdmFsIH0pKSkpKS5zdWJzY3JpYmUoKHIpID0+IHtcbiAgICAgIC8vIGRlYnVnZ2VyXG4gICAgICBpZiAoci52YWwpIG5JbnB1dHMuZmlsdGVyKCh4KSA9PiB4LmlkICE9IHIuaWQpLmZvckVhY2goKHgpID0+IHguaW5wLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pKTtcbiAgICAgIGVsc2UgbklucHV0cy5maWx0ZXIoKHgpID0+IHguaWQgIT0gci5pZCkuZm9yRWFjaCgoeCkgPT4geC5pbnAuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBjb3B5UGF5bG9hZChwYXlsb2FkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICgoPFNES0Vudmlyb25tZW50PnRoaXMuZW52aXJvbm1lbnQpLmRlYnVnKSB7XG4gICAgICAgIGNvbnN0IGVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgICAgICBlbGVtLnZhbHVlID0gSlNPTi5zdHJpbmdpZnkocGF5bG9hZCk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWxlbSk7XG4gICAgICAgIGVsZW0uc2VsZWN0KCk7XG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZWxlbSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gIH1cbiAgeE9yWSA9ICh4LCB5ID0gJy0nKSA9PiBgJHt4ID09IG51bGwgPyB5IDogeH1gO1xuICB0b1RpdGxlQ2FzZSh0ZXh0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy50aXRsZUNhc2VQaXBlLnRyYW5zZm9ybSh0ZXh0KTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydCBEYXRlIHN0cmluZyB0byBEYXRlIFRpbWUgc3RyaW5nXG4gICAqIEBwYXJhbSBkYXRlU3RyIERhdGUgc3RyaW5nXG4gICAqIEBleGFtcGxlICcyMDIyLTAxLTI1J1xuICAgKiBAcGFyYW0gY29uZmlnIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb252ZXJzaW9uXG4gICAqIEByZXR1cm5zIFJldHVybnMgYSBEYXRlIFRpbWUgc3RyaW5nXG4gICAqIEBleGFtcGxlICcyMDIyLTAxLTI1VDAwOjAwOjAwWicgb3IgJzIwMjItMDEtMjUgMDA6MDA6MDAnXG4gICAqL1xuICBkYXRlVG9EYXRlVGltZSA9IChcbiAgICBkYXRlU3RyOiBzdHJpbmcsXG4gICAgY29uZmlnPzoge1xuICAgICAgLyoqXG4gICAgICAgKiBVc2UgdGhlIHl5eXktbW0tZGQgaGg6bW06c3MgZm9ybWF0XG4gICAgICAgKi9cbiAgICAgIG9taXRUPzogYm9vbGVhbjtcbiAgICAgIC8qKlRpbWUgdG8gYXBwZW5kIHRvIGRhdGUuIEBleGFtcGxlIGAxMjowMDowMFpgICovXG4gICAgICB0aW1lPzogc3RyaW5nO1xuICAgIH0sXG4gICkgPT4ge1xuICAgIHJldHVybiAhZGF0ZVN0clxuICAgICAgPyBudWxsXG4gICAgICA6IGRhdGVTdHJbMTBdID09ICdUJ1xuICAgICAgICA/IGRhdGVTdHJcbiAgICAgICAgOiBkYXRlU3RyICsgKCEhY29uZmlnPy5vbWl0VCA/IGAgJHtjb25maWc/LnRpbWUgfHwgJzAwOjAwOjAwJ31gIDogYFQke2NvbmZpZz8udGltZSB8fCAnMDA6MDA6MDBaJ31gKTtcbiAgfTtcblxuICAvKipcbiAgICogU2V0IGFuIE9iamVjdCdzIGZpZWxkIGlmIHRoZSBvYmplY3QgZXhpc3RzIG9yIGRvbid0IGlmIHRoZSBvYmplY3QgZG9lc24ndFxuICAgKiBAcGFyYW0gb2JqIE9iamVjdCBob2xkaW5nIHRoZSBmaWVsZFxuICAgKiBAcGFyYW0gZmllbGROYW1lIE5hbWUgb2YgdGhlIGZpZWxkIHRvIHNldFxuICAgKiBAcGFyYW0gdmFsIFZhbHVlIHRvIHNldCB0aGUgZmllbGQgd2l0aFxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBvYmplY3QgaG9sZGluZyB0aGUgZGF0YVxuICAgKi9cbiAgc2V0dGVyV2l0aE51bGw8VD4ob2JqOiBULCBrdnBzOiBQYXJ0aWFsPFQ+KSB7XG4gICAgaWYgKCFvYmopIHJldHVybiBudWxsO1xuICAgIGZvciAoY29uc3Qga2V5IGluIGt2cHMpIHtcbiAgICAgIG9ialtrZXldID0ga3Zwc1trZXldO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgLyoqXG4gICAqIChTZXQgYW4gT2JqZWN0J3MgZmllbGQgaWYgdGhlIG9iamVjdCBleGlzdHMgb3IgZG9uJ3QgaWYgdGhlIG9iamVjdCBkb2Vzbid0KSBmb3IgbXVsdGlwbGUgZW50cmllc1xuICAgKiBAcGFyYW0gaXRlbXMgQXJyYXkgb2Ygb2JqZWN0cyBhbmQgdGhlaXIgbW9kaWZpY2F0aW9uc1xuICAgKi9cbiAgc2V0dGVyV2l0aE51bGxBcnJheTxUPihpdGVtczogeyBvYmo6IFQ7IGt2cHM6IFBhcnRpYWw8VD4gfVtdKSB7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICB0aGlzLnNldHRlcldpdGhOdWxsKGl0ZW0ub2JqLCBpdGVtLmt2cHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBkZWxldGlvbiBvZiByb3dzIGZyb20gYSBGb3JtQXJyYXlcbiAgICogQHBhcmFtIGluZGV4IEluZGV4IG9mIHRoZSByb3cgdG8gZGVsZXRlXG4gICAqIEBwYXJhbSBmYSBUaGUgRm9ybUFycmF5IHRoYXQgaG9sZHMgdGhlIHJvd3NcbiAgICogQHBhcmFtIGRlbGV0ZVNlcnZpY2UgVGhlIGRlbGV0aW9uIHNlcnZpY2UgdG8gYmUgY2FsbGVkIChJdCBzaG91bGQgYmUgYW4gYW5vbnltb3VzIGZ1bmN0aW9uKVxuICAgKiBAcGFyYW0gYWRkUm93RnVuYyBUaGUgZnVuY3Rpb24gKGFub255bW91cykgdGhhdCBhZGRzIGEgbmV3IHJvdyB0byB0aGUgRm9ybUFycmF5XG4gICAqIEBwYXJhbSBlbWl0RXZlbnQgU3BlY2lmeSB3aGV0aGVyIHRvIGVtaXQgYW4gZXZlbnQgd2hlbiBtYW5pcHVsYXRpbmcgdGhlIEZvcm1BcnJheVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgaGFuZGxlRm9ybVJvd0RlbGV0ZSA9IChcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGZhOiBVbnR5cGVkRm9ybUFycmF5LFxuICAgIGRlbGV0ZVNlcnZpY2U6ICguLi5hcmdzKSA9PiBQcm9taXNlPGFueT4gfCBPYnNlcnZhYmxlPGFueT4sXG4gICAgYWRkUm93RnVuYzogKC4uLmFyZ3MpID0+IGFueSxcbiAgICBleHRyYUNvbmZpZz86IHtcbiAgICAgIGRvbnRFbWl0RXZlbnQ/OiBib29sZWFuO1xuICAgICAgb25EZWxldGU/OiAocmVzKSA9PiBhbnk7XG4gICAgfSxcbiAgKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IGlkID0gY2xvbmVEZWVwKGZhLmNvbnRyb2xzW2luZGV4XT8udmFsdWU/LmlkKTtcbiAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgaWYgKGZhLmNvbnRyb2xzLmxlbmd0aCA9PSAxICYmIGlkKSB7XG4gICAgICAgIGZhLnJlbW92ZUF0KGluZGV4LCB7IGVtaXRFdmVudDogIWV4dHJhQ29uZmlnPy5kb250RW1pdEV2ZW50IH0pO1xuICAgICAgICBhZGRSb3dGdW5jKCk7XG4gICAgICB9IGVsc2UgaWYgKGZhLmNvbnRyb2xzLmxlbmd0aCA+IDEpIGZhLnJlbW92ZUF0KGluZGV4LCB7IGVtaXRFdmVudDogIWV4dHJhQ29uZmlnPy5kb250RW1pdEV2ZW50IH0pO1xuICAgICAgZWxzZSBpZiAoZmEuY29udHJvbHMubGVuZ3RoID09IDEpIGZhLmNvbnRyb2xzWzBdLnJlc2V0KCk7XG5cbiAgICAgIGlmIChpZCAmJiBkZWxldGVTZXJ2aWNlKSB7XG4gICAgICAgIGNvbnN0IHJlcSA9IGRlbGV0ZVNlcnZpY2UoaWQpO1xuICAgICAgICBpZiAocmVxWyd0b1Byb21pc2UnXSkge1xuICAgICAgICAgIHJlc29sdmUobGFzdFZhbHVlRnJvbShyZXEgYXMgT2JzZXJ2YWJsZTxhbnk+KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShyZXEgYXMgYW55KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgIH1cbiAgICB9KS50aGVuKChyKSA9PiB7XG4gICAgICBleHRyYUNvbmZpZz8ub25EZWxldGUocik7XG4gICAgICByZXR1cm4gcjtcbiAgICB9KTtcbiAgfTtcblxuICBvcGVuSFRNTEluRnVsbHNjcmVlbjxUTWV0YWRhdGE+KGVsZW06IEhUTUxFbGVtZW50LCBtZXRhZGF0YT86IFRNZXRhZGF0YSwgb25MZWF2ZT86IChtZXRhZGF0YTogVE1ldGFkYXRhKSA9PiBhbnkpIHtcbiAgICBpZiAoZWxlbS5yZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgZWxlbS5vbmZ1bGxzY3JlZW5jaGFuZ2UgPSAoZSkgPT4ge1xuICAgICAgICBpZiAob25MZWF2ZSlcbiAgICAgICAgICBlbGVtLm9uZnVsbHNjcmVlbmNoYW5nZSA9IChlKSA9PiB7XG4gICAgICAgICAgICAvLyAgZGVidWdnZXI7XG4gICAgICAgICAgICBvbkxlYXZlKG1ldGFkYXRhKTtcbiAgICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIGVsZW0ucmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICB9IGVsc2UgaWYgKGVsZW1bJ3dlYmtpdFJlcXVlc3RGdWxsc2NyZWVuJ10pIHtcbiAgICAgIC8qIFNhZmFyaSAqL1xuICAgICAgZWxlbVsnd2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4nXSgpO1xuICAgIH0gZWxzZSBpZiAoZWxlbVsnbXNSZXF1ZXN0RnVsbHNjcmVlbiddKSB7XG4gICAgICAvKiBJRTExICovXG4gICAgICBlbGVtWydtc1JlcXVlc3RGdWxsc2NyZWVuJ10oKTtcbiAgICB9XG4gIH1cbiAgY2xvc2VGdWxsc2NyZWVuKCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTtcbiAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRbJ3dlYmtpdEV4aXRGdWxsc2NyZWVuJ10pIHtcbiAgICAgICAgLyogU2FmYXJpICovXG4gICAgICAgIGRvY3VtZW50Wyd3ZWJraXRFeGl0RnVsbHNjcmVlbiddKCk7XG4gICAgICB9IGVsc2UgaWYgKGRvY3VtZW50Wydtc0V4aXRGdWxsc2NyZWVuJ10pIHtcbiAgICAgICAgLyogSUUxMSAqL1xuICAgICAgICBkb2N1bWVudFsnbXNFeGl0RnVsbHNjcmVlbiddKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gIH1cblxuICBhZGRUb1N1YnNUb0Nsb3NlT25Sb3V0ZSA9ICguLi5zdWI6IFN1YnNjcmlwdGlvbltdKSA9PiB7XG4gICAgaWYgKCFDb25maWcuc3Vic1RvQ2xvc2VPblJvdXRlKSBDb25maWcuc3Vic1RvQ2xvc2VPblJvdXRlID0gW107XG4gICAgQ29uZmlnLnN1YnNUb0Nsb3NlT25Sb3V0ZS5wdXNoKC4uLnN1Yik7XG4gIH07XG4gIGNsZWFyU3Vic1RvQ2xvc2VPblJvdXRlID0gKCkgPT4ge1xuICAgIENvbmZpZy5zdWJzVG9DbG9zZU9uUm91dGU/LmZvckVhY2goKHgpID0+IHg/LnVuc3Vic2NyaWJlKCkpO1xuICAgIENvbmZpZy5zdWJzVG9DbG9zZU9uUm91dGUgPSBbXTtcbiAgfTtcbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGRlbGV0aW9uIG9mIHJvd3MgZnJvbSBhbiBhcnJheVxuICAgKiBAcGFyYW0gaW5kZXggSW5kZXggb2YgdGhlIHJvdyB0byBkZWxldGVcbiAgICogQHBhcmFtIGFyciBUaGUgYXJyYXkgdGhhdCBob2xkcyB0aGUgcm93c1xuICAgKiBAcGFyYW0gZGVsZXRlU2VydmljZSBUaGUgZGVsZXRpb24gc2VydmljZSB0byBiZSBjYWxsZWQgKEl0IHNob3VsZCBiZSBhbiBhbm9ueW1vdXMgZnVuY3Rpb24pXG4gICAqIEBwYXJhbSBhZGRSb3dGdW5jIFRoZSBmdW5jdGlvbiAoYW5vbnltb3VzKSB0aGF0IGFkZHMgYSBuZXcgcm93IHRvIHRoZSBhcnJheVxuICAgKiBAcGFyYW0gY2IgVGhlIGZ1bmN0aW9uIHRvIGNhbGxiYWNrIHdpdGggdGhlIHJlc3BvbnNlIG9mIHRoZSBkZWxldGlvbiBzZXJ2aWNlIGFzIHRoZSBpbnB1dCBwYXJhbWV0ZXJcbiAgICovXG4gIGhhbmRsZVJvd0RlbGV0ZSA9IGFzeW5jIDxUPihcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGFycjogYW55W10sXG4gICAgZGVsZXRlU2VydmljZTogKC4uLmFyZ3MpID0+IFByb21pc2U8VD4gfCBPYnNlcnZhYmxlPFQ+LFxuICAgIGFkZFJvd0Z1bmM6ICguLi5hcmdzKSA9PiBhbnksXG4gICAgY2I/OiAoYW55KSA9PiBhbnksXG4gICkgPT4ge1xuICAgIGNvbnN0IGlkID0gYXJyW2luZGV4XT8uaWQ7XG4gICAgLy8gZGVidWdnZXI7XG5cbiAgICBpZiAoaWQgJiYgZGVsZXRlU2VydmljZSkge1xuICAgICAgY29uc3QgcmVxID0gZGVsZXRlU2VydmljZShpZCk7XG4gICAgICBpZiAodHlwZW9mIHJlcVsndG9Qcm9taXNlJ10gPT0gJ2Z1bmN0aW9uJykgY2IgPyBjYihhd2FpdCByZXFbJ3RvUHJvbWlzZSddKCkpIDogcmVxWyd0b1Byb21pc2UnXSgpO1xuICAgICAgZWxzZSBjYiA/IGNiKGF3YWl0IHJlcSkgOiBudWxsO1xuICAgIH1cblxuICAgIGlmIChhcnIubGVuZ3RoID09IDEpIHtcbiAgICAgIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgYWRkUm93RnVuYygpO1xuICAgIH0gZWxzZSBpZiAoYXJyLmxlbmd0aCA+IDEpIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICB9O1xuICAvKipcbiAgICogVG8gaGFuZGxlIHRoZSBwYXRjaGluZyBvZiBhIEZvcm1BcnJheVxuICAgKiBAcGFyYW0gYXJyIFRoZSBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhXG4gICAqIEBwYXJhbSBhZGRGdW5jIFRoZSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGFkZGl0aW9uIG9mIHNpbmdsZSBlbnRyaWVzXG4gICAqIEBwYXJhbSBmb3JtQXJyIFRoZSBGb3JtQXJyYXkgdGhhdCB3aWxsIGhvbGQgdGhlIGFycmF5J3MgZGF0YVxuICAgKi9cbiAgaW5pdFBhdGNoRm9ybUFycmF5ID0gPFQ+KGFycjogVFtdLCBhZGRGdW5jOiAoaTogbnVtYmVyLCBkYXRhPzogVCwgZm9ybUFycj86IEZvcm1BcnJheSkgPT4gdm9pZCwgZm9ybUFycjogRm9ybUFycmF5KSA9PiB7XG4gICAgLy8gZGVidWdnZXJcbiAgICBmb3JtQXJyPy5jbGVhcigpO1xuICAgIGlmIChhcnI/Lmxlbmd0aCkge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGFycikge1xuICAgICAgICBhZGRGdW5jKGZvcm1BcnIubGVuZ3RoLCBpdGVtLCBmb3JtQXJyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFmb3JtQXJyLmxlbmd0aCkgYWRkRnVuYyhmb3JtQXJyLmxlbmd0aCwgbnVsbCwgZm9ybUFycik7XG4gICAgfVxuICB9O1xuICBwcml2YXRlIGlzUHJvbWlzZSA9IChmdW5jKSA9PiB7XG4gICAgcmV0dXJuIHR5cGVvZiBmdW5jID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZnVuYy50aGVuID09PSAnZnVuY3Rpb24nO1xuICB9O1xuICBpc0FzeW5jID0gKGZ1bmMpID0+IHtcbiAgICByZXR1cm4gZnVuYy5jb25zdHJ1Y3Rvci5uYW1lID09PSAnQXN5bmNGdW5jdGlvbicgfHwgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nICYmIHRoaXMuaXNQcm9taXNlKGZ1bmMoKSkpO1xuICB9O1xuXG4gIGlzT2JzZXJ2YWJsZSA9IDxUPihmdW5jKSA9PiB7XG4gICAgLy8gcmV0dXJuIHR5cGVvZiBmdW5jID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZnVuYy5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbic7XG4gICAgLy8gcmV0dXJuIHR5cGVvZiBmdW5jID09PSAnb2JqZWN0JyAmJiBmdW5jIGluc3RhbmNlb2YgT2JzZXJ2YWJsZTtcbiAgICAvLyByZXR1cm4gdHlwZW9mIGZ1bmMgPT09ICdvYmplY3QnICYmIGZ1bmMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlPFQ+O1xuICAgIHJldHVybiB0eXBlb2YgZnVuYyA9PT0gJ29iamVjdCcgJiYgaXNPYnNlcnZhYmxlKGZ1bmMpO1xuICAgIHJldHVybiB0eXBlb2YgZnVuYyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGZ1bmMudG9Qcm9taXNlID09PSAnZnVuY3Rpb24nO1xuICB9O1xuICBwcm9taXNpZnlWYWwgPSA8VD4odmFsOiBUIHwgUHJvbWlzZTxUPiB8IE9ic2VydmFibGU8VD4pID0+IHtcbiAgICBpZiAodGhpcy5pc0FzeW5jKHZhbCkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsIGFzIFByb21pc2U8VD4pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc09ic2VydmFibGUodmFsKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShsYXN0VmFsdWVGcm9tKHZhbCBhcyBPYnNlcnZhYmxlPFQ+KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsIGFzIFQpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIGFyciBBcnJheSBvZiBvYnNlcnZhYmxlcyB0byBmZXRjaFxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiB0aGUgcmVzcG9uc2VzIG1lcmdlZCB0b2dldGhlci4gSXQgZW1pdHMgdGhlIG1lcmdlZCByZXNwb25zZXMgYXMgdGhleSBhcmUgZmV0Y2hlZCBhbmQgY2xvc2VzIG9uY2UgYWxsbCB0aGUgcmVzcG9uc2VzIGhhdmUgYmVlbiBmZXRjaGVkXG4gICAqL1xuICBtZXJnZUFyck9ic2VydmFibGVzID0gPFQ+KGFycjogeyAkZnVuYzogT2JzZXJ2YWJsZTxUW10+IH1bXSkgPT4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxUW10+KChzdWIpID0+IHtcbiAgICAgIGNvbnN0IHJldDogVFtdID0gW107XG4gICAgICBsZXQgcmVzcG9uc2VDb3VudCA9IDA7XG4gICAgICBtZXJnZShcbiAgICAgICAgLi4uYXJyLm1hcChcbiAgICAgICAgICAoeCkgPT5cbiAgICAgICAgICAgIHguJGZ1bmM/LnBpcGUoXG4gICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB0YXAoKHIpID0+IHtcbiAgICAgICAgICAgICAgICByZXNwb25zZUNvdW50Kys7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICkuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIHJldC5wdXNoKC4uLnIpO1xuICAgICAgICBzdWIubmV4dChyZXQpO1xuICAgICAgICBpZiAocmVzcG9uc2VDb3VudCA9PSBhcnIuZmlsdGVyKCh4KSA9PiB4LiRmdW5jKS5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBkZWJ1Z2dlclxuICAgICAgICAgIHN1Yi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbiAgcmVtb3ZlRHVwbGljYXRlPFQ+KGxpc3Q6IFRbXSwga2V5RmllbGQgPSAnY29kZScpIHtcbiAgICBpZiAoIWxpc3QpIHJldHVybiBudWxsO1xuICAgIGxpc3QgPSBsaXN0LmZpbHRlcigoeCkgPT4geCk7XG4gICAgY29uc3QgcmV0OiBUW10gPSBbXSxcbiAgICAgIGR1cGxpY2F0ZU1hcDogeyBbeDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbGlzdCkge1xuICAgICAgaWYgKGR1cGxpY2F0ZU1hcFtpdGVtW2tleUZpZWxkXV0pIGNvbnRpbnVlO1xuICAgICAgcmV0LnB1c2goaXRlbSk7XG4gICAgICBkdXBsaWNhdGVNYXBbaXRlbVtrZXlGaWVsZF1dID0gaXRlbTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuICBnZXQgZ2VuUmFuZG9tSUQoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMDAwMDAwMDApO1xuICB9XG4gIHN0b3JlUGF5bG9hZCA9IHRoaXMubG9nZ2VyU2VydmljZS5hZGRMb2c7XG4gIG9iaklzRW1wdHkgPSAob2JqLCBleGNsdXNpb25GaWVsZHM/OiBzdHJpbmdbXSkgPT4ge1xuICAgIGlmICghb2JqKSByZXR1cm4gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChleGNsdXNpb25GaWVsZHM/LmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgaWYgKG9ialtrZXldKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICBkYXRhR2VuID0gPFQgPSBhbnk+KGtleXM6IHN0cmluZ1tdLCBsZW5ndGggPSAxMCkgPT4ge1xuICAgIGNvbnN0IHJldDogYW55W10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgdDogYW55ID0ge307XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIHRba2V5XSA9IHRoaXMudGV4dEdlbigpO1xuICAgICAgfVxuICAgICAgcmV0LnB1c2godCk7XG4gICAgfVxuICAgIHJldHVybiByZXQgYXMgVFtdO1xuICB9O1xuICB0ZXh0R2VuID0gKCkgPT4gJ3JhbmRvbScgKyBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMDAwKTtcbiAgdHJhY2tCeUNvZGUoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIGl0ZW0/LmNvZGU7XG4gIH1cbiAgdHJhY2tCeUlEKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xuICAgIHJldHVybiBpdGVtPy5pZDtcbiAgfVxuICBkaWFsb2dPcGVuZXIgPSAoY29tcDogYW55LCBjb25maWc6IE1hdERpYWxvZ0NvbmZpZywgdmFsdWVDQjogKHIpID0+IGFueSwgbm9WYWx1ZUNCPzogYW55KSA9PlxuICAgIHRoaXMuZGlhbG9nT3BlbmVyUmVmKGNvbXAsIGNvbmZpZylcbiAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIGlmIChyICE9IG51bGwgJiYgciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YWx1ZUNCKHIpO1xuICAgICAgICB9IGVsc2UgaWYgKG5vVmFsdWVDQikge1xuICAgICAgICAgIG5vVmFsdWVDQigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgZGlhbG9nT3BlbmVyUmVmID0gKGNvbXA6IGFueSwgY29uZmlnOiBNYXREaWFsb2dDb25maWcpID0+IHRoaXMuZGlhbG9nLm9wZW4oY29tcCwgY29uZmlnKTtcbiAgZmluZExhYmVsQnlJdGVtID0gKGl0ZW0sIGFycjogYW55W10sIGxhYmVsRmllbGQ/OiBzdHJpbmcsIGtleUZpZWxkOiBzdHJpbmcgPSAnY29kZScpID0+IHtcbiAgICBpZiAoIWl0ZW0pIHJldHVybiBudWxsO1xuICAgIGNvbnN0IG9iaiA9IGFycj8uZmluZCgoeCkgPT4geFtrZXlGaWVsZF0gPT0gaXRlbSk7XG4gICAgaWYgKCFvYmopIHJldHVybiBpdGVtO1xuICAgIGVsc2UgcmV0dXJuIGAke2l0ZW19IC0gJHtvYmpbbGFiZWxGaWVsZCB8fCAndGl0bGUnXSB8fCBvYmpbbGFiZWxGaWVsZCB8fCAnZGVzY3JpcHRpb24nXX1gO1xuICB9O1xuXG4gIGZvcm1GaWVsZHNGcm9tQXJyID0gdGhpcy5pbnB1dFNlcnZpY2UuZm9ybUZpZWxkc0Zyb21GQ0lucHV0c0FycjtcbiAgb2JqVG9Gb3JtQ29udHJvbHMgPSB0aGlzLmlucHV0U2VydmljZS5mb3JtRmllbGRzRnJvbU9iajtcbiAgZm9ybVNjaGVtYVRvRm9ybUNvbnRyb2xzID0gdGhpcy5pbnB1dFNlcnZpY2UuZm9ybVNjaGVtYVRvRm9ybUNvbnRyb2xzO1xuXG4gIGJpbmRGb3JtQ29udHJvbFRvSW5wdXRzID0gdGhpcy5pbnB1dFNlcnZpY2UuYmluZEZvcm1Db250cm9sVG9JbnB1dHM7XG5cbiAgZ28gPSAodmFsdWU6IHN0cmluZywgZXh0cmE/OiBOYXZpZ2F0aW9uRXh0cmFzKSA9PiB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3ZhbHVlXSwgZXh0cmEpO1xuICB9O1xuICAvKipcbiAgICogUm91dGUgdG8gY29tcG9uZW50XG4gICAqIEBwYXJhbSByb3V0ZSBSb3V0ZSBvZiBwYXRoIHRvIGNvbXBvbmVudFxuICAgKiBAcGFyYW0gZXh0cmFcbiAgICovXG4gIGdvUiA9IChyb3V0ZTogc3RyaW5nLCBleHRyYT86IE5hdmlnYXRpb25FeHRyYXMpID0+IHtcbiAgICBpZiAoISg8U0RLRW52aXJvbm1lbnQ+dGhpcy5lbnZpcm9ubWVudCkuYWN0aXZhdGVkUm91dGUpIGRlYnVnZ2VyO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyb3V0ZV0sIHtcbiAgICAgIHJlbGF0aXZlVG86ICg8U0RLRW52aXJvbm1lbnQ+dGhpcy5lbnZpcm9ubWVudCkuYWN0aXZhdGVkUm91dGUsXG4gICAgICAuLi5leHRyYSxcbiAgICB9KTtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgfTtcblxuICByZWxhdGl2ZVJvdXRlcigpIHtcbiAgICBjb25zdCByb3V0ZXIgPSBpbmplY3QoUm91dGVyKSxcbiAgICAgIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgICByZXR1cm4ge1xuICAgICAgcm91dGUsXG4gICAgICByb3V0ZXIsXG4gICAgICBuYXZpZ2F0ZTogKGxpbms6IHN0cmluZywgY29uZmlnPzogTmF2aWdhdGlvbkV4dHJhcyB8IHVuZGVmaW5lZCkgPT4gcm91dGVyLm5hdmlnYXRlKFtsaW5rXSwgeyByZWxhdGl2ZVRvOiByb3V0ZSwgLi4uY29uZmlnIH0pLFxuICAgICAgcXVlcnlQYXJhbXM6IHJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLFxuICAgICAgcGF0aFBhcmFtczogcm91dGUuc25hcHNob3QucGFyYW1zLFxuICAgIH07XG4gIH1cblxuICBtb25leVBhcnNlciA9IChhbW91bnQ6IHN0cmluZyB8IG51bWJlciwgY3VycmVuY3kgPSAnICcpID0+IHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW5jeVBpcGUudHJhbnNmb3JtKGFtb3VudCwgY3VycmVuY3kgfHwgJyAnKTtcbiAgfTtcbiAgZXh0cmFjdFVwbG9hZChldmVudDogYW55KSB7XG4gICAgcmV0dXJuIChldmVudC50YXJnZXQuZmlsZXMgYXMgRmlsZVtdKSB8fCBbXTtcbiAgfVxuXG4gIHNlY29uZHNUb0hvdXJNaW5TZWMgPSAoc2Vjb25kczogbnVtYmVyKSA9PiB7XG4gICAgaWYgKCFzZWNvbmRzKSByZXR1cm4geyBzZWNzOiBudWxsLCBob3VyczogbnVsbCwgbWluczogbnVsbCB9O1xuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gMzYwMCkgfHwgMCxcbiAgICAgIHNlY29uZHNFeEhvdXJzID0gc2Vjb25kcyAlIDM2MDAgfHwgMCxcbiAgICAgIG1pbnMgPSBNYXRoLmZsb29yKHNlY29uZHNFeEhvdXJzIC8gNjApIHx8IDAsXG4gICAgICBzZWNzID0gc2Vjb25kc0V4SG91cnMgJSA2MDtcbiAgICByZXR1cm4geyBob3VycywgbWlucywgc2VjcyB9O1xuICB9O1xuICBtaW51dGVzVG9EYXlIb3VyTWluID0gKG1pbnV0ZXM6IG51bWJlcikgPT4ge1xuICAgIGlmICghbWludXRlcykgcmV0dXJuIHsgZGF5czogbnVsbCwgaG91cnM6IG51bGwsIG1pbnM6IG51bGwgfTtcbiAgICBjb25zdCBkYXlzID0gTWF0aC5mbG9vcihtaW51dGVzIC8gMTQ0MCkgfHwgMCxcbiAgICAgIG1pbml1dGVzRXhEYXlzID0gbWludXRlcyAlIDE0NDAgfHwgMCxcbiAgICAgIGhvdXJzID0gTWF0aC5mbG9vcihtaW5pdXRlc0V4RGF5cyAvIDYwKSB8fCAwLFxuICAgICAgbWlucyA9IG1pbml1dGVzRXhEYXlzICUgNjAgfHwgMDtcbiAgICByZXR1cm4geyBkYXlzLCBob3VycywgbWlucyB9O1xuICB9O1xuICBtaW51dGVzVG9EYXlIb3VyTWluU3RyID0gKG1pbnV0ZXM6IG51bWJlcikgPT4ge1xuICAgIGlmICghbWludXRlcykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcmV0ID0gdGhpcy5taW51dGVzVG9EYXlIb3VyTWluKG1pbnV0ZXMpO1xuICAgIHJldHVybiBgJHtyZXQuZGF5c30gJHtyZXQuaG91cnN9OiR7cmV0Lm1pbnN9YC50cmltKCk7XG4gIH07XG4gIG1pbnV0ZXNUb0RheUhvdXJNaW5TdHIyID0gKG1pbnV0ZXM6IG51bWJlcikgPT4ge1xuICAgIGlmICghbWludXRlcykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcmV0ID0gdGhpcy5taW51dGVzVG9EYXlIb3VyTWluKG1pbnV0ZXMpO1xuICAgIHJldHVybiBgJHtyZXQuZGF5c31kYXlzICR7cmV0LmhvdXJzfWhycyAke3JldC5taW5zfW1pbnNgLnRyaW0oKTtcbiAgfTtcbiAgZGF5SG91ck1pblRvSG91ck1pbnV0ZXMgPSAoZHlzOiBudW1iZXIsIGhyczogbnVtYmVyLCBtaW5zOiBudW1iZXIpID0+IHtcbiAgICBpZiAoIWR5cyAmJiAhaHJzICYmICFtaW5zKSByZXR1cm4gJyc7XG4gICAgY29uc3QgZHlzVG9IcnMgPSAoZHlzIHx8IDApICogMjQ7XG4gICAgaHJzID0gKCtocnMgfHwgMCkgKyBkeXNUb0hycztcbiAgICByZXR1cm4gKGhycyB8fCAnMDAnKSArICc6JyArIChtaW5zIHx8ICcwMCcpO1xuICB9O1xuICBkaXNhYmxlT3JFbmFibGVJbnB1dHMgPSAoY29udHJvbHM6IEFic3RyYWN0Q29udHJvbFtdLCBkaXNhYmxlOiBib29sZWFuKSA9PiB7XG4gICAgaWYgKGRpc2FibGUpIHRoaXMuZGlzYWJsZUlucHV0cyhjb250cm9scyk7XG4gICAgZWxzZSB0aGlzLmVuYWJsZUlucHV0cyhjb250cm9scyk7XG4gIH07XG4gIGRpc2FibGVJbnB1dHMgPSAoY29udHJvbHM6IEFic3RyYWN0Q29udHJvbFtdKSA9PiB7XG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIGNvbnRyb2xzKSB7XG4gICAgICBjb250cm9sPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH07XG4gIGVuYWJsZUlucHV0cyA9IChjb250cm9sczogQWJzdHJhY3RDb250cm9sW10pID0+IHtcbiAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgY29udHJvbHMpIHtcbiAgICAgIGNvbnRyb2w/LmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9O1xuICBkYXlIb3VyTWluVG9NaW51dGVzID0gKGR5czogbnVtYmVyLCBocnM6IG51bWJlciwgbWluczogbnVtYmVyKSA9PiB7XG4gICAgaWYgKCFkeXMgJiYgIWhycyAmJiAhbWlucykgcmV0dXJuIDA7XG4gICAgY29uc3QgZHlzVG9IcnMgPSAoZHlzIHx8IDApICogMjQ7XG4gICAgaHJzID0gKCtocnMgfHwgMCkgKyBkeXNUb0hycztcbiAgICByZXR1cm4gKGhycyB8fCAwKSAqIDYwICsgbWlucztcbiAgfTtcbiAgaG91ck1pblRvTWludXRlcyA9IChocnM6IG51bWJlciwgbWluczogbnVtYmVyKSA9PiB7XG4gICAgaWYgKCFocnMgJiYgIW1pbnMpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoaHJzIHx8IDApICogNjAgKyBtaW5zO1xuICB9O1xuICBob3VyTWluVG9NaW51dGVzMiA9IChocnNNaW5zOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBbaHJzLCBtaW5zXSA9IGhyc01pbnM/LnNwbGl0KCc6JykgfHwgWzAsIDBdO1xuICAgIHJldHVybiB0aGlzLmhvdXJNaW5Ub01pbnV0ZXMoK2hycywgK21pbnMpO1xuICB9O1xuICBub3RpZnkobWVzc2FnZTogc3RyaW5nLCBjbHM6IDAgfCAxIHwgMiB8IDMgPSAxLCBkdXJhdGlvbiA9IDUwMDAsIHRpdGxlID0gJ0Nsb3NlJykge1xuICAgIGlmIChjbHMgPT0gMCkgcmV0dXJuIHRoaXMuaW5mbyhtZXNzYWdlLCBjbHMpO1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPSAnc3RyaW5nJykgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICBtZXNzYWdlID0gdHlwZW9mIG1lc3NhZ2UgPT0gJ3N0cmluZycgPyBtZXNzYWdlIDogJyc7XG4gICAgY29uc3QgcmVmID0gdGhpcy5zbmFja0Jhci5vcGVuKG1lc3NhZ2UsIHRpdGxlLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICAgIGhvcml6b250YWxQb3NpdGlvbjogJ2NlbnRlcicsXG4gICAgICB2ZXJ0aWNhbFBvc2l0aW9uOiAnYm90dG9tJyxcbiAgICAgIHBhbmVsQ2xhc3M6IGNscyA9PSAxID8gJ2JnLXN1Y2Nlc3MnIDogY2xzID09IDIgPyAnYnRuLWluZm8nIDogY2xzID09IDMgPyAnYnRuLXdhcm5pbmcnIDogJ2JnLWRhbmdlcicsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHJlZi5hZnRlckRpc21pc3NlZCgpLnBpcGUobWFwKChyKSA9PiByLmRpc21pc3NlZEJ5QWN0aW9uKSkpO1xuICB9XG5cbiAgc2Nyb2xsVG9Ub3AgPSAoKSA9PiB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGRhdGUgdGltZSBsb2NhbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgZGF0ZXRpbWUtbG9jYWwgaW5wdXRcbiAgICovXG4gIGdldExvY2FsRGF0ZVRpbWVOb3cgPSAoKSA9PiB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgZGF0ZUNodW5rcyA9IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCkuc3BsaXQoJy8nKTtcbiAgICByZXR1cm4gYCR7ZGF0ZUNodW5rc1syXX0tJHtkYXRlQ2h1bmtzWzFdfS0ke2RhdGVDaHVua3NbMF19YCArICdUJyArIGRhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKCk7XG4gIH07XG4gIC8qKiBAcmV0dXJucyBUaGUgY3VycmVudCBkYXRlIGxvY2FsIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBkYXRlIGlucHV0ICovXG4gIGxvY2FsRGF0ZU5vdyA9ICgpID0+IHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07XG4gIH07XG4gIGRhdGVGb3JtYXQgPSAoZGF0ZTogYW55LCBmb3JtYXQgPSAxKSA9PiB7XG4gICAgaWYgKCFkYXRlKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBkID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgaWYgKGZvcm1hdCA9PSAxKSB7XG4gICAgICByZXR1cm4gZC50b0RhdGVTdHJpbmcoKTtcbiAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PSAyKSB7XG4gICAgICByZXR1cm4gZC5nZXREYXRlKCkgKyAnICcgKyBjb25maWcuTW9udGhzW2QuZ2V0TW9udGgoKV07XG4gICAgfSBlbHNlIGlmIChmb3JtYXQgPT0gMykge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsIGBFRUUgTU1NIGRkIFlZWVksIGhoOm1tIGFhYCk7XG4gICAgfSBlbHNlIGlmIChmb3JtYXQgPT0gNCkge1xuICAgICAgcmV0dXJuIGNvbmZpZy5Nb250aHNbZC5nZXRNb250aCgpXSArICcgJyArIGQuZ2V0RGF0ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9O1xuXG4gIHRvSmF2YURhdGVTdHJpbmcgPSAoaXNvRGF0ZVN0cmluZzogc3RyaW5nID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpKSA9PiB7XG4gICAgaWYgKCFpc29EYXRlU3RyaW5nKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gYCR7aXNvRGF0ZVN0cmluZy5zbGljZSgwLCAxOSl9YDtcbiAgICByZXR1cm4gYCR7aXNvRGF0ZVN0cmluZy5zbGljZSgwLCAxMCl9ICR7aXNvRGF0ZVN0cmluZy5zbGljZSgxMSwgMTkpfWA7XG4gIH07XG5cbiAgdG9KYXZhRGF0ZXRpbWVTdHJpbmcgPSAoaXNvRGF0ZVN0cmluZzogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFpc29EYXRlU3RyaW5nKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBkYXRlID0gaXNvRGF0ZVN0cmluZy5pbmNsdWRlcygnVCcpID8gaXNvRGF0ZVN0cmluZyA6IG5ldyBEYXRlKGlzb0RhdGVTdHJpbmcpLnRvSVNPU3RyaW5nKCk7XG4gICAgcmV0dXJuIGAke2RhdGUuc2xpY2UoMCwgMTApfSAke2RhdGUuc2xpY2UoMTEsIDE5KX1gO1xuICB9O1xuXG4gIHRpbWVGb3JtYXQgPSAodGltZT86IGFueSkgPT4ge1xuICAgIGNvbnN0IHRpbWVBcnI6IGFueVtdID0gdGltZS5zcGxpdCgnICcpO1xuICAgIHRpbWVBcnJbMF0gPSB0aW1lQXJyWzBdLnNwbGl0KCc6Jykuc3BsaWNlKDAsIDIpLmpvaW4oJzonKTtcbiAgICByZXR1cm4gdGltZUFyci5qb2luKCcgJyk7XG4gIH07XG4gIGZ1bGxEYXRlVGltZSA9ICh0aW1lc3RhbXA6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgIC8vIGRlYnVnZ2VyXG4gICAgcmV0dXJuIHRoaXMuZGF0ZUZvcm1hdCh0aW1lc3RhbXAsIDMpO1xuICB9O1xuICBkYXlzRm9ybWF0dGVyID0gKGRheXM6IG51bWJlcikgPT4ge1xuICAgIGlmICghZGF5cykge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG4gICAgbGV0IHlyOiBudW1iZXIsXG4gICAgICBtdDogbnVtYmVyLFxuICAgICAgZHk6IG51bWJlcixcbiAgICAgIHJldDogc3RyaW5nLFxuICAgICAgX3lyID0gMzY1LFxuICAgICAgX210ID0gMzA7XG4gICAgaWYgKGRheXMgPiBfeXIpIHtcbiAgICAgIHlyID0gTWF0aC5mbG9vcihkYXlzIC8gX3lyKTtcbiAgICB9XG4gICAgaWYgKGRheXMgPiBfbXQpIHtcbiAgICAgIG10ID0gTWF0aC5mbG9vcigoZGF5cyAlIF95cikgLyBfbXQpO1xuICAgIH1cbiAgICBkeSA9IChkYXlzICUgX3lyKSAlIF9tdDtcbiAgICByZXQgPSBgJHt5ciA/IHRoaXMucGx1YXJsaXplcih5ciwgJ3lyJykgOiAnJ30gJHttdCA/IHRoaXMucGx1YXJsaXplcihtdCwgJ210aCcpIDogJyd9ICR7dGhpcy5wbHVhcmxpemVyKGR5LCAnZHknKX1gO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIG1vbnRoc0Zvcm1hdHRlciA9IChtb250aHM6IG51bWJlcikgPT4ge1xuICAgIGlmICghbW9udGhzKSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cbiAgICBsZXQgeXI6IG51bWJlcixcbiAgICAgIG10OiBudW1iZXIsXG4gICAgICByZXQ6IHN0cmluZyxcbiAgICAgIF95ciA9IDEyO1xuICAgIGlmIChtb250aHMgPiBfeXIpIHtcbiAgICAgIHlyID0gTWF0aC5mbG9vcihtb250aHMgLyBfeXIpO1xuICAgIH1cbiAgICBtdCA9IG1vbnRocyAlIF95cjtcbiAgICByZXQgPSBgJHt5ciA/IHRoaXMucGx1YXJsaXplcih5ciwgJ3lyJykgOiAnJ30gJHttdCA/IHRoaXMucGx1YXJsaXplcihtdCwgJ210aCcpIDogJyd9YDtcbiAgICByZXR1cm4gcmV0O1xuICB9O1xuICBwbHVhcmxpemVyID0gKHZhbDogbnVtYmVyLCB0eHQ6IHN0cmluZywgcGx1cmFsPzogc3RyaW5nKSA9PiB7XG4gICAgcGx1cmFsID0gcGx1cmFsIHx8IHR4dCArICdzJztcbiAgICByZXR1cm4gdmFsICsgKHZhbCA9PSAxID8gdHh0IDogcGx1cmFsKTtcbiAgfTtcbiAgZGVjaW1hbFRvUGVyY2VudGFnZSA9IChkZWM6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiBkZWMgKiAxMDAgKyAnJSc7XG4gIH07XG4gIGxvZ0Zvcm0gPSAoZm9ybSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCdGT1JNJywgZm9ybSwgJ1ZBTFVFUycsIGZvcm0udmFsdWUgYXMgYW55KTtcbiAgfTtcblxuICB0b0NTVihkYXRhOiBhbnlbXSwgaGVhZGVyTmFtZXM6IHN0cmluZ1tdLCBmaWxlbmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVwbGFjZXIgPSAoa2V5LCB2YWx1ZSkgPT4gKHZhbHVlID09PSBudWxsID8gJycgOiB2YWx1ZSk7IC8vIHNwZWNpZnkgaG93IHlvdSB3YW50IHRvIGhhbmRsZSBudWxsIHZhbHVlcyBoZXJlXG5cbiAgICBsZXQgY3N2ID0gZGF0YS5tYXAoKHJvdykgPT4gaGVhZGVyTmFtZXMubWFwKChmaWVsZE5hbWUpID0+IEpTT04uc3RyaW5naWZ5KHJvd1tmaWVsZE5hbWVdLCByZXBsYWNlcikpLmpvaW4oJywnKSk7XG4gICAgY3N2LnVuc2hpZnQoaGVhZGVyTmFtZXMuam9pbignLCcpKTtcbiAgICBsZXQgY3N2QXJyYXkgPSBjc3Yuam9pbignXFxyXFxuJyk7XG5cbiAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtjc3ZBcnJheV0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcbiAgICBzYXZlQXMoYmxvYiwgZmlsZW5hbWUgKyAnLmNzdicpO1xuICB9XG5cbiAgaXNQaWN0dXJlRm9ybWF0KGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIWZpbGVOYW1lKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgUElDVFVSRV9GT1JNQVRTID0gWycuanBnJywgJy5qcGVnJywgJy5wbmcnLCAnLmdpZiddO1xuICAgIHJldHVybiBQSUNUVVJFX0ZPUk1BVFMuc29tZSgoZm9ybWF0KSA9PiBmaWxlTmFtZS5lbmRzV2l0aChmb3JtYXQpKTtcbiAgfVxuICBvYmplY3RUb0FycmF5PFQ+KG9iajogYW55KSB7XG4gICAgY29uc3QgcmV0ID0gW107XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICByZXQucHVzaChvYmpba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQgYXMgVFtdO1xuICB9XG4gIGZvcm1hdEZpZWxkKGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRvVGl0bGVDYXNlKGZpZWxkPy50b1NlbnRlbmNlQ2FzZSgpKTtcbiAgfVxuICAvKipcbiAgICogVXNlcyBhIHdlYiB3b3JrZXIgdG8gcGVyZm9ybSBhIHRhc2tcbiAgICogQGV4YW1wbGUgbmV3IFdvcmtlcihuZXcgVVJMKCcuL3VwbG9hZC1jc3Yud29ya2VyJywgaW1wb3J0Lm1ldGEudXJsKSlcbiAgICogQHBhcmFtIHdvcmtlciBXZWIgd29ya2VyIG9iamVjdFxuICAgKiBAcGFyYW0gaW5wdXREYXRhIERhdGEgYmVpbmcgcGFzc2VkIGludG8gd2ViIHdvcmtlclxuICAgKiBAcmV0dXJucyBEYXRhIGdvdHRlbiBmcm9tIHdlYiB3b3JrZXJcbiAgICovXG4gIHVzZVdlYldvcmtlcjxUID0gYW55Pih3b3JrZXI6IFdvcmtlciwgaW5wdXREYXRhOiBhbnksIGNvbmRpdGlvbnM/OiB7IHN0b3A6IChyZXMpID0+IGJvb2xlYW47IGVycm9yOiAocmVzKSA9PiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8VD4oKHN1YikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBXb3JrZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKGlucHV0RGF0YSk7XG4gICAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IChyKSA9PiB7XG4gICAgICAgICAgICAvLyBkZWJ1Z2dlclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gci5kYXRhO1xuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbnMpIHtcbiAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvbnMuZXJyb3IoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBzdWIuZXJyb3IoZGF0YSk7XG4gICAgICAgICAgICAgICAgc3ViLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmRpdGlvbnMuc3RvcChkYXRhKSkge1xuICAgICAgICAgICAgICAgIHN1Yi5uZXh0KGRhdGEpO1xuICAgICAgICAgICAgICAgIHN1Yi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdWIubmV4dChkYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3ViLm5leHQoZGF0YSBhcyBhbnkpO1xuICAgICAgICAgICAgICBzdWIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgJ25vV29ya2VyJztcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgc3ViLmVycm9yKGUpO1xuICAgICAgICBzdWIuY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICB0cmltID1cbiAgICAobGVuZ3RoID0gMTUpID0+XG4gICAgKHRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT5cbiAgICAgIHRleHQgJiYgdGV4dC5sZW5ndGggPiBsZW5ndGggPyB0ZXh0LnNsaWNlKDAsIGxlbmd0aCkgOiB0ZXh0ITtcbiAgYXN5bmMgYXJyYXlUb0NTVihkYXRhOiBhbnlbXSwgZmlsZW5hbWU6IHN0cmluZywgaGVhZGVyTWFwPzogVGFibGVDb2xbXSwgZXh0cmFDb25maWc/OiB7IHByZWZpeD86IHN0cmluZzsgaGlkZUhlYWRlcj86IGJvb2xlYW4gfSkge1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGxldCBfZGF0YTogYW55W107XG4gICAgY29uc3QgaGVhZGVyTWFwV2l0aEZvcm1hdHRlcnM6IFRhYmxlQ29sW10gPSBoZWFkZXJNYXA/LmZpbHRlcigoeCkgPT4geC5mb3JtYXR0ZXIgfHwgeC5mb3JtYXR0ZXJSb3cpIHx8IHVuZGVmaW5lZDtcbiAgICBpZiAoaGVhZGVyTWFwV2l0aEZvcm1hdHRlcnM/Lmxlbmd0aCkge1xuICAgICAgX2RhdGEgPSBjbG9uZURlZXAoZGF0YSk7XG4gICAgICBmb3IgKGNvbnN0IGZvcm1hdHRlciBvZiBoZWFkZXJNYXBXaXRoRm9ybWF0dGVycykge1xuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBfZGF0YSkge1xuICAgICAgICAgIHJvd1tmb3JtYXR0ZXIuZl0gPSBmb3JtYXR0ZXIuZm9ybWF0dGVyID8gYXdhaXQgZm9ybWF0dGVyLmZvcm1hdHRlcihyb3dbZm9ybWF0dGVyLmZdKSA6IGZvcm1hdHRlci5mb3JtYXR0ZXJSb3cocm93KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBfZGF0YSA9IGRhdGE7XG4gICAgfVxuICAgIGNvbnN0IHNob3dIZWFkZXIgPSAhZXh0cmFDb25maWc/LmhpZGVIZWFkZXI7XG4gICAgbGV0IGNzdiA9IFBhcGEudW5wYXJzZShfZGF0YSwge1xuICAgICAgaGVhZGVyOiBzaG93SGVhZGVyICYmICFoZWFkZXJNYXA/Lmxlbmd0aCxcbiAgICAgIGNvbHVtbnM6IGhlYWRlck1hcD8ubWFwKCh4KSA9PiB4LmY/LnRvU3RyaW5nKCkpIHx8IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICB0aGlzLmRvd25sb2FkZXIoXG4gICAgICAoZXh0cmFDb25maWc/LnByZWZpeCA/IGV4dHJhQ29uZmlnPy5wcmVmaXggKyAnXFxyXFxuJyA6ICcnKSArXG4gICAgICAgIChoZWFkZXJNYXA/Lmxlbmd0aCA/IGhlYWRlck1hcC5tYXAoKGZpZWxkTmFtZSkgPT4gZmllbGROYW1lLnQpLmpvaW4oJywnKSArIGBcXHJcXG5gIDogJycpICtcbiAgICAgICAgY3N2LFxuICAgICAgZmlsZW5hbWU/LmVuZHNXaXRoKCcuY3N2JykgPyBmaWxlbmFtZSA6IGZpbGVuYW1lICsgJy5jc3YnLFxuICAgICk7XG5cbiAgICB0aGlzLmluZm8oYERvd25sb2FkZWQgJHtmaWxlbmFtZX1gKTtcbiAgfVxuXG4gIGpvaW5DU1ZSb3dzKC4uLkNTVnM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIENTVnMuam9pbignXFxyXFxuJyk7XG4gIH1cbiAgYXN5bmMgYXJyYXlUb0NTVlN0cmluZzxUID0gYW55PihkYXRhOiBUW10sIGhlYWRlck1hcD86IFRhYmxlQ29sPFQ+W10sIGV4dHJhQ29uZmlnPzogeyBwcmVmaXg/OiBzdHJpbmc7IGhpZGVIZWFkZXI/OiBib29sZWFuIH0pIHtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICBsZXQgX2RhdGE6IGFueVtdO1xuICAgIGNvbnN0IGhlYWRlck1hcFdpdGhGb3JtYXR0ZXJzOiBUYWJsZUNvbFtdID0gaGVhZGVyTWFwPy5maWx0ZXIoKHgpID0+IHguZm9ybWF0dGVyIHx8IHguZm9ybWF0dGVyUm93KSB8fCB1bmRlZmluZWQ7XG4gICAgaWYgKGhlYWRlck1hcFdpdGhGb3JtYXR0ZXJzPy5sZW5ndGgpIHtcbiAgICAgIF9kYXRhID0gY2xvbmVEZWVwKGRhdGEpO1xuICAgICAgZm9yIChjb25zdCBmb3JtYXR0ZXIgb2YgaGVhZGVyTWFwV2l0aEZvcm1hdHRlcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCByb3cgb2YgX2RhdGEpIHtcbiAgICAgICAgICByb3dbZm9ybWF0dGVyLmZdID0gZm9ybWF0dGVyLmZvcm1hdHRlciA/IGF3YWl0IGZvcm1hdHRlci5mb3JtYXR0ZXIocm93W2Zvcm1hdHRlci5mXSkgOiBmb3JtYXR0ZXIuZm9ybWF0dGVyUm93KHJvdyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgX2RhdGEgPSBkYXRhO1xuICAgIH1cbiAgICBjb25zdCBzaG93SGVhZGVyID0gIWV4dHJhQ29uZmlnPy5oaWRlSGVhZGVyO1xuICAgIGxldCBjc3YgPSBQYXBhLnVucGFyc2UoX2RhdGEsIHtcbiAgICAgIGhlYWRlcjogc2hvd0hlYWRlciAmJiAhaGVhZGVyTWFwPy5sZW5ndGgsXG4gICAgICBjb2x1bW5zOiBoZWFkZXJNYXA/Lm1hcCgoeCkgPT4geC5mPy50b1N0cmluZygpKSB8fCB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIChcbiAgICAgIChleHRyYUNvbmZpZz8ucHJlZml4ID8gZXh0cmFDb25maWc/LnByZWZpeCArICdcXHJcXG4nIDogJycpICtcbiAgICAgIChoZWFkZXJNYXA/Lmxlbmd0aCA/IGhlYWRlck1hcC5tYXAoKGZpZWxkTmFtZSkgPT4gZmllbGROYW1lLnQpLmpvaW4oJywnKSArIGBcXHJcXG5gIDogJycpICtcbiAgICAgIGNzdlxuICAgICk7XG4gIH1cblxuICBpc0RhdGVWYWx1ZSA9ICh2KSA9PiAodiA/IHZbNF0gPT0gJy0nICYmIHZbN10gPT0gJy0nIDogZmFsc2UpO1xuICBpc0RhdFRpbWVWYWx1ZSA9ICh2KSA9PiAodiA/IHYuaW5jbHVkZXMoJ1QnKSAmJiB2WzRdID09ICctJyAmJiB2WzddID09ICctJyA6IGZhbHNlKTtcblxuICB5ZXNOb0NlbGxGb3JtYXR0ZXJDb2xvdXJlZCA9ICh2KSA9PiBgPHNwYW4gY2xhc3M9JyR7diA/ICdzdWNjZXNzQ2VsbCcgOiAnaW5lcnRDZWxsJ30nPiR7diA/ICdZZXMnIDogdiA9PSBmYWxzZSA/ICdObycgOiAnLSd9PC9zcGFuPmA7XG4gIHllc05vQ2VsbEZvcm1hdHRlciA9ICh2KSA9PiBgJHt2ID8gJ1llcycgOiAnTm8nfWA7XG4gIHN0YXR1c0NlbGxGb3JtYXR0ZXIgPSAoc3RhdHVzOiBTdGF0dXMpID0+XG4gICAgYDxzcGFuIGNsYXNzPScke3N0YXR1cyA9PSAnQ09NUExFVEVEJyA/ICdzdWNjZXNzQ2VsbCcgOiBzdGF0dXMgPT0gJ1BFTkRJTkcnID8gJ3BlbmRpbmdDZWxsJyA6ICdpbmVydENlbGwnfSc+JHtzdGF0dXMgfHwgJy0nfTwvc3Bhbj5gO1xuXG4gIGNlbGxTdGF0dXNGb3JtYXR0ZXIgPVxuICAgIDxUID0gYW55PihndWlkZTogeyBzdWNjZXNzVmFsPzogVDsgcGVuZGluZ1ZhbD86IFQ7IGVycm9yVmFsPzogVDsgaW5lcnRWYWw/OiBUIH0pID0+XG4gICAgKHYpID0+XG4gICAgICBgPHNwYW4gY2xhc3M9JyR7XG4gICAgICAgIHYgPT0gZ3VpZGUuc3VjY2Vzc1ZhbCA/ICdzdWNjZXNzQ2VsbCcgOiB2ID09IGd1aWRlLnBlbmRpbmdWYWwgPyAncGVuZGluZ0NlbGwnIDogdiA9PSBndWlkZS5lcnJvclZhbCA/ICdlcnJvckNlbGwnIDogJ2luZXJ0Q2VsbCdcbiAgICAgIH0nPiR7dn08L3NwYW4+YDtcblxuICBnZW5lcmF0ZVVVSUQoKSB7XG4gICAgbGV0IGQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBsZXQgZDIgPSAodHlwZW9mIHBlcmZvcm1hbmNlICE9PSAndW5kZWZpbmVkJyAmJiBwZXJmb3JtYW5jZS5ub3cgJiYgcGVyZm9ybWFuY2Uubm93KCkgKiAxMDAwKSB8fCAwOyAvL1RpbWUgaW4gbWljcm9zZWNvbmRzIHNpbmNlIHBhZ2UtbG9hZCBvciAwIGlmIHVuc3VwcG9ydGVkXG4gICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgKGMpID0+IHtcbiAgICAgIGxldCByID0gTWF0aC5yYW5kb20oKSAqIDE2OyAvL3JhbmRvbSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxNlxuICAgICAgaWYgKGQgPiAwKSB7XG4gICAgICAgIC8vVXNlIHRpbWVzdGFtcCB1bnRpbCBkZXBsZXRlZFxuICAgICAgICByID0gKGQgKyByKSAlIDE2IHwgMDtcbiAgICAgICAgZCA9IE1hdGguZmxvb3IoZCAvIDE2KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vVXNlIG1pY3Jvc2Vjb25kcyBzaW5jZSBwYWdlLWxvYWQgaWYgc3VwcG9ydGVkXG4gICAgICAgIHIgPSAoZDIgKyByKSAlIDE2IHwgMDtcbiAgICAgICAgZDIgPSBNYXRoLmZsb29yKGQyIC8gMTYpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChjID09PSAneCcgPyByIDogKHIgJiAweDMpIHwgMHg4KS50b1N0cmluZygxNik7XG4gICAgfSk7XG4gIH1cblxuICBpbmZvOiAodGV4dDogc3RyaW5nLCBzdGF0dXM/OiAwIHwgMiB8IDEsIGhlYWRpbmc/OiBzdHJpbmcsIGJ0bnM/OiBJSW5mb0RpYWxvZ0J0bltdLCBkaXNhYmxlQ2xvc2U/OiBib29sZWFuKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBkZWJvdW5jZXIgPSB0aGlzLmRlYm91bmNlclNlcnZpY2UuZGVib3VuY2VyO1xuXG4gIGFzeW5jVmFsaWRhdGlvbiA9IHRoaXMuZGVib3VuY2VyU2VydmljZS5hc3luY1ZhbGlkYXRpb247XG5cbiAgc3RhcnRQbCA9IHRoaXMucFMuc3RhcnRQbDtcbiAgc3RvcFBsID0gdGhpcy5wUy5zdG9wUGw7XG5cbiAgY3JlYXRlU3Vic2NyaXB0aW9uTWFuYWdlciA9ICguLi5zdWJzOiBTdWJzY3JpcHRpb25bXSkgPT4ge1xuICAgIGxldCBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBzdWJzIHx8IFtdO1xuICAgIGNvbnN0IGNsZWFyID0gKCkgPT4ge1xuICAgICAgX3N1YnMuZm9yRWFjaCgoeCkgPT4geC51bnN1YnNjcmliZSgpKTtcbiAgICAgIF9zdWJzID0gW107XG4gICAgfTtcbiAgICBjb25zdCBwdXNoID0gKC4uLnN1YnM6IFN1YnNjcmlwdGlvbltdKSA9PiB7XG4gICAgICBfc3Vicy5wdXNoKC4uLnN1YnMpO1xuICAgIH07XG5cbiAgICByZXR1cm4geyBjbGVhciwgcHVzaCwgc3ViczogKCkgPT4gX3N1YnMgfTtcbiAgfTtcblxuICBjcmVhdGVDYWNoZU1hbmFnZXIgPSAoKSA9PiB7XG4gICAgbGV0IF9jYWNoZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGNvbnN0IGNsZWFyID0gKCkgPT4ge1xuICAgICAgX2NhY2hlID0ge307XG4gICAgfTtcbiAgICBjb25zdCBkcm9wID0gKCkgPT4ge1xuICAgICAgX2NhY2hlID0gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgY29uc3Qgc2F2ZSA9IChrZXk6IHN0cmluZywgZGF0YTogYW55KSA9PiB7XG4gICAgICBpZiAoIV9jYWNoZSkgX2NhY2hlID0ge307XG4gICAgICBfY2FjaGVba2V5XSA9IGRhdGE7XG4gICAgfTtcbiAgICBjb25zdCBnZXQgPSA8VD4oa2V5OiBzdHJpbmcpID0+IF9jYWNoZT8uW2tleV0gYXMgVDtcblxuICAgIHJldHVybiB7IGNsZWFyLCBkcm9wLCBnZXQsIHNhdmUsIGNhY2hlOiAoKSA9PiBfY2FjaGUgfTtcbiAgfTtcblxuICB0cmFja0J5Q3VzdG9tSUQgPSAoaW5kZXgsIGl0ZW0pID0+IHtcbiAgICBpZiAoIWl0ZW1bdGhpcy5jdXN0b21JREZpZWxkXSkge1xuICAgICAgaXRlbVt0aGlzLmN1c3RvbUlERmllbGRdID0gdGhpcy5nZW5lcmF0ZVVVSUQoKTtcbiAgICAgIGNvbnNvbGUubG9nKCdzZXQgY3VzdG9tIGlkJyk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtW3RoaXMuY3VzdG9tSURGaWVsZF07XG4gIH07XG4gIHRyYWNrQnlGb3JGb3JtcyA9IChpbmRleCwgaXRlbTogRm9ybUdyb3VwKSA9PiB7XG4gICAgaWYgKCFpdGVtLmNvbnRyb2xzW3RoaXMuY3VzdG9tSURGaWVsZF0pIGl0ZW0uYWRkQ29udHJvbCh0aGlzLmN1c3RvbUlERmllbGQsIG5ldyBGb3JtQ29udHJvbCh0aGlzLmdlbmVyYXRlVVVJRCgpKSk7XG4gICAgcmV0dXJuIGl0ZW0uY29udHJvbHNbdGhpcy5jdXN0b21JREZpZWxkXS52YWx1ZTtcbiAgfTtcbiAgb2JqZWN0VG9Gb3JtR3JvdXAgPSA8VD4oZGF0YTogVCkgPT4ge1xuICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybUdyb3VwPElTdHJpY3RGb3JtR3JvdXA8VD4+KHt9IGFzIGFueSk7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpKSBmb3JtLmFkZENvbnRyb2woa2V5LCBuZXcgRm9ybUNvbnRyb2woZGF0YVtrZXldKSk7XG4gICAgcmV0dXJuIGZvcm07XG4gIH07XG5cbiAgZm9ybVNjaGVtYVRvRm9ybUdyb3VwID0gPFQgZXh0ZW5kcyB7IFt4OiBzdHJpbmddOiBhbnkgfT4oc2NoZW1hOiBJRm9ybVNjaGVtYVtdLCBkYXRhPzogVCkgPT4ge1xuICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybUdyb3VwPElTdHJpY3RGb3JtR3JvdXA8VD4+KHt9IGFzIGFueSk7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHNjaGVtYSkgZm9ybS5hZGRDb250cm9sKGl0ZW0uZmllbGQudG9TdHJpbmcoKSwgbmV3IEZvcm1Db250cm9sKGRhdGFbaXRlbS5maWVsZC50b1N0cmluZygpXSkpO1xuICAgIHJldHVybiBmb3JtO1xuICB9O1xuXG4gIHRpbWVDb2RlQmxvY2sgPSA8VD4obGFiZWw6IHN0cmluZywgY2I6ICgpID0+IFQpID0+IHtcbiAgICBjb25zdCBzdGFydFRJbWUgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJlcyA9IGNiKCk7XG4gICAgY29uc3QgZW5kVGltZSA9IERhdGUubm93KCk7XG4gICAgY29uc29sZS5sb2cobGFiZWwsIHN0YXJ0VEltZSwgZW5kVGltZSwgKGVuZFRpbWUgLSBzdGFydFRJbWUpIC8gMTAwMCArICdzZWMnKTtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBEZWxldGUgbnVsbCBvciB1bmRlZmluZWQgZmllbGRzIGZyb20gYW4gb2JqZWN0XG4gICAqIEBwYXJhbSBvYmogT2JqZWN0IHRvIGRlbGV0ZSBmcm9tXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBkZWxldGVOdWxsID0gPFQ+KG9iajogVCkgPT4ge1xuICAgIGNvbnN0IHJldDogVCA9IHt9IGFzIGFueTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChvYmpba2V5XSA9PT0gbnVsbCB8fCBvYmpba2V5XSA9PT0gdW5kZWZpbmVkIHx8IG9ialtrZXldID09PSAnJykgY29udGludWU7XG4gICAgICBlbHNlIHJldFtrZXldID0gb2JqW2tleV07XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRpbWVzdGFtcCBpbnRvIGhyLG1pbixzZWNcbiAgICogQHBhcmFtIHRpbWVUYWtlbiBUaW1lIHRha2VuIGluIHRpbWVzdGFtcFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZm9ybWF0VGltZVRha2VuID0gKHRpbWVUYWtlbjogbnVtYmVyKSA9PiB7XG4gICAgaWYgKHRpbWVUYWtlbiA9PSBudWxsKSByZXR1cm4gJyc7XG4gICAgY29uc3QgdGltZUxlZnQgPSB0aGlzLnNlY29uZHNUb0hvdXJNaW5TZWMoTWF0aC5yb3VuZCh0aW1lVGFrZW4gLyAxMDAwKSB8fCAxKTtcbiAgICByZXR1cm4gKFxuICAgICAgKHRpbWVMZWZ0LmhvdXJzID8gdGltZUxlZnQuaG91cnMgKyAnaHInIDogJycpICsgKHRpbWVMZWZ0Lm1pbnMgPyB0aW1lTGVmdC5taW5zICsgJ21pbicgOiAnJykgKyAodGltZUxlZnQuc2VjcyA/IHRpbWVMZWZ0LnNlY3MgKyAnc2VjJyA6ICcnKVxuICAgICk7XG4gIH07XG59XG4iXX0=
841
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NlcnZpY2VzL3V0aWxpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9GLE9BQU8sRUFBVSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxJQUFJLFNBQVMsRUFBc0MsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RyxPQUFPLEVBQUUsV0FBVyxJQUFJLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFvQixjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsMkJBQTJCLElBQUksR0FBRyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckUsT0FBTyxHQUFHLE1BQU0sa0JBQWtCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFzQyxNQUFNLDhCQUE4QixDQUFDO0FBQ25HLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUlMLFdB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IExvY2F0aW9uLCBUaXRsZUNhc2VQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZyBhcyBNYXREaWFsb2csIE1hdERpYWxvZ0NvbmZpZyBhcyBNYXREaWFsb2dDb25maWcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgYXMgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFJvdXRlciwgTmF2aWdhdGlvbkV4dHJhcywgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRVRTUmVhY3RpdmVGb3JtSW5wdXRTZXJ2aWNlIGFzIElTMSB9IGZyb20gJy4vaW5wdXQuc2VydmljZSc7XG5pbXBvcnQgamZkIGZyb20gJ2pzLWZpbGUtZG93bmxvYWQnO1xuaW1wb3J0IHsgUGFnZUxvYWRlclNlcnZpY2UgfSBmcm9tICcuL3BhZ2UtbG9hZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZmlnLCBDb25maWcgYXMgY29uZmlnIH0gZnJvbSAnLi4vY29uZmlncy9pbmRleC5jb25maWcnO1xuaW1wb3J0IHsgQXBwUm91dGVCYXNlIH0gZnJvbSAnLi4vU2hhcmVkL21vZGVscy9Sb3V0ZUl0ZW0uY2xhc3MnO1xuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBFVmFsaWRhdGlvblR5cGUsIElTdHJpY3RGb3JtR3JvdXAsIFN0YXR1cywgVGFibGVDb2wgfSBmcm9tICcuLi9TaGFyZWQvbW9kZWxzL2luZGV4Lm1vZGVsJztcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbmltcG9ydCB7IFBhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9wYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBBc3luY1ZhbGlkYXRvckZuLFxuICBGb3JtQXJyYXksXG4gIEZvcm1CdWlsZGVyLFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUNvbnRyb2xPcHRpb25zLFxuICBGb3JtR3JvdXAsXG4gIFVudHlwZWRGb3JtQXJyYXksXG4gIFZhbGlkYXRvckZuLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vUmV1c2FibGVzL3JldXNhYmxlLXBhZ2VzL2xvZ2dlci9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIGlzT2JzZXJ2YWJsZSwgbGFzdFZhbHVlRnJvbSwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBSZXBsYXlTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVFVFNQYWdlQnRuSUQgfSBmcm9tICcuLi9TaGFyZWQvbW9kZWxzL0lNZW51SXRlbSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFNES0Vudmlyb25tZW50IH0gZnJvbSAnLi4vU2hhcmVkL21vZGVscy9lbnZpcm9ubWVudC5tb2RlbCc7XG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQgeyBEZWJvdW5jZXJTZXJ2aWNlIH0gZnJvbSAnLi9kZWJvdW5jZXIuc2VydmljZSc7XG5pbXBvcnQgeyBJRm9ybVNjaGVtYSB9IGZyb20gJy4uL1NoYXJlZC9jb21wb25lbnRzL2Zvcm0tZ2VuZXJhdG9yL2Zvcm0tZ2VuZXJhdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgUGFwYSBmcm9tICdwYXBhcGFyc2UnO1xuaW1wb3J0IHsgSUluZm9EaWFsb2dCdG4gfSBmcm9tICcuLi9TaGFyZWQvY29tcG9uZW50cy9pbmZvLWRpYWxvZy9pbmZvLWRpYWxvZy5jb21wb25lbnQnO1xuZGVjbGFyZSBjb25zdCAkOiBhbnk7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgVXRpbGl0eVNlcnZpY2U8VEVudmlyb25tZW50IGV4dGVuZHMgU0RLRW52aXJvbm1lbnQgPSBTREtFbnZpcm9ubWVudD4ge1xuICByOiBBcHBSb3V0ZUJhc2U7XG4gIGRvd25sb2FkZXIgPSBqZmQ7XG4gIGVWYWxpZGF0aW9uVHlwZSA9IEVWYWxpZGF0aW9uVHlwZTtcbiAgY29uZmlnID0gQ29uZmlnO1xuICBlbnZpcm9ubWVudDogVEVudmlyb25tZW50ID0gZW52aXJvbm1lbnQgYXMgYW55O1xuICBwYmlkID0gRUVUU1BhZ2VCdG5JRDtcbiAgJDogYW55O1xuICBpc01vYmlsZTogYm9vbGVhbjtcbiAgaXNNb2JpbGVTaWduYWwgPSBzaWduYWw8Ym9vbGVhbj4odW5kZWZpbmVkKTtcbiAgcGFnZVNpemVPcHRpb25zID0gWzUsIDEwLCAxNSwgMjAsIDUwLCAxMDAsIDIwMCwgNTAwLCAxMDAwXTtcbiAgZGF0ZVBpcGVEYXRlID0gJ0VFLCBNTU1NIGQsIHknO1xuICBkYXRlUGlwZURhdGVMZWFuID0gJ0VFLCBNTU0gZCwgeSc7XG4gIGRhdGVQaXBlRGF0ZVRpbWVMZWFuID0gJ0VFLCBNTU0gZCwgeSBoaDptbSBhJztcbiAgcmVhZG9ubHkgY3VzdG9tSURGaWVsZCA9ICdfX2lkJztcbiAgcmVhZG9ubHkgZGVsaW1pdGVyID0gYH5+fi8vfn5+YDtcbiAgZm9ybUJ1aWxkZXIgPSBuZXcgRm9ybUJ1aWxkZXIoKS5ub25OdWxsYWJsZTtcbiAgLyoqXG4gICAqIEVtaXRzIHRydWUgaWYgbW9iaWxlXG4gICAqL1xuICBtb2JpbGVRdWVyeUNoYW5nZWQgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigpO1xuICBwdWJsaWMgZGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XG4gIHB1YmxpYyBzbmFja0JhciA9IGluamVjdChNYXRTbmFja0Jhcik7XG4gIHB1YmxpYyByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHVibGljIHRpdGxlUyA9IGluamVjdChUaXRsZSk7XG4gIHB1YmxpYyBsb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XG4gIHB1YmxpYyBpbnB1dFNlcnZpY2UgPSBpbmplY3QoSVMxKTtcbiAgcHVibGljIHBTID0gaW5qZWN0KFBhZ2VMb2FkZXJTZXJ2aWNlKTtcbiAgcHVibGljIGN1cnJlbmN5UGlwZSA9IGluamVjdChDdXJyZW5jeVBpcGUpO1xuICBwdWJsaWMgdGl0bGVDYXNlUGlwZSA9IGluamVjdChUaXRsZUNhc2VQaXBlKTtcbiAgcHVibGljIGxvZ2dlclNlcnZpY2UgPSBpbmplY3QoTG9nZ2VyU2VydmljZSk7XG4gIHB1YmxpYyBwYWdlUyA9IGluamVjdChQYWdlU2VydmljZSk7XG4gIHB1YmxpYyByZXNwb25zaXZlID0gaW5qZWN0KEJyZWFrcG9pbnRPYnNlcnZlcik7XG4gIHB1YmxpYyBkYXRlUGlwZSA9IGluamVjdChEYXRlUGlwZSk7XG4gIHB1YmxpYyBkZWJvdW5jZXJTZXJ2aWNlID0gaW5qZWN0KERlYm91bmNlclNlcnZpY2UpO1xuICBwdWJsaWMgbnVtYmVyUGlwZSA9IGluamVjdChEZWNpbWFsUGlwZSk7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucmVzcG9uc2l2ZS5vYnNlcnZlKFtCcmVha3BvaW50cy5IYW5kc2V0UG9ydHJhaXRdKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgY29uc3QgYnJlYWtwb2ludHMgPSByZXN1bHQuYnJlYWtwb2ludHM7XG5cbiAgICAgIGlmIChicmVha3BvaW50c1tCcmVha3BvaW50cy5IYW5kc2V0UG9ydHJhaXRdKSB7XG4gICAgICAgIHRoaXMuaXNNb2JpbGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzTW9iaWxlU2lnbmFsLnNldCh0cnVlKTtcbiAgICAgICAgdGhpcy5tb2JpbGVRdWVyeUNoYW5nZWQubmV4dCh0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNNb2JpbGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc01vYmlsZVNpZ25hbC5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLm1vYmlsZVF1ZXJ5Q2hhbmdlZC5uZXh0KGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBpZiAoJCkgdGhpcy4kID0gJDtcbiAgfVxuICBmb3JtQ29udHJvbCA9IDxUPihcbiAgICB2YWx1ZT86IFQgfCBudWxsLFxuICAgIHZhbGlkYXRvck9yT3B0cz86IFZhbGlkYXRvckZuIHwgVmFsaWRhdG9yRm5bXSB8IEZvcm1Db250cm9sT3B0aW9ucyxcbiAgICBhc3luY1ZhbGlkYXRvcj86IEFzeW5jVmFsaWRhdG9yRm4gfCBBc3luY1ZhbGlkYXRvckZuW10sXG4gICkgPT4gW3ZhbHVlIGFzIGFueSBhcyBULCB2YWxpZGF0b3JPck9wdHMhLCBhc3luY1ZhbGlkYXRvciFdO1xuXG4gIGJhY2sgPSAoKSA9PiB0aGlzLmxvY2F0aW9uLmJhY2soKTtcblxuICBvbmx5T25lSW5wdXQoaW5wdXRzOiBGb3JtQ29udHJvbFtdKSB7XG4gICAgY29uc3QgbklucHV0cyA9IGlucHV0cz8ubWFwKChpbnApID0+ICh7IGlkOiB0aGlzLmdlblJhbmRvbUlELCBpbnAgfSkpIHx8IFtdO1xuICAgIHJldHVybiBtZXJnZSguLi5uSW5wdXRzLm1hcCgoaSkgPT4gaS5pbnAudmFsdWVDaGFuZ2VzLnBpcGUobWFwKCh2YWwpID0+ICh7IGlkOiBpLmlkLCB2YWwgfSkpKSkpLnN1YnNjcmliZSgocikgPT4ge1xuICAgICAgLy8gZGVidWdnZXJcbiAgICAgIGlmIChyLnZhbCkgbklucHV0cy5maWx0ZXIoKHgpID0+IHguaWQgIT0gci5pZCkuZm9yRWFjaCgoeCkgPT4geC5pbnAuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSkpO1xuICAgICAgZWxzZSBuSW5wdXRzLmZpbHRlcigoeCkgPT4geC5pZCAhPSByLmlkKS5mb3JFYWNoKCh4KSA9PiB4LmlucC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNvcHlQYXlsb2FkKHBheWxvYWQpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCg8U0RLRW52aXJvbm1lbnQ+dGhpcy5lbnZpcm9ubWVudCkuZGVidWcpIHtcbiAgICAgICAgY29uc3QgZWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgICAgIGVsZW0udmFsdWUgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtKTtcbiAgICAgICAgZWxlbS5zZWxlY3QoKTtcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbGVtKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbiAgfVxuICB4T3JZID0gKHgsIHkgPSAnLScpID0+IGAke3ggPT0gbnVsbCA/IHkgOiB4fWA7XG4gIHRvVGl0bGVDYXNlKHRleHQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnRpdGxlQ2FzZVBpcGUudHJhbnNmb3JtKHRleHQpO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0IERhdGUgc3RyaW5nIHRvIERhdGUgVGltZSBzdHJpbmdcbiAgICogQHBhcmFtIGRhdGVTdHIgRGF0ZSBzdHJpbmdcbiAgICogQGV4YW1wbGUgJzIwMjItMDEtMjUnXG4gICAqIEBwYXJhbSBjb25maWcgQ29uZmlndXJhdGlvbiBmb3IgdGhlIGNvbnZlcnNpb25cbiAgICogQHJldHVybnMgUmV0dXJucyBhIERhdGUgVGltZSBzdHJpbmdcbiAgICogQGV4YW1wbGUgJzIwMjItMDEtMjVUMDA6MDA6MDBaJyBvciAnMjAyMi0wMS0yNSAwMDowMDowMCdcbiAgICovXG4gIGRhdGVUb0RhdGVUaW1lID0gKFxuICAgIGRhdGVTdHI6IHN0cmluZyxcbiAgICBjb25maWc/OiB7XG4gICAgICAvKipcbiAgICAgICAqIFVzZSB0aGUgeXl5eS1tbS1kZCBoaDptbTpzcyBmb3JtYXRcbiAgICAgICAqL1xuICAgICAgb21pdFQ/OiBib29sZWFuO1xuICAgICAgLyoqVGltZSB0byBhcHBlbmQgdG8gZGF0ZS4gQGV4YW1wbGUgYDEyOjAwOjAwWmAgKi9cbiAgICAgIHRpbWU/OiBzdHJpbmc7XG4gICAgfSxcbiAgKSA9PiB7XG4gICAgcmV0dXJuICFkYXRlU3RyXG4gICAgICA/IG51bGxcbiAgICAgIDogZGF0ZVN0clsxMF0gPT0gJ1QnXG4gICAgICAgID8gZGF0ZVN0clxuICAgICAgICA6IGRhdGVTdHIgKyAoISFjb25maWc/Lm9taXRUID8gYCAke2NvbmZpZz8udGltZSB8fCAnMDA6MDA6MDAnfWAgOiBgVCR7Y29uZmlnPy50aW1lIHx8ICcwMDowMDowMFonfWApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgYW4gT2JqZWN0J3MgZmllbGQgaWYgdGhlIG9iamVjdCBleGlzdHMgb3IgZG9uJ3QgaWYgdGhlIG9iamVjdCBkb2Vzbid0XG4gICAqIEBwYXJhbSBvYmogT2JqZWN0IGhvbGRpbmcgdGhlIGZpZWxkXG4gICAqIEBwYXJhbSBmaWVsZE5hbWUgTmFtZSBvZiB0aGUgZmllbGQgdG8gc2V0XG4gICAqIEBwYXJhbSB2YWwgVmFsdWUgdG8gc2V0IHRoZSBmaWVsZCB3aXRoXG4gICAqIEByZXR1cm5zIFJldHVybnMgdGhlIG9iamVjdCBob2xkaW5nIHRoZSBkYXRhXG4gICAqL1xuICBzZXR0ZXJXaXRoTnVsbDxUPihvYmo6IFQsIGt2cHM6IFBhcnRpYWw8VD4pIHtcbiAgICBpZiAoIW9iaikgcmV0dXJuIG51bGw7XG4gICAgZm9yIChjb25zdCBrZXkgaW4ga3Zwcykge1xuICAgICAgb2JqW2tleV0gPSBrdnBzW2tleV07XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICAvKipcbiAgICogKFNldCBhbiBPYmplY3QncyBmaWVsZCBpZiB0aGUgb2JqZWN0IGV4aXN0cyBvciBkb24ndCBpZiB0aGUgb2JqZWN0IGRvZXNuJ3QpIGZvciBtdWx0aXBsZSBlbnRyaWVzXG4gICAqIEBwYXJhbSBpdGVtcyBBcnJheSBvZiBvYmplY3RzIGFuZCB0aGVpciBtb2RpZmljYXRpb25zXG4gICAqL1xuICBzZXR0ZXJXaXRoTnVsbEFycmF5PFQ+KGl0ZW1zOiB7IG9iajogVDsga3ZwczogUGFydGlhbDxUPiB9W10pIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIHRoaXMuc2V0dGVyV2l0aE51bGwoaXRlbS5vYmosIGl0ZW0ua3Zwcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGRlbGV0aW9uIG9mIHJvd3MgZnJvbSBhIEZvcm1BcnJheVxuICAgKiBAcGFyYW0gaW5kZXggSW5kZXggb2YgdGhlIHJvdyB0byBkZWxldGVcbiAgICogQHBhcmFtIGZhIFRoZSBGb3JtQXJyYXkgdGhhdCBob2xkcyB0aGUgcm93c1xuICAgKiBAcGFyYW0gZGVsZXRlU2VydmljZSBUaGUgZGVsZXRpb24gc2VydmljZSB0byBiZSBjYWxsZWQgKEl0IHNob3VsZCBiZSBhbiBhbm9ueW1vdXMgZnVuY3Rpb24pXG4gICAqIEBwYXJhbSBhZGRSb3dGdW5jIFRoZSBmdW5jdGlvbiAoYW5vbnltb3VzKSB0aGF0IGFkZHMgYSBuZXcgcm93IHRvIHRoZSBGb3JtQXJyYXlcbiAgICogQHBhcmFtIGVtaXRFdmVudCBTcGVjaWZ5IHdoZXRoZXIgdG8gZW1pdCBhbiBldmVudCB3aGVuIG1hbmlwdWxhdGluZyB0aGUgRm9ybUFycmF5XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBoYW5kbGVGb3JtUm93RGVsZXRlID0gKFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgZmE6IFVudHlwZWRGb3JtQXJyYXksXG4gICAgZGVsZXRlU2VydmljZTogKC4uLmFyZ3MpID0+IFByb21pc2U8YW55PiB8IE9ic2VydmFibGU8YW55PixcbiAgICBhZGRSb3dGdW5jOiAoLi4uYXJncykgPT4gYW55LFxuICAgIGV4dHJhQ29uZmlnPzoge1xuICAgICAgZG9udEVtaXRFdmVudD86IGJvb2xlYW47XG4gICAgICBvbkRlbGV0ZT86IChyZXMpID0+IGFueTtcbiAgICB9LFxuICApID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgaWQgPSBjbG9uZURlZXAoZmEuY29udHJvbHNbaW5kZXhdPy52YWx1ZT8uaWQpO1xuICAgICAgLy8gZGVidWdnZXI7XG4gICAgICBpZiAoZmEuY29udHJvbHMubGVuZ3RoID09IDEgJiYgaWQpIHtcbiAgICAgICAgZmEucmVtb3ZlQXQoaW5kZXgsIHsgZW1pdEV2ZW50OiAhZXh0cmFDb25maWc/LmRvbnRFbWl0RXZlbnQgfSk7XG4gICAgICAgIGFkZFJvd0Z1bmMoKTtcbiAgICAgIH0gZWxzZSBpZiAoZmEuY29udHJvbHMubGVuZ3RoID4gMSkgZmEucmVtb3ZlQXQoaW5kZXgsIHsgZW1pdEV2ZW50OiAhZXh0cmFDb25maWc/LmRvbnRFbWl0RXZlbnQgfSk7XG4gICAgICBlbHNlIGlmIChmYS5jb250cm9scy5sZW5ndGggPT0gMSkgZmEuY29udHJvbHNbMF0ucmVzZXQoKTtcblxuICAgICAgaWYgKGlkICYmIGRlbGV0ZVNlcnZpY2UpIHtcbiAgICAgICAgY29uc3QgcmVxID0gZGVsZXRlU2VydmljZShpZCk7XG4gICAgICAgIGlmIChyZXFbJ3RvUHJvbWlzZSddKSB7XG4gICAgICAgICAgcmVzb2x2ZShsYXN0VmFsdWVGcm9tKHJlcSBhcyBPYnNlcnZhYmxlPGFueT4pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKHJlcSBhcyBhbnkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgfVxuICAgIH0pLnRoZW4oKHIpID0+IHtcbiAgICAgIGV4dHJhQ29uZmlnPy5vbkRlbGV0ZShyKTtcbiAgICAgIHJldHVybiByO1xuICAgIH0pO1xuICB9O1xuXG4gIG9wZW5IVE1MSW5GdWxsc2NyZWVuPFRNZXRhZGF0YT4oZWxlbTogSFRNTEVsZW1lbnQsIG1ldGFkYXRhPzogVE1ldGFkYXRhLCBvbkxlYXZlPzogKG1ldGFkYXRhOiBUTWV0YWRhdGEpID0+IGFueSkge1xuICAgIGlmIChlbGVtLnJlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICBlbGVtLm9uZnVsbHNjcmVlbmNoYW5nZSA9IChlKSA9PiB7XG4gICAgICAgIGlmIChvbkxlYXZlKVxuICAgICAgICAgIGVsZW0ub25mdWxsc2NyZWVuY2hhbmdlID0gKGUpID0+IHtcbiAgICAgICAgICAgIC8vICBkZWJ1Z2dlcjtcbiAgICAgICAgICAgIG9uTGVhdmUobWV0YWRhdGEpO1xuICAgICAgICAgIH07XG4gICAgICB9O1xuICAgICAgZWxlbS5yZXF1ZXN0RnVsbHNjcmVlbigpO1xuICAgIH0gZWxzZSBpZiAoZWxlbVsnd2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4nXSkge1xuICAgICAgLyogU2FmYXJpICovXG4gICAgICBlbGVtWyd3ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbiddKCk7XG4gICAgfSBlbHNlIGlmIChlbGVtWydtc1JlcXVlc3RGdWxsc2NyZWVuJ10pIHtcbiAgICAgIC8qIElFMTEgKi9cbiAgICAgIGVsZW1bJ21zUmVxdWVzdEZ1bGxzY3JlZW4nXSgpO1xuICAgIH1cbiAgfVxuICBjbG9zZUZ1bGxzY3JlZW4oKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChkb2N1bWVudC5leGl0RnVsbHNjcmVlbikge1xuICAgICAgICBkb2N1bWVudC5leGl0RnVsbHNjcmVlbigpO1xuICAgICAgfSBlbHNlIGlmIChkb2N1bWVudFsnd2Via2l0RXhpdEZ1bGxzY3JlZW4nXSkge1xuICAgICAgICAvKiBTYWZhcmkgKi9cbiAgICAgICAgZG9jdW1lbnRbJ3dlYmtpdEV4aXRGdWxsc2NyZWVuJ10oKTtcbiAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRbJ21zRXhpdEZ1bGxzY3JlZW4nXSkge1xuICAgICAgICAvKiBJRTExICovXG4gICAgICAgIGRvY3VtZW50Wydtc0V4aXRGdWxsc2NyZWVuJ10oKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge31cbiAgfVxuXG4gIGFkZFRvU3Vic1RvQ2xvc2VPblJvdXRlID0gKC4uLnN1YjogU3Vic2NyaXB0aW9uW10pID0+IHtcbiAgICBpZiAoIUNvbmZpZy5zdWJzVG9DbG9zZU9uUm91dGUpIENvbmZpZy5zdWJzVG9DbG9zZU9uUm91dGUgPSBbXTtcbiAgICBDb25maWcuc3Vic1RvQ2xvc2VPblJvdXRlLnB1c2goLi4uc3ViKTtcbiAgfTtcbiAgY2xlYXJTdWJzVG9DbG9zZU9uUm91dGUgPSAoKSA9PiB7XG4gICAgQ29uZmlnLnN1YnNUb0Nsb3NlT25Sb3V0ZT8uZm9yRWFjaCgoeCkgPT4geD8udW5zdWJzY3JpYmUoKSk7XG4gICAgQ29uZmlnLnN1YnNUb0Nsb3NlT25Sb3V0ZSA9IFtdO1xuICB9O1xuICAvKipcbiAgICogSGFuZGxlcyB0aGUgZGVsZXRpb24gb2Ygcm93cyBmcm9tIGFuIGFycmF5XG4gICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiB0aGUgcm93IHRvIGRlbGV0ZVxuICAgKiBAcGFyYW0gYXJyIFRoZSBhcnJheSB0aGF0IGhvbGRzIHRoZSByb3dzXG4gICAqIEBwYXJhbSBkZWxldGVTZXJ2aWNlIFRoZSBkZWxldGlvbiBzZXJ2aWNlIHRvIGJlIGNhbGxlZCAoSXQgc2hvdWxkIGJlIGFuIGFub255bW91cyBmdW5jdGlvbilcbiAgICogQHBhcmFtIGFkZFJvd0Z1bmMgVGhlIGZ1bmN0aW9uIChhbm9ueW1vdXMpIHRoYXQgYWRkcyBhIG5ldyByb3cgdG8gdGhlIGFycmF5XG4gICAqIEBwYXJhbSBjYiBUaGUgZnVuY3Rpb24gdG8gY2FsbGJhY2sgd2l0aCB0aGUgcmVzcG9uc2Ugb2YgdGhlIGRlbGV0aW9uIHNlcnZpY2UgYXMgdGhlIGlucHV0IHBhcmFtZXRlclxuICAgKi9cbiAgaGFuZGxlUm93RGVsZXRlID0gYXN5bmMgPFQ+KFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgYXJyOiBhbnlbXSxcbiAgICBkZWxldGVTZXJ2aWNlOiAoLi4uYXJncykgPT4gUHJvbWlzZTxUPiB8IE9ic2VydmFibGU8VD4sXG4gICAgYWRkUm93RnVuYzogKC4uLmFyZ3MpID0+IGFueSxcbiAgICBjYj86IChhbnkpID0+IGFueSxcbiAgKSA9PiB7XG4gICAgY29uc3QgaWQgPSBhcnJbaW5kZXhdPy5pZDtcbiAgICAvLyBkZWJ1Z2dlcjtcblxuICAgIGlmIChpZCAmJiBkZWxldGVTZXJ2aWNlKSB7XG4gICAgICBjb25zdCByZXEgPSBkZWxldGVTZXJ2aWNlKGlkKTtcbiAgICAgIGlmICh0eXBlb2YgcmVxWyd0b1Byb21pc2UnXSA9PSAnZnVuY3Rpb24nKSBjYiA/IGNiKGF3YWl0IHJlcVsndG9Qcm9taXNlJ10oKSkgOiByZXFbJ3RvUHJvbWlzZSddKCk7XG4gICAgICBlbHNlIGNiID8gY2IoYXdhaXQgcmVxKSA6IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGFyci5sZW5ndGggPT0gMSkge1xuICAgICAgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgICBhZGRSb3dGdW5jKCk7XG4gICAgfSBlbHNlIGlmIChhcnIubGVuZ3RoID4gMSkgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gIH07XG4gIC8qKlxuICAgKiBUbyBoYW5kbGUgdGhlIHBhdGNoaW5nIG9mIGEgRm9ybUFycmF5XG4gICAqIEBwYXJhbSBhcnIgVGhlIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIGRhdGFcbiAgICogQHBhcmFtIGFkZEZ1bmMgVGhlIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgYWRkaXRpb24gb2Ygc2luZ2xlIGVudHJpZXNcbiAgICogQHBhcmFtIGZvcm1BcnIgVGhlIEZvcm1BcnJheSB0aGF0IHdpbGwgaG9sZCB0aGUgYXJyYXkncyBkYXRhXG4gICAqL1xuICBpbml0UGF0Y2hGb3JtQXJyYXkgPSA8VD4oYXJyOiBUW10sIGFkZEZ1bmM6IChpOiBudW1iZXIsIGRhdGE/OiBULCBmb3JtQXJyPzogRm9ybUFycmF5KSA9PiB2b2lkLCBmb3JtQXJyOiBGb3JtQXJyYXkpID0+IHtcbiAgICAvLyBkZWJ1Z2dlclxuICAgIGZvcm1BcnI/LmNsZWFyKCk7XG4gICAgaWYgKGFycj8ubGVuZ3RoKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyKSB7XG4gICAgICAgIGFkZEZ1bmMoZm9ybUFyci5sZW5ndGgsIGl0ZW0sIGZvcm1BcnIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWZvcm1BcnIubGVuZ3RoKSBhZGRGdW5jKGZvcm1BcnIubGVuZ3RoLCBudWxsLCBmb3JtQXJyKTtcbiAgICB9XG4gIH07XG4gIHByaXZhdGUgaXNQcm9taXNlID0gKGZ1bmMpID0+IHtcbiAgICByZXR1cm4gdHlwZW9mIGZ1bmMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBmdW5jLnRoZW4gPT09ICdmdW5jdGlvbic7XG4gIH07XG4gIGlzQXN5bmMgPSAoZnVuYykgPT4ge1xuICAgIHJldHVybiBmdW5jLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdBc3luY0Z1bmN0aW9uJyB8fCAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicgJiYgdGhpcy5pc1Byb21pc2UoZnVuYygpKSk7XG4gIH07XG5cbiAgaXNPYnNlcnZhYmxlID0gPFQ+KGZ1bmMpID0+IHtcbiAgICAvLyByZXR1cm4gdHlwZW9mIGZ1bmMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBmdW5jLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJztcbiAgICAvLyByZXR1cm4gdHlwZW9mIGZ1bmMgPT09ICdvYmplY3QnICYmIGZ1bmMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlO1xuICAgIC8vIHJldHVybiB0eXBlb2YgZnVuYyA9PT0gJ29iamVjdCcgJiYgZnVuYyBpbnN0YW5jZW9mIE9ic2VydmFibGU8VD47XG4gICAgcmV0dXJuIHR5cGVvZiBmdW5jID09PSAnb2JqZWN0JyAmJiBpc09ic2VydmFibGUoZnVuYyk7XG4gICAgcmV0dXJuIHR5cGVvZiBmdW5jID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZnVuYy50b1Byb21pc2UgPT09ICdmdW5jdGlvbic7XG4gIH07XG4gIHByb21pc2lmeVZhbCA9IDxUPih2YWw6IFQgfCBQcm9taXNlPFQ+IHwgT2JzZXJ2YWJsZTxUPikgPT4ge1xuICAgIGlmICh0aGlzLmlzQXN5bmModmFsKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWwgYXMgUHJvbWlzZTxUPik7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzT2JzZXJ2YWJsZSh2YWwpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGxhc3RWYWx1ZUZyb20odmFsIGFzIE9ic2VydmFibGU8VD4pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWwgYXMgVCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gYXJyIEFycmF5IG9mIG9ic2VydmFibGVzIHRvIGZldGNoXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHRoZSByZXNwb25zZXMgbWVyZ2VkIHRvZ2V0aGVyLiBJdCBlbWl0cyB0aGUgbWVyZ2VkIHJlc3BvbnNlcyBhcyB0aGV5IGFyZSBmZXRjaGVkIGFuZCBjbG9zZXMgb25jZSBhbGxsIHRoZSByZXNwb25zZXMgaGF2ZSBiZWVuIGZldGNoZWRcbiAgICovXG4gIG1lcmdlQXJyT2JzZXJ2YWJsZXMgPSA8VD4oYXJyOiB7ICRmdW5jOiBPYnNlcnZhYmxlPFRbXT4gfVtdKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPFRbXT4oKHN1YikgPT4ge1xuICAgICAgY29uc3QgcmV0OiBUW10gPSBbXTtcbiAgICAgIGxldCByZXNwb25zZUNvdW50ID0gMDtcbiAgICAgIG1lcmdlKFxuICAgICAgICAuLi5hcnIubWFwKFxuICAgICAgICAgICh4KSA9PlxuICAgICAgICAgICAgeC4kZnVuYz8ucGlwZShcbiAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIHRhcCgocikgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlQ291bnQrKztcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKS5zdWJzY3JpYmUoKHIpID0+IHtcbiAgICAgICAgcmV0LnB1c2goLi4ucik7XG4gICAgICAgIHN1Yi5uZXh0KHJldCk7XG4gICAgICAgIGlmIChyZXNwb25zZUNvdW50ID09IGFyci5maWx0ZXIoKHgpID0+IHguJGZ1bmMpLmxlbmd0aCkge1xuICAgICAgICAgIC8vIGRlYnVnZ2VyXG4gICAgICAgICAgc3ViLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuICByZW1vdmVEdXBsaWNhdGU8VD4obGlzdDogVFtdLCBrZXlGaWVsZCA9ICdjb2RlJykge1xuICAgIGlmICghbGlzdCkgcmV0dXJuIG51bGw7XG4gICAgbGlzdCA9IGxpc3QuZmlsdGVyKCh4KSA9PiB4KTtcbiAgICBjb25zdCByZXQ6IFRbXSA9IFtdLFxuICAgICAgZHVwbGljYXRlTWFwOiB7IFt4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBsaXN0KSB7XG4gICAgICBpZiAoZHVwbGljYXRlTWFwW2l0ZW1ba2V5RmllbGRdXSkgY29udGludWU7XG4gICAgICByZXQucHVzaChpdGVtKTtcbiAgICAgIGR1cGxpY2F0ZU1hcFtpdGVtW2tleUZpZWxkXV0gPSBpdGVtO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG4gIGdldCBnZW5SYW5kb21JRCgpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogMTAwMDAwMDAwMDAwMDAwMCk7XG4gIH1cbiAgc3RvcmVQYXlsb2FkID0gdGhpcy5sb2dnZXJTZXJ2aWNlLmFkZExvZztcbiAgb2JqSXNFbXB0eSA9IChvYmosIGV4Y2x1c2lvbkZpZWxkcz86IHN0cmluZ1tdKSA9PiB7XG4gICAgaWYgKCFvYmopIHJldHVybiB0cnVlO1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgaWYgKGV4Y2x1c2lvbkZpZWxkcz8uaW5jbHVkZXMoa2V5KSkgY29udGludWU7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICBpZiAob2JqW2tleV0pIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIGRhdGFHZW4gPSA8VCA9IGFueT4oa2V5czogc3RyaW5nW10sIGxlbmd0aCA9IDEwKSA9PiB7XG4gICAgY29uc3QgcmV0OiBhbnlbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCB0OiBhbnkgPSB7fTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgdFtrZXldID0gdGhpcy50ZXh0R2VuKCk7XG4gICAgICB9XG4gICAgICByZXQucHVzaCh0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJldCBhcyBUW107XG4gIH07XG4gIHRleHRHZW4gPSAoKSA9PiAncmFuZG9tJyArIE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIDEwMDApO1xuICB0cmFja0J5Q29kZShpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gaXRlbT8uY29kZTtcbiAgfVxuICB0cmFja0J5SUQoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIGl0ZW0/LmlkO1xuICB9XG4gIGRpYWxvZ09wZW5lciA9IChjb21wOiBhbnksIGNvbmZpZzogTWF0RGlhbG9nQ29uZmlnLCB2YWx1ZUNCOiAocikgPT4gYW55LCBub1ZhbHVlQ0I/OiBhbnkpID0+XG4gICAgdGhpcy5kaWFsb2dPcGVuZXJSZWYoY29tcCwgY29uZmlnKVxuICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgIC5zdWJzY3JpYmUoKHIpID0+IHtcbiAgICAgICAgaWYgKHIgIT0gbnVsbCAmJiByICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhbHVlQ0Iocik7XG4gICAgICAgIH0gZWxzZSBpZiAobm9WYWx1ZUNCKSB7XG4gICAgICAgICAgbm9WYWx1ZUNCKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICBkaWFsb2dPcGVuZXJSZWYgPSAoY29tcDogYW55LCBjb25maWc6IE1hdERpYWxvZ0NvbmZpZykgPT4gdGhpcy5kaWFsb2cub3Blbihjb21wLCBjb25maWcpO1xuICBmaW5kTGFiZWxCeUl0ZW0gPSAoaXRlbSwgYXJyOiBhbnlbXSwgbGFiZWxGaWVsZD86IHN0cmluZywga2V5RmllbGQ6IHN0cmluZyA9ICdjb2RlJykgPT4ge1xuICAgIGlmICghaXRlbSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgb2JqID0gYXJyPy5maW5kKCh4KSA9PiB4W2tleUZpZWxkXSA9PSBpdGVtKTtcbiAgICBpZiAoIW9iaikgcmV0dXJuIGl0ZW07XG4gICAgZWxzZSByZXR1cm4gYCR7aXRlbX0gLSAke29ialtsYWJlbEZpZWxkIHx8ICd0aXRsZSddIHx8IG9ialtsYWJlbEZpZWxkIHx8ICdkZXNjcmlwdGlvbiddfWA7XG4gIH07XG5cbiAgZm9ybUZpZWxkc0Zyb21BcnIgPSB0aGlzLmlucHV0U2VydmljZS5mb3JtRmllbGRzRnJvbUZDSW5wdXRzQXJyO1xuICBvYmpUb0Zvcm1Db250cm9scyA9IHRoaXMuaW5wdXRTZXJ2aWNlLmZvcm1GaWVsZHNGcm9tT2JqO1xuICBmb3JtU2NoZW1hVG9Gb3JtQ29udHJvbHMgPSB0aGlzLmlucHV0U2VydmljZS5mb3JtU2NoZW1hVG9Gb3JtQ29udHJvbHM7XG4gIGFkZEZvcm1TY2hlbWFUb0Zvcm0gPSB0aGlzLmlucHV0U2VydmljZS5hZGRGb3JtU2NoZW1hVG9Gb3JtO1xuXG4gIGJpbmRGb3JtQ29udHJvbFRvSW5wdXRzID0gdGhpcy5pbnB1dFNlcnZpY2UuYmluZEZvcm1Db250cm9sVG9JbnB1dHM7XG5cbiAgZ28gPSAodmFsdWU6IHN0cmluZywgZXh0cmE/OiBOYXZpZ2F0aW9uRXh0cmFzKSA9PiB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3ZhbHVlXSwgZXh0cmEpO1xuICB9O1xuICAvKipcbiAgICogUm91dGUgdG8gY29tcG9uZW50XG4gICAqIEBwYXJhbSByb3V0ZSBSb3V0ZSBvZiBwYXRoIHRvIGNvbXBvbmVudFxuICAgKiBAcGFyYW0gZXh0cmFcbiAgICovXG4gIGdvUiA9IChyb3V0ZTogc3RyaW5nLCBleHRyYT86IE5hdmlnYXRpb25FeHRyYXMpID0+IHtcbiAgICBpZiAoISg8U0RLRW52aXJvbm1lbnQ+dGhpcy5lbnZpcm9ubWVudCkuYWN0aXZhdGVkUm91dGUpIGRlYnVnZ2VyO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyb3V0ZV0sIHtcbiAgICAgIHJlbGF0aXZlVG86ICg8U0RLRW52aXJvbm1lbnQ+dGhpcy5lbnZpcm9ubWVudCkuYWN0aXZhdGVkUm91dGUsXG4gICAgICAuLi5leHRyYSxcbiAgICB9KTtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgfTtcblxuICByZWxhdGl2ZVJvdXRlcigpIHtcbiAgICBjb25zdCByb3V0ZXIgPSBpbmplY3QoUm91dGVyKSxcbiAgICAgIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgICByZXR1cm4ge1xuICAgICAgcm91dGUsXG4gICAgICByb3V0ZXIsXG4gICAgICBuYXZpZ2F0ZTogKGxpbms6IHN0cmluZywgY29uZmlnPzogTmF2aWdhdGlvbkV4dHJhcyB8IHVuZGVmaW5lZCkgPT4gcm91dGVyLm5hdmlnYXRlKFtsaW5rXSwgeyByZWxhdGl2ZVRvOiByb3V0ZSwgLi4uY29uZmlnIH0pLFxuICAgICAgcXVlcnlQYXJhbXM6IHJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLFxuICAgICAgcGF0aFBhcmFtczogcm91dGUuc25hcHNob3QucGFyYW1zLFxuICAgIH07XG4gIH1cblxuICBtb25leVBhcnNlciA9IChhbW91bnQ6IHN0cmluZyB8IG51bWJlciwgY3VycmVuY3kgPSAnICcpID0+IHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW5jeVBpcGUudHJhbnNmb3JtKGFtb3VudCwgY3VycmVuY3kgfHwgJyAnKTtcbiAgfTtcbiAgZXh0cmFjdFVwbG9hZChldmVudDogYW55KSB7XG4gICAgcmV0dXJuIChldmVudC50YXJnZXQuZmlsZXMgYXMgRmlsZVtdKSB8fCBbXTtcbiAgfVxuXG4gIHNlY29uZHNUb0hvdXJNaW5TZWMgPSAoc2Vjb25kczogbnVtYmVyKSA9PiB7XG4gICAgaWYgKCFzZWNvbmRzKSByZXR1cm4geyBzZWNzOiBudWxsLCBob3VyczogbnVsbCwgbWluczogbnVsbCB9O1xuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gMzYwMCkgfHwgMCxcbiAgICAgIHNlY29uZHNFeEhvdXJzID0gc2Vjb25kcyAlIDM2MDAgfHwgMCxcbiAgICAgIG1pbnMgPSBNYXRoLmZsb29yKHNlY29uZHNFeEhvdXJzIC8gNjApIHx8IDAsXG4gICAgICBzZWNzID0gc2Vjb25kc0V4SG91cnMgJSA2MDtcbiAgICByZXR1cm4geyBob3VycywgbWlucywgc2VjcyB9O1xuICB9O1xuICBtaW51dGVzVG9EYXlIb3VyTWluID0gKG1pbnV0ZXM6IG51bWJlcikgPT4ge1xuICAgIGlmICghbWludXRlcykgcmV0dXJuIHsgZGF5czogbnVsbCwgaG91cnM6IG51bGwsIG1pbnM6IG51bGwgfTtcbiAgICBjb25zdCBkYXlzID0gTWF0aC5mbG9vcihtaW51dGVzIC8gMTQ0MCkgfHwgMCxcbiAgICAgIG1pbml1dGVzRXhEYXlzID0gbWludXRlcyAlIDE0NDAgfHwgMCxcbiAgICAgIGhvdXJzID0gTWF0aC5mbG9vcihtaW5pdXRlc0V4RGF5cyAvIDYwKSB8fCAwLFxuICAgICAgbWlucyA9IG1pbml1dGVzRXhEYXlzICUgNjAgfHwgMDtcbiAgICByZXR1cm4geyBkYXlzLCBob3VycywgbWlucyB9O1xuICB9O1xuICBtaW51dGVzVG9EYXlIb3VyTWluU3RyID0gKG1pbnV0ZXM6IG51bWJlcikgPT4ge1xuICAgIGlmICghbWludXRlcykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcmV0ID0gdGhpcy5taW51dGVzVG9EYXlIb3VyTWluKG1pbnV0ZXMpO1xuICAgIHJldHVybiBgJHtyZXQuZGF5c30gJHtyZXQuaG91cnN9OiR7cmV0Lm1pbnN9YC50cmltKCk7XG4gIH07XG4gIG1pbnV0ZXNUb0RheUhvdXJNaW5TdHIyID0gKG1pbnV0ZXM6IG51bWJlcikgPT4ge1xuICAgIGlmICghbWludXRlcykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcmV0ID0gdGhpcy5taW51dGVzVG9EYXlIb3VyTWluKG1pbnV0ZXMpO1xuICAgIHJldHVybiBgJHtyZXQuZGF5c31kYXlzICR7cmV0LmhvdXJzfWhycyAke3JldC5taW5zfW1pbnNgLnRyaW0oKTtcbiAgfTtcbiAgZGF5SG91ck1pblRvSG91ck1pbnV0ZXMgPSAoZHlzOiBudW1iZXIsIGhyczogbnVtYmVyLCBtaW5zOiBudW1iZXIpID0+IHtcbiAgICBpZiAoIWR5cyAmJiAhaHJzICYmICFtaW5zKSByZXR1cm4gJyc7XG4gICAgY29uc3QgZHlzVG9IcnMgPSAoZHlzIHx8IDApICogMjQ7XG4gICAgaHJzID0gKCtocnMgfHwgMCkgKyBkeXNUb0hycztcbiAgICByZXR1cm4gKGhycyB8fCAnMDAnKSArICc6JyArIChtaW5zIHx8ICcwMCcpO1xuICB9O1xuICBkaXNhYmxlT3JFbmFibGVJbnB1dHMgPSAoY29udHJvbHM6IEFic3RyYWN0Q29udHJvbFtdLCBkaXNhYmxlOiBib29sZWFuKSA9PiB7XG4gICAgaWYgKGRpc2FibGUpIHRoaXMuZGlzYWJsZUlucHV0cyhjb250cm9scyk7XG4gICAgZWxzZSB0aGlzLmVuYWJsZUlucHV0cyhjb250cm9scyk7XG4gIH07XG4gIGRpc2FibGVJbnB1dHMgPSAoY29udHJvbHM6IEFic3RyYWN0Q29udHJvbFtdKSA9PiB7XG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIGNvbnRyb2xzKSB7XG4gICAgICBjb250cm9sPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH07XG4gIGVuYWJsZUlucHV0cyA9IChjb250cm9sczogQWJzdHJhY3RDb250cm9sW10pID0+IHtcbiAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgY29udHJvbHMpIHtcbiAgICAgIGNvbnRyb2w/LmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9O1xuICBkYXlIb3VyTWluVG9NaW51dGVzID0gKGR5czogbnVtYmVyLCBocnM6IG51bWJlciwgbWluczogbnVtYmVyKSA9PiB7XG4gICAgaWYgKCFkeXMgJiYgIWhycyAmJiAhbWlucykgcmV0dXJuIDA7XG4gICAgY29uc3QgZHlzVG9IcnMgPSAoZHlzIHx8IDApICogMjQ7XG4gICAgaHJzID0gKCtocnMgfHwgMCkgKyBkeXNUb0hycztcbiAgICByZXR1cm4gKGhycyB8fCAwKSAqIDYwICsgbWlucztcbiAgfTtcbiAgaG91ck1pblRvTWludXRlcyA9IChocnM6IG51bWJlciwgbWluczogbnVtYmVyKSA9PiB7XG4gICAgaWYgKCFocnMgJiYgIW1pbnMpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoaHJzIHx8IDApICogNjAgKyBtaW5zO1xuICB9O1xuICBob3VyTWluVG9NaW51dGVzMiA9IChocnNNaW5zOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBbaHJzLCBtaW5zXSA9IGhyc01pbnM/LnNwbGl0KCc6JykgfHwgWzAsIDBdO1xuICAgIHJldHVybiB0aGlzLmhvdXJNaW5Ub01pbnV0ZXMoK2hycywgK21pbnMpO1xuICB9O1xuICBub3RpZnkobWVzc2FnZTogc3RyaW5nLCBjbHM6IDAgfCAxIHwgMiB8IDMgPSAxLCBkdXJhdGlvbiA9IDUwMDAsIHRpdGxlID0gJ0Nsb3NlJykge1xuICAgIGlmIChjbHMgPT0gMCkgcmV0dXJuIHRoaXMuaW5mbyhtZXNzYWdlLCBjbHMpO1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPSAnc3RyaW5nJykgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICBtZXNzYWdlID0gdHlwZW9mIG1lc3NhZ2UgPT0gJ3N0cmluZycgPyBtZXNzYWdlIDogJyc7XG4gICAgY29uc3QgcmVmID0gdGhpcy5zbmFja0Jhci5vcGVuKG1lc3NhZ2UsIHRpdGxlLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICAgIGhvcml6b250YWxQb3NpdGlvbjogJ2NlbnRlcicsXG4gICAgICB2ZXJ0aWNhbFBvc2l0aW9uOiAnYm90dG9tJyxcbiAgICAgIHBhbmVsQ2xhc3M6IGNscyA9PSAxID8gJ2JnLXN1Y2Nlc3MnIDogY2xzID09IDIgPyAnYnRuLWluZm8nIDogY2xzID09IDMgPyAnYnRuLXdhcm5pbmcnIDogJ2JnLWRhbmdlcicsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHJlZi5hZnRlckRpc21pc3NlZCgpLnBpcGUobWFwKChyKSA9PiByLmRpc21pc3NlZEJ5QWN0aW9uKSkpO1xuICB9XG5cbiAgc2Nyb2xsVG9Ub3AgPSAoKSA9PiB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGRhdGUgdGltZSBsb2NhbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgZGF0ZXRpbWUtbG9jYWwgaW5wdXRcbiAgICovXG4gIGdldExvY2FsRGF0ZVRpbWVOb3cgPSAoKSA9PiB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgZGF0ZUNodW5rcyA9IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCkuc3BsaXQoJy8nKTtcbiAgICByZXR1cm4gYCR7ZGF0ZUNodW5rc1syXX0tJHtkYXRlQ2h1bmtzWzFdfS0ke2RhdGVDaHVua3NbMF19YCArICdUJyArIGRhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKCk7XG4gIH07XG4gIC8qKiBAcmV0dXJucyBUaGUgY3VycmVudCBkYXRlIGxvY2FsIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBkYXRlIGlucHV0ICovXG4gIGxvY2FsRGF0ZU5vdyA9ICgpID0+IHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07XG4gIH07XG4gIGRhdGVGb3JtYXQgPSAoZGF0ZTogYW55LCBmb3JtYXQgPSAxKSA9PiB7XG4gICAgaWYgKCFkYXRlKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBkID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgaWYgKGZvcm1hdCA9PSAxKSB7XG4gICAgICByZXR1cm4gZC50b0RhdGVTdHJpbmcoKTtcbiAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PSAyKSB7XG4gICAgICByZXR1cm4gZC5nZXREYXRlKCkgKyAnICcgKyBjb25maWcuTW9udGhzW2QuZ2V0TW9udGgoKV07XG4gICAgfSBlbHNlIGlmIChmb3JtYXQgPT0gMykge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsIGBFRUUgTU1NIGRkIFlZWVksIGhoOm1tIGFhYCk7XG4gICAgfSBlbHNlIGlmIChmb3JtYXQgPT0gNCkge1xuICAgICAgcmV0dXJuIGNvbmZpZy5Nb250aHNbZC5nZXRNb250aCgpXSArICcgJyArIGQuZ2V0RGF0ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9O1xuXG4gIHRvSmF2YURhdGVTdHJpbmcgPSAoaXNvRGF0ZVN0cmluZzogc3RyaW5nID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpKSA9PiB7XG4gICAgaWYgKCFpc29EYXRlU3RyaW5nKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gYCR7aXNvRGF0ZVN0cmluZy5zbGljZSgwLCAxOSl9YDtcbiAgICByZXR1cm4gYCR7aXNvRGF0ZVN0cmluZy5zbGljZSgwLCAxMCl9ICR7aXNvRGF0ZVN0cmluZy5zbGljZSgxMSwgMTkpfWA7XG4gIH07XG5cbiAgdG9KYXZhRGF0ZXRpbWVTdHJpbmcgPSAoaXNvRGF0ZVN0cmluZzogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFpc29EYXRlU3RyaW5nKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBkYXRlID0gaXNvRGF0ZVN0cmluZy5pbmNsdWRlcygnVCcpID8gaXNvRGF0ZVN0cmluZyA6IG5ldyBEYXRlKGlzb0RhdGVTdHJpbmcpLnRvSVNPU3RyaW5nKCk7XG4gICAgcmV0dXJuIGAke2RhdGUuc2xpY2UoMCwgMTApfSAke2RhdGUuc2xpY2UoMTEsIDE5KX1gO1xuICB9O1xuXG4gIHRpbWVGb3JtYXQgPSAodGltZT86IGFueSkgPT4ge1xuICAgIGNvbnN0IHRpbWVBcnI6IGFueVtdID0gdGltZS5zcGxpdCgnICcpO1xuICAgIHRpbWVBcnJbMF0gPSB0aW1lQXJyWzBdLnNwbGl0KCc6Jykuc3BsaWNlKDAsIDIpLmpvaW4oJzonKTtcbiAgICByZXR1cm4gdGltZUFyci5qb2luKCcgJyk7XG4gIH07XG4gIGZ1bGxEYXRlVGltZSA9ICh0aW1lc3RhbXA6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgIC8vIGRlYnVnZ2VyXG4gICAgcmV0dXJuIHRoaXMuZGF0ZUZvcm1hdCh0aW1lc3RhbXAsIDMpO1xuICB9O1xuICBkYXlzRm9ybWF0dGVyID0gKGRheXM6IG51bWJlcikgPT4ge1xuICAgIGlmICghZGF5cykge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG4gICAgbGV0IHlyOiBudW1iZXIsXG4gICAgICBtdDogbnVtYmVyLFxuICAgICAgZHk6IG51bWJlcixcbiAgICAgIHJldDogc3RyaW5nLFxuICAgICAgX3lyID0gMzY1LFxuICAgICAgX210ID0gMzA7XG4gICAgaWYgKGRheXMgPiBfeXIpIHtcbiAgICAgIHlyID0gTWF0aC5mbG9vcihkYXlzIC8gX3lyKTtcbiAgICB9XG4gICAgaWYgKGRheXMgPiBfbXQpIHtcbiAgICAgIG10ID0gTWF0aC5mbG9vcigoZGF5cyAlIF95cikgLyBfbXQpO1xuICAgIH1cbiAgICBkeSA9IChkYXlzICUgX3lyKSAlIF9tdDtcbiAgICByZXQgPSBgJHt5ciA/IHRoaXMucGx1YXJsaXplcih5ciwgJ3lyJykgOiAnJ30gJHttdCA/IHRoaXMucGx1YXJsaXplcihtdCwgJ210aCcpIDogJyd9ICR7dGhpcy5wbHVhcmxpemVyKGR5LCAnZHknKX1gO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIG1vbnRoc0Zvcm1hdHRlciA9IChtb250aHM6IG51bWJlcikgPT4ge1xuICAgIGlmICghbW9udGhzKSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cbiAgICBsZXQgeXI6IG51bWJlcixcbiAgICAgIG10OiBudW1iZXIsXG4gICAgICByZXQ6IHN0cmluZyxcbiAgICAgIF95ciA9IDEyO1xuICAgIGlmIChtb250aHMgPiBfeXIpIHtcbiAgICAgIHlyID0gTWF0aC5mbG9vcihtb250aHMgLyBfeXIpO1xuICAgIH1cbiAgICBtdCA9IG1vbnRocyAlIF95cjtcbiAgICByZXQgPSBgJHt5ciA/IHRoaXMucGx1YXJsaXplcih5ciwgJ3lyJykgOiAnJ30gJHttdCA/IHRoaXMucGx1YXJsaXplcihtdCwgJ210aCcpIDogJyd9YDtcbiAgICByZXR1cm4gcmV0O1xuICB9O1xuICBwbHVhcmxpemVyID0gKHZhbDogbnVtYmVyLCB0eHQ6IHN0cmluZywgcGx1cmFsPzogc3RyaW5nKSA9PiB7XG4gICAgcGx1cmFsID0gcGx1cmFsIHx8IHR4dCArICdzJztcbiAgICByZXR1cm4gdmFsICsgKHZhbCA9PSAxID8gdHh0IDogcGx1cmFsKTtcbiAgfTtcbiAgZGVjaW1hbFRvUGVyY2VudGFnZSA9IChkZWM6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiBkZWMgKiAxMDAgKyAnJSc7XG4gIH07XG4gIGxvZ0Zvcm0gPSAoZm9ybSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCdGT1JNJywgZm9ybSwgJ1ZBTFVFUycsIGZvcm0udmFsdWUgYXMgYW55KTtcbiAgfTtcblxuICB0b0NTVihkYXRhOiBhbnlbXSwgaGVhZGVyTmFtZXM6IHN0cmluZ1tdLCBmaWxlbmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVwbGFjZXIgPSAoa2V5LCB2YWx1ZSkgPT4gKHZhbHVlID09PSBudWxsID8gJycgOiB2YWx1ZSk7IC8vIHNwZWNpZnkgaG93IHlvdSB3YW50IHRvIGhhbmRsZSBudWxsIHZhbHVlcyBoZXJlXG5cbiAgICBsZXQgY3N2ID0gZGF0YS5tYXAoKHJvdykgPT4gaGVhZGVyTmFtZXMubWFwKChmaWVsZE5hbWUpID0+IEpTT04uc3RyaW5naWZ5KHJvd1tmaWVsZE5hbWVdLCByZXBsYWNlcikpLmpvaW4oJywnKSk7XG4gICAgY3N2LnVuc2hpZnQoaGVhZGVyTmFtZXMuam9pbignLCcpKTtcbiAgICBsZXQgY3N2QXJyYXkgPSBjc3Yuam9pbignXFxyXFxuJyk7XG5cbiAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtjc3ZBcnJheV0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcbiAgICBzYXZlQXMoYmxvYiwgZmlsZW5hbWUgKyAnLmNzdicpO1xuICB9XG5cbiAgaXNQaWN0dXJlRm9ybWF0KGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIWZpbGVOYW1lKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgUElDVFVSRV9GT1JNQVRTID0gWycuanBnJywgJy5qcGVnJywgJy5wbmcnLCAnLmdpZiddO1xuICAgIHJldHVybiBQSUNUVVJFX0ZPUk1BVFMuc29tZSgoZm9ybWF0KSA9PiBmaWxlTmFtZS5lbmRzV2l0aChmb3JtYXQpKTtcbiAgfVxuICBvYmplY3RUb0FycmF5PFQ+KG9iajogYW55KSB7XG4gICAgY29uc3QgcmV0ID0gW107XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICByZXQucHVzaChvYmpba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQgYXMgVFtdO1xuICB9XG4gIGZvcm1hdEZpZWxkKGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRvVGl0bGVDYXNlKGZpZWxkPy50b1NlbnRlbmNlQ2FzZSgpKTtcbiAgfVxuICAvKipcbiAgICogVXNlcyBhIHdlYiB3b3JrZXIgdG8gcGVyZm9ybSBhIHRhc2tcbiAgICogQGV4YW1wbGUgbmV3IFdvcmtlcihuZXcgVVJMKCcuL3VwbG9hZC1jc3Yud29ya2VyJywgaW1wb3J0Lm1ldGEudXJsKSlcbiAgICogQHBhcmFtIHdvcmtlciBXZWIgd29ya2VyIG9iamVjdFxuICAgKiBAcGFyYW0gaW5wdXREYXRhIERhdGEgYmVpbmcgcGFzc2VkIGludG8gd2ViIHdvcmtlclxuICAgKiBAcmV0dXJucyBEYXRhIGdvdHRlbiBmcm9tIHdlYiB3b3JrZXJcbiAgICovXG4gIHVzZVdlYldvcmtlcjxUID0gYW55Pih3b3JrZXI6IFdvcmtlciwgaW5wdXREYXRhOiBhbnksIGNvbmRpdGlvbnM/OiB7IHN0b3A6IChyZXMpID0+IGJvb2xlYW47IGVycm9yOiAocmVzKSA9PiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8VD4oKHN1YikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBXb3JrZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKGlucHV0RGF0YSk7XG4gICAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IChyKSA9PiB7XG4gICAgICAgICAgICAvLyBkZWJ1Z2dlclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gci5kYXRhO1xuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbnMpIHtcbiAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvbnMuZXJyb3IoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBzdWIuZXJyb3IoZGF0YSk7XG4gICAgICAgICAgICAgICAgc3ViLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmRpdGlvbnMuc3RvcChkYXRhKSkge1xuICAgICAgICAgICAgICAgIHN1Yi5uZXh0KGRhdGEpO1xuICAgICAgICAgICAgICAgIHN1Yi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdWIubmV4dChkYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3ViLm5leHQoZGF0YSBhcyBhbnkpO1xuICAgICAgICAgICAgICBzdWIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgJ25vV29ya2VyJztcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgc3ViLmVycm9yKGUpO1xuICAgICAgICBzdWIuY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICB0cmltID1cbiAgICAobGVuZ3RoID0gMTUpID0+XG4gICAgKHRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT5cbiAgICAgIHRleHQgJiYgdGV4dC5sZW5ndGggPiBsZW5ndGggPyB0ZXh0LnNsaWNlKDAsIGxlbmd0aCkgOiB0ZXh0ITtcbiAgYXN5bmMgYXJyYXlUb0NTVihkYXRhOiBhbnlbXSwgZmlsZW5hbWU6IHN0cmluZywgaGVhZGVyTWFwPzogVGFibGVDb2xbXSwgZXh0cmFDb25maWc/OiB7IHByZWZpeD86IHN0cmluZzsgaGlkZUhlYWRlcj86IGJvb2xlYW4gfSkge1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGxldCBfZGF0YTogYW55W107XG4gICAgY29uc3QgaGVhZGVyTWFwV2l0aEZvcm1hdHRlcnM6IFRhYmxlQ29sW10gPSBoZWFkZXJNYXA/LmZpbHRlcigoeCkgPT4geC5mb3JtYXR0ZXIgfHwgeC5mb3JtYXR0ZXJSb3cpIHx8IHVuZGVmaW5lZDtcbiAgICBpZiAoaGVhZGVyTWFwV2l0aEZvcm1hdHRlcnM/Lmxlbmd0aCkge1xuICAgICAgX2RhdGEgPSBjbG9uZURlZXAoZGF0YSk7XG4gICAgICBmb3IgKGNvbnN0IGZvcm1hdHRlciBvZiBoZWFkZXJNYXBXaXRoRm9ybWF0dGVycykge1xuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBfZGF0YSkge1xuICAgICAgICAgIHJvd1tmb3JtYXR0ZXIuZl0gPSBmb3JtYXR0ZXIuZm9ybWF0dGVyID8gYXdhaXQgZm9ybWF0dGVyLmZvcm1hdHRlcihyb3dbZm9ybWF0dGVyLmZdKSA6IGZvcm1hdHRlci5mb3JtYXR0ZXJSb3cocm93KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBfZGF0YSA9IGRhdGE7XG4gICAgfVxuICAgIGNvbnN0IHNob3dIZWFkZXIgPSAhZXh0cmFDb25maWc/LmhpZGVIZWFkZXI7XG4gICAgbGV0IGNzdiA9IFBhcGEudW5wYXJzZShfZGF0YSwge1xuICAgICAgaGVhZGVyOiBzaG93SGVhZGVyICYmICFoZWFkZXJNYXA/Lmxlbmd0aCxcbiAgICAgIGNvbHVtbnM6IGhlYWRlck1hcD8ubWFwKCh4KSA9PiB4LmY/LnRvU3RyaW5nKCkpIHx8IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICB0aGlzLmRvd25sb2FkZXIoXG4gICAgICAoZXh0cmFDb25maWc/LnByZWZpeCA/IGV4dHJhQ29uZmlnPy5wcmVmaXggKyAnXFxyXFxuJyA6ICcnKSArXG4gICAgICAgIChoZWFkZXJNYXA/Lmxlbmd0aCA/IGhlYWRlck1hcC5tYXAoKGZpZWxkTmFtZSkgPT4gZmllbGROYW1lLnQpLmpvaW4oJywnKSArIGBcXHJcXG5gIDogJycpICtcbiAgICAgICAgY3N2LFxuICAgICAgZmlsZW5hbWU/LmVuZHNXaXRoKCcuY3N2JykgPyBmaWxlbmFtZSA6IGZpbGVuYW1lICsgJy5jc3YnLFxuICAgICk7XG5cbiAgICB0aGlzLmluZm8oYERvd25sb2FkZWQgJHtmaWxlbmFtZX1gKTtcbiAgfVxuXG4gIGpvaW5DU1ZSb3dzKC4uLkNTVnM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIENTVnMuam9pbignXFxyXFxuJyk7XG4gIH1cbiAgYXN5bmMgYXJyYXlUb0NTVlN0cmluZzxUID0gYW55PihkYXRhOiBUW10sIGhlYWRlck1hcD86IFRhYmxlQ29sPFQ+W10sIGV4dHJhQ29uZmlnPzogeyBwcmVmaXg/OiBzdHJpbmc7IGhpZGVIZWFkZXI/OiBib29sZWFuIH0pIHtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICBsZXQgX2RhdGE6IGFueVtdO1xuICAgIGNvbnN0IGhlYWRlck1hcFdpdGhGb3JtYXR0ZXJzOiBUYWJsZUNvbFtdID0gaGVhZGVyTWFwPy5maWx0ZXIoKHgpID0+IHguZm9ybWF0dGVyIHx8IHguZm9ybWF0dGVyUm93KSB8fCB1bmRlZmluZWQ7XG4gICAgaWYgKGhlYWRlck1hcFdpdGhGb3JtYXR0ZXJzPy5sZW5ndGgpIHtcbiAgICAgIF9kYXRhID0gY2xvbmVEZWVwKGRhdGEpO1xuICAgICAgZm9yIChjb25zdCBmb3JtYXR0ZXIgb2YgaGVhZGVyTWFwV2l0aEZvcm1hdHRlcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCByb3cgb2YgX2RhdGEpIHtcbiAgICAgICAgICByb3dbZm9ybWF0dGVyLmZdID0gZm9ybWF0dGVyLmZvcm1hdHRlciA/IGF3YWl0IGZvcm1hdHRlci5mb3JtYXR0ZXIocm93W2Zvcm1hdHRlci5mXSkgOiBmb3JtYXR0ZXIuZm9ybWF0dGVyUm93KHJvdyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgX2RhdGEgPSBkYXRhO1xuICAgIH1cbiAgICBjb25zdCBzaG93SGVhZGVyID0gIWV4dHJhQ29uZmlnPy5oaWRlSGVhZGVyO1xuICAgIGxldCBjc3YgPSBQYXBhLnVucGFyc2UoX2RhdGEsIHtcbiAgICAgIGhlYWRlcjogc2hvd0hlYWRlciAmJiAhaGVhZGVyTWFwPy5sZW5ndGgsXG4gICAgICBjb2x1bW5zOiBoZWFkZXJNYXA/Lm1hcCgoeCkgPT4geC5mPy50b1N0cmluZygpKSB8fCB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIChcbiAgICAgIChleHRyYUNvbmZpZz8ucHJlZml4ID8gZXh0cmFDb25maWc/LnByZWZpeCArICdcXHJcXG4nIDogJycpICtcbiAgICAgIChoZWFkZXJNYXA/Lmxlbmd0aCA/IGhlYWRlck1hcC5tYXAoKGZpZWxkTmFtZSkgPT4gZmllbGROYW1lLnQpLmpvaW4oJywnKSArIGBcXHJcXG5gIDogJycpICtcbiAgICAgIGNzdlxuICAgICk7XG4gIH1cblxuICBpc0RhdGVWYWx1ZSA9ICh2KSA9PiAodiA/IHZbNF0gPT0gJy0nICYmIHZbN10gPT0gJy0nIDogZmFsc2UpO1xuICBpc0RhdFRpbWVWYWx1ZSA9ICh2KSA9PiAodiA/IHYuaW5jbHVkZXMoJ1QnKSAmJiB2WzRdID09ICctJyAmJiB2WzddID09ICctJyA6IGZhbHNlKTtcblxuICB5ZXNOb0NlbGxGb3JtYXR0ZXJDb2xvdXJlZCA9ICh2KSA9PiBgPHNwYW4gY2xhc3M9JyR7diA/ICdzdWNjZXNzQ2VsbCcgOiAnaW5lcnRDZWxsJ30nPiR7diA/ICdZZXMnIDogdiA9PSBmYWxzZSA/ICdObycgOiAnLSd9PC9zcGFuPmA7XG4gIHllc05vQ2VsbEZvcm1hdHRlciA9ICh2KSA9PiBgJHt2ID8gJ1llcycgOiAnTm8nfWA7XG4gIHN0YXR1c0NlbGxGb3JtYXR0ZXIgPSAoc3RhdHVzOiBTdGF0dXMpID0+XG4gICAgYDxzcGFuIGNsYXNzPScke3N0YXR1cyA9PSAnQ09NUExFVEVEJyA/ICdzdWNjZXNzQ2VsbCcgOiBzdGF0dXMgPT0gJ1BFTkRJTkcnID8gJ3BlbmRpbmdDZWxsJyA6ICdpbmVydENlbGwnfSc+JHtzdGF0dXMgfHwgJy0nfTwvc3Bhbj5gO1xuXG4gIGNlbGxTdGF0dXNGb3JtYXR0ZXIgPVxuICAgIDxUID0gYW55PihndWlkZTogeyBzdWNjZXNzVmFsPzogVDsgcGVuZGluZ1ZhbD86IFQ7IGVycm9yVmFsPzogVDsgaW5lcnRWYWw/OiBUIH0pID0+XG4gICAgKHYpID0+XG4gICAgICBgPHNwYW4gY2xhc3M9JyR7XG4gICAgICAgIHYgPT0gZ3VpZGUuc3VjY2Vzc1ZhbCA/ICdzdWNjZXNzQ2VsbCcgOiB2ID09IGd1aWRlLnBlbmRpbmdWYWwgPyAncGVuZGluZ0NlbGwnIDogdiA9PSBndWlkZS5lcnJvclZhbCA/ICdlcnJvckNlbGwnIDogJ2luZXJ0Q2VsbCdcbiAgICAgIH0nPiR7dn08L3NwYW4+YDtcblxuICBnZW5lcmF0ZVVVSUQoKSB7XG4gICAgbGV0IGQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBsZXQgZDIgPSAodHlwZW9mIHBlcmZvcm1hbmNlICE9PSAndW5kZWZpbmVkJyAmJiBwZXJmb3JtYW5jZS5ub3cgJiYgcGVyZm9ybWFuY2Uubm93KCkgKiAxMDAwKSB8fCAwOyAvL1RpbWUgaW4gbWljcm9zZWNvbmRzIHNpbmNlIHBhZ2UtbG9hZCBvciAwIGlmIHVuc3VwcG9ydGVkXG4gICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgKGMpID0+IHtcbiAgICAgIGxldCByID0gTWF0aC5yYW5kb20oKSAqIDE2OyAvL3JhbmRvbSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxNlxuICAgICAgaWYgKGQgPiAwKSB7XG4gICAgICAgIC8vVXNlIHRpbWVzdGFtcCB1bnRpbCBkZXBsZXRlZFxuICAgICAgICByID0gKGQgKyByKSAlIDE2IHwgMDtcbiAgICAgICAgZCA9IE1hdGguZmxvb3IoZCAvIDE2KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vVXNlIG1pY3Jvc2Vjb25kcyBzaW5jZSBwYWdlLWxvYWQgaWYgc3VwcG9ydGVkXG4gICAgICAgIHIgPSAoZDIgKyByKSAlIDE2IHwgMDtcbiAgICAgICAgZDIgPSBNYXRoLmZsb29yKGQyIC8gMTYpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChjID09PSAneCcgPyByIDogKHIgJiAweDMpIHwgMHg4KS50b1N0cmluZygxNik7XG4gICAgfSk7XG4gIH1cblxuICBpbmZvOiAodGV4dDogc3RyaW5nLCBzdGF0dXM/OiAwIHwgMiB8IDEsIGhlYWRpbmc/OiBzdHJpbmcsIGJ0bnM/OiBJSW5mb0RpYWxvZ0J0bltdLCBkaXNhYmxlQ2xvc2U/OiBib29sZWFuKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBkZWJvdW5jZXIgPSB0aGlzLmRlYm91bmNlclNlcnZpY2UuZGVib3VuY2VyO1xuXG4gIGFzeW5jVmFsaWRhdGlvbiA9IHRoaXMuZGVib3VuY2VyU2VydmljZS5hc3luY1ZhbGlkYXRpb247XG5cbiAgc3RhcnRQbCA9IHRoaXMucFMuc3RhcnRQbDtcbiAgc3RvcFBsID0gdGhpcy5wUy5zdG9wUGw7XG5cbiAgY3JlYXRlU3Vic2NyaXB0aW9uTWFuYWdlciA9ICguLi5zdWJzOiBTdWJzY3JpcHRpb25bXSkgPT4ge1xuICAgIGxldCBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBzdWJzIHx8IFtdO1xuICAgIGNvbnN0IGNsZWFyID0gKCkgPT4ge1xuICAgICAgX3N1YnMuZm9yRWFjaCgoeCkgPT4geC51bnN1YnNjcmliZSgpKTtcbiAgICAgIF9zdWJzID0gW107XG4gICAgfTtcbiAgICBjb25zdCBwdXNoID0gKC4uLnN1YnM6IFN1YnNjcmlwdGlvbltdKSA9PiB7XG4gICAgICBfc3Vicy5wdXNoKC4uLnN1YnMpO1xuICAgIH07XG5cbiAgICByZXR1cm4geyBjbGVhciwgcHVzaCwgc3ViczogKCkgPT4gX3N1YnMgfTtcbiAgfTtcblxuICBjcmVhdGVDYWNoZU1hbmFnZXIgPSAoKSA9PiB7XG4gICAgbGV0IF9jYWNoZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGNvbnN0IGNsZWFyID0gKCkgPT4ge1xuICAgICAgX2NhY2hlID0ge307XG4gICAgfTtcbiAgICBjb25zdCBkcm9wID0gKCkgPT4ge1xuICAgICAgX2NhY2hlID0gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgY29uc3Qgc2F2ZSA9IChrZXk6IHN0cmluZywgZGF0YTogYW55KSA9PiB7XG4gICAgICBpZiAoIV9jYWNoZSkgX2NhY2hlID0ge307XG4gICAgICBfY2FjaGVba2V5XSA9IGRhdGE7XG4gICAgfTtcbiAgICBjb25zdCBnZXQgPSA8VD4oa2V5OiBzdHJpbmcpID0+IF9jYWNoZT8uW2tleV0gYXMgVDtcblxuICAgIHJldHVybiB7IGNsZWFyLCBkcm9wLCBnZXQsIHNhdmUsIGNhY2hlOiAoKSA9PiBfY2FjaGUgfTtcbiAgfTtcblxuICB0cmFja0J5Q3VzdG9tSUQgPSAoaW5kZXgsIGl0ZW0pID0+IHtcbiAgICBpZiAoIWl0ZW1bdGhpcy5jdXN0b21JREZpZWxkXSkge1xuICAgICAgaXRlbVt0aGlzLmN1c3RvbUlERmllbGRdID0gdGhpcy5nZW5lcmF0ZVVVSUQoKTtcbiAgICAgIGNvbnNvbGUubG9nKCdzZXQgY3VzdG9tIGlkJyk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtW3RoaXMuY3VzdG9tSURGaWVsZF07XG4gIH07XG4gIHRyYWNrQnlGb3JGb3JtcyA9IChpbmRleCwgaXRlbTogRm9ybUdyb3VwKSA9PiB7XG4gICAgaWYgKCFpdGVtLmNvbnRyb2xzW3RoaXMuY3VzdG9tSURGaWVsZF0pIGl0ZW0uYWRkQ29udHJvbCh0aGlzLmN1c3RvbUlERmllbGQsIG5ldyBGb3JtQ29udHJvbCh0aGlzLmdlbmVyYXRlVVVJRCgpKSk7XG4gICAgcmV0dXJuIGl0ZW0uY29udHJvbHNbdGhpcy5jdXN0b21JREZpZWxkXS52YWx1ZTtcbiAgfTtcbiAgb2JqZWN0VG9Gb3JtR3JvdXAgPSA8VD4oZGF0YTogVCkgPT4ge1xuICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybUdyb3VwPElTdHJpY3RGb3JtR3JvdXA8VD4+KHt9IGFzIGFueSk7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpKSBmb3JtLmFkZENvbnRyb2woa2V5LCBuZXcgRm9ybUNvbnRyb2woZGF0YVtrZXldKSk7XG4gICAgcmV0dXJuIGZvcm07XG4gIH07XG5cbiAgZm9ybVNjaGVtYVRvRm9ybUdyb3VwID0gPFQgZXh0ZW5kcyB7IFt4OiBzdHJpbmddOiBhbnkgfT4oc2NoZW1hOiBJRm9ybVNjaGVtYVtdLCBkYXRhPzogVCkgPT4ge1xuICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybUdyb3VwPElTdHJpY3RGb3JtR3JvdXA8VD4+KHt9IGFzIGFueSk7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHNjaGVtYSkgZm9ybS5hZGRDb250cm9sKGl0ZW0uZmllbGQudG9TdHJpbmcoKSwgbmV3IEZvcm1Db250cm9sKGRhdGFbaXRlbS5maWVsZC50b1N0cmluZygpXSkpO1xuICAgIHJldHVybiBmb3JtO1xuICB9O1xuXG4gIHRpbWVDb2RlQmxvY2sgPSA8VD4obGFiZWw6IHN0cmluZywgY2I6ICgpID0+IFQpID0+IHtcbiAgICBjb25zdCBzdGFydFRJbWUgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJlcyA9IGNiKCk7XG4gICAgY29uc3QgZW5kVGltZSA9IERhdGUubm93KCk7XG4gICAgY29uc29sZS5sb2cobGFiZWwsIHN0YXJ0VEltZSwgZW5kVGltZSwgKGVuZFRpbWUgLSBzdGFydFRJbWUpIC8gMTAwMCArICdzZWMnKTtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBEZWxldGUgbnVsbCBvciB1bmRlZmluZWQgZmllbGRzIGZyb20gYW4gb2JqZWN0XG4gICAqIEBwYXJhbSBvYmogT2JqZWN0IHRvIGRlbGV0ZSBmcm9tXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBkZWxldGVOdWxsID0gPFQ+KG9iajogVCkgPT4ge1xuICAgIGNvbnN0IHJldDogVCA9IHt9IGFzIGFueTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChvYmpba2V5XSA9PT0gbnVsbCB8fCBvYmpba2V5XSA9PT0gdW5kZWZpbmVkIHx8IG9ialtrZXldID09PSAnJykgY29udGludWU7XG4gICAgICBlbHNlIHJldFtrZXldID0gb2JqW2tleV07XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRpbWVzdGFtcCBpbnRvIGhyLG1pbixzZWNcbiAgICogQHBhcmFtIHRpbWVUYWtlbiBUaW1lIHRha2VuIGluIHRpbWVzdGFtcFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZm9ybWF0VGltZVRha2VuID0gKHRpbWVUYWtlbjogbnVtYmVyKSA9PiB7XG4gICAgaWYgKHRpbWVUYWtlbiA9PSBudWxsKSByZXR1cm4gJyc7XG4gICAgY29uc3QgdGltZUxlZnQgPSB0aGlzLnNlY29uZHNUb0hvdXJNaW5TZWMoTWF0aC5yb3VuZCh0aW1lVGFrZW4gLyAxMDAwKSB8fCAxKTtcbiAgICByZXR1cm4gKFxuICAgICAgKHRpbWVMZWZ0LmhvdXJzID8gdGltZUxlZnQuaG91cnMgKyAnaHInIDogJycpICsgKHRpbWVMZWZ0Lm1pbnMgPyB0aW1lTGVmdC5taW5zICsgJ21pbicgOiAnJykgKyAodGltZUxlZnQuc2VjcyA/IHRpbWVMZWZ0LnNlY3MgKyAnc2VjJyA6ICcnKVxuICAgICk7XG4gIH07XG59XG4iXX0=