@jsii/kernel 1.59.0 → 1.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/api.js CHANGED
@@ -35,4 +35,4 @@ function isPropertyOverride(value) {
35
35
  return value.property != null; // Python passes "null"
36
36
  }
37
37
  exports.isPropertyOverride = isPropertyOverride;
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLFNBQVMsR0FBRyxhQUFhLENBQUM7QUFDMUIsUUFBQSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQztBQUN0QyxRQUFBLFVBQVUsR0FBRyxZQUFZLENBQUM7QUFDMUIsUUFBQSxVQUFVLEdBQUcsWUFBWSxDQUFDO0FBQzFCLFFBQUEsU0FBUyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLFlBQVksR0FBRyxjQUFjLENBQUM7QUFPM0MsU0FBZ0IsUUFBUSxDQUFDLEtBQVU7SUFDakMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxpQkFBUyxJQUFJLEtBQUssQ0FBQztBQUMzRSxDQUFDO0FBRkQsNEJBRUM7QUFNRCxTQUFnQixVQUFVLENBQUMsS0FBVTtJQUNuQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLGtCQUFVLElBQUksS0FBSyxDQUFDO0FBQzVFLENBQUM7QUFGRCxnQ0FFQztBQU1ELFNBQWdCLFVBQVUsQ0FBQyxLQUFVO0lBQ25DLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksa0JBQVUsSUFBSSxLQUFLLENBQUM7QUFDNUUsQ0FBQztBQUZELGdDQUVDO0FBTUQsU0FBZ0IsU0FBUyxDQUFDLEtBQVU7SUFDbEMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxpQkFBUyxJQUFJLEtBQUssQ0FBQztBQUMzRSxDQUFDO0FBRkQsOEJBRUM7QUFTRCxTQUFnQixZQUFZLENBQUMsS0FBVTtJQUNyQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLG9CQUFZLElBQUksS0FBSyxDQUFDO0FBQzlFLENBQUM7QUFGRCxvQ0FFQztBQVNELFNBQWdCLGdCQUFnQixDQUFDLEtBQWU7SUFDOUMsT0FBUSxLQUFhLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLHVCQUF1QjtBQUMvRCxDQUFDO0FBRkQsNENBRUM7QUFPRCxTQUFnQixrQkFBa0IsQ0FBQyxLQUFlO0lBQ2hELE9BQVEsS0FBYSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyx1QkFBdUI7QUFDakUsQ0FBQztBQUZELGdEQUVDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFRPS0VOX1JFRiA9ICckanNpaS5ieXJlZic7XG5leHBvcnQgY29uc3QgVE9LRU5fSU5URVJGQUNFUyA9ICckanNpaS5pbnRlcmZhY2VzJztcbmV4cG9ydCBjb25zdCBUT0tFTl9EQVRFID0gJyRqc2lpLmRhdGUnO1xuZXhwb3J0IGNvbnN0IFRPS0VOX0VOVU0gPSAnJGpzaWkuZW51bSc7XG5leHBvcnQgY29uc3QgVE9LRU5fTUFQID0gJyRqc2lpLm1hcCc7XG5leHBvcnQgY29uc3QgVE9LRU5fU1RSVUNUID0gJyRqc2lpLnN0cnVjdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2JqUmVmIHtcbiAgcmVhZG9ubHkgW1RPS0VOX1JFRl06IHN0cmluZztcbiAgW1RPS0VOX0lOVEVSRkFDRVNdPzogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09ialJlZih2YWx1ZTogYW55KTogdmFsdWUgaXMgT2JqUmVmIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgVE9LRU5fUkVGIGluIHZhbHVlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpcmVEYXRlIHtcbiAgcmVhZG9ubHkgW1RPS0VOX0RBVEVdOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dpcmVEYXRlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBXaXJlRGF0ZSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIFRPS0VOX0RBVEUgaW4gdmFsdWU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2lyZUVudW0ge1xuICByZWFkb25seSBbVE9LRU5fRU5VTV06IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2lyZUVudW0odmFsdWU6IGFueSk6IHZhbHVlIGlzIFdpcmVFbnVtIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgVE9LRU5fRU5VTSBpbiB2YWx1ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXJlTWFwIHtcbiAgcmVhZG9ubHkgW1RPS0VOX01BUF06IHsgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogYW55IH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dpcmVNYXAodmFsdWU6IGFueSk6IHZhbHVlIGlzIFdpcmVNYXAge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiBUT0tFTl9NQVAgaW4gdmFsdWU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2lyZVN0cnVjdCB7XG4gIHJlYWRvbmx5IFtUT0tFTl9TVFJVQ1RdOiB7XG4gICAgcmVhZG9ubHkgZnFuOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgZGF0YTogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2lyZVN0cnVjdCh2YWx1ZTogYW55KTogdmFsdWUgaXMgV2lyZVN0cnVjdCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIFRPS0VOX1NUUlVDVCBpbiB2YWx1ZTtcbn1cblxuZXhwb3J0IHR5cGUgT3ZlcnJpZGUgPSBNZXRob2RPdmVycmlkZSB8IFByb3BlcnR5T3ZlcnJpZGU7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0aG9kT3ZlcnJpZGUge1xuICByZWFkb25seSBtZXRob2Q6IHN0cmluZztcbiAgcmVhZG9ubHkgY29va2llPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNZXRob2RPdmVycmlkZSh2YWx1ZTogT3ZlcnJpZGUpOiB2YWx1ZSBpcyBNZXRob2RPdmVycmlkZSB7XG4gIHJldHVybiAodmFsdWUgYXMgYW55KS5tZXRob2QgIT0gbnVsbDsgLy8gUHl0aG9uIHBhc3NlcyBcIm51bGxcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3BlcnR5T3ZlcnJpZGUge1xuICByZWFkb25seSBwcm9wZXJ0eTogc3RyaW5nO1xuICByZWFkb25seSBjb29raWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BlcnR5T3ZlcnJpZGUodmFsdWU6IE92ZXJyaWRlKTogdmFsdWUgaXMgUHJvcGVydHlPdmVycmlkZSB7XG4gIHJldHVybiAodmFsdWUgYXMgYW55KS5wcm9wZXJ0eSAhPSBudWxsOyAvLyBQeXRob24gcGFzc2VzIFwibnVsbFwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsbGJhY2sge1xuICByZWFkb25seSBjYmlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvb2tpZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBpbnZva2U/OiBJbnZva2VSZXF1ZXN0O1xuICByZWFkb25seSBnZXQ/OiBHZXRSZXF1ZXN0O1xuICByZWFkb25seSBzZXQ/OiBTZXRSZXF1ZXN0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhlbGxvUmVzcG9uc2Uge1xuICByZWFkb25seSBoZWxsbzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRSZXF1ZXN0IHtcbiAgLyoqIFRoZSBuYW1lIG9mIHRoZSBhc3NlbWJseSAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqIEFzc2VtYmx5IHZlcnNpb24gKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKiBUaGUgdGFyYmFsbCBvZiB0aGUgcGFja2FnZSAqL1xuICByZWFkb25seSB0YXJiYWxsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZFJlc3BvbnNlIHtcbiAgcmVhZG9ubHkgYXNzZW1ibHk6IHN0cmluZztcbiAgcmVhZG9ubHkgdHlwZXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnZva2VTY3JpcHRSZXF1ZXN0IHtcbiAgcmVhZG9ubHkgYXNzZW1ibHk6IHN0cmluZztcbiAgcmVhZG9ubHkgc2NyaXB0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFyZ3M/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnZva2VTY3JpcHRSZXNwb25zZSB7XG4gIHJlYWRvbmx5IHN0YXR1czogbnVtYmVyIHwgbnVsbDtcbiAgcmVhZG9ubHkgc3Rkb3V0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0ZGVycjogc3RyaW5nO1xuICByZWFkb25seSBzaWduYWw6IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlUmVxdWVzdCB7XG4gIC8qKlxuICAgKiBUaGUgRlFOIG9mIHRoZSBjbGFzcyBvZiB3aGljaCBhbiBpbnN0YW5jZSBpcyByZXF1ZXN0ZWQgKG9yIFwiT2JqZWN0XCIpXG4gICAqL1xuICByZWFkb25seSBmcW46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEZRTnMgb2YgaW50ZXJmYWNlcyB0aGUgaW5zdGFuY2UgaW1wbGVtZW50cywgaWYgYW55LiBEZWNsYXJpbmdcbiAgICogaW50ZXJmYWNlcyB0aGF0IHRoZSBjbGFzcyBkZW5vdGVkIGJ5IGBmcW5gIGltcGxlbWVudHMgaXMgbm90IG5lY2Vzc2FyeS5cbiAgICogVGhpcyBtZWFucyB0aGF0IG1lbWViZXJzIG9mIGludGVyZmFjZXMgZm91bmQgaW4gdGhpcyBwcm9wZXJ0eSBzaG91bGRcbiAgICogZGVjbGFyZSBtZW1iZXJzIHRoYXQgYXJlIGZvdW5kIGluIHRoZSBgb3ZlcnJpZGVzYCBwcm9wZXJ0eS5cbiAgICovXG4gIHJlYWRvbmx5IGludGVyZmFjZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGNvbnN0cnVjdG9yIG9mIGBmcW5gLiAoXCJPYmplY3RcIiBhY2NlcHRzIG5vbmUpXG4gICAqL1xuICByZWFkb25seSBhcmdzPzogYW55W107XG5cbiAgLyoqXG4gICAqIERlY2xhcmF0aW9ucyBvZiBtZXRob2Qgb3ZlcnJpZGVzIHRoYXQgc2hvdWxkIHRyaWdnZXIgY2FsbGJhY2tzXG4gICAqL1xuICByZWFkb25seSBvdmVycmlkZXM/OiBPdmVycmlkZVtdO1xufVxuXG5leHBvcnQgdHlwZSBDcmVhdGVSZXNwb25zZSA9IE9ialJlZjtcblxuZXhwb3J0IGludGVyZmFjZSBEZWxSZXF1ZXN0IHtcbiAgcmVhZG9ubHkgb2JqcmVmOiBPYmpSZWY7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIERlbFJlc3BvbnNlIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0UmVxdWVzdCB7XG4gIHJlYWRvbmx5IG9ianJlZjogT2JqUmVmO1xuICByZWFkb25seSBwcm9wZXJ0eTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRpY0dldFJlcXVlc3Qge1xuICByZWFkb25seSBmcW46IHN0cmluZztcbiAgcmVhZG9ubHkgcHJvcGVydHk6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRSZXNwb25zZSB7XG4gIHJlYWRvbmx5IHZhbHVlOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGljU2V0UmVxdWVzdCB7XG4gIHJlYWRvbmx5IGZxbjogc3RyaW5nO1xuICByZWFkb25seSBwcm9wZXJ0eTogc3RyaW5nO1xuICByZWFkb25seSB2YWx1ZTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNldFJlcXVlc3Qge1xuICByZWFkb25seSBvYmpyZWY6IE9ialJlZjtcbiAgcmVhZG9ubHkgcHJvcGVydHk6IHN0cmluZztcbiAgcmVhZG9ubHkgdmFsdWU6IGFueTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgU2V0UmVzcG9uc2Uge31cblxuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNJbnZva2VSZXF1ZXN0IHtcbiAgcmVhZG9ubHkgZnFuOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xuICByZWFkb25seSBhcmdzPzogYW55W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW52b2tlUmVxdWVzdCB7XG4gIHJlYWRvbmx5IG9ianJlZjogT2JqUmVmO1xuICByZWFkb25seSBtZXRob2Q6IHN0cmluZztcbiAgcmVhZG9ubHkgYXJncz86IGFueVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludm9rZVJlc3BvbnNlIHtcbiAgcmVhZG9ubHkgcmVzdWx0OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmVnaW5SZXF1ZXN0IHtcbiAgcmVhZG9ubHkgb2JqcmVmOiBPYmpSZWY7XG4gIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xuICByZWFkb25seSBhcmdzPzogYW55W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmVnaW5SZXNwb25zZSB7XG4gIHJlYWRvbmx5IHByb21pc2VpZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVuZFJlcXVlc3Qge1xuICByZWFkb25seSBwcm9taXNlaWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbmRSZXNwb25zZSB7XG4gIHJlYWRvbmx5IHJlc3VsdDogYW55O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBDYWxsYmFja3NSZXF1ZXN0IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsbGJhY2tzUmVzcG9uc2Uge1xuICByZWFkb25seSBjYWxsYmFja3M6IENhbGxiYWNrW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxldGVSZXF1ZXN0IHtcbiAgcmVhZG9ubHkgY2JpZDogc3RyaW5nO1xuICByZWFkb25seSBlcnI/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc3VsdD86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wbGV0ZVJlc3BvbnNlIHtcbiAgcmVhZG9ubHkgY2JpZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5hbWluZ1JlcXVlc3Qge1xuICByZWFkb25seSBhc3NlbWJseTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5hbWluZ1Jlc3BvbnNlIHtcbiAgcmVhZG9ubHkgbmFtaW5nOiB7XG4gICAgcmVhZG9ubHkgW2xhbmd1YWdlOiBzdHJpbmddOiB7IHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IGFueSB9IHwgdW5kZWZpbmVkO1xuICB9O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBTdGF0c1JlcXVlc3Qge31cblxuZXhwb3J0IGludGVyZmFjZSBTdGF0c1Jlc3BvbnNlIHtcbiAgcmVhZG9ubHkgb2JqZWN0Q291bnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgS2VybmVsUmVxdWVzdCA9XG4gIHwgTG9hZFJlcXVlc3RcbiAgfCBDcmVhdGVSZXF1ZXN0XG4gIHwgRGVsUmVxdWVzdFxuICB8IEdldFJlcXVlc3RcbiAgfCBTZXRSZXF1ZXN0XG4gIHwgSW52b2tlUmVxdWVzdFxuICB8IEJlZ2luUmVxdWVzdFxuICB8IEVuZFJlcXVlc3RcbiAgfCBDYWxsYmFja3NSZXF1ZXN0XG4gIHwgQ29tcGxldGVSZXF1ZXN0XG4gIHwgTmFtaW5nUmVxdWVzdFxuICB8IFN0YXRzUmVxdWVzdDtcblxuZXhwb3J0IHR5cGUgS2VybmVsUmVzcG9uc2UgPVxuICB8IEhlbGxvUmVzcG9uc2VcbiAgfCBMb2FkUmVzcG9uc2VcbiAgfCBDcmVhdGVSZXNwb25zZVxuICB8IERlbFJlc3BvbnNlXG4gIHwgR2V0UmVzcG9uc2VcbiAgfCBTZXRSZXNwb25zZVxuICB8IEludm9rZVJlc3BvbnNlXG4gIHwgQmVnaW5SZXNwb25zZVxuICB8IEVuZFJlc3BvbnNlXG4gIHwgQ2FsbGJhY2tzUmVzcG9uc2VcbiAgfCBDb21wbGV0ZVJlc3BvbnNlXG4gIHwgTmFtaW5nUmVzcG9uc2VcbiAgfCBTdGF0c1Jlc3BvbnNlO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9rYXlSZXNwb25zZSB7XG4gIHJlYWRvbmx5IG9rOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JSZXNwb25zZSB7XG4gIHJlYWRvbmx5IGVycm9yOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YWNrPzogc3RyaW5nO1xufVxuIl19
38
+ //# sourceMappingURL=api.js.map
package/lib/index.js CHANGED
@@ -1,17 +1,21 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
8
12
  }));
9
13
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
- for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
15
  };
12
16
  Object.defineProperty(exports, "__esModule", { value: true });
13
17
  exports.api = void 0;
14
18
  __exportStar(require("./kernel"), exports);
15
19
  const api = require("./api");
16
20
  exports.api = api;
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUF5QjtBQUV6Qiw2QkFBNkI7QUFDcEIsa0JBQUciLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2tlcm5lbCc7XG5cbmltcG9ydCAqIGFzIGFwaSBmcm9tICcuL2FwaSc7XG5leHBvcnQgeyBhcGkgfTtcbiJdfQ==
21
+ //# sourceMappingURL=index.js.map
package/lib/kernel.js CHANGED
@@ -47,11 +47,10 @@ class Kernel {
47
47
  this.sandbox = vm.createContext({
48
48
  Buffer,
49
49
  setImmediate,
50
- require: nodeRequire,
50
+ require: nodeRequire, // modules need to "require"
51
51
  });
52
52
  }
53
53
  load(req) {
54
- var _a, _b;
55
54
  this._debug('load', req);
56
55
  if ('assembly' in req) {
57
56
  throw new Error('`assembly` field is deprecated for "load", use `name`, `version` and `tarball` instead');
@@ -73,7 +72,7 @@ class Kernel {
73
72
  const assm = this.assemblies[pkgname];
74
73
  return {
75
74
  assembly: assm.metadata.name,
76
- types: Object.keys((_a = assm.metadata.types) !== null && _a !== void 0 ? _a : {}).length,
75
+ types: Object.keys(assm.metadata.types ?? {}).length,
77
76
  };
78
77
  }
79
78
  // Create the install directory (there may be several path components for @scoped/packages)
@@ -107,11 +106,10 @@ class Kernel {
107
106
  this._addAssembly(assm);
108
107
  return {
109
108
  assembly: assmSpec.name,
110
- types: Object.keys((_b = assmSpec.types) !== null && _b !== void 0 ? _b : {}).length,
109
+ types: Object.keys(assmSpec.types ?? {}).length,
111
110
  };
112
111
  }
113
112
  invokeBinScript(req) {
114
- var _a;
115
113
  const packageDir = this._getPackageDir(req.assembly);
116
114
  if (fs.pathExistsSync(packageDir)) {
117
115
  // module exists, verify version
@@ -123,7 +121,7 @@ class Kernel {
123
121
  if (!epkg.bin) {
124
122
  throw new Error(`Script with name ${req.script} was not defined.`);
125
123
  }
126
- const result = cp.spawnSync(path.join(packageDir, scriptPath), (_a = req.args) !== null && _a !== void 0 ? _a : [], {
124
+ const result = cp.spawnSync(path.join(packageDir, scriptPath), req.args ?? [], {
127
125
  encoding: 'utf-8',
128
126
  env: {
129
127
  ...process.env,
@@ -214,9 +212,8 @@ class Kernel {
214
212
  return {};
215
213
  }
216
214
  invoke(req) {
217
- var _a, _b;
218
215
  const { objref, method } = req;
219
- const args = (_a = req.args) !== null && _a !== void 0 ? _a : [];
216
+ const args = req.args ?? [];
220
217
  this._debug('invoke', objref, method, args);
221
218
  const { ti, obj, fn } = this._findInvokeTarget(objref, method, args);
222
219
  // verify this is not an async method
@@ -226,14 +223,13 @@ class Kernel {
226
223
  const ret = this._ensureSync(`method '${objref[api_1.TOKEN_REF]}.${method}'`, () => {
227
224
  return this._wrapSandboxCode(() => fn.apply(obj, this._toSandboxValues(args, ti.parameters)));
228
225
  });
229
- const result = this._fromSandbox(ret, (_b = ti.returns) !== null && _b !== void 0 ? _b : 'void');
226
+ const result = this._fromSandbox(ret, ti.returns ?? 'void');
230
227
  this._debug('invoke result', result);
231
228
  return { result };
232
229
  }
233
230
  sinvoke(req) {
234
- var _a, _b;
235
231
  const { fqn, method } = req;
236
- const args = (_a = req.args) !== null && _a !== void 0 ? _a : [];
232
+ const args = req.args ?? [];
237
233
  this._debug('sinvoke', fqn, method, args);
238
234
  const ti = this._typeInfoForMethod(method, fqn);
239
235
  if (!ti.static) {
@@ -249,12 +245,11 @@ class Kernel {
249
245
  return this._wrapSandboxCode(() => fn.apply(prototype, this._toSandboxValues(args, ti.parameters)));
250
246
  });
251
247
  this._debug('method returned:', ret);
252
- return { result: this._fromSandbox(ret, (_b = ti.returns) !== null && _b !== void 0 ? _b : 'void') };
248
+ return { result: this._fromSandbox(ret, ti.returns ?? 'void') };
253
249
  }
254
250
  begin(req) {
255
- var _a;
256
251
  const { objref, method } = req;
257
- const args = (_a = req.args) !== null && _a !== void 0 ? _a : [];
252
+ const args = req.args ?? [];
258
253
  this._debug('begin', objref, method, args);
259
254
  if (this.syncInProgress) {
260
255
  throw new Error(`Cannot invoke async method '${req.objref[api_1.TOKEN_REF]}.${req.method}' while sync ${this.syncInProgress} is being processed`);
@@ -277,7 +272,6 @@ class Kernel {
277
272
  return { promiseid: prid };
278
273
  }
279
274
  async end(req) {
280
- var _a;
281
275
  const { promiseid } = req;
282
276
  this._debug('end', promiseid);
283
277
  const { promise, method } = this.promises[promiseid];
@@ -293,7 +287,7 @@ class Kernel {
293
287
  this._debug('promise error:', e);
294
288
  throw e;
295
289
  }
296
- return { result: this._fromSandbox(result, (_a = method.returns) !== null && _a !== void 0 ? _a : 'void') };
290
+ return { result: this._fromSandbox(result, method.returns ?? 'void') };
297
291
  }
298
292
  callbacks(_req) {
299
293
  this._debug('callbacks');
@@ -316,7 +310,6 @@ class Kernel {
316
310
  return { callbacks: ret };
317
311
  }
318
312
  complete(req) {
319
- var _a;
320
313
  const { cbid, err, result } = req;
321
314
  this._debug('complete', cbid, err, result);
322
315
  if (!(cbid in this.waiting)) {
@@ -328,7 +321,7 @@ class Kernel {
328
321
  cb.fail(new Error(err));
329
322
  }
330
323
  else {
331
- const sandoxResult = this._toSandbox(result, (_a = cb.expectedReturnType) !== null && _a !== void 0 ? _a : 'void');
324
+ const sandoxResult = this._toSandbox(result, cb.expectedReturnType ?? 'void');
332
325
  this._debug('completed with result:', sandoxResult);
333
326
  cb.succeed(sandoxResult);
334
327
  }
@@ -355,11 +348,10 @@ class Kernel {
355
348
  };
356
349
  }
357
350
  _addAssembly(assm) {
358
- var _a;
359
351
  this.assemblies[assm.metadata.name] = assm;
360
352
  // add the __jsii__.fqn property on every constructor. this allows
361
353
  // traversing between the javascript and jsii worlds given any object.
362
- for (const fqn of Object.keys((_a = assm.metadata.types) !== null && _a !== void 0 ? _a : {})) {
354
+ for (const fqn of Object.keys(assm.metadata.types ?? {})) {
363
355
  const typedef = assm.metadata.types[fqn];
364
356
  switch (typedef.kind) {
365
357
  case spec.TypeKind.Interface:
@@ -367,7 +359,7 @@ class Kernel {
367
359
  case spec.TypeKind.Class:
368
360
  case spec.TypeKind.Enum:
369
361
  const constructor = this._findSymbol(fqn);
370
- objects_1.tagJsiiConstructor(constructor, fqn);
362
+ (0, objects_1.tagJsiiConstructor)(constructor, fqn);
371
363
  }
372
364
  }
373
365
  }
@@ -403,14 +395,13 @@ class Kernel {
403
395
  // prefixed with _ to allow calling this method internally without
404
396
  // getting it recorded for testing.
405
397
  _create(req) {
406
- var _a, _b;
407
398
  this._debug('create', req);
408
399
  const { fqn, interfaces, overrides } = req;
409
- const requestArgs = (_a = req.args) !== null && _a !== void 0 ? _a : [];
400
+ const requestArgs = req.args ?? [];
410
401
  const ctorResult = this._findCtor(fqn, requestArgs);
411
402
  const ctor = ctorResult.ctor;
412
403
  const obj = this._wrapSandboxCode(() => new ctor(...this._toSandboxValues(requestArgs, ctorResult.parameters)));
413
- const objref = this.objects.registerObject(obj, fqn, (_b = req.interfaces) !== null && _b !== void 0 ? _b : []);
404
+ const objref = this.objects.registerObject(obj, fqn, req.interfaces ?? []);
414
405
  // overrides: for each one of the override method names, installs a
415
406
  // method on the newly created object which represents the remote "reverse proxy".
416
407
  if (overrides) {
@@ -475,12 +466,11 @@ class Kernel {
475
466
  this._defineOverridenProperty(obj, objref, override, propInfo);
476
467
  }
477
468
  _defineOverridenProperty(obj, objref, override, propInfo) {
478
- var _a;
479
469
  const propertyName = override.property;
480
470
  this._debug('apply override', propertyName);
481
471
  // save the old property under $jsii$super$<prop>$ so that property overrides
482
472
  // can still access it via `super.<prop>`.
483
- const prev = (_a = getPropertyDescriptor(obj, propertyName)) !== null && _a !== void 0 ? _a : {
473
+ const prev = getPropertyDescriptor(obj, propertyName) ?? {
484
474
  value: obj[propertyName],
485
475
  writable: true,
486
476
  enumerable: true,
@@ -578,14 +568,13 @@ class Kernel {
578
568
  this._debug('invoke async method override', override);
579
569
  const args = this._toSandboxValues(methodArgs, methodInfo.parameters);
580
570
  return new Promise((succeed, fail) => {
581
- var _a;
582
571
  const cbid = this._makecbid();
583
572
  this._debug('adding callback to queue', cbid);
584
573
  this.cbs[cbid] = {
585
574
  objref,
586
575
  override,
587
576
  args,
588
- expectedReturnType: (_a = methodInfo.returns) !== null && _a !== void 0 ? _a : 'void',
577
+ expectedReturnType: methodInfo.returns ?? 'void',
589
578
  succeed,
590
579
  fail,
591
580
  };
@@ -600,7 +589,6 @@ class Kernel {
600
589
  configurable: false,
601
590
  writable: false,
602
591
  value: (...methodArgs) => {
603
- var _a;
604
592
  this._debug('invoke sync method override', override, 'args', methodArgs);
605
593
  // We should be validating the actual arguments according to the
606
594
  // declared parameters here, but let's just assume the JSII runtime on the
@@ -615,7 +603,7 @@ class Kernel {
615
603
  },
616
604
  });
617
605
  this._debug('Result', result);
618
- return this._toSandbox(result, (_a = methodInfo.returns) !== null && _a !== void 0 ? _a : 'void');
606
+ return this._toSandbox(result, methodInfo.returns ?? 'void');
619
607
  },
620
608
  });
621
609
  }
@@ -641,8 +629,7 @@ class Kernel {
641
629
  return { ti, obj: instance, fn };
642
630
  }
643
631
  _validateMethodArguments(method, args) {
644
- var _a;
645
- const params = (_a = method === null || method === void 0 ? void 0 : method.parameters) !== null && _a !== void 0 ? _a : [];
632
+ const params = method?.parameters ?? [];
646
633
  // error if args > params
647
634
  if (args.length > params.length && !(method && method.variadic)) {
648
635
  throw new Error(`Too many arguments (method accepts ${params.length} parameters, got ${args.length} arguments)`);
@@ -689,14 +676,13 @@ class Kernel {
689
676
  return curr;
690
677
  }
691
678
  _typeInfoForFqn(fqn) {
692
- var _a;
693
679
  const components = fqn.split('.');
694
680
  const moduleName = components[0];
695
681
  const assembly = this.assemblies[moduleName];
696
682
  if (!assembly) {
697
683
  throw new Error(`Module '${moduleName}' not found`);
698
684
  }
699
- const types = (_a = assembly.metadata.types) !== null && _a !== void 0 ? _a : {};
685
+ const types = assembly.metadata.types ?? {};
700
686
  const fqnInfo = types[fqn];
701
687
  if (!fqnInfo) {
702
688
  throw new Error(`Type '${fqn}' not found`);
@@ -714,13 +700,12 @@ class Kernel {
714
700
  return ti;
715
701
  }
716
702
  _tryTypeInfoForMethod(methodName, classFqn, interfaces = []) {
717
- var _a, _b;
718
703
  for (const fqn of [classFqn, ...interfaces]) {
719
704
  if (fqn === wire.EMPTY_OBJECT_FQN) {
720
705
  continue;
721
706
  }
722
707
  const typeinfo = this._typeInfoForFqn(fqn);
723
- const methods = (_a = typeinfo.methods) !== null && _a !== void 0 ? _a : [];
708
+ const methods = typeinfo.methods ?? [];
724
709
  for (const m of methods) {
725
710
  if (m.name === methodName) {
726
711
  return m;
@@ -729,7 +714,7 @@ class Kernel {
729
714
  // recursion to parent type (if exists)
730
715
  const bases = [
731
716
  typeinfo.base,
732
- ...((_b = typeinfo.interfaces) !== null && _b !== void 0 ? _b : []),
717
+ ...(typeinfo.interfaces ?? []),
733
718
  ];
734
719
  for (const base of bases) {
735
720
  if (!base) {
@@ -744,7 +729,6 @@ class Kernel {
744
729
  return undefined;
745
730
  }
746
731
  _tryTypeInfoForProperty(property, classFqn, interfaces = []) {
747
- var _a;
748
732
  for (const fqn of [classFqn, ...interfaces]) {
749
733
  if (fqn === wire.EMPTY_OBJECT_FQN) {
750
734
  continue;
@@ -760,12 +744,12 @@ class Kernel {
760
744
  else if (spec.isInterfaceType(typeInfo)) {
761
745
  const interfaceTypeInfo = typeInfo;
762
746
  properties = interfaceTypeInfo.properties;
763
- bases = (_a = interfaceTypeInfo.interfaces) !== null && _a !== void 0 ? _a : [];
747
+ bases = interfaceTypeInfo.interfaces ?? [];
764
748
  }
765
749
  else {
766
750
  throw new Error(`Type of kind ${typeInfo.kind} does not have properties`);
767
751
  }
768
- for (const p of properties !== null && properties !== void 0 ? properties : []) {
752
+ for (const p of properties ?? []) {
769
753
  if (p.name === property) {
770
754
  return p;
771
755
  }
@@ -847,7 +831,7 @@ class Kernel {
847
831
  return this._boxUnboxParameters(xs, parameters, this._fromSandbox.bind(this));
848
832
  }
849
833
  _boxUnboxParameters(xs, parameters, boxUnbox) {
850
- parameters = [...(parameters !== null && parameters !== void 0 ? parameters : [])];
834
+ parameters = [...(parameters ?? [])];
851
835
  const variadic = parameters.length > 0 && !!parameters[parameters.length - 1].variadic;
852
836
  // Repeat the last (variadic) type to match the number of actual arguments
853
837
  while (variadic && parameters.length < xs.length) {
@@ -917,4 +901,4 @@ class Assembly {
917
901
  this.closure = closure;
918
902
  }
919
903
  }
920
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2VybmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2tlcm5lbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFDbkMsb0NBQW9DO0FBQ3BDLCtCQUErQjtBQUMvQix5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLDJCQUEyQjtBQUMzQix5QkFBeUI7QUFFekIsNkJBQTZCO0FBQzdCLCtCQUFrQztBQUNsQyx1Q0FBNEQ7QUFDNUQsb0NBQW9DO0FBQ3BDLHdDQUF3QztBQUV4QyxNQUFhLE1BQU07SUFpQmpCOzs7Ozs7T0FNRztJQUNILFlBQTBCLGVBQWdEO1FBQ3hFLGdFQUFnRTtRQUNoRSxxREFBcUQ7UUFGN0Isb0JBQWUsR0FBZixlQUFlLENBQWlDO1FBdkIxRTs7V0FFRztRQUNJLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBRXBCLGVBQVUsR0FBaUMsRUFBRSxDQUFDO1FBQ3JDLFlBQU8sR0FBRyxJQUFJLHFCQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNwRSxRQUFHLEdBQWlDLEVBQUUsQ0FBQztRQUN2QyxZQUFPLEdBQWlDLEVBQUUsQ0FBQztRQUMzQyxhQUFRLEdBQXdDLEVBQUUsQ0FBQztRQUNuRCxXQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsa0RBQWtEO1FBaUJ4RSwyREFBMkQ7UUFFM0QsZ0ZBQWdGO1FBQ2hGLGdGQUFnRjtRQUNoRiw4REFBOEQ7UUFDOUQsK0VBQStFO1FBQy9FLGVBQWU7UUFDZixvR0FBb0c7UUFDcEcsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDbEQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUM5QixNQUFNO1lBQ04sWUFBWTtZQUNaLE9BQU8sRUFBRSxXQUFXO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxJQUFJLENBQUMsR0FBb0I7O1FBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXpCLElBQUksVUFBVSxJQUFJLEdBQUcsRUFBRTtZQUNyQixNQUFNLElBQUksS0FBSyxDQUNiLHdGQUF3RixDQUN6RixDQUFDO1NBQ0g7UUFFRCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFFM0IseUNBQXlDO1FBQ3pDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsSUFBSSxFQUFFLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ2pDLGdDQUFnQztZQUNoQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDcEUsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRTtnQkFDM0IsTUFBTSxJQUFJLEtBQUssQ0FDYixxQkFBcUIsTUFBTSxRQUFRLElBQUksQ0FBQyxPQUFPLFVBQVU7b0JBQ3ZELFlBQVksT0FBTywyREFBMkQ7b0JBQzlFLDJCQUEyQixDQUM5QixDQUFDO2FBQ0g7WUFFRCxzQkFBc0I7WUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQ0FBaUMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN4RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRXRDLE9BQU87Z0JBQ0wsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSTtnQkFDNUIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLE9BQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLG1DQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU07YUFDckQsQ0FBQztTQUNIO1FBRUQsMkZBQTJGO1FBQzNGLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFMUIsbURBQW1EO1FBQ25ELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsSUFBSTtZQUNGLDBDQUEwQztZQUMxQyxHQUFHLENBQUMsT0FBTyxDQUFDO2dCQUNWLEdBQUcsRUFBRSxVQUFVO2dCQUNmLElBQUksRUFBRSxHQUFHLENBQUMsT0FBTztnQkFDakIsTUFBTSxFQUFFLElBQUk7Z0JBQ1osS0FBSyxFQUFFLENBQUM7Z0JBQ1IsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsTUFBTSxFQUFFLElBQUk7YUFDYixDQUFDLENBQUM7U0FDSjtnQkFBUztZQUNSLG1DQUFtQztZQUNuQyxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzlCO1FBRUQsbURBQW1EO1FBQ25ELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLEVBQUU7WUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FDYixtQkFBbUIsR0FBRyxDQUFDLE9BQU8sMkJBQTJCLElBQUksQ0FBQyxjQUFjLGNBQWMsQ0FDM0YsQ0FBQztTQUNIO1FBQ0QsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBa0IsQ0FBQztRQUVwRSwyQ0FBMkM7UUFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDM0IsdUJBQXVCLFVBQVUsS0FBSyxFQUN0QyxVQUFVLENBQ1gsQ0FBQztRQUNGLE1BQU0sSUFBSSxHQUFHLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhCLE9BQU87WUFDTCxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUk7WUFDdkIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLE9BQUMsUUFBUSxDQUFDLEtBQUssbUNBQUksRUFBRSxDQUFDLENBQUMsTUFBTTtTQUNoRCxDQUFDO0lBQ0osQ0FBQztJQUVNLGVBQWUsQ0FDcEIsR0FBNEI7O1FBRTVCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JELElBQUksRUFBRSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNqQyxnQ0FBZ0M7WUFDaEMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBRXBFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQzthQUN0RTtZQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXhDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxNQUFNLG1CQUFtQixDQUFDLENBQUM7YUFDcEU7WUFFRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsU0FBUyxDQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsUUFDakMsR0FBRyxDQUFDLElBQUksbUNBQUksRUFBRSxFQUNkO2dCQUNFLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixHQUFHLEVBQUU7b0JBQ0gsR0FBRyxPQUFPLENBQUMsR0FBRztvQkFDZCx5RUFBeUU7b0JBQ3pFLFlBQVksRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7b0JBQ3hDLHVEQUF1RDtvQkFDdkQsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7aUJBQzlEO2dCQUNELEtBQUssRUFBRSxJQUFJO2FBQ1osQ0FDRixDQUFDO1lBRUYsT0FBTztnQkFDTCxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07Z0JBQ3JCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtnQkFDckIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO2dCQUNyQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07YUFDdEIsQ0FBQztTQUNIO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLFFBQVEsa0JBQWtCLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRU0sTUFBTSxDQUFDLEdBQXNCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRU0sR0FBRyxDQUFDLEdBQW1CO1FBQzVCLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFFdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbEMsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRU0sSUFBSSxDQUFDLEdBQXlCO1FBQ25DLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQzlCLE1BQU0sTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFcEQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUU7WUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksTUFBTSxnQkFBZ0IsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV4QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQzFELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FDakQsQ0FBQztRQUVGLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVNLElBQUksQ0FBQyxHQUF5QjtRQUNuQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFDckMsTUFBTSxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVwRCxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRTtZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxNQUFNLGdCQUFnQixDQUFDLENBQUM7U0FDckQ7UUFFRCxJQUFJLEVBQUUsQ0FBQyxTQUFTLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsTUFBTSxjQUFjLENBQUMsQ0FBQztTQUMxRDtRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFeEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUM1QyxJQUFJLENBQUMsZ0JBQWdCLENBQ25CLEdBQUcsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQ3pELENBQ0YsQ0FBQztRQUVGLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVNLEdBQUcsQ0FBQyxHQUFtQjtRQUM1QixNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFaEUseUZBQXlGO1FBQ3pGLDBGQUEwRjtRQUMxRixzRkFBc0Y7UUFDdEYsd0ZBQXdGO1FBQ3hGLHVFQUF1RTtRQUN2RSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRW5FLDJFQUEyRTtRQUMzRSxxQkFBcUI7UUFDckIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FDNUIsYUFBYSxNQUFNLENBQUMsZUFBUyxDQUFDLElBQUksYUFBYSxHQUFHLEVBQ2xELEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FDM0QsQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVNLEdBQUcsQ0FBQyxHQUFtQjtRQUM1QixNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV0RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFMUUsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFO1lBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQ2IsMENBQTBDLEdBQUcsQ0FBQyxRQUFRLE9BQU8sR0FBRyxDQUFDLEtBQUssRUFBRSxDQUN6RSxDQUFDO1NBQ0g7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRW5FLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxNQUFNLENBQUMsZUFBUyxDQUFDLElBQUksYUFBYSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQ3hFLElBQUksQ0FBQyxnQkFBZ0IsQ0FDbkIsR0FBRyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FDbkUsQ0FDRixDQUFDO1FBRUYsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRU0sTUFBTSxDQUFDLEdBQXNCOztRQUNsQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUMvQixNQUFNLElBQUksU0FBRyxHQUFHLENBQUMsSUFBSSxtQ0FBSSxFQUFFLENBQUM7UUFFNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1QyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVyRSxxQ0FBcUM7UUFDckMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLE1BQU0sMENBQTBDLENBQUMsQ0FBQztTQUN0RTtRQUVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQzFCLFdBQVcsTUFBTSxDQUFDLGVBQVMsQ0FBQyxJQUFJLE1BQU0sR0FBRyxFQUN6QyxHQUFHLEVBQUU7WUFDSCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FDaEMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FDMUQsQ0FBQztRQUNKLENBQUMsQ0FDRixDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLFFBQUUsRUFBRSxDQUFDLE9BQU8sbUNBQUksTUFBTSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFckMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFTSxPQUFPLENBQUMsR0FBNEI7O1FBQ3pDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQzVCLE1BQU0sSUFBSSxTQUFHLEdBQUcsQ0FBQyxJQUFJLG1DQUFJLEVBQUUsQ0FBQztRQUU1QixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFaEQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUU7WUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLE1BQU0seUJBQXlCLENBQUMsQ0FBQztTQUM1RDtRQUVELHFDQUFxQztRQUNyQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUU7WUFDWixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsTUFBTSwwQ0FBMEMsQ0FBQyxDQUFDO1NBQ3RFO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUE4QixDQUFDO1FBRTFELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxHQUFHLElBQUksTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFO1lBQzdELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUNoQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUNoRSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLFFBQUUsRUFBRSxDQUFDLE9BQU8sbUNBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0lBRU0sS0FBSyxDQUFDLEdBQXFCOztRQUNoQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUMvQixNQUFNLElBQUksU0FBRyxHQUFHLENBQUMsSUFBSSxtQ0FBSSxFQUFFLENBQUM7UUFFNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUzQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FDYiwrQkFBK0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxlQUFTLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxnQkFBZ0IsSUFBSSxDQUFDLGNBQWMscUJBQXFCLENBQzNILENBQUM7U0FDSDtRQUVELE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXJFLHdDQUF3QztRQUN4QyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRTtZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxNQUFNLG9DQUFvQyxDQUFDLENBQUM7U0FDdkU7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQ3pDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQzFDLENBQUM7UUFFbEIscUVBQXFFO1FBQ3JFLHdDQUF3QztRQUN4Qyw2SEFBNkg7UUFDN0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUc7WUFDcEIsT0FBTztZQUNQLE1BQU0sRUFBRSxFQUFFO1NBQ1gsQ0FBQztRQUVGLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVNLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBbUI7O1FBQ2xDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFFMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFOUIsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JELElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtZQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1NBQzlEO1FBRUQsSUFBSSxNQUFNLENBQUM7UUFDWCxJQUFJO1lBQ0YsTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDeEM7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDakMsTUFBTSxDQUFDLENBQUM7U0FDVDtRQUVELE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLFFBQUUsTUFBTSxDQUFDLE9BQU8sbUNBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQztJQUN6RSxDQUFDO0lBRU0sU0FBUyxDQUFDLElBQTJCO1FBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDN0MsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQjtZQUMzQyxNQUFNLFFBQVEsR0FBaUI7Z0JBQzdCLElBQUk7Z0JBQ0osTUFBTSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTTtnQkFDMUIsTUFBTSxFQUFFO29CQUNOLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTTtvQkFDakIsTUFBTSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTTtvQkFDMUIsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJO2lCQUNkO2FBQ0YsQ0FBQztZQUNGLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBRUgscUVBQXFFO1FBQ3JFLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2QsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU0sUUFBUSxDQUFDLEdBQXdCOztRQUN0QyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFFbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUzQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQyxDQUFDO1NBQy9DO1FBRUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDMUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3pCO2FBQU07WUFDTCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUNsQyxNQUFNLFFBQ04sRUFBRSxDQUFDLGtCQUFrQixtQ0FBSSxNQUFNLENBQ2hDLENBQUM7WUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLHdCQUF3QixFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ3BELEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDMUI7UUFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsR0FBc0I7UUFDbEMsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUVsQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUVwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQzFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixZQUFZLGNBQWMsQ0FBQyxDQUFDO1NBQzNFO1FBRUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU0sS0FBSyxDQUFDLElBQXVCO1FBQ2xDLE9BQU87WUFDTCxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLO1NBQ2hDLENBQUM7SUFDSixDQUFDO0lBRU8sWUFBWSxDQUFDLElBQWM7O1FBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7UUFFM0Msa0VBQWtFO1FBQ2xFLHNFQUFzRTtRQUN0RSxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLE9BQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLG1DQUFJLEVBQUUsQ0FBQyxFQUFFO1lBQ3hELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLFFBQVEsT0FBTyxDQUFDLElBQUksRUFBRTtnQkFDcEIsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVM7b0JBQzFCLFNBQVMsQ0FBQyxnQ0FBZ0M7Z0JBQzVDLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ3pCLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJO29CQUNyQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMxQyw0QkFBa0IsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDeEM7U0FDRjtJQUNILENBQUM7SUFFRCwyREFBMkQ7SUFDbkQsU0FBUyxDQUNmLEdBQVcsRUFDWCxJQUFXO1FBRVgsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ2pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7U0FDekI7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTNDLFFBQVEsUUFBUSxDQUFDLElBQUksRUFBRTtZQUNyQixLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSztnQkFDdEIsTUFBTSxTQUFTLEdBQUcsUUFBMEIsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzNELE9BQU87b0JBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO29CQUMzQixVQUFVLEVBQUUsU0FBUyxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUMsV0FBVyxDQUFDLFVBQVU7aUJBQ3RFLENBQUM7WUFFSixLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUztnQkFDMUIsTUFBTSxJQUFJLEtBQUssQ0FDYix3REFBd0QsR0FBRyxFQUFFLENBQzlELENBQUM7WUFFSjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQ2xEO0lBQ0gsQ0FBQztJQUVPLGNBQWMsQ0FBQyxPQUFlO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyx1Q0FBdUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFdEUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDcEM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELGtFQUFrRTtJQUNsRSxtQ0FBbUM7SUFDM0IsT0FBTyxDQUFDLEdBQXNCOztRQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzQixNQUFNLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFFM0MsTUFBTSxXQUFXLFNBQUcsR0FBRyxDQUFDLElBQUksbUNBQUksRUFBRSxDQUFDO1FBRW5DLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDN0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUMvQixHQUFHLEVBQUUsQ0FDSCxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQ3pFLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFFLEdBQUcsQ0FBQyxVQUFVLG1DQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTNFLG1FQUFtRTtRQUNuRSxrRkFBa0Y7UUFFbEYsSUFBSSxTQUFTLEVBQUU7WUFDYixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUVwQyxNQUFNLHdCQUF3QixHQUM1QiwrQ0FBK0MsQ0FBQztZQUNsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1lBQ2xDLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7WUFFckMsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLEVBQUU7Z0JBQ2hDLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUNsQyxJQUFJLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsRUFBRTt3QkFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO3FCQUMzQztvQkFDRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO3dCQUNoQyxNQUFNLElBQUksS0FBSyxDQUNiLGtDQUFrQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQ3JELENBQUM7cUJBQ0g7b0JBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBRTdCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7aUJBQ25FO3FCQUFNLElBQUksR0FBRyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUMzQyxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRTt3QkFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO3FCQUMzQztvQkFDRCxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO3dCQUNyQyxNQUFNLEtBQUssQ0FDVCxvQ0FBb0MsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUN6RCxDQUFDO3FCQUNIO29CQUNELFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUVsQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2lCQUNyRTtxQkFBTTtvQkFDTCxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7aUJBQzNDO2FBQ0Y7U0FDRjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxJQUFZO1FBQ3hDLE9BQU8sZUFBZSxJQUFJLEdBQUcsQ0FBQztJQUNoQyxDQUFDO0lBRU8sc0JBQXNCLENBQzVCLEdBQVEsRUFDUixNQUFrQixFQUNsQixPQUFlLEVBQ2YsVUFBZ0MsRUFDaEMsUUFBOEI7UUFFOUIsK0NBQStDO1FBQy9DLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO1lBQ3RFLE1BQU0sSUFBSSxLQUFLLENBQ2IsOEJBQThCLFFBQVEsQ0FBQyxRQUFRLGlCQUFpQixDQUNqRSxDQUFDO1NBQ0g7UUFFRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQ3pDLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLE9BQU8sRUFDUCxVQUFVLENBQ1gsQ0FBQztRQUNGLG9GQUFvRjtRQUNwRixJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLElBQUksR0FBRyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMseUNBQXlDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzFFLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixvRkFBb0Y7WUFDcEYscUNBQXFDO1lBQ3JDLDRCQUE0QjtZQUM1QixFQUFFO1lBQ0YsZ0ZBQWdGO1lBQ2hGLDZDQUE2QztZQUM3QyxRQUFRLEdBQUc7Z0JBQ1QsSUFBSSxFQUFFLFFBQVEsQ0FBQyxRQUFRO2dCQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWE7YUFDekIsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFTyx3QkFBd0IsQ0FDOUIsR0FBUSxFQUNSLE1BQWtCLEVBQ2xCLFFBQThCLEVBQzlCLFFBQXVCOztRQUV2QixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBRXZDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFNUMsNkVBQTZFO1FBQzdFLDBDQUEwQztRQUMxQyxNQUFNLElBQUksU0FBRyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLG1DQUFJO1lBQ3ZELEtBQUssRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDO1lBQ3hCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsVUFBVSxFQUFFLElBQUk7WUFDaEIsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQztRQUVGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDdkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTNFLGtFQUFrRTtRQUNsRSxtRUFBbUU7UUFDbkUsMEJBQTBCO1FBQzFCLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRTtZQUN2QyxVQUFVLEVBQUUsY0FBYztZQUMxQixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDL0IsR0FBRyxFQUFFLEdBQUcsRUFBRTtnQkFDUixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFO29CQUMvQyxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07aUJBQ3hCLENBQUMsQ0FBQztnQkFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO29CQUNsQyxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07b0JBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUN0QixHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRTtpQkFDeEMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3pDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDM0MsQ0FBQztZQUNELEdBQUcsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFO29CQUMvQyxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07aUJBQ3hCLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsZUFBZSxDQUFDO29CQUNuQixNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07b0JBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUN0QixHQUFHLEVBQUU7d0JBQ0gsTUFBTTt3QkFDTixRQUFRLEVBQUUsWUFBWTt3QkFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQztxQkFDMUM7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUVILFNBQVMscUJBQXFCLENBQzVCLEdBQVEsRUFDUixZQUFvQjtZQUVwQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ2xFLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtnQkFDbEIsT0FBTyxNQUFNLENBQUM7YUFDZjtZQUNELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekMsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFO2dCQUMvQyxtRUFBbUU7Z0JBQ25FLE9BQU8sU0FBUyxDQUFDO2FBQ2xCO1lBQ0QsT0FBTyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDcEQsQ0FBQztJQUNILENBQUM7SUFFTyxvQkFBb0IsQ0FDMUIsR0FBUSxFQUNSLE1BQWtCLEVBQ2xCLE9BQWUsRUFDZixVQUFnQyxFQUNoQyxRQUE0QjtRQUU1QixpREFBaUQ7UUFDakQsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUU7WUFDdEUsTUFBTSxJQUFJLEtBQUssQ0FDYixnQ0FBZ0MsUUFBUSxDQUFDLE1BQU0sZUFBZSxDQUMvRCxDQUFDO1NBQ0g7UUFFRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQ3pDLFFBQVEsQ0FBQyxNQUFNLEVBQ2YsT0FBTyxFQUNQLFVBQVUsQ0FDWCxDQUFDO1FBRUYsd0ZBQXdGO1FBQ3hGLGtDQUFrQztRQUNsQyxJQUFJLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyx1Q0FBdUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDdEUsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLGtGQUFrRjtZQUNsRixxQ0FBcUM7WUFDckMsMENBQTBDO1lBQzFDLFVBQVUsR0FBRztnQkFDWCxJQUFJLEVBQUUsUUFBUSxDQUFDLE1BQU07Z0JBQ3JCLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUNyQyxVQUFVLEVBQUU7b0JBQ1Y7d0JBQ0UsSUFBSSxFQUFFLE1BQU07d0JBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhO3dCQUN4QixRQUFRLEVBQUUsSUFBSTtxQkFDZjtpQkFDRjtnQkFDRCxRQUFRLEVBQUUsSUFBSTthQUNmLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU8sc0JBQXNCLENBQzVCLEdBQVEsRUFDUixNQUFrQixFQUNsQixRQUE0QixFQUM1QixVQUF1QjtRQUV2QixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBRW5DLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRTtZQUNwQix3QkFBd0I7WUFDeEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFO2dCQUNyQyxVQUFVLEVBQUUsS0FBSztnQkFDakIsWUFBWSxFQUFFLEtBQUs7Z0JBQ25CLFFBQVEsRUFBRSxLQUFLO2dCQUNmLEtBQUssRUFBRSxDQUFDLEdBQUcsVUFBaUIsRUFBRSxFQUFFO29CQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLDhCQUE4QixFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUN0RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDdEUsT0FBTyxJQUFJLE9BQU8sQ0FBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRTs7d0JBQ3hDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQzt3QkFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUMsQ0FBQzt3QkFDOUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRzs0QkFDZixNQUFNOzRCQUNOLFFBQVE7NEJBQ1IsSUFBSTs0QkFDSixrQkFBa0IsUUFBRSxVQUFVLENBQUMsT0FBTyxtQ0FBSSxNQUFNOzRCQUNoRCxPQUFPOzRCQUNQLElBQUk7eUJBQ0wsQ0FBQztvQkFDSixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLHFEQUFxRDtZQUNyRCxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUU7Z0JBQ3JDLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixZQUFZLEVBQUUsS0FBSztnQkFDbkIsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsS0FBSyxFQUFFLENBQUMsR0FBRyxVQUFpQixFQUFFLEVBQUU7O29CQUM5QixJQUFJLENBQUMsTUFBTSxDQUNULDZCQUE2QixFQUM3QixRQUFRLEVBQ1IsTUFBTSxFQUNOLFVBQVUsQ0FDWCxDQUFDO29CQUNGLGdFQUFnRTtvQkFDaEUsMEVBQTBFO29CQUMxRSwrQkFBK0I7b0JBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7d0JBQ2xDLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTt3QkFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7d0JBQ3RCLE1BQU0sRUFBRTs0QkFDTixNQUFNOzRCQUNOLE1BQU0sRUFBRSxVQUFVOzRCQUNsQixJQUFJLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDO3lCQUNqRTtxQkFDRixDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQzlCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLFFBQUUsVUFBVSxDQUFDLE9BQU8sbUNBQUksTUFBTSxDQUFDLENBQUM7Z0JBQy9ELENBQUM7YUFDRixDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTyxpQkFBaUIsQ0FDdkIsTUFBa0IsRUFDbEIsVUFBa0IsRUFDbEIsSUFBVztRQUVYLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFeEMsOEVBQThFO1FBQzlFLDRFQUE0RTtRQUM1RSw2RUFBNkU7UUFDN0UseUJBQXlCO1FBQ3pCLDhFQUE4RTtRQUM5RSwrRUFBK0U7UUFDL0Usa0NBQWtDO1FBQ2xDLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDUCxFQUFFLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQ1AsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLFVBQVUsWUFBWSxDQUFDLENBQUM7YUFDeEQ7U0FDRjtRQUNELE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU8sd0JBQXdCLENBQzlCLE1BQWlDLEVBQ2pDLElBQVc7O1FBRVgsTUFBTSxNQUFNLFNBQXFCLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxVQUFVLG1DQUFJLEVBQUUsQ0FBQztRQUUxRCx5QkFBeUI7UUFDekIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDL0QsTUFBTSxJQUFJLEtBQUssQ0FDYixzQ0FBc0MsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLElBQUksQ0FBQyxNQUFNLGFBQWEsQ0FDaEcsQ0FBQztTQUNIO1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDdEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVwQixJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7Z0JBQ2xCLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7b0JBQ3RCLE9BQU87aUJBQ1IsQ0FBQyx5QkFBeUI7Z0JBQzNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO3dCQUM5QyxNQUFNLElBQUksS0FBSyxDQUNiLHlDQUNFLENBQUMsR0FBRyxDQUNOLDBCQUNFLEtBQUssQ0FBQyxJQUNSLGNBQWMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUN4RCxDQUFDO3FCQUNIO2lCQUNGO2FBQ0Y7aUJBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRTtnQkFDL0MsTUFBTSxJQUFJLEtBQUssQ0FDYixzRUFDRSxLQUFLLENBQUMsSUFDUixjQUFjLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDeEQsQ0FBQzthQUNIO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLFlBQW9CO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLFlBQVksRUFBRSxDQUFDLENBQUM7U0FDN0Q7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU8sV0FBVyxDQUFDLEdBQVc7UUFDN0IsTUFBTSxDQUFDLFlBQVksRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVqRCxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQzVCLE9BQU8sS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1QsTUFBTTthQUNQO1lBRUQsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQjtRQUNELElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQ2pEO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sZUFBZSxDQUFDLEdBQVc7O1FBQ2pDLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxVQUFVLGFBQWEsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsTUFBTSxLQUFLLFNBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLG1DQUFJLEVBQUUsQ0FBQztRQUM1QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQyxDQUFDO1NBQzVDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVPLGtCQUFrQixDQUN4QixVQUFrQixFQUNsQixHQUFXLEVBQ1gsVUFBcUI7UUFFckIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNQLE1BQU0sUUFBUSxHQUNaLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ2pDLENBQUMsQ0FBQyxvQkFBb0IsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDN0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNULE1BQU0sSUFBSSxLQUFLLENBQ2IsU0FBUyxHQUFHLEdBQUcsUUFBUSwyQkFBMkIsVUFBVSxHQUFHLENBQ2hFLENBQUM7U0FDSDtRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVPLHFCQUFxQixDQUMzQixVQUFrQixFQUNsQixRQUFnQixFQUNoQixhQUF1QixFQUFFOztRQUV6QixLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDLEVBQUU7WUFDM0MsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUNqQyxTQUFTO2FBQ1Y7WUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRTNDLE1BQU0sT0FBTyxTQUNWLFFBQWdELENBQUMsT0FBTyxtQ0FBSSxFQUFFLENBQUM7WUFFbEUsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7b0JBQ3pCLE9BQU8sQ0FBQyxDQUFDO2lCQUNWO2FBQ0Y7WUFFRCx1Q0FBdUM7WUFDdkMsTUFBTSxLQUFLLEdBQUc7Z0JBQ1gsUUFBMkIsQ0FBQyxJQUFJO2dCQUNqQyxHQUFHLE9BQUUsUUFBK0IsQ0FBQyxVQUFVLG1DQUFJLEVBQUUsQ0FBQzthQUN2RCxDQUFDO1lBQ0YsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxJQUFJLEVBQUU7b0JBQ1QsU0FBUztpQkFDVjtnQkFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLEtBQUssRUFBRTtvQkFDVCxPQUFPLEtBQUssQ0FBQztpQkFDZDthQUNGO1NBQ0Y7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU8sdUJBQXVCLENBQzdCLFFBQWdCLEVBQ2hCLFFBQWdCLEVBQ2hCLGFBQXVCLEVBQUU7O1FBRXpCLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUMsRUFBRTtZQUMzQyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ2pDLFNBQVM7YUFDVjtZQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFM0MsSUFBSSxVQUFVLENBQUM7WUFDZixJQUFJLEtBQUssQ0FBQztZQUVWLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDOUIsTUFBTSxhQUFhLEdBQUcsUUFBMEIsQ0FBQztnQkFDakQsVUFBVSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUM7Z0JBQ3RDLEtBQUssR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ3hEO2lCQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDekMsTUFBTSxpQkFBaUIsR0FBRyxRQUE4QixDQUFDO2dCQUN6RCxVQUFVLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxDQUFDO2dCQUMxQyxLQUFLLFNBQUcsaUJBQWlCLENBQUMsVUFBVSxtQ0FBSSxFQUFFLENBQUM7YUFDNUM7aUJBQU07Z0JBQ0wsTUFBTSxJQUFJLEtBQUssQ0FDYixnQkFBZ0IsUUFBUSxDQUFDLElBQUksMkJBQTJCLENBQ3pELENBQUM7YUFDSDtZQUVELEtBQUssTUFBTSxDQUFDLElBQUksVUFBVSxhQUFWLFVBQVUsY0FBVixVQUFVLEdBQUksRUFBRSxFQUFFO2dCQUNoQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO29CQUN2QixPQUFPLENBQUMsQ0FBQztpQkFDVjthQUNGO1lBRUQscUNBQXFDO1lBQ3JDLEtBQUssTUFBTSxPQUFPLElBQUksS0FBSyxFQUFFO2dCQUMzQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLEdBQUcsRUFBRTtvQkFDUCxPQUFPLEdBQUcsQ0FBQztpQkFDWjthQUNGO1NBQ0Y7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU8sb0JBQW9CLENBQzFCLFFBQWdCLEVBQ2hCLEdBQVcsRUFDWCxVQUFxQjtRQUVyQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsTUFBTSxRQUFRLEdBQ1osVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDakMsQ0FBQyxDQUFDLG9CQUFvQixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUM3QyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1QsTUFBTSxJQUFJLEtBQUssQ0FDYixRQUFRLEdBQUcsR0FBRyxRQUFRLDZCQUE2QixRQUFRLEdBQUcsQ0FDL0QsQ0FBQztTQUNIO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVPLFVBQVUsQ0FBQyxDQUFNLEVBQUUsWUFBc0M7UUFDL0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUNyQyxZQUFZLEVBQ1osSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2hDLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRXRELE1BQU0sSUFBSSxHQUF3QjtZQUNoQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM3QixVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3ZDLFVBQVUsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDM0MsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUNwQyxDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztRQUNuQyxLQUFLLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsSUFBSSxRQUFRLEVBQUU7WUFDdEQsSUFBSTtnQkFDRixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxXQUFXLENBQ3JELENBQUMsRUFDRCxPQUFPLEVBQ1AsSUFBSSxDQUNMLENBQUM7YUFDSDtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLHNFQUFzRTtnQkFDdEUsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDekIsTUFBTSxDQUFDLENBQUM7aUJBQ1Q7Z0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDeEI7U0FDRjtRQUVELE1BQU0sSUFBSSxLQUFLLENBQ2IsMENBQTBDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDOUQsQ0FBQztJQUNKLENBQUM7SUFFTyxZQUFZLENBQUMsQ0FBTSxFQUFFLFVBQW9DO1FBQy9ELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FDckMsVUFBVSxFQUNWLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUNoQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUV4RCxNQUFNLElBQUksR0FBd0I7WUFDaEMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDN0IsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN2QyxVQUFVLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzNDLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDdEMsQ0FBQztRQUVGLE1BQU0sTUFBTSxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7UUFDbkMsS0FBSyxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLElBQUksUUFBUSxFQUFFO1lBQ3RELElBQUk7Z0JBQ0YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDekU7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixzRUFBc0U7Z0JBQ3RFLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQ3pCLE1BQU0sQ0FBQyxDQUFDO2lCQUNUO2dCQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3hCO1NBQ0Y7UUFFRCxNQUFNLElBQUksS0FBSyxDQUNiLDBDQUEwQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQzlELENBQUM7SUFDSixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsRUFBUyxFQUFFLFVBQTZCO1FBQy9ELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRU8sa0JBQWtCLENBQUMsRUFBUyxFQUFFLFVBQTZCO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUM3QixFQUFFLEVBQ0YsVUFBVSxFQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUM3QixDQUFDO0lBQ0osQ0FBQztJQUVPLG1CQUFtQixDQUN6QixFQUFTLEVBQ1QsVUFBd0MsRUFDeEMsUUFBc0Q7UUFFdEQsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsYUFBVixVQUFVLGNBQVYsVUFBVSxHQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckMsTUFBTSxRQUFRLEdBQ1osVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUN4RSwwRUFBMEU7UUFDMUUsT0FBTyxRQUFRLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFO1lBQ2hELFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwRDtRQUNELElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0JBQWtCLElBQUksQ0FBQyxTQUFTLENBQzlCLEVBQUUsQ0FDSCxxREFDQyxVQUFVLENBQUMsTUFDYixHQUFHLENBQ0osQ0FBQztTQUNIO1FBQ0QsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxVQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTyxNQUFNLENBQUMsR0FBRyxJQUFXO1FBQzNCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixPQUFPLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7U0FDMUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssV0FBVyxDQUFJLElBQVksRUFBRSxFQUFXO1FBQzlDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUk7WUFDRixPQUFPLEVBQUUsRUFBRSxDQUFDO1NBQ2I7Z0JBQVM7WUFDUixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsR0FBUSxFQUFFLFFBQWdCO1FBQ3BELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2RCxJQUFJLFNBQVMsSUFBSSxHQUFHLEVBQUU7WUFDcEIsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsRUFBRTtJQUNGLG1CQUFtQjtJQUNuQixFQUFFO0lBRU0sU0FBUztRQUNmLE9BQU8sbUJBQW1CLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFTyxTQUFTO1FBQ2YsT0FBTyxrQkFBa0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVPLGdCQUFnQixDQUFJLEVBQVc7UUFDckMsT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSyxRQUFRLENBQUMsSUFBWSxFQUFFLFFBQWdCO1FBQzdDLE1BQU0sTUFBTSxHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDcEUsQ0FBQztDQUNGO0FBOXJDRCx3QkE4ckNDO0FBa0JELE1BQU0sUUFBUTtJQUNaLFlBQ2tCLFFBQXVCLEVBQ3ZCLE9BQVk7UUFEWixhQUFRLEdBQVIsUUFBUSxDQUFlO1FBQ3ZCLFlBQU8sR0FBUCxPQUFPLENBQUs7SUFDM0IsQ0FBQztDQUNMIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc3BlYyBmcm9tICdAanNpaS9zcGVjJztcbmltcG9ydCAqIGFzIGNwIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIHRhciBmcm9tICd0YXInO1xuaW1wb3J0ICogYXMgdm0gZnJvbSAndm0nO1xuXG5pbXBvcnQgKiBhcyBhcGkgZnJvbSAnLi9hcGknO1xuaW1wb3J0IHsgVE9LRU5fUkVGIH0gZnJvbSAnLi9hcGknO1xuaW1wb3J0IHsgT2JqZWN0VGFibGUsIHRhZ0pzaWlDb25zdHJ1Y3RvciB9IGZyb20gJy4vb2JqZWN0cyc7XG5pbXBvcnQgKiBhcyBvbkV4aXQgZnJvbSAnLi9vbi1leGl0JztcbmltcG9ydCAqIGFzIHdpcmUgZnJvbSAnLi9zZXJpYWxpemF0aW9uJztcblxuZXhwb3J0IGNsYXNzIEtlcm5lbCB7XG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSBmb3IgdmVyYm9zZSBkZWJ1Z2dpbmcuXG4gICAqL1xuICBwdWJsaWMgdHJhY2VFbmFibGVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBhc3NlbWJsaWVzOiB7IFtuYW1lOiBzdHJpbmddOiBBc3NlbWJseSB9ID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgb2JqZWN0cyA9IG5ldyBPYmplY3RUYWJsZSh0aGlzLl90eXBlSW5mb0ZvckZxbi5iaW5kKHRoaXMpKTtcbiAgcHJpdmF0ZSBjYnM6IHsgW2NiaWQ6IHN0cmluZ106IENhbGxiYWNrIH0gPSB7fTtcbiAgcHJpdmF0ZSB3YWl0aW5nOiB7IFtjYmlkOiBzdHJpbmddOiBDYWxsYmFjayB9ID0ge307XG4gIHByaXZhdGUgcHJvbWlzZXM6IHsgW3ByaWQ6IHN0cmluZ106IEFzeW5jSW52b2NhdGlvbiB9ID0ge307XG4gIHByaXZhdGUgbmV4dGlkID0gMjAwMDA7IC8vIGluY3JlbWVudGluZyBjb3VudGVyIGZvciBvYmppZCwgY2JpZCwgcHJvbWlzZWlkXG4gIHByaXZhdGUgc3luY0luUHJvZ3Jlc3M/OiBzdHJpbmc7IC8vIGZvcmJpZHMgYXN5bmMgY2FsbHMgKGJlZ2luKSB3aGlsZSBwcm9jZXNzaW5nIHN5bmMgY2FsbHMgKGdldC9zZXQvaW52b2tlKVxuICBwcml2YXRlIGluc3RhbGxEaXI/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzYW5kYm94OiB2bS5Db250ZXh0O1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEganNpaSBrZXJuZWwgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2tIYW5kbGVyIFRoaXMgaGFuZGxlciBpcyBpbnZva2VkIHdoZW4gYSBzeW5jaHJvbm91cyBjYWxsYmFjayBpcyBjYWxsZWQuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgSXQncyByZXNwb25zaWJpbGl0eSBpcyB0byBleGVjdXRlIHRoZSBjYWxsYmFjayBhbmQgcmV0dXJuIGl0J3NcbiAgICogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKG9yIHRocm93IGFuIGVycm9yKS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgY2FsbGJhY2tIYW5kbGVyOiAoY2FsbGJhY2s6IGFwaS5DYWxsYmFjaykgPT4gYW55KSB7XG4gICAgLy8gYHNldEltbWVkaWF0ZWAgaXMgcmVxdWlyZWQgZm9yIHRlc3RzIHRvIHBhc3MgKGl0IGlzIG90aGVyd2lzZVxuICAgIC8vIGltcG9zc2libGUgdG8gd2FpdCBmb3IgaW4tVk0gcHJvbWlzZXMgdG8gY29tcGxldGUpXG5cbiAgICAvLyBgQnVmZmVyYCBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIHNpbXBsZS1yZXNvdXJjZS1idW5kbGVyLlxuXG4gICAgLy8gSEFDSzogd2hlbiB3ZSB3ZWJwYWNrIEBqc2lpL3J1bnRpbWUsIGFsbCBcInJlcXVpcmVcIiBzdGF0ZW1lbnRzIGdldCB0cmFuc3BpbGVkLFxuICAgIC8vIHNvIG1vZHVsZXMgY2FuIGJlIHJlc29sdmVkIHdpdGhpbiB0aGUgcGFjay4gSG93ZXZlciwgaGVyZSB3ZSBhY3R1YWxseSB3YW50IHRvXG4gICAgLy8gbGV0IGxvYWRlZCBtb2R1bGVzIHRvIHVzZSB0aGUgbmF0aXZlIG5vZGUgXCJyZXF1aXJlXCIgbWV0aG9kLlxuICAgIC8vIEkgd29uZGVyIGlmIHdlYnBhY2sgaGFzIHNvbWUgcHJhZ21hIHRoYXQgYWxsb3dzIG9wdGluZy1vdXQgYXQgY2VydGFpbiBwb2ludHNcbiAgICAvLyBpbiB0aGUgY29kZS5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgY29uc3QgbW9kdWxlTG9hZCA9IHJlcXVpcmUoJ21vZHVsZScpLk1vZHVsZS5fbG9hZDtcbiAgICBjb25zdCBub2RlUmVxdWlyZSA9IChwOiBzdHJpbmcpID0+IG1vZHVsZUxvYWQocCwgbW9kdWxlLCBmYWxzZSk7XG5cbiAgICB0aGlzLnNhbmRib3ggPSB2bS5jcmVhdGVDb250ZXh0KHtcbiAgICAgIEJ1ZmZlciwgLy8gdG8gdXNlIHNpbXBsZS1yZXNvdXJjZS1idW5kbGVyXG4gICAgICBzZXRJbW1lZGlhdGUsIC8vIGFzeW5jIHRlc3RzXG4gICAgICByZXF1aXJlOiBub2RlUmVxdWlyZSwgLy8gbW9kdWxlcyBuZWVkIHRvIFwicmVxdWlyZVwiXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbG9hZChyZXE6IGFwaS5Mb2FkUmVxdWVzdCk6IGFwaS5Mb2FkUmVzcG9uc2Uge1xuICAgIHRoaXMuX2RlYnVnKCdsb2FkJywgcmVxKTtcblxuICAgIGlmICgnYXNzZW1ibHknIGluIHJlcSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnYGFzc2VtYmx5YCBmaWVsZCBpcyBkZXByZWNhdGVkIGZvciBcImxvYWRcIiwgdXNlIGBuYW1lYCwgYHZlcnNpb25gIGFuZCBgdGFyYmFsbGAgaW5zdGVhZCcsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHBrZ25hbWUgPSByZXEubmFtZTtcbiAgICBjb25zdCBwa2d2ZXIgPSByZXEudmVyc2lvbjtcblxuICAgIC8vIGNoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSBzdWNoIGEgbW9kdWxlXG4gICAgY29uc3QgcGFja2FnZURpciA9IHRoaXMuX2dldFBhY2thZ2VEaXIocGtnbmFtZSk7XG4gICAgaWYgKGZzLnBhdGhFeGlzdHNTeW5jKHBhY2thZ2VEaXIpKSB7XG4gICAgICAvLyBtb2R1bGUgZXhpc3RzLCB2ZXJpZnkgdmVyc2lvblxuICAgICAgY29uc3QgZXBrZyA9IGZzLnJlYWRKc29uU3luYyhwYXRoLmpvaW4ocGFja2FnZURpciwgJ3BhY2thZ2UuanNvbicpKTtcbiAgICAgIGlmIChlcGtnLnZlcnNpb24gIT09IHBrZ3Zlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYE11bHRpcGxlIHZlcnNpb25zICR7cGtndmVyfSBhbmQgJHtlcGtnLnZlcnNpb259IG9mIHRoZSBgICtcbiAgICAgICAgICAgIGBwYWNrYWdlICcke3BrZ25hbWV9JyBjYW5ub3QgYmUgbG9hZGVkIHRvZ2V0aGVyIHNpbmNlIHRoaXMgaXMgdW5zdXBwb3J0ZWQgYnkgYCArXG4gICAgICAgICAgICAnc29tZSBydW50aW1lIGVudmlyb25tZW50cycsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIHNhbWUgdmVyc2lvbiwgbm8tb3BcbiAgICAgIHRoaXMuX2RlYnVnKCdsb29rIHVwIGFscmVhZHktbG9hZGVkIGFzc2VtYmx5JywgcGtnbmFtZSk7XG4gICAgICBjb25zdCBhc3NtID0gdGhpcy5hc3NlbWJsaWVzW3BrZ25hbWVdO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhc3NlbWJseTogYXNzbS5tZXRhZGF0YS5uYW1lLFxuICAgICAgICB0eXBlczogT2JqZWN0LmtleXMoYXNzbS5tZXRhZGF0YS50eXBlcyA/PyB7fSkubGVuZ3RoLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIGluc3RhbGwgZGlyZWN0b3J5ICh0aGVyZSBtYXkgYmUgc2V2ZXJhbCBwYXRoIGNvbXBvbmVudHMgZm9yIEBzY29wZWQvcGFja2FnZXMpXG4gICAgZnMubWtkaXJwU3luYyhwYWNrYWdlRGlyKTtcblxuICAgIC8vIEZvcmNlIHVtYXNrIHRvIGhhdmUgbnBtLWluc3RhbGwtbGlrZSBwZXJtaXNzaW9uc1xuICAgIGNvbnN0IG9yaWdpbmFsVW1hc2sgPSBwcm9jZXNzLnVtYXNrKDBvMDIyKTtcbiAgICB0cnkge1xuICAgICAgLy8gdW50YXIgdGhlIGFyY2hpdmUgdG8gaXRzIGZpbmFsIGxvY2F0aW9uXG4gICAgICB0YXIuZXh0cmFjdCh7XG4gICAgICAgIGN3ZDogcGFja2FnZURpcixcbiAgICAgICAgZmlsZTogcmVxLnRhcmJhbGwsXG4gICAgICAgIHN0cmljdDogdHJ1ZSxcbiAgICAgICAgc3RyaXA6IDEsIC8vIFJlbW92ZXMgdGhlICdwYWNrYWdlLycgcGF0aCBlbGVtZW50IGZyb20gZW50cmllc1xuICAgICAgICBzeW5jOiB0cnVlLFxuICAgICAgICB1bmxpbms6IHRydWUsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gUmVzZXQgdW1hc2sgdG8gdGhlIGluaXRpYWwgdmFsdWVcbiAgICAgIHByb2Nlc3MudW1hc2sob3JpZ2luYWxVbWFzayk7XG4gICAgfVxuXG4gICAgLy8gcmVhZCAuanNpaSBtZXRhZGF0YSBmcm9tIHRoZSByb290IG9mIHRoZSBwYWNrYWdlXG4gICAgY29uc3QganNpaU1ldGFkYXRhRmlsZSA9IHBhdGguam9pbihwYWNrYWdlRGlyLCBzcGVjLlNQRUNfRklMRV9OQU1FKTtcbiAgICBpZiAoIWZzLnBhdGhFeGlzdHNTeW5jKGpzaWlNZXRhZGF0YUZpbGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBQYWNrYWdlIHRhcmJhbGwgJHtyZXEudGFyYmFsbH0gbXVzdCBoYXZlIGEgZmlsZSBuYW1lZCAke3NwZWMuU1BFQ19GSUxFX05BTUV9IGF0IHRoZSByb290YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGFzc21TcGVjID0gZnMucmVhZEpzb25TeW5jKGpzaWlNZXRhZGF0YUZpbGUpIGFzIHNwZWMuQXNzZW1ibHk7XG5cbiAgICAvLyBsb2FkIHRoZSBtb2R1bGUgYW5kIGNhcHR1cmUgaXQncyBjbG9zdXJlXG4gICAgY29uc3QgY2xvc3VyZSA9IHRoaXMuX2V4ZWN1dGUoXG4gICAgICBgcmVxdWlyZShTdHJpbmcucmF3XFxgJHtwYWNrYWdlRGlyfVxcYClgLFxuICAgICAgcGFja2FnZURpcixcbiAgICApO1xuICAgIGNvbnN0IGFzc20gPSBuZXcgQXNzZW1ibHkoYXNzbVNwZWMsIGNsb3N1cmUpO1xuICAgIHRoaXMuX2FkZEFzc2VtYmx5KGFzc20pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFzc2VtYmx5OiBhc3NtU3BlYy5uYW1lLFxuICAgICAgdHlwZXM6IE9iamVjdC5rZXlzKGFzc21TcGVjLnR5cGVzID8/IHt9KS5sZW5ndGgsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBpbnZva2VCaW5TY3JpcHQoXG4gICAgcmVxOiBhcGkuSW52b2tlU2NyaXB0UmVxdWVzdCxcbiAgKTogYXBpLkludm9rZVNjcmlwdFJlc3BvbnNlIHtcbiAgICBjb25zdCBwYWNrYWdlRGlyID0gdGhpcy5fZ2V0UGFja2FnZURpcihyZXEuYXNzZW1ibHkpO1xuICAgIGlmIChmcy5wYXRoRXhpc3RzU3luYyhwYWNrYWdlRGlyKSkge1xuICAgICAgLy8gbW9kdWxlIGV4aXN0cywgdmVyaWZ5IHZlcnNpb25cbiAgICAgIGNvbnN0IGVwa2cgPSBmcy5yZWFkSnNvblN5bmMocGF0aC5qb2luKHBhY2thZ2VEaXIsICdwYWNrYWdlLmpzb24nKSk7XG5cbiAgICAgIGlmICghZXBrZy5iaW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBpcyBubyBiaW4gc2NyaXB0cyBkZWZpbmVkIGZvciB0aGlzIHBhY2thZ2UuJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNjcmlwdFBhdGggPSBlcGtnLmJpbltyZXEuc2NyaXB0XTtcblxuICAgICAgaWYgKCFlcGtnLmJpbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNjcmlwdCB3aXRoIG5hbWUgJHtyZXEuc2NyaXB0fSB3YXMgbm90IGRlZmluZWQuYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNwLnNwYXduU3luYyhcbiAgICAgICAgcGF0aC5qb2luKHBhY2thZ2VEaXIsIHNjcmlwdFBhdGgpLFxuICAgICAgICByZXEuYXJncyA/PyBbXSxcbiAgICAgICAge1xuICAgICAgICAgIGVuY29kaW5nOiAndXRmLTgnLFxuICAgICAgICAgIGVudjoge1xuICAgICAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGN1cnJlbnQgTk9ERV9PUFRJT05TIGFyZSBob25vcmVkIGlmIHdlIHNoZWxsIG91dCB0byBub2RlXG4gICAgICAgICAgICBOT0RFX09QVElPTlM6IHByb2Nlc3MuZXhlY0FyZ3Yuam9pbignICcpLFxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIFwidGhpc1wiIG5vZGUgaXMgYWhlYWQgb2YgJFBBVEgganVzdCBpbiBjYXNlXG4gICAgICAgICAgICBQQVRIOiBgJHtwYXRoLmRpcm5hbWUocHJvY2Vzcy5leGVjUGF0aCl9OiR7cHJvY2Vzcy5lbnYuUEFUSH1gLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2hlbGw6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGRvdXQ6IHJlc3VsdC5zdGRvdXQsXG4gICAgICAgIHN0ZGVycjogcmVzdWx0LnN0ZGVycixcbiAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgICBzaWduYWw6IHJlc3VsdC5zaWduYWwsXG4gICAgICB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBhY2thZ2Ugd2l0aCBuYW1lICR7cmVxLmFzc2VtYmx5fSB3YXMgbm90IGxvYWRlZC5gKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGUocmVxOiBhcGkuQ3JlYXRlUmVxdWVzdCk6IGFwaS5DcmVhdGVSZXNwb25zZSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZShyZXEpO1xuICB9XG5cbiAgcHVibGljIGRlbChyZXE6IGFwaS5EZWxSZXF1ZXN0KTogYXBpLkRlbFJlc3BvbnNlIHtcbiAgICBjb25zdCB7IG9ianJlZiB9ID0gcmVxO1xuXG4gICAgdGhpcy5fZGVidWcoJ2RlbCcsIG9ianJlZik7XG4gICAgdGhpcy5vYmplY3RzLmRlbGV0ZU9iamVjdChvYmpyZWYpO1xuXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHVibGljIHNnZXQocmVxOiBhcGkuU3RhdGljR2V0UmVxdWVzdCk6IGFwaS5HZXRSZXNwb25zZSB7XG4gICAgY29uc3QgeyBmcW4sIHByb3BlcnR5IH0gPSByZXE7XG4gICAgY29uc3Qgc3ltYm9sID0gYCR7ZnFufS4ke3Byb3BlcnR5fWA7XG4gICAgdGhpcy5fZGVidWcoJ3NnZXQnLCBzeW1ib2wpO1xuICAgIGNvbnN0IHRpID0gdGhpcy5fdHlwZUluZm9Gb3JQcm9wZXJ0eShwcm9wZXJ0eSwgZnFuKTtcblxuICAgIGlmICghdGkuc3RhdGljKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByb3BlcnR5ICR7c3ltYm9sfSBpcyBub3Qgc3RhdGljYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG90eXBlID0gdGhpcy5fZmluZFN5bWJvbChmcW4pO1xuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9lbnN1cmVTeW5jKGBwcm9wZXJ0eSAke3Byb3BlcnR5fWAsICgpID0+XG4gICAgICB0aGlzLl93cmFwU2FuZGJveENvZGUoKCkgPT4gcHJvdG90eXBlW3Byb3BlcnR5XSksXG4gICAgKTtcblxuICAgIHRoaXMuX2RlYnVnKCd2YWx1ZTonLCB2YWx1ZSk7XG4gICAgY29uc3QgcmV0ID0gdGhpcy5fZnJvbVNhbmRib3godmFsdWUsIHRpKTtcbiAgICB0aGlzLl9kZWJ1ZygncmV0JywgcmV0KTtcbiAgICByZXR1cm4geyB2YWx1ZTogcmV0IH07XG4gIH1cblxuICBwdWJsaWMgc3NldChyZXE6IGFwaS5TdGF0aWNTZXRSZXF1ZXN0KTogYXBpLlNldFJlc3BvbnNlIHtcbiAgICBjb25zdCB7IGZxbiwgcHJvcGVydHksIHZhbHVlIH0gPSByZXE7XG4gICAgY29uc3Qgc3ltYm9sID0gYCR7ZnFufS4ke3Byb3BlcnR5fWA7XG4gICAgdGhpcy5fZGVidWcoJ3NzZXQnLCBzeW1ib2wpO1xuICAgIGNvbnN0IHRpID0gdGhpcy5fdHlwZUluZm9Gb3JQcm9wZXJ0eShwcm9wZXJ0eSwgZnFuKTtcblxuICAgIGlmICghdGkuc3RhdGljKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByb3BlcnR5ICR7c3ltYm9sfSBpcyBub3Qgc3RhdGljYCk7XG4gICAgfVxuXG4gICAgaWYgKHRpLmltbXV0YWJsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBzdGF0aWMgcHJvcGVydHkgJHtzeW1ib2x9IGlzIHJlYWRvbmx5YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG90eXBlID0gdGhpcy5fZmluZFN5bWJvbChmcW4pO1xuXG4gICAgdGhpcy5fZW5zdXJlU3luYyhgcHJvcGVydHkgJHtwcm9wZXJ0eX1gLCAoKSA9PlxuICAgICAgdGhpcy5fd3JhcFNhbmRib3hDb2RlKFxuICAgICAgICAoKSA9PiAocHJvdG90eXBlW3Byb3BlcnR5XSA9IHRoaXMuX3RvU2FuZGJveCh2YWx1ZSwgdGkpKSxcbiAgICAgICksXG4gICAgKTtcblxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQocmVxOiBhcGkuR2V0UmVxdWVzdCk6IGFwaS5HZXRSZXNwb25zZSB7XG4gICAgY29uc3QgeyBvYmpyZWYsIHByb3BlcnR5IH0gPSByZXE7XG4gICAgdGhpcy5fZGVidWcoJ2dldCcsIG9ianJlZiwgcHJvcGVydHkpO1xuICAgIGNvbnN0IHsgaW5zdGFuY2UsIGZxbiwgaW50ZXJmYWNlcyB9ID0gdGhpcy5vYmplY3RzLmZpbmRPYmplY3Qob2JqcmVmKTtcbiAgICBjb25zdCB0aSA9IHRoaXMuX3R5cGVJbmZvRm9yUHJvcGVydHkocHJvcGVydHksIGZxbiwgaW50ZXJmYWNlcyk7XG5cbiAgICAvLyBpZiB0aGUgcHJvcGVydHkgaXMgb3ZlcnJpZGRlbiBieSB0aGUgbmF0aXZlIGNvZGUgYW5kIFwiZ2V0XCIgaXMgY2FsbGVkIG9uIHRoZSBvYmplY3QsIGl0XG4gICAgLy8gbWVhbnMgdGhhdCB0aGUgbmF0aXZlIGNvZGUgaXMgdHJ5aW5nIHRvIGFjY2VzcyB0aGUgXCJzdXBlclwiIHByb3BlcnR5LiBpbiBvcmRlciB0byBlbmFibGVcbiAgICAvLyB0aGF0LCB3ZSBhY3R1YWxseSBrZWVwIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgcHJvcGVydHkgZGVzY3JpcHRvciB3aGVuIHdlIG92ZXJyaWRlLFxuICAgIC8vIHNvIGBmaW5kUHJvcGVydHlUYXJnZXRgIHdpbGwgcmV0dXJuIGVpdGhlciB0aGUgb3JpZ2luYWwgcHJvcGVydHkgbmFtZSAoXCJwcm9wZXJ0eVwiKSBvclxuICAgIC8vIHRoZSBcInN1cGVyXCIgcHJvcGVydHkgbmFtZSAoc29tZWhpbmcgbGlrZSBcIiRqc2lpJHN1cGVyJDxwcm9wZXJ0eT4kXCIpLlxuICAgIGNvbnN0IHByb3BlcnR5VG9HZXQgPSB0aGlzLl9maW5kUHJvcGVydHlUYXJnZXQoaW5zdGFuY2UsIHByb3BlcnR5KTtcblxuICAgIC8vIG1ha2UgdGhlIGFjdHVhbCBcImdldFwiLCBhbmQgYmxvY2sgYW55IGFzeW5jIGNhbGxzIHRoYXQgbWlnaHQgYmUgcGVyZm9ybWVkXG4gICAgLy8gYnkganNpaSBvdmVycmlkZXMuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9lbnN1cmVTeW5jKFxuICAgICAgYHByb3BlcnR5ICcke29ianJlZltUT0tFTl9SRUZdfS4ke3Byb3BlcnR5VG9HZXR9J2AsXG4gICAgICAoKSA9PiB0aGlzLl93cmFwU2FuZGJveENvZGUoKCkgPT4gaW5zdGFuY2VbcHJvcGVydHlUb0dldF0pLFxuICAgICk7XG4gICAgdGhpcy5fZGVidWcoJ3ZhbHVlOicsIHZhbHVlKTtcbiAgICBjb25zdCByZXQgPSB0aGlzLl9mcm9tU2FuZGJveCh2YWx1ZSwgdGkpO1xuICAgIHRoaXMuX2RlYnVnKCdyZXQ6JywgcmV0KTtcbiAgICByZXR1cm4geyB2YWx1ZTogcmV0IH07XG4gIH1cblxuICBwdWJsaWMgc2V0KHJlcTogYXBpLlNldFJlcXVlc3QpOiBhcGkuU2V0UmVzcG9uc2Uge1xuICAgIGNvbnN0IHsgb2JqcmVmLCBwcm9wZXJ0eSwgdmFsdWUgfSA9IHJlcTtcbiAgICB0aGlzLl9kZWJ1Zygnc2V0Jywgb2JqcmVmLCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgIGNvbnN0IHsgaW5zdGFuY2UsIGZxbiwgaW50ZXJmYWNlcyB9ID0gdGhpcy5vYmplY3RzLmZpbmRPYmplY3Qob2JqcmVmKTtcblxuICAgIGNvbnN0IHByb3BJbmZvID0gdGhpcy5fdHlwZUluZm9Gb3JQcm9wZXJ0eShyZXEucHJvcGVydHksIGZxbiwgaW50ZXJmYWNlcyk7XG5cbiAgICBpZiAocHJvcEluZm8uaW1tdXRhYmxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3Qgc2V0IHZhbHVlIG9mIGltbXV0YWJsZSBwcm9wZXJ0eSAke3JlcS5wcm9wZXJ0eX0gdG8gJHtyZXEudmFsdWV9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvcGVydHlUb1NldCA9IHRoaXMuX2ZpbmRQcm9wZXJ0eVRhcmdldChpbnN0YW5jZSwgcHJvcGVydHkpO1xuXG4gICAgdGhpcy5fZW5zdXJlU3luYyhgcHJvcGVydHkgJyR7b2JqcmVmW1RPS0VOX1JFRl19LiR7cHJvcGVydHlUb1NldH0nYCwgKCkgPT5cbiAgICAgIHRoaXMuX3dyYXBTYW5kYm94Q29kZShcbiAgICAgICAgKCkgPT4gKGluc3RhbmNlW3Byb3BlcnR5VG9TZXRdID0gdGhpcy5fdG9TYW5kYm94KHZhbHVlLCBwcm9wSW5mbykpLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHVibGljIGludm9rZShyZXE6IGFwaS5JbnZva2VSZXF1ZXN0KTogYXBpLkludm9rZVJlc3BvbnNlIHtcbiAgICBjb25zdCB7IG9ianJlZiwgbWV0aG9kIH0gPSByZXE7XG4gICAgY29uc3QgYXJncyA9IHJlcS5hcmdzID8/IFtdO1xuXG4gICAgdGhpcy5fZGVidWcoJ2ludm9rZScsIG9ianJlZiwgbWV0aG9kLCBhcmdzKTtcbiAgICBjb25zdCB7IHRpLCBvYmosIGZuIH0gPSB0aGlzLl9maW5kSW52b2tlVGFyZ2V0KG9ianJlZiwgbWV0aG9kLCBhcmdzKTtcblxuICAgIC8vIHZlcmlmeSB0aGlzIGlzIG5vdCBhbiBhc3luYyBtZXRob2RcbiAgICBpZiAodGkuYXN5bmMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHttZXRob2R9IGlzIGFuIGFzeW5jIG1ldGhvZCwgdXNlIFwiYmVnaW5cIiBpbnN0ZWFkYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0ID0gdGhpcy5fZW5zdXJlU3luYyhcbiAgICAgIGBtZXRob2QgJyR7b2JqcmVmW1RPS0VOX1JFRl19LiR7bWV0aG9kfSdgLFxuICAgICAgKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fd3JhcFNhbmRib3hDb2RlKCgpID0+XG4gICAgICAgICAgZm4uYXBwbHkob2JqLCB0aGlzLl90b1NhbmRib3hWYWx1ZXMoYXJncywgdGkucGFyYW1ldGVycykpLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fZnJvbVNhbmRib3gocmV0LCB0aS5yZXR1cm5zID8/ICd2b2lkJyk7XG4gICAgdGhpcy5fZGVidWcoJ2ludm9rZSByZXN1bHQnLCByZXN1bHQpO1xuXG4gICAgcmV0dXJuIHsgcmVzdWx0IH07XG4gIH1cblxuICBwdWJsaWMgc2ludm9rZShyZXE6IGFwaS5TdGF0aWNJbnZva2VSZXF1ZXN0KTogYXBpLkludm9rZVJlc3BvbnNlIHtcbiAgICBjb25zdCB7IGZxbiwgbWV0aG9kIH0gPSByZXE7XG4gICAgY29uc3QgYXJncyA9IHJlcS5hcmdzID8/IFtdO1xuXG4gICAgdGhpcy5fZGVidWcoJ3NpbnZva2UnLCBmcW4sIG1ldGhvZCwgYXJncyk7XG5cbiAgICBjb25zdCB0aSA9IHRoaXMuX3R5cGVJbmZvRm9yTWV0aG9kKG1ldGhvZCwgZnFuKTtcblxuICAgIGlmICghdGkuc3RhdGljKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZnFufS4ke21ldGhvZH0gaXMgbm90IGEgc3RhdGljIG1ldGhvZGApO1xuICAgIH1cblxuICAgIC8vIHZlcmlmeSB0aGlzIGlzIG5vdCBhbiBhc3luYyBtZXRob2RcbiAgICBpZiAodGkuYXN5bmMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHttZXRob2R9IGlzIGFuIGFzeW5jIG1ldGhvZCwgdXNlIFwiYmVnaW5cIiBpbnN0ZWFkYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG90eXBlID0gdGhpcy5fZmluZFN5bWJvbChmcW4pO1xuICAgIGNvbnN0IGZuID0gcHJvdG90eXBlW21ldGhvZF0gYXMgKC4uLnBhcmFtczogYW55W10pID0+IGFueTtcblxuICAgIGNvbnN0IHJldCA9IHRoaXMuX2Vuc3VyZVN5bmMoYG1ldGhvZCAnJHtmcW59LiR7bWV0aG9kfSdgLCAoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JhcFNhbmRib3hDb2RlKCgpID0+XG4gICAgICAgIGZuLmFwcGx5KHByb3RvdHlwZSwgdGhpcy5fdG9TYW5kYm94VmFsdWVzKGFyZ3MsIHRpLnBhcmFtZXRlcnMpKSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9kZWJ1ZygnbWV0aG9kIHJldHVybmVkOicsIHJldCk7XG4gICAgcmV0dXJuIHsgcmVzdWx0OiB0aGlzLl9mcm9tU2FuZGJveChyZXQsIHRpLnJldHVybnMgPz8gJ3ZvaWQnKSB9O1xuICB9XG5cbiAgcHVibGljIGJlZ2luKHJlcTogYXBpLkJlZ2luUmVxdWVzdCk6IGFwaS5CZWdpblJlc3BvbnNlIHtcbiAgICBjb25zdCB7IG9ianJlZiwgbWV0aG9kIH0gPSByZXE7XG4gICAgY29uc3QgYXJncyA9IHJlcS5hcmdzID8/IFtdO1xuXG4gICAgdGhpcy5fZGVidWcoJ2JlZ2luJywgb2JqcmVmLCBtZXRob2QsIGFyZ3MpO1xuXG4gICAgaWYgKHRoaXMuc3luY0luUHJvZ3Jlc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBpbnZva2UgYXN5bmMgbWV0aG9kICcke3JlcS5vYmpyZWZbVE9LRU5fUkVGXX0uJHtyZXEubWV0aG9kfScgd2hpbGUgc3luYyAke3RoaXMuc3luY0luUHJvZ3Jlc3N9IGlzIGJlaW5nIHByb2Nlc3NlZGAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHsgdGksIG9iaiwgZm4gfSA9IHRoaXMuX2ZpbmRJbnZva2VUYXJnZXQob2JqcmVmLCBtZXRob2QsIGFyZ3MpO1xuXG4gICAgLy8gdmVyaWZ5IHRoaXMgaXMgaW5kZWVkIGFuIGFzeW5jIG1ldGhvZFxuICAgIGlmICghdGkuYXN5bmMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWV0aG9kICR7bWV0aG9kfSBpcyBleHBlY3RlZCB0byBiZSBhbiBhc3luYyBtZXRob2RgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9taXNlID0gdGhpcy5fd3JhcFNhbmRib3hDb2RlKCgpID0+XG4gICAgICBmbi5hcHBseShvYmosIHRoaXMuX3RvU2FuZGJveFZhbHVlcyhhcmdzLCB0aS5wYXJhbWV0ZXJzKSksXG4gICAgKSBhcyBQcm9taXNlPGFueT47XG5cbiAgICAvLyBzaW5jZSB3ZSBhcmUgcGxhbm5pbmcgdG8gcmVzb2x2ZSB0aGlzIHByb21pc2UgaW4gYSBkaWZmZXJlbnQgc2NvcGVcbiAgICAvLyB3ZSBuZWVkIHRvIGhhbmRsZSByZWplY3Rpb25zIGhlcmUgWzFdXG4gICAgLy8gWzFdOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80MDkyMDE3OS9zaG91bGQtaS1yZWZyYWluLWZyb20taGFuZGxpbmctcHJvbWlzZS1yZWplY3Rpb24tYXN5bmNocm9ub3VzbHkvNDA5MjE1MDVcbiAgICBwcm9taXNlLmNhdGNoKChfKSA9PiB1bmRlZmluZWQpO1xuXG4gICAgY29uc3QgcHJpZCA9IHRoaXMuX21ha2VwcmlkKCk7XG4gICAgdGhpcy5wcm9taXNlc1twcmlkXSA9IHtcbiAgICAgIHByb21pc2UsXG4gICAgICBtZXRob2Q6IHRpLFxuICAgIH07XG5cbiAgICByZXR1cm4geyBwcm9taXNlaWQ6IHByaWQgfTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBlbmQocmVxOiBhcGkuRW5kUmVxdWVzdCk6IFByb21pc2U8YXBpLkVuZFJlc3BvbnNlPiB7XG4gICAgY29uc3QgeyBwcm9taXNlaWQgfSA9IHJlcTtcblxuICAgIHRoaXMuX2RlYnVnKCdlbmQnLCBwcm9taXNlaWQpO1xuXG4gICAgY29uc3QgeyBwcm9taXNlLCBtZXRob2QgfSA9IHRoaXMucHJvbWlzZXNbcHJvbWlzZWlkXTtcbiAgICBpZiAocHJvbWlzZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHByb21pc2Ugd2l0aCBJRDogJHtwcm9taXNlaWR9YCk7XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdDtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gYXdhaXQgcHJvbWlzZTtcbiAgICAgIHRoaXMuX2RlYnVnKCdwcm9taXNlIHJlc3VsdDonLCByZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2RlYnVnKCdwcm9taXNlIGVycm9yOicsIGUpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICByZXR1cm4geyByZXN1bHQ6IHRoaXMuX2Zyb21TYW5kYm94KHJlc3VsdCwgbWV0aG9kLnJldHVybnMgPz8gJ3ZvaWQnKSB9O1xuICB9XG5cbiAgcHVibGljIGNhbGxiYWNrcyhfcmVxPzogYXBpLkNhbGxiYWNrc1JlcXVlc3QpOiBhcGkuQ2FsbGJhY2tzUmVzcG9uc2Uge1xuICAgIHRoaXMuX2RlYnVnKCdjYWxsYmFja3MnKTtcbiAgICBjb25zdCByZXQgPSBPYmplY3Qua2V5cyh0aGlzLmNicykubWFwKChjYmlkKSA9PiB7XG4gICAgICBjb25zdCBjYiA9IHRoaXMuY2JzW2NiaWRdO1xuICAgICAgdGhpcy53YWl0aW5nW2NiaWRdID0gY2I7IC8vIG1vdmUgdG8gd2FpdGluZ1xuICAgICAgY29uc3QgY2FsbGJhY2s6IGFwaS5DYWxsYmFjayA9IHtcbiAgICAgICAgY2JpZCxcbiAgICAgICAgY29va2llOiBjYi5vdmVycmlkZS5jb29raWUsXG4gICAgICAgIGludm9rZToge1xuICAgICAgICAgIG9ianJlZjogY2Iub2JqcmVmLFxuICAgICAgICAgIG1ldGhvZDogY2Iub3ZlcnJpZGUubWV0aG9kLFxuICAgICAgICAgIGFyZ3M6IGNiLmFyZ3MsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGNhbGxiYWNrO1xuICAgIH0pO1xuXG4gICAgLy8gbW92ZSBhbGwgY2FsbGJhY2tzIHRvIHRoZSB3YWl0IHF1ZXVlIGFuZCBjbGVhbiB0aGUgY2FsbGJhY2sgcXVldWUuXG4gICAgdGhpcy5jYnMgPSB7fTtcbiAgICByZXR1cm4geyBjYWxsYmFja3M6IHJldCB9O1xuICB9XG5cbiAgcHVibGljIGNvbXBsZXRlKHJlcTogYXBpLkNvbXBsZXRlUmVxdWVzdCk6IGFwaS5Db21wbGV0ZVJlc3BvbnNlIHtcbiAgICBjb25zdCB7IGNiaWQsIGVyciwgcmVzdWx0IH0gPSByZXE7XG5cbiAgICB0aGlzLl9kZWJ1ZygnY29tcGxldGUnLCBjYmlkLCBlcnIsIHJlc3VsdCk7XG5cbiAgICBpZiAoIShjYmlkIGluIHRoaXMud2FpdGluZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FsbGJhY2sgJHtjYmlkfSBub3QgZm91bmRgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjYiA9IHRoaXMud2FpdGluZ1tjYmlkXTtcbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aGlzLl9kZWJ1ZygnY29tcGxldGVkIHdpdGggZXJyb3I6JywgZXJyKTtcbiAgICAgIGNiLmZhaWwobmV3IEVycm9yKGVycikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzYW5kb3hSZXN1bHQgPSB0aGlzLl90b1NhbmRib3goXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgY2IuZXhwZWN0ZWRSZXR1cm5UeXBlID8/ICd2b2lkJyxcbiAgICAgICk7XG4gICAgICB0aGlzLl9kZWJ1ZygnY29tcGxldGVkIHdpdGggcmVzdWx0OicsIHNhbmRveFJlc3VsdCk7XG4gICAgICBjYi5zdWNjZWVkKHNhbmRveFJlc3VsdCk7XG4gICAgfVxuXG4gICAgZGVsZXRlIHRoaXMud2FpdGluZ1tjYmlkXTtcblxuICAgIHJldHVybiB7IGNiaWQgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsYW5ndWFnZS1zcGVjaWZpYyBuYW1lcyBmb3IgYSBqc2lpIG1vZHVsZS5cbiAgICogQHBhcmFtIGFzc2VtYmx5TmFtZSBUaGUgbmFtZSBvZiB0aGUganNpaSBtb2R1bGUgKGkuZS4ganNpaSRqc2lpX2NhbGN1bGF0b3JfbGliJClcbiAgICovXG4gIHB1YmxpYyBuYW1pbmcocmVxOiBhcGkuTmFtaW5nUmVxdWVzdCk6IGFwaS5OYW1pbmdSZXNwb25zZSB7XG4gICAgY29uc3QgYXNzZW1ibHlOYW1lID0gcmVxLmFzc2VtYmx5O1xuXG4gICAgdGhpcy5fZGVidWcoJ25hbWluZycsIGFzc2VtYmx5TmFtZSk7XG5cbiAgICBjb25zdCBhc3NlbWJseSA9IHRoaXMuX2Fzc2VtYmx5Rm9yKGFzc2VtYmx5TmFtZSk7XG4gICAgY29uc3QgdGFyZ2V0cyA9IGFzc2VtYmx5Lm1ldGFkYXRhLnRhcmdldHM7XG4gICAgaWYgKCF0YXJnZXRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgLSBcInRhcmdldHNcIiBmb3IgJHthc3NlbWJseU5hbWV9IGlzIG1pc3NpbmchYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgbmFtaW5nOiB0YXJnZXRzIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdHMoX3JlcT86IGFwaS5TdGF0c1JlcXVlc3QpOiBhcGkuU3RhdHNSZXNwb25zZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9iamVjdENvdW50OiB0aGlzLm9iamVjdHMuY291bnQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2FkZEFzc2VtYmx5KGFzc206IEFzc2VtYmx5KSB7XG4gICAgdGhpcy5hc3NlbWJsaWVzW2Fzc20ubWV0YWRhdGEubmFtZV0gPSBhc3NtO1xuXG4gICAgLy8gYWRkIHRoZSBfX2pzaWlfXy5mcW4gcHJvcGVydHkgb24gZXZlcnkgY29uc3RydWN0b3IuIHRoaXMgYWxsb3dzXG4gICAgLy8gdHJhdmVyc2luZyBiZXR3ZWVuIHRoZSBqYXZhc2NyaXB0IGFuZCBqc2lpIHdvcmxkcyBnaXZlbiBhbnkgb2JqZWN0LlxuICAgIGZvciAoY29uc3QgZnFuIG9mIE9iamVjdC5rZXlzKGFzc20ubWV0YWRhdGEudHlwZXMgPz8ge30pKSB7XG4gICAgICBjb25zdCB0eXBlZGVmID0gYXNzbS5tZXRhZGF0YS50eXBlcyFbZnFuXTtcbiAgICAgIHN3aXRjaCAodHlwZWRlZi5raW5kKSB7XG4gICAgICAgIGNhc2Ugc3BlYy5UeXBlS2luZC5JbnRlcmZhY2U6XG4gICAgICAgICAgY29udGludWU7IC8vIGludGVyZmFjZXMgZG9uJ3QgcmVhbGx5IGV4aXN0XG4gICAgICAgIGNhc2Ugc3BlYy5UeXBlS2luZC5DbGFzczpcbiAgICAgICAgY2FzZSBzcGVjLlR5cGVLaW5kLkVudW06XG4gICAgICAgICAgY29uc3QgY29uc3RydWN0b3IgPSB0aGlzLl9maW5kU3ltYm9sKGZxbik7XG4gICAgICAgICAgdGFnSnNpaUNvbnN0cnVjdG9yKGNvbnN0cnVjdG9yLCBmcW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGZpbmQgdGhlIGphdmFzY3JpcHQgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIGEganNpaSBGUU4uXG4gIHByaXZhdGUgX2ZpbmRDdG9yKFxuICAgIGZxbjogc3RyaW5nLFxuICAgIGFyZ3M6IGFueVtdLFxuICApOiB7IGN0b3I6IGFueTsgcGFyYW1ldGVycz86IHNwZWMuUGFyYW1ldGVyW10gfSB7XG4gICAgaWYgKGZxbiA9PT0gd2lyZS5FTVBUWV9PQkpFQ1RfRlFOKSB7XG4gICAgICByZXR1cm4geyBjdG9yOiBPYmplY3QgfTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlaW5mbyA9IHRoaXMuX3R5cGVJbmZvRm9yRnFuKGZxbik7XG5cbiAgICBzd2l0Y2ggKHR5cGVpbmZvLmtpbmQpIHtcbiAgICAgIGNhc2Ugc3BlYy5UeXBlS2luZC5DbGFzczpcbiAgICAgICAgY29uc3QgY2xhc3NUeXBlID0gdHlwZWluZm8gYXMgc3BlYy5DbGFzc1R5cGU7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTWV0aG9kQXJndW1lbnRzKGNsYXNzVHlwZS5pbml0aWFsaXplciwgYXJncyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY3RvcjogdGhpcy5fZmluZFN5bWJvbChmcW4pLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IGNsYXNzVHlwZS5pbml0aWFsaXplciAmJiBjbGFzc1R5cGUuaW5pdGlhbGl6ZXIucGFyYW1ldGVycyxcbiAgICAgICAgfTtcblxuICAgICAgY2FzZSBzcGVjLlR5cGVLaW5kLkludGVyZmFjZTpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW5ub3QgY3JlYXRlIGFuIG9iamVjdCB3aXRoIGFuIEZRTiBvZiBhbiBpbnRlcmZhY2U6ICR7ZnFufWAsXG4gICAgICAgICk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBGUU4ga2luZDogJHtmcW59YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UGFja2FnZURpcihwa2duYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5pbnN0YWxsRGlyKSB7XG4gICAgICB0aGlzLmluc3RhbGxEaXIgPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksICdqc2lpLWtlcm5lbC0nKSk7XG4gICAgICBmcy5ta2RpcnBTeW5jKHBhdGguam9pbih0aGlzLmluc3RhbGxEaXIsICdub2RlX21vZHVsZXMnKSk7XG4gICAgICB0aGlzLl9kZWJ1ZygnY3JlYXRpbmcganNpaS1rZXJuZWwgbW9kdWxlcyB3b3JrZGlyOicsIHRoaXMuaW5zdGFsbERpcik7XG5cbiAgICAgIG9uRXhpdC5yZW1vdmVTeW5jKHRoaXMuaW5zdGFsbERpcik7XG4gICAgfVxuICAgIHJldHVybiBwYXRoLmpvaW4odGhpcy5pbnN0YWxsRGlyLCAnbm9kZV9tb2R1bGVzJywgcGtnbmFtZSk7XG4gIH1cblxuICAvLyBwcmVmaXhlZCB3aXRoIF8gdG8gYWxsb3cgY2FsbGluZyB0aGlzIG1ldGhvZCBpbnRlcm5hbGx5IHdpdGhvdXRcbiAgLy8gZ2V0dGluZyBpdCByZWNvcmRlZCBmb3IgdGVzdGluZy5cbiAgcHJpdmF0ZSBfY3JlYXRlKHJlcTogYXBpLkNyZWF0ZVJlcXVlc3QpOiBhcGkuQ3JlYXRlUmVzcG9uc2Uge1xuICAgIHRoaXMuX2RlYnVnKCdjcmVhdGUnLCByZXEpO1xuICAgIGNvbnN0IHsgZnFuLCBpbnRlcmZhY2VzLCBvdmVycmlkZXMgfSA9IHJlcTtcblxuICAgIGNvbnN0IHJlcXVlc3RBcmdzID0gcmVxLmFyZ3MgPz8gW107XG5cbiAgICBjb25zdCBjdG9yUmVzdWx0ID0gdGhpcy5fZmluZEN0b3IoZnFuLCByZXF1ZXN0QXJncyk7XG4gICAgY29uc3QgY3RvciA9IGN0b3JSZXN1bHQuY3RvcjtcbiAgICBjb25zdCBvYmogPSB0aGlzLl93cmFwU2FuZGJveENvZGUoXG4gICAgICAoKSA9PlxuICAgICAgICBuZXcgY3RvciguLi50aGlzLl90b1NhbmRib3hWYWx1ZXMocmVxdWVzdEFyZ3MsIGN0b3JSZXN1bHQucGFyYW1ldGVycykpLFxuICAgICk7XG4gICAgY29uc3Qgb2JqcmVmID0gdGhpcy5vYmplY3RzLnJlZ2lzdGVyT2JqZWN0KG9iaiwgZnFuLCByZXEuaW50ZXJmYWNlcyA/PyBbXSk7XG5cbiAgICAvLyBvdmVycmlkZXM6IGZvciBlYWNoIG9uZSBvZiB0aGUgb3ZlcnJpZGUgbWV0aG9kIG5hbWVzLCBpbnN0YWxscyBhXG4gICAgLy8gbWV0aG9kIG9uIHRoZSBuZXdseSBjcmVhdGVkIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSByZW1vdGUgXCJyZXZlcnNlIHByb3h5XCIuXG5cbiAgICBpZiAob3ZlcnJpZGVzKSB7XG4gICAgICB0aGlzLl9kZWJ1Zygnb3ZlcnJpZGVzJywgb3ZlcnJpZGVzKTtcblxuICAgICAgY29uc3Qgb3ZlcnJpZGVUeXBlRXJyb3JNZXNzYWdlID1cbiAgICAgICAgJ092ZXJyaWRlIGNhbiBlaXRoZXIgYmUgXCJtZXRob2RcIiBvciBcInByb3BlcnR5XCInO1xuICAgICAgY29uc3QgbWV0aG9kcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgICBmb3IgKGNvbnN0IG92ZXJyaWRlIG9mIG92ZXJyaWRlcykge1xuICAgICAgICBpZiAoYXBpLmlzTWV0aG9kT3ZlcnJpZGUob3ZlcnJpZGUpKSB7XG4gICAgICAgICAgaWYgKGFwaS5pc1Byb3BlcnR5T3ZlcnJpZGUob3ZlcnJpZGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Iob3ZlcnJpZGVUeXBlRXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1ldGhvZHMuaGFzKG92ZXJyaWRlLm1ldGhvZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYER1cGxpY2F0ZSBvdmVycmlkZSBmb3IgbWV0aG9kICcke292ZXJyaWRlLm1ldGhvZH0nYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG1ldGhvZHMuYWRkKG92ZXJyaWRlLm1ldGhvZCk7XG5cbiAgICAgICAgICB0aGlzLl9hcHBseU1ldGhvZE92ZXJyaWRlKG9iaiwgb2JqcmVmLCBmcW4sIGludGVyZmFjZXMsIG92ZXJyaWRlKTtcbiAgICAgICAgfSBlbHNlIGlmIChhcGkuaXNQcm9wZXJ0eU92ZXJyaWRlKG92ZXJyaWRlKSkge1xuICAgICAgICAgIGlmIChhcGkuaXNNZXRob2RPdmVycmlkZShvdmVycmlkZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihvdmVycmlkZVR5cGVFcnJvck1lc3NhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocHJvcGVydGllcy5oYXMob3ZlcnJpZGUucHJvcGVydHkpKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgYER1cGxpY2F0ZSBvdmVycmlkZSBmb3IgcHJvcGVydHkgJyR7b3ZlcnJpZGUucHJvcGVydHl9J2AsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcm9wZXJ0aWVzLmFkZChvdmVycmlkZS5wcm9wZXJ0eSk7XG5cbiAgICAgICAgICB0aGlzLl9hcHBseVByb3BlcnR5T3ZlcnJpZGUob2JqLCBvYmpyZWYsIGZxbiwgaW50ZXJmYWNlcywgb3ZlcnJpZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihvdmVycmlkZVR5cGVFcnJvck1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9ianJlZjtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFN1cGVyUHJvcGVydHlOYW1lKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBgJGpzaWkkc3VwZXIkJHtuYW1lfSRgO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlQcm9wZXJ0eU92ZXJyaWRlKFxuICAgIG9iajogYW55LFxuICAgIG9ianJlZjogYXBpLk9ialJlZixcbiAgICB0eXBlRnFuOiBzdHJpbmcsXG4gICAgaW50ZXJmYWNlczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gICAgb3ZlcnJpZGU6IGFwaS5Qcm9wZXJ0eU92ZXJyaWRlLFxuICApIHtcbiAgICAvLyBlcnJvciBpZiB3ZSBjYW4gZmluZCBhIG1ldGhvZCB3aXRoIHRoaXMgbmFtZVxuICAgIGlmICh0aGlzLl90cnlUeXBlSW5mb0Zvck1ldGhvZChvdmVycmlkZS5wcm9wZXJ0eSwgdHlwZUZxbiwgaW50ZXJmYWNlcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRyeWluZyB0byBvdmVycmlkZSBtZXRob2QgJyR7b3ZlcnJpZGUucHJvcGVydHl9JyBhcyBhIHByb3BlcnR5YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHByb3BJbmZvID0gdGhpcy5fdHJ5VHlwZUluZm9Gb3JQcm9wZXJ0eShcbiAgICAgIG92ZXJyaWRlLnByb3BlcnR5LFxuICAgICAgdHlwZUZxbixcbiAgICAgIGludGVyZmFjZXMsXG4gICAgKTtcbiAgICAvLyBpZiB0aGlzIGlzIGEgcHJpdmF0ZSBwcm9wZXJ0eSAoaS5lLiBkb2Vzbid0IGhhdmUgYHByb3BJbmZvYCB0aGUgb2JqZWN0IGhhcyBhIGtleSlcbiAgICBpZiAoIXByb3BJbmZvICYmIG92ZXJyaWRlLnByb3BlcnR5IGluIG9iaikge1xuICAgICAgdGhpcy5fZGVidWcoYFNraXBwaW5nIG92ZXJyaWRlIG9mIHByaXZhdGUgcHJvcGVydHkgJHtvdmVycmlkZS5wcm9wZXJ0eX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXByb3BJbmZvKSB7XG4gICAgICAvLyBXZSd2ZSBvdmVycmlkaW5nIGEgcHJvcGVydHkgb24gYW4gb2JqZWN0IHdlIGhhdmUgTk8gdHlwZSBpbmZvcm1hdGlvbiBvbiAocHJvYmFibHlcbiAgICAgIC8vIGJlY2F1c2UgaXQncyBhbiBhbm9ueW1vdXMgb2JqZWN0KS5cbiAgICAgIC8vIFByZXRlbmQgaXQncyAncHJvcDogYW55JztcbiAgICAgIC8vXG4gICAgICAvLyBGSVhNRTogV2UgY291bGQgZG8gYmV0dGVyIHR5cGUgY2hlY2tpbmcgZHVyaW5nIHRoZSBjb252ZXJzaW9uIGlmIEpTSUkgY2xpZW50c1xuICAgICAgLy8gd291bGQgdGVsbCB1cyB0aGUgaW50ZW5kZWQgaW50ZXJmYWNlIHR5cGUuXG4gICAgICBwcm9wSW5mbyA9IHtcbiAgICAgICAgbmFtZTogb3ZlcnJpZGUucHJvcGVydHksXG4gICAgICAgIHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5fZGVmaW5lT3ZlcnJpZGVuUHJvcGVydHkob2JqLCBvYmpyZWYsIG92ZXJyaWRlLCBwcm9wSW5mbyk7XG4gIH1cblxuICBwcml2YXRlIF9kZWZpbmVPdmVycmlkZW5Qcm9wZXJ0eShcbiAgICBvYmo6IGFueSxcbiAgICBvYmpyZWY6IGFwaS5PYmpSZWYsXG4gICAgb3ZlcnJpZGU6IGFwaS5Qcm9wZXJ0eU92ZXJyaWRlLFxuICAgIHByb3BJbmZvOiBzcGVjLlByb3BlcnR5LFxuICApIHtcbiAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBvdmVycmlkZS5wcm9wZXJ0eTtcblxuICAgIHRoaXMuX2RlYnVnKCdhcHBseSBvdmVycmlkZScsIHByb3BlcnR5TmFtZSk7XG5cbiAgICAvLyBzYXZlIHRoZSBvbGQgcHJvcGVydHkgdW5kZXIgJGpzaWkkc3VwZXIkPHByb3A+JCBzbyB0aGF0IHByb3BlcnR5IG92ZXJyaWRlc1xuICAgIC8vIGNhbiBzdGlsbCBhY2Nlc3MgaXQgdmlhIGBzdXBlci48cHJvcD5gLlxuICAgIGNvbnN0IHByZXYgPSBnZXRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wZXJ0eU5hbWUpID8/IHtcbiAgICAgIHZhbHVlOiBvYmpbcHJvcGVydHlOYW1lXSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9O1xuXG4gICAgY29uc3QgcHJldkVudW1lcmFibGUgPSBwcmV2LmVudW1lcmFibGU7XG4gICAgcHJldi5lbnVtZXJhYmxlID0gZmFsc2U7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgdGhpcy5fZ2V0U3VwZXJQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKSwgcHJldik7XG5cbiAgICAvLyB3ZSBhZGQgY2FsbGJhY2tzIGZvciBib3RoICdnZXQnIGFuZCAnc2V0JywgZXZlbiBpZiB0aGUgcHJvcGVydHlcbiAgICAvLyBpcyByZWFkb25seS4gdGhpcyBpcyBmaW5lIGJlY2F1c2UgaWYgeW91IHRyeSB0byBzZXQoKSBhIHJlYWRvbmx5XG4gICAgLy8gcHJvcGVydHksIGl0IHdpbGwgZmFpbC5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wZXJ0eU5hbWUsIHtcbiAgICAgIGVudW1lcmFibGU6IHByZXZFbnVtZXJhYmxlLFxuICAgICAgY29uZmlndXJhYmxlOiBwcmV2LmNvbmZpZ3VyYWJsZSxcbiAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICB0aGlzLl9kZWJ1ZygndmlydHVhbCBnZXQnLCBvYmpyZWYsIHByb3BlcnR5TmFtZSwge1xuICAgICAgICAgIGNvb2tpZTogb3ZlcnJpZGUuY29va2llLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jYWxsYmFja0hhbmRsZXIoe1xuICAgICAgICAgIGNvb2tpZTogb3ZlcnJpZGUuY29va2llLFxuICAgICAgICAgIGNiaWQ6IHRoaXMuX21ha2VjYmlkKCksXG4gICAgICAgICAgZ2V0OiB7IG9ianJlZiwgcHJvcGVydHk6IHByb3BlcnR5TmFtZSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZGVidWcoJ2NhbGxiYWNrIHJldHVybmVkJywgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RvU2FuZGJveChyZXN1bHQsIHByb3BJbmZvKTtcbiAgICAgIH0sXG4gICAgICBzZXQ6ICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuX2RlYnVnKCd2aXJ0dWFsIHNldCcsIG9ianJlZiwgcHJvcGVydHlOYW1lLCB7XG4gICAgICAgICAgY29va2llOiBvdmVycmlkZS5jb29raWUsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNhbGxiYWNrSGFuZGxlcih7XG4gICAgICAgICAgY29va2llOiBvdmVycmlkZS5jb29raWUsXG4gICAgICAgICAgY2JpZDogdGhpcy5fbWFrZWNiaWQoKSxcbiAgICAgICAgICBzZXQ6IHtcbiAgICAgICAgICAgIG9ianJlZixcbiAgICAgICAgICAgIHByb3BlcnR5OiBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5fZnJvbVNhbmRib3godmFsdWUsIHByb3BJbmZvKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBnZXRQcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICBvYmo6IGFueSxcbiAgICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgICk6IFByb3BlcnR5RGVzY3JpcHRvciB8IHVuZGVmaW5lZCB7XG4gICAgICBjb25zdCBkaXJlY3QgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcGVydHlOYW1lKTtcbiAgICAgIGlmIChkaXJlY3QgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZGlyZWN0O1xuICAgICAgfVxuICAgICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcbiAgICAgIGlmIChwcm90byA9PSBudWxsICYmIHByb3RvICE9PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgICAgIC8vIFdlIHJlYWNoZWQgT2JqZWN0IG9yIHRoZSBwcm90b3R5cGUgY2hhaW4gcm9vdCwgYWxsIGhvcGUgaXMgbG9zdCFcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBnZXRQcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIHByb3BlcnR5TmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlNZXRob2RPdmVycmlkZShcbiAgICBvYmo6IGFueSxcbiAgICBvYmpyZWY6IGFwaS5PYmpSZWYsXG4gICAgdHlwZUZxbjogc3RyaW5nLFxuICAgIGludGVyZmFjZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICAgIG92ZXJyaWRlOiBhcGkuTWV0aG9kT3ZlcnJpZGUsXG4gICkge1xuICAgIC8vIGVycm9yIGlmIHdlIGNhbiBmaW5kIGEgcHJvcGVydHkgd2l0aCB0aGlzIG5hbWVcbiAgICBpZiAodGhpcy5fdHJ5VHlwZUluZm9Gb3JQcm9wZXJ0eShvdmVycmlkZS5tZXRob2QsIHR5cGVGcW4sIGludGVyZmFjZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUcnlpbmcgdG8gb3ZlcnJpZGUgcHJvcGVydHkgJyR7b3ZlcnJpZGUubWV0aG9kfScgYXMgYSBtZXRob2RgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbWV0aG9kSW5mbyA9IHRoaXMuX3RyeVR5cGVJbmZvRm9yTWV0aG9kKFxuICAgICAgb3ZlcnJpZGUubWV0aG9kLFxuICAgICAgdHlwZUZxbixcbiAgICAgIGludGVyZmFjZXMsXG4gICAgKTtcblxuICAgIC8vIElmIHRoaXMgaXMgYSBwcml2YXRlIG1ldGhvZCAoZG9lc24ndCBoYXZlIG1ldGhvZEluZm8sIGtleSByZXNvbHZlcyBvbiB0aGUgb2JqZWN0KSwgd2VcbiAgICAvLyBhcmUgZ29pbmcgdG8gc2tpcCB0aGUgb3ZlcnJpZGUuXG4gICAgaWYgKCFtZXRob2RJbmZvICYmIG9ialtvdmVycmlkZS5tZXRob2RdKSB7XG4gICAgICB0aGlzLl9kZWJ1ZyhgU2tpcHBpbmcgb3ZlcnJpZGUgb2YgcHJpdmF0ZSBtZXRob2QgJHtvdmVycmlkZS5tZXRob2R9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFtZXRob2RJbmZvKSB7XG4gICAgICAvLyBXZSd2ZSBvdmVycmlkaW5nIGEgbWV0aG9kIG9uIGFuIG9iamVjdCB3ZSBoYXZlIE5PIHR5cGUgaW5mb3JtYXRpb24gb24gKHByb2JhYmx5XG4gICAgICAvLyBiZWNhdXNlIGl0J3MgYW4gYW5vbnltb3VzIG9iamVjdCkuXG4gICAgICAvLyBQcmV0ZW5kIGl0J3MgYW4gKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnlcbiAgICAgIG1ldGhvZEluZm8gPSB7XG4gICAgICAgIG5hbWU6IG92ZXJyaWRlLm1ldGhvZCxcbiAgICAgICAgcmV0dXJuczogeyB0eXBlOiBzcGVjLkNBTk9OSUNBTF9BTlkgfSxcbiAgICAgICAgcGFyYW1ldGVyczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdhcmdzJyxcbiAgICAgICAgICAgIHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSxcbiAgICAgICAgICAgIHZhcmlhZGljOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHZhcmlhZGljOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWZpbmVPdmVycmlkZW5NZXRob2Qob2JqLCBvYmpyZWYsIG92ZXJyaWRlLCBtZXRob2RJbmZvKTtcbiAgfVxuXG4gIHByaXZhdGUgX2RlZmluZU92ZXJyaWRlbk1ldGhvZChcbiAgICBvYmo6IGFueSxcbiAgICBvYmpyZWY6IGFwaS5PYmpSZWYsXG4gICAgb3ZlcnJpZGU6IGFwaS5NZXRob2RPdmVycmlkZSxcbiAgICBtZXRob2RJbmZvOiBzcGVjLk1ldGhvZCxcbiAgKSB7XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IG92ZXJyaWRlLm1ldGhvZDtcblxuICAgIGlmIChtZXRob2RJbmZvLmFzeW5jKSB7XG4gICAgICAvLyBhc3luYyBtZXRob2Qgb3ZlcnJpZGVcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6ICguLi5tZXRob2RBcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgICAgIHRoaXMuX2RlYnVnKCdpbnZva2UgYXN5bmMgbWV0aG9kIG92ZXJyaWRlJywgb3ZlcnJpZGUpO1xuICAgICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLl90b1NhbmRib3hWYWx1ZXMobWV0aG9kQXJncywgbWV0aG9kSW5mby5wYXJhbWV0ZXJzKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55Pigoc3VjY2VlZCwgZmFpbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2JpZCA9IHRoaXMuX21ha2VjYmlkKCk7XG4gICAgICAgICAgICB0aGlzLl9kZWJ1ZygnYWRkaW5nIGNhbGxiYWNrIHRvIHF1ZXVlJywgY2JpZCk7XG4gICAgICAgICAgICB0aGlzLmNic1tjYmlkXSA9IHtcbiAgICAgICAgICAgICAgb2JqcmVmLFxuICAgICAgICAgICAgICBvdmVycmlkZSxcbiAgICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgICAgZXhwZWN0ZWRSZXR1cm5UeXBlOiBtZXRob2RJbmZvLnJldHVybnMgPz8gJ3ZvaWQnLFxuICAgICAgICAgICAgICBzdWNjZWVkLFxuICAgICAgICAgICAgICBmYWlsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzeW5jIG1ldGhvZCBvdmVycmlkZSAobWV0aG9kIGluZm8gaXMgbm90IHJlcXVpcmVkKVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgbWV0aG9kTmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogKC4uLm1ldGhvZEFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZGVidWcoXG4gICAgICAgICAgICAnaW52b2tlIHN5bmMgbWV0aG9kIG92ZXJyaWRlJyxcbiAgICAgICAgICAgIG92ZXJyaWRlLFxuICAgICAgICAgICAgJ2FyZ3MnLFxuICAgICAgICAgICAgbWV0aG9kQXJncyxcbiAgICAgICAgICApO1xuICAgICAgICAgIC8vIFdlIHNob3VsZCBiZSB2YWxpZGF0aW5nIHRoZSBhY3R1YWwgYXJndW1lbnRzIGFjY29yZGluZyB0byB0aGVcbiAgICAgICAgICAvLyBkZWNsYXJlZCBwYXJhbWV0ZXJzIGhlcmUsIGJ1dCBsZXQncyBqdXN0IGFzc3VtZSB0aGUgSlNJSSBydW50aW1lIG9uIHRoZVxuICAgICAgICAgIC8vIG90aGVyIGVuZCBoYXMgZG9uZSBpdHMgd29yay5cbiAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNhbGxiYWNrSGFuZGxlcih7XG4gICAgICAgICAgICBjb29raWU6IG92ZXJyaWRlLmNvb2tpZSxcbiAgICAgICAgICAgIGNiaWQ6IHRoaXMuX21ha2VjYmlkKCksXG4gICAgICAgICAgICBpbnZva2U6IHtcbiAgICAgICAgICAgICAgb2JqcmVmLFxuICAgICAgICAgICAgICBtZXRob2Q6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgICAgIGFyZ3M6IHRoaXMuX2Zyb21TYW5kYm94VmFsdWVzKG1ldGhvZEFyZ3MsIG1ldGhvZEluZm8ucGFyYW1ldGVycyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuX2RlYnVnKCdSZXN1bHQnLCByZXN1bHQpO1xuICAgICAgICAgIHJldHVybiB0aGlzLl90b1NhbmRib3gocmVzdWx0LCBtZXRob2RJbmZvLnJldHVybnMgPz8gJ3ZvaWQnKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmRJbnZva2VUYXJnZXQoXG4gICAgb2JqcmVmOiBhcGkuT2JqUmVmLFxuICAgIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgICBhcmdzOiBhbnlbXSxcbiAgKSB7XG4gICAgY29uc3QgeyBpbnN0YW5jZSwgZnFuLCBpbnRlcmZhY2VzIH0gPSB0aGlzLm9iamVjdHMuZmluZE9iamVjdChvYmpyZWYpO1xuICAgIGNvbnN0IHRpID0gdGhpcy5fdHlwZUluZm9Gb3JNZXRob2QobWV0aG9kTmFtZSwgZnFuLCBpbnRlcmZhY2VzKTtcbiAgICB0aGlzLl92YWxpZGF0ZU1ldGhvZEFyZ3VtZW50cyh0aSwgYXJncyk7XG5cbiAgICAvLyBhbHdheXMgZmlyc3QgbG9vayB1cCB0aGUgbWV0aG9kIGluIHRoZSBwcm90b3R5cGUuIHRoaXMgcHJhY3RpY2FsbHkgYnlwYXNzZXNcbiAgICAvLyBhbnkgbWV0aG9kcyBvdmVycmlkZGVuIGJ5IGRlcml2ZWQgY2xhc3NlcyAod2hpY2ggYXJlIGJ5IGRlZmluaXRpb24gbmF0aXZlXG4gICAgLy8gbWV0aG9kcykuIHRoaXMgc2VydmVzIHRvIGFsbG93IG5hdGl2ZSBjYWxsIHRvIGludm9rZSBcInN1cGVyLm1ldGhvZCgpXCIgd2hlblxuICAgIC8vIG92ZXJyaWRpbmcgdGhlIG1ldGhvZC5cbiAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCB0aGUgbWV0aG9kIG9uIHRoZSBwcm90b3R5cGUsIGl0IGNvdWxkIGJlIGEgbGl0ZXJhbCBvYmplY3RcbiAgICAvLyB0aGF0IGltcGxlbWVudHMgYW4gaW50ZXJmYWNlLCBzbyB3ZSBsb29rIGlmIHdlIGhhdmUgdGhlIG1ldGhvZCBvbiB0aGUgb2JqZWN0XG4gICAgLy8gaXRzZWxmLiBpZiB3ZSBkbywgd2UgaW52b2tlIGl0LlxuICAgIGxldCBmbiA9IGluc3RhbmNlLmNvbnN0cnVjdG9yLnByb3RvdHlwZVttZXRob2ROYW1lXTtcbiAgICBpZiAoIWZuKSB7XG4gICAgICBmbiA9IGluc3RhbmNlW21ldGhvZE5hbWVdO1xuICAgICAgaWYgKCFmbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kICR7bWV0aG9kTmFtZX0gb24gb2JqZWN0YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHRpLCBvYmo6IGluc3RhbmNlLCBmbiB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfdmFsaWRhdGVNZXRob2RBcmd1bWVudHMoXG4gICAgbWV0aG9kOiBzcGVjLkNhbGxhYmxlIHwgdW5kZWZpbmVkLFxuICAgIGFyZ3M6IGFueVtdLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXM6IHNwZWMuUGFyYW1ldGVyW10gPSBtZXRob2Q/LnBhcmFtZXRlcnMgPz8gW107XG5cbiAgICAvLyBlcnJvciBpZiBhcmdzID4gcGFyYW1zXG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gcGFyYW1zLmxlbmd0aCAmJiAhKG1ldGhvZCAmJiBtZXRob2QudmFyaWFkaWMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUb28gbWFueSBhcmd1bWVudHMgKG1ldGhvZCBhY2NlcHRzICR7cGFyYW1zLmxlbmd0aH0gcGFyYW1ldGVycywgZ290ICR7YXJncy5sZW5ndGh9IGFyZ3VtZW50cylgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgcGFyYW0gPSBwYXJhbXNbaV07XG4gICAgICBjb25zdCBhcmcgPSBhcmdzW2ldO1xuXG4gICAgICBpZiAocGFyYW0udmFyaWFkaWMpIHtcbiAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPD0gaSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBObyB2YXJhcmcgd2FzIHByb3ZpZGVkXG4gICAgICAgIGZvciAobGV0IGogPSBpOyBqIDwgcGFyYW1zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgaWYgKCFwYXJhbS5vcHRpb25hbCAmJiBwYXJhbXNbal0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgVW5leHBlY3RlZCAndW5kZWZpbmVkJyB2YWx1ZSBhdCBpbmRleCAke1xuICAgICAgICAgICAgICAgIGogLSBpXG4gICAgICAgICAgICAgIH0gb2YgdmFyaWFkaWMgYXJndW1lbnQgJyR7XG4gICAgICAgICAgICAgICAgcGFyYW0ubmFtZVxuICAgICAgICAgICAgICB9JyBvZiB0eXBlICcke3NwZWMuZGVzY3JpYmVUeXBlUmVmZXJlbmNlKHBhcmFtLnR5cGUpfSdgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXBhcmFtLm9wdGlvbmFsICYmIGFyZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgTm90IGVub3VnaCBhcmd1bWVudHMuIE1pc3NpbmcgYXJndW1lbnQgZm9yIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXIgJyR7XG4gICAgICAgICAgICBwYXJhbS5uYW1lXG4gICAgICAgICAgfScgb2YgdHlwZSAnJHtzcGVjLmRlc2NyaWJlVHlwZVJlZmVyZW5jZShwYXJhbS50eXBlKX0nYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9hc3NlbWJseUZvcihhc3NlbWJseU5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGFzc2VtYmx5ID0gdGhpcy5hc3NlbWJsaWVzW2Fzc2VtYmx5TmFtZV07XG4gICAgaWYgKCFhc3NlbWJseSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBhc3NlbWJseTogJHthc3NlbWJseU5hbWV9YCk7XG4gICAgfVxuICAgIHJldHVybiBhc3NlbWJseTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmRTeW1ib2woZnFuOiBzdHJpbmcpIHtcbiAgICBjb25zdCBbYXNzZW1ibHlOYW1lLCAuLi5wYXJ0c10gPSBmcW4uc3BsaXQoJy4nKTtcbiAgICBjb25zdCBhc3NlbWJseSA9IHRoaXMuX2Fzc2VtYmx5Rm9yKGFzc2VtYmx5TmFtZSk7XG5cbiAgICBsZXQgY3VyciA9IGFzc2VtYmx5LmNsb3N1cmU7XG4gICAgd2hpbGUgKHBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBwYXJ0cy5zaGlmdCgpO1xuICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjdXJyID0gY3VycltuYW1lXTtcbiAgICB9XG4gICAgaWYgKCFjdXJyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHN5bWJvbCAke2Zxbn1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnI7XG4gIH1cblxuICBwcml2YXRlIF90eXBlSW5mb0ZvckZxbihmcW46IHN0cmluZyk6IHNwZWMuVHlwZSB7XG4gICAgY29uc3QgY29tcG9uZW50cyA9IGZxbi5zcGxpdCgnLicpO1xuICAgIGNvbnN0IG1vZHVsZU5hbWUgPSBjb21wb25lbnRzWzBdO1xuXG4gICAgY29uc3QgYXNzZW1ibHkgPSB0aGlzLmFzc2VtYmxpZXNbbW9kdWxlTmFtZV07XG4gICAgaWYgKCFhc3NlbWJseSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb2R1bGUgJyR7bW9kdWxlTmFtZX0nIG5vdCBmb3VuZGApO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVzID0gYXNzZW1ibHkubWV0YWRhdGEudHlwZXMgPz8ge307XG4gICAgY29uc3QgZnFuSW5mbyA9IHR5cGVzW2Zxbl07XG4gICAgaWYgKCFmcW5JbmZvKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFR5cGUgJyR7ZnFufScgbm90IGZvdW5kYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZxbkluZm87XG4gIH1cblxuICBwcml2YXRlIF90eXBlSW5mb0Zvck1ldGhvZChcbiAgICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gICAgZnFuOiBzdHJpbmcsXG4gICAgaW50ZXJmYWNlcz86IHN0cmluZ1tdLFxuICApOiBzcGVjLk1ldGhvZCB7XG4gICAgY29uc3QgdGkgPSB0aGlzLl90cnlUeXBlSW5mb0Zvck1ldGhvZChtZXRob2ROYW1lLCBmcW4sIGludGVyZmFjZXMpO1xuICAgIGlmICghdGkpIHtcbiAgICAgIGNvbnN0IGFkZGVuZHVtID1cbiAgICAgICAgaW50ZXJmYWNlcyAmJiBpbnRlcmZhY2VzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IGAgb3IgaW50ZXJmYWNlKHMpICR7aW50ZXJmYWNlcy5qb2luKCcsICcpfWBcbiAgICAgICAgICA6ICcnO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2xhc3MgJHtmcW59JHthZGRlbmR1bX0gZG9lc24ndCBoYXZlIGEgbWV0aG9kICcke21ldGhvZE5hbWV9J2AsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGk7XG4gIH1cblxuICBwcml2YXRlIF90cnlUeXBlSW5mb0Zvck1ldGhvZChcbiAgICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gICAgY2xhc3NGcW46IHN0cmluZyxcbiAgICBpbnRlcmZhY2VzOiBzdHJpbmdbXSA9IFtdLFxuICApOiBzcGVjLk1ldGhvZCB8IHVuZGVmaW5lZCB7XG4gICAgZm9yIChjb25zdCBmcW4gb2YgW2NsYXNzRnFuLCAuLi5pbnRlcmZhY2VzXSkge1xuICAgICAgaWYgKGZxbiA9PT0gd2lyZS5FTVBUWV9PQkpFQ1RfRlFOKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdHlwZWluZm8gPSB0aGlzLl90eXBlSW5mb0ZvckZxbihmcW4pO1xuXG4gICAgICBjb25zdCBtZXRob2RzID1cbiAgICAgICAgKHR5cGVpbmZvIGFzIHNwZWMuQ2xhc3NUeXBlIHwgc3BlYy5JbnRlcmZhY2VUeXBlKS5tZXRob2RzID8/IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IG0gb2YgbWV0aG9kcykge1xuICAgICAgICBpZiAobS5uYW1lID09PSBtZXRob2ROYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gcmVjdXJzaW9uIHRvIHBhcmVudCB0eXBlIChpZiBleGlzdHMpXG4gICAgICBjb25zdCBiYXNlcyA9IFtcbiAgICAgICAgKHR5cGVpbmZvIGFzIHNwZWMuQ2xhc3NUeXBlKS5iYXNlLFxuICAgICAgICAuLi4oKHR5cGVpbmZvIGFzIHNwZWMuSW50ZXJmYWNlVHlwZSkuaW50ZXJmYWNlcyA/PyBbXSksXG4gICAgICBdO1xuICAgICAgZm9yIChjb25zdCBiYXNlIG9mIGJhc2VzKSB7XG4gICAgICAgIGlmICghYmFzZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLl90cnlUeXBlSW5mb0Zvck1ldGhvZChtZXRob2ROYW1lLCBiYXNlKTtcbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgX3RyeVR5cGVJbmZvRm9yUHJvcGVydHkoXG4gICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICBjbGFzc0Zxbjogc3RyaW5nLFxuICAgIGludGVyZmFjZXM6IHN0cmluZ1tdID0gW10sXG4gICk6IHNwZWMuUHJvcGVydHkgfCB1bmRlZmluZWQge1xuICAgIGZvciAoY29uc3QgZnFuIG9mIFtjbGFzc0ZxbiwgLi4uaW50ZXJmYWNlc10pIHtcbiAgICAgIGlmIChmcW4gPT09IHdpcmUuRU1QVFlfT0JKRUNUX0ZRTikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHR5cGVJbmZvID0gdGhpcy5fdHlwZUluZm9Gb3JGcW4oZnFuKTtcblxuICAgICAgbGV0IHByb3BlcnRpZXM7XG4gICAgICBsZXQgYmFzZXM7XG5cbiAgICAgIGlmIChzcGVjLmlzQ2xhc3NUeXBlKHR5cGVJbmZvKSkge1xuICAgICAgICBjb25zdCBjbGFzc1R5cGVJbmZvID0gdHlwZUluZm8gYXMgc3BlYy5DbGFzc1R5cGU7XG4gICAgICAgIHByb3BlcnRpZXMgPSBjbGFzc1R5cGVJbmZvLnByb3BlcnRpZXM7XG4gICAgICAgIGJhc2VzID0gY2xhc3NUeXBlSW5mby5iYXNlID8gW2NsYXNzVHlwZUluZm8uYmFzZV0gOiBbXTtcbiAgICAgIH0gZWxzZSBpZiAoc3BlYy5pc0ludGVyZmFjZVR5cGUodHlwZUluZm8pKSB7XG4gICAgICAgIGNvbnN0IGludGVyZmFjZVR5cGVJbmZvID0gdHlwZUluZm8gYXMgc3BlYy5JbnRlcmZhY2VUeXBlO1xuICAgICAgICBwcm9wZXJ0aWVzID0gaW50ZXJmYWNlVHlwZUluZm8ucHJvcGVydGllcztcbiAgICAgICAgYmFzZXMgPSBpbnRlcmZhY2VUeXBlSW5mby5pbnRlcmZhY2VzID8/IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUeXBlIG9mIGtpbmQgJHt0eXBlSW5mby5raW5kfSBkb2VzIG5vdCBoYXZlIHByb3BlcnRpZXNgLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHAgb2YgcHJvcGVydGllcyA/PyBbXSkge1xuICAgICAgICBpZiAocC5uYW1lID09PSBwcm9wZXJ0eSkge1xuICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHJlY3Vyc2UgdG8gcGFyZW50IHR5cGUgKGlmIGV4aXN0cylcbiAgICAgIGZvciAoY29uc3QgYmFzZUZxbiBvZiBiYXNlcykge1xuICAgICAgICBjb25zdCByZXQgPSB0aGlzLl90cnlUeXBlSW5mb0ZvclByb3BlcnR5KHByb3BlcnR5LCBiYXNlRnFuKTtcbiAgICAgICAgaWYgKHJldCkge1xuICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBfdHlwZUluZm9Gb3JQcm9wZXJ0eShcbiAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgIGZxbjogc3RyaW5nLFxuICAgIGludGVyZmFjZXM/OiBzdHJpbmdbXSxcbiAgKTogc3BlYy5Qcm9wZXJ0eSB7XG4gICAgY29uc3QgdHlwZUluZm8gPSB0aGlzLl90cnlUeXBlSW5mb0ZvclByb3BlcnR5KHByb3BlcnR5LCBmcW4sIGludGVyZmFjZXMpO1xuICAgIGlmICghdHlwZUluZm8pIHtcbiAgICAgIGNvbnN0IGFkZGVuZHVtID1cbiAgICAgICAgaW50ZXJmYWNlcyAmJiBpbnRlcmZhY2VzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IGAgb3IgaW50ZXJmYWNlKHMpICR7aW50ZXJmYWNlcy5qb2luKCcsICcpfWBcbiAgICAgICAgICA6ICcnO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVHlwZSAke2Zxbn0ke2FkZGVuZHVtfSBkb2Vzbid0IGhhdmUgYSBwcm9wZXJ0eSAnJHtwcm9wZXJ0eX0nYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0eXBlSW5mbztcbiAgfVxuXG4gIHByaXZhdGUgX3RvU2FuZGJveCh2OiBhbnksIGV4cGVjdGVkVHlwZTogd2lyZS5PcHRpb25hbFZhbHVlT3JWb2lkKTogYW55IHtcbiAgICBjb25zdCBzZXJUeXBlcyA9IHdpcmUuc2VyaWFsaXphdGlvblR5cGUoXG4gICAgICBleHBlY3RlZFR5cGUsXG4gICAgICB0aGlzLl90eXBlSW5mb0ZvckZxbi5iaW5kKHRoaXMpLFxuICAgICk7XG4gICAgdGhpcy5fZGVidWcoJ3RvU2FuZGJveCcsIHYsIEpTT04uc3RyaW5naWZ5KHNlclR5cGVzKSk7XG5cbiAgICBjb25zdCBob3N0OiB3aXJlLlNlcmlhbGl6ZXJIb3N0ID0ge1xuICAgICAgb2JqZWN0czogdGhpcy5vYmplY3RzLFxuICAgICAgZGVidWc6IHRoaXMuX2RlYnVnLmJpbmQodGhpcyksXG4gICAgICBmaW5kU3ltYm9sOiB0aGlzLl9maW5kU3ltYm9sLmJpbmQodGhpcyksXG4gICAgICBsb29rdXBUeXBlOiB0aGlzLl90eXBlSW5mb0ZvckZxbi5iaW5kKHRoaXMpLFxuICAgICAgcmVjdXJzZTogdGhpcy5fdG9TYW5kYm94LmJpbmQodGhpcyksXG4gICAgfTtcblxuICAgIGNvbnN0IGVycm9ycyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCB7IHNlcmlhbGl6YXRpb25DbGFzcywgdHlwZVJlZiB9IG9mIHNlclR5cGVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gd2lyZS5TRVJJQUxJWkVSU1tzZXJpYWxpemF0aW9uQ2xhc3NdLmRlc2VyaWFsaXplKFxuICAgICAgICAgIHYsXG4gICAgICAgICAgdHlwZVJlZixcbiAgICAgICAgICBob3N0LFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBJZiBubyB1bmlvbiAoOTklIGNhc2UpLCByZXRocm93IGltbWVkaWF0ZWx5IHRvIHByZXNlcnZlIHN0YWNrIHRyYWNlXG4gICAgICAgIGlmIChzZXJUeXBlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGVycm9ycy5wdXNoKGUubWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFZhbHVlIGRpZCBub3QgbWF0Y2ggYW55IHR5cGUgaW4gdW5pb246ICR7ZXJyb3JzLmpvaW4oJywgJyl9YCxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZnJvbVNhbmRib3godjogYW55LCB0YXJnZXRUeXBlOiB3aXJlLk9wdGlvbmFsVmFsdWVPclZvaWQpOiBhbnkge1xuICAgIGNvbnN0IHNlclR5cGVzID0gd2lyZS5zZXJpYWxpemF0aW9uVHlwZShcbiAgICAgIHRhcmdldFR5cGUsXG4gICAgICB0aGlzLl90eXBlSW5mb0ZvckZxbi5iaW5kKHRoaXMpLFxuICAgICk7XG4gICAgdGhpcy5fZGVidWcoJ2Zyb21TYW5kYm94JywgdiwgSlNPTi5zdHJpbmdpZnkoc2VyVHlwZXMpKTtcblxuICAgIGNvbnN0IGhvc3Q6IHdpcmUuU2VyaWFsaXplckhvc3QgPSB7XG4gICAgICBvYmplY3RzOiB0aGlzLm9iamVjdHMsXG4gICAgICBkZWJ1ZzogdGhpcy5fZGVidWcuYmluZCh0aGlzKSxcbiAgICAgIGZpbmRTeW1ib2w6IHRoaXMuX2ZpbmRTeW1ib2wuYmluZCh0aGlzKSxcbiAgICAgIGxvb2t1cFR5cGU6IHRoaXMuX3R5cGVJbmZvRm9yRnFuLmJpbmQodGhpcyksXG4gICAgICByZWN1cnNlOiB0aGlzLl9mcm9tU2FuZGJveC5iaW5kKHRoaXMpLFxuICAgIH07XG5cbiAgICBjb25zdCBlcnJvcnMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgeyBzZXJpYWxpemF0aW9uQ2xhc3MsIHR5cGVSZWYgfSBvZiBzZXJUeXBlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHdpcmUuU0VSSUFMSVpFUlNbc2VyaWFsaXphdGlvbkNsYXNzXS5zZXJpYWxpemUodiwgdHlwZVJlZiwgaG9zdCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIElmIG5vIHVuaW9uICg5OSUgY2FzZSksIHJldGhyb3cgaW1tZWRpYXRlbHkgdG8gcHJlc2VydmUgc3RhY2sgdHJhY2VcbiAgICAgICAgaWYgKHNlclR5cGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgZXJyb3JzLnB1c2goZS5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVmFsdWUgZGlkIG5vdCBtYXRjaCBhbnkgdHlwZSBpbiB1bmlvbjogJHtlcnJvcnMuam9pbignLCAnKX1gLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF90b1NhbmRib3hWYWx1ZXMoeHM6IGFueVtdLCBwYXJhbWV0ZXJzPzogc3BlYy5QYXJhbWV0ZXJbXSkge1xuICAgIHJldHVybiB0aGlzLl9ib3hVbmJveFBhcmFtZXRlcnMoeHMsIHBhcmFtZXRlcnMsIHRoaXMuX3RvU2FuZGJveC5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Zyb21TYW5kYm94VmFsdWVzKHhzOiBhbnlbXSwgcGFyYW1ldGVycz86IHNwZWMuUGFyYW1ldGVyW10pIHtcbiAgICByZXR1cm4gdGhpcy5fYm94VW5ib3hQYXJhbWV0ZXJzKFxuICAgICAgeHMsXG4gICAgICBwYXJhbWV0ZXJzLFxuICAgICAgdGhpcy5fZnJvbVNhbmRib3guYmluZCh0aGlzKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfYm94VW5ib3hQYXJhbWV0ZXJzKFxuICAgIHhzOiBhbnlbXSxcbiAgICBwYXJhbWV0ZXJzOiBzcGVjLlBhcmFtZXRlcltdIHwgdW5kZWZpbmVkLFxuICAgIGJveFVuYm94OiAoeDogYW55LCB0OiB3aXJlLk9wdGlvbmFsVmFsdWVPclZvaWQpID0+IGFueSxcbiAgKSB7XG4gICAgcGFyYW1ldGVycyA9IFsuLi4ocGFyYW1ldGVycyA/PyBbXSldO1xuICAgIGNvbnN0IHZhcmlhZGljID1cbiAgICAgIHBhcmFtZXRlcnMubGVuZ3RoID4gMCAmJiAhIXBhcmFtZXRlcnNbcGFyYW1ldGVycy5sZW5ndGggLSAxXS52YXJpYWRpYztcbiAgICAvLyBSZXBlYXQgdGhlIGxhc3QgKHZhcmlhZGljKSB0eXBlIHRvIG1hdGNoIHRoZSBudW1iZXIgb2YgYWN0dWFsIGFyZ3VtZW50c1xuICAgIHdoaWxlICh2YXJpYWRpYyAmJiBwYXJhbWV0ZXJzLmxlbmd0aCA8IHhzLmxlbmd0aCkge1xuICAgICAgcGFyYW1ldGVycy5wdXNoKHBhcmFtZXRlcnNbcGFyYW1ldGVycy5sZW5ndGggLSAxXSk7XG4gICAgfVxuICAgIGlmICh4cy5sZW5ndGggPiBwYXJhbWV0ZXJzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQXJndW1lbnQgbGlzdCAoJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB4cyxcbiAgICAgICAgKX0pIG5vdCBzYW1lIHNpemUgYXMgZXhwZWN0ZWQgYXJndW1lbnQgbGlzdCAobGVuZ3RoICR7XG4gICAgICAgICAgcGFyYW1ldGVycy5sZW5ndGhcbiAgICAgICAgfSlgLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHhzLm1hcCgoeCwgaSkgPT4gYm94VW5ib3goeCwgcGFyYW1ldGVycyFbaV0pKTtcbiAgfVxuXG4gIHByaXZhdGUgX2RlYnVnKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgaWYgKHRoaXMudHJhY2VFbmFibGVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQGpzaWkva2VybmVsXScsIC4uLmFyZ3MpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmVzIHRoYXQgYGZuYCBpcyBjYWxsZWQgYW5kIGRlZmVuZHMgYWdhaW5zdCBiZWdpbm5pbmcgdG8gaW52b2tlXG4gICAqIGFzeW5jIG1ldGhvZHMgdW50aWwgZm4gZmluaXNoZXMgKHN1Y2Nlc3NmdWxseSBvciBub3QpLlxuICAgKi9cbiAgcHJpdmF0ZSBfZW5zdXJlU3luYzxUPihkZXNjOiBzdHJpbmcsIGZuOiAoKSA9PiBUKTogVCB7XG4gICAgdGhpcy5zeW5jSW5Qcm9ncmVzcyA9IGRlc2M7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBkZWxldGUgdGhpcy5zeW5jSW5Qcm9ncmVzcztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9maW5kUHJvcGVydHlUYXJnZXQob2JqOiBhbnksIHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBzdXBlclByb3AgPSB0aGlzLl9nZXRTdXBlclByb3BlcnR5TmFtZShwcm9wZXJ0eSk7XG4gICAgaWYgKHN1cGVyUHJvcCBpbiBvYmopIHtcbiAgICAgIHJldHVybiBzdXBlclByb3A7XG4gICAgfVxuICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgfVxuXG4gIC8vXG4gIC8vIHR5cGUgaW5mb3JtYXRpb25cbiAgLy9cblxuICBwcml2YXRlIF9tYWtlY2JpZCgpIHtcbiAgICByZXR1cm4gYGpzaWk6OmNhbGxiYWNrOjoke3RoaXMubmV4dGlkKyt9YDtcbiAgfVxuXG4gIHByaXZhdGUgX21ha2VwcmlkKCkge1xuICAgIHJldHVybiBganNpaTo6cHJvbWlzZTo6JHt0aGlzLm5leHRpZCsrfWA7XG4gIH1cblxuICBwcml2YXRlIF93cmFwU2FuZGJveENvZGU8VD4oZm46ICgpID0+IFQpOiBUIHtcbiAgICByZXR1cm4gZm4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhcmJpdHJhcnkgY29kZSBpbiBhIFZNIHNhbmRib3guXG4gICAqXG4gICAqIEBwYXJhbSBjb2RlICAgICAgIEphdmFTY3JpcHQgY29kZSB0byBiZSBleGVjdXRlZCBpbiB0aGUgVk1cbiAgICogQHBhcmFtIHNhbmRib3ggICAgYSBWTSBjb250ZXh0IHRvIHVzZSBmb3IgcnVubmluZyB0aGUgY29kZVxuICAgKiBAcGFyYW0gc291cmNlTWFwcyBzb3VyY2UgbWFwcyB0byBiZSB1c2VkIGluIGNhc2UgYW4gZXhjZXB0aW9uIGlzIHRocm93blxuICAgKiBAcGFyYW0gZmlsZW5hbWUgICB0aGUgZmlsZSBuYW1lIHRvIHVzZSBmb3IgdGhlIGV4ZWN1dGVkIGNvZGVcbiAgICpcbiAgICogQHJldHVybnMgdGhlIHJlc3VsdCBvZiBldmFsdWF0aW5nIHRoZSBjb2RlXG4gICAqL1xuICBwcml2YXRlIF9leGVjdXRlKGNvZGU6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHNjcmlwdCA9IG5ldyB2bS5TY3JpcHQoY29kZSwgeyBmaWxlbmFtZSB9KTtcbiAgICByZXR1cm4gc2NyaXB0LnJ1bkluQ29udGV4dCh0aGlzLnNhbmRib3gsIHsgZGlzcGxheUVycm9yczogdHJ1ZSB9KTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgQ2FsbGJhY2sge1xuICBvYmpyZWY6IGFwaS5PYmpSZWY7XG4gIG92ZXJyaWRlOiBhcGkuTWV0aG9kT3ZlcnJpZGU7XG4gIGFyZ3M6IGFueVtdO1xuICBleHBlY3RlZFJldHVyblR5cGU6IHdpcmUuT3B0aW9uYWxWYWx1ZU9yVm9pZDtcblxuICAvLyBjb21wbGV0aW9uIGNhbGxiYWNrc1xuICBzdWNjZWVkOiAoLi4uYXJnczogYW55W10pID0+IGFueTtcbiAgZmFpbDogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7XG59XG5cbmludGVyZmFjZSBBc3luY0ludm9jYXRpb24ge1xuICBtZXRob2Q6IHNwZWMuTWV0aG9kO1xuICBwcm9taXNlOiBQcm9taXNlPGFueT47XG59XG5cbmNsYXNzIEFzc2VtYmx5IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBtZXRhZGF0YTogc3BlYy5Bc3NlbWJseSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2xvc3VyZTogYW55LFxuICApIHt9XG59XG4iXX0=
904
+ //# sourceMappingURL=kernel.js.map
package/lib/objects.js CHANGED
@@ -24,8 +24,7 @@ const JSII_SYMBOL = Symbol.for('__jsii__');
24
24
  * information.
25
25
  */
26
26
  function jsiiTypeFqn(obj) {
27
- var _a;
28
- return (_a = obj.constructor[JSII_SYMBOL]) === null || _a === void 0 ? void 0 : _a.fqn;
27
+ return obj.constructor[JSII_SYMBOL]?.fqn;
29
28
  }
30
29
  exports.jsiiTypeFqn = jsiiTypeFqn;
31
30
  /**
@@ -99,7 +98,6 @@ class ObjectTable {
99
98
  * Return the existing registration if available.
100
99
  */
101
100
  registerObject(obj, fqn, interfaces) {
102
- var _a;
103
101
  if (fqn === undefined) {
104
102
  throw new Error('FQN cannot be undefined');
105
103
  }
@@ -107,7 +105,7 @@ class ObjectTable {
107
105
  if (existingRef) {
108
106
  if (interfaces) {
109
107
  const allIfaces = new Set(interfaces);
110
- for (const iface of (_a = existingRef[api.TOKEN_INTERFACES]) !== null && _a !== void 0 ? _a : []) {
108
+ for (const iface of existingRef[api.TOKEN_INTERFACES] ?? []) {
111
109
  allIfaces.add(iface);
112
110
  }
113
111
  // Note - obj[INTERFACES_SYMBOL] should already have been declared as a
@@ -133,7 +131,6 @@ class ObjectTable {
133
131
  * Find the object and registered type for the given ObjRef
134
132
  */
135
133
  findObject(objref) {
136
- var _a;
137
134
  if (typeof objref !== 'object' || !(api.TOKEN_REF in objref)) {
138
135
  throw new Error(`Malformed object reference: ${JSON.stringify(objref)}`);
139
136
  }
@@ -153,7 +150,7 @@ class ObjectTable {
153
150
  return {
154
151
  ...obj,
155
152
  interfaces: [
156
- ...((_a = obj.interfaces) !== null && _a !== void 0 ? _a : []),
153
+ ...(obj.interfaces ?? []),
157
154
  // We append at the end so "registered" interface information has
158
155
  // precedence over client-declared ones.
159
156
  ...additionalInterfaces,
@@ -235,4 +232,4 @@ class InterfaceCollection {
235
232
  return this.interfaces[Symbol.iterator]();
236
233
  }
237
234
  }
238
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9vYmplY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFtQztBQUVuQyw2QkFBNkI7QUFDN0IsbURBQW1EO0FBRW5EOztHQUVHO0FBQ0gsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBRXJEOztHQUVHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBRTNEOztHQUVHO0FBQ0gsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUUzQzs7Ozs7O0dBTUc7QUFDSCxTQUFnQixXQUFXLENBQUMsR0FBUTs7SUFDbEMsYUFBTyxHQUFHLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQywwQ0FBRSxHQUFHLENBQUM7QUFDM0MsQ0FBQztBQUZELGtDQUVDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxHQUFZO0lBQzFDLHFDQUFxQztJQUNyQyxJQUFLLEdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBRTtRQUM5QixPQUFPO1lBQ0wsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUcsR0FBcUIsQ0FBQyxZQUFZLENBQUM7WUFDckQsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFBRyxHQUFxQixDQUFDLGFBQWEsQ0FBQztTQUM5RCxDQUFDO0tBQ0g7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBVkQsMENBVUM7QUFPRCxTQUFTLFNBQVMsQ0FBQyxHQUFZLEVBQUUsS0FBYSxFQUFFLFVBQXFCO0lBQ25FLE1BQU0sWUFBWSxHQUFzRDtRQUN0RSw0RUFBNEU7UUFDNUUsMEVBQTBFO1FBQzFFLHdFQUF3RTtRQUN4RSxnQ0FBZ0M7UUFDaEMsVUFBVSxFQUFFLEtBQUs7UUFDakIseUVBQXlFO1FBQ3pFLDBFQUEwRTtRQUMxRSxnQ0FBZ0M7UUFDaEMsWUFBWSxFQUFFLElBQUk7UUFDbEIsUUFBUSxFQUFFLElBQUk7S0FDZixDQUFDO0lBRUYsMEVBQTBFO0lBQzFFLDJFQUEyRTtJQUMzRSxZQUFZO0lBQ1osSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxFQUFFO1FBQzNELE9BQU8sQ0FBQyxLQUFLLENBQ1gsaUNBQWlDLElBQUksQ0FBQyxTQUFTLENBQzdDLEdBQVUsQ0FDWCwwQkFBMkIsR0FBVyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQ3pELENBQUM7S0FDSDtJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxFQUFFLEdBQUcsWUFBWSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLGFBQWEsRUFBRTtRQUN4QyxHQUFHLFlBQVk7UUFDZixLQUFLLEVBQUUsVUFBVTtLQUNsQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxXQUFnQixFQUFFLEdBQVc7SUFDOUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFO1FBQzlDLFlBQVksRUFBRSxLQUFLO1FBQ25CLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLFFBQVEsRUFBRSxLQUFLO1FBQ2YsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFO0tBQ2YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQVBELGdEQU9DO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFhLFdBQVc7SUFJdEIsWUFDbUIsV0FBdUM7UUFBdkMsZ0JBQVcsR0FBWCxXQUFXLENBQTRCO1FBSmxELFlBQU8sR0FBMEMsRUFBRSxDQUFDO1FBQ3BELFdBQU0sR0FBRyxLQUFLLENBQUM7SUFJcEIsQ0FBQztJQUVKOzs7O09BSUc7SUFDSSxjQUFjLENBQ25CLEdBQVksRUFDWixHQUFXLEVBQ1gsVUFBcUI7O1FBRXJCLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRTtZQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7U0FDNUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekMsSUFBSSxXQUFXLEVBQUU7WUFDZixJQUFJLFVBQVUsRUFBRTtnQkFDZCxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdEMsS0FBSyxNQUFNLEtBQUssVUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLG1DQUFJLEVBQUUsRUFBRTtvQkFDM0QsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDdEI7Z0JBQ0QsdUVBQXVFO2dCQUN2RSxtRUFBbUU7Z0JBQ25FLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxFQUFFO29CQUM3RCxPQUFPLENBQUMsS0FBSyxDQUNYLDRDQUNFLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUMzQixzQkFBc0IsTUFBTSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQ3hELENBQUM7aUJBQ0g7Z0JBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVTtvQkFDaEQsR0FBVyxDQUFDLGFBQWEsQ0FBQzt3QkFDM0IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQzs0QkFDakMsVUFBVTtnQ0FDUixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDdEQ7WUFDRCxPQUFPLFdBQVcsQ0FBQztTQUNwQjtRQUVELFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVuRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUN6RCxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUVsQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDeEUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksVUFBVSxDQUFDLE1BQWtCOztRQUNsQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsRUFBRTtZQUM1RCxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMxRTtRQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1IsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssWUFBWSxDQUFDLENBQUM7U0FDOUM7UUFFRCwwRUFBMEU7UUFDMUUsdUVBQXVFO1FBQ3ZFLHFFQUFxRTtRQUNyRSxzRUFBc0U7UUFDdEUsc0VBQXNFO1FBQ3RFLHlCQUF5QjtRQUN6QixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMxRCxJQUFJLG9CQUFvQixJQUFJLElBQUksSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25FLE9BQU87Z0JBQ0wsR0FBRyxHQUFHO2dCQUNOLFVBQVUsRUFBRTtvQkFDVixHQUFHLE9BQUMsR0FBRyxDQUFDLFVBQVUsbUNBQUksRUFBRSxDQUFDO29CQUN6QixpRUFBaUU7b0JBQ2pFLHdDQUF3QztvQkFDeEMsR0FBRyxvQkFBb0I7aUJBQ3hCO2FBQ0YsQ0FBQztTQUNIO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZLENBQUMsTUFBa0I7UUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtRQUNuRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFXLEtBQUs7UUFDZCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMxQyxDQUFDO0lBRU8sTUFBTSxDQUFDLEdBQVc7UUFDeEIsT0FBTyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU8sZUFBZSxDQUNyQixVQUFnQyxFQUNoQyxHQUFXO1FBRVgsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMxQyxPQUFPLFNBQVMsQ0FBQztTQUNsQjtRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sT0FBTyxHQUFHLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTFELElBQUksR0FBRyxLQUFLLGdDQUFnQixFQUFFO1lBQzVCLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDM0I7UUFDRCxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUUzRCxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRTtZQUMzQixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3RCO1FBRUQsT0FBTyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2pFLENBQUM7Q0FDRjtBQW5JRCxrQ0FtSUM7QUFRRCxNQUFNLG1CQUFtQjtJQUd2QixZQUNtQixXQUF1QztRQUF2QyxnQkFBVyxHQUFYLFdBQVcsQ0FBNEI7UUFIekMsZUFBVSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFJN0MsQ0FBQztJQUVHLFlBQVksQ0FBQyxHQUFXO1FBQzdCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FDYixrQ0FBa0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQ25FLENBQUM7U0FDSDtRQUNELElBQUksRUFBRSxDQUFDLElBQUksRUFBRTtZQUNYLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFO1lBQ2pCLEtBQUssTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRTtnQkFDakMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDOUIsU0FBUztpQkFDVjtnQkFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzlCO1NBQ0Y7SUFDSCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsR0FBVztRQUNqQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQ2IsdUNBQXVDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUN4RSxDQUFDO1NBQ0g7UUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRTtZQUNsQixPQUFPO1NBQ1I7UUFDRCxLQUFLLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUU7WUFDakMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDOUIsU0FBUzthQUNWO1lBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQUVNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7SUFDNUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc3BlYyBmcm9tICdAanNpaS9zcGVjJztcblxuaW1wb3J0ICogYXMgYXBpIGZyb20gJy4vYXBpJztcbmltcG9ydCB7IEVNUFRZX09CSkVDVF9GUU4gfSBmcm9tICcuL3NlcmlhbGl6YXRpb24nO1xuXG4vKipcbiAqIFN5bWJvbCB1bmRlciB3aGljaCB3ZSBzdG9yZSB0aGUgeyB0eXBlIC0+IG9iamlkIH0gbWFwIG9uIG9iamVjdCBpbnN0YW5jZXNcbiAqL1xuY29uc3QgT0JKSURfU1lNQk9MID0gU3ltYm9sLmZvcignJF9fanNpaV9fb2JqaWRfXyQnKTtcblxuLyoqXG4gKiBTeW1ib2wgdW5kZXIgd2hpY2ggd2Ugc3RvcmUgdGhlIGludGVyZmFjZXMgaW1wbGVtZW50ZWQgYnkgaW5zdGFuY2VzXG4gKi9cbmNvbnN0IElGQUNFU19TWU1CT0wgPSBTeW1ib2wuZm9yKCckX19qc2lpX19pbnRlcmZhY2VzX18kJyk7XG5cbi8qKlxuICogU3ltYm9sIHdlIHVzZSB0byB0YWcgdGhlIGNvbnN0cnVjdG9yIG9mIGEgSlNJSSBjbGFzc1xuICovXG5jb25zdCBKU0lJX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ19fanNpaV9fJyk7XG5cbi8qKlxuICogR2V0IHRoZSBKU0lJIGZxbiBmb3IgYW4gb2JqZWN0IChpZiBhdmFpbGFibGUpXG4gKlxuICogVGhpcyB3aWxsIHJldHVybiBzb21ldGhpbmcgaWYgdGhlIG9iamVjdCB3YXMgY29uc3RydWN0ZWQgZnJvbSBhIEpTSUktZW5hYmxlZFxuICogY2xhc3MvY29uc3RydWN0b3IsIG9yIGlmIGEgbGl0ZXJhbCBvYmplY3Qgd2FzIGFubm90YXRlZCB3aXRoIHR5cGVcbiAqIGluZm9ybWF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24ganNpaVR5cGVGcW4ob2JqOiBhbnkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gb2JqLmNvbnN0cnVjdG9yW0pTSUlfU1lNQk9MXT8uZnFuO1xufVxuXG4vKipcbiAqIElmIHRoaXMgb2JqZWN0IHdhcyBwcmV2aW91c2x5IHNlcmlhbGl6ZWQgdW5kZXIgYSBnaXZlbiByZWZlcmVuY2UsIHJldHVybiB0aGUgc2FtZSByZWZlcmVuY2VcbiAqXG4gKiBUaGlzIGlzIHRvIHJldGFpbiBvYmplY3QgaWRlbnRpdHkgYWNyb3NzIGludm9jYXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0UmVmZXJlbmNlKG9iajogdW5rbm93bik6IGFwaS5PYmpSZWYgfCB1bmRlZmluZWQge1xuICAvLyBJZiB0aGlzIG9iamVjdCBhcyBhbHJlYWR5IHJldHVybmVkXG4gIGlmICgob2JqIGFzIGFueSlbT0JKSURfU1lNQk9MXSkge1xuICAgIHJldHVybiB7XG4gICAgICBbYXBpLlRPS0VOX1JFRl06IChvYmogYXMgTWFuYWdlZE9iamVjdClbT0JKSURfU1lNQk9MXSxcbiAgICAgIFthcGkuVE9LRU5fSU5URVJGQUNFU106IChvYmogYXMgTWFuYWdlZE9iamVjdClbSUZBQ0VTX1NZTUJPTF0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbnR5cGUgTWFuYWdlZE9iamVjdCA9IHtcbiAgW09CSklEX1NZTUJPTF06IHN0cmluZztcbiAgW0lGQUNFU19TWU1CT0xdPzogc3RyaW5nW107XG59O1xuXG5mdW5jdGlvbiB0YWdPYmplY3Qob2JqOiB1bmtub3duLCBvYmppZDogc3RyaW5nLCBpbnRlcmZhY2VzPzogc3RyaW5nW10pIHtcbiAgY29uc3QgcHJpdmF0ZUZpZWxkOiBPbWl0PFByb3BlcnR5RGVzY3JpcHRvciwgJ3ZhbHVlJyB8ICdnZXQnIHwgJ3NldCc+ID0ge1xuICAgIC8vIE1ha2Ugc3VyZSB0aGUgZmllbGQgZG9lcyBub3Qgc2hvdyBpbiBgSlNPTi5zdHJpbmdpZnlgIG91dHB1dHMsIGFuZCBpcyBub3RcbiAgICAvLyBjb3BpZWQgYnkgc3BsYXQgZXhwcmVzc2lvbnMgKGB7Li4ub2JqfWApLCBhcyB0aGlzIHdvdWxkIGJlIHByb2JsZW1hdGljLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzE3ODc2IGZvciBhbiBleGFtcGxlIG9mIHRoZVxuICAgIC8vIGNvbnNlcXVlbmNlcyB0aGlzIGNvdWxkIGhhdmUuXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgLy8gUHJvYmFibHkgbm90IG5lY2Vzc2FyeSwgYnV0IGFsbG93IHRoZSBwcm9wZXJ0eSB0byBiZSByZS1jb25maWd1cmVkIChpdFxuICAgIC8vIHdvdWxkIGJlIGdvb2QgdG8gbWFrZSB0aGlzIGBmYWxzZWAgaW4gdGhlIGZ1dHVyZSwgYnV0IG1pZ2h0IGNhdXNlIHdlaXJkXG4gICAgLy8gYnVncywgc28gbm90IGRvaW5nIGl0IG5vdy4uLilcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gIH07XG5cbiAgLy8gTG9nIGEgd2FybmluZyBpbiBjYXNlIHdlIGFyZSByZS10YWdnaW5nIHRoaXMgdmFsdWUsIHNvIHdlIGNhbiBob3BlZnVsbHlcbiAgLy8gZGlzY292ZXIgYWJvdXQgdGhlIGJ1Z3Mgd2UnZCBoYXZlIGlmIHdlIGRpZCBub3QgbWFrZSBpdCBjb25maWd1cmFibGUgbm9yXG4gIC8vIHdyaXRhYmxlLlxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgT0JKSURfU1lNQk9MKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBgW2pzaWkva2VybmVsXSBXQVJOSU5HOiBvYmplY3QgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgb2JqIGFzIGFueSxcbiAgICAgICl9IHdhcyBhbHJlYWR5IHRhZ2dlZCBhcyAkeyhvYmogYXMgYW55KVtPQkpJRF9TWU1CT0xdfSFgLFxuICAgICk7XG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBPQkpJRF9TWU1CT0wsIHsgLi4ucHJpdmF0ZUZpZWxkLCB2YWx1ZTogb2JqaWQgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIElGQUNFU19TWU1CT0wsIHtcbiAgICAuLi5wcml2YXRlRmllbGQsXG4gICAgdmFsdWU6IGludGVyZmFjZXMsXG4gIH0pO1xufVxuXG4vKipcbiAqIFNldCB0aGUgSlNJSSBGUU4gZm9yIGNsYXNzZXMgcHJvZHVjZWQgYnkgYSBnaXZlbiBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gdGFnSnNpaUNvbnN0cnVjdG9yKGNvbnN0cnVjdG9yOiBhbnksIGZxbjogc3RyaW5nKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25zdHJ1Y3RvciwgSlNJSV9TWU1CT0wsIHtcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZTogeyBmcW4gfSxcbiAgfSk7XG59XG5cbi8qKlxuICogVGFibGUgb2YgSlNJSSBvYmplY3RzXG4gKlxuICogVGhlcmUgY2FuIGJlIG11bHRpcGxlIHJlZmVyZW5jZXMgdG8gdGhlIHNhbWUgb2JqZWN0LCBlYWNoIHVuZGVyIGEgZGlmZmVyZW50IHJlcXVlc3RlZFxuICogdHlwZS5cbiAqL1xuZXhwb3J0IGNsYXNzIE9iamVjdFRhYmxlIHtcbiAgcHJpdmF0ZSBvYmplY3RzOiB7IFtvYmppZDogc3RyaW5nXTogUmVnaXN0ZXJlZE9iamVjdCB9ID0ge307XG4gIHByaXZhdGUgbmV4dGlkID0gMTAwMDA7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzb2x2ZVR5cGU6IChmcW46IHN0cmluZykgPT4gc3BlYy5UeXBlLFxuICApIHt9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIHRoZSBnaXZlbiBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdHlwZVxuICAgKlxuICAgKiBSZXR1cm4gdGhlIGV4aXN0aW5nIHJlZ2lzdHJhdGlvbiBpZiBhdmFpbGFibGUuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPYmplY3QoXG4gICAgb2JqOiB1bmtub3duLFxuICAgIGZxbjogc3RyaW5nLFxuICAgIGludGVyZmFjZXM/OiBzdHJpbmdbXSxcbiAgKTogYXBpLk9ialJlZiB7XG4gICAgaWYgKGZxbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZRTiBjYW5ub3QgYmUgdW5kZWZpbmVkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmdSZWYgPSBvYmplY3RSZWZlcmVuY2Uob2JqKTtcbiAgICBpZiAoZXhpc3RpbmdSZWYpIHtcbiAgICAgIGlmIChpbnRlcmZhY2VzKSB7XG4gICAgICAgIGNvbnN0IGFsbElmYWNlcyA9IG5ldyBTZXQoaW50ZXJmYWNlcyk7XG4gICAgICAgIGZvciAoY29uc3QgaWZhY2Ugb2YgZXhpc3RpbmdSZWZbYXBpLlRPS0VOX0lOVEVSRkFDRVNdID8/IFtdKSB7XG4gICAgICAgICAgYWxsSWZhY2VzLmFkZChpZmFjZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90ZSAtIG9ialtJTlRFUkZBQ0VTX1NZTUJPTF0gc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIGRlY2xhcmVkIGFzIGFcbiAgICAgICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eSBieSBhIHByZXZpb3VzIGNhbGwgdG8gdGFnT2JqZWN0ICBhdCB0aGlzIHN0YWdlLlxuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIElGQUNFU19TWU1CT0wpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBbanNpaS9rZXJuZWxdIFdBUk5JTkc6IHJlZmVyZW5jZWQgb2JqZWN0ICR7XG4gICAgICAgICAgICAgIGV4aXN0aW5nUmVmW2FwaS5UT0tFTl9SRUZdXG4gICAgICAgICAgICB9IGRvZXMgbm90IGhhdmUgdGhlICR7U3RyaW5nKElGQUNFU19TWU1CT0wpfSBwcm9wZXJ0eSFgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9iamVjdHNbZXhpc3RpbmdSZWZbYXBpLlRPS0VOX1JFRl1dLmludGVyZmFjZXMgPVxuICAgICAgICAgIChvYmogYXMgYW55KVtJRkFDRVNfU1lNQk9MXSA9XG4gICAgICAgICAgZXhpc3RpbmdSZWZbYXBpLlRPS0VOX0lOVEVSRkFDRVNdID1cbiAgICAgICAgICBpbnRlcmZhY2VzID1cbiAgICAgICAgICAgIHRoaXMucmVtb3ZlUmVkdW5kYW50KEFycmF5LmZyb20oYWxsSWZhY2VzKSwgZnFuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBleGlzdGluZ1JlZjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2VzID0gdGhpcy5yZW1vdmVSZWR1bmRhbnQoaW50ZXJmYWNlcywgZnFuKTtcblxuICAgIGNvbnN0IG9iamlkID0gdGhpcy5tYWtlSWQoZnFuKTtcbiAgICB0aGlzLm9iamVjdHNbb2JqaWRdID0geyBpbnN0YW5jZTogb2JqLCBmcW4sIGludGVyZmFjZXMgfTtcbiAgICB0YWdPYmplY3Qob2JqLCBvYmppZCwgaW50ZXJmYWNlcyk7XG5cbiAgICByZXR1cm4geyBbYXBpLlRPS0VOX1JFRl06IG9iamlkLCBbYXBpLlRPS0VOX0lOVEVSRkFDRVNdOiBpbnRlcmZhY2VzIH07XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgb2JqZWN0IGFuZCByZWdpc3RlcmVkIHR5cGUgZm9yIHRoZSBnaXZlbiBPYmpSZWZcbiAgICovXG4gIHB1YmxpYyBmaW5kT2JqZWN0KG9ianJlZjogYXBpLk9ialJlZik6IFJlZ2lzdGVyZWRPYmplY3Qge1xuICAgIGlmICh0eXBlb2Ygb2JqcmVmICE9PSAnb2JqZWN0JyB8fCAhKGFwaS5UT0tFTl9SRUYgaW4gb2JqcmVmKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNYWxmb3JtZWQgb2JqZWN0IHJlZmVyZW5jZTogJHtKU09OLnN0cmluZ2lmeShvYmpyZWYpfWApO1xuICAgIH1cblxuICAgIGNvbnN0IG9iamlkID0gb2JqcmVmW2FwaS5UT0tFTl9SRUZdO1xuICAgIGNvbnN0IG9iaiA9IHRoaXMub2JqZWN0c1tvYmppZF07XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgT2JqZWN0ICR7b2JqaWR9IG5vdCBmb3VuZGApO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGFyZSBcImFkZGl0aW9uYWxcIiBpbnRlcmZhY2VzIGRlY2xhcmVkIG9uIHRoZSBvYmpyZWYsIG1lcmdlIHRoZW1cbiAgICAvLyBpbnRvIHRoZSByZXR1cm5lZCBvYmplY3QuIFRoaXMgaXMgdXNlZCB0byBzdXBwb3J0IGNsaWVudC1zaWRlIGZvcmNlZFxuICAgIC8vIGRvd24tY2FzdGluZyAoYS5rLmE6IHVuc2FmZSBjYXN0aW5nKS4gV2UgZG8gTk9UIHJlZ2lzdGVyIHRoZSBleHRyYVxuICAgIC8vIGludGVyZmFjZXMgaGVyZSBzbyB0aGF0IGlmIHRoZSBjbGllbnQgcHJvdmlkZWQgYW4gaW50ZXJmYWNlIHRoYXQgaXNcbiAgICAvLyBhY3R1YWxseSBub3QgaW1wbGVtZW50ZWQsIHdlIGFyZW4ndCBcInBvaXNvbmluZ1wiIG91ciBzdGF0ZSB3aXRoIHRoYXRcbiAgICAvLyBpbmNvcnJlY3QgaW5mb3JtYXRpb24uXG4gICAgY29uc3QgYWRkaXRpb25hbEludGVyZmFjZXMgPSBvYmpyZWZbYXBpLlRPS0VOX0lOVEVSRkFDRVNdO1xuICAgIGlmIChhZGRpdGlvbmFsSW50ZXJmYWNlcyAhPSBudWxsICYmIGFkZGl0aW9uYWxJbnRlcmZhY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm9iaixcbiAgICAgICAgaW50ZXJmYWNlczogW1xuICAgICAgICAgIC4uLihvYmouaW50ZXJmYWNlcyA/PyBbXSksXG4gICAgICAgICAgLy8gV2UgYXBwZW5kIGF0IHRoZSBlbmQgc28gXCJyZWdpc3RlcmVkXCIgaW50ZXJmYWNlIGluZm9ybWF0aW9uIGhhc1xuICAgICAgICAgIC8vIHByZWNlZGVuY2Ugb3ZlciBjbGllbnQtZGVjbGFyZWQgb25lcy5cbiAgICAgICAgICAuLi5hZGRpdGlvbmFsSW50ZXJmYWNlcyxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgdGhlIHJlZ2lzdHJhdGlvbiB3aXRoIHRoZSBnaXZlbiBvYmpyZWZcbiAgICovXG4gIHB1YmxpYyBkZWxldGVPYmplY3Qob2JqcmVmOiBhcGkuT2JqUmVmKSB7XG4gICAgdGhpcy5maW5kT2JqZWN0KG9ianJlZik7IC8vIG1ha2Ugc3VyZSBvYmplY3QgZXhpc3RzXG4gICAgZGVsZXRlIHRoaXMub2JqZWN0c1tvYmpyZWZbYXBpLlRPS0VOX1JFRl1dO1xuICB9XG5cbiAgcHVibGljIGdldCBjb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLm9iamVjdHMpLmxlbmd0aDtcbiAgfVxuXG4gIHByaXZhdGUgbWFrZUlkKGZxbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGAke2Zxbn1AJHt0aGlzLm5leHRpZCsrfWA7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVJlZHVuZGFudChcbiAgICBpbnRlcmZhY2VzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcbiAgICBmcW46IHN0cmluZyxcbiAgKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIGlmICghaW50ZXJmYWNlcyB8fCBpbnRlcmZhY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBuZXcgU2V0KGludGVyZmFjZXMpO1xuICAgIGNvbnN0IGJ1aWx0SW4gPSBuZXcgSW50ZXJmYWNlQ29sbGVjdGlvbih0aGlzLnJlc29sdmVUeXBlKTtcblxuICAgIGlmIChmcW4gIT09IEVNUFRZX09CSkVDVF9GUU4pIHtcbiAgICAgIGJ1aWx0SW4uYWRkRnJvbUNsYXNzKGZxbik7XG4gICAgfVxuICAgIGludGVyZmFjZXMuZm9yRWFjaChidWlsdEluLmFkZEZyb21JbnRlcmZhY2UuYmluZChidWlsdEluKSk7XG5cbiAgICBmb3IgKGNvbnN0IGlmYWNlIG9mIGJ1aWx0SW4pIHtcbiAgICAgIHJlc3VsdC5kZWxldGUoaWZhY2UpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQuc2l6ZSA+IDAgPyBBcnJheS5mcm9tKHJlc3VsdCkuc29ydCgpIDogdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0ZXJlZE9iamVjdCB7XG4gIGluc3RhbmNlOiBhbnk7XG4gIGZxbjogc3RyaW5nO1xuICBpbnRlcmZhY2VzPzogc3RyaW5nW107XG59XG5cbmNsYXNzIEludGVyZmFjZUNvbGxlY3Rpb24gaW1wbGVtZW50cyBJdGVyYWJsZTxzdHJpbmc+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBpbnRlcmZhY2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzb2x2ZVR5cGU6IChmcW46IHN0cmluZykgPT4gc3BlYy5UeXBlLFxuICApIHt9XG5cbiAgcHVibGljIGFkZEZyb21DbGFzcyhmcW46IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRpID0gdGhpcy5yZXNvbHZlVHlwZShmcW4pO1xuICAgIGlmICghc3BlYy5pc0NsYXNzVHlwZSh0aSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEV4cGVjdGVkIGEgY2xhc3MsIGJ1dCByZWNlaXZlZCAke3NwZWMuZGVzY3JpYmVUeXBlUmVmZXJlbmNlKHRpKX1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRpLmJhc2UpIHtcbiAgICAgIHRoaXMuYWRkRnJvbUNsYXNzKHRpLmJhc2UpO1xuICAgIH1cbiAgICBpZiAodGkuaW50ZXJmYWNlcykge1xuICAgICAgZm9yIChjb25zdCBpZmFjZSBvZiB0aS5pbnRlcmZhY2VzKSB7XG4gICAgICAgIGlmICh0aGlzLmludGVyZmFjZXMuaGFzKGlmYWNlKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW50ZXJmYWNlcy5hZGQoaWZhY2UpO1xuICAgICAgICB0aGlzLmFkZEZyb21JbnRlcmZhY2UoaWZhY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRGcm9tSW50ZXJmYWNlKGZxbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdGkgPSB0aGlzLnJlc29sdmVUeXBlKGZxbik7XG4gICAgaWYgKCFzcGVjLmlzSW50ZXJmYWNlVHlwZSh0aSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEV4cGVjdGVkIGFuIGludGVyZmFjZSwgYnV0IHJlY2VpdmVkICR7c3BlYy5kZXNjcmliZVR5cGVSZWZlcmVuY2UodGkpfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXRpLmludGVyZmFjZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBpZmFjZSBvZiB0aS5pbnRlcmZhY2VzKSB7XG4gICAgICBpZiAodGhpcy5pbnRlcmZhY2VzLmhhcyhpZmFjZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0aGlzLmludGVyZmFjZXMuYWRkKGlmYWNlKTtcbiAgICAgIHRoaXMuYWRkRnJvbUludGVyZmFjZShpZmFjZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIHJldHVybiB0aGlzLmludGVyZmFjZXNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICB9XG59XG4iXX0=
235
+ //# sourceMappingURL=objects.js.map
package/lib/on-exit.js CHANGED
@@ -29,4 +29,4 @@ function registerIfNeeded() {
29
29
  }
30
30
  }
31
31
  }
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib24tZXhpdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9vbi1leGl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFFbkMsTUFBTSxlQUFlLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztBQUU1QyxTQUFnQixVQUFVLENBQUMsSUFBWTtJQUNyQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ25CLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0IsQ0FBQztBQUhELGdDQUdDO0FBRUQsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBRXZCOzs7O0dBSUc7QUFDSCxTQUFTLGdCQUFnQjtJQUN2QixJQUFJLFVBQVUsRUFBRTtRQUNkLE9BQU87S0FDUjtJQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3BDLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFFbEIsU0FBUyxhQUFhO1FBQ3BCLElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDOUIsS0FBSyxNQUFNLElBQUksSUFBSSxlQUFlLEVBQUU7Z0JBQ2xDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDckI7U0FDRjtJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0ICogYXMgcHJvY2VzcyBmcm9tICdwcm9jZXNzJztcblxuY29uc3QgcmVtb3ZlU3luY1BhdGhzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVN5bmMocGF0aDogc3RyaW5nKTogdm9pZCB7XG4gIHJlZ2lzdGVySWZOZWVkZWQoKTtcbiAgcmVtb3ZlU3luY1BhdGhzLnB1c2gocGF0aCk7XG59XG5cbmxldCByZWdpc3RlcmVkID0gZmFsc2U7XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBleGlzdCBoYW5kbGVyIGlmIGl0IGhhcyBub3QgYmVlbiByZWdpc3RlcmVkIGFscmVhZHkuIFRoaXMgaXMgZG9uZSBleGFjdGx5IG9jbmUgcGVyXG4gKiBwcm9jZXNzLCBzbyB0aGF0IHByb2Nlc3NlcyB3aXRoIG11bHRpcGxlIGtlcm5lbHMgZG9uJ3QgZW5kIHVwIGNyZWF0aW5nIHRvbyBtYW55IGV4aXQgaGFuZGxlcnMsIGFzXG4gKiB0aGlzIHJlZHVjZXMgdGhlIGNoYW5jZXMgdGhleSB3aWxsIGNvcnJlY3RseSBydW4uXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVySWZOZWVkZWQoKSB7XG4gIGlmIChyZWdpc3RlcmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHByb2Nlc3Mub25jZSgnZXhpdCcsIG9uRXhpdEhhbmRsZXIpO1xuICByZWdpc3RlcmVkID0gdHJ1ZTtcblxuICBmdW5jdGlvbiBvbkV4aXRIYW5kbGVyKCkge1xuICAgIGlmIChyZW1vdmVTeW5jUGF0aHMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBwYXRoIG9mIHJlbW92ZVN5bmNQYXRocykge1xuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
32
+ //# sourceMappingURL=on-exit.js.map
package/lib/recording.js CHANGED
@@ -39,7 +39,7 @@ function recordInteraction(kernel, inputOutputLogPath) {
39
39
  try {
40
40
  const ret = old.value.apply(this, args);
41
41
  // if this is an async function, wait for the promised value.
42
- if (typeof (ret === null || ret === void 0 ? void 0 : ret.then) === 'function') {
42
+ if (typeof ret?.then === 'function') {
43
43
  return new Promise((ok, fail) => {
44
44
  return ret
45
45
  .then((value) => {
@@ -70,4 +70,4 @@ function recordInteraction(kernel, inputOutputLogPath) {
70
70
  }
71
71
  }
72
72
  exports.recordInteraction = recordInteraction;
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JlY29yZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFFL0IscUNBQWtDO0FBRTNCLEtBQUssVUFBVSxjQUFjLENBQUMsTUFBYztJQUNqRCxNQUFNLE9BQU8sR0FBb0IsTUFBYyxDQUFDLE9BQU8sQ0FBQztJQUN4RCxJQUFJLENBQUMsT0FBTyxFQUFFO1FBQ1osT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDMUI7SUFFRCxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFZCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7UUFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1lBQzFCLEVBQUUsRUFBRSxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFiRCx3Q0FhQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLE1BQWMsRUFBRSxrQkFBMEI7SUFDMUUsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDeEQsTUFBYyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFFbEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsZUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQy9ELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQztTQUN2RSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFO1FBQ3RCLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtZQUNqQyxHQUFHLEdBQUc7WUFDTixLQUFLLENBQUMsR0FBRyxJQUFXO2dCQUNsQixRQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM5QixJQUFJO29CQUNGLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFFeEMsNkRBQTZEO29CQUM3RCxJQUFJLFFBQU8sR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLElBQUksQ0FBQSxLQUFLLFVBQVUsRUFBRTt3QkFDbkMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRTs0QkFDOUIsT0FBTyxHQUFHO2lDQUNQLElBQUksQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO2dDQUNuQixTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQ0FDekIsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUNaLENBQUMsQ0FBQztpQ0FDRCxLQUFLLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQ0FDbEIsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dDQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ1osQ0FBQyxDQUFDLENBQUM7d0JBQ1AsQ0FBQyxDQUFDLENBQUM7cUJBQ0o7b0JBRUQsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQ3ZCLE9BQU8sR0FBRyxDQUFDO2lCQUNaO2dCQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNWLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDaEMsTUFBTSxDQUFDLENBQUM7aUJBQ1Q7WUFDSCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFTCxTQUFTLFFBQVEsQ0FBQyxHQUFRO1FBQ3hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsU0FBUyxTQUFTLENBQUMsR0FBUTtRQUN6QixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztBQUNILENBQUM7QUE5Q0QsOENBOENDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuXG5pbXBvcnQgeyBLZXJuZWwgfSBmcm9tICcuL2tlcm5lbCc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbG9zZVJlY29yZGluZyhrZXJuZWw6IEtlcm5lbCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBsb2dmaWxlOiBmcy5Xcml0ZVN0cmVhbSA9IChrZXJuZWwgYXMgYW55KS5sb2dmaWxlO1xuICBpZiAoIWxvZ2ZpbGUpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBsb2dmaWxlLmVuZCgpO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgob2spID0+IHtcbiAgICBsb2dmaWxlLm9uY2UoJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgIG9rKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFN0YXJ0IHJlY29yZGluZyBhbGwgaW50ZXJhY3Rpb24gd2l0aCB0aGUga2VybmVsIG9iamVjdC5cbiAqXG4gKiBUaGlzIG1ldGhvZCBpbnN0YWxscyBhIHByb3h5IGZ1bmN0aW9uIGZvciBlYWNoIHB1YmxpYyBBUEkgaW4gdGhlIGtlcm5lbCAobWV0aG9kcyB0aGF0IGRvIG5vdFxuICogc3RhcnQgd2l0aCAnXycpIGFuZCByZWNvcmRzIGlucHV0IHJlcXVlc3RzIGFuZCBvdXRwdXQgcmVxdWVzdHMgaW50byBKU09OIHN0cmVhbSBmaWxlcy5cbiAqXG4gKiBAcGFyYW0ga2VybmVsIFRoZSBrZXJuZWwgb2JqZWN0IHRvIHJlY29yZC5cbiAqIEBwYXJhbSBpbnB1dExvZyBJbnB1dCBsb2cgc3RyZWFtXG4gKiBAcGFyYW0gb3V0cHV0TG9nIE91dHB1dCBsb2cgc3RyZWFtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVjb3JkSW50ZXJhY3Rpb24oa2VybmVsOiBLZXJuZWwsIGlucHV0T3V0cHV0TG9nUGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IGxvZ2ZpbGUgPSBmcy5jcmVhdGVXcml0ZVN0cmVhbShpbnB1dE91dHB1dExvZ1BhdGgpO1xuICAoa2VybmVsIGFzIGFueSkubG9nZmlsZSA9IGxvZ2ZpbGU7XG5cbiAgT2JqZWN0LmVudHJpZXMoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoS2VybmVsLnByb3RvdHlwZSkpXG4gICAgLmZpbHRlcigoW3AsIHZdKSA9PiAhcC5zdGFydHNXaXRoKCdfJykgJiYgdHlwZW9mIHYudmFsdWUgPT09ICdmdW5jdGlvbicpXG4gICAgLmZvckVhY2goKFthcGksIG9sZF0pID0+IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrZXJuZWwsIGFwaSwge1xuICAgICAgICAuLi5vbGQsXG4gICAgICAgIHZhbHVlKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICAgICAgbG9nSW5wdXQoeyBhcGksIC4uLmFyZ3NbMF0gfSk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IG9sZC52YWx1ZS5hcHBseSh0aGlzLCBhcmdzKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhbiBhc3luYyBmdW5jdGlvbiwgd2FpdCBmb3IgdGhlIHByb21pc2VkIHZhbHVlLlxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXQ/LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChvaywgZmFpbCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXRcbiAgICAgICAgICAgICAgICAgIC50aGVuKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ091dHB1dCh7IG9rOiB2YWx1ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgb2sodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nT3V0cHV0KHsgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgICAgICAgICAgICAgICAgICBmYWlsKGVycik7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxvZ091dHB1dCh7IG9rOiByZXQgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvZ091dHB1dCh7IGVycm9yOiBlLm1lc3NhZ2UgfSk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gIGZ1bmN0aW9uIGxvZ0lucHV0KG9iajogYW55KSB7XG4gICAgbG9nZmlsZS53cml0ZShgPiAke0pTT04uc3RyaW5naWZ5KG9iail9XFxuYCk7XG4gIH1cblxuICBmdW5jdGlvbiBsb2dPdXRwdXQob2JqOiBhbnkpIHtcbiAgICBsb2dmaWxlLndyaXRlKGA8ICR7SlNPTi5zdHJpbmdpZnkob2JqKX1cXG5gKTtcbiAgfVxufVxuIl19
73
+ //# sourceMappingURL=recording.js.map
@@ -39,7 +39,7 @@ exports.EMPTY_OBJECT_FQN = 'Object';
39
39
  exports.SYMBOL_WIRE_TYPE = Symbol.for('$jsii$wireType$');
40
40
  exports.SERIALIZERS = {
41
41
  // ----------------------------------------------------------------------
42
- ["Void" /* Void */]: {
42
+ ["Void" /* SerializationClass.Void */]: {
43
43
  serialize(value, _type, host) {
44
44
  if (value != null) {
45
45
  host.debug('Expected void, got', value);
@@ -54,7 +54,7 @@ exports.SERIALIZERS = {
54
54
  },
55
55
  },
56
56
  // ----------------------------------------------------------------------
57
- ["Date" /* Date */]: {
57
+ ["Date" /* SerializationClass.Date */]: {
58
58
  serialize(value, optionalValue) {
59
59
  if (nullAndOk(value, optionalValue)) {
60
60
  return undefined;
@@ -71,14 +71,14 @@ exports.SERIALIZERS = {
71
71
  if (nullAndOk(value, optionalValue)) {
72
72
  return undefined;
73
73
  }
74
- if (!api_1.isWireDate(value)) {
74
+ if (!(0, api_1.isWireDate)(value)) {
75
75
  throw new Error(`Expected Date, got ${JSON.stringify(value)}`);
76
76
  }
77
77
  return deserializeDate(value);
78
78
  },
79
79
  },
80
80
  // ----------------------------------------------------------------------
81
- ["Scalar" /* Scalar */]: {
81
+ ["Scalar" /* SerializationClass.Scalar */]: {
82
82
  serialize(value, optionalValue) {
83
83
  if (nullAndOk(value, optionalValue)) {
84
84
  return undefined;
@@ -113,7 +113,7 @@ exports.SERIALIZERS = {
113
113
  },
114
114
  },
115
115
  // ----------------------------------------------------------------------
116
- ["Json" /* Json */]: {
116
+ ["Json" /* SerializationClass.Json */]: {
117
117
  serialize(value) {
118
118
  // Just whatever. Dates will automatically serialize themselves to strings.
119
119
  return value;
@@ -127,8 +127,8 @@ exports.SERIALIZERS = {
127
127
  // is passed into a JSON transfer point. Indeed, those are also valid JSON! For example, Python "dicts" will be
128
128
  // serialized (by the Python runtime) as a $jsii.map (the mapping object). We need to de-serialize that as a
129
129
  // Map<string, JSON> in order to obtain the correct output behavior here!
130
- if (api_1.isWireMap(value)) {
131
- return exports.SERIALIZERS["Map" /* Map */].deserialize(value, {
130
+ if ((0, api_1.isWireMap)(value)) {
131
+ return exports.SERIALIZERS["Map" /* SerializationClass.Map */].deserialize(value, {
132
132
  optional: false,
133
133
  type: {
134
134
  collection: {
@@ -156,7 +156,7 @@ exports.SERIALIZERS = {
156
156
  },
157
157
  },
158
158
  // ----------------------------------------------------------------------
159
- ["Enum" /* Enum */]: {
159
+ ["Enum" /* SerializationClass.Enum */]: {
160
160
  serialize(value, optionalValue, host) {
161
161
  if (nullAndOk(value, optionalValue)) {
162
162
  return undefined;
@@ -180,14 +180,14 @@ exports.SERIALIZERS = {
180
180
  if (nullAndOk(value, optionalValue)) {
181
181
  return undefined;
182
182
  }
183
- if (!api_1.isWireEnum(value)) {
183
+ if (!(0, api_1.isWireEnum)(value)) {
184
184
  throw new Error(`Expected enum value, got ${JSON.stringify(value)}`);
185
185
  }
186
186
  return deserializeEnum(value, host.findSymbol);
187
187
  },
188
188
  },
189
189
  // ----------------------------------------------------------------------
190
- ["Array" /* Array */]: {
190
+ ["Array" /* SerializationClass.Array */]: {
191
191
  serialize(value, optionalValue, host) {
192
192
  if (nullAndOk(value, optionalValue)) {
193
193
  return undefined;
@@ -216,7 +216,7 @@ exports.SERIALIZERS = {
216
216
  },
217
217
  },
218
218
  // ----------------------------------------------------------------------
219
- ["Map" /* Map */]: {
219
+ ["Map" /* SerializationClass.Map */]: {
220
220
  serialize(value, optionalValue, host) {
221
221
  if (nullAndOk(value, optionalValue)) {
222
222
  return undefined;
@@ -237,7 +237,7 @@ exports.SERIALIZERS = {
237
237
  throw new Error('Encountered unexpected `void` type');
238
238
  }
239
239
  const mapType = optionalValue.type;
240
- if (!api_1.isWireMap(value)) {
240
+ if (!(0, api_1.isWireMap)(value)) {
241
241
  // Compatibility mode with older versions that didn't wrap in [TOKEN_MAP]
242
242
  return mapValues(value, (v) => host.recurse(v, { type: mapType.collection.elementtype }));
243
243
  }
@@ -252,7 +252,7 @@ exports.SERIALIZERS = {
252
252
  },
253
253
  },
254
254
  // ----------------------------------------------------------------------
255
- ["Struct" /* Struct */]: {
255
+ ["Struct" /* SerializationClass.Struct */]: {
256
256
  serialize(value, optionalValue, host) {
257
257
  if (nullAndOk(value, optionalValue)) {
258
258
  return undefined;
@@ -283,7 +283,7 @@ exports.SERIALIZERS = {
283
283
  ]);
284
284
  },
285
285
  deserialize(value, optionalValue, host) {
286
- if (typeof value === 'object' && Object.keys(value !== null && value !== void 0 ? value : {}).length === 0) {
286
+ if (typeof value === 'object' && Object.keys(value ?? {}).length === 0) {
287
287
  // Treat empty structs as `undefined` (see https://github.com/aws/jsii/issues/411)
288
288
  value = undefined;
289
289
  }
@@ -304,7 +304,7 @@ exports.SERIALIZERS = {
304
304
  // Similarly to serialization, we might be getting a reference type where we're
305
305
  // expecting a value type. Accept this for now (but also validate that object
306
306
  // for presence of the right properties).
307
- if (api_1.isObjRef(value)) {
307
+ if ((0, api_1.isObjRef)(value)) {
308
308
  host.debug('Expected value type but got reference type, accepting for now (awslabs/jsii#400)');
309
309
  // Return same INSTANCE (shouldn't matter but we don't know for sure that it doesn't)
310
310
  return validateRequiredProps(host.objects.findObject(value).instance, namedType.fqn, props);
@@ -331,9 +331,8 @@ exports.SERIALIZERS = {
331
331
  },
332
332
  },
333
333
  // ----------------------------------------------------------------------
334
- ["RefType" /* ReferenceType */]: {
334
+ ["RefType" /* SerializationClass.ReferenceType */]: {
335
335
  serialize(value, optionalValue, host) {
336
- var _a;
337
336
  if (nullAndOk(value, optionalValue)) {
338
337
  return undefined;
339
338
  }
@@ -347,7 +346,8 @@ exports.SERIALIZERS = {
347
346
  const interfaces = spec.isInterfaceType(expectedType)
348
347
  ? [expectedType.fqn]
349
348
  : undefined;
350
- const jsiiType = (_a = objects_1.jsiiTypeFqn(value)) !== null && _a !== void 0 ? _a : (spec.isClassType(expectedType) ? expectedType.fqn : exports.EMPTY_OBJECT_FQN);
349
+ const jsiiType = (0, objects_1.jsiiTypeFqn)(value) ??
350
+ (spec.isClassType(expectedType) ? expectedType.fqn : exports.EMPTY_OBJECT_FQN);
351
351
  return host.objects.registerObject(value, jsiiType, interfaces);
352
352
  },
353
353
  deserialize(value, optionalValue, host) {
@@ -359,7 +359,7 @@ exports.SERIALIZERS = {
359
359
  }
360
360
  // The only way to pass a by-ref object is to have created it
361
361
  // previously inside JSII kernel, so it must have an objref already.
362
- if (!api_1.isObjRef(value)) {
362
+ if (!(0, api_1.isObjRef)(value)) {
363
363
  throw new Error(`Expected object reference, got ${JSON.stringify(value)}`);
364
364
  }
365
365
  const { instance, fqn } = host.objects.findObject(value);
@@ -380,9 +380,8 @@ exports.SERIALIZERS = {
380
380
  },
381
381
  },
382
382
  // ----------------------------------------------------------------------
383
- ["Any" /* Any */]: {
383
+ ["Any" /* SerializationClass.Any */]: {
384
384
  serialize(value, _type, host) {
385
- var _a;
386
385
  if (value == null) {
387
386
  return undefined;
388
387
  }
@@ -405,7 +404,7 @@ exports.SERIALIZERS = {
405
404
  }
406
405
  if (exports.SYMBOL_WIRE_TYPE in value &&
407
406
  value[exports.SYMBOL_WIRE_TYPE] === api_1.TOKEN_MAP) {
408
- return exports.SERIALIZERS["Map" /* Map */].serialize(value, {
407
+ return exports.SERIALIZERS["Map" /* SerializationClass.Map */].serialize(value, {
409
408
  type: {
410
409
  collection: {
411
410
  kind: spec.CollectionKind.Map,
@@ -423,13 +422,14 @@ exports.SERIALIZERS = {
423
422
  // Use a previous reference to maintain object identity. NOTE: this may cause us to return
424
423
  // a different type than requested! This is just how it is right now.
425
424
  // https://github.com/aws/jsii/issues/399
426
- const prevRef = objects_1.objectReference(value);
425
+ const prevRef = (0, objects_1.objectReference)(value);
427
426
  if (prevRef) {
428
427
  return prevRef;
429
428
  }
430
429
  // If this is or should be a reference type, pass or make the reference
431
430
  // (Like regular reftype serialization, but without the type derivation to an interface)
432
- const jsiiType = (_a = objects_1.jsiiTypeFqn(value)) !== null && _a !== void 0 ? _a : (isByReferenceOnly(value) ? exports.EMPTY_OBJECT_FQN : undefined);
431
+ const jsiiType = (0, objects_1.jsiiTypeFqn)(value) ??
432
+ (isByReferenceOnly(value) ? exports.EMPTY_OBJECT_FQN : undefined);
433
433
  if (jsiiType) {
434
434
  return host.objects.registerObject(value, jsiiType);
435
435
  }
@@ -444,7 +444,7 @@ exports.SERIALIZERS = {
444
444
  if (value == null) {
445
445
  return undefined;
446
446
  }
447
- if (api_1.isWireDate(value)) {
447
+ if ((0, api_1.isWireDate)(value)) {
448
448
  host.debug('ANY is a Date');
449
449
  return deserializeDate(value);
450
450
  }
@@ -456,11 +456,11 @@ exports.SERIALIZERS = {
456
456
  host.debug('ANY is an Array');
457
457
  return value.map((e) => host.recurse(e, { type: spec.CANONICAL_ANY }));
458
458
  }
459
- if (api_1.isWireEnum(value)) {
459
+ if ((0, api_1.isWireEnum)(value)) {
460
460
  host.debug('ANY is an Enum');
461
461
  return deserializeEnum(value, host.findSymbol);
462
462
  }
463
- if (api_1.isWireMap(value)) {
463
+ if ((0, api_1.isWireMap)(value)) {
464
464
  host.debug('ANY is a Map');
465
465
  const mapOfAny = {
466
466
  collection: {
@@ -468,19 +468,19 @@ exports.SERIALIZERS = {
468
468
  elementtype: spec.CANONICAL_ANY,
469
469
  },
470
470
  };
471
- return exports.SERIALIZERS["Map" /* Map */].deserialize(value, { type: mapOfAny }, host);
471
+ return exports.SERIALIZERS["Map" /* SerializationClass.Map */].deserialize(value, { type: mapOfAny }, host);
472
472
  }
473
- if (api_1.isObjRef(value)) {
473
+ if ((0, api_1.isObjRef)(value)) {
474
474
  host.debug('ANY is a Ref');
475
475
  return host.objects.findObject(value).instance;
476
476
  }
477
477
  // if the value has a struct token, it was serialized by a typed jsii
478
478
  // struct, but since the deserialization target is ANY, all we can do is
479
479
  // strip the data from $jsii.struct and continue to deserialize as ANY.
480
- if (api_1.isWireStruct(value)) {
480
+ if ((0, api_1.isWireStruct)(value)) {
481
481
  const { fqn, data } = value[api_1.TOKEN_STRUCT];
482
482
  host.debug(`ANY is a struct of type ${fqn}`);
483
- return exports.SERIALIZERS["Struct" /* Struct */].deserialize(data, { type: { fqn } }, host);
483
+ return exports.SERIALIZERS["Struct" /* SerializationClass.Struct */].deserialize(data, { type: { fqn } }, host);
484
484
  }
485
485
  // At this point again, deserialize by-value.
486
486
  host.debug('ANY is a Map');
@@ -518,20 +518,20 @@ function serializationType(typeRef, lookup) {
518
518
  throw new Error("Kernel error: expected type information, got 'undefined'");
519
519
  }
520
520
  if (typeRef === 'void') {
521
- return [{ serializationClass: "Void" /* Void */, typeRef }];
521
+ return [{ serializationClass: "Void" /* SerializationClass.Void */, typeRef }];
522
522
  }
523
523
  if (spec.isPrimitiveTypeReference(typeRef.type)) {
524
524
  switch (typeRef.type.primitive) {
525
525
  case spec.PrimitiveType.Any:
526
- return [{ serializationClass: "Any" /* Any */, typeRef }];
526
+ return [{ serializationClass: "Any" /* SerializationClass.Any */, typeRef }];
527
527
  case spec.PrimitiveType.Date:
528
- return [{ serializationClass: "Date" /* Date */, typeRef }];
528
+ return [{ serializationClass: "Date" /* SerializationClass.Date */, typeRef }];
529
529
  case spec.PrimitiveType.Json:
530
- return [{ serializationClass: "Json" /* Json */, typeRef }];
530
+ return [{ serializationClass: "Json" /* SerializationClass.Json */, typeRef }];
531
531
  case spec.PrimitiveType.Boolean:
532
532
  case spec.PrimitiveType.Number:
533
533
  case spec.PrimitiveType.String:
534
- return [{ serializationClass: "Scalar" /* Scalar */, typeRef }];
534
+ return [{ serializationClass: "Scalar" /* SerializationClass.Scalar */, typeRef }];
535
535
  }
536
536
  throw new Error('Unknown primitive type');
537
537
  }
@@ -539,8 +539,8 @@ function serializationType(typeRef, lookup) {
539
539
  return [
540
540
  {
541
541
  serializationClass: typeRef.type.collection.kind === spec.CollectionKind.Array
542
- ? "Array" /* Array */
543
- : "Map" /* Map */,
542
+ ? "Array" /* SerializationClass.Array */
543
+ : "Map" /* SerializationClass.Map */,
544
544
  typeRef,
545
545
  },
546
546
  ];
@@ -558,12 +558,12 @@ function serializationType(typeRef, lookup) {
558
558
  // The next part of the conversion is lookup-dependent
559
559
  const type = lookup(typeRef.type.fqn);
560
560
  if (spec.isEnumType(type)) {
561
- return [{ serializationClass: "Enum" /* Enum */, typeRef }];
561
+ return [{ serializationClass: "Enum" /* SerializationClass.Enum */, typeRef }];
562
562
  }
563
563
  if (spec.isInterfaceType(type) && type.datatype) {
564
- return [{ serializationClass: "Struct" /* Struct */, typeRef }];
564
+ return [{ serializationClass: "Struct" /* SerializationClass.Struct */, typeRef }];
565
565
  }
566
- return [{ serializationClass: "RefType" /* ReferenceType */, typeRef }];
566
+ return [{ serializationClass: "RefType" /* SerializationClass.ReferenceType */, typeRef }];
567
567
  }
568
568
  exports.serializationType = serializationType;
569
569
  function nullAndOk(x, type) {
@@ -607,7 +607,6 @@ function mapValues(value, fn) {
607
607
  return out;
608
608
  }
609
609
  function propertiesOf(t, lookup) {
610
- var _a;
611
610
  if (!spec.isClassOrInterfaceType(t)) {
612
611
  return {};
613
612
  }
@@ -620,7 +619,7 @@ function propertiesOf(t, lookup) {
620
619
  if (spec.isClassType(t) && t.base) {
621
620
  ret = { ...ret, ...propertiesOf(lookup(t.base), lookup) };
622
621
  }
623
- for (const prop of (_a = t.properties) !== null && _a !== void 0 ? _a : []) {
622
+ for (const prop of t.properties ?? []) {
624
623
  ret[prop.name] = prop;
625
624
  }
626
625
  return ret;
@@ -666,16 +665,16 @@ function validateRequiredProps(actualProps, typeName, specProps) {
666
665
  }
667
666
  function compareSerializationClasses(l, r) {
668
667
  const order = [
669
- "Void" /* Void */,
670
- "Date" /* Date */,
671
- "Scalar" /* Scalar */,
672
- "Json" /* Json */,
673
- "Enum" /* Enum */,
674
- "Array" /* Array */,
675
- "Map" /* Map */,
676
- "Struct" /* Struct */,
677
- "RefType" /* ReferenceType */,
678
- "Any" /* Any */,
668
+ "Void" /* SerializationClass.Void */,
669
+ "Date" /* SerializationClass.Date */,
670
+ "Scalar" /* SerializationClass.Scalar */,
671
+ "Json" /* SerializationClass.Json */,
672
+ "Enum" /* SerializationClass.Enum */,
673
+ "Array" /* SerializationClass.Array */,
674
+ "Map" /* SerializationClass.Map */,
675
+ "Struct" /* SerializationClass.Struct */,
676
+ "RefType" /* SerializationClass.ReferenceType */,
677
+ "Any" /* SerializationClass.Any */,
679
678
  ];
680
679
  return order.indexOf(l) - order.indexOf(r);
681
680
  }
@@ -698,9 +697,9 @@ function isByReferenceOnly(obj) {
698
697
  do {
699
698
  for (const prop of Object.getOwnPropertyNames(curr)) {
700
699
  const descr = Object.getOwnPropertyDescriptor(curr, prop);
701
- if ((descr === null || descr === void 0 ? void 0 : descr.get) != null ||
702
- (descr === null || descr === void 0 ? void 0 : descr.set) != null ||
703
- typeof (descr === null || descr === void 0 ? void 0 : descr.value) === 'function') {
700
+ if (descr?.get != null ||
701
+ descr?.set != null ||
702
+ typeof descr?.value === 'function') {
704
703
  // Property has a dynamic getter, setter or is a constructor/method, so by-ref required!
705
704
  return true;
706
705
  }
@@ -709,4 +708,4 @@ function isByReferenceOnly(obj) {
709
708
  } while (Object.getPrototypeOf((curr = Object.getPrototypeOf(curr))) != null);
710
709
  return false;
711
710
  }
712
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zZXJpYWxpemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7OztBQUVILG1DQUFtQztBQUVuQywrQkFhZTtBQUNmLHVDQUFzRTtBQUV0RSx3QkFBd0I7QUFvQnhCOztHQUVHO0FBQ1UsUUFBQSxnQkFBZ0IsR0FBRyxRQUFRLENBQUM7QUFFNUIsUUFBQSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUEwQ2pELFFBQUEsV0FBVyxHQUFnQztJQUN0RCx5RUFBeUU7SUFDekUsbUJBQXlCLEVBQUU7UUFDekIsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSTtZQUMxQixJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDekM7WUFDRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSTtZQUM1QixJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDekM7WUFDRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO0tBQ0Y7SUFFRCx5RUFBeUU7SUFDekUsbUJBQXlCLEVBQUU7UUFDekIsU0FBUyxDQUFDLEtBQUssRUFBRSxhQUFhO1lBQzVCLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsRUFBRTtnQkFDbkMsT0FBTyxTQUFTLENBQUM7YUFDbEI7WUFDRCxJQUFJLGFBQWEsS0FBSyxNQUFNLEVBQUU7Z0JBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FB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SSxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNuRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzFELElBQ0UsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsR0FBRyxLQUFJLElBQUk7Z0JBQ2xCLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLEdBQUcsS0FBSSxJQUFJO2dCQUNsQixRQUFPLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxLQUFLLENBQUEsS0FBSyxVQUFVLEVBQ2xDO2dCQUNBLHdGQUF3RjtnQkFDeEYsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBQ0QsMkVBQTJFO0tBQzVFLFFBQVEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUU7SUFFOUUsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBIYW5kbGluZyBvZiB0eXBlcyBpbiBKU0lJXG4gKlxuICogVHlwZXMgd2lsbCBiZSBzZXJpYWxpemVkIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlOlxuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgIOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICogICAgICAgICAgICAgICAgICAgICAgICAg4pSCIEpBVkFTQ1JJUFQgVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgIOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpFxuICogICAgICAgICAgICAgICAgICAgICAgICAg4pSCIHVuZGVmaW5lZC9udWxsIOKUgiAgIGRhdGUgICAg4pSCIHNjYWxhciAoKikg4pSCICAgICBhcnJheSAgICAg4pSCIEpTSUktY2xhc3Mgb2JqZWN0IOKUgiBsaXRlcmFsIG9iamVjdCAg4pSCXG4gKiDilJzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKRcbiAqIOKUgiBERUNMQVJFRCDilIIgdm9pZCAgICAgICDilIIgdW5kZWZpbmVkICAgICAg4pSCIHVuZGVmaW5lZCDilIIgdW5kZWZpbmVkICDilIIgdW5kZWZpbmVkICAgICDilIIgdW5kZWZpbmVkICAgICAgICAg4pSCIHVuZGVmaW5lZCAgICAgICDilIJcbiAqIOKUgiBUWVBFICAgICDilIIgZGF0ZSAgICAgICDilIIgdW5kZWZpbmVkKOKAoCkgICDilIIgeyBkYXRlIH0gIOKUgiAtICAgICAgICAgIOKUgiAtICAgICAgICAgICAgIOKUgiAtICAgICAgICAgICAgICAgICDilIIgLSAgICAgICAgICAgICAgIOKUglxuICog4pSCICAgICAgICAgIOKUgiBzY2FsYXIgKCopIOKUgiB1bmRlZmluZWQo4oCgKSAgIOKUgiAtICAgICAgICAg4pSCIHZhbHVlICAgICAg4pSCIC0gICAgICAgICAgICAg4pSCIC0gICAgICAgICAgICAgICAgIOKUgiAtICAgICAgICAgICAgICAg4pSCXG4gKiDilIIgICAgICAgICAg4pSCIGpzb24gICAgICAg4pSCIHVuZGVmaW5lZCAgICAgIOKUgiBzdHJpbmcgICAg4pSCIHZhbHVlICAgICAg4pSCIGFycmF5L1IoanNvbikg4pSCIC0gICAgICAgICAgICAgICAgIOKUgiBieXZhbHVlL1IoanNvbikg4pSCXG4gKiDilIIgICAgICAgICAg4pSCIGVudW0gICAgICAg4pSCIHVuZGVmaW5lZCjigKApICAg4pSCIC0gICAgICAgICDilIIgeyBlbnVtIH0gICDilIIgLSAgICAgICAgICAgICDilIIgLSAgICAgICAgICAgICAgICAg4pSCIC0gICAgICAgICAgICAgICDilIJcbiAqIOKUgiAgICAgICAgICDilIIgYXJyYXkgb2YgVCDilIIgdW5kZWZpbmVkKOKAoCkgICDilIIgLSAgICAgICAgIOKUgiAtICAgICAgICAgIOKUgiBhcnJheS9SKFQpICAgIOKUgiAtICAgICAgICAgICAgICAgICDilIIgLSAgICAgICAgICAgICAgIOKUglxuICog4pSCICAgICAgICAgIOKUgiBtYXAgb2YgVCAgIOKUgiB1bmRlZmluZWQo4oCgKSAgIOKUgiAtICAgICAgICAg4pSCIC0gICAgICAgICAg4pSCIC0gICAgICAgICAgICAg4pSCIC0gICAgICAgICAgICAgICAgIOKUgiBieXZhbHVlL1IoVCkgICAg4pSCXG4gKiDilIIgICAgICAgICAg4pSCIGludGVyZmFjZSAg4pSCIHVuZGVmaW5lZCjigKApICAg4pSCIC0gICAgICAgICDilIIgLSAgICAgICAgICDilIIgLSAgICAgICAgICAgICDilIIgeyByZWYgfSAgICAgICAgICAg4pSCIHsgcmVmOiBwcm94eSB9ICDilIJcbiAqIOKUgiAgICAgICAgICDilIIgc3RydWN0ICAgICDilIIgdW5kZWZpbmVkKOKAoCkgICDilIIgLSAgICAgICAgIOKUgiAtICAgICAgICAgIOKUgiAtICAgICAgICAgICAgIOKUgiAtICAgICAgICAgICAgICAgICDilIIgYnl2YWx1ZS9SKFRba10pIOKUglxuICog4pSCICAgICAgICAgIOKUgiBjbGFzcyAgICAgIOKUgiB1bmRlZmluZWQo4oCgKSAgIOKUgiAtICAgICAgICAg4pSCIC0gICAgICAgICAg4pSCIC0gICAgICAgICAgICAg4pSCIHsgcmVmIH0gICAgICAgICAgIOKUgiB7IHJlZjogcHJveHkgfSAg4pSCXG4gKiDilIIgICAgICAgICAg4pSCIGFueSAgICAgICAg4pSCIHVuZGVmaW5lZCAgICAgIOKUgiB7IGRhdGUgfSAg4pSCIHZhbHVlICAgICAg4pSCIGFycmF5L1IoYW55KSAg4pSCIHsgcmVmIH0gICAgICAgICAgIOKUgiBieXZhbHVlL1IoYW55KSAg4pSCXG4gKiDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAqXG4gKiAgLSAoKikgc2NhbGFyIG1lYW5zICdzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuJ1xuICogIC0gKOKAoCkgdGhyb3cgaWYgbm90IG51bGxhYmxlXG4gKiAgLSAvUih0KSByZWN1cnNlIHdpdGggZGVjbGFyZWQgdHlwZSB0XG4gKi9cblxuaW1wb3J0ICogYXMgc3BlYyBmcm9tICdAanNpaS9zcGVjJztcblxuaW1wb3J0IHtcbiAgaXNPYmpSZWYsXG4gIGlzV2lyZURhdGUsXG4gIGlzV2lyZUVudW0sXG4gIGlzV2lyZU1hcCxcbiAgT2JqUmVmLFxuICBUT0tFTl9EQVRFLFxuICBUT0tFTl9FTlVNLFxuICBUT0tFTl9NQVAsXG4gIFdpcmVEYXRlLFxuICBXaXJlRW51bSxcbiAgaXNXaXJlU3RydWN0LFxuICBUT0tFTl9TVFJVQ1QsXG59IGZyb20gJy4vYXBpJztcbmltcG9ydCB7IGpzaWlUeXBlRnFuLCBvYmplY3RSZWZlcmVuY2UsIE9iamVjdFRhYmxlIH0gZnJvbSAnLi9vYmplY3RzJztcblxuaW1wb3J0IHsgYXBpIH0gZnJvbSAnLic7XG5cbi8qKlxuICogQSBzcGVjaWZpYyBzaW5nbGV0b24gdHlwZSB0byBiZSBleHBsaWNpdCBhYm91dCBhIFZvaWQgdHlwZVxuICpcbiAqIEluIHRoZSBzcGVjLCAndm9pZCcgaXMgcmVwcmVzZW50ZWQgYXMgJ3VuZGVmaW5lZCcoKiksIGJ1dCBhbGxvd2luZyB0aGVcbiAqIHZhbHVlICd1bmRlZmluZWQnIGluIGZ1bmN0aW9uIGNhbGxzIGhhcyBsZWFkIHRvIGNvbnN1bWVycyBmYWlsaW5nIHRvIHBhc3NcbiAqIHR5cGUgaW5mb3JtYXRpb24gdGhhdCB0aGV5IGhhZCwganVzdCBiZWNhdXNlIHRoZXkgZGlkbid0IFwiaGF2ZSB0b1wiICh0aGVcbiAqIHBhcmFtZXRlciB3YXMgb3B0aW9uYWwpLlxuICpcbiAqICgqKSBBcyBpbiwgZGVjbGFyYXRpb24gb2YgYSBtZXRob2QgbG9va3MgbGlrZSB7IHJldHVybnM/OiBUeXBlUmVmZXJlbmNlIH1cbiAqIGFuZCB0aGUgYWJzZW5jZSBvZiBhIHR5cGUgbWVhbnMgaXQgcmV0dXJucyAndm9pZCcuXG4gKi9cbmV4cG9ydCB0eXBlIFZvaWQgPSAndm9pZCc7XG5cbi8qKlxuICogQSB0eXBlIGluc3RhbmNlLCBvciBWb2lkXG4gKi9cbmV4cG9ydCB0eXBlIE9wdGlvbmFsVmFsdWVPclZvaWQgPSBzcGVjLk9wdGlvbmFsVmFsdWUgfCBWb2lkO1xuXG4vKipcbiAqIEEgc3BlY2lhbCBGUU4gdGhhdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgZW1wdHkgamF2YXNjcmlwdCBvYmplY3RzLlxuICovXG5leHBvcnQgY29uc3QgRU1QVFlfT0JKRUNUX0ZRTiA9ICdPYmplY3QnO1xuXG5leHBvcnQgY29uc3QgU1lNQk9MX1dJUkVfVFlQRSA9IFN5bWJvbC5mb3IoJyRqc2lpJHdpcmVUeXBlJCcpO1xuXG4vKipcbiAqIFRoZSB0eXBlIGtpbmQsIHRoYXQgY29udHJvbHMgaG93IGl0IHdpbGwgYmUgc2VyaWFsaXplZCBhY2NvcmRpbmcgdG8gdGhlIGFib3ZlIHRhYmxlXG4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIFNlcmlhbGl6YXRpb25DbGFzcyB7XG4gIFZvaWQgPSAnVm9pZCcsXG4gIERhdGUgPSAnRGF0ZScsXG4gIFNjYWxhciA9ICdTY2FsYXInLFxuICBKc29uID0gJ0pzb24nLFxuICBFbnVtID0gJ0VudW0nLFxuICBBcnJheSA9ICdBcnJheScsXG4gIE1hcCA9ICdNYXAnLFxuICBTdHJ1Y3QgPSAnU3RydWN0JyxcbiAgUmVmZXJlbmNlVHlwZSA9ICdSZWZUeXBlJyxcbiAgQW55ID0gJ0FueScsXG59XG5cbnR5cGUgVHlwZUxvb2t1cCA9IChmcW46IHNwZWMuRlFOKSA9PiBzcGVjLlR5cGU7XG50eXBlIFN5bWJvbExvb2t1cCA9IChmcW46IHNwZWMuRlFOKSA9PiBhbnk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplckhvc3Qge1xuICByZWFkb25seSBvYmplY3RzOiBPYmplY3RUYWJsZTtcbiAgZGVidWcoLi4uYXJnczogYW55W10pOiB2b2lkO1xuICBsb29rdXBUeXBlKGZxbjogc3RyaW5nKTogc3BlYy5UeXBlO1xuICByZWN1cnNlKHg6IGFueSwgdHlwZTogT3B0aW9uYWxWYWx1ZU9yVm9pZCk6IGFueTtcbiAgZmluZFN5bWJvbChmcW46IHNwZWMuRlFOKTogYW55O1xufVxuXG5pbnRlcmZhY2UgU2VyaWFsaXplciB7XG4gIHNlcmlhbGl6ZShcbiAgICB2YWx1ZTogdW5rbm93bixcbiAgICB0eXBlOiBPcHRpb25hbFZhbHVlT3JWb2lkLFxuICAgIGhvc3Q6IFNlcmlhbGl6ZXJIb3N0LFxuICApOiBhbnk7XG4gIGRlc2VyaWFsaXplKFxuICAgIHZhbHVlOiB1bmtub3duLFxuICAgIHR5cGU6IE9wdGlvbmFsVmFsdWVPclZvaWQsXG4gICAgaG9zdDogU2VyaWFsaXplckhvc3QsXG4gICk6IGFueTtcbn1cblxuZXhwb3J0IGNvbnN0IFNFUklBTElaRVJTOiB7IFtrOiBzdHJpbmddOiBTZXJpYWxpemVyIH0gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5Wb2lkXToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgX3R5cGUsIGhvc3QpIHtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIGhvc3QuZGVidWcoJ0V4cGVjdGVkIHZvaWQsIGdvdCcsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSxcblxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBfdHlwZSwgaG9zdCkge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgaG9zdC5kZWJ1ZygnRXhwZWN0ZWQgdm9pZCwgZ290JywgdmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5EYXRlXToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSk6IFdpcmVEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWxWYWx1ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb3VudGVyZWQgdW5leHBlY3RlZCBgdm9pZGAgdHlwZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBEYXRlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VyaWFsaXplRGF0ZSh2YWx1ZSk7XG4gICAgfSxcblxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlKSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzV2lyZURhdGUodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgRGF0ZSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlc2VyaWFsaXplRGF0ZSh2YWx1ZSk7XG4gICAgfSxcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIFtTZXJpYWxpemF0aW9uQ2xhc3MuU2NhbGFyXToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByaW1pdGl2ZVR5cGUgPSBvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5QcmltaXRpdmVUeXBlUmVmZXJlbmNlO1xuXG4gICAgICBpZiAoIWlzU2NhbGFyKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdGVkICR7c3BlYy5kZXNjcmliZVR5cGVSZWZlcmVuY2UoXG4gICAgICAgICAgICBvcHRpb25hbFZhbHVlLnR5cGUsXG4gICAgICAgICAgKX0sIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gcHJpbWl0aXZlVHlwZS5wcmltaXRpdmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCBhICR7c3BlYy5kZXNjcmliZVR5cGVSZWZlcmVuY2UoXG4gICAgICAgICAgICBvcHRpb25hbFZhbHVlLnR5cGUsXG4gICAgICAgICAgKX0sIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX0gKCR7dHlwZW9mIHZhbHVlfSlgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG5cbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByaW1pdGl2ZVR5cGUgPSBvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5QcmltaXRpdmVUeXBlUmVmZXJlbmNlO1xuXG4gICAgICBpZiAoIWlzU2NhbGFyKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdGVkIGEgJHtzcGVjLmRlc2NyaWJlVHlwZVJlZmVyZW5jZShcbiAgICAgICAgICAgIG9wdGlvbmFsVmFsdWUudHlwZSxcbiAgICAgICAgICApfSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBwcmltaXRpdmVUeXBlLnByaW1pdGl2ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdGVkIGEgJHtzcGVjLmRlc2NyaWJlVHlwZVJlZmVyZW5jZShcbiAgICAgICAgICAgIG9wdGlvbmFsVmFsdWUudHlwZSxcbiAgICAgICAgICApfSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfSAoJHt0eXBlb2YgdmFsdWV9KWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5Kc29uXToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSkge1xuICAgICAgLy8gSnVzdCB3aGF0ZXZlci4gRGF0ZXMgd2lsbCBhdXRvbWF0aWNhbGx5IHNlcmlhbGl6ZSB0aGVtc2VsdmVzIHRvIHN0cmluZ3MuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgLy8gLyFcXCBUb3AtbGV2ZWwgXCJudWxsXCIgd2lsbCB0dXJuIHRvIHVuZGVmaW5lZCwgYnV0IGFueSBudWxsIG5lc3RlZCBpbiB0aGUgdmFsdWUgaXMgdmFsaWQgSlNPTiwgc28gaXQnbGwgc3RheSFcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIEEgbWFwcGluZyBvYmplY3QgY2FuIGFycml2ZSB0aG91Z2ggaGVyZS4gVGhpcyB3b3VsZCBiZSB0aGUgY2FzZSBpZiBhbnl0aGluZyB0aGF0IGlzIHZhbGlkIGludG8gYSBNYXA8c3RyaW5nLCA/PlxuICAgICAgLy8gaXMgcGFzc2VkIGludG8gYSBKU09OIHRyYW5zZmVyIHBvaW50LiBJbmRlZWQsIHRob3NlIGFyZSBhbHNvIHZhbGlkIEpTT04hIEZvciBleGFtcGxlLCBQeXRob24gXCJkaWN0c1wiIHdpbGwgYmVcbiAgICAgIC8vIHNlcmlhbGl6ZWQgKGJ5IHRoZSBQeXRob24gcnVudGltZSkgYXMgYSAkanNpaS5tYXAgKHRoZSBtYXBwaW5nIG9iamVjdCkuIFdlIG5lZWQgdG8gZGUtc2VyaWFsaXplIHRoYXQgYXMgYVxuICAgICAgLy8gTWFwPHN0cmluZywgSlNPTj4gaW4gb3JkZXIgdG8gb2J0YWluIHRoZSBjb3JyZWN0IG91dHB1dCBiZWhhdmlvciBoZXJlIVxuICAgICAgaWYgKGlzV2lyZU1hcCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIFNFUklBTElaRVJTW1NlcmlhbGl6YXRpb25DbGFzcy5NYXBdLmRlc2VyaWFsaXplKFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9wdGlvbmFsOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvbjoge1xuICAgICAgICAgICAgICAgIGtpbmQ6IHNwZWMuQ29sbGVjdGlvbktpbmQuTWFwLFxuICAgICAgICAgICAgICAgIGVsZW1lbnR0eXBlOiB7IHByaW1pdGl2ZTogc3BlYy5QcmltaXRpdmVUeXBlLkpzb24gfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBob3N0LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUubWFwKG1hcEpzb25WYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtYXBWYWx1ZXModmFsdWUsIG1hcEpzb25WYWx1ZSk7XG5cbiAgICAgIGZ1bmN0aW9uIG1hcEpzb25WYWx1ZSh0b01hcDogYW55KSB7XG4gICAgICAgIGlmICh0b01hcCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRvTWFwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBob3N0LnJlY3Vyc2UodG9NYXAsIHtcbiAgICAgICAgICB0eXBlOiB7IHByaW1pdGl2ZTogc3BlYy5QcmltaXRpdmVUeXBlLkpzb24gfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIFtTZXJpYWxpemF0aW9uQ2xhc3MuRW51bV06IHtcbiAgICBzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUsIGhvc3QpOiBXaXJlRW51bSB8IHVuZGVmaW5lZCB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGVudW0gdmFsdWUsIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICAgIH1cblxuICAgICAgaG9zdC5kZWJ1ZygnU2VyaWFsaXppbmcgZW51bScpO1xuXG4gICAgICBjb25zdCBlbnVtVHlwZSA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLk5hbWVkVHlwZVJlZmVyZW5jZTtcbiAgICAgIGNvbnN0IGVudW1NYXAgPSBob3N0LmZpbmRTeW1ib2woZW51bVR5cGUuZnFuKTtcbiAgICAgIGNvbnN0IGVudW1FbnRyeSA9IE9iamVjdC5lbnRyaWVzKGVudW1NYXApLmZpbmQoKFssIHZdKSA9PiB2ID09PSB2YWx1ZSk7XG4gICAgICBpZiAoIWVudW1FbnRyeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGVudHJ5IGluICR7ZW51bVR5cGUuZnFufSBoYXMgdmFsdWUgJHt2YWx1ZX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IFtUT0tFTl9FTlVNXTogYCR7ZW51bVR5cGUuZnFufS8ke2VudW1FbnRyeVswXX1gIH07XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc1dpcmVFbnVtKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGVudW0gdmFsdWUsIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlc2VyaWFsaXplRW51bSh2YWx1ZSwgaG9zdC5maW5kU3ltYm9sKTtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5BcnJheV06IHtcbiAgICBzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUsIGhvc3QpIHtcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWxWYWx1ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb3VudGVyZWQgdW5leHBlY3RlZCBgdm9pZGAgdHlwZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYXJyYXkgdHlwZSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcnJheVR5cGUgPSBvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5Db2xsZWN0aW9uVHlwZVJlZmVyZW5jZTtcblxuICAgICAgcmV0dXJuIHZhbHVlLm1hcCgoeCkgPT5cbiAgICAgICAgaG9zdC5yZWN1cnNlKHgsIHsgdHlwZTogYXJyYXlUeXBlLmNvbGxlY3Rpb24uZWxlbWVudHR5cGUgfSksXG4gICAgICApO1xuICAgIH0sXG4gICAgZGVzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUsIGhvc3QpIHtcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWxWYWx1ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb3VudGVyZWQgdW5leHBlY3RlZCBgdm9pZGAgdHlwZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYXJyYXkgdHlwZSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcnJheVR5cGUgPSBvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5Db2xsZWN0aW9uVHlwZVJlZmVyZW5jZTtcblxuICAgICAgcmV0dXJuIHZhbHVlLm1hcCgoeCkgPT5cbiAgICAgICAgaG9zdC5yZWN1cnNlKHgsIHsgdHlwZTogYXJyYXlUeXBlLmNvbGxlY3Rpb24uZWxlbWVudHR5cGUgfSksXG4gICAgICApO1xuICAgIH0sXG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBbU2VyaWFsaXphdGlvbkNsYXNzLk1hcF06IHtcbiAgICBzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUsIGhvc3QpIHtcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWxWYWx1ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb3VudGVyZWQgdW5leHBlY3RlZCBgdm9pZGAgdHlwZScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXBUeXBlID0gb3B0aW9uYWxWYWx1ZS50eXBlIGFzIHNwZWMuQ29sbGVjdGlvblR5cGVSZWZlcmVuY2U7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbVE9LRU5fTUFQXTogbWFwVmFsdWVzKHZhbHVlLCAodikgPT5cbiAgICAgICAgICBob3N0LnJlY3Vyc2UodiwgeyB0eXBlOiBtYXBUeXBlLmNvbGxlY3Rpb24uZWxlbWVudHR5cGUgfSksXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIH0sXG4gICAgZGVzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUsIGhvc3QpIHtcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWxWYWx1ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb3VudGVyZWQgdW5leHBlY3RlZCBgdm9pZGAgdHlwZScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXBUeXBlID0gb3B0aW9uYWxWYWx1ZS50eXBlIGFzIHNwZWMuQ29sbGVjdGlvblR5cGVSZWZlcmVuY2U7XG4gICAgICBpZiAoIWlzV2lyZU1hcCh2YWx1ZSkpIHtcbiAgICAgICAgLy8gQ29tcGF0aWJpbGl0eSBtb2RlIHdpdGggb2xkZXIgdmVyc2lvbnMgdGhhdCBkaWRuJ3Qgd3JhcCBpbiBbVE9LRU5fTUFQXVxuICAgICAgICByZXR1cm4gbWFwVmFsdWVzKHZhbHVlLCAodikgPT5cbiAgICAgICAgICBob3N0LnJlY3Vyc2UodiwgeyB0eXBlOiBtYXBUeXBlLmNvbGxlY3Rpb24uZWxlbWVudHR5cGUgfSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQgPSBtYXBWYWx1ZXModmFsdWVbVE9LRU5fTUFQXSwgKHYpID0+XG4gICAgICAgIGhvc3QucmVjdXJzZSh2LCB7IHR5cGU6IG1hcFR5cGUuY29sbGVjdGlvbi5lbGVtZW50dHlwZSB9KSxcbiAgICAgICk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdWx0LCBTWU1CT0xfV0lSRV9UWVBFLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogVE9LRU5fTUFQLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIFtTZXJpYWxpemF0aW9uQ2xhc3MuU3RydWN0XToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBvYmplY3QsIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgICAgVGhpcyBpcyB3aGF0IHdlJ2QgbGlrZSB0byBkbywgYnV0IHdlIGNhbid0IGJlY2F1c2UgYXQgbGVhc3QgdGhlIEphdmEgY2xpZW50XG4gICAgICAgIGRvZXMgbm90IHVuZGVyc3RhbmQgYnktdmFsdWUgc2VyaWFsaXplZCBpbnRlcmZhY2UgdHlwZXMsIHNvIHdlJ2xsIGhhdmUgdG9cbiAgICAgICAgc2VyaWFsaXplIGJ5LXJlZmVyZW5jZS4gQWRkaXRpb25hbGx5LCBzZXJpYWxpemluZyBrbm93biBwcm9wZXJ0aWVzIHdvdWxkXG4gICAgICAgIGNhdXNlIHByb2JsZW1zIHdoZW4gdGhlIHJldHVybiB0eXBlIG9mIGEgbWV0aG9kIGlzIGEgVU5JT04gb2Ygc3RydWN0cy5cbiAgICAgICAgU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2pzaWkvaXNzdWVzLzQwMFxuXG4gICAgICBjb25zdCBwcm9wcyA9IHByb3BlcnRpZXNPZihuYW1lZFR5cGUpO1xuXG4gICAgICByZXR1cm4gbWFwVmFsdWVzKHZhbHVlLCAodiwga2V5KSA9PiB7XG4gICAgICAgIGlmICghcHJvcHNba2V5XSkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IC8vIERvbid0IG1hcCBpZiB1bmtub3duIHByb3BlcnR5XG4gICAgICAgIHJldHVybiBob3N0LnJlY3Vyc2UodiwgcHJvcHNba2V5XS50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgKi9cblxuICAgICAgaG9zdC5kZWJ1ZygnUmV0dXJuaW5nIHZhbHVlIHR5cGUgYnkgcmVmZXJlbmNlJyk7XG4gICAgICByZXR1cm4gaG9zdC5vYmplY3RzLnJlZ2lzdGVyT2JqZWN0KHZhbHVlLCBFTVBUWV9PQkpFQ1RfRlFOLCBbXG4gICAgICAgIChvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5OYW1lZFR5cGVSZWZlcmVuY2UpLmZxbixcbiAgICAgIF0pO1xuICAgIH0sXG4gICAgZGVzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUsIGhvc3QpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKHZhbHVlID8/IHt9KS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gVHJlYXQgZW1wdHkgc3RydWN0cyBhcyBgdW5kZWZpbmVkYCAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9pc3N1ZXMvNDExKVxuICAgICAgICB2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWxWYWx1ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb3VudGVyZWQgdW5leHBlY3RlZCBgdm9pZGAgdHlwZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgb2JqZWN0IHJlZmVyZW5jZSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5hbWVkVHlwZSA9IGhvc3QubG9va3VwVHlwZShcbiAgICAgICAgKG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLk5hbWVkVHlwZVJlZmVyZW5jZSkuZnFuLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHByb3BzID0gcHJvcGVydGllc09mKG5hbWVkVHlwZSwgaG9zdC5sb29rdXBUeXBlKTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgR290IGFuIGFycmF5IHdoZXJlIGEgJHtuYW1lZFR5cGUuZnFufSB3YXMgZXhwZWN0ZWQuIERpZCB5b3UgbWVhbiB0byBwYXNzIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cz9gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBTaW1pbGFybHkgdG8gc2VyaWFsaXphdGlvbiwgd2UgbWlnaHQgYmUgZ2V0dGluZyBhIHJlZmVyZW5jZSB0eXBlIHdoZXJlIHdlJ3JlXG4gICAgICAvLyBleHBlY3RpbmcgYSB2YWx1ZSB0eXBlLiBBY2NlcHQgdGhpcyBmb3Igbm93IChidXQgYWxzbyB2YWxpZGF0ZSB0aGF0IG9iamVjdFxuICAgICAgLy8gZm9yIHByZXNlbmNlIG9mIHRoZSByaWdodCBwcm9wZXJ0aWVzKS5cbiAgICAgIGlmIChpc09ialJlZih2YWx1ZSkpIHtcbiAgICAgICAgaG9zdC5kZWJ1ZyhcbiAgICAgICAgICAnRXhwZWN0ZWQgdmFsdWUgdHlwZSBidXQgZ290IHJlZmVyZW5jZSB0eXBlLCBhY2NlcHRpbmcgZm9yIG5vdyAoYXdzbGFicy9qc2lpIzQwMCknLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFJldHVybiBzYW1lIElOU1RBTkNFIChzaG91bGRuJ3QgbWF0dGVyIGJ1dCB3ZSBkb24ndCBrbm93IGZvciBzdXJlIHRoYXQgaXQgZG9lc24ndClcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlUmVxdWlyZWRQcm9wcyhcbiAgICAgICAgICBob3N0Lm9iamVjdHMuZmluZE9iamVjdCh2YWx1ZSkuaW5zdGFuY2UsXG4gICAgICAgICAgbmFtZWRUeXBlLmZxbixcbiAgICAgICAgICBwcm9wcyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFwaS5pc1dpcmVTdHJ1Y3QodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHsgZnFuLCBkYXRhIH0gPSB2YWx1ZVthcGkuVE9LRU5fU1RSVUNUXTtcbiAgICAgICAgaWYgKCFpc0Fzc2lnbmFibGUoZnFuLCBuYW1lZFR5cGUsIGhvc3QubG9va3VwVHlwZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgV2lyZSBzdHJ1Y3QgdHlwZSAnJHtmcW59JyBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCAnJHtuYW1lZFR5cGUuZnFufSdgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSBkYXRhO1xuICAgICAgfVxuXG4gICAgICAvLyBQeXRob24sIGZvciBleGFtcGxlLCBhbGxvd3MgdXNpbmcgcGxhaW4gbWFwcGluZyBvYmplY3RzIGluc3RlYWQgb2YgU3RydWN0cyAoZHlhbm1pYyB0eXBpbmcsIFlPTE8hKVxuICAgICAgaWYgKGFwaS5pc1dpcmVNYXAodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWVbYXBpLlRPS0VOX01BUF07XG4gICAgICB9XG5cbiAgICAgIHZhbHVlID0gdmFsaWRhdGVSZXF1aXJlZFByb3BzKHZhbHVlIGFzIGFueSwgbmFtZWRUeXBlLmZxbiwgcHJvcHMpO1xuXG4gICAgICAvLyBSZXR1cm4gYSBkaWN0IENPUFksIHdlIGhhdmUgYnktdmFsdWUgc2VtYW50aWNzIGFueXdheS5cbiAgICAgIHJldHVybiBtYXBWYWx1ZXModmFsdWUsICh2LCBrZXkpID0+IHtcbiAgICAgICAgaWYgKCFwcm9wc1trZXldKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSAvLyBEb24ndCBtYXAgaWYgdW5rbm93biBwcm9wZXJ0eVxuICAgICAgICByZXR1cm4gaG9zdC5yZWN1cnNlKHYsIHByb3BzW2tleV0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIFtTZXJpYWxpemF0aW9uQ2xhc3MuUmVmZXJlbmNlVHlwZV06IHtcbiAgICBzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUsIGhvc3QpOiBPYmpSZWYgfCB1bmRlZmluZWQge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCBvYmplY3QgcmVmZXJlbmNlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhwZWN0ZWRUeXBlID0gaG9zdC5sb29rdXBUeXBlKFxuICAgICAgICAob3B0aW9uYWxWYWx1ZS50eXBlIGFzIHNwZWMuTmFtZWRUeXBlUmVmZXJlbmNlKS5mcW4sXG4gICAgICApO1xuICAgICAgY29uc3QgaW50ZXJmYWNlcyA9IHNwZWMuaXNJbnRlcmZhY2VUeXBlKGV4cGVjdGVkVHlwZSlcbiAgICAgICAgPyBbZXhwZWN0ZWRUeXBlLmZxbl1cbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBqc2lpVHlwZSA9XG4gICAgICAgIGpzaWlUeXBlRnFuKHZhbHVlKSA/P1xuICAgICAgICAoc3BlYy5pc0NsYXNzVHlwZShleHBlY3RlZFR5cGUpID8gZXhwZWN0ZWRUeXBlLmZxbiA6IEVNUFRZX09CSkVDVF9GUU4pO1xuXG4gICAgICByZXR1cm4gaG9zdC5vYmplY3RzLnJlZ2lzdGVyT2JqZWN0KHZhbHVlLCBqc2lpVHlwZSwgaW50ZXJmYWNlcyk7XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBvbmx5IHdheSB0byBwYXNzIGEgYnktcmVmIG9iamVjdCBpcyB0byBoYXZlIGNyZWF0ZWQgaXRcbiAgICAgIC8vIHByZXZpb3VzbHkgaW5zaWRlIEpTSUkga2VybmVsLCBzbyBpdCBtdXN0IGhhdmUgYW4gb2JqcmVmIGFscmVhZHkuXG5cbiAgICAgIGlmICghaXNPYmpSZWYodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgb2JqZWN0IHJlZmVyZW5jZSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgaW5zdGFuY2UsIGZxbiB9ID0gaG9zdC5vYmplY3RzLmZpbmRPYmplY3QodmFsdWUpO1xuXG4gICAgICBjb25zdCBuYW1lZFR5cGVSZWYgPSBvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5OYW1lZFR5cGVSZWZlcmVuY2U7XG4gICAgICBpZiAobmFtZWRUeXBlUmVmLmZxbiAhPT0gRU1QVFlfT0JKRUNUX0ZRTikge1xuICAgICAgICBjb25zdCBuYW1lZFR5cGUgPSBob3N0Lmxvb2t1cFR5cGUobmFtZWRUeXBlUmVmLmZxbik7XG5cbiAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgb2JqZWN0IHdlIGdvdCBpcyBvZiB0aGUgcmlnaHQgdHlwZVxuICAgICAgICAvLyBXZSBvbmx5IGRvIHRoaXMgZm9yIGNsYXNzZXMsIG5vdCBpbnRlcmZhY2VzLCBzaW5jZSBKYXZhIG1pZ2h0IHBhc3MgdXMgb2JqZWN0cyB0aGF0XG4gICAgICAgIC8vIHByaXZhdGVseSBpbXBsZW1lbnQgc29tZSBpbnRlcmZhY2UgYW5kIHdlIGNhbid0IHByb3ZlIHRoZXkgZG9uJ3QuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9pc3N1ZXMvMzk5XG4gICAgICAgIGNvbnN0IGRlY2xhcmVkVHlwZSA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLk5hbWVkVHlwZVJlZmVyZW5jZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNwZWMuaXNDbGFzc1R5cGUobmFtZWRUeXBlKSAmJlxuICAgICAgICAgICFpc0Fzc2lnbmFibGUoZnFuLCBkZWNsYXJlZFR5cGUsIGhvc3QubG9va3VwVHlwZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYE9iamVjdCBvZiB0eXBlICR7ZnFufSBpcyBub3QgY29udmVydGlibGUgdG8gJHtkZWNsYXJlZFR5cGUuZnFufWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfSxcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIFtTZXJpYWxpemF0aW9uQ2xhc3MuQW55XToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgX3R5cGUsIGhvc3QpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVEYXRlKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1NjYWxhcih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAoKGUpID0+IGhvc3QucmVjdXJzZShlLCB7IHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSB9KSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdGU6IG5vIGNhc2UgZm9yIFwiRU5VTVwiIGhlcmUsIHdpdGhvdXQgdHlwZSBkZWNsYXJhdGlvbiB3ZSBjYW4ndCB0ZWxsIHRoZSBkaWZmZXJlbmNlXG4gICAgICAvLyBiZXR3ZWVuIGFuIGVudW0gbWVtYmVyIGFuZCBhIHNjYWxhci5cblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0pTSUkgS2VybmVsIGlzIHVuYWJsZSB0byBzZXJpYWxpemUgYGZ1bmN0aW9uYC4gQW4gaW5zdGFuY2Ugd2l0aCBtZXRob2RzIG1pZ2h0IGhhdmUgYmVlbiByZXR1cm5lZCBieSBhbiBgYW55YCBtZXRob2Q/JyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEpTSUkga2VybmVsIGFzc3VtcHRpb24gdmlvbGF0ZWQsICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICApfSBpcyBub3QgYW4gb2JqZWN0YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBTWU1CT0xfV0lSRV9UWVBFIGluIHZhbHVlICYmXG4gICAgICAgICh2YWx1ZSBhcyBhbnkpW1NZTUJPTF9XSVJFX1RZUEVdID09PSBUT0tFTl9NQVBcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gU0VSSUFMSVpFUlNbU2VyaWFsaXphdGlvbkNsYXNzLk1hcF0uc2VyaWFsaXplKFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvbjoge1xuICAgICAgICAgICAgICAgIGtpbmQ6IHNwZWMuQ29sbGVjdGlvbktpbmQuTWFwLFxuICAgICAgICAgICAgICAgIGVsZW1lbnR0eXBlOiBzcGVjLkNBTk9OSUNBTF9BTlksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaG9zdCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gVG8gbWFrZSBzdXJlIHBlb3BsZSBhcmVuJ3QgZ29pbmcgdG8gdHJ5IGFuZCByZXR1cm4gTWFwPD4gb3IgU2V0PD4gb3V0LCB0ZXN0IGZvclxuICAgICAgLy8gdGhvc2UgYW5kIHRocm93IGEgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZS4gV2UgY2FuJ3QgZGV0ZWN0IHRoZXNlIGNhc2VzIGFueSBvdGhlclxuICAgICAgLy8gd2F5LCBhbmQgdGhlIGJ5LXZhbHVlIHNlcmlhbGl6ZWQgb2JqZWN0IHdpbGwgYmUgcXVpdGUgdXNlbGVzcy5cbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNldCB8fCB2YWx1ZSBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCByZXR1cm4gb2JqZWN0cyBvZiB0eXBlIFNldCBvciBNYXBcIik7XG4gICAgICB9XG5cbiAgICAgIC8vIFVzZSBhIHByZXZpb3VzIHJlZmVyZW5jZSB0byBtYWludGFpbiBvYmplY3QgaWRlbnRpdHkuIE5PVEU6IHRoaXMgbWF5IGNhdXNlIHVzIHRvIHJldHVyblxuICAgICAgLy8gYSBkaWZmZXJlbnQgdHlwZSB0aGFuIHJlcXVlc3RlZCEgVGhpcyBpcyBqdXN0IGhvdyBpdCBpcyByaWdodCBub3cuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2pzaWkvaXNzdWVzLzM5OVxuICAgICAgY29uc3QgcHJldlJlZiA9IG9iamVjdFJlZmVyZW5jZSh2YWx1ZSk7XG4gICAgICBpZiAocHJldlJlZikge1xuICAgICAgICByZXR1cm4gcHJldlJlZjtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhpcyBpcyBvciBzaG91bGQgYmUgYSByZWZlcmVuY2UgdHlwZSwgcGFzcyBvciBtYWtlIHRoZSByZWZlcmVuY2VcbiAgICAgIC8vIChMaWtlIHJlZ3VsYXIgcmVmdHlwZSBzZXJpYWxpemF0aW9uLCBidXQgd2l0aG91dCB0aGUgdHlwZSBkZXJpdmF0aW9uIHRvIGFuIGludGVyZmFjZSlcbiAgICAgIGNvbnN0IGpzaWlUeXBlID1cbiAgICAgICAganNpaVR5cGVGcW4odmFsdWUpID8/XG4gICAgICAgIChpc0J5UmVmZXJlbmNlT25seSh2YWx1ZSkgPyBFTVBUWV9PQkpFQ1RfRlFOIDogdW5kZWZpbmVkKTtcbiAgICAgIGlmIChqc2lpVHlwZSkge1xuICAgICAgICByZXR1cm4gaG9zdC5vYmplY3RzLnJlZ2lzdGVyT2JqZWN0KHZhbHVlLCBqc2lpVHlwZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbiBvYmplY3QgdGhhdCBpcyBub3Qgb2YgYW4gZXhwb3J0ZWQgdHlwZS4gRWl0aGVyIGFuIG9iamVjdFxuICAgICAgLy8gbGl0ZXJhbCwgb3IgYW4gaW5zdGFuY2Ugb2YgYSBmdWxseSBwcml2YXRlIGNsYXNzIChjYW5ub3QgZGlzdGluZ3Vpc2ggdGhvc2UgY2FzZXMpLlxuXG4gICAgICAvLyBXZSB3aWxsIHNlcmlhbGl6ZSBieS12YWx1ZSwgYnV0IHJlY3Vyc2UgZm9yIHNlcmlhbGl6YXRpb24gc28gdGhhdCBpZlxuICAgICAgLy8gdGhlIG9iamVjdCBjb250YWlucyByZWZlcmVuY2Ugb2JqZWN0cywgdGhleSB3aWxsIGJlIHNlcmlhbGl6ZWQgYXBwcm9wcmlhdGVseS5cbiAgICAgIC8vIChCYXNpY2FsbHksIHNlcmlhbGl6ZSBhbnl0aGluZyBlbHNlIGFzIGEgbWFwIG9mICdhbnknKS5cbiAgICAgIHJldHVybiBtYXBWYWx1ZXModmFsdWUsICh2KSA9PlxuICAgICAgICBob3N0LnJlY3Vyc2UodiwgeyB0eXBlOiBzcGVjLkNBTk9OSUNBTF9BTlkgfSksXG4gICAgICApO1xuICAgIH0sXG5cbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgX3R5cGUsIGhvc3QpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1dpcmVEYXRlKHZhbHVlKSkge1xuICAgICAgICBob3N0LmRlYnVnKCdBTlkgaXMgYSBEYXRlJyk7XG4gICAgICAgIHJldHVybiBkZXNlcmlhbGl6ZURhdGUodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKGlzU2NhbGFyKHZhbHVlKSkge1xuICAgICAgICBob3N0LmRlYnVnKCdBTlkgaXMgYSBTY2FsYXInKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGhvc3QuZGVidWcoJ0FOWSBpcyBhbiBBcnJheScpO1xuICAgICAgICByZXR1cm4gdmFsdWUubWFwKChlKSA9PiBob3N0LnJlY3Vyc2UoZSwgeyB0eXBlOiBzcGVjLkNBTk9OSUNBTF9BTlkgfSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNXaXJlRW51bSh2YWx1ZSkpIHtcbiAgICAgICAgaG9zdC5kZWJ1ZygnQU5ZIGlzIGFuIEVudW0nKTtcbiAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplRW51bSh2YWx1ZSwgaG9zdC5maW5kU3ltYm9sKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1dpcmVNYXAodmFsdWUpKSB7XG4gICAgICAgIGhvc3QuZGVidWcoJ0FOWSBpcyBhIE1hcCcpO1xuICAgICAgICBjb25zdCBtYXBPZkFueTogc3BlYy5Db2xsZWN0aW9uVHlwZVJlZmVyZW5jZSA9IHtcbiAgICAgICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgICAgICBraW5kOiBzcGVjLkNvbGxlY3Rpb25LaW5kLk1hcCxcbiAgICAgICAgICAgIGVsZW1lbnR0eXBlOiBzcGVjLkNBTk9OSUNBTF9BTlksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIFNFUklBTElaRVJTW1NlcmlhbGl6YXRpb25DbGFzcy5NYXBdLmRlc2VyaWFsaXplKFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHsgdHlwZTogbWFwT2ZBbnkgfSxcbiAgICAgICAgICBob3N0LFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGlzT2JqUmVmKHZhbHVlKSkge1xuICAgICAgICBob3N0LmRlYnVnKCdBTlkgaXMgYSBSZWYnKTtcbiAgICAgICAgcmV0dXJuIGhvc3Qub2JqZWN0cy5maW5kT2JqZWN0KHZhbHVlKS5pbnN0YW5jZTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlIHZhbHVlIGhhcyBhIHN0cnVjdCB0b2tlbiwgaXQgd2FzIHNlcmlhbGl6ZWQgYnkgYSB0eXBlZCBqc2lpXG4gICAgICAvLyBzdHJ1Y3QsIGJ1dCBzaW5jZSB0aGUgZGVzZXJpYWxpemF0aW9uIHRhcmdldCBpcyBBTlksIGFsbCB3ZSBjYW4gZG8gaXNcbiAgICAgIC8vIHN0cmlwIHRoZSBkYXRhIGZyb20gJGpzaWkuc3RydWN0IGFuZCBjb250aW51ZSB0byBkZXNlcmlhbGl6ZSBhcyBBTlkuXG4gICAgICBpZiAoaXNXaXJlU3RydWN0KHZhbHVlKSkge1xuICAgICAgICBjb25zdCB7IGZxbiwgZGF0YSB9ID0gdmFsdWVbVE9LRU5fU1RSVUNUXTtcbiAgICAgICAgaG9zdC5kZWJ1ZyhgQU5ZIGlzIGEgc3RydWN0IG9mIHR5cGUgJHtmcW59YCk7XG4gICAgICAgIHJldHVybiBTRVJJQUxJWkVSU1tTZXJpYWxpemF0aW9uQ2xhc3MuU3RydWN0XS5kZXNlcmlhbGl6ZShcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIHsgdHlwZTogeyBmcW4gfSB9LFxuICAgICAgICAgIGhvc3QsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEF0IHRoaXMgcG9pbnQgYWdhaW4sIGRlc2VyaWFsaXplIGJ5LXZhbHVlLlxuICAgICAgaG9zdC5kZWJ1ZygnQU5ZIGlzIGEgTWFwJyk7XG4gICAgICByZXR1cm4gbWFwVmFsdWVzKHZhbHVlLCAodikgPT5cbiAgICAgICAgaG9zdC5yZWN1cnNlKHYsIHsgdHlwZTogc3BlYy5DQU5PTklDQUxfQU5ZIH0pLFxuICAgICAgKTtcbiAgICB9LFxuICB9LFxufTtcblxuZnVuY3Rpb24gc2VyaWFsaXplRGF0ZSh2YWx1ZTogRGF0ZSk6IFdpcmVEYXRlIHtcbiAgcmV0dXJuIHsgW1RPS0VOX0RBVEVdOiB2YWx1ZS50b0lTT1N0cmluZygpIH07XG59XG5cbmZ1bmN0aW9uIGRlc2VyaWFsaXplRGF0ZSh2YWx1ZTogV2lyZURhdGUpOiBEYXRlIHtcbiAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlW1RPS0VOX0RBVEVdKTtcbn1cblxuZnVuY3Rpb24gZGVzZXJpYWxpemVFbnVtKHZhbHVlOiBXaXJlRW51bSwgbG9va3VwOiBTeW1ib2xMb29rdXApIHtcbiAgY29uc3QgZW51bUxvY2F0b3IgPSB2YWx1ZVtUT0tFTl9FTlVNXTtcbiAgY29uc3Qgc2VwID0gZW51bUxvY2F0b3IubGFzdEluZGV4T2YoJy8nKTtcbiAgaWYgKHNlcCA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1hbGZvcm1lZCBlbnVtIHZhbHVlOiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgfVxuXG4gIGNvbnN0IHR5cGVOYW1lID0gZW51bUxvY2F0b3Iuc2xpY2UoMCwgc2VwKTtcbiAgY29uc3QgdmFsdWVOYW1lID0gZW51bUxvY2F0b3Iuc2xpY2Uoc2VwICsgMSk7XG5cbiAgY29uc3QgZW51bVZhbHVlID0gbG9va3VwKHR5cGVOYW1lKVt2YWx1ZU5hbWVdO1xuICBpZiAoZW51bVZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGVudW0gbWVtYmVyIG5hbWVkICR7dmFsdWVOYW1lfSBpbiAke3R5cGVOYW1lfWApO1xuICB9XG4gIHJldHVybiBlbnVtVmFsdWU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZVNlcmlhbGl6YXRpb24ge1xuICBzZXJpYWxpemF0aW9uQ2xhc3M6IFNlcmlhbGl6YXRpb25DbGFzcztcbiAgdHlwZVJlZjogT3B0aW9uYWxWYWx1ZU9yVm9pZDtcbn1cblxuLyoqXG4gKiBGcm9tIGEgdHlwZSByZWZlcmVuY2UsIHJldHVybiB0aGUgcG9zc2libGUgc2VyaWFsaXphdGlvbiB0eXBlc1xuICpcbiAqIFRoZXJlIGNhbiBiZSBtdWx0aXBsZSwgYmVjYXVzZSB0aGUgdHlwZSBjYW4gYmUgYSB0eXBlIHVuaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXphdGlvblR5cGUoXG4gIHR5cGVSZWY6IE9wdGlvbmFsVmFsdWVPclZvaWQsXG4gIGxvb2t1cDogVHlwZUxvb2t1cCxcbik6IFR5cGVTZXJpYWxpemF0aW9uW10ge1xuICBpZiAodHlwZVJlZiA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiS2VybmVsIGVycm9yOiBleHBlY3RlZCB0eXBlIGluZm9ybWF0aW9uLCBnb3QgJ3VuZGVmaW5lZCdcIik7XG4gIH1cbiAgaWYgKHR5cGVSZWYgPT09ICd2b2lkJykge1xuICAgIHJldHVybiBbeyBzZXJpYWxpemF0aW9uQ2xhc3M6IFNlcmlhbGl6YXRpb25DbGFzcy5Wb2lkLCB0eXBlUmVmIH1dO1xuICB9XG4gIGlmIChzcGVjLmlzUHJpbWl0aXZlVHlwZVJlZmVyZW5jZSh0eXBlUmVmLnR5cGUpKSB7XG4gICAgc3dpdGNoICh0eXBlUmVmLnR5cGUucHJpbWl0aXZlKSB7XG4gICAgICBjYXNlIHNwZWMuUHJpbWl0aXZlVHlwZS5Bbnk6XG4gICAgICAgIHJldHVybiBbeyBzZXJpYWxpemF0aW9uQ2xhc3M6IFNlcmlhbGl6YXRpb25DbGFzcy5BbnksIHR5cGVSZWYgfV07XG4gICAgICBjYXNlIHNwZWMuUHJpbWl0aXZlVHlwZS5EYXRlOlxuICAgICAgICByZXR1cm4gW3sgc2VyaWFsaXphdGlvbkNsYXNzOiBTZXJpYWxpemF0aW9uQ2xhc3MuRGF0ZSwgdHlwZVJlZiB9XTtcbiAgICAgIGNhc2Ugc3BlYy5QcmltaXRpdmVUeXBlLkpzb246XG4gICAgICAgIHJldHVybiBbeyBzZXJpYWxpemF0aW9uQ2xhc3M6IFNlcmlhbGl6YXRpb25DbGFzcy5Kc29uLCB0eXBlUmVmIH1dO1xuICAgICAgY2FzZSBzcGVjLlByaW1pdGl2ZVR5cGUuQm9vbGVhbjpcbiAgICAgIGNhc2Ugc3BlYy5QcmltaXRpdmVUeXBlLk51bWJlcjpcbiAgICAgIGNhc2Ugc3BlYy5QcmltaXRpdmVUeXBlLlN0cmluZzpcbiAgICAgICAgcmV0dXJuIFt7IHNlcmlhbGl6YXRpb25DbGFzczogU2VyaWFsaXphdGlvbkNsYXNzLlNjYWxhciwgdHlwZVJlZiB9XTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gcHJpbWl0aXZlIHR5cGUnKTtcbiAgfVxuICBpZiAoc3BlYy5pc0NvbGxlY3Rpb25UeXBlUmVmZXJlbmNlKHR5cGVSZWYudHlwZSkpIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBzZXJpYWxpemF0aW9uQ2xhc3M6XG4gICAgICAgICAgdHlwZVJlZi50eXBlLmNvbGxlY3Rpb24ua2luZCA9PT0gc3BlYy5Db2xsZWN0aW9uS2luZC5BcnJheVxuICAgICAgICAgICAgPyBTZXJpYWxpemF0aW9uQ2xhc3MuQXJyYXlcbiAgICAgICAgICAgIDogU2VyaWFsaXphdGlvbkNsYXNzLk1hcCxcbiAgICAgICAgdHlwZVJlZixcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuICBpZiAoc3BlYy5pc1VuaW9uVHlwZVJlZmVyZW5jZSh0eXBlUmVmLnR5cGUpKSB7XG4gICAgY29uc3QgY29tcG91bmRUeXBlcyA9IGZsYXRNYXAodHlwZVJlZi50eXBlLnVuaW9uLnR5cGVzLCAodCkgPT5cbiAgICAgIHNlcmlhbGl6YXRpb25UeXBlKHsgdHlwZTogdCB9LCBsb29rdXApLFxuICAgICk7XG4gICAgLy8gUHJvcGFnYXRlIHRoZSB0b3AtbGV2ZWwgJ29wdGlvbmFsJyBmaWVsZCB0byBlYWNoIGluZGl2aWR1YWwgc3VidHlwZVxuICAgIGZvciAoY29uc3QgdCBvZiBjb21wb3VuZFR5cGVzKSB7XG4gICAgICBpZiAodC50eXBlUmVmICE9PSAndm9pZCcpIHtcbiAgICAgICAgdC50eXBlUmVmLm9wdGlvbmFsID0gdHlwZVJlZi5vcHRpb25hbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbXBvdW5kVHlwZXMuc29ydCgobCwgcikgPT5cbiAgICAgIGNvbXBhcmVTZXJpYWxpemF0aW9uQ2xhc3NlcyhsLnNlcmlhbGl6YXRpb25DbGFzcywgci5zZXJpYWxpemF0aW9uQ2xhc3MpLFxuICAgICk7XG4gIH1cblxuICAvLyBUaGUgbmV4dCBwYXJ0IG9mIHRoZSBjb252ZXJzaW9uIGlzIGxvb2t1cC1kZXBlbmRlbnRcbiAgY29uc3QgdHlwZSA9IGxvb2t1cCh0eXBlUmVmLnR5cGUuZnFuKTtcblxuICBpZiAoc3BlYy5pc0VudW1UeXBlKHR5cGUpKSB7XG4gICAgcmV0dXJuIFt7IHNlcmlhbGl6YXRpb25DbGFzczogU2VyaWFsaXphdGlvbkNsYXNzLkVudW0sIHR5cGVSZWYgfV07XG4gIH1cblxuICBpZiAoc3BlYy5pc0ludGVyZmFjZVR5cGUodHlwZSkgJiYgdHlwZS5kYXRhdHlwZSkge1xuICAgIHJldHVybiBbeyBzZXJpYWxpemF0aW9uQ2xhc3M6IFNlcmlhbGl6YXRpb25DbGFzcy5TdHJ1Y3QsIHR5cGVSZWYgfV07XG4gIH1cblxuICByZXR1cm4gW3sgc2VyaWFsaXphdGlvbkNsYXNzOiBTZXJpYWxpemF0aW9uQ2xhc3MuUmVmZXJlbmNlVHlwZSwgdHlwZVJlZiB9XTtcbn1cblxuZnVuY3Rpb24gbnVsbEFuZE9rKHg6IHVua25vd24sIHR5cGU6IE9wdGlvbmFsVmFsdWVPclZvaWQpOiBib29sZWFuIHtcbiAgaWYgKHggIT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlICE9PSAndm9pZCcgJiYgIXR5cGUub3B0aW9uYWwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgR290ICd1bmRlZmluZWQnIGZvciBub24tb3B0aW9uYWwgaW5zdGFuY2Ugb2YgJHtKU09OLnN0cmluZ2lmeSh0eXBlKX1gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNEYXRlKHg6IHVua25vd24pOiB4IGlzIERhdGUge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJlxuICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgRGF0ZV0nXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzU2NhbGFyKHg6IHVua25vd24pOiB4IGlzIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB4ID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgeCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHggPT09ICdib29sZWFuJ1xuICApO1xufVxuXG5mdW5jdGlvbiBmbGF0TWFwPFQsIFU+KHhzOiBUW10sIGZuOiAoeDogVCkgPT4gVVtdKTogVVtdIHtcbiAgY29uc3QgcmV0ID0gbmV3IEFycmF5PFU+KCk7XG4gIGZvciAoY29uc3QgeCBvZiB4cykge1xuICAgIHJldC5wdXNoKC4uLmZuKHgpKTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIE1hcCBhbiBvYmplY3QncyB2YWx1ZXMsIHNraXBwaW5nICd1bmRlZmluZWQnIHZhbHVlcydcbiAqL1xuZnVuY3Rpb24gbWFwVmFsdWVzKFxuICB2YWx1ZTogdW5rbm93bixcbiAgZm46ICh2YWx1ZTogYW55LCBmaWVsZDogc3RyaW5nKSA9PiBhbnksXG4pOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgb2JqZWN0IHR5cGUsIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgfVxuXG4gIGNvbnN0IG91dDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICBjb25zdCB3aXJlVmFsdWUgPSBmbih2LCBrKTtcbiAgICBpZiAod2lyZVZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBvdXRba10gPSB3aXJlVmFsdWU7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gcHJvcGVydGllc09mKFxuICB0OiBzcGVjLlR5cGUsXG4gIGxvb2t1cDogVHlwZUxvb2t1cCxcbik6IHsgW25hbWU6IHN0cmluZ106IHNwZWMuUHJvcGVydHkgfSB7XG4gIGlmICghc3BlYy5pc0NsYXNzT3JJbnRlcmZhY2VUeXBlKHQpKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgbGV0IHJldDogeyBbbmFtZTogc3RyaW5nXTogc3BlYy5Qcm9wZXJ0eSB9ID0ge307XG5cbiAgaWYgKHQuaW50ZXJmYWNlcykge1xuICAgIGZvciAoY29uc3QgaWZhY2Ugb2YgdC5pbnRlcmZhY2VzKSB7XG4gICAgICByZXQgPSB7IC4uLnJldCwgLi4ucHJvcGVydGllc09mKGxvb2t1cChpZmFjZSksIGxvb2t1cCkgfTtcbiAgICB9XG4gIH1cbiAgaWYgKHNwZWMuaXNDbGFzc1R5cGUodCkgJiYgdC5iYXNlKSB7XG4gICAgcmV0ID0geyAuLi5yZXQsIC4uLnByb3BlcnRpZXNPZihsb29rdXAodC5iYXNlKSwgbG9va3VwKSB9O1xuICB9XG5cbiAgZm9yIChjb25zdCBwcm9wIG9mIHQucHJvcGVydGllcyA/PyBbXSkge1xuICAgIHJldFtwcm9wLm5hbWVdID0gcHJvcDtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogVGVzdHMgd2hldGhlciBhIGdpdmVuIHR5cGUgKGJ5IGl0J3MgRlFOKSBjYW4gYmUgYXNzaWduZWQgdG8gYSBuYW1lZCB0eXBlIHJlZmVyZW5jZS5cbiAqXG4gKiBAcGFyYW0gYWN0dWFsVHlwZUZxbiB0aGUgRlFOIG9mIHRoZSB0eXBlIHRoYXQgaXMgYmVpbmcgdGVzdGVkLlxuICogQHBhcmFtIHJlcXVpcmVkVHlwZSAgdGhlIHJlcXVpcmVkIHJlZmVyZW5jZSB0eXBlLlxuICpcbiAqIEByZXR1cm5zIHRydWUgaWYgYGByZXF1aXJlZFR5cGVgYCBpcyBhIHN1cGVyLXR5cGUgKGJhc2UgY2xhc3Mgb3IgaW1wbGVtZW50ZWQgaW50ZXJmYWNlKSBvZiB0aGUgdHlwZSBkZXNpZ25hdGVkIGJ5XG4gKiAgICAgICAgICBgYGFjdHVhbFR5cGVGcW5gYC5cbiAqL1xuZnVuY3Rpb24gaXNBc3NpZ25hYmxlKFxuICBhY3R1YWxUeXBlRnFuOiBzdHJpbmcsXG4gIHJlcXVpcmVkVHlwZTogc3BlYy5OYW1lZFR5cGVSZWZlcmVuY2UsXG4gIGxvb2t1cDogVHlwZUxvb2t1cCxcbik6IGJvb2xlYW4ge1xuICAvLyBUaGUgZW1wdHkgb2JqZWN0IGlzIGFzc2lnbmFibGUgdG8gZXZlcnl0aGluZ1xuICBpZiAoYWN0dWFsVHlwZUZxbiA9PT0gRU1QVFlfT0JKRUNUX0ZRTikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHJlcXVpcmVkVHlwZS5mcW4gPT09IGFjdHVhbFR5cGVGcW4pIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBhY3R1YWxUeXBlID0gbG9va3VwKGFjdHVhbFR5cGVGcW4pO1xuICBpZiAoc3BlYy5pc0NsYXNzVHlwZShhY3R1YWxUeXBlKSkge1xuICAgIGlmIChcbiAgICAgIGFjdHVhbFR5cGUuYmFzZSAmJlxuICAgICAgaXNBc3NpZ25hYmxlKGFjdHVhbFR5cGUuYmFzZSwgcmVxdWlyZWRUeXBlLCBsb29rdXApXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKHNwZWMuaXNDbGFzc09ySW50ZXJmYWNlVHlwZShhY3R1YWxUeXBlKSAmJiBhY3R1YWxUeXBlLmludGVyZmFjZXMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgYWN0dWFsVHlwZS5pbnRlcmZhY2VzLmZpbmQoKGlmYWNlKSA9PlxuICAgICAgICBpc0Fzc2lnbmFibGUoaWZhY2UsIHJlcXVpcmVkVHlwZSwgbG9va3VwKSxcbiAgICAgICkgIT0gbnVsbFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVJlcXVpcmVkUHJvcHMoXG4gIGFjdHVhbFByb3BzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LFxuICB0eXBlTmFtZTogc3RyaW5nLFxuICBzcGVjUHJvcHM6IHsgW2tleTogc3RyaW5nXTogc3BlYy5Qcm9wZXJ0eSB9LFxuKSB7XG4gIC8vIENoZWNrIGZvciByZXF1aXJlZCBwcm9wZXJ0aWVzXG4gIGNvbnN0IG1pc3NpbmdSZXF1aXJlZFByb3BzID0gT2JqZWN0LmtleXMoc3BlY1Byb3BzKVxuICAgIC5maWx0ZXIoKG5hbWUpID0+ICFzcGVjUHJvcHNbbmFtZV0ub3B0aW9uYWwpXG4gICAgLmZpbHRlcigobmFtZSkgPT4gIShuYW1lIGluIGFjdHVhbFByb3BzKSk7XG5cbiAgaWYgKG1pc3NpbmdSZXF1aXJlZFByb3BzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0aWVzIGZvciAke3R5cGVOYW1lfTogJHttaXNzaW5nUmVxdWlyZWRQcm9wcy5qb2luKFxuICAgICAgICAnLCAnLFxuICAgICAgKX1gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gYWN0dWFsUHJvcHM7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVTZXJpYWxpemF0aW9uQ2xhc3NlcyhcbiAgbDogU2VyaWFsaXphdGlvbkNsYXNzLFxuICByOiBTZXJpYWxpemF0aW9uQ2xhc3MsXG4pOiBudW1iZXIge1xuICBjb25zdCBvcmRlciA9IFtcbiAgICBTZXJpYWxpemF0aW9uQ2xhc3MuVm9pZCxcbiAgICBTZXJpYWxpemF0aW9uQ2xhc3MuRGF0ZSxcbiAgICBTZXJpYWxpemF0aW9uQ2xhc3MuU2NhbGFyLFxuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5Kc29uLFxuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5FbnVtLFxuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5BcnJheSxcbiAgICBTZXJpYWxpemF0aW9uQ2xhc3MuTWFwLFxuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5TdHJ1Y3QsXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLlJlZmVyZW5jZVR5cGUsXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLkFueSxcbiAgXTtcbiAgcmV0dXJuIG9yZGVyLmluZGV4T2YobCkgLSBvcmRlci5pbmRleE9mKHIpO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBgb2JqYCBtdXN0IGJlIHBhc3NlZCBieS1yZWZlcmVuY2Ugb3IgaWYgYnktdmFsdWUgaXMgYWNjZXB0YWJsZS4gRm9yIGV4YW1wbGUsXG4gKiBvYmplY3RzIHdpdGggbWV0aG9kcywgb3IgZHluYW1pYyBnZXR0ZXJzIChvciBzZXR0ZXJzKSBzaG91bGQgYmUgcGFzc2VkIGJ5LXJlZmVyZW5jZSBhcyBhIG1hdHRlclxuICogb2Ygc2VjdXJpdHkuIFRoZSBiZWhhdmlvciBpbiBub24tSlMgcnVudGltZXMgY291bGQgb3RoZXJ3aXNlIGRpZmZlciBmcm9tIHRoYXQgaW4gcHVyZSBKUyAoaWZcbiAqIGdldHRlcnMgYXJlIG5vdCBzdGFibGUsIGV0Yy4uLikuXG4gKlxuICogQHBhcmFtIG9iaiB0aGUgb2JqZWN0IHRvIGJlIHRlc3RlZC5cbiAqXG4gKiBAcmV0dXJucyB0cnVlIGlmIGBvYmpgIG11c3QgYmUgcGFzc2VkIGJ5LXJlZmVyZW5jZS5cbiAqL1xuZnVuY3Rpb24gaXNCeVJlZmVyZW5jZU9ubHkob2JqOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCBjdXJyID0gb2JqO1xuICAvLyBDcmF3bCB1cCB0aGUgcHJvdG90eXBlIGNoYWluIHRvIGxvb2sgZm9yIGR5bmFtaWMgcHJvcGVydGllcyBvciBtZXRob2RzLlxuICBkbyB7XG4gICAgZm9yIChjb25zdCBwcm9wIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGN1cnIpKSB7XG4gICAgICBjb25zdCBkZXNjciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY3VyciwgcHJvcCk7XG4gICAgICBpZiAoXG4gICAgICAgIGRlc2NyPy5nZXQgIT0gbnVsbCB8fFxuICAgICAgICBkZXNjcj8uc2V0ICE9IG51bGwgfHxcbiAgICAgICAgdHlwZW9mIGRlc2NyPy52YWx1ZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIC8vIFByb3BlcnR5IGhhcyBhIGR5bmFtaWMgZ2V0dGVyLCBzZXR0ZXIgb3IgaXMgYSBjb25zdHJ1Y3Rvci9tZXRob2QsIHNvIGJ5LXJlZiByZXF1aXJlZCFcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEVuZCB3aGVuIHRoZSBwYXJlbnQgcHJvdG8gaXMgYE9iamVjdGAsIHdoaWNoIGhhcyBubyBwYXJlbnQgcHJvdG8gaXRzZWxmLlxuICB9IHdoaWxlIChPYmplY3QuZ2V0UHJvdG90eXBlT2YoKGN1cnIgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY3VycikpKSAhPSBudWxsKTtcblxuICByZXR1cm4gZmFsc2U7XG59XG4iXX0=
711
+ //# sourceMappingURL=serialization.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jsii/kernel",
3
- "version": "1.59.0",
3
+ "version": "1.60.0",
4
4
  "description": "kernel for jsii execution environment",
5
5
  "license": "Apache-2.0",
6
6
  "author": {
@@ -17,7 +17,7 @@
17
17
  "directory": "packages/@jsii/kernel"
18
18
  },
19
19
  "engines": {
20
- "node": ">= 12.7.0"
20
+ "node": ">= 14.5.0"
21
21
  },
22
22
  "main": "lib/index.js",
23
23
  "types": "lib/index.d.ts",
@@ -31,24 +31,17 @@
31
31
  "package": "package-js"
32
32
  },
33
33
  "dependencies": {
34
- "@jsii/spec": "^1.59.0",
35
- "fs-extra": "^9.1.0",
34
+ "@jsii/spec": "^1.60.0",
35
+ "fs-extra": "^10.1.0",
36
36
  "tar": "^6.1.11"
37
37
  },
38
38
  "devDependencies": {
39
- "@scope/jsii-calc-base": "^1.59.0",
40
- "@scope/jsii-calc-lib": "^1.59.0",
39
+ "@scope/jsii-calc-base": "^1.60.0",
40
+ "@scope/jsii-calc-lib": "^1.60.0",
41
41
  "@types/fs-extra": "^9.0.13",
42
- "@types/jest": "^27.5.0",
43
- "@types/node": "^12.20.50",
44
42
  "@types/tar": "^6.1.1",
45
- "eslint": "^8.15.0",
46
- "jest": "^27.5.1",
47
43
  "jest-expect-message": "^1.0.2",
48
- "jsii-build-tools": "^1.59.0",
49
- "jsii-calc": "^3.20.120",
50
- "prettier": "^2.6.2",
51
- "ts-jest": "^27.1.4",
52
- "typescript": "~3.9.10"
44
+ "jsii-build-tools": "^1.60.0",
45
+ "jsii-calc": "^3.20.120"
53
46
  }
54
47
  }