@napi-rs/cli 3.10.4 → 3.10.5
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/cli.js +1174 -53
- package/dist/index.cjs +1173 -52
- package/dist/index.d.cts +19 -7
- package/dist/index.d.ts +19 -7
- package/dist/index.js +1174 -53
- package/docs/build.md +1 -0
- package/docs/wasi.md +149 -8
- package/package.json +2 -2
- package/src/api/__tests__/__snapshots__/templates.spec.ts.md +2498 -132
- package/src/api/__tests__/__snapshots__/templates.spec.ts.snap +0 -0
- package/src/api/__tests__/templates.spec.ts +266 -6
- package/src/api/build.ts +38 -1
- package/src/api/templates/load-wasi-template.ts +807 -24
- package/src/commands/__tests__/build.spec.ts +6 -0
- package/src/def/build.ts +13 -0
- package/src/utils/__tests__/ohos-selfsign.spec.ts +285 -0
- package/src/utils/__tests__/reconciliation.spec.ts +19 -0
- package/src/utils/config.ts +10 -6
- package/src/utils/index.ts +1 -0
- package/src/utils/misc.ts +5 -4
- package/src/utils/ohos-selfsign.ts +646 -0
package/dist/index.d.ts
CHANGED
|
@@ -96,6 +96,7 @@ declare abstract class BaseBuildCommand extends Command {
|
|
|
96
96
|
features?: string[];
|
|
97
97
|
allFeatures?: boolean;
|
|
98
98
|
noDefaultFeatures?: boolean;
|
|
99
|
+
ohosSign: boolean;
|
|
99
100
|
/**
|
|
100
101
|
* Return the parsed build options.
|
|
101
102
|
*/
|
|
@@ -133,6 +134,7 @@ declare abstract class BaseBuildCommand extends Command {
|
|
|
133
134
|
features: string[] | undefined;
|
|
134
135
|
allFeatures: boolean | undefined;
|
|
135
136
|
noDefaultFeatures: boolean | undefined;
|
|
137
|
+
ohosSign: boolean;
|
|
136
138
|
};
|
|
137
139
|
}
|
|
138
140
|
/**
|
|
@@ -273,6 +275,12 @@ interface BuildOptions$1 {
|
|
|
273
275
|
* Do not activate the `default` feature
|
|
274
276
|
*/
|
|
275
277
|
noDefaultFeatures?: boolean;
|
|
278
|
+
/**
|
|
279
|
+
* Whether to self-sign the built binary for OpenHarmony targets by injecting a `.codesign` fs-verity section, so the `.so` can be loaded on HarmonyOS devices. Only works with `*-unknown-linux-ohos` targets
|
|
280
|
+
*
|
|
281
|
+
* @default true
|
|
282
|
+
*/
|
|
283
|
+
ohosSign?: boolean;
|
|
276
284
|
}
|
|
277
285
|
//#endregion
|
|
278
286
|
//#region src/utils/log.d.ts
|
|
@@ -425,12 +433,16 @@ interface UserNapiConfig {
|
|
|
425
433
|
* Whether the generated WASI loaders bootstrap the `napi-async-runtime`
|
|
426
434
|
* CurrentThread JavaScript hosts.
|
|
427
435
|
*
|
|
428
|
-
* A binding built with the `napi-async-runtime` crate
|
|
429
|
-
* `CurrentThread` flavor on every WebAssembly target
|
|
430
|
-
* flavor
|
|
431
|
-
*
|
|
432
|
-
*
|
|
433
|
-
*
|
|
436
|
+
* A binding built with the `napi-async-runtime` crate defaults to the
|
|
437
|
+
* `CurrentThread` flavor on every WebAssembly target. It is the only
|
|
438
|
+
* flavor on threadless `wasm32-wasip1`; `wasm32-wasip1-threads` also
|
|
439
|
+
* accepts an explicitly configured `MultiThread`. Under `CurrentThread`
|
|
440
|
+
* its futures make no progress until a task host is registered, and its
|
|
441
|
+
* timers never fire until a timer host is, so the loader must install
|
|
442
|
+
* both right after instantiation and unregister them before the
|
|
443
|
+
* environment is destroyed. A `MultiThread` binding uses neither host and
|
|
444
|
+
* the installed task host is unref'd, so leaving this enabled is also
|
|
445
|
+
* correct for an addon that picks its flavor at runtime.
|
|
434
446
|
*
|
|
435
447
|
* Enabling this emits that bootstrap in the node, browser and deferred
|
|
436
448
|
* (workerd) loaders, and declares `@napi-rs/async-runtime` in the
|
|
@@ -1131,4 +1143,4 @@ export declare function createVersionCommand(args: string[]): VersionCommand;
|
|
|
1131
1143
|
export declare function createNewCommand(args: string[]): NewCommand;
|
|
1132
1144
|
//#endregion
|
|
1133
1145
|
export type { GenerateTypeDefOptions, WriteJsBindingOptions };
|
|
1134
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsIm5hbWVzIjpbIkJ1aWxkT3B0aW9ucyIsIlJhd0J1aWxkT3B0aW9ucyIsIlJhd05ld09wdGlvbnMiLCJ2ZXJzaW9uIiwidmVyc2lvbiJdLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWYvYXJ0aWZhY3RzLmQudHMiLCIuLi9zcmMvYXBpL2FydGlmYWN0cy5kLnRzIiwiLi4vc3JjL2RlZi9idWlsZC5kLnRzIiwiLi4vc3JjL3V0aWxzL2xvZy5kLnRzIiwiLi4vc3JjL3V0aWxzL3RhcmdldC5kLnRzIiwiLi4vc3JjL3V0aWxzL2NvbmZpZy5kLnRzIiwiLi4vc3JjL2FwaS9idWlsZC5kLnRzIiwiLi4vc3JjL2RlZi9jcmVhdGUtbnBtLWRpcnMuZC50cyIsIi4uL3NyYy9hcGkvY3JlYXRlLW5wbS1kaXJzLmQudHMiLCIuLi9zcmMvZGVmL25ldy5kLnRzIiwiLi4vc3JjL2FwaS9uZXcuZC50cyIsIi4uL3NyYy9kZWYvcHJlLXB1Ymxpc2guZC50cyIsIi4uL3NyYy9hcGkvcHJlLXB1Ymxpc2guZC50cyIsIi4uL3NyYy9kZWYvcmVuYW1lLmQudHMiLCIuLi9zcmMvYXBpL3JlbmFtZS5kLnRzIiwiLi4vc3JjL2RlZi91bml2ZXJzYWxpemUuZC50cyIsIi4uL3NyYy9hcGkvdW5pdmVyc2FsaXplLmQudHMiLCIuLi9zcmMvZGVmL3ZlcnNpb24uZC50cyIsIi4uL3NyYy9hcGkvdmVyc2lvbi5kLnRzIiwiLi4vc3JjL2NvbW1hbmRzL2FydGlmYWN0cy5kLnRzIiwiLi4vc3JjL2NvbW1hbmRzL2J1aWxkLmQudHMiLCIuLi9zcmMvY29tbWFuZHMvY3JlYXRlLW5wbS1kaXJzLmQudHMiLCIuLi9zcmMvY29tbWFuZHMvbmV3LmQudHMiLCIuLi9zcmMvY29tbWFuZHMvcHJlLXB1Ymxpc2guZC50cyIsIi4uL3NyYy9jb21tYW5kcy9yZW5hbWUuZC50cyIsIi4uL3NyYy9jb21tYW5kcy91bml2ZXJzYWxpemUuZC50cyIsIi4uL3NyYy9jb21tYW5kcy92ZXJzaW9uLmQudHMiLCIuLi9zcmMvaW5kZXguZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VBcnRpZmFjdHNDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgb3V0cHV0RGlyOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgYnVpbGRPdXRwdXREaXI/OiBzdHJpbmc7XG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIGN3ZDogc3RyaW5nO1xuICAgICAgICBjb25maWdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgICAgICBvdXRwdXREaXI6IHN0cmluZztcbiAgICAgICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgICAgIGJ1aWxkT3V0cHV0RGlyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgfTtcbn1cbi8qKlxuICogQ29weSBhcnRpZmFjdHMgZnJvbSBHaXRodWIgQWN0aW9ucyBpbnRvIG5wbSBwYWNrYWdlcyBhbmQgcmVhZHkgdG8gcHVibGlzaFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFydGlmYWN0c09wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiB3aGVyZSBuYXBpIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbiwgYWxsIG90aGVyIHBhdGhzIG9wdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgcGF0aFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgcHJvY2Vzcy5jd2QoKVxuICAgICAqL1xuICAgIGN3ZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBwYWNrYWdlLmpzb25gXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAncGFja2FnZS5qc29uJ1xuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHRoZSBmb2xkZXIgd2hlcmUgYWxsIGJ1aWx0IGAubm9kZWAgZmlsZXMgcHV0LCBzYW1lIGFzIGAtLW91dHB1dC1kaXJgIG9mIGJ1aWxkIGNvbW1hbmRcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICcuL2FydGlmYWN0cydcbiAgICAgKi9cbiAgICBvdXRwdXREaXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIHRoZSBucG0gcGFja2FnZXMgcHV0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbnBtJ1xuICAgICAqL1xuICAgIG5wbURpcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHRoZSBidWlsZCBvdXRwdXQgZGlyLCBvbmx5IG5lZWRlZCB3aGVuIHRhcmdldHMgY29udGFpbiBhIFdBU0kgdGFyZ2V0XG4gICAgICovXG4gICAgYnVpbGRPdXRwdXREaXI/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseURlZmF1bHRBcnRpZmFjdHNPcHRpb25zKG9wdGlvbnM6IEFydGlmYWN0c09wdGlvbnMpOiB7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgb3V0cHV0RGlyOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgYnVpbGQgb3V0cHV0IGRpciwgb25seSBuZWVkZWQgd2hlbiB0YXJnZXRzIGNvbnRhaW4gYSBXQVNJIHRhcmdldFxuICAgICAqL1xuICAgIGJ1aWxkT3V0cHV0RGlyPzogc3RyaW5nO1xufTtcbiIsImltcG9ydCB7IHR5cGUgQXJ0aWZhY3RzT3B0aW9ucyB9IGZyb20gJy4uL2RlZi9hcnRpZmFjdHMuanMnO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY29sbGVjdEFydGlmYWN0cyh1c2VyT3B0aW9uczogQXJ0aWZhY3RzT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4iLCJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VCdWlsZENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBzdGF0aWMgcGF0aHM6IHN0cmluZ1tdW107XG4gICAgc3RhdGljIHVzYWdlOiBpbXBvcnQoXCJjbGlwYW5pb25cIikuVXNhZ2U7XG4gICAgdGFyZ2V0Pzogc3RyaW5nO1xuICAgIGN3ZD86IHN0cmluZztcbiAgICBtYW5pZmVzdFBhdGg/OiBzdHJpbmc7XG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgdGFyZ2V0RGlyPzogc3RyaW5nO1xuICAgIG91dHB1dERpcj86IHN0cmluZztcbiAgICBwbGF0Zm9ybT86IGJvb2xlYW47XG4gICAganNQYWNrYWdlTmFtZT86IHN0cmluZztcbiAgICBjb25zdEVudW0/OiBib29sZWFuO1xuICAgIHJ1bnRpbWVTdHJpbmdFbnVtPzogYm9vbGVhbjtcbiAgICBqc0JpbmRpbmc/OiBzdHJpbmc7XG4gICAgbm9Kc0JpbmRpbmc/OiBib29sZWFuO1xuICAgIGR0cz86IHN0cmluZztcbiAgICBkdHNIZWFkZXI/OiBzdHJpbmc7XG4gICAgbm9EdHNIZWFkZXI/OiBib29sZWFuO1xuICAgIGR0c0NhY2hlOiBib29sZWFuO1xuICAgIGZvcm1hdD86ICdlc20nIHwgJ2NvbW1vbmpzJztcbiAgICBlc20/OiBib29sZWFuO1xuICAgIGNvbW1vbmpzPzogYm9vbGVhbjtcbiAgICBzdHJpcD86IGJvb2xlYW47XG4gICAgcmVsZWFzZT86IGJvb2xlYW47XG4gICAgdmVyYm9zZT86IGJvb2xlYW47XG4gICAgYmluPzogc3RyaW5nO1xuICAgIHBhY2thZ2U/OiBzdHJpbmc7XG4gICAgcHJvZmlsZT86IHN0cmluZztcbiAgICBjcm9zc0NvbXBpbGU/OiBib29sZWFuO1xuICAgIHVzZUNyb3NzPzogYm9vbGVhbjtcbiAgICB1c2VOYXBpQ3Jvc3M/OiBib29sZWFuO1xuICAgIHdhdGNoPzogYm9vbGVhbjtcbiAgICBmZWF0dXJlcz86IHN0cmluZ1tdO1xuICAgIGFsbEZlYXR1cmVzPzogYm9vbGVhbjtcbiAgICBub0RlZmF1bHRGZWF0dXJlcz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBwYXJzZWQgYnVpbGQgb3B0aW9ucy5cbiAgICAgKi9cbiAgICBnZXRPcHRpb25zKCk6IHtcbiAgICAgICAgdGFyZ2V0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGN3ZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBtYW5pZmVzdFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uZmlnUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgdGFyZ2V0RGlyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIG91dHB1dERpcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwbGF0Zm9ybTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAganNQYWNrYWdlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBjb25zdEVudW06IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIHJ1bnRpbWVTdHJpbmdFbnVtOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBqc0JpbmRpbmc6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbm9Kc0JpbmRpbmc6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGR0czogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBkdHNIZWFkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbm9EdHNIZWFkZXI6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGR0c0NhY2hlOiBib29sZWFuO1xuICAgICAgICBmb3JtYXQ6IFwiZXNtXCIgfCBcImNvbW1vbmpzXCIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGVzbTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29tbW9uanM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIHN0cmlwOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICByZWxlYXNlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICB2ZXJib3NlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBiaW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcGFja2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwcm9maWxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNyb3NzQ29tcGlsZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgdXNlQ3Jvc3M6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIHVzZU5hcGlDcm9zczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgd2F0Y2g6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGZlYXR1cmVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgICAgICAgYWxsRmVhdHVyZXM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIG5vRGVmYXVsdEZlYXR1cmVzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIH07XG59XG4vKipcbiAqIEJ1aWxkIHRoZSBOQVBJLVJTIHByb2plY3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZE9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIGZvciB0aGUgdGFyZ2V0IHRyaXBsZSwgYnlwYXNzZWQgdG8gYGNhcmdvIGJ1aWxkIC0tdGFyZ2V0YFxuICAgICAqL1xuICAgIHRhcmdldD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgQ2FyZ28udG9tbGBcbiAgICAgKi9cbiAgICBtYW5pZmVzdFBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBEaXJlY3RvcnkgZm9yIGFsbCBjcmF0ZSBnZW5lcmF0ZWQgYXJ0aWZhY3RzLCBzZWUgYGNhcmdvIGJ1aWxkIC0tdGFyZ2V0LWRpcmBcbiAgICAgKi9cbiAgICB0YXJnZXREaXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB3aGVyZSBhbGwgdGhlIGJ1aWx0IGZpbGVzIHdvdWxkIGJlIHB1dC4gRGVmYXVsdCB0byB0aGUgY3JhdGUgZm9sZGVyXG4gICAgICovXG4gICAgb3V0cHV0RGlyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEFkZCBwbGF0Zm9ybSB0cmlwbGUgdG8gdGhlIGdlbmVyYXRlZCBub2RlanMgYmluZGluZyBmaWxlLCBlZzogYFtuYW1lXS5saW51eC14NjQtZ251Lm5vZGVgXG4gICAgICovXG4gICAgcGxhdGZvcm0/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFBhY2thZ2UgbmFtZSBpbiBnZW5lcmF0ZWQganMgYmluZGluZyBmaWxlLiBPbmx5IHdvcmtzIHdpdGggYC0tcGxhdGZvcm1gIGZsYWdcbiAgICAgKi9cbiAgICBqc1BhY2thZ2VOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZ2VuZXJhdGUgY29uc3QgZW51bSBmb3IgdHlwZXNjcmlwdCBiaW5kaW5nc1xuICAgICAqL1xuICAgIGNvbnN0RW51bT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRW1pdCBgI1tuYXBpKHN0cmluZ19lbnVtKV1gIGVudW1zIGFzIHJ1bnRpbWUgZW51bXMgKGBleHBvcnQgZGVjbGFyZSBlbnVtYCkgdW5kZXIgYC0tbm8tY29uc3QtZW51bWAuIERlZmF1bHQ6IHR5cGUtb25seSB1bmlvbi5cbiAgICAgKi9cbiAgICBydW50aW1lU3RyaW5nRW51bT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogUGF0aCBhbmQgZmlsZW5hbWUgb2YgZ2VuZXJhdGVkIEpTIGJpbmRpbmcgZmlsZS4gT25seSB3b3JrcyB3aXRoIGAtLXBsYXRmb3JtYCBmbGFnLiBSZWxhdGl2ZSB0byBgLS1vdXRwdXQtZGlyYC5cbiAgICAgKi9cbiAgICBqc0JpbmRpbmc/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBnZW5lcmF0aW9uIEpTIGJpbmRpbmcgZmlsZS4gT25seSB3b3JrcyB3aXRoIGAtLXBsYXRmb3JtYCBmbGFnLlxuICAgICAqL1xuICAgIG5vSnNCaW5kaW5nPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBQYXRoIGFuZCBmaWxlbmFtZSBvZiBnZW5lcmF0ZWQgdHlwZSBkZWYgZmlsZS4gUmVsYXRpdmUgdG8gYC0tb3V0cHV0LWRpcmBcbiAgICAgKi9cbiAgICBkdHM/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQ3VzdG9tIGZpbGUgaGVhZGVyIGZvciBnZW5lcmF0ZWQgdHlwZSBkZWYgZmlsZS4gT25seSB3b3JrcyB3aGVuIGB0eXBlZGVmYCBmZWF0dXJlIGVuYWJsZWQuXG4gICAgICovXG4gICAgZHRzSGVhZGVyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgZGVmYXVsdCBmaWxlIGhlYWRlciBmb3IgZ2VuZXJhdGVkIHR5cGUgZGVmIGZpbGUuIE9ubHkgd29ya3Mgd2hlbiBgdHlwZWRlZmAgZmVhdHVyZSBlbmFibGVkLlxuICAgICAqL1xuICAgIG5vRHRzSGVhZGVyPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGVuYWJsZSB0aGUgZHRzIGNhY2hlLCBkZWZhdWx0IHRvIHRydWVcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBkdHNDYWNoZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIG1vZHVsZSBmb3JtYXQgb2YgdGhlIGdlbmVyYXRlZCBKUyBiaW5kaW5nIGZpbGUuIE9ubHkgd29ya3Mgd2l0aCBgLS1wbGF0Zm9ybWAgZmxhZy4gRGVmYXVsdHMgdG8gYGNvbW1vbmpzYC5cbiAgICAgKi9cbiAgICBmb3JtYXQ/OiAnZXNtJyB8ICdjb21tb25qcyc7XG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIGAtLWZvcm1hdCBlc21gLlxuICAgICAqL1xuICAgIGVzbT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIGAtLWZvcm1hdCBjb21tb25qc2AuXG4gICAgICovXG4gICAgY29tbW9uanM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgc3RyaXAgdGhlIGxpYnJhcnkgdG8gYWNoaWV2ZSB0aGUgbWluaW11bSBmaWxlIHNpemVcbiAgICAgKi9cbiAgICBzdHJpcD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQnVpbGQgaW4gcmVsZWFzZSBtb2RlXG4gICAgICovXG4gICAgcmVsZWFzZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVmVyYm9zZWx5IGxvZyBidWlsZCBjb21tYW5kIHRyYWNlXG4gICAgICovXG4gICAgdmVyYm9zZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQnVpbGQgb25seSB0aGUgc3BlY2lmaWVkIGJpbmFyeVxuICAgICAqL1xuICAgIGJpbj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBCdWlsZCB0aGUgc3BlY2lmaWVkIGxpYnJhcnkgb3IgdGhlIG9uZSBhdCBjd2RcbiAgICAgKi9cbiAgICBwYWNrYWdlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIGFydGlmYWN0cyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJvZmlsZVxuICAgICAqL1xuICAgIHByb2ZpbGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogW2V4cGVyaW1lbnRhbF0gY3Jvc3MgY29tcGlsZSBieSByZXBsYWNpbmcgdGhlIGNhcmdvIHN1YmNvbW1hbmQ6IFdpbmRvd3MgTVNWQyB0YXJnZXRzIGZyb20gYSBub24tV2luZG93cyBob3N0IGJ1aWxkIHdpdGggYGNhcmdvLXh3aW5gIChgd2luZG93cy1nbnVgIHRhcmdldHMgYXJlIHJlamVjdGVkLCBgY2FyZ28teHdpbmAgY2Fubm90IGhhbmRsZSB0aGVtKSwgbm9uLVdpbmRvd3MgdGFyZ2V0cyBidWlsZCB3aXRoIGBjYXJnby16aWdidWlsZGAgKHJlcXVpcmVzIGB6aWdgIG9uIFBBVEgpLiBUaGUgc2VsZWN0ZWQgc3ViY29tbWFuZCBpcyBhdXRvLWluc3RhbGxlZCBvbiBmaXJzdCB1c2UuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGAtLXVzZS1jcm9zc2AsIGAtLXVzZS1uYXBpLWNyb3NzYCBvciBgLS13YXRjaGBcbiAgICAgKi9cbiAgICBjcm9zc0NvbXBpbGU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFtleHBlcmltZW50YWxdIG5vdCByZWNvbW1lbmRlZCwgcHJlZmVyIGAtLWNyb3NzLWNvbXBpbGVgIG9yIGAtLXVzZS1uYXBpLWNyb3NzYDogYnVpbGQgaW4gYSBEb2NrZXIgb3IgUG9kbWFuIGNvbnRhaW5lciB3aXRoIFtjcm9zc10oaHR0cHM6Ly9naXRodWIuY29tL2Nyb3NzLXJzL2Nyb3NzKSwgd2hpY2ggbXVzdCBiZSBpbnN0YWxsZWQgbWFudWFsbHkgYW5kIG5lZWRzIGEgcnVubmluZyBjb250YWluZXIgZW5naW5lLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgLS1jcm9zcy1jb21waWxlYCwgYC0tdXNlLW5hcGktY3Jvc3NgIG9yIGAtLXdhdGNoYFxuICAgICAqL1xuICAgIHVzZUNyb3NzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBbZXhwZXJpbWVudGFsXSBkb3dubG9hZCBhIHByZWJ1aWx0IGdjYyBjcm9zcyB0b29sY2hhaW4gZnJvbSBgQG5hcGktcnMvY3Jvc3MtdG9vbGNoYWluYCAoZ2xpYmMgMi4xNykgYW5kIHNldCBsaW5rZXIgYW5kIEMgY29tcGlsZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBMaW51eCBnbGliYyB0YXJnZXRzIG9ubHkgKHg2NCwgYXJtNjQsIGFybXY3LCBwcGM2NGxlLCBzMzkweCkgb24gYSBMaW51eCB4NjQgb3IgYXJtNjQgaG9zdCwgYW55IG90aGVyIHRhcmdldCBvciBob3N0IGVycm9ycy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC0tY3Jvc3MtY29tcGlsZWAgb3IgYC0tdXNlLWNyb3NzYFxuICAgICAqL1xuICAgIHVzZU5hcGlDcm9zcz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogd2F0Y2ggdGhlIGNyYXRlIGNoYW5nZXMgYW5kIGJ1aWxkIGNvbnRpbnVvdXNseSB3aXRoIGBjYXJnby13YXRjaGAgY3JhdGVzXG4gICAgICovXG4gICAgd2F0Y2g/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGZlYXR1cmVzIHRvIGFjdGl2YXRlXG4gICAgICovXG4gICAgZmVhdHVyZXM/OiBzdHJpbmdbXTtcbiAgICAvKipcbiAgICAgKiBBY3RpdmF0ZSBhbGwgYXZhaWxhYmxlIGZlYXR1cmVzXG4gICAgICovXG4gICAgYWxsRmVhdHVyZXM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIERvIG5vdCBhY3RpdmF0ZSB0aGUgYGRlZmF1bHRgIGZlYXR1cmVcbiAgICAgKi9cbiAgICBub0RlZmF1bHRGZWF0dXJlcz86IGJvb2xlYW47XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseURlZmF1bHRCdWlsZE9wdGlvbnMob3B0aW9uczogQnVpbGRPcHRpb25zKToge1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIGZvciB0aGUgdGFyZ2V0IHRyaXBsZSwgYnlwYXNzZWQgdG8gYGNhcmdvIGJ1aWxkIC0tdGFyZ2V0YFxuICAgICAqL1xuICAgIHRhcmdldD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgQ2FyZ28udG9tbGBcbiAgICAgKi9cbiAgICBtYW5pZmVzdFBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBEaXJlY3RvcnkgZm9yIGFsbCBjcmF0ZSBnZW5lcmF0ZWQgYXJ0aWZhY3RzLCBzZWUgYGNhcmdvIGJ1aWxkIC0tdGFyZ2V0LWRpcmBcbiAgICAgKi9cbiAgICB0YXJnZXREaXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB3aGVyZSBhbGwgdGhlIGJ1aWx0IGZpbGVzIHdvdWxkIGJlIHB1dC4gRGVmYXVsdCB0byB0aGUgY3JhdGUgZm9sZGVyXG4gICAgICovXG4gICAgb3V0cHV0RGlyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEFkZCBwbGF0Zm9ybSB0cmlwbGUgdG8gdGhlIGdlbmVyYXRlZCBub2RlanMgYmluZGluZyBmaWxlLCBlZzogYFtuYW1lXS5saW51eC14NjQtZ251Lm5vZGVgXG4gICAgICovXG4gICAgcGxhdGZvcm0/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFBhY2thZ2UgbmFtZSBpbiBnZW5lcmF0ZWQganMgYmluZGluZyBmaWxlLiBPbmx5IHdvcmtzIHdpdGggYC0tcGxhdGZvcm1gIGZsYWdcbiAgICAgKi9cbiAgICBqc1BhY2thZ2VOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZ2VuZXJhdGUgY29uc3QgZW51bSBmb3IgdHlwZXNjcmlwdCBiaW5kaW5nc1xuICAgICAqL1xuICAgIGNvbnN0RW51bT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRW1pdCBgI1tuYXBpKHN0cmluZ19lbnVtKV1gIGVudW1zIGFzIHJ1bnRpbWUgZW51bXMgKGBleHBvcnQgZGVjbGFyZSBlbnVtYCkgdW5kZXIgYC0tbm8tY29uc3QtZW51bWAuIERlZmF1bHQ6IHR5cGUtb25seSB1bmlvbi5cbiAgICAgKi9cbiAgICBydW50aW1lU3RyaW5nRW51bT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogUGF0aCBhbmQgZmlsZW5hbWUgb2YgZ2VuZXJhdGVkIEpTIGJpbmRpbmcgZmlsZS4gT25seSB3b3JrcyB3aXRoIGAtLXBsYXRmb3JtYCBmbGFnLiBSZWxhdGl2ZSB0byBgLS1vdXRwdXQtZGlyYC5cbiAgICAgKi9cbiAgICBqc0JpbmRpbmc/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBnZW5lcmF0aW9uIEpTIGJpbmRpbmcgZmlsZS4gT25seSB3b3JrcyB3aXRoIGAtLXBsYXRmb3JtYCBmbGFnLlxuICAgICAqL1xuICAgIG5vSnNCaW5kaW5nPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBQYXRoIGFuZCBmaWxlbmFtZSBvZiBnZW5lcmF0ZWQgdHlwZSBkZWYgZmlsZS4gUmVsYXRpdmUgdG8gYC0tb3V0cHV0LWRpcmBcbiAgICAgKi9cbiAgICBkdHM/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQ3VzdG9tIGZpbGUgaGVhZGVyIGZvciBnZW5lcmF0ZWQgdHlwZSBkZWYgZmlsZS4gT25seSB3b3JrcyB3aGVuIGB0eXBlZGVmYCBmZWF0dXJlIGVuYWJsZWQuXG4gICAgICovXG4gICAgZHRzSGVhZGVyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgZGVmYXVsdCBmaWxlIGhlYWRlciBmb3IgZ2VuZXJhdGVkIHR5cGUgZGVmIGZpbGUuIE9ubHkgd29ya3Mgd2hlbiBgdHlwZWRlZmAgZmVhdHVyZSBlbmFibGVkLlxuICAgICAqL1xuICAgIG5vRHRzSGVhZGVyPzogYm9vbGVhbjtcbiAgICBkdHNDYWNoZTogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBUaGUgbW9kdWxlIGZvcm1hdCBvZiB0aGUgZ2VuZXJhdGVkIEpTIGJpbmRpbmcgZmlsZS4gT25seSB3b3JrcyB3aXRoIGAtLXBsYXRmb3JtYCBmbGFnLiBEZWZhdWx0cyB0byBgY29tbW9uanNgLlxuICAgICAqL1xuICAgIGZvcm1hdD86IFwiZXNtXCIgfCBcImNvbW1vbmpzXCI7XG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIGAtLWZvcm1hdCBlc21gLlxuICAgICAqL1xuICAgIGVzbT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIGAtLWZvcm1hdCBjb21tb25qc2AuXG4gICAgICovXG4gICAgY29tbW9uanM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgc3RyaXAgdGhlIGxpYnJhcnkgdG8gYWNoaWV2ZSB0aGUgbWluaW11bSBmaWxlIHNpemVcbiAgICAgKi9cbiAgICBzdHJpcD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQnVpbGQgaW4gcmVsZWFzZSBtb2RlXG4gICAgICovXG4gICAgcmVsZWFzZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVmVyYm9zZWx5IGxvZyBidWlsZCBjb21tYW5kIHRyYWNlXG4gICAgICovXG4gICAgdmVyYm9zZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQnVpbGQgb25seSB0aGUgc3BlY2lmaWVkIGJpbmFyeVxuICAgICAqL1xuICAgIGJpbj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBCdWlsZCB0aGUgc3BlY2lmaWVkIGxpYnJhcnkgb3IgdGhlIG9uZSBhdCBjd2RcbiAgICAgKi9cbiAgICBwYWNrYWdlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIGFydGlmYWN0cyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJvZmlsZVxuICAgICAqL1xuICAgIHByb2ZpbGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogW2V4cGVyaW1lbnRhbF0gY3Jvc3MgY29tcGlsZSBieSByZXBsYWNpbmcgdGhlIGNhcmdvIHN1YmNvbW1hbmQ6IFdpbmRvd3MgTVNWQyB0YXJnZXRzIGZyb20gYSBub24tV2luZG93cyBob3N0IGJ1aWxkIHdpdGggYGNhcmdvLXh3aW5gIChgd2luZG93cy1nbnVgIHRhcmdldHMgYXJlIHJlamVjdGVkLCBgY2FyZ28teHdpbmAgY2Fubm90IGhhbmRsZSB0aGVtKSwgbm9uLVdpbmRvd3MgdGFyZ2V0cyBidWlsZCB3aXRoIGBjYXJnby16aWdidWlsZGAgKHJlcXVpcmVzIGB6aWdgIG9uIFBBVEgpLiBUaGUgc2VsZWN0ZWQgc3ViY29tbWFuZCBpcyBhdXRvLWluc3RhbGxlZCBvbiBmaXJzdCB1c2UuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGAtLXVzZS1jcm9zc2AsIGAtLXVzZS1uYXBpLWNyb3NzYCBvciBgLS13YXRjaGBcbiAgICAgKi9cbiAgICBjcm9zc0NvbXBpbGU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFtleHBlcmltZW50YWxdIG5vdCByZWNvbW1lbmRlZCwgcHJlZmVyIGAtLWNyb3NzLWNvbXBpbGVgIG9yIGAtLXVzZS1uYXBpLWNyb3NzYDogYnVpbGQgaW4gYSBEb2NrZXIgb3IgUG9kbWFuIGNvbnRhaW5lciB3aXRoIFtjcm9zc10oaHR0cHM6Ly9naXRodWIuY29tL2Nyb3NzLXJzL2Nyb3NzKSwgd2hpY2ggbXVzdCBiZSBpbnN0YWxsZWQgbWFudWFsbHkgYW5kIG5lZWRzIGEgcnVubmluZyBjb250YWluZXIgZW5naW5lLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgLS1jcm9zcy1jb21waWxlYCwgYC0tdXNlLW5hcGktY3Jvc3NgIG9yIGAtLXdhdGNoYFxuICAgICAqL1xuICAgIHVzZUNyb3NzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBbZXhwZXJpbWVudGFsXSBkb3dubG9hZCBhIHByZWJ1aWx0IGdjYyBjcm9zcyB0b29sY2hhaW4gZnJvbSBgQG5hcGktcnMvY3Jvc3MtdG9vbGNoYWluYCAoZ2xpYmMgMi4xNykgYW5kIHNldCBsaW5rZXIgYW5kIEMgY29tcGlsZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBMaW51eCBnbGliYyB0YXJnZXRzIG9ubHkgKHg2NCwgYXJtNjQsIGFybXY3LCBwcGM2NGxlLCBzMzkweCkgb24gYSBMaW51eCB4NjQgb3IgYXJtNjQgaG9zdCwgYW55IG90aGVyIHRhcmdldCBvciBob3N0IGVycm9ycy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC0tY3Jvc3MtY29tcGlsZWAgb3IgYC0tdXNlLWNyb3NzYFxuICAgICAqL1xuICAgIHVzZU5hcGlDcm9zcz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogd2F0Y2ggdGhlIGNyYXRlIGNoYW5nZXMgYW5kIGJ1aWxkIGNvbnRpbnVvdXNseSB3aXRoIGBjYXJnby13YXRjaGAgY3JhdGVzXG4gICAgICovXG4gICAgd2F0Y2g/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGZlYXR1cmVzIHRvIGFjdGl2YXRlXG4gICAgICovXG4gICAgZmVhdHVyZXM/OiBzdHJpbmdbXTtcbiAgICAvKipcbiAgICAgKiBBY3RpdmF0ZSBhbGwgYXZhaWxhYmxlIGZlYXR1cmVzXG4gICAgICovXG4gICAgYWxsRmVhdHVyZXM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIERvIG5vdCBhY3RpdmF0ZSB0aGUgYGRlZmF1bHRgIGZlYXR1cmVcbiAgICAgKi9cbiAgICBub0RlZmF1bHRGZWF0dXJlcz86IGJvb2xlYW47XG59O1xuIiwiZGVjbGFyZSBtb2R1bGUgJ29idWcnIHtcbiAgICBpbnRlcmZhY2UgRGVidWdnZXIge1xuICAgICAgICBpbmZvOiB0eXBlb2YgY29uc29sZS5lcnJvcjtcbiAgICAgICAgd2FybjogdHlwZW9mIGNvbnNvbGUuZXJyb3I7XG4gICAgICAgIGVycm9yOiB0eXBlb2YgY29uc29sZS5lcnJvcjtcbiAgICB9XG59XG5leHBvcnQgZGVjbGFyZSBjb25zdCBkZWJ1Z0ZhY3Rvcnk6IChuYW1lc3BhY2U6IHN0cmluZykgPT4gaW1wb3J0KFwib2J1Z1wiKS5EZWJ1Z2dlcjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGRlYnVnOiBpbXBvcnQoXCJvYnVnXCIpLkRlYnVnZ2VyO1xuIiwiZXhwb3J0IHR5cGUgUGxhdGZvcm0gPSBOb2RlSlMuUGxhdGZvcm0gfCAnd2FzbScgfCAnd2FzaScgfCAnb3Blbmhhcm1vbnknO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgVU5JVkVSU0FMX1RBUkdFVFM6IHtcbiAgICByZWFkb25seSAndW5pdmVyc2FsLWFwcGxlLWRhcndpbic6IHJlYWRvbmx5IFtcImFhcmNoNjQtYXBwbGUtZGFyd2luXCIsIFwieDg2XzY0LWFwcGxlLWRhcndpblwiXTtcbn07XG5leHBvcnQgZGVjbGFyZSBjb25zdCBBVkFJTEFCTEVfVEFSR0VUUzogcmVhZG9ubHkgW1wiYWFyY2g2NC1hcHBsZS1kYXJ3aW5cIiwgXCJhYXJjaDY0LWxpbnV4LWFuZHJvaWRcIiwgXCJhYXJjaDY0LXVua25vd24tbGludXgtZ251XCIsIFwiYWFyY2g2NC11bmtub3duLWxpbnV4LW11c2xcIiwgXCJhYXJjaDY0LXVua25vd24tbGludXgtb2hvc1wiLCBcImFhcmNoNjQtcGMtd2luZG93cy1tc3ZjXCIsIFwieDg2XzY0LWFwcGxlLWRhcndpblwiLCBcIng4Nl82NC1wYy13aW5kb3dzLW1zdmNcIiwgXCJ4ODZfNjQtcGMtd2luZG93cy1nbnVcIiwgXCJ4ODZfNjQtdW5rbm93bi1saW51eC1nbnVcIiwgXCJ4ODZfNjQtdW5rbm93bi1saW51eC1tdXNsXCIsIFwieDg2XzY0LXVua25vd24tbGludXgtb2hvc1wiLCBcIng4Nl82NC11bmtub3duLWZyZWVic2RcIiwgXCJpNjg2LXBjLXdpbmRvd3MtbXN2Y1wiLCBcImFybXY3LXVua25vd24tbGludXgtZ251ZWFiaWhmXCIsIFwiYXJtdjctdW5rbm93bi1saW51eC1tdXNsZWFiaWhmXCIsIFwiYXJtdjctbGludXgtYW5kcm9pZGVhYmlcIiwgXCJ1bml2ZXJzYWwtYXBwbGUtZGFyd2luXCIsIFwibG9vbmdhcmNoNjQtdW5rbm93bi1saW51eC1nbnVcIiwgXCJyaXNjdjY0Z2MtdW5rbm93bi1saW51eC1nbnVcIiwgXCJwb3dlcnBjNjRsZS11bmtub3duLWxpbnV4LWdudVwiLCBcInMzOTB4LXVua25vd24tbGludXgtZ251XCIsIFwid2FzbTMyLXdhc2lwMVwiLCBcIndhc20zMi13YXNpcDEtdGhyZWFkc1wiXTtcbmV4cG9ydCB0eXBlIFRhcmdldFRyaXBsZSA9ICh0eXBlb2YgQVZBSUxBQkxFX1RBUkdFVFMpW251bWJlcl07XG5leHBvcnQgZGVjbGFyZSBjb25zdCBERUZBVUxUX1RBUkdFVFM6IHJlYWRvbmx5IFtcIng4Nl82NC1hcHBsZS1kYXJ3aW5cIiwgXCJhYXJjaDY0LWFwcGxlLWRhcndpblwiLCBcIng4Nl82NC1wYy13aW5kb3dzLW1zdmNcIiwgXCJ4ODZfNjQtdW5rbm93bi1saW51eC1nbnVcIl07XG5leHBvcnQgZGVjbGFyZSBjb25zdCBUQVJHRVRfTElOS0VSOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xudHlwZSBOb2RlSlNBcmNoID0gJ2FybScgfCAnYXJtNjQnIHwgJ2lhMzInIHwgJ2xvb25nNjQnIHwgJ21pcHMnIHwgJ21pcHNlbCcgfCAncHBjJyB8ICdwcGM2NCcgfCAncmlzY3Y2NCcgfCAnczM5MCcgfCAnczM5MHgnIHwgJ3gzMicgfCAneDY0JyB8ICd1bml2ZXJzYWwnIHwgJ3dhc20zMic7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBOb2RlQXJjaFRvQ3B1OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgVW5pQXJjaHNCeVBsYXRmb3JtOiBQYXJ0aWFsPFJlY29yZDxQbGF0Zm9ybSwgTm9kZUpTQXJjaFtdPj47XG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldCB7XG4gICAgdHJpcGxlOiBzdHJpbmc7XG4gICAgcGxhdGZvcm1BcmNoQUJJOiBzdHJpbmc7XG4gICAgcGxhdGZvcm06IFBsYXRmb3JtO1xuICAgIGFyY2g6IE5vZGVKU0FyY2g7XG4gICAgYWJpOiBzdHJpbmcgfCBudWxsO1xufVxuZXhwb3J0IHR5cGUgV2FzaUZsYXZvciA9ICdzaW5nbGUnIHwgJ3RocmVhZHMnO1xuZXhwb3J0IGludGVyZmFjZSBXYXNpVGFyZ2V0IHtcbiAgICBjYW5vbmljYWxUcmlwbGU6IHN0cmluZztcbiAgICBmbGF2b3I6IFdhc2lGbGF2b3I7XG4gICAgcGxhdGZvcm1BcmNoQUJJOiBzdHJpbmc7XG59XG4vKipcbiAqIFJlc29sdmUgaGlzdG9yaWNhbCBXQVNJIHNwZWxsaW5ncyB0byBvbmUgYnVpbGQgdGFyZ2V0IGFuZCBvbmUgYXJ0aWZhY3RcbiAqIGlkZW50aXR5LiBgd2FzbTMyLXdhc2lgIGhpc3RvcmljYWxseSBwcm9kdWNlZCB0aGUgdGhyZWFkZWQgcGFja2FnZSwgc28gaXRcbiAqIG11c3QgbmV2ZXIgYmUgaW5mZXJyZWQgYXMgdGhyZWFkbGVzcyBtZXJlbHkgYmVjYXVzZSBpdHMgbmFtZSBsYWNrcyB0aGVcbiAqIGAtdGhyZWFkc2Agc3VmZml4LlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnZXRXYXNpVGFyZ2V0KHRhcmdldDogc3RyaW5nIHwgUGljazxUYXJnZXQsICd0cmlwbGUnPik6IFdhc2lUYXJnZXQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB3YXNpVGFyZ2V0SGFzVGhyZWFkcyh0YXJnZXQ6IHN0cmluZyB8IFBpY2s8VGFyZ2V0LCAndHJpcGxlJz4pOiBib29sZWFuO1xuLyoqXG4gKiBEZXRlY3QgdGhlIG1ham9yIHZlcnNpb24gb2YgYSB3YXNpLXNkayBpbnN0YWxsYXRpb24uXG4gKlxuICogd2FzaS1saWJjIGRyb3BwZWQgdGhlIHVudXNlZCBgaW50IG9wYCBwYXJhbWV0ZXIgZnJvbVxuICogYF9fd2FzaWxpYmNfZnV0ZXhfd2FpdF9hdG9taWNfd2FpdGAgYW5kIGBfX3dhc2lsaWJjX2Z1dGV4X3dhaXRfbWF5YmVfYnVzeWAsXG4gKiBhbmQgd2FzaS1zZGsgMzQgaXMgdGhlIGZpcnN0IHJlbGVhc2UgdGhhdCBzaGlwcyB0aGUgMy1hcmd1bWVudCBzaWduYXR1cmUuXG4gKiBTdGF0aWMgYXJjaGl2ZXMgY29tcGlsZWQgYWdhaW5zdCB0aGUgdHdvIHNpZ25hdHVyZXMgY2Fubm90IGJlIG1peGVkLCBzbyB0aGVcbiAqIGVtbmFwaSBhcmNoaXZlcyBoYXZlIHRvIGJlIHBpY2tlZCBieSB3YXNpLXNkayB2ZXJzaW9uLCBub3QgYnkgdGFyZ2V0IHRyaXBsZVxuICogYWxvbmUuXG4gKlxuICogYDx3YXNpU2RrUGF0aD4vVkVSU0lPTmAgaXMgdGhlIHByaW1hcnkgc2lnbmFsOiBldmVyeSByZWxlYXNlIHNoaXBzIGl0IGFuZFxuICogaXRzIGZpcnN0IGxpbmUgaXMgdGhlIHZlcnNpb24gKGAyNy4wYCwgYDMzLjArbWAsIGAzNC4wYCwgLi4uKS4gVGhlXG4gKiBgd2FzaS92ZXJzaW9uLmhgIGhlYWRlciBjYXJyeWluZyBgX193YXNpX3Nka19tYWpvcl9fYCBvbmx5IGFwcGVhcnMgZnJvbVxuICogd2FzaS1zZGsgMzAgb253YXJkcywgc28gaXQgc3RheXMgYSBmYWxsYmFjayBmb3IgdHJlZXMgd2l0aG91dCBhIGBWRVJTSU9OYC5cbiAqXG4gKiBSZXR1cm5zIGBudWxsYCB3aGVuIG5laXRoZXIgc2lnbmFsIGlzIHJlYWRhYmxlIG9yIHBhcnNlYWJsZS4gRGV0ZWN0aW9uIG11c3RcbiAqIG5ldmVyIHRocm93OiBhbiB1bmtub3duIHdhc2ktc2RrIGRlZ3JhZGVzIHRvIHRoZSBsZWdhY3kgYXJjaGl2ZXMgaW5zdGVhZCBvZlxuICogZmFpbGluZyB0aGUgYnVpbGQuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHdhc2lTZGtNYWpvclZlcnNpb24od2FzaVNka1BhdGg6IHN0cmluZyk6IG51bWJlciB8IG51bGw7XG4vKipcbiAqIFBhdGggdG8gdGhlIHdhc2ktbGliYyB0aGF0IGNhcmdvIGxpbmtzIHdoZW4gbm8gd2FzaS1zZGsgaXMgY29uZmlndXJlZC5cbiAqXG4gKiBXaXRob3V0IGBXQVNJX1NES19QQVRIYCB0aGUgdGFyZ2V0IGxpbmtzIHRocm91Z2ggYHJ1c3QtbGxkYCBhZ2FpbnN0IHRoZVxuICogd2FzaS1saWJjIGJ1bmRsZWQgd2l0aCB0aGUgUnVzdCBzdGFuZGFyZCBsaWJyYXJ5LCBzbyB0aGF0IGNvcHkg4oCUIG5vdCBhXG4gKiB3YXNpLXNkayDigJQgZGVjaWRlcyB0aGUgZnV0ZXggQUJJLlxuICpcbiAqIGBjd2RgIG11c3QgYmUgdGhlIGRpcmVjdG9yeSBDYXJnbyBpcyBzcGF3bmVkIGluLCBiZWNhdXNlIHRoYXQgaXMgd2hhdFxuICogc2VsZWN0cyB0aGUgdG9vbGNoYWluLlxuICpcbiAqIFJldHVybnMgYG51bGxgIHdoZW4gYHJ1c3RjYCBjYW5ub3QgYmUgcXVlcmllZCBvciB0aGUgdGFyZ2V0IGlzIG5vdFxuICogaW5zdGFsbGVkLiBOZXZlciB0aHJvd3M6IGFuIHVuZGV0ZWN0YWJsZSBzeXNyb290IGRlZ3JhZGVzIHRvIHRoZSBsZWdhY3lcbiAqIGFyY2hpdmVzLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBydXN0QnVuZGxlZFdhc2lMaWJjKHdhc2lUYXJnZXQ6IHN0cmluZywgY3dkPzogc3RyaW5nKTogc3RyaW5nIHwgbnVsbDtcbi8qKlxuICogV2hldGhlciBhIHdhc2ktbGliYyBhcmNoaXZlIGNhcnJpZXMgdGhlIDMtYXJndW1lbnQgZnV0ZXggQUJJLlxuICpcbiAqIFJldHVybnMgYG51bGxgIHdoZW4gdGhlIGFyY2hpdmUgY2Fubm90IGJlIHJlYWQsIHNvIGNhbGxlcnMgY2FuIHRlbGxcbiAqIFwiZGVmaW5pdGVseSB0aGUgbGVnYWN5IEFCSVwiIGFwYXJ0IGZyb20gXCJjb3VsZCBub3QgdGVsbFwiLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB3YXNpTGliY0hhc05ld0Z1dGV4QWJpKGxpYmNBcmNoaXZlUGF0aDogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4gfCBudWxsO1xuLyoqXG4gKiBBIHRyaXBsZSBpcyBhIHNwZWNpZmljIGZvcm1hdCBmb3Igc3BlY2lmeWluZyBhIHRhcmdldCBhcmNoaXRlY3R1cmUuXG4gKiBUcmlwbGVzIG1heSBiZSByZWZlcnJlZCB0byBhcyBhIHRhcmdldCB0cmlwbGUgd2hpY2ggaXMgdGhlIGFyY2hpdGVjdHVyZSBmb3IgdGhlIGFydGlmYWN0IHByb2R1Y2VkLCBhbmQgdGhlIGhvc3QgdHJpcGxlIHdoaWNoIGlzIHRoZSBhcmNoaXRlY3R1cmUgdGhhdCB0aGUgY29tcGlsZXIgaXMgcnVubmluZyBvbi5cbiAqIFRoZSBnZW5lcmFsIGZvcm1hdCBvZiB0aGUgdHJpcGxlIGlzIGA8YXJjaD48c3ViPi08dmVuZG9yPi08c3lzPi08YWJpPmAgd2hlcmU6XG4gKiAgIC0gYGFyY2hgID0gVGhlIGJhc2UgQ1BVIGFyY2hpdGVjdHVyZSwgZm9yIGV4YW1wbGUgYHg4Nl82NGAsIGBpNjg2YCwgYGFybWAsIGB0aHVtYmAsIGBtaXBzYCwgZXRjLlxuICogICAtIGBzdWJgID0gVGhlIENQVSBzdWItYXJjaGl0ZWN0dXJlLCBmb3IgZXhhbXBsZSBgYXJtYCBoYXMgYHY3YCwgYHY3c2AsIGB2NXRlYCwgZXRjLlxuICogICAtIGB2ZW5kb3JgID0gVGhlIHZlbmRvciwgZm9yIGV4YW1wbGUgYHVua25vd25gLCBgYXBwbGVgLCBgcGNgLCBgbnZpZGlhYCwgZXRjLlxuICogICAtIGBzeXNgID0gVGhlIHN5c3RlbSBuYW1lLCBmb3IgZXhhbXBsZSBgbGludXhgLCBgd2luZG93c2AsIGBkYXJ3aW5gLCBldGMuIG5vbmUgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGJhcmUtbWV0YWwgd2l0aG91dCBhbiBPUy5cbiAqICAgLSBgYWJpYCA9IFRoZSBBQkksIGZvciBleGFtcGxlIGBnbnVgLCBgYW5kcm9pZGAsIGBlYWJpYCwgZXRjLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwYXJzZVRyaXBsZShyYXdUcmlwbGU6IHN0cmluZyk6IFRhcmdldDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGdldFN5c3RlbURlZmF1bHRUYXJnZXQoKTogVGFyZ2V0O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZ2V0VGFyZ2V0TGlua2VyKHRhcmdldDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuLyoqXG4gKiBMb2FkZXItZmlsZSBzdWZmaXggZm9yIGEgV0FTSSBmbGF2b3IsIGRlcml2ZWQgZnJvbSBpdHMgYHBsYXRmb3JtQXJjaEFCSWA6XG4gKiB0aGUgbGVnYWN5IHRocmVhZGVkIGZsYXZvciBrZWVwcyB0aGUgaGlzdG9yaWNhbCBgd2FzaWAgc3RlbVxuICogKGA8YmluYXJ5TmFtZT4ud2FzaS5janNgLCBgPGJpbmFyeU5hbWU+Lndhc2ktYnJvd3Nlci5qc2ApLCB3aGlsZSBlYWNoXG4gKiBkaXN0aW5jdGx5IG5hbWVkIG5vbi10aHJlYWRlZCBmbGF2b3IgZGVyaXZlcyBpdHMgb3duXG4gKiAoYDxiaW5hcnlOYW1lPi53YXNpcDEuY2pzYCwgYDxiaW5hcnlOYW1lPi53YXNpcDEtYnJvd3Nlci5qc2AsIC4uLikuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHdhc2lMb2FkZXJTdWZmaXgocGxhdGZvcm1BcmNoQUJJOiBzdHJpbmcpOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB0YXJnZXRUb0VudlZhcih0YXJnZXQ6IHN0cmluZyk6IHN0cmluZztcbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IHR5cGUgVGFyZ2V0IH0gZnJvbSAnLi90YXJnZXQuanMnO1xuZXhwb3J0IHR5cGUgVmFsdWVPZkNvbnN0QXJyYXk8VD4gPSBUW0V4Y2x1ZGU8a2V5b2YgVCwga2V5b2YgQXJyYXk8YW55Pj5dO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgU3VwcG9ydGVkUGFja2FnZU1hbmFnZXJzOiByZWFkb25seSBbXCJ5YXJuXCIsIFwicG5wbVwiXTtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFN1cHBvcnRlZFRlc3RGcmFtZXdvcmtzOiByZWFkb25seSBbXCJhdmFcIl07XG5leHBvcnQgdHlwZSBTdXBwb3J0ZWRQYWNrYWdlTWFuYWdlciA9IFZhbHVlT2ZDb25zdEFycmF5PHR5cGVvZiBTdXBwb3J0ZWRQYWNrYWdlTWFuYWdlcnM+O1xuZXhwb3J0IHR5cGUgU3VwcG9ydGVkVGVzdEZyYW1ld29yayA9IFZhbHVlT2ZDb25zdEFycmF5PHR5cGVvZiBTdXBwb3J0ZWRUZXN0RnJhbWV3b3Jrcz47XG4vKipcbiAqIFBhY2thZ2UgbWFuYWdlcnMgdGhhdCBtYXkgcHVibGlzaCB0aGUgKipyb290KiogcGFja2FnZSwgZGlzdGluZ3Vpc2hlZCBieVxuICogd2hldGhlciB0aGV5IHJld3JpdGUgdGhlIG1hbmlmZXN0IHdoaWxlIHBhY2tpbmcgaXQuXG4gKlxuICogYHlhcm5gIG1lYW5zIHlhcm4gYmVycnkgKD49IDIpOyBZYXJuIENsYXNzaWMgKDEueCkgcGFja3MgdGhlIHJhdyBtYW5pZmVzdFxuICogbGlrZSBucG0gZG9lcyBhbmQgaXMgc3BlbGxlZCBgeWFybi1jbGFzc2ljYC5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgUm9vdFB1Ymxpc2hlcnM6IHJlYWRvbmx5IFtcIm5wbVwiLCBcInBucG1cIiwgXCJ5YXJuXCIsIFwieWFybi1jbGFzc2ljXCJdO1xuZXhwb3J0IHR5cGUgUm9vdFB1Ymxpc2hlciA9IFZhbHVlT2ZDb25zdEFycmF5PHR5cGVvZiBSb290UHVibGlzaGVycz47XG5leHBvcnQgaW50ZXJmYWNlIFVzZXJOYXBpQ29uZmlnIHtcbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBiaW5hcnkgdG8gYmUgZ2VuZXJhdGVkLCBkZWZhdWx0IHRvIGBpbmRleGBcbiAgICAgKi9cbiAgICBiaW5hcnlOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIE5hbWUgb2YgdGhlIG5wbSBwYWNrYWdlLCBkZWZhdWx0IHRvIHRoZSBuYW1lIG9mIHJvb3QgcGFja2FnZS5qc29uIG5hbWVcbiAgICAgKlxuICAgICAqIEFsd2F5cyBnaXZlbiBgQHNjb3BlL3BrZ2AgYW5kIGFyY2ggc3VmZml4IHdpbGwgYmUgYXBwZW5kZWQgbGlrZSBgQHNjb3BlL3BrZy1saW51eC1nbnUteDY0YFxuICAgICAqL1xuICAgIHBhY2thZ2VOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEFsbCB0YXJnZXRzIHRoZSBjcmF0ZSB3aWxsIGJlIGNvbXBpbGVkIGZvclxuICAgICAqL1xuICAgIHRhcmdldHM/OiBzdHJpbmdbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbnBtIGNsaWVudCBwcm9qZWN0IHVzZXMuXG4gICAgICovXG4gICAgbnBtQ2xpZW50Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBwYWNrYWdlIG1hbmFnZXIgdGhhdCBwdWJsaXNoZXMgdGhlICoqcm9vdCoqIHBhY2thZ2UuXG4gICAgICpcbiAgICAgKiBgbmFwaSBwcmUtcHVibGlzaGAgcHVibGlzaGVzIG9ubHkgdGhlIGdlbmVyYXRlZCBwZXItcGxhdGZvcm0gcGFja2FnZXM7IHRoZVxuICAgICAqIHJvb3QgcGFja2FnZSBpcyBwYWNrZWQgYW5kIHB1Ymxpc2hlZCBieSB0aGUgY2FsbGVyLCBzbyB0aGlzIGNhbm5vdCBiZVxuICAgICAqIGluZmVycmVkIHJlbGlhYmx5LiBwbnBtIGFuZCB5YXJuIGJlcnJ5IHJlcGxhY2UgYGV4cG9ydHNgIHdpdGhcbiAgICAgKiBgcHVibGlzaENvbmZpZy5leHBvcnRzYCB3aGlsZSBwYWNraW5nLCBzbyB1bmRlciB0aG9zZSBwdWJsaXNoZXJzXG4gICAgICogYG5hcGkgcHJlLXB1Ymxpc2hgIHZhbGlkYXRlcyBvbmx5IHRoZSBwdWJsaXNoLWVmZmVjdGl2ZSBleHBvcnQgbWFwIGFuZCB0aGVcbiAgICAgKiBsb2NhbCBgZXhwb3J0c2AgbWF5IHBvaW50IGF0IGRldmVsb3BtZW50LW9ubHkgc291cmNlcy4gbnBtIGFuZCBZYXJuXG4gICAgICogQ2xhc3NpYyBzaGlwIGBleHBvcnRzYCB1bnRvdWNoZWQuXG4gICAgICpcbiAgICAgKiBVbnNldCDigJQgdGhlIGRlZmF1bHQg4oCUIHZhbGlkYXRlcyBib3RoIG1hcHMsIHdoaWNoIGlzIGNvcnJlY3QgZm9yIGV2ZXJ5XG4gICAgICogcHVibGlzaGVyIGJ1dCByZWplY3RzIGRldmVsb3BtZW50LW9ubHkgY29uZGl0aW9ucyBzdWNoIGFzXG4gICAgICogYFwiZGV2XCI6IFwiLi9zcmMvaW5kZXgudHNcImAuXG4gICAgICovXG4gICAgcm9vdFB1Ymxpc2hlcj86IFJvb3RQdWJsaXNoZXI7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBnZW5lcmF0ZSBjb25zdCBlbnVtIGZvciB0eXBlc2NyaXB0IGJpbmRpbmdzXG4gICAgICovXG4gICAgY29uc3RFbnVtPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBFbWl0IGAjW25hcGkoc3RyaW5nX2VudW0pXWAgZW51bXMgYXMgcnVudGltZSBlbnVtcyAoYGV4cG9ydCBkZWNsYXJlIGVudW1gKSB1bmRlciBgLS1uby1jb25zdC1lbnVtYC4gRGVmYXVsdDogdHlwZS1vbmx5IHVuaW9uLlxuICAgICAqL1xuICAgIHJ1bnRpbWVTdHJpbmdFbnVtPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBkdHMgaGVhZGVyIHByZXBlbmQgdG8gdGhlIGdlbmVyYXRlZCBkdHMgZmlsZVxuICAgICAqL1xuICAgIGR0c0hlYWRlcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBkdHMgaGVhZGVyIGZpbGUgcGF0aCB0byBiZSBwcmVwZW5kZWQgdG8gdGhlIGdlbmVyYXRlZCBkdHMgZmlsZVxuICAgICAqIGlmIGJvdGggZHRzSGVhZGVyIGFuZCBkdHNIZWFkZXJGaWxlIGFyZSBwcm92aWRlZCwgZHRzSGVhZGVyRmlsZSB3aWxsIGJlIHVzZWRcbiAgICAgKi9cbiAgICBkdHNIZWFkZXJGaWxlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIHdhc20gY29tcGlsYXRpb24gb3B0aW9uc1xuICAgICAqL1xuICAgIHdhc20/OiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYkFzc2VtYmx5L0phdmFTY3JpcHRfaW50ZXJmYWNlL01lbW9yeVxuICAgICAgICAgKiBAZGVmYXVsdCA0MDAwIHBhZ2VzICgyNTAgTWlCKSwgb3IgMTAyNCBwYWdlcyAoNjQgTWlCKSBmb3IgdGhlIGRlZmVycmVkIHdvcmtlcmQgbG9hZGVyXG4gICAgICAgICAqL1xuICAgICAgICBpbml0aWFsTWVtb3J5PzogbnVtYmVyO1xuICAgICAgICAvKipcbiAgICAgICAgICogSW5pdGlhbCBsaW5lYXIgbWVtb3J5LCBpbiA2NCBLaUIgcGFnZXMsIGZvciB0aGUgKip0aHJlYWRsZXNzKipcbiAgICAgICAgICogKGB3YXNtMzItd2FzaXAxYCkgbG9hZGVycyBvbmx5OiB0aGUgTm9kZSBDSlMgbG9hZGVyLCB0aGUgYnJvd3NlciBsb2FkZXJcbiAgICAgICAgICogYW5kIHRoZSBkZWZlcnJlZCBgLi93b3JrZXJkYCBsb2FkZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSB0aHJlYWRlZCBsb2FkZXJzIGFsbG9jYXRlIG9uZSBgc2hhcmVkOiB0cnVlYCBtZW1vcnkgdGhhdCBldmVyeVxuICAgICAgICAgKiB3YXNpLXRocmVhZHMgd29ya2VyIG1hcHMsIHNvIGV2ZXJ5IHdvcmtlciBzdGFjayBhbmQgZXZlcnkgdGhyZWFkJ3NcbiAgICAgICAgICogYWxsb2NhdGlvbnMgY29tZSBvdXQgb2YgaXQgYW5kIGdyb3dpbmcgaXQgaXMgYSBjcm9zcy10aHJlYWQgZXZlbnQ7IGl0IGlzXG4gICAgICAgICAqIHNpemVkIGZvciB0aGUgd2hvbGUgcG9vbCB1cCBmcm9udC4gVGhlIHRocmVhZGxlc3MgbG9hZGVycyBkcml2ZSBhIHNpbmdsZVxuICAgICAgICAgKiB0aHJlYWQgdGhyb3VnaCBhIHBsYWluIGdyb3dhYmxlIGBBcnJheUJ1ZmZlcmA6IHRoZXkgb25seSBoYXZlIHRvIGNsZWFyXG4gICAgICAgICAqIHRoZSBtb2R1bGUncyBvd24gbGluay10aW1lIGZsb29yIChgLXpzdGFjay1zaXplYCBwbHVzIHN0YXRpYyBkYXRhKSBhbmRcbiAgICAgICAgICogZ3JvdyBvbiBkZW1hbmQsIHdoaWNoIGlzIHdoYXQgbGV0cyB0aGUgc2FtZSBidWlsZCBmaXQgYSBob3N0IHdpdGggYSBoYXJkXG4gICAgICAgICAqIGlzb2xhdGUgY2FwIHN1Y2ggYXMgd29ya2VyZCdzIDEyOCBNaUIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEZhbGxzIGJhY2sgdG8gYGluaXRpYWxNZW1vcnlgIHdoZW4gdW5zZXQsIHNvIGV4aXN0aW5nIHByb2plY3RzIGFyZVxuICAgICAgICAgKiB1bmFmZmVjdGVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZGVmYXVsdCBgaW5pdGlhbE1lbW9yeWAgKDQwMDAgcGFnZXMpLCBvciAxMDI0IHBhZ2VzIGZvciB0aGUgZGVmZXJyZWRcbiAgICAgICAgICogICBgLi93b3JrZXJkYCBsb2FkZXJcbiAgICAgICAgICovXG4gICAgICAgIHRocmVhZGxlc3NJbml0aWFsTWVtb3J5PzogbnVtYmVyO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGRlZmF1bHQgNjU1MzYgcGFnZXMgKDRHaUIpXG4gICAgICAgICAqL1xuICAgICAgICBtYXhpbXVtTWVtb3J5PzogbnVtYmVyO1xuICAgICAgICAvKipcbiAgICAgICAgICogV2hldGhlciB0aGUgZ2VuZXJhdGVkIGA8cGFja2FnZU5hbWU+LXdhc20zMi13YXNpYCBwYWNrYWdlIGlzIGRlY2xhcmVkIGFzXG4gICAgICAgICAqIGFuIGBvcHRpb25hbERlcGVuZGVuY3lgIG9mIHRoZSByb290IHBhY2thZ2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIFdoZW4gbmF0aXZlIHRhcmdldHMgYXJlIGNvbmZpZ3VyZWQgdGhlIFdBU0kgcGFja2FnZSBpcyBhIGZhbGxiYWNrIGZvclxuICAgICAgICAgKiBob3N0cyB0aGF0IGNhbm5vdCBsb2FkIGEgYC5ub2RlYCBiaW5hcnksIHNvIGRlY2xhcmluZyBpdCB3b3VsZCBtYWtlIGV2ZXJ5XG4gICAgICAgICAqIGNvbnN1bWVyIGRvd25sb2FkIHRoZSBgLndhc21gIGJpbmFyeSB0aGV5IHdpbGwgbmV2ZXIgbG9hZC4gSXQgaXNcbiAgICAgICAgICogdGhlcmVmb3JlIG9taXR0ZWQgYnkgZGVmYXVsdCBhbmQgaXMgZXhwZWN0ZWQgdG8gYmUgaW5zdGFsbGVkIG9uIGRlbWFuZCBieVxuICAgICAgICAgKiB0aGUgZW52aXJvbm1lbnRzIHRoYXQgbmVlZCBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogV2hlbiBXQVNJIGlzIHRoZSBvbmx5IGNvbmZpZ3VyZWQgdGFyZ2V0IGl0IGlzIHRoZSBwcmltYXJ5IGFydGlmYWN0IGFuZCBpc1xuICAgICAgICAgKiBkZWNsYXJlZCBieSBkZWZhdWx0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBTZXQgdGhpcyBleHBsaWNpdGx5IHRvIG92ZXJyaWRlIGVpdGhlciBkZWZhdWx0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlIHdoZW4gZXZlcnkgY29uZmlndXJlZCB0YXJnZXQgaXMgV0FTSSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAgICAgICAqL1xuICAgICAgICBvcHRpb25hbERlcGVuZGVuY3k/OiBib29sZWFuO1xuICAgICAgICAvKipcbiAgICAgICAgICogV2hldGhlciB0aGUgZ2VuZXJhdGVkIFdBU0kgbG9hZGVycyBib290c3RyYXAgdGhlIGBuYXBpLWFzeW5jLXJ1bnRpbWVgXG4gICAgICAgICAqIEN1cnJlbnRUaHJlYWQgSmF2YVNjcmlwdCBob3N0cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQSBiaW5kaW5nIGJ1aWx0IHdpdGggdGhlIGBuYXBpLWFzeW5jLXJ1bnRpbWVgIGNyYXRlIHJ1bnMgdGhlXG4gICAgICAgICAqIGBDdXJyZW50VGhyZWFkYCBmbGF2b3Igb24gZXZlcnkgV2ViQXNzZW1ibHkgdGFyZ2V0IChpdCBpcyB0aGUgb25seVxuICAgICAgICAgKiBmbGF2b3IgdGhlcmUpLiBJdHMgZnV0dXJlcyBtYWtlIG5vIHByb2dyZXNzIHVudGlsIGEgdGFzayBob3N0IGlzXG4gICAgICAgICAqIHJlZ2lzdGVyZWQsIGFuZCBpdHMgdGltZXJzIG5ldmVyIGZpcmUgdW50aWwgYSB0aW1lciBob3N0IGlzLCBzbyB0aGVcbiAgICAgICAgICogbG9hZGVyIG11c3QgaW5zdGFsbCBib3RoIHJpZ2h0IGFmdGVyIGluc3RhbnRpYXRpb24gYW5kIHVucmVnaXN0ZXIgdGhlbVxuICAgICAgICAgKiBiZWZvcmUgdGhlIGVudmlyb25tZW50IGlzIGRlc3Ryb3llZC5cbiAgICAgICAgICpcbiAgICAgICAgICogRW5hYmxpbmcgdGhpcyBlbWl0cyB0aGF0IGJvb3RzdHJhcCBpbiB0aGUgbm9kZSwgYnJvd3NlciBhbmQgZGVmZXJyZWRcbiAgICAgICAgICogKHdvcmtlcmQpIGxvYWRlcnMsIGFuZCBkZWNsYXJlcyBgQG5hcGktcnMvYXN5bmMtcnVudGltZWAgaW4gdGhlXG4gICAgICAgICAqIGdlbmVyYXRlZCBgPHBhY2thZ2VOYW1lPi13YXNtMzItKmAgcGFja2FnZXMuIFRoZSBsb2FkZXIgZGVsZWdhdGVzIHRoZVxuICAgICAgICAgKiB3aG9sZSBob3N0IGNvbnRyYWN0IOKAlCB0aGUgc2V2ZW4gZXhwb3J0cywgY29udHJhY3QgdmVyc2lvbiA0LCB0aGVcbiAgICAgICAgICogcmVzZXJ2YXRpb24gaWRlbnRpdHksIHRoZSBsaXZlbmVzcyBwcm9iZSBhbmQgdGhlIHJvbGxiYWNrIOKAlCB0byB0aGF0XG4gICAgICAgICAqIHBhY2thZ2UsIHNvIGEgYmluZGluZyB0aGF0IGRvZXMgbm90IGFjdHVhbGx5IGV4cG9zZSB0aGUgY29udHJhY3QgZmFpbHNcbiAgICAgICAgICogbG91ZGx5IGF0IGxvYWQgd2l0aCBgRVJSX05BUElfQVNZTkNfUlVOVElNRV9CSU5ESU5HX01JU01BVENIYC5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIGJvb3RzdHJhcCBydW5zIGFmdGVyIGluc3RhbnRpYXRpb24sIHNvIGFmdGVyIGAjW21vZHVsZV9pbml0XWA6IHRoZVxuICAgICAgICAgKiBob3N0IHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMgYXJlIGV4cG9ydHMgb2YgdGhlIGJpbmRpbmcgaXRzZWxmLiBDb2RlIHRoYXRcbiAgICAgICAgICogcnVucyBkdXJpbmcgbW9kdWxlIHJlZ2lzdHJhdGlvbiBtdXN0IG5vdCBjcmVhdGUgdGltZXJzIChgc2xlZXBfdW50aWxgXG4gICAgICAgICAqIGZhaWxzIGxvdWQgYXQgY3JlYXRpb24gd2l0aG91dCBhIHRpbWVyIGhvc3QpIGFuZCBjYW5ub3QgZXhwZWN0IHRhc2tcbiAgICAgICAgICogcHJvZ3Jlc3MgdW50aWwgdGhlIGxvYWRlciBoYXMgcmV0dXJuZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgICAqL1xuICAgICAgICBhc3luY1J1bnRpbWU/OiBib29sZWFuO1xuICAgICAgICAvKipcbiAgICAgICAgICogQnJvd3NlciB3YXNtIGJpbmRpbmcgY29uZmlndXJhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgYnJvd3Nlcj86IHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2hldGhlciB0byB1c2UgZnMgbW9kdWxlIGluIGJyb3dzZXJcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZnM/OiBib29sZWFuO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaGV0aGVyIHRvIGluaXRpYWxpemUgd2FzbSBhc3luY2hyb25vdXNseVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBhc3luY0luaXQ/OiBib29sZWFuO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaGV0aGVyIHRvIGluamVjdCBgYnVmZmVyYCB0byBlbW5hcGkgY29udGV4dFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBidWZmZXI/OiBib29sZWFuO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaGV0aGVyIHRvIGVtaXQgY3VzdG9tIGV2ZW50cyBmb3IgZXJyb3JzIGluIHdvcmtlclxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBlcnJvckV2ZW50PzogYm9vbGVhbjtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIGJpbmFyeU5hbWUgaW5zdGVhZFxuICAgICAqL1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIHBhY2thZ2VOYW1lIGluc3RlYWRcbiAgICAgKi9cbiAgICBwYWNrYWdlPzoge1xuICAgICAgICBuYW1lPzogc3RyaW5nO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIHRhcmdldHMgaW5zdGVhZFxuICAgICAqL1xuICAgIHRyaXBsZXM/OiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXaGV0aGVyIGVuYWJsZSBkZWZhdWx0IHRhcmdldHNcbiAgICAgICAgICovXG4gICAgICAgIGRlZmF1bHRzOiBib29sZWFuO1xuICAgICAgICAvKipcbiAgICAgICAgICogQWRkaXRpb25hbCB0YXJnZXRzIHRvIGJlIGNvbXBpbGVkIGZvclxuICAgICAgICAgKi9cbiAgICAgICAgYWRkaXRpb25hbD86IHN0cmluZ1tdO1xuICAgIH07XG59XG5leHBvcnQgaW50ZXJmYWNlIENvbW1vblBhY2thZ2VKc29uRmllbGRzIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIGtleXdvcmRzPzogc3RyaW5nW107XG4gICAgYXV0aG9yPzogc3RyaW5nO1xuICAgIGF1dGhvcnM/OiBzdHJpbmdbXTtcbiAgICBsaWNlbnNlPzogc3RyaW5nO1xuICAgIGNwdT86IHN0cmluZ1tdO1xuICAgIG9zPzogc3RyaW5nW107XG4gICAgbGliYz86IHN0cmluZ1tdO1xuICAgIGZpbGVzPzogc3RyaW5nW107XG4gICAgcmVwb3NpdG9yeT86IGFueTtcbiAgICBob21lcGFnZT86IGFueTtcbiAgICBlbmdpbmVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBwdWJsaXNoQ29uZmlnPzogYW55O1xuICAgIGJ1Z3M/OiBhbnk7XG4gICAgbmFwaT86IFVzZXJOYXBpQ29uZmlnO1xuICAgIHR5cGU/OiAnbW9kdWxlJyB8ICdjb21tb25qcyc7XG4gICAgc2NyaXB0cz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgbWFpbj86IHN0cmluZztcbiAgICBtb2R1bGU/OiBzdHJpbmc7XG4gICAgdHlwZXM/OiBzdHJpbmc7XG4gICAgYnJvd3Nlcj86IHN0cmluZztcbiAgICBleHBvcnRzPzogYW55O1xuICAgIGRlcGVuZGVuY2llcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgZGV2RGVwZW5kZW5jaWVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBvcHRpb25hbERlcGVuZGVuY2llcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgYXZhPzoge1xuICAgICAgICB0aW1lb3V0Pzogc3RyaW5nO1xuICAgIH07XG59XG5leHBvcnQgdHlwZSBOYXBpQ29uZmlnID0gUmVxdWlyZWQ8UGljazxVc2VyTmFwaUNvbmZpZywgJ2JpbmFyeU5hbWUnIHwgJ3BhY2thZ2VOYW1lJyB8ICducG1DbGllbnQnPj4gJiBQaWNrPFVzZXJOYXBpQ29uZmlnLCAnd2FzbScgfCAnZHRzSGVhZGVyJyB8ICdkdHNIZWFkZXJGaWxlJyB8ICdjb25zdEVudW0nIHwgJ3J1bnRpbWVTdHJpbmdFbnVtJyB8ICdyb290UHVibGlzaGVyJz4gJiB7XG4gICAgdGFyZ2V0czogVGFyZ2V0W107XG4gICAgcGFja2FnZUpzb246IENvbW1vblBhY2thZ2VKc29uRmllbGRzO1xufTtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlYWROYXBpQ29uZmlnKHBhdGg6IHN0cmluZywgY29uZmlnUGF0aD86IHN0cmluZyk6IFByb21pc2U8TmFwaUNvbmZpZz47XG4iLCJpbXBvcnQgdHlwZSB7IEJ1aWxkT3B0aW9ucyBhcyBSYXdCdWlsZE9wdGlvbnMgfSBmcm9tICcuLi9kZWYvYnVpbGQuanMnO1xuaW1wb3J0IHsgdHlwZSBOYXBpQ29uZmlnLCB0eXBlIFRhcmdldCwgdHlwZSBDYXJnb1dvcmtzcGFjZU1ldGFkYXRhIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xudHlwZSBPdXRwdXRLaW5kID0gJ2pzJyB8ICdkdHMnIHwgJ25vZGUnIHwgJ2V4ZScgfCAnd2FzbSc7XG50eXBlIE91dHB1dCA9IHtcbiAgICBraW5kOiBPdXRwdXRLaW5kO1xuICAgIHBhdGg6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBCdWlsZEZvcm1hdCA9ICdlc20nIHwgJ2NvbW1vbmpzJztcbnR5cGUgQnVpbGRPcHRpb25zID0gUmF3QnVpbGRPcHRpb25zICYge1xuICAgIGNhcmdvT3B0aW9ucz86IHN0cmluZ1tdO1xufTtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFdBU0lfQVJUSUZBQ1RfTUVUQURBVEFfUFJFRklYID0gXCIvLyBuYXBpLXJzLWFydGlmYWN0LW1ldGFkYXRhOlwiO1xuZXhwb3J0IGludGVyZmFjZSBBc3luY1J1bnRpbWVIb3N0Q29udHJhY3RJbnB1dCB7XG4gICAgLyoqIFRoZSBhZGRvbidzIGV4cG9ydCBuYW1lcywgYXMgcmVwb3J0ZWQgYnkgdGhlIHR5cGUgZGVmaW5pdGlvbiBwYXNzLiAqL1xuICAgIGlkZW50czogc3RyaW5nW107XG4gICAgLyoqIFdoZXRoZXIgYG5hcGkud2FzbS5hc3luY1J1bnRpbWVgIGlzIG9uLiAqL1xuICAgIGFzeW5jUnVudGltZTogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGBpZGVudHNgIGlzIHJlYWwgZXhwb3J0IG1ldGFkYXRhLiBgbmFwaS1kZXJpdmVgIHdpdGhvdXQgaXRzXG4gICAgICogYHR5cGUtZGVmYCBmZWF0dXJlIGVtaXRzIG5vIHR5cGUgZGVmaW5pdGlvbnMsIHNvIHRoZSBpZGVudCBsaXN0IGlzIGVtcHR5XG4gICAgICogZm9yIGV2ZXJ5IHN1Y2ggYWRkb24g4oCUIGluY2x1ZGluZyBvbmUgdGhhdCBkb2VzIGV4cG9ydCB0aGUgd2hvbGUgaG9zdFxuICAgICAqIGNvbnRyYWN0LiBBbiBlbXB0eSBsaXN0IGlzIG9ubHkgZXZpZGVuY2Ugd2hlbiB0aGlzIGlzIGB0cnVlYC5cbiAgICAgKi9cbiAgICB0eXBlRGVmQXZhaWxhYmxlOiBib29sZWFuO1xuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmc7XG59XG4vKipcbiAqIENyb3NzLWNoZWNrIGBuYXBpLndhc20uYXN5bmNSdW50aW1lYCBhZ2FpbnN0IHRoZSBhZGRvbidzIGV4cG9ydCBsaXN0LlxuICpcbiAqIFJldHVybnMgdGhlIG1lc3NhZ2UgdG8gdGhyb3cgKGBlcnJvcmApIG9yIHRvIGxvZyAoYHdhcm5pbmdgKSwgaWYgYW55LiBXaXRoXG4gKiBubyB0eXBlLWRlZiBtZXRhZGF0YSB0aGVyZSBpcyBub3RoaW5nIHRvIGNoZWNrIGFnYWluc3QsIHNvIHRoZSBidWlsZCBzYXlzIHNvXG4gKiBhbmQgZGVmZXJzIHRvIHRoZSBsb2FkZXIncyBvd24gcnVudGltZSBkZXRlY3Rpb24uXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNoZWNrQXN5bmNSdW50aW1lSG9zdENvbnRyYWN0KHsgaWRlbnRzLCBhc3luY1J1bnRpbWUsIHR5cGVEZWZBdmFpbGFibGUsIHBhY2thZ2VOYW1lLCB9OiBBc3luY1J1bnRpbWVIb3N0Q29udHJhY3RJbnB1dCk6IHtcbiAgICBlcnJvcj86IHN0cmluZztcbiAgICB3YXJuaW5nPzogc3RyaW5nO1xufTtcbnR5cGUgQ2FyZ29Db25maWdGaW5nZXJwcmludCA9IHJlYWRvbmx5IFtwYXRoOiBzdHJpbmcsIGhhc2g6IHN0cmluZ107XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnZXRDYXJnb0RlcGVuZGVuY3lHcmFwaEZpbmdlcnByaW50KG1ldGFkYXRhOiBDYXJnb1dvcmtzcGFjZU1ldGFkYXRhLCByb290UGFja2FnZUlkOiBzdHJpbmcpOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnZXRUeXBlRGVmQ2FjaGVGb2xkZXIob3B0aW9uczoge1xuICAgIHRhcmdldERpcjogc3RyaW5nO1xuICAgIGNyYXRlTmFtZTogc3RyaW5nO1xuICAgIG1hbmlmZXN0UGF0aDogc3RyaW5nO1xuICAgIHRhcmdldFRyaXBsZTogc3RyaW5nO1xuICAgIHByb2ZpbGU6IHN0cmluZztcbiAgICBmZWF0dXJlcz86IHN0cmluZ1tdO1xuICAgIGFsbEZlYXR1cmVzPzogYm9vbGVhbjtcbiAgICBub0RlZmF1bHRGZWF0dXJlcz86IGJvb2xlYW47XG4gICAgY2FyZ29PcHRpb25zPzogc3RyaW5nW107XG4gICAgcnVzdEZsYWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPjtcbiAgICBjYXJnb1Byb2ZpbGVFbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICAgIGNhcmdvQ29uZmlnPzogQ2FyZ29Db25maWdGaW5nZXJwcmludFtdO1xuICAgIGNhcmdvRGVwZW5kZW5jeUdyYXBoPzogc3RyaW5nO1xufSk6IHN0cmluZztcbi8qKlxuICogTmFtZSBvZiB0aGUgZW1uYXBpIGFyY2hpdmUgZGlyZWN0b3J5IGJ1aWx0IGFnYWluc3QgdGhlIHdhc2ktc2RrIDM0IEFCSS5cbiAqIE9ubHkgdGhlIHRocmVhZGVkIHRhcmdldCBoYXMgb25lOiB0aGUgc2lnbmF0dXJlIGNoYW5nZSBpdCBjYXJyaWVzIGxpdmVzIGluXG4gKiB0aGUgdGhyZWFkcy1vbmx5IGZ1dGV4IGNvZGUuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IEVNTkFQSV9XQVNJX1NES18zNF9MSU5LX0RJUiA9IFwid2FzbTMyLXdhc2lwMS10aHJlYWRzLXdhc2ktc2RrLTM0XCI7XG5leHBvcnQgaW50ZXJmYWNlIEVtbmFwaUxpbmtEaXJTZWxlY3Rpb24ge1xuICAgIC8qKiBEaXJlY3RvcnkgbmFtZSB1bmRlciBgZW1uYXBpL2xpYmAgd2hvc2UgYXJjaGl2ZXMgc2hvdWxkIGJlIGxpbmtlZC4gKi9cbiAgICBsaW5rRGlyTmFtZTogc3RyaW5nO1xuICAgIC8qKiBEZXRlY3RlZCB3YXNpLXNkayBtYWpvciB2ZXJzaW9uLCBgbnVsbGAgd2hlbiBubyB3YXNpLXNkayBpcyBjb25maWd1cmVkLiAqL1xuICAgIHdhc2lTZGtNYWpvcjogbnVtYmVyIHwgbnVsbDtcbiAgICAvKiogYHRydWVgIHdoZW4gdGhlIHRvb2xjaGFpbiBuZWVkcyB0aGUgd2FzaS1zZGsgMzQgYXJjaGl2ZXMuICovXG4gICAgbmVlZHNXYXNpU2RrMzQ6IGJvb2xlYW47XG59XG4vKipcbiAqIFBpY2sgdGhlIGVtbmFwaSBhcmNoaXZlIGRpcmVjdG9yeSBmb3IgYSBXQVNJIGJ1aWxkLlxuICpcbiAqIHdhc2ktbGliYyByZW1vdmVkIHRoZSB1bnVzZWQgYGludCBvcGAgcGFyYW1ldGVyIGZyb21cbiAqIGBfX3dhc2lsaWJjX2Z1dGV4X3dhaXRfYXRvbWljX3dhaXRgIC8gYF9fd2FzaWxpYmNfZnV0ZXhfd2FpdF9tYXliZV9idXN5YCxcbiAqIGFuZCB3YXNpLXNkayAzNCBpcyB0aGUgZmlyc3QgcmVsZWFzZSBzaGlwcGluZyB0aGUgMy1hcmd1bWVudCBzaWduYXR1cmUuXG4gKiBMaW5raW5nIHRoZSBsZWdhY3kgNC1hcmd1bWVudCBhcmNoaXZlcyBhZ2FpbnN0IGEgd2FzaS1zZGsgPj0gMzQgc3lzcm9vdFxuICogbWFrZXMgYHdhc20tbGRgIHJlcG9ydCBgZnVuY3Rpb24gc2lnbmF0dXJlIG1pc21hdGNoYCBhbmQgZW1pdCBhbiBpbnZhbGlkXG4gKiB3YXNtIG1vZHVsZSwgc28gZW1uYXBpIHB1Ymxpc2hlcyBhIHNlY29uZCBhcmNoaXZlIHNldCBmb3IgdGhlIG5ldyBBQkkgYW5kXG4gKiB0aGUgZGlyZWN0b3J5IGhhcyB0byBiZSBjaG9zZW4gYnkgd2FzaS1zZGsgdmVyc2lvbiwgbm90IGJ5IHRhcmdldCB0cmlwbGUuXG4gKlxuICogV2l0aG91dCBgV0FTSV9TREtfUEFUSGAsIGNhcmdvIGxpbmtzIHRocm91Z2ggYHJ1c3QtbGxkYCBhZ2FpbnN0IHRoZVxuICogd2FzaS1saWJjIGJ1bmRsZWQgd2l0aCB0aGUgUnVzdCBzdGFuZGFyZCBsaWJyYXJ5LCBzbyB0aGF0IGFyY2hpdmUgaXNcbiAqIHByb2JlZCBpbnN0ZWFkLiBSdXN0IHBpY2tlZCB1cCB3YXNpLXNkayAzNCBpbiBydXN0LWxhbmcvcnVzdCMxNjE3NzMsIHdoaWNoXG4gKiBsYW5kcyBpbiAxLjEwMCwgYW5kIGEgdG9vbGNoYWluIGNhcnJ5aW5nIGl0IG5lZWRzIHRoZSBuZXcgYXJjaGl2ZXMgZXZlblxuICogdGhvdWdoIG5vIHdhc2ktc2RrIGlzIGNvbmZpZ3VyZWQuXG4gKlxuICogVGhlIGxlZ2FjeSBkaXJlY3Rvcnkgc3RheXMgdGhlIGRlZmF1bHQgd2hlbmV2ZXIgdGhlIEFCSSBjYW5ub3QgYmVcbiAqIGRldGVybWluZWQsIGFuZCBvbGRlciBlbW5hcGkgcmVsZWFzZXMgc2hpcCBpdCBhbG9uZS5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gc2VsZWN0RW1uYXBpTGlua0RpcihlbW5hcGlMaWJEaXI6IHN0cmluZywgd2FzaVRhcmdldDogc3RyaW5nLCBoYXNUaHJlYWRzOiBib29sZWFuLCB3YXNpU2RrUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLCB7IGN3ZCwgcnVzdFdhc2lMaWJjLCB9Pzoge1xuICAgIGN3ZD86IHN0cmluZztcbiAgICBydXN0V2FzaUxpYmM/OiBzdHJpbmcgfCBudWxsO1xufSk6IEVtbmFwaUxpbmtEaXJTZWxlY3Rpb247XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVXYXNpQ29tcGlsZXJGbGFncyh3YXNpU2RrUGF0aDogc3RyaW5nLCB3YXNpVGFyZ2V0OiBzdHJpbmcsIGhhc1RocmVhZHM6IGJvb2xlYW4sIHNoZWxsRXNjYXBlZEZsYWdzPzogYm9vbGVhbik6IHtcbiAgICBjb21waWxlRmxhZ3M6IHN0cmluZztcbiAgICBsaW5rZXJGbGFnczogc3RyaW5nO1xufTtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZUFydGlmYWN0RGVzdGluYXRpb25OYW1lKGJpbmFyeU5hbWU6IHN0cmluZywgdGFyZ2V0OiBUYXJnZXQsIHNvdXJjZU5hbWU6IHN0cmluZywgcGxhdGZvcm06IGJvb2xlYW4pOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzZWxlY3RXYXNpQnJvd3NlclRhcmdldChidWlsZFRhcmdldDogVGFyZ2V0LCBjb25maWd1cmVkVGFyZ2V0czogVGFyZ2V0W10sIGVtaXR0ZWRUYXJnZXRzOiBUYXJnZXRbXSk6IFRhcmdldDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZVdhc2lCcm93c2VyRW50cnkocGFja2FnZU5hbWU6IHN0cmluZywgcGxhdGZvcm1BcmNoQUJJOiBzdHJpbmcsIGlkZW50czogc3RyaW5nW10pOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVXYXNpRGVmZXJyZWRCaW5kaW5nVHlwZURlZihiaW5kaW5nTW9kdWxlU3BlY2lmaWVyOiBzdHJpbmcsIGhhc1R5cGVEZWY6IGJvb2xlYW4sIHBsYXRmb3JtQXJjaEFCST86IHN0cmluZyk6IHN0cmluZztcbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRXYXNtTWVtb3J5IHtcbiAgICAvKiogYHVuZGVmaW5lZGAga2VlcHMgZWFjaCB0ZW1wbGF0ZSdzIG93biBkZWZhdWx0ICg0MDAwLCBvciAxMDI0IGZvciBgLi93b3JrZXJkYCkuICovXG4gICAgaW5pdGlhbE1lbW9yeT86IG51bWJlcjtcbiAgICAvKiogYHVuZGVmaW5lZGAga2VlcHMgdGhlIHRlbXBsYXRlIGRlZmF1bHQgKDY1NTM2KS4gKi9cbiAgICBtYXhpbXVtTWVtb3J5PzogbnVtYmVyO1xufVxuLyoqXG4gKiBSZXNvbHZlIHRoZSBgV2ViQXNzZW1ibHkuTWVtb3J5YCBkZXNjcmlwdG9yIHRoZSBnZW5lcmF0ZWQgbG9hZGVycyBlbWJlZCwgZm9yXG4gKiBvbmUgV0FTSSBmbGF2b3IuXG4gKlxuICogVGhlIHRocmVhZGVkIGxvYWRlcnMgc2hhcmUgb25lIGBzaGFyZWQ6IHRydWVgIG1lbW9yeSB3aXRoIGV2ZXJ5IHdhc2ktdGhyZWFkc1xuICogd29ya2VyLCBzbyBpdCBpcyBzaXplZCBmb3IgdGhlIHdob2xlIHBvb2wuIFRoZSB0aHJlYWRsZXNzIGxvYWRlcnMgaGF2ZSBhXG4gKiBzaW5nbGUgdGhyZWFkIGFuZCBhIHBsYWluIGdyb3dhYmxlIGBBcnJheUJ1ZmZlcmAsIHNvIHRoZXkgb25seSBuZWVkIHRvIGNsZWFyXG4gKiB0aGUgbW9kdWxlJ3MgbGluay10aW1lIGZsb29yIChgLXpzdGFjay1zaXplYCBwbHVzIHN0YXRpYyBkYXRhKSBhbmQgZ3JvdyBvblxuICogZGVtYW5kLiBgbmFwaS53YXNtLnRocmVhZGxlc3NJbml0aWFsTWVtb3J5YCBzaXplcyB0aGUgdGhyZWFkbGVzcyBsb2FkZXJzXG4gKiB3aXRob3V0IHNocmlua2luZyB0aGUgdGhyZWFkZWQgb25lOyB1bnNldCwgaXQgZmFsbHMgYmFjayB0b1xuICogYG5hcGkud2FzbS5pbml0aWFsTWVtb3J5YCBhbmQgbm90aGluZyBjaGFuZ2VzLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByZXNvbHZlV2FzbU1lbW9yeSh3YXNtOiBOYXBpQ29uZmlnWyd3YXNtJ10sIGhhc1RocmVhZHM6IGJvb2xlYW4pOiBSZXNvbHZlZFdhc21NZW1vcnk7XG4vKipcbiAqIFdoZXRoZXIgYSBidWlsZCdzIGRlY2xhcmF0aW9uIGZpbGUgc2hvdWxkIGRlY2xhcmUgYF9fbmFwaUJpbmRpbmdUYXJnZXRgLlxuICpcbiAqIFRoZSBleHBvcnQgZXhpc3RzIG9ubHkgb24gYSBnZW5lcmF0ZWQgbG9hZGVyLCBzbyB0aGUgZGVjbGFyYXRpb24gaGFzIHRvXG4gKiBmb2xsb3cgdGhlIGxvYWRlcnMgYSBidWlsZCBhY3R1YWxseSB3cml0ZXMuIFRoaXMgbWlycm9ycyBib3RoIHdyaXRlcnM6XG4gKlxuICogLSB7QGxpbmsgd3JpdGVKc0JpbmRpbmd9IHdyaXRlcyB0aGUgcm9vdCBsb2FkZXIgZm9yIGAtLXBsYXRmb3JtYCB3aXRob3V0XG4gKiAgIGAtLW5vLWpzLWJpbmRpbmdgIChgcm9vdExvYWRlckNhbmRpZGF0ZWApLCBhbmQgdGhlbiBvbmx5IHdoZW4gdGhlIGJ1aWxkIGhhc1xuICogICBydW50aW1lIGV4cG9ydHMgb3IgYSBXQVNJIGZsYXZvciB0byBmYWxsIGJhY2sgdG8uXG4gKiAtIGBCdWlsZGVyLndyaXRlV2FzaUJpbmRpbmdgIHdyaXRlcyBhIGZsYXZvcidzIGxvYWRlciBzZXQgd2hlbiB0aGF0IGZsYXZvciBpc1xuICogICB0aGUgYnVpbGQgdGFyZ2V0LCBvciB3aGVuIGFuIGVhcmxpZXIgYnVpbGQgb2YgaXQgbGVmdCBtZXRhZGF0YSBvbiBkaXNrXG4gKiAgIChgZW1pdHNXYXNpTG9hZGVyYCkuIEEgbWVyZWx5IGNvbmZpZ3VyZWQgZmxhdm9yIGlzIHNraXBwZWQsIGFuZCBhIGJ1aWxkXG4gKiAgIHRoYXQgc2tpcHMgZXZlcnkgZmxhdm9yIGVtaXRzIG5vIGxvYWRlciB0byBjYXJyeSB0aGUgZXhwb3J0LlxuICpcbiAqIFRoZSBleHBvcnQgbGlzdCBpcyBvbmx5IGtub3duIG9uY2UgdHlwZWdlbiBoYXMgcnVuLCBhbmQgdHlwZWdlbiB3cml0ZXMgdGhlXG4gKiBkZWNsYXJhdGlvbiBmaWxlIGl0c2VsZiwgc28gdGhlIGRlY2lzaW9uIGNvbWVzIGJhY2sgYXMgYSBwcmVkaWNhdGUgb3ZlciB0aGF0XG4gKiBsaXN0IGluc3RlYWQgb2YgYSBmbGFnIHRha2VuIHVwIGZyb250LlxuICpcbiAqIEl0IGdhdGVzIHRoZSAqcmVzZXJ2YXRpb24qIG9mIHRoZSBuYW1lIHRvbyDigJQgYEJ1aWxkZXIuZ2VuZXJhdGVUeXBlRGVmYCBjYWxsc1xuICoge0BsaW5rIGFzc2VydEJpbmRpbmdUYXJnZXRJZGVudEZyZWV9IG9ubHkgd2hlbiB0aGlzIGFuc3dlcnMgYHRydWVgLiBEZWNsYXJpbmdcbiAqIHRoZSBuYW1lIGFuZCBmb3JiaWRkaW5nIGFuIGFkZG9uIGZyb20gZXhwb3J0aW5nIGl0IGFyZSB0aGUgc2FtZSBxdWVzdGlvbiwgYW5kXG4gKiBhIGJ1aWxkIHRoYXQgZW1pdHMgbm8gbG9hZGVyIGFza3MgbmVpdGhlci5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYmluZGluZ1RhcmdldERlY2xhcmF0aW9uUHJlZGljYXRlKGlucHV0OiB7XG4gICAgcm9vdExvYWRlckNhbmRpZGF0ZTogYm9vbGVhbjtcbiAgICBoYXNXYXNpRmFsbGJhY2s6IGJvb2xlYW47XG4gICAgZW1pdHNXYXNpTG9hZGVyOiBib29sZWFuO1xufSk6IChleHBvcnRzOiByZWFkb25seSBzdHJpbmdbXSkgPT4gYm9vbGVhbjtcbi8qKlxuICogVGhlIGAuZC5jdHNgIGNvbnRlbnQgZm9yIGEgV0FTSSBmbGF2b3IgbG9hZGVyLCBkZXJpdmVkIGZyb20gdGhlIHJvb3RcbiAqIGRlY2xhcmF0aW9uIHRoaXMgYnVpbGQgd3JvdGUuXG4gKlxuICogQW4gRVNNIHNvdXJjZSAoYCouZC5tdHNgLCBvciBgKi5kLnRzYCBpbiBhIGBcInR5cGVcIjogXCJtb2R1bGVcImAgcGFja2FnZSkgaXNcbiAqIHJlLWRlY2xhcmVkIHZlcmJhdGltIHdoZW4gbm90aGluZyBpbiBpdCBjaGFuZ2VzIG1lYW5pbmcgdW5kZXIgQ29tbW9uSlNcbiAqIGludGVycHJldGF0aW9uIOKAlCB3aGljaCBpcyBldmVyeXRoaW5nIGEgZ2VuZXJhdGVkIHR5cGVkZWYgYW5kIG1vc3RcbiAqIGAtLWR0cy1oZWFkZXJgcyBjb250YWluLiB7QGxpbmsgY29tbW9uSnNEZWNsYXJhdGlvbkJhcnJpZXJ9IG5hbWVzIHRoZVxuICogY29uc3RydWN0cyB0aGF0IHN0aWxsIHJlZnVzZSwgYW5kIHdoeS5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcHJlcGFyZVdhc2lCaW5kaW5nVHlwZURlZihzb3VyY2U6IHN0cmluZywgc291cmNlUGF0aDogc3RyaW5nLCBkZXN0aW5hdGlvblBhdGg6IHN0cmluZywgaGFzVGhyZWFkczogYm9vbGVhbiwgcGFja2FnZVR5cGU/OiAnbW9kdWxlJyB8ICdjb21tb25qcycpOiBzdHJpbmc7XG4vKipcbiAqIE1ha2UgYSBkZWNsYXJhdGlvbiBmaWxlIGRlY2xhcmUgdGhlIGBfX25hcGlCaW5kaW5nVGFyZ2V0YCBpdHMgbG9hZGVyIGV4cG9ydHMuXG4gKlxuICogYHBsYXRmb3JtQXJjaEFCSWAgbmFtZXMgdGhlIFdBU0kgZmxhdm9yIHRoZSBmaWxlIHR5cGVzLCBhbmQgdGhlIGRlY2xhcmF0aW9uXG4gKiBpcyB0aGVuIHRoYXQgZmxhdm9yJ3MgZXhhY3QgbGl0ZXJhbDsgd2l0aG91dCBpdCB0aGUgZmlsZSBpcyB0aGUgcm9vdCBlbnRyeSdzXG4gKiBhbmQga2VlcHMgdGhlIGZ1bGwgdW5pb24sIHdoaWNoIG9ubHkgdGhlIHJvb3QgZW50cnkgY2FuIHJlYWNoLlxuICpcbiAqIFR3byBraW5kcyBvZiBmaWxlIGFycml2ZSBoZXJlLiBBIFdBU0kgZGVjbGFyYXRpb24gZGVyaXZlZCBmcmVzaCBmcm9tIHRoZSByb290XG4gKiBgaW5kZXguZC50c2AgaW5oZXJpdHMgdGhhdCB1bmlvbiBhbmQgaGFzIHRvIGJlIG5hcnJvd2VkLiBBIGRlY2xhcmF0aW9uIGtlcHRcbiAqIGZyb20gYW4gZWFybGllciBidWlsZCDigJQgYSBidWlsZCB0aGF0IGRvZXMgbm90IHRhcmdldCBXQVNJIHJlZ2VuZXJhdGVzIGV2ZXJ5XG4gKiBkZWNsYXJlZCBmbGF2b3IncyBsb2FkZXIgZnJvbSB0aGUgbWV0YWRhdGEgdGhhdCBmbGF2b3IncyBvd24gYnVpbGQgbGVmdFxuICogYmVoaW5kLCBhbmQgcmV1c2VzIGl0cyBkZWNsYXJhdGlvbiBmaWxlIHZlcmJhdGltIOKAlCBtYXkgcHJlZGF0ZSB0aGUgZXhwb3J0XG4gKiBlbnRpcmVseSwgb3IgY2FycnkgYSB1bmlvbiBhbiBlYXJsaWVyIHZlcnNpb24gb2YgdGhpcyBicmFuY2ggd3JvdGUuXG4gKlxuICogRWl0aGVyIG1heSBhbHNvIGNhcnJ5IGEgZGVjbGFyYXRpb24gbm9ib2R5IGhlcmUgd3JvdGUsIGJlY2F1c2UgYSBwcm9qZWN0J3NcbiAqIG93biBgLS1kdHMtaGVhZGVyYCBtYXkgZGVjbGFyZSB0aGUgZXhwb3J0IHRvIHdvcmsgYXJvdW5kIGxvYWRlcnMgdGhhdCBwcmVkYXRlXG4gKiBpdC4gU28gb3duZXJzaGlwLCBub3QgbWVyZSBwcmVzZW5jZSwgZGVjaWRlcyB3aGF0IGhhcHBlbnMuXG4gKlxuICogVGhyZWUgY2FzZXMsIGRlY2lkZWQgaW4gdGhpcyBvcmRlcjpcbiAqXG4gKiAtIFRoZSBkZWNsYXJhdGlvbiB0aGUgcmVuZGVyZWQgYC5kLnRzYCBoZWFkZXIgb3ducy4gYHJlbmRlcmVkSGVhZGVyYCBpcyB0aGF0XG4gKiAgIGhlYWRlciBhcyB0aGlzIGJ1aWxkIHJlbmRlcmVkIGl0OyBpZiBpdCBkZWNsYXJlcyB0aGUgZXhwb3J0LCB0aGUgcHJvamVjdCdzXG4gKiAgIG93biBkZWNsYXJhdGlvbiB3aW5zOiBub3RoaW5nIGlzIGFwcGVuZGVkLCBhbmQgaXQgaXMgbmV2ZXIgcmV3cml0dGVuLlxuICogICBEZWNsYXJpbmcgaXQgYSBzZWNvbmQgdGltZSB3b3VsZCBiZSBhIFRTMjQ1MSByZWRlY2xhcmF0aW9uLlxuICpcbiAqICAgVGhlIGhlYWRlciBpcyBtYXRjaGVkIGJ5IHRoZSB0ZXh0IG9mIGl0cyBkZWNsYXJhdGlvbiBhZ2FpbnN0IHRoZSBmaXJzdFxuICogICBkZWNsYXJhdGlvbiBpbiB0aGUgZmlsZSwgbm90IGJ5IGEgcHJlZml4IG9mIHRoZSBmaWxlLiBBIFdBU0kgZGVjbGFyYXRpb24gaXNcbiAqICAgZGVyaXZlZCB0aHJvdWdoIHtAbGluayBwcmVwYXJlV2FzaUJpbmRpbmdUeXBlRGVmfSwgd2hpY2ggcmV3cml0ZXMgcmVsYXRpdmVcbiAqICAgaW1wb3J0IHNwZWNpZmllcnMgYW5kLCBmb3IgdGhlIHRocmVhZGxlc3MgZmxhdm9yLCBkcm9wcyBgbm9kZTpzdHJlYW0vd2ViYFxuICogICBpbXBvcnRzIOKAlCBhIGhlYWRlciBjYXJyeWluZyBlaXRoZXIgc3RvcHMgYmVpbmcgYSBsaXRlcmFsIHByZWZpeCBvZiB0aGUgZmlsZVxuICogICBkZXJpdmVkIGZyb20gaXQsIHdoaWxlIHRoZSBkZWNsYXJhdGlvbiBzdGF0ZW1lbnQgaXRzZWxmIGNvbWVzIHRocm91Z2hcbiAqICAgdW50b3VjaGVkIGFuZCBzdGF5cyB0aGUgZmlyc3Qgb25lLCBiZWNhdXNlIHRob3NlIHJld3JpdGVzIG5ldmVyIHJlb3JkZXJcbiAqICAgc3RhdGVtZW50cy4gT24gdGhlIHByZXNlcnZlZCBwYXRoIHRoZSBoZWFkZXIgaW4gaGFuZCBpcyB0aGlzIGJ1aWxkJ3MsIG5vdFxuICogICB0aGUgb25lIHRoZSBrZXB0IGZpbGUgd2FzIHdyaXR0ZW4gd2l0aCwgYW5kIGEga2VwdCBkZWNsYXJhdGlvbiB0aGF0IHJlYWRzXG4gKiAgIGRpZmZlcmVudGx5IGlzIGNvcnJlY3RseSBub3QgdGhlIGhlYWRlcidzLlxuICogLSBBIGRlY2xhcmF0aW9uIHRoZSBoZWFkZXIgZG9lcyBub3Qgb3duLCBhbG9uZSBpbiBpdHMgc3RhdGVtZW50LCB3aG9zZSB0eXBlXG4gKiAgIGlzIGJ1aWx0IG9ubHkgb3V0IG9mIHRoZSBsaXRlcmFscyB0aGlzIENMSSB3cml0ZXNcbiAqICAgKHtAbGluayBpc0dlbmVyYXRlZEJpbmRpbmdUYXJnZXRUeXBlfSksIGlzIG9uZSBvZiBvdXJzLiBTdGFsZSDigJQgYW4gb2xkZXJcbiAqICAgdW5pb24sIG9yIHRoZSBvdGhlciBmbGF2b3IncyBsaXRlcmFsIOKAlCBpdCBpcyByZXBsYWNlZCBpbiBwbGFjZSwgY29tbWVudFxuICogICBhbmQgYWxsLCBzbyBhIGZpbGUga2VwdCBmcm9tIGFuIGVhcmxpZXIgYnVpbGQgZW5kcyB1cCBzYXlpbmcgd2hhdCB0aGVcbiAqICAgbG9hZGVyIHdyaXR0ZW4gYmVzaWRlIGl0IG5vdyByZXBvcnRzLlxuICogLSBBbnkgb3RoZXIgZXhwb3J0IG9mIHRoZSBuYW1lIGlzIHNvbWVvbmUgZWxzZSdzIGFuZCBpcyBwcmVzZXJ2ZWQsIHdpdGhcbiAqICAgbm90aGluZyBhcHBlbmRlZCBiZXNpZGUgaXQuIEEgbG9vc2VyIG1hdGNoIHdvdWxkIHJld3JpdGUgYSBkZWNsYXJhdGlvbiBhXG4gKiAgIGAtLWR0cy1oZWFkZXJgIGNvbnRyaWJ1dGVkLiBUaGF0IGNvdmVycyBhIHN0YXRlbWVudCBkZWNsYXJpbmcgbW9yZSBuYW1lc1xuICogICB0aGFuIHRoaXMgb25lIOKAlCB0aGUgYmxvY2sgYSByZWZyZXNoIHJlcGxhY2VzIHNwYW5zIHRoZW0gdG9vLCBhbmQgdGhpcyBDTElcbiAqICAgd3JpdGVzIHRoZSBkZWNsYXJhdGlvbiBhbG9uZSDigJQgYW5kIGl0IGNvdmVycyBldmVyeSBvdGhlciB3YXkgYSBoZWFkZXIgY2FuXG4gKiAgIGNsYWltIHRoZSBuYW1lOiBhcyBhIGBmdW5jdGlvbmAsIGBjbGFzc2AsIGBlbnVtYCBvciBpbnN0YW50aWF0ZWRcbiAqICAgYG5hbWVzcGFjZWAsIHRocm91Z2ggYW4gYGV4cG9ydCB7IHRhcmdldCBhcyBfX25hcGlCaW5kaW5nVGFyZ2V0IH1gIG9yXG4gKiAgIGBleHBvcnQgKiBhcyBfX25hcGlCaW5kaW5nVGFyZ2V0IGZyb20gJ+KApidgIGNsYXVzZSwgb3IgdGhyb3VnaFxuICogICBgZXhwb3J0IGltcG9ydCBfX25hcGlCaW5kaW5nVGFyZ2V0ID0g4oCmYC4gTm9uZSBvZiB0aG9zZSBsZWF2ZXMgYVxuICogICBkZWNsYXJhdGlvbiBoZXJlIHRvIHJld3JpdGUsIGFuZCBhbiBleHBvcnQgYWRkZWQgYmVzaWRlIGFueSBvZiB0aGVtIGlzIGFcbiAqICAgVHlwZVNjcmlwdCBlcnJvciAoVFMyMzAwLCBUUzIzMjMsIFRTMjQ0MCBvciBUUzI1NjcgYnkgZm9ybSkuXG4gKlxuICogICBBIGhlYWRlciB0aGF0IGV4cG9ydHMgdGhlIG5hbWUgaW4gdHlwZSBzcGFjZSBvbmx5IOKAlCBhIGB0eXBlYCwgYW5cbiAqICAgYGludGVyZmFjZWAsIGEgbmFtZXNwYWNlIHRoYXQgZGVjbGFyZXMgbm8gdmFsdWUg4oCUIGNsYWltcyBub3RoaW5nOiB0aGVcbiAqICAgZGVjbGFyYXRpb24gbWVyZ2VzIHdpdGggaXQsIGFuZCB3aXRoaG9sZGluZyBpdCB3b3VsZCBjb3N0IGEgY29uc3VtZXIgdGhlXG4gKiAgIHZhbHVlIHRoZSBsb2FkZXIgcmVhbGx5IGV4cG9ydHMg4oCUIHNlZSB7QGxpbmsgc2NhbkV4cG9ydGVkTmFtZX0uXG4gKlxuICogQSBkZWNsYXJhdGlvbiBmaWxlIHRoYXQgZXhwb3J0cyBieSBhc3NpZ25tZW50IChgZXhwb3J0ID0gYmluZGluZ2AsIHdoYXQgYVxuICogYnVpbGQgd2l0aG91dCBgbmFwaS1kZXJpdmVgJ3MgYHR5cGUtZGVmYCBmZWF0dXJlIGVtaXRzKSBjYW5ub3QgY2FycnkgYSBuYW1lZFxuICogZXhwb3J0IGRlY2xhcmF0aW9uLCBzbyBpdCBpcyBsZWZ0IGFsb25lOyBpdHMgZXhwb3J0cyBhcmUgdW50eXBlZCBhbnl3YXkuXG4gKiBUaGF0LCB0b28sIGlzIHJlYWQgb2ZmIHRoZSBwYXJzZSDigJQgYSBibG9jayBjb21tZW50IGRvY3VtZW50aW5nIHRoZSBDb21tb25KU1xuICogZm9ybSBpcyBub3QgYW4gZXhwb3J0IGFzc2lnbm1lbnQuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGVuc3VyZUJpbmRpbmdUYXJnZXREZWNsYXJhdGlvbih0eXBlRGVmOiBzdHJpbmcsIHBsYXRmb3JtQXJjaEFCST86IHN0cmluZywgcmVuZGVyZWRIZWFkZXI/OiBzdHJpbmcpOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjb2xsZWN0U3RhbGVXYXNpQnVpbGRPdXRwdXROYW1lcyhiaW5hcnlOYW1lOiBzdHJpbmcsIGJ1aWxkVGFyZ2V0OiBUYXJnZXQsIGNvbmZpZ3VyZWRUYXJnZXRzOiBUYXJnZXRbXSk6IFNldDxzdHJpbmc+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcmVtb3ZlV2FzbUN1c3RvbVNlY3Rpb24oYmluYXJ5OiBVaW50OEFycmF5LCBzZWN0aW9uTmFtZTogc3RyaW5nKTogVWludDhBcnJheTtcbnR5cGUgQnVpbGRGb3JtYXRPcHRpb25zID0ge1xuICAgIGZvcm1hdD86IHN0cmluZztcbiAgICBlc20/OiBib29sZWFuO1xuICAgIGNvbW1vbmpzPzogYm9vbGVhbjtcbn07XG4vKipcbiAqIFJlc29sdmUgdGhlIGV4cGxpY2l0IGJ1aWxkIGZvcm1hdCBhbmQgaXRzIGxlZ2FjeSBDTEkvQVBJIGFsaWFzZXMuXG4gKlxuICogQ29tbW9uSlMgaXMgdGhlIGhpc3RvcmljYWwgZGVmYXVsdC4gVGhlIGFsaWFzZXMgYXJlIGludGVudGlvbmFsbHkga2VwdFxuICogc2VwYXJhdGUgZnJvbSBgZm9ybWF0YCBiZWNhdXNlIGAtLWVzbWAgYW5kIGAtLWNvbW1vbmpzYCBhcmUgYm9vbGVhbiBmbGFncyxcbiAqIHdoaWxlIGAtLWZvcm1hdGAgdGFrZXMgYSB2YWx1ZS5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcmVzb2x2ZUJ1aWxkRm9ybWF0KG9wdGlvbnM6IEJ1aWxkRm9ybWF0T3B0aW9ucyk6IEJ1aWxkRm9ybWF0O1xuLyoqIEJ1aWxkIHRoZSBjb25maWd1cmVkIE5BUEktUlMgY3JhdGUgYW5kIGdlbmVyYXRlIGl0cyBvdXRwdXQgYXJ0aWZhY3RzLiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYnVpbGRQcm9qZWN0KHJhd09wdGlvbnM6IEJ1aWxkT3B0aW9ucyk6IFByb21pc2U8e1xuICAgIHRhc2s6IFByb21pc2U8T3V0cHV0W10+O1xuICAgIGFib3J0OiAoKSA9PiB2b2lkO1xufT47XG4vKipcbiAqIFZhbGlkYXRlIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgY3Jvc3MtY29tcGlsYXRpb24gcmVsYXRlZCBmbGFncy5cbiAqXG4gKiBgLS11c2UtY3Jvc3NgLCBgLS11c2UtbmFwaS1jcm9zc2AgYW5kIGAtLWNyb3NzLWNvbXBpbGVgIChgLXhgKSBhcmUgdGhyZWVcbiAqIG11dHVhbGx5IGV4Y2x1c2l2ZSBjcm9zcy1jb21waWxhdGlvbiBtZWNoYW5pc21zOyBjb21iaW5pbmcgYW55IHR3byBvZiB0aGVtXG4gKiBsZWF2ZXMgYm90aCBhY3RpdmUgYXQgb25jZSBhbmQgcHJvZHVjZXMgYnJva2VuIGJ1aWxkcywgc28gaXQgaXMgcmVqZWN0ZWRcbiAqIHVwZnJvbnQgYmVmb3JlIGFueSBzaWRlIGVmZmVjdCAobGlrZSBhdXRvLWluc3RhbGxpbmcgY2FyZ28gYmluYXJpZXMgb3JcbiAqIGRvd25sb2FkaW5nIHRvb2xjaGFpbnMpIGhhcHBlbnMuXG4gKlxuICogYC0tY3Jvc3MtY29tcGlsZWAgd2l0aCBhIGB3aW5kb3dzLWdudWAgdGFyZ2V0IGlzIHJlamVjdGVkIGFzIHdlbGw6IG9uIGFcbiAqIG5vbi1XaW5kb3dzIGhvc3QgaXQgcm91dGVzIHRoZSBidWlsZCB0byBgY2FyZ28geHdpbiBidWlsZGAsIGJ1dFxuICogYGNhcmdvLXh3aW5gIG9ubHkgc2V0cyB1cCBNU1ZDIHRvb2xjaGFpbnMg4oCUIGZvciBgd2luZG93cy1nbnVgIHRhcmdldHMgaXRcbiAqIHNpbGVudGx5IGRvZXMgbm90aGluZyBhbmQgdGhlIGJ1aWxkIGRpZXMgbXVjaCBsYXRlciB3aXRoIGEgY3J5cHRpY1xuICogYGBlcnJvcjogbGlua2VyIGB4ODZfNjQtdzY0LW1pbmd3MzItZ2NjYCBub3QgZm91bmRgYCB0aGF0IG5ldmVyIG1lbnRpb25zXG4gKiBgY2FyZ28teHdpbmAuIE9ubHkgYW4gZXhwbGljaXRseSByZXF1ZXN0ZWQgdGFyZ2V0IChgLS10YXJnZXRgIG9yXG4gKiBgQ0FSR09fQlVJTERfVEFSR0VUYCkgaXMgaW5zcGVjdGVkLCBzbyB0aGlzIHZhbGlkYXRpb24gbmV2ZXIgaGFzIHRvIHNwYXduXG4gKiBgcnVzdGMgLXZWYDsgYSBub24tV2luZG93cyBob3N0J3MgZGVmYXVsdCB0YXJnZXQgY2FuIG5ldmVyIGJlXG4gKiBgd2luZG93cy1nbnVgIGFueXdheS5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdmFsaWRhdGVDcm9zc0NvbXBpbGVGbGFncyhvcHRpb25zOiB7XG4gICAgdXNlQ3Jvc3M/OiBib29sZWFuO1xuICAgIGNyb3NzQ29tcGlsZT86IGJvb2xlYW47XG4gICAgdXNlTmFwaUNyb3NzPzogYm9vbGVhbjtcbiAgICB3YXRjaD86IGJvb2xlYW47XG4gICAgdGFyZ2V0Pzogc3RyaW5nO1xufSwgaG9zdFBsYXRmb3JtPzogc3RyaW5nKTogdm9pZDtcbi8qKlxuICogVmFsaWRhdGUgdGhhdCBgLS11c2UtbmFwaS1jcm9zc2AgY2FuIGFjdHVhbGx5IGhhbmRsZSB0aGUgcmVxdWVzdGVkIHRhcmdldFxuICogb24gdGhlIGN1cnJlbnQgaG9zdC4gVGhlIHN1cHBvcnRlZCB0YXJnZXQgc2V0IGlzIHJlYWQgZnJvbSB0aGVcbiAqIGBAbmFwaS1ycy9jcm9zcy10b29sY2hhaW5gIHBhY2thZ2UsIGFuZCB0aGUgcHJlLWJ1aWx0IHRvb2xjaGFpbnMgb25seSBydW5cbiAqIG9uIExpbnV4IHg2NCBhbmQgTGludXggYXJtNjQgaG9zdHMuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHZhbGlkYXRlTmFwaUNyb3NzU3VwcG9ydCh0YXJnZXRUcmlwbGU6IHN0cmluZywgaG9zdFBsYXRmb3JtPzogc3RyaW5nLCBob3N0QXJjaD86IHN0cmluZyk6IHZvaWQ7XG4vKipcbiAqIENvbXB1dGUgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHJvdXRlIGEgYC0tdXNlLW5hcGktY3Jvc3NgIGJ1aWxkXG4gKiB0aHJvdWdoIHRoZSBgQG5hcGktcnMvY3Jvc3MtdG9vbGNoYWluYCB0b29sY2hhaW4gZXh0cmFjdGVkIGF0XG4gKiBgdG9vbGNoYWluUGF0aGAuXG4gKlxuICogRm9sbG93cyB0aGUgc2FtZSBydWxlIGFzIGBCdWlsZGVyI3NldEVudklmTm90RXhpc3RzYDogYSB2YXJpYWJsZSB0aGUgdXNlclxuICogYWxyZWFkeSBzZXQgaW4gYGVudmAgd2lucyBhbmQgaXMgbm90IHJldHVybmVkLCBhbmQgYSBwcmVzZW50LWJ1dC1lbXB0eVxuICogdmFyaWFibGUgY291bnRzIGFzIHVuc2V0IChmYWxzeSBzZW1hbnRpY3MpLiBUaGUgb25seSBleGNlcHRpb25zIGFyZSB0aGVcbiAqIGNsYW5nLXNwZWNpZmljIGBUQVJHRVRfQ0ZMQUdTYC9gVEFSR0VUX0NYWEZMQUdTYCwgd2hpY2ggcHJlcGVuZCB0aGUgc3lzcm9vdFxuICogZmxhZ3MgdG8gdGhlIHVzZXIncyB2YWx1ZSwgYW5kIGBQQVRIYCwgd2hpY2ggYWx3YXlzIGdldHMgdGhlIHRvb2xjaGFpblxuICogYGJpbmAgZGlyZWN0b3J5IHByZXBlbmRlZC5cbiAqXG4gKiBFeHBvcnRlZCBmb3IgdGVzdHMuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIG5hcGlDcm9zc1Rvb2xjaGFpbkVudnModG9vbGNoYWluUGF0aDogc3RyaW5nLCB0YXJnZXRUcmlwbGU6IHN0cmluZywgZW52PzogTm9kZUpTLlByb2Nlc3NFbnYpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdmVyaWZ5V2FzaVJlYWN0b3Iod2FzbVBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG5leHBvcnQgaW50ZXJmYWNlIFdyaXRlSnNCaW5kaW5nT3B0aW9ucyB7XG4gICAgcGxhdGZvcm0/OiBib29sZWFuO1xuICAgIG5vSnNCaW5kaW5nPzogYm9vbGVhbjtcbiAgICBpZGVudHM6IHN0cmluZ1tdO1xuICAgIGpzQmluZGluZz86IHN0cmluZztcbiAgICBmb3JtYXQ/OiBCdWlsZEZvcm1hdDtcbiAgICBlc20/OiBib29sZWFuO1xuICAgIGNvbW1vbmpzPzogYm9vbGVhbjtcbiAgICBiaW5hcnlOYW1lOiBzdHJpbmc7XG4gICAgcGFja2FnZU5hbWU6IHN0cmluZztcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgb3V0cHV0RGlyOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogYHBsYXRmb3JtQXJjaEFCSWBzIG9mIHRoZSBkZWNsYXJlZCBXQVNJIHRhcmdldHMgaW4gZmFsbGJhY2sgcHJlZmVyZW5jZVxuICAgICAqIG9yZGVyICh0aHJlYWRlZCBmaXJzdCkuIERlZmF1bHRzIHRvIHRoZSBsZWdhY3kgYFsnd2FzbTMyLXdhc2knXWAgY2hhaW5cbiAgICAgKiB3aGVuIG9taXR0ZWQgb3IgZW1wdHkuIEdlbmVyYXRlZCBsb2FkZXJzIGV4cG9zZSB0aGVzZSBleGFjdCBpZGVudGl0aWVzXG4gICAgICogdGhyb3VnaCBgTkFQSV9SU19XQVNJX0ZMQVZPUmAuXG4gICAgICovXG4gICAgd2FzaUZsYXZvcnM/OiBzdHJpbmdbXTtcbn1cbi8qKiBXcml0ZSBhIHBsYXRmb3JtIGJpbmRpbmcgbG9hZGVyIGluIHRoZSByZXF1ZXN0ZWQgbW9kdWxlIGZvcm1hdC4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHdyaXRlSnNCaW5kaW5nKG9wdGlvbnM6IFdyaXRlSnNCaW5kaW5nT3B0aW9ucyk6IFByb21pc2U8T3V0cHV0IHwgdW5kZWZpbmVkPjtcbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVUeXBlRGVmT3B0aW9ucyB7XG4gICAgdHlwZURlZkRpcjogc3RyaW5nO1xuICAgIG5vRHRzSGVhZGVyPzogYm9vbGVhbjtcbiAgICBkdHNIZWFkZXI/OiBzdHJpbmc7XG4gICAgZHRzSGVhZGVyRmlsZT86IHN0cmluZztcbiAgICBjb25maWdEdHNIZWFkZXI/OiBzdHJpbmc7XG4gICAgY29uZmlnRHRzSGVhZGVyRmlsZT86IHN0cmluZztcbiAgICBjb25zdEVudW0/OiBib29sZWFuO1xuICAgIHJ1bnRpbWVTdHJpbmdFbnVtPzogYm9vbGVhbjtcbiAgICBjd2Q6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBEZWNsYXJlIHRoZSBnZW5lcmF0ZWQgbG9hZGVyJ3MgYF9fbmFwaUJpbmRpbmdUYXJnZXRgIGV4cG9ydC4gU2V0IGl0IGZvclxuICAgICAqIGJ1aWxkcyB0aGF0IGVtaXQgYSBsb2FkZXI7IGEgYnVpbGQgdGhhdCBlbWl0cyBub25lIGRlY2xhcmVzIG5vdGhpbmcuIFRoZVxuICAgICAqIGRlY2xhcmVkIHVuaW9uIGNvdmVycyBldmVyeSBhcnRpZmFjdCBhIGxvYWRlciBjYW4gaGFuZCBiYWNrLCBub3Qgb25seSB0aGVcbiAgICAgKiB0YXJnZXRzIHRoaXMgcGFja2FnZSBidWlsZHMg4oCUIHNlZSB7QGxpbmsgQklORElOR19UQVJHRVRfVFlQRV9VTklPTn0uXG4gICAgICpcbiAgICAgKiBXaGV0aGVyIHRoZSByb290IGxvYWRlciBpcyB3cml0dGVuIGRlcGVuZHMgb24gdGhlIGV4cG9ydHMgdGhpcyBidWlsZFxuICAgICAqIHByb2R1Y2VkLCB3aGljaCBvbmx5IHR5cGVnZW4ga25vd3MsIHNvIGEgcHJlZGljYXRlIG1heSBiZSBwYXNzZWQgaW5zdGVhZFxuICAgICAqIG9mIGEgZmxhZzsgaXQgaXMgY2FsbGVkIHdpdGggdGhlIGdlbmVyYXRlZCBleHBvcnQgbGlzdC4gU2VlXG4gICAgICoge0BsaW5rIGJpbmRpbmdUYXJnZXREZWNsYXJhdGlvblByZWRpY2F0ZX0uXG4gICAgICovXG4gICAgZGVjbGFyZUJpbmRpbmdUYXJnZXQ/OiBib29sZWFuIHwgKChleHBvcnRzOiByZWFkb25seSBzdHJpbmdbXSkgPT4gYm9vbGVhbik7XG59XG4vKipcbiAqIFdhbGsgdGhlIG5hcGktZGVyaXZlIGludGVybWVkaWF0ZSB0eXBlLWRlZiBkaXJlY3RvcnksIHJlbmRlciBldmVyeSBlbnRyeVxuICogaW50byBUeXBlU2NyaXB0IHZpYSB7QGxpbmsgcHJvY2Vzc1R5cGVEZWZ9LCBhbmQgcmV0dXJuIHRoZSBjb25jYXRlbmF0ZWRcbiAqIGAuZC50c2Agc291cmNlIHBsdXMgdGhlIGxpc3Qgb2YgaWRlbnRpZmllcnMgdG8gcmUtZXhwb3J0IGZyb21cbiAqIGBpbmRleC5qc2AuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGdlbmVyYXRlVHlwZURlZihvcHRpb25zOiBHZW5lcmF0ZVR5cGVEZWZPcHRpb25zKTogUHJvbWlzZTx7XG4gICAgZXhwb3J0czogc3RyaW5nW107XG4gICAgZHRzOiBzdHJpbmc7XG4gICAgZHRzV2l0aFR5cGVJbXBvcnRzOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIGAuZC50c2AgaGVhZGVyIGFzIHJlbmRlcmVkLCBiZWZvcmUgYW55dGhpbmcgdGhlIGdlbmVyYXRlZCBib2R5IG5lZWRzXG4gICAgICogd2FzIGFwcGVuZGVkIHRvIGl0LiBgZW5zdXJlQmluZGluZ1RhcmdldERlY2xhcmF0aW9uYCB0YWtlcyBpdCB0byB0ZWxsIGFcbiAgICAgKiBkZWNsYXJhdGlvbiB0aGUgaGVhZGVyIG93bnMgZnJvbSBvbmUgdGhpcyBidWlsZCB3cm90ZS5cbiAgICAgKi9cbiAgICBoZWFkZXI6IHN0cmluZztcbn0+O1xuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBCYXNlQ3JlYXRlTnBtRGlyc0NvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBzdGF0aWMgcGF0aHM6IHN0cmluZ1tdW107XG4gICAgc3RhdGljIHVzYWdlOiBpbXBvcnQoXCJjbGlwYW5pb25cIikuVXNhZ2U7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICBucG1EaXI6IHN0cmluZztcbiAgICBkcnlSdW46IGJvb2xlYW47XG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIGN3ZDogc3RyaW5nO1xuICAgICAgICBjb25maWdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgICAgICBucG1EaXI6IHN0cmluZztcbiAgICAgICAgZHJ5UnVuOiBib29sZWFuO1xuICAgIH07XG59XG4vKipcbiAqIENyZWF0ZSBucG0gcGFja2FnZSBkaXJzIGZvciBkaWZmZXJlbnQgcGxhdGZvcm1zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlTnBtRGlyc09wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiB3aGVyZSBuYXBpIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbiwgYWxsIG90aGVyIHBhdGhzIG9wdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgcGF0aFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgcHJvY2Vzcy5jd2QoKVxuICAgICAqL1xuICAgIGN3ZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBwYWNrYWdlLmpzb25gXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAncGFja2FnZS5qc29uJ1xuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHRoZSBmb2xkZXIgd2hlcmUgdGhlIG5wbSBwYWNrYWdlcyBwdXRcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICducG0nXG4gICAgICovXG4gICAgbnBtRGlyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIERyeSBydW4gd2l0aG91dCB0b3VjaGluZyBmaWxlIHN5c3RlbVxuICAgICAqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBkcnlSdW4/OiBib29sZWFuO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYXBwbHlEZWZhdWx0Q3JlYXRlTnBtRGlyc09wdGlvbnMob3B0aW9uczogQ3JlYXRlTnBtRGlyc09wdGlvbnMpOiB7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgZHJ5UnVuOiBib29sZWFuO1xufTtcbiIsImltcG9ydCB7IHR5cGUgQ3JlYXRlTnBtRGlyc09wdGlvbnMgfSBmcm9tICcuLi9kZWYvY3JlYXRlLW5wbS1kaXJzLmpzJztcbmV4cG9ydCBpbnRlcmZhY2UgUGFja2FnZU1ldGEge1xuICAgICdkaXN0LXRhZ3MnOiB7XG4gICAgICAgIFtpbmRleDogc3RyaW5nXTogc3RyaW5nO1xuICAgIH07XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVOcG1EaXJzKHVzZXJPcHRpb25zOiBDcmVhdGVOcG1EaXJzT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4iLCJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VOZXdDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgICQkcGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICQkbmFtZT86IHN0cmluZztcbiAgICBtaW5Ob2RlQXBpVmVyc2lvbjogbnVtYmVyO1xuICAgIHBhY2thZ2VNYW5hZ2VyOiBzdHJpbmc7XG4gICAgbGljZW5zZTogc3RyaW5nO1xuICAgIHRhcmdldHM6IHN0cmluZ1tdO1xuICAgIGVuYWJsZURlZmF1bHRUYXJnZXRzOiBib29sZWFuO1xuICAgIGVuYWJsZUFsbFRhcmdldHM6IGJvb2xlYW47XG4gICAgZW5hYmxlVHlwZURlZjogYm9vbGVhbjtcbiAgICBlbmFibGVHaXRodWJBY3Rpb25zOiBib29sZWFuO1xuICAgIHRlc3RGcmFtZXdvcms6IHN0cmluZztcbiAgICBkcnlSdW46IGJvb2xlYW47XG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBtaW5Ob2RlQXBpVmVyc2lvbjogbnVtYmVyO1xuICAgICAgICBwYWNrYWdlTWFuYWdlcjogc3RyaW5nO1xuICAgICAgICBsaWNlbnNlOiBzdHJpbmc7XG4gICAgICAgIHRhcmdldHM6IHN0cmluZ1tdO1xuICAgICAgICBlbmFibGVEZWZhdWx0VGFyZ2V0czogYm9vbGVhbjtcbiAgICAgICAgZW5hYmxlQWxsVGFyZ2V0czogYm9vbGVhbjtcbiAgICAgICAgZW5hYmxlVHlwZURlZjogYm9vbGVhbjtcbiAgICAgICAgZW5hYmxlR2l0aHViQWN0aW9uczogYm9vbGVhbjtcbiAgICAgICAgdGVzdEZyYW1ld29yazogc3RyaW5nO1xuICAgICAgICBkcnlSdW46IGJvb2xlYW47XG4gICAgfTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgbmV3IHByb2plY3Qgd2l0aCBwcmUtY29uZmlndXJlZCBib2lsZXJwbGF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ld09wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFRoZSBwYXRoIHdoZXJlIHRoZSBOQVBJLVJTIHByb2plY3Qgd2lsbCBiZSBjcmVhdGVkLlxuICAgICAqL1xuICAgIHBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIHByb2plY3QsIGRlZmF1bHQgdG8gdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSBpZiBub3QgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBtaW5pbXVtIE5vZGUtQVBJIHZlcnNpb24gdG8gc3VwcG9ydFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgNFxuICAgICAqL1xuICAgIG1pbk5vZGVBcGlWZXJzaW9uPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFRoZSBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlLiBPbmx5IHN1cHBvcnQgeWFybiA0LnggZm9yIG5vdy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICd5YXJuJ1xuICAgICAqL1xuICAgIHBhY2thZ2VNYW5hZ2VyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIExpY2Vuc2UgZm9yIG9wZW4tc291cmNlZCBwcm9qZWN0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnTUlUJ1xuICAgICAqL1xuICAgIGxpY2Vuc2U/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQWxsIHRhcmdldHMgdGhlIGNyYXRlIHdpbGwgYmUgY29tcGlsZWQgZm9yLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgW11cbiAgICAgKi9cbiAgICB0YXJnZXRzPzogc3RyaW5nW107XG4gICAgLyoqXG4gICAgICogV2hldGhlciBlbmFibGUgZGVmYXVsdCB0YXJnZXRzXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlRGVmYXVsdFRhcmdldHM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZW5hYmxlIGFsbCB0YXJnZXRzXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIGVuYWJsZUFsbFRhcmdldHM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZW5hYmxlIHRoZSBgdHlwZS1kZWZgIGZlYXR1cmUgZm9yIHR5cGVzY3JpcHQgZGVmaW5pdGlvbnMgYXV0by1nZW5lcmF0aW9uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlVHlwZURlZj86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogV2hldGhlciBnZW5lcmF0ZSBwcmVjb25maWd1cmVkIEdpdEh1YiBBY3Rpb25zIHdvcmtmbG93XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlR2l0aHViQWN0aW9ucz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIEphdmFTY3JpcHQgdGVzdCBmcmFtZXdvcmsgdG8gdXNlLCBvbmx5IHN1cHBvcnQgYGF2YWAgZm9yIG5vd1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ2F2YSdcbiAgICAgKi9cbiAgICB0ZXN0RnJhbWV3b3JrPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcnVuIHRoZSBjb21tYW5kIGluIGRyeS1ydW4gbW9kZVxuICAgICAqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBkcnlSdW4/OiBib29sZWFuO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYXBwbHlEZWZhdWx0TmV3T3B0aW9ucyhvcHRpb25zOiBOZXdPcHRpb25zKToge1xuICAgIC8qKlxuICAgICAqIFRoZSBwYXRoIHdoZXJlIHRoZSBOQVBJLVJTIHByb2plY3Qgd2lsbCBiZSBjcmVhdGVkLlxuICAgICAqL1xuICAgIHBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIHByb2plY3QsIGRlZmF1bHQgdG8gdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSBpZiBub3QgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIG1pbk5vZGVBcGlWZXJzaW9uOiBudW1iZXI7XG4gICAgcGFja2FnZU1hbmFnZXI6IHN0cmluZztcbiAgICBsaWNlbnNlOiBzdHJpbmc7XG4gICAgdGFyZ2V0czogc3RyaW5nW107XG4gICAgZW5hYmxlRGVmYXVsdFRhcmdldHM6IGJvb2xlYW47XG4gICAgZW5hYmxlQWxsVGFyZ2V0czogYm9vbGVhbjtcbiAgICBlbmFibGVUeXBlRGVmOiBib29sZWFuO1xuICAgIGVuYWJsZUdpdGh1YkFjdGlvbnM6IGJvb2xlYW47XG4gICAgdGVzdEZyYW1ld29yazogc3RyaW5nO1xuICAgIGRyeVJ1bjogYm9vbGVhbjtcbn07XG4iLCJpbXBvcnQgeyB0eXBlIE5ld09wdGlvbnMgYXMgUmF3TmV3T3B0aW9ucyB9IGZyb20gJy4uL2RlZi9uZXcuanMnO1xudHlwZSBOZXdPcHRpb25zID0gUmVxdWlyZWQ8UmF3TmV3T3B0aW9ucz47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBHRU5FUkFURURfV0FTSV9CSU5ESU5HOiBSZWdFeHA7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1cGRhdGVDYXJnb1RvbWxOb2RlQXBpVmVyc2lvbihmaWxlUGF0aDogc3RyaW5nLCBtaW5Ob2RlQXBpVmVyc2lvbjogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIG5ld1Byb2plY3QodXNlck9wdGlvbnM6IFJhd05ld09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuZXhwb3J0IHR5cGUgeyBOZXdPcHRpb25zIH07XG4iLCJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VQcmVQdWJsaXNoQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIHN0YXRpYyBwYXRoczogc3RyaW5nW11bXTtcbiAgICBzdGF0aWMgdXNhZ2U6IGltcG9ydChcImNsaXBhbmlvblwiKS5Vc2FnZTtcbiAgICBjd2Q6IHN0cmluZztcbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG5wbURpcjogc3RyaW5nO1xuICAgIHRhZ1N0eWxlOiBzdHJpbmc7XG4gICAgZ2hSZWxlYXNlOiBib29sZWFuO1xuICAgIGdoUmVsZWFzZU5hbWU/OiBzdHJpbmc7XG4gICAgZ2hSZWxlYXNlSWQ/OiBzdHJpbmc7XG4gICAgc2tpcE9wdGlvbmFsUHVibGlzaDogYm9vbGVhbjtcbiAgICByb290UHVibGlzaGVyPzogJ25wbScgfCAncG5wbScgfCAneWFybicgfCAneWFybi1jbGFzc2ljJztcbiAgICBkcnlSdW46IGJvb2xlYW47XG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIGN3ZDogc3RyaW5nO1xuICAgICAgICBjb25maWdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgICAgICBucG1EaXI6IHN0cmluZztcbiAgICAgICAgdGFnU3R5bGU6IHN0cmluZztcbiAgICAgICAgZ2hSZWxlYXNlOiBib29sZWFuO1xuICAgICAgICBnaFJlbGVhc2VOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGdoUmVsZWFzZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHNraXBPcHRpb25hbFB1Ymxpc2g6IGJvb2xlYW47XG4gICAgICAgIHJvb3RQdWJsaXNoZXI6IFwieWFyblwiIHwgXCJwbnBtXCIgfCBcIm5wbVwiIHwgXCJ5YXJuLWNsYXNzaWNcIiB8IHVuZGVmaW5lZDtcbiAgICAgICAgZHJ5UnVuOiBib29sZWFuO1xuICAgIH07XG59XG4vKipcbiAqIFVwZGF0ZSBwYWNrYWdlLmpzb24gYW5kIGNvcHkgYWRkb25zIGludG8gcGVyIHBsYXRmb3JtIHBhY2thZ2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJlUHVibGlzaE9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiB3aGVyZSBuYXBpIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbiwgYWxsIG90aGVyIHBhdGhzIG9wdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgcGF0aFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgcHJvY2Vzcy5jd2QoKVxuICAgICAqL1xuICAgIGN3ZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBwYWNrYWdlLmpzb25gXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAncGFja2FnZS5qc29uJ1xuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHRoZSBmb2xkZXIgd2hlcmUgdGhlIG5wbSBwYWNrYWdlcyBwdXRcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICducG0nXG4gICAgICovXG4gICAgbnBtRGlyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIGdpdCB0YWcgc3R5bGUsIGBucG1gIG9yIGBsZXJuYWBcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICdsZXJuYSdcbiAgICAgKi9cbiAgICB0YWdTdHlsZT86ICducG0nIHwgJ2xlcm5hJztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGNyZWF0ZSBHaXRIdWIgcmVsZWFzZVxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIGdoUmVsZWFzZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogR2l0SHViIHJlbGVhc2UgbmFtZVxuICAgICAqL1xuICAgIGdoUmVsZWFzZU5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogRXhpc3RpbmcgR2l0SHViIHJlbGVhc2UgaWRcbiAgICAgKi9cbiAgICBnaFJlbGVhc2VJZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHNraXAgb3B0aW9uYWxEZXBlbmRlbmNpZXMgcGFja2FnZXMgcHVibGlzaFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBza2lwT3B0aW9uYWxQdWJsaXNoPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBUaGUgcGFja2FnZSBtYW5hZ2VyIHRoYXQgcHVibGlzaGVzIHRoZSByb290IHBhY2thZ2UuIHBucG0gYW5kIHlhcm4gYmVycnkgcmVwbGFjZSBgZXhwb3J0c2Agd2l0aCBgcHVibGlzaENvbmZpZy5leHBvcnRzYCB3aGlsZSBwYWNraW5nLCBzbyBmb3IgdGhlbSB0aGUgcm9vdCBwYWNrYWdlIHZhbGlkYXRpb24gdGFyZ2V0cyB0aGUgcHVibGlzaC1lZmZlY3RpdmUgZXhwb3J0IG1hcC4gRGVmYXVsdHMgdG8gdGhlIGBuYXBpLnJvb3RQdWJsaXNoZXJgIGNvbmZpZyBmaWVsZCwgYW5kIHZhbGlkYXRlcyBib3RoIGV4cG9ydCBtYXBzIHdoZW4gbmVpdGhlciBpcyBzZXRcbiAgICAgKi9cbiAgICByb290UHVibGlzaGVyPzogJ25wbScgfCAncG5wbScgfCAneWFybicgfCAneWFybi1jbGFzc2ljJztcbiAgICAvKipcbiAgICAgKiBEcnkgcnVuIHdpdGhvdXQgdG91Y2hpbmcgZmlsZSBzeXN0ZW1cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgZHJ5UnVuPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdFByZVB1Ymxpc2hPcHRpb25zKG9wdGlvbnM6IFByZVB1Ymxpc2hPcHRpb25zKToge1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG5wbURpcjogc3RyaW5nO1xuICAgIHRhZ1N0eWxlOiBzdHJpbmc7XG4gICAgZ2hSZWxlYXNlOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEdpdEh1YiByZWxlYXNlIG5hbWVcbiAgICAgKi9cbiAgICBnaFJlbGVhc2VOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEV4aXN0aW5nIEdpdEh1YiByZWxlYXNlIGlkXG4gICAgICovXG4gICAgZ2hSZWxlYXNlSWQ/OiBzdHJpbmc7XG4gICAgc2tpcE9wdGlvbmFsUHVibGlzaDogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBUaGUgcGFja2FnZSBtYW5hZ2VyIHRoYXQgcHVibGlzaGVzIHRoZSByb290IHBhY2thZ2UuIHBucG0gYW5kIHlhcm4gYmVycnkgcmVwbGFjZSBgZXhwb3J0c2Agd2l0aCBgcHVibGlzaENvbmZpZy5leHBvcnRzYCB3aGlsZSBwYWNraW5nLCBzbyBmb3IgdGhlbSB0aGUgcm9vdCBwYWNrYWdlIHZhbGlkYXRpb24gdGFyZ2V0cyB0aGUgcHVibGlzaC1lZmZlY3RpdmUgZXhwb3J0IG1hcC4gRGVmYXVsdHMgdG8gdGhlIGBuYXBpLnJvb3RQdWJsaXNoZXJgIGNvbmZpZyBmaWVsZCwgYW5kIHZhbGlkYXRlcyBib3RoIGV4cG9ydCBtYXBzIHdoZW4gbmVpdGhlciBpcyBzZXRcbiAgICAgKi9cbiAgICByb290UHVibGlzaGVyPzogXCJucG1cIiB8IFwicG5wbVwiIHwgXCJ5YXJuXCIgfCBcInlhcm4tY2xhc3NpY1wiO1xuICAgIGRyeVJ1bjogYm9vbGVhbjtcbn07XG4iLCJpbXBvcnQgeyB0eXBlIFByZVB1Ymxpc2hPcHRpb25zIH0gZnJvbSAnLi4vZGVmL3ByZS1wdWJsaXNoLmpzJztcbmltcG9ydCB7IHR5cGUgQ29tbW9uUGFja2FnZUpzb25GaWVsZHMsIHR5cGUgUm9vdFB1Ymxpc2hlciwgdHlwZSBUYXJnZXQsIHR5cGUgVXNlck5hcGlDb25maWcgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG4vKipcbiAqIEJ1aWxkIHRoZSByb290IHBhY2thZ2UncyBgb3B0aW9uYWxEZXBlbmRlbmNpZXNgIG1hcC5cbiAqXG4gKiBBIFdBU0kgcGFja2FnZSBpcyBhIGZhbGxiYWNrIGZvciBob3N0cyB0aGF0IGNhbm5vdCBsb2FkIGEgYC5ub2RlYCBiaW5hcnksIGFuZFxuICogdGhlIGdlbmVyYXRlZCBiaW5kaW5nIGxvYWRlciBzZWxlY3RzIGl0IGF0IHJlcXVpcmUgdGltZSByYXRoZXIgdGhhbiBucG1cbiAqIHNlbGVjdGluZyBpdCBhdCBpbnN0YWxsIHRpbWUuIERlY2xhcmluZyBpdCBhcyBhbiBgb3B0aW9uYWxEZXBlbmRlbmN5YFxuICogYWxvbmdzaWRlIHRoZSBuYXRpdmUgcGFja2FnZXMgY2Fubm90IGV4cHJlc3MgXCJpbnN0YWxsIHRoaXMgb25seSB3aGVuIG5vdGhpbmdcbiAqIGVsc2UgbWF0Y2hlZFwiOiBucG0gZXZhbHVhdGVzIGV2ZXJ5IGVudHJ5IGluZGVwZW5kZW50bHksIHNvIGV2ZXJ5IGNvbnN1bWVyXG4gKiBkb3dubG9hZHMgYSBgLndhc21gIGJpbmFyeSB0aGV5IHdpbGwgbmV2ZXIgbG9hZC5cbiAqXG4gKiBJdCBpcyB0aGVyZWZvcmUgb25seSBkZWNsYXJlZCB3aGVuIFdBU0kgaXMgdGhlIG9ubHkgY29uZmlndXJlZCB0YXJnZXQsIHdoaWNoXG4gKiBtYWtlcyBpdCB0aGUgcHJpbWFyeSBhcnRpZmFjdCByYXRoZXIgdGhhbiBhIGZhbGxiYWNrLlxuICogYG5hcGkud2FzbS5vcHRpb25hbERlcGVuZGVuY3lgIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBpbiBib3RoIGRpcmVjdGlvbnMuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yb2xsZG93bi9yb2xsZG93bi9pc3N1ZXMvMTA1NTZcbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcmVzb2x2ZVJvb3RPcHRpb25hbERlcGVuZGVuY2llcyh7IGV4aXN0aW5nLCBtYW5hZ2VkUGFja2FnZU5hbWVzLCBwYWNrYWdlTmFtZSwgdGFyZ2V0cywgdmVyc2lvbiwgd2FzbSwgfToge1xuICAgIGV4aXN0aW5nOiB1bmtub3duO1xuICAgIG1hbmFnZWRQYWNrYWdlTmFtZXM6IEl0ZXJhYmxlPHN0cmluZz47XG4gICAgcGFja2FnZU5hbWU6IHN0cmluZztcbiAgICB0YXJnZXRzOiBUYXJnZXRbXTtcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgd2FzbT86IFVzZXJOYXBpQ29uZmlnWyd3YXNtJ107XG59KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwcmVQdWJsaXNoKHVzZXJPcHRpb25zOiBQcmVQdWJsaXNoT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG5pbnRlcmZhY2UgVGhyZWFkbGVzc1dhc2lSb290RmFjYWRlIHtcbiAgICBleHBvcnRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBwdWJsaXNoQ29uZmlnRXhwb3J0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGdlbmVyYXRlZEZpbGVzOiBzdHJpbmdbXTtcbiAgICBmaWxlczogVGhyZWFkbGVzc1dhc2lSb290RmFjYWRlRmlsZXM7XG4gICAgd2FzbVNvdXJjZVBhdGg6IHN0cmluZztcbiAgICBtYXJrZXI6IHN0cmluZztcbiAgICBmb3J3YXJkaW5nTW9kdWxlOiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25VcGRhdGU6IHtcbiAgICAgICAgZmlsZXM/OiBzdHJpbmdbXTtcbiAgICB9O1xufVxuaW50ZXJmYWNlIFRocmVhZGxlc3NXYXNpUm9vdEZhY2FkZUZpbGVzIHtcbiAgICB3b3JrZXJkRW50cnk6IHN0cmluZztcbiAgICB3b3JrZXJkVHlwZURlZjogc3RyaW5nO1xuICAgIHdhc21FbnRyeTogc3RyaW5nO1xuICAgIHdhc21UeXBlRGVmOiBzdHJpbmc7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByb290UHVibGlzaGVyUmV3cml0ZXNSb290RXhwb3J0cyhyb290UHVibGlzaGVyOiBSb290UHVibGlzaGVyIHwgdW5kZWZpbmVkKTogYm9vbGVhbjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlc29sdmVSb290UHVibGlzaGVyKG9wdGlvblZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGNvbmZpZ1ZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBSb290UHVibGlzaGVyIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gc25pZmZSZXdyaXRpbmdQdWJsaXNoZXJGcm9tVXNlckFnZW50KHVzZXJBZ2VudD86IHN0cmluZyB8IHVuZGVmaW5lZCk6ICdwbnBtJyB8ICd5YXJuJyB8IHVuZGVmaW5lZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJvb3RQdWJsaXNoZXJIaW50KHJvb3RQdWJsaXNoZXI6IFJvb3RQdWJsaXNoZXIgfCB1bmRlZmluZWQsIHVzZXJBZ2VudD86IHN0cmluZyk6IHN0cmluZztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNvbGxlY3RSb290UGFja2FnZVBhdGhSZWZlcmVuY2VzKHBhY2thZ2VKc29uOiBDb21tb25QYWNrYWdlSnNvbkZpZWxkcywgcm9vdFB1Ymxpc2hlcj86IFJvb3RQdWJsaXNoZXIpOiBzdHJpbmdbXTtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHBhcnNlTnBtUGFja0ZpbGVzKG91dHB1dDogc3RyaW5nKTogU2V0PHN0cmluZz47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB2YWxpZGF0ZVJvb3RGYWNhZGVQYWNrbGlzdChyb290RGlyOiBzdHJpbmcsIHJvb3RQYWNrYWdlRmlsZXM6IHN0cmluZ1tdLCByb290UHVibGlzaGVyPzogUm9vdFB1Ymxpc2hlcik6IHZvaWQ7XG5pbnRlcmZhY2UgUm9vdFJlbGVhc2VNYXRlcmlhbGl6YXRpb25QbGFuIHtcbiAgICBwYWNrYWdlSnNvbjogQ29tbW9uUGFja2FnZUpzb25GaWVsZHM7XG4gICAgb3B0aW9uYWxEZXBlbmRlbmNpZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIG5vZGVFbmdpbmU/OiBzdHJpbmc7XG4gICAgZmFjYWRlPzogVGhyZWFkbGVzc1dhc2lSb290RmFjYWRlO1xuICAgIHN0YWxlR2VuZXJhdGVkRmlsZXM6IHN0cmluZ1tdO1xuICAgIHJvb3RQdWJsaXNoZXI/OiBSb290UHVibGlzaGVyO1xufVxuaW50ZXJmYWNlIFJlbGVhc2VQYWNrYWdlVmFsaWRhdGlvbk9wdGlvbnMge1xuICAgIHBrZ0Rpcjogc3RyaW5nO1xuICAgIHJvb3REaXI6IHN0cmluZztcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nO1xuICAgIGJpbmFyeU5hbWU6IHN0cmluZztcbiAgICB0YXJnZXQ6IFRhcmdldDtcbiAgICByZXF1aXJlRGlyZWN0QnVmZmVyRGVwZW5kZW5jeTogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBSZWxlYXNlUGFja2FnZU1hdGVyaWFsaXphdGlvblBsYW4ge1xuICAgIHRhcmdldDogVGFyZ2V0O1xuICAgIHBrZ0Rpcjogc3RyaW5nO1xuICAgIHJvb3REaXI6IHN0cmluZztcbiAgICBzdGFnZWRQa2dEaXI/OiBzdHJpbmc7XG4gICAgcGFja2FnZUZpbGVzOiBzdHJpbmdbXTtcbiAgICBkZWNsYXJhdGlvbkRlcGVuZGVuY2llczogc3RyaW5nW107XG4gICAgdXBkYXRlTWFuaWZlc3Q6IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgQ29tbWl0UHJlUHVibGlzaEZpbGVTeXN0ZW1UcmFuc2FjdGlvbk9wdGlvbnMge1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIHJlbGVhc2VQYWNrYWdlUGxhbnM6IFJlbGVhc2VQYWNrYWdlTWF0ZXJpYWxpemF0aW9uUGxhbltdO1xuICAgIHJvb3REaXI6IHN0cmluZztcbiAgICByb290UmVsZWFzZVBsYW46IFJvb3RSZWxlYXNlTWF0ZXJpYWxpemF0aW9uUGxhbjtcbiAgICBzdGFnZWRSb290TWFuaWZlc3RQYXRoPzogc3RyaW5nO1xuICAgIHN0YWdlZFJvb3REaXI6IHN0cmluZztcbiAgICB0cmFuc2FjdGlvblJvb3Q/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjb21taXRQcmVQdWJsaXNoRmlsZVN5c3RlbVRyYW5zYWN0aW9uKHsgcGFja2FnZUpzb25QYXRoLCByZWxlYXNlUGFja2FnZVBsYW5zLCByb290RGlyLCByb290UmVsZWFzZVBsYW4sIHN0YWdlZFJvb3REaXIsIHN0YWdlZFJvb3RNYW5pZmVzdFBhdGgsIHRyYW5zYWN0aW9uUm9vdCwgfTogQ29tbWl0UHJlUHVibGlzaEZpbGVTeXN0ZW1UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdmFsaWRhdGVSZWxlYXNlUGFja2FnZUNvbnRlbnRzKHsgcGtnRGlyLCByb290RGlyLCBwYWNrYWdlTmFtZSwgYmluYXJ5TmFtZSwgdGFyZ2V0LCByZXF1aXJlRGlyZWN0QnVmZmVyRGVwZW5kZW5jeSwgfTogUmVsZWFzZVBhY2thZ2VWYWxpZGF0aW9uT3B0aW9ucyk6IFByb21pc2U8e1xuICAgIHBhY2thZ2VGaWxlczogc3RyaW5nW107XG4gICAgZGVjbGFyYXRpb25EZXBlbmRlbmNpZXM6IHN0cmluZ1tdO1xuICAgIHVwZGF0ZU1hbmlmZXN0OiBib29sZWFuO1xufT47XG5leHBvcnQge307XG4iLCJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VSZW5hbWVDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgJCRuYW1lPzogc3RyaW5nO1xuICAgIGJpbmFyeU5hbWU/OiBzdHJpbmc7XG4gICAgcGFja2FnZU5hbWU/OiBzdHJpbmc7XG4gICAgbWFuaWZlc3RQYXRoOiBzdHJpbmc7XG4gICAgcmVwb3NpdG9yeT86IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBnZXRPcHRpb25zKCk6IHtcbiAgICAgICAgY3dkOiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZ1BhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgICAgIG5wbURpcjogc3RyaW5nO1xuICAgICAgICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGJpbmFyeU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcGFja2FnZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbWFuaWZlc3RQYXRoOiBzdHJpbmc7XG4gICAgICAgIHJlcG9zaXRvcnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB9O1xufVxuLyoqXG4gKiBSZW5hbWUgdGhlIE5BUEktUlMgcHJvamVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbmFtZU9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiB3aGVyZSBuYXBpIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbiwgYWxsIG90aGVyIHBhdGhzIG9wdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgcGF0aFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgcHJvY2Vzcy5jd2QoKVxuICAgICAqL1xuICAgIGN3ZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBwYWNrYWdlLmpzb25gXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAncGFja2FnZS5qc29uJ1xuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHRoZSBmb2xkZXIgd2hlcmUgdGhlIG5wbSBwYWNrYWdlcyBwdXRcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICducG0nXG4gICAgICovXG4gICAgbnBtRGlyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgbmFtZSBvZiB0aGUgcHJvamVjdFxuICAgICAqL1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5ldyBiaW5hcnkgbmFtZSAqLm5vZGUgZmlsZXNcbiAgICAgKi9cbiAgICBiaW5hcnlOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgcGFja2FnZSBuYW1lIG9mIHRoZSBwcm9qZWN0XG4gICAgICovXG4gICAgcGFja2FnZU5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgQ2FyZ28udG9tbGBcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICdDYXJnby50b21sJ1xuICAgICAqL1xuICAgIG1hbmlmZXN0UGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IHJlcG9zaXRvcnkgb2YgdGhlIHByb2plY3RcbiAgICAgKi9cbiAgICByZXBvc2l0b3J5Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgZGVzY3JpcHRpb24gb2YgdGhlIHByb2plY3RcbiAgICAgKi9cbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdFJlbmFtZU9wdGlvbnMob3B0aW9uczogUmVuYW1lT3B0aW9ucyk6IHtcbiAgICBjd2Q6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICBucG1EaXI6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IG5hbWUgb2YgdGhlIHByb2plY3RcbiAgICAgKi9cbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgYmluYXJ5IG5hbWUgKi5ub2RlIGZpbGVzXG4gICAgICovXG4gICAgYmluYXJ5TmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IHBhY2thZ2UgbmFtZSBvZiB0aGUgcHJvamVjdFxuICAgICAqL1xuICAgIHBhY2thZ2VOYW1lPzogc3RyaW5nO1xuICAgIG1hbmlmZXN0UGF0aDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgcmVwb3NpdG9yeSBvZiB0aGUgcHJvamVjdFxuICAgICAqL1xuICAgIHJlcG9zaXRvcnk/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5ldyBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvamVjdFxuICAgICAqL1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufTtcbiIsImltcG9ydCB7IHR5cGUgUmVuYW1lT3B0aW9ucyB9IGZyb20gJy4uL2RlZi9yZW5hbWUuanMnO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcmVuYW1lUHJvamVjdCh1c2VyT3B0aW9uczogUmVuYW1lT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4iLCJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VVbml2ZXJzYWxpemVDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgb3V0cHV0RGlyOiBzdHJpbmc7XG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIGN3ZDogc3RyaW5nO1xuICAgICAgICBjb25maWdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgICAgICBvdXRwdXREaXI6IHN0cmluZztcbiAgICB9O1xufVxuLyoqXG4gKiBDb21iaWxlIGJ1aWx0IGJpbmFyaWVzIGludG8gb25lIHVuaXZlcnNhbCBiaW5hcnlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbml2ZXJzYWxpemVPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHByb2Nlc3MuY3dkKClcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ3BhY2thZ2UuanNvbidcbiAgICAgKi9cbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIGFsbCBidWlsdCBgLm5vZGVgIGZpbGVzIHB1dCwgc2FtZSBhcyBgLS1vdXRwdXQtZGlyYCBvZiBidWlsZCBjb21tYW5kXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnLi8nXG4gICAgICovXG4gICAgb3V0cHV0RGlyPzogc3RyaW5nO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYXBwbHlEZWZhdWx0VW5pdmVyc2FsaXplT3B0aW9ucyhvcHRpb25zOiBVbml2ZXJzYWxpemVPcHRpb25zKToge1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG91dHB1dERpcjogc3RyaW5nO1xufTtcbiIsImltcG9ydCB7IHR5cGUgVW5pdmVyc2FsaXplT3B0aW9ucyB9IGZyb20gJy4uL2RlZi91bml2ZXJzYWxpemUuanMnO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdW5pdmVyc2FsaXplQmluYXJpZXModXNlck9wdGlvbnM6IFVuaXZlcnNhbGl6ZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBCYXNlVmVyc2lvbkNvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBzdGF0aWMgcGF0aHM6IHN0cmluZ1tdW107XG4gICAgc3RhdGljIHVzYWdlOiBpbXBvcnQoXCJjbGlwYW5pb25cIikuVXNhZ2U7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICBucG1EaXI6IHN0cmluZztcbiAgICBnZXRPcHRpb25zKCk6IHtcbiAgICAgICAgY3dkOiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZ1BhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgICAgIG5wbURpcjogc3RyaW5nO1xuICAgIH07XG59XG4vKipcbiAqIFVwZGF0ZSB2ZXJzaW9uIGluIGNyZWF0ZWQgbnBtIHBhY2thZ2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvbk9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiB3aGVyZSBuYXBpIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbiwgYWxsIG90aGVyIHBhdGhzIG9wdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgcGF0aFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgcHJvY2Vzcy5jd2QoKVxuICAgICAqL1xuICAgIGN3ZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBwYWNrYWdlLmpzb25gXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAncGFja2FnZS5qc29uJ1xuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHRoZSBmb2xkZXIgd2hlcmUgdGhlIG5wbSBwYWNrYWdlcyBwdXRcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICducG0nXG4gICAgICovXG4gICAgbnBtRGlyPzogc3RyaW5nO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYXBwbHlEZWZhdWx0VmVyc2lvbk9wdGlvbnMob3B0aW9uczogVmVyc2lvbk9wdGlvbnMpOiB7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG59O1xuIiwiaW1wb3J0IHsgdHlwZSBWZXJzaW9uT3B0aW9ucyB9IGZyb20gJy4uL2RlZi92ZXJzaW9uLmpzJztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHZlcnNpb24odXNlck9wdGlvbnM6IFZlcnNpb25PcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiIsImltcG9ydCB7IEJhc2VBcnRpZmFjdHNDb21tYW5kIH0gZnJvbSAnLi4vZGVmL2FydGlmYWN0cy5qcyc7XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBBcnRpZmFjdHNDb21tYW5kIGV4dGVuZHMgQmFzZUFydGlmYWN0c0NvbW1hbmQge1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgIHN0YXRpYyBwYXRoczogc3RyaW5nW11bXTtcbiAgICBleGVjdXRlKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBCYXNlQnVpbGRDb21tYW5kIH0gZnJvbSAnLi4vZGVmL2J1aWxkLmpzJztcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIEJ1aWxkQ29tbWFuZCBleHRlbmRzIEJhc2VCdWlsZENvbW1hbmQge1xuICAgIHBpcGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjYXJnb09wdGlvbnM6IHN0cmluZ1tdO1xuICAgIGV4ZWN1dGUoKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB7IEJhc2VDcmVhdGVOcG1EaXJzQ29tbWFuZCB9IGZyb20gJy4uL2RlZi9jcmVhdGUtbnBtLWRpcnMuanMnO1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgQ3JlYXRlTnBtRGlyc0NvbW1hbmQgZXh0ZW5kcyBCYXNlQ3JlYXRlTnBtRGlyc0NvbW1hbmQge1xuICAgIGV4ZWN1dGUoKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB7IEJhc2VOZXdDb21tYW5kIH0gZnJvbSAnLi4vZGVmL25ldy5qcyc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnZXROYXBpVmVyc2lvbkNob2ljZXMoKToge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2YWx1ZTogaW1wb3J0KFwiLi4vdXRpbHMvdmVyc2lvbi5qc1wiKS5OYXBpVmVyc2lvbjtcbn1bXTtcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIE5ld0NvbW1hbmQgZXh0ZW5kcyBCYXNlTmV3Q29tbWFuZCB7XG4gICAgaW50ZXJhY3RpdmU6IGJvb2xlYW47XG4gICAgZXhlY3V0ZSgpOiBQcm9taXNlPDAgfCAxPjtcbiAgICBwcml2YXRlIGZldGNoT3B0aW9ucztcbiAgICBwcml2YXRlIGZldGNoTmFtZTtcbiAgICBwcml2YXRlIGZldGNoTGljZW5zZTtcbiAgICBwcml2YXRlIGZldGNoTmFwaVZlcnNpb247XG4gICAgcHJpdmF0ZSBmZXRjaFRhcmdldHM7XG4gICAgcHJpdmF0ZSBmZXRjaFR5cGVEZWY7XG4gICAgcHJpdmF0ZSBmZXRjaEdpdGh1YkFjdGlvbnM7XG59XG4iLCJpbXBvcnQgeyBCYXNlUHJlUHVibGlzaENvbW1hbmQgfSBmcm9tICcuLi9kZWYvcHJlLXB1Ymxpc2guanMnO1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgUHJlUHVibGlzaENvbW1hbmQgZXh0ZW5kcyBCYXNlUHJlUHVibGlzaENvbW1hbmQge1xuICAgIGV4ZWN1dGUoKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB7IEJhc2VSZW5hbWVDb21tYW5kIH0gZnJvbSAnLi4vZGVmL3JlbmFtZS5qcyc7XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBSZW5hbWVDb21tYW5kIGV4dGVuZHMgQmFzZVJlbmFtZUNvbW1hbmQge1xuICAgIGV4ZWN1dGUoKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB7IEJhc2VVbml2ZXJzYWxpemVDb21tYW5kIH0gZnJvbSAnLi4vZGVmL3VuaXZlcnNhbGl6ZS5qcyc7XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBVbml2ZXJzYWxpemVDb21tYW5kIGV4dGVuZHMgQmFzZVVuaXZlcnNhbGl6ZUNvbW1hbmQge1xuICAgIGV4ZWN1dGUoKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB7IEJhc2VWZXJzaW9uQ29tbWFuZCB9IGZyb20gJy4uL2RlZi92ZXJzaW9uLmpzJztcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIFZlcnNpb25Db21tYW5kIGV4dGVuZHMgQmFzZVZlcnNpb25Db21tYW5kIHtcbiAgICBleGVjdXRlKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBDbGkgfSBmcm9tICdjbGlwYW5pb24nO1xuaW1wb3J0IHsgY29sbGVjdEFydGlmYWN0cyB9IGZyb20gJy4vYXBpL2FydGlmYWN0cy5qcyc7XG5pbXBvcnQgeyBidWlsZFByb2plY3QgfSBmcm9tICcuL2FwaS9idWlsZC5qcyc7XG5pbXBvcnQgeyBjcmVhdGVOcG1EaXJzIH0gZnJvbSAnLi9hcGkvY3JlYXRlLW5wbS1kaXJzLmpzJztcbmltcG9ydCB7IG5ld1Byb2plY3QgfSBmcm9tICcuL2FwaS9uZXcuanMnO1xuaW1wb3J0IHsgcHJlUHVibGlzaCB9IGZyb20gJy4vYXBpL3ByZS1wdWJsaXNoLmpzJztcbmltcG9ydCB7IHJlbmFtZVByb2plY3QgfSBmcm9tICcuL2FwaS9yZW5hbWUuanMnO1xuaW1wb3J0IHsgdW5pdmVyc2FsaXplQmluYXJpZXMgfSBmcm9tICcuL2FwaS91bml2ZXJzYWxpemUuanMnO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4vYXBpL3ZlcnNpb24uanMnO1xuaW1wb3J0IHsgQXJ0aWZhY3RzQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvYXJ0aWZhY3RzLmpzJztcbmltcG9ydCB7IEJ1aWxkQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvYnVpbGQuanMnO1xuaW1wb3J0IHsgQ3JlYXRlTnBtRGlyc0NvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL2NyZWF0ZS1ucG0tZGlycy5qcyc7XG5pbXBvcnQgeyBOZXdDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy9uZXcuanMnO1xuaW1wb3J0IHsgUHJlUHVibGlzaENvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL3ByZS1wdWJsaXNoLmpzJztcbmltcG9ydCB7IFJlbmFtZUNvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL3JlbmFtZS5qcyc7XG5pbXBvcnQgeyBVbml2ZXJzYWxpemVDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy91bml2ZXJzYWxpemUuanMnO1xuaW1wb3J0IHsgVmVyc2lvbkNvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL3ZlcnNpb24uanMnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgY2xpOiBDbGk8aW1wb3J0KFwiY2xpcGFuaW9uXCIpLkJhc2VDb250ZXh0Pjtcbi8qKlxuICpcbiAqIEB1c2FnZVxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBjbGkgPSBuZXcgTmFwaUNsaSgpXG4gKlxuICogY2xpLmJ1aWxkKHtcbiAqICAgY3dkOiAnL3BhdGgvdG8veW91ci9wcm9qZWN0JyxcbiAqIH0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgTmFwaUNsaSB7XG4gICAgYXJ0aWZhY3RzOiB0eXBlb2YgY29sbGVjdEFydGlmYWN0cztcbiAgICBuZXc6IHR5cGVvZiBuZXdQcm9qZWN0O1xuICAgIGJ1aWxkOiB0eXBlb2YgYnVpbGRQcm9qZWN0O1xuICAgIGNyZWF0ZU5wbURpcnM6IHR5cGVvZiBjcmVhdGVOcG1EaXJzO1xuICAgIHByZVB1Ymxpc2g6IHR5cGVvZiBwcmVQdWJsaXNoO1xuICAgIHJlbmFtZTogdHlwZW9mIHJlbmFtZVByb2plY3Q7XG4gICAgdW5pdmVyc2FsaXplOiB0eXBlb2YgdW5pdmVyc2FsaXplQmluYXJpZXM7XG4gICAgdmVyc2lvbjogdHlwZW9mIHZlcnNpb247XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVCdWlsZENvbW1hbmQoYXJnczogc3RyaW5nW10pOiBCdWlsZENvbW1hbmQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVBcnRpZmFjdHNDb21tYW5kKGFyZ3M6IHN0cmluZ1tdKTogQXJ0aWZhY3RzQ29tbWFuZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZUNyZWF0ZU5wbURpcnNDb21tYW5kKGFyZ3M6IHN0cmluZ1tdKTogQ3JlYXRlTnBtRGlyc0NvbW1hbmQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVQcmVQdWJsaXNoQ29tbWFuZChhcmdzOiBzdHJpbmdbXSk6IFByZVB1Ymxpc2hDb21tYW5kO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlUmVuYW1lQ29tbWFuZChhcmdzOiBzdHJpbmdbXSk6IFJlbmFtZUNvbW1hbmQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVVbml2ZXJzYWxpemVDb21tYW5kKGFyZ3M6IHN0cmluZ1tdKTogVW5pdmVyc2FsaXplQ29tbWFuZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZVZlcnNpb25Db21tYW5kKGFyZ3M6IHN0cmluZ1tdKTogVmVyc2lvbkNvbW1hbmQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVOZXdDb21tYW5kKGFyZ3M6IHN0cmluZ1tdKTogTmV3Q29tbWFuZDtcbmV4cG9ydCB7IHBhcnNlVHJpcGxlIH0gZnJvbSAnLi91dGlscy90YXJnZXQuanMnO1xuZXhwb3J0IHsgdHlwZSBHZW5lcmF0ZVR5cGVEZWZPcHRpb25zLCB0eXBlIFdyaXRlSnNCaW5kaW5nT3B0aW9ucywgd3JpdGVKc0JpbmRpbmcsIGdlbmVyYXRlVHlwZURlZiwgfSBmcm9tICcuL2FwaS9idWlsZC5qcyc7XG5leHBvcnQgeyByZWFkTmFwaUNvbmZpZyB9IGZyb20gJy4vdXRpbHMvY29uZmlnLmpzJztcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsSUFBVyxDQUFDLHdCQUF3QjtDQUFDO09BQVcsQ0FBQyxPQUFPO0NBQUc7RUFBQztFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0NBQUU7QUFBQztB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
|
|
1146
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsIm5hbWVzIjpbIkJ1aWxkT3B0aW9ucyIsIlJhd0J1aWxkT3B0aW9ucyIsIlJhd05ld09wdGlvbnMiLCJ2ZXJzaW9uIiwidmVyc2lvbiJdLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWYvYXJ0aWZhY3RzLmQudHMiLCIuLi9zcmMvYXBpL2FydGlmYWN0cy5kLnRzIiwiLi4vc3JjL2RlZi9idWlsZC5kLnRzIiwiLi4vc3JjL3V0aWxzL2xvZy5kLnRzIiwiLi4vc3JjL3V0aWxzL3RhcmdldC5kLnRzIiwiLi4vc3JjL3V0aWxzL2NvbmZpZy5kLnRzIiwiLi4vc3JjL2FwaS9idWlsZC5kLnRzIiwiLi4vc3JjL2RlZi9jcmVhdGUtbnBtLWRpcnMuZC50cyIsIi4uL3NyYy9hcGkvY3JlYXRlLW5wbS1kaXJzLmQudHMiLCIuLi9zcmMvZGVmL25ldy5kLnRzIiwiLi4vc3JjL2FwaS9uZXcuZC50cyIsIi4uL3NyYy9kZWYvcHJlLXB1Ymxpc2guZC50cyIsIi4uL3NyYy9hcGkvcHJlLXB1Ymxpc2guZC50cyIsIi4uL3NyYy9kZWYvcmVuYW1lLmQudHMiLCIuLi9zcmMvYXBpL3JlbmFtZS5kLnRzIiwiLi4vc3JjL2RlZi91bml2ZXJzYWxpemUuZC50cyIsIi4uL3NyYy9hcGkvdW5pdmVyc2FsaXplLmQudHMiLCIuLi9zcmMvZGVmL3ZlcnNpb24uZC50cyIsIi4uL3NyYy9hcGkvdmVyc2lvbi5kLnRzIiwiLi4vc3JjL2NvbW1hbmRzL2FydGlmYWN0cy5kLnRzIiwiLi4vc3JjL2NvbW1hbmRzL2J1aWxkLmQudHMiLCIuLi9zcmMvY29tbWFuZHMvY3JlYXRlLW5wbS1kaXJzLmQudHMiLCIuLi9zcmMvY29tbWFuZHMvbmV3LmQudHMiLCIuLi9zcmMvY29tbWFuZHMvcHJlLXB1Ymxpc2guZC50cyIsIi4uL3NyYy9jb21tYW5kcy9yZW5hbWUuZC50cyIsIi4uL3NyYy9jb21tYW5kcy91bml2ZXJzYWxpemUuZC50cyIsIi4uL3NyYy9jb21tYW5kcy92ZXJzaW9uLmQudHMiLCIuLi9zcmMvaW5kZXguZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VBcnRpZmFjdHNDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgb3V0cHV0RGlyOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgYnVpbGRPdXRwdXREaXI/OiBzdHJpbmc7XG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIGN3ZDogc3RyaW5nO1xuICAgICAgICBjb25maWdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgICAgICBvdXRwdXREaXI6IHN0cmluZztcbiAgICAgICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgICAgIGJ1aWxkT3V0cHV0RGlyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgfTtcbn1cbi8qKlxuICogQ29weSBhcnRpZmFjdHMgZnJvbSBHaXRodWIgQWN0aW9ucyBpbnRvIG5wbSBwYWNrYWdlcyBhbmQgcmVhZHkgdG8gcHVibGlzaFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFydGlmYWN0c09wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiB3aGVyZSBuYXBpIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbiwgYWxsIG90aGVyIHBhdGhzIG9wdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgcGF0aFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgcHJvY2Vzcy5jd2QoKVxuICAgICAqL1xuICAgIGN3ZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBwYWNrYWdlLmpzb25gXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAncGFja2FnZS5qc29uJ1xuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHRoZSBmb2xkZXIgd2hlcmUgYWxsIGJ1aWx0IGAubm9kZWAgZmlsZXMgcHV0LCBzYW1lIGFzIGAtLW91dHB1dC1kaXJgIG9mIGJ1aWxkIGNvbW1hbmRcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICcuL2FydGlmYWN0cydcbiAgICAgKi9cbiAgICBvdXRwdXREaXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIHRoZSBucG0gcGFja2FnZXMgcHV0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbnBtJ1xuICAgICAqL1xuICAgIG5wbURpcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHRoZSBidWlsZCBvdXRwdXQgZGlyLCBvbmx5IG5lZWRlZCB3aGVuIHRhcmdldHMgY29udGFpbiBhIFdBU0kgdGFyZ2V0XG4gICAgICovXG4gICAgYnVpbGRPdXRwdXREaXI/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseURlZmF1bHRBcnRpZmFjdHNPcHRpb25zKG9wdGlvbnM6IEFydGlmYWN0c09wdGlvbnMpOiB7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgb3V0cHV0RGlyOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgYnVpbGQgb3V0cHV0IGRpciwgb25seSBuZWVkZWQgd2hlbiB0YXJnZXRzIGNvbnRhaW4gYSBXQVNJIHRhcmdldFxuICAgICAqL1xuICAgIGJ1aWxkT3V0cHV0RGlyPzogc3RyaW5nO1xufTtcbiIsImltcG9ydCB7IHR5cGUgQXJ0aWZhY3RzT3B0aW9ucyB9IGZyb20gJy4uL2RlZi9hcnRpZmFjdHMuanMnO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY29sbGVjdEFydGlmYWN0cyh1c2VyT3B0aW9uczogQXJ0aWZhY3RzT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4iLCJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VCdWlsZENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBzdGF0aWMgcGF0aHM6IHN0cmluZ1tdW107XG4gICAgc3RhdGljIHVzYWdlOiBpbXBvcnQoXCJjbGlwYW5pb25cIikuVXNhZ2U7XG4gICAgdGFyZ2V0Pzogc3RyaW5nO1xuICAgIGN3ZD86IHN0cmluZztcbiAgICBtYW5pZmVzdFBhdGg/OiBzdHJpbmc7XG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgdGFyZ2V0RGlyPzogc3RyaW5nO1xuICAgIG91dHB1dERpcj86IHN0cmluZztcbiAgICBwbGF0Zm9ybT86IGJvb2xlYW47XG4gICAganNQYWNrYWdlTmFtZT86IHN0cmluZztcbiAgICBjb25zdEVudW0/OiBib29sZWFuO1xuICAgIHJ1bnRpbWVTdHJpbmdFbnVtPzogYm9vbGVhbjtcbiAgICBqc0JpbmRpbmc/OiBzdHJpbmc7XG4gICAgbm9Kc0JpbmRpbmc/OiBib29sZWFuO1xuICAgIGR0cz86IHN0cmluZztcbiAgICBkdHNIZWFkZXI/OiBzdHJpbmc7XG4gICAgbm9EdHNIZWFkZXI/OiBib29sZWFuO1xuICAgIGR0c0NhY2hlOiBib29sZWFuO1xuICAgIGZvcm1hdD86ICdlc20nIHwgJ2NvbW1vbmpzJztcbiAgICBlc20/OiBib29sZWFuO1xuICAgIGNvbW1vbmpzPzogYm9vbGVhbjtcbiAgICBzdHJpcD86IGJvb2xlYW47XG4gICAgcmVsZWFzZT86IGJvb2xlYW47XG4gICAgdmVyYm9zZT86IGJvb2xlYW47XG4gICAgYmluPzogc3RyaW5nO1xuICAgIHBhY2thZ2U/OiBzdHJpbmc7XG4gICAgcHJvZmlsZT86IHN0cmluZztcbiAgICBjcm9zc0NvbXBpbGU/OiBib29sZWFuO1xuICAgIHVzZUNyb3NzPzogYm9vbGVhbjtcbiAgICB1c2VOYXBpQ3Jvc3M/OiBib29sZWFuO1xuICAgIHdhdGNoPzogYm9vbGVhbjtcbiAgICBmZWF0dXJlcz86IHN0cmluZ1tdO1xuICAgIGFsbEZlYXR1cmVzPzogYm9vbGVhbjtcbiAgICBub0RlZmF1bHRGZWF0dXJlcz86IGJvb2xlYW47XG4gICAgb2hvc1NpZ246IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBwYXJzZWQgYnVpbGQgb3B0aW9ucy5cbiAgICAgKi9cbiAgICBnZXRPcHRpb25zKCk6IHtcbiAgICAgICAgdGFyZ2V0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGN3ZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBtYW5pZmVzdFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uZmlnUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgdGFyZ2V0RGlyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIG91dHB1dERpcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwbGF0Zm9ybTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAganNQYWNrYWdlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBjb25zdEVudW06IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIHJ1bnRpbWVTdHJpbmdFbnVtOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBqc0JpbmRpbmc6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbm9Kc0JpbmRpbmc6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGR0czogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBkdHNIZWFkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbm9EdHNIZWFkZXI6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGR0c0NhY2hlOiBib29sZWFuO1xuICAgICAgICBmb3JtYXQ6IFwiZXNtXCIgfCBcImNvbW1vbmpzXCIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGVzbTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29tbW9uanM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIHN0cmlwOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICByZWxlYXNlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICB2ZXJib3NlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBiaW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcGFja2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwcm9maWxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNyb3NzQ29tcGlsZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgdXNlQ3Jvc3M6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIHVzZU5hcGlDcm9zczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgd2F0Y2g6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGZlYXR1cmVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgICAgICAgYWxsRmVhdHVyZXM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIG5vRGVmYXVsdEZlYXR1cmVzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBvaG9zU2lnbjogYm9vbGVhbjtcbiAgICB9O1xufVxuLyoqXG4gKiBCdWlsZCB0aGUgTkFQSS1SUyBwcm9qZWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBCdWlsZCBmb3IgdGhlIHRhcmdldCB0cmlwbGUsIGJ5cGFzc2VkIHRvIGBjYXJnbyBidWlsZCAtLXRhcmdldGBcbiAgICAgKi9cbiAgICB0YXJnZXQ/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9mIHdoZXJlIG5hcGkgY29tbWFuZCB3aWxsIGJlIGV4ZWN1dGVkIGluLCBhbGwgb3RoZXIgcGF0aHMgb3B0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhpcyBwYXRoXG4gICAgICovXG4gICAgY3dkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYENhcmdvLnRvbWxgXG4gICAgICovXG4gICAgbWFuaWZlc3RQYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYHBhY2thZ2UuanNvbmBcbiAgICAgKi9cbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogRGlyZWN0b3J5IGZvciBhbGwgY3JhdGUgZ2VuZXJhdGVkIGFydGlmYWN0cywgc2VlIGBjYXJnbyBidWlsZCAtLXRhcmdldC1kaXJgXG4gICAgICovXG4gICAgdGFyZ2V0RGlyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gd2hlcmUgYWxsIHRoZSBidWlsdCBmaWxlcyB3b3VsZCBiZSBwdXQuIERlZmF1bHQgdG8gdGhlIGNyYXRlIGZvbGRlclxuICAgICAqL1xuICAgIG91dHB1dERpcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBZGQgcGxhdGZvcm0gdHJpcGxlIHRvIHRoZSBnZW5lcmF0ZWQgbm9kZWpzIGJpbmRpbmcgZmlsZSwgZWc6IGBbbmFtZV0ubGludXgteDY0LWdudS5ub2RlYFxuICAgICAqL1xuICAgIHBsYXRmb3JtPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBQYWNrYWdlIG5hbWUgaW4gZ2VuZXJhdGVkIGpzIGJpbmRpbmcgZmlsZS4gT25seSB3b3JrcyB3aXRoIGAtLXBsYXRmb3JtYCBmbGFnXG4gICAgICovXG4gICAganNQYWNrYWdlTmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGdlbmVyYXRlIGNvbnN0IGVudW0gZm9yIHR5cGVzY3JpcHQgYmluZGluZ3NcbiAgICAgKi9cbiAgICBjb25zdEVudW0/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEVtaXQgYCNbbmFwaShzdHJpbmdfZW51bSldYCBlbnVtcyBhcyBydW50aW1lIGVudW1zIChgZXhwb3J0IGRlY2xhcmUgZW51bWApIHVuZGVyIGAtLW5vLWNvbnN0LWVudW1gLiBEZWZhdWx0OiB0eXBlLW9ubHkgdW5pb24uXG4gICAgICovXG4gICAgcnVudGltZVN0cmluZ0VudW0/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFBhdGggYW5kIGZpbGVuYW1lIG9mIGdlbmVyYXRlZCBKUyBiaW5kaW5nIGZpbGUuIE9ubHkgd29ya3Mgd2l0aCBgLS1wbGF0Zm9ybWAgZmxhZy4gUmVsYXRpdmUgdG8gYC0tb3V0cHV0LWRpcmAuXG4gICAgICovXG4gICAganNCaW5kaW5nPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgZ2VuZXJhdGlvbiBKUyBiaW5kaW5nIGZpbGUuIE9ubHkgd29ya3Mgd2l0aCBgLS1wbGF0Zm9ybWAgZmxhZy5cbiAgICAgKi9cbiAgICBub0pzQmluZGluZz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogUGF0aCBhbmQgZmlsZW5hbWUgb2YgZ2VuZXJhdGVkIHR5cGUgZGVmIGZpbGUuIFJlbGF0aXZlIHRvIGAtLW91dHB1dC1kaXJgXG4gICAgICovXG4gICAgZHRzPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEN1c3RvbSBmaWxlIGhlYWRlciBmb3IgZ2VuZXJhdGVkIHR5cGUgZGVmIGZpbGUuIE9ubHkgd29ya3Mgd2hlbiBgdHlwZWRlZmAgZmVhdHVyZSBlbmFibGVkLlxuICAgICAqL1xuICAgIGR0c0hlYWRlcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIGRlZmF1bHQgZmlsZSBoZWFkZXIgZm9yIGdlbmVyYXRlZCB0eXBlIGRlZiBmaWxlLiBPbmx5IHdvcmtzIHdoZW4gYHR5cGVkZWZgIGZlYXR1cmUgZW5hYmxlZC5cbiAgICAgKi9cbiAgICBub0R0c0hlYWRlcj86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBlbmFibGUgdGhlIGR0cyBjYWNoZSwgZGVmYXVsdCB0byB0cnVlXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZHRzQ2FjaGU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRoZSBtb2R1bGUgZm9ybWF0IG9mIHRoZSBnZW5lcmF0ZWQgSlMgYmluZGluZyBmaWxlLiBPbmx5IHdvcmtzIHdpdGggYC0tcGxhdGZvcm1gIGZsYWcuIERlZmF1bHRzIHRvIGBjb21tb25qc2AuXG4gICAgICovXG4gICAgZm9ybWF0PzogJ2VzbScgfCAnY29tbW9uanMnO1xuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBgLS1mb3JtYXQgZXNtYC5cbiAgICAgKi9cbiAgICBlc20/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBgLS1mb3JtYXQgY29tbW9uanNgLlxuICAgICAqL1xuICAgIGNvbW1vbmpzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHN0cmlwIHRoZSBsaWJyYXJ5IHRvIGFjaGlldmUgdGhlIG1pbmltdW0gZmlsZSBzaXplXG4gICAgICovXG4gICAgc3RyaXA/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIGluIHJlbGVhc2UgbW9kZVxuICAgICAqL1xuICAgIHJlbGVhc2U/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFZlcmJvc2VseSBsb2cgYnVpbGQgY29tbWFuZCB0cmFjZVxuICAgICAqL1xuICAgIHZlcmJvc2U/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIG9ubHkgdGhlIHNwZWNpZmllZCBiaW5hcnlcbiAgICAgKi9cbiAgICBiaW4/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQnVpbGQgdGhlIHNwZWNpZmllZCBsaWJyYXJ5IG9yIHRoZSBvbmUgYXQgY3dkXG4gICAgICovXG4gICAgcGFja2FnZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBCdWlsZCBhcnRpZmFjdHMgd2l0aCB0aGUgc3BlY2lmaWVkIHByb2ZpbGVcbiAgICAgKi9cbiAgICBwcm9maWxlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFtleHBlcmltZW50YWxdIGNyb3NzIGNvbXBpbGUgYnkgcmVwbGFjaW5nIHRoZSBjYXJnbyBzdWJjb21tYW5kOiBXaW5kb3dzIE1TVkMgdGFyZ2V0cyBmcm9tIGEgbm9uLVdpbmRvd3MgaG9zdCBidWlsZCB3aXRoIGBjYXJnby14d2luYCAoYHdpbmRvd3MtZ251YCB0YXJnZXRzIGFyZSByZWplY3RlZCwgYGNhcmdvLXh3aW5gIGNhbm5vdCBoYW5kbGUgdGhlbSksIG5vbi1XaW5kb3dzIHRhcmdldHMgYnVpbGQgd2l0aCBgY2FyZ28temlnYnVpbGRgIChyZXF1aXJlcyBgemlnYCBvbiBQQVRIKS4gVGhlIHNlbGVjdGVkIHN1YmNvbW1hbmQgaXMgYXV0by1pbnN0YWxsZWQgb24gZmlyc3QgdXNlLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgLS11c2UtY3Jvc3NgLCBgLS11c2UtbmFwaS1jcm9zc2Agb3IgYC0td2F0Y2hgXG4gICAgICovXG4gICAgY3Jvc3NDb21waWxlPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBbZXhwZXJpbWVudGFsXSBub3QgcmVjb21tZW5kZWQsIHByZWZlciBgLS1jcm9zcy1jb21waWxlYCBvciBgLS11c2UtbmFwaS1jcm9zc2A6IGJ1aWxkIGluIGEgRG9ja2VyIG9yIFBvZG1hbiBjb250YWluZXIgd2l0aCBbY3Jvc3NdKGh0dHBzOi8vZ2l0aHViLmNvbS9jcm9zcy1ycy9jcm9zcyksIHdoaWNoIG11c3QgYmUgaW5zdGFsbGVkIG1hbnVhbGx5IGFuZCBuZWVkcyBhIHJ1bm5pbmcgY29udGFpbmVyIGVuZ2luZS4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC0tY3Jvc3MtY29tcGlsZWAsIGAtLXVzZS1uYXBpLWNyb3NzYCBvciBgLS13YXRjaGBcbiAgICAgKi9cbiAgICB1c2VDcm9zcz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogW2V4cGVyaW1lbnRhbF0gZG93bmxvYWQgYSBwcmVidWlsdCBnY2MgY3Jvc3MgdG9vbGNoYWluIGZyb20gYEBuYXBpLXJzL2Nyb3NzLXRvb2xjaGFpbmAgKGdsaWJjIDIuMTcpIGFuZCBzZXQgbGlua2VyIGFuZCBDIGNvbXBpbGVyIGVudmlyb25tZW50IHZhcmlhYmxlcy4gTGludXggZ2xpYmMgdGFyZ2V0cyBvbmx5ICh4NjQsIGFybTY0LCBhcm12NywgcHBjNjRsZSwgczM5MHgpIG9uIGEgTGludXggeDY0IG9yIGFybTY0IGhvc3QsIGFueSBvdGhlciB0YXJnZXQgb3IgaG9zdCBlcnJvcnMuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGAtLWNyb3NzLWNvbXBpbGVgIG9yIGAtLXVzZS1jcm9zc2BcbiAgICAgKi9cbiAgICB1c2VOYXBpQ3Jvc3M/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIHdhdGNoIHRoZSBjcmF0ZSBjaGFuZ2VzIGFuZCBidWlsZCBjb250aW51b3VzbHkgd2l0aCBgY2FyZ28td2F0Y2hgIGNyYXRlc1xuICAgICAqL1xuICAgIHdhdGNoPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBTcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBmZWF0dXJlcyB0byBhY3RpdmF0ZVxuICAgICAqL1xuICAgIGZlYXR1cmVzPzogc3RyaW5nW107XG4gICAgLyoqXG4gICAgICogQWN0aXZhdGUgYWxsIGF2YWlsYWJsZSBmZWF0dXJlc1xuICAgICAqL1xuICAgIGFsbEZlYXR1cmVzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBEbyBub3QgYWN0aXZhdGUgdGhlIGBkZWZhdWx0YCBmZWF0dXJlXG4gICAgICovXG4gICAgbm9EZWZhdWx0RmVhdHVyZXM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gc2VsZi1zaWduIHRoZSBidWlsdCBiaW5hcnkgZm9yIE9wZW5IYXJtb255IHRhcmdldHMgYnkgaW5qZWN0aW5nIGEgYC5jb2Rlc2lnbmAgZnMtdmVyaXR5IHNlY3Rpb24sIHNvIHRoZSBgLnNvYCBjYW4gYmUgbG9hZGVkIG9uIEhhcm1vbnlPUyBkZXZpY2VzLiBPbmx5IHdvcmtzIHdpdGggYCotdW5rbm93bi1saW51eC1vaG9zYCB0YXJnZXRzXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgb2hvc1NpZ24/OiBib29sZWFuO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYXBwbHlEZWZhdWx0QnVpbGRPcHRpb25zKG9wdGlvbnM6IEJ1aWxkT3B0aW9ucyk6IHtcbiAgICAvKipcbiAgICAgKiBCdWlsZCBmb3IgdGhlIHRhcmdldCB0cmlwbGUsIGJ5cGFzc2VkIHRvIGBjYXJnbyBidWlsZCAtLXRhcmdldGBcbiAgICAgKi9cbiAgICB0YXJnZXQ/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9mIHdoZXJlIG5hcGkgY29tbWFuZCB3aWxsIGJlIGV4ZWN1dGVkIGluLCBhbGwgb3RoZXIgcGF0aHMgb3B0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhpcyBwYXRoXG4gICAgICovXG4gICAgY3dkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYENhcmdvLnRvbWxgXG4gICAgICovXG4gICAgbWFuaWZlc3RQYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYHBhY2thZ2UuanNvbmBcbiAgICAgKi9cbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogRGlyZWN0b3J5IGZvciBhbGwgY3JhdGUgZ2VuZXJhdGVkIGFydGlmYWN0cywgc2VlIGBjYXJnbyBidWlsZCAtLXRhcmdldC1kaXJgXG4gICAgICovXG4gICAgdGFyZ2V0RGlyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gd2hlcmUgYWxsIHRoZSBidWlsdCBmaWxlcyB3b3VsZCBiZSBwdXQuIERlZmF1bHQgdG8gdGhlIGNyYXRlIGZvbGRlclxuICAgICAqL1xuICAgIG91dHB1dERpcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBZGQgcGxhdGZvcm0gdHJpcGxlIHRvIHRoZSBnZW5lcmF0ZWQgbm9kZWpzIGJpbmRpbmcgZmlsZSwgZWc6IGBbbmFtZV0ubGludXgteDY0LWdudS5ub2RlYFxuICAgICAqL1xuICAgIHBsYXRmb3JtPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBQYWNrYWdlIG5hbWUgaW4gZ2VuZXJhdGVkIGpzIGJpbmRpbmcgZmlsZS4gT25seSB3b3JrcyB3aXRoIGAtLXBsYXRmb3JtYCBmbGFnXG4gICAgICovXG4gICAganNQYWNrYWdlTmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGdlbmVyYXRlIGNvbnN0IGVudW0gZm9yIHR5cGVzY3JpcHQgYmluZGluZ3NcbiAgICAgKi9cbiAgICBjb25zdEVudW0/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEVtaXQgYCNbbmFwaShzdHJpbmdfZW51bSldYCBlbnVtcyBhcyBydW50aW1lIGVudW1zIChgZXhwb3J0IGRlY2xhcmUgZW51bWApIHVuZGVyIGAtLW5vLWNvbnN0LWVudW1gLiBEZWZhdWx0OiB0eXBlLW9ubHkgdW5pb24uXG4gICAgICovXG4gICAgcnVudGltZVN0cmluZ0VudW0/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFBhdGggYW5kIGZpbGVuYW1lIG9mIGdlbmVyYXRlZCBKUyBiaW5kaW5nIGZpbGUuIE9ubHkgd29ya3Mgd2l0aCBgLS1wbGF0Zm9ybWAgZmxhZy4gUmVsYXRpdmUgdG8gYC0tb3V0cHV0LWRpcmAuXG4gICAgICovXG4gICAganNCaW5kaW5nPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgZ2VuZXJhdGlvbiBKUyBiaW5kaW5nIGZpbGUuIE9ubHkgd29ya3Mgd2l0aCBgLS1wbGF0Zm9ybWAgZmxhZy5cbiAgICAgKi9cbiAgICBub0pzQmluZGluZz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogUGF0aCBhbmQgZmlsZW5hbWUgb2YgZ2VuZXJhdGVkIHR5cGUgZGVmIGZpbGUuIFJlbGF0aXZlIHRvIGAtLW91dHB1dC1kaXJgXG4gICAgICovXG4gICAgZHRzPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEN1c3RvbSBmaWxlIGhlYWRlciBmb3IgZ2VuZXJhdGVkIHR5cGUgZGVmIGZpbGUuIE9ubHkgd29ya3Mgd2hlbiBgdHlwZWRlZmAgZmVhdHVyZSBlbmFibGVkLlxuICAgICAqL1xuICAgIGR0c0hlYWRlcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIGRlZmF1bHQgZmlsZSBoZWFkZXIgZm9yIGdlbmVyYXRlZCB0eXBlIGRlZiBmaWxlLiBPbmx5IHdvcmtzIHdoZW4gYHR5cGVkZWZgIGZlYXR1cmUgZW5hYmxlZC5cbiAgICAgKi9cbiAgICBub0R0c0hlYWRlcj86IGJvb2xlYW47XG4gICAgZHRzQ2FjaGU6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIG1vZHVsZSBmb3JtYXQgb2YgdGhlIGdlbmVyYXRlZCBKUyBiaW5kaW5nIGZpbGUuIE9ubHkgd29ya3Mgd2l0aCBgLS1wbGF0Zm9ybWAgZmxhZy4gRGVmYXVsdHMgdG8gYGNvbW1vbmpzYC5cbiAgICAgKi9cbiAgICBmb3JtYXQ/OiBcImVzbVwiIHwgXCJjb21tb25qc1wiO1xuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBgLS1mb3JtYXQgZXNtYC5cbiAgICAgKi9cbiAgICBlc20/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBgLS1mb3JtYXQgY29tbW9uanNgLlxuICAgICAqL1xuICAgIGNvbW1vbmpzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHN0cmlwIHRoZSBsaWJyYXJ5IHRvIGFjaGlldmUgdGhlIG1pbmltdW0gZmlsZSBzaXplXG4gICAgICovXG4gICAgc3RyaXA/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIGluIHJlbGVhc2UgbW9kZVxuICAgICAqL1xuICAgIHJlbGVhc2U/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFZlcmJvc2VseSBsb2cgYnVpbGQgY29tbWFuZCB0cmFjZVxuICAgICAqL1xuICAgIHZlcmJvc2U/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIG9ubHkgdGhlIHNwZWNpZmllZCBiaW5hcnlcbiAgICAgKi9cbiAgICBiaW4/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQnVpbGQgdGhlIHNwZWNpZmllZCBsaWJyYXJ5IG9yIHRoZSBvbmUgYXQgY3dkXG4gICAgICovXG4gICAgcGFja2FnZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBCdWlsZCBhcnRpZmFjdHMgd2l0aCB0aGUgc3BlY2lmaWVkIHByb2ZpbGVcbiAgICAgKi9cbiAgICBwcm9maWxlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFtleHBlcmltZW50YWxdIGNyb3NzIGNvbXBpbGUgYnkgcmVwbGFjaW5nIHRoZSBjYXJnbyBzdWJjb21tYW5kOiBXaW5kb3dzIE1TVkMgdGFyZ2V0cyBmcm9tIGEgbm9uLVdpbmRvd3MgaG9zdCBidWlsZCB3aXRoIGBjYXJnby14d2luYCAoYHdpbmRvd3MtZ251YCB0YXJnZXRzIGFyZSByZWplY3RlZCwgYGNhcmdvLXh3aW5gIGNhbm5vdCBoYW5kbGUgdGhlbSksIG5vbi1XaW5kb3dzIHRhcmdldHMgYnVpbGQgd2l0aCBgY2FyZ28temlnYnVpbGRgIChyZXF1aXJlcyBgemlnYCBvbiBQQVRIKS4gVGhlIHNlbGVjdGVkIHN1YmNvbW1hbmQgaXMgYXV0by1pbnN0YWxsZWQgb24gZmlyc3QgdXNlLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgLS11c2UtY3Jvc3NgLCBgLS11c2UtbmFwaS1jcm9zc2Agb3IgYC0td2F0Y2hgXG4gICAgICovXG4gICAgY3Jvc3NDb21waWxlPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBbZXhwZXJpbWVudGFsXSBub3QgcmVjb21tZW5kZWQsIHByZWZlciBgLS1jcm9zcy1jb21waWxlYCBvciBgLS11c2UtbmFwaS1jcm9zc2A6IGJ1aWxkIGluIGEgRG9ja2VyIG9yIFBvZG1hbiBjb250YWluZXIgd2l0aCBbY3Jvc3NdKGh0dHBzOi8vZ2l0aHViLmNvbS9jcm9zcy1ycy9jcm9zcyksIHdoaWNoIG11c3QgYmUgaW5zdGFsbGVkIG1hbnVhbGx5IGFuZCBuZWVkcyBhIHJ1bm5pbmcgY29udGFpbmVyIGVuZ2luZS4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC0tY3Jvc3MtY29tcGlsZWAsIGAtLXVzZS1uYXBpLWNyb3NzYCBvciBgLS13YXRjaGBcbiAgICAgKi9cbiAgICB1c2VDcm9zcz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogW2V4cGVyaW1lbnRhbF0gZG93bmxvYWQgYSBwcmVidWlsdCBnY2MgY3Jvc3MgdG9vbGNoYWluIGZyb20gYEBuYXBpLXJzL2Nyb3NzLXRvb2xjaGFpbmAgKGdsaWJjIDIuMTcpIGFuZCBzZXQgbGlua2VyIGFuZCBDIGNvbXBpbGVyIGVudmlyb25tZW50IHZhcmlhYmxlcy4gTGludXggZ2xpYmMgdGFyZ2V0cyBvbmx5ICh4NjQsIGFybTY0LCBhcm12NywgcHBjNjRsZSwgczM5MHgpIG9uIGEgTGludXggeDY0IG9yIGFybTY0IGhvc3QsIGFueSBvdGhlciB0YXJnZXQgb3IgaG9zdCBlcnJvcnMuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGAtLWNyb3NzLWNvbXBpbGVgIG9yIGAtLXVzZS1jcm9zc2BcbiAgICAgKi9cbiAgICB1c2VOYXBpQ3Jvc3M/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIHdhdGNoIHRoZSBjcmF0ZSBjaGFuZ2VzIGFuZCBidWlsZCBjb250aW51b3VzbHkgd2l0aCBgY2FyZ28td2F0Y2hgIGNyYXRlc1xuICAgICAqL1xuICAgIHdhdGNoPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBTcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBmZWF0dXJlcyB0byBhY3RpdmF0ZVxuICAgICAqL1xuICAgIGZlYXR1cmVzPzogc3RyaW5nW107XG4gICAgLyoqXG4gICAgICogQWN0aXZhdGUgYWxsIGF2YWlsYWJsZSBmZWF0dXJlc1xuICAgICAqL1xuICAgIGFsbEZlYXR1cmVzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBEbyBub3QgYWN0aXZhdGUgdGhlIGBkZWZhdWx0YCBmZWF0dXJlXG4gICAgICovXG4gICAgbm9EZWZhdWx0RmVhdHVyZXM/OiBib29sZWFuO1xuICAgIG9ob3NTaWduOiBib29sZWFuO1xufTtcbiIsImRlY2xhcmUgbW9kdWxlICdvYnVnJyB7XG4gICAgaW50ZXJmYWNlIERlYnVnZ2VyIHtcbiAgICAgICAgaW5mbzogdHlwZW9mIGNvbnNvbGUuZXJyb3I7XG4gICAgICAgIHdhcm46IHR5cGVvZiBjb25zb2xlLmVycm9yO1xuICAgICAgICBlcnJvcjogdHlwZW9mIGNvbnNvbGUuZXJyb3I7XG4gICAgfVxufVxuZXhwb3J0IGRlY2xhcmUgY29uc3QgZGVidWdGYWN0b3J5OiAobmFtZXNwYWNlOiBzdHJpbmcpID0+IGltcG9ydChcIm9idWdcIikuRGVidWdnZXI7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBkZWJ1ZzogaW1wb3J0KFwib2J1Z1wiKS5EZWJ1Z2dlcjtcbiIsImV4cG9ydCB0eXBlIFBsYXRmb3JtID0gTm9kZUpTLlBsYXRmb3JtIHwgJ3dhc20nIHwgJ3dhc2knIHwgJ29wZW5oYXJtb255JztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFVOSVZFUlNBTF9UQVJHRVRTOiB7XG4gICAgcmVhZG9ubHkgJ3VuaXZlcnNhbC1hcHBsZS1kYXJ3aW4nOiByZWFkb25seSBbXCJhYXJjaDY0LWFwcGxlLWRhcndpblwiLCBcIng4Nl82NC1hcHBsZS1kYXJ3aW5cIl07XG59O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgQVZBSUxBQkxFX1RBUkdFVFM6IHJlYWRvbmx5IFtcImFhcmNoNjQtYXBwbGUtZGFyd2luXCIsIFwiYWFyY2g2NC1saW51eC1hbmRyb2lkXCIsIFwiYWFyY2g2NC11bmtub3duLWxpbnV4LWdudVwiLCBcImFhcmNoNjQtdW5rbm93bi1saW51eC1tdXNsXCIsIFwiYWFyY2g2NC11bmtub3duLWxpbnV4LW9ob3NcIiwgXCJhYXJjaDY0LXBjLXdpbmRvd3MtbXN2Y1wiLCBcIng4Nl82NC1hcHBsZS1kYXJ3aW5cIiwgXCJ4ODZfNjQtcGMtd2luZG93cy1tc3ZjXCIsIFwieDg2XzY0LXBjLXdpbmRvd3MtZ251XCIsIFwieDg2XzY0LXVua25vd24tbGludXgtZ251XCIsIFwieDg2XzY0LXVua25vd24tbGludXgtbXVzbFwiLCBcIng4Nl82NC11bmtub3duLWxpbnV4LW9ob3NcIiwgXCJ4ODZfNjQtdW5rbm93bi1mcmVlYnNkXCIsIFwiaTY4Ni1wYy13aW5kb3dzLW1zdmNcIiwgXCJhcm12Ny11bmtub3duLWxpbnV4LWdudWVhYmloZlwiLCBcImFybXY3LXVua25vd24tbGludXgtbXVzbGVhYmloZlwiLCBcImFybXY3LWxpbnV4LWFuZHJvaWRlYWJpXCIsIFwidW5pdmVyc2FsLWFwcGxlLWRhcndpblwiLCBcImxvb25nYXJjaDY0LXVua25vd24tbGludXgtZ251XCIsIFwicmlzY3Y2NGdjLXVua25vd24tbGludXgtZ251XCIsIFwicG93ZXJwYzY0bGUtdW5rbm93bi1saW51eC1nbnVcIiwgXCJzMzkweC11bmtub3duLWxpbnV4LWdudVwiLCBcIndhc20zMi13YXNpcDFcIiwgXCJ3YXNtMzItd2FzaXAxLXRocmVhZHNcIl07XG5leHBvcnQgdHlwZSBUYXJnZXRUcmlwbGUgPSAodHlwZW9mIEFWQUlMQUJMRV9UQVJHRVRTKVtudW1iZXJdO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgREVGQVVMVF9UQVJHRVRTOiByZWFkb25seSBbXCJ4ODZfNjQtYXBwbGUtZGFyd2luXCIsIFwiYWFyY2g2NC1hcHBsZS1kYXJ3aW5cIiwgXCJ4ODZfNjQtcGMtd2luZG93cy1tc3ZjXCIsIFwieDg2XzY0LXVua25vd24tbGludXgtZ251XCJdO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgVEFSR0VUX0xJTktFUjogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbnR5cGUgTm9kZUpTQXJjaCA9ICdhcm0nIHwgJ2FybTY0JyB8ICdpYTMyJyB8ICdsb29uZzY0JyB8ICdtaXBzJyB8ICdtaXBzZWwnIHwgJ3BwYycgfCAncHBjNjQnIHwgJ3Jpc2N2NjQnIHwgJ3MzOTAnIHwgJ3MzOTB4JyB8ICd4MzInIHwgJ3g2NCcgfCAndW5pdmVyc2FsJyB8ICd3YXNtMzInO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgTm9kZUFyY2hUb0NwdTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFVuaUFyY2hzQnlQbGF0Zm9ybTogUGFydGlhbDxSZWNvcmQ8UGxhdGZvcm0sIE5vZGVKU0FyY2hbXT4+O1xuZXhwb3J0IGludGVyZmFjZSBUYXJnZXQge1xuICAgIHRyaXBsZTogc3RyaW5nO1xuICAgIHBsYXRmb3JtQXJjaEFCSTogc3RyaW5nO1xuICAgIHBsYXRmb3JtOiBQbGF0Zm9ybTtcbiAgICBhcmNoOiBOb2RlSlNBcmNoO1xuICAgIGFiaTogc3RyaW5nIHwgbnVsbDtcbn1cbmV4cG9ydCB0eXBlIFdhc2lGbGF2b3IgPSAnc2luZ2xlJyB8ICd0aHJlYWRzJztcbmV4cG9ydCBpbnRlcmZhY2UgV2FzaVRhcmdldCB7XG4gICAgY2Fub25pY2FsVHJpcGxlOiBzdHJpbmc7XG4gICAgZmxhdm9yOiBXYXNpRmxhdm9yO1xuICAgIHBsYXRmb3JtQXJjaEFCSTogc3RyaW5nO1xufVxuLyoqXG4gKiBSZXNvbHZlIGhpc3RvcmljYWwgV0FTSSBzcGVsbGluZ3MgdG8gb25lIGJ1aWxkIHRhcmdldCBhbmQgb25lIGFydGlmYWN0XG4gKiBpZGVudGl0eS4gYHdhc20zMi13YXNpYCBoaXN0b3JpY2FsbHkgcHJvZHVjZWQgdGhlIHRocmVhZGVkIHBhY2thZ2UsIHNvIGl0XG4gKiBtdXN0IG5ldmVyIGJlIGluZmVycmVkIGFzIHRocmVhZGxlc3MgbWVyZWx5IGJlY2F1c2UgaXRzIG5hbWUgbGFja3MgdGhlXG4gKiBgLXRocmVhZHNgIHN1ZmZpeC5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZ2V0V2FzaVRhcmdldCh0YXJnZXQ6IHN0cmluZyB8IFBpY2s8VGFyZ2V0LCAndHJpcGxlJz4pOiBXYXNpVGFyZ2V0IHwgdW5kZWZpbmVkO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gd2FzaVRhcmdldEhhc1RocmVhZHModGFyZ2V0OiBzdHJpbmcgfCBQaWNrPFRhcmdldCwgJ3RyaXBsZSc+KTogYm9vbGVhbjtcbi8qKlxuICogRGV0ZWN0IHRoZSBtYWpvciB2ZXJzaW9uIG9mIGEgd2FzaS1zZGsgaW5zdGFsbGF0aW9uLlxuICpcbiAqIHdhc2ktbGliYyBkcm9wcGVkIHRoZSB1bnVzZWQgYGludCBvcGAgcGFyYW1ldGVyIGZyb21cbiAqIGBfX3dhc2lsaWJjX2Z1dGV4X3dhaXRfYXRvbWljX3dhaXRgIGFuZCBgX193YXNpbGliY19mdXRleF93YWl0X21heWJlX2J1c3lgLFxuICogYW5kIHdhc2ktc2RrIDM0IGlzIHRoZSBmaXJzdCByZWxlYXNlIHRoYXQgc2hpcHMgdGhlIDMtYXJndW1lbnQgc2lnbmF0dXJlLlxuICogU3RhdGljIGFyY2hpdmVzIGNvbXBpbGVkIGFnYWluc3QgdGhlIHR3byBzaWduYXR1cmVzIGNhbm5vdCBiZSBtaXhlZCwgc28gdGhlXG4gKiBlbW5hcGkgYXJjaGl2ZXMgaGF2ZSB0byBiZSBwaWNrZWQgYnkgd2FzaS1zZGsgdmVyc2lvbiwgbm90IGJ5IHRhcmdldCB0cmlwbGVcbiAqIGFsb25lLlxuICpcbiAqIGA8d2FzaVNka1BhdGg+L1ZFUlNJT05gIGlzIHRoZSBwcmltYXJ5IHNpZ25hbDogZXZlcnkgcmVsZWFzZSBzaGlwcyBpdCBhbmRcbiAqIGl0cyBmaXJzdCBsaW5lIGlzIHRoZSB2ZXJzaW9uIChgMjcuMGAsIGAzMy4wK21gLCBgMzQuMGAsIC4uLikuIFRoZVxuICogYHdhc2kvdmVyc2lvbi5oYCBoZWFkZXIgY2FycnlpbmcgYF9fd2FzaV9zZGtfbWFqb3JfX2Agb25seSBhcHBlYXJzIGZyb21cbiAqIHdhc2ktc2RrIDMwIG9ud2FyZHMsIHNvIGl0IHN0YXlzIGEgZmFsbGJhY2sgZm9yIHRyZWVzIHdpdGhvdXQgYSBgVkVSU0lPTmAuXG4gKlxuICogUmV0dXJucyBgbnVsbGAgd2hlbiBuZWl0aGVyIHNpZ25hbCBpcyByZWFkYWJsZSBvciBwYXJzZWFibGUuIERldGVjdGlvbiBtdXN0XG4gKiBuZXZlciB0aHJvdzogYW4gdW5rbm93biB3YXNpLXNkayBkZWdyYWRlcyB0byB0aGUgbGVnYWN5IGFyY2hpdmVzIGluc3RlYWQgb2ZcbiAqIGZhaWxpbmcgdGhlIGJ1aWxkLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB3YXNpU2RrTWFqb3JWZXJzaW9uKHdhc2lTZGtQYXRoOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsO1xuLyoqXG4gKiBQYXRoIHRvIHRoZSB3YXNpLWxpYmMgdGhhdCBjYXJnbyBsaW5rcyB3aGVuIG5vIHdhc2ktc2RrIGlzIGNvbmZpZ3VyZWQuXG4gKlxuICogV2l0aG91dCBgV0FTSV9TREtfUEFUSGAgdGhlIHRhcmdldCBsaW5rcyB0aHJvdWdoIGBydXN0LWxsZGAgYWdhaW5zdCB0aGVcbiAqIHdhc2ktbGliYyBidW5kbGVkIHdpdGggdGhlIFJ1c3Qgc3RhbmRhcmQgbGlicmFyeSwgc28gdGhhdCBjb3B5IOKAlCBub3QgYVxuICogd2FzaS1zZGsg4oCUIGRlY2lkZXMgdGhlIGZ1dGV4IEFCSS5cbiAqXG4gKiBgY3dkYCBtdXN0IGJlIHRoZSBkaXJlY3RvcnkgQ2FyZ28gaXMgc3Bhd25lZCBpbiwgYmVjYXVzZSB0aGF0IGlzIHdoYXRcbiAqIHNlbGVjdHMgdGhlIHRvb2xjaGFpbi5cbiAqXG4gKiBSZXR1cm5zIGBudWxsYCB3aGVuIGBydXN0Y2AgY2Fubm90IGJlIHF1ZXJpZWQgb3IgdGhlIHRhcmdldCBpcyBub3RcbiAqIGluc3RhbGxlZC4gTmV2ZXIgdGhyb3dzOiBhbiB1bmRldGVjdGFibGUgc3lzcm9vdCBkZWdyYWRlcyB0byB0aGUgbGVnYWN5XG4gKiBhcmNoaXZlcy5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcnVzdEJ1bmRsZWRXYXNpTGliYyh3YXNpVGFyZ2V0OiBzdHJpbmcsIGN3ZD86IHN0cmluZyk6IHN0cmluZyB8IG51bGw7XG4vKipcbiAqIFdoZXRoZXIgYSB3YXNpLWxpYmMgYXJjaGl2ZSBjYXJyaWVzIHRoZSAzLWFyZ3VtZW50IGZ1dGV4IEFCSS5cbiAqXG4gKiBSZXR1cm5zIGBudWxsYCB3aGVuIHRoZSBhcmNoaXZlIGNhbm5vdCBiZSByZWFkLCBzbyBjYWxsZXJzIGNhbiB0ZWxsXG4gKiBcImRlZmluaXRlbHkgdGhlIGxlZ2FjeSBBQklcIiBhcGFydCBmcm9tIFwiY291bGQgbm90IHRlbGxcIi5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gd2FzaUxpYmNIYXNOZXdGdXRleEFiaShsaWJjQXJjaGl2ZVBhdGg6IHN0cmluZyB8IG51bGwpOiBib29sZWFuIHwgbnVsbDtcbi8qKlxuICogQSB0cmlwbGUgaXMgYSBzcGVjaWZpYyBmb3JtYXQgZm9yIHNwZWNpZnlpbmcgYSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuICogVHJpcGxlcyBtYXkgYmUgcmVmZXJyZWQgdG8gYXMgYSB0YXJnZXQgdHJpcGxlIHdoaWNoIGlzIHRoZSBhcmNoaXRlY3R1cmUgZm9yIHRoZSBhcnRpZmFjdCBwcm9kdWNlZCwgYW5kIHRoZSBob3N0IHRyaXBsZSB3aGljaCBpcyB0aGUgYXJjaGl0ZWN0dXJlIHRoYXQgdGhlIGNvbXBpbGVyIGlzIHJ1bm5pbmcgb24uXG4gKiBUaGUgZ2VuZXJhbCBmb3JtYXQgb2YgdGhlIHRyaXBsZSBpcyBgPGFyY2g+PHN1Yj4tPHZlbmRvcj4tPHN5cz4tPGFiaT5gIHdoZXJlOlxuICogICAtIGBhcmNoYCA9IFRoZSBiYXNlIENQVSBhcmNoaXRlY3R1cmUsIGZvciBleGFtcGxlIGB4ODZfNjRgLCBgaTY4NmAsIGBhcm1gLCBgdGh1bWJgLCBgbWlwc2AsIGV0Yy5cbiAqICAgLSBgc3ViYCA9IFRoZSBDUFUgc3ViLWFyY2hpdGVjdHVyZSwgZm9yIGV4YW1wbGUgYGFybWAgaGFzIGB2N2AsIGB2N3NgLCBgdjV0ZWAsIGV0Yy5cbiAqICAgLSBgdmVuZG9yYCA9IFRoZSB2ZW5kb3IsIGZvciBleGFtcGxlIGB1bmtub3duYCwgYGFwcGxlYCwgYHBjYCwgYG52aWRpYWAsIGV0Yy5cbiAqICAgLSBgc3lzYCA9IFRoZSBzeXN0ZW0gbmFtZSwgZm9yIGV4YW1wbGUgYGxpbnV4YCwgYHdpbmRvd3NgLCBgZGFyd2luYCwgZXRjLiBub25lIGlzIHR5cGljYWxseSB1c2VkIGZvciBiYXJlLW1ldGFsIHdpdGhvdXQgYW4gT1MuXG4gKiAgIC0gYGFiaWAgPSBUaGUgQUJJLCBmb3IgZXhhbXBsZSBgZ251YCwgYGFuZHJvaWRgLCBgZWFiaWAsIGV0Yy5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcGFyc2VUcmlwbGUocmF3VHJpcGxlOiBzdHJpbmcpOiBUYXJnZXQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnZXRTeXN0ZW1EZWZhdWx0VGFyZ2V0KCk6IFRhcmdldDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGdldFRhcmdldExpbmtlcih0YXJnZXQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbi8qKlxuICogTG9hZGVyLWZpbGUgc3VmZml4IGZvciBhIFdBU0kgZmxhdm9yLCBkZXJpdmVkIGZyb20gaXRzIGBwbGF0Zm9ybUFyY2hBQklgOlxuICogdGhlIGxlZ2FjeSB0aHJlYWRlZCBmbGF2b3Iga2VlcHMgdGhlIGhpc3RvcmljYWwgYHdhc2lgIHN0ZW1cbiAqIChgPGJpbmFyeU5hbWU+Lndhc2kuY2pzYCwgYDxiaW5hcnlOYW1lPi53YXNpLWJyb3dzZXIuanNgKSwgd2hpbGUgZWFjaFxuICogZGlzdGluY3RseSBuYW1lZCBub24tdGhyZWFkZWQgZmxhdm9yIGRlcml2ZXMgaXRzIG93blxuICogKGA8YmluYXJ5TmFtZT4ud2FzaXAxLmNqc2AsIGA8YmluYXJ5TmFtZT4ud2FzaXAxLWJyb3dzZXIuanNgLCAuLi4pLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB3YXNpTG9hZGVyU3VmZml4KHBsYXRmb3JtQXJjaEFCSTogc3RyaW5nKTogc3RyaW5nO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdGFyZ2V0VG9FbnZWYXIodGFyZ2V0OiBzdHJpbmcpOiBzdHJpbmc7XG5leHBvcnQge307XG4iLCJpbXBvcnQgeyB0eXBlIFRhcmdldCB9IGZyb20gJy4vdGFyZ2V0LmpzJztcbmV4cG9ydCB0eXBlIFZhbHVlT2ZDb25zdEFycmF5PFQ+ID0gVFtFeGNsdWRlPGtleW9mIFQsIGtleW9mIEFycmF5PGFueT4+XTtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFN1cHBvcnRlZFBhY2thZ2VNYW5hZ2VyczogcmVhZG9ubHkgW1wieWFyblwiLCBcInBucG1cIl07XG5leHBvcnQgZGVjbGFyZSBjb25zdCBTdXBwb3J0ZWRUZXN0RnJhbWV3b3JrczogcmVhZG9ubHkgW1wiYXZhXCJdO1xuZXhwb3J0IHR5cGUgU3VwcG9ydGVkUGFja2FnZU1hbmFnZXIgPSBWYWx1ZU9mQ29uc3RBcnJheTx0eXBlb2YgU3VwcG9ydGVkUGFja2FnZU1hbmFnZXJzPjtcbmV4cG9ydCB0eXBlIFN1cHBvcnRlZFRlc3RGcmFtZXdvcmsgPSBWYWx1ZU9mQ29uc3RBcnJheTx0eXBlb2YgU3VwcG9ydGVkVGVzdEZyYW1ld29ya3M+O1xuLyoqXG4gKiBQYWNrYWdlIG1hbmFnZXJzIHRoYXQgbWF5IHB1Ymxpc2ggdGhlICoqcm9vdCoqIHBhY2thZ2UsIGRpc3Rpbmd1aXNoZWQgYnlcbiAqIHdoZXRoZXIgdGhleSByZXdyaXRlIHRoZSBtYW5pZmVzdCB3aGlsZSBwYWNraW5nIGl0LlxuICpcbiAqIGB5YXJuYCBtZWFucyB5YXJuIGJlcnJ5ICg+PSAyKTsgWWFybiBDbGFzc2ljICgxLngpIHBhY2tzIHRoZSByYXcgbWFuaWZlc3RcbiAqIGxpa2UgbnBtIGRvZXMgYW5kIGlzIHNwZWxsZWQgYHlhcm4tY2xhc3NpY2AuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFJvb3RQdWJsaXNoZXJzOiByZWFkb25seSBbXCJucG1cIiwgXCJwbnBtXCIsIFwieWFyblwiLCBcInlhcm4tY2xhc3NpY1wiXTtcbmV4cG9ydCB0eXBlIFJvb3RQdWJsaXNoZXIgPSBWYWx1ZU9mQ29uc3RBcnJheTx0eXBlb2YgUm9vdFB1Ymxpc2hlcnM+O1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTmFwaUNvbmZpZyB7XG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgYmluYXJ5IHRvIGJlIGdlbmVyYXRlZCwgZGVmYXVsdCB0byBgaW5kZXhgXG4gICAgICovXG4gICAgYmluYXJ5TmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBucG0gcGFja2FnZSwgZGVmYXVsdCB0byB0aGUgbmFtZSBvZiByb290IHBhY2thZ2UuanNvbiBuYW1lXG4gICAgICpcbiAgICAgKiBBbHdheXMgZ2l2ZW4gYEBzY29wZS9wa2dgIGFuZCBhcmNoIHN1ZmZpeCB3aWxsIGJlIGFwcGVuZGVkIGxpa2UgYEBzY29wZS9wa2ctbGludXgtZ251LXg2NGBcbiAgICAgKi9cbiAgICBwYWNrYWdlTmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBbGwgdGFyZ2V0cyB0aGUgY3JhdGUgd2lsbCBiZSBjb21waWxlZCBmb3JcbiAgICAgKi9cbiAgICB0YXJnZXRzPzogc3RyaW5nW107XG4gICAgLyoqXG4gICAgICogVGhlIG5wbSBjbGllbnQgcHJvamVjdCB1c2VzLlxuICAgICAqL1xuICAgIG5wbUNsaWVudD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgcGFja2FnZSBtYW5hZ2VyIHRoYXQgcHVibGlzaGVzIHRoZSAqKnJvb3QqKiBwYWNrYWdlLlxuICAgICAqXG4gICAgICogYG5hcGkgcHJlLXB1Ymxpc2hgIHB1Ymxpc2hlcyBvbmx5IHRoZSBnZW5lcmF0ZWQgcGVyLXBsYXRmb3JtIHBhY2thZ2VzOyB0aGVcbiAgICAgKiByb290IHBhY2thZ2UgaXMgcGFja2VkIGFuZCBwdWJsaXNoZWQgYnkgdGhlIGNhbGxlciwgc28gdGhpcyBjYW5ub3QgYmVcbiAgICAgKiBpbmZlcnJlZCByZWxpYWJseS4gcG5wbSBhbmQgeWFybiBiZXJyeSByZXBsYWNlIGBleHBvcnRzYCB3aXRoXG4gICAgICogYHB1Ymxpc2hDb25maWcuZXhwb3J0c2Agd2hpbGUgcGFja2luZywgc28gdW5kZXIgdGhvc2UgcHVibGlzaGVyc1xuICAgICAqIGBuYXBpIHByZS1wdWJsaXNoYCB2YWxpZGF0ZXMgb25seSB0aGUgcHVibGlzaC1lZmZlY3RpdmUgZXhwb3J0IG1hcCBhbmQgdGhlXG4gICAgICogbG9jYWwgYGV4cG9ydHNgIG1heSBwb2ludCBhdCBkZXZlbG9wbWVudC1vbmx5IHNvdXJjZXMuIG5wbSBhbmQgWWFyblxuICAgICAqIENsYXNzaWMgc2hpcCBgZXhwb3J0c2AgdW50b3VjaGVkLlxuICAgICAqXG4gICAgICogVW5zZXQg4oCUIHRoZSBkZWZhdWx0IOKAlCB2YWxpZGF0ZXMgYm90aCBtYXBzLCB3aGljaCBpcyBjb3JyZWN0IGZvciBldmVyeVxuICAgICAqIHB1Ymxpc2hlciBidXQgcmVqZWN0cyBkZXZlbG9wbWVudC1vbmx5IGNvbmRpdGlvbnMgc3VjaCBhc1xuICAgICAqIGBcImRldlwiOiBcIi4vc3JjL2luZGV4LnRzXCJgLlxuICAgICAqL1xuICAgIHJvb3RQdWJsaXNoZXI/OiBSb290UHVibGlzaGVyO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZ2VuZXJhdGUgY29uc3QgZW51bSBmb3IgdHlwZXNjcmlwdCBiaW5kaW5nc1xuICAgICAqL1xuICAgIGNvbnN0RW51bT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRW1pdCBgI1tuYXBpKHN0cmluZ19lbnVtKV1gIGVudW1zIGFzIHJ1bnRpbWUgZW51bXMgKGBleHBvcnQgZGVjbGFyZSBlbnVtYCkgdW5kZXIgYC0tbm8tY29uc3QtZW51bWAuIERlZmF1bHQ6IHR5cGUtb25seSB1bmlvbi5cbiAgICAgKi9cbiAgICBydW50aW1lU3RyaW5nRW51bT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogZHRzIGhlYWRlciBwcmVwZW5kIHRvIHRoZSBnZW5lcmF0ZWQgZHRzIGZpbGVcbiAgICAgKi9cbiAgICBkdHNIZWFkZXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogZHRzIGhlYWRlciBmaWxlIHBhdGggdG8gYmUgcHJlcGVuZGVkIHRvIHRoZSBnZW5lcmF0ZWQgZHRzIGZpbGVcbiAgICAgKiBpZiBib3RoIGR0c0hlYWRlciBhbmQgZHRzSGVhZGVyRmlsZSBhcmUgcHJvdmlkZWQsIGR0c0hlYWRlckZpbGUgd2lsbCBiZSB1c2VkXG4gICAgICovXG4gICAgZHRzSGVhZGVyRmlsZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiB3YXNtIGNvbXBpbGF0aW9uIG9wdGlvbnNcbiAgICAgKi9cbiAgICB3YXNtPzoge1xuICAgICAgICAvKipcbiAgICAgICAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWJBc3NlbWJseS9KYXZhU2NyaXB0X2ludGVyZmFjZS9NZW1vcnlcbiAgICAgICAgICogQGRlZmF1bHQgNDAwMCBwYWdlcyAoMjUwIE1pQiksIG9yIDEwMjQgcGFnZXMgKDY0IE1pQikgZm9yIHRoZSBkZWZlcnJlZCB3b3JrZXJkIGxvYWRlclxuICAgICAgICAgKi9cbiAgICAgICAgaW5pdGlhbE1lbW9yeT86IG51bWJlcjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluaXRpYWwgbGluZWFyIG1lbW9yeSwgaW4gNjQgS2lCIHBhZ2VzLCBmb3IgdGhlICoqdGhyZWFkbGVzcyoqXG4gICAgICAgICAqIChgd2FzbTMyLXdhc2lwMWApIGxvYWRlcnMgb25seTogdGhlIE5vZGUgQ0pTIGxvYWRlciwgdGhlIGJyb3dzZXIgbG9hZGVyXG4gICAgICAgICAqIGFuZCB0aGUgZGVmZXJyZWQgYC4vd29ya2VyZGAgbG9hZGVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgdGhyZWFkZWQgbG9hZGVycyBhbGxvY2F0ZSBvbmUgYHNoYXJlZDogdHJ1ZWAgbWVtb3J5IHRoYXQgZXZlcnlcbiAgICAgICAgICogd2FzaS10aHJlYWRzIHdvcmtlciBtYXBzLCBzbyBldmVyeSB3b3JrZXIgc3RhY2sgYW5kIGV2ZXJ5IHRocmVhZCdzXG4gICAgICAgICAqIGFsbG9jYXRpb25zIGNvbWUgb3V0IG9mIGl0IGFuZCBncm93aW5nIGl0IGlzIGEgY3Jvc3MtdGhyZWFkIGV2ZW50OyBpdCBpc1xuICAgICAgICAgKiBzaXplZCBmb3IgdGhlIHdob2xlIHBvb2wgdXAgZnJvbnQuIFRoZSB0aHJlYWRsZXNzIGxvYWRlcnMgZHJpdmUgYSBzaW5nbGVcbiAgICAgICAgICogdGhyZWFkIHRocm91Z2ggYSBwbGFpbiBncm93YWJsZSBgQXJyYXlCdWZmZXJgOiB0aGV5IG9ubHkgaGF2ZSB0byBjbGVhclxuICAgICAgICAgKiB0aGUgbW9kdWxlJ3Mgb3duIGxpbmstdGltZSBmbG9vciAoYC16c3RhY2stc2l6ZWAgcGx1cyBzdGF0aWMgZGF0YSkgYW5kXG4gICAgICAgICAqIGdyb3cgb24gZGVtYW5kLCB3aGljaCBpcyB3aGF0IGxldHMgdGhlIHNhbWUgYnVpbGQgZml0IGEgaG9zdCB3aXRoIGEgaGFyZFxuICAgICAgICAgKiBpc29sYXRlIGNhcCBzdWNoIGFzIHdvcmtlcmQncyAxMjggTWlCLlxuICAgICAgICAgKlxuICAgICAgICAgKiBGYWxscyBiYWNrIHRvIGBpbml0aWFsTWVtb3J5YCB3aGVuIHVuc2V0LCBzbyBleGlzdGluZyBwcm9qZWN0cyBhcmVcbiAgICAgICAgICogdW5hZmZlY3RlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGRlZmF1bHQgYGluaXRpYWxNZW1vcnlgICg0MDAwIHBhZ2VzKSwgb3IgMTAyNCBwYWdlcyBmb3IgdGhlIGRlZmVycmVkXG4gICAgICAgICAqICAgYC4vd29ya2VyZGAgbG9hZGVyXG4gICAgICAgICAqL1xuICAgICAgICB0aHJlYWRsZXNzSW5pdGlhbE1lbW9yeT86IG51bWJlcjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZWZhdWx0IDY1NTM2IHBhZ2VzICg0R2lCKVxuICAgICAgICAgKi9cbiAgICAgICAgbWF4aW11bU1lbW9yeT86IG51bWJlcjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIGdlbmVyYXRlZCBgPHBhY2thZ2VOYW1lPi13YXNtMzItd2FzaWAgcGFja2FnZSBpcyBkZWNsYXJlZCBhc1xuICAgICAgICAgKiBhbiBgb3B0aW9uYWxEZXBlbmRlbmN5YCBvZiB0aGUgcm9vdCBwYWNrYWdlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBXaGVuIG5hdGl2ZSB0YXJnZXRzIGFyZSBjb25maWd1cmVkIHRoZSBXQVNJIHBhY2thZ2UgaXMgYSBmYWxsYmFjayBmb3JcbiAgICAgICAgICogaG9zdHMgdGhhdCBjYW5ub3QgbG9hZCBhIGAubm9kZWAgYmluYXJ5LCBzbyBkZWNsYXJpbmcgaXQgd291bGQgbWFrZSBldmVyeVxuICAgICAgICAgKiBjb25zdW1lciBkb3dubG9hZCB0aGUgYC53YXNtYCBiaW5hcnkgdGhleSB3aWxsIG5ldmVyIGxvYWQuIEl0IGlzXG4gICAgICAgICAqIHRoZXJlZm9yZSBvbWl0dGVkIGJ5IGRlZmF1bHQgYW5kIGlzIGV4cGVjdGVkIHRvIGJlIGluc3RhbGxlZCBvbiBkZW1hbmQgYnlcbiAgICAgICAgICogdGhlIGVudmlyb25tZW50cyB0aGF0IG5lZWQgaXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIFdoZW4gV0FTSSBpcyB0aGUgb25seSBjb25maWd1cmVkIHRhcmdldCBpdCBpcyB0aGUgcHJpbWFyeSBhcnRpZmFjdCBhbmQgaXNcbiAgICAgICAgICogZGVjbGFyZWQgYnkgZGVmYXVsdC5cbiAgICAgICAgICpcbiAgICAgICAgICogU2V0IHRoaXMgZXhwbGljaXRseSB0byBvdmVycmlkZSBlaXRoZXIgZGVmYXVsdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZSB3aGVuIGV2ZXJ5IGNvbmZpZ3VyZWQgdGFyZ2V0IGlzIFdBU0ksIGZhbHNlIG90aGVyd2lzZVxuICAgICAgICAgKi9cbiAgICAgICAgb3B0aW9uYWxEZXBlbmRlbmN5PzogYm9vbGVhbjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIGdlbmVyYXRlZCBXQVNJIGxvYWRlcnMgYm9vdHN0cmFwIHRoZSBgbmFwaS1hc3luYy1ydW50aW1lYFxuICAgICAgICAgKiBDdXJyZW50VGhyZWFkIEphdmFTY3JpcHQgaG9zdHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEEgYmluZGluZyBidWlsdCB3aXRoIHRoZSBgbmFwaS1hc3luYy1ydW50aW1lYCBjcmF0ZSBkZWZhdWx0cyB0byB0aGVcbiAgICAgICAgICogYEN1cnJlbnRUaHJlYWRgIGZsYXZvciBvbiBldmVyeSBXZWJBc3NlbWJseSB0YXJnZXQuIEl0IGlzIHRoZSBvbmx5XG4gICAgICAgICAqIGZsYXZvciBvbiB0aHJlYWRsZXNzIGB3YXNtMzItd2FzaXAxYDsgYHdhc20zMi13YXNpcDEtdGhyZWFkc2AgYWxzb1xuICAgICAgICAgKiBhY2NlcHRzIGFuIGV4cGxpY2l0bHkgY29uZmlndXJlZCBgTXVsdGlUaHJlYWRgLiBVbmRlciBgQ3VycmVudFRocmVhZGBcbiAgICAgICAgICogaXRzIGZ1dHVyZXMgbWFrZSBubyBwcm9ncmVzcyB1bnRpbCBhIHRhc2sgaG9zdCBpcyByZWdpc3RlcmVkLCBhbmQgaXRzXG4gICAgICAgICAqIHRpbWVycyBuZXZlciBmaXJlIHVudGlsIGEgdGltZXIgaG9zdCBpcywgc28gdGhlIGxvYWRlciBtdXN0IGluc3RhbGxcbiAgICAgICAgICogYm90aCByaWdodCBhZnRlciBpbnN0YW50aWF0aW9uIGFuZCB1bnJlZ2lzdGVyIHRoZW0gYmVmb3JlIHRoZVxuICAgICAgICAgKiBlbnZpcm9ubWVudCBpcyBkZXN0cm95ZWQuIEEgYE11bHRpVGhyZWFkYCBiaW5kaW5nIHVzZXMgbmVpdGhlciBob3N0IGFuZFxuICAgICAgICAgKiB0aGUgaW5zdGFsbGVkIHRhc2sgaG9zdCBpcyB1bnJlZidkLCBzbyBsZWF2aW5nIHRoaXMgZW5hYmxlZCBpcyBhbHNvXG4gICAgICAgICAqIGNvcnJlY3QgZm9yIGFuIGFkZG9uIHRoYXQgcGlja3MgaXRzIGZsYXZvciBhdCBydW50aW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBFbmFibGluZyB0aGlzIGVtaXRzIHRoYXQgYm9vdHN0cmFwIGluIHRoZSBub2RlLCBicm93c2VyIGFuZCBkZWZlcnJlZFxuICAgICAgICAgKiAod29ya2VyZCkgbG9hZGVycywgYW5kIGRlY2xhcmVzIGBAbmFwaS1ycy9hc3luYy1ydW50aW1lYCBpbiB0aGVcbiAgICAgICAgICogZ2VuZXJhdGVkIGA8cGFja2FnZU5hbWU+LXdhc20zMi0qYCBwYWNrYWdlcy4gVGhlIGxvYWRlciBkZWxlZ2F0ZXMgdGhlXG4gICAgICAgICAqIHdob2xlIGhvc3QgY29udHJhY3Qg4oCUIHRoZSBzZXZlbiBleHBvcnRzLCBjb250cmFjdCB2ZXJzaW9uIDQsIHRoZVxuICAgICAgICAgKiByZXNlcnZhdGlvbiBpZGVudGl0eSwgdGhlIGxpdmVuZXNzIHByb2JlIGFuZCB0aGUgcm9sbGJhY2sg4oCUIHRvIHRoYXRcbiAgICAgICAgICogcGFja2FnZSwgc28gYSBiaW5kaW5nIHRoYXQgZG9lcyBub3QgYWN0dWFsbHkgZXhwb3NlIHRoZSBjb250cmFjdCBmYWlsc1xuICAgICAgICAgKiBsb3VkbHkgYXQgbG9hZCB3aXRoIGBFUlJfTkFQSV9BU1lOQ19SVU5USU1FX0JJTkRJTkdfTUlTTUFUQ0hgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgYm9vdHN0cmFwIHJ1bnMgYWZ0ZXIgaW5zdGFudGlhdGlvbiwgc28gYWZ0ZXIgYCNbbW9kdWxlX2luaXRdYDogdGhlXG4gICAgICAgICAqIGhvc3QgcmVnaXN0cmF0aW9uIGZ1bmN0aW9ucyBhcmUgZXhwb3J0cyBvZiB0aGUgYmluZGluZyBpdHNlbGYuIENvZGUgdGhhdFxuICAgICAgICAgKiBydW5zIGR1cmluZyBtb2R1bGUgcmVnaXN0cmF0aW9uIG11c3Qgbm90IGNyZWF0ZSB0aW1lcnMgKGBzbGVlcF91bnRpbGBcbiAgICAgICAgICogZmFpbHMgbG91ZCBhdCBjcmVhdGlvbiB3aXRob3V0IGEgdGltZXIgaG9zdCkgYW5kIGNhbm5vdCBleHBlY3QgdGFza1xuICAgICAgICAgKiBwcm9ncmVzcyB1bnRpbCB0aGUgbG9hZGVyIGhhcyByZXR1cm5lZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAgICovXG4gICAgICAgIGFzeW5jUnVudGltZT86IGJvb2xlYW47XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBCcm93c2VyIHdhc20gYmluZGluZyBjb25maWd1cmF0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBicm93c2VyPzoge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaGV0aGVyIHRvIHVzZSBmcyBtb2R1bGUgaW4gYnJvd3NlclxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBmcz86IGJvb2xlYW47XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFdoZXRoZXIgdG8gaW5pdGlhbGl6ZSB3YXNtIGFzeW5jaHJvbm91c2x5XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGFzeW5jSW5pdD86IGJvb2xlYW47XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFdoZXRoZXIgdG8gaW5qZWN0IGBidWZmZXJgIHRvIGVtbmFwaSBjb250ZXh0XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGJ1ZmZlcj86IGJvb2xlYW47XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFdoZXRoZXIgdG8gZW1pdCBjdXN0b20gZXZlbnRzIGZvciBlcnJvcnMgaW4gd29ya2VyXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGVycm9yRXZlbnQ/OiBib29sZWFuO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgYmluYXJ5TmFtZSBpbnN0ZWFkXG4gICAgICovXG4gICAgbmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgcGFja2FnZU5hbWUgaW5zdGVhZFxuICAgICAqL1xuICAgIHBhY2thZ2U/OiB7XG4gICAgICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgdGFyZ2V0cyBpbnN0ZWFkXG4gICAgICovXG4gICAgdHJpcGxlcz86IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdoZXRoZXIgZW5hYmxlIGRlZmF1bHQgdGFyZ2V0c1xuICAgICAgICAgKi9cbiAgICAgICAgZGVmYXVsdHM6IGJvb2xlYW47XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGRpdGlvbmFsIHRhcmdldHMgdG8gYmUgY29tcGlsZWQgZm9yXG4gICAgICAgICAqL1xuICAgICAgICBhZGRpdGlvbmFsPzogc3RyaW5nW107XG4gICAgfTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uUGFja2FnZUpzb25GaWVsZHMge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAga2V5d29yZHM/OiBzdHJpbmdbXTtcbiAgICBhdXRob3I/OiBzdHJpbmc7XG4gICAgYXV0aG9ycz86IHN0cmluZ1tdO1xuICAgIGxpY2Vuc2U/OiBzdHJpbmc7XG4gICAgY3B1Pzogc3RyaW5nW107XG4gICAgb3M/OiBzdHJpbmdbXTtcbiAgICBsaWJjPzogc3RyaW5nW107XG4gICAgZmlsZXM/OiBzdHJpbmdbXTtcbiAgICByZXBvc2l0b3J5PzogYW55O1xuICAgIGhvbWVwYWdlPzogYW55O1xuICAgIGVuZ2luZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHB1Ymxpc2hDb25maWc/OiBhbnk7XG4gICAgYnVncz86IGFueTtcbiAgICBuYXBpPzogVXNlck5hcGlDb25maWc7XG4gICAgdHlwZT86ICdtb2R1bGUnIHwgJ2NvbW1vbmpzJztcbiAgICBzY3JpcHRzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBtYWluPzogc3RyaW5nO1xuICAgIG1vZHVsZT86IHN0cmluZztcbiAgICB0eXBlcz86IHN0cmluZztcbiAgICBicm93c2VyPzogc3RyaW5nO1xuICAgIGV4cG9ydHM/OiBhbnk7XG4gICAgZGVwZW5kZW5jaWVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBkZXZEZXBlbmRlbmNpZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIG9wdGlvbmFsRGVwZW5kZW5jaWVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBhdmE/OiB7XG4gICAgICAgIHRpbWVvdXQ/OiBzdHJpbmc7XG4gICAgfTtcbn1cbmV4cG9ydCB0eXBlIE5hcGlDb25maWcgPSBSZXF1aXJlZDxQaWNrPFVzZXJOYXBpQ29uZmlnLCAnYmluYXJ5TmFtZScgfCAncGFja2FnZU5hbWUnIHwgJ25wbUNsaWVudCc+PiAmIFBpY2s8VXNlck5hcGlDb25maWcsICd3YXNtJyB8ICdkdHNIZWFkZXInIHwgJ2R0c0hlYWRlckZpbGUnIHwgJ2NvbnN0RW51bScgfCAncnVudGltZVN0cmluZ0VudW0nIHwgJ3Jvb3RQdWJsaXNoZXInPiAmIHtcbiAgICB0YXJnZXRzOiBUYXJnZXRbXTtcbiAgICBwYWNrYWdlSnNvbjogQ29tbW9uUGFja2FnZUpzb25GaWVsZHM7XG59O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcmVhZE5hcGlDb25maWcocGF0aDogc3RyaW5nLCBjb25maWdQYXRoPzogc3RyaW5nKTogUHJvbWlzZTxOYXBpQ29uZmlnPjtcbiIsImltcG9ydCB0eXBlIHsgQnVpbGRPcHRpb25zIGFzIFJhd0J1aWxkT3B0aW9ucyB9IGZyb20gJy4uL2RlZi9idWlsZC5qcyc7XG5pbXBvcnQgeyB0eXBlIE5hcGlDb25maWcsIHR5cGUgVGFyZ2V0LCB0eXBlIENhcmdvV29ya3NwYWNlTWV0YWRhdGEgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG50eXBlIE91dHB1dEtpbmQgPSAnanMnIHwgJ2R0cycgfCAnbm9kZScgfCAnZXhlJyB8ICd3YXNtJztcbnR5cGUgT3V0cHV0ID0ge1xuICAgIGtpbmQ6IE91dHB1dEtpbmQ7XG4gICAgcGF0aDogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIEJ1aWxkRm9ybWF0ID0gJ2VzbScgfCAnY29tbW9uanMnO1xudHlwZSBCdWlsZE9wdGlvbnMgPSBSYXdCdWlsZE9wdGlvbnMgJiB7XG4gICAgY2FyZ29PcHRpb25zPzogc3RyaW5nW107XG59O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgV0FTSV9BUlRJRkFDVF9NRVRBREFUQV9QUkVGSVggPSBcIi8vIG5hcGktcnMtYXJ0aWZhY3QtbWV0YWRhdGE6XCI7XG5leHBvcnQgaW50ZXJmYWNlIEFzeW5jUnVudGltZUhvc3RDb250cmFjdElucHV0IHtcbiAgICAvKiogVGhlIGFkZG9uJ3MgZXhwb3J0IG5hbWVzLCBhcyByZXBvcnRlZCBieSB0aGUgdHlwZSBkZWZpbml0aW9uIHBhc3MuICovXG4gICAgaWRlbnRzOiBzdHJpbmdbXTtcbiAgICAvKiogV2hldGhlciBgbmFwaS53YXNtLmFzeW5jUnVudGltZWAgaXMgb24uICovXG4gICAgYXN5bmNSdW50aW1lOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgYGlkZW50c2AgaXMgcmVhbCBleHBvcnQgbWV0YWRhdGEuIGBuYXBpLWRlcml2ZWAgd2l0aG91dCBpdHNcbiAgICAgKiBgdHlwZS1kZWZgIGZlYXR1cmUgZW1pdHMgbm8gdHlwZSBkZWZpbml0aW9ucywgc28gdGhlIGlkZW50IGxpc3QgaXMgZW1wdHlcbiAgICAgKiBmb3IgZXZlcnkgc3VjaCBhZGRvbiDigJQgaW5jbHVkaW5nIG9uZSB0aGF0IGRvZXMgZXhwb3J0IHRoZSB3aG9sZSBob3N0XG4gICAgICogY29udHJhY3QuIEFuIGVtcHR5IGxpc3QgaXMgb25seSBldmlkZW5jZSB3aGVuIHRoaXMgaXMgYHRydWVgLlxuICAgICAqL1xuICAgIHR5cGVEZWZBdmFpbGFibGU6IGJvb2xlYW47XG4gICAgcGFja2FnZU5hbWU6IHN0cmluZztcbn1cbi8qKlxuICogQ3Jvc3MtY2hlY2sgYG5hcGkud2FzbS5hc3luY1J1bnRpbWVgIGFnYWluc3QgdGhlIGFkZG9uJ3MgZXhwb3J0IGxpc3QuXG4gKlxuICogUmV0dXJucyB0aGUgbWVzc2FnZSB0byB0aHJvdyAoYGVycm9yYCkgb3IgdG8gbG9nIChgd2FybmluZ2ApLCBpZiBhbnkuIFdpdGhcbiAqIG5vIHR5cGUtZGVmIG1ldGFkYXRhIHRoZXJlIGlzIG5vdGhpbmcgdG8gY2hlY2sgYWdhaW5zdCwgc28gdGhlIGJ1aWxkIHNheXMgc29cbiAqIGFuZCBkZWZlcnMgdG8gdGhlIGxvYWRlcidzIG93biBydW50aW1lIGRldGVjdGlvbi5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY2hlY2tBc3luY1J1bnRpbWVIb3N0Q29udHJhY3QoeyBpZGVudHMsIGFzeW5jUnVudGltZSwgdHlwZURlZkF2YWlsYWJsZSwgcGFja2FnZU5hbWUsIH06IEFzeW5jUnVudGltZUhvc3RDb250cmFjdElucHV0KToge1xuICAgIGVycm9yPzogc3RyaW5nO1xuICAgIHdhcm5pbmc/OiBzdHJpbmc7XG59O1xudHlwZSBDYXJnb0NvbmZpZ0ZpbmdlcnByaW50ID0gcmVhZG9ubHkgW3BhdGg6IHN0cmluZywgaGFzaDogc3RyaW5nXTtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGdldENhcmdvRGVwZW5kZW5jeUdyYXBoRmluZ2VycHJpbnQobWV0YWRhdGE6IENhcmdvV29ya3NwYWNlTWV0YWRhdGEsIHJvb3RQYWNrYWdlSWQ6IHN0cmluZyk6IHN0cmluZztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGdldFR5cGVEZWZDYWNoZUZvbGRlcihvcHRpb25zOiB7XG4gICAgdGFyZ2V0RGlyOiBzdHJpbmc7XG4gICAgY3JhdGVOYW1lOiBzdHJpbmc7XG4gICAgbWFuaWZlc3RQYXRoOiBzdHJpbmc7XG4gICAgdGFyZ2V0VHJpcGxlOiBzdHJpbmc7XG4gICAgcHJvZmlsZTogc3RyaW5nO1xuICAgIGZlYXR1cmVzPzogc3RyaW5nW107XG4gICAgYWxsRmVhdHVyZXM/OiBib29sZWFuO1xuICAgIG5vRGVmYXVsdEZlYXR1cmVzPzogYm9vbGVhbjtcbiAgICBjYXJnb09wdGlvbnM/OiBzdHJpbmdbXTtcbiAgICBydXN0RmxhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICAgIGNhcmdvUHJvZmlsZUVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD47XG4gICAgY2FyZ29Db25maWc/OiBDYXJnb0NvbmZpZ0ZpbmdlcnByaW50W107XG4gICAgY2FyZ29EZXBlbmRlbmN5R3JhcGg/OiBzdHJpbmc7XG59KTogc3RyaW5nO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSBlbW5hcGkgYXJjaGl2ZSBkaXJlY3RvcnkgYnVpbHQgYWdhaW5zdCB0aGUgd2FzaS1zZGsgMzQgQUJJLlxuICogT25seSB0aGUgdGhyZWFkZWQgdGFyZ2V0IGhhcyBvbmU6IHRoZSBzaWduYXR1cmUgY2hhbmdlIGl0IGNhcnJpZXMgbGl2ZXMgaW5cbiAqIHRoZSB0aHJlYWRzLW9ubHkgZnV0ZXggY29kZS5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgRU1OQVBJX1dBU0lfU0RLXzM0X0xJTktfRElSID0gXCJ3YXNtMzItd2FzaXAxLXRocmVhZHMtd2FzaS1zZGstMzRcIjtcbmV4cG9ydCBpbnRlcmZhY2UgRW1uYXBpTGlua0RpclNlbGVjdGlvbiB7XG4gICAgLyoqIERpcmVjdG9yeSBuYW1lIHVuZGVyIGBlbW5hcGkvbGliYCB3aG9zZSBhcmNoaXZlcyBzaG91bGQgYmUgbGlua2VkLiAqL1xuICAgIGxpbmtEaXJOYW1lOiBzdHJpbmc7XG4gICAgLyoqIERldGVjdGVkIHdhc2ktc2RrIG1ham9yIHZlcnNpb24sIGBudWxsYCB3aGVuIG5vIHdhc2ktc2RrIGlzIGNvbmZpZ3VyZWQuICovXG4gICAgd2FzaVNka01ham9yOiBudW1iZXIgfCBudWxsO1xuICAgIC8qKiBgdHJ1ZWAgd2hlbiB0aGUgdG9vbGNoYWluIG5lZWRzIHRoZSB3YXNpLXNkayAzNCBhcmNoaXZlcy4gKi9cbiAgICBuZWVkc1dhc2lTZGszNDogYm9vbGVhbjtcbn1cbi8qKlxuICogUGljayB0aGUgZW1uYXBpIGFyY2hpdmUgZGlyZWN0b3J5IGZvciBhIFdBU0kgYnVpbGQuXG4gKlxuICogd2FzaS1saWJjIHJlbW92ZWQgdGhlIHVudXNlZCBgaW50IG9wYCBwYXJhbWV0ZXIgZnJvbVxuICogYF9fd2FzaWxpYmNfZnV0ZXhfd2FpdF9hdG9taWNfd2FpdGAgLyBgX193YXNpbGliY19mdXRleF93YWl0X21heWJlX2J1c3lgLFxuICogYW5kIHdhc2ktc2RrIDM0IGlzIHRoZSBmaXJzdCByZWxlYXNlIHNoaXBwaW5nIHRoZSAzLWFyZ3VtZW50IHNpZ25hdHVyZS5cbiAqIExpbmtpbmcgdGhlIGxlZ2FjeSA0LWFyZ3VtZW50IGFyY2hpdmVzIGFnYWluc3QgYSB3YXNpLXNkayA+PSAzNCBzeXNyb290XG4gKiBtYWtlcyBgd2FzbS1sZGAgcmVwb3J0IGBmdW5jdGlvbiBzaWduYXR1cmUgbWlzbWF0Y2hgIGFuZCBlbWl0IGFuIGludmFsaWRcbiAqIHdhc20gbW9kdWxlLCBzbyBlbW5hcGkgcHVibGlzaGVzIGEgc2Vjb25kIGFyY2hpdmUgc2V0IGZvciB0aGUgbmV3IEFCSSBhbmRcbiAqIHRoZSBkaXJlY3RvcnkgaGFzIHRvIGJlIGNob3NlbiBieSB3YXNpLXNkayB2ZXJzaW9uLCBub3QgYnkgdGFyZ2V0IHRyaXBsZS5cbiAqXG4gKiBXaXRob3V0IGBXQVNJX1NES19QQVRIYCwgY2FyZ28gbGlua3MgdGhyb3VnaCBgcnVzdC1sbGRgIGFnYWluc3QgdGhlXG4gKiB3YXNpLWxpYmMgYnVuZGxlZCB3aXRoIHRoZSBSdXN0IHN0YW5kYXJkIGxpYnJhcnksIHNvIHRoYXQgYXJjaGl2ZSBpc1xuICogcHJvYmVkIGluc3RlYWQuIFJ1c3QgcGlja2VkIHVwIHdhc2ktc2RrIDM0IGluIHJ1c3QtbGFuZy9ydXN0IzE2MTc3Mywgd2hpY2hcbiAqIGxhbmRzIGluIDEuMTAwLCBhbmQgYSB0b29sY2hhaW4gY2FycnlpbmcgaXQgbmVlZHMgdGhlIG5ldyBhcmNoaXZlcyBldmVuXG4gKiB0aG91Z2ggbm8gd2FzaS1zZGsgaXMgY29uZmlndXJlZC5cbiAqXG4gKiBUaGUgbGVnYWN5IGRpcmVjdG9yeSBzdGF5cyB0aGUgZGVmYXVsdCB3aGVuZXZlciB0aGUgQUJJIGNhbm5vdCBiZVxuICogZGV0ZXJtaW5lZCwgYW5kIG9sZGVyIGVtbmFwaSByZWxlYXNlcyBzaGlwIGl0IGFsb25lLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzZWxlY3RFbW5hcGlMaW5rRGlyKGVtbmFwaUxpYkRpcjogc3RyaW5nLCB3YXNpVGFyZ2V0OiBzdHJpbmcsIGhhc1RocmVhZHM6IGJvb2xlYW4sIHdhc2lTZGtQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsIHsgY3dkLCBydXN0V2FzaUxpYmMsIH0/OiB7XG4gICAgY3dkPzogc3RyaW5nO1xuICAgIHJ1c3RXYXNpTGliYz86IHN0cmluZyB8IG51bGw7XG59KTogRW1uYXBpTGlua0RpclNlbGVjdGlvbjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZVdhc2lDb21waWxlckZsYWdzKHdhc2lTZGtQYXRoOiBzdHJpbmcsIHdhc2lUYXJnZXQ6IHN0cmluZywgaGFzVGhyZWFkczogYm9vbGVhbiwgc2hlbGxFc2NhcGVkRmxhZ3M/OiBib29sZWFuKToge1xuICAgIGNvbXBpbGVGbGFnczogc3RyaW5nO1xuICAgIGxpbmtlckZsYWdzOiBzdHJpbmc7XG59O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlQXJ0aWZhY3REZXN0aW5hdGlvbk5hbWUoYmluYXJ5TmFtZTogc3RyaW5nLCB0YXJnZXQ6IFRhcmdldCwgc291cmNlTmFtZTogc3RyaW5nLCBwbGF0Zm9ybTogYm9vbGVhbik6IHN0cmluZztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHNlbGVjdFdhc2lCcm93c2VyVGFyZ2V0KGJ1aWxkVGFyZ2V0OiBUYXJnZXQsIGNvbmZpZ3VyZWRUYXJnZXRzOiBUYXJnZXRbXSwgZW1pdHRlZFRhcmdldHM6IFRhcmdldFtdKTogVGFyZ2V0O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlV2FzaUJyb3dzZXJFbnRyeShwYWNrYWdlTmFtZTogc3RyaW5nLCBwbGF0Zm9ybUFyY2hBQkk6IHN0cmluZywgaWRlbnRzOiBzdHJpbmdbXSk6IHN0cmluZztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZVdhc2lEZWZlcnJlZEJpbmRpbmdUeXBlRGVmKGJpbmRpbmdNb2R1bGVTcGVjaWZpZXI6IHN0cmluZywgaGFzVHlwZURlZjogYm9vbGVhbiwgcGxhdGZvcm1BcmNoQUJJPzogc3RyaW5nKTogc3RyaW5nO1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZFdhc21NZW1vcnkge1xuICAgIC8qKiBgdW5kZWZpbmVkYCBrZWVwcyBlYWNoIHRlbXBsYXRlJ3Mgb3duIGRlZmF1bHQgKDQwMDAsIG9yIDEwMjQgZm9yIGAuL3dvcmtlcmRgKS4gKi9cbiAgICBpbml0aWFsTWVtb3J5PzogbnVtYmVyO1xuICAgIC8qKiBgdW5kZWZpbmVkYCBrZWVwcyB0aGUgdGVtcGxhdGUgZGVmYXVsdCAoNjU1MzYpLiAqL1xuICAgIG1heGltdW1NZW1vcnk/OiBudW1iZXI7XG59XG4vKipcbiAqIFJlc29sdmUgdGhlIGBXZWJBc3NlbWJseS5NZW1vcnlgIGRlc2NyaXB0b3IgdGhlIGdlbmVyYXRlZCBsb2FkZXJzIGVtYmVkLCBmb3JcbiAqIG9uZSBXQVNJIGZsYXZvci5cbiAqXG4gKiBUaGUgdGhyZWFkZWQgbG9hZGVycyBzaGFyZSBvbmUgYHNoYXJlZDogdHJ1ZWAgbWVtb3J5IHdpdGggZXZlcnkgd2FzaS10aHJlYWRzXG4gKiB3b3JrZXIsIHNvIGl0IGlzIHNpemVkIGZvciB0aGUgd2hvbGUgcG9vbC4gVGhlIHRocmVhZGxlc3MgbG9hZGVycyBoYXZlIGFcbiAqIHNpbmdsZSB0aHJlYWQgYW5kIGEgcGxhaW4gZ3Jvd2FibGUgYEFycmF5QnVmZmVyYCwgc28gdGhleSBvbmx5IG5lZWQgdG8gY2xlYXJcbiAqIHRoZSBtb2R1bGUncyBsaW5rLXRpbWUgZmxvb3IgKGAtenN0YWNrLXNpemVgIHBsdXMgc3RhdGljIGRhdGEpIGFuZCBncm93IG9uXG4gKiBkZW1hbmQuIGBuYXBpLndhc20udGhyZWFkbGVzc0luaXRpYWxNZW1vcnlgIHNpemVzIHRoZSB0aHJlYWRsZXNzIGxvYWRlcnNcbiAqIHdpdGhvdXQgc2hyaW5raW5nIHRoZSB0aHJlYWRlZCBvbmU7IHVuc2V0LCBpdCBmYWxscyBiYWNrIHRvXG4gKiBgbmFwaS53YXNtLmluaXRpYWxNZW1vcnlgIGFuZCBub3RoaW5nIGNoYW5nZXMuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlc29sdmVXYXNtTWVtb3J5KHdhc206IE5hcGlDb25maWdbJ3dhc20nXSwgaGFzVGhyZWFkczogYm9vbGVhbik6IFJlc29sdmVkV2FzbU1lbW9yeTtcbi8qKlxuICogV2hldGhlciBhIGJ1aWxkJ3MgZGVjbGFyYXRpb24gZmlsZSBzaG91bGQgZGVjbGFyZSBgX19uYXBpQmluZGluZ1RhcmdldGAuXG4gKlxuICogVGhlIGV4cG9ydCBleGlzdHMgb25seSBvbiBhIGdlbmVyYXRlZCBsb2FkZXIsIHNvIHRoZSBkZWNsYXJhdGlvbiBoYXMgdG9cbiAqIGZvbGxvdyB0aGUgbG9hZGVycyBhIGJ1aWxkIGFjdHVhbGx5IHdyaXRlcy4gVGhpcyBtaXJyb3JzIGJvdGggd3JpdGVyczpcbiAqXG4gKiAtIHtAbGluayB3cml0ZUpzQmluZGluZ30gd3JpdGVzIHRoZSByb290IGxvYWRlciBmb3IgYC0tcGxhdGZvcm1gIHdpdGhvdXRcbiAqICAgYC0tbm8tanMtYmluZGluZ2AgKGByb290TG9hZGVyQ2FuZGlkYXRlYCksIGFuZCB0aGVuIG9ubHkgd2hlbiB0aGUgYnVpbGQgaGFzXG4gKiAgIHJ1bnRpbWUgZXhwb3J0cyBvciBhIFdBU0kgZmxhdm9yIHRvIGZhbGwgYmFjayB0by5cbiAqIC0gYEJ1aWxkZXIud3JpdGVXYXNpQmluZGluZ2Agd3JpdGVzIGEgZmxhdm9yJ3MgbG9hZGVyIHNldCB3aGVuIHRoYXQgZmxhdm9yIGlzXG4gKiAgIHRoZSBidWlsZCB0YXJnZXQsIG9yIHdoZW4gYW4gZWFybGllciBidWlsZCBvZiBpdCBsZWZ0IG1ldGFkYXRhIG9uIGRpc2tcbiAqICAgKGBlbWl0c1dhc2lMb2FkZXJgKS4gQSBtZXJlbHkgY29uZmlndXJlZCBmbGF2b3IgaXMgc2tpcHBlZCwgYW5kIGEgYnVpbGRcbiAqICAgdGhhdCBza2lwcyBldmVyeSBmbGF2b3IgZW1pdHMgbm8gbG9hZGVyIHRvIGNhcnJ5IHRoZSBleHBvcnQuXG4gKlxuICogVGhlIGV4cG9ydCBsaXN0IGlzIG9ubHkga25vd24gb25jZSB0eXBlZ2VuIGhhcyBydW4sIGFuZCB0eXBlZ2VuIHdyaXRlcyB0aGVcbiAqIGRlY2xhcmF0aW9uIGZpbGUgaXRzZWxmLCBzbyB0aGUgZGVjaXNpb24gY29tZXMgYmFjayBhcyBhIHByZWRpY2F0ZSBvdmVyIHRoYXRcbiAqIGxpc3QgaW5zdGVhZCBvZiBhIGZsYWcgdGFrZW4gdXAgZnJvbnQuXG4gKlxuICogSXQgZ2F0ZXMgdGhlICpyZXNlcnZhdGlvbiogb2YgdGhlIG5hbWUgdG9vIOKAlCBgQnVpbGRlci5nZW5lcmF0ZVR5cGVEZWZgIGNhbGxzXG4gKiB7QGxpbmsgYXNzZXJ0QmluZGluZ1RhcmdldElkZW50RnJlZX0gb25seSB3aGVuIHRoaXMgYW5zd2VycyBgdHJ1ZWAuIERlY2xhcmluZ1xuICogdGhlIG5hbWUgYW5kIGZvcmJpZGRpbmcgYW4gYWRkb24gZnJvbSBleHBvcnRpbmcgaXQgYXJlIHRoZSBzYW1lIHF1ZXN0aW9uLCBhbmRcbiAqIGEgYnVpbGQgdGhhdCBlbWl0cyBubyBsb2FkZXIgYXNrcyBuZWl0aGVyLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBiaW5kaW5nVGFyZ2V0RGVjbGFyYXRpb25QcmVkaWNhdGUoaW5wdXQ6IHtcbiAgICByb290TG9hZGVyQ2FuZGlkYXRlOiBib29sZWFuO1xuICAgIGhhc1dhc2lGYWxsYmFjazogYm9vbGVhbjtcbiAgICBlbWl0c1dhc2lMb2FkZXI6IGJvb2xlYW47XG59KTogKGV4cG9ydHM6IHJlYWRvbmx5IHN0cmluZ1tdKSA9PiBib29sZWFuO1xuLyoqXG4gKiBUaGUgYC5kLmN0c2AgY29udGVudCBmb3IgYSBXQVNJIGZsYXZvciBsb2FkZXIsIGRlcml2ZWQgZnJvbSB0aGUgcm9vdFxuICogZGVjbGFyYXRpb24gdGhpcyBidWlsZCB3cm90ZS5cbiAqXG4gKiBBbiBFU00gc291cmNlIChgKi5kLm10c2AsIG9yIGAqLmQudHNgIGluIGEgYFwidHlwZVwiOiBcIm1vZHVsZVwiYCBwYWNrYWdlKSBpc1xuICogcmUtZGVjbGFyZWQgdmVyYmF0aW0gd2hlbiBub3RoaW5nIGluIGl0IGNoYW5nZXMgbWVhbmluZyB1bmRlciBDb21tb25KU1xuICogaW50ZXJwcmV0YXRpb24g4oCUIHdoaWNoIGlzIGV2ZXJ5dGhpbmcgYSBnZW5lcmF0ZWQgdHlwZWRlZiBhbmQgbW9zdFxuICogYC0tZHRzLWhlYWRlcmBzIGNvbnRhaW4uIHtAbGluayBjb21tb25Kc0RlY2xhcmF0aW9uQmFycmllcn0gbmFtZXMgdGhlXG4gKiBjb25zdHJ1Y3RzIHRoYXQgc3RpbGwgcmVmdXNlLCBhbmQgd2h5LlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwcmVwYXJlV2FzaUJpbmRpbmdUeXBlRGVmKHNvdXJjZTogc3RyaW5nLCBzb3VyY2VQYXRoOiBzdHJpbmcsIGRlc3RpbmF0aW9uUGF0aDogc3RyaW5nLCBoYXNUaHJlYWRzOiBib29sZWFuLCBwYWNrYWdlVHlwZT86ICdtb2R1bGUnIHwgJ2NvbW1vbmpzJyk6IHN0cmluZztcbi8qKlxuICogTWFrZSBhIGRlY2xhcmF0aW9uIGZpbGUgZGVjbGFyZSB0aGUgYF9fbmFwaUJpbmRpbmdUYXJnZXRgIGl0cyBsb2FkZXIgZXhwb3J0cy5cbiAqXG4gKiBgcGxhdGZvcm1BcmNoQUJJYCBuYW1lcyB0aGUgV0FTSSBmbGF2b3IgdGhlIGZpbGUgdHlwZXMsIGFuZCB0aGUgZGVjbGFyYXRpb25cbiAqIGlzIHRoZW4gdGhhdCBmbGF2b3IncyBleGFjdCBsaXRlcmFsOyB3aXRob3V0IGl0IHRoZSBmaWxlIGlzIHRoZSByb290IGVudHJ5J3NcbiAqIGFuZCBrZWVwcyB0aGUgZnVsbCB1bmlvbiwgd2hpY2ggb25seSB0aGUgcm9vdCBlbnRyeSBjYW4gcmVhY2guXG4gKlxuICogVHdvIGtpbmRzIG9mIGZpbGUgYXJyaXZlIGhlcmUuIEEgV0FTSSBkZWNsYXJhdGlvbiBkZXJpdmVkIGZyZXNoIGZyb20gdGhlIHJvb3RcbiAqIGBpbmRleC5kLnRzYCBpbmhlcml0cyB0aGF0IHVuaW9uIGFuZCBoYXMgdG8gYmUgbmFycm93ZWQuIEEgZGVjbGFyYXRpb24ga2VwdFxuICogZnJvbSBhbiBlYXJsaWVyIGJ1aWxkIOKAlCBhIGJ1aWxkIHRoYXQgZG9lcyBub3QgdGFyZ2V0IFdBU0kgcmVnZW5lcmF0ZXMgZXZlcnlcbiAqIGRlY2xhcmVkIGZsYXZvcidzIGxvYWRlciBmcm9tIHRoZSBtZXRhZGF0YSB0aGF0IGZsYXZvcidzIG93biBidWlsZCBsZWZ0XG4gKiBiZWhpbmQsIGFuZCByZXVzZXMgaXRzIGRlY2xhcmF0aW9uIGZpbGUgdmVyYmF0aW0g4oCUIG1heSBwcmVkYXRlIHRoZSBleHBvcnRcbiAqIGVudGlyZWx5LCBvciBjYXJyeSBhIHVuaW9uIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGlzIGJyYW5jaCB3cm90ZS5cbiAqXG4gKiBFaXRoZXIgbWF5IGFsc28gY2FycnkgYSBkZWNsYXJhdGlvbiBub2JvZHkgaGVyZSB3cm90ZSwgYmVjYXVzZSBhIHByb2plY3Qnc1xuICogb3duIGAtLWR0cy1oZWFkZXJgIG1heSBkZWNsYXJlIHRoZSBleHBvcnQgdG8gd29yayBhcm91bmQgbG9hZGVycyB0aGF0IHByZWRhdGVcbiAqIGl0LiBTbyBvd25lcnNoaXAsIG5vdCBtZXJlIHByZXNlbmNlLCBkZWNpZGVzIHdoYXQgaGFwcGVucy5cbiAqXG4gKiBUaHJlZSBjYXNlcywgZGVjaWRlZCBpbiB0aGlzIG9yZGVyOlxuICpcbiAqIC0gVGhlIGRlY2xhcmF0aW9uIHRoZSByZW5kZXJlZCBgLmQudHNgIGhlYWRlciBvd25zLiBgcmVuZGVyZWRIZWFkZXJgIGlzIHRoYXRcbiAqICAgaGVhZGVyIGFzIHRoaXMgYnVpbGQgcmVuZGVyZWQgaXQ7IGlmIGl0IGRlY2xhcmVzIHRoZSBleHBvcnQsIHRoZSBwcm9qZWN0J3NcbiAqICAgb3duIGRlY2xhcmF0aW9uIHdpbnM6IG5vdGhpbmcgaXMgYXBwZW5kZWQsIGFuZCBpdCBpcyBuZXZlciByZXdyaXR0ZW4uXG4gKiAgIERlY2xhcmluZyBpdCBhIHNlY29uZCB0aW1lIHdvdWxkIGJlIGEgVFMyNDUxIHJlZGVjbGFyYXRpb24uXG4gKlxuICogICBUaGUgaGVhZGVyIGlzIG1hdGNoZWQgYnkgdGhlIHRleHQgb2YgaXRzIGRlY2xhcmF0aW9uIGFnYWluc3QgdGhlIGZpcnN0XG4gKiAgIGRlY2xhcmF0aW9uIGluIHRoZSBmaWxlLCBub3QgYnkgYSBwcmVmaXggb2YgdGhlIGZpbGUuIEEgV0FTSSBkZWNsYXJhdGlvbiBpc1xuICogICBkZXJpdmVkIHRocm91Z2gge0BsaW5rIHByZXBhcmVXYXNpQmluZGluZ1R5cGVEZWZ9LCB3aGljaCByZXdyaXRlcyByZWxhdGl2ZVxuICogICBpbXBvcnQgc3BlY2lmaWVycyBhbmQsIGZvciB0aGUgdGhyZWFkbGVzcyBmbGF2b3IsIGRyb3BzIGBub2RlOnN0cmVhbS93ZWJgXG4gKiAgIGltcG9ydHMg4oCUIGEgaGVhZGVyIGNhcnJ5aW5nIGVpdGhlciBzdG9wcyBiZWluZyBhIGxpdGVyYWwgcHJlZml4IG9mIHRoZSBmaWxlXG4gKiAgIGRlcml2ZWQgZnJvbSBpdCwgd2hpbGUgdGhlIGRlY2xhcmF0aW9uIHN0YXRlbWVudCBpdHNlbGYgY29tZXMgdGhyb3VnaFxuICogICB1bnRvdWNoZWQgYW5kIHN0YXlzIHRoZSBmaXJzdCBvbmUsIGJlY2F1c2UgdGhvc2UgcmV3cml0ZXMgbmV2ZXIgcmVvcmRlclxuICogICBzdGF0ZW1lbnRzLiBPbiB0aGUgcHJlc2VydmVkIHBhdGggdGhlIGhlYWRlciBpbiBoYW5kIGlzIHRoaXMgYnVpbGQncywgbm90XG4gKiAgIHRoZSBvbmUgdGhlIGtlcHQgZmlsZSB3YXMgd3JpdHRlbiB3aXRoLCBhbmQgYSBrZXB0IGRlY2xhcmF0aW9uIHRoYXQgcmVhZHNcbiAqICAgZGlmZmVyZW50bHkgaXMgY29ycmVjdGx5IG5vdCB0aGUgaGVhZGVyJ3MuXG4gKiAtIEEgZGVjbGFyYXRpb24gdGhlIGhlYWRlciBkb2VzIG5vdCBvd24sIGFsb25lIGluIGl0cyBzdGF0ZW1lbnQsIHdob3NlIHR5cGVcbiAqICAgaXMgYnVpbHQgb25seSBvdXQgb2YgdGhlIGxpdGVyYWxzIHRoaXMgQ0xJIHdyaXRlc1xuICogICAoe0BsaW5rIGlzR2VuZXJhdGVkQmluZGluZ1RhcmdldFR5cGV9KSwgaXMgb25lIG9mIG91cnMuIFN0YWxlIOKAlCBhbiBvbGRlclxuICogICB1bmlvbiwgb3IgdGhlIG90aGVyIGZsYXZvcidzIGxpdGVyYWwg4oCUIGl0IGlzIHJlcGxhY2VkIGluIHBsYWNlLCBjb21tZW50XG4gKiAgIGFuZCBhbGwsIHNvIGEgZmlsZSBrZXB0IGZyb20gYW4gZWFybGllciBidWlsZCBlbmRzIHVwIHNheWluZyB3aGF0IHRoZVxuICogICBsb2FkZXIgd3JpdHRlbiBiZXNpZGUgaXQgbm93IHJlcG9ydHMuXG4gKiAtIEFueSBvdGhlciBleHBvcnQgb2YgdGhlIG5hbWUgaXMgc29tZW9uZSBlbHNlJ3MgYW5kIGlzIHByZXNlcnZlZCwgd2l0aFxuICogICBub3RoaW5nIGFwcGVuZGVkIGJlc2lkZSBpdC4gQSBsb29zZXIgbWF0Y2ggd291bGQgcmV3cml0ZSBhIGRlY2xhcmF0aW9uIGFcbiAqICAgYC0tZHRzLWhlYWRlcmAgY29udHJpYnV0ZWQuIFRoYXQgY292ZXJzIGEgc3RhdGVtZW50IGRlY2xhcmluZyBtb3JlIG5hbWVzXG4gKiAgIHRoYW4gdGhpcyBvbmUg4oCUIHRoZSBibG9jayBhIHJlZnJlc2ggcmVwbGFjZXMgc3BhbnMgdGhlbSB0b28sIGFuZCB0aGlzIENMSVxuICogICB3cml0ZXMgdGhlIGRlY2xhcmF0aW9uIGFsb25lIOKAlCBhbmQgaXQgY292ZXJzIGV2ZXJ5IG90aGVyIHdheSBhIGhlYWRlciBjYW5cbiAqICAgY2xhaW0gdGhlIG5hbWU6IGFzIGEgYGZ1bmN0aW9uYCwgYGNsYXNzYCwgYGVudW1gIG9yIGluc3RhbnRpYXRlZFxuICogICBgbmFtZXNwYWNlYCwgdGhyb3VnaCBhbiBgZXhwb3J0IHsgdGFyZ2V0IGFzIF9fbmFwaUJpbmRpbmdUYXJnZXQgfWAgb3JcbiAqICAgYGV4cG9ydCAqIGFzIF9fbmFwaUJpbmRpbmdUYXJnZXQgZnJvbSAn4oCmJ2AgY2xhdXNlLCBvciB0aHJvdWdoXG4gKiAgIGBleHBvcnQgaW1wb3J0IF9fbmFwaUJpbmRpbmdUYXJnZXQgPSDigKZgLiBOb25lIG9mIHRob3NlIGxlYXZlcyBhXG4gKiAgIGRlY2xhcmF0aW9uIGhlcmUgdG8gcmV3cml0ZSwgYW5kIGFuIGV4cG9ydCBhZGRlZCBiZXNpZGUgYW55IG9mIHRoZW0gaXMgYVxuICogICBUeXBlU2NyaXB0IGVycm9yIChUUzIzMDAsIFRTMjMyMywgVFMyNDQwIG9yIFRTMjU2NyBieSBmb3JtKS5cbiAqXG4gKiAgIEEgaGVhZGVyIHRoYXQgZXhwb3J0cyB0aGUgbmFtZSBpbiB0eXBlIHNwYWNlIG9ubHkg4oCUIGEgYHR5cGVgLCBhblxuICogICBgaW50ZXJmYWNlYCwgYSBuYW1lc3BhY2UgdGhhdCBkZWNsYXJlcyBubyB2YWx1ZSDigJQgY2xhaW1zIG5vdGhpbmc6IHRoZVxuICogICBkZWNsYXJhdGlvbiBtZXJnZXMgd2l0aCBpdCwgYW5kIHdpdGhob2xkaW5nIGl0IHdvdWxkIGNvc3QgYSBjb25zdW1lciB0aGVcbiAqICAgdmFsdWUgdGhlIGxvYWRlciByZWFsbHkgZXhwb3J0cyDigJQgc2VlIHtAbGluayBzY2FuRXhwb3J0ZWROYW1lfS5cbiAqXG4gKiBBIGRlY2xhcmF0aW9uIGZpbGUgdGhhdCBleHBvcnRzIGJ5IGFzc2lnbm1lbnQgKGBleHBvcnQgPSBiaW5kaW5nYCwgd2hhdCBhXG4gKiBidWlsZCB3aXRob3V0IGBuYXBpLWRlcml2ZWAncyBgdHlwZS1kZWZgIGZlYXR1cmUgZW1pdHMpIGNhbm5vdCBjYXJyeSBhIG5hbWVkXG4gKiBleHBvcnQgZGVjbGFyYXRpb24sIHNvIGl0IGlzIGxlZnQgYWxvbmU7IGl0cyBleHBvcnRzIGFyZSB1bnR5cGVkIGFueXdheS5cbiAqIFRoYXQsIHRvbywgaXMgcmVhZCBvZmYgdGhlIHBhcnNlIOKAlCBhIGJsb2NrIGNvbW1lbnQgZG9jdW1lbnRpbmcgdGhlIENvbW1vbkpTXG4gKiBmb3JtIGlzIG5vdCBhbiBleHBvcnQgYXNzaWdubWVudC5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZW5zdXJlQmluZGluZ1RhcmdldERlY2xhcmF0aW9uKHR5cGVEZWY6IHN0cmluZywgcGxhdGZvcm1BcmNoQUJJPzogc3RyaW5nLCByZW5kZXJlZEhlYWRlcj86IHN0cmluZyk6IHN0cmluZztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNvbGxlY3RTdGFsZVdhc2lCdWlsZE91dHB1dE5hbWVzKGJpbmFyeU5hbWU6IHN0cmluZywgYnVpbGRUYXJnZXQ6IFRhcmdldCwgY29uZmlndXJlZFRhcmdldHM6IFRhcmdldFtdKTogU2V0PHN0cmluZz47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByZW1vdmVXYXNtQ3VzdG9tU2VjdGlvbihiaW5hcnk6IFVpbnQ4QXJyYXksIHNlY3Rpb25OYW1lOiBzdHJpbmcpOiBVaW50OEFycmF5O1xudHlwZSBCdWlsZEZvcm1hdE9wdGlvbnMgPSB7XG4gICAgZm9ybWF0Pzogc3RyaW5nO1xuICAgIGVzbT86IGJvb2xlYW47XG4gICAgY29tbW9uanM/OiBib29sZWFuO1xufTtcbi8qKlxuICogUmVzb2x2ZSB0aGUgZXhwbGljaXQgYnVpbGQgZm9ybWF0IGFuZCBpdHMgbGVnYWN5IENMSS9BUEkgYWxpYXNlcy5cbiAqXG4gKiBDb21tb25KUyBpcyB0aGUgaGlzdG9yaWNhbCBkZWZhdWx0LiBUaGUgYWxpYXNlcyBhcmUgaW50ZW50aW9uYWxseSBrZXB0XG4gKiBzZXBhcmF0ZSBmcm9tIGBmb3JtYXRgIGJlY2F1c2UgYC0tZXNtYCBhbmQgYC0tY29tbW9uanNgIGFyZSBib29sZWFuIGZsYWdzLFxuICogd2hpbGUgYC0tZm9ybWF0YCB0YWtlcyBhIHZhbHVlLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByZXNvbHZlQnVpbGRGb3JtYXQob3B0aW9uczogQnVpbGRGb3JtYXRPcHRpb25zKTogQnVpbGRGb3JtYXQ7XG4vKiogQnVpbGQgdGhlIGNvbmZpZ3VyZWQgTkFQSS1SUyBjcmF0ZSBhbmQgZ2VuZXJhdGUgaXRzIG91dHB1dCBhcnRpZmFjdHMuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBidWlsZFByb2plY3QocmF3T3B0aW9uczogQnVpbGRPcHRpb25zKTogUHJvbWlzZTx7XG4gICAgdGFzazogUHJvbWlzZTxPdXRwdXRbXT47XG4gICAgYWJvcnQ6ICgpID0+IHZvaWQ7XG59Pjtcbi8qKlxuICogVmFsaWRhdGUgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBjcm9zcy1jb21waWxhdGlvbiByZWxhdGVkIGZsYWdzLlxuICpcbiAqIGAtLXVzZS1jcm9zc2AsIGAtLXVzZS1uYXBpLWNyb3NzYCBhbmQgYC0tY3Jvc3MtY29tcGlsZWAgKGAteGApIGFyZSB0aHJlZVxuICogbXV0dWFsbHkgZXhjbHVzaXZlIGNyb3NzLWNvbXBpbGF0aW9uIG1lY2hhbmlzbXM7IGNvbWJpbmluZyBhbnkgdHdvIG9mIHRoZW1cbiAqIGxlYXZlcyBib3RoIGFjdGl2ZSBhdCBvbmNlIGFuZCBwcm9kdWNlcyBicm9rZW4gYnVpbGRzLCBzbyBpdCBpcyByZWplY3RlZFxuICogdXBmcm9udCBiZWZvcmUgYW55IHNpZGUgZWZmZWN0IChsaWtlIGF1dG8taW5zdGFsbGluZyBjYXJnbyBiaW5hcmllcyBvclxuICogZG93bmxvYWRpbmcgdG9vbGNoYWlucykgaGFwcGVucy5cbiAqXG4gKiBgLS1jcm9zcy1jb21waWxlYCB3aXRoIGEgYHdpbmRvd3MtZ251YCB0YXJnZXQgaXMgcmVqZWN0ZWQgYXMgd2VsbDogb24gYVxuICogbm9uLVdpbmRvd3MgaG9zdCBpdCByb3V0ZXMgdGhlIGJ1aWxkIHRvIGBjYXJnbyB4d2luIGJ1aWxkYCwgYnV0XG4gKiBgY2FyZ28teHdpbmAgb25seSBzZXRzIHVwIE1TVkMgdG9vbGNoYWlucyDigJQgZm9yIGB3aW5kb3dzLWdudWAgdGFyZ2V0cyBpdFxuICogc2lsZW50bHkgZG9lcyBub3RoaW5nIGFuZCB0aGUgYnVpbGQgZGllcyBtdWNoIGxhdGVyIHdpdGggYSBjcnlwdGljXG4gKiBgYGVycm9yOiBsaW5rZXIgYHg4Nl82NC13NjQtbWluZ3czMi1nY2NgIG5vdCBmb3VuZGBgIHRoYXQgbmV2ZXIgbWVudGlvbnNcbiAqIGBjYXJnby14d2luYC4gT25seSBhbiBleHBsaWNpdGx5IHJlcXVlc3RlZCB0YXJnZXQgKGAtLXRhcmdldGAgb3JcbiAqIGBDQVJHT19CVUlMRF9UQVJHRVRgKSBpcyBpbnNwZWN0ZWQsIHNvIHRoaXMgdmFsaWRhdGlvbiBuZXZlciBoYXMgdG8gc3Bhd25cbiAqIGBydXN0YyAtdlZgOyBhIG5vbi1XaW5kb3dzIGhvc3QncyBkZWZhdWx0IHRhcmdldCBjYW4gbmV2ZXIgYmVcbiAqIGB3aW5kb3dzLWdudWAgYW55d2F5LlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB2YWxpZGF0ZUNyb3NzQ29tcGlsZUZsYWdzKG9wdGlvbnM6IHtcbiAgICB1c2VDcm9zcz86IGJvb2xlYW47XG4gICAgY3Jvc3NDb21waWxlPzogYm9vbGVhbjtcbiAgICB1c2VOYXBpQ3Jvc3M/OiBib29sZWFuO1xuICAgIHdhdGNoPzogYm9vbGVhbjtcbiAgICB0YXJnZXQ/OiBzdHJpbmc7XG59LCBob3N0UGxhdGZvcm0/OiBzdHJpbmcpOiB2b2lkO1xuLyoqXG4gKiBWYWxpZGF0ZSB0aGF0IGAtLXVzZS1uYXBpLWNyb3NzYCBjYW4gYWN0dWFsbHkgaGFuZGxlIHRoZSByZXF1ZXN0ZWQgdGFyZ2V0XG4gKiBvbiB0aGUgY3VycmVudCBob3N0LiBUaGUgc3VwcG9ydGVkIHRhcmdldCBzZXQgaXMgcmVhZCBmcm9tIHRoZVxuICogYEBuYXBpLXJzL2Nyb3NzLXRvb2xjaGFpbmAgcGFja2FnZSwgYW5kIHRoZSBwcmUtYnVpbHQgdG9vbGNoYWlucyBvbmx5IHJ1blxuICogb24gTGludXggeDY0IGFuZCBMaW51eCBhcm02NCBob3N0cy5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdmFsaWRhdGVOYXBpQ3Jvc3NTdXBwb3J0KHRhcmdldFRyaXBsZTogc3RyaW5nLCBob3N0UGxhdGZvcm0/OiBzdHJpbmcsIGhvc3RBcmNoPzogc3RyaW5nKTogdm9pZDtcbi8qKlxuICogQ29tcHV0ZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgcm91dGUgYSBgLS11c2UtbmFwaS1jcm9zc2AgYnVpbGRcbiAqIHRocm91Z2ggdGhlIGBAbmFwaS1ycy9jcm9zcy10b29sY2hhaW5gIHRvb2xjaGFpbiBleHRyYWN0ZWQgYXRcbiAqIGB0b29sY2hhaW5QYXRoYC5cbiAqXG4gKiBGb2xsb3dzIHRoZSBzYW1lIHJ1bGUgYXMgYEJ1aWxkZXIjc2V0RW52SWZOb3RFeGlzdHNgOiBhIHZhcmlhYmxlIHRoZSB1c2VyXG4gKiBhbHJlYWR5IHNldCBpbiBgZW52YCB3aW5zIGFuZCBpcyBub3QgcmV0dXJuZWQsIGFuZCBhIHByZXNlbnQtYnV0LWVtcHR5XG4gKiB2YXJpYWJsZSBjb3VudHMgYXMgdW5zZXQgKGZhbHN5IHNlbWFudGljcykuIFRoZSBvbmx5IGV4Y2VwdGlvbnMgYXJlIHRoZVxuICogY2xhbmctc3BlY2lmaWMgYFRBUkdFVF9DRkxBR1NgL2BUQVJHRVRfQ1hYRkxBR1NgLCB3aGljaCBwcmVwZW5kIHRoZSBzeXNyb290XG4gKiBmbGFncyB0byB0aGUgdXNlcidzIHZhbHVlLCBhbmQgYFBBVEhgLCB3aGljaCBhbHdheXMgZ2V0cyB0aGUgdG9vbGNoYWluXG4gKiBgYmluYCBkaXJlY3RvcnkgcHJlcGVuZGVkLlxuICpcbiAqIEV4cG9ydGVkIGZvciB0ZXN0cy5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbmFwaUNyb3NzVG9vbGNoYWluRW52cyh0b29sY2hhaW5QYXRoOiBzdHJpbmcsIHRhcmdldFRyaXBsZTogc3RyaW5nLCBlbnY/OiBOb2RlSlMuUHJvY2Vzc0Vudik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB2ZXJpZnlXYXNpUmVhY3Rvcih3YXNtUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCBpbnRlcmZhY2UgV3JpdGVKc0JpbmRpbmdPcHRpb25zIHtcbiAgICBwbGF0Zm9ybT86IGJvb2xlYW47XG4gICAgbm9Kc0JpbmRpbmc/OiBib29sZWFuO1xuICAgIGlkZW50czogc3RyaW5nW107XG4gICAganNCaW5kaW5nPzogc3RyaW5nO1xuICAgIGZvcm1hdD86IEJ1aWxkRm9ybWF0O1xuICAgIGVzbT86IGJvb2xlYW47XG4gICAgY29tbW9uanM/OiBib29sZWFuO1xuICAgIGJpbmFyeU5hbWU6IHN0cmluZztcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nO1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICBvdXRwdXREaXI6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBgcGxhdGZvcm1BcmNoQUJJYHMgb2YgdGhlIGRlY2xhcmVkIFdBU0kgdGFyZ2V0cyBpbiBmYWxsYmFjayBwcmVmZXJlbmNlXG4gICAgICogb3JkZXIgKHRocmVhZGVkIGZpcnN0KS4gRGVmYXVsdHMgdG8gdGhlIGxlZ2FjeSBgWyd3YXNtMzItd2FzaSddYCBjaGFpblxuICAgICAqIHdoZW4gb21pdHRlZCBvciBlbXB0eS4gR2VuZXJhdGVkIGxvYWRlcnMgZXhwb3NlIHRoZXNlIGV4YWN0IGlkZW50aXRpZXNcbiAgICAgKiB0aHJvdWdoIGBOQVBJX1JTX1dBU0lfRkxBVk9SYC5cbiAgICAgKi9cbiAgICB3YXNpRmxhdm9ycz86IHN0cmluZ1tdO1xufVxuLyoqIFdyaXRlIGEgcGxhdGZvcm0gYmluZGluZyBsb2FkZXIgaW4gdGhlIHJlcXVlc3RlZCBtb2R1bGUgZm9ybWF0LiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gd3JpdGVKc0JpbmRpbmcob3B0aW9uczogV3JpdGVKc0JpbmRpbmdPcHRpb25zKTogUHJvbWlzZTxPdXRwdXQgfCB1bmRlZmluZWQ+O1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZVR5cGVEZWZPcHRpb25zIHtcbiAgICB0eXBlRGVmRGlyOiBzdHJpbmc7XG4gICAgbm9EdHNIZWFkZXI/OiBib29sZWFuO1xuICAgIGR0c0hlYWRlcj86IHN0cmluZztcbiAgICBkdHNIZWFkZXJGaWxlPzogc3RyaW5nO1xuICAgIGNvbmZpZ0R0c0hlYWRlcj86IHN0cmluZztcbiAgICBjb25maWdEdHNIZWFkZXJGaWxlPzogc3RyaW5nO1xuICAgIGNvbnN0RW51bT86IGJvb2xlYW47XG4gICAgcnVudGltZVN0cmluZ0VudW0/OiBib29sZWFuO1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIERlY2xhcmUgdGhlIGdlbmVyYXRlZCBsb2FkZXIncyBgX19uYXBpQmluZGluZ1RhcmdldGAgZXhwb3J0LiBTZXQgaXQgZm9yXG4gICAgICogYnVpbGRzIHRoYXQgZW1pdCBhIGxvYWRlcjsgYSBidWlsZCB0aGF0IGVtaXRzIG5vbmUgZGVjbGFyZXMgbm90aGluZy4gVGhlXG4gICAgICogZGVjbGFyZWQgdW5pb24gY292ZXJzIGV2ZXJ5IGFydGlmYWN0IGEgbG9hZGVyIGNhbiBoYW5kIGJhY2ssIG5vdCBvbmx5IHRoZVxuICAgICAqIHRhcmdldHMgdGhpcyBwYWNrYWdlIGJ1aWxkcyDigJQgc2VlIHtAbGluayBCSU5ESU5HX1RBUkdFVF9UWVBFX1VOSU9OfS5cbiAgICAgKlxuICAgICAqIFdoZXRoZXIgdGhlIHJvb3QgbG9hZGVyIGlzIHdyaXR0ZW4gZGVwZW5kcyBvbiB0aGUgZXhwb3J0cyB0aGlzIGJ1aWxkXG4gICAgICogcHJvZHVjZWQsIHdoaWNoIG9ubHkgdHlwZWdlbiBrbm93cywgc28gYSBwcmVkaWNhdGUgbWF5IGJlIHBhc3NlZCBpbnN0ZWFkXG4gICAgICogb2YgYSBmbGFnOyBpdCBpcyBjYWxsZWQgd2l0aCB0aGUgZ2VuZXJhdGVkIGV4cG9ydCBsaXN0LiBTZWVcbiAgICAgKiB7QGxpbmsgYmluZGluZ1RhcmdldERlY2xhcmF0aW9uUHJlZGljYXRlfS5cbiAgICAgKi9cbiAgICBkZWNsYXJlQmluZGluZ1RhcmdldD86IGJvb2xlYW4gfCAoKGV4cG9ydHM6IHJlYWRvbmx5IHN0cmluZ1tdKSA9PiBib29sZWFuKTtcbn1cbi8qKlxuICogV2FsayB0aGUgbmFwaS1kZXJpdmUgaW50ZXJtZWRpYXRlIHR5cGUtZGVmIGRpcmVjdG9yeSwgcmVuZGVyIGV2ZXJ5IGVudHJ5XG4gKiBpbnRvIFR5cGVTY3JpcHQgdmlhIHtAbGluayBwcm9jZXNzVHlwZURlZn0sIGFuZCByZXR1cm4gdGhlIGNvbmNhdGVuYXRlZFxuICogYC5kLnRzYCBzb3VyY2UgcGx1cyB0aGUgbGlzdCBvZiBpZGVudGlmaWVycyB0byByZS1leHBvcnQgZnJvbVxuICogYGluZGV4LmpzYC5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZ2VuZXJhdGVUeXBlRGVmKG9wdGlvbnM6IEdlbmVyYXRlVHlwZURlZk9wdGlvbnMpOiBQcm9taXNlPHtcbiAgICBleHBvcnRzOiBzdHJpbmdbXTtcbiAgICBkdHM6IHN0cmluZztcbiAgICBkdHNXaXRoVHlwZUltcG9ydHM6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgYC5kLnRzYCBoZWFkZXIgYXMgcmVuZGVyZWQsIGJlZm9yZSBhbnl0aGluZyB0aGUgZ2VuZXJhdGVkIGJvZHkgbmVlZHNcbiAgICAgKiB3YXMgYXBwZW5kZWQgdG8gaXQuIGBlbnN1cmVCaW5kaW5nVGFyZ2V0RGVjbGFyYXRpb25gIHRha2VzIGl0IHRvIHRlbGwgYVxuICAgICAqIGRlY2xhcmF0aW9uIHRoZSBoZWFkZXIgb3ducyBmcm9tIG9uZSB0aGlzIGJ1aWxkIHdyb3RlLlxuICAgICAqL1xuICAgIGhlYWRlcjogc3RyaW5nO1xufT47XG5leHBvcnQge307XG4iLCJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VDcmVhdGVOcG1EaXJzQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIHN0YXRpYyBwYXRoczogc3RyaW5nW11bXTtcbiAgICBzdGF0aWMgdXNhZ2U6IGltcG9ydChcImNsaXBhbmlvblwiKS5Vc2FnZTtcbiAgICBjd2Q6IHN0cmluZztcbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG5wbURpcjogc3RyaW5nO1xuICAgIGRyeVJ1bjogYm9vbGVhbjtcbiAgICBnZXRPcHRpb25zKCk6IHtcbiAgICAgICAgY3dkOiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZ1BhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgICAgIG5wbURpcjogc3RyaW5nO1xuICAgICAgICBkcnlSdW46IGJvb2xlYW47XG4gICAgfTtcbn1cbi8qKlxuICogQ3JlYXRlIG5wbSBwYWNrYWdlIGRpcnMgZm9yIGRpZmZlcmVudCBwbGF0Zm9ybXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVOcG1EaXJzT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9mIHdoZXJlIG5hcGkgY29tbWFuZCB3aWxsIGJlIGV4ZWN1dGVkIGluLCBhbGwgb3RoZXIgcGF0aHMgb3B0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhpcyBwYXRoXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBwcm9jZXNzLmN3ZCgpXG4gICAgICovXG4gICAgY3dkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYHBhY2thZ2UuanNvbmBcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICdwYWNrYWdlLmpzb24nXG4gICAgICovXG4gICAgcGFja2FnZUpzb25QYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gdGhlIGZvbGRlciB3aGVyZSB0aGUgbnBtIHBhY2thZ2VzIHB1dFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ25wbSdcbiAgICAgKi9cbiAgICBucG1EaXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogRHJ5IHJ1biB3aXRob3V0IHRvdWNoaW5nIGZpbGUgc3lzdGVtXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIGRyeVJ1bj86IGJvb2xlYW47XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseURlZmF1bHRDcmVhdGVOcG1EaXJzT3B0aW9ucyhvcHRpb25zOiBDcmVhdGVOcG1EaXJzT3B0aW9ucyk6IHtcbiAgICBjd2Q6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICBucG1EaXI6IHN0cmluZztcbiAgICBkcnlSdW46IGJvb2xlYW47XG59O1xuIiwiaW1wb3J0IHsgdHlwZSBDcmVhdGVOcG1EaXJzT3B0aW9ucyB9IGZyb20gJy4uL2RlZi9jcmVhdGUtbnBtLWRpcnMuanMnO1xuZXhwb3J0IGludGVyZmFjZSBQYWNrYWdlTWV0YSB7XG4gICAgJ2Rpc3QtdGFncyc6IHtcbiAgICAgICAgW2luZGV4OiBzdHJpbmddOiBzdHJpbmc7XG4gICAgfTtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZU5wbURpcnModXNlck9wdGlvbnM6IENyZWF0ZU5wbURpcnNPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiIsImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjbGlwYW5pb24nO1xuZXhwb3J0IGRlY2xhcmUgYWJzdHJhY3QgY2xhc3MgQmFzZU5ld0NvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBzdGF0aWMgcGF0aHM6IHN0cmluZ1tdW107XG4gICAgc3RhdGljIHVzYWdlOiBpbXBvcnQoXCJjbGlwYW5pb25cIikuVXNhZ2U7XG4gICAgJCRwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgJCRuYW1lPzogc3RyaW5nO1xuICAgIG1pbk5vZGVBcGlWZXJzaW9uOiBudW1iZXI7XG4gICAgcGFja2FnZU1hbmFnZXI6IHN0cmluZztcbiAgICBsaWNlbnNlOiBzdHJpbmc7XG4gICAgdGFyZ2V0czogc3RyaW5nW107XG4gICAgZW5hYmxlRGVmYXVsdFRhcmdldHM6IGJvb2xlYW47XG4gICAgZW5hYmxlQWxsVGFyZ2V0czogYm9vbGVhbjtcbiAgICBlbmFibGVUeXBlRGVmOiBib29sZWFuO1xuICAgIGVuYWJsZUdpdGh1YkFjdGlvbnM6IGJvb2xlYW47XG4gICAgdGVzdEZyYW1ld29yazogc3RyaW5nO1xuICAgIGRyeVJ1bjogYm9vbGVhbjtcbiAgICBnZXRPcHRpb25zKCk6IHtcbiAgICAgICAgcGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIG1pbk5vZGVBcGlWZXJzaW9uOiBudW1iZXI7XG4gICAgICAgIHBhY2thZ2VNYW5hZ2VyOiBzdHJpbmc7XG4gICAgICAgIGxpY2Vuc2U6IHN0cmluZztcbiAgICAgICAgdGFyZ2V0czogc3RyaW5nW107XG4gICAgICAgIGVuYWJsZURlZmF1bHRUYXJnZXRzOiBib29sZWFuO1xuICAgICAgICBlbmFibGVBbGxUYXJnZXRzOiBib29sZWFuO1xuICAgICAgICBlbmFibGVUeXBlRGVmOiBib29sZWFuO1xuICAgICAgICBlbmFibGVHaXRodWJBY3Rpb25zOiBib29sZWFuO1xuICAgICAgICB0ZXN0RnJhbWV3b3JrOiBzdHJpbmc7XG4gICAgICAgIGRyeVJ1bjogYm9vbGVhbjtcbiAgICB9O1xufVxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgcHJvamVjdCB3aXRoIHByZS1jb25maWd1cmVkIGJvaWxlcnBsYXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV3T3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogVGhlIHBhdGggd2hlcmUgdGhlIE5BUEktUlMgcHJvamVjdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAgICovXG4gICAgcGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvamVjdCwgZGVmYXVsdCB0byB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IGlmIG5vdCBwcm92aWRlZFxuICAgICAqL1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG1pbmltdW0gTm9kZS1BUEkgdmVyc2lvbiB0byBzdXBwb3J0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCA0XG4gICAgICovXG4gICAgbWluTm9kZUFwaVZlcnNpb24/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogVGhlIHBhY2thZ2UgbWFuYWdlciB0byB1c2UuIE9ubHkgc3VwcG9ydCB5YXJuIDQueCBmb3Igbm93LlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ3lhcm4nXG4gICAgICovXG4gICAgcGFja2FnZU1hbmFnZXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogTGljZW5zZSBmb3Igb3Blbi1zb3VyY2VkIHByb2plY3RcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICdNSVQnXG4gICAgICovXG4gICAgbGljZW5zZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBbGwgdGFyZ2V0cyB0aGUgY3JhdGUgd2lsbCBiZSBjb21waWxlZCBmb3IuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBbXVxuICAgICAqL1xuICAgIHRhcmdldHM/OiBzdHJpbmdbXTtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGVuYWJsZSBkZWZhdWx0IHRhcmdldHNcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBlbmFibGVEZWZhdWx0VGFyZ2V0cz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogV2hldGhlciBlbmFibGUgYWxsIHRhcmdldHNcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgZW5hYmxlQWxsVGFyZ2V0cz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogV2hldGhlciBlbmFibGUgdGhlIGB0eXBlLWRlZmAgZmVhdHVyZSBmb3IgdHlwZXNjcmlwdCBkZWZpbml0aW9ucyBhdXRvLWdlbmVyYXRpb25cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBlbmFibGVUeXBlRGVmPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGdlbmVyYXRlIHByZWNvbmZpZ3VyZWQgR2l0SHViIEFjdGlvbnMgd29ya2Zsb3dcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBlbmFibGVHaXRodWJBY3Rpb25zPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBUaGUgSmF2YVNjcmlwdCB0ZXN0IGZyYW1ld29yayB0byB1c2UsIG9ubHkgc3VwcG9ydCBgYXZhYCBmb3Igbm93XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnYXZhJ1xuICAgICAqL1xuICAgIHRlc3RGcmFtZXdvcms/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBydW4gdGhlIGNvbW1hbmQgaW4gZHJ5LXJ1biBtb2RlXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIGRyeVJ1bj86IGJvb2xlYW47XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseURlZmF1bHROZXdPcHRpb25zKG9wdGlvbnM6IE5ld09wdGlvbnMpOiB7XG4gICAgLyoqXG4gICAgICogVGhlIHBhdGggd2hlcmUgdGhlIE5BUEktUlMgcHJvamVjdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAgICovXG4gICAgcGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvamVjdCwgZGVmYXVsdCB0byB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IGlmIG5vdCBwcm92aWRlZFxuICAgICAqL1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgbWluTm9kZUFwaVZlcnNpb246IG51bWJlcjtcbiAgICBwYWNrYWdlTWFuYWdlcjogc3RyaW5nO1xuICAgIGxpY2Vuc2U6IHN0cmluZztcbiAgICB0YXJnZXRzOiBzdHJpbmdbXTtcbiAgICBlbmFibGVEZWZhdWx0VGFyZ2V0czogYm9vbGVhbjtcbiAgICBlbmFibGVBbGxUYXJnZXRzOiBib29sZWFuO1xuICAgIGVuYWJsZVR5cGVEZWY6IGJvb2xlYW47XG4gICAgZW5hYmxlR2l0aHViQWN0aW9uczogYm9vbGVhbjtcbiAgICB0ZXN0RnJhbWV3b3JrOiBzdHJpbmc7XG4gICAgZHJ5UnVuOiBib29sZWFuO1xufTtcbiIsImltcG9ydCB7IHR5cGUgTmV3T3B0aW9ucyBhcyBSYXdOZXdPcHRpb25zIH0gZnJvbSAnLi4vZGVmL25ldy5qcyc7XG50eXBlIE5ld09wdGlvbnMgPSBSZXF1aXJlZDxSYXdOZXdPcHRpb25zPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IEdFTkVSQVRFRF9XQVNJX0JJTkRJTkc6IFJlZ0V4cDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHVwZGF0ZUNhcmdvVG9tbE5vZGVBcGlWZXJzaW9uKGZpbGVQYXRoOiBzdHJpbmcsIG1pbk5vZGVBcGlWZXJzaW9uOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbmV3UHJvamVjdCh1c2VyT3B0aW9uczogUmF3TmV3T3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG5leHBvcnQgdHlwZSB7IE5ld09wdGlvbnMgfTtcbiIsImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjbGlwYW5pb24nO1xuZXhwb3J0IGRlY2xhcmUgYWJzdHJhY3QgY2xhc3MgQmFzZVByZVB1Ymxpc2hDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgdGFnU3R5bGU6IHN0cmluZztcbiAgICBnaFJlbGVhc2U6IGJvb2xlYW47XG4gICAgZ2hSZWxlYXNlTmFtZT86IHN0cmluZztcbiAgICBnaFJlbGVhc2VJZD86IHN0cmluZztcbiAgICBza2lwT3B0aW9uYWxQdWJsaXNoOiBib29sZWFuO1xuICAgIHJvb3RQdWJsaXNoZXI/OiAnbnBtJyB8ICdwbnBtJyB8ICd5YXJuJyB8ICd5YXJuLWNsYXNzaWMnO1xuICAgIGRyeVJ1bjogYm9vbGVhbjtcbiAgICBnZXRPcHRpb25zKCk6IHtcbiAgICAgICAgY3dkOiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZ1BhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgICAgIG5wbURpcjogc3RyaW5nO1xuICAgICAgICB0YWdTdHlsZTogc3RyaW5nO1xuICAgICAgICBnaFJlbGVhc2U6IGJvb2xlYW47XG4gICAgICAgIGdoUmVsZWFzZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgZ2hSZWxlYXNlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgc2tpcE9wdGlvbmFsUHVibGlzaDogYm9vbGVhbjtcbiAgICAgICAgcm9vdFB1Ymxpc2hlcjogXCJ5YXJuXCIgfCBcInBucG1cIiB8IFwibnBtXCIgfCBcInlhcm4tY2xhc3NpY1wiIHwgdW5kZWZpbmVkO1xuICAgICAgICBkcnlSdW46IGJvb2xlYW47XG4gICAgfTtcbn1cbi8qKlxuICogVXBkYXRlIHBhY2thZ2UuanNvbiBhbmQgY29weSBhZGRvbnMgaW50byBwZXIgcGxhdGZvcm0gcGFja2FnZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmVQdWJsaXNoT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9mIHdoZXJlIG5hcGkgY29tbWFuZCB3aWxsIGJlIGV4ZWN1dGVkIGluLCBhbGwgb3RoZXIgcGF0aHMgb3B0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhpcyBwYXRoXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBwcm9jZXNzLmN3ZCgpXG4gICAgICovXG4gICAgY3dkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYHBhY2thZ2UuanNvbmBcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICdwYWNrYWdlLmpzb24nXG4gICAgICovXG4gICAgcGFja2FnZUpzb25QYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gdGhlIGZvbGRlciB3aGVyZSB0aGUgbnBtIHBhY2thZ2VzIHB1dFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ25wbSdcbiAgICAgKi9cbiAgICBucG1EaXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogZ2l0IHRhZyBzdHlsZSwgYG5wbWAgb3IgYGxlcm5hYFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ2xlcm5hJ1xuICAgICAqL1xuICAgIHRhZ1N0eWxlPzogJ25wbScgfCAnbGVybmEnO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgY3JlYXRlIEdpdEh1YiByZWxlYXNlXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZ2hSZWxlYXNlPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBHaXRIdWIgcmVsZWFzZSBuYW1lXG4gICAgICovXG4gICAgZ2hSZWxlYXNlTmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBFeGlzdGluZyBHaXRIdWIgcmVsZWFzZSBpZFxuICAgICAqL1xuICAgIGdoUmVsZWFzZUlkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgc2tpcCBvcHRpb25hbERlcGVuZGVuY2llcyBwYWNrYWdlcyBwdWJsaXNoXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHNraXBPcHRpb25hbFB1Ymxpc2g/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRoZSBwYWNrYWdlIG1hbmFnZXIgdGhhdCBwdWJsaXNoZXMgdGhlIHJvb3QgcGFja2FnZS4gcG5wbSBhbmQgeWFybiBiZXJyeSByZXBsYWNlIGBleHBvcnRzYCB3aXRoIGBwdWJsaXNoQ29uZmlnLmV4cG9ydHNgIHdoaWxlIHBhY2tpbmcsIHNvIGZvciB0aGVtIHRoZSByb290IHBhY2thZ2UgdmFsaWRhdGlvbiB0YXJnZXRzIHRoZSBwdWJsaXNoLWVmZmVjdGl2ZSBleHBvcnQgbWFwLiBEZWZhdWx0cyB0byB0aGUgYG5hcGkucm9vdFB1Ymxpc2hlcmAgY29uZmlnIGZpZWxkLCBhbmQgdmFsaWRhdGVzIGJvdGggZXhwb3J0IG1hcHMgd2hlbiBuZWl0aGVyIGlzIHNldFxuICAgICAqL1xuICAgIHJvb3RQdWJsaXNoZXI/OiAnbnBtJyB8ICdwbnBtJyB8ICd5YXJuJyB8ICd5YXJuLWNsYXNzaWMnO1xuICAgIC8qKlxuICAgICAqIERyeSBydW4gd2l0aG91dCB0b3VjaGluZyBmaWxlIHN5c3RlbVxuICAgICAqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBkcnlSdW4/OiBib29sZWFuO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYXBwbHlEZWZhdWx0UHJlUHVibGlzaE9wdGlvbnMob3B0aW9uczogUHJlUHVibGlzaE9wdGlvbnMpOiB7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgdGFnU3R5bGU6IHN0cmluZztcbiAgICBnaFJlbGVhc2U6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogR2l0SHViIHJlbGVhc2UgbmFtZVxuICAgICAqL1xuICAgIGdoUmVsZWFzZU5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogRXhpc3RpbmcgR2l0SHViIHJlbGVhc2UgaWRcbiAgICAgKi9cbiAgICBnaFJlbGVhc2VJZD86IHN0cmluZztcbiAgICBza2lwT3B0aW9uYWxQdWJsaXNoOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRoZSBwYWNrYWdlIG1hbmFnZXIgdGhhdCBwdWJsaXNoZXMgdGhlIHJvb3QgcGFja2FnZS4gcG5wbSBhbmQgeWFybiBiZXJyeSByZXBsYWNlIGBleHBvcnRzYCB3aXRoIGBwdWJsaXNoQ29uZmlnLmV4cG9ydHNgIHdoaWxlIHBhY2tpbmcsIHNvIGZvciB0aGVtIHRoZSByb290IHBhY2thZ2UgdmFsaWRhdGlvbiB0YXJnZXRzIHRoZSBwdWJsaXNoLWVmZmVjdGl2ZSBleHBvcnQgbWFwLiBEZWZhdWx0cyB0byB0aGUgYG5hcGkucm9vdFB1Ymxpc2hlcmAgY29uZmlnIGZpZWxkLCBhbmQgdmFsaWRhdGVzIGJvdGggZXhwb3J0IG1hcHMgd2hlbiBuZWl0aGVyIGlzIHNldFxuICAgICAqL1xuICAgIHJvb3RQdWJsaXNoZXI/OiBcIm5wbVwiIHwgXCJwbnBtXCIgfCBcInlhcm5cIiB8IFwieWFybi1jbGFzc2ljXCI7XG4gICAgZHJ5UnVuOiBib29sZWFuO1xufTtcbiIsImltcG9ydCB7IHR5cGUgUHJlUHVibGlzaE9wdGlvbnMgfSBmcm9tICcuLi9kZWYvcHJlLXB1Ymxpc2guanMnO1xuaW1wb3J0IHsgdHlwZSBDb21tb25QYWNrYWdlSnNvbkZpZWxkcywgdHlwZSBSb290UHVibGlzaGVyLCB0eXBlIFRhcmdldCwgdHlwZSBVc2VyTmFwaUNvbmZpZyB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcbi8qKlxuICogQnVpbGQgdGhlIHJvb3QgcGFja2FnZSdzIGBvcHRpb25hbERlcGVuZGVuY2llc2AgbWFwLlxuICpcbiAqIEEgV0FTSSBwYWNrYWdlIGlzIGEgZmFsbGJhY2sgZm9yIGhvc3RzIHRoYXQgY2Fubm90IGxvYWQgYSBgLm5vZGVgIGJpbmFyeSwgYW5kXG4gKiB0aGUgZ2VuZXJhdGVkIGJpbmRpbmcgbG9hZGVyIHNlbGVjdHMgaXQgYXQgcmVxdWlyZSB0aW1lIHJhdGhlciB0aGFuIG5wbVxuICogc2VsZWN0aW5nIGl0IGF0IGluc3RhbGwgdGltZS4gRGVjbGFyaW5nIGl0IGFzIGFuIGBvcHRpb25hbERlcGVuZGVuY3lgXG4gKiBhbG9uZ3NpZGUgdGhlIG5hdGl2ZSBwYWNrYWdlcyBjYW5ub3QgZXhwcmVzcyBcImluc3RhbGwgdGhpcyBvbmx5IHdoZW4gbm90aGluZ1xuICogZWxzZSBtYXRjaGVkXCI6IG5wbSBldmFsdWF0ZXMgZXZlcnkgZW50cnkgaW5kZXBlbmRlbnRseSwgc28gZXZlcnkgY29uc3VtZXJcbiAqIGRvd25sb2FkcyBhIGAud2FzbWAgYmluYXJ5IHRoZXkgd2lsbCBuZXZlciBsb2FkLlxuICpcbiAqIEl0IGlzIHRoZXJlZm9yZSBvbmx5IGRlY2xhcmVkIHdoZW4gV0FTSSBpcyB0aGUgb25seSBjb25maWd1cmVkIHRhcmdldCwgd2hpY2hcbiAqIG1ha2VzIGl0IHRoZSBwcmltYXJ5IGFydGlmYWN0IHJhdGhlciB0aGFuIGEgZmFsbGJhY2suXG4gKiBgbmFwaS53YXNtLm9wdGlvbmFsRGVwZW5kZW5jeWAgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGluIGJvdGggZGlyZWN0aW9ucy5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JvbGxkb3duL3JvbGxkb3duL2lzc3Vlcy8xMDU1NlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByZXNvbHZlUm9vdE9wdGlvbmFsRGVwZW5kZW5jaWVzKHsgZXhpc3RpbmcsIG1hbmFnZWRQYWNrYWdlTmFtZXMsIHBhY2thZ2VOYW1lLCB0YXJnZXRzLCB2ZXJzaW9uLCB3YXNtLCB9OiB7XG4gICAgZXhpc3Rpbmc6IHVua25vd247XG4gICAgbWFuYWdlZFBhY2thZ2VOYW1lczogSXRlcmFibGU8c3RyaW5nPjtcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nO1xuICAgIHRhcmdldHM6IFRhcmdldFtdO1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICB3YXNtPzogVXNlck5hcGlDb25maWdbJ3dhc20nXTtcbn0pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHByZVB1Ymxpc2godXNlck9wdGlvbnM6IFByZVB1Ymxpc2hPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbmludGVyZmFjZSBUaHJlYWRsZXNzV2FzaVJvb3RGYWNhZGUge1xuICAgIGV4cG9ydHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHB1Ymxpc2hDb25maWdFeHBvcnRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZ2VuZXJhdGVkRmlsZXM6IHN0cmluZ1tdO1xuICAgIGZpbGVzOiBUaHJlYWRsZXNzV2FzaVJvb3RGYWNhZGVGaWxlcztcbiAgICB3YXNtU291cmNlUGF0aDogc3RyaW5nO1xuICAgIG1hcmtlcjogc3RyaW5nO1xuICAgIGZvcndhcmRpbmdNb2R1bGU6IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblVwZGF0ZToge1xuICAgICAgICBmaWxlcz86IHN0cmluZ1tdO1xuICAgIH07XG59XG5pbnRlcmZhY2UgVGhyZWFkbGVzc1dhc2lSb290RmFjYWRlRmlsZXMge1xuICAgIHdvcmtlcmRFbnRyeTogc3RyaW5nO1xuICAgIHdvcmtlcmRUeXBlRGVmOiBzdHJpbmc7XG4gICAgd2FzbUVudHJ5OiBzdHJpbmc7XG4gICAgd2FzbVR5cGVEZWY6IHN0cmluZztcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJvb3RQdWJsaXNoZXJSZXdyaXRlc1Jvb3RFeHBvcnRzKHJvb3RQdWJsaXNoZXI6IFJvb3RQdWJsaXNoZXIgfCB1bmRlZmluZWQpOiBib29sZWFuO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcmVzb2x2ZVJvb3RQdWJsaXNoZXIob3B0aW9uVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgY29uZmlnVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFJvb3RQdWJsaXNoZXIgfCB1bmRlZmluZWQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzbmlmZlJld3JpdGluZ1B1Ymxpc2hlckZyb21Vc2VyQWdlbnQodXNlckFnZW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkKTogJ3BucG0nIHwgJ3lhcm4nIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcm9vdFB1Ymxpc2hlckhpbnQocm9vdFB1Ymxpc2hlcjogUm9vdFB1Ymxpc2hlciB8IHVuZGVmaW5lZCwgdXNlckFnZW50Pzogc3RyaW5nKTogc3RyaW5nO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY29sbGVjdFJvb3RQYWNrYWdlUGF0aFJlZmVyZW5jZXMocGFja2FnZUpzb246IENvbW1vblBhY2thZ2VKc29uRmllbGRzLCByb290UHVibGlzaGVyPzogUm9vdFB1Ymxpc2hlcik6IHN0cmluZ1tdO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcGFyc2VOcG1QYWNrRmlsZXMob3V0cHV0OiBzdHJpbmcpOiBTZXQ8c3RyaW5nPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHZhbGlkYXRlUm9vdEZhY2FkZVBhY2tsaXN0KHJvb3REaXI6IHN0cmluZywgcm9vdFBhY2thZ2VGaWxlczogc3RyaW5nW10sIHJvb3RQdWJsaXNoZXI/OiBSb290UHVibGlzaGVyKTogdm9pZDtcbmludGVyZmFjZSBSb290UmVsZWFzZU1hdGVyaWFsaXphdGlvblBsYW4ge1xuICAgIHBhY2thZ2VKc29uOiBDb21tb25QYWNrYWdlSnNvbkZpZWxkcztcbiAgICBvcHRpb25hbERlcGVuZGVuY2llczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgbm9kZUVuZ2luZT86IHN0cmluZztcbiAgICBmYWNhZGU/OiBUaHJlYWRsZXNzV2FzaVJvb3RGYWNhZGU7XG4gICAgc3RhbGVHZW5lcmF0ZWRGaWxlczogc3RyaW5nW107XG4gICAgcm9vdFB1Ymxpc2hlcj86IFJvb3RQdWJsaXNoZXI7XG59XG5pbnRlcmZhY2UgUmVsZWFzZVBhY2thZ2VWYWxpZGF0aW9uT3B0aW9ucyB7XG4gICAgcGtnRGlyOiBzdHJpbmc7XG4gICAgcm9vdERpcjogc3RyaW5nO1xuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmc7XG4gICAgYmluYXJ5TmFtZTogc3RyaW5nO1xuICAgIHRhcmdldDogVGFyZ2V0O1xuICAgIHJlcXVpcmVEaXJlY3RCdWZmZXJEZXBlbmRlbmN5OiBib29sZWFuO1xufVxuaW50ZXJmYWNlIFJlbGVhc2VQYWNrYWdlTWF0ZXJpYWxpemF0aW9uUGxhbiB7XG4gICAgdGFyZ2V0OiBUYXJnZXQ7XG4gICAgcGtnRGlyOiBzdHJpbmc7XG4gICAgcm9vdERpcjogc3RyaW5nO1xuICAgIHN0YWdlZFBrZ0Rpcj86IHN0cmluZztcbiAgICBwYWNrYWdlRmlsZXM6IHN0cmluZ1tdO1xuICAgIGRlY2xhcmF0aW9uRGVwZW5kZW5jaWVzOiBzdHJpbmdbXTtcbiAgICB1cGRhdGVNYW5pZmVzdDogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBDb21taXRQcmVQdWJsaXNoRmlsZVN5c3RlbVRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgcmVsZWFzZVBhY2thZ2VQbGFuczogUmVsZWFzZVBhY2thZ2VNYXRlcmlhbGl6YXRpb25QbGFuW107XG4gICAgcm9vdERpcjogc3RyaW5nO1xuICAgIHJvb3RSZWxlYXNlUGxhbjogUm9vdFJlbGVhc2VNYXRlcmlhbGl6YXRpb25QbGFuO1xuICAgIHN0YWdlZFJvb3RNYW5pZmVzdFBhdGg/OiBzdHJpbmc7XG4gICAgc3RhZ2VkUm9vdERpcjogc3RyaW5nO1xuICAgIHRyYW5zYWN0aW9uUm9vdD86IHN0cmluZztcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNvbW1pdFByZVB1Ymxpc2hGaWxlU3lzdGVtVHJhbnNhY3Rpb24oeyBwYWNrYWdlSnNvblBhdGgsIHJlbGVhc2VQYWNrYWdlUGxhbnMsIHJvb3REaXIsIHJvb3RSZWxlYXNlUGxhbiwgc3RhZ2VkUm9vdERpciwgc3RhZ2VkUm9vdE1hbmlmZXN0UGF0aCwgdHJhbnNhY3Rpb25Sb290LCB9OiBDb21taXRQcmVQdWJsaXNoRmlsZVN5c3RlbVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB2YWxpZGF0ZVJlbGVhc2VQYWNrYWdlQ29udGVudHMoeyBwa2dEaXIsIHJvb3REaXIsIHBhY2thZ2VOYW1lLCBiaW5hcnlOYW1lLCB0YXJnZXQsIHJlcXVpcmVEaXJlY3RCdWZmZXJEZXBlbmRlbmN5LCB9OiBSZWxlYXNlUGFja2FnZVZhbGlkYXRpb25PcHRpb25zKTogUHJvbWlzZTx7XG4gICAgcGFja2FnZUZpbGVzOiBzdHJpbmdbXTtcbiAgICBkZWNsYXJhdGlvbkRlcGVuZGVuY2llczogc3RyaW5nW107XG4gICAgdXBkYXRlTWFuaWZlc3Q6IGJvb2xlYW47XG59PjtcbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjbGlwYW5pb24nO1xuZXhwb3J0IGRlY2xhcmUgYWJzdHJhY3QgY2xhc3MgQmFzZVJlbmFtZUNvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBzdGF0aWMgcGF0aHM6IHN0cmluZ1tdW107XG4gICAgc3RhdGljIHVzYWdlOiBpbXBvcnQoXCJjbGlwYW5pb25cIikuVXNhZ2U7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICBucG1EaXI6IHN0cmluZztcbiAgICAkJG5hbWU/OiBzdHJpbmc7XG4gICAgYmluYXJ5TmFtZT86IHN0cmluZztcbiAgICBwYWNrYWdlTmFtZT86IHN0cmluZztcbiAgICBtYW5pZmVzdFBhdGg6IHN0cmluZztcbiAgICByZXBvc2l0b3J5Pzogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIGdldE9wdGlvbnMoKToge1xuICAgICAgICBjd2Q6IHN0cmluZztcbiAgICAgICAgY29uZmlnUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICAgICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgICAgIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgYmluYXJ5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwYWNrYWdlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBtYW5pZmVzdFBhdGg6IHN0cmluZztcbiAgICAgICAgcmVwb3NpdG9yeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIH07XG59XG4vKipcbiAqIFJlbmFtZSB0aGUgTkFQSS1SUyBwcm9qZWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuYW1lT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9mIHdoZXJlIG5hcGkgY29tbWFuZCB3aWxsIGJlIGV4ZWN1dGVkIGluLCBhbGwgb3RoZXIgcGF0aHMgb3B0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhpcyBwYXRoXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBwcm9jZXNzLmN3ZCgpXG4gICAgICovXG4gICAgY3dkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYHBhY2thZ2UuanNvbmBcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICdwYWNrYWdlLmpzb24nXG4gICAgICovXG4gICAgcGFja2FnZUpzb25QYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gdGhlIGZvbGRlciB3aGVyZSB0aGUgbnBtIHBhY2thZ2VzIHB1dFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ25wbSdcbiAgICAgKi9cbiAgICBucG1EaXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5ldyBuYW1lIG9mIHRoZSBwcm9qZWN0XG4gICAgICovXG4gICAgbmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IGJpbmFyeSBuYW1lICoubm9kZSBmaWxlc1xuICAgICAqL1xuICAgIGJpbmFyeU5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5ldyBwYWNrYWdlIG5hbWUgb2YgdGhlIHByb2plY3RcbiAgICAgKi9cbiAgICBwYWNrYWdlTmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBDYXJnby50b21sYFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ0NhcmdvLnRvbWwnXG4gICAgICovXG4gICAgbWFuaWZlc3RQYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgcmVwb3NpdG9yeSBvZiB0aGUgcHJvamVjdFxuICAgICAqL1xuICAgIHJlcG9zaXRvcnk/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5ldyBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvamVjdFxuICAgICAqL1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYXBwbHlEZWZhdWx0UmVuYW1lT3B0aW9ucyhvcHRpb25zOiBSZW5hbWVPcHRpb25zKToge1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG5wbURpcjogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgbmFtZSBvZiB0aGUgcHJvamVjdFxuICAgICAqL1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5ldyBiaW5hcnkgbmFtZSAqLm5vZGUgZmlsZXNcbiAgICAgKi9cbiAgICBiaW5hcnlOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgcGFja2FnZSBuYW1lIG9mIHRoZSBwcm9qZWN0XG4gICAgICovXG4gICAgcGFja2FnZU5hbWU/OiBzdHJpbmc7XG4gICAgbWFuaWZlc3RQYXRoOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5ldyByZXBvc2l0b3J5IG9mIHRoZSBwcm9qZWN0XG4gICAgICovXG4gICAgcmVwb3NpdG9yeT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9qZWN0XG4gICAgICovXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59O1xuIiwiaW1wb3J0IHsgdHlwZSBSZW5hbWVPcHRpb25zIH0gZnJvbSAnLi4vZGVmL3JlbmFtZS5qcyc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByZW5hbWVQcm9qZWN0KHVzZXJPcHRpb25zOiBSZW5hbWVPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiIsImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjbGlwYW5pb24nO1xuZXhwb3J0IGRlY2xhcmUgYWJzdHJhY3QgY2xhc3MgQmFzZVVuaXZlcnNhbGl6ZUNvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBzdGF0aWMgcGF0aHM6IHN0cmluZ1tdW107XG4gICAgc3RhdGljIHVzYWdlOiBpbXBvcnQoXCJjbGlwYW5pb25cIikuVXNhZ2U7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICBvdXRwdXREaXI6IHN0cmluZztcbiAgICBnZXRPcHRpb25zKCk6IHtcbiAgICAgICAgY3dkOiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZ1BhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgICAgIG91dHB1dERpcjogc3RyaW5nO1xuICAgIH07XG59XG4vKipcbiAqIENvbWJpbGUgYnVpbHQgYmluYXJpZXMgaW50byBvbmUgdW5pdmVyc2FsIGJpbmFyeVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuaXZlcnNhbGl6ZU9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiB3aGVyZSBuYXBpIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbiwgYWxsIG90aGVyIHBhdGhzIG9wdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgcGF0aFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgcHJvY2Vzcy5jd2QoKVxuICAgICAqL1xuICAgIGN3ZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBwYWNrYWdlLmpzb25gXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAncGFja2FnZS5qc29uJ1xuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHRoZSBmb2xkZXIgd2hlcmUgYWxsIGJ1aWx0IGAubm9kZWAgZmlsZXMgcHV0LCBzYW1lIGFzIGAtLW91dHB1dC1kaXJgIG9mIGJ1aWxkIGNvbW1hbmRcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICcuLydcbiAgICAgKi9cbiAgICBvdXRwdXREaXI/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseURlZmF1bHRVbml2ZXJzYWxpemVPcHRpb25zKG9wdGlvbnM6IFVuaXZlcnNhbGl6ZU9wdGlvbnMpOiB7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgb3V0cHV0RGlyOiBzdHJpbmc7XG59O1xuIiwiaW1wb3J0IHsgdHlwZSBVbml2ZXJzYWxpemVPcHRpb25zIH0gZnJvbSAnLi4vZGVmL3VuaXZlcnNhbGl6ZS5qcyc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1bml2ZXJzYWxpemVCaW5hcmllcyh1c2VyT3B0aW9uczogVW5pdmVyc2FsaXplT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4iLCJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VWZXJzaW9uQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIHN0YXRpYyBwYXRoczogc3RyaW5nW11bXTtcbiAgICBzdGF0aWMgdXNhZ2U6IGltcG9ydChcImNsaXBhbmlvblwiKS5Vc2FnZTtcbiAgICBjd2Q6IHN0cmluZztcbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG5wbURpcjogc3RyaW5nO1xuICAgIGdldE9wdGlvbnMoKToge1xuICAgICAgICBjd2Q6IHN0cmluZztcbiAgICAgICAgY29uZmlnUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICAgICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgfTtcbn1cbi8qKlxuICogVXBkYXRlIHZlcnNpb24gaW4gY3JlYXRlZCBucG0gcGFja2FnZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJzaW9uT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9mIHdoZXJlIG5hcGkgY29tbWFuZCB3aWxsIGJlIGV4ZWN1dGVkIGluLCBhbGwgb3RoZXIgcGF0aHMgb3B0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhpcyBwYXRoXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBwcm9jZXNzLmN3ZCgpXG4gICAgICovXG4gICAgY3dkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYHBhY2thZ2UuanNvbmBcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICdwYWNrYWdlLmpzb24nXG4gICAgICovXG4gICAgcGFja2FnZUpzb25QYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gdGhlIGZvbGRlciB3aGVyZSB0aGUgbnBtIHBhY2thZ2VzIHB1dFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ25wbSdcbiAgICAgKi9cbiAgICBucG1EaXI/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseURlZmF1bHRWZXJzaW9uT3B0aW9ucyhvcHRpb25zOiBWZXJzaW9uT3B0aW9ucyk6IHtcbiAgICBjd2Q6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICBucG1EaXI6IHN0cmluZztcbn07XG4iLCJpbXBvcnQgeyB0eXBlIFZlcnNpb25PcHRpb25zIH0gZnJvbSAnLi4vZGVmL3ZlcnNpb24uanMnO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdmVyc2lvbih1c2VyT3B0aW9uczogVmVyc2lvbk9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuIiwiaW1wb3J0IHsgQmFzZUFydGlmYWN0c0NvbW1hbmQgfSBmcm9tICcuLi9kZWYvYXJ0aWZhY3RzLmpzJztcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIEFydGlmYWN0c0NvbW1hbmQgZXh0ZW5kcyBCYXNlQXJ0aWZhY3RzQ29tbWFuZCB7XG4gICAgc3RhdGljIHVzYWdlOiBpbXBvcnQoXCJjbGlwYW5pb25cIikuVXNhZ2U7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIGV4ZWN1dGUoKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB7IEJhc2VCdWlsZENvbW1hbmQgfSBmcm9tICcuLi9kZWYvYnVpbGQuanMnO1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgQnVpbGRDb21tYW5kIGV4dGVuZHMgQmFzZUJ1aWxkQ29tbWFuZCB7XG4gICAgcGlwZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNhcmdvT3B0aW9uczogc3RyaW5nW107XG4gICAgZXhlY3V0ZSgpOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IHsgQmFzZUNyZWF0ZU5wbURpcnNDb21tYW5kIH0gZnJvbSAnLi4vZGVmL2NyZWF0ZS1ucG0tZGlycy5qcyc7XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBDcmVhdGVOcG1EaXJzQ29tbWFuZCBleHRlbmRzIEJhc2VDcmVhdGVOcG1EaXJzQ29tbWFuZCB7XG4gICAgZXhlY3V0ZSgpOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IHsgQmFzZU5ld0NvbW1hbmQgfSBmcm9tICcuLi9kZWYvbmV3LmpzJztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGdldE5hcGlWZXJzaW9uQ2hvaWNlcygpOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZhbHVlOiBpbXBvcnQoXCIuLi91dGlscy92ZXJzaW9uLmpzXCIpLk5hcGlWZXJzaW9uO1xufVtdO1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgTmV3Q29tbWFuZCBleHRlbmRzIEJhc2VOZXdDb21tYW5kIHtcbiAgICBpbnRlcmFjdGl2ZTogYm9vbGVhbjtcbiAgICBleGVjdXRlKCk6IFByb21pc2U8MCB8IDE+O1xuICAgIHByaXZhdGUgZmV0Y2hPcHRpb25zO1xuICAgIHByaXZhdGUgZmV0Y2hOYW1lO1xuICAgIHByaXZhdGUgZmV0Y2hMaWNlbnNlO1xuICAgIHByaXZhdGUgZmV0Y2hOYXBpVmVyc2lvbjtcbiAgICBwcml2YXRlIGZldGNoVGFyZ2V0cztcbiAgICBwcml2YXRlIGZldGNoVHlwZURlZjtcbiAgICBwcml2YXRlIGZldGNoR2l0aHViQWN0aW9ucztcbn1cbiIsImltcG9ydCB7IEJhc2VQcmVQdWJsaXNoQ29tbWFuZCB9IGZyb20gJy4uL2RlZi9wcmUtcHVibGlzaC5qcyc7XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBQcmVQdWJsaXNoQ29tbWFuZCBleHRlbmRzIEJhc2VQcmVQdWJsaXNoQ29tbWFuZCB7XG4gICAgZXhlY3V0ZSgpOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IHsgQmFzZVJlbmFtZUNvbW1hbmQgfSBmcm9tICcuLi9kZWYvcmVuYW1lLmpzJztcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIFJlbmFtZUNvbW1hbmQgZXh0ZW5kcyBCYXNlUmVuYW1lQ29tbWFuZCB7XG4gICAgZXhlY3V0ZSgpOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IHsgQmFzZVVuaXZlcnNhbGl6ZUNvbW1hbmQgfSBmcm9tICcuLi9kZWYvdW5pdmVyc2FsaXplLmpzJztcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIFVuaXZlcnNhbGl6ZUNvbW1hbmQgZXh0ZW5kcyBCYXNlVW5pdmVyc2FsaXplQ29tbWFuZCB7XG4gICAgZXhlY3V0ZSgpOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IHsgQmFzZVZlcnNpb25Db21tYW5kIH0gZnJvbSAnLi4vZGVmL3ZlcnNpb24uanMnO1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgVmVyc2lvbkNvbW1hbmQgZXh0ZW5kcyBCYXNlVmVyc2lvbkNvbW1hbmQge1xuICAgIGV4ZWN1dGUoKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB7IENsaSB9IGZyb20gJ2NsaXBhbmlvbic7XG5pbXBvcnQgeyBjb2xsZWN0QXJ0aWZhY3RzIH0gZnJvbSAnLi9hcGkvYXJ0aWZhY3RzLmpzJztcbmltcG9ydCB7IGJ1aWxkUHJvamVjdCB9IGZyb20gJy4vYXBpL2J1aWxkLmpzJztcbmltcG9ydCB7IGNyZWF0ZU5wbURpcnMgfSBmcm9tICcuL2FwaS9jcmVhdGUtbnBtLWRpcnMuanMnO1xuaW1wb3J0IHsgbmV3UHJvamVjdCB9IGZyb20gJy4vYXBpL25ldy5qcyc7XG5pbXBvcnQgeyBwcmVQdWJsaXNoIH0gZnJvbSAnLi9hcGkvcHJlLXB1Ymxpc2guanMnO1xuaW1wb3J0IHsgcmVuYW1lUHJvamVjdCB9IGZyb20gJy4vYXBpL3JlbmFtZS5qcyc7XG5pbXBvcnQgeyB1bml2ZXJzYWxpemVCaW5hcmllcyB9IGZyb20gJy4vYXBpL3VuaXZlcnNhbGl6ZS5qcyc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi9hcGkvdmVyc2lvbi5qcyc7XG5pbXBvcnQgeyBBcnRpZmFjdHNDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy9hcnRpZmFjdHMuanMnO1xuaW1wb3J0IHsgQnVpbGRDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy9idWlsZC5qcyc7XG5pbXBvcnQgeyBDcmVhdGVOcG1EaXJzQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvY3JlYXRlLW5wbS1kaXJzLmpzJztcbmltcG9ydCB7IE5ld0NvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL25ldy5qcyc7XG5pbXBvcnQgeyBQcmVQdWJsaXNoQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvcHJlLXB1Ymxpc2guanMnO1xuaW1wb3J0IHsgUmVuYW1lQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvcmVuYW1lLmpzJztcbmltcG9ydCB7IFVuaXZlcnNhbGl6ZUNvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL3VuaXZlcnNhbGl6ZS5qcyc7XG5pbXBvcnQgeyBWZXJzaW9uQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvdmVyc2lvbi5qcyc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBjbGk6IENsaTxpbXBvcnQoXCJjbGlwYW5pb25cIikuQmFzZUNvbnRleHQ+O1xuLyoqXG4gKlxuICogQHVzYWdlXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IGNsaSA9IG5ldyBOYXBpQ2xpKClcbiAqXG4gKiBjbGkuYnVpbGQoe1xuICogICBjd2Q6ICcvcGF0aC90by95b3VyL3Byb2plY3QnLFxuICogfSlcbiAqIGBgYFxuICovXG5leHBvcnQgZGVjbGFyZSBjbGFzcyBOYXBpQ2xpIHtcbiAgICBhcnRpZmFjdHM6IHR5cGVvZiBjb2xsZWN0QXJ0aWZhY3RzO1xuICAgIG5ldzogdHlwZW9mIG5ld1Byb2plY3Q7XG4gICAgYnVpbGQ6IHR5cGVvZiBidWlsZFByb2plY3Q7XG4gICAgY3JlYXRlTnBtRGlyczogdHlwZW9mIGNyZWF0ZU5wbURpcnM7XG4gICAgcHJlUHVibGlzaDogdHlwZW9mIHByZVB1Ymxpc2g7XG4gICAgcmVuYW1lOiB0eXBlb2YgcmVuYW1lUHJvamVjdDtcbiAgICB1bml2ZXJzYWxpemU6IHR5cGVvZiB1bml2ZXJzYWxpemVCaW5hcmllcztcbiAgICB2ZXJzaW9uOiB0eXBlb2YgdmVyc2lvbjtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZUJ1aWxkQ29tbWFuZChhcmdzOiBzdHJpbmdbXSk6IEJ1aWxkQ29tbWFuZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZUFydGlmYWN0c0NvbW1hbmQoYXJnczogc3RyaW5nW10pOiBBcnRpZmFjdHNDb21tYW5kO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlQ3JlYXRlTnBtRGlyc0NvbW1hbmQoYXJnczogc3RyaW5nW10pOiBDcmVhdGVOcG1EaXJzQ29tbWFuZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZVByZVB1Ymxpc2hDb21tYW5kKGFyZ3M6IHN0cmluZ1tdKTogUHJlUHVibGlzaENvbW1hbmQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVSZW5hbWVDb21tYW5kKGFyZ3M6IHN0cmluZ1tdKTogUmVuYW1lQ29tbWFuZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZVVuaXZlcnNhbGl6ZUNvbW1hbmQoYXJnczogc3RyaW5nW10pOiBVbml2ZXJzYWxpemVDb21tYW5kO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlVmVyc2lvbkNvbW1hbmQoYXJnczogc3RyaW5nW10pOiBWZXJzaW9uQ29tbWFuZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZU5ld0NvbW1hbmQoYXJnczogc3RyaW5nW10pOiBOZXdDb21tYW5kO1xuZXhwb3J0IHsgcGFyc2VUcmlwbGUgfSBmcm9tICcuL3V0aWxzL3RhcmdldC5qcyc7XG5leHBvcnQgeyB0eXBlIEdlbmVyYXRlVHlwZURlZk9wdGlvbnMsIHR5cGUgV3JpdGVKc0JpbmRpbmdPcHRpb25zLCB3cml0ZUpzQmluZGluZywgZ2VuZXJhdGVUeXBlRGVmLCB9IGZyb20gJy4vYXBpL2J1aWxkLmpzJztcbmV4cG9ydCB7IHJlYWROYXBpQ29uZmlnIH0gZnJvbSAnLi91dGlscy9jb25maWcuanMnO1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFDQSxJQUFXLENBQUMsd0JBQXdCO0NBQUM7T0FBVyxDQUFDLE9BQU87Q0FBRztFQUFDO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7Q0FBRTtBQUFDO0FBQy9ILElBQVcsQ0FBQyxvQkFBb0I7Q0FBQztPQUFXLENBQUM7Q0FBRztFQUFDO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtDQUFFO0FBQUM7Ozs7QUNEeEUsSUFBVyxDQUFDLG9CQUFvQjtDQUFDO09BQVUsQ0FBQyxrQkFBa0IsT0FBTztDQUFHO0VBQUM7RUFBSTtFQUFJO0NBQUU7QUFBQzs7OztBQ0FwRixJQUFXLENBQUMsb0JBQW9CO0NBQUM7T0FBVyxDQUFDLE9BQU87Q0FBRztFQUFDO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0NBQUU7QUFBQztBQUMzVixJQUFXLENBQUNBLGtCQUFnQjtDQUFDO09BQVcsQ0FBQztDQUFHO0VBQUM7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7Q0FBRTtBQUFDOzs7O0FDRnBMLElBQUksQ0FBQyxNQUFNO0NBQUM7T0FBVztFQUFDO0VBQVMsUUFBUTtFQUFPO0VBQVMsUUFBUTtFQUFPO0VBQVMsUUFBUTtDQUFLO0NBQUc7RUFBQztFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtDQUFFO0NBQUcsV0FBVyxFQUFFO0FBQUM7Ozs7QUNBekosSUFBVyxDQUFDLFlBQVk7Q0FBQztPQUFVLENBQUMsUUFBUSxPQUFPLFFBQVE7Q0FBRyxDQUFDLElBQUksRUFBRTtBQUFDO0FBTXRFLElBQUksQ0FBQyxjQUFjO0NBQUM7T0FBVSxDQUFD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
|