@rljson/io 0.0.57 → 0.0.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/io-db-name-mapping.d.ts +3 -2
- package/dist/io.js +4 -3
- package/package.json +5 -5
package/dist/io.js
CHANGED
|
@@ -4,8 +4,9 @@ import { copy, equals } from "@rljson/json";
|
|
|
4
4
|
import { iterateTables, throwOnInvalidTableCfg, validateRljsonAgainstTableCfg, iterateTablesSync } from "@rljson/rljson";
|
|
5
5
|
class IoDbNameMapping {
|
|
6
6
|
// The primary key column is always named '_hash'
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
primaryKeyColumn = "_hash";
|
|
8
|
+
dataSection = "_data";
|
|
9
|
+
typeColumn = "type";
|
|
9
10
|
// Names for the main tables in the database
|
|
10
11
|
tableNames = {
|
|
11
12
|
main: "tableCfgs",
|
|
@@ -714,4 +715,4 @@ export {
|
|
|
714
715
|
exampleIo,
|
|
715
716
|
exampleTestSetup
|
|
716
717
|
};
|
|
717
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8uanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9pby1kYi1uYW1lLW1hcHBpbmcudHMiLCIuLi9zcmMvaW8tdG9vbHMudHMiLCIuLi9zcmMvaW8tbWVtLnRzIiwiLi4vc3JjL2lvLXRlc3Qtc2V0dXAudHMiLCIuLi9zcmMvaW8udHMiLCIuLi9zcmMvcmV2ZXJzZS1yZWYudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGxpY2Vuc2VcclxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxyXG4vL1xyXG4vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0ZXJtcyB0aGF0IGNhbiBiZVxyXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cclxuXHJcbmV4cG9ydCBjbGFzcyBJb0RiTmFtZU1hcHBpbmcge1xyXG4gIC8vIFRoZSBwcmltYXJ5IGtleSBjb2x1bW4gaXMgYWx3YXlzIG5hbWVkICdfaGFzaCdcclxuICBwdWJsaWMgcHJpbWFyeUtleU5hbWU6IHN0cmluZyA9ICdfaGFzaCc7XHJcbiAgcHVibGljIGRhdGFOYW1lOiBzdHJpbmcgPSAnX2RhdGEnO1xyXG5cclxuICAvLyBOYW1lcyBmb3IgdGhlIG1haW4gdGFibGVzIGluIHRoZSBkYXRhYmFzZVxyXG4gIHB1YmxpYyB0YWJsZU5hbWVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gICAgbWFpbjogJ3RhYmxlQ2ZncycsXHJcbiAgICByZXZpc2lvbjogJ3JldmlzaW9ucycsXHJcbiAgfTtcclxuXHJcbiAgLy8vIFN1ZmZpeCBoYW5kbGluZyBmb3IgdGhlIGRhdGFiYXNlXHJcbiAgcHJpdmF0ZSBfc3VmZml4OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gICAgY29sOiAnX2NvbCcsXHJcbiAgICB0Ymw6ICdfdGJsJyxcclxuICAgIHRtcDogJ190bXAnLFxyXG4gIH07XHJcblxyXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgLy8gYWRkIGFuZCByZW1vdmUgc3VmZml4ZXMgZm9yIHVzZSBpbiBTUUwgc3RhdGVtZW50c1xyXG4gIHByaXZhdGUgX2FkZEZpeChuYW1lOiBzdHJpbmcsIGZpeDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBuYW1lLmVuZHNXaXRoKGZpeCkgPyBuYW1lIDogbmFtZSArIGZpeDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGRUYWJsZVN1ZmZpeChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FkZEZpeChuYW1lLCB0aGlzLl9zdWZmaXgudGJsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGRDb2x1bW5TdWZmaXgobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9hZGRGaXgobmFtZSwgdGhpcy5fc3VmZml4LmNvbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW1vdmVGaXgobmFtZTogc3RyaW5nLCBmaXg6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbmFtZS5lbmRzV2l0aChmaXgpID8gbmFtZS5zbGljZSgwLCAtZml4Lmxlbmd0aCkgOiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZVRhYmxlU3VmZml4KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVtb3ZlRml4KG5hbWUsIHRoaXMuX3N1ZmZpeC50YmwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZUNvbHVtblN1ZmZpeChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlbW92ZUZpeChuYW1lLCB0aGlzLl9zdWZmaXguY29sKTtcclxuICB9XHJcbn1cclxuIiwiLy8gQGxpY2Vuc2VcclxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxyXG4vL1xyXG4vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0ZXJtcyB0aGF0IGNhbiBiZVxyXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cclxuXHJcbmltcG9ydCB7IGhpcCB9IGZyb20gJ0BybGpzb24vaGFzaCc7XHJcbmltcG9ydCB7XHJcbiAgaXRlcmF0ZVRhYmxlcyxcclxuICBSbGpzb24sXHJcbiAgVGFibGVDZmcsXHJcbiAgVGFibGVLZXksXHJcbiAgVGFibGVUeXBlLFxyXG4gIHRocm93T25JbnZhbGlkVGFibGVDZmcsXHJcbiAgdmFsaWRhdGVSbGpzb25BZ2FpbnN0VGFibGVDZmcsXHJcbn0gZnJvbSAnQHJsanNvbi9ybGpzb24nO1xyXG5cclxuaW1wb3J0IHsgSW9NZW0gfSBmcm9tICcuL2lvLW1lbS50cyc7XHJcbmltcG9ydCB7IElvIH0gZnJvbSAnLi9pby50cyc7XHJcblxyXG5leHBvcnQgdHlwZSBJb09ic2VydmVyID0gKGRhdGE6IFJsanNvbikgPT4gdm9pZDtcclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlcyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGhlIElvIGludGVyZmFjZS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBJb1Rvb2xzIHtcclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3RvclxyXG4gICAqIEBwYXJhbSBpbyBUaGUgSW8gaW50ZXJmYWNlIHRvIHVzZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBpbzogSW8pIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHRhYmxlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHRhYmxlQ2ZncyB0YWJsZS5cclxuICAgKi9cclxuICBzdGF0aWMgZ2V0IHRhYmxlQ2Znc1RhYmxlQ2ZnKCkge1xyXG4gICAgY29uc3QgdGFibGVDZmcgPSBoaXA8VGFibGVDZmc+KHtcclxuICAgICAgX2hhc2g6ICcnLFxyXG4gICAgICBrZXk6ICd0YWJsZUNmZ3MnLFxyXG4gICAgICB0eXBlOiAndGFibGVDZmdzJyxcclxuICAgICAgaXNIZWFkOiBmYWxzZSxcclxuICAgICAgaXNSb290OiBmYWxzZSxcclxuICAgICAgaXNTaGFyZWQ6IHRydWUsXHJcbiAgICAgIHByZXZpb3VzOiAnJyxcclxuXHJcbiAgICAgIGNvbHVtbnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBrZXk6ICdfaGFzaCcsXHJcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcclxuICAgICAgICAgIHRpdGxlU2hvcnQ6ICdIYXNoJyxcclxuICAgICAgICAgIHRpdGxlTG9uZzogJ1JvdyBIYXNoJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGtleTogJ2tleScsXHJcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcclxuICAgICAgICAgIHRpdGxlU2hvcnQ6ICdLZXknLFxyXG4gICAgICAgICAgdGl0bGVMb25nOiAnVGFibGUgS2V5JyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGtleTogJ3R5cGUnLFxyXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgICAgICB0aXRsZVNob3J0OiAnVHlwZScsXHJcbiAgICAgICAgICB0aXRsZUxvbmc6ICdDb250ZW50IFR5cGUnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAga2V5OiAnaXNIZWFkJyxcclxuICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcclxuICAgICAgICAgIHRpdGxlU2hvcnQ6ICdJcyBIZWFkJyxcclxuICAgICAgICAgIHRpdGxlTG9uZzogJ0lzIEhlYWQgVGFibGUnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAga2V5OiAnaXNSb290JyxcclxuICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcclxuICAgICAgICAgIHRpdGxlU2hvcnQ6ICdJcyBSb290JyxcclxuICAgICAgICAgIHRpdGxlTG9uZzogJ0lzIFJvb3QgVGFibGUnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAga2V5OiAnaXNTaGFyZWQnLFxyXG4gICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxyXG4gICAgICAgICAgdGl0bGVTaG9ydDogJ0lzIFNoYXJlZCcsXHJcbiAgICAgICAgICB0aXRsZUxvbmc6ICdJcyBTaGFyZWQgVGFibGUnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAga2V5OiAncHJldmlvdXMnLFxyXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgICAgICB0aXRsZVNob3J0OiAnUHJldmlvdXMnLFxyXG4gICAgICAgICAgdGl0bGVMb25nOiAnUHJldmlvdXMgVGFibGUgQ29uZmlndXJhdGlvbiBIYXNoJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGtleTogJ2NvbHVtbnMnLFxyXG4gICAgICAgICAgdHlwZTogJ2pzb25BcnJheScsXHJcbiAgICAgICAgICB0aXRsZVNob3J0OiAnQ29sdW1ucycsXHJcbiAgICAgICAgICB0aXRsZUxvbmc6ICdDb2x1bW4gQ29uZmlndXJhdGlvbnMnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0sXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdGFibGVDZmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplcyB0aGUgcmV2aXNpb25zIHRhYmxlLlxyXG4gICAqL1xyXG4gIGluaXRSZXZpc2lvbnNUYWJsZSA9IGFzeW5jICgpID0+IHtcclxuICAgIGNvbnN0IHRhYmxlQ2ZnOiBUYWJsZUNmZyA9IHtcclxuICAgICAga2V5OiAncmV2aXNpb25zJyxcclxuICAgICAgdHlwZTogJ3JldmlzaW9ucycsXHJcbiAgICAgIGlzSGVhZDogdHJ1ZSxcclxuICAgICAgaXNSb290OiB0cnVlLFxyXG4gICAgICBpc1NoYXJlZDogZmFsc2UsXHJcblxyXG4gICAgICBjb2x1bW5zOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAga2V5OiAnX2hhc2gnLFxyXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgICAgICB0aXRsZVNob3J0OiAnSGFzaCcsXHJcbiAgICAgICAgICB0aXRsZUxvbmc6ICdSb3cgSGFzaCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBrZXk6ICd0YWJsZScsXHJcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcclxuICAgICAgICAgIHRpdGxlU2hvcnQ6ICdUYWJsZScsXHJcbiAgICAgICAgICB0aXRsZUxvbmc6ICdUYWJsZSBLZXknLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAga2V5OiAncHJlZGVjZXNzb3InLFxyXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgICAgICB0aXRsZVNob3J0OiAnUHJlZGVjZXNzb3InLFxyXG4gICAgICAgICAgdGl0bGVMb25nOiAnUHJlZGVjZXNzb3IgUmV2aXNpb24gSGFzaCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBrZXk6ICdzdWNjZXNzb3InLFxyXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgICAgICB0aXRsZVNob3J0OiAnU3VjY2Vzc29yJyxcclxuICAgICAgICAgIHRpdGxlTG9uZzogJ1N1Y2Nlc3NvciBSZXZpc2lvbiBIYXNoJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGtleTogJ3RpbWVzdGFtcCcsXHJcbiAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcclxuICAgICAgICAgIHRpdGxlU2hvcnQ6ICdUaW1lc3RhbXAnLFxyXG4gICAgICAgICAgdGl0bGVMb25nOiAnUmV2aXNpb24gVGltZXN0YW1wJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGtleTogJ2lkJyxcclxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICAgICAgdGl0bGVTaG9ydDogJ0lEJyxcclxuICAgICAgICAgIHRpdGxlTG9uZzogJ1JldmlzaW9uIElEJyxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgfTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmlvLmNyZWF0ZU9yRXh0ZW5kVGFibGUoeyB0YWJsZUNmZyB9KTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBFeGFtcGxlIG9iamVjdCBmb3IgdGVzdCBwdXJwb3Nlc1xyXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIGlvIHRvb2xzXHJcbiAgICovXHJcbiAgc3RhdGljIGV4YW1wbGUgPSBhc3luYyAoKSA9PiB7XHJcbiAgICBjb25zdCBpbyA9IGF3YWl0IElvTWVtLmV4YW1wbGUoKTtcclxuICAgIGF3YWl0IGlvLmluaXQoKTtcclxuICAgIGF3YWl0IGlvLmlzUmVhZHkoKTtcclxuICAgIHJldHVybiBuZXcgSW9Ub29scyhpbyk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhyb3dzIGlmIHRoZSB0YWJsZSBkb2VzIG5vdCBleGlzdFxyXG4gICAqL1xyXG4gIGFzeW5jIHRocm93V2hlblRhYmxlRG9lc05vdEV4aXN0KHRhYmxlOiBUYWJsZUtleSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgZXhpc3RzID0gYXdhaXQgdGhpcy5pby50YWJsZUV4aXN0cyh0YWJsZSk7XHJcbiAgICBpZiAoIWV4aXN0cykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhYmxlIFwiJHt0YWJsZX1cIiBub3QgZm91bmRgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRocm93cyBpZiBhbnkgb2YgdGhlIHRhYmxlcyBpbiBybGpzb24gZG8gbm90IGV4aXN0XHJcbiAgICogQHBhcmFtIHJsanNvbiAtIFRoZSBSbGpzb24gb2JqZWN0IHRvIGNoZWNrXHJcbiAgICovXHJcbiAgYXN5bmMgdGhyb3dXaGVuVGFibGVzRG9Ob3RFeGlzdChybGpzb246IFJsanNvbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgaXRlcmF0ZVRhYmxlcyhybGpzb24sIGFzeW5jICh0YWJsZUtleSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGV4aXN0cyA9IGF3YWl0IHRoaXMuaW8udGFibGVFeGlzdHModGFibGVLZXkpO1xyXG4gICAgICAgIGlmICghZXhpc3RzKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhYmxlIFwiJHt0YWJsZUtleX1cIiBub3QgZm91bmRgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zdCBtaXNzaW5nVGFibGVzID0gKGUgYXMgQXJyYXk8YW55PikubWFwKChlKSA9PiBlLnRhYmxlS2V5KTtcclxuXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgVGhlIGZvbGxvd2luZyB0YWJsZXMgZG8gbm90IGV4aXN0OiAke21pc3NpbmdUYWJsZXMuam9pbignLCAnKX1gLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCB0YWJsZSBjZmdzIG9mIGFsbCB0YWJsZXNcclxuICAgKiBAcmV0dXJucyBUaGUgdGFibGUgY29uZmlndXJhdGlvbiBvZiBhbGwgdGFibGVzXHJcbiAgICovXHJcbiAgYXN5bmMgdGFibGVDZmdzKCk6IFByb21pc2U8VGFibGVDZmdbXT4ge1xyXG4gICAgY29uc3QgdGFibGVzID0gYXdhaXQgdGhpcy5pby5yYXdUYWJsZUNmZ3MoKTtcclxuXHJcbiAgICAvLyBUYWtlIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBlYWNoIHR5cGUga2V5XHJcbiAgICBjb25zdCBuZXdlc3RWZXJzaW9uOiBSZWNvcmQ8VGFibGVLZXksIFRhYmxlQ2ZnPiA9IHt9O1xyXG4gICAgZm9yIChsZXQgaSA9IHRhYmxlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICBjb25zdCB0YWJsZSA9IHRhYmxlc1tpXTtcclxuICAgICAgY29uc3QgZXhpc3RpbmcgPSBuZXdlc3RWZXJzaW9uW3RhYmxlLmtleV07XHJcbiAgICAgIGlmICghZXhpc3RpbmcgfHwgZXhpc3RpbmcuY29sdW1ucy5sZW5ndGggPCB0YWJsZS5jb2x1bW5zLmxlbmd0aCkge1xyXG4gICAgICAgIG5ld2VzdFZlcnNpb25bdGFibGUua2V5XSA9IHRhYmxlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU29ydCB0aGUgdGFibGVzIGJ5IGtleVxyXG4gICAgLyogdjggaWdub3JlIG5leHQgLS0gQHByZXNlcnZlICovXHJcbiAgICBjb25zdCByZXN1bHREYXRhID0gT2JqZWN0LnZhbHVlcyhuZXdlc3RWZXJzaW9uKS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGlmIChhLmtleSA8IGIua2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChhLmtleSA+IGIua2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0RGF0YTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYSBsaXN0IHdpdGggYWxsIHRhYmxlIG5hbWVzXHJcbiAgICovXHJcbiAgYXN5bmMgYWxsVGFibGVLZXlzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCB0aGlzLnRhYmxlQ2ZncygpKS5tYXAoKGUpID0+IGUua2V5KTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgZ2l2ZW4gdGFibGVcclxuICAgKi9cclxuICBhc3luYyB0YWJsZUNmZyh0YWJsZTogVGFibGVLZXkpOiBQcm9taXNlPFRhYmxlQ2ZnPiB7XHJcbiAgICBjb25zdCB0YWJsZUNmZyA9IGF3YWl0IHRoaXMudGFibGVDZmdPck51bGwodGFibGUpO1xyXG4gICAgaWYgKCF0YWJsZUNmZykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhYmxlIFwiJHt0YWJsZX1cIiBub3QgZm91bmRgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGFibGVDZmchO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIGdpdmVuIHRhYmxlIG9yIG51bGwgaWYgaXQgZG9lcyBub3QgZXhpc3QuXHJcblxyXG4gICAqL1xyXG4gIGFzeW5jIHRhYmxlQ2ZnT3JOdWxsKHRhYmxlOiBUYWJsZUtleSk6IFByb21pc2U8VGFibGVDZmcgfCBudWxsPiB7XHJcbiAgICBjb25zdCB0YWJsZUNmZ3MgPSBhd2FpdCB0aGlzLnRhYmxlQ2ZncygpO1xyXG4gICAgY29uc3QgdGFibGVDZmcgPSB0YWJsZUNmZ3MuZmluZCgoZSkgPT4gZS5rZXkgPT09IHRhYmxlKTtcclxuICAgIHJldHVybiB0YWJsZUNmZyA/PyBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIGNvbHVtbiBuYW1lcyBvZiBhIGdpdmVuIHRhYmxlXHJcbiAgICovXHJcbiAgYXN5bmMgYWxsQ29sdW1uS2V5cyh0YWJsZTogVGFibGVLZXkpOiBQcm9taXNlPHN0cmluZ1tdPiB7XHJcbiAgICBjb25zdCB0YWJsZUNmZyA9IGF3YWl0IHRoaXMudGFibGVDZmcodGFibGUpO1xyXG4gICAgY29uc3QgcmVzdWx0ID0gdGFibGVDZmcuY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmtleSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhyb3dzIHdoZW4gYSBjb2x1bW4gZG9lcyBub3QgZXhpc3QgaW4gYSBnaXZlbiB0YWJsZVxyXG4gICAqIEBwYXJhbSB0YWJsZSAtIFRoZSB0YWJsZSB0byBjaGVja1xyXG4gICAqIEBwYXJhbSBjb2x1bW5zIC0gVGhlIGNvbHVtbiB0byBjaGVja1xyXG4gICAqL1xyXG4gIGFzeW5jIHRocm93V2hlbkNvbHVtbkRvZXNOb3RFeGlzdChcclxuICAgIHRhYmxlOiBUYWJsZUtleSxcclxuICAgIGNvbHVtbnM6IHN0cmluZ1tdLFxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgdGFibGVDZmcgPSBhd2FpdCB0aGlzLnRhYmxlQ2ZnKHRhYmxlKTtcclxuICAgIGNvbnN0IGNvbHVtbktleXMgPSB0YWJsZUNmZy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ua2V5KTtcclxuICAgIGNvbnN0IG1pc3NpbmdDb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoXHJcbiAgICAgIChjb2x1bW4pID0+ICFjb2x1bW5LZXlzLmluY2x1ZGVzKGNvbHVtbiksXHJcbiAgICApO1xyXG4gICAgaWYgKG1pc3NpbmdDb2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBUaGUgZm9sbG93aW5nIGNvbHVtbnMgZG8gbm90IGV4aXN0IGluIHRhYmxlIFwiJHt0YWJsZX1cIjogJHttaXNzaW5nQ29sdW1ucy5qb2luKFxyXG4gICAgICAgICAgJywgJyxcclxuICAgICAgICApfS5gLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhyb3dzIHdoZW4gYSB0YWJsZSB1cGRhdGUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudCB0YWJsZVxyXG4gICAqIGNvbmZpZ3VyYXRpb24uXHJcbiAgICovXHJcbiAgYXN5bmMgdGhyb3dXaGVuVGFibGVJc05vdENvbXBhdGlibGUodXBkYXRlOiBUYWJsZUNmZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgcHJlZml4ID0gYEludmFsaWQgdXBkYXRlIG9mIHRhYmxlIGFibGUgXCIke3VwZGF0ZS5rZXl9XCJgO1xyXG5cclxuICAgIHRocm93T25JbnZhbGlkVGFibGVDZmcodXBkYXRlKTtcclxuXHJcbiAgICAvLyBDaGVjayBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgdGFibGVcclxuICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgdGhpcy50YWJsZUNmZ09yTnVsbCh1cGRhdGUua2V5KTtcclxuICAgIGlmIChleGlzdGluZykge1xyXG4gICAgICAvLyBIYXZlIGNvbHVtbnMgYmVlbiBkZWxldGVkP1xyXG4gICAgICBpZiAoZXhpc3RpbmcuY29sdW1ucy5sZW5ndGggPiB1cGRhdGUuY29sdW1ucy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBkZWxldGVkQ29sdW1uS2V5cyA9IGV4aXN0aW5nLmNvbHVtbnNcclxuICAgICAgICAgIC5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmtleSlcclxuICAgICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAgIChrZXkpID0+ICF1cGRhdGUuY29sdW1ucy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5rZXkgPT09IGtleSksXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIC8qIHY4IGlnbm9yZSBuZXh0IC0tIEBwcmVzZXJ2ZSAqL1xyXG4gICAgICAgIGlmIChkZWxldGVkQ29sdW1uS2V5cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBkZWxldGVkQ29sdW1ucyA9IGRlbGV0ZWRDb2x1bW5LZXlzLmpvaW4oJywgJyk7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGAke3ByZWZpeH06IENvbHVtbnMgbXVzdCBub3QgYmUgZGVsZXRlZC4gYCArXHJcbiAgICAgICAgICAgICAgYERlbGV0ZWQgY29sdW1uczogJHtkZWxldGVkQ29sdW1uc319YCxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBIYXZlIGNvbHVtbiBrZXlzIGNoYW5nZWQ/XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhpc3RpbmcuY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGJlZm9yZSA9IGV4aXN0aW5nLmNvbHVtbnNbaV0ua2V5O1xyXG4gICAgICAgIGNvbnN0IGFmdGVyID0gdXBkYXRlLmNvbHVtbnNbaV0ua2V5O1xyXG4gICAgICAgIGlmIChiZWZvcmUgIT09IGFmdGVyKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGAke3ByZWZpeH06IGAgK1xyXG4gICAgICAgICAgICAgIGBDb2x1bW4ga2V5cyBtdXN0IG5vdCBjaGFuZ2UhIGAgK1xyXG4gICAgICAgICAgICAgIGBDb2x1bW4gXCIke2JlZm9yZX1cIiB3YXMgcmVuYW1lZCBpbnRvIFwiJHthZnRlcn1cIi5gLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEhhdmUgY29sdW1uIHR5cGVzIGNoYW5nZWQ/XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhpc3RpbmcuY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IGV4aXN0aW5nLmNvbHVtbnNbaV0ua2V5O1xyXG4gICAgICAgIGNvbnN0IGJlZm9yZSA9IGV4aXN0aW5nLmNvbHVtbnNbaV0udHlwZTtcclxuICAgICAgICBjb25zdCBhZnRlciA9IHVwZGF0ZS5jb2x1bW5zW2ldLnR5cGU7XHJcbiAgICAgICAgaWYgKGJlZm9yZSAhPT0gYWZ0ZXIpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYCR7cHJlZml4fTogYCArXHJcbiAgICAgICAgICAgICAgYENvbHVtbiB0eXBlcyBtdXN0IG5vdCBjaGFuZ2UhIGAgK1xyXG4gICAgICAgICAgICAgIGBUeXBlIG9mIGNvbHVtbiBcIiR7Y29sdW1ufVwiIHdhcyBjaGFuZ2VkIGZyb20gXCIke2JlZm9yZX1cIiB0byAke2FmdGVyfS5gLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRocm93cyBpZiB0aGUgZGF0YSBpbiB0aGUgdGFibGUgZG8gbm90IG1hdGNoIHRoZSB0YWJsZSBjb25maWd1cmF0aW9uXHJcbiAgICovXHJcbiAgYXN5bmMgdGhyb3dXaGVuVGFibGVEYXRhRG9lc05vdE1hdGNoQ2ZnKGRhdGE6IFJsanNvbikge1xyXG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGF3YWl0IGl0ZXJhdGVUYWJsZXMoZGF0YSwgYXN5bmMgKHRhYmxlS2V5KSA9PiB7XHJcbiAgICAgIGNvbnN0IHRhYmxlQ2ZnID0gYXdhaXQgdGhpcy50YWJsZUNmZyh0YWJsZUtleSk7XHJcbiAgICAgIGNvbnN0IHRhYmxlID0gZGF0YVt0YWJsZUtleV07XHJcblxyXG4gICAgICAvLyBJZ25vcmUgdGFibGVDZmdzIHRhYmxlXHJcbiAgICAgIC8qIHY4IGlnbm9yZSBuZXh0IC0tIEBwcmVzZXJ2ZSAqL1xyXG4gICAgICBpZiAodGFibGUuX3R5cGUgPT09ICd0YWJsZUNmZ3MnKSByZXR1cm47XHJcblxyXG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZVJsanNvbkFnYWluc3RUYWJsZUNmZyh0YWJsZS5fZGF0YSwgdGFibGVDZmcpKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYFRhYmxlIGRhdGEgZG9lcyBub3QgbWF0Y2ggdGhlIGNvbmZpZ3VyYXRpb24uXFxuXFxuRXJyb3JzOlxcbiR7ZXJyb3JzXHJcbiAgICAgICAgICAubWFwKChlKSA9PiBgLSAke2V9YClcclxuICAgICAgICAgIC5qb2luKCdcXG4nKX1gLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU29ydHMgdGhlIGRhdGEgb2YgYSB0YWJsZSBieSB0aGUgaGFzaCBhbmQgdXBkYXRlcyB0aGUgdGFibGUgaGFzaCBpbiBwbGFjZVxyXG4gICAqL1xyXG4gIHNvcnRUYWJsZURhdGFBbmRVcGRhdGVIYXNoKHRhYmxlOiBUYWJsZVR5cGUpOiB2b2lkIHtcclxuICAgIHRhYmxlLl9kYXRhLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgY29uc3QgaGFzaEEgPSBhLl9oYXNoIGFzIHN0cmluZztcclxuICAgICAgY29uc3QgaGFzaEIgPSBiLl9oYXNoIGFzIHN0cmluZztcclxuICAgICAgLyogdjggaWdub3JlIG5leHQgLS0gQHByZXNlcnZlICovXHJcbiAgICAgIGlmIChoYXNoQSA8IGhhc2hCKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIC8qIHY4IGlnbm9yZSBuZXh0IC0tIEBwcmVzZXJ2ZSAqL1xyXG4gICAgICBpZiAoaGFzaEEgPiBoYXNoQikge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvKiB2OCBpZ25vcmUgbmV4dCAtLSBAcHJlc2VydmUgKi9cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0YWJsZS5faGFzaCA9ICcnO1xyXG4gICAgaGlwKHRhYmxlLCB7XHJcbiAgICAgIHVwZGF0ZUV4aXN0aW5nSGFzaGVzOiBmYWxzZSxcclxuICAgICAgdGhyb3dPbldyb25nSGFzaGVzOiBmYWxzZSxcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCIvLyBAbGljZW5zZVxyXG4vLyBDb3B5cmlnaHQgKGMpIDIwMjUgUmxqc29uXHJcbi8vXHJcbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXHJcbi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhpcyBwYWNrYWdlLlxyXG5cclxuaW1wb3J0IHsgaGlwLCBoc2ggfSBmcm9tICdAcmxqc29uL2hhc2gnO1xyXG5pbXBvcnQgeyBJc1JlYWR5IH0gZnJvbSAnQHJsanNvbi9pcy1yZWFkeSc7XHJcbmltcG9ydCB7IGNvcHksIGVxdWFscywgSnNvblZhbHVlIH0gZnJvbSAnQHJsanNvbi9qc29uJztcclxuaW1wb3J0IHtcclxuICBDb250ZW50VHlwZSxcclxuICBpdGVyYXRlVGFibGVzU3luYyxcclxuICBSbGpzb24sXHJcbiAgVGFibGVDZmcsXHJcbiAgVGFibGVLZXksXHJcbiAgVGFibGVUeXBlLFxyXG59IGZyb20gJ0BybGpzb24vcmxqc29uJztcclxuXHJcbmltcG9ydCB7IElvVG9vbHMgfSBmcm9tICcuL2lvLXRvb2xzLnRzJztcclxuaW1wb3J0IHsgSW8gfSBmcm9tICcuL2lvLnRzJztcclxuXHJcbi8qKlxyXG4gKiBJbi1NZW1vcnkgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJsanNvbiBJbyBpbnRlcmZhY2UuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgSW9NZW0gaW1wbGVtZW50cyBJbyB7XHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgLy8gQ29uc3RydWN0b3IgJiBleGFtcGxlXHJcblxyXG4gIGluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9pc09wZW4gPSB0cnVlO1xyXG4gICAgcmV0dXJuIHRoaXMuX2luaXQoKTtcclxuICB9XHJcblxyXG4gIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5faXNPcGVuID0gZmFsc2U7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzT3BlbjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBleGFtcGxlID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgY29uc3QgaW8gPSBuZXcgSW9NZW0oKTtcclxuICAgIGF3YWl0IGlvLmluaXQoKTtcclxuICAgIHJldHVybiBpbztcclxuICB9O1xyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICAvLyBHZW5lcmFsXHJcbiAgaXNSZWFkeSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9pc1JlYWR5LnByb21pc2U7XHJcbiAgfVxyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICAvLyBEdW1wXHJcblxyXG4gIGR1bXAoKTogUHJvbWlzZTxSbGpzb24+IHtcclxuICAgIHJldHVybiB0aGlzLl9kdW1wKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkdW1wVGFibGUocmVxdWVzdDogeyB0YWJsZTogc3RyaW5nIH0pOiBQcm9taXNlPFJsanNvbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2R1bXBUYWJsZShyZXF1ZXN0KTtcclxuICB9XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIC8vIE1ldGEgRGF0YVxyXG5cclxuICBhc3luYyBjb250ZW50VHlwZShyZXF1ZXN0OiB7IHRhYmxlOiBzdHJpbmcgfSk6IFByb21pc2U8Q29udGVudFR5cGU+IHtcclxuICAgIHJldHVybiB0aGlzLl9jb250ZW50VHlwZShyZXF1ZXN0KTtcclxuICB9XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIC8vIFJvd3NcclxuXHJcbiAgcmVhZFJvd3MocmVxdWVzdDoge1xyXG4gICAgdGFibGU6IHN0cmluZztcclxuICAgIHdoZXJlOiB7IFtjb2x1bW46IHN0cmluZ106IEpzb25WYWx1ZSB9O1xyXG4gIH0pOiBQcm9taXNlPFJsanNvbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlYWRSb3dzKHJlcXVlc3QpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcm93Q291bnQodGFibGU6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICBjb25zdCB0YWJsZURhdGEgPSB0aGlzLl9tZW1bdGFibGVdIGFzIFRhYmxlVHlwZTtcclxuICAgIGlmICghdGFibGVEYXRhKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGFibGUgXCIke3RhYmxlfVwiIG5vdCBmb3VuZGApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0YWJsZURhdGEuX2RhdGEubGVuZ3RoKTtcclxuICB9XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIC8vIFdyaXRlXHJcblxyXG4gIHdyaXRlKHJlcXVlc3Q6IHsgZGF0YTogUmxqc29uIH0pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiB0aGlzLl93cml0ZShyZXF1ZXN0KTtcclxuICB9XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIC8vIFRhYmxlIG1hbmFnZW1lbnRcclxuICBhc3luYyB0YWJsZUV4aXN0cyh0YWJsZUtleTogVGFibGVLZXkpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5fbWVtW3RhYmxlS2V5XSBhcyBUYWJsZVR5cGU7XHJcbiAgICByZXR1cm4gdGFibGUgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVPckV4dGVuZFRhYmxlKHJlcXVlc3Q6IHsgdGFibGVDZmc6IFRhYmxlQ2ZnIH0pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVPckV4dGVuZFRhYmxlKHJlcXVlc3QpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmF3VGFibGVDZmdzKCk6IFByb21pc2U8VGFibGVDZmdbXT4ge1xyXG4gICAgY29uc3QgdGFibGVzID0gdGhpcy5fbWVtLnRhYmxlQ2Zncy5fZGF0YSBhcyBUYWJsZUNmZ1tdO1xyXG4gICAgcmV0dXJuIHRhYmxlcztcclxuICB9XHJcblxyXG4gIC8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcclxuICAvLyBQcml2YXRlXHJcbiAgLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xyXG5cclxuICBwcml2YXRlIF9pb1Rvb2xzITogSW9Ub29scztcclxuXHJcbiAgcHJpdmF0ZSBfaXNSZWFkeSA9IG5ldyBJc1JlYWR5KCk7XHJcbiAgcHJpdmF0ZSBfaXNPcGVuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX21lbTogUmxqc29uID0gaGlwKHt9IGFzIFJsanNvbik7XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIHByaXZhdGUgYXN5bmMgX2luaXQoKSB7XHJcbiAgICB0aGlzLl9pb1Rvb2xzID0gbmV3IElvVG9vbHModGhpcyk7XHJcbiAgICB0aGlzLl9pbml0VGFibGVDZmdzKCk7XHJcbiAgICB0aGlzLl91cGRhdGVHbG9iYWxIYXNoKCk7XHJcbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLmluaXRSZXZpc2lvbnNUYWJsZSgpO1xyXG4gICAgaHNoKHRoaXMuX21lbSk7XHJcblxyXG4gICAgdGhpcy5faXNSZWFkeS5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICBwcml2YXRlIF9pbml0VGFibGVDZmdzID0gKCkgPT4ge1xyXG4gICAgY29uc3QgdGFibGVDZmcgPSBJb1Rvb2xzLnRhYmxlQ2Znc1RhYmxlQ2ZnO1xyXG5cclxuICAgIHRoaXMuX21lbS50YWJsZUNmZ3MgPSBoaXAoe1xyXG4gICAgICBfdHlwZTogJ3RhYmxlQ2ZncycsXHJcbiAgICAgIF9kYXRhOiBbdGFibGVDZmddLFxyXG4gICAgICBfdGFibGVDZmc6IHRhYmxlQ2ZnLl9oYXNoIGFzIHN0cmluZyxcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIHByaXZhdGUgX3VwZGF0ZUdsb2JhbEhhc2goKSB7XHJcbiAgICAodGhpcy5fbWVtIGFzIGFueSkuX2hhc2ggPSAnJztcclxuICAgIGhpcCh0aGlzLl9tZW0sIHtcclxuICAgICAgdXBkYXRlRXhpc3RpbmdIYXNoZXM6IGZhbHNlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICBwcml2YXRlIF91cGRhdGVUYWJsZUhhc2godGFibGVLZXk6IFRhYmxlS2V5KSB7XHJcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuX21lbVt0YWJsZUtleV0gYXMgVGFibGVUeXBlO1xyXG4gICAgdGFibGUuX2hhc2ggPSAnJztcclxuICAgIGhpcCh0YWJsZSwgeyB1cGRhdGVFeGlzdGluZ0hhc2hlczogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICBwcml2YXRlIGFzeW5jIF9jcmVhdGVPckV4dGVuZFRhYmxlKHJlcXVlc3Q6IHtcclxuICAgIHRhYmxlQ2ZnOiBUYWJsZUNmZztcclxuICB9KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgdGFibGUgY29uZmlnIGlzIGNvbXBhdGlibGVcclxuICAgIC8vIHdpdGggYW4gcG90ZW50aWFsIGV4aXN0aW5nIHRhYmxlXHJcbiAgICBjb25zdCB0YWJsZUNmZyA9IHJlcXVlc3QudGFibGVDZmc7XHJcbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRocm93V2hlblRhYmxlSXNOb3RDb21wYXRpYmxlKHRhYmxlQ2ZnKTtcclxuXHJcbiAgICBjb25zdCB7IGtleSB9ID0gdGFibGVDZmc7XHJcblxyXG4gICAgLy8gUmVjcmVhdGUgaGFzaGVzIGluIHRoZSBjYXNlIHRoZSBleGlzdGluZyBoYXNoZXMgYXJlIHdyb25nXHJcbiAgICBjb25zdCBuZXdDb25maWcgPSBoc2godGFibGVDZmcpO1xyXG5cclxuICAgIC8vIEZpbmQgYW4gZXhpc3RpbmcgdGFibGUgY29uZmlnIHdpdGggdGhlIHNhbWUgaGFzaFxyXG4gICAgY29uc3QgZXhpc3RpbmdDb25maWcgPSBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRhYmxlQ2ZnT3JOdWxsKGtleSk7XHJcblxyXG4gICAgLy8gV3JpdGUgdGhlIG5ldyBjb25maWcgaW50byB0aGUgZGF0YWJhc2VcclxuICAgIGlmICghZXhpc3RpbmdDb25maWcpIHtcclxuICAgICAgdGhpcy5fY3JlYXRlVGFibGUobmV3Q29uZmlnLCBrZXkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fZXh0ZW5kVGFibGUoZXhpc3RpbmdDb25maWcsIG5ld0NvbmZpZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICBwcml2YXRlIF9jcmVhdGVUYWJsZShuZXdDb25maWc6IFRhYmxlQ2ZnLCB0YWJsZUtleTogVGFibGVLZXkpIHtcclxuICAgIC8vIFdyaXRlIHRoZSB0YWJsZSBjb25maWcgaW50byB0aGUgZGF0YWJhc2VcclxuICAgIG5ld0NvbmZpZyA9IGhzaChuZXdDb25maWcpO1xyXG4gICAgdGhpcy5fbWVtLnRhYmxlQ2Zncy5fZGF0YS5wdXNoKG5ld0NvbmZpZyk7XHJcbiAgICB0aGlzLl9pb1Rvb2xzLnNvcnRUYWJsZURhdGFBbmRVcGRhdGVIYXNoKHRoaXMuX21lbS50YWJsZUNmZ3MpO1xyXG5cclxuICAgIC8vIENyZWF0ZSBhIHRhYmxlIGFuZCB3cml0ZSBpdCBpbnRvIHRoZSBkYXRhYmFzZVxyXG4gICAgY29uc3QgdGFibGU6IFRhYmxlVHlwZSA9IHtcclxuICAgICAgX3R5cGU6IG5ld0NvbmZpZy50eXBlLFxyXG4gICAgICBfZGF0YTogW10sXHJcbiAgICAgIF90YWJsZUNmZzogbmV3Q29uZmlnLl9oYXNoIGFzIHN0cmluZyxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5fbWVtW3RhYmxlS2V5XSA/Pz0gaGlwKHRhYmxlKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgaGFzaGVzXHJcbiAgICB0aGlzLl91cGRhdGVUYWJsZUhhc2godGFibGVLZXkpO1xyXG4gICAgdGhpcy5fdXBkYXRlR2xvYmFsSGFzaCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgcHJpdmF0ZSBfZXh0ZW5kVGFibGUoZXhpc3RpbmdDb25maWc6IFRhYmxlQ2ZnLCBuZXdDb25maWc6IFRhYmxlQ2ZnKSB7XHJcbiAgICAvLyBObyBjb2x1bW5zIGFkZGVkPyBSZXR1cm4uXHJcbiAgICBpZiAoZXhpc3RpbmdDb25maWcuY29sdW1ucy5sZW5ndGggPT09IG5ld0NvbmZpZy5jb2x1bW5zLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gV3JpdGUgdGhlIG5ldyB0YWJsZSBjb25maWcgaW50byB0aGUgZGF0YWJhc2VcclxuICAgIG5ld0NvbmZpZyA9IGhzaChuZXdDb25maWcpO1xyXG4gICAgdGhpcy5fbWVtLnRhYmxlQ2Zncy5fZGF0YS5wdXNoKG5ld0NvbmZpZyk7XHJcbiAgICB0aGlzLl9pb1Rvb2xzLnNvcnRUYWJsZURhdGFBbmRVcGRhdGVIYXNoKHRoaXMuX21lbS50YWJsZUNmZ3MpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgY29uZmlnIG9mIHRoZSBleGlzdGluZyB0YWJsZVxyXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLl9tZW1bbmV3Q29uZmlnLmtleV0gYXMgVGFibGVUeXBlO1xyXG4gICAgdGFibGUuX3RhYmxlQ2ZnID0gbmV3Q29uZmlnLl9oYXNoIGFzIHN0cmluZztcclxuXHJcbiAgICAvLyBVcGRhdGUgdGhlIGhhc2hlc1xyXG4gICAgdGhpcy5fdXBkYXRlVGFibGVIYXNoKG5ld0NvbmZpZy5rZXkpO1xyXG4gICAgdGhpcy5fdXBkYXRlR2xvYmFsSGFzaCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2R1bXAoKTogUHJvbWlzZTxSbGpzb24+IHtcclxuICAgIHJldHVybiBjb3B5KHRoaXMuX21lbSk7XHJcbiAgfVxyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICBwcml2YXRlIGFzeW5jIF9kdW1wVGFibGUocmVxdWVzdDogeyB0YWJsZTogc3RyaW5nIH0pOiBQcm9taXNlPFJsanNvbj4ge1xyXG4gICAgYXdhaXQgdGhpcy5faW9Ub29scy50aHJvd1doZW5UYWJsZURvZXNOb3RFeGlzdChyZXF1ZXN0LnRhYmxlKTtcclxuXHJcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuX21lbVtyZXF1ZXN0LnRhYmxlXSBhcyBUYWJsZVR5cGU7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgW3JlcXVlc3QudGFibGVdOiBjb3B5KHRhYmxlKSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICBwcml2YXRlIGFzeW5jIF9jb250ZW50VHlwZShyZXF1ZXN0OiB7IHRhYmxlOiBzdHJpbmcgfSk6IFByb21pc2U8Q29udGVudFR5cGU+IHtcclxuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVEb2VzTm90RXhpc3QocmVxdWVzdC50YWJsZSk7XHJcblxyXG4gICAgcmV0dXJuICh0aGlzLl9tZW1bcmVxdWVzdC50YWJsZV0gYXMgVGFibGVUeXBlKS5fdHlwZTtcclxuICB9XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIHByaXZhdGUgYXN5bmMgX3dyaXRlKHJlcXVlc3Q6IHsgZGF0YTogUmxqc29uIH0pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGFkZGVkRGF0YSA9IGhzaChyZXF1ZXN0LmRhdGEpO1xyXG4gICAgdGhpcy5fcmVtb3ZlTnVsbFZhbHVlcyhhZGRlZERhdGEpO1xyXG4gICAgY29uc3QgdGFibGVzID0gT2JqZWN0LmtleXMoYWRkZWREYXRhKTtcclxuICAgIGhzaChhZGRlZERhdGEpO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVzRG9Ob3RFeGlzdChyZXF1ZXN0LmRhdGEpO1xyXG4gICAgYXdhaXQgdGhpcy5faW9Ub29scy50aHJvd1doZW5UYWJsZURhdGFEb2VzTm90TWF0Y2hDZmcocmVxdWVzdC5kYXRhKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHRhYmxlIG9mIHRhYmxlcykge1xyXG4gICAgICBpZiAodGFibGUuc3RhcnRzV2l0aCgnXycpKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IG9sZFRhYmxlID0gdGhpcy5fbWVtW3RhYmxlXSBhcyBUYWJsZVR5cGU7XHJcbiAgICAgIGNvbnN0IG5ld1RhYmxlID0gYWRkZWREYXRhW3RhYmxlXSBhcyBUYWJsZVR5cGU7XHJcblxyXG4gICAgICAvLyBUYWJsZSBleGlzdHMuIE1lcmdlIGRhdGFcclxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG5ld1RhYmxlLl9kYXRhKSB7XHJcbiAgICAgICAgY29uc3QgaGFzaCA9IGl0ZW0uX2hhc2g7XHJcbiAgICAgICAgY29uc3QgZXhpc3RzID0gb2xkVGFibGUuX2RhdGEuZmluZCgoaSkgPT4gaS5faGFzaCA9PT0gaGFzaCk7XHJcbiAgICAgICAgaWYgKCFleGlzdHMpIHtcclxuICAgICAgICAgIG9sZFRhYmxlLl9kYXRhLnB1c2goaXRlbSBhcyBhbnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5faW9Ub29scy5zb3J0VGFibGVEYXRhQW5kVXBkYXRlSGFzaChvbGRUYWJsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVjYWxjIG1haW4gaGFzaGVzXHJcbiAgICB0aGlzLl91cGRhdGVHbG9iYWxIYXNoKCk7XHJcbiAgfVxyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICBwcml2YXRlIGFzeW5jIF9yZWFkUm93cyhyZXF1ZXN0OiB7XHJcbiAgICB0YWJsZTogc3RyaW5nO1xyXG4gICAgd2hlcmU6IHsgW2NvbHVtbjogc3RyaW5nXTogSnNvblZhbHVlIH07XHJcbiAgfSk6IFByb21pc2U8Umxqc29uPiB7XHJcbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRocm93V2hlblRhYmxlRG9lc05vdEV4aXN0KHJlcXVlc3QudGFibGUpO1xyXG4gICAgYXdhaXQgdGhpcy5faW9Ub29scy50aHJvd1doZW5Db2x1bW5Eb2VzTm90RXhpc3QoXHJcbiAgICAgIHJlcXVlc3QudGFibGUsXHJcbiAgICAgIE9iamVjdC5rZXlzKHJlcXVlc3Qud2hlcmUpLFxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBSZWFkIHRhYmxlIGZyb20gZGF0YVxyXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLl9tZW1bcmVxdWVzdC50YWJsZV0gYXMgVGFibGVUeXBlO1xyXG5cclxuICAgIC8vIEZpbHRlciB0YWJsZSBkYXRhXHJcbiAgICBjb25zdCB0YWJsZURhdGFGaWx0ZXJlZCA9IHRhYmxlLl9kYXRhLmZpbHRlcigocm93KSA9PiB7XHJcbiAgICAgIGZvciAoY29uc3QgY29sdW1uIGluIHJlcXVlc3Qud2hlcmUpIHtcclxuICAgICAgICBjb25zdCBhID0gcm93W2NvbHVtbl07XHJcbiAgICAgICAgY29uc3QgYiA9IHJlcXVlc3Qud2hlcmVbY29sdW1uXTtcclxuICAgICAgICBpZiAoYiA9PT0gbnVsbCAmJiBhID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFlcXVhbHMoYSwgYikpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDcmVhdGUgYW4gdGFibGVcclxuICAgIGNvbnN0IHRhYmxlRmlsdGVyZWQ6IFRhYmxlVHlwZSA9IHtcclxuICAgICAgX3R5cGU6IHRhYmxlLl90eXBlLFxyXG4gICAgICBfZGF0YTogdGFibGVEYXRhRmlsdGVyZWQsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuX2lvVG9vbHMuc29ydFRhYmxlRGF0YUFuZFVwZGF0ZUhhc2godGFibGVGaWx0ZXJlZCk7XHJcblxyXG4gICAgY29uc3QgcmVzdWx0OiBSbGpzb24gPSB7XHJcbiAgICAgIFtyZXF1ZXN0LnRhYmxlXTogdGFibGVGaWx0ZXJlZCxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIF9yZW1vdmVOdWxsVmFsdWVzKHJsanNvbjogUmxqc29uKSB7XHJcbiAgICBpdGVyYXRlVGFibGVzU3luYyhybGpzb24sICh0YWJsZSkgPT4ge1xyXG4gICAgICBjb25zdCBkYXRhID0gcmxqc29uW3RhYmxlXS5fZGF0YTtcclxuXHJcbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIGRhdGEpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiByb3cpIHtcclxuICAgICAgICAgIGlmIChyb3dba2V5XSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWxldGUgcm93W2tleV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiLy8gQGxpY2Vuc2VcclxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxyXG4vL1xyXG4vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0ZXJtcyB0aGF0IGNhbiBiZVxyXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cclxuXHJcbmltcG9ydCB7IElvLCBJb01lbSB9IGZyb20gJy4vaW5kZXgudHMnO1xyXG5cclxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuLyoqXHJcbiAqIElvIGltcGxlbWVudGF0aW9uIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlIHRvIGJlIHVzZWQgaW5cclxuICogY29uZm9ybWFuY2UgdGVzdHMuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElvVGVzdFNldHVwIHtcclxuICAvKiogc2V0dXAgYmVmb3JlIHRoZSBzaW5nbGUgc2V0dXBzICovXHJcbiAgYmVmb3JlQWxsOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplcyB0aGUgaW8gaW1wbGVtZW50YXRpb24uXHJcbiAgICogQHJldHVybnMgVGhlIGlvIGltcGxlbWVudGF0aW9uLlxyXG4gICAqL1xyXG4gIGJlZm9yZUVhY2g6ICgpID0+IFByb21pc2U8dm9pZD47XHJcblxyXG4gIC8qKlxyXG4gICAqIFRlYXJzIGRvd24gdGhlIGlvIGltcGxlbWVudGF0aW9uLlxyXG4gICAqIEByZXR1cm5zIFRoZSBpbyBpbXBsZW1lbnRhdGlvbi5cclxuICAgKi9cclxuICBhZnRlckVhY2g6ICgpID0+IFByb21pc2U8dm9pZD47XHJcblxyXG4gIC8qKiBjbGVhbnVwIGFmdGVyIGFsbCB0ZXN0cyAqL1xyXG4gIGFmdGVyQWxsOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgaW8gaW1wbGVtZW50YXRpb24gdG8gYmUgdXNlZCBpbiB0aGUgY29uZm9ybWFuY2UgdGVzdHMuXHJcbiAgICovXHJcbiAgaW86IElvO1xyXG59XHJcblxyXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4vLyBFeGFtcGxlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBJb1Rlc3RTZXR1cCBpbnRlcmZhY2VcclxuZXhwb3J0IGNvbnN0IGV4YW1wbGVUZXN0U2V0dXAgPSAoKTogSW9UZXN0U2V0dXAgPT4ge1xyXG4gIHJldHVybiB7XHJcbiAgICBpbzogbmV3IElvTWVtKCksXHJcbiAgICBiZWZvcmVBbGw6IGFzeW5jICgpID0+IHtcclxuICAgICAgLy8gVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgZm9yIGFueSBhZGRpdGlvbmFsIHNldHVwIHJlcXVpcmVkIGJlZm9yZSBpbml0LlxyXG4gICAgICAvLyBDdXJyZW50bHksIGl0IGRvZXMgbm90aGluZy5cclxuICAgIH0sXHJcblxyXG4gICAgYmVmb3JlRWFjaDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAvLyBJbml0aWFsaXplIHRoZSBpbyBpbXBsZW1lbnRhdGlvblxyXG4gICAgfSxcclxuICAgIGFmdGVyRWFjaDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAvLyBUZWFyIGRvd24gdGhlIGlvIGltcGxlbWVudGF0aW9uXHJcbiAgICB9LFxyXG5cclxuICAgIGFmdGVyQWxsOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgIC8vIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIGZvciBhbnkgYWRkaXRpb25hbCBjbGVhbnVwIGFmdGVyIHRlYXJEb3duLlxyXG4gICAgfSxcclxuICB9O1xyXG59O1xyXG4iLCIvLyBAbGljZW5zZVxyXG4vLyBDb3B5cmlnaHQgKGMpIDIwMjUgUmxqc29uXHJcbi8vXHJcbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXHJcbi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhpcyBwYWNrYWdlLlxyXG5cclxuaW1wb3J0IHsgSnNvblZhbHVlIH0gZnJvbSAnQHJsanNvbi9qc29uJztcclxuaW1wb3J0IHsgQ29udGVudFR5cGUsIFJsanNvbiwgVGFibGVDZmcsIFRhYmxlS2V5IH0gZnJvbSAnQHJsanNvbi9ybGpzb24nO1xyXG5cclxuXHJcbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW8ge1xyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIC8vIEdlbmVyYWxcclxuXHJcbiAgLyoqIFN0YXJ0cyB0aGUgaW5pdGlhbGl6YXRpb24gKi9cclxuICBpbml0KCk6IFByb21pc2U8dm9pZD47XHJcblxyXG4gIC8qKiBDbG9zZXMgdGhlIGlvICovXHJcbiAgY2xvc2UoKTogUHJvbWlzZTx2b2lkPjtcclxuXHJcbiAgLyoqIFJldHVybnMgdHJ1ZSBpZiBpbyBpcyBvcGVuZWQgKi9cclxuICBpc09wZW46IGJvb2xlYW47XHJcblxyXG4gIC8qKiBBIHByb21pc2UgcmVzb2x2aW5nIG9uY2UgdGhlIElvIGludGVyZmFjZSBpcyByZWFkeVxyXG4gICAqXHJcbiAgICog8J+SoSBVc2UgQHJsanNvbi9pcy1yZWFkeVxyXG4gICAqL1xyXG4gIGlzUmVhZHkoKTogUHJvbWlzZTx2b2lkPjtcclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgLy8gRHVtcFxyXG5cclxuICAvKiogUmV0dXJucyB0aGUgY29tcGxldGUgZGIgY29udGVudCBhcyBSbGpzb24gKi9cclxuICBkdW1wKCk6IFByb21pc2U8Umxqc29uPjtcclxuXHJcbiAgLyoqIFJldHVybnMgdGhlIGR1bXAgb2YgYSBjb21wbGV0ZSB0YWJsZSAqL1xyXG4gIGR1bXBUYWJsZShyZXF1ZXN0OiB7IHRhYmxlOiBzdHJpbmcgfSk6IFByb21pc2U8Umxqc29uPjtcclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgLy8gTWV0YSBEYXRhXHJcbiAgY29udGVudFR5cGUocmVxdWVzdDogeyB0YWJsZTogc3RyaW5nIH0pOiBQcm9taXNlPENvbnRlbnRUeXBlPjtcclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgLy8gVGFibGVzXHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGFibGUgZXhpc3RzXHJcbiAgICovXHJcbiAgdGFibGVFeGlzdHModGFibGVLZXk6IFRhYmxlS2V5KTogUHJvbWlzZTxib29sZWFuPjtcclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIHRhYmxlIHdpdGggYSBnaXZlbiBjb25maWcuXHJcbiAgICogSWYgdGhlIHRhYmxlIGFscmVhZHkgZXhpc3RzLCBuZXcgY29sdW1ucyBhcmUgYWRkZWQgdG8gdGhlIGV4aXN0aW5nIHRhYmxlLlxyXG4gICAqIElmIHRoZSB0YWJsZSBkb2VzIG5vdCBleGlzdCwgaXQgaXMgY3JlYXRlZCB3aXRoIHRoZSBnaXZlbiBjb25maWcuXHJcbiAgICogSWYgdGhlIHRhYmxlIGV4aXN0cyBhbmQgY29sdW1ucyBhcmUgcmVtb3ZlZCwgYW4gZXJyb3IgaXMgdGhyb3duLlxyXG4gICAqIElmIHRoZSB0YWJsZSBleGlzdHMgYW5kIHRoZSBjb2x1bW4gdHlwZSBpcyBjaGFuZ2VkLCBhbiBlcnJvciBpcyB0aHJvd24uXHJcbiAgICovXHJcbiAgY3JlYXRlT3JFeHRlbmRUYWJsZShyZXF1ZXN0OiB7IHRhYmxlQ2ZnOiBUYWJsZUNmZyB9KTogUHJvbWlzZTx2b2lkPjtcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBhIGpzb24gc3RydWN0dXJlIHJldHVybmluZyBjdXJyZW50IHRhYmxlIGNvbmZpZ3VyYXRpb25zXHJcbiAgICovXHJcbiAgcmF3VGFibGVDZmdzKCk6IFByb21pc2U8VGFibGVDZmdbXT47XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIC8vIFdyaXRlXHJcblxyXG4gIC8qKiBXcml0ZXMgUmxqc29uIGRhdGEgaW50byB0aGUgZGF0YWJhc2UgKi9cclxuICB3cml0ZShyZXF1ZXN0OiB7IGRhdGE6IFJsanNvbiB9KTogUHJvbWlzZTx2b2lkPjtcclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgLy8gUmVhZCByb3dzXHJcblxyXG4gIC8qKiBRdWVyaWVzIGEgbGlzdCBvZiByb3dzICovXHJcbiAgcmVhZFJvd3MocmVxdWVzdDoge1xyXG4gICAgdGFibGU6IHN0cmluZztcclxuICAgIHdoZXJlOiB7IFtjb2x1bW46IHN0cmluZ106IEpzb25WYWx1ZSB8IG51bGwgfTtcclxuICB9KTogUHJvbWlzZTxSbGpzb24+O1xyXG5cclxuICAvKiogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIGdpdmVuIHRhYmxlICovXHJcbiAgcm93Q291bnQodGFibGU6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPjtcclxufVxyXG5cclxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuZXhwb3J0IGNvbnN0IGV4YW1wbGVJbyA9XHJcbiAgJ0NoZWNrb3V0IEBybGpzb24vaW8tbWVtIGZvciBhbiBleGFtcGxlIGltcGxlbWVudGF0aW9uJztcclxuIiwiLyogdjggaWdub3JlIGZpbGUgLS0gQHByZXNlcnZlICovXHJcbi8vIEBsaWNlbnNlXHJcbi8vIENvcHlyaWdodCAoYykgMjAyNSBSbGpzb25cclxuLy9cclxuLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGVybXMgdGhhdCBjYW4gYmVcclxuLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGlzIHBhY2thZ2UuXHJcblxyXG5pbXBvcnQgeyBKc29uIH0gZnJvbSAnQHJsanNvbi9qc29uJztcclxuaW1wb3J0IHtcclxuICBCdWZmZXQsXHJcbiAgQ2FrZSxcclxuICBpdGVyYXRlVGFibGVzU3luYyxcclxuICBMYXllcixcclxuICBSZWYsXHJcbiAgUmxqc29uLFxyXG4gIFRhYmxlS2V5LFxyXG59IGZyb20gJ0BybGpzb24vcmxqc29uJztcclxuXHJcbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbi8qKlxyXG4gKiBEZXNjcmliZXMgYSByb3cgdGhhdCByZWZlcmVuY2VzIGEgY2hpbGQgdGFibGUgcm93XHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFBhcmVudFJlZiB7XHJcbiAgLyoqXHJcbiAgICogVGhlIHBhcmVudCB0YWJsZSB0aGF0IHJlZmVyZW5jZXMgdGhlIGNoaWxkIHRhYmxlXHJcbiAgICovXHJcbiAgW3BhcmVudFRhYmxlOiBUYWJsZUtleV06IHtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHBhcmVudCByb3cgdGhhdCByZWZlcmVuY2VzIHRoZSBjaGlsZCByb3dcclxuICAgICAqL1xyXG4gICAgW3BhcmVudFJvdzogUmVmXToge1xyXG4gICAgICAvKipcclxuICAgICAgICogRGV0YWlscyBhYm91dCB0aGUgcmVmZXJlbmNlLCBlLmcuIGFuIGFycmF5IGluZGV4IGV0Yy5cclxuICAgICAgICovXHJcbiAgICAgIGRldGFpbHM/OiBKc29uO1xyXG4gICAgfTtcclxuICB9O1xyXG59XHJcblxyXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4vKipcclxuICogRGVzY3JpYmVzIHRoZSBwYXJlbnQgdGFibGUgcm93cyByZWZlcmVuY2luZyBhIGNoaWxkIHRhYmxlIHJvd1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBSZXZlcnNlUmVmcyB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGNoaWxkIHRhYmxlIHdlIG5lZWQgdGhlIHJlZmVyZW5jaW5nIHJvd3MgZm9yXHJcbiAgICovXHJcbiAgW2NoaWxkVGFibGU6IFRhYmxlS2V5XToge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcm93IGhhc2h3ZSBuZWVkIHRoZSByZWZlcmVuY2luZyByb3dzIGZvclxyXG4gICAgICovXHJcbiAgICBbY2hpbGRSb3c6IFJlZl06IFBhcmVudFJlZjtcclxuICB9O1xyXG59XHJcblxyXG4vKiB2OCBpZ25vcmUgc3RhcnQgKi9cclxuXHJcbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSByZXZlcnNlIHJlZmVyZW5jZXMgZm9yIGEgZ2l2ZW4gcmxqc29uIG9iamVjdFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNhbGNSZXZlcnNlUmVmcyA9IChybGpzb246IFJsanNvbik6IFJldmVyc2VSZWZzID0+IHtcclxuICBjb25zdCByZXN1bHQ6IFJldmVyc2VSZWZzID0ge307XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICAvLyBQcmVwYXJlIGRhdGEgc3RydWN0dXJlXHJcbiAgaXRlcmF0ZVRhYmxlc1N5bmMocmxqc29uLCAoY2hpbGRUYWJsZUtleSwgdGFibGUpID0+IHtcclxuICAgIGNvbnN0IGNoaWxkVGFibGU6IHsgW2NoaWxkUm93SGFzaDogc3RyaW5nXTogUGFyZW50UmVmIH0gPSB7fTtcclxuICAgIHJlc3VsdFtjaGlsZFRhYmxlS2V5XSA9IGNoaWxkVGFibGU7XHJcbiAgICBmb3IgKGNvbnN0IGNoaWxkUm93IG9mIHRhYmxlLl9kYXRhKSB7XHJcbiAgICAgIGNoaWxkVGFibGVbY2hpbGRSb3cuX2hhc2hdID0ge307XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICAvLyBHZW5lcmF0ZSByZXZlcnNlIHJlZmVyZW5jZXNcclxuICBpdGVyYXRlVGFibGVzU3luYyhybGpzb24sIChwYXJlbnRUYWJsZUtleSwgcGFyZW50VGFibGUpID0+IHtcclxuICAgIC8vIEl0ZXJhdGUgYWxsIHJvd3Mgb2YgZWFjaCB0YWJsZVxyXG4gICAgZm9yIChjb25zdCBwYXJlbnRUYWJsZVJvdyBvZiBwYXJlbnRUYWJsZS5fZGF0YSkge1xyXG4gICAgICAvLyBGaW5kIG91dCB3aGUgb3RoZXIgdGFibGVzICYgcm93cyBhcmUgcmVmZXJlbmNlZCBieSB0aGlzIHJvd1xyXG4gICAgICAvLyBXcml0ZSB0aGVzZSBpbmZvcm1hdGlvbiBpbnR0byByZXN1bHRcclxuICAgICAgc3dpdGNoIChwYXJlbnRUYWJsZS5fdHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ2NvbXBvbmVudHMnOlxyXG4gICAgICAgICAgX3dyaXRlQ29tcG9uZW50UmVmcyhwYXJlbnRUYWJsZUtleSwgcGFyZW50VGFibGVSb3csIHJlc3VsdCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnbGF5ZXJzJzoge1xyXG4gICAgICAgICAgX3dyaXRlTGF5ZXJSZWZzKHBhcmVudFRhYmxlS2V5LCBwYXJlbnRUYWJsZVJvdywgcmVzdWx0KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2FzZSAnc2xpY2VJZHMnOiB7XHJcbiAgICAgICAgICAvLyBTbGljZSBpZHMgZG8gbm90IHJlZmVyZW5jZSBvdGhlciB0YWJsZXNcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2FzZSAnY2FrZXMnOiB7XHJcbiAgICAgICAgICBfd3JpdGVDYWtlUmVmcyhwYXJlbnRUYWJsZUtleSwgcGFyZW50VGFibGVSb3csIHJlc3VsdCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNhc2UgJ2J1ZmZldHMnOiB7XHJcbiAgICAgICAgICBfd3JpdGVCdWZmZXRSZWZzKHBhcmVudFRhYmxlS2V5LCBwYXJlbnRUYWJsZVJvdywgcmVzdWx0KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gcmVzdWx0O1xyXG59O1xyXG5cclxuLyogdjggaWdub3JlIGVuZCAqL1xyXG5cclxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuY29uc3QgX3dyaXRlQ29tcG9uZW50UmVmcyA9IChcclxuICBwYXJlbnRUYWJsZU5hbWU6IFRhYmxlS2V5LFxyXG4gIHBhcmVudFJvdzogSnNvbixcclxuICByZXN1bHQ6IFJldmVyc2VSZWZzLFxyXG4pID0+IHtcclxuICBjb25zdCBwYXJlbnRSb3dIYXNoID0gcGFyZW50Um93Ll9oYXNoIGFzIHN0cmluZztcclxuXHJcbiAgZm9yIChjb25zdCBwYXJlbnRDb2x1bW5OYW1lIGluIHBhcmVudFJvdykge1xyXG4gICAgaWYgKHBhcmVudENvbHVtbk5hbWUuc3RhcnRzV2l0aCgnXycpKSB7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghcGFyZW50Q29sdW1uTmFtZS5lbmRzV2l0aCgnUmVmJykpIHtcclxuICAgICAgY29udGludWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY2hpbGRUYWJsZU5hbWUgPSBwYXJlbnRDb2x1bW5OYW1lLnNsaWNlKDAsIC0zKTtcclxuICAgIGNvbnN0IGNoaWxkUm93SGFzaCA9IHBhcmVudFJvd1twYXJlbnRDb2x1bW5OYW1lXSBhcyBzdHJpbmc7XHJcblxyXG4gICAgX3dyaXRlKFxyXG4gICAgICByZXN1bHQsXHJcbiAgICAgIGNoaWxkVGFibGVOYW1lLFxyXG4gICAgICBjaGlsZFJvd0hhc2gsXHJcbiAgICAgIHBhcmVudFRhYmxlTmFtZSxcclxuICAgICAgcGFyZW50Um93SGFzaCxcclxuICAgICk7XHJcbiAgfVxyXG59O1xyXG5cclxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuY29uc3QgX3dyaXRlTGF5ZXJSZWZzID0gKFxyXG4gIHBhcmVudFRhYmxlTmFtZTogVGFibGVLZXksXHJcbiAgcGFyZW50Um93OiBMYXllcixcclxuICByZXN1bHQ6IFJldmVyc2VSZWZzLFxyXG4pID0+IHtcclxuICBjb25zdCBjaGlsZFRhYmxlTmFtZSA9IHBhcmVudFJvdy5jb21wb25lbnRzVGFibGU7XHJcbiAgY29uc3QgcGFyZW50Um93SGFzaCA9IHBhcmVudFJvdy5faGFzaCBhcyBzdHJpbmc7XHJcblxyXG4gIGZvciAoY29uc3Qgc2xpY2VJZCBpbiBwYXJlbnRSb3cuYWRkKSB7XHJcbiAgICBpZiAoc2xpY2VJZC5zdGFydHNXaXRoKCdfJykpIHtcclxuICAgICAgY29udGludWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2xpY2VIYXNoID0gcGFyZW50Um93LmFkZFtzbGljZUlkXSBhcyBzdHJpbmc7XHJcblxyXG4gICAgX3dyaXRlKHJlc3VsdCwgY2hpbGRUYWJsZU5hbWUsIHNsaWNlSGFzaCwgcGFyZW50VGFibGVOYW1lLCBwYXJlbnRSb3dIYXNoKTtcclxuICB9XHJcbn07XHJcblxyXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG5jb25zdCBfd3JpdGVDYWtlUmVmcyA9IChcclxuICBwYXJlbnRUYWJsZU5hbWU6IFRhYmxlS2V5LFxyXG4gIHBhcmVudFJvdzogQ2FrZSxcclxuICByZXN1bHQ6IFJldmVyc2VSZWZzLFxyXG4pID0+IHtcclxuICBjb25zdCBwYXJlbnRSb3dIYXNoID0gcGFyZW50Um93Ll9oYXNoIGFzIHN0cmluZztcclxuXHJcbiAgZm9yIChjb25zdCBsYXllciBpbiBwYXJlbnRSb3cubGF5ZXJzKSB7XHJcbiAgICBjb25zdCBjaGlsZFRhYmxlTmFtZSA9IGxheWVyO1xyXG4gICAgY29uc3QgY2hpbGRSb3dIYXNoID0gcGFyZW50Um93LmxheWVyc1tsYXllcl0gYXMgc3RyaW5nO1xyXG4gICAgX3dyaXRlKFxyXG4gICAgICByZXN1bHQsXHJcbiAgICAgIGNoaWxkVGFibGVOYW1lLFxyXG4gICAgICBjaGlsZFJvd0hhc2gsXHJcbiAgICAgIHBhcmVudFRhYmxlTmFtZSxcclxuICAgICAgcGFyZW50Um93SGFzaCxcclxuICAgICk7XHJcbiAgfVxyXG59O1xyXG5cclxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuY29uc3QgX3dyaXRlQnVmZmV0UmVmcyA9IChcclxuICBwYXJlbnRUYWJsZU5hbWU6IFRhYmxlS2V5LFxyXG4gIHBhcmVudFJvdzogQnVmZmV0LFxyXG4gIHJlc3VsdDogUmV2ZXJzZVJlZnMsXHJcbikgPT4ge1xyXG4gIGNvbnN0IHBhcmVudFJvd0hhc2ggPSBwYXJlbnRSb3cuX2hhc2ggYXMgc3RyaW5nO1xyXG5cclxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgcGFyZW50Um93Lml0ZW1zKSB7XHJcbiAgICBjb25zdCBjaGlsZFRhYmxlTmFtZSA9IGl0ZW0udGFibGU7XHJcbiAgICBjb25zdCBjaGlsZFJvd0hhc2ggPSBpdGVtLnJlZjtcclxuICAgIF93cml0ZShcclxuICAgICAgcmVzdWx0LFxyXG4gICAgICBjaGlsZFRhYmxlTmFtZSxcclxuICAgICAgY2hpbGRSb3dIYXNoLFxyXG4gICAgICBwYXJlbnRUYWJsZU5hbWUsXHJcbiAgICAgIHBhcmVudFJvd0hhc2gsXHJcbiAgICApO1xyXG4gIH1cclxufTtcclxuXHJcbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbmNvbnN0IF93cml0ZSA9IChcclxuICByZXN1bHQ6IFJldmVyc2VSZWZzLFxyXG4gIGNoaWxkVGFibGVOYW1lOiBzdHJpbmcsXHJcbiAgY2hpbGRSb3dIYXNoOiBzdHJpbmcsXHJcbiAgcGFyZW50VGFibGVOYW1lOiBzdHJpbmcsXHJcbiAgcGFyZW50Um93SGFzaDogc3RyaW5nLFxyXG4pID0+IHtcclxuICBjb25zdCByZWZlcmVuY2VzRm9yQ2hpbGRUYWJsZSA9IChyZXN1bHRbY2hpbGRUYWJsZU5hbWVdID8/PSB7fSk7XHJcbiAgY29uc3QgcmVmZXJlbmNlc0ZvckNoaWxkVGFibGVSb3cgPSAocmVmZXJlbmNlc0ZvckNoaWxkVGFibGVbY2hpbGRSb3dIYXNoXSA/Pz1cclxuICAgIHt9KTtcclxuXHJcbiAgcmVmZXJlbmNlc0ZvckNoaWxkVGFibGVSb3dbcGFyZW50VGFibGVOYW1lXSA/Pz0ge307XHJcbiAgcmVmZXJlbmNlc0ZvckNoaWxkVGFibGVSb3dbcGFyZW50VGFibGVOYW1lXVtwYXJlbnRSb3dIYXNoXSA/Pz0ge307XHJcbn07XHJcbiJdLCJuYW1lcyI6WyJlIl0sIm1hcHBpbmdzIjoiOzs7O0FBTU8sTUFBTSxnQkFBZ0I7QUFBQTtBQUFBLEVBRXBCLGlCQUF5QjtBQUFBLEVBQ3pCLFdBQW1CO0FBQUE7QUFBQSxFQUduQixhQUF3QztBQUFBLElBQzdDLE1BQU07QUFBQSxJQUNOLFVBQVU7QUFBQSxFQUFBO0FBQUE7QUFBQSxFQUlKLFVBQXFDO0FBQUEsSUFDM0MsS0FBSztBQUFBLElBQ0wsS0FBSztBQUFBLElBQ0wsS0FBSztBQUFBLEVBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQyxRQUFRLE1BQWMsS0FBcUI7QUFDakQsV0FBTyxLQUFLLFNBQVMsR0FBRyxJQUFJLE9BQU8sT0FBTztBQUFBLEVBQzVDO0FBQUEsRUFFTyxlQUFlLE1BQXNCO0FBQzFDLFdBQU8sS0FBSyxRQUFRLE1BQU0sS0FBSyxRQUFRLEdBQUc7QUFBQSxFQUM1QztBQUFBLEVBRU8sZ0JBQWdCLE1BQXNCO0FBQzNDLFdBQU8sS0FBSyxRQUFRLE1BQU0sS0FBSyxRQUFRLEdBQUc7QUFBQSxFQUM1QztBQUFBLEVBRVEsV0FBVyxNQUFjLEtBQXFCO0FBQ3BELFdBQU8sS0FBSyxTQUFTLEdBQUcsSUFBSSxLQUFLLE1BQU0sR0FBRyxDQUFDLElBQUksTUFBTSxJQUFJO0FBQUEsRUFDM0Q7QUFBQSxFQUVPLGtCQUFrQixNQUFzQjtBQUM3QyxXQUFPLEtBQUssV0FBVyxNQUFNLEtBQUssUUFBUSxHQUFHO0FBQUEsRUFDL0M7QUFBQSxFQUVPLG1CQUFtQixNQUFzQjtBQUM5QyxXQUFPLEtBQUssV0FBVyxNQUFNLEtBQUssUUFBUSxHQUFHO0FBQUEsRUFDL0M7QUFDRjtBQ3hCTyxNQUFNLFFBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS25CLFlBQTRCLElBQVE7QUFBUixTQUFBLEtBQUE7QUFBQSxFQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLckMsV0FBVyxvQkFBb0I7QUFDN0IsVUFBTSxXQUFXLElBQWM7QUFBQSxNQUM3QixPQUFPO0FBQUEsTUFDUCxLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsTUFDTixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixVQUFVO0FBQUEsTUFDVixVQUFVO0FBQUEsTUFFVixTQUFTO0FBQUEsUUFDUDtBQUFBLFVBQ0UsS0FBSztBQUFBLFVBQ0wsTUFBTTtBQUFBLFVBQ04sWUFBWTtBQUFBLFVBQ1osV0FBVztBQUFBLFFBQUE7QUFBQSxRQUViO0FBQUEsVUFDRSxLQUFLO0FBQUEsVUFDTCxNQUFNO0FBQUEsVUFDTixZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsUUFBQTtBQUFBLFFBRWI7QUFBQSxVQUNFLEtBQUs7QUFBQSxVQUNMLE1BQU07QUFBQSxVQUNOLFlBQVk7QUFBQSxVQUNaLFdBQVc7QUFBQSxRQUFBO0FBQUEsUUFFYjtBQUFBLFVBQ0UsS0FBSztBQUFBLFVBQ0wsTUFBTTtBQUFBLFVBQ04sWUFBWTtBQUFBLFVBQ1osV0FBVztBQUFBLFFBQUE7QUFBQSxRQUViO0FBQUEsVUFDRSxLQUFLO0FBQUEsVUFDTCxNQUFNO0FBQUEsVUFDTixZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsUUFBQTtBQUFBLFFBRWI7QUFBQSxVQUNFLEtBQUs7QUFBQSxVQUNMLE1BQU07QUFBQSxVQUNOLFlBQVk7QUFBQSxVQUNaLFdBQVc7QUFBQSxRQUFBO0FBQUEsUUFFYjtBQUFBLFVBQ0UsS0FBSztBQUFBLFVBQ0wsTUFBTTtBQUFBLFVBQ04sWUFBWTtBQUFBLFVBQ1osV0FBVztBQUFBLFFBQUE7QUFBQSxRQUViO0FBQUEsVUFDRSxLQUFLO0FBQUEsVUFDTCxNQUFNO0FBQUEsVUFDTixZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsUUFBQTtBQUFBLE1BQ2I7QUFBQSxJQUNGLENBQ0Q7QUFFRCxXQUFPO0FBQUEsRUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EscUJBQXFCLFlBQVk7QUFDL0IsVUFBTSxXQUFxQjtBQUFBLE1BQ3pCLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxNQUNOLFFBQVE7QUFBQSxNQUNSLFFBQVE7QUFBQSxNQUNSLFVBQVU7QUFBQSxNQUVWLFNBQVM7QUFBQSxRQUNQO0FBQUEsVUFDRSxLQUFLO0FBQUEsVUFDTCxNQUFNO0FBQUEsVUFDTixZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsUUFBQTtBQUFBLFFBRWI7QUFBQSxVQUNFLEtBQUs7QUFBQSxVQUNMLE1BQU07QUFBQSxVQUNOLFlBQVk7QUFBQSxVQUNaLFdBQVc7QUFBQSxRQUFBO0FBQUEsUUFFYjtBQUFBLFVBQ0UsS0FBSztBQUFBLFVBQ0wsTUFBTTtBQUFBLFVBQ04sWUFBWTtBQUFBLFVBQ1osV0FBVztBQUFBLFFBQUE7QUFBQSxRQUViO0FBQUEsVUFDRSxLQUFLO0FBQUEsVUFDTCxNQUFNO0FBQUEsVUFDTixZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsUUFBQTtBQUFBLFFBRWI7QUFBQSxVQUNFLEtBQUs7QUFBQSxVQUNMLE1BQU07QUFBQSxVQUNOLFlBQVk7QUFBQSxVQUNaLFdBQVc7QUFBQSxRQUFBO0FBQUEsUUFFYjtBQUFBLFVBQ0UsS0FBSztBQUFBLFVBQ0wsTUFBTTtBQUFBLFVBQ04sWUFBWTtBQUFBLFVBQ1osV0FBVztBQUFBLFFBQUE7QUFBQSxNQUNiO0FBQUEsSUFDRjtBQUdGLFVBQU0sS0FBSyxHQUFHLG9CQUFvQixFQUFFLFVBQVU7QUFBQSxFQUNoRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNQSxPQUFPLFVBQVUsWUFBWTtBQUMzQixVQUFNLEtBQUssTUFBTSxNQUFNLFFBQUE7QUFDdkIsVUFBTSxHQUFHLEtBQUE7QUFDVCxVQUFNLEdBQUcsUUFBQTtBQUNULFdBQU8sSUFBSSxRQUFRLEVBQUU7QUFBQSxFQUN2QjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsTUFBTSwyQkFBMkIsT0FBZ0M7QUFDL0QsVUFBTSxTQUFTLE1BQU0sS0FBSyxHQUFHLFlBQVksS0FBSztBQUM5QyxRQUFJLENBQUMsUUFBUTtBQUNYLFlBQU0sSUFBSSxNQUFNLFVBQVUsS0FBSyxhQUFhO0FBQUEsSUFDOUM7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1BLE1BQU0sMEJBQTBCLFFBQStCO0FBQzdELFFBQUk7QUFDRixZQUFNLGNBQWMsUUFBUSxPQUFPLGFBQWE7QUFDOUMsY0FBTSxTQUFTLE1BQU0sS0FBSyxHQUFHLFlBQVksUUFBUTtBQUNqRCxZQUFJLENBQUMsUUFBUTtBQUNYLGdCQUFNLElBQUksTUFBTSxVQUFVLFFBQVEsYUFBYTtBQUFBLFFBQ2pEO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSCxTQUFTLEdBQUc7QUFDVixZQUFNLGdCQUFpQixFQUFpQixJQUFJLENBQUNBLE9BQU1BLEdBQUUsUUFBUTtBQUU3RCxZQUFNLElBQUk7QUFBQSxRQUNSLHNDQUFzQyxjQUFjLEtBQUssSUFBSSxDQUFDO0FBQUEsTUFBQTtBQUFBLElBRWxFO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNQSxNQUFNLFlBQWlDO0FBQ3JDLFVBQU0sU0FBUyxNQUFNLEtBQUssR0FBRyxhQUFBO0FBRzdCLFVBQU0sZ0JBQTRDLENBQUE7QUFDbEQsYUFBUyxJQUFJLE9BQU8sU0FBUyxHQUFHLEtBQUssR0FBRyxLQUFLO0FBQzNDLFlBQU0sUUFBUSxPQUFPLENBQUM7QUFDdEIsWUFBTSxXQUFXLGNBQWMsTUFBTSxHQUFHO0FBQ3hDLFVBQUksQ0FBQyxZQUFZLFNBQVMsUUFBUSxTQUFTLE1BQU0sUUFBUSxRQUFRO0FBQy9ELHNCQUFjLE1BQU0sR0FBRyxJQUFJO0FBQUEsTUFDN0I7QUFBQSxJQUNGO0FBSUEsVUFBTSxhQUFhLE9BQU8sT0FBTyxhQUFhLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTTtBQUM3RCxVQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUs7QUFDakIsZUFBTztBQUFBLE1BQ1Q7QUFDQSxVQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUs7QUFDakIsZUFBTztBQUFBLE1BQ1Q7QUFFQSxhQUFPO0FBQUEsSUFDVCxDQUFDO0FBQ0QsV0FBTztBQUFBLEVBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLE1BQU0sZUFBa0M7QUFDdEMsVUFBTSxVQUFVLE1BQU0sS0FBSyxVQUFBLEdBQWEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHO0FBQ3hELFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxNQUFNLFNBQVMsT0FBb0M7QUFDakQsVUFBTSxXQUFXLE1BQU0sS0FBSyxlQUFlLEtBQUs7QUFDaEQsUUFBSSxDQUFDLFVBQVU7QUFDYixZQUFNLElBQUksTUFBTSxVQUFVLEtBQUssYUFBYTtBQUFBLElBQzlDO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTUEsTUFBTSxlQUFlLE9BQTJDO0FBQzlELFVBQU0sWUFBWSxNQUFNLEtBQUssVUFBQTtBQUM3QixVQUFNLFdBQVcsVUFBVSxLQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsS0FBSztBQUN0RCxXQUFPLFlBQVk7QUFBQSxFQUNyQjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsTUFBTSxjQUFjLE9BQW9DO0FBQ3RELFVBQU0sV0FBVyxNQUFNLEtBQUssU0FBUyxLQUFLO0FBQzFDLFVBQU0sU0FBUyxTQUFTLFFBQVEsSUFBSSxDQUFDLFdBQVcsT0FBTyxHQUFHO0FBQzFELFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsTUFBTSw0QkFDSixPQUNBLFNBQ2U7QUFDZixVQUFNLFdBQVcsTUFBTSxLQUFLLFNBQVMsS0FBSztBQUMxQyxVQUFNLGFBQWEsU0FBUyxRQUFRLElBQUksQ0FBQyxXQUFXLE9BQU8sR0FBRztBQUM5RCxVQUFNLGlCQUFpQixRQUFRO0FBQUEsTUFDN0IsQ0FBQyxXQUFXLENBQUMsV0FBVyxTQUFTLE1BQU07QUFBQSxJQUFBO0FBRXpDLFFBQUksZUFBZSxTQUFTLEdBQUc7QUFDN0IsWUFBTSxJQUFJO0FBQUEsUUFDUixnREFBZ0QsS0FBSyxNQUFNLGVBQWU7QUFBQSxVQUN4RTtBQUFBLFFBQUEsQ0FDRDtBQUFBLE1BQUE7QUFBQSxJQUVMO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNQSxNQUFNLDhCQUE4QixRQUFpQztBQUNuRSxVQUFNLFNBQVMsaUNBQWlDLE9BQU8sR0FBRztBQUUxRCwyQkFBdUIsTUFBTTtBQUc3QixVQUFNLFdBQVcsTUFBTSxLQUFLLGVBQWUsT0FBTyxHQUFHO0FBQ3JELFFBQUksVUFBVTtBQUVaLFVBQUksU0FBUyxRQUFRLFNBQVMsT0FBTyxRQUFRLFFBQVE7QUFDbkQsY0FBTSxvQkFBb0IsU0FBUyxRQUNoQyxJQUFJLENBQUMsV0FBVyxPQUFPLEdBQUcsRUFDMUI7QUFBQSxVQUNDLENBQUMsUUFBUSxDQUFDLE9BQU8sUUFBUSxLQUFLLENBQUMsV0FBVyxPQUFPLFFBQVEsR0FBRztBQUFBLFFBQUE7QUFHaEUsWUFBSSxrQkFBa0IsU0FBUyxHQUFHO0FBQ2hDLGdCQUFNLGlCQUFpQixrQkFBa0IsS0FBSyxJQUFJO0FBQ2xELGdCQUFNLElBQUk7QUFBQSxZQUNSLEdBQUcsTUFBTSxtREFDYSxjQUFjO0FBQUEsVUFBQTtBQUFBLFFBRXhDO0FBQUEsTUFDRjtBQUdBLGVBQVMsSUFBSSxHQUFHLElBQUksU0FBUyxRQUFRLFFBQVEsS0FBSztBQUNoRCxjQUFNLFNBQVMsU0FBUyxRQUFRLENBQUMsRUFBRTtBQUNuQyxjQUFNLFFBQVEsT0FBTyxRQUFRLENBQUMsRUFBRTtBQUNoQyxZQUFJLFdBQVcsT0FBTztBQUNwQixnQkFBTSxJQUFJO0FBQUEsWUFDUixHQUFHLE1BQU0sMENBRUksTUFBTSx1QkFBdUIsS0FBSztBQUFBLFVBQUE7QUFBQSxRQUVuRDtBQUFBLE1BQ0Y7QUFHQSxlQUFTLElBQUksR0FBRyxJQUFJLFNBQVMsUUFBUSxRQUFRLEtBQUs7QUFDaEQsY0FBTSxTQUFTLFNBQVMsUUFBUSxDQUFDLEVBQUU7QUFDbkMsY0FBTSxTQUFTLFNBQVMsUUFBUSxDQUFDLEVBQUU7QUFDbkMsY0FBTSxRQUFRLE9BQU8sUUFBUSxDQUFDLEVBQUU7QUFDaEMsWUFBSSxXQUFXLE9BQU87QUFDcEIsZ0JBQU0sSUFBSTtBQUFBLFlBQ1IsR0FBRyxNQUFNLG1EQUVZLE1BQU0sdUJBQXVCLE1BQU0sUUFBUSxLQUFLO0FBQUEsVUFBQTtBQUFBLFFBRXpFO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxNQUFNLGtDQUFrQyxNQUFjO0FBQ3BELFVBQU0sU0FBbUIsQ0FBQTtBQUV6QixVQUFNLGNBQWMsTUFBTSxPQUFPLGFBQWE7QUFDNUMsWUFBTSxXQUFXLE1BQU0sS0FBSyxTQUFTLFFBQVE7QUFDN0MsWUFBTSxRQUFRLEtBQUssUUFBUTtBQUkzQixVQUFJLE1BQU0sVUFBVSxZQUFhO0FBRWpDLGFBQU8sS0FBSyxHQUFHLDhCQUE4QixNQUFNLE9BQU8sUUFBUSxDQUFDO0FBQUEsSUFDckUsQ0FBQztBQUVELFFBQUksT0FBTyxTQUFTLEdBQUc7QUFDckIsWUFBTSxJQUFJO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQSxFQUE0RCxPQUN6RCxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxFQUNuQixLQUFLLElBQUksQ0FBQztBQUFBLE1BQUE7QUFBQSxJQUVqQjtBQUFBLEVBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLDJCQUEyQixPQUF3QjtBQUNqRCxVQUFNLE1BQU0sS0FBSyxDQUFDLEdBQUcsTUFBTTtBQUN6QixZQUFNLFFBQVEsRUFBRTtBQUNoQixZQUFNLFFBQVEsRUFBRTtBQUVoQixVQUFJLFFBQVEsT0FBTztBQUNqQixlQUFPO0FBQUEsTUFDVDtBQUVBLFVBQUksUUFBUSxPQUFPO0FBQ2pCLGVBQU87QUFBQSxNQUNUO0FBR0EsYUFBTztBQUFBLElBQ1QsQ0FBQztBQUVELFVBQU0sUUFBUTtBQUNkLFFBQUksT0FBTztBQUFBLE1BQ1Qsc0JBQXNCO0FBQUEsTUFDdEIsb0JBQW9CO0FBQUEsSUFBQSxDQUNyQjtBQUFBLEVBQ0g7QUFDRjtBQ3hYTyxNQUFNLE1BQW9CO0FBQUE7QUFBQTtBQUFBLEVBSS9CLE9BQXNCO0FBQ3BCLFNBQUssVUFBVTtBQUNmLFdBQU8sS0FBSyxNQUFBO0FBQUEsRUFDZDtBQUFBLEVBRUEsUUFBdUI7QUFDckIsU0FBSyxVQUFVO0FBQ2YsV0FBTyxRQUFRLFFBQUE7QUFBQSxFQUNqQjtBQUFBLEVBRUEsSUFBSSxTQUFrQjtBQUNwQixXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUEsRUFFQSxPQUFPLFVBQVUsWUFBWTtBQUMzQixVQUFNLEtBQUssSUFBSSxNQUFBO0FBQ2YsVUFBTSxHQUFHLEtBQUE7QUFDVCxXQUFPO0FBQUEsRUFDVDtBQUFBO0FBQUE7QUFBQSxFQUlBLFVBQVU7QUFDUixXQUFPLEtBQUssU0FBUztBQUFBLEVBQ3ZCO0FBQUE7QUFBQTtBQUFBLEVBS0EsT0FBd0I7QUFDdEIsV0FBTyxLQUFLLE1BQUE7QUFBQSxFQUNkO0FBQUEsRUFFQSxNQUFNLFVBQVUsU0FBNkM7QUFDM0QsV0FBTyxLQUFLLFdBQVcsT0FBTztBQUFBLEVBQ2hDO0FBQUE7QUFBQTtBQUFBLEVBS0EsTUFBTSxZQUFZLFNBQWtEO0FBQ2xFLFdBQU8sS0FBSyxhQUFhLE9BQU87QUFBQSxFQUNsQztBQUFBO0FBQUE7QUFBQSxFQUtBLFNBQVMsU0FHVztBQUNsQixXQUFPLEtBQUssVUFBVSxPQUFPO0FBQUEsRUFDL0I7QUFBQSxFQUVBLE1BQU0sU0FBUyxPQUFnQztBQUM3QyxVQUFNLFlBQVksS0FBSyxLQUFLLEtBQUs7QUFDakMsUUFBSSxDQUFDLFdBQVc7QUFDZCxZQUFNLElBQUksTUFBTSxVQUFVLEtBQUssYUFBYTtBQUFBLElBQzlDO0FBQ0EsV0FBTyxRQUFRLFFBQVEsVUFBVSxNQUFNLE1BQU07QUFBQSxFQUMvQztBQUFBO0FBQUE7QUFBQSxFQUtBLE1BQU0sU0FBMEM7QUFDOUMsV0FBTyxLQUFLLE9BQU8sT0FBTztBQUFBLEVBQzVCO0FBQUE7QUFBQTtBQUFBLEVBSUEsTUFBTSxZQUFZLFVBQXNDO0FBQ3RELFVBQU0sUUFBUSxLQUFLLEtBQUssUUFBUTtBQUNoQyxXQUFPLFFBQVEsT0FBTztBQUFBLEVBQ3hCO0FBQUEsRUFFQSxvQkFBb0IsU0FBZ0Q7QUFDbEUsV0FBTyxLQUFLLHFCQUFxQixPQUFPO0FBQUEsRUFDMUM7QUFBQSxFQUVBLE1BQU0sZUFBb0M7QUFDeEMsVUFBTSxTQUFTLEtBQUssS0FBSyxVQUFVO0FBQ25DLFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNUTtBQUFBLEVBRUEsV0FBVyxJQUFJLFFBQUE7QUFBQSxFQUNmLFVBQVU7QUFBQSxFQUVWLE9BQWUsSUFBSSxFQUFZO0FBQUE7QUFBQSxFQUd2QyxNQUFjLFFBQVE7QUFDcEIsU0FBSyxXQUFXLElBQUksUUFBUSxJQUFJO0FBQ2hDLFNBQUssZUFBQTtBQUNMLFNBQUssa0JBQUE7QUFDTCxVQUFNLEtBQUssU0FBUyxtQkFBQTtBQUNwQixRQUFJLEtBQUssSUFBSTtBQUViLFNBQUssU0FBUyxRQUFBO0FBQUEsRUFDaEI7QUFBQTtBQUFBLEVBR1EsaUJBQWlCLE1BQU07QUFDN0IsVUFBTSxXQUFXLFFBQVE7QUFFekIsU0FBSyxLQUFLLFlBQVksSUFBSTtBQUFBLE1BQ3hCLE9BQU87QUFBQSxNQUNQLE9BQU8sQ0FBQyxRQUFRO0FBQUEsTUFDaEIsV0FBVyxTQUFTO0FBQUEsSUFBQSxDQUNyQjtBQUFBLEVBQ0g7QUFBQTtBQUFBLEVBR1Esb0JBQW9CO0FBQ3pCLFNBQUssS0FBYSxRQUFRO0FBQzNCLFFBQUksS0FBSyxNQUFNO0FBQUEsTUFDYixzQkFBc0I7QUFBQSxJQUFBLENBQ3ZCO0FBQUEsRUFDSDtBQUFBO0FBQUEsRUFHUSxpQkFBaUIsVUFBb0I7QUFDM0MsVUFBTSxRQUFRLEtBQUssS0FBSyxRQUFRO0FBQ2hDLFVBQU0sUUFBUTtBQUNkLFFBQUksT0FBTyxFQUFFLHNCQUFzQixNQUFBLENBQU87QUFBQSxFQUM1QztBQUFBO0FBQUEsRUFHQSxNQUFjLHFCQUFxQixTQUVqQjtBQUdoQixVQUFNLFdBQVcsUUFBUTtBQUN6QixVQUFNLEtBQUssU0FBUyw4QkFBOEIsUUFBUTtBQUUxRCxVQUFNLEVBQUUsUUFBUTtBQUdoQixVQUFNLFlBQVksSUFBSSxRQUFRO0FBRzlCLFVBQU0saUJBQWlCLE1BQU0sS0FBSyxTQUFTLGVBQWUsR0FBRztBQUc3RCxRQUFJLENBQUMsZ0JBQWdCO0FBQ25CLFdBQUssYUFBYSxXQUFXLEdBQUc7QUFBQSxJQUNsQyxPQUFPO0FBQ0wsV0FBSyxhQUFhLGdCQUFnQixTQUFTO0FBQUEsSUFDN0M7QUFBQSxFQUNGO0FBQUE7QUFBQSxFQUdRLGFBQWEsV0FBcUIsVUFBb0I7QUFFNUQsZ0JBQVksSUFBSSxTQUFTO0FBQ3pCLFNBQUssS0FBSyxVQUFVLE1BQU0sS0FBSyxTQUFTO0FBQ3hDLFNBQUssU0FBUywyQkFBMkIsS0FBSyxLQUFLLFNBQVM7QUFHNUQsVUFBTSxRQUFtQjtBQUFBLE1BQ3ZCLE9BQU8sVUFBVTtBQUFBLE1BQ2pCLE9BQU8sQ0FBQTtBQUFBLE1BQ1AsV0FBVyxVQUFVO0FBQUEsSUFBQTtBQUd2QixTQUFLLEtBQUssUUFBUSxNQUFNLElBQUksS0FBSztBQUdqQyxTQUFLLGlCQUFpQixRQUFRO0FBQzlCLFNBQUssa0JBQUE7QUFBQSxFQUNQO0FBQUE7QUFBQSxFQUdRLGFBQWEsZ0JBQTBCLFdBQXFCO0FBRWxFLFFBQUksZUFBZSxRQUFRLFdBQVcsVUFBVSxRQUFRLFFBQVE7QUFDOUQ7QUFBQSxJQUNGO0FBR0EsZ0JBQVksSUFBSSxTQUFTO0FBQ3pCLFNBQUssS0FBSyxVQUFVLE1BQU0sS0FBSyxTQUFTO0FBQ3hDLFNBQUssU0FBUywyQkFBMkIsS0FBSyxLQUFLLFNBQVM7QUFHNUQsVUFBTSxRQUFRLEtBQUssS0FBSyxVQUFVLEdBQUc7QUFDckMsVUFBTSxZQUFZLFVBQVU7QUFHNUIsU0FBSyxpQkFBaUIsVUFBVSxHQUFHO0FBQ25DLFNBQUssa0JBQUE7QUFBQSxFQUNQO0FBQUE7QUFBQSxFQUlBLE1BQWMsUUFBeUI7QUFDckMsV0FBTyxLQUFLLEtBQUssSUFBSTtBQUFBLEVBQ3ZCO0FBQUE7QUFBQSxFQUdBLE1BQWMsV0FBVyxTQUE2QztBQUNwRSxVQUFNLEtBQUssU0FBUywyQkFBMkIsUUFBUSxLQUFLO0FBRTVELFVBQU0sUUFBUSxLQUFLLEtBQUssUUFBUSxLQUFLO0FBRXJDLFdBQU87QUFBQSxNQUNMLENBQUMsUUFBUSxLQUFLLEdBQUcsS0FBSyxLQUFLO0FBQUEsSUFBQTtBQUFBLEVBRS9CO0FBQUE7QUFBQSxFQUdBLE1BQWMsYUFBYSxTQUFrRDtBQUMzRSxVQUFNLEtBQUssU0FBUywyQkFBMkIsUUFBUSxLQUFLO0FBRTVELFdBQVEsS0FBSyxLQUFLLFFBQVEsS0FBSyxFQUFnQjtBQUFBLEVBQ2pEO0FBQUE7QUFBQSxFQUdBLE1BQWMsT0FBTyxTQUEwQztBQUM3RCxVQUFNLFlBQVksSUFBSSxRQUFRLElBQUk7QUFDbEMsU0FBSyxrQkFBa0IsU0FBUztBQUNoQyxVQUFNLFNBQVMsT0FBTyxLQUFLLFNBQVM7QUFDcEMsUUFBSSxTQUFTO0FBRWIsVUFBTSxLQUFLLFNBQVMsMEJBQTBCLFFBQVEsSUFBSTtBQUMxRCxVQUFNLEtBQUssU0FBUyxrQ0FBa0MsUUFBUSxJQUFJO0FBRWxFLGVBQVcsU0FBUyxRQUFRO0FBQzFCLFVBQUksTUFBTSxXQUFXLEdBQUcsR0FBRztBQUN6QjtBQUFBLE1BQ0Y7QUFFQSxZQUFNLFdBQVcsS0FBSyxLQUFLLEtBQUs7QUFDaEMsWUFBTSxXQUFXLFVBQVUsS0FBSztBQUdoQyxpQkFBVyxRQUFRLFNBQVMsT0FBTztBQUNqQyxjQUFNLE9BQU8sS0FBSztBQUNsQixjQUFNLFNBQVMsU0FBUyxNQUFNLEtBQUssQ0FBQyxNQUFNLEVBQUUsVUFBVSxJQUFJO0FBQzFELFlBQUksQ0FBQyxRQUFRO0FBQ1gsbUJBQVMsTUFBTSxLQUFLLElBQVc7QUFBQSxRQUNqQztBQUFBLE1BQ0Y7QUFFQSxXQUFLLFNBQVMsMkJBQTJCLFFBQVE7QUFBQSxJQUNuRDtBQUdBLFNBQUssa0JBQUE7QUFBQSxFQUNQO0FBQUE7QUFBQSxFQUdBLE1BQWMsVUFBVSxTQUdKO0FBQ2xCLFVBQU0sS0FBSyxTQUFTLDJCQUEyQixRQUFRLEtBQUs7QUFDNUQsVUFBTSxLQUFLLFNBQVM7QUFBQSxNQUNsQixRQUFRO0FBQUEsTUFDUixPQUFPLEtBQUssUUFBUSxLQUFLO0FBQUEsSUFBQTtBQUkzQixVQUFNLFFBQVEsS0FBSyxLQUFLLFFBQVEsS0FBSztBQUdyQyxVQUFNLG9CQUFvQixNQUFNLE1BQU0sT0FBTyxDQUFDLFFBQVE7QUFDcEQsaUJBQVcsVUFBVSxRQUFRLE9BQU87QUFDbEMsY0FBTSxJQUFJLElBQUksTUFBTTtBQUNwQixjQUFNLElBQUksUUFBUSxNQUFNLE1BQU07QUFDOUIsWUFBSSxNQUFNLFFBQVEsTUFBTSxRQUFXO0FBQ2pDLGlCQUFPO0FBQUEsUUFDVDtBQUVBLFlBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHO0FBQ2pCLGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFDQSxhQUFPO0FBQUEsSUFDVCxDQUFDO0FBR0QsVUFBTSxnQkFBMkI7QUFBQSxNQUMvQixPQUFPLE1BQU07QUFBQSxNQUNiLE9BQU87QUFBQSxJQUFBO0FBR1QsU0FBSyxTQUFTLDJCQUEyQixhQUFhO0FBRXRELFVBQU0sU0FBaUI7QUFBQSxNQUNyQixDQUFDLFFBQVEsS0FBSyxHQUFHO0FBQUEsSUFBQTtBQUduQixXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsa0JBQWtCLFFBQWdCO0FBQ2hDLHNCQUFrQixRQUFRLENBQUMsVUFBVTtBQUNuQyxZQUFNLE9BQU8sT0FBTyxLQUFLLEVBQUU7QUFFM0IsaUJBQVcsT0FBTyxNQUFNO0FBQ3RCLG1CQUFXLE9BQU8sS0FBSztBQUNyQixjQUFJLElBQUksR0FBRyxNQUFNLE1BQU07QUFDckIsbUJBQU8sSUFBSSxHQUFHO0FBQUEsVUFDaEI7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFDRjtBQ2hUTyxNQUFNLG1CQUFtQixNQUFtQjtBQUNqRCxTQUFPO0FBQUEsSUFDTCxJQUFJLElBQUksTUFBQTtBQUFBLElBQ1IsV0FBVyxZQUFZO0FBQUEsSUFHdkI7QUFBQSxJQUVBLFlBQVksWUFBWTtBQUFBLElBRXhCO0FBQUEsSUFDQSxXQUFXLFlBQVk7QUFBQSxJQUV2QjtBQUFBLElBRUEsVUFBVSxZQUFZO0FBQUEsSUFFdEI7QUFBQSxFQUFBO0FBRUo7QUMwQk8sTUFBTSxZQUNYO0FDekJLLE1BQU0sa0JBQWtCLENBQUMsV0FBZ0M7QUFDOUQsUUFBTSxTQUFzQixDQUFBO0FBSTVCLG9CQUFrQixRQUFRLENBQUMsZUFBZSxVQUFVO0FBQ2xELFVBQU0sYUFBb0QsQ0FBQTtBQUMxRCxXQUFPLGFBQWEsSUFBSTtBQUN4QixlQUFXLFlBQVksTUFBTSxPQUFPO0FBQ2xDLGlCQUFXLFNBQVMsS0FBSyxJQUFJLENBQUE7QUFBQSxJQUMvQjtBQUFBLEVBQ0YsQ0FBQztBQUlELG9CQUFrQixRQUFRLENBQUMsZ0JBQWdCLGdCQUFnQjtBQUV6RCxlQUFXLGtCQUFrQixZQUFZLE9BQU87QUFHOUMsY0FBUSxZQUFZLE9BQUE7QUFBQSxRQUNsQixLQUFLO0FBQ0gsOEJBQW9CLGdCQUFnQixnQkFBZ0IsTUFBTTtBQUMxRDtBQUFBLFFBRUYsS0FBSyxVQUFVO0FBQ2IsMEJBQWdCLGdCQUFnQixnQkFBZ0IsTUFBTTtBQUN0RDtBQUFBLFFBQ0Y7QUFBQSxRQUVBLEtBQUssWUFBWTtBQUVmO0FBQUEsUUFDRjtBQUFBLFFBRUEsS0FBSyxTQUFTO0FBQ1oseUJBQWUsZ0JBQWdCLGdCQUFnQixNQUFNO0FBQ3JEO0FBQUEsUUFDRjtBQUFBLFFBRUEsS0FBSyxXQUFXO0FBQ2QsMkJBQWlCLGdCQUFnQixnQkFBZ0IsTUFBTTtBQUN2RDtBQUFBLFFBQ0Y7QUFBQSxNQUFBO0FBQUEsSUFFSjtBQUFBLEVBQ0YsQ0FBQztBQUVELFNBQU87QUFDVDtBQUtBLE1BQU0sc0JBQXNCLENBQzFCLGlCQUNBLFdBQ0EsV0FDRztBQUNILFFBQU0sZ0JBQWdCLFVBQVU7QUFFaEMsYUFBVyxvQkFBb0IsV0FBVztBQUN4QyxRQUFJLGlCQUFpQixXQUFXLEdBQUcsR0FBRztBQUNwQztBQUFBLElBQ0Y7QUFFQSxRQUFJLENBQUMsaUJBQWlCLFNBQVMsS0FBSyxHQUFHO0FBQ3JDO0FBQUEsSUFDRjtBQUVBLFVBQU0saUJBQWlCLGlCQUFpQixNQUFNLEdBQUcsRUFBRTtBQUNuRCxVQUFNLGVBQWUsVUFBVSxnQkFBZ0I7QUFFL0M7QUFBQSxNQUNFO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQUE7QUFBQSxFQUVKO0FBQ0Y7QUFHQSxNQUFNLGtCQUFrQixDQUN0QixpQkFDQSxXQUNBLFdBQ0c7QUFDSCxRQUFNLGlCQUFpQixVQUFVO0FBQ2pDLFFBQU0sZ0JBQWdCLFVBQVU7QUFFaEMsYUFBVyxXQUFXLFVBQVUsS0FBSztBQUNuQyxRQUFJLFFBQVEsV0FBVyxHQUFHLEdBQUc7QUFDM0I7QUFBQSxJQUNGO0FBRUEsVUFBTSxZQUFZLFVBQVUsSUFBSSxPQUFPO0FBRXZDLFdBQU8sUUFBUSxnQkFBZ0IsV0FBVyxpQkFBaUIsYUFBYTtBQUFBLEVBQzFFO0FBQ0Y7QUFHQSxNQUFNLGlCQUFpQixDQUNyQixpQkFDQSxXQUNBLFdBQ0c7QUFDSCxRQUFNLGdCQUFnQixVQUFVO0FBRWhDLGFBQVcsU0FBUyxVQUFVLFFBQVE7QUFDcEMsVUFBTSxpQkFBaUI7QUFDdkIsVUFBTSxlQUFlLFVBQVUsT0FBTyxLQUFLO0FBQzNDO0FBQUEsTUFDRTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUFBO0FBQUEsRUFFSjtBQUNGO0FBR0EsTUFBTSxtQkFBbUIsQ0FDdkIsaUJBQ0EsV0FDQSxXQUNHO0FBQ0gsUUFBTSxnQkFBZ0IsVUFBVTtBQUVoQyxhQUFXLFFBQVEsVUFBVSxPQUFPO0FBQ2xDLFVBQU0saUJBQWlCLEtBQUs7QUFDNUIsVUFBTSxlQUFlLEtBQUs7QUFDMUI7QUFBQSxNQUNFO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQUE7QUFBQSxFQUVKO0FBQ0Y7QUFHQSxNQUFNLFNBQVMsQ0FDYixRQUNBLGdCQUNBLGNBQ0EsaUJBQ0Esa0JBQ0c7QUFDSCxRQUFNLDBCQUEyQixPQUFPLGNBQWMsTUFBTSxDQUFBO0FBQzVELFFBQU0sNkJBQThCLHdCQUF3QixZQUFZLE1BQ3RFLENBQUE7QUFFRiw2QkFBMkIsZUFBZSxNQUFNLENBQUE7QUFDaEQsNkJBQTJCLGVBQWUsRUFBRSxhQUFhLE1BQU0sQ0FBQTtBQUNqRTsifQ==
|
|
718
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8uanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9pby1kYi1uYW1lLW1hcHBpbmcudHMiLCIuLi9zcmMvaW8tdG9vbHMudHMiLCIuLi9zcmMvaW8tbWVtLnRzIiwiLi4vc3JjL2lvLXRlc3Qtc2V0dXAudHMiLCIuLi9zcmMvaW8udHMiLCIuLi9zcmMvcmV2ZXJzZS1yZWYudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGxpY2Vuc2VcclxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxyXG4vL1xyXG4vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0ZXJtcyB0aGF0IGNhbiBiZVxyXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cclxuXHJcbmV4cG9ydCBjbGFzcyBJb0RiTmFtZU1hcHBpbmcge1xyXG4gIC8vIFRoZSBwcmltYXJ5IGtleSBjb2x1bW4gaXMgYWx3YXlzIG5hbWVkICdfaGFzaCdcclxuICBwdWJsaWMgcHJpbWFyeUtleUNvbHVtbjogc3RyaW5nID0gJ19oYXNoJztcclxuICBwdWJsaWMgZGF0YVNlY3Rpb246IHN0cmluZyA9ICdfZGF0YSc7XHJcbiAgcHVibGljIHR5cGVDb2x1bW46IHN0cmluZyA9ICd0eXBlJztcclxuXHJcbiAgLy8gTmFtZXMgZm9yIHRoZSBtYWluIHRhYmxlcyBpbiB0aGUgZGF0YWJhc2VcclxuICBwdWJsaWMgdGFibGVOYW1lczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICAgIG1haW46ICd0YWJsZUNmZ3MnLFxyXG4gICAgcmV2aXNpb246ICdyZXZpc2lvbnMnLFxyXG4gIH07XHJcblxyXG4gIC8vLyBTdWZmaXggaGFuZGxpbmcgZm9yIHRoZSBkYXRhYmFzZVxyXG4gIHByaXZhdGUgX3N1ZmZpeDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICAgIGNvbDogJ19jb2wnLFxyXG4gICAgdGJsOiAnX3RibCcsXHJcbiAgICB0bXA6ICdfdG1wJyxcclxuICB9O1xyXG5cclxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gIC8vIGFkZCBhbmQgcmVtb3ZlIHN1ZmZpeGVzIGZvciB1c2UgaW4gU1FMIHN0YXRlbWVudHNcclxuICBwcml2YXRlIF9hZGRGaXgobmFtZTogc3RyaW5nLCBmaXg6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbmFtZS5lbmRzV2l0aChmaXgpID8gbmFtZSA6IG5hbWUgKyBmaXg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkVGFibGVTdWZmaXgobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9hZGRGaXgobmFtZSwgdGhpcy5fc3VmZml4LnRibCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkQ29sdW1uU3VmZml4KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWRkRml4KG5hbWUsIHRoaXMuX3N1ZmZpeC5jb2wpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlRml4KG5hbWU6IHN0cmluZywgZml4OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIG5hbWUuZW5kc1dpdGgoZml4KSA/IG5hbWUuc2xpY2UoMCwgLWZpeC5sZW5ndGgpIDogbmFtZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVUYWJsZVN1ZmZpeChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlbW92ZUZpeChuYW1lLCB0aGlzLl9zdWZmaXgudGJsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVDb2x1bW5TdWZmaXgobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9yZW1vdmVGaXgobmFtZSwgdGhpcy5fc3VmZml4LmNvbCk7XHJcbiAgfVxyXG59XHJcbiIsIi8vIEBsaWNlbnNlXHJcbi8vIENvcHlyaWdodCAoYykgMjAyNSBSbGpzb25cclxuLy9cclxuLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGVybXMgdGhhdCBjYW4gYmVcclxuLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGlzIHBhY2thZ2UuXHJcblxyXG5pbXBvcnQgeyBoaXAgfSBmcm9tICdAcmxqc29uL2hhc2gnO1xyXG5pbXBvcnQge1xyXG4gIGl0ZXJhdGVUYWJsZXMsXHJcbiAgUmxqc29uLFxyXG4gIFRhYmxlQ2ZnLFxyXG4gIFRhYmxlS2V5LFxyXG4gIFRhYmxlVHlwZSxcclxuICB0aHJvd09uSW52YWxpZFRhYmxlQ2ZnLFxyXG4gIHZhbGlkYXRlUmxqc29uQWdhaW5zdFRhYmxlQ2ZnLFxyXG59IGZyb20gJ0BybGpzb24vcmxqc29uJztcclxuXHJcbmltcG9ydCB7IElvTWVtIH0gZnJvbSAnLi9pby1tZW0udHMnO1xyXG5pbXBvcnQgeyBJbyB9IGZyb20gJy4vaW8udHMnO1xyXG5cclxuZXhwb3J0IHR5cGUgSW9PYnNlcnZlciA9IChkYXRhOiBSbGpzb24pID0+IHZvaWQ7XHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRoZSBJbyBpbnRlcmZhY2UuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgSW9Ub29scyB7XHJcbiAgLyoqXHJcbiAgICogQ29uc3RydWN0b3JcclxuICAgKiBAcGFyYW0gaW8gVGhlIElvIGludGVyZmFjZSB0byB1c2VcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgaW86IElvKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB0YWJsZSBjb25maWd1cmF0aW9uIG9mIHRoZSB0YWJsZUNmZ3MgdGFibGUuXHJcbiAgICovXHJcbiAgc3RhdGljIGdldCB0YWJsZUNmZ3NUYWJsZUNmZygpIHtcclxuICAgIGNvbnN0IHRhYmxlQ2ZnID0gaGlwPFRhYmxlQ2ZnPih7XHJcbiAgICAgIF9oYXNoOiAnJyxcclxuICAgICAga2V5OiAndGFibGVDZmdzJyxcclxuICAgICAgdHlwZTogJ3RhYmxlQ2ZncycsXHJcbiAgICAgIGlzSGVhZDogZmFsc2UsXHJcbiAgICAgIGlzUm9vdDogZmFsc2UsXHJcbiAgICAgIGlzU2hhcmVkOiB0cnVlLFxyXG4gICAgICBwcmV2aW91czogJycsXHJcblxyXG4gICAgICBjb2x1bW5zOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAga2V5OiAnX2hhc2gnLFxyXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgICAgICB0aXRsZVNob3J0OiAnSGFzaCcsXHJcbiAgICAgICAgICB0aXRsZUxvbmc6ICdSb3cgSGFzaCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBrZXk6ICdrZXknLFxyXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgICAgICB0aXRsZVNob3J0OiAnS2V5JyxcclxuICAgICAgICAgIHRpdGxlTG9uZzogJ1RhYmxlIEtleScsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBrZXk6ICd0eXBlJyxcclxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICAgICAgdGl0bGVTaG9ydDogJ1R5cGUnLFxyXG4gICAgICAgICAgdGl0bGVMb25nOiAnQ29udGVudCBUeXBlJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGtleTogJ2lzSGVhZCcsXHJcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXHJcbiAgICAgICAgICB0aXRsZVNob3J0OiAnSXMgSGVhZCcsXHJcbiAgICAgICAgICB0aXRsZUxvbmc6ICdJcyBIZWFkIFRhYmxlJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGtleTogJ2lzUm9vdCcsXHJcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXHJcbiAgICAgICAgICB0aXRsZVNob3J0OiAnSXMgUm9vdCcsXHJcbiAgICAgICAgICB0aXRsZUxvbmc6ICdJcyBSb290IFRhYmxlJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGtleTogJ2lzU2hhcmVkJyxcclxuICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcclxuICAgICAgICAgIHRpdGxlU2hvcnQ6ICdJcyBTaGFyZWQnLFxyXG4gICAgICAgICAgdGl0bGVMb25nOiAnSXMgU2hhcmVkIFRhYmxlJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGtleTogJ3ByZXZpb3VzJyxcclxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICAgICAgdGl0bGVTaG9ydDogJ1ByZXZpb3VzJyxcclxuICAgICAgICAgIHRpdGxlTG9uZzogJ1ByZXZpb3VzIFRhYmxlIENvbmZpZ3VyYXRpb24gSGFzaCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBrZXk6ICdjb2x1bW5zJyxcclxuICAgICAgICAgIHR5cGU6ICdqc29uQXJyYXknLFxyXG4gICAgICAgICAgdGl0bGVTaG9ydDogJ0NvbHVtbnMnLFxyXG4gICAgICAgICAgdGl0bGVMb25nOiAnQ29sdW1uIENvbmZpZ3VyYXRpb25zJyxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRhYmxlQ2ZnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZXMgdGhlIHJldmlzaW9ucyB0YWJsZS5cclxuICAgKi9cclxuICBpbml0UmV2aXNpb25zVGFibGUgPSBhc3luYyAoKSA9PiB7XHJcbiAgICBjb25zdCB0YWJsZUNmZzogVGFibGVDZmcgPSB7XHJcbiAgICAgIGtleTogJ3JldmlzaW9ucycsXHJcbiAgICAgIHR5cGU6ICdyZXZpc2lvbnMnLFxyXG4gICAgICBpc0hlYWQ6IHRydWUsXHJcbiAgICAgIGlzUm9vdDogdHJ1ZSxcclxuICAgICAgaXNTaGFyZWQ6IGZhbHNlLFxyXG5cclxuICAgICAgY29sdW1uczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGtleTogJ19oYXNoJyxcclxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICAgICAgdGl0bGVTaG9ydDogJ0hhc2gnLFxyXG4gICAgICAgICAgdGl0bGVMb25nOiAnUm93IEhhc2gnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAga2V5OiAndGFibGUnLFxyXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgICAgICB0aXRsZVNob3J0OiAnVGFibGUnLFxyXG4gICAgICAgICAgdGl0bGVMb25nOiAnVGFibGUgS2V5JyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGtleTogJ3ByZWRlY2Vzc29yJyxcclxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICAgICAgdGl0bGVTaG9ydDogJ1ByZWRlY2Vzc29yJyxcclxuICAgICAgICAgIHRpdGxlTG9uZzogJ1ByZWRlY2Vzc29yIFJldmlzaW9uIEhhc2gnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAga2V5OiAnc3VjY2Vzc29yJyxcclxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICAgICAgdGl0bGVTaG9ydDogJ1N1Y2Nlc3NvcicsXHJcbiAgICAgICAgICB0aXRsZUxvbmc6ICdTdWNjZXNzb3IgUmV2aXNpb24gSGFzaCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBrZXk6ICd0aW1lc3RhbXAnLFxyXG4gICAgICAgICAgdHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgICB0aXRsZVNob3J0OiAnVGltZXN0YW1wJyxcclxuICAgICAgICAgIHRpdGxlTG9uZzogJ1JldmlzaW9uIFRpbWVzdGFtcCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBrZXk6ICdpZCcsXHJcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcclxuICAgICAgICAgIHRpdGxlU2hvcnQ6ICdJRCcsXHJcbiAgICAgICAgICB0aXRsZUxvbmc6ICdSZXZpc2lvbiBJRCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgXSxcclxuICAgIH07XHJcblxyXG4gICAgYXdhaXQgdGhpcy5pby5jcmVhdGVPckV4dGVuZFRhYmxlKHsgdGFibGVDZmcgfSk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXhhbXBsZSBvYmplY3QgZm9yIHRlc3QgcHVycG9zZXNcclxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiBpbyB0b29sc1xyXG4gICAqL1xyXG4gIHN0YXRpYyBleGFtcGxlID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgY29uc3QgaW8gPSBhd2FpdCBJb01lbS5leGFtcGxlKCk7XHJcbiAgICBhd2FpdCBpby5pbml0KCk7XHJcbiAgICBhd2FpdCBpby5pc1JlYWR5KCk7XHJcbiAgICByZXR1cm4gbmV3IElvVG9vbHMoaW8pO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFRocm93cyBpZiB0aGUgdGFibGUgZG9lcyBub3QgZXhpc3RcclxuICAgKi9cclxuICBhc3luYyB0aHJvd1doZW5UYWJsZURvZXNOb3RFeGlzdCh0YWJsZTogVGFibGVLZXkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGV4aXN0cyA9IGF3YWl0IHRoaXMuaW8udGFibGVFeGlzdHModGFibGUpO1xyXG4gICAgaWYgKCFleGlzdHMpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYWJsZSBcIiR7dGFibGV9XCIgbm90IGZvdW5kYCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaHJvd3MgaWYgYW55IG9mIHRoZSB0YWJsZXMgaW4gcmxqc29uIGRvIG5vdCBleGlzdFxyXG4gICAqIEBwYXJhbSBybGpzb24gLSBUaGUgUmxqc29uIG9iamVjdCB0byBjaGVja1xyXG4gICAqL1xyXG4gIGFzeW5jIHRocm93V2hlblRhYmxlc0RvTm90RXhpc3Qocmxqc29uOiBSbGpzb24pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IGl0ZXJhdGVUYWJsZXMocmxqc29uLCBhc3luYyAodGFibGVLZXkpID0+IHtcclxuICAgICAgICBjb25zdCBleGlzdHMgPSBhd2FpdCB0aGlzLmlvLnRhYmxlRXhpc3RzKHRhYmxlS2V5KTtcclxuICAgICAgICBpZiAoIWV4aXN0cykge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYWJsZSBcIiR7dGFibGVLZXl9XCIgbm90IGZvdW5kYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc3QgbWlzc2luZ1RhYmxlcyA9IChlIGFzIEFycmF5PGFueT4pLm1hcCgoZSkgPT4gZS50YWJsZUtleSk7XHJcblxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYFRoZSBmb2xsb3dpbmcgdGFibGVzIGRvIG5vdCBleGlzdDogJHttaXNzaW5nVGFibGVzLmpvaW4oJywgJyl9YCxcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgdGFibGUgY2ZncyBvZiBhbGwgdGFibGVzXHJcbiAgICogQHJldHVybnMgVGhlIHRhYmxlIGNvbmZpZ3VyYXRpb24gb2YgYWxsIHRhYmxlc1xyXG4gICAqL1xyXG4gIGFzeW5jIHRhYmxlQ2ZncygpOiBQcm9taXNlPFRhYmxlQ2ZnW10+IHtcclxuICAgIGNvbnN0IHRhYmxlcyA9IGF3YWl0IHRoaXMuaW8ucmF3VGFibGVDZmdzKCk7XHJcblxyXG4gICAgLy8gVGFrZSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgZWFjaCB0eXBlIGtleVxyXG4gICAgY29uc3QgbmV3ZXN0VmVyc2lvbjogUmVjb3JkPFRhYmxlS2V5LCBUYWJsZUNmZz4gPSB7fTtcclxuICAgIGZvciAobGV0IGkgPSB0YWJsZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgY29uc3QgdGFibGUgPSB0YWJsZXNbaV07XHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gbmV3ZXN0VmVyc2lvblt0YWJsZS5rZXldO1xyXG4gICAgICBpZiAoIWV4aXN0aW5nIHx8IGV4aXN0aW5nLmNvbHVtbnMubGVuZ3RoIDwgdGFibGUuY29sdW1ucy5sZW5ndGgpIHtcclxuICAgICAgICBuZXdlc3RWZXJzaW9uW3RhYmxlLmtleV0gPSB0YWJsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFNvcnQgdGhlIHRhYmxlcyBieSBrZXlcclxuICAgIC8qIHY4IGlnbm9yZSBuZXh0IC0tIEBwcmVzZXJ2ZSAqL1xyXG4gICAgY29uc3QgcmVzdWx0RGF0YSA9IE9iamVjdC52YWx1ZXMobmV3ZXN0VmVyc2lvbikuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICBpZiAoYS5rZXkgPCBiLmtleSkge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYS5rZXkgPiBiLmtleSkge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3VsdERhdGE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgbGlzdCB3aXRoIGFsbCB0YWJsZSBuYW1lc1xyXG4gICAqL1xyXG4gIGFzeW5jIGFsbFRhYmxlS2V5cygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XHJcbiAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgdGhpcy50YWJsZUNmZ3MoKSkubWFwKChlKSA9PiBlLmtleSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIGdpdmVuIHRhYmxlXHJcbiAgICovXHJcbiAgYXN5bmMgdGFibGVDZmcodGFibGU6IFRhYmxlS2V5KTogUHJvbWlzZTxUYWJsZUNmZz4ge1xyXG4gICAgY29uc3QgdGFibGVDZmcgPSBhd2FpdCB0aGlzLnRhYmxlQ2ZnT3JOdWxsKHRhYmxlKTtcclxuICAgIGlmICghdGFibGVDZmcpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYWJsZSBcIiR7dGFibGV9XCIgbm90IGZvdW5kYCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRhYmxlQ2ZnITtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBnaXZlbiB0YWJsZSBvciBudWxsIGlmIGl0IGRvZXMgbm90IGV4aXN0LlxyXG5cclxuICAgKi9cclxuICBhc3luYyB0YWJsZUNmZ09yTnVsbCh0YWJsZTogVGFibGVLZXkpOiBQcm9taXNlPFRhYmxlQ2ZnIHwgbnVsbD4ge1xyXG4gICAgY29uc3QgdGFibGVDZmdzID0gYXdhaXQgdGhpcy50YWJsZUNmZ3MoKTtcclxuICAgIGNvbnN0IHRhYmxlQ2ZnID0gdGFibGVDZmdzLmZpbmQoKGUpID0+IGUua2V5ID09PSB0YWJsZSk7XHJcbiAgICByZXR1cm4gdGFibGVDZmcgPz8gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIGFsbCBjb2x1bW4gbmFtZXMgb2YgYSBnaXZlbiB0YWJsZVxyXG4gICAqL1xyXG4gIGFzeW5jIGFsbENvbHVtbktleXModGFibGU6IFRhYmxlS2V5KTogUHJvbWlzZTxzdHJpbmdbXT4ge1xyXG4gICAgY29uc3QgdGFibGVDZmcgPSBhd2FpdCB0aGlzLnRhYmxlQ2ZnKHRhYmxlKTtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHRhYmxlQ2ZnLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5rZXkpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRocm93cyB3aGVuIGEgY29sdW1uIGRvZXMgbm90IGV4aXN0IGluIGEgZ2l2ZW4gdGFibGVcclxuICAgKiBAcGFyYW0gdGFibGUgLSBUaGUgdGFibGUgdG8gY2hlY2tcclxuICAgKiBAcGFyYW0gY29sdW1ucyAtIFRoZSBjb2x1bW4gdG8gY2hlY2tcclxuICAgKi9cclxuICBhc3luYyB0aHJvd1doZW5Db2x1bW5Eb2VzTm90RXhpc3QoXHJcbiAgICB0YWJsZTogVGFibGVLZXksXHJcbiAgICBjb2x1bW5zOiBzdHJpbmdbXSxcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHRhYmxlQ2ZnID0gYXdhaXQgdGhpcy50YWJsZUNmZyh0YWJsZSk7XHJcbiAgICBjb25zdCBjb2x1bW5LZXlzID0gdGFibGVDZmcuY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmtleSk7XHJcbiAgICBjb25zdCBtaXNzaW5nQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKFxyXG4gICAgICAoY29sdW1uKSA9PiAhY29sdW1uS2V5cy5pbmNsdWRlcyhjb2x1bW4pLFxyXG4gICAgKTtcclxuICAgIGlmIChtaXNzaW5nQ29sdW1ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgVGhlIGZvbGxvd2luZyBjb2x1bW5zIGRvIG5vdCBleGlzdCBpbiB0YWJsZSBcIiR7dGFibGV9XCI6ICR7bWlzc2luZ0NvbHVtbnMuam9pbihcclxuICAgICAgICAgICcsICcsXHJcbiAgICAgICAgKX0uYCxcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRocm93cyB3aGVuIGEgdGFibGUgdXBkYXRlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIGN1cnJlbnQgdGFibGVcclxuICAgKiBjb25maWd1cmF0aW9uLlxyXG4gICAqL1xyXG4gIGFzeW5jIHRocm93V2hlblRhYmxlSXNOb3RDb21wYXRpYmxlKHVwZGF0ZTogVGFibGVDZmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHByZWZpeCA9IGBJbnZhbGlkIHVwZGF0ZSBvZiB0YWJsZSBhYmxlIFwiJHt1cGRhdGUua2V5fVwiYDtcclxuXHJcbiAgICB0aHJvd09uSW52YWxpZFRhYmxlQ2ZnKHVwZGF0ZSk7XHJcblxyXG4gICAgLy8gQ2hlY2sgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIHRhYmxlXHJcbiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHRoaXMudGFibGVDZmdPck51bGwodXBkYXRlLmtleSk7XHJcbiAgICBpZiAoZXhpc3RpbmcpIHtcclxuICAgICAgLy8gSGF2ZSBjb2x1bW5zIGJlZW4gZGVsZXRlZD9cclxuICAgICAgaWYgKGV4aXN0aW5nLmNvbHVtbnMubGVuZ3RoID4gdXBkYXRlLmNvbHVtbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgZGVsZXRlZENvbHVtbktleXMgPSBleGlzdGluZy5jb2x1bW5zXHJcbiAgICAgICAgICAubWFwKChjb2x1bW4pID0+IGNvbHVtbi5rZXkpXHJcbiAgICAgICAgICAuZmlsdGVyKFxyXG4gICAgICAgICAgICAoa2V5KSA9PiAhdXBkYXRlLmNvbHVtbnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4ua2V5ID09PSBrZXkpLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAvKiB2OCBpZ25vcmUgbmV4dCAtLSBAcHJlc2VydmUgKi9cclxuICAgICAgICBpZiAoZGVsZXRlZENvbHVtbktleXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY29uc3QgZGVsZXRlZENvbHVtbnMgPSBkZWxldGVkQ29sdW1uS2V5cy5qb2luKCcsICcpO1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgJHtwcmVmaXh9OiBDb2x1bW5zIG11c3Qgbm90IGJlIGRlbGV0ZWQuIGAgK1xyXG4gICAgICAgICAgICAgIGBEZWxldGVkIGNvbHVtbnM6ICR7ZGVsZXRlZENvbHVtbnN9fWAsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSGF2ZSBjb2x1bW4ga2V5cyBjaGFuZ2VkP1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4aXN0aW5nLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBiZWZvcmUgPSBleGlzdGluZy5jb2x1bW5zW2ldLmtleTtcclxuICAgICAgICBjb25zdCBhZnRlciA9IHVwZGF0ZS5jb2x1bW5zW2ldLmtleTtcclxuICAgICAgICBpZiAoYmVmb3JlICE9PSBhZnRlcikge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgJHtwcmVmaXh9OiBgICtcclxuICAgICAgICAgICAgICBgQ29sdW1uIGtleXMgbXVzdCBub3QgY2hhbmdlISBgICtcclxuICAgICAgICAgICAgICBgQ29sdW1uIFwiJHtiZWZvcmV9XCIgd2FzIHJlbmFtZWQgaW50byBcIiR7YWZ0ZXJ9XCIuYCxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBIYXZlIGNvbHVtbiB0eXBlcyBjaGFuZ2VkP1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4aXN0aW5nLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBjb2x1bW4gPSBleGlzdGluZy5jb2x1bW5zW2ldLmtleTtcclxuICAgICAgICBjb25zdCBiZWZvcmUgPSBleGlzdGluZy5jb2x1bW5zW2ldLnR5cGU7XHJcbiAgICAgICAgY29uc3QgYWZ0ZXIgPSB1cGRhdGUuY29sdW1uc1tpXS50eXBlO1xyXG4gICAgICAgIGlmIChiZWZvcmUgIT09IGFmdGVyKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGAke3ByZWZpeH06IGAgK1xyXG4gICAgICAgICAgICAgIGBDb2x1bW4gdHlwZXMgbXVzdCBub3QgY2hhbmdlISBgICtcclxuICAgICAgICAgICAgICBgVHlwZSBvZiBjb2x1bW4gXCIke2NvbHVtbn1cIiB3YXMgY2hhbmdlZCBmcm9tIFwiJHtiZWZvcmV9XCIgdG8gJHthZnRlcn0uYCxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaHJvd3MgaWYgdGhlIGRhdGEgaW4gdGhlIHRhYmxlIGRvIG5vdCBtYXRjaCB0aGUgdGFibGUgY29uZmlndXJhdGlvblxyXG4gICAqL1xyXG4gIGFzeW5jIHRocm93V2hlblRhYmxlRGF0YURvZXNOb3RNYXRjaENmZyhkYXRhOiBSbGpzb24pIHtcclxuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBhd2FpdCBpdGVyYXRlVGFibGVzKGRhdGEsIGFzeW5jICh0YWJsZUtleSkgPT4ge1xyXG4gICAgICBjb25zdCB0YWJsZUNmZyA9IGF3YWl0IHRoaXMudGFibGVDZmcodGFibGVLZXkpO1xyXG4gICAgICBjb25zdCB0YWJsZSA9IGRhdGFbdGFibGVLZXldO1xyXG5cclxuICAgICAgLy8gSWdub3JlIHRhYmxlQ2ZncyB0YWJsZVxyXG4gICAgICAvKiB2OCBpZ25vcmUgbmV4dCAtLSBAcHJlc2VydmUgKi9cclxuICAgICAgaWYgKHRhYmxlLl90eXBlID09PSAndGFibGVDZmdzJykgcmV0dXJuO1xyXG5cclxuICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVSbGpzb25BZ2FpbnN0VGFibGVDZmcodGFibGUuX2RhdGEsIHRhYmxlQ2ZnKSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBUYWJsZSBkYXRhIGRvZXMgbm90IG1hdGNoIHRoZSBjb25maWd1cmF0aW9uLlxcblxcbkVycm9yczpcXG4ke2Vycm9yc1xyXG4gICAgICAgICAgLm1hcCgoZSkgPT4gYC0gJHtlfWApXHJcbiAgICAgICAgICAuam9pbignXFxuJyl9YCxcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNvcnRzIHRoZSBkYXRhIG9mIGEgdGFibGUgYnkgdGhlIGhhc2ggYW5kIHVwZGF0ZXMgdGhlIHRhYmxlIGhhc2ggaW4gcGxhY2VcclxuICAgKi9cclxuICBzb3J0VGFibGVEYXRhQW5kVXBkYXRlSGFzaCh0YWJsZTogVGFibGVUeXBlKTogdm9pZCB7XHJcbiAgICB0YWJsZS5fZGF0YS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGNvbnN0IGhhc2hBID0gYS5faGFzaCBhcyBzdHJpbmc7XHJcbiAgICAgIGNvbnN0IGhhc2hCID0gYi5faGFzaCBhcyBzdHJpbmc7XHJcbiAgICAgIC8qIHY4IGlnbm9yZSBuZXh0IC0tIEBwcmVzZXJ2ZSAqL1xyXG4gICAgICBpZiAoaGFzaEEgPCBoYXNoQikge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfVxyXG4gICAgICAvKiB2OCBpZ25vcmUgbmV4dCAtLSBAcHJlc2VydmUgKi9cclxuICAgICAgaWYgKGhhc2hBID4gaGFzaEIpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLyogdjggaWdub3JlIG5leHQgLS0gQHByZXNlcnZlICovXHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGFibGUuX2hhc2ggPSAnJztcclxuICAgIGhpcCh0YWJsZSwge1xyXG4gICAgICB1cGRhdGVFeGlzdGluZ0hhc2hlczogZmFsc2UsXHJcbiAgICAgIHRocm93T25Xcm9uZ0hhc2hlczogZmFsc2UsXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiLy8gQGxpY2Vuc2VcclxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxyXG4vL1xyXG4vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0ZXJtcyB0aGF0IGNhbiBiZVxyXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cclxuXHJcbmltcG9ydCB7IGhpcCwgaHNoIH0gZnJvbSAnQHJsanNvbi9oYXNoJztcclxuaW1wb3J0IHsgSXNSZWFkeSB9IGZyb20gJ0BybGpzb24vaXMtcmVhZHknO1xyXG5pbXBvcnQgeyBjb3B5LCBlcXVhbHMsIEpzb25WYWx1ZSB9IGZyb20gJ0BybGpzb24vanNvbic7XHJcbmltcG9ydCB7XHJcbiAgQ29udGVudFR5cGUsXHJcbiAgaXRlcmF0ZVRhYmxlc1N5bmMsXHJcbiAgUmxqc29uLFxyXG4gIFRhYmxlQ2ZnLFxyXG4gIFRhYmxlS2V5LFxyXG4gIFRhYmxlVHlwZSxcclxufSBmcm9tICdAcmxqc29uL3JsanNvbic7XHJcblxyXG5pbXBvcnQgeyBJb1Rvb2xzIH0gZnJvbSAnLi9pby10b29scy50cyc7XHJcbmltcG9ydCB7IElvIH0gZnJvbSAnLi9pby50cyc7XHJcblxyXG4vKipcclxuICogSW4tTWVtb3J5IGltcGxlbWVudGF0aW9uIG9mIHRoZSBSbGpzb24gSW8gaW50ZXJmYWNlLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIElvTWVtIGltcGxlbWVudHMgSW8ge1xyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIC8vIENvbnN0cnVjdG9yICYgZXhhbXBsZVxyXG5cclxuICBpbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5faXNPcGVuID0gdHJ1ZTtcclxuICAgIHJldHVybiB0aGlzLl9pbml0KCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX2lzT3BlbiA9IGZhbHNlO1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc09wZW47XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZXhhbXBsZSA9IGFzeW5jICgpID0+IHtcclxuICAgIGNvbnN0IGlvID0gbmV3IElvTWVtKCk7XHJcbiAgICBhd2FpdCBpby5pbml0KCk7XHJcbiAgICByZXR1cm4gaW87XHJcbiAgfTtcclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgLy8gR2VuZXJhbFxyXG4gIGlzUmVhZHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNSZWFkeS5wcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgLy8gRHVtcFxyXG5cclxuICBkdW1wKCk6IFByb21pc2U8Umxqc29uPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZHVtcCgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHVtcFRhYmxlKHJlcXVlc3Q6IHsgdGFibGU6IHN0cmluZyB9KTogUHJvbWlzZTxSbGpzb24+IHtcclxuICAgIHJldHVybiB0aGlzLl9kdW1wVGFibGUocmVxdWVzdCk7XHJcbiAgfVxyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICAvLyBNZXRhIERhdGFcclxuXHJcbiAgYXN5bmMgY29udGVudFR5cGUocmVxdWVzdDogeyB0YWJsZTogc3RyaW5nIH0pOiBQcm9taXNlPENvbnRlbnRUeXBlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29udGVudFR5cGUocmVxdWVzdCk7XHJcbiAgfVxyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICAvLyBSb3dzXHJcblxyXG4gIHJlYWRSb3dzKHJlcXVlc3Q6IHtcclxuICAgIHRhYmxlOiBzdHJpbmc7XHJcbiAgICB3aGVyZTogeyBbY29sdW1uOiBzdHJpbmddOiBKc29uVmFsdWUgfTtcclxuICB9KTogUHJvbWlzZTxSbGpzb24+IHtcclxuICAgIHJldHVybiB0aGlzLl9yZWFkUm93cyhyZXF1ZXN0KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJvd0NvdW50KHRhYmxlOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgY29uc3QgdGFibGVEYXRhID0gdGhpcy5fbWVtW3RhYmxlXSBhcyBUYWJsZVR5cGU7XHJcbiAgICBpZiAoIXRhYmxlRGF0YSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhYmxlIFwiJHt0YWJsZX1cIiBub3QgZm91bmRgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGFibGVEYXRhLl9kYXRhLmxlbmd0aCk7XHJcbiAgfVxyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICAvLyBXcml0ZVxyXG5cclxuICB3cml0ZShyZXF1ZXN0OiB7IGRhdGE6IFJsanNvbiB9KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fd3JpdGUocmVxdWVzdCk7XHJcbiAgfVxyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICAvLyBUYWJsZSBtYW5hZ2VtZW50XHJcbiAgYXN5bmMgdGFibGVFeGlzdHModGFibGVLZXk6IFRhYmxlS2V5KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuX21lbVt0YWJsZUtleV0gYXMgVGFibGVUeXBlO1xyXG4gICAgcmV0dXJuIHRhYmxlID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlT3JFeHRlbmRUYWJsZShyZXF1ZXN0OiB7IHRhYmxlQ2ZnOiBUYWJsZUNmZyB9KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlT3JFeHRlbmRUYWJsZShyZXF1ZXN0KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJhd1RhYmxlQ2ZncygpOiBQcm9taXNlPFRhYmxlQ2ZnW10+IHtcclxuICAgIGNvbnN0IHRhYmxlcyA9IHRoaXMuX21lbS50YWJsZUNmZ3MuX2RhdGEgYXMgVGFibGVDZmdbXTtcclxuICAgIHJldHVybiB0YWJsZXM7XHJcbiAgfVxyXG5cclxuICAvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXHJcbiAgLy8gUHJpdmF0ZVxyXG4gIC8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcclxuXHJcbiAgcHJpdmF0ZSBfaW9Ub29scyE6IElvVG9vbHM7XHJcblxyXG4gIHByaXZhdGUgX2lzUmVhZHkgPSBuZXcgSXNSZWFkeSgpO1xyXG4gIHByaXZhdGUgX2lzT3BlbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9tZW06IFJsanNvbiA9IGhpcCh7fSBhcyBSbGpzb24pO1xyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICBwcml2YXRlIGFzeW5jIF9pbml0KCkge1xyXG4gICAgdGhpcy5faW9Ub29scyA9IG5ldyBJb1Rvb2xzKHRoaXMpO1xyXG4gICAgdGhpcy5faW5pdFRhYmxlQ2ZncygpO1xyXG4gICAgdGhpcy5fdXBkYXRlR2xvYmFsSGFzaCgpO1xyXG4gICAgYXdhaXQgdGhpcy5faW9Ub29scy5pbml0UmV2aXNpb25zVGFibGUoKTtcclxuICAgIGhzaCh0aGlzLl9tZW0pO1xyXG5cclxuICAgIHRoaXMuX2lzUmVhZHkucmVzb2x2ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgcHJpdmF0ZSBfaW5pdFRhYmxlQ2ZncyA9ICgpID0+IHtcclxuICAgIGNvbnN0IHRhYmxlQ2ZnID0gSW9Ub29scy50YWJsZUNmZ3NUYWJsZUNmZztcclxuXHJcbiAgICB0aGlzLl9tZW0udGFibGVDZmdzID0gaGlwKHtcclxuICAgICAgX3R5cGU6ICd0YWJsZUNmZ3MnLFxyXG4gICAgICBfZGF0YTogW3RhYmxlQ2ZnXSxcclxuICAgICAgX3RhYmxlQ2ZnOiB0YWJsZUNmZy5faGFzaCBhcyBzdHJpbmcsXHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICBwcml2YXRlIF91cGRhdGVHbG9iYWxIYXNoKCkge1xyXG4gICAgKHRoaXMuX21lbSBhcyBhbnkpLl9oYXNoID0gJyc7XHJcbiAgICBoaXAodGhpcy5fbWVtLCB7XHJcbiAgICAgIHVwZGF0ZUV4aXN0aW5nSGFzaGVzOiBmYWxzZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgcHJpdmF0ZSBfdXBkYXRlVGFibGVIYXNoKHRhYmxlS2V5OiBUYWJsZUtleSkge1xyXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLl9tZW1bdGFibGVLZXldIGFzIFRhYmxlVHlwZTtcclxuICAgIHRhYmxlLl9oYXNoID0gJyc7XHJcbiAgICBoaXAodGFibGUsIHsgdXBkYXRlRXhpc3RpbmdIYXNoZXM6IGZhbHNlIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgcHJpdmF0ZSBhc3luYyBfY3JlYXRlT3JFeHRlbmRUYWJsZShyZXF1ZXN0OiB7XHJcbiAgICB0YWJsZUNmZzogVGFibGVDZmc7XHJcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHRhYmxlIGNvbmZpZyBpcyBjb21wYXRpYmxlXHJcbiAgICAvLyB3aXRoIGFuIHBvdGVudGlhbCBleGlzdGluZyB0YWJsZVxyXG4gICAgY29uc3QgdGFibGVDZmcgPSByZXF1ZXN0LnRhYmxlQ2ZnO1xyXG4gICAgYXdhaXQgdGhpcy5faW9Ub29scy50aHJvd1doZW5UYWJsZUlzTm90Q29tcGF0aWJsZSh0YWJsZUNmZyk7XHJcblxyXG4gICAgY29uc3QgeyBrZXkgfSA9IHRhYmxlQ2ZnO1xyXG5cclxuICAgIC8vIFJlY3JlYXRlIGhhc2hlcyBpbiB0aGUgY2FzZSB0aGUgZXhpc3RpbmcgaGFzaGVzIGFyZSB3cm9uZ1xyXG4gICAgY29uc3QgbmV3Q29uZmlnID0gaHNoKHRhYmxlQ2ZnKTtcclxuXHJcbiAgICAvLyBGaW5kIGFuIGV4aXN0aW5nIHRhYmxlIGNvbmZpZyB3aXRoIHRoZSBzYW1lIGhhc2hcclxuICAgIGNvbnN0IGV4aXN0aW5nQ29uZmlnID0gYXdhaXQgdGhpcy5faW9Ub29scy50YWJsZUNmZ09yTnVsbChrZXkpO1xyXG5cclxuICAgIC8vIFdyaXRlIHRoZSBuZXcgY29uZmlnIGludG8gdGhlIGRhdGFiYXNlXHJcbiAgICBpZiAoIWV4aXN0aW5nQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMuX2NyZWF0ZVRhYmxlKG5ld0NvbmZpZywga2V5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2V4dGVuZFRhYmxlKGV4aXN0aW5nQ29uZmlnLCBuZXdDb25maWcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgcHJpdmF0ZSBfY3JlYXRlVGFibGUobmV3Q29uZmlnOiBUYWJsZUNmZywgdGFibGVLZXk6IFRhYmxlS2V5KSB7XHJcbiAgICAvLyBXcml0ZSB0aGUgdGFibGUgY29uZmlnIGludG8gdGhlIGRhdGFiYXNlXHJcbiAgICBuZXdDb25maWcgPSBoc2gobmV3Q29uZmlnKTtcclxuICAgIHRoaXMuX21lbS50YWJsZUNmZ3MuX2RhdGEucHVzaChuZXdDb25maWcpO1xyXG4gICAgdGhpcy5faW9Ub29scy5zb3J0VGFibGVEYXRhQW5kVXBkYXRlSGFzaCh0aGlzLl9tZW0udGFibGVDZmdzKTtcclxuXHJcbiAgICAvLyBDcmVhdGUgYSB0YWJsZSBhbmQgd3JpdGUgaXQgaW50byB0aGUgZGF0YWJhc2VcclxuICAgIGNvbnN0IHRhYmxlOiBUYWJsZVR5cGUgPSB7XHJcbiAgICAgIF90eXBlOiBuZXdDb25maWcudHlwZSxcclxuICAgICAgX2RhdGE6IFtdLFxyXG4gICAgICBfdGFibGVDZmc6IG5ld0NvbmZpZy5faGFzaCBhcyBzdHJpbmcsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuX21lbVt0YWJsZUtleV0gPz89IGhpcCh0YWJsZSk7XHJcblxyXG4gICAgLy8gVXBkYXRlIGhhc2hlc1xyXG4gICAgdGhpcy5fdXBkYXRlVGFibGVIYXNoKHRhYmxlS2V5KTtcclxuICAgIHRoaXMuX3VwZGF0ZUdsb2JhbEhhc2goKTtcclxuICB9XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIHByaXZhdGUgX2V4dGVuZFRhYmxlKGV4aXN0aW5nQ29uZmlnOiBUYWJsZUNmZywgbmV3Q29uZmlnOiBUYWJsZUNmZykge1xyXG4gICAgLy8gTm8gY29sdW1ucyBhZGRlZD8gUmV0dXJuLlxyXG4gICAgaWYgKGV4aXN0aW5nQ29uZmlnLmNvbHVtbnMubGVuZ3RoID09PSBuZXdDb25maWcuY29sdW1ucy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFdyaXRlIHRoZSBuZXcgdGFibGUgY29uZmlnIGludG8gdGhlIGRhdGFiYXNlXHJcbiAgICBuZXdDb25maWcgPSBoc2gobmV3Q29uZmlnKTtcclxuICAgIHRoaXMuX21lbS50YWJsZUNmZ3MuX2RhdGEucHVzaChuZXdDb25maWcpO1xyXG4gICAgdGhpcy5faW9Ub29scy5zb3J0VGFibGVEYXRhQW5kVXBkYXRlSGFzaCh0aGlzLl9tZW0udGFibGVDZmdzKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgdGhlIGNvbmZpZyBvZiB0aGUgZXhpc3RpbmcgdGFibGVcclxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5fbWVtW25ld0NvbmZpZy5rZXldIGFzIFRhYmxlVHlwZTtcclxuICAgIHRhYmxlLl90YWJsZUNmZyA9IG5ld0NvbmZpZy5faGFzaCBhcyBzdHJpbmc7XHJcblxyXG4gICAgLy8gVXBkYXRlIHRoZSBoYXNoZXNcclxuICAgIHRoaXMuX3VwZGF0ZVRhYmxlSGFzaChuZXdDb25maWcua2V5KTtcclxuICAgIHRoaXMuX3VwZGF0ZUdsb2JhbEhhc2goKTtcclxuICB9XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9kdW1wKCk6IFByb21pc2U8Umxqc29uPiB7XHJcbiAgICByZXR1cm4gY29weSh0aGlzLl9tZW0pO1xyXG4gIH1cclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgcHJpdmF0ZSBhc3luYyBfZHVtcFRhYmxlKHJlcXVlc3Q6IHsgdGFibGU6IHN0cmluZyB9KTogUHJvbWlzZTxSbGpzb24+IHtcclxuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVEb2VzTm90RXhpc3QocmVxdWVzdC50YWJsZSk7XHJcblxyXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLl9tZW1bcmVxdWVzdC50YWJsZV0gYXMgVGFibGVUeXBlO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIFtyZXF1ZXN0LnRhYmxlXTogY29weSh0YWJsZSksXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgcHJpdmF0ZSBhc3luYyBfY29udGVudFR5cGUocmVxdWVzdDogeyB0YWJsZTogc3RyaW5nIH0pOiBQcm9taXNlPENvbnRlbnRUeXBlPiB7XHJcbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRocm93V2hlblRhYmxlRG9lc05vdEV4aXN0KHJlcXVlc3QudGFibGUpO1xyXG5cclxuICAgIHJldHVybiAodGhpcy5fbWVtW3JlcXVlc3QudGFibGVdIGFzIFRhYmxlVHlwZSkuX3R5cGU7XHJcbiAgfVxyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICBwcml2YXRlIGFzeW5jIF93cml0ZShyZXF1ZXN0OiB7IGRhdGE6IFJsanNvbiB9KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBhZGRlZERhdGEgPSBoc2gocmVxdWVzdC5kYXRhKTtcclxuICAgIHRoaXMuX3JlbW92ZU51bGxWYWx1ZXMoYWRkZWREYXRhKTtcclxuICAgIGNvbnN0IHRhYmxlcyA9IE9iamVjdC5rZXlzKGFkZGVkRGF0YSk7XHJcbiAgICBoc2goYWRkZWREYXRhKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRocm93V2hlblRhYmxlc0RvTm90RXhpc3QocmVxdWVzdC5kYXRhKTtcclxuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVEYXRhRG9lc05vdE1hdGNoQ2ZnKHJlcXVlc3QuZGF0YSk7XHJcblxyXG4gICAgZm9yIChjb25zdCB0YWJsZSBvZiB0YWJsZXMpIHtcclxuICAgICAgaWYgKHRhYmxlLnN0YXJ0c1dpdGgoJ18nKSkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBvbGRUYWJsZSA9IHRoaXMuX21lbVt0YWJsZV0gYXMgVGFibGVUeXBlO1xyXG4gICAgICBjb25zdCBuZXdUYWJsZSA9IGFkZGVkRGF0YVt0YWJsZV0gYXMgVGFibGVUeXBlO1xyXG5cclxuICAgICAgLy8gVGFibGUgZXhpc3RzLiBNZXJnZSBkYXRhXHJcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBuZXdUYWJsZS5fZGF0YSkge1xyXG4gICAgICAgIGNvbnN0IGhhc2ggPSBpdGVtLl9oYXNoO1xyXG4gICAgICAgIGNvbnN0IGV4aXN0cyA9IG9sZFRhYmxlLl9kYXRhLmZpbmQoKGkpID0+IGkuX2hhc2ggPT09IGhhc2gpO1xyXG4gICAgICAgIGlmICghZXhpc3RzKSB7XHJcbiAgICAgICAgICBvbGRUYWJsZS5fZGF0YS5wdXNoKGl0ZW0gYXMgYW55KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX2lvVG9vbHMuc29ydFRhYmxlRGF0YUFuZFVwZGF0ZUhhc2gob2xkVGFibGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlY2FsYyBtYWluIGhhc2hlc1xyXG4gICAgdGhpcy5fdXBkYXRlR2xvYmFsSGFzaCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgcHJpdmF0ZSBhc3luYyBfcmVhZFJvd3MocmVxdWVzdDoge1xyXG4gICAgdGFibGU6IHN0cmluZztcclxuICAgIHdoZXJlOiB7IFtjb2x1bW46IHN0cmluZ106IEpzb25WYWx1ZSB9O1xyXG4gIH0pOiBQcm9taXNlPFJsanNvbj4ge1xyXG4gICAgYXdhaXQgdGhpcy5faW9Ub29scy50aHJvd1doZW5UYWJsZURvZXNOb3RFeGlzdChyZXF1ZXN0LnRhYmxlKTtcclxuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuQ29sdW1uRG9lc05vdEV4aXN0KFxyXG4gICAgICByZXF1ZXN0LnRhYmxlLFxyXG4gICAgICBPYmplY3Qua2V5cyhyZXF1ZXN0LndoZXJlKSxcclxuICAgICk7XHJcblxyXG4gICAgLy8gUmVhZCB0YWJsZSBmcm9tIGRhdGFcclxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5fbWVtW3JlcXVlc3QudGFibGVdIGFzIFRhYmxlVHlwZTtcclxuXHJcbiAgICAvLyBGaWx0ZXIgdGFibGUgZGF0YVxyXG4gICAgY29uc3QgdGFibGVEYXRhRmlsdGVyZWQgPSB0YWJsZS5fZGF0YS5maWx0ZXIoKHJvdykgPT4ge1xyXG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBpbiByZXF1ZXN0LndoZXJlKSB7XHJcbiAgICAgICAgY29uc3QgYSA9IHJvd1tjb2x1bW5dO1xyXG4gICAgICAgIGNvbnN0IGIgPSByZXF1ZXN0LndoZXJlW2NvbHVtbl07XHJcbiAgICAgICAgaWYgKGIgPT09IG51bGwgJiYgYSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZXF1YWxzKGEsIGIpKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ3JlYXRlIGFuIHRhYmxlXHJcbiAgICBjb25zdCB0YWJsZUZpbHRlcmVkOiBUYWJsZVR5cGUgPSB7XHJcbiAgICAgIF90eXBlOiB0YWJsZS5fdHlwZSxcclxuICAgICAgX2RhdGE6IHRhYmxlRGF0YUZpbHRlcmVkLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLl9pb1Rvb2xzLnNvcnRUYWJsZURhdGFBbmRVcGRhdGVIYXNoKHRhYmxlRmlsdGVyZWQpO1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdDogUmxqc29uID0ge1xyXG4gICAgICBbcmVxdWVzdC50YWJsZV06IHRhYmxlRmlsdGVyZWQsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBfcmVtb3ZlTnVsbFZhbHVlcyhybGpzb246IFJsanNvbikge1xyXG4gICAgaXRlcmF0ZVRhYmxlc1N5bmMocmxqc29uLCAodGFibGUpID0+IHtcclxuICAgICAgY29uc3QgZGF0YSA9IHJsanNvblt0YWJsZV0uX2RhdGE7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBkYXRhKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcm93KSB7XHJcbiAgICAgICAgICBpZiAocm93W2tleV0gPT09IG51bGwpIHtcclxuICAgICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIi8vIEBsaWNlbnNlXHJcbi8vIENvcHlyaWdodCAoYykgMjAyNSBSbGpzb25cclxuLy9cclxuLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGVybXMgdGhhdCBjYW4gYmVcclxuLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGlzIHBhY2thZ2UuXHJcblxyXG5pbXBvcnQgeyBJbywgSW9NZW0gfSBmcm9tICcuL2luZGV4LnRzJztcclxuXHJcbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbi8qKlxyXG4gKiBJbyBpbXBsZW1lbnRhdGlvbiBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGludGVyZmFjZSB0byBiZSB1c2VkIGluXHJcbiAqIGNvbmZvcm1hbmNlIHRlc3RzLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJb1Rlc3RTZXR1cCB7XHJcbiAgLyoqIHNldHVwIGJlZm9yZSB0aGUgc2luZ2xlIHNldHVwcyAqL1xyXG4gIGJlZm9yZUFsbDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGlvIGltcGxlbWVudGF0aW9uLlxyXG4gICAqIEByZXR1cm5zIFRoZSBpbyBpbXBsZW1lbnRhdGlvbi5cclxuICAgKi9cclxuICBiZWZvcmVFYWNoOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICAvKipcclxuICAgKiBUZWFycyBkb3duIHRoZSBpbyBpbXBsZW1lbnRhdGlvbi5cclxuICAgKiBAcmV0dXJucyBUaGUgaW8gaW1wbGVtZW50YXRpb24uXHJcbiAgICovXHJcbiAgYWZ0ZXJFYWNoOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICAvKiogY2xlYW51cCBhZnRlciBhbGwgdGVzdHMgKi9cclxuICBhZnRlckFsbDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGlvIGltcGxlbWVudGF0aW9uIHRvIGJlIHVzZWQgaW4gdGhlIGNvbmZvcm1hbmNlIHRlc3RzLlxyXG4gICAqL1xyXG4gIGlvOiBJbztcclxufVxyXG5cclxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuLy8gRXhhbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSW9UZXN0U2V0dXAgaW50ZXJmYWNlXHJcbmV4cG9ydCBjb25zdCBleGFtcGxlVGVzdFNldHVwID0gKCk6IElvVGVzdFNldHVwID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgaW86IG5ldyBJb01lbSgpLFxyXG4gICAgYmVmb3JlQWxsOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgIC8vIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIGZvciBhbnkgYWRkaXRpb25hbCBzZXR1cCByZXF1aXJlZCBiZWZvcmUgaW5pdC5cclxuICAgICAgLy8gQ3VycmVudGx5LCBpdCBkb2VzIG5vdGhpbmcuXHJcbiAgICB9LFxyXG5cclxuICAgIGJlZm9yZUVhY2g6IGFzeW5jICgpID0+IHtcclxuICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgaW8gaW1wbGVtZW50YXRpb25cclxuICAgIH0sXHJcbiAgICBhZnRlckVhY2g6IGFzeW5jICgpID0+IHtcclxuICAgICAgLy8gVGVhciBkb3duIHRoZSBpbyBpbXBsZW1lbnRhdGlvblxyXG4gICAgfSxcclxuXHJcbiAgICBhZnRlckFsbDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAvLyBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCBmb3IgYW55IGFkZGl0aW9uYWwgY2xlYW51cCBhZnRlciB0ZWFyRG93bi5cclxuICAgIH0sXHJcbiAgfTtcclxufTtcclxuIiwiLy8gQGxpY2Vuc2VcclxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxyXG4vL1xyXG4vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0ZXJtcyB0aGF0IGNhbiBiZVxyXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cclxuXHJcbmltcG9ydCB7IEpzb25WYWx1ZSB9IGZyb20gJ0BybGpzb24vanNvbic7XHJcbmltcG9ydCB7IENvbnRlbnRUeXBlLCBSbGpzb24sIFRhYmxlQ2ZnLCBUYWJsZUtleSB9IGZyb20gJ0BybGpzb24vcmxqc29uJztcclxuXHJcblxyXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG5leHBvcnQgaW50ZXJmYWNlIElvIHtcclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICAvLyBHZW5lcmFsXHJcblxyXG4gIC8qKiBTdGFydHMgdGhlIGluaXRpYWxpemF0aW9uICovXHJcbiAgaW5pdCgpOiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICAvKiogQ2xvc2VzIHRoZSBpbyAqL1xyXG4gIGNsb3NlKCk6IFByb21pc2U8dm9pZD47XHJcblxyXG4gIC8qKiBSZXR1cm5zIHRydWUgaWYgaW8gaXMgb3BlbmVkICovXHJcbiAgaXNPcGVuOiBib29sZWFuO1xyXG5cclxuICAvKiogQSBwcm9taXNlIHJlc29sdmluZyBvbmNlIHRoZSBJbyBpbnRlcmZhY2UgaXMgcmVhZHlcclxuICAgKlxyXG4gICAqIPCfkqEgVXNlIEBybGpzb24vaXMtcmVhZHlcclxuICAgKi9cclxuICBpc1JlYWR5KCk6IFByb21pc2U8dm9pZD47XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIC8vIER1bXBcclxuXHJcbiAgLyoqIFJldHVybnMgdGhlIGNvbXBsZXRlIGRiIGNvbnRlbnQgYXMgUmxqc29uICovXHJcbiAgZHVtcCgpOiBQcm9taXNlPFJsanNvbj47XHJcblxyXG4gIC8qKiBSZXR1cm5zIHRoZSBkdW1wIG9mIGEgY29tcGxldGUgdGFibGUgKi9cclxuICBkdW1wVGFibGUocmVxdWVzdDogeyB0YWJsZTogc3RyaW5nIH0pOiBQcm9taXNlPFJsanNvbj47XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIC8vIE1ldGEgRGF0YVxyXG4gIGNvbnRlbnRUeXBlKHJlcXVlc3Q6IHsgdGFibGU6IHN0cmluZyB9KTogUHJvbWlzZTxDb250ZW50VHlwZT47XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIC8vIFRhYmxlc1xyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRhYmxlIGV4aXN0c1xyXG4gICAqL1xyXG4gIHRhYmxlRXhpc3RzKHRhYmxlS2V5OiBUYWJsZUtleSk6IFByb21pc2U8Ym9vbGVhbj47XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSB0YWJsZSB3aXRoIGEgZ2l2ZW4gY29uZmlnLlxyXG4gICAqIElmIHRoZSB0YWJsZSBhbHJlYWR5IGV4aXN0cywgbmV3IGNvbHVtbnMgYXJlIGFkZGVkIHRvIHRoZSBleGlzdGluZyB0YWJsZS5cclxuICAgKiBJZiB0aGUgdGFibGUgZG9lcyBub3QgZXhpc3QsIGl0IGlzIGNyZWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29uZmlnLlxyXG4gICAqIElmIHRoZSB0YWJsZSBleGlzdHMgYW5kIGNvbHVtbnMgYXJlIHJlbW92ZWQsIGFuIGVycm9yIGlzIHRocm93bi5cclxuICAgKiBJZiB0aGUgdGFibGUgZXhpc3RzIGFuZCB0aGUgY29sdW1uIHR5cGUgaXMgY2hhbmdlZCwgYW4gZXJyb3IgaXMgdGhyb3duLlxyXG4gICAqL1xyXG4gIGNyZWF0ZU9yRXh0ZW5kVGFibGUocmVxdWVzdDogeyB0YWJsZUNmZzogVGFibGVDZmcgfSk6IFByb21pc2U8dm9pZD47XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYSBqc29uIHN0cnVjdHVyZSByZXR1cm5pbmcgY3VycmVudCB0YWJsZSBjb25maWd1cmF0aW9uc1xyXG4gICAqL1xyXG4gIHJhd1RhYmxlQ2ZncygpOiBQcm9taXNlPFRhYmxlQ2ZnW10+O1xyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICAvLyBXcml0ZVxyXG5cclxuICAvKiogV3JpdGVzIFJsanNvbiBkYXRhIGludG8gdGhlIGRhdGFiYXNlICovXHJcbiAgd3JpdGUocmVxdWVzdDogeyBkYXRhOiBSbGpzb24gfSk6IFByb21pc2U8dm9pZD47XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIC8vIFJlYWQgcm93c1xyXG5cclxuICAvKiogUXVlcmllcyBhIGxpc3Qgb2Ygcm93cyAqL1xyXG4gIHJlYWRSb3dzKHJlcXVlc3Q6IHtcclxuICAgIHRhYmxlOiBzdHJpbmc7XHJcbiAgICB3aGVyZTogeyBbY29sdW1uOiBzdHJpbmddOiBKc29uVmFsdWUgfCBudWxsIH07XHJcbiAgfSk6IFByb21pc2U8Umxqc29uPjtcclxuXHJcbiAgLyoqIFJldHVybnMgdGhlIG51bWJlciBvZiByb3dzIGluIHRoZSBnaXZlbiB0YWJsZSAqL1xyXG4gIHJvd0NvdW50KHRhYmxlOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj47XHJcbn1cclxuXHJcbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbmV4cG9ydCBjb25zdCBleGFtcGxlSW8gPVxyXG4gICdDaGVja291dCBAcmxqc29uL2lvLW1lbSBmb3IgYW4gZXhhbXBsZSBpbXBsZW1lbnRhdGlvbic7XHJcbiIsIi8qIHY4IGlnbm9yZSBmaWxlIC0tIEBwcmVzZXJ2ZSAqL1xyXG4vLyBAbGljZW5zZVxyXG4vLyBDb3B5cmlnaHQgKGMpIDIwMjUgUmxqc29uXHJcbi8vXHJcbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXHJcbi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhpcyBwYWNrYWdlLlxyXG5cclxuaW1wb3J0IHsgSnNvbiB9IGZyb20gJ0BybGpzb24vanNvbic7XHJcbmltcG9ydCB7XHJcbiAgQnVmZmV0LFxyXG4gIENha2UsXHJcbiAgaXRlcmF0ZVRhYmxlc1N5bmMsXHJcbiAgTGF5ZXIsXHJcbiAgUmVmLFxyXG4gIFJsanNvbixcclxuICBUYWJsZUtleSxcclxufSBmcm9tICdAcmxqc29uL3JsanNvbic7XHJcblxyXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4vKipcclxuICogRGVzY3JpYmVzIGEgcm93IHRoYXQgcmVmZXJlbmNlcyBhIGNoaWxkIHRhYmxlIHJvd1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBQYXJlbnRSZWYge1xyXG4gIC8qKlxyXG4gICAqIFRoZSBwYXJlbnQgdGFibGUgdGhhdCByZWZlcmVuY2VzIHRoZSBjaGlsZCB0YWJsZVxyXG4gICAqL1xyXG4gIFtwYXJlbnRUYWJsZTogVGFibGVLZXldOiB7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBwYXJlbnQgcm93IHRoYXQgcmVmZXJlbmNlcyB0aGUgY2hpbGQgcm93XHJcbiAgICAgKi9cclxuICAgIFtwYXJlbnRSb3c6IFJlZl06IHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIERldGFpbHMgYWJvdXQgdGhlIHJlZmVyZW5jZSwgZS5nLiBhbiBhcnJheSBpbmRleCBldGMuXHJcbiAgICAgICAqL1xyXG4gICAgICBkZXRhaWxzPzogSnNvbjtcclxuICAgIH07XHJcbiAgfTtcclxufVxyXG5cclxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuLyoqXHJcbiAqIERlc2NyaWJlcyB0aGUgcGFyZW50IHRhYmxlIHJvd3MgcmVmZXJlbmNpbmcgYSBjaGlsZCB0YWJsZSByb3dcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmV2ZXJzZVJlZnMge1xyXG4gIC8qKlxyXG4gICAqIFRoZSBjaGlsZCB0YWJsZSB3ZSBuZWVkIHRoZSByZWZlcmVuY2luZyByb3dzIGZvclxyXG4gICAqL1xyXG4gIFtjaGlsZFRhYmxlOiBUYWJsZUtleV06IHtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJvdyBoYXNod2UgbmVlZCB0aGUgcmVmZXJlbmNpbmcgcm93cyBmb3JcclxuICAgICAqL1xyXG4gICAgW2NoaWxkUm93OiBSZWZdOiBQYXJlbnRSZWY7XHJcbiAgfTtcclxufVxyXG5cclxuLyogdjggaWdub3JlIHN0YXJ0ICovXHJcblxyXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgcmV2ZXJzZSByZWZlcmVuY2VzIGZvciBhIGdpdmVuIHJsanNvbiBvYmplY3RcclxuICovXHJcbmV4cG9ydCBjb25zdCBjYWxjUmV2ZXJzZVJlZnMgPSAocmxqc29uOiBSbGpzb24pOiBSZXZlcnNlUmVmcyA9PiB7XHJcbiAgY29uc3QgcmVzdWx0OiBSZXZlcnNlUmVmcyA9IHt9O1xyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgLy8gUHJlcGFyZSBkYXRhIHN0cnVjdHVyZVxyXG4gIGl0ZXJhdGVUYWJsZXNTeW5jKHJsanNvbiwgKGNoaWxkVGFibGVLZXksIHRhYmxlKSA9PiB7XHJcbiAgICBjb25zdCBjaGlsZFRhYmxlOiB7IFtjaGlsZFJvd0hhc2g6IHN0cmluZ106IFBhcmVudFJlZiB9ID0ge307XHJcbiAgICByZXN1bHRbY2hpbGRUYWJsZUtleV0gPSBjaGlsZFRhYmxlO1xyXG4gICAgZm9yIChjb25zdCBjaGlsZFJvdyBvZiB0YWJsZS5fZGF0YSkge1xyXG4gICAgICBjaGlsZFRhYmxlW2NoaWxkUm93Ll9oYXNoXSA9IHt9O1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgLy8gR2VuZXJhdGUgcmV2ZXJzZSByZWZlcmVuY2VzXHJcbiAgaXRlcmF0ZVRhYmxlc1N5bmMocmxqc29uLCAocGFyZW50VGFibGVLZXksIHBhcmVudFRhYmxlKSA9PiB7XHJcbiAgICAvLyBJdGVyYXRlIGFsbCByb3dzIG9mIGVhY2ggdGFibGVcclxuICAgIGZvciAoY29uc3QgcGFyZW50VGFibGVSb3cgb2YgcGFyZW50VGFibGUuX2RhdGEpIHtcclxuICAgICAgLy8gRmluZCBvdXQgd2hlIG90aGVyIHRhYmxlcyAmIHJvd3MgYXJlIHJlZmVyZW5jZWQgYnkgdGhpcyByb3dcclxuICAgICAgLy8gV3JpdGUgdGhlc2UgaW5mb3JtYXRpb24gaW50dG8gcmVzdWx0XHJcbiAgICAgIHN3aXRjaCAocGFyZW50VGFibGUuX3R5cGUpIHtcclxuICAgICAgICBjYXNlICdjb21wb25lbnRzJzpcclxuICAgICAgICAgIF93cml0ZUNvbXBvbmVudFJlZnMocGFyZW50VGFibGVLZXksIHBhcmVudFRhYmxlUm93LCByZXN1bHQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ2xheWVycyc6IHtcclxuICAgICAgICAgIF93cml0ZUxheWVyUmVmcyhwYXJlbnRUYWJsZUtleSwgcGFyZW50VGFibGVSb3csIHJlc3VsdCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNhc2UgJ3NsaWNlSWRzJzoge1xyXG4gICAgICAgICAgLy8gU2xpY2UgaWRzIGRvIG5vdCByZWZlcmVuY2Ugb3RoZXIgdGFibGVzXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNhc2UgJ2Nha2VzJzoge1xyXG4gICAgICAgICAgX3dyaXRlQ2FrZVJlZnMocGFyZW50VGFibGVLZXksIHBhcmVudFRhYmxlUm93LCByZXN1bHQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjYXNlICdidWZmZXRzJzoge1xyXG4gICAgICAgICAgX3dyaXRlQnVmZmV0UmVmcyhwYXJlbnRUYWJsZUtleSwgcGFyZW50VGFibGVSb3csIHJlc3VsdCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufTtcclxuXHJcbi8qIHY4IGlnbm9yZSBlbmQgKi9cclxuXHJcbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbmNvbnN0IF93cml0ZUNvbXBvbmVudFJlZnMgPSAoXHJcbiAgcGFyZW50VGFibGVOYW1lOiBUYWJsZUtleSxcclxuICBwYXJlbnRSb3c6IEpzb24sXHJcbiAgcmVzdWx0OiBSZXZlcnNlUmVmcyxcclxuKSA9PiB7XHJcbiAgY29uc3QgcGFyZW50Um93SGFzaCA9IHBhcmVudFJvdy5faGFzaCBhcyBzdHJpbmc7XHJcblxyXG4gIGZvciAoY29uc3QgcGFyZW50Q29sdW1uTmFtZSBpbiBwYXJlbnRSb3cpIHtcclxuICAgIGlmIChwYXJlbnRDb2x1bW5OYW1lLnN0YXJ0c1dpdGgoJ18nKSkge1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXBhcmVudENvbHVtbk5hbWUuZW5kc1dpdGgoJ1JlZicpKSB7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNoaWxkVGFibGVOYW1lID0gcGFyZW50Q29sdW1uTmFtZS5zbGljZSgwLCAtMyk7XHJcbiAgICBjb25zdCBjaGlsZFJvd0hhc2ggPSBwYXJlbnRSb3dbcGFyZW50Q29sdW1uTmFtZV0gYXMgc3RyaW5nO1xyXG5cclxuICAgIF93cml0ZShcclxuICAgICAgcmVzdWx0LFxyXG4gICAgICBjaGlsZFRhYmxlTmFtZSxcclxuICAgICAgY2hpbGRSb3dIYXNoLFxyXG4gICAgICBwYXJlbnRUYWJsZU5hbWUsXHJcbiAgICAgIHBhcmVudFJvd0hhc2gsXHJcbiAgICApO1xyXG4gIH1cclxufTtcclxuXHJcbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbmNvbnN0IF93cml0ZUxheWVyUmVmcyA9IChcclxuICBwYXJlbnRUYWJsZU5hbWU6IFRhYmxlS2V5LFxyXG4gIHBhcmVudFJvdzogTGF5ZXIsXHJcbiAgcmVzdWx0OiBSZXZlcnNlUmVmcyxcclxuKSA9PiB7XHJcbiAgY29uc3QgY2hpbGRUYWJsZU5hbWUgPSBwYXJlbnRSb3cuY29tcG9uZW50c1RhYmxlO1xyXG4gIGNvbnN0IHBhcmVudFJvd0hhc2ggPSBwYXJlbnRSb3cuX2hhc2ggYXMgc3RyaW5nO1xyXG5cclxuICBmb3IgKGNvbnN0IHNsaWNlSWQgaW4gcGFyZW50Um93LmFkZCkge1xyXG4gICAgaWYgKHNsaWNlSWQuc3RhcnRzV2l0aCgnXycpKSB7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNsaWNlSGFzaCA9IHBhcmVudFJvdy5hZGRbc2xpY2VJZF0gYXMgc3RyaW5nO1xyXG5cclxuICAgIF93cml0ZShyZXN1bHQsIGNoaWxkVGFibGVOYW1lLCBzbGljZUhhc2gsIHBhcmVudFRhYmxlTmFtZSwgcGFyZW50Um93SGFzaCk7XHJcbiAgfVxyXG59O1xyXG5cclxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuY29uc3QgX3dyaXRlQ2FrZVJlZnMgPSAoXHJcbiAgcGFyZW50VGFibGVOYW1lOiBUYWJsZUtleSxcclxuICBwYXJlbnRSb3c6IENha2UsXHJcbiAgcmVzdWx0OiBSZXZlcnNlUmVmcyxcclxuKSA9PiB7XHJcbiAgY29uc3QgcGFyZW50Um93SGFzaCA9IHBhcmVudFJvdy5faGFzaCBhcyBzdHJpbmc7XHJcblxyXG4gIGZvciAoY29uc3QgbGF5ZXIgaW4gcGFyZW50Um93LmxheWVycykge1xyXG4gICAgY29uc3QgY2hpbGRUYWJsZU5hbWUgPSBsYXllcjtcclxuICAgIGNvbnN0IGNoaWxkUm93SGFzaCA9IHBhcmVudFJvdy5sYXllcnNbbGF5ZXJdIGFzIHN0cmluZztcclxuICAgIF93cml0ZShcclxuICAgICAgcmVzdWx0LFxyXG4gICAgICBjaGlsZFRhYmxlTmFtZSxcclxuICAgICAgY2hpbGRSb3dIYXNoLFxyXG4gICAgICBwYXJlbnRUYWJsZU5hbWUsXHJcbiAgICAgIHBhcmVudFJvd0hhc2gsXHJcbiAgICApO1xyXG4gIH1cclxufTtcclxuXHJcbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbmNvbnN0IF93cml0ZUJ1ZmZldFJlZnMgPSAoXHJcbiAgcGFyZW50VGFibGVOYW1lOiBUYWJsZUtleSxcclxuICBwYXJlbnRSb3c6IEJ1ZmZldCxcclxuICByZXN1bHQ6IFJldmVyc2VSZWZzLFxyXG4pID0+IHtcclxuICBjb25zdCBwYXJlbnRSb3dIYXNoID0gcGFyZW50Um93Ll9oYXNoIGFzIHN0cmluZztcclxuXHJcbiAgZm9yIChjb25zdCBpdGVtIG9mIHBhcmVudFJvdy5pdGVtcykge1xyXG4gICAgY29uc3QgY2hpbGRUYWJsZU5hbWUgPSBpdGVtLnRhYmxlO1xyXG4gICAgY29uc3QgY2hpbGRSb3dIYXNoID0gaXRlbS5yZWY7XHJcbiAgICBfd3JpdGUoXHJcbiAgICAgIHJlc3VsdCxcclxuICAgICAgY2hpbGRUYWJsZU5hbWUsXHJcbiAgICAgIGNoaWxkUm93SGFzaCxcclxuICAgICAgcGFyZW50VGFibGVOYW1lLFxyXG4gICAgICBwYXJlbnRSb3dIYXNoLFxyXG4gICAgKTtcclxuICB9XHJcbn07XHJcblxyXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG5jb25zdCBfd3JpdGUgPSAoXHJcbiAgcmVzdWx0OiBSZXZlcnNlUmVmcyxcclxuICBjaGlsZFRhYmxlTmFtZTogc3RyaW5nLFxyXG4gIGNoaWxkUm93SGFzaDogc3RyaW5nLFxyXG4gIHBhcmVudFRhYmxlTmFtZTogc3RyaW5nLFxyXG4gIHBhcmVudFJvd0hhc2g6IHN0cmluZyxcclxuKSA9PiB7XHJcbiAgY29uc3QgcmVmZXJlbmNlc0ZvckNoaWxkVGFibGUgPSAocmVzdWx0W2NoaWxkVGFibGVOYW1lXSA/Pz0ge30pO1xyXG4gIGNvbnN0IHJlZmVyZW5jZXNGb3JDaGlsZFRhYmxlUm93ID0gKHJlZmVyZW5jZXNGb3JDaGlsZFRhYmxlW2NoaWxkUm93SGFzaF0gPz89XHJcbiAgICB7fSk7XHJcblxyXG4gIHJlZmVyZW5jZXNGb3JDaGlsZFRhYmxlUm93W3BhcmVudFRhYmxlTmFtZV0gPz89IHt9O1xyXG4gIHJlZmVyZW5jZXNGb3JDaGlsZFRhYmxlUm93W3BhcmVudFRhYmxlTmFtZV1bcGFyZW50Um93SGFzaF0gPz89IHt9O1xyXG59O1xyXG4iXSwibmFtZXMiOlsiZSJdLCJtYXBwaW5ncyI6Ijs7OztBQU1PLE1BQU0sZ0JBQWdCO0FBQUE7QUFBQSxFQUVwQixtQkFBMkI7QUFBQSxFQUMzQixjQUFzQjtBQUFBLEVBQ3RCLGFBQXFCO0FBQUE7QUFBQSxFQUdyQixhQUF3QztBQUFBLElBQzdDLE1BQU07QUFBQSxJQUNOLFVBQVU7QUFBQSxFQUFBO0FBQUE7QUFBQSxFQUlKLFVBQXFDO0FBQUEsSUFDM0MsS0FBSztBQUFBLElBQ0wsS0FBSztBQUFBLElBQ0wsS0FBSztBQUFBLEVBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQyxRQUFRLE1BQWMsS0FBcUI7QUFDakQsV0FBTyxLQUFLLFNBQVMsR0FBRyxJQUFJLE9BQU8sT0FBTztBQUFBLEVBQzVDO0FBQUEsRUFFTyxlQUFlLE1BQXNCO0FBQzFDLFdBQU8sS0FBSyxRQUFRLE1BQU0sS0FBSyxRQUFRLEdBQUc7QUFBQSxFQUM1QztBQUFBLEVBRU8sZ0JBQWdCLE1BQXNCO0FBQzNDLFdBQU8sS0FBSyxRQUFRLE1BQU0sS0FBSyxRQUFRLEdBQUc7QUFBQSxFQUM1QztBQUFBLEVBRVEsV0FBVyxNQUFjLEtBQXFCO0FBQ3BELFdBQU8sS0FBSyxTQUFTLEdBQUcsSUFBSSxLQUFLLE1BQU0sR0FBRyxDQUFDLElBQUksTUFBTSxJQUFJO0FBQUEsRUFDM0Q7QUFBQSxFQUVPLGtCQUFrQixNQUFzQjtBQUM3QyxXQUFPLEtBQUssV0FBVyxNQUFNLEtBQUssUUFBUSxHQUFHO0FBQUEsRUFDL0M7QUFBQSxFQUVPLG1CQUFtQixNQUFzQjtBQUM5QyxXQUFPLEtBQUssV0FBVyxNQUFNLEtBQUssUUFBUSxHQUFHO0FBQUEsRUFDL0M7QUFDRjtBQ3pCTyxNQUFNLFFBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS25CLFlBQTRCLElBQVE7QUFBUixTQUFBLEtBQUE7QUFBQSxFQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLckMsV0FBVyxvQkFBb0I7QUFDN0IsVUFBTSxXQUFXLElBQWM7QUFBQSxNQUM3QixPQUFPO0FBQUEsTUFDUCxLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsTUFDTixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixVQUFVO0FBQUEsTUFDVixVQUFVO0FBQUEsTUFFVixTQUFTO0FBQUEsUUFDUDtBQUFBLFVBQ0UsS0FBSztBQUFBLFVBQ0wsTUFBTTtBQUFBLFVBQ04sWUFBWTtBQUFBLFVBQ1osV0FBVztBQUFBLFFBQUE7QUFBQSxRQUViO0FBQUEsVUFDRSxLQUFLO0FBQUEsVUFDTCxNQUFNO0FBQUEsVUFDTixZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsUUFBQTtBQUFBLFFBRWI7QUFBQSxVQUNFLEtBQUs7QUFBQSxVQUNMLE1BQU07QUFBQSxVQUNOLFlBQVk7QUFBQSxVQUNaLFdBQVc7QUFBQSxRQUFBO0FBQUEsUUFFYjtBQUFBLFVBQ0UsS0FBSztBQUFBLFVBQ0wsTUFBTTtBQUFBLFVBQ04sWUFBWTtBQUFBLFVBQ1osV0FBVztBQUFBLFFBQUE7QUFBQSxRQUViO0FBQUEsVUFDRSxLQUFLO0FBQUEsVUFDTCxNQUFNO0FBQUEsVUFDTixZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsUUFBQTtBQUFBLFFBRWI7QUFBQSxVQUNFLEtBQUs7QUFBQSxVQUNMLE1BQU07QUFBQSxVQUNOLFlBQVk7QUFBQSxVQUNaLFdBQVc7QUFBQSxRQUFBO0FBQUEsUUFFYjtBQUFBLFVBQ0UsS0FBSztBQUFBLFVBQ0wsTUFBTTtBQUFBLFVBQ04sWUFBWTtBQUFBLFVBQ1osV0FBVztBQUFBLFFBQUE7QUFBQSxRQUViO0FBQUEsVUFDRSxLQUFLO0FBQUEsVUFDTCxNQUFNO0FBQUEsVUFDTixZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsUUFBQTtBQUFBLE1BQ2I7QUFBQSxJQUNGLENBQ0Q7QUFFRCxXQUFPO0FBQUEsRUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EscUJBQXFCLFlBQVk7QUFDL0IsVUFBTSxXQUFxQjtBQUFBLE1BQ3pCLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxNQUNOLFFBQVE7QUFBQSxNQUNSLFFBQVE7QUFBQSxNQUNSLFVBQVU7QUFBQSxNQUVWLFNBQVM7QUFBQSxRQUNQO0FBQUEsVUFDRSxLQUFLO0FBQUEsVUFDTCxNQUFNO0FBQUEsVUFDTixZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsUUFBQTtBQUFBLFFBRWI7QUFBQSxVQUNFLEtBQUs7QUFBQSxVQUNMLE1BQU07QUFBQSxVQUNOLFlBQVk7QUFBQSxVQUNaLFdBQVc7QUFBQSxRQUFBO0FBQUEsUUFFYjtBQUFBLFVBQ0UsS0FBSztBQUFBLFVBQ0wsTUFBTTtBQUFBLFVBQ04sWUFBWTtBQUFBLFVBQ1osV0FBVztBQUFBLFFBQUE7QUFBQSxRQUViO0FBQUEsVUFDRSxLQUFLO0FBQUEsVUFDTCxNQUFNO0FBQUEsVUFDTixZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsUUFBQTtBQUFBLFFBRWI7QUFBQSxVQUNFLEtBQUs7QUFBQSxVQUNMLE1BQU07QUFBQSxVQUNOLFlBQVk7QUFBQSxVQUNaLFdBQVc7QUFBQSxRQUFBO0FBQUEsUUFFYjtBQUFBLFVBQ0UsS0FBSztBQUFBLFVBQ0wsTUFBTTtBQUFBLFVBQ04sWUFBWTtBQUFBLFVBQ1osV0FBVztBQUFBLFFBQUE7QUFBQSxNQUNiO0FBQUEsSUFDRjtBQUdGLFVBQU0sS0FBSyxHQUFHLG9CQUFvQixFQUFFLFVBQVU7QUFBQSxFQUNoRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNQSxPQUFPLFVBQVUsWUFBWTtBQUMzQixVQUFNLEtBQUssTUFBTSxNQUFNLFFBQUE7QUFDdkIsVUFBTSxHQUFHLEtBQUE7QUFDVCxVQUFNLEdBQUcsUUFBQTtBQUNULFdBQU8sSUFBSSxRQUFRLEVBQUU7QUFBQSxFQUN2QjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsTUFBTSwyQkFBMkIsT0FBZ0M7QUFDL0QsVUFBTSxTQUFTLE1BQU0sS0FBSyxHQUFHLFlBQVksS0FBSztBQUM5QyxRQUFJLENBQUMsUUFBUTtBQUNYLFlBQU0sSUFBSSxNQUFNLFVBQVUsS0FBSyxhQUFhO0FBQUEsSUFDOUM7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1BLE1BQU0sMEJBQTBCLFFBQStCO0FBQzdELFFBQUk7QUFDRixZQUFNLGNBQWMsUUFBUSxPQUFPLGFBQWE7QUFDOUMsY0FBTSxTQUFTLE1BQU0sS0FBSyxHQUFHLFlBQVksUUFBUTtBQUNqRCxZQUFJLENBQUMsUUFBUTtBQUNYLGdCQUFNLElBQUksTUFBTSxVQUFVLFFBQVEsYUFBYTtBQUFBLFFBQ2pEO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSCxTQUFTLEdBQUc7QUFDVixZQUFNLGdCQUFpQixFQUFpQixJQUFJLENBQUNBLE9BQU1BLEdBQUUsUUFBUTtBQUU3RCxZQUFNLElBQUk7QUFBQSxRQUNSLHNDQUFzQyxjQUFjLEtBQUssSUFBSSxDQUFDO0FBQUEsTUFBQTtBQUFBLElBRWxFO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNQSxNQUFNLFlBQWlDO0FBQ3JDLFVBQU0sU0FBUyxNQUFNLEtBQUssR0FBRyxhQUFBO0FBRzdCLFVBQU0sZ0JBQTRDLENBQUE7QUFDbEQsYUFBUyxJQUFJLE9BQU8sU0FBUyxHQUFHLEtBQUssR0FBRyxLQUFLO0FBQzNDLFlBQU0sUUFBUSxPQUFPLENBQUM7QUFDdEIsWUFBTSxXQUFXLGNBQWMsTUFBTSxHQUFHO0FBQ3hDLFVBQUksQ0FBQyxZQUFZLFNBQVMsUUFBUSxTQUFTLE1BQU0sUUFBUSxRQUFRO0FBQy9ELHNCQUFjLE1BQU0sR0FBRyxJQUFJO0FBQUEsTUFDN0I7QUFBQSxJQUNGO0FBSUEsVUFBTSxhQUFhLE9BQU8sT0FBTyxhQUFhLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTTtBQUM3RCxVQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUs7QUFDakIsZUFBTztBQUFBLE1BQ1Q7QUFDQSxVQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUs7QUFDakIsZUFBTztBQUFBLE1BQ1Q7QUFFQSxhQUFPO0FBQUEsSUFDVCxDQUFDO0FBQ0QsV0FBTztBQUFBLEVBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLE1BQU0sZUFBa0M7QUFDdEMsVUFBTSxVQUFVLE1BQU0sS0FBSyxVQUFBLEdBQWEsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHO0FBQ3hELFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxNQUFNLFNBQVMsT0FBb0M7QUFDakQsVUFBTSxXQUFXLE1BQU0sS0FBSyxlQUFlLEtBQUs7QUFDaEQsUUFBSSxDQUFDLFVBQVU7QUFDYixZQUFNLElBQUksTUFBTSxVQUFVLEtBQUssYUFBYTtBQUFBLElBQzlDO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTUEsTUFBTSxlQUFlLE9BQTJDO0FBQzlELFVBQU0sWUFBWSxNQUFNLEtBQUssVUFBQTtBQUM3QixVQUFNLFdBQVcsVUFBVSxLQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsS0FBSztBQUN0RCxXQUFPLFlBQVk7QUFBQSxFQUNyQjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsTUFBTSxjQUFjLE9BQW9DO0FBQ3RELFVBQU0sV0FBVyxNQUFNLEtBQUssU0FBUyxLQUFLO0FBQzFDLFVBQU0sU0FBUyxTQUFTLFFBQVEsSUFBSSxDQUFDLFdBQVcsT0FBTyxHQUFHO0FBQzFELFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsTUFBTSw0QkFDSixPQUNBLFNBQ2U7QUFDZixVQUFNLFdBQVcsTUFBTSxLQUFLLFNBQVMsS0FBSztBQUMxQyxVQUFNLGFBQWEsU0FBUyxRQUFRLElBQUksQ0FBQyxXQUFXLE9BQU8sR0FBRztBQUM5RCxVQUFNLGlCQUFpQixRQUFRO0FBQUEsTUFDN0IsQ0FBQyxXQUFXLENBQUMsV0FBVyxTQUFTLE1BQU07QUFBQSxJQUFBO0FBRXpDLFFBQUksZUFBZSxTQUFTLEdBQUc7QUFDN0IsWUFBTSxJQUFJO0FBQUEsUUFDUixnREFBZ0QsS0FBSyxNQUFNLGVBQWU7QUFBQSxVQUN4RTtBQUFBLFFBQUEsQ0FDRDtBQUFBLE1BQUE7QUFBQSxJQUVMO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNQSxNQUFNLDhCQUE4QixRQUFpQztBQUNuRSxVQUFNLFNBQVMsaUNBQWlDLE9BQU8sR0FBRztBQUUxRCwyQkFBdUIsTUFBTTtBQUc3QixVQUFNLFdBQVcsTUFBTSxLQUFLLGVBQWUsT0FBTyxHQUFHO0FBQ3JELFFBQUksVUFBVTtBQUVaLFVBQUksU0FBUyxRQUFRLFNBQVMsT0FBTyxRQUFRLFFBQVE7QUFDbkQsY0FBTSxvQkFBb0IsU0FBUyxRQUNoQyxJQUFJLENBQUMsV0FBVyxPQUFPLEdBQUcsRUFDMUI7QUFBQSxVQUNDLENBQUMsUUFBUSxDQUFDLE9BQU8sUUFBUSxLQUFLLENBQUMsV0FBVyxPQUFPLFFBQVEsR0FBRztBQUFBLFFBQUE7QUFHaEUsWUFBSSxrQkFBa0IsU0FBUyxHQUFHO0FBQ2hDLGdCQUFNLGlCQUFpQixrQkFBa0IsS0FBSyxJQUFJO0FBQ2xELGdCQUFNLElBQUk7QUFBQSxZQUNSLEdBQUcsTUFBTSxtREFDYSxjQUFjO0FBQUEsVUFBQTtBQUFBLFFBRXhDO0FBQUEsTUFDRjtBQUdBLGVBQVMsSUFBSSxHQUFHLElBQUksU0FBUyxRQUFRLFFBQVEsS0FBSztBQUNoRCxjQUFNLFNBQVMsU0FBUyxRQUFRLENBQUMsRUFBRTtBQUNuQyxjQUFNLFFBQVEsT0FBTyxRQUFRLENBQUMsRUFBRTtBQUNoQyxZQUFJLFdBQVcsT0FBTztBQUNwQixnQkFBTSxJQUFJO0FBQUEsWUFDUixHQUFHLE1BQU0sMENBRUksTUFBTSx1QkFBdUIsS0FBSztBQUFBLFVBQUE7QUFBQSxRQUVuRDtBQUFBLE1BQ0Y7QUFHQSxlQUFTLElBQUksR0FBRyxJQUFJLFNBQVMsUUFBUSxRQUFRLEtBQUs7QUFDaEQsY0FBTSxTQUFTLFNBQVMsUUFBUSxDQUFDLEVBQUU7QUFDbkMsY0FBTSxTQUFTLFNBQVMsUUFBUSxDQUFDLEVBQUU7QUFDbkMsY0FBTSxRQUFRLE9BQU8sUUFBUSxDQUFDLEVBQUU7QUFDaEMsWUFBSSxXQUFXLE9BQU87QUFDcEIsZ0JBQU0sSUFBSTtBQUFBLFlBQ1IsR0FBRyxNQUFNLG1EQUVZLE1BQU0sdUJBQXVCLE1BQU0sUUFBUSxLQUFLO0FBQUEsVUFBQTtBQUFBLFFBRXpFO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxNQUFNLGtDQUFrQyxNQUFjO0FBQ3BELFVBQU0sU0FBbUIsQ0FBQTtBQUV6QixVQUFNLGNBQWMsTUFBTSxPQUFPLGFBQWE7QUFDNUMsWUFBTSxXQUFXLE1BQU0sS0FBSyxTQUFTLFFBQVE7QUFDN0MsWUFBTSxRQUFRLEtBQUssUUFBUTtBQUkzQixVQUFJLE1BQU0sVUFBVSxZQUFhO0FBRWpDLGFBQU8sS0FBSyxHQUFHLDhCQUE4QixNQUFNLE9BQU8sUUFBUSxDQUFDO0FBQUEsSUFDckUsQ0FBQztBQUVELFFBQUksT0FBTyxTQUFTLEdBQUc7QUFDckIsWUFBTSxJQUFJO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQSxFQUE0RCxPQUN6RCxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxFQUNuQixLQUFLLElBQUksQ0FBQztBQUFBLE1BQUE7QUFBQSxJQUVqQjtBQUFBLEVBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLDJCQUEyQixPQUF3QjtBQUNqRCxVQUFNLE1BQU0sS0FBSyxDQUFDLEdBQUcsTUFBTTtBQUN6QixZQUFNLFFBQVEsRUFBRTtBQUNoQixZQUFNLFFBQVEsRUFBRTtBQUVoQixVQUFJLFFBQVEsT0FBTztBQUNqQixlQUFPO0FBQUEsTUFDVDtBQUVBLFVBQUksUUFBUSxPQUFPO0FBQ2pCLGVBQU87QUFBQSxNQUNUO0FBR0EsYUFBTztBQUFBLElBQ1QsQ0FBQztBQUVELFVBQU0sUUFBUTtBQUNkLFFBQUksT0FBTztBQUFBLE1BQ1Qsc0JBQXNCO0FBQUEsTUFDdEIsb0JBQW9CO0FBQUEsSUFBQSxDQUNyQjtBQUFBLEVBQ0g7QUFDRjtBQ3hYTyxNQUFNLE1BQW9CO0FBQUE7QUFBQTtBQUFBLEVBSS9CLE9BQXNCO0FBQ3BCLFNBQUssVUFBVTtBQUNmLFdBQU8sS0FBSyxNQUFBO0FBQUEsRUFDZDtBQUFBLEVBRUEsUUFBdUI7QUFDckIsU0FBSyxVQUFVO0FBQ2YsV0FBTyxRQUFRLFFBQUE7QUFBQSxFQUNqQjtBQUFBLEVBRUEsSUFBSSxTQUFrQjtBQUNwQixXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUEsRUFFQSxPQUFPLFVBQVUsWUFBWTtBQUMzQixVQUFNLEtBQUssSUFBSSxNQUFBO0FBQ2YsVUFBTSxHQUFHLEtBQUE7QUFDVCxXQUFPO0FBQUEsRUFDVDtBQUFBO0FBQUE7QUFBQSxFQUlBLFVBQVU7QUFDUixXQUFPLEtBQUssU0FBUztBQUFBLEVBQ3ZCO0FBQUE7QUFBQTtBQUFBLEVBS0EsT0FBd0I7QUFDdEIsV0FBTyxLQUFLLE1BQUE7QUFBQSxFQUNkO0FBQUEsRUFFQSxNQUFNLFVBQVUsU0FBNkM7QUFDM0QsV0FBTyxLQUFLLFdBQVcsT0FBTztBQUFBLEVBQ2hDO0FBQUE7QUFBQTtBQUFBLEVBS0EsTUFBTSxZQUFZLFNBQWtEO0FBQ2xFLFdBQU8sS0FBSyxhQUFhLE9BQU87QUFBQSxFQUNsQztBQUFBO0FBQUE7QUFBQSxFQUtBLFNBQVMsU0FHVztBQUNsQixXQUFPLEtBQUssVUFBVSxPQUFPO0FBQUEsRUFDL0I7QUFBQSxFQUVBLE1BQU0sU0FBUyxPQUFnQztBQUM3QyxVQUFNLFlBQVksS0FBSyxLQUFLLEtBQUs7QUFDakMsUUFBSSxDQUFDLFdBQVc7QUFDZCxZQUFNLElBQUksTUFBTSxVQUFVLEtBQUssYUFBYTtBQUFBLElBQzlDO0FBQ0EsV0FBTyxRQUFRLFFBQVEsVUFBVSxNQUFNLE1BQU07QUFBQSxFQUMvQztBQUFBO0FBQUE7QUFBQSxFQUtBLE1BQU0sU0FBMEM7QUFDOUMsV0FBTyxLQUFLLE9BQU8sT0FBTztBQUFBLEVBQzVCO0FBQUE7QUFBQTtBQUFBLEVBSUEsTUFBTSxZQUFZLFVBQXNDO0FBQ3RELFVBQU0sUUFBUSxLQUFLLEtBQUssUUFBUTtBQUNoQyxXQUFPLFFBQVEsT0FBTztBQUFBLEVBQ3hCO0FBQUEsRUFFQSxvQkFBb0IsU0FBZ0Q7QUFDbEUsV0FBTyxLQUFLLHFCQUFxQixPQUFPO0FBQUEsRUFDMUM7QUFBQSxFQUVBLE1BQU0sZUFBb0M7QUFDeEMsVUFBTSxTQUFTLEtBQUssS0FBSyxVQUFVO0FBQ25DLFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNUTtBQUFBLEVBRUEsV0FBVyxJQUFJLFFBQUE7QUFBQSxFQUNmLFVBQVU7QUFBQSxFQUVWLE9BQWUsSUFBSSxFQUFZO0FBQUE7QUFBQSxFQUd2QyxNQUFjLFFBQVE7QUFDcEIsU0FBSyxXQUFXLElBQUksUUFBUSxJQUFJO0FBQ2hDLFNBQUssZUFBQTtBQUNMLFNBQUssa0JBQUE7QUFDTCxVQUFNLEtBQUssU0FBUyxtQkFBQTtBQUNwQixRQUFJLEtBQUssSUFBSTtBQUViLFNBQUssU0FBUyxRQUFBO0FBQUEsRUFDaEI7QUFBQTtBQUFBLEVBR1EsaUJBQWlCLE1BQU07QUFDN0IsVUFBTSxXQUFXLFFBQVE7QUFFekIsU0FBSyxLQUFLLFlBQVksSUFBSTtBQUFBLE1BQ3hCLE9BQU87QUFBQSxNQUNQLE9BQU8sQ0FBQyxRQUFRO0FBQUEsTUFDaEIsV0FBVyxTQUFTO0FBQUEsSUFBQSxDQUNyQjtBQUFBLEVBQ0g7QUFBQTtBQUFBLEVBR1Esb0JBQW9CO0FBQ3pCLFNBQUssS0FBYSxRQUFRO0FBQzNCLFFBQUksS0FBSyxNQUFNO0FBQUEsTUFDYixzQkFBc0I7QUFBQSxJQUFBLENBQ3ZCO0FBQUEsRUFDSDtBQUFBO0FBQUEsRUFHUSxpQkFBaUIsVUFBb0I7QUFDM0MsVUFBTSxRQUFRLEtBQUssS0FBSyxRQUFRO0FBQ2hDLFVBQU0sUUFBUTtBQUNkLFFBQUksT0FBTyxFQUFFLHNCQUFzQixNQUFBLENBQU87QUFBQSxFQUM1QztBQUFBO0FBQUEsRUFHQSxNQUFjLHFCQUFxQixTQUVqQjtBQUdoQixVQUFNLFdBQVcsUUFBUTtBQUN6QixVQUFNLEtBQUssU0FBUyw4QkFBOEIsUUFBUTtBQUUxRCxVQUFNLEVBQUUsUUFBUTtBQUdoQixVQUFNLFlBQVksSUFBSSxRQUFRO0FBRzlCLFVBQU0saUJBQWlCLE1BQU0sS0FBSyxTQUFTLGVBQWUsR0FBRztBQUc3RCxRQUFJLENBQUMsZ0JBQWdCO0FBQ25CLFdBQUssYUFBYSxXQUFXLEdBQUc7QUFBQSxJQUNsQyxPQUFPO0FBQ0wsV0FBSyxhQUFhLGdCQUFnQixTQUFTO0FBQUEsSUFDN0M7QUFBQSxFQUNGO0FBQUE7QUFBQSxFQUdRLGFBQWEsV0FBcUIsVUFBb0I7QUFFNUQsZ0JBQVksSUFBSSxTQUFTO0FBQ3pCLFNBQUssS0FBSyxVQUFVLE1BQU0sS0FBSyxTQUFTO0FBQ3hDLFNBQUssU0FBUywyQkFBMkIsS0FBSyxLQUFLLFNBQVM7QUFHNUQsVUFBTSxRQUFtQjtBQUFBLE1BQ3ZCLE9BQU8sVUFBVTtBQUFBLE1BQ2pCLE9BQU8sQ0FBQTtBQUFBLE1BQ1AsV0FBVyxVQUFVO0FBQUEsSUFBQTtBQUd2QixTQUFLLEtBQUssUUFBUSxNQUFNLElBQUksS0FBSztBQUdqQyxTQUFLLGlCQUFpQixRQUFRO0FBQzlCLFNBQUssa0JBQUE7QUFBQSxFQUNQO0FBQUE7QUFBQSxFQUdRLGFBQWEsZ0JBQTBCLFdBQXFCO0FBRWxFLFFBQUksZUFBZSxRQUFRLFdBQVcsVUFBVSxRQUFRLFFBQVE7QUFDOUQ7QUFBQSxJQUNGO0FBR0EsZ0JBQVksSUFBSSxTQUFTO0FBQ3pCLFNBQUssS0FBSyxVQUFVLE1BQU0sS0FBSyxTQUFTO0FBQ3hDLFNBQUssU0FBUywyQkFBMkIsS0FBSyxLQUFLLFNBQVM7QUFHNUQsVUFBTSxRQUFRLEtBQUssS0FBSyxVQUFVLEdBQUc7QUFDckMsVUFBTSxZQUFZLFVBQVU7QUFHNUIsU0FBSyxpQkFBaUIsVUFBVSxHQUFHO0FBQ25DLFNBQUssa0JBQUE7QUFBQSxFQUNQO0FBQUE7QUFBQSxFQUlBLE1BQWMsUUFBeUI7QUFDckMsV0FBTyxLQUFLLEtBQUssSUFBSTtBQUFBLEVBQ3ZCO0FBQUE7QUFBQSxFQUdBLE1BQWMsV0FBVyxTQUE2QztBQUNwRSxVQUFNLEtBQUssU0FBUywyQkFBMkIsUUFBUSxLQUFLO0FBRTVELFVBQU0sUUFBUSxLQUFLLEtBQUssUUFBUSxLQUFLO0FBRXJDLFdBQU87QUFBQSxNQUNMLENBQUMsUUFBUSxLQUFLLEdBQUcsS0FBSyxLQUFLO0FBQUEsSUFBQTtBQUFBLEVBRS9CO0FBQUE7QUFBQSxFQUdBLE1BQWMsYUFBYSxTQUFrRDtBQUMzRSxVQUFNLEtBQUssU0FBUywyQkFBMkIsUUFBUSxLQUFLO0FBRTVELFdBQVEsS0FBSyxLQUFLLFFBQVEsS0FBSyxFQUFnQjtBQUFBLEVBQ2pEO0FBQUE7QUFBQSxFQUdBLE1BQWMsT0FBTyxTQUEwQztBQUM3RCxVQUFNLFlBQVksSUFBSSxRQUFRLElBQUk7QUFDbEMsU0FBSyxrQkFBa0IsU0FBUztBQUNoQyxVQUFNLFNBQVMsT0FBTyxLQUFLLFNBQVM7QUFDcEMsUUFBSSxTQUFTO0FBRWIsVUFBTSxLQUFLLFNBQVMsMEJBQTBCLFFBQVEsSUFBSTtBQUMxRCxVQUFNLEtBQUssU0FBUyxrQ0FBa0MsUUFBUSxJQUFJO0FBRWxFLGVBQVcsU0FBUyxRQUFRO0FBQzFCLFVBQUksTUFBTSxXQUFXLEdBQUcsR0FBRztBQUN6QjtBQUFBLE1BQ0Y7QUFFQSxZQUFNLFdBQVcsS0FBSyxLQUFLLEtBQUs7QUFDaEMsWUFBTSxXQUFXLFVBQVUsS0FBSztBQUdoQyxpQkFBVyxRQUFRLFNBQVMsT0FBTztBQUNqQyxjQUFNLE9BQU8sS0FBSztBQUNsQixjQUFNLFNBQVMsU0FBUyxNQUFNLEtBQUssQ0FBQyxNQUFNLEVBQUUsVUFBVSxJQUFJO0FBQzFELFlBQUksQ0FBQyxRQUFRO0FBQ1gsbUJBQVMsTUFBTSxLQUFLLElBQVc7QUFBQSxRQUNqQztBQUFBLE1BQ0Y7QUFFQSxXQUFLLFNBQVMsMkJBQTJCLFFBQVE7QUFBQSxJQUNuRDtBQUdBLFNBQUssa0JBQUE7QUFBQSxFQUNQO0FBQUE7QUFBQSxFQUdBLE1BQWMsVUFBVSxTQUdKO0FBQ2xCLFVBQU0sS0FBSyxTQUFTLDJCQUEyQixRQUFRLEtBQUs7QUFDNUQsVUFBTSxLQUFLLFNBQVM7QUFBQSxNQUNsQixRQUFRO0FBQUEsTUFDUixPQUFPLEtBQUssUUFBUSxLQUFLO0FBQUEsSUFBQTtBQUkzQixVQUFNLFFBQVEsS0FBSyxLQUFLLFFBQVEsS0FBSztBQUdyQyxVQUFNLG9CQUFvQixNQUFNLE1BQU0sT0FBTyxDQUFDLFFBQVE7QUFDcEQsaUJBQVcsVUFBVSxRQUFRLE9BQU87QUFDbEMsY0FBTSxJQUFJLElBQUksTUFBTTtBQUNwQixjQUFNLElBQUksUUFBUSxNQUFNLE1BQU07QUFDOUIsWUFBSSxNQUFNLFFBQVEsTUFBTSxRQUFXO0FBQ2pDLGlCQUFPO0FBQUEsUUFDVDtBQUVBLFlBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHO0FBQ2pCLGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFDQSxhQUFPO0FBQUEsSUFDVCxDQUFDO0FBR0QsVUFBTSxnQkFBMkI7QUFBQSxNQUMvQixPQUFPLE1BQU07QUFBQSxNQUNiLE9BQU87QUFBQSxJQUFBO0FBR1QsU0FBSyxTQUFTLDJCQUEyQixhQUFhO0FBRXRELFVBQU0sU0FBaUI7QUFBQSxNQUNyQixDQUFDLFFBQVEsS0FBSyxHQUFHO0FBQUEsSUFBQTtBQUduQixXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsa0JBQWtCLFFBQWdCO0FBQ2hDLHNCQUFrQixRQUFRLENBQUMsVUFBVTtBQUNuQyxZQUFNLE9BQU8sT0FBTyxLQUFLLEVBQUU7QUFFM0IsaUJBQVcsT0FBTyxNQUFNO0FBQ3RCLG1CQUFXLE9BQU8sS0FBSztBQUNyQixjQUFJLElBQUksR0FBRyxNQUFNLE1BQU07QUFDckIsbUJBQU8sSUFBSSxHQUFHO0FBQUEsVUFDaEI7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFDRjtBQ2hUTyxNQUFNLG1CQUFtQixNQUFtQjtBQUNqRCxTQUFPO0FBQUEsSUFDTCxJQUFJLElBQUksTUFBQTtBQUFBLElBQ1IsV0FBVyxZQUFZO0FBQUEsSUFHdkI7QUFBQSxJQUVBLFlBQVksWUFBWTtBQUFBLElBRXhCO0FBQUEsSUFDQSxXQUFXLFlBQVk7QUFBQSxJQUV2QjtBQUFBLElBRUEsVUFBVSxZQUFZO0FBQUEsSUFFdEI7QUFBQSxFQUFBO0FBRUo7QUMwQk8sTUFBTSxZQUNYO0FDekJLLE1BQU0sa0JBQWtCLENBQUMsV0FBZ0M7QUFDOUQsUUFBTSxTQUFzQixDQUFBO0FBSTVCLG9CQUFrQixRQUFRLENBQUMsZUFBZSxVQUFVO0FBQ2xELFVBQU0sYUFBb0QsQ0FBQTtBQUMxRCxXQUFPLGFBQWEsSUFBSTtBQUN4QixlQUFXLFlBQVksTUFBTSxPQUFPO0FBQ2xDLGlCQUFXLFNBQVMsS0FBSyxJQUFJLENBQUE7QUFBQSxJQUMvQjtBQUFBLEVBQ0YsQ0FBQztBQUlELG9CQUFrQixRQUFRLENBQUMsZ0JBQWdCLGdCQUFnQjtBQUV6RCxlQUFXLGtCQUFrQixZQUFZLE9BQU87QUFHOUMsY0FBUSxZQUFZLE9BQUE7QUFBQSxRQUNsQixLQUFLO0FBQ0gsOEJBQW9CLGdCQUFnQixnQkFBZ0IsTUFBTTtBQUMxRDtBQUFBLFFBRUYsS0FBSyxVQUFVO0FBQ2IsMEJBQWdCLGdCQUFnQixnQkFBZ0IsTUFBTTtBQUN0RDtBQUFBLFFBQ0Y7QUFBQSxRQUVBLEtBQUssWUFBWTtBQUVmO0FBQUEsUUFDRjtBQUFBLFFBRUEsS0FBSyxTQUFTO0FBQ1oseUJBQWUsZ0JBQWdCLGdCQUFnQixNQUFNO0FBQ3JEO0FBQUEsUUFDRjtBQUFBLFFBRUEsS0FBSyxXQUFXO0FBQ2QsMkJBQWlCLGdCQUFnQixnQkFBZ0IsTUFBTTtBQUN2RDtBQUFBLFFBQ0Y7QUFBQSxNQUFBO0FBQUEsSUFFSjtBQUFBLEVBQ0YsQ0FBQztBQUVELFNBQU87QUFDVDtBQUtBLE1BQU0sc0JBQXNCLENBQzFCLGlCQUNBLFdBQ0EsV0FDRztBQUNILFFBQU0sZ0JBQWdCLFVBQVU7QUFFaEMsYUFBVyxvQkFBb0IsV0FBVztBQUN4QyxRQUFJLGlCQUFpQixXQUFXLEdBQUcsR0FBRztBQUNwQztBQUFBLElBQ0Y7QUFFQSxRQUFJLENBQUMsaUJBQWlCLFNBQVMsS0FBSyxHQUFHO0FBQ3JDO0FBQUEsSUFDRjtBQUVBLFVBQU0saUJBQWlCLGlCQUFpQixNQUFNLEdBQUcsRUFBRTtBQUNuRCxVQUFNLGVBQWUsVUFBVSxnQkFBZ0I7QUFFL0M7QUFBQSxNQUNFO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQUE7QUFBQSxFQUVKO0FBQ0Y7QUFHQSxNQUFNLGtCQUFrQixDQUN0QixpQkFDQSxXQUNBLFdBQ0c7QUFDSCxRQUFNLGlCQUFpQixVQUFVO0FBQ2pDLFFBQU0sZ0JBQWdCLFVBQVU7QUFFaEMsYUFBVyxXQUFXLFVBQVUsS0FBSztBQUNuQyxRQUFJLFFBQVEsV0FBVyxHQUFHLEdBQUc7QUFDM0I7QUFBQSxJQUNGO0FBRUEsVUFBTSxZQUFZLFVBQVUsSUFBSSxPQUFPO0FBRXZDLFdBQU8sUUFBUSxnQkFBZ0IsV0FBVyxpQkFBaUIsYUFBYTtBQUFBLEVBQzFFO0FBQ0Y7QUFHQSxNQUFNLGlCQUFpQixDQUNyQixpQkFDQSxXQUNBLFdBQ0c7QUFDSCxRQUFNLGdCQUFnQixVQUFVO0FBRWhDLGFBQVcsU0FBUyxVQUFVLFFBQVE7QUFDcEMsVUFBTSxpQkFBaUI7QUFDdkIsVUFBTSxlQUFlLFVBQVUsT0FBTyxLQUFLO0FBQzNDO0FBQUEsTUFDRTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUFBO0FBQUEsRUFFSjtBQUNGO0FBR0EsTUFBTSxtQkFBbUIsQ0FDdkIsaUJBQ0EsV0FDQSxXQUNHO0FBQ0gsUUFBTSxnQkFBZ0IsVUFBVTtBQUVoQyxhQUFXLFFBQVEsVUFBVSxPQUFPO0FBQ2xDLFVBQU0saUJBQWlCLEtBQUs7QUFDNUIsVUFBTSxlQUFlLEtBQUs7QUFDMUI7QUFBQSxNQUNFO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQUE7QUFBQSxFQUVKO0FBQ0Y7QUFHQSxNQUFNLFNBQVMsQ0FDYixRQUNBLGdCQUNBLGNBQ0EsaUJBQ0Esa0JBQ0c7QUFDSCxRQUFNLDBCQUEyQixPQUFPLGNBQWMsTUFBTSxDQUFBO0FBQzVELFFBQU0sNkJBQThCLHdCQUF3QixZQUFZLE1BQ3RFLENBQUE7QUFFRiw2QkFBMkIsZUFBZSxNQUFNLENBQUE7QUFDaEQsNkJBQTJCLGVBQWUsRUFBRSxhQUFhLE1BQU0sQ0FBQTtBQUNqRTsifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rljson/io",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.58",
|
|
4
4
|
"description": "Low level interface for reading and writing RLJSON data",
|
|
5
5
|
"homepage": "https://github.com/rljson/io",
|
|
6
6
|
"bugs": "https://github.com/rljson/io/issues",
|
|
@@ -23,21 +23,21 @@
|
|
|
23
23
|
"@types/node": "^24.10.1",
|
|
24
24
|
"@typescript-eslint/eslint-plugin": "^8.47.0",
|
|
25
25
|
"@typescript-eslint/parser": "^8.47.0",
|
|
26
|
-
"@vitest/coverage-v8": "^4.0.
|
|
26
|
+
"@vitest/coverage-v8": "^4.0.12",
|
|
27
27
|
"cross-env": "^10.1.0",
|
|
28
28
|
"eslint": "^9.39.1",
|
|
29
|
-
"eslint-plugin-jsdoc": "^61.
|
|
29
|
+
"eslint-plugin-jsdoc": "^61.4.0",
|
|
30
30
|
"eslint-plugin-tsdoc": "^0.5.0",
|
|
31
31
|
"globals": "^16.5.0",
|
|
32
32
|
"jsdoc": "^4.0.5",
|
|
33
33
|
"read-pkg": "^10.0.0",
|
|
34
34
|
"typescript": "~5.9.3",
|
|
35
35
|
"typescript-eslint": "^8.47.0",
|
|
36
|
-
"vite": "^7.2.
|
|
36
|
+
"vite": "^7.2.4",
|
|
37
37
|
"vite-node": "^5.2.0",
|
|
38
38
|
"vite-plugin-dts": "^4.5.4",
|
|
39
39
|
"vite-tsconfig-paths": "^5.1.4",
|
|
40
|
-
"vitest": "^4.0.
|
|
40
|
+
"vitest": "^4.0.12",
|
|
41
41
|
"vitest-dom": "^0.1.1"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|